{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../node_modules/notify.js/notify.js","webpack:///./polyfills.js","webpack:///../node_modules/immutable/dist/immutable.js","webpack:///./Modules/Umbrella/CardAdditionalFields/CardAdditionalFieldResourceProvider.ts","webpack:///./AdminPersonResource.ts","webpack:///./Scripts/TypeScript/umbrella/Enums.ts","webpack:///./Decorators.ts","webpack:///./ApiUrlFilter.ts","webpack:///./ComponentRouteUtils.ts","webpack:///./ObservableStore.ts","webpack:///./RootStore.ts","webpack:///./Config/Config.ts","webpack:///./Session.ts","webpack:///./BaseStoreService.ts","webpack:///./Helpers.ts","webpack:///./TaskHandling/_Overview/TaskOverviewService.ts","webpack:///./TaskHandling/_Overview/TaskOverviewComponent.ts","webpack:///./CustomerService/CustomerServiceComponent/CustomerServiceComponent.ts","webpack:///./deviceModeMethods.ts","webpack:///./AppRootComponent.ts","webpack:///./ApplicationResourceProvider.ts","webpack:///./AsyncFilter.ts","webpack:///./AuthorizationService.ts","webpack:///./Bugsnag.ts","webpack:///./DateExtensions.ts","webpack:///./CustomerService/_ColleagueCard/ColleagueCardSidebarComponent/ColleagueCardSidebarComponent.ts","webpack:///./FocusOnLoadDirective.ts","webpack:///./HighlightFilter.ts","webpack:///./IsMobilePhoneFilter.ts","webpack:///./Log.ts","webpack:///./PersonResource.ts","webpack:///./SetFocusOnInputDirective.ts","webpack:///./StripHtmlFilter.ts","webpack:///./SynchronizedObjectPathFilter.ts","webpack:///./SynchronizedObjectResourceProvider.ts","webpack:///./UmbrellaEmailDirective.ts","webpack:///./elementReady.ts","webpack:///./mdHideChildElementsOnMenuClose .ts","webpack:///./mdPreventFocusDirective.ts","webpack:///./mdPreventFocusFilter.ts","webpack:///./mdToggle.ts","webpack:///./minimizePopUp.ts","webpack:///./removeAndroidKeyboardOnScroll.ts","webpack:///./setHeightForResponsive.ts","webpack:///./themes.ts","webpack:///./TaskHandling/_Overview/TaskOverviewStore.ts","webpack:///./CaseFlowProcessing/CaseFlowOverviewStore.ts","webpack:///./umbrella.dashboard.routeconfig.ts","webpack:///./umbrella.routeconfig.ts","webpack:///./AttachmentListComponent/AttachmentListComponent.ts","webpack:///./AttachmentListComponent/MediaIsDeletableFilter.ts","webpack:///./AttachmentListComponent/MediaIsDeletedFilter.ts","webpack:///./AttachmentListComponent/MediaTypeFilter.ts","webpack:///./Modules/Media/MediaResourceProvider.ts","webpack:///./AttachmentListComponent/deleteMediaComponent.ts","webpack:///./AttachmentListComponent/showDeletedMediaInformationComponent.ts","webpack:///./CaseActivitiesComponent/CaseActivitiesComponent.ts","webpack:///./CaseFlowProcessing/ActiveStepFilter.ts","webpack:///./CaseFlowProcessing/CanCancelCaseFilter.ts","webpack:///./Modules/Umbrella/Log.ts","webpack:///./Modules/Umbrella/SignalR.ts","webpack:///./CaseFlowProcessing/CaseFlowHub.ts","webpack:///./CaseFlowProcessing/CaseFlowOverviewService.ts","webpack:///./CaseFlowProcessing/CaseFlowResourceProvider.ts","webpack:///./CaseFlowProcessing/CaseFlowStatusFilter.ts","webpack:///./CaseFlowProcessing/GroupByOwnerFilter.ts","webpack:///./CaseFlowProcessing/IsActiveStepFilter.ts","webpack:///./CaseFlowProcessing/IsCaseActiveFilter.ts","webpack:///./CaseFlowProcessing/IsFunctionGroupFilter.ts","webpack:///./CaseFlowProcessing/PickUpStepFilter.ts","webpack:///./CaseFlowProcessing/StartedStepFilter.ts","webpack:///./CaseFlowProcessing/StepStatusNameFilter.ts","webpack:///./CaseFlowProcessing/dashboard.caseflow.routeconfig.ts","webpack:///./CaseFlowProcessing/module.ts","webpack:///./CaseFlowProcessing/CaseFlowMediaItemsComponent/CaseFlowMediaItemsComponent.ts","webpack:///./CaseFlowProcessing/CaseflowTimelineItemComponent/CaseflowTimelineItemComponent.ts","webpack:///./CaseFlowProcessing/DashboardLoadingIndicatorComponent/DashboardLoadingIndicatorComponent.ts","webpack:///./CaseFlowProcessing/_Overview/dashboard.caseflow.overview.routeconfig.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/CanModifyCaseFlowFilter.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/CaseFlowComponent/CaseFlowComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/dashboard.caseflow.overview.details.routeconfig.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/CancelCaseFlowPopupComponent/CancelCaseFlowPopupComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/CaseFlowMessageComponent/CaseFlowMessageComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_ContactMoments/dashboard.caseflow.overview.details.contactmoments.routeconfig.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_ContactMoments/CaseFlowContactMomentsComponent/CaseFlowContactMomentsComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Documents/dashboard.caseflow.overview.details.documents.routeconfig.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Documents/CaseFlowDocumentsComponent/CaseFlowDocumentsComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Information/dashboard.caseflow.overview.details.information.routeconfig.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Information/CaseFlowInformationComponent/CaseFlowInformationComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Information/CaseFlowInformationComponent/CorrespondenceTypeFilter.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Information/CaseFlowInformationComponent/GenderFilter.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Information/CaseFlowInformationComponent/HousingAllocationRegistrationTypeFilter.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Messages/dashboard.caseflow.overview.details.messages.routeconfig.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Messages/CaseFlowMessagesComponent/CaseFlowMessagesComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_PublicMessages/dashboard.caseflow.overview.details.publicmessages.routeconfig.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_PublicMessages/CaseFlowPublicMessagesComponent/CaseFlowPublicMessagesComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Steps/dashboard.caseflow.overview.details.steps.routeconfig.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Steps/CaseFlowDetailsComponent/CaseFlowDetailsComponent.ts","webpack:///./CustomerService/ChannelInfo.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Steps/CaseFlowStepSelfServiceScenariosComponent/CaseFlowStepSelfServiceScenarioPopupComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Steps/CaseFlowStepSelfServiceScenariosComponent/CaseFlowStepSelfServiceScenariosComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Steps/CaseFlowStepTasksComponent/CaseFlowStepTasksComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Steps/CaseFlowStepsComponent/CaseFlowStepsComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Steps/FinishCaseFlowStepPopupComponent/FinishCaseFlowStepPopupComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Steps/FinishCaseFlowStepTaskPopupComponent/FinishCaseFlowStepTaskPopupComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Steps/PickupCaseFlowStepPopupComponent/PickUpCaseFlowStepPopupComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_Details/_Steps/SelectColleagueOrFunctionGroupComponent/SelectColleagueOrFunctionGroupComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_Edit/dashboard.caseflow.overview.edit.routeconfig.ts","webpack:///./CaseFlowProcessing/_Overview/_Edit/EditCaseFlowComponent/EditCaseFlowComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_Filters/CaseFlowOverviewFiltersComponent/CaseFlowOverviewFiltersComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_List/CaseFlowListComponent/CaseFlowListComponent.ts","webpack:///./CaseFlowProcessing/_Overview/_List/CaseFlowListComponent/CaseFlowStepDeadlineFilter.ts","webpack:///./CaseFlowProcessing/_Overview/_List/CaseFlowListComponent/CaseFlowStepSummaryFilter.ts","webpack:///./CaseFlowProcessing/_Workload/dashboard.caseflow.workload.routeconfig.ts","webpack:///./CaseFlowProcessing/_Workload/_List/dashboard.caseflow.workload.list.routeconfig.ts","webpack:///./CaseFlowProcessing/_Workload/_List/CaseFlowWorkloadComponent/CaseFlowWorkloadComponent.ts","webpack:///./ChatConversationHandling/Chat.enums.ts","webpack:///./ChatConversationHandling/ChatConversationStatusFilter.ts","webpack:///./ChatConversationHandling/ChatCustomerNameFilter.ts","webpack:///./Top/NotificationService.ts","webpack:///./CustomerService/_CustomerCard/_Activities/Registration/ActivityRegistrationService.ts","webpack:///./ChatConversationHandling/ChatStore.ts","webpack:///./ChatConversationHandling/ChatService.ts","webpack:///./ChatConversationHandling/dashboard.chat.routeconfig.ts","webpack:///./ChatConversationHandling/_Overview/dashboard.chat.overview.routeconfig.ts","webpack:///./ChatConversationHandling/_Overview/ChatNoChatSelectedComponent/ChatNoChatSelectedComponent.ts","webpack:///./ChatConversationHandling/_Overview/_Details/dashboard.chat.overview.details.routeconfig.ts","webpack:///./ChatConversationHandling/_Overview/_Details/ChatConversationDetailsComponent/ChatConversationDetailsComponent.ts","webpack:///./ChatConversationHandling/_Overview/_Filters/ChatConversationFiltersComponent/ChatConversationFiltersComponent.ts","webpack:///./ChatConversationHandling/_Overview/_List/ChatConversationListComponent/ChatConversationListComponent.ts","webpack:///./CustomerService/AddressTypeFilter.ts","webpack:///./CustomerService/CustomerResource.ts","webpack:///./CustomerService/FaqHasFollowupQuestionFilter.ts","webpack:///./CustomerService/FirstRoleIdFilter.ts","webpack:///./CustomerService/IndicatorEvaluationResourceProvider.ts","webpack:///./CustomerService/IndicatorResourceProvider.ts","webpack:///./CustomerService/IndicatorService.ts","webpack:///./CustomerService/OutgoingSmsResource.ts","webpack:///./CustomerService/PhoneCallResourceProvider.ts","webpack:///./CustomerService/PhoneNrFilter.ts","webpack:///./CustomerService/PhoneStatusDurationResourceProvider.ts","webpack:///./CustomerService/PhoneTypeFilter.ts","webpack:///./CustomerService/ProspectResourceProvider.ts","webpack:///./CustomerService/SalutationFilter.ts","webpack:///./CustomerService/ScrollCommandsReceiverDirective.ts","webpack:///./CustomerService/SelfServiceScenarioResourceProvider.ts","webpack:///./CustomerService/ServiceInjector.ts","webpack:///./CustomerService/VendorResourceProvider.ts","webpack:///./CustomerService/WorkAreaResourceProvider.ts","webpack:///./CustomerService/customerservice.routeconfig.ts","webpack:///./CustomerService/ActivityTimeline/ActivityChannelFilter.ts","webpack:///./CustomerService/ActivityTimeline/ActivityChannelIconFilter.ts","webpack:///./CustomerService/ActivityTimeline/ActivityColorFilter.ts","webpack:///./CustomerService/ActivityTimeline/ActivityIconFilter.ts","webpack:///./CustomerService/ActivityTimeline/ActivitySummaryFilter.ts","webpack:///./CustomerService/ActivityTimeline/ActivityTitleFilter.ts","webpack:///./CustomerService/ActivityTimeline/CaseStatusFilter.ts","webpack:///./CustomerService/ActivityTimeline/DotToNewLineFilter.ts","webpack:///./CustomerService/ActivityTimeline/ManagementPortalPathFilter.ts","webpack:///./CustomerService/ActivityTimeline/TaskActivitySubTitleFilter.ts","webpack:///./CustomerService/ActivityTimeline/ActivityTimelineComponent/ActivityTimelineComponent.ts","webpack:///./CustomerService/ActivityTimeline/ActivityTimelineItemComponent/ActivityLogUrlFilter.ts","webpack:///./CustomerService/ActivityTimeline/ActivityTimelineItemComponent/ActivityTimelineItemComponent.ts","webpack:///./CustomerService/ActivityTimeline/ActivityTimelineItemComponent/ActivityTimelineItemDirective.ts","webpack:///./CustomerService/ActivityTimeline/ActivityTimelineItemComponent/DeleteActivityTimelineItemComponent.ts","webpack:///./CustomerService/ActivityTimeline/ActivityTimelineItemComponent/RestoreActivityTimelineItemComponent.ts","webpack:///./CustomerService/CreateFaqSuggestionComponent/CreateFaqSuggestionComponent.ts","webpack:///./CustomerService/EventCalendarComponent/AttachCalendarEventsDirective.ts","webpack:///./CustomerService/EventCalendarComponent/EventCalendarHelper.ts","webpack:///./CustomerService/EventCalendarComponent/CalendarEventItemClassesFilter.ts","webpack:///./CustomerService/EventCalendarComponent/EventCalendarComponent.ts","webpack:///./CustomerService/IndicatorsComponent/BaseIndicatorsComponent.ts","webpack:///./CustomerService/IndicatorsComponent/IndicatorsComponent.ts","webpack:///./CustomerService/IndicatorsComponent/PreloadedIndicatorsComponent.ts","webpack:///./CustomerService/KnowledgebaseComponent/KnowledgebaseComponent.ts","webpack:///./CustomerService/MultiLinePromptDialogComponent/MultiLinePromptDialogComponent.ts","webpack:///./CustomerService/ProfileWithPopupComponent/ProfileWithPopupComponent.ts","webpack:///./CustomerService/QuickMenuComponent/QuickMenuComponent.ts","webpack:///./CustomerService/_ColleagueCard/customerservice.colleaguecard.routeconfig.ts","webpack:///./CustomerService/_ColleagueCard/ColleagueCardMenuComponent/ColleagueCardMenuComponent.ts","webpack:///./Modules/Colleagues/Colleague/ColleagueResourceProvider.ts","webpack:///./Top/PresenceHub.ts","webpack:///./CustomerService/_ColleagueCard/ColleagueHeaderComponent/ColleagueHeaderComponent.ts","webpack:///./CustomerService/_ColleagueCard/_Activities/customerservice.colleaguecard.activities.routeconfig.ts","webpack:///./CustomerService/_ColleagueCard/_Activities/ColleagueActivitiesComponent/ColleagueActivitiesComponent.ts","webpack:///./Modules/Colleagues/Calendar/CalendarResourceProvider.ts","webpack:///./CustomerService/_ColleagueCard/_Calendar/ColleagueCalendarTabController.ts","webpack:///./CustomerService/_ColleagueCard/_Calendar/customerservice.colleaguecard.calendar.routeconfig.ts","webpack:///./CustomerService/_ColleagueCard/_Telephony/customerservice.colleaguecard.telephony.routeconfig.ts","webpack:///./CustomerService/_ColleagueCard/_Telephony/ColleagueTelephonyComponent/ColleagueTelephonyComponent.ts","webpack:///./CustomerService/_ColleagueCard/_Telephony/ColleagueTelephonyComponent/IsInboundCallFilter.ts","webpack:///./CustomerService/_ColleagueCard/_Telephony/ColleagueTelephonyComponent/PhoneStatusDescriptionFilter.ts","webpack:///./CustomerService/_ComplexCard/ComplexCardSidebarController.ts","webpack:///./CustomerService/_ComplexCard/customerservice.complexcard.routeconfig.ts","webpack:///./CustomerService/_ComplexCard/ComplexCardHeaderComponent/ComplexCardHeaderComponent.ts","webpack:///./CustomerService/_ComplexCard/_Activities/ComplexActivitiesComponent/ComplexActivitiesComponent.ts","webpack:///./CustomerService/_ComplexCard/ComplexCardMenuComponent/ComplexCardMenuComponent.ts","webpack:///./CustomerService/_ComplexCard/_Announcements/ComplexAnnouncementsComponent/ComplexAnnouncementsComponent.ts","webpack:///./CustomerService/_ComplexCard/_Units/ComplexUnitsComponent/ComplexUnitsComponent.ts","webpack:///./CustomerService/_CustomerCard/CustomerCardAccountInfoService.ts","webpack:///./CustomerService/_CustomerCard/CustomerCardCustomerInfoService.ts","webpack:///./CustomerService/_CustomerCard/CustomerCardPersonInfoService.ts","webpack:///./CustomerService/_CustomerCard/CustomerCardStore.ts","webpack:///./CustomerService/_CustomerCard/ImpersonationService.ts","webpack:///./CustomerService/_CustomerCard/PersonHub.ts","webpack:///./CustomerService/_CustomerCard/PersonJitService.ts","webpack:///./CustomerService/_CustomerCard/customerservice.customercard.routeconfig.ts","webpack:///./CustomerService/_CustomerCard/stickyElements.ts","webpack:///./CustomerService/_CustomerCard/CardFeedbackMessageComponent/CardFeedbackMessageComponent.ts","webpack:///./CustomerService/_CustomerCard/CardLoadingIndicatorComponent/CardLoadingIndicatorComponent.ts","webpack:///./CustomerService/_CustomerCard/CardProgressMessageComponent/CardProgressMessageComponent.ts","webpack:///./CustomerService/_CustomerCard/_Activities/CustomerActivitiesComponent/CustomerActivitiesComponent.ts","webpack:///./CustomerService/_CustomerCard/CustomerCardMenuComponent/CustomerCardMenuComponent.ts","webpack:///./CustomerService/_CustomerCard/_Registrations/RegistrationsResourceProvider.ts","webpack:///./CustomerService/_CustomerCard/CustomerHeaderComponent/CustomerHeaderComponent.ts","webpack:///./CustomerService/_CustomerCard/Sidebar/CustomerCardSidebarService.ts","webpack:///./CustomerService/_CustomerCard/Sidebar/CardSidebarContactPersonsComponent/CardSidebarContactPersonsComponent.ts","webpack:///./CustomerService/_CustomerCard/Sidebar/CardSidebarContractInfoComponent/CardSidebarContractInfoComponent.ts","webpack:///./CustomerService/_CustomerCard/Sidebar/CardSidebarContractorsComponent/CardSidebarContractorsComponent.ts","webpack:///./CustomerService/_CustomerCard/Sidebar/CardSidebarVendorInfoComponent/CardSidebarVendorInfoComponent.ts","webpack:///./CustomerService/_CustomerCard/Sidebar/CustomerCardSidebarComponent/CustomerCardSideBarComponent.ts","webpack:///./CustomerService/_CustomerCard/_Activities/ActivityHub.ts","webpack:///./CustomerService/_CustomerCard/_Activities/ActivityJitService.ts","webpack:///./CustomerService/_CustomerCard/_Activities/CustomerCardActivityInfoService.ts","webpack:///./CustomerService/_CustomerCard/_Activities/customerservice.customercard.activities.routeconfig.ts","webpack:///./Modules/Umbrella/ToastMessageService.ts","webpack:///./CustomerService/_CustomerCard/_Activities/RegisterAnnouncementPopupComponent/RegisterAnnouncementPopupComponent.ts","webpack:///./Modules/Knowledgebase/Faq/FaqService.ts","webpack:///./Modules/Knowledgebase/Faq/AdminFaqResourceProvider.ts","webpack:///./CustomerService/_CustomerCard/_Activities/RegisterFaqPopupComponent/RegisterFaqPopupComponent.ts","webpack:///./CustomerService/_CustomerCard/_Activities/Registration/ActivityRegistrationState.ts","webpack:///./CustomerService/_CustomerCard/_Activities/Registration/ActivityRegistrationStore.ts","webpack:///./CustomerService/_CustomerCard/_Activities/Registration/ContactActivityResourceProvider.ts","webpack:///./CustomerService/_CustomerCard/_Activities/Registration/CardKnowledgebaseBreadCrumbComponent/CardKnowledgebaseBreadCrumbComponent.ts","webpack:///./CustomerService/_CustomerCard/_Activities/Registration/CardKnowledgebaseChannelSelectionPanelComponent/CardKnowledgebaseChannelSelectionPanelComponent.ts","webpack:///./CustomerService/_CustomerCard/_Activities/Registration/CardKnowledgebaseFaqBreadCrumbComponent/CardKnowledgebaseFaqBreadCrumbComponent.ts","webpack:///./CustomerService/_CustomerCard/_Activities/Registration/CardKnowledgebaseFollowUpQuestionComponent/CardKnowledgebaseFollowupQuestionComponent.ts","webpack:///./CustomerService/_CustomerCard/_Activities/Registration/CardKnowledgebaseSelfserviceComponent/CardKnowledgebaseSelfserviceComponent.ts","webpack:///./CustomerService/_CustomerCard/_Activities/Registration/CardKnowledgebaseSssSelectionPanelComponent/CardKnowledgebaseSssSelectionPanelComponent.ts","webpack:///./CustomerService/_CustomerCard/_Activities/Registration/FaqMediaComponent/FaqMediaComponent.ts","webpack:///./Top/PhoneHub.ts","webpack:///./Top/PhoneService.ts","webpack:///./CustomerService/_CustomerCard/_Activities/Registration/RegisterContactActivityPopupComponent/RegisterContactActivityPopupComponent.ts","webpack:///./CustomerService/_CustomerCard/_Activities/Registration/RegisterTaskPopupComponent/RegisterTaskPopupComponent.ts","webpack:///./CustomerService/_CustomerCard/_Activities/Registration/ThesaurusTagMediaComponent/ThesaurusTagMediaComponent.ts","webpack:///./Modules/Colleagues/Colleague/ColleagueHelpers.ts","webpack:///./CustomerService/_CustomerCard/_Activities/Registration/TransferPopup/TransferPopupController.ts","webpack:///./CustomerService/_CustomerCard/_Activities/Registration/TransferPopup/resizeColleaguesWithExpertiseColumn.ts","webpack:///./CustomerService/_CustomerCard/_Activities/Timeline/CustomerTimelineFiltersComponent/CustomerTimelineFiltersComponent.ts","webpack:///./CustomerService/_CustomerCard/_Announcements/CustomerCardAnnouncementInfoService.ts","webpack:///./CustomerService/_CustomerCard/_Announcements/customerservice.customercard.announcements.routeconfig.ts","webpack:///./CustomerService/_CustomerCard/_Announcements/AnnouncementTimelineComponent/AnnouncementTimelineComponent.ts","webpack:///./CustomerService/_CustomerCard/_Announcements/AnnouncementTimelineItemComponent/AnnouncementTimelineItemComponent.ts","webpack:///./CustomerService/_CustomerCard/_Announcements/CustomerAnnouncementFiltersComponent/CustomerAnnouncementFiltersComponent.ts","webpack:///./CustomerService/_CustomerCard/_Announcements/CustomerAnnouncementsComponent/CustomerAnnouncementsComponent.ts","webpack:///./CustomerService/_CustomerCard/_Bills/BillHub.ts","webpack:///./CustomerService/_CustomerCard/_Bills/BillJitService.ts","webpack:///./CustomerService/_CustomerCard/_Bills/BillResourceProvider.ts","webpack:///./CustomerService/_CustomerCard/_Bills/CustomerCardBillInfoService.ts","webpack:///./CustomerService/_CustomerCard/_Bills/PaymentStatusFilter.ts","webpack:///./CustomerService/_CustomerCard/_Bills/customerservice.customercard.bills.routeconfig.ts","webpack:///./CustomerService/_CustomerCard/_Bills/BillTimelineComponent/BillTimelineComponent.ts","webpack:///./CustomerService/_CustomerCard/_Bills/BillTimelineItemComponent/BillStatusIsOpenOrInProgressFilter.ts","webpack:///./CustomerService/_CustomerCard/_Bills/BillTimelineItemComponent/BillTimelineItemComponent.ts","webpack:///./CustomerService/_CustomerCard/_Bills/CustomerBillFiltersComponent/CustomerBillFiltersComponent.ts","webpack:///./CustomerService/_CustomerCard/_Bills/CustomerBillsComponent/CustomerBillsComponent.ts","webpack:///./CustomerService/_CustomerCard/_Contracts/ContractHub.ts","webpack:///./CustomerService/_CustomerCard/_Contracts/ContractJitService.ts","webpack:///./CustomerService/_CustomerCard/_Contracts/CustomerCardContractInfoService.ts","webpack:///./CustomerService/_CustomerCard/_Contracts/customerservice.customercard.contracts.routeconfig.ts","webpack:///./CustomerService/_CustomerCard/_Contracts/ContractTimelineComponent/ContractTimelineComponent.ts","webpack:///./CustomerService/_CustomerCard/_Contracts/ContractTimelineItemComponent/ContractTimelineItemComponent.ts","webpack:///./CustomerService/_CustomerCard/_Contracts/CustomerContractFiltersComponent/CustomerContractFiltersComponent.ts","webpack:///./CustomerService/_CustomerCard/_Contracts/CustomerContractsComponent/CustomerContractsComponent.ts","webpack:///./CustomerService/_CustomerCard/_CustomerSatisfaction/CustomerSatisfactionResource.ts","webpack:///./CustomerService/_CustomerCard/_CustomerSatisfaction/SatisfactionScoreColorFilter.ts","webpack:///./CustomerService/_CustomerCard/_CustomerSatisfaction/UmbrellaChartDirective.ts","webpack:///./CustomerService/_CustomerCard/_CustomerSatisfaction/customerservice.customercard.customersatisfaction.routeconfig.ts","webpack:///./CustomerService/_CustomerCard/_CustomerSatisfaction/CustomerSatisfactionComponent/CustomerSatisfactionComponent.ts","webpack:///./CustomerService/_CustomerCard/_CustomerSatisfaction/CustomerSatisfactionSectionComponent/CustomerSatisfactionSectionComponent.ts","webpack:///./CustomerService/_CustomerCard/_CustomerSatisfaction/CustomerScoreCreatedTimelineItemComponent/CustomerScoreCreatedTimelineItemComponent.ts","webpack:///./CustomerService/_CustomerCard/_Impersonation/customerservice.customercard.impersonation.routeconfig.ts","webpack:///./CustomerService/_CustomerCard/_Impersonation/ImpersonationWindowComponent/ImpersonationWindowComponent.ts","webpack:///./CustomerService/_CustomerCard/_Personal/AddressResourceProvider.ts","webpack:///./CustomerService/_CustomerCard/_Personal/EditCustomerDataComponent.ts","webpack:///./CustomerService/_CustomerCard/_Personal/customerservice.customercard.personal.routeconfig.ts","webpack:///./CustomerService/_CustomerCard/_Personal/AccountInfoComponent/AccountInfoComponent.ts","webpack:///./CustomerService/_CustomerCard/_Personal/CustomerCharacteristicsComponent/CustomerCharacteristicsComponent.ts","webpack:///./Modules/Umbrella/AgentFacetService.ts","webpack:///./CustomerService/_CustomerCard/_Personal/CustomerCompanyDataComponent/CustomerCompanyDataComponent.ts","webpack:///./Modules/Accounts/AccountResourceProvider.ts","webpack:///./Modules/Accounts/AccountService.ts","webpack:///./CustomerService/_CustomerCard/_Personal/CustomerContactDataComponent/CustomerContactDataComponent.ts","webpack:///./CustomerService/_CustomerCard/_Personal/CustomerDetailsComponent/CustomerDetailsComponent.ts","webpack:///./CustomerService/_CustomerCard/_Personal/CustomerNotificationSettingsComponent/CustomerNotificationSettingsComponent.ts","webpack:///./CustomerService/_CustomerCard/_Personal/CustomerNotificationSettingsComponent/NotificationPersonalPreferencesResourceProvider.ts","webpack:///./CustomerService/_CustomerCard/_Personal/CustomerPersonalDataComponent/CustomerPersonalDataComponent.ts","webpack:///./CustomerService/_CustomerCard/_Registrations/CustomerCardRegistrationInfoService.ts","webpack:///./CustomerService/_CustomerCard/_Registrations/customerservice.customercard.registrations.routeconfig.ts","webpack:///./CustomerService/_CustomerCard/_Registrations/ProspectRegistrationsComponent/ProspectRegistrationsComponent.ts","webpack:///./CustomerService/_CustomerCard/_Registrations/RegistrationTimelineComponent/RegistrationTimelineComponent.ts","webpack:///./CustomerService/_CustomerCard/_Registrations/RegistrationTimelineItemComponent/RegistrationTimelineItemComponent.ts","webpack:///./CustomerService/_UnitCard/UnitCardService.ts","webpack:///./CustomerService/_UnitCard/UnitHub.ts","webpack:///./CustomerService/_UnitCard/UnitJitService.ts","webpack:///./CustomerService/_UnitCard/UnitStore.ts","webpack:///./CustomerService/_UnitCard/customerservice.unitcard.routeconfig.ts","webpack:///./CustomerService/_UnitCard/MapComponent/MapComponent.ts","webpack:///./CustomerService/_UnitCard/Sidebar/UnitCardSideBarComponent/UnitCardSidebarComponent.ts","webpack:///./CustomerService/_UnitCard/Sidebar/UnitCardSidebarContactPersonsComponent/UnitCardSidebarContactPersonsComponent.ts","webpack:///./CustomerService/_UnitCard/Sidebar/UnitCardSidebarUnitInfoComponent/UnitCardSidebarUnitInfoComponent.ts","webpack:///./CustomerService/_UnitCard/UnitCardHeaderComponent/UnitCardHeaderComponent.ts","webpack:///./CustomerService/_UnitCard/_Activities/UnitActivitiesComponent/UnitActivitiesComponent.ts","webpack:///./CustomerService/_UnitCard/UnitCardMenuComponent/UnitCardMenuComponent.ts","webpack:///./CustomerService/_UnitCard/_Activities/UnitActivitiesService.ts","webpack:///./CustomerService/_UnitCard/_Activities/UnitActivityHub.ts","webpack:///./CustomerService/_UnitCard/_Activities/UnitActivityJitService.ts","webpack:///./CustomerService/_UnitCard/_Activities/customerservice.unitcard.activities.routeconfig.ts","webpack:///./CustomerService/_UnitCard/_Announcements/customerservice.unitcard.announcements.routeconfig.ts","webpack:///./CustomerService/_UnitCard/_Announcements/UnitAnnouncementsComponent/UnitAnnouncementsComponent.ts","webpack:///./CustomerService/_UnitCard/_Contracts/UnitContractHub.ts","webpack:///./CustomerService/_UnitCard/_Contracts/UnitContractJitService.ts","webpack:///./CustomerService/_UnitCard/_Contracts/customerservice.unitcard.contracts.routeconfig.ts","webpack:///./CustomerService/_UnitCard/_Contracts/UnitContractsComponent/UnitContractsComponent.ts","webpack:///./CustomerService/_UnitCard/_Valuation/UnitValuationHub.ts","webpack:///./CustomerService/_UnitCard/_Valuation/UnitValuationJitService.ts","webpack:///./CustomerService/_UnitCard/_Valuation/customerservice.unitcard.valuation.routeconfig.ts","webpack:///./CustomerService/_UnitCard/_Valuation/HousingValuationDirective/HousingValuationController.ts","webpack:///./CustomerService/_UnitCard/_Valuation/HousingValuationDirective/HousingValuationDirective.ts","webpack:///./CustomerService/_UnitCard/_Valuation/UnitValuationComponent/RequestValuationPopupController.ts","webpack:///./CustomerService/_UnitCard/_Valuation/UnitValuationComponent/UnitValuationComponent.ts","webpack:///./Errors/umbrella.errors.routeconfig.ts","webpack:///./ExperimentalArea/TriggerExperimentalAreaDirective.ts","webpack:///./ExperimentalArea/dashboard.experimentalarea.routeconfig.ts","webpack:///./ExperimentalArea/windowsauth.routeconfig.ts","webpack:///./ExperimentalArea/SetupFeaturesComponent/SetupFeaturesComponent.ts","webpack:///./TaskHandling/module.ts","webpack:///./InfiniteListComponent/InfiniteListComponent.ts","webpack:///./KeycloakAuth/Keycloak.ts","webpack:///./Modules/AppController.ts","webpack:///./Modules/CaseHistoryResourceProvider.ts","webpack:///./Modules/InitRootScope.ts","webpack:///./Modules/MenuTabsComponent.ts","webpack:///./Modules/RestoreChannelService.ts","webpack:///./Modules/Accounts/CardAccountDetailsComponent/CardAccountDetailsComponent.ts","webpack:///./Modules/Announcements/AnnouncementResourceProvider.ts","webpack:///./Modules/Announcements/AnnouncementsHub.ts","webpack:///./Modules/Announcements/PersonAnnouncementResourceProvider.ts","webpack:///./Modules/Announcements/AnnouncementPanelComponent/AnnouncementPanelComponent.ts","webpack:///./Modules/Announcements/AnnouncementPanelComponent/SafeHrefsFilter.ts","webpack:///./Modules/Announcements/AnnouncementPanelComponent/StripHtmlExceptHrefsFilter.ts","webpack:///./Modules/Chat/ChatConfigResources.ts","webpack:///./Modules/Chat/ChatProviderNameFilter.ts","webpack:///./Modules/Chat/ChatResource.ts","webpack:///./Modules/Chat/ChatUtility.ts","webpack:///./Modules/Chat/IsAcwConversationFilter.ts","webpack:///./Modules/Chat/AttachmentComponent/AttachmentComponent.ts","webpack:///./Modules/Chat/ChatBarComponent/ChatBarComponent.ts","webpack:///./Modules/Chat/ChatConversationHistoryComponent/ChatConversationHistoryComponent.ts","webpack:///./Modules/Chat/ChatConversationHistoryModal/ChatConversationHistoryModalController.ts","webpack:///./Modules/Chat/ChatConversationModal/ChatConversationModal.ts","webpack:///./Modules/Chat/ChatConversationModal/DraggableDirective.ts","webpack:///./Modules/Chat/ChatConversationModal/MessageDirectionFilter.ts","webpack:///./Modules/Chat/ChatFaqBrowserComponent/ChatFaqBrowserComponent.ts","webpack:///./Modules/Chat/ChatFaqBrowserComponent/DecodeHtmlFilter.ts","webpack:///./Modules/Chat/ChatFaqBrowserComponent/DetachUrlFilter.ts","webpack:///./Modules/Chat/ChatIncomingRequestComponent/ChatIncomingRequestComponent.ts","webpack:///./Modules/Chat/ChatInitialFaqsComponent/ChatInitialFaqsComponent.ts","webpack:///./Modules/Chat/ChatStarsRatingComponent/ChatStarsRatingComponent.ts","webpack:///./Modules/Chat/ChatTimelineConversationComponent/ChatTimelineConversationComponent.ts","webpack:///./Modules/Chat/ChatWaitingStatsComponent/ChatWaitingStatsComponent.ts","webpack:///./Modules/Chat/DefaultMessagesComponent/ChatDefaultMessagesComponent.ts","webpack:///./Modules/Chat/Directives/ChatAutoScrollerDirective.ts","webpack:///./Modules/Chat/Directives/EmojifyUrlifyDirective.ts","webpack:///./Modules/Chat/Directives/UiToggleClassDirective.ts","webpack:///./Modules/Colleagues/AvailabilityDescriptionFilter.ts","webpack:///./Modules/Colleagues/AvailabilityUnknownFilter.ts","webpack:///./Modules/Colleagues/EmployeeService.ts","webpack:///./Modules/Colleagues/IsAvailableFilter.ts","webpack:///./Modules/Colleagues/IsAwayFilter.ts","webpack:///./Modules/Colleagues/IsBusyFilter.ts","webpack:///./Modules/Colleagues/PhotoUrlFilter.ts","webpack:///./Modules/Colleagues/PhotoUrlService.ts","webpack:///./Modules/Colleagues/module.ts","webpack:///./Modules/Colleagues/Colleague/SearchColleaguesController.ts","webpack:///./Modules/Colleagues/Colleague/SearchColleaguesDirective.ts","webpack:///./Modules/Colleagues/FunctionGroup/FunctionGroupResourceProvider.ts","webpack:///./Modules/Dashboard/DashboardController.ts","webpack:///./Modules/Dashboard/DashboardMenuComponent.ts","webpack:///./Modules/Housing/ComplexResourceProvider.ts","webpack:///./Modules/Housing/ContractResourceProvider.ts","webpack:///./Modules/Housing/ContractStatusFilter.ts","webpack:///./Modules/Housing/DistrictResourceProvider.ts","webpack:///./Modules/Housing/HousingTypeResourceProvider.ts","webpack:///./Modules/Housing/IsActiveContractFilter.ts","webpack:///./Modules/Housing/PriceComponentResourceProvider.ts","webpack:///./Modules/Housing/ResidentialZoneResourceProvider.ts","webpack:///./Modules/Housing/ServiceFundResourceProvider.ts","webpack:///./Modules/Housing/TerminateContractReportResource.ts","webpack:///./Modules/Housing/UnitResource.ts","webpack:///./Modules/Housing/Valuations/ValuationResourceProvider.ts","webpack:///./Modules/Knowledgebase/FaqResource.ts","webpack:///./Modules/Knowledgebase/KnowledgebaseitemResourceProvider.ts","webpack:///./Modules/Knowledgebase/MetaTagResourceProvider.ts","webpack:///./Modules/Knowledgebase/SmartLabelResourceProvider.ts","webpack:///./Modules/Knowledgebase/TargetGroupResource.ts","webpack:///./Modules/Knowledgebase/ThesaurusResourceProvider.ts","webpack:///./Modules/Knowledgebase/module.ts","webpack:///./Modules/Mail/MailMessageResource.ts","webpack:///./Modules/Mail/Directives/PreviewOutgoingMailPopupButtonController.ts","webpack:///./Modules/Mail/Directives/PreviewOutgoingMailPopupButtonDirective.ts","webpack:///./Modules/Mail/Directives/ResendOutgoingMailPopupButtonController.ts","webpack:///./Modules/Mail/Directives/ResendOutgoingMailPopupButtonDirective.ts","webpack:///./Modules/Media/AvatarResourceProvider.ts","webpack:///./Modules/Onboarding/OnboardingResourceProvider.ts","webpack:///./Modules/Repairs/AnswerResource.ts","webpack:///./Modules/Repairs/DefectResource.ts","webpack:///./Modules/Repairs/LocationTypeCodeResource.ts","webpack:///./Modules/Repairs/PlanningResource.ts","webpack:///./Modules/Repairs/RepairRequestResource.ts","webpack:///./Modules/Repairs/RepairRequestRuleResource.ts","webpack:///./Modules/Repairs/SpecificationCodeResource.ts","webpack:///./Modules/Repairs/Card/Tabs/RepairRequest/AddDefectPopupController.ts","webpack:///./Modules/Repairs/Card/Tabs/RepairRequest/RepairRequestTabController.ts","webpack:///./Modules/Repairs/PlanRepairRequestComponent/PlanRepairRequestComponent.ts","webpack:///./Modules/Repairs/RepairsAppointmentTimelineComponent/RepairsAppointmentTimelineComponent.ts","webpack:///./Modules/SelfService/DecisionResourceProvider.ts","webpack:///./Modules/SelfService/SelfServiceReportResourceProvider.ts","webpack:///./Modules/SelfService/module.ts","webpack:///./Modules/SelfService/Appointments/AppointmentResource.ts","webpack:///./Modules/SelfService/Appointments/AppointmentTimelineComponent/AppointmentTimelineComponent.ts","webpack:///./Modules/SelfService/Report/RepairRequestController.ts","webpack:///./Modules/Telephony/AllPhonesService.ts","webpack:///./Modules/Telephony/PhoneStatusResourceProvider.ts","webpack:///./Modules/Telephony/QuickDialController.ts","webpack:///./Modules/Telephony/QuickDialResourceProvider.ts","webpack:///./Modules/Telephony/telephony.routeconfig.ts","webpack:///./Modules/Umbrella/ActivityResourceProvider.ts","webpack:///./Modules/Umbrella/AddressLineFilter.ts","webpack:///./Modules/Umbrella/ClickableDirective.ts","webpack:///./Modules/Umbrella/ConfigResource.ts","webpack:///./Modules/Umbrella/CreateDialog.ts","webpack:///./Modules/Umbrella/FieldLabelFilter.ts","webpack:///./Modules/Umbrella/IfFeatureDisabledDirective.ts","webpack:///./Modules/Umbrella/IfFeatureEnabledDirective.ts","webpack:///./Modules/Umbrella/IfNotMobile.ts","webpack:///./Modules/Umbrella/IfUmbrellaAuthDirective.ts","webpack:///./Modules/Umbrella/IsArrayFilter.ts","webpack:///./Modules/Umbrella/IsDateFilter.ts","webpack:///./Modules/Umbrella/LocalStorageService.ts","webpack:///./Modules/Umbrella/OccupantRoleLabelComponent.ts","webpack:///./Modules/Umbrella/OfflineService.ts","webpack:///./Modules/Umbrella/ProspectRoleLabelComponent.ts","webpack:///./Modules/Umbrella/ReplaceYoutubeEmbedFilter.ts","webpack:///./Modules/Umbrella/RoleLabelComponent.ts","webpack:///./Modules/Umbrella/RoleResourceProvider.ts","webpack:///./Modules/Umbrella/ShortUrlFilter.ts","webpack:///./Modules/Umbrella/SignalRStateNotifyingService.ts","webpack:///./Modules/Umbrella/StringExtensions.ts","webpack:///./Modules/Umbrella/TenantRoleLabelComponent.ts","webpack:///./Modules/Umbrella/TrustedAsResourceUrlFilter.ts","webpack:///./Modules/Umbrella/UmbrellaHttpRequestInterceptor.ts","webpack:///./Modules/Umbrella/UndeliveredMessageComponent.ts","webpack:///./Modules/Umbrella/VendorRoleLabelComponent.ts","webpack:///./Modules/Umbrella/module.ts","webpack:///./Modules/Umbrella/Admin/Mail/ForwardMailPopupController.ts","webpack:///./Modules/Umbrella/Admin/Mail/OutgoingMailResource.ts","webpack:///./Modules/Umbrella/Admin/Mail/ViewMailPopupController.ts","webpack:///./Modules/Umbrella/CardAdditionalFields/CardAdditionalFieldsController.ts","webpack:///./Modules/Umbrella/CardAdditionalFields/CardAdditionalFieldsDirective.ts","webpack:///./Modules/Umbrella/CardAdditionalFields/DeepLinkFilter.ts","webpack:///./Modules/Umbrella/Localization/_umbrella-locale_nl-nl.ts","webpack:///./Modules/Umbrella/Localization/localize.ts","webpack:///./Top/TopSearchComponent/TopSearchComponent.ts","webpack:///./UmbrellaEmailComponent/UmbrellaEmailComponent.ts","webpack:///./ResponsiveNavigationComponent/ResponsiveNavigationComponent.ts","webpack:///./SSSDecisionPathComponent/SSSDecisionPathComponent.ts","webpack:///./Sandbox/sandbox.routeconfig.ts","webpack:///./Sandbox/SandboxTabsComponent/SandboxTabsComponent.ts","webpack:///./Sandbox/_CustomerService/sandbox.dashboard.customerservice.ts","webpack:///./Sandbox/_Dashboard/DialogComponent.ts","webpack:///./Sandbox/_Dashboard/SelectComponent.ts","webpack:///./Sandbox/_Dashboard/sandbox.dashboard.routeconfig.ts","webpack:///./Search/search.routeconfig.ts","webpack:///./Search/SearchSpinnerComponent/SearchSpinnerComponent.ts","webpack:///./Search/SearchStatusComponent/SearchStatusComponent.ts","webpack:///./Search/SearchTabComponent/SearchTabComponent.ts","webpack:///./Search/_Colleagues/ColleagueOverviewController.ts","webpack:///./Search/_Colleagues/search.colleagues.routeconfig.ts","webpack:///./Search/_Complexes/ComplexOverviewController.ts","webpack:///./Search/_Complexes/search.complex.routeconfig.ts","webpack:///./Search/_Customers/CustomerOverviewController.ts","webpack:///./Search/_Customers/search.customers.routeconfig.ts","webpack:///./Search/_Units/UnitOverviewController.ts","webpack:///./Search/_Units/UnitSearchResourceProvider.ts","webpack:///./Search/_Units/search.units.routeconfig.ts","webpack:///./Search/_Vendors/VendorOverviewController.ts","webpack:///./Search/_Vendors/search.vendors.routeconfig.ts","webpack:///./SimpleLoadingComponent/SimpleLoadingComponent.ts","webpack:///./TaskHandling/TaskActivityResource.ts","webpack:///./TaskHandling/TaskAssigneeFilter.ts","webpack:///./TaskHandling/TaskHub.ts","webpack:///./TaskHandling/TaskResourceProvider.ts","webpack:///./TaskHandling/TaskService.ts","webpack:///./TaskHandling/TaskStatusFilter.ts","webpack:///./TaskHandling/TaskTitleFilter.ts","webpack:///./TaskHandling/dashboard.tasks.routeconfig.ts","webpack:///./TaskHandling/_Overview/MakeEmailClickableFilter.ts","webpack:///./TaskHandling/_Overview/dashboard.tasks.overview.routeconfig.ts","webpack:///./TaskHandling/_Overview/_Details/CanFinishFilter.ts","webpack:///./TaskHandling/_Overview/_Details/CanModifyFilter.ts","webpack:///./TaskHandling/_Overview/_Details/CanPickupFilter.ts","webpack:///./TaskHandling/_Overview/_Details/CanRejectFilter.ts","webpack:///./TaskHandling/_Overview/_Details/IsCaseFlowTypeFilter.ts","webpack:///./TaskHandling/_Overview/_Details/IsErrorTypeFilter.ts","webpack:///./TaskHandling/_Overview/_Details/dashboard.tasks.overview.details.routeconfig.ts","webpack:///./TaskHandling/_Overview/_Details/TaskComponent/TaskComponent.ts","webpack:///./TaskHandling/_Overview/_Details/_ContactMoments/dashboard.tasks.overview.details.contactmoments.routeconfig.ts","webpack:///./TaskHandling/_Overview/_Details/_ContactMoments/TaskContactMomentsComponent/TaskContactMomentsComponent.ts","webpack:///./TaskHandling/_Overview/_Details/_Information/dashboard.tasks.overview.details.information.routeconfig.ts","webpack:///./TaskHandling/_Overview/_Details/_Information/SelfServiceReportInformationComponent/SelfServiceReportInformationComponent.ts","webpack:///./TaskHandling/_Overview/_Details/_Information/TaskErrorsComponent/PropertiesCountFilter.ts","webpack:///./TaskHandling/_Overview/_Details/_Information/TaskErrorsComponent/TaskErrorsComponent.ts","webpack:///./TaskHandling/_Overview/_Details/_Information/TaskInformationComponent/TaskInformationComponent.ts","webpack:///./TaskHandling/_Overview/_Details/_LinkedTasks/dashboard.tasks.overview.details.linkedtasks.routeconfig.ts","webpack:///./TaskHandling/_Overview/_Details/_LinkedTasks/LinkedTasksComponent/LinkedTasksComponent.ts","webpack:///./TaskHandling/_Overview/_Details/_Messages/dashboard.tasks.overview.details.messages.routeconfig.ts","webpack:///./TaskHandling/_Overview/_Details/_Messages/TaskMessagesComponent/TaskMessagesComponent.ts","webpack:///./TaskHandling/_Overview/_Edit/dashboard.tasks.overview.edit.routeconfig.ts","webpack:///./TaskHandling/_Overview/_Edit/EditTaskComponent/EditTaskComponent.ts","webpack:///./TaskHandling/_Overview/_Filters/TaskOverviewFiltersComponent/TaskOverviewFiltersComponent.ts","webpack:///./TaskHandling/_Overview/_Link/dashboard.tasks.overview.link.routeconfig.ts","webpack:///./TaskHandling/_Overview/_Link/LinkTaskComponent/LinkTaskComponent.ts","webpack:///./TaskHandling/_Overview/_List/IsNewerThanFilter.ts","webpack:///./TaskHandling/_Overview/_List/TaskListComponent/TaskListComponent.ts","webpack:///./Top/ActiveCallFilter.ts","webpack:///./Top/CanPickupFilter.ts","webpack:///./Top/ConversationBarTabControlDirective.ts","webpack:///./Top/HasMultipleCandidatesFilter.ts","webpack:///./Top/InboundCallFilter.ts","webpack:///./Top/IsAvailableStatusFilter.ts","webpack:///./Top/IsChatAvailable.ts","webpack:///./Top/IsDialingStatusFilter.ts","webpack:///./Top/IsOnHoldStatusFilter.ts","webpack:///./Top/IsQueueEnabledStatusFilter.ts","webpack:///./Top/IsRingingStatusFilter.ts","webpack:///./Top/OnHoldCallsFilter.ts","webpack:///./Top/OngoingCallsFilter.ts","webpack:///./Top/PhoneButtonStatusFilter.ts","webpack:///./Top/PhoneCallStatusFilter.ts","webpack:///./Top/PhoneStatusIconFilter.ts","webpack:///./Top/PresenceResourceProvider.ts","webpack:///./Top/RelationPopupComponent.ts","webpack:///./Top/TopBarStore.ts","webpack:///./Top/TopComponent.ts","webpack:///./Top/isAuthLoginCapable.ts","webpack:///./Top/ChatAvailabilityControlsComponent/ChatAvailabilityControlsComponent.ts","webpack:///./Top/ChatControlsComponent/ChatControlsComponent.ts","webpack:///./Top/ConversationBarComponent/ConversationBarComponent.ts","webpack:///./Top/DialPadComponent/DialPadComponent.ts","webpack:///./Top/ImpersonationControlsComponent/ImpersonationControlsComponent.ts","webpack:///./Top/IncomingCallComponent/IncomingCallComponent.ts","webpack:///./Top/IncomingCallComponent/RoleNameFilter.ts","webpack:///./Top/LoginControlsComponent/LoginControlsComponent.ts","webpack:///./Top/PhoneAvailabilityControlsComponent/PhoneAvailabilityControlsComponent.ts","webpack:///./Top/PhoneControlsComponent/PhoneControlsComponent.ts","webpack:///./Top/ProductLogoComponent/ProductLogoComponent.ts","webpack:///./Top/TopBarComponent/TopBarComponent.ts","webpack:///./Top/TopLiveStatsComponent/TopLiveStatsComponent.ts","webpack:///./Top/TopSearchComponent/PresenceColorFilter.ts","webpack:///./Top/TopSearchComponent/PresenceIconFilter.ts","webpack:///./Top/TopSearchComponent/PresencePhoneIconFilter.ts","webpack:///./Top/TopSearchHeaderComponent/TopSearchHeaderComponent.ts","webpack:///./Top/TopToolbarComponent/QuickLinkResourceProvider.ts","webpack:///./Top/TopToolbarComponent/TopToolbarComponent.ts","webpack:///./Modules/Umbrella/Hubs.js","webpack:///./app.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__WEBPACK_AMD_DEFINE_RESULT__","global","factory","undefined","w","N","Notification","isFunction","item","Notify","title","options","Error","this","icon","body","tag","lang","notifyShow","notifyClose","notifyClick","notifyError","timeout","requireInteraction","closeOnClick","silent","permission","onShowCallback","onCloseCallback","onClickCallback","onErrorCallback","isSupported","perm","requestPermission","e","needsPermission","onPermissionGrantedCallback","onPermissionDeniedCallback","show","myNotify","isNaN","setTimeout","close","addEventListener","onShowNotification","onCloseNotification","destroy","onClickNotification","onErrorNotification","removeEventListener","handleEvent","type","document","window","String","includes","search","start","length","indexOf","startsWith","pos","substr","endsWith","this_len","substring","Array","find","predicate","TypeError","len","thisArg","arguments","k","kValue","every","callbackfn","T","O","assign","target","varArgs","to","index","nextSource","nextKey","writable","configurable","from","toStr","toString","isCallable","fn","maxSafeInteger","Math","pow","toLength","number","Number","isFinite","floor","abs","toInteger","min","max","arrayLike","items","mapFn","A","SLICE$0","slice","createClass","ctor","superClass","constructor","Iterable","isIterable","Seq","KeyedIterable","isKeyed","KeyedSeq","IndexedIterable","isIndexed","IndexedSeq","SetIterable","isAssociative","SetSeq","maybeIterable","IS_ITERABLE_SENTINEL","maybeKeyed","IS_KEYED_SENTINEL","maybeIndexed","IS_INDEXED_SENTINEL","maybeAssociative","isOrdered","maybeOrdered","IS_ORDERED_SENTINEL","Keyed","Indexed","Set","SHIFT","SIZE","MASK","NOT_SET","CHANGE_LENGTH","DID_ALTER","MakeRef","ref","SetRef","OwnerID","arrCopy","arr","offset","newArr","ii","ensureSize","iter","size","__iterate","returnTrue","wrapIndex","uint32Index","NaN","wholeSlice","begin","end","resolveBegin","resolveIndex","resolveEnd","defaultIndex","ITERATE_KEYS","ITERATE_VALUES","ITERATE_ENTRIES","REAL_ITERATOR_SYMBOL","iterator","FAUX_ITERATOR_SYMBOL","ITERATOR_SYMBOL","Iterator","next","iteratorValue","v","iteratorResult","done","iteratorDone","hasIterator","getIteratorFn","isIterator","maybeIterator","getIterator","iterable","iteratorFn","isArrayLike","emptySequence","toSeq","seq","maybeIndexedSeqFromValue","ObjectSeq","seqFromValue","toKeyedSeq","fromEntrySeq","keyedSeqFromValue","entrySeq","toIndexedSeq","indexedSeqFromValue","toSetSeq","KEYS","VALUES","ENTRIES","inspect","toSource","of","__toString","cacheResult","_cache","__iterateUncached","toArray","reverse","seqIterate","__iterator","seqIterator","isSeq","EMPTY_SEQ","EMPTY_REPEAT","EMPTY_RANGE","IS_SEQ_SENTINEL","ArraySeq","array","_array","keys","_object","_keys","IterableSeq","_iterable","IteratorSeq","_iterator","_iteratorCache","maybeSeq","isArray","useKeys","cache","maxIndex","entry","__iteratorUncached","fromJS","json","converter","fromJSWith","parentJSON","map","isPlainObj","","fromJSDefault","toList","toMap","is","valueA","valueB","valueOf","equals","deepEqual","a","b","__hash","notAssociative","entries","flipped","_","allEqual","bSize","has","Repeat","times","_value","Infinity","invariant","condition","error","Range","step","_start","_end","_step","ceil","Collection","KeyedCollection","IndexedCollection","SetCollection","notSetValue","iterations","val","searchValue","lastIndexOf","this$0","other","possibleIndex","offsetValue","imul","smi","i32","hash","h","STRING_HASH_CACHE_MIN_STRLEN","string","stringHashCache","hashString","STRING_HASH_CACHE_SIZE","STRING_HASH_CACHE_MAX_SIZE","cachedHashString","hashCode","obj","usingWeakMap","weakMap","UID_HASH_KEY","canDefineProperty","propertyIsEnumerable","node","nodeType","uniqueID","documentElement","getIENodeHash","objHashUID","set","isExtensible","apply","hashJSObj","charCodeAt","WeakMap","assertNotInfinite","Map","emptyMap","isMap","withMutations","forEach","maybeMap","IS_MAP_SENTINEL","_root","updateMap","setIn","keyPath","updateIn","remove","deleteIn","update","updater","updatedValue","updateInDeepMap","existing","keyPathIter","isNotSet","existingValue","newValue","nextExisting","nextUpdated","forceIterator","clear","__ownerID","__altered","merge","mergeIntoMapWith","mergeWith","merger","iters","mergeIn","mergeDeep","deepMerger","mergeDeepWith","deepMergerWith","mergeDeepIn","sort","comparator","OrderedMap","sortFactory","sortBy","mapper","mutable","asMutable","wasAltered","__ensureOwner","asImmutable","MapIterator","iterate","ownerID","makeMap","EMPTY_MAP","MapPrototype","ArrayMapNode","BitmapIndexedNode","bitmap","nodes","HashArrayMapNode","count","HashCollisionNode","keyHash","ValueNode","_type","_reverse","_stack","mapIteratorFrame","mapIteratorValue","prev","__prev","root","newRoot","newSize","didChangeSize","didAlter","updateNode","shift","isLeafNode","mergeIntoNode","newNode","idx1","idx2","iterables","push","mergeIntoCollectionWith","nextValue","collection","filter","x","mergeIntoMap","popCount","idx","canEdit","newArray","removeIn","removed","exists","MAX_ARRAY_MAP_SIZE","createNodes","isEditable","newEntries","pop","bit","keyHashFrag","MAX_BITMAP_INDEXED_SIZE","including","expandedNodes","expandNodes","newBitmap","newNodes","newLen","after","spliceOut","spliceIn","newCount","MIN_HASH_ARRAY_MAP_SIZE","excluding","packedII","packedNodes","packNodes","keyMatch","stack","subNode","List","empty","emptyList","isList","makeList","VNode","list","setSize","maybeList","IS_LIST_SENTINEL","listNodeFor","_origin","setListBounds","newTail","_tail","getTailOffset","_capacity","updateVNode","_level","updateList","splice","insert","values","oldSize","unshift","mergeIntoListWith","iterateList","DONE","ListPrototype","removeBefore","level","originIndex","newChild","removingFirst","oldChild","editable","editableVNode","removeAfter","sizeIndex","EMPTY_LIST","EMPTY_ORDERED_MAP","left","right","tailPos","tail","iterateNodeOrLeaf","iterateLeaf","iterateNode","origin","capacity","nodeHas","lowerNode","newLowerNode","rawIndex","owner","oldOrigin","oldCapacity","newOrigin","newCapacity","newLevel","offsetShift","oldTailOffset","newTailOffset","oldTail","beginIndex","maxSize","emptyOrderedMap","isOrderedMap","maybeOrderedMap","makeOrderedMap","omap","_map","_list","updateOrderedMap","newMap","newList","flip","ToKeyedSequence","indexed","_iter","_useKeys","ToIndexedSequence","ToSetSequence","FromEntriesSequence","flipFactory","flipSequence","makeSequence","reversedSequence","cacheResultThrough","mapFactory","context","mappedSequence","reverseFactory","filterFactory","filterSequence","sliceFactory","originalSize","resolvedBegin","resolvedEnd","sliceSize","resolvedSize","sliceSeq","skipped","isSkipping","skipWhileFactory","skipSequence","skipping","flattenFactory","depth","flatSequence","stopped","flatDeep","currentDepth","defaultComparator","isKeyedIterable","maxFactory","reduce","maxCompare","comp","zipWithFactory","keyIter","zipper","zipSequence","iterators","isDone","steps","some","reify","validateEntry","resolveSize","iterableClass","Record","defaultValues","hasInitialized","RecordType","names","setProps","RecordTypePrototype","_name","_defaultValues","RecordPrototype","valueSeq","indexedIterable","recordName","defaultVal","_empty","makeRecord","likeRecord","record","getPrototypeOf","emptySet","isSet","add","maybeSet","IS_SET_SENTINEL","fromKeys","keySeq","updateSet","union","intersect","originalSet","subtract","OrderedSet","__make","EMPTY_SET","SetPrototype","__empty","makeSet","emptyOrderedSet","isOrderedSet","maybeOrderedSet","EMPTY_ORDERED_SET","OrderedSetPrototype","makeOrderedSet","Stack","emptyStack","isStack","unshiftAll","maybeStack","IS_STACK_SENTINEL","head","_head","peek","makeStack","pushAll","EMPTY_STACK","StackPrototype","mixin","methods","keyCopier","getOwnPropertySymbols","toJS","__toJS","toJSON","toObject","toOrderedMap","toOrderedSet","toSet","toStack","__toStringMapper","join","concat","singleton","concatSeq","flatten","sum","concatFactory","returnValue","findEntry","found","findLastEntry","sideEffect","separator","joined","isFirst","reducer","initialReduction","reduction","useFirst","reduceRight","reversed","not","butLast","isEmpty","countBy","grouper","groups","countByFactory","entriesSequence","entryMapper","filterNot","findLast","first","flatMap","coerce","flatMapFactory","searchKey","getIn","searchKeyPath","nested","groupBy","isKeyedIter","groupByFactory","hasIn","isSubset","isSuperset","keyMapper","last","maxBy","neg","defaultNegComparator","minBy","rest","skip","amount","skipLast","skipWhile","skipUntil","take","takeLast","takeWhile","takeSequence","iterating","takeWhileFactory","takeUntil","ordered","keyed","murmurHashOfSize","hashMerge","hashIterable","IterablePrototype","quoteString","chain","contains","noLengthWarning","console","warn","findKey","findLastKey","keyOf","lastKeyOf","mapEntries","mapKeys","KeyedIterablePrototype","JSON","stringify","defaultZipper","findIndex","removeNum","numArgs","spliced","findLastIndex","interpose","interposedSequence","interposeFactory","interleave","zipped","interleaved","zip","zipWith","Immutable","Umbrella","angular","service","$resource","method","params","System","getModule","moduleOrName","ApiUrlFilter","transform","relativeUrl","Config","makeAbsoluteApiUrl","__decorate","Pipe","UriHostNameType","Net","Mail","MailPriority","CardType","EmailAddressProperties","JitResponseStatus","JitType","PersonCharacteristic","PersonFieldTypes","RepairRequestItemStatus","RepairRequestStatus","UpdateStatus","Accounts","Login","TokenVerificationError","CaseFlow","CaseFlowStatus","CaseFlowAssignmentType","CaseFlowStepStatus","CaseFlowStepTaskOutcomeStatus","HousingAllocation","Reactions","ReactionPossibility","ReactionStatus","Registrations","RegistrationType","Indicators","PriorityLevel","Expected","ExpectedType","Media","MediaCategory","Modules","StatusFilter","ActivityCategory","AddressType","CaseStatus","ChannelType","CorrespondenceType","Gender","PlanningOptionScore","PropertyType","RoleFields","Colleagues","Availability","ColleagueType","Presence","StateType","Calendar","AppointmentStatus","Complaints","ComplaintStatus","Compliments","ComplimentStatus","Customers","CaseType","CustomerStatus","Disturbance","DisturbanceStatus","Forms","FormSubmitErrorReason","Housing","ContractPriceComponentStatus","ContractStatus","HouseAdjustmentStatus","HousingAllocationRegistrationType","Advertisements","AdvertisementStatus","Registration","RegistrationActivityModelType","Inspection","InspectedRoomCondition","InspectionProgress","InspectionReportStatus","Final","FinalObservationResolution","Initial","InitialObservationResolution","Knowledgebase","FaqType","PublicationStatus","MailMessageStatus","Monitoring","Messaging","UndeliveredMessageStatus","Payments","BillSortOrder","PaymentMethod","PaymentProviderType","PaymentStatus","RejectionReason","Billing","BillStatus","Repairs","ActionParameterScope","SelfService","SelfServiceStatusType","SelfServiceScenarionStatusType","TimeSlot","Weekday","Tasks","CompletionState","TaakStatus","TaskOutcomeStatus","TaskStatusFilter","TaskTypeCategory","Telephony","PhoneType","Scheduling","TriggerType","SelfTests","TestResultStatus","PhoneCallStatus","PhoneCallType","PhoneCapabilities","PhoneQueueStatus","PhoneStatus","TelephonyControl","TelephonyMessageType","AvailabilityStatus","Statistics","TelephonyQueueKpiState","Vendor","EditVendorFields","Contacts","ContactDirection","selectorToCamelCase","replace","match","toUpperCase","Component","controller","selector","controllerAs","component","extend","Service","serviceName","svc","Inject","args","_i","isNumber","$inject","Controller","controllerName","C","annotatedFunction","pipeObject","createComponentRouteController","storeName","mapState","$scope","store","state$","distinctUntilChanged","ObservableStore","createStore","initialState","Rx","BehaviorSubject","reducer$","Subject","getState","getValue","lens","mapStore","subState$","subReduce$","subscribe","reduceSub","onNext","currentState","currentSubState","newSubState","mappedStore","newState","createEventSubject","handler","event$","rootStore","prop","history","configStore","config","loadError","__assign","features","experimentalAreaEnabled","enabled","changeExperimentalAreaState","defaultConfig","api","debug","signalRTransports","bugsnagApiKey","managementRelativeUrl","managementErrorPath","managementLogPath","managementPortalPath","loginredirect","managementSynchronizedObjectPath","keycloak","load","hostNameConfig","prefix","location","hostname","$","getJSON","Date","now","configJson","_a","sent","e_1","featuresJson","f","state","localStorage","getItem","e_2","experimentalAreaUnlocked","parse","getPathWithTrailingSlash","path","getManagementLogRelativeUrl","logPath","clientConfig","getManagementRelativeUrl","switchFeatureFlag","flagName","newFeatures","setItem","getPortalUrl","selfService","url","requestUrl","ensureEndsWithSlash","trimStartSlash","makeManagementErrorPath","id","errorPath","makeManagementLogPath","makeManagementPortalPath","portalPath","makeManagementSynchronizedObjectPath","synchronizedObjectPath","ajaxSetup","xhrFields","withCredentials","headers","Access-Control-Allow-Origin","startSession","cfg","ajax","dataType","success","user","session$","xhr","status","accessToken","message","realm","session","isDevModeOrVersionAtLeast","major","minor","patch","configuration","toLowerCase","version","startNewSessionWhenTokenHasExpired","whenAuthenticatedKccChatOperator","onReady","sessionState","permissions","chatOperator","viewChatConversation","BaseStoreService","_this","emit","Helpers","debounce","func","wait","immediate","callNow","clearTimeout","throttle","limit","inThrottle","copyToClipboard","text","successCallback","failCallback","setData","queryCommandSupported","textarea","createElement","textContent","style","position","appendChild","select","execCommand","ex","removeChild","GetEnumValueAsNumber","typ","generateGuid","random","isDate","test","TaskHandling","showTaskDetailView$","notNull","TaskOverviewService","_super","$q","$location","taskResource","colleagueResource","functionGroupResource","localStorageService","taskService","updateSelectedTask","task","case","hasCase","caseId","loadLinkedTasks","completedById","getById","$promise","then","colleague","completedBy","isSelectedTask","selectedTask","observeTaskUpdates","__extends","ensureLoaded","setDisplayTaskDetailView","showTaskDetailView","device","mobile","surface","tablet","pageSize","filters","getTasks","addTaskToList","taskPassesCurrentFilters","tasks","ends","getTime","taskModelDetailedToTaskOverviewItemModel","modifiedTaskItems","x1","x2","modifiedTasks","total","completeBy","faq","question","created","description","discussionCount","totalDiscussions","lastModified","relatedPerson","subject","taskType","unitId","complexId","loadMoreDetails","loadActivities","payload","mediaIds","promise","updatedTask","updateListWhenContainingTask","taskId","getHistory","page","data","activities","pickup","reject","pickUp","finish","removeTaskFromList","finishedViaCaseFlow","reason","delete","reply","discuss","addTaskDiscussionActivity","filterByQuery","query","updateFilters","filterByStatus","filterByDeadline","deadline","filterByTaskTypes","taskTypes","filterByCreatedBy","colleagueOrFunctiongroup","createdBy","filterByAssignedTo","assignedTo","loadTaskTypes","resolve","queryAllTypesExceptCaseFlow","filterByStateParams","createdById","assignedToId","mapStateParamsToFilterValues","tasksLoadedCount","searchQuery","completion","completeById","filterTasksAlreadyInState","catch","tasksToAdd","taskInList","taskOverviewModel","isAssignedToMeOrOneOfMyFunctionGroups","Nieuw","Opgepakt","Geweigerd","activity","startTime","toISOString","taskHubOnCreated$","taskHubOnUpdated$","taskHubOnDeleted$","taskHubOnActivitiesUpdated$","storeFilterValues","filterValues","initializeFilters","generateFiltersQuery","storedFilterValues","emptyFilters","storeFilters","stateFilters","updateFiltersUrlQuery","filtersQuery","currentQuery","getLinkedTasks","allTasks","linkedTasks","getColleagueOrFunctionGroup","_c","_b","department","isTaskListFilterViewEnabled$","TaskOverviewComponent","taskOverviewService","$onInit","DEVICE_STORAGE_KEY","isTaskListFilterViewEnabled","tabletView","subscribeEvents","showTaskDetailViewObserver","taskListFilterViewSubscription","$onDestroy","dispose","templateUrl","CustomerService","isCustomerFilterViewEnabled$","toggleAdditionalInformationView$","CustomerServiceComponent","getStoredDeviceMode","DEVICE_MODE","MOBILE","TABLET","displayAdditionalInformationView","isCustomerFilterViewEnabled","unsubscribeEvents","additionalInformationViewSubscription","DESKTOP","isCustomerFilterViewSubscription","bindings","toggleAdditionalInformationView","applyStylingToDeviceMode","className","SURFACE","isDesktopModeActive","switchDeviceMode","newMode","isSearchActive$","AppRootComponent","signalRStateNotifyingService","authorizationService","isSearchActive","setDeviceMode","unSubscribeEvents","getDeviceMode","desktop","isSearchActiveSubscription","getThemeColor","mine","action","AsyncFilter","subscriptions","nextObjectID","input","scope","$applyAsync","observable","http","inputId","objectId","callback","$on","__asyncFilterObjectID__","$stateful","Authorization","AuthorizationService","toastMessageService","subscribeToTokenUpdates","stop","unsubscribeFromTokenUpdates","stopExpirationWatcher","parseJwt","token","base64","split","atob","tokenSub","jwtToken","parsedJwtToken","onTokenUpdated","exp","Exp","expiration","startExpirationWatcher","watcherTickTock","clearInterval","watcher","currentDate","differenceInMs","intervalWatchTime","setInterval","$provide","bugsnagConfig","apiKey","versionMeta","querySelector","appVersion","getAttribute","bugsnagClient","bugsnag","decorator","$delegate","exception","cause","notify","beforeSend","report","updateMetaData","locale","nl","month_names","month_names_short","day_names","pad","nr","clone","moveToDayOfWeek","dayOfWeek","setDate","getDate","getDay","moveToFirstDayOfWeek","moveToLastDayOfWeek","addDays","moveToFirstDayOfMonth","getFullYear","getMonth","moveToLastDayOfMonth","getMonthName","getMonthNameByNumber","getMonthNameShort","getWeekNumber","setHours","d2","addHours","setTime","addMinutes","addSeconds","days","addWeeks","weeks","addMonths","months","setMonth","getYear","daysDifference","minutesDifference","businessDaysDifference","w1","w2","isValid","isWeekDay","day","toYYYYMMDDString","toDDMMYYYYString","midnight","directive","link","element","attrs","focus","on","HighlightFilter","regExCache","q","toQuery","result","highlight","hide","trim","removeSpecialChars","word","highlightWord","re","RegExp","IsMobilePhoneFilter","mobilePhonesStart","phoneNumber","startNum","debugFn","errorFn","infoFn","info","handle","arg","apiErrorModel","applicationName","exceptionType","exceptionMessage","stackTrace","attr","navigator","userAgent","formatError","currentSession","contentType","log","getByIds","getWritableFields","restrict","interval","getElementsByClassName","stripHtml","html","fineTuning","output","StripHtmlFilter","SynchronizedObjectPathFilter","byEntityAndId","entitytype","entityid","transclude","template","umbrellaEmail","el","emailAddress","aHref","$parse","elem","attributes","$eval","elemReady","MutationObserver","function","observe","attribute","childList","subtree","$mdSelect","ev","querySelectorAll","setAttribute","$mdOpenMenu","classList","ulElement","liElements","getElementsByTagName","liElementHeight","clientHeight","displayPopUp","getElementByClassName","cancelMdDialogContainerAnimation","mdDialogContainer","mdToolbarTransitions","mdTransitionIn","mdTransitionInOffsetTop","offsetTop","transitionAnimation","requestAnimationFrame","height","cancelAnimationFrame","checkMdDialogContainerPosition","setValueAnimation","mdDialogIsActive","mdDialogIsShowing","mdDialogBackdrop","mdScrollMask","overflow","display","hidePopup","removeAttribute","showPopup","togglePopUpStatus","activeElement","HTMLElement","blur","$window","isMobile","setHeight","bodyHeight","innerHeight","setStyle","$mdThemingProvider","definePalette","50","100","200","300","400","500","600","700","800","900","A100","A200","A400","A700","contrastDefaultColor","contrastDarkColors","contrastLightColors","defineColorPalettes","theme","primaryPalette","accentPalette","defineThemes","alwaysWatchTheme","taskOverviewStore","loading","selectedTaskLoading","selectedTaskCompletedBy","KCC","CaseFlowDashboard","Overview","View","replacement","caseInfo","overviewInfo","LoadingStatus","caseFlowOverviewStore","caseflow","caseHistory","selfServiceReport","Loading","view","Loaded","caseflowState","isFinished","finishTask_1","Empty","media","messages","publicMessages","publicMessage","updating","cases","modifiedCaseflow","modifyItemFromCaseFlowOverviewList","removeItemFromCaseFlowOverviewList","assignemnts","assignment","assignemnt","fillAssignmentName","assignments","updatedItems","caseFlowModel","PickedUp","updateItemFromCaseFlowOverviewList","person","isUploadingDocument","mediaUploadId","mediaId","$stateProvider","$urlRouterProvider","transitionToDefaultTab","$state","ps","viewTask","editTask","viewCaseFlow","getDefaultState","transitionTo","when","$injector","taskid","rule","parent","abstract","redirectTo","views","new@","onEnter","caseflowOverviewService","setToListView","top@","impersonationInfo","left@","run","$rootScope","$mdDialog","hasError","event","toState","toParams","fromState","fromParams","preventDefault","authorize","AttachmentListComponent","mediaResources","getMediaObjects","$onChanges","cancelMediaUploadEnabled","getImageSrc","imageId","viewImage","deleteMediaAction","mediaItem","mediaClear","templateType","mediaIsDeleted","targetEvent","clickOutsideToClose","mediaIconFn","updateMediaList","mediaIcon","mediaIsDeletable","cancelMediaUploadAction","processMedia","mediaToProcess","existingMedia","ids","getByIdsV2","mediaObjects","mediaObject","hideTitle","fixedWidth","isUploading","MediaIsDeletableFilter","mediaCategory","SelfServiceMedia","CaseMedia","TaskMedia","RepairRequestItemMedia","KnowledgebaseItemMedia","MediaIsDeletedFilter","MediaTypeFilter","MediaLinkModel","MediaImageModel","MediaVideoModel","MediaDocumentModel","MediaClearParams","deleteMedia","DeleteMediaComponent","mediaResource","cancel","ShowDeletedMediaInformation","CaseActivitiesComponent","activityResource","caseHistoryResource","getByCaseId","filteredItems","category","isCaseFlowTaskActivity","isTaskRelatedActivity","groupTaskActivities","templateFinishedLoading","templatesFinishedLoading","templatesDoneLoading","isTaskCreatedActivity","linkedActivities","y","isLinkedActivity","loadedPersonId","ActiveStepFilter","isStepActive","CanCancelCaseFilter","Submitted","Log","log$","msg","send","signalRConnectionState$","delaySecAfterDisconnect","connected","slow","connect","connection","hub","qs","transport","progress","fail","reconnecting","reconnected","connectionSlow","disconnected","setup","isOnline$","onSignalRInitialized","onSignalRConnected","waitUntilSignalRConnected","CaseFlowProcessing","caseFlowStepFinished$","caseFlowStepPickedUp$","caseFlowStepTasksCreated$","caseFlowStepTaskFinished$","caseFlowUpdated$","caseFlowHub","client","stepFinished","caseFlowId","stepPickedUp","stepTasksCreated","stepTaskFinished","updated","CaseFlowOverviewService","caseFlowResource","selfSerivceReportResource","personResource","uploadService","observeEvents","setToWorkloadView","setView","Workload","loadSelfServiceReportByCaseId","viewDetailedCaseFlow","loadingSelfServiceReport","selfserviceReport","loadedSelfServiceReport","loadByTaskId","loadingByTask","getByTaskId","loaded","loadByCaseFlowId","caseflowId","force","getByIdDetailed","simpleModel","getOwner","ownerModel","loadCaseHistory","umbrellaCaseId","loadCaseMedia","loadMessages","loadPublicMessages","caseFlow","getByIdV2","personId","loadPerson","getCaseMedia","pickUpStep","stateCaseflowList","updatedCaseflow","updateListWhenContainingCaseflow","finishStep","finishTask","outcomeId","addMessage","addMessageToStore","addPublicMessage","addPublicMessageToStore","unload","caseType","statusses","ownerRoleId","executorRoleId","executor","filterCasesAlreadyInState","loadAssignmentNames","uploadDocument","file","upload","getMessages","getPublicMessages","typeString","Employee","FunctionGroup","functionGroup","employeeIds","getAssignmentIdsForType","roles","createAssignment","updateCaseFlowAssignment","functionGroupIds","functionGroups","caseFlows","filterCasesByQuery","filterCasesByCompletion","filterCasesByType","filterCasesByStatus","filterCasesByOwner","filterCasesByExecutor","updateFiltersWithoutReload","caseflowInList","caseflowPassesCurrentFilters","caseflowOverviewModel","removeCaseflowFromList","searchGroupedByOwner","updateCaseFlowListWhenStepPickedUp","notNullOrUndefined","isSelected","getByUmbrellaCaseId","searchSteps","getTaskById","getByUmbrellaTaskId","transformRequest","headersGetter","subaction","getCancelationStatuses","CaseFlowStatusFilter","GroupByOwnerFilter","elm","IsActiveStepFilter","IsCaseActiveFilter","IsFunctionGroupFilter","collegueType","FunctionGroups","PickedUpStepFilter","isStepPickedUp","pickedUpOn","finishedOn","StartedStepFilter","isStepStarted","StepStatusNameFilter","pageTitle","overview","CaseHandling","caseSelected$","CaseFlowMediaItemsComponent","getAbsoluteApiUrl","isLink","CaseflowTimelineItemComponent","caseflowResource","loadCaseflowDetails","hasPermissionsToSeeDetails","DashboardLoadingIndicatorComponent","reloadOnSearch","details","CanModifyCaseFlowFilter","employee","Finished","Canceled","editCaseFlow","CaseFlowOverviewDetailsComponent","locals","details@dashboard.caseflow","messageCount","publicMessageCount","zaak","$stateParams","caseFlowOverviewService","CancelCaseFlowPopupComponent","statuses","confirm","statusId","waiting","cancelationStatusId","finally","CaseFlowMessageComponent","getMedia","tabcontent","CaseFlowContactMomentsComponent","CaseFlowDocumentsComponent","actionUrl","isAuthorizedToViewCaseFlowDetails","CaseFlowInformationComponent","filterType","CorrespondenceTypeFilter","correspondenceType","Digital","GenderFilter","gender","Male","Female","HousingAllocationRegistrationTypeFilter","housingAllocationRegistrationType","Garage","House","CaseFlowMessagesComponent","remark","uploadedMedia","removeUpload","CaseFlowPublicMessagesComponent","CaseFlowDetailsComponent","isDocument","isImage","deleteMediaItem","getChannelTypes","Desk","Phone","Visit","Email","Post","Social","Chat","Survey","Backoffice","CaseFlowStepSelfServiceScenarioPopupComponent","impersonationService","loadChannels","selectChannel","channelInfo","scenarioId","current","channels","CaseFlowOverview","CaseFlowStepSelfServiceScenariosComponent","selfServiceScenarioResource","toastSvc","currentValue","loadStepSelfServiceScenarios","startSelfserviceScenario","scenario","selfServiceScenarioId","selfServiceScenarios","stepSelfServiceScenarios","selfServiceScenarioIds","scenarios","stepSelfServiceScenario","detailedSelfServiceScenario","filterSelfServiceScenario","startAutomatically","selection","selfSerivceScenario","CaseFlowStepTasksComponent","caseFlowService","colleages","loadStepTasks","stepTasks","taskIds","umbrellaTaskId","detailedTasks","loadColleagues","stepTask","detailedTask","filterTask","finished","isOptional","pickedUp","outcome","outcomes","peoples","completeTask","Afgerond","isNewTask","isPickedUpTask","isFinishedTask","renderCheckbox","CaseFlowStepsComponent","colleagues","selectedStep","activeStep","loadFunctionGroups","toggleStep","currentTarget","parentNode","tagName","$broadcast","pickedUpByModel","functionGroupId","functiongroups","functiongroup","canPickUpStep","pickupCaseFlowStep","stepId","finishCaseFlowStep","isAutorizedToFinishStep","isAutorizedToPickUpStep","allRequiredTasksAreFinished","previousValue","isFinishedStep","renderButtons","FinishCaseFlowStepPopupComponent","getUnfinishedTasks","isTaskFinished","FinishCaseFlowStepTaskPopupComponent","onOutcomeSelected","needsOutcome","canClose","$close","$dismiss","PickUpCaseFlowStepPopupComponent","$filter","toastService","employeeId","taskAssignments","isFunctionGroup","assignToFunctionGroup","assignToEmployee","clearAssignedTo","SelectColleagueOrFunctionGroupComponent","functiongroupResource","assignedToList","loadAssignedToList","onChange","searchAssignedTo","getColleaguesAndFunctiongroups","userId","pagedList","preSelectCurrentUser","preSelectAssignedTo","listItem","createListItem","isLoaded","selectedValue","required","EditCaseFlowComponent","go","response","CaseFlowOverviewFiltersComponent","selectedStatus","selectedCompletion","selectedType","filterByCompletion","newSelection","filterByType","searchOwner","filterByOwner","searchExecutor","filterByExecutor","CaseFlowListComponent","navPage","width","innerWidth","selectedId","pageChanged","newPage","requestMoreCases","openItem","CaseFlowStepDeadlineFilter","totalSteps","finishedSteps","getFinishedSteps","currentStepNr","currentStep","CaseFlowStepSummaryFilter","isPickedUp","overview@dashboard","_caseflows","CaseFlowWorkloadComponent","changes","getColleagues","unsigned","allLoaded","getColleagueIds","flattenedColleagueIds","deferred","defer","mapColleagues","moreCasesAvailable","more","ChatConversationHandling","MessageStatuses","MessageDirections","ChatProviderType","ConversationStatus","ChatConversationStatusFilter","ChatConversationPendingStatusFilter","isPendingConversation","ChatConversationDetachedStatusFilter","isDetachedConversation","ChatConversationActiveStatusFilter","isActiveConversation","ChatConversationAcwStatusFilter","isAcwConversation","ChatConversationEndedStatusFilter","isEndedConversation","ChatConversationActiveOrAcwStatusFilter","isActiveOrAcwConversation","ChatConversationAcwOrEndedStatusFilter","isAcwOrEndedConversation","ChatCustomerNameFilter","conversation","customer","customerName","firstName","lastName","NotificationService","myNotification","Visibility","change","hidden","CustomerCard","Activities","contactActivityRegistered$","taskCreated$","ActivityRegistrationService","thesaurusResource","faqResource","targetGroupResource","activityRegistrationStore","recoveryKey","selectedChannelType","Unknown","where","setRecoveryData","channel","initialize","channelName","tagId","faqId","recoveredData","getRecoveryData","channelType","loadRootTags","selectTag","selectFaq","loadSelfserviceScenariosForPerson","loadTargetGroups","getSearchQuery","selectPanel","panel","clearChannel","existingParams","getRootTags","tags","clearTag","cacheTag","selectedFaq","increaseViewCount","selectTargetGroup","targetGroup","selectFollowUpQuestion","followUpQuestionId","selectScenarioById","selectScenario","thesaurusTagId","thesaurusTag","getSelectedChannelType","cachedChannelType","getSelectedTagId","mainTag","selectedTag","selectedScenario","getSelectedFaqId","getSelectedTargetgroupId","selectedTargetGroup","getSelectedFollowUpQuestionId","selectedFollowUpQuestionId","contactActivityRegistered","taskRegistered","chatConversationId","getTargetGroups","targetGroupInfo","targetGroups","getAllForPersonId","targetgroups","getActiveByPersonId","RegisterStatus","ToAcw","ACW","ToActive","Active","chatStore","isLoggedIn","conversations","conversationsStatistics","registration","Registered","NotRegistered","originId","activeId","stats","conversationId","lastReadTime","selectedOriginId","requestId","selectedAnswer","answer","ChatService","toastMesssageService","chatResource","contactActivityResource","notificationService","taskActivityResource","cachedCustomers","previousConversationState","sendMessage","messageText","conversationMessagesRead","getInitialQuestionText","initialQuestion","direction","toOperator","applyPolling","linkActivityToChatConversation","activityRegistrationData","linkTaskToChatConversation","mapActiveConversation","mapPendingRequest","getAllOperators","operators","currentOperator","Observable","forkJoin","getActiveConversations","getPendingConversations","tapOnError","resetChatObserver","hasConversationStateChanged","nrOfConversationsHasIncreased","displayNotificationWhenBrowserIsHiddenOrNotInChatDashboard","loadAndCacheCustomers","accept","kccConversationId","openConversation","closeConversation","startAfterCallWork","leave","detachOperator","detach","endAfterCallWork","endAcw","registerOperator","login","naturalPerson","insertion","loginModel","avatar","register","loginOperator","deregisterOperator","logout","clearConversationState","addSelectedAnswer","logoutOperator","hasActiveConversation","personConversations","toCustomer","email","contactDetails","emailAddresses","linkCustomer","customerId","unlinkCustomer","currentConversationState","notCachedCustomerIds","persons","foundIds","notFoundIds","getCachedCustomerOrUnknown","nrOfPendingRequests","inChatOverview","isBrowserHiddenOrNotHavingFocus","visibilityState","hasFocus","role","getConversation","assignChatConversation","contactMomentId","filteredByPersonId","setChatObserver","chatObserver","getCustomer","nonOperatorParticipant","participantInfo","authenticatedCustomer","anonymousCustomer","externalChannelParticipant","displayName","profileId","createdOn","kccConversationRequestId","externalConversationId","operator","currentChatOperator","participantId","isAnonymous","afterCallWorkStartedOn","Detached","mapMessages","rating","authenticated","anonymous","Pending","participants","operatorParticipantIds","sentOn","timestamp","isRead","isSystemMessage","attachments","registered","ChatNoChatSelectedComponent","details@dashboard.chat","chatService","ChatConversationDetailsComponent","isProcessing","acceptConversation","pickupConversation","ChatConversationFiltersComponent","ChatConversationListComponent","selectConversation","AddressTypeFilter","addressType","Home","Postal","getByPersonId","getByEmail","getDetailed","route","getAll","getAllByMail","mail","provisionAccounts","FaqHasFollowupQuestionFilter","faqType","WithFollowUpQuestions","FirstRoleIdFilter","active","indicatorsForMultipleKeys","removeIndicator","mute","IndicatorService","indicatorEvaluationResource","indicatorResource","getActive","models","setMuted","indicatorId","onmute","phoneCalls","until","PhoneNrFilter","netNumbers","tel","countryCode","netNr","phoneNr","hasCountryCode","getNetNumber","phoneStatusSummary","PhoneTypeFilter","stringType","deleteProspect","SalutationFilter","defaultPrevented","container","speed","elPosTop","top","scrollTop","animate","scrollToElement","scrollHeight","scrollToBottom","getByName","getAllByTagId","impersonate","getAllWithWorkAreas","getForEditingById","getRelatedAcquaintance","createNewVendor","onlyWithWorkAreas","getAllForResidentialZone","getAllForResidentialZones","ActivityChannelFilter","Facebook","Tweet","Web","ActivityChannelIconFilter","ActivityColorFilter","activityName","ActivityIconFilter","ActivitySummaryFilter","repairRequest","defectName","unit","correspondence","filename","ActivityTitleFilter","getActivityName","getTaskType","getCompleteBy","getNextOwner","getNewOwner","getReportTitle","completeByFunctiongroup","newOwner","newFunctiongroup","nextOwner","nextFunctiongroup","CaseStatusFilter","convert","Closed","InProgress","convertedValue","DotToNewLineFilter","ManagementPortalPathFilter","TaskActivitySubTitleFilter","completeReason","rejectReason","deleteReason","ActivityTimelineComponent","configResource","timeline","trackCaseChanges","loadMore","onLoadMore","isFirstCaseChanged","$emit","currentCases","prevCases","currentHasItems","prevHasItems","firstCurrentCase","firstPrevCase","disableRegistrationOfFollowUpActivities","disableActivityButton","ActivityLogUrlFilter","getLogUrlByTimespan","date","transformDateToUrlString","getUTCMonth","getHours","getMinutes","ActivityTimelineItemComponent","$timeout","createDialog","activityRegistrationService","customerCardActivityInfoService","faqExpirationDatesRegistrar","hasPermissionToRemoveActivity","deleteContactActivity","isAuthorizedToDeleteCasesAndActivities","caseDeleteAndRestore","getDeleteOrRestoreActivityIconTitle","isDeletedActivity","getDeleteOrRestoreActivityIcon","getDeleteOrRestoreCaseIconTitle","cs","isDeletedCase","getDeleteOrRestoreCaseIcon","isDeleted","restoreOrDeleteActivity","popupMdDialogSettings","restoreOrDeleteCaseAction","getFaqExpirationDate","timelineConfig","observeStatusFilter","statusFilterSubscription","toggle","isAllowedToSeeActivityDetail","showDetails","preventFollowUpActivityLoading","loadFollowUpActivities","hasFollowUpActivities","parseInt","nrOfFollowUpActivities","isAllowedToRegisterTask","createTask","activityRead","isAllowedToRegisterContactActivity","caseCreate","removeActivity","removeCase","isContactActivityWithinRemovalPeriod","diffMs","diffMins","round","activityModificationTimeLimitInMinutes","launchTaskRegistrationPopup","contractId","contract","launchContactActivityPopup","launchTransferPopup","modalClass","isOnColleagueCard","hasDifferentChannelPredecesor","today","isExpired","expiresOn","expirationInfo","getStatusFilter","statusFilter","model","isRestoredDeletedActivity","isRootActivity","scenarioName","lastModifiedOn","lastModifiedBy","collapsedTimelineChildrenInViewport","positionOfItem","activityItem","timelineItem","timelineItemStyling","getComputedStyle","elementTransitionDuration","parseFloat","transitionDuration","viewportHeight","collapsedStatus","isScrolling","scrollContainer","totalHeight","parentElement","checkHeaderHight","domMutationObserver","mutations","calculateItemHeight","characterData","toggleHeightOfItem","isItemCollapsed","isFooterItemInViewport_1","lastElementChild","getBoundingClientRect","footerElement","bottom","isFooterElementInViewport","removeCollapsedClassFromItem","resetHeightItem","removeStickyHeader","removeStickyFooterFromItem","isBottomItemNotInViewport_1","isBottomElementInViewport","addStickyFooterToItem","children","firstElementChild","setWidthFooterAndHeaderItem","firstChild","clientWidth","isTopElementInViewport","elementPosition","$observe","disconnect","initialArray","lastChild","nextElementSibling","buildArray","padding","hideFooterIfEmpty","itemHasStickyHeader","scrollToTopOfElement","checkIfScrollToIsFinished_1","isScrollToFinished","isBodyInViewportAndBottomNot","collapsedTimelineChildrenInViewport_1","addStickyFooterTimelineItems","isTopElementNotInViewport","collapsedTimelineChildrenInViewport_2","removeStickyFooterTimelineItems","areTopAndBottomOfElementInViewport","collapsedTimelineChildrenInViewport_3","removeStickyFooterFromViewportTimelineItems","$$element","DeleteActivityTimelineItemComponent","deleteCase","deleteActivity","isCase","RestoreActivityTimelineItemComponent","restoreCase","restoreActivity","SuggestionState","CreateFaqSuggestionComponent","suggestionState","suggestion","createSuggestion","Default","Creating","submitSuggestion","hasPermissions","knowledgebaseFaqCreateSuggestion","createFaqSuggestion","fromOperatorId","Done","attachEvents","calendarModel","startFromHour","agendaEvent","eventStartHour","eventEndHour","endTime","customAttachTime","fromPreviousDay","setMinutes","setSeconds","dayInfo","month","isAllDay","daySelector","monthSelector","yearSelector","matchingExactElements","findHeaderElementMatchingDate","attachDate","hourSelector","findElementMatchingDateAndHour","eventElement_1","attachStartTime","parentHeight","outerHeight","topDistance","css","messageSpan","append","eventStartMs","eventEndMs","durationInMinutes","margin-top","addClass","createEventElement","currentColumn","totalColumns","margin","max-width","appentStylingAccordingToColumn","columnPosition","columnsCount","mouseenter","tooltip","duration","createEventElementTooltip","mouseX","clientX","mouseY","clientY","bb","mouseleave","dayEvents_1","generateCalendarModel","events","sortedEvents","sortedEvents_1","durationInDays","calendarAppointmentModel","overlappingWithEvents","groupNumber","calendarId","splitEventsByDays","eventsInTheDay","otherEvents","otherEvents_1","otherEvent","areEventsOverlapping","eventsInTheDay_1","visited","overlappingGroup","calculateGroupClutter","isVisited","relationEvent","highestColumn","overlappingGroup_1","calculateColumnPosition","overlappingGroup_2","eventsInTheDay_2","event1","event2","firstFactor","secondFactor","usedPositions","highestColumnPosition","columnPositionSet","priority","$watch","oldValue","EventCalendarHelper","FIRSTHOUR","LASTHOUR","firstHourOfDay","lastHourOfDay","CalendarEventItemClassesFilter","app","clz","isRecurring","hr","early","late","EventCalendarComponent","workHoursStart","workHoursEnd","selectedDay","workHours","generateWorkHours","weekDays","getWeekDays","dayStart","dayEnd","dayEvents","getEventsBetween","isWeekday","selectDay","onDaySelected","previousWeek","previousWeekStart","nextWeek","nextWeekStart","getMonthAndYear","getSelectedDay","workHoursArray","isSameDay","d1","hideDatepicker","hideTodayAgenda","BaseIndicatorsComponent","displayExplanation","indicator","warning","displayPopup","alert","ariaLabel","ok","IndicatorsComponent","indicatorService","previousModels","isModelChanged","indicators","isChanged","PreloadedIndicatorsComponent","KnowledgebaseSuggestionsBasedOn","KnowledgebaseComponent","faqActions","targetGroupChoices","targetGroupAnswers","recentFaqs","suggestedFaqs","suggestionsTitle","answersForSubscribedTargetGroups","answersForUnsubscribedTargetGroups","maxSuggestedFaqs","applySearch","reset","subscribedTargetgroups","initializeSuggestions","loadRootItems","suggestionsQuery","pendingSuggestionsUpdate","basedOn","generateSuggestions","loadRecentFaqs","loadMostViewedFaqs","loadTags","targetGroupId","selectedFaqId","getAnswersForSubscribedTargetGroups","getAnswersForUnsubscribedTargetGroups","faqStatus","Published","getSelectedTag","onFaqSelected","loadFaqs","putInRecentFaqs","recentIds","getRecentFaqs","faqs","additionalFaqsToLoad","getOrderedByViewCount","storedRecentFaqs","parsedRecentFaqs","isInSearchMode","getSelectedFaqTargetGroup","faqAnswerSelected","registerFaq","newFaq","isLoadMoreVisible","loadingFaqs","getTotalRemainingFaqCount","getNextRemainingFaqCount","hasTargetGroupContent","selectTargetGroupForFaq","targetGroupAnswer","isTargetGroupSelected","savedTargetGroupInfo","getFaqAnswer","targetGroupsLinkedToPerson","supplementAnswerWithTargetGroupInfoText","targetGroupName","executeFaqAction","faqTargetGroup","onExecute","getFaqsWithoutItems","updateFaqList","similar","content","suggestions","this_1","isOnStartPage","cancelSearch","parentTagId","loadingTags","forParent","getByTagIdPaged","onClose","MultiLinePromptDialogComponent","defaultTheme","maxRows","cancelText","confirmText","placeholder","ProfileWithPopupComponent","phoneService","presenceResource","openMenu","$mdMenu","open","callNr","getPhoneNumbers","getEmailAddresses","getPosition","getAvailabilityStatus","getSpawnPath","phoneNumbers","getStatusByIds","presence","availabilityStatus","isOnCustomerCard","isCustomerSelected","isOnSelectedPersonCustomerCard","personName","extended","QuickMenuComponent","buttons","ColleagueCard","facets","calendar","right@customerservice","ColleagueCardMenuComponent","createTabs","tabs","customerCard","phoneViewColleagueHistory","createTab","addTab","tab","ColleagueResource","getColleagueResource","getResource","getAllWithRoles","getAllWithRolesByRoleId","searchWithRoles","getColleaguesByTagId","getColleaguesByTagAndUnitId","colleagueStatusUpdated$","presenceHub","statusUpdate","ColleagueCardSidebarComponent","loadColleague","observeAvailabilityStatus","presenceObserver","loadAvailabilityStatus","ColleagueHeaderComponent","tab@customerservice","ColleagueActivitiesComponent","loadingActivities","getByColleagueId","CalendarResourceBuilder","getCalendarResource","getAppointmentsForDay","ColleagueCalendarTabController","calendarResource","emptyGuid","nrOfDaysToLoad","appointments","reloadCalendar","loadCalendar","colleagueId","available","toLocaleString","ColleagueTelephonyComponent","phoneStatusSummaryResource","phoneCallResource","roleResource","statusSummary","calls","hasPermission","loadingData","loadStatusSummary","loadPhoneCalls","callsWithPersonIdAndName","callDetails","roleId","getAllByIds","callRole","IsInboundCallFilter","PhoneStatusDescriptionFilter","Unavailable","Available","Offline","Busy","ComplexCard","ComplexCardSidebarController","complexResource","unitResource","loadComplexData","loadUnits","complex","getAllByComplexId","units","firstunit","caseRead","announcementRead","ComplexCardHeaderComponent","openComplexCardKnowledgebase$","ComplexActivitiesComponent","knowledgebaseSubscription","openKnowledgebase","hasPermissionsToReadActivities","loadComplex","loadCases","setFaqActionDefinitions","createtask","primary","registerTask","displayKnowledgebase","closeKnowledgebase","loadMoreCases","registerAnnouncement","getByComplexId","ComplexCardMenuComponent","createButtons","label","auth","class","ComplexAnnouncementsComponent","announcementResource","loadAnnouncements","loadingAnnouncements","byComplexId","announcements","ComplexUnitsComponent","currentYear","loadingUnits","CustomerCardAccountInfoService","accountResource","customerCardStore","account","CustomerCardCustomerInfoService","customerResource","personal","CustomerCardPersonInfoService","adminPersonResource","synchronizedObjectResource","addEmptyPhoneNumbersEmailAddressAndPostalAddressWhenNotAvailable","makeAddressTypeNumericToGuaranteeFixedSorting","loadWritablePersonFields","loadSynchronizedObjects","personid","personIsDeletable","err","fields","addresses","city","houseNumber","isEmptyAddress","original","isEmptyPhoneNr","updateCharacteristics","getSelectedPerson","hyphenated","properties","None","addressLine","country","fullAddressLine","houseNumberExtension","street","zipCode","lines","address","Sidebar","Personal","AccountState","CustomerState","Contracts","Announcements","Bills","sidebar","accountInfo","customerInfo","contractInfo","announcementInfo","activityInfo","billInfo","addAddressLinesToBills","bills","contracts","fullAddress","bill","getAddress","registrationInfo","allActivityCategories","allScenarios","rootTags","activityCategory","selectedScenarioId","selectedTagId","activityRegistrationInfo","selectedPanel","tagInfo","faqInfo","contactRegistrationInfo","taskRegistrationInfo","selectedContract","outstandingBalance","contractors","categories","hasMultipleContracts","registrations","contractorPanelCollapsed","contractPanelCollapsed","contactPanelCollapsed","ImpersonationService","topBarStore","personInfoService","returnToCase","updateImpersonationState","lastLoadedPerson","leaveAndReturn","switchOnFullScreen","switchOffFullScreen","isFullScreen","fullscreenMode","setPortalUrl","portalUrl","personHubOnUpdated$","personHubOnStarted$","personHub","started","PersonJitService","selectPersonId","clearToastMessage","onHidden","flatMapLatest","timer","triggerJitUpdate","unsubscribe","server","startJitUpdate","panelState","accountInfoService","contractInfoService","registrationInfoService","onExit","itemHeaderHeight","mainEl","getElementById","heightTopBar","getViewportHeight","isBodyElementInViewport","elementContainsStickyFooterClass","elementContainsStickyHeaderClass","itemHeaderEl","CardFeedbackMessageComponent","CustomerLoadingIndicatorComponent","CardProgressMessageComponent","openKnowledgebase$","openSelfServicePanel$","CustomerActivitiesComponent","announcementInfoService","activityInfoService","isContactRegistrationPanelSelected","sssSubscription","isSssRegistrationPanelSelected","openSssRegistrationPanel","createKnowledgebaseActionDefinitions","openSelfServicePanel","hasRoles","checkForPersonChatActivity","chatSubscription","loadMoreAnnouncements","loadMoreActivities","knowledgebaseActions","registerContactActivity","reload","knowledgebaseInitialized","personHasRoles","toggleSssRegistrationPanel","SelectedPanel","Sss","closeSssRegistrationPanel","toggleContactRegistrationPanel","isActive","generateSuggestionsQueryBasedOnChatMessaged","CustomerCardMenuComponent","registrationsResource","isCustomer","isProspect","contractRead","registrationRead","billRead","customerSatisfactionRead","exportTimeline","startTimelineExport","getDetailedRegistrationsByPerson","getRegistrantInfoByPerson","CustomerHeaderComponent","housingAllocation","regInfo","registrantInfo","CustomerCardSidebarService","initializePanelState","toggleContractPanel","sidebarState","getSidebarState","isCollapsed","toggleContractorPanel","toggleContactPanel","getStoredValue","storageKey","storedValue","isNullOrUndefined","CardSidebarContactPersonsComponent","workAreaResource","loadWorkAreasForActiveContracts","getResidentialZoneName","getResourceCount","groupKey","workAreaGroups","group","workAreaKey","activeContracts","isActiveContract","uniqueUnitIds","self","workareas","areaId","areaGroups","groupName","expertise","collapsed","onToggle","CardSidebarContractInfoComponent","Contract","CardSidebarContractorsComponent","$sce","toast","getContractorsRegistrantInfo","contractorsRegInfo","__awaiter","hasActiveHousingRegistration","contractor","isOccupantOnly","getAsTrustedUrl","trustAsResourceUrl","showCountry","CardSidebarVendorInfoComponent","CustomerCardSidebarComponent","customerCardSidebarService","allPersonDataLoaded","allCustomerDataLoaded","isOutstandingBalanceLoadedOrNoFinancialPermissions","stateObserver","stateStream","mapCustomerStateToIndicatorModel","mapPersonStateToIndicatorModel","isAuthorizedForContactPersons","contactPersonRead","hasBailiffCase","bailiffCase","hasArrears","hasPaymentArrangement","hasUnpaidBills","isPropertiesProperty","customerProperties","personProperties","contractIndicatorModels","personIndicatorModel","Account","Person","Unit","indicatorModels","activityHubOnUpdated$","activityHubOnStarted$","activityHub","ActivityJitService","getPersonId","CustomerCardActivityInfoService","isDifferentPerson","resetActivities","loadFilters","deleteItem","restoreItem","filterByContract","filterByActivityCategory","filterByScenarioId","filterByTagId","filterByChannel","channelFilter","currentNrOfActivities","filterByPersonIdAndFilters","sssIds","tagIds","linkActivitiesToCaseAsSolutionToPreventBigDataResponse","onError","updatedCases","firstActivity","lastActivity","loadActivityCategories","loadAllSelfserviceScenarios","getCategories","filterActivityCategories","filteredScenarios","showInOverview","left@customerservice","activityCategories","selectedCategory","activityService","announcementService","ToastMessageService","defaultTimeOut","errorTimeOut","defaultOptions","positionClass","hideDuration","timeOut","toastr","passedOptions","toastClass","clearAll","RegisterAnnouncementPopupComponent","announcement","endDate","isExternal","modified","order","personIds","residentialZoneIds","residentialZoneId","startDate","applicationIds","save","resetStartDate","resetEndDate","FaqService","createNewFollowUpQuestion","parentId","createEmptyFaq","followupQuestion","additionalInternalInfo","synonyms","author","lastPublished","deletion","Concept","createEmptyFollowUpQuestion","createEmptyFollowUpQuestionLinkedToParent","Faq","findByName","applicationId","RegisterFaqPopupComponent","adminFaqResource","faqService","applicationResource","ToReview","faqConcept","concept","saving","ChatContactMoment","MailContactMoment","mailConversationId","assignMailConversation","CardKnowledgebaseBreadCrumbComponent","resetChannel","onChannelCleared","onChannelSelected","onTagSelected","tagWithParents","onReset","rootText","cssClass","CardKnowledgebaseChannelSelectionPanelComponent","CardKnowledgebaseFaqBreadCrumbComponent","tagClicked","CardKnowledgebaseFollowUpQuestion","followUp","chooseOption","$event","option","chosenOption","stopPropagation","hasChosen","isRootLevel","getLevel","showQuestion","lvl","getLevelClass","CardKnowledgebaseComponent","isChannelSelected","selectedChannel","isSssSelectionPanelVisible","resetAndClose","getSelectedChannel","getChannels","CardKnowledgebaseSssSelectionPanelComponent","onScenarioSelected","FaqMediaComponent","loadMediaItems","mediaWithVisibility","mediaLoading","writeToConsoleWhenInDebugMode","eventName","phoneHubOnError$","phoneHubOnUpdated$","phoneHubOnPhoneCallRolesUpdated$","phoneHubOnMessage$","phoneHubOnStatsUpdated$","phoneHub","phone","updatePhoneCallRoles","phoneCallRoleModel","onMessage","telephonyInstalled","telephony","telephonyAvailable","PhoneService","roleModelCache","isValidPhoneNr","inboundCallFilter","isRingingStatusFilter","calculateTelephonyAvailablilty","handlePhoneEvent","retrieveRoleModelsForCall","statistics","reportUserReconnected","hasActiveCall","hasActiveCallForRoleId","telephonyInfo","subjectRoleId","hasAcwCallForRoleId","lastFinishedCall","allowedToCall","telephone","whenTelephonyAvailableAndSignalRInitialized","dial","callNrDirect","transferDirect","connectionId","logoutMultipleByUserIds","userIds","releasecall","releaseCall","forwardcall","forwardCall","holdcall","Established","holdCall","OnHold","resumeCall","statusChanged","ready","notReady","queueStatusChanged","queueStatus","leaveQueue","enterQueue","password","setPhoneRichPresenceState","phoneRichPresenceState","endAfterCallWorkAndLeaveQueue","setRoleForCall","phoneCallRegistrationId","unsetRoleForCall","isAvailableToUser","showAlerts","phoneCall","retrieveRoleModel","candidateRoleIds","roleModel","call_1","whenTelephonyAvailableAndSignalRConnected","phoneCapabilities","InvalidUser","Online","NotLoggedIn","RegisterContactActivityPopupComponent","contractResource","allContracts","displayedContracts","isSaving","LAST_SELECTED_DIRECTION","init","canChangeDirectionForSelectedChannelType","resetDirectionForInboundChannelTypes","Inbound","setIsPublic","notifyClient","disableDirectionSelection","isPublic","loadContracts","addPasteEventListener","selectedContractor","req","selectedTargetGroupId","mailId","searchContract","selectContract","loadContractors","getAllFilterValuesByRoleId","contractList","getContract","isActiveOrFutureContract","preselectedContract","getContacts","clipboardEvent","clipboardData","getAsFile","faq_1","publicApplicationIds","RegisterUnitTaskPopupComponent","residentialZoneResource","createdByList","LAST_SELECTED_FUNCTIONGROUP","createNewTask","chatCustomerInformation","loadResidentialZone","loadAndPreSelectDropdowns","isCustomerOrProspect","generateSubject","selectedTaskType","fromId","getRoleId","createdTask","setCreatedBy","colleagueOrFunctionGroup","getCustomerId","loadCreatedByList","preSelectCreatedBy","queryVisibleTypes","requestTaskType","assignTo","loadExpertiseForUnitAndMainTag","loadExpertiseForMainTag","getPagedByTagId","functiongroupList","firstFunctiongroup","getByUnitAndTagId","getUserWithFunctiongroups","lastSelectedFunctionGroup","currentUser","getSubjectForChat","residentialZone","getSubjectForPerson","selectedContractAddress","selectedContractorHome","homeAddress","selectedContractorPostal","postalAddress","personAddress","zones","channelUnknown","faq_2","ThesaurusTagMediaComponent","knowledgebaseItemResource","getByTagId","knowledgebaseItem","getColleagueEmail","emails","TransferPopupController","colleaguesWithExpertise","setColleague","loadPresence","setPerson","job","jobTitle","phoneNumber2","pictureBlobId","$modalCancel","isCalendarAvailable","isCalendarFacetAvailable","firstFunctionGroup","Terugbellen","loadColleaguesWithExpertise","setDirectiveFunction","setHeightColleagueColumn","loadContractsAndDetermineExpertiseByFirstContract","observePresence","functionGroupsDoneLoading","colleaguePhoneStatuses","mapPhoneStatusesToColleagues","foundStatus","setFunction","transferColleaguesHeight","transferColleaguesChildElements","returnSuggestedColleaguesWithExpertiseHeight","callSetHeightColleagueColumn","Timeline","CustomerTimelineFiltersComponent","isAutorizedToFilterOnIsDeleted","caseReadDeleted","isOnCustomerCardAnnouncements","channelFilters","contractsLoaded","loadingContracts","filterByContractId","filterByCategory","filterByTag","selectedTagName","filterByScenario","selectedScenarioTitle","selectedStatusFilter","selectedChannelFilter","getStatusFilterDescription","All","Deleted","getChannelFilterDescription","Sms","getStatusFilters","getChannelFilters","getFilterValuesByRoleId","closeFilter","CustomerCardAnnouncementInfoService","personAnnouncementResource","loadPage","pagedItems","byContractId","getPagedByPersonId","newAnnouncements","subscribeOnCompleted","AnnouncementTimelineComponent","getAnnouncements","paging","hideFeedback","AnnouncementTimelineItemComponent","toggleVisibility","visible","people","residentialZones","loadResidentialZonesForSelectedAnnouncement","loadCustomersForSelectedAnnouncement","displayAllAnnouncementsLink","CustomerAnnouncementFiltersComponent","CustomerAnnouncementsComponent","billHubOnUpdated$","billHub","BillJitService","billInfoService","getPagedByContractId","getPagedLinkedToPersonByPersonId","getAllPaymentsByBillId","CustomerCardBillInfoService","billResource","loadContractFilters","loadBills","filterBills","loadBillsByPerson","contract_1","newBills","PaymentStatusFilter","New","Success","Failed","Cancelled","Expired","billJitService","BillTimelineComponent","displayAddress","IsBillStatusInProgressFilter","BillTimelineItemComponent","billPayments","results","filterForSuccessStatus","CustomerBillFiltersComponent","CustomerBillsComponent","contractHubOnContractUpdated$","contractHub","contractUpdated","ContractJitService","containsContractId","CustomerCardContractInfoService","loadOutstandingBalance","loadActiveAssociatedContractors","skipReloadOfAssociatedContractors","loadContract","resetContractFiltering","loadContractsByCustomer","getPagedByRoleId","newContracts","getActiveAssociatedContractors","orderedList","getOutstandingBalanceFor","balance","ContractTimelineComponent","ContractTimelineItemComponent","toggleStatus","displayCustomerInsteadOfAddress","isOnUnitCard","contractHasCustomers","toggleContract","getFirstPersonId","customers","CustomerContractFiltersComponent","CustomerContractsComponent","checkChangePaymentMethodIsActive","changePaymentMethodSssIsActive","getCategoriesForPersonId","CustomerSatisfaction","SatisfactionScoreColorFilter","score","chartConfiguration","chart","updateChart","canvas","ctx","getContext","Chart","generateChart","CustomerSatisfactionComponent","customerSatisfactionResource","initiated","scoreCategories","CustomerSatisfactionSectionComponent","isLoading","scores","request","sortDesc","chartData","generateChartData","generateChartConfiguration","xAxis","yAxis","dateFilter","labels","datasets","fill","borderColor","animation","legend","responsive","scales","yAxes","ticks","beginAtZero","gridLines","xAxes","elements","line","tension","point","radius","hoverRadius","backgroundColor","borderWidth","hoverBorderWidth","CustomerScoreCreatedTimelineItemComponent","customerSatisfactionId","customerSatisfactionModel","Impersonation","ImpersonationWindowComponent","startImpersonationSession","selfServiceForm","URL","packet","submit","EditCustomerDataComponent","agentFacetService","clonePerson","hasUpdateableContactFields","isAuthorizedToUpdateField","PhoneNumber","EmailAddress","allowsMultipleTypesOfTheSameTelephoneNumber","writableFields","capabilities","multipleEqualPhoneTypesAllowed","fieldType","fieldName","hasPermissionToUpdateField","isFieldUpdateable","field","editMode","isPhoneNumberUpdateable","isPhoneTypeUpdateable","isPhoneTypeViewable","isEmailAddressUpdateable","isAllowedPhoneType","phoneType","allowedPhoneTypes","BirthDate","updateBirthDate","updateContactEmailAddresses","updateContactPhoneNumbers","updateGender","PostalAddress","updateContactPostalAddress","customerWrite","enterEditMode","saveAndLeaveEditMode","personClone","nrOfAddresses","cancelAndLeaveEditMode","birthDate","fixTheDate","minutes","hours","year","UTC","AccountInfoComponent","accountCreated","accountCreationFailed","accountRecovered","accountRecoverFailed","CustomerCharacteristicsComponent","customerManagement","AgentFacetService","isJitUpdateEnabled","erpAvailable","getErpFacetConfiguration","hasUpdateableCompanyFields","isErpFieldUpdateable","hasUpdateableRegistrationFields","isInDebugMode","erpRegistered","erp","updateableRoleFields","registrationWrite","CustomerCompanyDataComponent","AccountResourceBuilder","getAccountResource","getPaged","block","unblock","startRecovery","createAccounts","getBlockedAccounts","deleteAccount","AccountService","$http","canCreate","username","canRecover","accounts","accountCreate","accountRecover","isActivated","isInactive","isBlocked","isRecoverable","CustomerContactDataComponent","accountService","phoneTypes","phoneNumberContainsText","getSelectedValue","extractTextFromPhoneNumber","isLinkedToAccount","validatePhoneType","onlyUnique","phoneTypes_1","CustomerDetailsComponent","CustomerNotificationSettingsComponent","notificationPersonalPreferencesResource","prefences","personalPreferences","CustomerPersonalDataComponent","addressService","yesterday","isAddressRequired","geography","addressLoading","addressError","houseNumberSuffix","firstAddress","hasUpdateablePersonFields","Initials","FirstName","Insertion","LastName","deletePerson","dialog","htmlContent","CustomerCardRegistrationInfoService","isHousingAllocationAvailable","loadRegistrations","registrationId","reg","ProspectRegistrationsComponent","RegistrationTimelineComponent","ActivityType","RegistrationTimelineItemComponent","customerCardRegistrationInfoService","showActivities","getActivities","getRegistrationType","Parking","cloneRegistration","registrationClone","fieldEditable","updateRegistrationModel","grossIncome","numberOfChildren","numberOfPeople","registrationNumber","toggleDetails","toggleActivities","getActivityType","getOptionStatus","reactions","proposition","Option","creationDate","statusText","reaction","advertisementTitle","Reaction","createdTime","rank","byCreationDateDesc","UnitCard","UnitCardService","unitCardStore","valuationResource","getAllByUnitIdPaged","mergedList","loadByUnitId","loadValuations","valuation","getByUnitId","unitHub","unitHubOnUpdated$","unitHubOnStarted$","Message","UnitJitService","unitCardService","selectUnitId","UnitCardLoadingStatus","Jitting","newUnit","MapComponent","initialLoad","loadData","houseNumberLetter","loadMap","dataWithoutExtensions","placemarkLat","lat","placemarkLon","lon","streetviewUrl","L","tileLayer","attribution","addTo","displayMarker","circle","color","fillColor","fillOpacity","UnitCardSideBarComponent","indicatorModel","UnitCardSidebarContactPersonsComponent","loadWorkAreas","UnitCardSidebarUnitInfoComponent","UnitCardHeaderComponent","openUnitCardKnowledgebase$","UnitActivitiesComponent","unitActivitiesService","UnitCardMenuComponent","anonymousRepairRequestWrite","UnitActivitiesService","unitActivityHub","unitActivityHubOnUpdated$","unitActivityHubOnStarted$","UnitActivityJitService","getUnitId","UnitAnnouncementsComponent","byUnitId","unitContractHubOnUpdated$","unitContractHubOnStarted$","unitContractHubOnContractUpdated$","unitContractHub","UnitContractJitService","UnitContractsComponent","Valuation","unitValuationHubOnUpdated$","unitValuationHubOnJitStarted$","unitValuationHub","UnitValuationJitService","HousingValuationController","requestForUnitId","hasTaskCreatePermissions","subscription","errors","HousingValuationDirective","RequestValuationPopupController","valuationform","$valid","$modalSuccess","onColleagueOrFunctionGroupSelected","CustomerValuationComponent","center@","lastClickTime","timeAllowedBetweenClicks","requiredClicks","clickCounter","resetClicks","increaseCounter","timeClicked","shell","altKey","stopImmediatePropagation","clickTime","handleClicks","SetupFeaturesComponent","configSub","flags","switchFlag","flag","taskSelected$","warningInXHours","addKey","isObject","$key","$value","Shared","toggleTaskListScroll$","InfiniteListComponent","itemCountLoaded","fetchTries","topItemIndex","startAtIndex","itemsPerPage","startAtPage","externalCollection","loadUntilPage","indexListener","pageChangedCallback","calculatePageForItemAtIndex","onExternalCollectionUpdate","totalItemsCount","onTotalItemsCountUpdate","isTaskListFilterViewEnabledSubscription","getItemAtIndex","fetchMoreItems","getLength","updatedCollection","previousCollectionState","isFetching","isListEndReached","totalItemsCountInternal","oldCount","calculateNextPageToRequest","itemCountBeforeFetch","loadItemsFunction","itemsToLoad","itemTemplate","KeycloakAuth","startKeycloak","KeycloakCtor","kc","keycloakInitOptions","pkceMethod","responseMode","redirectUri","pathname","onLoad","timeSkew","checkLoginIframe","succeeded","jqXHR","textStatus","errorThrown","updateToken","AppController","isSelfserviceModule","getModuleTheme","isLegacyBrowser","isMobileDevice","ua","vendor","opera","fx","off","subTitle","Cases","getByContractId","getByEmployeeId","getBySubjectId","isloading","safeApply","phase","$root","$$phase","$apply","MenuTabsComponent","selectedTabIndex","getSelectedTabIndex","isActiveTab","RestoreChannelService","localStorageKey","saveChannel","buildKey","removeChannelInfo","restoreSavedChannel","CardAccountDetailsComponent","isBlockingAccount","isUnblockingAccount","creatingAccount","recoveringAccount","createEnabled","createDisabledReason","setAccount","setAccountActivationVerificationMethod","isEnabled","isRecoveryEnabled","isCreatingAccount","isRecoveringAccount","hasDisableReason","getStatus","createAccount","onCreated","onCreateFailed","onRecovered","onRecoverFailed","isBusy","canBlockAccount","blockAccount","acc","canUnblockAccount","unblockAccount","accountActivationVerificationMethod","getOverview","getCount","methid","announcementHubOnCreated$","announcementHubOnUpdated$","announcementHubOnDeleted$","announcementHub","contentsModified","deleted","AnnouncementPanelComponent","displayPanel","LAST_READ","storedDate","lastReadOn","togglePanel","toggleWhenOpen","hasReadBefore","nrOfUnreadAnnouncements","createdSubscription","addAnnouncement","modifiedSubscription","deletedSubscription","SafeHrefsFilter","StripHtmlExceptHrefsFilter","ChatProviderNameFilter","providerType","actionIdSubactionUrl","getDefaultMessages","subsubaction","getWaitingStats","pendingConversationStatuses","detachedConversationStatuses","activeConversationStatuses","acwConversationStatuses","endedConversationStatuses","conversationStatus","isPendingPendingOrEndedConversation","newPopupStatuses","openPopupStatuses","minimizedPopupStatuses","isConversationPopupStatusNew","conversationPopupStatus","isConversationPopupStatusOpen","isConversationPopupStatusMinimized","isConversationPopupStatusNewOrMinimized","allowedEmoticons","emojifier","emoticonToEmojiMap",":)",":(",";)",":D",":d",":O",":o",":P",":p",";(","emojify","emojifiedText","currentEmoticon","IsAcwConversationFilter","AttachmentComponent","isAudio","attachment","mimeType","isMovie","getMimeType","isFile","getMediaUrl","umbrellaMediaId","getDownloadUrl","getAttachmentFilename","ChatBarComponent","isCustomerCardOpen","collapsedTabsOpened","setAcwStatus","isConversationInACWStatus","closeMenu","currentOpenedConversationId","personObserver","conversationObserver","activeConversationObserver","activeConversationId","lastActiveConversationId","getUserConversations","getPendingMessages","numberOfPendingMessages","createCustomer","externalId","agentInfoId","preserveScope","errorMessage","toggleMenu","initQuestion","navigateToCustomerCard","canCreateRelation","relationWrite","chatChannelName","isActiveOrOpenedConversation","isOrWasActiveId","isOpenedId","reduceVisibleChats","visibleChatsCount","increaseVisibleChats","toggleCollapsedTabs","forceClose","moveChatInfront","updatePhoneNumber","canUpdatePhoneNumber","personPhoneNumbers","isLinked","createPhoneNumberModel","ChatConversationHistoryComponent","chatConversationResource","photoUrlService","assignConversation","loadConversation","m1","m2","initialParticipant","initialParticipantId","initialMessage","customerAvatarUrl","photoUrl","operatorAvatarUrl","chatConversation","limitMessagesTo","ChatConversationHistoryModalController","Emojifier","ChatConversationModalComponent","minimize","confirmCloseConversation","endChatButtonDisabled","newMessage","startTyping","which","shiftKey","ctrlKey","provideDefaultMessage","toggleMessages","readMessages","setEmoticonToInput","emoticon","showSmileys","disableMessageSending","newMessageElement","putCursorAtEnd","observeActiveConversation","observeCurrentlyLoadedCustomerCard","observeSelectedAnswers","settingsObserver","selectedAnswerObserver","getBannerText","showLinkOpenedCard","showOpenLinkedCard","showBanner","addAnswerToInput","currentId","$el","setSelectionRange","DraggableDirective","previousPosition","draggable","ui","ChatFaqBrowserComponent","suggestionsLimit","generateInitialSuggestions","loadPortalConfig","updatedMessagesBinding","initializedSuggestions","customerMessages","lastCustomerMessage","lastMessageId","generateSuggestion","selectededThesaurasTag","faqIsSelected","selectFaqAnswer","selectFaqUrl","getFaqUrlString","closeFaq","returnAnswer","addBulletPoints","copyFaqAnswerToClipboard","faqAnswer","stripHtmlFilter","innerHTML","copyFaqPortalUrlToClipboard","faqUrl","getSuggestionsForMessage","addToSuggestions","requestCount","i_1","isChatAnonymous","returnChatCustomerInformation","DecodeHtmlFilter","innerText","DetachUrlFilter","htmlMessage","DOMParser","parseFromString","links","href","insertAdjacentHTML","ChatIncomingRequestComponent","pendingConversations","waitingTime","minTimeBeforeSuspendMs","ChatInitialFaqsComponent","ChatStarsRatingComponent","activeStars","inactiveStars","ChatTimelineConversationComponent","openChatHistoryPopup","ChatWaitingStatsComponent","waitingCustomersCount","maxWaitingTimeSeconds","averageWaitingPickupTime","averageWaitingReplyTime","activeChatConversations","chatEnabled","chatEnabledObservable","isRetrying","chatStatisticsObservable","startWith","fromPromise","retryWhen","delay","isQueueLengthAboveAverage","isQueueLengthLong","averageQueueLength","isQueueTimeAboveAverage","isQueueTimeLong","DefaultMessagesComponent","defaultMessages","personalizeDefaultMessagesText","sortMessages","messageSelected","onMessageSelected","animateScrolling","chatAutoScroller","hasClass","$element","urlify","$document","toggleClass","AvailabilityDescriptionFilter","AvailabilityUnknownFilter","EmployeeService","isAssignedToFunctionGroup","functiongroupId","isInGroup","isAuthorized","permissionName","IsAvailableFilter","IsAwayFilter","Away","IsBusyFilter","PhotoUrlFilter","photoUrlSvc","heigth","noCache","PhotoBlobUrlFilter","PhotoUrlService","useDefault","seperator","getMilliseconds","PhotoBlobUrlService","appointment","item1","startHour","threshold","duration2","endHour","startEarlyClass","endsLateClass","SearchColleaguesController","searchResults","searching","searchBox","jQuery","doShowSearchBox","getEmailAdress","clearSearchbox","colleagueSelected","hideSearchResults","colleagueClick","showSearchbox","parents","param_1","charAt","innerParam","showSearchResults","noResults","currentItemIndex","currentItem","unbind","handleKeyPress","keyCode","eq","trigger","SearchColleaguesDirective","getFunctiongroupsByTagId","updateForTag","Dashboard","DashboardController","oninit","croute","getThemeForDashboardModule","stateisloading","countResults","getThemeForDashBoardModule","iscase","DashboardMenuComponent","taskTotalObserver","taskTotal","caseflowTotalObserver","caseflowTotal","chatEnabledObserver","chatIsEnabled","chatTotalObserver","chatConversationsTotal","configObserver","displayCaseFlowOverviewSwitch","nethod","getAssociatedContractors","getActiveFor","IsActiveContractFilter","Units","getCollectiveObjectsByCode","Valuations","mediaUrl","edit","getByIdAndTargetGroupId","getStatuses","searchThesaurusFaqsForSelfserviceScenario","getRoot","deleteWithIdsIn","getUsages","TargetGroup","getAllPaged","require","modelCtrl","$parsers","inputValue","transformedInput","$setViewValue","$render","getByIdWithCustomer","getMailsWithCustomer","getMailCount","getMails","getMailsByRoleId","attachCustomerToMailMessage","mailMessageId","CustomerId","PreviewOutgoingMailPopupButtonController","outgoingMailResource","launchPreviewOutgoingMailPopup","outgoingMailActivityModel","outgoingMailId","hideForwardButton","PreviewOutgoingMailPopupButtonDirective","ResendOutgoingMailPopupButtonController","launchResendOutgoingMailPopup","ResendOutgoingMailPopupButtonDirective","getBlob","getDefaultPhoto","getInlinePhoto","getInlineDefaultPhoto","Onboarding","getRelationByExternalId","getAnswers","getAnswersOfIndex","getActionTypes","getByAnswerId","actionType","failures","getFailuresPaged","getAvailablePlanningOptions","repairRequestId","external","getAppointmentByAppointmentId","simulate","answerId","defectId","getActionSpecification","createItem","createItemAnonymous","removeItem","plan","getPropertyConditions","Card","AddDefectPopupController","answerResource","defectResource","repairRequestResource","vendorResource","locationTypeCodeResource","answerPath","defect","actionSpecification","loadOptions","showAnswers","showDefects","showCollectiveObjects","showSpecification","saveAndClose","collectiveObject","canSaveAndClose","canFinish","remarkIsRequired","selectAnswer","setAnswer","defects","answers","selectDefect","setDefect","locationTypeId","locationType","loadCollectiveObjects","loadActionSpecification","selectCollectiveObject","selectVendor","code","collectiveObjects","housingTypeId","actionSpectification","setActionSpecification","decision","ascendAnswer","createPath","vendorOptionIds","vendors","RepairRequestStep","RepairRequestTabController","planningOption","loadUnit","AddDefects","isAddDefectsStep","isPlanStep","Plan","isSubmitted","addItem","backdrop","backdropClass","vendorId","collectiveObjectId","needsPlanning","isPlannable","hasPlanning","goToPlanningStep","canSubmit","isInProgress","remarks","serviceFundId","planningImpossible","reloadUnitCardActivities","submitWithoutPlanning","startNewRepairRequest","PlanRepairRequestComponent","planningResource","planningError","planningFrom","planningUntil","loadNextWeekWhenUnavailable","loadPlanning","planningOptions","availablePlanningOptions","isLastPlannableWeek","errorReason","hasNextWeek","hasPreviousWeek","selectPlanning","ApppointmentTimelineComponent","appointmentResource","appointmentId","getByFlowStateId","Appointments","getAppointments","RepairRequestController","RepairRequestResource","phoneEvent$","AllPhonesService","allPhonesHub","deregister","getAllPhones","listen","allPhonesService","PhoneUserStatusResource","getPhoneUserStatusResource","QuickDialController","quickDialResource","getAllActive","quickDials","updateOrder","LiveStats","getByRoleId","sortorder","getByContractsOfRoleId","getByActivityCategoryAndContractsOfRoleId","getRepairRequestActivitiesByCaseId","getActivityCountForCases","caseIds","AddressLineFilter","getHousenumberExtension","ext","nodeName","section","getAgentConfig","updateAgentConfig","$compile","$controller","defaults","cancelCallback","targetElement","isModal","passedInLocals","idAttr","modalBody","popupTemplate","backdropTemplate","popupScope","$new","backdropElement","backdropLinker","popupElement","popupLinker","handleEscPressed","destroyFn","$destroy","closeFn","removeClass","$modalCancelFromBackdrop","source","srcElement","isInlineEdit","backdropInnerElement","defaultValue","fieldLabels","calculateVisibility","featureName","ifFeatureDisabled","feature","ifFeatureEnabled","IfNotMobileDirective","priorit","IfUmbrellaAuthDirective","ifUmbrellaAuth","IsArrayFilter","IsDateFilter","LocalStorageService","webStorage","OccupantRoleLabelComponent","OfflineService","firstTimeConnecting","isOfflineMessage","online","isOfflineMessageDisplayed","ProspectRoleLabelComponent","ReplaceYoutubeEmbedFilter","transformToHyperlink","clickable","aTags","replaceWith","src","RoleLabelComponent","labelText","labelTitle","ahref","urlTitle","SignalRStateNotifyingService","offlineService","waitTime","pendingNotification","toastMessage","format","TenantRoleLabelComponent","customerStatus","isInActive","isFuture","TrustedAsResourceUrlFilter","$httpProvider","interceptors","str","suffix","isLocalHtmlRequest","UndeliveredMessageComponent","resource","pollPromise","updateScope","retry","poll","getConsumer","queueName","getMessageType","parts","agentStatus","agent","alive","healthy","fetch","metaData","agents","application","retryButtonTitle","retryable","serviceBusErrorRetry","consumer","messageType","lastAttempt","faultTime","resolvedTime","messageBody","VendorRoleLabelComponent","swapAnimation","enter","TweenMax","autoAlpha","scale","ease","Power4","easeInOut","onComplete","initAutoGrow","each","$this","minHeight","shadow","outerWidth","fontSize","fontFamily","lineHeight","resize","appendTo","space","keyup","keydown","$compileProvider","$locationProvider","$qProvider","hashPrefix","debugInfoEnabled","useApplyAsync","errorOnUnhandledRejections","aHrefSanitizationWhitelist","trustAsHtml","numWords","inputParts","pAllowFuture","allowFuture","strings","prefixAgo","prefixFromNow","suffixAgo","suffixFromNow","seconds","minute","hour","years","wordSeparator","dateDifference","substitute","stringOrFunction","strs","numbers","words","timeagoFilter","timedisplayFilter","timeDiff","MAX_VALUE","ngBlur","ngConfirmClick","umbrellaAuth","disabled","removeAttr","toggleElementsDueToAuthorization","$elem","umbrellaScrollInfinite","getSelection","nrClick","newvalue","ngModel","num","toFixed","$formatters","price","$setValidity","filterName","filterParam","applyParams","secondsToHms","bytes","precision","kilobyte","megabyte","gigabyte","bytesToSize","extension","age","emailObj","setTitle","newTitle","dateFormat","dayNamesMin","dayNames","firstDay","monthNames","nextText","prevText","jq","qtip","my","at","constant","fadeOut","$ink","ink_diameter","prepend","pageX","pageY","initRippleEffects","initSidebarMenus","toCamel","Function","exec","toHHMMSS","ForwardMailPopupController","cc","bcc","resend","getAttachment","attachmentContentId","ViewMailPopupController","forwardMail","isSystemUser","loadAttachments","previewUrl","getPreviewUrl","attachmentUrls","contentId","getAttachmentDownloadUrl","getFrames","getBlocks","getPositions","CardAdditionalFieldsController","loadCardAdditionalFields","getDeepLinkLabel","deepLinkLabel","deepLinkUrl","getFieldValue","getDeepLinkUrl","getDeepLinkTarget","deepLinkOpenInSelf","checkFieldhasValue","fieldValue","cardAdditionalFields","card","frame","CardAdditionalFieldsDirective","classLabel","DeepLinkFilter","generic","advertisement","statuscolleague","weekdays","customerupdate","resources","getLocalizedString","library","selectorArr","localize","selectFromSearch$","NewSearchComponent","isMobilePhone","currentButton","currentButtonIndex","getShownAddressFieldName","isMatchingAddress","showresults","highlightFilter","colleagueStatusUpdatedSubscription","obscureSearch","loadCard","stateName","showAddress","showBelMet","showRelationPopup","reorderContactDetails","hits","down","up","getMobile","firstMobile","hasMobile","getPhone","firstNumber","isValidNumber","hasPhone","closeSearchOverlay","toggleNavigationIcon$","prevObject","click","searchbox","loadColleaguePresence","colleagueIds","colleagues_1","toggleTaskListScroll","ResponsiveNavigationComponent","additionalInformationAvailable","responsiveFiltersAvailable","customerTimelineFiltersAvailable","listFilterOverlay","setIcon","toggleValue","navigationIconSubscription","toggleIcon","isSurfaceTab","toggleDeviceMode","focusSearchInput","classValue","toggleView","showListFilterOverlay","removeTaskDetailView","iconValue","removeOverlay","toggleAdditionalInformation","toggleSearchView","resetDisplayElement","displayDownloadButton","deferredPrompt","downloadApp","prompt","userChoice","choiceResult","displayAdditionalInformation","SSSDecisionPath","decisions","Sandbox","SandboxMenuComponent","left@sandbox","center@sandbox","DialogComponent","initialValue","multilinePrompt","customDialog","SelectComponent","artists","something","Search","SearchSpinnerComponent","SearchStatusComponent","searchquery","singular","plural","SearchTabComponent","activetab","ColleagueOverviewController","searchCustomers","hasToShowMore","getSearchParam","clearResults","showCustomers","center@search","Complexes","ComplexOverviewController","resultsTotal","navigate","complexes","showComplexen","CustomerOverviewController","param_2","q_1","openCustomerCard","UnitOverviewController","UnitSearchResource","param","showKlanten","Vendors","VendorOverviewController","personen","param_3","newVal","oldVal","SimpleLoadingComponent","ChatTaskActivity","TaskAssigneeFilter","Verwijderd","Geannuleerd","taskHub","completed","executorChanged","rejected","discussed","TaskDeadlineModel","ITaskOutcomeParams","CreateFaqSuggestionParams","Content-Type","Content-Disposition","queryAllTypes","getDefaultTaskType","getDefaultDeadline","getDefaultDeadlineForTaskType","linkAnonymousTask","TaskService","employeeService","cas","chatCustomerDescription","createChatDescriptionWithChatCustomerInformation","loadTaskData","fixForTransferCallPopup","chatDescription","emailString","isAssignedToMe","isCreatedByMe","ret","TaskstatusFilter","TaskTitleFilter","getTitleForRelatedPerson","isDeceased","addPropertyToTitle","notificationName","consumerName","preText","MakeEmailClickable","shouldBeClickable","makeClickable","emailHref","Document","outerHTML","emailRegex","finding","subMessage","subIndex","foundEmail","extraLength","CanModifyFilter","CanPickupFilter","IsCaseFlowTypeFilter","taskTypeCategory","IsErrorTypeFilter","details@dashboard.tasks","TaskComponent","updateTab","loadLinkedCaseFlow","linkedCaseFlow","setLengthWithHiddenType","setLength","numberOfItems","valueToHide","confirmDelete","isBusyWithPickUp","confirmReject","confirmFinish","isBusyWithFinish","stepTaskId","confirmFinishForCaseFlowTask","confirmFinishForDefaultTask","relatedPersonId","casePersonId","isBusyWithReject","taskHasButton","hasButton","TaskContactMomentsComponent","SelfServiceReportInformationComponent","getFormValue","PropertiesCountFilter","TaskErrorsComponent","linkProperties","undeliveredMessageIdFieldName","scopeIdFieldName","selfServiceReportIdFieldName","onlyIconAndFilename","TaskInformationComponent","selfServiceReportResource","flowStateId","getErrorDescription","LinkedTasksComponent","TaskMessagesComponent","isStringEmpty","EditTaskComponent","mediaResourceProvider","loadMedia","selectedDate","updateDeadlineDate","newDate","setFullYear","canEditTaskType","completeByType","name_2","TaskOverviewFiltersComponent","selectedTaskTypes","selectedTaskTypesModel","setFilters","isFirstChange","secondChangeHasPassed","selectedDeadline","allTaskTypes","searchCreatedBy","toggleTaskType","closeTaskListFilterView","LinkTaskComponent","searchingPersons","selectedPerson","setContract","clearSelected","getContracts","searchingContracts","linkTask","linkAnonymousTaskModel","taakId","renderPersonName","IsNewerThanFilter","nowMinusHours","creationdate","TaskListComponent","requestMoreTasks","ActiveCallFilter","activeCall","CanPickupCallFilter","recalculateHiddenTabs","setContainerWidth","containerEl","scrollWidth","decrease","occupiedWidth","increase","tabsCount","windowWidth","childNodes","evaluateChanges","HasMultipleCandidatesFilter","InboundCallFilter","inboundCall","phoneCalls_1","IsAvailableStatusFilter","IsChatAvailableFilter","IsDialingStatusFilter","IsOnHoldStatusFilter","IsQueueEnabledStatusFilter","IsRingingStatusFilter","OnHoldCallsFilter","phoneCalls_2","OngoingCallsFilter","phoneCalls_3","PhoneButtonStatusFilter","callCount","hold","transfer","hangup","PhoneCallStatusFilter","PhoneStatusIconFilter","PresenceResource","getPresenceResource","RelationPopupComponent","onboardingResource","relationNumber","getRelation","relationModel","copyData","rolesCache","addRoleToCache","phoneModel","applyPhoneCallRoleChange","incomingCall","TopComponent","sessionInfoSub","sessionInfo","isInFullScreenMode","isInTabletMode","pointerEnabled","maxTouchPoints","IsAuthLoginCapableFilter","capability","TopBar","ChatAvailabilityControlsComponent","restoreChannelService","nrOfChatOperators","loggedInPreset","observeActiveOperators","observePendingRequests","chatAvailability","isAvailable","loggedIn","setIconColorAndLabel","toggleAvailability","toggleAvailabilityPreset","getCheckedPreset","getChecked","operatorObserver","requestObserver","toggleChat","requests","hasPickedUpConversations","chatIconClass","chatIconTooltip","chatInfo","ChatControlsComponent","activeConversation","calculateAcwTime","clearAcwInterval","totalAcwTime","ConversationBarComponent","stateClass","onHoldCallsFilter","ongoingCallsFilter","impersonationObserver","applyColoringAccordingToImpersonation","phoneObserver","isTelephonyRegistered","isRegisteredForChat","chatState","isImpersonationModeEnabled","applyColoringAccordingToTelephony","isChatRegistered","applyColoringAccordingToChat","mailObserver","isConversationInACWState","acwState","ongoingCalls","onholdCalls","DialPadComponent","enterNumber","nummer","resetNumber","DialPad","AvailabilityControlsComponent","leaveImpersonationMode","switchFullScreen","IncomingCallComponent","subjectRole","setIndicator","personalIndicators","contractIndicators","getPersonPromise","getContractsPromise","getAccountPromise","getCustomerPromise","outstandingBalancePromise","all","RoleNameFilter","LoginControlsComponent","PhoneAvailabilityControlsComponent","selectPhoneConfig","formatNoMatches","term","dropdownCssClass","formatResult","phoneSubscription","phoneInfo","tooltipText","getTooltip","updatedPhone","phonenumbers","phoneNumberOptions","updateRichPresenceState","inTelephonyQueue","menu","isAcwOrBusyState","selectAvailabilityStatus","setCurrentRichPresenceState","changePhoneRichPresenceState","phoneRichPresenceStateOptions","currentRichPresenceState","hasPermissionToUsePhone","getStateClass","statusValue","currentStatus","getRichPresenceStatusByValue","usePhone","richPresenceStateValue","ConversationState","PhoneControlsComponent","$interval","phoneCallTimer","schedulePhoneCallTimer","activeCallFilter","writeableFieldObserver","writeableFields","conversationState","Idle","Calling","Acw","onCustomerCard","leaveAcw","leaveAcwAndQueue","incrementCallTime","difference","afterCallWorkTime","releasing","unlink","selectCall","getCallSubjectRole","getRoleModel","addPhoneNumberToCustomer","isNumberAlreadyLinked","overwritePhone","currentPhoneModel","newNumber","isAbleToLinkNumber","isPhoneNumberFieldUpdateable","isAllowedToAddUnknownPhoneNumber","nrOfPhoneNumbers","skipPhoneTypeCapabilityChecks","hasFoundUnknownPhoneNumber","phonenrFilter","UmbrellaLogoComponent","title$","environmentName","TopBarComponent","TopLiveStatsComponent","telephonyStatistics","supportsStatistics","scheduleQueueTimer","queueLengthKpiState","RequiresAttention","Critical","queueTime","queueTimeRequiresAttentionCap","queueTimeCriticalCap","incrementQueueTime","queueLength","PresenceColorFilter","stateType","PresenceIconFilter","PresencePhoneIconFilter","TopSearchHeaderComponent","onMore","TopToolbarComponent","photoBlobUrlService","quickLinkResource","displayDeveloperTools","powerBiWorkspaceId","loadQuickDials","loadQuickLinks","loadPowerBiWorkspaceId","isTelephonyAgentRegistered","quickLinkRead","quicklinks","quickDialRead","toggleDeveloperTools","isKnowledgebaseActive","urlStartsWith","isReportingActive","isSelfServiceActive","isShellActive","isXmlConfigActive","isAdminActive","UmbrellaEmail","signalR","makeProxyCallback","makeArray","registerHubProxies","instance","shouldSubscribe","memberKey","memberValue","hubName","hubConnection","createHubProxies","proxies","starting","_registerSubscribedHubs","createHubProxy","invoke","logoutMultiple","complete","execute","outputDebugInfo","toggleOutPutDebugInfo","useDefaultPath","usedModules","defineModule","deps","$mdDateLocaleProvider","firstDayOfWeek","bootstrap","strictDi"],"mappings":"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BsxB,QAAQ,qBACtC,YACA,SAACC,GACG,OAAAA,EACI,mFAGI0hD,YACIzhD,OAAQ,MACR1gB,SAAS,EACT2gB,QACIotC,OAAQ,UACRp3D,KAAM,QACNyrE,MAAO,gBA7BnC,CAAU9hD,WCDAA,UAEN,WADA,SAAA+hD,IAuDYrwE,KAAAswE,YACJ,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MAhNGD,EAAAtxE,UAAAiwB,UAAP,SAAiBuhD,GACb,IAAKA,EAAK,MAAO,cAEjB,IAUIC,EAAaC,EAAOplD,EARpBqlD,EAAUH,EACT1rE,WACA2xC,OACAlf,QAAQ,MAAO,IAGpB,IAFAo5C,EAAUA,EAAQp5C,QAAQ,MAAO,KAErBC,MAAM,UAAW,OAAOg5C,EAGpC,IAAII,GAAiB,EAErB,OAAQD,EAAQ7tE,QACZ,KAAK,GAGD,GAFA8tE,GAAiB,IACjBF,EAAQzwE,KAAK4wE,aAAaL,IACd,OAAOA,EAEnBllD,EAAOqlD,EAAQzqE,MAAMwqE,EAAM5tE,QAC3B,MAEJ,QACI,OAAO0tE,EAGVI,IAAgBH,EAAc,QAEnC,IAAI55B,GAAM65B,EAAQ,IAAMplD,GAAMmrB,OAW9B,MAVoD,SAAhBg6B,IAChCnlD,EAAOA,EAAKplB,MAAM,EAAG,GAAK,IAAMolB,EAAKplB,MAAM,GAC3C2wC,GACI45B,EACAC,EAAMn5C,QAAQ,IAAK,OACnB,IACAjM,GACFmrB,QAGCI,GAGHy5B,EAAAtxE,UAAA6xE,aAAR,SAAqBL,GACjB,IAAoB,IAAAn4C,EAAA,EAAAwE,EAAA58B,KAAKswE,WAALl4C,EAAAwE,EAAA/5B,OAAAu1B,IAAiB,CAAhC,IAAMq4C,EAAK7zC,EAAAxE,GACZ,GAA2B,IAAvBm4C,EAAIztE,QAAQ2tE,GAAc,OAAOA,EAGzC,OAAO,MAnDTJ,EAAajhD,GADlBC,EAAK,WAAY,YACZghD,GAAN,GCDJ,SAAU/hD,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAiBfve,QAAQrxB,OAAO,mBAAmBsxB,QAAQ,8BACtC,YACA,SAACC,GACG,OAAAA,EACI,2FAGIoiD,oBACIniD,OAAQ,MACR1gB,SAAS,EACT2gB,QACIotC,OAAQ,UACRp3D,KAAM,QACNyrE,MAAO,gBA9BnC,CAAU9hD,WCDAA,UAEN,oBAAAwiD,KACWA,EAAA/xE,UAAAiwB,UAAP,SAAiB+hD,GACb,OAAQA,GACJ,IAAK,OACL,KAAK,EACD,MAAO,QACX,IAAK,SACL,KAAK,EACD,MAAO,SACX,IAAK,OACL,KAAK,EACD,MAAO,OACX,IAAK,WACL,KAAK,EACD,MAAO,kBACX,QACI,MAAO,KAhBjBD,EAAe1hD,GADpBC,EAAK,WAAY,cACZyhD,GAAN,GCJJ,SAAUxiD,IAAS,SAAAiD,GAAQA,EAAAsB,YAAAtB,EAAAsB,cAUvBtE,QAAQrxB,OAAO,mBAAmBsxB,QAAQ,oBACtC,YACA,SAACC,GACG,OAAOA,EACH,qDAGIygD,mBACIxgD,OAAQ,OACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,sBAEtBgiC,gBACItiD,OAAQ,SACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUxQ,GAAI,aAzBrC,CAAAlQ,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,GACN,IAAOwD,EAASxD,EAASiD,QAAQO,QAGjC,oBAAAm/C,KACWA,EAAAlyE,UAAAiwB,UAAP,SAAiBilC,GACb,OAAQA,GACJ,IAAK,OACL,KAAK,EACL,KAAKniC,EAAOoiC,KACR,MAAO,OACX,IAAK,SACL,KAAK,EACL,KAAKpiC,EAAOqiC,OACR,MAAO,QACX,QACI,MAAO,KAZjB8c,EAAgB7hD,GADrBC,EAAK,YAAa,eACb4hD,GAAN,GAJJ,CAAU3iD,WCGV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBACfve,QAAQrxB,OAAO,mBAAmBy4C,UAAU,0BACxC,WAuBI,OACI2C,SAAU,IACV1C,KAAM,SAACvG,EAAkBgK,EAAyBxB,GAC9CxI,EAAMO,IAAI,kBAAmB,SAACsT,EAAO/qB,GAC5B+qB,EAAMguB,mBACPhuB,EAAMguB,kBAAmB,EA3BzC,SAAyBC,EAAgCx5C,EAAkBy5C,GACvE,QADuE,IAAAA,MAAA,KAClED,GAAcx5C,EAAnB,CAEA,IAAMke,EAAUs7B,EAAU7tE,KAAKq0B,GAE/B,GAAKke,KAAWA,EAAQhzC,OAAS,GAAjC,CAEA,IAAMwuE,EAAWx7B,EAAQvT,WAAWgvC,IAE9BC,EADqBJ,EAAUI,YACEtsE,KAAKO,IAAI6rE,GAEhDF,EAAUhhC,OAAOqhC,SAAUD,UAASA,GAAIH,KAiB5BK,CAAgBp4B,EAAIlhB,EAAKR,aAIjC0X,EAAMO,IAAI,wBAAyB,SAACsT,EAAO/qB,GAClC+qB,EAAMguB,mBACPhuB,EAAMguB,kBAAmB,EApBzC,SAAwBC,EAAgCC,GACpD,QADoD,IAAAA,MAAA,KAC/CD,KAAaA,EAAUtuE,OAAS,GAArC,CAEA,IAAM0uE,EAAYJ,EAAU,GAAGO,aAE/BP,EAAUhhC,OAAOqhC,SAAUD,UAASA,GAAIH,IAgB5BO,CAAet4B,WAtC3C,CAAU/qB,WCHV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBA+Bfve,QAAQrxB,OAAO,eAAesxB,QAAQ,+BAClC,YACA,SAACC,GACG,IAAM2N,EAAS,gCAEf,OAAO3N,EACH2N,MAGIiI,SACIlG,IAAK/B,EAAS,MACd1N,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB4Z,UACIja,IAAK/B,EAAS,eACd1N,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElBozC,WACIzzC,IAAK/B,EAAS,MACd1N,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElBqzC,eACI1zC,IAAK/B,EAAS,sBACd1N,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElBuwC,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,WAEJ02C,qBACIlnC,IAAK/B,EAAS,0BACd1N,OAAQ,MACR1gB,SAAS,EACT2gB,WAEJmjD,aACI3zC,IAAK/B,EAAS,yCACd1N,OAAQ,OACR1gB,SAAS,EACT2gB,QACI6P,GAAI,MACJ6tB,SAAU,YACVoW,YAAa,eACbv+B,OAAQ,iBAnFpC,CAAU5V,WCIV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBACfve,QAAQrxB,OAAO,mBAAmB4lD,KAC9B,YACA,SAACd,GACGA,EAAUhkD,IAAI,mCACdgkD,EAAUhkD,IAAI,kBAEdswB,EAAAiD,QAAQ63B,qBAAqB,WAEzBpH,EAAUhkD,IAAI,oBACdgkD,EAAUhkD,IAAI,sBACdgkD,EAAUhkD,IAAI,sBACdgkD,EAAUhkD,IAAI,kBACdgkD,EAAUhkD,IAAI,kBACdgkD,EAAUhkD,IAAI,0BACdgkD,EAAUhkD,IAAI,0BACdgkD,EAAUhkD,IAAI,2BACdgkD,EAAUhkD,IAAI,oBAjB9B,CAAUswB,WCFV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBA8Bfve,QAAQrxB,OAAO,mBAAmBmC,QAAQ,kBACtC,YACA,SAACovB,GACG,OAAAA,EACI,iCAGIsgD,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU8Y,KAAM,EAAGpC,SAAU,KAEjC0sC,qBACIrjD,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,MACRxQ,GAAI,gBACJiJ,KAAM,EACNpC,SAAU,KAGlBhB,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElBwzC,mBACItjD,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,OAAQxQ,GAAI,QAElC4Z,UACI1pB,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,QAEtBijC,wBACIvjD,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,sBAAuBxQ,GAAI,KAEjD0zC,iBACIxjD,OAAQ,OACR1gB,SAAS,EACT2gB,WAEJla,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,WAEJhsB,QACI+rB,OAAQ,MACRC,QACIqgB,OAAQ,SACRxQ,GAAI,MACJiJ,KAAM,EACNpC,SAAU,GACV8sC,mBAAmB,GAEvBnkE,SAAS,QA3FjC,CAAUsgB,WCEV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAmCfve,QACKrxB,OAAO,eACPsxB,QAAQ,oBAAqB,YArBjB,SAAAC,GACb,OAAOA,EACH,mCAGI2jD,0BACI1jD,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,wBAAyBxQ,GAAI,KAEnD6zC,2BACI3jD,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,yBAA0BgW,IAAK,UA7BrE,CAAU12B,WCCV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBACfve,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,qBACA,SACIsmB,EACAC,GAEAD,EAAepkB,MAAM,mBACjBkB,IAAK,GACLgkB,OAAQ,OACRE,WAAY,2BACZC,OACIC,QACIpJ,SACA,oEACJzhB,WAAYpJ,EAASsK,+BAGnB,cAAe,SAAA15B,GAAK,OAClB0jD,kBAAmB1jD,GAAKA,EAAE0jD,4BApBlD,CAAUt0B,WCLV,SAAUA,IAAS,SAAAwe,GACf,IAAOlb,EAActD,EAAAiD,QAAQK,aAG7B,oBAAA0gD,KACWA,EAAAvzE,UAAAiwB,UAAP,SAAiByzC,GACb,OAAQA,GACJ,KAAK7wC,EAAYujC,MACjB,KAAKvjC,EAAYA,EAAYujC,OACzB,MAAO,oBACX,KAAKvjC,EAAY0jC,KACjB,KAAK1jC,EAAYA,EAAY0jC,MACzB,MAAO,SACX,KAAK1jC,EAAYsjC,KACjB,KAAKtjC,EAAYA,EAAYsjC,MACzB,MAAO,gBACX,KAAKtjC,EAAYyjC,MACjB,KAAKzjC,EAAYA,EAAYyjC,OACzB,MAAO,WACX,KAAKzjC,EAAY2gD,SACjB,KAAK3gD,EAAYA,EAAY2gD,UACzB,MAAO,aACX,KAAK3gD,EAAY2jC,OACjB,KAAK3jC,EAAYA,EAAY2jC,QACzB,MAAO,iBACX,KAAK3jC,EAAY4gD,MACjB,KAAK5gD,EAAYA,EAAY4gD,OACzB,MAAO,UACX,KAAK5gD,EAAYwjC,MACjB,KAAKxjC,EAAYA,EAAYwjC,OACzB,MAAO,eACX,KAAKxjC,EAAY6gD,IACjB,KAAK7gD,EAAYA,EAAY6gD,KACzB,MAAO,iBACX,KAAK7gD,EAAY4jC,KACjB,KAAK5jC,EAAYA,EAAY4jC,MACzB,MAAO,SACX,KAAK5jC,EAAY6jC,OACjB,KAAK7jC,EAAYA,EAAY6jC,QACzB,MAAO,YACX,KAAK7jC,EAAY8jC,WACjB,KAAK9jC,EAAYA,EAAY8jC,YACzB,MAAO,eACX,QACI,MAAO,KAxCjB4c,EAAqBljD,GAD1BC,EAAK,kBAAmB,oBACnBijD,GAAN,GAJe,CAAAhkD,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAIf,oBAAA4lC,KACWA,EAAA3zE,UAAAiwB,UAAP,SAAiBwb,GACb,OAAKA,EAEDA,EAAS03B,SAAgC,YAArB13B,EAAS03B,QACtB13B,EAAS03B,QAAQr9D,WAAWy7B,cAEhCkK,EAASloC,KALM,IAFxBowE,EAAyBtjD,GAD9BC,EAAK,kBAAmB,wBACnBqjD,GAAN,GAJJ,CAAUpkD,WCAV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAIf,oBAAA6lC,KACWA,EAAA5zE,UAAAiwB,UAAP,SAAiBwb,GACb,IAAMooC,EACFpoC,GACAA,EAASloC,MACTkoC,EAASloC,KAAKg1B,QAAQ,WAAY,IAAIgJ,cAE1C,IAAKsyC,EAAc,MAAO,GAC1B,GACkC,SAA9BA,EAAa3vE,OAAO,EAAG,IACO,SAA9B2vE,EAAa3vE,OAAO,EAAG,GAEvB,MAAO,QAEX,OAAQ2vE,GACJ,IAAK,UACL,IAAK,eACL,IAAK,YACD,MAAO,QACX,IAAK,iBACL,IAAK,WACL,IAAK,mCACL,IAAK,iCACL,IAAK,qCACD,MAAO,SACX,QACI,MAAO,WA1BjBD,EAAmBvjD,GADxBC,EAAK,kBAAmB,kBACnBsjD,GAAN,GAJJ,CAAUrkD,WCAV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAIf,oBAAA+lC,KACWA,EAAA9zE,UAAAiwB,UAAP,SAAiBwb,GACb,OAAOA,EAASloC,MAFlBuwE,EAAkBzjD,GADvBC,EAAK,kBAAmB,iBACnBwjD,GAAN,GAJJ,CAAUvkD,WCAV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAEf,oBAAAgmC,KACWA,EAAA/zE,UAAAiwB,UAAP,SAAiBwb,GAEb,GAAIA,EAASuoC,cAAe,CACxB,IAAIlzE,EAAQ,GAaZ,OAXI2qC,EAASuoC,cAAcltE,OACiB,IAAxC2kC,EAASuoC,cAAcltE,MAAMhD,OAE7BhD,GAAS2qC,EAASuoC,cAAcltE,MAAM,GAAGmtE,WAEzCxoC,EAASuoC,eACTvoC,EAASuoC,cAAcltE,OACvB2kC,EAASuoC,cAAcltE,MAAMhD,OAAS,IAEtChD,GAAS,qBACbA,GAAS,MAAQ2qC,EAASuoC,cAAcE,KAAKv1E,KAKjD,GAAI8sC,EAASjE,YAAa,CACtB,IAAIA,EAAciE,EAASjE,YAAYtjC,OAAO,EAAG,IAEjD,OADIunC,EAASjE,YAAY1jC,QAAU,KAAI0jC,GAAe,MAC/CA,EAIX,OAAIiE,EAAS0oC,eACF,gBAAgB1oC,EAAS0oC,eAAeC,SAE5C,IA/BTL,EAAqB1jD,GAD1BC,EAAK,kBAAmB,oBACnByjD,GAAN,GAFJ,CAAUxkD,WCAV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAUf,WACI,SAAAsmC,EAAoBpY,GAAAh7D,KAAAg7D,UAEboY,EAAAr0E,UAAAiwB,UAAP,SAAiBwb,GACb,OAAIA,EAASzG,KAAa/jC,KAAKqzE,gBAAgB7oC,GAE3CA,EAASxG,MAAQwG,EAASxG,KAAKoC,IAAYoE,EAASxG,KAAKoC,IAAIC,SAE1DrmC,KAAKqzE,gBAAgB7oC,IAGxB4oC,EAAAr0E,UAAAs0E,gBAAR,SAAwB7oC,GAEpB,OADqBA,EAASloC,KAAKg+B,eAE/B,IAAK,sBACD,MAAO,mBACX,IAAK,2CACD,MAAO,2BACX,IAAK,6BACD,MAAO,gBACX,IAAK,8BACD,MAAO,oBACX,IAAK,kBACD,MAAO,2BACX,IAAK,yBACL,IAAK,mBACD,MAAO,sBACX,IAAK,+BACL,IAAK,qCACD,MAAO,kBACX,IAAK,0BACL,IAAK,yCACL,IAAK,uCACD,MAAO,mBACX,IAAK,2CACD,MAAO,2BACX,IAAK,mDACD,MAAO,wBACX,IAAK,yCACD,MAAO,2BACX,IAAK,4DACD,MAAO,oCACX,IAAK,6DACD,MAAO,oCACX,IAAK,uBACL,IAAK,sBACD,MAAO,oBACX,IAAK,oBACD,MAAO,0BACX,IAAK,0CACD,MAAO,8BACX,IAAK,6CACD,MAAO,8BACX,IAAK,yCACD,MAAO,oCACX,IAAK,gCACD,MAAO,+BACX,IAAK,iCACD,MAAO,4BACX,IAAK,gCACD,MAAO,6BACX,IAAK,gCACD,MAAO,4BACX,IAAK,iCACD,MAAO,6BACX,IAAK,0CACD,MAAO,uCACX,IAAK,2CACD,MAAO,sCACX,IAAK,8BACD,MAAO,mCACX,IAAK,yBACL,IAAK,sBACD,OAAUtgC,KAAKszE,YAA+B9oC,GAAS,IAAIxqC,KAAKuzE,cAE3D/oC,GACT,IAAK,wBACL,IAAK,8BACD,MAAO,iBACX,IAAK,yBACL,IAAK,sBACD,MAAO,kBACX,IAAK,wBACL,IAAK,yBACD,MAAO,YACX,IAAK,uBACL,IAAK,uBACD,MAAO,gBACX,IAAK,yBACL,IAAK,uBACD,MAAO,gBACX,IAAK,wBACL,IAAK,uBACD,MAAO,uCAAuCxqC,KAAKwzE,aAAwC,GAG/F,IAAK,0BACL,IAAK,wBACD,MAAO,mBACX,IAAK,2BACL,IAAK,0BACD,MAAO,yBAAyBxzE,KAAKyzE,YAA0CjpC,GACnF,IAAK,wCACL,IAAK,8BACD,MAAO,6BACX,IAAK,yCACD,MAAO,gBACX,IAAK,yCACD,OACIxqC,KAAK0zE,eAA4DlpC,IACjE,gCAER,IAAK,0CACD,MAAO,UACX,IAAK,0BACD,MAAO,kBACX,IAAK,2BACD,MAAO,kBACX,IAAK,+BACD,MAAO,oBACX,IAAK,+BACD,MAAO,oBACX,IAAK,4BACD,MAAO,mBACX,IAAK,qBACD,MAAO,sBACX,IAAK,uBACD,MAAO,sBACX,IAAK,0BACD,MAAO,yBACX,IAAK,2BACD,MAAO,uBACX,IAAK,sBACD,MAAO,kBACX,IAAK,uBACD,MAAO,gBACX,IAAK,2BACD,MAAO,sBACX,IAAK,+BACD,MAAO,gCACX,IAAK,yBACD,MAAO,qBACX,IAAK,mCACD,MAAO,4BACX,IAAK,iCACD,MAAO,wCACX,IAAK,yBACD,MAAO,iCACX,IAAK,+BACD,MAAO,sCACX,IAAK,oCACD,MAAO,qCACX,IAAK,mCACD,MAAO,sCACX,QACI,MAAO,oBAIX4oC,EAAAr0E,UAAAu0E,YAAR,SAAoB9oC,GAChB,OAAIA,GAAYA,EAASzG,MAAQyG,EAASzG,KAAK8C,SAASnpC,KAAa8sC,EAASzG,KAAK8C,SAASnpC,KAChF,QAGR01E,EAAAr0E,UAAA20E,eAAR,SAAuBlpC,GACnB,OAAOA,GAAYA,EAASiI,QAAUjI,EAASiI,OAAO5yC,OAGlDuzE,EAAAr0E,UAAAw0E,cAAR,SAAsB/oC,GAClB,IACKA,KACCA,EAASrE,YAAgBqE,EAASmpC,yBAA2BnpC,EAASmpC,wBAAwB9wE,QAEhG,MAAO,GAEX,IAAIwzC,EAAS,GAOb,OANI7L,EAASrE,aAAYkQ,GAAU7L,EAASrE,WAAWzoC,MACnD8sC,EAASrE,YAAcqE,EAASmpC,yBAA2BnpC,EAASmpC,wBAAwB9wE,SAC5FwzC,GAAU,SACV7L,EAASmpC,yBAA2BnpC,EAASmpC,wBAAwB9wE,SACrEwzC,GAAU7L,EAASmpC,wBAAwB,GAAG9zE,OAE3Cw2C,EAAOxzC,OAAS,QAAQwzC,EAAWA,GAGtC+8B,EAAAr0E,UAAA00E,YAAR,SAAoBjpC,GAChB,IAAMopC,EAAWppC,EAASopC,SAAWppC,EAASopC,SAASl2E,KAAO,GACxDm2E,EACFrpC,EAASqpC,kBAAoBrpC,EAASqpC,iBAAiBhxE,OAAS2nC,EAASqpC,iBAAiB,GAAGh0E,MAAQ,GAOzG,OALI+zE,EAAS/wE,QAAUgxE,EAAiBhxE,OAC3B+wE,EAAQ,QAAQC,EACnBD,EAAS/wE,OACL,GAAG+wE,EACH,GAAGC,GAIbT,EAAAr0E,UAAAy0E,aAAR,SAAqBhpC,GACjB,IAAMopC,EAAWppC,EAASspC,UAAYtpC,EAASspC,UAAUp2E,KAAO,GAC1Dm2E,EACFrpC,EAASupC,mBAAqBvpC,EAASupC,kBAAkBlxE,OACnD2nC,EAASupC,kBAAkB,GAAGl0E,MAC9B,GAOV,OALI+zE,EAAS/wE,QAAUgxE,EAAiBhxE,OAC3B+wE,EAAQ,QAAQC,EACnBD,EAAS/wE,OACL,GAAG+wE,EACH,GAAGC,GAjNnBT,EAAmBhkD,GAFxBC,EAAK,kBAAmB,iBACxB6I,EAAO,YACFk7C,GAAN,GAVJ,CAAU9kD,WCAV,SAAUA,IAAS,SAAAwe,GACf,IAAOnb,EAAarD,EAAAiD,QAAQI,YAG5B,oBAAAqiD,KACWA,EAAAj1E,UAAAiwB,UAAP,SAAiB5d,GAIb,OAHIzP,MAAMyP,KACNA,EAAMpR,KAAKi0E,QAAQ7iE,EAAIvM,aAEnBuM,GACJ,KAAKugB,EAAWm2B,UACZ,MAAO,YACX,KAAKn2B,EAAWuiD,OACZ,MAAO,WACX,KAAKviD,EAAWwiD,WACZ,MAAO,iBACX,QACI,MAAO,KAIXH,EAAAj1E,UAAAk1E,QAAR,SAAgB7iE,GACZ,IAAIgjE,GAA8B,EAClC,OAAQhjE,EAAIkvB,eACR,IAAK,YACD8zC,EAAiBziD,EAAWm2B,UAC5B,MACJ,IAAK,SACDssB,EAAiBziD,EAAWuiD,OAC5B,MACJ,IAAK,aACDE,EAAiBziD,EAAWwiD,WAIpC,OAAOC,GA/BTJ,EAAgB5kD,GADrBC,EAAK,kBAAmB,eACnB2kD,GAAN,GAJe,CAAA1lD,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAEf,oBAAAunC,KACWA,EAAAt1E,UAAAiwB,UAAP,SAAiB6S,GACb,OAAOA,EAAK4O,MAAM,MAAMxoB,KAAK,SAF/BosD,EAAkBjlD,GADvBC,EAAK,kBAAmB,iBACnBglD,GAAN,GAFJ,CAAU/lD,WCGV,SAAUA,IAEN,oBAAAgmD,KACWA,EAAAv1E,UAAAiwB,UAAP,SAAiBwP,GACb,OAAKA,EAEElQ,EAAAY,OAAOyP,yBAAyBH,GAFvB,IAFlB81C,EAA0BllD,GAD/BC,EAAK,WAAY,yBACZilD,GAAN,GAFJ,CAAUhmD,WCHV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAEf,oBAAAynC,KACWA,EAAAx1E,UAAAiwB,UAAP,SAAiBwb,GACb,IAAKA,EAAU,MAAO,GAKtB,OAHqBA,EAASloC,KACzBg1B,QAAQ,WAAY,IACpBgJ,eAED,IAAK,iBACL,IAAK,cACD,OAAOkK,EAASjE,aAAeiE,EAASjE,YAAY1jC,OAC9C2nC,EAASjE,YACTiE,EAASzG,KAAKwC,YACxB,IAAK,gBACL,IAAK,iBACD,OAAOiE,EAAS1K,QACpB,IAAK,eACL,IAAK,eACD,OAAO0K,EAASzG,MAAQyG,EAASzG,KAAKs0B,QAChC,aAAa7tB,EAASzG,KAAKs0B,QAAQx4D,MAClC2qC,EAASgqC,gBAAkB,GACtC,IAAK,kBACL,IAAK,gBACD,OAAOhqC,EAAStC,OACpB,IAAK,gBACL,IAAK,eACD,OAAOsC,EAASiqC,cAAgB,GACpC,IAAK,iBACL,IAAK,cACD,OAAOjqC,EAASkqC,cAAgB,GACpC,QACI,MAAO,KA/BjBH,EAA0BnlD,GAD/BC,EAAK,kBAAmB,yBACnBklD,GAAN,GAFJ,CAAUjmD,WCKV,SAAUA,IAAS,SAAAwe,GAgBf,IAAA6nC,EAAA,WAMI,SAAAA,EAAoB57C,EAA2B67C,GAA3B50E,KAAA+4B,SAA2B/4B,KAAA40E,iBA2CnD,OAzCID,EAAA51E,UAAAqtC,QAAA,WACIpsC,KAAK+6B,OAASv4B,OAAOu4B,QAAUv4B,OAAOu4B,OAAO19B,SAAWmF,OAAOu4B,OAAO19B,QAAQw3E,UAGlFF,EAAA51E,UAAA6kD,WAAA,SAAWhW,GACHA,EAASwS,OAASxS,EAASwS,MAAMmW,cAAgB3oB,EAASwS,MAAM+Z,eAChEn6D,KAAK80E,iBAAiBlnC,EAASwS,QAMhCu0B,EAAA51E,UAAAg2E,SAAP,WACI/0E,KAAKg1E,cAGDL,EAAA51E,UAAA+1E,iBAAR,SAAyB10B,GACrB,GAAIpgD,KAAKi1E,mBAAmB70B,EAAMmW,aAAcnW,EAAM+Z,eAAgB,CAClE,IACMxiC,EAAW,kBADGyoB,EAAMmW,aAAa1wD,MAAM,GAAGm+B,KAAKxF,GAGrDx+B,KAAK+4B,OAAOm8C,MAAM,mBAAqBv9C,SAAQA,MAI/Cg9C,EAAA51E,UAAAk2E,mBAAR,SACIE,EACAC,GAEA,IAAKD,IAAiBC,EAAW,OAAO,EAExC,IAAMC,EAAkBF,EAAatvE,OAASsvE,EAAatvE,MAAMhD,OAAS,EACpEyyE,EAAeF,EAAUvvE,OAASuvE,EAAUvvE,MAAMhD,OAAS,EAEjE,IAAKwyE,IAAoBC,EAAc,OAAO,EAE9C,IAAMC,EAAmBJ,EAAatvE,MAAM,GAAGm+B,KACzCwxC,EAAgBJ,EAAUvvE,MAAM,GAAGm+B,KAEzC,OAAOuxC,EAAiB/2C,KAAOg3C,EAAch3C,IA/CxCm2C,EAAyBvlD,GAZrCqI,EAAU,mBACPE,SAAU,oBACVkV,YAAa,oFACbe,UACIwS,MAAO,IACP3B,QAAS,IACTg3B,wCAAyC,IACzCT,WAAY,IACZU,sBAAuB,OAG9Bx9C,EAAO,SAAU,mBACLy8C,GAAb,GAAa7nC,EAAA6nC,0BAAyBA,EAhBvB,CAAArmD,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCLV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAIf,oBAAA6oC,KACWA,EAAA52E,UAAAiwB,UAAP,SAAiBwb,GACb,OAAKA,GAAaA,EAASC,UAEpBzqC,KAAK41E,oBAAoBprC,EAASC,WAFI,IAKzCkrC,EAAA52E,UAAA62E,oBAAR,SAA4BnrC,GACxB,IACIorC,EAAO,IAAIp5C,KAAKgO,GACpB,OACInc,EAAAY,OAAOuO,8BACP,UACAz9B,KAAK81E,yBAAyBD,GAC9B,UACA71E,KAAK81E,yBAAyBD,EAAKthC,WAPb,KAWtBohC,EAAA52E,UAAA+2E,yBAAR,SAAiCD,GAC7B,OACIA,EAAKjiC,cACL,KACCiiC,EAAKE,cAAgB,GACtB,IACAF,EAAKviC,UACL,MACAuiC,EAAKG,WACL,KACCH,EAAKI,aAAe,GAAK,IAAM,IAChCJ,EAAKI,cA9BXN,EAAoBvmD,GADzBC,EAAK,kBAAmB,mBACnBsmD,GAAN,GAJJ,CAAUrnD,WCKV,SAAUA,IAAS,SAAAwe,GAKf,IAAO9W,EAAmB1H,EAASiD,QAAQoE,MAAMK,kBAwCjD,WA0BI,SAAAkgD,EACYlzB,EACAmzB,EACAC,EACAzvB,EACAgM,EACAnR,EACA60B,EACA3U,EACAoF,EACAwP,GAVZ,IAAAt1C,EAAAhhC,KACYA,KAAAgjD,YACAhjD,KAAAm2E,WACAn2E,KAAAo2E,eACAp2E,KAAA2mD,mBACA3mD,KAAA2yD,eACA3yD,KAAAwhD,SACAxhD,KAAAq2E,8BACAr2E,KAAA0hE,cACA1hE,KAAA8mE,0BACA9mE,KAAAs2E,kCAhCLt2E,KAAA+/C,SACA//C,KAAAmnC,YAWAnnC,KAAAonD,yBAA2B,EAC3BpnD,KAAAqnD,sBAAuB,EAEvBrnD,KAAAu2E,+BAoFAv2E,KAAAw2E,8BAAgC,WAAe,QAAEh0E,OAAOi9B,KAAKmB,YAAY61C,uBAEzEz2E,KAAA02E,uCAAyC,WAAe,OAAAl0E,OAAOi9B,MAAQj9B,OAAOi9B,KAAKmB,aAAep+B,OAAOi9B,KAAKmB,YAAY+1C,sBA+K1H32E,KAAA42E,oCAAsC,SAACp4C,GAC1C,OAACwC,EAAK61C,kBAAkBr4C,GAElB,4CADA,kDAGHx+B,KAAA82E,+BAAiC,SAACt4C,GACrC,OAACwC,EAAK61C,kBAAkBr4C,GAAiB,qBAAX,UAE3Bx+B,KAAA+2E,gCAAkC,SAACC,GACtC,OAACh2C,EAAKi2C,cAAcD,GAAkD,qCAA5C,2CAEvBh3E,KAAAk3E,2BAA6B,SAACF,GACjC,OAACh2C,EAAKi2C,cAAcD,GAAiB,qBAAX,UAEtBh3E,KAAA62E,kBAAoB,SAACr4C,GAAsB,OAAAwC,EAAK2G,WAAW9hC,MAAMvC,KAAK,SAAAgW,GAAK,OAAAA,EAAEklB,IAAMA,IAAI24C,WAEvFn3E,KAAAi3E,cAAgB,SAACD,GAAmC,OAAAA,GAAMA,EAAGG,WAc9Dn3E,KAAAo3E,wBAA0B,SAAC54C,GAC9B,OAAAwC,EAAK61C,kBAAkBr4C,GACjBwC,EAAKq2C,sBAAsB,iEACdhqD,KAAKC,WAAU,GAAM,8BAC1BD,KAAKC,UAAUkR,GAAG,6DAE1BwC,EAAKq2C,sBAAsB,gEACdhqD,KAAKC,WAAU,GAAM,8BAC1BD,KAAKC,UAAUkR,GAAG,6DAG7Bx+B,KAAAs3E,0BAA4B,SAAC94C,GAChC,OAAAwC,EAAKgD,KAAKmzC,UACJn2C,EAAKq2C,sBAAsB,iEACdhqD,KAAKC,WAAU,GAAK,8BACzBD,KAAKC,UAAUkR,GAAG,6DAE1BwC,EAAKq2C,sBAAsB,gEACdhqD,KAAKC,WAAU,GAAK,8BACzBD,KAAKC,UAAUkR,GAAG,6DAlS7B03C,EAAAn3E,UAAAqtC,QAAP,WACIpsC,KAAK0nD,eAAiB1nD,KAAK2yD,aAAatG,SACpCrsD,KAAKwqC,SAASxG,MAAQhkC,KAAKwqC,SAASxG,KAAKs+B,OAAOtiE,KAAKu3E,qBAAqBv3E,KAAKwqC,SAASxG,KAAKs+B,OAEjGtiE,KAAKw3E,eAAiBh1E,OAAOu4B,QAAUv4B,OAAOu4B,OAAO19B,SAAWmF,OAAOu4B,OAAO19B,QAAQw3E,SAEtF70E,KAAKy3E,uBAGTvB,EAAAn3E,UAAA4tC,WAAA,WACQ3sC,KAAK03E,0BACL13E,KAAK03E,yBAAyB9qC,UAGlC5sC,KAAK03E,yBAA2B,MAG7BxB,EAAAn3E,UAAAooD,wBAAP,WACInnD,KAAKonD,0BAA4B,EAC7BpnD,KAAKonD,2BAA6BpnD,KAAK2nC,WAAW9hC,MAAMhD,SACxD7C,KAAKqnD,sBAAuB,IAI7B6uB,EAAAn3E,UAAA44E,OAAP,WACQ33E,KAAK43E,iCACL53E,KAAK63E,aAAe73E,KAAK63E,YACrB73E,KAAK63E,cAAgB73E,KAAK2nC,aACtB3nC,KAAK83E,+BACL93E,KAAK2nC,YACD9hC,OAAQ7F,KAAKwqC,UACbtE,MAAO,EACPuB,KAAM,EACNpC,SAAU,GAEXrlC,KAAK+3E,uBAAuB/3E,KAAKwqC,SAASxG,SAKtDkyC,EAAAn3E,UAAAi5E,sBAAP,WACI,QAASC,SAASj4E,KAAKk4E,yBAGpBhC,EAAAn3E,UAAAo5E,wBAAP,WACI,OAAO31E,OAAOi9B,KAAKmB,YAAYw3C,YAG5BlC,EAAAn3E,UAAA64E,6BAAP,WACI,OAAOp1E,OAAOi9B,KAAKmB,YAAYy3C,cAG5BnC,EAAAn3E,UAAAu5E,mCAAP,WACI,OAAO91E,OAAOi9B,KAAKmB,YAAY23C,YAG5BrC,EAAAn3E,UAAAy5E,eAAP,SAAsBhuC,GAAtB,IAAAxJ,EAAAhhC,KACSwqC,GAELxqC,KAAK8mE,wBACA3+B,QAAS3J,GAAIgM,EAAShM,KACtB8F,SAASC,KAAK,WAAM,OAAAvD,EAAKs1C,gCAAgCmC,WAAWjuC,EAASxG,KAAKxF,OAOpF03C,EAAAn3E,UAAA25E,qCAAP,SAA4CluC,GACxC,IACMmuC,GADM,IAAIl8C,MACGmJ,UAAY,IAAInJ,KAAK+N,EAASC,WAAW7E,UACtDgzC,EAAW3zE,KAAK4zE,MAAMF,EAAS,KAErC,OAAO34E,KAAKw3E,eAAesB,uCAAyCF,GAGjE1C,EAAAn3E,UAAAg6E,4BAAP,eAAA/3C,EAAAhhC,KACUg5E,EAAah5E,KAAKgkC,KAAKi1C,UAAYj5E,KAAKgkC,KAAKi1C,SAASz6C,GACtD2a,EAAW,iCAAiCn5C,KAAKgkC,KAAKxF,GAAE,kBAAkBw6C,EAAU,gBACtFh5E,KAAK0nD,eAAc,mBACJ1nD,KAAKq2E,4BAA4BnS,yBAAwB,2BAC5ElkE,KAAKgjD,UACAvhD,MACG03C,SAAQA,EACRmL,YAAa,KACbC,qBAAqB,IAExBhgB,KAAK,WAAM,OAAAvD,EAAK+2C,uBAAuB/2C,EAAKwJ,SAASxG,SAGvDkyC,EAAAn3E,UAAAm6E,2BAAP,eAAAl4C,EAAAhhC,KACUg5E,EAAah5E,KAAKgkC,KAAKi1C,UAAYj5E,KAAKgkC,KAAKi1C,SAASz6C,GAC5Dx+B,KAAKgjD,UACAvhD,MACG03C,SAAU,6CACNn5C,KAAKgkC,KAAKxF,GAAE,kBACEw6C,EAAU,gBACxBh5E,KAAK0nD,eAAc,4BACK1nD,KAAKq2E,4BAA4BnS,yBAAwB,uCACrF5f,YAAa,KACbC,qBAAqB,IAExBhgB,KAAK,SAAAiG,GACFxJ,EAAKq1C,4BAA4BxR,0BAA0Br6B,GAC3DxJ,EAAKm1C,SAAS,WACVn1C,EAAK+2C,uBAAuB/2C,EAAKwJ,SAASxG,OAC3C,QAIRkyC,EAAAn3E,UAAAo6E,oBAAP,WACI,IAAM9W,EAAQriE,KAAKgkC,KAAKggC,eAClBgV,EAAah5E,KAAKgkC,KAAKi1C,UAAYj5E,KAAKgkC,KAAKi1C,SAASz6C,GAE5Dx+B,KAAKo2E,aACD,4FAEI53C,GAAI,gBACJ46C,WAAY,2BAGZ/W,MAAKA,EACLn+B,OAAQlkC,KAAKgkC,KAAKxF,GAClBw6C,WAAUA,KAKf9C,EAAAn3E,UAAAs6E,kBAAP,WACI,OAAOr5E,KAAKwhD,OAAO9+C,SAAS,kCAGzBwzE,EAAAn3E,UAAAu6E,8BAAP,SAAqCh1E,GACjC,IAAKtE,KAAK2nC,aAAe3nC,KAAK2nC,WAAW9hC,OAASvB,EAAQ,EAAG,OAAO,EAEpE,IAAK,IAAInH,EAAImH,EAAOnH,EAAI,EAAGA,IACvB,GAAI6C,KAAK2nC,WAAW9hC,MAAMvB,GAAO49D,UAAYliE,KAAK2nC,WAAW9hC,MAAM1I,GAAG+kE,QAClE,OAAO,EAIf,OAAO,GAGEgU,EAAAn3E,UAAAw4E,qBAAb,SAAkCjV,uGAC9B,OAAItiE,KAAKu2E,4BAA4B9zE,OAAO6/D,KAAS,IAEzC,EAAMtiE,KAAK0hE,YAAYr9B,SAAU7F,GAAI8jC,IAASh+B,wBAApD8B,EAAMxJ,EAAAC,OACN08C,EAAQ,IAAI98C,KACZ+8C,EAAYpzC,GAAOA,EAAIqzC,WAAaF,EAAM3zC,UAAY,IAAInJ,KAAK2J,EAAIqzC,WAAW/jC,WAAW9P,UACzF8zC,GACFD,UAAWrzC,GAAOA,EAAIqzC,UACtBD,UAASA,GAGbx5E,KAAKu2E,4BAA4B9zE,OAAO6/D,IAAUoX,YAG9CxD,EAAAn3E,UAAA04E,oBAAR,eAAAz2C,EAAAhhC,KACIA,KAAK03E,yBAA2B13E,KAAKs2E,gCAChCqD,kBACAzgD,uBACAc,UAAU,SAAA1gB,GACF0nB,EAAKw1C,+BAMVx1C,EAAK44C,aAAetgE,EAEpB0nB,EAAK+2C,uBAAuB/2C,EAAKwJ,SAASxG,OAPtChD,EAAK44C,kBAAet6E,KAW5B42E,EAAAn3E,UAAAg5E,uBAAR,SAA+Bf,GAA/B,IAAAh2C,EAAAhhC,KACUkkC,EAAU8yC,GAAMA,EAAGx4C,IAAQx+B,KAAKgkC,MAAQhkC,KAAKgkC,KAAKxF,IAAOx+B,KAAK2yD,aAAazuB,QAC7ElkC,KAAKy+C,SAAYva,IACrBlkC,KAAKy+C,SAAU,EAEfz+C,KAAK2mD,iBACAE,aACGroB,GAAI0F,EACJuD,KAAM,EACNpC,SAAU,IACVu0C,aAAc55E,KAAK45E,eAEtBt1C,SAASC,KAAK,SAACs1C,GACZj4E,WAAW,WACP2sB,QAAQxa,QAAQ8lE,EAAMh0E,MAAO,SAAClG,GAC1BA,EAAKqkC,KAAOgzC,IAEhB,IAqBMlwB,EAAgB+yB,EAAMh0E,MACvBwT,OAAO,SAAAC,GAAK,OAtBc,SAAAA,GAC3B,OAAAA,GACAA,EAAEyqB,MACFzqB,EAAEyqB,KAAK8C,WACNvtB,EAAEyqB,KAAK8C,SAASkgB,WAAa/wB,EAAiB1F,UACd,aAA7BhX,EAAEyqB,KAAK8C,SAASkgB,UAiBNC,CAAuB1tC,KACpCD,OAAO,SAAAC,GAAK,OAjBa,SAACA,GAC3B,OAAAA,IAC0C,IAAzCA,EAAEhX,KAAKg+B,cAAcx9B,QAAQ,SACe,IAAzCwW,EAAEhX,KAAKg+B,cAAcx9B,QAAQ,YAEsB,IAAnDwW,EAAEhX,KAAKg+B,cAAcx9B,QAAQ,mBAC2B,IAAxDwW,EAAEhX,KAAKg+B,cAAcx9B,QAAQ,wBAWnBmkD,CAAsB3tC,KACnCD,OAAO,SAAAC,GAAK,OAViB,SAACA,GAC/B,OAAAA,IACY,4BAAXA,EAAEhX,MACY,6BAAXgX,EAAEhX,MACS,wBAAXgX,EAAEhX,MACS,yBAAXgX,EAAEhX,MAKQw3E,CAA0BxgE,KAC5CwtC,EAAc/yC,QAAQ,SAAAuF,GAAK,OAAA0nB,EAAKkmB,oBAAoB5tC,EAAGugE,EAAMh0E,SAC7Dm7B,EAAK2G,YACD9hC,MAAOihD,EACP5gB,MAAO2zC,EAAM3zC,MACbuB,KAAMoyC,EAAMpyC,KACZpC,SAAUw0C,EAAMx0C,WAErB,MAEN8tB,QAAQ,WAAM,OAACnyB,EAAKyd,SAAU,MAG/By3B,EAAAn3E,UAAAmoD,oBAAR,SAA4B1c,EAAe3kC,GAKvC,GAJuB,SAAAyT,GACnB,OAACA,GAAKA,EAAEyqB,MAA2D,IAAnDzqB,EAAEhX,KAAKg+B,cAAcx9B,QAAQ,mBAC5CwW,GAAKA,EAAEyqB,MAAgE,IAAxDzqB,EAAEhX,KAAKg+B,cAAcx9B,QAAQ,uBAE5Ci3E,CAAevvC,GAApB,CAEA,IACM+c,EAAmB1hD,EAAMwT,OAAO,SAAAC,GAAK,OADlB,SAACA,EAAGkuC,GAAM,OAAAluC,EAAEyqB,MAAQzqB,EAAEyqB,KAAKvF,KAAOgpB,EAAEzjB,KAAKvF,GACvBipB,CAAiBnuC,EAAGkxB,KAC/DA,EAAS+c,iBAAmBA,IAqBxB2uB,EAAAn3E,UAAAs4E,sBAAR,SAA8Bl+B,GAA9B,IAAAnY,EAAAhhC,KACIA,KAAKgjD,UACAvhD,MACG03C,SAAQA,EACRmL,YAAa,KACbC,qBAAqB,IAExBhgB,KAAK,WACFvD,EAAK+2C,uBAAuB/2C,EAAKwJ,SAASxG,SAlTpDkyC,EAA6B9mD,GA3BlCqI,EAAU,mBACPE,SAAU,yBACVkV,YAAa,4FACbe,UACI5J,KAAM,IACNwG,SAAU,IACVwvC,aAAc,IACd9B,uBAAwB,IACxBJ,+BAAgC,IAChCrC,wCAAyC,IACzCwE,eAAgB,IAChBC,eAAgB,IAChBxE,sBAAuB,OAG9Bx9C,EACG,YACA,WACA,eACA,mBACA,eACA,SACA,8BACA,cACA,0BACA,oCAEEg+C,GAAN,GA7Ce,CAAA5nD,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCHV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAC/B,IAAO3/B,EAAWnT,EAAS4S,QAAQO,SAEnClT,QAAQrxB,OAAO,YAAYy4C,UAAU,gBACjC,UACA,SAAA8G,GACI,OACI7G,KAAA,SAAKvG,EAAOwG,EAA8BgC,GACtC,IAGIsiC,EAKAC,EAEAC,EAVAC,EAA4B/3E,SAAS4/B,cAAc,OACnDo4C,EAAsBC,iBAAiBF,GACvCG,EAAiF,IAArDC,WAAWH,EAAoBI,oBAEzDC,EAAiBp4E,OAAOq6C,aAAet6C,SAAS0Q,gBAAgB4nC,aAClEggC,GAAkB,EAClBC,GAAc,EACZC,EAAkBx4E,SAASuvC,cAAc,oBAE3CkpC,EAAc,GA8MlB,SAA0BV,GACtB14E,WAAW,WACP04E,EAAa,GAAGW,cAAcA,cAAc54C,MAAMmZ,OAC9C8+B,EAAa,GAAGz/B,aAAe,MACpC,IAhNPqgC,CAAiBrlC,GAEjBwkC,EAAexkC,EAAQsM,SAASt/C,OAAS,EAAIgzC,EAAQsM,SAAS,GAAK,KAEnE,IAAMg5B,EAAsB,IAAIthC,iBAAiB,SAAAuhC,GAC7CA,EAAUrnE,QAAQ,WAAM,OAAA0tB,EAAS45C,EAAoBf,GAAe,SAGlEv/C,GACFkf,WAAW,EACXC,SAAS,EACTohC,eAAe,GAiFnB,SAASC,EAAmBjB,GACxB,GAAIkB,EAAgBlB,KAAkBO,EAAiB,CACnDA,GAAkB,EAClB,IAAMY,EAAyBhqC,YAAY,WAEnC6oC,EAAaoB,kBACbpB,EAAaoB,iBAAiBC,yBAiK9C,SAAmCC,GAC/B,OAAO32E,KAAK4zE,MAAM+C,EAAcC,SAAWjB,GACvC31E,KAAK4zE,MAAM+C,EAAcC,QAAU,IAlK3BC,CAA0BxB,EAAaoB,iBAAiBC,2BAEnDrB,EAAaW,cAAczgC,UAAU9tB,SAAS,mBAC/CqvD,EAA6BzB,GAC7B0B,EAAgB1B,IA8HpC,SAA4B36E,GACxBA,EAAKs7E,cAAczgC,UAAUjmC,OAAO,iBA7HxB0nE,CAAmB3B,GACnB4B,EAA2B5B,EAAaW,eACnCH,GACDkB,EAAgB1B,GAEpBlpC,cAAcqqC,KAEnB,QACA,CACHZ,GAAkB,EAClBQ,EAAoBf,GACpB,IAAM6B,EAA4B1qC,YAAY,WACrC2qC,EAA0B9B,EAAaW,cAAcU,2BACtDU,EAAsB/B,EAAaW,eACnC7pC,cAAc+qC,KAEnB,IACHv6E,WAAW,WACPwvC,cAAc+qC,IACf1B,IAIX,SAASY,EAAoBf,GACzBU,EAAc,EACd,IAAmB,IAAA5iD,EAAA,EAAAwE,EAAA09C,EAAagC,SAAblkD,EAAAwE,EAAA/5B,OAAAu1B,IAAuB,CAArC,IAAMz4B,EAAIi9B,EAAAxE,GACX4iD,GAAer7E,EAAKk7C,aAEpBmgC,EAAc,KACdV,EAAaW,cAAc54C,MAAMmZ,OAASw/B,EAAc,MAuFhE,SAASQ,EAAgBlB,GACrB,SAAQA,EAAaW,gBAAiBX,EAAaW,cAAczgC,UAAU9tB,SAAS,cAWxF,SAAS2vD,EAAsB18E,GAC3BA,EAAK66C,UAAUv1B,IAAI,iBAGvB,SAAS82D,EAA6Bp8E,GAClCA,EAAKs7E,cAAczgC,UAAUjmC,OAAO,aAGxC,SAASynE,EAAgBr8E,GACrBA,EAAKs7E,cAAc54C,MAAMmZ,OAAS77C,EAAK48E,kBAAkB1hC,aAAe,KAG5E,SAASqhC,EAA2Bv8E,GAChCA,EAAK66C,UAAUjmC,OAAO,iBAG1B,SAASioE,EAA4B78E,GAC5BA,EAAKs7E,gBAENt7E,GAAQA,EAAK88E,YAAc98E,EAAK88E,WAAWp6C,QAC3C1iC,EAAK88E,WAAWp6C,MAAMm7B,MAAQ79D,EAAKs7E,cAAcyB,YAAc,MAE/D/8E,GAAQA,EAAK+7E,kBAAoB/7E,EAAK+7E,iBAAiBr5C,QACvD1iC,EAAK+7E,iBAAiBr5C,MAAMm7B,MAAQ79D,EAAKs7E,cAAcyB,YAAc,OAU7E,SAASC,EAAuBC,GAC5B,OAAO33E,KAAK4zE,MAAM+D,EAAgBtL,MAAQsJ,GACtC31E,KAAK4zE,MAAM+D,EAAgBtL,KAAO,IAK1C,SAAS8K,EAA0BQ,GAC/B,OAAO33E,KAAK4zE,MAAM+D,EAAgBf,SAAWjB,GACzC31E,KAAK4zE,MAAM+D,EAAgBf,QAAU,IArQ7ChkC,EAAKglC,SAAS,eAAgB,SAAAz+E,GACZ,SAAVA,GACA+8E,EAAoBphC,QAAQsgC,EAAct/C,GAC1Cn5B,WAAW,WACPi5E,GAAkB,EAClBU,EAAmBjB,IACpB,MAEHa,EAAoB2B,eAI5BjnC,EAAQG,GAAG,QAAS,WA4BhBskC,EAAezkC,EAAQ,GAAGolC,cAC1BV,EAAsBC,iBAAiBF,EAAaW,eACpDR,EAAiF,IAArDC,WAAWH,EAAoBI,oBAC3DR,EAgIJ,SAAoBG,GAChB,IAAMyC,GAAgBzC,GACtBH,KAEA,IAAK,IAAIh9E,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACzB,IAAM6/E,EAAYD,EAAa92E,OAAO,GAAG,GACzC,IAAK+2E,EAAW,MACmC,OAA/CA,EAAU/B,cAAcgC,qBACxBF,EAAa9jE,KAAK+jE,EAAU/B,cAAcgC,mBAAmBV,mBACzDS,EAAU/B,cAAcgC,mBAAmBziC,UAAU9tB,SAAS,cAC9DytD,EAAoClhE,KAChC+jE,EAAU/B,cAAcgC,qBAKxC,OAAO9C,EAhJ+B+C,CAAW5C,GACjDF,EAAiBE,EAAaW,cAAc5/B,UAyJhD,SAA2B17C,GAEnBA,EAAK+7E,kBACL/7E,EAAK+7E,iBAAiBr5C,OACtB1iC,EAAK+7E,iBAAiBY,UACtB38E,EAAK+7E,iBAAiBY,SAASz5E,OAAS,IAExClD,EAAK+7E,iBAAiBr5C,MAAM86C,QAAU,OA9L1CC,CAAkB9C,GAiCtB,WACI,GAAIkB,EAAgBlB,KAAkBO,EAAiB,CACnD,IAAIwC,GAAsB,EACtB/C,EAAaW,cAAczgC,UAAU9tB,SAAS,mBAC9C2wD,GAAsB,GAEtBA,GACA9gD,EAAEw+C,GAAiBvJ,SAEXD,UAAW6I,EAAiB,IAEhC,MA3CZkD,GAiDJ,WACI,GAAIhD,EAAaW,cAAczgC,UAAU9tB,SAAS,iBAAkB,CAChEouD,GAAc,EACd,IAAMyC,EAA4B9rC,YAAY,WACtC2oC,IAAmBn1E,KAAK4zE,MAAMkC,EAAgBxJ,WAAa,IAAOsJ,IAClEqB,EAA2B5B,EAAaW,eACxCc,EAA6BzB,GAC7B0B,EAAgB1B,GAChBlpC,cAAcmsC,KAEnB,KA1DPC,GACAjC,EAAmBjB,GAmMnBA,EAAaW,cAAczgC,UAAUv1B,IAAI,aAjMzCu3D,EAA4BlC,GAyGhC,WACI,mBAAW36E,GACP,IAAM89E,EAA+BhsC,YAAY,WAEzCkrC,EAAuBh9E,EAAKg8E,2BAC3BS,EAA0Bz8E,EAAKg8E,2BAEhCU,EAAsB18E,GACtByxC,cAAcqsC,KAEnB,IACH77E,WAAW,WACPwvC,cAAcqsC,IACfhD,IAZYriD,EAAA,EAAAslD,EAAAvD,EAAA/hD,EAAAslD,EAAA76E,OAAAu1B,IAAmC,CAAjD,IAAMz4B,EAAI+9E,EAAAtlD,KAAJz4B,IAzGXg+E,GAyHJ,WACI,mBAAWh+E,GACP,IAAMi+E,EAA4BnsC,YAAY,WACrCkrC,EAAuBh9E,EAAKg8E,2BAC7BO,EAA2Bv8E,GAC3ByxC,cAAcwsC,KAEnB,IACHh8E,WAAW,WACPwvC,cAAcwsC,IACfnD,IATYriD,EAAA,EAAAylD,EAAA1D,EAAA/hD,EAAAylD,EAAAh7E,OAAAu1B,IAAmC,CAAjD,IAAMz4B,EAAIk+E,EAAAzlD,KAAJz4B,IAzHXm+E,GAsIJ,WACI,mBAAWn+E,GACP,IAAMo+E,EAAqCtsC,YAAY,WAE/CkrC,EAAuBh9E,EAAKg8E,0BAC5BS,EAA0Bz8E,EAAKg8E,0BAE/BO,EAA2Bv8E,IAEhC,IACHiC,WAAW,WACPwvC,cAAc2sC,IACftD,IAXYriD,EAAA,EAAA4lD,EAAA7D,EAAA/hD,EAAA4lD,EAAAn7E,OAAAu1B,IAAmC,CAAjD,IAAMz4B,EAAIq+E,EAAA5lD,KAAJz4B,IAtIXs+E,KAGJ1vD,QAAQsnB,QAAQ4G,GAAS99C,KAAK,SAAU,WAChC27E,EAAaW,eAAiBO,EAAgBlB,IAC9CkC,EAA4BlC,KAIpCjrC,EAAMO,IAAI,qBAAsB,SAACsT,EAAO/qB,GACpCv2B,WAAW,WACHi2C,EAAKqmC,UAAU,GAAGjD,gBAAkB9iD,EAAKx4B,MACzC07E,EAAoBf,IAEzB,WArEQ,CAAAxtC,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCFV,SAAUA,GAiBN,IAAA6vD,EAAA,WAMI,SAAAA,EACYn7B,EACA/S,EACAqmC,GAFAt2E,KAAAgjD,YACAhjD,KAAAiwC,sBACAjwC,KAAAs2E,kCANLt2E,KAAAkoC,OAAS,GAuBpB,OAbWi2C,EAAAp/E,UAAAynD,OAAP,WACIxmD,KAAKgjD,UAAUwD,UAGZ23B,EAAAp/E,UAAAq/E,WAAP,WACIp+E,KAAKs2E,gCAAgC8H,WAAWp+E,KAAKw+B,IACrDx+B,KAAKgjD,UAAUzM,QAGZ4nC,EAAAp/E,UAAAs/E,eAAP,WACIr+E,KAAKs2E,gCAAgC+H,eAAer+E,KAAKw+B,IACzDx+B,KAAKgjD,UAAUzM,QAxBV4nC,EAAmC/uD,GAb/CqI,EAAU,YACPE,SAAU,gCACVkV,YAAa,kGACbe,UACI0wC,OAAQ,IACR9/C,GAAI,OAGXtG,EACG,YACA,sBACA,oCAESimD,GAAb,GAAa7vD,EAAA6vD,oCAAmCA,EAjBpD,CAAU7vD,WCAV,SAAUA,GAiBN,IAAAiwD,EAAA,WAMI,SAAAA,EACYv7B,EACA/S,EACAqmC,GAFAt2E,KAAAgjD,YACAhjD,KAAAiwC,sBACAjwC,KAAAs2E,kCANLt2E,KAAAkoC,OAAS,GAuBpB,OAbWq2C,EAAAx/E,UAAAynD,OAAP,WACIxmD,KAAKgjD,UAAUwD,UAGZ+3B,EAAAx/E,UAAAy/E,YAAP,WACIx+E,KAAKs2E,gCAAgCkI,YAAYx+E,KAAKw+B,IAClDx+B,KAAKgjD,UAAUzM,QAGhBgoC,EAAAx/E,UAAA0/E,gBAAP,WACIz+E,KAAKs2E,gCAAgCmI,gBAAgBz+E,KAAKw+B,IACtDx+B,KAAKgjD,UAAUzM,QAxBdgoC,EAAoCnvD,GAbhDqI,EAAU,YACPE,SAAU,iCACVkV,YAAa,mGACbe,UACI0wC,OAAQ,IACR9/C,GAAI,OAGXtG,EACG,YACA,sBACA,oCAESqmD,GAAb,GAAajwD,EAAAiwD,qCAAoCA,EAjBrD,CAAUjwD,WCEV,SAAUA,IAAS,SAAAwe,GAGf,IAAK4xC,GAAL,SAAKA,GACDA,IAAA,qBACAA,IAAA,uBACAA,IAAA,eAHJ,CAAKA,YAeL,WAMI,SAAAC,EACYl7C,EACAi+B,GADA1hE,KAAAyjC,eACAzjC,KAAA0hE,cALL1hE,KAAA4+E,gBAAmC,EACnC5+E,KAAA6+E,WAAqB,GAO5BF,EAAA5/E,UAAAqtC,QAAA,eAAApL,EAAAhhC,KACIA,KAAK0hE,YACAr9B,SAAU7F,GAAIx+B,KAAKsiE,QACnBh+B,SAASC,KAAK,SAAA6B,GACXpF,EAAKoF,IAAMA,IAEd4D,MAAM,WACHhJ,EAAKoF,IAAM,QAIhBu4C,EAAA5/E,UAAA+/E,iBAAP,WACI,OAAQ9+E,KAAK4+E,iBACT,KAAK,EACL,KAAKF,EAAgBK,QACjB/+E,KAAK4+E,gBAAkBF,EAAgBM,SACvC,MACJ,KAAK,EACL,KAAKN,EAAgBM,SACjBh/E,KAAKi/E,qBAOVN,EAAA5/E,UAAAmgF,eAAP,WACI,QAAS18E,OAAOi9B,KAAKmB,YAAYu+C,kCAG7BR,EAAA5/E,UAAAkgF,iBAAR,eAAAj+C,EAAAhhC,KACIA,KAAKyjC,aACA27C,qBACG/4C,SAAUrmC,KAAKomC,IAAIC,SACnBw4C,WAAY7+E,KAAK6+E,WACjBQ,eAAgB78E,OAAOi9B,KAAKjB,KAE/B8F,SAASC,KAAK,SAAAR,GACX/C,EAAK49C,gBAAkBF,EAAgBY,OAE1CnsB,QAAQ,WACLnyB,EAAK69C,WAAa,GAClBj9E,WAAW,WACPo/B,EAAK49C,gBAAkBF,EAAgBK,SACxC,QAvDbJ,EAA4BvvD,GATjCqI,EAAU,mBACPE,SAAU,wBACVkV,YACI,kFACJe,UACI00B,MAAO,OAGdpqC,EAAO,eAAgB,gBAClBymD,GAAN,GAlBe,CAAArwD,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCCV,SAAUA,GACN,IAAOwU,EAAexU,EAAS4S,QAAQ4B,aAgBvCvU,QACKrxB,OAAO,mBAEPy4C,UAAU,wBACP,WACA,UACA,SAACwgC,EAAUnb,GACP,SAASukB,EAAa1pC,EAA8B2pC,EAA8BC,QAAA,IAAAA,MAAA,GAC9E5hF,OAAO0P,KAAKiyE,GAAezrE,QAAQ,SAACrV,EAAK4F,GAGrC,IAFA,eAEWo7E,GACP,IAAIv7E,OAAM,EAEJw7E,EAAiBD,EAAYj1C,UAAUurC,WACvC4J,EAAeF,EAAYG,QAAQ7J,WACrC8J,OAAgB,EACpB,GACKH,EAAiBF,GAAiBG,EAAeH,GAClDC,EAAYK,gBACd,EACED,EAAmB,IAAIrjD,KAAKijD,EAAYj1C,YACvB0J,SAASsrC,GAC1BK,EAAiBE,WAAW,GAC5BF,EAAiBG,WAAW,GAE5B,IAAMC,EAAUxhF,EAAI+xC,MAAM,KACpB8E,EAAMlwC,OAAO66E,EAAQ,IACrBC,EAAQ96E,OAAO66E,EAAQ,IAAM,EAEnCJ,EAAiBzsC,QAAQkC,GACzBuqC,EAAiBhrC,SAASqrC,GAa9B,IATIh8E,EADAu7E,EAAYU,SAwF5B,SACIj+B,EACA0zB,GAEA,IAAMwK,EAAc,OAASxK,EAAKviC,UAC5BgtC,EAAgB,UAAYzK,EAAKhiC,WAAa,GAC9C0sC,EAAe,QAAU1K,EAAKjiC,cAE9B4sC,EAAwBr+B,EAAO,GAAG9H,iBACpC,KAAOgmC,EAAcC,EAAgBC,GAGzC,GAAIC,GAAyBA,EAAsB39E,OAAS,EACxD,OAAO0rB,QAAQsnB,QAAQ2qC,EAAsB,GAAGlE,SAAS,IAG7D,OAAO,KAvGcmE,CAA8B5qC,EAASiqC,GAAoBJ,EAAYj1C,WAgEhG,SACI0X,EACA0zB,EACAiK,GAEA,IAAMY,EAAaZ,GAAsCjK,EAEnDwK,EAAc,OAASK,EAAWptC,UAClCgtC,EAAgB,UAAYI,EAAW7sC,WAAa,GACpD0sC,EAAe,QAAUG,EAAW9sC,cACpC+sC,EAAe,QAAUD,EAAW1K,WAEpCwK,EAAwBr+B,EAAO,GAAG9H,iBACpCgmC,EAAcC,EAAgBC,EAAeI,GAGjD,GAAIH,GAAyBA,EAAsB39E,OAAS,EACxD,OAAO0rB,QAAQsnB,QAAQ2qC,EAAsB,IAGjD,OAAO,KAlFcI,CACL/qC,EACA6pC,EAAYj1C,UACZq1C,KAIM37E,EAAOtB,OAAS,EAAG,CAC7B,IAAMg+E,EAgGtB,SACInB,EACAv9B,EACA49B,EACAD,GAEA,IAAKJ,IAAgBv9B,IAAWA,EAAOt/C,OAAQ,OAAO,KAEtD,IAAMi+E,EAAkBhB,GAAsCJ,EAAYj1C,UAEpEoL,EAAUtnB,QAAQsnB,QAAQ,mCAC1BkrC,EAAe5+B,EAAO6+B,cAItBC,EAF0B,IAAM,GADjBH,EAAgB7K,aAGS,IAAO8K,EACrDlrC,EAAQqrC,IAAI,MAAOD,EAAc,MAEjC,IAAME,EAAc5yD,QAAQsnB,QAAQ,2BACpCsrC,EAAYt/C,KAAK69C,EAAY94C,SAC7BiP,EAAQurC,OAAOD,GAEf,IAAME,EAAeP,EAAgBl7C,UAC/B07C,EAAa5B,EAAYG,QAAQj6C,UACjC27C,EAAoBt8E,KAAK4L,MAAMywE,EAAaD,GAAgB,IAAO,IAEnE7lC,EAASulC,GADY,IAAM,GAAMQ,EAAqB,KAG5D1rC,EAAQqrC,KACJ1lC,OAAQA,EAAS,EAAI,KACrBgmC,aAAc,QAGdD,EAAoB,IAAI1rC,EAAQ4rC,SAAS,eAEzC/B,EAAYU,UACZvqC,EAAQ4rC,SAAS,UACjB5rC,EAAQqrC,KACJ1lC,OAAuB,IAAfulC,EAAsB,KAC9BzP,IAAK,OACLuK,OAAQ,KAGZhmC,EAAQ4rC,SAAS/B,EAAY9/C,OAAO/6B,YAGpCk7E,GACAlqC,EAAQ4rC,SAAS,eAGrB,OAAO5rC,EAlJ0B6rC,CACjBhC,EACAv7E,EACAu7E,EAAYK,gBACZD,IAmCpB,SACIjqC,EACA8rC,EACAC,GAEA,GAAsB,OAAlBD,GAA2C,OAAjBC,EAAuB,OAErD,IAAMpkB,EAAQv4D,KAAKM,MAAM,IAAMq8E,GACzBC,EAASF,EAAgB,EAC/B9rC,EAAQqrC,KACJY,YAAa,QAAQtkB,EAAK,WAC1Bt/C,KAAM,SAASs/C,EAAQmkB,EAAa,QAAQE,EAAM,QA3C1CE,CACIlB,EACAnB,EAAYsC,eACZtC,EAAYuC,cAGhBpB,EAAaqB,WAAW,SAACh/B,GACrB,IAAMi/B,EAuI1B,SAAmCzC,GAC/B,IAAM7pC,EAAUtnB,QAAQsnB,QAAQ,wCAEhCA,EAAQurC,OACJ,uFAAuF1B,EAAY94C,QAAO,iBAE9GiP,EAAQurC,OACJ,sFAAsF1B,EAAYrjD,SAAQ,iBAG9GwZ,EAAQurC,OAAO,SAEf,IAAM32C,EAAYuwB,EAAQ,OAARA,CAAgB0kB,EAAYj1C,UAAW,SACzDoL,EAAQurC,OACJ,yFAAyF32C,EAAS,iBAGtG,IAAMo1C,EAAU7kB,EAAQ,OAARA,CAAgB0kB,EAAYG,QAAS,SASrD,OARAhqC,EAAQurC,OACJ,uFAAuFvB,EAAO,iBAGlGhqC,EAAQurC,OACJ,mFAAmF1B,EAAY0C,SAAQ,yBAGpGvsC,EAjK8CwsC,CAA0B3C,GAC/DnxD,QAAQsnB,QAAQ,QAAQurC,OAAOe,GAE/B5zD,QAAQsnB,QAAQtzC,UAAUyzC,GAAG,YAAa,SAACkN,GACvC,IAAMo/B,EAASp/B,EAAMq/B,QACfC,EAASt/B,EAAMu/B,QACfC,EAAKP,EAAQ,GAAGxG,wBAChBz9D,EAAOokE,EAASI,EAAGllB,MAAQ,EAAI8kB,EAASI,EAAGllB,MAAQ,EACnD8T,EAAMkR,EAASE,EAAGlnC,OAAS,EAAIgnC,EAASE,EAAGlnC,OAAS,EAC1D2mC,EAAQjB,KACJhjE,KAAIA,EACJozD,IAAGA,MAIXuP,EAAa8B,WAAW,SAAAz/B,GACpBi/B,EAAQ5tE,aAGhBpQ,EAAOi9E,OAAOP,KAnEIzoD,EAAA,EAAAwqD,EAFRpD,EAAc9gF,GAEN05B,EAAAwqD,EAAA//E,OAAAu1B,IAAS,GAAbwqD,EAAAxqD,OAoN9B,SAASyqD,EAAsBC,GAC3B,IAAMtD,EA+CN,SAA2BsD,GAKvB,IAJA,IAAMtD,KAEAuD,EAAeD,EAAO3sE,KAAK,SAAC5G,EAAGC,GAAM,OAAAA,EAAEi7B,UAAU7E,UAAYr2B,EAAEk7B,UAAU7E,YAErDxN,EAAA,EAAA4qD,EAAAD,EAAA3qD,EAAA4qD,EAAAngF,OAAAu1B,IAatB,IAbC,IAAMsnD,EAAWsD,EAAA5qD,GACZipD,EAAe3B,EAAYj1C,UAAU7E,UACrC07C,EAAa5B,EAAYG,QAAQj6C,UACjCq9C,EAAiBh+E,KAAK4L,MAAMywE,EAAaD,GAAgB,IAAO,GAAK,GAAK,IAC1E6B,EAAwBjoD,KACvBykD,GACHyD,yBACAC,YAAa,EACbrD,iBAAiB,EACjBiC,eAAgB,KAChBC,aAAc,OAGT9kF,EAAI,EAAGA,EAAI8lF,EAAgB9lF,IAAK,CACrC,IAAM08E,EAAK5+C,KACJioD,GAED3tC,EAAMylB,EAAQ,OAARA,CAAgB0kB,EAAYj1C,UAAUiJ,QAAQv2C,GAAI,SACzDqiF,EAAcjqC,KAAMiqC,EAAcjqC,OAGvCskC,EAAMwJ,WAAavgD,IAEf3lC,EAAI,IACJ08E,EAAMkG,iBAAkB,GAG5BP,EAAcjqC,GAAKt8B,KAAK4gE,GAIhC,OAAO2F,EAnF0B8D,CAAkBR,GA6CvD,OA1CAjlF,OAAO0P,KAAKiyE,GAAezrE,QAAQ,SAACrV,EAAK4F,GAGrC,IAFA,IAAMi/E,EAAiB/D,EAAc9gF,cAE1BghF,GACP,IAAM8D,EAAcD,EAAelqE,OAAO,SAAAC,GAAK,OAAAA,EAAE+pE,aAAe3D,EAAY2D,aAC5E3D,EAAYyD,yBAEZ,IAAyB,IAAA/qD,EAAA,EAAAqrD,EAAAD,EAAAprD,EAAAqrD,EAAA5gF,OAAAu1B,IAAa,CAAjC,IAAMsrD,EAAUD,EAAArrD,GACburD,EAAqBjE,EAAagE,KAAgBA,EAAWtD,UAC7DV,EAAYyD,sBAAsBlqE,KAAKyqE,KANzBtrD,EAAA,EAAAwrD,EAAAL,EAAAnrD,EAAAwrD,EAAA/gF,OAAAu1B,IAAc,GAAlBwrD,EAAAxrD,OAY1Bv6B,OAAO0P,KAAKiyE,GAAezrE,QAAQ,SAACrV,EAAK4F,GAIrC,IAHA,IAAMi/E,EAAiB/D,EAAc9gF,GACjCmlF,gBAEOnE,GACP,GAAImE,EAAQvgF,KAAK,SAAAgW,GAAK,OAAAA,EAAE+pE,aAAe3D,EAAY2D,8BACnD,IAAIS,EA8DZ,SAASC,EACLrE,EACAmE,QAAA,IAAAA,UAEA,IAAMG,IAAcH,EAAQvgF,KAAK,SAAAgW,GAAK,OAAAA,EAAE+pE,aAAe3D,EAAY2D,aAEnE,GAAIW,GAAatE,EAAYU,SAAU,OAAOyD,EAE9CA,EAAQ5qE,KAAKymE,GAEb,IAA4B,IAAAtnD,EAAA,EAAAwE,EAAA8iD,EAAYyD,sBAAZ/qD,EAAAwE,EAAA/5B,OAAAu1B,IAAmC,CAA1D,IAAM6rD,EAAarnD,EAAAxE,GACpByrD,EAAUE,EAAsBE,EAAeJ,GAGnD,OAAOA,EA5EoBE,CAAsBrE,GAC7CmE,EAAUA,EAAQ37D,OAAO47D,GAQzB,IADA,IAAII,EAAgB,EACH9rD,EAAA,EAAA+rD,EANjBL,EAAmBA,EAAiB3tE,KAChC,SAAC5G,EAAGC,GAAM,OAAAD,EAAEk7B,UAAU7E,UAAYp2B,EAAEi7B,UAAU7E,YAKjCxN,EAAA+rD,EAAAthF,OAAAu1B,IAAkB,EAAxBgiB,EAAE+pC,EAAA/rD,IACN4pD,eAAiBoC,EAAwBhqC,GACxCA,EAAG4nC,eAAiBkC,IAAeA,EAAgB9pC,EAAG4nC,gBAI9D,IAAiB,IAAAplD,EAAA,EAAAynD,EAAAP,EAAAlnD,EAAAynD,EAAAxhF,OAAA+5B,IAAkB,CAA9B,IAAMwd,KAAEiqC,EAAAznD,IACNqlD,aAAeiC,EAAgB,IAlBhB9rD,EAAA,EAAAksD,EAAAf,EAAAnrD,EAAAksD,EAAAzhF,OAAAu1B,IAAc,GAAlBksD,EAAAlsD,OAuBnBonD,EA0DP,SAASmE,EAAqBY,EAA0BC,GACpD,IAAMC,EAAcF,EAAO95C,UAAY+5C,EAAO3E,QACxC6E,EAAeF,EAAO/5C,UAAY85C,EAAO1E,QAE/C,SAAI4E,IAAeC,GAKvB,SAASN,EAAwB1E,GAC7B,IACKA,IACAA,EAAYyD,uBACbzD,EAAYyD,sBAAsBtgF,OAAS,EAE3C,OAAO,EAKX,IAHA,IAAM8hF,KACFC,EAAwB,KAEXxsD,EAAA,EAAAwE,EAAA8iD,EAAYyD,sBAAZ/qD,EAAAwE,EAAA/5B,OAAAu1B,IAAmC,CAA/C,IAAMgiB,EAAExd,EAAAxE,GACiB,OAAtBgiB,EAAG4nC,iBACH2C,EAAc1rE,KAAKmhC,EAAG4nC,iBAEQ,OAA1B4C,GAAkCA,EAAwBxqC,EAAG4nC,kBAC7D4C,EAAwBxqC,EAAG4nC,iBAIvC,GAA8B,OAA1B4C,EAAgC,OAAO,EAI3C,IAFA,IAAI5C,EAAiB,EACjB6C,GAAoB,EACf1nF,EAAI,EAAGA,EAAIynF,EAAuBznF,IACvC,IAAkC,IAA9BwnF,EAAc7hF,QAAQ3F,GAAW,CACjC6kF,EAAiB7kF,EACjB0nF,GAAoB,EACpB,MAQR,OAJKA,IACD7C,EAAiB4C,EAAwB,GAGtC5C,GAGf,OACI1pC,SAAU,IACVwsC,UAAW,GACXz1C,OACIyzC,OAAQ,IACRrD,cAAe,KAEnB7pC,KAAA,SAAKvG,EAAkBwG,GACnB,IAAI2pC,EAEJnwC,EAAM01C,OAAO,SAAU,SAAC9vE,EAAU+vE,GAC9B7O,EAAS,WACLqJ,EAAgBqD,EAAsBxzC,EAAMyzC,QAC5CvD,EAAa1pC,EAAS2pC,EAAenwC,EAAMowC,wBArZ3E,CAAUnxD,WCHV,SAAUA,IAAS,SAAAwe,GACf,IAAAm4C,EAAA,oBAAAA,KAQA,OAP4BA,EAAAC,UAAY,EACZD,EAAAE,SAAW,GAE5BF,EAAAG,eAAiB,SAAC7vC,GACrB,OAAAA,EAAIG,WAAWrB,SAAS4wC,EAAoBC,YACzCD,EAAAI,cAAgB,SAAC9vC,GACpB,OAAAA,EAAIG,WAAWrB,SAAS4wC,EAAoBE,WACpDF,EARA,GAAan4C,EAAAm4C,oBAAmBA,EADjB,CAAA32D,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCCV,SAAUA,IAAS,SAAAwe,IAIf,oBAAAw4C,KACWA,EAAAvmF,UAAAiwB,UAAP,SAAiBu2D,EAAuBhwC,GACpC,IAAKgwC,IAAQhwC,EAAK,MAAO,GAEzB,IACI,IAAMiwC,GAAOD,EAAI3lD,OAAO/6B,YAOxB,GALA2gF,EAAIvsE,KAAK05B,EAAOC,GAAGG,UAAUwC,EAAIhC,WAE7BgyC,EAAInF,UAAUoF,EAAIvsE,KAAK,UACvBssE,EAAIE,aAAaD,EAAIvsE,KAAK,cAEzBssE,EAAInF,SAAU,CACf,IAAMsF,EAAKH,EAAI96C,UAAUurC,WACnBtwE,EAC6C,GAA9CT,KAAK4zE,MAAM0M,EAAI96C,UAAUwrC,aAAe,IAAY,GACzDuP,EAAIvsE,KACA,QAAQ,KAAOysE,GAAIz/E,OAAO,IAAM,KAAOP,GAAKO,OAAO,IAGvD,IAAMm/E,EAAiBt4C,EAAAm4C,oBAAoBG,eACvC7vC,GAEEowC,EAAQJ,EAAI96C,UAAY26C,EACxBQ,EACFL,EAAI1F,QAAU/yC,EAAAm4C,oBAAoBI,cAAc9vC,GAKpD,GAHIowC,GAAOH,EAAIvsE,KAAK,eAChB2sE,GAAMJ,EAAIvsE,KAAK,aAEd2sE,EAAM,CACP,IAAMhjF,EAAQ+iF,EAAQP,EAAiBG,EAAI96C,UACrC23C,EAGE,GAFJn9E,KAAK4L,KACD00E,EAAI1F,QAAQ5qC,kBAAkBryC,GAAS,IAE/C4iF,EAAIvsE,KAAK,WAAWmpE,IAG5B,OAAOoD,EAAIv9D,KAAK,KAClB,MAAO5mB,GACL,MAAO,KAzCbikF,EAA8Bl2D,GADnCC,EAAK,kBAAmB,6BACnBi2D,GAAN,GAJe,CAAAh3D,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCCV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAoBf,WAZA,SAAA+4C,IAkBW7lF,KAAAu5E,MAAc,IAAI98C,KAKlBz8B,KAAA8lF,eAAiB,EACjB9lF,KAAA+lF,aAAe,GAGfF,EAAA9mF,UAAAqtC,QAAP,WACIpsC,KAAKgmF,YAAchmF,KAAKgmF,aAAe,IAAIvpD,KAC3Cz8B,KAAKimF,UAAYjmF,KAAKkmF,oBACtBlmF,KAAKmmF,SAAWnmF,KAAKomF,YAAYpmF,KAAKgmF,YAAa,IAGhDH,EAAA9mF,UAAA6kD,WAAP,WACI5jD,KAAK8iF,OAAS9iF,KAAK8iF,WAEnB,IAAMuD,EACDrmF,KAAKgmF,aAAehmF,KAAKgmF,YAAYtwC,aACtC,IAAIjZ,MAAOiZ,WACT4wC,EAASD,EAAS3yC,QAAQ,GAChC1zC,KAAKumF,UAAYvmF,KAAK8iF,OAAOjgF,OACvB7C,KAAKwmF,iBAAiBxmF,KAAK8iF,OAAQuD,EAAUC,OAIhDT,EAAA9mF,UAAA0nF,UAAP,SAAiBlxC,GACb,OAAOA,EAAID,aAGRuwC,EAAA9mF,UAAA2nF,UAAP,SAAiBnxC,GACRA,IAELv1C,KAAKmmF,SAAWnmF,KAAKomF,YAAYpmF,KAAKgmF,YAAa,GACnDhmF,KAAK2mF,eAAgBvoF,MAAOm3C,EAAIG,eAG7BmwC,EAAA9mF,UAAA6nF,aAAP,WACI,IAAMC,EAAoB7mF,KAAKgmF,YAC/Ba,EAAkBxzC,QAAQrzC,KAAKgmF,YAAY1yC,UAAY,GACvDtzC,KAAK0mF,UAAUG,EAAkBnxC,aAG9BmwC,EAAA9mF,UAAA+nF,SAAP,WACI,IAAMC,EAAgB/mF,KAAKgmF,YAC3Be,EAAc1zC,QAAQrzC,KAAKgmF,YAAY1yC,UAAY,GACnDtzC,KAAK0mF,UAAUK,EAAcrxC,aAG1BmwC,EAAA9mF,UAAAioF,gBAAP,WACI,OACIhnF,KAAKgmF,YAAYjyC,aAAa,MAC9B,IACA/zC,KAAKgmF,YAAYpyC,eAIlBiyC,EAAA9mF,UAAAkoF,eAAP,WACI,OAAOjnF,KAAKgmF,YAAc,IAAIvpD,KAAKz8B,KAAKgmF,aAAe,IAAIvpD,MAGvDopD,EAAA9mF,UAAAmnF,kBAAR,WAEI,IADA,IAAMgB,KACG/pF,EAAI6C,KAAK8lF,eAAgB3oF,GAAK6C,KAAK+lF,aAAc5oF,IACtD+pF,EAAejuE,KAAK9b,GAGxB,OAAO+pF,GAGJrB,EAAA9mF,UAAAooF,UAAP,SAAiBC,EAAUhzC,GACvB,OAAOgzC,EAAG9zC,YAAcc,EAAGd,WAGvBuyC,EAAA9mF,UAAAynF,iBAAR,SACI1D,EACAlgF,EACA4G,GAEA,OAAKs5E,GAAWA,EAAOjgF,OAEhBigF,EAAOzpE,OACV,SAAA9J,GAAK,WAAIktB,KAAKltB,EAAEk7B,WAAajhC,GAAO,IAAIizB,KAAKltB,EAAEswE,SAAWj9E,QAI1DijF,EAAA9mF,UAAAqnF,YAAR,SAAoB7wC,EAAWd,QAAA,IAAAA,MAAA,GAC3B,IAAM4B,KACN,IAAKd,EAAK,OAAOc,EAGjB,IADAd,EAAIpB,SAAS,EAAG,EAAG,EAAG,GACfkC,EAAOxzC,OAAS4xC,GACE,IAAjBc,EAAIhC,UAAmC,IAAjBgC,EAAIhC,UAC1B8C,EAAOp9B,KAAKs8B,EAAIrC,SACpBqC,EAAMA,EAAI7B,QAAQ,GAEtB,OAAO2C,GAvGTwvC,EAAsBz2D,GAZ3BqI,EAAU,mBACPE,SAAU,iBACVkV,YACI,6DACJe,UACIk1C,OAAQ,IACRuE,eAAgB,IAChBC,gBAAiB,IACjBtB,YAAa,IACbW,cAAe,QAGjBd,GAAN,GApBJ,CAAUv3D,WCFV,SAAUA,IAAS,SAAAwe,GAGf,IAAAy6C,EAAA,WACI,SAAAA,EACYvkC,EACA0e,EACAzxB,GAFAjwC,KAAAgjD,YACAhjD,KAAA0hE,cACA1hE,KAAAiwC,sBA2BhB,OAxBWs3C,EAAAxoF,UAAAyoF,mBAAP,SAA0BC,GAA1B,IAAAzmD,EAAAhhC,KACSynF,GAAcA,EAAUnlB,OAE7BtiE,KAAK0hE,YACAr9B,SAAU7F,GAAIipD,EAAUnlB,QACxBh+B,SAASC,KACN,SAAA6B,GAAO,OAAAA,EAAIqzC,YAAa,IAAIh9C,MAAOmJ,UAAY,IAAInJ,KAAK2J,EAAIqzC,WAAW/jC,WAAW9P,UAC5E5E,EAAKiP,oBAAoBy3C,QAAQ,+DACjC1mD,EAAK2mD,aAAaF,EAAU5nF,MAAOumC,EAAIsgC,SAC7C,SAAArlE,GAAK,OAAA2/B,EAAKiP,oBAAoB1/B,MAAM,2FAIxCg3E,EAAAxoF,UAAA4oF,aAAR,SAAqB9nF,EAAe6mE,GAChC1mE,KAAKgjD,UAAUvhD,KACXzB,KAAKgjD,UACA4kC,QACArjC,qBAAoB,GACpB1kD,MAAMA,GACNuiC,YAAY9T,EAAAmqB,UAAUiuB,IACtBmhB,UAAUhoF,GACVioF,GAAG,aAGpBP,EA/BA,GAAsBz6C,EAAAy6C,wBAAuBA,EAH9B,CAAAj5D,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCEV,SAAUA,IAAS,SAAAwe,GAmBf,IAAAi7C,EAAA,SAAAzkD,GAOI,SAAAykD,EACcC,EACVhlC,EACA0e,EACAzxB,GAJJ,IAAAjP,EAMIsC,EAAAhmC,KAAA0C,KAAMgjD,EAAW0e,EAAazxB,IAAoBjwC,YALxCghC,EAAAgnD,mBAHNhnD,EAAAinD,oBAyBZ,OA9ByCpjD,EAAAkjD,EAAAzkD,GAgB9BykD,EAAAhpF,UAAA6kD,WAAP,eAAA5iB,EAAAhhC,KACU+vE,EAAS/vE,KAAK+vE,WAChB/vE,KAAK65E,OAAO9J,EAAO92D,KAAKjZ,KAAK65E,OAE7B9J,EAAOltE,QAAU7C,KAAKkoF,eAAenY,IACrC/vE,KAAKgoF,iBAAiBlY,UAAU9vE,KAAKtB,IAAKqxE,GAAQxrC,KAAK,SAAA4jD,GAAc,OAACnnD,EAAKmnD,WAAaA,KAIxFJ,EAAAhpF,UAAAmpF,eAAR,SAAuBnY,GACnB,IAAMqY,EAAY/6D,KAAKC,UAAUttB,KAAKioF,kBAAoB56D,KAAKC,UAAUyiD,GAEzE,OADA/vE,KAAKioF,eAAiBlY,EACfqY,GA5BFL,EAAmB34D,GAV/BqI,EAAU,mBACPE,SAAU,aACVkV,YAAa,gEACbe,UACIlvC,IAAK,IACLm7E,MAAO,IACP9J,OAAQ,OAGf73C,EAAO,mBAAoB,YAAa,cAAe,wBAC3C6vD,GAAb,CAAyCj7C,EAAAy6C,yBAA5Bz6C,EAAAi7C,oBAAmBA,EAnBjB,CAAAz5D,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCFV,SAAUA,IAAS,SAAAwe,GAYf,IAAAu7C,EAAA,SAAA/kD,GAGI,SAAA+kD,EACIrlC,EACA0e,EACAzxB,UAEA3M,EAAAhmC,KAAA0C,KAAMgjD,EAAW0e,EAAazxB,IAAoBjwC,KAE1D,OAVkD6kC,EAAAwjD,EAAA/kD,GAArC+kD,EAA4Bj5D,GARxCqI,EAAU,mBACPE,SAAU,uBACVkV,YAAa,gEACbe,UACIu6C,WAAY,OAGnBjwD,EAAO,mBAAoB,YAAa,cAAe,wBAC3CmwD,GAAb,CAAkDv7C,EAAAy6C,yBAArCz6C,EAAAu7C,6BAA4BA,EAZ1B,CAAA/5D,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,GAMf,IAwBYw7C,EAxBLnnD,EAAW7S,EAAS4S,QAAQC,SAE5B5M,EAAoBjG,EAASiD,QAAQ8C,cAAcE,kBACnDqO,EAAuBtU,EAAS4S,QAAQ0B,sBAqB/C,SAAY0lD,GACRA,IAAA,eACAA,IAAA,iBAFJ,CAAYA,EAAAx7C,EAAAw7C,kCAAAx7C,EAAAw7C,qCAkBZ,IAAAC,EAAA,WA2BI,SAAAA,EACYvlC,EACA0e,EACAD,EACA79B,EACA+9B,GALZ,IAAA3gC,EAAAhhC,KACYA,KAAAgjD,YACAhjD,KAAA0hE,cACA1hE,KAAAyhE,oBACAzhE,KAAA4jC,sBACA5jC,KAAA2hE,sBA3BL3hE,KAAAwoF,cAEAxoF,KAAAqjE,QAMArjE,KAAAyoF,sBACAzoF,KAAA0oF,sBACA1oF,KAAA2oF,cACA3oF,KAAA4oF,iBACA5oF,KAAA6oF,iBAA2B,GAE3B7oF,KAAA8oF,oCACA9oF,KAAA+oF,sCAEC/oF,KAAAynC,KAAO,EACPznC,KAAAqlC,SAAW,GAEXrlC,KAAAgpF,iBAAmB,EA+KpBhpF,KAAAipF,YAAc9nD,EACjB,SAACqH,GACGxH,EAAKkoD,QACLloD,EAAKr+B,OAAO6lC,IAEhB,KACA,GA2MR,OAtXW+/C,EAAAxpF,UAAAqtC,QAAP,WACSpsC,KAAKmpF,yBAAwBnpF,KAAKmpF,2BAEvCnpF,KAAKopF,wBACDppF,KAAK4pC,YACL5pC,KAAK2C,OAAO3C,KAAK4pC,aAIrB5pC,KAAKqpF,iBAGTd,EAAAxpF,UAAA6kD,WAAA,SAAWhW,GACHA,EAAS07C,kBAAoB17C,EAAS07C,iBAAiB/yB,eACvDv2D,KAAKupF,0BAA2B,IAI3BhB,EAAAxpF,UAAAqqF,sBAAb,oHACQppF,KAAKspF,iBAAL,YACA,OAAQtpF,KAAKspF,iBAAiBE,SAC1B,KAAKlB,EAAgC9yB,KACjCx1D,KAAK6oF,iBAAmB,gDACxB,MACJ,QACI7oF,KAAK6oF,iBAAmB,sBAEhC,SAAM7oF,KAAKypF,oBAAoBzpF,KAAKspF,iBAAiB9gD,eAArD5L,EAAAC,+BAGC78B,KAAKspF,kBAAoBtpF,KAAK4oF,cAAc/lF,OAAS,GAChDukC,EAAUpnC,KAAK0pF,mBAEjB,EAAMtiD,EAAQ+rB,QAAQ,WAAM,OAAAnyB,EAAK4nD,cAAgB5nD,EAAK2nD,eADtD,MAFJ,mBAGI/rD,EAAAC,oBAEA78B,KAAK4oF,kCAET,SAAM5oF,KAAK2pF,6BAAX/sD,EAAAC,wCAID0rD,EAAAxpF,UAAAsqF,cAAP,WACIrpF,KAAKkpF,QACLlpF,KAAK4pF,YAGFrB,EAAAxpF,UAAA6jE,UAAP,SAAiBx8B,GAAjB,IAAApF,EAAAhhC,KACI,GAAKomC,EAAL,CAEA,GAAIA,EAAIsiD,mBAAoB,CACxB,IAAM1jC,EAAM5e,EAAIsiD,mBAAmB/5E,IAAI,SAAA2K,GAAK,OAAAA,EAAEuwE,gBAC9C7pF,KAAK2hE,oBAAoBvpB,UAAW4M,IAAKA,IAAO1gB,SAASC,KAAK,SAAAmD,GAC1DA,EAAK3zB,QAAQ,SAAAuF,GACT0nB,EAAK0nD,mBAAmBpvE,EAAEklB,GAAG35B,YAAcyU,EAAE5b,SAOzD,GAFAsC,KAAK8pF,cAAgB9pF,KAAK8pF,gBAAkB1jD,EAAI5H,GAAK,KAAO4H,EAAI5H,GAE3Dx+B,KAAK8pF,cAAV,CAEA9pF,KAAK8oF,iCAAmC9oF,KAAK+pF,oCAAoC3jD,GACjFpmC,KAAK+oF,mCAAqC/oF,KAAKgqF,sCAAsC5jD,GAGrF,IAAM6jD,EAAY7jD,EAAY,QAAK7R,EAAkB21D,UACjDtnD,EAAqBrO,EAAmB01D,KAAe11D,EAAkB21D,WACzElqF,KAAK0hE,YAAY+B,mBAAoBjlC,GAAIx+B,KAAK8pF,gBAElD,IAAM3pF,EAAMH,KAAKmqF,iBACjBnqF,KAAKoqF,eAAgBhkD,IAAGA,EAAEjmC,IAAGA,OAG1BooF,EAAAxpF,UAAA4jE,UAAP,SAAiBxiE,GACRA,IAELH,KAAKkpF,QACLlpF,KAAKskE,YAAcnkE,EAEnBH,KAAK4pF,SAASzpF,EAAIq+B,IAClBx+B,KAAKqqF,SAASlqF,EAAIq+B,MAGf+pD,EAAAxpF,UAAAurF,gBAAP,SAAuBlkD,GACOpmC,KAAK2oF,WAAWtvE,OAAO,SAAAC,GAAK,OAAAA,EAAEklB,KAAO4H,EAAI5H,KAC7C37B,OAAS,EAC3B7C,KAAK2oF,WAAa3oF,KAAK2oF,WAAWtvE,OAAO,SAAAC,GAAK,OAAAA,EAAEklB,KAAO4H,EAAI5H,KACpDx+B,KAAK2oF,aACZ3oF,KAAK2oF,WAAa3oF,KAAK2oF,WAAW1iF,MAAM,EAAGjG,KAAKgpF,iBAAmB,IAEvEhpF,KAAK2oF,WAAW1rE,QAAQmpB,GAExBpmC,KAAK4jC,oBAAoB5K,MAAM,0BAA2B3L,KAAKC,UAAUttB,KAAK2oF,cAG3EJ,EAAAxpF,UAAA2qF,eAAP,eAAA1oD,EAAAhhC,KACQuqF,EAAYvqF,KAAKwqF,gBAAgB77E,IAAI,SAAA2K,GAAK,OAAAA,EAAEklB,KAChD,OAAI+rD,GAAaA,EAAU1nF,OAAS,EACzB7C,KAAK0hE,YAAYtpB,UAAW4M,IAAKulC,EAAUtiE,KAAK,OAClDqc,SACAC,KAAK,SAACkmD,GACHzpD,EAAK2nD,WAAa8B,EAAKt0E,KAAK,SAAC5G,EAAGC,GAAM,OAAA+6E,EAAUznF,QAAQyM,EAAEivB,IAAM+rD,EAAUznF,QAAQ0M,EAAEgvB,MACpFwC,EAAK4C,oBAAoB5K,MAAM,0BAA2B3L,KAAKC,UAAUm9D,MAI9E,MAGElC,EAAAxpF,UAAA4qF,mBAAb,oHACQe,EAAuB1qF,KAAKgpF,iBAAmBhpF,KAAK4oF,cAAc/lF,QAC5C,GAEP,EAAM7C,KAAK0hE,YAAYipB,uBAAwBlzE,MAAOizE,IAAuBpmD,WAF7F,YAEOyrC,EAAShkC,EAAAlP,QACfD,EAAA58B,KAAK4oF,eAAc3vE,KAAI3F,MAAAspB,EAAImzC,oCAI5BwY,EAAAxpF,UAAAyrF,cAAP,WACI,IAAMI,EAAmB5qF,KAAK4jC,oBAAoB5lC,IAAI,2BAChD6sF,EAAmBx9D,KAAKiQ,MAAMstD,GACpC,OAAOC,GAAoBA,EAAiBhoF,OAAS,EAAIgoF,MAGtDtC,EAAAxpF,UAAAorF,eAAP,WACI,OAAOnqF,KAAK8qF,iBAAmB,KAAO9qF,KAAKskE,aAGxCikB,EAAAxpF,UAAAgsF,0BAAP,WACI,OAAI/qF,KAAKgrF,kBAA0B,KAG/BhrF,KAAKyoF,mBAAmBhmF,OAAOzC,KAAK8pF,iBACnC9pF,KAAK8oF,kCACF9oF,KAAK8oF,iCAAiCjmF,OAAS,GAC/C7C,KAAK8oF,iCAAiC,IAI3CP,EAAAxpF,UAAAksF,YAAP,SAAmB9qF,GAAnB,IAAA6gC,EAAAhhC,KACSG,GAAQA,EAAIgiD,QAEjBniD,KAAKgjD,UACAvhD,MACG03C,SAAU,sDACVmZ,QACInyD,IAAGA,GAEPu3B,YACI,SACA,MACA,SAACqB,EAAQ54B,GACL44B,EAAO54B,IAAMA,IAGrBmkD,YAAa,KACbC,qBAAqB,IAExBhgB,KAAK,SAAA6B,GACFpF,EAAKkqD,OAAS9kD,EACdpF,EAAK8oD,cAAgB1jD,EAAI5H,MAa9B+pD,EAAAxpF,UAAA+rF,eAAP,WACI,SAAU9qF,KAAK4pC,cAAe5pC,KAAK4pC,YAAY/mC,SAG5C0lF,EAAAxpF,UAAAosF,kBAAP,WACI,OAAOnrF,KAAKyqF,OAASzqF,KAAKorF,aAAeprF,KAAKqrF,4BAA8B,GAGzE9C,EAAAxpF,UAAAssF,0BAAP,WACI,OAAKrrF,KAAKyqF,MAASzqF,KAAKyqF,KAAK5kF,MAEtB7F,KAAKyqF,KAAKvkD,MAAQlmC,KAAKyqF,KAAK5kF,MAAMhD,OAFE,GAKxC0lF,EAAAxpF,UAAAusF,yBAAP,WACI,OAAKtrF,KAAKyqF,MAASzqF,KAAKyqF,KAAK5kF,MAEtBZ,KAAKS,IAAI1F,KAAKyqF,KAAKplD,SAAUrlC,KAAKqrF,6BAFE,GAKxC9C,EAAAxpF,UAAAg2E,SAAP,WACI/0E,KAAKynC,MAAQ,EAETznC,KAAK4pC,aAAe5pC,KAAK4pC,YAAY/mC,OAAQ7C,KAAK2C,OAAO3C,KAAK4pC,aACzD5pC,KAAKskE,aAAatkE,KAAKqqF,SAASrqF,KAAKskE,YAAY9lC,KAGvD+pD,EAAAxpF,UAAAwsF,sBAAP,SAA6BnlD,GACzB,OAAOA,EAAIsiD,mBAAmB7lF,OAAS,GAGpC0lF,EAAAxpF,UAAAysF,wBAAP,SAA+BplD,EAAeqlD,GAC1C,IAAKA,EAGD,cAFOzrF,KAAKyoF,mBAAmBhmF,OAAO2jC,EAAI5H,UAC1Cx+B,KAAKgrF,mBAAoB,GAI7BhrF,KAAKyoF,mBAAmBhmF,OAAO2jC,EAAI5H,KAAOitD,EAC1CzrF,KAAKgrF,mBAAoB,GAGtBzC,EAAAxpF,UAAA2sF,sBAAP,SAA6BtlD,EAAeqlD,GACxC,IAAME,EAAuB3rF,KAAKyoF,oBAAsBzoF,KAAKyoF,mBAAmBhmF,OAAO2jC,EAAI5H,KAE3F,OAAKitD,IAAsBE,MAGvBA,IACAF,GACAE,EAAqB9B,gBAAkB4B,EAAkB5B,gBAO1DtB,EAAAxpF,UAAA6sF,aAAP,SAAoBxlD,GAChB,IAAMulD,EAAuB3rF,KAAKyoF,oBAAsBzoF,KAAKyoF,mBAAmBhmF,OAAO2jC,EAAI5H,KAC3F,OAAQmtD,GAAwBA,EAAqBjlB,QAAWtgC,EAAIsgC,QAGjE6hB,EAAAxpF,UAAAgrF,oCAAP,SAA2C3jD,GACvC,IAAMylD,EAA6B7rF,KAAKmpF,uBAClCT,EAAqBtiD,GAAOA,EAAIsiD,mBAEtC,OAAKA,GAAuBmD,EAA2BhpF,OAEhD6lF,EAAmBrvE,OACtB,SAAAC,GAAK,OAAAuyE,EAA2Bl9E,IAAI,SAAA2K,GAAK,OAAAA,EAAEklB,KAAI17B,QAAQwW,EAAEuwE,gBAAkB,QAI5EtB,EAAAxpF,UAAAirF,sCAAP,SAA6C5jD,GACzC,IAAMylD,EAA6B7rF,KAAKmpF,uBAClCT,EAAqBtiD,GAAOA,EAAIsiD,mBAEtC,OAAKA,EAEAmD,EAA2BhpF,OAEzB6lF,EAAmBrvE,OACtB,SAAAC,GAAK,OAAuE,GAAvEuyE,EAA2Bl9E,IAAI,SAAA2K,GAAK,OAAAA,EAAEklB,KAAI17B,QAAQwW,EAAEuwE,iBAHdnB,MAO5CH,EAAAxpF,UAAA+sF,wCAAP,SAA+CplB,EAAgBqlB,GAC3D,OAAUrlB,EAAM,6EAC8CqlB,EAAe,0CAG1ExD,EAAAxpF,UAAAitF,iBAAP,SAAwB5lD,EAAe4I,GACnChvC,KAAKsqF,gBAAgBlkD,GACrB,IAAM6lD,EAAiBjsF,KAAK+qF,4BAC5B/7C,EAAOk9C,UAAU9lD,EAAKpmC,KAAKmqF,iBAAkB8B,GAAkBA,EAAepC,gBAGpEtB,EAAAxpF,UAAA4D,OAAd,SAAqBinC,iGACjB,OAAKA,GAAgBA,EAAY/mC,QAKjC7C,KAAKorF,aAAc,GACL,EAAMprF,KAAK0hE,YAAY/+D,QACjCwzC,EAAGvM,EACHnC,KAAMznC,KAAKynC,KACXpC,SAAUrlC,KAAKqlC,SACf8mD,qBAAqB,EACrBjnB,aAAcllE,KAAKmpF,uBAAuBx6E,IAAI,SAAA2K,GAAK,OAAAA,EAAEklB,OACtD8F,YAXCtkC,KAAKqpF,iBACL,WAaJ,OATMxP,EAAQj9C,EAAAC,OAOd78B,KAAKorF,aAAc,EAEdvR,GAAUA,EAAMh0E,OAErB7F,KAAKosF,cAAcvS,SAFS,SAKnB0O,EAAAxpF,UAAA0qF,oBAAb,SAAiCH,EAA0B5nD,eAAA,IAAAA,MAAA,kGACvD,OAAK4nD,GAAqBA,EAAiBzmF,QAE3C7C,KAAKorF,aAAc,EACnBprF,KAAKupF,0BAA2B,GAClB,EAAMvpF,KAAK0hE,YAAY2qB,SACjCC,QAAShD,EACT7hD,KAAM,EACNpC,SAAU3D,EACVwjC,kBACD5gC,YATgD,UAcnD,IAVMu1C,EAAQj9C,EAAAC,OAMd78B,KAAKorF,aAAc,EAEbmB,EAAc1S,EAAMh0E,iBAEjB1I,GACoBqvF,EAAK5D,cAAcvvE,OAAO,SAAAC,GAAK,OAAAA,EAAEklB,KAAO+tD,EAAYpvF,GAAGqhC,KAE3D37B,OAAS,IAC1B2pF,EAAK5D,cAAgB4D,EAAK5D,cAAcvvE,OAAO,SAAAC,GAAK,OAAAA,EAAEklB,KAAO+tD,EAAYpvF,GAAGqhC,MAEhFguD,EAAK5D,cAAc3rE,QAAQsvE,EAAYpvF,YANlCA,EAAIovF,EAAY1pF,OAAS,EAAG1F,GAAK,EAAGA,MAApCA,UASL6C,KAAK4oF,cAAc/lF,OAAS6+B,IAAO1hC,KAAK4oF,cAAgB5oF,KAAK4oF,cAAc3iF,MAAM,EAAGy7B,cAGrF6mD,EAAAxpF,UAAA0tF,cAAP,WACI,QAASzsF,KAAKskE,aAAoC,OAArBtkE,KAAKskE,aAA0BtkE,KAAK8qF,mBAG9DvC,EAAAxpF,UAAA2tF,aAAP,WACI1sF,KAAK4pC,YAAc,GACnB5pC,KAAKkpF,SAGKX,EAAAxpF,UAAA6qF,SAAd,SAAuB+C,iGAKP,OAJZ3sF,KAAK4sF,aAAc,GAEdD,GAAe3sF,KAAKupF,0BAA0BvpF,KAAKopF,wBAExDxsD,EAAA58B,MAAY,EAAMA,KAAKyhE,kBAAkBorB,WACrCruD,GAAImuD,IACLroD,wBAFH1H,EAAKymC,KAAOt3B,EAAAlP,OAGZ78B,KAAK4sF,aAAc,YAGTrE,EAAAxpF,UAAAsrF,SAAd,SAAuBhoB,iGAEL,OADdriE,KAAKorF,aAAc,GACL,EAAMprF,KAAK0hE,YAAYorB,iBACjCtuD,GAAI6jC,EACJ56B,KAAMznC,KAAKynC,KACXpC,SAAUrlC,KAAKqlC,WAChBf,iBAGH,OAPMu1C,EAAQj9C,EAAAC,OAKd78B,KAAKorF,aAAc,EAEdvR,GAAUA,EAAMh0E,OAErB7F,KAAKosF,cAAcvS,SAFS,SAKxB0O,EAAAxpF,UAAAqtF,cAAR,SAAsBvS,GACb75E,KAAKyqF,KAKVzqF,KAAKyqF,KAAIxvD,KACFj7B,KAAKyqF,MACRhjD,KAAMoyC,EAAMpyC,KACZ5hC,MAAW7F,KAAKyqF,KAAK5kF,MAAKqiB,OAAK2xD,EAAMh0E,SAPrC7F,KAAKyqF,KAAO5Q,GAWZ0O,EAAAxpF,UAAAmqF,MAAR,WACIlpF,KAAKynC,KAAO,EACZznC,KAAKyqF,KAAO,KACZzqF,KAAKqjE,QACLrjE,KAAKskE,YAAc,KACnBtkE,KAAK8pF,cAAgB,KACrB9pF,KAAKkrF,OAAS,MAvZT3C,EAAsBn5D,GAblCqI,EAAU,mBACPE,SAAU,gBACVkV,YAAa,4DACbe,UACIhE,YAAa,IACb0/C,iBAAkB,IAClBd,WAAY,IACZ4B,cAAe,IACf2C,QAAS,IACT5D,uBAAwB,OAG/BjxD,EAAO,YAAa,cAAe,oBAAqB,sBAAuB,wBACnEqwD,GAAb,GAAaz7C,EAAAy7C,uBAAsBA,EAhDpB,CAAAj6D,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCEV,SAAUA,IAAS,SAAAwe,GAkBf,IAAAkgD,EAAA,WAOI,SAAAA,EAAoBhqC,GAAAhjD,KAAAgjD,YANbhjD,KAAAitF,aAAe,WACfjtF,KAAAktF,QAAU,EACVltF,KAAAmtF,WAAa,YACbntF,KAAAotF,YAAc,aAYzB,OAPWJ,EAAAjuF,UAAAynD,OAAP,WACIxmD,KAAKgjD,UAAUwD,UAGZwmC,EAAAjuF,UAAAg0D,QAAP,WACI/yD,KAAKgjD,UAAUzM,KAAKv2C,KAAKq2C,SAdpB22C,EAA8B59D,GAjB1CqI,EAAU,mBACPE,SAAU,0BACViW,UACIuQ,MAAO,IACPt+C,MAAO,IACPuiC,YAAa,IACbirD,YAAa,KACbxF,UAAW,IACXqF,QAAS,KACTC,WAAY,KACZC,YAAa,KACb7wB,SAAU,KAEd1vB,YACI,+EAEP3U,EAAO,cACK80D,GAAb,GAAalgD,EAAAkgD,+BAA8BA,EAlB5B,CAAA1+D,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCFV,SAAUA,IAAS,SAAAwe,GAmBf,IAAAwgD,EAAA,WAaI,SAAAA,EACY9iC,EACA+iC,EACAC,EACAhsC,GAHAxhD,KAAAwqD,iBACAxqD,KAAAutF,eACAvtF,KAAAwtF,mBACAxtF,KAAAwhD,SA6EhB,OA1EiB8rC,EAAAvuF,UAAA0uF,SAAb,SAAsBC,kGACb1tF,KAAKsrD,QAAN,MAAc,EAAMtrD,KAAKk8B,eAAXU,EAAAC,+BAClB6wD,EAAQC,iBAGLL,EAAAvuF,UAAA6uF,OAAP,SAAc36C,GACVjzC,KAAKutF,aAAaK,OAAO36C,IAGfq6C,EAAAvuF,UAAAm9B,KAAd,gHACSl8B,KAAKihD,SAAUjhD,KAAKqsD,UAArB,MACAzvB,EAAA58B,MAAc,EAAMA,KAAKwqD,eAAenmB,SACpC7F,GAAIx+B,KAAKqsD,WACV/nB,kBAFH1H,EAAKqkB,OAASlV,EAAAlP,wBAQlB,OAHA78B,KAAK6tF,kBACL7tF,KAAK8tF,oBACL9tF,KAAK+tF,eACL,EAAM/tF,KAAKguF,sBAAsBhuF,KAAKqsD,yBAAtCtgB,EAAAlP,OACA78B,KAAKiuF,eAELjuF,KAAKsrD,QAAS,YAGVgiC,EAAAvuF,UAAA8uF,gBAAR,WACI,IAAMrjB,EAAiBxqE,KAAKihD,QAAUjhD,KAAKihD,OAAOupB,eAClDxqE,KAAKkuF,aAAe1jB,GAAkBA,EAAe0jB,cAGjDZ,EAAAvuF,UAAA+uF,kBAAR,WACI,IAAMtjB,EAAiBxqE,KAAKihD,QAAUjhD,KAAKihD,OAAOupB,eAClDxqE,KAAKyqE,eACDD,GAAkBA,EAAeC,gBAGjC6iB,EAAAvuF,UAAAgvF,YAAR,WACI,OAAQ/tF,KAAKsiC,UACT,IAAK,OACDtiC,KAAKsiC,SAAW,QAChB,MACJ,IAAK,QACDtiC,KAAKsiC,SAAW,OAChB,MACJ,IAAK,MACDtiC,KAAKsiC,SAAW,MAChB,MACJ,QACItiC,KAAKsiC,SAAW,WAKdgrD,EAAAvuF,UAAAivF,sBAAd,SAAoCxvD,iGACf,SAAMx+B,KAAKwtF,iBAAiBW,gBACzCnpC,KAAMxmB,KACP8F,iBACH,OAHM8pD,EAAWxxD,EAAAC,SAGCuxD,EAASvrF,QAE3B7C,KAAKquF,mBAAqBD,EAAS,GAAGxuD,aAFH,SAK/B0tD,EAAAvuF,UAAAkvF,aAAR,WACI,IACMK,EAAmBtuF,KAAKwhD,OAAOyU,QAAQv4D,KAAKgF,SADzB,gCAInB6rF,EACFvuF,KAAKwhD,OAAO7yB,OAAiB,UAC7B3uB,KAAKwhD,OAAO7yB,OAAiB,UAAK3uB,KAAKihD,OAAOziB,GAElDx+B,KAAKwuF,+BACDF,GAAoBC,GA5FnBjB,EAAyBl+D,GAdrCqI,EAAU,mBACPE,SAAU,qBACVkV,YACI,kEACJe,UACIqT,OAAQ,IACRoL,SAAU,IACVoiC,WAAY,IACZnsD,SAAU,IACVosD,SAAU,IACVnoD,YAAa,OAGpBrO,EAAO,iBAAkB,eAAgB,mBAAoB,WACjDo1D,GAAb,GAAaxgD,EAAAwgD,0BAAyBA,EAnBvB,CAAAh/D,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,GAkBf,IAAA6hD,EAAA,oBAAAA,KAEA,OAFaA,EAAkBv/D,GAR9BqI,EAAU,mBACPE,SAAU,aACVkV,YACI,6DACJe,UACIghD,QAAS,QAGJD,GAAb,GAAa7hD,EAAA6hD,mBAAkBA,EAlBhB,CAAArgE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCKV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAA+hD,gBAAA/hD,EAAA+hD,kBAK/BtgE,QAAQrxB,OAAO,cAAc69B,QACzB,iBACA,qBACA,SAACsmB,EAAgBC,GACbD,EAAepkB,MAAM,iCACjB60B,gBAAgB,EAChB3zB,IAAK,0BACLkkB,WAAY,WACR,OAAA7/C,OAAOu4B,QAAUv4B,OAAOu4B,OAAO+zD,QAAUtsF,OAAOu4B,OAAO+zD,OAAOC,SACxD,yCACA,4CACVrnD,MACIwpB,UAAW,gBAEf5O,OACI0sC,yBACI71C,SAAU,2DArBf,CAAA7qB,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCFV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAA+hD,gBAAA/hD,EAAA+hD,kBAe/B,oBAAAI,KAIWA,EAAAlwF,UAAAqtC,QAAP,WACIpsC,KAAKkvF,cAGDD,EAAAlwF,UAAAmwF,WAAR,WACIlvF,KAAKmvF,QACD3sF,OAAOu4B,OAAO+zD,OAAOC,UACrB/uF,KAAKmvF,KAAKl2E,MACNpZ,MAAO,SACPo9B,MAAO,2CAGXz6B,OAAOi9B,KAAKmB,YAAYwuD,eACxBpvF,KAAKmvF,KAAKl2E,MACNpZ,MAAO,WACPo9B,MAAO,8CAEPz6B,OAAOi9B,KAAKmB,YAAYyuD,2BAA8BrvF,KAAKwkC,WAAahiC,OAAOi9B,KAAKjB,KAAOx+B,KAAKwkC,UAAUhG,KAC1Gx+B,KAAKmvF,KAAKl2E,MACNpZ,MAAO,YACPo9B,MAAO,8CAMfgyD,EAAAlwF,UAAAuwF,UAAR,SAAkBzvF,EAAeo9B,GAC7B,OACIp9B,MAAKA,EACLo9B,MAAKA,IAILgyD,EAAAlwF,UAAAwwF,OAAR,SAAeC,GACXxvF,KAAKmvF,KAAKl2E,KAAKu2E,IAtCjBP,EAA0B7/D,GAV/BqI,EAAU,mBACPE,SAAU,qBACVwhB,SAAU,uIAGVvL,UACIpJ,UAAW,OAGlBtM,EAAO,eAAgB,sBAClB+2D,GAAN,GAfe,CAAA3gE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCCV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAW,GAuEvB,IAAAu9D,EAAA,WAGI,SAAAA,EAAmBhhE,GAAAzuB,KAAAyuB,YAkEvB,OAhEIghE,EAAA1wF,UAAA2wF,qBAAA,WACI,OAAO1vF,KAAKyuB,UACR,oCAGI4V,QAASrkC,KAAK2vF,YAAY,OAAO,GAAS3gD,OAAQ,QAClDoJ,SAAUp4C,KAAK2vF,YAAY,OAAO,GAAQ3gD,OAAQ,QAClD+/B,OAAQ/uE,KAAK2vF,YAAY,OAAO,GAC5BloD,KAAM,EACNpC,SAAU,KAEduqD,gBAAiB5vF,KAAK2vF,YAAY,OAAO,GACrC3gD,OAAQ,iBACRvH,KAAM,EACNpC,SAAU,KAEdwqD,wBAAyB7vF,KAAK2vF,YAAY,OAAO,GAC7C3gD,OAAQ,yBACRvH,KAAM,EACNpC,SAAU,KAEdpgB,IAAKjlB,KAAK2vF,YAAY,QAAQ,MAC9Bl7E,OAAQzU,KAAK2vF,YAAY,OAAO,MAChChtF,OAAQ3C,KAAK2vF,YAAY,OAAO,GAC5B3gD,OAAQ,SACR3J,SAAU,GACVoC,KAAM,IAEVqoD,gBAAiB9vF,KAAK2vF,YAAY,OAAO,GACrC3gD,OAAQ,kBACR3J,SAAU,GACVoC,KAAM,IAEVsoD,qBAAsB/vF,KAAK2vF,YAAY,OAAO,GAC1C3gD,OAAQ,kBACRxQ,GAAI,MACJiJ,KAAM,EACNpC,SAAU,IAEd2qD,4BAA6BhwF,KAAK2vF,YAAY,OAAO,GACjD3gD,OAAQ,iBACRxQ,GAAI,MACJiJ,KAAM,EACNpC,SAAU,IAEdy2B,+BAAgC97D,KAAK2vF,YAAY,OAAO,GACpD3gD,OAAQ,oCACRxQ,GAAI,MACJu9B,OAAQ,GACRt0B,KAAM,EACNpC,SAAU,OAMlBoqD,EAAA1wF,UAAA4wF,YAAR,SACIjhE,EACA1gB,EACA2gB,EACAuQ,GAEA,OAASxQ,OAAMA,EAAE1gB,QAAOA,EAAE2gB,OAAMA,EAAEuQ,QAAOA,IAlEtCuwD,EAAAn3D,SAAW,aAoEtBm3D,EArEA,GAuEAlhE,QACKrxB,OAAO,cACPsxB,QAAQ,qBACL,YACA,SAAAC,GAAa,WAAIghE,EAAkBhhE,GAAWihE,0BAlJ/B,CAAAn+D,EAAAW,aAAAX,EAAAW,gBAAR,CAAA5D,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCIV,SAAUA,GAkBOA,EAAA2hE,wBAA0B,IAAI32D,GAAGG,QAE9ClL,QACKrxB,OAAO,aACPmC,QAAQ,eAAgB,WAAM,OAAAk9B,EAAEisB,WAAW0nC,cAEhD5hE,EAAAiD,QAAQ63B,qBAAqB,WACzB7sB,EAAEisB,WAAW0nC,YAAYpmC,OAAOr1C,OAAS,SAAA07E,GACrC7hE,EAAA2hE,wBAAwB/1D,OAAOi2D,MA1B3C,CAAU7hE,W5JAV,SAAUwe,IAAgB,SAAA+hD,GAKtB,IAAOoB,EAA0B3hE,EAAS2hE,wBAO1CG,EAAA,WAMI,SAAAA,EACYz9B,EACAjvB,EACA8pD,GAFAxtF,KAAA2yD,eACA3yD,KAAA0jC,oBACA1jC,KAAAwtF,mBAsChB,OAnCI4C,EAAArxF,UAAAqtC,QAAA,WACIpsC,KAAKqsD,SAAWrsD,KAAK2yD,aAAatG,SAElCrsD,KAAKqwF,cAAcrwF,KAAK2yD,aAAatG,UACrCrsD,KAAKswF,6BAGTF,EAAArxF,UAAA4tC,WAAA,WACQ3sC,KAAKuwF,kBAAkBvwF,KAAKuwF,iBAAiB3jD,UAEjD5sC,KAAKuwF,iBAAmB,MAGdH,EAAArxF,UAAAsxF,cAAd,SAA4B7xD,iGACP,OAAjB5B,EAAA58B,MAAiB,EAAMA,KAAK0jC,kBAAkBW,SAAU7F,GAAEA,IAAI8F,wBAA9D1H,EAAK4H,UAAYuH,EAAAlP,OACjB78B,KAAKwwF,uBAAuBxwF,KAAKwkC,UAAU6nB,oBAGjC+jC,EAAArxF,UAAAyxF,uBAAd,SAAqChyD,iGAChB,SAAMx+B,KAAKwtF,iBAAiBW,gBACzCnpC,KAAMxmB,KACP8F,iBACH,OAHM8pD,EAAWxxD,EAAAC,SAGCuxD,EAASvrF,QAE3B7C,KAAKquF,mBAAqBD,EAAS,GAAGxuD,aAFH,SAK/BwwD,EAAArxF,UAAAuxF,0BAAR,eAAAtvD,EAAAhhC,KACIA,KAAKuwF,iBAAmBN,EACnB52E,OAAO,SAAAC,GAAK,QAAEA,IACd4f,uBACAc,UAAU,SAAAvlB,GACHusB,EAAKwD,WAAaxD,EAAKwD,UAAUhG,KAAO/pB,EAAOsnD,SAAQ/6B,EAAKqtD,mBAAqB55E,EAAOmrB,WA5C/FwwD,EAA6BhhE,GALzCqI,EAAU,mBACPE,SAAU,yBACVkV,YAAa,4FAEhB3U,EAAO,eAAgB,oBAAqB,qBAChCk4D,GAAb,GAAavB,EAAAuB,8BAA6BA,EAZpB,CAAAtjD,EAAA+hD,gBAAA/hD,EAAA+hD,mBAA1B,CAAU/hD,W6JLV,SAAUxe,IAAS,SAAAwe,GAAgBA,EAAA+hD,gBAAA/hD,EAAA+hD,kBAc/B,WAKI,SAAA4B,EAAoBjD,GAAAxtF,KAAAwtF,mBAEbiD,EAAA1xF,UAAAqtC,QAAP,WACSpsC,KAAKwkC,YAEVxkC,KAAKwwF,uBAAuBxwF,KAAKwkC,UAAU6nB,UAC3CrsD,KAAKswF,8BAGFG,EAAA1xF,UAAA4tC,WAAP,WACQ3sC,KAAKuwF,kBAAkBvwF,KAAKuwF,iBAAiB3jD,UAEjD5sC,KAAKuwF,iBAAmB,MAGdE,EAAA1xF,UAAAyxF,uBAAd,SAAqChyD,iGAChB,SAAMx+B,KAAKwtF,iBAAiBW,gBACzCnpC,KAAMxmB,KACP8F,iBACH,OAHM8pD,EAAWxxD,EAAAC,SAGCuxD,EAASvrF,QAE3B7C,KAAKquF,mBAAqBD,EAAS,GAAGxuD,aAFH,SAK/B6wD,EAAA1xF,UAAAuxF,0BAAR,eAAAtvD,EAAAhhC,KACIA,KAAKuwF,iBAAmBjiE,EAAA2hE,wBACnB52E,OAAO,SAAAC,GAAK,QAAEA,IACd4f,uBACAc,UAAU,SAAAvlB,GACHusB,EAAKwD,WAAaxD,EAAKwD,UAAUhG,KAAO/pB,EAAOsnD,SAC/C/6B,EAAKqtD,mBAAqB55E,EAAOmrB,WAnC/C6wD,EAAwBrhE,GAT7BqI,EAAU,mBACPE,SAAU,mBACVkV,YACI,gFACJe,UACIpJ,UAAW,OAGlBtM,EAAO,qBACFu4D,GAAN,GAde,CAAAniE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,IAAgB,SAAA+hD,GAAcA,EAAAxtB,aAAAwtB,EAAAxtB,eAC7C9yC,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,SAACsmB,GACGA,EAAepkB,MAAM,4CACjByK,MACI8nD,IAAK,UACLhsC,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,eAExBjxD,IAAK,WACLmkB,OACIouC,uBACIv3C,SACI,uDAbO,CAAArM,EAAA+hD,gBAAA/hD,EAAA+hD,mBAAhB,CAAAvgE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCCV,SAAUA,IAAS,SAAAwe,IAAgB,SAAA+hD,IAAc,SAAAxtB,GAc7C,IAAAsvB,EAAA,WAOI,SAAAA,EACYh+B,EACAhM,EACAjjB,GAFA1jC,KAAA2yD,eACA3yD,KAAA2mD,mBACA3mD,KAAA0jC,oBAqChB,OAlCWitD,EAAA5xF,UAAAqtC,QAAP,WACIpsC,KAAK4gC,YAAcp+B,OAAOi9B,KAAKmB,YAC/B5gC,KAAKqwF,gBACLrwF,KAAKinC,kBAGD0pD,EAAA5xF,UAAAsxF,cAAR,eAAArvD,EAAAhhC,KACIA,KAAKy+C,SAAU,EACfz+C,KAAK0jC,kBACAW,SAAU7F,GAAIx+B,KAAK2yD,aAAatG,WAChC/nB,SAASC,KAAK,SAAAmD,GACX1G,EAAKwD,UAAYkD,EACjB1G,EAAKyd,SAAU,KAGjBkyC,EAAA5xF,UAAAkoC,eAAV,eAAAjG,EAAAhhC,KACIA,KAAK4wF,mBAAoB,EACzB,IAAMnpD,EAAOznC,KAAK2nC,WAAa3nC,KAAK2nC,WAAWF,KAAO,EAAI,EACpDpC,EAAWrlC,KAAK2nC,WAAa3nC,KAAK2nC,WAAWtC,SAAW,GAC9DrlC,KAAK2mD,iBAAiBkqC,kBAChBryD,GAAIx+B,KAAK2yD,aAAatG,SAAU5kB,KAAIA,EAAEpC,SAAQA,GAChD,SAAAsC,GACI3G,EAAK2G,YACD9hC,MAAOm7B,EAAK2G,WACN3G,EAAK2G,WAAW9hC,MAAMqiB,OAAOyf,EAAW9hC,OACxC8hC,EAAW9hC,MACjBqgC,MAAOyB,EAAWzB,MAClBuB,KAAME,EAAWF,KACjBpC,SAAUsC,EAAWtC,UAEzBrE,EAAK4vD,mBAAoB,KA3C5BD,EAA4BvhE,GANxCqI,EAAU,mBACPE,SAAU,uBACVkV,YACI,sGAEP3U,EAAO,eAAgB,mBAAoB,sBAC/By4D,GAAb,GAAatvB,EAAAsvB,6BAA4BA,EAdI,CAAA9B,EAAAxtB,aAAAwtB,EAAAxtB,gBAAd,CAAAv0B,EAAA+hD,gBAAA/hD,EAAA+hD,mBAAhB,CAAAvgE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCCV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAW,GAmBvB,IAAA4+D,EAAA,WAGI,SAAAA,EAAmBriE,GAAAzuB,KAAAyuB,YAoBvB,OAlBIqiE,EAAA/xF,UAAAgyF,oBAAA,WACI,OAAO/wF,KAAKyuB,UACR,mCAGIuiE,uBACItiE,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,SACRxQ,GAAI,MACJ+W,IAAK,OACLd,KAAM,aAhBnBq8C,EAAAx4D,SAAW,aAsBtBw4D,EAvBA,GAyBAviE,QACKrxB,OAAO,cACPsxB,QAAQ,oBACL,YACA,SAAAC,GACI,WAAIqiE,EAAwBriE,GAAWsiE,yBAjD5B,CAAAx/D,EAAAW,aAAAX,EAAAW,gBAAR,CAAA5D,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAwe,IAAgB,SAAA+hD,GAAcA,EAAAt8D,WAAAs8D,EAAAt8D,aAoB7C,WAGI,SAAA0+D,EACYl4D,EACA45B,EACAjvB,EACAwtD,EACAC,EACAlhD,GANZ,IAAAjP,EAAAhhC,KACYA,KAAA+4B,SACA/4B,KAAA2yD,eACA3yD,KAAA0jC,oBACA1jC,KAAAkxF,mBACAlxF,KAAAmxF,YACAnxF,KAAAiwC,sBARJjwC,KAAAoxF,eAAiB,EAUrBr4D,EAAOgC,OAASv4B,OAAOu4B,OACvBhC,EAAOs4D,aAAe,KAEtBt4D,EAAOu4D,eAAiB,SAAC/7C,GACrBvU,EAAKuwD,aAAavwD,EAAK2xB,aAAatG,SAAU9W,EAAKvU,EAAKowD,iBAG5DpxF,KAAKmiE,aAGD8uB,EAAAlyF,UAAAojE,WAAR,eAAAnhC,EAAAhhC,KACUwxF,EAAcxxF,KAAK2yD,aAAatG,SACtC,GAAKmlC,GAAeA,IAAgBxxF,KAAKmxF,UAAzC,CAEAnxF,KAAK0jC,kBAAkBW,SAAU7F,GAAIgzD,IAAeltD,SAASC,KAAK,SAAAmD,GAC9D1G,EAAKjI,OAAOyL,UAAYkD,IAG5B,IAAM6xC,EAAQ,IAAI98C,KAClBz8B,KAAKuxF,aAAaC,EAAajY,EAAOv5E,KAAKoxF,kBAGvCH,EAAAlyF,UAAAwyF,aAAR,SAAqBC,EAA0Bj8C,EAAW67C,GAA1D,IAAApwD,EAAAhhC,KAEQwC,OAAOu4B,QACPv4B,OAAOu4B,OAAO+zD,QACdtsF,OAAOu4B,OAAO+zD,OAAOC,UACrBvsF,OAAOu4B,OAAO+zD,OAAOC,SAAS,IAC9BvsF,OAAOu4B,OAAO+zD,OAAOC,SAAS,GAAG0C,YAGrCzxF,KAAK+4B,OAAO0lB,SAAU,EACtBz+C,KAAKkxF,iBACAF,uBACGxyD,GAAIgzD,EACJj8C,IAAGA,EACHd,KAAM28C,IAET9sD,SAASC,KAAK,SAAAmD,GAOX1G,EAAKjI,OAAOs4D,aAAe3pD,EAAK/4B,IANF,SAACY,GAC3B,OAAA0rB,KACO1rB,GACHk7B,UAAW,IAAIhO,KAAKltB,EAAEk7B,UAAUinD,kBAChC7R,QAAS,IAAIpjD,KAAKltB,EAAEswE,QAAQ6R,wBAIvC1nD,MAAM,WACH,OAAAhJ,EAAKiP,oBAAoB1/B,MAAM,gEAElC4iD,QAAQ,WAAM,OAACnyB,EAAKjI,OAAO0lB,SAAU,MA7D5CwyC,EAA8B7hE,GAFnCmJ,EAAW,kBAAmB,kCAC9BL,EAAO,SAAU,eAAgB,oBAAqB,mBAAoB,YAAa,wBAClF+4D,GAAN,GApB+B,CAAAnkD,EAAA+hD,gBAAA/hD,EAAA+hD,mBAAhB,CAAAvgE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCFV,SAAUA,IAAS,SAAAwe,IAAgB,SAAA+hD,GAAcA,EAAAt8D,WAAAs8D,EAAAt8D,aAC7ChE,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,SAACsmB,GACGA,EAAepkB,MAAM,0CACjByK,MACI8nD,IAAK,WACLhsC,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,eAExBjxD,IAAK,YACLmkB,OACIouC,uBACI7jD,YACI,qDACJnV,WAAY,wCAdD,CAAAoV,EAAA+hD,gBAAA/hD,EAAA+hD,mBAAhB,CAAAvgE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,IAAgB,SAAA+hD,GAAcA,EAAA54D,YAAA44D,EAAA54D,cAC7C1H,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,SAACsmB,GACGA,EAAepkB,MAAM,2CACjByK,MACI8nD,IAAK,YACLhsC,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,eAExBjxD,IAAK,aACLmkB,OACIouC,uBACIv3C,SAAU,qDAZC,CAAArM,EAAA+hD,gBAAA/hD,EAAA+hD,mBAAhB,CAAAvgE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCCV,SAAUA,IAAS,SAAAwe,IAAgB,SAAA+hD,IAAc,SAAA54D,GAqB7C,IAAA07D,EAAA,WAWI,SAAAA,EACYh/B,EACAi/B,EACAC,EACAnuD,EACAouD,EACAtwC,GALAxhD,KAAA2yD,eACA3yD,KAAA4xF,6BACA5xF,KAAA6xF,oBACA7xF,KAAA0jC,oBACA1jC,KAAA8xF,eACA9xF,KAAAwhD,SAdLxhD,KAAA+xF,iBACA/xF,KAAAgyF,SAGAhyF,KAAAynC,KAAO,EACPznC,KAAAqlC,SAAW,IA0FtB,OA9EWssD,EAAA5yF,UAAAqtC,QAAP,WACIpsC,KAAKy/B,KAAOj9B,OAAOi9B,KAEnBz/B,KAAKu1C,IAAM,IAAI9Y,KAAKA,KAAKC,OACpB18B,KAAKiyF,gBAIVjyF,KAAKqwF,cAAcrwF,KAAK2yD,aAAatG,UAHjCrsD,KAAKwhD,OAAOM,aAAa,uBAMzB6vC,EAAA5yF,UAAAkzF,cAAR,WACI,OAAOjyF,KAAKy/B,KAAKmB,YAAYyuD,2BAA8BrvF,KAAKy/B,KAAKjB,KAAOx+B,KAAK2yD,aAAatG,UAGrFslC,EAAA5yF,UAAA0V,OAAb,SAAoB8gC,2FAGhB,OAFAv1C,KAAKkyF,aAAc,EACnBlyF,KAAKu1C,IAAM,IAAI9Y,KAAK8Y,IACpB,EAAMv1C,KAAKmyF,kBAAkBnyF,KAAKu1C,aAClC,OADA3Y,EAAAC,QACA,EAAM78B,KAAKoyF,eAAepyF,KAAKu1C,IAAKv1C,KAAKynC,KAAMznC,KAAKqlC,yBAApDzI,EAAAC,OACA78B,KAAKkyF,aAAc,YAGhBP,EAAA5yF,UAAAg2E,SAAP,WACI/0E,KAAKynC,MAAQ,EACbznC,KAAKyU,OAAOzU,KAAKu1C,MAGbo8C,EAAA5yF,UAAAsxF,cAAR,SAAsBhkC,GAAtB,IAAArrB,EAAAhhC,KACIA,KAAKy+C,SAAU,EACfz+C,KAAK0jC,kBAAkBW,SAAU7F,GAAI6tB,IAAY/nB,SAASC,KAAK,SAAAmD,GAC3D1G,EAAKwD,UAAYkD,EACjB1G,EAAKyd,SAAU,EACfzd,EAAKvsB,OAAOusB,EAAKuU,QAIXo8C,EAAA5yF,UAAAozF,kBAAd,SAAgC58C,sGAC5B,SAAMv1C,KAAK4xF,2BACN/gB,oBACG9U,OAAQ/7D,KAAKwkC,UAAU6nB,SACvB1nD,KAAM4wC,EAAIC,mBACV46B,MAAO76B,EAAI7B,QAAQ,GAAG8B,qBAEzBlR,SAASC,KAAK,SAAAmD,GACX1G,EAAK+wD,cAAgBrqD,mBAP7B9K,EAAAC,iBAWU80D,EAAA5yF,UAAAqzF,eAAd,SAA6B78C,EAAW9N,EAAcpC,sGAGlD,OAFa,IAAToC,IAAYznC,KAAKgyF,WAErB,EAAMhyF,KAAK6xF,kBACN1hB,YACGpU,OAAQ/7D,KAAKwkC,UAAU6nB,SACvB1nD,KAAM4wC,EAAIC,mBACV46B,MAAO76B,EAAI7B,QAAQ,GAAG8B,mBACtB/N,KAAIA,EACJpC,SAAQA,IAEXf,SAASC,KAAK,SAAAytD,GACX,GAAKA,GAAUA,EAAM9rD,MAArB,CAEA,IAAMmsD,EAA2BL,EAAMnsF,MAAM8I,IAAI,SAAAnR,GAC7C,OAAS80F,YAAa90F,EAAG6uD,SAAU,KAAMoiC,WAAY,QAEzDztD,EAAKgxD,MAAYhxD,EAAKgxD,MAAK9pE,OAAKmqE,GAEhC,IAAMrtC,EAAM3hD,MAAMsB,KAAK,IAAImD,IAAIkqF,EAAMnsF,MAAM8I,IAAI,SAAAlR,GAAK,OAAAA,EAAE80F,WACtDvxD,EAAK8wD,aAAaU,aAAcxtC,IAAGA,IAAI1gB,SAASC,KAAK,SAAA+pB,GACjDttB,EAAKgxD,MAAMj+E,QAAQ,SAAAvW,GACf,IAAMi1F,EAAWj1F,EAAE80F,YAAYC,QAAUjkC,EAAMhrD,KAAK,SAAArF,GAAK,OAAAA,EAAEugC,KAAOhhC,EAAE80F,YAAYC,SAChF/0F,EAAE6uD,SAAWomC,GAAYA,EAASpmC,SAClC7uD,EAAEixF,WAAagE,GAAYA,EAAS/0F,2BArBpDk/B,EAAAC,iBAxEK80D,EAA2BviE,GALvCqI,EAAU,mBACPE,SAAU,sBACVkV,YAAa,mGAEhB3U,EAAO,eAAgB,6BAA8B,oBAAqB,oBAAqB,eAAgB,WACnGy5D,GAAb,GAAa17D,EAAA07D,4BAA2BA,EArBK,CAAA9C,EAAA54D,YAAA44D,EAAA54D,eAAd,CAAA6W,EAAA+hD,gBAAA/hD,EAAA+hD,mBAAhB,CAAAvgE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCJV,SAAUA,IAAS,SAAAwe,IAAgB,SAAA+hD,GAAcA,EAAA54D,YAAA44D,EAAA54D,cAE7C,oBAAAy8D,KACWA,EAAA3zF,UAAAiwB,UAAP,SAAiB1sB,GACb,OAAQA,GACJ,IAAK,UACL,KAAK,EACD,OAAO,EACX,QACI,OAAO,IAPjBowF,EAAmBtjE,GADxBC,EAAK,kBAAmB,kBACnBqjE,GAAN,GAF+B,CAAA5lD,EAAA+hD,gBAAA/hD,EAAA+hD,mBAAhB,CAAAvgE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCEV,SAAUA,IAAS,SAAAwe,IAAgB,SAAA+hD,IAAc,SAAA54D,GAC7C,IAAOU,EAAcrI,EAAS2H,UAAUU,aAGxC,oBAAAg8D,KACWA,EAAA5zF,UAAAiwB,UAAP,SAAiB4Q,GACb,OAAQA,GACJ,KAAKjJ,EAAYi8D,YACjB,IAAK,cACL,KAAK,EACD,MAAO,mBACX,KAAKj8D,EAAYk8D,UACjB,IAAK,YACL,KAAK,EACD,MAAO,cACX,KAAKl8D,EAAYm8D,QACjB,IAAK,UACL,KAAK,EACD,MAAO,UACX,KAAKn8D,EAAYo8D,KACjB,IAAK,OACL,KAAK,EACD,MAAO,QACX,KAAKp8D,EAAY6uC,IACjB,IAAK,MACL,KAAK,EACD,MAAO,aACX,IAAK,OACD,MAAO,WAGf,OAAO5lC,GA3BT+yD,EAA4BvjE,GADjCC,EAAK,kBAAmB,2BACnBsjE,GAAN,GAJ6C,CAAA9D,EAAA54D,YAAA44D,EAAA54D,eAAd,CAAA6W,EAAA+hD,gBAAA/hD,EAAA+hD,mBAAhB,CAAAvgE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCEV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAkmD,GAsB/B,IAAAC,EAAA,WAGI,SAAAA,EACcl6D,EACV45B,EACAnvB,EACUge,EACA0xC,EACAC,GALAnzF,KAAA+4B,SAGA/4B,KAAAwhD,SACAxhD,KAAAkzF,kBACAlzF,KAAAmzF,eAEVnzF,KAAK+mC,UAAY4rB,EAAa5rB,UAE9B/mC,KAAKozF,kBACLpzF,KAAKqzF,YAmBb,OAhBkBJ,EAAAl0F,UAAAq0F,gBAAd,yGAE0B,OADtBpzF,KAAK+4B,OAAO0lB,SAAU,EACtB7hB,EAAA58B,KAAK+4B,QAAiB,EAAM/4B,KAAKkzF,gBAAgB7uD,SAC7C7F,GAAIx+B,KAAK+mC,YACVzC,wBAFH1H,EAAY02D,QAAUvnD,EAAAlP,OAGtB78B,KAAK+4B,OAAO0lB,SAAU,YAGVw0C,EAAAl0F,UAAAs0F,UAAhB,yGACwB,OAApBz2D,EAAA58B,KAAK+4B,QAAe,EAAM/4B,KAAKmzF,aAAaI,mBACxC/0D,GAAIx+B,KAAK+mC,YACVzC,wBAFH1H,EAAY42D,MAAQznD,EAAAlP,OAGpB78B,KAAK+4B,OAAO06D,UAAYzzF,KAAK+4B,OAAOy6D,MAAM3wF,OACpC7C,KAAK+4B,OAAOy6D,MAAM,GAClB,eA/BDP,EAA4B7jE,GATxCmJ,EAAW,kBAAmB,gCAC9BL,EACG,SACA,eACA,YACA,SACA,kBACA,iBAES+6D,GAAb,GAAaD,EAAAC,6BAA4BA,EAtBV,CAAAnmD,EAAAkmD,cAAAlmD,EAAAkmD,iBAAhB,CAAA1kE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAAkmD,cAAAlmD,EAAAkmD,gBAK/BzkE,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,qBACA,SACIsmB,EACAC,GAEAA,EAAmBS,KACf,2BACA,qCAGJV,EACKpkB,MAAM,+BACHmlB,UAAU,EACV0P,gBAAgB,EAChB3zB,IAAK,2BACLuJ,MACIwpB,UAAW,gBAEf5O,OACI0sC,yBACIniD,YACI,wDACJnV,WAAY,mCAIvBuF,MAAM,qCACH60B,gBAAgB,EAChB3zB,IAAK,YACLuJ,MACI8b,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,eAExB9sC,OACIouC,uBACIv3C,SAAU,sCAIrBlc,MAAM,0CACH60B,gBAAgB,EAChB3zB,IAAK,uBACLuJ,MACI8b,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,cAAgB3tC,EAAGiyC,WAE3CpxC,OACIouC,uBACIv3C,SACI,gDAIflc,MAAM,6CACH60B,gBAAgB,EAChB3zB,IAAK,gBACLuJ,MACI8b,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,cAAgB3tC,EAAGkyC,mBAE3CrxC,OACIouC,uBACIv3C,SACI,yDAnEb,CAAA7qB,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCJV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAAkmD,cAAAlmD,EAAAkmD,gBAS/B,oBAAAY,KAAMA,EAA0BxkE,GAR/BqI,EAAU,mBACPE,SAAU,qBACVkV,YACI,iFACJe,UACI0lD,QAAS,QAGXM,GAAN,GATe,CAAAtlE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCGV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAkmD,GAQlBA,EAAAa,8BAAgC,IAAIv6D,GAAGG,SAiBpD,WAUI,SAAAq6D,EACYnhC,EACA3P,EACAkwC,EACAtsC,EACApjB,EACA6yC,GANZ,IAAAr1C,EAAAhhC,KACYA,KAAA2yD,eACA3yD,KAAAgjD,YACAhjD,KAAAkzF,kBACAlzF,KAAA4mD,sBACA5mD,KAAAwjC,YACAxjC,KAAAq2E,8BATJr2E,KAAAynC,KAAO,EAWXznC,KAAK+zF,0BAA4Bf,EAAAa,8BAC5Bx6E,OAAO,SAAAC,GAAK,QAAEA,IACd0gB,UAAU,SAAAnqB,GACPmxB,EAAKgzD,sBAIVF,EAAA/0F,UAAAqtC,QAAP,WACI,IAAMrF,EAAY/mC,KAAK2yD,aAAa5rB,UACpC/mC,KAAKi0F,iCAAmCzxF,OAAOi9B,KAAKmB,YAAY8yD,SAEhE1zF,KAAKk0F,YAAYntD,GACjB/mC,KAAKm0F,UAAUptD,GACf/mC,KAAKo0F,0BAEDp0F,KAAK2yD,aAAa0hC,aAClBr0F,KAAKg0F,oBACLh0F,KAAKwjC,UAAU7gC,aAIhBmxF,EAAA/0F,UAAA4tC,WAAP,WACQ3sC,KAAK+zF,2BAA2B/zF,KAAK+zF,0BAA0BnnD,WAGhEknD,EAAA/0F,UAAAq1F,wBAAP,eAAApzD,EAAAhhC,KACIA,KAAKwoF,aAEG9qF,KAAM,gBACN42F,SAAS,EACTpI,UAAW,SAAC9lD,GAAkB,OAAApF,EAAKuzD,aAAanuD,OAKrD0tD,EAAA/0F,UAAAi1F,kBAAP,WACIh0F,KAAKw0F,sBAAuB,GAGzBV,EAAA/0F,UAAA01F,mBAAP,WACIz0F,KAAKw0F,sBAAuB,GAGzBV,EAAA/0F,UAAA21F,cAAP,WACI10F,KAAKm0F,UAAUn0F,KAAKszF,QAAQ90D,GAAIx+B,KAAKynC,KAAO,IAGzCqsD,EAAA/0F,UAAA41F,qBAAP,WACS30F,KAAK2yD,aAAa5rB,WAEvB/mC,KAAKgjD,UAAUvhD,MACX03C,SAAU,qDACNn5C,KAAK2yD,aAAa5rB,UAAS,mCAE/Bud,YAAa,KACbC,qBAAqB,KAIrBuvC,EAAA/0F,UAAAw1F,aAAR,SAAqBnuD,GAArB,IAAApF,EAAAhhC,KACU+mC,EAAa/mC,KAAKszF,SAAWtzF,KAAKszF,QAAQ90D,IAAOx+B,KAAK2yD,aAAa5rB,UACpEA,GAAcX,GAAQA,EAAIi+B,SAE/BrkE,KAAKgjD,UACAvhD,MACG03C,SAAU,6CAA6CpS,EAAS,aAAaX,EAAI5H,GAAE,aAC/E4H,EAAIi+B,QAAQ7lC,GAAE,mBACCx+B,KAAKq2E,4BAA4BnS,yBAAwB,2BAC5E5f,YAAa,KACbC,qBAAqB,IAExBhgB,KAAK,WACFvD,EAAKyzD,qBACLzzD,EAAKmzD,UAAUptD,MAIb+sD,EAAA/0F,UAAAm1F,YAAd,SAA0BntD,iGACtB,OAAKA,GAELnK,EAAA58B,MAAe,EAAMA,KAAKkzF,gBAAgB7uD,SAAU7F,GAAIuI,IAAazC,YAFrD,iBAEhB1H,EAAK02D,QAAUvnD,EAAAlP,iBAGLi3D,EAAA/0F,UAAAo1F,UAAd,SAAwBptD,EAAwBU,EAAUpC,eAAV,IAAAoC,MAAA,QAAU,IAAApC,MAAA,2FACtD,OAAK0B,GAEL/mC,KAAKy+C,SAAU,EACfz+C,KAAKynC,KAAOA,GAEE,EAAMznC,KAAK4mD,oBAAoBguC,gBACzCp2D,GAAIuI,EACJU,KAAIA,EACJpC,SAAQA,IACTf,YATa,iBAKV8b,EAAQxjB,EAAAC,OAKE78B,KAAKogD,MAAR,IAAT3Y,EAAyB2Y,GAGrB3Y,KAAIA,EACJpC,SAAQA,EACRx/B,MAAW7F,KAAKogD,MAAMv6C,MAAKqiB,OAAKk4B,EAAMv6C,OACtCqgC,MAAOka,EAAMla,OAIrBlmC,KAAKy+C,SAAU,YA1HjBq1C,EAA0B1kE,GAf/BqI,EAAU,mBACPE,SAAU,qBACVkV,YAAa,6FACbe,UACI3Q,MAAO,OAGd/E,EACG,eACA,YACA,kBACA,sBACA,YACA,gCAEE47D,GAAN,GAzB+B,CAAAhnD,EAAAkmD,cAAAlmD,EAAAkmD,iBAAhB,CAAA1kE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCDV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAkmD,GAI/B,IAAOa,EAAgCvlE,EAASwe,gBAAgBkmD,YAAYa,+BAY5E,WAII,SAAAgB,EACYliC,EACA3P,EACAxB,GAFAxhD,KAAA2yD,eACA3yD,KAAAgjD,YACAhjD,KAAAwhD,SAGLqzC,EAAA91F,UAAAqtC,QAAP,WACIpsC,KAAKkvF,aACLlvF,KAAK80F,iBAGFD,EAAA91F,UAAAw1F,aAAP,WACSv0F,KAAK2yD,aAAa5rB,YAEU,2CAA7B/mC,KAAKwhD,OAAOyU,QAAQv4D,KACpBm2F,EAA8B35D,QAAO,GAErCl6B,KAAKwhD,OAAOib,GAAG,0CACX11B,UAAW/mC,KAAK2yD,aAAa5rB,UAC7BstD,YAAY,MAIjBQ,EAAA91F,UAAA41F,qBAAP,WACS30F,KAAK2yD,aAAa5rB,WAEvB/mC,KAAKgjD,UAAUvhD,MACX03C,SAAU,qDACNn5C,KAAK2yD,aAAa5rB,UAAS,mCAE/Bud,YAAa,KACbC,qBAAqB,KAIrBswC,EAAA91F,UAAA+1F,cAAR,eAAA9zD,EAAAhhC,KACIA,KAAK4uF,UAEGzM,QAAS,oBACT4S,MAAO,sBACPC,KAAM,oBACNC,MAAO,UACPh1F,KAAM,YACN+uC,OAAQ,WAAM,OAAAhO,EAAK2zD,0BAGnBxS,QAAS,cACT4S,MAAO,gBACPC,KAAM,aACNC,MAAO,aACPh1F,KAAM,YACN+uC,OAAQ,WAAM,OAAAhO,EAAKuzD,mBAKvBM,EAAA91F,UAAAmwF,WAAR,WACIlvF,KAAKmvF,QAEA3sF,OAAOi9B,KAAKmB,YAAYwuD,eAEzB5sF,OAAOi9B,KAAKmB,YAAY8yD,UACxB1zF,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,WAAY,2CAE3CtvF,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,WAAY,sCAEnC9sF,OAAOi9B,KAAKmB,YAAY+yD,kBACxB3zF,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,eAAgB,gDAG3CuF,EAAA91F,UAAAuwF,UAAR,SAAkBzvF,EAAeo9B,GAC7B,OACIp9B,MAAKA,EACLo9B,MAAKA,IAIL43D,EAAA91F,UAAAwwF,OAAR,SAAeC,GACXxvF,KAAKmvF,KAAKl2E,KAAKu2E,IAlFjBqF,EAAwBzlE,GAV7B8I,EAAO,eAAgB,YAAa,UACpCT,EAAU,mBACPE,SAAU,mBACVwhB,SAAU,0OAOR07C,GAAN,GAhB+B,CAAA/nD,EAAAkmD,cAAAlmD,EAAAkmD,iBAAhB,CAAA1kE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCCV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAAkmD,cAAAlmD,EAAAkmD,gBAe/B,WAMI,SAAAkC,EACYviC,EACAugC,EACAiC,GAFAn1F,KAAA2yD,eACA3yD,KAAAkzF,kBACAlzF,KAAAm1F,uBALJn1F,KAAAynC,KAAO,EAQRytD,EAAAn2F,UAAAqtC,QAAP,WACI,IAAMrF,EAAY/mC,KAAK2yD,aAAa5rB,UAEpC/mC,KAAKk0F,YAAYntD,GACjB/mC,KAAKo1F,qBAGFF,EAAAn2F,UAAAg2E,SAAP,WACI/0E,KAAKo1F,kBAAkBp1F,KAAKynC,KAAO,IAGzBytD,EAAAn2F,UAAAm1F,YAAd,SAA0BntD,iGACtB,OAAKA,GAELnK,EAAA58B,MAAe,EAAMA,KAAKkzF,gBAAgB7uD,SAAU7F,GAAIuI,IACnDzC,YAHW,iBAEhB1H,EAAK02D,QAAUvnD,EAAAlP,iBAILq4D,EAAAn2F,UAAAq2F,kBAAd,SACI3tD,EACApC,eADA,IAAAoC,MAAA,QACA,IAAApC,MAAA,6FAGA,QADM0B,EAAY/mC,KAAK2yD,aAAa5rB,YAClB/mC,KAAKq1F,sBAAsB,IAE7Cr1F,KAAKq1F,sBAAuB,EAC5Br1F,KAAKynC,KAAOA,GACU,EAAMznC,KAAKm1F,qBAAqBG,aAClD92D,GAAIuI,EACJU,KAAIA,EACJpC,SAAQA,IACTf,yBAJGixD,EAAgB34D,EAAAC,UAMlB78B,KAAKu1F,cACQ,IAAT9tD,EACM8tD,EACDt6D,KACQj7B,KAAKu1F,eACR9tD,KAAIA,EACJ5hC,MAAO7F,KAAKu1F,cAAc1vF,MAAMqiB,OAC5BqtE,EAAc1vF,UAIpC7F,KAAKq1F,sBAAuB,YAxD9BH,EAA6B9lE,GATlCqI,EAAU,mBACPE,SAAU,wBACVkV,YACI,sGACJe,UACI3Q,MAAO,OAGd/E,EAAO,eAAgB,kBAAmB,yBACrCg9D,GAAN,GAfe,CAAA5mE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCCV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAAkmD,cAAAlmD,EAAAkmD,gBAY/B,WAOI,SAAAwC,EACY7iC,EACAugC,EACAC,GAFAnzF,KAAA2yD,eACA3yD,KAAAkzF,kBACAlzF,KAAAmzF,eAGLqC,EAAAz2F,UAAAqtC,QAAP,WACIpsC,KAAKy1F,aAAc,IAAIh5D,MAAOmX,cAC9B5zC,KAAK+mC,UAAY/mC,KAAK2yD,aAAa5rB,UAEnC/mC,KAAKk0F,cACLl0F,KAAKqzF,aAGKmC,EAAAz2F,UAAAm1F,YAAd,yGACmB,OAAft3D,EAAA58B,MAAe,EAAMA,KAAKkzF,gBAAgB7uD,SACtC7F,GAAIx+B,KAAK+mC,YACVzC,wBAFH1H,EAAK02D,QAAUvnD,EAAAlP,iBAKL24D,EAAAz2F,UAAAs0F,UAAd,yGAEiB,OADbrzF,KAAK01F,cAAe,EACpB94D,EAAA58B,MAAa,EAAMA,KAAKmzF,aAAaI,mBACjC/0D,GAAIx+B,KAAK+mC,YACVzC,wBAFH1H,EAAK42D,MAAQznD,EAAAlP,OAGb78B,KAAK01F,cAAe,YAhCtBF,EAAqBpmE,GAN1BqI,EAAU,mBACPE,SAAU,gBACVkV,YACI,gFAEP3U,EAAO,eAAgB,kBAAmB,iBACrCs9D,GAAN,GAZe,CAAAlnE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCDV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAG/B,IAAAu0B,EAAA,WACI,SAAAA,EACYC,EACAC,GADA71F,KAAA41F,kBACA51F,KAAA61F,oBAyBhB,OAtBWF,EAAA52F,UAAAm9B,KAAP,SAAYmwB,GAAZ,IAAArrB,EAAAhhC,KACIA,KAAKihC,MAAO3+B,KAAM,kCAAmC+pD,SAAQA,IAE7DrsD,KAAK41F,gBACAjnB,eAAgBnwC,GAAI6tB,IACpB/nB,SAASC,KAAK,SAAAuxD,GACX90D,EAAKC,MACD3+B,KAAM,iCACNwzF,QAAOA,MAGd9rD,MAAM,SAAA3oC,GACH,OAAA2/B,EAAKC,MACD3+B,KAAM,oCACNiO,MAAOlP,OAKfs0F,EAAA52F,UAAAkiC,KAAR,SAAa5/B,GACTrB,KAAK61F,kBAAkBn7D,OAAOR,OAAO74B,IA1BhCs0F,EAA8BvmE,GAF1C2I,EAAQ,kBAAmB,kCAC3BG,EAAO,kBAAmB,sBACdy9D,GAAb,GAAav0B,EAAAu0B,+BAA8BA,EAHZ,CAAA7oD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAG/B,IAAA20B,EAAA,WACI,SAAAA,EACYC,EACAH,GAFZ,IAAA70D,EAAAhhC,KACYA,KAAAg2F,mBACAh2F,KAAA61F,oBASR71F,KAAK61F,kBAAkB58D,OAClBtqB,IARc,SAAC2K,GAChB,OAAAA,GACAA,EAAE28E,UACF38E,EAAE28E,SAASh1C,QACX3nC,EAAE28E,SAASh1C,OAAOqN,OACZh1C,EAAE28E,SAASh1C,OAAOqN,MAAOqS,WAI9BznC,uBACAc,UAAU,SAAA2wC,GACW,MAAdA,EACA3pC,EAAK9E,KAAKyuC,GAEV3pC,EAAKzsB,WAiCzB,OA7BWwhF,EAAAh3F,UAAAwV,OAAP,WACIvU,KAAKihC,MACD3+B,KAAM,kCACNq+D,SAAU,QAIXo1B,EAAAh3F,UAAAm9B,KAAP,SAAYsC,GAAZ,IAAAwC,EAAAhhC,KACIA,KAAKihC,MAAO3+B,KAAM,mCAAoCk8B,GAAEA,IAExDx+B,KAAKg2F,iBACAnnB,aAAcrwC,GAAEA,IAChB8F,SAASC,KAAK,SAAAo8B,GACX3/B,EAAKC,MACD3+B,KAAM,kCACNq+D,SAAQA,MAGf32B,MAAM,SAAA3oC,GACH,OAAA2/B,EAAKC,MACD3+B,KAAM,qCACNiO,MAAOlP,OAKf00F,EAAAh3F,UAAAkiC,KAAR,SAAa5/B,GACTrB,KAAK61F,kBAAkBn7D,OAAOR,OAAO74B,IAlDhC00F,EAA+B3mE,GAF3C2I,EAAQ,kBAAmB,mCAC3BG,EAAO,mBAAoB,sBACf69D,GAAb,GAAa30B,EAAA20B,gCAA+BA,EAHb,CAAAjpD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAC/B,IAAOlrC,EAAY5H,EAAAiD,QAAQ0E,UAAUC,UAIrCggE,EAAA,WACI,SAAAA,EACY1rC,EACA2rC,EACAN,EACA1E,EACAiF,GAJAp2F,KAAAwqD,iBACAxqD,KAAAm2F,sBACAn2F,KAAA61F,oBACA71F,KAAAmxF,YACAnxF,KAAAo2F,6BAyLhB,OAtLWF,EAAAn3F,UAAAm9B,KAAP,SAAYsC,GAAZ,IAAAwC,EAAAhhC,KACIA,KAAKihC,MAAO3+B,KAAM,iCAAkCk8B,GAAEA,IAEtD,IAAM4I,EAAUpnC,KAAKwqD,eAAenmB,SAAU7F,GAAEA,IAAI8F,SAqBpD,OAnBA8C,EACK7C,KAAK,SAAA0c,GACFjgB,EAAKq1D,iEAAiEp1C,GACtEjgB,EAAKs1D,8CAA8Cr1C,GACnDjgB,EAAKC,MACD3+B,KAAM,gCACN2+C,OAAMA,MAGbjX,MAAM,SAAA3oC,GACH,OAAA2/B,EAAKC,MACD3+B,KAAM,mCACNiO,MAAOlP,MAInBrB,KAAKu2F,yBAAyB/3D,GAC9Bx+B,KAAKw2F,wBAAwBh4D,GAEtB4I,GAGH8uD,EAAAn3F,UAAAy3F,wBAAR,SAAgCC,GAAhC,IAAAz1D,EAAAhhC,KACIA,KAAKo2F,2BAA2Br9C,eAAeC,WAAY,SAAUC,SAAUw9C,IAAWnyD,SACrFC,KAAK,SAAAmD,GACF,OAAA1G,EAAKC,MACD3+B,KAAM,mDACNo0F,kBAAmBhvD,GAAwB,IAAhBA,EAAK7kC,WAEtCmnC,MAAM,SAAA2sD,GAAO,OAAA/pE,QAAQurB,IAAIw+C,MAG3BT,EAAAn3F,UAAAw3F,yBAAR,SAAiC/3D,GAAjC,IAAAwC,EAAAhhC,KACIA,KAAKwqD,eAAenS,mBAAoB7Z,GAAEA,IAAI8F,SAASC,KAAK,SAACm4B,GACzD17B,EAAKC,MACD3+B,KAAM,8CACNs0F,OAAQl6B,OAKbw5B,EAAAn3F,UAAAouD,OAAP,SAAc3uB,GACVx+B,KAAKihC,MAAO3+B,KAAM,kCAAmCk8B,GAAIA,KAGtD03D,EAAAn3F,UAAA0V,OAAP,SAAcolE,GAAd,IAAA74C,EAAAhhC,KACIA,KAAKihC,MAAO3+B,KAAM,oCAIlBu3E,EAAMrP,eAAeqsB,UAAYhd,EAAMrP,eAAeqsB,UAAUx9E,OAAO,SAAAC,GAAK,OADrD,SAAAA,GAAK,MAAW,KAAXA,EAAEw9E,MAAiC,IAAlBx9E,EAAEy9E,YAC8BC,CAAe19E,KAI5FugE,EAAMrP,eAAe0jB,aAAerU,EAAMrP,eAAe0jB,aAAa70E,OAAO,SAAAC,GAAK,OAD3D,SAAAA,GAAK,MAAa,KAAbA,EAAElU,QAAgC,KAAfkU,EAAE29E,SACkCC,CAAe59E,KAElG,IAAM8tB,EAAUpnC,KAAKwqD,eAAe/1C,OAAOolE,GAAOv1C,SAkBlD,OAhBA8C,EACK7C,KAAK,SAAA0c,GACFjgB,EAAKq1D,iEAAiEp1C,GACtEjgB,EAAKs1D,8CAA8Cr1C,GACnDjgB,EAAKC,MACD3+B,KAAM,iCACN2+C,OAAMA,MAGbjX,MAAM,SAAA3oC,GACH,OAAA2/B,EAAKC,MACD3+B,KAAM,qCACNiO,MAAOlP,MAIZ+lC,GAGJ8uD,EAAAn3F,UAAAo4F,sBAAP,SAA6Btd,GAA7B,IAAA74C,EAAAhhC,KACIA,KAAKihC,MAAO3+B,KAAM,oCAElB,IAAM8kC,EAAUpnC,KAAKm2F,oBAAoB1hF,OAAOolE,GAAOv1C,SAkBvD,OAhBA8C,EACK7C,KAAK,SAAA0c,GACFjgB,EAAKq1D,iEAAiEp1C,GACtEjgB,EAAKs1D,8CAA8Cr1C,GACnDjgB,EAAKC,MACD3+B,KAAM,iCACN2+C,OAAMA,MAGbjX,MAAM,SAAA3oC,GACH,OAAA2/B,EAAKC,MACD3+B,KAAM,qCACNiO,MAAOlP,MAIZ+lC,GAGJ8uD,EAAAn3F,UAAAq4F,kBAAP,WACI,IAAMn6D,EAAQj9B,KAAK61F,kBAAkBn8D,WACrC,OAAOuD,GAASA,EAAMg5D,UAAYh5D,EAAMg5D,SAASh1C,QAO9Ci1C,EAAAn3F,UAAAs3F,iEAAP,SAAwEp1C,GAC/DA,EAAOupB,iBAEPvpB,EAAOupB,eAAe0jB,aAAarrF,QACpCo+C,EAAOupB,eAAe0jB,aAAaj1E,MAC/B3W,KAAM4zB,EAAU6rC,QAChB38D,OAAQ,GACR6xF,SAAU,GACV1wD,YAAa,aACb8wD,WAAY,KAG8B,IAA9Cp2C,EAAOupB,eAAe0jB,aAAarrF,QACnCo+C,EAAOupB,eAAe0jB,aAAaj1E,MAC/B3W,KAAM4zB,EAAU6rC,QAChB38D,OAAQ,GACR6xF,SAAU,GACV1wD,YAAa,aACb8wD,WAAY,KAGfp2C,EAAOupB,eAAeC,eAAe5nE,QACtCo+C,EAAOupB,eAAeC,eAAexxD,MACjCsxD,MAAO,GACPhkC,YAAa,cACb+wD,WAAYhpE,EAAAqB,uBAAuB4nE,OAItCt2C,EAAOupB,eAAeqsB,WACtB51C,EAAOupB,eAAeqsB,UAAUx9E,OAC7B,SAAAC,GAAK,OAAAA,EAAEhX,OAASgsB,EAASiD,QAAQG,YAAYg9C,QAAgC,WAAtBp1D,EAAEhX,KAAKuC,aAChEhC,SAEFo+C,EAAOupB,eAAeqsB,UACf51C,EAAOupB,eAAeqsB,UAAS3uE,SAE9BsvE,YAAa,GACbV,KAAM,GACNW,QAAS,GACTC,gBAAiB,GACjBX,YAAa,EACbY,qBAAsB,GACtBC,OAAQ,GACRt1F,KAAMgsB,EAASiD,QAAQG,YAAYg9C,OACnCmpB,QAAS,GACTr5D,GAAIx+B,KAAKmxF,UACT2G,MAAO,GACP79E,YAAY,QAKrBi8E,EAAAn3F,UAAAopC,OAAP,SAAckkB,GACV,OAAOrsD,KAAKwqD,eAAeriB,QAAS3J,GAAI6tB,IAAY/nB,UAGhD4xD,EAAAn3F,UAAAu3F,8CAAR,SAAsDr1C,GAClD,IAAsB,IAAA7oB,EAAA,EAAAwE,EAAAqkB,EAAOupB,eAAeqsB,UAAtBz+D,EAAAwE,EAAA/5B,OAAAu1B,IAAiC,CAAlD,IAAM2/D,EAAOn7D,EAAAxE,GACkB,SAA5B2/D,EAAQz1F,KAAKuC,aAAuBkzF,EAAQz1F,KAAOgsB,EAASiD,QAAQG,YAAY+8C,MACpD,WAA5BspB,EAAQz1F,KAAKuC,aAAyBkzF,EAAQz1F,KAAOgsB,EAASiD,QAAQG,YAAYg9C,UAItFwnB,EAAAn3F,UAAAkiC,KAAR,SAAa5/B,GACTrB,KAAK61F,kBAAkBn7D,OAAOR,OAAO74B,IA7LhC60F,EAA6B9mE,GAFzC2I,EAAQ,kBAAmB,iCAC3BG,EAAO,iBAAkB,sBAAuB,oBAAqB,YAAa,+BACtEg+D,GAAb,GAAa90B,EAAA80B,8BAA6BA,EALX,CAAAppD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCEV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAC/B,IAKiB42B,EAkCAC,EA+DAC,EA8BAC,EA8BAC,EA8DAC,EAkCAh3B,EAuEAi3B,EAkFAvnE,EA3ZVa,EAActD,EAAAiD,QAAQK,aAK7B,SAAiBomE,GA0BGA,EAAA5kF,IAAhB,SAAoBlU,EAAsB8/C,GACtC,OAAA/jB,KACO/7B,GACHq5F,QAASv5C,KA7BrB,CAAiBg5C,EAAA52B,EAAA42B,UAAA52B,EAAA42B,aAkCjB,SAAiBC,GAuDGA,EAAA7kF,IAAhB,SAAoBlU,EAAsB8/C,GACtC,OAAA/jB,KACO/7B,GACH+2F,SAAUj3C,KA1DtB,CAAiBi5C,EAAA72B,EAAA62B,WAAA72B,EAAA62B,cA+DjB,SAAiBC,GAsBGA,EAAA9kF,IAAhB,SAAoBlU,EAAsB8/C,GACtC,OAAA/jB,KACO/7B,GACHs5F,YAAax5C,KAzBzB,CAAiBk5C,EAAA92B,EAAA82B,eAAA92B,EAAA82B,kBA8BjB,SAAiBC,GAsBGA,EAAA/kF,IAAhB,SAAoBlU,EAAsB8/C,GACtC,OAAA/jB,KACO/7B,GACHu5F,aAAcz5C,KAzB1B,CAAiBm5C,EAAA/2B,EAAA+2B,gBAAA/2B,EAAA+2B,mBA8BjB,SAAiBC,GAsDGA,EAAAhlF,IAAhB,SAAoBlU,EAAsB8/C,GACtC,OAAA/jB,KACO/7B,GACHw5F,aAAc15C,KAzD1B,CAAiBo5C,EAAAh3B,EAAAg3B,YAAAh3B,EAAAg3B,eA8DjB,SAAiBC,GA0BGA,EAAAjlF,IAAhB,SAAoBlU,EAAsB8/C,GACtC,OAAA/jB,KACO/7B,GACHy5F,iBAAkB35C,KA7B9B,CAAiBq5C,EAAAj3B,EAAAi3B,gBAAAj3B,EAAAi3B,mBAkCjB,SAAiBh3B,GA+DGA,EAAAjuD,IAAhB,SAAoBlU,EAAsB8/C,GACtC,OAAA/jB,KACO/7B,GACH05F,aAAc55C,KAlE1B,CAAiBqiB,EAAAD,EAAAC,aAAAD,EAAAC,gBAuEjB,SAAiBi3B,GAmDGA,EAAAllF,IAAhB,SAAoBlU,EAAsB8/C,GACtC,OAAA/jB,KACO/7B,GACH25F,SAAU75C,KAIFs5C,EAAAQ,uBAAhB,SACIC,EACAC,GAEA,OAAKD,GAEAC,IAAWA,OAUZvxD,KAAMsxD,EAAMtxD,KACZ5hC,MAAOkzF,EAAMlzF,MAAM8I,IAAI,SAAAa,GAAK,OAAAyrB,KAAMzrB,GAAGypF,YATtB,SAACC,EAA0CF,GAC1D,IAAM/f,EAAW+f,EAAU11F,KAAK,SAAA9F,GAAK,OAAAA,EAAEghC,IAAM06D,EAAKlgB,aAClD,OAAIC,EAAiBA,EAASue,YAEvB,GAK2C2B,CAAW3pF,EAAGwpF,OAChE3zD,SAAU0zD,EAAM1zD,SAChBa,MAAO6yD,EAAM7yD,QAfE,MA9D3B,CAAiBoyD,EAAAl3B,EAAAk3B,QAAAl3B,EAAAk3B,WAkFjB,SAAiBvnE,GAuBGA,EAAA3d,IAAhB,SAAoBlU,EAAsB8/C,GACtC,OAAA/jB,KACO/7B,GACHk6F,iBAAkBp6C,KA1B9B,CAAiBjuB,EAAAqwC,EAAArwC,gBAAAqwC,EAAArwC,mBAylBJqwC,EAAAy0B,kBAAuCvnE,EAAAqM,UAAUhsB,IAC1D2f,EAAAsL,KAAwB,gBAvf5B,SAAgBv4B,GACZ,OAAQA,EAAEiB,MACN,IAAK,iCACD,OAAO,SAAApD,GAAK,OAAA+7B,KACL/7B,GACHs/B,GAAIn9B,EAAEm9B,GACNy3D,UACIx3C,SAAS,EACT0B,UAAU,EACVc,OAAQ,KACR21C,OAAQ,KACR57D,UAAW,KACX07D,mBAAmB,GAEvBgC,aAAc,KACdG,SAAU,KACVF,iBAAkB,KAClBC,cACIn6C,SAAS,EACT2B,MAAO,KACP44B,WAAY,KACZzoE,MAAO,KACP+0B,SACI+zD,sBACIn6F,GACAA,EAAE05F,cACF15F,EAAE05F,aAAatzD,SACfpmC,EAAE05F,aAAatzD,QAAQ+zD,sBAC3Bz5D,OAAQ1gC,GAAKA,EAAE05F,cAAgB15F,EAAE05F,aAAatzD,SAAWpmC,EAAE05F,aAAatzD,QAAQ1F,OAChF05D,aACIp6F,GAAKA,EAAE05F,cAAgB15F,EAAE05F,aAAatzD,SAAWpmC,EAAE05F,aAAatzD,QAAQg0D,aAC5EC,SAAUr6F,GAAKA,EAAE05F,cAAgB15F,EAAE05F,aAAatzD,SAAWpmC,EAAE05F,aAAatzD,QAAQi0D,SAClFC,iBAAkB,GAClBxgB,WAAY,KACZxwC,MAAO,GACPixD,mBAAoB,KACpBC,cAAe,KACfx3B,QAAShjE,GAAKA,EAAE05F,cAAgB15F,EAAE05F,aAAatzD,SAAWpmC,EAAE05F,aAAatzD,QAAQ48B,UAGzFy3B,0BACI73B,oBAAqBlwC,EAAYmwC,QACjCuC,YAAa,KACbd,YAAa,KACbkB,oBAAqB,KACrBE,2BAA4B,KAC5BL,iBAAkB,KAClBq1B,cAAe,KACfpxD,MAAO,GACPuuB,aACA8iC,QAAS,KACTC,QAAS,KACTC,wBAAyB,KACzBC,qBAAsB,KACtB/0B,gBAAiB,MAErBm0B,iBAAkB,QAG1B,IAAK,gCACD,OAAO,SAAAl6F,GACH,OAAA+4F,EAAS7kF,IAAIlU,GACTu/C,SAAS,EACT0B,SAAUjhD,EAAE+2F,SAAS91C,SACrBc,OAAQ5/C,EAAE4/C,OACV21C,OAAQ13F,EAAE+2F,SAASW,OACnB57D,UAAW,KACX07D,kBAAmBx3F,EAAE+2F,SAASS,qBAG1C,IAAK,kCACD,OAAO,SAAAx3F,GAAK,OAAAA,GAEhB,IAAK,mCAED,OADA0tB,QAAQrc,MAAMlP,EAAEiB,KAAMjB,EAAEkP,OACjB,SAAArR,GACH,OAAA+4F,EAAS7kF,IAAIlU,GACTu/C,SAAS,EACT0B,SAAUjhD,EAAE+2F,SAAS91C,SACrBc,OAAQ/hD,EAAE+2F,SAASh1C,OACnB21C,OAAQ13F,EAAE+2F,SAASW,OACnB57D,UAAW35B,EAAEkP,MACbmmF,kBAAmBx3F,EAAE+2F,SAASS,qBAG1C,IAAK,kCACD,OAAO,SAAAx3F,GACH,OAAA+4F,EAAS7kF,IAAIlU,GACTu/C,QAASv/C,EAAE+2F,SAASx3C,QACpB0B,UAAU,EACVc,OAAQ/hD,EAAE+2F,SAASh1C,OACnB21C,OAAQ13F,EAAE+2F,SAASW,OACnB57D,UAAW97B,EAAE+2F,SAASj7D,UACtB07D,kBAAmBx3F,EAAE+2F,SAASS,qBAG1C,IAAK,iCACD,OAAO,SAAAx3F,GACH,OAAA+4F,EAAS7kF,IAAIlU,GACTu/C,QAASv/C,EAAE+2F,SAASx3C,QACpB0B,UAAU,EACVc,OAAQ5/C,EAAE4/C,OACV21C,OAAQ13F,EAAE+2F,SAASW,OACnB57D,UAAW97B,EAAE+2F,SAASj7D,UACtB07D,kBAAmBx3F,EAAE+2F,SAASS,qBAG1C,IAAK,qCAED,OADA9pE,QAAQrc,MAAMlP,EAAEiB,KAAMjB,EAAEkP,OACjB,SAAArR,GACH,OAAA+4F,EAAS7kF,IAAIlU,GACTu/C,QAASv/C,EAAE+2F,SAASx3C,QACpB0B,UAAU,EACVc,OAAQ/hD,EAAE+2F,SAASh1C,OACnB21C,OAAQ13F,EAAE+2F,SAASW,OACnB57D,UAAW35B,EAAEkP,MACbmmF,kBAAmBx3F,EAAE+2F,SAASS,qBAG1C,IAAK,8CACD,OAAO,SAAAx3F,GACH,OAAA+4F,EAAS7kF,IAAIlU,GACTu/C,QAASv/C,EAAE+2F,SAASx3C,QACpB0B,SAAUjhD,EAAE+2F,SAAS91C,SACrBc,OAAQ/hD,EAAE+2F,SAASh1C,OACnB21C,OAAQv1F,EAAEu1F,OACV57D,UAAW97B,EAAE+2F,SAASj7D,UACtB07D,kBAAmBx3F,EAAE+2F,SAASS,qBAG1C,IAAK,mDACD,OAAO,SAAAx3F,GACH,OAAA+4F,EAAS7kF,IAAIlU,GACTu/C,QAASv/C,EAAE+2F,SAASx3C,QACpB0B,SAAUjhD,EAAE+2F,SAAS91C,SACrBc,OAAQ/hD,EAAE+2F,SAASh1C,OACnB21C,OAAQ13F,EAAE+2F,SAASW,OACnB57D,UAAW97B,EAAE+2F,SAASj7D,UACtB07D,kBAAmBr1F,EAAEq1F,qBAGjC,IAAK,oCACD,OAAO,SAAAx3F,GACH,OAAAk5F,EAAUhlF,IAAIlU,EAAC+7B,KACR/7B,EAAEw5F,cACLj6C,SAAS,EACTluC,MAAO,KACPyoF,UAAW95F,EAAEw5F,cAAgBx5F,EAAEw5F,aAAaM,UAC5CiB,iBAAkB,KAClBC,mBAAoB,SAGhC,IAAK,mCACD,OAAO,SAAAh7F,GACH,OAAAk5F,EAAUhlF,IAAIlU,EAAC+7B,KACR/7B,EAAEw5F,cACLj6C,SAAS,EACTluC,MAAO,KACPyoF,UAAW33F,EAAE23F,UACbiB,iBAAkB,SAG9B,IAAK,oCACD,OAAO,SAAA/6F,GACH,OAAAg5F,EAAa9kF,IAAIlU,EAAC+7B,KACX/7B,EAAEs5F,aACL/5C,SAAS,EACTzjB,UAAW35B,EAAEkP,UAGzB,IAAK,iCACD,OAAO,SAAArR,GACH,OAAAg5F,EAAa9kF,IAAIlU,EAAC+7B,KACX/7B,EAAEs5F,aACL1C,QAASz0F,EAAEy0F,QACXr3C,SAAS,EACTzjB,UAAW,SAGvB,IAAK,kCACD,OAAO,SAAA97B,GACH,OAAAg5F,EAAa9kF,IAAIlU,EAAC+7B,KACX/7B,EAAEs5F,aACL1C,QAAS,KACTr3C,SAAS,EACTzjB,UAAW,SAGvB,IAAK,qCACD,OAAO,SAAA97B,GACH,OAAAi5F,EAAc/kF,IAAIlU,EAAC+7B,KACZ/7B,EAAEu5F,cACLh6C,SAAS,EACTzjB,UAAW35B,EAAEkP,UAGzB,IAAK,kCACD,OAAO,SAAArR,GACH,OAAAi5F,EAAc/kF,IAAIlU,EAAC+7B,KACX/7B,GAAKA,EAAEu5F,cACX93B,SAAUt/D,EAAEs/D,SACZliB,SAAS,EACTzjB,UAAW,SAGvB,IAAK,mCACD,OAAO,SAAA97B,GACH,OAAAi5F,EAAc/kF,IAAIlU,EAAC+7B,KACZ/7B,EAAEu5F,cACL93B,SAAU,KACVliB,SAAS,EACTzjB,UAAW,SAGvB,IAAK,sCACD,OAAO,SAAA97B,GACH,OAAAk5F,EAAUhlF,IAAIlU,EAAC+7B,KACR/7B,EAAEw5F,cACLj6C,SAAS,EACTluC,MAAOlP,EAAEkP,MACTyoF,UAAW,KACXiB,iBAAkB,SAG9B,IAAK,sCACD,OAAO,SAAA/6F,GACH,OAAAk5F,EAAUhlF,IAAIlU,EAAC+7B,KACR/7B,EAAEw5F,cACLj6C,SAAS,EACTw7C,iBAAkB,SAG9B,IAAK,qCACD,OAAO,SAAA/6F,GACH,OAAAk5F,EAAUhlF,IAAIlU,EAAC+7B,KACR/7B,EAAEw5F,cACLj6C,SAAS,EACTw7C,iBAAkB54F,EAAE43E,aAGhC,IAAK,wCACD,OAAO,SAAA/5E,GACH,OAAAk5F,EAAUhlF,IAAIlU,EAAC+7B,KACR/7B,EAAEw5F,cACLj6C,SAAS,EACTw7C,iBAAkB,KAClB1pF,MAAOlP,EAAEkP,UAGrB,IAAK,qCACD,OAAO,SAAArR,GACH,OAAAk5F,EAAUhlF,IAAIlU,EAAC+7B,KACR/7B,EAAEw5F,cACLyB,YAAa94F,EAAE84F,gBAG3B,IAAK,4CACD,OAAO,SAAAj7F,GACH,OAAAk5F,EAAUhlF,IAAIlU,EAAC+7B,KACR/7B,EAAEw5F,cACLwB,mBAAoB74F,EAAE64F,uBAGlC,IAAK,wCACD,OAAO,SAAAh7F,GACH,OAAAm5F,EAAcjlF,IAAIlU,GACdu/C,SAAS,EACTluC,MAAO,KACPglF,cAAer2F,EAAEy5F,kBAAoBz5F,EAAEy5F,iBAAiBpD,cACxDvc,WAAY33E,EAAE23E,cAG1B,IAAK,uCACD,OAAO,SAAA95E,GACH,OAAAm5F,EAAcjlF,IAAIlU,GACdu/C,SAAS,EACTluC,MAAO,KACPglF,cAAel0F,EAAEk0F,cACjBvc,WAAY33E,EAAE23E,cAG1B,IAAK,0CACD,OAAO,SAAA95E,GACH,OAAAm5F,EAAcjlF,IAAIlU,GACdu/C,SAAS,EACTluC,MAAOlP,EAAEkP,MACTglF,cAAe,KACfvc,WAAY,QAGxB,IAAK,mCACD,OAAO,SAAA95E,GACH,OAAAmiE,EAAWjuD,IAAIlU,EAAC+7B,KACT/7B,EAAE05F,cACLtzD,QAAOrK,KACC/7B,EAAE05F,cAAgB15F,EAAE05F,aAAatzD,SAEzCmZ,SAAS,EACT2B,MAAO,KACP44B,WAAY,KACZzoE,MAAO,SAGnB,IAAK,qCACD,OAAO,SAAArR,GACH,OAAAmiE,EAAWjuD,IAAIlU,EAAC+7B,KACT/7B,EAAE05F,cACLtzD,QAAOrK,KACC/7B,EAAE05F,cAAgB15F,EAAE05F,aAAatzD,QAClCjkC,EAAEikC,SAETmZ,SAAS,EACTu6B,WAAY,KACZzoE,MAAO,SAGnB,IAAK,oCACD,OAAO,SAAArR,GACH,OAAAmiE,EAAWjuD,IAAIlU,EAAC+7B,KACT/7B,EAAE05F,cACLtzD,QAAOrK,KACC/7B,EAAE05F,cAAgB15F,EAAE05F,aAAatzD,QAClCjkC,EAAEikC,SAETmZ,SAAS,EACT2B,MAAO/+C,EAAE++C,MACT44B,WAAY,KACZzoE,MAAO,SAGnB,IAAK,uCACD,OAAO,SAAArR,GACH,OAAAmiE,EAAWjuD,IAAIlU,EAAC+7B,KACT/7B,EAAE05F,cACLn6C,SAAS,EACTluC,MAAOlP,EAAEkP,UAGrB,IAAK,4CACD,OAAO,SAAArR,GACH,OAAAmiE,EAAWjuD,IAAIlU,EAAC+7B,KACT/7B,EAAE05F,cACLtzD,QAAOrK,KACC/7B,EAAE05F,cAAgB15F,EAAE05F,aAAatzD,SACrC+zD,sBAAuBh4F,EAAE+4F,iBAIzC,IAAK,sCACD,OAAO,SAAAl7F,GACH,OAAAmiE,EAAWjuD,IAAIlU,EAAC+7B,KACT/7B,EAAE05F,cACLtzD,QAAOrK,KACC/7B,EAAE05F,cAAgB15F,EAAE05F,aAAatzD,SACrCg0D,aAAcj4F,EAAE01D,gBAIhC,IAAK,kCACD,OAAO,SAAA73D,GACH,OAAAmiE,EAAWjuD,IAAIlU,EAAC+7B,KACT/7B,EAAE05F,cACLtzD,QAAOrK,KACC/7B,EAAE05F,cAAgB15F,EAAE05F,aAAatzD,SACrCi0D,SAAUl4F,EAAEgiE,WAI5B,IAAK,gCACD,OAAO,SAAAnkE,GACH,OAAAo5F,EAAMllF,IAAIlU,GACNu/C,SAAS,EACTluC,MAAO,KACPyoF,UAAW95F,EAAE25F,UAAY35F,EAAE25F,SAASG,UACpCD,MAAO75F,EAAE25F,UAAY35F,EAAE25F,SAASE,MAChC/f,WAAY,KACZqhB,qBAAsBn7F,EAAE25F,UAAY35F,EAAE25F,SAASwB,wBAG3D,IAAK,+BACD,OAAO,SAAAn7F,GACH,OAAAo5F,EAAMllF,IAAIlU,GACNu/C,SAAS,EACTluC,MAAO,KACPyoF,UAAW95F,EAAE25F,UAAY35F,EAAE25F,SAASG,UACpCD,MAAOT,EAAMQ,uBAAuBz3F,EAAE03F,MAAO75F,EAAE25F,UAAY35F,EAAE25F,SAASG,WACtEhgB,WAAY,KACZqhB,qBAAsBn7F,EAAE25F,UAAY35F,EAAE25F,SAASwB,wBAG3D,IAAK,kCACD,OAAO,SAAAn7F,GACH,OAAAo5F,EAAMllF,IAAIlU,GACNu/C,SAAS,EACTluC,MAAOlP,EAAEkP,MACTyoF,UAAW95F,EAAE25F,UAAY35F,EAAE25F,SAASG,UACpCD,MAAO,KACP/f,WAAY,KACZqhB,qBAAsBn7F,EAAE25F,UAAY35F,EAAE25F,SAASwB,wBAG3D,IAAK,kCACD,OAAO,SAAAn7F,GACH,OAAAo5F,EAAMllF,IAAIlU,GACNu/C,SAAS,EACTluC,MAAO,KACPyoF,UAAW95F,EAAE25F,UAAY35F,EAAE25F,SAASG,UACpCD,MAAO,KACP/f,WAAY33E,EAAE23E,WACdqhB,qBAAsBn7F,EAAE25F,SAASwB,wBAG7C,IAAK,iCACD,OAAO,SAAAn7F,GACH,OAAAo5F,EAAMllF,IAAIlU,GACNu/C,SAAS,EACTluC,MAAO,KACPyoF,UAAW95F,EAAE25F,UAAY35F,EAAE25F,SAASG,UACpCD,MAAOT,EAAMQ,uBAAuBz3F,EAAE03F,MAAO75F,EAAE25F,UAAY35F,EAAE25F,SAASG,WACtEhgB,WAAY33E,EAAE23E,WACdqhB,qBAAsBn7F,EAAE25F,SAASwB,wBAG7C,IAAK,oCACD,OAAO,SAAAn7F,GACH,OAAAo5F,EAAMllF,IAAIlU,GACNu/C,SAAS,EACTluC,MAAOlP,EAAEkP,MACTyoF,UAAW95F,EAAE25F,UAAY35F,EAAE25F,SAASG,UACpCD,MAAO,KACP/f,WAAY,KACZqhB,qBAAsBn7F,EAAE25F,SAASwB,wBAG7C,IAAK,wCACD,OAAO,SAAAn7F,GACH,OAAAo5F,EAAMllF,IAAIlU,GACNu/C,QAASv/C,EAAE25F,UAAY35F,EAAE25F,SAASp6C,QAClCluC,MAAO,KACPyoF,UAAW33F,EAAE23F,UACbD,MAAOT,EAAMQ,uBAAuB55F,EAAE25F,UAAY35F,EAAE25F,SAASE,MAAO13F,EAAE23F,WACtEhgB,WAAY95E,EAAE25F,UAAY35F,EAAE25F,SAAS7f,WACrCqhB,qBAAsBh5F,EAAE23F,UAAUn2F,OAAS,KAGvD,IAAK,wCACD,OAAO,SAAA3D,GACH,OAAA6xB,EAAc3d,IAAIlU,GACdu/C,SAAS,EACTluC,MAAO,KACP+pF,cAAep7F,EAAEk6F,kBAAoBl6F,EAAEk6F,iBAAiBkB,iBAGpE,IAAK,uCACD,OAAO,SAAAp7F,GACH,OAAA6xB,EAAc3d,IAAIlU,GACdu/C,SAAS,EACTluC,MAAO,KACP+pF,cAAej5F,EAAEi5F,iBAG7B,IAAK,0CACD,OAAO,SAAAp7F,GACH,OAAA6xB,EAAc3d,IAAIlU,GACdu/C,SAAS,EACTluC,MAAOlP,EAAEkP,MACT+pF,cAAe,QAG3B,IAAK,4BACD,OAAO,SAAAp7F,GACH,OAAA84F,EAAQ5kF,IAAIlU,GACRq7F,yBAA0Bl5F,EAAEk5F,yBAC5BC,uBAAwBn5F,EAAEm5F,uBAC1BC,sBAAuBp5F,EAAEo5F,yBAGrC,IAAK,6BACD,OAAO,SAAAv7F,GACH,OAAA84F,EAAQ5kF,IAAIlU,EAAC+7B,KACN/7B,EAAEq5F,SACLgC,0BAA2Br7F,EAAEq5F,QAAQgC,6BAGjD,IAAK,2BACD,OAAO,SAAAr7F,GACH,OAAA84F,EAAQ5kF,IAAIlU,EAAC+7B,KACN/7B,EAAEq5F,SACLiC,wBAAyBt7F,EAAEq5F,QAAQiC,2BAG/C,IAAK,0BACD,OAAO,SAAAt7F,GACH,OAAA84F,EAAQ5kF,IAAIlU,EAAC+7B,KACN/7B,EAAEq5F,SACLkC,uBAAwBv7F,EAAEq5F,QAAQkC,6BAYtDlsE,QAAQrxB,OAAO,mBAAmBkB,MAAM,oBAAqBgjE,EAAAy0B,mBA1/B9B,CAAA/oD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCLV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAe/B,IAAAs5B,EAAA,SAAAp3D,GAII,SAAAo3D,EACYl3D,EACAge,EACA6U,EACEskC,EACFtkB,EACAukB,EACA3qD,GAPZ,IAAAjP,EASIsC,EAAAhmC,KAAA0C,KAAM26F,IAAY36F,YARVghC,EAAAwC,YACAxC,EAAAwgB,SACAxgB,EAAAq1B,8BACEr1B,EAAA25D,cACF35D,EAAAq1C,8BACAr1C,EAAA45D,oBACA55D,EAAAiP,wBA+GhB,OA1H0CpL,EAAA61D,EAAAp3D,GAgB/Bo3D,EAAA37F,UAAA6D,MAAP,SACIozD,EACA3J,EACA6V,EACAh+B,EACA8lB,EACA6wC,GAEA76F,KAAK66F,aAAeA,EACpB76F,KAAKwhD,OAAOib,GAAG,8CACXpQ,SAAQA,EACR2J,WAAUA,EACVkM,QAASA,EACH5zC,EAASiD,QAAQK,YAAYswC,GAASr9D,WACtC7E,KAAKq2E,4BAA4BnS,yBACvChgC,OAAMA,EACN8lB,WAAUA,KAIL0wC,EAAA37F,UAAA+7F,yBAAb,SACI9kC,EACA3J,EACArC,0GAEM+wC,EAAmB/6F,KAAK46F,kBAAkBxD,sBACvB2D,EAAiBv8D,KAAO6tB,GAA7C,MAAuD,EAAMrsD,KAAK46F,kBAAkB1+D,KAAKmwB,WAAlCzvB,EAAAC,wBAE1C,SAAM78B,KAAKq2D,4BAA4Bub,WACpDpzC,GAAIw3B,EAAWnxD,aAChBy/B,iBAEH,OAJMoyB,EAAW95B,EAAAC,QASb65B,EAAS92B,SAAW82B,EAAS92B,OAAO2vC,QACpCvvE,KAAKiwC,oBAAoB1/B,MAAM,+CAC/B,KAGJvQ,KAAKq2E,4BAA4BtS,eAAerN,GAEhD12D,KAAKihC,MACD3+B,KAAM,0BACN2+C,OAAQjhD,KAAK46F,kBAAkBxD,oBAC/B1gC,SAAQA,EACR1M,WAAUA,UAfVhqD,KAAKiwC,oBAAoB1/B,MAAM,yDAC/B,UAkBDmqF,EAAA37F,UAAAi8F,eAAP,WACI,IAAM/9D,EAAQj9B,KAAK05B,WACb8xB,EAAavuB,GAASA,EAAM2lB,mBAAqB3lB,EAAM2lB,kBAAkBoH,WAI/E,GAFAhqD,KAAKkpE,QAED1d,GAAcxrD,KAAK66F,aAEnB76F,KAAKwjC,UAAUrF,IAAI,8BAAgCqtB,EAAa,gBAFpE,CASA,IAAMvK,EAASjhD,KAAK46F,kBAAkBxD,oBAClCn2C,EACAjhD,KAAKwhD,OAAOib,GAAG,yCACXpQ,SAAUpL,EAAOziB,KAMzBx+B,KAAKwhD,OAAOib,GAAG,qBAGZi+B,EAAA37F,UAAAmqE,MAAP,WACIlpE,KAAKihC,MAAO3+B,KAAM,6BAGfo4F,EAAA37F,UAAAk8F,mBAAP,WACIj7F,KAAKihC,MAAO3+B,KAAM,qCAAsC84B,SAAS,KAG9Ds/D,EAAA37F,UAAAm8F,oBAAP,WACIl7F,KAAKihC,MAAO3+B,KAAM,qCAAsC84B,SAAS,KAG9Ds/D,EAAA37F,UAAAo8F,aAAP,WACI,IAAMl+D,EAAQj9B,KAAK05B,WACb0hE,EAAiBn+D,GAASA,EAAM2lB,mBAAqB3lB,EAAM2lB,kBAAkBw4C,eAEnF,OAAIA,IACQ,GAGTV,EAAA37F,UAAAs8F,aAAP,SAAoBC,GAChBt7F,KAAKs7F,UAAYA,GAGdZ,EAAA37F,UAAAk/B,aAAP,WACI,OAAOj+B,KAAKs7F,WAxHPZ,EAAoBtrE,GAVhC2I,EAAQ,cAAe,wBACvBG,EACG,YACA,SACA,8BACA,cACA,8BACA,gCACA,wBAESwiE,GAAb,CAA0CpsE,EAAAyS,kBAA7BqgC,EAAAs5B,qBAAoBA,EAfF,CAAA5tD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCOV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAMlBA,EAAAm6B,oBAAsB,IAAIjiE,GAAGG,QAC7B2nC,EAAAo6B,oBAAsB,IAAIliE,GAAGG,QAY1ClL,QACKrxB,OAAO,mBACPmC,QAAQ,YAAa,WAAM,OAAAk9B,EAAEisB,WAAWizC,YAE7CntE,EAAAiD,QAAQ63B,qBAAqB,WACzB7sB,EAAEisB,WAAWizC,UAAU3xC,OAAOM,QAAU,SAAAyvB,GACpCzY,EAAAm6B,oBAAoBrhE,OAAO2/C,IAG/Bt9C,EAAEisB,WAAWizC,UAAU3xC,OAAO4xC,QAAU,SAAArvC,GACpC+U,EAAAo6B,oBAAoBthE,OAAOmyB,MA7BJ,CAAAvf,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCPV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAG/B,IAAAu6B,EAAA,WAGI,SAAAA,EACI3iE,EACQyiE,EACRb,EACQ3qD,GAJZ,IAAAjP,EAAAhhC,KAEYA,KAAAy7F,YAEAz7F,KAAAiwC,sBAER,IAAM2rD,EAAiB,SAAC3+D,GACpB,OAAAA,GAASA,EAAMg5D,UAAYh5D,EAAMg5D,SAASh1C,QAAUhkB,EAAMg5D,SAASh1C,OAAOziB,IAE9E4iC,EAAAm6B,oBACKliF,OAAO,SAAAwgE,GACJ,OAAO+hB,EAAe5iE,EAAMU,cAAgBmgD,EAAMr7C,KAErDxE,UAAU,SAAA6/C,GACP+gB,EAAkBvE,iEAAiExc,GACnF7gD,EAAM0B,OAAOR,QACT53B,KAAM,iCACN2+C,OAAQ44B,IAEZ74C,EAAK66D,sBAGbz6B,EAAAo6B,oBACKniF,OAAO,SAAAgzC,GACJ,OAAOuvC,EAAe5iE,EAAMU,cAAgB2yB,IAE/CryB,UAAU,SAAA6/C,GACH74C,EAAKlB,UAITkB,EAAKlB,QAAUkB,EAAKiP,oBAAoBkQ,SAAS,wBAAyB,KACtE27C,SAAU,WACN96D,EAAKlB,QAAU,QAIvBl+B,WAAW,WACHo/B,EAAKlB,UACLkB,EAAKlB,QAAU,OAEpB,QAGX9G,EAAMC,OACDtqB,IAAIitF,GACJ1iE,uBACA6iE,cAAcztE,EAAAiD,QAAQ+3B,2BACtBnoB,SAAS,WAAM,OAAA7H,GAAG6uC,WAAW6zB,MAAM,OACnChiE,UAAU,SAAAqyB,GAAY,OAAArrB,EAAKi7D,iBAAiB5vC,KAEjDrzB,EAAM0B,OACDsnC,MAAM,SAAA3gE,GAAK,MAAW,oCAAXA,EAAEiB,OACb03B,UAAU,SAAC34B,GAA8B,OAAA2/B,EAAKk7D,YAAY76F,EAAEm9B,MAyBzE,OAtBYm9D,EAAA58F,UAAAk9F,iBAAR,SAAyB5vC,GAAzB,IAAArrB,EAAAhhC,KACIA,KAAK67F,oBAEDxvC,GACArsD,KAAKy7F,UAAUU,OAAOC,eAAe/vC,GAAUxD,KAAK,SAAAxnD,GAChD2/B,EAAK66D,oBACL76D,EAAKlB,QAAUkB,EAAKiP,oBAAoB1/B,MAAM,mDAIlDorF,EAAA58F,UAAAm9F,YAAR,SAAoB7vC,GAChBrsD,KAAKy7F,UAAUU,OAAOD,YAAY7vC,GAClCrsD,KAAK67F,qBAIDF,EAAA58F,UAAA88F,kBAAR,WACQ77F,KAAK8/B,UACL9/B,KAAKiwC,oBAAoB56B,MAAMrV,KAAK8/B,SACpC9/B,KAAK8/B,QAAU,OA9Ed67D,EAAgBvsE,GAF5B2I,EAAQ,kBAAmB,oBAC3BG,EAAO,oBAAqB,YAAa,gCAAiC,wBAC9DyjE,GAAb,GAAav6B,EAAAu6B,iBAAgBA,EAHE,CAAA7uD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCIV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAAs0B,eAAAt0B,EAAAs0B,iBAiB/B7yC,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,SAACsmB,GACGA,EAAepkB,MAAM,gCACjBkB,IAAK,gDACL2zB,gBAAgB,EAChBzP,WAAY,wCACZ3a,MAAQwpB,UAAW,gBACnB5O,OACI0sC,yBACI71C,SACI,wEACJzhB,WAAYpJ,EAAAsK,+BAGV,oBAAqB,SAAA15B,GAAK,OACxBu/C,QACKv/C,EAAE+2F,UAAY/2F,EAAE+2F,SAASx3C,SACzBv/C,EAAEw5F,cAAgBx5F,EAAEw5F,aAAaj6C,SACjCv/C,EAAEs5F,aAAet5F,EAAEs5F,YAAY/5C,SAC/Bv/C,EAAEu5F,cAAgBv5F,EAAEu5F,aAAah6C,SACjCv/C,EAAEk6F,kBAAoBl6F,EAAEk6F,iBAAiB36C,QAC9CwC,OAAQ/hD,EAAE+2F,UAAY/2F,EAAE+2F,SAASh1C,OACjC60C,QAAS52F,EAAEs5F,aAAet5F,EAAEs5F,YAAY1C,QACxCn1B,SAAUzhE,EAAEu5F,cAAgBv5F,EAAEu5F,aAAa93B,SAC3Cy4B,iBAAmBl6F,EAAEk6F,kBAAoBl6F,EAAEk6F,iBAAiBkB,cAC5DtB,UACI95F,GAAKA,EAAEw5F,cAAgBx5F,EAAEw5F,aAAaM,UAC1CmB,YACIj7F,GACAA,EAAEw5F,cACFx5F,EAAEw5F,aAAayB,YACnBD,mBACIh7F,GACAA,EAAEw5F,cACFx5F,EAAEw5F,aAAawB,mBACnBmC,WAAYn9F,GAAKA,EAAEq5F,aAI/B/1C,SACI,eACA,gCACA,iCACA,kCACA,8BACA,sCACA,SACImQ,EACAioC,EACA0B,EACAC,EACAlmB,EACAmmB,GAEA5B,EAAkB1+D,KAAKy2B,EAAatG,UACpCiwC,EAAmBpgE,KAAKy2B,EAAatG,UACrCkwC,EAAoBz3D,eACpBuxC,EAA4BlU,WACxBxP,EAAatG,SACbsG,EAAauP,QACbvP,EAAaxyD,IACbwyD,EAAavsB,IACbusB,EAAanqB,OAEjBg0D,EAAwB13D,aAAa6tB,EAAatG,YAG1DowC,QACI,eACA,gCACA,SACI9pC,EACAioC,GAEAA,EAAkBztC,OAAOwF,EAAatG,iBA5F3C,CAAA/9B,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCFV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAAs0B,eAAAt0B,EAAAs0B,iBAC/B7yC,QAAQrxB,OAAO,YAAYy4C,UAAU,kBACjC,UACA,SAAA8G,GACI,OACI7G,KAAA,SAAKvG,EAAOwG,GACR,IAGI6mD,EAHEC,EAAsBp6F,SAASq6F,eAAe,QAC9CC,EA8DEr6F,OAAOyiC,OAAOG,SACP,EAGP7iC,SAASi2C,uBAAuB,WAAW,GAAGqC,aAAe,EACtDt4C,SAASi2C,uBAAuB,WAAW,GAAGqC,aAE9Ct4C,SAASq6F,eAAe,yBAAyB/hD,aApE5D+/B,EAAiBkiB,IAwErB,SAASngB,EAAuBC,GAC5B,OAAOA,EAAgBtL,KAAOsJ,GAAkBgC,EAAgBtL,IAAMurB,EAK1E,SAASzgB,EAA0BQ,GAC/B,OAAOA,EAAgBf,QAAUjB,GAAkBgC,EAAgBf,OAASghB,EAKhF,SAASE,EAAwBngB,GAC7B,OAAQA,EAAgBtL,IAAMurB,EAAeH,GACzC9f,EAAgBf,OAASghB,EAAeH,IACxC9f,EAAgBtL,IAAMsJ,EAAiB8hB,EAK/C,SAASI,IACL,OAAOt6F,OAAOq6C,aAAet6C,SAAS0Q,gBAAgB4nC,aA1F1DtsB,QAAQsnB,QAAQ4G,GAAS99C,KAAK,SAAU,WACpCi8E,EAAiBkiB,MAGrBH,EAAO76F,iBAAiB,SAAU,WAC9B,GAAI+zC,EAAQ,GAAG2E,UAAU9tB,SAAS,aAAc,CAC5C,IAAMkwD,EAAkB/mC,EAAQ,GAAG8lC,wBAC7BqhB,EAAmCnnD,EAAQ,GAAG2E,UAAU9tB,SAAS,iBACjEuwE,EAAmCpnD,EAAQ,GAAG2E,UAAU9tB,SAAS,iBAGlEiwD,EAAuBC,KACxBmgB,EAAwBngB,IACvBqgB,GAEDpnD,EAAQ,GAAG2E,UAAUv1B,IAAI,iBAGzB03D,EAAuBC,IAAoBqgB,GAC3CpnD,EAAQ,GAAG2E,UAAUjmC,OAAO,iBAGhC,IAAM2oF,EAAe36F,SAASi2C,uBAAuB,mBACrD,IAAK0kD,GAAgBA,EAAar6F,OAAS,EAAG,OAE9C65F,EAAmBn6F,SAASi2C,uBAAuB,mBAAmB,GAAGqC,cAEpEkiD,EAAwBngB,IAAoBqgB,GAC7CpnD,EAAQ,GAAG2E,UAAUjmC,OAAO,kBAI5BwoF,EAAwBngB,IACvBR,EAA0BQ,IAC1BogB,GAEDnnD,EAAQ,GAAG2E,UAAUv1B,IAAI,iBAIzB83E,EAAwBngB,IACxBR,EAA0BQ,IAC1BogB,GAEAnnD,EAAQ,GAAG2E,UAAUjmC,OAAO,iBAI3BwoF,EAAwBngB,IACxBR,EAA0BQ,KAC3BogB,GAEAnnD,EAAQ,GAAG2E,UAAUjmC,OAAO,yBA/DzC,CAAA+Z,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBASf,oBAAAqwD,KAAMA,EAA4B/tE,GARjCqI,EAAU,mBACPE,SAAU,wBACVkV,YACI,uFACJe,UACI9N,QAAS,QAGXq9D,GAAN,GATJ,CAAU7uE,WCAV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAMf,oBAAAswD,KAAMA,EAAiChuE,GALtCqI,EAAU,mBACPE,SAAU,yBACVkV,YACI,4FAEFuwD,GAAN,GANJ,CAAU9uE,WCAV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAUf,oBAAAuwD,KAAMA,EAA4BjuE,GATjCqI,EAAU,mBACPE,SAAU,wBACVkV,YACI,uFACJe,UACI9N,QAAS,IACTtV,OAAQ,QAGV6yE,GAAN,GAVJ,CAAU/uE,WCIV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAC,GAS/BA,EAAAi8B,mBAAqB,IAAIhkE,GAAGG,QAC5B4nC,EAAAk8B,sBAAwB,IAAIjkE,GAAGG,SA6B5C,WAWI,SAAA+jE,EACYh6D,EACAmvB,EACA3P,EACAozB,EACAqnB,EACAC,EACA9C,EACAvkB,EACA1Q,GATZ,IAAA3kC,EAAAhhC,KACYA,KAAAwjC,YACAxjC,KAAA2yD,eACA3yD,KAAAgjD,YACAhjD,KAAAo2E,eACAp2E,KAAAy9F,0BACAz9F,KAAA09F,sBACA19F,KAAA46F,oBACA56F,KAAAq2E,8BACAr2E,KAAA2lE,YAER3lE,KAAK+zF,0BAA4B1yB,EAAAi8B,mBAC5BjkF,OAAO,SAAAC,GAAK,QAAEA,IACdD,OAAO,SAAAxJ,GAAK,OAACmxB,EAAK28D,uCAClB3jE,UAAU,SAAAnqB,GACPmxB,EAAKgzD,sBAGbh0F,KAAK49F,gBAAkBv8B,EAAAk8B,sBAClBlkF,OAAO,SAAAC,GAAK,QAAEA,IACdD,OAAO,SAAAxJ,GAAK,OAACmxB,EAAK68D,mCAClB7jE,UAAU,SAAAnqB,GACPmxB,EAAK88D,6BAIVN,EAAAz+F,UAAAqtC,QAAP,WACIpsC,KAAK+9F,uCAED/9F,KAAK2yD,aAAaqhC,kBAAmBh0F,KAAKg0F,oBACrCh0F,KAAK2yD,aAAaqrC,sBAAsBh+F,KAAK89F,2BAEtD99F,KAAKi+F,YAGFT,EAAAz+F,UAAA6kD,WAAP,SAAkBhW,GACTA,EAAS3Q,OAAU2Q,EAAS3Q,MAAMs5B,cAAiB3oB,EAAS3Q,MAAMs5B,aAAatV,SAE3DrT,EAAS3Q,MAAMs5B,aAAatV,OAAOziB,KAAOoP,EAAS3Q,MAAMk9B,cAAclZ,SAE5FjhD,KAAKk+F,2BAA2BtwD,EAAS3Q,MAAMs5B,aAAatV,QAC5DjhD,KAAKi+F,cAIbT,EAAAz+F,UAAA4tC,WAAA,WACQ3sC,KAAKm+F,kBAAkBn+F,KAAKm+F,iBAAiBvxD,UAC7C5sC,KAAK+zF,2BAA2B/zF,KAAK+zF,0BAA0BnnD,UAC/D5sC,KAAK49F,iBAAiB59F,KAAK49F,gBAAgBhxD,WAG5C4wD,EAAAz+F,UAAAq/F,sBAAP,WACIp+F,KAAKy9F,wBAAwB1oB,YAG1ByoB,EAAAz+F,UAAAs/F,mBAAP,WACIr+F,KAAK09F,oBAAoB3oB,YAGtByoB,EAAAz+F,UAAAm/F,2BAAP,SAAkCj9C,GAC9B,GAAKA,EAAL,CAEIjhD,KAAKm+F,kBAAkBn+F,KAAKm+F,iBAAiBvxD,UAEhCqU,EAAOziB,KAkBrBg/D,EAAAz+F,UAAAg/F,qCAAP,eAAA/8D,EAAAhhC,KACIA,KAAKs+F,wBAED97F,OAAOi9B,KAAKmB,YAAYw3C,YACxBp4E,KAAKs+F,qBAAqBrlF,MACtBvb,KAAM,gBACNwuF,UAAW,SAAC9lD,EAAejmC,GAA2B,OAAA6gC,EAAKuzD,aAAanuD,EAAKjmC,MAGrFH,KAAKs+F,qBAAqBrlF,MACtBvb,KAAM,gBACNwuF,UAAW,SAAC9lD,EAAejmC,GAA2B,OAAA6gC,EAAKm4C,oBAAoB/yC,EAAKjmC,MAGpFqC,OAAOi9B,KAAKmB,YAAY23C,YACxBv4E,KAAKs+F,qBAAqBrlF,MACtBvb,KAAM,qBACN42F,SAAS,EACTpI,UAAW,SAAC9lD,EAAejmC,EAAwB0pF,GAC/C,OAAA7oD,EAAKu9D,wBAAwBn4D,EAAKjmC,EAAK0pF,OAIhD2T,EAAAz+F,UAAAw1F,aAAP,SAAoBnuD,EAAejmC,GAAnC,IAAA6gC,EAAAhhC,KACI,GAAKomC,GAAQA,EAAIi+B,QAAjB,CAEA,IAAMpjB,EAASjhD,KAAK46F,kBAAkBxD,oBACjCn2C,GAELjhD,KAAKgjD,UACAvhD,MACG03C,SAAU,mCAAmC8H,EAAOziB,GAAE,aAAa4H,EAAI5H,GAAE,aACrE4H,EAAIi+B,QAAQ7lC,GAAE,mBACCx+B,KAAKq2E,4BAA4BnS,yBAAwB,2BAC5E5f,YAAa,KACbC,qBAAqB,IAExBhgB,KAAK,SAAAR,GACF/C,EAAKq1C,4BAA4BvR,eAAe/gC,GAChD/C,EAAK08D,oBAAoBc,SACzBx9D,EAAKy9D,0BAA2B,MAIrCjB,EAAAz+F,UAAAw/F,wBAAP,SAA+Bn4D,EAAejmC,EAAwB0pF,GAAtE,IAAA7oD,EAAAhhC,KACI,GAAKomC,GAAQA,EAAIi+B,QAAjB,CAEA,IAAMpjB,EAASjhD,KAAK46F,kBAAkBxD,oBACjCn2C,GAELjhD,KAAKgjD,UACAvhD,MACG03C,SAAU,wEACO8H,EAAOziB,GAAE,sDACGx+B,KAAKq2E,4BAA4BnS,0BAA4B,GAAC,+CACpE99B,EAAI5H,GAAE,gDACLr+B,GAAOA,EAAIq+B,IAAO4H,EAAIi+B,QAAQ7lC,IAAE,yDACxBqrD,GACxB7pF,KAAKq2E,4BAA4B5R,4BACjC,IAAE,+DAC4BzkE,KAAKq2E,4BAA4B1R,iCAC/D,IAAE,6DAEVrgB,YAAa,KACbC,qBAAqB,IAExBhgB,KAAK,SAAAiG,GACFxJ,EAAKq1C,4BAA4BxR,0BAA0Br6B,GAC3DxJ,EAAK08D,oBAAoBc,SACzBx9D,EAAKy9D,0BAA2B,MAIrCjB,EAAAz+F,UAAAo6E,oBAAP,SAA2B/yC,EAAejmC,GAA1C,IAAA6gC,EAAAhhC,KACI,GAAKomC,EAAL,CAEA,IAAM6a,EAASjhD,KAAK46F,kBAAkBxD,oBAChCzsB,EAAa1pB,GAAUA,EAAOqN,MAAgB,SAEpDtuD,KAAKo2E,aACD,4FAEI53C,GAAI,gBACJ46C,WAAY,yBACZt3C,gBAAiB,WAAM,OAACd,EAAKy9D,0BAA2B,KAGxDr4D,IAAGA,EACHi8B,MAAQliE,GAAOA,EAAIq+B,IAAO4H,EAAIi+B,QAAQ7lC,GACtCmsC,WAAUA,MAKf6yB,EAAAz+F,UAAAk/F,SAAP,WACI,IAAMh9C,EAASjhD,KAAK46F,kBAAkBxD,oBACnCn2C,IACCjhD,KAAK0+F,eAAiB7gG,OAAO0P,KAAK0zC,EAAOqN,OAAOzrD,OAAS,IAI1D26F,EAAAz+F,UAAA4/F,2BAAP,WACI3+F,KAAKi9B,MAAM08D,yBAAyBC,gBAAkBv4B,EAAA1tC,aAAairE,cAAcC,IAC3E7+F,KAAK8+F,4BACL9+F,KAAK89F,4BAGRN,EAAAz+F,UAAAggG,+BAAP,WACI/+F,KAAKi9B,MAAM08D,yBAAyBC,gBAAkBv4B,EAAA1tC,aAAairE,cAAcjrE,aAC3E3zB,KAAKy0F,qBACLz0F,KAAKg0F,oBAENh0F,KAAKy+F,2BAA0Bz+F,KAAKy+F,0BAA2B,IAGjEjB,EAAAz+F,UAAA4+F,mCAAP,WACI,IAAMqB,EACFh/F,KAAKi9B,MAAM08D,yBAAyBC,gBAAkBv4B,EAAA1tC,aAAairE,cAAcjrE,aAGrF,OAFIqrE,IAAah/F,KAAKy+F,2BAA0Bz+F,KAAKy+F,0BAA2B,GAEzEO,GAGJxB,EAAAz+F,UAAA8+F,+BAAP,WACI,OAAO79F,KAAKi9B,MAAM08D,yBAAyBC,gBAAkBv4B,EAAA1tC,aAAairE,cAAcC,KAGrFrB,EAAAz+F,UAAA01F,mBAAP,WACIz0F,KAAKq2E,4BAA4BrT,YAAY3B,EAAA1tC,aAAairE,cAAcrH,OAGpEiG,EAAAz+F,UAAAi1F,kBAAR,WACIh0F,KAAKq2E,4BAA4BrT,YAAY3B,EAAA1tC,aAAairE,cAAcjrE,eAGpE6pE,EAAAz+F,UAAA++F,yBAAR,WACI99F,KAAKq2E,4BAA4BrT,YAAY3B,EAAA1tC,aAAairE,cAAcC,MAGpErB,EAAAz+F,UAAA+/F,0BAAR,WACI9+F,KAAKq2E,4BAA4BrT,YAAY3B,EAAA1tC,aAAairE,cAAcrH,OAGpEiG,EAAAz+F,UAAAkgG,4CAAR,SAAoDj/C,GAChD,GAAKA,KAAYA,EAASn9C,OAAS,GAAnC,CAEA,IAAM2lC,EAAQwX,EACT3mC,OAAO,SAAAC,GAAK,OAAgB,IAAhBA,EAAEkuD,YACd74D,IAAI,SAAA2K,GAAK,OAAAA,EAAEuoB,OACX5Z,KAAK,KAEJuhE,EAAU18C,EAAAw7C,gCAAgC9yB,KAEhDx1D,KAAKspF,kBACD9gD,MAAKA,EACLghD,QAAOA,KAxPbgU,EAA2BpuE,GAhBhCqI,EAAU,mBACPE,SAAU,sBACVkV,YAAa,iGACbe,UAAY3Q,MAAO,OAEtB/E,EACG,YACA,eACA,YACA,eACA,sCACA,kCACA,gCACA,8BACA,cAEEslE,GAAN,GAvC4C,CAAAp8B,EAAAC,aAAAD,EAAAC,gBAAb,CAAAv0B,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCHV,SAAUA,IAAS,SAAAwe,GAKf,IAAOwwD,EAAqBhvE,EAASwe,gBAAgBs0B,aAAaC,WAAWi8B,mBACtEC,EAAwBjvE,EAASwe,gBAAgBs0B,aAAaC,WAAWk8B,uBA2BhF,WAMI,SAAA2B,EACY19C,EACAmR,EACA3P,EACAy6C,EACA72C,EACA3W,EACAkvD,GANAn/F,KAAAwhD,SACAxhD,KAAA2yD,eACA3yD,KAAAgjD,YACAhjD,KAAAy9F,0BACAz9F,KAAA4mD,sBACA5mD,KAAAiwC,sBACAjwC,KAAAm/F,wBAGLD,EAAAngG,UAAAqtC,QAAP,WACIpsC,KAAKkvF,aACLlvF,KAAK80F,iBAGFoK,EAAAngG,UAAA6kD,WAAP,WACI5jD,KAAKkvF,cAGDgQ,EAAAngG,UAAAmwF,WAAR,WACIlvF,KAAKmvF,QAEL,IAAMiQ,EAAap/F,KAAKihD,OAAOqN,MAAgB,SACzC+wC,EAAar/F,KAAKo5F,kBAAoBp5F,KAAKo5F,iBAAiBv2F,OAAS,EAEtEL,OAAOi9B,KAAKmB,YAAYwuD,eAE7BpvF,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,WAAY,0CACvCtvF,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,gBAAiB,0CAExC8P,GAAc58F,OAAOi9B,KAAKmB,YAAY0+D,cACtCt/F,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,aAAc,2CAEzC+P,GAAc78F,OAAOi9B,KAAKmB,YAAY2+D,kBACtCv/F,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,iBAAkB,+CAE7C8P,GAAc58F,OAAOi9B,KAAKmB,YAAY4+D,UACtCx/F,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,aAAc,uCAEzC9sF,OAAOi9B,KAAKmB,YAAY+yD,kBACxB3zF,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,eAAgB,+CAE3C9sF,OAAOi9B,KAAKmB,YAAY6+D,0BACxBz/F,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,aAAc,wDAG1C4P,EAAAngG,UAAA41F,qBAAP,eAAA3zD,EAAAhhC,KACSA,KAAK2yD,aAAatG,UAEvBrsD,KAAKgjD,UACAvhD,MACG03C,SAAU,2CAA2Cn5C,KAAK2yD,aAAatG,SAAQ,mCAC/E/H,YAAa,KACbC,qBAAqB,IAExBhgB,KAAK,WACFvD,EAAKy8D,wBAAwBe,YAIjCU,EAAAngG,UAAA+1F,cAAR,eAAA9zD,EAAAhhC,KACIA,KAAK4uF,UAEGzM,QAAS,oBACT4S,MAAO,sBACPC,KAAM,oBACNC,MAAO,UACPh1F,KAAM,YACN+uC,OAAQ,WAAM,OAAAhO,EAAK2zD,0BAGnBxS,QAAS,iBACT4S,MAAO,iBACPC,KAAM,aACNC,MAAO,0BACPh1F,KAAM,QACN+uC,OAAQ,WAAM,OAAAhO,EAAKg9D,0BAGnB7b,QAAS,qBACT4S,MAAO,qBACPC,KAAM,aACNC,MAAO,aACPh1F,KAAM,uBACN+uC,OAAQ,WAAM,OAAAhO,EAAKgzD,uBAIAxxF,OAAOi9B,KAAKmB,YAAY8yD,UAAYlxF,OAAOi9B,KAAKmB,YAAY8+D,gBAEnF1/F,KAAK4uF,QAAQ31E,MACTkpE,QAAS,kBACT4S,MAAO,sBACPC,KAAM,aACNC,MAAO,qBACPh1F,KAAM,WACN+uC,OAAQ,WAAM,OAAAhO,EAAK0+D,qBAKvBR,EAAAngG,UAAA2gG,eAAR,eAAA1+D,EAAAhhC,KACIA,KAAK4mD,oBACA+4C,qBAAsBnhE,GAAIx+B,KAAKihD,OAAOziB,KACtC8F,SAASC,KAAK,WACXvD,EAAKiP,oBAAoBoH,KAAK,iCAEjCrN,MAAM,WACHhJ,EAAKiP,oBAAoB1/B,MAAM,yDAInC2uF,EAAAngG,UAAAi1F,kBAAR,WACqC,0CAA7Bh0F,KAAKwhD,OAAOyU,QAAQv4D,KAAkD4/F,EAAmBpjE,QAAO,GAC/Fl6B,KAAKwhD,OAAOib,GAAG,yCAA2Cu3B,mBAAmB,KAG9EkL,EAAAngG,UAAAi/F,qBAAR,WACqC,0CAA7Bh+F,KAAKwhD,OAAOyU,QAAQv4D,KACpB6/F,EAAsBrjE,QAAO,GAC5Bl6B,KAAKwhD,OAAOib,GAAG,yCAA2CuhC,sBAAsB,KAGjFkB,EAAAngG,UAAAuwF,UAAR,SAAkBzvF,EAAeo9B,GAC7B,OACIp9B,MAAKA,EACLo9B,MAAKA,IAILiiE,EAAAngG,UAAAwwF,OAAR,SAAeC,GACXxvF,KAAKmvF,KAAKl2E,KAAKu2E,IAzIjB0P,EAAyB9vE,GAtB9B8I,EACG,SACA,eACA,YACA,sCACA,sBACA,sBACA,yBAEHT,EAAU,mBACPE,SAAU,oBACVwhB,SAAU,uOAMVvL,UACIqT,OAAQ,IACRm4C,iBAAkB,QAGpB8F,GAAN,GAjCe,CAAA5wE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCHV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAArwC,gBAAAqwC,EAAArwC,kBAgB5CxC,QAAQrxB,OAAO,mBAAmBsxB,QAAQ,yBACtC,YACA,SAACC,GACG,OAAOA,EACH,+DAGImxE,kCACIlxE,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,WAAYxQ,GAAI,QAGtC/pB,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,QAASqgB,OAAQ,WAGrB7G,QACIzZ,OAAQ,SACR1gB,SAAS,EACT2gB,WAGJkxE,2BACInxE,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,4BAA6BxQ,GAAI,aA5CxC,CAAAsO,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCGV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAsBf,WAKI,SAAAgzD,EAAoBX,GAAAn/F,KAAAm/F,wBAEbW,EAAA/gG,UAAAqtC,QAAP,WAvBA5pC,QACAA,OAAOu4B,QACPv4B,OAAOu4B,OAAO+zD,QACdtsF,OAAOu4B,OAAO+zD,OAAOiR,mBACrBv9F,OAAOu4B,OAAO+zD,OAAOiR,kBAAkB,IACvCv9F,OAAOu4B,OAAO+zD,OAAOiR,kBAAkB,GAAGtO,WAoBlCzxF,KAAK6/F,6BAICC,EAAA/gG,UAAA8gG,0BAAd,yGACoB,SAAM7/F,KAAKm/F,sBAAsBU,2BAC7CrhE,GAAIx+B,KAAKihD,OAAOziB,KACjB8F,wBAFG07D,EAAUpjE,EAAAC,OAIhB78B,KAAKigG,eAAiBD,YAlBxBF,EAAuB1wE,GAT5BqI,EAAU,mBACPE,SAAU,kBACVkV,YAAa,6EACbe,UACIqT,OAAQ,IACR0f,SAAU,OAGjBzoC,EAAO,0BACF4nE,GAAN,GAtBJ,CAAUxxE,WCHV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAA42B,GAG5C,IAAAkI,EAAA,SAAA58D,GAKI,SAAA48D,EACIlnE,EACQ4K,GAFZ,IAAA5C,EAIIsC,EAAAhmC,KAAA0C,KAAMg5B,IAAMh5B,YAFJghC,EAAA4C,sBAIR5C,EAAKm/D,yBAiEb,OA5EgDt7D,EAAAq7D,EAAA58D,GAcrC48D,EAAAnhG,UAAAqhG,oBAAP,WACI,IAAMC,EAAergG,KAAKsgG,kBACpBC,EACFF,GAAgBA,EAAa7F,uBACjCx6F,KAAKihC,MAAO3+B,KAAM,6BAClBtC,KAAK4jC,oBAAoB5K,MACrB,0BACCunE,IAIFL,EAAAnhG,UAAAyhG,sBAAP,WACI,IAAMH,EAAergG,KAAKsgG,kBACpBC,EACFF,GAAgBA,EAAa9F,yBACjCv6F,KAAKihC,MAAO3+B,KAAM,+BAClBtC,KAAK4jC,oBAAoB5K,MACrB,4BACCunE,IAIFL,EAAAnhG,UAAA0hG,mBAAP,WACI,IAAMJ,EAAergG,KAAKsgG,kBACpBC,EACFF,GAAgBA,EAAa5F,sBACjCz6F,KAAKihC,MAAO3+B,KAAM,4BAClBtC,KAAK4jC,oBAAoB5K,MACrB,yBACCunE,IAIDL,EAAAnhG,UAAAohG,qBAAR,WACIngG,KAAKihC,MACD3+B,KAAM,4BACNk4F,uBAAwBx6F,KAAK0gG,eACzB,0BAEJnG,yBAA0Bv6F,KAAK0gG,eAC3B,4BAEJjG,sBAAuBz6F,KAAK0gG,eACxB,4BAKJR,EAAAnhG,UAAA2hG,eAAR,SAAuBC,GACnB,IAEMC,EAAc5gG,KAAK4jC,oBAAoB5lC,IAAI2iG,GAIjD,QAN0B,SAAAviG,GACtB,OAAAA,QAEgByiG,CAAkBD,IAEhCA,GAIFV,EAAAnhG,UAAAuhG,gBAAR,WACI,IAAMrjE,EAAQj9B,KAAKg5B,MAAMU,WACzB,OAAOuD,GAASA,EAAMs7D,SA1EjB2H,EAA0B9wE,GAFtC2I,EAAQ,kBAAmB,8BAC3BG,EAAO,oBAAqB,wBAChBgoE,GAAb,CAAgD5xE,EAAAyS,kBAAnCi3D,EAAAkI,2BAA0BA,EAHK,CAAA9+B,EAAA42B,UAAA52B,EAAA42B,aAAb,CAAAlrD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCGV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAA42B,UAAA52B,EAAA42B,YAgB5C,WAUI,SAAA8I,EAAmBC,EAAiDxT,GAAjDvtF,KAAA+gG,mBAAiD/gG,KAAAutF,eAE7DuT,EAAA/hG,UAAAqtC,QAAP,WACQpsC,KAAKg5F,WAAah5F,KAAKg5F,UAAU9yD,OAAOlmC,KAAKghG,gCAAgChhG,KAAKg5F,YAGnF8H,EAAA/hG,UAAA6uF,OAAP,SAAc36C,GACVjzC,KAAKutF,aAAaK,OAAO36C,IAGtB6tD,EAAA/hG,UAAAkiG,uBAAP,SAA8BziE,GAC1B,IAAMy6C,EAAWj5E,KAAKg5F,UAAUnzF,MAAMwT,OAAO,SAAAC,GAAK,OAAAA,EAAE25D,KAAKz0C,KAAOA,IAAI,GACpE,OAAOy6C,EAAWA,EAAShG,KAAKukB,YAAc,IAG3CsJ,EAAA/hG,UAAAmiG,iBAAP,WACI,IAAIh7D,EAAQ,EACZ,IAAK,IAAMi7D,KAAYnhG,KAAKohG,eAAgB,CACxC,IAAMC,EAAQrhG,KAAKohG,eAAeD,GAClC,GAAIE,EACA,IAAK,IAAMC,KAAeD,EACtBn7D,GAASm7D,EAAMC,GAAaz+F,OAKxC,OAAOqjC,GAGH46D,EAAA/hG,UAAAiiG,gCAAR,SAAwChI,GAAxC,IAAAh4D,EAAAhhC,KACUuhG,EAAkBvI,EAAUnzF,MAAMwT,OAAO,SAAAC,GAAK,OAAA0nB,EAAKwgE,iBAAiBloF,KAC1E,GAAKioF,EAAgB1+F,OAArB,CAEA,IAEM4+F,EAFUF,EAAgB5yF,IAAI,SAAA2K,GAAK,OAAAA,EAAE25D,KAAKz0C,KAElBnlB,OADX,SAACjb,EAAOkG,EAAOo9F,GAAS,OAAAA,EAAK5+F,QAAQ1E,KAAWkG,IAClB2B,MAAM,EAAG,GACrDw7F,EAAc5+F,QAEnB7C,KAAK+gG,iBAAiB1uB,2BAA4BrtB,IAAKy8C,IAAiBn9D,SAASC,KAAK,SAAAo9D,GAClF3gE,EAAK2gE,UAAYA,EACjB,IAAMP,KAMNK,EAAc1tF,QAAQ,SAAA6tF,GAClB,IAAMC,MAIYF,GAAaA,EAAUC,EAAO/8F,aACtCkP,QAAQ,SAAApU,GACd,IAAMmiG,EAAYniG,EAAKoiG,UAAUx7D,aAAe5mC,EAAKoiG,UAAUrkG,KAC/DmkG,EAAWC,GAAaD,EAAWC,OACnCD,EAAWC,GAAW7oF,KAAKtZ,KAE/ByhG,EAAeQ,EAAO/8F,YAAcg9F,IAGxC7gE,EAAKogE,eAAiBA,MAItBN,EAAA/hG,UAAAyiG,iBAAR,SAAyBvoB,GACrB,MAAsC,WAA/BA,EAASr5C,OAAO/6B,YAA+C,IAApBo0E,EAASr5C,QA3E7DkhE,EAAkC1xE,GAXvCqI,EAAU,mBACPE,SAAU,+BACViW,UACIo0D,UAAW,IACXhJ,UAAW,IACXiJ,SAAU,KAEdp1D,YACI,6GAEP3U,EAAO,mBAAoB,iBACtB4oE,GAAN,GAhB+B,CAAAh0D,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAcf,WAOI,SAAAo1D,EAAoBtyB,GAAA5vE,KAAA4vE,8BAGbsyB,EAAAnjG,UAAA6kD,WAAP,eAAA5iB,EAAAhhC,KACI,GAAIA,KAAKg5F,WAAah5F,KAAKg5F,UAAUnzF,OAAS7F,KAAKg5F,UAAUnzF,MAAMhD,QAAU7C,KAAKkoF,eAAeloF,KAAKg5F,UAAUnzF,OAAQ,CACpH,IAAIkqE,EAAS/vE,KAAKg5F,UAAUnzF,MAAM8I,IAAI,SAAA2K,GAAO,OAAS5a,IAAK4a,EAAEklB,GAAG35B,WAAYkrE,SAAWoyB,SAAU7oF,OACjGtZ,KAAK4vE,4BACAJ,0BAA0BO,GAC1BzrC,SACAC,KAAK,SAAA4jD,GACFnnD,EAAKmnD,WAAaA,MAK1B+Z,EAAAnjG,UAAAmpF,eAAR,SAAuBnY,GACnB,IAAMqY,EAAY/6D,KAAKC,UAAUttB,KAAKioF,kBAAoB56D,KAAKC,UAAUyiD,GAEzE,OADA/vE,KAAKioF,eAAiBlY,EACfqY,GAzBT8Z,EAAgC9yE,GAXrCqI,EAAU,mBACPE,SAAU,6BACViW,UACIo0D,UAAW,IACXhJ,UAAW,IACXiJ,SAAU,KAEdp1D,YACI,yGAEP3U,EAAO,gCACFgqE,GAAN,GAdJ,CAAU5zE,WCHV,SAAUA,IAAS,SAAAwe,GAGf,IAAOlL,EAAkBtT,EAAS4S,QAAQU,iBA8B1C,WAMI,SAAAwgE,EACYC,EACA9U,EACA+U,EACAnD,GAJZ,IAAAn+D,EAAAhhC,KACYA,KAAAqiG,OACAriG,KAAAutF,eACAvtF,KAAAsiG,QACAtiG,KAAAm/F,wBAkCLn/F,KAAA4hC,gBAAkB,SAACC,GACtB,OAAAD,EAAgBC,EAAM,WAAM,OAAAb,EAAKshE,MAAMjrD,KAAK,gCAhCzC+qD,EAAArjG,UAAAqtC,QAAP,WAhCA5pC,QACAA,OAAOu4B,QACPv4B,OAAOu4B,OAAO+zD,QACdtsF,OAAOu4B,OAAO+zD,OAAOiR,mBACrBv9F,OAAOu4B,OAAO+zD,OAAOiR,kBAAkB,IACvCv9F,OAAOu4B,OAAO+zD,OAAOiR,kBAAkB,GAAGtO,WA6BlCzxF,KAAKuiG,gCAICH,EAAArjG,UAAAwjG,6BAAd,8FACIviG,KAAKwiG,sBACLxiG,KAAKm6F,YAAYpmF,QAAQ,SAAMvW,GAAC,OAAAilG,EAAAzhE,OAAA,gFAC5B,SAAMhhC,KAAKm/F,sBACNU,2BACGrhE,GAAIhhC,EAAEyjD,OAAOziB,KAEhB8F,SAASC,KAAK,SAAAjrB,GACX0nB,EAAKwhE,mBAAmBvpF,MACpBozC,SAAU7uD,EAAEyjD,OAAOziB,GACnBwhE,QAAS1mF,qBAPrBsjB,EAAAC,2BAaDulE,EAAArjG,UAAA2jG,6BAAP,SAAoCr2C,GAChC,IAAKrsD,KAAKwiG,qBAAuBxiG,KAAKwiG,mBAAmB3/F,OAAQ,OAAO,EAExE,IAAM8/F,EAAa3iG,KAAKwiG,mBAAmBl/F,KAAK,SAAA9F,GAAK,OAAAA,EAAE6uD,WAAaA,IACpE,QAAKs2C,GAEEA,EAAW3C,QAAQ0C,8BAMvBN,EAAArjG,UAAA6uF,OAAP,SAAc36C,GACVjzC,KAAKutF,aAAaK,OAAO36C,IAGtBmvD,EAAArjG,UAAA6jG,eAAP,SAAsB3hD,GAClB,OAAOA,GAAUA,EAAOqN,OAA8C,IAArCzwD,OAAO0P,KAAK0zC,EAAOqN,OAAOzrD,QAAgBo+C,EAAOqN,MAAgB,UAG/F8zC,EAAArjG,UAAA8jG,gBAAP,SAAuB1kE,GACnB,OAAKA,GAAQA,EAAIt7B,OAEV7C,KAAKqiG,KAAKS,mBAAmB3kE,GAFJA,GAK7BikE,EAAArjG,UAAAgkG,YAAP,SAAmBhL,GACf,OACIA,EAAQN,SAA4C,aAAjCM,EAAQN,QAAQn3D,eAAiE,MAAjCy3D,EAAQN,QAAQn3D,eA/DzF8hE,EAA+BhzE,GAZpCqI,EAAU,mBACPE,SAAU,2BACVkV,YACI,qGACJe,UACIo0D,UAAW,IACX/gD,OAAQ,IACRk5C,YAAa,IACb8H,SAAU,OAGjB/pE,EAAO,OAAQ,eAAgB,sBAAuB,0BACjDkqE,GAAN,GAjCe,CAAA9zE,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCGV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAUf,WACI,SAAAk2D,EAAmBzV,GAAAvtF,KAAAutF,eAIZyV,EAAAjkG,UAAA6uF,OAAP,SAAc36C,GACVjzC,KAAKutF,aAAaK,OAAO36C,IAN3B+vD,EAA8B5zE,GATnCqI,EAAU,mBACPE,SAAU,2BACViW,UACIqT,OAAQ,KAEZpU,YACI,qGAEP3U,EAAO,iBACF8qE,GAAN,GAVJ,CAAU10E,WCAV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAA42B,UAAA52B,EAAA42B,YAgF5C,WAMI,SAAAiL,EAAoBC,GAAAljG,KAAAkjG,6BAEbD,EAAAlkG,UAAAqtC,QAAP,eAAApL,EAAAhhC,KAEUo/F,EAAa,SAAC9lF,GAChB,SAAGA,GAAKA,EAAE2nC,QAAU3nC,EAAE2nC,OAAOqN,MAAgB,WAC3C60C,EAAsB,SAAC7pF,GAAyC,SAAGA,GAAKA,EAAE2nC,QAAU3nC,EAAEw8E,UAGtFsN,EAAwB,SAAC9pF,GAC3B,SACI6pF,EAAoB7pF,IACpBA,EAAE6gF,aACF7gF,EAAE0/E,WANiD,SAAC1/E,GACxD,OAAC9W,OAAOi9B,KAAKmB,YAAY4+D,UAAah9F,OAAOi9B,KAAKmB,YAAY4+D,UAAYlmF,EAAE4gF,mBAMxEmJ,CAAmD/pF,KAG3DtZ,KAAKsjG,cAAgBtjG,KAAKujG,YACrBlqF,OAfkB,SAACC,GAAyC,SAAGA,GAAKA,EAAE2nC,QAAU3nC,EAAE2nC,OAAOqN,SAgBzFj1C,OAAO,SAAAC,GAAK,OAAC8lF,EAAW9lF,GAAK8pF,EAAsB9pF,GAAK6pF,EAAoB7pF,KAC5E4f,uBACAiI,SAAS,KACTnH,UAAU,SAAAiD,GACP+D,EAAK/D,MAAKhC,KACHgC,GACHo/D,WACIr7D,EAAK/D,OAAS+D,EAAK/D,MAAMo/D,WACpBphE,KAAM+F,EAAK/D,MAAMo/D,YAChBp/D,EAAMo/D,YAAUphE,KAASgC,EAAMo/D,cAEzC+C,EAAWniE,GAAQ+D,EAAKwiE,iCAAiCvmE,GACxD+D,EAAKyiE,+BAA+BxmE,MAI9CgmE,EAAAlkG,UAAA4tC,WAAP,WACQ3sC,KAAKsjG,eAAetjG,KAAKsjG,cAAc12D,UAE3C5sC,KAAKsjG,cAAgB,MAGlBL,EAAAlkG,UAAAyhG,sBAAP,WACIxgG,KAAKkjG,2BAA2B1C,wBAChCxgG,KAAKi9B,MAAMo/D,WAAW9B,0BAA4Bv6F,KAAKi9B,MAAMo/D,WAAW9B,0BAGrE0I,EAAAlkG,UAAAqhG,oBAAP,WACIpgG,KAAKkjG,2BAA2B9C,sBAChCpgG,KAAKi9B,MAAMo/D,WAAW7B,wBAA0Bx6F,KAAKi9B,MAAMo/D,WAAW7B,wBAGnEyI,EAAAlkG,UAAA0hG,mBAAP,WACIzgG,KAAKkjG,2BAA2BzC,qBAChCzgG,KAAKi9B,MAAMo/D,WAAW5B,uBAAyBz6F,KAAKi9B,MAAMo/D,WAAW5B,uBAGlEwI,EAAAlkG,UAAA2kG,8BAAP,WACI,OAAOlhG,OAAOi9B,KAAKmB,YAAY+iE,mBAG3BV,EAAAlkG,UAAAykG,iCAAR,SAAyCvmE,GAAzC,IAAA+D,EAAAhhC,KACUihD,KACA0f,KACAsY,EAAWh8C,EAAM+7D,UAAUnzF,MAAMhD,QAAUo6B,EAAM+7D,UAAUnzF,MAAM,GACjEotE,EAAOgG,GAAYj5E,KAAKwhG,iBAAiBvoB,IAAaA,EAAShG,KAC/D2wB,EAAiB3mE,EAAM+7D,UAAUnzF,MAAMwT,OAAO,SAAAC,GAAK,OAAAA,EAAEuqF,cAAahhG,OAAS,EAC3EihG,EAAa7mE,EAAM+7D,UAAUnzF,MAAMwT,OAAO,SAAAC,GAAK,OAAAA,EAAEwqF,aAAYjhG,OAAS,EACtEkhG,EAAwB9mE,EAAM+7D,UAAUnzF,MAAMwT,OAAO,SAAAC,GAAK,OAAAA,EAAEyqF,wBAAuBlhG,OAAS,EAC5FmhG,EAAiB/mE,EAAM+7D,UAAUnzF,MAAMwT,OAAO,SAAAC,GAAK,OAAAA,EAAE0qF,iBAAgBnhG,OAAS,EAE9EohG,EAAuB,SAAAvlG,GAAO,MAAsB,eAAtBA,EAAI4hC,eACxCziC,OAAO0P,KAAK0vB,EAAMgkB,YACb5nC,OAAO,SAAA3a,GAAO,OAACulG,EAAqBvlG,KACpCiQ,IAAI,SAAA2K,GAAK,OAAC2nC,EAAO3nC,GAAK2jB,EAAMgkB,OAAO3nC,KACxCzb,OAAO0P,KAAK0vB,EAAM0jC,cACbtnD,OAAO,SAAA3a,GAAO,OAACulG,EAAqBvlG,KACpCiQ,IAAI,SAAA2K,GAAK,OAACqnD,EAASrnD,GAAK2jB,EAAM0jC,SAASrnD,KAE5C,IAAM4qF,EAAqBjnE,EAAM0jC,UAAY1jC,EAAM0jC,SAAS22B,WAAar6D,EAAM0jC,SAAS22B,cAClF6M,EAAmBlnE,EAAMgkB,QAAUhkB,EAAMgkB,OAAOq2C,WAAar6D,EAAMgkB,OAAOq2C,cAC1EA,EAAaz5F,OAAOqG,OAAOggG,EAAoBC,GAE/CC,EAA0BnnE,EAAM+7D,UAAUnzF,MAC3CwT,OAAO,SAAA4/D,GAAY,OAAAj4C,EAAKwgE,iBAAiBvoB,KACzCtqE,IAAI,SAAAsqE,GAAY,OAAGkpB,SAAQlnE,KAAOg+C,MACjCorB,GACFC,QAAOrpE,KACAgC,EAAM64D,SAEbyO,OAAMtpE,KACC0lC,EACA1f,GACEq2C,WAAUA,GACZr6D,EAAMi9D,oBACT0J,eAAcA,EACdE,WAAUA,EACVC,sBAAqBA,EACrBC,eAAcA,IAElBQ,KAAIvpE,KACGg4C,IAIXjzE,KAAKykG,iBAAmBJ,GAAoBn8E,OAAKk8E,IAG7CnB,EAAAlkG,UAAAyiG,iBAAR,SAAyBvoB,GACrB,MAAsC,WAA/BA,EAASr5C,OAAO/6B,YAA+C,IAApBo0E,EAASr5C,QAGvDqjE,EAAAlkG,UAAA0kG,+BAAR,SAAuCxmE,GACnC,IAAMonE,GACFC,QAAOrpE,KACAgC,EAAM64D,SAEbyO,OAAMtpE,KACCgC,EAAMgkB,SAIjBjhD,KAAKykG,iBAAmBJ,IA/H1BpB,EAA4B7zE,GANjCqI,EAAU,mBACPE,SAAU,wBACVkV,YAAa,+FACbe,UAAY21D,YAAa,OAE5BrrE,EAAO,+BACF+qE,GAAN,GAhF+B,CAAAn2D,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCIV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAC,GAM/BA,EAAAqjC,sBAAwB,IAAIprE,GAAGG,QAC/B4nC,EAAAsjC,sBAAwB,IAAIrrE,GAAGG,QAY5ClL,QACKrxB,OAAO,mBACPmC,QAAQ,cAAe,WAAM,OAAAk9B,EAAEisB,WAAWo8C,cAE/Ct2E,EAAAiD,QAAQ63B,qBAAqB,WACzB7sB,EAAEisB,WAAWo8C,YAAY96C,OAAOM,QAAU,SAAAiC,GACtC,OAAAgV,EAAAqjC,sBAAsBxqE,OAAOmyB,IACjC9vB,EAAEisB,WAAWo8C,YAAY96C,OAAO4xC,QAAU,SAAArvC,GACtC,OAAAgV,EAAAsjC,sBAAsBzqE,OAAOmyB,MA3BO,CAAA+U,EAAAC,aAAAD,EAAAC,gBAAb,CAAAv0B,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCPV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAC,GAG5C,IAAAwjC,EAAA,WAGI,SAAAA,EACI7rE,EACQ4rE,EACRtuB,EACQrmC,GAJZ,IAAAjP,EAAAhhC,KAEYA,KAAA4kG,cAEA5kG,KAAAiwC,sBAER,IAAM60D,EAAc,SAAC7nE,GACjB,OAAAA,GAASA,EAAMg5D,UAAYh5D,EAAMg5D,SAASh1C,QAAUhkB,EAAMg5D,SAASh1C,OAAOziB,IAE9E6iC,EAAAqjC,sBACKrrF,OAAO,SAAAgzC,GAAY,OAAAy4C,EAAY9rE,EAAMU,cAAgB2yB,IACrDlrB,SAAS,WAAM,OAAA7H,GAAG6uC,WAAW6zB,MAAM,OACnChiE,UAAU,SAAAje,GACPilB,EAAK66D,oBACLvlB,EAAgCkoB,WAGxCn9B,EAAAsjC,sBACKtrF,OAAO,SAAAgzC,GAAY,OAAAy4C,EAAY9rE,EAAMU,cAAgB2yB,IACrDryB,UAAU,WACHgH,EAAKlB,UAITkB,EAAKlB,QAAUkB,EAAKiP,oBAAoBkQ,SAAS,oBAAqB,KAClE27C,SAAU,WACN96D,EAAKlB,QAAU,QAIvBl+B,WAAW,WACHo/B,EAAKlB,UACLkB,EAAKlB,QAAU,OAEpB,QAGX9G,EAAMC,OACDtqB,IAAIm2F,GACJ5rE,uBACA6iE,cAAcztE,EAAAiD,QAAQ+3B,2BACtBnoB,SAAS,WAAM,OAAA7H,GAAG6uC,WAAW6zB,MAAM,OACnChiE,UAAU,SAAAqyB,GAAY,OAAArrB,EAAKhH,UAAUqyB,KAE1CrzB,EAAM0B,OACDsnC,MAAM,SAAA3gE,GAAK,MAAW,oCAAXA,EAAEiB,OACb03B,UAAU,SAAAnqB,GAAK,OAAAmxB,EAAKk7D,YAAY4I,EAAY9rE,EAAMU,eAqB/D,OAlBYmrE,EAAA9lG,UAAAi7B,UAAR,SAAkBqyB,GACXA,GACCrsD,KAAK4kG,YAAYzI,OAAOniE,UAAUqyB,GAEtCrsD,KAAK67F,qBAGDgJ,EAAA9lG,UAAAm9F,YAAR,SAAoB7vC,GAChBrsD,KAAK67F,oBACL77F,KAAK4kG,YAAYzI,OAAOD,YAAY7vC,IAGhCw4C,EAAA9lG,UAAA88F,kBAAR,WACQ77F,KAAK8/B,UACL9/B,KAAKiwC,oBAAoB56B,MAAMrV,KAAK8/B,SACpC9/B,KAAK8/B,QAAU,OAnEd+kE,EAAkBz1E,GAF9B2I,EAAQ,kBAAmB,sBAC3BG,EAAO,oBAAqB,cAAe,kCAAmC,wBAClE2sE,GAAb,GAAaxjC,EAAAwjC,mBAAkBA,EAHa,CAAAzjC,EAAAC,aAAAD,EAAAC,gBAAb,CAAAv0B,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCEV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAC,GAO5C,IAAOzvC,EAActD,EAASiD,QAAQK,YAWtCmzE,EAAA,SAAAzhE,GAOI,SAAAyhE,EACI/rE,EACQ4tB,EACAD,EACA1W,EACAomB,EACAoL,GANZ,IAAAzgC,EAQIsC,EAAAhmC,KAAA0C,KAAMg5B,IAAMh5B,YANJghC,EAAA4lB,sBACA5lB,EAAA2lB,mBACA3lB,EAAAiP,sBACAjP,EAAAq1B,8BACAr1B,EAAAygC,oBARJzgC,EAAAqE,SAAW,KA4XvB,OAjYqDR,EAAAkgE,EAAAzhE,GAkB1CyhE,EAAAhmG,UAAA+lC,aAAP,SAAoBunB,EAAuBhnB,EAAeomB,QAAf,IAAApmB,MAAA,SAAe,IAAAomB,OAAA,GACtDzrD,KAAKqlC,SAAWA,EAChB,IAAMpI,EAAQj9B,KAAK05B,WAEbsrE,EAAoB/nE,EAAMg5D,UAAYh5D,EAAMg5D,SAASh1C,QAAUhkB,EAAMg5D,SAASh1C,OAAOziB,KAAO6tB,EAC9F24C,GAAmBhlG,KAAKilG,mBAExBD,GAAsB/nE,EAAM27D,cAAiB37D,EAAM27D,aAAax4C,QAASqL,GACzEzrD,KAAKinC,eAAeolB,EAAU,KAAM,EAAGhnB,EAAU,SAAA+a,GAAS,OAAAA,IAE9DpgD,KAAKklG,eAGFH,EAAAhmG,UAAAq/E,WAAP,SAAkB5/C,GAAlB,IAAAwC,EAAAhhC,KACUm6B,EAAen6B,KAAK05B,WAE1B15B,KAAK4mD,oBACAu+C,YACG3mE,GAAIA,IAEP8F,SAASC,KAAK,WACXvD,EAAK8D,aACD3K,EAAa87D,SAASh1C,OAAOziB,GAC7BrE,EAAay+D,aAAax4C,MAAMv6C,MAAMhD,QACtC,GAEJm+B,EAAKw9D,SACLx9D,EAAKiP,oBAAoBzQ,QAAQ,+BAEpCwK,MAAM,WACHhJ,EAAKiP,oBAAoB1/B,MAAM,yCAIpCw0F,EAAAhmG,UAAAy/E,YAAP,SAAmBhgD,GAAnB,IAAAwC,EAAAhhC,KACUm6B,EAAen6B,KAAK05B,WAE1B15B,KAAK4mD,oBACAw+C,aACG5mE,GAAIA,IAEP8F,SAASC,KAAK,WACXvD,EAAK8D,aACD3K,EAAa87D,SAASh1C,OAAOziB,GAC7BrE,EAAay+D,aAAax4C,MAAMv6C,MAAMhD,QACtC,GAEJm+B,EAAKw9D,SACLx9D,EAAKiP,oBAAoBzQ,QAAQ,6BAEpCwK,MAAM,WACHhJ,EAAKiP,oBAAoB1/B,MAAM,yCAIpCw0F,EAAAhmG,UAAAs/E,eAAP,SAAsB7/C,GAAtB,IAAAwC,EAAAhhC,KACUm6B,EAAen6B,KAAK05B,WAE1B15B,KAAK2mD,iBACAw+C,YACG3mE,GAAIA,IAEP8F,SAASC,KAAK,WACXvD,EAAK8D,aACD3K,EAAa87D,SAASh1C,OAAOziB,GAC7BrE,EAAay+D,aAAax4C,MAAMv6C,MAAMhD,QACtC,GAEJm+B,EAAKw9D,SACLx9D,EAAKiP,oBAAoBzQ,QAAQ,sCAEpCwK,MAAM,WACHhJ,EAAKiP,oBAAoB1/B,MAAM,gDAIpCw0F,EAAAhmG,UAAA0/E,gBAAP,SAAuBjgD,GAAvB,IAAAwC,EAAAhhC,KACUm6B,EAAen6B,KAAK05B,WAE1B15B,KAAK2mD,iBACAy+C,aACG5mE,GAAIA,IAEP8F,SAASC,KAAK,WACXvD,EAAK8D,aACD3K,EAAa87D,SAASh1C,OAAOziB,GAC7BrE,EAAay+D,aAAax4C,MAAMv6C,MAAMhD,QACtC,GAEJm+B,EAAKw9D,SACLx9D,EAAKiP,oBAAoBzQ,QAAQ,oCAEpCwK,MAAM,WACHhJ,EAAKiP,oBAAoB1/B,MAAM,gDAIpCw0F,EAAAhmG,UAAAwpC,cAAP,SAAqBC,GACjB,IAAMvL,EAAQj9B,KAAK05B,WACnB,GAAKuD,EAAMg5D,UAAah5D,EAAMg5D,SAASh1C,QAAWhkB,EAAM27D,aAAxD,CAEA,IAAMtzD,EAAOrK,KACNgC,EAAM27D,aAAatzD,SACtBkD,MAAKA,IAGLnb,KAAKC,UAAU2P,EAAM27D,aAAatzD,WAAajY,KAAKC,UAAUgY,IAElEtlC,KAAKinC,eAAehK,EAAMg5D,SAASh1C,OAAOziB,GAAI8G,EAAS,EAAGtlC,KAAKqlC,SAAU,SAAA+a,GAAS,OAAAA,MAG/E2kD,EAAAhmG,UAAAsmG,iBAAP,SAAwBrsB,GACpB,IAAM/7C,EAAQj9B,KAAK05B,WACnB,GAAKuD,EAAMg5D,UAAah5D,EAAMg5D,SAASh1C,QAAWhkB,EAAM27D,aAAxD,CAEA,IAAMtzD,EAAOrK,KACNgC,EAAM27D,aAAatzD,SACtB0zC,WAAUA,IAGV3rD,KAAKC,UAAU2P,EAAM27D,aAAatzD,WAAajY,KAAKC,UAAUgY,IAElEtlC,KAAKinC,eAAehK,EAAMg5D,SAASh1C,OAAOziB,GAAI8G,EAAS,EAAGtlC,KAAKqlC,SAAU,SAAA+a,GAAS,OAAAA,MAG/E2kD,EAAAhmG,UAAAumG,yBAAP,SAAgCv+C,GAC5B,IAAM9pB,EAAQj9B,KAAK05B,WACnB,GAAKuD,EAAMg5D,UAAah5D,EAAMg5D,SAASh1C,QAAWhkB,EAAM27D,aAAxD,CAEA,IAAMtzD,EAAOrK,KACNgC,EAAM27D,aAAatzD,SACtBk0D,iBAAkBzyC,IAGlB15B,KAAKC,UAAU2P,EAAM27D,aAAatzD,WAAajY,KAAKC,UAAUgY,IAElEtlC,KAAKinC,eAAehK,EAAMg5D,SAASh1C,OAAOziB,GAAI8G,EAAS,EAAGtlC,KAAKqlC,SAAU,SAAA+a,GAAS,OAAAA,MAG/E2kD,EAAAhmG,UAAAwmG,mBAAP,SAA0BvvC,GACtB,IAAM/4B,EAAQj9B,KAAK05B,WACnB,GAAKuD,EAAMg5D,UAAah5D,EAAMg5D,SAASh1C,QAAWhkB,EAAM27D,aAAxD,CAEA,IAAMtzD,EAAOrK,KACNgC,EAAM27D,aAAatzD,SACtBm0D,mBAAoBzjC,IAGpB3oC,KAAKC,UAAU2P,EAAM27D,aAAatzD,WAAajY,KAAKC,UAAUgY,IAElEtlC,KAAKinC,eAAehK,EAAMg5D,SAASh1C,OAAOziB,GAAI8G,EAAS,EAAGtlC,KAAKqlC,SAAU,SAAA+a,GAAS,OAAAA,MAG/E2kD,EAAAhmG,UAAAymG,cAAP,SAAqBnjC,GACjB,IAAMplC,EAAQj9B,KAAK05B,WACnB,GAAKuD,EAAMg5D,UAAah5D,EAAMg5D,SAASh1C,QAAWhkB,EAAM27D,aAAxD,CAEA,IAAMtzD,EAAOrK,KACNgC,EAAM27D,aAAatzD,SACtBo0D,cAAer3B,IAGfh1C,KAAKC,UAAU2P,EAAM27D,aAAatzD,WAAajY,KAAKC,UAAUgY,IAElEtlC,KAAKinC,eAAehK,EAAMg5D,SAASh1C,OAAOziB,GAAI8G,EAAS,EAAGtlC,KAAKqlC,SAAU,SAAA+a,GAAS,OAAAA,MAG/E2kD,EAAAhmG,UAAA2pC,eAAP,SAAsBkxC,GAClB,IAAM38C,EAAQj9B,KAAK05B,WACnB,GAAKuD,EAAMg5D,UAAah5D,EAAMuB,IAAOvB,EAAM27D,aAA3C,CAEA,IAAMtzD,EAAOrK,KACNgC,EAAM27D,aAAatzD,SACtB1F,OAAQg6C,IAERvsD,KAAKC,UAAU2P,EAAM27D,aAAatzD,WAAajY,KAAKC,UAAUgY,IAClEtlC,KAAKinC,eAAehK,EAAMuB,GAAI8G,EAAS,EAAGtlC,KAAKqlC,SAAU,SAAA+a,GAAS,OAAAA,MAG/D2kD,EAAAhmG,UAAA0mG,gBAAP,SAAuBC,GACnB,IAAMzoE,EAAQj9B,KAAK05B,WACnB,GAAKuD,EAAMg5D,UAAah5D,EAAMg5D,SAASh1C,QAAWhkB,EAAM27D,aAAxD,CAEA,IAAMtzD,EAAOrK,KACNgC,EAAM27D,aAAatzD,SACtB48B,QAAStwC,EAAY8zE,KAGrBr4E,KAAKC,UAAU2P,EAAM27D,aAAatzD,WAAajY,KAAKC,UAAUgY,IAElEtlC,KAAKinC,eAAehK,EAAMg5D,SAASh1C,OAAOziB,GAAI8G,EAAS,EAAGtlC,KAAKqlC,SAAU,SAAA+a,GAAS,OAAAA,MAG/E2kD,EAAAhmG,UAAAg2E,SAAP,WACI,IAAM93C,EAAQj9B,KAAKg5B,MAAMU,WACpBuD,EAAMg5D,UAAah5D,EAAMg5D,SAASh1C,QAAWhkB,EAAM27D,cAExD54F,KAAKinC,eACDhK,EAAMg5D,SAASh1C,OAAOziB,GACtBvB,EAAM27D,aAAatzD,QACnBrI,EAAM27D,aAAax4C,MAAM3Y,KAAO,EAChCxK,EAAM27D,aAAax4C,MAAM/a,SACzB,SAAA+a,GAAS,OACLv6C,MACIo3B,EAAM27D,cAAgB37D,EAAM27D,aAAax4C,MACnCnjB,EAAM27D,aAAax4C,MAAMv6C,MAAMqiB,OAAOk4B,EAAMv6C,OAC5Cu6C,EAAMv6C,MAChBqgC,MAAOka,EAAMla,MACbuB,KAAM2Y,EAAM3Y,KACZpC,SAAU+a,EAAM/a,aAKrB0/D,EAAAhmG,UAAAy/F,OAAP,WACI,IAAMvhE,EAAQj9B,KAAKg5B,MAAMU,WACzB,GAAKuD,EAAMg5D,UAAah5D,EAAMg5D,SAASh1C,QAAWhkB,EAAM27D,cAAiB37D,EAAM27D,aAAax4C,MAA5F,CAEA,IAAMulD,EAAwB1oE,EAAM27D,aAAax4C,MAAMv6C,MAAMhD,OAC7D7C,KAAKinC,eACDhK,EAAMg5D,SAASh1C,OAAOziB,GACtBvB,EAAM27D,aAAatzD,QACnB,EACAqgE,EAAwB,GAAK,GAAKA,EAClC,SAAAvlD,GAAS,OAAAA,MAIT2kD,EAAAhmG,UAAAkmG,gBAAR,WACIjlG,KAAKihC,MACD3+B,KAAM,sCAINyiG,EAAAhmG,UAAAkoC,eAAR,SACIolB,EACA/mB,EACAmC,EACApC,EACAimB,GALJ,IAAAtqB,EAAAhhC,KAQQwC,OAAOm7B,cACPn7B,OAAOm7B,aAAazC,UACpB14B,OAAOm7B,aAAazC,SAAS53B,KAAK,SAAAgW,GAAK,MAAW,0BAAXA,EAAE5b,OAE7CsC,KAAKihC,MACD3+B,KAAM,qCACNgjC,QAAOA,EACPmC,KAAIA,EACJpC,SAAQA,IAGIrlC,KAAK4mD,oBAAoBg/C,4BACrCn+D,KAAIA,EACJpC,SAAQA,EACR7G,GAAI6tB,EACJ7jB,MAAOlD,EAAUA,EAAQkD,MAAQ,GACjCue,SAAUzhB,EAAUA,EAAQk0D,iBAAmB,GAC/CxgB,WAAY1zC,EAAUA,EAAQ0zC,WAAa,GAC3C6sB,OAAQvgE,GAAWA,EAAQm0D,oBAAsBn0D,EAAQm0D,uBACzDqM,OAAQxgE,GAAWA,EAAQo0D,eAAiBp0D,EAAQo0D,kBACpD95D,OAAQ0F,GAAWA,EAAQ1F,OAC3BsiC,QAAS58B,GAAWA,EAAQ48B,UAC7B59B,SAGEC,KAAK,SAAAmD,GACF1G,EAAK+kE,uDAAuDr+D,GAC5D,IAAM0Y,EAAQkL,EAAO5jB,GAErB1G,EAAKC,MACD3+B,KAAM,oCACNgjC,QAAOA,EACP8a,MAAKnlB,KACEmlB,GACH3Y,KAAIA,EACJpC,SAAQA,QAInB2E,MAAMhqC,KAAKgmG,UAGZjB,EAAAhmG,UAAAinG,QAAR,SAAgB3kG,GACZrB,KAAKiwC,oBAAoB1/B,MAAM,sDAC/BvQ,KAAKihC,MACD3+B,KAAM,uCACNiO,MAAOlP,KAIR0jG,EAAAhmG,UAAA05E,WAAP,SAAkBv0C,GACd,GAAKA,EAAL,CAEA,IAAMjH,EAAQj9B,KAAKg5B,MAAMU,WACnBk/D,EAAe37D,GAASA,EAAM27D,aAC9Bx4C,EAAQw4C,GAAgBA,EAAax4C,MACrC6lD,EAAYhrE,KACXmlB,GACHv6C,MAAOu6C,EAAMv6C,MAAMwT,OAAO,SAAAC,GAAK,OAAAA,EAAE0qB,KAAKxF,KAAO0F,IAC7CgC,MAAOka,EAAMla,MAAQ,IAGnBZ,EAAUszD,GAAgBA,EAAatzD,QAE7CtlC,KAAKihC,MACD3+B,KAAM,oCACNgjC,QAAOA,EACP8a,MAAO6lD,MAIRlB,EAAAhmG,UAAA46E,gBAAP,WACI,OAAO35E,KAAKg5B,MAAMC,OAAOtqB,IAAI,SAAA2K,GAAK,OAAAA,EAAEs/E,cAAgBt/E,EAAEs/E,aAAatzD,SAAWhsB,EAAEs/E,aAAatzD,QAAQ1F,UAGjGmlE,EAAAhmG,UAAAgnG,uDAAR,SAA+Dr+D,GAC3D,IAAmB,IAAAtP,EAAA,EAAAwE,EAAA8K,EAAK7hC,MAALuyB,EAAAwE,EAAA/5B,OAAAu1B,IAAY,CAA1B,IAAMz4B,EAAIi9B,EAAAxE,GACPz4B,EAAKumG,gBAAevmG,EAAKumG,cAAcliE,KAAOrkC,EAAKqkC,MAEnDrkC,EAAKwmG,eAAcxmG,EAAKwmG,aAAaniE,KAAOrkC,EAAKqkC,QAIrD+gE,EAAAhmG,UAAAmmG,YAAR,WACI,IAAMjoE,EAAQj9B,KAAK05B,WACb4L,EAAUrI,EAAM27D,cAAgB37D,EAAM27D,aAAatzD,QAEpDA,GAAYA,EAAQ+zD,uBAAuBr5F,KAAKomG,yBAEhD9gE,GAAYA,EAAQg0D,cAAct5F,KAAKqmG,8BAEvC/gE,GAAYA,EAAQi0D,UAAUv5F,KAAK0iE,gBAGpCqiC,EAAAhmG,UAAAqnG,uBAAR,eAAAplE,EAAAhhC,KACIA,KAAK2mD,iBAAiB2/C,gBAAgBhiE,SAASC,KAAK,SAAA61D,GAChDp5D,EAAKC,MACD3+B,KAAM,4CACN83F,WAAYp5D,EAAKulE,yBAAyBnM,QAK9C2K,EAAAhmG,UAAAsnG,4BAAR,eAAArlE,EAAAhhC,KACIA,KAAKq2D,4BAA4B0Y,SAASzqC,SAASC,KAAK,SAAAwyB,GACpD,IAAMyvC,EAAoBzvC,EAAU19C,OAAO,SAAAq9C,GAAY,OAAAA,EAAS+vC,iBAChEzlE,EAAKC,MACD3+B,KAAM,sCACNy0D,UAAWyvC,OAKfzB,EAAAhmG,UAAA2jE,aAAR,eAAA1hC,EAAAhhC,KACIA,KAAKyhE,kBAAkB2B,cAAc9+B,SAASC,KAAK,SAAA8+B,GAC/CriC,EAAKC,MACD3+B,KAAM,kCACN+gE,KAAIA,OAKR0hC,EAAAhmG,UAAAwnG,yBAAR,SAAiCnM,GAC7B,OAAOA,EAAW/gF,OAAO,SAAAC,GAAK,MAAW,uBAAXA,EAAE5b,OAA+B2b,OAAO,SAAAC,GAAK,MAAW,aAAXA,EAAE5b,QA/XxEqnG,EAA+B31E,GAT3C2I,EAAQ,kBAAmB,mCAC3BG,EACG,oBACA,sBACA,mBACA,sBACA,8BACA,sBAES6sE,GAAb,CAAqDz2E,EAAAyS,kBAAxCsgC,EAAA0jC,gCAA+BA,EAlBA,CAAA3jC,EAAAC,aAAAD,EAAAC,gBAAb,CAAAv0B,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCGV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAC,GAO5C,SAASvoC,EAAS55B,GACd,OACIu/C,UACMv/C,IACDA,EAAE+2F,WACF/2F,EAAE+2F,SAASh1C,QACZ/hD,EAAE+2F,SAASx3C,SACVv/C,EAAE+2F,SAASh1C,OAAOqN,MAAgB,YAAOpvD,EAAEy5F,kBAAoBz5F,EAAEy5F,iBAAiBl6C,aACjFv/C,IAAMA,EAAEk6F,mBAAqBl6F,EAAEk6F,iBAAiBkB,eAAiBp7F,EAAEk6F,iBAAiB36C,SAC1FwC,OAAQ/hD,GAAKA,EAAE+2F,UAAY/2F,EAAE+2F,SAASh1C,OACtCm4C,iBAAkBl6F,GAAKA,EAAEk6F,kBAAoBl6F,EAAEk6F,iBAAiBkB,cAChE35B,SAAUzhE,GAAKA,EAAEu5F,cAAgBv5F,EAAEu5F,aAAa93B,SAChDg4B,iBAAkBz5F,GAAKA,EAAEy5F,iBACzBC,aAAc15F,GAAKA,EAAE05F,aACrBe,yBAA0Bz6F,GAAKA,EAAEy6F,yBACjC/iC,qBAAsB13D,GAAKA,EAAEy6F,0BAA4Bz6F,EAAEy6F,yBAAyB5iC,WAI5FxoC,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,SAACsmB,GACG,OAAAA,EAAepkB,MAAM,yCACjBkB,IAAK,mDACL2zB,gBAAgB,EAChBpqB,MAAQ8nD,IAAK,WAAYhsC,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,eAC7C9sC,OACIokD,wBACIvtD,SAAU,sFACVzhB,WAAYpJ,EAASsK,+BAGnB,oBAAqB,SAAA15B,GAAK,OACxB+hD,OAAQ/hD,GAAKA,EAAE+2F,UAAY/2F,EAAE+2F,SAASh1C,OACtCzY,MAAOtpC,GAAKA,EAAE05F,cAAgB15F,EAAE05F,aAAatzD,SAAWpmC,EAAE05F,aAAatzD,QAAQkD,MAC/EyxD,iBACI/6F,GAAKA,EAAE05F,cAAgB15F,EAAE05F,aAAatzD,SAAWpmC,EAAE05F,aAAatzD,QAAQ0zC,WAC5E2tB,mBACIznG,GACAA,EAAE05F,cACF15F,EAAE05F,aAAatzD,SACfpmC,EAAE05F,aAAatzD,QAAQ+zD,sBAC3BuN,iBACI1nG,GACAA,EAAE05F,cACF15F,EAAE05F,aAAatzD,SACfpmC,EAAE05F,aAAatzD,QAAQk0D,iBAC3BF,aACIp6F,GAAKA,EAAEs5F,aAAet5F,EAAE05F,aAAatzD,SAAWpmC,EAAE05F,aAAatzD,QAAQg0D,aAC3EC,SAAUr6F,GAAKA,EAAEs5F,aAAet5F,EAAE05F,aAAatzD,SAAWpmC,EAAE05F,aAAatzD,QAAQi0D,aAGzF7I,uBACIv3C,SAAU,0EACVzhB,WAAYpJ,EAAAsK,+BAA+B,oBAAqBE,KAGxE0pB,SACI,eACA,kCACA,sCACA,sCACA,SACImQ,EACAk0C,EACAC,GAEKn0C,EAAatG,WAElBw6C,EAAgB/hE,aAAa6tB,EAAatG,UACtC7pD,OAAOi9B,KAAKmB,YAAY+yD,kBAAkBmT,EAAoBhiE,uBA7E1C,CAAAs8B,EAAAC,aAAAD,EAAAC,gBAAb,CAAAv0B,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCHV,SAAUA,GAEN,IAAAy4E,EAAA,WASI,SAAAA,IARQ/mG,KAAAgnG,eAAiB,IACjBhnG,KAAAinG,aAAe,IACfjnG,KAAAknG,gBACJC,cAAe,mBACfC,aAAc,IACdC,QAASrnG,KAAKgnG,gBAIdM,OAAOxnG,QAAUE,KAAKknG,eAyC9B,OAtCWH,EAAAhoG,UAAAs4C,KAAP,SAAYxV,EAAcugD,QAAA,IAAAA,MAAmBpiF,KAAKgnG,gBAC9C,IAAMlnG,EAAOm7B,KAAQj7B,KAAKknG,gBAAgBG,QAASjlB,IACnD,OAAOklB,OAAOjwD,KAAKxV,EAAM,GAAI/hC,IAG1BinG,EAAAhoG,UAAAygC,QAAP,SAAeqC,EAAcugD,QAAA,IAAAA,MAAmBpiF,KAAKgnG,gBACjD,IAAMlnG,EAAOm7B,KAAQj7B,KAAKknG,gBAAgBG,QAASjlB,IACnD,OAAOklB,OAAO9nE,QAAQqC,EAAM,GAAI/hC,IAG7BinG,EAAAhoG,UAAA2oF,QAAP,SAAe7lD,EAAcugD,QAAA,IAAAA,MAAmBpiF,KAAKgnG,gBACjD,IAAMlnG,EAAOm7B,KAAQj7B,KAAKknG,gBAAgBG,QAASjlB,IACnD,OAAOklB,OAAO5f,QAAQ7lD,EAAM,GAAI/hC,IAG7BinG,EAAAhoG,UAAAwR,MAAP,SAAasxB,EAAcugD,QAAA,IAAAA,MAAmBpiF,KAAKinG,cAC/C,IAAMnnG,EAAOm7B,KAAQj7B,KAAKknG,gBAAgBG,QAASjlB,IACnD,OAAOklB,OAAO/2F,MAAMsxB,EAAM,GAAI/hC,IAG3BinG,EAAAhoG,UAAAohD,SAAP,SAAgBte,EAAcugD,EAAwCtiF,QAAxC,IAAAsiF,MAAmBpiF,KAAKgnG,qBAAgB,IAAAlnG,UAClE,IAAMynG,EAAatsE,KACZj7B,KAAKknG,gBACRG,QAASjlB,EACT+kB,cAAe,6BACfK,WAAY,oBACT1nG,GAEP,OAAOwnG,OAAOjwD,KAAKxV,EAAM,GAAI0lE,IAG1BR,EAAAhoG,UAAAsW,MAAP,SAAaitF,GACTgF,OAAOjyF,MAAMitF,IAGVyE,EAAAhoG,UAAA0oG,SAAP,WACIH,OAAOjyF,SAjDF0xF,EAAmB33E,GAD/B2I,EAAQ,WAAY,wBACRgvE,GAAb,GAAaz4E,EAAAy4E,oBAAmBA,EAFpC,CAAUz4E,WCCV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAAs0B,eAAAt0B,EAAAs0B,iBAmB/B,WAMI,SAAAsmC,EACY1kD,EACAmuC,EACAgE,EACAllD,GAHAjwC,KAAAgjD,YACAhjD,KAAAmxF,YACAnxF,KAAAm1F,uBACAn1F,KAAAiwC,sBAGLy3D,EAAA3oG,UAAAqtC,QAAP,WACIpsC,KAAK2nG,cACDnpE,GAAIx+B,KAAKmxF,UACT7qD,QAAS,IAAI7J,KACbwM,UAAW,KACX1C,YAAa,GACbqhE,QAAS,KACTC,YAAY,EACZ3tB,eAAgB,KAChB4tB,SAAU,KACVC,MAAO,EACPC,UAAWhoG,KAAKqsD,UAAYrsD,KAAKqsD,aACjCirC,WAAY,KACZ2Q,mBAAoBjoG,KAAKkoG,mBAClBloG,KAAKkoG,sBAEZC,UAAW,KACXtoG,MAAO,GACPs+B,IAAK,GACLiqE,eAAgB,OAIjBV,EAAA3oG,UAAAynD,OAAP,WACIxmD,KAAKgjD,UAAUwD,UAGZkhD,EAAA3oG,UAAAspG,KAAP,eAAArnE,EAAAhhC,KACIA,KAAK2nG,aAAarhE,QAAU,IAAI7J,KAEhCz8B,KAAKm1F,qBACAkT,KAAKroG,KAAK2nG,cACVrjE,SAASC,KAAK,WACXvD,EAAKiP,oBAAoBzQ,QACrB,mCAEJwB,EAAKgiB,UAAUzM,SAElBvM,MAAM,WACH,OAAAhJ,EAAKiP,oBAAoB1/B,MACrB,2DAKTm3F,EAAA3oG,UAAAupG,eAAP,WACItoG,KAAK2nG,aAAaQ,UAAY,MAG3BT,EAAA3oG,UAAAwpG,aAAP,WACIvoG,KAAK2nG,aAAaC,QAAU,MA/D9BF,EAAkCt4E,GAfvCqI,EAAU,mBACPE,SAAU,8BACVkV,YACI,+GACJe,UACIye,SAAU,IACV67C,kBAAmB,OAG1BhwE,EACG,YACA,YACA,uBACA,wBAEEwvE,GAAN,GAnBe,CAAAp5E,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCHV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA8C,GAGvB,IAAAm0E,EAAA,WACI,SAAAA,EAAoBrX,GAAAnxF,KAAAmxF,YA6DxB,OA3DIqX,EAAAzpG,UAAA0pG,0BAAA,SACIpiE,EACAqgC,EACAhpE,EACA4G,EACA69C,GAEA,OACI3jB,GAAIx+B,KAAKmxF,UACThvC,OAAMA,EACN9b,SAAQA,EACRqgC,OAAMA,EACNzmE,KAAM,KACN7B,MAAO,KACPV,KAAIA,EACJ4G,MAAKA,EACLokG,SAAUvmD,EAASA,EAAO3jB,GAAK,KAC/B1+B,aAIR0oG,EAAAzpG,UAAA4pG,eAAA,SAAeP,GACX,YADW,IAAAA,WAGPA,eAAcA,EACdroD,SACA6oD,iBAAkB,KAClB1jC,gBAGA2jC,uBAAwB,GACxBxkC,QAAS,KACThB,QACAylC,YAGApiC,OAAQ,GACRqiC,OAAQ,KACRziE,QAAS,IAAI7J,KACb2yC,SACI1xE,KAAM22B,EAAAC,QAAQyqD,QAAQl6E,WACtBzG,MAAOi2B,EAAAC,QAAQyqD,SAEnBr4C,aAAc,KACdwzC,eAAgB,KAChB8uB,cAAe,KACf3iE,SAAU,GACV4iE,SAAU,KACVrpE,OAAQvL,EAAAE,kBAAkB20E,UAGlCV,EAAAzpG,UAAAoqG,4BAAA,WACI,OAAOnpG,KAAKyoG,0BAA0B,GAAI,GAAI,GAAI,EAAG,OAEzDD,EAAAzpG,UAAAqqG,0CAAA,SACIjnD,GAEA,OAAOniD,KAAKyoG,0BAA0B,GAAI,GAAI,GAAI,EAAGtmD,IA5DhDqmD,EAAUp5E,GAFtB2I,EAAQ,gBAAiB,cACzBG,EAAO,cACKswE,GAAb,GAAan0E,EAAAm0E,WAAUA,EAHA,CAAAj3E,EAAA8C,gBAAA9C,EAAA8C,mBAAR,CAAA/F,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA8C,GAAcA,EAAAg1E,MAAAh1E,EAAAg1E,QA2CrC96E,QAAQrxB,OAAO,iBAAiBsxB,QAAQ,oBACpC,YACA,SAACC,GACG,OAAOA,EACH,qCAGI4V,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB6pE,MACI35E,OAAQ,OACR1gB,SAAS,EACT2gB,WAEJla,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,WAEJ26E,YACI56E,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,SACRxQ,GAAI,GACJiJ,KAAM,EACNpC,SAAU,GACVkkE,cAAe,OAGvBx6B,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,MACRvH,KAAM,EACNpC,SAAU,GACVkkE,cAAe,YAnFhB,CAAAh4E,EAAA8C,gBAAA9C,EAAA8C,mBAAR,CAAA/F,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCIV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAsBf,WAII,SAAA08D,EACYxmD,EACAmuC,EACAsY,EACAx5D,EACAy5D,EACAC,GALA3pG,KAAAgjD,YACAhjD,KAAAmxF,YACAnxF,KAAAypG,mBACAzpG,KAAAiwC,sBACAjwC,KAAA0pG,aACA1pG,KAAA2pG,sBAGLH,EAAAzqG,UAAAqtC,QAAP,eAAApL,EAAAhhC,KACIA,KAAKomC,IAAMpmC,KAAK0pG,WAAWf,iBAC3B3oG,KAAKomC,IAAIxG,OAAStR,EAAAiD,QAAQ8C,cAAcE,kBAAkBq1E,SAC1D5pG,KAAK2pG,oBAAoB56D,OACpBzK,SACAC,KAAK,SAAAghD,GAAO,OAAAvkD,EAAKoF,IAAIgiE,gBAAkB7iB,EAAI/mD,OAG7CgrE,EAAAzqG,UAAAynD,OAAP,WACIxmD,KAAKgjD,UAAUwD,UAGZgjD,EAAAzqG,UAAAspG,KAAP,SAAYjiE,GAAZ,IAAApF,EAAAhhC,KACSomC,GAAQpmC,KAAKG,MAElBH,KAAKomC,IAAIi+B,QAAUrkE,KAAKG,IACxBH,KAAKomC,IAAIi9B,MAAQrjE,KAAKG,KAEtBH,KAAKypG,iBACApB,KAAKjiE,GACL9B,SAASC,KAAK,SAAA6B,GACXpF,EAAKiP,oBAAoBzQ,QACrB,8BAEJwB,EAAKgiB,UAAUzM,KAAKnQ,KAEvB4D,MAAM,WACH,OAAAhJ,EAAKiP,oBAAoB1/B,MACrB,uDAzCdi5F,EAAyBp6E,GAhB9BqI,EAAU,mBACPE,SAAU,qBACVkV,YACI,6FACJe,UACIztC,IAAK,OAGZ+3B,EACG,YACA,YACA,mBACA,sBACA,aACA,wBAEEsxE,GAAN,GAtBJ,CAAUl7E,WCJV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAC,IAAW,SAAA1tC,IA8DvD,SAAYirE,GACRA,IAAA,+BACAA,IAAA,aACAA,IAAA,eAHJ,CAAYjrE,EAAAirE,gBAAAjrE,EAAAirE,mBA9D2C,CAAAv9B,EAAA1tC,eAAA0tC,EAAA1tC,kBAAX,CAAAytC,EAAAC,aAAAD,EAAAC,gBAAb,CAAAv0B,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCGV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAC,IAAW,SAAA1tC,GACvD,IAAO/B,EAActD,EAASiD,QAAQK,YA0ZzB+B,EAAAiuC,0BAA4BR,EAAAy0B,kBAAkBlnF,KAIrD3Q,IAAK,SAAAkB,GAAK,OAAAA,GAAKA,EAAEy6F,0BAA0BvmF,IAAK,SAAClU,EAAGqQ,GAAM,OAnBhE,SACIrQ,EACA8/C,GAEA,OAAA/jB,KACO/7B,GACHy6F,yBAA0B36C,IAa8B5rC,CAAIlU,EAAGqQ,KA3QvE,SACIlO,GAEA,OAAQA,EAAEiB,MACN,IAAK,2CACD,OAAO,SAAApD,GAAK,OAAA+7B,KACL/7B,GACH4iE,oBAAqBzgE,EAAEohE,YACvB6B,YAAa,KACbd,YAAa,KACbe,iBAAkB,KAClBs1B,SACIp7C,SAAS,EACT4kB,SAEJy2B,QAAS,QAGjB,IAAK,0CACD,OAAO,SAAA56F,GAAK,OAAA+7B,KACL/7B,GACH4iE,oBAAqBlwC,EAAYmwC,QACjCuC,YAAa,KACbd,YAAa,KACbe,iBAAkB,KAClB/7B,MAAO,GACPqxD,QAAS,KACTC,QAAS,QAGjB,IAAK,oDACD,OAAO,SAAA56F,GAAK,OAAA+7B,KACL/7B,GACH63D,UAAW11D,EAAE01D,aAGrB,IAAK,sCACD,OAAO,SAAA73D,GAAK,OAAA+7B,KACL/7B,GACH26F,SACIp7C,SAAS,EACT4kB,KAAMhiE,EAAEgiE,SAIpB,IAAK,uCACD,OAAO,SAAAnkE,GAAK,OAAA+7B,KACL/7B,GACHolE,YAAajjE,EAAElB,IACfqjE,YAAa,KACbh7B,MAAO,GACPqxD,SACIp7C,QAASp9C,EAAElB,MAAQkB,EAAElB,IAAIgiD,OACzBkhB,SAEJy2B,QAAS,QAGjB,IAAK,uCACD,OAAO,SAAA56F,GAAK,OAAA+7B,KACL/7B,GACH46F,SACIr7C,SAAS,EACTgsC,MACIvkD,MAAOhnC,EAAE46F,SAAW56F,EAAE46F,QAAQrP,KAAKvkD,MACnCuB,KAAMpmC,EAAEomC,KACRpC,SAAUhkC,EAAEgkC,SACZx/B,MAAO3G,EAAE46F,SAAW56F,EAAE46F,QAAQrP,KAAK5kF,OAEvCgkG,WAAY3qG,EAAE46F,SAAW56F,EAAE46F,QAAQ+P,eAI/C,IAAK,sCACD,OAAO,SAAA3qG,GAAK,OAAA+7B,KACL/7B,GACH46F,SACIr7C,SAAS,EACTgsC,KAAMppF,EAAEopF,KACRof,WAAY3qG,EAAE46F,SAAW56F,EAAE46F,QAAQ+P,eAI/C,IAAK,uCACD,OAAO,SAAA3qG,GAAK,OAAA+7B,KACL/7B,GACHskE,YACItkE,EAAEskE,aAAetkE,EAAEskE,YAAYhlC,KAAOn9B,EAAE+kC,IAAI5H,GACtC,KACAn9B,EAAE+kC,IACZs+B,oBAAqB,KACrBE,2BAA4B,QAGpC,IAAK,0CACD,OAAO,SAAA1lE,GAAK,OAAA+7B,KACL/7B,GACHwlE,oBAAqBrjE,EAAEsiE,eAG/B,IAAK,+CACD,OAAO,SAAAzkE,GAAK,OAAA+7B,KACL/7B,GACH0lE,2BAA4BvjE,EAAEwiE,sBAGtC,IAAK,4CACD,OAAO,SAAA3kE,GAAK,OAAA+7B,KACL/7B,GACHqlE,iBAAkBljE,EAAEq1D,YAG5B,IAAK,yCACD,OAAO,SAAAx3D,GAAK,OAAA+7B,KACL/7B,GACH06F,cAAev4F,EAAE4hE,SAGzB,IAAK,qCACD,OAAO,SAAA/jE,GAAK,OAAA+7B,KACL/7B,GACHspC,MAAOnnC,EAAEmnC,MACTsxD,SACIr7C,SAAS,EACTgsC,MACIvkD,MAAO,EACPuB,KAAM,EACNpC,SAAU,EACVx/B,UAEJgkG,WAAY3qG,EAAE46F,SAAW56F,EAAE46F,QAAQ+P,eAI/C,IAAK,oCACD,OAAO,SAAA3qG,GAAK,OAAA+7B,KACL/7B,GACH46F,SACIr7C,SAAS,EACTgsC,KAAMppF,EAAEopF,KACRof,WAAY3qG,EAAE46F,SAAW56F,EAAE46F,QAAQ+P,eAG/C,IAAK,6CACD,OAAO,SAAA3qG,GAAK,OAAA+7B,KACL/7B,GACH46F,QAAO7+D,KACA/7B,EAAE46F,SACL+P,WAAYxoG,EAAEyoG,aAG1B,IAAK,4CACD,OAAO,SAAA5qG,GAAK,OAAA+7B,KACL/7B,GACH46F,QAAO7+D,KACA/7B,EAAE46F,SACL+P,WAAU5uE,KACH/7B,EAAE46F,QAAQ+P,YACbrrE,GAAI,KACJurE,QAAQ,MAGhBhQ,wBAAyB76F,EAAE66F,wBAC3BC,qBAAsB96F,EAAE86F,wBAEhC,IAAK,2CACD,OAAO,SAAA96F,GAAK,OAAA+7B,KACL/7B,GACHskE,YAAaniE,EAAE+kC,IACf0zD,QAAO7+D,KACA/7B,EAAE46F,SACL+P,YACIrrE,GAAIn9B,EAAE+kC,IAAI5H,GACV6H,SAAUhlC,EAAE+kC,IAAIC,SAChBqgC,OAAQrlE,EAAE+kC,IAAIsgC,OACdqjC,QAAQ,QAIxB,IAAK,+CACD,OAAO,SAAA7qG,GAAK,OAAA+7B,KACL/7B,GACH46F,QAAO7+D,KACA/7B,EAAE46F,SACL+P,WAAY,UAGxB,IAAK,sCACD,OAAO,SAAA3qG,GAAK,OAAA+7B,KACL/7B,GACHspC,MAAO,GACPuxD,wBAAyB,KACzBz1B,YAAa,KACbd,YAAa,KACbs2B,QAAS,KACTD,QAAS,KACTD,cAAejmE,EAAAirE,cAAcrH,QAErC,IAAK,mCACD,OAAO,SAAAr4F,GAAK,OAAA+7B,KACL/7B,GACH86F,sBACI+P,QAAQ,EACRhmE,KAAM1iC,EAAE0iC,KACRxzB,MAAO,SAGnB,IAAK,kCACD,OAAO,SAAArR,GAAK,OAAA+7B,KACL/7B,GACHspC,MAAO,GACPwxD,qBAAsB,KACtB11B,YAAa,KACbd,YAAa,KACbs2B,QAAS,KACTD,QAAS,KACTD,cAAejmE,EAAAirE,cAAcrH,QAErC,IAAK,qCACD,OAAO,SAAAr4F,GAAK,OAAA+7B,KACL/7B,GACH86F,sBACI+P,QAAQ,EACRhmE,KAAM7kC,EAAE86F,qBAAqBj2D,KAC7BxzB,MAAOlP,EAAEkP,UAIrB,IAAK,2BACD,OAAO,SAAArR,GAAK,OAAA+7B,KACL/7B,GACH+lE,iBACIxmB,SAAS,EACTymB,oBAIZ,IAAK,0BACD,OAAO,SAAAhmE,GAAK,OAAA+7B,KACL/7B,GACH+lE,iBACIxmB,SAAS,EACTymB,aAAc7jE,EAAE6jE,oBAtYmB,CAAA7D,EAAA1tC,eAAA0tC,EAAA1tC,kBAAX,CAAAytC,EAAAC,aAAAD,EAAAC,gBAAb,CAAAv0B,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA4F,GAevB,IAAA6yE,EAAA,WAKA,OAJI,SACWr+B,EACA5G,GADA/kE,KAAA2rE,kBACA3rE,KAAA+kE,sBAHf,GAAa5tC,EAAA6yE,kBAAiBA,EAO9B,IAAAC,EAAA,WAKA,OAJI,SACWt+B,EACAu+B,GADAlqG,KAAA2rE,kBACA3rE,KAAAkqG,sBAHf,GAAa/yE,EAAA8yE,kBAAiBA,EAO9B17E,QAAQrxB,OAAO,mBAAmBsxB,QAAQ,2BACtC,YACA,SAACC,GACG,OAAAA,EACI,uCAGIo7C,UACIn7C,OAAQ,OACRsgB,OAAQ,GACRhhC,SAAS,EACT2gB,WAEJwZ,QACIzZ,OAAQ,SACRsgB,OAAQ,GACRhhC,SAAS,EACT2gB,WAEJ+8C,wBACIh9C,OAAQ,OACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,2BAEtBm7D,wBACIz7E,OAAQ,OACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,gCAxDf,CAAAzd,EAAA4F,WAAA5F,EAAA4F,cAAR,CAAA7I,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCHV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAC,GAAWA,EAAA1tC,eAAA0tC,EAAA1tC,iBAgCvD,WASI,SAAAy2E,KAEOA,EAAArrG,UAAAsrG,aAAP,WACIrqG,KAAKsqG,oBAGFF,EAAArrG,UAAA+2D,cAAP,SAAqBoM,GACjBliE,KAAKuqG,mBAAoBnsG,MAAO8jE,KAG7BkoC,EAAArrG,UAAA4jE,UAAP,SAAiBxiE,GACbH,KAAKwqG,eAAgBpsG,MAAO+B,KAGzBiqG,EAAArrG,UAAA0rG,eAAP,SAAsBtqG,GAClB,OAAOmuB,EAAAiD,QAAQ8C,cAAco2E,eAAetqG,IAGzCiqG,EAAArrG,UAAAmqF,MAAP,WACIlpF,KAAK0qG,WA5BPN,EAAoCh7E,GAfzCqI,EAAU,iBACPE,SAAU,iCACVkV,YACI,gIACJe,UACI+8D,SAAU,IACVzoC,QAAS,IACT/hE,IAAK,IACLmqG,iBAAkB,IAClBC,kBAAmB,IACnBC,cAAe,IACfI,SAAU,IACVF,QAAS,QAGXN,GAAN,GAhC4C,CAAAhpC,EAAAC,aAAAD,EAAAC,gBAAb,CAAAv0B,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAC,GAAWA,EAAA1tC,eAAA0tC,EAAA1tC,iBAcvD,oBAAAk3E,KAIWA,EAAA9rG,UAAA+2D,cAAP,SAAqBoM,GACjBliE,KAAKuqG,mBAAoBnsG,MAAO8jE,KALlC2oC,EAA+Cz7E,GATpDqI,EAAU,iBACPE,SAAU,6CACVkV,YACI,sJACJe,UACIsoB,SAAU,IACVq0C,kBAAmB,QAGrBM,GAAN,GAd4C,CAAAzpC,EAAAC,aAAAD,EAAAC,gBAAb,CAAAv0B,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAC,GAAWA,EAAA1tC,eAAA0tC,EAAA1tC,iBAWvD,oBAAAm3E,KAIWA,EAAA/rG,UAAA0rG,eAAP,SAAsBtqG,GAClB,OAAOmuB,EAAAiD,QAAQ8C,cAAco2E,eAAetqG,IAGzC2qG,EAAA/rG,UAAAgsG,WAAP,SAAkB5qG,GACdH,KAAKwqG,eAAgBpsG,MAAO+B,KAT9B2qG,EAAuC17E,GAT5CqI,EAAU,iBACPE,SAAU,qCACVkV,YACI,sIACJe,UACIxH,IAAK,IACLokE,cAAe,QAGjBM,GAAN,GAX4C,CAAA1pC,EAAAC,aAAAD,EAAAC,gBAAb,CAAAv0B,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAC,GAAWA,EAAA1tC,eAAA0tC,EAAA1tC,iBAevD,WAMI,SAAAq3E,EACYtpC,EACA2U,GADAr2E,KAAA0hE,cACA1hE,KAAAq2E,8BAGL20B,EAAAjsG,UAAAqtC,QAAP,eAAApL,EAAAhhC,MACSA,KAAKirG,UAAYjrG,KAAKsiE,OACvBtiE,KAAK0hE,YACAr9B,SAAU7F,GAAIx+B,KAAKsiE,QACnBh+B,SAASC,KACN,SAAAmD,GAAQ,OAAC1G,EAAKiqE,SAAWvjE,EAAKkhE,oBAIvCoC,EAAAjsG,UAAAmsG,aAAP,SACIC,EACAC,GAEAprG,KAAKqrG,aAAeD,EACpBprG,KAAKq2E,4BAA4BzS,uBAC7BwnC,GAAUA,EAAO5sE,IAErB2sE,EAAOG,mBAEJN,EAAAjsG,UAAAwsG,UAAP,WACI,QAASvrG,KAAKqrG,cAEXL,EAAAjsG,UAAAysG,YAAP,WACI,OAA2B,IAApBxrG,KAAKyrG,YAETT,EAAAjsG,UAAA2sG,aAAP,WACI,OACI1rG,KAAKirG,UACLjrG,KAAKirG,SAASnrG,SACdE,KAAKirG,SAASnrG,QAAQ+C,OAAS,GAGhCmoG,EAAAjsG,UAAA0sG,SAAP,WACI,OAAOzrG,KAAK2rG,IAAM3rG,KAAK2rG,IAAM,GAE1BX,EAAAjsG,UAAA6sG,cAAP,WACI,OAAQ5rG,KAAK0rG,eAAiC,gBAAhB,eA/ChCV,EAAiC57E,GAXtCqI,EAAU,iBACPE,SAAU,wCACViW,UACI00B,MAAO,IACP2oC,SAAU,IACVU,IAAK,KAET9+D,YACI,8IAEP3U,EAAO,cAAe,gCACjB8yE,GAAN,GAf4C,CAAA5pC,EAAAC,aAAAD,EAAAC,gBAAb,CAAAv0B,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCKV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAC,IAAW,SAAA1tC,GAEvD,IAAO/B,EAActD,EAAAiD,QAAQK,YACtBqjC,EAAkB3mC,EAASwe,gBAAgBmoB,iBAmBlD,WAOI,SAAA42C,EACYx1B,EACAzgB,EACA3lB,GAHZ,IAAAjP,EAAAhhC,KACYA,KAAAq2E,8BACAr2E,KAAA41D,uBACA51D,KAAAiwC,sBAYLjwC,KAAA8rG,kBAAoB,WACvB,OAAA9qE,EAAK+qE,kBAAoBn6E,EAAYmwC,SAElC/hE,KAAAgsG,2BAA6B,WAChC,OAAAhrE,EAAK8qE,qBAAuB9qE,EAAK41B,sBAb9Bi1C,EAAA9sG,UAAAqtC,QAAP,WACIpsC,KAAK61D,gBAGFg2C,EAAA9sG,UAAAktG,cAAP,WACIjsG,KAAKq2E,4BAA4BnT,eACjCljE,KAAK+sF,WASF8e,EAAA9sG,UAAA03D,yBAAP,SACIC,GAIA,GADI12D,KAAKihD,OAAOqN,MAAgB,UAAKtuD,KAAKihD,OAAOqN,MAAgB,SACvC,CACtB,IAAMyH,EAAc/1D,KAAKksG,qBACnBzpC,EAAe1M,GAAeA,EAAYzzD,MAAS,KACzDtC,KAAK41D,qBAAqBhzD,MACtB8zD,EAASl4B,GACTx+B,KAAKihD,OAAOziB,GACZikC,EACA,KACA,KACA,QAKLopC,EAAA9sG,UAAAotG,YAAP,WACI,OAAOl3C,KAGJ42C,EAAA9sG,UAAAmkE,aAAP,WACIljE,KAAKq2E,4BAA4BnT,gBAG9B2oC,EAAA9sG,UAAA+2D,cAAP,SAAqBoM,GACjBliE,KAAKq2E,4BAA4BvgB,cAAcoM,EAAQ5/D,MACvDtC,KAAKq2E,4BAA4B3T,gBAG9BmpC,EAAA9sG,UAAAmtG,mBAAP,eAAAlrE,EAAAhhC,KACI,OAAOA,KAAKk2D,SACP78C,OACG,SAAAC,GACI,OAAAsY,EAAYtY,EAAEhX,QACdsvB,EAAYoP,EAAK+qE,mBAExBrzF,SAGDmzF,EAAA9sG,UAAA82D,aAAR,WACI71D,KAAKk2D,SAAWjB,KAvElB42C,EAA0Bz8E,GAhB/BqI,EAAU,iBACPE,SAAU,iCACVkV,YACI,kIACJe,UACIqT,OAAQ,IACR8qD,gBAAiB,IACjBn1C,qBAAsB,IACtBm2B,QAAS,OAGhB70D,EACG,8BACA,uBACA,wBAEE2zE,GAAN,GAtBuD,CAAAxqC,EAAA1tC,eAAA0tC,EAAA1tC,kBAAX,CAAAytC,EAAAC,aAAAD,EAAAC,gBAAb,CAAAv0B,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCLV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAC,GAAWA,EAAA1tC,eAAA0tC,EAAA1tC,iBAevD,oBAAAy4E,KAKWA,EAAArtG,UAAAglE,eAAP,SACIrN,GAEA12D,KAAKqsG,oBAAqBjuG,MAAOs4D,KARnC01C,EAA2Ch9E,GAThDqI,EAAU,iBACPE,SAAU,yCACVkV,YACI,8IACJe,UACImpB,UAAW,IACXs1C,mBAAoB,QAGtBD,GAAN,GAf4C,CAAAhrC,EAAAC,aAAAD,EAAAC,gBAAb,CAAAv0B,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAC,GAAWA,EAAA1tC,eAAA0tC,EAAA1tC,iBAevD,WAII,SAAA24E,EAAsB/lD,GAAAvmD,KAAAumD,gBAEd+lD,EAAAvtG,UAAA6kD,WAAR,SAAmBhW,GAEXA,EAASxH,KACTwH,EAASxH,IAAImwB,eAAiB3oB,EAASxH,IAAI+zB,eAE3Cn6D,KAAKusG,eAAe3+D,EAASxH,IAAImwB,eAIjC+1C,EAAAvtG,UAAAwtG,eAAR,SAAuBnmE,GAAvB,IAAApF,EAAAhhC,KACI,GAAKomC,GAAQA,EAAIomE,qBAAwBpmE,EAAIomE,oBAAoB3pG,OAAjE,CAEA7C,KAAKysG,cAAe,EAEpB,IAAMznD,EAAM5e,EAAIomE,oBAAoB79F,IAAI,SAAA2K,GAAK,OAAAA,EAAE8nC,UAE/CphD,KAAKumD,cACAtB,YAAaD,IAAGA,IAChB1gB,SAASC,KAAK,SAAA2gB,GACXlkB,EAAK+e,MAAQmF,IAEhBiO,QAAQ,WACLnyB,EAAKyrE,cAAe,MA5B9BH,EAAiBl9E,GATtBqI,EAAU,iBACPE,SAAU,YACViW,UACIxH,IAAK,KAETyG,YACI,4FAEP3U,EAAO,0BACFo0E,GAAN,GAf4C,CAAAlrC,EAAAC,aAAAD,EAAAC,gBAAb,CAAAv0B,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCQV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA0E,GAmEvB,SAASy2E,EAA8BC,EAAmBh+E,GAH/CnsB,OAAOm7B,cAAgBn7B,OAAOm7B,aAAanC,OAI7B5O,QAAQ4O,MAAKloB,MAAbsZ,SAAc+/E,GAASzkF,OAAKyG,IAbxCsH,EAAA22E,iBAAmB,IAAItzE,GAAGG,QAC1BxD,EAAA42E,mBAAqB,IAAIvzE,GAAGG,QAC5BxD,EAAA62E,iCAAmC,IAAIxzE,GAAGG,QAG1CxD,EAAA82E,mBAAqB,IAAIzzE,GAAGG,QAC5BxD,EAAA+2E,wBAA0B,IAAI1zE,GAAGG,QAU9ClI,EAAQ63B,qBAAqB,WACzB7sB,EAAEisB,WAAWykD,SAASnjD,OAAOr1C,OAAS,SAACy4F,GACnCj3E,EAAA42E,mBAAmB3yE,OAAOgzE,GAC1BR,EAA8B,qBAAsBQ,KAExD3wE,EAAEisB,WAAWykD,SAASnjD,OAAOqjD,qBAAuB,SAChDC,GAEAn3E,EAAA62E,iCAAiC5yE,OAAOkzE,GACxCV,EAA8B,mCAC1BU,KAGR7wE,EAAEisB,WAAWykD,SAASnjD,OAAOujD,UAAY,SAACvtE,GACtC7J,EAAA82E,mBAAmB7yE,OAAO4F,GAC1B4sE,EAA8B,wBAAyB5sE,KAE3DvD,EAAEisB,WAAWykD,SAASnjD,OAAOsc,MAAQ,SAACA,GAClCnwC,EAAA+2E,wBAAwB9yE,OAAOksC,GAC/BsmC,EAA8B,oBAAqBtmC,OA1FpC,CAAA70C,EAAA0E,YAAA1E,EAAA0E,eAAR,CAAA3H,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCFV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA0E,GAKvB,IAAOM,EAAkBjI,EAASsI,iBAAiBL,gBAC5CG,EAAmBpI,EAASsI,iBAAiBF,iBAE7CC,EAAcrI,EAASsI,iBAAiBD,YAOzC22E,EAAqB,WAAM,OAAA9qG,QAAUA,OAAOu4B,QAAUv4B,OAAOu4B,OAAO+zD,QAAUtsF,OAAOu4B,OAAO+zD,OAAOye,WACnGC,EAAqB,WACvB,OAAAhrG,QACAA,OAAOu4B,QACPv4B,OAAOu4B,OAAO+zD,QACdtsF,OAAOu4B,OAAO+zD,OAAOye,WACrB/qG,OAAOu4B,OAAO+zD,OAAOye,UAAU,IAC/B/qG,OAAOu4B,OAAO+zD,OAAOye,UAAU,GAAG9b,WAWtCgc,EAAA,SAAAnqE,GAKI,SAAAmqE,EACIz0E,EACAgiC,EACQ+L,EACA92B,EACA6hD,EACAzb,GANZ,IAAAr1C,EAQIsC,EAAAhmC,KAAA0C,KAAMg5B,IAAMh5B,YALJghC,EAAA+lC,sBACA/lC,EAAAiP,sBACAjP,EAAA8wD,eACA9wD,EAAAq1C,8BAVKr1C,EAAA0sE,kBAkRT1sE,EAAA2sE,eAAiB,SAAC16D,GACtB,OAAOA,GAAa,gBAAPA,GArQbjS,EAAK4sE,kBAAyB5yC,EAAQ,eACtCh6B,EAAK6sE,sBAA6B7yC,EAAQ,mBAE1C1sC,EAASoR,SACJjU,UAAU,SAAAvsB,GAAK,OAACA,EAAE67B,SAAW77B,EAAE67B,OAAO+zD,SACtC51D,uBACAvqB,IAAI,SAAAzP,GAAK,OAAAA,EAAE67B,OAAO+zD,SAClB90D,UAAU,SAAA80D,GACP9tD,EAAKC,MACD3+B,KAAM,oCACN+rF,mBAAoBrtD,EAAK8sE,qCAIrCx/E,EAASoR,SACJrmB,OAAOm0F,GACPzR,cAAcxqE,EAAQ+3B,2BACtB39B,KAAK,GACLqO,UAAU,WACP/D,EAAA22E,iBAAiB1zE,uBAAuBc,UAAU,SAACkzE,GAC/ClsE,EAAK+sE,iBAAiBb,GACtBlsE,EAAKC,MACD3+B,KAAM,sBACN4qG,MAAKA,EACL38F,MAAO,OAIf0lB,EAAA42E,mBAAmB3zE,uBAAuBc,UAAU,SAACkzE,GACjDlsE,EAAK+sE,iBAAiBb,GACtBlsE,EAAKC,MACD3+B,KAAM,wBACN4qG,MAAKA,EACL7e,mBAAoBrtD,EAAK8sE,+BAA+BZ,OAIhEj3E,EAAA62E,iCACK5zE,uBACAc,UAAU,SAACozE,GACRpsE,EAAKgtE,0BAA0BZ,GAC/BpsE,EAAKC,MACD3+B,KAAM,6BACN8qG,mBAAkBA,MAI9Bn3E,EAAA82E,mBAAmB7zE,uBAAuBc,UAAU,SAAC8F,GACjD,OAAQA,EAAQx9B,MACZ,IAAK,QACL,KAAK,EACD0+B,EAAKiP,oBAAoB1/B,MAAMuvB,EAAQA,SACvC,MACJ,KAAK,EACL,IAAK,UACDkB,EAAKiP,oBAAoBy3C,QAAQ5nD,EAAQA,SACzC,MACJ,IAAK,UACL,KAAK,EACDkB,EAAKiP,oBAAoBzQ,QAAQM,EAAQA,SACzC,MACJ,KAAK,EACL,IAAK,OACL,QACIkB,EAAKiP,oBAAoBoH,KAAKvX,EAAQA,YAKlD7J,EAAA+2E,wBAAwB9zE,uBAAuBc,UAAU,SAACosC,GACtDplC,EAAKC,MACD3+B,KAAM,kCACN2rG,WAAY7nC,MAIpBplC,EAAKktE,4BAuQrB,OAlWkCrpE,EAAA4oE,EAAAnqE,GA+FvBmqE,EAAA1uG,UAAAovG,cAAP,SAAqB5b,GACjB,IAAMt1D,EAAQj9B,KAAK05B,WACb00E,EACFnxE,GACAA,EAAMoxE,eACNpxE,EAAMoxE,cAAcnB,OACpBjwE,EAAMoxE,cAAcnB,MAAMlb,OAC1B/0D,EAAMoxE,cAAcnB,MAAMlb,MAAM34E,OAAO,SAAAC,GAAK,OAAAA,EAAEg1F,gBAAkB/b,IAAQ1vF,OAAS,EAE/E0rG,EACFtxE,GACAA,EAAMoxE,eACNpxE,EAAMoxE,cAAcnB,OACpBjwE,EAAMoxE,cAAcnB,MAAMttE,SACzB3C,EAAMoxE,cAAcnB,MAAMttE,SAAWjJ,EAAY6uC,KACE,QAAhDvoC,EAAMoxE,cAAcnB,MAAMttE,OAAO/6B,aACrCo4B,EAAMoxE,cAAcnB,MAAMsB,kBAC1BvxE,EAAMoxE,cAAcnB,MAAMsB,iBAAiBF,gBAAkB/b,EAEjE,OAAO6b,GAA0BG,GAG9Bd,EAAA1uG,UAAA6uF,OAAP,SAAc36C,GACNjzC,KAAK2tG,eAAe16D,IAAOzwC,OAAOi9B,MAAQz/B,KAAKyuG,cAAcjsG,OAAOi9B,KAAKivE,WAAW,IACpF1uG,KAAK2uG,4CAA4C,WAC7CpyE,EAAEisB,WAAWykD,SAAS9Q,OAAOyS,KAAK37D,MAKvCw6D,EAAA1uG,UAAA8vG,aAAP,SAAoB57D,GACZzwC,OAAOi9B,MAAQj9B,OAAOi9B,KAAKivE,UAAU1c,OAAShyF,KAAKyuG,cAAcjsG,OAAOi9B,KAAKivE,WAAW,IACxF1uG,KAAK2uG,4CAA4C,WAC7CpyE,EAAEisB,WAAWykD,SAAS9Q,OAAO2S,eAAe77D,EAAIzwC,OAAOi9B,KAAKivE,UAAU1c,MAAM,GAAG+c,iBAKpFtB,EAAA1uG,UAAAirE,OAAP,WACIhqE,KAAK2uG,4CAA4C,WAC7CpyE,EAAEisB,WAAWykD,SAAS9Q,OAAOnyB,YAI9ByjC,EAAA1uG,UAAAiwG,wBAAP,SAA+BC,GAC3BjvG,KAAK2uG,4CAA4C,WAC7CpyE,EAAEisB,WAAWykD,SAAS9Q,OAAO6S,wBAAwBC,MAItDxB,EAAA1uG,UAAAmwG,YAAP,SAAmB5xG,GACf0C,KAAK2uG,4CAA4C,WAC7CpyE,EAAEisB,WAAWykD,SAAS9Q,OAAOgT,YAAY7xG,EAAKyxG,iBAI/CtB,EAAA1uG,UAAAqwG,YAAP,SAAmB9xG,GACf0C,KAAK2uG,4CAA4C,WAC7CpyE,EAAEisB,WAAWykD,SAAS9Q,OAAOkT,YAAY/xG,EAAKyxG,iBAI/CtB,EAAA1uG,UAAA6oC,OAAP,SAActqC,GACV0C,KAAK2uG,4CAA4C,WAC7CpyE,EAAEisB,WAAWykD,SAAS9Q,OAAOv0D,OAAOtqC,EAAKyxG,iBAI1CtB,EAAA1uG,UAAAuwG,SAAP,SAAgBhyG,GACZ0C,KAAK2uG,4CAA4C,WAC7C,OAAkCrxG,EAAKsiC,QACnC,KAAKrJ,EAAgBg5E,YACrB,IAAK,cACDhzE,EAAEisB,WAAWykD,SAAS9Q,OAAOqT,SAASlyG,EAAKyxG,cAC3C,MACJ,KAAKx4E,EAAgBk5E,OACrB,IAAK,SACDlzE,EAAEisB,WAAWykD,SAAS9Q,OAAOuT,WAAWpyG,EAAKyxG,kBAMtDtB,EAAA1uG,UAAA4wG,cAAP,SAAqB/vE,GACjB5/B,KAAK2uG,4CAA4C,WAC7C,OAAQ/uE,GACJ,KAAKjJ,EAAYi8D,YACjB,IAAK,cACDr2D,EAAEisB,WAAWykD,SAAS9Q,OAAOyT,QAC7B,MACJ,KAAKj5E,EAAYk8D,UACjB,IAAK,YACDt2D,EAAEisB,WAAWykD,SAAS9Q,OAAO0T,eAMtCpC,EAAA1uG,UAAA+wG,mBAAP,SAA0BC,GACtB/vG,KAAK2uG,4CAA4C,WAC7C,OAAQoB,GACJ,KAAKr5E,EAAiBm8D,UACtB,IAAK,YACDt2D,EAAEisB,WAAWykD,SAAS9Q,OAAO6T,aAC7B,MACJ,QACIzzE,EAAEisB,WAAWykD,SAAS9Q,OAAO8T,iBAKtCxC,EAAA1uG,UAAAyqE,MAAP,SAAav2B,EAAYi9D,GAAzB,IAAAlvE,EAAAhhC,KACIA,KAAK2uG,4CAA4C,WAC7CpyE,EAAEisB,WAAWykD,SAAS9Q,OAAO3yB,MAAMv2B,EAAIi9D,GACvClvE,EAAKq1C,4BAA4B3T,kBAIlC+qC,EAAA1uG,UAAAoxG,0BAAP,SAAiCC,GAC7BpwG,KAAK2uG,4CAA4C,WAC7CpyE,EAAEisB,WAAWykD,SAAS9Q,OAAOgU,0BAA0BC,MAIxD3C,EAAA1uG,UAAAsqE,iBAAP,WACIrpE,KAAK2uG,4CAA4C,WAC7CpyE,EAAEisB,WAAWykD,SAAS9Q,OAAO9yB,sBAI9BokC,EAAA1uG,UAAAsxG,8BAAP,WACIrwG,KAAK2uG,4CAA4C,WAC7CpyE,EAAEisB,WAAWykD,SAAS9Q,OAAOkU,mCAI9B5C,EAAA1uG,UAAAuxG,eAAP,SAAsBhzG,EAAsBi1F,GACxCvyF,KAAK2uG,4CAA4C,WAC7CpyE,EAAEisB,WAAWykD,SAAS9Q,OAAOmU,eAAehzG,EAAKizG,wBAAyBhe,MAI3Ekb,EAAA1uG,UAAAyxG,iBAAP,SAAwBlzG,GACpB0C,KAAK2uG,4CAA4C,WAC7CpyE,EAAEisB,WAAWykD,SAAS9Q,OAAOqU,iBAAiBlzG,EAAKizG,4BAIpD9C,EAAA1uG,UAAA0xG,kBAAP,WACI,OAAOjuG,OAAOi9B,MAAQz/B,KAAKyuG,cAAcjsG,OAAOi9B,KAAKivE,WAAW,IAG5DjB,EAAA1uG,UAAA0vG,cAAR,SAAsBC,EAAuBgC,GACzC,IAAMr6D,EAASm3D,KAAwBxtG,KAAK4lE,WAAW8oC,GAQvD,OANIgC,IACKpD,IACKE,KACN5lB,MAAM,2EAFiBA,MAAM,oDAK9BvxC,GAGHo3D,EAAA1uG,UAAA6mE,WAAR,SAAmB8oC,GACf,IAAKA,IAAcA,EAAU9uE,OAAQ,OAAO,EAC5C,IAAMA,EAA+B8uE,EAAU9uE,OAE/C,MAC0B,gBAAtBA,EAAO/6B,YACP+6B,IAAWjJ,EAAYi8D,aACD,cAAtBhzD,EAAO/6B,YACP+6B,IAAWjJ,EAAYk8D,WACD,SAAtBjzD,EAAO/6B,YACP+6B,IAAWjJ,EAAYo8D,MACD,QAAtBnzD,EAAO/6B,YACP+6B,IAAWjJ,EAAY6uC,KAQvBioC,EAAA1uG,UAAAivG,0BAAR,SAAkC2C,GAG9B,GAFIA,EAAUrC,eAAetuG,KAAK4wG,kBAAkBD,EAAUrC,eAE1DqC,EAAUE,iBACV,IAAqB,IAAAz4E,EAAA,EAAAwE,EAAA+zE,EAAUE,iBAAVz4E,EAAAwE,EAAA/5B,OAAAu1B,IAA0B,CAA1C,IAAMm6D,EAAM31D,EAAAxE,GAAgCp4B,KAAK4wG,kBAAkBre,KAGxEkb,EAAA1uG,UAAA6xG,kBAAR,SAA0Bre,GAA1B,IAAAvxD,EAAAhhC,KACQA,KAAK0tG,eAAenb,EAAO1tF,aAE/B7E,KAAK8xF,aAAaztD,SAAU7F,GAAI+zD,IAAUjuD,SAASC,KAAK,SAACusE,GACrD9vE,EAAKC,MACD3+B,KAAM,mCACNkpE,KAAMslC,OAKVrD,EAAA1uG,UAAAgvG,iBAAR,SAAyBb,GACrB,IAAMltE,EAAU1R,EAAAoR,SAAS/F,WACnB8F,EAAQO,GAAWA,EAAQP,SACjCA,EAAKivE,UAAYxB,EAEjB5+E,EAAAoR,SAASxF,OAAMe,KACR+E,GACHP,KAAMA,KAEVj9B,OAAOi9B,KAAKivE,UAAYxB,EAExB,IAAM5vG,EAAO0C,KAAK4tG,kBAAkBV,GAASA,EAAMlb,OAQnD,GAPI10F,GAAQ0C,KAAK6tG,sBAAsBvwG,EAAKsiC,SACxC5/B,KAAK+mE,oBAAoBtlE,KAAK,wBAA0BnE,EAAK8H,OAAS,IAAK9H,EAAK8H,QAChFpF,KAAKihC,MAAO3+B,KAAM,4BAA6B4qG,MAAKA,EAAE5vG,KAAIA,MAE1D0C,KAAK+mE,oBAAoBxwB,OACzBv2C,KAAKihC,MAAO3+B,KAAM,mCAAoC4qG,MAAKA,KAE3DA,GAASA,EAAMlb,MACf,IAAmB,IAAA55D,EAAA,EAAAwE,EAAAswE,EAAMlb,MAAN55D,EAAAwE,EAAA/5B,OAAAu1B,IAAa,CAA3B,IAAM24E,EAAIn0E,EAAAxE,GACXp4B,KAAKguG,0BAA0B+C,KAKnCtD,EAAA1uG,UAAA4vG,4CAAR,SAAoDh/D,GAC5C69D,KACAj8E,EAAA63B,qBAAqBzZ,IAIrB89D,EAAA1uG,UAAAiyG,0CAAR,SAAkDrhE,GAC1C69D,KACAj8E,EAAA83B,mBAAmB1Z,IAInB89D,EAAA1uG,UAAA+uG,+BAAR,SAAuCZ,GACnC,OAAKA,GAAUI,IAEHE,IAEsC,SAAvCN,EAAM+D,kBAAkBpsG,YAAqD,IAA5BqoG,EAAM+D,kBACvD3iF,EAASsI,iBAAiBE,mBAAmBo6E,YACjB,YAA5BhE,EAAMttE,OAAO/6B,YAA6C,IAAjBqoG,EAAMttE,OAC/CtR,EAASsI,iBAAiBE,mBAAmBq6E,OAE7C7iF,EAASsI,iBAAiBE,mBAAmBs6E,YAN7C9iF,EAASsI,iBAAiBE,mBAAmBg8D,QAF7CxkE,EAASsI,iBAAiBE,mBAAmB87D,aAYpD6a,EAAA1uG,UAAAmvG,sBAAR,WACIluG,KAAKgxG,0CAA0C,WAC3Cz0E,EAAEisB,WAAWykD,SAAS9Q,OAAO+R,2BA/V5BT,EAAYr+E,GATxB2I,EAAQ,YAAa,gBACrBG,EACG,cACA,UACA,sBACA,sBACA,eACA,gCAESu1E,GAAb,CAAkCn/E,EAAAyS,kBAArB9K,EAAAw3E,aAAYA,EAjCF,CAAAl8E,EAAA0E,YAAA1E,EAAA0E,eAAR,CAAA3H,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCFV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAC,IAAW,SAAA1tC,GAOvD,IAAO/B,EAActD,EAAAiD,QAAQK,YAGtBwF,EAAmB9I,EAAAiD,QAAQ4F,SAASC,kBAkC3C,WA8BI,SAAAi6E,EACYruD,EACAmuC,EACArqB,EACAwqC,EACA9mD,EACAva,EACAomC,EACAkX,EACAxf,EACAnqC,EACA6mB,EACAiX,GAZZ,IAAA1gC,EAAAhhC,KACYA,KAAAgjD,YACAhjD,KAAAmxF,YACAnxF,KAAA8mE,0BACA9mE,KAAAsxG,mBACAtxG,KAAAwqD,iBACAxqD,KAAAiwC,sBACAjwC,KAAAq2E,8BACAr2E,KAAAutF,eACAvtF,KAAA+tE,cACA/tE,KAAA4jC,sBACA5jC,KAAAyqD,gBACAzqD,KAAA0hE,cA7BL1hE,KAAAuxG,gBACAvxG,KAAAwxG,sBAEAxxG,KAAAm6F,eAGAn6F,KAAAyxG,UAAW,EAMDzxG,KAAA0xG,wBAA0B,wBACnC1xG,KAAA+/C,SA6ID//C,KAAA6tD,OAAS,SAACD,GACb,IAAMzvB,EAAM7P,EAAAY,OAAOC,mBAAmB,yCAClCy+B,IACA5sB,EAAKskB,aAAc,EACnBsI,EAAKC,OAAS7sB,EAAKypB,cACdoD,QACG1vB,IAAGA,EACHuJ,MAAQkmB,KAAIA,KAEfrpB,KAAK,SAAA8R,GACFrV,EAAKskB,aAAc,EACnBtkB,EAAK+e,MAAM9mC,KAAKo9B,EAAO3O,MACvB1G,EAAKiP,oBAAoBzQ,QAAQ,qCAEpCwK,MAAM,WACHhJ,EAAKskB,aAAc,EACnBtkB,EAAKiP,oBAAoB1/B,MAAM,oCA1IxC8gG,EAAAtyG,UAAAqtC,QAAP,WACIpsC,KAAK2xG,QAGFN,EAAAtyG,UAAA6yG,yCAAP,WAGI,OAFoB5xG,KAAKkkE,0BAGrB,KAAKtyC,EAAYwjC,MACjB,KAAKxjC,EAAY4jC,KACjB,KAAK5jC,EAAYsjC,KACb,OAAO,EACX,QACI,OAAO,IAIZm8C,EAAAtyG,UAAA8yG,qCAAP,WACS7xG,KAAK4xG,6CAA4C5xG,KAAKwqC,SAASg9B,UAAYpwC,EAAiB06E,UAGvFT,EAAAtyG,UAAA4yG,KAAd,mGACI,SAAM3xG,KAAKssD,WAAWtsD,KAAKqsD,kBAE3B,OAFAzvB,EAAAC,QAEA,EAAM78B,KAAK+xG,6BAAXn1E,EAAAC,OAEA78B,KAAKwqC,UACDjE,YAAa,GACbrC,OAAQlkC,KAAKkkC,OACb80C,WAAYh5E,KAAKg5E,WACjBuZ,OAAQvyF,KAAKuyF,OACbyf,cAAc,EACdxqC,UAAWxnE,KAAKiyG,0BACV76E,EAAiB06E,QACjB9xG,KAAK4jC,oBAAoB5lC,IAAIgC,KAAK0xG,0BAA4Bt6E,EAAiB06E,QACrFI,SAAUlyG,KAAKkyG,UAGnBlyG,KAAK61D,eAED71D,KAAK2qE,YAAY3qE,KAAKmyG,cAAcnyG,KAAK2qE,YAE7C3qE,KAAKoyG,wBAELpyG,KAAKyxG,UAAW,YAGbJ,EAAAtyG,UAAAynD,OAAP,WACIxmD,KAAKgjD,UAAUwD,UAGZ6qD,EAAAtyG,UAAAspG,KAAP,eAAArnE,EAAAhhC,KACI,IAAIA,KAAKyxG,SAAT,CACAzxG,KAAKyxG,UAAW,EAEhBzxG,KAAKwqC,SAAS+nD,OAAUvyF,KAAKqyG,oBAAsBryG,KAAKqyG,mBAAmB7zE,IAAOx+B,KAAKuyF,OACvFvyF,KAAKwqC,SAASwuC,WAAah5E,KAAKi6F,kBAAoBj6F,KAAKi6F,iBAAiBz7D,GAE1E,IAAM8zE,GACFpuE,OAAQlkC,KAAKwqC,SAAStG,OACtBu+B,YAAaziE,KAAKkkE,yBAClB7B,MAAOriE,KAAK05F,eAAiB15F,KAAKmxF,UAClC7uB,MAAOtiE,KAAK8pF,eAAiB9pF,KAAKmxF,UAClCtH,cAAe7pF,KAAKuyG,uBAAyB,KAC7C1uC,mBAAoB7jE,KAAK4kE,4BAA8B,KACvDoU,WAAYh5E,KAAKwqC,SAASwuC,WAC1BuZ,OAAQvyF,KAAKwqC,SAAS+nD,OACtBhsD,YAAavmC,KAAKwqC,SAASjE,YAC3ByrE,aAAchyG,KAAKwqC,SAASwnE,aAC5BQ,OAAQxyG,KAAKwyG,QAAU,KACvBhrC,UAAWxnE,KAAK4xG,2CACV5xG,KAAKwqC,SAASg9B,UACdpwC,EAAiB06E,QACvB3qE,SAAUnnC,KAAK+/C,MAAMpxC,IAAI,SAAApR,GAAK,OAAAA,EAAEihC,KAChC0zE,SAAUlyG,KAAKwqC,SAAS0nE,UAG5BlyG,KAAK8mE,wBACA+C,SAASyoC,GACThuE,SAASC,KAAK,SAAAiG,GACXxJ,EAAKiP,oBAAoBzQ,QAAQ,4BAEjCwB,EAAK4C,oBAAoB5K,MAAMgI,EAAK0wE,wBAAyBY,EAAI9qC,WAG5Dh9B,EAASghC,OACRxqC,EAAKusD,aAAa4gB,cAAc3jE,EAASghC,KAAKhtC,KAC3CwC,EAAK+sC,YAAY3D,sBAAsB5/B,EAASghC,KAAKnf,YAG1DrrB,EAAKq1C,4BAA4BvgB,cAAcw8C,EAAI7vC,aAEvDzhC,EAAKgiB,UAAUzM,KAAK/L,KAEvBR,MAAM,SAAA3oC,GACCmB,OAAOm7B,cAAgBn7B,OAAOm7B,aAAanC,OAAO5O,QAAQurB,IAAI92C,GAClE2/B,EAAKiP,oBAAoB1/B,MAAM,sDAElC4iD,QAAQ,WACLvxD,WAAW,WACPo/B,EAAKywE,UAAW,GACjB,SAIRJ,EAAAtyG,UAAA0zG,eAAP,SAAsBjqE,GAClBxoC,KAAKwxG,mBAAqBxxG,KAAKuxG,aAAal4F,OACxC,SAAAC,GAAK,OAAAA,EAAEk+E,YAAYl3D,cAAcx9B,QAAQ0lC,EAAMlI,gBAAkB,KAIlE+wE,EAAAtyG,UAAA2zG,eAAP,SAAsBz5B,GAClB,IAAKA,EAGD,OAFAj5E,KAAKi6F,iBAAmB,UACxBj6F,KAAKm6F,gBAITn6F,KAAKi6F,iBAAmBhhB,EACxBj5E,KAAK2yG,gBAAgB15B,EAASz6C,KAwBpB6yE,EAAAtyG,UAAAozG,cAAd,SAA4BxnC,8GACH,SAAM3qE,KAAKsxG,iBAAiBsB,4BAC7Cp0E,GAAImsC,IACLrmC,wBAFGuuE,EAAe/mE,EAAAjP,OAGrB78B,KAAKwxG,mBAAqBxxG,KAAKuxG,aAAesB,EAElB7yG,KAAKg5E,YAC3BjtC,EAAA/rC,KAAKuxG,aAAal4F,OAAO,SAAAC,GAAK,OAAAA,EAAEklB,KAAOwC,EAAKg4C,aAAY,KAAxD,MACC,EAAMh5E,KAAK8yG,YAAY9yG,KAAKg5E,cAFP,YAEtBjtC,EAACD,EAAAjP,+BADDD,EAAAmP,eAEAnP,GAAC58B,KAAKi6F,kBAAoBj6F,KAAKuxG,aAAal4F,OAAO,SAAAC,GAAK,OAAA0nB,EAAK+xE,yBAAyBz5F,KAAI,2BAH1F05F,EAAmBp2E,IAMrB58B,KAAK0yG,eAAe1yG,KAAKuxG,aAAal4F,OAAO,SAAAC,GAAK,OAAAA,EAAEklB,KAAOw0E,EAAoBx0E,KAAI,cAGnF6yE,EAAAtyG,UAAAg0G,yBAAR,SAAiC95B,GAC7B,OAAQA,EAASr5C,OAAO/6B,WAAWy7B,eAC/B,IAAK,SACL,IAAK,IACL,IAAK,SACL,IAAK,IACD,OAAO,EACX,QACI,OAAO,IAIL+wE,EAAAtyG,UAAA4zG,gBAAd,SAA8B35B,wGACP,OAAnBp8C,EAAA58B,MAAmB,EAAMA,KAAKsxG,iBAAiB2B,aAC3Cz0E,GAAIw6C,IACL10C,wBAFH1H,EAAKu9D,YAAcpuD,EAAAlP,OAGnB78B,KAAKqyG,mBAAqBryG,KAAKm6F,YAAY9gF,OAAO,SAAAC,GAAK,OAAAA,EAAEklB,KAAOwC,EAAK2pC,aAAY,aAGvE0mC,EAAAtyG,UAAA+zG,YAAd,SAA0B95B,2FACL,SAAMh5E,KAAKsxG,iBAAiBjtE,SACzC7F,GAAIw6C,IACL10C,iBACH,SAHiB1H,EAAAC,cAMbw0E,EAAAtyG,UAAA82D,aAAR,WACI71D,KAAKk2D,SAAWppB,EAAAmoB,kBAEhB,IAAI6M,EAAsB9hE,KAAK8hE,qBAAuBlwC,EAAYmwC,QAC9D/hE,KAAKutF,aAAa4gB,cAAcnuG,KAAKuyF,QAASzwB,EAAsBlwC,EAAYujC,MAC3En1D,KAAK+tE,YAAY3D,sBAAsBpqE,KAAKqsD,YAAWyV,EAAsBlwC,EAAY4jC,MAElGx1D,KAAK+rG,gBAAkB/rG,KAAKk2D,SACvB78C,OAAO,SAAAC,GAAK,OAAAA,EAAEhX,KAAKuC,aAAei9D,EAAoBj9D,aACtD6T,SAGD24F,EAAAtyG,UAAAmlE,uBAAR,WACI,OAAQlkE,KAAK+rG,iBAAmB/rG,KAAK+rG,gBAAgBzpG,MAASsvB,EAAYmwC,SAGhEsvC,EAAAtyG,UAAAutD,WAAd,SAAyBD,iGACrB,OAAKA,GAELzvB,EAAA58B,MAAc,EAAMA,KAAKwqD,eAAenmB,SAAU7F,GAAI6tB,IAAY/nB,YAFnD,iBAEf1H,EAAKqkB,OAASlV,EAAAlP,OACd78B,KAAK2qE,WAAa3qE,KAAKihD,QAAUjhD,KAAKihD,OAAOqN,MAAgB,SAC7DtuD,KAAKuyF,OACDvyF,KAAKihD,SACJjhD,KAAKihD,OAAOqN,MAAgB,UACzBtuD,KAAKihD,OAAOqN,MAAgB,UAC5BtuD,KAAKihD,OAAOqN,MAAc,QAC1BtuD,KAAKihD,OAAOqN,MAAgB,oBAGhC+iD,EAAAtyG,UAAAqzG,sBAAR,eAAApxE,EAAAhhC,KACIwC,OAAOV,iBAAiB,QAAS,SAACohD,GAC9B,IAAMgwD,EAAkDhwD,EAExD,GAAGgwD,EAAeC,cAActtG,MAAO,CACnC,IAAMlG,EAAOuzG,EAAeC,cAActtG,MAAM,GAC7ClG,GACCqhC,EAAK6sB,OAAOluD,EAAKyzG,iBAKnB/B,EAAAtyG,UAAAgzG,YAAd,2GACI,IAAI/xG,KAAK8pF,cAEL,OADA9pF,KAAKkyG,UAAW,GAChB,oBAGY,gCAAMlyG,KAAK0hE,YAAYr9B,SAAS7F,GAAIx+B,KAAK8pF,gBAAgBxlD,wBAA/D+uE,EAAMz2E,EAAAC,OACRy2E,KACI9wG,QACAA,OAAOu4B,QACPv4B,OAAOu4B,OAAO19B,SACdmF,OAAOu4B,OAAO19B,QAAQw3E,UACtBryE,OAAOu4B,OAAO19B,QAAQw3E,SAASy+B,uBAC3BA,EAAuB9wG,OAAOu4B,OAAO19B,QAAQw3E,SAASy+B,sBAG1DD,GACAA,EAAIjL,eACApoG,KAAKkyG,SAAWoB,EAAqB/vF,KAAK,SAAAib,GAAM,OAAA60E,EAAIjL,eAAetlG,QAAQ07B,IAAO,IAGtFx+B,KAAKkyG,UAAW,+BAIxBlyG,KAAKkyG,UAAW,+BAvStBb,EAAqCjiF,GA/B1CqI,EAAU,mBACPE,SAAU,kCACVkV,YACI,kIACJe,UACI1J,OAAQ,IACR80C,WAAY,IACZlX,oBAAqB,IACrB43B,cAAe,IACf5P,cAAe,IACfz9B,SAAU,IACVkmD,sBAAuB,IACvB3tC,2BAA4B,IAC5B4tC,OAAQ,IACRP,0BAA2B,OAGlC/5E,EACG,YACA,YACA,0BACA,mBACA,iBACA,sBACA,8BACA,eACA,cACA,sBACA,SACA,gBAEEm5E,GAAN,GA5CuD,CAAAhwC,EAAA1tC,eAAA0tC,EAAA1tC,kBAAX,CAAAytC,EAAAC,aAAAD,EAAAC,gBAAb,CAAAv0B,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCEV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAC,IAAW,SAAA1tC,GAkBvD,IAAO/B,EAActD,EAAAiD,QAAQK,aA2C7B,WAsCI,SAAA2hF,EACYvwD,EACAwH,EACA3mB,EACAJ,EACA6tE,EACA5tE,EACA+3B,EACAhR,EACA+oD,EACAvjE,EACArM,EACAyyC,EACAkX,EACAxf,EACArM,GAfZ,IAAA1gC,EAAAhhC,KACYA,KAAAgjD,YACAhjD,KAAAwqD,iBACAxqD,KAAA6jC,cACA7jC,KAAAyjC,eACAzjC,KAAAsxG,mBACAtxG,KAAA0jC,oBACA1jC,KAAAy7D,wBACAz7D,KAAAyqD,gBACAzqD,KAAAwzG,0BACAxzG,KAAAiwC,sBACAjwC,KAAA4jC,sBACA5jC,KAAAq2E,8BACAr2E,KAAAutF,eACAvtF,KAAA+tE,cACA/tE,KAAA0hE,cAtCL1hE,KAAA8oC,aAEA9oC,KAAAuxG,gBACAvxG,KAAAwxG,sBAEAxxG,KAAAm6F,eAGAn6F,KAAAyzG,iBAEAzzG,KAAA07D,kBACA17D,KAAA08B,IAAM,IAAID,KAUAz8B,KAAA0zG,4BAA8B,4BAyHxC1zG,KAAA6tD,OAAS,SAACD,GACb,IAAMzvB,EAAM7P,EAAAY,OAAOC,mBAAmB,yCAClCy+B,IACA5sB,EAAKskB,aAAc,EACnBsI,EAAKC,OAAS7sB,EAAKypB,cACdoD,QACG1vB,IAAGA,EACHuJ,MAAQkmB,KAAIA,KAEfrpB,KAAK,SAAA8R,GACFrV,EAAKskB,aAAc,EACnBtkB,EAAK+e,MAAM9mC,KAAKo9B,EAAO3O,MACvB1G,EAAK+C,KAAKoD,SAASluB,KAAKo9B,EAAO3O,KAAKlJ,IACpCwC,EAAKiP,oBAAoBzQ,QAAQ,qCAEpCwK,MAAM,WACHhJ,EAAKskB,aAAc,EACnBtkB,EAAKiP,oBAAoB1/B,MAAM,oCAtHlCgjG,EAAAx0G,UAAAqtC,QAAb,0GACIpsC,KAAK+jC,KAAO/jC,KAAK6jC,YAAY8vE,cAAc,KAAM,KAAM3zG,KAAK4zG,yBACxD5zG,KAAKqsD,UAAU,EAAMrsD,KAAKssD,WAAWtsD,KAAKqsD,YAA1C,YAAezvB,EAAAC,wBAEnB,SAAM78B,KAAK+xG,6BAAXn1E,EAAAC,OAEA78B,KAAK61D,eACD71D,KAAKkoG,mBAAmBloG,KAAK6zG,oBAAoB7zG,KAAKkoG,mBAE1DloG,KAAK8zG,4BAEL9zG,KAAKoyG,wBAELpyG,KAAK+/C,mBAGFwzD,EAAAx0G,UAAAg1G,qBAAP,WACI,OACI/zG,KAAKihD,QAAUjhD,KAAKihD,OAAOqN,QAAU,aAActuD,KAAKihD,OAAOqN,OAAS,aAActuD,KAAKihD,OAAOqN,QAInGilD,EAAAx0G,UAAAynD,OAAP,WACIxmD,KAAKgjD,UAAUwD,UAGZ+sD,EAAAx0G,UAAAspG,KAAP,eAAArnE,EAAAhhC,KACIA,KAAKyxG,UAAW,EAEhB,IAAM1tE,GACFwC,YAAavmC,KAAK+jC,KAAKwC,YACvBqhE,QAAS5nG,KAAK+jC,KAAK4B,KACnBiB,QAAS5mC,KAAKg0G,kBACdntE,SAAU7mC,KAAKi0G,iBACf/vE,OAAQlkC,KAAKkkC,OACb4F,aAAe9pC,KAAKmpC,YAAcnpC,KAAKmpC,WAAW3K,IAAOh8B,OAAOi9B,KAAKjB,GACrEw6C,WAAYh5E,KAAKi6F,kBAAoBj6F,KAAKi6F,iBAAiBz7D,GAC3D01E,OAASl0G,KAAKipC,WAAajpC,KAAKipC,UAAUzK,IAAOh8B,OAAOi9B,KAAKjB,GAC7D+zD,OAASvyF,KAAKqyG,oBAAsBryG,KAAKqyG,mBAAmB7zE,IAAOx+B,KAAKm0G,aAAe,KACvFhtE,SAAUnnC,KAAK+jC,KAAKoD,SACpBm7B,MAAOtiE,KAAKsiE,MACZD,MAAOriE,KAAKqiE,MACZH,QAAUliE,KAAK+rG,iBAAmB/rG,KAAK+rG,gBAAgBzpG,MAASsvB,EAAYmwC,QAC5EmmC,kBAAmBloG,KAAKkoG,kBACxBgK,SAAUlyG,KAAKkyG,UAGnBlyG,KAAKyjC,aACA4kE,KAAKtkE,GACLO,SAASC,KAAK,SAAA6vE,GACXpzE,EAAKiP,oBAAoBzQ,QAAQ,gCAG5BwB,EAAKusD,aAAa4gB,cAAcpqE,EAAKwuD,SACrCvxD,EAAK+sC,YAAY3D,sBAAsBppC,EAAKqrB,WAE7CrrB,EAAKq1C,4BAA4BvgB,cAAc/xB,EAAKm+B,SAExDlhC,EAAKgiB,UAAUzM,KAAK69D,KAEvBpqE,MAAM,WACgB,SAAfhJ,EAAKshC,OAAmC,cAAfthC,EAAKshC,MAIf,SAAfthC,EAAKqhC,OAAmC,cAAfrhC,EAAKqhC,OAC9BrhC,EAAKiP,oBAAoBy3C,QAAQ,yCAJjC1mD,EAAKiP,oBAAoBy3C,QAAQ,4CAQxCv0B,QAAQ,WAAM,OAACnyB,EAAKywE,UAAW,KAGjC8B,EAAAx0G,UAAA0zG,eAAP,SAAsBjqE,GAClBxoC,KAAKwxG,mBAAqBxxG,KAAKuxG,aAAal4F,OACxC,SAAAC,GAAK,OAAAA,EAAEk+E,YAAYl3D,cAAcx9B,QAAQ0lC,EAAMlI,gBAAkB,KAIlEizE,EAAAx0G,UAAA2zG,eAAP,SAAsBz5B,GAClB,IAAKA,EAGD,OAFAj5E,KAAKi6F,iBAAmB,UACxBj6F,KAAKm6F,gBAITn6F,KAAKi6F,iBAAmBhhB,EACxBj5E,KAAK2yG,gBAAgB15B,EAASz6C,IAC9Bx+B,KAAKk8D,uBAGIq3C,EAAAx0G,UAAA88D,iBAAb,SAA8BrzB,eAAA,IAAAA,MAAA,2FACR,SAAMxoC,KAAK0jC,kBAAkBo4B,gCAC3Cr0B,KAAM,EACNpC,SAAU,GACV7G,GAAIgK,EACJuzB,OAAQ,OACTz3B,wBALG03B,EAAYp/B,EAAAC,OAMlB78B,KAAK07D,eAAiBM,EAAUn2D,gBAyB7B0tG,EAAAx0G,UAAAs1G,aAAP,SAAoBC,GACXA,GAEDt0G,KAAKo7D,gBAAgBk5C,IACrBt0G,KAAK4jC,oBAAoB5K,MAAMh5B,KAAK0zG,4BAA6BY,IAG3Df,EAAAx0G,UAAAutD,WAAd,SAAyBD,iGACrB,OAAKA,GAELzvB,EAAA58B,MAAc,EAAMA,KAAKwqD,eAAenmB,SAAU7F,GAAI6tB,IAAY/nB,YAFnD,iBAEf1H,EAAKqkB,OAASlV,EAAAlP,iBAGV02E,EAAAx0G,UAAAw1G,cAAR,WAEI,OAAOv0G,KAAKihD,QAAUjhD,KAAKihD,OAAOqN,MAAgB,UAG9CilD,EAAAx0G,UAAAo1G,UAAR,WACI,OACIn0G,KAAKihD,SAEJjhD,KAAKihD,OAAOqN,MAAgB,UAAKtuD,KAAKihD,OAAOqN,MAAc,QAAKtuD,KAAKihD,OAAOqN,MAAgB,WAIvFilD,EAAAx0G,UAAA+0G,0BAAd,mGAII,OAHA9zG,KAAKopC,gBACLppC,KAAKw0G,oBACLx0G,KAAKy0G,sBACL,EAAMz0G,KAAK27D,oCAAX/+B,EAAAC,OACI78B,KAAKqsD,UAAU,EAAMrsD,KAAKmyG,kBAA1B,YAAev1E,EAAAC,+BACnB78B,KAAKk8D,gCAGKq3C,EAAAx0G,UAAAqqC,cAAd,2GACqB,OAAjBxM,EAAA58B,MAAiB,EAAMA,KAAKyjC,aAAaixE,oBAAoBpwE,wBAA7D1H,EAAKkM,UAAYiD,EAAAlP,OAEb78B,KAAK6mC,UAA8B,IAAlB7mC,KAAK6mC,SAEtB7mC,KAAKi0G,iBAAmBj0G,KAAK8oC,UAAU9oC,KAAK6mC,UACvC7mC,KAAK8oC,UAAUjmC,SACd8xG,EAAkB30G,KAAK8oC,UAAUzvB,OAAO,SAAAC,GAAK,OAAAA,EAAE5b,KAAK4iC,cAAc59B,SAAS,aAAY,GAC7F1C,KAAKi0G,iBAAmBU,GAAmB30G,KAAK8oC,UAAU,cAIpDyqE,EAAAx0G,UAAAozG,cAAd,wHAII,OAHMxnC,EAAa3qE,KAAKu0G,gBACxBv0G,KAAKo/F,aAAez0B,EAEf3qE,KAAKo/F,YAEW,EAAMp/F,KAAKsxG,iBAAiBsB,4BAC7Cp0E,GAAImsC,IACLrmC,WAJmB,iBAEhBuuE,EAAe/mE,EAAAjP,OAGrB78B,KAAKwxG,mBAAqBxxG,KAAKuxG,aAAesB,EAElB7yG,KAAKg5E,YAC3BjtC,EAAA/rC,KAAKuxG,aAAal4F,OAAO,SAAAC,GAAK,OAAAA,EAAEklB,KAAOwC,EAAKg4C,aAAY,KAAxD,MACC,EAAMh5E,KAAK8yG,YAAY9yG,KAAKg5E,cAFP,YAEtBjtC,EAACD,EAAAjP,+BADDD,EAAAmP,eAEAnP,GAAC58B,KAAKi6F,kBAAoBj6F,KAAKuxG,aAAal4F,OAAO,SAAAC,GAAK,OAAA0nB,EAAK+xE,yBAAyBz5F,KAAI,2BAH1F05F,EAAmBp2E,IAMrB58B,KAAK0yG,eAAe1yG,KAAKuxG,aAAal4F,OAAO,SAAAC,GAAK,OAAAA,EAAEklB,KAAOw0E,EAAoBx0E,KAAI,cAGnF+0E,EAAAx0G,UAAAg0G,yBAAR,SAAiC95B,GAC7B,OAAQA,EAASr5C,OAAO/6B,WAAWy7B,eAC/B,IAAK,SACL,IAAK,IACL,IAAK,SACL,IAAK,IACD,OAAO,EACX,QACI,OAAO,IAILizE,EAAAx0G,UAAA48D,mBAAd,mGACI,SAAM37D,KAAK67D,iBAAiB,mBAA5Bj/B,EAAAC,iBAGU02E,EAAAx0G,UAAAm9D,oBAAd,uFACI,OAAIl8D,KAAK40G,UACD50G,KAAK07D,eAAeriD,OAAO,SAAAC,GAAK,OAAAA,EAAEklB,KAAOwC,EAAK4zE,SAASp2E,KAAI37B,OAC3D7C,KAAKmpC,WAAanpC,KAAK07D,eAAeriD,OAAO,SAAAC,GAAK,OAAAA,EAAEklB,KAAOwC,EAAK4zE,SAASp2E,KAAI,IAE7Ex+B,KAAKmpC,WAAkBnpC,KAAK40G,SAC5B50G,KAAK07D,eAAeziD,KAAUjZ,KAAKmpC,cAEvC,IAGCnpC,KAAKqiE,OAENriE,KAAKi6F,kBAAoBj6F,KAAKi6F,iBAAiBnzD,OAC/C9mC,KAAK60G,+BAA+B70G,KAAKi6F,iBAAiBnzD,OAAQ9mC,KAAKqiE,OACtEriE,KAAK80G,wBAAwB90G,KAAKqiE,aAJtB,QAOPkxC,EAAAx0G,UAAA+1G,wBAAd,SAAsCzyC,mGACR,SAAMriE,KAAKy7D,sBAAsBs5C,iBAAkBv2E,GAAI6jC,IAAS/9B,wBAApF0wE,EAAoBp4E,EAAAC,OACpBo4E,EAAqBD,GAAqBA,EAAkB9uE,OAAS8uE,EAAkBnvG,MAAM,GACnG7F,KAAKq7D,sBAAsB45C,aAGjB1B,EAAAx0G,UAAA81G,+BAAd,SAA6C/tE,EAAqBu7B,iGAEpC,gCAAMriE,KAAKy7D,sBAAsBy5C,mBAAoB12E,GAAIsI,EAAQu7B,MAAKA,IACvF/9B,wBADCq1B,EAAgB/8B,EAAAC,OAEtB78B,KAAKq7D,sBAAsB1B,gCAE3B35D,KAAK80G,wBAAwBzyC,gCAI7BkxC,EAAAx0G,UAAAs8D,sBAAR,SAA8B1B,GACtBA,IACI35D,KAAK07D,eAAeriD,OAAO,SAAAC,GAAK,OAAAA,EAAEklB,KAAOm7B,EAAcn7B,KAAI37B,OAC3D7C,KAAKmpC,WAAanpC,KAAK07D,eAAeriD,OAAO,SAAAC,GAAK,OAAAA,EAAEklB,KAAOm7B,EAAcn7B,KAAI,IAE7Ex+B,KAAKmpC,WAAawwB,EAClB35D,KAAK07D,eAAeziD,KAAU0gD,MAK5B45C,EAAAx0G,UAAA4zG,gBAAd,SAA8B35B,wGACP,OAAnBp8C,EAAA58B,MAAmB,EAAMA,KAAKsxG,iBAAiB2B,aAC3Cz0E,GAAIw6C,IACL10C,wBAFH1H,EAAKu9D,YAAcpuD,EAAAlP,OAGnB78B,KAAKqyG,mBAAqBryG,KAAKm6F,YAAY9gF,OAAO,SAAAC,GAAK,OAAAA,EAAEklB,KAAOwC,EAAKuzE,kBAAiB,aAGlFhB,EAAAx0G,UAAAy1G,kBAAR,WACIx0G,KAAKyzG,cAAgBzzG,KAAKm1G,6BAGtB5B,EAAAx0G,UAAA01G,mBAAR,WACI,IAAMW,EAA4Bp1G,KAAK4jC,oBAAoB5lC,IAAIgC,KAAK0zG,6BAEhE0B,GACAA,EAA0B52E,IAC1Bx+B,KAAKyzG,cAAcnwG,KAAK,SAAAgW,GAAK,OAAAA,EAAEklB,KAAO42E,EAA0B52E,KAEhEx+B,KAAKipC,UAAYjpC,KAAKyzG,cAAcnwG,KAAK,SAAAgW,GAAK,OAAAA,EAAEklB,KAAO42E,EAA0B52E,KAIjFx+B,KAAKyzG,cAAc5wG,SAAQ7C,KAAKipC,UAAYjpC,KAAKyzG,cAAc,KAG/DF,EAAAx0G,UAAAq8D,gBAAR,SAAwBk5C,GACpB,MAAyC,mBAAlCA,EAAyBhyG,MAG5BixG,EAAAx0G,UAAAo2G,0BAAR,WACI,IAAME,GACF72E,GAAIh8B,OAAOi9B,KAAKjB,GAChB9gC,KAAM8E,OAAOi9B,KAAK/hC,KAClBsuC,WAAYxpC,OAAOi9B,KAAKuM,WACxB1pC,KAAM,cAaV,OAH2DE,OAAOi9B,KAAKivB,eAClEv4C,KAFgB,SAACmD,EAAGkuC,GAAM,OAACluC,EAAEzZ,MAAQ2nD,EAAE3nD,MAAQ,GAAK,IAGpD8O,IAVW,SAAC2K,GACb,OACIklB,GAAIllB,EAAEklB,GACN9gC,KAAM4b,EAAEzZ,MACRmsC,WAAY,GACZ1pC,KAAM,oBAMW4lB,QAAEmtF,KAGjB9B,EAAAx0G,UAAA+zG,YAAd,SAA0B95B,2FACL,SAAMh5E,KAAKsxG,iBAAiBjtE,SACzC7F,GAAIw6C,IACL10C,iBACH,SAHiB1H,EAAAC,cAMb02E,EAAAx0G,UAAAi1G,gBAAR,WACI,OAAIh0G,KAAK4zG,wBAAgC5zG,KAAKs1G,oBAC1Ct1G,KAAKu1G,gBAAwBv1G,KAAKu1G,gBAAgB73G,KAClDsC,KAAKihD,OAAejhD,KAAKw1G,sBAEtB,IAGHjC,EAAAx0G,UAAAu2G,kBAAR,WACI,MAAO,qCACAt1G,KAAK4zG,wBAAwB/yC,WAChC7gE,KAAK4zG,wBAAwB9yC,SAASj+D,OAAS,EAAI,IAAM,IAC1D7C,KAAK4zG,wBAAwB9yC,SAAQ,OAAO9gE,KAAK4zG,wBAAwB58D,YACxEh3C,KAAK4zG,wBAAwBrpC,OAI7BgpC,EAAAx0G,UAAAy2G,oBAAR,WACI,IAAM93G,EAAOsC,KAAKqyG,mBAAqBryG,KAAKqyG,mBAAmB30G,KAAOsC,KAAKihD,OAAOvjD,KAE5E+3G,EAA0Bz1G,KAAKi6F,kBAAoBj6F,KAAKi6F,iBAAiBhB,YACzEyc,EACF11G,KAAKqyG,oBACLryG,KAAKqyG,mBAAmBsD,aACxB31G,KAAKqyG,mBAAmBsD,YAAYje,gBAClCke,EACF51G,KAAKqyG,oBACLryG,KAAKqyG,mBAAmBwD,eACxB71G,KAAKqyG,mBAAmBwD,cAAcne,gBACpCoe,EACF91G,KAAKihD,OAAOupB,eAAeqsB,UAAUh0F,QAAU7C,KAAKihD,OAAOupB,eAAeqsB,UAAU,GAAGa,gBAErFK,EACF0d,GAA2BC,GAA0BE,GAA4BE,EAErF,OAAO/d,EAAar6F,EAAI,KAAKq6F,EAAYr6F,GAG/B61G,EAAAx0G,UAAA80G,oBAAd,SAAkCr1E,iGAChB,SAAMx+B,KAAKwzG,wBAAwBp7D,UAC7C4M,KAAMxmB,KACP8F,wBAFGyxE,EAAQn5E,EAAAC,OAGd78B,KAAKu1G,gBAAkBQ,GAASA,EAAM,aAGlCxC,EAAAx0G,UAAA82D,aAAR,WACI71D,KAAKk2D,SAAWppB,EAAAmoB,kBAChB,IAAM+gD,GACFt4G,KAAM,UACN4E,KAAMsvB,EAAYmwC,QAClBliE,MAAO,UAEXG,KAAKk2D,SAASj9C,KAAK+8F,GAEnB,IAAIl0C,EAAsB9hE,KAAKyiE,aAAe7wC,EAAYmwC,QACpDwwB,EAASvyF,KAAKm0G,YAChBn0G,KAAKutF,aAAa4gB,cAAc5b,GAASzwB,EAAsBlwC,EAAYujC,MACtEn1D,KAAK+tE,YAAY3D,sBAAsBpqE,KAAKqsD,YAAWyV,EAAsBlwC,EAAY4jC,MAElGx1D,KAAK+rG,gBAAkB/rG,KAAKk2D,SAAS78C,OAAO,SAAAC,GAAK,OAAAA,EAAEhX,KAAKuC,aAAei9D,EAAoBj9D,aAAY,IAGnG0uG,EAAAx0G,UAAAqzG,sBAAR,eAAApxE,EAAAhhC,KACIwC,OAAOV,iBAAiB,QAAS,SAACohD,GAC9B,IAAMgwD,EAAiDhwD,EAEvD,GAAIgwD,EAAeC,cAActtG,MAAO,CACpC,IAAMlG,EAAOuzG,EAAeC,cAActtG,MAAM,GAC5ClG,GAAMqhC,EAAK6sB,OAAOluD,EAAKyzG,iBAKzBG,EAAAx0G,UAAAgzG,YAAd,2GACI,IAAI/xG,KAAKsiE,MAEL,OADAtiE,KAAKkyG,UAAW,GAChB,oBAGY,gCAAMlyG,KAAK0hE,YAAYr9B,SAAS7F,GAAIx+B,KAAKsiE,QAAQh+B,wBAAvD2xE,EAAMr5E,EAAAC,OAERy2E,KACA9wG,QACAA,OAAOu4B,QACPv4B,OAAOu4B,OAAO19B,SACdmF,OAAOu4B,OAAO19B,QAAQw3E,UACtBryE,OAAOu4B,OAAO19B,QAAQw3E,SAASy+B,uBAC3BA,EAAuB9wG,OAAOu4B,OAAO19B,QAAQw3E,SAASy+B,sBAG1D2C,GACAA,EAAI7N,eACApoG,KAAKkyG,SAAWoB,EAAqB/vF,KAAK,SAAAib,GAAM,OAAAy3E,EAAI7N,eAAetlG,QAAQ07B,IAAO,IAGtFx+B,KAAKkyG,UAAW,+BAIpBlyG,KAAKkyG,UAAW,+BA/ctBqB,EAA8BnkF,GAlCnCqI,EAAU,mBACPE,SAAU,sBACVkV,YACI,4GACJe,UACIye,SAAU,IACV67C,kBAAmB,IACnBzlC,YAAa,IACbH,MAAO,IACPD,MAAO,IACPn+B,OAAQ,IACR80C,WAAY,IACZ47B,SAAU,IACV/tE,SAAU,IACV+sE,wBAAyB,OAGhC17E,EACG,YACA,iBACA,cACA,eACA,mBACA,oBACA,wBACA,SACA,0BACA,sBACA,sBACA,8BACA,eACA,cACA,gBAEEq7E,GAAN,GA7DuD,CAAAlyC,EAAA1tC,eAAA0tC,EAAA1tC,kBAAX,CAAAytC,EAAAC,aAAAD,EAAAC,gBAAb,CAAAv0B,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCNV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAC,GAAWA,EAAA1tC,eAAA0tC,EAAA1tC,iBAmBvD,WAKI,SAAAuiF,EACcC,GADd,IAAAn1E,EAAAhhC,KACcA,KAAAm2G,4BAONn2G,KAAAusG,eAAiB,SAAAlqC,GACjBA,GACArhC,EAAKyrE,cAAe,EAEpBzrE,EAAKm1E,0BACAC,YAAa53E,GAAI6jC,IACjB/9B,SAASC,KAAK,SAAAmD,GACX1G,EAAKq1E,kBAAoB3uE,IAE5ByrB,QAAQ,WACLnyB,EAAKyrE,cAAe,KAG5BzrE,EAAKq1E,kBAAoB,MAjBzBH,EAAAn3G,UAAAqtC,QAAR,WACIpsC,KAAKusG,eAAevsG,KAAKqiE,QAoBtB6zC,EAAAn3G,UAAA6kD,WAAP,SAAkBhW,GAEVA,EAASy0B,OACTz0B,EAASy0B,MAAM9L,eAAiB3oB,EAASy0B,MAAMlI,eAE/Cn6D,KAAKusG,eAAe3+D,EAASy0B,MAAM9L,eAnCzC2/C,EAA0B9mF,GAT/BqI,EAAU,mBACPE,SAAU,sBACViW,UACIy0B,MAAO,KAEXx1B,YACI,8GAEP3U,EAAO,8BACFg+E,GAAN,GAnB4C,CAAA90C,EAAAC,aAAAD,EAAAC,gBAAb,CAAAv0B,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCGV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAW,GAEPA,EAAAokF,kBAAhB,SAAkCC,GAC9B,OAAKA,EAEEA,EAAO1zF,OAAO,SAACs3C,EAAe5D,GACjC,OAAIA,EAAagU,MAIVhU,EAAagU,MAHTpQ,GAIZ,IARiB,IAHD,CAAA5oC,EAAAW,aAAAX,EAAAW,gBAAR,CAAA5D,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCIV,SAAUA,IAAS,SAAAwe,GAYf,IAAO9W,EAAmB1H,EAAAiD,QAAQoE,MAAMK,iBA2CxCwgF,EAAA,WAII,SAAAA,EACYz9E,EACAiqB,EACRuqC,EACQ2D,EACAxtD,EACAmyD,EACArI,EACAnX,EACAi7B,GATZ,IAAAtwE,EAAAhhC,KACYA,KAAA+4B,SACA/4B,KAAAgjD,YAEAhjD,KAAAkxF,mBACAlxF,KAAA0jC,oBACA1jC,KAAA61F,oBACA71F,KAAAwtF,mBACAxtF,KAAAq2E,8BACAr2E,KAAAsxG,mBAZJtxG,KAAAoxF,eAAiB,EAcrBr4D,EAAOyL,UAAY,KACnBzL,EAAOn2B,MAAQ,IAAI65B,KACnB1D,EAAO09E,2BACP19E,EAAOitD,YAAc,IAAIvpD,KAEzB1D,EAAOu4D,eAAiB,SAAC/7C,GACrBvU,EAAKjI,OAAOitD,YAAczwC,EACtBvU,EAAKjI,OAAOyL,WAAWxD,EAAKuwD,aAAavwD,EAAKjI,OAAOyL,UAAUhG,GAAI+W,EAAKvU,EAAKowD,iBAGrFr4D,EAAO29E,aAAe,SAAAlyE,GACbA,IAELzL,EAAOyL,UAASvJ,KAAQuJ,GAAW5E,OAAQ,OAC3CoB,EAAK21E,cAAcnyE,IACnBxD,EAAKuwD,aAAa/sD,EAAUhG,IAAI,IAAI/B,MAAOiZ,WAAY1U,EAAKowD,gBAC5DpwD,EAAKk4B,mBAAmB10B,EAAUhG,MAGtCzF,EAAO69E,UAAY,SAAA31D,GACf,GAAKA,EAAL,CACA,IAAMzc,GACFwH,WAAYiV,EAAOjV,WACnBxN,GAAIyiB,EAAOqN,MAAgB,SAC3BjC,SAAUpL,EAAOziB,GACjBq4E,IAAK51D,EAAO61D,SACZp5G,KAAMujD,EAAOvjD,MAAWujD,EAAkB,UAAC,IAAIA,EAAiB,SAChEspB,MAAOj8C,EAASiD,QAAQW,WAAWokF,kBAAkBr1D,EAAOupB,eAAeC,gBAC3EzzB,YACIiK,EAAOupB,eAAe0jB,aAAarrF,OAAS,EACtCo+C,EAAOupB,eAAe0jB,aAAa,GAAG9oF,OACtC,GACV2xG,aACI91D,EAAOupB,eAAe0jB,aAAarrF,OAAS,EACtCo+C,EAAOupB,eAAe0jB,aAAa,GAAG9oF,OACtC,GACV00C,SAAU,GACVk9D,cAAe,MAEnBj+E,EAAOyL,UAASvJ,KAAQuJ,GAAW5E,OAAQ,OAC3CoB,EAAK21E,cAAcnyE,IACnBxD,EAAKuwD,aAAa/sD,EAAUhG,IAAI,IAAI/B,MAAOiZ,WAAY1U,EAAKowD,gBAC5DpwD,EAAKk4B,mBAAmB10B,EAAUhG,MAGtCzF,EAAO60D,OAAS,SAACld,GACb6c,EAAaK,OAAOld,GACpB33C,EAAOk+E,gBAGXl+E,EAAOm+E,oBAAsB,WACzB,OAAOl2E,EAAKm2E,4BAGhBp+E,EAAOggD,4BAA8B,WACjC,IAAMzW,EAASthC,EAAKjI,OAAOqN,KAAOpF,EAAKjI,OAAOqN,IAAI5H,IAAO,GACnD6jC,EAAQrhC,EAAKjI,OAAOspC,OAAS,GAC7Bn+B,EAASlD,EAAKjI,OAAOmL,QAAU,GAC/B80C,EAAah4C,EAAKjI,OAAOigD,YAAc,GAE7Ch4C,EAAK60D,kBAAkB58D,OAClBtqB,IAAI,SAAA2K,GAAK,OAAAA,GAAKA,EAAE28E,UAAY38E,EAAE28E,SAASh1C,QAAU3nC,EAAE28E,SAASh1C,OAAOziB,KACnEnlB,OAAO,SAAAC,GAAK,QAAEA,IACdqS,KAAK,GACLqO,UAAU,SAACqyB,GACR,IAAM+qD,EACFr+E,EAAO21B,gBAAkB31B,EAAO21B,eAAe7rD,QAAUk2B,EAAO21B,eAAe,GAC7EvV,EAAW,mCAAmCkT,EAAQ,aAAaiW,EAAK,aAAaD,EAAK,cAAcn+B,EAAM,kBAAkB80C,EAAU,qCAC5IhjD,EAAiBqhF,YAAW,mBACbr2E,EAAKq1C,4BAA4BnS,yBAAwB,2BAC5EljC,EAAKgiB,UAAUvhD,MACX03C,SAAQA,EACRmZ,QACIsiD,SAAUwC,GAAsBr+E,EAAOyL,WAE3C9M,YACI,SACA,WACA,SAACqB,EAAQ67E,GACL77E,EAAO67E,SAAWA,IAG1BtwD,YAAa,KACbC,qBAAqB,IAGzBxrB,EAAOk+E,kBAInBl+E,EAAO25E,eAAiB,SAACz5B,GACrB,IAAM5W,EAAQrhC,EAAKjI,OAAOspC,OAAUrhC,EAAKjI,OAAOqN,KAAOpF,EAAKjI,OAAOqN,IAAIi+B,QAAQ7lC,GACzEsI,EAASmyC,GAAYA,EAASnyC,OACpC9F,EAAKs2E,4BAA4Bj1C,EAAOv7B,IAG5C/N,EAAOw+E,qBAAuB,SAAAC,GAC1Bz+E,EAAOy+E,yBAA2BA,GAGtCx3G,KAAKmiE,aAkIb,OA/HWq0C,EAAAz3G,UAAA4tC,WAAP,WACQ3sC,KAAKuwF,mBACLvwF,KAAKuwF,iBAAiB3jD,UACtB5sC,KAAKuwF,iBAAmB,OAIxBimB,EAAAz3G,UAAAojE,WAAR,WACI,GAAIniE,KAAK+4B,OAAO4xC,WAAY3qE,KAAKy3G,kDAAkDz3G,KAAK+4B,OAAO4xC,gBAC1F,CACD,IAAMtI,EAAQriE,KAAK+4B,OAAOspC,OAAUriE,KAAK+4B,OAAOqN,KAAOpmC,KAAK+4B,OAAOqN,IAAIi+B,QAAQ7lC,GAC/Ex+B,KAAKs3G,4BAA4Bj1C,GAGrCriE,KAAK03G,mBAGDlB,EAAAz3G,UAAA24G,gBAAR,eAAA12E,EAAAhhC,KACIA,KAAKuwF,iBAAmBjiE,EAAA2hE,wBACnB52E,OAAO,SAAAC,GAAK,QAAEA,IACd4f,uBACAc,UAAU,SAAAvlB,GACHusB,EAAKjI,OAAOyL,WAAaxD,EAAKjI,OAAOyL,UAAU6nB,WAAa53C,EAAOsnD,SACnE/6B,EAAKjI,OAAOyL,UAAU5E,OAASnrB,EAAOmrB,QAE1C,IAAM4E,EAAYxD,EAAKjI,OAAO09E,wBAAwBp9F,OAAO,SAAAC,GAAK,OAAAA,EAAE+yC,WAAa53C,EAAOsnD,SAAQ,GAC5Fv3B,IAAWA,EAAU5E,OAASnrB,EAAOmrB,WAI7C42E,EAAAz3G,UAAAo4G,yBAAR,WAOI,OALI30G,OAAOu4B,QACPv4B,OAAOu4B,OAAO+zD,QACdtsF,OAAOu4B,OAAO+zD,OAAOC,UACrBvsF,OAAOu4B,OAAO+zD,OAAOC,SAAS,IAC9BvsF,OAAOu4B,OAAO+zD,OAAOC,SAAS,GAAG0C,WAIjC+kB,EAAAz3G,UAAAwyF,aAAR,SAAqBC,EAA0Bj8C,EAAW67C,GAA1D,IAAApwD,EAAAhhC,KACSA,KAAKm3G,4BAA+B5hE,IAEzCv1C,KAAK+4B,OAAOs4D,aAAe,KAC3BrxF,KAAK+4B,OAAO0lB,SAAU,EACtBz+C,KAAK+4B,OAAOitD,YAAczwC,EAAIG,WAE9B11C,KAAKkxF,iBACAF,uBACGxyD,GAAIgzD,EACJj8C,IAAKv1C,KAAK+4B,OAAOitD,YACjBvxC,KAAM28C,IAET9sD,SAASC,KAAK,SAAAmD,GAOX1G,EAAKjI,OAAOs4D,aAAe3pD,EAAK/4B,IANF,SAACY,GAC3B,OAAA0rB,KACO1rB,GACHk7B,UAAW,IAAIhO,KAAKltB,EAAEk7B,WACtBo1C,QAAS,IAAIpjD,KAAKltB,EAAEswE,eAI/B1sB,QAAQ,WAAM,OAACnyB,EAAKjI,OAAO0lB,SAAU,MAGtC+3D,EAAAz3G,UAAAm6D,mBAAR,SAA2Bs4B,GAA3B,IAAAxwD,EAAAhhC,KACIA,KAAK0jC,kBAAkBW,SAAU7F,GAAIgzD,IAAeltD,SAASC,KAAK,SAAAC,GAC9DxD,EAAKjI,OAAO21B,eAAiBlqB,EAAUk1B,eACvC14B,EAAKjI,OAAO4+E,2BAA6B32E,EAAKjI,OAAO4+E,6BAIrDnB,EAAAz3G,UAAAu4G,4BAAR,SAAoCj1C,EAAoBv7B,GAAxD,IAAA9F,EAAAhhC,KACSqiE,IAEWv7B,EACV9mC,KAAK0jC,kBAAkBssD,6BACnBxxD,GAAI6jC,EACJv7B,OAAMA,EACNzB,SAAU,GACVoC,KAAM,IACPnD,SACHtkC,KAAK0jC,kBAAkBqsD,sBACnBvxD,GAAI6jC,EACJh9B,SAAU,GACVoC,KAAM,IACPnD,UAEDC,KAAK,SAACw0B,GACV/3B,EAAKjI,OAAO09E,wBAA0B19C,EAClCA,EAAWl2D,QAAQm+B,EAAKjI,OAAO29E,aAAa39C,EAAW,IAE3D/3B,EAAK21E,aAAa59C,MAIlBy9C,EAAAz3G,UAAA43G,aAAR,SAAqB59C,GAArB,IAAA/3B,EAAAhhC,KACS+4D,GAAeA,EAAWl2D,QAE/B7C,KAAKwtF,iBACAW,gBAAiBnpC,IAAK+T,EAAWpqD,IAAI,SAAA2K,GAAK,OAAAA,EAAE+yC,aAC5C/nB,SAASC,KAAK,SAAAqzE,GACX,OAAA52E,EAAK62E,6BAA6BD,EAAwB7+C,MAI9Dy9C,EAAAz3G,UAAA84G,6BAAR,SACID,EACA7+C,GAEAA,EAAWhlD,QAAQ,SAAAywB,GACf,IAAMszE,EAAcF,EAAuBv+F,OAAO,SAAAC,GAAK,OAAAA,EAAEyiD,SAAWv3B,EAAU6nB,WAAU,GACpFyrD,IAAatzE,EAAU5E,OAASk4E,EAAYl4E,WAI1C42E,EAAAz3G,UAAA04G,kDAAd,SAAgE9sC,qGAC/C,SAAM3qE,KAAKsxG,iBAAiBsB,4BACrCp0E,GAAImsC,IACLrmC,wBAFGoD,EAAO9K,EAAAC,OAGb78B,KAAK+4B,OAAOigE,UAAYtxD,EACxB1nC,KAAK+4B,OAAOkhE,iBAAmBvyD,GAAQA,EAAK,GAEtC26B,EAAQriE,KAAK+4B,OAAOqN,KAAOpmC,KAAK+4B,OAAOqN,IAAIi+B,QAAQ7lC,GACnDsI,EAAS9mC,KAAK+4B,OAAOkhE,kBAAoBj6F,KAAK+4B,OAAOkhE,iBAAiBnzD,OAC5E9mC,KAAKs3G,4BAA4Bj1C,EAAOv7B,aAnPnC0vE,EAAuBpnF,GAZnCmJ,EAAW,kBAAmB,2BAC9BL,EACG,SACA,YACA,eACA,mBACA,oBACA,oBACA,mBACA,8BACA,qBAESs+E,GAAb,GAAa1pE,EAAA0pE,wBAAuBA,EAvDrB,CAAAloF,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCLV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAAC,aAAAD,EAAAC,eAC5C9yC,QAAQrxB,OAAO,mBAAmBy4C,UAAU,kBACxC,UACA,SAAC8G,GACG,OACInE,SAAU,KACVjJ,OACI0oE,YAAa,KAEjBniE,KAAM,SAACvG,EAAOwG,GAUV,SAAS2hE,IACD3hE,EAAQ,IAEJA,EAAQ,GAAGymC,SAASzmC,EAAQ,GAAGymC,SAASz5E,OAAS,GACpBy3C,aAC7B,QACA,UAKZ,WACI,GAAIzE,EAAQ,GAAI,CAGZ,IAFA,IAAImiE,EAA2BniE,EAAQ,GAAGgF,aACpCo9D,EAAiDpiE,EAAQ,GAAGymC,SACzDn/E,EAAI,EAAGA,EAAI86G,EAAgCp1G,OAAS,EAAG1F,IAC5D66G,GAA4B/yG,KAAK4L,KAAKonG,EAAgC96G,GAAG09C,cAE7E,OAAOm9D,EAA2B,GAEtC,OAAO,EAdaE,GAAiD,MAfzE7oE,EAAM8oE,6BAA+B,WACjCX,KAEJnoE,EAAM0oE,aAAcP,yBAA0BnoE,EAAM8oE,+BAEpD5pF,QAAQsnB,QAAQ4G,GAAS99C,KAAK,SAAU,WACpC64G,WAhBW,CAAA1qE,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCFV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAC,IAAW,SAAA+2C,GACvD,IAAOj3E,EAAW7S,EAAS4S,QAAQC,SAM5B3P,EAAelD,EAASiD,QAAQC,aAChCI,EAActD,EAASiD,QAAQK,aAqBtC,WAeI,SAAAymF,EACY72D,EACA8vD,EACA5T,EACAD,GAJZ,IAAAz8D,EAAAhhC,KACYA,KAAAwhD,SACAxhD,KAAAsxG,mBACAtxG,KAAA09F,sBACA19F,KAAAy9F,0BAfLz9F,KAAAwxG,sBA+CAxxG,KAAAuoC,cAAgBpH,EACnB,SAACqH,GACGxH,EAAK4I,YAAcpB,EACnBxH,EAAK08D,oBAAoBn1D,cAAcC,IAE3C,KACA,GAGGxoC,KAAAyyG,eAAiBtxE,EACpB,SAACqH,GACG,IAAMmiC,EAAa3pC,EAAKuzE,gBACnB5pC,GAEL3pC,EAAKmxE,cAAcxnC,EAAYniC,IAEnC,KACA,GA4GGxoC,KAAAs4G,+BAAiC,WAAe,OAAA91G,OAAOi9B,KAAKmB,YAAY23E,iBA1JxEF,EAAAt5G,UAAAqtC,QAAP,WACIpsC,KAAK4mG,iBAAmB5mG,KAAKi9B,OAASj9B,KAAKi9B,MAAM2pE,iBACjD5mG,KAAK4pC,YAAc5pC,KAAKi9B,OAASj9B,KAAKi9B,MAAMuL,MAE5CxoC,KAAK0oC,eAAelX,EAAak0C,QAGjC1lE,KAAKw4G,8BAAgCx4G,KAAKwhD,OAAOyU,QAAQv4D,KAAKgF,SAD/B,8BAG/B1C,KAAKy4G,eAAiB56G,OAAO0P,KAAKqkB,GAC7BvY,OAAO,SAAAC,GAAK,QAAE2+D,SAAS3+D,IAAM,KAC7BD,OACG,SAAShY,GACL,OAAOrB,KAAK8C,QAAQzB,GAAK,IAE5B,UAAW,WAAY,WAAY,UAEvCsN,IAAI,SAAAvQ,GAAS,OAAGM,IAAKkzB,EAAYxzB,GAAQA,MAAKA,MAGhDi6G,EAAAt5G,UAAA6kD,WAAP,WACI,IAAM+mB,EAAa3qE,KAAKu0G,gBAClBmE,EAAkB14G,KAAKwxG,mBAAmB3uG,OAAS,GACrD8nE,GAAe+tC,GAAoB14G,KAAK24G,mBACxC34G,KAAK24G,kBAAmB,EACxB34G,KAAKmyG,cAAcxnC,KAwBpB0tC,EAAAt5G,UAAAsmG,iBAAP,SAAwBpsB,GACpBj5E,KAAK09F,oBAAoB2H,iBAAiBpsB,GAAYA,EAASz6C,IAC/Dx+B,KAAKy9F,wBAAwBmb,mBAAmB3/B,GAAYA,EAASz6C,KAGlE65E,EAAAt5G,UAAA85G,iBAAP,SAAwB9xD,GACpB/mD,KAAK4mG,iBAAmB7/C,GAAYA,EAASrpD,KAC7CsC,KAAK09F,oBAAoB4H,yBAAyBv+C,GAAYA,EAASrpD,OAGpE26G,EAAAt5G,UAAA+5G,YAAP,SAAmB34G,GACfH,KAAK+4G,gBAAkB54G,GAAOA,EAAIzC,KAClCsC,KAAK09F,oBAAoB8H,cAAcrlG,GAAOA,EAAIq+B,KAG/C65E,EAAAt5G,UAAAi6G,iBAAP,SAAwBtiD,GACpB12D,KAAKi5G,sBAAwBviD,GAAYA,EAAS72D,MAClDG,KAAK09F,oBAAoB6H,mBAAmB7uC,GAAYA,EAASl4B,KAG9D65E,EAAAt5G,UAAA2pC,eAAP,SAAsBwwE,GAClBl5G,KAAKk5G,qBAAuBA,EAC5Bl5G,KAAK09F,oBAAoBh1D,eAAewwE,IAGrCb,EAAAt5G,UAAA0mG,gBAAP,SAAuB0T,GACnBn5G,KAAKm5G,sBAAwBA,EAC7Bn5G,KAAK09F,oBAAoB+H,gBAAgB0T,IAGtCd,EAAAt5G,UAAAq6G,2BAAP,SAAkCx/B,GAC9B,QAASA,GACL,KAAKtrD,EAASiD,QAAQC,aAAak0C,OAC/B,MAAO,SACX,KAAKp3C,EAASiD,QAAQC,aAAa6nF,IAC/B,MAAO,QACX,KAAK/qF,EAASiD,QAAQC,aAAa8nF,QAC/B,MAAO,aACX,QACI,MAAM,IAAIv5G,MAAM,2BAIrBs4G,EAAAt5G,UAAAw6G,4BAAP,SAAmC7T,GAC/B,QAASA,GACL,KAAKp3E,EAASiD,QAAQK,YAAYmwC,QAC9B,MAAO,UACX,KAAKzzC,EAASiD,QAAQK,YAAYujC,MAC9B,MAAO,kBACX,KAAK7mC,EAASiD,QAAQK,YAAYwjC,MAC9B,MAAO,aACX,KAAK9mC,EAASiD,QAAQK,YAAYsjC,KAC9B,MAAO,cACX,KAAK5mC,EAASiD,QAAQK,YAAYyjC,MAC9B,MAAO,SACX,KAAK/mC,EAASiD,QAAQK,YAAY0jC,KAC9B,MAAO,OACX,KAAKhnC,EAASiD,QAAQK,YAAY2jC,OAC9B,MAAO,eACX,KAAKjnC,EAASiD,QAAQK,YAAY4gD,MAC9B,MAAO,QACX,KAAKlkD,EAASiD,QAAQK,YAAY2gD,SAC9B,MAAO,WACX,KAAKjkD,EAASiD,QAAQK,YAAY6gD,IAC9B,MAAO,eACX,KAAKnkD,EAASiD,QAAQK,YAAY4jC,KAC9B,MAAO,OACX,KAAKlnC,EAASiD,QAAQK,YAAY4nF,IAC9B,MAAO,MACX,KAAKlrF,EAASiD,QAAQK,YAAYtD,SAC9B,MAAO,WACX,KAAKA,EAASiD,QAAQK,YAAY6jC,OAC9B,MAAO,UACX,KAAKnnC,EAASiD,QAAQK,YAAY8jC,WAC9B,MAAO,aACX,QACI,MAAM,IAAI31D,MAAM,2BAIpBs4G,EAAAt5G,UAAAw1G,cAAR,WACI,OAAOv0G,KAAKi9B,OAASj9B,KAAKi9B,MAAMgkB,QAAUjhD,KAAKi9B,MAAMgkB,OAAOqN,MAAgB,UAGzE+pD,EAAAt5G,UAAA06G,iBAAP,WACI,OAAO57G,OAAO0P,KAAKikB,GAAcnY,OAAO,SAAAC,GAAK,OAAA2+D,SAAS3+D,IAAM,GAAK2+D,SAAS3+D,GAAK,KAG5E++F,EAAAt5G,UAAA26G,kBAAP,WACI,OAAO15G,KAAKy4G,gBAGRJ,EAAAt5G,UAAAozG,cAAR,SAAsBxnC,EAAyBniC,GAA/C,IAAAxH,EAAAhhC,KACIA,KAAKsxG,iBACAqI,yBACGn7E,GAAImsC,EACJljC,KAAM,EACNpC,SAAU,IACVuE,YAAapB,IAEhBlE,SAASC,KAAK,SAAAmD,GACX1G,EAAKwwE,mBAAqB9pE,EAAK7hC,SAMpCwyG,EAAAt5G,UAAA66G,YAAP,WAEQr3G,SAASo4C,qBAAqB,QAAQ,GAAGH,UAAU9tB,SAAS,aAC5DnqB,SAASi2C,uBAAuB,2BAA2B31C,SAE3DN,SACKi2C,uBAAuB,2BAA2B,GAClD8B,aAAa,QAAS,2BACvB/3C,SAASi2C,uBAAuB,eAAe31C,QAC/CN,SAASi2C,uBAAuB,eAAe,GAAGgC,UAAUjmC,OAAO,iBA3L7E8jG,EAAgCjpF,GATrCqI,EAAU,mBACPE,SAAU,4BACVkV,YACI,oHACJe,UACI3Q,MAAO,OAGd/E,EAAO,SAAU,mBAAoB,kCAAmC,wCACnEmgF,GAAN,GA7BuD,CAAAh3C,EAAA+2C,WAAA/2C,EAAA+2C,cAAX,CAAAh3C,EAAAC,aAAAD,EAAAC,gBAAb,CAAAv0B,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAK/B,IAQAy4C,EAAA,SAAAv2E,GAKI,SAAAu2E,EACI7gF,EACQ8gF,EACA3kB,GAHZ,IAAAn0D,EAKIsC,EAAAhmC,KAAA0C,KAAMg5B,IAAMh5B,YAHJghC,EAAA84E,6BACA94E,EAAAm0D,yBAgIhB,OAxIyDtwD,EAAAg1E,EAAAv2E,GAa9Cu2E,EAAA96G,UAAA+lC,aAAP,SAAoBO,QAAA,IAAAA,MArBE,IAsBbrlC,KAAK05B,WAAWi/D,kBACjB34F,KAAK+5G,SACD,EACA10E,EACA,KACA,SAAAkwD,GAAiB,OAAAA,KAItBskB,EAAA96G,UAAAy/F,OAAP,WACI,IAAMvhE,EAAQj9B,KAAK05B,WACb2L,EACDpI,EAAM07D,kBACH17D,EAAM07D,iBAAiBpD,eACvBt4D,EAAM07D,iBAAiBpD,cAAclwD,UApC3B,GAsCZ2zC,EACF/7C,EAAM07D,kBAAoB17D,EAAM07D,iBAAiB3f,WAErDh5E,KAAK+5G,SACD,EACA10E,EACA2zC,EACA,SAAAuc,GAAiB,OAAAA,KAIlBskB,EAAA96G,UAAAg2E,SAAP,WACI,IAAM93C,EAAQj9B,KAAKg5B,MAAMU,WACnBsgF,EACF/8E,EAAM07D,kBAAoB17D,EAAM07D,iBAAiBpD,cAC/Cvc,EACF/7C,EAAM07D,kBAAoB17D,EAAM07D,iBAAiB3f,WAErDh5E,KAAK+5G,SACDC,EAAWvyE,KAAO,EAClBuyE,EAAW30E,SACX2zC,EACA,SAAAuc,GAAiB,OACb1vF,MAAOm0G,EACDA,EAAWn0G,MAAMqiB,OAAOqtE,EAAc1vF,OACtC0vF,EAAc1vF,MACpBqgC,MAAOqvD,EAAcrvD,MACrBuB,KAAM8tD,EAAc9tD,KACpBpC,SAAUkwD,EAAclwD,aAK7Bw0E,EAAA96G,UAAA65G,mBAAP,SAA0B5/B,GACtB,IAAM/7C,EAAQj9B,KAAKg5B,MAAMU,WACnB2L,EACDpI,EAAM07D,kBACH17D,EAAM07D,iBAAiBpD,eACvBt4D,EAAM07D,iBAAiBpD,cAAclwD,UA5E3B,GA+ElBrlC,KAAK+5G,SACD,EACA10E,EACA2zC,EACA,SAAAuc,GAAiB,OAAAA,KAIjBskB,EAAA96G,UAAAg7G,SAAR,SACItyE,EACApC,EACA2zC,EACA1tB,GAJJ,IAAAtqB,EAAAhhC,KAQUi9B,EAAQj9B,KAAK05B,WACnB,GAAIuD,EAAMg5D,SAASh1C,OAAQ,CACvBjhD,KAAKihC,MACD3+B,KAAM,wCACNmlC,KAAIA,EACJpC,SAAQA,EACR2zC,WAAUA,KAIVA,EACUh5E,KAAKm1F,qBAAqB8kB,cAChCz7E,GAAIw6C,EACJvxC,KAAIA,EACJpC,SAAQA,IACTf,SAEOtkC,KAAK85G,2BAA2BI,oBACpC17E,GAAIvB,EAAMg5D,SAASh1C,OAAOziB,GAAIiJ,KAAIA,EAAEpC,SAAQA,IAChDf,UAIDC,KAAK,SAAAgxD,GACF,IAAM4kB,EAAmB7uD,EAAOiqC,GAChCv0D,EAAKC,MACD3+B,KAAM,uCACNizF,cAAe4kB,EACfnhC,WAAUA,MAGjBhvC,MAAM,SAAA3oC,GACH,OAAA2/B,EAAKC,MACD3+B,KAAM,0CACNiO,MAAOlP,WAInBrB,KAAKg5B,MAAMC,OACNtqB,IAAI,SAAA2K,GAAK,OAAAA,GAAKA,EAAE28E,WAChB58E,OACG,SAAA48E,GAAY,OAACA,EAASx3C,UAAYw3C,EAASj7D,YAE9CrP,KAAK,GACLyuF,qBAAqB,WAClB,OAAAp5E,EAAK+4E,SAAStyE,EAAMpC,EAAU2zC,EAAY1tB,MApIjDuuD,EAAmCzqF,GAN/C2I,EAAQ,kBAAmB,uCAC3BG,EACG,oBACA,6BACA,yBAES2hF,GAAb,CAAyDvrF,EAAAyS,kBAA5CqgC,EAAAy4C,oCAAmCA,EAbjB,CAAA/sE,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCMV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAAi3B,gBAAAj3B,EAAAi3B,kBAC5C9pE,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,SAACsmB,GACGA,EAAepkB,MAAM,8CACjBkB,IAAK,gBACL2zB,gBAAgB,EAChBpqB,MACI8nD,IAAK,gBACLhsC,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,cAAgB3tC,EAAGkyC,mBAE3CnxC,SACI,sCACA,SACIi7C,GAEAA,EAAwB34D,iBAGhCwd,OACIokD,wBACIvtD,SACI,8FACJzhB,WAAYpJ,EAASsK,+BAGnB,oBAAqB,SAAA15B,GAAK,OACxB+hD,OAAQ/hD,GAAKA,EAAE+2F,UAAY/2F,EAAE+2F,SAASh1C,OACtCg5C,iBACI/6F,GACAA,EAAE05F,cACF15F,EAAE05F,aAAatzD,SACfpmC,EAAE05F,aAAatzD,QAAQ0zC,eAGnC0X,uBACIv3C,SACI,gFACJzhB,WAAYpJ,EAAAsK,+BAGV,oBAAqB,SAAA15B,GAAK,OACxBu/C,QACIv/C,EAAEy5F,kBACFz5F,EAAEy5F,iBAAiBl6C,SACnBv/C,EAAEk6F,kBACFl6F,EAAEk6F,iBAAiB36C,QACvBwC,OAAQ/hD,EAAE+2F,UAAY/2F,EAAE+2F,SAASh1C,OACjC0f,SACIzhE,GAAKA,EAAEu5F,cAAgBv5F,EAAEu5F,aAAa93B,SAC1Cg4B,iBAAkBz5F,EAAEy5F,iBACpBS,iBACIl6F,EAAEk6F,kBACFl6F,EAAEk6F,iBAAiBkB,wBArDhB,CAAAxtD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,GAgBf,IAAAutE,EAAA,oBAAAA,KAmBA,OAVWA,EAAAt7G,UAAAu7G,iBAAP,WACI,OAAKt6G,KAAKu6G,QAAUv6G,KAAKu1F,cAAc1vF,MAAMhD,OAAS7C,KAAKqlC,SAChDrlC,KAAKu1F,cAAc1vF,MAAMI,MAAM,EAAGjG,KAAKqlC,UAE3CrlC,KAAKu1F,cAAc1vF,OAGvBw0G,EAAAt7G,UAAAg2E,SAAP,WACI/0E,KAAKg1E,cAjBAqlC,EAA6BjrF,GAbzCqI,EAAU,mBACPE,SAAU,wBACVkV,YACI,wGACJe,UACI2nD,cAAe,IACfglB,OAAQ,IACRl1E,SAAU,IACVm1E,aAAc,IACd/7D,QAAS,IACTu2B,WAAY,QAGPqlC,GAAb,GAAavtE,EAAAutE,8BAA6BA,EAhB3B,CAAA/rF,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,GAef,IAAA2tE,EAAA,WAQI,SAAAA,EACYjwD,EACAgpD,GADAxzG,KAAAwqD,iBACAxqD,KAAAwzG,0BAmChB,OAhCWiH,EAAA17G,UAAA27G,iBAAP,WACI16G,KAAK26G,SAAW36G,KAAK26G,QAEhB36G,KAAK46G,QAAW56G,KAAK66G,mBAAoB76G,KAAK26G,UAC/C36G,KAAK86G,8CACL96G,KAAK+6G,yCAILN,EAAA17G,UAAA+7G,4CAAR,eAAA95E,EAAAhhC,KACIA,KAAK66G,oBAGD76G,KAAK2nG,cACL3nG,KAAK2nG,aAAaM,mBAAmBplG,OAAS,GAE9C7C,KAAKwzG,wBACAp7D,UAAW4M,IAAKhlD,KAAK2nG,aAAaM,qBAClC3jE,SAASC,KACN,SAAAs2E,GACI,OAAC75E,EAAK65E,iBAAmBA,KAIrCJ,EAAA17G,UAAAg8G,qCAAR,eAAA/5E,EAAAhhC,KACIA,KAAK46G,UAED56G,KAAK2nG,cAAgB3nG,KAAK2nG,aAAaK,UAAUnlG,OAAS,GAC1D7C,KAAKwqD,eACApS,UAAW4M,IAAKhlD,KAAK2nG,aAAaK,YAClC1jE,SAASC,KAAK,SAAAq2E,GAAU,OAAC55E,EAAK45E,OAASA,KA3C3CH,EAAiCrrF,GAV7CqI,EAAU,mBACPE,SAAU,6BACVkV,YACI,gHACJe,UACI+5D,aAAc,IACdqT,4BAA6B,OAGpC9iF,EAAO,iBAAkB,4BACbuiF,GAAb,GAAa3tE,EAAA2tE,kCAAiCA,EAf/B,CAAAnsF,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCJV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAi3B,GAG5C,IAAOl3D,EAAW7S,EAAS4S,QAAQC,UAgBnC,WAKI,SAAA85E,EACY3J,EACA7T,GAFZ,IAAAz8D,EAAAhhC,KACYA,KAAAsxG,mBACAtxG,KAAAy9F,0BALLz9F,KAAAwxG,sBAiBAxxG,KAAAyyG,eAAiBtxE,EACpB,SAACqH,GACG,IAAMmiC,EAAa3pC,EAAKuzE,gBACxBvzE,EAAKmxE,cAAcxnC,EAAYniC,IAEnC,KACA,GAfGyyE,EAAAl8G,UAAA6kD,WAAP,WACI,IAAM+mB,EACF3qE,KAAKi9B,OACLj9B,KAAKi9B,MAAMgkB,QACXjhD,KAAKi9B,MAAMgkB,OAAOqN,MAAgB,SAChCoqD,EAAkB14G,KAAKwxG,mBAAmB3uG,OAAS,EACrD8nE,IAAe+tC,GAAiB14G,KAAKmyG,cAAcxnC,IAYpDswC,EAAAl8G,UAAAsmG,iBAAP,SAAwBpsB,GAChBA,EACAj5E,KAAKy9F,wBAAwBmb,mBAAmB3/B,EAASz6C,IACxDx+B,KAAKy9F,wBAAwB34D,gBAG9Bm2E,EAAAl8G,UAAAw1G,cAAR,WACI,OACIv0G,KAAKi9B,OACLj9B,KAAKi9B,MAAMgkB,QACXjhD,KAAKi9B,MAAMgkB,OAAOqN,MAAgB,UAIlC2sD,EAAAl8G,UAAAozG,cAAR,SAAsBxnC,EAAyBniC,GAA/C,IAAAxH,EAAAhhC,KACIA,KAAKsxG,iBACAqI,yBACGn7E,GAAImsC,EACJljC,KAAM,EACNpC,SAAU,IACVuE,YAAapB,IAEhBlE,SAASC,KAAK,SAAAmD,GACX1G,EAAKwwE,mBAAqB9pE,EAAK7hC,SAnDzCo1G,EAAoC7rF,GATzCqI,EAAU,mBACPE,SAAU,gCACVkV,YACI,sHACJe,UACI3Q,MAAO,OAGd/E,EAAO,mBAAoB,wCACtB+iF,GAAN,GAnB4C,CAAA75C,EAAAi3B,gBAAAj3B,EAAAi3B,mBAAb,CAAAvrD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAAs0B,eAAAt0B,EAAAs0B,iBAmB/B,WAGI,SAAA85C,EACYzd,GAAAz9F,KAAAy9F,0BAGLyd,EAAAn8G,UAAAg2E,SAAP,WACI/0E,KAAKy9F,wBAAwB1oB,YAR/BmmC,EAA8B9rF,GAPnC8I,EAAO,uCACPT,EAAU,mBACPE,SAAU,yBACVkV,YACI,0GACJe,UAAY3Q,MAAO,QAEjBi+E,GAAN,GAnBe,CAAA5sF,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCKV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAk3B,GAM/BA,EAAA6iB,kBAAoB,IAAI7hF,GAAGG,QAWxClL,QACKrxB,OAAO,mBACPmC,QAAQ,UAAW,WAAM,OAAAk9B,EAAEisB,WAAW4yD,UAE3C9sF,EAAAiD,QAAQ63B,qBAAqB,WACzB7sB,EAAEisB,WAAW4yD,QAAQtxD,OAAOM,QAAU,SAAAiC,GAClCisC,EAAA6iB,kBAAkBjhF,OAAOmyB,MAvBW,CAAA+U,EAAAk3B,QAAAl3B,EAAAk3B,WAAb,CAAAxrD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCPV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAk3B,GAU5C,IAAA+iB,EAAA,WACI,SAAAA,EACIriF,EACQoiF,EACAE,EACA/e,GAJZ,IAAAv7D,EAAAhhC,KAEYA,KAAAo7G,UACAp7G,KAAAs7G,kBACAt7G,KAAAu8F,sBAER,IAAMuI,EAAc,SAAC5lG,GAAyB,OAAAA,GAAKA,EAAE+2F,UAAY/2F,EAAE+2F,SAASh1C,QAAU/hD,EAAE+2F,SAASh1C,OAAOziB,IAGxG85D,EAAA6iB,kBACK9hG,OAAO,SAAAgzC,GAAY,OAHL,SAACntD,EAAsBmtD,GAAmB,OAAAy4C,EAAY5lG,KAAOmtD,EAGxDqD,CAAW12B,EAAMU,WAAY2yB,KAChDlrB,SAAS,WAAM,OAAA7H,GAAG6uC,WAAW6zB,MAAM,OACnChiE,UAAU,SAAAnqB,GAAK,OAAAmxB,EAAKw9D,WAEzBxlE,EAAMC,OACDtqB,IAAIm2F,GACJ5rE,uBACA6iE,cAAcztE,EAAAiD,QAAQ+3B,2BACtBnoB,SAAS,WAAM,OAAA7H,GAAG6uC,WAAW6zB,MAAM,OACnChiE,UAAU,SAAAqyB,GAAY,OAAArrB,EAAKhH,UAAUqyB,KAE1CrzB,EAAM0B,OACDsnC,MAAM,SAAA3gE,GAAK,MAAW,oCAAXA,EAAEiB,OACb03B,UAAU,SAAA34B,GAAK,OAAA2/B,EAAKk7D,YAAY4I,EAAY9rE,EAAMU,eAe/D,OAZY2hF,EAAAt8G,UAAAi7B,UAAR,SAAkBqyB,GACdrsD,KAAKo7G,QAAQjf,OAAOniE,UAAUqyB,IAG1BgvD,EAAAt8G,UAAAy/F,OAAR,WACIx+F,KAAKs7G,gBAAgB9c,SACrBx+F,KAAKu8F,oBAAoBiC,QAAO,IAG5B6c,EAAAt8G,UAAAm9F,YAAR,SAAoB7vC,GAChBrsD,KAAKo7G,QAAQjf,OAAOD,YAAY7vC,IArC3BgvD,EAAcjsF,GAP1B2I,EAAQ,kBAAmB,kBAC3BG,EACG,oBACA,UACA,8BACA,oCAESmjF,GAAb,GAAa/iB,EAAA+iB,eAAcA,EAViB,CAAAj6C,EAAAk3B,QAAAl3B,EAAAk3B,WAAb,CAAAxrD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAAk3B,QAAAl3B,EAAAk3B,UAgB5C/pE,QAAQrxB,OAAO,mBAAmBsxB,QAAQ,gBACtC,YACA,SAACC,GACG,OAAOA,EACH,0CAGI8sF,sBACI7sF,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,aAAcxQ,GAAI,QAExCg9E,kCACI9sF,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,iBAAkBxQ,GAAI,QAE5Ci9E,wBACI/sF,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,MAAOyxB,UAAW,kBApCrB,CAAAnjB,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCEV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAe/B,IAAAs6C,EAAA,SAAAp4E,GAKI,SAAAo4E,EACI1iF,EACQ2iF,EACArK,GAHZ,IAAAtwE,EAKIsC,EAAAhmC,KAAA0C,KAAMg5B,IAAMh5B,YAHJghC,EAAA26E,eACA36E,EAAAswE,qBA8NhB,OAtOiDzsE,EAAA62E,EAAAp4E,GAatCo4E,EAAA38G,UAAA+lC,aAAP,SAAoBO,QAAA,IAAAA,MAAA,IAChB,IAAMpI,EAAQj9B,KAAK05B,WACduD,EAAM47D,UAAa57D,EAAM47D,SAASG,WACnCh5F,KAAK47G,sBAEJ3+E,EAAM47D,WAAY57D,EAAM47D,SAAS7f,YAClCh5E,KAAK67G,UAAU,EAAGx2E,EAAU,SAAA0zD,GAAS,OAAAA,KAGtC2iB,EAAA38G,UAAA68G,oBAAP,eAAA56E,EAAAhhC,KACUi9B,EAAQj9B,KAAK05B,WACnB,GAAIuD,EAAMg5D,UAAYh5D,EAAMg5D,SAASh1C,OAAQ,CACzC,IAAM0pB,EAAa1tC,EAAMg5D,SAASh1C,OAAOqN,MAAgB,SACzD,IAAKqc,EAAY,OAEjB3qE,KAAKsxG,iBAAiBsB,4BAA4Bp0E,GAAImsC,IACrDrmC,SAASC,KAAK,SAAAmD,GACX1G,EAAKC,MACD3+B,KAAM,wCACN02F,UAAWtxD,WAInB1nC,KAAKg5B,MAAMC,OACNtqB,IAAI,SAAA2K,GAAK,OAAAA,GAAKA,EAAE28E,WAChB58E,OACG,SAAA48E,GAAY,OAACA,EAASx3C,UAAYw3C,EAASj7D,YAE9CrP,KAAK,GACLqO,UAAU,SAAC/6B,GACR,OAAA+hC,EAAKswE,iBAAiBsB,4BAA4Bp0E,GAAIv/B,EAAEgiD,OAAOqN,MAAgB,WAC1EhqB,SAASC,KAAK,SAAAmD,GACX1G,EAAKC,MACD3+B,KAAM,wCACN02F,UAAWtxD,SAOhCg0E,EAAA38G,UAAAy/F,OAAP,WACI,IAAMvhE,EAAQj9B,KAAKg5B,MAAMU,WACzB,GAAKuD,EAAMg5D,UAAah5D,EAAMg5D,SAASh1C,OAAvC,CAEA,IAAM5b,EACFpI,EAAM47D,UAAY57D,EAAM47D,SAASE,MAC3B97D,EAAM47D,SAASE,MAAM1zD,SACrB,GACVrlC,KAAK67G,UAAU,EAAGx2E,EAAU,SAAA0zD,GAAS,OAAAA,MAGlC2iB,EAAA38G,UAAAsmG,iBAAP,SAAwBrsB,GAEfh5E,KAAK05B,WAAWm/D,UAChB74F,KAAK05B,WAAWm/D,SAAS7f,YAC1Bh5E,KAAK05B,WAAWm/D,SAAS7f,aAAeA,GAExCh5E,KAAK87G,YAAY9iC,EAAY,EAAG,GAAI,SAAA+f,GAAS,OAAAA,KAG9C2iB,EAAA38G,UAAAg2E,SAAP,WACI,IAAM93C,EAAQj9B,KAAKg5B,MAAMU,WACnBsgF,EAAa/8E,EAAM47D,UAAY57D,EAAM47D,SAASE,MAE/C97D,EAAM47D,SAAS7f,WAchBh5E,KAAK87G,YACD7+E,EAAM47D,SAAS7f,WACfghC,EAAWvyE,KAAO,EAClBuyE,EAAW30E,SACX,SAAA0zD,GAAS,OACLlzF,MAAOm0G,EACDA,EAAWn0G,MAAMqiB,OAAO6wE,EAAMlzF,OAC9BkzF,EAAMlzF,MACZqgC,MAAO6yD,EAAM7yD,MACbuB,KAAMsxD,EAAMtxD,KACZpC,SAAU0zD,EAAM1zD,YAvBxBrlC,KAAK67G,UACD7B,EAAWvyE,KAAO,EAClBuyE,EAAW30E,SACX,SAAA0zD,GAAS,OACLlzF,MAAOm0G,EACDA,EAAWn0G,MAAMqiB,OAAO6wE,EAAMlzF,OAC9BkzF,EAAMlzF,MACZqgC,MAAO6yD,EAAM7yD,MACbuB,KAAMsxD,EAAMtxD,KACZpC,SAAU0zD,EAAM1zD,aAoBxBq2E,EAAA38G,UAAAg9G,kBAAR,SACIt0E,EACApC,EACAgnB,EACAf,GAJJ,IAAAtqB,EAAAhhC,KAQIA,KAAKihC,MACD3+B,KAAM,gCACNmlC,KAAIA,EACJpC,SAAQA,IAGZrlC,KAAK27G,aAAaH,kCACVh9E,GAAI6tB,EACJ5kB,KAAIA,EACJpC,SAAQA,IACbf,SACEC,KACG,SAAAm4B,GACI,OAAA17B,EAAKC,MACD3+B,KAAM,+BACNy2F,MAAOztC,EAAOoR,MAEtB,SAAAnsD,GACI,OAAAywB,EAAKC,MACD3+B,KAAM,kCACNiO,MAAKA,OAKjBmrG,EAAA38G,UAAA88G,UAAR,SACIp0E,EACApC,EACAimB,GAHJ,IAAAtqB,EAAAhhC,KAOUi9B,EAAQj9B,KAAK05B,WACnB,GAAIuD,EAAMg5D,UAAYh5D,EAAMg5D,SAASh1C,OAAQ,CACzC,IAAMoL,EAAWpvB,EAAMg5D,SAASh1C,OAAOziB,GACvC,IAAK6tB,EAAU,OAEfrsD,KAAK+7G,kBAAkBt0E,EAAMpC,EAAUgnB,EAAUf,QAEjDtrD,KAAKg5B,MAAMC,OACNtqB,IAAI,SAAA2K,GAAK,OAAAA,GAAKA,EAAE28E,WAChB58E,OACG,SAAA48E,GAAY,OAACA,EAASx3C,UAAYw3C,EAASj7D,YAE9CrP,KAAK,GACLqO,UAAU,SAAC/6B,GACR,OAAA+hC,EAAK+6E,kBACDt0E,EACApC,EACApmC,EAAEgiD,OAAOziB,GACT8sB,MAMNowD,EAAA38G,UAAA+8G,YAAd,SACI9iC,EACAvxC,EACApC,EACAimB,iHAIMruB,EAAQj9B,KAAK05B,YAETu8D,SAASh1C,QACfhkB,EAAMg5D,SAASh1C,OAAOqN,MAAgB,UAEtCtuD,KAAKihC,MACD3+B,KAAM,kCACN02E,WAAUA,EACVvxC,KAAM,EACNpC,SAAU,MAGG,EAAMrlC,KAAKsxG,iBAAiBjtE,SACzC7F,GAAIw6C,IACL10C,YAZH,mBAUM03E,EAAWp/E,EAAAC,OAIjB78B,KAAK27G,aACAJ,sBAAuB/8E,GAAIw6C,EAAYvxC,KAAIA,EAAEpC,SAAQA,IACrDf,SAASC,KAAK,SAAAw0D,GACX,IAAMkjB,EAAQhhF,KACP89D,GACHlzF,MAAOkzF,EAAMlzF,MAAM8I,IAAI,SAAAa,GAAK,OAAAyrB,KACrBzrB,GACHypF,YAAa+iB,EAAS/oC,KAAKykB,sBAGnC12D,EAAKC,MACD3+B,KAAM,iCACN02E,WAAUA,EACV+f,MAAOztC,EAAO2wD,OAGrBjyE,MAAM,SAAA3oC,GACH,OAAA2/B,EAAKC,MACD3+B,KAAM,oCACNiO,MAAOlP,mBAInBrB,KAAKg5B,MAAMC,OACNtqB,IAAI,SAAA2K,GAAK,OAAAA,GAAKA,EAAE28E,WAChB58E,OACG,SAAA48E,GAAY,OAACA,EAASx3C,UAAYw3C,EAASj7D,YAE9CrP,KAAK,GACLyuF,qBAAqB,WAClB,OAAAp5E,EAAK86E,YAAY9iC,EAAYvxC,EAAMpC,EAAUimB,sCAlOpDowD,EAA2BtsF,GAFvC2I,EAAQ,kBAAmB,+BAC3BG,EAAO,oBAAqB,eAAgB,qBAChCwjF,GAAb,CAAiDptF,EAAAyS,kBAApCqgC,EAAAs6C,4BAA2BA,EAfT,CAAA5uE,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCFV,SAAUA,IAAS,SAAAwe,GACf,IAAO9X,EAAgB1G,EAAAiD,QAAQqD,SAASI,eAGxC,oBAAAknF,KACWA,EAAAn9G,UAAAiwB,UAAP,SAAiB5d,GACb,OAAgCA,GAC5B,IAAK,MACL,KAAK4jB,EAAcmnF,IACnB,KAAK,EACD,MAAO,kBACX,IAAK,UACL,KAAKnnF,EAAconF,QACnB,KAAK,EACD,MAAO,qBACX,IAAK,UACL,KAAKpnF,EAAco4C,QACnB,KAAK,GACD,MAAO,yBACX,IAAK,SACL,KAAKp4C,EAAcqnF,OACnB,KAAK,GACD,MAAO,mBACX,IAAK,YACL,KAAKrnF,EAAcsnF,UACnB,KAAK,GACD,MAAO,sBACX,IAAK,UACL,KAAKtnF,EAAcunF,QACnB,KAAK,GACD,MAAO,oBACX,QACI,MAAO,KA5BjBL,EAAmB9sF,GADxBC,EAAK,kBAAmB,kBACnB6sF,GAAN,GAJe,CAAA5tF,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCMV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAAk3B,QAAAl3B,EAAAk3B,UAC5C/pE,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,SAACsmB,GACGA,EAAepkB,MAAM,sCACjBkB,IAAK,cACL2zB,gBAAgB,EAChBpqB,MACI8nD,IAAK,QACLhsC,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,cAAgB3tC,EAAG+9C,WAE3Ch9C,SACI,eACA,8BACA,iBACA,oBACA,SACImQ,EACA2oD,EACAkB,EACA3mB,GAEAylB,EAAgBx2E,iBAGxBwd,OACIouC,uBACIv3C,SACI,gEACJzhB,WAAYpJ,EAASsK,+BAGnB,oBAAqB,SAAA15B,GAAK,OACxBu/C,QAASv/C,EAAE25F,UAAY35F,EAAE25F,SAASp6C,SACjCv/C,EAAEk6F,kBACCl6F,EAAEk6F,iBAAiB36C,QACvBwC,OAAQ/hD,EAAE+2F,UAAY/2F,EAAE+2F,SAASh1C,OACjC0f,SACIzhE,GAAKA,EAAEu5F,cAAgBv5F,EAAEu5F,aAAa93B,SAC1Ck4B,SAAU35F,EAAE25F,SACZO,iBACIl6F,EAAEk6F,kBACFl6F,EAAEk6F,iBAAiBkB,kBAG/BoM,wBACIvtD,SACI,8EACJzhB,WAAYpJ,EAASsK,+BAGnB,oBAAqB,SAAA15B,GAAK,OACxB+hD,OAAQ/hD,EAAE+2F,SAASh1C,iBApDZ,CAAAnU,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCNV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAcf,oBAAA2vE,KAKWA,EAAA19G,UAAAg2E,SAAP,WACI/0E,KAAKg1E,cANPynC,EAAqBrtF,GAX1BqI,EAAU,mBACPE,SAAU,gBACVkV,YACI,gFACJe,UACImrD,MAAO,IACPt6C,QAAS,IACTi+D,eAAgB,IAChB1nC,WAAY,QAGdynC,GAAN,GAdJ,CAAUnuF,WCAV,SAAUA,IAAS,SAAAwe,GACf,IAAO3X,EAAa7G,EAASiD,QAAQqD,SAASM,QAAQC,YAGtD,oBAAAwnF,KACWA,EAAA59G,UAAAiwB,UAAP,SAAiB4Q,GACb,OAAQA,GACJ,KAAKzK,EAAWg/C,WAChB,IAAK,aACL,KAAK,EACD,OAAO,EACX,QACI,OAAO,IARjBwoC,EAA4BvtF,GADjCC,EAAK,kBAAmB,2BACnBstF,GAAN,GAJe,CAAAruF,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,GAIf,IAAO9X,EAAgB1G,EAAAiD,QAAQqD,SAASI,eAYxC,WAKI,SAAA4nF,EAAoBjB,GAAA37G,KAAA27G,eAChB37G,KAAK26G,SAAU,EAGZiC,EAAA79G,UAAA27G,iBAAP,eAAA15E,EAAAhhC,KACIA,KAAK26G,SAAW36G,KAAK26G,SAEhB36G,KAAK68G,cAAgB78G,KAAK26G,SAC3B36G,KAAK27G,aACAF,wBAAyBj9E,GAAIx+B,KAAKk5F,KAAK16D,KACvC8F,SAASC,KACN,SAAAu4E,GACI,OAAC97E,EAAK67E,aAAeC,EAAQzjG,OAAO,SAAAg9B,GAChC,OAAArV,EAAK+7E,uBAAuB1mE,EAAOzW,aAMpDg9E,EAAA79G,UAAAg+G,uBAAP,SAA8Bn9E,GAC1B,OAAgCA,GAC5B,IAAK,UACL,KAAK5K,EAAconF,QACnB,KAAK,EACD,OAAO,EACX,QACI,OAAO,IA/BjBQ,EAAyBxtF,GAV9BqI,EAAU,mBACPE,SAAU,qBACVkV,YACI,wFACJe,UACIsrD,KAAM,IACNwjB,eAAgB,OAGvBxkF,EAAO,iBACF0kF,GAAN,GAhBe,CAAAtuF,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCEV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAk3B,GAG5C,IAAOn3D,EAAW7S,EAAS4S,QAAQC,UAenC,WAKI,SAAA67E,EACY1L,EACAgK,GAFZ,IAAAt6E,EAAAhhC,KACYA,KAAAsxG,mBACAtxG,KAAAs7G,kBALLt7G,KAAAwxG,sBAiBAxxG,KAAAyyG,eAAiBtxE,EACpB,SAACqH,GACG,IAAMmiC,EAAa3pC,EAAKuzE,gBACxBvzE,EAAKmxE,cAAcxnC,EAAYniC,IAEnC,KACA,GAfGw0E,EAAAj+G,UAAA6kD,WAAP,WACI,IAAM+mB,EACF3qE,KAAKi9B,OACLj9B,KAAKi9B,MAAMgkB,QACXjhD,KAAKi9B,MAAMgkB,OAAOqN,MAAgB,SAChCoqD,EAAkB14G,KAAKwxG,mBAAmB3uG,OAAS,EACrD8nE,IAAe+tC,GAAiB14G,KAAKmyG,cAAcxnC,IAYpDqyC,EAAAj+G,UAAAsmG,iBAAP,SAAwBpsB,GAChBA,EAAUj5E,KAAKs7G,gBAAgBjW,iBAAiBpsB,EAASz6C,IACxDx+B,KAAKs7G,gBAAgBx2E,gBAGtBk4E,EAAAj+G,UAAAw1G,cAAR,WACI,OACIv0G,KAAKi9B,OACLj9B,KAAKi9B,MAAMgkB,QACXjhD,KAAKi9B,MAAMgkB,OAAOqN,MAAgB,UAIlC0uD,EAAAj+G,UAAAozG,cAAR,SAAsBxnC,EAAyBniC,GAA/C,IAAAxH,EAAAhhC,KACIA,KAAKsxG,iBACAqI,yBACGn7E,GAAImsC,EACJljC,KAAM,EACNpC,SAAU,IACVuE,YAAapB,IAEhBlE,SAASC,KAAK,SAAAmD,GACX1G,EAAKwwE,mBAAqB9pE,EAAK7hC,SAlDzCm3G,EAA4B5tF,GATjCqI,EAAU,mBACPE,SAAU,wBACVkV,YACI,8FACJe,UACI3Q,MAAO,OAGd/E,EAAO,mBAAoB,gCACtB8kF,GAAN,GAlB4C,CAAA57C,EAAAk3B,QAAAl3B,EAAAk3B,WAAb,CAAAxrD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCCV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAAk3B,QAAAl3B,EAAAk3B,UAmB5C,WAGI,SAAA2kB,EAAoB3B,GAAAt7G,KAAAs7G,kBAEb2B,EAAAl+G,UAAAg2E,SAAP,WACI/0E,KAAKs7G,gBAAgBvmC,YANvBkoC,EAAsB7tF,GAP3BqI,EAAU,mBACPE,SAAU,iBACVkV,YACI,kFACJe,UAAY3Q,MAAO,OAEtB/E,EAAO,gCACF+kF,GAAN,GAnB+B,CAAAnwE,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCIV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAg3B,GAM/BA,EAAA8kB,8BAAgC,IAAI5jF,GAAGG,QAWpDlL,QACKrxB,OAAO,mBACPmC,QAAQ,cAAe,WAAM,OAAAk9B,EAAEisB,WAAW20D,cAE/C7uF,EAAAiD,QAAQ63B,qBAAqB,WACzB7sB,EAAEisB,WAAW20D,YAAYrzD,OAAOszD,gBAAkB,SAAApkC,GAC9Cof,EAAA8kB,8BAA8BhjF,OAAO8+C,MAvBD,CAAA5X,EAAAg3B,YAAAh3B,EAAAg3B,eAAb,CAAAtrD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCJV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAg3B,GAG5C,IAAAilB,EAAA,WACI,SAAAA,EACIrkF,EACQmkF,EACAltE,EACRssD,GAJJ,IAAAv7D,EAAAhhC,KAEYA,KAAAm9G,cACAn9G,KAAAiwC,sBAGR,IAAM60D,EAAc,SAAC5lG,GAAyB,OAAAA,GAAKA,EAAE+2F,UAAY/2F,EAAE+2F,SAASh1C,QAAU/hD,EAAE+2F,SAASh1C,OAAOziB,IASxG45D,EAAA8kB,8BACK7jG,OAAO,SAAA2/D,GAAc,OATC,SAAC95E,EAAsB85E,GAC9C,SAAI95E,GAAKA,EAAEw5F,cAAgBx5F,EAAEw5F,aAAaM,WAAa95F,EAAEw5F,aAAaM,UAAUnzF,OAAS3G,EAAEw5F,aAAaM,UAAUnzF,QACvG3G,EAAEw5F,aAAaM,UAAUnzF,MAAM0d,KAAK,SAAAjK,GAAK,OAAAA,EAAEklB,KAAOw6C,IAOvCskC,CAAmBtkF,EAAMU,WAAYs/C,KAC1Dh/C,UAAU,SAAAnqB,GAAK,OAAA0sF,EAAoBiC,WAExCxlE,EAAMC,OACDtqB,IAAIm2F,GACJ5rE,uBACA6iE,cAAcztE,EAAAiD,QAAQ+3B,2BACtBnoB,SAAS,WAAM,OAAA7H,GAAG6uC,WAAW6zB,MAAM,OACnChiE,UAAU,SAAAqyB,GAAY,OAAArrB,EAAKhH,UAAUqyB,KAE1CrzB,EAAM0B,OACDsnC,MAAM,SAAA3gE,GAAK,MAAW,oCAAXA,EAAEiB,OACb03B,UAAU,SAAAnqB,GAAK,OAAAmxB,EAAKk7D,YAAY4I,EAAY9rE,EAAMU,eAY/D,OATY2jF,EAAAt+G,UAAAi7B,UAAR,SAAkBqyB,GACVA,GACArsD,KAAKm9G,YAAYhhB,OAAOniE,UAAUqyB,IAIlCgxD,EAAAt+G,UAAAm9F,YAAR,SAAoB7vC,GAChBrsD,KAAKm9G,YAAYhhB,OAAOD,YAAY7vC,IAvC/BgxD,EAAkBjuF,GAF9B2I,EAAQ,kBAAmB,sBAC3BG,EAAO,oBAAqB,cAAe,sBAAuB,oCACtDmlF,GAAb,GAAajlB,EAAAilB,mBAAkBA,EAHa,CAAAj8C,EAAAg3B,YAAAh3B,EAAAg3B,eAAb,CAAAtrD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCHV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAg3B,GAQ5C,IAAAmlB,EAAA,SAAAj6E,GAKI,SAAAi6E,EAAYvkF,EAAkCs4E,GAA9C,IAAAtwE,EACIsC,EAAAhmC,KAAA0C,KAAMg5B,IAAMh5B,KAD8BghC,EAAAswE,0BAI1Ct4E,EAAMC,OACDtqB,IAFgB,SAAC2K,GAAyB,OAAAA,GAAKA,EAAE28E,UAAY38E,EAAE28E,SAASh1C,SAGxE/nB,uBACAc,UAAU,SAAAinB,GACPjgB,EAAKw8E,uBAAuBv8D,GAC5BjgB,EAAKy8E,gCAAgCx8D,OAuLrD,OArMqDpc,EAAA04E,EAAAj6E,GAkB1Ci6E,EAAAx+G,UAAA+lC,aAAP,SAAoBO,EAAcomB,QAAd,IAAApmB,MAAA,QAAc,IAAAomB,OAAA,GAC9B,IAAMxuB,EAAQj9B,KAAK05B,aACduD,EAAMy7D,cAAgBjtC,GAASxuB,EAAMy7D,aAAauB,mBACnDj6F,KAAKmyG,cAAc,EAAG9sE,EAAUomB,EAAO,SAAAutC,GAAa,OAAAA,KAGrDukB,EAAAx+G,UAAAy/F,OAAP,SAAckf,QAAA,IAAAA,OAAA,GACV,IAAMzgF,EAAQj9B,KAAKg5B,MAAMU,WACzB,GAAKuD,EAAMg5D,UAAah5D,EAAMg5D,SAASh1C,OAAvC,CAEA,IAAM5b,EACFpI,EAAMy7D,cAAgBz7D,EAAMy7D,aAAaM,UAAY/7D,EAAMy7D,aAAaM,UAAU3zD,SAAW,EACjGrlC,KAAKmyG,cAAc,EAAG9sE,GAAU,EAAM,SAAA2zD,GAAa,OAAAA,IAEnDh5F,KAAKw9G,uBAAuBvgF,EAAMg5D,SAASh1C,QAEtCy8D,GAAmC19G,KAAKy9G,gCAAgCxgF,EAAMg5D,SAASh1C,UAGzFs8D,EAAAx+G,UAAAsmG,iBAAP,SAAwBrsB,GACpB,IAAM/7C,EAAQj9B,KAAK05B,WAEA,OAAfs/C,GAMA/7C,EAAMy7D,cACJz7D,EAAMy7D,aAAauB,kBAAoBh9D,EAAMy7D,aAAauB,mBAAqBjhB,GAEjFh5E,KAAK29G,aAAa3kC,GARlBh5E,KAAK49G,0BAWNL,EAAAx+G,UAAA6+G,uBAAP,WACI59G,KAAKihC,MACD3+B,KAAM,qCACN22E,SAAU,QAIXskC,EAAAx+G,UAAAg2E,SAAP,WACI,IAAM93C,EAAQj9B,KAAKg5B,MAAMU,WACnBsgF,EAAa/8E,EAAMy7D,cAAgBz7D,EAAMy7D,aAAaM,UAE5Dh5F,KAAKmyG,cAAc6H,EAAWvyE,KAAO,EAAGuyE,EAAW30E,UAAU,EAAO,SAAA2zD,GAAa,OAC7EnzF,MAAOm0G,EAAaA,EAAWn0G,MAAMqiB,OAAO8wE,EAAUnzF,OAASmzF,EAAUnzF,MACzEqgC,MAAO8yD,EAAU9yD,MACjBuB,KAAMuxD,EAAUvxD,KAChBpC,SAAU2zD,EAAU3zD,aAIpBk4E,EAAAx+G,UAAA8+G,wBAAR,SACIp2E,EACAz+B,EACA2hE,EACArf,GAJJ,IAAAtqB,EAAAhhC,KAMIA,KAAKihC,MACD3+B,KAAM,oCACNmlC,KAAIA,EACJpC,SAAUr8B,IAGdhJ,KAAKsxG,iBACAwM,kBAAmBt/E,GAAImsC,EAAYljC,KAAIA,EAAEpC,SAAUr8B,IACnDs7B,SAASC,KAAK,SAAAy0D,GACX,IAAM+kB,EAAezyD,EAAO0tC,GAC5Bh4D,EAAKC,MACD3+B,KAAM,mCACN02F,UAAW+kB,MAGlB/zE,MAAM,SAAA3oC,GACH,OAAA2/B,EAAKC,MACD3+B,KAAM,sCACNiO,MAAOlP,OAKfk8G,EAAAx+G,UAAAozG,cAAR,SACI1qE,EACAz+B,EACAyiD,EACAH,GAJJ,IAAAtqB,EAAAhhC,KAMUi9B,EAAQj9B,KAAK05B,WAEnB,GAAK+xB,IAEGxuB,EAAMy7D,gBACLz7D,EAAMy7D,aAAaj6C,SACfxhB,EAAMy7D,aAAaM,WAChB/7D,EAAMy7D,aAAaM,UAAUvxD,OAASA,GACtCxK,EAAMy7D,aAAaM,WACnB/7D,EAAMy7D,aAAaM,UAAU3zD,WAAar8B,GAK1D,GAAIi0B,EAAMg5D,UAAYh5D,EAAMg5D,SAASh1C,OAAQ,CACzC,IAAM0pB,EAAa1tC,EAAMg5D,SAASh1C,OAAOqN,MAAgB,SACzD,IAAKqc,EAAY,OAEjB3qE,KAAK69G,wBAAwBp2E,EAAMz+B,EAAM2hE,EAAYrf,QAErDtrD,KAAKg5B,MAAMC,OACNtqB,IAAI,SAAA2K,GAAK,OAAAA,GAAKA,EAAE28E,WAChB58E,OAAO,SAAA48E,GAAY,OAACA,EAASx3C,UAAYw3C,EAASj7D,YAClDrP,KAAK,GACLqO,UAAU,SAAC/6B,GACR,OAAA+hC,EAAK68E,wBAAwBp2E,EAAMz+B,EAAM/J,EAAEgiD,OAAOqN,MAAgB,SAAGhD,MAK7EiyD,EAAAx+G,UAAA4+G,aAAR,SAAqB3kC,GAArB,IAAAh4C,EAAAhhC,KACUi9B,EAAQj9B,KAAK05B,WACfuD,EAAMg5D,SAASh1C,QAAUhkB,EAAMg5D,SAASh1C,OAAOqN,MAAgB,UAC/DtuD,KAAKihC,MAAO3+B,KAAM,wCAElBtC,KAAKsxG,iBACAjtE,SAAU7F,GAAIw6C,IACd10C,SAASC,KAAK,SAAA00C,GACXj4C,EAAKC,MACD3+B,KAAM,qCACN22E,SAAQA,MAGfjvC,MAAM,SAAA3oC,GACH,OAAA2/B,EAAKC,MACD3+B,KAAM,wCACNiO,MAAOlP,OAInBrB,KAAKg5B,MAAMC,OACNtqB,IAAI,SAAA2K,GAAK,OAAAA,GAAKA,EAAE28E,WAChB58E,OAAO,SAAA48E,GAAY,OAACA,EAASx3C,UAAYw3C,EAASj7D,YAClDrP,KAAK,GACLyuF,qBAAqB,WAAM,OAAAp5E,EAAK28E,aAAa3kC,MAI5CukC,EAAAx+G,UAAA0+G,gCAAd,SAA8Cx8D,qGAE1C,OADM0pB,EAAa1pB,GAAUA,EAAOqN,MAAgB,WAGhC,EAAMtuD,KAAKsxG,iBAAiB0M,gCAAiCx/E,GAAImsC,IAAcrmC,WAFlF,UAGjB,OADM61D,EAAcv9D,EAAAC,SAGdohF,EACC9jB,EAAY9gF,OAAO,SAAAC,GAAK,OAAAA,EAAE2nC,OAAOziB,KAAOyiB,EAAOziB,KAAGtW,OAClDiyE,EAAY9gF,OAAO,SAAAC,GAAK,OAAAA,EAAE2nC,OAAOziB,KAAOyiB,EAAOziB,MAGtDx+B,KAAKihC,MACD3+B,KAAM,qCACN63F,YAAa8jB,UATC,SAadV,EAAAx+G,UAAAy+G,uBAAR,SAA+Bv8D,GAA/B,IAAAjgB,EAAAhhC,KACU2qE,EAAa1pB,GAAUA,EAAOqN,MAAgB,SAE/C9rD,OAAOi9B,MAASj9B,OAAOi9B,KAAKmB,aAAgBp+B,OAAOi9B,KAAKmB,YAAY4+D,UACpE70B,GAEL3qE,KAAKsxG,iBACA4M,0BAA2B1/E,GAAImsC,IAC/BrmC,SAASC,KAAK,SAAC45E,GACZn9E,EAAKC,MACD3+B,KAAM,4CACN43F,mBAAoBikB,OAjM3BZ,EAA+BnuF,GAF3C2I,EAAQ,kBAAmB,mCAC3BG,EAAO,oBAAqB,qBAChBqlF,GAAb,CAAqDjvF,EAAAyS,kBAAxCq3D,EAAAmlB,gCAA+BA,EARA,CAAAn8C,EAAAg3B,YAAAh3B,EAAAg3B,eAAb,CAAAtrD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCMV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAAg3B,YAAAh3B,EAAAg3B,cAC5C7pE,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,SAACsmB,GACGA,EAAepkB,MAAM,0CACjBkB,IAAK,cACL2zB,gBAAgB,EAChBpqB,MACI8nD,IAAK,YACLhsC,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,cAAgB3tC,EAAG69C,eAE3Ch9C,OACIouC,uBACIv3C,SAAU,wEACVzhB,WAAYpJ,EAASsK,+BAGnB,oBAAqB,SAAA15B,GAAK,OACxB+hD,OAAQ/hD,EAAE+2F,UAAY/2F,EAAE+2F,SAASh1C,OACjCm4C,iBAAkBl6F,EAAEk6F,kBAAoBl6F,EAAEk6F,iBAAiBkB,cAC3DtB,UAAW95F,EAAEw5F,cAAgBx5F,EAAEw5F,aAAaM,UAC5CiB,iBAAkB/6F,EAAEw5F,cAAgBx5F,EAAEw5F,aAAauB,iBACnDt5B,SAAUzhE,GAAKA,EAAEu5F,cAAgBv5F,EAAEu5F,aAAa93B,SAChDliB,QAAUv/C,EAAE+2F,UAAY/2F,EAAE+2F,SAASx3C,SAAWv/C,EAAEk6F,kBAC5Cl6F,EAAEk6F,iBAAiB36C,UAAav/C,EAAEw5F,cAAgBx5F,EAAEw5F,aAAaj6C,YAG7EioD,wBACIvtD,SAAU,sFACVzhB,WAAYpJ,EAASsK,+BAGnB,oBAAqB,SAAA15B,GAAK,OACxB+hD,OAAQ/hD,EAAE+2F,SAASh1C,iBAjCZ,CAAAnU,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCHV,SAAUA,IAAS,SAAAwe,IAAgB,SAAA1Z,GAc/B,IAAAgrF,EAAA,oBAAAA,KASA,OAHWA,EAAAr/G,UAAAg2E,SAAP,WACI/0E,KAAKg1E,cAPAopC,EAAyBhvF,GAXrCqI,EAAU,mBACPE,SAAU,oBACVkV,YACI,4FACJe,UACIorD,UAAW,IACX/3C,OAAQ,IACRxC,QAAS,IACTu2B,WAAY,QAGPopC,GAAb,GAAahrF,EAAAgrF,0BAAyBA,EAdP,CAAAtxE,EAAA1Z,UAAA0Z,EAAA1Z,aAAhB,CAAA9E,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCDV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAAg3B,YAAAh3B,EAAAg3B,cAc5C,WAQI,SAAAimB,EAAoB78D,GAAAxhD,KAAAwhD,SAChBxhD,KAAKy/B,KAAOj9B,OAAOi9B,KACnBz/B,KAAKs+G,aAAet+G,KAAKi5E,UAAYj5E,KAAKi5E,SAAS2uB,SAAW,IAAInrE,KAAKz8B,KAAKi5E,SAAS2uB,SAAW,IAAInrE,KAGjG4hF,EAAAt/G,UAAAqtC,QAAP,WACIpsC,KAAKu+G,gCAAkCv+G,KAAKw+G,gBAAkBx+G,KAAKy+G,uBACnEz+G,KAAKy1F,aAAc,IAAIh5D,MAAOmX,eAG3ByqE,EAAAt/G,UAAA2/G,eAAP,WACI1+G,KAAKs+G,cAAgBt+G,KAAKs+G,cAGvBD,EAAAt/G,UAAA4/G,iBAAP,WACI,OAAK3+G,KAAKy+G,uBAEOz+G,KAAKi5E,SAAS2lC,UAAU,GACzBvyD,SAHyB,MAMtCgyD,EAAAt/G,UAAA0/G,qBAAP,WACI,OAAOz+G,KAAKi5E,UAAYj5E,KAAKi5E,SAAS2lC,WAAa5+G,KAAKi5E,SAAS2lC,UAAU/7G,OAAS,GAGjFw7G,EAAAt/G,UAAAy/G,aAAP,WACI,OAAOx+G,KAAKwhD,OAAOyU,QAAQv4D,KAAKoF,QAAQ,SAAW,GAlCrDu7G,EAA6BjvF,GAVlCqI,EAAU,mBACPE,SAAU,yBACVkV,YACI,oGACJe,UACIqT,OAAQ,IACRg4B,SAAU,OAGjB/gD,EAAO,WACFmmF,GAAN,GAd+B,CAAAvxE,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCFV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAg3B,GAG5C,IAAOj3D,EAAW7S,EAAS4S,QAAQC,UAenC,WAKI,SAAA09E,EACYvN,EACA/U,GAFZ,IAAAv7D,EAAAhhC,KACYA,KAAAsxG,mBACAtxG,KAAAu8F,sBALLv8F,KAAAwxG,sBAcAxxG,KAAAyyG,eAAiBtxE,EACpB,SAACqH,GACG,IAAMmiC,EAAa3pC,EAAKuzE,gBACxBvzE,EAAKmxE,cAAcxnC,EAAYniC,IAEnC,KACA,GAZGq2E,EAAA9/G,UAAA6kD,WAAP,WACI,IAAM+mB,EAAa3qE,KAAKu0G,gBAClBmE,EAAkB14G,KAAKwxG,mBAAmB3uG,OAAS,EACrD8nE,IAAe+tC,GAAiB14G,KAAKmyG,cAAcxnC,IAYpDk0C,EAAA9/G,UAAAsmG,iBAAP,SAAwBpsB,GACpBj5E,KAAKu8F,oBAAoB8I,iBAAiBpsB,GAAYA,EAASz6C,KAG3DqgF,EAAA9/G,UAAAw1G,cAAR,WACI,OACIv0G,KAAKi9B,OACLj9B,KAAKi9B,MAAMgkB,QACXjhD,KAAKi9B,MAAMgkB,OAAOqN,MAAgB,UAIlCuwD,EAAA9/G,UAAAozG,cAAR,SAAsBxnC,EAAyBniC,GAA/C,IAAAxH,EAAAhhC,KACIA,KAAKsxG,iBACAqI,yBACGn7E,GAAImsC,EACJljC,KAAM,EACNpC,SAAU,IACVuE,YAAapB,IAEhBlE,SAASC,KAAK,SAAAmD,GACX1G,EAAKwwE,mBAAqB9pE,EAAK7hC,SA9CzCg5G,EAAgCzvF,GATrCqI,EAAU,mBACPE,SAAU,4BACVkV,YACI,0GACJe,UACI3Q,MAAO,OAGd/E,EAAO,mBAAoB,oCACtB2mF,GAAN,GAlB4C,CAAAz9C,EAAAg3B,YAAAh3B,EAAAg3B,eAAb,CAAAtrD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCGV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAAg3B,YAAAh3B,EAAAg3B,cA+B5C,WAKI,SAAA0mB,EACYnsD,EACA0D,EACAkmC,GAFAv8F,KAAA2yD,eACA3yD,KAAAq2D,8BACAr2D,KAAAu8F,sBAGLuiB,EAAA//G,UAAA6kD,WAAP,WAEQ5jD,KAAKi9B,OACLj9B,KAAKi9B,MAAM+7D,WACXh5F,KAAKi9B,MAAM+7D,UAAUnzF,MACzB7F,KAAKg5F,UACDh5F,KAAKi9B,OAASj9B,KAAKi9B,MAAMg9D,kBAEfxyD,KAAM,EACNpC,SAAU,EACVa,MAAO,EACPrgC,OAAQ7F,KAAKi9B,MAAMg9D,mBAEvBj6F,KAAKi9B,MAAM+7D,WAKlB8lB,EAAA//G,UAAAg2E,SAAP,SAAgBttC,GACZznC,KAAKu8F,oBAAoBxnB,YAGrB+pC,EAAA//G,UAAAggH,iCAAR,eAAA/9E,EAAAhhC,KACIA,KAAKq2D,4BACAub,WAAYpzC,GAAI,wBAChB8F,SAASC,KACN,WAAM,OAACvD,EAAKg+E,gCAAiC,KArCvDF,EAA0B1vF,GAX/BqI,EAAU,mBACPE,SAAU,qBACViW,UAAY3Q,MAAO,KACnB4P,YACI,gGAEP3U,EACG,eACA,8BACA,oCAEE4mF,GAAN,GA/B+B,CAAAhyE,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBA8Bfve,QAAQrxB,OAAO,mBAAmBsxB,QAAQ,gCACtC,YACA,SAAAC,GACI,OAAAA,EACI,sDAGI4V,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElBmwC,eACIjgD,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,MAAOwQ,OAAQ,aAEjCiwE,0BACI9gF,IAAK,8DACLzP,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,aAnDtC,CAAUlQ,WCHV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAA89C,uBAAA99C,EAAA89C,yBAE5C,oBAAAC,KACWA,EAAApgH,UAAAiwB,UAAP,SAAiBowF,GACb,OAAIA,GAAS,EACF,UACAA,GAAS,EACT,UACAA,GAAS,EACT,UAGJ,WAVTD,EAA4B/vF,GADjCC,EAAK,kBAAmB,2BACnB8vF,GAAN,GAF+B,CAAAryE,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCGAA,UAKNC,QAAQrxB,OAAO,YAAYy4C,UAAU,gBAAiB,WAgBlD,OACItG,OACIgwE,mBAAoB,KAExBzpE,KAAA,SAAKvG,EAAewG,EAA8BC,GAC9C,IAAIwpE,EAEJjwE,EAAM01C,OAAO,qBAAsB,SAAC9vE,EAAU+vE,GACtCs6B,EAdhB,SAAqBA,EAAcj/E,GAC1BA,IAELi/E,EAAMvkF,OAASsF,EACfi/E,EAAM7qG,UAWM8qG,CAAYD,EAAOjwE,EAAMgwE,oBAEzBC,EA1BhB,SAAuBzpE,EAA8BxV,GACjD,IAAKA,EAAe,OAAO,KAE3B,IAAMm/E,EAASjxF,QAAQsnB,QAAQtzC,SAAS4/B,cAAc,WACtD0T,EAAQurC,OAAOo+B,GACf,IAAMC,EAA0BD,EAAO,GAAIE,WAAW,MAEtD,OAAO,IAAIC,MAAMF,EAAKp/E,GAmBFu/E,CAAc/pE,EAASxG,EAAMgwE,qBAAuBC,QC7BpF,SAAUhxF,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAA89C,uBAAA99C,EAAA89C,yBAG5C3wF,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,SAACsmB,GACG,OAAAA,EAAepkB,MAAM,qDACjBkB,IAAK,cACL2zB,gBAAgB,EAChBpqB,MACI8nD,IAAK,wBACLhsC,UAAW,SAAC/B,GAAyB,OAAAA,EAAGg+C,2BAE5Cn9C,OACIouC,uBACIv3C,SAAU,8EACVzhB,WAAYpJ,EAAAsK,+BAGV,oBAAqB,SAAA15B,GAAK,OACxB+hD,OAAQ/hD,GAAKA,EAAE+2F,UAAY/2F,EAAE+2F,SAASh1C,OACtCxC,QAASv/C,GAAKA,EAAE+2F,UAAY/2F,EAAE+2F,SAASx3C,SAAWv/C,EAAEk6F,kBAAoBl6F,EAAEk6F,iBAAiB36C,QAC3FkiB,SAAUzhE,GAAKA,EAAEu5F,cAAgBv5F,EAAEu5F,aAAa93B,SAChDy4B,iBAAkBl6F,EAAEk6F,kBAAoBl6F,EAAEk6F,iBAAiBkB,wBAvBpD,CAAAxtD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCJV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAA89C,uBAAA99C,EAAA89C,yBAoB5C,WAKI,SAAAW,EAAoBC,GAAA9/G,KAAA8/G,+BAFZ9/G,KAAA+/G,WAAY,EAIpBF,EAAA9gH,UAAA6kD,WAAA,eAAA5iB,EAAAhhC,MACQA,KAAK+/G,WAAc//G,KAAKi9B,OAAUj9B,KAAKi9B,MAAMgkB,QAEjDjhD,KAAK8/G,6BACAb,0BAA2BzgF,GAAIx+B,KAAKi9B,MAAMgkB,OAAOziB,KACjD8F,SAASC,KAAK,SAAA61D,GACXp5D,EAAKg/E,gBAAkB5lB,EACvBp5D,EAAK++E,WAAY,KAd3BF,EAA6BzwF,GATlC8I,EAAO,gCACPT,EAAU,mBACPE,SAAU,wBACVkV,YACI,wHACJe,UACI3Q,MAAO,QAGT4iF,GAAN,GApB+B,CAAA/yE,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCCV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAA89C,uBAAA99C,EAAA89C,yBAqB5C,WAOI,SAAAe,EACYH,EACA9kD,EACAjiC,GAFA/4B,KAAA8/G,+BACA9/G,KAAAg7D,UACAh7D,KAAA+4B,SANL/4B,KAAAkgH,WAAY,EASnBD,EAAAlhH,UAAAqtC,QAAA,WACIpsC,KAAKk8B,QAGF+jF,EAAAlhH,UAAAg2E,SAAP,WACI/0E,KAAKk8B,OAAOl8B,KAAKmgH,OAAO14E,OAGpBw4E,EAAAlhH,UAAAm9B,KAAR,SAAauL,EAAUpC,GAAvB,IAAArE,EAAAhhC,KACI,QADS,IAAAynC,MAAA,QAAU,IAAApC,MAAA,GACdrlC,KAAKqsD,SAAV,CAEa,IAAT5kB,IAAYznC,KAAKkgH,WAAY,GAEjC,IAAME,GAAiD5hF,GAAIx+B,KAAKqsD,SAAU5kB,KAAIA,EAAEpC,SAAQA,EAAEg7E,UAAU,GAChGrgH,KAAK+mD,WAAUq5D,EAAQr5D,SAAW/mD,KAAK+mD,SAASA,UAEpD/mD,KAAK8/G,6BACAnxC,cAAcyxC,GACd97E,SAASC,KAAK,SAAA47E,GACX,KAAIA,EAAOt6G,MAAMhD,OAAS,GAA1B,CAEA,IAAMgD,EACFm7B,EAAKm/E,QAAUn/E,EAAKm/E,OAAOt6G,MACpBm7B,EAAKm/E,OAAOt6G,MAAYm7B,EAAKm/E,OAAOt6G,MAAKqiB,OAAKi4F,EAAOt6G,OACtDs6G,EAAOt6G,MACjBm7B,EAAKm/E,OAAMllF,KACJklF,GACHt6G,MAAKA,IAET,IAAMy6G,EAAYt/E,EAAKu/E,kBAAkBJ,EAAOt6G,OAChDm7B,EAAKq+E,mBAAqBr+E,EAAKw/E,2BAA2BF,GAE1D1+G,WAAW,WACPo/B,EAAKjI,OAAOm8C,MAAM,0BACnB,OAEN/hB,QAAQ,WACLnyB,EAAKk/E,WAAY,MAIrBD,EAAAlhH,UAAAwhH,kBAAR,SAA0BJ,GACtB,IAAMG,GACFG,SACAC,SACA7gH,MAAOG,KAAK+mD,SAAW/mD,KAAK+mD,SAASA,SAAW,IAGpD,IAAKo5D,EAAQ,OAAOG,EAIpB,IAFA,IAAMK,EAAa3gH,KAAKg7D,QAAQ,QAEZ5iC,EAAA,EAAAwE,EAAA58B,KAAKmgH,OAAOt6G,MAAZuyB,EAAAwE,EAAA/5B,OAAAu1B,IAAmB,CAAlC,IAAMgnF,EAAKxiF,EAAAxE,GACNy9C,EAAO8qC,EAAWvB,EAAM7yC,UAAW,UACzC+zC,EAAUG,MAAMxnG,KAAK48D,GACrByqC,EAAUI,MAAMznG,KAAKmmG,EAAMA,OAG/B,OAAOkB,GAGHL,EAAAlhH,UAAAyhH,2BAAR,SAAmCF,GAC/B,OACIh+G,KAAM,OACNolC,MACIk5E,OAAQN,EAAUG,MAClBI,WAEQ9rB,MAAOurB,EAAUzgH,MACjB6nC,KAAM44E,EAAUI,MAChBI,MAAM,EACNC,aAAc,uBAI1BjhH,SACIkhH,WACI5+B,SAAU,KAEd6+B,QACIhlE,SAAS,GAEbilE,YAAY,EACZC,QACIC,QAEQC,OACIC,aAAa,EACbnkC,QAAS,GACTz3E,IAAK,EACLC,IAAK,IAET47G,WACItlE,SAAS,KAIrBulE,QAEQH,OACIlkC,QAAS,IAEbokC,WACItlE,SAAS,MAKzBwlE,UACIC,MACIC,QAAS,GAEbC,OACIC,OAAQ,EACRC,YAAa,EACbC,gBAAiB,qBACjBC,YAAa,EACbC,iBAAkB,OAlIpChC,EAAoC7wF,GAVzC8I,EAAO,+BAAgC,UAAW,UAClDT,EAAU,mBACPE,SAAU,gCACVkV,YACI,sIACJe,UACIye,SAAU,IACVtF,SAAU,QAGZk5D,GAAN,GArB+B,CAAAnzE,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCHV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAA89C,uBAAA99C,EAAA89C,yBAU5C,WAKI,SAAAgD,EAAoBpC,GAAA9/G,KAAA8/G,+BAGboC,EAAAnjH,UAAAqtC,QAAP,eAAApL,EAAAhhC,KACIA,KAAK8/G,6BAA6Bz7E,SAAU7F,GAAIx+B,KAAKmiH,yBAChD79E,SACAC,KAAK,SAACs1C,GAAU,OAAA74C,EAAKohF,0BAA4BvoC,KAXxDqoC,EAAyC9yF,GAT9CqI,EAAU,mBACPE,SAAU,uCACVkV,YACI,uIACJe,UACIu0E,uBAAwB,OAG/BjqF,EAAO,iCACFgqF,GAAN,GAV+B,CAAAp1E,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCIV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAihD,GAC5C,IAAOzwF,EAActD,EAAAiD,QAAQK,YAU7BrD,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,SAACsmB,GACGA,EAAepkB,MAAM,8CACjBkB,IAAK,+CACL2zB,gBAAgB,EAChBxP,OACIouC,uBACIv3C,SACI,4EACJzhB,WAAYpJ,EAAAsK,+BAGV,oBAAqB,SAAA15B,GAAK,OACxBmtD,SACIntD,EAAE+2F,UACF/2F,EAAE+2F,SAASh1C,QACX/hD,EAAE+2F,SAASh1C,OAAOziB,GACtBw3B,WACI92D,GACAA,EAAEy6F,0BACFz6F,EAAEy6F,yBAAyBp1B,kBAC3BrlE,EAAEy6F,yBAAyBp1B,iBAAiB/lC,GAChD0jC,QACKhjE,GACGA,EAAEy6F,0BACFz6F,EAAEy6F,yBACG73B,qBACTlwC,EAAYmwC,aAI5Bvf,SACI,uBACA,eACA,SACIoT,EACAjD,MAGIA,EAAatG,UACbsG,EAAaqD,YACbrD,EAAauP,QAAQr9D,aAIrB+wD,EAAqBklC,yBACjBnoC,EAAaqD,WACbrD,EAAatG,SACbsG,EAAa3I,cAI7ByyC,QACI,uBACA,SAAC7mC,GACGA,EAAqBsT,eAnEG,CAAA9H,EAAAihD,gBAAAjhD,EAAAihD,mBAAb,CAAAv1E,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCJV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAAihD,GAc5C,IAAAC,EAAA,WAGI,SAAAA,EACYjsD,EACAT,EACAjD,GAFA3yD,KAAAq2D,8BACAr2D,KAAA41D,uBACA51D,KAAA2yD,eA6BhB,OA1BW2vD,EAAAvjH,UAAAqtC,QAAP,eAAApL,EAAAhhC,KACUg2D,EAAah2D,KAAK2yD,aAAaqD,YAAch2D,KAAKi9B,MAAM+4B,WACxD3J,EAAWrsD,KAAKi9B,MAAMovB,UAAYrsD,KAAK2yD,aAAatG,SACpDoW,EAAcziE,KAAK2yD,aAAauP,SAAWliE,KAAKi9B,MAAMilC,QACtDh+B,EAASlkC,KAAK2yD,aAAazuB,QAAUlkC,KAAKi9B,MAAMiH,OAEtDlkC,KAAKq2D,4BACAyb,aACGtzC,GAAIw3B,EACJ3J,SAAQA,EACRoW,YAAaA,EAAY59D,WACzBq/B,OAAMA,IAETI,SAASC,KAAK,SAAAm4B,GAAY,OAAA17B,EAAKuhF,0BAA0B7lD,MAG1D4lD,EAAAvjH,UAAAwjH,0BAAR,SAAkC7lD,GAC9B,IAAM8lD,EAAmCjgH,SAASq6F,eAAe,yBAE7D4lB,IACAxiH,KAAK41D,qBAAqBylC,aAAa,IAAIonB,IAAI/lD,EAASv+B,IAAIt5B,YAAY4Z,QACxE+jG,EAAgBxzE,OAAS0tB,EAASv+B,IAAIt5B,WACtC29G,EAAgB96E,KAAKtpC,MAAQs+D,EAASgmD,OACtCF,EAAgBG,WAhCfL,EAA4BlzF,GATxCqI,EAAU,mBACPE,SAAU,uBACVkV,YACI,sGACJe,UACI3Q,MAAO,OAGd/E,EAAO,8BAA+B,uBAAwB,iBAClDoqF,GAAb,GAAaD,EAAAC,6BAA4BA,EAdG,CAAAlhD,EAAAihD,gBAAAjhD,EAAAihD,mBAAb,CAAAv1E,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCGV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAAs0B,eAAAt0B,EAAAs0B,iBAa/B7yC,QAAQrxB,OAAO,mBAAmBsxB,QAAQ,mBACtC,YACA,SAACC,GACG,OAAAA,EACI,8BAGIzwB,KACI0wB,OAAQ,MACRsgB,OAAQ,GACRhhC,SAAS,EACT2gB,QAAUqgB,OAAQ,cAxBvB,CAAA1gB,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCHV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAO/B,IAAAwhD,EAAA,WAQI,SAAAA,EACcC,EACA5yE,EACA2qD,GAFA56F,KAAA6iH,oBACA7iH,KAAAiwC,sBACAjwC,KAAA46F,oBA4HlB,OAzHWgoB,EAAA7jH,UAAAqtC,QAAP,WACIpsC,KAAK8iH,eAGFF,EAAA7jH,UAAAgkH,2BAAP,WACI,OACI/iH,KAAKgjH,0BAA0B10F,EAAAyB,iBAAiBkzF,cAChDjjH,KAAKgjH,0BAA0B10F,EAAAyB,iBAAiBmzF,eAIjDN,EAAA7jH,UAAAokH,4CAAP,WACI,OACInjH,KAAKojH,gBACLpjH,KAAKojH,eAAeC,cACpBrjH,KAAKojH,eAAeC,aAAaC,gCAIlCV,EAAA7jH,UAAAikH,0BAAP,SAAiCO,GAC7B,IAAMC,EAAYl1F,EAAAyB,iBAAiBwzF,EAAU1+G,YAK7C,OAHI7E,KAAKojH,gBACLpjH,KAAKojH,eAAexsB,UAClB52F,KAAKojH,eAAexsB,OAAOtzF,KAAK,SAAAgW,GAAK,OAAAA,IAAMkqG,KACDxjH,KAAKyjH,2BAA2BF,IAG7EX,EAAA7jH,UAAA2kH,kBAAP,SAAyBC,GACrB,OAAO3jH,KAAK4jH,UAAY5jH,KAAKgjH,0BAA0B10F,EAAAyB,iBAAiB4zF,KAGrEf,EAAA7jH,UAAA8kH,wBAAP,WACI,OAAO7jH,KAAK4jH,UAAY5jH,KAAKgjH,0BAA0B10F,EAAAyB,iBAAiBkzF,cAGrEL,EAAA7jH,UAAA+kH,sBAAP,WACI,OAAO9jH,KAAK4jH,UAAY5jH,KAAKgjH,0BAA0B10F,EAAAyB,iBAAiBmG,YAGrE0sF,EAAA7jH,UAAAglH,oBAAP,WACI,OAAO/jH,KAAKgjH,0BAA0B10F,EAAAyB,iBAAiBmG,YAGpD0sF,EAAA7jH,UAAAilH,yBAAP,WACI,OAAOhkH,KAAK4jH,UAAY5jH,KAAKgjH,0BAA0B10F,EAAAyB,iBAAiBmzF,eAGrEN,EAAA7jH,UAAAklH,mBAAP,SAA0BC,GACtB,OAAQlkH,KAAKojH,eAAeC,aAAac,kBAAkBrhH,QAAQohH,IAAc,GAG7EtB,EAAA7jH,UAAA0kH,2BAAR,SAAmCD,GAC/B,OAAQA,GACJ,KAAKl1F,EAASyB,iBAAiBq0F,UAC3B,OAAO5hH,OAAOi9B,KAAKmB,YAAYyjF,gBACnC,KAAK/1F,EAASyB,iBAAiBmzF,aAC3B,OAAO1gH,OAAOi9B,KAAKmB,YAAY0jF,4BACnC,KAAKh2F,EAASyB,iBAAiBkzF,YAC3B,OAAOzgH,OAAOi9B,KAAKmB,YAAY2jF,0BACnC,KAAKj2F,EAASyB,iBAAiB+B,OAC3B,OAAOtvB,OAAOi9B,KAAKmB,YAAY4jF,aACnC,KAAKl2F,EAASyB,iBAAiB00F,cAC3B,OAAOjiH,OAAOi9B,KAAKmB,YAAY8jF,2BACnC,QACI,OAAOliH,OAAOi9B,KAAKmB,YAAY+jF,gBAIpC/B,EAAA7jH,UAAA6lH,cAAP,WACI5kH,KAAK8iH,cACL9iH,KAAK4jH,UAAW,GAGbhB,EAAA7jH,UAAA8lH,qBAAP,eAAA7jF,EAAAhhC,KACI,IAAIA,KAAKmgD,SAAT,CAEAngD,KAAKmgD,UAAW,EAEhBngD,KAAKihD,OAASjhD,KAAK8kH,YAGnB,IADA,IAAMC,EAAiB/kH,KAAKihD,QAAUjhD,KAAKihD,OAAOupB,eAAeqsB,UAAUh0F,QAAW,EAC7E4U,EAAQ,EAAGA,EAAQstG,EAAettG,IACvCzX,KAAKihD,OAAOupB,eAAeqsB,UAAUp/E,GAAOs/E,YACxC/2F,KAAKihD,OAAOupB,eAAeqsB,UAAUp/E,GAAOs/E,aAAe,EAEnE/2F,KAAK46F,kBACAnmF,OAAOzU,KAAKihD,QACZ1c,KAAK,WACFvD,EAAK4iF,UAAW,EAChB5iF,EAAKiP,oBAAoBzQ,QAAQ,4CAEpCwK,MAAM,WACHhJ,EAAKiP,oBAAoB1/B,MAAM,yDAElC4iD,QAAQ,WAAM,OAACnyB,EAAKmf,UAAW,MAGjCyiE,EAAA7jH,UAAAimH,uBAAP,WACIhlH,KAAK8iH,cACL9iH,KAAK4jH,UAAW,GAGbhB,EAAA7jH,UAAA+jH,YAAP,WACI9iH,KAAK8kH,YAAcz3F,KAAKiQ,MAAMjQ,KAAKC,UAAUttB,KAAKihD,SAC9CjhD,KAAK8kH,YAAYG,YACjBjlH,KAAK8kH,YAAYG,UAAYjlH,KAAKklH,WAC9B,IAAIzoF,KAAKA,KAAKa,MAAMt9B,KAAK8kH,YAAYG,UAAUpgH,gBAKnD+9G,EAAA7jH,UAAAmmH,WAAR,SAAmBrvC,GACf,IAAMsvC,EAAUtvC,EAAKI,aACfmvC,EAAQvvC,EAAKG,WACbzgC,EAAMsgC,EAAKviC,UACX6sC,EAAQtK,EAAKhiC,WACbwxE,EAAOxvC,EAAKjiC,cAElB,OAAO,IAAInX,KAAKA,KAAK6oF,IAAID,EAAMllC,EAAO5qC,EAAK6vE,EAAOD,KAE1DvC,EAvIA,GAAsBxhD,EAAAwhD,0BAAyBA,EAPhB,CAAA91E,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCMV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAA62B,WAAA72B,EAAA62B,aAC5C1pE,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,SAACsmB,GACG,OAAAA,EAAepkB,MAAM,yCACjBkB,IAAK,YACL2zB,gBAAgB,EAChBpqB,MAAQ8nD,IAAK,WAAYhsC,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,eAC7C9sC,OACIouC,uBACIv3C,SAAU,oEACVzhB,WAAYpJ,EAAAsK,+BACR,oBACA,SAAA15B,GAAK,OACD+hD,OAAQ/hD,EAAE+2F,UAAY/2F,EAAE+2F,SAASh1C,OACjCmiE,eAAgBlkH,EAAE+2F,UAAY/2F,EAAE+2F,SAASW,OACzCF,kBAAmBx3F,EAAE+2F,UAAY/2F,EAAE+2F,SAASS,kBAC5Cj4C,QACIv/C,EAAE+2F,UACF/2F,EAAE+2F,SAASx3C,SACXv/C,EAAEk6F,kBACFl6F,EAAEk6F,iBAAiB36C,QACvBkiB,SAAUzhE,GAAKA,EAAEu5F,cAAgBv5F,EAAEu5F,aAAa93B,SAChDy4B,iBAAkBl6F,EAAEk6F,kBAAoBl6F,EAAEk6F,iBAAiBkB,wBAvBxD,CAAAxtD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCJV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAAs0B,eAAAt0B,EAAAs0B,iBAU/B,WAGI,SAAAmkD,EAAoBt1E,GAAAjwC,KAAAiwC,sBAEbs1E,EAAAxmH,UAAAymH,eAAP,WACIxlH,KAAKiwC,oBAAoBzQ,QAAQ,iCAG9B+lF,EAAAxmH,UAAA0mH,sBAAP,WACIzlH,KAAKiwC,oBAAoB1/B,MACrB,mFAIDg1G,EAAAxmH,UAAA2mH,iBAAP,WACI1lH,KAAKiwC,oBAAoBzQ,QACrB,gEAID+lF,EAAAxmH,UAAA4mH,qBAAP,WACI3lH,KAAKiwC,oBAAoBzQ,QACrB,mGAvBN+lF,EAAoBn2F,GATzBqI,EAAU,mBACPE,SAAU,eACVkV,YACI,iFACJe,UACIqT,OAAQ,OAGf/oB,EAAO,wBACFqtF,GAAN,GAVe,CAAAj3F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCCV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAA62B,WAAA72B,EAAA62B,aAc5C,SAAA30D,GAGI,SAAAsiF,EACc/C,EACA5yE,EACA2qD,GAHd,IAAA55D,EAKIsC,EAAAhmC,KAAA0C,KAAM6iH,EAAmB5yE,EAAqB2qD,IAAkB56F,YAJtDghC,EAAA6hF,oBACA7hF,EAAAiP,sBACAjP,EAAA45D,sBAN6B/1D,EAAA+gF,EAAAtiF,GAWpCsiF,EAAA7mH,UAAA2a,QAAP,SAAe8pG,GACX,OAA0D,IAAnDxjH,KAAKojH,eAAexsB,OAAO9zF,QAAQ0gH,IAGvCoC,EAAA7mH,UAAA8lH,qBAAP,eAAA7jF,EAAAhhC,KACI,IAAIA,KAAKmgD,UAAangD,KAAKk/E,iBAA3B,CAEAl/E,KAAKmgD,UAAW,EAEhBngD,KAAKihD,OAASjhD,KAAK8kH,YAGnB,IADA,IAAMC,EAAiB/kH,KAAKihD,QAAUjhD,KAAKihD,OAAOupB,eAAeqsB,UAAUh0F,QAAW,EAC7E4U,EAAQ,EAAGA,EAAQstG,EAAettG,IACvCzX,KAAKihD,OAAOupB,eAAeqsB,UAAUp/E,GAAOs/E,YACxC/2F,KAAKihD,OAAOupB,eAAeqsB,UAAUp/E,GAAOs/E,aAAe,EAEnE/2F,KAAK46F,kBACAzD,sBAAsBn3F,KAAKihD,QAC3B1c,KAAK,WACFvD,EAAK4iF,UAAW,EAEhB5iF,EAAKiP,oBAAoBzQ,QAAQ,4CAEpCwK,MAAM,WACHhJ,EAAKiP,oBAAoB1/B,MAAM,yDAElC4iD,QAAQ,WAAM,OAACnyB,EAAKmf,UAAW,MAGhCylE,EAAA7mH,UAAAmgF,eAAR,WACI,QAAS18E,OAAOi9B,KAAKmB,YAAYilF,oBAzCnCD,EAAgCx2F,GAVrCqI,EAAU,mBACPE,SAAU,2BACViW,UACIqT,OAAQ,IACRmiE,eAAgB,KAEpBv2E,YACI,2GAEP3U,EAAO,oBAAqB,sBAAuB,kCAC9C0tF,GAAN,CAZmCt3F,EAASwe,gBAAgBs0B,aAAawhD,2BAF1C,CAAA91E,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCHV,SAAUA,IAAS,SAAAiD,GAOf,IAAAu0F,EAAA,oBAAAA,KA8DA,OA7DWA,EAAA/mH,UAAAgnH,mBAAP,WACI,OAAO/lH,KAAKgmH,gBAAkBhmH,KAAKimH,2BAA2BF,oBAG3DD,EAAA/mH,UAAAmnH,2BAAP,WACI,OAAOlmH,KAAKmmH,qBAAqB,gBAAkBnmH,KAAKmmH,qBAAqB,kBAG1EL,EAAA/mH,UAAAqnH,gCAAP,WACI,OAAOpmH,KAAKmmH,qBAAqB,gBAAkBnmH,KAAKmmH,qBAAqB,mBAG1EL,EAAA/mH,UAAAonH,qBAAP,SAA4BxC,GACxB,IAAK3jH,KAAKgjH,0BAA0BW,GAAQ,OAAO,EACnD,GAAI3jH,KAAKqmH,kBAAoBrmH,KAAKsmH,gBAAiB,OAAO,EAC1D,IAAKtmH,KAAKgmH,eAAgB,OAAO,EAEjC,IAAMO,EAAMvmH,KAAKimH,2BACjB,OAAOM,GAAOA,EAAIC,sBAAwBD,EAAIC,qBAAqB7C,IAG/DmC,EAAA/mH,UAAAikH,0BAAR,SAAkCQ,GAC9B,OAAQA,GACJ,IAAK,gBACD,OAAOhhH,OAAOi9B,KAAKmB,YAAY8jF,2BACnC,IAAK,cAEL,IAAK,eACD,OAAOliH,OAAOi9B,KAAKmB,YAAY2jF,0BACnC,IAAK,QACD,OAAO/hH,OAAOi9B,KAAKmB,YAAY0jF,4BACnC,IAAK,kBACD,OAAO9hH,OAAOi9B,KAAKmB,YAAYyjF,gBACnC,IAAK,eACD,OAAO7hH,OAAOi9B,KAAKmB,YAAY4jF,aACnC,IAAK,cAEL,IAAK,iBACD,OAAOhiH,OAAOi9B,KAAKmB,YAAY6lF,kBACnC,QACI,OAAOjkH,OAAOi9B,KAAKmB,YAAY+jF,gBAInCmB,EAAA/mH,UAAAunH,cAAR,WACI,IAAMC,EAAMvmH,KAAKimH,2BACjB,OAAe,OAARM,GAAuBjnH,MAAPinH,GAGnBT,EAAA/mH,UAAAinH,aAAR,WACI,IAAMO,EAAMvmH,KAAKimH,2BACjB,OAAOM,GAAOA,EAAI90B,WAGdq0B,EAAA/mH,UAAAknH,yBAAR,WACI,OAAOzjH,OAAOu4B,QAAUv4B,OAAOu4B,OAAO+zD,QAAUtsF,OAAOu4B,OAAO+zD,OAAOy3B,KAAO/jH,OAAOu4B,OAAO+zD,OAAOy3B,IAAI,IAGjGT,EAAA/mH,UAAAsnH,cAAR,WACI,MAAuC,UAAhC7jH,OAAOu4B,OAAOsF,eA5DhBylF,EAAiB12F,GAD7B2I,EAAQ,WAAY,sBACR+tF,GAAb,GAAav0F,EAAAu0F,kBAAiBA,EAPf,CAAAx3F,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCIV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAe/B,SAAA99B,GAII,SAAAojF,EACc7D,EACV5yE,EACA2qD,GAHJ,IAAA55D,EAKIsC,EAAAhmC,KAAA0C,KAAM6iH,EAAmB5yE,EAAqB2qD,IAAkB56F,YAJtDghC,EAAA6hF,oBAJP7hF,EAAAvB,KAAOj9B,OAAOi9B,OADkBoF,EAAA6hF,EAAApjF,GAYhCojF,EAAA3nH,UAAAmnH,2BAAP,WACI,OAAOlmH,KAAK6iH,kBAAkBqD,8BAG3BQ,EAAA3nH,UAAAgkG,YAAP,SAAmBhL,GACf,OACIA,EAAQN,SAA4C,aAAjCM,EAAQN,QAAQn3D,eAAiE,MAAjCy3D,EAAQN,QAAQn3D,eAlBzFomF,EAA4Bt3F,GAVjCqI,EAAU,mBACPE,SAAU,wBACVkV,YAAa,iGACbe,UACIqT,OAAQ,IACR0f,SAAU,IACVyiD,eAAgB,OAGvBlrF,EAAO,oBAAqB,sBAAuB,kCAC9CwuF,GAAN,CAA2CtlD,EAAAwhD,2BAfZ,CAAA91E,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCCV,SAAUA,IAAS,SAAAiD,IAAQ,SAAApB,GAoCvB,IAAAw2F,EAAA,WAGI,SAAAA,EAAmBl4F,GAAAzuB,KAAAyuB,YA4CvB,OA1CIk4F,EAAA5nH,UAAA6nH,mBAAA,WACI,OAAO5mH,KAAKyuB,UACR,6CAGIkgD,cAAe3uE,KAAK2vF,YAAY,OAAO,GACnCnxD,GAAI,QAERqoF,SAAU7mH,KAAK2vF,YAAY,OAAO,GAC9B3gD,OAAQ,UAEZ83E,MAAO9mH,KAAK2vF,YAAY,OAAO,GAC3B3gD,OAAQ,QACRxQ,GAAI,QAERuoF,QAAS/mH,KAAK2vF,YAAY,OAAO,GAC7B3gD,OAAQ,UACRxQ,GAAI,QAERwoF,cAAehnH,KAAK2vF,YAAY,QAAQ,GACpC3gD,OAAQ,UAAWihB,UAAW,UAClCg3D,eAAgBjnH,KAAK2vF,YAAY,QAAQ,GACrC3gD,OAAQ,cAEZk4E,mBAAoBlnH,KAAK2vF,YAAY,OAAO,GACxC3gD,OAAQ,YAEZm4E,cAAennH,KAAK2vF,YAAY,UAAU,GACtCnxD,GAAI,WAMZmoF,EAAA5nH,UAAA4wF,YAAR,SACIjhE,EACA1gB,EACA2gB,EACAuQ,GAEA,OAASxQ,OAAMA,EAAE1gB,QAAOA,EAAE2gB,OAAMA,EAAEuQ,QAAOA,IA5CtCynF,EAAAruF,SAAW,aA8CtBquF,EA/CA,GAiDAp4F,QACKrxB,OAAO,YACPsxB,QAAQ,mBACL,YACA,SAACC,GACG,WAAIk4F,EAAuBl4F,GAAWm4F,wBA1F3B,CAAAr1F,EAAApB,WAAAoB,EAAApB,cAAR,CAAA7B,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCCV,SAAUA,IAAS,SAAAiD,IAAQ,SAAApB,GAKvB,IAAAi3F,EAAA,WACI,SAAAA,EACY7jF,EACAqyD,EACAyxB,GAFArnH,KAAAujC,KACAvjC,KAAA41F,kBACA51F,KAAAqnH,QA6EhB,OA1EID,EAAAroH,UAAAf,IAAA,SAAIquD,GACA,OAAOrsD,KAAK41F,gBAAgBjnB,eAAgBnwC,GAAI6tB,IAC3C/nB,UAGT8iF,EAAAroH,UAAAN,OAAA,SACI4tD,EACAke,GAEA,IAAKvqE,KAAKsnH,YAAa,MAAM,IAAIvnH,MAAM,yBAEvC,OAAOC,KAAKqnH,OACRlpF,IAAK,mBAAqBkuB,EAC1B39B,OAAQ,OACRC,QAAU44F,SAAUh9C,MAI5B68C,EAAAroH,UAAAopC,OAAA,SAAOkkB,GACH,OAAOrsD,KAAK41F,gBAAgBuxB,eAAgB3oF,GAAI6tB,IAC3C/nB,UAGT8iF,EAAAroH,UAAAioH,cAAA,SAAcz8C,GACV,IAAKvqE,KAAKwnH,aAAc,MAAM,IAAIznH,MAAM,iBAExC,IAAMgkC,EAAO/jC,KAAKujC,GAAG07B,QAQrB,OAPAj/D,KAAK41F,gBACAoxB,eAAgBz8C,MAAKA,IACrBjmC,SAASC,KACN,WAAM,OAAAR,EAAKsF,WACX,SAAA94B,GAAS,OAAAwzB,EAAK8D,OAAOt3B,KAGtBwzB,EAAKqD,SAGhBggF,EAAAroH,UAAAuoH,UAAA,WACI,OACI9kH,OAAOu4B,OAAO19B,QAAQoqH,SAASrsF,SAC/B54B,OAAOi9B,KAAKmB,YAAY8mF,eAIhCN,EAAAroH,UAAAyoH,WAAA,WACI,OACIhlH,OAAOu4B,OAAO19B,QAAQoqH,SAASrsF,SAC/B54B,OAAOi9B,KAAKmB,YAAY+mF,gBAIhCP,EAAAroH,UAAAigG,SAAA,SAASlJ,GACL,OAAOA,GAAWA,EAAQ8xB,aAG9BR,EAAAroH,UAAA8oH,WAAA,SAAW/xB,GACP,OAAOA,IAAYA,EAAQ8xB,cAAgB9xB,EAAQgyB,WAGvDV,EAAAroH,UAAAgpH,cAAA,SAAcjyB,GACV,OAAO91F,KAAKwnH,cAAgBxnH,KAAKg/F,SAASlJ,IAG9CsxB,EAAAroH,UAAA+nH,MAAA,SACIz6D,GAEA,OAAOrsD,KAAK41F,gBAAgBkxB,OAAQtoF,GAAI6tB,IAAY/nB,UAGxD8iF,EAAAroH,UAAAgoH,QAAA,SACI16D,GAEA,OAAOrsD,KAAK41F,gBAAgBmxB,SAAUvoF,GAAI6tB,IAAY/nB,UA/EjD8iF,EAAch4F,GAF1B2I,EAAQ,WAAY,kBACpBG,EAAO,KAAM,kBAAmB,UACpBkvF,GAAb,GAAaj3F,EAAAi3F,eAAcA,EALJ,CAAA71F,EAAApB,WAAAoB,EAAApB,cAAR,CAAA7B,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCDV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAoBf,SAAAxJ,GAYI,SAAA0kF,EACcnF,EACV5yE,EACA2qD,EACQqtB,GAJZ,IAAAjnF,EAMIsC,EAAAhmC,KAAA0C,KAAM6iH,EAAmB5yE,EAAqB2qD,IAAkB56F,YALtDghC,EAAA6hF,oBAGF7hF,EAAAinF,iBAZLjnF,EAAAknF,aACDxqH,KAAM,QAASU,MAAO,SACtBV,KAAM,SAAUU,MAAO,WACvBV,KAAM,OAAQU,MAAO,SACrBV,KAAM,kBAAmBU,MAAO,aAChCV,KAAM,WAAYU,MAAO,YAYxB4iC,EAAA4iB,WAAa,SAAChW,GACbA,EAASqT,QAAUrT,EAASqT,OAAOsV,eACnCv1B,EAAK8hF,eACD9hF,EAAKigB,OAAOqN,MAAgB,UAAKttB,EAAKigB,OAAOqN,MAAgB,WAC7DttB,EAAKinF,eAAejqH,IAAIgjC,EAAKigB,OAAOziB,IAAI+F,KAAK,SAAAuxD,GAAW,OAAC90D,EAAK80D,QAAUA,QAzB7CjxD,EAAAmjF,EAAA1kF,GA8BhC0kF,EAAAjpH,UAAAopH,wBAAP,SAA+Bz3C,GAC3B,OAAQ,gCAAgCztC,KAAKytC,IAE1Cs3C,EAAAjpH,UAAAqpH,iBAAP,SAAwBhqH,GACpB,OAAO4B,KAAKkoH,WAAW5kH,KAAK,SAAAgW,GAAK,OAAAA,EAAE5b,MAAQU,IAAOA,OAASkwB,EAASiD,QAAQ0E,UAAUC,UAAU6rC,SAE7FimD,EAAAjpH,UAAAspH,2BAAP,SAAkC33C,GAC9B,IACM/mD,EAAS+mD,EAAQn5C,MADT,mCAGd,OAAK5N,GAAUA,EAAO9mB,OAAS,EACpB,GAEA8mB,EAAO,IAIfq+F,EAAAjpH,UAAAupH,kBAAP,SAAyB/9C,GACrB,SAAKvqE,KAAK81F,UAAYvrB,IAEfvqE,KAAK81F,QAAQ8xB,aAAe5nH,KAAK81F,QAAQvrB,QAAUA,GAGvDy9C,EAAAjpH,UAAA8lH,qBAAP,WACI,GAAK7kH,KAAKuoH,oBAEV,OAAOjlF,EAAAvkC,UAAM8lH,qBAAoBvnH,KAAA0C,OAG7BgoH,EAAAjpH,UAAAypH,WAAR,SAAmBpqH,EAAOkG,EAAOo9F,GAC7B,OAAOA,EAAK5+F,QAAQ1E,KAAWkG,GAG3B0jH,EAAAjpH,UAAAwpH,kBAAR,eAAAvnF,EAAAhhC,KACI,GAAIA,KAAK8jH,wBAAyB,CAC9B,IAAM2E,KACN,QAAIzoH,KAAK8kH,YAAYt6C,gBAAkBxqE,KAAK8kH,YAAYt6C,eAAe0jB,eACnEluF,KAAK8kH,YAAYt6C,eAAe0jB,aAAan6E,QAAQ,SAAAuF,GAC7CA,EAAE29E,SAASp0F,OAAS,EACpB4lH,EAAWxvG,KAAKK,EAAEhX,MAElBgX,EAAEhX,KAAOgsB,EAASiD,QAAQ0E,UAAUC,UAAU6rC,UAKlD0mD,EAAWllG,KAAK,SAAAjhB,GAAQ,OAAC0+B,EAAKijF,mBAAmB3hH,MAEjDtC,KAAKiwC,oBAAoB1/B,MAAM,mDACxB,IAINvQ,KAAKmjH,+CACNsF,EAAW5lH,SAAW4lH,EAAWpvG,OAAOrZ,KAAKwoH,YAAY3lH,SAEzD7C,KAAKiwC,oBAAoB1/B,MAAM,iEACxB,KAOnB,OAAO,GA9FTy3G,EAA4B54F,GATjCqI,EAAU,mBACPE,SAAU,wBACVkV,YAAa,iGACbe,UACIqT,OAAQ,IACRmiE,eAAgB,OAGvBlrF,EAAO,oBAAqB,sBAAuB,gCAAiC,mBAC/E8vF,GAAN,CAlBmC15F,EAASwe,gBAAgBs0B,aAAawhD,2BAF7E,CAAUt0F,WCFV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAA62B,WAAA72B,EAAA62B,aAiB5C,oBAAAywB,KAAMA,EAAwBt5F,GAL7BqI,EAAU,mBACPE,SAAU,mBACViW,UAAY3Q,MAAO,KACnB4P,YAAa,4FAEX67E,GAAN,GAjB+B,CAAA57E,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCEV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAqBf,SAAAxJ,GAII,SAAAqlF,EACYC,EACE/F,EACA5yE,EACA2qD,GAJd,IAAA55D,EAMIsC,EAAAhmC,KAAA0C,KAAM6iH,EAAmB5yE,EAAqB2qD,IAAkB56F,YALxDghC,EAAA4nF,0CACE5nF,EAAA6hF,oBACA7hF,EAAAiP,sBACAjP,EAAA45D,sBARkC/1D,EAAA8jF,EAAArlF,GAazCqlF,EAAA5pH,UAAAqtC,QAAP,eAAApL,EAAAhhC,KACIA,KAAK4oH,wCAAwC5qH,KAAMwgC,GAAIx+B,KAAKihD,OAAOziB,KAAM8F,SAASC,KAAK,SAAAskF,GACnF7nF,EAAK8nF,oBAAsBD,KAfjCF,EAAqCv5F,GAd1CqI,EAAU,mBACPE,SAAU,iCACVkV,YACI,mHACJe,UACIqT,OAAQ,OAGf/oB,EACG,0CACA,oBACA,sBACA,kCAEEywF,GAAN,CAnBmCr6F,EAASwe,gBAAgBs0B,aAAawhD,2BAF7E,CAAUt0F,WCFV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAAs0B,eAAAt0B,EAAAs0B,iBAW/B7yC,QAAQrxB,OAAO,mBAAmBsxB,QAAQ,2CACtC,YACA,SAACC,GACG,OAAAA,EACI,oDAGIzwB,KACI0wB,OAAQ,MACRsgB,OAAQ,GACRhhC,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIxQ,GAAI,aAtB/B,CAAAlQ,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCEV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAuB/B,SAAA99B,GAQI,SAAAylF,EACYvnE,EACRqhE,EACA5yE,EACA2qD,EACQ53C,EACAgmE,GANZ,IAAAhoF,EAQIsC,EAAAhmC,KAAA0C,KAAM6iH,EAAmB5yE,EAAqB2qD,IAAkB56F,YAPxDghC,EAAAwgB,SAIAxgB,EAAAgiB,YACAhiB,EAAAgoF,iBAbLhoF,EAAAvB,KAAOj9B,OAAOi9B,OADmBoF,EAAAkkF,EAAAzlF,GAmBjCylF,EAAAhqH,UAAAqtC,QAAP,WACIpsC,KAAKipH,WAAY,IAAIxsF,MAAOiX,SAAS,IAGlCq1E,EAAAhqH,UAAA6kD,WAAP,SAAkB8a,GACd1+D,KAAK8iH,eAGKiG,EAAAG,kBAAd,SAAgCnxB,GAC5B,SAAUA,EAAQF,SAAWE,EAAQhB,aAAegB,EAAQH,QAAUG,EAAQjB,OAG3EiyB,EAAAhqH,UAAAo6F,WAAP,SAAkBpB,GAAlB,IAAA/2D,EAAAhhC,KAEQwC,OAAOu4B,QACPv4B,OAAOu4B,OAAO+zD,QACdtsF,OAAOu4B,OAAO+zD,OAAOq6B,WACrB3mH,OAAOu4B,OAAO+zD,OAAOq6B,UAAU,IAC/B3mH,OAAOu4B,OAAO+zD,OAAOq6B,UAAU,GAAG13B,aAGjCsG,EAAQF,SAAWE,EAAQF,QAAQh1F,OAAS,GAAKk1F,EAAQhB,aAAe,IAE7E/2F,KAAKopH,gBAAiB,EACtBppH,KAAKqpH,cAAe,EAEpBrpH,KAAKgpH,eACAhrH,KACG65F,QAASE,EAAQF,QACjBd,YAAagB,EAAQhB,YACrBuyB,kBAAmBvxB,EAAQJ,uBAE9BrzD,SAASC,KAAK,SAACmD,GAGZ,GAFA1G,EAAKqoF,cAAe,EAEA,IAAhB3hF,EAAK7kC,OACLk1F,EAAQH,OAAS,GACjBG,EAAQjB,KAAO,OACZ,CACH,IAAMyyB,EAAe7hF,EAAK,GAE1BqwD,EAAQH,OAAS2xB,EAAa3xB,OAC9BG,EAAQjB,KAAOyyB,EAAazyB,QAGnC9sD,MAAM,WACHhJ,EAAKqoF,cAAe,EAEpBtxB,EAAQH,OAAS,GACjBG,EAAQjB,KAAO,KAElB3jC,QAAQ,WACLnyB,EAAKooF,gBAAiB,OAI3BL,EAAAhqH,UAAAgkG,YAAP,SAAmBhL,GACf,OACIA,EAAQN,SAA4C,aAAjCM,EAAQN,QAAQn3D,eAAiE,MAAjCy3D,EAAQN,QAAQn3D,eAIpFyoF,EAAAhqH,UAAAyqH,0BAAP,WACI,OACIxpH,KAAKgjH,0BAA0B10F,EAAAyB,iBAAiB05F,WAChDzpH,KAAKgjH,0BAA0B10F,EAAAyB,iBAAiB25F,YAChD1pH,KAAKgjH,0BAA0B10F,EAAAyB,iBAAiB45F,YAChD3pH,KAAKgjH,0BAA0B10F,EAAAyB,iBAAiB65F,WAChD5pH,KAAKgjH,0BAA0B10F,EAAAyB,iBAAiBq0F,YAChDpkH,KAAKgjH,0BAA0B10F,EAAAyB,iBAAiB+B,SAChD9xB,KAAKgjH,0BAA0B10F,EAAAyB,iBAAiB00F,gBAIjDsE,EAAAhqH,UAAA8qH,aAAP,eAAA7oF,EAAAhhC,KACU8pH,EAAS9pH,KAAKgjD,UACf+P,UACAlzD,MAAM,uBACNkqH,YAAY,uDACZjiC,GAAG,eACHthC,OAAO,aAEZxmD,KAAKgjD,UAAUvhD,KAAKqoH,GAAQvlF,KAAK,SAAA10B,GAC7B,OAAAmxB,EAAK45D,kBACAzyD,OAAOnH,EAAKigB,OAAOziB,IACnB+F,KAAK,WACFvD,EAAKiP,oBAAoBoH,KAAK,gCAC9BrW,EAAKwgB,OAAOib,GAAG,qBAElBzyB,MAAM,SAAA3oC,GACH2/B,EAAKiP,oBAAoB1/B,MAAM,kEA7G7Cw4G,EAA6B35F,GAlBlCqI,EAAU,mBACPE,SAAU,yBACVkV,YAAa,mGACbe,UACIqT,OAAQ,IACR0f,SAAU,IACV+1B,kBAAmB,IACnB0sB,eAAgB,OAGvBlrF,EACG,SACA,oBACA,sBACA,gCACA,YACA,oBAEE6wF,GAAN,CAA4C3nD,EAAAwhD,2BAvBb,CAAA91E,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCJV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAG/B,IAAA4oD,EAAA,SAAA1mF,GAKI,SAAA0mF,EACIhxF,EACQmmE,GAFZ,IAAAn+D,EAIIsC,EAAAhmC,KAAA0C,KAAMg5B,IAAMh5B,YAFJghC,EAAAm+D,wBAuEJn+D,EAAAipF,6BAA+B,WACvC,OAAAznH,OAAOu4B,QACPv4B,OAAOu4B,OAAO+zD,QACdtsF,OAAOu4B,OAAO+zD,OAAOiR,mBACrBv9F,OAAOu4B,OAAO+zD,OAAOiR,kBAAkB,IACvCv9F,OAAOu4B,OAAO+zD,OAAOiR,kBAAkB,GAAGtO,aAC9C,OApFyD5sD,EAAAmlF,EAAA1mF,GAY9C0mF,EAAAjrH,UAAA+lC,aAAP,SAAoBunB,IACFrsD,KAAK05B,WACR0/D,kBAAoBp5F,KAAKiqH,gCAAgCjqH,KAAKkqH,kBAAkB79D,IAGxF29D,EAAAjrH,UAAA0V,OAAP,SAAcolE,GACV,IAAM58C,EAAQj9B,KAAK05B,WAMnB,OAJAmgD,EAAMxtB,SAAWpvB,EAAMg5D,SAASh1C,OAAOziB,GACrBx+B,KAAKm/F,sBACd1qF,OAAOolE,GAEFv1C,UAGX0lF,EAAAjrH,UAAAopC,OAAP,SAAcgiF,GACInqH,KAAK05B,WAInB,OAHe15B,KAAKm/F,sBACfh3D,OAAOgiF,GAEE7lF,UAGX0lF,EAAAjrH,UAAAy/F,OAAP,WACIx+F,KAAKkqH,qBAGDF,EAAAjrH,UAAAmrH,kBAAR,SAA0B79D,GAA1B,IAAArrB,EAAAhhC,KACUi9B,EAAQj9B,KAAK05B,WACb8E,EAAK6tB,GAAYpvB,EAAMg5D,SAASh1C,OAClCziB,GACAx+B,KAAKihC,MAAO3+B,KAAM,0CAElBtC,KAAKm/F,sBACAS,kCACGphE,GAAEA,IAEL8F,SAASC,KAAK,SAAA6lF,GACX,OAAAppF,EAAKC,MACD3+B,KAAM,uCACNg4F,cAAe8vB,MAGtBpgF,MAAM,SAAA3oC,GACc,MAAbA,EAAEu+B,OACFoB,EAAKC,MACD3+B,KAAM,uCACNg4F,mBAGJt5D,EAAKC,MACD3+B,KAAM,0CACNiO,MAAOlP,OAIvBrB,KAAKg5B,MAAMC,OACNtqB,IAAI,SAAA2K,GAAK,OAAAA,GAAKA,EAAE28E,WAChB58E,OACG,SAAA48E,GAAY,OAACA,EAASx3C,UAAYw3C,EAASj7D,YAE9CrP,KAAK,GACLyuF,qBAAqB,WAAM,OAAAp5E,EAAKkpF,uBA1EpCF,EAAmC56F,GAF/C2I,EAAQ,kBAAmB,uCAC3BG,EAAO,oBAAqB,0BAChB8xF,GAAb,CAAyD17F,EAAAyS,kBAA5CqgC,EAAA4oD,oCAAmCA,EAHjB,CAAAl9E,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCKV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAArwC,gBAAAqwC,EAAArwC,kBAC5CxC,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,SAACsmB,GACGA,EAAepkB,MAAM,8CACjBkB,IAAK,gBACL2zB,gBAAgB,EAChBpqB,MACI8nD,IAAK,eACLhsC,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,cAAgB3tC,EAAG89C,mBAE3Cj9C,OACIouC,uBACIv3C,SACI,gFACJzhB,WAAYpJ,EAASsK,+BAGnB,oBAAqB,SAAA15B,GAAK,OACxB+hD,OAAQ/hD,EAAE+2F,UAAY/2F,EAAE+2F,SAASh1C,OACjCxC,QACKv/C,EAAE+2F,UAAY/2F,EAAE+2F,SAASx3C,SACzBv/C,EAAEk6F,kBACCl6F,EAAEk6F,iBAAiB36C,QAC3BkiB,SACIzhE,GAAKA,EAAEu5F,cAAgBv5F,EAAEu5F,aAAa93B,SAC1C25B,cACIp7F,EAAEk6F,kBACFl6F,EAAEk6F,iBAAiBkB,wBA5BhB,CAAAxtD,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCHV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,GAAaA,EAAArwC,gBAAAqwC,EAAArwC,kBAoB5C,oBAAAs5F,KAAMA,EAA8Bj7F,GANnCqI,EAAU,mBACPE,SAAU,yBACViW,UAAY3Q,MAAO,KACnB4P,YACI,6GAEFw9E,GAAN,GApB+B,CAAAv9E,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAYf,oBAAAw9E,KAAMA,EAA6Bl7F,GATlCqI,EAAU,mBACPE,SAAU,wBACVkV,YACI,wGACJe,UACI0sD,cAAe,IACf77C,QAAS,QAGX6rE,GAAN,GAZJ,CAAUh8F,WCAV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAs0B,IAAa,SAAArwC,GAG5C,IAAOw5F,EAAej8F,EAASqC,kBAAkBgD,aAAaC,8BAEvD5C,EAAmB1C,EAASqC,kBAAkBI,cAAcC,kBAgBnE,WAUI,SAAAw5F,EACY3H,EACA4H,EACAx6E,GAFAjwC,KAAA6iH,oBACA7iH,KAAAyqH,sCACAzqH,KAAAiwC,sBAVLjwC,KAAAy/B,KAAOj9B,OAAOi9B,KAYjBz/B,KAAK63E,aAAc,EACnB73E,KAAK0qH,gBAAiB,EAGnBF,EAAAzrH,UAAA6kD,WAAP,SAAkB8a,GAGVA,EAAQqH,aAAaxP,eACrBv2D,KAAK2nC,WAAa3nC,KAAK2qH,kBAIxBH,EAAAzrH,UAAA6rH,oBAAP,SACItoH,GAKA,OAAQA,GACJ,KAAK0uB,EAAiBoC,QACtB,IAAK,UACL,KAAK,EACD,MAAO,SACX,KAAKpC,EAAiBsjC,OACtB,IAAK,SACL,KAAK,EACD,MAAO,SACX,KAAKtjC,EAAiB65F,QACtB,IAAK,UACL,KAAK,EACD,MAAO,qBAGf,OAAOvoH,EAAKuC,YAGT2lH,EAAAzrH,UAAAqnH,gCAAP,WACI,OAAOpmH,KAAK6iH,kBAAkBuD,mCAE3BoE,EAAAzrH,UAAA6lH,cAAP,WACI5kH,KAAK8qH,oBACL9qH,KAAK4jH,UAAW,GAEb4G,EAAAzrH,UAAAimH,uBAAP,WACIhlH,KAAK+qH,kBAAoB,KACzB/qH,KAAK4jH,UAAW,GAEb4G,EAAAzrH,UAAAisH,cAAP,SAAqBxH,GACjB,OAAOxjH,KAAK4jH,UAAY5jH,KAAK6iH,kBAAkBsD,qBAAqB3C,IAGjEgH,EAAAzrH,UAAA8lH,qBAAP,eAAA7jF,EAAAhhC,KACI,IAAIA,KAAKmgD,SAAT,CAEAngD,KAAKmgD,UAAW,EAChBngD,KAAK+lE,aAAe/lE,KAAK+qH,kBACzB,IAAME,GACFzsF,GAAIx+B,KAAK+qH,kBAAkBvsF,GAC3B6tB,SAAU,KACV6+D,YAAalrH,KAAK+qH,kBAAkBG,YACpCC,iBAAkBnrH,KAAK+qH,kBAAkBI,iBACzCC,eAAgBprH,KAAK+qH,kBAAkBK,gBAG3CprH,KAAKyqH,oCACAh2G,OAAOw2G,GACP1mF,KAAK,WAEFvD,EAAK4iF,UAAW,EAChB5iF,EAAKiP,oBAAoBzQ,QACrB,4CAGPwK,MAAM,WACHhJ,EAAKiP,oBAAoB1/B,MACrB,yDAGP4iD,QAAQ,WAAM,OAACnyB,EAAKmf,UAAW,MAEjCqqE,EAAAzrH,UAAAopC,OAAP,eAAAnH,EAAAhhC,KACgD,IAAxCA,KAAK+lE,aAAaslD,mBAKtBrrH,KAAKyqH,oCACAtiF,QAAS3J,GAAIx+B,KAAK+lE,aAAavnC,KAC/B+F,KAAK,WACFvD,EAAKiP,oBAAoBzQ,QACrB,+BAEJwB,EAAKypF,oCAAoCjsB,WAE5Cx0D,MAAM,WACHhJ,EAAKiP,oBAAoB1/B,MACrB,8DAdRvQ,KAAKiwC,oBAAoB1/B,MACrB,sEAkBLi6G,EAAAzrH,UAAA+rH,kBAAP,WACI9qH,KAAK+qH,kBAAoB19F,KAAKiQ,MAAMjQ,KAAKC,UAAUttB,KAAK+lE,gBAErDykD,EAAAzrH,UAAAusH,cAAP,WACItrH,KAAK63E,aAAe73E,KAAK63E,aAGtB2yC,EAAAzrH,UAAAwsH,iBAAP,WACIvrH,KAAK0qH,gBAAkB1qH,KAAK0qH,gBAGzBF,EAAAzrH,UAAAysH,gBAAP,SAAuBhhF,GACnB,OAAOA,EAASloC,KAAKuC,YAGjB2lH,EAAAzrH,UAAA0sH,gBAAR,SAAwB7rF,GACpB,OAAOA,EAAO/6B,YAGX2lH,EAAAzrH,UAAA4rH,cAAP,WACI,IAAI7qH,KACA4rH,KAoBJ,OAlBI1rH,KAAK+lE,aAAajmE,UAClBA,EAAUE,KAAK+lE,aAAajmE,QAAQ6O,IAAI,SAAAy8F,GAAU,OAC9CvrG,MAAOurG,EAAOugB,YAAYjuH,KAC1B4E,KAAMioH,EAAaqB,OACnBC,aAAczgB,EAAOygB,aACrBC,WAAY1gB,EAAO0gB,eAGvB9rH,KAAK+lE,aAAa2lD,YAClBA,EAAY1rH,KAAK+lE,aAAa2lD,UAAU/8G,IAAI,SAAAo9G,GAAY,OACpDlsH,MAAOksH,EAASC,mBAChB1pH,KAAMioH,EAAa0B,SACnBJ,aAAcE,EAASG,YACvBJ,WAAYC,EAASD,WACrBK,KAAMJ,EAASI,SAIhBrsH,EAAQooB,OAAOwjG,GAAWv1G,KAAKnW,KAAKosH,qBAGvC5B,EAAAzrH,UAAAqtH,mBAAR,SAA2BluG,EAAgBC,GACvC,OAAID,EAAK2tG,aAAe1tG,EAAM0tG,cAAsB,EAChD3tG,EAAK2tG,aAAe1tG,EAAM0tG,aAAqB,EAC5C,GAnKTrB,EAAiCp7F,GAbtCqI,EAAU,mBACPE,SAAU,6BACVkV,YACI,gHACJe,UACIm4B,aAAc,OAGrB7tC,EACG,oBACA,sCACA,wBAEEsyF,GAAN,GArB4C,CAAAppD,EAAArwC,gBAAAqwC,EAAArwC,mBAAb,CAAA+b,EAAAs0B,eAAAt0B,EAAAs0B,kBAAhB,CAAA9yC,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,GAQ/B,IAAAC,EAAA,WACI,SAAAA,EACYn5B,EACAhC,EACAo7B,EACAC,EACAlb,GALZ,IAAAtwE,EAAAhhC,KACYA,KAAAmzF,eACAnzF,KAAAmxF,YACAnxF,KAAAusH,gBACAvsH,KAAAwsH,oBACAxsH,KAAAsxG,mBA8CLtxG,KAAAmyG,cAAgB,SAAC1qE,EAAUpC,EAAcomB,QAAxB,IAAAhkB,MAAA,QAAU,IAAApC,MAAA,QAAc,IAAAomB,OAAA,GAC5C,IAAMutC,EAAYh4D,EAAKtH,WAAWg/D,cAAgB13D,EAAKtH,WAAWg/D,aAAaM,UAE/E,IAAKA,GAAaA,EAAUvxD,OAASA,GAAQuxD,EAAU3zD,WAAaA,GAAYomB,EAAO,CACnF,IAAMrkB,EAAUpG,EAAKswE,iBAAiBmb,qBAClCjuF,GAAIwC,EAAKtH,WAAW8E,GACpBiJ,KAAIA,EACJpC,SAAQA,IACTf,SAEHtD,EAAKC,MACD3+B,KAAM,4BACNmlC,KAAIA,EACJpC,SAAQA,IAGZ+B,EAAQ7C,KAAK,SAAAmD,GACT,IAAMglF,GACF7mH,MACImzF,GAAaA,EAAUvxD,KAAOC,EAAKD,KAAWC,EAAK7hC,MAAKqiB,OAAK8wE,EAAUnzF,OAAS6hC,EAAK7hC,MACzFqgC,MAAOwB,EAAKxB,MACZuB,KAAMC,EAAKD,KACXpC,SAAUqC,EAAKrC,UAGnBrE,EAAKC,MACD3+B,KAAM,2BACN02F,UAAW0zB,QA2B/B,OAjGWJ,EAAAvtH,UAAA4tH,aAAP,SAAoB7lF,GAApB,IAAA9F,EAAAhhC,KACIA,KAAKy+C,QAAQ3X,GAEb9mC,KAAKmzF,aAAa9uD,SAAU7F,GAAIsI,IAAUxC,SAASC,KAAK,SAAA0uC,GAAQ,OAAAjyC,EAAKsqB,OAAO2nB,MAGzEq5C,EAAAvtH,UAAAy/F,OAAP,eAAAx9D,EAAAhhC,KACU8mC,EAAS9mC,KAAK05B,WAAW8E,GAE/Bx+B,KAAKmzF,aAAa9uD,SAAU7F,GAAIsI,IAAUxC,SAASC,KAAK,SAAA0uC,GAAQ,OAAAjyC,EAAKsqB,OAAO2nB,MAGzEq5C,EAAAvtH,UAAA6tH,eAAP,SAAsBnhE,GAAtB,IAAAzqB,EAAAhhC,UAAsB,IAAAyrD,OAAA,GACbzrD,KAAK05B,WAAWmzF,YAAaphE,IAC9BzrD,KAAKihC,MAAO3+B,KAAM,8BAElBtC,KAAKwsH,kBACAM,aAActuF,GAAIx+B,KAAK05B,WAAW8E,KAClC8F,SAASC,KAAK,SAAAnmC,GACX,OAAA4iC,EAAKC,MACD3+B,KAAM,2BACNuqH,UAAWzuH,MAGlB4rC,MAAM,SAAA3oC,GACc,MAAbA,EAAEu+B,OACFoB,EAAKC,MACD3+B,KAAM,2BACNuqH,UAAW,OAGf7rF,EAAKC,MACD3+B,KAAM,8BACNiO,MAAOlP,QAMxBirH,EAAAvtH,UAAAouD,OAAP,WACIntD,KAAKihC,MAAO3+B,KAAM,2BAoCdgqH,EAAAvtH,UAAA0/C,QAAR,SAAgBjgB,GACZx+B,KAAKihC,MACD3+B,KAAM,uBACNk8B,GAAEA,KAIF8tF,EAAAvtH,UAAAusD,OAAR,SAAe2nB,GACXjzE,KAAKihC,MACD3+B,KAAM,sBACN2wE,KAAIA,KAIJq5C,EAAAvtH,UAAAkiC,KAAR,SAAa5/B,GACTrB,KAAKusH,cAAc7xF,OAAOR,OAAO74B,IAG7BirH,EAAAvtH,UAAA26B,SAAR,WACI,OAAO15B,KAAKusH,cAAc7yF,YAxGrB4yF,EAAel9F,GAF3B2I,EAAQ,kBAAmB,mBAC3BG,EAAO,eAAgB,YAAa,gBAAiB,oBAAqB,qBAC9Do0F,GAAb,GAAaD,EAAAC,gBAAeA,EARG,CAAAx/E,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCIV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,GAiB/B99F,QACKrxB,OAAO,mBACPmC,QAAQ,UAAW,WAAM,OAAAk9B,EAAEisB,WAAWukE,UAE9BV,EAAAW,kBAAoB,IAAI1zF,GAAGG,QAC3B4yF,EAAAY,kBAAoB,IAAI3zF,GAAGG,QAExCnL,EAAAiD,QAAQ63B,qBAAqB,WACzB7sB,EAAEisB,WAAWukE,QAAQjjE,OAAOM,QAAU,SAAAtjB,GAClCulF,EAAAW,kBAAkB9yF,OAAO4M,IAG7BvK,EAAEisB,WAAWukE,QAAQjjE,OAAO4xC,QAAU,SAAA50D,GAClCulF,EAAAY,kBAAkB/yF,OAAO4M,MA9BF,CAAAgG,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCJV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,GAC/B,IAAAa,EAAA,WAGA,OAHA,gBAAab,EAAAa,QAAOA,EAOpB,IAAAC,EAAA,WAGI,SAAAA,EACIn0F,EACQ+zF,EACA98E,EACAm9E,GAJZ,IAAApsF,EAAAhhC,KAEYA,KAAA+sH,UACA/sH,KAAAiwC,sBACAjwC,KAAAotH,kBAER,IAAMC,EAAe,SAACpwF,GAAyB,OAAAA,GAASA,EAAMuB,IAE9D6tF,EAAAW,kBACK3zG,OAAO,SAAAytB,GACJ,OAAOumF,EAAar0F,EAAMU,cAAgBoN,IAE7C9M,UAAU,SAAA8M,GACPsmF,EAAgB5uB,SAChBx9D,EAAK66D,sBAGbwwB,EAAAY,kBACK5zG,OAAO,SAAAytB,GACJ,OAAOumF,EAAar0F,EAAMU,cAAgBoN,IAE7C9M,UAAU,SAAA6/C,GACH74C,EAAKlB,UAITkB,EAAKlB,QAAUkB,EAAKiP,oBAAoBkQ,SAAS,kBAAmB,KAChE27C,SAAU,WACN96D,EAAKlB,QAAU,QAIvBl+B,WAAW,WACHo/B,EAAKlB,UACLkB,EAAKlB,QAAU,OAEpB,QAGX9G,EAAMC,OACDtqB,IAAI0+G,GACJn0F,uBACA6iE,cAAcztE,EAAAiD,QAAQ+3B,2BACtBnoB,SAAS,WAAM,OAAA7H,GAAG6uC,WAAW6zB,MAAM,OACnChiE,UAAU,SAAA8M,GAAU,OAAA9F,EAAKi7D,iBAAiBn1D,KAE/C9N,EAAM0B,OAAOsnC,MAAM,SAAA3gE,GAAK,MAAW,0BAAXA,EAAEiB,OAAkC03B,UAAU,SAAAnqB,GAAK,OAAAmxB,EAAK66D,sBAmBxF,OAhBYsxB,EAAApuH,UAAAk9F,iBAAR,SAAyBn1D,GAAzB,IAAA9F,EAAAhhC,KACIA,KAAK67F,oBAED/0D,GACA9mC,KAAK+sH,QAAQ5wB,OAAOC,eAAet1D,GAAQ+hB,KAAK,SAAAxnD,GAC5C2/B,EAAK66D,oBACL76D,EAAKlB,QAAUkB,EAAKiP,oBAAoB1/B,MAAM,6CAIlD48G,EAAApuH,UAAA88F,kBAAR,WACQ77F,KAAK8/B,UACL9/B,KAAKiwC,oBAAoB56B,MAAMrV,KAAK8/B,SACpC9/B,KAAK8/B,QAAU,OAjEdqtF,EAAc/9F,GAF1B2I,EAAQ,kBAAmB,kBAC3BG,EAAO,gBAAiB,UAAW,sBAAuB,oBAC9Ci1F,GAAb,GAAad,EAAAc,eAAcA,EARI,CAAArgF,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCEV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,GA2C/B,IAAiBj0B,EAsCA/2B,EAwDLisD,GA9FZ,SAAiBl1B,GAuBGA,EAAAhlF,IAAhB,SACIlU,EACA8/C,GAEA,OACIxgB,GAAIt/B,EAAEs/B,GACNy0C,KAAM/zE,EAAE+zE,KACRrzC,OAAQ1gC,EAAE0gC,OACVitF,UAAW3tH,EAAE2tH,UACbj0B,aAAc15F,EAAE05F,aAChBF,aAAc15C,IAjC1B,CAAiBo5C,EAAAi0B,EAAAj0B,YAAAi0B,EAAAj0B,eAsCjB,SAAiB/2B,GAyBGA,EAAAjuD,IAAhB,SACIlU,EACA8/C,GAEA,OACIxgB,GAAIt/B,EAAEs/B,GACNy0C,KAAM/zE,EAAE+zE,KACRrzC,OAAQ1gC,EAAE0gC,OACVitF,UAAW3tH,EAAE2tH,UACbj0B,aAAc55C,EACd05C,aAAcx5F,EAAEw5F,eAnC5B,CAAiBr3B,EAAAgrD,EAAAhrD,aAAAgrD,EAAAhrD,gBAwDjB,SAAYisD,GACRA,IAAA,iBACAA,IAAA,qBACAA,IAAA,qBACAA,IAAA,mBAJJ,CAAYA,EAAAjB,EAAAiB,wBAAAjB,EAAAiB,2BAsKCjB,EAAAE,cAA+Bj+F,EAAAqM,UAAUhsB,IAClD2f,EAAAsL,KAAoB,YAjJxB,SAAgBv4B,GACZ,OAAQA,EAAEiB,MACN,IAAK,uBACD,OAAO,SAAApD,GAAK,OACRs/B,GAAIn9B,EAAEm9B,GACNy0C,KAAM,KACNrzC,OAAQ0tF,EAAsB9tE,QAC9BqtE,UAAW,KACXn0B,aAAc,KACdE,aAAc,OAGtB,IAAK,sBACD,OAAO,SAAA15F,GAAK,OACRs/B,GAAIt/B,EAAEs/B,GACNy0C,KAAM5xE,EAAE4xE,KACRrzC,OAAQ0tF,EAAsB5tE,OAC9BmtE,UAAW3tH,EAAE2tH,UACbn0B,aAAcx5F,EAAEw5F,aAChBE,aAAc15F,EAAE05F,eAGxB,IAAK,uBACD,OAAO,SAAA15F,GAAK,OACRs/B,GAAIt/B,EAAEs/B,GACNy0C,KAAM/zE,EAAE+zE,KACRrzC,OAAQ0tF,EAAsBC,QAC9BV,UAAW3tH,EAAE2tH,UACbn0B,aAAcx5F,EAAEw5F,aAChBE,aAAc15F,EAAE05F,eAGxB,IAAK,sBACD,OAAO,SAAA15F,GAAK,OACRs/B,GAAIt/B,EAAEs/B,GACNy0C,KAAM5xE,EAAEmsH,QACR5tF,OAAQ0tF,EAAsB5tE,OAC9BmtE,UAAW3tH,EAAE2tH,UACbn0B,aAAcx5F,EAAEw5F,aAChBE,aAAc15F,EAAE05F,eAGxB,IAAK,wBACD,OAAO,SAAA15F,GAAK,OAAAA,GAEhB,IAAK,4BACD,OAAO,SAAAA,GAAK,OACRs/B,GAAIt/B,EAAEs/B,GACNy0C,KAAM/zE,EAAE+zE,KACRrzC,OAAQ1gC,EAAE0gC,OACVitF,WACIpuE,SAAS,EACTluC,MAAO,KACPs8G,UAAW,MAEfn0B,aAAcx5F,EAAEw5F,aAChBE,aAAc15F,EAAE05F,eAGxB,IAAK,2BACD,OAAO,SAAA15F,GAAK,OACRs/B,GAAIt/B,EAAEs/B,GACNy0C,KAAM/zE,EAAE+zE,KACRrzC,OAAQ1gC,EAAE0gC,OACVitF,WACIpuE,SAAS,EACTluC,MAAO,KACPs8G,UAAWxrH,EAAEwrH,WAEjBn0B,aAAcx5F,EAAEw5F,aAChBE,aAAc15F,EAAE05F,eAGxB,IAAK,8BACD,OAAO,SAAA15F,GAAK,OACRs/B,GAAIt/B,EAAEs/B,GACNy0C,KAAM/zE,EAAE+zE,KACRrzC,OAAQ1gC,EAAE0gC,OACVitF,WACIpuE,SAAS,EACTluC,MAAOlP,EAAEkP,MACTs8G,UAAW,MAEfn0B,aAAcx5F,EAAEw5F,aAChBE,aAAc15F,EAAE05F,eAGxB,IAAK,4BACD,OAAO,SAAA15F,GACH,OAAAk5F,EAAUhlF,IAAIlU,GACVu/C,SAAS,EACTu6C,UAAW,KACXzoF,MAAO,QAGnB,IAAK,2BACD,OAAO,SAAArR,GACH,OAAAk5F,EAAUhlF,IAAIlU,GACVu/C,SAAS,EACTu6C,UAAW33F,EAAE23F,UACbzoF,MAAO,QAGnB,IAAK,8BACD,OAAO,SAAArR,GACH,OAAAk5F,EAAUhlF,IAAIlU,GACVu/C,SAAS,EACTu6C,UAAW,KACXzoF,MAAOlP,EAAEkP,SAGrB,IAAK,6BACD,OAAO,SAAArR,GACH,OAAAmiE,EAAWjuD,IAAIlU,GACXu/C,SAAS,EACT2B,MAAO,KACP7vC,MAAO,QAGnB,IAAK,4BACD,OAAO,SAAArR,GACH,OAAAmiE,EAAWjuD,IAAIlU,GACXu/C,SAAS,EACT2B,MAAO/+C,EAAE++C,MACT7vC,MAAO,QAGnB,IAAK,+BACD,OAAO,SAAArR,GACH,OAAAmiE,EAAWjuD,IAAIlU,GACXu/C,SAAS,EACT2B,MAAO,KACP7vC,MAAOlP,EAAEkP,SAIzB,MAAM,IAAIxQ,MAAM,kBAAoBmjD,MAAM5gD,MAAQ4gD,UAatD30B,QAAQrxB,OAAO,mBAAmBkB,MAAM,gBAAiBiuH,EAAAE,eApT1B,CAAAz/E,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCDV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAAu/E,WAAAv/E,EAAAu/E,aAK/B99F,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,qBACA,SAACsmB,EAA2CC,GACxCA,EAAmBS,KAAK,uBAAwB,iCAEhDV,EACKpkB,MAAM,4BACHmlB,UAAU,EACV0P,gBAAgB,EAChB3zB,IAAK,uBACLuJ,MAAQwpB,UAAW,gBACnB5O,OACI0sC,yBACI71C,SAAU,oEACVzhB,WAAYpJ,EAAAsK,+BACR,gBACA,SAAA15B,GAAK,OACD+zE,KAAM/zE,GAAKA,EAAE+zE,KACb+lB,UAAW95F,GAAKA,EAAEw5F,cAAgBx5F,EAAEw5F,aAAaM,eAKjEx2C,SACI,eACA,kBACA,SAACmQ,EAAmCy6D,GAChCA,EAAgBT,aAAah6D,EAAa7rB,QAC1CsmF,EAAgBjb,kBAGxB1V,QACI,kBACA,SAAC2wB,GACGA,EAAgBjgE,aAI3BlwB,MAAM,gCACH60B,gBAAgB,EAChB1P,UAAU,OA9CX,CAAA9zB,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCFV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,GAa/B,IAAAoB,EAAA,WAZA,SAAAA,IAuBYztH,KAAA0tH,aAAc,EAoE1B,OAlEWD,EAAA1uH,UAAA4uH,SAAP,eAAA3sF,EAAAhhC,MAE6B,IAArBA,KAAK0tH,aACmD,OAAxDlrH,OAAOD,SAASq6F,eAAe,2BAClBt9F,IAAbU,KAAK2O,MAEL3O,KAAK0tH,aAAc,EACnBnxF,EAAE+C,MACEnB,IAAK,4DAA4Dn+B,KAAK43F,OAAM,IAAI53F,KAAK+2F,YAAc/2F,KAAK23F,qBAAuB33F,KAAK4tH,kBAAiB,KAAK5tH,KAAK82F,KAC/Jv3D,SAAU,OACVP,WACIC,iBAAiB,GAErBC,SAAWC,8BAA+B,KAC1CK,QAAS,SAAAkI,GAEAA,EAAK,GAkBV1G,EAAK6sF,QAAQnmF,GAjBTnL,EAAE+C,MACEnB,IAAK,4DAA4D6C,EAAK42D,OAAM,IAAI52D,EAAK+1D,YAAW,KAAK/1D,EAAK81D,KAC1Gv3D,SAAU,OACVP,WACIC,iBAAiB,GAErBC,SAAWC,8BAA+B,KAC1CK,QAAS,SAAAsuF,GACAA,EAAsB,GAI3B9sF,EAAK6sF,QAAQC,GAHT9sF,EAAKzwB,MAAQ,gCAUjCA,MAAO,WACHywB,EAAKzwB,MAAQ,iCAOrBk9G,EAAA1uH,UAAA8uH,QAAR,SAAgBnmF,GACZ,IACMqmF,EAAermF,EAAK,GAAGsmF,IACvBC,EAAevmF,EAAK,GAAGwmF,IAC7BluH,KAAKmuH,cAAgB,gDAAgDJ,EAAY,IAAIE,EACrF1xF,EAAE,sBAAsBmc,KAAK,IAE7B14C,KAAK2O,IAAM,IAAIy/G,EAAEz6G,IAAI,qBAAqBi3C,SAASmjE,EAAcE,GAN9C,IAQnBG,EAAEC,UAAU,4CACRC,YAAa,8EACdC,MAAMvuH,KAAK2O,KAEV3O,KAAKwuH,eACLJ,EAAEK,QAAQV,EAAcE,IACpBS,MAAO,MACPC,UAAW,OACXC,YAAa,GACb/M,OAAQ,IACT0M,MAAMvuH,KAAK2O,MA5Eb8+G,EAAYr+F,GAZxBqI,EAAU,mBACPoV,YAAa,mDACblV,SAAU,MACViW,UACIgqD,OAAQ,IACRb,YAAa,IACbY,qBAAsB,IACtBi2B,kBAAmB,IACnB92B,KAAM,IACN03B,cAAe,QAGVf,GAAb,GAAapB,EAAAoB,aAAYA,EAbM,CAAA3gF,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCCV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAAu/E,WAAAv/E,EAAAu/E,aAgB/B,oBAAAwC,KAIWA,EAAA9vH,UAAA6kD,WAAP,SAAkBhW,GAAlB,IAAA5M,EAAAhhC,KACUm6B,EAAeyT,GAAYA,EAAS3Q,OAAS2Q,EAAS3Q,MAAMs5B,aAE7Dp8B,GAAiBA,EAAa6+D,WAAc7+D,EAAa84C,OAE9DjzE,KAAK8uH,gBACD77C,KACI94C,GACAA,EAAa6+D,UAAUnzF,MAAM0d,KAAK,SAAA01D,GAAY,OAAAj4C,EAAKwgE,iBAAiBvoB,MACpE9+C,EAAa84C,QAIlB47C,EAAA9vH,UAAA2kG,8BAAP,WACI,OAAOlhG,OAAOi9B,KAAKmB,YAAY+iE,mBAG3BkrB,EAAA9vH,UAAAyiG,iBAAR,SAAyBvoB,GACrB,MAAsC,WAA/BA,EAASr5C,OAAO/6B,YAA+C,IAApBo0E,EAASr5C,QAtB7DivF,EAAwBz/F,GAP7BqI,EAAU,mBACPE,SAAU,mBACVkV,YAAa,mFACbe,UACI3Q,MAAO,QAGT4xF,GAAN,GAhBe,CAAAvgG,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAAu/E,WAAAv/E,EAAAu/E,aAc/B,WAII,SAAA0C,EACWhuB,EACAxT,GADAvtF,KAAA+gG,mBACA/gG,KAAAutF,eAGJwhC,EAAAhwH,UAAAqtC,QAAP,WACQpsC,KAAKizE,MAAMjzE,KAAKgvH,cAAchvH,KAAKizE,KAAKz0C,KAGzCuwF,EAAAhwH,UAAA6uF,OAAP,SAAc36C,GACVjzC,KAAKutF,aAAaK,OAAO36C,IAGrB87E,EAAAhwH,UAAAiwH,cAAR,SAAsBloF,GAAtB,IAAA9F,EAAAhhC,KACIA,KAAK2hG,aAEL3hG,KAAK+gG,iBACA3uB,0BAA2B5zC,GAAIsI,IAC/BxC,SAASC,KAAK,SAACo9D,GACZ3gE,EAAK2gE,UAAYA,KAvB3BotB,EAAsC3/F,GAT3CqI,EAAU,mBACPE,SAAU,kCACVkV,YACI,+GACJe,UACIqlC,KAAM,OAGb/6C,EAAO,mBAAoB,iBACtB62F,GAAN,GAde,CAAAzgG,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAAu/E,WAAAv/E,EAAAu/E,aAW/B,oBAAA4C,KAAMA,EAAgC7/F,GARrCqI,EAAU,mBACPE,SAAU,6BACVkV,YACI,mGACJe,UACIqlC,KAAM,QAGRg8C,GAAN,GAXe,CAAA3gG,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCHV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAAu/E,WAAAv/E,EAAAu/E,aAS/B,oBAAA6C,KAAMA,EAAuB9/F,GAR5BqI,EAAU,mBACPE,SAAU,kBACVkV,YACI,wEACJe,UACIqlC,KAAM,QAGRi8C,GAAN,GATe,CAAA5gG,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,IAAS,SAAAhrD,GAU3BA,EAAA8tD,2BAA6B,IAAI71F,GAAGG,SAUjD,WAOI,SAAA21F,EACYz8D,EACA3P,EACAqsE,EACAh5C,EACA7yC,GALZ,IAAAxC,EAAAhhC,KACYA,KAAA2yD,eACA3yD,KAAAgjD,YACAhjD,KAAAqvH,wBACArvH,KAAAq2E,8BACAr2E,KAAAwjC,YAERxjC,KAAK+zF,0BAA4B1yB,EAAA8tD,2BAC5B91G,OAAO,SAAAC,GAAK,QAAEA,IACd0gB,UAAU,SAAAnqB,GACPmxB,EAAKgzD,sBAIVo7B,EAAArwH,UAAAqtC,QAAP,WACIpsC,KAAK4gC,YAAcp+B,OAAOi9B,KAAKmB,YAC/B5gC,KAAKo0F,0BAEDp0F,KAAK2yD,aAAa0hC,aAClBr0F,KAAKg0F,oBACLh0F,KAAKwjC,UAAU7gC,aAIhBysH,EAAArwH,UAAA4tC,WAAP,WACQ3sC,KAAK+zF,2BAA2B/zF,KAAK+zF,0BAA0BnnD,WAGhEwiF,EAAArwH,UAAAs/F,mBAAP,WACIr+F,KAAKqvH,sBAAsBt6C,YAGxBq6C,EAAArwH,UAAAw1F,aAAP,SAAoBnuD,GAApB,IAAApF,EAAAhhC,KACSA,KAAK2yD,aAAa7rB,QAAWV,GAAQA,EAAIi+B,SAE9CrkE,KAAKgjD,UACAvhD,MACG03C,SAAU,6CAA6Cn5C,KAAK2yD,aAAa7rB,OAAM,aAC3EV,EAAI5H,GAAE,aAEN4H,EAAIi+B,QAAQ7lC,GAAE,mBACCx+B,KAAKq2E,4BAA4BnS,yBAAwB,2BAC5E5f,YAAa,KACbC,qBAAqB,IAExBhgB,KAAK,WACFvD,EAAKyzD,qBACLzzD,EAAKquF,sBAAsB7wB,YAIhC4wB,EAAArwH,UAAAi1F,kBAAP,WACIh0F,KAAKw0F,sBAAuB,GAGzB46B,EAAArwH,UAAA01F,mBAAP,WACIz0F,KAAKw0F,sBAAuB,GAGzB46B,EAAArwH,UAAA41F,qBAAP,WACS30F,KAAK2yD,aAAa7rB,QAEvB9mC,KAAKgjD,UAAUvhD,MACX03C,SAAU,qDACNn5C,KAAK2yD,aAAa7rB,OAAM,mCAE5Bwd,YAAa,KACbC,qBAAqB,KAItB6qE,EAAArwH,UAAAq1F,wBAAP,eAAApzD,EAAAhhC,KACIA,KAAKwoF,aAEG9qF,KAAM,gBACN42F,SAAS,EACTpI,UAAW,SAAC9lD,GAAkB,OAAApF,EAAKuzD,aAAanuD,OAnF1DgpF,EAAuBhgG,GAR5BqI,EAAU,mBACPE,SAAU,kBACVkV,YAAa,oFACbe,UACI3Q,MAAO,OAGd/E,EAAO,eAAgB,YAAa,wBAAyB,8BAA+B,cACvFk3F,GAAN,GApBwC,CAAA/C,EAAAhrD,aAAAgrD,EAAAhrD,gBAAT,CAAAv0B,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCEV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,GAI/B,IAAO8C,EAA6B7gG,EAASwe,gBAAgBu/E,SAAShrD,WAAW8tD,4BAYjF,WAII,SAAAG,EAAoB38D,EAA2B3P,EAAwBxB,GAAnDxhD,KAAA2yD,eAA2B3yD,KAAAgjD,YAAwBhjD,KAAAwhD,SAEhE8tE,EAAAvwH,UAAAqtC,QAAP,WACIpsC,KAAKkvF,aACLlvF,KAAK80F,iBAGFw6B,EAAAvwH,UAAAw1F,aAAP,WACSv0F,KAAK2yD,aAAa7rB,SAEU,4CAA7B9mC,KAAKwhD,OAAOyU,QAAQv4D,KACpByxH,EAA2Bj1F,QAAO,GAElCl6B,KAAKwhD,OAAOib,GAAG,2CACX31B,OAAQ9mC,KAAK2yD,aAAa7rB,OAC1ButD,YAAY,MAIjBi7B,EAAAvwH,UAAA41F,qBAAP,WACS30F,KAAK2yD,aAAa7rB,QAEvB9mC,KAAKgjD,UAAUvhD,MACX03C,SAAU,qDACNn5C,KAAK2yD,aAAa7rB,OAAM,mCAE5Bwd,YAAa,KACbC,qBAAqB,KAIrB+qE,EAAAvwH,UAAA+1F,cAAR,eAAA9zD,EAAAhhC,KACIA,KAAK4uF,UAEGzM,QAAS,oBACT4S,MAAO,sBACPC,KAAM,oBACNC,MAAO,UACPh1F,KAAM,YACN+uC,OAAQ,WAAM,OAAAhO,EAAK2zD,0BAGnBxS,QAAS,cACT4S,MAAO,gBACPC,KAAM,aACNC,MAAO,aACPh1F,KAAM,YACN+uC,OAAQ,WAAM,OAAAhO,EAAKuzD,mBAKvB+6B,EAAAvwH,UAAAmwF,WAAR,WACIlvF,KAAKmvF,QAEA3sF,OAAOi9B,KAAKmB,YAAYwuD,eAEzB5sF,OAAOi9B,KAAKmB,YAAY8yD,UACxB1zF,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,WAAY,4CAE3CtvF,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,aAAc,2CAErC9sF,OAAOi9B,KAAKmB,YAAY+yD,kBACxB3zF,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,eAAgB,+CAE/CtvF,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,mBAAoB,2CAE3C9sF,OAAOi9B,KAAKmB,YAAY2uF,6BACxBvvH,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,mBAAoB,iDAG/CggC,EAAAvwH,UAAAuwF,UAAR,SAAkBzvF,EAAeo9B,GAC7B,OACIp9B,MAAKA,EACLo9B,MAAKA,IAILqyF,EAAAvwH,UAAAwwF,OAAR,SAAeC,GACXxvF,KAAKmvF,KAAKl2E,KAAKu2E,IAnFjB8/B,EAAqBlgG,GAV1B8I,EAAO,eAAgB,YAAa,UACpCT,EAAU,mBACPE,SAAU,gBACVwhB,SAAU,0OAORm2E,GAAN,GAhB+B,CAAAxiF,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCFV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,IAAS,SAAAhrD,GAMxC,IAAAmuD,EAAA,SAAAlsF,GAOI,SAAAksF,EACIx2F,EACQ4tB,GAFZ,IAAA5lB,EAIIsC,EAAAhmC,KAAA0C,KAAMg5B,IAAMh5B,YAFJghC,EAAA4lB,sBAJJ5lB,EAAAqE,SAAW,KA4FvB,OAjG2CR,EAAA2qF,EAAAlsF,GAchCksF,EAAAzwH,UAAA+lC,aAAP,SAAoBO,EAA0BomB,QAA1B,IAAApmB,MAAWrlC,KAAKqlC,eAAU,IAAAomB,OAAA,GAC5BzrD,KAAK05B,WACRk/D,eAAgBntC,GACvBzrD,KAAKinC,eAAe,EAAG5B,EAAU,SAAA+a,GAAS,OAAAA,KAG3CovE,EAAAzwH,UAAAy/F,OAAP,WACIx+F,KAAK8kC,aAAa9kC,KAAKqlC,UAAU,IAG9BmqF,EAAAzwH,UAAAg2E,SAAP,WACI,IAAM93C,EAAQj9B,KAAKg5B,MAAMU,WACnBsgF,EAAa/8E,EAAM27D,cAAgB37D,EAAM27D,aAAax4C,MAE5DpgD,KAAKinC,eACD+yE,EAAWvyE,KAAO,EAClBuyE,EAAW30E,SACX,SAAA+a,GAAS,OACLv6C,MAAOm0G,EACDA,EAAWn0G,MAAMqiB,OAAOk4B,EAAMv6C,OAC9Bu6C,EAAMv6C,MACZqgC,MAAOka,EAAMla,MACbuB,KAAM2Y,EAAM3Y,KACZpC,SAAU+a,EAAM/a,aAKpBmqF,EAAAzwH,UAAAkoC,eAAR,SACIQ,EACApC,EACAimB,GAHJ,IAAAtqB,EAAAhhC,KAOUi9B,EAAQj9B,KAAK05B,WACfuD,EAAMg2C,MACNjzE,KAAKihC,MACD3+B,KAAM,6BACNmlC,KAAIA,EACJpC,SAAQA,IAGZrlC,KAAK4mD,oBACAkmE,aACGtuF,GAAIvB,EAAMuB,GACViJ,KAAIA,EACJpC,SAAQA,IAEXf,SAASC,KAAK,SAAAmD,GAEXnZ,QAAQxa,QACJ2zB,EAAK7hC,MACL,SAAClG,GACOA,EAAKumG,gBACLvmG,EAAKumG,cAAcliE,KAAOrkC,EAAKqkC,MAG/BrkC,EAAKwmG,eACLxmG,EAAKwmG,aAAaniE,KAAOrkC,EAAKqkC,QAK1C,IAAMoc,EAAQkL,EAAO5jB,GACrB1G,EAAKC,MAAO3+B,KAAM,4BAA6B89C,MAAKA,MAEvDpW,MAAM,SAAA3oC,GACH,OAAA2/B,EAAKC,MACD3+B,KAAM,+BACNiO,MAAOlP,OAInBrB,KAAKg5B,MAAMC,OACNtqB,IAAI,SAAA2K,GAAK,OAAAA,GAAKA,EAAE25D,OAChB55D,OAAO,SAAAC,GAAK,OAAK,MAALA,IACZqS,KAAK,GACLyuF,qBAAqB,WAClB,OAAAp5E,EAAKiG,eAAeQ,EAAMpC,EAAUimB,MA7F3CkkE,EAAqBpgG,GAFjC2I,EAAQ,kBAAmB,yBAC3BG,EAAO,gBAAiB,wBACZs3F,GAAb,CAA2ClhG,EAAAyS,kBAA9BsgC,EAAAmuD,sBAAqBA,EANM,CAAAnD,EAAAhrD,aAAAgrD,EAAAhrD,gBAAT,CAAAv0B,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCOV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,IAAS,SAAAhrD,GAgBxC9yC,QACKrxB,OAAO,mBACPmC,QAAQ,kBAAmB,WAAM,OAAAk9B,EAAEisB,WAAWinE,kBAEtCpuD,EAAAquD,0BAA4B,IAAIp2F,GAAGG,QACnC4nC,EAAAsuD,0BAA4B,IAAIr2F,GAAGG,QAEhDnL,EAAAiD,QAAQ63B,qBAAqB,WACzB7sB,EAAEisB,WAAWinE,gBAAgB3lE,OAAOM,QAAU,SAAAyvB,GAC1CxY,EAAAquD,0BAA0Bx1F,OAAO2/C,IAGrCt9C,EAAEisB,WAAWinE,gBAAgB3lE,OAAO4xC,QAAU,SAAA50D,GAC1Cu6B,EAAAsuD,0BAA0Bz1F,OAAO4M,MA7BD,CAAAulF,EAAAhrD,aAAAgrD,EAAAhrD,gBAAT,CAAAv0B,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCJV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,IAAS,SAAAhrD,GAGxC,IAAAuuD,EAAA,WAGI,SAAAA,EACI52F,EACAxK,EACQihG,EACAx/E,GAJZ,IAAAjP,EAAAhhC,KAGYA,KAAAyvH,kBACAzvH,KAAAiwC,sBAER,IAAM4/E,EAAY,SAAC5yF,GAAyB,OAAAA,GAASA,EAAMuB,IAE3D6iC,EAAAquD,0BACKr2G,OAAO,SAAAytB,GAAU,OAAA+oF,EAAU72F,EAAMU,cAAgBoN,IACjD9M,UAAU,WACPxL,EAAQsW,kBAAaxlC,GAAW,GAChC0hC,EAAK66D,sBAGbx6B,EAAAsuD,0BACKt2G,OAAO,SAAAytB,GAAU,OAAA+oF,EAAU72F,EAAMU,cAAgBoN,IACjD9M,UAAU,WACHgH,EAAKlB,UAITkB,EAAKlB,QAAUkB,EAAKiP,oBAAoBkQ,SAAS,oBAAqB,KAClE27C,SAAU,WACN96D,EAAKlB,QAAU,QAIvBl+B,WAAW,WACHo/B,EAAKlB,UACLkB,EAAKlB,QAAU,OAEpB,QAGX9G,EAAMC,OACDtqB,IAAIkhH,GACJ32F,uBACA6iE,cAAcztE,EAAAiD,QAAQ+3B,2BACtBnoB,SAAS,WAAM,OAAA7H,GAAG6uC,WAAW6zB,MAAM,OACnChiE,UAAU,SAAA8M,GAAU,OAAA9F,EAAKhH,UAAU8M,KAExC9N,EAAM0B,OAAOsnC,MAAM,SAAA3gE,GAAK,MAAW,0BAAXA,EAAEiB,OAAkC03B,UAAU,SAAAnqB,GAAK,OAAAmxB,EAAKk7D,YAAY2zB,EAAU72F,EAAMU,eAuBpH,OApBYk2F,EAAA7wH,UAAAi7B,UAAR,SAAkB8M,GACVA,GACA9mC,KAAKyvH,gBAAgBtzB,OAAOniE,UAAU8M,GAE1C9mC,KAAK67F,qBAGD+zB,EAAA7wH,UAAAm9F,YAAR,SAAoBp1D,GACZA,GACA9mC,KAAKyvH,gBAAgBtzB,OAAOD,YAAYp1D,GAE5C9mC,KAAK67F,qBAGD+zB,EAAA7wH,UAAA88F,kBAAR,WACQ77F,KAAK8/B,UACL9/B,KAAKiwC,oBAAoB56B,MAAMrV,KAAK8/B,SACpC9/B,KAAK8/B,QAAU,OAjEd8vF,EAAsBxgG,GAFlC2I,EAAQ,kBAAmB,0BAC3BG,EAAO,gBAAiB,wBAAyB,kBAAmB,wBACxD03F,GAAb,GAAavuD,EAAAuuD,uBAAsBA,EAHK,CAAAvD,EAAAhrD,aAAAgrD,EAAAhrD,gBAAT,CAAAv0B,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCCV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,IAAS,SAAAhrD,GACxC,SAASvoC,EAAS55B,GACd,OACI+zE,KAAM/zE,EAAE+zE,KACR2lB,aAAc15F,EAAE05F,cAIxBrqE,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,SAACsmB,GACGA,EAAepkB,MAAM,2CACjBkB,IAAK,uBACL2zB,gBAAgB,EAChBpqB,MACI8nD,IAAK,WACLhsC,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,cAAgB3tC,EAAGiyC,WAE3CpxC,OACIouC,uBACIv3C,SACI,kEACJzhB,WAAYpJ,EAAAsK,+BACR,gBACAE,KAIZ0pB,SACI,wBACA,SAAC6sE,GACGA,EAAsBvqF,sBA/BF,CAAAunF,EAAAhrD,aAAAgrD,EAAAhrD,gBAAT,CAAAv0B,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCDV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,IAAS,SAAAh0B,GACxC,SAASv/D,EAAS55B,GACd,OACI+zE,KAAM/zE,GAAKA,EAAE+zE,KACbx0B,SAAUv/C,IAAMA,EAAE+zE,MAI1B1kD,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,SAACsmB,GACGA,EAAepkB,MAAM,8CACjBkB,IAAK,gBACL2zB,gBAAgB,EAChBpqB,MACI8nD,IAAK,eACLhsC,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,cAAgB3tC,EAAGkyC,mBAE3CrxC,OACIouC,uBACIv3C,SACI,wEACJzhB,WAAYpJ,EAAAsK,+BACR,gBACAE,UAxBgB,CAAAuzF,EAAAh0B,gBAAAg0B,EAAAh0B,mBAAT,CAAAvrD,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,GAAgBA,EAAAu/E,WAAAv/E,EAAAu/E,aAmB/B,WAMI,SAAAyD,EACYn9D,EACAwiC,GADAn1F,KAAA2yD,eACA3yD,KAAAm1F,uBAJJn1F,KAAAynC,KAAO,EAORqoF,EAAA/wH,UAAAqtC,QAAP,WACIpsC,KAAKo1F,qBAGF06B,EAAA/wH,UAAAg2E,SAAP,WACI/0E,KAAKo1F,kBAAkBp1F,KAAKynC,KAAO,IAGzBqoF,EAAA/wH,UAAAq2F,kBAAd,SACI3tD,EACApC,eADA,IAAAoC,MAAA,QACA,IAAApC,MAAA,6FAKA,QAHMyB,EACD9mC,KAAKi9B,OAASj9B,KAAKi9B,MAAMg2C,MAAQjzE,KAAKi9B,MAAMg2C,KAAKz0C,IAClDx+B,KAAK2yD,aAAa7rB,SACP9mC,KAAKq1F,sBAAsB,IAE1Cr1F,KAAKq1F,sBAAuB,EAC5Br1F,KAAKynC,KAAOA,GACU,EAAMznC,KAAKm1F,qBAAqB46B,UAClDvxF,GAAIsI,EACJW,KAAIA,EACJpC,SAAQA,IACTf,yBAJGixD,EAAgB34D,EAAAC,UAMlB78B,KAAKu1F,cACQ,IAAT9tD,EACM8tD,EACDt6D,KACQj7B,KAAKu1F,eACR9tD,KAAIA,EACJ5hC,MAAO7F,KAAKu1F,cAAc1vF,MAAMqiB,OAC5BqtE,EAAc1vF,UAIpC7F,KAAKq1F,sBAAuB,YA/C9By6B,EAA0B1gG,GAT/BqI,EAAU,mBACPE,SAAU,qBACVkV,YACI,6FACJe,UACI3Q,MAAO,OAGd/E,EAAO,eAAgB,yBAClB43F,GAAN,GAnBe,CAAAxhG,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCIV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,IAAS,SAAAj0B,GAmB3BA,EAAA43B,0BAA4B,IAAI12F,GAAGG,QACnC2+D,EAAA63B,0BAA4B,IAAI32F,GAAGG,QACnC2+D,EAAA83B,kCAAoC,IAAI52F,GAAGG,QAExDlL,QACKrxB,OAAO,mBACPmC,QAAQ,kBAAmB,WAAM,OAAAk9B,EAAEisB,WAAW2nE,kBAEnD7hG,EAAAiD,QAAQ63B,qBAAqB,WACzB7sB,EAAEisB,WAAW2nE,gBAAgBrmE,OAAOM,QAAU,SAAAtjB,GAC1CsxD,EAAA43B,0BAA0B91F,OAAO4M,IAGrCvK,EAAEisB,WAAW2nE,gBAAgBrmE,OAAO4xC,QAAU,SAAA50D,GAC1CsxD,EAAA63B,0BAA0B/1F,OAAO4M,IAGrCvK,EAAEisB,WAAW2nE,gBAAgBrmE,OAAOszD,gBAAkB,SAAApkC,GAClDof,EAAA83B,kCAAkCh2F,OAAO8+C,MArCT,CAAAqzC,EAAAj0B,YAAAi0B,EAAAj0B,eAAT,CAAAtrD,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCJV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,IAAS,SAAAj0B,GAGxC,IAAAg4B,EAAA,WAEI,SAAAA,EACIp3F,EACQm3F,EACAlgF,EACRm9E,GAJJ,IAAApsF,EAAAhhC,KAEYA,KAAAmwH,kBACAnwH,KAAAiwC,sBAGR,IAAM4/E,EAAY,SAAC5yF,GAAyB,OAAAA,GAASA,EAAMuB,IAW3D45D,EAAA43B,0BACK32G,OAAO,SAAAytB,GAAU,OAAA+oF,EAAU72F,EAAMU,cAAgBoN,IACjD9M,UAAU,SAAAnqB,GACHmpB,EAAMU,WAAWg/D,cAAc00B,EAAgBjb,mBAAc7yG,OAAWA,GAAW,GAEvF0hC,EAAK66D,sBAGbzD,EAAA83B,kCACK72G,OAAO,SAAA2/D,GAAc,OAlBC,SAAC95E,EAAkB85E,GAE1C,SAAI95E,GAAKA,EAAEw5F,cAAgBx5F,EAAEw5F,aAAaM,WAAa95F,EAAEw5F,aAAaM,UAAUnzF,OAAS3G,EAAEw5F,aAAaM,UAAUnzF,QACvG3G,EAAEw5F,aAAaM,UAAUnzF,MAAM0d,KAAK,SAAAjK,GAAK,OAAAA,EAAEklB,KAAOw6C,IAevCskC,CAAmBtkF,EAAMU,WAAYs/C,KAC1Dh/C,UAAU,SAAAnqB,GAAK,OAAAu9G,EAAgBjb,mBAAc7yG,OAAWA,GAAW,KAExE84F,EAAA63B,0BACK52G,OAAO,SAAAytB,GAAU,OAAA+oF,EAAU72F,EAAMU,cAAgBoN,IACjD9M,UAAU,SAAAnqB,GACHmxB,EAAKlB,UAITkB,EAAKlB,QAAUkB,EAAKiP,oBAAoBkQ,SAAS,mBAAoB,KACjE27C,SAAU,WACN96D,EAAKlB,QAAU,QAIvBl+B,WAAW,WACHo/B,EAAKlB,UACLkB,EAAKlB,QAAU,OAEpB,QAGX9G,EAAM0B,OAAOsnC,MAAM,SAAA3gE,GAAK,MAAW,0BAAXA,EAAEiB,OAAkC03B,UAAU,SAAAnqB,GAAK,OAAAmxB,EAAKk7D,YAAY2zB,EAAU72F,EAAMU,eAE5GV,EAAMC,OACDtqB,IAAIkhH,GACJ32F,uBACA6iE,cAAcztE,EAAAiD,QAAQ+3B,2BACtBnoB,SAAS,WAAM,OAAA7H,GAAG6uC,WAAW6zB,MAAM,OACnChiE,UAAU,SAAA8M,GAAU,OAAA9F,EAAKhH,UAAU8M,KAqBhD,OAlBYspF,EAAArxH,UAAAi7B,UAAR,SAAkB8M,GACVA,GACA9mC,KAAKmwH,gBAAgBh0B,OAAOniE,UAAU8M,GAE1C9mC,KAAK67F,qBAGDu0B,EAAArxH,UAAAm9F,YAAR,SAAoBp1D,GAChB9mC,KAAKmwH,gBAAgBh0B,OAAOD,YAAYp1D,GACxC9mC,KAAK67F,qBAGDu0B,EAAArxH,UAAA88F,kBAAR,WACQ77F,KAAK8/B,UACL9/B,KAAKiwC,oBAAoB56B,MAAMrV,KAAK8/B,SACpC9/B,KAAK8/B,QAAU,OA5EdswF,EAAsBhhG,GAFlC2I,EAAQ,kBAAmB,0BAC3BG,EAAO,gBAAiB,kBAAmB,sBAAuB,oBACtDk4F,GAAb,GAAah4B,EAAAg4B,uBAAsBA,EAHK,CAAA/D,EAAAj0B,YAAAi0B,EAAAj0B,eAAT,CAAAtrD,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,IAAS,SAAAj0B,GACxC,SAASt/D,EAAS55B,GACd,OACI+zE,KAAM/zE,GAAKA,EAAE+zE,KACb+lB,UAAW95F,GAAKA,EAAEw5F,cAAgBx5F,EAAEw5F,aAAaM,UACjDv6C,SAAUv/C,IAAMA,EAAE+zE,OAAS/zE,EAAEw5F,cAAgBx5F,EAAEw5F,aAAaj6C,SAIpElwB,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,SAACsmB,GACGA,EAAepkB,MAAM,0CACjBkB,IAAK,cACL2zB,gBAAgB,EAChBpqB,MACI8nD,IAAK,kBACLhsC,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,cAAgB3tC,EAAG69C,eAE3Ch9C,OACIouC,uBACIv3C,SACI,gEACJzhB,WAAYpJ,EAAAsK,+BACR,gBACAE,UAzBgB,CAAAuzF,EAAAj0B,YAAAi0B,EAAAj0B,eAAT,CAAAtrD,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCHV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,GAASA,EAAAj0B,YAAAi0B,EAAAj0B,cAyBxC,WAGI,SAAAi4B,EAAoBjD,GAAAptH,KAAAotH,kBAEbiD,EAAAtxH,UAAAg2E,SAAP,WACI/0E,KAAKotH,gBAAgBjb,cACjBnyG,KAAKi9B,MAAM+7D,UAAUvxD,KAAO,EAC5BznC,KAAKi9B,MAAM+7D,UAAU3zD,WAR3BgrF,EAAsBjhG,GAT3BqI,EAAU,mBACPE,SAAU,iBACVkV,YACI,iFACJe,UACI3Q,MAAO,OAGd/E,EAAO,oBACFm4F,GAAN,GAzB+B,CAAAvjF,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCOV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,IAAS,SAAAiE,GAgB3BA,EAAAC,2BAA6B,IAAIj3F,GAAGG,QACpC62F,EAAAE,8BAAgC,IAAIl3F,GAAGG,QAEpDlL,QACKrxB,OAAO,mBACPmC,QAAQ,mBAAoB,WAAM,OAAAk9B,EAAEisB,WAAWioE,mBAEpDniG,EAAAiD,QAAQ63B,qBAAqB,WACzB7sB,EAAEisB,WAAWioE,iBAAiB3mE,OAAOM,QAAU,SAAAtjB,GAC3CwpF,EAAAC,2BAA2Br2F,OAAO4M,IAGtCvK,EAAEisB,WAAWioE,iBAAiB3mE,OAAO4xC,QAAU,SAAA50D,GAC3CwpF,EAAAE,8BAA8Bt2F,OAAO4M,MA7BL,CAAAulF,EAAAiE,YAAAjE,EAAAiE,eAAT,CAAAxjF,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCJV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,IAAS,SAAAiE,GAGxC,IAAAI,EAAA,WAGI,SAAAA,EACI13F,EACQy3F,EACArD,EACAn9E,GAJZ,IAAAjP,EAAAhhC,KAEYA,KAAAywH,mBACAzwH,KAAAotH,kBACAptH,KAAAiwC,sBAER,IAAM4/E,EAAY,SAAC5yF,GAAyB,OAAAA,GAASA,EAAMuB,IAE3D8xF,EAAAC,2BACKl3G,OAAO,SAAAytB,GAAU,OAAA+oF,EAAU72F,EAAMU,cAAgBoN,IACjD9M,UAAU,SAAAnqB,GACHmpB,EAAMU,WAAWmzF,WAAWO,EAAgBR,gBAAe,GAE/D5rF,EAAK66D,sBAGby0B,EAAAE,8BACKn3G,OAAO,SAAAytB,GAAU,OAAA+oF,EAAU72F,EAAMU,cAAgBoN,IACjD9M,UAAU,SAAAnqB,GACPmxB,EAAK66D,oBACL76D,EAAKlB,QAAUkB,EAAKiP,oBAAoBkQ,SAAS,mBAAoB,OAG7EnnB,EAAMC,OACDtqB,IAAIkhH,GACJ32F,uBACA6iE,cAAcztE,EAAAiD,QAAQ+3B,2BACtBnoB,SAAS,WAAM,OAAA7H,GAAG6uC,WAAW6zB,MAAM,OACnChiE,UAAU,SAAA8M,GAAU,OAAA9F,EAAKhH,UAAU8M,KAExC9N,EAAM0B,OAAOsnC,MAAM,SAAA3gE,GAAK,MAAW,0BAAXA,EAAEiB,OAAkC03B,UAAU,SAAAnqB,GAAK,OAAAmxB,EAAKk7D,YAAY2zB,EAAU72F,EAAMU,eA0BpH,OAvBYg3F,EAAA3xH,UAAAi7B,UAAR,SAAkB8M,GAEd9mC,KAAK67F,oBACD/0D,GACA9mC,KAAKywH,iBAAiBt0B,OAAOniE,UAAU8M,IAKvC4pF,EAAA3xH,UAAAm9F,YAAR,SAAoBp1D,GAEZA,GACA9mC,KAAKywH,iBAAiBt0B,OAAOD,YAAYp1D,GAE7C9mC,KAAK67F,qBAGD60B,EAAA3xH,UAAA88F,kBAAR,WACQ77F,KAAK8/B,UACL9/B,KAAKiwC,oBAAoB56B,MAAMrV,KAAK8/B,SACpC9/B,KAAK8/B,QAAU,OAxDd4wF,EAAuBthG,GAFnC2I,EAAQ,kBAAmB,2BAC3BG,EAAO,gBAAiB,mBAAoB,kBAAmB,wBACnDw4F,GAAb,GAAaJ,EAAAI,wBAAuBA,EAHI,CAAArE,EAAAiE,YAAAjE,EAAAiE,eAAT,CAAAxjF,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCAV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,GAASA,EAAAiE,YAAAjE,EAAAiE,cACxC/hG,QAAQrxB,OAAO,mBAAmB69B,QAC9B,iBACA,SAACsmB,GACG,OAAAA,EAAepkB,MAAM,0CACjBkB,IAAK,oBACL2zB,gBAAgB,EAChBpqB,MACI8nD,IAAK,mBACLhsC,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,eAExB9sC,OACIouC,uBACIv3C,SAAU,sCAGlBqJ,SACI,eACA,kBACA,SACImQ,EACAy6D,GAEAA,EAAgBR,wBAvBL,CAAA9/E,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCCV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,IAAS,SAAAiE,GAmBxC,IAAAK,EAAA,WACI,SAAAA,EACW53F,EACP45B,EACAyjB,EACAm2C,EACAa,GAJOptH,KAAA+4B,SAMPA,EAAO63F,iBAAmB,SAAA39C,GACtBmD,EACI,2FAEI53C,GAAI,eACJ46C,WAAY,0BAGZnG,KAAIA,KAKhBl6C,EAAO83F,yBAA2B,WAC9B,OAAOruH,OAAOi9B,KAAKmB,YAAYw3C,YAGnC,IAAM04C,EAAevE,EAActzF,OAAOe,UAAU,SAAA1gB,GAChDyf,EAAOk6C,KAAO35D,EAAE25D,KAChBl6C,EAAO8zF,UAAYvzG,EAAEuzG,WAAavzG,EAAEuzG,UAAUA,UAC9C9zF,EAAOg4F,OAASz3G,EAAEuzG,WAAavzG,EAAEuzG,UAAUt8G,MAC3CwoB,EAAO0lB,QAAUnlC,EAAEuzG,WAAavzG,EAAEuzG,UAAUpuE,UAGhD1lB,EAAO6W,IAAI,WAAY,WAAM,OAAAkhF,EAAalkF,YAElD,OAlCa+jF,EAA0BvhG,GAPtC8I,EACG,SACA,eACA,eACA,gBACA,oBAESy4F,GAAb,GAAaL,EAAAK,2BAA0BA,EAnBC,CAAAtE,EAAAiE,YAAAjE,EAAAiE,eAAT,CAAAxjF,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCJV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,IAAS,SAAAiE,GACxC,IAAAU,EAAA,oBAAAA,IACIhxH,KAAAs4C,SAAW,KACXt4C,KAAA6sC,YACI,wFACJ7sC,KAAAs3B,SAAU,EACVt3B,KAAAk5C,YAAa,EACbl5C,KAAA03B,WAAa44F,EAAAK,2BACb3wH,KAAAqvC,OACI4jC,KAAM,KAMd,OAHW+9C,EAAA3xH,QAAP,WACI,OAAO,WAAM,WAAI2xH,IAEzBA,EAdA,GAAaV,EAAAU,0BAAyBA,EAetCziG,QACKrxB,OAAO,mBACPy4C,UAAU,mBAAoBq7E,EAA0B3xH,WAlBrB,CAAAgtH,EAAAiE,YAAAjE,EAAAiE,eAAT,CAAAxjF,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCKV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,IAAS,SAAAiE,GAyBxC,IAAAW,EAAA,WAGI,SAAAA,EACIl4F,EACQyzF,GAFZ,IAAAxrF,EAAAhhC,KAEYA,KAAAwsH,oBAERzzF,EAAOwN,YAAc,+BAErBxN,EAAOsvE,KAAO,WACV,GAAKtvE,EAAOm4F,cAAcC,OAA1B,CAIA,IAAM/Q,GACFj6E,WAAYpN,EAAO0L,YACnBqC,OAAQ/N,EAAOk6C,KAAKz0C,GACpB+H,YAAaxN,EAAOwN,aAGxBxN,EAAOk6B,SAAU,EACjBjyB,EAAKwrF,kBACAp0C,WAAWgoC,GACX97E,SAASC,KACN,WAAM,OAAAxL,EAAOq4F,iBACb,SAAA10D,GAAY,OAAC3jC,EAAOg4F,QAAS,IAEhC59D,QAAQ,WAAM,OAACp6B,EAAOk6B,SAAU,MAGzCl6B,EAAOs4F,mCAAqC,SACxCr0D,GAEAjkC,EAAO0L,YAAcu4B,GAGjC,OAnCWi0D,EAAA34F,SAAW,SAAU,qBADnB24F,EAA+B7hG,GAD3CmJ,EAAW,kBAAmB,oCAClB04F,GAAb,GAAaX,EAAAW,gCAA+BA,EAzBJ,CAAA5E,EAAAiE,YAAAjE,EAAAiE,eAAT,CAAAxjF,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCLV,SAAUA,IAAS,SAAAwe,IAAgB,SAAAu/E,GAASA,EAAAiE,YAAAjE,EAAAiE,cASxC,WAII,SAAAgB,EAAoB/E,GAAAvsH,KAAAusH,gBAEb+E,EAAAvyH,UAAAqtC,QAAP,eAAApL,EAAAhhC,KACIA,KAAK8wH,aAAe9wH,KAAKusH,cAActzF,OAAOe,UAAU,SAAA1gB,GACpD0nB,EAAKiyC,KAAO35D,EAAE25D,QAIfq+C,EAAAvyH,UAAA4tC,WAAP,WACI3sC,KAAK8wH,aAAalkF,WAbpB0kF,EAA0BliG,GAN/BqI,EAAU,mBACPE,SAAU,iBACVkV,YACI,mFAEP3U,EAAO,kBACFo5F,GAAN,GAT+B,CAAAxkF,EAAAu/E,WAAAv/E,EAAAu/E,cAAhB,CAAA/9F,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCGAA,UACNC,QAAQrxB,OAAO,YAAY69B,QACvB,iBACA,SAACsmB,GACGA,EACKpkB,MAAM,0BACHkB,IAAK,SACLuJ,MAAQwpB,UAAW,SACnB5O,OACIivE,WAAa1kF,YAAa,yBAGjC5P,MAAM,sBACHkB,IAAK,aACLuJ,MAAQwpB,UAAW,OACnB5O,OACIC,QAAU1V,YAAa,gCAG9B5P,MAAM,sBACHkB,IAAK,aACLuJ,MAAQwpB,UAAW,OACnB5O,OACIivE,WAAa1kF,YAAa,4BAGjC5P,MAAM,sBACHkB,IAAK,aACLuJ,MAAQwpB,UAAW,OACnB5O,OACIivE,WACI1kF,YAAa,sCAIxB5P,MAAM,sBACHyK,MAAQwpB,UAAW,OACnB5O,OACIivE,WAAa1kF,YAAa,+BCtClD,SAAUve,GACNC,QAAQrxB,OAAO,YAAYy4C,UAAU,2BACjC,sBACA,SACA,sBACA,SACI1F,EACAuR,EACA5d,GAEA,IAEI4tF,EAFEC,EAA2B,IAC3BC,EAAiB,EAEnBC,EAAe,EAyBnB,SAASC,IACLJ,EAAgB,KAChBG,EAAe,EAGnB,SAASE,EAAgBC,GAErBN,EAAgBM,IADhBH,EAImBD,GACflvH,OAAOi9B,KAAKmB,YAAYmxF,QAGxBH,IAOoBhuF,EAAoB5lC,IACxC,6BAGAswB,EAAAY,OAAOmM,6BAA4B,GACnCuI,EAAoB5K,MAChB,4BACA,GAEJiX,EAAoBy3C,QAAQ,gCAC5BlmC,EAAOib,GAAG,qBAEVnuC,EAAAY,OAAOmM,6BAA4B,GACnCuI,EAAoB5K,MAAM,4BAA4B,GACtDiX,EAAoBy3C,QAChB,oCAKZ,OACI9xC,KAAA,SACIvG,EACAgK,EACAvD,GAEAuD,EAAG16C,KAAK,gBAAiB,SAACukD,IAtElC,SAAsBA,GAClB,GAAkBA,EAAO8uE,OAAzB,CAKA9uE,EAAMK,iBACNL,EAAM+uE,2BACN/uE,EAAMooD,kBAEN,IAAM4mB,EAAY,IAAIz1F,KAEjB+0F,GAKQU,EAAUtsF,UAAY4rF,EAAc5rF,WAErC6rF,GAA0BG,IACtCC,EAAgBK,IAPZL,EAAgBK,QAXhBN,IAqEIO,CAAajvE,UAtFrC,CAAU50B,WCDAA,UACNC,QAAQrxB,OAAO,YACV69B,QAAQ,iBAAkB,SAACsmB,GACxBA,EACKpkB,MAAM,8BAECkB,IAAK,oBACL2zB,gBAAgB,EAChBpqB,MAAQwpB,UAAW,eACnB5O,OACI6O,UAAYtkB,YAAa,4CAE7B2V,SAAU,SAAU,sBAAuB,SAAChB,EAA6B5d,GAChDA,EAAoB5lC,IAAI,6BAEzCwjD,EAAOib,GAAG,0BCf1C,SAAUnuC,GACNC,QAAQrxB,OAAO,YACV69B,QAAQ,iBAAkB,SAACsmB,GACxBA,EACKpkB,MAAM,wBAECkB,IAAK,gBACLuJ,MAAQwpB,UAAW,0BACnB5O,OACIC,QAAU1V,YAAa,iDAE3B2V,SAAU,SAAU,SAAChB,GACjBlzB,EAAAY,OAAO2O,kBAAkB,yBAAyB,UAZ9E,CAAUvP,WCCV,SAAUA,IAON,WAGI,SAAA8jG,EAAoBrvE,GAAA/iD,KAAA+iD,aACpBqvE,EAAArzH,UAAAqtC,QAAA,eAAApL,EAAAhhC,KAEIA,KAAKqyH,UAAY/jG,EAAAY,OAAO4L,YACnB7B,OACA5f,OAHmB,SAAAC,GAAK,OAAAA,GAAKA,EAAEyhB,QAAUzhB,EAAEyhB,OAAOG,WAIlDvsB,IAAI,SAAA2K,GAAK,OAAAA,EAAEyhB,OAAOG,WAClBlB,UAAU,SAAA1gB,GAAK,OAAA0nB,EAAKsxF,MAAQh5G,KAGrC84G,EAAArzH,UAAA4tC,WAAA,WACQ3sC,KAAKqyH,WACLryH,KAAKqyH,UAAUzlF,UACnB5sC,KAAKqyH,UAAY,MAGdD,EAAArzH,UAAAwzH,WAAP,SAAkBC,GACdlkG,EAAAY,OAAO2O,kBAAkB20F,EAAK90H,MAAO80H,EAAKp3F,SAC1Cp7B,KAAK+iD,WAAWwW,WAAWi5D,EAAK90H,KAAO,YArBzC00H,EAAsBhjG,GAL3BqI,EAAU,YACPE,SAAU,iBACVkV,YAAa,yEAEhB3U,EAAO,eACFk6F,GAAN,GAPJ,CAAU9jG,WCAV,SAAUA,IAAS,SAAA4U,GACFA,EAAAuvF,cAAgB,IAAIn5F,GAAGG,QAEpClL,QACKrxB,OAAO,gBACPmc,OAAO,gBAAiB,WACrB,OAAO,SAAS+rG,EAAesN,GAC3B,YAD2B,IAAAA,OAA2B,GAClDtN,EAAQ,EACD,UACAA,GAAS,GAAKA,GAASsN,EACvB,UAGJ,MAGdr5G,OAAO,UAAW,WACf,OAAO,SAAS7G,EAAKmgH,GACjB,OAAKpkG,QAAQqkG,SAASpgH,IAEP,IAAXmgH,EACO90H,OAAO0P,KAAKiF,GAAK7D,IAAI,SAASjQ,GACjC,OAAO8T,EAAI9T,KAGRb,OAAO0P,KAAKiF,GAAK7D,IAAI,SAASjQ,GACjC,IAAIN,EAAQoU,EAAI9T,GAChB,OAAO6vB,QAAQqkG,SAASx0H,GAClBP,OAAOC,eAAeM,EAAO,QACzBL,YAAY,EACZK,MAAOM,KAETm0H,KAAMn0H,EAAKo0H,OAAQ10H,KAdAoU,KAlBhC,CAAA8b,EAAA4U,eAAA5U,EAAA4U,kBAAnB,CAAU5U,WCCV,SAAUA,IAAS,SAAAykG,GASFA,EAAAC,sBAAwB,IAAI15F,GAAGG,QAkB5C,IAAAw5F,EAAA,WAmBI,SAAAA,EAAoBl6F,GAAA/4B,KAAA+4B,SAdZ/4B,KAAAkzH,gBAAkB,EAGlBlzH,KAAAmzH,WAAa,EAYjBnzH,KAAKozH,aAAepzH,KAAKozH,cAAgB,EACzCpzH,KAAKqzH,aAAerzH,KAAKqzH,cAAgB,EACzCrzH,KAAKszH,aAAetzH,KAAKszH,cAAgB,GACzCtzH,KAAKuzH,YAAcvzH,KAAKuzH,aAAevzH,KAAKuzH,YAAc,EAAIvzH,KAAKuzH,YAAc,EAoJzF,OAjJWN,EAAAl0H,UAAAqtC,QAAP,eAAApL,EAAAhhC,KACIA,KAAKwsC,kBACDxsC,KAAKwzH,qBACLxzH,KAAKkzH,gBAAkBlzH,KAAKwzH,mBAAmB3wH,QAGnD7C,KAAKyzH,cAAczzH,KAAKuzH,aAExBvzH,KAAK0zH,cAAgB1zH,KAAK+4B,OAAOgsD,OAAO,kBAAmB,SAAC9vE,EAAU+vE,GAClE,GAAK/vE,GAAa+vE,GAAahkD,EAAK2yF,oBAApC,CAIA,IAAM/1D,EAAU58B,EAAK4yF,4BAA4B3+G,GAG7C2oD,IAFY58B,EAAK4yF,4BAA4B5uC,IAG7ChkD,EAAK2yF,qBAAsB/1D,QAAOA,QAKvCq1D,EAAAl0H,UAAA4tC,WAAP,WACI3sC,KAAKwtC,oBACLxtC,KAAK0zH,iBAGFT,EAAAl0H,UAAA6kD,WAAP,SAAkBhW,GAIVA,EAAS4lF,oBAAsB5lF,EAAS4lF,mBAAmBj9D,cAC3Dv2D,KAAK6zH,2BACDjmF,EAAS4lF,mBAAmBj9D,aAC5B3oB,EAAS4lF,mBAAmBr5D,eAIhCvsB,EAASkmF,iBAAmBlmF,EAASkmF,gBAAgBv9D,cACrDv2D,KAAK+zH,wBACDnmF,EAASkmF,gBAAgBv9D,aACzB3oB,EAASkmF,gBAAgB35D,gBAK7B84D,EAAAl0H,UAAAytC,gBAAR,eAAAxL,EAAAhhC,KACIA,KAAKg0H,wCAA0CjB,EAAAC,sBAAsBh5F,UAAU,WAC3EgH,EAAKsL,6BAA+BtL,EAAKsL,+BAIzC2mF,EAAAl0H,UAAAyuC,kBAAR,WACQxtC,KAAKg0H,0CACLh0H,KAAKg0H,wCAAwCpnF,UAC7C5sC,KAAKg0H,wCAA0C,OAIhDf,EAAAl0H,UAAAk1H,eAAP,SAAsB3vH,GAClB,OAAIA,EAAQtE,KAAKkzH,iBAA4C,IAAzBlzH,KAAKkzH,iBACrClzH,KAAKk0H,iBACE,MAGJl0H,KAAKwzH,mBAAmBlvH,IAG5B2uH,EAAAl0H,UAAAo1H,UAAP,WACI,OAAOn0H,KAAKkzH,iBAGRD,EAAAl0H,UAAA80H,2BAAR,SAAmCO,EAA0BC,GACrDA,GAA2BD,EAAkBvxH,SAAWwxH,EAAwBxxH,SAChF7C,KAAKmzH,WAAa,EAClBnzH,KAAKs0H,YAAa,EAClBt0H,KAAKu0H,kBAAmB,GAGK,IAA7BH,EAAkBvxH,SAClB7C,KAAKozH,aAAe,GAGxBpzH,KAAKkzH,gBAAkBkB,EAAkBvxH,OAErC7C,KAAKw0H,yBAA2Bx0H,KAAKw0H,0BAA4BJ,EAAkBvxH,SACnF7C,KAAKu0H,kBAAmB,IAIxBtB,EAAAl0H,UAAAg1H,wBAAR,SAAgC/4G,EAAkBy5G,GAC9Cz0H,KAAKw0H,wBAAqC,EAAXx5G,EAE3By5G,GAAYA,IAAaz5G,IACzBhb,KAAKozH,aAAe,EACpBpzH,KAAKs0H,YAAa,GAGlBt0H,KAAKw0H,yBAA2B,GAAKx0H,KAAKw0H,0BAA4Bx0H,KAAKkzH,gBAC3ElzH,KAAKu0H,kBAAmB,EAExBv0H,KAAKu0H,kBAAmB,GAIxBtB,EAAAl0H,UAAA60H,4BAAR,SAAoCtvH,GAChC,OAAOW,KAAK4L,KAAKvM,EAAQtE,KAAKszH,eAG1BL,EAAAl0H,UAAA21H,2BAAR,WACI,OAAOzvH,KAAKM,MAAMvF,KAAKkzH,gBAAkBlzH,KAAKszH,cAAgB,GAGpDL,EAAAl0H,UAAAm1H,eAAd,yGACI,OAAIl0H,KAAKu0H,kBACL,GAGCv0H,KAAKs0H,YAAN,MACIt0H,KAAKmzH,WAAa,IAClBnzH,KAAKu0H,kBAAmB,GAE5Bv0H,KAAKs0H,YAAa,EACZK,EAA8C,EAAvB30H,KAAKkzH,iBAClC,EAAMlzH,KAAK40H,mBACPntF,KAAMznC,KAAK00H,6BACXpB,aAActzH,KAAKszH,wBAFvB12F,EAAAC,OAIA78B,KAAKs0H,YAAa,EAEdK,IAAyB30H,KAAKkzH,iBAC9BlzH,KAAKmzH,8CAKHF,EAAAl0H,UAAA00H,cAAd,SAA4BhsF,iGAClBotF,EAAcptF,EAAOznC,KAAKszH,qCAEzBtzH,KAAKkzH,gBAAkB2B,IAAgB70H,KAAKu0H,kBAC/C,EAAMv0H,KAAKk0H,mBADoD,mBAC/Dt3F,EAAAC,2BAGJ78B,KAAKozH,cAAgB3rF,EAAO,GAAKznC,KAAKszH,uBAzKjCL,EAAqB7jG,GAhBjCqI,EAAU,YACPE,SAAU,gBACVkV,YAAa,oDACbe,UACIwlF,aAAc,KACdC,aAAc,KACdC,aAAc,KACdE,mBAAoB,IACpBM,gBAAiB,IACjBgB,aAAc,IACdnB,oBAAqB,kBACrBiB,kBAAmB,IACnBrB,YAAa,QAGpBr7F,EAAO,WACK+6F,GAAb,GAAaF,EAAAE,sBAAqBA,EA3BnB,CAAA3kG,EAAAykG,SAAAzkG,EAAAykG,YAAnB,CAAUzkG,WCFV,SAAUA,IAAS,SAAAymG,GAEJA,EAAA94F,SAAsC,KA8BjD,IAAM+4F,EAAgB,SAAe31F,4GAef,OAdlBzS,QAAQ4O,MAAM6D,EAAIpD,UACZg5F,EAAqBzyH,OAAQ0yH,GACnCH,EAAA94F,SAAW,IAAIg5F,EAAa51F,EAAIpD,UAE1Bk5F,GACF9lF,MAAO,2CACP+lF,WAAY,OACZC,aAAc,QACdC,YAAa,GAAG/yH,SAAS85B,SAAS5d,OAASlc,SAAS85B,SAASk5F,UAAWhzH,SAAS85B,SAASvqB,MAAQ,+BAClG0jH,OAAQ,iBACRC,SAAU,EACVC,kBAAkB,IAGJ,EAAMX,EAAA94F,SAAS01E,KAAKwjB,kBAAhCQ,EAAY/4F,EAAAC,SAEdjQ,QAAQ4O,MAAM,cACd5O,QAAQ4O,MAAMu5F,EAAA94F,SAASsU,OA9C/B,WACI,IAAMrR,GACF6Q,cAAiB,UAAUglF,EAAA94F,SAASsU,OAGxChU,EAAE+C,KAAKhR,EAAAY,OAAOC,mBAAmB,0BAC7BoQ,SAAU,OACVL,QAASA,EACThxB,OAAO,EACPsxB,QAAS,SAAClmB,GACN,OAAAgV,EAAAoR,SAASxF,OAAMe,KACR3hB,GACHumB,YAAak1F,EAAA94F,SAASsU,UAE9BhgC,MAAO,SAACqlH,EAAOC,EAAYC,GACvB,OAAAxnG,EAAAoR,SAASxF,QACLuF,KAAM,KACNI,YAAa,KACb9E,OAAQ,KACRxqB,OACI7S,KAAM,gBACNoiC,QAAS,YAAW+1F,GAAc,UAAQ,aAAYC,GAAe,UACrEv6G,MAAO,SAyBnB6jB,GAEAqS,YAAY,kBAAAgxD,EAAAzhE,OAAA,qEAEc,gCAAM+zF,EAAA94F,SAAS85F,YAAY,mBAA3BhqF,EAAAlP,QAGdvO,EAAAoR,SAASxF,OAAMe,KACR3M,EAAAoR,SAAS/F,YACZkG,YAAak1F,EAAA94F,SAASsU,SAE1B3jB,QAAQ4O,MAAM,oBAEd5O,QAAQC,KAAK,oDAGjBD,QAAQrc,MAAM,wDAEnB,MAEHqc,QAAQrc,MAAM,kBAAmBolH,aAIzCrnG,EAASY,OAAO4L,YAAY7B,OACnBtqB,IAAI,SAAAsuB,GACD,OAAOA,GAASA,EAAMlC,SAEzBtP,UAAU,SAAA4T,GACP,QAASA,GAAOA,EAAIpD,YAEvBtQ,KAAK,GACLqO,UAAU,SAAAqF,GAAO,OAAA21F,EAAc31F,KAnFzB,CAAA/Q,EAAAymG,eAAAzmG,EAAAymG,kBAAnB,CAAUzmG,WCIV,SAAUA,GAASA,EAAAiD,UAAAjD,EAAAiD,YAWf,WACI,SAAAykG,EACIjzE,EACAhqB,EACA0jB,EACA+E,GAEAzoB,EAAOk9F,oBAAsB,WACzB,OAAOz0E,EAAO9+C,SAAS,sBAG3Bq2B,EAAOm9F,eAAiB,WACpB,OACI10E,EAAO9+C,SAAS,oBAChB8+C,EAAO9+C,SAAS,sBAChB8+C,EAAO9+C,SAAS,mBAChB8+C,EAAO9+C,SAAS,qBAChB8+C,EAAO9+C,SAAS,mBAChB8+C,EAAO9+C,SAAS,oBAET,YACF8+C,EAAO9+C,SAAS,uBAAyB8+C,EAAO9+C,SAAS,wBACvD,aACC,cAGhBq2B,EAAOo9F,gBAAkB,WACrB,QAASr+E,UAAUC,UAAUxgB,MAAM,YAAcugB,UAAUC,UAAUxgB,MAAM,qBAG/EwB,EAAOq9F,eAAiB,WAEpB,IAAMC,EAAK55E,EAAQ3E,UAAUC,WAAa0E,EAAQ3E,UAAUw+E,QAAU75E,EAAQ85E,MAC9E,MACI,2TAA2TtzF,KACvTozF,IAEJ,0kDAA0kDpzF,KACtkDozF,EAAGpzH,OAAO,EAAG,KAOrB,kBAAmBT,SAAQ+5B,EAAEi6F,GAAGC,KAAM,GAE1C1zE,EAAWnT,IAAI,sBAAuB,SAACsT,EAAOC,GAC1C,IAAMuzE,EAAWvzE,GAAWA,EAAQzb,MAAQyb,EAAQzb,KAAKwpB,UACzD3uD,SAAS1C,MAAQ,aAAY62H,GAAY,MAAOA,IAjDtDV,EAAa5mG,GAFlBmJ,EAAW,WAAY,iBACvBL,EAAO,aAAc,SAAU,UAAW,WACrC89F,GAAN,GAXJ,CAAU1nG,WCFV,SAAUA,IAAS,SAAAiD,GAAQA,EAAAolG,QAAAplG,EAAAolG,UAwEvBpoG,QAAQrxB,OAAO,YAAYsxB,QAAQ,uBAC/B,YACA,SAACC,GACG,OAAAA,EACI,uCAEIugB,OAAQ,UACRxQ,GAAI,QAGJ6F,SACI3V,OAAQ,MACR1gB,SAAS,GAEbo+C,WACIjuB,IAAK,0BACLzP,OAAQ,MACR1gB,SAAS,GAEbu+C,cACIpuB,IAAK,0BACLzP,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,YACRxQ,GAAI,QAGZw2B,iBACI72B,IAAK,oCACLzP,OAAQ,SACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,kBACRxQ,GAAI,MACJ4iB,QAAS,aAGjBw1E,iBACIloG,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,WACRxQ,GAAI,KAGZq4F,iBACInoG,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,WACRxQ,GAAI,KAGZs4F,gBACIpoG,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,OACRxQ,GAAI,KAGZsuF,aACIp+F,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,OACRxQ,GAAI,KAGZo2D,gBACIlmE,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,UACRxQ,GAAI,KAGZmwC,eACIjgD,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,SACRxQ,GAAI,KAGZonE,4BACIznE,IAAK,kCACLzP,OAAQ,OACR1gB,SAAS,GAEb2xF,qBACIxhE,IAAK,iCACLzP,OAAQ,OACR1gB,SAAS,GAEbm3F,YACIhnE,IAAK,oBACLzP,OAAQ,SACR1gB,SAAS,EACT2gB,QACI6P,GAAI,QAGZ4mE,aACIjnE,IAAK,2BACLzP,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,UACRxQ,GAAI,aAtLb,CAAAlQ,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCCV,SAAUA,GAASA,EAAAiD,UAAAjD,EAAAiD,YACfhD,QACKrxB,OAAO,YAEP4lD,KACG,aACA,SACA,eACA,SACIC,EACAvB,EACAmR,GAEA5P,EAAWtjB,KAAOj9B,OAAOi9B,KACzBsjB,EAAWvB,OAASA,EACpBuB,EAAW4P,aAAeA,EAC1B5P,EAAWg0E,WAAY,EAEvBh0E,EAAWnT,IACP,oBACA,SACIsT,EACAC,EACAC,EACAC,EACAC,GAEAP,EAAWg0E,WAAY,IAI/Bh0E,EAAWnT,IACP,sBACA,SACIsT,EACAC,EACAC,EACAC,EACAC,GAEAP,EAAWg0E,WAAY,IAI/Bh0E,EAAWnT,IACP,oBACA,SACIsT,EACAC,EACAC,EACAC,EACAC,EACA/yC,GAEAwyC,EAAWg0E,WAAY,IAI/Bh0E,EAAWi0E,UAAY,SAASjyH,GAC5B,IAAIkyH,GAASj3H,KAAKk3H,OAASl3H,MAAMm3H,QACnB,WAAVF,GAAgC,YAAVA,EAClBlyH,GAAoB,mBAAPA,GACbA,IAGJ/E,KAAKo3H,OAAOryH,OAjEpC,CAAUupB,WCLV,SAAUA,GAASA,EAAAiD,UAAAjD,EAAAiD,YA+Bf,WAMI,SAAA8lG,EAAoB71E,EAAqCzoB,GAArC/4B,KAAAwhD,SAAqCxhD,KAAA+4B,SAElDs+F,EAAAt4H,UAAAqtC,QAAP,eAAApL,EAAAhhC,KACIA,KAAK+4B,OAAOgsD,OAAO,WAAM,OAAA/jD,EAAKwgB,OAAOyU,QAAQv4D,MAAM,WAC/CsjC,EAAKs2F,iBAAmBt2F,EAAKu2F,yBAI9BF,EAAAt4H,UAAAy4H,YAAP,SAAmBhoC,GACf,OAAOxvF,KAAKwhD,OAAO9+C,SAAS8sF,EAAIvyD,QAG5Bo6F,EAAAt4H,UAAAw4H,oBAAR,WAEI,IADA,IAAIjzH,EAAQ,EACM8zB,EAAA,EAAAwE,EAAA58B,KAAKmvF,KAAL/2D,EAAAwE,EAAA/5B,OAAAu1B,IAAW,CAAxB,IAAMo3D,EAAG5yD,EAAAxE,GACV,GAAIp4B,KAAKw3H,YAAYhoC,GAAM,OAAOlrF,EAElCA,GAAS,EAGb,OAAOA,GA1BT+yH,EAAiBjoG,GAnBtBqI,EAAU,YACPE,SAAU,YAEVwhB,SAAU,2VAUVvL,UACIuhD,KAAM,IACNyb,SAAU,OAGjB1yE,EAAO,SAAU,WACZm/F,GAAN,GA/BJ,CAAU/oG,WCAV,SAAUA,IAAS,SAAAiD,GAEf,IAAOK,EAAcL,EAAQK,YAS7B6lG,EAAA,WAGI,SAAAA,EAAoB7zF,EAAkDmqC,GAAlD/tE,KAAA4jC,sBAAkD5jC,KAAA+tE,cAF9D/tE,KAAA03H,gBAAkB,qBA6B9B,OAzBWD,EAAA14H,UAAA44H,YAAP,SAAmBl1D,GACf,IAAMprB,GACForB,YAAaA,EACb1G,OAAQv5D,OAAOi9B,KAAKjB,IAGxBx+B,KAAK4jC,oBAAoB5K,MAAMh5B,KAAK43H,SAASp1H,OAAOi9B,KAAKjB,IAAK6Y,IAG3DogF,EAAA14H,UAAA84H,kBAAP,WACI73H,KAAK4jC,oBAAoBrvB,OAAOvU,KAAK43H,SAASp1H,OAAOi9B,KAAKjB,MAGvDi5F,EAAA14H,UAAA+4H,oBAAP,WACI,IAAM/hE,EAAkC/1D,KAAK4jC,oBAAoB5lC,IAAIgC,KAAK43H,SAASp1H,OAAOi9B,KAAKjB,KAC3Fu3B,GACIA,EAAY0M,cAAgB7wC,EAAY4jC,MACxCx1D,KAAK+tE,YAAYxE,oBAKrBkuD,EAAA14H,UAAA64H,SAAR,SAAiB77D,GACb,MAAO,GAAG/7D,KAAK03H,gBAAkB37D,GA5B5B07D,EAAqBroG,GAFjC2I,EAAQ,WAAY,yBACpBG,EAAO,sBAAuB,gBAClBu/F,GAAb,GAAalmG,EAAAkmG,sBAAqBA,EAXnB,CAAAnpG,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCEV,SAAUA,IAAS,SAAAiD,GAAQA,EAAApB,WAAAoB,EAAApB,aAevB,WAiBI,SAAA4nG,EACY9P,EACAlhB,EACA/jD,GAFAhjD,KAAAioH,iBACAjoH,KAAA+mG,sBACA/mG,KAAAgjD,YAbLhjD,KAAAy+C,SAAU,EAEVz+C,KAAAg4H,mBAAoB,EACpBh4H,KAAAi4H,qBAAsB,EACrBj4H,KAAAk4H,iBAAkB,EAClBl4H,KAAAm4H,mBAAoB,EAWrBJ,EAAAh5H,UAAAqtC,QAAP,eAAApL,EAAAhhC,KACIA,KAAKy+C,SAAU,EACfz+C,KAAKo4H,eAAgB,EAChBp4H,KAAKo4H,gBACNp4H,KAAKq4H,qBACD,sGAERr4H,KAAKioH,eACAjqH,IAAIgC,KAAKihD,OAAOziB,IAChB+F,KAAK,SAAAuxD,GAEEA,QAA0Bx2F,IAAfw2F,EAAQt3D,IAAkBwC,EAAKs3F,WAAWxiC,KAE5D3iC,QAAQ,WAAM,OAACnyB,EAAKyd,SAAU,IAEnCz+C,KAAKu4H,0CAGFR,EAAAh5H,UAAAy5H,UAAP,WACI,OAAOh2H,OAAOu4B,OAAO19B,QAAQoqH,SAASrsF,SAGnC28F,EAAAh5H,UAAAuoH,UAAP,WACI,OAAOtnH,KAAKo4H,eAAiBp4H,KAAKioH,eAAeX,aAG9CyQ,EAAAh5H,UAAA05H,kBAAP,WACI,OAAOz4H,KAAKioH,eAAeF,cAAc/nH,KAAK81F,UAG3CiiC,EAAAh5H,UAAA25H,kBAAP,WACI,OAAO14H,KAAKk4H,iBAGTH,EAAAh5H,UAAA45H,oBAAP,WACI,OAAO34H,KAAKm4H,mBAGTJ,EAAAh5H,UAAAigG,SAAP,WACI,OAAOh/F,KAAK81F,SAAW91F,KAAKioH,eAAejpB,SAASh/F,KAAK81F,UAGtDiiC,EAAAh5H,UAAA8oH,WAAP,WACI,OAAO7nH,KAAK81F,SAAW91F,KAAKioH,eAAeJ,WAAW7nH,KAAK81F,UAGxDiiC,EAAAh5H,UAAA65H,iBAAP,WACI,OAAQ54H,KAAKo4H,iBAAmBp4H,KAAKq4H,sBAGlCN,EAAAh5H,UAAA85H,UAAP,WACI,OAAI74H,KAAK81F,QAAQtc,WAAax5E,KAAK81F,QAAQgyB,UAAkB,0BACzD9nH,KAAK81F,QAAQtc,UAAkB,WAC/Bx5E,KAAK81F,QAAQgyB,UAAkB,cAC/B9nH,KAAKg/F,WAAmB,SACrB,eAGJ+4B,EAAAh5H,UAAA+5H,cAAP,eAAA93F,EAAAhhC,KACIA,KAAKk4H,iBAAkB,EAEvB,IAAM3tD,EACFvqE,KAAKihD,QACLjhD,KAAKihD,OAAOupB,gBACZxqE,KAAKihD,OAAOupB,eAAeC,gBAC3BzqE,KAAKihD,OAAOupB,eAAeC,eAAe5nE,QAC1C7C,KAAKihD,OAAOupB,eAAeC,eAAe,GAAGF,MACjDvqE,KAAKioH,eACAxpH,OAAOuB,KAAKihD,OAAOziB,GAAI+rC,GACvBhmC,KAAK,SAAAm4B,GACF17B,EAAKs3F,WAAW57D,EAASh1B,MACzB1G,EAAK+3F,cAER/uF,MAAM,SAAA3oC,GAAK,OAAA2/B,EAAKg4F,mBAChB7lE,QAAQ,WAAM,OAACnyB,EAAKk3F,iBAAkB,KAGxCH,EAAAh5H,UAAAioH,cAAP,eAAAhmF,EAAAhhC,KACIA,KAAKm4H,mBAAoB,EACzBn4H,KAAKioH,eACAjB,cAAchnH,KAAK81F,QAAQvrB,OAC3BhmC,KAAK,WAAM,OAAAvD,EAAKi4F,gBAChBjvF,MAAM,WACHhJ,EAAKk4F,oBAER/lE,QAAQ,WAAM,OAACnyB,EAAKm3F,mBAAoB,KAG1CJ,EAAAh5H,UAAAo6H,OAAP,WACI,OACIn5H,KAAKy+C,SACLz+C,KAAKg4H,mBACLh4H,KAAKi4H,qBACLj4H,KAAKk4H,iBACLl4H,KAAKm4H,mBAINJ,EAAAh5H,UAAAq6H,gBAAP,WACI,OAAOp5H,KAAK81F,UAAY91F,KAAK81F,QAAQgyB,WAAatlH,OAAOi9B,KAAKmB,YAAYy4F,cAGvEtB,EAAAh5H,UAAAs6H,aAAP,eAAAr4F,EAAAhhC,KACIA,KAAKg4H,mBAAoB,EACzBh4H,KAAKioH,eACAnB,MAAM9mH,KAAK81F,QAAQzpC,UACnB9nB,KAAK,SAAA+0F,GAAO,OAAAt4F,EAAKs3F,WAAWgB,KAC5BnmE,QAAQ,WAAM,OAACnyB,EAAKg3F,mBAAoB,KAG1CD,EAAAh5H,UAAAw6H,kBAAP,WACI,OAAOv5H,KAAK81F,SAAW91F,KAAK81F,QAAQgyB,WAAatlH,OAAOi9B,KAAKmB,YAAYy4F,cAGtEtB,EAAAh5H,UAAAy6H,eAAP,eAAAx4F,EAAAhhC,KACIA,KAAKi4H,qBAAsB,EAC3Bj4H,KAAKioH,eACAlB,QAAQ/mH,KAAK81F,QAAQzpC,UACrB9nB,KAAK,SAAA+0F,GAAO,OAAAt4F,EAAKs3F,WAAWgB,KAC5BnmE,QAAQ,WAAM,OAACnyB,EAAKi3F,qBAAsB,KAG5CF,EAAAh5H,UAAAooH,cAAP,SAAqB96D,GAArB,IAAArrB,EAAAhhC,KACU8pH,EAAS9pH,KAAKgjD,UACf+P,UACAlzD,MAAM,uBACNuiC,YAAY,sDACZylD,UAAU,WACVC,GAAG,MACHthC,OAAO,OACPrI,MAAM,aAEXn+C,KAAKgjD,UAAUvhD,KAAKqoH,GAAQvlF,KAAK,WAC7B,OAAAvD,EAAKinF,eACA9/E,OAAOkkB,GACP9nB,KAAK,WACFvD,EAAK80D,QAAU,KACf90D,EAAK+lE,oBAAoBvnE,QAAQ,mCAEpCwK,MAAM,SAAAjqC,GAAS,OAAAihC,EAAK+lE,oBAAoBx2F,MAAM,oDAInDwnH,EAAAh5H,UAAAu5H,WAAR,SAAmBxiC,GACf91F,KAAK81F,QAAUA,GAGXiiC,EAAAh5H,UAAAw5H,uCAAR,WACQ/1H,QACAA,OAAOu4B,QACPv4B,OAAOu4B,OAAO19B,SACdmF,OAAOu4B,OAAO19B,QAAQoqH,UACtBjlH,OAAOu4B,OAAO19B,QAAQoqH,SAASgS,oCAC3Bz5H,KAAKy5H,oCAAsCj3H,OAAOu4B,OAAO19B,QAAQoqH,SAASgS,oCAG9Ez5H,KAAKy5H,oCAAsC,gBAnLjD1B,EAA2B3oG,GAZhCqI,EAAU,mBACPE,SAAU,uBACVkV,YAAa,wEACbe,UACIqT,OAAQ,IACR83E,UAAW,IACXC,eAAgB,IAChBC,YAAa,IACbC,gBAAiB,OAGxBhhG,EAAO,iBAAkB,sBAAuB,cAC3C6/F,GAAN,GAfe,CAAAzpG,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCFV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA8mE,gBAAA9mE,EAAA8mE,kBAyBvB9pE,QAAQrxB,OAAO,YAAYsxB,QAAQ,wBAC/B,YACA,SAACC,GACG,OAAOA,EACH,kDAGIirG,aACIhrG,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,WAAYxQ,GAAI,KAEtCm7F,UACIjrG,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,WAAYihB,UAAW,QAASzxB,GAAI,KAE1D77B,QACI+rB,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,WAAYihB,UAAW,SAAUzxB,GAAI,QAE3DrB,SACIzO,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB6pE,MACI35E,OAAQ,OACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAClB+gB,iBAAkB,SAACroB,GACf,OAAOra,KAAKC,UAAUoa,KAG9BqoF,UACIrhG,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUxQ,GAAI,QAEpC82D,aACI5mE,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,YAAaxQ,GAAI,QAEvCy7E,cACI2f,OAAQ,MACR5rH,SAAS,EACT2gB,QAAUqgB,OAAQ,WAAYxQ,GAAI,aAzEvC,CAAAlQ,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCOV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA8mE,GAWVA,EAAAwhC,0BAA4B,IAAIvgG,GAAGG,QAGnC4+D,EAAAyhC,0BAA4B,IAAIxgG,GAAGG,QAGnC4+D,EAAA0hC,0BAA4B,IAAIzgG,GAAGG,QAIhDlI,EAAQ63B,qBAAqB,WACzB7sB,EAAEisB,WAAWwxE,gBAAgBlwE,OAAOxjB,QAAU,SAAAuzC,GAC1Cwe,EAAAwhC,0BAA0B3/F,OAAO2/C,IAErCt9C,EAAEisB,WAAWwxE,gBAAgBlwE,OAAOmwE,iBAAmB,SAAApgD,GACnDwe,EAAAyhC,0BAA0B5/F,OAAO2/C,IAErCt9C,EAAEisB,WAAWwxE,gBAAgBlwE,OAAOowE,QAAU,SAAArgD,GAC1Cwe,EAAA0hC,0BAA0B7/F,OAAO2/C,MA7BlB,CAAAtoD,EAAA8mE,gBAAA9mE,EAAA8mE,mBAAR,CAAA/pE,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCPV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA8mE,gBAAA9mE,EAAA8mE,kBAYvB9pE,QAAQrxB,OAAO,YAAYsxB,QAAQ,8BAC/B,YACA,SAACC,GACG,OAAOA,EACH,uCAGI4V,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB07E,oBACIxrF,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUxQ,GAAI,UA3BrC,CAAAlQ,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCEV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA8mE,IAOvB,WAUI,SAAA8hC,EACYhlC,EACAvxD,GADA5jC,KAAAm1F,uBACAn1F,KAAA4jC,sBAXL5jC,KAAAu1F,iBACAv1F,KAAAo6H,cAAe,EAGdp6H,KAAAq6H,UAAY,8BAUPF,EAAAp7H,UAAAqtC,QAAb,yGAII,OAHMkuF,EAAat6H,KAAK4jC,oBAAoB5lC,IAAIgC,KAAKq6H,cACrCr6H,KAAKu6H,WAAa,IAAI99F,KAAK69F,KAE3C,EAAMt6H,KAAKo1F,mCAAXx4D,EAAAC,OACA78B,KAAKwsC,4BAGF2tF,EAAAp7H,UAAA4tC,WAAP,WACI3sC,KAAKwtC,qBAGF2sF,EAAAp7H,UAAAy7H,YAAP,WACIx6H,KAAKo6H,cAAgBp6H,KAAKo6H,aACtBp6H,KAAKo6H,aACLp6H,KAAK4jC,oBAAoB5K,MAAMh5B,KAAKq6H,UAAW59F,KAAKC,OACnD18B,KAAKu6H,WAAa,IAAI99F,MAGxB09F,EAAAp7H,UAAA07H,eAAP,WACQz6H,KAAKo6H,cAAcp6H,KAAKw6H,eAGzBL,EAAAp7H,UAAA27H,cAAP,SAAqB/yB,GACjB,QAAK3nG,KAAKu6H,YAGN,IAAI99F,KAAKkrE,EAAarhE,SAASV,UAC/B5lC,KAAKu6H,WAAW30F,WAIjBu0F,EAAAp7H,UAAA47H,wBAAP,eAAA35F,EAAAhhC,KACI,OAAKA,KAAKu1F,eAAkBv1F,KAAKu1F,cAAc1yF,OAEvC7C,KAAKu6H,WAEPv6H,KAAKu1F,cAAcl8E,OAAO,SAAAC,GAAK,OAAC0nB,EAAK05F,cAAcphH,KAAIzW,OADvD7C,KAAKu1F,cAAc1yF,OAHqC,GAOpDs3H,EAAAp7H,UAAAq2F,kBAAd,yGACmB,SAAMp1F,KAAKm1F,qBAAqBukC,aAC3CjyF,KAAM,EACNpC,SAAU,KACXf,wBAHG+R,EAASzZ,EAAAC,SAIDwZ,EAAOxwC,QAAO7F,KAAKu1F,cAAgBl/C,EAAOxwC,iBAGpDs0H,EAAAp7H,UAAAytC,gBAAR,eAAAxL,EAAAhhC,KAUIA,KAAK46H,oBAAsBviC,EAAAwhC,0BACtBxgH,OAVyB,SAACC,GAC3B,OAAAA,KACEA,EAAE0uF,YAAc1uF,EAAE0uF,UAAUnlG,WAC5ByW,EAAE2uF,qBAAuB3uF,EAAE2uF,mBAAmBplG,UAQ/CwW,OAPyB,SAACC,GAC3B,OAAAA,KACEA,EAAE6uF,WAAa7uF,EAAE6uF,UAAY,IAAI1rE,SACjCnjB,EAAEsuF,SAAWtuF,EAAEsuF,QAAU,IAAInrE,QAK9BzC,UAAU,SAAA2tE,GAAgB,OAAA3mE,EAAK65F,gBAAgBlzB,KAEpD3nG,KAAK86H,qBAAuBziC,EAAAyhC,0BAA0B9/F,UAClD,SAAA2tE,GAAgB,OAAA3mE,EAAKo0D,sBAEzBp1F,KAAK+6H,oBAAsB1iC,EAAA0hC,0BAA0B//F,UACjD,SAAA2tE,GAAgB,OAAA3mE,EAAKo0D,uBAIrB+kC,EAAAp7H,UAAAyuC,kBAAR,WACQxtC,KAAK46H,sBACL56H,KAAK46H,oBAAoBhuF,UACzB5sC,KAAK46H,oBAAsB,MAG3B56H,KAAK86H,uBACL96H,KAAK86H,qBAAqBluF,UAC1B5sC,KAAK86H,qBAAuB,MAG5B96H,KAAK+6H,sBACL/6H,KAAK+6H,oBAAoBnuF,UACzB5sC,KAAK+6H,oBAAsB,OAI3BZ,EAAAp7H,UAAA87H,gBAAR,SAAwBlzB,GACpB3nG,KAAKu1F,eAAiBoS,GAAYz/E,OAAKloB,KAAKu1F,gBAxG9C4kC,EAA0B/qG,GAN/BqI,EAAU,YACPE,SAAU,qBACVkV,YACI,6EAEP3U,EAAO,uBAAwB,wBAC1BiiG,GAAN,GAPuB,CAAA5oG,EAAA8mE,gBAAA9mE,EAAA8mE,mBAAR,CAAA/pE,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCFV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA8mE,gBAAA9mE,EAAA8mE,kBAEvB,oBAAA2iC,KACWA,EAAAj8H,UAAAiwB,UAAP,SAAiB0pB,GACb,OAAOA,EACDA,EAAKphB,QACD,UACA,0CAEJ,IAPR0jG,EAAe5rG,GADpBC,EAAK,WAAY,cACZ2rG,GAAN,GAFe,CAAA1sG,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA8mE,gBAAA9mE,EAAA8mE,kBAEvB,oBAAA4iC,KACWA,EAAAl8H,UAAAiwB,UAAP,SAAiB0pB,GACb,OAAOA,EACDA,EAAKphB,QAAQ,gCAAiC,IAC9C,IAJR2jG,EAA0B7rG,GAD/BC,EAAK,WAAY,yBACZ4rG,GAAN,GAFe,CAAA3sG,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAAikC,OAAAjkC,EAAAikC,SAavBjnC,QAAQrxB,OAAO,QAAQsxB,QAAQ,sBAC3B,YACA,SAAAC,GACI,OAAAA,EAAU,0BAA2B,MACjCzwB,KACI0wB,OAAQ,MACR1gB,SAAS,GAEbyG,QACIia,OAAQ,MACR1gB,SAAS,QAvBV,CAAAsgB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAA+wC,IAEf,oBAAA67D,KACWA,EAAAn8H,UAAAiwB,UAAP,SAAiBmsG,GACb,OAAO97D,EAAAG,iBAAiB27D,IAF1BD,EAAsB9rG,GAD3BC,EAAK,WAAY,qBACZ6rG,GAAN,GAFe,CAAA5sG,EAAA+wC,2BAAA/wC,EAAA+wC,8BAAnB,CAAU/wC,WCAV,SAAUA,GAASA,EAAA+wC,2BAAA/wC,EAAA+wC,6BA2Cf9wC,QAAQrxB,OAAO,QAAQsxB,QAAQ,gBAC3B,YACA,SAAAC,GACI,IAAMglC,EAAY,0BACZ2nE,EAAuB,yCAI7B,OAAO3sG,EACH,kEAGI4V,SACIlG,IAAK,8BACLzP,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,gBAAiBxQ,GAAI,QAE3CwpC,iBACI7pC,IAAKs1B,EACL/kC,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,kBAEtBqsF,oBACIl9F,IAAKs1B,EACL/kC,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,oBAEtB66B,UACI1rC,IA1Be,qCA2BfzP,OAAQ,OACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,gBACRihB,UAAW,YAEfF,iBAAkB,SAACroB,GACf,OAAOra,KAAKC,UAAUoa,KAG9B8hC,OACIrrC,IArC2B,mDAsC3BzP,OAAQ,OACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,gBACRihB,UAAW,WACXqrE,aAAc,UAGtBtxD,QACI7rC,IA/C2B,mDAgD3BzP,OAAQ,OACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,gBACRihB,UAAW,WACXqrE,aAAc,WAGtBhzD,yBACInqC,IA1De,qCA2DfzP,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,gBACRihB,UAAW,YAGnBoY,wBACIlqC,IAnEe,qCAoEfzP,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,gBACRihB,UAAW,WAGnB4Y,QACI1qC,IAAK,mDACLzP,OAAQ,OACR1gB,SAAS,EACT2gB,QACI6P,GAAI,QAGZoJ,QACIzJ,IAAKi9F,EACL1sG,OAAQ,OACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,gBACRxQ,GAAI,MACJyxB,UAAW,WAGnBkX,aACIz4C,OAAQ,OACRyP,IAAK,iDACLnwB,SAAS,EACT2gB,QACI6P,GAAI,OAERuxB,iBAAkB,SAACroB,GACf,OAAOra,KAAKC,UAAUoa,KAG9BwhC,OACI/qC,IAAKi9F,EACL1sG,OAAQ,OACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,gBACRxQ,GAAI,MACJyxB,UAAW,UAGnBqZ,QACInrC,IAAKi9F,EACL1sG,OAAQ,OACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,gBACRxQ,GAAI,MACJyxB,UAAW,WAGnBmZ,QACIjrC,IAAKi9F,EACL1sG,OAAQ,OACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,gBACRxQ,GAAI,MACJyxB,UAAW,WAGnBya,cACIvsC,IAAK,2DACLzP,OAAQ,MACR1gB,SAAS,EACT2gB,QACI6P,GAAI,MACJmsC,WAAY,gBAGpBC,gBACIzsC,IAAK,gDACLzP,OAAQ,SACR1gB,SAAS,EACT2gB,QACI6P,GAAI,QAGZ+8F,iBACIp9F,IAAKs1B,EACL/kC,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,2BA5MpC,CAAU1gB,WCAV,SAAUA,IAAS,SAAA+wC,GAOf,IAAMm8D,GAA+B,IAAK,WACpCC,GAAgC,IAAK,YACrCC,GAA8B,IAAK,UACnCC,GAA2B,IAAK,OAChCC,GAA6B,IAAK,SAE3Bv8D,EAAAO,sBAAwB,SAACi8D,GAClC,OAAOL,EAA4Bj4G,KAAK,SAAAjK,GAAK,OAAAA,GAAKuiH,KAGzCx8D,EAAAS,uBAAyB,SAAC+7D,GACnC,OAAOJ,EAA6Bl4G,KAAK,SAAAjK,GAAK,OAAAA,GAAKuiH,KAG1Cx8D,EAAAW,qBAAuB,SAAC67D,GACjC,OAAOH,EAA2Bn4G,KAAK,SAAAjK,GAAK,OAAAA,GAAKuiH,KAGxCx8D,EAAAa,kBAAoB,SAAC27D,GAC9B,OAAOF,EAAwBp4G,KAAK,SAAAjK,GAAK,OAAAA,GAAKuiH,KAGrCx8D,EAAAe,oBAAsB,SAACy7D,GAChC,OAAOD,EAA0Br4G,KAAK,SAAAjK,GAAK,OAAAA,GAAKuiH,KAGvCx8D,EAAAiB,0BAA4B,SAACu7D,GACtC,OAAOx8D,EAAAW,qBAAqB67D,IAAuBx8D,EAAAa,kBAAkB27D,IAG5Dx8D,EAAAmB,yBAA2B,SAACq7D,GACrC,OAAOx8D,EAAAa,kBAAkB27D,IAAuBx8D,EAAAe,oBAAoBy7D,IAG3Dx8D,EAAAy8D,oCAAsC,SAACD,GAChD,OAAOx8D,EAAAO,sBAAsBi8D,IAAuBx8D,EAAAe,oBAAoBy7D,IAG5E,IAAME,GAAoB,IAAK,OACzBC,GAAqB,IAAK,QAC1BC,GAA0B,IAAK,aAExB58D,EAAA68D,6BAA+B,SAACC,GACzC,OAAOJ,EAAiBx4G,KAAK,SAAAjK,GAAK,OAAAA,GAAK6iH,KAG9B98D,EAAA+8D,8BAAgC,SAACD,GAC1C,OAAOH,EAAkBz4G,KAAK,SAAAjK,GAAK,OAAAA,GAAK6iH,KAG/B98D,EAAAg9D,mCAAqC,SAACF,GAC/C,OAAOF,EAAuB14G,KAAK,SAAAjK,GAAK,OAAAA,GAAK6iH,KAGpC98D,EAAAi9D,wCAA0C,SAACH,GACpD,OACIJ,EAAiBx4G,KAAK,SAAAjK,GAAK,OAAAA,GAAK6iH,KAChCF,EAAuB14G,KAAK,SAAAjK,GAAK,OAAAA,GAAK6iH,KAIjC98D,EAAAk9D,kBAAoB,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAE1El9D,EAAAm9D,UAAY,WAIrB,IAAMC,GACFC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,KAAM,MAcV,OAVIC,QAAS,SAAChuF,GACN,IAAIiuF,EAAwBjuF,EAK5B,OAJAiwB,EAAAk9D,iBAAiBxoH,QAAQ,SAACupH,EAAyBh5H,GAC3C8qC,EAAMtsC,QAAQw6H,IAAoB,IAClCD,EAAgBjuF,EAAM9X,QAAQgmG,EAAiBb,EAAmBa,OAEnED,IAxBM,GAtEV,CAAA/uG,EAAA+wC,2BAAA/wC,EAAA+wC,8BAAnB,CAAU/wC,WCAV,SAAUA,IAAS,SAAA+wC,IAEf,oBAAAk+D,KACWA,EAAAx+H,UAAAiwB,UAAP,SAAiB0xC,GACb,QAAKA,GAEErB,EAAAa,kBAAkBQ,EAAa9gC,SAJxC29F,EAAuBnuG,GAD5BC,EAAK,WAAY,sBACZkuG,GAAN,GAFe,CAAAjvG,EAAA+wC,2BAAA/wC,EAAA+wC,8BAAnB,CAAU/wC,WCEV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAikC,GAYvB,IAAAgoE,EAAA,WAEI,SAAAA,EACYh8E,EACAmkB,EACAoI,GAFA/tE,KAAAwhD,SACAxhD,KAAA2lE,YACA3lE,KAAA+tE,cA0ChB,OAvCWyvD,EAAAz+H,UAAA0+H,QAAP,WACI,OAAQz9H,KAAK09H,WAAWC,UACpB,IAAK,yBACL,IAAK,aACL,IAAK,aACD,OAAO,EAEf,OAAO,GAGJH,EAAAz+H,UAAAg2D,QAAP,WACI,MAAoC,eAA7B/0D,KAAK09H,WAAWC,UAGpBH,EAAAz+H,UAAA6+H,QAAP,WACI,MAAoC,cAA7B59H,KAAK09H,WAAWC,UAGpBH,EAAAz+H,UAAA8+H,YAAP,WACI,OAAO79H,KAAK09H,WAAWC,UAGpBH,EAAAz+H,UAAA++H,OAAP,WACI,OAAQ99H,KAAK+0D,YAAc/0D,KAAK49H,YAAc59H,KAAKy9H,WAGhDD,EAAAz+H,UAAAg/H,YAAP,WACI,OAAOzvG,EAASY,OAAOC,mBACnB,sBAAsBnvB,KAAK09H,WAAWM,kBAIvCR,EAAAz+H,UAAAk/H,eAAP,WACI,OAAUj+H,KAAK+9H,cAAa,oBAGzBP,EAAAz+H,UAAAm/H,sBAAP,WACI,OAAOl+H,KAAK09H,WAAWvqD,UAAY,WA7C9BqqD,EAAmBpuG,GAR/BqI,EAAU,QACPE,SAAU,kBACVkV,YAAa,oDACbe,UACI8vF,WAAY,OAGnBxlG,EAAO,SAAU,YAAa,gBAClBslG,GAAb,GAAahoE,EAAAgoE,oBAAmBA,EAZT,CAAAjsG,EAAAikC,OAAAjkC,EAAAikC,UAAR,CAAAlnC,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCCV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAikC,GAEvB,IAAOopC,EAAgBtwE,EAASwe,gBAAgBs0B,aAAaC,WAAW1tC,aAAairE,cAO9Er/B,EAAoBjxC,EAAS+wC,yBAAyBE,kBACtDs2B,EAAoBvnE,EAASwe,gBAAgBs0B,aAAay0B,kBAiBjEsoC,EAAA,WAkBI,SAAAA,EACY38E,EACAmkB,EACAoI,EACAsI,EACArzB,EACA/S,EACAkhD,EACA3mC,GARZ,IAAAxpB,EAAAhhC,KACYA,KAAAwhD,SACAxhD,KAAA2lE,YACA3lE,KAAA+tE,cACA/tE,KAAAq2E,8BACAr2E,KAAAgjD,YACAhjD,KAAAiwC,sBACAjwC,KAAAmxF,YACAnxF,KAAAwqD,iBAxBZxqD,KAAA6lE,iBACA7lE,KAAA8lE,2BACA9lE,KAAAo+H,oBAAqB,EAKdp+H,KAAAq+H,qBAAsB,EAyFtBr+H,KAAAs+H,aAAe,SAAC59D,GACf1/B,EAAKu9F,0BAA0B79D,IAEnC1/B,EAAK+sC,YAAY9E,mBAAmBvI,EAAaliC,KAG9Cx+B,KAAAmpE,eAAiB,SAACzI,GACjB1/B,EAAKu9F,0BAA0B79D,IAEnC1/B,EAAK+sC,YAAY5E,eAAezI,EAAaliC,KAG1Cx+B,KAAA0qE,aAAe,SAAChK,EAAgCzf,GAC9Cyf,GAAiBzf,GAAUA,EAAOziB,KAAOkiC,EAAaC,SAASniC,IAEpEwC,EAAK+sC,YAAYn4B,KAAK8qB,EAAaliC,GAAIyiB,IAGpCjhD,KAAA4qE,eAAiB,SAAClK,IAChBA,GAAgBA,EAAamM,aAAe7rC,EAAKu9F,0BAA0B79D,IAEhF1/B,EAAK+sC,YAAYnD,eAAelK,EAAaliC,KA2D1Cx+B,KAAAw+H,UAAY,SAAC99D,GAChB1/B,EAAKy9F,4BAA8B,MA4ChCz+H,KAAAgpE,kBAAoB,SAACxqC,GACxBwC,EAAK+sC,YAAY1E,iBAAiB7qC,IAmE9Bx+B,KAAAu+H,0BAA4B,SAAC79D,GACjC,OAAApyC,EAAS+wC,yBAAyBa,kBAAkBQ,EAAa9gC,SAxQjE5/B,KAAK0+H,eAAiB7oC,EAAkB58D,OACnCtqB,IAAI,SAAAzP,GAAK,OAAAA,GAAKA,EAAE+2F,UAAY/2F,EAAE+2F,SAASh1C,QAAU/hD,EAAE+2F,SAASh1C,SAC5D5nC,OAAO,SAAA4nC,GAAU,OAAW,OAAXA,IACjB/nB,uBACAc,UAAU,SAAAinB,GACPjgB,EAAKigB,OAASA,IA8Q9B,OA1QWk9E,EAAAp/H,UAAAqtC,QAAP,eAAApL,EAAAhhC,KAIIA,KAAK2+H,qBAAuB3+H,KAAK2lE,UAAU1sC,OACtC5f,OAJoB,SAAC4jB,GAAqB,SAAGA,IAASA,EAAM4oC,iBAK5D3sC,uBACAc,UAAU,SAAA96B,GACP8hC,EAAK6kC,cAAgB3mE,EAAE2mE,cAAcxsD,OAAO,SAAAC,GAAK,QAAEA,EAAEklB,KACrDwC,EAAK8kC,wBAA0B5mE,EAAE4mE,0BAGzC9lE,KAAK4+H,2BAA6B5+H,KAAK2lE,UAAU1sC,OAC5CtqB,IAAI,SAAA2K,GAAK,OAAAA,GAAKA,EAAE6sD,WAChBjtC,uBACAc,UAAU,SAAAqsC,GACFA,GAAkBA,IAAmBrlC,EAAK69F,uBAC3C79F,EAAK89F,yBAA2B99F,EAAK69F,sBAEzC79F,EAAK69F,qBAAuBx4D,KAIjC83D,EAAAp/H,UAAAggI,qBAAP,WACI,OAAO/+H,KAAK6lE,cAAcxsD,OAAO,SAAAC,GAAK,OAAAA,EAAEozD,UAAYpzD,EAAEozD,SAASluC,MAG5D2/F,EAAAp/H,UAAA4tC,WAAP,WACQ3sC,KAAK0+H,iBACL1+H,KAAK0+H,eAAe9xF,UACpB5sC,KAAK0+H,eAAiB,MAGtB1+H,KAAK2+H,uBACL3+H,KAAK2+H,qBAAqB/xF,UAC1B5sC,KAAK2+H,qBAAuB,MAG5B3+H,KAAK4+H,6BACL5+H,KAAK4+H,2BAA2BhyF,UAChC5sC,KAAK4+H,2BAA6B,OAInCT,EAAAp/H,UAAAigI,mBAAP,SAA0Bt+D,GACtB,GAAI1gE,KAAK6+H,uBAAyBn+D,EAAaliC,GAAI,OAAO,EAE1D,IAAM4nC,EAAQpmE,KAAK8lE,wBAAwBxiE,KAAK,SAAApE,GAAK,OAAAA,GAAKA,EAAEs/B,KAAOkiC,EAAaliC,KAC1E8nC,EAAeF,EAAQA,EAAME,aAAe,IAAI7pC,KAAK,KAAM,EAAG,GAE9DwiG,EACFv+D,EAAa1gB,UACb0gB,EAAa1gB,SAAS3mC,OAClB,SAAAymB,GAAW,OAAAA,EAAQ0nC,YAAcjI,EAAkBkI,YAAc3nC,EAAQytC,OAASjH,IAG1F,OAAK24D,EAEEA,EAAwBp8H,OAFM,GA6BlCs7H,EAAAp/H,UAAAmgI,eAAP,SAAsBx+D,GAAtB,IAAA1/B,EAAAhhC,KACUihD,GACF0pB,WAAY3qE,KAAKmxF,UACjB5mB,MAAO7J,EAAaC,SAAS4J,MAC7B1J,UAAWH,EAAaC,SAASE,UACjC5M,OAAQ,KACRyV,UAAW,GACX5I,SAAUJ,EAAaC,SAASG,SAChC9pB,YAAa,GACbmoF,WAAY,KACZC,YAAap/H,KAAKmxF,WAGtBnxF,KAAKgjD,UACAvhD,MACG03C,SAAU,oDACVmL,YAAa,KACbC,qBAAqB,EACrB86E,eAAe,EACf/sE,QAAUrR,OAAMA,GAChBvpB,YACI,SACA,SACA,SAACqB,EAAQkoB,GACLloB,EAAOkoB,OAASA,MAI3B1c,KAAK,SAACo8B,GACH,IAAM2+D,EACF,sGACC3+D,EAKL3/B,EAAKwpB,eACAnmB,SAAU7F,GAAImiC,EAAStU,WACvB/nB,SAASC,KAAK,SAAC0c,GACZjgB,EAAK+sC,YAAYn4B,KAAK8qB,EAAaliC,GAAIyiB,KAE1CjX,MAAM,WACHhJ,EAAKiP,oBAAoB1/B,MAAM+uH,KAVnCt+F,EAAKiP,oBAAoB1/B,MAAM+uH,MAexCnB,EAAAp/H,UAAA0uF,SAAP,SAAgB/sB,EAAgCyqC,GAC5CA,EAAOG,kBAEPtrG,KAAKo+H,mBAAqBp+H,KAAKwhD,OAAOyU,QAAQv4D,KAAKoF,QAAQ,kCAAoC,EAC/F9C,KAAKy+H,4BAA8B/9D,EAAaliC,IAS7C2/F,EAAAp/H,UAAAwgI,WAAP,SAAkB7+D,EAAgCyqC,GAC1CnrG,KAAKy+H,8BAAgC/9D,EAAaliC,GAAIx+B,KAAKw+H,UAAU99D,GACpE1gE,KAAKytF,SAAS/sB,EAAcyqC,IAG9BgzB,EAAAp/H,UAAAgqE,iBAAP,SAAwBrI,GACpB,GAAKA,IAEL1gE,KAAK+tE,YAAYhF,iBAAiBrI,EAAaliC,IAM3CkiC,EAAaC,UAAYD,EAAaC,SAASniC,IAAI,CACnD,IAAMghG,EACD9+D,EAAa1gB,UAAY0gB,EAAa1gB,SAASn9C,QAAU69D,EAAa1gB,SAAS,GAAGne,MAAS,GAChG7hC,KAAKy/H,uBAAuB/+D,EAAaC,SAASniC,GAAIghG,KAIvDrB,EAAAp/H,UAAA2gI,kBAAP,WACI,OAAOl9H,OAAOi9B,KAAKmB,YAAY++F,eAG3BxB,EAAAp/H,UAAA0gI,uBAAR,SAA+B90D,EAAyBtkC,GAAxD,IAAArF,EAAAhhC,KACU4/H,EAAkBruG,EAAAK,YAAYL,EAAAK,YAAY4jC,MAEhDx1D,KAAKwhD,OAAOib,GAAG,yCACXpQ,SAAUse,EACVivB,cAAegF,EAAcjrE,aAC7BuuC,QAAS09D,EACTp3F,MAAOnC,IAGXzkC,WAAW,WACPo/B,EAAKq1C,4BAA4BrT,YAAY47B,EAAcjrE,cAC3DqN,EAAKq1C,4BAA4B1zE,OAAO0jC,MAQzC83F,EAAAp/H,UAAAihE,qBAAP,SAA4BxhC,GACxB,OAAOA,IAAOx+B,KAAK6+H,sBAGhBV,EAAAp/H,UAAA8gI,6BAAP,SAAoCrhG,GAChC,IAAMshG,EAAkB9/H,KAAK6+H,sBAAwB7+H,KAAK8+H,yBACpDiB,EAAa//H,KAAKy+H,4BAIxB,OAFyBqB,EAAkBA,IAAoBthG,EAAKuhG,IAAevhG,GAKhF2/F,EAAAp/H,UAAAihI,mBAAP,WACQhgI,KAAKigI,kBAAoB,GACzBjgI,KAAKigI,oBAETjgI,KAAKq+H,qBAAsB,GAGxBF,EAAAp/H,UAAAmhI,qBAAP,WACIlgI,KAAKigI,oBACLjgI,KAAKq+H,qBAAsB,GAGxBF,EAAAp/H,UAAAohI,oBAAP,SAA2BC,GAEnBpgI,KAAKq+H,qBADL+B,IAKwBpgI,KAAKq+H,qBAG9BF,EAAAp/H,UAAAshI,gBAAP,SAAuB3/D,GAEnB1gE,KAAK+oE,iBAAiBrI,IAGnBy9D,EAAAp/H,UAAAuhI,kBAAP,SAAyB5/D,KAclBy9D,EAAAp/H,UAAAwhI,qBAAP,SAA4B7/D,GACxB,IAAM8/D,EAAqBxgI,KAAKihD,QAAUjhD,KAAKihD,OAAOupB,eAAe0jB,aAAav/E,IAAI,SAAA1P,GAAK,OAAAA,EAAEg4F,WAE7F,OACkC,IAA9Bv2B,EAAay6D,gBACXqF,IAAuBA,EAAmBl9H,KAAK,SAAA1E,GAAK,OAAAA,IAAM8hE,EAAaC,SAAS3pB,gBAClF0pB,EAAamM,aACbnM,EAAa+/D,UAObtC,EAAAp/H,UAAA2hI,uBAAR,SAA+B1pF,GAC3B,OACIigD,SAAUjgD,EACVzQ,YAAa,GACbnhC,OAAQ4xC,EACRqgD,WAAY,GACZ/0F,KAAMgsB,EAASiD,QAAQ0E,UAAUC,UAAU6rC,UA5S1Co8D,EAAgB/uG,GAd5BqI,EAAU,QACPE,SAAU,WACVkV,YAAa,gDAEhB3U,EACG,SACA,YACA,cACA,8BACA,YACA,sBACA,YACA,mBAESimG,GAAb,GAAa3oE,EAAA2oE,iBAAgBA,EA3BN,CAAA5sG,EAAAikC,OAAAjkC,EAAAikC,UAAR,CAAAlnC,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCHV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAikC,GAgBvB,IAAAmrE,EAAA,WASI,SAAAA,EAAoBC,EAAgDC,GAAhD7gI,KAAA4gI,2BAAgD5gI,KAAA6gI,kBAkCxE,OAhCIF,EAAA5hI,UAAAqtC,QAAA,WACQpsC,KAAK0gE,aACL1gE,KAAK8gI,mBAAmB9gI,KAAK0gE,cAE7B1gE,KAAK+gI,iBAAiB/gI,KAAKqmE,iBAI3Bs6D,EAAA5hI,UAAAgiI,iBAAR,SAAyBviG,GAAzB,IAAAwC,EAAAhhC,KACIA,KAAK4gI,yBAAyBv8F,SAAU7F,GAAEA,IAAI8F,SAASC,KAAK,SAAAm8B,GACxD1/B,EAAK8/F,mBAAmBpgE,MAKxBigE,EAAA5hI,UAAA+hI,mBAAR,SAA2BpgE,GACvBA,EAAa1gB,SAAS7pC,KAClB,SAAC6qH,EAAIC,GAAO,WAAIxkG,KAAKukG,EAAGxzD,UAAU3oE,YAAY+gC,UAAY,IAAInJ,KAAKwkG,EAAGzzD,UAAU3oE,YAAY+gC,YAEhG,IAAMs7F,EAAqBxgE,EAAauL,gBAAgB3oE,KAAK,SAAAgW,GAAK,OAACA,EAAEunB,eAC/DsgG,EAAwBD,GAAsBA,EAAmBt0D,cAAc/nE,YAAe,KAEpG7E,KAAKohI,eAAiB1gE,EAAa1gB,SAASnjC,OAAO,EAAG,GAAG,GACzD7c,KAAKqhI,kBAAoBrhI,KAAK6gI,gBAAgBS,SAAS5gE,EAAaiK,WAAY,IAAK,KACrF3qE,KAAKuhI,kBAAoBvhI,KAAK6gI,gBAAgBS,SAAS5gE,EAAaiK,WAAY,IAAK,KACrF3qE,KAAKwhI,iBAAmB9gE,EAExB1gE,KAAKwhI,iBAAiBxhF,SAASjsC,QAAQ,SAAAuF,GACnCA,EAAEszD,cAAc/nE,YAAcs8H,EAC1B7nH,EAAEkuD,UAAY,aAAeluD,EAAEkuD,UAAY,gBAxC9Cm5D,EAAgCvxG,GAV5CqI,EAAU,QACPE,SAAU,4BACVkV,YAAa,8EACbe,UACIy4B,eAAgB,IAChB3F,aAAc,IACd+gE,gBAAiB,OAGxBvpG,EAAO,eAAgB,oBACXyoG,GAAb,GAAanrE,EAAAmrE,iCAAgCA,EAhBtB,CAAApvG,EAAAikC,OAAAjkC,EAAAikC,UAAR,CAAAlnC,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAknC,GAMf,IAAAksE,EAAA,oBAAAA,KAAqD,OAAxCA,EAAsCtyG,GADlDmJ,EAAW,OAAQ,2CACPmpG,GAAb,GAAalsE,EAAAksE,uCAAsCA,EANpC,CAAApzG,EAAAknC,OAAAlnC,EAAAknC,UAAnB,CAAUlnC,WCAV,SAAUA,IAAS,SAAA+wC,GACf,IAAOw2B,EAAoBvnE,EAASwe,gBAAgBs0B,aAAay0B,kBAC1D8rC,EAAYrzG,EAAS+wC,yBAAyBm9D,UAOrDoF,EAAA,WAsBI,SAAAA,EACYpgF,EACAusB,EACApI,GAHZ,IAAA3kC,EAAAhhC,KACYA,KAAAwhD,SACAxhD,KAAA+tE,cACA/tE,KAAA2lE,YAiBZ3lE,KAAA6hI,SAAW,SAACnhE,GACR1/B,EAAK+sC,YAAY/E,kBAAkBtI,IAGvC1gE,KAAA8hI,yBAA2B,SAACtjG,GACpBwC,EAAK+gG,wBAGT/gG,EAAK+sC,YAAY1E,iBAAiB7qC,GAClCwC,EAAK+gG,uBAAwB,EAC7BngI,WAAW,WACPo/B,EAAK+gG,uBAAwB,GAC9B,OAGP/hI,KAAAmnE,YAAc,SAACd,GACPrlC,EAAKghG,aACLhhG,EAAK+sC,YAAY5G,YAAYd,EAAgBrlC,EAAKghG,YAClDhhG,EAAKghG,WAAa,KAI1BhiI,KAAAiiI,YAAc,SAAAtzG,GACV,IAAMu0B,EAAQv0B,EAAOu0B,MACD,KAAhBA,EAAMg/E,QACNh/E,EAAMK,iBACFL,EAAMi/E,UAAYj/E,EAAMk/E,QACxBphG,EAAKghG,YAAc,KAEnBhhG,EAAKmmC,YAAYx4C,EAAO03C,iBAIhCrlC,EAAK+sC,YAAY1G,yBAAyB14C,EAAO03C,iBAGrDrmE,KAAAqiI,sBAAwB,SAACp6E,GACrBjnB,EAAKghG,WAAa/5E,EAClBjnB,EAAKshG,gBAAiB,GAG1BtiI,KAAAuiI,aAAe,SAAC7hE,GACPA,GAEL1/B,EAAK+sC,YAAY1G,yBAAyB3G,EAAaliC,KAG3Dx+B,KAAAwiI,mBAAqB,SAAAC,GAEjB,GADAzhG,EAAK0hG,aAAc,GACd1hG,EAAK2hG,sBAAuB,CAC7B3hG,EAAKghG,YAAgBhhG,EAAKghG,YAAc,IAAE,IAAIL,EAAUvE,QAAQqF,GAAS,IACzE,IAAMG,EAAoBrgI,SAASq6F,eAAe,cAClD57D,EAAK6hG,eAAeD,KAgCrB5iI,KAAA0qE,aAAe,SAAChK,EAAgCzf,GAC9Cyf,GAAiBzf,GAAUA,EAAOziB,KAAOkiC,EAAaC,SAASniC,IAEpEwC,EAAK+sC,YAAYn4B,KAAK8qB,EAAaliC,GAAIyiB,IAmF/C,OAxLI2gF,EAAA7iI,UAAAqtC,QAAA,WACIpsC,KAAKu8H,iBAAmBl9D,EAAAk9D,iBAAiBljH,OAAO,SAAAhY,GAAK,MAAM,OAANA,GAAoB,OAANA,GAAoB,OAANA,IACjFrB,KAAK8iI,4BACL9iI,KAAK+iI,qCACL/iI,KAAKgjI,0BAGTpB,EAAA7iI,UAAA4tC,WAAA,WACQ3sC,KAAK4+H,4BAA4B5+H,KAAK4+H,2BAA2BhyF,UACjE5sC,KAAKijI,kBAAkBjjI,KAAKijI,iBAAiBr2F,UAC7C5sC,KAAK0+H,gBAAgB1+H,KAAK0+H,eAAe9xF,UACzC5sC,KAAKkjI,wBAAwBljI,KAAKkjI,uBAAuBt2F,WA2D1Dg1F,EAAA7iI,UAAAokI,cAAP,WACI,OAAInjI,KAAKojI,qBACE,+DACApjI,KAAKqjI,qBACL,8CAEA,wDAIRzB,EAAA7iI,UAAAukI,WAAP,WACI,OAAItjI,KAAKsuF,qBAAuBtuF,KAAKihD,QAAUjhD,KAAKihD,OAAOziB,KAAOx+B,KAAK0gE,aAAaC,SAASniC,IAM1FojG,EAAA7iI,UAAAqkI,mBAAP,WACI,OAAOpjI,KAAKsuF,oBAAuBtuF,KAAKihD,QAAUjhD,KAAKihD,OAAOziB,KAAOx+B,KAAK0gE,aAAaC,SAASniC,IAG7FojG,EAAA7iI,UAAAskI,mBAAP,WACI,OACMrjI,KAAK0gE,aAAamM,cAAgB7sE,KAAKsuF,qBACvCtuF,KAAK0gE,aAAamM,aAAe7sE,KAAKsuF,oBAAsBtuF,KAAKihD,QAAUjhD,KAAKihD,OAAOziB,KAAOx+B,KAAK0gE,aAAaC,SAASniC,IAU5HojG,EAAA7iI,UAAAwkI,iBAAP,SAAwB78D,GACpB1mE,KAAKgiI,YAAct7D,EAAS,KAGzBk7D,EAAA7iI,UAAAuvF,iBAAP,WACI,OACItuF,KAAKwhD,QACLxhD,KAAKwhD,OAAOyU,UAC0D,IAAtEj2D,KAAKwhD,OAAOyU,QAAQv4D,KAAKoF,QAAQ,iCAIlC8+H,EAAA7iI,UAAA0gI,uBAAP,WACQz/H,KAAK0gE,aAAaC,SAClB3gE,KAAKwhD,OAAOib,GAAG,yCACXpQ,SAAUrsD,KAAK0gE,aAAaC,SAASniC,KAGzCx+B,KAAKwhD,OAAOib,GAAG,yCACXpQ,SAAUrsD,KAAKihD,OAAOziB,MAK1BojG,EAAA7iI,UAAA+jI,0BAAR,eAAA9hG,EAAAhhC,KACIA,KAAK4+H,2BAA6B5+H,KAAK2lE,UAAU1sC,OAC5C5f,OAAO,SAAAC,GAAK,QAAEA,IACd3K,IAAI,SAAA2K,GAAK,OAAAA,EAAE6sD,UAAY7sD,EAAEusD,eAAiBvsD,EAAEusD,cAAcviE,KAAK,SAAA9F,GAAK,OAAAA,EAAEghC,KAAOllB,EAAE6sD,aAC/EjtC,uBACAc,UAAU,SAAA0mC,GACP,IAAM8iE,EAAYxiG,EAAK0/B,cAAgB1/B,EAAK0/B,aAAaliC,GAEpDkiC,GAAgBA,EAAaliC,KAAOglG,IAAWxiG,EAAKghG,WAAa,IAEtEhhG,EAAK0/B,aAAeA,EACpB1/B,EAAK2hG,uBAAyBjiE,GAAgBrB,EAAAmB,yBAAyBE,EAAa9gC,WAIxFgiG,EAAA7iI,UAAAikI,uBAAR,eAAAhiG,EAAAhhC,KACIA,KAAKkjI,uBAAyBljI,KAAK2lE,UAAU1sC,OACxC5f,OAAO,SAAAC,GAAK,QAAEA,IACd3K,IAAI,SAAA2K,GAAK,OAAAA,EAAEmtD,iBACXvtC,uBACAc,UAAU,SAAA0sC,GACP1lC,EAAKuiG,iBAAiB78D,MAI1Bk7D,EAAA7iI,UAAAgkI,mCAAR,eAAA/hG,EAAAhhC,KACIA,KAAK0+H,eAAiB7oC,EAAkB58D,OACnCtqB,IAAI,SAAAzP,GAAK,OAAAA,GAAKA,EAAE+2F,UAAY/2F,EAAE+2F,SAASh1C,QAAU/hD,EAAE+2F,SAASh1C,SAC5D5nC,OAAO,SAAA4nC,GAAU,OAAW,OAAXA,IACjB/nB,uBACAc,UAAU,SAAAinB,GACPjgB,EAAKigB,OAASA,KAIlB2gF,EAAA7iI,UAAA8jI,eAAR,SAAuBxpF,GACnB,IAAMoqF,EAAMlnG,EAAE8c,GACdoqF,EAAIjnF,OACJ56C,WAAW,WAGP,GAFA6hI,EAAI1tF,QAEAsD,EAAGqqF,kBAAmB,CAGtB,IAAMjgI,EAAyB,EAAnBggI,EAAIryH,MAAMvO,OACtBw2C,EAAGqqF,kBAAkBjgI,EAAKA,QAI1BggI,EAAIryH,IAAIqyH,EAAIryH,OAIhBioC,EAAGk4B,UAAY,QAChB,MAlNEqwD,EAA8BxyG,GAL1CqI,EAAU,QACPE,SAAU,0BACVkV,YAAa,mEAEhB3U,EAAO,SAAU,cAAe,cACpB0pG,GAAb,GAAaviE,EAAAuiE,+BAA8BA,EAT5B,CAAAtzG,EAAA+wC,2BAAA/wC,EAAA+wC,8BAAnB,CAAU/wC,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAikC,GACvB,IAAAmuE,EAAA,oBAAAA,IACI3jI,KAAAs4C,SAAW,IACXt4C,KAAA41C,KAAO,SAASvG,EAAOwG,GACnB,IAAI+tF,EAAmB1mG,aAAaC,QAAQ,OAExCymG,IAEA/tF,EAAQU,OACR30C,WAAW,WACPi0C,EAAQqrC,IAAI7zD,KAAKiQ,MAAMsmG,IACvB/tF,EAAQp0C,QACT,IAGPo0C,EAAQguF,WACJ1zF,KAAI,SAAC+S,EAAO4gF,GACR,IAAIxhG,EAAWuT,EAAQvT,WACvBpF,aAAac,QAAQ,MAAO3Q,KAAKC,UAAUgV,QAO3D,OAHWqhG,EAAAtkI,QAAP,WACI,OAAO,WAAM,WAAIskI,IAEzBA,EAxBA,GAAanuE,EAAAmuE,mBAAkBA,EA0B/Bp1G,QACKrxB,OAAO,QACPy4C,UAAU,iBAAkBguF,EAAmBtkI,WA7B7B,CAAAkyB,EAAAikC,OAAAjkC,EAAAikC,UAAR,CAAAlnC,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAA+wC,IAEf,oBAAAM,KACWA,EAAA5gE,UAAAiwB,UAAP,SAAiB8Q,GACb,OAAOA,GAAWA,EAAQ0nC,YAAcnI,EAAAE,kBAAkB+K,WAAa,UAAY,aAFrF3K,EAAmCvwC,GADxCC,EAAK,OAAQ,qBACRswC,GAAN,GAFe,CAAArxC,EAAA+wC,2BAAA/wC,EAAA+wC,8BAAnB,CAAU/wC,WCEV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAikC,GAIvB,IAAOr0B,EAAW7S,EAAS4S,QAAQC,SAC5BS,EAAkBtT,EAAS4S,QAAQU,gBAKnC29B,EAAoBjxC,EAAS+wC,yBAAyBE,kBA+B7DwkE,EAAA,WAsBI,SAAAA,EACYp+D,EACAjE,EACAqM,EACApM,EACA1xB,EACA+qB,EACAhY,EACAqzB,EACAukB,GATZ,IAAA55D,EAAAhhC,KACYA,KAAA2lE,YACA3lE,KAAA0hE,cACA1hE,KAAA+tE,cACA/tE,KAAA2hE,sBACA3hE,KAAAiwC,sBACAjwC,KAAAg7D,UACAh7D,KAAAgjD,YACAhjD,KAAAq2E,8BACAr2E,KAAA46F,oBAzBL56F,KAAAyoF,sBACAzoF,KAAA0oF,sBAUC1oF,KAAAgkI,iBAA2B,EAC3BhkI,KAAAynC,KAAO,EACPznC,KAAAqlC,SAAW,GAwDZrlC,KAAAipF,YAAc9nD,EACjB,SAACqH,GACGxH,EAAKkoD,QACLloD,EAAKr+B,OAAO6lC,IAEhB,KACA,GAwTR,OAvWIu7F,EAAAhlI,UAAAqtC,QAAA,WACIpsC,KAAKikI,6BACLjkI,KAAKkkI,mBACLlkI,KAAK8iI,6BAGTiB,EAAAhlI,UAAA4tC,WAAA,WACQ3sC,KAAK4+H,4BAA4B5+H,KAAK4+H,2BAA2BhyF,WAGzEm3F,EAAAhlI,UAAA6kD,WAAA,SAAWhW,GACP,IAAMu2F,EAAyBv2F,GAAYA,EAASoS,UAAYpS,EAASoS,SAASuW,aAClF,GAAIv2D,KAAKokI,wBAA0BD,EAAwB,CACvD,IAAME,EAAmBF,EAAuB9qH,OAC5C,SAAAC,GAAK,OAAAA,EAAEkuD,YAAcjI,EAAkBkI,aAG3C,GAAI48D,EAAiBxhI,OAAS,EAAG,OAEjC,IAAMyhI,EAAsBD,EAAiBA,EAAiBxhI,OAAS,GAEvE,GAAIyhI,EAAoB9lG,KAAOx+B,KAAKukI,cAAe,OAEnDvkI,KAAKwkI,mBAAmBF,KAIxBP,EAAAhlI,UAAA+jI,0BAAR,eAAA9hG,EAAAhhC,KACIA,KAAK4+H,2BAA6B5+H,KAAK2lE,UAAU1sC,OAC5C5f,OAAO,SAAAC,GAAK,QAAEA,IACd3K,IAAI,SAAA2K,GAAK,OAAAA,EAAE6sD,UAAY7sD,EAAEusD,eAAiBvsD,EAAEusD,cAAcviE,KAAK,SAAA9F,GAAK,OAAAA,EAAEghC,KAAOllB,EAAE6sD,aAC/EjtC,uBACAc,UAAU,SAAA0mC,GACP1/B,EAAK0/B,aAAeA,KAIzBqjE,EAAAhlI,UAAAmlI,iBAAP,WACIlkI,KAAKs7F,UAAYhtE,EAAAY,OAAO+O,gBAYrB8lG,EAAAhlI,UAAAosF,kBAAP,WACI,OAAOnrF,KAAKyqF,OAASzqF,KAAKorF,aAAeprF,KAAKqrF,4BAA8B,GAAKrrF,KAAK8qF,kBAGnFi5C,EAAAhlI,UAAAssF,0BAAP,WACI,OAAKrrF,KAAKyqF,MAASzqF,KAAKyqF,KAAK5kF,MAEtB7F,KAAKyqF,KAAKvkD,MAAQlmC,KAAKyqF,KAAK5kF,MAAMhD,OAFE,GAKxCkhI,EAAAhlI,UAAAg2E,SAAP,WACI/0E,KAAKynC,MAAQ,EAETznC,KAAK4pC,aAAe5pC,KAAK4pC,YAAY/mC,QAAQ7C,KAAK2C,OAAO3C,KAAK4pC,cAG/Dm6F,EAAAhlI,UAAA6jE,UAAP,SAAiBx8B,GAAjB,IAAApF,EAAAhhC,KACI,GAAKomC,EAAL,CAIA,GAFApmC,KAAKwjE,YAAcp9B,EAEfA,EAAIsiD,mBAAoB,CACxB,IAAM1jC,EAAM5e,EAAIsiD,mBAAmB/5E,IAAI,SAAA2K,GAAK,OAAAA,EAAEuwE,gBAC9C7pF,KAAK2hE,oBAAoBvpB,UAAW4M,IAAKA,IAAO1gB,SAASC,KAAK,SAAAmD,GAC1DA,EAAK3zB,QAAQ,SAAAuF,GACT0nB,EAAK0nD,mBAAmBpvE,EAAEklB,GAAG35B,YAAcyU,EAAE5b,SAKzDsC,KAAK8pF,cAAgB9pF,KAAK8pF,gBAAkB1jD,EAAI5H,GAAK,KAAO4H,EAAI5H,GAChEx+B,KAAKykI,uBAAyBzkI,KAAKykI,yBAA2Br+F,EAAIi+B,QAAQ7lC,GAAK,KAAO4H,EAAIi+B,QAAQ7lC,GAE9Fx+B,KAAK8pF,eAAe9pF,KAAK0hE,YAAY+B,mBAAoBjlC,GAAIx+B,KAAK8pF,kBAGnEi6C,EAAAhlI,UAAA2lI,cAAP,WACI,OAA0B,MAAtB1kI,KAAK8pF,eAA+C,aAAtB9pF,KAAK8pF,eAMpCi6C,EAAAhlI,UAAA4lI,gBAAP,SAAuBj+D,GACnB1mE,KAAK+tE,YAAY7D,kBAAkBxD,EAAOpvC,QAAQ,gBAAiB,MAGhEysG,EAAAhlI,UAAA6lI,aAAP,SAAoBx+F,GAChBpmC,KAAK+tE,YAAY7D,kBAAkBlqE,KAAK6kI,gBAAgBz+F,KAGrD29F,EAAAhlI,UAAA+lI,SAAP,WACI9kI,KAAK8pF,cAAgB,MAGlBi6C,EAAAhlI,UAAA6sF,aAAP,SAAoBxlD,GAChB,IAAKA,EAAK,MAAO,GACjB,IAAMulD,EAAuB3rF,KAAKyoF,oBAAsBzoF,KAAKyoF,mBAAmBhmF,OAAO2jC,EAAI5H,KACrFumG,EAAgBp5C,GAAwBA,EAAqBjlB,QAAWtgC,EAAIsgC,OAElF,OAAO1mE,KAAKglI,gBAAgBD,IAGzBhB,EAAAhlI,UAAAusF,yBAAP,WACI,OAAKtrF,KAAKyqF,MAASzqF,KAAKyqF,KAAK5kF,MAEtBZ,KAAKS,IAAI1F,KAAKyqF,KAAKplD,SAAUrlC,KAAKqrF,6BAFE,GAKxC04C,EAAAhlI,UAAA+rF,eAAP,WACI,SAAU9qF,KAAK4pC,cAAe5pC,KAAK4pC,YAAY/mC,SAG5CkhI,EAAAhlI,UAAA2tF,aAAP,WACI1sF,KAAKkpF,QACLlpF,KAAK4pC,YAAc,IAGhBm6F,EAAAhlI,UAAAkmI,yBAAP,SAAgC7+F,GAAhC,IAAApF,EAAAhhC,KACI,GAAKomC,GAAQA,EAAIsgC,OAAjB,CAEA,IACIw+D,EADyBllI,KAAKg7D,QAAQ,YAC1BmqE,CAAgB/+F,EAAIsgC,QAE9B7wB,EAAUtzC,SAAS4/B,cAAc,OACvC0T,EAAQuvF,UAAYF,EACpBA,EAAYrvF,EAAQzT,YACpByT,EAAQzT,YAAc,GAEtBR,EAAgBsjG,EAAW,WACvBlkG,EAAKiP,oBAAoBoH,KAAK,2BAI/B0sF,EAAAhlI,UAAAsmI,4BAAP,SAAmCj/F,GAC/B,GAAKA,GAAQpmC,KAAKs7F,UAAlB,CAEA,IAAIgqC,EAAStlI,KAAK6kI,gBAAgBz+F,GAElCpmC,KAAK+tE,YAAY5G,YAAYnnE,KAAKqmE,eAAgBi/D,KAG9CvB,EAAAhlI,UAAAimI,gBAAR,SAAwBt+D,GACpB,OAAOA,EAAOj2B,MAAM,QAAQxoB,KAAK,WAG7B87G,EAAAhlI,UAAA8lI,gBAAR,SAAwBz+F,GACpB,IAAIk/F,EAAStlI,KAAKs7F,UAIlB,OAHAgqC,GAAwD,MAA9CtlI,KAAKs7F,UAAUt7F,KAAKs7F,UAAUz4F,OAAS,GAAa,IAAM,GACpEyiI,GAAU,OACVA,GAAUl/F,EAAI5H,IAIJulG,EAAAhlI,UAAA4D,OAAd,SAAqBinC,iGACjB,OAAKA,GAAgBA,EAAY/mC,QAIjC7C,KAAKorF,aAAc,GACL,EAAMprF,KAAK0hE,YAAY/+D,QACjCwzC,EAAGvM,EACHnC,KAAMznC,KAAKynC,KACXpC,SAAUrlC,KAAKqlC,SACf8mD,qBAAqB,IACtB7nD,YATC,UAYJ,OARMu1C,EAAQj9C,EAAAC,OAMd78B,KAAKorF,aAAc,EAEdvR,GAAUA,EAAMh0E,OAErB7F,KAAKosF,cAAcvS,SAFS,SAKxBkqD,EAAAhlI,UAAAqtF,cAAR,SAAsBvS,GACb75E,KAAKyqF,KAKVzqF,KAAKyqF,KAAIxvD,KACFj7B,KAAKyqF,MACRhjD,KAAMoyC,EAAMpyC,KACZ5hC,MAAW7F,KAAKyqF,KAAK5kF,MAAKqiB,OAAK2xD,EAAMh0E,SAPrC7F,KAAKyqF,KAAO5Q,GAWNkqD,EAAAhlI,UAAAylI,mBAAd,SAAiC1kG,mGAC7B,OAAKA,GAEL9/B,KAAKukI,cAAgBzkG,EAAQtB,IACT,EAAMx+B,KAAKulI,yBAAyBzlG,MAH1C,EAAO,aAKrB,KAFMysD,EAAc3vD,EAAAC,SAEA0vD,EAAY1pF,OAAS,EAAG,UAE5C,IAAS1F,EAAIovF,EAAY1pF,OAAS,EAAG1F,GAAK,EAAGA,IACzC6C,KAAKwlI,iBAAiBj5C,EAAYpvF,oBAI5B4mI,EAAAhlI,UAAAwmI,yBAAd,SAAuCzlG,qGACnC,OAAKA,GAECwpD,EAAmBxpD,EAAQ+B,KAC3BwD,EAAWrlC,KAAKusF,YAChBvsF,KAAKusF,YAAY1pF,QAAU7C,KAAKgkI,iBAC5B,EACAhkI,KAAKgkI,iBAAmBhkI,KAAKusF,YAAY1pF,OAC7C7C,KAAKgkI,kBAES,EAAMhkI,KAAK0hE,YAAY/+D,QACvCwzC,EAAGmzC,EACH7hD,KAAMznC,KAAKynC,KACXpC,SAAUA,EACV8mD,qBAAqB,IACtB7nD,YAdW,EAAO,aAgBrB,QAPMioD,EAAc3vD,EAAAC,SAOA0vD,EAAY1mF,MAAMhD,OAAS,GAAG,OAElD,EAAY0pF,EAAY1mF,aAGpBk+H,EAAAhlI,UAAAymI,iBAAR,SAAyB3mD,GACrB,GAAKA,EAAL,CAMA,GAJK7+E,KAAKusF,cAAavsF,KAAKusF,kBAEDvsF,KAAKusF,YAAYjpF,KAAK,SAAAgW,GAAK,OAAAA,EAAEklB,KAAOqgD,EAAWrgD,KAKtE,OAFAx+B,KAAKusF,YAAcvsF,KAAKusF,YAAYlzE,OAAO,SAAAC,GAAK,OAAAA,EAAEklB,KAAOqgD,EAAWrgD,UACpEx+B,KAAKusF,YAAYtvE,QAAQ4hE,GAIzB7+E,KAAKusF,YAAY1pF,QAAU7C,KAAKgkI,mBAChChkI,KAAKusF,YAAcvsF,KAAKusF,YAAY1vE,OAAO,EAAG7c,KAAKgkI,iBAAmB,IAE1EhkI,KAAKusF,YAAYtvE,QAAQ4hE,KAGfklD,EAAAhlI,UAAAklI,2BAAd,iHACI,IAAKjkI,KAAKggD,UAAYhgD,KAAKggD,SAASn9C,OAAS,EAEzC,OADA7C,KAAKokI,wBAAyB,GAC9B,GAMJ,GAJMC,EAAmBrkI,KAAKggD,SAAS3mC,OAAO,SAAAC,GAAK,OAAAA,EAAEkuD,YAAcjI,EAAkBkI,aAC/Eg+D,EACFpB,EAAiBxhI,OAAS7C,KAAKgkI,iBAAmBhkI,KAAKgkI,iBAAmBK,EAAiBxhI,QAE1FwhI,GAAoBA,EAAiBxhI,OAAS,EAE/C,OADA7C,KAAKokI,wBAAyB,GAC9B,GAGKjnI,EAAIknI,EAAiBxhI,OAAS4iI,0BAActoI,EAAIknI,EAAiBxhI,QAClD,EAAM7C,KAAKulI,yBAAyBlB,EAAiBlnI,MADG,YAG5E,KAFMovF,EAAc3vD,EAAAC,SAEA0vD,EAAY1pF,OAAS,EAAG,YAE5C,IAAS6iI,EAAIn5C,EAAY1pF,OAAS,EAAG6iI,GAAK,EAAGA,IACzC1lI,KAAKwlI,iBAAiBj5C,EAAYm5C,4BANwCvoI,wBAUlF6C,KAAKokI,wBAAyB,YAG1BL,EAAAhlI,UAAAmqF,MAAR,WACIlpF,KAAKynC,KAAO,EACZznC,KAAKyqF,KAAO,MAGTs5C,EAAAhlI,UAAAg6E,4BAAP,eACQ66B,EACAvnD,EAFRrrB,EAAAhhC,KAGU+kE,EAAqB/kE,KAAK0gE,aAAaliC,GACvC8lC,EAActkE,KAAKykI,uBACnB36C,EAAgB9pF,KAAK8pF,cAQ3B,GANI9pF,KAAK2lI,kBACL/xB,EAA0B5zG,KAAK4lI,gCAE/Bv5E,EAAWrsD,KAAK0gE,aAAaC,SAASniC,GAGpC8lC,GAAewlB,IAAoBz9B,GAAYunD,GAArD,CAEA,IAAMz6D,EAAW,uEAEC2wC,EAAa,kCACbxlB,EAAW,2BACnBjY,EAAW,cAAcA,EAAQ,IAAM,IAAE,0BAEvCunD,EACM,8BAA8BvmF,KAAKC,UAAUsmF,GAAwB,IACrE,IAAE,uCAEI5zG,KAAKq2E,4BAA4BnS,yBAAwB,6CAEjFlkE,KAAKgjD,UACAvhD,MACG03C,SAAQA,EACRmL,YAAa,KACbC,qBAAqB,IAExBhgB,KAAK,SAAAR,GACF/C,EAAKq1C,4BAA4BvR,eAAe/gC,EAAMghC,OAI3Dg/D,EAAAhlI,UAAAw/F,wBAAP,eAAAv9D,EAAAhhC,KACUihD,EAASjhD,KAAK46F,kBAAkBxD,oBAChC9yB,EAActkE,KAAKykI,uBACnBjhE,EAAcxjE,KAAKwjE,YAEzB,GAAKc,GAAed,EAAYhlC,IAAQyiB,EAAxC,CACA,IAAM9H,EAAW,sFAEI8H,EAAOziB,GAAE,kDACGx+B,KAAKq2E,4BAA4BnS,0BAA4B,GAAC,2CACpEV,EAAYhlC,GAAE,2CACd8lC,EAAW,qDACFtkE,KAAKq2E,4BAA4B5R,4BAA8B,IAAE,2DAC3DzkE,KAAKq2E,4BAA4B1R,iCAC/D,IAAE,yDAEd3kE,KAAKgjD,UACAvhD,MACG03C,SAAQA,EACRmL,YAAa,KACbC,qBAAqB,IAExBhgB,KAAK,SAACiG,GACHxJ,EAAKq1C,4BAA4BxR,0BAA0Br6B,OAI/Du5F,EAAAhlI,UAAA4mI,gBAAR,WACI,OAAO3lI,KAAK0gE,aAAaC,SAASniC,IAG9BulG,EAAAhlI,UAAA6mI,8BAAR,WACI,OACI/kE,UAAW7gE,KAAK0gE,aAAaC,SAASE,UACtCC,SAAU9gE,KAAK0gE,aAAaC,SAASG,SACrC9pB,YAAah3C,KAAK0gE,aAAaC,SAAS3pB,YACxCuzB,MAAOvqE,KAAK0gE,aAAaC,SAAS4J,QAtYjCw5D,EAAuB30G,GAnBnCqI,EAAU,QACPE,SAAU,mBACVkV,YAAa,4DACbe,UACIoS,SAAU,IACVqmB,eAAgB,OAGvBnuC,EACG,YACA,cACA,cACA,sBACA,sBACA,UACA,YACA,8BACA,kCAES6rG,GAAb,GAAavuE,EAAAuuE,wBAAuBA,EAzCb,CAAAxyG,EAAAikC,OAAAjkC,EAAAikC,UAAR,CAAAlnC,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCFV,SAAUA,IAAS,SAAAiD,GAAQA,EAAAikC,OAAAjkC,EAAAikC,SAEvB,oBAAAqwE,KACWA,EAAA9mI,UAAAiwB,UAAP,SAAiB8Q,GACb,IAAKA,EAAS,MAAO,GAErB,IAAMxC,EAAQ/6B,SAAS4/B,cAAc,SAErC,OADA7E,EAAM8nG,UAAYtlG,EACXxC,EAAM8E,aAAe9E,EAAMwoG,WANpCD,EAAgBz2G,GADrBC,EAAK,OAAQ,eACRw2G,GAAN,GAFe,CAAAv3G,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAAikC,OAAAjkC,EAAAikC,SAGvB,oBAAAuwE,KACWA,EAAAhnI,UAAAiwB,UAAP,SAAiB8Q,GACb,IAAKA,EAAS,MAAO,GACrB,IAAKA,EAAQp9B,SAAS,MAAS,OAAOo9B,EAOtC,IALA,IACMkmG,GADY,IAAIC,WACQC,gBAAgBpmG,EAAS,aAEjDqmG,EAAQH,EAAYrrF,qBAAqB,KAEtCx9C,EAAIgpI,EAAMtjI,OAAQ1F,EAAI,EAAGA,IAC1BgpI,EAAMhpI,EAAI,GAAGipI,MACbD,EAAMhpI,EAAI,GAAGkpI,mBAAmB,WAAY,IAAMF,EAAMhpI,EAAI,GAAGipI,MAIvE,OAAOJ,EAAYrrF,qBAAqB,QAAQ,GAAGyqF,UAAUvgI,YAhB/DkhI,EAAe32G,GADpBC,EAAK,OAAQ,cACR02G,GAAN,GAHe,CAAAz3G,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCGV,SAAUA,GAASA,EAAA+wC,2BAAA/wC,EAAA+wC,6BASf,WAYI,SAAAinE,EACY9kF,EACAmkB,EACAoI,GAFA/tE,KAAAwhD,SACAxhD,KAAA2lE,YACA3lE,KAAA+tE,cAdL/tE,KAAAgiG,WAAY,EAEZhiG,KAAAumI,wBACAvmI,KAAAwmI,YAAc,EAMbxmI,KAAAymI,uBAAyB,IAV/BH,EAA4Bl3G,GALjCqI,EAAU,QACPE,SAAU,wBACVkV,YAAa,wEAEhB3U,EAAO,SAAU,YAAa,gBACzBouG,GAAN,GATJ,CAAUh4G,WCHV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAikC,GASvB,IAAAkxE,EAAA,oBAAAA,KAAuC,OAA1BA,EAAwBt3G,GARpCqI,EAAU,QACPE,SAAU,oBACVkV,YAAa,8DACbe,UACI68C,KAAM,OAGbvyD,KACYwuG,GAAb,GAAalxE,EAAAkxE,yBAAwBA,EATd,CAAAn1G,EAAAikC,OAAAjkC,EAAAikC,UAAR,CAAAlnC,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAikC,GAQvB,IAAAmxE,EAAA,oBAAAA,KAkBA,OAdWA,EAAA5nI,UAAA6kD,WAAP,SAAkB8a,GACd,GAAIA,GAAWA,EAAQuO,QAAUvO,EAAQuO,OAAO1W,aAAc,CAC1D,IAAI0W,EAASvO,EAAQuO,OAAO1W,aACxB0W,EAAS,IACTA,EAAS,GAGTA,EAAS,IACTA,EAAS,GAEbjtE,KAAK4mI,YAAc,IAAIvjI,MAAM4pE,GAC7BjtE,KAAK6mI,cAAgB,IAAIxjI,MAAM,EAAI4pE,KAflC05D,EAAwBv3G,GAPpCqI,EAAU,QACPE,SAAU,oBACVkV,YAAa,8DACbe,UACIq/B,OAAQ,QAGH05D,GAAb,GAAanxE,EAAAmxE,yBAAwBA,EARd,CAAAp1G,EAAAikC,OAAAjkC,EAAAikC,UAAR,CAAAlnC,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAikC,GAavB,IAAAsxE,EAAA,WAOI,SAAAA,EAAoBjgE,EAAoCuP,GAApCp2E,KAAA6mE,eAAoC7mE,KAAAo2E,eAJjDp2E,KAAAggD,YA+BX,OAzBW8mF,EAAA/nI,UAAAqtC,QAAP,WACQpsC,KAAKqmE,gBAAgBrmE,KAAK+gI,iBAAiB/gI,KAAKqmE,iBAGhDygE,EAAA/nI,UAAAgiI,iBAAR,SAAyBviG,GAAzB,IAAAwC,EAAAhhC,KACIA,KAAK6mE,aAAaxiC,SAAU7F,GAAEA,IAAI8F,SAASC,KAAK,SAACm8B,GACzCA,IACA1/B,EAAKisC,OAASvM,EAAauM,OAC3BjsC,EAAK0/B,aAAeA,MAKzBomE,EAAA/nI,UAAAgoI,qBAAP,WACI/mI,KAAKo2E,aACD,gFAEI53C,GAAI,wBACJ46C,WAAY,0BAGZ/S,eAAgBrmE,KAAKqmE,kBA9BxBygE,EAAiC13G,GAR7CqI,EAAU,QACPE,SAAU,6BACVkV,YAAa,gFACbe,UACIy4B,eAAgB,OAGvBnuC,EAAO,eAAgB,iBACX4uG,GAAb,GAAatxE,EAAAsxE,kCAAiCA,EAbvB,CAAAv1G,EAAAikC,OAAAjkC,EAAAikC,UAAR,CAAAlnC,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAA+wC,GAGf,IAUA2nE,EAAA,WAYI,SAAAA,EAAoBngE,EAAoClB,EAA8B11B,GAAlEjwC,KAAA6mE,eAAoC7mE,KAAA2lE,YAA8B3lE,KAAAiwC,sBAX/EjwC,KAAAinI,sBAAwB,EACxBjnI,KAAAknI,sBAAwB,EACxBlnI,KAAAmnI,yBAA2B,EAC3BnnI,KAAAonI,wBAA0B,EAC1BpnI,KAAAqnI,wBAA0B,EAE1BrnI,KAAAsnI,aAAc,EACdtnI,KAAAo6H,cAAe,EAiF1B,OA3EI4M,EAAAjoI,UAAAqtC,QAAA,eAAApL,EAAAhhC,KAIIA,KAAKunI,sBAAwBvnI,KAAK2lE,UAAU1sC,OACvCtqB,IAJ0B,SAACsuB,GAC5B,OAAAA,GAASA,EAAM7B,SAAW6B,EAAM8oC,cAAgB9oC,EAAM8oC,aAAanmC,SAAWy/B,EAAAiG,eAAeU,aAI5F9sC,uBACAc,UAAU,SAACw+F,GACRx3F,EAAKsmG,YAAc9O,IAG3B,IAAIgP,GAAa,EACjBxnI,KAAKynI,yBAA2BnuG,GAAG6uC,WAAW5vB,SAAS,KAClDmvF,UAAU,GACVruH,OAAO,SAAAC,GAAK,OAAA0nB,EAAKsmG,cACjBvrC,cAAc,WACX,OAAAziE,GAAG6uC,WAAWw/D,YAAiB3mG,EAAK6lC,aAAa00D,kBAAkBj3F,UAAU3Y,KAAK,KAErF48C,WAAW,SAACh4D,GAUT,OATKi3H,IACDxmG,EAAKiP,oBAAoBy3C,QACrB,iCACA,MAGJ8/C,GAAa,GAGVj3H,IAEVq3H,UAAU,SAAA7W,GAAU,OAAAA,EAAO8W,MAAM,OACjC7tG,UAAU,SAACosC,GACJohE,IACAxmG,EAAKiP,oBAAoBzQ,QACrB,uBACA,MAGJgoG,GAAa,GAGjBxmG,EAAKsmG,aAAc,EAEnBtmG,EAAKimG,sBAAwB7gE,EAAM6gE,sBACnCjmG,EAAKkmG,sBAAwB9gE,EAAM8gE,sBACnClmG,EAAKmmG,yBAA2B/gE,EAAM+gE,yBACtCnmG,EAAKomG,wBAA0BhhE,EAAMghE,wBACrCpmG,EAAKqmG,wBAA0BjhE,EAAMihE,2BAIjDL,EAAAjoI,UAAA4tC,WAAA,WACQ3sC,KAAKynI,0BAA0BznI,KAAKynI,yBAAyB76F,UAC7D5sC,KAAKunI,uBAAuBvnI,KAAKunI,sBAAsB36F,WAGxDo6F,EAAAjoI,UAAA+oI,0BAAP,WACI,OAAO9nI,KAAKinI,sBAjFO,GAoFhBD,EAAAjoI,UAAAgpI,kBAAP,WACI,OAAO/nI,KAAKinI,sBApFIe,GAuFbhB,EAAAjoI,UAAAkpI,wBAAP,WACI,OAAQjoI,KAAKkoI,mBAAqBloI,KAAKknI,sBAvFtB,IA0FdF,EAAAjoI,UAAAmpI,gBAAP,WACI,OAAOloI,KAAKknI,sBA1FE,IA6FXF,EAAAjoI,UAAAy7H,YAAP,WACIx6H,KAAKo6H,cAAgBp6H,KAAKo6H,cAvFrB4M,EAAyB53G,GALrCqI,EAAU,QACPE,SAAU,qBACVkV,YAAa,kEAEhB3U,EAAO,eAAgB,YAAa,wBACxB8uG,GAAb,GAAa3nE,EAAA2nE,0BAAyBA,EAbvB,CAAA14G,EAAA+wC,2BAAA/wC,EAAA+wC,8BAAnB,CAAU/wC,WCAV,SAAUA,IAAS,SAAA+wC,GAWf,IAAA8oE,EAAA,WAMI,SAAAA,EAAoBthE,GAAA7mE,KAAA6mE,eA8BxB,OA5BWshE,EAAAppI,UAAAqtC,QAAP,eAAApL,EAAAhhC,KACIA,KAAK6mE,aAAaw0D,qBAAqB/2F,SAASC,KAAK,SAAAmD,GACjD1G,EAAKonG,gBAAkB1gG,EAAKsY,SAC5Bhf,EAAKqnG,iCACLrnG,EAAKsnG,kBAINH,EAAAppI,UAAAwpI,gBAAP,SAAuBzoG,GACnB9/B,KAAKwoI,mBAALxoI,CAAyB8/B,IAGtBqoG,EAAAppI,UAAA8C,MAAP,WACI7B,KAAK+sF,WAGDo7C,EAAAppI,UAAAspI,+BAAR,eAAArnG,EAAAhhC,KACIA,KAAKooI,gBAAgBr0H,QAAQ,SAAAk0C,GAAO,OAAAA,EAAInoB,QAAQxI,QAAQ,eAAgB0J,EAAK4/B,iBAGzEunE,EAAAppI,UAAAupI,aAAR,WACItoI,KAAKooI,gBAAgBjyH,KAAK,SAAC5G,EAAGC,GAC1B,IAAM8J,EAAI/J,EAAEuwB,QAAQQ,cACdknB,EAAIh4C,EAAEswB,QAAQQ,cAEpB,OAAOhnB,EAAIkuC,GAAK,EAAIluC,EAAIkuC,EAAI,EAAI,KAjC/B2gF,EAAwB/4G,GAVpCqI,EAAU,QACPE,SAAU,wBACVkV,YAAa,kEACbe,UACIgzB,aAAc,IACd4nE,kBAAmB,IACnBz7C,QAAS,OAGhB70D,EAAO,iBACKiwG,GAAb,GAAa9oE,EAAA8oE,yBAAwBA,EAXtB,CAAA75G,EAAA+wC,2BAAA/wC,EAAA+wC,8BAAnB,CAAU/wC,WCGV,SAAUA,IAAS,SAAAiD,GAAQA,EAAAikC,OAAAjkC,EAAAikC,SACvBjnC,QAAQrxB,OAAO,QAAQy4C,UAAU,oBAC7B,WACA,SAAAwgC,GACI,SAASsyD,EACL5yF,EACAu7B,GAEA,QAFA,IAAAA,MAAA,IAEKv7B,KAAWA,EAAQhzC,OAAS,GAEjC,OAAIuuE,EAAQ,GACRv7B,EAAQ1F,YACR0F,EAAQ07B,UAAU17B,EAAQ,GAAG67B,oBAIjC77B,EAAQ1F,OAAOqhC,SAEPD,UAAW17B,EAAQ,GAAG67B,cAE1BN,GAGR,OACI94B,SAAU,IACVjJ,OACIq5F,iBAAkB,KAEtB5jD,UAAW,EACXlvC,KAAM,SACFvG,EACAgK,EACAxB,IAEKwB,GAAMA,EAAGx2C,OAAS,IAEvB4lI,EAAiBpvF,EAAI,GACrB88B,EAAS,WACLsyD,EAAiBpvF,EAAI,GAErBA,EAAGrD,GAAG,kBAAmB,SAAA30C,GACjBktB,QAAQsnB,QAAQx0C,EAAE8C,QAAQwkI,SAAS,WACnCxyD,EAAS,WACLsyD,EAAiBpvF,EAAI,OAMzB9qB,QACKsnB,QAAQx0C,EAAE8C,QACVwkI,SAAS,iBAEdxyD,EAAS,WACLsyD,EAAiBpvF,EAAI,eAtDtC,CAAA/qB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAA+wC,GACf9wC,QAAQrxB,OAAO,QAAQy4C,UAAU,iBAC7B,WACI,OACI2C,SAAU,IACVjJ,OACI+tF,QAAS,KAEbt4C,UAAW,EACXlvC,KAAM,SAACvG,EAAOgK,EAAIxB,GACd,IAOM+wF,EAAWrsG,EAAE8c,EAAG,IACtBxB,EAAKglC,SAAS,gBAAiB,SAAAz+E,GAC3BwqI,EAASlwF,KAAKkwF,EAASlwF,OAAOphB,QAAQ,IAAK,SAC3CsxG,EAASlwF,KAAKkwF,EAASlwF,OAAOphB,QAAQ,IAAK,SAC3CsxG,EAASlwF,KAAK2mB,EAAAm9D,UAAUY,QAAQwL,EAASlwF,SACzCkwF,EAASlwF,KAZE,SAAA7W,GAEX,OAAOA,EAAKvK,QADK,wFACa,SAAA6G,GAC1B,MAAO,YAAcA,EAAM,oCAAsCA,EAAM,SAS7D0qG,CAAOD,EAASlwF,gBAtBnC,CAAApqB,EAAA+wC,2BAAA/wC,EAAA+wC,8BAAnB,CAAU/wC,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAAikC,OAAAjkC,EAAAikC,SACvBjnC,QAAQrxB,OAAO,QAAQy4C,UAAU,iBAC7B,WACA,YACA,SAACwgC,EAAU2yD,GACP,OACIxwF,SAAU,KACV1C,KAAM,SAACvG,EAAOgK,EAAIxB,GACdwB,EAAGrD,GAAG,QAAS,SAAA30C,GACXA,EAAEkiD,iBAEFlK,EAAG0vF,YAAY,mBAXpB,CAAAz6G,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCHV,SAAUA,IAAS,SAAAiD,GAAQA,EAAAW,aAAAX,EAAAW,eAEvB,oBAAA82G,KACWA,EAAAjqI,UAAAiwB,UAAP,SAAiByiE,GACb,OAAQA,GACJ,IAAK,OACD,MAAO,UACX,IAAK,YACD,MAAO,cACX,IAAK,OACD,MAAO,QACX,QACI,MAAO,gBAVjBu3C,EAA6B55G,GADlCC,EAAK,aAAc,4BACd25G,GAAN,GAFe,CAAA16G,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAW,IAEvB,oBAAA+2G,KACWA,EAAAlqI,UAAAiwB,UAAP,SAAiByiE,GACb,OAAQA,GACJ,KAAKv/D,EAAAC,aAAa4vC,QAClB,IAAK,UACL,KAAK,EACD,OAAO,EACX,QACI,OAAO,IARjBknE,EAAyB75G,GAD9BC,EAAK,aAAc,wBACd45G,GAAN,GAFuB,CAAA13G,EAAAW,aAAAX,EAAAW,gBAAR,CAAA5D,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCKV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAW,GAEvB,IAAAg3G,EAAA,oBAAAA,KAkBA,OAjBWA,EAAAnqI,UAAAoqI,0BAAP,SAAiCl3E,EAAUm3E,GACvC,IAAKn3E,IAAaA,EAASvD,iBAAmB06E,EAAiB,OAAO,EAEtE,IAAIC,GAAY,EAOhB,OANA96G,QAAQxa,QAAQk+C,EAASvD,eAAgB,SAAAtwD,GAChCirI,GACGjrI,EAAMogC,KAAO4qG,IAAiBC,GAAY,KAI/CA,GAGJH,EAAAnqI,UAAAuqI,aAAP,SAAoBC,GAChB,YAAgDjqI,IAA5CkD,OAAOi9B,KAAKmB,YAAY2oG,IAfvBL,EAAe95G,GAD3B2I,EAAQ,aAAc,oBACVmxG,GAAb,GAAah3G,EAAAg3G,gBAAeA,EAFL,CAAA33G,EAAAW,aAAAX,EAAAW,gBAAR,CAAA5D,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCLV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAW,IAEvB,oBAAAs3G,KACWA,EAAAzqI,UAAAiwB,UAAP,SAAiByiE,GACb,OAAQA,GACJ,KAAKv/D,EAAAC,aAAa0gE,UAClB,IAAK,YACL,KAAK,EACD,OAAO,EACX,QACI,OAAO,IARjB22C,EAAiBp6G,GADtBC,EAAK,aAAc,gBACdm6G,GAAN,GAFuB,CAAAj4G,EAAAW,aAAAX,EAAAW,gBAAR,CAAA5D,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAW,IAEvB,oBAAAu3G,KACWA,EAAA1qI,UAAAiwB,UAAP,SAAiByiE,GACb,OAAQA,GACJ,KAAKv/D,EAAAC,aAAau3G,KAClB,IAAK,OACL,KAAK,EACD,OAAO,EACX,QACI,OAAO,IARjBD,EAAYr6G,GADjBC,EAAK,aAAc,WACdo6G,GAAN,GAFuB,CAAAl4G,EAAAW,aAAAX,EAAAW,gBAAR,CAAA5D,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAW,IAEvB,oBAAAy3G,KACWA,EAAA5qI,UAAAiwB,UAAP,SAAiByiE,GACb,OAAQA,GACJ,KAAKv/D,EAAAC,aAAa4gE,KAClB,IAAK,OACL,KAAK,EACD,OAAO,EACX,QACI,OAAO,IARjB42C,EAAYv6G,GADjBC,EAAK,aAAc,WACds6G,GAAN,GAFuB,CAAAp4G,EAAAW,aAAAX,EAAAW,gBAAR,CAAA5D,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAAW,aAAAX,EAAAW,eAGvB,WACI,SAAA03G,EAAoBC,GAAA7pI,KAAA6pI,cAEbD,EAAA7qI,UAAAiwB,UAAP,SACIwP,EACAg/B,EACAssE,EACAC,GAEA,OAAO/pI,KAAK6pI,YAAYvI,SAAS9iG,EAAIg/B,EAAOssE,EAAQC,IATtDH,EAAcx6G,GAFnBC,EAAK,aAAc,YACnB6I,EAAO,oBACF0xG,GAAN,GAeA,WACI,SAAAI,EAAoBH,GAAA7pI,KAAA6pI,cAEbG,EAAAjrI,UAAAiwB,UAAP,SACIwP,EACAg/B,EACAssE,EACAC,GAEA,OAAO/pI,KAAK6pI,YAAYvI,SAAS9iG,EAAIg/B,EAAOssE,EAAQC,IATtDC,EAAkB56G,GAFvBC,EAAK,aAAc,gBACnB6I,EAAO,wBACF8xG,GAAN,GAlBe,CAAA17G,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAW,GAGvB,IAAA+3G,EAAA,WACI,SAAAA,EAAoB94C,GAAAnxF,KAAAmxF,YAsCxB,OApCW84C,EAAAlrI,UAAAuiI,SAAP,SACI9iG,EACAg/B,EACAhiB,EACAuuF,EACAG,GAEA,GAAIA,IAAe1rG,GAAMA,GAAMx+B,KAAKmxF,UAChC,OAAO7iE,EAAAY,OAAOC,mBACV,mCAIR,IAAIgP,EAAM7P,EAAAY,OAAOC,mBACb,2BAA6BqP,GAAMx+B,KAAKmxF,YAGxCg5C,EAAY,IAiBhB,OAfI3sE,IACAr/B,GAAOgsG,EAAY,SAAW3sE,EAC9B2sE,EAAY,KAGZ3uF,IACArd,GAAOgsG,EAAY,UAAY3uF,EAC/B2uF,EAAY,KAGZJ,IACA5rG,GAAOgsG,EAAY,OAAQ,IAAI1tG,MAAO2tG,kBACtCD,EAAY,KAGThsG,GArCF8rG,EAAe76G,GAF3B2I,EAAQ,aAAc,mBACtBG,EAAO,cACK+xG,GAAb,GAAa/3G,EAAA+3G,gBAAeA,EA2C5B,IAAAI,EAAA,WACI,SAAAA,EAAoBl5C,GAAAnxF,KAAAmxF,YAqCxB,OAnCWk5C,EAAAtrI,UAAAuiI,SAAP,SACI9iG,EACAg/B,EACAhiB,EACAuuF,EACAG,GAEA,GAAIA,IAAe1rG,GAAMA,GAAMx+B,KAAKmxF,UAChC,OAAO7iE,EAAAY,OAAOC,mBACV,mCAIR,IAAIgP,EAAM7P,EAAAY,OAAOC,mBACb,2BAA6BqP,GAAMx+B,KAAKmxF,YAExCg5C,EAAY,IAiBhB,OAfI3sE,IACAr/B,GAAOgsG,EAAY,SAAW3sE,EAC9B2sE,EAAY,KAGZ3uF,IACArd,GAAOgsG,EAAY,UAAY3uF,EAC/B2uF,EAAY,KAGZJ,IACA5rG,GAAOgsG,EAAY,OAAQ,IAAI1tG,MAAO2tG,kBACtCD,EAAY,KAGThsG,GApCFksG,EAAmBj7G,GAF/B2I,EAAQ,aAAc,uBACtBG,EAAO,cACKmyG,GAAb,GAAan4G,EAAAm4G,oBAAmBA,EA9CT,CAAA94G,EAAAW,aAAAX,EAAAW,gBAAR,CAAA5D,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCEV,SAAUA,IAAS,SAAAiD,GAAQA,EAAAW,aAAAX,EAAAW,eACvB3D,QACKrxB,OAAO,cACPmc,OAAO,yBAA0B,WAAM,gBAAAg4E,GACpC,IAAI5vF,KAeJ,OAbI4vF,GACAA,EAAat9E,QAAQ,SAAAu2H,GACjB,IAAIniC,EAAYmiC,EAAYC,MAEtBpiC,aAAqB1rE,OACvB0rE,EAAY,IAAI1rE,KAAK0rE,IAEE,IAAvBA,EAAU50D,UAAyC,IAAvB40D,EAAU50D,UACtC9xC,EAAKwX,KAAKqxH,KAKf7oI,KAEV4X,OAAO,sBAAuB,WAAM,gBAACg4E,EAAczuF,EAAO4G,GACvD,IAAI/H,KAoBJ,OAlBA4vF,EAAat9E,QAAQ,SAAAu2H,GACjB,GAAIA,EAAYlqD,SACZ3+E,EAAKwX,KAAKqxH,OADd,CAKA,IAAIniC,EAAYmiC,EAAY7/F,UAEtB09D,aAAqB1rE,OACvB0rE,EAAY,IAAI1rE,KAAK0rE,IAGzB,IAAIqiC,EAAYriC,EAAUnyB,WACtBw0D,GAAa5nI,GAAS4nI,EAAYhhI,GAClC/H,EAAKwX,KAAKqxH,MAIX7oI,KAEV4X,OACG,mCACA,WAAM,gBAACg4E,EAAco5C,EAAWjhI,GAC5B,IAAI/H,KAoDJ,OAlDA4vF,EAAat9E,QAAQ,SAAAu2H,GAGjB,GAFAA,EAAYI,UAAYJ,EAAYloD,SAEhCkoD,EAAYlqD,SACZ3+E,EAAKwX,KAAKqxH,OADd,CAKA,IAAIniC,EAAYmiC,EAAY7/F,UACtB09D,aAAqB1rE,OACvB0rE,EAAY,IAAI1rE,KAAK0rE,IAEzB,IAAIqiC,EAAYriC,EAAUnyB,WAEtB4xB,EAAU0iC,EAAYzqD,QACpB+nB,aAAmBnrE,OACrBmrE,EAAU,IAAInrE,KAAKmrE,IAEvB,IAAI+iC,EAAU/iC,EAAQ5xB,YAGjBw0D,GAAaC,GAAaD,EAAYhhI,GACtCghI,EAAYC,GACTE,EAAUF,GACVE,EAAUnhI,IAEd/H,EAAKwX,KAAKqxH,GAGVE,EAAYC,GAAaE,EAAUF,GACnCH,EAAYM,gBAAkB,eAC9BN,EAAYI,UACRJ,EAAYloD,SACkC,IAA7CnK,SAASwyD,GAAaxyD,SAASuyD,IAChC,IAEJF,EAAYM,gBAAkB,GAI9BJ,EAAYhhI,GAAOmhI,EAAUnhI,GAC7B8gI,EAAYO,cAAgB,YAC5BP,EAAYI,UACRJ,EAAYloD,SAC0B,IAArCnK,SAAS0yD,GAAW1yD,SAASzuE,KAElC8gI,EAAYO,cAAgB,MAI7BppI,KAnGJ,CAAA6sB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCCV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAW,GAkBvB,IAAA44G,EAAA,WAKI,SAAAA,EACW/xG,EACAyxB,EACPq2E,EACAtzC,GAJJ,IAAAvsD,EAAAhhC,KACWA,KAAA+4B,SACA/4B,KAAAwqD,iBAMPzxB,EAAOgyG,cAAgB,KACvBhyG,EAAO6Q,YAAc,GACrB7Q,EAAOiyG,WAAY,EACnBhrI,KAAKirI,UAAYC,OAAO,0BAExBA,OAAO,uBAAuBvsI,KAAK,QAAS,WACrB,KAAfqB,KAAK5B,QACL26B,EAAO6Q,YAAc5pC,KAAK5B,MAE1B4B,KAAKmrI,qBAIbpyG,EAAOgsD,OAAO,cAAe,WACzB/jD,EAAKmqG,oBAGTpyG,EAAO60D,OAAS,SAAC36C,GACTA,GAAIs6C,EAAaK,OAAO36C,IAGhCla,EAAOqyG,eAAiB,SAAC70B,GAAyC,OAAArkF,EAAAokF,kBAAkBC,IAEpFx9E,EAAOsyG,eAAiB,WACpBtyG,EAAO6Q,YAAc,IAGzB7Q,EAAOuyG,kBAAoB,SACvB9mG,GAEAxD,EAAKuqG,oBACLxyG,EAAOyyG,eAAehnG,IAG1BzL,EAAO6W,IAAI,WAAY,WACnBrT,EAAE,QAAQk6F,IAAI,2BAgL1B,OA5KIqU,EAAA/rI,UAAAosI,gBAAA,eAAAnqG,EAAAhhC,KACIA,KAAK+4B,OAAO0yG,eAAgB,EAE5BlvG,EAAE,QAAQyZ,GAAG,wBAAyB,SAAA30C,GAClC,IAAI8C,EAASo4B,EAAEl7B,EAAE8C,QAEZA,EAAO8K,GAAG,2BACV9K,EAAOunI,UAAUz8H,GAAG,2BACpB9K,EAAOunI,UAAUz8H,GAAG,iBAErBstB,EAAE,QAAQk6F,IAAI,yBAEdz1F,EAAKjI,OAAO0yG,eAAgB,EAC5BzqG,EAAKjI,OAAOq+F,YAIpBp3H,KAAK+4B,OAAOiyG,WAAY,EACxBhrI,KAAK2C,UAGTmoI,EAAA/rI,UAAA4D,OAAA,eAAAq+B,EAAAhhC,KACI,GAAIA,KAAK+4B,OAAO6Q,YAAa,CACzB,IAAI+hG,EAAQ3rI,KAAK+4B,OAAO6Q,YAEe,MAAnC+hG,EAAMC,OAAOD,EAAM9oI,OAAS,KAC5B8oI,EAAQA,EAAM1lI,MAAM,GAAI,IAE5BjG,KAAKwqD,eAAe7nD,QACZ67B,GAAImtG,EACJtmG,SAAU,EACVipB,MAAO,aACRhqB,SAASC,KAAK,SAACu4E,GACd,IAAI+uB,EAAa7qG,EAAKjI,OAAO6Q,YACoB,MAA7CiiG,EAAWD,OAAOC,EAAWhpI,OAAS,KACtCgpI,EAAaA,EAAW5lI,MAAM,GAAI,IAElC0lI,IAAUE,GACV7qG,EAAK8qG,kBAAkBhvB,EAAQj3G,QAEvC,WACIm7B,EAAKuqG,2BAGVvrI,KAAKurI,qBAGhBT,EAAA/rI,UAAAwsI,kBAAA,WACIvrI,KAAK8rI,mBACD/yE,gBAGJ/4D,KAAK+4B,OAAO6Q,YAAc,GAC1B5pC,KAAK+4B,OAAOgzG,WAAY,EACxB/rI,KAAKgsI,iBAAmB,EACxBhsI,KAAKisI,YAAc,KACnBf,OAAO,uBAAuBgB,OAC1B,UACAlsI,KAAKmsI,iBAIbrB,EAAA/rI,UAAA+sI,kBAAA,SAAkBhvB,GACd98G,KAAK+4B,OAAOgyG,cAAgBjuB,EAC5B98G,KAAK+4B,OAAOiyG,WAAY,EAExBluB,EAAQvmE,KAA0B,IAAnBumE,EAAQj6G,OAEvB7C,KAAK+4B,OAAOgzG,UAAYjvB,EAAQvmE,KAEhCv2C,KAAKisI,YAAc,KACnBjsI,KAAKgsI,iBAAmB,EAExBd,OAAO,uBAAuBgB,OAC1B,UACAlsI,KAAKmsI,gBAGLnsI,KAAK+4B,OAAO0yG,gBACZP,OAAO,uBAAuBvsI,KAC1B,UACAqB,KAAKmsI,gBAETnsI,KAAKirI,UACA3nI,KAAK,qBACL2mB,QACAi3D,IAAI,UAAW,YAI5B4pD,EAAA/rI,UAAAotI,eAAA,SAAejpF,GACX,IAAIwrD,EAAY1uG,KAAKirI,UAChB3nI,KAAK,kDACL2mB,QACDpkB,EAAQ7F,KAAKirI,UACZ3nI,KAAK,+CACL+V,OAAO,YAKZ,GAHIrZ,KAAKisI,aACLjsI,KAAKisI,YAAY/qD,IAAI,mBAAoB,WAEvB,KAAlBh+B,EAAMkpF,QAEkB,MAApBpsI,KAAKisI,YAAqBjsI,KAAKgsI,iBAAmB,GAElDhsI,KAAKgsI,mBACDhsI,KAAKgsI,iBAAmBnmI,EAAMhD,OAAS,GACnCgD,EAAMwmI,GAAGrsI,KAAKgsI,kBAAkBrD,SAAS,WACzC3oI,KAAKgsI,yBAEd,GAAsB,KAAlB9oF,EAAMkpF,QAEW,MAApBpsI,KAAKisI,YACLjsI,KAAKgsI,iBAAmBnmI,EAAMhD,OAAS,GAEvC7C,KAAKgsI,mBACDhsI,KAAKgsI,iBAAmB,EACpBnmI,EAAMwmI,GAAGrsI,KAAKgsI,kBAAkBrD,SAAS,WACzC3oI,KAAKgsI,mBACNhsI,KAAKgsI,iBAAmB,QAEhC,GAAsB,KAAlB9oF,EAAMkpF,QAEb,GAAIpsI,KAAKisI,YACLjsI,KAAKisI,YACA3oI,KAAK,KACL2mB,QACAqiH,QAAQ,cACV,GAAI59B,EAAU7rG,OAAS,EAK1B,OAJA6rG,EACKprG,KAAK,KACL2mB,QACAqiH,QAAQ,UACN,EA+Bf,OA3BItsI,KAAKgsI,iBAAmBnmI,EAAMhD,OAAS,EACvC7C,KAAKgsI,iBAAmBnmI,EAAMhD,OAAS,EAClC7C,KAAKgsI,iBAAmB,IAAGhsI,KAAKgsI,iBAAmB,GAEtC,KAAlB9oF,EAAMkpF,SAAoC,KAAlBlpF,EAAMkpF,UAC9BpsI,KAAKisI,YAAcpmI,EAAMwmI,GAAGrsI,KAAKgsI,mBAIjChsI,KAAKisI,aACLjsI,KAAKisI,YAAY/qD,IAAI,mBAAoB,WAGzClhF,KAAKisI,cACAjsI,KAAKisI,YAAYh9H,GAAG,4BAMrBjP,KAAKirI,UACA3nI,KAAK,qBACL2mB,QACAi3D,IAAI,UAAW,UARpBlhF,KAAKirI,UACA3nI,KAAK,qBACL2mB,QACAi3D,IAAI,UAAW,UAUxBlhF,KAAKisI,aACc,KAAlB/oF,EAAMkpF,SAAoC,KAAlBlpF,EAAMkpF,SA1N9BtB,EAA0B17G,GADtC8I,EAAO,SAAU,iBAAkB,kBAAmB,iBAC1C4yG,GAAb,GAAa54G,EAAA44G,2BAA0BA,EAlBhB,CAAAv5G,EAAAW,aAAAX,EAAAW,gBAAR,CAAA5D,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCHV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAW,GACvB,IAAAq6G,EAAA,oBAAAA,IACIvsI,KAAAs4C,SAAW,IACXt4C,KAAA6sC,YAAc,sDACd7sC,KAAA03B,WAAaxF,EAAA44G,2BACb9qI,KAAAs3B,SAAU,EACVt3B,KAAAk5C,YAAa,EACbl5C,KAAAqvC,OAAUm8F,eAAgB,KAK9B,OAHWe,EAAAltI,QAAP,WACI,OAAO,WAAM,WAAIktI,IAEzBA,EAXA,GAAar6G,EAAAq6G,0BAAyBA,EAYtCh+G,QACKrxB,OAAO,cACPy4C,UAAU,mBAAoB42F,EAA0BltI,WAftC,CAAAkyB,EAAAW,aAAAX,EAAAW,gBAAR,CAAA5D,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAAW,aAAAX,EAAAW,eAsBvB3D,QAAQrxB,OAAO,cAAcsxB,QAAQ,yBACjC,YACA,SAACC,GACG,OAAAA,EACI,wCAGIsgD,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIvH,KAAM,EAAGpC,SAAU,KAE7C6vE,mBACIxmF,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUxQ,GAAI,KAEpC6F,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIxQ,GAAI,KAE9B4Z,UACI1pB,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,QAASxQ,GAAI,KAEnC6pE,MACI35E,OAAQ,OACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,KAEtBv6B,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIxQ,GAAI,QAE9B2J,QACIzZ,OAAQ,SACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIxQ,GAAI,QAE9BguG,0BACI99G,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,sBACRxQ,GAAI,MACJiJ,KAAM,EACNpC,SAAU,KAGlB0vE,iBACIrmF,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,aACRxQ,GAAI,MACJiJ,KAAM,EACNpC,SAAU,KAGlB/hC,MACIorB,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,OACRxQ,GAAI,MACJiJ,KAAM,EACNpC,SAAU,KAGlBonG,cACI/9G,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,sBAjGvB,CAAA1gB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCKV,SAAUA,IAAS,SAAAiD,GAAQA,EAAAm7G,YAAAn7G,EAAAm7G,cASvB,WACI,SAAAC,EACW5pF,EACChqB,EACDyoB,GAHX,IAAAxgB,EAAAhhC,KACWA,KAAA+iD,aACC/iD,KAAA+4B,SACD/4B,KAAAwhD,SAEPzoB,EAAO6zG,OAAS5sI,KAAKosC,UACrBrT,EAAO8zG,OAAS7sI,KAAK8sI,6BACrB/zG,EAAOg0G,gBAAiB,EAExBhqF,EAAWnT,IAAI,eAAgB,WAC3B5vC,KAAKgtI,eACLj0G,EAAO8zG,OAAS7sI,KAAKitI,+BAGzBlqF,EAAWnT,IACP,oBACA,SACIsT,EACAC,EACAC,EACAC,EACAC,GAEIH,EAAQd,aAAegB,EAAU3lD,OACjCq7B,EAAO8zG,OAAS7rG,EAAK8rG,6BACrB/zG,EAAOg0G,gBAAiB,KAKpChqF,EAAWnT,IACP,sBACA,SACIsT,EACAC,EACAC,EACAC,EACAC,GAEAvqB,EAAO8zG,OAAS7rG,EAAK8rG,6BACrB/zG,EAAOg0G,gBAAiB,IAIhChqF,EAAWnT,IACP,oBACA,SACIsT,EACAC,EACAC,EACAC,EACAC,EACA/yC,GAEAwoB,EAAO8zG,OAAS7rG,EAAK8rG,6BACrB/zG,EAAOg0G,gBAAiB,IAK7BJ,EAAA5tI,UAAAqtC,QAAP,WACIpsC,KAAK+4B,OAAO8zG,OAAS7sI,KAAK8sI,8BAGtBH,EAAA5tI,UAAA+tI,2BAAR,WACI,OAAI9sI,KAAKwhD,OAAO9+C,SAAS,oBAAsB1C,KAAKwhD,OAAO9+C,SAAS,sBACvDuyF,MAAO,QAASi4C,QAAQ,GAC1BltI,KAAKwhD,OAAO9+C,SAAS,uBAAyB1C,KAAKwhD,OAAO9+C,SAAS,yBACjEuyF,MAAO,SAAUi4C,QAAQ,IAEzBj4C,MAAO,OAAQi4C,QAAQ,IAvEtCP,EAAmBv9G,GAFxBmJ,EAAW,YAAa,uBACxBL,EAAO,aAAc,SAAU,WAC1By0G,GAAN,GATe,CAAAr+G,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCFV,SAAUA,GAASA,EAAAwe,kBAAAxe,EAAAwe,oBAWf,WAaI,SAAAqgG,EACY3rF,EACAhD,EACAY,EACAumB,GAHA3lE,KAAAwhD,SACAxhD,KAAAw+C,oBACAx+C,KAAAo/C,wBACAp/C,KAAA2lE,YAGLwnE,EAAApuI,UAAAqtC,QAAP,eAAApL,EAAAhhC,KACIA,KAAKy/B,KAAOj9B,OAAOi9B,KAEnB,IAAMgwB,EAAqB,SAAAn2C,GAAK,OAAAA,SAEhCtZ,KAAKotI,kBAAoBptI,KAAKw+C,kBAAkBvlB,OAC3CtqB,IAAI,SAAA2K,GAAK,OAAAA,GAAKA,EAAEosB,QAChBrsB,OAAOo2C,GACPv2B,uBACAc,UAAU,SAAA1gB,GACP0nB,EAAKqsG,UAAY/zH,EAAE4sB,QAG3BlmC,KAAKstI,sBAAwBttI,KAAKo/C,sBAAsBnmB,OACnDtqB,IAAI,SAAA2K,GAAK,OAAAA,GAAKA,EAAE4lC,cAAgB5lC,EAAE4lC,aAAakB,OAAS9mC,EAAE4lC,aAAakB,MAAM/J,SAC7Eh9B,OAAOo2C,GACPv2B,uBACAc,UAAU,SAAA1gB,GACP0nB,EAAKusG,cAAgBj0H,EAAE4sB,QAG/BlmC,KAAKwtI,oBAAsBxtI,KAAK2lE,UAAU1sC,OACrCtqB,IAAI,SAAA2K,GAAK,OAAAA,GAAKA,EAAE8hB,UAChBlC,uBACAc,UAAU,SAAA1gB,GAAK,OAAC0nB,EAAKysG,cAAgBn0H,IAE1CtZ,KAAK0tI,kBAAoB1tI,KAAK2lE,UAAU1sC,OACnCtqB,IAAI,SAAA2K,GAAK,OAAAA,GAAKA,EAAEusD,gBAChBxsD,OAAOo2C,GACPv2B,uBACAc,UAAU,SAAA1gB,GAAK,OAAC0nB,EAAK2sG,uBAAyBr0H,EAAEzW,SAGrD7C,KAAK4tI,eAAiBt/G,EAAAY,OAAO4L,YAAY7B,OACpC5f,OAFa,SAAAC,GAAK,OAAAA,GAAKA,EAAEyhB,SAGzBpsB,IAAI,SAAA2K,GAAK,OAAAA,EAAEyhB,OAAOI,0BAClBnB,UAAU,SAAA1gB,GAAK,OAAC0nB,EAAK3D,yBAA2B/jB,KAGlD6zH,EAAApuI,UAAA8uI,8BAAP,WACI,OAAO7tI,KAAKwhD,OAAO9+C,SAAS,uBAGzByqI,EAAApuI,UAAA4tC,WAAP,WACI3sC,KAAKotI,kBAAkBxgG,UACvB5sC,KAAKstI,sBAAsB1gG,UAC3B5sC,KAAK0tI,kBAAkB9gG,UACvB5sC,KAAKwtI,oBAAoB5gG,UACzB5sC,KAAK4tI,eAAehhG,WApEtBugG,EAAsB/9G,GAL3BqI,EAAU,mBACPE,SAAU,iBACVkV,YAAa,0CAEhB3U,EAAO,SAAU,oBAAqB,wBAAyB,cAC1Di1G,GAAN,GAXJ,CAAU7+G,WCHV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA6B,UAAA7B,EAAA6B,YAYvB7E,QAAQrxB,OAAO,WAAWsxB,QAAQ,mBAC9B,YACA,SAAAC,GACI,OAAOA,EACH,kCAGI4V,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB77B,QACImrI,OAAQ,MACR9/H,SAAS,EACT2gB,QACIqgB,OAAQ,SACRxQ,GAAI,GACJiJ,KAAM,EACNpC,SAAU,UA/BnB,CAAA/W,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCKV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA6B,GAiCvB,SAASu8D,EACLjhE,EACA1gB,EACA2gB,EACAuQ,GAEA,OAASxQ,OAAMA,EAAE1gB,QAAOA,EAAE2gB,OAAMA,EAAEuQ,QAAOA,GAG7C3Q,QAAQrxB,OAAO,WAAWsxB,QAAQ,oBAC9B,YACA,SAACC,GACG,OAAOA,EACH,8CAGI4V,QAASsrD,EAAY,OAAO,GAASnxD,GAAI,QACzCs/E,iBAAkBnuB,EAAY,OAAO,GACjC3gD,OAAQ,SACRxQ,GAAI,YAERm7E,wBAAyBhqB,EAAY,OAAO,GACxC3gD,OAAQ,SACRxQ,GAAI,UACJyxB,UAAW,YAEf2iD,2BAA4BjjB,EAAY,OAAO,GAC3C3gD,OAAQ,SACRxQ,GAAI,MACJyxB,UAAW,eAEfw8D,oBAAqB98B,EAAY,OAAO,GACpC3gD,OAAQ,SACRxQ,GAAI,YAERw/E,+BAAgCruB,EAAY,OAAO,GAC/C3gD,OAAQ,SACRxQ,GAAI,UACJyxB,UAAW,0BAEf89E,yBAA0Bp+C,EAAY,OAAO,GACzCnxD,GAAI,UACJyxB,UAAW,0BAEfgjD,YAAatjB,EAAY,OAAO,GAC5BnxD,GAAI,MACJyxB,UAAW,aAEf+9E,aAAcr+C,EAAY,OAAO,GAC7B3gD,OAAQ,SACRxQ,GAAI,YAER0/E,yBAA0BvuB,EAAY,OAAO,GACzC3gD,OAAQ,qBACRxQ,GAAI,aAvFD,CAAAjN,EAAA6B,UAAA7B,EAAA6B,aAAR,CAAA9E,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCLVC,QAAQrxB,OAAO,WAAWmc,OAAO,iBAAkB,WAG/C,OAAO,SAASjI,GACZ,OAAQA,GACJ,IAAK,SACD,MAAO,aACX,IAAK,SACD,MAAO,SACX,IAAK,UACD,MAAO,YACX,IAAK,YACD,MAAO,cACX,QACI,MAAO,OCdvBmd,QAAQrxB,OAAO,WAAWmC,QAAQ,oBAC9B,YACA,SAAAovB,GACI,OAAAA,EACI,mCAGIsgD,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,WAEJk4F,UACIn4F,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,QAASvH,KAAM,EAAGpC,SAAU,KAElDhB,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB2J,QACIzZ,OAAQ,SACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB6pE,MACI35E,OAAQ,OACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB/pB,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,aCnClC,SAAUlQ,IAAS,SAAAiD,GAAQA,EAAA6B,UAAA7B,EAAA6B,YAoBvB7E,QAAQrxB,OAAO,WAAWsxB,QAAQ,uBAC9B,YACA,SAACC,GACG,OAAAA,EACI,sCAGI4V,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElBuwC,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,MAAOxQ,GAAI,KAEjC77B,QACI+rB,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUxQ,GAAI,QAEpC6pE,MACI35E,OAAQ,OACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,MAAOxQ,GAAI,KAEjC/pB,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUxQ,GAAI,KAEpC2J,QACIzZ,OAAQ,SACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUxQ,GAAI,aAvDrC,CAAAlQ,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA6B,UAAA7B,EAAA6B,YAEvB,oBAAA66G,KACWA,EAAAlvI,UAAAiwB,UAAP,SAAiBiqD,GACb,SAAKA,IAAaA,EAASr5C,UAGtBq5C,EAAS2uB,SACV,IAAInrE,KAAKw8C,EAASkvB,UAAUtjG,YAAc,IAAI43B,MANpDwxG,EAAsB7+G,GAD3BC,EAAK,UAAW,qBACX4+G,GAAN,GAFe,CAAA3/G,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAVC,QAAQrxB,OAAO,WAAWmC,QAAQ,0BAC9B,YACA,SAAAovB,GACI,OAAAA,EACI,yCAGIsgD,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,WAEJk4F,UACIn4F,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,QAASvH,KAAM,EAAGpC,SAAU,KAElDhB,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB2J,QACIzZ,OAAQ,SACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUxQ,GAAI,QAEpC6pE,MACI35E,OAAQ,OACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,MAAOxQ,GAAI,KAEjC/pB,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUxQ,GAAI,UCnCpD,SAAUlQ,IAAS,SAAAiD,GAAQA,EAAA6B,UAAA7B,EAAA6B,YAiBvB7E,QAAQrxB,OAAO,WAAWsxB,QAAQ,2BAC9B,YACA,SAACC,GACG,OAAAA,EACI,0CAGI2pB,UACI1pB,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,QAEtBrsC,QACI+rB,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUxQ,GAAI,UAhCrC,CAAAlQ,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAVC,QAAQrxB,OAAO,WAAWmC,QAAQ,uBAC9B,YACA,SAAAovB,GACI,OAAAA,EACI,sCAGIsgD,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,WAEJk4F,UACIn4F,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,QAASvH,KAAM,EAAGpC,SAAU,KAElDhB,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,aCflC,SAAUlQ,IAAS,SAAAiD,GAAQA,EAAA6B,UAAA7B,EAAA6B,YAmBvB7E,QAAQrxB,OAAO,WAAWsxB,QAAQ,mCAC9B,YACA,SAACC,GACG,OAAAA,EACI,2DAGIsgD,QACIrgD,OAAQ,MACR1gB,SAAS,GAEb4oH,iBACIloG,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,aAAcgqC,WAAY,aAjCjD,CAAA1qD,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCDV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA6B,GAAQA,EAAA86G,QAAA96G,EAAA86G,UAS/B3/G,QAAQrxB,OAAO,WAAWsxB,QAAQ,gBAC9B,YACA,SAAAC,GACI,OAAOA,EACH,0CAGI4V,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB+0D,mBACI7kE,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,YAAaxQ,GAAI,QAEvCo4F,iBACIloG,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUihB,UAAW,aAAczxB,GAAI,QAE7D77B,QACI+rB,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUxQ,GAAI,WAEpC2vG,4BACIz/G,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,0BAA2BxQ,GAAI,aAvC9C,CAAAjN,EAAA6B,UAAA7B,EAAA6B,aAAR,CAAA9E,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCDV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA6B,GAAQA,EAAAg7G,aAAAh7G,EAAAg7G,eAU/B7/G,QAAQrxB,OAAO,WAAWsxB,QAAQ,qBAC9B,YACA,SAACC,GACG,OAAAA,EACI,4CAGIq+F,aACIp+F,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB45C,YACI1pD,OAAQ,OACR1gB,SAAS,EACTghC,OAAQ,GACRrgB,QAAU6P,GAAI,UA1BX,CAAAjN,EAAA6B,UAAA7B,EAAA6B,aAAR,CAAA9E,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA8C,GAAcA,EAAAg1E,MAAAh1E,EAAAg1E,QAyDrC96E,QAAQrxB,OAAO,iBAAiBsxB,QAAQ,eACpC,YACA,SAACC,GACG,OAAOA,EACH,0CAGIsgD,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIvH,KAAM,EAAGpC,SAAU,KAE7CynD,iBACIp+D,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,aACRxQ,GAAI,GACJiJ,KAAM,EACNpC,SAAU,GACVgpG,SAAU//G,EAAAY,OAAOC,mBAAmB,wBAG5CkV,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,MAAO0mC,aAAc,GAAIopE,MAAM,EAAMD,SAAU//G,EAAAY,OAAOC,mBAAmB,wBAE3FipB,UACI1pB,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAO,MAAOgW,IAAK,SAEjCupF,yBACI7/G,OAAQ,MACR1gB,SAAS,EACT2gB,QACI6P,GAAI,MACJ0mC,aAAc,gBACdopE,MAAM,IAGdE,aACI9/G,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,aAEtBy0B,mBACI/0C,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,MAAOyxB,UAAW,sBAEpC06B,uBACIxsD,IAAK,kCACLzP,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUlX,MAAO,SAAU42H,SAAU//G,EAAAY,OAAOC,mBAAmB,wBAEnExsB,QACIw7B,IAAK,yBACLzP,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUwnB,EAAG,KAAM1O,KAAM,EAAGpC,SAAU,GAAIgpG,SAAU//G,EAAAY,OAAOC,mBAAmB,wBAElFs/G,2CACI//G,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OACI,6CACJxQ,GAAI,GACJiJ,KAAM,EACNpC,SAAU,IAGlBgnD,SACI39D,OAAQ,OACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,WAClB+gB,iBAAkB,SAACroB,GACf,OAAOra,KAAKC,UAAUoa,UAzIvB,CAAAnW,EAAA8C,gBAAA9C,EAAA8C,mBAAR,CAAA/F,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCHV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA8C,gBAAA9C,EAAA8C,kBAQvB9F,QAAQrxB,OAAO,iBAAiBmC,QAAQ,6BACpC,YACA,SAACovB,GACG,OAAAA,EACI,wCAGIsgD,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU8Y,KAAM,EAAGpC,SAAU,GAAIgpG,SAAU//G,EAAAY,OAAOC,mBAAmB,wBAEzEkV,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,MAAO6vG,SAAU//G,EAAAY,OAAOC,mBAAmB,wBAE7Dm6E,YACI56E,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,OACRxQ,GAAI,MACJiJ,KAAM,EACNpC,SAAU,GACVgpG,SAAU//G,EAAAY,OAAOC,mBAAmB,wBAG5CinF,YACI1nF,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,QAASxQ,GAAI,aAvCpC,CAAAlQ,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA8C,gBAAA9C,EAAA8C,kBAuBvB9F,QAAQrxB,OAAO,iBAAiBmC,QAAQ,mBACpC,YACA,SAACovB,GACG,OAAAA,EACI,kCAGIsgD,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU8Y,KAAM,EAAGpC,SAAU,KAEjCqpG,SACIhgH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIvH,KAAM,EAAGpC,SAAU,KAE7CikE,YACI56E,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,OACR1sC,KAAM,KACNk8B,GAAI,GACJl6B,MAAO,EACPmjC,KAAM,EACNpC,SAAU,KAGlBhB,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,OAAQxQ,GAAI,GAAI8vG,MAAM,IAE5CjmC,MACI35E,OAAQ,OACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,KAEtBv6B,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,KAEtB2/F,iBACIjgH,OAAQ,SACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,yBAtEvB,CAAA1gB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA8C,gBAAA9C,EAAA8C,kBAuBvB9F,QAAQrxB,OAAO,iBAAiBmC,QAAQ,sBACpC,YACA,SAACovB,GACG,OAAAA,EACI,sCAGIsgD,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIvH,KAAM,EAAGpC,SAAU,KAE7CqpG,SACIhgH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIvH,KAAM,EAAGpC,SAAU,KAE7CikE,YACI56E,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,OACRxQ,GAAI,GACJl6B,MAAO,EACPmjC,KAAM,EACNpC,SAAU,GACVgpG,SAAU//G,EAAAY,OAAOC,mBAAmB,wBAG5CkV,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIxQ,GAAI,KAE9BowG,WACIlgH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUxQ,GAAI,QAEpC6pE,MACI35E,OAAQ,OACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,KAEtBv6B,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,KAEtB2/F,iBACIjgH,OAAQ,SACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,yBA3EvB,CAAA1gB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCGV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA8C,GAAcA,EAAAw6G,cAAAx6G,EAAAw6G,gBAoBrCtgH,QAAQrxB,OAAO,iBAAiBsxB,QAAQ,uBACpC,YACA,SAACC,GACG,OAAAA,EACI,uCAGI4V,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB2mC,mBACIz2C,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,YAAaxQ,GAAI,QAEvCuwC,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,WAEJmgH,aACIpgH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,UAEtBoJ,UACI1pB,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,QAEtBv6B,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,aAvDX,CAAAjN,EAAA8C,gBAAA9C,EAAA8C,mBAAR,CAAA/F,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCHV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA8C,gBAAA9C,EAAA8C,kBAWvB9F,QAAQrxB,OAAO,iBAAiBsxB,QAAQ,qBACpC,YACA,SAACC,GACG,OAAAA,EACI,oCAGI4V,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,OAAQxQ,GAAI,KAElC4kC,aACI10C,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,YAAaxQ,GAAI,KAEvCquD,WACIn+D,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,YAAaxQ,GAAI,aA/BxC,CAAAlQ,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCEV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA8C,GACPA,EAAAo2E,eAAhB,SAA+BtqG,GAG3B,IAFA,IAAMkjE,KAECljE,GACHkjE,EAAKpmD,QAAQ9c,GACbA,EAAMA,EAAIgiD,OAGd,OAAOkhB,GAGX90C,QACKrxB,OAAO,iBACP69B,QACG,iBACA,qBACA,SAASsmB,EAAgBC,GAGrBA,EAAmBS,KAAK,cAAe,yBAEvCV,EAAepkB,MAAM,iBACjBkB,IAAK,cACLgkB,OAAQ,OACRG,OACIO,SACIhW,YACI,0DAMvBxzB,OAAO,cAAe,WACnB,OAAO,SAAS+1B,GACZ,OAAIA,GAAiC,cAAxBA,EAAM9O,cACR,eAEJ,uBAGdqV,UAAU,4BACP,WACI,OACIo5F,QAAS,UACTn5F,KAAI,SAACvG,EAAOwG,EAASC,EAAOk5F,GACxBA,EAAUC,SAASh2H,KAAK,SAASi2H,GAC7B,IAAMC,EAAmBD,EAAW53G,QAChC,qBACA,IAQJ,OALI63G,IAAqBD,IACrBF,EAAUI,cAAcD,GACxBH,EAAUK,WAGPF,SA1DR,CAAA59G,EAAA8C,gBAAA9C,EAAA8C,mBAAR,CAAA/F,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCFV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA/B,OAAA+B,EAAA/B,SAWvBjB,QAAQrxB,OAAO,QAAQsxB,QAAQ,uBAC3B,YACA,SAACC,GACG,OAAAA,EACI,sCAGI4V,SACI3V,OAAQ,MACRC,QAAU6P,GAAI,OACdxwB,SAAS,GAEbshI,qBACI5gH,OAAQ,MACRC,QAAUqgB,OAAQ,kBAAmBxQ,GAAI,OACzCxwB,SAAS,GAEbuhI,sBACI7gH,OAAQ,MACRC,QACIqgB,OAAQ,uBACRvH,KAAM,EACNpC,SAAU,IAEdr3B,SAAS,GAEbwhI,cACI9gH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,kBAEtBygG,UACI/gH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,WAAYvH,KAAM,EAAGpC,SAAU,KAErDqqG,kBACIhhH,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,mBACRvH,KAAM,EACNpC,SAAU,KAGlByC,QACIpZ,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,MAAOwQ,OAAQ,WAEjCjH,QACIrZ,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,MAAOwQ,OAAQ,WAEjC7G,QACIzZ,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,MAAOwQ,OAAQ,WAEjC2gG,6BACIjhH,OAAQ,MACR1gB,SAAS,EACT2gB,QACIihH,cAAe,iBACfC,WAAY,cACZ7gG,OAAQ,qCA7EjB,CAAA1gB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA/B,GAWvB,IAAAsgH,EAAA,WACI,SAAAA,EACW/2G,EACPq9C,EACA25D,GAFO/vI,KAAA+4B,SAIPA,EAAOi3G,+BAAiC,WACpCD,EACK/xI,KACGwgC,GAAIzF,EAAOk3G,0BAA0BC,iBAExC5rG,SAASC,KAAK,SAAA0qC,GACX,OAAAmH,EACI,mDAEI53C,GAAI,mBACJ46C,WAAY,yBACZ1hD,WAAY,4BAGZu3C,KAAIA,EACJkhE,mBAAmB,OAM/C,OA3BaL,EAAwC1gH,GAFpDmJ,EAAW,OAAQ,4CACnBL,EAAO,SAAU,eAAgB,yBACrB43G,GAAb,GAAatgH,EAAAsgH,yCAAwCA,EAX9B,CAAAv+G,EAAA/B,OAAA+B,EAAA/B,UAAR,CAAAlB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA/B,GACvB,IAAA4gH,EAAA,oBAAAA,IAEIpwI,KAAAs4C,SAAW,KACXt4C,KAAA6sC,YACI,+DACJ7sC,KAAAs3B,SAAU,EACVt3B,KAAA03B,WAAalI,EAAAsgH,yCACb9vI,KAAAqvC,OACIxvC,MAAO,IACPowI,0BAA2B,KAMnC,OAHWG,EAAA/wI,QAAP,WACI,OAAO,WAAM,WAAI+wI,IAEzBA,EAfA,GAAa5gH,EAAA4gH,wCAAuCA,EAiBpD7hH,QACKrxB,OAAO,QACPy4C,UACG,iCACAy6F,EAAwC/wI,WAtBzB,CAAAkyB,EAAA/B,OAAA+B,EAAA/B,UAAR,CAAAlB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA/B,GAYvB,IAAA6gH,EAAA,WACI,SAAAA,EACWt3G,EACPq9C,EACA25D,GAFO/vI,KAAA+4B,SAIPA,EAAOu3G,8BAAgC,WACnCP,EACK/xI,KACGwgC,GAAIzF,EAAOk3G,0BAA0BC,iBAExC5rG,SAASC,KAAK,SAAA0qC,GACX,OAAAmH,EACI,sDAEI53C,GAAI,kBACJ46C,WAAY,wBACZ1hD,WAAY,+BAGZu3C,KAAIA,OAMhC,OA1BaohE,EAAuCjhH,GAFnDmJ,EAAW,OAAQ,2CACnBL,EAAO,SAAU,eAAgB,yBACrBm4G,GAAb,GAAa7gH,EAAA6gH,wCAAuCA,EAZ7B,CAAA9+G,EAAA/B,OAAA+B,EAAA/B,UAAR,CAAAlB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA/B,GACvB,IAAA+gH,EAAA,oBAAAA,IAEIvwI,KAAAs4C,SAAW,KACXt4C,KAAA6sC,YACI,8DACJ7sC,KAAAs3B,SAAU,EACVt3B,KAAA03B,WAAalI,EAAA6gH,wCACbrwI,KAAAqvC,OACIxvC,MAAO,IACPowI,0BAA2B,KAMnC,OAHWM,EAAAlxI,QAAP,WACI,OAAO,WAAM,WAAIkxI,IAEzBA,EAfA,GAAa/gH,EAAA+gH,uCAAsCA,EAiBnDhiH,QACKrxB,OAAO,QACPy4C,UACG,gCACA46F,EAAuClxI,WAtBxB,CAAAkyB,EAAA/B,OAAA+B,EAAA/B,UAAR,CAAAlB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAAikC,OAAAjkC,EAAAikC,SAavBjnC,QAAQrxB,OAAO,QAAQsxB,QAAQ,0BAC3B,YACA,SAAAC,GACI,OAAAA,EACI,qDAGI+hH,SACI9hH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIxQ,GAAI,MAAOg/B,MAAO,GAAIhiB,OAAQ,KAExDi1F,iBACI/hH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,YAEtB0hG,gBACIhiH,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,SACRxQ,GAAI,MACJg/B,MAAO,GACPhiB,OAAQ,KAGhBm1F,uBACIjiH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUihB,UAAW,iBA3C5C,CAAA3hC,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCEV,SAAUA,IAAS,SAAAiD,GAAQA,EAAAq/G,aAAAr/G,EAAAq/G,eASvBriH,QAAQrxB,OAAO,cAAcsxB,QAAQ,sBACjC,YACA,SAAAC,GACI,OAAAA,EACI,qCAGIoiH,yBACIniH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,iCAnBvB,CAAA1gB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCCV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA6D,UAAA7D,EAAA6D,YAqBvB7G,QAAQrxB,OAAO,WAAWsxB,QAAQ,kBAC9B,YACA,SAAAC,GACI,OAAAA,EACI,iCAGI4V,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,gBAAiBxQ,GAAI,QAE3CsyG,YACIpiH,OAAQ,MACR1gB,SAAS,EACTmwB,IAAK,sCACLxP,QAAU+5E,SAAU,cAExBqoC,mBACIriH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,oBAAqB1qC,MAAO,SA1CnD,CAAAgqB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCHV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA6D,UAAA7D,EAAA6D,YAuBvB7G,QAAQrxB,OAAO,WAAWsxB,QAAQ,kBAC9B,YACA,SAAAC,GACI,OAAAA,EACI,iCAGIsgD,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,WAEJ0V,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB6pE,MACI35E,OAAQ,OACR1gB,SAAS,EACT2gB,WAEJla,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,WAEJwZ,QACIzZ,OAAQ,SACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElBqoF,UACIn4F,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,QAASvH,KAAM,EAAGpC,SAAU,KAElD2rG,gBACItiH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,gBAEtBiiG,eACIviH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,WAAYxQ,GAAI,OAEtC77B,QACI+rB,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,SACRxQ,GAAI,MACJ0yG,WAAY,cACZC,UAAU,EACV1pG,KAAM,EACNpC,SAAU,KAGlB+rG,kBACI1iH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,WAAYvH,KAAM,EAAGpC,SAAU,UArFtD,CAAA/W,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA6D,UAAA7D,EAAA6D,YAWvB7G,QAAQrxB,OAAO,WAAWsxB,QAAQ,4BAC9B,YACA,SAAAC,GACI,OAAAA,EACI,2CAGIsgD,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,WAEJ0V,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,WAEJk4F,UACIn4F,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,WAAYvH,KAAM,EAAGpC,SAAU,KAErD5wB,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,WAEJ05E,MACI35E,OAAQ,OACR1gB,SAAS,EACT2gB,WAEJwZ,QACIzZ,OAAQ,SACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,UA9CnB,CAAAlQ,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCIV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA6D,UAAA7D,EAAA6D,YAiBvB7G,QAAQrxB,OAAO,WAAWsxB,QAAQ,oBAC9B,YACA,SAAAC,GAEI,OAAOA,EADM,qCAKL4iH,6BACI3iH,OAAQ,MACR1gB,SAAS,EACT2gB,QACI2iH,gBAAiB,mBACjB3sI,KAAM,QACNyrE,MAAO,SACPmhE,SAAU,mBAhCnB,CAAAjjH,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCCV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA6D,UAAA7D,EAAA6D,YA6CvB7G,QAAQrxB,OAAO,eAAesxB,QAAQ,yBAClC,YACA,SAAAC,GAEI,OAAOA,EADM,yCAKL4V,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElBqwC,aACIngD,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,MAAOswC,MAAO,aAEhC0iE,+BACI9iH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,cAAexQ,GAAI,QAEzCizG,UACI/iH,OAAQ,OACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,WACRlI,OAAQ,UACR6jC,WAAY,cACZ+mE,SAAU,YACVC,SAAU,cAGlBC,wBACIljH,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,sBACRlI,OAAQ,UACR4qG,SAAU,YACVC,SAAU,cAGlBE,YACInjH,OAAQ,OACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,SAGhB8iG,qBACIpjH,OAAQ,OACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,kBAGhB+iG,YACIrjH,OAAQ,OACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,eAGhB2zE,QACIj0F,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,WAGhBgjG,MACItjH,OAAQ,OACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,cAzHjB,CAAA1gB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCFV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA6D,UAAA7D,EAAA6D,YAuCvB7G,QAAQrxB,OAAO,WAAWsxB,QAAQ,6BAC9B,YACA,SAAAC,GACI,OAAAA,EACI,4CAGIqgH,aACIpgH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIvH,KAAM,EAAGz+B,KAAM,KAEzCq/F,MACI35E,OAAQ,OACR1gB,SAAS,EACT2gB,WAEJla,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,WAEJwZ,QACIzZ,OAAQ,SACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB6F,SACIlG,IAAK,gCACLzP,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB77B,QACI+rB,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,SACRxQ,GAAI,MACJ0yG,WAAY,cACZzpG,KAAM,EACNpC,SAAU,KAGlB4sG,uBACIvjH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,4BAtFvB,CAAA1gB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCHV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA6D,UAAA7D,EAAA6D,YAQvB7G,QAAQrxB,OAAO,WAAWsxB,QAAQ,6BAC9B,YACA,SAAAC,GACI,OAAAA,EACI,4CAGIsgD,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,WAEJ0V,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,WAEJk4F,UACIn4F,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,WAAYvH,KAAM,EAAGpC,SAAU,KAErD5wB,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,WAEJ05E,MACI35E,OAAQ,OACR1gB,SAAS,EACT2gB,WAEJwZ,QACIzZ,OAAQ,SACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,UA3CnB,CAAAlQ,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA6D,IAAQ,SAAA88G,GA8C/B,IAAAC,EAAA,WAcI,SAAAA,EACYp5G,EACAq5G,EACAC,EACAC,EACAC,EACAp/C,EACAq/C,GANAxyI,KAAA+4B,SACA/4B,KAAAoyI,iBACApyI,KAAAqyI,iBACAryI,KAAAsyI,wBACAtyI,KAAAuyI,iBACAvyI,KAAAmzF,eACAnzF,KAAAwyI,2BAjBLxyI,KAAAyyI,cACAzyI,KAAA0mE,OAAsB,KACtB1mE,KAAA0yI,OAAsB,KACtB1yI,KAAA2yI,oBAAgD,KAChD3yI,KAAAy0D,OAAS,GAeZz0D,KAAKizE,KAAOl6C,EAAOk6C,KAEnBjzE,KAAK4yI,YAAY5yI,KAAKizE,KAAM,MA0KpC,OAvKWk/D,EAAApzI,UAAA8zI,YAAP,WACI,OAAQ7yI,KAAK0mE,QAAU1mE,KAAK0mE,OAAOpiE,MAAQ,GAGxC6tI,EAAApzI,UAAA+zI,YAAP,WACI,OAAO9yI,KAAK0mE,QAAgC,IAAtB1mE,KAAK0mE,OAAOpiE,OAG/B6tI,EAAApzI,UAAAg0I,sBAAP,WACI,QAAO/yI,KAAK0yI,QAGTP,EAAApzI,UAAAi0I,kBAAP,WACI,OAAoC,OAA7BhzI,KAAK2yI,qBAGTR,EAAApzI,UAAAynD,OAAP,WACIxmD,KAAK+4B,OAAOk+E,gBAGTk7B,EAAApzI,UAAAk0I,aAAP,WACIjzI,KAAK+4B,OAAOq4F,cACRpxH,KAAKyyI,WACLzyI,KAAK0yI,OACL1yI,KAAK2yI,oBACL3yI,KAAKy0D,OACLz0D,KAAKs2H,OAASt2H,KAAKs2H,OAAO93F,GAAK,KAC/Bx+B,KAAKkzI,iBAAmBlzI,KAAKkzI,iBAAiB10G,GAAK,OAIpD2zG,EAAApzI,UAAAo0I,gBAAP,WACI,OACInzI,KAAK0mE,QACL1mE,KAAK0yI,QACL1yI,KAAK2yI,qBACL3yI,KAAK2yI,oBAAoBS,aACvBpzI,KAAK2yI,oBAAoBU,kBACP,KAAhBrzI,KAAKy0D,SAIV09E,EAAApzI,UAAAu0I,aAAP,SAAoB/jI,GAChBvP,KAAKuzI,UAAUhkI,GACfvP,KAAKwzI,WACLxzI,KAAKyzI,WACLzzI,KAAK4yI,YAAY5yI,KAAKizE,KAAMjzE,KAAK0mE,SAG9ByrE,EAAApzI,UAAA20I,aAAP,SAAoBj2I,GAApB,IAAAujC,EAAAhhC,KACIA,KAAK2zI,UAAUl2I,GAEf,IAAMipE,EAAS1mE,KAAKyyI,WAAW,GAC1B/rE,EAAOktE,eAIR5zI,KAAKwyI,yBAAyBnuG,SAAU7F,GAAIkoC,EAAOktE,iBAC9CtvG,SACAC,KAAK,SAACsvG,GACH,IAAMvxI,EAAOuxI,EAAan1I,IAAI+xC,MAAM,KAAK,GACzCzP,EAAK8yG,sBAAsBxxI,KAPnCtC,KAAK+zI,wBAAwB/zI,KAAKizE,KAAMjzE,KAAK0mE,OAAQ1mE,KAAK0yI,SAY3DP,EAAApzI,UAAAi1I,uBAAP,SAA8Bd,GAC1BlzI,KAAKkzI,iBAAmBA,EACxBlzI,KAAK+zI,wBAAwB/zI,KAAKizE,KAAMjzE,KAAK0mE,OAAQ1mE,KAAK0yI,SAGvDP,EAAApzI,UAAAk1I,aAAP,SAAoB1pI,GAChBvK,KAAKs2H,OAAS/rH,GAGV4nI,EAAApzI,UAAA+0I,sBAAR,SAA8BxxI,GAA9B,IAAA0+B,EAAAhhC,KACIA,KAAKmzF,aAAag7C,4BAA6B3vG,GAAIx+B,KAAKizE,KAAKz0C,GAAI01G,KAAM5xI,IAClEgiC,SACAC,KAAK,SAAC4vG,GAC8B,IAA7BA,EAAkBtxI,OAClBm+B,EAAK+yG,wBAAwB/yG,EAAKiyC,KAAMjyC,EAAK0lC,OAAQ1lC,EAAK0xG,QACtB,IAA7ByB,EAAkBtxI,OACzBm+B,EAAKgzG,uBAAuBG,EAAkB,IAE9CnzG,EAAKmzG,kBAAoBA,KAKjChC,EAAApzI,UAAA6zI,YAAR,SAAoB3/D,EAAyBvM,GAA7C,IAAA1lC,EAAAhhC,KACQ0mE,GAA2B,IAAjBA,EAAOpiE,MAEjBtE,KAAKqyI,eACApB,eAAgBzyG,GAAIkoC,EAAOloC,KAC3B8F,SAASC,KAAK,SAAAivG,GAAW,OAACxyG,EAAKwyG,QAAUA,IAE9CxzI,KAAKoyI,eACAtB,YACGpoC,SAAUhiC,EAASA,EAAOloC,GAAK,KAC/B41G,cAAenhE,EAAKmhE,cACpBttG,OAAQmsC,EAAKz0C,KAEhB8F,SAASC,KAAK,SAAAkvG,GAAW,OAACzyG,EAAKyyG,QAAUA,KAI9CtB,EAAApzI,UAAAg1I,wBAAR,SACI9gE,EACAvM,EACAgsE,GAHJ,IAAA1xG,EAAAhhC,KAKIA,KAAKsyI,sBACAV,wBACG9qG,OAAQ9mC,KAAKizE,KAAKz0C,GAClBkzG,SAAUhrE,EAAOloC,GACjBmzG,SAAUe,EAAOl0G,KAEpB8F,SAASC,KAAK,SAAA8vG,GACX,OAAArzG,EAAKszG,uBAAuBD,MAIhClC,EAAApzI,UAAAw0I,UAAR,SAAkB7sE,GAkBd1mE,KAAKyyI,WAjBc,SAAC/rE,GAChB,IAWMlpC,KAEN,OAbqB,SAAC+2G,EAAUnzG,GAC5B,IAAMr4B,EAAO,SAAAtL,GACLA,IACA2jC,EAAK3jC,GACLsL,EAAKtL,EAAE0kD,UAIfp5C,EAAKwrI,GAITC,CAAa9tE,EAAQ,SAAAjpE,GAAK,OAAA+/B,EAAKvkB,KAAKxb,KAC7B+/B,EAAK7wB,UAGE8nI,CAAW/tE,GAC7B1mE,KAAK0mE,OAASA,EACd1mE,KAAKkzI,iBAAmB,KACxBlzI,KAAK0yI,OAAS,KACd1yI,KAAK2yI,oBAAsB,MAGvBR,EAAApzI,UAAA40I,UAAR,SAAkBjB,GACd1yI,KAAK0yI,OAASA,EACd1yI,KAAKkzI,iBAAmB,KACxBlzI,KAAK2yI,oBAAsB,MAGvBR,EAAApzI,UAAAu1I,uBAAR,SACI3B,GADJ,IAAA3xG,EAAAhhC,KAGIA,KAAK2yI,oBAAsBA,EAE3B3yI,KAAKs2H,OAAS,KAEVqc,EAAoB+B,iBACpB/B,EAAoB+B,gBAAgB7xI,OAAS,GAE7C7C,KAAKuyI,eACAn6F,UAAW4M,IAAK2tF,EAAoB+B,kBACpCpwG,SAASC,KAAK,SAAAowG,GAAW,OAAC3zG,EAAK2zG,QAAUA,KAjM7CxC,EAAwB/iH,GAVpCmJ,EAAW,UAAW,4BACtBL,EACG,SACA,iBACA,iBACA,wBACA,iBACA,eACA,6BAESi6G,GAAb,GAAaD,EAAAC,yBAAwBA,EA9CN,CAAA/8G,EAAA88G,OAAA98G,EAAA88G,UAAR,CAAA3gH,EAAA6D,UAAA7D,EAAA6D,aAAR,CAAA9G,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA6D,IAAQ,SAAA88G,GAM/B,IAAY0C,GAAZ,SAAYA,GACRA,IAAA,2BACAA,IAAA,eACAA,IAAA,yBAHJ,CAAYA,EAAA1C,EAAA0C,oBAAA1C,EAAA0C,uBAoCZ,IAAAC,EAAA,WAOI,SAAAA,EACcliF,EACFwjB,EACAgd,EACAm/C,EACAl8D,EACAi5C,GALErvH,KAAA2yD,eACF3yD,KAAAm2E,WACAn2E,KAAAmzF,eACAnzF,KAAAsyI,wBACAtyI,KAAAo2E,eACAp2E,KAAAqvH,wBATZrvH,KAAA+yE,cAAoC,KACpC/yE,KAAA80I,eAAsC,KAUlC90I,KAAK+0I,WAEL/0I,KAAKo+D,YAAcw2E,EAAkBI,WACrCh1I,KAAKizD,SAAU,EAgJvB,OA7Ic4hF,EAAA91I,UAAAg2I,SAAV,eAAA/zG,EAAAhhC,KACIA,KAAKmzF,aAAa9uD,SAAU7F,GAAIx+B,KAAK2yD,aAAa7rB,SAAUxC,SAASC,KAAK,SAAA0uC,GAAQ,OAACjyC,EAAKiyC,KAAOA,KAG5F4hE,EAAA91I,UAAAk2I,iBAAP,WACI,OAAOj1I,KAAKo+D,cAAgBw2E,EAAkBI,YAG3CH,EAAA91I,UAAAm2I,WAAP,WACI,OAAOl1I,KAAKo+D,cAAgBw2E,EAAkBO,MAG3CN,EAAA91I,UAAAq2I,YAAP,WACI,OAAOp1I,KAAKo+D,cAAgBw2E,EAAkB9sF,WAG3C+sF,EAAA91I,UAAAs2I,QAAP,eAAAr0G,EAAAhhC,KACIA,KAAKo2E,aACD,gEAEI53C,GAAI,iBACJ82G,UAAU,EACVl8D,WAAY,wBACZm8D,cAAe,iBACfzzG,gBAAiB,SACb2wG,EACAC,EACAC,EACAl+E,EACA+gF,EACAC,GAEAz0G,EAAK6wG,WAAWY,EAAYC,EAAQj+E,EAAQ+gF,EAAUC,MAG5DxiE,KAAMjzE,KAAKizE,QAId4hE,EAAA91I,UAAA22I,cAAP,WACI,OAC2B,OAAvB11I,KAAK+yE,eACL/yE,KAAK+yE,cAAcltE,MAAMgd,OAAO,SAACvJ,EAAGlb,GAAU,OAAAkb,GAAKlb,EAAMu3I,cAAa,IAIvEd,EAAA91I,UAAA62I,YAAP,WACI,QAAS51I,KAAK80I,gBAGXD,EAAA91I,UAAA82I,iBAAP,WACI71I,KAAKo+D,YAAcw2E,EAAkBO,MAGlCN,EAAA91I,UAAA+2I,UAAP,WACI,OACI91I,KAAK+yE,eACL/yE,KAAK+yE,cAAcltE,MAAMhD,OAAS,KAChC7C,KAAK01I,iBAAmB11I,KAAK41I,gBAC/B51I,KAAK+yE,cAAcgjE,cAIjBlB,EAAA91I,UAAA8yI,WAAV,SAAqBY,EAA2BC,EAAqBj+E,EAAgB+gF,EAAgBC,GAArG,IAAAz0G,EAAAhhC,KACIA,KAAKsyI,sBACAR,qBACGW,WAAYA,EAAW9jI,IAAI,SAAA+3D,GAAU,OAAAA,EAAOloC,KAC5CmzG,SAAUe,EAAOl0G,GACjBuhB,SACAuxF,gBAAiBtxI,KAAK+yE,cAAgB/yE,KAAK+yE,cAAcv0C,GAAK,KAC9Dw3G,QAASvhF,EACT3tB,OAAQ9mC,KAAKizE,KAAKz0C,GAClBy3G,cAAe,KACfT,SAAQA,EACRC,mBAAkBA,IAErBnxG,SAASC,KAAK,SAAAwuC,GAAiB,OAAC/xC,EAAK+xC,cAAgBA,KAGvD8hE,EAAA91I,UAAAgzI,WAAP,SAAkBpyI,GAAlB,IAAAqhC,EAAAhhC,KACIA,KAAKsyI,sBACAP,YACGvzG,GAAIx+B,KAAK+yE,cAAcv0C,GACvBmzG,SAAUhyI,EAAK6+B,KAElB8F,SAASC,KAAK,SAAAwuC,GAAiB,OAAC/xC,EAAK+xC,cAAgBA,KAGvD8hE,EAAA91I,UAAAizI,KAAP,SAAY8C,GAAZ,IAAA9zG,EAAAhhC,KACIA,KAAKsyI,sBACAN,MACGxzG,GAAIx+B,KAAK+yE,cAAcv0C,GACvB4sE,OAAQ0pC,EACRoB,oBAAoB,IAE1B5xG,SAASC,KAAK,WAAM,OAAAvD,EAAK8zG,eAAiBA,KAGzCD,EAAA91I,UAAA4jH,OAAP,eAAA3hF,EAAAhhC,KACIA,KAAKizD,SAAU,EAEfjzD,KAAKsyI,sBACA3vB,QACGnkF,GAAIx+B,KAAK+yE,cAAcv0C,GACvBikC,YAAalxC,EAAAK,YAAYtD,SACzB4+E,MAAO,GACP3iC,MAAO,KAEVjmC,SAASC,KAAK,SAAAwuC,GACX/xC,EAAKo9B,YAAcw2E,EAAkB9sF,UACrC9mB,EAAK+xC,cAAgBA,EACrB/xC,EAAKm1C,SAAS,WACVn1C,EAAKm1G,4BACN,OAENhjF,QAAQ,WAAM,OAACnyB,EAAKiyB,SAAU,KAGhC4hF,EAAA91I,UAAAq3I,sBAAP,eAAAp1G,EAAAhhC,KACIA,KAAKizD,SAAU,EAEfjzD,KAAKsyI,sBACAN,MACGxzG,GAAIx+B,KAAK+yE,cAAcv0C,GACvB4sE,OAAQ,KACR8qC,oBAAoB,IAEvB5xG,SAASC,KAAK,SAAA10B,GACXmxB,EAAK2hF,WAERxvD,QAAQ,WAAM,OAACnyB,EAAKiyB,SAAU,KAGhC4hF,EAAA91I,UAAAo3I,yBAAP,WACIn2I,KAAKqvH,sBAAsB7wB,UAGxBq2C,EAAA91I,UAAAs3I,sBAAP,WACIr2I,KAAK+yE,cAAgB,KACrB/yE,KAAKo+D,YAAcw2E,EAAkBI,YAhKhCH,EAA0BzlH,GATtCmJ,EAAW,UAAW,8BACtBL,EACG,eACA,WACA,eACA,wBACA,eACA,0BAES28G,GAAb,GAAa3C,EAAA2C,2BAA0BA,EAoKvCtmH,QAAQrxB,OAAO,WAAW69B,QACtB,iBACA,SAACsmB,GACG,OAAAA,EAAepkB,MAAM,8CACjB60B,gBAAgB,EAChB3zB,IAAK,oBACLuJ,MACIwpB,UAAW,mBACXs+B,IAAK,gBACLhsC,UAAW,SAAA/B,GAAM,OAAAA,EAAG8tE,8BAExBjtE,OACIouC,uBACI7jD,YAAa,2DA3NF,CAAAzX,EAAA88G,OAAA98G,EAAA88G,UAAR,CAAA3gH,EAAA6D,UAAA7D,EAAA6D,aAAR,CAAA9G,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA6D,GAWvB,IAAAkhH,EAAA,WAaI,SAAAA,EAAoBC,GAAAv2I,KAAAu2I,mBAJpBv2I,KAAAw2I,cAAqB,KA4EzB,OAtEYF,EAAAv3I,UAAAqtC,QAAR,WACIpsC,KAAKy2I,cAAe,IAAIh6G,MAAOiZ,WAAWlC,uBAC1CxzC,KAAK02I,cAAgB12I,KAAKy2I,aAAahjG,sBACvCzzC,KAAK22I,6BAA8B,EACnC32I,KAAK42I,gBAGDN,EAAAv3I,UAAA63I,aAAR,eAAA51G,EAAAhhC,KACQA,KAAKy+C,UAETz+C,KAAKy+C,SAAU,EACfz+C,KAAKw2I,cAAgB,KACrBx2I,KAAKu2I,iBACAlF,6BACGC,gBAAiBtxI,KAAK+yE,cAAcv0C,GACpC75B,KAAM3E,KAAKy2I,aACXrmE,MAAOpwE,KAAK02I,cACZnF,UAAU,IAEbjtG,SAASC,KACN,SAAAsyG,GACI71G,EAAKyd,SAAU,EAGP,IADJo4F,EAAgBC,yBAAyBj0I,SAExCg0I,EAAgBE,qBACjB/1G,EAAK21G,4BAEL31G,EAAK8lD,YAEL9lD,EAAK21G,6BAA8B,EACnC31G,EAAK61G,gBAAkBA,IAG/B,SAAAG,GACIh2G,EAAKw1G,cAAgBQ,EACrBh2G,EAAKyd,SAAU,MAKxB63F,EAAAv3I,UAAA+nF,SAAP,WACI9mF,KAAKy2I,aAAez2I,KAAKy2I,aAAa/iG,QAAQ,GAC9C1zC,KAAK02I,cAAgB12I,KAAK02I,cAAchjG,QAAQ,GAEhD1zC,KAAK42I,gBAGFN,EAAAv3I,UAAAk4I,YAAP,WACI,OACKj3I,KAAKy+C,SACNz+C,KAAK62I,kBACJ72I,KAAK62I,gBAAgBE,qBAIvBT,EAAAv3I,UAAA6nF,aAAP,WACI5mF,KAAKy2I,aAAez2I,KAAKy2I,aAAa/iG,SAAS,GAC/C1zC,KAAK02I,cAAgB12I,KAAK02I,cAAchjG,SAAS,GAEjD1zC,KAAK42I,gBAGFN,EAAAv3I,UAAAm4I,gBAAP,WACI,OAAQl3I,KAAKy+C,SAAW,IAAIhiB,KAASz8B,KAAKy2I,cAGvCH,EAAAv3I,UAAAo4I,eAAP,SAAsB/rC,GAClBprG,KAAK47D,UAAWwvC,OAAMA,KAnFjBkrC,EAA0BlnH,GAVtCqI,EAAU,WACPoV,YACI,8EACJlV,SAAU,qBACViW,UACImlC,cAAe,IACfnX,SAAU,OAGjB1jC,EAAO,qBACKo+G,GAAb,GAAalhH,EAAAkhH,2BAA0BA,EAXhB,CAAA/kH,EAAA6D,UAAA7D,EAAA6D,aAAR,CAAA9G,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCIV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA6D,GAYvB,IAAAgiH,EAAA,WAGI,SAAAA,EAAoBC,GAAAr3I,KAAAq3I,sBAQxB,OAPWD,EAAAr4I,UAAAqtC,QAAP,eAAApL,EAAAhhC,KACQA,KAAKs3I,eACLt3I,KAAKq3I,oBACA7F,+BAAgChzG,GAAIx+B,KAAKs3I,gBACzChzG,SAASC,KAAK,SAAAmD,GAAQ,OAAC1G,EAAKspG,YAAc5iG,KAR9C0vG,EAA6BhoH,GATzCqI,EAAU,eACPE,SAAU,2CACVkV,YACI,uFACJe,UACI0pG,cAAe,OAGtBp/G,EAAO,0BACKk/G,GAAb,GAAahiH,EAAAgiH,8BAA6BA,EAZnB,CAAA7lH,EAAA6D,UAAA7D,EAAA6D,aAAR,CAAA9G,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCJVC,QAAQrxB,OAAO,eAAemC,QAAQ,oBAClC,YACA,SAASovB,GAGL,OAAOA,EACH,mCAGIsgD,QACI5wC,IAAK,gCACLzP,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElBkwG,SACIvwG,IAAK,yCACLzP,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,OAAQxQ,GAAI,GAAIk4B,SAAU,KAEhDvuB,QACIzZ,OAAQ,SACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIxQ,GAAI,QAE9B/pB,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIxQ,GAAI,UC7B9C,SAAUlQ,IAAS,SAAAiD,GAAQA,EAAA+D,cAAA/D,EAAA+D,gBAyBvB/G,QAAQrxB,OAAO,eAAesxB,QAAQ,6BAClC,YACA,SAACC,GACG,OAAAA,EACI,6CAGI4V,SAAW3V,OAAQ,MAAO1gB,SAAS,GACnC+gE,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUw5E,UAAW,aAAcP,QAAS,aAEhD/gD,aACIn4B,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUxQ,GAAI,YAEpC+4G,kBACI7oH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUxQ,GAAI,iBA9CrC,CAAAlQ,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA+D,cAAA/D,EAAA+D,gBACvB/G,QACKrxB,OAAO,eACPmc,OAAO,wBAAyB,WAC7B,OAAO,SAAS+1B,GACZ,OAAQA,GACJ,KAAK,EACL,IAAK,SACL,QACI,MAAO,SACX,KAAK,GACL,IAAK,UACD,MAAO,kBACX,KAAK,GACL,IAAK,UACD,MAAO,0CACX,KAAK,GACL,IAAK,qBACD,MAAO,yCACX,KAAK,GACL,IAAK,UACD,MAAO,cAItB/1B,OAAO,yBAA0B,WAC9B,OAAO,SAAS+1B,GACZ,OAAQA,GACJ,KAAK,EACL,IAAK,SACL,QACI,MAAO,QACX,KAAK,GACL,IAAK,UACL,KAAK,GACL,IAAK,qBACD,MAAO,SACX,KAAK,GACL,IAAK,UACL,KAAK,GACL,IAAK,UACD,MAAO,UAItB/1B,OAAO,kBAAmB,WACvB,OAAO,SAAS+1B,GACZ,OAAQA,GACJ,IAAK,UACD,MAAO,WACX,IAAK,YACD,MAAO,uBACX,IAAK,aACD,MAAO,iBACX,IAAK,WACD,MAAO,cACX,IAAK,WACD,MAAO,cAGf,MAAO,aAAeA,EAAQ,OAGrC/1B,OAAO,mBAAoB,WACxB,OAAO,SAAS+1B,GACZ,OAAQA,GACJ,IAAK,UACD,MAAO,WACX,IAAK,YACD,MAAO,uBACX,IAAK,aACD,MAAO,iBACX,IAAK,WACD,MAAO,cACX,IAAK,WACD,MAAO,cAGf,MAAO,aAAeA,EAAQ,OAGrC/1B,OAAO,oBAAqB,WACzB,OAAO,SAAS+1B,GACZ,OAAQA,GACJ,IAAK,UACD,MAAO,WACX,IAAK,YACD,MAAO,uBACX,IAAK,aACD,MAAO,iBACX,IAAK,WACD,MAAO,cACX,IAAK,WACD,MAAO,cAGf,MAAO,aAAeA,EAAQ,OAGrC/1B,OAAO,wBAAyB,WAC7B,OAAO,SAAS+1B,GACZ,OAAQA,GACJ,IAAK,UACD,MAAO,WACX,IAAK,YACD,MAAO,uBACX,IAAK,aACD,MAAO,iBACX,IAAK,WACD,MAAO,cACX,IAAK,WACD,MAAO,cAGf,MAAO,aAAeA,EAAQ,OAGrC/1B,OAAO,0BAA2B,WAC/B,OAAO,SAAS+1B,GACZ,OAAQA,GACJ,IAAK,MACD,MAAO,OACX,IAAK,aACD,MAAO,YACX,IAAK,SACD,MAAO,cACX,IAAK,YACD,MAAO,uBAGf,MAAO,aAAeA,EAAQ,OAGrC/1B,OAAO,sBAAuB,WAC3B,OAAO,SAAS+1B,GACZ,OAAQA,GACJ,IAAK,UACD,MAAO,WACX,IAAK,WACD,MAAO,aACX,IAAK,YACD,MAAO,uBACX,IAAK,WACD,MAAO,gCACX,IAAK,WACD,MAAO,cACX,IAAK,SACD,MAAO,YACX,IAAK,WACD,MAAO,cAGf,MAAO,aAAeA,EAAQ,OAGrC/1B,OAAO,0BAA2B,WAC/B,OAAO,SAAS+1B,GACZ,OAAQA,GACJ,IAAK,UACD,MAAO,iBACX,IAAK,WACD,MAAO,WACX,IAAK,WACD,MAAO,cAGf,MAAO,aAAeA,EAAQ,OAGrC/1B,OAAO,+BAAgC,WACpC,OAAO,SAAS+1B,GACZ,OAAQA,GACJ,KAAK,EACL,IAAK,SACD,MAAO,cACX,KAAK,GACL,IAAK,UACL,KAAK,GACL,IAAK,UACL,KAAK,GACL,IAAK,qBACD,MAAO,eACX,KAAK,GACL,IAAK,UACD,MAAO,YACX,QACI,MAAO,kBA1LZ,CAAA9gB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCIV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA+D,GAAYA,EAAAkiH,eAAAliH,EAAAkiH,iBAkBnCjpH,QAAQrxB,OAAO,eAAesxB,QAAQ,uBAClC,YACA,SAACC,GACG,OAAAA,EACI,qCAGI4V,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,KAEtByoG,iBACI/oH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,eAjCf,CAAAzd,EAAA+D,cAAA/D,EAAA+D,iBAAR,CAAAhH,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA+D,IAAY,SAAAkiH,GAYnC,IAAAJ,EAAA,WAGI,SAAAA,EAAoBC,GAAAr3I,KAAAq3I,sBAQxB,OAPWD,EAAAr4I,UAAAqtC,QAAP,eAAApL,EAAAhhC,KACQA,KAAKs3I,eACLt3I,KAAKq3I,oBACAhzG,SAAU7F,GAAIx+B,KAAKs3I,gBACnBhzG,SAASC,KAAK,SAAAmD,GAAQ,OAAC1G,EAAKspG,YAAc5iG,KAR9C0vG,EAA6BhoH,GATzCqI,EAAU,eACPE,SAAU,mCACVkV,YACI,0FACJe,UACI0pG,cAAe,OAGtBp/G,EAAO,wBACKk/G,GAAb,GAAaI,EAAAJ,8BAA6BA,EAZP,CAAA9hH,EAAAkiH,eAAAliH,EAAAkiH,kBAAZ,CAAAjmH,EAAA+D,cAAA/D,EAAA+D,iBAAR,CAAAhH,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCJV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA+D,cAAA/D,EAAA+D,gBAGvB,WACI,SAAAoiH,EAAY3+G,EAAQ45B,EAAcglF,GAC9B5+G,EAAO0Z,OAASklG,EAAsB9oE,aAClCrwC,GAAIm0B,EAAan0B,KAHvBk5G,EAAuBtoH,GAF5BmJ,EAAW,cAAe,2BAC1BL,EAAO,SAAU,eAAgB,0BAC5Bw/G,GAAN,GAHe,CAAAppH,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCOV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA0E,GAyBVA,EAAA2hH,YAAc,IAAIt+G,GAAGG,QAGlC,IAAAo+G,EAAA,oBAAAA,KAiCA,OAhCWA,EAAA94I,UAAA8qE,SAAP,WACIt4C,EAAA83B,mBAAmB,WACf,OAAA9sB,EAAEisB,WAAWsvF,aAAa37C,OAAOtyB,cAIlCguE,EAAA94I,UAAAg5I,WAAP,WACIxmH,EAAA83B,mBAAmB,WACf,OAAA9sB,EAAEisB,WAAWsvF,aAAa37C,OAAO47C,gBAIlCF,EAAA94I,UAAAi5I,aAAP,WACIzmH,EAAA83B,mBAAmB,WACf9sB,EAAEisB,WAAWsvF,aAAa37C,OAAO67C,kBAIlCH,EAAA94I,UAAAk5I,OAAP,WACI1mH,EAAA63B,qBAAqB,WACjB7sB,EAAEisB,WAAWsvF,aAAa9hG,GAAG,aAAc,SAACk3D,EAAOj6D,GAC/Chd,EAAA2hH,YAAY19G,QACR53B,KAAM,aACN4qG,MAAKA,EACL9nG,OAAQ6tC,MAGhB1W,EAAEisB,WAAWsvF,aAAa9hG,GAAG,SAAU,SAACk3D,EAAOj6D,GAC3Chd,EAAA2hH,YAAY19G,QAAS53B,KAAM,UAAW4qG,MAAKA,EAAE9nG,OAAQ6tC,SA7BxD4kG,EAAgBzoH,GAD5B2I,EAAQ,YAAa,qBACT8/G,GAAb,GAAa5hH,EAAA4hH,iBAAgBA,EAmC7BtpH,QACKrxB,OAAO,aACP4lD,KACG,mBACA,SAAAo1F,GAAoB,OAAAA,EAAiBD,YAnEtB,CAAA1mH,EAAA0E,YAAA1E,EAAA0E,eAAR,CAAA3H,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCNV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAqF,GA4BvB,IAAAuhH,EAAA,WAGI,SAAAA,EAAmB1pH,GAAAzuB,KAAAyuB,YAyBvB,OAvBI0pH,EAAAp5I,UAAAq5I,2BAAA,WACI,OAAOp4I,KAAKyuB,UAIR,0CAGI0/D,eAAgBnuF,KAAK2vF,YAAY,OAAO,GACpC3gD,OAAQ,sBAMhBmpG,EAAAp5I,UAAA4wF,YAAR,SACIjhE,EACA1gB,EACA2gB,EACAuQ,GAEA,OAASxQ,OAAMA,EAAE1gB,QAAOA,EAAE2gB,OAAMA,EAAEuQ,QAAOA,IAzBtCi5G,EAAA7/G,SAAW,aA2BtB6/G,EA5BA,GA6BA5pH,QACKrxB,OAAO,aACPsxB,QAAQ,2BACL,YACA,SAAAC,GACI,WAAI0pH,EACA1pH,GACF2pH,gCAhES,CAAA7mH,EAAAqF,mBAAArF,EAAAqF,sBAAR,CAAAtI,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCDV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA0E,GASvB,IAAAoiH,EAAA,WAEI,SAAAA,EACIt/G,EACAw0D,EACA+qD,GAEAv/G,EAAO81E,aAAe,SAAC57D,EAAY87D,GAC/BxhB,EAAashB,aAAa57D,EAAI87D,IAGlCh2E,EAAO60D,OAAS,SAAC36C,GACbs6C,EAAaK,OAAO36C,IAGxBqlG,EAAkBC,eAAej0G,SAASC,KAAK,SAAAmD,GAC3C3O,EAAOy/G,WAAa9wG,IAGhC,OAlBW2wG,EAAA//G,SAAW,SAAU,eAAgB,qBADnC+/G,EAAmBjpH,GAD/BmJ,EAAW,YAAa,wBACZ8/G,GAAb,GAAapiH,EAAAoiH,oBAAmBA,EATT,CAAA9mH,EAAA0E,YAAA1E,EAAA0E,eAAR,CAAA3H,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA0E,YAAA1E,EAAA0E,cAgBvB1H,QAAQrxB,OAAO,aAAasxB,QAAQ,qBAChC,YACA,SAACC,GACG,OAAOA,EACH,oCAGI4V,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElBuwC,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIxQ,GAAI,KAE9B+5G,cACI7pH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,WAEtBrsC,QACI+rB,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,WAEtBq5D,MACI35E,OAAQ,OACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIxQ,GAAI,KAE9B/pB,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIxQ,GAAI,KAE9B2J,QACIzZ,OAAQ,SACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIxQ,GAAI,QAE9Bi6G,aACI/pH,OAAQ,OACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,cAAexQ,GAAI,UA7D1C,CAAAlQ,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCIV,SAAUA,IAAS,SAAA2H,GAAUA,EAAAyiH,YAAAziH,EAAAyiH,cACzBnqH,QAAQrxB,OAAO,aAAa69B,QACxB,iBACA,SAACsmB,GACGA,EAAepkB,MAAM,sBACjBkB,IAAK,GACLikB,UAAU,OANP,CAAA9zB,EAAA2H,YAAA3H,EAAA2H,eAAnB,CAAU3H,WCDV,SAAUA,GAASA,EAAAiD,UAAAjD,EAAAiD,YA0EfhD,QAAQrxB,OAAO,YAAYsxB,QAAQ,oBAC/B,YACA,SAACC,GACG,OAAAA,EACI,8CAGIkqH,aACIjqH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,OAAQujD,OAAQ,QAEtC1B,kBACIniE,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,YAAawiD,YAAa,QAEhD3qC,aACIn4B,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,OACR9K,OAAQ,MACR00G,UAAW,OACXh/D,aAAc,kBAGtBg9C,iBACIloG,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,WAAYgqC,WAAY,QAE9C6/D,wBACInqH,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,OACRujD,OAAQ,MACRtiC,UAAW,cAGnB68D,aACIp+F,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,OAAQgqC,WAAY,QAE1CstB,eACI53E,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,eAEtB8pG,2CACIpqH,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,OACRujD,OAAQ,MACRtiC,UAAW,eAGnB8oF,oCACIrqH,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,OACR9K,OAAQ,MACR+rB,UAAW,mBAGnB+oF,0BACItqH,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,gBACRiqG,QAAS,YAGjB9zC,YACIhnE,IAAK,uBACLzP,OAAQ,SACR1gB,SAAS,EACT2gB,QACI6P,GAAI,QAGZ4mE,aACIjnE,IAAK,+BACLzP,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,UACRxQ,GAAI,aArKhC,CAAUlQ,WCHV,SAAUA,GAASA,EAAAiD,UAAAjD,EAAAiD,YAEf,WADA,SAAA2nH,IAYYl5I,KAAAm5I,wBAA0B,SAACC,GAC/B,OAAAA,GAAO,SAASn2G,KAAKm2G,GAAO,GAAK,KAAOA,EAAM,IAX3CF,EAAAn6I,UAAAiwB,UAAP,SAAiBzf,GACb,IAAMioF,GACDjoF,EAAEqoF,OAASroF,EAAEqoF,OAAS,IAAM,KAC5BroF,EAAEwnF,YAAcxnF,EAAEwnF,YAAc,KAChCxnF,EAAEooF,qBACG33F,KAAKm5I,wBAAwB5pI,EAAEooF,sBAC/B,IACV,OAAOH,EAAYhhD,OAAO3zC,OAAS,EAAI20F,EAAc,IARvD0hD,EAAiB9pH,GADtBC,EAAK,WAAY,gBACZ6pH,GAAN,GAFJ,CAAU5qH,WCAV,SAAUA,GAASA,EAAAiD,UAAAjD,EAAAiD,YACfhD,QAAQrxB,OAAO,YAAYy4C,UAAU,aACjC,WACI,OACImvC,UAAW,EACXxsC,SAAU,IACV1C,KAAI,SAACvG,EAAOwG,EAASgC,GACjBhC,EAAQ4rC,SAAS,aACjB5rC,EAAQG,GAAG,QAAS,SAAS30C,GACzB,GACuC,KAAnCA,EAAE8C,OAAOk1I,SAAS/4G,gBAClB/D,EAAEl7B,EAAE8C,QAAQunI,QAAQ,KAAK7oI,OAF7B,CAKA,IAAIujI,EAAOvwF,EAAQvyC,KAAK,0BACpB8iI,EAAKvjI,QAAQujI,EAAKkG,QAAQ,iBAftD,CAAUh+G,WCAV,SAAUA,GAASA,EAAAiD,UAAAjD,EAAAiD,YAkBfhD,QAAQrxB,OAAO,YAAYsxB,QAAQ,kBAC/B,YACA,SAAAC,GACI,OAAAA,EAAU,0BAA2B,MACjCzwB,KACI0wB,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU2qH,QAAS,aAEvB7kI,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU2qH,QAAS,aAEvBC,gBACI7qH,OAAQ,MACR1gB,SAAS,EACTmwB,IAAK,6BACLxP,QAAUjxB,KAAM,UAEpB87I,mBACI9qH,OAAQ,MACR1gB,SAAS,EACTmwB,IAAK,6BACLxP,QAAUjxB,KAAM,eA1CpC,CAAU4wB,WCAAA,UAqBNC,QAAQrxB,OAAO,YAAYmC,QAAQ,gBAC/B,YACA,WACA,aACA,cACA,WACA,SACIypI,EACA2Q,EACA12F,EACA22F,EACAvjE,GAEA,IAAIwjE,GACAn7G,GAAI,KACJ82G,UAAU,EACVxzG,gBAAiB,KACjB83G,eAAgB,KAChBrE,cAAe,iBACfn8D,WAAY,QACZygE,cAAe/Q,EAAUxlI,KAAK,QAC9Bg/B,SAAU,QACVuhG,WAAW,EACXiW,SAAS,EACTz3G,MAAO,MAGPniC,EAAO4oI,EAAUxlI,KAAK,QAE1B,OAAO,SACHupC,EACA/sC,EACAi6I,GAIA,IAAIr7I,EAEAs7I,GAJJl6I,EAAOm7B,KAAQ0+G,EAAa75I,IAIP0+B,GAAK,QAAU1+B,EAAQ0+B,GAAK,KAAO,GACpDy7G,EACA,eACAn6I,EAAQs5E,WACR,IACAt5E,EAAQwiC,SACR,IACA03G,EACA,KACCl6I,EAAQ+jI,UAAY,qBAAuB,IAC5C,KACC/jI,EAAQuiC,MAAQ,UAAYviC,EAAQuiC,MAAQ,IAAM,IACnD,kBACAwK,EACA,aAEAqtG,EAAgB3rH,QAAQsnB,QAAQokG,GAEhCE,EAAmB5rH,QAAQsnB,QAC3B,iFAEJskG,EAAiB14D,SAAS3hF,EAAQy1I,eAClC4E,EAAiB14D,SAAS,WAG1B,IAAI24D,EAA0Br3F,EAAWs3F,OAGzC,IAAK37I,KAAOq7I,EACJA,EAAe/6I,eAAeN,KAC9B07I,EAAW17I,GAAOq7I,EAAer7I,IAGzC,IACI47I,EADiBb,EAASU,EACRI,CAAeH,GAEjCI,EADcf,EAASS,EACRO,CAAYL,GAG3BM,EAAmB,SAASx3F,GACN,KAAlBA,EAAMkpF,SACNgO,EAAWnjC,gBAInB/2G,EAAKvB,KAAK,UAAW+7I,GAEjB56I,EAAQg6I,UACR55I,EAAKuhF,SAAS,cACdvhF,EAAKiiD,SAASs/B,SAAS,eAM3B,IAAIk5D,EAAY,WACPP,EAAWjjB,QAGZhhD,EACI,WACIwkE,KAEJ,KACA,GAPJP,EAAWQ,YAYfC,EAAU,SAASr7G,IACf1/B,EAAQg6I,SAAWt6G,KACnBt/B,EAAKgsI,OAAO,UAAWwO,GAEvBx6I,EAAK46I,YAAY,cACjB56I,EAAKiiD,SAAS24F,YAAY,cACtBh7I,EAAQw1I,UACRgF,EAAgB/lI,SAGhBimI,EAAa33I,OAAS,IAClB05B,EAAEi+G,EAAa,IAAInwI,OACnBkyB,EAAEi+G,EAAa,IACVnwI,OACAkK,SAELgoB,EAAEi+G,EAAa,IAAIjmI,UAIvBzU,EAAQ85I,gBACR95I,EAAQ85I,eAAetmI,MAAMtT,KAAM2D,WAGvCg3I,MAIRP,EAAWnjC,aAAe4jC,EAE1BT,EAAWW,yBAA2B,SAAS73F,GAC3C,IAAI83F,EAAS93F,EAAM/+C,QAAU++C,EAAM+3F,WAC/BD,GAAUz+G,EAAEy+G,GAAQrS,SAAS,yBAKrCyR,EAAWhpB,cAAgB,WACnBtxH,EAAQgiC,gBACRhiC,EAAQgiC,gBAAgBxuB,MAAMtT,KAAM2D,WAEpCk3I,EAAQv9I,KAAK0C,MAAM,GAGvBo6I,EAAWnjC,gBAGf,IAAIikC,EACAp7I,EAAQs5E,WAAWt2E,QAAQ,iBAAmB,EAElD,GAAIhD,EAAQw1I,SACR,GAAI4F,EACAp7I,EAAQ+5I,cAAcz4D,OAAOo5D,GAC7Bt6I,EAAKkhF,OAAOk5D,OACT,CACH,IAAIa,EAAuBjQ,OAAO,UAC9Bj2C,MAAO,yBAEXqlD,EAAgBl5D,OAAO+5D,GAEvBA,EAAqB/5D,OAAOo5D,GAC5Bt6I,EAAKkhF,OAAOk5D,QAGhBx6I,EAAQ+5I,cAAcz4D,OAAOo5D,OChMjD,SAAUlsH,GAASA,EAAAiD,UAAAjD,EAAAiD,YACfhD,QAAQrxB,OAAO,YAAYmc,OAAO,aAAc,WAAM,gBAACsqG,EAAey3B,GAClE,IAAM70B,EAAM/jH,OAAOu4B,QAAUv4B,OAAOu4B,OAAO+zD,QAAUtsF,OAAOu4B,OAAO+zD,OAAOy3B,KAAO/jH,OAAOu4B,OAAO+zD,OAAOy3B,IAAI,GAE1G,OAAIA,GAAOA,EAAI80B,YAAY13B,GAChB4C,EAAI80B,YAAY13B,GAGpBy3B,KARf,CAAU9sH,WCIAA,UACNC,QAAQrxB,OAAO,YAAYy4C,UAAU,qBACjC,aACA,SAACoN,GACG,SAASu4F,EACLzlG,EACAgC,GAEA,IAAM0jG,EAAc1jG,EAAK2jG,kBAGnBC,GADFj5I,OAAOm7B,cAAgBn7B,OAAOm7B,aAAazC,UACtB53B,KACrB,SAAAgW,GAAK,OAAAA,EAAE5b,KAAK4iC,gBAAkBi7G,EAAYj7G,gBAEnBm7G,GAAYA,EAAQrgH,QAEvBya,EAAQU,OAC3BV,EAAQp0C,OAGjB,OACIqjF,UAAW,EACXxsC,SAAU,IACV1C,KAAM,SAACvG,EAAkBwG,EAASgC,GAC9ByjG,EAAoBzlG,EAASgC,GAE7BkL,EAAWnT,IACPiI,EAAK6jG,iBAAmB,UACxB,SAACx4F,EAAOxb,GACJ4zG,EAAoBzlG,EAASgC,UC7B/CvpB,UACNC,QAAQrxB,OAAO,YAAYy4C,UAAU,oBACjC,aACA,SAACoN,GACG,SAASu4F,EACLzlG,EACAgC,GAEA,IAAM0jG,EAAc1jG,EAAK6jG,iBAGnBD,GADFj5I,OAAOm7B,cAAgBn7B,OAAOm7B,aAAazC,UACtB53B,KACrB,SAAAgW,GAAK,OAAAA,EAAE5b,KAAK4iC,gBAAkBi7G,EAAYj7G,gBAErBm7G,GAAWA,EAAQrgH,QAGvCya,EAAQp0C,OADUo0C,EAAQU,OAInC,OACIuuC,UAAW,EACXxsC,SAAU,IACV1C,KAAM,SAACvG,EAAkBwG,EAASgC,GAC9ByjG,EAAoBzlG,EAASgC,GAE7BkL,EAAWnT,IACPiI,EAAK6jG,iBAAmB,UACxB,SAACx4F,EAAOxb,GACJ4zG,EAAoBzlG,EAASgC,UCjCzD,SAAUvpB,IAAS,SAAAiD,GAGf,IAAAoqH,EAAA,oBAAAA,IACI37I,KAAA47I,SAAW,EACX57I,KAAAs4C,SAAW,IACXt4C,KAAA41C,KAAO,SAACvG,EAAewG,EAASgC,GACXt1C,SAASi2C,uBAAuB,YAAY31C,OAAS,GAExDgzC,EAAQU,QAM9B,OAHWolG,EAAAt8I,QAAP,WACI,OAAO,WAAM,WAAIs8I,IAEzBA,EAZA,GAAapqH,EAAAoqH,qBAAoBA,EAcjCptH,QAAQrxB,OAAO,YAAYy4C,UAAU,cAAegmG,EAAqBt8I,WAjB1D,CAAAivB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAGf,IAAAsqH,EAAA,oBAAAA,IACI77I,KAAA47I,SAAW,EACX57I,KAAAs4C,SAAW,IACXt4C,KAAA41C,KAAO,SAACvG,EAAewG,EAASgC,GAC5B,IAAI12C,EAAO02C,EAAKikG,eACZr8G,EAAOj9B,OAAOi9B,KAEbt+B,KAEsB,IAAvBA,EAAK2B,QAAQ,KACR28B,GAASA,EAAKmB,YAAYz/B,IAC3B00C,EAAQU,OAGR9W,EAAKmB,YAAYz/B,EAAKm2B,QAAQ,IAAK,MACnCue,EAAQU,SAQxB,OAHWslG,EAAAx8I,QAAP,WACI,OAAO,WAAM,WAAIw8I,IAEzBA,EAvBA,GAAatqH,EAAAsqH,wBAAuBA,EAyBpCttH,QACKrxB,OAAO,YACPy4C,UAAU,iBAAkBkmG,EAAwBx8I,WA9B1C,CAAAivB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,GAASA,EAAAiD,UAAAjD,EAAAiD,YAEf,oBAAAwqH,KACWA,EAAAh9I,UAAAiwB,UAAP,SAAiB5wB,GACb,OAAOmwB,QAAQvgB,QAAQ5P,IAFzB29I,EAAa3sH,GADlBC,EAAK,WAAY,YACZ0sH,GAAN,GAFJ,CAAUztH,WCAV,SAAUA,IAAS,SAAAiD,GACf,IAAOyR,EAAS1U,EAAS4S,QAAQ8B,QAGjC,oBAAAg5G,KACWA,EAAAj9I,UAAAiwB,UAAP,SAAiB5wB,GACb,OAAO4kC,EAAO5kC,IAFhB49I,EAAY5sH,GADjBC,EAAK,WAAY,WACZ2sH,GAAN,GAJe,CAAA1tH,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCIV,SAAUA,GASN,IAAA2tH,EAAA,WACI,SAAAA,EACYC,GAAAl8I,KAAAk8I,aA6BhB,OA1BWD,EAAAl9I,UAAAf,IAAP,SAAWU,GACP,QAAwBY,IAApBU,KAAKk8I,WACL,MAAM,IAAIn8I,MACN,0DAGR,OAAOstB,KAAKiQ,MAAMt9B,KAAKk8I,WAAWl+I,IAAIU,KAGnCu9I,EAAAl9I,UAAAi6B,MAAP,SAAat6B,EAAaN,GACtB,QAAwBkB,IAApBU,KAAKk8I,WACL,MAAM,IAAIn8I,MACN,uDAGRC,KAAKk8I,WAAW9oI,IAAI1U,EAAK2uB,KAAKC,UAAUlvB,KAGrC69I,EAAAl9I,UAAAwV,OAAP,SAAc7V,GACV,QAAwBY,IAApBU,KAAKk8I,WACL,MAAM,IAAIn8I,MACN,wDAGRC,KAAKk8I,WAAW3nI,OAAO7V,IA7BlBu9I,EAAmB7sH,GAF/B2I,EAAQ,WAAY,uBACpBG,EAAO,eACK+jH,GAAb,GAAa3tH,EAAA2tH,oBAAmBA,EATpC,CAAU3tH,YCEV,oBAAA6tH,KAAMA,EAA0B/sH,GAN/BqI,EAAU,YACPE,SAAU,sBACVwhB,SAAU,yFAIRgjG,GAAN,ICHA,SAAU7tH,IAAS,SAAAiD,GAGf,IAAA6qH,EAAA,WAII,SAAAA,EAAoBnsG,GAApB,IAAAjP,EAAAhhC,KAAoBA,KAAAiwC,sBAHZjwC,KAAAq8I,qBAAsB,EACtBr8I,KAAAs8I,iBAAmB,KAGvB/qH,EAAA43B,UAAUnvB,UAAU,SAAAuiH,GAChB,GAAKA,EAQGv7G,EAAKq7G,sBACLr7G,EAAKq7G,qBAAsB,GAE3Br7G,EAAKs7G,mBACLt7G,EAAKiP,oBAAoB56B,MAAM2rB,EAAKs7G,kBACpCt7G,EAAKs7G,iBAAmB,UAbnB,CACT,GAAIt7G,EAAKq7G,oBAAqB,OAE9Br7G,EAAKs7G,iBAAmBt7G,EAAKiP,oBAAoBy3C,QAC7C,8BACA,SAiBpB,OAHW00D,EAAAr9I,UAAAy9I,0BAAP,WACI,QAASx8I,KAAKs8I,kBA1BTF,EAAchtH,GAF1B2I,EAAQ,WAAY,kBACpBG,EAAO,wBACKkkH,GAAb,GAAa7qH,EAAA6qH,eAAcA,EAHZ,CAAA9tH,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,YCGV,oBAAAmuH,KAAMA,EAA0BrtH,GAN/BqI,EAAU,YACPE,SAAU,sBACVwhB,SAAU,4FAIRsjG,GAAN,GCLUnuH,UAEN,oBAAAouH,KACWA,EAAA39I,UAAAiwB,UAAP,SAAiB8Q,GACb,IAAKA,EAAS,MAAO,GACrB,IAAKA,EAAQp9B,SAAS,WAAc,OAAOo9B,EAiB3C,IAfA,IAAM68G,EAAuB,SAAC/mG,GAC1B,IAAMgnG,EAAYr6I,SAAS4/B,cAAc,KAKzC,OAJAy6G,EAAUtiG,aAAa,OAAQ1E,GAC/BgnG,EAAUtiG,aAAa,SAAU,UACjCsiG,EAAUtiG,aAAa,MAAO,uBAC9BsiG,EAAU/6G,KAAO+T,EACVgnG,GAIL5W,GADY,IAAIC,WACQC,gBAAgBpmG,EAAS,aAEjD+8G,EAAQ7W,EAAYrrF,qBAAqB,KACzC9lC,KAEG1X,EAAI0/I,EAAMh6I,OAAQ1F,EAAI,EAAGA,IAC1B0/I,EAAM1/I,EAAI,GAAGipI,MAAQvxH,EAASoE,KAAK4jI,EAAM1/I,EAAI,GAAGipI,MAGxD,IAASjpI,EAAI6oI,EAAYrrF,qBAAqB,UAAU93C,OAAQ1F,EAAI,EAAGA,IAC3C,IAApB0X,EAAShS,QACTmjI,EAAYrrF,qBAAqB,UAAUx9C,EAAI,GAAG2/I,YAC9CH,EAAqB3W,EAAYrrF,qBAAqB,UAAUx9C,EAAI,GAAG4/I,MAI3EloI,EAAShS,OAAS,IAAkF,IAA7EgS,EAAS/R,QAAQkjI,EAAYrrF,qBAAqB,UAAUx9C,EAAI,GAAG4/I,MAC1F/W,EAAYrrF,qBAAqB,UAAUx9C,EAAI,GAAGoX,SAI1D,OAAOyxH,EAAYrrF,qBAAqB,QAAQ,GAAGyqF,UAAUvgI,YApC/D63I,EAAyBttH,GAD9BC,EAAK,WAAY,wBACZqtH,GAAN,ICWJ,oBAAAM,KAAMA,EAAkB5tH,GAdvBqI,EAAU,YACPE,SAAU,aACVwhB,SAAU,iJAOVvL,UACIqvG,UAAW,IACXC,WAAY,QAGdF,GAAN,ICdA,SAAU1uH,IAAS,SAAAiD,GAAQA,EAAAsB,YAAAtB,EAAAsB,cAOvBtE,QAAQrxB,OAAO,YAAYsxB,QAAQ,gBAC/B,YACA,SAACC,GACG,OAAAA,EACI,+BAGI4V,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElBg0D,aACI9jE,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,UAAWxQ,GAAI,cAtBtC,CAAAlQ,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAVC,QAAQrxB,OAAO,YAAYmc,OAAO,WAAY,WAC1C,OAAO,SAAS+1B,GACZ,GAAIA,QAAuC,OAAOA,EAElD,IAAI9qC,EAAQ8qC,EAAMtsC,QAAQ,KAC1B,IAAe,IAAXwB,EAAc,OAAO8qC,EAEzB,IAAI+tG,EAAQ/tG,EAAMnsC,OAAO,EAAGqB,EAAQ,GAChC84I,EAAWhuG,EAAMnsC,OAAOqB,EAAQ,EAAG8qC,EAAMvsC,OAASyB,GAMtD,OAJAA,EAAQ84I,EAASt6I,QAAQ,OACZ,IAAGs6I,EAAWA,EAASn6I,OAAO,EAAGqB,IAC1C84I,EAASv6I,OAAS,KAAIu6I,EAAWA,EAASn6I,OAAO,EAAG,IAAM,MAEvDk6I,EAAQC,EAAW,UCXlC,SAAU9uH,IAAS,SAAAiD,GAGf,IAAA8rH,EAAA,WAKI,SAAAA,EACYptG,EACAqtG,GADAt9I,KAAAiwC,sBACAjwC,KAAAs9I,iBANJt9I,KAAAu9I,SAAW,IACXv9I,KAAAw9I,oBAAsB,KACtBx9I,KAAAy9I,aAAe,KAqC3B,OA9BWJ,EAAAt+I,UAAA6D,MAAP,eAAAo+B,EAAAhhC,KAGIuxB,EAAA42B,wBACK9uC,OAHY,SAAAC,GAAK,OAAAA,GAAKA,EAAE2jB,QAIxBtuB,IAAI,SAAA2K,GAAK,OAAAA,EAAE2jB,QACX/D,uBACAc,UAAU,SAAA1gB,GACG,iBAANA,EACA0nB,EAAKw8G,oBAAsB57I,WAAW,WAE7Bo/B,EAAKs8G,eAAed,8BAErBx7G,EAAKy8G,aAAez8G,EAAKiP,oBAAoBy3C,QACzC,sCACA,QAET1mD,EAAKu8G,WAEJv8G,EAAKy8G,eACLz8G,EAAKiP,oBAAoB56B,MAAM2rB,EAAKy8G,cACpCz8G,EAAKy8G,aAAe,MAEpBz8G,EAAKw8G,sBACLh8G,aAAaR,EAAKw8G,qBAClBx8G,EAAKw8G,oBAAsB,UAnCtCH,EAA4BjuH,GAFxC2I,EAAQ,WAAY,gCACpBG,EAAO,sBAAuB,mBAClBmlH,GAAb,GAAa9rH,EAAA8rH,6BAA4BA,EAH1B,CAAA/uH,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCEV7rB,OAAO1D,UAAU2+I,OAASj7I,OAAO1D,UAAUi+B,EAAI,WAI3C,IAHA,IAAI99B,EAAIc,KACJ7C,EAAIwG,UAAUd,OAEX1F,KACH+B,EAAIA,EAAEo4B,QAAQ,IAAIuf,OAAO,MAAQ15C,EAAI,MAAO,MAAOwG,UAAUxG,IAEjE,OAAO+B,ICDX,oBAAAy+I,KAGWA,EAAA5+I,UAAAigG,SAAP,WACI,MAA+B,WAAxBh/F,KAAK49I,gBAAuD,MAAxB59I,KAAK49I,gBAG7CD,EAAA5+I,UAAA8+I,WAAP,WACI,MAA+B,aAAxB79I,KAAK49I,gBAAyD,MAAxB59I,KAAK49I,gBAG/CD,EAAA5+I,UAAA++I,SAAP,WACI,MAA+B,WAAxB99I,KAAK49I,gBAAuD,MAAxB59I,KAAK49I,gBAZlDD,EAAwBvuH,GAX7BqI,EAAU,YACPE,SAAU,oBACVwhB,SAAU,uTAKVvL,UACIgwG,eAAgB,QAGlBD,GAAN,GCXUrvH,UAGN,WACI,SAAAyvH,EAAoB17C,GAAAriG,KAAAqiG,OAEb07C,EAAAh/I,UAAAiwB,UAAP,SAAiBmP,GACb,OAAOn+B,KAAKqiG,KAAKS,mBAAmB3kE,IAJtC4/G,EAA0B3uH,GAF/BC,EAAK,WAAY,wBACjB6I,EAAO,SACF6lH,GAAN,GCHJ,SAAUzvH,GACNC,QACKrxB,OAAO,YACP69B,QACG,gBACA,SAACijH,GACG,OAAAA,EAAcC,aAAahlI,KACvB,qCAGX5Z,QAAQ,iCAAkC,WACvC,IAAM6D,EAAW,SAACg7I,EAAKC,GACnB,OAA4D,IAArDD,EAAIp7I,QAAQq7I,EAAQD,EAAIr7I,OAASs7I,EAAOt7I,SAWnD,OACIu9G,QAAS,SAACA,GACN,GAVmB,SAAAniH,GACvB,MACiB,QAAbA,EAAEywB,SACDxrB,EAASjF,EAAEkgC,IAAK,UACbj7B,EAASjF,EAAEkgC,IAAK,mBAMhBigH,CAAmBh+B,GACdA,EAAQzxF,SACTyxF,EAAQzxF,eAET,CAEHyxF,EAAQlhF,QAAgB,OAAI,mBAC5BkhF,EAAQjiF,IAAM7P,EAASY,OAAOC,mBAC1BixF,EAAQjiF,KAEZiiF,EAAQnhF,iBAAkB,EAE1B,IAAMgZ,EAAiB3pB,EAAAoR,SAAS/F,WAC1BkG,EACFoY,GAAkBA,EAAepY,YACjCA,IACAugF,EAAQlhF,QACW,cACf,UAAUW,EACdugF,EAAQnhF,iBAAkB,GAGlC,OAAOmhF,MA/C3B,CAAU9xF,WCAV,SAAUA,GAASA,EAAAiD,UAAAjD,EAAAiD,YASf,WAII,SAAA8sH,EAAoBtlH,EAAgBo9C,EAAkBmoE,GAAtD,IAAAt9G,EAAAhhC,KAAoBA,KAAA+4B,SAAgB/4B,KAAAm2E,WAAkBn2E,KAAAs+I,WAClDvlH,EAAO6W,IAAI,WAAY,WACf5O,EAAKu9G,aACLpoE,EAAS3vB,OAAOxlB,EAAKu9G,eAI7Bv+I,KAAKw+I,YAAYx+I,KAAK8/B,SAGlBu+G,EAAAt/I,UAAA0/I,MAAR,SAAcjgH,GAAd,IAAAwC,EAAAhhC,KACIA,KAAK+4B,OAAOk6B,SAAU,EACtBjzD,KAAKs+I,SACAG,OAAQjgH,GAAEA,IACV8F,SAASC,KAAK,SAAA5kC,GACXqhC,EAAKw9G,YAAY7+I,GACjBqhC,EAAKu9G,YAAcv9G,EAAK09G,KAAKlgH,KAEhC20B,QAAQ,WAAM,OAACnyB,EAAKjI,OAAOk6B,SAAU,KAGtCorF,EAAAt/I,UAAA4/I,YAAR,SAAoBC,GAChB,OAAOA,EAAUnuG,MAAM,KAAK,IAGxB4tG,EAAAt/I,UAAA8/I,eAAR,SAAuBD,GACnB,IAAKA,EAAW,MAAO,GAEvB,IACIE,EADWF,EAAUnuG,MAAM,KAAK,GAAGA,MAAM,KAAK,GAC7BA,MAAM,KAC3B,OAAOquG,EAAMA,EAAMj8I,OAAS,IAGxBw7I,EAAAt/I,UAAAggJ,YAAR,SAAoBC,GAChB,OAAKA,EAAMC,MAECD,EAAME,SAITr9G,KAAM,SAAUozD,MAAO,UAHnBpzD,KAAM,gBAAiBozD,MAAO,QAF9BpzD,KAAM,UAAWozD,MAAO,QAQjCopD,EAAAt/I,UAAA2/I,KAAR,SAAalgH,GAAb,IAAAwC,EAAAhhC,KACI,OAAOA,KAAKm2E,SAAS,WACjBn1C,EAAKm+G,MAAM3gH,GACgB,aAAvBwC,EAAKjI,OAAO6G,QACZoB,EAAK09G,KAAKlgH,IAEf,MAGC6/G,EAAAt/I,UAAAy/I,YAAR,SAAoB7+I,GAApB,IAAAqhC,EAAAhhC,KACQo/I,EAAWz/I,EAAKmgC,QAAQs/G,SACxBJ,EAAQx8I,OAAOu4B,OAAOskH,OAAO/7I,KAC7B,SAAAnG,GAAK,OAAAA,EAAEO,QAAU0hJ,GAAYA,EAASE,eAGtCxzB,EAAa,IACbyzB,EAAmB,IACnBC,GAAY,EAEhB,OAAQ7/I,EAAKigC,QACT,IAAK,SACDksF,EAAa,UACbyzB,EAAmB,UACnBC,EAAYh9I,OAAOi9B,KAAKmB,YAAY6+G,qBACpC,MAEJ,IAAK,WACD3zB,EAAa,4BACbyzB,EAAmB,WACnB,MAEJ,IAAK,WACDzzB,EAAa,WACbyzB,EAAmB,WAI3BhxH,QAAQuJ,OAAO93B,KAAK+4B,QAChBumH,YAAaF,EAASE,YACtBN,MAAOA,IACHthJ,KAAMshJ,EAAMthJ,KACZkiC,OAAQ5/B,KAAK++I,YAAYC,IAE7BU,SAAU1/I,KAAK2+I,YAAYh/I,EAAKmgC,QAAQ8+G,WACxCe,YAAa3/I,KAAK6+I,eAAel/I,EAAKmgC,QAAQ8+G,WAC9CgB,YAAajgJ,EAAKkgJ,UAClBvgB,aAAc3/H,EAAK0yC,UACnBmtG,UAASA,EACTM,aAAcngJ,EAAKmgJ,aACnBrB,MAAO,WACHz9G,EAAKy9G,MAAM9+I,EAAK6+B,KAEpBstF,WAAUA,EACVyzB,iBAAgBA,EAChBQ,YAAapgJ,EAAKmgC,QAAQ5/B,KAC1B0/B,OAAQjgC,EAAKigC,OACbw/G,SAAUz/I,EAAKmgC,QAAQs/G,YAIvBf,EAAAt/I,UAAAogJ,MAAR,SAAc3gH,GAAd,IAAAwC,EAAAhhC,KACIA,KAAKs+I,SACAj6G,SAAU7F,GAAEA,IACZ8F,SAASC,KAAK,SAAA5kC,GACXqhC,EAAKw9G,YAAY7+I,KAEpBqqC,MAAM,SAAAz5B,GACHywB,EAAKjI,OAAOg4F,QAAUxgH,MAlHhC8tI,EAA2BjvH,GARhCqI,EAAU,YACPE,SAAU,sBACVkV,YAAa,4CACbe,UACI9N,QAAS,OAGhB5H,EAAO,SAAU,WAAY,+BACxBmmH,GAAN,GATJ,CAAU/vH,YCMV,oBAAA0xH,KAAMA,EAAwB5wH,GAN7BqI,EAAU,YACPE,SAAU,oBACVwhB,SAAU,yFAIR6mG,GAAN,GCgoBA,SAASC,IACL,OACIC,MAAO,SAAerqG,EAASprC,GAC3B01I,SAASx7I,KAAKkxC,EAAS,IACnBuqG,UAAW,EACXC,MAAO,EACPxY,MAAO,IACPyY,KAAMC,OAAOC,UACbC,WAAYh2I,KAGpBy+D,MAAO,SAAerzB,EAASprC,GAC3B01I,SAAS97I,GAAGwxC,EAAS,IACjBuqG,UAAW,EACXC,MAAO,EACPC,KAAMC,OAAOC,UACbC,WAAYh2I,MAgH5B,SAASi2I,IACL9+I,WAAW,WACP26B,EAAE,0CAA0CokH,KAAK,WAC7C,IAAIC,EAAQrkH,EAAEv8B,MACV6gJ,EAAYD,EAAMplG,SAElBslG,EAASvkH,EAAE,eACV2kD,KACG5+C,SAAU,WACVgvC,KAAM,IACNpzD,MAAO,IACPs/C,MAAOjhC,EAAEv8B,MAAM+gJ,aACfC,SAAUJ,EAAM1/D,IAAI,YACpB+/D,WAAYL,EAAM1/D,IAAI,cACtBggE,WAAYN,EAAM1/D,IAAI,cACtBigE,OAAQ,SAEXC,SAAS7+I,SAASrC,MAEnBuU,EAAS,WACT,IAKIrD,EAAMpR,KAAK5B,MACVk5B,QAAQ,KAAM,QACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,SACdA,QAAQ,MAAO,eACfA,QAAQ,MAAO,SACfA,QAAQ,SAAU,SAAS+pH,GACxB,OAZI,SAASpvI,EAAQ7M,GAEzB,IADA,IAAInH,EAAI,GACCd,EAAI,EAAGA,EAAIiI,EAAQjI,IAAKc,GAAKgU,EACtC,OAAOhU,EASIiS,CAAM,SAAUmxI,EAAMx+I,OAAS,GAAK,MAEnDi+I,EAAOpoG,KAAKtnC,GACZmrB,EAAEv8B,MAAMkhF,IAAI,SAAUj8E,KAAKU,IAAIm7I,EAAOtlG,SAAW,EAAGqlG,KAExDtkH,EAAEv8B,MACGkhE,OAAOzsD,GACP6sI,MAAM7sI,GACN8sI,QAAQ9sI,GACbA,EAAOnB,MAAMtT,SAElB,GAjyBPuuB,QACKrxB,OAAO,YACP69B,QACG,mBACA,gBACA,oBACA,aACA,SAACymH,EAAkBxD,EAAeyD,EAAyCC,GACvED,EAAkBE,WAAW,IAC7BH,EAAiBI,iBAAiBp/I,OAAOu4B,QAA0C,UAAhCv4B,OAAOu4B,OAAOsF,eACjE29G,EAAc6D,eAAc,GAC5BH,EAAWI,4BAA2B,GAEtCN,EAAiBO,2BACb,mGAIX1oI,OAAO,UAAW,OAAQ,SAAAgpF,GAAQ,gBAAAjxF,GAAO,OAAAixF,EAAK2/C,YAAY5wI,OAC1DiI,OAAO,gBAAiB,WACrB,OAAO,SAAS+1B,EAAO6yG,GAGnB,IAFA,IAAIC,EAAa9yG,EAAMqB,MAAM,KACzBmI,EAAS,GACJz7C,EAAI,EAAGA,EAAI+kJ,EAAWr/I,QACvB1F,GAAK8kJ,EAD0B9kJ,IAInCy7C,EAASA,EAASspG,EAAW/kJ,GAAK,IAEtC,OAAOy7C,KAGdv/B,OAAO,UAAW,WACf,OAAO,SAAS+1B,EAAO+yG,GACnB,GAAc,OAAV/yG,EAAgB,MAAO,cAE3B,IAIIgzG,EAAcD,IAAgB,EAC9BE,GACIC,UAAW,KACXC,cAAe,OACfC,UAAW,UACXC,cAAe,KACfC,QAAS,WACTC,OAAQ,WACRx9B,QAAS,aACTy9B,KAAM,QACNx9B,MAAO,SACP7vE,IAAK,QACLd,KAAM,WACN0rC,MAAO,UACPtrC,OAAQ,aACRwwE,KAAM,SACNw9B,MAAO,UACPC,mBAAexjJ,GAEnByjJ,GAvBU,IAAItmH,MAAOmJ,UACd,IAAInJ,KAAK2S,GAAOxJ,UAuBvB88G,EAAUz9I,KAAKO,IAAIu9I,GAAkB,IACrC59B,EAAUu9B,EAAU,GACpBt9B,EAAQD,EAAU,GAClB1wE,EAAO2wE,EAAQ,GACfy9B,EAAQpuG,EAAO,IACf5rB,OAAsCvpB,IAA1B+iJ,EAAQS,cAA8B,IAAMT,EAAQS,cAEhE1mH,EAASimH,EAAQC,UACjBnE,EAASkE,EAAQG,UAEjBQ,EAAa,SAASC,EAAkB79I,EAAQ89I,GAChD,IAAIjxI,EAASsqB,EAAE78B,WAAWujJ,GACpBA,EAAiB79I,EAAQ29I,GACzBE,EACF7kJ,EAAS8kJ,EAAKC,SAAWD,EAAKC,QAAQ/9I,IAAYA,EACtD,OAAO6M,EAAOqlB,QAAQ,MAAOl5B,IAG7BgkJ,GACIW,EAAiB,IACjB3mH,EAASimH,EAAQE,cACjBpE,EAASkE,EAAQI,eAIzB,IAAIW,EACCV,EAAU,IAAMM,EAAWX,EAAQK,QAASz9I,KAAK4zE,MAAM6pE,GAAUL,IACjEK,EAAU,IAAMM,EAAWX,EAAQM,OAAQ,EAAGN,IAC9Cl9B,EAAU,IAAM69B,EAAWX,EAAQl9B,QAASlgH,KAAK4zE,MAAMssC,GAAUk9B,IACjEl9B,EAAU,IAAM69B,EAAWX,EAAQO,KAAM,EAAGP,IAC5Cj9B,EAAQ,IAAM49B,EAAWX,EAAQj9B,MAAOngH,KAAK4zE,MAAMusC,GAAQi9B,IAC3Dj9B,EAAQ,IAAM49B,EAAWX,EAAQ9sG,IAAK,EAAG8sG,IACzC5tG,EAAO,IAAMuuG,EAAWX,EAAQ5tG,KAAMxvC,KAAK4zE,MAAMpkC,GAAO4tG,IACxD5tG,EAAO,IAAMuuG,EAAWX,EAAQliE,MAAO,EAAGkiE,IAC1C5tG,EAAO,KAAOuuG,EAAWX,EAAQxtG,OAAQ5vC,KAAK4zE,MAAMpkC,EAAO,IAAK4tG,IAChEQ,EAAQ,KAAOG,EAAWX,EAAQh9B,KAAM,EAAGg9B,IAC5CW,EAAWX,EAAQQ,MAAO59I,KAAK4zE,MAAMgqE,GAAQR,GAEjD,OAAO9lH,EAAEia,MAAMpa,EAAQgnH,EAAOjF,GAAQl2H,KAAKY,OAGlDxP,OAAO,gBACJ,gBACA,oBACA,SAACgqI,EAAeC,GAAsB,gBAACl0G,EAAO+yG,GAC1C,IAAIzlH,EAAM,IAAID,KACV8H,EAAO,IAAI9H,KAAK2S,GAChBm0G,EAAWt+I,KAAKO,IAAI++B,EAAKqB,UAAYlJ,EAAIkJ,WAC9B3gC,KAAK4L,KAAK0yI,EAAW,OAGpC,MAAO,OAAOD,EAAkBl0G,GAAM,WAM7C/1B,OAAO,WAAY,WAChB,OAAO,SAASwoB,EAAMh/B,EAAQ2G,GAC1B,OAAYlK,MAARuiC,GACIlgC,MAAMkB,KACNA,EAAS,IAGR2G,IACDA,EAAM,OAGNq4B,EAAKh/B,QAAUA,GAAUg/B,EAAKh/B,OAAS2G,EAAI3G,QAAUA,EAC9Cg/B,EAEAp/B,OAAOo/B,GAAMz+B,UAAU,EAAGP,EAAS2G,EAAI3G,QAAU2G,GAIzDq4B,KAGdxoB,OAAO,kBAAmB,WACvB,OAAO,SAAS+1B,GACZ,IAAIymC,EAAO,IAAIp5C,KAAK2S,GACpB,OAAIymC,EAAKxgC,WACO,IAAI5Y,MACHyY,uBAAuB2gC,GAGjCxwE,OAAOm+I,aAGrBnqI,OAAO,WAAY,WAChB,OAAO,SAAS+1B,GACZ,IAAIymC,EAAO,IAAIp5C,KAAK2S,GAEpB,OAAIymC,EAAKxgC,WACO,IAAI5Y,KACeo5C,GAAQ,KAIpCxwE,OAAOm+I,aAGrBnqI,OAAO,YAAa,UAAW,SAAA2hD,GAAW,gBAAA5rB,GAAS,OAAA4rB,EAAQ,OAARA,CAAgB5rB,EAAO,2BAC1E/1B,OAAO,cAAe,WACnB,OAAO,SAAS+1B,GACZ,IAAKA,EAAO,MAAO,GACnB,IAAIymC,EAAO,IAAIp5C,KAAK2S,GACpB,OACIymC,EAAKviC,UACL,IACAuiC,EAAK9hC,aAAa,MAClB,IACA8hC,EAAKjiC,cACL,QACC,IAAMiiC,EAAKG,YAAY/vE,OAAO,GAC/B,KACC,IAAM4vE,EAAKI,cAAchwE,OAAO,MAI5CoT,OAAO,SAAU,SAASna,GACvB,MAAO,mBAAqBA,EAAI,KAAOA,EAAI,SAE9Cy2C,UAAU,UACP,SACA,aACA,SAAS6D,EAAQuJ,GACb,OAAO,SAAS1T,EAAOwG,EAASgC,GAC5B,IAAI9yC,EAAKy0C,EAAO3B,EAAK4rG,QACrB5tG,EAAQl3C,KAAK,OAAQ,SAASukD,GAC1BH,EAAWi0E,UAAU,WACjBjyH,EAAGsqC,GAAS87D,OAAQjoD,YAMvCvN,UAAU,qBACP,WACI,OAAO,SAAStG,EAAOwG,GACnBA,EAAQguF,WACJvsF,OAAQ/a,EAAE,KAAMsZ,SAK/BF,UAAU,kBACP,WACI,OACImvC,UAAW,EACXxsC,SAAU,IACV1C,KAAI,SAACvG,EAAOwG,EAASC,GACjBD,EAAQl3C,KAAK,QAAS,SAAS0C,GAC3B,IAAIy+B,EAAUgW,EAAM4tG,eAChB5jH,IAAYizB,QAAQjzB,KACpBz+B,EAAE4wH,2BACF5wH,EAAEkiD,yBAOzB5N,UAAU,gBACP,WACI,OACImvC,UAAW,EACXxsC,SAAU,IACV1C,KAAI,SAACvG,EAAOwG,EAASgC,GACjB,IAAI12C,EAAO02C,EAAK8rG,cAEZxiJ,GAAUqB,OAAOi9B,MAASj9B,OAAOi9B,KAAKmB,YAAYz/B,IAotB1E,SAA0C00C,EAASgC,EAAM+rG,GACjDA,GACA/tG,EAAQgC,KAAK,WAAY+rG,GAEzB/tG,EAAQvyC,KAAK,KAAKu0C,KAAK,WAAY+rG,GACnC/tG,EAAQl3C,KAAK,mBAAoB,SAASukD,GACtCA,EAAM+uE,2BACN/uE,EAAMK,qBAGV1N,EAAQguG,WAAW,YAEnBhuG,EAAQvyC,KAAK,KAAKugJ,WAAW,YAC7BhuG,EAAQq2F,OAAO,qBAhuBC4X,CAAiCjuG,EAASgC,GAAM,QAMnElC,UAAU,0BACP,WACI,OAAO,SAAStG,EAAO00G,EAAOlsG,GACEt1C,SAASq6F,eAAe,QAC7C96F,iBAAiB,iBAAkB,WACtCutC,EAAM+nF,OAAOv/E,EAAKmsG,8BAKjCruG,UAAU,iBACP,UACA,SAAS8G,GACL,OACInE,SAAU,IACV1C,KAAI,SAACvG,EAAOwG,EAASC,GACjBD,EAAQG,GAAG,QAAS,WACXyG,EAAQwnG,eAAep/I,YAExB7E,KAAK0jI,kBAAkB,EAAG1jI,KAAK5B,MAAMyE,eAO5D8yC,UAAU,iBACP,UACA,eACA,SAASqlB,EAASyyC,GACd,OACIn1D,SAAU,IACVjJ,OACIjxC,MAAO,KAEXw3C,KAAI,SAAC7c,EAAQ6vG,GACT,IAAIj7B,EAAiB,SAAS16D,GAC1B,OAAOA,GAAa,gBAAPA,GAGbixG,EAAU,WACNv2C,EAAe50E,EAAO36B,QACtBqvG,EAAa7f,OAAO70D,EAAO36B,QAInCwqI,EAASjqI,KAAK,QAASulJ,GACvBnrH,EAAO6W,IAAI,WAAY,WACnBg5F,EAASsD,OAAO,QAASgY,KAG7BnrH,EAAOgsD,OAAO,QAAS,SAASo/D,GACxBx2C,EAAew2C,IACfvb,EAASlwF,KAAKsiB,EAAQ,UAARA,CAAmBmpF,IACjCvb,EAASnnD,SAAS,eAElBmnD,EAASlwF,KAAK,eACdkwF,EAASkS,YAAY,qBAO5CnlG,UAAU,iBAAkB,WACzB,OACI2C,SAAU,IACVy2F,QAAS,UACTn5F,KAAA,SAAKvG,EAAYwG,EAAcgC,EAAWusG,GAStC/+I,OAAOtG,UAAU2+I,OAAS,SAAS9+I,EAAG0a,EAAGpa,EAAG1B,GACxC,IAAIo5C,EAAK,eAAiBt9B,GAAK,GAAK,OAAS1a,EAAI,EAAI,MAAQ,KAAO,IAChEylJ,EAAMrkJ,KAAKskJ,QAAQr/I,KAAKU,IAAI,IAAK/G,IAErC,OAAQpB,EAAI6mJ,EAAI/sH,QAAQ,IAAK95B,GAAK6mJ,GAAK/sH,QAAQ,IAAIuf,OAAOD,EAAI,KAAM,MAAQ13C,GAAK,OAiCrFklJ,EAAQG,YAAYtrI,KA9BpB,SAAgB4oB,GACZ,IAAI2iH,GAAS3iH,EACb,OAAIlgC,MAAM6iJ,GAAe3iH,EAClB2iH,EAAM9G,OAAO,EAAG,EAAG,IAAK,OA4BnC0G,EAAQnV,SAASh2H,KAzBjB,SAAe7T,GAQX,GAAIA,EAEA,MADY,8BACD69B,KAAK79B,EAAOP,aAIvBu/I,EAAQK,aAAa5sG,EAAKusG,SAAS,GAC5Bh/I,EACFP,WACAyyB,QAAQ,IAAK,IACbA,QAAQ,IAAK,WAPd8sH,EAAQK,aAAa5sG,EAAKusG,SAAS,GASvC,OAAOh/I,QAS1BiU,OAAO,aACJ,UACA,SAAA2hD,GACI,OAAO,WACH,IAAI0pF,KAAgB7nI,OAAOvf,KAAKqG,UAAW,EAAG,GAAG,GAG7CghJ,EAAc,KACdD,EAAW5hJ,QAAQ,MAAQ,IAC3B6hJ,EAAcD,EAAWj0G,MAAM,KAAK,GACpCi0G,EAAaA,EAAWj0G,MAAM,KAAK,IAGb,KAAtBi0G,EAAWluG,SAAekuG,EAAa,QAE3C,IAAIE,GAAejhJ,UAAU,GAAIghJ,GACjC,OAAO3pF,EAAQ0pF,GAAYpxI,MAAM,KAAMsxI,OAIlDvrI,OAAO,OAAQ,WACZ,OAAO,SAAS+1B,GACZ,OAAOA,KAGd/1B,OAAO,OAAQ,WACZ,OAAO,SAAS+1B,GACZ,OAAQA,GACJ,KAAK,EACL,IAAK,eACD,MAAO,eACX,KAAK,EACL,IAAK,gBACD,MAAO,eACX,KAAK,EACL,IAAK,WACD,MAAO,cACX,KAAK,EACL,IAAK,sBACD,MAAO,gBACX,KAAK,EACL,IAAK,cACD,MAAO,eACX,KAAK,EACL,IAAK,SACD,MAAO,eACX,QACI,MAAO,OAItB/1B,OAAO,aAAc,WAClB,OAAO,SAAS+1B,GACZ,OAAQA,GACJ,IAAK,OACD,MAAO,UACX,IAAK,WACD,MAAO,QACX,IAAK,WACD,MAAO,WACX,IAAK,OACD,MAAO,MACX,QACI,OAAOA,MAItB/1B,OAAO,OAAQ,WACZ,OAAO,SAAS+1B,GACZ,OAugBZ,SAAsB3xC,GAClBA,EAAI4H,OAAO5H,GAEX,IAAIsU,EAAI9M,KAAKM,MAAM9H,EAAI,MACnBF,EAAI0H,KAAKM,MAAO9H,EAAI,KAAQ,IAC5ByB,EAAI+F,KAAKM,MAAO9H,EAAI,KAAQ,IAEhC,OAAQsU,EAAI,EAAIA,EAAI,IAAM,KAAOxU,EAAI,GAAK,IAAM,IAAMA,EAAI,KAAO2B,EAAI,GAAK,IAAM,IAAMA,EA9gBvE2lJ,CAAaz1G,MAG3B/1B,OAAO,cAAe,WAgCnB,OAAO,SAAS+1B,GACZ,OAhCc,SAAS01G,EAAOC,GAQ9B,IAAKD,EAAO,MAAO,GAOnB,OAAIA,GAAS,GAAKA,EALH,KAMJA,EAAQ,KACRA,GAPI,MAOiBA,EANjBE,SAQHF,EATG,MASeR,QAD1BS,EAAY,GACmC,MACxCD,GATIE,SASiBF,EARjBG,YASHH,EAVGE,SAUeV,QAAQS,GAAa,MACxCD,GAVIG,YAUiBH,EATjBI,eAUHJ,EAXGG,YAWeX,QAAQS,GAAa,MACxCD,GAXII,eAYHJ,EAZGI,eAYeZ,QAAQS,GAAa,MAExCD,EAAQ,KAKZK,CAAY/1G,EAAO,MAGjC/1B,OAAO,WAAY,WAChB,OAAO,SAAS+1B,GACZ,IAAKA,EAAO,OAAOA,EAEnB,IAAIg2G,EAAYh2G,EACXqB,MAAM,KACNt2B,MACAmmB,cACL,OAAQ8kH,GACJ,IAAK,MACD,MAAO,eACX,IAAK,MACL,IAAK,OACD,MAAO,gBACX,IAAK,MACL,IAAK,MACL,IAAK,MACD,MAAO,aACX,QACI,OAAOA,EAAY,gBAIlC/rI,OAAO,YAAa,WACjB,OAAO,SAAS+1B,GACZ,OAAKA,GAAc,OAK1B/1B,OAAO,kBAAmB,WAMvB,OAAO,SAAS+1B,GACZ,IAAIymC,EAAO,IAAIp5C,KAAK2S,GAIpB,OAHY,IAAI3S,KACco5C,GAAQ,OAEvB,KAGtBx8D,OAAO,MAAO,WACX,OAAO,SAAS+1B,GACZ,IAAImqC,EAAQ,IAAI98C,KACZwoF,EAAY,IAAIxoF,KAAK2S,GACrBi2G,EAAM9rE,EAAM3lC,cAAgBqxE,EAAUrxE,cACtCr2C,EAAIg8E,EAAM1lC,WAAaoxE,EAAUpxE,WAMrC,OAJIt2C,EAAI,GAAY,IAANA,GAAWg8E,EAAMjmC,UAAY2xE,EAAU3xE,YACjD+xG,IAGA1jJ,MAAM0jJ,GAAa,WAEhBA,EAAM,WAGpBhsI,OAAO,WAAY,WAChB,OAAO,SAASwoB,GACZ,OAAKA,EAEEA,EAAKvK,QAAQ,MAAO,SAFTuK,KAKzBxoB,OAAO,oBAAqB,WACzB,OAAO,SAASisI,GACZ,OAAKA,GAAaA,EAAShsG,aAEvBgsG,EAASj5E,YAAoB,IAAMi5E,EAASj5E,YAAc,MAAQi5E,EAAShsG,aAAe,IAEvFgsG,EAAShsG,aAJgC,MAOvDjgC,OAAO,iBAAkB,WACtB,OAAO,SAAAozD,GACH,OAAOA,EAAyB,WAAa,cAGpDpzD,OAAO,cAAe,WACnB,OAAO,SAAAqnD,GACH,IAAIA,EAAaC,SAASniC,GAC1B,OAAOkiC,EAAa+L,uBAAyB/L,EAAaC,SAAS3pB,YAAc0pB,EAAaC,SAAS4J,SAI9GlrE,QAAQ,gBACL,aACA,SAAS0jD,GAGL,OACIljD,MAAK,WACD,MAJI,YAMR0lJ,SAAQ,SAACC,GAELziG,EAAWljD,MAAQ2lJ,OAKlCpnJ,MAAM,aACHy3E,MACI4vE,WAAY,WACZC,aAAc,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAClDC,UAAW,SAAU,UAAW,UAAW,WAAY,YAAa,UAAW,YAC/EC,SAAU,EACVC,YACI,UACA,WACA,QACA,QACA,MACA,OACA,OACA,WACA,YACA,UACA,WACA,YAEJC,SAAU,WACVC,SAAU,UAEdC,IACIC,MACI3jH,UACI4jH,GAAI,cACJC,GAAI,oBAKnBC,SAAS,YAAa,wCAuBtBhoJ,MAAM,mBA4BX,WACIwD,WAAW,WAUX26B,EAAE,yBAAyBokH,KAAK,WAC5B,IAAIvxG,EAAQ7S,EAAEv8B,MAAMoR,MACpB,GAAImrB,EAAEv8B,MAAM2oI,SAAS,WAAY,CAC7B,IAAIjnG,EAAQnF,EAAEv8B,MAAM63C,KAAK,cACrBzI,EAAMvsC,QAAU,IAChB05B,EAAEv8B,MACGmiD,SACA7+C,KAAK,mBACLo1C,KAAKtJ,EAAMvsC,OAAS,MAAQ6+B,GAC7B0N,EAAMvsC,OAAS6+B,IACfnF,EAAEv8B,MAAMyhF,SAAS,SACjBllD,EAAEv8B,MACGmiD,SACA7+C,KAAK,mBACLm+E,SAAS,WAK1BllD,EAAEv8B,MAAMg2C,GAAG,QAAS,WAChB,IAAI5G,EAAQ7S,EAAEv8B,MAAMoR,MAAMvO,OAC1B,GAAI05B,EAAEv8B,MAAM2oI,SAAS,WAAY,CAC7B,IAAIjnG,EAAQnF,EAAEv8B,MAAM63C,KAAK,cACzBtb,EAAEv8B,MACGmiD,SACA7+C,KAAK,mBACLo1C,KAAKnc,EAAEv8B,MAAMoR,MAAMvO,OAAS,MAAQ6+B,GACrC0N,EAAQ1N,GACRnF,EAAEv8B,MAAMyhF,SAAS,SACjBllD,EAAEv8B,MACGmiD,SACA7+C,KAAK,mBACLm+E,SAAS,WAEdllD,EAAEv8B,MAAM86I,YAAY,SACpBv+G,EAAEv8B,MACGmiD,SACA7+C,KAAK,mBACLw3I,YAAY,eAGrBv+G,EAAEv8B,MACG86I,YAAY,SACZx3I,KAAK,QACLgmB,IAAI,QACJ+8H,QAAQ,KACR3tG,OACiB,KAAlBnc,EAAEv8B,MAAMoR,QACRmrB,EAAEv8B,MAAM86I,YAAY,SACpBv+G,EAAEv8B,MACGmiD,SACA7+C,KAAK,QACLgmB,IAAI,QACJ+8H,QAAQ,UA7DzB3F,IAqER,WACI,IACI4F,EACAhtI,EACAkuC,EACA++F,EAJchqH,EAAE,WAAWjT,IAAI,sBAKvB0sB,GAAG,QAAS,SAAS30C,GAC7B,IAAIu/I,EAAQrkH,EAAEv8B,MACd4gJ,EAAM9F,YAAY,SAEb8F,EAAMt9I,KAAK,QAAQT,QAMpByjJ,EAAO1F,EAAMt9I,KAAK,SACbw3I,YAAY,UALjB8F,EAAM4F,QAAQ,6BACdF,EAAO1F,EAAMt9I,KAAK,SAMtBijJ,EAAethJ,KAAKU,IAAIi7I,EAAMG,aAAcH,EAAM5/D,eAElD1nE,EAAIjY,EAAEolJ,MAAQ7F,EAAMj4I,SAASuV,KAAOqoI,EAAe,EACnD/+F,EAAInmD,EAAEqlJ,MAAQ9F,EAAMj4I,SAAS2oE,IAAMi1E,EAAe,EAClDD,EAAKplE,KACD5P,IAAK9pB,EACLtpC,KAAM5E,EACNkkD,MAAO+oF,EACP/qG,OAAQ+qG,IACT9kE,SAAS,SACZm/D,EAAMn/D,SAAS,WAjGfklE,IACD,OAhCFvoJ,MAAM,yBAoLX,WAEIwD,WAAW,YAMf,WAEI,IAAI0qF,EAAU/vD,EAAE,YACOA,EAAE,sBACLA,EAAE,eAGtBA,EAAE,YACGk6F,IAAI,SACJzgF,GAAG,QAAS,WACTzZ,EAAE,2BAA2Bu+G,YAAY,UAGrCxuD,EAAQq8C,SAAS,mBACjBr8C,EAAQwuD,YAAY,kBAAkBr5D,SAAS,YAC/CllD,EAAEv8B,MACGsD,KAAK,OACLm+E,SAAS,WAGT6K,EAAQq8C,SAAS,YACtBr8C,EAAQwuD,YAAY,aAIpBxuD,EAAQ7K,SAAS,YACjBllD,EAAEv8B,MACGsD,KAAK,OACLm+E,SAAS,WAGd6K,EAAQq8C,SAAS,cACjBr8C,EAAQwuD,YAAY,eAKhCv+G,EAAE,iBACGk6F,IAAI,SACJzgF,GAAG,QAAS,WACTzZ,EAAE,2BAA2Bu+G,YAAY,UAGrCxuD,EAAQq8C,SAAS,aACjBr8C,EAAQwuD,YAAY,YAAYr5D,SAAS,kBACzCllD,EAAEv8B,MACGsD,KAAK,OACLm+E,SAAS,WAIT6K,EAAQq8C,SAAS,kBACtBr8C,EAAQwuD,YAAY,mBAIpBxuD,EAAQ7K,SAAS,kBACjBllD,EAAEv8B,MACGsD,KAAK,OACLm+E,SAAS,WAId6K,EAAQq8C,SAAS,cACjBr8C,EAAQwuD,YAAY,eAKhCv+G,EAAE,eACGk6F,IAAI,SACJzgF,GAAG,QAAS,WACTzZ,EAAE,2BAA2Bu+G,YAAY,UAGrCxuD,EAAQq8C,SAAS,aACjBr8C,EAAQwuD,YAAY,cAIpBxuD,EAAQ7K,SAAS,aACjBllD,EAAEv8B,MACGsD,KAAK,OACLm+E,SAAS,UAEd6K,EAAQwuD,YAAY,YAAYA,YAAY,qBA1FpD8L,IACD,OAvLFxoJ,MAAM,eAAgBsiJ,GACtB1/B,UAAU,kBAAmBi/B,GAC7Bj/B,UAAU,mBAAoBi/B,GAsRnCx9I,OAAO1D,UAAU8nJ,QAAU,WACvB,OAAO7mJ,KAAKiD,OAAO,EAAG,GAAGq9B,cAAgBtgC,KAAKiD,OAAO,IAQ1B3D,MAA3BwnJ,SAAS/nJ,UAAUrB,MACnBG,OAAOC,eAAegpJ,SAAS/nJ,UAAW,QACtCf,IAAG,WACC,IAAIoT,EAAM,mBAAmB21I,KAAK/mJ,KAAO,IACzC,GAAIoR,EAAK,OAAOA,EAAI,MAMhC/L,OAAOtG,UAAUioJ,SAAW,WACxB,IAEI5hC,EAAQngH,KAAKM,MAFFvF,KAEmB,MAC9BmlH,EAAelgH,KAAKM,OAHTvF,KAGmC,KAARolH,GAAgB,IACtDs9B,EAJW1iJ,KAIuB,KAARolH,EAAyB,GAAVD,EAY7C,OATIA,EAAU,KACVA,EAAU,GAAKA,GAEfu9B,EAAU,KACVA,EAAU,IAAMA,GAITv9B,EAAU,IAAMu9B,GC77B/B,SAAUp0H,IAAS,SAAAiD,IAAQ,SAAA/B,GAMvB,IAAAy3H,EAAA,WACI,SAAAA,EACYluH,EACRg3G,GADQ/vI,KAAA+4B,SAGRA,EAAO10B,GAAK,GACZ6mI,OAAOyV,KAAK5nH,EAAOk2C,KAAK5qE,GAAI,SAAClH,EAAGoS,GAC5BwpB,EAAO10B,KAAOkL,EAAE+pC,aAAal7C,OAASmR,EAAE+pC,cAAgB,OAE5DvgB,EAAO10B,GAAK00B,EAAO10B,GAAGjB,UAAU,EAAG21B,EAAO10B,GAAGxB,OAAS,GAEtDk2B,EAAOmuH,GAAK,GACZhc,OAAOyV,KAAK5nH,EAAOk2C,KAAKi4E,GAAI,SAAC/pJ,EAAGoS,GAC5BwpB,EAAOmuH,KAAO33I,EAAE+pC,aAAal7C,OAASmR,EAAE+pC,cAAgB,OAE5DvgB,EAAOmuH,GAAKnuH,EAAOmuH,GAAG9jJ,UAAU,EAAG21B,EAAOmuH,GAAGrkJ,OAAS,GAEtDk2B,EAAOouH,IAAM,GACbjc,OAAOyV,KAAK5nH,EAAOk2C,KAAKk4E,IAAK,SAAChqJ,EAAGoS,GAC7BwpB,EAAOouH,MAAQ53I,EAAE+pC,aAAal7C,OAASmR,EAAE+pC,cAAgB,OAE7DvgB,EAAOouH,IAAMpuH,EAAOouH,IAAI/jJ,UAAU,EAAG21B,EAAOouH,IAAItkJ,OAAS,GAEzDk2B,EAAOmvB,KAAO,WACVnvB,EAAOk6B,SAAU,EACjB88E,EACKqX,QACG5oH,GAAIzF,EAAOk2C,KAAKzwC,GAChBn6B,GAAI00B,EAAO10B,GACX6iJ,GAAInuH,EAAOmuH,GACXC,IAAKpuH,EAAOouH,MAEf7iH,SAASC,KAAK,WACXxL,EAAOk6B,SAAU,EACjBl6B,EAAOq4F,mBAI3B,OAtCa61B,EAA0B73H,GAFtCmJ,EAAW,OAAQ,8BACnBL,EAAO,SAAU,yBACL+uH,GAAb,GAAaz3H,EAAAy3H,2BAA0BA,EANhB,CAAA11H,EAAA/B,OAAA+B,EAAA/B,UAAR,CAAAlB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA/B,OAAA+B,EAAA/B,SAyBvBjB,QAAQrxB,OAAO,YAAYsxB,QAAQ,wBAC/B,YACA,SAACC,GACG,OAAAA,EACI,wCAGIzwB,KACI0wB,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB77B,QACI+rB,OAAQ,MACR1gB,SAAS,GAEbo5I,QACI14H,OAAQ,OACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUxQ,GAAI,QAEpC6oH,eACIlpH,IACI,gEACJzP,OAAQ,MACR1gB,SAAS,EACT2gB,QACI6jF,OAAQ,UACR80C,oBAAqB,8BArD9B,CAAAh5H,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAA/B,GAqBvB,IAAA+3H,EAAA,WACI,SAAAA,EACYxuH,EACAspE,EACA0tC,EACR35D,GAHQp2E,KAAA+4B,SACA/4B,KAAAqiG,OACAriG,KAAA+vI,uBAGRh3G,EAAOyuH,YAAc,SAAAv4E,GACjBmH,EACI,sDAEI53C,GAAI,mBACJ82G,UAAU,EACVl8D,WAAY,QACZm8D,cAAe,iBACf79G,WAAY,+BAGZu3C,KAAIA,KAKhBl2C,EAAO0uH,aAAe,WAClB,QAASjlJ,OAAOi9B,KAAKmB,YAAYmxF,OAkC7C,OA9BWw1B,EAAAxoJ,UAAAqtC,QAAP,WACIpsC,KAAK0nJ,kBACL1nJ,KAAK+4B,OAAO4uH,WAAa3nJ,KAAK4nJ,cAAc5nJ,KAAK+4B,OAAOk2C,OAGpDs4E,EAAAxoJ,UAAA2oJ,gBAAR,eAAA1mH,EAAAhhC,KACIA,KAAK+4B,OAAO8uH,kBACZ7nJ,KAAK+vI,qBAAqB/xI,KAAMwgC,GAAIx+B,KAAK+4B,OAAOk2C,KAAKzwC,KAAM8F,SAASC,KAAK,SAAAmD,GACrE1G,EAAKjI,OAAO40C,YAAcjmC,EAAKimC,YAC/B,IAAyB,IAAAv1C,EAAA,EAAAwE,EAAAoE,EAAKjI,OAAO40C,YAAZv1C,EAAAwE,EAAA/5B,OAAAu1B,IAAyB,CAA7C,IAAMslG,EAAU9gG,EAAAxE,GACjB4I,EAAKjI,OAAO8uH,eAAenqB,EAAWoqB,WAAa9mH,EAAK+mH,yBACpD/mH,EAAKjI,OAAOk2C,KACZyuD,OAMR6pB,EAAAxoJ,UAAAgpJ,yBAAR,SAAiC94E,EAA2ByuD,GACxD,OAAO19H,KAAKqiG,KAAKS,mBACbx0E,EAAAY,OAAOC,mBAAmB,yBAAyB8/C,EAAKzwC,GAAE,eAAek/F,EAAWoqB,aAIpFP,EAAAxoJ,UAAA6oJ,cAAR,SAAsB34E,GAIlB,OAHYA,EACNjvE,KAAKqiG,KAAKS,mBAAmBx0E,EAAAY,OAAOC,mBAAmB,yBAAyB8/C,EAAKzwC,KACrF,IAvDD+oH,EAAuBn4H,GAFnCmJ,EAAW,OAAQ,2BACnBL,EAAO,SAAU,OAAQ,uBAAwB,iBACrCqvH,GAAb,GAAa/3H,EAAA+3H,wBAAuBA,EArBb,CAAAh2H,EAAA/B,OAAA+B,EAAA/B,UAAR,CAAAlB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WhdEVC,QAAQrxB,OAAO,YAAYmC,QAAQ,+BAC/B,YACA,SAAAovB,GACI,OAAAA,EACI,8CAGIsgD,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,WAEJk4F,UACIn4F,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,QAASvH,KAAM,EAAGpC,SAAU,KAElD1iC,QACI+rB,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,SACRxG,MAAO,GACPf,KAAM,EACNpC,SAAU,KAGlB2iH,WACIt5H,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,WAEtBi5G,WACIv5H,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,WAEtBk5G,cACIx5H,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,cAEtB3K,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB2J,QACIzZ,OAAQ,SACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB6pE,MACI35E,OAAQ,OACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB/pB,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,aid9DlC,SAAUlQ,IAAS,SAAAiD,GAgBf,IAAA42H,EAAA,WACI,SAAAA,EAAoBpvH,GAApB,IAAAiI,EAAAhhC,KAAoBA,KAAA+4B,SAChB/4B,KAAKooJ,2BAELrvH,EAAOsvH,iBAAmB,SAAC1kC,EAAOhkH,GAC9B,OAAKgkH,IAAWA,EAAM2kC,eAAkB3kC,EAAM4kC,aAEzC5oJ,GAASA,EAAK23F,WAIZqsB,EAAM2kC,cAAczlJ,OACrB8gH,EAAM2kC,cAAchxH,QAAQ,cAAe0J,EAAKwnH,cAAc7oJ,EAAMgkH,EAAMjmH,OAC1EimH,EAAM4kC,YAAYjxH,QAAQ,cAAe0J,EAAKwnH,cAAc7oJ,EAAMgkH,EAAMjmH,OALnEimH,EAAM2kC,cAAczlJ,OAAS8gH,EAAM2kC,cAAgB3kC,EAAM4kC,YAHD,IAWvExvH,EAAO0vH,eAAiB,SAAC9kC,EAAOhkH,GAC5B,OAAKgkH,GAAUA,EAAM4kC,YAEhB5oJ,GAASA,EAAK23F,WAEZqsB,EAAM4kC,YAAYjxH,QAAQ,cAAe0J,EAAKwnH,cAAc7oJ,EAAMgkH,EAAMjmH,OAFzCimH,EAAM4kC,YAFH,IAO7CxvH,EAAO2vH,kBAAoB,SAAC/kC,EAAOhkH,GAC/B,OAAOgkH,EAAMglC,mBAAqB,QAAU,UAGhD5vH,EAAO6vH,mBAAqB,SAACjpJ,EAAWjC,GAA0B,QAAEsjC,EAAKwnH,cAAc7oJ,EAAMjC,IAgCrG,OA7BcyqJ,EAAAppJ,UAAAypJ,cAAV,SAAwB7oJ,EAAWjC,GAC/B,IAAImrJ,EAAa,GASjB,OARIlpJ,GAAQA,EAAK23F,YACb/oE,QAAQxa,QAAQpU,EAAK23F,WAAY,SAACl5F,EAAOM,GACjCA,EAAI4hC,gBAAkB5iC,EAAK4iC,gBAC3BuoH,EAAazqJ,KAKlByqJ,GAGDV,EAAAppJ,UAAAqpJ,yBAAV,WACI,IAAMrtH,EAASv4B,OAAOu4B,OACtB/6B,KAAK+4B,OAAO+vH,wBAEZ,IAAoB,IAAA1wH,EAAA,EAAAwE,EAAA7B,EAAO+tH,qBAAP1wH,EAAAwE,EAAA/5B,OAAAu1B,IAA6B,CAA5C,IAAMurF,EAAK/mF,EAAAxE,GAERurF,GACAA,EAAM3kB,UACN2kB,EAAMolC,OAAS/oJ,KAAK+4B,OAAOgwH,MAC3BplC,EAAMqlC,QAAUhpJ,KAAK+4B,OAAOiwH,OAC5BrlC,EAAMmD,QAAU9mH,KAAK+4B,OAAO+tF,OAC5BnD,EAAMrhF,WAAatiC,KAAK+4B,OAAOuJ,UAE/BtiC,KAAK+4B,OAAO+vH,qBAAqB7vI,KAAK0qG,KAzDzCwkC,EAA8B/4H,GAD1C8I,EAAO,WACKiwH,GAAb,GAAa52H,EAAA42H,+BAA8BA,EAhB5B,CAAA75H,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GACf,IAAA03H,EAAA,oBAAAA,IACIjpJ,KAAAs4C,SAAW,IACXt4C,KAAA6sC,YACI,mEACJ7sC,KAAAs3B,SAAU,EACVt3B,KAAAk5C,YAAa,EACbl5C,KAAA03B,WAAanG,EAAA42H,+BACbnoJ,KAAAqvC,OACI05G,KAAM,QACNC,MAAO,SACPliC,MAAO,SACPxkF,SAAU,YACV3iC,KAAM,QACNupJ,WAAY,eAMpB,OAHWD,EAAA5pJ,QAAP,WACI,OAAO,WAAM,WAAI4pJ,IAEzBA,EAnBA,GAAa13H,EAAA03H,8BAA6BA,EAoB1C16H,QACKrxB,OAAO,YACPy4C,UACG,uBACAszG,EAA8B5pJ,WAzBvB,CAAAivB,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,GAASA,EAAAiD,UAAAjD,EAAAiD,YAEf,oBAAA43H,KACWA,EAAApqJ,UAAAiwB,UAAP,SAAiBs5H,GACb,OAAIA,GAAmC,KAAlBA,EACV,uGAEJ,IALTa,EAAc/5H,GADnBC,EAAK,WAAY,aACZ85H,GAAN,GAFJ,CAAU76H,WCAVC,QAAQrxB,OAAO,YAAYkpJ,SAAS,aAIhCgD,UAEQ1qJ,IAAK,iBACLN,MAAO,iBACPmoC,YAAa,8CAOrBvC,OAEQtlC,IAAK,gBACLN,MAAO,UAGPM,IAAK,YACLN,MAAO,SAIf2hD,QACMrhD,IAAK,2BAA4BN,MAAO,eACxCM,IAAK,uBAAwBN,MAAO,gBACpCM,IAAK,gBAAiBN,MAAO,WAC7BM,IAAK,cAAeN,MAAO,SAC3BM,IAAK,eAAgBN,MAAO,eAC5BM,IAAK,kBAAmBN,MAAO,aAC/BM,IAAK,cAAeN,MAAO,SAC3BM,IAAK,uBAAwBN,MAAO,aACpCM,IAAK,mBAAoBN,MAAO,SAChCM,IAAK,aAAcN,MAAO,SAC1BM,IAAK,qBAAsBN,MAAO,gBAGxCirJ,gBACM3qJ,IAAK,iCAAkCN,MAAO,SAC9CM,IAAK,6BAA8BN,MAAO,gBAC1CM,IAAK,2BAA4BN,MAAO,eACxCM,IAAK,eAAgBN,MAAO,UAC5BM,IAAK,cAAeN,MAAO,WAC3BM,IAAK,cAAeN,MAAO,oBAC3BM,IAAK,mCAAoCN,MAAO,iBAGtDuiE,WACMjiE,IAAK,yBAA0BN,MAAO,WACtCM,IAAK,WAAYN,MAAO,UACxBM,IAAK,WAAYN,MAAO,eACxBM,IAAK,YAAaN,MAAO,gBACzBM,IAAK,YAAaN,MAAO,mCAO/BwhC,SAEQlhC,IAAK,iBACLN,MAAO,iBAGPM,IAAK,eACLN,MAAO,YAGPM,IAAK,gBACLN,MAAO,sBAGPM,IAAK,eACLN,MAAO,eAGPM,IAAK,gBACLN,MAAO,iBAGPM,IAAK,eACLN,MAAO,aAQfkrJ,kBAEQ5qJ,IAAK,oBACLN,MAAO,UAGPM,IAAK,yBACLN,MAAO,gBAGPM,IAAK,oBACLN,MAAO,YAGPM,IAAK,uBACLN,MAAO,aAIf+5C,MAEQz5C,IAAK,qBACLN,MAAO,gBAGPM,IAAK,eACLN,MAAO,YAIfmrJ,WAEQ7qJ,IAAK,MACLN,MAAO,WAGPM,IAAK,MACLN,MAAO,YAGPM,IAAK,MACLN,MAAO,YAGPM,IAAK,MACLN,MAAO,aAGPM,IAAK,MACLN,MAAO,cAGPM,IAAK,MACLN,MAAO,YAGPM,IAAK,MACLN,MAAO,aAIf6iD,SAEQviD,IAAK,aACLN,MAAO,SAGPM,IAAK,eACLN,MAAO,UAGPM,IAAK,gBACLN,MAAO,KAIf61D,SAEQv1D,IAAK,YACLN,MAAO,QAGPM,IAAK,cACLN,MAAO,UAGPM,IAAK,eACLN,MAAO,aAIforJ,iBAEQ9qJ,IAAK,wBACLN,MAAO,+CAGPM,IAAK,wBACLN,MACI,oFCxLhBmwB,QACKrxB,OAAO,YACPmC,QAAQ,YACL,aACA,UACA,YACA,SAAC0jD,EAAYiY,EAASyuF,GAgDlB,OA7CIC,mBAAoB,SAAC/xH,EAAUj5B,GACvBA,GAAqB,iBAAPA,IAAiBA,EAAMA,EAAI4hC,eAE7C,IAAI+V,EAAS33C,EACTirJ,EAAU,UACVvtH,EAAS,GAEb,GAAIzE,EACA,GAAIA,EAAS70B,QAAQ,KAAM,CACvB,IAAM8mJ,EAAcjyH,EAAS8Y,MAAM,KAC/Bm5G,EAAY/mJ,OAAS,IACrB8mJ,EAAUC,EAAY,GACtBxtH,EAASwtH,EAAY,SAGzBxtH,EAASzE,EAQjB,GAHIyE,GAAoB,IAAVA,IAAc19B,EAAM09B,EAAS,IAAM19B,GAI7C+qJ,GACAA,EAAUE,IACVF,EAAUE,GAAS9mJ,OAAS,EAC9B,CAGE,IAAMuL,EAAQ4sD,EAAQ,SAARA,CACVyuF,EAAUE,GACV,SAAA9zG,GACI,OAAOA,EAAQn3C,MAAQA,IAE7B,GAEE0P,IAAOioC,EAASjoC,EAAMhQ,OAG9B,OAAOi4C,OAUtBh9B,OAAO,QACJ,WACA,SAAAwwI,GACI,OAAO,SAACz6G,EAAOzgB,GACX,OAAOk7H,EAASH,mBAAmB/6H,EAAQygB,OCrE3D,ICFU9gB,EDEgBA,EAAS4f,kBAEnC,SAAU5f,IAAS,SAAAiD,GACFA,EAAAu4H,kBAAoB,IAAIxwH,GAAGG,QAExC,IAAO0H,EAAW7S,EAAS4S,QAAQC,SAE5B8uD,EAA0B3hE,EAAS2hE,yBAqB1C,WAyBI,SAAA85D,EACYhnG,EACAvf,EACAge,EACRwZ,EACQxQ,EACA2oC,EACA5F,EACAvqC,EACAwqC,EACAw8D,GAVZ,IAAAhpH,EAAAhhC,KACYA,KAAA+iD,aACA/iD,KAAAwjC,YACAxjC,KAAAwhD,SAEAxhD,KAAAwqD,iBACAxqD,KAAAmzF,eACAnzF,KAAAutF,eACAvtF,KAAAgjD,YACAhjD,KAAAwtF,mBACAxtF,KAAAgqJ,gBAlCLhqJ,KAAAw9D,MAAQh7D,OAAOi7D,WAGfz9D,KAAAyrI,eAAgB,EAChBzrI,KAAA+qI,cAAgB,KAKhB/qI,KAAA4pC,YAAc,GACd5pC,KAAAgrI,WAAY,EACZhrI,KAAA+rI,WAAY,EAEZ/rI,KAAAy/B,KAAOj9B,OAAOi9B,KACdz/B,KAAA08C,UAAW,EAEV18C,KAAAisI,YAAc,KACdjsI,KAAAgsI,iBAAmB,EACnBhsI,KAAAiqJ,cAAgB,KAChBjqJ,KAAAkqJ,mBAAqB,EAuJrBlqJ,KAAAmqJ,yBAA2B,SAAC9zG,EAAmBzM,GACnD,OAAI5I,EAAKopH,kBAAkB/zG,EAAOs/D,YAAa/rE,GAAqB,cAEhE5I,EAAKopH,kBAAkB/zG,EAAOw/D,cAAejsE,GAAqB,gBAE/DyM,EAAOs/D,YAAc,cAAgBt/D,EAAOw/D,cAAgB,gBAAkB,MA3IrF71G,KAAK08C,UAAYl6C,OAAOyiC,OAAO2J,UAE/B5uC,KAAKirI,UAAYC,OAAO,qBACxBlrI,KAAKqqJ,aAAc,EACnB9tH,EAAE,qBAAqB59B,KAAK,QAAS,WACjCqiC,EAAKyqG,eAAgB,EACrBlvG,EAAE,QAAQyZ,GAAG,wBAAyB,SAAA30C,GAClC,IAAM8C,EAASo4B,EAAEl7B,EAAE8C,QAEdA,EAAO8K,GAAG,sBACV9K,EAAOunI,UAAUz8H,GAAG,sBACpB9K,EAAOunI,UAAUz8H,GAAG,oBAErBstB,EAAE,QAAQk6F,IAAI,yBAEdz1F,EAAKyqG,eAAgB,OAMjCzrI,KAAKsqJ,gBAAuBtvF,EAAQ,aAEpCh7D,KAAKipF,YAAc9nD,EACf,SAACqH,GACGxH,EAAKr+B,OAAO6lC,IAEhB,KACA,GAGJua,EAAWnT,IAAI,gBAAiB,SAACsT,EAAO1a,GACpCxH,EAAK4I,YAAcpB,EACnBxH,EAAKr+B,OAAO6lC,KAGhBxoC,KAAKuqJ,mCAAqCt6D,EACrC52E,OAAO,SAAAC,GAAK,QAAEA,IACd4f,uBACAc,UAAU,SAAAm2D,GACFnvD,EAAK+3B,YAAe/3B,EAAK+3B,WAAWl2D,QAEzCm+B,EAAK+3B,WACA1/C,OAAO,SAAAC,GAAK,OAAAA,EAAEklB,KAAO2xD,EAAap0B,SAClChoD,QAAQ,SAAAywB,GAAa,OAAOA,EAAW5E,OAASuwD,EAAavwD,WAI1EmjB,EAAWnT,IAAI,sBAAuB,WAClC5O,EAAKuqG,oBACLvqG,EAAKwpH,cACDhnH,EAAUhG,OAAO16B,QAAQ,WAAa,GAAK0gC,EAAUhG,OAAO16B,QAAQ,gBAAkB,IAI3FinJ,EAAAhrJ,UAAA4tC,WAAP,WACI3sC,KAAKuqJ,mCAAmC39G,WAGrCm9G,EAAAhrJ,UAAA2gI,kBAAP,WACI,OAAOl9H,OAAOi9B,KAAKmB,YAAY++F,eAG5BoqB,EAAAhrJ,UAAA0rJ,SAAP,SAAgBC,EAAmBr+F,GAC/BrsD,KAAKurI,oBACD/oI,OAAOu4B,OAAO+zD,OAAOC,UAA0B,6CAAd27D,IACjCA,EAAY,0CAChB1qJ,KAAKwhD,OAAOib,GAAGiuF,GAAar+F,SAAQA,EAAEjmB,IAAK,KAAMjmC,IAAK,KAAMqoC,MAAO,OAAUg2D,QAAQ,KAGlFurD,EAAAhrJ,UAAAwsI,kBAAP,eAAAvqG,EAAAhhC,KACIA,KAAK4pC,YAAc,GACnB5pC,KAAK+rI,WAAY,EACjB/rI,KAAKgsI,iBAAmB,EACxBhsI,KAAKisI,YAAc,KACnBjsI,KAAKqqJ,aAAc,EACnB9tH,EAAE,qBAAqBk6F,IAAI,mBAAoB,SAAAp1H,GAAK,OAAA2/B,EAAKmrG,eAAe9qI,KACxEk7B,EAAE,QAAQk6F,IAAI,0BAGXszB,EAAAhrJ,UAAA4rJ,YAAP,SAAmBt0G,EAAmBstE,EAAO/5E,GACzC,SAAIyM,IAAUA,EAAOstE,KACJ3jH,KAAKmqJ,yBAAyB9zG,EAAQzM,KACnC+5E,GAMjBomC,EAAAhrJ,UAAA6rJ,WAAP,SAAkBpiH,GACd,OAAOxoC,KAAKutF,aAAakjB,qBAAuB,QAAQxtE,KAAKuF,IAG1DuhH,EAAAhrJ,UAAAssI,eAAP,WAEI,OADArrI,KAAK4pC,YAAc,IACZ,GAGJmgH,EAAAhrJ,UAAA6uF,OAAP,SAAc36C,GACVjzC,KAAKutF,aAAaK,OAAO36C,GACzBjzC,KAAKqrI,kBAGF0e,EAAAhrJ,UAAA8rJ,kBAAP,eAAA7pH,EAAAhhC,KACIA,KAAKqrI,iBACLrrI,KAAKgrI,WAAY,EACjBhrI,KAAKgjD,UACAvhD,MACG03C,SAAU,oCACVmL,YAAa,KACbC,qBAAqB,IAExBhgB,KAAK,SAAAo8B,GACF3/B,EAAKypH,SAAS,wCAAyC9pF,EAAStU,aAIpE09F,EAAAhrJ,UAAA24F,gBAAR,SAAwBnoF,GACpB,OAAOA,EAAEqoF,OAAS,IAAMroF,EAAEwnF,YAAc,IAAMxnF,EAAEooF,qBAAuB,IAAMpoF,EAAEsoF,QAAU,IAAMtoF,EAAEunF,MAG7FizD,EAAAhrJ,UAAAqrJ,kBAAR,SAA0BryD,EAASnuD,GAC/B,GAAImuD,EAAS,CACT,IAAMkB,EAAcj5F,KAAK03F,gBAAgBK,GACzC,MAIW,KAHP/3F,KAAKsqJ,gBAAgBrxD,GACjB1hE,MAAOqS,EACP2M,MAAM,IAIlB,OAAO,GAWHwzG,EAAAhrJ,UAAA4D,OAAR,SAAe6lC,GAAf,IAAAxH,EAAAhhC,KAGI,GAFAA,KAAKyrI,eAAgB,EACrBzrI,KAAKgrI,WAAY,EACbxiG,EAAO,CACP,IAAIoB,EAAcpB,EACiC,MAA/CoB,EAAYgiG,OAAOhiG,EAAY/mC,OAAS,KAAY+mC,EAAcA,EAAY3jC,MAAM,GAAI,IAU5FqzB,GAAG6uC,WAAWC,SACLpoE,KAAKwqD,eAAe7nD,QACrB67B,GAAIoL,EACJnC,KAAM,EACNpC,SAAU,EACVipB,MAAO,sBACRhqB,SACEtkC,KAAKwqD,eAAe7nD,QACrB67B,GAAIoL,EACJnC,KAAM,EACNpC,SAAU,EACVipB,MAAO,WACRhqB,SAECtkC,KAAKwqD,eAAe7nD,QAAS67B,GAAIoL,EAAanC,KAAM,EAAGpC,SAAU,EAAGipB,MAAO,aAC9D,SAEZtuD,KAAKmzF,aAAaxwF,QAAS67B,GAAIoL,EAAanC,KAAM,EAAGpC,SAAU,IAAKf,UAExE31B,IA3ByB,SAAA2K,GAK1B,OAASslG,UAJStlG,EAAE,GAIAq7H,QAHJr7H,EAAE,GAGWy/C,WAFVz/C,EAAE,GAEoBk6E,MAD3Bl6E,EAAE,MAwBf0gB,UAAU,SAAA8iF,GACP97E,EAAK+3B,WAAa+jD,EAAQ/jD,WAC1B/3B,EAAK49E,UAAY59E,EAAK8pH,sBAAsBtiH,EAAOs0E,EAAQ8B,WAC3D59E,EAAK2zG,QAAU73B,EAAQ63B,QACvB3zG,EAAKwyD,MAAQspB,EAAQtpB,MACrBxyD,EAAK+qG,YACAjvB,EAAQ/jD,WAAWlzD,MAAMhD,QACzBi6G,EAAQ8B,UAAU/4G,MAAMhD,QACxBi6G,EAAQ63B,QAAQ9uI,MAAMhD,QACtBi6G,EAAQtpB,MAAM3tF,MAAMhD,QAEzBm+B,EAAK8qG,oBACL9qG,EAAKgqG,WAAY,SAGzBhrI,KAAKurI,oBACLvrI,KAAKgrI,WAAY,GAIjB+e,EAAAhrJ,UAAA+rJ,sBAAR,SAA8BtiH,EAAeo2E,GACzC,IAAMzoE,EAAI3N,EAAMiI,MAAM,KAAK9hC,IAAI,SAAA2K,GAAK,OAAAA,EAAEgnB,gBAChC+V,EAASuoE,EAAU/4G,MAAM8I,IAAI,SAAAgyD,GAC/B,IAAMk2B,EAAYl2B,EAAS6J,eAAeqsB,UAS1C,OARGA,GAAaA,EAAUh0F,OAAS,IAC/Bg0F,EAAU9iF,QAAQ,SAAAgkF,GACdA,EAAQgzD,KAAO50G,EAAExnC,IAAI,SAAAtN,GAAK,OAAA02F,EAAQL,gBAAgBp3D,cAAcx9B,QAAQzB,KAAIgY,OAAO,SAAApb,GAAK,OAAAA,GAAK,IAAG4E,SAGpG89D,EAAS6J,eAAeqsB,UAAU,GAAKA,EAAU1gF,KAAK,SAAC5G,EAAEC,GAAM,OAAAA,EAAEu7I,KAAKx7I,EAAEw7I,OAAM,IAG3EpqF,IAIX,OADAi+C,EAAU/4G,MAAQwwC,EACXuoE,GAGHmrC,EAAAhrJ,UAAAisJ,KAAR,SAAahf,EAAkBnmI,GAC3B,OAAImmI,EAAmBnmI,EAAMhD,OAAS,IAE9BgD,EAAMwmI,GAAGL,GAAkBrD,SAAS,gBACpC9iI,EAAMwmI,GAAGL,GAAkBrD,SAAS,kBACpC9iI,EAAMwmI,GAAGL,GAAkBrD,SAAS,kBAG7B3oI,KAAKgrJ,KAAMhf,GAAoB,EAAInmI,GAE3CmmI,GAGH+d,EAAAhrJ,UAAAksJ,GAAR,SAAWjf,EAAkBnmI,GACzB,OAAImmI,EAAmB,IAEfnmI,EAAMwmI,GAAGL,GAAkBrD,SAAS,gBACpC9iI,EAAMwmI,GAAGL,GAAkBrD,SAAS,kBACpC9iI,EAAMwmI,GAAGL,GAAkBrD,SAAS,kBAE7B3oI,KAAKirJ,GAAIjrJ,KAAKgsI,kBAAoB,EAAInmI,GAE9CmmI,GAGJ+d,EAAAhrJ,UAAAmsJ,UAAP,SAAiBjqG,GAAjB,IAAAjgB,EAAAhhC,KACI,KACKihD,GACAA,EAAOupB,gBACPvpB,EAAOupB,eAAe0jB,cACtBjtC,EAAOupB,eAAe0jB,aAAarrF,QAEpC,MAAO,GAEX,IAAMsoJ,EAAclqG,EAAOupB,eAAe0jB,aAAa5qF,KAAK,SAAAgW,GAAK,OAAA0nB,EAAKgpH,cAAc1wI,EAAElU,UACtF,OAAO+lJ,GAAeA,EAAY/lJ,QAG/B2kJ,EAAAhrJ,UAAAqsJ,UAAP,SAAiBnqG,GACb,SACKA,GACAA,EAAOupB,gBACPvpB,EAAOupB,eAAe0jB,cACtBjtC,EAAOupB,eAAe0jB,aAAarrF,WAIjC7C,KAAKkrJ,UAAUjqG,IAGnB8oG,EAAAhrJ,UAAAssJ,SAAP,SAAgBpqG,GAAhB,IAAAjgB,EAAAhhC,KACI,KACKihD,GACAA,EAAOupB,gBACPvpB,EAAOupB,eAAe0jB,cACtBjtC,EAAOupB,eAAe0jB,aAAarrF,QAEpC,MAAO,GAEX,IAEMyoJ,EAAcrqG,EAAOupB,eAAe0jB,aACrC70E,OAAO,SAAAC,GAAK,OAHK,SAAAA,GAAK,OAAAA,GAAKA,EAAEzW,OAGjB0oJ,CAAcjyI,EAAElU,UAC5B9B,KAAK,SAAAgW,GAAK,OAAC0nB,EAAKgpH,cAAc1wI,EAAElU,UAErC,OAAOkmJ,GAAeA,EAAYlmJ,QAG/B2kJ,EAAAhrJ,UAAAysJ,SAAP,SAAgBvqG,GACZ,SACKA,GACAA,EAAOupB,gBACPvpB,EAAOupB,eAAe0jB,cACtBjtC,EAAOupB,eAAe0jB,aAAarrF,WAIjC7C,KAAKqrJ,SAASpqG,IAGlB8oG,EAAAhrJ,UAAA0sJ,mBAAP,WACSn9H,EAAA2f,wBACGzrC,OAAOyiC,OAAOG,UAAY5iC,OAAOyiC,OAAOC,UAAY1iC,OAAOyiC,OAAOE,aAClE7W,EAAA8f,gBAAgBlU,OAAO,MACvB5L,EAAAo9H,sBAAsBxxH,OAAO,YAKjC6vH,EAAAhrJ,UAAAotI,eAAR,SAAuBjpF,GACnB,IAAMr9C,EAAQ7F,KAAKirI,UACd3nI,KAAK,4FACL+V,OAAO,YAkDZ,GAhDIrZ,KAAKisI,aAAajsI,KAAKisI,YAAY6O,YAAY,SAE/C96I,KAAKiqJ,eAAmC,KAAlB/mG,EAAMkpF,SAAgBpsI,KAAKiqJ,cAAc/oE,IAAI,UAAW,OAE5D,KAAlBh+B,EAAMkpF,SAEmB,OAArBpsI,KAAKisI,YACLjsI,KAAKgsI,iBAAmB,GAExBhsI,KAAKgsI,mBACLhsI,KAAKgsI,iBAAmBhsI,KAAKgrJ,KAAKhrJ,KAAKgsI,iBAAkBnmI,IAG7D7F,KAAKkqJ,mBAAqB,EAC1BlqJ,KAAKiqJ,cAAgB,MACI,KAAlB/mG,EAAMkpF,SAEY,OAArBpsI,KAAKisI,YACLjsI,KAAKgsI,iBAAmBnmI,EAAMhD,OAAS,GAEvC7C,KAAKgsI,mBACLhsI,KAAKgsI,iBAAmBhsI,KAAKirJ,GAAGjrJ,KAAKgsI,iBAAkBnmI,IAG3D7F,KAAKkqJ,mBAAqB,EAC1BlqJ,KAAKiqJ,cAAgB,MACI,KAAlB/mG,EAAMkpF,QAETpsI,KAAK4qJ,WAAW5qJ,KAAK4pC,aACrB5pC,KAAK4tF,OAAO5tF,KAAK4pC,aAEQ,OAArB5pC,KAAKisI,aACLjsI,KAAKisI,YAAY0f,WAAW3rJ,KAAKgsI,kBAAkB1vD,SAAS,GAAGsvE,SAIvE5rJ,KAAKisI,YAAc,KACnBjsI,KAAKgsI,iBAAmB,GAGxBhsI,KAAKgsI,iBAAmBnmI,EAAMhD,OAAS,EAAG7C,KAAKgsI,iBAAmBnmI,EAAMhD,OAAS,EAC5E7C,KAAKgsI,iBAAmB,IAAGhsI,KAAKgsI,iBAAmB,GAEtC,KAAlB9oF,EAAMkpF,SAAoC,KAAlBlpF,EAAMkpF,UAC9BpsI,KAAKisI,YAAcpmI,EAAMwmI,GAAGrsI,KAAKgsI,mBAKjChsI,KAAKisI,cACJjsI,KAAKisI,YAAYtD,SAAS,mBAC1B3oI,KAAKisI,YAAYtD,SAAS,iBAC1B3oI,KAAKisI,YAAYtD,SAAS,mBAE3B3oI,KAAKisI,YAAYxqD,SAAS,SAGJ,KAAlBv+B,EAAMkpF,SAAoC,KAAlBlpF,EAAMkpF,SAAgB,CAC9C,IAAMx9C,EAAU5uF,KAAKisI,YAAY3oI,KAC7B,+EAEkB,KAAlB4/C,EAAMkpF,QAEqB,OAAvBpsI,KAAKiqJ,cACLjqJ,KAAKkqJ,mBAAqBt7D,EAAQ/rF,OAAS,EAE3C7C,KAAKkqJ,qBAEgB,KAAlBhnG,EAAMkpF,UAEc,OAAvBpsI,KAAKiqJ,cACLjqJ,KAAKkqJ,mBAAqB,EAE1BlqJ,KAAKkqJ,sBAITlqJ,KAAKkqJ,mBAAqBt7D,EAAQ/rF,OAAS,GAC3C7C,KAAKkqJ,mBAAqB,EAC1BlqJ,KAAKiqJ,cAAgB,MACdjqJ,KAAKkqJ,mBAAqB,GACjClqJ,KAAKkqJ,mBAAqBt7D,EAAQ/rF,OAClC7C,KAAKiqJ,cAAgB,OAErBjqJ,KAAKiqJ,cAAgBr7D,EAAQy9C,GAAGrsI,KAAKkqJ,oBAEjClqJ,KAAKiqJ,eAAejqJ,KAAKiqJ,cAAc/oE,IAAI,UAAW,QAoBtE,OAdIlhF,KAAKisI,cACAjsI,KAAKisI,YAAYh9H,GAAG,sBAMrBjP,KAAKirI,UACA3nI,KAAK,gBACL2mB,QACAi3D,IAAI,UAAW,UARpBlhF,KAAKirI,UACA3nI,KAAK,gBACL2mB,QACAi3D,IAAI,UAAW,WASxBlhF,KAAKisI,aAAkC,KAAlB/oF,EAAMkpF,SAAoC,KAAlBlpF,EAAMkpF,YAEnDpsI,KAAKiqJ,eAAoC,KAAlB/mG,EAAMkpF,SAAoC,KAAlBlpF,EAAMkpF,UAKrD2d,EAAAhrJ,UAAA+sI,kBAAR,eAAA9qG,EAAAhhC,KACIA,KAAKisI,YAAc,KACnBjsI,KAAKgsI,iBAAmB,EAExB,IAAM6f,EAAYtvH,EAAE,qBACpBsvH,EAAUp1B,IAAI,oBAEVz2H,KAAKyrI,eAAeogB,EAAU71G,GAAG,mBAAoB,SAAA30C,GAAK,OAAA2/B,EAAKmrG,eAAe9qI,KAElFrB,KAAK8rJ,yBAGD/B,EAAAhrJ,UAAA+sJ,sBAAR,eAAA9qH,EAAAhhC,KACU+4D,EAAa/4D,KAAK+4D,YAAc/4D,KAAK+4D,WAAkB,MAC7D,GAAKA,GAAeA,EAAWl2D,OAA/B,CAEA,IACMkpJ,EAAehzF,EAAWpqD,IADZ,SAAA2K,GAAK,OAAAA,EAAEklB,KAG3Bx+B,KAAKwtF,iBAAiBW,gBAAiBnpC,IAAK+mG,IAAgBznH,SAASC,KAAK,SAAAqzE,GACtE52E,EAAK62E,6BAA6BD,EAAwB7+C,OAI1DgxF,EAAAhrJ,UAAA84G,6BAAR,SACID,EACA7+C,GAEA,mBAAWv0B,GAEP,IAAMgtD,EAAchtD,EAAUhG,GACxBs5E,EAAcF,EAAuBv+F,OAAO,SAAAC,GAAK,OAAAA,EAAEyiD,SAAWy1B,IAAa,GAE7EsmB,IAAmBtzE,EAAW5E,OAASk4E,EAAYl4E,SALnCxH,EAAA,EAAA4zH,EAAAjzF,EAAA3gC,EAAA4zH,EAAAnpJ,OAAAu1B,IAAU,GAAd4zH,EAAA5zH,MAxetB2xH,EAAkB36H,GAhBvBqI,EAAU,YACPE,SAAU,aACVkV,YAAa,2CAEhB3U,EACG,aACA,YACA,SACA,UACA,iBACA,eACA,eACA,YACA,mBACA,wBAEE6xH,GAAN,GA1Be,CAAAz7H,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WEKV,SAAUA,GACOA,EAAAo9H,sBAAwB,IAAIpyH,GAAGG,QAE5C,IAAOg5F,EAAgBnkG,EAAS4U,aAAauvF,cACtCphE,EAAgB/iC,EAAS8iC,aAAaC,cACtCy4F,EAAoBx7H,EAASiD,QAAQu4H,kBAErC3mH,EAAsB7U,EAAS4U,aAAaC,oBAC5C+K,EAAmB5f,EAAS4f,iBAC5B+9G,EAAuB39H,EAASykG,OAAOC,sBACvC1mF,EAA8Bhe,EAAS4U,aAAa+I,6BACpDsB,EAA8Bjf,EAASwe,gBAAgBC,6BACvDc,EAAkCvf,EAASwe,gBAAgBE,kCAUlE,WAYI,SAAAk/G,EAAoB//G,GAAAnsC,KAAAmsC,sBAPpBnsC,KAAAmsJ,gCAAiC,EACjCnsJ,KAAAosJ,4BAA6B,EAC7BpsJ,KAAAqsJ,kCAAmC,EACnCrsJ,KAAAssJ,mBAAoB,EAMbJ,EAAAntJ,UAAAqtC,QAAP,eAAApL,EAAAhhC,KACIA,KAAKwsC,kBACLxsC,KAAKusJ,UACLvsJ,KAAK4kC,qBACL5kC,KAAKysC,2BAA6BtJ,EAAoBnJ,UAAU,SAAA57B,GAC5D4iC,EAAKwrH,YAAcpuJ,KAIpB8tJ,EAAAntJ,UAAA4tC,WAAP,WACQ3sC,KAAKysC,6BACLzsC,KAAKysC,2BAA2BG,UAChC5sC,KAAKysC,2BAA6B,MAElCzsC,KAAKysJ,6BACLzsJ,KAAKysJ,2BAA2B7/G,UAChC5sC,KAAKysJ,2BAA6B,OAIlCP,EAAAntJ,UAAAytC,gBAAR,eAAAxL,EAAAhhC,KACIA,KAAKysJ,2BAA6Bn+H,EAAAo9H,sBAAsB1xH,UAAU,SAAA/5B,GAC9D+gC,EAAK0rH,WAAWzsJ,MAIjBisJ,EAAAntJ,UAAA4tJ,aAAP,WACI,SAAUnqJ,OAAOyiC,SAAUziC,OAAOyiC,OAAOE,YAGtC+mH,EAAAntJ,UAAA6tJ,iBAAP,WACI1+G,KAGGg+G,EAAAntJ,UAAA8tJ,iBAAP,WACItqJ,SAASq6F,eAAe,oBAAoB7mD,SAGxCm2G,EAAAntJ,UAAA6lC,mBAAR,eAAA5D,EAAAhhC,KACIqxD,EACKh4C,OAAO,SAAAyzI,GAAc,QAAEA,IACvB9yH,UAAU,SAAA8yH,GACP9rH,EAAK+rH,eAGbt6B,EACKp5G,OAAO,SAAAyzI,GAAc,QAAEA,IACvB9yH,UAAU,SAAA8yH,GACP9rH,EAAK+rH,eAGbjD,EAAkB9vH,UAAU,SAAA8yH,GACxB9rH,EAAKgsH,sBAAsBF,GAC3B9rH,EAAK+rH,gBAINb,EAAAntJ,UAAAkuJ,qBAAP,WACIjtJ,KAAKmsC,oBAAoBpH,0BAAyB,IAG/CmnH,EAAAntJ,UAAAwtJ,QAAP,eAAAvrH,EAAAhhC,KACI4B,WAAW,WACHW,SAASi2C,uBAAuB,0BAA0B31C,OAAS,IACnEm+B,EAAKmrH,gCAAiC,GAEtC5pJ,SAASi2C,uBAAuB,2BAA2B31C,OAAS,IACpEm+B,EAAKorH,4BAA6B,GAElC7pJ,SAASi2C,uBAAuB,6BAA6B31C,OAAS,GAElEN,SAASi2C,uBAAuB,6BAA6B,GAAG8jC,SAAS,GAAGA,SAASz5E,OAAS,IAE9Fm+B,EAAKqrH,kCAAmC,IAGjD,MAGAH,EAAAntJ,UAAA2tJ,WAAP,SAAkBQ,GACVA,IAAcltJ,KAAKC,KACnBD,KAAKC,KAAO,GAEZD,KAAKC,KAAOitJ,GAIbhB,EAAAntJ,UAAAguJ,WAAP,WACI/sJ,KAAK0sJ,WAAW,IAChB1sJ,KAAKmtJ,gBACLntJ,KAAKC,KAAO,IAGTisJ,EAAAntJ,UAAAouJ,cAAP,WAEQ5qJ,SAASo4C,qBAAqB,QAAQ,GAAGH,UAAU9tB,SAAS,aAC5DnqB,SAASi2C,uBAAuB,2BAA2B31C,SAE3DN,SACKi2C,uBAAuB,2BAA2B,GAClD8B,aAAa,QAAS,2BAC3Bt6C,KAAKssJ,mBAAoB,EACrB/pJ,SAASi2C,uBAAuB,eAAe31C,QAC/CN,SAASi2C,uBAAuB,eAAe,GAAGgC,UAAUjmC,OAAO,iBAIxE23I,EAAAntJ,UAAAquJ,4BAAP,WACIv/G,EAAgC3T,OAAO,OAGpCgyH,EAAAntJ,UAAAiuJ,sBAAP,SAA6BF,GACrB9sJ,KAAK8sJ,YAAc9sJ,KAAK8sJ,aAAeA,GACRv+H,QAAQsnB,QAAQtzC,SAASi2C,uBAAuBx4C,KAAK8sJ,aAC7D,GAAGxyG,aAAa,QAAS,2BAClB/rB,QAAQsnB,QAAQtzC,SAASi2C,uBAAuBs0G,IACxD,GAAGxyG,aAAa,QAAS,2BAC/Ct6C,KAAKssJ,mBAAoB,IAEM,IAA3BtsJ,KAAKssJ,mBAC0B/9H,QAAQsnB,QAAQtzC,SAASi2C,uBAAuBs0G,IACxD,GAAGxyG,aAAa,QAAS,2BAChDt6C,KAAKssJ,mBAAoB,IAEM/9H,QAAQsnB,QAAQtzC,SAASi2C,uBAAuBs0G,IACxD,GAAGxyG,aAAa,QAAS,2BAChDt6C,KAAKssJ,mBAAoB,GAIjCtsJ,KAAK8sJ,WAAaA,GAGfZ,EAAAntJ,UAAAsuJ,iBAAP,WACI/+H,EAAA8f,gBAAgBlU,OAAO,MACvBl6B,KAAK0sJ,WAAW,WAGbR,EAAAntJ,UAAAutC,4BAAP,WACIA,EAA4BpS,OAAO,MACnC+xH,EAAqB/xH,OAAO,OAGzBgyH,EAAAntJ,UAAAwuC,4BAAP,WACIA,EAA4BrT,OAAO,OAGhCgyH,EAAAntJ,UAAAuuJ,oBAAP,WACI/+H,QAAQsnB,QAAQtzC,SAASi2C,uBAAuB,eAAeqrG,WAAW,SAC1Et1H,QAAQsnB,QAAQtzC,SAASi2C,uBAAuB,4BAA4BqrG,WAAW,SACvF7jJ,KAAK0sJ,WAAW,IAChB1sJ,KAAKssJ,mBAAoB,GAGtBJ,EAAAntJ,UAAAwuJ,sBAAP,WACI,QAAS/qJ,OAAOgrJ,gBAGbtB,EAAAntJ,UAAA0uJ,YAAP,WACIjrJ,OAAOgrJ,eAAeE,SAEtBlrJ,OAAOgrJ,eAAeG,WAAWppH,KAAK,SAAAqpH,GAClCprJ,OAAOgrJ,eAAiB,QAhL9BtB,EAA6B98H,GARlCqI,EAAU,mBACPE,SAAU,wBACVkV,YAAa,2DACbe,UACIigH,6BAA8B,OAGrC31H,EAAO,wBACFg0H,GAAN,GAtBJ,CAAU59H,WCTV,SAAUA,IAAS,SAAAwe,GAQf,IAAAghH,EAAA,oBAAAA,KAA8B,OAAjBA,EAAe1+H,GAP3BqI,EAAU,mBACPE,SAAU,oBACVkV,YAAa,gDACbe,UACImgH,UAAW,QAGND,GAAb,GAAahhH,EAAAghH,gBAAeA,EARb,CAAAx/H,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCEV,SAAUA,GAASA,EAAA0/H,UAAA1/H,EAAA0/H,YACfz/H,QAAQrxB,OAAO,WAAW69B,QACtB,iBACA,SAACsmB,GACGA,EAAepkB,MAAM,WACjBkB,IAAK,WACLgkB,OAAQ,OACRC,UAAU,EACVC,WAAY,oBACZC,OACIC,QAAU1V,YAAa,+BAV3C,CAAUve,WCCV,SAAUA,IAAS,SAAAiD,GAAQA,EAAAy8H,UAAAz8H,EAAAy8H,YAKvB,WAGI,SAAAC,IACIjuJ,KAAKmvF,QAELnvF,KAAKmvF,KAAKl2E,MAEFpZ,MAAO,YACPo9B,MAAO,sBAGPp9B,MAAO,mBACPo9B,MAAO,4BAbjBgxH,EAAoB7+H,GAJzBqI,EAAU,WACPE,SAAU,eACVkV,YAAa,oDAEXohH,GAAN,GALe,CAAA3/H,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCDV,SAAUA,IAAS,SAAA0/H,GAAQA,EAAAlhH,kBAAAkhH,EAAAlhH,oBACvBve,QAAQrxB,OAAO,WAAW69B,QACtB,iBACA,SAACsmB,GACGA,EACKpkB,MAAM,2BACHkB,IAAK,mBACL2zB,gBAAgB,EAChBzP,WAAY,gCACZ3a,MACIwpB,UAAW,6BACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI4rG,gBACIrhH,YACI,gDAIf5P,MAAM,sCACHkB,IAAK,cACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,yCACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YACI,gDAIf5P,MAAM,mCACHkB,IAAK,WACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,qCACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YACI,6CAIf5P,MAAM,sCACHkB,IAAK,cACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,wCACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YACI,gDAIf5P,MAAM,kCACHkB,IAAK,UACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,oCACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YAAa,4CAIxB5P,MAAM,iCACHkB,IAAK,SACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,mCACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YAAa,2CAIxB5P,MAAM,iCACHkB,IAAK,SACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,mCACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YAAa,2CAIxB5P,MAAM,gCACHkB,IAAK,QACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,kCACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YAAa,0CAIxB5P,MAAM,oCACHkB,IAAK,YACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,sCACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YACI,8CAIf5P,MAAM,sCACHkB,IAAK,cACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,wCACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YACI,gDAIf5P,MAAM,wCACHkB,IAAK,UACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,2CACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YACI,kDAIf5P,MAAM,kCACHkB,IAAK,UACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,oCACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YAAa,4CAIxB5P,MAAM,gCACHkB,IAAK,QACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,kCACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YAAa,0CAIxB5P,MAAM,mCACHkB,IAAK,WACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,qCACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YACI,gDAhMb,CAAAve,EAAA0/H,UAAA1/H,EAAA0/H,aAAnB,CAAU1/H,WCCV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAy8H,GAAQA,EAAAthB,YAAAshB,EAAAthB,cAM/B,WACI,SAAA0hB,EAAoBprG,GAAAhjD,KAAAgjD,YAEborG,EAAArvJ,UAAA6oF,MAAP,SAAazpC,GACT,IAAM2rE,EAAS9pH,KAAKgjD,UACf4kC,QACArjC,qBAAoB,GACpB1kD,MAAM,kCACNuiC,YAAY,mDACZylD,UAAU,gBACVC,GAAG,MACH3pC,MAAMA,GAEXn+C,KAAKgjD,UAAUvhD,KAAKqoH,IAGjBskC,EAAArvJ,UAAAg0D,QAAP,SAAe5U,GACX,IAAM2rE,EAAS9pH,KAAKgjD,UACf+P,UACAlzD,MAAM,oBACNuiC,YAAY,oDACZylD,UAAU,WACVC,GAAG,MACHthC,OAAO,OACPrI,MAAMA,GAEXn+C,KAAKgjD,UAAUvhD,KAAKqoH,IAGjBskC,EAAArvJ,UAAA2uJ,OAAP,SAAcvvG,GACV,IAAM2rE,EAAS9pH,KAAKgjD,UACf0qG,SACA7tJ,MAAM,iBACNuiC,YAAY,2CACZirD,YAAY,gBACZxF,UAAU,gBACVwmE,aAAa,IACb9xF,UAAS,GACTurB,GAAG,cACHthC,OAAO,aACPrI,MAAMA,GAEXn+C,KAAKgjD,UAAUvhD,KAAKqoH,GAAQvlF,KAAK,SAACgC,GAC9B3Z,QAAQurB,IAAI5R,MAIb6nH,EAAArvJ,UAAAuvJ,gBAAP,SAAuBnwG,GACnBn+C,KAAKgjD,UACAvhD,MACG03C,SACI,oEAEAgF,EACA,wXAOJmG,YAAa,KACbC,qBAAqB,IAExBhgB,KAAK,SAACgC,GACH3Z,QAAQurB,IAAI5R,MAIjB6nH,EAAArvJ,UAAAwvJ,aAAP,SAAoBpwG,GAChBn+C,KAAKgjD,UAAUvhD,MACX08C,MAAKA,EACLhF,SACI,4BAA8BgF,EAAQ,qBAC1CmG,YAAa,KACbC,qBAAqB,KA3E3B6pG,EAAeh/H,GALpBqI,EAAU,WACPE,SAAU,mBACVkV,YAAa,oCAEhB3U,EAAO,cACFk2H,GAAN,GANuB,CAAA78H,EAAAy8H,UAAAz8H,EAAAy8H,aAAR,CAAA1/H,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAy8H,GAAQA,EAAAthB,YAAAshB,EAAAthB,cAK/B,WAJA,SAAA8hB,IAKWxuJ,KAAAs8D,cAAgB,GAEhBt8D,KAAAyuJ,UACD/wJ,KAAM,gBACNA,KAAM,aACNA,KAAM,iBACNA,KAAM,gBACNA,KAAM,wBACNA,KAAM,kBAGL8wJ,EAAAzvJ,UAAA2vJ,UAAP,WACI9mE,MAAM,cAbR4mE,EAAep/H,GAJpBqI,EAAU,WACPE,SAAU,mBACVkV,YAAa,qCAEX2hH,GAAN,GALuB,CAAAj9H,EAAAy8H,UAAAz8H,EAAAy8H,aAAR,CAAA1/H,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCDV,SAAUA,IAAS,SAAA0/H,GAAQA,EAAAthB,YAAAshB,EAAAthB,cACvBn+G,QAAQrxB,OAAO,WAAW69B,QACtB,iBACA,SAACsmB,GACGA,EACKpkB,MAAM,qBACHkB,IAAK,aACL2zB,gBAAgB,EAChBzP,WAAY,4BACZ3a,MACIwpB,UAAW,sBACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI4rG,gBACIrhH,YAAa,0CAIxB5P,MAAM,6BACHkB,IAAK,WACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,8BACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YAAa,uCAIxB5P,MAAM,gCACHkB,IAAK,cACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,iCACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YAAa,0CAIxB5P,MAAM,4BACHkB,IAAK,UACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,6BACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBAAoBt2H,UAAW,sBAGtCoF,MAAM,2BACHkB,IAAK,SACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,4BACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YAAa,qCAIxB5P,MAAM,2BACHkB,IAAK,SACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,4BACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YAAa,qCAIxB5P,MAAM,0BACHkB,IAAK,QACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,2BACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YAAa,oCAIxB5P,MAAM,0BACHkB,IAAK,QACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,2BACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YAAa,oCAIxB5P,MAAM,gCACHkB,IAAK,cACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,iCACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YAAa,0CAIxB5P,MAAM,4BACHkB,IAAK,UACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,6BACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBAAoBt2H,UAAW,sBAGtCoF,MAAM,iCACHkB,IAAK,eACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,mCACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YAAa,2CAIxB5P,MAAM,0BACHkB,IAAK,QACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,2BACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YAAa,oCAIxB5P,MAAM,6BACHkB,IAAK,WACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,8BACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE8yH,QAEtBzvE,OACI6rG,kBACIthH,YAAa,0CAvKtB,CAAAve,EAAA0/H,UAAA1/H,EAAA0/H,aAAnB,CAAU1/H,WCFV,SAAUA,GAASA,EAAAqgI,SAAArgI,EAAAqgI,WACfpgI,QAAQrxB,OAAO,UAAU69B,QACrB,iBACA,SAAAsmB,GACIA,EAAepkB,MAAM,UACjBklB,OAAQ,OACRC,UAAU,EACVE,OACIC,QACI1V,YAAa,6BATrC,CAAUve,WCAV,SAAUA,GAASA,EAAAqgI,SAAArgI,EAAAqgI,WASf,oBAAAC,KAAMA,EAAsBx/H,GAR3BqI,EAAU,UACPE,SAAU,iBACVkV,YAAa,oDACbe,UACIo9F,UAAW,IACXzkG,YAAa,QAGfqoH,GAAN,GATJ,CAAUtgI,WCAV,SAAUA,GAASA,EAAAqgI,SAAArgI,EAAAqgI,WAYf,oBAAAE,KAAMA,EAAqBz/H,GAX1BqI,EAAU,UACPE,SAAU,gBACVkV,YAAa,kDACbe,UACIkhH,YAAa,IACbhyC,QAAS,IACTkuB,UAAW,IACX+jB,SAAU,IACVC,OAAQ,QAGVH,GAAN,GAZJ,CAAUvgI,WCAV,SAAUA,GAASA,EAAAqgI,SAAArgI,EAAAqgI,WASf,oBAAAM,KAAMA,EAAkB7/H,GARvBqI,EAAU,UACPE,SAAU,cACVkV,YAAa,4CACbe,UACIshH,UAAW,IACXJ,YAAa,QAGfG,GAAN,GATJ,CAAU3gI,WCEV,SAAUA,IAAS,SAAAqgI,IAAO,SAAAz8H,GAsBtB,IAAAi9H,EAAA,WACI,SAAAA,EACIp2H,EACA45B,EACQnI,GAHZ,IAAAxpB,EAAAhhC,KAGYA,KAAAwqD,iBAERzxB,EAAO0O,KAAO,EACd1O,EAAO/vB,KAAO,GACd+vB,EAAO6Q,YAAc+oB,EAAoB,OAAK,GAC9C55B,EAAOgyC,SAAYllE,SAAWqgC,MAAO,GAErCnN,EAAO1jB,MAAQ,WAAM,OAAA2rB,EAAKouH,gBAAgBr2H,EAAQ,KAAM,OAExDA,EAAOg8C,SAAW,WACV/zC,EAAKquH,cAAct2H,IACnBiI,EAAKouH,gBACDr2H,EACAyxB,EACAxpB,EAAKsuH,eAAev2H,EAAO6Q,eAIvC7Q,EAAOqyG,eAAiB,SAAC70B,GAAyC,OAAAjoF,EAASiD,QAAQW,WAAWokF,kBAAkBC,IAE5Gx9E,EAAO6Q,YACP5pC,KAAKovJ,gBACDr2H,EACAyxB,EACAzxB,EAAO6Q,aAEV7Q,EAAO1jB,QAwEpB,OArEI85I,EAAApwJ,UAAAswJ,cAAA,SAAct2H,GACV,OACIA,EAAOgyC,SACPhyC,EAAOgyC,QAAQllE,OACfkzB,EAAOgyC,QAAQllE,MAAMhD,QAAUk2B,EAAO/vB,MAI9CmmJ,EAAApwJ,UAAAuwJ,eAAA,SAAe3sJ,GACX,MAA4C,MAArCA,EAAOipI,OAAOjpI,EAAOE,OAAS,GAC/BF,EAAOsD,MAAM,GAAI,GACjBtD,GAGVwsJ,EAAApwJ,UAAAqwJ,gBAAA,SACIr2H,EACAyxB,EACA5gB,GAHJ,IAAA5I,EAAAhhC,KAKI,GACoC,IAAhC+4B,EAAOgyC,QAAQllE,MAAMhD,QACrBk2B,EAAOgyC,QAAQllE,MAAMhD,OAASk2B,EAAOgyC,QAAQ7kC,MAC/C,CAEE,GADAnN,EAAOiyG,WAAY,GACdphG,EAED,YADA5pC,KAAKuvJ,aAAax2H,GAItByxB,EAAe7nD,QACX67B,GAAIoL,EACJnC,KAAM1O,EAAO0O,KACbpC,SAAUtM,EAAO/vB,KACjBslD,MAAO,aACRhqB,SAASC,KAAK,SAACu4E,GACmB,IAAzBA,EAAQj3G,MAAMhD,QACdm+B,EAAKwuH,cAAcz2H,EAAQ+jF,GAC3B/jF,EAAO0O,QAEP1O,EAAOiyG,WAAY,SAK/BjyG,EAAOiyG,WAAY,GAI3BmkB,EAAApwJ,UAAAwwJ,aAAA,SAAax2H,GACTA,EAAO0O,KAAO,EACd1O,EAAOiyG,WAAY,EACnBhrI,KAAKwvJ,cAAcz2H,GACflzB,SACAqgC,MAAO,EACPuB,KAAM,EACNpC,SAAU,MAIlB8pH,EAAApwJ,UAAAywJ,cAAA,SACIz2H,EACA+jF,GAEoB,IAAhB/jF,EAAO0O,OAAY1O,EAAOgyC,SAAYllE,SAAWqgC,MAAO,IAE5DnN,EAAOgyC,QAAQllE,MAAQi3G,EAAQj3G,MAC/BkzB,EAAOgyC,QAAQ7kC,MAAQ42E,EAAQ52E,MAC/BnN,EAAOiyG,WAAY,GApGdmkB,EAA2B//H,GADvC8I,EAAO,SAAU,eAAgB,mBACrBi3H,GAAb,GAAaj9H,EAAAi9H,4BAA2BA,EAtBlB,CAAAR,EAAAz8H,aAAAy8H,EAAAz8H,gBAAP,CAAA5D,EAAAqgI,SAAArgI,EAAAqgI,YAAnB,CAAUrgI,WCCV,SAAUA,IAAS,SAAAqgI,IAAO,SAAAz8H,GACtB3D,QAAQrxB,OAAO,UAAU69B,QACrB,iBACA,qBACA,SAAAsmB,GACIA,EAAepkB,MAAM,qBACjB60B,gBAAgB,EAChB3zB,IAAK,kBACLuJ,MACIwpB,UAAW,WACX1N,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,eAExB9sC,OACImtG,iBACI5iH,YACI,6CACJnV,WAAYxF,EAAAi9H,mCAhBV,CAAAR,EAAAz8H,aAAAy8H,EAAAz8H,gBAAP,CAAA5D,EAAAqgI,SAAArgI,EAAAqgI,YAAnB,CAAUrgI,WCHV,SAAUA,IAAS,SAAAqgI,IAAO,SAAAe,GAgBtB,IAAAC,EAAA,WACI,SAAAA,EACY52H,EACRyK,EACA0vD,GAHJ,IAAAlyD,EAAAhhC,KACYA,KAAA+4B,SAIR,IAEI62H,EAEJ72H,EAAO82H,SAAW,SAAArxH,GAAM,OAAAgF,EAAUhG,KAAK,iBAAiBgB,IACxDzF,EAAO6Q,YAAcpG,EAAU7gC,SAAwB,OAAK,GAC5Do2B,EAAOiyG,WAAY,EACnBjyG,EAAO1jB,MAAQ,WACX0jB,EAAO+2H,WAAcjqJ,UACrBkzB,EAAOiyG,WAAY,GAGvBjyG,EAAOp2B,OAAS,SAAAy+E,GACZroD,EAAO0O,KAAO25C,EAASroD,EAAO0O,KAAO,EAAI,EAEpC1O,EAAO6Q,YAKZspD,EAAgBvwF,OACZ4rB,QAAQuJ,QACJ0G,GAAIzF,EAAO6Q,YACXnC,KAAM1O,EAAO0O,KACbpC,SAxBK,KA0BT,SAAAy3E,GACI8yC,EAAe9yC,EAAQ52E,MACvBlF,EAAK+uH,cAAcjzC,GACnB/jF,EAAOiyG,WAAY,IAbvBjyG,EAAO1jB,SAkBf0jB,EAAOg8C,SAAW,WACVh8C,EAAO+2H,UAAUjqJ,MAAMhD,OAAS+sJ,GAChC72H,EAAOiyG,WAAY,EACnBjyG,EAAOp2B,QAAO,IAEdo2B,EAAOiyG,WAAY,GAI3BjyG,EAAOp2B,QAAO,GAEdo2B,EAAO1jB,QAYf,OATIs6I,EAAA5wJ,UAAAgxJ,cAAA,SAAcjzC,GACV,GAAyB,IAArB98G,KAAK+4B,OAAO0O,KAAYznC,KAAK+4B,OAAO+2H,UAAYhzC,OAEhD,IAAsB,IAAA1kF,EAAA,EAAAwE,EAAAkgF,EAAQj3G,MAARuyB,EAAAwE,EAAA/5B,OAAAu1B,IAAa,CAA9B,IAAMk7D,EAAO12D,EAAAxE,GACdp4B,KAAK+4B,OAAO+2H,UAAUjqJ,MAAMoT,KAAKq6E,GACpB,IAAjBwpB,EAAQr1E,OACRznC,KAAK+4B,OAAOiyG,WAAY,IA5DvB2kB,EAAyBvgI,GAFrC8I,EAAO,SAAU,YAAa,mBAC9BK,EAAW,SAAU,8BACTo3H,GAAb,GAAaD,EAAAC,0BAAyBA,EAhBhB,CAAAhB,EAAAe,YAAAf,EAAAe,eAAP,CAAAphI,EAAAqgI,SAAArgI,EAAAqgI,YAAnB,CAAUrgI,WCGV,SAAUA,IAAS,SAAAqgI,IAAO,SAAAe,GACtBnhI,QAAQrxB,OAAO,UAAU69B,QACrB,iBACA,SAAAsmB,GACIA,EAAepkB,MAAM,oBACjBkB,IAAK,mBACLuJ,MACIwpB,UAAW,YACX1N,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,eAExB9sC,OACImtG,iBACI5iH,YAAa,0CACbnV,WAAYg4H,EAAAC,iCAbV,CAAAhB,EAAAe,YAAAf,EAAAe,eAAP,CAAAphI,EAAAqgI,SAAArgI,EAAAqgI,YAAnB,CAAUrgI,WCHV,SAAUA,IAAS,SAAAqgI,GAAOA,EAAA97H,YAAA87H,EAAA97H,cAMtB,WACI,SAAAm9H,EAAYj3H,EAAgByK,EAAwCgnB,GAApE,IAAAxpB,EAAAhhC,KAA4BA,KAAAwjC,YAAwCxjC,KAAAwqD,iBAIhEzxB,EAAO6Q,YAAcpG,EAAU7gC,SAAwB,OAAK,GAC5Do2B,EAAOiyG,WAAY,EAiBnBjyG,EAAO1jB,MAAQ,WACX0jB,EAAOgyC,WACPhyC,EAAOiyG,WAAY,GAIvBjyG,EAAOp2B,OAAS,SAAAy+E,GAOZ,GANIA,EACAroD,EAAO0O,OAEP1O,EAAO0O,KAAO,EAGd1O,EAAO6Q,YAAa,CACpB7Q,EAAOiyG,WAAY,EAEnB,IAAIilB,EAAQl3H,EAAO6Q,YAEoB,MAAnCqmH,EAAMrkB,OAAOqkB,EAAMptJ,OAAS,KAC5BotJ,EAAQA,EAAMhqJ,MAAM,GAAI,IAG5BukD,EAAe7nD,QACP67B,GAAIyxH,EACJxoH,KAAM1O,EAAO0O,KACbpC,SA9CC,GA+CDipB,MAAO,sBAEVhqB,SAASC,KAAK,SAAAu4E,GACX,IAAI79G,EAAI85B,EAAO6Q,YAEgB,MAA3B3qC,EAAE2sI,OAAO3sI,EAAE4D,OAAS,KACpB5D,EAAIA,EAAEgH,MAAM,GAAI,IAGhBgqJ,EAAM3vH,gBAAkBrhC,EAAEqhC,eAjDxB,SAAAw8E,GAClB,IAAI3/G,EAEJ,GAAoB,IAAhB47B,EAAO0O,KACP1O,EAAOgyC,QAAU+xC,OAEjB,IAAK3/G,EAAI,EAAGA,EAAI2/G,EAAQj3G,MAAMhD,OAAQ1F,IAClC47B,EAAOgyC,QAAQllE,MAAMoT,KAAK6jG,EAAQj3G,MAAM1I,IAIhD47B,EAAOiyG,WAAY,EAuCHwkB,CAAc1yC,UAI1B/jF,EAAO1jB,SAIf0jB,EAAOg8C,SAAW,WACVh8C,EAAOgyC,SAAWhyC,EAAOgyC,QAAQllE,OAASkzB,EAAOgyC,QAAQllE,MAAMhD,SAAWk2B,EAAOgyC,QAAQ7kC,OACzFnN,EAAOp2B,QAAO,IAGtBo2B,EAAOogE,WAAa,SAACtC,GACjB,IAAKA,EAAW,MAAO,GACvB,GAAGA,EAAUh0F,OAAS,GAAKk2B,EAAO6Q,YAAa,CAC3C,IAAMsmH,EAAIn3H,EAAO6Q,YAAY6G,MAAM,KAAK9hC,IAAI,SAAA+nC,GAAQ,OAAAA,EAAKpW,gBACzDu2D,EAAU9iF,QAAQ,SAAAgkF,GACdA,EAAQgzD,KAAOmF,EAAEvhJ,IAAI,SAAAtN,GAAK,OAAA02F,EAAQL,gBAAgBp3D,cAAcx9B,QAAQzB,KAAIgY,OAAO,SAAApb,GAAK,OAAAA,GAAK,IAAG4E,SAGpG,IAAMwzC,EAASwgD,EAAU1gF,KAAK,SAAC5G,EAAEC,GAAM,OAAAA,EAAEu7I,KAAKx7I,EAAEw7I,OAAM,GACtD,OAAO10G,EAAOqhD,iBAAsBrhD,EAAOmhD,YAAW,KAAKnhD,EAAOwhD,QAAO,IAAIxhD,EAAOygD,KAEpF,OAAOD,EAAUh0E,OAAO,SAACs3C,EAA6B5D,GAClD,OAAGA,EAAaj0D,OAA0C,SAAjCi0D,EAAaj0D,KAAKuC,YAA0D,MAAjC0xD,EAAaj0D,KAAKuC,cAElFs1D,GAAiB5D,EAAaj0D,OAA0C,WAAjCi0D,EAAaj0D,KAAKuC,YAA4D,MAAjC0xD,EAAaj0D,KAAKuC,YAD/F0xD,EAAamhC,iBAAsBnhC,EAAaihC,YAAW,KAAKjhC,EAAashC,QAAO,IAAIthC,EAAaugC,KAIrG38B,GACZ,KAIXphC,EAAOo3H,iBAAmB,SAACxvF,GACvB,GAAKA,IAAgC,YAAlBA,EAASr+D,MAAwC,UAAlBq+D,EAASr+D,MAA3D,CAEA,IAAM+pD,EAAWsU,GAAYA,EAASniC,GAEtCwC,EAAKwC,UAAUhG,KAAK,iBAAiB6uB,KAGzCtzB,EAAO1jB,QACP0jB,EAAOp2B,QAAO,GAvGhBqtJ,EAA0B5gI,GAF/BmJ,EAAW,SAAU,8BACrBL,EAAO,SAAU,YAAa,mBACzB83H,GAAN,GANe,CAAA1hI,EAAAqgI,SAAArgI,EAAAqgI,YAAnB,CAAUrgI,WCGV,SAAUA,IAAS,SAAAqgI,GAAOA,EAAA97H,YAAA87H,EAAA97H,cACtBtE,QAAQrxB,OAAO,UAAU69B,QACrB,iBACA,SAACsmB,GACGA,EAAepkB,MAAM,oBACjBkB,IAAK,iBACLuJ,MACIwpB,UAAW,WACX1N,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,eAExB9sC,OACImtG,iBACI5iH,YAAa,2CACbnV,WAAY,oCAbjB,CAAApJ,EAAAqgI,SAAArgI,EAAAqgI,YAAnB,CAAUrgI,WCHV,SAAUA,IAAS,SAAAqgI,GAAOA,EAAAzgB,QAAAygB,EAAAzgB,UAGtB,WACI,SAAAkiB,EAAYr3H,EAAQyK,EAAW6sH,GAI3Bt3H,EAAO6Q,YAAcpG,EAAU7gC,SAAwB,OAAK,GAC5Do2B,EAAOiyG,WAAY,EAenBjyG,EAAO1jB,MAAQ,WACX0jB,EAAOy6D,SACPz6D,EAAOiyG,WAAY,GAIvBjyG,EAAO1jB,QAGP0jB,EAAOp2B,OAAS,SAASy+E,GAOrB,GANIA,EACAroD,EAAO0O,OAEP1O,EAAO0O,KAAO,EAGd1O,EAAO6Q,YAAa,CACpB7Q,EAAOiyG,WAAY,EAEnB,IAAIslB,EAAQv3H,EAAO6Q,YAEoB,MAAnC0mH,EAAM1kB,OAAO0kB,EAAMztJ,OAAS,KAC5BytJ,EAAQA,EAAMrqJ,MAAM,GAAI,IAG5BoqJ,EAAmB78D,OAEXh1D,GAAI8xH,EACJ7oH,KAAM1O,EAAO0O,KACbpC,SAhDC,IAkDL,SAACy3E,EAAS59E,GACN,IAAIjgC,EAAI85B,EAAO6Q,YAEgB,MAA3B3qC,EAAE2sI,OAAO3sI,EAAE4D,OAAS,KACpB5D,EAAIA,EAAEgH,MAAM,GAAI,IA/ChB,SAAA62G,GAChB,GAAoB,IAAhB/jF,EAAO0O,KACP1O,EAAOy6D,MAAQspB,OAEf,IAAK,IAAI3/G,EAAI,EAAGA,EAAI2/G,EAAQj3G,MAAMhD,OAAQ1F,IACtC47B,EAAOy6D,MAAM3tF,MAAMoT,KAAK6jG,EAAQj3G,MAAM1I,IAI9C47B,EAAOiyG,WAAY,EAwCPulB,CAAYzzC,UAIpB/jF,EAAO1jB,SAIf0jB,EAAOg8C,SAAW,WAEVh8C,EAAOy6D,OACPz6D,EAAOy6D,MAAM3tF,OACbkzB,EAAOy6D,MAAM3tF,MAAMhD,SAAWk2B,EAAOy6D,MAAMttD,OAE3CnN,EAAOp2B,QAAO,IAGtBo2B,EAAOp2B,QAAO,GA3EhBytJ,EAAsBhhI,GAF3BmJ,EAAW,SAAU,0BACrBL,EAAO,SAAU,YAAa,uBACzBk4H,GAAN,GAHe,CAAA9hI,EAAAqgI,SAAArgI,EAAAqgI,YAAnB,CAAUrgI,WCAV,SAAUA,IAAS,SAAAqgI,GAAOA,EAAAzgB,QAAAygB,EAAAzgB,UAkBtB3/G,QAAQrxB,OAAO,UAAUmC,QAAQ,sBAC7B,YACA,SAACovB,GACG,OAAAA,EACI,8BAGI+kE,OACI9kE,OAAQ,MACRC,QAAU6P,GAAI,GAAIiJ,KAAM,EAAGpC,SAAU,IACrCr3B,SAAS,QA5Bd,CAAAsgB,EAAAqgI,SAAArgI,EAAAqgI,YAAnB,CAAUrgI,WCGV,SAAUA,IAAS,SAAAqgI,GAAOA,EAAAzgB,QAAAygB,EAAAzgB,UACtB3/G,QAAQrxB,OAAO,UAAU69B,QACrB,iBACA,SAAAsmB,GACIA,EAAepkB,MAAM,gBACjB60B,gBAAgB,EAChB3zB,IAAK,kBACLuJ,MACIwpB,UAAW,WACX1N,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,eAExB9sC,OACImtG,iBACI5iH,YAAa,mCACbnV,WAAY,gCAdjB,CAAApJ,EAAAqgI,SAAArgI,EAAAqgI,YAAnB,CAAUrgI,WCHV,SAAUA,IAAS,SAAAqgI,GAAOA,EAAA6B,UAAA7B,EAAA6B,YAKtB,WACI,SAAAC,EACI13H,EACAyK,EACAge,EACAgJ,GAKAzxB,EAAO6Q,YAAcpG,EAAU7gC,SAAwB,OAAK,GAC5Do2B,EAAOiyG,WAAY,EAenBjyG,EAAO1jB,MAAQ,WACX0jB,EAAO23H,YACP33H,EAAOiyG,WAAY,GAIvBjyG,EAAO1jB,QAGP0jB,EAAOp2B,OAAS,SAASy+E,GAOrB,GANIA,EACAroD,EAAO0O,OAEP1O,EAAO0O,KAAO,EAGd1O,EAAO6Q,YAAa,CACpB7Q,EAAOiyG,WAAY,EAEnB,IAAI2lB,EAAQ53H,EAAO6Q,YAEoB,MAAnC+mH,EAAM/kB,OAAO+kB,EAAM9tJ,OAAS,KAC5B8tJ,EAAQA,EAAM1qJ,MAAM,GAAI,IAG5BukD,EAAe7nD,QACX67B,GAAImyH,EACJlpH,KAAM1O,EAAO0O,KACbpC,SA/CG,GAgDHipB,MAAO,WAEVhqB,SAASC,KAAK,SAAAu4E,GACX,IAAI79G,EAAI85B,EAAO6Q,YAEgB,MAA3B3qC,EAAE2sI,OAAO3sI,EAAE4D,OAAS,KACpB5D,EAAIA,EAAEgH,MAAM,GAAI,IAGhB0qJ,EAAMrwH,gBAAkBrhC,EAAEqhC,eAlDxB,SAASw8E,GACvB,GAAoB,IAAhB/jF,EAAO0O,KACP1O,EAAO23H,SAAW5zC,OAElB,IAAK,IAAI3/G,EAAI,EAAGA,EAAI2/G,EAAQj3G,MAAMhD,OAAQ1F,IACtC47B,EAAO23H,SAAS7qJ,MAAMoT,KAAK6jG,EAAQj3G,MAAM1I,IAIjD47B,EAAOiyG,WAAY,EA0CPulB,CAAYzzC,UAIpB/jF,EAAO1jB,SAIf0jB,EAAOg8C,SAAW,gBAEUz1E,IAApBy5B,EAAO23H,eACmBpxJ,IAA1By5B,EAAO23H,SAAS7qJ,OAChBkzB,EAAO23H,SAAS7qJ,MAAMhD,SAAWk2B,EAAO23H,SAASxqH,OAEjDnN,EAAOp2B,QAAO,IAGtBo2B,EAAOogE,WAAa,SAACtC,GACjB,OAAKA,EAEEA,EAAUh0E,OAAO,SAACs3C,EAA6B5D,GAClD,OAAGA,EAAaj0D,OAA0C,SAAjCi0D,EAAaj0D,KAAKuC,YAA0D,MAAjC0xD,EAAaj0D,KAAKuC,cAElFs1D,GAAiB5D,EAAaj0D,OAA0C,WAAjCi0D,EAAaj0D,KAAKuC,YAA4D,MAAjC0xD,EAAaj0D,KAAKuC,YAD/F0xD,EAAamhC,iBAAsBnhC,EAAaihC,YAAW,KAAKjhC,EAAashC,QAAO,IAAIthC,EAAaugC,KAIrG38B,GACZ,IAToB,IAY3BphC,EAAOgsD,OAAO,cAAe,SAAS6rE,EAAQC,GAC1C93H,EAAOp2B,QAAO,GACd6gC,EAAU7gC,OAzFQ,QAyFgBiuJ,GAAU,QAjGlDH,EAAwBrhI,GAF7B8I,EAAO,SAAU,YAAa,SAAU,kBACxCK,EAAW,SAAU,6BAChBk4H,GAAN,GALe,CAAAniI,EAAAqgI,SAAArgI,EAAAqgI,YAAnB,CAAUrgI,WCGV,SAAUA,IAAS,SAAAqgI,GAAOA,EAAA6B,UAAA7B,EAAA6B,YACtBjiI,QAAQrxB,OAAO,UAAU69B,QACrB,iBACA,SAAAsmB,GACIA,EAAepkB,MAAM,kBACjB60B,gBAAgB,EAChB3zB,IAAK,sBACLuJ,MACIwpB,UAAW,eACX1N,UAAW,SAAA/B,GAAM,OAAAA,EAAG2tC,eAExB9sC,OACImtG,iBACI5iH,YAAa,uCACbnV,WAAY,kCAdjB,CAAApJ,EAAAqgI,SAAArgI,EAAAqgI,YAAnB,CAAUrgI,WCDAA,UAQN,oBAAAwiI,KAAMA,EAAsB1hI,GAP3BqI,EAAU,YACPE,SAAU,iBACVkV,YAAa,sDACbe,UACIsyE,UAAW,QAGb4wC,GAAN,GCPJ,SAAUxiI,IAAS,SAAA4U,GAOf,IAAA6tH,EAAA,WAKA,OAJI,SACWxpH,EACAw9B,GADA/kE,KAAAunC,SACAvnC,KAAA+kE,sBAHf,GAAa7hC,EAAA6tH,iBAAgBA,EAO7BxiI,QAAQrxB,OAAO,gBAAgBsxB,QAAQ,wBACnC,YACA,SAACC,GACG,OAAAA,EACI,oCAGIi9C,wBACIh9C,OAAQ,OACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,gCAxBvB,CAAA1gB,EAAA4U,eAAA5U,EAAA4U,kBAAnB,CAAU5U,WCHV,SAAUA,IAAS,SAAA4U,GACf,IAAOrN,EAAavH,EAASiD,QAAQoE,MAAME,YAG3C,oBAAAm7H,KACWA,EAAAjyJ,UAAAiwB,UAAP,SAAiB4Q,EAAsCliC,GACnD,OAAQkiC,GACJ,KAAK/J,EAAWwU,MAChB,IAAK,QACL,KAAK,EACD,MAAO,kBAAmB3sC,EAC9B,KAAKm4B,EAAWyU,SAChB,IAAK,WACL,KAAK,EACD,MAAO,iBAAkB5sC,EAC7B,KAAKm4B,EAAW4iC,SAChB,IAAK,WACL,KAAK,EACD,MAAO,iBAAkB/6D,EAC7B,KAAKm4B,EAAWo7H,WAChB,IAAK,aACL,KAAK,EACD,MAAO,mBAAoBvzJ,EAC/B,KAAKm4B,EAAW0U,UAChB,IAAK,YACL,KAAK,EACD,MAAO,kBAAmB7sC,EAC9B,KAAKm4B,EAAWq7H,YAChB,IAAK,cACL,KAAK,EACD,MAAO,oBAAqBxzJ,EAGpC,MAAO,IA7BTszJ,EAAkB5hI,GADvBC,EAAK,eAAgB,iBAChB2hI,GAAN,GAJe,CAAA1iI,EAAA4U,eAAA5U,EAAA4U,kBAAnB,CAAU5U,WCOV,SAAUA,IAAS,SAAA4U,GAkBFA,EAAAyH,kBAAoB,IAAIrR,GAAGG,QAC3ByJ,EAAA0H,kBAAoB,IAAItR,GAAGG,QAC3ByJ,EAAA2H,kBAAoB,IAAIvR,GAAGG,QAC3ByJ,EAAA4H,4BAA8B,IAAIxR,GAAGG,QAIlDlL,QACKrxB,OAAO,gBACPmC,QAAQ,UAAW,WAAM,OAAAk9B,EAAEisB,WAAW2oG,UAE3C7iI,EAAAiD,QAAQ63B,qBAAqB,WACzB7sB,EAAEisB,WAAW2oG,QAAQrnG,OAAOxjB,QAAU,SAAAvC,GAClC,OAAAb,EAAAyH,kBAAkBzQ,OAAO6J,IAC7BxH,EAAEisB,WAAW2oG,QAAQrnG,OAAOsnG,UAAY,SAAArtH,GACpC,OAAAb,EAAA0H,kBAAkB1Q,OAAO6J,IAC7BxH,EAAEisB,WAAW2oG,QAAQrnG,OAAOmwE,iBAAmB,SAAAl2F,GAC3C,OAAAb,EAAA0H,kBAAkB1Q,OAAO6J,IAC7BxH,EAAEisB,WAAW2oG,QAAQrnG,OAAOunG,gBAAkB,SAAAttH,GAC1C,OAAAb,EAAA0H,kBAAkB1Q,OAAO6J,IAC7BxH,EAAEisB,WAAW2oG,QAAQrnG,OAAOsO,SAAW,SAAAr0B,GACnC,OAAAb,EAAA0H,kBAAkB1Q,OAAO6J,IAC7BxH,EAAEisB,WAAW2oG,QAAQrnG,OAAOwnG,SAAW,SAAAvtH,GACnC,OAAAb,EAAA0H,kBAAkB1Q,OAAO6J,IAC7BxH,EAAEisB,WAAW2oG,QAAQrnG,OAAOowE,QAAU,SAAAn2F,GAClC,OAAAb,EAAA2H,kBAAkB3Q,OAAO6J,IAC7BxH,EAAEisB,WAAW2oG,QAAQrnG,OAAOynG,UAAY,SAAAxtH,GACpC,OAAAb,EAAA4H,4BAA4B5Q,OAAO6J,MA7C5B,CAAAzV,EAAA4U,eAAA5U,EAAA4U,kBAAnB,CAAU5U,WCJV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAoE,GAYvB,IAAA67H,EAAA,WAEA,OAFA,gBAAa77H,EAAA67H,kBAAiBA,EAI9B,IAAAC,EAAA,WAEA,OAFA,gBAAa97H,EAAA87H,mBAAkBA,EAI/B,IAAAC,EAAA,WAIA,OAJA,gBAAa/7H,EAAA+7H,0BAAyBA,EA6CtCnjI,QAAQrxB,OAAO,gBAAgBsxB,QAAQ,gBACnC,YACA,SAACC,GACG,OAAAA,EACI,0CAGI4V,SACI3V,OAAQ,MACRC,QAAU6P,GAAI,IACdxwB,SAAS,GAEboqC,UACI1pB,OAAQ,MACRC,QAAUqgB,OAAQ,QAASxQ,GAAI,IAC/BxwB,SAAS,GAEb64C,aACIn4B,OAAQ,MACRC,QAAUqgB,OAAQ,UAAWxQ,GAAI,OACjCxwB,SAAS,GAEb09B,gBACIhd,OAAQ,MACRC,QAAUqgB,OAAQ,iBAAkBxQ,GAAI,OACxCxwB,SAAS,GAEbq6F,MACI35E,OAAQ,OACR1gB,SAAS,EACT2gB,QACIgjI,eAAgB,uDAChBC,sBAAuB,yBAG/Bn9I,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElB2J,QACIzZ,OAAQ,MACRC,QAAU6P,GAAI,MAAOyxB,UAAW,UAChCF,iBAAkB,SAACroB,EAAcsoB,GAC7B,OAAO3iC,KAAKC,UAAUoa,KAG9BnC,UACI7W,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,WAAYvH,KAAM,EAAGpC,SAAU,KAErD1iC,QACI+rB,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,SACRxQ,GAAI,MACJiJ,KAAM,EACNpC,SAAU,KAGlBqvE,mBACIhmF,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,QACRihB,UAAW,YAGnB4hG,eACInjI,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,QACRihB,UAAW,QAGnB3mB,6BACI5a,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,QACRihB,UAAW,sBAGnB6hG,oBACIpjI,OAAQ,MACR1gB,SAAS,EACT2gB,QACIqgB,OAAQ,QACRihB,UAAW,YAGnBzoB,YACI9Y,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,aAAcvH,KAAM,EAAGpC,SAAU,KAEvDgD,SACI3Z,OAAQ,OACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,MAAOyxB,UAAW,WAChCF,iBAAkB,SAACroB,EAAcsoB,GAC7B,OAAO3iC,KAAKC,UAAUoa,KAG9BI,QACIpZ,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,MAAOwQ,OAAQ,WAEjCjH,QACIrZ,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,MAAOyxB,UAAW,UAChCF,iBAAkB,SAACroB,EAAcsoB,GAC7B,OAAO3iC,KAAKC,UAAUoa,KAG9BG,QACInZ,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,MAAOyxB,UAAW,UAChCF,iBAAkB,SAACroB,EAAcsoB,GAC7B,OAAO3iC,KAAKC,UAAUoa,KAG9BqqH,oBACIrjI,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,uBAEtBgjH,+BACItjI,OAAQ,MACR1gB,SAAS,EACT2gB,QAASqgB,OAAQ,kCAErBowC,qBACI1wD,OAAQ,OACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,uBAClB+gB,iBAAkB,SAACroB,EAAcsoB,GAC7B,OAAO3iC,KAAKC,UAAUoa,KAG9BuqH,mBACIvjI,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,oBAAqBxQ,GAAI,OAC3CuxB,iBAAkB,SAACroB,EAAcsoB,GAC7B,OAAO3iC,KAAKC,UAAUoa,UAxNvB,CAAAnW,EAAAoE,QAAApE,EAAAoE,WAAR,CAAArH,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCKV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAoE,GAcvB,IAAAu8H,EAAA,WACI,SAAAA,EACYzuH,EACAE,EACAD,EACAs3B,EACAm3F,GAJAnyJ,KAAAyjC,eACAzjC,KAAA2jC,wBACA3jC,KAAA0jC,oBACA1jC,KAAAg7D,UACAh7D,KAAAmyJ,kBA8GhB,OA3GWD,EAAAnzJ,UAAA40G,cAAP,SACIy+C,EACAjsH,EACAytE,GAEA,IAAMy+C,EAA0Bz+C,EAA0B5zG,KAAKsyJ,iDAAiD1+C,GAC1G,KAEA7vE,EAAO,IAAI/jC,KAAKyjC,cAClBmD,QAAS,GACTT,WAAYA,QAA0B7mC,EACtC2pC,UAAW,KACXixC,eAAgB,KAChB3zC,YAAa8rH,GAA2B,GACxClpH,WAAYipH,GAAOA,EAAInxG,QAAUmxG,EAAInxG,OAAOqN,OAAS8jG,EAAInxG,OAAOqN,MAAM,GACtE3pD,KAAMnC,OAAOi9B,KACbuE,KAAMouH,EACNjrH,cAMJ,OAHAnnC,KAAKuyJ,aAAaxuH,GAClB/jC,KAAKwyJ,wBAAwBzuH,GAEtBA,GAGHmuH,EAAAnzJ,UAAAuzJ,iDAAR,SAAyD1+C,GAC7C,IAEJ6+C,EAFI5xF,EAAA+yC,EAAA/yC,UAAWC,EAAA8yC,EAAA9yC,SAAU9pB,EAAA48D,EAAA58D,YAAauzB,EAAAqpC,EAAArpC,MACpCmoF,EAAenoF,EAAM1nE,OAAS,EAAI,gBAAkB0nE,EAAQ,KAAO,GAkBzE,OAfI1J,EAAUh+D,OAAS,GAAKi+D,EAASj+D,OAAS,IAC1C4vJ,GACK5xF,EAAUh+D,OAAS,EAAI,aAAeg+D,EAAY,KAAO,KACzDC,EAASj+D,OAAS,EAAI,eAAiBi+D,EAAW,KAAO,KACzD9pB,EAAYn0C,OAAS,EAAI,mBAAqBm0C,EAAc,KAAO,IACpE07G,GAGJ7xF,EAAUh+D,OAAS,GAAyB,IAApBi+D,EAASj+D,SACjC4vJ,GACK5xF,EAAUh+D,OAAS,EAAI,SAAWg+D,EAAY,KAAO,KACrD7pB,EAAYn0C,OAAS,EAAI,mBAAqBm0C,EAAc,KAAO,IACpE07G,GAGDD,GAGJP,EAAAnzJ,UAAA4zJ,eAAP,SAAsB5uH,EAAiBtE,GACnC,SAAKsE,GAASA,EAAKoC,YAAe1G,KAE3BsE,EAAKoC,YAAcpC,EAAKoC,WAAW3H,KAAOiB,EAAKjB,KAGnD0zH,EAAAnzJ,UAAAqrC,sCAAP,SACIrG,EACAtE,GAEA,SAAKsE,GAASA,EAAKoC,YAAe1G,KAG9Bz/B,KAAK2yJ,eAAe5uH,EAAMtE,IAC1Bz/B,KAAKmyJ,gBAAgBhpB,0BAA0B1pG,EAAMsE,EAAKoC,WAAW3H,MAItE0zH,EAAAnzJ,UAAA6zJ,cAAP,SAAqB7uH,EAA0BtE,GAC3C,OAAOsE,EAAKkF,WAAalF,EAAKkF,UAAUzK,KAAOiB,EAAKjB,IAGhD0zH,EAAAnzJ,UAAAwzJ,aAAR,SAAqBxuH,GAArB,IAAA/C,EAAAhhC,KACIA,KAAK0jC,kBACAo4B,gCAAiCC,OAAQv5D,OAAOi9B,KAAKjB,KACrD8F,SAASC,KAAK,SAACmD,GACZ,GAAIA,GAAQA,EAAK7hC,MAAO,CACpB,IAAM6zD,EAAiB14B,EAAKg6B,QAAQ,SAAbh6B,CAAuB0G,EAAK7hC,OAASvD,KAAM,mBAC9Do3D,EAAe72D,OAAS,IAAGkhC,EAAKp/B,KAAO+0D,EAAe,OAIlE31B,GAAQA,EAAKC,MAAQD,EAAKC,KAAKggC,gBAC/BhkE,KAAK2jC,sBACA6oG,0BAA2BhuG,GAAIuF,EAAKC,KAAKggC,iBACzC1/B,SAASC,KAAK,SAAAmD,GACPA,GAAQA,EAAK7hC,OAAS6hC,EAAK7hC,MAAMhD,OAAS,IAAGkhC,EAAKoC,WAAkBuB,EAAK7hC,MAAM,MAG/F7F,KAAKyjC,aAAaquH,qBAAqBxtH,SAASC,KAAK,SAAA8R,GACjDtS,EAAK8C,SAAWwP,EAEhBrV,EAAKyC,aAAauuH,+BAEVt0J,KAAM24C,EAAO34C,KACbqpD,SAAU1Q,EAAO0Q,UAEjB,SAAA8rG,GACA9uH,EAAK4B,KAAO,IAAIlJ,KAAKo2H,EAAIjqH,SAAS8oD,uBAM1CwgE,EAAAnzJ,UAAAyzJ,wBAAR,SAAgC7yJ,GACxBA,EAAKwmC,aAAYxmC,EAAKwmC,WAAW7jC,KAAO,GACxC3C,EAAKgF,OAAMhF,EAAKgF,KAAKrC,KAAO,IAlH3B4vJ,EAAW9iI,GAFvB2I,EAAQ,eAAgB,eACxBG,EAAO,eAAgB,wBAAyB,oBAAqB,UAAW,oBACpEg6H,GAAb,GAAav8H,EAAAu8H,YAAWA,EAdD,CAAA3gI,EAAAoE,QAAApE,EAAAoE,WAAR,CAAArH,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCRV,SAAUA,IAAS,SAAA4U,GACf,IAAOrN,EAAavH,EAASiD,QAAQoE,MAAME,YAG3C,oBAAAi9H,KACWA,EAAA/zJ,UAAAiwB,UAAP,SAAiB4Q,GACb,OAAQA,GACJ,KAAK/J,EAAWwU,MAChB,IAAK,QACL,KAAK,EACD,MAAO,QACX,KAAKxU,EAAWyU,SAChB,IAAK,WACL,KAAK,EACD,MAAO,WACX,KAAKzU,EAAW4iC,SAChB,IAAK,WACL,KAAK,EACD,MAAO,WACX,KAAK5iC,EAAWo7H,WAChB,IAAK,aACL,KAAK,EACD,MAAO,aACX,KAAKp7H,EAAW0U,UAChB,IAAK,YACL,KAAK,EACD,MAAO,YACX,KAAK1U,EAAWq7H,YAChB,IAAK,cACL,KAAK,EACD,MAAO,cAGf,MAAO,IA7BT4B,EAAgB1jI,GADrBC,EAAK,eAAgB,eAChByjI,GAAN,GAJe,CAAAxkI,EAAA4U,eAAA5U,EAAA4U,kBAAnB,CAAU5U,WCAV,SAAUA,GAASA,EAAA4U,eAAA5U,EAAA4U,iBAKf,oBAAA6vH,KACWA,EAAAh0J,UAAAiwB,UAAP,SAAiB+U,GACb,GAAa,OAATA,EAAe,MAAO,GAE1B,IAAIlkC,EAAQ,GAsBZ,MArB0C,aAAtCkkC,EAAK8C,SAASkgB,SAASliD,YAA6Bk/B,EAAK4C,gBACzD9mC,GAAYkkC,EAAK6C,QAAO,MAAM5mC,KAAKgzJ,yBAAyBjvH,EAAK4C,gBAGjE5C,EAAK6C,QAAQ/jC,OAAS,GACtBkhC,EAAK4C,eACL5C,EAAK4C,cAAc8iC,eACnB1lC,EAAK4C,cAAc8iC,cAAcwpF,aAEjCpzJ,GAAS,aAAakkC,EAAK6C,SAE3B7C,EAAK6C,QAAQ/jC,OAAS,IAAGhD,GAASkkC,EAAK6C,SAEvC7C,EAAK4C,gBAAe9mC,GAASG,KAAKgzJ,yBAAyBjvH,EAAK4C,gBAE1B,UAAtC5C,EAAK8C,SAASkgB,SAASliD,YAA0Bk/B,EAAKuzD,aACtDz3F,EAAQG,KAAKkzJ,mBAAmBrzJ,EAAOkkC,EAAKuzD,WAAWgoD,aACvDz/I,EAAQG,KAAKkzJ,mBAAmBrzJ,EAAOkkC,EAAKuzD,WAAW67D,kBACvDtzJ,EAAQG,KAAKkzJ,mBAAmBrzJ,EAAOkkC,EAAKuzD,WAAW87D,eAGpDvzJ,GAGHkzJ,EAAAh0J,UAAAm0J,mBAAR,SAA2BrzJ,EAAef,GACtC,OAAKA,EACe,GAAhBe,EAAMgD,OAAoB,IAAI/D,EAAQ,IAE1Ce,GAAS,KAAKf,EAAQ,IAHAe,GAQlBkzJ,EAAAh0J,UAAAi0J,yBAAR,SAAiCxnF,GAC7B,IAAI6nF,EAAU,GAGd,OAFI7nF,EAAK/B,eAAiB+B,EAAK/B,cAAcwpF,aAAYI,EAAU,aAE/D7nF,GAAQA,EAAKmqC,aAAenqC,EAAKmqC,YAAY7d,OAAStsB,EAAKmqC,YAAY7d,MAAMj1F,OAAS,EAC5EwwJ,EAAO,IAAI7nF,EAAK9tE,KAAI,KAAK8tE,EAAKmqC,YAAY7d,MAEpDtsB,GAAQA,EAAKqqC,eAAiBrqC,EAAKqqC,cAAc/d,OAAStsB,EAAKqqC,cAAc/d,MAAMj1F,OAAS,EAClFwwJ,EAAO,IAAI7nF,EAAK9tE,KAAI,KAAK8tE,EAAKqqC,cAAc/d,MAEtDtsB,EAAgB6nF,EAAO,IAAI7nF,EAAK9tE,KAE7B,IAlDTq1J,EAAe3jI,GADpBC,EAAK,eAAgB,cAChB0jI,GAAN,GALJ,CAAUzkI,WCEV,SAAUA,GAASA,EAAA4U,eAAA5U,EAAA4U,iBACf3U,QAAQrxB,OAAO,gBAAgB69B,QAC3B,iBACA,qBACA,SAACsmB,EAAsCC,GACnCD,EACKpkB,MAAM,sBACHkB,IAAK,iCACLkkB,WAAY,6BAEfplB,MAAM,mBACHkB,IAAK,SACLkkB,WAAY,2BACZ3a,MAAQwpB,UAAW,SACnB5O,OACI6O,UACIhY,SAAU,yCAhBtC,CAAU7qB,WCFV,SAAUA,GAASA,EAAA4U,eAAA5U,EAAA4U,iBAGf,oBAAAowH,KACWA,EAAAv0J,UAAAiwB,UAAP,SAAiB8Q,GACb,IAAKA,EAAS,MAAO,GAuBrB,IArBA,IAAMyzH,EAAoB,SAAChpF,EAAejmE,GACtC,MACyC,WAArCw7B,EAAQ18B,UAAUkB,EAAOA,EAAM,IAC/Bw7B,EAAQ18B,UAAUkB,EAAM,EAAGA,GAAO,EAAEimE,EAAM1nE,UAAY0nE,GAKxDipF,EAAgB,SAACjpF,GACnB,IACIkpF,GADc,IAAIC,UACIvxH,cAAc,KAGxC,OAFAsxH,EAAUn5G,aAAa,OAAQ,UAAYiwB,GAC3CkpF,EAAUruB,UAAY76D,EACfkpF,EAAUE,UAAU9uJ,YAGzB+uJ,EAAa,IAAI/8G,OAAO,yDAE1Bg9G,GAAU,EACVC,EAAah0H,EACbi0H,EAAW,EACRF,GAAS,CACZ,IAAIG,EAAaF,EAAWv8H,MAAMq8H,GAC9B,IAAKI,EAAY,CACbH,GAAU,EACV,MAGR,IAAII,OAAW,EACXV,EAAkBS,EAAW,GAAIA,EAAW1vJ,MAAQyvJ,IACpDj0H,EAAUA,EAAQ78B,OAAO,EAAG+wJ,EAAW1vJ,MAAQyvJ,GAAYP,EAAcQ,EAAW,IAAMl0H,EAAQ78B,OAAO+wJ,EAAW1vJ,MAAQyvJ,EAAWC,EAAW,GAAGnxJ,OAAQi9B,EAAQj9B,QACrKoxJ,EAAcT,EAAcQ,EAAW,IAAInxJ,QACtCoxJ,EAAcD,EAAW,GAAGnxJ,OAErCkxJ,GAAYC,EAAW1vJ,MAAQ2vJ,EAC/BH,EAAah0H,EAAQ18B,UAAU2wJ,EAAUj0H,EAAQj9B,QAGrD,OAAOi9B,GA1CTwzH,EAAkBlkI,GADvBC,EAAK,eAAgB,uBAChBikI,GAAN,GAHJ,CAAUhlI,WCEV,SAAUA,IAAS,SAAA4U,GAAaA,EAAA4b,WAAA5b,EAAA4b,aAc5BvwB,QAAQrxB,OAAO,gBAAgB69B,QAC3B,iBACA,SAACsmB,GACGA,EAAepkB,MAAM,4BACjBkB,IAAK,2EACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,kBACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAEyiD,WAEtBY,OACIhd,SACI6T,SAAU,8EACVzhB,WAAYpJ,EAASsK,+BAGnB,oBAAqB,SAAA15B,GAAK,OACxBomC,QAASpmC,GAAKA,EAAEomC,YAGxBvpB,MACIo9B,SAAU,sDACVzhB,WAAYpJ,EAASsK,+BACjB,oBACA,SAAA15B,GAAK,OACDu/C,QAASv/C,GAAKA,EAAEu/C,QAChB/Y,MAAOxmC,GAAKA,EAAEwmC,MACdf,aAAczlC,GAAKA,EAAEylC,iBAIjCotB,SACIllB,YAAa,2DAGrB2V,SACI,eACA,sBACA,SAAC7zB,EAAiCwd,GAC9BA,EAAoBlB,oBACpBkB,EAAoB5C,oBAAoB5a,UAtD7C,CAAAL,EAAA4U,eAAA5U,EAAA4U,kBAAnB,CAAU5U,WCAV,SAAUA,IAAS,SAAA4U,GAAaA,EAAA4b,WAAA5b,EAAA4b,aAK5BvwB,QAAQrxB,OAAO,gBAAgBmc,OAAO,aAClC,cACA,SAACwqB,GACG,OAAO,SAACE,EAA0BkuB,GAC9B,SAAKluB,IAASkuB,IACmB,aAA3BluB,EAAKnE,OAAO/6B,cACbk/B,EAAKoC,YAEHtC,EAAYuG,sCAAsCrG,EAAMkuB,OAb5D,CAAA3jC,EAAA4U,eAAA5U,EAAA4U,kBAAnB,CAAU5U,WCCV,SAAUA,IAAS,SAAA4U,GAAaA,EAAA4b,WAAA5b,EAAA4b,aAO5B,oBAAAo1G,KACWA,EAAAn1J,UAAAiwB,UAAP,SAAiB+U,EAAiBkuB,GAC9B,SAAKluB,IAASkuB,GAEVluB,EAAKm0B,UACsB,aAA3Bn0B,EAAKnE,OAAO/6B,YACe,MAA3Bk/B,EAAKnE,OAAO/6B,YAIe,eAA3Bk/B,EAAKnE,OAAO/6B,YACe,MAA3Bk/B,EAAKnE,OAAO/6B,aAIZrC,OAAOi9B,KAAKmB,YAAY+gB,YACxB5d,EAAKkF,WAAalF,EAAKkF,UAAUzK,KAAOyzB,EAASzzB,MAhBvD01H,EAAe9kI,GADpBC,EAAK,eAAgB,cAChB6kI,GAAN,GAPe,CAAA5lI,EAAA4U,eAAA5U,EAAA4U,kBAAnB,CAAU5U,WCDV,SAAUA,IAAS,SAAA4U,GAAaA,EAAA4b,WAAA5b,EAAA4b,aAO5B,WACI,SAAAq1G,EAAoBtwH,GAAA7jC,KAAA6jC,cAEbswH,EAAAp1J,UAAAiwB,UAAP,SAAiB+U,EAAiBkuB,GAC9B,SAAKluB,IAASkuB,KAEVluB,EAAKq0B,UACsB,aAA3Br0B,EAAKnE,OAAO/6B,aACZk/B,EAAKm0B,UACsB,aAA3Bn0B,EAAKnE,OAAO/6B,YACe,eAA3Bk/B,EAAKnE,OAAO/6B,YACe,gBAA3Bk/B,EAAKnE,OAAO/6B,cAGXk/B,EAAKoC,YAEHnmC,KAAK6jC,YAAYuG,sCAAsCrG,EAAMkuB,IAhBtEkiG,EAAe/kI,GAFpBC,EAAK,eAAgB,aACrB6I,EAAO,gBACFi8H,GAAN,GAPe,CAAA7lI,EAAA4U,eAAA5U,EAAA4U,kBAAnB,CAAU5U,WCAV,SAAUA,IAAS,SAAA4U,GAAaA,EAAA4b,WAAA5b,EAAA4b,aAO5B,WACI,SAAAq1G,EAAoBtwH,GAAA7jC,KAAA6jC,cAEbswH,EAAAp1J,UAAAiwB,UAAP,SAAiB+U,EAA0BkuB,GACvC,SAAKluB,IAASkuB,OAETluB,EAAKoC,aACLpC,EAAKkF,WACqB,aAA3BlF,EAAKnE,OAAO/6B,YACe,gBAA3Bk/B,EAAKnE,OAAO/6B,eAIXk/B,EAAKp/B,MAAQo/B,EAAKoC,YAAcpC,EAAKp/B,KAAK65B,KAAOuF,EAAKoC,WAAW3H,IACjEuF,EAAKkF,WAAalF,EAAKoC,YAAcpC,EAAKkF,UAAUzK,KAAOuF,EAAKoC,WAAW3H,KAIzEx+B,KAAK6jC,YAAYuG,sCAAsCrG,EAAMkuB,IAlBtEkiG,EAAe/kI,GAFpBC,EAAK,eAAgB,aACrB6I,EAAO,gBACFi8H,GAAN,GAPe,CAAA7lI,EAAA4U,eAAA5U,EAAA4U,kBAAnB,CAAU5U,WCAV,SAAUA,IAAS,SAAA4U,GAAaA,EAAA4b,WAAA5b,EAAA4b,aAI5B,oBAAAs1G,KACWA,EAAAr1J,UAAAiwB,UAAP,SAAiBqlI,GACb,IAAKA,EAAkB,OAAO,EAE9B,OAAQA,EAAiBxvJ,WAAWy7B,eAChC,IAAK,WACL,IAAK,IACD,OAAO,EACX,QACI,OAAO,IATjB8zH,EAAoBhlI,GADzBC,EAAK,eAAgB,mBAChB+kI,GAAN,GAJe,CAAA9lI,EAAA4U,eAAA5U,EAAA4U,kBAAnB,CAAU5U,WCAV,SAAUA,IAAS,SAAA4U,GAAaA,EAAA4b,WAAA5b,EAAA4b,aAI5B,oBAAAw1G,KACWA,EAAAv1J,UAAAiwB,UAAP,SAAiBqlI,GACb,IAAKA,EAAkB,OAAO,EAE9B,OAAQA,EAAiBxvJ,WAAWy7B,eAChC,IAAK,QACL,IAAK,IACD,OAAO,EACX,QACI,OAAO,IATjBg0H,EAAiBllI,GADtBC,EAAK,eAAgB,gBAChBilI,GAAN,GAJe,CAAAhmI,EAAA4U,eAAA5U,EAAA4U,kBAAnB,CAAU5U,WCAV,SAAUA,GAASA,EAAA4U,eAAA5U,EAAA4U,iBACf3U,QAAQrxB,OAAO,gBAAgB69B,QAC3B,iBACA,qBACA,SAACsmB,EAAsCC,GACnCA,EAAmBS,KACf,+FACA,2GAGJV,EACKpkB,MAAM,8BACHkB,IAAK,iEACLkkB,WAAY,iDAEfplB,MAAM,oCACHkB,IAAK,iEACLuJ,MACIwpB,UAAW,eACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAEyiD,WAEtBY,OACIiyG,2BACIp7G,SAAU,4CACVzhB,WAAYpJ,EAASsK,+BAGnB,oBAAqB,SAAA15B,GAAK,OACxB6kC,KAAM7kC,GAAKA,EAAEylC,aACb8Z,QAASv/C,GAAKA,EAAEw/C,oBAChB/W,WAAYzoC,GAAKA,EAAEyoC,WACnBiE,YAAa1sC,GAAKA,EAAE0sC,iBAIhCjd,QACIqW,mBAAoB,MAExBwd,SACI,eACA,sBACA,SAACmQ,EAAmBxmB,IACXwmB,EAAa3tB,oBAAsBxiC,OAAOyiC,OAAOC,SAClDiH,EAAoBpH,0BAAyB,GAE7CoH,EAAoBpH,0BAAyB,GAEjDoH,EAAoB3J,OAAOmwB,EAAan0B,MAGhDi+D,QACI,eACA,sBACA,SAAC9pC,EAAmBxmB,GACZwmB,EAAa3tB,oBAAsBxiC,OAAOyiC,OAAOC,UACjDiH,EAAoBpH,0BAAyB,UAvD7E,CAAUzW,WCCV,SAAUA,GAASA,EAAA4U,eAAA5U,EAAA4U,iBAiCf,WAYI,SAAAsxH,EACYxxG,EACA7W,EACA8D,EACAujE,EACAlpD,GAJAtqD,KAAAgjD,YACAhjD,KAAAmsC,sBACAnsC,KAAAiwC,sBACAjwC,KAAAwzG,0BACAxzG,KAAAsqD,mBAfLtqD,KAAAy/B,KAAOj9B,OAAOi9B,KAMdz/B,KAAAmvF,QAYAqlE,EAAAz1J,UAAAqtC,QAAP,WACIpsC,KAAKkvF,cAGFslE,EAAAz1J,UAAA6kD,WAAP,SAAkBhW,GACd5tC,KAAKy0J,YAEL,IAAM1wH,EAAO6J,GAAYA,EAAS3Q,OAAS2Q,EAAS3Q,MAAMs5B,cAAgB3oB,EAAS3Q,MAAMs5B,aAAaxyB,KAElGA,IAASA,EAAK+C,QAAU/C,EAAKgD,YAAY/mC,KAAK6zG,oBAAoB9vE,EAAK+C,QAAU/C,EAAKgD,WAEtFhD,GAA8C,aAAtCA,EAAK8C,SAASkgB,SAASliD,YAA2B7E,KAAK00J,mBAAmB3wH,EAAKvF,KAGxFg2H,EAAAz1J,UAAA21J,mBAAP,SAA0BntH,GACtBvnC,KAAK20J,eAAiB30J,KAAKsqD,iBAAiBe,aAAc7sB,GAAI+I,KAG1DitH,EAAAz1J,UAAAuwF,UAAR,SAAkBzvF,EAAeo9B,GAC7B,OACIp9B,MAAKA,EACLo9B,MAAKA,IAILu3H,EAAAz1J,UAAAmwF,WAAR,WACIlvF,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,aAAc,iDACzCtvF,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,YAAa,8CACxCtvF,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,mBAAoB,iDAC/CtvF,KAAKuvF,OAAOvvF,KAAKsvF,UAAU,kBAAmB,qDAG1CklE,EAAAz1J,UAAA01J,UAAR,WACI,IAAkB,IAAAr8H,EAAA,EAAAwE,EAAA58B,KAAKmvF,KAAL/2D,EAAAwE,EAAA/5B,OAAAu1B,IAAW,CAAxB,IAAMo3D,EAAG5yD,EAAAxE,GACQ,8CAAdo3D,EAAIvyD,OAAyDj9B,KAAKi9B,MAAM0K,aACxE6nD,EAAI3vF,MAAQ,YAAcG,KAAK40J,wBAAwB,2BAGzC,iDAAdplE,EAAIvyD,OAA4Dj9B,KAAKi9B,MAAM2O,cAC3E4jD,EAAI3vF,MAAQ,mBAAqBG,KAAK60J,UAAU70J,KAAKi9B,MAAM2O,YAAY/oC,WAK3E2xJ,EAAAz1J,UAAAwwF,OAAR,SAAeC,GACXxvF,KAAKmvF,KAAKl2E,KAAKu2E,IAGXglE,EAAAz1J,UAAA81J,UAAR,SAAkBC,GACd,OAAIA,GAAiBA,EAAgB,EAC1B,IAAMA,EAAgB,IAEtB,IAIPN,EAAAz1J,UAAA61J,wBAAR,SAAgCG,GAC5B,IAAK/0J,KAAKi9B,MAAM0K,YAA+C,IAAjC3nC,KAAKi9B,MAAM0K,WAAW9kC,OAAc,MAAO,GAEzE,IAAIA,EAAS,EAKb,OAJA7C,KAAKi9B,MAAM0K,WAAW5zB,QAAQ,SAAAy2B,GACtBA,EAASloC,OAASyyJ,GAAalyJ,MAGhC7C,KAAK60J,UAAUhyJ,IAGnB2xJ,EAAAz1J,UAAAi2J,cAAP,SAAqB56G,GAArB,IAAApZ,EAAAhhC,KACIA,KAAKgjD,UACAvhD,MACG03C,SAAU,oeAQVmL,YAAa,KACbC,qBAAqB,IAExBhgB,KAAK,SAACkwC,GACHzzC,EAAKmL,oBACAhE,OAAOssC,GAAgB,IACvBlwC,KAAK,WAAM,OAAAvD,EAAKiP,oBAAoBzQ,QAAQ,+BAC5CwK,MAAM,WACH,OAAAhJ,EAAKiP,oBAAoB1/B,MACrB,+EAMjBikJ,EAAAz1J,UAAA0rG,eAAP,SAAsBtqG,GAClB,OAAOmuB,EAAAiD,QAAQ8C,cAAco2E,eAAetqG,IAGzCq0J,EAAAz1J,UAAA6oC,OAAP,eAAA5G,EAAAhhC,KACIA,KAAKi1J,kBAAmB,EACxBj1J,KAAKmsC,oBACAvE,SACArD,KAAK,WAAM,OAAAvD,EAAKiP,oBAAoBzQ,QAAQ,6BAC5CwK,MAAM,WACH,OAAAhJ,EAAKiP,oBAAoB1/B,MACrB,yEAGP4iD,QAAQ,WAAM,OAACnyB,EAAKi0H,kBAAmB,KAGzCT,EAAAz1J,UAAAm2J,cAAP,eAAAl0H,EAAAhhC,KACIA,KAAKgjD,UACAvhD,MACG03C,SAAU,meAQVmL,YAAa,KACbC,qBAAqB,IAExBhgB,KAAK,SAAC2D,GACHlH,EAAK6G,OAAOK,GAAU,OAIrBssH,EAAAz1J,UAAAo2J,cAAb,SAA2B5tH,iFAGvB,OADAvnC,KAAKo1J,kBAAmB,EACnB5yJ,OAAOi9B,KAAKmB,YAAYghB,cAC7B5hD,KAAKsqD,iBACAwF,qBAAsBtxB,GAAI+I,IAC1BjD,SAASC,KAAK,SAAAwzB,GACX,OAAKA,EAASv5B,IAGd62H,EAAat9F,EAASv5B,GACfwC,EAAKs0H,6BAA6Bv9F,EAASO,WAHvCt3B,EAAKu0H,gCAKnBhxH,KAAK,SAACuoB,GACCuoG,GACAr0H,EAAKspB,iBACAuC,YAAaruB,GAAI62H,IAAgBvoG,UAASA,IAC1CxoB,SAASC,KAAK,WAAM,OAAAvD,EAAKiP,oBAAoBzQ,QAAQ,6BACrDwK,MAAM,WACH,OAAAhJ,EAAKiP,oBAAoB1/B,MACrB,yEAGP4iD,QAAQ,WAAM,OAACnyB,EAAKo0H,kBAAmB,MAGnDprH,MAAM,SAAAz5B,GACCA,IACAqc,QAAQurB,IAAI5nC,GACZywB,EAAKiP,oBAAoB1/B,MAAM,6CAGtC4iD,QAAQ,WAAM,OAACnyB,EAAKo0H,kBAAmB,UA7BD,EAAOp1J,KAAKu1J,oCAgCpDf,EAAAz1J,UAAA+lG,YAAP,SAAmB/gE,GACf,IAAIyxH,EACAC,EASJ,OAPI1xH,GAAQA,EAAK4C,eAAiB5C,EAAK4C,cAAc0lB,WACjDmpG,EAAkBzxH,EAAK4C,cAAc0lB,UAErCtoB,GAAQA,EAAKC,MAAQD,EAAKC,KAAKid,QAAUld,EAAKC,KAAKid,OAAOziB,KAC1Di3H,EAAe1xH,EAAKC,KAAKid,OAAOziB,IAG/Bg3H,GAAoBC,EAEdD,IAAoBC,EACpBD,EACAA,GAGAC,EANA,MAUDjB,EAAAz1J,UAAA80G,oBAAd,SAAkCr1E,iGAChB,SAAMx+B,KAAKwzG,wBAAwBp7D,UAC7C4M,KAAMxmB,KACP8F,wBAFGu1C,EAAQj9C,EAAAC,OAGd78B,KAAKu1G,gBAAkB17B,GAASA,EAAM,aAGlC26E,EAAAz1J,UAAAu2J,6BAAR,SACIh9F,GAEA,OAAOt4D,KAAKgjD,UAAUvhD,MAClB03C,SACI,+GACJmZ,QACIgG,SAAUA,GAEd5gC,YACI,SACA,WACA,SAACqB,EAAQu/B,GACLv/B,EAAOu/B,SAAWA,IAG1B/T,qBAAqB,KAIrBiwG,EAAAz1J,UAAAw2J,4BAAR,eAAAv0H,EAAAhhC,KACI,OAAOA,KAAKgjD,UACPvhD,MACG03C,SAAU,kaAQVmL,YAAa,KACbC,qBAAqB,IAExBhgB,KAAK,SAACgC,GACHvF,EAAK+G,OAAOxB,GAAe,OAI/BiuH,EAAAz1J,UAAAgpC,OAAR,SAAexB,GAAf,IAAAvF,EAAAhhC,KACIA,KAAKo1J,kBAAmB,EACxBp1J,KAAKmsC,oBACApE,OAAOxB,GACPhC,KAAK,WAAM,OAAAvD,EAAKiP,oBAAoBzQ,QAAQ,6BAC5CwK,MAAM,WACH,OAAAhJ,EAAKiP,oBAAoB1/B,MACrB,yEAGP4iD,QAAQ,WAAM,OAACnyB,EAAKo0H,kBAAmB,KAGxCZ,EAAAz1J,UAAA8oC,OAAR,SAAeK,GAAf,IAAAlH,EAAAhhC,KACIA,KAAK01J,kBAAmB,EACxB11J,KAAKmsC,oBACAtE,OAAOK,GACP3D,KAAK,WAAM,OAAAvD,EAAKiP,oBAAoBzQ,QAAQ,8BAC5CwK,MAAM,WACH,OAAAhJ,EAAKiP,oBAAoB1/B,MACrB,yEAGP4iD,QAAQ,WAAM,OAACnyB,EAAK00H,kBAAmB,KAGzClB,EAAAz1J,UAAA42J,cAAP,WACI31J,KAAK41J,WAAY,GAvRnBpB,EAAaplI,GAflBqI,EAAU,gBACPE,SAAU,OACVkV,YAAa,2DACbe,UACI3Q,MAAO,OAGd/E,EACG,YACA,sBACA,sBACA,0BACA,mBACA,4BAEEs8H,GAAN,GAjCJ,CAAUlmI,WCAV,SAAUA,GAASA,EAAA4U,eAAA5U,EAAA4U,iBACf3U,QAAQrxB,OAAO,gBAAgB69B,QAC3B,iBACA,SAAAsmB,GACIA,EAAepkB,MACX,mDAEIkB,IAAK,mBACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,kBACX1N,UAAW,SAAA/B,GAAM,OAAAA,EAAGC,UAAYD,EAAGE,WAEvCW,OACIgR,YACIna,SACI,4EACJzhB,WAAYpJ,EAASsK,+BAGnB,oBAAqB,SAAA15B,GAAK,OACxB6kC,KAAM7kC,GAAKA,EAAEylC,aACbiH,YAAa1sC,GAAKA,EAAE0sC,sBAtBpD,CAAUtd,WCCV,SAAUA,GAASA,EAAA4U,eAAA5U,EAAA4U,iBAiBf,oBAAA2yH,KAAMA,EAA2BzmI,GAThC8I,EAAO,oBACPT,EAAU,gBACPE,SAAU,uBACVkV,YACI,gHACJe,UACI3Q,MAAO,QAGT44H,GAAN,GAjBJ,CAAUvnI,WCDV,SAAUA,GAASA,EAAA4U,eAAA5U,EAAA4U,iBACf3U,QAAQrxB,OAAO,gBAAgB69B,QAC3B,iBACA,SAAAsmB,GACIA,EAAepkB,MACX,gDAEIkB,IAAK,cACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,kBACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAEyiD,UAAYziD,EAAE0iD,WAEpCW,OACIgR,YACIna,SACI,yFACJzhB,WAAYpJ,EAASsK,+BAGnB,oBAAqB,SAAA15B,GAAK,OACxB6kC,KAAM7kC,GAAKA,EAAEylC,uBArB7C,CAAUrW,WCDV,SAAUA,IAAS,SAAA4U,GAIf,IAAOF,EAAS1U,EAAS4S,QAAQ8B,QAWjC,oBAAA8yH,KAGWA,EAAA/2J,UAAAg3J,aAAP,SAAoB33J,GAChB,GAAKA,EAEL,OAAI4kC,EAAO5kC,EAAMyG,YACN,IAAI43B,KAAKr+B,GAAOq3C,mBAGpBr3C,GAVT03J,EAAqC1mI,GAR1CqI,EAAU,gBACPE,SAAU,kCACVkV,YACI,wHACJe,UACI2R,kBAAmB,QAGrBu2G,GAAN,GAfe,CAAAxnI,EAAA4U,eAAA5U,EAAA4U,kBAAnB,CAAU5U,WCAV,SAAUA,GAASA,EAAA4U,eAAA5U,EAAA4U,iBAEf,oBAAA8yH,KACWA,EAAAj3J,UAAAiwB,UAAP,SAAiBogB,GACb,OAAKA,EAEEvxC,OAAO0P,KAAK6hC,GAAOvsC,OAFP,GAFrBmzJ,EAAqB5mI,GAD1BC,EAAK,eAAgB,oBAChB2mI,GAAN,GAFJ,CAAU1nI,WCFV,SAAUA,IAAS,SAAA4U,GAaf,IAAA+yH,EAAA,WAVA,SAAAA,IAcWj2J,KAAAk2J,kBACUl2J,KAAAm2J,8BAAgC,uBAChCn2J,KAAAo2J,iBAAmB,UACnBp2J,KAAAq2J,6BAA+B,sBA2BpD,OAzBWJ,EAAAl3J,UAAAqtC,QAAP,WACSpsC,KAAKs3F,aAENt3F,KAAKs3F,WAAWt3F,KAAKm2J,gCACrBn2J,KAAKk2J,eAAej9I,MAChBpZ,MAAO,0BACPs+B,IAAK7P,EAAAY,OAAOqP,wBACRv+B,KAAKs3F,WAAWt3F,KAAKm2J,kCAG7Bn2J,KAAKs3F,WAAWt3F,KAAKo2J,mBACrBp2J,KAAKk2J,eAAej9I,MAChBpZ,MAAO,cACPs+B,IAAK7P,EAAAY,OAAOwP,sBACR1+B,KAAKs3F,WAAWt3F,KAAKo2J,qBAG7Bp2J,KAAKs3F,WAAWt3F,KAAKq2J,+BACrBr2J,KAAKk2J,eAAej9I,MAChBpZ,MAAO,8BACPs+B,IAAK7P,EAAAY,OAAOyP,yBACR3+B,KAAKs3F,WAAWt3F,KAAKq2J,mCA9B5BJ,EAAmB7mI,GAV/BqI,EAAU,YACPE,SAAU,cACVkV,YACI,oFACJe,UACI0oH,oBAAqB,IACrBlxG,UAAW,IACXkyC,WAAY,QAGP2+D,GAAb,GAAa/yH,EAAA+yH,oBAAmBA,EAbjB,CAAA3nI,EAAA4U,eAAA5U,EAAA4U,kBAAnB,CAAU5U,WCEV,SAAUA,GAASA,EAAA4U,eAAA5U,EAAA4U,iBAoBf,WAKI,SAAAqzH,EACYC,EACArqH,GADAnsC,KAAAw2J,4BACAx2J,KAAAmsC,sBAILoqH,EAAAx3J,UAAA6kD,WAAP,eAAA5iB,EAAAhhC,KACUy2J,EAAcz2J,KAAKi9B,MAAM8G,MAAQ/jC,KAAKi9B,MAAM8G,KAAKuzD,YAAct3F,KAAKi9B,MAAM8G,KAAKuzD,WAAWm/D,YAC5FA,IAAgBz2J,KAAKu/C,mBACrBv/C,KAAKw2J,0BAA0Bjf,kBAAmB/4G,GAAIi4H,IACjDnyH,SACAC,KAAK,SAACkO,GAAW,OAAAzR,EAAKue,kBAAoB9M,KAGhD8jH,EAAAx3J,UAAA23J,oBAAP,WACI,IAAInwH,EAAc,GAElB,IAAKvmC,KAAKi9B,MAAM8G,OAAS/jC,KAAKi9B,MAAM8G,KAAKuzD,WACrC,OAAO/wD,EAgBX,IAAK,IAAM3L,KAdP56B,KAAKi9B,MAAM8G,KAAKuzD,WAAWgoD,cAC3B/4G,GAAe,gCACXvmC,KAAKi9B,MAAM8G,KAAKuzD,WAAWgoD,YAAW,MAI1Ct/I,KAAKi9B,MAAM8G,KAAKuzD,WAAW67D,kBAC3BnzJ,KAAKi9B,MAAM8G,KAAKuzD,WAAW87D,eAE3B7sH,GAAe,wCACXvmC,KAAKi9B,MAAM8G,KAAKuzD,WAAW67D,iBAAgB,UACrCnzJ,KAAKi9B,MAAM8G,KAAKuzD,WAAW87D,aAAY,MAErD7sH,GAAe,yCACIvmC,KAAKi9B,MAAM8G,KAAKuzD,WAC1Bt3F,KAAKi9B,MAAM8G,KAAKuzD,WAAWt4F,eAAe47B,KAE/C2L,GAAkB3L,EAAI,KAAK56B,KAAKi9B,MAAM8G,KAAKuzD,WAAW18D,GAAK,MAG/D,OAAO2L,GA7CTgwH,EAAwBnnI,GAT7BqI,EAAU,gBACPE,SAAU,mBACVkV,YACI,8FACJe,UACI3Q,MAAO,OAGd/E,EAAO,4BAA6B,wBAC/Bq+H,GAAN,GApBJ,CAAUjoI,WCCV,SAAUA,GAASA,EAAA4U,eAAA5U,EAAA4U,iBACf3U,QAAQrxB,OAAO,gBAAgB69B,QAC3B,iBACA,SAAAsmB,GACIA,EAAepkB,MACX,gDAEIkB,IAAK,eACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,mBACX1N,UAAW,SAAA/B,GAAM,OAAAA,EAAGC,UAAYD,EAAGE,WAEvCW,OACIgR,YACIna,SACI,4DACJzhB,WAAYpJ,EAASsK,+BAGnB,oBAAqB,SAAA15B,GAAK,OACxB6kC,KAAM7kC,GAAKA,EAAEylC,aACbiH,YAAa1sC,GAAKA,EAAE0sC,sBAtBpD,CAAUtd,WCCV,SAAUA,GAASA,EAAA4U,eAAA5U,EAAA4U,iBAiBf,oBAAAyzH,KAAMA,EAAoBvnI,GATzBqI,EAAU,gBACPE,SAAU,eACVkV,YACI,sFACJe,UACI3Q,MAAO,OAGd/E,EAAO,qBACFy+H,GAAN,GAjBJ,CAAUroI,WCDV,SAAUA,GAASA,EAAA4U,eAAA5U,EAAA4U,iBACf3U,QAAQrxB,OAAO,gBAAgB69B,QAC3B,iBACA,SAAAsmB,GACIA,EAAepkB,MAAM,6CACjBkB,IAAK,aACL2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,iBACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAEyiD,UAAYziD,EAAE0iD,WAEpCW,OACIgR,YACIna,SACI,mFACJzhB,WAAYpJ,EAASsK,+BAGnB,oBAAqB,SAAA15B,GAAK,OACxByoC,WAAYzoC,GAAKA,EAAEyoC,qBAnB/C,CAAUrZ,WCEV,SAAUA,GAASA,EAAA4U,eAAA5U,EAAA4U,iBAef,WAMI,SAAA0zH,EACYzqH,EACA8D,GADAjwC,KAAAmsC,sBACAnsC,KAAAiwC,sBALLjwC,KAAAy/B,KAAOj9B,OAAOi9B,KAQdm3H,EAAA73J,UAAAqpC,MAAP,SAAatI,GAAb,IAAAkB,EAAAhhC,KACS8/B,IAAW9/B,KAAK62J,cAAc/2H,KAEnC9/B,KAAKizD,SAAU,EACfjzD,KAAKmsC,oBACA/D,MAAMtI,GACNyE,KAAK,WAAM,OAACvD,EAAKyzB,OAAS,KAC1BzqB,MAAM,WACH,OAAAhJ,EAAKiP,oBAAoB1/B,MACrB,uFAGPg0B,KAAK,WAAM,OAACvD,EAAKiyB,SAAU,MAG5B2jG,EAAA73J,UAAA83J,cAAR,SAAsBh1H,GAClB,QAAKA,GAE4C,IAA1CA,EAAKvK,QAAQ,aAAc,IAAIz0B,QA7BxC+zJ,EAAqBxnI,GAR1BqI,EAAU,gBACPE,SAAU,gBACVkV,YAAa,qFACbe,UACI3Q,MAAO,OAGd/E,EAAO,sBAAuB,wBACzB0+H,GAAN,GAfJ,CAAUtoI,WCHV,SAAUA,GAASA,EAAA4U,eAAA5U,EAAA4U,iBACf3U,QAAQrxB,OAAO,gBAAgB69B,QAC3B,iBACA,SAAAsmB,GACIA,EAAepkB,MAAM,iCACjBkB,IACI,sEACJ2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,gBACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE0iD,WAEtBW,OACIiyG,2BACIp7G,SACI,sDACJzhB,WAAYpJ,EAASsK,+BAGnB,oBAAqB,SAAA15B,GAAK,OACxB6kC,KACI7kC,GACAA,EAAEylC,cACFtX,KAAKiQ,MAAMjQ,KAAKC,UAAUpuB,EAAEylC,yBAvB5D,CAAUrW,WCAV,SAAUA,GAASA,EAAA4U,eAAA5U,EAAA4U,iBAuCf,WASI,SAAA4zH,EACYt1G,EACArV,EACA1I,EACAwM,EACAvM,EACA+3B,EACAhR,EACAssG,GARZ,IAAA/1H,EAAAhhC,KACYA,KAAAwhD,SACAxhD,KAAAmsC,sBACAnsC,KAAAyjC,eACAzjC,KAAAiwC,sBACAjwC,KAAA0jC,oBACA1jC,KAAAy7D,wBACAz7D,KAAAyqD,gBACAzqD,KAAA+2J,wBAZL/2J,KAAA08B,IAAM,IAAID,KAEVz8B,KAAA07D,kBAiDA17D,KAAA6tD,OAAS,SAACD,GACb,IAAMzvB,EAAM7P,EAAAY,OAAOC,mBAAmB,yCAElCy+B,IACAA,EAAKC,OAAS7sB,EAAKypB,cACdoD,QACG1vB,IAAGA,EACHuJ,MAAQkmB,KAAIA,KAEfrpB,KAAK,SAAA8R,GACGrV,EAAK/D,MAAM8G,KAAKoD,WAAUnG,EAAK/D,MAAM8G,KAAKoD,aAE/CnG,EAAK/D,MAAM8G,KAAKoD,SAASluB,KAAKo9B,EAAO3O,KAAKlJ,IAErCwC,EAAK+e,QAAO/e,EAAK+e,UAEtB/e,EAAK+e,MAAM9mC,KAAKo9B,EAAO3O,UApDhCovH,EAAA/3J,UAAAqtC,QAAP,WACIpsC,KAAKopC,gBACLppC,KAAK27D,qBACL37D,KAAKg3J,YACDh3J,KAAKi9B,OAASj9B,KAAKi9B,MAAM8G,OACzB/jC,KAAKi9B,MAAM8G,KAAK4B,KAAO,IAAIlJ,KAAKz8B,KAAKi9B,MAAM8G,KAAK4B,KAAK+rD,kBACrD1xF,KAAKi3J,aAAej3J,KAAKi9B,MAAM8G,KAAK4B,MAExC3lC,KAAKoyG,yBAGF0kD,EAAA/3J,UAAAm4J,mBAAP,SAA0BC,GAEtBn3J,KAAKi9B,MAAM8G,KAAK4B,KAAKyxH,YAAYD,EAAQvjH,eACzC5zC,KAAKi9B,MAAM8G,KAAK4B,KAAKmP,SAASqiH,EAAQtjH,YACtC7zC,KAAKi9B,MAAM8G,KAAK4B,KAAK0N,QAAQ8jH,EAAQ7jH,YAGlCwjH,EAAA/3J,UAAA0V,OAAP,SAAcsvB,GAAd,IAAA/C,EAAAhhC,KACIA,KAAKmgD,UAAW,EAChBngD,KAAKmsC,oBACA13B,OAAOsvB,GACPQ,KAAK,WACFvD,EAAKiP,oBAAoBzQ,QAAQ,mBACjCwB,EAAKwgB,OAAOib,GAAG,gDAAkDj+B,GAAIuF,EAAKvF,OAE7EwL,MAAM,SAAA0yB,GAAY,OAAA17B,EAAKiP,oBAAoB1/B,MAAM,qCACjD4iD,QAAQ,WAAM,OAACnyB,EAAKmf,UAAW,KAGjC22G,EAAA/3J,UAAAi2D,gBAAP,SAAuB9Q,GACdlkD,KAAKi9B,MAAM8G,MAAS/jC,KAAKi9B,MAAM8G,KAAKoD,UAEzCnnC,KAAKi9B,MAAM8G,KAAKoD,SAAStqB,OAAO7c,KAAKi9B,MAAM8G,KAAKoD,SAASrkC,QAAQohD,EAAU1lB,IAAK,IAwB7Es4H,EAAA/3J,UAAAs4J,gBAAP,eAAAr2H,EAAAhhC,KACI,OACIA,KAAK8oC,WACL9oC,KAAK8oC,UAAUjmC,QACf7C,KAAKi9B,MAAM8G,MACX/jC,KAAKi9B,MAAM8G,KAAK8C,UAChB7mC,KAAK8oC,UAAUzvB,OAAO,SAAAhb,GAAK,OAAAA,EAAEX,OAASsjC,EAAK/D,MAAM8G,KAAK8C,SAASnpC,OAAMmF,OAAS,GAIzEi0J,EAAA/3J,UAAA88D,iBAAb,SAA8BrzB,eAAA,IAAAA,MAAA,2FACR,SAAMxoC,KAAK0jC,kBAAkBo4B,gCAC3Cr0B,KAAM,EACNpC,SAAU,IACV7G,GAAIgK,EACJuzB,OAAQ,OACTz3B,wBALG03B,EAAYp/B,EAAAC,OAOlB78B,KAAK07D,eAAiBM,EAAUn2D,MAAM8I,IAAI,SAAA2K,GAAK,OAC3CklB,GAAIllB,EAAEklB,GACNl8B,KAAMgX,EAAEhX,KAAKuC,WACbnH,KAAM4b,EAAE5b,KACRsuC,WAAY1yB,EAAE0yB,wBAId8qH,EAAA/3J,UAAAi4J,UAAR,eAAAh2H,EAAAhhC,KACUA,KAAKi9B,OAASj9B,KAAKi9B,MAAM8G,MAE/B/jC,KAAK+2J,sBAAsB9xG,YAAaD,IAAKhlD,KAAKi9B,MAAM8G,KAAKoD,WAAY7C,SAASC,KAAK,SAAAmD,GACnF1G,EAAK+e,MAAQrY,EAAK/4B,IAAI,SAAAhP,GAAQ,OAAAA,OAI9Bm3J,EAAA/3J,UAAAqqC,cAAR,eAAApI,EAAAhhC,KACIA,KAAKyjC,aAAaixE,oBAAoBpwE,SAASC,KAAK,SAAAmD,GAChD1G,EAAK8H,UAAYpB,KAIXovH,EAAA/3J,UAAA48D,mBAAd,mGACI,SAAM37D,KAAK67D,iBAAiB,YAC5B,OADAj/B,EAAAC,QACA,EAAM78B,KAAKk8D,qCAAXt/B,EAAAC,iBAGIi6H,EAAA/3J,UAAAm9D,oBAAR,eAAAl7B,EAAAhhC,KACI,GAAIA,KAAKi9B,MAAM8G,MAAQ/jC,KAAKi9B,MAAM8G,KAAKoC,WAAY,CACzC,IAAAvJ,EAAA58B,KAAAi9B,MAAA8G,KAAAoC,WAAE3H,EAAA5B,EAAA4B,GAAI84H,EAAA16H,EAAAt6B,KAAsBi1J,EAAA36H,EAAAl/B,KAAMsuC,EAAApP,EAAAoP,YACvB,SAAAlC,GAAgB,OAAA9I,EAAK06B,eAAeriD,OAAO,SAAAC,GAAK,OAAAA,EAAEklB,KAAOsL,IAAcjnC,QAEnFw5D,CAAS79B,IACVx+B,KAAK07D,eAAeziD,MAChBulB,GAAEA,EACFl8B,KAAMg1J,EAAezyJ,WACrBnH,KAAI65J,EACJvrH,WAAUA,MAMlB8qH,EAAA/3J,UAAAqzG,sBAAR,eAAApxE,EAAAhhC,KACIwC,OAAOV,iBAAiB,QAAS,SAACohD,GAC9B,IAAMgwD,EAAiDhwD,EAEvD,GAAIgwD,EAAeC,cAActtG,MAAO,CACpC,IAAMlG,EAAOuzG,EAAeC,cAActtG,MAAM,GAC5ClG,GAAMqhC,EAAK6sB,OAAOluD,EAAKyzG,iBAhJrC0jD,EAAiB1nI,GAjBtBqI,EAAU,gBACPE,SAAU,YACVkV,YAAa,gEACbe,UACI3Q,MAAO,OAGd/E,EACG,SACA,sBACA,eACA,sBACA,oBACA,wBACA,SACA,0BAEE4+H,GAAN,GAvCJ,CAAUxoI,WCEV,SAAUA,IAAS,SAAA4U,IAAa,SAAA4b,GAC5B,IAAO3d,EAAW7S,EAAS4S,QAAQC,SAM5B8qH,EAAuB39H,EAASykG,OAAOC,sBACvC1mF,EAA8Bhe,EAAS4U,aAAa+I,8BAc3D,WAaI,SAAAurH,EACYrrH,EACAzI,GAFZ,IAAA1C,EAAAhhC,KACYA,KAAAmsC,sBACAnsC,KAAA0jC,oBAZL1jC,KAAA4pC,YAAc,GAId5pC,KAAAy3J,qBACAz3J,KAAA03J,0BAqDA13J,KAAAuoC,cAAgBpH,EACnB,SAACqH,GACGxH,EAAKmL,oBAAoB5D,cAAcC,IAE3C,KACA,GAhDGgvH,EAAAz4J,UAAAqtC,QAAP,WACIpsC,KAAK23J,WAAW33J,KAAKi9B,QAGlBu6H,EAAAz4J,UAAA6kD,WAAP,SAAkBhW,GAGVA,GACAA,EAAS3Q,QACR2Q,EAAS3Q,MAAM26H,kBACf53J,KAAK63J,uBACNjqH,EAAS3Q,MAAMs5B,eAEfv2D,KAAK23J,WAAW/pH,EAAS3Q,MAAMs5B,cAC/Bv2D,KAAK63J,uBAAwB,IAI7BL,EAAAz4J,UAAA44J,WAAR,SAAmB16H,GAAnB,IAAA+D,EAAAhhC,KACIA,KAAK48D,eAAkB58D,KAAKi9B,OAASj9B,KAAKi9B,MAAMqI,SAAWtlC,KAAKi9B,MAAMqI,QAAQ1F,QAAW,GACzF5/B,KAAK83J,iBAAoB93J,KAAKi9B,OAASj9B,KAAKi9B,MAAMqI,SAAWtlC,KAAKi9B,MAAMqI,QAAQsD,UAAa,GAC7F5oC,KAAK4pC,YAAc5pC,KAAKi9B,OAASj9B,KAAKi9B,MAAMqI,SAAWtlC,KAAKi9B,MAAMqI,QAAQkD,MAC1ExoC,KAAKmpC,WACDnpC,KAAKi9B,OAASj9B,KAAKi9B,MAAMqI,SAAWtlC,KAAKi9B,MAAMqI,QAAQ6D,WAClDlO,KAAMj7B,KAAKi9B,MAAMqI,QAAQ6D,YACxB,KACVnpC,KAAKipC,UACDjpC,KAAKi9B,OAASj9B,KAAKi9B,MAAMqI,SAAWtlC,KAAKi9B,MAAMqI,QAAQ2D,UAClDhO,KAAMj7B,KAAKi9B,MAAMqI,QAAQ2D,WACxB,KACVjpC,KAAKy3J,kBACDz3J,KAAKi9B,OAASj9B,KAAKi9B,MAAMqI,SAAWtlC,KAAKi9B,MAAMqI,QAAQwD,UAC7C9oC,KAAKi9B,MAAMqI,QAAQwD,UAAS7iC,WAG1CjG,KAAKmsC,oBAAoB/C,gBAAgB7E,KAAK,SAAAwzH,GAC1C/2H,EAAK+2H,aAAeA,EACpB/2H,EAAK02H,uBACEK,EAAa1+I,OAAO,SAAAhb,GAAK,OAAA2iC,EAAKy2H,kBAAkB30J,QAAQzE,EAAEX,OAAS,IAAEuI,WAa7EuxJ,EAAAz4J,UAAA2pC,eAAP,SAAsBzzB,GAClBjV,KAAKmsC,oBAAoBzD,eAAezzB,IAGrCuiJ,EAAAz4J,UAAA4pC,iBAAP,SAAwB1zB,GACpBjV,KAAKmsC,oBAAoBxD,iBAAiB1zB,IAGvCuiJ,EAAAz4J,UAAAi5J,gBAAP,SAAuBxvH,GACnB,YADmB,IAAAA,MAAA,IACZxoC,KAAK0jC,kBACPo4B,gCACGr0B,KAAM,EACNpC,SAAU,GACV7G,GAAIgK,EACJuzB,OAAQ,OAEXz3B,SAASC,KAAK,SAAAmD,GACX,OAAOA,EAAK7hC,SAIjB2xJ,EAAAz4J,UAAAgqC,kBAAP,SAAyBi0B,GACrBh9D,KAAKmsC,oBAAoBpD,kBAAkBi0B,IAGxCw6F,EAAAz4J,UAAA88D,iBAAP,SAAwBrzB,GACpB,YADoB,IAAAA,MAAA,IACbxoC,KAAK0jC,kBACPo4B,gCACGr0B,KAAM,EACNpC,SAAU,GACV7G,GAAIgK,EACJuzB,OAAQ,OAEXz3B,SAASC,KAAK,SAAAmD,GACX,OAAOA,EAAK7hC,SAIjB2xJ,EAAAz4J,UAAAmqC,mBAAP,SAA0B8zB,GACtBh9D,KAAKmsC,oBAAoBjD,mBAAmB8zB,IAGzCw6F,EAAAz4J,UAAAk5J,eAAP,SAAsBpxH,GACoB,iBAA3B7mC,KAAKy3J,oBACZz3J,KAAKy3J,mBAAqBz3J,KAAKy3J,oBAEnC,IAAMnzJ,EAAQtE,KAAKy3J,kBAAkB30J,QAAQ+jC,IAC9B,IAAXviC,EAActE,KAAKy3J,kBAAkB56I,OAAOvY,EAAO,GAClDtE,KAAKy3J,kBAAkBx+I,KAAK4tB,GAEjC7mC,KAAKmsC,oBAAoBtD,kBAAsB7oC,KAAKy3J,kBAAiBxxJ,UAGlEuxJ,EAAAz4J,UAAAm5J,wBAAP,WACI5pI,EAAAo9H,sBAAsBxxH,OAAO,2BAC7BoS,EAA4BpS,OAAO,MACnC+xH,EAAqB/xH,OAAO,OA7H9Bs9H,EAA4BpoI,GARjCqI,EAAU,aACPE,SAAU,wBACVkV,YAAa,yFACbe,UACI3Q,MAAO,OAGd/E,EAAO,sBAAuB,sBACzBs/H,GAAN,GAtB4B,CAAAt0H,EAAA4b,WAAA5b,EAAA4b,cAAb,CAAAxwB,EAAA4U,eAAA5U,EAAA4U,kBAAnB,CAAU5U,WCFV,SAAUA,GAASA,EAAA4U,eAAA5U,EAAA4U,iBACf3U,QAAQrxB,OAAO,gBAAgB69B,QAC3B,iBACA,SAAAsmB,GACIA,EAAepkB,MAAM,iCACjBkB,IACI,sEACJ2zB,gBAAgB,EAChBpqB,MACIwpB,UAAW,gBACX1N,UAAW,SAAAvkD,GAAK,OAAAA,EAAE0iD,WAEtBW,OACIiyG,2BACIp7G,SACI,sDACJzhB,WAAYpJ,EAASsK,+BAGnB,oBAAqB,SAAA15B,GAAK,OACxB6kC,KACI7kC,GACAA,EAAEylC,cACFtX,KAAKiQ,MAAMjQ,KAAKC,UAAUpuB,EAAEylC,yBAvB5D,CAAUrW,WCAV,SAAUA,GAASA,EAAA4U,eAAA5U,EAAA4U,iBA4Bf,WAWI,SAAAi1H,EACY32G,EACArV,EACA1I,EACAwM,EACAua,EACA8mD,GANZ,IAAAtwE,EAAAhhC,KACYA,KAAAwhD,SACAxhD,KAAAmsC,sBACAnsC,KAAAyjC,eACAzjC,KAAAiwC,sBACAjwC,KAAAwqD,iBACAxqD,KAAAsxG,mBAXLtxG,KAAA+qE,WAEA/qE,KAAAg5F,aAYAh5F,KAAA2C,OAAS,SAAC6lC,GACRA,GAAUA,EAAM3lC,QAKrBm+B,EAAKo3H,kBAAmB,EACxBp3H,EAAKwpB,eAAe7nD,QAAS67B,GAAIgK,EAAO8lB,MAAO,6BAA8BhqB,SACxEC,KAAK,SAAAs1C,GACF74C,EAAK+pC,QAAU8O,EAAMh0E,QAExBstD,QAAQ,WACLnyB,EAAKo3H,kBAAmB,KAV5Bp3H,EAAK+pC,YAcN/qE,KAAA42G,UAAY,SAAC31D,GAA8B,OAAAjgB,EAAKq3H,eAAiBp3G,GAEjEjhD,KAAAs4J,YAAc,SAACr/E,GAAkC,OAAAj4C,EAAKi5D,iBAAmBhhB,GAEzEj5E,KAAAu4J,cAAgB,WACnBv3H,EAAKq3H,eAAiB,KACtBr3H,EAAKg4D,aACLh4D,EAAKi5D,iBAAmB,MAGfk+D,EAAAp5J,UAAAy5J,aAAb,SAA0Bv3G,wGACtB,OAAKA,GAAWA,EAAOqN,QAASzwD,OAAO0P,KAAK0zC,EAAOqN,OAAO/qC,KAAK,SAAA3f,GAAK,MAAM,aAANA,KAEpE5D,KAAKy4J,oBAAqB,EAE1B77H,EAAA58B,MAAiB,EAAMA,KAAKsxG,iBAAiBsB,4BACzCp0E,GAAIyiB,EAAOqN,MAAgB,WAC5BhqB,SACE6uB,QAAQ,WACLnyB,EAAKy3H,oBAAqB,OARqD,iBAIvF77H,EAAKo8D,UAAYjtD,EAAAlP,iBAQds7H,EAAAp5J,UAAA25J,SAAP,eAAA13H,EAAAhhC,KACIA,KAAKmgD,UAAW,EAEXngD,KAAKi9B,OAAUj9B,KAAKi9B,MAAM8G,MAAS/jC,KAAKi9B,MAAM8G,KAAKvF,IACnDx+B,KAAKq4J,gBAAmBr4J,KAAKq4J,eAAe75H,KAEjDx+B,KAAK24J,wBACDC,OAAQ54J,KAAKi9B,MAAM8G,KAAKvF,GACxB6tB,SAAUrsD,KAAKq4J,eAAe75H,GAC9Bw6C,WAAYh5E,KAAKi6F,kBAAoBj6F,KAAKi6F,iBAAiBz7D,IAG/Dx+B,KAAKyjC,aACAwuH,kBAAkBjyJ,KAAK24J,wBAAwBr0H,SAC/CC,KAAK,WACFvD,EAAKmL,oBACA13B,OAAOusB,EAAK/D,MAAM8G,MAClBQ,KAAK,WACFvD,EAAKiP,oBAAoBzQ,QAAQ,4BACjCwB,EAAKwgB,OAAOib,GACR,gDACEj+B,GAAIwC,EAAK/D,MAAM8G,KAAKvF,OAG7BwL,MAAM,SAAA0yB,GACH,OAAA17B,EAAKwgB,OAAOib,GACR,gDACEj+B,GAAIwC,EAAK/D,MAAM8G,KAAKvF,OAG7B20B,QAAQ,WAAM,OAACnyB,EAAKmf,UAAW,MAEvCnW,MAAM,SAAA0yB,GACH,OAAA17B,EAAKiP,oBAAoB1/B,MACrB,2DAGP4iD,QAAQ,WAAM,OAACnyB,EAAKmf,UAAW,MAGjCg4G,EAAAp5J,UAAA85J,iBAAP,SAAwB53G,GACpB,OAAQA,EAAOvjD,KAAMujD,EAAOupB,eAAeqsB,UAAUh0F,QAAUo+C,EAAOupB,eAAeqsB,UAAU,GAAGa,iBAAiBr+E,OAAO,SAAAC,GAAK,QAAEA,IAAG2O,KAAK,QApG3IkwI,EAAiB/oI,GAhBtBqI,EAAU,gBACPE,SAAU,YACVkV,YACI,gEACJe,UACI3Q,MAAO,OAGd/E,EACG,SACA,sBACA,eACA,sBACA,iBACA,qBAEEigI,GAAN,GA5BJ,CAAU7pI,WCAV,SAAUA,IAAS,SAAA4U,GAAaA,EAAA4b,WAAA5b,EAAA4b,aAI5B,oBAAAg6G,KACWA,EAAA/5J,UAAAiwB,UAAP,SAAiB+U,EAAiBqhF,GAC9B,OAAQrhF,EAAKnE,OAAO/6B,YAChB,IAAK,QACL,IAAK,IACD,IAAMk0J,GAAgB,IAAIt8H,MAAO4X,UAAU+wE,GACvC4zC,EAAej1H,EAAKuC,QAKxB,OAHM0yH,aAAwBv8H,OAC1Bu8H,EAAe,IAAIv8H,KAAKu8H,MAExBA,EAAeD,GAGvB,QACI,OAAO,IAfjBD,EAAiB1pI,GADtBC,EAAK,eAAgB,gBAChBypI,GAAN,GAJe,CAAAxqI,EAAA4U,eAAA5U,EAAA4U,kBAAnB,CAAU5U,WCEV,SAAUA,IAAS,SAAA4U,GAAaA,EAAA4b,WAAA5b,EAAA4b,aAiB5B,WAOI,SAAAm6G,EACYtmG,EACAnvB,EACA2I,GAFAnsC,KAAA2yD,eACA3yD,KAAAwjC,YACAxjC,KAAAmsC,sBARLnsC,KAAAynC,KAAOznC,KAAK2yD,aAAalrB,MAAQ,EACjCznC,KAAAqlC,SAAWrlC,KAAK2yD,aAAattB,UAAY,EACzCrlC,KAAAu9D,QAAUv9D,KAAKynC,KAAO,EACtBznC,KAAAw9D,MAAQh7D,OAAOi7D,WAQfw7F,EAAAl6J,UAAA4+D,YAAP,SAAmBC,GACf59D,KAAKynC,KAAOm2B,EACZ,IAAMp1B,EAAQxoC,KAAKwjC,UAAU7gC,SAC7B3C,KAAKwjC,UAAU7gC,OAAMs4B,KAAMuN,GAAOf,KAAMznC,KAAKynC,SAGpCwxH,EAAAl6J,UAAAm6J,iBAAb,SAA8B7zH,2FAE1B,OAA+B,IAA3BrlC,KAAKi9B,MAAMyI,MAAMQ,OAAa,IAElC,EAAMlmC,KAAKmsC,oBAAoBjQ,KAAKmJ,kBAApCzI,EAAAC,iBAvBFo8H,EAAiB7pI,GARtBqI,EAAU,gBACPE,SAAU,YACVkV,YAAa,gEACbe,UACI3Q,MAAO,OAGd/E,EAAO,eAAgB,YAAa,wBAC/B+gI,GAAN,GAjBe,CAAA3qI,EAAA4U,eAAA5U,EAAA4U,kBAAnB,CAAU5U,WCJV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA0E,YAAA1E,EAAA0E,cAEvB,oBAAAkjI,KACWA,EAAAp6J,UAAAiwB,UAAP,SACImhD,GAIA,IAAIipF,EAFJ,GAAKjpF,EAeL,OAXAA,EAAWp8D,QAAQ,SAAAzW,GACf,OAAQA,EAAKsiC,OAAO/6B,YAChB,IAAK,IACL,IAAK,cACDu0J,EAAa97J,KAOrB87J,IAEJjpF,EAAWp8D,QAAQ,SAAAzW,GACf,OAAQA,EAAKsiC,OAAO/6B,YAChB,IAAK,IACL,IAAK,UACDu0J,EAAa97J,KAOrB87J,IAEJjpF,EAAWp8D,QAAQ,SAAAzW,GACf,OAAQA,EAAKsiC,OAAO/6B,YAChB,IAAK,IACL,IAAK,SACDu0J,EAAa97J,KAOrB87J,GAEGjpF,EAAW,MA/CpBgpF,EAAgB/pI,GADrBC,EAAK,YAAa,eACb8pI,GAAN,GAFe,CAAA7qI,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA0E,YAAA1E,EAAA0E,cAEvB,oBAAAojI,KACWA,EAAAt6J,UAAAiwB,UAAP,SACI4Q,GAEA,IAAKA,EAAQ,OAAO,EAEpB,OAAQA,EAAO/6B,WAAWy7B,eACtB,IAAK,MACL,IAAK,YACD,OAAO,EACX,QACI,OAAO,IAXjB+4H,EAAmBjqI,GADxBC,EAAK,YAAa,kBACbgqI,GAAN,GAFe,CAAA/qI,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GACf,IAAO4P,EAAW7S,EAAS4S,QAAQC,SAEnC5S,QAAQrxB,OAAO,YAAYy4C,UAAU,6BACjC,WACI,SAAS2jH,EACLjqH,EACA8hC,GAEA,GAAKA,KAAaA,EAAUtuE,OAAS,GAArC,EA2CJ,SAA2BsuE,GACvB,IAAKA,GAAaA,EAAUtuE,OAAS,EAAG,OAExCsuE,EAAUmL,WAAW/lC,OACrB46B,EAAU+P,IAAI,QAAS,SAEvB,IAAM1jB,EAAQ2T,EAAU3T,QAExB2T,EAAU+P,IAAI,QAAS1jB,EAAQ,MAC/B2T,EAAUmL,WAAW76E,OAlDrB83J,CAAkBpoF,GAElB,IAAMqoF,EAAcroF,EAAU,GAI9B,GAFIqoF,EAAY9nF,aAAe8nF,EAAY3+G,cACvC2+G,EAAYC,YAAcD,EAAY98E,YAEtCrtC,EAAMqqH,eADV,CAKA,IAAMp9E,EAAWnL,EAAUmL,WACvBq9E,EAAgB,EAEpBprI,QAAQxa,QAAQuoE,EAAU,SAACkT,EAAc9wF,GACrCi7J,GAAiBnqE,EAAI9S,cAGFz3E,KAAK4L,KAAKsgE,EAAU3T,SACF,IAAMm8F,GAG3CtqH,EAAMuqH,aA+Bd,OACI90E,SAAU,EACVz1C,OACIuqH,SAAU,IACVF,SAAU,IACVG,UAAW,KAEfvhH,SAAU,IACV1C,KAAA,SAAKvG,EAAkBwG,EAA8BgC,GAEjDhC,EAAQ+5D,MAAM,WAAM,OAAA0pD,EAAsBjqH,EAAOwG,KACjDxG,EAAM01C,OACF,SAAC11C,GACG,OAxChB,SACIwG,EACAgkH,GAEA,IAAMC,EAAcvrI,QAAQsnB,QAAQrzC,QAAQg7D,QAE5C,OACI3nB,EAAQ,GAAGkkH,WAAWl3J,OACtBgzC,EAAQ2nB,QACR3nB,EAAQ,GAAG4jH,YACXK,EACAD,EA6BeG,CAAgBnkH,EAASxG,EAAMwqH,YAE1C,SAAC5kJ,EAAU+vE,EAAU31C,GACbp6B,IAAa+vE,GACb7jD,EACI,WAAM,OAAAm4H,EAAsBjqH,EAAOwG,IACnC,IACA,EAHJ1U,UAjFb,CAAA7S,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA0E,YAAA1E,EAAA0E,cAIvB,oBAAAgkI,KACWA,EAAAl7J,UAAAiwB,UAAP,SAAiB1xB,GACb,SAAKA,IAASA,EAAKuzG,mBAEZvzG,EAAKuzG,iBAAiBhuG,OAAS,GAJxCo3J,EAA2B7qI,GADhCC,EAAK,YAAa,0BACb4qI,GAAN,GAJe,CAAA3rI,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA0E,YAAA1E,EAAA0E,cAEvB,oBAAAikI,KACWA,EAAAn7J,UAAAiwB,UAAP,SACImhD,GAEA,GAAKA,EAAL,CAGA,IADA,IAAIgqF,OAAc76J,EACC84B,EAAA,EAAAgiI,EAAAjqF,EAAA/3C,EAAAgiI,EAAAv3J,OAAAu1B,IAAY,CAA1B,IAAM96B,EAAI88J,EAAAhiI,GACX,OAAQ96B,EAAKsiC,OAAO/6B,WAAWy7B,eAC3B,IAAK,IACL,IAAK,UACD65H,EAAc78J,GAO1B,OAAO68J,IAlBTD,EAAiB9qI,GADtBC,EAAK,YAAa,gBACb6qI,GAAN,GAFe,CAAA5rI,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA0E,YAAA1E,EAAA0E,cAEvB,oBAAAokI,KACWA,EAAAt7J,UAAAiwB,UAAP,SACI4Q,GAEA,IAAKA,EAAQ,OAAO,EAEpB,OAAQA,EAAO/6B,WAAWy7B,eACtB,IAAK,IACL,IAAK,UACD,OAAO,EACX,QACI,OAAO,IAXjB+5H,EAAuBjrI,GAD5BC,EAAK,YAAa,sBACbgrI,GAAN,GAFe,CAAA/rI,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAA+wC,IAEf,oBAAAi7F,KACWA,EAAAv7J,UAAAiwB,UAAP,SAAiBogB,GACb,SAAIA,IAASA,EAAM22B,cAAgB32B,EAAM22B,aAAanmC,SAAWy/B,EAAAiG,eAAeU,aAFlFs0F,EAAqBlrI,GAD1BC,EAAK,OAAQ,oBACRirI,GAAN,GAFe,CAAAhsI,EAAA+wC,2BAAA/wC,EAAA+wC,8BAAnB,CAAU/wC,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA0E,YAAA1E,EAAA0E,cAEvB,oBAAAskI,KACWA,EAAAx7J,UAAAiwB,UAAP,SACIogB,GAEA,GAAIA,EACA,OAAQA,GACJ,KAAK,EACL,KAAK,IACL,IAAK,UACL,IAAK,YACD,OAAO,EACX,QACI,OAAO,IAZrBmrH,EAAqBnrI,GAD1BC,EAAK,YAAa,oBACbkrI,GAAN,GAFe,CAAAjsI,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA0E,YAAA1E,EAAA0E,cAEvB,oBAAAukI,KACWA,EAAAz7J,UAAAiwB,UAAP,SACIogB,GAEA,GAAIA,EACA,OAAQA,GACJ,KAAK,EACL,KAAK,IACL,IAAK,SACL,IAAK,UACD,OAAO,EACX,QACI,OAAO,EAInB,OAAO,GAhBTorH,EAAoBprI,GADzBC,EAAK,YAAa,mBACbmrI,GAAN,GAFe,CAAAlsI,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA0E,YAAA1E,EAAA0E,cAEvB,oBAAAwkI,KACWA,EAAA17J,UAAAiwB,UAAP,SACIogB,GAEA,IAAKA,EAAO,OAAO,EAEnB,OAAQA,EAAMvqC,WAAWy7B,eACrB,IAAK,IACL,IAAK,YACL,IAAK,IACL,IAAK,cACD,OAAO,EACX,QACI,OAAO,IAbjBm6H,EAA0BrrI,GAD/BC,EAAK,YAAa,yBACborI,GAAN,GAFe,CAAAnsI,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA0E,YAAA1E,EAAA0E,cAEvB,oBAAAykI,KACWA,EAAA37J,UAAAiwB,UAAP,SACIogB,GAEA,GAAIA,EACA,OAAQA,GACJ,KAAK,EACL,IAAK,UACD,OAAO,EACX,QACI,OAAO,IAVrBsrH,EAAqBtrI,GAD1BC,EAAK,YAAa,oBACbqrI,GAAN,GAFe,CAAApsI,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA0E,YAAA1E,EAAA0E,cAEvB,oBAAA0kI,KACWA,EAAA57J,UAAAiwB,UAAP,SACImhD,GAEA,GAAKA,EAAL,CAGA,IADA,IAAM6hB,KACc55D,EAAA,EAAAwiI,EAAAzqF,EAAA/3C,EAAAwiI,EAAA/3J,OAAAu1B,IAAY,CAA3B,IAAMh6B,EAAKw8J,EAAAxiI,GACZ,OAAQh6B,EAAMwhC,OAAO/6B,WAAWy7B,eAC5B,IAAK,IACL,IAAK,MACL,IAAK,SACL,IAAK,YACD0xD,EAAM/4E,KAAK7a,IAOvB,OAAO4zF,IApBT2oE,EAAiBvrI,GADtBC,EAAK,YAAa,gBACbsrI,GAAN,GAFe,CAAArsI,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA0E,YAAA1E,EAAA0E,cAEvB,oBAAA4kI,KACWA,EAAA97J,UAAAiwB,UAAP,SACImhD,GAEA,GAAKA,EAAL,CAGA,IADA,IAAM6hB,KACa55D,EAAA,EAAA0iI,EAAA3qF,EAAA/3C,EAAA0iI,EAAAj4J,OAAAu1B,IAAY,CAA1B,IAAM96B,EAAIw9J,EAAA1iI,GACX,OAAQ96B,EAAKsiC,OAAO/6B,YAChB,IAAK,IACL,IAAK,UACL,IAAK,IACL,IAAK,aACD,MACJ,QACImtF,EAAM/4E,KAAK3b,IAKvB,OAAO00F,IApBT6oE,EAAkBzrI,GADvBC,EAAK,YAAa,iBACbwrI,GAAN,GAFe,CAAAvsI,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA0E,YAAA1E,EAAA0E,cAQvB,oBAAA8kI,KACWA,EAAAh8J,UAAAiwB,UAAP,SACIogB,EACA4rH,GAEA,GAAI5rH,EACA,OAAQA,GACJ,KAAK,EACL,IAAK,cACD,GAAkB,IAAd4rH,EACA,OACIC,MAAM,EACNC,UAAU,EACVC,QAAQ,GAET,GAAIH,EAAY,EACnB,OACIC,MAAM,EACNC,UAAU,EACVC,QAAQ,GAGhB,MACJ,KAAK,EACL,IAAK,SACL,KAAK,IACL,IAAK,YACD,GAAkB,IAAdH,EACA,OACIC,MAAM,EACNC,UAAU,EACVC,QAAQ,GAET,GAAIH,EAAY,EACnB,OACIC,MAAM,EACNC,UAAU,EACVC,QAAQ,GAGhB,MACJ,KAAK,EACL,IAAK,UACL,KAAK,IACL,IAAK,YACL,KAAK,IACL,IAAK,UACD,OAASF,MAAM,EAAOC,UAAU,EAAOC,QAAQ,GAM3D,OAASF,MAAM,EAAOC,UAAU,EAAOC,QAAQ,IArDjDJ,EAAuB3rI,GAD5BC,EAAK,YAAa,sBACb0rI,GAAN,GARe,CAAAzsI,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA0E,YAAA1E,EAAA0E,cAEvB,oBAAAmlI,KACWA,EAAAr8J,UAAAiwB,UAAP,SACIogB,GAEA,IAAKA,EAAO,MAAO,GAEnB,OAAQA,EAAMvqC,WAAWy7B,eACrB,IAAK,IACL,IAAK,MACL,IAAK,SACL,IAAK,YACD,MAAO,SACX,QACI,MAAO,UAbjB86H,EAAqBhsI,GAD1BC,EAAK,YAAa,oBACb+rI,GAAN,GAFe,CAAA9sI,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA0E,YAAA1E,EAAA0E,cAEvB,oBAAAolI,KACWA,EAAAt8J,UAAAiwB,UAAP,SAAiB4Q,GACb,OAAQA,GACJ,IAAK,cACL,KAAK,EACD,MAAO,eACX,IAAK,YACL,KAAK,EACD,MAAO,gBACX,IAAK,OACL,KAAK,EACD,MAAO,eACX,QACI,MAAO,UAbjBy7H,EAAqBjsI,GAD1BC,EAAK,YAAa,oBACbgsI,GAAN,GAFe,CAAA/sI,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCCV,SAAUA,GAyBN,IAAAgtI,EAAA,WAGI,SAAAA,EAAmB7sI,GAAAzuB,KAAAyuB,YAyBvB,OAvBI6sI,EAAAv8J,UAAAw8J,oBAAA,WACI,OAAOv7J,KAAKyuB,UAIR,mCAGI0/D,eAAgBnuF,KAAK2vF,YAAY,OAAO,GACpC3gD,OAAQ,sBAMhBssH,EAAAv8J,UAAA4wF,YAAR,SACIjhE,EACA1gB,EACA2gB,EACAuQ,GAEA,OAASxQ,OAAMA,EAAE1gB,QAAOA,EAAE2gB,OAAMA,EAAEuQ,QAAOA,IAzBtCo8H,EAAAhjI,SAAW,aA2BtBgjI,EA5BA,GA6BA/sI,QACKrxB,OAAO,YACPsxB,QAAQ,oBACL,YACA,SAAAC,GAAa,WAAI6sI,EAAiB7sI,GAAW8sI,yBA1DzD,CAAUjtI,WCDV,SAAUA,IAAS,SAAAwe,GAKf,IAAOhb,EAASxD,EAASiD,QAAQO,OAC1B8Q,EAAuBtU,EAAS4S,QAAQ0B,sBAU/C,WAMI,SAAA44H,EACYx4G,EACAgzC,EACA7E,EACAlhD,EACAwrH,GAJAz7J,KAAAgjD,YACAhjD,KAAAg2F,mBACAh2F,KAAAmxF,YACAnxF,KAAAiwC,sBACAjwC,KAAAy7J,qBAGLD,EAAAz8J,UAAAqtC,QAAP,WACSpsC,KAAK65E,QACN75E,KAAK65E,OACDlP,WAAY3qE,KAAKmxF,UACjB5mB,MAAO,GACP1J,UAAW,GACX5M,OAAQ,KACRyV,UAAW,GACX5I,SAAU,GACV9pB,YAAa,GACbmoF,WAAY,KACZC,YAAap/H,KAAKmxF,YAI1BnxF,KAAK07J,eAAiB,IAGnBF,EAAAz8J,UAAA48J,YAAP,eAAA36H,EAAAhhC,KACQA,KAAK07J,gBAAkB17J,KAAK07J,eAAe74J,OAAS,GACpD7C,KAAKy7J,mBACA5qB,yBACG1R,WAAYn/H,KAAK07J,iBAEpBp3H,SAASC,KAAK,SAAAmD,GACX1G,EAAK46H,cAAgBl0H,EACrB1G,EAAK66H,aAER7xH,MAAM,SAAA3oC,GACc,MAAbA,EAAEu+B,OACFoB,EAAKg1D,iBACA3xD,SAAU7F,GAAIn9B,EAAEqmC,OAChBpD,SAASC,KAAK,SAAAo8B,GACX3/B,EAAKgiB,UAAUzM,KAAKoqB,KAEvBxN,QAAQ,WACLnyB,EAAKiP,oBAAoBoH,KAAK,kCAElB,MAAbh2C,EAAEu+B,OACToB,EAAKiP,oBAAoB1/B,MAAM,iDAE/BywB,EAAKiP,oBAAoB1/B,MAAM,+CAM5CirJ,EAAAz8J,UAAAynD,OAAP,WACIxmD,KAAKgjD,UAAUwD,UAGZg1G,EAAAz8J,UAAAkmB,IAAP,eAAA+b,EAAAhhC,KACIA,KAAK65E,MAAM5lB,OAASrxB,EAAqB9Q,EAAQ9xB,KAAK65E,MAAM5lB,QAAUniC,EAAOiwC,SAE7E/hE,KAAKg2F,iBACA/wE,IAAIjlB,KAAK65E,OACTv1C,SAASC,KAAK,SAAAo8B,GACX3/B,EAAKgiB,UAAUzM,KAAKoqB,KAEvB32B,MAAM,SAAA3oC,GACH2/B,EAAKiP,oBAAoB1/B,MAAM,sCAInCirJ,EAAAz8J,UAAA88J,SAAR,WACI77J,KAAK65E,OACDlP,WAAY3qE,KAAKmxF,UACjB5mB,MAAOvqE,KAAK47J,cAAcrxF,MAC1B1J,UAAW7gE,KAAK47J,cAAc/6F,UAC9B5M,OAAQj0D,KAAK47J,cAAc3nG,OAC3ByV,UAAW1pE,KAAK47J,cAAclyF,UAC9B5I,SAAU9gE,KAAK47J,cAAc96F,SAC7B9pB,YAAah3C,KAAK47J,cAAc5kH,YAChCmoF,WAAYn/H,KAAK47J,cAAcz8B,WAC/BC,YAAap/H,KAAK47J,cAAcx8B,cAxFtCo8B,EAAsBpsI,GAR3BqI,EAAU,mBACPE,SAAU,iBACVkV,YAAa,0BACbe,UACIisC,MAAO,aAGd3hD,EAAO,YAAa,mBAAoB,YAAa,sBAAuB,uBACvEsjI,GAAN,GAhBe,CAAAltI,EAAAwe,kBAAAxe,EAAAwe,qBAAnB,CAAUxe,WCKV,SAAUA,GAQN,IAAiB+zF,EAkCApsF,GAlCjB,SAAiBosF,GAyBGA,EAAAjvG,IAAhB,SAAoBlU,EAAgB8/C,GAChC,OACI4D,kBAAmB5D,EACnBqvD,cAAenvG,GAAKA,EAAEmvG,gBA5BlC,CAAiBgU,EAAA/zF,EAAA+zF,gBAAA/zF,EAAA+zF,mBAkCjB,SAAiBpsF,GAuEGA,EAAA7iB,IAAhB,SAAoBlU,EAAgB8/C,GAChC,OAAA/jB,KACO/7B,GACHmvG,cAAervD,KA1E3B,CAAiB/oB,EAAA3H,EAAA2H,YAAA3H,EAAA2H,eA6OJ3H,EAAAqsE,YAA2BrsE,EAAAqM,UAAUhsB,IAC9C2f,EAAAsL,KAAkB,UArHtB,SAAgBv4B,GACZ,OAAQA,EAAEiB,MACN,IAAK,wBACD,OAAO,SAAApD,GACH,OAAA+2B,EAAU7iB,IAAIlU,EAAC+7B,KACP/7B,GAAKA,EAAEmvG,eACX99F,MAAO,KACP28F,MAAO7rG,EAAE6rG,MACT7e,mBAAoBhtF,EAAEgtF,uBAGlC,IAAK,oCACD,OAAO,SAAAnvF,GACH,OAAA+2B,EAAU7iB,IAAIlU,EAAC+7B,KACP/7B,GAAKA,EAAEmvG,eACXhgB,mBAAoBhtF,EAAEgtF,uBAGlC,IAAK,mCACD,OAAO,SAAAnvF,GACH,OAAA+2B,EAAU7iB,IAAIlU,EAAC+7B,KACP/7B,GAAKA,EAAEmvG,eACXytD,WA9BpB,SAAwBA,EAAiChrD,GAKrD,OAJKgrD,IAAYA,MAEbhrD,GAAaA,EAAUtyE,KAAIs9H,EAAWhrD,EAAUtyE,GAAG35B,YAAcisG,GAE9DgrD,EAyBqBC,CAAe78J,EAAEmvG,cAAcytD,WAAYz6J,EAAEmqE,UAGrE,IAAK,6BACD,OAAO,SAAAtsE,GACH,OAAA+2B,EAAU7iB,IAAIlU,EAAC+7B,KACP/7B,GAAKA,EAAEmvG,eACX99F,MAAO,KACP28F,MApDpB,SACI8uD,EACA5uD,GAEA,IAAwB,IAAAh1E,EAAA,EAAAwE,EAAAo/H,EAAWhqE,MAAX55D,EAAAwE,EAAA/5B,OAAAu1B,IAAkB,CAArC,IAAMu4E,EAAS/zE,EAAAxE,GACZu4E,EAAUJ,0BAA4BnD,EAAmBmD,0BACzDI,EAAUE,iBAAmBzD,EAAmByD,iBAChDF,EAAUrC,cAAgBlB,EAAmBkB,eAIrD,OAAO0tD,EAyCgBC,CAAyB/8J,EAAEmvG,cAAcnB,MAAO7rG,EAAE+rG,wBAGrE,IAAK,4BACD,OAAO,SAAAluG,GACH,OAAA+2B,EAAU7iB,IAAIlU,EAAC+7B,KACP/7B,GAAKA,EAAEmvG,eACX99F,MAAO,KACP28F,MAAO7rG,EAAE6rG,MACTgvD,aAAc76J,EAAE/D,SAG5B,IAAK,mCASL,IAAK,2BASL,IAAK,0BACD,OAAO,SAAA4B,GACH,OAAA+2B,EAAU7iB,IAAIlU,EAAC+7B,KACP/7B,GAAKA,EAAEmvG,eACX99F,MAAO,KACP28F,MAAO7rG,EAAE6rG,MACTgvD,aAAc,SAG1B,IAAK,sBACD,OAAO,SAAAh9J,GACH,OAAA+2B,EAAU7iB,IAAIlU,EAAC+7B,KACP/7B,GAAKA,EAAEmvG,eACXnB,MAAO7rG,EAAE6rG,MACT38F,MAAOlP,EAAEkP,MACT2rJ,aAAc,SAG1B,IAAK,kCACD,OAAO,SAAAh9J,GACH,OAAA+2B,EAAU7iB,IAAIlU,EAAC+7B,KACP/7B,GAAKA,EAAEmvG,eACXJ,WAAY5sG,EAAE4sG,eAG1B,IAAK,0BACD,OAAO,SAAA/uG,GACH,OAAAmjH,EAAcjvG,IAAIlU,GACdk8B,SAAS,EACT6lB,OAAQ5/C,EAAE4/C,OACVyV,SAAUr1D,EAAEq1D,SACZ1M,WAAY3oD,EAAE2oD,WACdoxC,gBAAgB,KAG5B,IAAK,0BACD,OAAO,SAAAl8F,GACH,OAAAmjH,EAAcjvG,IAAIlU,GACdk8B,SAAS,EACT6lB,OAAQ,KACRyV,SAAU,KACV1M,WAAY,KACZoxC,gBAAgB,KAG5B,IAAK,qCACD,OAAO,SAAAl8F,GACH,OAAAmjH,EAAcjvG,IAAIlU,EAAC+7B,KACX/7B,GAAKA,EAAE0jD,mBACXw4C,eAAgB/5F,EAAE+5B,eAYtC7M,QAAQrxB,OAAO,YAAYkB,MAAM,cAAekwB,EAAAqsE,aA5RpD,CAAUrsE,WCFV,SAAUA,IAYN,oBAAA6tI,KAKIA,EAAAp9J,UAAAqtC,QAAA,eAAApL,EAAAhhC,KACIA,KAAKo8J,eAAiB9tI,EAAAoR,SAAS1F,UAAU,SAAA1gB,GAAK,OAAC0nB,EAAKq7H,YAAc/iJ,KAGtE6iJ,EAAAp9J,UAAA4tC,WAAA,WACQ3sC,KAAKo8J,iBACLp8J,KAAKo8J,eAAexvH,UACpB5sC,KAAKo8J,eAAiB,OAIvBD,EAAAp9J,UAAAu9J,mBAAP,WACI,OAAOt8J,KAAKi9B,OAASj9B,KAAKi9B,MAAM2lB,mBAAqB5iD,KAAKi9B,MAAM2lB,kBAAkBw4C,gBAG/E+gE,EAAAp9J,UAAAw9J,eAAP,WACI,OAAO/5J,OAAOs1C,WAAat1C,OAAOs1C,UAAU0kH,gBAAkBh6J,OAAOs1C,UAAU2kH,eAAiB,GArBlGN,EAAY/sI,GAPjBqI,EAAU,YACPE,SAAU,MACVkV,YAAa,gBACbe,UACI3Q,MAAO,QAGTk/H,GAAN,GAZJ,CAAU7tI,WCHV,SAAUA,IAAS,SAAAiD,GAAQA,EAAA0E,YAAA1E,EAAA0E,cAEvB,oBAAAymI,KACWA,EAAA39J,UAAAiwB,UAAP,SACI2tI,GAEA,IAAKA,EAAY,OAAO,EAExB,OAAQA,EAAW93J,WAAWy7B,eAC1B,IAAK,IACL,IAAK,YACD,OAAO,EACX,QACI,OAAO,IAXjBo8H,EAAwBttI,GAD7BC,EAAK,YAAa,uBACbqtI,GAAN,GAFe,CAAApuI,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCEV,SAAUA,IAAS,SAAAsuI,GACf,IAAOt3F,EAAiBh3C,EAAA+wC,yBAAyBiG,eAS1C1zC,EAActD,EAAAiD,QAAQK,aAU7B,WAaI,SAAAirI,EACYl3F,EACAoI,EACAlH,EACAi2F,GAHA98J,KAAA2lE,YACA3lE,KAAA+tE,cACA/tE,KAAA6mE,eACA7mE,KAAA88J,wBAhBL98J,KAAAgiG,WAAY,EAKZhiG,KAAA+8J,kBAAoB,EACpB/8J,KAAAmrE,oBAAsB,EAIrBnrE,KAAAg9J,gBAAiB,EASlBH,EAAA99J,UAAAqtC,QAAP,eAAApL,EAAAhhC,KACIA,KAAKi9J,yBACLj9J,KAAKk9J,yBAELl9J,KAAK2lE,UAAU1sC,OACV5f,OAAO,SAAAC,GAAK,QAAEA,IACd4f,uBACAc,UAAU,SAAC96B,GACR8hC,EAAKm8H,kBACDC,YAAal+J,GAAKA,EAAE6mE,cAAgB7mE,EAAE6mE,aAAanmC,SAAW0lC,EAAeU,WAC7EwyD,UAAWt5H,GAAKA,EAAEk8B,SAEtB4F,EAAKq8H,SAAWn+J,EAAE0mE,WAClB5kC,EAAKs8H,qBACAp+J,GAAKA,EAAE2mE,kBACR7kC,EAAKm8H,iBAAiB3kC,UACtBx3F,EAAKm8H,iBAAiBC,gBAK/BP,EAAA99J,UAAAw+J,mBAAP,WACQv9J,KAAKq9J,UACLr9J,KAAK+tE,YAAY5D,iBACjBnqE,KAAKq9J,UAAW,IAEhBr9J,KAAK+tE,YAAYjE,gBACjB9pE,KAAKq9J,UAAW,IAIjBR,EAAA99J,UAAAy+J,yBAAP,WACIx9J,KAAKg9J,gBAAkBh9J,KAAKg9J,gBAGzBH,EAAA99J,UAAA0+J,iBAAP,WACI,OAAOz9J,KAAKg9J,gBAGTH,EAAA99J,UAAA2+J,WAAP,WACI,OAAO19J,KAAKq9J,UAGTR,EAAA99J,UAAA4tC,WAAP,WACQ3sC,KAAK29J,kBAAkB39J,KAAK29J,iBAAiB/wH,UAC7C5sC,KAAK49J,iBAAiB59J,KAAK49J,gBAAgBhxH,WAG5CiwH,EAAA99J,UAAA0uF,SAAP,SAAgBC,GAEP1tF,KAAKm9J,mBAAqBn9J,KAAKm9J,iBAAiB3kC,YAChDh2H,OAAOi9B,KAAKmB,YAAYE,uBAK7B4sD,EAAQC,OACR3tF,KAAKgiG,WAAY,IAGd66D,EAAA99J,UAAAw3C,KAAP,WACIv2C,KAAKgiG,WAAY,GAGd66D,EAAA99J,UAAA8+J,WAAP,SAAkBz/J,GACVA,GACA4B,KAAK+tE,YAAYxE,iBAAiBvpE,KAAKg9J,gBACvCh9J,KAAK88J,sBAAsBnlC,YAAY/lG,EAAY4jC,QAEnDx1D,KAAK+tE,YAAYhE,qBACjB/pE,KAAK88J,sBAAsBjlC,sBAI3BglC,EAAA99J,UAAAk+J,uBAAR,eAAAj8H,EAAAhhC,KACIA,KAAK29J,iBAAmBrkI,GAAG6uC,WAAW5vB,SAAS,KAC1Cl/B,OAAO,WAAM,OAAA2nB,EAAKghE,YAClBjG,cAAc,WACX,OAAAziE,GAAG6uC,WAAWw/D,YAAiB3mG,EAAK6lC,aAAamB,kBAAkB1jC,UAAU3Y,KAAK,KAErFqO,UAAU,SAACiuC,GACRjnC,EAAK+7H,kBAAqB90F,GAAaA,EAAU5uD,OAAO,SAAAC,GAAK,OAAAA,EAAEssD,aAAY/iE,QAAW,KAI1Fg6J,EAAA99J,UAAAm+J,uBAAR,eAAAl8H,EAAAhhC,KACIA,KAAK49J,gBAAkBtkI,GAAG6uC,WAAW5vB,SAAS,KACzCl/B,OAAO,WAAM,OAAA2nB,EAAKghE,YAClBjG,cAAc,WACX,OAAAziE,GAAG6uC,WAAWw/D,YACV3mG,EAAK6lC,aAAayB,0BAAkC,UACrD38C,KAAK,KAEXqO,UAAU,SAAC8jI,GACR98H,EAAKmqC,oBAAuB2yF,GAAYA,EAASj7J,QAAW,KAIhEg6J,EAAA99J,UAAAu+J,qBAAR,SACIz3F,EACA2yD,EACA4kC,GAEA,IAAMW,EAA2Bl4F,KAAmBA,EAAcviE,KAAK,SAAAgW,GAAK,QAAEA,EAAEklB,MAAQllB,EAAEozD,WAE1F,OAAK8rD,EAMAh2H,OAAOi9B,KAAKmB,YAAYE,qBAMzBi9H,GACA/9J,KAAKg+J,cAAgB,QACrBh+J,KAAKi+J,gBAAkB,iBACnBb,GACAp9J,KAAKg+J,cAAgBh+J,KAAKq9J,SAAW,QAAU,cAC/Cr9J,KAAKi+J,gBAAkB,4BAG3B,GAGAb,GACAp9J,KAAKg+J,cAAgBh+J,KAAKq9J,SAAW,QAAU,cAC/Cr9J,KAAKi+J,gBAAkB,wBAI3Bj+J,KAAKg+J,cAAgB,aACrBh+J,KAAKi+J,gBAAkB,yBAvBnBj+J,KAAKg+J,cAAgB,aACrBh+J,KAAKi+J,gBAAkB,0CAPvBj+J,KAAKg+J,cAAgB,aACrBh+J,KAAKi+J,gBAAkB,2BA/H7BpB,EAAiCztI,GARtCqI,EAAU,YACPE,SAAU,6BACVkV,YAAa,uEACbe,UACIswH,SAAU,OAGjBhmI,EAAO,YAAa,cAAe,eAAgB,0BAC9C2kI,GAAN,GApBe,CAAAvuI,EAAAsuI,SAAAtuI,EAAAsuI,YAAnB,CAAUtuI,WCAV,SAAUA,IAAS,SAAA+wC,IASf,WAOI,SAAA8+F,EAAoBx4F,EAA8BoI,GAA9B/tE,KAAA2lE,YAA8B3lE,KAAA+tE,cAL3C/tE,KAAAm9J,oBAOAgB,EAAAp/J,UAAAqtC,QAAP,eAAApL,EAAAhhC,KACIA,KAAK2lE,UAAU1sC,OAAOe,UAAU,SAAA96B,GAC5B8hC,EAAKm8H,kBACDC,YAAal+J,GAAKA,EAAE6mE,cAAgB7mE,EAAE6mE,aAAanmC,SAAWy/B,EAAAiG,eAAeU,WAC7EwyD,UAAWt5H,GAAKA,EAAEk8B,SAGtB4F,EAAKo9H,mBACDl/J,GACAA,EAAE2mE,gBACA3mE,EAAEinE,UAAYjnE,EAAE2mE,cAAcviE,KAAK,SAAAgW,GAAK,OAAAA,EAAEklB,KAAOt/B,EAAEinE,YACrB,IAA3BjnE,EAAE2mE,cAAchjE,QAAgB3D,EAAE2mE,cAAc,IACpC7kC,EAAKo9H,oBAAsB/+F,EAAAa,kBAAkBl/B,EAAKo9H,mBAAmBx+H,SAEtFoB,EAAKq9H,iBAAiBr9H,EAAKo9H,mBAAmBtxF,2BAKnDqxF,EAAAp/J,UAAAsqE,iBAAP,SAAwB7qC,GACpBx+B,KAAK+tE,YAAY1E,iBAAiB7qC,IAG9B2/H,EAAAp/J,UAAAs/J,iBAAR,SAAyBvxF,GAAzB,IAAA9rC,EAAAhhC,KACIoxC,cAAcpxC,KAAKs+J,kBAEdxxF,EAKL9sE,KAAKs+J,iBAAmB7sH,YAAY,WAChCzQ,EAAKu9H,eAAgB,IAAI9hI,MAAOmJ,UAAY,IAAInJ,KAAKqwC,GAAwBlnC,WAAa,KAC3F,KANC5lC,KAAKu+J,aAAe,GApC1BJ,EAAqB/uI,GAR1BqI,EAAU,YACPE,SAAU,gBACVkV,YAAa,+CACbe,UACIswH,SAAU,OAGjBhmI,EAAO,YAAa,gBACfimI,GAAN,GATe,CAAA7vI,EAAA+wC,2BAAA/wC,EAAA+wC,8BAAnB,CAAU/wC,WCFV,SAAUA,GAEN,IAAO4xC,EAAoB5xC,EAAA+wC,yBAAyBa,kBAE7CoF,EAAiBh3C,EAAS+wC,yBAAyBiG,gBAQ1D,WAmBI,SAAAk5F,EACIxjG,EACQ2/B,EACAh1B,EACAm3F,GAFA98J,KAAA26F,cACA36F,KAAA2lE,YACA3lE,KAAA88J,wBAlBL98J,KAAAy+J,WAAa,GAoBhBz+J,KAAK0+J,kBAAyB1jG,EAAQ,eACtCh7D,KAAK2+J,mBAA0B3jG,EAAQ,gBAGpCwjG,EAAAz/J,UAAAqtC,QAAP,eAAApL,EAAAhhC,KACUyvD,EAAqB,SAAAn2C,GAAK,OAAAA,SAEhCtZ,KAAK4+J,sBAAwB5+J,KAAK26F,YAAY1hE,OACzCtqB,IAAI,SAAA2K,GAAK,OAAAA,GAAKA,EAAEspC,oBAChBvpC,OAAOo2C,GACPv2B,uBACAc,UAAU,SAAA1gB,GACP0nB,EAAK4hB,kBAAoBtpC,EACzB0nB,EAAK69H,sCAAsC79H,EAAK4hB,qBAGxD5iD,KAAK8+J,cAAgB9+J,KAAK26F,YAAY1hE,OACjCtqB,IAAI,SAAA2K,GAAK,OAAAA,GAAKA,EAAE+0F,gBAChBh1F,OAAOo2C,GACPv2B,uBACAc,UAAU,SAAA1gB,GACP0nB,EAAKqtE,cAAgB/0F,EAErB,IAAMylJ,EAAwB/9H,EAAKqtE,eAAiBrtE,EAAKqtE,cAAcnB,MACjE8xD,EACFh+H,EAAKi+H,WACLj+H,EAAKi+H,UAAUl5F,cACf/kC,EAAKi+H,UAAUl5F,aAAanmC,SAAW0lC,EAAeU,WAErDhlC,EAAKk+H,8BAAiCF,IAAuBD,GAC9D/9H,EAAKm+H,kCAAkCn+H,EAAKqtE,iBAGxDruG,KAAK8rE,aAAe9rE,KAAK2lE,UAAU1sC,OAC9BtqB,IAAI,SAAA2K,GAAK,OAAAA,IACTD,OAAOo2C,GACPv2B,uBACAc,UAAU,SAAA1gB,GACP0nB,EAAKi+H,UAAY3lJ,EAEjB,IAAM8lJ,EACFp+H,EAAKi+H,WACLj+H,EAAKi+H,UAAUl5F,cACf/kC,EAAKi+H,UAAUl5F,aAAanmC,SAAW0lC,EAAeU,WAGtDhlC,EAAKk+H,8BACLE,GACAp+H,EAAKi+H,UAAUp5F,gBACd7kC,EAAKi+H,UAAUp5F,cAAchjE,OAE9Bm+B,EAAK69H,sCAAsC79H,EAAK4hB,mBAIhDw8G,EACAp+H,EAAKq+H,6BAA6Br+H,EAAKi+H,WAKvCj+H,EAAKqtE,eACLrtE,EAAKqtE,cAAchgB,qBACf//D,EAASsI,iBAAiBE,mBAAmBs6E,cACtBpwE,EAAKk+H,+BAA8Bl+H,EAAKy9H,WAAa,MAG5Fz+J,KAAK88J,sBAAsBhlC,uBAGxB0mC,EAAAz/J,UAAA4tC,WAAP,WACQ3sC,KAAK4+J,wBACL5+J,KAAK4+J,sBAAsBhyH,UAC3B5sC,KAAK4+J,sBAAwB,MAG7B5+J,KAAK8+J,gBACL9+J,KAAK8+J,cAAclyH,UACnB5sC,KAAK8+J,cAAgB,MAGrB9+J,KAAK8rE,eACL9rE,KAAK8rE,aAAal/B,UAClB5sC,KAAK8rE,aAAe,MAGpB9rE,KAAKs/J,eACLt/J,KAAKs/J,aAAa1yH,UAClB5sC,KAAKs/J,aAAe,OAIpBd,EAAAz/J,UAAA8/J,sCAAR,SAA8Cj8G,GAC1C,GAAIA,EAAkBxnB,SAAYp7B,KAAK4iD,mBAAqB5iD,KAAK4iD,kBAAkBxnB,QAG/E,OAFA74B,SAASi2C,uBAAuB,WAAW,GAAGgC,UAAUv1B,IAAI,6BAC5DjlB,KAAKy+J,WAAa,UAItBl8J,SAASi2C,uBAAuB,WAAW,GAAGgC,UAAUjmC,OAAO,wBAE3DvU,KAAKquG,eAAiBruG,KAAKquG,cAAcnB,OAAmD,IAA1CltG,KAAKquG,cAAchgB,mBACrEruF,KAAKm/J,kCAAkCn/J,KAAKquG,eAI5CruG,KAAKi/J,WAAaj/J,KAAKi/J,UAAUl5F,cAAuD,IAAvC/lE,KAAKi/J,UAAUl5F,aAAanmC,OAC7E5/B,KAAKq/J,6BAA6Br/J,KAAKi/J,WAI3Cj/J,KAAKy+J,WAAa,IAGdD,EAAAz/J,UAAAsgK,6BAAR,SAAqCJ,GACjC,IAAMb,EACFa,GACAA,EAAUp5F,gBACRo5F,EAAU94F,UAAY84F,EAAUp5F,cAAcviE,KAAK,SAAAgW,GAAK,OAAAA,EAAEklB,KAAOygI,EAAU94F,YACrC,IAAnC84F,EAAUp5F,cAAchjE,QAAgBo8J,EAAUp5F,cAAc,IACnE05F,EAA2BnB,GAAsBl+F,EAAkBk+F,EAAmBx+H,SAE5F5/B,KAAKw/J,SAAWD,EAEZA,GACAv/J,KAAKy+J,WAAa,MAKlBQ,GACAA,EAAUp5F,eACVo5F,EAAUp5F,cAAcxsD,OAAO,SAAAC,GAAK,QAAEA,EAAEklB,IAAMllB,EAAEozD,WAAU7pE,OAE1D7C,KAAKy+J,WAAa,QAIlBz+J,KAAKk/J,6BACLl/J,KAAK6+J,sCAAsC7+J,KAAK4iD,mBAIpD5iD,KAAKy+J,WAAa,IAGdD,EAAAz/J,UAAAogK,kCAAR,SAA0C9wD,GACtC,IAAMnB,EAAQmB,EAAcnB,MAC5B,GAAKA,EAEL,IAAIA,EAAMttE,QAAuC,QAA5BstE,EAAMttE,OAAO/6B,YAAyC,IAAjBqoG,EAAMttE,QAKhE,GAAKstE,EAAMlb,MAAX,CAEA,IAAMytE,EAAez/J,KAAK2+J,mBAAmBzxD,EAAMlb,OAC7C0tE,EAAc1/J,KAAK0+J,kBAAkBxxD,EAAMlb,OACjD,GAAIytE,GAAgBA,EAAa58J,OAK7B,OAJA7C,KAAKy+J,WAAa,aAEdiB,GAAeA,EAAY78J,SAAW48J,EAAa58J,SAAQ7C,KAAKy+J,WAAa,WAKrFz+J,KAAKy+J,WAAa,SAhBdz+J,KAAKy+J,WAAa,OAmBlBD,EAAAz/J,UAAAmgK,2BAAR,WACI,OAAOl/J,KAAK4iD,qBAAuB5iD,KAAK4iD,kBAAkBxnB,SApM5DojI,EAAwBpvI,GAL7BqI,EAAU,YACPE,SAAU,mBACVkV,YAAa,uDAEhB3U,EAAO,UAAW,cAAe,YAAa,0BACzCsmI,GAAN,GAZJ,CAAUlwI,WCEV,SAAUA,GAASA,EAAAsuI,SAAAtuI,EAAAsuI,WAWf,WAII,SAAA+C,EAAoBpyE,GAAAvtF,KAAAutF,eAHbvtF,KAAAgiG,WAAY,EAKZ29D,EAAA5gK,UAAAg3C,MAAP,WACIxZ,EAAE,sBAAsBwZ,SAGrB4pH,EAAA5gK,UAAA6gK,YAAP,SAAmBC,QACUvgK,IAArBU,KAAKg3C,cAA2Bh3C,KAAKg3C,YAAc,IAEvDh3C,KAAKg3C,YAAch3C,KAAKg3C,YAAc,GAAK6oH,EAC3C7/J,KAAK+1C,SAGF4pH,EAAA5gK,UAAAzB,KAAP,WACI0C,KAAKutF,aAAaK,OAAO5tF,KAAKg3C,aAC9Bh3C,KAAKg3C,YAAc,IAGhB2oH,EAAA5gK,UAAA+gK,YAAP,WACI9/J,KAAKg3C,YAAc,IAGhB2oH,EAAA5gK,UAAAo8J,OAAP,WACIn7J,KAAKg3C,YAAc,IA3BrB2oH,EAAgBvwI,GARrBqI,EAAU,YACPE,SAAU,WACVkV,YAAa,qCACbe,UACImyH,QAAS,OAGhB7nI,EAAO,iBACFynI,GAAN,GAXJ,CAAUrxI,WCAV,SAAUA,GAASA,EAAAsuI,SAAAtuI,EAAAsuI,WAaf,WAII,SAAAoD,EACYh9G,EACA4S,EACAygB,GAFAr2E,KAAAgjD,YACAhjD,KAAA41D,uBACA51D,KAAAq2E,8BAGL2pF,EAAAjhK,UAAAkhK,uBAAP,WACIjgK,KAAKizD,SAAU,EACfjzD,KAAK41D,qBAAqBolC,iBAE1B,IAAIM,EAAYt7F,KAAK41D,qBAAqB33B,eACvCq9D,EACC/+D,EAAE,sBAAsBsb,KAAK,MAAOyjD,EAAY,mBAEhD/+D,EAAE,sBAAsBsb,KAAK,MAAO,gBAGrCmoH,EAAAjhK,UAAAg6E,4BAAP,WACI,IAAM1sB,EACFrsD,KAAK4iD,mBAAqB5iD,KAAK4iD,kBAAkB3B,QAAUjhD,KAAK4iD,kBAAkB3B,OAAOziB,GACvF6jC,EACFriE,KAAK4iD,mBACL5iD,KAAK4iD,kBAAkB8T,UACvB12D,KAAK4iD,kBAAkB8T,SAASsN,eAC/B3X,GAAagW,GAElBriE,KAAKgjD,UAAUvhD,MACX03C,SAAU,mCAAmCkT,EAAQ,aAAagW,EAAK,mBAAmBriE,KAAKq2E,4BAA4BnS,yBAAwB,2BACnJ5f,YAAa,KACbC,qBAAqB,KAItBy7G,EAAAjhK,UAAAmhK,iBAAP,WACyBlgK,KAAK41D,qBAAqBulC,eAE7Bn7F,KAAK41D,qBAAqBslC,sBACvCl7F,KAAK41D,qBAAqBqlC,sBAzCjC+kE,EAA6B5wI,GARlCqI,EAAU,YACPE,SAAU,yBACVkV,YAAa,iEACbe,UACIgV,kBAAmB,OAG1B1qB,EAAO,YAAa,uBAAwB,gCACvC8nI,GAAN,GAbJ,CAAU1xI,WCAV,SAAUA,GAASA,EAAAsuI,SAAAtuI,EAAAsuI,WAef,WAOI,SAAAuD,EACY5yE,EACA/iC,EACAorC,EACA0b,EACAtb,EACAzyD,GALAvjC,KAAAutF,eACAvtF,KAAAwqD,iBACAxqD,KAAA41F,kBACA51F,KAAAsxG,mBACAtxG,KAAAg2F,mBACAh2F,KAAAujC,KAZLvjC,KAAAgiG,WAAY,EAeZm+D,EAAAphK,UAAA6kD,WAAP,WACQ5jD,KAAKogK,aAAepgK,KAAKogK,YAAY/zG,UAAYrsD,KAAKogK,YAAY5hI,IAClEx+B,KAAKqgK,aAAargK,KAAKogK,YAAY/zG,SAAUrsD,KAAKogK,YAAY5hI,KAI/D2hI,EAAAphK,UAAA6oC,OAAP,WACQ5nC,KAAKk8J,aAAcl8J,KAAKutF,aAAa3lD,OAAO5nC,KAAKk8J,cAChDl8J,KAAKgiG,WAAY,GAGlBm+D,EAAAphK,UAAAshK,aAAR,SAAqBh0G,EAAuBkmC,GAA5C,IAAAvxD,EAAAhhC,KACIA,KAAKsgK,mBAAqB,KAC1BtgK,KAAKugK,mBAAqB,KAC1B,IAAMC,EAAmBxgK,KAAKwqD,eAAenmB,SAAU7F,GAAI6tB,IAAY/nB,SACjEm8H,EAAsBzgK,KAAKsxG,iBAAiBwM,kBAC9Ct/E,GAAI+zD,EACJ9qD,KAAM,EACNpC,SAAU,IACXf,SACGo8H,EAAoB1gK,KAAK41F,gBAAgBjnB,eAC3CnwC,GAAI6tB,IACL/nB,SACGq8H,EAAqB3gK,KAAKg2F,iBAAiBrnB,eAC7CnwC,GAAI6tB,IACL/nB,SACGs8H,EAA4B5gK,KAAKsxG,iBAAiB4M,0BAA2B1/E,GAAI+zD,IAAUjuD,SAEjGtkC,KAAKujC,GACAs9H,KACGL,EACAC,EACAC,EACAC,EACAC,IAEHr8H,KAAK,SAAAmD,GACF,IAAMu8D,EAAuB,SAAAvlG,GAAO,MAAsB,eAAtBA,EAAI4hC,eAElC2gB,KACA0f,KACN9iE,OAAO0P,KAAKm6B,EAAK,QACZruB,OAAO,SAAA3a,GAAO,OAACulG,EAAqBvlG,KACpCiQ,IAAI,SAAA2K,GAAK,OAAC2nC,EAAO3nC,GAAKouB,EAAK,GAAKpuB,KACrCzb,OAAO0P,KAAKm6B,EAAK,QACZruB,OAAO,SAAA3a,GAAO,OAACulG,EAAqBvlG,KACpCiQ,IAAI,SAAA2K,GAAK,OAACqnD,EAASrnD,GAAKouB,EAAK,GAAKpuB,KAEvC,IAAM6qF,EAAmBz8D,EAAK,IAAQA,EAAK,GAAK4vD,WAAa5vD,EAAK,GAAK4vD,cACjE4M,EAAqBx8D,EAAK,IAAQA,EAAK,GAAK4vD,WAAa5vD,EAAK,GAAK4vD,cACnEA,EAAaz5F,OAAOqG,OAAOggG,EAAoBC,GAE/CrO,EAAiCpuD,EAAK,GAEtCsxD,EAAYtxD,EAAK,GACjBuxC,EAAW+f,EAAUnzF,MAAMhD,QAAUm2F,EAAUnzF,MAAM,GAErDotE,EAAOgG,GAAYA,EAAShG,KAElCjyC,EAAKu/H,mBAAqBvnE,EAAUnzF,MAAM8I,IAAI,SAAAsqE,GAAY,OACtDkpB,SAAQlnE,KAAOg+C,MAEnBj4C,EAAKs/H,oBACDh8D,QAAOrpE,KACA66D,GAEPyO,OAAMtpE,KACCgmB,EACA0f,GACE22B,WAAUA,GACZ5vD,EAAK,IAEZ88D,KAAIvpE,KACGg4C,OAzFrBktF,EAAqB/wI,GAT1BqI,EAAU,YACPE,SAAU,gBACVkV,YAAa,+CACbe,UACIsuH,aAAc,IACdkE,YAAa,OAGpBloI,EAAO,eAAgB,iBAAkB,kBAAmB,mBAAoB,mBAAoB,OAC/FioI,GAAN,GAfJ,CAAU7xI,WCFAA,UAEN,oBAAAwyI,KACWA,EAAA/hK,UAAAiwB,UAAP,SAAiBogB,GACb,IAAKA,IAAUA,EAAMvsC,OAAQ,MAAO,GAEpC,OAAQusC,EAAM9O,eACV,IAAK,WACD,MAAO,UACX,IAAK,YACD,MAAO,UACX,IAAK,SACD,MAAO,cACX,IAAK,WACD,MAAO,iBACX,QACI,MAAO,KAdjBwgI,EAAc1xI,GADnBC,EAAK,WAAY,aACZyxI,GAAN,GCFMxyI,UAQN,oBAAAyyI,KAAMA,EAAsB3xI,GAP3BqI,EAAU,YACPE,SAAU,iBACVkV,YAAa,iDACbe,UACIswH,SAAU,QAGZ6C,GAAN,GCNJ,SAAUzyI,IAAS,SAAAsuI,GAEf,IAAOlmI,EAAmBpI,EAASsI,iBAAiBF,iBAC7CC,EAAcrI,EAASsI,iBAAiBD,aAQ/C,WAcI,SAAAqqI,EAAoBzzE,EAAoCoN,GAApC36F,KAAAutF,eAAoCvtF,KAAA26F,cAbjD36F,KAAAgiG,WAAY,EAKZhiG,KAAAwtG,oBAAqB,EASxBxtG,KAAKihK,mBACDzjG,MAAO,MACP0jG,gBAAiB,SAACC,GAAiB,mCACnCC,iBAAkB,yBAClBC,aAAc,SAAApkI,GACV,IAAM4E,EAAO5E,EAAM4E,KACnB,OAAK5E,EAAMuB,GACJ,uBAAyBqD,EAAO,UADjB,0BAA4BA,EAAO,YAM9Dm/H,EAAAjiK,UAAAqtC,QAAP,eAAApL,EAAAhhC,KAEIA,KAAKshK,kBAAoBthK,KAAK26F,YAAY1hE,OACrCtqB,IAAI,SAAAzP,GAAK,OAAAA,GAAKA,EAAEmvG,gBAChBh1F,OAHsB,SAAAC,GAAK,OAAAA,UAI3B4f,uBACAc,UAAU,SAAAunI,GACPvgI,EAAKqtE,cAAgBkzD,EACrBvgI,EAAKwgI,YAAcxgI,EAAKygI,WAAWzgI,EAAKqtE,eAExC,IAAMqzD,EAAe1gI,EAAKqtE,cAAcnB,MACnCw0D,IAEL1gI,EAAKqiF,aAAeq+C,EAAazwD,kBACjCjwE,EAAK2gI,aAAeD,EAAaE,mBACjC5gI,EAAK6gI,wBAAwBH,EAAatxD,wBAE1CpvE,EAAKwsE,mBACDk0D,EAAa9hI,QACsB,YAAnC8hI,EAAa9hI,OAAO/6B,YACI,IAAxB68J,EAAa9hI,QACsB,gBAAnC8hI,EAAa9hI,OAAO/6B,YACI,IAAxB68J,EAAa9hI,QACsB,YAAnC8hI,EAAa9hI,OAAO/6B,YACI,MAAxB68J,EAAa9hI,OAEjBoB,EAAK8gI,iBACDJ,EAAa3xD,cAC4B,cAAxC2xD,EAAa3xD,YAAYlrG,YAA2D,IAA7B68J,EAAa3xD,aAErE/uE,EAAK+gI,MAAQ/gI,EAAKghI,iBAAiBN,IAAe1gI,EAAK+gI,KAAKlgK,YAIrEm/J,EAAAjiK,UAAA4tC,WAAP,WACQ3sC,KAAKshK,oBACLthK,KAAKshK,kBAAkB10H,UACvB5sC,KAAKshK,kBAAoB,OAI1BN,EAAAjiK,UAAAkjK,yBAAP,SAAgCriI,GAC5B5/B,KAAKkiK,4BAA4BtiI,GACjC5/B,KAAKmiK,gCAGFnB,EAAAjiK,UAAAijK,iBAAP,SAAwBN,GACpB,OAAQA,EAAa9hI,OAAO/6B,WAAWy7B,eACnC,IAAK,IACL,IAAK,IACL,IAAK,OACL,IAAK,MACD,OAAO,EACX,QACI,OAAO,IAIZ0gI,EAAAjiK,UAAA4wG,cAAP,WACI3vG,KAAKutF,aAAaoiB,cAAc3vG,KAAKwtG,mBAAqB72E,EAAYk8D,UAAYl8D,EAAYi8D,cAG3FouE,EAAAjiK,UAAA+wG,mBAAP,WACI9vG,KAAKutF,aAAauiB,mBACd9vG,KAAK8hK,iBAAmBprI,EAAiBm8D,UAAYn8D,EAAiBk8D,cAIvEouE,EAAAjiK,UAAAyqE,MAAP,WACIxpE,KAAKutF,aAAa/jB,MAAMxpE,KAAKquG,cAAcnB,MAAM9nG,OAAQpF,KAAKquG,cAAcnB,MAAMgD,UAClFlwG,KAAKquG,cAAcnB,MAAMgD,SAAW,GACpClwG,KAAKgiG,WAAY,GAGdg/D,EAAAjiK,UAAAojK,6BAAP,WAESniK,KAAKquG,cAAcnB,MAAMk1D,+BACzBpiK,KAAKquG,cAAcnB,MAAMk1D,8BAA8Bv/J,QACvD7C,KAAKqiK,0BAIVriK,KAAKutF,aAAa4iB,0BAA0BnwG,KAAKqiK,yBAAyBjkK,QAGvE4iK,EAAAjiK,UAAAirE,OAAP,WACIhqE,KAAKutF,aAAavjB,SAClBhqE,KAAKgiG,WAAY,GAGdg/D,EAAAjiK,UAAA0C,KAAP,WAESzB,KAAKquG,eACLruG,KAAKquG,cAAcnB,OACnBltG,KAAKquG,cAAcnB,MAAMttE,QACzB5/B,KAAKsiK,4BAIVtiK,KAAKgiG,WAAY,IAGdg/D,EAAAjiK,UAAAw3C,KAAP,WACIv2C,KAAKgiG,WAAY,GAGdg/D,EAAAjiK,UAAAwjK,cAAP,SAAqB3iI,GACjB,IAAKA,IAAW5/B,KAAKsiK,0BACjB,MAAO,QAGX,OAA8B1iI,GAC1B,KAAKjJ,EAAYi8D,YACjB,KAAK,EACL,IAAK,cACD,MAAO,OACX,KAAK,EACL,KAAKj8D,EAAYk8D,UACjB,IAAK,YACL,KAAK,EACL,KAAKl8D,EAAYo8D,KACjB,IAAK,OACD,MAAO,QACX,QACI,MAAO,UAIZiuE,EAAAjiK,UAAA0uF,SAAP,SAAgBC,GACPA,IAEL1tF,KAAK+hK,KAAOr0E,EACZA,EAAQC,SAGJqzE,EAAAjiK,UAAA8iK,wBAAR,SAAgCW,GAC5B,GAAKA,EAAL,CAEA,IAAMC,EAAgBziK,KAAK0iK,6BAA6BF,GACxDxiK,KAAKkiK,4BAA4BO,KAG7BzB,EAAAjiK,UAAAmjK,4BAAR,SAAoCtiI,GAC3BA,IAEL5/B,KAAKqiK,0BACDxgI,KAAMjC,EAAOiC,KACbzjC,MAAOwhC,EAAOxhC,SAId4iK,EAAAjiK,UAAAujK,wBAAR,WACI,OAAO9/J,OAAOi9B,MAAQj9B,OAAOi9B,KAAKmB,YAAY+hI,UAG1C3B,EAAAjiK,UAAA0iK,WAAR,SAAmBpzD,GACf,IAAKA,EACD,MAAO,6BACJ,IAAKruG,KAAKsiK,0BACb,MAAO,kDAKX,OAFej0D,EAAchgB,oBAGzB,KAAK//D,EAAAsI,iBAAiBE,mBAAmBg8D,QACzC,KAAK,EACL,IAAK,UACD,MAAO,kDACX,KAAKxkE,EAAAsI,iBAAiBE,mBAAmBo6E,YACzC,KAAK,EACL,IAAK,cACD,MAAO,kDACX,KAAK5iF,EAAAsI,iBAAiBE,mBAAmBs6E,YACzC,KAAK,EACL,IAAK,cACD,MAAO,2BACX,KAAK9iF,EAAAsI,iBAAiBE,mBAAmBq6E,OACzC,KAAK,EACL,IAAK,SACD,MAAO,yBACX,QACI,MAAO,+BAIX6vD,EAAAjiK,UAAA2jK,6BAAR,SAAqCE,GACjC,OACK5iK,KAAKquG,cAAcnB,OACnBltG,KAAKquG,cAAcnB,MAAMk1D,+BACzBpiK,KAAKquG,cAAcnB,MAAMk1D,8BAA8Bv/J,OAI7C7C,KAAKquG,cAAcnB,MAAMk1D,8BAA8B/oJ,OAClE,SAAAC,GAAK,OAAAA,EAAElb,QAAUwkK,IACnB,GAJS,MA3Nb5B,EAAkC5xI,GALvCqI,EAAU,YACPE,SAAU,8BACVkV,YAAa,2EAEhB3U,EAAO,eAAgB,gBAClB8oI,GAAN,GAXe,CAAA1yI,EAAAsuI,SAAAtuI,EAAAsuI,YAAnB,CAAUtuI,WCAV,SAAUA,GAGN,IAOYu0I,EAPL3sI,EAAY5H,EAASiD,QAAQ0E,UAAUC,WAO9C,SAAY2sI,GACRA,IAAA,eACAA,IAAA,qBACAA,IAAA,mBACAA,IAAA,aAJJ,CAAYA,EAAAv0I,EAAAu0I,oBAAAv0I,EAAAu0I,wBAeZ,WAoBI,SAAAC,EACYthH,EACAuhH,EACA/nG,EACAuyB,EACAqN,GAJA56F,KAAAwhD,SACAxhD,KAAA+iK,YACA/iK,KAAAg7D,UACAh7D,KAAAutF,eACAvtF,KAAA46F,oBAjBJ56F,KAAAgjK,eAAoC,KACpChjK,KAAA87J,cACA97J,KAAA4C,MAAQ65B,KAAKC,MAiBjB18B,KAAKy/B,KAAOj9B,OAAOi9B,KACnBz/B,KAAKijK,yBACLjjK,KAAK0+J,kBAAyB1jG,EAAQ,eACtCh7D,KAAK2+J,mBAA0B3jG,EAAQ,gBACvCh7D,KAAKkjK,iBAAwBloG,EAAQ,cAGlC8nG,EAAA/jK,UAAAqtC,QAAP,eAAApL,EAAAhhC,KACIA,KAAK0+H,eAAiBpwG,EAAAwe,gBAAgBs0B,aAAay0B,kBAAkB58D,OAChEtqB,IAAI,SAAAzP,GAAK,OAAAA,GAAKA,EAAE+2F,UAAY/2F,EAAE+2F,SAASh1C,QAAU/hD,EAAE+2F,SAASh1C,SAC5D5nC,OAAO,SAAA4nC,GAAU,OAAW,OAAXA,IACjB/nB,uBACAc,UAAU,SAAAinB,GACPjgB,EAAKigB,OAASA,IAGtBjhD,KAAKmjK,uBAAyB70I,EAAAwe,gBAAgBs0B,aAAay0B,kBAAkB58D,OACxEtqB,IAAI,SAAAzP,GAAK,OAAAA,GAAKA,EAAE+2F,UAAY/2F,EAAE+2F,SAASW,SACvCv9E,OAAO,SAAAu9E,GAAU,OAAW,OAAXA,IACjB19D,uBACAc,UAAU,SAAA48D,GACP51D,EAAKoiI,gBAAkBxsE,KAI5BksE,EAAA/jK,UAAA4tC,WAAP,WACQ3sC,KAAKgjK,gBACLhjK,KAAK+iK,UAAUv8G,OAAOxmD,KAAKgjK,gBAG3BhjK,KAAK0+H,iBACL1+H,KAAK0+H,eAAe9xF,UACpB5sC,KAAK0+H,eAAiB,MAGtB1+H,KAAKmjK,yBACLnjK,KAAKmjK,uBAAuBv2H,UAC5B5sC,KAAKmjK,uBAAyB,OAI/BL,EAAA/jK,UAAA6kD,WAAP,SAAkBhW,GAMd,GALA5tC,KAAK4C,MAAQ65B,KAAKC,MAElB18B,KAAK87J,WAAaluH,EAASygE,cAAc93C,aAAaulG,WAEtD97J,KAAKqjK,kBAAoBR,EAAkBA,EAAkBS,MAExD11H,EAASygE,eACTzgE,EAASygE,cAAc93C,cACvB3oB,EAASygE,cAAc93C,aAAa22C,MAHzC,CAOA,IAAMA,EAAQt/D,EAASygE,cAAc93C,aAAa22C,MAGlD,GAFAltG,KAAKo5J,WAAap5J,KAAKkjK,iBAAiBh2D,EAAMlb,QAE1Ckb,EAAMttE,QAAuC,QAA5BstE,EAAMttE,OAAO/6B,YAAyC,IAAjBqoG,EAAMttE,OAEzD,CACH,IAAM6/H,EAAevyD,EAAMlb,OAAShyF,KAAK2+J,mBAAmBzxD,EAAMlb,OAC9DytE,GAAgBA,EAAa58J,OAAS,IACtC7C,KAAKqjK,kBAAoBR,EAAkBA,EAAkBU,SAEzDr2D,EAAMlb,OAAShyF,KAAK0+J,kBAAkBxxD,EAAMlb,OAAOnvF,SAAWqqG,EAAMlb,MAAMnvF,SAC1E7C,KAAKqjK,kBAAoBR,EAAkBA,EAAkBpzD,eAPrEzvG,KAAKqjK,kBAAoBR,EAAkBA,EAAkBW,KAYjExjK,KAAK8hK,iBAAoD,cAAjC50D,EAAM6C,YAAYlrG,YAAoD,IAAtBqoG,EAAM6C,cAG3E+yD,EAAA/jK,UAAA0kK,eAAP,WACI,OACIzjK,KAAKwhD,QACLxhD,KAAKwhD,OAAOyU,UAC0D,IAAtEj2D,KAAKwhD,OAAOyU,QAAQv4D,KAAKoF,QAAQ,iCAIlCggK,EAAA/jK,UAAA2kK,SAAP,WACI1jK,KAAKutF,aAAalkB,oBAGfy5F,EAAA/jK,UAAA4kK,iBAAP,WACI3jK,KAAKutF,aAAa8iB,iCAGdyyD,EAAA/jK,UAAA6kK,kBAAR,WACI,IAAMC,GAAcpnI,KAAKC,MAAQ18B,KAAK4C,OAAS,IAE3C5C,KAAKquG,eAAiBruG,KAAKquG,cAAcnB,QACrCltG,KAAKquG,cAAcnB,MAAMlb,OACzBhyF,KAAKquG,cAAcnB,MAAMlb,MAAMj+E,QAAQ,SAAAzW,GACJ,YAA3BA,EAAKsiC,OAAO/6B,YAA4C,IAAhBvH,EAAKsiC,SAActiC,EAAKkpI,aAAeq9B,GAGpD,gBAA3BvmK,EAAKsiC,OAAO/6B,YACI,IAAhBvH,EAAKsiC,QACsB,WAA3BtiC,EAAKsiC,OAAO/6B,YACI,IAAhBvH,EAAKsiC,SAELtiC,EAAK8kF,UAAYyhF,MAKxB7jK,KAAKquG,cAAcnB,MAAMttE,QAAyD,QAA/C5/B,KAAKquG,cAAcnB,MAAMttE,OAAO/6B,YAChC,IAApC7E,KAAKquG,cAAcnB,MAAMttE,UAEzB5/B,KAAKquG,cAAcnB,MAAM42D,mBAAqBD,IAEtD7jK,KAAK4C,MAAQ65B,KAAKC,OAGdomI,EAAA/jK,UAAAkkK,uBAAR,eAAAjiI,EAAAhhC,KACIA,KAAKgjK,eAAiBhjK,KAAK+iK,UAAU,WACjC/hI,EAAK4iI,qBACN,MAGAd,EAAA/jK,UAAAuwG,SAAP,SAAgBhyG,GACPA,GAEL0C,KAAKutF,aAAa+hB,SAAShyG,IAGxBwlK,EAAA/jK,UAAAmwG,YAAP,SAAmB5xG,GAAnB,IAAA0jC,EAAAhhC,KACS1C,IAAQ0C,KAAK+jK,YAElB/jK,KAAK+jK,WAAY,EAEjB/jK,KAAKutF,aAAa2hB,YAAY5xG,GAE9BsE,WAAW,WACPo/B,EAAK+iI,WAAY,GAClB,OAGAjB,EAAA/jK,UAAAqwG,YAAP,SAAmB9xG,GACVA,GAEL0C,KAAKutF,aAAa6hB,YAAY9xG,IAG3BwlK,EAAA/jK,UAAA6oC,OAAP,SAActqC,GACLA,GAEL0C,KAAKutF,aAAa3lD,OAAOtqC,IAGtBwlK,EAAA/jK,UAAA62C,KAAP,SAAYt4C,EAAsBi1F,GACzBj1F,GAASi1F,GAEdvyF,KAAKutF,aAAa+iB,eAAehzG,EAAMi1F,IAGpCuwE,EAAA/jK,UAAAilK,OAAP,SAAc1mK,GACLA,GAASA,EAAKgxG,eAEnBtuG,KAAKutF,aAAaijB,iBAAiBlzG,IAGhCwlK,EAAA/jK,UAAAklK,WAAP,SAAkB3mK,GACTA,IAEL0C,KAAKo5J,WAAa97J,IAGfwlK,EAAA/jK,UAAAmlK,mBAAP,SAA0B5mK,GACtB,OAAOA,GAAQ0C,KAAKmkK,aAAa7mK,EAAKgxG,gBAGnCw0D,EAAA/jK,UAAAolK,aAAP,SAAoB5xE,GAChB,OAAOA,GAAUvyF,KAAK87J,YAAc97J,KAAK87J,WAAWvpE,EAAO1tF,aAGxDi+J,EAAA/jK,UAAAqlK,yBAAP,SAAgC9mK,EAAsB2jD,EAAqBsxC,GAA3E,IAAAvxD,EAAAhhC,KACI,GAAKihD,GAAW3jD,GAASi1F,IAErBvyF,KAAKqkK,sBAAsB/mK,EAAM2jD,GAArC,CAMA,IAJA,IACM6jE,EAA2Bz3F,KAAKiQ,MAAMjQ,KAAKC,UAAU2zB,IACrDitC,EAAe42B,GAAeA,EAAYt6C,gBAAkBs6C,EAAYt6C,eAAe0jB,aAEpF/wF,EAAI,EAAGA,EAAI+wF,EAAarrF,OAAQ1F,IACrC,GAAI+wF,EAAa/wF,GAAGiI,OAAOvC,QAAU,EAAG,CACpCqrF,EAAa/wF,GAAKmnK,EACdp2E,EAAa/wF,GACbG,EAAK8H,OACLjI,EACA+4B,EAAU6rC,UAEG,EACjB,MAIR/hE,KAAK46F,kBAAkBnmF,OAAOqwG,GAAavgF,KAAK,WAAM,OAAAvD,EAAK4U,KAAKt4C,EAAMi1F,KAEtE,SAAS+xE,EACLC,EACAC,EACAliI,EACAhgC,GAEA,OAAA24B,KACOspI,GACHn/J,OAAQo/J,EACRvtE,SAAUutE,EACVj+H,YAAa,YAAYjE,EACzBhgC,KAAMA,MAKXwgK,EAAA/jK,UAAA0lK,mBAAP,SAA0BnnK,EAAsB2jD,GAC5C,QAASz+C,OAAOi9B,KAAKmB,YAAY2jF,4BAA8BvkH,KAAKqkK,sBAAsB/mK,EAAM2jD,IAAWjhD,KAAK0kK,gCAAkC1kK,KAAK2kK,oCAGnJ7B,EAAA/jK,UAAA2lK,6BAAR,WACI,IAAM7gD,EAA0B7jH,KAAKojK,iBACjCpjK,KAAKojK,gBAAgBxsE,UACnB52F,KAAKojK,gBAAgBxsE,OAAOtzF,KAAK,SAACgW,GAAW,MAAM,gBAANA,IAC7CsrJ,EAAmB5kK,KAAKihD,OAAOupB,eAAe0jB,aAAa70E,OAAO,SAAAC,GAAK,OAAAA,EAAElU,SAAQvC,OAEvF,OAAOghH,GAA2B+gD,EAAmB,GAGjD9B,EAAA/jK,UAAA4lK,iCAAR,WACI,GAAI3kK,KAAKojK,gBAAgB//C,aAAawhD,8BAA+B,OAAO,EAE5E,IAAMC,IAA+B9kK,KAAKihD,OAAOupB,eAAe0jB,aAAa5qF,KAAK,SAAAgW,GAAK,OAAAA,EAAEhX,OAAS4zB,EAAU6rC,SAAWzoD,EAAElU,OAAOvC,OAAS,IAEzI,OAAQ7C,KAAKojK,gBAAgB//C,aAAac,kBAAkBrhH,QAAQozB,EAAU6rC,QAAQl9D,aAAe,IAAO7E,KAAKojK,gBAAgB//C,aAAaC,iCAAmCwhD,IAG7KhC,EAAA/jK,UAAAslK,sBAAR,SAA8B/mK,EAAsB2jD,GAChD,KAAKA,GAAW3jD,GAAS2jD,EAAOupB,gBAAmBvpB,EAAOupB,eAAe0jB,cAAc,OAAO,EAE9F,IAAM62E,EAAkD/kK,KAAKg7D,QAAQ,WACrE,QAAS/Z,EAAOupB,eAAe0jB,aAAa5qF,KAAK,SAAAgW,GAAK,OAAAyrJ,EAAczrJ,EAAElU,UAAY2/J,EAAcznK,EAAK8H,WA9QvG09J,EAAsB1zI,GAR3BqI,EAAU,YACPE,SAAU,iBACVkV,YAAa,iDACbe,UACIygE,cAAe,OAGtBn2E,EAAO,SAAU,YAAa,UAAW,eAAgB,kCACpD4qI,GAAN,GAzBJ,CAAUx0I,WCAV,SAAUA,IAKN,oBAAA02I,KAGWA,EAAAjmK,UAAAqtC,QAAP,WACIpsC,KAAKilK,OAAS32I,EAAAoR,SACTsiC,MAAM,SAAA1oD,GAAK,OAAY,MAAZA,EAAEyhB,SACbpsB,IAAI,SAAA2K,GAAK,OAAAA,EAAEyhB,OAAOmqI,kBAClBx9B,UAAU,KAPjBs9B,EAAqB51I,GAJ1BqI,EAAU,YACPE,SAAU,eACVkV,YAAa,gDAEXm4H,GAAN,GALJ,CAAU12I,WCFV,SAAUA,GACN,IAAO4f,EAAmB5f,EAAS4f,kBAMnC,oBAAAi3H,KACWA,EAAApmK,UAAA4tJ,aAAP,WACI,SAAUnqJ,OAAOyiC,SAAUziC,OAAOyiC,OAAOE,YAGtCggI,EAAApmK,UAAA6tJ,iBAAP,WACI1+G,KAGGi3H,EAAApmK,UAAA0sJ,mBAAP,WACSn9H,EAAA2f,wBACGzrC,OAAOyiC,OAAOG,UAAY5iC,OAAOyiC,OAAOC,UAAY1iC,OAAOyiC,OAAOE,aAClE7W,EAAA8f,gBAAgBlU,OAAO,MACvB5L,EAAAo9H,sBAAsBxxH,OAAO,YAbvCirI,EAAe/1I,GAJpBqI,EAAU,YACPE,SAAU,UACVkV,YAAa,sCAEXs4H,GAAN,GAPJ,CAAU72I,WCIV,SAAUA,GAEN,IAAO0I,EAAyB1I,EAASsI,iBAAiBG,WAAWC,wBAOrE,WAWI,SAAAouI,EAAoBjvF,EAAsCwkB,GAAtC36F,KAAAm2E,WAAsCn2E,KAAA26F,cAJlD36F,KAAAS,QAA6B,KAC7BT,KAAA4C,MAAQ65B,KAAKC,MAKd0oI,EAAArmK,UAAAqtC,QAAP,eAAApL,EAAAhhC,KAEIA,KAAK8+J,cAAgB9+J,KAAK26F,YAAY1hE,OACjCtqB,IAAI,SAAA2K,GAAK,OAAAA,GAAKA,EAAE+0F,gBAChBh1F,OAHsB,SAAAC,GAAK,OAAAA,UAI3B4f,uBACAc,UAAU,SAAA1gB,GACP0nB,EAAKqkI,oBAAsB/rJ,EAAE20F,WAC7BjtE,EAAKqtE,cAAgB/0F,IAG7BtZ,KAAKslK,mBACD9iK,OAAOu4B,QACPv4B,OAAOu4B,OAAO+zD,QACdtsF,OAAOu4B,OAAO+zD,OAAOye,WACrB/qG,OAAOu4B,OAAO+zD,OAAOye,UAAU,IAC/B/qG,OAAOu4B,OAAO+zD,OAAOye,UAAU,GAAG9b,UAEtCzxF,KAAKulK,sBAGFH,EAAArmK,UAAA4tC,WAAP,WACI3sC,KAAKm2E,SAAS3vB,OAAOxmD,KAAKS,SAEtBT,KAAK8+J,gBACL9+J,KAAK8+J,cAAclyH,UACnB5sC,KAAK8+J,cAAgB,OAItBsG,EAAArmK,UAAA+oI,0BAAP,WACI,OACI9nI,KAAKqlK,oBAAoBG,oBAAoB3gK,aACzCmyB,EAAuBA,EAAuByuI,oBAClDzlK,KAAKqlK,oBAAoBG,oBAAoB3gK,aACzCmyB,EAAuByuI,kBAAkB5gK,YAI9CugK,EAAArmK,UAAAgpI,kBAAP,WACI,OACI/nI,KAAKqlK,oBAAoBG,oBAAoB3gK,aACzCmyB,EAAuBA,EAAuB0uI,WAClD1lK,KAAKqlK,oBAAoBG,oBAAoB3gK,aAAemyB,EAAuB0uI,SAAS7gK,YAI7FugK,EAAArmK,UAAAkpI,wBAAP,WACI,OACKjoI,KAAKkoI,mBACNloI,KAAKqlK,oBAAoBM,UAAY3lK,KAAKqlK,oBAAoBO,+BAI/DR,EAAArmK,UAAAmpI,gBAAP,WACI,OAAOloI,KAAKqlK,oBAAoBM,UAAY3lK,KAAKqlK,oBAAoBQ,sBAGjET,EAAArmK,UAAA+mK,mBAAR,WACI,IAAMjC,GAAcpnI,KAAKC,MAAQ18B,KAAK4C,OAAS,IAG3C5C,KAAKqlK,qBACLrlK,KAAKqlK,oBAAoBU,aACzB/lK,KAAKqlK,oBAAoBU,YAAc,IAEvC/lK,KAAKqlK,oBAAoBM,WAAa9B,GAE1C7jK,KAAK4C,MAAQ65B,KAAKC,OAGd0oI,EAAArmK,UAAAwmK,mBAAR,eAAAvkI,EAAAhhC,KACIA,KAAKS,QAAUT,KAAKm2E,SAChB,WACIn1C,EAAK8kI,qBACL9kI,EAAKukI,sBAET,KACA,IA3FNH,EAAqBh2I,GAL1BqI,EAAU,YACPE,SAAU,iBACVkV,YAAa,iDAEhB3U,EAAO,WAAY,gBACdktI,GAAN,GATJ,CAAU92I,WCJV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAW,IAEvB,oBAAA8zI,KACWA,EAAAjnK,UAAAiwB,UAAP,SAAiBi3I,GACb,OAAQA,GACJ,KAAK/zI,EAAAI,UAAUugE,UACf,IAAK,YACL,KAAK,EACD,MAAO,QACX,KAAK3gE,EAAAI,UAAUsgE,YACf,IAAK,cACL,KAAK,EACD,MAAO,MACX,KAAK1gE,EAAAI,UAAUygE,KACf,IAAK,OACL,KAAK,EACD,MAAO,MACX,KAAK7gE,EAAAI,UAAUwgE,QACf,IAAK,UACL,KAAK,EACD,MAAO,GAEX,IAAK,OACL,KAAK,EACD,MAAO,SAEX,IAAK,UACL,KAAK,EACD,MAAO,GAEX,IAAK,MACL,KAAK,EACD,MAAO,MAEX,IAAK,MACL,KAAK,EACD,MAAO,MACX,QACI,MAAO,iBApCjBkzE,EAAmB52I,GADxBC,EAAK,aAAc,kBACd22I,GAAN,GAFuB,CAAAz0I,EAAAW,aAAAX,EAAAW,gBAAR,CAAA5D,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAW,IAEvB,oBAAAg0I,KACWA,EAAAnnK,UAAAiwB,UAAP,SAAiBi3I,GACb,OAAQA,GACJ,KAAK/zI,EAAAI,UAAUugE,UACf,IAAK,YACL,KAAK,EACD,MAAO,eACX,KAAK3gE,EAAAI,UAAUsgE,YACf,IAAK,cACL,KAAK,EACD,MAAO,gBACX,KAAK1gE,EAAAI,UAAUygE,KACf,IAAK,OACL,KAAK,EACD,MAAO,eACX,KAAK7gE,EAAAI,UAAUwgE,QACf,IAAK,UACL,KAAK,EACD,MAAO,yBAEX,IAAK,OACL,KAAK,EACD,MAAO,WAEX,IAAK,UACL,KAAK,EACD,MAAO,eAEX,IAAK,MACL,KAAK,EACD,MAAO,WAEX,IAAK,MACL,KAAK,EACD,MAAO,gBACX,QACI,MAAO,iBApCjBozE,EAAkB92I,GADvBC,EAAK,aAAc,iBACd62I,GAAN,GAFuB,CAAA30I,EAAAW,aAAAX,EAAAW,gBAAR,CAAA5D,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAV,SAAUA,IAAS,SAAAiD,IAAQ,SAAAW,IAEvB,oBAAAi0I,KACWA,EAAApnK,UAAAiwB,UAAP,SAAiBi3I,GACb,OAAQA,GACJ,KAAK/zI,EAAAI,UAAUugE,UACf,IAAK,YACL,KAAK,EACD,MAAO,gBACX,KAAK3gE,EAAAI,UAAUsgE,YACf,IAAK,cACL,KAAK,EACD,MAAO,eACX,KAAK1gE,EAAAI,UAAUygE,KACf,IAAK,OACL,KAAK,EACD,MAAO,eACX,QACI,MAAO,UAhBjBozE,EAAuB/2I,GAD5BC,EAAK,aAAc,sBACd82I,GAAN,GAFuB,CAAA50I,EAAAW,aAAAX,EAAAW,gBAAR,CAAA5D,EAAAiD,UAAAjD,EAAAiD,aAAnB,CAAUjD,WCAAA,UAYN,oBAAA83I,KAAMA,EAAwBh3I,GAX7BqI,EAAU,YACPE,SAAU,oBACVkV,YAAa,qDACbe,UACI/tC,MAAO,IACP+qG,SAAU,IACVnzF,MAAO,IACPyuB,MAAO,IACPmgI,OAAQ,QAGVD,GAAN,GCZM93I,UACNC,QAAQrxB,OAAO,YAAYmC,QAAQ,qBAC/B,YACA,SAAAovB,GACI,OAAAA,EACI,oCAGI4V,SACI3V,OAAQ,MACR1gB,SAAS,EACT2gB,QAAU6P,GAAI,QAElBuwC,QACIrgD,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIxQ,GAAI,KAE9B+5G,cACI7pH,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUxQ,GAAI,KAEpC77B,QACI+rB,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,SAAUxQ,GAAI,QAEpC6pE,MACI35E,OAAQ,OACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIxQ,GAAI,KAE9B/pB,QACIia,OAAQ,MACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIxQ,GAAI,KAE9B2J,QACIzZ,OAAQ,SACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,GAAIxQ,GAAI,QAE9Bi6G,aACI/pH,OAAQ,OACR1gB,SAAS,EACT2gB,QAAUqgB,OAAQ,cAAexQ,GAAI,UC5C7D,SAAUlQ,IAYN,WAUI,SAAAg4I,EACY9iI,EACA+iI,EACAC,EACAluB,EACA/qD,EACA3Y,GALA50E,KAAAwjC,YACAxjC,KAAAumK,sBACAvmK,KAAAwmK,oBACAxmK,KAAAs4I,oBACAt4I,KAAAutF,eACAvtF,KAAA40E,iBAXL50E,KAAAo6H,cAAe,EACfp6H,KAAAymK,uBAAwB,EACxBzmK,KAAA0mK,mBAA4B,KAY5BJ,EAAAvnK,UAAAqtC,QAAP,eAAApL,EAAAhhC,KACIA,KAAK2mK,iBACL3mK,KAAK4mK,iBACL5mK,KAAK6mK,yBACL7mK,KAAK8wH,aAAexiG,EAAAoR,SACfjU,UAAU,SAAAnS,GAAK,OAACA,EAAEmmB,OAClB9wB,IAAI,SAAA2K,GAAK,OAAAA,EAAEmmB,OACXzF,UAAU,SAAAyF,GACPuB,EAAKvB,KAAOA,EACZuB,EAAKsgG,SAAWtgG,EAAKulI,oBAAoBjlC,SAAS7hG,EAAKu3E,cAAe,GAAI,OAI/EsvD,EAAAvnK,UAAA4tC,WAAP,WACI3sC,KAAK8wH,aAAalkF,WAEf05H,EAAAvnK,UAAA8nK,uBAAP,eAAA7lI,EAAAhhC,KACIA,KAAK40E,eAAe52E,KAAKs7I,QAAS,cAC7Bh1G,SAASC,KAAK,SAAAnzB,GAAO,OAAC4vB,EAAK0lI,mBAAqBt1J,EAAIs1J,sBAGtDJ,EAAAvnK,UAAA+nK,2BAAP,WACI,OAAOtkK,OAAOu4B,QAAUv4B,OAAOu4B,OAAO+zD,OAAOye,WAAa/qG,OAAOu4B,OAAO+zD,OAAOye,UAAU1qG,OAAS,GAG/FyjK,EAAAvnK,UAAA6nK,eAAP,eAAA5lI,EAAAhhC,KACSwC,OAAOi9B,KAAKmB,YAAYmmI,eAE7B/mK,KAAKwmK,kBACAjuB,cAAe9wG,KAAM,EAAGpC,SAAU,MAClCf,SAASC,KAAK,SAAAmD,GAAQ,OAAC1G,EAAKgmI,WAAat/H,KAG3C4+H,EAAAvnK,UAAA4nK,eAAP,eAAA3lI,EAAAhhC,KACSA,KAAK8mK,8BAAiCtkK,OAAOi9B,KAAKmB,YAAYqmI,eAEnEjnK,KAAKs4I,kBAAkBC,eAAej0G,SAASC,KAAK,SAACmD,GACjD1G,EAAKw3G,WAAa9wG,KAInB4+H,EAAAvnK,UAAA6uF,OAAP,SAAc36C,GACVjzC,KAAKutF,aAAaK,OAAO36C,GACzBjzC,KAAKw6H,eAGF8rC,EAAAvnK,UAAA8vG,aAAP,SAAoB57D,GAChBjzC,KAAKutF,aAAashB,aAAa57D,GAC/BjzC,KAAKw6H,eAGF8rC,EAAAvnK,UAAAy7H,YAAP,WACIx6H,KAAKo6H,cAAgBp6H,KAAKo6H,cAGvBksC,EAAAvnK,UAAAmoK,qBAAP,WACIlnK,KAAKymK,uBAAyBzmK,KAAKymK,uBAGhCH,EAAAvnK,UAAAooK,sBAAP,WACI,OAAOnnK,KAAKonK,cAAc,gBAGvBd,EAAAvnK,UAAAsoK,kBAAP,WACI,OAAOrnK,KAAKonK,cAAc,gBAGvBd,EAAAvnK,UAAAuoK,oBAAP,WACI,OAAOtnK,KAAKonK,cAAc,iBAGvBd,EAAAvnK,UAAAwoK,cAAP,WACI,OAAOvnK,KAAKonK,cAAc,WAGvBd,EAAAvnK,UAAAyoK,kBAAP,WACI,OAAOxnK,KAAKonK,cAAc,eAGvBd,EAAAvnK,UAAA0oK,cAAP,WACI,OAAOznK,KAAKonK,cAAc,YAGvBd,EAAAvnK,UAAAwuJ,sBAAP,WACI,QAAS/qJ,OAAOgrJ,gBAGb8Y,EAAAvnK,UAAA0uJ,YAAP,WACIjrJ,OAAOgrJ,eAAeE,SAEtBlrJ,OAAOgrJ,eAAeG,WAAWppH,KAAK,SAAAqpH,GAClCprJ,OAAOgrJ,eAAiB,QAIzB8Y,EAAAvnK,UAAAirE,OAAP,WACI3tC,SAAS+pG,KAAO93G,EAAAY,OAAOC,mBAAmB,YAGtCm3I,EAAAvnK,UAAAqoK,cAAR,SAAsBhrI,GAClB,OAAiD,IAA1Cp8B,KAAKwjC,UAAUhG,OAAO16B,QAAQs5B,IAvHvCkqI,EAAmBl3I,GALxBqI,EAAU,YACPE,SAAU,cACVkV,YAAa,6CAEhB3U,EAAO,YAAa,sBAAuB,oBAAqB,oBAAqB,eAAgB,mBAChGouI,GAAN,GAZJ,CAAUh4I,WpGFV,SAAUA,GACN,IAAOsT,EAAkBtT,EAAS4S,QAAQU,gBAU1C8lI,EAAA,WAGI,SAAAA,EAAoBplE,GAApB,IAAAthE,EAAAhhC,KAAoBA,KAAAsiG,QAEbtiG,KAAA4hC,gBAAkB,SAACC,GACtB,OAAAD,EAAgBC,EAAM,WAAM,OAAAb,EAAKshE,MAAMjrD,KAAK,6BACpD,OAPaqwH,EAAat4I,GARzBqI,EAAU,YACPE,SAAU,iBACVkV,YAAa,6CACbe,UACI0L,aAAc,OAGrBphB,EAAO,wBACKwvI,GAAb,GAAap5I,EAAAo5I,cAAaA,EAX9B,CAAUp5I,gEqGAV,sBAAAiO,EAAAorI,QACA,UAAA5nK,MACA,wGAIA,IAAA4nK,EAAAprI,EAAAorI,QAEA,SAAAC,EAAAn/G,EAAA9Y,GACA,kBAEAA,EAAAr8B,MAAAm1C,EAAAlsB,EAAAsrI,UAAAlkK,aAIA,SAAAmkK,EAAAC,EAAAC,GACA,IAAAtpK,EAAA+pD,EAAAw/G,EAAAC,EAEA,IAAAxpK,KAAAqpK,EACA,GAAAA,EAAA/oK,eAAAN,GAAA,CAGA,KAFA+pD,EAAAs/G,EAAArpK,IAEAypK,QAEA,SAIA,IAAAF,KAAAx/G,EAAAqB,OACA,GAAArB,EAAAqB,OAAA9qD,eAAAipK,GAAA,CAGA,GAFAC,EAAAz/G,EAAAqB,OAAAm+G,IAEA1rI,EAAA78B,WAAAwoK,GAEA,SAEAF,EACAv/G,EAAAzS,GAAA14C,KAAAmrD,EAAAw/G,EAAAL,EAAAn/G,EAAAy/G,IAEAz/G,EAAAguE,IAAAn5H,KAAAmrD,EAAAw/G,EAAA,QAQA1rI,EAAA6rI,cAAArpK,UAAAspK,iBAAA,WACA,IAAAC,KAmWA,OAlWAtoK,KAAAuoK,SAAA,WAGAT,EAAAQ,GAAA,GAEAtoK,KAAAwoK,4BACKv/G,aAAA,WAGL6+G,EAAAQ,GAAA,KAGAA,EAAA,YAAAtoK,KAAAyoK,eAAA,eACAH,EAAA,YAAAx+G,UACAw+G,EAAA,YAAAnsE,QACAniE,UAAA,SAAAwE,GACA,OAAA8pI,EAAA,YAAAI,OAAAp1J,MACAg1J,EAAA,YACA/rI,EAAA/mB,OAAA,aAAA+mB,EAAAsrI,UAAAlkK,cAGAu4F,YAAA,SAAA19D,GACA,OAAA8pI,EAAA,YAAAI,OAAAp1J,MACAg1J,EAAA,YACA/rI,EAAA/mB,OAAA,eAAA+mB,EAAAsrI,UAAAlkK,eAKA2kK,EAAA,aAAAtoK,KAAAyoK,eAAA,gBACAH,EAAA,aAAAx+G,UACAw+G,EAAA,aAAAnsE,QACA47C,WAAA,WACA,OAAAuwB,EAAA,aAAAI,OAAAp1J,MACAg1J,EAAA,aACA/rI,EAAA/mB,OAAA,cAAA+mB,EAAAsrI,UAAAlkK,cAIAq0I,aAAA,WACA,OAAAswB,EAAA,aAAAI,OAAAp1J,MACAg1J,EAAA,aACA/rI,EAAA/mB,OAAA,gBAAA+mB,EAAAsrI,UAAAlkK,cAIAglK,eAAA,SAAA15D,GACA,OAAAq5D,EAAA,aAAAI,OAAAp1J,MACAg1J,EAAA,aACA/rI,EAAA/mB,OAAA,kBAAA+mB,EAAAsrI,UAAAlkK,cAIAkmE,SAAA,WACA,OAAAy+F,EAAA,aAAAI,OAAAp1J,MACAg1J,EAAA,aACA/rI,EAAA/mB,OAAA,YAAA+mB,EAAAsrI,UAAAlkK,eAKA2kK,EAAA,gBAAAtoK,KAAAyoK,eAAA,mBACAH,EAAA,gBAAAx+G,UACAw+G,EAAA,gBAAAnsE,UAEAmsE,EAAA,QAAAtoK,KAAAyoK,eAAA,WACAH,EAAA,QAAAx+G,UACAw+G,EAAA,QAAAnsE,QACAniE,UAAA,SAAAwE,GACA,OAAA8pI,EAAA,QAAAI,OAAAp1J,MACAg1J,EAAA,QACA/rI,EAAA/mB,OAAA,aAAA+mB,EAAAsrI,UAAAlkK,cAGAu4F,YAAA,SAAA19D,GACA,OAAA8pI,EAAA,QAAAI,OAAAp1J,MACAg1J,EAAA,QACA/rI,EAAA/mB,OAAA,eAAA+mB,EAAAsrI,UAAAlkK,eAKA2kK,EAAA,YAAAtoK,KAAAyoK,eAAA,eACAH,EAAA,YAAAx+G,UACAw+G,EAAA,YAAAnsE,UAEAmsE,EAAA,YAAAtoK,KAAAyoK,eAAA,eACAH,EAAA,YAAAx+G,UACAw+G,EAAA,YAAAnsE,QACAniE,UAAA,SAAAwE,GACA,OAAA8pI,EAAA,YAAAI,OAAAp1J,MACAg1J,EAAA,YACA/rI,EAAA/mB,OAAA,aAAA+mB,EAAAsrI,UAAAlkK,cAGAu4F,YAAA,SAAA19D,GACA,OAAA8pI,EAAA,YAAAI,OAAAp1J,MACAg1J,EAAA,YACA/rI,EAAA/mB,OAAA,eAAA+mB,EAAAsrI,UAAAlkK,eAKA2kK,EAAA,UAAAtoK,KAAAyoK,eAAA,aACAH,EAAA,UAAAx+G,UACAw+G,EAAA,UAAAnsE,QACAC,eAAA,SAAA59D,GACA,OAAA8pI,EAAA,UAAAI,OAAAp1J,MACAg1J,EAAA,UACA/rI,EAAA/mB,OAAA,kBAAA+mB,EAAAsrI,UAAAlkK,cAGAq2B,UAAA,SAAAwE,GACA,OAAA8pI,EAAA,UAAAI,OAAAp1J,MACAg1J,EAAA,UACA/rI,EAAA/mB,OAAA,aAAA+mB,EAAAsrI,UAAAlkK,cAGAu4F,YAAA,SAAA19D,GACA,OAAA8pI,EAAA,UAAAI,OAAAp1J,MACAg1J,EAAA,UACA/rI,EAAA/mB,OAAA,eAAA+mB,EAAAsrI,UAAAlkK,eAKA2kK,EAAA,SAAAtoK,KAAAyoK,eAAA,YACAH,EAAA,SAAAx+G,UACAw+G,EAAA,SAAAnsE,QACAyS,KAAA,SAAAxpG,GACA,OAAAkjK,EAAA,SAAAI,OAAAp1J,MAAAg1J,EAAA,SAAA/rI,EAAA/mB,OAAA,QAAA+mB,EAAAsrI,UAAAlkK,cAGA0lE,iBAAA,WACA,OAAAi/F,EAAA,SAAAI,OAAAp1J,MACAg1J,EAAA,SACA/rI,EAAA/mB,OAAA,oBAAA+mB,EAAAsrI,UAAAlkK,cAIA0sG,8BAAA,WACA,OAAAi4D,EAAA,SAAAI,OAAAp1J,MACAg1J,EAAA,SACA/rI,EAAA/mB,OAAA,iCAAA+mB,EAAAsrI,UAAAlkK,cAIAssG,WAAA,WACA,OAAAq4D,EAAA,SAAAI,OAAAp1J,MACAg1J,EAAA,SACA/rI,EAAA/mB,OAAA,cAAA+mB,EAAAsrI,UAAAlkK,cAIA0rG,YAAA,SAAAN,GACA,OAAAu5D,EAAA,SAAAI,OAAAp1J,MACAg1J,EAAA,SACA/rI,EAAA/mB,OAAA,eAAA+mB,EAAAsrI,UAAAlkK,cAIA6rG,SAAA,SAAAT,GACA,OAAAu5D,EAAA,SAAAI,OAAAp1J,MAAAg1J,EAAA,SAAA/rI,EAAA/mB,OAAA,YAAA+mB,EAAAsrI,UAAAlkK,cAGAqsG,WAAA,WACA,OAAAs4D,EAAA,SAAAI,OAAAp1J,MACAg1J,EAAA,SACA/rI,EAAA/mB,OAAA,cAAA+mB,EAAAsrI,UAAAlkK,cAIA6lE,MAAA,SAAApkE,EAAA8qG,GACA,OAAAo4D,EAAA,SAAAI,OAAAp1J,MAAAg1J,EAAA,SAAA/rI,EAAA/mB,OAAA,SAAA+mB,EAAAsrI,UAAAlkK,cAGAqmE,OAAA,WACA,OAAAs+F,EAAA,SAAAI,OAAAp1J,MAAAg1J,EAAA,SAAA/rI,EAAA/mB,OAAA,UAAA+mB,EAAAsrI,UAAAlkK,cAGAqrG,wBAAA,SAAAC,GACA,OAAAq5D,EAAA,SAAAI,OAAAp1J,MACAg1J,EAAA,SACA/rI,EAAA/mB,OAAA,2BAAA+mB,EAAAsrI,UAAAlkK,cAIAksG,SAAA,WACA,OAAAy4D,EAAA,SAAAI,OAAAp1J,MAAAg1J,EAAA,SAAA/rI,EAAA/mB,OAAA,YAAA+mB,EAAAsrI,UAAAlkK,cAGAikC,OAAA,SAAAmnE,GACA,OAAAu5D,EAAA,SAAAI,OAAAp1J,MAAAg1J,EAAA,SAAA/rI,EAAA/mB,OAAA,UAAA+mB,EAAAsrI,UAAAlkK,cAGAisG,MAAA,WACA,OAAA04D,EAAA,SAAAI,OAAAp1J,MAAAg1J,EAAA,SAAA/rI,EAAA/mB,OAAA,SAAA+mB,EAAAsrI,UAAAlkK,cAGAwrG,YAAA,SAAAJ,GACA,OAAAu5D,EAAA,SAAAI,OAAAp1J,MACAg1J,EAAA,SACA/rI,EAAA/mB,OAAA,eAAA+mB,EAAAsrI,UAAAlkK,cAIAuqG,sBAAA,WACA,OAAAo6D,EAAA,SAAAI,OAAAp1J,MACAg1J,EAAA,SACA/rI,EAAA/mB,OAAA,yBAAA+mB,EAAAsrI,UAAAlkK,cAIA+rG,WAAA,SAAAX,GACA,OAAAu5D,EAAA,SAAAI,OAAAp1J,MACAg1J,EAAA,SACA/rI,EAAA/mB,OAAA,cAAA+mB,EAAAsrI,UAAAlkK,cAIAwsG,0BAAA,SAAAC,GACA,OAAAk4D,EAAA,SAAAI,OAAAp1J,MACAg1J,EAAA,SACA/rI,EAAA/mB,OAAA,6BAAA+mB,EAAAsrI,UAAAlkK,cAIA2sG,eAAA,SAAAC,EAAAhe,GACA,OAAA+1E,EAAA,SAAAI,OAAAp1J,MACAg1J,EAAA,SACA/rI,EAAA/mB,OAAA,kBAAA+mB,EAAAsrI,UAAAlkK,cAIAmrG,eAAA,SAAA1pG,EAAA2pG,GACA,OAAAu5D,EAAA,SAAAI,OAAAp1J,MACAg1J,EAAA,SACA/rI,EAAA/mB,OAAA,kBAAA+mB,EAAAsrI,UAAAlkK,cAIA6sG,iBAAA,SAAAD,GACA,OAAA+3D,EAAA,SAAAI,OAAAp1J,MACAg1J,EAAA,SACA/rI,EAAA/mB,OAAA,oBAAA+mB,EAAAsrI,UAAAlkK,eAKA2kK,EAAA,YAAAtoK,KAAAyoK,eAAA,eACAH,EAAA,YAAAx+G,UACAw+G,EAAA,YAAAnsE,UAEAmsE,EAAA,SAAAtoK,KAAAyoK,eAAA,YACAH,EAAA,SAAAx+G,UACAw+G,EAAA,SAAAnsE,QACAysE,SAAA,SAAAlnD,GACA,OAAA4mD,EAAA,SAAAI,OAAAp1J,MAAAg1J,EAAA,SAAA/rI,EAAA/mB,OAAA,YAAA+mB,EAAAsrI,UAAAlkK,cAGAklK,QAAA,SAAAnnD,GACA,OAAA4mD,EAAA,SAAAI,OAAAp1J,MAAAg1J,EAAA,SAAA/rI,EAAA/mB,OAAA,WAAA+mB,EAAAsrI,UAAAlkK,cAGA6lE,MAAA,SAAAs/F,GACA,OAAAR,EAAA,SAAAI,OAAAp1J,MAAAg1J,EAAA,SAAA/rI,EAAA/mB,OAAA,SAAA+mB,EAAAsrI,UAAAlkK,cAGAolK,sBAAA,SAAAD,GACA,OAAAR,EAAA,SAAAI,OAAAp1J,MACAg1J,EAAA,SACA/rI,EAAA/mB,OAAA,yBAAA+mB,EAAAsrI,UAAAlkK,eAKA2kK,EAAA,QAAAtoK,KAAAyoK,eAAA,WACAH,EAAA,QAAAx+G,UACAw+G,EAAA,QAAAnsE,UAEAmsE,EAAA,gBAAAtoK,KAAAyoK,eAAA,mBACAH,EAAA,gBAAAx+G,UACAw+G,EAAA,gBAAAnsE,QACAniE,UAAA,SAAAwE,GACA,OAAA8pI,EAAA,gBAAAI,OAAAp1J,MACAg1J,EAAA,gBACA/rI,EAAA/mB,OAAA,aAAA+mB,EAAAsrI,UAAAlkK,cAGAu4F,YAAA,SAAA19D,GACA,OAAA8pI,EAAA,gBAAAI,OAAAp1J,MACAg1J,EAAA,gBACA/rI,EAAA/mB,OAAA,eAAA+mB,EAAAsrI,UAAAlkK,eAKA2kK,EAAA,gBAAAtoK,KAAAyoK,eAAA,mBACAH,EAAA,gBAAAx+G,UACAw+G,EAAA,gBAAAnsE,QACAniE,UAAA,SAAAwE,GACA,OAAA8pI,EAAA,gBAAAI,OAAAp1J,MACAg1J,EAAA,gBACA/rI,EAAA/mB,OAAA,aAAA+mB,EAAAsrI,UAAAlkK,cAGAu4F,YAAA,SAAA19D,GACA,OAAA8pI,EAAA,gBAAAI,OAAAp1J,MACAg1J,EAAA,gBACA/rI,EAAA/mB,OAAA,eAAA+mB,EAAAsrI,UAAAlkK,eAKA2kK,EAAA,QAAAtoK,KAAAyoK,eAAA,WACAH,EAAA,QAAAx+G,UACAw+G,EAAA,QAAAnsE,QACAC,eAAA,SAAA59D,GACA,OAAA8pI,EAAA,QAAAI,OAAAp1J,MACAg1J,EAAA,QACA/rI,EAAA/mB,OAAA,kBAAA+mB,EAAAsrI,UAAAlkK,cAGAq2B,UAAA,SAAAwE,GACA,OAAA8pI,EAAA,QAAAI,OAAAp1J,MACAg1J,EAAA,QACA/rI,EAAA/mB,OAAA,aAAA+mB,EAAAsrI,UAAAlkK,cAGAu4F,YAAA,SAAA19D,GACA,OAAA8pI,EAAA,QAAAI,OAAAp1J,MACAg1J,EAAA,QACA/rI,EAAA/mB,OAAA,eAAA+mB,EAAAsrI,UAAAlkK,eAKA2kK,EAAA,iBAAAtoK,KAAAyoK,eAAA,oBACAH,EAAA,iBAAAx+G,UACAw+G,EAAA,iBAAAnsE,QACAniE,UAAA,SAAAwE,GACA,OAAA8pI,EAAA,iBAAAI,OAAAp1J,MACAg1J,EAAA,iBACA/rI,EAAA/mB,OAAA,aAAA+mB,EAAAsrI,UAAAlkK,cAGAu4F,YAAA,SAAA19D,GACA,OAAA8pI,EAAA,iBAAAI,OAAAp1J,MACAg1J,EAAA,iBACA/rI,EAAA/mB,OAAA,eAAA+mB,EAAAsrI,UAAAlkK,eAKA2kK,GAGAX,EAAAl/G,IAAAlsB,EAAA6rI,cAAA,YACAY,gBAAA,IAEAzsI,EAAAzE,OAAA6vI,IAAAl/G,IAAA4/G,uECtZAtrK,EAAA,QACAA,EAAA,QACAA,EAAA,QACAA,EAAA,QACAA,EAAA,QAEA,IAAMksK,GACF,aACA,YACA,SACA,aACA,YACA,WACA,WACA,aACA,oBACA,YACA,yBACA,uBACA,eACA,uBACA,wBACA,gBAGJ,SAASC,EAAaxrK,EAAcyrK,GAChCF,EAAYhwJ,KAAKvb,GACjB6wB,QAAQrxB,OAAOQ,EAAMyrK,GAIzBD,EAAa,iBAAkB,eAC/BA,EAAa,gBAAiB,eAC9BA,EAAa,YAAa,eAC1BA,EAAa,QAAS,eACtBA,EAAa,cAAe,eAC5BA,EAAa,mBAAoB,aAAc,qBAC/CA,EAAa,aAAc,eAC3BA,EAAa,WAAY,eACzBA,EAAa,cAAe,eAC5BA,EAAa,iBAAkB,eAC/BA,EAAa,QAAS,eACtBA,EAAa,WAAY,aAAc,YACvCA,EAAa,WAAY,eACzBA,EAAa,UAAW,eACxBA,EAAa,eAAgB,eAC7BA,EAAa,gBAAiB,eAC9BA,EAAa,aAAc,eAE3B36I,QAAQrxB,OAAO,WAAY+rK,GAE3B16I,QAAQrxB,OAAO,YAAY69B,QACvB,wBACA,SAACquI,GACGA,EAAsBC,eAAiB,KAI/CtsK,EAAA,QACAA,EAAA,QACAA,EAAA,QAEAwxB,QACKsnB,QAAQtzC,UACRqtG,MAAM,WAAM,OAAArhF,QAAQ+6I,UAAU/mK,UAAW,aAAegnK,UAAU","file":"app-78a393.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"qopc\");\n","/*\r\n * Author: Alex Gibson\r\n * https://github.com/alexgibson/notify.js\r\n * License: MIT license\r\n */\r\n\r\n(function(global, factory) {\r\n 'use strict';\r\n\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD environment\r\n define(function() {\r\n return factory(global, global.document);\r\n });\r\n } else if (typeof module !== 'undefined' && module.exports) {\r\n // CommonJS environment\r\n module.exports = factory(global, global.document);\r\n } else {\r\n // Browser environment\r\n global.Notify = factory(global, global.document);\r\n }\r\n} (typeof window !== 'undefined' ? window : this, function (w, d) {\r\n 'use strict';\r\n\r\n var N = w.Notification;\r\n\r\n function isFunction(item) {\r\n return typeof item === 'function';\r\n }\r\n\r\n function Notify(title, options) {\r\n\r\n if (typeof title !== 'string') {\r\n throw new Error('Notify(): first arg (title) must be a string.');\r\n }\r\n\r\n this.title = title;\r\n\r\n this.options = {\r\n icon: '',\r\n body: '',\r\n tag: '',\r\n lang: 'en',\r\n notifyShow: null,\r\n notifyClose: null,\r\n notifyClick: null,\r\n notifyError: null,\r\n timeout: null,\r\n requireInteraction: false,\r\n closeOnClick: false,\r\n silent: false\r\n };\r\n\r\n this.permission = null;\r\n\r\n //User defined options for notification content\r\n if (typeof options === 'object') {\r\n\r\n for (var i in options) {\r\n if (options.hasOwnProperty(i)) {\r\n this.options[i] = options[i];\r\n }\r\n }\r\n\r\n //callback when notification is displayed\r\n if (isFunction(this.options.notifyShow)) {\r\n this.onShowCallback = this.options.notifyShow;\r\n }\r\n\r\n //callback when notification is closed\r\n if (isFunction(this.options.notifyClose)) {\r\n this.onCloseCallback = this.options.notifyClose;\r\n }\r\n\r\n //callback when notification is clicked\r\n if (isFunction(this.options.notifyClick)) {\r\n this.onClickCallback = this.options.notifyClick;\r\n }\r\n\r\n //callback when notification throws error\r\n if (isFunction(this.options.notifyError)) {\r\n this.onErrorCallback = this.options.notifyError;\r\n }\r\n }\r\n }\r\n\r\n // returns true if the browser supports Web Notifications\r\n // https://developers.google.com/web/updates/2015/05/Notifying-you-of-notificiation-changes\r\n // @param {perm} for test purposes only\r\n Notify.isSupported = function(perm) {\r\n if (!N || !N.requestPermission) {\r\n return false;\r\n }\r\n\r\n if (perm === 'granted' || N.permission === 'granted') {\r\n throw new Error('You must only call this before calling Notification.requestPermission(), otherwise this feature detect would trigger an actual notification!');\r\n }\r\n\r\n try {\r\n new N('');\r\n } catch (e) {\r\n if (e.name === 'TypeError') {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n\r\n // true if the permission is not granted\r\n Notify.needsPermission = (N && N.permission && N.permission === 'granted') ? false : true;\r\n\r\n // asks the user for permission to display notifications. Then calls the callback functions is supplied.\r\n Notify.requestPermission = function(onPermissionGrantedCallback, onPermissionDeniedCallback) {\r\n N.requestPermission(function(perm) {\r\n switch (perm) {\r\n case 'granted':\r\n Notify.needsPermission = false;\r\n if (isFunction(onPermissionGrantedCallback)) {\r\n onPermissionGrantedCallback();\r\n }\r\n break;\r\n case 'denied':\r\n Notify.needsPermission = true;\r\n if (isFunction(onPermissionDeniedCallback)) {\r\n onPermissionDeniedCallback();\r\n }\r\n break;\r\n }\r\n });\r\n };\r\n\r\n\r\n Notify.prototype.show = function() {\r\n this.myNotify = new N(this.title, {\r\n 'body': this.options.body,\r\n 'tag': this.options.tag,\r\n 'icon': this.options.icon,\r\n 'lang': this.options.lang,\r\n 'requireInteraction': this.options.requireInteraction,\r\n 'silent': this.options.silent,\r\n 'closeOnClick': this.options.closeOnClick\r\n });\r\n\r\n if (!this.options.requireInteraction && this.options.timeout && !isNaN(this.options.timeout)) {\r\n setTimeout(this.close.bind(this), this.options.timeout * 1000);\r\n }\r\n\r\n this.myNotify.addEventListener('show', this, false);\r\n this.myNotify.addEventListener('error', this, false);\r\n this.myNotify.addEventListener('close', this, false);\r\n this.myNotify.addEventListener('click', this, false);\r\n };\r\n\r\n Notify.prototype.onShowNotification = function(e) {\r\n if (this.onShowCallback) {\r\n this.onShowCallback(e);\r\n }\r\n };\r\n\r\n Notify.prototype.onCloseNotification = function(e) {\r\n if (this.onCloseCallback) {\r\n this.onCloseCallback(e);\r\n }\r\n this.destroy();\r\n };\r\n\r\n Notify.prototype.onClickNotification = function(e) {\r\n if (this.onClickCallback) {\r\n this.onClickCallback(e);\r\n }\r\n\r\n if (this.options.closeOnClick) {\r\n this.close();\r\n }\r\n };\r\n\r\n Notify.prototype.onErrorNotification = function(e) {\r\n if (this.onErrorCallback) {\r\n this.onErrorCallback(e);\r\n }\r\n this.destroy();\r\n };\r\n\r\n Notify.prototype.destroy = function() {\r\n this.myNotify.removeEventListener('show', this, false);\r\n this.myNotify.removeEventListener('error', this, false);\r\n this.myNotify.removeEventListener('close', this, false);\r\n this.myNotify.removeEventListener('click', this, false);\r\n };\r\n\r\n Notify.prototype.close = function() {\r\n this.myNotify.close();\r\n };\r\n\r\n Notify.prototype.handleEvent = function(e) {\r\n switch (e.type) {\r\n case 'show':\r\n this.onShowNotification(e);\r\n break;\r\n case 'close':\r\n this.onCloseNotification(e);\r\n break;\r\n case 'click':\r\n this.onClickNotification(e);\r\n break;\r\n case 'error':\r\n this.onErrorNotification(e);\r\n break;\r\n }\r\n };\r\n\r\n return Notify;\r\n}));\r\n","if (!String.prototype.includes) {\r\n String.prototype.includes = function (search, start) {\r\n 'use strict';\r\n if (typeof start !== 'number') {\r\n start = 0;\r\n }\r\n\r\n if (start + search.length > this.length) {\r\n return false;\r\n } else {\r\n return this.indexOf(search, start) !== -1;\r\n }\r\n };\r\n}\r\n\r\nif (!String.prototype.startsWith) {\r\n\tString.prototype.startsWith = function(search, pos) {\r\n\t\treturn this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\r\n\t};\r\n}\r\n\r\nif (!String.prototype.endsWith) {\r\n\tString.prototype.endsWith = function(search, this_len) {\r\n\t\tif (this_len === undefined || this_len > this.length) {\r\n\t\t\tthis_len = this.length;\r\n\t\t}\r\n\t\treturn this.substring(this_len - search.length, this_len) === search;\r\n\t};\r\n}\r\n\r\nif (!Array.prototype.find) {\r\n Object.defineProperty(Array.prototype, 'find', {\r\n value: function (predicate) {\r\n // 1. Let O be ? ToObject(this value).\r\n if (this == null) {\r\n throw new TypeError('\"this\" is null or not defined');\r\n }\r\n\r\n var o = Object(this);\r\n\r\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\r\n var len = o.length >>> 0;\r\n\r\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\r\n if (typeof predicate !== 'function') {\r\n throw new TypeError('predicate must be a function');\r\n }\r\n\r\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\r\n var thisArg = arguments[1];\r\n\r\n // 5. Let k be 0.\r\n var k = 0;\r\n\r\n // 6. Repeat, while k < len\r\n while (k < len) {\r\n // a. Let Pk be ! ToString(k).\r\n // b. Let kValue be ? Get(O, Pk).\r\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\r\n // d. If testResult is true, return kValue.\r\n var kValue = o[k];\r\n if (predicate.call(thisArg, kValue, k, o)) {\r\n return kValue;\r\n }\r\n // e. Increase k by 1.\r\n k++;\r\n }\r\n\r\n // 7. Return undefined.\r\n return undefined;\r\n }\r\n });\r\n}\r\n\r\nif (!Array.prototype.every) {\r\n Array.prototype.every = function(callbackfn, thisArg) {\r\n 'use strict';\r\n var T, k;\r\n\r\n if (this == null) {\r\n throw new TypeError('this is null or not defined');\r\n }\r\n\r\n // 1. Let O be the result of calling ToObject passing the this\r\n // value as the argument.\r\n var O = Object(this);\r\n\r\n // 2. Let lenValue be the result of calling the Get internal method\r\n // of O with the argument \"length\".\r\n // 3. Let len be ToUint32(lenValue).\r\n var len = O.length >>> 0;\r\n\r\n // 4. If IsCallable(callbackfn) is false, throw a TypeError exception.\r\n if (typeof callbackfn !== 'function') {\r\n throw new TypeError();\r\n }\r\n\r\n // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.\r\n if (arguments.length > 1) {\r\n T = thisArg;\r\n }\r\n\r\n // 6. Let k be 0.\r\n k = 0;\r\n\r\n // 7. Repeat, while k < len\r\n while (k < len) {\r\n\r\n var kValue;\r\n\r\n // a. Let Pk be ToString(k).\r\n // This is implicit for LHS operands of the in operator\r\n // b. Let kPresent be the result of calling the HasProperty internal\r\n // method of O with argument Pk.\r\n // This step can be combined with c\r\n // c. If kPresent is true, then\r\n if (k in O) {\r\n\r\n // i. Let kValue be the result of calling the Get internal method\r\n // of O with argument Pk.\r\n kValue = O[k];\r\n\r\n // ii. Let testResult be the result of calling the Call internal method\r\n // of callbackfn with T as the this value and argument list\r\n // containing kValue, k, and O.\r\n var testResult = callbackfn.call(T, kValue, k, O);\r\n\r\n // iii. If ToBoolean(testResult) is false, return false.\r\n if (!testResult) {\r\n return false;\r\n }\r\n }\r\n k++;\r\n }\r\n return true;\r\n };\r\n }\r\n\r\n\r\nif (typeof Object.assign != 'function') {\r\n // Must be writable: true, enumerable: false, configurable: true\r\n Object.defineProperty(Object, \"assign\", {\r\n value: function assign(target, varArgs) { // .length of function is 2\r\n 'use strict';\r\n if (target == null) { // TypeError if undefined or null\r\n throw new TypeError('Cannot convert undefined or null to object');\r\n }\r\n\r\n var to = Object(target);\r\n\r\n for (var index = 1; index < arguments.length; index++) {\r\n var nextSource = arguments[index];\r\n\r\n if (nextSource != null) { // Skip over if undefined or null\r\n for (var nextKey in nextSource) {\r\n // Avoid bugs when hasOwnProperty is shadowed\r\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\r\n to[nextKey] = nextSource[nextKey];\r\n }\r\n }\r\n }\r\n }\r\n return to;\r\n },\r\n writable: true,\r\n configurable: true\r\n });\r\n}\r\n\r\nif (!Array.from) {\r\n Array.from = (function () {\r\n var toStr = Object.prototype.toString;\r\n var isCallable = function (fn) {\r\n return typeof fn === 'function' || toStr.call(fn) === '[object Function]';\r\n };\r\n var toInteger = function (value) {\r\n var number = Number(value);\r\n if (isNaN(number)) {\r\n return 0;\r\n }\r\n if (number === 0 || !isFinite(number)) {\r\n return number;\r\n }\r\n return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));\r\n };\r\n var maxSafeInteger = Math.pow(2, 53) - 1;\r\n var toLength = function (value) {\r\n var len = toInteger(value);\r\n return Math.min(Math.max(len, 0), maxSafeInteger);\r\n };\r\n\r\n // The length property of the from method is 1.\r\n return function from(arrayLike /*, mapFn, thisArg */ ) {\r\n // 1. Let C be the this value.\r\n var C = this;\r\n\r\n // 2. Let items be ToObject(arrayLike).\r\n var items = Object(arrayLike);\r\n\r\n // 3. ReturnIfAbrupt(items).\r\n if (arrayLike == null) {\r\n throw new TypeError('Array.from requires an array-like object - not null or undefined');\r\n }\r\n\r\n // 4. If mapfn is undefined, then let mapping be false.\r\n var mapFn = arguments.length > 1 ? arguments[1] : void undefined;\r\n var T;\r\n if (typeof mapFn !== 'undefined') {\r\n // 5. else\r\n // 5. a If IsCallable(mapfn) is false, throw a TypeError exception.\r\n if (!isCallable(mapFn)) {\r\n throw new TypeError('Array.from: when provided, the second argument must be a function');\r\n }\r\n\r\n // 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined.\r\n if (arguments.length > 2) {\r\n T = arguments[2];\r\n }\r\n }\r\n\r\n // 10. Let lenValue be Get(items, \"length\").\r\n // 11. Let len be ToLength(lenValue).\r\n var len = toLength(items.length);\r\n\r\n // 13. If IsConstructor(C) is true, then\r\n // 13. a. Let A be the result of calling the [[Construct]] internal method\r\n // of C with an argument list containing the single item len.\r\n // 14. a. Else, Let A be ArrayCreate(len).\r\n var A = isCallable(C) ? Object(new C(len)) : new Array(len);\r\n\r\n // 16. Let k be 0.\r\n var k = 0;\r\n // 17. Repeat, while k < len… (also steps a - h)\r\n var kValue;\r\n while (k < len) {\r\n kValue = items[k];\r\n if (mapFn) {\r\n A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);\r\n } else {\r\n A[k] = kValue;\r\n }\r\n k += 1;\r\n }\r\n // 18. Let putStatus be Put(A, \"length\", len, true).\r\n A.length = len;\r\n // 20. Return A.\r\n return A;\r\n };\r\n }());\r\n}\r\n","/**\n * Copyright (c) 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.Immutable = factory();\n}(this, function () { 'use strict';var SLICE$0 = Array.prototype.slice;\n\n function createClass(ctor, superClass) {\n if (superClass) {\n ctor.prototype = Object.create(superClass.prototype);\n }\n ctor.prototype.constructor = ctor;\n }\n\n function Iterable(value) {\n return isIterable(value) ? value : Seq(value);\n }\n\n\n createClass(KeyedIterable, Iterable);\n function KeyedIterable(value) {\n return isKeyed(value) ? value : KeyedSeq(value);\n }\n\n\n createClass(IndexedIterable, Iterable);\n function IndexedIterable(value) {\n return isIndexed(value) ? value : IndexedSeq(value);\n }\n\n\n createClass(SetIterable, Iterable);\n function SetIterable(value) {\n return isIterable(value) && !isAssociative(value) ? value : SetSeq(value);\n }\n\n\n\n function isIterable(maybeIterable) {\n return !!(maybeIterable && maybeIterable[IS_ITERABLE_SENTINEL]);\n }\n\n function isKeyed(maybeKeyed) {\n return !!(maybeKeyed && maybeKeyed[IS_KEYED_SENTINEL]);\n }\n\n function isIndexed(maybeIndexed) {\n return !!(maybeIndexed && maybeIndexed[IS_INDEXED_SENTINEL]);\n }\n\n function isAssociative(maybeAssociative) {\n return isKeyed(maybeAssociative) || isIndexed(maybeAssociative);\n }\n\n function isOrdered(maybeOrdered) {\n return !!(maybeOrdered && maybeOrdered[IS_ORDERED_SENTINEL]);\n }\n\n Iterable.isIterable = isIterable;\n Iterable.isKeyed = isKeyed;\n Iterable.isIndexed = isIndexed;\n Iterable.isAssociative = isAssociative;\n Iterable.isOrdered = isOrdered;\n\n Iterable.Keyed = KeyedIterable;\n Iterable.Indexed = IndexedIterable;\n Iterable.Set = SetIterable;\n\n\n var IS_ITERABLE_SENTINEL = '@@__IMMUTABLE_ITERABLE__@@';\n var IS_KEYED_SENTINEL = '@@__IMMUTABLE_KEYED__@@';\n var IS_INDEXED_SENTINEL = '@@__IMMUTABLE_INDEXED__@@';\n var IS_ORDERED_SENTINEL = '@@__IMMUTABLE_ORDERED__@@';\n\n // Used for setting prototype methods that IE8 chokes on.\n var DELETE = 'delete';\n\n // Constants describing the size of trie nodes.\n var SHIFT = 5; // Resulted in best performance after ______?\n var SIZE = 1 << SHIFT;\n var MASK = SIZE - 1;\n\n // A consistent shared value representing \"not set\" which equals nothing other\n // than itself, and nothing that could be provided externally.\n var NOT_SET = {};\n\n // Boolean references, Rough equivalent of `bool &`.\n var CHANGE_LENGTH = { value: false };\n var DID_ALTER = { value: false };\n\n function MakeRef(ref) {\n ref.value = false;\n return ref;\n }\n\n function SetRef(ref) {\n ref && (ref.value = true);\n }\n\n // A function which returns a value representing an \"owner\" for transient writes\n // to tries. The return value will only ever equal itself, and will not equal\n // the return of any subsequent call of this function.\n function OwnerID() {}\n\n // http://jsperf.com/copy-array-inline\n function arrCopy(arr, offset) {\n offset = offset || 0;\n var len = Math.max(0, arr.length - offset);\n var newArr = new Array(len);\n for (var ii = 0; ii < len; ii++) {\n newArr[ii] = arr[ii + offset];\n }\n return newArr;\n }\n\n function ensureSize(iter) {\n if (iter.size === undefined) {\n iter.size = iter.__iterate(returnTrue);\n }\n return iter.size;\n }\n\n function wrapIndex(iter, index) {\n // This implements \"is array index\" which the ECMAString spec defines as:\n //\n // A String property name P is an array index if and only if\n // ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal\n // to 2^32−1.\n //\n // http://www.ecma-international.org/ecma-262/6.0/#sec-array-exotic-objects\n if (typeof index !== 'number') {\n var uint32Index = index >>> 0; // N >>> 0 is shorthand for ToUint32\n if ('' + uint32Index !== index || uint32Index === 4294967295) {\n return NaN;\n }\n index = uint32Index;\n }\n return index < 0 ? ensureSize(iter) + index : index;\n }\n\n function returnTrue() {\n return true;\n }\n\n function wholeSlice(begin, end, size) {\n return (begin === 0 || (size !== undefined && begin <= -size)) &&\n (end === undefined || (size !== undefined && end >= size));\n }\n\n function resolveBegin(begin, size) {\n return resolveIndex(begin, size, 0);\n }\n\n function resolveEnd(end, size) {\n return resolveIndex(end, size, size);\n }\n\n function resolveIndex(index, size, defaultIndex) {\n return index === undefined ?\n defaultIndex :\n index < 0 ?\n Math.max(0, size + index) :\n size === undefined ?\n index :\n Math.min(size, index);\n }\n\n /* global Symbol */\n\n var ITERATE_KEYS = 0;\n var ITERATE_VALUES = 1;\n var ITERATE_ENTRIES = 2;\n\n var REAL_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator';\n\n var ITERATOR_SYMBOL = REAL_ITERATOR_SYMBOL || FAUX_ITERATOR_SYMBOL;\n\n\n function Iterator(next) {\n this.next = next;\n }\n\n Iterator.prototype.toString = function() {\n return '[Iterator]';\n };\n\n\n Iterator.KEYS = ITERATE_KEYS;\n Iterator.VALUES = ITERATE_VALUES;\n Iterator.ENTRIES = ITERATE_ENTRIES;\n\n Iterator.prototype.inspect =\n Iterator.prototype.toSource = function () { return this.toString(); }\n Iterator.prototype[ITERATOR_SYMBOL] = function () {\n return this;\n };\n\n\n function iteratorValue(type, k, v, iteratorResult) {\n var value = type === 0 ? k : type === 1 ? v : [k, v];\n iteratorResult ? (iteratorResult.value = value) : (iteratorResult = {\n value: value, done: false\n });\n return iteratorResult;\n }\n\n function iteratorDone() {\n return { value: undefined, done: true };\n }\n\n function hasIterator(maybeIterable) {\n return !!getIteratorFn(maybeIterable);\n }\n\n function isIterator(maybeIterator) {\n return maybeIterator && typeof maybeIterator.next === 'function';\n }\n\n function getIterator(iterable) {\n var iteratorFn = getIteratorFn(iterable);\n return iteratorFn && iteratorFn.call(iterable);\n }\n\n function getIteratorFn(iterable) {\n var iteratorFn = iterable && (\n (REAL_ITERATOR_SYMBOL && iterable[REAL_ITERATOR_SYMBOL]) ||\n iterable[FAUX_ITERATOR_SYMBOL]\n );\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n\n function isArrayLike(value) {\n return value && typeof value.length === 'number';\n }\n\n createClass(Seq, Iterable);\n function Seq(value) {\n return value === null || value === undefined ? emptySequence() :\n isIterable(value) ? value.toSeq() : seqFromValue(value);\n }\n\n Seq.of = function(/*...values*/) {\n return Seq(arguments);\n };\n\n Seq.prototype.toSeq = function() {\n return this;\n };\n\n Seq.prototype.toString = function() {\n return this.__toString('Seq {', '}');\n };\n\n Seq.prototype.cacheResult = function() {\n if (!this._cache && this.__iterateUncached) {\n this._cache = this.entrySeq().toArray();\n this.size = this._cache.length;\n }\n return this;\n };\n\n // abstract __iterateUncached(fn, reverse)\n\n Seq.prototype.__iterate = function(fn, reverse) {\n return seqIterate(this, fn, reverse, true);\n };\n\n // abstract __iteratorUncached(type, reverse)\n\n Seq.prototype.__iterator = function(type, reverse) {\n return seqIterator(this, type, reverse, true);\n };\n\n\n\n createClass(KeyedSeq, Seq);\n function KeyedSeq(value) {\n return value === null || value === undefined ?\n emptySequence().toKeyedSeq() :\n isIterable(value) ?\n (isKeyed(value) ? value.toSeq() : value.fromEntrySeq()) :\n keyedSeqFromValue(value);\n }\n\n KeyedSeq.prototype.toKeyedSeq = function() {\n return this;\n };\n\n\n\n createClass(IndexedSeq, Seq);\n function IndexedSeq(value) {\n return value === null || value === undefined ? emptySequence() :\n !isIterable(value) ? indexedSeqFromValue(value) :\n isKeyed(value) ? value.entrySeq() : value.toIndexedSeq();\n }\n\n IndexedSeq.of = function(/*...values*/) {\n return IndexedSeq(arguments);\n };\n\n IndexedSeq.prototype.toIndexedSeq = function() {\n return this;\n };\n\n IndexedSeq.prototype.toString = function() {\n return this.__toString('Seq [', ']');\n };\n\n IndexedSeq.prototype.__iterate = function(fn, reverse) {\n return seqIterate(this, fn, reverse, false);\n };\n\n IndexedSeq.prototype.__iterator = function(type, reverse) {\n return seqIterator(this, type, reverse, false);\n };\n\n\n\n createClass(SetSeq, Seq);\n function SetSeq(value) {\n return (\n value === null || value === undefined ? emptySequence() :\n !isIterable(value) ? indexedSeqFromValue(value) :\n isKeyed(value) ? value.entrySeq() : value\n ).toSetSeq();\n }\n\n SetSeq.of = function(/*...values*/) {\n return SetSeq(arguments);\n };\n\n SetSeq.prototype.toSetSeq = function() {\n return this;\n };\n\n\n\n Seq.isSeq = isSeq;\n Seq.Keyed = KeyedSeq;\n Seq.Set = SetSeq;\n Seq.Indexed = IndexedSeq;\n\n var IS_SEQ_SENTINEL = '@@__IMMUTABLE_SEQ__@@';\n\n Seq.prototype[IS_SEQ_SENTINEL] = true;\n\n\n\n createClass(ArraySeq, IndexedSeq);\n function ArraySeq(array) {\n this._array = array;\n this.size = array.length;\n }\n\n ArraySeq.prototype.get = function(index, notSetValue) {\n return this.has(index) ? this._array[wrapIndex(this, index)] : notSetValue;\n };\n\n ArraySeq.prototype.__iterate = function(fn, reverse) {\n var array = this._array;\n var maxIndex = array.length - 1;\n for (var ii = 0; ii <= maxIndex; ii++) {\n if (fn(array[reverse ? maxIndex - ii : ii], ii, this) === false) {\n return ii + 1;\n }\n }\n return ii;\n };\n\n ArraySeq.prototype.__iterator = function(type, reverse) {\n var array = this._array;\n var maxIndex = array.length - 1;\n var ii = 0;\n return new Iterator(function() \n {return ii > maxIndex ?\n iteratorDone() :\n iteratorValue(type, ii, array[reverse ? maxIndex - ii++ : ii++])}\n );\n };\n\n\n\n createClass(ObjectSeq, KeyedSeq);\n function ObjectSeq(object) {\n var keys = Object.keys(object);\n this._object = object;\n this._keys = keys;\n this.size = keys.length;\n }\n\n ObjectSeq.prototype.get = function(key, notSetValue) {\n if (notSetValue !== undefined && !this.has(key)) {\n return notSetValue;\n }\n return this._object[key];\n };\n\n ObjectSeq.prototype.has = function(key) {\n return this._object.hasOwnProperty(key);\n };\n\n ObjectSeq.prototype.__iterate = function(fn, reverse) {\n var object = this._object;\n var keys = this._keys;\n var maxIndex = keys.length - 1;\n for (var ii = 0; ii <= maxIndex; ii++) {\n var key = keys[reverse ? maxIndex - ii : ii];\n if (fn(object[key], key, this) === false) {\n return ii + 1;\n }\n }\n return ii;\n };\n\n ObjectSeq.prototype.__iterator = function(type, reverse) {\n var object = this._object;\n var keys = this._keys;\n var maxIndex = keys.length - 1;\n var ii = 0;\n return new Iterator(function() {\n var key = keys[reverse ? maxIndex - ii : ii];\n return ii++ > maxIndex ?\n iteratorDone() :\n iteratorValue(type, key, object[key]);\n });\n };\n\n ObjectSeq.prototype[IS_ORDERED_SENTINEL] = true;\n\n\n createClass(IterableSeq, IndexedSeq);\n function IterableSeq(iterable) {\n this._iterable = iterable;\n this.size = iterable.length || iterable.size;\n }\n\n IterableSeq.prototype.__iterateUncached = function(fn, reverse) {\n if (reverse) {\n return this.cacheResult().__iterate(fn, reverse);\n }\n var iterable = this._iterable;\n var iterator = getIterator(iterable);\n var iterations = 0;\n if (isIterator(iterator)) {\n var step;\n while (!(step = iterator.next()).done) {\n if (fn(step.value, iterations++, this) === false) {\n break;\n }\n }\n }\n return iterations;\n };\n\n IterableSeq.prototype.__iteratorUncached = function(type, reverse) {\n if (reverse) {\n return this.cacheResult().__iterator(type, reverse);\n }\n var iterable = this._iterable;\n var iterator = getIterator(iterable);\n if (!isIterator(iterator)) {\n return new Iterator(iteratorDone);\n }\n var iterations = 0;\n return new Iterator(function() {\n var step = iterator.next();\n return step.done ? step : iteratorValue(type, iterations++, step.value);\n });\n };\n\n\n\n createClass(IteratorSeq, IndexedSeq);\n function IteratorSeq(iterator) {\n this._iterator = iterator;\n this._iteratorCache = [];\n }\n\n IteratorSeq.prototype.__iterateUncached = function(fn, reverse) {\n if (reverse) {\n return this.cacheResult().__iterate(fn, reverse);\n }\n var iterator = this._iterator;\n var cache = this._iteratorCache;\n var iterations = 0;\n while (iterations < cache.length) {\n if (fn(cache[iterations], iterations++, this) === false) {\n return iterations;\n }\n }\n var step;\n while (!(step = iterator.next()).done) {\n var val = step.value;\n cache[iterations] = val;\n if (fn(val, iterations++, this) === false) {\n break;\n }\n }\n return iterations;\n };\n\n IteratorSeq.prototype.__iteratorUncached = function(type, reverse) {\n if (reverse) {\n return this.cacheResult().__iterator(type, reverse);\n }\n var iterator = this._iterator;\n var cache = this._iteratorCache;\n var iterations = 0;\n return new Iterator(function() {\n if (iterations >= cache.length) {\n var step = iterator.next();\n if (step.done) {\n return step;\n }\n cache[iterations] = step.value;\n }\n return iteratorValue(type, iterations, cache[iterations++]);\n });\n };\n\n\n\n\n // # pragma Helper functions\n\n function isSeq(maybeSeq) {\n return !!(maybeSeq && maybeSeq[IS_SEQ_SENTINEL]);\n }\n\n var EMPTY_SEQ;\n\n function emptySequence() {\n return EMPTY_SEQ || (EMPTY_SEQ = new ArraySeq([]));\n }\n\n function keyedSeqFromValue(value) {\n var seq =\n Array.isArray(value) ? new ArraySeq(value).fromEntrySeq() :\n isIterator(value) ? new IteratorSeq(value).fromEntrySeq() :\n hasIterator(value) ? new IterableSeq(value).fromEntrySeq() :\n typeof value === 'object' ? new ObjectSeq(value) :\n undefined;\n if (!seq) {\n throw new TypeError(\n 'Expected Array or iterable object of [k, v] entries, '+\n 'or keyed object: ' + value\n );\n }\n return seq;\n }\n\n function indexedSeqFromValue(value) {\n var seq = maybeIndexedSeqFromValue(value);\n if (!seq) {\n throw new TypeError(\n 'Expected Array or iterable object of values: ' + value\n );\n }\n return seq;\n }\n\n function seqFromValue(value) {\n var seq = maybeIndexedSeqFromValue(value) ||\n (typeof value === 'object' && new ObjectSeq(value));\n if (!seq) {\n throw new TypeError(\n 'Expected Array or iterable object of values, or keyed object: ' + value\n );\n }\n return seq;\n }\n\n function maybeIndexedSeqFromValue(value) {\n return (\n isArrayLike(value) ? new ArraySeq(value) :\n isIterator(value) ? new IteratorSeq(value) :\n hasIterator(value) ? new IterableSeq(value) :\n undefined\n );\n }\n\n function seqIterate(seq, fn, reverse, useKeys) {\n var cache = seq._cache;\n if (cache) {\n var maxIndex = cache.length - 1;\n for (var ii = 0; ii <= maxIndex; ii++) {\n var entry = cache[reverse ? maxIndex - ii : ii];\n if (fn(entry[1], useKeys ? entry[0] : ii, seq) === false) {\n return ii + 1;\n }\n }\n return ii;\n }\n return seq.__iterateUncached(fn, reverse);\n }\n\n function seqIterator(seq, type, reverse, useKeys) {\n var cache = seq._cache;\n if (cache) {\n var maxIndex = cache.length - 1;\n var ii = 0;\n return new Iterator(function() {\n var entry = cache[reverse ? maxIndex - ii : ii];\n return ii++ > maxIndex ?\n iteratorDone() :\n iteratorValue(type, useKeys ? entry[0] : ii - 1, entry[1]);\n });\n }\n return seq.__iteratorUncached(type, reverse);\n }\n\n function fromJS(json, converter) {\n return converter ?\n fromJSWith(converter, json, '', {'': json}) :\n fromJSDefault(json);\n }\n\n function fromJSWith(converter, json, key, parentJSON) {\n if (Array.isArray(json)) {\n return converter.call(parentJSON, key, IndexedSeq(json).map(function(v, k) {return fromJSWith(converter, v, k, json)}));\n }\n if (isPlainObj(json)) {\n return converter.call(parentJSON, key, KeyedSeq(json).map(function(v, k) {return fromJSWith(converter, v, k, json)}));\n }\n return json;\n }\n\n function fromJSDefault(json) {\n if (Array.isArray(json)) {\n return IndexedSeq(json).map(fromJSDefault).toList();\n }\n if (isPlainObj(json)) {\n return KeyedSeq(json).map(fromJSDefault).toMap();\n }\n return json;\n }\n\n function isPlainObj(value) {\n return value && (value.constructor === Object || value.constructor === undefined);\n }\n\n /**\n * An extension of the \"same-value\" algorithm as [described for use by ES6 Map\n * and Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Key_equality)\n *\n * NaN is considered the same as NaN, however -0 and 0 are considered the same\n * value, which is different from the algorithm described by\n * [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is).\n *\n * This is extended further to allow Objects to describe the values they\n * represent, by way of `valueOf` or `equals` (and `hashCode`).\n *\n * Note: because of this extension, the key equality of Immutable.Map and the\n * value equality of Immutable.Set will differ from ES6 Map and Set.\n *\n * ### Defining custom values\n *\n * The easiest way to describe the value an object represents is by implementing\n * `valueOf`. For example, `Date` represents a value by returning a unix\n * timestamp for `valueOf`:\n *\n * var date1 = new Date(1234567890000); // Fri Feb 13 2009 ...\n * var date2 = new Date(1234567890000);\n * date1.valueOf(); // 1234567890000\n * assert( date1 !== date2 );\n * assert( Immutable.is( date1, date2 ) );\n *\n * Note: overriding `valueOf` may have other implications if you use this object\n * where JavaScript expects a primitive, such as implicit string coercion.\n *\n * For more complex types, especially collections, implementing `valueOf` may\n * not be performant. An alternative is to implement `equals` and `hashCode`.\n *\n * `equals` takes another object, presumably of similar type, and returns true\n * if the it is equal. Equality is symmetrical, so the same result should be\n * returned if this and the argument are flipped.\n *\n * assert( a.equals(b) === b.equals(a) );\n *\n * `hashCode` returns a 32bit integer number representing the object which will\n * be used to determine how to store the value object in a Map or Set. You must\n * provide both or neither methods, one must not exist without the other.\n *\n * Also, an important relationship between these methods must be upheld: if two\n * values are equal, they *must* return the same hashCode. If the values are not\n * equal, they might have the same hashCode; this is called a hash collision,\n * and while undesirable for performance reasons, it is acceptable.\n *\n * if (a.equals(b)) {\n * assert( a.hashCode() === b.hashCode() );\n * }\n *\n * All Immutable collections implement `equals` and `hashCode`.\n *\n */\n function is(valueA, valueB) {\n if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) {\n return true;\n }\n if (!valueA || !valueB) {\n return false;\n }\n if (typeof valueA.valueOf === 'function' &&\n typeof valueB.valueOf === 'function') {\n valueA = valueA.valueOf();\n valueB = valueB.valueOf();\n if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) {\n return true;\n }\n if (!valueA || !valueB) {\n return false;\n }\n }\n if (typeof valueA.equals === 'function' &&\n typeof valueB.equals === 'function' &&\n valueA.equals(valueB)) {\n return true;\n }\n return false;\n }\n\n function deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n\n if (\n !isIterable(b) ||\n a.size !== undefined && b.size !== undefined && a.size !== b.size ||\n a.__hash !== undefined && b.__hash !== undefined && a.__hash !== b.__hash ||\n isKeyed(a) !== isKeyed(b) ||\n isIndexed(a) !== isIndexed(b) ||\n isOrdered(a) !== isOrdered(b)\n ) {\n return false;\n }\n\n if (a.size === 0 && b.size === 0) {\n return true;\n }\n\n var notAssociative = !isAssociative(a);\n\n if (isOrdered(a)) {\n var entries = a.entries();\n return b.every(function(v, k) {\n var entry = entries.next().value;\n return entry && is(entry[1], v) && (notAssociative || is(entry[0], k));\n }) && entries.next().done;\n }\n\n var flipped = false;\n\n if (a.size === undefined) {\n if (b.size === undefined) {\n if (typeof a.cacheResult === 'function') {\n a.cacheResult();\n }\n } else {\n flipped = true;\n var _ = a;\n a = b;\n b = _;\n }\n }\n\n var allEqual = true;\n var bSize = b.__iterate(function(v, k) {\n if (notAssociative ? !a.has(v) :\n flipped ? !is(v, a.get(k, NOT_SET)) : !is(a.get(k, NOT_SET), v)) {\n allEqual = false;\n return false;\n }\n });\n\n return allEqual && a.size === bSize;\n }\n\n createClass(Repeat, IndexedSeq);\n\n function Repeat(value, times) {\n if (!(this instanceof Repeat)) {\n return new Repeat(value, times);\n }\n this._value = value;\n this.size = times === undefined ? Infinity : Math.max(0, times);\n if (this.size === 0) {\n if (EMPTY_REPEAT) {\n return EMPTY_REPEAT;\n }\n EMPTY_REPEAT = this;\n }\n }\n\n Repeat.prototype.toString = function() {\n if (this.size === 0) {\n return 'Repeat []';\n }\n return 'Repeat [ ' + this._value + ' ' + this.size + ' times ]';\n };\n\n Repeat.prototype.get = function(index, notSetValue) {\n return this.has(index) ? this._value : notSetValue;\n };\n\n Repeat.prototype.includes = function(searchValue) {\n return is(this._value, searchValue);\n };\n\n Repeat.prototype.slice = function(begin, end) {\n var size = this.size;\n return wholeSlice(begin, end, size) ? this :\n new Repeat(this._value, resolveEnd(end, size) - resolveBegin(begin, size));\n };\n\n Repeat.prototype.reverse = function() {\n return this;\n };\n\n Repeat.prototype.indexOf = function(searchValue) {\n if (is(this._value, searchValue)) {\n return 0;\n }\n return -1;\n };\n\n Repeat.prototype.lastIndexOf = function(searchValue) {\n if (is(this._value, searchValue)) {\n return this.size;\n }\n return -1;\n };\n\n Repeat.prototype.__iterate = function(fn, reverse) {\n for (var ii = 0; ii < this.size; ii++) {\n if (fn(this._value, ii, this) === false) {\n return ii + 1;\n }\n }\n return ii;\n };\n\n Repeat.prototype.__iterator = function(type, reverse) {var this$0 = this;\n var ii = 0;\n return new Iterator(function() \n {return ii < this$0.size ? iteratorValue(type, ii++, this$0._value) : iteratorDone()}\n );\n };\n\n Repeat.prototype.equals = function(other) {\n return other instanceof Repeat ?\n is(this._value, other._value) :\n deepEqual(other);\n };\n\n\n var EMPTY_REPEAT;\n\n function invariant(condition, error) {\n if (!condition) throw new Error(error);\n }\n\n createClass(Range, IndexedSeq);\n\n function Range(start, end, step) {\n if (!(this instanceof Range)) {\n return new Range(start, end, step);\n }\n invariant(step !== 0, 'Cannot step a Range by 0');\n start = start || 0;\n if (end === undefined) {\n end = Infinity;\n }\n step = step === undefined ? 1 : Math.abs(step);\n if (end < start) {\n step = -step;\n }\n this._start = start;\n this._end = end;\n this._step = step;\n this.size = Math.max(0, Math.ceil((end - start) / step - 1) + 1);\n if (this.size === 0) {\n if (EMPTY_RANGE) {\n return EMPTY_RANGE;\n }\n EMPTY_RANGE = this;\n }\n }\n\n Range.prototype.toString = function() {\n if (this.size === 0) {\n return 'Range []';\n }\n return 'Range [ ' +\n this._start + '...' + this._end +\n (this._step > 1 ? ' by ' + this._step : '') +\n ' ]';\n };\n\n Range.prototype.get = function(index, notSetValue) {\n return this.has(index) ?\n this._start + wrapIndex(this, index) * this._step :\n notSetValue;\n };\n\n Range.prototype.includes = function(searchValue) {\n var possibleIndex = (searchValue - this._start) / this._step;\n return possibleIndex >= 0 &&\n possibleIndex < this.size &&\n possibleIndex === Math.floor(possibleIndex);\n };\n\n Range.prototype.slice = function(begin, end) {\n if (wholeSlice(begin, end, this.size)) {\n return this;\n }\n begin = resolveBegin(begin, this.size);\n end = resolveEnd(end, this.size);\n if (end <= begin) {\n return new Range(0, 0);\n }\n return new Range(this.get(begin, this._end), this.get(end, this._end), this._step);\n };\n\n Range.prototype.indexOf = function(searchValue) {\n var offsetValue = searchValue - this._start;\n if (offsetValue % this._step === 0) {\n var index = offsetValue / this._step;\n if (index >= 0 && index < this.size) {\n return index\n }\n }\n return -1;\n };\n\n Range.prototype.lastIndexOf = function(searchValue) {\n return this.indexOf(searchValue);\n };\n\n Range.prototype.__iterate = function(fn, reverse) {\n var maxIndex = this.size - 1;\n var step = this._step;\n var value = reverse ? this._start + maxIndex * step : this._start;\n for (var ii = 0; ii <= maxIndex; ii++) {\n if (fn(value, ii, this) === false) {\n return ii + 1;\n }\n value += reverse ? -step : step;\n }\n return ii;\n };\n\n Range.prototype.__iterator = function(type, reverse) {\n var maxIndex = this.size - 1;\n var step = this._step;\n var value = reverse ? this._start + maxIndex * step : this._start;\n var ii = 0;\n return new Iterator(function() {\n var v = value;\n value += reverse ? -step : step;\n return ii > maxIndex ? iteratorDone() : iteratorValue(type, ii++, v);\n });\n };\n\n Range.prototype.equals = function(other) {\n return other instanceof Range ?\n this._start === other._start &&\n this._end === other._end &&\n this._step === other._step :\n deepEqual(this, other);\n };\n\n\n var EMPTY_RANGE;\n\n createClass(Collection, Iterable);\n function Collection() {\n throw TypeError('Abstract');\n }\n\n\n createClass(KeyedCollection, Collection);function KeyedCollection() {}\n\n createClass(IndexedCollection, Collection);function IndexedCollection() {}\n\n createClass(SetCollection, Collection);function SetCollection() {}\n\n\n Collection.Keyed = KeyedCollection;\n Collection.Indexed = IndexedCollection;\n Collection.Set = SetCollection;\n\n var imul =\n typeof Math.imul === 'function' && Math.imul(0xffffffff, 2) === -2 ?\n Math.imul :\n function imul(a, b) {\n a = a | 0; // int\n b = b | 0; // int\n var c = a & 0xffff;\n var d = b & 0xffff;\n // Shift by 0 fixes the sign on the high part.\n return (c * d) + ((((a >>> 16) * d + c * (b >>> 16)) << 16) >>> 0) | 0; // int\n };\n\n // v8 has an optimization for storing 31-bit signed numbers.\n // Values which have either 00 or 11 as the high order bits qualify.\n // This function drops the highest order bit in a signed number, maintaining\n // the sign bit.\n function smi(i32) {\n return ((i32 >>> 1) & 0x40000000) | (i32 & 0xBFFFFFFF);\n }\n\n function hash(o) {\n if (o === false || o === null || o === undefined) {\n return 0;\n }\n if (typeof o.valueOf === 'function') {\n o = o.valueOf();\n if (o === false || o === null || o === undefined) {\n return 0;\n }\n }\n if (o === true) {\n return 1;\n }\n var type = typeof o;\n if (type === 'number') {\n var h = o | 0;\n if (h !== o) {\n h ^= o * 0xFFFFFFFF;\n }\n while (o > 0xFFFFFFFF) {\n o /= 0xFFFFFFFF;\n h ^= o;\n }\n return smi(h);\n }\n if (type === 'string') {\n return o.length > STRING_HASH_CACHE_MIN_STRLEN ? cachedHashString(o) : hashString(o);\n }\n if (typeof o.hashCode === 'function') {\n return o.hashCode();\n }\n if (type === 'object') {\n return hashJSObj(o);\n }\n if (typeof o.toString === 'function') {\n return hashString(o.toString());\n }\n throw new Error('Value type ' + type + ' cannot be hashed.');\n }\n\n function cachedHashString(string) {\n var hash = stringHashCache[string];\n if (hash === undefined) {\n hash = hashString(string);\n if (STRING_HASH_CACHE_SIZE === STRING_HASH_CACHE_MAX_SIZE) {\n STRING_HASH_CACHE_SIZE = 0;\n stringHashCache = {};\n }\n STRING_HASH_CACHE_SIZE++;\n stringHashCache[string] = hash;\n }\n return hash;\n }\n\n // http://jsperf.com/hashing-strings\n function hashString(string) {\n // This is the hash from JVM\n // The hash code for a string is computed as\n // s[0] * 31 ^ (n - 1) + s[1] * 31 ^ (n - 2) + ... + s[n - 1],\n // where s[i] is the ith character of the string and n is the length of\n // the string. We \"mod\" the result to make it between 0 (inclusive) and 2^31\n // (exclusive) by dropping high bits.\n var hash = 0;\n for (var ii = 0; ii < string.length; ii++) {\n hash = 31 * hash + string.charCodeAt(ii) | 0;\n }\n return smi(hash);\n }\n\n function hashJSObj(obj) {\n var hash;\n if (usingWeakMap) {\n hash = weakMap.get(obj);\n if (hash !== undefined) {\n return hash;\n }\n }\n\n hash = obj[UID_HASH_KEY];\n if (hash !== undefined) {\n return hash;\n }\n\n if (!canDefineProperty) {\n hash = obj.propertyIsEnumerable && obj.propertyIsEnumerable[UID_HASH_KEY];\n if (hash !== undefined) {\n return hash;\n }\n\n hash = getIENodeHash(obj);\n if (hash !== undefined) {\n return hash;\n }\n }\n\n hash = ++objHashUID;\n if (objHashUID & 0x40000000) {\n objHashUID = 0;\n }\n\n if (usingWeakMap) {\n weakMap.set(obj, hash);\n } else if (isExtensible !== undefined && isExtensible(obj) === false) {\n throw new Error('Non-extensible objects are not allowed as keys.');\n } else if (canDefineProperty) {\n Object.defineProperty(obj, UID_HASH_KEY, {\n 'enumerable': false,\n 'configurable': false,\n 'writable': false,\n 'value': hash\n });\n } else if (obj.propertyIsEnumerable !== undefined &&\n obj.propertyIsEnumerable === obj.constructor.prototype.propertyIsEnumerable) {\n // Since we can't define a non-enumerable property on the object\n // we'll hijack one of the less-used non-enumerable properties to\n // save our hash on it. Since this is a function it will not show up in\n // `JSON.stringify` which is what we want.\n obj.propertyIsEnumerable = function() {\n return this.constructor.prototype.propertyIsEnumerable.apply(this, arguments);\n };\n obj.propertyIsEnumerable[UID_HASH_KEY] = hash;\n } else if (obj.nodeType !== undefined) {\n // At this point we couldn't get the IE `uniqueID` to use as a hash\n // and we couldn't use a non-enumerable property to exploit the\n // dontEnum bug so we simply add the `UID_HASH_KEY` on the node\n // itself.\n obj[UID_HASH_KEY] = hash;\n } else {\n throw new Error('Unable to set a non-enumerable property on object.');\n }\n\n return hash;\n }\n\n // Get references to ES5 object methods.\n var isExtensible = Object.isExtensible;\n\n // True if Object.defineProperty works as expected. IE8 fails this test.\n var canDefineProperty = (function() {\n try {\n Object.defineProperty({}, '@', {});\n return true;\n } catch (e) {\n return false;\n }\n }());\n\n // IE has a `uniqueID` property on DOM nodes. We can construct the hash from it\n // and avoid memory leaks from the IE cloneNode bug.\n function getIENodeHash(node) {\n if (node && node.nodeType > 0) {\n switch (node.nodeType) {\n case 1: // Element\n return node.uniqueID;\n case 9: // Document\n return node.documentElement && node.documentElement.uniqueID;\n }\n }\n }\n\n // If possible, use a WeakMap.\n var usingWeakMap = typeof WeakMap === 'function';\n var weakMap;\n if (usingWeakMap) {\n weakMap = new WeakMap();\n }\n\n var objHashUID = 0;\n\n var UID_HASH_KEY = '__immutablehash__';\n if (typeof Symbol === 'function') {\n UID_HASH_KEY = Symbol(UID_HASH_KEY);\n }\n\n var STRING_HASH_CACHE_MIN_STRLEN = 16;\n var STRING_HASH_CACHE_MAX_SIZE = 255;\n var STRING_HASH_CACHE_SIZE = 0;\n var stringHashCache = {};\n\n function assertNotInfinite(size) {\n invariant(\n size !== Infinity,\n 'Cannot perform this action with an infinite size.'\n );\n }\n\n createClass(Map, KeyedCollection);\n\n // @pragma Construction\n\n function Map(value) {\n return value === null || value === undefined ? emptyMap() :\n isMap(value) && !isOrdered(value) ? value :\n emptyMap().withMutations(function(map ) {\n var iter = KeyedIterable(value);\n assertNotInfinite(iter.size);\n iter.forEach(function(v, k) {return map.set(k, v)});\n });\n }\n\n Map.prototype.toString = function() {\n return this.__toString('Map {', '}');\n };\n\n // @pragma Access\n\n Map.prototype.get = function(k, notSetValue) {\n return this._root ?\n this._root.get(0, undefined, k, notSetValue) :\n notSetValue;\n };\n\n // @pragma Modification\n\n Map.prototype.set = function(k, v) {\n return updateMap(this, k, v);\n };\n\n Map.prototype.setIn = function(keyPath, v) {\n return this.updateIn(keyPath, NOT_SET, function() {return v});\n };\n\n Map.prototype.remove = function(k) {\n return updateMap(this, k, NOT_SET);\n };\n\n Map.prototype.deleteIn = function(keyPath) {\n return this.updateIn(keyPath, function() {return NOT_SET});\n };\n\n Map.prototype.update = function(k, notSetValue, updater) {\n return arguments.length === 1 ?\n k(this) :\n this.updateIn([k], notSetValue, updater);\n };\n\n Map.prototype.updateIn = function(keyPath, notSetValue, updater) {\n if (!updater) {\n updater = notSetValue;\n notSetValue = undefined;\n }\n var updatedValue = updateInDeepMap(\n this,\n forceIterator(keyPath),\n notSetValue,\n updater\n );\n return updatedValue === NOT_SET ? undefined : updatedValue;\n };\n\n Map.prototype.clear = function() {\n if (this.size === 0) {\n return this;\n }\n if (this.__ownerID) {\n this.size = 0;\n this._root = null;\n this.__hash = undefined;\n this.__altered = true;\n return this;\n }\n return emptyMap();\n };\n\n // @pragma Composition\n\n Map.prototype.merge = function(/*...iters*/) {\n return mergeIntoMapWith(this, undefined, arguments);\n };\n\n Map.prototype.mergeWith = function(merger) {var iters = SLICE$0.call(arguments, 1);\n return mergeIntoMapWith(this, merger, iters);\n };\n\n Map.prototype.mergeIn = function(keyPath) {var iters = SLICE$0.call(arguments, 1);\n return this.updateIn(\n keyPath,\n emptyMap(),\n function(m ) {return typeof m.merge === 'function' ?\n m.merge.apply(m, iters) :\n iters[iters.length - 1]}\n );\n };\n\n Map.prototype.mergeDeep = function(/*...iters*/) {\n return mergeIntoMapWith(this, deepMerger, arguments);\n };\n\n Map.prototype.mergeDeepWith = function(merger) {var iters = SLICE$0.call(arguments, 1);\n return mergeIntoMapWith(this, deepMergerWith(merger), iters);\n };\n\n Map.prototype.mergeDeepIn = function(keyPath) {var iters = SLICE$0.call(arguments, 1);\n return this.updateIn(\n keyPath,\n emptyMap(),\n function(m ) {return typeof m.mergeDeep === 'function' ?\n m.mergeDeep.apply(m, iters) :\n iters[iters.length - 1]}\n );\n };\n\n Map.prototype.sort = function(comparator) {\n // Late binding\n return OrderedMap(sortFactory(this, comparator));\n };\n\n Map.prototype.sortBy = function(mapper, comparator) {\n // Late binding\n return OrderedMap(sortFactory(this, comparator, mapper));\n };\n\n // @pragma Mutability\n\n Map.prototype.withMutations = function(fn) {\n var mutable = this.asMutable();\n fn(mutable);\n return mutable.wasAltered() ? mutable.__ensureOwner(this.__ownerID) : this;\n };\n\n Map.prototype.asMutable = function() {\n return this.__ownerID ? this : this.__ensureOwner(new OwnerID());\n };\n\n Map.prototype.asImmutable = function() {\n return this.__ensureOwner();\n };\n\n Map.prototype.wasAltered = function() {\n return this.__altered;\n };\n\n Map.prototype.__iterator = function(type, reverse) {\n return new MapIterator(this, type, reverse);\n };\n\n Map.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n var iterations = 0;\n this._root && this._root.iterate(function(entry ) {\n iterations++;\n return fn(entry[1], entry[0], this$0);\n }, reverse);\n return iterations;\n };\n\n Map.prototype.__ensureOwner = function(ownerID) {\n if (ownerID === this.__ownerID) {\n return this;\n }\n if (!ownerID) {\n this.__ownerID = ownerID;\n this.__altered = false;\n return this;\n }\n return makeMap(this.size, this._root, ownerID, this.__hash);\n };\n\n\n function isMap(maybeMap) {\n return !!(maybeMap && maybeMap[IS_MAP_SENTINEL]);\n }\n\n Map.isMap = isMap;\n\n var IS_MAP_SENTINEL = '@@__IMMUTABLE_MAP__@@';\n\n var MapPrototype = Map.prototype;\n MapPrototype[IS_MAP_SENTINEL] = true;\n MapPrototype[DELETE] = MapPrototype.remove;\n MapPrototype.removeIn = MapPrototype.deleteIn;\n\n\n // #pragma Trie Nodes\n\n\n\n function ArrayMapNode(ownerID, entries) {\n this.ownerID = ownerID;\n this.entries = entries;\n }\n\n ArrayMapNode.prototype.get = function(shift, keyHash, key, notSetValue) {\n var entries = this.entries;\n for (var ii = 0, len = entries.length; ii < len; ii++) {\n if (is(key, entries[ii][0])) {\n return entries[ii][1];\n }\n }\n return notSetValue;\n };\n\n ArrayMapNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n var removed = value === NOT_SET;\n\n var entries = this.entries;\n var idx = 0;\n for (var len = entries.length; idx < len; idx++) {\n if (is(key, entries[idx][0])) {\n break;\n }\n }\n var exists = idx < len;\n\n if (exists ? entries[idx][1] === value : removed) {\n return this;\n }\n\n SetRef(didAlter);\n (removed || !exists) && SetRef(didChangeSize);\n\n if (removed && entries.length === 1) {\n return; // undefined\n }\n\n if (!exists && !removed && entries.length >= MAX_ARRAY_MAP_SIZE) {\n return createNodes(ownerID, entries, key, value);\n }\n\n var isEditable = ownerID && ownerID === this.ownerID;\n var newEntries = isEditable ? entries : arrCopy(entries);\n\n if (exists) {\n if (removed) {\n idx === len - 1 ? newEntries.pop() : (newEntries[idx] = newEntries.pop());\n } else {\n newEntries[idx] = [key, value];\n }\n } else {\n newEntries.push([key, value]);\n }\n\n if (isEditable) {\n this.entries = newEntries;\n return this;\n }\n\n return new ArrayMapNode(ownerID, newEntries);\n };\n\n\n\n\n function BitmapIndexedNode(ownerID, bitmap, nodes) {\n this.ownerID = ownerID;\n this.bitmap = bitmap;\n this.nodes = nodes;\n }\n\n BitmapIndexedNode.prototype.get = function(shift, keyHash, key, notSetValue) {\n if (keyHash === undefined) {\n keyHash = hash(key);\n }\n var bit = (1 << ((shift === 0 ? keyHash : keyHash >>> shift) & MASK));\n var bitmap = this.bitmap;\n return (bitmap & bit) === 0 ? notSetValue :\n this.nodes[popCount(bitmap & (bit - 1))].get(shift + SHIFT, keyHash, key, notSetValue);\n };\n\n BitmapIndexedNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n if (keyHash === undefined) {\n keyHash = hash(key);\n }\n var keyHashFrag = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n var bit = 1 << keyHashFrag;\n var bitmap = this.bitmap;\n var exists = (bitmap & bit) !== 0;\n\n if (!exists && value === NOT_SET) {\n return this;\n }\n\n var idx = popCount(bitmap & (bit - 1));\n var nodes = this.nodes;\n var node = exists ? nodes[idx] : undefined;\n var newNode = updateNode(node, ownerID, shift + SHIFT, keyHash, key, value, didChangeSize, didAlter);\n\n if (newNode === node) {\n return this;\n }\n\n if (!exists && newNode && nodes.length >= MAX_BITMAP_INDEXED_SIZE) {\n return expandNodes(ownerID, nodes, bitmap, keyHashFrag, newNode);\n }\n\n if (exists && !newNode && nodes.length === 2 && isLeafNode(nodes[idx ^ 1])) {\n return nodes[idx ^ 1];\n }\n\n if (exists && newNode && nodes.length === 1 && isLeafNode(newNode)) {\n return newNode;\n }\n\n var isEditable = ownerID && ownerID === this.ownerID;\n var newBitmap = exists ? newNode ? bitmap : bitmap ^ bit : bitmap | bit;\n var newNodes = exists ? newNode ?\n setIn(nodes, idx, newNode, isEditable) :\n spliceOut(nodes, idx, isEditable) :\n spliceIn(nodes, idx, newNode, isEditable);\n\n if (isEditable) {\n this.bitmap = newBitmap;\n this.nodes = newNodes;\n return this;\n }\n\n return new BitmapIndexedNode(ownerID, newBitmap, newNodes);\n };\n\n\n\n\n function HashArrayMapNode(ownerID, count, nodes) {\n this.ownerID = ownerID;\n this.count = count;\n this.nodes = nodes;\n }\n\n HashArrayMapNode.prototype.get = function(shift, keyHash, key, notSetValue) {\n if (keyHash === undefined) {\n keyHash = hash(key);\n }\n var idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n var node = this.nodes[idx];\n return node ? node.get(shift + SHIFT, keyHash, key, notSetValue) : notSetValue;\n };\n\n HashArrayMapNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n if (keyHash === undefined) {\n keyHash = hash(key);\n }\n var idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n var removed = value === NOT_SET;\n var nodes = this.nodes;\n var node = nodes[idx];\n\n if (removed && !node) {\n return this;\n }\n\n var newNode = updateNode(node, ownerID, shift + SHIFT, keyHash, key, value, didChangeSize, didAlter);\n if (newNode === node) {\n return this;\n }\n\n var newCount = this.count;\n if (!node) {\n newCount++;\n } else if (!newNode) {\n newCount--;\n if (newCount < MIN_HASH_ARRAY_MAP_SIZE) {\n return packNodes(ownerID, nodes, newCount, idx);\n }\n }\n\n var isEditable = ownerID && ownerID === this.ownerID;\n var newNodes = setIn(nodes, idx, newNode, isEditable);\n\n if (isEditable) {\n this.count = newCount;\n this.nodes = newNodes;\n return this;\n }\n\n return new HashArrayMapNode(ownerID, newCount, newNodes);\n };\n\n\n\n\n function HashCollisionNode(ownerID, keyHash, entries) {\n this.ownerID = ownerID;\n this.keyHash = keyHash;\n this.entries = entries;\n }\n\n HashCollisionNode.prototype.get = function(shift, keyHash, key, notSetValue) {\n var entries = this.entries;\n for (var ii = 0, len = entries.length; ii < len; ii++) {\n if (is(key, entries[ii][0])) {\n return entries[ii][1];\n }\n }\n return notSetValue;\n };\n\n HashCollisionNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n if (keyHash === undefined) {\n keyHash = hash(key);\n }\n\n var removed = value === NOT_SET;\n\n if (keyHash !== this.keyHash) {\n if (removed) {\n return this;\n }\n SetRef(didAlter);\n SetRef(didChangeSize);\n return mergeIntoNode(this, ownerID, shift, keyHash, [key, value]);\n }\n\n var entries = this.entries;\n var idx = 0;\n for (var len = entries.length; idx < len; idx++) {\n if (is(key, entries[idx][0])) {\n break;\n }\n }\n var exists = idx < len;\n\n if (exists ? entries[idx][1] === value : removed) {\n return this;\n }\n\n SetRef(didAlter);\n (removed || !exists) && SetRef(didChangeSize);\n\n if (removed && len === 2) {\n return new ValueNode(ownerID, this.keyHash, entries[idx ^ 1]);\n }\n\n var isEditable = ownerID && ownerID === this.ownerID;\n var newEntries = isEditable ? entries : arrCopy(entries);\n\n if (exists) {\n if (removed) {\n idx === len - 1 ? newEntries.pop() : (newEntries[idx] = newEntries.pop());\n } else {\n newEntries[idx] = [key, value];\n }\n } else {\n newEntries.push([key, value]);\n }\n\n if (isEditable) {\n this.entries = newEntries;\n return this;\n }\n\n return new HashCollisionNode(ownerID, this.keyHash, newEntries);\n };\n\n\n\n\n function ValueNode(ownerID, keyHash, entry) {\n this.ownerID = ownerID;\n this.keyHash = keyHash;\n this.entry = entry;\n }\n\n ValueNode.prototype.get = function(shift, keyHash, key, notSetValue) {\n return is(key, this.entry[0]) ? this.entry[1] : notSetValue;\n };\n\n ValueNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n var removed = value === NOT_SET;\n var keyMatch = is(key, this.entry[0]);\n if (keyMatch ? value === this.entry[1] : removed) {\n return this;\n }\n\n SetRef(didAlter);\n\n if (removed) {\n SetRef(didChangeSize);\n return; // undefined\n }\n\n if (keyMatch) {\n if (ownerID && ownerID === this.ownerID) {\n this.entry[1] = value;\n return this;\n }\n return new ValueNode(ownerID, this.keyHash, [key, value]);\n }\n\n SetRef(didChangeSize);\n return mergeIntoNode(this, ownerID, shift, hash(key), [key, value]);\n };\n\n\n\n // #pragma Iterators\n\n ArrayMapNode.prototype.iterate =\n HashCollisionNode.prototype.iterate = function (fn, reverse) {\n var entries = this.entries;\n for (var ii = 0, maxIndex = entries.length - 1; ii <= maxIndex; ii++) {\n if (fn(entries[reverse ? maxIndex - ii : ii]) === false) {\n return false;\n }\n }\n }\n\n BitmapIndexedNode.prototype.iterate =\n HashArrayMapNode.prototype.iterate = function (fn, reverse) {\n var nodes = this.nodes;\n for (var ii = 0, maxIndex = nodes.length - 1; ii <= maxIndex; ii++) {\n var node = nodes[reverse ? maxIndex - ii : ii];\n if (node && node.iterate(fn, reverse) === false) {\n return false;\n }\n }\n }\n\n ValueNode.prototype.iterate = function (fn, reverse) {\n return fn(this.entry);\n }\n\n createClass(MapIterator, Iterator);\n\n function MapIterator(map, type, reverse) {\n this._type = type;\n this._reverse = reverse;\n this._stack = map._root && mapIteratorFrame(map._root);\n }\n\n MapIterator.prototype.next = function() {\n var type = this._type;\n var stack = this._stack;\n while (stack) {\n var node = stack.node;\n var index = stack.index++;\n var maxIndex;\n if (node.entry) {\n if (index === 0) {\n return mapIteratorValue(type, node.entry);\n }\n } else if (node.entries) {\n maxIndex = node.entries.length - 1;\n if (index <= maxIndex) {\n return mapIteratorValue(type, node.entries[this._reverse ? maxIndex - index : index]);\n }\n } else {\n maxIndex = node.nodes.length - 1;\n if (index <= maxIndex) {\n var subNode = node.nodes[this._reverse ? maxIndex - index : index];\n if (subNode) {\n if (subNode.entry) {\n return mapIteratorValue(type, subNode.entry);\n }\n stack = this._stack = mapIteratorFrame(subNode, stack);\n }\n continue;\n }\n }\n stack = this._stack = this._stack.__prev;\n }\n return iteratorDone();\n };\n\n\n function mapIteratorValue(type, entry) {\n return iteratorValue(type, entry[0], entry[1]);\n }\n\n function mapIteratorFrame(node, prev) {\n return {\n node: node,\n index: 0,\n __prev: prev\n };\n }\n\n function makeMap(size, root, ownerID, hash) {\n var map = Object.create(MapPrototype);\n map.size = size;\n map._root = root;\n map.__ownerID = ownerID;\n map.__hash = hash;\n map.__altered = false;\n return map;\n }\n\n var EMPTY_MAP;\n function emptyMap() {\n return EMPTY_MAP || (EMPTY_MAP = makeMap(0));\n }\n\n function updateMap(map, k, v) {\n var newRoot;\n var newSize;\n if (!map._root) {\n if (v === NOT_SET) {\n return map;\n }\n newSize = 1;\n newRoot = new ArrayMapNode(map.__ownerID, [[k, v]]);\n } else {\n var didChangeSize = MakeRef(CHANGE_LENGTH);\n var didAlter = MakeRef(DID_ALTER);\n newRoot = updateNode(map._root, map.__ownerID, 0, undefined, k, v, didChangeSize, didAlter);\n if (!didAlter.value) {\n return map;\n }\n newSize = map.size + (didChangeSize.value ? v === NOT_SET ? -1 : 1 : 0);\n }\n if (map.__ownerID) {\n map.size = newSize;\n map._root = newRoot;\n map.__hash = undefined;\n map.__altered = true;\n return map;\n }\n return newRoot ? makeMap(newSize, newRoot) : emptyMap();\n }\n\n function updateNode(node, ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n if (!node) {\n if (value === NOT_SET) {\n return node;\n }\n SetRef(didAlter);\n SetRef(didChangeSize);\n return new ValueNode(ownerID, keyHash, [key, value]);\n }\n return node.update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter);\n }\n\n function isLeafNode(node) {\n return node.constructor === ValueNode || node.constructor === HashCollisionNode;\n }\n\n function mergeIntoNode(node, ownerID, shift, keyHash, entry) {\n if (node.keyHash === keyHash) {\n return new HashCollisionNode(ownerID, keyHash, [node.entry, entry]);\n }\n\n var idx1 = (shift === 0 ? node.keyHash : node.keyHash >>> shift) & MASK;\n var idx2 = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n\n var newNode;\n var nodes = idx1 === idx2 ?\n [mergeIntoNode(node, ownerID, shift + SHIFT, keyHash, entry)] :\n ((newNode = new ValueNode(ownerID, keyHash, entry)), idx1 < idx2 ? [node, newNode] : [newNode, node]);\n\n return new BitmapIndexedNode(ownerID, (1 << idx1) | (1 << idx2), nodes);\n }\n\n function createNodes(ownerID, entries, key, value) {\n if (!ownerID) {\n ownerID = new OwnerID();\n }\n var node = new ValueNode(ownerID, hash(key), [key, value]);\n for (var ii = 0; ii < entries.length; ii++) {\n var entry = entries[ii];\n node = node.update(ownerID, 0, undefined, entry[0], entry[1]);\n }\n return node;\n }\n\n function packNodes(ownerID, nodes, count, excluding) {\n var bitmap = 0;\n var packedII = 0;\n var packedNodes = new Array(count);\n for (var ii = 0, bit = 1, len = nodes.length; ii < len; ii++, bit <<= 1) {\n var node = nodes[ii];\n if (node !== undefined && ii !== excluding) {\n bitmap |= bit;\n packedNodes[packedII++] = node;\n }\n }\n return new BitmapIndexedNode(ownerID, bitmap, packedNodes);\n }\n\n function expandNodes(ownerID, nodes, bitmap, including, node) {\n var count = 0;\n var expandedNodes = new Array(SIZE);\n for (var ii = 0; bitmap !== 0; ii++, bitmap >>>= 1) {\n expandedNodes[ii] = bitmap & 1 ? nodes[count++] : undefined;\n }\n expandedNodes[including] = node;\n return new HashArrayMapNode(ownerID, count + 1, expandedNodes);\n }\n\n function mergeIntoMapWith(map, merger, iterables) {\n var iters = [];\n for (var ii = 0; ii < iterables.length; ii++) {\n var value = iterables[ii];\n var iter = KeyedIterable(value);\n if (!isIterable(value)) {\n iter = iter.map(function(v ) {return fromJS(v)});\n }\n iters.push(iter);\n }\n return mergeIntoCollectionWith(map, merger, iters);\n }\n\n function deepMerger(existing, value, key) {\n return existing && existing.mergeDeep && isIterable(value) ?\n existing.mergeDeep(value) :\n is(existing, value) ? existing : value;\n }\n\n function deepMergerWith(merger) {\n return function(existing, value, key) {\n if (existing && existing.mergeDeepWith && isIterable(value)) {\n return existing.mergeDeepWith(merger, value);\n }\n var nextValue = merger(existing, value, key);\n return is(existing, nextValue) ? existing : nextValue;\n };\n }\n\n function mergeIntoCollectionWith(collection, merger, iters) {\n iters = iters.filter(function(x ) {return x.size !== 0});\n if (iters.length === 0) {\n return collection;\n }\n if (collection.size === 0 && !collection.__ownerID && iters.length === 1) {\n return collection.constructor(iters[0]);\n }\n return collection.withMutations(function(collection ) {\n var mergeIntoMap = merger ?\n function(value, key) {\n collection.update(key, NOT_SET, function(existing )\n {return existing === NOT_SET ? value : merger(existing, value, key)}\n );\n } :\n function(value, key) {\n collection.set(key, value);\n }\n for (var ii = 0; ii < iters.length; ii++) {\n iters[ii].forEach(mergeIntoMap);\n }\n });\n }\n\n function updateInDeepMap(existing, keyPathIter, notSetValue, updater) {\n var isNotSet = existing === NOT_SET;\n var step = keyPathIter.next();\n if (step.done) {\n var existingValue = isNotSet ? notSetValue : existing;\n var newValue = updater(existingValue);\n return newValue === existingValue ? existing : newValue;\n }\n invariant(\n isNotSet || (existing && existing.set),\n 'invalid keyPath'\n );\n var key = step.value;\n var nextExisting = isNotSet ? NOT_SET : existing.get(key, NOT_SET);\n var nextUpdated = updateInDeepMap(\n nextExisting,\n keyPathIter,\n notSetValue,\n updater\n );\n return nextUpdated === nextExisting ? existing :\n nextUpdated === NOT_SET ? existing.remove(key) :\n (isNotSet ? emptyMap() : existing).set(key, nextUpdated);\n }\n\n function popCount(x) {\n x = x - ((x >> 1) & 0x55555555);\n x = (x & 0x33333333) + ((x >> 2) & 0x33333333);\n x = (x + (x >> 4)) & 0x0f0f0f0f;\n x = x + (x >> 8);\n x = x + (x >> 16);\n return x & 0x7f;\n }\n\n function setIn(array, idx, val, canEdit) {\n var newArray = canEdit ? array : arrCopy(array);\n newArray[idx] = val;\n return newArray;\n }\n\n function spliceIn(array, idx, val, canEdit) {\n var newLen = array.length + 1;\n if (canEdit && idx + 1 === newLen) {\n array[idx] = val;\n return array;\n }\n var newArray = new Array(newLen);\n var after = 0;\n for (var ii = 0; ii < newLen; ii++) {\n if (ii === idx) {\n newArray[ii] = val;\n after = -1;\n } else {\n newArray[ii] = array[ii + after];\n }\n }\n return newArray;\n }\n\n function spliceOut(array, idx, canEdit) {\n var newLen = array.length - 1;\n if (canEdit && idx === newLen) {\n array.pop();\n return array;\n }\n var newArray = new Array(newLen);\n var after = 0;\n for (var ii = 0; ii < newLen; ii++) {\n if (ii === idx) {\n after = 1;\n }\n newArray[ii] = array[ii + after];\n }\n return newArray;\n }\n\n var MAX_ARRAY_MAP_SIZE = SIZE / 4;\n var MAX_BITMAP_INDEXED_SIZE = SIZE / 2;\n var MIN_HASH_ARRAY_MAP_SIZE = SIZE / 4;\n\n createClass(List, IndexedCollection);\n\n // @pragma Construction\n\n function List(value) {\n var empty = emptyList();\n if (value === null || value === undefined) {\n return empty;\n }\n if (isList(value)) {\n return value;\n }\n var iter = IndexedIterable(value);\n var size = iter.size;\n if (size === 0) {\n return empty;\n }\n assertNotInfinite(size);\n if (size > 0 && size < SIZE) {\n return makeList(0, size, SHIFT, null, new VNode(iter.toArray()));\n }\n return empty.withMutations(function(list ) {\n list.setSize(size);\n iter.forEach(function(v, i) {return list.set(i, v)});\n });\n }\n\n List.of = function(/*...values*/) {\n return this(arguments);\n };\n\n List.prototype.toString = function() {\n return this.__toString('List [', ']');\n };\n\n // @pragma Access\n\n List.prototype.get = function(index, notSetValue) {\n index = wrapIndex(this, index);\n if (index >= 0 && index < this.size) {\n index += this._origin;\n var node = listNodeFor(this, index);\n return node && node.array[index & MASK];\n }\n return notSetValue;\n };\n\n // @pragma Modification\n\n List.prototype.set = function(index, value) {\n return updateList(this, index, value);\n };\n\n List.prototype.remove = function(index) {\n return !this.has(index) ? this :\n index === 0 ? this.shift() :\n index === this.size - 1 ? this.pop() :\n this.splice(index, 1);\n };\n\n List.prototype.insert = function(index, value) {\n return this.splice(index, 0, value);\n };\n\n List.prototype.clear = function() {\n if (this.size === 0) {\n return this;\n }\n if (this.__ownerID) {\n this.size = this._origin = this._capacity = 0;\n this._level = SHIFT;\n this._root = this._tail = null;\n this.__hash = undefined;\n this.__altered = true;\n return this;\n }\n return emptyList();\n };\n\n List.prototype.push = function(/*...values*/) {\n var values = arguments;\n var oldSize = this.size;\n return this.withMutations(function(list ) {\n setListBounds(list, 0, oldSize + values.length);\n for (var ii = 0; ii < values.length; ii++) {\n list.set(oldSize + ii, values[ii]);\n }\n });\n };\n\n List.prototype.pop = function() {\n return setListBounds(this, 0, -1);\n };\n\n List.prototype.unshift = function(/*...values*/) {\n var values = arguments;\n return this.withMutations(function(list ) {\n setListBounds(list, -values.length);\n for (var ii = 0; ii < values.length; ii++) {\n list.set(ii, values[ii]);\n }\n });\n };\n\n List.prototype.shift = function() {\n return setListBounds(this, 1);\n };\n\n // @pragma Composition\n\n List.prototype.merge = function(/*...iters*/) {\n return mergeIntoListWith(this, undefined, arguments);\n };\n\n List.prototype.mergeWith = function(merger) {var iters = SLICE$0.call(arguments, 1);\n return mergeIntoListWith(this, merger, iters);\n };\n\n List.prototype.mergeDeep = function(/*...iters*/) {\n return mergeIntoListWith(this, deepMerger, arguments);\n };\n\n List.prototype.mergeDeepWith = function(merger) {var iters = SLICE$0.call(arguments, 1);\n return mergeIntoListWith(this, deepMergerWith(merger), iters);\n };\n\n List.prototype.setSize = function(size) {\n return setListBounds(this, 0, size);\n };\n\n // @pragma Iteration\n\n List.prototype.slice = function(begin, end) {\n var size = this.size;\n if (wholeSlice(begin, end, size)) {\n return this;\n }\n return setListBounds(\n this,\n resolveBegin(begin, size),\n resolveEnd(end, size)\n );\n };\n\n List.prototype.__iterator = function(type, reverse) {\n var index = 0;\n var values = iterateList(this, reverse);\n return new Iterator(function() {\n var value = values();\n return value === DONE ?\n iteratorDone() :\n iteratorValue(type, index++, value);\n });\n };\n\n List.prototype.__iterate = function(fn, reverse) {\n var index = 0;\n var values = iterateList(this, reverse);\n var value;\n while ((value = values()) !== DONE) {\n if (fn(value, index++, this) === false) {\n break;\n }\n }\n return index;\n };\n\n List.prototype.__ensureOwner = function(ownerID) {\n if (ownerID === this.__ownerID) {\n return this;\n }\n if (!ownerID) {\n this.__ownerID = ownerID;\n return this;\n }\n return makeList(this._origin, this._capacity, this._level, this._root, this._tail, ownerID, this.__hash);\n };\n\n\n function isList(maybeList) {\n return !!(maybeList && maybeList[IS_LIST_SENTINEL]);\n }\n\n List.isList = isList;\n\n var IS_LIST_SENTINEL = '@@__IMMUTABLE_LIST__@@';\n\n var ListPrototype = List.prototype;\n ListPrototype[IS_LIST_SENTINEL] = true;\n ListPrototype[DELETE] = ListPrototype.remove;\n ListPrototype.setIn = MapPrototype.setIn;\n ListPrototype.deleteIn =\n ListPrototype.removeIn = MapPrototype.removeIn;\n ListPrototype.update = MapPrototype.update;\n ListPrototype.updateIn = MapPrototype.updateIn;\n ListPrototype.mergeIn = MapPrototype.mergeIn;\n ListPrototype.mergeDeepIn = MapPrototype.mergeDeepIn;\n ListPrototype.withMutations = MapPrototype.withMutations;\n ListPrototype.asMutable = MapPrototype.asMutable;\n ListPrototype.asImmutable = MapPrototype.asImmutable;\n ListPrototype.wasAltered = MapPrototype.wasAltered;\n\n\n\n function VNode(array, ownerID) {\n this.array = array;\n this.ownerID = ownerID;\n }\n\n // TODO: seems like these methods are very similar\n\n VNode.prototype.removeBefore = function(ownerID, level, index) {\n if (index === level ? 1 << level : 0 || this.array.length === 0) {\n return this;\n }\n var originIndex = (index >>> level) & MASK;\n if (originIndex >= this.array.length) {\n return new VNode([], ownerID);\n }\n var removingFirst = originIndex === 0;\n var newChild;\n if (level > 0) {\n var oldChild = this.array[originIndex];\n newChild = oldChild && oldChild.removeBefore(ownerID, level - SHIFT, index);\n if (newChild === oldChild && removingFirst) {\n return this;\n }\n }\n if (removingFirst && !newChild) {\n return this;\n }\n var editable = editableVNode(this, ownerID);\n if (!removingFirst) {\n for (var ii = 0; ii < originIndex; ii++) {\n editable.array[ii] = undefined;\n }\n }\n if (newChild) {\n editable.array[originIndex] = newChild;\n }\n return editable;\n };\n\n VNode.prototype.removeAfter = function(ownerID, level, index) {\n if (index === (level ? 1 << level : 0) || this.array.length === 0) {\n return this;\n }\n var sizeIndex = ((index - 1) >>> level) & MASK;\n if (sizeIndex >= this.array.length) {\n return this;\n }\n\n var newChild;\n if (level > 0) {\n var oldChild = this.array[sizeIndex];\n newChild = oldChild && oldChild.removeAfter(ownerID, level - SHIFT, index);\n if (newChild === oldChild && sizeIndex === this.array.length - 1) {\n return this;\n }\n }\n\n var editable = editableVNode(this, ownerID);\n editable.array.splice(sizeIndex + 1);\n if (newChild) {\n editable.array[sizeIndex] = newChild;\n }\n return editable;\n };\n\n\n\n var DONE = {};\n\n function iterateList(list, reverse) {\n var left = list._origin;\n var right = list._capacity;\n var tailPos = getTailOffset(right);\n var tail = list._tail;\n\n return iterateNodeOrLeaf(list._root, list._level, 0);\n\n function iterateNodeOrLeaf(node, level, offset) {\n return level === 0 ?\n iterateLeaf(node, offset) :\n iterateNode(node, level, offset);\n }\n\n function iterateLeaf(node, offset) {\n var array = offset === tailPos ? tail && tail.array : node && node.array;\n var from = offset > left ? 0 : left - offset;\n var to = right - offset;\n if (to > SIZE) {\n to = SIZE;\n }\n return function() {\n if (from === to) {\n return DONE;\n }\n var idx = reverse ? --to : from++;\n return array && array[idx];\n };\n }\n\n function iterateNode(node, level, offset) {\n var values;\n var array = node && node.array;\n var from = offset > left ? 0 : (left - offset) >> level;\n var to = ((right - offset) >> level) + 1;\n if (to > SIZE) {\n to = SIZE;\n }\n return function() {\n do {\n if (values) {\n var value = values();\n if (value !== DONE) {\n return value;\n }\n values = null;\n }\n if (from === to) {\n return DONE;\n }\n var idx = reverse ? --to : from++;\n values = iterateNodeOrLeaf(\n array && array[idx], level - SHIFT, offset + (idx << level)\n );\n } while (true);\n };\n }\n }\n\n function makeList(origin, capacity, level, root, tail, ownerID, hash) {\n var list = Object.create(ListPrototype);\n list.size = capacity - origin;\n list._origin = origin;\n list._capacity = capacity;\n list._level = level;\n list._root = root;\n list._tail = tail;\n list.__ownerID = ownerID;\n list.__hash = hash;\n list.__altered = false;\n return list;\n }\n\n var EMPTY_LIST;\n function emptyList() {\n return EMPTY_LIST || (EMPTY_LIST = makeList(0, 0, SHIFT));\n }\n\n function updateList(list, index, value) {\n index = wrapIndex(list, index);\n\n if (index !== index) {\n return list;\n }\n\n if (index >= list.size || index < 0) {\n return list.withMutations(function(list ) {\n index < 0 ?\n setListBounds(list, index).set(0, value) :\n setListBounds(list, 0, index + 1).set(index, value)\n });\n }\n\n index += list._origin;\n\n var newTail = list._tail;\n var newRoot = list._root;\n var didAlter = MakeRef(DID_ALTER);\n if (index >= getTailOffset(list._capacity)) {\n newTail = updateVNode(newTail, list.__ownerID, 0, index, value, didAlter);\n } else {\n newRoot = updateVNode(newRoot, list.__ownerID, list._level, index, value, didAlter);\n }\n\n if (!didAlter.value) {\n return list;\n }\n\n if (list.__ownerID) {\n list._root = newRoot;\n list._tail = newTail;\n list.__hash = undefined;\n list.__altered = true;\n return list;\n }\n return makeList(list._origin, list._capacity, list._level, newRoot, newTail);\n }\n\n function updateVNode(node, ownerID, level, index, value, didAlter) {\n var idx = (index >>> level) & MASK;\n var nodeHas = node && idx < node.array.length;\n if (!nodeHas && value === undefined) {\n return node;\n }\n\n var newNode;\n\n if (level > 0) {\n var lowerNode = node && node.array[idx];\n var newLowerNode = updateVNode(lowerNode, ownerID, level - SHIFT, index, value, didAlter);\n if (newLowerNode === lowerNode) {\n return node;\n }\n newNode = editableVNode(node, ownerID);\n newNode.array[idx] = newLowerNode;\n return newNode;\n }\n\n if (nodeHas && node.array[idx] === value) {\n return node;\n }\n\n SetRef(didAlter);\n\n newNode = editableVNode(node, ownerID);\n if (value === undefined && idx === newNode.array.length - 1) {\n newNode.array.pop();\n } else {\n newNode.array[idx] = value;\n }\n return newNode;\n }\n\n function editableVNode(node, ownerID) {\n if (ownerID && node && ownerID === node.ownerID) {\n return node;\n }\n return new VNode(node ? node.array.slice() : [], ownerID);\n }\n\n function listNodeFor(list, rawIndex) {\n if (rawIndex >= getTailOffset(list._capacity)) {\n return list._tail;\n }\n if (rawIndex < 1 << (list._level + SHIFT)) {\n var node = list._root;\n var level = list._level;\n while (node && level > 0) {\n node = node.array[(rawIndex >>> level) & MASK];\n level -= SHIFT;\n }\n return node;\n }\n }\n\n function setListBounds(list, begin, end) {\n // Sanitize begin & end using this shorthand for ToInt32(argument)\n // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32\n if (begin !== undefined) {\n begin = begin | 0;\n }\n if (end !== undefined) {\n end = end | 0;\n }\n var owner = list.__ownerID || new OwnerID();\n var oldOrigin = list._origin;\n var oldCapacity = list._capacity;\n var newOrigin = oldOrigin + begin;\n var newCapacity = end === undefined ? oldCapacity : end < 0 ? oldCapacity + end : oldOrigin + end;\n if (newOrigin === oldOrigin && newCapacity === oldCapacity) {\n return list;\n }\n\n // If it's going to end after it starts, it's empty.\n if (newOrigin >= newCapacity) {\n return list.clear();\n }\n\n var newLevel = list._level;\n var newRoot = list._root;\n\n // New origin might need creating a higher root.\n var offsetShift = 0;\n while (newOrigin + offsetShift < 0) {\n newRoot = new VNode(newRoot && newRoot.array.length ? [undefined, newRoot] : [], owner);\n newLevel += SHIFT;\n offsetShift += 1 << newLevel;\n }\n if (offsetShift) {\n newOrigin += offsetShift;\n oldOrigin += offsetShift;\n newCapacity += offsetShift;\n oldCapacity += offsetShift;\n }\n\n var oldTailOffset = getTailOffset(oldCapacity);\n var newTailOffset = getTailOffset(newCapacity);\n\n // New size might need creating a higher root.\n while (newTailOffset >= 1 << (newLevel + SHIFT)) {\n newRoot = new VNode(newRoot && newRoot.array.length ? [newRoot] : [], owner);\n newLevel += SHIFT;\n }\n\n // Locate or create the new tail.\n var oldTail = list._tail;\n var newTail = newTailOffset < oldTailOffset ?\n listNodeFor(list, newCapacity - 1) :\n newTailOffset > oldTailOffset ? new VNode([], owner) : oldTail;\n\n // Merge Tail into tree.\n if (oldTail && newTailOffset > oldTailOffset && newOrigin < oldCapacity && oldTail.array.length) {\n newRoot = editableVNode(newRoot, owner);\n var node = newRoot;\n for (var level = newLevel; level > SHIFT; level -= SHIFT) {\n var idx = (oldTailOffset >>> level) & MASK;\n node = node.array[idx] = editableVNode(node.array[idx], owner);\n }\n node.array[(oldTailOffset >>> SHIFT) & MASK] = oldTail;\n }\n\n // If the size has been reduced, there's a chance the tail needs to be trimmed.\n if (newCapacity < oldCapacity) {\n newTail = newTail && newTail.removeAfter(owner, 0, newCapacity);\n }\n\n // If the new origin is within the tail, then we do not need a root.\n if (newOrigin >= newTailOffset) {\n newOrigin -= newTailOffset;\n newCapacity -= newTailOffset;\n newLevel = SHIFT;\n newRoot = null;\n newTail = newTail && newTail.removeBefore(owner, 0, newOrigin);\n\n // Otherwise, if the root has been trimmed, garbage collect.\n } else if (newOrigin > oldOrigin || newTailOffset < oldTailOffset) {\n offsetShift = 0;\n\n // Identify the new top root node of the subtree of the old root.\n while (newRoot) {\n var beginIndex = (newOrigin >>> newLevel) & MASK;\n if (beginIndex !== (newTailOffset >>> newLevel) & MASK) {\n break;\n }\n if (beginIndex) {\n offsetShift += (1 << newLevel) * beginIndex;\n }\n newLevel -= SHIFT;\n newRoot = newRoot.array[beginIndex];\n }\n\n // Trim the new sides of the new root.\n if (newRoot && newOrigin > oldOrigin) {\n newRoot = newRoot.removeBefore(owner, newLevel, newOrigin - offsetShift);\n }\n if (newRoot && newTailOffset < oldTailOffset) {\n newRoot = newRoot.removeAfter(owner, newLevel, newTailOffset - offsetShift);\n }\n if (offsetShift) {\n newOrigin -= offsetShift;\n newCapacity -= offsetShift;\n }\n }\n\n if (list.__ownerID) {\n list.size = newCapacity - newOrigin;\n list._origin = newOrigin;\n list._capacity = newCapacity;\n list._level = newLevel;\n list._root = newRoot;\n list._tail = newTail;\n list.__hash = undefined;\n list.__altered = true;\n return list;\n }\n return makeList(newOrigin, newCapacity, newLevel, newRoot, newTail);\n }\n\n function mergeIntoListWith(list, merger, iterables) {\n var iters = [];\n var maxSize = 0;\n for (var ii = 0; ii < iterables.length; ii++) {\n var value = iterables[ii];\n var iter = IndexedIterable(value);\n if (iter.size > maxSize) {\n maxSize = iter.size;\n }\n if (!isIterable(value)) {\n iter = iter.map(function(v ) {return fromJS(v)});\n }\n iters.push(iter);\n }\n if (maxSize > list.size) {\n list = list.setSize(maxSize);\n }\n return mergeIntoCollectionWith(list, merger, iters);\n }\n\n function getTailOffset(size) {\n return size < SIZE ? 0 : (((size - 1) >>> SHIFT) << SHIFT);\n }\n\n createClass(OrderedMap, Map);\n\n // @pragma Construction\n\n function OrderedMap(value) {\n return value === null || value === undefined ? emptyOrderedMap() :\n isOrderedMap(value) ? value :\n emptyOrderedMap().withMutations(function(map ) {\n var iter = KeyedIterable(value);\n assertNotInfinite(iter.size);\n iter.forEach(function(v, k) {return map.set(k, v)});\n });\n }\n\n OrderedMap.of = function(/*...values*/) {\n return this(arguments);\n };\n\n OrderedMap.prototype.toString = function() {\n return this.__toString('OrderedMap {', '}');\n };\n\n // @pragma Access\n\n OrderedMap.prototype.get = function(k, notSetValue) {\n var index = this._map.get(k);\n return index !== undefined ? this._list.get(index)[1] : notSetValue;\n };\n\n // @pragma Modification\n\n OrderedMap.prototype.clear = function() {\n if (this.size === 0) {\n return this;\n }\n if (this.__ownerID) {\n this.size = 0;\n this._map.clear();\n this._list.clear();\n return this;\n }\n return emptyOrderedMap();\n };\n\n OrderedMap.prototype.set = function(k, v) {\n return updateOrderedMap(this, k, v);\n };\n\n OrderedMap.prototype.remove = function(k) {\n return updateOrderedMap(this, k, NOT_SET);\n };\n\n OrderedMap.prototype.wasAltered = function() {\n return this._map.wasAltered() || this._list.wasAltered();\n };\n\n OrderedMap.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n return this._list.__iterate(\n function(entry ) {return entry && fn(entry[1], entry[0], this$0)},\n reverse\n );\n };\n\n OrderedMap.prototype.__iterator = function(type, reverse) {\n return this._list.fromEntrySeq().__iterator(type, reverse);\n };\n\n OrderedMap.prototype.__ensureOwner = function(ownerID) {\n if (ownerID === this.__ownerID) {\n return this;\n }\n var newMap = this._map.__ensureOwner(ownerID);\n var newList = this._list.__ensureOwner(ownerID);\n if (!ownerID) {\n this.__ownerID = ownerID;\n this._map = newMap;\n this._list = newList;\n return this;\n }\n return makeOrderedMap(newMap, newList, ownerID, this.__hash);\n };\n\n\n function isOrderedMap(maybeOrderedMap) {\n return isMap(maybeOrderedMap) && isOrdered(maybeOrderedMap);\n }\n\n OrderedMap.isOrderedMap = isOrderedMap;\n\n OrderedMap.prototype[IS_ORDERED_SENTINEL] = true;\n OrderedMap.prototype[DELETE] = OrderedMap.prototype.remove;\n\n\n\n function makeOrderedMap(map, list, ownerID, hash) {\n var omap = Object.create(OrderedMap.prototype);\n omap.size = map ? map.size : 0;\n omap._map = map;\n omap._list = list;\n omap.__ownerID = ownerID;\n omap.__hash = hash;\n return omap;\n }\n\n var EMPTY_ORDERED_MAP;\n function emptyOrderedMap() {\n return EMPTY_ORDERED_MAP || (EMPTY_ORDERED_MAP = makeOrderedMap(emptyMap(), emptyList()));\n }\n\n function updateOrderedMap(omap, k, v) {\n var map = omap._map;\n var list = omap._list;\n var i = map.get(k);\n var has = i !== undefined;\n var newMap;\n var newList;\n if (v === NOT_SET) { // removed\n if (!has) {\n return omap;\n }\n if (list.size >= SIZE && list.size >= map.size * 2) {\n newList = list.filter(function(entry, idx) {return entry !== undefined && i !== idx});\n newMap = newList.toKeyedSeq().map(function(entry ) {return entry[0]}).flip().toMap();\n if (omap.__ownerID) {\n newMap.__ownerID = newList.__ownerID = omap.__ownerID;\n }\n } else {\n newMap = map.remove(k);\n newList = i === list.size - 1 ? list.pop() : list.set(i, undefined);\n }\n } else {\n if (has) {\n if (v === list.get(i)[1]) {\n return omap;\n }\n newMap = map;\n newList = list.set(i, [k, v]);\n } else {\n newMap = map.set(k, list.size);\n newList = list.set(list.size, [k, v]);\n }\n }\n if (omap.__ownerID) {\n omap.size = newMap.size;\n omap._map = newMap;\n omap._list = newList;\n omap.__hash = undefined;\n return omap;\n }\n return makeOrderedMap(newMap, newList);\n }\n\n createClass(ToKeyedSequence, KeyedSeq);\n function ToKeyedSequence(indexed, useKeys) {\n this._iter = indexed;\n this._useKeys = useKeys;\n this.size = indexed.size;\n }\n\n ToKeyedSequence.prototype.get = function(key, notSetValue) {\n return this._iter.get(key, notSetValue);\n };\n\n ToKeyedSequence.prototype.has = function(key) {\n return this._iter.has(key);\n };\n\n ToKeyedSequence.prototype.valueSeq = function() {\n return this._iter.valueSeq();\n };\n\n ToKeyedSequence.prototype.reverse = function() {var this$0 = this;\n var reversedSequence = reverseFactory(this, true);\n if (!this._useKeys) {\n reversedSequence.valueSeq = function() {return this$0._iter.toSeq().reverse()};\n }\n return reversedSequence;\n };\n\n ToKeyedSequence.prototype.map = function(mapper, context) {var this$0 = this;\n var mappedSequence = mapFactory(this, mapper, context);\n if (!this._useKeys) {\n mappedSequence.valueSeq = function() {return this$0._iter.toSeq().map(mapper, context)};\n }\n return mappedSequence;\n };\n\n ToKeyedSequence.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n var ii;\n return this._iter.__iterate(\n this._useKeys ?\n function(v, k) {return fn(v, k, this$0)} :\n ((ii = reverse ? resolveSize(this) : 0),\n function(v ) {return fn(v, reverse ? --ii : ii++, this$0)}),\n reverse\n );\n };\n\n ToKeyedSequence.prototype.__iterator = function(type, reverse) {\n if (this._useKeys) {\n return this._iter.__iterator(type, reverse);\n }\n var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n var ii = reverse ? resolveSize(this) : 0;\n return new Iterator(function() {\n var step = iterator.next();\n return step.done ? step :\n iteratorValue(type, reverse ? --ii : ii++, step.value, step);\n });\n };\n\n ToKeyedSequence.prototype[IS_ORDERED_SENTINEL] = true;\n\n\n createClass(ToIndexedSequence, IndexedSeq);\n function ToIndexedSequence(iter) {\n this._iter = iter;\n this.size = iter.size;\n }\n\n ToIndexedSequence.prototype.includes = function(value) {\n return this._iter.includes(value);\n };\n\n ToIndexedSequence.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n var iterations = 0;\n return this._iter.__iterate(function(v ) {return fn(v, iterations++, this$0)}, reverse);\n };\n\n ToIndexedSequence.prototype.__iterator = function(type, reverse) {\n var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n var iterations = 0;\n return new Iterator(function() {\n var step = iterator.next();\n return step.done ? step :\n iteratorValue(type, iterations++, step.value, step)\n });\n };\n\n\n\n createClass(ToSetSequence, SetSeq);\n function ToSetSequence(iter) {\n this._iter = iter;\n this.size = iter.size;\n }\n\n ToSetSequence.prototype.has = function(key) {\n return this._iter.includes(key);\n };\n\n ToSetSequence.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n return this._iter.__iterate(function(v ) {return fn(v, v, this$0)}, reverse);\n };\n\n ToSetSequence.prototype.__iterator = function(type, reverse) {\n var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n return new Iterator(function() {\n var step = iterator.next();\n return step.done ? step :\n iteratorValue(type, step.value, step.value, step);\n });\n };\n\n\n\n createClass(FromEntriesSequence, KeyedSeq);\n function FromEntriesSequence(entries) {\n this._iter = entries;\n this.size = entries.size;\n }\n\n FromEntriesSequence.prototype.entrySeq = function() {\n return this._iter.toSeq();\n };\n\n FromEntriesSequence.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n return this._iter.__iterate(function(entry ) {\n // Check if entry exists first so array access doesn't throw for holes\n // in the parent iteration.\n if (entry) {\n validateEntry(entry);\n var indexedIterable = isIterable(entry);\n return fn(\n indexedIterable ? entry.get(1) : entry[1],\n indexedIterable ? entry.get(0) : entry[0],\n this$0\n );\n }\n }, reverse);\n };\n\n FromEntriesSequence.prototype.__iterator = function(type, reverse) {\n var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n return new Iterator(function() {\n while (true) {\n var step = iterator.next();\n if (step.done) {\n return step;\n }\n var entry = step.value;\n // Check if entry exists first so array access doesn't throw for holes\n // in the parent iteration.\n if (entry) {\n validateEntry(entry);\n var indexedIterable = isIterable(entry);\n return iteratorValue(\n type,\n indexedIterable ? entry.get(0) : entry[0],\n indexedIterable ? entry.get(1) : entry[1],\n step\n );\n }\n }\n });\n };\n\n\n ToIndexedSequence.prototype.cacheResult =\n ToKeyedSequence.prototype.cacheResult =\n ToSetSequence.prototype.cacheResult =\n FromEntriesSequence.prototype.cacheResult =\n cacheResultThrough;\n\n\n function flipFactory(iterable) {\n var flipSequence = makeSequence(iterable);\n flipSequence._iter = iterable;\n flipSequence.size = iterable.size;\n flipSequence.flip = function() {return iterable};\n flipSequence.reverse = function () {\n var reversedSequence = iterable.reverse.apply(this); // super.reverse()\n reversedSequence.flip = function() {return iterable.reverse()};\n return reversedSequence;\n };\n flipSequence.has = function(key ) {return iterable.includes(key)};\n flipSequence.includes = function(key ) {return iterable.has(key)};\n flipSequence.cacheResult = cacheResultThrough;\n flipSequence.__iterateUncached = function (fn, reverse) {var this$0 = this;\n return iterable.__iterate(function(v, k) {return fn(k, v, this$0) !== false}, reverse);\n }\n flipSequence.__iteratorUncached = function(type, reverse) {\n if (type === ITERATE_ENTRIES) {\n var iterator = iterable.__iterator(type, reverse);\n return new Iterator(function() {\n var step = iterator.next();\n if (!step.done) {\n var k = step.value[0];\n step.value[0] = step.value[1];\n step.value[1] = k;\n }\n return step;\n });\n }\n return iterable.__iterator(\n type === ITERATE_VALUES ? ITERATE_KEYS : ITERATE_VALUES,\n reverse\n );\n }\n return flipSequence;\n }\n\n\n function mapFactory(iterable, mapper, context) {\n var mappedSequence = makeSequence(iterable);\n mappedSequence.size = iterable.size;\n mappedSequence.has = function(key ) {return iterable.has(key)};\n mappedSequence.get = function(key, notSetValue) {\n var v = iterable.get(key, NOT_SET);\n return v === NOT_SET ?\n notSetValue :\n mapper.call(context, v, key, iterable);\n };\n mappedSequence.__iterateUncached = function (fn, reverse) {var this$0 = this;\n return iterable.__iterate(\n function(v, k, c) {return fn(mapper.call(context, v, k, c), k, this$0) !== false},\n reverse\n );\n }\n mappedSequence.__iteratorUncached = function (type, reverse) {\n var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse);\n return new Iterator(function() {\n var step = iterator.next();\n if (step.done) {\n return step;\n }\n var entry = step.value;\n var key = entry[0];\n return iteratorValue(\n type,\n key,\n mapper.call(context, entry[1], key, iterable),\n step\n );\n });\n }\n return mappedSequence;\n }\n\n\n function reverseFactory(iterable, useKeys) {\n var reversedSequence = makeSequence(iterable);\n reversedSequence._iter = iterable;\n reversedSequence.size = iterable.size;\n reversedSequence.reverse = function() {return iterable};\n if (iterable.flip) {\n reversedSequence.flip = function () {\n var flipSequence = flipFactory(iterable);\n flipSequence.reverse = function() {return iterable.flip()};\n return flipSequence;\n };\n }\n reversedSequence.get = function(key, notSetValue) \n {return iterable.get(useKeys ? key : -1 - key, notSetValue)};\n reversedSequence.has = function(key )\n {return iterable.has(useKeys ? key : -1 - key)};\n reversedSequence.includes = function(value ) {return iterable.includes(value)};\n reversedSequence.cacheResult = cacheResultThrough;\n reversedSequence.__iterate = function (fn, reverse) {var this$0 = this;\n return iterable.__iterate(function(v, k) {return fn(v, k, this$0)}, !reverse);\n };\n reversedSequence.__iterator =\n function(type, reverse) {return iterable.__iterator(type, !reverse)};\n return reversedSequence;\n }\n\n\n function filterFactory(iterable, predicate, context, useKeys) {\n var filterSequence = makeSequence(iterable);\n if (useKeys) {\n filterSequence.has = function(key ) {\n var v = iterable.get(key, NOT_SET);\n return v !== NOT_SET && !!predicate.call(context, v, key, iterable);\n };\n filterSequence.get = function(key, notSetValue) {\n var v = iterable.get(key, NOT_SET);\n return v !== NOT_SET && predicate.call(context, v, key, iterable) ?\n v : notSetValue;\n };\n }\n filterSequence.__iterateUncached = function (fn, reverse) {var this$0 = this;\n var iterations = 0;\n iterable.__iterate(function(v, k, c) {\n if (predicate.call(context, v, k, c)) {\n iterations++;\n return fn(v, useKeys ? k : iterations - 1, this$0);\n }\n }, reverse);\n return iterations;\n };\n filterSequence.__iteratorUncached = function (type, reverse) {\n var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse);\n var iterations = 0;\n return new Iterator(function() {\n while (true) {\n var step = iterator.next();\n if (step.done) {\n return step;\n }\n var entry = step.value;\n var key = entry[0];\n var value = entry[1];\n if (predicate.call(context, value, key, iterable)) {\n return iteratorValue(type, useKeys ? key : iterations++, value, step);\n }\n }\n });\n }\n return filterSequence;\n }\n\n\n function countByFactory(iterable, grouper, context) {\n var groups = Map().asMutable();\n iterable.__iterate(function(v, k) {\n groups.update(\n grouper.call(context, v, k, iterable),\n 0,\n function(a ) {return a + 1}\n );\n });\n return groups.asImmutable();\n }\n\n\n function groupByFactory(iterable, grouper, context) {\n var isKeyedIter = isKeyed(iterable);\n var groups = (isOrdered(iterable) ? OrderedMap() : Map()).asMutable();\n iterable.__iterate(function(v, k) {\n groups.update(\n grouper.call(context, v, k, iterable),\n function(a ) {return (a = a || [], a.push(isKeyedIter ? [k, v] : v), a)}\n );\n });\n var coerce = iterableClass(iterable);\n return groups.map(function(arr ) {return reify(iterable, coerce(arr))});\n }\n\n\n function sliceFactory(iterable, begin, end, useKeys) {\n var originalSize = iterable.size;\n\n // Sanitize begin & end using this shorthand for ToInt32(argument)\n // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32\n if (begin !== undefined) {\n begin = begin | 0;\n }\n if (end !== undefined) {\n end = end | 0;\n }\n\n if (wholeSlice(begin, end, originalSize)) {\n return iterable;\n }\n\n var resolvedBegin = resolveBegin(begin, originalSize);\n var resolvedEnd = resolveEnd(end, originalSize);\n\n // begin or end will be NaN if they were provided as negative numbers and\n // this iterable's size is unknown. In that case, cache first so there is\n // a known size and these do not resolve to NaN.\n if (resolvedBegin !== resolvedBegin || resolvedEnd !== resolvedEnd) {\n return sliceFactory(iterable.toSeq().cacheResult(), begin, end, useKeys);\n }\n\n // Note: resolvedEnd is undefined when the original sequence's length is\n // unknown and this slice did not supply an end and should contain all\n // elements after resolvedBegin.\n // In that case, resolvedSize will be NaN and sliceSize will remain undefined.\n var resolvedSize = resolvedEnd - resolvedBegin;\n var sliceSize;\n if (resolvedSize === resolvedSize) {\n sliceSize = resolvedSize < 0 ? 0 : resolvedSize;\n }\n\n var sliceSeq = makeSequence(iterable);\n\n // If iterable.size is undefined, the size of the realized sliceSeq is\n // unknown at this point unless the number of items to slice is 0\n sliceSeq.size = sliceSize === 0 ? sliceSize : iterable.size && sliceSize || undefined;\n\n if (!useKeys && isSeq(iterable) && sliceSize >= 0) {\n sliceSeq.get = function (index, notSetValue) {\n index = wrapIndex(this, index);\n return index >= 0 && index < sliceSize ?\n iterable.get(index + resolvedBegin, notSetValue) :\n notSetValue;\n }\n }\n\n sliceSeq.__iterateUncached = function(fn, reverse) {var this$0 = this;\n if (sliceSize === 0) {\n return 0;\n }\n if (reverse) {\n return this.cacheResult().__iterate(fn, reverse);\n }\n var skipped = 0;\n var isSkipping = true;\n var iterations = 0;\n iterable.__iterate(function(v, k) {\n if (!(isSkipping && (isSkipping = skipped++ < resolvedBegin))) {\n iterations++;\n return fn(v, useKeys ? k : iterations - 1, this$0) !== false &&\n iterations !== sliceSize;\n }\n });\n return iterations;\n };\n\n sliceSeq.__iteratorUncached = function(type, reverse) {\n if (sliceSize !== 0 && reverse) {\n return this.cacheResult().__iterator(type, reverse);\n }\n // Don't bother instantiating parent iterator if taking 0.\n var iterator = sliceSize !== 0 && iterable.__iterator(type, reverse);\n var skipped = 0;\n var iterations = 0;\n return new Iterator(function() {\n while (skipped++ < resolvedBegin) {\n iterator.next();\n }\n if (++iterations > sliceSize) {\n return iteratorDone();\n }\n var step = iterator.next();\n if (useKeys || type === ITERATE_VALUES) {\n return step;\n } else if (type === ITERATE_KEYS) {\n return iteratorValue(type, iterations - 1, undefined, step);\n } else {\n return iteratorValue(type, iterations - 1, step.value[1], step);\n }\n });\n }\n\n return sliceSeq;\n }\n\n\n function takeWhileFactory(iterable, predicate, context) {\n var takeSequence = makeSequence(iterable);\n takeSequence.__iterateUncached = function(fn, reverse) {var this$0 = this;\n if (reverse) {\n return this.cacheResult().__iterate(fn, reverse);\n }\n var iterations = 0;\n iterable.__iterate(function(v, k, c) \n {return predicate.call(context, v, k, c) && ++iterations && fn(v, k, this$0)}\n );\n return iterations;\n };\n takeSequence.__iteratorUncached = function(type, reverse) {var this$0 = this;\n if (reverse) {\n return this.cacheResult().__iterator(type, reverse);\n }\n var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse);\n var iterating = true;\n return new Iterator(function() {\n if (!iterating) {\n return iteratorDone();\n }\n var step = iterator.next();\n if (step.done) {\n return step;\n }\n var entry = step.value;\n var k = entry[0];\n var v = entry[1];\n if (!predicate.call(context, v, k, this$0)) {\n iterating = false;\n return iteratorDone();\n }\n return type === ITERATE_ENTRIES ? step :\n iteratorValue(type, k, v, step);\n });\n };\n return takeSequence;\n }\n\n\n function skipWhileFactory(iterable, predicate, context, useKeys) {\n var skipSequence = makeSequence(iterable);\n skipSequence.__iterateUncached = function (fn, reverse) {var this$0 = this;\n if (reverse) {\n return this.cacheResult().__iterate(fn, reverse);\n }\n var isSkipping = true;\n var iterations = 0;\n iterable.__iterate(function(v, k, c) {\n if (!(isSkipping && (isSkipping = predicate.call(context, v, k, c)))) {\n iterations++;\n return fn(v, useKeys ? k : iterations - 1, this$0);\n }\n });\n return iterations;\n };\n skipSequence.__iteratorUncached = function(type, reverse) {var this$0 = this;\n if (reverse) {\n return this.cacheResult().__iterator(type, reverse);\n }\n var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse);\n var skipping = true;\n var iterations = 0;\n return new Iterator(function() {\n var step, k, v;\n do {\n step = iterator.next();\n if (step.done) {\n if (useKeys || type === ITERATE_VALUES) {\n return step;\n } else if (type === ITERATE_KEYS) {\n return iteratorValue(type, iterations++, undefined, step);\n } else {\n return iteratorValue(type, iterations++, step.value[1], step);\n }\n }\n var entry = step.value;\n k = entry[0];\n v = entry[1];\n skipping && (skipping = predicate.call(context, v, k, this$0));\n } while (skipping);\n return type === ITERATE_ENTRIES ? step :\n iteratorValue(type, k, v, step);\n });\n };\n return skipSequence;\n }\n\n\n function concatFactory(iterable, values) {\n var isKeyedIterable = isKeyed(iterable);\n var iters = [iterable].concat(values).map(function(v ) {\n if (!isIterable(v)) {\n v = isKeyedIterable ?\n keyedSeqFromValue(v) :\n indexedSeqFromValue(Array.isArray(v) ? v : [v]);\n } else if (isKeyedIterable) {\n v = KeyedIterable(v);\n }\n return v;\n }).filter(function(v ) {return v.size !== 0});\n\n if (iters.length === 0) {\n return iterable;\n }\n\n if (iters.length === 1) {\n var singleton = iters[0];\n if (singleton === iterable ||\n isKeyedIterable && isKeyed(singleton) ||\n isIndexed(iterable) && isIndexed(singleton)) {\n return singleton;\n }\n }\n\n var concatSeq = new ArraySeq(iters);\n if (isKeyedIterable) {\n concatSeq = concatSeq.toKeyedSeq();\n } else if (!isIndexed(iterable)) {\n concatSeq = concatSeq.toSetSeq();\n }\n concatSeq = concatSeq.flatten(true);\n concatSeq.size = iters.reduce(\n function(sum, seq) {\n if (sum !== undefined) {\n var size = seq.size;\n if (size !== undefined) {\n return sum + size;\n }\n }\n },\n 0\n );\n return concatSeq;\n }\n\n\n function flattenFactory(iterable, depth, useKeys) {\n var flatSequence = makeSequence(iterable);\n flatSequence.__iterateUncached = function(fn, reverse) {\n var iterations = 0;\n var stopped = false;\n function flatDeep(iter, currentDepth) {var this$0 = this;\n iter.__iterate(function(v, k) {\n if ((!depth || currentDepth < depth) && isIterable(v)) {\n flatDeep(v, currentDepth + 1);\n } else if (fn(v, useKeys ? k : iterations++, this$0) === false) {\n stopped = true;\n }\n return !stopped;\n }, reverse);\n }\n flatDeep(iterable, 0);\n return iterations;\n }\n flatSequence.__iteratorUncached = function(type, reverse) {\n var iterator = iterable.__iterator(type, reverse);\n var stack = [];\n var iterations = 0;\n return new Iterator(function() {\n while (iterator) {\n var step = iterator.next();\n if (step.done !== false) {\n iterator = stack.pop();\n continue;\n }\n var v = step.value;\n if (type === ITERATE_ENTRIES) {\n v = v[1];\n }\n if ((!depth || stack.length < depth) && isIterable(v)) {\n stack.push(iterator);\n iterator = v.__iterator(type, reverse);\n } else {\n return useKeys ? step : iteratorValue(type, iterations++, v, step);\n }\n }\n return iteratorDone();\n });\n }\n return flatSequence;\n }\n\n\n function flatMapFactory(iterable, mapper, context) {\n var coerce = iterableClass(iterable);\n return iterable.toSeq().map(\n function(v, k) {return coerce(mapper.call(context, v, k, iterable))}\n ).flatten(true);\n }\n\n\n function interposeFactory(iterable, separator) {\n var interposedSequence = makeSequence(iterable);\n interposedSequence.size = iterable.size && iterable.size * 2 -1;\n interposedSequence.__iterateUncached = function(fn, reverse) {var this$0 = this;\n var iterations = 0;\n iterable.__iterate(function(v, k) \n {return (!iterations || fn(separator, iterations++, this$0) !== false) &&\n fn(v, iterations++, this$0) !== false},\n reverse\n );\n return iterations;\n };\n interposedSequence.__iteratorUncached = function(type, reverse) {\n var iterator = iterable.__iterator(ITERATE_VALUES, reverse);\n var iterations = 0;\n var step;\n return new Iterator(function() {\n if (!step || iterations % 2) {\n step = iterator.next();\n if (step.done) {\n return step;\n }\n }\n return iterations % 2 ?\n iteratorValue(type, iterations++, separator) :\n iteratorValue(type, iterations++, step.value, step);\n });\n };\n return interposedSequence;\n }\n\n\n function sortFactory(iterable, comparator, mapper) {\n if (!comparator) {\n comparator = defaultComparator;\n }\n var isKeyedIterable = isKeyed(iterable);\n var index = 0;\n var entries = iterable.toSeq().map(\n function(v, k) {return [k, v, index++, mapper ? mapper(v, k, iterable) : v]}\n ).toArray();\n entries.sort(function(a, b) {return comparator(a[3], b[3]) || a[2] - b[2]}).forEach(\n isKeyedIterable ?\n function(v, i) { entries[i].length = 2; } :\n function(v, i) { entries[i] = v[1]; }\n );\n return isKeyedIterable ? KeyedSeq(entries) :\n isIndexed(iterable) ? IndexedSeq(entries) :\n SetSeq(entries);\n }\n\n\n function maxFactory(iterable, comparator, mapper) {\n if (!comparator) {\n comparator = defaultComparator;\n }\n if (mapper) {\n var entry = iterable.toSeq()\n .map(function(v, k) {return [v, mapper(v, k, iterable)]})\n .reduce(function(a, b) {return maxCompare(comparator, a[1], b[1]) ? b : a});\n return entry && entry[0];\n } else {\n return iterable.reduce(function(a, b) {return maxCompare(comparator, a, b) ? b : a});\n }\n }\n\n function maxCompare(comparator, a, b) {\n var comp = comparator(b, a);\n // b is considered the new max if the comparator declares them equal, but\n // they are not equal and b is in fact a nullish value.\n return (comp === 0 && b !== a && (b === undefined || b === null || b !== b)) || comp > 0;\n }\n\n\n function zipWithFactory(keyIter, zipper, iters) {\n var zipSequence = makeSequence(keyIter);\n zipSequence.size = new ArraySeq(iters).map(function(i ) {return i.size}).min();\n // Note: this a generic base implementation of __iterate in terms of\n // __iterator which may be more generically useful in the future.\n zipSequence.__iterate = function(fn, reverse) {\n /* generic:\n var iterator = this.__iterator(ITERATE_ENTRIES, reverse);\n var step;\n var iterations = 0;\n while (!(step = iterator.next()).done) {\n iterations++;\n if (fn(step.value[1], step.value[0], this) === false) {\n break;\n }\n }\n return iterations;\n */\n // indexed:\n var iterator = this.__iterator(ITERATE_VALUES, reverse);\n var step;\n var iterations = 0;\n while (!(step = iterator.next()).done) {\n if (fn(step.value, iterations++, this) === false) {\n break;\n }\n }\n return iterations;\n };\n zipSequence.__iteratorUncached = function(type, reverse) {\n var iterators = iters.map(function(i )\n {return (i = Iterable(i), getIterator(reverse ? i.reverse() : i))}\n );\n var iterations = 0;\n var isDone = false;\n return new Iterator(function() {\n var steps;\n if (!isDone) {\n steps = iterators.map(function(i ) {return i.next()});\n isDone = steps.some(function(s ) {return s.done});\n }\n if (isDone) {\n return iteratorDone();\n }\n return iteratorValue(\n type,\n iterations++,\n zipper.apply(null, steps.map(function(s ) {return s.value}))\n );\n });\n };\n return zipSequence\n }\n\n\n // #pragma Helper Functions\n\n function reify(iter, seq) {\n return isSeq(iter) ? seq : iter.constructor(seq);\n }\n\n function validateEntry(entry) {\n if (entry !== Object(entry)) {\n throw new TypeError('Expected [K, V] tuple: ' + entry);\n }\n }\n\n function resolveSize(iter) {\n assertNotInfinite(iter.size);\n return ensureSize(iter);\n }\n\n function iterableClass(iterable) {\n return isKeyed(iterable) ? KeyedIterable :\n isIndexed(iterable) ? IndexedIterable :\n SetIterable;\n }\n\n function makeSequence(iterable) {\n return Object.create(\n (\n isKeyed(iterable) ? KeyedSeq :\n isIndexed(iterable) ? IndexedSeq :\n SetSeq\n ).prototype\n );\n }\n\n function cacheResultThrough() {\n if (this._iter.cacheResult) {\n this._iter.cacheResult();\n this.size = this._iter.size;\n return this;\n } else {\n return Seq.prototype.cacheResult.call(this);\n }\n }\n\n function defaultComparator(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n }\n\n function forceIterator(keyPath) {\n var iter = getIterator(keyPath);\n if (!iter) {\n // Array might not be iterable in this environment, so we need a fallback\n // to our wrapped type.\n if (!isArrayLike(keyPath)) {\n throw new TypeError('Expected iterable or array-like: ' + keyPath);\n }\n iter = getIterator(Iterable(keyPath));\n }\n return iter;\n }\n\n createClass(Record, KeyedCollection);\n\n function Record(defaultValues, name) {\n var hasInitialized;\n\n var RecordType = function Record(values) {\n if (values instanceof RecordType) {\n return values;\n }\n if (!(this instanceof RecordType)) {\n return new RecordType(values);\n }\n if (!hasInitialized) {\n hasInitialized = true;\n var keys = Object.keys(defaultValues);\n setProps(RecordTypePrototype, keys);\n RecordTypePrototype.size = keys.length;\n RecordTypePrototype._name = name;\n RecordTypePrototype._keys = keys;\n RecordTypePrototype._defaultValues = defaultValues;\n }\n this._map = Map(values);\n };\n\n var RecordTypePrototype = RecordType.prototype = Object.create(RecordPrototype);\n RecordTypePrototype.constructor = RecordType;\n\n return RecordType;\n }\n\n Record.prototype.toString = function() {\n return this.__toString(recordName(this) + ' {', '}');\n };\n\n // @pragma Access\n\n Record.prototype.has = function(k) {\n return this._defaultValues.hasOwnProperty(k);\n };\n\n Record.prototype.get = function(k, notSetValue) {\n if (!this.has(k)) {\n return notSetValue;\n }\n var defaultVal = this._defaultValues[k];\n return this._map ? this._map.get(k, defaultVal) : defaultVal;\n };\n\n // @pragma Modification\n\n Record.prototype.clear = function() {\n if (this.__ownerID) {\n this._map && this._map.clear();\n return this;\n }\n var RecordType = this.constructor;\n return RecordType._empty || (RecordType._empty = makeRecord(this, emptyMap()));\n };\n\n Record.prototype.set = function(k, v) {\n if (!this.has(k)) {\n throw new Error('Cannot set unknown key \"' + k + '\" on ' + recordName(this));\n }\n var newMap = this._map && this._map.set(k, v);\n if (this.__ownerID || newMap === this._map) {\n return this;\n }\n return makeRecord(this, newMap);\n };\n\n Record.prototype.remove = function(k) {\n if (!this.has(k)) {\n return this;\n }\n var newMap = this._map && this._map.remove(k);\n if (this.__ownerID || newMap === this._map) {\n return this;\n }\n return makeRecord(this, newMap);\n };\n\n Record.prototype.wasAltered = function() {\n return this._map.wasAltered();\n };\n\n Record.prototype.__iterator = function(type, reverse) {var this$0 = this;\n return KeyedIterable(this._defaultValues).map(function(_, k) {return this$0.get(k)}).__iterator(type, reverse);\n };\n\n Record.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n return KeyedIterable(this._defaultValues).map(function(_, k) {return this$0.get(k)}).__iterate(fn, reverse);\n };\n\n Record.prototype.__ensureOwner = function(ownerID) {\n if (ownerID === this.__ownerID) {\n return this;\n }\n var newMap = this._map && this._map.__ensureOwner(ownerID);\n if (!ownerID) {\n this.__ownerID = ownerID;\n this._map = newMap;\n return this;\n }\n return makeRecord(this, newMap, ownerID);\n };\n\n\n var RecordPrototype = Record.prototype;\n RecordPrototype[DELETE] = RecordPrototype.remove;\n RecordPrototype.deleteIn =\n RecordPrototype.removeIn = MapPrototype.removeIn;\n RecordPrototype.merge = MapPrototype.merge;\n RecordPrototype.mergeWith = MapPrototype.mergeWith;\n RecordPrototype.mergeIn = MapPrototype.mergeIn;\n RecordPrototype.mergeDeep = MapPrototype.mergeDeep;\n RecordPrototype.mergeDeepWith = MapPrototype.mergeDeepWith;\n RecordPrototype.mergeDeepIn = MapPrototype.mergeDeepIn;\n RecordPrototype.setIn = MapPrototype.setIn;\n RecordPrototype.update = MapPrototype.update;\n RecordPrototype.updateIn = MapPrototype.updateIn;\n RecordPrototype.withMutations = MapPrototype.withMutations;\n RecordPrototype.asMutable = MapPrototype.asMutable;\n RecordPrototype.asImmutable = MapPrototype.asImmutable;\n\n\n function makeRecord(likeRecord, map, ownerID) {\n var record = Object.create(Object.getPrototypeOf(likeRecord));\n record._map = map;\n record.__ownerID = ownerID;\n return record;\n }\n\n function recordName(record) {\n return record._name || record.constructor.name || 'Record';\n }\n\n function setProps(prototype, names) {\n try {\n names.forEach(setProp.bind(undefined, prototype));\n } catch (error) {\n // Object.defineProperty failed. Probably IE8.\n }\n }\n\n function setProp(prototype, name) {\n Object.defineProperty(prototype, name, {\n get: function() {\n return this.get(name);\n },\n set: function(value) {\n invariant(this.__ownerID, 'Cannot set on an immutable record.');\n this.set(name, value);\n }\n });\n }\n\n createClass(Set, SetCollection);\n\n // @pragma Construction\n\n function Set(value) {\n return value === null || value === undefined ? emptySet() :\n isSet(value) && !isOrdered(value) ? value :\n emptySet().withMutations(function(set ) {\n var iter = SetIterable(value);\n assertNotInfinite(iter.size);\n iter.forEach(function(v ) {return set.add(v)});\n });\n }\n\n Set.of = function(/*...values*/) {\n return this(arguments);\n };\n\n Set.fromKeys = function(value) {\n return this(KeyedIterable(value).keySeq());\n };\n\n Set.prototype.toString = function() {\n return this.__toString('Set {', '}');\n };\n\n // @pragma Access\n\n Set.prototype.has = function(value) {\n return this._map.has(value);\n };\n\n // @pragma Modification\n\n Set.prototype.add = function(value) {\n return updateSet(this, this._map.set(value, true));\n };\n\n Set.prototype.remove = function(value) {\n return updateSet(this, this._map.remove(value));\n };\n\n Set.prototype.clear = function() {\n return updateSet(this, this._map.clear());\n };\n\n // @pragma Composition\n\n Set.prototype.union = function() {var iters = SLICE$0.call(arguments, 0);\n iters = iters.filter(function(x ) {return x.size !== 0});\n if (iters.length === 0) {\n return this;\n }\n if (this.size === 0 && !this.__ownerID && iters.length === 1) {\n return this.constructor(iters[0]);\n }\n return this.withMutations(function(set ) {\n for (var ii = 0; ii < iters.length; ii++) {\n SetIterable(iters[ii]).forEach(function(value ) {return set.add(value)});\n }\n });\n };\n\n Set.prototype.intersect = function() {var iters = SLICE$0.call(arguments, 0);\n if (iters.length === 0) {\n return this;\n }\n iters = iters.map(function(iter ) {return SetIterable(iter)});\n var originalSet = this;\n return this.withMutations(function(set ) {\n originalSet.forEach(function(value ) {\n if (!iters.every(function(iter ) {return iter.includes(value)})) {\n set.remove(value);\n }\n });\n });\n };\n\n Set.prototype.subtract = function() {var iters = SLICE$0.call(arguments, 0);\n if (iters.length === 0) {\n return this;\n }\n iters = iters.map(function(iter ) {return SetIterable(iter)});\n var originalSet = this;\n return this.withMutations(function(set ) {\n originalSet.forEach(function(value ) {\n if (iters.some(function(iter ) {return iter.includes(value)})) {\n set.remove(value);\n }\n });\n });\n };\n\n Set.prototype.merge = function() {\n return this.union.apply(this, arguments);\n };\n\n Set.prototype.mergeWith = function(merger) {var iters = SLICE$0.call(arguments, 1);\n return this.union.apply(this, iters);\n };\n\n Set.prototype.sort = function(comparator) {\n // Late binding\n return OrderedSet(sortFactory(this, comparator));\n };\n\n Set.prototype.sortBy = function(mapper, comparator) {\n // Late binding\n return OrderedSet(sortFactory(this, comparator, mapper));\n };\n\n Set.prototype.wasAltered = function() {\n return this._map.wasAltered();\n };\n\n Set.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n return this._map.__iterate(function(_, k) {return fn(k, k, this$0)}, reverse);\n };\n\n Set.prototype.__iterator = function(type, reverse) {\n return this._map.map(function(_, k) {return k}).__iterator(type, reverse);\n };\n\n Set.prototype.__ensureOwner = function(ownerID) {\n if (ownerID === this.__ownerID) {\n return this;\n }\n var newMap = this._map.__ensureOwner(ownerID);\n if (!ownerID) {\n this.__ownerID = ownerID;\n this._map = newMap;\n return this;\n }\n return this.__make(newMap, ownerID);\n };\n\n\n function isSet(maybeSet) {\n return !!(maybeSet && maybeSet[IS_SET_SENTINEL]);\n }\n\n Set.isSet = isSet;\n\n var IS_SET_SENTINEL = '@@__IMMUTABLE_SET__@@';\n\n var SetPrototype = Set.prototype;\n SetPrototype[IS_SET_SENTINEL] = true;\n SetPrototype[DELETE] = SetPrototype.remove;\n SetPrototype.mergeDeep = SetPrototype.merge;\n SetPrototype.mergeDeepWith = SetPrototype.mergeWith;\n SetPrototype.withMutations = MapPrototype.withMutations;\n SetPrototype.asMutable = MapPrototype.asMutable;\n SetPrototype.asImmutable = MapPrototype.asImmutable;\n\n SetPrototype.__empty = emptySet;\n SetPrototype.__make = makeSet;\n\n function updateSet(set, newMap) {\n if (set.__ownerID) {\n set.size = newMap.size;\n set._map = newMap;\n return set;\n }\n return newMap === set._map ? set :\n newMap.size === 0 ? set.__empty() :\n set.__make(newMap);\n }\n\n function makeSet(map, ownerID) {\n var set = Object.create(SetPrototype);\n set.size = map ? map.size : 0;\n set._map = map;\n set.__ownerID = ownerID;\n return set;\n }\n\n var EMPTY_SET;\n function emptySet() {\n return EMPTY_SET || (EMPTY_SET = makeSet(emptyMap()));\n }\n\n createClass(OrderedSet, Set);\n\n // @pragma Construction\n\n function OrderedSet(value) {\n return value === null || value === undefined ? emptyOrderedSet() :\n isOrderedSet(value) ? value :\n emptyOrderedSet().withMutations(function(set ) {\n var iter = SetIterable(value);\n assertNotInfinite(iter.size);\n iter.forEach(function(v ) {return set.add(v)});\n });\n }\n\n OrderedSet.of = function(/*...values*/) {\n return this(arguments);\n };\n\n OrderedSet.fromKeys = function(value) {\n return this(KeyedIterable(value).keySeq());\n };\n\n OrderedSet.prototype.toString = function() {\n return this.__toString('OrderedSet {', '}');\n };\n\n\n function isOrderedSet(maybeOrderedSet) {\n return isSet(maybeOrderedSet) && isOrdered(maybeOrderedSet);\n }\n\n OrderedSet.isOrderedSet = isOrderedSet;\n\n var OrderedSetPrototype = OrderedSet.prototype;\n OrderedSetPrototype[IS_ORDERED_SENTINEL] = true;\n\n OrderedSetPrototype.__empty = emptyOrderedSet;\n OrderedSetPrototype.__make = makeOrderedSet;\n\n function makeOrderedSet(map, ownerID) {\n var set = Object.create(OrderedSetPrototype);\n set.size = map ? map.size : 0;\n set._map = map;\n set.__ownerID = ownerID;\n return set;\n }\n\n var EMPTY_ORDERED_SET;\n function emptyOrderedSet() {\n return EMPTY_ORDERED_SET || (EMPTY_ORDERED_SET = makeOrderedSet(emptyOrderedMap()));\n }\n\n createClass(Stack, IndexedCollection);\n\n // @pragma Construction\n\n function Stack(value) {\n return value === null || value === undefined ? emptyStack() :\n isStack(value) ? value :\n emptyStack().unshiftAll(value);\n }\n\n Stack.of = function(/*...values*/) {\n return this(arguments);\n };\n\n Stack.prototype.toString = function() {\n return this.__toString('Stack [', ']');\n };\n\n // @pragma Access\n\n Stack.prototype.get = function(index, notSetValue) {\n var head = this._head;\n index = wrapIndex(this, index);\n while (head && index--) {\n head = head.next;\n }\n return head ? head.value : notSetValue;\n };\n\n Stack.prototype.peek = function() {\n return this._head && this._head.value;\n };\n\n // @pragma Modification\n\n Stack.prototype.push = function(/*...values*/) {\n if (arguments.length === 0) {\n return this;\n }\n var newSize = this.size + arguments.length;\n var head = this._head;\n for (var ii = arguments.length - 1; ii >= 0; ii--) {\n head = {\n value: arguments[ii],\n next: head\n };\n }\n if (this.__ownerID) {\n this.size = newSize;\n this._head = head;\n this.__hash = undefined;\n this.__altered = true;\n return this;\n }\n return makeStack(newSize, head);\n };\n\n Stack.prototype.pushAll = function(iter) {\n iter = IndexedIterable(iter);\n if (iter.size === 0) {\n return this;\n }\n assertNotInfinite(iter.size);\n var newSize = this.size;\n var head = this._head;\n iter.reverse().forEach(function(value ) {\n newSize++;\n head = {\n value: value,\n next: head\n };\n });\n if (this.__ownerID) {\n this.size = newSize;\n this._head = head;\n this.__hash = undefined;\n this.__altered = true;\n return this;\n }\n return makeStack(newSize, head);\n };\n\n Stack.prototype.pop = function() {\n return this.slice(1);\n };\n\n Stack.prototype.unshift = function(/*...values*/) {\n return this.push.apply(this, arguments);\n };\n\n Stack.prototype.unshiftAll = function(iter) {\n return this.pushAll(iter);\n };\n\n Stack.prototype.shift = function() {\n return this.pop.apply(this, arguments);\n };\n\n Stack.prototype.clear = function() {\n if (this.size === 0) {\n return this;\n }\n if (this.__ownerID) {\n this.size = 0;\n this._head = undefined;\n this.__hash = undefined;\n this.__altered = true;\n return this;\n }\n return emptyStack();\n };\n\n Stack.prototype.slice = function(begin, end) {\n if (wholeSlice(begin, end, this.size)) {\n return this;\n }\n var resolvedBegin = resolveBegin(begin, this.size);\n var resolvedEnd = resolveEnd(end, this.size);\n if (resolvedEnd !== this.size) {\n // super.slice(begin, end);\n return IndexedCollection.prototype.slice.call(this, begin, end);\n }\n var newSize = this.size - resolvedBegin;\n var head = this._head;\n while (resolvedBegin--) {\n head = head.next;\n }\n if (this.__ownerID) {\n this.size = newSize;\n this._head = head;\n this.__hash = undefined;\n this.__altered = true;\n return this;\n }\n return makeStack(newSize, head);\n };\n\n // @pragma Mutability\n\n Stack.prototype.__ensureOwner = function(ownerID) {\n if (ownerID === this.__ownerID) {\n return this;\n }\n if (!ownerID) {\n this.__ownerID = ownerID;\n this.__altered = false;\n return this;\n }\n return makeStack(this.size, this._head, ownerID, this.__hash);\n };\n\n // @pragma Iteration\n\n Stack.prototype.__iterate = function(fn, reverse) {\n if (reverse) {\n return this.reverse().__iterate(fn);\n }\n var iterations = 0;\n var node = this._head;\n while (node) {\n if (fn(node.value, iterations++, this) === false) {\n break;\n }\n node = node.next;\n }\n return iterations;\n };\n\n Stack.prototype.__iterator = function(type, reverse) {\n if (reverse) {\n return this.reverse().__iterator(type);\n }\n var iterations = 0;\n var node = this._head;\n return new Iterator(function() {\n if (node) {\n var value = node.value;\n node = node.next;\n return iteratorValue(type, iterations++, value);\n }\n return iteratorDone();\n });\n };\n\n\n function isStack(maybeStack) {\n return !!(maybeStack && maybeStack[IS_STACK_SENTINEL]);\n }\n\n Stack.isStack = isStack;\n\n var IS_STACK_SENTINEL = '@@__IMMUTABLE_STACK__@@';\n\n var StackPrototype = Stack.prototype;\n StackPrototype[IS_STACK_SENTINEL] = true;\n StackPrototype.withMutations = MapPrototype.withMutations;\n StackPrototype.asMutable = MapPrototype.asMutable;\n StackPrototype.asImmutable = MapPrototype.asImmutable;\n StackPrototype.wasAltered = MapPrototype.wasAltered;\n\n\n function makeStack(size, head, ownerID, hash) {\n var map = Object.create(StackPrototype);\n map.size = size;\n map._head = head;\n map.__ownerID = ownerID;\n map.__hash = hash;\n map.__altered = false;\n return map;\n }\n\n var EMPTY_STACK;\n function emptyStack() {\n return EMPTY_STACK || (EMPTY_STACK = makeStack(0));\n }\n\n /**\n * Contributes additional methods to a constructor\n */\n function mixin(ctor, methods) {\n var keyCopier = function(key ) { ctor.prototype[key] = methods[key]; };\n Object.keys(methods).forEach(keyCopier);\n Object.getOwnPropertySymbols &&\n Object.getOwnPropertySymbols(methods).forEach(keyCopier);\n return ctor;\n }\n\n Iterable.Iterator = Iterator;\n\n mixin(Iterable, {\n\n // ### Conversion to other types\n\n toArray: function() {\n assertNotInfinite(this.size);\n var array = new Array(this.size || 0);\n this.valueSeq().__iterate(function(v, i) { array[i] = v; });\n return array;\n },\n\n toIndexedSeq: function() {\n return new ToIndexedSequence(this);\n },\n\n toJS: function() {\n return this.toSeq().map(\n function(value ) {return value && typeof value.toJS === 'function' ? value.toJS() : value}\n ).__toJS();\n },\n\n toJSON: function() {\n return this.toSeq().map(\n function(value ) {return value && typeof value.toJSON === 'function' ? value.toJSON() : value}\n ).__toJS();\n },\n\n toKeyedSeq: function() {\n return new ToKeyedSequence(this, true);\n },\n\n toMap: function() {\n // Use Late Binding here to solve the circular dependency.\n return Map(this.toKeyedSeq());\n },\n\n toObject: function() {\n assertNotInfinite(this.size);\n var object = {};\n this.__iterate(function(v, k) { object[k] = v; });\n return object;\n },\n\n toOrderedMap: function() {\n // Use Late Binding here to solve the circular dependency.\n return OrderedMap(this.toKeyedSeq());\n },\n\n toOrderedSet: function() {\n // Use Late Binding here to solve the circular dependency.\n return OrderedSet(isKeyed(this) ? this.valueSeq() : this);\n },\n\n toSet: function() {\n // Use Late Binding here to solve the circular dependency.\n return Set(isKeyed(this) ? this.valueSeq() : this);\n },\n\n toSetSeq: function() {\n return new ToSetSequence(this);\n },\n\n toSeq: function() {\n return isIndexed(this) ? this.toIndexedSeq() :\n isKeyed(this) ? this.toKeyedSeq() :\n this.toSetSeq();\n },\n\n toStack: function() {\n // Use Late Binding here to solve the circular dependency.\n return Stack(isKeyed(this) ? this.valueSeq() : this);\n },\n\n toList: function() {\n // Use Late Binding here to solve the circular dependency.\n return List(isKeyed(this) ? this.valueSeq() : this);\n },\n\n\n // ### Common JavaScript methods and properties\n\n toString: function() {\n return '[Iterable]';\n },\n\n __toString: function(head, tail) {\n if (this.size === 0) {\n return head + tail;\n }\n return head + ' ' + this.toSeq().map(this.__toStringMapper).join(', ') + ' ' + tail;\n },\n\n\n // ### ES6 Collection methods (ES6 Array and Map)\n\n concat: function() {var values = SLICE$0.call(arguments, 0);\n return reify(this, concatFactory(this, values));\n },\n\n includes: function(searchValue) {\n return this.some(function(value ) {return is(value, searchValue)});\n },\n\n entries: function() {\n return this.__iterator(ITERATE_ENTRIES);\n },\n\n every: function(predicate, context) {\n assertNotInfinite(this.size);\n var returnValue = true;\n this.__iterate(function(v, k, c) {\n if (!predicate.call(context, v, k, c)) {\n returnValue = false;\n return false;\n }\n });\n return returnValue;\n },\n\n filter: function(predicate, context) {\n return reify(this, filterFactory(this, predicate, context, true));\n },\n\n find: function(predicate, context, notSetValue) {\n var entry = this.findEntry(predicate, context);\n return entry ? entry[1] : notSetValue;\n },\n\n findEntry: function(predicate, context) {\n var found;\n this.__iterate(function(v, k, c) {\n if (predicate.call(context, v, k, c)) {\n found = [k, v];\n return false;\n }\n });\n return found;\n },\n\n findLastEntry: function(predicate, context) {\n return this.toSeq().reverse().findEntry(predicate, context);\n },\n\n forEach: function(sideEffect, context) {\n assertNotInfinite(this.size);\n return this.__iterate(context ? sideEffect.bind(context) : sideEffect);\n },\n\n join: function(separator) {\n assertNotInfinite(this.size);\n separator = separator !== undefined ? '' + separator : ',';\n var joined = '';\n var isFirst = true;\n this.__iterate(function(v ) {\n isFirst ? (isFirst = false) : (joined += separator);\n joined += v !== null && v !== undefined ? v.toString() : '';\n });\n return joined;\n },\n\n keys: function() {\n return this.__iterator(ITERATE_KEYS);\n },\n\n map: function(mapper, context) {\n return reify(this, mapFactory(this, mapper, context));\n },\n\n reduce: function(reducer, initialReduction, context) {\n assertNotInfinite(this.size);\n var reduction;\n var useFirst;\n if (arguments.length < 2) {\n useFirst = true;\n } else {\n reduction = initialReduction;\n }\n this.__iterate(function(v, k, c) {\n if (useFirst) {\n useFirst = false;\n reduction = v;\n } else {\n reduction = reducer.call(context, reduction, v, k, c);\n }\n });\n return reduction;\n },\n\n reduceRight: function(reducer, initialReduction, context) {\n var reversed = this.toKeyedSeq().reverse();\n return reversed.reduce.apply(reversed, arguments);\n },\n\n reverse: function() {\n return reify(this, reverseFactory(this, true));\n },\n\n slice: function(begin, end) {\n return reify(this, sliceFactory(this, begin, end, true));\n },\n\n some: function(predicate, context) {\n return !this.every(not(predicate), context);\n },\n\n sort: function(comparator) {\n return reify(this, sortFactory(this, comparator));\n },\n\n values: function() {\n return this.__iterator(ITERATE_VALUES);\n },\n\n\n // ### More sequential methods\n\n butLast: function() {\n return this.slice(0, -1);\n },\n\n isEmpty: function() {\n return this.size !== undefined ? this.size === 0 : !this.some(function() {return true});\n },\n\n count: function(predicate, context) {\n return ensureSize(\n predicate ? this.toSeq().filter(predicate, context) : this\n );\n },\n\n countBy: function(grouper, context) {\n return countByFactory(this, grouper, context);\n },\n\n equals: function(other) {\n return deepEqual(this, other);\n },\n\n entrySeq: function() {\n var iterable = this;\n if (iterable._cache) {\n // We cache as an entries array, so we can just return the cache!\n return new ArraySeq(iterable._cache);\n }\n var entriesSequence = iterable.toSeq().map(entryMapper).toIndexedSeq();\n entriesSequence.fromEntrySeq = function() {return iterable.toSeq()};\n return entriesSequence;\n },\n\n filterNot: function(predicate, context) {\n return this.filter(not(predicate), context);\n },\n\n findLast: function(predicate, context, notSetValue) {\n return this.toKeyedSeq().reverse().find(predicate, context, notSetValue);\n },\n\n first: function() {\n return this.find(returnTrue);\n },\n\n flatMap: function(mapper, context) {\n return reify(this, flatMapFactory(this, mapper, context));\n },\n\n flatten: function(depth) {\n return reify(this, flattenFactory(this, depth, true));\n },\n\n fromEntrySeq: function() {\n return new FromEntriesSequence(this);\n },\n\n get: function(searchKey, notSetValue) {\n return this.find(function(_, key) {return is(key, searchKey)}, undefined, notSetValue);\n },\n\n getIn: function(searchKeyPath, notSetValue) {\n var nested = this;\n // Note: in an ES6 environment, we would prefer:\n // for (var key of searchKeyPath) {\n var iter = forceIterator(searchKeyPath);\n var step;\n while (!(step = iter.next()).done) {\n var key = step.value;\n nested = nested && nested.get ? nested.get(key, NOT_SET) : NOT_SET;\n if (nested === NOT_SET) {\n return notSetValue;\n }\n }\n return nested;\n },\n\n groupBy: function(grouper, context) {\n return groupByFactory(this, grouper, context);\n },\n\n has: function(searchKey) {\n return this.get(searchKey, NOT_SET) !== NOT_SET;\n },\n\n hasIn: function(searchKeyPath) {\n return this.getIn(searchKeyPath, NOT_SET) !== NOT_SET;\n },\n\n isSubset: function(iter) {\n iter = typeof iter.includes === 'function' ? iter : Iterable(iter);\n return this.every(function(value ) {return iter.includes(value)});\n },\n\n isSuperset: function(iter) {\n iter = typeof iter.isSubset === 'function' ? iter : Iterable(iter);\n return iter.isSubset(this);\n },\n\n keySeq: function() {\n return this.toSeq().map(keyMapper).toIndexedSeq();\n },\n\n last: function() {\n return this.toSeq().reverse().first();\n },\n\n max: function(comparator) {\n return maxFactory(this, comparator);\n },\n\n maxBy: function(mapper, comparator) {\n return maxFactory(this, comparator, mapper);\n },\n\n min: function(comparator) {\n return maxFactory(this, comparator ? neg(comparator) : defaultNegComparator);\n },\n\n minBy: function(mapper, comparator) {\n return maxFactory(this, comparator ? neg(comparator) : defaultNegComparator, mapper);\n },\n\n rest: function() {\n return this.slice(1);\n },\n\n skip: function(amount) {\n return this.slice(Math.max(0, amount));\n },\n\n skipLast: function(amount) {\n return reify(this, this.toSeq().reverse().skip(amount).reverse());\n },\n\n skipWhile: function(predicate, context) {\n return reify(this, skipWhileFactory(this, predicate, context, true));\n },\n\n skipUntil: function(predicate, context) {\n return this.skipWhile(not(predicate), context);\n },\n\n sortBy: function(mapper, comparator) {\n return reify(this, sortFactory(this, comparator, mapper));\n },\n\n take: function(amount) {\n return this.slice(0, Math.max(0, amount));\n },\n\n takeLast: function(amount) {\n return reify(this, this.toSeq().reverse().take(amount).reverse());\n },\n\n takeWhile: function(predicate, context) {\n return reify(this, takeWhileFactory(this, predicate, context));\n },\n\n takeUntil: function(predicate, context) {\n return this.takeWhile(not(predicate), context);\n },\n\n valueSeq: function() {\n return this.toIndexedSeq();\n },\n\n\n // ### Hashable Object\n\n hashCode: function() {\n return this.__hash || (this.__hash = hashIterable(this));\n }\n\n\n // ### Internal\n\n // abstract __iterate(fn, reverse)\n\n // abstract __iterator(type, reverse)\n });\n\n // var IS_ITERABLE_SENTINEL = '@@__IMMUTABLE_ITERABLE__@@';\n // var IS_KEYED_SENTINEL = '@@__IMMUTABLE_KEYED__@@';\n // var IS_INDEXED_SENTINEL = '@@__IMMUTABLE_INDEXED__@@';\n // var IS_ORDERED_SENTINEL = '@@__IMMUTABLE_ORDERED__@@';\n\n var IterablePrototype = Iterable.prototype;\n IterablePrototype[IS_ITERABLE_SENTINEL] = true;\n IterablePrototype[ITERATOR_SYMBOL] = IterablePrototype.values;\n IterablePrototype.__toJS = IterablePrototype.toArray;\n IterablePrototype.__toStringMapper = quoteString;\n IterablePrototype.inspect =\n IterablePrototype.toSource = function() { return this.toString(); };\n IterablePrototype.chain = IterablePrototype.flatMap;\n IterablePrototype.contains = IterablePrototype.includes;\n\n // Temporary warning about using length\n (function () {\n try {\n Object.defineProperty(IterablePrototype, 'length', {\n get: function () {\n if (!Iterable.noLengthWarning) {\n var stack;\n try {\n throw new Error();\n } catch (error) {\n stack = error.stack;\n }\n if (stack.indexOf('_wrapObject') === -1) {\n console && console.warn && console.warn(\n 'iterable.length has been deprecated, '+\n 'use iterable.size or iterable.count(). '+\n 'This warning will become a silent error in a future version. ' +\n stack\n );\n return this.size;\n }\n }\n }\n });\n } catch (e) {}\n })();\n\n\n\n mixin(KeyedIterable, {\n\n // ### More sequential methods\n\n flip: function() {\n return reify(this, flipFactory(this));\n },\n\n findKey: function(predicate, context) {\n var entry = this.findEntry(predicate, context);\n return entry && entry[0];\n },\n\n findLastKey: function(predicate, context) {\n return this.toSeq().reverse().findKey(predicate, context);\n },\n\n keyOf: function(searchValue) {\n return this.findKey(function(value ) {return is(value, searchValue)});\n },\n\n lastKeyOf: function(searchValue) {\n return this.findLastKey(function(value ) {return is(value, searchValue)});\n },\n\n mapEntries: function(mapper, context) {var this$0 = this;\n var iterations = 0;\n return reify(this,\n this.toSeq().map(\n function(v, k) {return mapper.call(context, [k, v], iterations++, this$0)}\n ).fromEntrySeq()\n );\n },\n\n mapKeys: function(mapper, context) {var this$0 = this;\n return reify(this,\n this.toSeq().flip().map(\n function(k, v) {return mapper.call(context, k, v, this$0)}\n ).flip()\n );\n }\n\n });\n\n var KeyedIterablePrototype = KeyedIterable.prototype;\n KeyedIterablePrototype[IS_KEYED_SENTINEL] = true;\n KeyedIterablePrototype[ITERATOR_SYMBOL] = IterablePrototype.entries;\n KeyedIterablePrototype.__toJS = IterablePrototype.toObject;\n KeyedIterablePrototype.__toStringMapper = function(v, k) {return JSON.stringify(k) + ': ' + quoteString(v)};\n\n\n\n mixin(IndexedIterable, {\n\n // ### Conversion to other types\n\n toKeyedSeq: function() {\n return new ToKeyedSequence(this, false);\n },\n\n\n // ### ES6 Collection methods (ES6 Array and Map)\n\n filter: function(predicate, context) {\n return reify(this, filterFactory(this, predicate, context, false));\n },\n\n findIndex: function(predicate, context) {\n var entry = this.findEntry(predicate, context);\n return entry ? entry[0] : -1;\n },\n\n indexOf: function(searchValue) {\n var key = this.toKeyedSeq().keyOf(searchValue);\n return key === undefined ? -1 : key;\n },\n\n lastIndexOf: function(searchValue) {\n var key = this.toKeyedSeq().reverse().keyOf(searchValue);\n return key === undefined ? -1 : key;\n\n // var index =\n // return this.toSeq().reverse().indexOf(searchValue);\n },\n\n reverse: function() {\n return reify(this, reverseFactory(this, false));\n },\n\n slice: function(begin, end) {\n return reify(this, sliceFactory(this, begin, end, false));\n },\n\n splice: function(index, removeNum /*, ...values*/) {\n var numArgs = arguments.length;\n removeNum = Math.max(removeNum | 0, 0);\n if (numArgs === 0 || (numArgs === 2 && !removeNum)) {\n return this;\n }\n // If index is negative, it should resolve relative to the size of the\n // collection. However size may be expensive to compute if not cached, so\n // only call count() if the number is in fact negative.\n index = resolveBegin(index, index < 0 ? this.count() : this.size);\n var spliced = this.slice(0, index);\n return reify(\n this,\n numArgs === 1 ?\n spliced :\n spliced.concat(arrCopy(arguments, 2), this.slice(index + removeNum))\n );\n },\n\n\n // ### More collection methods\n\n findLastIndex: function(predicate, context) {\n var key = this.toKeyedSeq().findLastKey(predicate, context);\n return key === undefined ? -1 : key;\n },\n\n first: function() {\n return this.get(0);\n },\n\n flatten: function(depth) {\n return reify(this, flattenFactory(this, depth, false));\n },\n\n get: function(index, notSetValue) {\n index = wrapIndex(this, index);\n return (index < 0 || (this.size === Infinity ||\n (this.size !== undefined && index > this.size))) ?\n notSetValue :\n this.find(function(_, key) {return key === index}, undefined, notSetValue);\n },\n\n has: function(index) {\n index = wrapIndex(this, index);\n return index >= 0 && (this.size !== undefined ?\n this.size === Infinity || index < this.size :\n this.indexOf(index) !== -1\n );\n },\n\n interpose: function(separator) {\n return reify(this, interposeFactory(this, separator));\n },\n\n interleave: function(/*...iterables*/) {\n var iterables = [this].concat(arrCopy(arguments));\n var zipped = zipWithFactory(this.toSeq(), IndexedSeq.of, iterables);\n var interleaved = zipped.flatten(true);\n if (zipped.size) {\n interleaved.size = zipped.size * iterables.length;\n }\n return reify(this, interleaved);\n },\n\n last: function() {\n return this.get(-1);\n },\n\n skipWhile: function(predicate, context) {\n return reify(this, skipWhileFactory(this, predicate, context, false));\n },\n\n zip: function(/*, ...iterables */) {\n var iterables = [this].concat(arrCopy(arguments));\n return reify(this, zipWithFactory(this, defaultZipper, iterables));\n },\n\n zipWith: function(zipper/*, ...iterables */) {\n var iterables = arrCopy(arguments);\n iterables[0] = this;\n return reify(this, zipWithFactory(this, zipper, iterables));\n }\n\n });\n\n IndexedIterable.prototype[IS_INDEXED_SENTINEL] = true;\n IndexedIterable.prototype[IS_ORDERED_SENTINEL] = true;\n\n\n\n mixin(SetIterable, {\n\n // ### ES6 Collection methods (ES6 Array and Map)\n\n get: function(value, notSetValue) {\n return this.has(value) ? value : notSetValue;\n },\n\n includes: function(value) {\n return this.has(value);\n },\n\n\n // ### More sequential methods\n\n keySeq: function() {\n return this.valueSeq();\n }\n\n });\n\n SetIterable.prototype.has = IterablePrototype.includes;\n\n\n // Mixin subclasses\n\n mixin(KeyedSeq, KeyedIterable.prototype);\n mixin(IndexedSeq, IndexedIterable.prototype);\n mixin(SetSeq, SetIterable.prototype);\n\n mixin(KeyedCollection, KeyedIterable.prototype);\n mixin(IndexedCollection, IndexedIterable.prototype);\n mixin(SetCollection, SetIterable.prototype);\n\n\n // #pragma Helper functions\n\n function keyMapper(v, k) {\n return k;\n }\n\n function entryMapper(v, k) {\n return [k, v];\n }\n\n function not(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n }\n }\n\n function neg(predicate) {\n return function() {\n return -predicate.apply(this, arguments);\n }\n }\n\n function quoteString(value) {\n return typeof value === 'string' ? JSON.stringify(value) : value;\n }\n\n function defaultZipper() {\n return arrCopy(arguments);\n }\n\n function defaultNegComparator(a, b) {\n return a < b ? 1 : a > b ? -1 : 0;\n }\n\n function hashIterable(iterable) {\n if (iterable.size === Infinity) {\n return 0;\n }\n var ordered = isOrdered(iterable);\n var keyed = isKeyed(iterable);\n var h = ordered ? 1 : 0;\n var size = iterable.__iterate(\n keyed ?\n ordered ?\n function(v, k) { h = 31 * h + hashMerge(hash(v), hash(k)) | 0; } :\n function(v, k) { h = h + hashMerge(hash(v), hash(k)) | 0; } :\n ordered ?\n function(v ) { h = 31 * h + hash(v) | 0; } :\n function(v ) { h = h + hash(v) | 0; }\n );\n return murmurHashOfSize(size, h);\n }\n\n function murmurHashOfSize(size, h) {\n h = imul(h, 0xCC9E2D51);\n h = imul(h << 15 | h >>> -15, 0x1B873593);\n h = imul(h << 13 | h >>> -13, 5);\n h = (h + 0xE6546B64 | 0) ^ size;\n h = imul(h ^ h >>> 16, 0x85EBCA6B);\n h = imul(h ^ h >>> 13, 0xC2B2AE35);\n h = smi(h ^ h >>> 16);\n return h;\n }\n\n function hashMerge(a, b) {\n return a ^ b + 0x9E3779B9 + (a << 6) + (a >> 2) | 0; // int\n }\n\n var Immutable = {\n\n Iterable: Iterable,\n\n Seq: Seq,\n Collection: Collection,\n Map: Map,\n OrderedMap: OrderedMap,\n List: List,\n Stack: Stack,\n Set: Set,\n OrderedSet: OrderedSet,\n\n Record: Record,\n Range: Range,\n Repeat: Repeat,\n\n is: is,\n fromJS: fromJS\n\n };\n\n return Immutable;\n\n}));","'use strict';\r\n\r\nangular.module('Umbrella').factory('CardAdditionalFieldResource', [\r\n '$resource',\r\n $resource =>\r\n $resource(\r\n '/api/v1/cardadditionalfield/:action/:id',\r\n {},\r\n {\r\n getAll: {\r\n method: 'GET',\r\n isArray: true,\r\n params: {}\r\n },\r\n getPaged: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'paged', page: 0, pageSize: 15 }\r\n },\r\n search: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'search',\r\n query: '',\r\n page: 0,\r\n pageSize: 15\r\n }\r\n },\r\n getFrames: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'frames' }\r\n },\r\n getBlocks: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'blocks' }\r\n },\r\n getPositions: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'positions' }\r\n },\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n delete: {\r\n method: 'DELETE',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n save: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { id: '@id' }\r\n }\r\n }\r\n )\r\n]);\r\n","namespace Umbrella {\r\n export declare class AdminPersonResource {\r\n update(model: PersonModel): ng.resource.IResource;\r\n }\r\n\r\n angular.module('Umbrella').service('AdminPersonResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/people/admin',\r\n {},\r\n {\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: {}\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","namespace System {\r\n export enum UriHostNameType {\r\n Unknown = 0,\r\n Basic = 1,\r\n Dns = 2,\r\n IPv4 = 3,\r\n IPv6 = 4\r\n }\r\n}\r\nnamespace System.Net.Mail {\r\n export enum MailPriority {\r\n Normal = 0,\r\n Low = 1,\r\n High = 2\r\n }\r\n}\r\nnamespace Umbrella {\r\n export enum CardType {\r\n CustomerCard = 0,\r\n ColleagueCard = 2,\r\n UnitCard = 4,\r\n CustomerHistoryCard = 5,\r\n ComplexCard = 6,\r\n Portal = 7\r\n }\r\n export enum EmailAddressProperties {\r\n None = 0,\r\n Verified = 1,\r\n Primary = 2\r\n }\r\n export enum JitResponseStatus {\r\n Success = 0,\r\n Error = 1\r\n }\r\n export enum JitType {\r\n Person = 1,\r\n PersonActivity = 2,\r\n CustomerContracts = 4,\r\n CustomerBills = 8,\r\n Unit = 16,\r\n UnitActivity = 32,\r\n UnitContracts = 64,\r\n UnitValuation = 128,\r\n AllPerson = 3,\r\n AllCustomer = 12,\r\n AllUnit = 240,\r\n All = 255\r\n }\r\n export enum PersonCharacteristic {\r\n None = 0,\r\n Aggressive = 1,\r\n ExcludedFromSingleService = 32\r\n }\r\n export enum PersonFieldTypes\r\n {\r\n Initials = 0,\r\n FirstName = 1,\r\n Insertion = 2,\r\n LastName = 3,\r\n BirthDate = 4,\r\n EmailAddress = 5,\r\n PhoneNumber = 6,\r\n Nationality = 7,\r\n Gender = 8,\r\n PostalAddress = 9,\r\n LegalPersonName = 10,\r\n KvkNumber = 11,\r\n IsDeceased = 12,\r\n CorrespondenceType = 13,\r\n IsAggressive = 14,\r\n AccountName = 15,\r\n IsActive = 16,\r\n Function = 17,\r\n Department = 18,\r\n Picture = 19,\r\n PhoneType = 20,\r\n }\r\n export enum RepairRequestItemStatus {\r\n Pending = 0,\r\n Finished = 10,\r\n Canceled = -1\r\n }\r\n export enum RepairRequestStatus {\r\n Pending = 0,\r\n Prepared = 5,\r\n Submitted = 10,\r\n Accepted = 15,\r\n Finished = 20,\r\n Locked = 25,\r\n Canceled = -1\r\n }\r\n export enum UpdateStatus {\r\n Succes = 0,\r\n Failed = 1,\r\n InProgress = 2\r\n }\r\n}\r\nnamespace Umbrella.Accounts.Login {\r\n export enum TokenVerificationError {\r\n Expired = 1,\r\n NoAccountFound = 2,\r\n InvalidToken = 3,\r\n AccountShouldBeActivated = 4,\r\n AccountShouldBeDeactivated = 5\r\n }\r\n}\r\nnamespace Umbrella.CaseFlow {\r\n export enum CaseFlowStatus {\r\n PickedUp = 0,\r\n Finished = 1,\r\n Canceled = 2,\r\n Submitted = 3\r\n }\r\n export enum CaseFlowAssignmentType {\r\n Employee = 0,\r\n FunctionGroup = 1\r\n }\r\n export enum CaseFlowStepStatus {\r\n NotStarted = 0,\r\n Started = 1,\r\n PickedUp = 2,\r\n Finished = 3,\r\n Canceled = 4\r\n }\r\n export enum CaseFlowStepTaskOutcomeStatus {\r\n Positive = 0,\r\n Neutral = 1,\r\n Negative = 2\r\n }\r\n}\r\nnamespace Umbrella.HousingAllocation.Reactions {\r\n export enum ReactionPossibility {\r\n AlreadyReacted = 1,\r\n NotRegistered = 2,\r\n InvalidRegistrationType = 2,\r\n Allowed = 3\r\n }\r\n export enum ReactionStatus {\r\n Verwerken = 0,\r\n Ontvangen = 1,\r\n Toegewezen = 2,\r\n NietToegewezen = 3,\r\n Geaccepteerd = 4,\r\n Geweigerd = 5,\r\n Afgewezen = 6,\r\n Verwijderd = 7\r\n }\r\n}\r\nnamespace Umbrella.HousingAllocation.Registrations {\r\n export enum RegistrationType {\r\n Housing = 1,\r\n Garage = 2,\r\n Parking = 3\r\n }\r\n}\r\nnamespace Umbrella.Indicators {\r\n export enum PriorityLevel {\r\n Urgent = 0,\r\n Important = 1,\r\n Missing = 2,\r\n System = 3\r\n }\r\n}\r\nnamespace Umbrella.Indicators.Expected {\r\n export enum ExpectedType {\r\n Constant = 0,\r\n Variable = 1,\r\n Comparison = 2\r\n }\r\n}\r\nnamespace Umbrella.Media {\r\n export enum MediaCategory {\r\n KnowledgebaseItemMedia = 0,\r\n AdvertisementMedia = 1,\r\n DefectMedia = 2,\r\n MailMedia = 3,\r\n InspectionMedia = 4,\r\n RepairRequestItemMedia = 6,\r\n TaskMedia = 7,\r\n CaseMedia = 8,\r\n SelfServiceMedia = 9\r\n }\r\n}\r\nnamespace Umbrella.Modules {\r\n export enum StatusFilter {\r\n All = 0,\r\n Active = 1,\r\n Deleted = 2\r\n }\r\n\r\n export enum ActivityCategory {\r\n Contact = 0,\r\n Selfservice = 1,\r\n Payments = 2,\r\n Document = 3,\r\n Correspondence = 4,\r\n CaseFlow = 5,\r\n Task = 6,\r\n Inspection = 7,\r\n PersonalData = 8,\r\n Communication = 9,\r\n Sms = 10\r\n }\r\n export enum AddressType {\r\n Home = 0,\r\n Postal = 1\r\n }\r\n export enum CaseStatus {\r\n Submitted = 1,\r\n Closed = 2,\r\n InProgress = 3\r\n }\r\n export enum ChannelType {\r\n Unknown = 0,\r\n Phone = 1,\r\n Visit = 2,\r\n Desk = 3,\r\n Email = 4,\r\n Post = 5,\r\n Social = 6,\r\n Tweet = 15,\r\n Facebook = 16,\r\n Web = 17,\r\n Chat = 18,\r\n Sms = 19,\r\n Umbrella = 20,\r\n Survey = 21,\r\n Backoffice = 22\r\n }\r\n export enum CorrespondenceType {\r\n Unknown = -1,\r\n Mail = 1,\r\n Digital = 2\r\n }\r\n export enum Gender {\r\n Male = 0,\r\n Female = 1,\r\n Unknown = 2\r\n }\r\n export enum PlanningOptionScore {\r\n Good = 1,\r\n Average = 5,\r\n Bad = 10\r\n }\r\n export enum PropertyType {\r\n String = 0,\r\n Number = 1,\r\n Boolean = 2,\r\n Date = 3,\r\n Enum = 4,\r\n Object = 5\r\n }\r\n export enum RoleFields {\r\n None = 0,\r\n PersonInitials = 2,\r\n PersonFirstName = 4,\r\n PersonInsertion = 8,\r\n PersonLastName = 16,\r\n PersonBirthDate = 32,\r\n PersonBsn = 64,\r\n PhoneNumber = 128,\r\n Email = 256,\r\n PhoneNumber2 = 512,\r\n CompanyName = 1024,\r\n KvkNumber = 2048,\r\n PersonNationality = 4096,\r\n PersonGender = 8192,\r\n PostalAddress = 16384,\r\n All = 2147483647\r\n }\r\n}\r\nnamespace Umbrella.Modules.Colleagues {\r\n export enum Availability {\r\n Unknown = 0,\r\n Available = 1,\r\n Away = 2,\r\n Busy = 3\r\n }\r\n export enum ColleagueType {\r\n Colleagues = 1,\r\n FunctionGroups = 10\r\n }\r\n export enum Presence {\r\n None = 0,\r\n Away = 1,\r\n Online = 2,\r\n Offline = 5,\r\n Busy = 6,\r\n DoNotDisturb = 7,\r\n BeRightBack = 8\r\n }\r\n export enum StateType {\r\n Available = 1,\r\n Unavailable = 2,\r\n Busy = 3,\r\n Offline = 4\r\n }\r\n}\r\nnamespace Umbrella.Modules.Colleagues.Calendar {\r\n export enum AppointmentStatus {\r\n Free = 0,\r\n Tentative = 1,\r\n Busy = 2,\r\n OOF = 3,\r\n NoData = 4\r\n }\r\n}\r\nnamespace Umbrella.Modules.Complaints {\r\n export enum ComplaintStatus {\r\n Pending = 0,\r\n Submitted = 10,\r\n InProgress = 15,\r\n Finished = 20,\r\n Canceled = -1\r\n }\r\n}\r\nnamespace Umbrella.Modules.Compliments {\r\n export enum ComplimentStatus {\r\n Pending = 0,\r\n Submitted = 10,\r\n InProgress = 15,\r\n Finished = 20,\r\n Canceled = -1\r\n }\r\n}\r\nnamespace Umbrella.Modules.Customers {\r\n export enum CaseType {\r\n Contact = 0,\r\n Question = 1,\r\n Case = 2,\r\n PersonalDataChanged = 3,\r\n BillPayment = 4\r\n }\r\n export enum CustomerStatus {\r\n Active = 0,\r\n Future = 1,\r\n InActive = 2,\r\n Unknown = 3\r\n }\r\n}\r\nnamespace Umbrella.Modules.Disturbance {\r\n export enum DisturbanceStatus {\r\n Pending = 0,\r\n Submitted = 10,\r\n InProgress = 15,\r\n Finished = 20,\r\n Canceled = -1\r\n }\r\n}\r\nnamespace Umbrella.Modules.Forms {\r\n export enum FormSubmitErrorReason {\r\n ValueRequired = 0,\r\n ValueOutOfRange = 1,\r\n FieldDoesNotExist = 2\r\n }\r\n}\r\nnamespace Umbrella.Modules.Housing {\r\n export enum ContractPriceComponentStatus {\r\n Provisionally = 1,\r\n Definitive = 2,\r\n Requested = 3\r\n }\r\n export enum ContractStatus {\r\n Active = 1,\r\n Future = 2,\r\n Expired = 3\r\n }\r\n export enum HouseAdjustmentStatus {\r\n Pending = 0,\r\n Submitted = 10,\r\n InProgress = 15,\r\n Finished = 20,\r\n Canceled = -1\r\n }\r\n export enum HousingAllocationRegistrationType {\r\n None = 0, // see if we can eradicate this.\r\n House = 1,\r\n Garage = 2,\r\n Parking = 3,\r\n Unknown = 4\r\n }\r\n}\r\nnamespace Umbrella.Modules.Housing.Advertisements {\r\n export enum AdvertisementStatus {\r\n Published = 1,\r\n Concept = 2,\r\n Deleted = 100\r\n }\r\n}\r\n\r\nnamespace Umbrella.HousingAllocation.Registration {\r\n export enum RegistrationActivityModelType {\r\n Option = 1,\r\n Reaction = 2\r\n }\r\n}\r\nnamespace Umbrella.Modules.Housing.Inspection {\r\n export enum InspectedRoomCondition {\r\n Bad = 0,\r\n Good = 1\r\n }\r\n export enum InspectionProgress {\r\n CannotStartInitialInspection = 0,\r\n CanStartInitialInspection = 1,\r\n InitialInspectionInProgress = 2,\r\n CanStartFinalInspection = 3,\r\n FinalInspectionInProgress = 4,\r\n FinalInspectionFinished = 5,\r\n StateOfCommencementInProgress = 6,\r\n StateOfCommencementFinished = 7\r\n }\r\n export enum InspectionReportStatus {\r\n Pending = 0,\r\n Submitted = 1\r\n }\r\n}\r\nnamespace Umbrella.Modules.Housing.Inspection.Final {\r\n export enum FinalObservationResolution {\r\n NotChecked = 0,\r\n Resolved = 1,\r\n Unresolved = 2\r\n }\r\n}\r\nnamespace Umbrella.Modules.Housing.Inspection.Initial {\r\n export enum InitialObservationResolution {\r\n None = 0,\r\n FixByTenant = 1,\r\n FixByCorporation = 2\r\n }\r\n}\r\nnamespace Umbrella.Modules.Knowledgebase {\r\n export enum FaqType {\r\n Default = 0,\r\n WithFollowUpQuestions = 1\r\n }\r\n export enum PublicationStatus {\r\n Published = 1,\r\n Concept = 2,\r\n ToReview = 3,\r\n Imported = 4,\r\n Expired = 5,\r\n Deleted = 100\r\n }\r\n}\r\nnamespace Umbrella.Modules.Mail {\r\n export enum MailMessageStatus {\r\n New = 0,\r\n PickedUp = 1,\r\n Finished = 2,\r\n Deleted = 3,\r\n Sent = 4\r\n }\r\n}\r\nnamespace Umbrella.Modules.Monitoring.Messaging {\r\n export enum UndeliveredMessageStatus {\r\n Failed = 0,\r\n Retrying = 1,\r\n Resolved = 2\r\n }\r\n}\r\nnamespace Umbrella.Modules.Payments {\r\n export enum BillSortOrder {\r\n HasOutstandingBalanceThenByCreationDateDesc = 0,\r\n CreationDateDesc = 1\r\n }\r\n export enum PaymentMethod {\r\n None = 0,\r\n TransactionForm = 1,\r\n PreauthorizedDebit = 2,\r\n Electronic = 3\r\n }\r\n export enum PaymentProviderType {\r\n None = 0,\r\n RaboProfessional = 1,\r\n RaboOmnikassa = 2,\r\n OgoneECommerce = 3\r\n }\r\n export enum PaymentStatus {\r\n New = 0,\r\n Success = 1,\r\n Pending = 10,\r\n Failed = 90,\r\n Cancelled = 91,\r\n Expired = 92\r\n }\r\n export enum RejectionReason {\r\n OutstandingBalanceTooHigh = 0,\r\n OutstandingBalanceTooLow = 1,\r\n NoRejection = 2,\r\n NoActiveContract = 3\r\n }\r\n}\r\nnamespace Umbrella.Modules.Payments.Billing {\r\n export enum BillStatus {\r\n Open = 0,\r\n InProgress = 1,\r\n Closed = 2\r\n }\r\n}\r\nnamespace Umbrella.Modules.Repairs {\r\n export enum ActionParameterScope {\r\n Configured = 0,\r\n Inferred = 1\r\n }\r\n}\r\nnamespace Umbrella.Modules.SelfService {\r\n export enum SelfServiceStatusType {\r\n Online = 1,\r\n Offline = 10,\r\n KccOnly = 11,\r\n AdministratorsOnly = 12,\r\n Faulted = 20\r\n }\r\n export enum SelfServiceScenarionStatusType {\r\n Published = 1,\r\n Archived = 10\r\n }\r\n export enum TimeSlot {\r\n Morning = 0,\r\n Afternoon = 1\r\n }\r\n export enum Weekday {\r\n Monday = 1,\r\n Tuesday = 2,\r\n Wednesday = 3,\r\n Thursday = 4,\r\n Friday = 5\r\n }\r\n}\r\nnamespace Umbrella.Modules.Tasks {\r\n export enum CompletionState {\r\n FinishedThisWeek = 0,\r\n FinishedToday = 1,\r\n DeadlineExpired = 2\r\n }\r\n export enum TaakStatus {\r\n Nieuw = 0,\r\n Opgepakt = 1,\r\n Afgerond = 2,\r\n Verwijderd = 3,\r\n Geweigerd = 4,\r\n Geannuleerd = 5\r\n }\r\n export enum TaskOutcomeStatus {\r\n Positive = 0,\r\n Neutral = 1,\r\n Negative = 2\r\n }\r\n export enum TaskStatusFilter {\r\n New = 0,\r\n PickedUp = 1,\r\n Finished = 2,\r\n Removed = 3,\r\n Rejected = 4,\r\n FinishedThisWeek = 5,\r\n FinishedToday = 6,\r\n DeadlineExpired = 7\r\n }\r\n export enum TaskTypeCategory {\r\n Terugbellen = 0,\r\n InformatieOpsturen = 1,\r\n Verzoek = 2,\r\n Error = 3,\r\n Voorinspectie = 4,\r\n Eindinspectie = 5,\r\n Selfservice = 6,\r\n StateOfCommencement = 7,\r\n Valuation = 8,\r\n CaseFlow = 9,\r\n Other = 10\r\n }\r\n}\r\nnamespace Umbrella.Modules.Telephony {\r\n export enum PhoneType {\r\n Home = 0,\r\n Mobile = 1,\r\n Work = 2,\r\n Unknown = 3\r\n }\r\n}\r\nnamespace Umbrella.Scheduling {\r\n export enum TriggerType {\r\n Cron = 0,\r\n Future = 1,\r\n Any = 2\r\n }\r\n}\r\nnamespace Umbrella.SelfTests {\r\n export enum TestResultStatus {\r\n Fatal = 0,\r\n Warning = 1,\r\n Info = 2,\r\n Pass = 3\r\n }\r\n}\r\nnamespace Umbrella.Telephony {\r\n export enum PhoneCallStatus {\r\n Dialing = 1,\r\n Established = 2,\r\n Ringing = 3,\r\n LineOpened = 4,\r\n LineClosed = 5,\r\n OnHold = 6,\r\n Conferenced = 7,\r\n Transfered = 8,\r\n Unknown = 0,\r\n Queued = 201\r\n }\r\n export enum PhoneCallType {\r\n Inbound = 1,\r\n Outbound = 2,\r\n Consult = 3,\r\n Internal = 4,\r\n Unknown = 100\r\n }\r\n export enum PhoneCapabilities {\r\n None = 0,\r\n Login = 1,\r\n NotReady = 2,\r\n All = 3,\r\n AuthLogin = 4\r\n }\r\n export enum PhoneQueueStatus {\r\n Unsupported = -1,\r\n Unavailable = 1,\r\n Available = 2,\r\n ACW = 3,\r\n SignIn = 4,\r\n SignOut = 5,\r\n Unknown = 0,\r\n Disabled = 6\r\n }\r\n export enum PhoneStatus {\r\n Unavailable = 1,\r\n Available = 2,\r\n Offline = 3,\r\n Busy = 4,\r\n ACW = 5\r\n }\r\n}\r\nnamespace Umbrella.TelephonyControl {\r\n export enum PhoneCallStatus {\r\n Dialing = 1,\r\n Established = 2,\r\n Ringing = 3,\r\n LineOpened = 4,\r\n LineClosed = 5,\r\n OnHold = 6,\r\n Conferenced = 7,\r\n Transfered = 8,\r\n Unknown = 0,\r\n Queued = 201\r\n }\r\n export enum PhoneCallType {\r\n Inbound = 1,\r\n Outbound = 2,\r\n Consult = 3,\r\n Internal = 4,\r\n Unknown = 100\r\n }\r\n export enum PhoneCapabilities {\r\n None = 0,\r\n Login = 1,\r\n NotReady = 2,\r\n All = 3,\r\n AuthLogin = 4\r\n }\r\n export enum PhoneQueueStatus {\r\n Unsupported = -1,\r\n Unavailable = 1,\r\n Available = 2,\r\n ACW = 3,\r\n SignIn = 4,\r\n SignOut = 5,\r\n Unknown = 0,\r\n Disabled = 6\r\n }\r\n export enum PhoneStatus {\r\n Unavailable = 1,\r\n Available = 2,\r\n Offline = 3,\r\n Busy = 4,\r\n ACW = 5\r\n }\r\n export enum TelephonyMessageType {\r\n Info = 0,\r\n Error = 1,\r\n Warning = 2,\r\n Success = 3\r\n }\r\n export enum AvailabilityStatus {\r\n Unavailable = -1,\r\n Offline = 0,\r\n InvalidUser = 1,\r\n NotLoggedIn = 2,\r\n Online = 3\r\n }\r\n}\r\nnamespace Umbrella.TelephonyControl.Statistics {\r\n export enum TelephonyQueueKpiState {\r\n Ok = 0,\r\n RequiresAttention = 1,\r\n Critical = 2\r\n }\r\n}\r\nnamespace Umbrella.Vendor {\r\n export enum EditVendorFields {\r\n None = 0,\r\n All = 1\r\n }\r\n}\r\nnamespace Umbrella.Modules.Contacts {\r\n export enum ContactDirection {\r\n Inbound,\r\n Outbound\r\n }\r\n}\r\n","/// \r\n\r\ninterface IClassAnnotationDecorator {\r\n (target: any): void;\r\n (t: any, key: string, index: number): void;\r\n}\r\n\r\nfunction getModule(moduleOrName: string | ng.IModule) {\r\n return typeof moduleOrName === 'string'\r\n ? angular.module(moduleOrName)\r\n : moduleOrName;\r\n}\r\n\r\ninterface IComponentOptions extends ng.IComponentOptions {\r\n selector: string;\r\n}\r\n\r\nconst selectorToCamelCase = (s: string) =>\r\n s.replace(/(\\-[a-z])/g, (match: string) =>\r\n match.toUpperCase().replace('-', '')\r\n );\r\n\r\nfunction Component(\r\n moduleOrName: string | ng.IModule,\r\n options: IComponentOptions\r\n) {\r\n return (controller: Function) => {\r\n const module = getModule(moduleOrName);\r\n const selector =\r\n options.selector && selectorToCamelCase(options.selector);\r\n if (options.controllerAs === undefined) options.controllerAs = 'vm';\r\n module.component(selector, angular.extend(options, { controller }));\r\n };\r\n}\r\n\r\nfunction Service(moduleOrName: string | ng.IModule, serviceName: string) {\r\n return (svc: Function) => {\r\n const module = getModule(moduleOrName);\r\n module.service(serviceName, svc);\r\n };\r\n}\r\n\r\nfunction attachInjects(target: any, ...args: any[]): any {\r\n (target.$inject || []).forEach((item: string, index: number) => {\r\n target.prototype[(item.charAt(0) === '$' ? '$' : '$$') + item] =\r\n args[index];\r\n });\r\n return target;\r\n}\r\n\r\ntype IInjectAnnotation = (...args: any[]) => IClassAnnotationDecorator;\r\n\r\nfunction Inject(...args: string[]): IClassAnnotationDecorator {\r\n return (target: any, key?: string, index?: number): void => {\r\n if (index && angular.isNumber(index)) {\r\n target.$inject = target.$inject || [];\r\n target.$inject[index] = args[0];\r\n } else {\r\n target.$inject = args;\r\n }\r\n };\r\n}\r\n\r\nfunction Controller(moduleOrName: string | ng.IModule, controllerName: string) {\r\n return (target: Function) => {\r\n const module = getModule(moduleOrName);\r\n module.controller(controllerName, target);\r\n };\r\n}\r\n\r\ninterface IRouteOptions extends ng.ui.IState {\r\n pageTitle?: string;\r\n redirectTo?: string;\r\n}\r\n\r\nfunction Route(\r\n moduleOrName: string | ng.IModule,\r\n stateName: string,\r\n config: IRouteOptions,\r\n authorize?: (userPermissions: Umbrella.PermissionsModel) => boolean\r\n) {\r\n return (target: Function) => {\r\n const module = getModule(moduleOrName);\r\n module.config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n config.data = config.data || {};\r\n config.data.authorize = authorize;\r\n config.data.pageTitle =\r\n config.pageTitle || config.data.pageTitle;\r\n $stateProvider.state(stateName, config);\r\n }\r\n ]);\r\n };\r\n}\r\n\r\nfunction Pipe(moduleOrName: string | ng.IModule, name: string) {\r\n return C => {\r\n function filter() {\r\n const args = Array.prototype.slice.call(arguments);\r\n const Ctor = C.bind.apply(C, [null].concat(args));\r\n const pipeObject = new Ctor();\r\n return pipeObject.transform.bind(pipeObject);\r\n }\r\n\r\n const annotatedFunction: (string | Function)[] = C.$inject || [];\r\n annotatedFunction.push(filter);\r\n const module = getModule(moduleOrName);\r\n module.filter(name, annotatedFunction);\r\n };\r\n}\r\n","namespace Umbrella {\r\n @Pipe('Umbrella', 'apiUrl')\r\n class ApiUrlFilter {\r\n public transform(relativeUrl: string) {\r\n return Config.makeAbsoluteApiUrl(relativeUrl);\r\n }\r\n }\r\n}\r\n","namespace Umbrella {\r\n export interface RouteScope {\r\n state$: Rx.Observable;\r\n }\r\n\r\n export function createComponentRouteController<\r\n TStoreState,\r\n TComponentState\r\n >(storeName, mapState: (store: TStoreState) => TComponentState) {\r\n return [\r\n '$scope',\r\n storeName,\r\n (\r\n $scope: RouteScope,\r\n store: ObservableStore.Store\r\n ) => {\r\n $scope.state$ = store.state$\r\n .map(mapState)\r\n .distinctUntilChanged();\r\n }\r\n ];\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.ObservableStore {\r\n export type Reducer = (currentState: T) => T;\r\n\r\n function reduce(currentState: T, reduce: Reducer): T {\r\n return reduce(currentState);\r\n }\r\n\r\n export interface Lens {\r\n get(state: TStore): T;\r\n set(state: TStore, prop: T): TStore;\r\n }\r\n\r\n interface InternalStore {\r\n readonly state$: Rx.Observable;\r\n getState(): T;\r\n readonly reducer$: Rx.Observer>;\r\n map(lens: Lens): InternalStore;\r\n }\r\n\r\n function mapStore(\r\n store: InternalStore,\r\n lens: Lens\r\n ): InternalStore {\r\n const subState$ = store.state$\r\n .map(x => lens.get(x))\r\n .distinctUntilChanged();\r\n\r\n const subReduce$ = new Rx.Subject>();\r\n\r\n function transform(reduceSub) {\r\n function subReduce(currentState: TStore) {\r\n const currentSubState = lens.get(currentState);\r\n const newSubState = reduceSub(currentSubState);\r\n return lens.set(currentState, newSubState);\r\n }\r\n\r\n store.reducer$.onNext(subReduce);\r\n }\r\n\r\n subReduce$.subscribe(transform);\r\n\r\n const mappedStore = {\r\n state$: subState$,\r\n reducer$: subReduce$,\r\n getState: () => lens.get(store.getState()),\r\n map: lens => mapStore(mappedStore, lens)\r\n };\r\n\r\n return mappedStore;\r\n }\r\n\r\n function createStore(initialState: T): InternalStore {\r\n const state$ = new Rx.BehaviorSubject(initialState);\r\n\r\n const store = {\r\n state$,\r\n reducer$: new Rx.Subject>(),\r\n getState: () => state$.getValue(),\r\n map: lens => mapStore(store, lens)\r\n };\r\n\r\n store.reducer$.subscribe(reducer => {\r\n const newState = reduce(store.state$.getValue(), reducer);\r\n store.state$.onNext(newState);\r\n });\r\n\r\n return store;\r\n }\r\n\r\n export type EventHandler = (\r\n event: TEvent\r\n ) => Reducer;\r\n\r\n export interface Store {\r\n readonly state$: Rx.Observable;\r\n getState(): TState;\r\n }\r\n\r\n export interface EventStore extends Store {\r\n readonly event$: Rx.Subject;\r\n map(\r\n lens: Lens,\r\n handler: EventHandler\r\n ): EventStore;\r\n }\r\n\r\n function createEventSubject(\r\n reducer$: Rx.Observer>,\r\n handler: EventHandler\r\n ): Rx.Subject {\r\n const event$ = new Rx.Subject();\r\n\r\n event$.subscribe(e => {\r\n const reduce = handler(e);\r\n reducer$.onNext(reduce);\r\n });\r\n\r\n return event$;\r\n }\r\n\r\n function map(\r\n store: InternalStore,\r\n lens: Lens,\r\n handler: EventHandler\r\n ): EventStore {\r\n const mappedStore = store.map(lens);\r\n const event$ = createEventSubject(\r\n mappedStore.reducer$,\r\n handler\r\n );\r\n\r\n return {\r\n state$: mappedStore.state$,\r\n event$,\r\n getState: () => mappedStore.getState(),\r\n map: (lens, handler) => map(mappedStore, lens, handler)\r\n };\r\n }\r\n\r\n export function create(\r\n initialState: TState,\r\n handler: EventHandler\r\n ): EventStore {\r\n const store = createStore(initialState);\r\n const event$ = createEventSubject(\r\n store.reducer$,\r\n handler\r\n );\r\n\r\n return {\r\n state$: store.state$,\r\n event$,\r\n getState: () => store.getState(),\r\n map: (lens, handler) => map(store, lens, handler)\r\n };\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n export type RootState = Immutable.Map;\r\n\r\n export const rootStore = ObservableStore.create(\r\n Immutable.Map({}),\r\n e => null\r\n );\r\n\r\n export function lens(prop: string): ObservableStore.Lens {\r\n return {\r\n get: store => {\r\n const val = store.get(prop);\r\n if (val && val.toJS) return val.toJS();\r\n\r\n return val;\r\n },\r\n set: (store, v) => store.set(prop, v)\r\n };\r\n }\r\n\r\n export const history = [];\r\n\r\n rootStore.state$.subscribe(s => history.push(s.toJS()));\r\n}\r\n\r\nlet logHistorySubscription: Rx.IDisposable = null;\r\n\r\nfunction enableHistoryLogging() {\r\n if (logHistorySubscription) {\r\n console.debug('Already logging history');\r\n } else {\r\n console.debug('Started logging. Last state:');\r\n logHistorySubscription = Umbrella.rootStore.state$.subscribe(s =>\r\n console.log('Root state: ', s.toJS())\r\n );\r\n }\r\n}\r\n\r\nfunction disableHistoryLogging() {\r\n if (logHistorySubscription) {\r\n console.debug('Stopped logging.');\r\n logHistorySubscription.dispose();\r\n logHistorySubscription = null;\r\n } else {\r\n console.debug('Not yet logging history');\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Config {\r\n export interface FeatureFlag {\r\n name: string;\r\n displayName: string;\r\n enabled: boolean;\r\n description: string;\r\n }\r\n\r\n export interface KeycloakConfig {\r\n realm: string | undefined\r\n clientId: string | undefined,\r\n url: string | undefined\r\n }\r\n\r\n export interface Config {\r\n api: string;\r\n debug: boolean;\r\n signalRTransports: string[] | 'auto' | 'disabled';\r\n bugsnagApiKey: string;\r\n features: FeatureFlag[];\r\n experimentalAreaEnabled: boolean;\r\n managementRelativeUrl: string;\r\n managementErrorPath: string;\r\n managementLogPath: string;\r\n managementPortalPath: string;\r\n managementSynchronizedObjectPath: string;\r\n loginredirect: boolean;\r\n keycloak: KeycloakConfig | undefined\r\n }\r\n\r\n export interface ConfigLoadingEvent {\r\n type: 'ConfigLoadingEvent';\r\n }\r\n\r\n export interface ConfigLoadedEvent {\r\n type: 'ConfigLoadedEvent';\r\n config: Config;\r\n }\r\n\r\n export interface ConfigLoadErrorEvent {\r\n type: 'ConfigLoadErrorEvent';\r\n error: any;\r\n }\r\n\r\n export interface FeatureFlagChangedEvent {\r\n type: 'FeatureFlagChangedEvent';\r\n features: FeatureFlag[];\r\n }\r\n\r\n export interface ExperimentalAreaStateChanged {\r\n type: 'ExperimentalAreaStateChanged';\r\n enabled: boolean;\r\n }\r\n\r\n export type ConfigEvent =\r\n | ConfigLoadingEvent\r\n | ConfigLoadedEvent\r\n | ConfigLoadErrorEvent\r\n | FeatureFlagChangedEvent\r\n | ExperimentalAreaStateChanged;\r\n\r\n export interface ConfigState {\r\n config: Config;\r\n loadError: any;\r\n }\r\n\r\n const reducer: ObservableStore.EventHandler = e => {\r\n switch (e.type) {\r\n case 'ConfigLoadingEvent':\r\n return s => ({ config: null, loadError: null });\r\n case 'ConfigLoadedEvent':\r\n return s => ({ config: e.config, loadError: null });\r\n case 'ConfigLoadErrorEvent':\r\n return s => ({\r\n config: s.config,\r\n loadError: e.error\r\n });\r\n case 'FeatureFlagChangedEvent':\r\n return s => ({\r\n ...s,\r\n config: {\r\n ...s.config,\r\n features: e.features\r\n }\r\n });\r\n case 'ExperimentalAreaStateChanged':\r\n return s => ({\r\n ...s,\r\n config: {\r\n ...s.config,\r\n experimentalAreaEnabled: e.enabled\r\n }\r\n });\r\n }\r\n };\r\n\r\n export const configStore = ObservableStore.create(\r\n { config: null, loadError: null },\r\n reducer\r\n );\r\n\r\n export function changeExperimentalAreaState(enabled: boolean) {\r\n configStore.event$.onNext({\r\n type: 'ExperimentalAreaStateChanged',\r\n enabled\r\n });\r\n }\r\n\r\n const defaultConfig: Config = {\r\n api: 'http://api.umbrella.localhost',\r\n debug: false,\r\n signalRTransports: 'auto',\r\n bugsnagApiKey: undefined,\r\n features: [],\r\n experimentalAreaEnabled: false,\r\n managementRelativeUrl: 'beheer',\r\n managementErrorPath: '/#/beheer/monitoring/diagnostiek/servicebus/fouten/',\r\n managementLogPath: '/#/beheer/systeem/log?scopeId=',\r\n managementPortalPath: '/#/beheer/klantportaal/aanvragen/',\r\n loginredirect: undefined,\r\n managementSynchronizedObjectPath: '/#/beheer/monitoring/gesynchroniseerdeobjecten?query=',\r\n keycloak: undefined\r\n };\r\n\r\n export async function load(hostNameConfig: boolean) {\r\n var prefix = hostNameConfig ? `${window.location.hostname}.` : '';\r\n\r\n let error;\r\n let config: Config;\r\n\r\n try {\r\n const configJson = await $.getJSON(`/Config/${prefix}config.json?_${Date.now()}`);\r\n config ={\r\n ...defaultConfig,\r\n ...configJson\r\n };\r\n } catch (e) {\r\n if (hostNameConfig) {\r\n error = e;\r\n } else{\r\n await load(true);\r\n return;\r\n }\r\n }\r\n\r\n if(config) {\r\n try {\r\n await $.getJSON('/Config/features.json', featuresJson => {\r\n config.features = featuresJson;\r\n config.features.forEach(f => {\r\n const state = localStorage.getItem(f.name);\r\n if (state === null) return;\r\n f.enabled = state == 'true';\r\n });\r\n });\r\n } catch (e) {\r\n error = e;\r\n }\r\n\r\n const experimentalAreaUnlocked = localStorage.getItem('ExperimentalAreaUnlocked');\r\n if (experimentalAreaUnlocked && JSON.parse(experimentalAreaUnlocked) === 'true') {\r\n config.experimentalAreaEnabled = true;\r\n } else {\r\n config.experimentalAreaEnabled = false;\r\n } \r\n }\r\n\r\n if (error) configStore.event$.onNext({ type: 'ConfigLoadErrorEvent', error });\r\n else configStore.event$.onNext({ type: 'ConfigLoadedEvent', config });\r\n }\r\n\r\n export function switchFeatureFlag(flagName: string, enabled: boolean) {\r\n const state = configStore.getState();\r\n\r\n if (!state || !state.config || !state.config.features) return;\r\n const features = state.config.features;\r\n\r\n const feature = features.find(x => x.name === flagName);\r\n if (feature) {\r\n const newFeatures = features.map(x => {\r\n if (x.name === flagName) x.enabled = enabled;\r\n return x;\r\n });\r\n\r\n configStore.event$.onNext({\r\n type: 'FeatureFlagChangedEvent',\r\n features: newFeatures\r\n });\r\n }\r\n }\r\n\r\n configStore.event$.onNext({ type: 'ConfigLoadingEvent' });\r\n load(false);\r\n\r\n configStore.state$.subscribe(s => {\r\n window.clientConfig = s.config;\r\n });\r\n\r\n configStore.state$.skipWhile(x => !x.loadError).subscribe(s => {\r\n console.error(`Configuration load error: ${s.loadError}`);\r\n });\r\n configStore.state$.subscribe(s => {\r\n if (s.config && s.config.features && s.config.features.length) {\r\n s.config.features.forEach(f => {\r\n if (f.name === 'windowsAuthentication')\r\n {\r\n localStorage.setItem(\r\n f.name,\r\n ((localStorage.getItem('windowsAuthentication') === 'true') || f.enabled).toString()\r\n );\r\n }\r\n else\r\n {\r\n localStorage.setItem(f.name, f.enabled.toString());\r\n }\r\n });\r\n }\r\n });\r\n\r\n\r\n function getPathWithTrailingSlash(path: string): string {\r\n if (!path || !path.length || path.endsWith('/') || path.includes('?')) return path;\r\n\r\n return `${path}/`;\r\n }\r\n\r\n export function getManagementLogRelativeUrl(): string {\r\n const logPath = getPathWithTrailingSlash(window.clientConfig.managementLogPath || '/#/beheer/systeem/log?scopeId=');\r\n return `/${getManagementRelativeUrl()}${logPath}`;\r\n }\r\n\r\n function getManagementRelativeUrl(): string {\r\n const subUrl = window.clientConfig.managementRelativeUrl || 'beheer';\r\n return getPathWithTrailingSlash(subUrl);\r\n }\r\n\r\n export function getPortalUrl(): string {\r\n return (\r\n (window.config &&\r\n window.config.modules &&\r\n window.config.modules.selfService &&\r\n window.config.modules.selfService.url) ||\r\n null\r\n );\r\n }\r\n\r\n export function makeAbsoluteApiUrl(requestUrl: string): string {\r\n return requestUrl.startsWith(window.clientConfig.api)\r\n ? requestUrl\r\n : ensureEndsWithSlash(window.clientConfig.api) + trimStartSlash(requestUrl);\r\n }\r\n\r\n function trimStartSlash(s: string): string {\r\n return (s.length === 0 || s[0] !== '/') ? s : s.substr(1);\r\n }\r\n\r\n function ensureEndsWithSlash(s: string): string {\r\n return s.endsWith('/') ? s : s + '/';\r\n }\r\n\r\n export function makeManagementErrorPath(id: Guid): string {\r\n const errorPath = getPathWithTrailingSlash(\r\n window.clientConfig.managementErrorPath || '/#/beheer/monitoring/diagnostiek/servicebus/fouten/'\r\n );\r\n return `/${getManagementRelativeUrl()}${errorPath}${id}`;\r\n }\r\n\r\n export function makeManagementLogPath(id: Guid): string {\r\n return `${getManagementLogRelativeUrl()}$${id}`;\r\n }\r\n\r\n export function makeManagementPortalPath(id: Guid): string {\r\n const portalPath = getPathWithTrailingSlash(\r\n window.clientConfig.managementPortalPath || '/#/beheer/klantportaal/aanvragen/'\r\n );\r\n return `/${getManagementRelativeUrl()}${portalPath}${id}`;\r\n }\r\n\r\n export function makeManagementSynchronizedObjectPath(id: Guid): string {\r\n const synchronizedObjectPath = getPathWithTrailingSlash(\r\n window.clientConfig.managementSynchronizedObjectPath ||\r\n '/#/beheer/monitoring/gesynchroniseerdeobjecten?query='\r\n );\r\n return `/${getManagementRelativeUrl()}${synchronizedObjectPath}${id}`;\r\n }\r\n\r\n $.ajaxSetup({\r\n xhrFields: {\r\n withCredentials: true\r\n },\r\n headers: { 'Access-Control-Allow-Origin': '*' }\r\n });\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n export interface SessionState {\r\n user: Umbrella.Modules.Colleagues.SessionColleagueModel;\r\n config: SessionConfig;\r\n accessToken: string;\r\n error: Error;\r\n }\r\n\r\n export interface TimelineConfig {\r\n enabled: boolean;\r\n userCurrentPhoneCallLoggingEnabled: boolean;\r\n activityModificationTimeLimitInMinutes: number;\r\n publicApplicationIds: Guid[];\r\n }\r\n\r\n export interface AgentModel {\r\n active: boolean;\r\n available: boolean;\r\n name: string;\r\n }\r\n\r\n export interface ErpFacetModel extends AgentModel {\r\n fieldLabels: Map;\r\n }\r\n\r\n export interface SessionConfig {\r\n agents: AgentModel[];\r\n applications: ApplicationModel[];\r\n buildtime: Date;\r\n cardAdditionalFields: CardAdditionalFieldModel[];\r\n configuration: \"DEBUG\" | \"RELEASE\";\r\n environmentName: string;\r\n facets: {\r\n calendar: Umbrella.Agents.FacetModel[],\r\n erp: ErpFacetModel,\r\n geography: Umbrella.Agents.FacetModel[],\r\n housingAllocation: Umbrella.Agents.FacetModel[],\r\n telephony: Umbrella.Agents.FacetModel[],\r\n\r\n },\r\n modules: {\r\n accounts: {\r\n accountActivationVerificationMethod: string;\r\n enabled: boolean;\r\n }\r\n payments: {\r\n supportsIndividualBillPayments: boolean;\r\n }\r\n person: {\r\n multipleTypesOfTheSameTelephoneNumberPossible: boolean;\r\n unknownPhoneNumberTypeAllowed: boolean;\r\n }\r\n selfService: {\r\n sssUrlPath: string;\r\n url: string;\r\n }\r\n timeline: TimelineConfig;\r\n }\r\n version: Umbrella.Modules.Monitoring.UmbrellaVersionModel;\r\n }\r\n\r\n export const session$ = new Rx.BehaviorSubject({\r\n user: null,\r\n accessToken: null,\r\n config: null,\r\n error: null\r\n });\r\n\r\n function startSession(cfg: Config): void {\r\n var loginredirect = cfg.loginredirect;\r\n\r\n const headers = {};\r\n if (localStorage.getItem('windowsAuthentication') === 'true')\r\n headers['X-Umbrella-Windows-Auth'] = 'true';\r\n\r\n $.ajax(Config.makeAbsoluteApiUrl('api/v1/system/session'), {\r\n //method: 'get',\r\n //mode: 'cors',\r\n dataType: 'json',\r\n //credentials: 'include',\r\n\r\n headers: headers,\r\n cache: false,\r\n success: x => {\r\n if (loginredirect) {\r\n if (x.user == null) {\r\n window.location.assign(Config.makeAbsoluteApiUrl('go/' + window.location.hash.substr(2)));\r\n } else {\r\n session$.onNext(x)\r\n }\r\n } else {\r\n session$.onNext(x)\r\n }\r\n },\r\n error: xhr => {\r\n switch (xhr.status) {\r\n case 0:\r\n window.location.assign(Config.makeAbsoluteApiUrl('go/' + window.location.hash.substr(2)));\r\n break;\r\n case 500:\r\n session$.onNext({\r\n user: null,\r\n accessToken: null,\r\n config: null,\r\n error: {\r\n name: 'NotAuthorized',\r\n message: '',\r\n stack: ''\r\n }\r\n });\r\n break;\r\n default:\r\n if (loginredirect)\r\n window.location.assign(Config.makeAbsoluteApiUrl('go/' + window.location.hash.substr(2)));\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n Config.configStore.state$\r\n .map(state => state && state.config)\r\n .skipWhile(cfg => !cfg)\r\n .skipWhile(cfg => cfg.keycloak && cfg.keycloak.realm !== undefined)\r\n .take(1)\r\n .subscribe(cfg => startSession(cfg));\r\n\r\n session$.subscribe(session => {\r\n window.user = session.user;\r\n window.config = session.config;\r\n window.session = session;\r\n });\r\n\r\n export function isDevModeOrVersionAtLeast(major: number, minor: number, patch: number) {\r\n if (window.config.configuration.toLowerCase() == 'debug') return true;\r\n\r\n if (\r\n window.config.version.major >= major &&\r\n window.config.version.minor >= minor &&\r\n window.config.version.patch >= patch\r\n )\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n export function startNewSessionWhenTokenHasExpired(): void {\r\n startSession(window.clientConfig);\r\n }\r\n\r\n export function whenAuthenticatedKccChatOperator(onReady: () => void) {\r\n const isAuthenticatedKccChatOperator = (sessionState: SessionState) => {\r\n return (\r\n sessionState &&\r\n sessionState.accessToken &&\r\n sessionState.user &&\r\n sessionState.user.permissions &&\r\n sessionState.user.permissions.chatOperator &&\r\n sessionState.user.permissions.viewChatConversation\r\n );\r\n };\r\n session$\r\n .filter(isAuthenticatedKccChatOperator)\r\n .take(1)\r\n .subscribe(_ => {\r\n onReady();\r\n });\r\n }\r\n}\r\n","namespace Umbrella {\r\n export abstract class BaseStoreService<\r\n TState,\r\n TEvent,\r\n TStore extends ObservableStore.EventStore\r\n > {\r\n constructor(protected store: TStore) {}\r\n\r\n protected emit(e: T) {\r\n this.store.event$.onNext(e);\r\n }\r\n\r\n protected getState = () => this.store.getState();\r\n }\r\n}\r\n","namespace Umbrella.Helpers {\r\n export const debounce = (func, wait, immediate) => {\r\n let timeout;\r\n return function() {\r\n const context = this,\r\n args = arguments;\r\n const later = () => {\r\n timeout = null;\r\n if (!immediate) {\r\n func.apply(context, args);\r\n }\r\n };\r\n const callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait || 200);\r\n if (callNow) {\r\n func.apply(context, args);\r\n }\r\n };\r\n };\r\n\r\n export const throttle = (func, limit) => {\r\n let inThrottle;\r\n return function() {\r\n const args = arguments;\r\n const context = this;\r\n if (!inThrottle) {\r\n func.apply(context, args);\r\n inThrottle = true;\r\n setTimeout(() => (inThrottle = false), limit);\r\n }\r\n };\r\n };\r\n\r\n export const copyToClipboard = (text: string, successCallback?: Function, failCallback?: Function) => {\r\n // tslint:disable-next-line:no-string-literal\r\n if (window['clipboardData'] && window['clipboardData'].setData) {\r\n // IE specific code path to prevent textarea being shown while dialog is visible.\r\n // tslint:disable-next-line:no-string-literal\r\n return window['clipboardData'].setData('Text', text);\r\n } else if (document.queryCommandSupported && document.queryCommandSupported('copy')) {\r\n const textarea = document.createElement('textarea');\r\n textarea.textContent = text;\r\n textarea.style.position = 'fixed'; // Prevent scrolling to bottom of page in MS Edge.\r\n document.body.appendChild(textarea);\r\n textarea.select();\r\n try {\r\n if (successCallback) successCallback();\r\n return document.execCommand('copy'); // Security exception may be thrown by some browsers.\r\n } catch (ex) {\r\n if (failCallback) failCallback();\r\n console.warn('Copy to clipboard failed.', ex);\r\n return false;\r\n } finally {\r\n document.body.removeChild(textarea);\r\n }\r\n }\r\n };\r\n\r\n export function GetEnumValueAsNumber(typ: T, val: string | number): number {\r\n if (typeof val === 'number') return val;\r\n return typ[val];\r\n }\r\n\r\n export const generateGuid = (): Guid => {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\r\n const r = (Math.random() * 16) | 0,\r\n v = c == 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n };\r\n\r\n export function isDate(value: string): boolean {\r\n return /^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}/.test(value);\r\n } \r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n import TaskModel = Modules.Tasks.TaskModel;\r\n import ITaskResourceClass = Modules.Tasks.ITaskResourceClass;\r\n import TaskTypeModel = Modules.Tasks.TaskTypeModel;\r\n import IColleagueResourceClass = Umbrella.Modules.Colleagues.IColleagueResourceClass;\r\n import IFunctionGroupResourceClass = Umbrella.Modules.Colleagues.IFunctionGroupResourceClass;\r\n import ColleagueModel = Umbrella.Modules.Colleagues.ColleagueModel;\r\n import SelectedColleagueOrFunctiongroup = Umbrella.Modules.SelectedColleagueOrFunctiongroup;\r\n import TaskOverviewStateParams = Umbrella.TaskHandling.Overview.TaskOverviewStateParams;\r\n import FunctionGroupModel = Umbrella.Modules.Knowledgebase.FunctionGroupModel;\r\n import TaskOverviewItemModel = Modules.Tasks.TaskOverviewItemModel;\r\n import TaskCompleteByModel = Modules.Tasks.TaskCompleteByModel;\r\n import GetEnumValueAsNumber = Helpers.GetEnumValueAsNumber;\r\n import TaakStatus = Umbrella.Modules.Tasks.TaakStatus;\r\n import TaskService = Umbrella.Modules.Tasks.TaskService;\r\n\r\n export const showTaskDetailView$ = new Rx.Subject();\r\n\r\n const DEFAULT_PAGESIZE = 9;\r\n const notNull = x => x !== null;\r\n\r\n @Service('TaskHandling', 'TaskOverviewService')\r\n @Inject(\r\n '$q',\r\n '$location',\r\n 'TaskOverviewStore',\r\n 'TaskResource',\r\n 'ColleagueResource',\r\n 'FunctionGroupResource',\r\n 'LocalStorageService',\r\n 'TaskService'\r\n )\r\n export class TaskOverviewService extends BaseStoreService {\r\n public showTaskDetailView: boolean;\r\n\r\n constructor(\r\n private $q: ng.IQService,\r\n private $location: ng.ILocationService,\r\n store: TaskOverviewStore,\r\n private taskResource: ITaskResourceClass,\r\n private colleagueResource: IColleagueResourceClass,\r\n private functionGroupResource: IFunctionGroupResourceClass,\r\n private localStorageService: LocalStorageService,\r\n private taskService: TaskService\r\n ) {\r\n super(store);\r\n this.observeTaskUpdates();\r\n }\r\n\r\n public ensureLoaded(): void {\r\n this.load();\r\n }\r\n\r\n public setDisplayTaskDetailView(showTaskDetailView: boolean) {\r\n if (\r\n (showTaskDetailView !== null && window.device.mobile()) ||\r\n window.device.surface() ||\r\n window.device.tablet()\r\n ) {\r\n this.showTaskDetailView = showTaskDetailView;\r\n showTaskDetailView$.onNext(showTaskDetailView);\r\n }\r\n return this.showTaskDetailView;\r\n }\r\n\r\n public async load(pageSize = DEFAULT_PAGESIZE) {\r\n const state = this.getState();\r\n const filters = state && state.filters;\r\n\r\n return await this.getTasks(pageSize, filters);\r\n }\r\n\r\n public addTaskToList(task: TaskModel.Detailed): void {\r\n if (!task) return;\r\n if (!this.taskPassesCurrentFilters(task)) return;\r\n\r\n const state = this.getState();\r\n const list = state && state.tasks;\r\n if (!state || !list || !list.items) {\r\n this.load();\r\n return;\r\n }\r\n\r\n if (\r\n !task.ends ||\r\n (list.items.length >= DEFAULT_PAGESIZE &&\r\n new Date(task.ends).getTime() > new Date(list.items[list.items.length - 1].ends).getTime())\r\n )\r\n return;\r\n\r\n list.items.push(this.taskModelDetailedToTaskOverviewItemModel(task));\r\n const modifiedTaskItems = list.items.sort(\r\n (x1, x2) => new Date(x1.ends).getTime() - new Date(x2.ends).getTime()\r\n );\r\n\r\n this.emit({\r\n type: 'TasksModifiedEvent',\r\n modifiedTasks: {\r\n ...list,\r\n ...modifiedTaskItems,\r\n total: ++list.total\r\n }\r\n });\r\n }\r\n\r\n private taskModelDetailedToTaskOverviewItemModel(task: TaskModel.Detailed): TaskOverviewItemModel {\r\n const completeBy: TaskCompleteByModel = {\r\n id: task.completeBy.id,\r\n name: task.completeBy.name,\r\n type: task.completeBy.type\r\n };\r\n\r\n const faq: Umbrella.Modules.Tasks.TaskOverviewItemModel.FaqDto = {\r\n question: task.case ? task.case.title : ''\r\n };\r\n\r\n const mappedTask: TaskOverviewItemModel = {\r\n completeBy,\r\n created: task.created,\r\n description: task.description,\r\n discussionCount: task.totalDiscussions,\r\n ends: task.ends,\r\n faq,\r\n id: task.id,\r\n lastModified: task.lastModified,\r\n relatedPerson: task.relatedPerson,\r\n status: task.status,\r\n subject: task.subject,\r\n taskType: task.taskType,\r\n unitId: task.unitId,\r\n complexId: task.complexId\r\n };\r\n\r\n return mappedTask;\r\n }\r\n\r\n public select(id: System.Guid) {\r\n const state = this.getState();\r\n if (state && state.selectedTask && state.selectedTask.id === id) return;\r\n\r\n this.emit({ type: 'TaskDetailsLoadingEvent' });\r\n\r\n const selectedTask =\r\n state && state.tasks && state.tasks.items && state.tasks.items.filter(t => t.id === id)[0];\r\n if (selectedTask)\r\n this.emit({\r\n type: 'TaskDetailsLoadedEvent',\r\n task: selectedTask,\r\n completedBy: null\r\n });\r\n\r\n this.loadMoreDetails(id);\r\n this.loadActivities(id);\r\n }\r\n\r\n public loadMoreDetails(id?: System.Guid): void {\r\n const state = this.getState();\r\n if (!id && (!state || !state.selectedTask)) return;\r\n\r\n this.taskResource\r\n .getById({ id: id || state.selectedTask.id })\r\n .$promise.then(task => this.updateSelectedTask(task));\r\n }\r\n\r\n public update(task: TaskModel.Detailed): ng.IPromise {\r\n const payload = {\r\n id: task.id,\r\n status: task.status,\r\n completeBy: task.completeBy,\r\n description: task.description,\r\n subject: task.subject,\r\n ends: task.ends,\r\n mediaIds: task.mediaIds,\r\n taskType: task.taskType,\r\n created: task.created\r\n };\r\n const promise = this.taskResource.update(payload as any).$promise;\r\n\r\n promise.then(updatedTask => {\r\n if (this.isSelectedTask(updatedTask)) this.updateSelectedTask(updatedTask);\r\n\r\n this.updateListWhenContainingTask(updatedTask);\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n public loadActivities(taskId: System.Guid) {\r\n this.emit({ type: 'TaskActivitiesLoadingEvent' });\r\n this.taskResource.getHistory({ id: taskId, page: 0, pageSize: 255 }, data => {\r\n this.emit({\r\n type: 'TaskActivitiesLoadedEvent',\r\n activities: data.items\r\n });\r\n });\r\n }\r\n\r\n public pickup(): ng.IPromise {\r\n const state = this.getState();\r\n if (!state || !state.selectedTask) return this.$q.reject('No task selected yet.');\r\n\r\n const promise = this.taskResource.pickUp({\r\n id: state.selectedTask.id\r\n }).$promise;\r\n\r\n promise.then(task => {\r\n this.updateListWhenContainingTask(task);\r\n if (this.isSelectedTask(task)) this.updateSelectedTask(task);\r\n\r\n // Necessary to load the detailed model (case + contractId), otherwise the inspection buttons aren't displayed\r\n this.loadMoreDetails(task.id);\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n public finish(description: string): ng.IPromise {\r\n const state = this.getState();\r\n if (!state || !state.selectedTask) return this.$q.reject('No task selected yet.');\r\n\r\n const promise = this.taskResource.finish({ id: state.selectedTask.id }, description).$promise;\r\n\r\n promise.then(task => {\r\n this.removeTaskFromList(task);\r\n if (this.isSelectedTask(task)) this.updateSelectedTask(task);\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n public async finishedViaCaseFlow(id: System.Guid) {\r\n const state = this.getState();\r\n var task = await this.taskResource.getById({ id: id }).$promise;\r\n\r\n this.removeTaskFromList(task);\r\n if (this.isSelectedTask(task)) this.updateSelectedTask(task);\r\n }\r\n\r\n public reject(reason: string): ng.IPromise {\r\n const state = this.getState();\r\n if (!state || !state.selectedTask) return this.$q.reject('No task selected yet.');\r\n\r\n const promise = this.taskResource.reject({ id: state.selectedTask.id }, reason).$promise;\r\n\r\n promise.then(task => {\r\n this.updateListWhenContainingTask(task);\r\n if (this.isSelectedTask(task)) this.updateSelectedTask(task);\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n public delete(reason: string): ng.IPromise {\r\n const state = this.getState();\r\n if (!state || !state.selectedTask) return this.$q.reject('No task selected yet.');\r\n\r\n const promise = this.taskResource.delete({ id: state.selectedTask.id }, reason).$promise;\r\n\r\n promise.then(task => {\r\n if (this.isSelectedTask(task)) this.updateSelectedTask(task);\r\n\r\n this.removeTaskFromList(task);\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n public async reply(message: string): Promise {\r\n const state = this.getState();\r\n if (!state || !state.selectedTask) return this.$q.reject('No task selected yet.');\r\n\r\n const promise = await this.taskResource.discuss({ id: state.selectedTask.id }, message).$promise;\r\n\r\n this.addTaskDiscussionActivity(state.selectedTask.id, message);\r\n\r\n return promise;\r\n }\r\n\r\n public filterByQuery(query = '') {\r\n const state = this.getState();\r\n if (!state) return;\r\n\r\n const filters = {\r\n ...state.filters,\r\n query\r\n };\r\n\r\n if (JSON.stringify(state.filters) === JSON.stringify(filters)) return;\r\n\r\n this.updateFilters(filters);\r\n }\r\n\r\n public filterByStatus(status = '') {\r\n const state = this.getState();\r\n if (!state) return;\r\n\r\n const filters = {\r\n ...state.filters,\r\n status\r\n };\r\n\r\n if (JSON.stringify(state.filters) === JSON.stringify(filters)) return;\r\n\r\n this.updateFilters(filters);\r\n }\r\n\r\n public filterByDeadline(deadline = '') {\r\n const state = this.getState();\r\n if (!state) return;\r\n\r\n const filters = {\r\n ...state.filters,\r\n deadline\r\n };\r\n\r\n if (JSON.stringify(state.filters) === JSON.stringify(filters)) return;\r\n\r\n this.updateFilters(filters);\r\n }\r\n\r\n public filterByTaskTypes(taskTypes: string[]) {\r\n const state = this.getState();\r\n if (!state) return;\r\n\r\n const filters = {\r\n ...state.filters,\r\n taskTypes\r\n };\r\n\r\n if (JSON.stringify(state.filters) === JSON.stringify(filters)) return;\r\n\r\n this.updateFilters(filters);\r\n }\r\n\r\n public filterByCreatedBy(colleagueOrFunctiongroup: SelectedColleagueOrFunctiongroup) {\r\n const state = this.getState();\r\n if (!state) return;\r\n\r\n const filters = {\r\n ...state.filters,\r\n createdBy: colleagueOrFunctiongroup\r\n };\r\n\r\n if (JSON.stringify(state.filters) === JSON.stringify(filters)) return;\r\n\r\n this.updateFilters(filters);\r\n }\r\n\r\n public filterByAssignedTo(colleagueOrFunctiongroup: SelectedColleagueOrFunctiongroup) {\r\n const state = this.getState();\r\n if (!state) return;\r\n\r\n const filters = {\r\n ...state.filters,\r\n assignedTo: colleagueOrFunctiongroup\r\n };\r\n\r\n if (JSON.stringify(state.filters) === JSON.stringify(filters)) return;\r\n\r\n this.updateFilters(filters);\r\n }\r\n\r\n public loadTaskTypes(): ng.IPromise {\r\n const state = this.getState();\r\n if (state && state.taskTypes) return this.$q.resolve(state.taskTypes);\r\n\r\n return this.taskResource.queryAllTypesExceptCaseFlow().$promise;\r\n }\r\n\r\n public async filterByStateParams(params: TaskOverviewStateParams): Promise {\r\n const propertySet = !!(\r\n (params.page && params.page > 0) ||\r\n params.query ||\r\n params.status ||\r\n params.deadline ||\r\n params.taskTypes ||\r\n params.createdById ||\r\n params.assignedToId\r\n );\r\n\r\n if (!propertySet) return;\r\n\r\n const state = this.getState();\r\n if (!state) return;\r\n\r\n const filters = await this.mapStateParamsToFilterValues(params);\r\n if (JSON.stringify(state.filters) === JSON.stringify(filters)) return;\r\n\r\n this.updateFilters(filters, false);\r\n }\r\n\r\n private async getTasks(pageSize = DEFAULT_PAGESIZE, filters: Overview.TaskOverviewFilters) {\r\n const state = this.getState();\r\n const tasksLoadedCount = state && state.tasks && state.tasks.items ? state.tasks.items.length : 0;\r\n const page = Math.floor(tasksLoadedCount / pageSize);\r\n\r\n this.emit({ type: 'TasksLoadingEvent', page, pageSize });\r\n\r\n await this.taskResource\r\n .getTasks({\r\n page,\r\n pageSize,\r\n searchQuery: (filters && filters.query) || '',\r\n status: (filters && filters.status) || '',\r\n completion: (filters && filters.deadline) || '',\r\n taskTypes: (filters && filters.taskTypes) || [],\r\n createdById: (filters && filters.createdBy && filters.createdBy.id) || null,\r\n completeById: (filters && filters.assignedTo && filters.assignedTo.id) || null\r\n })\r\n .$promise.then(tasks =>\r\n this.emit({\r\n type: 'TasksLoadedEvent',\r\n tasks: this.filterTasksAlreadyInState(tasks)\r\n })\r\n )\r\n .catch(error => this.emit({ type: 'TasksLoadFailedEvent', error }));\r\n }\r\n\r\n private filterTasksAlreadyInState(tasksToAdd: PagedItemsModel) {\r\n const state = this.getState();\r\n if (!state || !state.tasks || !state.tasks.items || state.tasks.items.length <= 0) {\r\n return tasksToAdd;\r\n }\r\n\r\n tasksToAdd.items = tasksToAdd.items.filter(x => state.tasks.items.every(t => t.id !== x.id));\r\n return tasksToAdd;\r\n }\r\n\r\n private updateListWhenContainingTask(task: TaskModel): void {\r\n const state = this.getState();\r\n const taskInList = state && state.tasks && state.tasks.items.filter(t => t.id === task.id)[0];\r\n\r\n if (!taskInList) return;\r\n\r\n if (!this.taskPassesCurrentFilters(task)) {\r\n this.removeTaskFromList(task);\r\n return;\r\n }\r\n\r\n const taskOverviewModel: TaskOverviewItemModel = {\r\n ...taskInList,\r\n status: task.status,\r\n description: task.description,\r\n completeBy: task.completeBy,\r\n ends: task.ends,\r\n lastModified: task.lastModified,\r\n relatedPerson: task.relatedPerson,\r\n subject: task.subject,\r\n taskType: task.taskType\r\n };\r\n\r\n this.emit({\r\n type: 'TasksItemModifiedEvent',\r\n task: taskOverviewModel\r\n });\r\n }\r\n\r\n private taskPassesCurrentFilters(task: TaskModel): boolean {\r\n const state = this.getState();\r\n const filters = state && state.filters;\r\n\r\n if (!task) return false;\r\n\r\n if (filters && filters.status && GetEnumValueAsNumber(TaakStatus, filters.status) !== task.status)\r\n return false;\r\n if (filters && filters.assignedTo && task.completeBy && task.completeBy.id !== filters.assignedTo.id)\r\n return false;\r\n\r\n if (!filters || !filters.status) {\r\n if (!this.taskService.isAssignedToMeOrOneOfMyFunctionGroups(task, window.user)) return false;\r\n\r\n const isNewAssignedOrRejectedTask =\r\n task.status === TaakStatus.Nieuw ||\r\n task.status.toString() === 'Nieuw' ||\r\n task.status === TaakStatus.Opgepakt ||\r\n task.status.toString() === 'Opgepakt' ||\r\n task.status === TaakStatus.Geweigerd ||\r\n task.status.toString() === 'Geweigerd';\r\n if (!isNewAssignedOrRejectedTask) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private removeTaskFromList(task: TaskModel): void {\r\n const state = this.getState();\r\n const isTaskInList = state && state.tasks && state.tasks.items.filter(t => t.id === task.id).length > 0;\r\n\r\n if (isTaskInList) {\r\n this.emit({\r\n type: 'TasksModifiedEvent',\r\n modifiedTasks: {\r\n ...state.tasks,\r\n items: state.tasks.items.filter(t => t.id !== task.id),\r\n total: state.tasks.total - 1\r\n }\r\n });\r\n }\r\n }\r\n\r\n private addTaskDiscussionActivity(taskId: System.Guid, message: string): void {\r\n const activity = {\r\n message,\r\n startTime: new Date().toISOString(),\r\n colleague: window.user,\r\n type: 'TaakDiscussieActivity'\r\n };\r\n this.emit({ type: 'NewTaskActivityEvent', activity });\r\n }\r\n\r\n private updateSelectedTask = (task: TaskModel | TaskModel.Detailed) => {\r\n const hasCase = task => task && task.case;\r\n\r\n if (task && hasCase(task)) {\r\n const caseId = (task).case.id;\r\n this.loadLinkedTasks(task.id, caseId);\r\n }\r\n\r\n if (task.completedById) {\r\n this.colleagueResource.getById({ id: task.completedById }).$promise.then(colleague => {\r\n this.emit({\r\n type: 'TaskDetailsLoadedEvent',\r\n task,\r\n completedBy: colleague\r\n });\r\n });\r\n } else\r\n this.emit({\r\n type: 'TaskDetailsLoadedEvent',\r\n task,\r\n completedBy: null\r\n });\r\n };\r\n\r\n private isSelectedTask = (task: TaskModel) => {\r\n const state = this.getState();\r\n return state && state.selectedTask && state.selectedTask.id === task.id;\r\n };\r\n\r\n private observeTaskUpdates(): void {\r\n taskHubOnCreated$.filter(notNull).subscribe(task => {\r\n this.addTaskToList(task);\r\n });\r\n\r\n taskHubOnUpdated$.filter(notNull).subscribe(task => {\r\n if (this.isSelectedTask(task)) {\r\n this.loadActivities(task.id);\r\n this.updateSelectedTask(task);\r\n }\r\n\r\n this.updateListWhenContainingTask(task);\r\n });\r\n\r\n taskHubOnDeleted$.filter(notNull).subscribe(task => {\r\n this.removeTaskFromList(task);\r\n });\r\n\r\n taskHubOnActivitiesUpdated$\r\n .filter(notNull)\r\n .filter(this.isSelectedTask)\r\n .subscribe(task => {\r\n this.loadActivities(task.id);\r\n });\r\n }\r\n\r\n private storeFilterValues(filterValues: Overview.TaskOverviewFilters): void {\r\n this.localStorageService.store('TaskOverviewFilters', JSON.stringify(filterValues));\r\n }\r\n\r\n public initializeFilters(): void {\r\n this.updateFilters(this.generateFiltersQuery());\r\n }\r\n\r\n public generateFiltersQuery(): Overview.TaskOverviewFilters {\r\n const storedFilterValues = this.localStorageService.get('TaskOverviewFilters');\r\n if (storedFilterValues && storedFilterValues.length) {\r\n return JSON.parse(storedFilterValues);\r\n }\r\n\r\n const state = this.getState();\r\n const filters = state && state.filters;\r\n const emptyFilters = {\r\n query: '',\r\n taskTypes: [],\r\n status: '',\r\n deadline: '',\r\n createdBy: null,\r\n assignedTo: null\r\n };\r\n\r\n if (!filters) {\r\n return emptyFilters;\r\n }\r\n\r\n return { ...emptyFilters, ...filters };\r\n }\r\n\r\n private updateFilters(filters: Overview.TaskOverviewFilters, storeFilters = true): void {\r\n const state = this.getState();\r\n const stateFilters = state && state.filters;\r\n\r\n if (!stateFilters || JSON.stringify(stateFilters) !== JSON.stringify(filters)) {\r\n if (storeFilters) this.storeFilterValues(filters);\r\n this.emit({ type: 'TaskOverviewFiltersUpdatedEvent', filters });\r\n }\r\n\r\n this.updateFiltersUrlQuery(filters);\r\n }\r\n\r\n public updateFiltersUrlQuery(filterValues: Overview.TaskOverviewFilters): void {\r\n const filtersQuery = {\r\n query: filterValues.query,\r\n status: filterValues.status,\r\n deadline: filterValues.deadline,\r\n taskTypes: filterValues.taskTypes,\r\n assignedToId: (filterValues.assignedTo && filterValues.assignedTo.id) || null,\r\n createdById: (filterValues.createdBy && filterValues.createdBy.id) || null\r\n };\r\n const currentQuery = this.$location.search();\r\n this.$location.search({ ...currentQuery, ...filtersQuery });\r\n this.ensureLoaded();\r\n }\r\n\r\n private async loadLinkedTasks(taskId: System.Guid, caseId: System.Guid): Promise {\r\n this.emit({ type: 'LinkedTasksLoadingEvent' });\r\n\r\n const allTasks = await this.taskResource.getLinkedTasks({\r\n id: taskId\r\n }).$promise;\r\n const linkedTasks = allTasks ? allTasks.filter(x => x.id !== taskId) : [];\r\n\r\n this.emit({ type: 'LinkedTasksLoadedEvent', linkedTasks });\r\n }\r\n\r\n private async mapStateParamsToFilterValues(\r\n params: TaskOverviewStateParams\r\n ): Promise {\r\n const assignedTo: any =\r\n !!params.assignedToId && (await this.getColleagueOrFunctionGroup(params.assignedToId));\r\n const createdBy: any = !!params.createdById && (await this.getColleagueOrFunctionGroup(params.createdById));\r\n\r\n return {\r\n query: params.query,\r\n status: params.status,\r\n deadline: params.deadline,\r\n taskTypes: params.taskTypes,\r\n assignedTo: assignedTo && {\r\n id: assignedTo.id,\r\n name: assignedTo.name || assignedTo.title,\r\n department: assignedTo.department || '',\r\n type: 'Colleagues'\r\n },\r\n createdBy: createdBy && {\r\n id: createdBy.id,\r\n name: createdBy.name || createdBy.title,\r\n department: createdBy.department || '',\r\n type: 'Colleagues'\r\n }\r\n };\r\n }\r\n\r\n private async getColleagueOrFunctionGroup(\r\n id: System.Guid\r\n ): Promise {\r\n try {\r\n const colleague = await this.colleagueResource.getById({ id }).$promise;\r\n return colleague;\r\n } catch (_) {\r\n const functiongroup = await this.functionGroupResource.getById({\r\n id\r\n }).$promise;\r\n return functiongroup;\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n import TaskOverviewService = Umbrella.TaskHandling.TaskOverviewService;\r\n import showTaskDetailView$ = Umbrella.TaskHandling.showTaskDetailView$;\r\n\r\n export const isTaskListFilterViewEnabled$ = new Rx.Subject();\r\n\r\n @Component('TaskHandling', {\r\n selector: 'task-overview',\r\n templateUrl: '/TaskHandling/_Overview/TaskOverview.html'\r\n })\r\n @Inject('TaskOverviewService')\r\n class TaskOverviewComponent {\r\n public showTaskDetailView: boolean;\r\n public tabletView: boolean;\r\n public isTaskListFilterViewEnabled: boolean;\r\n\r\n private taskListFilterViewSubscription: Rx.Disposable;\r\n private showTaskDetailViewObserver: Rx.IDisposable;\r\n\r\n constructor(private taskOverviewService: TaskOverviewService) {}\r\n\r\n $onInit() {\r\n if (\r\n window.device.mobile() ||\r\n (window.device.surface() && window.localStorage.getItem(DEVICE_STORAGE_KEY) === 'tablet_android') ||\r\n window.device.tablet()\r\n ) {\r\n this.showTaskDetailView = this.taskOverviewService.setDisplayTaskDetailView(\r\n this.taskOverviewService.showTaskDetailView\r\n );\r\n } else {\r\n this.isTaskListFilterViewEnabled = true;\r\n this.showTaskDetailView = true;\r\n }\r\n\r\n window.device.tablet() ? (this.tabletView = true) : (this.tabletView = false);\r\n this.subscribeEvents();\r\n }\r\n\r\n private subscribeEvents() {\r\n this.showTaskDetailViewObserver = showTaskDetailView$.subscribe(value => {\r\n this.showTaskDetailView = value;\r\n });\r\n this.taskListFilterViewSubscription = isTaskListFilterViewEnabled$.subscribe(() => {\r\n this.isTaskListFilterViewEnabled = !this.isTaskListFilterViewEnabled;\r\n });\r\n }\r\n\r\n $onDestroy() {\r\n this.showTaskDetailViewObserver.dispose();\r\n this.taskListFilterViewSubscription.dispose();\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n export interface CustomerServiceComponentState {\r\n impersonationInfo: Impersonation.State;\r\n }\r\n\r\n export const isCustomerFilterViewEnabled$ = new Rx.Subject();\r\n export const toggleAdditionalInformationView$ = new Rx.Subject();\r\n @Component('CustomerService', {\r\n selector: 'customer-service',\r\n templateUrl: '/CustomerService/CustomerServiceComponent/CustomerService.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n class CustomerServiceComponent {\r\n public state: CustomerServiceComponentState;\r\n public displayAdditionalInformationView: boolean;\r\n public isCustomerFilterViewEnabled: boolean;\r\n\r\n private isCustomerFilterViewSubscription: Rx.Disposable;\r\n private additionalInformationViewSubscription: Rx.Disposable;\r\n\r\n $onInit() {\r\n this.subscribeEvents();\r\n\r\n if (!(getStoredDeviceMode() === DEVICE_MODE.MOBILE) && !(getStoredDeviceMode() === DEVICE_MODE.TABLET)) {\r\n this.displayAdditionalInformationView = true;\r\n this.isCustomerFilterViewEnabled = true;\r\n }\r\n }\r\n\r\n public $onDestroy() {\r\n this.unsubscribeEvents();\r\n }\r\n\r\n private subscribeEvents(): void {\r\n this.additionalInformationViewSubscription = toggleAdditionalInformationView$.subscribe(() => {\r\n if (getStoredDeviceMode() === DEVICE_MODE.DESKTOP) {\r\n this.displayAdditionalInformationView = true;\r\n } else {\r\n this.displayAdditionalInformationView = !this.displayAdditionalInformationView;\r\n }\r\n });\r\n this.isCustomerFilterViewSubscription = isCustomerFilterViewEnabled$.subscribe(() => {\r\n if (getStoredDeviceMode() === DEVICE_MODE.DESKTOP) {\r\n this.isCustomerFilterViewEnabled = true;\r\n } else {\r\n this.isCustomerFilterViewEnabled = !this.isCustomerFilterViewEnabled;\r\n }\r\n });\r\n }\r\n\r\n private unsubscribeEvents() {\r\n if (this.additionalInformationViewSubscription) {\r\n this.additionalInformationViewSubscription.dispose();\r\n this.additionalInformationViewSubscription = null;\r\n }\r\n if (this.isCustomerFilterViewSubscription) {\r\n this.isCustomerFilterViewSubscription.dispose();\r\n this.isCustomerFilterViewSubscription = null;\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n import isTaskListFilterViewEnabled = Umbrella.TaskHandling.isTaskListFilterViewEnabled$;\r\n import toggleAdditionalInformationView = Umbrella.CustomerService.toggleAdditionalInformationView$;\r\n import isCustomerFilterViewEnabled = Umbrella.CustomerService.isCustomerFilterViewEnabled$;\r\n export const DEVICE_STORAGE_KEY = 'responsive_status';\r\n\r\n export enum DEVICE_MODE {\r\n SURFACE = 'desktop_windows',\r\n DESKTOP = 'desktop_windows',\r\n TABLET = 'tablet_android',\r\n MOBILE = 'mobile_android'\r\n }\r\n\r\n export function isDesktopModeActive(): boolean {\r\n return window.localStorage.getItem(DEVICE_STORAGE_KEY) === DEVICE_MODE.DESKTOP ? true : false;\r\n }\r\n\r\n export function getStoredDeviceMode(): string {\r\n return window.localStorage.getItem(DEVICE_STORAGE_KEY) || DEVICE_MODE.DESKTOP;\r\n }\r\n\r\n export function switchDeviceMode(): string {\r\n const storedMode = getStoredDeviceMode();\r\n const newMode = storedMode === DEVICE_MODE.DESKTOP ? DEVICE_MODE.TABLET : DEVICE_MODE.DESKTOP;\r\n window.localStorage.setItem(DEVICE_STORAGE_KEY, newMode);\r\n isSearchActive$.onNext(null);\r\n isTaskListFilterViewEnabled.onNext(null);\r\n toggleAdditionalInformationView.onNext(null);\r\n isCustomerFilterViewEnabled.onNext(null);\r\n applyStylingToDeviceMode(newMode);\r\n return newMode;\r\n }\r\n\r\n export function applyStylingToDeviceMode(mode: string): void {\r\n switch (mode) {\r\n case DEVICE_MODE.TABLET: {\r\n window.document.documentElement.className = window.document.documentElement.className.replace(\r\n 'desktop',\r\n 'tablet'\r\n );\r\n break;\r\n }\r\n case DEVICE_MODE.MOBILE: {\r\n window.document.documentElement.className = window.document.documentElement.className.replace(\r\n 'desktop',\r\n 'mobile'\r\n );\r\n break;\r\n }\r\n case DEVICE_MODE.DESKTOP: {\r\n window.document.documentElement.className = window.document.documentElement.className.replace(\r\n 'tablet',\r\n 'desktop'\r\n );\r\n break;\r\n }\r\n case DEVICE_MODE.SURFACE: {\r\n window.document.documentElement.className = window.document.documentElement.className.replace(\r\n 'tablet',\r\n 'desktop'\r\n );\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n export const isSearchActive$ = new Rx.Subject();\r\n\r\n import SignalRStateNotifyingService = Umbrella.Modules.SignalRStateNotifyingService;\r\n import AuthorizationService = Umbrella.Authorization.AuthorizationService;\r\n import session$ = Umbrella.session$;\r\n import getStoredDeviceMode = Umbrella.getStoredDeviceMode;\r\n import applyStylingToDeviceMode = Umbrella.applyStylingToDeviceMode;\r\n import isDesktopModeActive = Umbrella.isDesktopModeActive;\r\n\r\n @Component('Umbrella', {\r\n selector: 'app-root',\r\n templateUrl: '/AppRoot.html',\r\n bindings: {\r\n getThemeColor: '&?'\r\n }\r\n })\r\n @Inject('SignalRStateNotifyingService', 'AuthorizationService')\r\n class AppRootComponent {\r\n public isSearchActive: boolean;\r\n private isSearchActiveSubscription: Rx.Disposable;\r\n\r\n constructor(\r\n signalRStateNotifyingService: SignalRStateNotifyingService,\r\n authorizationService: AuthorizationService\r\n ) {\r\n signalRStateNotifyingService.start();\r\n authorizationService.start();\r\n }\r\n\r\n $onInit() {\r\n this.subscribeEvents();\r\n\r\n if (window.device.surface()) {\r\n applyStylingToDeviceMode(window.localStorage.getItem(DEVICE_STORAGE_KEY));\r\n if (window.localStorage.getItem(DEVICE_STORAGE_KEY) === DEVICE_MODE.TABLET) {\r\n return;\r\n }\r\n if (window.localStorage.getItem(DEVICE_STORAGE_KEY) === DEVICE_MODE.DESKTOP) {\r\n this.isSearchActive = true;\r\n } else {\r\n this.setDeviceMode();\r\n }\r\n } else {\r\n this.setDeviceMode();\r\n }\r\n }\r\n\r\n $onDestroy() {\r\n this.unSubscribeEvents();\r\n }\r\n\r\n private setDeviceMode() {\r\n window.localStorage.setItem(DEVICE_STORAGE_KEY, window.device.getDeviceMode());\r\n applyStylingToDeviceMode(window.device.getDeviceMode());\r\n if (window.device.desktop()) {\r\n this.isSearchActive = true;\r\n }\r\n }\r\n\r\n private subscribeEvents() {\r\n this.isSearchActiveSubscription = isSearchActive$.subscribe(() => {\r\n if (getStoredDeviceMode() === DEVICE_MODE.DESKTOP) {\r\n this.isSearchActive = true;\r\n } else {\r\n this.isSearchActive = !this.isSearchActive;\r\n }\r\n });\r\n }\r\n\r\n private unSubscribeEvents() {\r\n if (this.isSearchActiveSubscription) {\r\n this.isSearchActiveSubscription.dispose();\r\n this.isSearchActiveSubscription = null;\r\n }\r\n }\r\n }\r\n}\r\n","module Umbrella {\r\n import IResource = angular.resource.IResource;\r\n\r\n export interface IApplicationResource {\r\n mine(): IResource;\r\n }\r\n\r\n angular.module('Umbrella')\r\n .factory('ApplicationResource',\r\n [\r\n '$resource', ($resource: angular.resource.IResourceService) => $resource(\r\n 'api/v1/application/:action/:id',\r\n { \r\n },\r\n {\r\n mine: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'mine' }\r\n }\r\n }\r\n )\r\n ]);\r\n}","namespace Umbrella {\r\n @Pipe('Umbrella', 'async')\r\n class AsyncFilter {\r\n private values = {};\r\n private subscriptions = {};\r\n\r\n public transform(\r\n input:\r\n | Rx.IObservable\r\n | ng.IPromise\r\n | ng.IHttpPromise,\r\n scope: ng.IScope\r\n ) {\r\n if (!scope)\r\n throw new Error('AsyncFilter cannot work without scope');\r\n if (!scope.$applyAsync)\r\n throw new Error(\r\n 'AsyncFilter supplied with scope that has no $applyAsync function'\r\n );\r\n if (!input)\r\n throw new Error('AsyncFilter cannot subscribe null input');\r\n\r\n // Make sure we have an Observable or a Promise\r\n const observable = (input).subscribe\r\n ? >input\r\n : null;\r\n const promise = (input).then ? >input : null;\r\n const http = (input).success\r\n ? >input\r\n : null;\r\n if (!observable && !promise && !http)\r\n throw new Error(\r\n 'AsyncFilter only works with observables or promises'\r\n );\r\n\r\n const inputId = this.objectId(input);\r\n\r\n if (!(inputId in this.subscriptions)) {\r\n const callback =\r\n (observable && observable.subscribe.bind(input)) ||\r\n (http && http.success.bind(input)) ||\r\n (promise.then && promise.then.bind(input));\r\n\r\n this.subscriptions[inputId] = callback(value => {\r\n this.values[inputId] = value;\r\n\r\n if (scope && scope.$applyAsync) {\r\n scope.$applyAsync(); // Automatic safe apply, if scope provided\r\n }\r\n });\r\n\r\n if (scope && scope.$on) {\r\n // Clean up subscription and its last value when the scope is destroyed.\r\n scope.$on('$destroy', () => {\r\n if (\r\n this.subscriptions[inputId] &&\r\n this.subscriptions[inputId].dispose\r\n ) {\r\n this.subscriptions[inputId].dispose();\r\n }\r\n delete this.subscriptions[inputId];\r\n delete this.values[inputId];\r\n });\r\n }\r\n }\r\n\r\n return this.values[inputId];\r\n }\r\n\r\n // Need a way to tell the input objects apart from each other (so we only subscribe to them once)\r\n private nextObjectID = 0;\r\n private objectId(obj) {\r\n if (!obj.hasOwnProperty('__asyncFilterObjectID__')) {\r\n obj.__asyncFilterObjectID__ = ++this.nextObjectID;\r\n }\r\n\r\n return obj.__asyncFilterObjectID__;\r\n }\r\n\r\n // So that Angular does not cache the return value\r\n public static $stateful = true;\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.Authorization {\r\n @Service('Authorization', 'AuthorizationService')\r\n @Inject('ToastMessageService')\r\n export class AuthorizationService {\r\n private tokenSub: Rx.Disposable;\r\n private tokenExpiration: Date;\r\n private watcher: any;\r\n constructor(private toastMessageService: ToastMessageService) {}\r\n\r\n public start(): void {\r\n this.subscribeToTokenUpdates();\r\n }\r\n\r\n public stop(): void {\r\n this.unsubscribeFromTokenUpdates();\r\n this.stopExpirationWatcher();\r\n }\r\n\r\n public parseJwt(token: string) {\r\n if (!token || token.length < 1) return;\r\n\r\n const base64Url = token.split('.')[1];\r\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\r\n\r\n return JSON.parse(window.atob(base64));\r\n }\r\n\r\n private subscribeToTokenUpdates(): void {\r\n const hasToken = x => x && x.accessToken;\r\n\r\n this.tokenSub = session$\r\n .distinctUntilChanged()\r\n .filter(hasToken)\r\n .map(x => x.accessToken)\r\n .distinctUntilChanged()\r\n .subscribe(jwtToken => {\r\n const parsedJwtToken = this.parseJwt(jwtToken);\r\n this.onTokenUpdated(parsedJwtToken);\r\n });\r\n }\r\n\r\n private unsubscribeFromTokenUpdates(): void {\r\n if (this.tokenSub) this.tokenSub.dispose();\r\n }\r\n\r\n private onTokenUpdated(jwtToken: any): void {\r\n const exp = jwtToken && (jwtToken.exp || jwtToken.Exp);\r\n if (!exp) return;\r\n\r\n // token expiration is in seconds\r\n const expiration = new Date(exp * 1000);\r\n\r\n this.stopExpirationWatcher();\r\n this.startExpirationWatcher(expiration);\r\n }\r\n\r\n private startExpirationWatcher(expiration: Date) {\r\n this.watcherTickTock(expiration);\r\n }\r\n\r\n private stopExpirationWatcher() {\r\n clearInterval(this.watcher);\r\n }\r\n\r\n private watcherTickTock(expiration: Date) {\r\n const currentDate = new Date();\r\n const differenceInMs = expiration.getTime() - currentDate.getTime();\r\n const intervalWatchTime =\r\n (differenceInMs <= 1000 && differenceInMs) ||\r\n Math.ceil(differenceInMs / 10);\r\n\r\n if (differenceInMs <= 60000) { \r\n this.stopExpirationWatcher();\r\n startNewSessionWhenTokenHasExpired();\r\n return;\r\n }\r\n\r\n clearInterval(this.watcher);\r\n this.watcher = setInterval(\r\n () => this.watcherTickTock(expiration),\r\n intervalWatchTime\r\n );\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n import ConfigState = Umbrella.Config.ConfigState;\r\n import ConfigEvent = Umbrella.Config.ConfigEvent;\r\n\r\n angular.module('Umbrella').config([\r\n '$provide',\r\n $provide => {\r\n Config.configStore.state$\r\n .skipWhile(x => !x.config)\r\n .take(1)\r\n .subscribe(x => {\r\n const bugsnagApiKey = x.config && x.config.bugsnagApiKey;\r\n\r\n if (!bugsnagApiKey || bugsnagApiKey === 'none') return;\r\n let bugsnagConfig: any = {\r\n apiKey: bugsnagApiKey\r\n };\r\n\r\n const versionMeta = document.querySelector(\r\n 'meta[name=version]'\r\n );\r\n if (versionMeta) {\r\n bugsnagConfig = {\r\n ...bugsnagConfig,\r\n appVersion: versionMeta.getAttribute('content')\r\n };\r\n }\r\n const bugsnagClient = bugsnag(bugsnagConfig);\r\n\r\n $provide.decorator('$exceptionHandler', [\r\n '$delegate',\r\n $delegate => {\r\n return (exception, cause) => {\r\n $delegate(exception, cause);\r\n bugsnagClient.notify(exception, {\r\n beforeSend: report => {\r\n report.updateMetaData('angular', {\r\n cause\r\n });\r\n }\r\n });\r\n };\r\n }\r\n ]);\r\n });\r\n }\r\n ]);\r\n}\r\n","interface Date {\r\n clone(): Date;\r\n moveToDayOfWeek(dayOfWeek: number): Date;\r\n moveToFirstDayOfWeek(): Date;\r\n moveToLastDayOfWeek(): Date;\r\n moveToFirstDayOfMonth(): Date;\r\n moveToLastDayOfMonth(): Date;\r\n getMonthName(lang: string): string;\r\n getMonthNameByNumber(lang: string, number: number): string;\r\n getMonthNameShort(lang: string): string;\r\n getWeekNumber(): number;\r\n addHours(hours: number): Date;\r\n addDays(days: number): Date;\r\n addWeeks(weeks: number): Date;\r\n addMonths(months: number): Date;\r\n addMinutes(minutes: number): Date;\r\n addSeconds(seconds: number): Date;\r\n daysDifference(d2: Date): number;\r\n minutesDifference(d2: Date): number;\r\n businessDaysDifference(d2: Date): number;\r\n isWeekDay(): boolean;\r\n isValid(): boolean;\r\n toYYYYMMDDString(): string;\r\n midnight(): Date; \r\n toDDMMYYYYString(): string;\r\n}\r\n\r\nconst locale: any = {\r\n nl: {\r\n month_names: [\r\n 'januari',\r\n 'februari',\r\n 'maart',\r\n 'april',\r\n 'mei',\r\n 'juni',\r\n 'juli',\r\n 'augustus',\r\n 'september',\r\n 'oktober',\r\n 'november',\r\n 'december'\r\n ],\r\n month_names_short: [\r\n 'jan',\r\n 'feb',\r\n 'maa',\r\n 'apr',\r\n 'mei',\r\n 'jun',\r\n 'jul',\r\n 'aug',\r\n 'sep',\r\n 'okt',\r\n 'nov',\r\n 'dec'\r\n ],\r\n day_names: [\r\n 'zondag',\r\n 'maandag',\r\n 'dinsdag',\r\n 'woensdag',\r\n 'donderdag',\r\n 'vrijdag',\r\n 'zaterdag'\r\n ]\r\n }\r\n};\r\n\r\nfunction pad(nr: number): string {\r\n if (nr < 10) return '0' + nr;\r\n return nr.toString();\r\n}\r\n\r\n/**\r\n * Clone a date\r\n * @returns a clone of the current date\r\n */\r\nDate.prototype.clone = function() {\r\n return new Date(this.getTime());\r\n};\r\n\r\n/**\r\n * Moves to the specified day of the week in the current week\r\n *\r\n * @param dayOfWeek day of the week, 0 = sunday (first) to 6 = saturday (last)\r\n * @returns {}\r\n */\r\nDate.prototype.moveToDayOfWeek = function(dayOfWeek) {\r\n if (dayOfWeek < 0 || dayOfWeek > 6)\r\n throw new Error('day of week must be between 0 and 6');\r\n\r\n const d = this.clone();\r\n d.setDate(this.getDate() - this.getDay() + dayOfWeek);\r\n return d;\r\n};\r\n\r\n/**\r\n * Moves a date to the monday of the current week\r\n *\r\n * @returns monday of the current week\r\n */\r\nDate.prototype.moveToFirstDayOfWeek = function() {\r\n return this.moveToDayOfWeek(1);\r\n};\r\n\r\n/**\r\n * Moves a date to the next sunday after the current week\r\n *\r\n * @returns sunday after the current week\r\n */\r\nDate.prototype.moveToLastDayOfWeek = function() {\r\n return this.moveToDayOfWeek(0).addDays(7);\r\n};\r\n\r\nDate.prototype.moveToFirstDayOfMonth = function() {\r\n return new Date(this.getFullYear(), this.getMonth(), 1);\r\n};\r\n\r\nDate.prototype.moveToLastDayOfMonth = function() {\r\n return new Date(this.getFullYear(), this.getMonth() + 1, 0);\r\n};\r\n\r\nDate.prototype.getMonthName = function(lang) {\r\n lang = lang && lang in locale ? lang : 'en';\r\n return locale[lang].month_names[this.getMonth()];\r\n};\r\n\r\nDate.prototype.getMonthNameByNumber = (lang, number) => {\r\n lang = lang && lang in locale ? lang : 'en';\r\n return locale[lang].month_names[number];\r\n};\r\n\r\nDate.prototype.getMonthNameShort = function(lang) {\r\n lang = lang && lang in locale ? lang : 'en';\r\n return locale[lang].month_names_short[this.getMonth()];\r\n};\r\n\r\nDate.prototype.getWeekNumber = function() {\r\n const d = this.clone();\r\n d.setHours(0, 0, 0);\r\n d.setDate(d.getDate() + 4 - (d.getDay() || 7));\r\n const d2: any = new Date(d.getFullYear(), 0, 1);\r\n return Math.ceil(((d - d2) / 8.64e7 + 1) / 7);\r\n};\r\n\r\nDate.prototype.addHours = function(h) {\r\n const d = this.clone();\r\n d.setTime(this.getTime() + h * 60 * 60 * 1000);\r\n return d;\r\n};\r\n\r\nDate.prototype.addMinutes = function(m) {\r\n const d = this.clone();\r\n d.setTime(this.getTime() + m * 60 * 1000);\r\n return d;\r\n};\r\n\r\nDate.prototype.addSeconds = function(s) {\r\n const d = this.clone();\r\n d.setTime(this.getTime() + s * 1000);\r\n return d;\r\n};\r\n\r\nDate.prototype.addDays = function(days) {\r\n const d = this.clone();\r\n d.setDate(this.getDate() + days * 1);\r\n return d;\r\n};\r\n\r\nDate.prototype.addWeeks = function(weeks) {\r\n const d = this.clone();\r\n d.setDate(this.getDate() + weeks * 7);\r\n return d;\r\n};\r\n\r\nDate.prototype.addMonths = function(months) {\r\n const n = this.getDate();\r\n const d = this.clone();\r\n d.setDate(1);\r\n d.setMonth(this.getMonth() + months);\r\n d.setDate(\r\n Math.min(n, new Date(this.getYear(), this.getMonth() + 1, 0).getDate())\r\n );\r\n return d;\r\n};\r\n\r\nDate.prototype.daysDifference = function(d2: any) {\r\n const d = Math.abs(this - d2);\r\n return Math.floor(d / (24 * 60 * 60 * 1000));\r\n};\r\n\r\nDate.prototype.minutesDifference = function(d2: any) {\r\n const d = Math.abs(this - d2);\r\n return Math.floor(d / (60 * 1000));\r\n};\r\n\r\nDate.prototype.businessDaysDifference = function(d2) {\r\n const d = this.daysDifference(d2);\r\n let t = d % 7;\r\n\r\n let w1: number, w2: number;\r\n if (this < d2) {\r\n w1 = this.getDay();\r\n w2 = d2.getDay();\r\n } else {\r\n w2 = this.getDay();\r\n w1 = d2.getDay();\r\n }\r\n if (w1 > w2) t -= 2;\r\n if ((w1 === 0 && w2 === 6) || w1 === 6) t--;\r\n return Math.abs(Math.floor(d / 7) * 5 + t);\r\n};\r\n\r\nDate.prototype.isValid = function() {\r\n return !isNaN(this.getTime());\r\n};\r\n\r\nDate.prototype.isWeekDay = function() {\r\n const day = this.getDay();\r\n return 0 < day && day < 6;\r\n};\r\n\r\nDate.prototype.toYYYYMMDDString = function() {\r\n return `${this.getFullYear()}-${pad(this.getMonth() + 1)}-${pad(\r\n this.getDate()\r\n )}`;\r\n};\r\n\r\nDate.prototype.toDDMMYYYYString = function() {\r\n return `${pad(this.getDate())}-${pad(this.getMonth() + 1)}-${this.getFullYear()}`;\r\n};\r\n\r\n/**\r\n * Get the current date (midnight)\r\n *\r\n * @returns midnight (00:00:00) for the current date\r\n */\r\nDate.prototype.midnight = function() {\r\n const d = this.clone();\r\n d.setHours(0, 0, 0);\r\n return d;\r\n};\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace CustomerService.ColleagueCard {\r\n import ColleagueModel = Umbrella.Modules.Colleagues.ColleagueModel;\r\n import IColleagueResourceClass = Umbrella.Modules.Colleagues.IColleagueResourceClass;\r\n import PresenceResource = Umbrella.IPresenceResource;\r\n import StatusModel = Umbrella.Modules.Colleagues.StatusModel;\r\n import colleagueStatusUpdated$ = Umbrella.colleagueStatusUpdated$;\r\n\r\n @Component('CustomerService', {\r\n selector: 'colleague-card-sidebar',\r\n templateUrl: '/CustomerService/_ColleagueCard/ColleagueCardSidebarComponent/ColleagueCardSidebar.html'\r\n })\r\n @Inject('$stateParams', 'ColleagueResource', 'PresenceResource')\r\n export class ColleagueCardSidebarComponent {\r\n public personId: System.Guid;\r\n public colleague: ColleagueModel.Detailed;\r\n public availabilityStatus: StatusModel;\r\n private presenceObserver: Rx.IDisposable;\r\n\r\n constructor(\r\n private $stateParams: { personId: System.Guid },\r\n private colleagueResource: IColleagueResourceClass,\r\n private presenceResource: PresenceResource\r\n ) {}\r\n\r\n $onInit() {\r\n this.personId = this.$stateParams.personId;\r\n\r\n this.loadColleague(this.$stateParams.personId); \r\n this.observeAvailabilityStatus();\r\n }\r\n\r\n $onDestroy(): void {\r\n if (this.presenceObserver) this.presenceObserver.dispose();\r\n\r\n this.presenceObserver = null;\r\n }\r\n\r\n private async loadColleague(id: System.Guid): Promise {\r\n this.colleague = await this.colleagueResource.getById({ id }).$promise;\r\n this.loadAvailabilityStatus(this.colleague.personId);\r\n }\r\n\r\n private async loadAvailabilityStatus(id: System.Guid): Promise {\r\n const presence = await this.presenceResource.getStatusByIds({\r\n ids: [id]\r\n }).$promise;\r\n if (!presence || !presence.length) return;\r\n\r\n this.availabilityStatus = presence[0].status;\r\n }\r\n\r\n private observeAvailabilityStatus(): void {\r\n this.presenceObserver = colleagueStatusUpdated$\r\n .filter(x => !!x)\r\n .distinctUntilChanged()\r\n .subscribe(update => {\r\n if (this.colleague && this.colleague.id === update.userId) this.availabilityStatus = update.status;\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n angular.module('Umbrella').directive('focusOnLoad', () => {\r\n return {\r\n link(scope, element, attrs) {\r\n element.focus();\r\n element.on('load', () => {\r\n element.focus();\r\n });\r\n scope.$on('$viewContentLoaded', function() {\r\n //Here your view content is fully loaded !!\r\n element.focus();\r\n });\r\n }\r\n };\r\n });\r\n}\r\n","namespace Umbrella {\r\n export interface HighlightQuery {\r\n readonly match: string;\r\n readonly hide: boolean;\r\n }\r\n\r\n @Pipe('Umbrella', 'highlight')\r\n class HighlightFilter {\r\n public transform(text: any, query: string | HighlightQuery) {\r\n if (typeof text !== 'string') return text;\r\n\r\n let q = this.toQuery(query);\r\n const result = this.highlight(text, q.match);\r\n\r\n if (q.hide && result === text) {\r\n return '';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private toQuery(query: string | HighlightQuery): HighlightQuery {\r\n if (typeof query === 'string') return { match: query, hide: false };\r\n else return query;\r\n }\r\n\r\n private highlight(text: string, match: string): string {\r\n return match\r\n .trim()\r\n .toLowerCase()\r\n .split(' ')\r\n .map(w => this.removeSpecialChars(w))\r\n .reduce((text, word) => this.highlightWord(text, word), text);\r\n }\r\n\r\n private highlightWord(text: string, word: string): string {\r\n let re =\r\n this.regExCache[word] ||\r\n (this.regExCache[word] = new RegExp(\r\n word + '(?!([^<]+)?>)',\r\n 'mgi'\r\n ));\r\n return text.replace(re, '$&');\r\n }\r\n\r\n private removeSpecialChars(word: string) {\r\n return word.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\r\n }\r\n\r\n private readonly regExCache = {};\r\n }\r\n}\r\n","namespace Umbrella {\r\n @Pipe('Umbrella', 'isMobilePhone')\r\n class IsMobilePhoneFilter {\r\n private mobilePhonesStart = ['06', '+316', '00316', '316'];\r\n public transform(phoneNumber: string) {\r\n for (const startNum of this.mobilePhonesStart) {\r\n if (phoneNumber.startsWith(startNum)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n angular.module('Umbrella').decorator('$log', [\r\n '$delegate',\r\n ($delegate: ng.ILogService) => {\r\n const debugFn = $delegate.debug;\r\n const errorFn = $delegate.error;\r\n const infoFn = $delegate.info;\r\n\r\n function formatError(arg): string {\r\n const apiErrorModel = {\r\n applicationName: 'ServerUI',\r\n exceptionType: 'ClientException',\r\n message: '',\r\n exceptionMessage: '',\r\n stackTrace: ''\r\n };\r\n\r\n if (arg instanceof Error && arg.stack) {\r\n if (arg.message && arg.stack.indexOf(arg.message) === -1) {\r\n apiErrorModel.stackTrace = arg.stack;\r\n apiErrorModel.message = apiErrorModel.exceptionMessage = arg.message;\r\n } else {\r\n apiErrorModel.message = arg.stack;\r\n }\r\n } else {\r\n apiErrorModel.message = arg;\r\n }\r\n\r\n apiErrorModel.message +=\r\n '\\n\\nClient information' +\r\n \"\\nUser: '\" +\r\n ((window.user && window.user.name) || '(onbekend)') +\r\n \"' (\" +\r\n (window.user && window.user.id) +\r\n ')' +\r\n '\\nLocation: ' +\r\n $(location).attr('href') +\r\n '\\nUser agent: ' +\r\n navigator.userAgent;\r\n\r\n return JSON.stringify(apiErrorModel);\r\n }\r\n\r\n function handle(args, url: string): void {\r\n const cfg = Config.configStore.getState();\r\n if (cfg.config && cfg.config.debug) {\r\n window.console.error('Error reported by $log decorator', args);\r\n return;\r\n }\r\n\r\n const error = formatError(args[0]);\r\n if (error.toLowerCase().includes('transition rejection')) return;\r\n if (error.toLowerCase().includes('possibly unhandled rejection')) return;\r\n\r\n const currentSession = session$.getValue();\r\n const accessToken = currentSession && currentSession.accessToken;\r\n\r\n if (accessToken) {\r\n try {\r\n $.ajax({\r\n type: 'POST',\r\n url: Config.makeAbsoluteApiUrl(url),\r\n contentType: 'application/json',\r\n data: error,\r\n xhrFields: { withCredentials: false },\r\n headers: { Authorization: `Bearer ${accessToken}` }\r\n });\r\n } catch (e) {\r\n window.console && window.console.log(e);\r\n }\r\n }\r\n }\r\n\r\n $delegate.error = (...args) => {\r\n handle(args, '/api/v1/error/error');\r\n errorFn.apply(null, args);\r\n };\r\n\r\n $delegate.debug = (...args) => {\r\n handle(args, '/api/v1/error/debug');\r\n debugFn.apply(null, args);\r\n };\r\n\r\n $delegate.info = (...args) => {\r\n handle(args, '/api/v1/error/info');\r\n infoFn.apply(null, args);\r\n };\r\n\r\n return $delegate;\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella {\r\n import PersonSearchModel = Umbrella.Modules.PersonSearchModel;\r\n\r\n export interface GetAllByEmail {\r\n email: string;\r\n }\r\n\r\n export interface PersonSearchParams extends PagedRequestWithIdParams {\r\n roles?: string;\r\n characteristics?: string;\r\n }\r\n\r\n export interface SearchRequestParams {\r\n query: string;\r\n limit: number;\r\n }\r\n\r\n export declare class PersonResource {\r\n getById(ps: IdRequestParams): ng.resource.IResource;\r\n getByIds(params: IdsRequestParams): ng.resource.IResource;\r\n search(params: PersonSearchParams): ng.resource.IResource>;\r\n update(model: PersonModel): ng.resource.IResource;\r\n delete(ps: IdRequestParams): ng.resource.IResource;\r\n getWritableFields(params: IdRequestParams): ng.resource.IResource;\r\n }\r\n\r\n angular.module('Umbrella').service('PersonResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/people/:action/:id',\r\n {},\r\n {\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n getByIds: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { id: 'set' }\r\n },\r\n search: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'search', id: '@id' }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: {}\r\n },\r\n delete: {\r\n method: 'DELETE',\r\n isArray: false,\r\n params: { action: 'delete', id: '@id' }\r\n },\r\n getWritableFields:{\r\n url: '/api/v2/people/:id/:action',\r\n method: 'GET',\r\n isArray: false,\r\n params: {id: '@id', action: 'writablefields'}\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n angular\r\n .module('Umbrella')\r\n\r\n .directive('setFocusOnSearchInput', () => {\r\n return {\r\n restrict: 'A',\r\n link(scope, element) {\r\n element.on('click', () => {\r\n const interval = setInterval(() => {\r\n if (\r\n document.getElementsByClassName('md-clickable')\r\n .length > 0\r\n ) {\r\n document\r\n .getElementsByClassName('md-clickable')[0]\r\n .querySelector('md-input-container')\r\n .querySelector('input')\r\n .focus();\r\n clearInterval(interval);\r\n }\r\n }, 5);\r\n });\r\n }\r\n };\r\n });\r\n}\r\n","namespace Umbrella {\r\n export function stripHtml(html: string, fineTuning = false): string {\r\n if (!html.length) return html;\r\n let output = html;\r\n if (fineTuning) {\r\n output = html\r\n .replace(new RegExp(`

\\n<(ol|ul)>`, 'g'), '')\r\n .replace(new RegExp('
  • ', 'g'), '- ')\r\n .replace(new RegExp('', 'g'), '\\n');\r\n }\r\n return output\r\n .toString()\r\n .replace(/<[^>]+>/gm, '')\r\n .replace(' ', ' ');\r\n }\r\n\r\n @Pipe('Umbrella', 'stripHtml')\r\n class StripHtmlFilter {\r\n public transform(html: string, fineTuning = false) {\r\n if (!html || !html.length) return '';\r\n\r\n return stripHtml(html, fineTuning);\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n @Pipe('Umbrella', 'synchronizedObjectPath')\r\n class SynchronizedObjectPathFilter {\r\n public transform(id: System.Guid) {\r\n if (!id) return '';\r\n\r\n return Config.makeManagementSynchronizedObjectPath(id);\r\n }\r\n }\r\n}\r\n","namespace Umbrella {\r\n export declare class SynchronizedObjectResource {\r\n byEntityAndId(params: any): ng.resource.IResource;\r\n }\r\n\r\n angular.module('Umbrella').service('SynchronizedObjectResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/synchronizedobjects/entity/:entitytype/:entityid',\r\n {},\r\n {\r\n byEntityAndId: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { entitytype: '@entitytype', entityid: '@entityid' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n angular.module('Umbrella').directive('umbrellaEmail', [\r\n () => {\r\n return {\r\n scope: false,\r\n replace: false,\r\n transclude: true,\r\n template:\r\n '' +\r\n '',\r\n restrict: 'A',\r\n bindings: {\r\n umbrellaEmail: '<'\r\n },\r\n link: (scope, el, attr) => {\r\n let emailAddress: string;\r\n if (el.is('a')) {\r\n const aHref = el.attr('href');\r\n\r\n if (aHref) {\r\n emailAddress = aHref;\r\n }\r\n } else if (el.has('a')) {\r\n const aHref = el.find('a').attr('href');\r\n\r\n if (aHref) {\r\n emailAddress = aHref;\r\n }\r\n }\r\n\r\n if (!emailAddress) {\r\n emailAddress = el.text();\r\n }\r\n\r\n scope.emailAddress = emailAddress.replace('mailto:', '');\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n angular.module('Umbrella').directive('elemReady', [\r\n '$parse',\r\n $parse => {\r\n return {\r\n restrict: 'A',\r\n link: (scope, elem, attrs) => {\r\n const attributes = scope.$eval(attrs.elemReady);\r\n const observer = new MutationObserver(() => {\r\n scope.$eval(attributes.function);\r\n });\r\n\r\n observer.observe(elem[0], {\r\n attributes: attributes.attribute,\r\n childList: true,\r\n subtree: true\r\n });\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n angular.module('Umbrella').directive('mdHideChildElementsOnMenuClose', [\r\n '$mdSelect',\r\n $mdSelect => {\r\n return {\r\n link(scope, element, attrs) {\r\n scope.$on('$mdMenuClose', (ev, element) => {\r\n $mdSelect.hide();\r\n document\r\n .getElementsByClassName('md-clickable')[0]\r\n .querySelectorAll('.md-toggle')[0]\r\n .setAttribute('style', 'height: 0');\r\n });\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n angular.module('Umbrella').directive('mdPreventFocus', () => {\r\n return {\r\n link(scope, element, attrs, $mdOpenMenu) {\r\n scope.$on('$mdMenuOpen', (ev, element) => {\r\n const interval = setInterval(() => {\r\n if (\r\n document.getElementsByClassName('md-clickable')\r\n .length > 0 &&\r\n document\r\n .getElementsByClassName('md-clickable')[0]\r\n .querySelector('.md-focused')\r\n ) {\r\n document\r\n .getElementsByClassName('md-clickable')[0]\r\n .querySelector('.md-focused')\r\n .classList.remove('md-focused');\r\n clearInterval(interval);\r\n }\r\n }, 5);\r\n });\r\n }\r\n };\r\n });\r\n}\r\n","// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n angular.module('Umbrella').directive('mdPreventFocus', () => {\r\n return {\r\n link(scope, element, attrs, $mdOpenMenu) {\r\n scope.$on('$mdMenuOpen', (ev, element) => {\r\n const interval = setInterval(() => {\r\n if (\r\n document.getElementsByClassName('md-clickable')\r\n .length > 0 &&\r\n document\r\n .getElementsByClassName('md-clickable')[0]\r\n .querySelector('.md-focused')\r\n ) {\r\n document\r\n .getElementsByClassName('md-clickable')[0]\r\n .querySelector('.md-focused')\r\n .classList.remove('md-focused');\r\n clearInterval(interval);\r\n }\r\n }, 5);\r\n });\r\n }\r\n };\r\n });\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n angular.module('Umbrella').directive('mdToggle', () => {\r\n return {\r\n link(scope, element) {\r\n element.on('click', () => {\r\n let ulElement = element[0].getElementsByClassName(\r\n 'md-toggle'\r\n );\r\n let liElements = ulElement[0].getElementsByTagName('li')\r\n .length;\r\n let liElementHeight = ulElement[0].getElementsByTagName(\r\n 'li'\r\n )[0].clientHeight;\r\n\r\n if (ulElement[0].clientHeight > 0) {\r\n ulElement[0].setAttribute('style', 'height: 0;');\r\n } else {\r\n ulElement[0].setAttribute(\r\n 'style',\r\n 'height:' + liElements * liElementHeight + 'px'\r\n );\r\n }\r\n });\r\n }\r\n };\r\n });\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n angular.module('Umbrella').directive('minimizePopup', () => {\r\n return {\r\n link(scope, element) {\r\n let displayPopUp = false;\r\n\r\n element.on('click', () => {\r\n displayPopUp = !displayPopUp;\r\n togglePopUpStatus();\r\n\r\n function togglePopUpStatus(): void {\r\n const mdDialogIsActive = getElementByClassName('md-dialog-is-showing');\r\n if (displayPopUp && mdDialogIsActive) {\r\n hidePopup();\r\n } else {\r\n if (mdDialogIsActive) {\r\n showPopup();\r\n }\r\n }\r\n }\r\n\r\n function getElementByClassName(className: string): HTMLElement {\r\n return angular.element(document.getElementsByClassName(className))[0];\r\n }\r\n\r\n function hidePopup(): void {\r\n const mdDialogIsShowing = getElementByClassName('md-dialog-is-showing');\r\n const mdDialogContainer = getElementByClassName('md-dialog-container');\r\n const mdDialogBackdrop = getElementByClassName('md-dialog-backdrop');\r\n const mdScrollMask = getElementByClassName('md-scroll-mask');\r\n\r\n window.requestAnimationFrame(checkMdDialogContainerPosition);\r\n window.requestAnimationFrame(cancelMdDialogContainerAnimation);\r\n mdDialogContainer.classList.add('animate_backdrop');\r\n mdDialogContainer.classList.add('position-bottom');\r\n mdDialogContainer.style.overflow = 'visible';\r\n mdDialogIsShowing.classList.add('overflowHidden');\r\n mdDialogBackdrop.classList.add('animate_dialog_backdrop');\r\n mdScrollMask.style.display = 'none';\r\n }\r\n\r\n function showPopup(): void {\r\n const mdDialogIsShowing = getElementByClassName('md-dialog-is-showing');\r\n const mdDialogContainer = getElementByClassName('md-dialog-container');\r\n const mdDialogBackdrop = getElementByClassName('md-dialog-backdrop');\r\n const mdScrollMask = getElementByClassName('md-scroll-mask');\r\n const mdTransitionIn = getElementByClassName('md-transition-in');\r\n\r\n mdTransitionIn.removeAttribute('style');\r\n window.requestAnimationFrame(checkMdDialogContainerPosition);\r\n mdDialogContainer.classList.remove('position-bottom');\r\n mdDialogBackdrop.classList.remove('animate_dialog_backdrop');\r\n mdScrollMask.style.display = '';\r\n setTimeout(() => {\r\n mdDialogIsShowing.classList.remove('overflowHidden');\r\n }, 260);\r\n }\r\n\r\n function cancelMdDialogContainerAnimation(): void {\r\n const mdDialogContainer = getElementByClassName('md-dialog-container');\r\n const mdToolbarTransitions = getElementByClassName('_md-toolbar-transitions');\r\n const mdTransitionIn = getElementByClassName('md-transition-in');\r\n const mdTransitionInOffsetTop = mdTransitionIn.offsetTop;\r\n const transitionAnimation = window.requestAnimationFrame(cancelMdDialogContainerAnimation);\r\n const mdDialogContainerPosition = Number(mdDialogContainer.offsetTop);\r\n const mdToolbarTransitionsHeight = Number(mdToolbarTransitions.style.height);\r\n\r\n if (mdDialogContainerPosition > mdTransitionInOffsetTop + mdToolbarTransitionsHeight) {\r\n mdTransitionIn.setAttribute(\r\n 'style',\r\n 'position: absolute; margin-top:' +\r\n '-' +\r\n mdToolbarTransitions.clientHeight +\r\n 'px!important'\r\n );\r\n cancelAnimationFrame(transitionAnimation);\r\n }\r\n }\r\n\r\n function checkMdDialogContainerPosition(): void {\r\n const setValueAnimation = window.requestAnimationFrame(checkMdDialogContainerPosition);\r\n const mdDialogContainer = getElementByClassName('md-dialog-container');\r\n const mdDialogContainerPosition = Number(mdDialogContainer.offsetTop);\r\n\r\n if (mdDialogContainerPosition <= 0) {\r\n mdDialogContainer.classList.remove('animate_backdrop');\r\n cancelAnimationFrame(setValueAnimation);\r\n } else {\r\n mdDialogContainer.classList.add('animate_backdrop');\r\n cancelAnimationFrame(setValueAnimation);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n });\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n angular.module('Umbrella').directive('removeAndroidKeyboardOnScroll', () => {\r\n return {\r\n link(scope, element) {\r\n element[0].addEventListener('ps-scroll-y', () => {\r\n if (document.activeElement instanceof HTMLElement) {\r\n document.activeElement.blur();\r\n }\r\n });\r\n }\r\n };\r\n });\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n angular.module('Umbrella').directive('setHeightForResponsive', [\r\n '$window',\r\n $window => {\r\n return {\r\n restrict: 'A',\r\n replace: true,\r\n link($scope, element) {\r\n const isMobile = window.device.tablet() || window.device.mobile() || window.device.surface();\r\n\r\n if (isMobile) {\r\n setHeight();\r\n }\r\n\r\n angular.element($window).bind('resize', () => {\r\n if (isMobile) {\r\n setHeight();\r\n }\r\n });\r\n\r\n angular.element($window).bind('orientationchange', () => {\r\n if (isMobile) {\r\n setHeight();\r\n }\r\n });\r\n\r\n function setHeight() {\r\n setTimeout(() => {\r\n Array.from(document.querySelectorAll('.responsive-height'), element => setStyle(element));\r\n }, 500);\r\n }\r\n\r\n function setStyle(element) {\r\n const bodyHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\r\n\r\n if (window.device.tablet() || window.device.surface()) {\r\n if (element.id === 'searchResultsBox') {\r\n element.setAttribute('style', 'height:' + (bodyHeight - 48) + 'px;');\r\n return;\r\n }\r\n }\r\n\r\n if (window.device.mobile()) {\r\n if (element.id === 'searchResultsBox') {\r\n element.setAttribute('style', 'height:' + (bodyHeight - 113) + 'px;');\r\n return;\r\n }\r\n }\r\n\r\n element.setAttribute('style', 'height:' + bodyHeight + 'px;');\r\n }\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella {\r\n angular.module('Umbrella').config([\r\n '$mdThemingProvider',\r\n ($mdThemingProvider: any) => {\r\n defineColorPalettes($mdThemingProvider);\r\n defineThemes($mdThemingProvider);\r\n\r\n $mdThemingProvider.alwaysWatchTheme(true);\r\n }\r\n ]);\r\n\r\n function defineThemes($mdThemingProvider: any) {\r\n $mdThemingProvider\r\n .theme('umb-purple')\r\n .primaryPalette('umb-purple')\r\n .accentPalette('grey');\r\n\r\n $mdThemingProvider\r\n .theme('umb-blue')\r\n .primaryPalette('umb-blue')\r\n .accentPalette('grey');\r\n\r\n $mdThemingProvider\r\n .theme('umb-green')\r\n .primaryPalette('umb-green')\r\n .accentPalette('grey');\r\n }\r\n\r\n function defineColorPalettes($mdThemingProvider: any) {\r\n $mdThemingProvider.definePalette('umb-green', {\r\n 50: 'eaf5ea',\r\n 100: 'c9e7cb',\r\n 200: 'a6d7a8',\r\n 300: '82c785',\r\n 400: '67bb6a',\r\n 500: '4caf50',\r\n 600: '45a849',\r\n 700: '3c9f40',\r\n 800: '339637',\r\n 900: '248627',\r\n A100: 'c5ffc7',\r\n A200: '92ff95',\r\n A400: '5fff64',\r\n A700: '46ff4b',\r\n contrastDefaultColor: 'light',\r\n contrastDarkColors: [50, 100, 200, 300, 400, 500, 'A100', 'A200', 'A400', 'A700'],\r\n contrastLightColors: ['600', '700', '800', '900']\r\n });\r\n $mdThemingProvider.definePalette('umb-blue', {\r\n 50: 'e1f5fe',\r\n 100: 'b3e5fc',\r\n 200: '81d4fa',\r\n 300: '4fc3f7',\r\n 400: '29b6f6',\r\n 500: '03a9f4',\r\n 600: '03a2f3',\r\n 700: '0298f1',\r\n 800: '028fef',\r\n 900: '017eec',\r\n A100: 'ffffff',\r\n A200: 'e0efff',\r\n A400: 'add4ff',\r\n A700: '93c7ff',\r\n contrastDefaultColor: 'light',\r\n contrastDarkColors: ['50', '100', '200', '300', '400', 'A100', 'A200', 'A400', 'A700'],\r\n contrastLightColors: ['500', '600', '700', '800', '900']\r\n });\r\n\r\n $mdThemingProvider.definePalette('umb-purple', {\r\n 50: 'F8E6F8',\r\n 100: 'EFC2EF',\r\n 200: 'E499E4',\r\n 300: 'D970D9',\r\n 400: 'D051D0',\r\n 500: 'C832C8',\r\n 600: 'C22DC2',\r\n 700: 'BB26BB',\r\n 800: 'B41FB4',\r\n 900: 'B41FB4',\r\n A100: 'FFD9FF',\r\n A200: 'FFA6FF',\r\n A400: 'FF73FF',\r\n A700: 'FF59FF',\r\n contrastDefaultColor: 'light',\r\n contrastDarkColors: ['50', '100', '200', '300', '400', 'A100', 'A200', 'A400', 'A700'],\r\n contrastLightColors: ['500', '600', '700', '800', '900']\r\n });\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n import TaskTypeModel = Modules.Tasks.TaskTypeModel;\r\n import SelectedColleagueOrFunctiongroup = Modules.SelectedColleagueOrFunctiongroup;\r\n\r\n export namespace Overview {\r\n import TaskOverviewItemModel = Modules.Tasks.TaskOverviewItemModel;\r\n import TaskModel = Modules.Tasks.TaskModel;\r\n import TaskDiscussionActivityModel = Modules.Tasks.TaskDiscussionActivityModel;\r\n import ActivityModel = Modules.ActivityModel;\r\n import TaskActivityDto = Modules.Tasks.TaskActivityDto;\r\n\r\n export interface TasksLoadingEvent {\r\n readonly type: 'TasksLoadingEvent';\r\n readonly page: number;\r\n readonly pageSize: number;\r\n }\r\n\r\n export interface TasksLoadedEvent {\r\n readonly type: 'TasksLoadedEvent';\r\n readonly tasks: PagedItemsModel;\r\n }\r\n\r\n export interface TasksModifiedEvent {\r\n readonly type: 'TasksModifiedEvent';\r\n readonly modifiedTasks: PagedItemsModel;\r\n }\r\n\r\n export interface TasksItemModifiedEvent {\r\n type: 'TasksItemModifiedEvent';\r\n readonly task: TaskOverviewItemModel;\r\n }\r\n\r\n export interface TaskDetailsLoadingEvent {\r\n readonly type: 'TaskDetailsLoadingEvent';\r\n }\r\n\r\n export interface TaskDetailsLoadedEvent {\r\n readonly type: 'TaskDetailsLoadedEvent';\r\n readonly task: TaskModel | TaskModel.Detailed | TaskOverviewItemModel;\r\n readonly completedBy: Umbrella.Modules.Colleagues.ColleagueModel;\r\n }\r\n\r\n export interface TasksLoadFailedEvent {\r\n readonly type: 'TasksLoadFailedEvent';\r\n readonly error: any;\r\n }\r\n\r\n export interface TaskOverviewFiltersUpdatedEvent {\r\n readonly type: 'TaskOverviewFiltersUpdatedEvent';\r\n readonly filters: TaskOverviewFilters;\r\n }\r\n\r\n export interface TaskActivitiesLoadingEvent {\r\n readonly type: 'TaskActivitiesLoadingEvent';\r\n }\r\n\r\n export interface TaskActivitiesLoadedEvent {\r\n readonly type: 'TaskActivitiesLoadedEvent';\r\n readonly activities: ActivityModel[];\r\n }\r\n\r\n export interface LinkedTasksLoadingEvent {\r\n readonly type: 'LinkedTasksLoadingEvent';\r\n }\r\n\r\n export interface LinkedTasksLoadedEvent {\r\n readonly type: 'LinkedTasksLoadedEvent';\r\n readonly linkedTasks: TaskModel[];\r\n }\r\n\r\n export interface NewTaskActivityEvent {\r\n readonly type: 'NewTaskActivityEvent';\r\n readonly activity: any;\r\n }\r\n\r\n export interface TaskOverviewFilters {\r\n readonly query: string;\r\n readonly status: string;\r\n readonly deadline: string;\r\n readonly taskTypes: string[];\r\n readonly createdBy: SelectedColleagueOrFunctiongroup;\r\n readonly assignedTo: SelectedColleagueOrFunctiongroup;\r\n }\r\n\r\n export interface State {\r\n readonly loading: boolean;\r\n readonly error: any;\r\n readonly page: number;\r\n readonly pageSize: number;\r\n readonly tasks: PagedItemsModel;\r\n readonly selectedTaskLoading: boolean;\r\n readonly selectedTask: any;\r\n readonly selectedTaskCompletedBy: Umbrella.Modules.Colleagues.ColleagueModel;\r\n readonly filters: TaskOverviewFilters;\r\n readonly activities: ActivityModel[];\r\n readonly linkedTasks: TaskModel[];\r\n readonly taskTypes: TaskTypeModel[];\r\n }\r\n }\r\n\r\n export type TaskOverviewEvent =\r\n | Overview.TasksLoadingEvent\r\n | Overview.TasksLoadedEvent\r\n | Overview.TasksModifiedEvent\r\n | Overview.TasksItemModifiedEvent\r\n | Overview.TaskDetailsLoadingEvent\r\n | Overview.TaskDetailsLoadedEvent\r\n | Overview.TasksLoadFailedEvent\r\n | Overview.TaskOverviewFiltersUpdatedEvent\r\n | Overview.TaskActivitiesLoadingEvent\r\n | Overview.TaskActivitiesLoadedEvent\r\n | Overview.LinkedTasksLoadingEvent\r\n | Overview.LinkedTasksLoadedEvent\r\n | Overview.NewTaskActivityEvent;\r\n\r\n function reduce(e: TaskOverviewEvent): ObservableStore.Reducer {\r\n switch (e.type) {\r\n case 'TasksLoadingEvent':\r\n return s => ({\r\n ...s,\r\n loading: true\r\n });\r\n\r\n case 'TasksLoadedEvent':\r\n return s => ({\r\n ...s,\r\n loading: false,\r\n tasks: {\r\n ...s.tasks,\r\n items: s.tasks && s.tasks.items ? [...s.tasks.items, ...e.tasks.items] : e.tasks.items,\r\n page: e.tasks.page,\r\n pageSize: e.tasks.pageSize,\r\n total: e.tasks.total\r\n },\r\n error: null,\r\n page: e.tasks.page,\r\n pageSize: e.tasks.pageSize\r\n });\r\n\r\n case 'TasksModifiedEvent':\r\n return s => ({\r\n ...s,\r\n tasks: e.modifiedTasks\r\n });\r\n\r\n case 'TasksItemModifiedEvent':\r\n return s => ({\r\n ...s,\r\n tasks: {\r\n ...s.tasks,\r\n items:\r\n s.tasks &&\r\n s.tasks.items.map(x => {\r\n if (x.id === e.task.id) {\r\n return {\r\n ...x,\r\n ...e.task\r\n };\r\n }\r\n\r\n return x;\r\n })\r\n }\r\n });\r\n\r\n case 'TaskDetailsLoadingEvent':\r\n return s => ({\r\n ...s,\r\n selectedTaskLoading: true,\r\n selectedTask: null,\r\n selectedTaskCompletedBy: null\r\n });\r\n\r\n case 'TaskDetailsLoadedEvent':\r\n return s => ({\r\n ...s,\r\n selectedTaskLoading: false,\r\n selectedTask: e.task,\r\n selectedTaskCompletedBy: e.completedBy\r\n });\r\n\r\n case 'TasksLoadFailedEvent':\r\n return s => ({\r\n ...s,\r\n error: e.error\r\n });\r\n\r\n case 'TaskOverviewFiltersUpdatedEvent':\r\n return s => ({\r\n ...s,\r\n tasks: {\r\n items: [],\r\n page: 0,\r\n pageSize: s && s.tasks ? s.tasks.pageSize : 9,\r\n total: s && s.tasks ? s.tasks.total : 0\r\n },\r\n filters: e.filters\r\n });\r\n\r\n case 'TaskActivitiesLoadingEvent':\r\n return s => ({\r\n ...s,\r\n activities: []\r\n });\r\n\r\n case 'TaskActivitiesLoadedEvent':\r\n return s => ({\r\n ...s,\r\n activities: e.activities\r\n });\r\n\r\n case 'LinkedTasksLoadingEvent':\r\n return s => ({\r\n ...s,\r\n linkedTasks: []\r\n });\r\n\r\n case 'LinkedTasksLoadedEvent':\r\n return s => ({\r\n ...s,\r\n linkedTasks: e.linkedTasks\r\n });\r\n\r\n case 'NewTaskActivityEvent':\r\n return s => ({\r\n ...s,\r\n activities: [...s.activities, e.activity]\r\n });\r\n }\r\n }\r\n\r\n export type TaskOverviewStore = ObservableStore.EventStore;\r\n\r\n export const taskOverviewStore: TaskOverviewStore = rootStore.map(lens('taskOverview'), reduce);\r\n\r\n angular.module('TaskHandling').value('TaskOverviewStore', taskOverviewStore);\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import CaseFlowOverviewModel = Umbrella.CaseFlow.CaseFlowOverviewModel;\r\n import DetailedCaseFlowModel = Umbrella.CaseFlow.DetailedCaseFlowModel;\r\n import CaseFlowMessageModel = Umbrella.CaseFlow.CaseFlowMessageModel;\r\n import SelectedColleagueOrFunctiongroup = Umbrella.Modules.SelectedColleagueOrFunctiongroup;\r\n import AssignmentModel = Umbrella.CaseFlow.AssignmentModel;\r\n\r\n export enum View {\r\n List = 0,\r\n Workload = 1\r\n }\r\n\r\n export namespace Overview {\r\n export interface UpdateCaseFlowStepPickedUpEvent {\r\n readonly type: 'UpdateCaseFlowStepPickedUpEvent';\r\n readonly id: Guid;\r\n }\r\n\r\n export interface CasesSearchedEvent {\r\n readonly type: 'CasesSearchedEvent';\r\n readonly cases: SearchResultsModel;\r\n }\r\n\r\n export interface CasesLoadingEvent {\r\n readonly type: 'CasesLoadingEvent';\r\n readonly page: number;\r\n readonly pageSize: number;\r\n }\r\n\r\n export interface CasesLoadedEvent {\r\n readonly type: 'CasesLoadedEvent';\r\n readonly cases: SearchResultsModel;\r\n readonly filters: CaseOverviewFilters;\r\n }\r\n\r\n export interface CaseFlowOverviewListItemModifiedEvent {\r\n readonly type: 'CaseFlowOverviewListItemModifiedEvent';\r\n readonly modifiedCaseflow: CaseFlowOverviewModel;\r\n }\r\n\r\n export interface CaseFlowOverviewListItemRemovedEvent {\r\n readonly type: 'CaseFlowOverviewListItemRemovedEvent';\r\n readonly id: Guid;\r\n }\r\n\r\n export interface CaseFlowOverviewFiltersUpdatedEvent {\r\n readonly type: 'CaseFlowOverviewFiltersUpdatedEvent';\r\n readonly filters: CaseOverviewFilters;\r\n }\r\n\r\n export interface CaseFlowAssignmentLoadedEvent {\r\n readonly type: 'CaseFlowAssignmentLoadedEvent';\r\n readonly assignments: AssignmentModel[];\r\n }\r\n export interface CaseOverviewFilters {\r\n readonly query: string;\r\n readonly caseType: string;\r\n readonly statusses: string[];\r\n readonly completion: string;\r\n readonly owner: SelectedColleagueOrFunctiongroup;\r\n readonly executor: SelectedColleagueOrFunctiongroup;\r\n }\r\n\r\n export interface State {\r\n readonly loading: boolean;\r\n readonly updating: boolean;\r\n readonly error: any;\r\n readonly page: number;\r\n readonly pageSize: number;\r\n readonly cases: SearchResultsModel;\r\n readonly filters: CaseOverviewFilters;\r\n }\r\n\r\n export function set(s: CaseFlowState, replacement: State): CaseFlowState {\r\n return {\r\n caseInfo: s && s.caseInfo,\r\n overviewInfo: replacement\r\n };\r\n }\r\n }\r\n\r\n export namespace CaseFlow {\r\n export interface CaseFlowLoadingEvent {\r\n readonly type: 'CaseFlowLoadingEvent';\r\n readonly id: System.Guid;\r\n }\r\n\r\n export interface CaseFlowViewChangedEvent {\r\n readonly type: 'CaseFlowViewChangedEvent';\r\n readonly view: View;\r\n readonly pageSize: number;\r\n }\r\n\r\n export interface CaseFlowLoadingByTaskEvent {\r\n readonly type: 'CaseFlowLoadingByTaskEvent';\r\n readonly taskId: System.Guid;\r\n }\r\n\r\n export interface CaseFlowLoadedEvent {\r\n readonly type: 'CaseFlowLoadedEvent';\r\n readonly caseflow: DetailedCaseFlowModel;\r\n readonly owner: AssignmentModel;\r\n }\r\n\r\n export interface CaseFlowUnloadedEvent {\r\n readonly type: 'CaseFlowUnloadedEvent';\r\n }\r\n\r\n export interface CaseFlowHistoryLoadedV2Event {\r\n readonly type: 'CaseFlowHistoryLoadedV2Event';\r\n readonly caseHistory: Umbrella.Modules.Customers.v2.CaseModel;\r\n }\r\n\r\n export interface CaseFlowMediaLoadedEvent {\r\n readonly type: 'CaseFlowMediaLoadedEvent';\r\n readonly media: Umbrella.Modules.Customers.caseMedia[];\r\n }\r\n\r\n export interface SelfServiceReportLoadingEvent {\r\n readonly type: 'SelfServiceReportLoadingEvent';\r\n readonly id: System.Guid;\r\n }\r\n\r\n export interface SelfServiceReportLoadedEvent {\r\n readonly type: 'SelfServiceReportLoadedEvent';\r\n readonly selfServiceReport: Umbrella.Modules.SelfService.SelfServiceReportModel;\r\n }\r\n\r\n export interface TaskFinishedEvent {\r\n readonly type: 'TaskFinishedEvent';\r\n readonly taskId: System.Guid;\r\n }\r\n\r\n export interface CaseFlowMessagesLoadingEvent {\r\n readonly type: 'CaseFlowMessagesLoadingEvent';\r\n }\r\n\r\n export interface CaseFlowMessagesLoadedEvent {\r\n readonly type: 'CaseFlowMessagesLoadedEvent';\r\n readonly messages: CaseFlowMessageModel[];\r\n }\r\n\r\n export interface NewCaseFlowMessageEvent {\r\n readonly type: 'NewCaseFlowMessageEvent';\r\n readonly message: CaseFlowMessageModel;\r\n }\r\n\r\n export interface CaseFlowPublicMessagesLoadingEvent {\r\n readonly type: 'CaseFlowPublicMessagesLoadingEvent';\r\n }\r\n\r\n export interface CaseFlowPublicMessagesLoadedEvent {\r\n readonly type: 'CaseFlowPublicMessagesLoadedEvent';\r\n readonly publicMessages: CaseFlowMessageModel[];\r\n }\r\n\r\n export interface NewCaseFlowPublicMessageEvent {\r\n readonly type: 'NewCaseFlowPublicMessageEvent';\r\n readonly publicMessage: CaseFlowMessageModel;\r\n }\r\n\r\n export interface CaseFlowPersonLoadedEvent {\r\n readonly type: 'CaseFlowPersonLoadedEvent';\r\n readonly person: PersonModel;\r\n }\r\n\r\n export interface CaseFlowDocumentUploading {\r\n readonly type: 'CaseFlowDocumentUploadingEvent';\r\n }\r\n export interface CaseFlowDocumentUploaded {\r\n readonly type: 'CaseFlowDocumentUploadedEvent';\r\n readonly mediaUploadId: System.Guid;\r\n }\r\n export interface CaseFlowDocumentUploadError {\r\n readonly type: 'CaseFlowDocumentUploadErrorEvent';\r\n }\r\n\r\n export interface State {\r\n readonly id: System.Guid;\r\n readonly taskId?: System.Guid;\r\n readonly caseflow?: DetailedCaseFlowModel;\r\n readonly caseHistory?: Umbrella.Modules.Customers.v2.CaseModel;\r\n readonly status: CaseFlow.LoadingStatus;\r\n readonly selfServiceReport: Umbrella.Modules.SelfService.SelfServiceReportModel;\r\n readonly error: any;\r\n readonly owner?: AssignmentModel;\r\n readonly view: View;\r\n readonly pageSize: number;\r\n readonly messages: CaseFlowMessageModel[];\r\n readonly publicMessages: CaseFlowMessageModel[];\r\n readonly media?: Umbrella.Modules.Customers.caseMedia[];\r\n readonly person?: PersonModel;\r\n readonly isUploadingDocument: boolean;\r\n readonly mediaUploadId: System.Guid;\r\n }\r\n\r\n export enum LoadingStatus {\r\n Empty,\r\n Loading,\r\n Loaded\r\n }\r\n\r\n export function set(s: CaseFlowState, replacement: State): CaseFlowState {\r\n return {\r\n overviewInfo: s && s.overviewInfo,\r\n caseInfo: replacement\r\n };\r\n }\r\n }\r\n\r\n export type CaseFlowEvent =\r\n | CaseFlow.CaseFlowLoadingEvent\r\n | CaseFlow.CaseFlowLoadingByTaskEvent\r\n | CaseFlow.CaseFlowLoadedEvent\r\n | CaseFlow.CaseFlowUnloadedEvent\r\n | CaseFlow.CaseFlowHistoryLoadedV2Event\r\n | CaseFlow.CaseFlowMediaLoadedEvent\r\n | CaseFlow.SelfServiceReportLoadedEvent\r\n | CaseFlow.SelfServiceReportLoadingEvent\r\n | CaseFlow.CaseFlowViewChangedEvent\r\n | CaseFlow.TaskFinishedEvent\r\n | CaseFlow.CaseFlowMessagesLoadingEvent\r\n | CaseFlow.CaseFlowMessagesLoadedEvent\r\n | CaseFlow.NewCaseFlowMessageEvent\r\n | CaseFlow.CaseFlowPublicMessagesLoadingEvent\r\n | CaseFlow.CaseFlowPublicMessagesLoadedEvent\r\n | CaseFlow.NewCaseFlowPublicMessageEvent\r\n | Overview.CasesSearchedEvent\r\n | Overview.CasesLoadingEvent\r\n | Overview.CasesLoadedEvent\r\n | Overview.CaseFlowOverviewListItemModifiedEvent\r\n | Overview.CaseFlowOverviewListItemRemovedEvent\r\n | Overview.CaseFlowOverviewFiltersUpdatedEvent\r\n | Overview.CaseFlowAssignmentLoadedEvent\r\n | Overview.UpdateCaseFlowStepPickedUpEvent\r\n | CaseFlow.CaseFlowPersonLoadedEvent\r\n | CaseFlow.CaseFlowDocumentUploading\r\n | CaseFlow.CaseFlowDocumentUploaded\r\n | CaseFlow.CaseFlowDocumentUploadError;\r\n\r\n export interface CaseFlowState {\r\n caseInfo: CaseFlow.State;\r\n overviewInfo: Overview.State;\r\n }\r\n\r\n function reduce(e: CaseFlowEvent): (s: CaseFlowState) => CaseFlowState {\r\n switch (e.type) {\r\n case 'CaseFlowLoadingEvent':\r\n return s =>\r\n CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n id: e.id,\r\n taskId: null,\r\n caseflow: null,\r\n caseHistory: null,\r\n selfServiceReport: null,\r\n status: CaseFlow.LoadingStatus.Loading,\r\n owner: null\r\n });\r\n\r\n case 'CaseFlowViewChangedEvent':\r\n return s =>\r\n CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n view: e.view,\r\n pageSize: e.pageSize\r\n });\r\n\r\n case 'CaseFlowLoadingByTaskEvent':\r\n return s =>\r\n CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n id: null,\r\n taskId: e.taskId,\r\n caseflow: null,\r\n caseHistory: null,\r\n selfServiceReport: null,\r\n status: CaseFlow.LoadingStatus.Loading,\r\n owner: null\r\n });\r\n\r\n case 'CaseFlowLoadedEvent':\r\n return s =>\r\n CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n caseflow: e.caseflow,\r\n status: CaseFlow.LoadingStatus.Loaded,\r\n owner: e.owner\r\n });\r\n\r\n case 'SelfServiceReportLoadingEvent':\r\n return s =>\r\n CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n selfServiceReport: null,\r\n status: CaseFlow.LoadingStatus.Loading\r\n });\r\n\r\n case 'SelfServiceReportLoadedEvent':\r\n return s =>\r\n CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n selfServiceReport: e.selfServiceReport,\r\n status: CaseFlow.LoadingStatus.Loaded\r\n });\r\n\r\n case 'TaskFinishedEvent':\r\n const finishTask = (taskId: System.Guid, caseflowState: CaseFlow.State) => {\r\n if (!caseflowState || !caseflowState.caseflow) return caseflowState;\r\n\r\n for (const step of caseflowState.caseflow.steps) {\r\n for (const task of step.tasks) {\r\n if (task.id === taskId) task.isFinished = true;\r\n }\r\n }\r\n return caseflowState;\r\n };\r\n\r\n return s =>\r\n CaseFlow.set(s, {\r\n ...(s && finishTask(e.taskId, s.caseInfo))\r\n });\r\n\r\n case 'CaseFlowUnloadedEvent':\r\n return s =>\r\n CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n id: null,\r\n taskId: null,\r\n caseflow: null,\r\n caseHistory: null,\r\n selfServiceReport: null,\r\n status: CaseFlow.LoadingStatus.Empty,\r\n owner: null\r\n });\r\n\r\n case 'CaseFlowHistoryLoadedV2Event':\r\n return s =>\r\n CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n caseHistory: e.caseHistory,\r\n status: CaseFlow.LoadingStatus.Loaded\r\n });\r\n\r\n case 'CaseFlowMediaLoadedEvent':\r\n return s =>\r\n CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n media: e.media\r\n });\r\n\r\n case 'CaseFlowMessagesLoadingEvent':\r\n return s =>\r\n CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n messages: []\r\n });\r\n\r\n case 'CaseFlowMessagesLoadedEvent':\r\n return s =>\r\n CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n messages: e.messages\r\n });\r\n\r\n case 'NewCaseFlowMessageEvent':\r\n return s => {\r\n const messages = s && s.caseInfo && s.caseInfo.messages;\r\n if (messages) messages.push(e.message);\r\n\r\n return CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n messages: [...messages]\r\n });\r\n };\r\n\r\n case 'CaseFlowPublicMessagesLoadingEvent':\r\n return s =>\r\n CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n publicMessages: []\r\n });\r\n\r\n case 'CaseFlowPublicMessagesLoadedEvent':\r\n return s =>\r\n CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n publicMessages: e.publicMessages\r\n });\r\n\r\n case 'NewCaseFlowPublicMessageEvent':\r\n return s => {\r\n const publicMessages = s && s.caseInfo && s.caseInfo.publicMessages;\r\n if (publicMessages) publicMessages.push(e.publicMessage);\r\n\r\n return CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n publicMessages\r\n });\r\n };\r\n\r\n case 'CasesSearchedEvent':\r\n return s =>\r\n Overview.set(s, {\r\n ...(s && s.overviewInfo),\r\n loading: false,\r\n updating: false,\r\n error: null,\r\n cases: e.cases\r\n });\r\n\r\n case 'CasesLoadingEvent':\r\n return s =>\r\n Overview.set(s, {\r\n ...(s && s.overviewInfo),\r\n loading: true,\r\n updating: false,\r\n error: null,\r\n page: e.page,\r\n pageSize: e.pageSize\r\n });\r\n\r\n case 'CasesLoadedEvent':\r\n return s =>\r\n Overview.set(s, {\r\n ...s.overviewInfo,\r\n loading: false,\r\n page: e.cases.result.page,\r\n pageSize: e.cases.result.pageSize,\r\n updating: false,\r\n error: null,\r\n cases: {\r\n ...(s && s.overviewInfo && s.overviewInfo.cases),\r\n result: {\r\n ...(s && s.overviewInfo && s.overviewInfo.cases && s.overviewInfo.cases.result),\r\n page: e.cases.result.page,\r\n total: e.cases.result.total,\r\n pageSize: e.cases.result.pageSize,\r\n items:\r\n s.overviewInfo &&\r\n s.overviewInfo.cases &&\r\n s.overviewInfo.cases.result &&\r\n s.overviewInfo.cases.result.items\r\n ? [...s.overviewInfo.cases.result.items, ...e.cases.result.items]\r\n : [...e.cases.result.items]\r\n }\r\n },\r\n filters: e.filters\r\n });\r\n\r\n case 'CaseFlowOverviewListItemModifiedEvent':\r\n function modifyItemFromCaseFlowOverviewList(\r\n list: PagedItemsModel,\r\n modifiedCaseflow: CaseFlowOverviewModel\r\n ): PagedItemsModel {\r\n if (!list) return createEmptyPagedCaseFlowModel();\r\n\r\n const itemInList = list.items.find(x => x.id === modifiedCaseflow.id);\r\n\r\n if (!itemInList) return list;\r\n\r\n return {\r\n ...list,\r\n items: list.items.map(x => {\r\n if (x.id === modifiedCaseflow.id) {\r\n x = JSON.parse(JSON.stringify(modifiedCaseflow));\r\n }\r\n return x;\r\n })\r\n };\r\n }\r\n return s =>\r\n Overview.set(s, {\r\n ...(s && s.overviewInfo),\r\n cases: {\r\n ...(s && s.overviewInfo && s.overviewInfo.cases),\r\n result: modifyItemFromCaseFlowOverviewList(s.overviewInfo.cases.result, e.modifiedCaseflow)\r\n }\r\n });\r\n\r\n case 'CaseFlowOverviewListItemRemovedEvent':\r\n function removeItemFromCaseFlowOverviewList(\r\n list: PagedItemsModel,\r\n id: Guid\r\n ): PagedItemsModel {\r\n if (!list) return createEmptyPagedCaseFlowModel();\r\n\r\n return {\r\n ...list,\r\n items: [...list.items.filter(x => x.id !== id)],\r\n total: list.total - 1\r\n };\r\n }\r\n return s =>\r\n Overview.set(s, {\r\n ...(s && s.overviewInfo),\r\n cases: {\r\n ...(s && s.overviewInfo && s.overviewInfo.cases),\r\n result: removeItemFromCaseFlowOverviewList(s.overviewInfo.cases.result, e.id)\r\n }\r\n });\r\n\r\n case 'CaseFlowOverviewFiltersUpdatedEvent':\r\n return s =>\r\n Overview.set(s, {\r\n ...(s && s.overviewInfo),\r\n cases: {\r\n ...(s && s.overviewInfo && s.overviewInfo.cases),\r\n result: {\r\n page: 0,\r\n total:\r\n s && s.overviewInfo && s.overviewInfo.cases && s.overviewInfo.cases.result\r\n ? s.overviewInfo.cases.result.total\r\n : 0,\r\n pageSize:\r\n s && s.overviewInfo && s.overviewInfo.cases && s.overviewInfo.cases.result\r\n ? s.overviewInfo.cases.result.pageSize\r\n : 9,\r\n items: []\r\n }\r\n },\r\n loading: true,\r\n filters: e.filters\r\n });\r\n\r\n case 'CaseFlowAssignmentLoadedEvent':\r\n function fillAssignmentName(\r\n cases: CaseFlowOverviewModel[],\r\n assignemnts: AssignmentModel[]\r\n ): CaseFlowOverviewModel[] {\r\n if (!assignemnts) return cases;\r\n\r\n return [\r\n ...cases.map(c => {\r\n if (c.assignment && c.assignment.id) {\r\n const assignemnt = assignemnts.find(a => a.id === c.assignment.id);\r\n if (assignemnt) {\r\n return {\r\n ...c,\r\n assignment: {\r\n ...c.assignment,\r\n name: assignemnt.name\r\n }\r\n };\r\n }\r\n }\r\n return c;\r\n })\r\n ];\r\n }\r\n\r\n return s =>\r\n Overview.set(s, {\r\n ...(s && s.overviewInfo),\r\n cases: {\r\n ...(s && s.overviewInfo && s.overviewInfo.cases),\r\n result: {\r\n ...(s && s.overviewInfo && s.overviewInfo.cases && s.overviewInfo.cases.result),\r\n items: fillAssignmentName(s.overviewInfo.cases.result.items, e.assignments)\r\n }\r\n }\r\n });\r\n\r\n case 'UpdateCaseFlowStepPickedUpEvent':\r\n function updateItemFromCaseFlowOverviewList(\r\n list: PagedItemsModel,\r\n id: Guid\r\n ): PagedItemsModel {\r\n if (!list) return createEmptyPagedCaseFlowModel();\r\n const updatedItems = list.items.map(caseFlowModel => {\r\n if (caseFlowModel.id == id) {\r\n caseFlowModel.status = Umbrella.CaseFlow.CaseFlowStatus.PickedUp;\r\n return caseFlowModel;\r\n }\r\n return caseFlowModel;\r\n });\r\n\r\n return {\r\n ...list,\r\n items: updatedItems,\r\n total: list.total\r\n };\r\n }\r\n return s =>\r\n Overview.set(s, {\r\n ...(s && s.overviewInfo),\r\n cases: {\r\n ...(s && s.overviewInfo && s.overviewInfo.cases),\r\n result: updateItemFromCaseFlowOverviewList(s.overviewInfo.cases.result, e.id)\r\n }\r\n });\r\n\r\n case 'CaseFlowPersonLoadedEvent':\r\n return s =>\r\n CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n person: e.person\r\n });\r\n\r\n case 'CaseFlowDocumentUploadingEvent':\r\n return s =>\r\n CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n isUploadingDocument: true,\r\n mediaUploadId: null\r\n });\r\n\r\n case 'CaseFlowDocumentUploadedEvent':\r\n return s => {\r\n const media = (s && s.caseInfo && s.caseInfo.media) || [];\r\n\r\n return CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n isUploadingDocument: false,\r\n mediaUploadId: e.mediaUploadId,\r\n media: [\r\n ...media,\r\n {\r\n id: '1',\r\n mediaId: e.mediaUploadId,\r\n index: 0,\r\n tag: ''\r\n }\r\n ]\r\n });\r\n };\r\n\r\n case 'CaseFlowDocumentUploadErrorEvent':\r\n return s =>\r\n CaseFlow.set(s, {\r\n ...(s && s.caseInfo),\r\n isUploadingDocument: false\r\n });\r\n }\r\n }\r\n\r\n function createEmptyPagedCaseFlowModel(): PagedItemsModel {\r\n return >{\r\n items: [],\r\n total: 0,\r\n page: 0,\r\n pageSize: 9\r\n };\r\n }\r\n\r\n export type CaseFlowOverviewStore = ObservableStore.EventStore;\r\n export const caseFlowOverviewStore: CaseFlowOverviewStore = rootStore.map(\r\n lens('CaseFlow'),\r\n reduce\r\n );\r\n\r\n angular.module('Dashboard').value('CaseFlowOverviewStore', caseFlowOverviewStore);\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n import CaseFlowOverviewService = Umbrella.KCC.CaseFlowDashboard.CaseFlowOverviewService;\r\n import TaskOverviewService = Umbrella.TaskHandling.TaskOverviewService;\r\n\r\n angular.module('Umbrella').config([\r\n '$stateProvider',\r\n '$urlRouterProvider',\r\n ($stateProvider: ng.ui.IStateProvider, $urlRouterProvider: ng.ui.IUrlRouterProvider) => {\r\n const getDefaultState = (ps: PermissionsModel) =>\r\n ps.viewTask || ps.editTask ? 'tasks.overview' : ps.viewCaseFlow ? 'caseflow.overview' : 'announcements';\r\n\r\n const transitionToDefaultTab = ($state: ng.ui.IStateService) => {\r\n session$\r\n .skipWhile(x => !x.user || !x.user.permissions)\r\n .take(1)\r\n .map(s => 'dashboard.' + getDefaultState(s.user.permissions))\r\n .subscribe(name => {\r\n $state.transitionTo(name);\r\n });\r\n };\r\n\r\n $urlRouterProvider\r\n .when('', ['$state', ($state: ng.ui.IStateService) => transitionToDefaultTab($state)])\r\n .when('/', ['$state', ($state: ng.ui.IStateService) => transitionToDefaultTab($state)])\r\n .when('/dashboard', ['$state', ($state: ng.ui.IStateService) => transitionToDefaultTab($state)])\r\n .when('/dashboard/tasks', [\r\n '$injector',\r\n '$location',\r\n ($injector, $location: ng.ILocationService) => {\r\n // Rule to preserve URL backwards compatiblity with previous versions\r\n const params = $location.search();\r\n return (\r\n '/dashboard/taken/overzicht/' +\r\n (params && params.hasOwnProperty('taskid') ? params.taskid : '')\r\n );\r\n }\r\n ])\r\n .rule(($injector, $location: ng.ILocationService) => {\r\n // Rule to route url's properly regardless of absence or presence of trailing slash in url\r\n const path = $location.url();\r\n\r\n if (path[path.length - 1] === '/' || path.indexOf('/?') > -1) {\r\n if (path.indexOf('?') > -1) {\r\n return path.replace('/?', '?');\r\n } else {\r\n return path.substr(0, path.length - 1);\r\n }\r\n }\r\n\r\n return undefined;\r\n });\r\n\r\n $stateProvider.state('dashboard', {\r\n url: '/dashboard',\r\n parent: 'root',\r\n abstract: true,\r\n redirectTo: 'dashboard.tasks',\r\n views: {\r\n 'new@': {\r\n templateUrl: '/Modules/Dashboard/Dashboard.html',\r\n controller: 'DashboardController'\r\n }\r\n },\r\n onEnter: [\r\n 'TaskOverviewService',\r\n 'CaseFlowOverviewService',\r\n (taskOverviewService: TaskOverviewService, caseflowOverviewService: CaseFlowOverviewService) => {\r\n if (window.user.permissions.viewTask) {\r\n taskOverviewService.initializeFilters();\r\n taskOverviewService.ensureLoaded();\r\n }\r\n\r\n if (window.user.permissions.viewCaseFlow) {\r\n caseflowOverviewService.initializeFilters();\r\n caseflowOverviewService.setToListView();\r\n caseflowOverviewService.ensureLoaded();\r\n }\r\n }\r\n ]\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n angular\r\n .module('Umbrella')\r\n .config([\r\n '$stateProvider',\r\n $stateProvider => {\r\n $stateProvider\r\n .state('root', {\r\n url: '',\r\n abstract: true,\r\n views: {\r\n 'top@': {\r\n template: '',\r\n controller: createComponentRouteController(\r\n 'TopBarStore',\r\n s => ({\r\n impersonationInfo: s && s.impersonationInfo\r\n })\r\n )\r\n },\r\n 'left@': {\r\n templateUrl: '/Left.html'\r\n }\r\n }\r\n })\r\n .state('umbrella', {\r\n url: '',\r\n parent: 'root',\r\n abstract: true\r\n });\r\n }\r\n ])\r\n .run([\r\n '$rootScope',\r\n '$state',\r\n ($rootScope: IUmbrellaRootScope, $state: ng.ui.IStateService, $mdDialog: any) => {\r\n const hasError = x => x.error && x.error.name;\r\n session$\r\n .filter(x => hasError(x))\r\n .take(1)\r\n .subscribe(x => {\r\n console.warn('Unauthorized');\r\n\r\n $state.transitionTo('umbrella.error_401');\r\n\r\n return;\r\n });\r\n\r\n $rootScope.$on(\r\n '$stateChangeStart',\r\n (\r\n event: ng.IAngularEvent,\r\n toState: ng.ui.IState,\r\n toParams: ng.ui.IState,\r\n fromState: ng.ui.IState,\r\n fromParams: {}\r\n ) => {\r\n if (toState.name === 'umbrella.error_401') {\r\n console.log('Error 401');\r\n } else if (toState.name === 'umbrella.error_general') {\r\n console.log('Error general');\r\n } else if (!window.user || !window.user.permissions) {\r\n console.log('Waiting..');\r\n session$\r\n .skipWhile(x => !x.user || !x.user.permissions)\r\n .take(1)\r\n .subscribe(session => $state.transitionTo(toState.name, toParams));\r\n\r\n event.preventDefault();\r\n return false;\r\n } else if (\r\n toState.data &&\r\n toState.data.authorize &&\r\n !toState.data.authorize(window.user.permissions)\r\n ) {\r\n console.warn('Unauthorized');\r\n\r\n event.preventDefault();\r\n $state.transitionTo('umbrella.error_401');\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella {\r\n import MediaModel = Umbrella.Media.MediaModel;\r\n import MediaResourceProvider = Umbrella.Modules.MediaResourceProvider;\r\n import AdminMediaModel = Umbrella.Media.AdminMediaModel;\r\n\r\n @Component('Umbrella', {\r\n selector: 'attachment-list',\r\n templateUrl: '/AttachmentListComponent/AttachmentList.html',\r\n bindings: {\r\n media: '=?',\r\n cancelMediaUploadEnabled: '`;\r\n\r\n this.$mdDialog\r\n .show({\r\n template,\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n })\r\n .then(() => {\r\n this.getMediaObjects(this.mediaIds);\r\n });\r\n }\r\n\r\n public mediaIconFn(mediaItem: MediaModel) {\r\n if (mediaItem) {\r\n return this.mediaIsDeleted(mediaItem) ? 'history' : 'delete_outline';\r\n }\r\n return '';\r\n }\r\n\r\n public updateMediaList() {\r\n this.mediaIcon = this.mediaIsDeletable ? 'history' : 'delete_outline';\r\n }\r\n\r\n private mediaIsDeleted(mediaItem: MediaModel) {\r\n return mediaItem.type === 'MediaClearedModel' ? true : false;\r\n }\r\n\r\n public cancelMediaUploadAction(mediaItem: MediaModel) {\r\n this.media.forEach((media, index) => {\r\n if (mediaItem === media) this.media.splice(index, 1);\r\n });\r\n }\r\n\r\n private processMedia(mediaToProcess: MediaModel) {\r\n if (!(this.media.some(existingMedia => existingMedia.id === mediaToProcess.id))) {\r\n this.media.push(mediaToProcess);\r\n }\r\n else {\r\n const index = this.media.findIndex(existingMedia => existingMedia.id === mediaToProcess.id);\r\n if (JSON.stringify(this.media[index]) !== JSON.stringify(mediaToProcess)) {\r\n this.media[index] = mediaToProcess;\r\n }\r\n }\r\n }\r\n\r\n private getMediaObjects(ids: Guid[]): void {\r\n this.mediaResources.getByIdsV2({ ids }).$promise.then(mediaObjects => {\r\n mediaObjects.map((mediaObject: MediaModel) => this.processMedia(mediaObject));\r\n });\r\n }\r\n }\r\n}\r\n","namespace Umbrella {\r\n import MediaCategory = Umbrella.Media.MediaCategory;\r\n import MediaModel = Umbrella.Media.MediaModel;\r\n @Pipe('Umbrella', 'mediaIsDeletable')\r\n class MediaIsDeletableFilter {\r\n public transform(input: MediaModel): boolean {\r\n if (input) {\r\n const category: MediaCategory = MediaCategory[input.mediaCategory]\r\n switch (category) {\r\n case MediaCategory.SelfServiceMedia: // SelfServiceMedia = 9\r\n case MediaCategory.CaseMedia: // CaseMedia = 8,\r\n case MediaCategory.TaskMedia: // TaskMedia = 7,\r\n case MediaCategory.RepairRequestItemMedia: // RepairRequestItemMedia = 6,\r\n case MediaCategory.KnowledgebaseItemMedia: // KnowledgebaseItemMedia = 0,\r\n return true;\r\n\r\n default: // AdvertisementMedia = 1,\r\n return false; // DefectMedia = 2,\r\n // MailMedia = 3,\r\n // InspectionMedia = 4,\r\n\r\n }\r\n } else {\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella {\r\n import MediaModel = Umbrella.Media.MediaClearedModel;\r\n @Pipe('Umbrella', 'mediaIsDeleted')\r\n class MediaIsDeletedFilter {\r\n public transform(input: MediaModel): boolean {\r\n return input && input.type && input.type === 'MediaClearedModel';\r\n }\r\n }\r\n}\r\n","namespace Umbrella {\r\n @Pipe('Umbrella', 'mediaType')\r\n class MediaTypeFilter {\r\n public transform(input): string {\r\n const types = {\r\n MediaLinkModel: 'Link',\r\n MediaImageModel: 'Afbeelding',\r\n MediaVideoModel: 'Video',\r\n MediaDocumentModel: 'Document'\r\n };\r\n return types[input];\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules {\r\n import IResource = ng.resource.IResource;\r\n import AdminMediaModel = Umbrella.Media.AdminMediaModel;\r\n\r\n export class MediaClearParams {\r\n mediaId: Guid;\r\n reason: string;\r\n }\r\n\r\n export interface MediaResourceProvider {\r\n getByIds(params: IdsRequestParams): IResource;\r\n getByIdsV2(params: IdsRequestParams): IResource;\r\n deleteMedia(params: MediaClearParams);\r\n }\r\n\r\n angular.module('Umbrella').service('MediaResourceProvider', [\r\n '$resource',\r\n ($resource: ng.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/media/:action/:id',\r\n {},\r\n {\r\n getByIds: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'set' }\r\n },\r\n getByIdsV2: {\r\n url: '/api/v2/media/:action/:id',\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'set' }\r\n },\r\n deleteMedia: {\r\n url: '/api/v2/media/:mediaId/clear?reason=:reason',\r\n method: 'PUT',\r\n params: {\r\n mediaId: '@mediaId',\r\n reason: '@reason'\r\n }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n\r\n import MediaResourceProvider = Umbrella.Modules.MediaResourceProvider;\r\n\r\n @Component('Umbrella', {\r\n selector: 'delete-media',\r\n templateUrl: '/AttachmentListComponent/deleteMedia.html',\r\n bindings: {\r\n mediaItem: '<',\r\n }\r\n })\r\n @Inject('$mdDialog', 'MediaResourceProvider', 'ToastMessageService')\r\n export class DeleteMediaComponent {\r\n\r\n private mediaItem: any;\r\n public reason = '';\r\n\r\n constructor(\r\n private $mdDialog,\r\n private mediaResource: MediaResourceProvider,\r\n private toastMessageService: ToastMessageService,\r\n ) {}\r\n\r\n public cancel(): void {\r\n this.$mdDialog.cancel();\r\n }\r\n\r\n public deleteMedia(): void {\r\n this.mediaResource\r\n .deleteMedia({\r\n mediaId: this.mediaItem.id,\r\n reason: this.reason\r\n }\r\n ).$promise.then(() => {\r\n this.$mdDialog.hide();\r\n this.toastMessageService.success('Bestand is succesvol verwijderd');\r\n }).catch(() => {\r\n this.toastMessageService.error('Bestand verwijderen is mislukt');\r\n });\r\n }\r\n }\r\n}\r\n","namespace Umbrella {\r\n\r\n import MediaModel = Umbrella.Media.MediaModel;\r\n\r\n @Component('Umbrella', {\r\n selector: 'show-deleted-media-information',\r\n templateUrl: '/AttachmentListComponent/showdeletedmediainformation.html',\r\n bindings: {\r\n mediaItem: '<',\r\n }\r\n })\r\n @Inject('$mdDialog')\r\n export class ShowDeletedMediaInformation {\r\n\r\n public mediaItem: any;\r\n\r\n constructor(\r\n private $mdDialog,\r\n ) {}\r\n\r\n public cancel(): void {\r\n this.$mdDialog.cancel();\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import ICaseHistoryResourceClass = Modules.Cases.ICaseHistoryResourceClass;\r\n import IActivityResourceClass = Modules.IActivityResourceClass;\r\n import ActivityModel = Modules.ActivityModel;\r\n import TaskTypeCategory = Umbrella.Modules.Tasks.TaskTypeCategory;\r\n\r\n @Inject(\r\n 'ActivityResource',\r\n 'CaseHistoryResource'\r\n )\r\n @Component('CustomerService', {\r\n selector: 'case-activities',\r\n templateUrl: 'CaseActivitiesComponent/CaseActivitiesComponent.html',\r\n bindings: {\r\n caseId: '<',\r\n loadedPersonId: '<'\r\n }\r\n })\r\n export class CaseActivitiesComponent {\r\n public activities: ActivityModel[];\r\n public loadedPersonId: Guid;\r\n private caseId: Guid;\r\n private templatesFinishedLoading: number;\r\n private templatesDoneLoading: boolean;\r\n constructor(\r\n private activityResource: IActivityResourceClass,\r\n private caseHistoryResource: ICaseHistoryResourceClass,\r\n ) {}\r\n\r\n public $onInit() {\r\n this.loadActivities();\r\n }\r\n\r\n private loadActivities() {\r\n this.activityResource.getByCaseId({ id: this.caseId, pageSize: 150 }).$promise.then(activities => {\r\n const isCaseFlowTaskActivity = x =>\r\n x &&\r\n x.task &&\r\n x.task.taskType &&\r\n (x.task.taskType.category === TaskTypeCategory.CaseFlow || x.task.taskType.category === 'CaseFlow');\r\n const isTaskRelatedActivity = (x: ActivityModel) =>\r\n x &&\r\n x.type.toLowerCase().indexOf('taak') === 0 &&\r\n !(x.type.toLowerCase().indexOf('taakaangemaakt') === 0);\r\n const filteredItems = activities.items\r\n .filter(x => !isCaseFlowTaskActivity(x))\r\n .filter(x => !isTaskRelatedActivity(x));\r\n filteredItems.forEach(x => this.groupTaskActivities(x, activities.items));\r\n this.activities = filteredItems;\r\n });\r\n }\r\n\r\n public templateFinishedLoading() {\r\n this.templatesFinishedLoading += 1;\r\n if (this.templatesFinishedLoading === this.activities.length) {\r\n this.templatesDoneLoading = true;\r\n }\r\n }\r\n\r\n private groupTaskActivities(activity: any, items: ActivityModel[]): void {\r\n const isTaskCreatedActivity = x => x && x.task && x.type.toLowerCase().indexOf('taakaangemaakt') === 0;\r\n\r\n if (!isTaskCreatedActivity(activity)) return;\r\n\r\n const isLinkedActivity = (x, y) => x.task && x.task.id === y.task.id;\r\n const linkedActivities = items.filter(x => isLinkedActivity(x, activity));\r\n activity.linkedActivities = linkedActivities;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.KCC.CaseFlowDashboard {\r\n import CaseFlowStep = Umbrella.CaseFlow.CaseFlowModel.CaseFlowStep;\r\n\r\n @Pipe('CaseFlow', 'activeStep')\r\n class ActiveStepFilter {\r\n public transform(input: CaseFlowStep[]): CaseFlowStep {\r\n if (!input) return undefined;\r\n\r\n const steps = input.filter(this.isStepActive);\r\n return steps.length > 0 ? steps[0] : null;\r\n }\r\n\r\n private isStepActive(step: CaseFlowStep): boolean {\r\n return (\r\n step.status.toString() === \"1\" ||\r\n step.status.toString() === \"Started\" ||\r\n step.status.toString() === \"2\" ||\r\n step.status.toString() === \"PickedUp\"\r\n );\r\n }\r\n }\r\n}\r\n","namespace Umbrella.KCC.CaseFlowDashboard {\r\n @Pipe('Dashboard', 'canCancelCase')\r\n class CanCancelCaseFilter {\r\n public transform(c: Umbrella.CaseFlow.CaseFlowModel) {\r\n if (!c) return false;\r\n\r\n return (\r\n c.status === Umbrella.CaseFlow.CaseFlowStatus.Submitted ||\r\n c.status === 'Submitted' ||\r\n c.status === Umbrella.CaseFlow.CaseFlowStatus.PickedUp ||\r\n c.status === 'PickedUp'\r\n );\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Log {\r\n export type LogLevel = 'error' | 'warn' | 'info';\r\n\r\n export interface LogOutput {\r\n level: LogLevel;\r\n msg: string;\r\n }\r\n\r\n export const log$ = new Rx.Subject();\r\n log$.subscribe(x => {\r\n window.console && window.console[x.level](x.msg);\r\n });\r\n\r\n const send = (level: LogLevel, msg: any) => log$.onNext({ level, msg });\r\n\r\n export const error = msg => send('error', msg);\r\n export const warn = msg => send('warn', msg);\r\n export const info = msg => send('info', msg);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules {\r\n export interface SignalRInitialState {\r\n state: 'uninitialized';\r\n }\r\n\r\n export interface SignalRConnectedState {\r\n state: 'connected';\r\n slow: boolean;\r\n }\r\n\r\n export interface SignalRDisconnectedState {\r\n state: 'disconnected';\r\n reconnecting: boolean;\r\n }\r\n\r\n export type SignalRConnectionState =\r\n | SignalRConnectedState\r\n | SignalRDisconnectedState\r\n | SignalRInitialState;\r\n export const signalRConnectionState$ = new Rx.BehaviorSubject<\r\n SignalRConnectionState\r\n >({ state: 'uninitialized' });\r\n\r\n const delaySecAfterDisconnect = 2;\r\n\r\n const connected = () => {\r\n signalRConnectionState$.onNext({ state: 'connected', slow: false });\r\n };\r\n\r\n const connect = (cfg: Config.Config, token: string) => {\r\n $.connection.hub.qs = 't=' + token;\r\n\r\n $.connection.hub\r\n .start({ transport: cfg.signalRTransports || 'auto' })\r\n .progress(() => Log.info('SignalR connection starting...'))\r\n .done(connected)\r\n .fail(error => {\r\n Log.error('SignalR connection failed to start! ');\r\n Log.error(error);\r\n });\r\n };\r\n\r\n signalRConnectionState$\r\n .map(x => {\r\n switch (x.state) {\r\n case 'connected':\r\n return x.slow\r\n ? { level: 'warn', msg: 'SignalR slow' }\r\n : {\r\n level: 'info',\r\n msg:\r\n 'SignalR connected, transport = ' +\r\n $.connection.hub.transport.name\r\n };\r\n\r\n case 'disconnected':\r\n return x.reconnecting\r\n ? {\r\n level: 'warn',\r\n msg: 'SignalR disconnected, re-connecting...'\r\n }\r\n : {\r\n level: 'warn',\r\n msg: `SignalR disconnected, scheduling connect in ${delaySecAfterDisconnect} sec...`\r\n };\r\n\r\n case 'uninitialized':\r\n return { level: 'info', msg: 'SignalR initializing' };\r\n }\r\n })\r\n .skip(1)\r\n .subscribe(x => Log.log$.onNext(x));\r\n\r\n function setup(cfg: Config.Config) {\r\n if (cfg.signalRTransports === 'disabled') return;\r\n\r\n signalRConnectionState$.onNext({\r\n state: 'disconnected',\r\n reconnecting: false\r\n });\r\n\r\n $.connection.hub.url = Config.makeAbsoluteApiUrl('signalr');\r\n $.connection.hub.reconnected(connected);\r\n\r\n $.connection.hub.connectionSlow(() =>\r\n signalRConnectionState$.onNext({ state: 'connected', slow: true })\r\n );\r\n\r\n $.connection.hub.reconnecting(() =>\r\n signalRConnectionState$.onNext({\r\n state: 'disconnected',\r\n reconnecting: true\r\n })\r\n );\r\n\r\n $.connection.hub.disconnected(() => {\r\n signalRConnectionState$.onNext({\r\n state: 'disconnected',\r\n reconnecting: false\r\n });\r\n setTimeout(() => connect(cfg, window.session.accessToken), delaySecAfterDisconnect * 1000);\r\n });\r\n\r\n connect(cfg, window.session.accessToken);\r\n }\r\n\r\n session$\r\n .skipWhile(x => !x.config)\r\n .take(1)\r\n .subscribe(x => setup(window.clientConfig));\r\n\r\n export const isOnline$ = new Rx.BehaviorSubject(true);\r\n\r\n window.addEventListener('offline', () => isOnline$.onNext(false));\r\n window.addEventListener('online', () => isOnline$.onNext(true));\r\n\r\n export function onSignalRInitialized(callback: () => void): void {\r\n Modules.signalRConnectionState$\r\n .skipWhile(x => x.state === 'uninitialized')\r\n .take(1)\r\n .subscribe(() => {\r\n callback();\r\n });\r\n }\r\n\r\n export function onSignalRConnected(callback: () => void): void {\r\n Umbrella.Modules.signalRConnectionState$\r\n .skipWhile(x => {\r\n return x.state !== 'connected';\r\n })\r\n .take(1)\r\n .subscribe(() => {\r\n callback();\r\n });\r\n }\r\n\r\n export function waitUntilSignalRConnected(value: T): Rx.Observable {\r\n return Umbrella.Modules.signalRConnectionState$\r\n .skipWhile(x => x.state !== 'connected')\r\n .take(1)\r\n .map(_ => value);\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\ninterface SignalR {\r\n caseFlowHub: Umbrella.CaseFlowProcessing.CaseFlowHubProxy;\r\n}\r\n\r\nnamespace Umbrella.CaseFlowProcessing {\r\n import Guid = System.Guid;\r\n import CaseFlowStepModel = Umbrella.Modules.CaseFlow.CaseFlowStepModel;\r\n\r\n interface TaskModel {\r\n id: Guid;\r\n referenceId: Guid;\r\n }\r\n\r\n export interface CaseFlowHubClient {\r\n stepFinished(caseFlowId: Guid);\r\n stepPickedUp(caseFlowId: Guid);\r\n stepTasksCreated(caseFlowId: Guid);\r\n stepTaskFinished(caseFlowId: Guid);\r\n updated(caseFlowId: Guid);\r\n }\r\n\r\n export interface CaseFlowHubProxy extends HubProxy {\r\n client: CaseFlowHubClient;\r\n }\r\n\r\n export interface CaseFlowStepFinishedEvent {\r\n caseFlowId: System.Guid;\r\n }\r\n\r\n export interface CaseFlowStepPickedUpEvent {\r\n caseFlowId: System.Guid;\r\n }\r\n\r\n export interface CaseFlowStepTasksCreatedEvent {\r\n caseFlowId: System.Guid;\r\n }\r\n\r\n export interface CaseFlowStepTaskFinishedEvent {\r\n caseFlowId: System.Guid;\r\n }\r\n\r\n export interface CaseFlowUpdatedEvent {\r\n caseFlowId: System.Guid;\r\n }\r\n\r\n export const caseFlowStepFinished$ = new Rx.Subject<\r\n CaseFlowStepFinishedEvent\r\n >();\r\n\r\n export const caseFlowStepPickedUp$ = new Rx.Subject<\r\n CaseFlowStepPickedUpEvent\r\n >();\r\n\r\n export const caseFlowStepTasksCreated$ = new Rx.Subject<\r\n CaseFlowStepTasksCreatedEvent\r\n >();\r\n\r\n export const caseFlowStepTaskFinished$ = new Rx.Subject<\r\n CaseFlowStepTaskFinishedEvent\r\n >();\r\n\r\n export const caseFlowUpdated$ = new Rx.Subject<\r\n CaseFlowUpdatedEvent\r\n >();\r\n\r\n angular\r\n .module('CaseFlow')\r\n .factory('CaseFlowHub', () => $.connection.caseFlowHub);\r\n\r\n Modules.onSignalRInitialized(() => {\r\n $.connection.caseFlowHub.client.stepFinished = (\r\n caseFlowId: Guid\r\n ) => caseFlowStepFinished$.onNext({ caseFlowId });\r\n\r\n $.connection.caseFlowHub.client.stepPickedUp = (\r\n caseFlowId: Guid\r\n ) => caseFlowStepPickedUp$.onNext({ caseFlowId });\r\n\r\n $.connection.caseFlowHub.client.stepTasksCreated = (\r\n caseFlowId: Guid,\r\n ) => caseFlowStepTasksCreated$.onNext({ caseFlowId });\r\n\r\n $.connection.caseFlowHub.client.stepTaskFinished = (\r\n caseFlowId: Guid,\r\n ) => caseFlowStepTaskFinished$.onNext({ caseFlowId });\r\n\r\n $.connection.caseFlowHub.client.updated = (\r\n caseFlowId: Guid\r\n ) => caseFlowUpdated$.onNext({ caseFlowId });\r\n });\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import IColleagueResourceClass = Umbrella.Modules.Colleagues.IColleagueResourceClass;\r\n import SelectedColleagueOrFunctiongroup = Umbrella.Modules.SelectedColleagueOrFunctiongroup;\r\n import DetailedCaseFlowModel = Umbrella.CaseFlow.DetailedCaseFlowModel;\r\n import caseFlowStepFinished$ = Umbrella.CaseFlowProcessing.caseFlowStepFinished$;\r\n import caseFlowStepPickedUp$ = Umbrella.CaseFlowProcessing.caseFlowStepPickedUp$;\r\n import caseFlowStepTasksCreated$ = Umbrella.CaseFlowProcessing.caseFlowStepTasksCreated$;\r\n import caseFlowStepTaskFinished$ = Umbrella.CaseFlowProcessing.caseFlowStepTaskFinished$;\r\n import caseFlowUpdated$ = Umbrella.CaseFlowProcessing.caseFlowUpdated$;\r\n import CaseFlowOverviewModel = Umbrella.CaseFlow.CaseFlowOverviewModel;\r\n import CaseFlowStatus = Umbrella.CaseFlow.CaseFlowStatus;\r\n import GetEnumValueAsNumber = Umbrella.Helpers.GetEnumValueAsNumber;\r\n import CaseFlowMessageModel = Umbrella.CaseFlow.CaseFlowMessageModel;\r\n import FunctionGroupResource = Umbrella.Modules.Colleagues.IFunctionGroupResourceClass;\r\n import AssignmentModel = Umbrella.CaseFlow.AssignmentModel;\r\n import CaseFlowAssignmentType = Umbrella.CaseFlow.CaseFlowAssignmentType;\r\n import CaseFlowModel = Umbrella.CaseFlow.CaseFlowModel;\r\n import CaseFlowAddMessageModel = Umbrella.CaseFlow.CaseFlowAddMessageModel;\r\n import TaskHandling = Umbrella.TaskHandling;\r\n import IUploadService = angular.angularFileUpload.IUploadService;\r\n import MediaModel = Umbrella.Media.MediaModel;\r\n\r\n @Service('Dashboard', 'CaseFlowOverviewService')\r\n @Inject(\r\n '$q',\r\n 'CaseFlowOverviewStore',\r\n 'CaseFlowResource',\r\n 'CaseHistoryResource',\r\n 'SelfServiceReportResource',\r\n 'ColleagueResource',\r\n 'LocalStorageService',\r\n 'FunctionGroupResource',\r\n 'PersonResource',\r\n 'Upload',\r\n 'ToastMessageService'\r\n )\r\n export class CaseFlowOverviewService extends BaseStoreService {\r\n constructor(\r\n private $q: ng.IQService,\r\n store: CaseFlowOverviewStore,\r\n private caseFlowResource: CaseFlowResourceClass,\r\n private caseHistoryResource: Umbrella.Modules.Cases.ICaseHistoryResourceClass,\r\n private selfSerivceReportResource: Umbrella.Modules.SelfService.SelfServiceReportResource,\r\n private colleagueResource: IColleagueResourceClass,\r\n private localStorageService: LocalStorageService,\r\n private functionGroupResource: FunctionGroupResource,\r\n private personResource: PersonResource,\r\n private uploadService: IUploadService,\r\n private toastMessageService: ToastMessageService\r\n ) {\r\n super(store);\r\n\r\n this.observeEvents();\r\n }\r\n\r\n public async ensureLoaded() {\r\n await this.load();\r\n }\r\n\r\n public setToWorkloadView(): void {\r\n this.setView(View.Workload);\r\n }\r\n\r\n public setToListView(): void {\r\n this.setView(View.List);\r\n }\r\n\r\n public loadSelfServiceReportByCaseId(caseId: System.Guid): void {\r\n if (!window.user.permissions.viewDetailedCaseFlow) return;\r\n\r\n this.loadingSelfServiceReport(caseId);\r\n\r\n this.selfSerivceReportResource\r\n .getByCaseId({ id: caseId })\r\n .$promise.then((selfserviceReport: Umbrella.Modules.SelfService.SelfServiceReportModel) => {\r\n this.loadedSelfServiceReport(selfserviceReport);\r\n });\r\n }\r\n\r\n public loadByTaskId(taskId: System.Guid): ng.IPromise {\r\n this.loadingByTask(taskId);\r\n\r\n const promise = this.caseFlowResource.getByTaskId({ id: taskId }).$promise;\r\n\r\n promise.then(c => {\r\n this.loaded(c, null);\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n public async loadByCaseFlowId(caseflowId: System.Guid, force = false): Promise {\r\n const state = this.getState();\r\n if (\r\n !force &&\r\n state &&\r\n state.caseInfo &&\r\n state.caseInfo.caseflow &&\r\n state.caseInfo.caseflow.id === caseflowId\r\n )\r\n return;\r\n\r\n this.loading(caseflowId);\r\n\r\n let caseflow: DetailedCaseFlowModel;\r\n\r\n if (window.user.permissions.viewDetailedCaseFlow)\r\n caseflow = await this.caseFlowResource.getByIdDetailed({\r\n id: caseflowId\r\n }).$promise;\r\n else {\r\n const simpleModel = await this.caseFlowResource.getById({\r\n id: caseflowId\r\n }).$promise;\r\n caseflow = { ...simpleModel, steps: [] };\r\n }\r\n\r\n this.loaded(caseflow, await this.getOwner(caseflow.ownerModel));\r\n\r\n this.loadCaseHistory(caseflow.umbrellaCaseId);\r\n this.loadCaseMedia(caseflow.umbrellaCaseId);\r\n this.loadSelfServiceReportByCaseId(caseflow.umbrellaCaseId);\r\n this.loadMessages(caseflow.id);\r\n this.loadPublicMessages(caseflow.id);\r\n }\r\n\r\n public async update(c: Umbrella.CaseFlow.EditCaseFlowModel): Promise {\r\n const caseFlowModel = await this.caseFlowResource.update(c).$promise;\r\n const caseFlow = await this.caseFlowResource.getByIdDetailed({\r\n id: caseFlowModel.id\r\n }).$promise;\r\n\r\n this.loaded(caseFlow, await this.getOwner(caseFlow.ownerModel));\r\n\r\n return caseFlow;\r\n }\r\n\r\n public loadCaseHistory(caseId: System.Guid): void {\r\n this.caseHistoryResource\r\n .getByIdV2({ id: caseId })\r\n .$promise.then((c: Umbrella.Modules.Customers.v2.CaseModel) => {\r\n this.emit({\r\n type: 'CaseFlowHistoryLoadedV2Event',\r\n caseHistory: c\r\n });\r\n if (c.personId) this.loadPerson(c.personId);\r\n });\r\n }\r\n\r\n public loadCaseMedia(caseId: System.Guid): void {\r\n this.caseHistoryResource\r\n .getCaseMedia({ id: caseId })\r\n .$promise.then((m: Umbrella.Modules.Customers.caseMedia[]) =>\r\n this.emit({\r\n type: 'CaseFlowMediaLoadedEvent',\r\n media: m\r\n })\r\n );\r\n }\r\n\r\n public loadPerson(personId: System.Guid): void {\r\n this.personResource.getById({ id: personId }).$promise.then(p =>\r\n this.emit({\r\n type: 'CaseFlowPersonLoadedEvent',\r\n person: p\r\n })\r\n );\r\n }\r\n\r\n public pickUpStep(caseflow: Umbrella.CaseFlow.PickupCaseFlowStepModel): ng.IPromise {\r\n const promise = this.caseFlowResource.pickUpStep(caseflow).$promise;\r\n\r\n promise.then(value => {\r\n this.loadByCaseFlowId(caseflow.caseFlowId, true);\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n public cancel(caseflow: Umbrella.CaseFlow.CancelCaseFlowStepModel): ng.IPromise {\r\n const promise = this.caseFlowResource.cancel({ id: caseflow.caseFlowId }, caseflow).$promise;\r\n\r\n promise.then(value => {\r\n this.loadByCaseFlowId(caseflow.caseFlowId, true);\r\n // load from state list and modify status\r\n const state = this.getState();\r\n const stateCaseflowList =\r\n state && state.overviewInfo && state.overviewInfo.cases && state.overviewInfo.cases.result;\r\n const caseflowInList =\r\n stateCaseflowList && stateCaseflowList.items.filter(t => t.id === caseflow.caseFlowId)[0];\r\n\r\n if (caseflowInList) {\r\n this.caseFlowResource.getById({ id: caseflow.caseFlowId }).$promise.then(updatedCaseflow => {\r\n this.updateListWhenContainingCaseflow((updatedCaseflow));\r\n });\r\n }\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n public finishStep(caseflowId: System.Guid): ng.IPromise {\r\n const promise = this.caseFlowResource.finishStep({ id: caseflowId }).$promise;\r\n\r\n promise.then(value => {\r\n this.loadByCaseFlowId(caseflowId, true);\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n public finishTask(taskId: System.Guid, outcomeId?: System.Guid): ng.IPromise {\r\n const promise = this.caseFlowResource.finishTask({ id: taskId }, { outcomeId }).$promise;\r\n\r\n promise.then(_ => {\r\n this.emit({ type: 'TaskFinishedEvent', taskId });\r\n });\r\n return promise;\r\n }\r\n\r\n public addMessage(message: CaseFlowAddMessageModel): ng.IPromise {\r\n const state = this.getState();\r\n const caseflowId = state && state.caseInfo && state.caseInfo.id;\r\n\r\n if (!caseflowId) return this.$q.reject('No task selected yet.');\r\n\r\n const promise = this.caseFlowResource.addMessage({ id: caseflowId }, message).$promise;\r\n\r\n promise.then(data => {\r\n this.addMessageToStore(data);\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n public addPublicMessage(publicMessage: CaseFlowAddMessageModel): ng.IPromise {\r\n const state = this.getState();\r\n const caseflowId = state && state.caseInfo && state.caseInfo.id;\r\n\r\n if (!caseflowId) return this.$q.reject('No task selected yet.');\r\n\r\n const promise = this.caseFlowResource.addPublicMessage({ id: caseflowId }, publicMessage).$promise;\r\n\r\n promise.then(data => {\r\n this.addPublicMessageToStore(data);\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n public unload() {\r\n this.emit({ type: 'CaseFlowUnloadedEvent' });\r\n }\r\n\r\n public async load(pageSize = 9) {\r\n const state = this.getState();\r\n const tasksLoadedCount =\r\n state &&\r\n state.overviewInfo &&\r\n state.overviewInfo.cases &&\r\n state.overviewInfo.cases.result &&\r\n state.overviewInfo.cases.result.items\r\n ? state.overviewInfo.cases.result.items.length\r\n : 0;\r\n const filters = state && state.overviewInfo && state.overviewInfo.filters;\r\n const page = Math.floor(tasksLoadedCount / pageSize);\r\n\r\n this.emit({\r\n type: 'CasesLoadingEvent',\r\n page,\r\n pageSize\r\n });\r\n\r\n await this.search(state.caseInfo.view, {\r\n page,\r\n pageSize,\r\n query: filters && filters.query,\r\n type: filters && filters.caseType,\r\n statusses: filters && filters.statusses,\r\n completion: filters && filters.completion,\r\n ownerRoleId: filters && filters.owner && filters.owner.id,\r\n executorRoleId: filters && filters.executor && filters.executor.id\r\n }).$promise.then((cases: SearchResultsModel) => {\r\n cases.result.items = this.filterCasesAlreadyInState(cases.result.items);\r\n this.emit({\r\n type: 'CasesLoadedEvent',\r\n cases,\r\n filters\r\n });\r\n this.loadAssignmentNames(cases.result.items);\r\n });\r\n }\r\n\r\n public uploadDocument(url: string, file: File) {\r\n this.emit({ type: 'CaseFlowDocumentUploadingEvent' });\r\n this.uploadService\r\n .upload({\r\n url,\r\n data: { file },\r\n method: 'POST'\r\n })\r\n .then((result: { data: MediaModel }) => {\r\n this.emit({ type: 'CaseFlowDocumentUploadedEvent', mediaUploadId: result.data.id });\r\n this.toastMessageService.success('Bestand is succesvol toegevoegd');\r\n })\r\n .catch(() => {\r\n this.emit({ type: 'CaseFlowDocumentUploadErrorEvent' });\r\n this.toastMessageService.error('Bestand toevoegen is mislukt');\r\n });\r\n }\r\n\r\n private loadMessages(caseflowId: System.Guid) {\r\n this.emit({ type: 'CaseFlowMessagesLoadingEvent' });\r\n this.caseFlowResource.getMessages({ id: caseflowId }).$promise.then(data =>\r\n this.emit({\r\n type: 'CaseFlowMessagesLoadedEvent',\r\n messages: data\r\n })\r\n );\r\n }\r\n\r\n private loadPublicMessages(caseflowId: System.Guid) {\r\n this.emit({ type: 'CaseFlowPublicMessagesLoadingEvent' });\r\n this.caseFlowResource.getPublicMessages({ id: caseflowId }).$promise.then(data =>\r\n this.emit({\r\n type: 'CaseFlowPublicMessagesLoadedEvent',\r\n publicMessages: data\r\n })\r\n );\r\n }\r\n\r\n private async getOwner(owner: AssignmentModel): Promise {\r\n try {\r\n if (owner) {\r\n const typeString = owner.type.toString();\r\n\r\n if (\r\n owner.type === CaseFlowAssignmentType.Employee ||\r\n typeString === CaseFlowAssignmentType.Employee.toString() ||\r\n typeString === 'Employee'\r\n ) {\r\n const colleague = await this.colleagueResource.get({ id: owner.id }).$promise;\r\n\r\n owner.name = colleague.name;\r\n return owner;\r\n } else if (\r\n owner.type === CaseFlowAssignmentType.FunctionGroup ||\r\n typeString === CaseFlowAssignmentType.FunctionGroup.toString() ||\r\n typeString === 'FunctionGroup'\r\n ) {\r\n const functionGroup = await this.functionGroupResource.getById({ id: owner.id }).$promise;\r\n\r\n owner.name = functionGroup.title;\r\n return owner;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n } catch (err) {\r\n return null;\r\n }\r\n }\r\n\r\n private addMessageToStore(message: CaseFlowMessageModel): void {\r\n this.emit({ type: 'NewCaseFlowMessageEvent', message: message });\r\n }\r\n\r\n private addPublicMessageToStore(publicMessage: CaseFlowMessageModel): void {\r\n this.emit({ type: 'NewCaseFlowPublicMessageEvent', publicMessage: publicMessage });\r\n }\r\n\r\n private loadAssignmentNames(cases: Umbrella.CaseFlow.CaseFlowOverviewModel[]) {\r\n const employeeIds = this.getAssignmentIdsForType(cases, CaseFlowAssignmentType.Employee);\r\n if (employeeIds && employeeIds.length) {\r\n this.colleagueResource.getByIds({ ids: employeeIds }).$promise.then(roles => {\r\n const assignments = roles.map(r =>\r\n this.createAssignment(r.id, CaseFlowAssignmentType.Employee, r.name)\r\n );\r\n this.updateCaseFlowAssignment(assignments);\r\n });\r\n }\r\n\r\n const functionGroupIds = this.getAssignmentIdsForType(cases, CaseFlowAssignmentType.FunctionGroup);\r\n if (functionGroupIds && functionGroupIds.length) {\r\n this.functionGroupResource.getByIds({ ids: functionGroupIds }).$promise.then(functionGroups => {\r\n const assignments = functionGroups.map(r =>\r\n this.createAssignment(r.id, CaseFlowAssignmentType.FunctionGroup, r.title)\r\n );\r\n this.updateCaseFlowAssignment(assignments);\r\n });\r\n }\r\n }\r\n\r\n private getAssignmentIdsForType(\r\n cases: Umbrella.CaseFlow.CaseFlowOverviewModel[],\r\n type: CaseFlowAssignmentType\r\n ) {\r\n return cases.filter(c => c.assignment && c.assignment.type === type).map(c => c.assignment.id);\r\n }\r\n\r\n private updateCaseFlowAssignment(assignments: AssignmentModel[]): void {\r\n this.emit({\r\n type: 'CaseFlowAssignmentLoadedEvent',\r\n assignments\r\n });\r\n }\r\n\r\n private createAssignment(id: System.Guid, type: CaseFlowAssignmentType, name: string): AssignmentModel {\r\n return { id, type, name };\r\n }\r\n\r\n private filterCasesAlreadyInState(caseFlows: CaseFlowOverviewModel[]) {\r\n const state = this.getState();\r\n if (\r\n !state ||\r\n !state.overviewInfo ||\r\n !state.overviewInfo.cases ||\r\n !state.overviewInfo.cases.result ||\r\n !state.overviewInfo.cases.result.items ||\r\n state.overviewInfo.cases.result.items.length <= 0\r\n ) {\r\n return caseFlows;\r\n }\r\n\r\n const notStoredCases = caseFlows.filter(x =>\r\n state.overviewInfo.cases.result.items.every(t => t.id !== x.id)\r\n );\r\n\r\n return notStoredCases;\r\n }\r\n\r\n public filterCasesByQuery(query: string) {\r\n const state = this.getState();\r\n const filters = {\r\n ...state.overviewInfo.filters,\r\n query\r\n };\r\n\r\n if (JSON.stringify(state.overviewInfo.filters) === JSON.stringify(filters)) return;\r\n\r\n this.updateFilters(filters, true);\r\n }\r\n\r\n public filterCasesByCompletion(completion: string) {\r\n const state = this.getState();\r\n const filters = {\r\n ...state.overviewInfo.filters,\r\n completion\r\n };\r\n\r\n if (JSON.stringify(state.overviewInfo.filters) === JSON.stringify(filters)) return;\r\n\r\n this.updateFilters(filters, true);\r\n }\r\n\r\n public filterCasesByType(caseType: string) {\r\n const state = this.getState();\r\n const filters = {\r\n ...state.overviewInfo.filters,\r\n caseType\r\n };\r\n\r\n if (JSON.stringify(state.overviewInfo.filters) === JSON.stringify(filters)) return;\r\n\r\n this.updateFilters(filters, true);\r\n }\r\n\r\n public filterCasesByStatus(statusses: string[]) {\r\n const state = this.getState();\r\n const filters = {\r\n ...state.overviewInfo.filters,\r\n statusses\r\n };\r\n\r\n if (JSON.stringify(state.overviewInfo.filters) === JSON.stringify(filters)) return;\r\n\r\n this.updateFilters(filters, true);\r\n }\r\n\r\n public filterCasesByOwner(colleagueOrFunctiongroup: SelectedColleagueOrFunctiongroup) {\r\n const state = this.getState();\r\n const filters = {\r\n ...state.overviewInfo.filters,\r\n owner: colleagueOrFunctiongroup\r\n };\r\n\r\n if (JSON.stringify(state.overviewInfo.filters) === JSON.stringify(filters)) return;\r\n\r\n this.updateFilters(filters, true);\r\n }\r\n\r\n public filterCasesByExecutor(colleagueOrFunctiongroup: SelectedColleagueOrFunctiongroup) {\r\n const state = this.getState();\r\n const filters = {\r\n ...state.overviewInfo.filters,\r\n executor: colleagueOrFunctiongroup\r\n };\r\n\r\n if (JSON.stringify(state.overviewInfo.filters) === JSON.stringify(filters)) return;\r\n\r\n this.updateFilters(filters, true);\r\n }\r\n\r\n public initializeFilters(): void {\r\n this.updateFiltersWithoutReload(this.generateFiltersQuery());\r\n }\r\n\r\n private updateListWhenContainingCaseflow(caseflow: CaseFlowOverviewModel): void {\r\n const state = this.getState();\r\n const stateCaseflowList =\r\n state && state.overviewInfo && state.overviewInfo.cases && state.overviewInfo.cases.result;\r\n const caseflowInList = stateCaseflowList && stateCaseflowList.items.filter(t => t.id === caseflow.id)[0];\r\n\r\n if (!caseflowInList) return;\r\n\r\n if (!this.caseflowPassesCurrentFilters(caseflow)) {\r\n this.removeCaseflowFromList(caseflow);\r\n return;\r\n }\r\n\r\n const caseflowOverviewModel: CaseFlowOverviewModel = {\r\n ...caseflowInList,\r\n ...caseflow\r\n };\r\n\r\n this.emit({\r\n type: 'CaseFlowOverviewListItemModifiedEvent',\r\n modifiedCaseflow: caseflowOverviewModel\r\n });\r\n }\r\n\r\n /** Must be replaced with a backend endpoint later */\r\n private caseflowPassesCurrentFilters(caseflow: CaseFlowOverviewModel): boolean {\r\n const state = this.getState();\r\n const filters = state && state.overviewInfo && state.overviewInfo.filters;\r\n\r\n if (!filters) return true;\r\n\r\n const caseflowMatchesFilters = filters.statusses.find(\r\n x => 1 * x === GetEnumValueAsNumber(CaseFlowStatus, caseflow.status)\r\n );\r\n if (caseflowMatchesFilters) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private removeCaseflowFromList(caseflow: CaseFlowOverviewModel): void {\r\n this.emit({\r\n type: 'CaseFlowOverviewListItemRemovedEvent',\r\n id: caseflow.id\r\n });\r\n }\r\n\r\n private setView(view: View): void {\r\n const pageSize = view === View.Workload ? 4 : 9;\r\n\r\n this.emit({\r\n type: 'CaseFlowViewChangedEvent',\r\n view,\r\n pageSize\r\n });\r\n }\r\n\r\n private loading(id: System.Guid) {\r\n this.emit({\r\n type: 'CaseFlowLoadingEvent',\r\n id\r\n });\r\n }\r\n\r\n private loadingByTask(taskId: System.Guid) {\r\n this.emit({\r\n type: 'CaseFlowLoadingByTaskEvent',\r\n taskId\r\n });\r\n }\r\n\r\n private loadingSelfServiceReport(id: System.Guid) {\r\n this.emit({\r\n type: 'SelfServiceReportLoadingEvent',\r\n id\r\n });\r\n }\r\n\r\n private loadedSelfServiceReport(s: Umbrella.Modules.SelfService.SelfServiceReportModel) {\r\n this.emit({\r\n type: 'SelfServiceReportLoadedEvent',\r\n selfServiceReport: s\r\n });\r\n }\r\n\r\n private loaded(c: Umbrella.CaseFlow.DetailedCaseFlowModel, owner: AssignmentModel) {\r\n this.emit({\r\n type: 'CaseFlowLoadedEvent',\r\n caseflow: c,\r\n owner\r\n });\r\n }\r\n\r\n private search(\r\n view: View,\r\n params: CaseFlowSearchPagedRequestParams\r\n ): ng.resource.IResource> {\r\n switch (view) {\r\n case View.List:\r\n return this.caseFlowResource.search(params);\r\n case View.Workload:\r\n return this.caseFlowResource.searchGroupedByOwner(params);\r\n default:\r\n return this.caseFlowResource.search(params);\r\n }\r\n }\r\n\r\n private storeFilterValues(filterValues: Overview.CaseOverviewFilters): void {\r\n this.localStorageService.store('CaseOverviewFilters', JSON.stringify(filterValues));\r\n }\r\n\r\n private generateFiltersQuery(): Overview.CaseOverviewFilters {\r\n const storedFilterValues = this.localStorageService.get('CaseOverviewFilters');\r\n if (storedFilterValues && storedFilterValues.length) {\r\n return JSON.parse(storedFilterValues);\r\n }\r\n\r\n const state = this.getState();\r\n const filters = state && state.overviewInfo.filters;\r\n const emptyFilters = {\r\n statusses: ['0', '3'], // by default load only active cases\r\n query: null,\r\n caseType: null,\r\n completion: null,\r\n owner: null,\r\n executor: null\r\n };\r\n\r\n if (!filters) {\r\n return emptyFilters;\r\n }\r\n\r\n return { ...emptyFilters, ...filters };\r\n }\r\n\r\n private updateFiltersWithoutReload(filters: Overview.CaseOverviewFilters, storeFilters = true): void {\r\n const state = this.getState();\r\n const stateFilters = state && state.overviewInfo.filters;\r\n\r\n if (!stateFilters || JSON.stringify(stateFilters) !== JSON.stringify(filters)) {\r\n if (storeFilters) this.storeFilterValues(filters);\r\n this.emit({\r\n type: 'CaseFlowOverviewFiltersUpdatedEvent',\r\n filters\r\n });\r\n }\r\n }\r\n\r\n private updateFilters(filters: Overview.CaseOverviewFilters, storeFilters = true): void {\r\n this.updateFiltersWithoutReload(filters, true);\r\n this.ensureLoaded();\r\n }\r\n\r\n private updateCaseFlowListWhenStepPickedUp(id: Guid): void {\r\n this.emit({ type: 'UpdateCaseFlowStepPickedUpEvent', id });\r\n }\r\n\r\n private observeEvents(): void {\r\n const notNullOrUndefined = x => x !== null && x !== undefined;\r\n const isSelected = (caseFlowId: System.Guid) => {\r\n const url = window.location.hash;\r\n const guidRegExp = /[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}/g;\r\n return url && url.match(guidRegExp)[0] === caseFlowId;\r\n };\r\n\r\n caseFlowStepFinished$\r\n .filter(notNullOrUndefined)\r\n .map(x => x.caseFlowId)\r\n .subscribe((caseFlowId: System.Guid) => {\r\n if (isSelected(caseFlowId)) this.loadByCaseFlowId(caseFlowId, true);\r\n this.updateCaseFlowListWhenStepPickedUp(caseFlowId);\r\n });\r\n\r\n caseFlowStepPickedUp$\r\n .filter(notNullOrUndefined)\r\n .map(x => x.caseFlowId)\r\n .subscribe((caseFlowId: System.Guid) => {\r\n if (isSelected(caseFlowId)) this.loadByCaseFlowId(caseFlowId, true);\r\n this.updateCaseFlowListWhenStepPickedUp(caseFlowId);\r\n });\r\n\r\n caseFlowStepTasksCreated$\r\n .filter(notNullOrUndefined)\r\n .map(x => x.caseFlowId)\r\n .filter(isSelected)\r\n .subscribe((caseFlowId: System.Guid) => {\r\n this.loadByCaseFlowId(caseFlowId, true);\r\n });\r\n\r\n caseFlowStepTaskFinished$\r\n .filter(notNullOrUndefined)\r\n .map(x => x.caseFlowId)\r\n .filter(isSelected)\r\n .subscribe((caseFlowId: System.Guid) => {\r\n this.loadByCaseFlowId(caseFlowId, true);\r\n });\r\n\r\n caseFlowUpdated$\r\n .filter(notNullOrUndefined)\r\n .map(x => x.caseFlowId)\r\n .filter(isSelected)\r\n .subscribe((caseFlowId: System.Guid) => {\r\n this.loadByCaseFlowId(caseFlowId, true);\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import CompletionState = Umbrella.Modules.Tasks.CompletionState;\r\n import CancelationStatusModel = Umbrella.CaseFlow.CancelationStatusModel;\r\n export interface ICaseFlowResource\r\n extends Umbrella.CaseFlow.CaseFlowModel,\r\n angular.resource.IResource {}\r\n export interface IDetailedCaseFlowResource\r\n extends Umbrella.CaseFlow.DetailedCaseFlowModel,\r\n angular.resource.IResource {}\r\n\r\n export interface CaseFlowSearchPagedRequestParams {\r\n page?: number;\r\n pageSize?: number;\r\n query?: string;\r\n type?: string;\r\n completion?: string | CompletionState;\r\n statusses?: string[];\r\n deadlineBefore?: Date;\r\n ownerRoleId?: System.Guid;\r\n executorRoleId?: System.Guid;\r\n }\r\n\r\n export interface CaseFlowStepsSearchPagedRequestParams {\r\n query?: string;\r\n completion?: string | CompletionState;\r\n page?: number;\r\n pageSize?: number;\r\n status?: string;\r\n deadlineBefore?: Date;\r\n }\r\n\r\n export interface CaseFlowResourceClass\r\n extends Umbrella.CaseFlow.CaseFlowModel, angular.resource.IResource {\r\n getByTaskId(params: IdRequestParams): IDetailedCaseFlowResource;\r\n getByUmbrellaCaseId(params: IdRequestParams): ICaseFlowResource;\r\n getById(params: IdRequestParams): ICaseFlowResource;\r\n getByIdDetailed(params: IdRequestParams): IDetailedCaseFlowResource;\r\n update(model: Umbrella.CaseFlow.EditCaseFlowModel): ICaseFlowResource;\r\n finishStep(params: IdRequestParams): ng.resource.IResource;\r\n pickUpStep(model: Umbrella.CaseFlow.PickupCaseFlowStepModel): ng.resource.IResource;\r\n cancel(\r\n params: IdRequestParams,\r\n model: Umbrella.CaseFlow.CancelCaseFlowStepModel\r\n ): ng.resource.IResource;\r\n search(\r\n params: CaseFlowSearchPagedRequestParams\r\n ): ng.resource.IResource>;\r\n searchGroupedByOwner(\r\n params: CaseFlowSearchPagedRequestParams\r\n ): ng.resource.IResource>;\r\n getTaskById(params: IdRequestParams): angular.resource.IResource;\r\n getByUmbrellaTaskId(\r\n params: IdRequestParams\r\n ): angular.resource.IResource;\r\n finishTask(\r\n params: IdRequestParams,\r\n data: Umbrella.CaseFlow.FinishCaseFlowStepTaskModel\r\n ): angular.resource.IResource;\r\n addMessage(params: IdRequestParams, message: Umbrella.CaseFlow.CaseFlowAddMessageModel): ng.resource.IResource;\r\n getMessages(params: IdRequestParams): ng.resource.IResource;\r\n addPublicMessage(params: IdRequestParams, message: Umbrella.CaseFlow.CaseFlowAddMessageModel): ng.resource.IResource;\r\n getPublicMessages(params: IdRequestParams): ng.resource.IResource;\r\n getCancelationStatuses(): angular.resource.IResource;\r\n }\r\n\r\n angular.module('CaseFlow').service('CaseFlowResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/caseflow/:action/:subaction/:id',\r\n {},\r\n {\r\n getById: { method: 'GET', isArray: false },\r\n getByIdDetailed: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'detailed', id: '@id' }\r\n },\r\n getByTaskId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'bytask', id: '@id' }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n getByUmbrellaCaseId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'byumbrellacaseid', id: '@id' }\r\n },\r\n finishStep: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { action: 'finishstep', id: '@id' }\r\n },\r\n pickUpStep: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { action: 'pickupstep', id: '@id' }\r\n },\r\n cancel: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { action: 'cancel', id: '@id' }\r\n },\r\n search: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: '', id: '' }\r\n },\r\n searchGroupedByOwner: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'searchgroupedbyowner', id: '' }\r\n },\r\n searchSteps: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'steps', id: '' }\r\n },\r\n getTaskById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id', action: 'gettask' }\r\n },\r\n getByUmbrellaTaskId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id', action: 'byumbrellataskid' }\r\n },\r\n finishTask: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { action: 'finishtask', id: '@id' }\r\n },\r\n addMessage: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: 'message', id: '@id' },\r\n transformRequest: (data: Umbrella.CaseFlow.CaseFlowAddMessageModel, headersGetter) => {\r\n return JSON.stringify(data);\r\n }\r\n },\r\n getMessages: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { id: '@id', action: 'messages' }\r\n },\r\n addPublicMessage: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: 'message', subaction: 'public', id: '@id' },\r\n transformRequest: (data: Umbrella.CaseFlow.CaseFlowAddMessageModel, headersGetter) => {\r\n return JSON.stringify(data);\r\n }\r\n },\r\n getPublicMessages: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'messages', subaction: 'public', id: '@id' }\r\n },\r\n getCancelationStatuses: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'cancelationstatuses' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import CaseFlowStatus = Umbrella.CaseFlow.CaseFlowStatus;\r\n\r\n @Pipe('Dashboard', 'caseFlowStatus')\r\n class CaseFlowStatusFilter {\r\n public transform(status: CaseFlowStatus) {\r\n if (!status) return '';\r\n\r\n switch (status.toString().toLowerCase()) {\r\n case 'pickedup':\r\n case '0':\r\n return 'In behandeling';\r\n case 'finished':\r\n case '1':\r\n return 'Afgerond';\r\n case 'cancelled':\r\n case 'canceled':\r\n case '2':\r\n return 'Geannuleerd';\r\n case 'submitted':\r\n case '4':\r\n return 'Ontvangen';\r\n default:\r\n return '';\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.KCC.CaseFlowDashboard {\r\n import CaseFlowOverviewModel = Umbrella.CaseFlow.CaseFlowOverviewModel;\r\n\r\n @Pipe('CaseFlow', 'groupByOwner')\r\n class GroupByOwnerFilter {\r\n transform(\r\n collection: CaseFlowOverviewModel[],\r\n property: string\r\n ): { [key: string]: CaseFlowOverviewModel[] } {\r\n const result: { [key: string]: CaseFlowOverviewModel[] } = {};\r\n if (collection) {\r\n angular.forEach(collection, (elm: CaseFlowOverviewModel) => {\r\n const prop = elm.owner.toString();\r\n if (!result[prop]) {\r\n result[prop] = [];\r\n }\r\n result[prop].push(elm);\r\n });\r\n }\r\n return result;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.KCC.CaseFlowDashboard {\r\n import CaseFlowStep = Umbrella.CaseFlow.CaseFlowModel.CaseFlowStep;\r\n\r\n @Pipe('CaseFlow', 'isActiveStep')\r\n class IsActiveStepFilter {\r\n public transform(input: CaseFlowStep): boolean {\r\n if (!input) return false;\r\n\r\n return this.isStepActive(input);\r\n }\r\n\r\n private isStepActive(step: CaseFlowStep): boolean {\r\n return (\r\n step.status.toString() === \"1\" ||\r\n step.status.toString() === \"Started\" ||\r\n step.status.toString() === \"2\" ||\r\n step.status.toString() === \"PickedUp\"\r\n );\r\n }\r\n }\r\n}\r\n","namespace Umbrella.KCC.CaseFlowDashboard {\r\n @Pipe('Dashboard', 'isCaseActive')\r\n class IsCaseActiveFilter {\r\n public transform(\r\n status: Umbrella.CaseFlow.CaseFlowStatus | string | number\r\n ) {\r\n switch (status) {\r\n case Umbrella.CaseFlow.CaseFlowStatus.PickedUp:\r\n case 'PickedUp':\r\n case 0:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.KCC.CaseFlowDashboard {\r\n @Pipe('Dashboard', 'isFunctionGroup')\r\n class IsFunctionGroupFilter {\r\n public transform(\r\n collegueType: Modules.Colleagues.ColleagueType | string | number\r\n ) {\r\n switch (collegueType) {\r\n case Modules.Colleagues.ColleagueType.FunctionGroups:\r\n case 'FunctionGroups':\r\n case 10:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.KCC.CaseFlowDashboard {\r\n import CaseFlowStep = Umbrella.CaseFlow.CaseFlowModel.CaseFlowStep;\r\n @Pipe('CaseFlow', 'pickedUpStep')\r\n class PickedUpStepFilter {\r\n public transform(input: CaseFlowStep[]): CaseFlowStep {\r\n if (!input) return undefined;\r\n\r\n const steps = input.filter(this.isStepPickedUp);\r\n return steps.length > 0 ? steps[0] : null;\r\n }\r\n\r\n public isStepPickedUp(step: CaseFlowStep): boolean {\r\n return step.pickedUpOn !== null && step.finishedOn === null;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.KCC.CaseFlowDashboard {\r\n import CaseFlowStep = Umbrella.CaseFlow.CaseFlowModel.CaseFlowStep;\r\n\r\n @Pipe('CaseFlow', 'startedStep')\r\n class StartedStepFilter {\r\n public transform(input: CaseFlowStep[]): CaseFlowStep {\r\n if (!input) return undefined;\r\n\r\n const steps = input.filter(this.isStepStarted);\r\n return steps.length > 0 ? steps[0] : null;\r\n }\r\n\r\n private isStepStarted(step: CaseFlowStep): boolean {\r\n return (\r\n step.status.toString() === \"1\" ||\r\n step.status.toString() === \"Started\"\r\n );\r\n }\r\n }\r\n}\r\n","namespace Umbrella.KCC.CaseFlowDashboard {\r\n import CaseFlowStepStatus = Umbrella.CaseFlow.CaseFlowStepStatus;\r\n @Pipe('CaseFlow', 'stepStatusName')\r\n class StepStatusNameFilter {\r\n public transform(input: CaseFlowStepStatus | string): string {\r\n if (!input) return undefined;\r\n\r\n switch (input.toString()) {\r\n case \"PickedUp\":\r\n case \"2\":\r\n return 'Opgepakt';\r\n case \"Finished\":\r\n case \"3\":\r\n return 'Afgerond';\r\n case \"Canceled\":\r\n case \"4\":\r\n return 'Geannuleerd';\r\n default:\r\n return '';\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n export interface CaseFlowOverviewStateParams\r\n extends ng.ui.IStateParamsService {\r\n id: System.Guid;\r\n }\r\n export interface CaseFlowStepOverviewStateParams\r\n extends ng.ui.IStateParamsService {\r\n id: System.Guid;\r\n caseId: System.Guid;\r\n }\r\n\r\n angular.module('Dashboard').config([\r\n '$stateProvider',\r\n '$urlRouterProvider',\r\n ($stateProvider: angular.ui.IStateProvider, $urlRouterProvider) => {\r\n $stateProvider.state('dashboard.caseflow', {\r\n url: '/zaken',\r\n redirectTo: 'dashboard.caseflow.overview',\r\n data: {\r\n pageTitle: 'Zaken',\r\n authorize: ps => ps.viewCaseFlow\r\n },\r\n views: {\r\n overview: {\r\n templateUrl:\r\n '/CaseFlowProcessing/_Overview/CaseFlowOverview.html'\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CaseHandling {\r\n export const caseSelected$ = new Rx.Subject();\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import MediaModel = Umbrella.Media.MediaModel;\r\n import MediaLinkModel = Umbrella.Media.MediaLinkModel;\r\n\r\n @Component('Dashboard', {\r\n selector: 'case-flow-media-items',\r\n templateUrl:\r\n '/CaseFlowProcessing/CaseFlowMediaItemsComponent/CaseFlowMediaItems.html',\r\n bindings: {\r\n media: '<',\r\n theme: '@',\r\n }\r\n })\r\n class CaseFlowMediaItemsComponent {\r\n public media: MediaModel[];\r\n public theme = 'purple';\r\n\r\n public getAbsoluteApiUrl(mediaItem: MediaModel): string {\r\n if (!mediaItem) return '';\r\n\r\n const relativeUrl = mediaItem.isLink\r\n ? (mediaItem).url\r\n : Config.makeAbsoluteApiUrl(\r\n `api/v1/media/view/${mediaItem.id}`\r\n );\r\n\r\n return relativeUrl;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import DetailedCaseFlowModel = Umbrella.CaseFlow.DetailedCaseFlowModel;\r\n\r\n @Component('Dashboard', {\r\n selector: 'caseflow-timeline-item',\r\n templateUrl:\r\n '/CaseFlowProcessing/CaseflowTimelineItemComponent/CaseflowTimelineItem.html',\r\n bindings: {\r\n caseflowId: '<',\r\n personId: '<'\r\n }\r\n })\r\n @Inject('CaseFlowResource')\r\n class CaseflowTimelineItemComponent {\r\n public caseflowId: System.Guid;\r\n public personId: System.Guid;\r\n public caseflow: DetailedCaseFlowModel;\r\n\r\n constructor(private caseflowResource: CaseFlowResourceClass) {}\r\n\r\n public $onInit() {\r\n if (this.caseflowId) this.loadCaseflowDetails();\r\n }\r\n\r\n public async loadCaseflowDetails(): Promise {\r\n if (this.hasPermissionsToSeeDetails()) {\r\n this.caseflow = await this.caseflowResource.getByIdDetailed({\r\n id: this.caseflowId\r\n }).$promise;\r\n } else {\r\n const simpleModel = await this.caseflowResource.getById({\r\n id: this.caseflowId\r\n }).$promise;\r\n this.caseflow = { ...simpleModel, steps: [] };\r\n }\r\n }\r\n\r\n public hasPermissionsToSeeDetails(): boolean {\r\n return !!window.user.permissions.viewDetailedCaseFlow;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n @Component('Dashboard', {\r\n selector: 'dashboard-loading-indicator',\r\n templateUrl:\r\n '/CaseFlowProcessing/DashboardLoadingIndicatorComponent/DashboardLoadingIndicator.html'\r\n })\r\n class DashboardLoadingIndicatorComponent {}\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard.Overview {\r\n angular.module('Dashboard').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('dashboard.caseflow.overview', {\r\n url: '/overzicht?page&size&filterforstatus&filterforcasetype&caseid',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Zaken',\r\n authorize: ps => ps.viewCaseFlow\r\n },\r\n views: {\r\n filters: {\r\n template: '',\r\n controller: createComponentRouteController<\r\n CaseFlowState,\r\n CaseFlowOverviewFiltersComponentState\r\n >('CaseFlowOverviewStore', s => ({\r\n filters: s && s.overviewInfo && s.overviewInfo.filters\r\n }))\r\n },\r\n list: {\r\n template: '',\r\n controller: createComponentRouteController(\r\n 'CaseFlowOverviewStore',\r\n s => ({\r\n cases:\r\n s &&\r\n s.overviewInfo &&\r\n s.overviewInfo &&\r\n s.overviewInfo.cases &&\r\n s.overviewInfo.cases.result,\r\n loading: s && s.overviewInfo && s.overviewInfo.loading\r\n })\r\n )\r\n },\r\n details: {\r\n templateUrl: 'CaseFlowProcessing/_Overview/CaseFlowOverviewNoCaseFlowSelected.html'\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.TaskHandling.Overview {\r\n import CaseFlowModel = Umbrella.CaseFlow.CaseFlowModel;\r\n import SummarizedColleagueModel = Modules.Colleagues.SummarizedColleagueModel;\r\n\r\n @Pipe('Dashboard', 'canModifyCaseFlow')\r\n class CanModifyCaseFlowFilter {\r\n public transform(c: CaseFlowModel, employee: SummarizedColleagueModel) {\r\n if (!c || !employee) return false;\r\n if (c.status === Umbrella.CaseFlow.CaseFlowStatus.Finished || c.status.toString() === Umbrella.CaseFlow.CaseFlowStatus.Finished.toString()) return false;\r\n if (c.status === Umbrella.CaseFlow.CaseFlowStatus.Canceled || c.status.toString() === Umbrella.CaseFlow.CaseFlowStatus.Canceled.toString()) return false;\r\n if (c.status === Umbrella.CaseFlow.CaseFlowStatus.Submitted || c.status.toString() === Umbrella.CaseFlow.CaseFlowStatus.Submitted.toString()) return false;\r\n if (window.user.permissions.editCaseFlow) return true;\r\n if (c.ownerModel && c.ownerModel.id && c.ownerModel.id === employee.id) return true;\r\n\r\n return false;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import CaseFlowModel = Umbrella.CaseFlow.CaseFlowModel;\r\n import CaseModel = Umbrella.Modules.Customers.v2.CaseModel;\r\n import AssignmentModel = Umbrella.CaseFlow.AssignmentModel;\r\n\r\n export interface CaseFlowComponentState {\r\n case: CaseFlowModel;\r\n caseHistory: CaseModel;\r\n messageCount: number;\r\n publicMessageCount: number;\r\n person: PersonModel;\r\n media: Umbrella.Modules.Customers.caseMedia[];\r\n }\r\n\r\n @Component('Dashboard', {\r\n selector: 'caseflow',\r\n templateUrl: '/CaseFlowProcessing/_Overview/_Details/CaseFlowComponent/CaseFlow.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('$mdDialog')\r\n class CaseFlowOverviewDetailsComponent {\r\n public state: CaseFlowComponentState;\r\n public user = window.user;\r\n\r\n constructor(private $mdDialog) {}\r\n\r\n public cancel(): void {\r\n if (!this.state.case) return;\r\n\r\n this.$mdDialog.show({\r\n template: '',\r\n locals: {\r\n caseflowId: this.state.case.id\r\n },\r\n controller: [\r\n '$scope',\r\n 'caseflowId',\r\n ($scope, caseflowId) => {\r\n $scope.caseflowId = caseflowId;\r\n }\r\n ],\r\n clickOutsideToClose: false\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard.Overview {\r\n angular.module('Dashboard').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('dashboard.caseflow.overview.details', {\r\n url: '/{id:(?:[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12})}',\r\n abstract: true,\r\n data: {\r\n pageTitle: 'Zaakdetails',\r\n authorize: ps => ps.viewCaseFlow\r\n },\r\n views: {\r\n 'details@dashboard.caseflow': {\r\n template: '',\r\n controller: Umbrella.createComponentRouteController(\r\n 'CaseFlowOverviewStore',\r\n s => {\r\n return {\r\n case: s && s.caseInfo.caseflow,\r\n caseHistory: s && s.caseInfo.caseHistory,\r\n messageCount:\r\n s && s.caseInfo && s.caseInfo.messages ? s.caseInfo.messages.length : 0,\r\n publicMessageCount:\r\n s && s.caseInfo && s.caseInfo.publicMessages\r\n ? s.caseInfo.publicMessages.length\r\n : 0,\r\n person: s && s.caseInfo.person,\r\n media: s && s.caseInfo.media\r\n };\r\n }\r\n )\r\n }\r\n },\r\n resolve: {\r\n zaak: [\r\n '$stateParams',\r\n 'CaseFlowOverviewService',\r\n (\r\n $stateParams: CaseFlowOverviewStateParams,\r\n caseFlowOverviewService: CaseFlowOverviewService\r\n ) => {\r\n return caseFlowOverviewService.loadByCaseFlowId($stateParams.id);\r\n }\r\n ]\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import CancelationStatusModel = Umbrella.CaseFlow.CancelationStatusModel;\r\n\r\n @Component('CaseFlow', {\r\n selector: 'cancel-caseflow-popup',\r\n templateUrl:\r\n '/CaseFlowProcessing/_Overview/_Details/CancelCaseFlowPopupComponent/CancelCaseFlowPopup.html',\r\n bindings: {\r\n caseflowId: '<'\r\n }\r\n })\r\n @Inject(\r\n '$mdDialog',\r\n 'CaseFlowResource',\r\n 'CaseFlowOverviewService',\r\n 'ToastMessageService'\r\n )\r\n class CancelCaseFlowPopupComponent {\r\n public caseflowId: System.Guid;\r\n public statuses: CancelationStatusModel[] = [];\r\n public waiting: boolean;\r\n\r\n constructor(\r\n private $mdDialog,\r\n private caseFlowResource: CaseFlowResourceClass,\r\n private caseFlowOverviewService: CaseFlowOverviewService,\r\n private toastMessageService: ToastMessageService\r\n ) {}\r\n\r\n public $onInit() {\r\n this.caseFlowResource\r\n .getCancelationStatuses()\r\n .$promise.then(data => {\r\n this.statuses = data;\r\n });\r\n }\r\n\r\n public confirm(statusId: System.Guid, reason: string): void {\r\n this.waiting = true;\r\n\r\n this.caseFlowOverviewService\r\n .cancel({\r\n caseFlowId: this.caseflowId,\r\n cancelationStatusId: statusId,\r\n reason\r\n })\r\n .then(() => this.$mdDialog.hide())\r\n .catch(e =>\r\n this.toastMessageService.error(\r\n 'Afbreken zaak mislukt. Probeer het nogmaals.'\r\n )\r\n )\r\n .finally(() => (this.waiting = false));\r\n }\r\n\r\n public cancel(): void {\r\n this.$mdDialog.cancel();\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import CaseFlowMessageModel = Umbrella.CaseFlow.CaseFlowMessageModel;\r\n import MediaModel = Umbrella.Media.MediaModel;\r\n import MediaResourceProvider = Umbrella.Modules.MediaResourceProvider;\r\n import AdminMediaModel = Umbrella.Media.AdminMediaModel;\r\n\r\n export interface CaseFlowMessagesComponentState {\r\n messages: CaseFlowMessageModel[];\r\n }\r\n\r\n @Component('Dashboard', {\r\n selector: 'caseflow-message',\r\n templateUrl: '/CaseFlowProcessing/_Overview/_Details/CaseFlowMessageComponent/CaseFlowMessage.html',\r\n bindings: {\r\n message: '<',\r\n }\r\n })\r\n @Inject('MediaResourceProvider')\r\n export class CaseFlowMessageComponent {\r\n public message: CaseFlowMessageModel;\r\n\r\n private user: SessionColleagueModel = window.user;\r\n private media: MediaModel[];\r\n\r\n constructor(\r\n private mediaResources: MediaResourceProvider\r\n ) {}\r\n\r\n public $onInit() {\r\n if(this.message.mediaId)\r\n this.getMedia();\r\n }\r\n\r\n public getImageSrc(imageId: System.Guid): string {\r\n return Config.makeAbsoluteApiUrl(`api/v1/media/crop?id=${imageId}&width=40&height=40`);\r\n }\r\n\r\n public viewImage(imageId: System.Guid): string {\r\n return Config.makeAbsoluteApiUrl('/api/v1/media/view/' + imageId);\r\n }\r\n\r\n private getMedia() {\r\n const ids = [this.message.mediaId];\r\n this.mediaResources.getByIdsV2({ids}).$promise\r\n .then(mediaObjects => {\r\n this.media = mediaObjects as MediaModel[];\r\n })\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard.Overview {\r\n angular.module('Dashboard').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('dashboard.caseflow.overview.details.contactmoments', {\r\n url: '/contactmomenten',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Contactmomenten',\r\n authorize: ps => [ps.viewCaseFlow, ps.viewDetailedCaseFlow]\r\n },\r\n views: {\r\n tabcontent: {\r\n template:\r\n '',\r\n controller: Umbrella.createComponentRouteController<\r\n CaseFlowState,\r\n CaseFlowContactMomentsComponentState\r\n >('CaseFlowOverviewStore', s => ({\r\n caseHistory: s && s.caseInfo.caseHistory,\r\n person: s && s.caseInfo.person\r\n }))\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import CaseModel = Umbrella.Modules.Customers.v2.CaseModel;\r\n\r\n export interface CaseFlowContactMomentsComponentState {\r\n caseHistory: CaseModel;\r\n person: PersonModel;\r\n }\r\n\r\n @Component('Dashboard', {\r\n selector: 'caseflow-contact-moments',\r\n templateUrl:\r\n '/CaseFlowProcessing/_Overview/_Details/_ContactMoments/CaseFlowContactMomentsComponent/CaseFlowContactMomentsComponent.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject()\r\n class CaseFlowContactMomentsComponent {\r\n public state: CaseFlowContactMomentsComponentState;\r\n\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard.Overview {\r\n angular.module('Dashboard').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('dashboard.caseflow.overview.details.documents', {\r\n url: '/documenten',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Zaakinformatie',\r\n authorize: ps => [ps.viewCaseFlow, ps.viewDetailedCaseFlow]\r\n },\r\n views: {\r\n tabcontent: {\r\n template:\r\n '',\r\n controller: Umbrella.createComponentRouteController<\r\n CaseFlowState,\r\n CaseFlowDocumentsComponentState\r\n >('CaseFlowOverviewStore', s => ({\r\n case: s && s.caseInfo && s.caseInfo.caseflow,\r\n caseHistory: s && s.caseInfo.caseHistory,\r\n mediaIds: s && s.caseInfo.media && s.caseInfo.media.map(m => m.mediaId),\r\n isUploadingDocument: s && s.caseInfo && s.caseInfo.isUploadingDocument\r\n }))\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import IUploadService = angular.angularFileUpload.IUploadService;\r\n import MediaModel = Umbrella.Media.MediaModel;\r\n import CaseFlowModel = Umbrella.CaseFlow.CaseFlowModel;\r\n import CaseModel = Umbrella.Modules.Customers.v2.CaseModel;\r\n import ICaseHistoryResourceClass = Umbrella.Modules.Cases.ICaseHistoryResourceClass;\r\n\r\n export interface CaseFlowDocumentsComponentState {\r\n case: CaseFlowModel;\r\n caseHistory: CaseModel;\r\n mediaIds: System.Guid[];\r\n isUploadingDocument: boolean;\r\n }\r\n\r\n @Component('Dashboard', {\r\n selector: 'caseflow-documents',\r\n templateUrl:\r\n '/CaseFlowProcessing/_Overview/_Details/_Documents/CaseFlowDocumentsComponent/CaseFlowDocuments.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('$stateParams', 'Upload', 'ToastMessageService', 'CaseFlowOverviewService')\r\n class CaseFlowDocumentsComponent {\r\n public state: CaseFlowDocumentsComponentState;\r\n\r\n public id: System.Guid;\r\n public actionUrl: string;\r\n public mediaUploadId: Guid;\r\n public isAuthorizedToViewCaseFlowDetails: boolean;\r\n\r\n constructor(\r\n private $stateParams: CaseFlowOverviewStateParams,\r\n private uploadService: IUploadService,\r\n private toastMessageService: ToastMessageService,\r\n private caseflowOverviewService: CaseFlowOverviewService\r\n ) {\r\n this.id = $stateParams.id;\r\n }\r\n\r\n public $onInit() {\r\n this.isAuthorizedToViewCaseFlowDetails = !!(\r\n window &&\r\n window.user &&\r\n window.user.permissions &&\r\n window.user.permissions.viewDetailedCaseFlow\r\n );\r\n\r\n this.actionUrl = this.state.case\r\n ? Config.makeAbsoluteApiUrl('/api/v1/case/media/' + this.state.case.umbrellaCaseId)\r\n : '';\r\n }\r\n\r\n public upload = (file: File) => {\r\n if (!file || !this.state.caseHistory) return;\r\n\r\n this.caseflowOverviewService.uploadDocument(this.actionUrl, file);\r\n };\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard.Overview {\r\n angular.module('Dashboard').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state(\r\n 'dashboard.caseflow.overview.details.information',\r\n {\r\n url: '/informatie',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Zaak informatie',\r\n authorize: ps => [\r\n ps.viewCaseFlow,\r\n ps.viewDetailedCaseFlow\r\n ]\r\n },\r\n views: {\r\n tabcontent: {\r\n template:\r\n '',\r\n controller: Umbrella.createComponentRouteController<\r\n CaseFlowState,\r\n CaseFlowInformationComponentState\r\n >('CaseFlowOverviewStore', s => ({\r\n selfServiceReport:\r\n s &&\r\n s.caseInfo &&\r\n s.caseInfo.selfServiceReport\r\n }))\r\n }\r\n }\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import SelfServiceReportModel = Umbrella.Modules.SelfService.SelfServiceReportModel;\r\n\r\n export interface CaseFlowInformationComponentState {\r\n selfServiceReport: SelfServiceReportModel;\r\n }\r\n\r\n @Component('Dashboard', {\r\n selector: 'caseflow-information',\r\n templateUrl:\r\n '/CaseFlowProcessing/_Overview/_Details/_Information/CaseFlowInformationComponent/CaseFlowInformation.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n class CaseFlowInformationComponent {\r\n public state: CaseFlowInformationComponentState;\r\n\r\n public filterType(type): any {\r\n return function(\r\n value: Umbrella.Modules.Forms.FormSubmitValueModel\r\n ) {\r\n return value.value.type != type;\r\n };\r\n }\r\n }\r\n}\r\n","namespace Umbrella {\r\n import CorrespondenceType = Umbrella.Modules.CorrespondenceType;\r\n\r\n @Pipe('Dashboard', 'correspondenceType')\r\n class CorrespondenceTypeFilter {\r\n public transform(correspondenceType: string | CorrespondenceType) {\r\n switch (correspondenceType) {\r\n case '1':\r\n case 'Mail':\r\n case 'mail':\r\n case Umbrella.Modules.CorrespondenceType.Mail:\r\n return 'Per post';\r\n case '2':\r\n case 'Digital':\r\n case 'digital':\r\n case Umbrella.Modules.CorrespondenceType.Digital:\r\n return 'Digitaal';\r\n default:\r\n return 'Onbekend';\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella {\r\n import Gender = Umbrella.Modules.Gender;\r\n\r\n @Pipe('Dashboard', 'gender')\r\n class GenderFilter {\r\n public transform(gender: string | number | Gender) {\r\n switch (gender) {\r\n case 'Male':\r\n case 0:\r\n case Gender.Male:\r\n return 'Man';\r\n case 'Female':\r\n case 1:\r\n case Gender.Female:\r\n return 'Vrouw';\r\n default:\r\n return 'Onbekend';\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella {\r\n import HousingAllocationRegistrationType = Umbrella.Modules.Housing.HousingAllocationRegistrationType;\r\n\r\n @Pipe('Dashboard', 'housingAllocationRegistrationType')\r\n class HousingAllocationRegistrationTypeFilter {\r\n public transform(\r\n housingAllocationRegistrationType:\r\n | string\r\n | HousingAllocationRegistrationType\r\n ) {\r\n switch (housingAllocationRegistrationType) {\r\n case 'Garage':\r\n case HousingAllocationRegistrationType.Garage:\r\n return 'Garage';\r\n case 'House':\r\n case HousingAllocationRegistrationType.House:\r\n return 'Woning';\r\n default:\r\n return 'Onbekend';\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard.Overview {\r\n angular.module('Dashboard').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('dashboard.caseflow.overview.details.messages', {\r\n url: '/messages',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Zaak interne berichten',\r\n authorize: ps => [ps.viewCaseFlow, ps.viewDetailedCaseFlow]\r\n },\r\n views: {\r\n tabcontent: {\r\n template: '',\r\n controller: Umbrella.createComponentRouteController<\r\n CaseFlowState,\r\n CaseFlowMessagesComponentState\r\n >('CaseFlowOverviewStore', s => ({\r\n messages: s && s.caseInfo && s.caseInfo.messages\r\n }))\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import IUploadService = angular.angularFileUpload.IUploadService;\r\n import CaseFlowMessageModel = Umbrella.CaseFlow.CaseFlowMessageModel;\r\n import MediaFileModel = Umbrella.Media.MediaFileModel;\r\n\r\n export interface CaseFlowMessagesComponentState {\r\n messages: CaseFlowMessageModel[];\r\n }\r\n\r\n @Component('Dashboard', {\r\n selector: 'caseflow-messages',\r\n templateUrl: '/CaseFlowProcessing/_Overview/_Details/_Messages/CaseFlowMessagesComponent/CaseFlowMessages.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('CaseFlowOverviewService', 'ToastMessageService', 'Upload')\r\n class CaseFlowMessagesComponent {\r\n public state: CaseFlowMessagesComponentState;\r\n public caseFlowId: System.Guid;\r\n public waiting: boolean;\r\n public user = window.user;\r\n public remark: string = '';\r\n\r\n public isUploading: boolean;\r\n public actionUrl: string;\r\n private uploadedMedia: MediaFileModel[] = [];\r\n\r\n constructor(\r\n private caseFlowOverviewService: CaseFlowOverviewService,\r\n private toastMessageService: ToastMessageService,\r\n private uploadService: IUploadService\r\n ) {}\r\n\r\n public $onInit() {\r\n this.actionUrl = Config.makeAbsoluteApiUrl('/api/v1/media?mediaCategory=CaseMedia');\r\n }\r\n\r\n private addMessage(message: string): void {\r\n this.waiting = true;\r\n this.caseFlowOverviewService\r\n .addMessage({\r\n message: message,\r\n mediaId: this.uploadedMedia.length > 0 ? this.uploadedMedia[0].id : null\r\n })\r\n .then(() => {\r\n this.remark = '';\r\n this.uploadedMedia = [];\r\n })\r\n .catch(() =>\r\n this.toastMessageService.error(\r\n 'Er is iets mis gegaan tijdens het opslaan van het bericht. Probeer het nogmaals. '\r\n )\r\n )\r\n .then(() => (this.waiting = false));\r\n }\r\n\r\n private upload(file: File) {\r\n if (!file)\r\n return;\r\n\r\n this.isUploading = true;\r\n this.uploadService\r\n .upload({\r\n url: this.actionUrl,\r\n data: { file },\r\n method: 'POST'\r\n })\r\n .then((result: { data: MediaFileModel }) => {\r\n this.uploadedMedia.push(result.data);\r\n this.isUploading = false;\r\n this.toastMessageService.success('Bestand is succesvol toegevoegd');\r\n })\r\n .catch(() => {\r\n this.toastMessageService.error('Bestand toevoegen is mislukt');\r\n this.isUploading = false;\r\n });\r\n }\r\n\r\n private removeUpload(media: MediaFileModel) {\r\n this.uploadedMedia.splice(this.uploadedMedia.indexOf(media), 1);\r\n }\r\n\r\n private getImageSrc(imageId: System.Guid): string {\r\n return Config.makeAbsoluteApiUrl(`api/v1/media/crop?id=${imageId}&width=40&height=40`);\r\n }\r\n\r\n private viewImage(imageId: System.Guid): string {\r\n return Config.makeAbsoluteApiUrl('/api/v1/media/view/' + imageId);\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard.Overview {\r\n angular.module('Dashboard').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('dashboard.caseflow.overview.details.publicmessages', {\r\n url: '/publicmessages',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Zaak publieke berichten',\r\n authorize: ps => [ps.viewCaseFlow, ps.viewDetailedCaseFlow]\r\n },\r\n views: {\r\n tabcontent: {\r\n template: '',\r\n controller: Umbrella.createComponentRouteController<\r\n CaseFlowState,\r\n CaseFlowPublicMessagesComponentState\r\n >('CaseFlowOverviewStore', s => ({\r\n publicMessages: s && s.caseInfo && s.caseInfo.publicMessages\r\n }))\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import IUploadService = angular.angularFileUpload.IUploadService;\r\n import CaseFlowMessageModel = Umbrella.CaseFlow.CaseFlowMessageModel;\r\n import MediaFileModel = Umbrella.Media.MediaFileModel;\r\n\r\n export interface CaseFlowPublicMessagesComponentState {\r\n publicMessages: CaseFlowMessageModel[];\r\n }\r\n\r\n @Component('Dashboard', {\r\n selector: 'caseflow-public-messages',\r\n templateUrl: '/CaseFlowProcessing/_Overview/_Details/_PublicMessages/CaseFlowPublicMessagesComponent/CaseFlowPublicMessages.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('CaseFlowOverviewService', 'ToastMessageService', 'Upload')\r\n class CaseFlowPublicMessagesComponent {\r\n public state: CaseFlowPublicMessagesComponentState;\r\n public caseFlowId: System.Guid;\r\n public waiting: boolean;\r\n public user = window.user;\r\n public remark: string = '';\r\n\r\n public isUploading: boolean = false;\r\n public actionUrl: string;\r\n private uploadedMedia: MediaFileModel[] = [];\r\n\r\n constructor(\r\n private caseFlowOverviewService: CaseFlowOverviewService,\r\n private toastMessageService: ToastMessageService,\r\n private uploadService: IUploadService\r\n ) {}\r\n\r\n public $onInit() {\r\n this.actionUrl = Config.makeAbsoluteApiUrl('/api/v1/media?mediaCategory=CaseMedia');\r\n }\r\n\r\n private addPublicMessage(publicMessage: string): void {\r\n this.waiting = true;\r\n this.caseFlowOverviewService\r\n .addPublicMessage({\r\n message: publicMessage,\r\n mediaId: this.uploadedMedia.length > 0 ? this.uploadedMedia[0].id : null\r\n })\r\n .then(() => {\r\n this.remark = '';\r\n this.uploadedMedia = [];\r\n })\r\n .catch(() =>\r\n this.toastMessageService.error(\r\n 'Er is iets mis gegaan tijdens het opslaan van het bericht. Probeer het nogmaals. '\r\n )\r\n )\r\n .then(() => (this.waiting = false));\r\n }\r\n\r\n private upload(file: File) {\r\n if (!file)\r\n return;\r\n\r\n this.isUploading = true;\r\n this.uploadService\r\n .upload({\r\n url: this.actionUrl,\r\n data: { file },\r\n method: 'POST'\r\n })\r\n .then((result: { data: MediaFileModel }) => {\r\n this.uploadedMedia.push(result.data);\r\n this.isUploading = false;\r\n this.toastMessageService.success('Bestand is succesvol toegevoegd');\r\n })\r\n .catch(() => {\r\n this.toastMessageService.error('Bestand toevoegen is mislukt');\r\n this.isUploading = false;\r\n });\r\n }\r\n\r\n private removeUpload(media: MediaFileModel) {\r\n this.uploadedMedia.splice(this.uploadedMedia.indexOf(media), 1);\r\n }\r\n\r\n private getImageSrc(imageId: System.Guid): string {\r\n return Config.makeAbsoluteApiUrl(`api/v1/media/crop?id=${imageId}&width=40&height=40`);\r\n }\r\n\r\n private viewImage(imageId: System.Guid): string {\r\n return Config.makeAbsoluteApiUrl('/api/v1/media/view/' + imageId);\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard.Overview {\r\n angular.module('Dashboard').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('dashboard.caseflow.overview.details.steps', {\r\n url: '/stappen',\r\n data: {\r\n pageTitle: 'Zaakstappen',\r\n authorize: ps => [ps.viewCaseFlow, ps.viewDetailedCaseFlow]\r\n },\r\n views: {\r\n tabcontent: {\r\n template:\r\n '',\r\n controller: Umbrella.createComponentRouteController<\r\n CaseFlowState,\r\n CaseFlowDetailsComponentState\r\n >('CaseFlowOverviewStore', s => ({\r\n case: s && s.caseInfo.caseflow,\r\n caseHistory: s && s.caseInfo.caseHistory,\r\n person: s && s.caseInfo.person,\r\n mediaIds: s &&  s.caseInfo.media && s.caseInfo.media.map(m => m.mediaId)\r\n }))\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import MediaModel = Umbrella.Media.MediaModel;\r\n import DetailedCaseFlowModel = Umbrella.CaseFlow.DetailedCaseFlowModel;\r\n import CaseModel = Umbrella.Modules.Customers.v2.CaseModel;\r\n import ICaseHistoryResourceClass = Umbrella.Modules.Cases.ICaseHistoryResourceClass;\r\n\r\n export interface CaseFlowDetailsComponentState {\r\n case: DetailedCaseFlowModel;\r\n caseHistory: CaseModel;\r\n person: PersonModel;\r\n mediaIds: System.Guid[];\r\n }\r\n\r\n @Component('Dashboard', {\r\n selector: 'caseflow-details',\r\n templateUrl: '/CaseFlowProcessing/_Overview/_Details/_Steps/CaseFlowDetailsComponent/CaseFlowDetails.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('$stateParams', 'CaseHistoryResource')\r\n class CaseFlowDetailsComponent {\r\n public state: CaseFlowDetailsComponentState;\r\n\r\n public id: System.Guid;\r\n public filename: string;\r\n public media: Umbrella.Media.MediaModel;\r\n public actionUrl: string;\r\n\r\n constructor(\r\n private $stateParams: CaseFlowOverviewStateParams,\r\n private caseHistoryResource: ICaseHistoryResourceClass\r\n ) {\r\n this.id = $stateParams.id;\r\n }\r\n\r\n public $onInit() {\r\n this.media = {\r\n id: null,\r\n type: null,\r\n title: '',\r\n created: null,\r\n isDocument: null,\r\n isImage: null,\r\n isLink: null,\r\n lastModified: null,\r\n mediaCategory: null,\r\n };\r\n }\r\n\r\n public $onChanges() {\r\n this.actionUrl = this.state.case\r\n ? Config.makeAbsoluteApiUrl('/api/v1/case/media/' + this.state.case.umbrellaCaseId)\r\n : '';\r\n }\r\n\r\n public deleteMediaItem(mediaItem: MediaModel): void {\r\n this.caseHistoryResource\r\n .deleteMediaItem({\r\n id: this.state.caseHistory.id,\r\n mediaId: mediaItem.id\r\n });\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import ChannelType = Modules.ChannelType;\r\n\r\n export interface ChannelInfo {\r\n readonly title: string;\r\n readonly name: string;\r\n readonly type: ChannelType;\r\n }\r\n\r\n export function getChannelTypes(): ChannelInfo[] {\r\n return [\r\n {\r\n title: 'Baliebezoek',\r\n name: 'desk',\r\n type: ChannelType.Desk\r\n },\r\n {\r\n title: 'Telefoon',\r\n name: 'phone',\r\n type: ChannelType.Phone\r\n },\r\n {\r\n title: 'Huisbezoek',\r\n name: 'visit',\r\n type: ChannelType.Visit\r\n },\r\n {\r\n title: 'E-mail',\r\n name: 'email',\r\n type: ChannelType.Email\r\n },\r\n {\r\n title: 'Post',\r\n name: 'post',\r\n type: ChannelType.Post\r\n },\r\n {\r\n title: 'Social media',\r\n name: 'social',\r\n type: ChannelType.Social\r\n },\r\n {\r\n title: 'Chat',\r\n name: 'chat',\r\n type: ChannelType.Chat\r\n },\r\n {\r\n title: 'Enquête',\r\n name: 'survey',\r\n type: ChannelType.Survey\r\n },\r\n {\r\n title: 'Backoffice',\r\n name: 'backoffice',\r\n type: ChannelType.Backoffice\r\n }\r\n ];\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import CaseFlowStep = Umbrella.CaseFlow.CaseFlowModel.CaseFlowStep;\r\n import getChannelTypes = Umbrella.CustomerService.getChannelTypes;\r\n import ChannelInfo = Umbrella.CustomerService.ChannelInfo;\r\n import ImpersonationService = Umbrella.CustomerService.CustomerCard.ImpersonationService;\r\n\r\n export interface CaseFlowStepSelfServiceScenarioPopupComponent extends IPopupScope {\r\n caseId: System.Guid;\r\n caseFlowId: System.Guid;\r\n step: Umbrella.CaseFlow.CaseFlowModel.CaseFlowStep;\r\n person: PersonModel;\r\n personId: System.Guid;\r\n scenarioId: System.Guid;\r\n waiting: boolean;\r\n\r\n selectChannel(channelType: ChannelInfo): void;\r\n cancel(): void;\r\n }\r\n\r\n @Component('CaseFlow', {\r\n selector: 'caseflow-step-self-service-scenario-popup',\r\n templateUrl:\r\n '/CaseFlowProcessing/_Overview/_Details/_Steps/CaseFlowStepSelfServiceScenariosComponent/CaseFlowStepSelfServiceScenarioPopup.html',\r\n bindings: {\r\n step: '<',\r\n caseId: '<',\r\n caseFlowId: '<',\r\n person: '<',\r\n personId: '<',\r\n scenarioId:'<',\r\n }\r\n })\r\n @Inject('$mdDialog', 'ImpersonationService', '$state')\r\n export class CaseFlowStepSelfServiceScenarioPopupComponent {\r\n public caseId: System.Guid;\r\n public caseFlowId: System.Guid;\r\n public step: CaseFlowStep;\r\n public waiting: boolean;\r\n public person: PersonModel;\r\n public personId: System.Guid;\r\n public scenarioId: System.Guid;\r\n public channels: ChannelInfo[];\r\n public selectedChannel: ChannelInfo;\r\n\r\n constructor(\r\n private $mdDialog,\r\n private impersonationService: ImpersonationService,\r\n public $state: ng.ui.IStateService\r\n ) {}\r\n\r\n public $onInit() {\r\n this.loadChannels();\r\n }\r\n\r\n public selectChannel(channelInfo: ChannelInfo) {\r\n if (!channelInfo || !(this.person || this.personId) || !this.scenarioId || !this.caseId || !this.caseFlowId)\r\n return;\r\n\r\n this.impersonationService.start(\r\n this.scenarioId,\r\n this.person && this.person.id || this.personId,\r\n channelInfo.type,\r\n this.caseId,\r\n this.caseFlowId,\r\n this.$state.current.name.indexOf('dashboard.caseflow') >= 0\r\n );\r\n this.$mdDialog.hide();\r\n }\r\n\r\n private loadChannels(): void {\r\n this.channels = getChannelTypes();\r\n }\r\n\r\n public cancel(): void {\r\n this.$mdDialog.cancel();\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard.CaseFlowOverview {\r\n import CaseFlowModel = Umbrella.CaseFlow.CaseFlowModel;\r\n import SelfServiceScenarioModel = Modules.SelfService.SelfServiceScenarioModel;\r\n\r\n export interface CaseStepSelfServiceScenario {\r\n selfServiceScenarioId?: System.Guid;\r\n isFinished: boolean;\r\n title: string;\r\n icon: string;\r\n startAutomatically: boolean;\r\n }\r\n\r\n @Component('Dashboard', {\r\n selector: 'case-flow-step-self-service-scenarios',\r\n templateUrl:\r\n '/CaseFlowProcessing/_Overview/_Details/_Steps/CaseFlowStepSelfServiceScenariosComponent/CaseFlowStepSelfServiceScenarios.html',\r\n bindings: {\r\n caseId: '<',\r\n caseFlowId: '<',\r\n person: '<',\r\n personId: '<',\r\n completeBy: '=',\r\n step: '<'\r\n }\r\n })\r\n @Inject('$mdDialog', 'SelfServiceScenarioResource', 'ToastMessageService')\r\n class CaseFlowStepSelfServiceScenariosComponent {\r\n public selfServiceScenarios: CaseStepSelfServiceScenario[];\r\n public completeBy: string;\r\n private caseId: System.Guid;\r\n private caseFlowId: System.Guid;\r\n private person: PersonModel;\r\n private personId: System.Guid;\r\n private step: CaseFlowModel.CaseFlowStep;\r\n\r\n constructor(\r\n private $mdDialog,\r\n private selfServiceScenarioResource: Umbrella.CustomerService.SelfServiceScenarioResource,\r\n private toastSvc: ToastMessageService\r\n ) {}\r\n\r\n public $onChanges = (bindings: { step: IBindingChange }) => {\r\n if (bindings.step && bindings.step.currentValue) {\r\n this.loadStepSelfServiceScenarios();\r\n }\r\n };\r\n\r\n public startSelfserviceScenario(scenario: CaseStepSelfServiceScenario) {\r\n this.$mdDialog.show({\r\n template:\r\n '',\r\n locals: {\r\n step: this.step,\r\n caseId: this.caseId,\r\n caseFlowId: this.caseFlowId,\r\n person: this.person,\r\n personId: this.personId,\r\n scenarioId: scenario.selfServiceScenarioId\r\n },\r\n controller: [\r\n '$scope',\r\n 'step',\r\n 'caseId',\r\n 'caseFlowId',\r\n 'person',\r\n 'personId',\r\n 'scenarioId',\r\n function($scope, step, caseId, caseFlowId, person, personId, scenarioId) {\r\n $scope.step = step;\r\n $scope.caseId = caseId;\r\n $scope.caseFlowId = caseFlowId;\r\n $scope.person = person;\r\n $scope.personId = personId;\r\n $scope.scenarioId = scenarioId;\r\n }\r\n ],\r\n clickOutsideToClose: false\r\n });\r\n }\r\n\r\n public loadStepSelfServiceScenarios(): void {\r\n this.selfServiceScenarios = [];\r\n\r\n const stepSelfServiceScenarios = this.step && this.step.selfServiceScenarios;\r\n if (!stepSelfServiceScenarios || !stepSelfServiceScenarios.length) return;\r\n\r\n const selfServiceScenarioIds = stepSelfServiceScenarios\r\n .map(s => s.selfServiceScenarioId)\r\n .filter(id => id !== null);\r\n\r\n this.selfServiceScenarioResource\r\n .getByIds({ ids: selfServiceScenarioIds })\r\n .$promise.then((scenarios: SelfServiceScenarioModel.Detailed[]) => {\r\n const list: CaseStepSelfServiceScenario[] = [];\r\n for (const stepSelfServiceScenario of this.step.selfServiceScenarios) {\r\n const detailedSelfServiceScenario = this.filterSelfServiceScenario(\r\n scenarios,\r\n stepSelfServiceScenario.selfServiceScenarioId\r\n );\r\n list.push({\r\n selfServiceScenarioId: stepSelfServiceScenario.selfServiceScenarioId,\r\n isFinished: stepSelfServiceScenario.isFinished,\r\n title: stepSelfServiceScenario.title,\r\n icon: (detailedSelfServiceScenario && detailedSelfServiceScenario.icon) || '',\r\n startAutomatically: stepSelfServiceScenario.startAutomatically\r\n });\r\n }\r\n\r\n this.selfServiceScenarios = list;\r\n })\r\n .catch(e =>\r\n this.toastSvc.error(\r\n `Selfservice scenario's voor stap \\'${this.step.title}\\' kunnen niet geladen worden`\r\n )\r\n );\r\n }\r\n\r\n public isStepPickedUp(): boolean {\r\n return this.step && this.step.pickedUpOn !== null && this.step.finishedOn === null;\r\n }\r\n\r\n private filterSelfServiceScenario(\r\n selfServiceScenarios: SelfServiceScenarioModel.Detailed[],\r\n selfServiceScenarioId: System.Guid\r\n ): SelfServiceScenarioModel.Detailed {\r\n const selection = selfServiceScenarios.filter(\r\n selfSerivceScenario => selfSerivceScenario.id === selfServiceScenarioId\r\n );\r\n return selection.length > 0 ? selection[0] : null;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard.CaseFlowOverview {\r\n import TaskModel = Umbrella.Modules.Tasks.TaskModel;\r\n import TaskStatus = Umbrella.Modules.Tasks.TaakStatus;\r\n import CaseFlowModel = Umbrella.CaseFlow.CaseFlowModel;\r\n import SummarizedColleagueModel = Umbrella.Modules.Colleagues.SummarizedColleagueModel;\r\n import CaseFlowOverviewService = Umbrella.KCC.CaseFlowDashboard.CaseFlowOverviewService;\r\n import CaseFlowStepTaskOutcome = Umbrella.CaseFlow.CaseFlowStepTask.CaseFlowStepTaskOutcome;\r\n import IColleagueResourceClass = Umbrella.Modules.Colleagues.IColleagueResourceClass;\r\n import ColleagueModel = Umbrella.Modules.Colleagues.ColleagueModel;\r\n\r\n export interface CaseStepTask {\r\n id?: System.Guid;\r\n isOptional: boolean;\r\n subject: string;\r\n completeBy?: SummarizedColleagueModel.WithFunctionGroup;\r\n status?: TaskStatus | string;\r\n pickedUp?: Date;\r\n finished?: Date;\r\n umbrellaTaskId?: System.Guid;\r\n outcome?: CaseFlowStepTaskOutcome;\r\n outcomes?: CaseFlowStepTaskOutcome[];\r\n completedById?: System.Guid;\r\n }\r\n\r\n @Component('Dashboard', {\r\n selector: 'case-flow-step-tasks',\r\n templateUrl: '/CaseFlowProcessing/_Overview/_Details/_Steps/CaseFlowStepTasksComponent/CaseFlowStepTasks.html',\r\n bindings: {\r\n caseFlowId: '=',\r\n step: '<',\r\n renderCheckbox: '<'\r\n }\r\n })\r\n @Inject('$mdDialog', 'TaskResource', 'CaseFlowOverviewService', 'ToastMessageService', 'ColleagueResource')\r\n class CaseFlowStepTasksComponent {\r\n public tasks: CaseStepTask[];\r\n public caseFlowId: System.Guid;\r\n private step: CaseFlowModel.CaseFlowStep;\r\n private colleages: ColleagueModel[] = [];\r\n\r\n constructor(\r\n private $mdDialog,\r\n private taskResource: Umbrella.Modules.Tasks.ITaskResourceClass,\r\n private caseFlowService: CaseFlowOverviewService,\r\n private toastSvc: ToastMessageService,\r\n private colleagueResource: IColleagueResourceClass\r\n ) {}\r\n\r\n public $onChanges = (bindings: { step: IBindingChange }) => {\r\n if (bindings.step && bindings.step.currentValue) this.loadStepTasks();\r\n };\r\n\r\n public async loadStepTasks(): Promise {\r\n this.tasks = [];\r\n\r\n const stepTasks = this.step && this.step.tasks;\r\n if (!stepTasks || !stepTasks.length) return;\r\n\r\n const taskIds = stepTasks.map(t => t.umbrellaTaskId).filter(id => id !== null);\r\n const detailedTasks = taskIds.length ? await this.taskResource.getByIds({ ids: taskIds }).$promise : [];\r\n\r\n this.loadColleagues(detailedTasks);\r\n\r\n const list: CaseStepTask[] = [];\r\n for (const stepTask of this.step.tasks) {\r\n const detailedTask = this.filterTask(detailedTasks, stepTask.umbrellaTaskId);\r\n if (detailedTask) {\r\n list.push({\r\n id: stepTask.id,\r\n completeBy: detailedTask.completeBy,\r\n finished: detailedTask.finished,\r\n isOptional: stepTask.isOptional,\r\n pickedUp: detailedTask.pickedUp,\r\n status: detailedTask.status,\r\n subject: detailedTask.subject,\r\n umbrellaTaskId: stepTask.umbrellaTaskId,\r\n outcome: stepTask.outcome,\r\n outcomes: stepTask.outcomes,\r\n completedById: detailedTask.completedById\r\n });\r\n } else {\r\n list.push({\r\n id: stepTask.id,\r\n isOptional: stepTask.isOptional,\r\n subject: stepTask.title\r\n });\r\n }\r\n }\r\n\r\n this.tasks = list;\r\n }\r\n\r\n private loadColleagues(data: Umbrella.Modules.Tasks.TaskModel[]) {\r\n if (!data) return;\r\n\r\n const ids = data.map(x => x.completedById).filter(x => x !== null);\r\n\r\n if (ids.length > 0) {\r\n this.colleagueResource\r\n .getByIds({\r\n ids\r\n })\r\n .$promise.then(peoples => {\r\n peoples.forEach(p => (this.colleages[p.id.toString()] = p));\r\n });\r\n }\r\n }\r\n\r\n public finishTask(task: CaseStepTask): void {\r\n this.$mdDialog\r\n .show({\r\n template:\r\n '',\r\n locals: {\r\n outcomes: task.outcomes\r\n },\r\n controller: [\r\n '$scope',\r\n 'outcomes',\r\n ($scope, outcomes) => {\r\n $scope.outcomes = outcomes;\r\n }\r\n ],\r\n clickOutsideToClose: false\r\n })\r\n .then((result: System.Guid) => {\r\n this.completeTask(task, result);\r\n });\r\n }\r\n\r\n private completeTask(task: CaseStepTask, outcomeId?: System.Guid) {\r\n this.caseFlowService\r\n .finishTask(task.id, outcomeId)\r\n .then(() => {\r\n task.status = Umbrella.Modules.Tasks.TaakStatus.Afgerond;\r\n })\r\n .catch(_ => this.toastSvc.error('Fout opgetreden tijdens afronden van de taak'));\r\n }\r\n\r\n private filterTask(tasks: TaskModel[], umbrellaTaskId: System.Guid): TaskModel {\r\n const selection = tasks.filter(task => task.id === umbrellaTaskId);\r\n return selection.length > 0 ? selection[0] : null;\r\n }\r\n\r\n isNewTask(task: CaseStepTask): boolean {\r\n return (\r\n task.status === 'Nieuw' || task.status === Umbrella.Modules.Tasks.TaakStatus.Nieuw || task.status === 0\r\n );\r\n }\r\n\r\n isPickedUpTask(task: CaseStepTask): boolean {\r\n return (\r\n task.status === 'Opgepakt' ||\r\n task.status === Umbrella.Modules.Tasks.TaakStatus.Opgepakt ||\r\n task.status === 1\r\n );\r\n }\r\n\r\n isFinishedTask(task: CaseStepTask): boolean {\r\n return (\r\n task.status === 'Afgerond' ||\r\n task.status === Umbrella.Modules.Tasks.TaakStatus.Afgerond ||\r\n task.status === 2\r\n );\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import CaseFlowStep = Umbrella.CaseFlow.CaseFlowModel.CaseFlowStep;\r\n import CaseFlowStepStatus = Umbrella.CaseFlow.CaseFlowStepStatus;\r\n import IColleagueResourceClass = Umbrella.Modules.Colleagues.IColleagueResourceClass;\r\n import ColleagueModel = Umbrella.Modules.Colleagues.ColleagueModel;\r\n import FunctionGroupModel = Umbrella.Modules.Knowledgebase.FunctionGroupModel;\r\n import IFunctionGroupResourceClass = Umbrella.Modules.Colleagues.IFunctionGroupResourceClass;\r\n import CaseFlowStepTask = Umbrella.CaseFlow.CaseFlowStep.CaseFlowStepTask;\r\n import CaseFlowAssignmentType = Umbrella.CaseFlow.CaseFlowAssignmentType;\r\n\r\n @Component('Dashboard', {\r\n selector: 'case-flow-steps',\r\n templateUrl: '/CaseFlowProcessing/_Overview/_Details/_Steps/CaseFlowStepsComponent/CaseFlowSteps.html',\r\n bindings: {\r\n steps: '<',\r\n activeStep: '<',\r\n person: '<',\r\n personId: '=',\r\n caseId: '=',\r\n caseFlowId: '=',\r\n renderButtons: '<'\r\n }\r\n })\r\n @Inject('$rootScope', 'ColleagueResource', 'FunctionGroupResource', 'ToastMessageService', '$mdDialog')\r\n class CaseFlowStepsComponent {\r\n public caseId: System.Guid;\r\n public caseFlowId: System.Guid;\r\n public person: PersonModel;\r\n public personId: System.Guid;\r\n private steps: CaseFlowStep[];\r\n private selectedStep: System.Guid;\r\n private activeStep: System.Guid;\r\n private colleagues: ColleagueModel[] = [];\r\n private functionGroups: FunctionGroupModel[] = [];\r\n\r\n constructor(\r\n private $rootScope: IUmbrellaRootScope,\r\n private colleagueResource: IColleagueResourceClass,\r\n private functionGroupResource: IFunctionGroupResourceClass,\r\n private toastSvc: ToastMessageService,\r\n private $mdDialog\r\n ) { }\r\n\r\n public $onInit() {\r\n this.selectedStep = this.activeStep;\r\n\r\n this.loadColleagues();\r\n this.loadFunctionGroups();\r\n }\r\n\r\n public toggleStep(step: CaseFlowStep, event) {\r\n let el = event.currentTarget;\r\n while (el.parentNode) {\r\n el = el.parentNode;\r\n if (el.tagName && el.tagName.toLowerCase() === 'activity-timeline-item') {\r\n this.$rootScope.$broadcast('toggleCaseFlowStep', {\r\n item: el\r\n });\r\n break;\r\n }\r\n }\r\n this.selectedStep = step.id === this.selectedStep ? null : step.id;\r\n }\r\n\r\n private loadColleagues() {\r\n if (!this.steps) return;\r\n\r\n const ids = this.steps\r\n .filter(\r\n x => x.pickedUpByModel !== null &&\r\n (\r\n x.pickedUpByModel.type === CaseFlowAssignmentType.Employee ||\r\n x.pickedUpByModel.type.toString() === CaseFlowAssignmentType.Employee.toString() ||\r\n x.pickedUpByModel.type.toString() === 'Employee'\r\n )\r\n )\r\n .map(x => x.pickedUpByModel.id);\r\n\r\n if (ids.length > 0) {\r\n this.colleagueResource\r\n .getByIds({\r\n ids\r\n })\r\n .$promise.then(peoples => {\r\n peoples.forEach(p => (this.colleagues[p.id.toString()] = p));\r\n });\r\n }\r\n }\r\n\r\n private loadFunctionGroups() {\r\n if (!this.steps) return;\r\n\r\n const ids = this.steps.filter(x => x.functionGroupId).map(x => x.functionGroupId);\r\n this.functionGroupResource.getByIds({ ids }).$promise.then(functiongroups => {\r\n functiongroups.forEach(functiongroup => {\r\n this.functionGroups[functiongroup.id.toString()] = functiongroup;\r\n });\r\n });\r\n }\r\n\r\n public canPickUpStep(step: CaseFlowStep): boolean {\r\n return (\r\n step &&\r\n step.status &&\r\n (step.status.toString() === \"Started\" || step.status.toString() === \"1\") &&\r\n step.pickedUpOn === null &&\r\n step.finishedOn === null\r\n );\r\n }\r\n\r\n public pickUpStep(step: CaseFlowStep): void {\r\n if (!window.user.permissions.pickupCaseFlowStep) {\r\n this.toastSvc.error('Zaakstap kan niet opgepakt worden. Onvoldoende rechten.');\r\n return;\r\n }\r\n\r\n const stepId: System.Guid | string = (step && step.id) || '';\r\n const caseFlowId: System.Guid | string = this.caseFlowId || '';\r\n\r\n this.$mdDialog.show({\r\n template: ``,\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n });\r\n }\r\n\r\n public finishStep(step: CaseFlowStep): void {\r\n if (!window.user.permissions.finishCaseFlowStep) {\r\n this.toastSvc.error('Onvoldoende rechten om de zaakstap af te ronden');\r\n return;\r\n }\r\n\r\n this.$mdDialog.show({\r\n template:\r\n '',\r\n locals: {\r\n step: step,\r\n caseFlowId: this.caseFlowId\r\n },\r\n controller: [\r\n '$scope',\r\n 'step',\r\n 'caseFlowId',\r\n ($scope, step, caseFlowId) => {\r\n $scope.step = step;\r\n $scope.caseFlowId = caseFlowId;\r\n }\r\n ],\r\n clickOutsideToClose: false\r\n });\r\n }\r\n\r\n public isAutorizedToFinishStep(): boolean {\r\n return window.user.permissions.finishCaseFlowStep;\r\n }\r\n\r\n public isAutorizedToPickUpStep(): boolean {\r\n return window.user.permissions.pickupCaseFlowStep;\r\n }\r\n\r\n public allRequiredTasksAreFinished(step: CaseFlowStep): boolean {\r\n return !(\r\n this.isStepPickedUp(step) &&\r\n step.tasks &&\r\n step.tasks.filter(s => !this.isFinishedTask(s) && s.isOptional === false).length > 0\r\n );\r\n }\r\n\r\n public isStepPickedUp(step: CaseFlowStep): boolean {\r\n return step && step.pickedUpOn !== null && step.finishedOn === null;\r\n }\r\n\r\n public $onChanges(bindings: {\r\n activeStep: IBindingChange;\r\n steps: IBindingChange;\r\n }) {\r\n if (\r\n bindings.activeStep &&\r\n bindings.activeStep.currentValue &&\r\n bindings.activeStep.currentValue !== bindings.activeStep.previousValue\r\n ) {\r\n this.selectedStep = bindings.activeStep.currentValue;\r\n }\r\n\r\n if (\r\n bindings.steps &&\r\n bindings.steps.currentValue &&\r\n bindings.steps.currentValue !== bindings.steps.previousValue\r\n )\r\n this.loadColleagues();\r\n }\r\n\r\n public isFinishedStep(status: CaseFlowStepStatus | string | number): boolean {\r\n return status && (\r\n status.toString() === \"Finished\" ||\r\n status.toString() === \"3\" ||\r\n status.toString() === \"Canceled\" ||\r\n status.toString() === \"4\"\r\n );\r\n }\r\n\r\n isFinishedTask(task: CaseFlowStepTask): boolean {\r\n return task.isFinished;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import TaskModel = Umbrella.Modules.Tasks.TaskModel;\r\n import CaseFlowStep = Umbrella.CaseFlow.CaseFlowModel.CaseFlowStep;\r\n import CaseFlowStepSelfServiceScenario = Umbrella.CaseFlow.CaseFlowStep.CaseFlowStepSelfServiceScenario;\r\n\r\n export interface FinishCaseFlowStepPopupScope extends IPopupScope {\r\n caseFlowId: System.Guid;\r\n step: Umbrella.CaseFlow.CaseFlowModel.CaseFlowStep;\r\n waiting: boolean;\r\n\r\n finish(): void;\r\n cancel(): void;\r\n }\r\n\r\n @Component('CaseFlow', {\r\n selector: 'finish-caseflow-step-popup',\r\n templateUrl:\r\n '/CaseFlowProcessing/_Overview/_Details/_Steps/FinishCaseFlowStepPopupComponent/FinishCaseFlowStepPopup.html',\r\n bindings: {\r\n step: '<',\r\n caseFlowId: '<'\r\n }\r\n })\r\n @Inject('$mdDialog', 'CaseFlowOverviewService', 'TaskResource', 'ToastMessageService')\r\n export class FinishCaseFlowStepPopupComponent {\r\n private caseFlowId: System.Guid;\r\n public step: CaseFlowStep;\r\n public tasks: TaskModel[] = [];\r\n public selfServiceScenarios: CaseFlowStepSelfServiceScenario[];\r\n public waiting: boolean;\r\n\r\n constructor(\r\n private $mdDialog,\r\n private caseFlowOverviewService: CaseFlowOverviewService,\r\n private taskResource: Umbrella.Modules.Tasks.ITaskResourceClass,\r\n private toastMessageService: ToastMessageService\r\n ) {}\r\n\r\n public $onInit() {\r\n if (!this.step) return;\r\n\r\n const tasks = this.step.tasks.filter(t => t.umbrellaTaskId !== null);\r\n\r\n const ids = tasks.map(x => x.umbrellaTaskId);\r\n this.taskResource\r\n .getByIds({ ids })\r\n .$promise.then((data: Umbrella.Modules.Tasks.TaskModel[]) => {\r\n this.tasks = this.getUnfinishedTasks(data);\r\n })\r\n .catch(_ => {\r\n this.tasks = [];\r\n });\r\n\r\n this.selfServiceScenarios = this.step.selfServiceScenarios.filter(x => !x.isFinished);\r\n }\r\n\r\n private getUnfinishedTasks(tasks: TaskModel[]): TaskModel[] {\r\n return tasks.filter(task => !this.isTaskFinished(task));\r\n }\r\n\r\n private isTaskFinished(task: TaskModel): boolean {\r\n return !!task.finished;\r\n }\r\n\r\n public finish(): void {\r\n this.waiting = true;\r\n\r\n this.caseFlowOverviewService\r\n .finishStep(this.caseFlowId)\r\n .then(() => this.$mdDialog.hide())\r\n .catch(e => this.toastMessageService.error('Afronden stap mislukt. Probeer het nogmaals.'))\r\n .finally(() => (this.waiting = false));\r\n }\r\n\r\n public cancel(): void {\r\n this.$mdDialog.cancel();\r\n }\r\n }\r\n}\r\n","namespace Umbrella.KCC.CaseFlowDashboard {\r\n @Component('Dashboard', {\r\n selector: 'finish-caseflow-step-task-popup',\r\n templateUrl:\r\n '/CaseFlowProcessing/_Overview/_Details/_Steps/FinishCaseFlowStepTaskPopupComponent/FinishCaseFlowStepTaskPopup.html',\r\n bindings: {\r\n $close: '&',\r\n $dismiss: '&',\r\n outcomes: '<'\r\n }\r\n })\r\n @Inject('$mdDialog')\r\n class FinishCaseFlowStepTaskPopupComponent {\r\n public outcomes: Umbrella.CaseFlow.CaseFlowStepTaskModel.CaseFlowStepTaskOutcome[];\r\n public outcomeId?: System.Guid;\r\n\r\n constructor(private $mdDialog) {}\r\n\r\n public cancel(): void {\r\n this.$mdDialog.cancel();\r\n }\r\n\r\n public confirm(): void {\r\n this.$mdDialog.hide(this.outcomeId);\r\n }\r\n\r\n public onOutcomeSelected(value: System.Guid) {\r\n this.outcomeId = value;\r\n }\r\n\r\n public needsOutcome(): boolean {\r\n return this.outcomes && this.outcomes.length > 0;\r\n }\r\n\r\n public canClose(): boolean {\r\n return !this.needsOutcome() || !!this.outcomeId;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import TaskAssignmentModel = Umbrella.CaseFlow.PickupCaseFlowStepModel.TaskAssignmentModel;\r\n import CaseFlowStepSelfServiceScenario = Umbrella.CaseFlow.CaseFlowStep.CaseFlowStepSelfServiceScenario;\r\n\r\n export interface TaskAssignmentWithInformationModel\r\n extends Umbrella.CaseFlow.PickupCaseFlowStepModel.TaskAssignmentModel {\r\n title: string;\r\n isOptional: boolean;\r\n }\r\n\r\n @Component('CaseFlow', {\r\n selector: 'pickup-caseflowstep-popup',\r\n templateUrl:\r\n '/CaseFlowProcessing/_Overview/_Details/_Steps/PickUpCaseFlowStepPopupComponent/PickUpCaseFlowStepPopup.html',\r\n bindings: {\r\n stepId: '@',\r\n caseFlowId: '@'\r\n }\r\n })\r\n @Inject(\r\n '$mdDialog',\r\n '$filter',\r\n 'CaseFlowOverviewService',\r\n 'CaseFlowOverviewStore',\r\n 'ToastMessageService'\r\n )\r\n export class PickUpCaseFlowStepPopupComponent {\r\n private caseFlowId: System.Guid;\r\n private stepId: System.Guid;\r\n\r\n public tasks: TaskAssignmentWithInformationModel[];\r\n public selfServiceScenarios: CaseFlowStepSelfServiceScenario[];\r\n public user: Umbrella.Modules.Colleagues.SessionColleagueModel;\r\n public waiting: boolean;\r\n\r\n constructor(\r\n private $mdDialog,\r\n private $filter: ng.IFilterService,\r\n private caseFlowOverviewService: CaseFlowOverviewService,\r\n private caseFlowOverviewStore: CaseFlowOverviewStore,\r\n private toastService: ToastMessageService\r\n ) {}\r\n\r\n public $onInit() {\r\n this.user = window.user;\r\n\r\n const selectedStep = x =>\r\n x &&\r\n x.caseInfo &&\r\n x.caseInfo.caseflow&&\r\n x.caseInfo.caseflow.steps.filter(x => x.id === this.stepId)[0];\r\n const selectedStepLoaded = x => !!selectedStep(x);\r\n this.caseFlowOverviewStore.state$\r\n .filter(selectedStepLoaded)\r\n .map(selectedStep)\r\n .take(1)\r\n .subscribe(step => {\r\n this.tasks = step.tasks.map(t => {\r\n return {\r\n id: t.id,\r\n employeeId: this.user.id,\r\n functionGroupId: null,\r\n title: t.title,\r\n isOptional: t.isOptional\r\n };\r\n });\r\n this.selfServiceScenarios = step.selfServiceScenarios;\r\n });\r\n }\r\n\r\n public cancel(): void {\r\n this.$mdDialog.cancel();\r\n }\r\n\r\n public pickUp(): void {\r\n this.waiting = true;\r\n\r\n const step: Umbrella.CaseFlow.PickupCaseFlowStepModel = {\r\n caseFlowId: this.caseFlowId,\r\n taskAssignments: this.tasks.map(t => {\r\n return {\r\n id: t.id,\r\n employeeId: t.employeeId,\r\n functionGroupId: t.functionGroupId\r\n };\r\n })\r\n };\r\n\r\n this.caseFlowOverviewService\r\n .pickUpStep(step)\r\n .then(() => {\r\n this.$mdDialog.hide();\r\n })\r\n .catch(e =>\r\n this.toastService.error(\r\n 'Oppakken stap mislukt. Probeer het nogmaals.'\r\n )\r\n )\r\n .finally(() => (this.waiting = false));\r\n }\r\n\r\n public assign(\r\n task: TaskAssignmentModel,\r\n item: { type: string; id: System.Guid }\r\n ): void {\r\n if (!task) return;\r\n\r\n if (!item || !item.id) {\r\n this.clearAssignedTo(task);\r\n return;\r\n }\r\n\r\n const isFunctionGroup = this.$filter('isFunctionGroup');\r\n if (isFunctionGroup(item.type))\r\n this.assignToFunctionGroup(task, item.id);\r\n else this.assignToEmployee(task, item.id);\r\n }\r\n\r\n private clearAssignedTo(task: TaskAssignmentModel): void {\r\n task.employeeId = null;\r\n task.functionGroupId = null;\r\n }\r\n\r\n private assignToEmployee(\r\n task: TaskAssignmentModel,\r\n employeeId: System.Guid\r\n ) {\r\n task.employeeId = employeeId;\r\n task.functionGroupId = null;\r\n }\r\n\r\n private assignToFunctionGroup(\r\n task: TaskAssignmentModel,\r\n functionGroupId: System.Guid\r\n ) {\r\n task.functionGroupId = functionGroupId;\r\n task.employeeId = null;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import SummarizedColleagueModel = Umbrella.Modules.Colleagues.SummarizedColleagueModel;\r\n import IColleagueResourceClass = Umbrella.Modules.Colleagues.IColleagueResourceClass;\r\n import IFunctionGroupResourceClass = Modules.Colleagues.IFunctionGroupResourceClass;\r\n import ColleagueModel = Modules.Colleagues.ColleagueModel;\r\n import SelectedColleagueOrFunctiongroup = Modules.SelectedColleagueOrFunctiongroup;\r\n\r\n @Component('CaseFlow', {\r\n selector: 'select-colleague-or-functiongroup',\r\n templateUrl:\r\n '/CaseFlowProcessing/_Overview/_Details/_Steps/SelectColleagueOrFunctionGroupComponent/SelectColleagueOrFunctionGroup.html',\r\n bindings: {\r\n preSelectCurrentUser: '<',\r\n required: '<',\r\n onChange: '&'\r\n }\r\n })\r\n @Inject('ColleagueResource', 'FunctionGroupResource')\r\n export class SelectColleagueOrFunctionGroupComponent {\r\n private preSelectCurrentUser: boolean;\r\n private onChange: (params: { value?: System.Guid }) => void;\r\n public required: boolean;\r\n\r\n public assignedToList: SummarizedColleagueModel[] = [];\r\n public selectedValue: SelectedColleagueOrFunctiongroup;\r\n\r\n constructor(\r\n private colleagueResource: IColleagueResourceClass,\r\n private functiongroupResource: IFunctionGroupResourceClass\r\n ) {}\r\n\r\n public $onInit() {\r\n this.loadAssignedToList();\r\n }\r\n\r\n public select(item: SelectedColleagueOrFunctiongroup): void {\r\n this.onChange({ value: item });\r\n }\r\n\r\n public async searchAssignedTo(query = ''): Promise {\r\n const pagedList = await this.colleagueResource.getColleaguesAndFunctiongroups(\r\n { page: 0, pageSize: 20, id: query, userId: null }\r\n ).$promise;\r\n this.assignedToList = pagedList.items;\r\n }\r\n\r\n private async loadAssignedToList(): Promise {\r\n await this.searchAssignedTo('');\r\n\r\n if (this.preSelectCurrentUser) this.preSelectAssignedTo();\r\n }\r\n\r\n private preSelectAssignedTo(): void {\r\n if (!window.user) return;\r\n\r\n const listItem = this.createListItem(window.user);\r\n const isLoaded = completeById =>\r\n this.assignedToList.filter(x => x.id === completeById).length;\r\n if (!isLoaded(listItem.id))\r\n this.assignedToList = [listItem, ...this.assignedToList];\r\n\r\n this.selectedValue = listItem;\r\n this.onChange({ value: listItem });\r\n }\r\n\r\n private createListItem(colleague: SessionColleagueModel): any {\r\n return {\r\n type: 'Colleagues',\r\n id: colleague.id,\r\n name: colleague.name\r\n };\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n angular.module('Dashboard').config([\r\n '$stateProvider',\r\n $stateProvider => {\r\n $stateProvider.state('dashboard.caseflow.overview.edit', {\r\n url:\r\n '/edit/{id:(?:[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12})}',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Zaak bewerken'\r\n },\r\n views: {\r\n 'details@dashboard.caseflow': {\r\n template: '',\r\n controller: Umbrella.createComponentRouteController(\r\n 'CaseFlowOverviewStore',\r\n s => ({\r\n case: s && s.caseInfo.caseflow\r\n })\r\n )\r\n }\r\n },\r\n resolve: {\r\n zaak: [\r\n '$stateParams',\r\n 'CaseFlowOverviewService',\r\n (\r\n $stateParams: CaseFlowOverviewStateParams,\r\n caseFlowOverviewService: CaseFlowOverviewService\r\n ) => {\r\n return caseFlowOverviewService.loadByCaseFlowId($stateParams.id);\r\n }\r\n ]\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import CaseFlowModel = Umbrella.CaseFlow.CaseFlowModel;\r\n import PersonResource = Umbrella.PersonResource;\r\n\r\n export interface EditCaseFlowComponentState {\r\n case: CaseFlowModel;\r\n }\r\n\r\n @Component('Dashboard', {\r\n selector: 'edit-caseflow',\r\n templateUrl: '/CaseFlowProcessing/_Overview/_Edit/EditCaseFlowComponent/EditCaseFlow.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('$state', 'CaseFlowOverviewService', 'ToastMessageService', 'PersonResource')\r\n class EditCaseFlowComponent {\r\n public updating: boolean;\r\n public state: EditCaseFlowComponentState;\r\n public assignedToList: Umbrella.CaseFlow.AssignmentModel[] = [];\r\n\r\n constructor(\r\n private $state: ng.ui.IStateService,\r\n private caseFlowOverviewService: CaseFlowOverviewService,\r\n private toastMessageService: ToastMessageService,\r\n private personResource: PersonResource\r\n ) {}\r\n\r\n public $onInit() {\r\n this.loadAssignedToList();\r\n }\r\n\r\n public async searchAssignedTo(query = ''): Promise {\r\n const pagedList = await this.personResource.search({ page: 0, pageSize: 20, id: query, roles: 'employee' })\r\n .$promise;\r\n\r\n this.assignedToList = pagedList.items.map(t => {\r\n return {\r\n id: t.roles['employee'],\r\n name: t.name,\r\n type: Umbrella.CaseFlow.CaseFlowAssignmentType.Employee\r\n };\r\n });\r\n }\r\n\r\n public async update(c: CaseFlowModel): Promise {\r\n this.updating = true;\r\n await this.caseFlowOverviewService\r\n .update({\r\n id: c.id,\r\n ownerModel: c.ownerModel\r\n })\r\n .then(() => {\r\n this.toastMessageService.success('Zaak bijgewerkt');\r\n this.$state.go('dashboard.caseflow.overview.details.steps', { id: c.id });\r\n })\r\n .catch(response => this.toastMessageService.error('Zaak kon niet bijgewerkt worden'));\r\n\r\n this.updating = false;\r\n }\r\n\r\n private async loadAssignedToList(): Promise {\r\n await this.searchAssignedTo((this.state.case.ownerModel && this.state.case.ownerModel.name) || '');\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard.Overview {\r\n import debounce = Umbrella.Helpers.debounce;\r\n import IColleagueResourceClass = Umbrella.Modules.Colleagues.IColleagueResourceClass;\r\n import SummarizedColleagueModel = Modules.Colleagues.SummarizedColleagueModel;\r\n import SelectedColleagueOrFunctiongroup = Modules.SelectedColleagueOrFunctiongroup;\r\n import IPromise = angular.IPromise;\r\n\r\n export interface CaseFlowOverviewFiltersComponentState {\r\n filters: CaseOverviewFilters;\r\n }\r\n\r\n @Component('Dashboard', {\r\n selector: 'caseflow-overview-filters',\r\n templateUrl:\r\n '/CaseFlowProcessing/_Overview/_Filters/CaseFlowOverviewFiltersComponent/CaseFlowOverviewFilters.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('CaseFlowOverviewService', 'ColleagueResource')\r\n class CaseFlowOverviewFiltersComponent {\r\n public state: CaseFlowOverviewFiltersComponentState;\r\n\r\n public searchQuery: string;\r\n public selectedStatus: string;\r\n public selectedCompletion: string;\r\n public selectedType: string;\r\n public owner: SelectedColleagueOrFunctiongroup;\r\n public executor: SelectedColleagueOrFunctiongroup;\r\n\r\n constructor(\r\n private caseFlowOverviewService: CaseFlowOverviewService,\r\n private colleagueResource: IColleagueResourceClass\r\n ) {}\r\n\r\n public $onInit(): void {\r\n this.searchQuery =\r\n this.state && this.state.filters && this.state.filters.query;\r\n this.owner =\r\n this.state && this.state.filters && this.state.filters.owner\r\n ? { ...this.state.filters.owner }\r\n : null;\r\n this.executor =\r\n this.state && this.state.filters && this.state.filters.executor\r\n ? { ...this.state.filters.executor }\r\n : null;\r\n this.selectedStatus =\r\n this.state &&\r\n this.state.filters &&\r\n this.state.filters.statusses &&\r\n this.state.filters.statusses.length === 1 &&\r\n this.state.filters.statusses[0];\r\n this.selectedCompletion =\r\n this.state &&\r\n this.state.filters &&\r\n this.state.filters.completion\r\n this.selectedType =\r\n this.state && this.state.filters && this.state.filters.caseType;\r\n }\r\n\r\n public filterByQuery = debounce(\r\n (query: string) => {\r\n this.caseFlowOverviewService.filterCasesByQuery(query);\r\n },\r\n 500,\r\n false\r\n );\r\n\r\n public filterByCompletion(newSelection: string) {\r\n this.caseFlowOverviewService.filterCasesByCompletion(newSelection);\r\n }\r\n\r\n public filterByType(newSelection: string): void {\r\n this.caseFlowOverviewService.filterCasesByType(newSelection);\r\n }\r\n\r\n public filterByStatus(newSelection: string): void {\r\n this.caseFlowOverviewService.filterCasesByStatus(\r\n newSelection.split(',')\r\n );\r\n }\r\n\r\n public searchOwner(query = ''): IPromise {\r\n return this.colleagueResource\r\n .getColleaguesAndFunctiongroups({\r\n page: 0,\r\n pageSize: 10,\r\n id: query,\r\n userId: null\r\n })\r\n .$promise.then(data => {\r\n return data.items;\r\n });\r\n }\r\n\r\n public filterByOwner(\r\n newSelection: SelectedColleagueOrFunctiongroup\r\n ): void {\r\n this.caseFlowOverviewService.filterCasesByOwner(newSelection);\r\n }\r\n\r\n public searchExecutor(\r\n query = ''\r\n ): IPromise {\r\n return this.colleagueResource\r\n .getColleaguesAndFunctiongroups({\r\n page: 0,\r\n pageSize: 10,\r\n id: query,\r\n userId: null\r\n })\r\n .$promise.then(data => {\r\n return data.items;\r\n });\r\n }\r\n\r\n public filterByExecutor(\r\n newSelection: SelectedColleagueOrFunctiongroup\r\n ): void {\r\n this.caseFlowOverviewService.filterCasesByExecutor(newSelection);\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard.Overview {\r\n import caseSelected$ = Umbrella.CaseHandling.caseSelected$;\r\n export interface CaseFlowListComponentState {\r\n cases: PagedItemsModel;\r\n loading: boolean;\r\n }\r\n\r\n @Component('Dashboard', {\r\n selector: 'caseflow-list',\r\n templateUrl: '/CaseFlowProcessing/_Overview/_List/CaseFlowListComponent/CaseFlowList.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('$state', '$location', '$stateParams', 'CaseFlowOverviewService')\r\n class CaseFlowListComponent {\r\n public state: CaseFlowListComponentState;\r\n public page = this.$stateParams.page || 0;\r\n public pageSize = this.$stateParams.pageSize || 9;\r\n public navPage = this.page + 1;\r\n public selectedId: System.Guid;\r\n public width = window.innerWidth;\r\n\r\n constructor(\r\n private $state: ng.ui.IStateService,\r\n private $location: ng.ILocationService,\r\n private $stateParams: CaseFlowOverviewStateParams,\r\n private caseFlowOverviewService: CaseFlowOverviewService\r\n ) {\r\n this.selectedId = this.$stateParams.id;\r\n }\r\n\r\n public pageChanged(newPage): void {\r\n this.page = newPage;\r\n const query = this.$location.search();\r\n this.$location.search({ ...query, page: this.page });\r\n }\r\n\r\n public async requestMoreCases(pageSize: number) {\r\n await this.caseFlowOverviewService.load(pageSize);\r\n }\r\n\r\n public openItem(id: System.Guid): void {\r\n this.selectedId = id;\r\n this.$state.go('.details', { id });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import CaseFlowOverviewModel = Umbrella.CaseFlow.CaseFlowOverviewModel;\r\n\r\n @Pipe('Dashboard', 'caseFlowStepDeadline')\r\n class CaseFlowStepDeadlineFilter {\r\n public transform(caseflow: CaseFlowOverviewModel): Date {\r\n if (!caseflow) return null;\r\n\r\n const totalSteps = (caseflow.steps && caseflow.steps.length) || 0;\r\n if (totalSteps === 0) return caseflow.deadline;\r\n\r\n const finishedSteps = this.getFinishedSteps(caseflow);\r\n const currentStepNr = totalSteps > finishedSteps ? finishedSteps + 1 : finishedSteps;\r\n const currentStep = caseflow.steps[currentStepNr - 1];\r\n\r\n if (!currentStep) return caseflow.deadline;\r\n\r\n return currentStep.deadline;\r\n }\r\n\r\n private getFinishedSteps(item: Umbrella.CaseFlow.CaseFlowOverviewModel): number {\r\n return (\r\n item.steps.filter(\r\n step =>\r\n step.status.toString() === \"Finished\" || step.status.toString() === \"3\"\r\n ).length * 1 || 0\r\n );\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard {\r\n import CaseFlowOverviewModel = Umbrella.CaseFlow.CaseFlowOverviewModel;\r\n\r\n @Pipe('Dashboard', 'caseFlowStepSummary')\r\n @Inject('$filter')\r\n class CaseFlowStepSummaryFilter {\r\n constructor(private $filter: ng.IFilterService) { }\r\n\r\n public transform(caseflow: CaseFlowOverviewModel) {\r\n if (!caseflow) return '';\r\n\r\n const totalSteps = (caseflow.steps && caseflow.steps.length) || 0;\r\n if (totalSteps === 0) return '';\r\n\r\n const finishedSteps = this.getFinishedSteps(caseflow);\r\n if (finishedSteps === totalSteps) return `Afgerond (${finishedSteps}/${totalSteps})`;\r\n\r\n let currentStepNr = finishedSteps;\r\n const currentStep = caseflow.steps[currentStepNr];\r\n\r\n if (!currentStep) return (this.$filter('caseFlowStatus'))(caseflow);\r\n\r\n const isPickedUp = (step: CaseFlowOverviewModel.Step): boolean =>\r\n step.status.toString() === 'PickedUp' || step.status.toString() === '2';\r\n\r\n if (isPickedUp(currentStep)) currentStepNr += 1;\r\n\r\n return `${currentStep.title} (${currentStepNr}/${totalSteps})`;\r\n }\r\n\r\n private getFinishedSteps(item: Umbrella.CaseFlow.CaseFlowOverviewModel): number {\r\n const isFinished = (step: CaseFlowOverviewModel.Step): boolean =>\r\n step.status.toString() === 'Finished' || step.status.toString() === '3';\r\n\r\n return item.steps.filter(isFinished).length || 0;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard.Workload {\r\n angular.module('Dashboard').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('dashboard.caseflow.workload', {\r\n url: '/workload',\r\n data: {\r\n pageTitle: 'Zaken',\r\n authorize: ps => ps.viewCaseFlow\r\n },\r\n views: {\r\n 'overview@dashboard': {\r\n templateUrl:\r\n '/CaseFlowProcessing/_Workload/CaseFlowWorkload.html'\r\n }\r\n },\r\n resolve: {\r\n _caseflows: [\r\n 'CaseFlowOverviewService',\r\n (svc: CaseFlowOverviewService) => {\r\n if (window.user.permissions.viewCaseFlow) {\r\n svc.setToWorkloadView();\r\n svc.ensureLoaded();\r\n }\r\n }\r\n ]\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard.Workload {\r\n angular.module('Dashboard').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('dashboard.caseflow.workload.list', {\r\n url: '/overzicht',\r\n data: {\r\n pageTitle: 'Workload overzicht',\r\n authorize: ps => ps.viewCaseFlow\r\n },\r\n views: {\r\n list: {\r\n template:\r\n '',\r\n controller: createComponentRouteController<\r\n CaseFlowState,\r\n Workload.CaseFlowWorkloadComponentState\r\n >('CaseFlowOverviewStore', s => ({\r\n cases:\r\n s &&\r\n s.overviewInfo &&\r\n s.overviewInfo &&\r\n s.overviewInfo.cases &&\r\n s.overviewInfo.cases.result\r\n }))\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.KCC.CaseFlowDashboard.Workload {\r\n import CaseFlowOverviewModel = Umbrella.CaseFlow.CaseFlowOverviewModel;\r\n import IColleagueResourceClass = Umbrella.Modules.Colleagues.IColleagueResourceClass;\r\n\r\n export interface CaseFlowWorkloadComponentState {\r\n cases: PagedItemsModel;\r\n }\r\n\r\n @Component('Dashboard', {\r\n selector: 'case-flow-workload',\r\n templateUrl:\r\n '/CaseFlowProcessing/_Workload/_List/CaseFlowWorkloadComponent/CaseFlowWorkload.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject(\r\n '$state',\r\n '$stateParams',\r\n 'CaseFlowOverviewService',\r\n 'ColleagueResource',\r\n '$q'\r\n )\r\n class CaseFlowWorkloadComponent {\r\n public state: CaseFlowWorkloadComponentState;\r\n public selectedId: System.Guid;\r\n public allLoaded: boolean;\r\n\r\n public cases: { [index: string]: CaseFlowOverviewModel[] };\r\n public colleagues: any = {};\r\n\r\n constructor(\r\n private $state: ng.ui.IStateService,\r\n private $stateParams: CaseFlowOverviewStateParams,\r\n private caseFlowOverviewService: CaseFlowOverviewService,\r\n private colleagueResource: IColleagueResourceClass,\r\n private q: ng.IQService\r\n ) {\r\n this.selectedId = this.$stateParams.id;\r\n }\r\n\r\n public $onChanges(changes: {\r\n state: IBindingChange;\r\n }) {\r\n if (\r\n changes.state &&\r\n changes.state.currentValue &&\r\n changes.state.currentValue.cases\r\n ) {\r\n this.getColleagues(this.state.cases);\r\n\r\n if (!this.cases || this.state.cases.page == 0) this.cases = {};\r\n\r\n if (this.state.cases.items) {\r\n angular.forEach(\r\n this.state.cases.items,\r\n (elm: CaseFlowOverviewModel) => {\r\n if (elm.owner) {\r\n const prop = elm.owner.toString();\r\n if (!this.cases[prop]) {\r\n this.cases[prop] = [];\r\n }\r\n\r\n this.cases[prop].push(elm);\r\n } else {\r\n const unsigned = 'Nog niet toegekend';\r\n if (!this.cases[unsigned]) {\r\n this.cases[unsigned] = [];\r\n }\r\n\r\n this.cases[unsigned].push(elm);\r\n }\r\n }\r\n );\r\n }\r\n\r\n this.allLoaded =\r\n (this.state.cases.page + 1) * this.state.cases.pageSize >=\r\n this.state.cases.total;\r\n }\r\n }\r\n\r\n getColleagueIds(\r\n data: PagedItemsModel\r\n ): System.Guid[] {\r\n const flattenedColleagueIds = ([].concat)\r\n .apply([], (data.items)\r\n .reduce(function(result, element) {\r\n if(element.ownerModel)\r\n result.push(element);\r\n return result;\r\n }, [])\r\n .map(a => a.ownerModel.id))\r\n .filter(n => n);\r\n const uniqueColleagueIds = Immutable.fromJS(flattenedColleagueIds)\r\n .toSet()\r\n .toList();\r\n\r\n return uniqueColleagueIds.toJS();\r\n }\r\n\r\n getColleagues(\r\n data: PagedItemsModel\r\n ): ng.IPromise<\r\n PagedItemsModel\r\n > {\r\n const deferred = this.q.defer<\r\n PagedItemsModel\r\n >();\r\n const ids = this.getColleagueIds(data);\r\n\r\n if (ids && ids.length > 0) {\r\n this.colleagueResource\r\n .getByIds({ ids })\r\n .$promise.then(colleagues => {\r\n this.mapColleagues(colleagues);\r\n deferred.resolve(data);\r\n })\r\n .catch(error => deferred.reject());\r\n } else {\r\n deferred.resolve(data);\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n public moreCasesAvailable() {\r\n if (\r\n this.state &&\r\n this.state.cases &&\r\n this.state.cases.total >\r\n (this.state.cases.page + 1) * this.state.cases.items.length\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public more(): void {\r\n this.caseFlowOverviewService.load();\r\n }\r\n\r\n mapColleagues(\r\n colleagues: Modules.Colleagues.ColleagueModel.Detailed[]\r\n ) {\r\n if (colleagues) {\r\n colleagues.forEach(\r\n colleague =>\r\n (this.colleagues[colleague.id.toString()] = colleague)\r\n );\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.ChatConversationHandling {\r\n export enum MessageStatuses {\r\n Pending = 1,\r\n Sent = 2,\r\n Received = 3\r\n }\r\n\r\n export enum MessageDirections {\r\n toCustomer = 0,\r\n toOperator = 1\r\n }\r\n\r\n export enum ChatProviderType {\r\n Portal = 0,\r\n Tracebuzz\r\n }\r\n\r\n export enum ConversationStatus {\r\n Pending, // Conversation is in 'Request'-phase, no operator assigned.\r\n Detached, // Conversation active, no operator assigned\r\n Active,\r\n ACW, // after chat work\r\n Ended\r\n }\r\n}\r\n","namespace Umbrella.ChatConversationHandling {\r\n @Pipe('Chat', 'chatConversationStatus')\r\n class ChatConversationStatusFilter {\r\n public transform(status: string | number) {\r\n switch (status) {\r\n case 'Pending':\r\n case 0:\r\n return 'Nieuw';\r\n case 'Detached':\r\n case 1:\r\n return 'Vrijgegeven';\r\n case 'Active':\r\n case 2:\r\n return 'Opgepakt';\r\n case 'ACW':\r\n case 3:\r\n return 'Nawerktijd';\r\n case 'Ended':\r\n case 4:\r\n return 'Beëindigd';\r\n }\r\n\r\n return '';\r\n }\r\n }\r\n\r\n @Pipe('Chat', 'isPendingConversation')\r\n class ChatConversationPendingStatusFilter {\r\n public transform(status: string | number) {\r\n return isPendingConversation(status);\r\n }\r\n }\r\n\r\n @Pipe('Chat', 'isDetachedConversation')\r\n class ChatConversationDetachedStatusFilter {\r\n public transform(status: string | number) {\r\n return isDetachedConversation(status);\r\n }\r\n }\r\n\r\n @Pipe('Chat', 'isActiveConversation')\r\n class ChatConversationActiveStatusFilter {\r\n public transform(status: string | number) {\r\n return isActiveConversation(status);\r\n }\r\n }\r\n\r\n @Pipe('Chat', 'isAcwConversation')\r\n class ChatConversationAcwStatusFilter {\r\n public transform(status: string | number) {\r\n return isAcwConversation(status);\r\n }\r\n }\r\n\r\n @Pipe('Chat', 'isEndedConversation')\r\n class ChatConversationEndedStatusFilter {\r\n public transform(status: string | number) {\r\n return isEndedConversation(status);\r\n }\r\n }\r\n\r\n @Pipe('Chat', 'isActiveOrAcwConversation')\r\n class ChatConversationActiveOrAcwStatusFilter {\r\n public transform(status: string | number) {\r\n return isActiveOrAcwConversation(status);\r\n }\r\n }\r\n\r\n @Pipe('Chat', 'isAcwOrEndedConversation')\r\n class ChatConversationAcwOrEndedStatusFilter {\r\n public transform(status: string | number) {\r\n return isAcwOrEndedConversation(status);\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.ChatConversationHandling {\r\n @Pipe('Chat', 'customerName')\r\n class ChatCustomerNameFilter {\r\n public transform(conversation: ChatConversation) {\r\n if (!conversation || !conversation.customer) return 'Onbekende relatie';\r\n\r\n let customerName = `${conversation.customer.firstName} ${conversation.customer.lastName}`.trim();\r\n\r\n if (!customerName.length) customerName = 'Onbekende relatie';\r\n\r\n if (!conversation.customer.id) return `\"${customerName}\"`;\r\n\r\n return customerName;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules {\r\n interface NotifyProperties {\r\n body: string;\r\n tag: string;\r\n icon: string;\r\n notifyShow?: any;\r\n notifyClose?: any;\r\n notifyClick?: any;\r\n notifyError?: any;\r\n timeout?: number;\r\n closeOnClick: boolean;\r\n }\r\n\r\n declare class Notify {\r\n constructor(name: string, properties: NotifyProperties);\r\n show(): void;\r\n close(): void;\r\n\r\n static needsPermission: boolean;\r\n static isSupported(): boolean;\r\n static requestPermission(): void;\r\n }\r\n\r\n declare class Visibility {\r\n static isSupported(): boolean;\r\n static change(onChange: () => void): void;\r\n static hidden(): boolean;\r\n }\r\n\r\n @Service('Umbrella', 'NotificationService')\r\n export class NotificationService {\r\n private myNotification: Notify = null;\r\n\r\n constructor() {\r\n if (Notify && Notify.needsPermission && Notify.isSupported())\r\n Notify.requestPermission();\r\n\r\n if (Visibility && Visibility.isSupported()) {\r\n Visibility.change(() => {\r\n if (!Visibility.hidden() && this.myNotification)\r\n this.myNotification.close();\r\n });\r\n }\r\n }\r\n\r\n public show(message: string, tag: string) {\r\n this.hide();\r\n this.myNotification = new Notify('Umbrella', {\r\n body: message,\r\n tag,\r\n icon: '/images/umbrella-logo-black-80x80-2018.png',\r\n closeOnClick: true\r\n });\r\n this.myNotification.show();\r\n }\r\n\r\n public hide() {\r\n if (!Notify.needsPermission && this.myNotification)\r\n this.myNotification.close();\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.Activities.Registration {\r\n import ThesaurusTagModel = Modules.Knowledgebase.ThesaurusTagModel;\r\n import FaqModel = Modules.Knowledgebase.FaqModel;\r\n import ChannelType = Modules.ChannelType;\r\n import SelfServiceScenarioModel = Umbrella.Modules.SelfService.SelfServiceScenarioModel;\r\n import TargetGroupModel = Modules.Knowledgebase.TargetGroupModel;\r\n import ContactActivityModel = Umbrella.Modules.Contacts.ContactActivityModel;\r\n import TaskModel = Umbrella.Modules.Tasks.TaskModel;\r\n\r\n export const contactActivityRegistered$ = new Rx.Subject();\r\n export const taskCreated$ = new Rx.Subject();\r\n\r\n export interface ActivityRegistrationData {\r\n task: TaskModel;\r\n chatConversationId: Guid;\r\n }\r\n\r\n interface RecoveryData {\r\n channel: string;\r\n }\r\n\r\n @Service('CustomerService', 'ActivityRegistrationService')\r\n @Inject(\r\n '$location',\r\n 'LocalStorageService',\r\n 'SelfServiceScenarioResource',\r\n 'ThesaurusResource',\r\n 'FaqResource',\r\n 'TargetGroupResource'\r\n )\r\n export class ActivityRegistrationService extends BaseStoreService<\r\n ActivityRegistrationState,\r\n ActivityRegistrationEvent,\r\n ActivityRegistrationStore\r\n > {\r\n private recoveryKey = 'recoveryData';\r\n\r\n constructor(\r\n private $location: ng.ILocationService,\r\n private localStorageService: LocalStorageService,\r\n private selfServiceScenarioResource: Umbrella.CustomerService.SelfServiceScenarioResource,\r\n private thesaurusResource: Modules.Knowledgebase.ThesaurusResource,\r\n private faqResource: Modules.Knowledgebase.Faq.FaqResourceClass,\r\n private targetGroupResource: Umbrella.Modules.Knowledgebase.TargetGroup.TargetGroupResourceClass\r\n ) {\r\n super(activityRegistrationStore);\r\n\r\n activityRegistrationStore.state$\r\n .map(x => (x && x.selectedChannelType) || ChannelType.Unknown)\r\n .where(t => t !== ChannelType.Unknown)\r\n .distinctUntilChanged()\r\n .subscribe(t => this.setRecoveryData({ channel: ChannelType[t] }));\r\n }\r\n\r\n public initialize(\r\n personId: System.Guid,\r\n channelName: string,\r\n tagId: System.Guid,\r\n faqId: System.Guid,\r\n query: string\r\n ) {\r\n const recoveredData = this.getRecoveryData();\r\n const channelType: ChannelType =\r\n ChannelType[channelName || recoveredData.channel || ChannelType[ChannelType.Unknown]];\r\n\r\n if (channelType !== ChannelType.Unknown) {\r\n this.selectChannel(channelType);\r\n this.loadRootTags()\r\n .then(() => {\r\n if (tagId) {\r\n this.thesaurusResource.getById({ id: tagId }).$promise.then(tag => this.selectTag(tag));\r\n }\r\n })\r\n .then(() => {\r\n if (faqId) {\r\n this.faqResource.getById({ id: faqId }).$promise.then(faq => this.selectFaq(faq));\r\n }\r\n });\r\n }\r\n\r\n this.loadSelfserviceScenariosForPerson(personId);\r\n this.loadTargetGroups(personId);\r\n }\r\n\r\n public search(text: string): void {\r\n const state = this.getState();\r\n if (state.query && state.query === text) return;\r\n\r\n this.emit({\r\n type: 'ActivityRegistrationSearchingEvent',\r\n query: text\r\n });\r\n }\r\n\r\n public getSearchQuery(): string {\r\n const state = this.getState();\r\n return (state && state.query) || '';\r\n }\r\n\r\n public selectPanel(panel: SelectedPanel): void {\r\n this.emit({\r\n type: 'ActivityRegistrationPanelSelectedEvent',\r\n panel\r\n });\r\n }\r\n\r\n public clearChannel(): void {\r\n const currentChannel = this.getState().selectedChannelType;\r\n if (currentChannel !== ChannelType.Unknown) {\r\n this.emit({ type: 'ActivityRegistrationChannelClearedEvent' });\r\n }\r\n }\r\n\r\n public selectChannel(channel: ChannelType): void {\r\n if (channel === null || channel === undefined) throw new Error('channel null or undefined');\r\n\r\n const existingParams = this.$location.search();\r\n this.$location.search({\r\n ...existingParams,\r\n channel: ChannelType[channel]\r\n });\r\n\r\n this.emit({\r\n type: 'ActivityRegistrationChannelSelectedEvent',\r\n channelType: channel\r\n });\r\n }\r\n\r\n public async loadRootTags(): Promise {\r\n await this.thesaurusResource.getRootTags().$promise.then(tags =>\r\n this.emit({\r\n type: 'ActivityRegistrationTagsLoadedEvent',\r\n tags\r\n })\r\n );\r\n }\r\n\r\n public clearTag(): void {\r\n this.cacheTag(null);\r\n }\r\n\r\n public selectTag(tag: ThesaurusTagModel): void {\r\n if (tag === null || tag === undefined) throw new Error('tag null or undefined');\r\n\r\n this.cacheTag(tag);\r\n }\r\n\r\n private cacheTag(tag: ThesaurusTagModel): void {\r\n this.emit({\r\n type: 'ActivityRegistrationTagSelectedEvent',\r\n tag\r\n });\r\n }\r\n\r\n public selectFaq(faq: FaqModel) {\r\n if (!faq) throw new Error('Faq null or undefined');\r\n\r\n const s = this.getState();\r\n if (!s.selectedFaq || s.selectedFaq.id !== faq.id) {\r\n this.faqResource.increaseViewCount({ id: faq.id });\r\n }\r\n\r\n this.emit({\r\n type: 'ActivityRegistrationFaqSelectedEvent',\r\n faq\r\n });\r\n }\r\n\r\n public selectTargetGroup(targetGroup: TargetGroupModel) {\r\n this.emit({\r\n type: 'ActivityRegistrationTargetGroupSelected',\r\n targetGroup\r\n });\r\n }\r\n\r\n public selectFollowUpQuestion(followUpQuestionId: System.Guid) {\r\n this.emit({\r\n type: 'ActivityRegistrationFollowUpQuestionSelected',\r\n followUpQuestionId\r\n });\r\n }\r\n\r\n public async selectScenarioById(scenarioId: System.Guid): Promise {\r\n const scenario = await this.selfServiceScenarioResource.getById({\r\n id: scenarioId\r\n }).$promise;\r\n this.selectScenario(scenario);\r\n }\r\n\r\n public selectScenario(scenario: SelfServiceScenarioModel.Detailed) {\r\n if (scenario === null || scenario === undefined) throw new Error('scenario null or undefined');\r\n\r\n this.emit({\r\n type: 'ActivityRegistrationScenarioSelectedEvent',\r\n scenario\r\n });\r\n\r\n this.thesaurusResource\r\n .getById({ id: scenario.thesaurusTagId })\r\n .$promise.then(thesaurusTag => this.selectTag(thesaurusTag))\r\n .catch(() => this.clearTag());\r\n }\r\n\r\n public getSelectedChannelType(): ChannelType {\r\n const s = this.getState();\r\n if (s && s.selectedChannelType) return s.selectedChannelType;\r\n\r\n const cachedChannelType = this.getRecoveryData();\r\n if (cachedChannelType && cachedChannelType.channel) return ChannelType[cachedChannelType.channel];\r\n\r\n return ChannelType.Unknown;\r\n }\r\n\r\n public getSelectedTagId(): System.Guid | null {\r\n const s = this.getState();\r\n return (\r\n (s.query && s.query.length && s.selectedFaq && s.selectedFaq.mainTag.id) ||\r\n (s.selectedTag && s.selectedTag.id) ||\r\n (s.selectedScenario && s.selectedScenario.thesaurusTagId)\r\n );\r\n }\r\n\r\n public getSelectedFaqId(): System.Guid | null {\r\n const s = this.getState();\r\n return s.selectedFaq && s.selectedFaq.id;\r\n }\r\n\r\n public getSelectedTargetgroupId(): System.Guid | null {\r\n const s = this.getState();\r\n return s.selectedTargetGroup && s.selectedTargetGroup.id;\r\n }\r\n\r\n public getSelectedFollowUpQuestionId(): System.Guid | null {\r\n const s = this.getState();\r\n return s.selectedFollowUpQuestionId;\r\n }\r\n\r\n public contactActivityRegistered(activity: ContactActivityModel): void {\r\n this.emit({\r\n type: 'ActivityRegistrationRegisteredEvent',\r\n activity\r\n });\r\n contactActivityRegistered$.onNext(activity);\r\n }\r\n\r\n public taskRegistered(task: TaskModel, chatConversationId?: Guid): void {\r\n this.emit({ type: 'ActivityRegistrationRegisteredEvent' });\r\n taskCreated$.onNext({ task, chatConversationId });\r\n }\r\n\r\n public getTargetGroups(): TargetGroupModel[] {\r\n const s = this.getState();\r\n return s && s.targetGroupInfo && s.targetGroupInfo.targetGroups;\r\n }\r\n\r\n private getRecoveryData(): RecoveryData {\r\n return (\r\n this.localStorageService.get(this.recoveryKey) || {\r\n channel: ChannelType[ChannelType.Unknown]\r\n }\r\n );\r\n }\r\n\r\n private setRecoveryData(data: RecoveryData) {\r\n this.localStorageService.store(this.recoveryKey, data);\r\n }\r\n\r\n private loadTargetGroups(personId: System.Guid) {\r\n this.emit({ type: 'TargetGroupsLoadingEvent' });\r\n\r\n this.targetGroupResource\r\n .getAllForPersonId({ id: personId })\r\n .$promise.then((targetgroups: TargetGroupModel[]) => {\r\n this.emit({\r\n type: 'TargetGroupsLoadedEvent',\r\n targetGroups: targetgroups\r\n });\r\n });\r\n }\r\n\r\n private loadSelfserviceScenariosForPerson(personId: Guid) {\r\n this.selfServiceScenarioResource.getActiveByPersonId({ personId }).$promise.then(scenarios => {\r\n this.emit({\r\n type: 'ActivityRegistrationScenariosForPersonLoadedEvent',\r\n scenarios\r\n });\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.ChatConversationHandling {\r\n import Guid = System.Guid;\r\n\r\n export interface ChatState {\r\n readonly enabled: boolean;\r\n readonly isLoggedIn: boolean;\r\n readonly registration: RegistrationState;\r\n readonly conversations: ChatOverviewItemModel[];\r\n readonly conversationsStatistics: ConversationStatistics[];\r\n readonly selectedOriginId: Guid;\r\n readonly activeId: Guid;\r\n readonly loading: boolean;\r\n readonly selectedAnswer: string;\r\n }\r\n export interface ConversationStatistics {\r\n id: System.Guid;\r\n lastReadTime: Date;\r\n }\r\n\r\n export interface EnabledEvent {\r\n type: 'EnabledEvent';\r\n }\r\n\r\n export interface RegisteredEvent {\r\n type: 'RegisteredEvent';\r\n }\r\n\r\n export interface DeregisteredEvent {\r\n type: 'DeregisteredEvent';\r\n }\r\n\r\n export interface ConversationPickedupEvent {\r\n type: 'ConversationPickedupEvent';\r\n requestId: Guid;\r\n conversationId: Guid;\r\n }\r\n export interface ConversationEnterEvent {\r\n type: 'ConversationEnterEvent';\r\n conversationId: Guid;\r\n }\r\n export interface ConversationLeaveEvent {\r\n type: 'ConversationLeaveEvent';\r\n }\r\n export interface StartAfterCallWorkEvent {\r\n type: 'StartAfterCallWorkEvent';\r\n conversationId: Guid;\r\n }\r\n export interface ConversationEndEvent {\r\n type: 'ConversationEndEvent';\r\n conversationId: Guid;\r\n }\r\n export interface ConversationsLoadingEvent {\r\n readonly type: 'ConversationsLoadingEvent';\r\n }\r\n\r\n export interface ConversationsLoadedEvent {\r\n readonly type: 'ConversationsLoadedEvent';\r\n readonly conversations: ChatOverviewItemModel[];\r\n }\r\n\r\n export interface ConversationselectedEvent {\r\n readonly type: 'ConversationSelectedEvent';\r\n readonly originId: System.Guid;\r\n }\r\n\r\n export interface ConversationMessagesReadEvent {\r\n readonly type: 'ConversationMessagesReadEvent';\r\n readonly conversationId: System.Guid;\r\n }\r\n\r\n export interface ChatOperatorLoginStatusChangedEvent {\r\n readonly type: 'ChatOperatorLoginStatusChangedEvent';\r\n readonly isLoggedIn: boolean;\r\n }\r\n\r\n export interface SelectedAnswerEvent {\r\n readonly type: 'SelectedAnswerEvent';\r\n readonly answer: string;\r\n }\r\n\r\n export type ChatEvent =\r\n | RegisteredEvent\r\n | DeregisteredEvent\r\n | EnabledEvent\r\n | ConversationsLoadingEvent\r\n | ConversationsLoadedEvent\r\n | ConversationselectedEvent\r\n | ConversationEnterEvent\r\n | ConversationLeaveEvent\r\n | StartAfterCallWorkEvent\r\n | ConversationEndEvent\r\n | ConversationPickedupEvent\r\n | ConversationMessagesReadEvent\r\n | ChatOperatorLoginStatusChangedEvent\r\n | SelectedAnswerEvent;\r\n\r\n export enum RegisterStatus {\r\n NotRegistered,\r\n Registered,\r\n Deregistered\r\n }\r\n\r\n export interface RegistrationState {\r\n status: RegisterStatus;\r\n error: string;\r\n }\r\n\r\n export interface WaitingStatistics {\r\n waitingCustomersCount: number;\r\n maxWaitingTimeSeconds: number;\r\n waitingStatsLastUpdated: Date;\r\n averageWaitingPickupTime: number;\r\n averageWaitingReplyTime: number;\r\n operatorLoad: number;\r\n activeConversations: number;\r\n }\r\n\r\n export interface ChatConversationFilters {\r\n readonly query: string;\r\n readonly status: string;\r\n }\r\n\r\n function reduce(e: ChatEvent): ObservableStore.Reducer {\r\n switch (e.type) {\r\n case 'EnabledEvent':\r\n return s => ({\r\n ...s,\r\n isLoggedIn: false,\r\n enabled: true,\r\n conversations: [],\r\n conversationsStatistics: []\r\n });\r\n\r\n case 'RegisteredEvent':\r\n return s => ({\r\n ...s,\r\n registration: {\r\n status: RegisterStatus.Registered,\r\n error: null\r\n }\r\n });\r\n\r\n case 'DeregisteredEvent':\r\n return s => ({\r\n ...s,\r\n registration: {\r\n status: RegisterStatus.NotRegistered,\r\n error: null\r\n },\r\n conversations: [],\r\n conversationsStatistics: [], \r\n originId: null,\r\n activeId: null,\r\n isLoggedIn: false\r\n });\r\n\r\n case 'ConversationsLoadingEvent':\r\n return s => ({\r\n ...s,\r\n loading: true\r\n });\r\n\r\n case 'ConversationsLoadedEvent':\r\n return s => ({\r\n ...s,\r\n conversations: [...e.conversations],\r\n loading: false\r\n });\r\n\r\n case 'ChatOperatorLoginStatusChangedEvent':\r\n return s => ({\r\n ...s,\r\n isLoggedIn: e.isLoggedIn\r\n });\r\n\r\n case 'ConversationMessagesReadEvent': {\r\n return s => ({\r\n ...s,\r\n conversationsStatistics: s.conversations.map(c => {\r\n const stats = s.conversationsStatistics.find(s => s && s.id === c.id);\r\n if (c.id === e.conversationId) {\r\n return { id: c.id, lastReadTime: new Date() };\r\n }\r\n return stats;\r\n })\r\n });\r\n }\r\n\r\n case 'ConversationSelectedEvent':\r\n return s => ({\r\n ...s,\r\n selectedOriginId: e.originId\r\n });\r\n\r\n case 'ConversationPickedupEvent':\r\n return s => ({\r\n ...s,\r\n conversations: s.conversations.map(x => (x.originId === e.requestId ? ToActive(x) : x)),\r\n conversationsStatistics: [...s && s.conversationsStatistics, {id: e.conversationId, lastReadTime: new Date()}]\r\n });\r\n\r\n case 'ConversationEnterEvent':\r\n return s => ({\r\n ...s,\r\n activeId: e.conversationId\r\n });\r\n\r\n case 'ConversationLeaveEvent':\r\n return s => ({\r\n ...s,\r\n activeId: null\r\n });\r\n\r\n case 'StartAfterCallWorkEvent':\r\n return s => ({\r\n ...s,\r\n conversations: s.conversations.map(x => (x.id === e.conversationId ? ToAcw(x) : x))\r\n });\r\n\r\n case 'ConversationEndEvent':\r\n return s => ({\r\n ...s,\r\n conversations: s.conversations.filter(x => x.id !== e.conversationId)\r\n });\r\n \r\n case 'SelectedAnswerEvent':\r\n return s => ({\r\n ...s,\r\n selectedAnswer: e.answer\r\n });\r\n }\r\n }\r\n\r\n export function ToAcw(conversation: ChatOverviewItemModel): ChatOverviewItemModel {\r\n conversation.status = ConversationStatus.ACW;\r\n return conversation;\r\n }\r\n\r\n export function ToActive(conversation: ChatOverviewItemModel): ChatOverviewItemModel {\r\n conversation.status = ConversationStatus.Active;\r\n return conversation;\r\n }\r\n\r\n export type ChatStore = ObservableStore.EventStore;\r\n\r\n export const chatStore: ChatStore = rootStore.map(lens('chat'), reduce);\r\n\r\n angular.module('Chat').value('ChatStore', chatStore);\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.ChatConversationHandling {\r\n import Guid = System.Guid;\r\n import ConversationRequestModel = Umbrella.Chat.ConversationRequestModel;\r\n import ActiveConversationModel = Umbrella.Chat.ActiveConversationModel;\r\n import MessageModel = Umbrella.Chat.MessageModel;\r\n import contactActivityRegistered$ = Umbrella.CustomerService.CustomerCard.Activities.Registration.contactActivityRegistered$;\r\n import taskCreated$ = Umbrella.CustomerService.CustomerCard.Activities.Registration.taskCreated$;\r\n import ContactActivityModel = Umbrella.Modules.Contacts.ContactActivityModel;\r\n import IContactActivityResource = Umbrella.Modules.Contacts.IContactActivityResource;\r\n import NotificationService = Umbrella.Modules.NotificationService;\r\n import TaskModel = Umbrella.Modules.Tasks.TaskModel;\r\n import ITaskActivityResource = Umbrella.TaskHandling.ITaskActivityResource;\r\n import IColleagueResourceClass = Umbrella.Modules.Colleagues.IColleagueResourceClass;\r\n import ActivityRegistrationData = Umbrella.CustomerService.CustomerCard.Activities.Registration.ActivityRegistrationData;\r\n\r\n @Service('Chat', 'ChatService')\r\n @Inject(\r\n '$state',\r\n 'ToastMessageService',\r\n 'ChatResource',\r\n 'PersonResource',\r\n 'ContactActivityResource',\r\n 'NotificationService',\r\n 'TaskActivityResource',\r\n 'ColleagueResource'\r\n )\r\n export class ChatService extends BaseStoreService {\r\n private chatObserver: Rx.IDisposable;\r\n private cachedCustomers: ChatCustomerModel[] = [];\r\n private previousConversationState = '';\r\n private selectedAnswer: string;\r\n\r\n constructor(\r\n private $state: ng.ui.IStateService,\r\n private toastMesssageService: ToastMessageService,\r\n private chatResource: ChatResource,\r\n private personResource: PersonResource,\r\n private contactActivityResource: IContactActivityResource,\r\n private notificationService: NotificationService,\r\n private taskActivityResource: ITaskActivityResource,\r\n private colleagueResource: IColleagueResourceClass\r\n ) {\r\n super(chatStore);\r\n\r\n const isModuleEnabled = true;\r\n if (isModuleEnabled) {\r\n this.emit({ type: 'EnabledEvent' });\r\n this.applyPolling();\r\n\r\n contactActivityRegistered$.distinctUntilChanged().subscribe((activity: ContactActivityModel) => {\r\n this.linkActivityToChatConversation(activity);\r\n });\r\n\r\n taskCreated$.distinctUntilChanged().subscribe((activityRegistrationData: ActivityRegistrationData) => {\r\n this.linkTaskToChatConversation(activityRegistrationData);\r\n });\r\n }\r\n }\r\n\r\n public async load() {\r\n this.emit({ type: 'ConversationsLoadingEvent' });\r\n\r\n const toList = response => {\r\n const list: ChatOverviewItemModel[] = [\r\n ...response[0].map(x => this.mapActiveConversation(x)),\r\n ...response[1].map(x => this.mapPendingRequest(x))\r\n ];\r\n return list;\r\n };\r\n\r\n const operators = await this.chatResource.getAllOperators().$promise;\r\n const currentOperator = operators.find(x => x.personId == window.user.personId);\r\n if (!currentOperator) return;\r\n\r\n this.emit({ type: 'ChatOperatorLoginStatusChangedEvent', isLoggedIn: currentOperator.isLoggedIn });\r\n\r\n Rx.Observable.forkJoin(\r\n this.chatResource.getActiveConversations().$promise,\r\n this.chatResource.getPendingConversations().$promise\r\n )\r\n .map(toList)\r\n .tapOnError(_ => this.resetChatObserver(10000))\r\n .take(1)\r\n .subscribe(conversations => {\r\n this.resetChatObserver(1000);\r\n\r\n if (!this.hasConversationStateChanged(conversations)) return;\r\n\r\n if (\r\n this.nrOfConversationsHasIncreased(conversations) &&\r\n currentOperator &&\r\n currentOperator.isLoggedIn\r\n )\r\n this.displayNotificationWhenBrowserIsHiddenOrNotInChatDashboard();\r\n\r\n this.emit({ type: 'ConversationsLoadedEvent', conversations });\r\n\r\n this.loadAndCacheCustomers(conversations);\r\n });\r\n }\r\n\r\n public select(originId: Guid): void {\r\n this.emit({ type: 'ConversationSelectedEvent', originId });\r\n }\r\n\r\n public accept(requestId: Guid): ng.IPromise {\r\n const promise = this.chatResource.accept({ id: requestId }).$promise;\r\n promise\r\n .then((response: ConversationIdResponseModel) => {\r\n this.emit({\r\n type: 'ConversationPickedupEvent',\r\n requestId,\r\n conversationId: response.kccConversationId\r\n });\r\n this.openConversation(response.kccConversationId.kccConversationId);\r\n })\r\n .catch(() => {\r\n this.toastMesssageService.error(\r\n 'Fout opgetreden tijdens aannemen gesprek. Chat gesprek reeds opgepakt? Probeer het anders nogmaals.'\r\n );\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n public pickup(conversationId: Guid): ng.IPromise {\r\n const promise = this.chatResource.pickup({ id: conversationId }).$promise;\r\n promise\r\n .then(() => {\r\n this.emit({ type: 'ConversationEnterEvent', conversationId });\r\n })\r\n .catch(() => {\r\n this.toastMesssageService.error(\r\n 'Fout opgetreden tijdens oppakken gesprek. Chat gesprek reeds opgepakt? Probeer het anders nogmaals.'\r\n );\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n public openConversation(id: Guid): void {\r\n this.emit({ type: 'ConversationEnterEvent', conversationId: id });\r\n this.conversationMessagesRead(id);\r\n }\r\n\r\n public closeConversation(conversation?: ChatConversation): void {\r\n this.emit({ type: 'ConversationLeaveEvent' });\r\n if (conversation) this.conversationMessagesRead(conversation.id);\r\n }\r\n\r\n public startAfterCallWork(id: Guid): void {\r\n this.chatResource\r\n .leave({ id })\r\n .$promise.then(() => {\r\n this.emit({ type: 'StartAfterCallWorkEvent', conversationId: id });\r\n })\r\n .catch(() => {\r\n this.toastMesssageService.error('Fout opgetreden tijdens afronden gesprek. Probeer het nogmaals.');\r\n });\r\n }\r\n\r\n public detachOperator(id: Guid): void {\r\n this.chatResource\r\n .detach({ id })\r\n .$promise.then(() => {\r\n this.emit({ type: 'ConversationEndEvent', conversationId: id });\r\n this.closeConversation();\r\n })\r\n .catch(() => {\r\n this.toastMesssageService.error('Fout opgetreden tijdens vrijgeven gesprek. Probeer het nogmaals.');\r\n });\r\n }\r\n\r\n public endAfterCallWork(id: Guid): void {\r\n this.chatResource\r\n .endAcw({ id })\r\n .$promise.then(() => {\r\n this.emit({ type: 'ConversationEndEvent', conversationId: id });\r\n })\r\n .catch(() => {\r\n this.toastMesssageService.error(\r\n 'Fout opgetreden tijdens beeindigen gesprek. Probeer het nogmaals.'\r\n );\r\n });\r\n }\r\n\r\n public async registerOperator(login = false) {\r\n const colleague = await this.colleagueResource.getById({ id: window.user.id }).$promise;\r\n const firstName = colleague.naturalPerson ? colleague.naturalPerson.firstName : colleague.name;\r\n const lastName = colleague.naturalPerson\r\n ? `${colleague.naturalPerson.insertion} ${colleague.naturalPerson.lastName}`.trim()\r\n : '';\r\n\r\n const loginModel = {\r\n firstName: firstName,\r\n lastName: lastName,\r\n avatar: ''\r\n };\r\n\r\n this.chatResource\r\n .register(loginModel) //polling\r\n .$promise.then(() => {\r\n if (login) {\r\n this.loginOperator();\r\n }\r\n this.emit({ type: 'RegisteredEvent' });\r\n })\r\n .catch(() => {\r\n this.toastMesssageService.error('Fout opgetreden tijdens aanmelden. Probeer het nogmaals.');\r\n });\r\n }\r\n\r\n public deregisterOperator() {\r\n this.chatResource\r\n .logout()\r\n .$promise.then(() => {\r\n this.emit({ type: 'DeregisteredEvent' });\r\n this.clearConversationState();\r\n })\r\n .catch(() => {\r\n this.toastMesssageService.error('Fout opgetreden tijdens afmelden. Probeer het nogmaals.');\r\n });\r\n }\r\n\r\n public addSelectedAnswer(answer: string): void {\r\n this.emit({ type: 'SelectedAnswerEvent', answer: answer });\r\n }\r\n\r\n public loginOperator() {\r\n this.chatResource\r\n .login()\r\n .$promise.then(() => {\r\n return;\r\n })\r\n .catch(() => {\r\n this.toastMesssageService.error(\r\n 'Fout opgetreden tijdens inloggen voor beschikbaarheid. Probeer het nogmaals.'\r\n );\r\n });\r\n }\r\n\r\n public logoutOperator() {\r\n this.chatResource\r\n .logout()\r\n .$promise.then(() => {\r\n return;\r\n })\r\n .catch(() => {\r\n this.toastMesssageService.error(\r\n 'Fout opgetreden tijdens uitloggen voor beschikbaarheid. Probeer het nogmaals.'\r\n );\r\n });\r\n }\r\n\r\n public sendMessage = (conversationId: System.Guid, messageText: string) => {\r\n this.chatResource.sendMessage({ id: conversationId }, { messageText }).$promise.catch(() => {\r\n this.toastMesssageService.error('Bericht kon niet verzonden worden');\r\n });\r\n };\r\n\r\n public conversationMessagesRead = (conversationId: System.Guid) => {\r\n this.emit({ type: 'ConversationMessagesReadEvent', conversationId });\r\n };\r\n\r\n public hasActiveConversation(personId: System.Guid): boolean {\r\n const state = this.getState();\r\n const personConversations =\r\n state && state.conversations && state.conversations.filter(x => x.customer.id === personId);\r\n return personConversations && !!personConversations.length;\r\n }\r\n\r\n public toCustomer(person: PersonModel): ChatCustomerModel {\r\n return {\r\n id: person.id,\r\n firstName: person.name,\r\n lastName: '',\r\n email:\r\n (person.contactDetails &&\r\n person.contactDetails.emailAddresses &&\r\n person.contactDetails.emailAddresses.length &&\r\n person.contactDetails.emailAddresses[0].email) ||\r\n '',\r\n phoneNumber: ''\r\n };\r\n }\r\n\r\n public link(conversationId: System.Guid, person: PersonModel) {\r\n this.chatResource\r\n .linkCustomer({ id: conversationId, customerId: person.id })\r\n .$promise.then(() => {\r\n this.cachedCustomers.push(this.toCustomer(person));\r\n })\r\n .catch(() => {\r\n this.toastMesssageService.error(\r\n 'Er is een fout opgetreden bij het koppelen. Probeer het nogmaals.'\r\n );\r\n });\r\n }\r\n\r\n public unlinkCustomer(conversationId: System.Guid) {\r\n this.chatResource.unlinkCustomer({ id: conversationId }).$promise.catch(() => {\r\n this.toastMesssageService.error('Er is een fout opgetreden bij het ontkoppelen. Probeer het nogmaals.');\r\n });\r\n }\r\n\r\n public getInitialQuestionText = (c: ChatConversation) => {\r\n if (c && c.messages) {\r\n const initialQuestion = c.messages.filter(m => m.direction == MessageDirections.toOperator)[0];\r\n if (initialQuestion) {\r\n return initialQuestion.text;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n private hasConversationStateChanged(conversations: ChatOverviewItemModel[]): boolean {\r\n const currentConversationState = JSON.stringify(conversations);\r\n const result = this.previousConversationState !== currentConversationState;\r\n\r\n this.previousConversationState = currentConversationState;\r\n return result;\r\n }\r\n\r\n private clearConversationState(): void {\r\n this.previousConversationState = '';\r\n }\r\n\r\n private loadAndCacheCustomers(conversations: ChatOverviewItemModel[]): void {\r\n const notCachedCustomerIds = conversations\r\n .filter(x => x.customer.id)\r\n .filter(x => !this.cachedCustomers.find(c => c.id === x.id))\r\n .map(x => x.customer.id);\r\n\r\n if (!notCachedCustomerIds.length) return;\r\n\r\n this.personResource.getByIds({ ids: notCachedCustomerIds }).$promise.then(persons => {\r\n const foundIds = persons.map(x => x.id);\r\n const notFoundIds = notCachedCustomerIds.filter(id => foundIds.indexOf(id) === -1);\r\n\r\n this.cachedCustomers.push(...persons.map(x => this.toCustomer(x)));\r\n this.cachedCustomers.push(...notFoundIds.map(id => this.getCachedCustomerOrUnknown(id)));\r\n });\r\n }\r\n\r\n private nrOfConversationsHasIncreased(conversations: ChatOverviewItemModel[]): boolean {\r\n const nrOfPendingRequests = conversations.length;\r\n\r\n const state = this.getState();\r\n const previousNrOfPendingRequests = state && state.conversations && state.conversations.length;\r\n\r\n return nrOfPendingRequests > previousNrOfPendingRequests;\r\n }\r\n\r\n private displayNotificationWhenBrowserIsHiddenOrNotInChatDashboard(): void {\r\n const inChatOverview = this.$state.current.name.indexOf('dashboard.chat') > -1;\r\n const isBrowserHiddenOrNotHavingFocus = document.visibilityState === 'hidden' || !document.hasFocus();\r\n\r\n if (!inChatOverview || isBrowserHiddenOrNotHavingFocus)\r\n this.notificationService.show('Inkomend chatgesprek', '');\r\n }\r\n\r\n private linkActivityToChatConversation(activity: ContactActivityModel): void {\r\n const conversation = activity && activity.role && this.getConversation(activity.role.personId);\r\n if (!conversation) return;\r\n\r\n this.contactActivityResource.assignChatConversation({\r\n chatConversationId: conversation.id,\r\n contactMomentId: activity.id\r\n });\r\n }\r\n\r\n private linkTaskToChatConversation(activityRegistrationData: ActivityRegistrationData): void {\r\n const conversation =\r\n activityRegistrationData.task &&\r\n activityRegistrationData.task.relatedPerson &&\r\n this.getConversation(activityRegistrationData.task.relatedPerson.personId);\r\n if (!conversation && !activityRegistrationData) return;\r\n const chatConversationId =\r\n (activityRegistrationData && activityRegistrationData.chatConversationId) ||\r\n (conversation && conversation.id);\r\n this.taskActivityResource.assignChatConversation({\r\n chatConversationId,\r\n taskId: activityRegistrationData.task.id\r\n });\r\n }\r\n\r\n private getConversation(personId: System.Guid): ChatOverviewItemModel {\r\n const state = this.getState();\r\n const filteredByPersonId =\r\n state && state.conversations && state.conversations.filter(x => x.customer.id === personId);\r\n return filteredByPersonId.length && filteredByPersonId[0];\r\n }\r\n\r\n private applyPolling(): void {\r\n this.setChatObserver(1000);\r\n }\r\n\r\n private resetChatObserver(interval: number) {\r\n this.chatObserver.dispose();\r\n this.setChatObserver(interval);\r\n }\r\n\r\n private setChatObserver(interval: number) {\r\n const isLoggedIn = () => {\r\n const state = this.getState();\r\n return (\r\n state &&\r\n state.enabled &&\r\n state.registration &&\r\n state.registration.status === RegisterStatus.Registered\r\n );\r\n };\r\n\r\n this.chatObserver = Rx.Observable.interval(interval)\r\n .filter(isLoggedIn)\r\n .subscribe(() => {\r\n this.load();\r\n });\r\n }\r\n\r\n private getCustomer(conversation: ActiveConversationModel): ChatCustomerModel {\r\n if (conversation.customerId) return this.getCachedCustomerOrUnknown(conversation.customerId);\r\n\r\n const nonOperatorParticipant =\r\n conversation && conversation.participantInfo && conversation.participantInfo.find(x => !x.chatOperator);\r\n\r\n if (nonOperatorParticipant.authenticatedCustomer) {\r\n return this.getCachedCustomerOrUnknown(nonOperatorParticipant.authenticatedCustomer.customerId);\r\n } else if (nonOperatorParticipant.anonymousCustomer) {\r\n return {\r\n id: null,\r\n firstName: nonOperatorParticipant.anonymousCustomer.firstName || 'Onbekende',\r\n lastName: nonOperatorParticipant.anonymousCustomer.lastName || 'relatie',\r\n email: nonOperatorParticipant.anonymousCustomer.emailAddress || '',\r\n phoneNumber: ''\r\n };\r\n } else if (nonOperatorParticipant.externalChannelParticipant) {\r\n return {\r\n id: null,\r\n firstName: nonOperatorParticipant.externalChannelParticipant.displayName,\r\n lastName: '',\r\n email: '',\r\n phoneNumber: nonOperatorParticipant.externalChannelParticipant.profileId\r\n };\r\n }\r\n throw { messageText: 'Could not extract non-operator participant.' };\r\n }\r\n\r\n private mapActiveConversation(conversation: ActiveConversationModel): ChatOverviewItemModel {\r\n return {\r\n createdOn: conversation.createdOn,\r\n id: conversation.kccConversationId,\r\n requestId: conversation.kccConversationRequestId,\r\n externalConversationId: conversation.externalConversationId,\r\n originId: conversation.kccConversationRequestId || conversation.externalConversationId,\r\n customer: this.getCustomer(conversation),\r\n operator: conversation.currentChatOperator\r\n ? {\r\n id: conversation.currentChatOperator.participantId,\r\n name:\r\n conversation.currentChatOperator.firstName +\r\n ' ' +\r\n conversation.currentChatOperator.lastName\r\n }\r\n : null,\r\n initialQuestion:\r\n (conversation.messages && conversation.messages.length && conversation.messages[0].text) || '',\r\n isAnonymous: !!!conversation.customerId,\r\n status: conversation.afterCallWorkStartedOn\r\n ? ConversationStatus.ACW\r\n : conversation.currentChatOperator\r\n ? ConversationStatus.Active\r\n : ConversationStatus.Detached,\r\n messages: this.mapMessages(conversation.messages, conversation.participantInfo),\r\n afterCallWorkStartedOn: conversation.afterCallWorkStartedOn,\r\n rating: conversation.rating\r\n };\r\n }\r\n\r\n private mapPendingRequest(conversation: ConversationRequestModel): ChatOverviewItemModel {\r\n const customerId = conversation.authenticated && conversation.authenticated.customerId;\r\n const customer: ChatCustomerModel = customerId\r\n ? this.getCachedCustomerOrUnknown(customerId)\r\n : {\r\n id: null,\r\n firstName: conversation.anonymous && conversation.anonymous.firstName,\r\n lastName: conversation.anonymous && conversation.anonymous.lastName,\r\n email: conversation.anonymous && conversation.anonymous.emailAddress,\r\n phoneNumber: ''\r\n };\r\n\r\n return {\r\n createdOn: conversation.createdOn,\r\n id: undefined,\r\n originId: conversation.kccConversationRequestId || conversation.externalConversationId,\r\n isAnonymous: !!conversation.anonymous,\r\n customer,\r\n initialQuestion: conversation.initialQuestion,\r\n status: ConversationStatus.Pending,\r\n messages: this.mapMessages([], null)\r\n };\r\n }\r\n\r\n private getCachedCustomerOrUnknown(customerId: System.Guid): ChatCustomerModel {\r\n return (\r\n (customerId && this.cachedCustomers.find(x => x.id === customerId)) || {\r\n id: customerId,\r\n firstName: 'Onbekende',\r\n lastName: 'relatie',\r\n email: '',\r\n phoneNumber: ''\r\n }\r\n );\r\n }\r\n\r\n private mapMessages(messages: MessageModel[], participants: Chat.ParticipantModel[]): ChatMessage[] {\r\n const operators = participants && participants.filter(x => !!x.chatOperator);\r\n const operatorParticipantIds = operators && operators.map(x => x.participantId);\r\n\r\n return messages.map(x => {\r\n return {\r\n id: x.id,\r\n sentOn: new Date(x.timestamp),\r\n direction: operatorParticipantIds.find(y => y === x.participantId)\r\n ? MessageDirections.toCustomer\r\n : MessageDirections.toOperator,\r\n text: x.text,\r\n status: null,\r\n isRead: false,\r\n isSystemMessage: !x.participantId,\r\n attachments: x.attachments\r\n };\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.ChatConversationHandling {\r\n angular.module('Chat').config([\r\n '$stateProvider',\r\n ($stateProvider: ng.ui.IStateProvider) => {\r\n $stateProvider.state('dashboard.chat', {\r\n url: '/chat',\r\n redirectTo: 'dashboard.chat.overview',\r\n data: {\r\n pageTitle: 'Chat',\r\n authorize: ps => ps.viewChatConversation\r\n },\r\n views: {\r\n overview: {\r\n templateUrl: '/ChatConversationHandling/_Overview/ChatOverview.html'\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.ChatConversationHandling {\r\n angular.module('Chat').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('dashboard.chat.overview', {\r\n url: '/overzicht',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Chat overzicht',\r\n authorize: ps => ps.viewChatConversation\r\n },\r\n views: {\r\n filters: {\r\n // component: 'chatConversationFilters'\r\n },\r\n list: {\r\n template: '',\r\n controller: Umbrella.createComponentRouteController<\r\n ChatState,\r\n ChatConversationListComponentState\r\n >('ChatStore', s => ({\r\n loading: false,\r\n conversations: s && s.conversations,\r\n enabled: s && s.enabled,\r\n registered: s && s.registration && s.registration.status === RegisterStatus.Registered\r\n }))\r\n },\r\n details: {\r\n template: '',\r\n controller: Umbrella.createComponentRouteController<\r\n ChatState,\r\n ChatNoChatSelectedComponentState\r\n >('ChatStore', s => ({\r\n registered: s && s.registration && 1 * s.registration.status === RegisterStatus.Registered\r\n }))\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.ChatConversationHandling {\r\n export interface ChatNoChatSelectedComponentState {\r\n registered: boolean;\r\n }\r\n\r\n @Component('Chat', {\r\n selector: 'chat-no-chat-selected',\r\n templateUrl: '/ChatConversationHandling/_Overview/ChatNoChatSelectedComponent/ChatNoChatSelected.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n class ChatNoChatSelectedComponent {\r\n public state: ChatNoChatSelectedComponent;\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.ChatConversationHandling {\r\n angular.module('Chat').config([\r\n '$stateProvider',\r\n ($stateProvider: ng.ui.IStateProvider) => {\r\n $stateProvider.state('dashboard.chat.overview.details', {\r\n url: '/{id:(?:[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12})}',\r\n data: {\r\n pageTitle: 'Chat details',\r\n authorize: ps => ps.viewChatConversation\r\n },\r\n views: {\r\n 'details@dashboard.chat': {\r\n template: '',\r\n controller: Umbrella.createComponentRouteController(\r\n 'ChatStore',\r\n s => ({\r\n conversation:\r\n s &&\r\n s.conversations &&\r\n s.selectedOriginId &&\r\n s.conversations.find(x => x.originId === s.selectedOriginId),\r\n enabled: s && s.enabled,\r\n registered: s && s.registration && s.registration.status === RegisterStatus.Registered\r\n })\r\n )\r\n }\r\n },\r\n onEnter: [\r\n '$stateParams',\r\n 'ChatService',\r\n ($stateParams: ng.ui.IStateParamsService, chatService: ChatService) => {\r\n chatService.select($stateParams.id);\r\n }\r\n ]\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.ChatConversationHandling {\r\n export interface ChatConversationDetailsState {\r\n conversation: ChatOverviewItemModel;\r\n enabled: boolean;\r\n registered: boolean;\r\n }\r\n\r\n @Component('Chat', {\r\n selector: 'chat-details',\r\n templateUrl:\r\n '/ChatConversationHandling/_Overview/_Details/ChatConversationDetailsComponent/ChatConversationDetails.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('ChatService')\r\n class ChatConversationDetailsComponent {\r\n public state: ChatConversationDetailsState;\r\n public isProcessing = false;\r\n\r\n constructor(private chatService: ChatService) {}\r\n\r\n public acceptConversation() {\r\n this.isProcessing = true;\r\n this.chatService.accept(this.state.conversation.originId).finally(() => {\r\n this.isProcessing = false;\r\n });\r\n }\r\n\r\n public pickupConversation() {\r\n this.isProcessing = true;\r\n this.chatService.pickup(this.state.conversation.id).finally(() => {\r\n this.isProcessing = false;\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Chat {\r\n import debounce = Umbrella.Helpers.debounce;\r\n\r\n interface SelectedItem {\r\n text: string;\r\n id: number;\r\n }\r\n\r\n @Component('Dashboard', {\r\n selector: 'chat-conversation-filters',\r\n templateUrl:\r\n '/ChatConversationHandling/_Overview/_Filters/ChatConversationFiltersComponent/ChatConversationFilters.html'\r\n })\r\n class ChatConversationFiltersComponent {\r\n public searchQuery = '';\r\n public chatConversationStatus: SelectedItem;\r\n\r\n /* constructor(\r\n private chatOverviewService: Umbrella.Modules.Chat.ChatOverviewService\r\n ) {}\r\n\r\n public filterByQuery = debounce(\r\n (query: string) => {\r\n this.chatOverviewService.searchChatConvesations(query);\r\n },\r\n 500,\r\n false\r\n );\r\n\r\n public filterByStatus(status: string) {\r\n this.chatOverviewService.loadConvesationsByStatus(status);\r\n }*/\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.ChatConversationHandling {\r\n import ConversationStatus = Umbrella.ChatConversationHandling.ConversationStatus;\r\n\r\n export interface ChatConversationListComponentState {\r\n enabled: boolean;\r\n registered: boolean;\r\n loading: boolean;\r\n conversations: ChatOverviewItemModel[];\r\n }\r\n\r\n @Component('Chat', {\r\n selector: 'chat-conversation-list',\r\n templateUrl:\r\n '/ChatConversationHandling/_Overview/_List/ChatConversationListComponent/ChatConversationList.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n class ChatConversationListComponent {\r\n public state: ChatConversationListComponentState;\r\n public selectedId: System.Guid;\r\n\r\n selectConversation(conversationId: System.Guid) {\r\n this.selectedId = conversationId;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n @Pipe('CustomerService', 'addressType')\r\n class AddressTypeFilter {\r\n public transform(addressType: string | Umbrella.Modules.AddressType) {\r\n switch (addressType) {\r\n case 'Home':\r\n case Umbrella.Modules.AddressType.Home:\r\n return 'Woonadres';\r\n case 'Postal':\r\n case Umbrella.Modules.AddressType.Postal:\r\n return 'Postadres';\r\n default:\r\n return 'Adres';\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Customers {\r\n import Detailed = Umbrella.Modules.Customers.CustomerModel.Detailed;\r\n\r\n export interface ICustomerResource {\r\n getById(params: {\r\n id: System.Guid;\r\n }): ng.resource.IResource;\r\n getByIds(params: {\r\n ids: System.Guid[]\r\n }): ng.resource.IResource;\r\n getByPersonId(params: {\r\n id: System.Guid;\r\n }): ng.resource.IResource;\r\n getAllByMail(params: { mail: string }): ng.resource.IResource;\r\n getDetailed(params: {\r\n id: System.Guid;\r\n }): ng.resource.IResource;\r\n add(model: CreateCustomerModel): ng.resource.IResource;\r\n }\r\n\r\n angular.module('CustomerService').factory('CustomerResource', [\r\n '$resource',\r\n ($resource: ng.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/customer/:action/:id/:route/:mail/',\r\n {},\r\n {\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n getByIds: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'set' }\r\n },\r\n getByPersonId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'byPerson', id: '@id' }\r\n },\r\n getByEmail: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'byEmail', email: '@email', id: '' }\r\n },\r\n getDetailed: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id', route: 'detailed' }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: {}\r\n },\r\n add: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: 'add' }\r\n },\r\n getAll: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'all' }\r\n },\r\n getAllByMail: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'byMail', mail: '@mail' }\r\n },\r\n provisionAccounts: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: 'provisionAccounts' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import FaqModel = Umbrella.Modules.Knowledgebase.FaqModel;\r\n import FaqType = Umbrella.Modules.Knowledgebase.FaqType;\r\n\r\n @Pipe('CustomerService', 'faqHasFollowupQuestion')\r\n export class FaqHasFollowupQuestionFilter {\r\n public transform(faq: FaqModel) {\r\n return (\r\n faq.faqType.value.toString() ===\r\n FaqType[FaqType.WithFollowUpQuestions] ||\r\n faq.faqType.value === FaqType.WithFollowUpQuestions\r\n );\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n // Filter should be used only to retrieve a random roleId linked to a person\r\n @Pipe('CustomerService', 'firstRoleId')\r\n class FirstRoleIdFilter {\r\n public transform(person: PersonModel) {\r\n if (!person || !person.roles) return null;\r\n\r\n // For safety do not change ordering of return values below\r\n return (\r\n person.roles['customer'] ||\r\n person.roles['vendor'] ||\r\n person.roles['prospect'] ||\r\n person.roles['occupant'] ||\r\n null\r\n );\r\n }\r\n }\r\n}\r\n","import EvaluationModel = Umbrella.Indicators.IndicatorEvaluationModel;\r\nimport GetActiveIndicatorsModel = Umbrella.Indicators.GetActiveIndicatorsModel;\r\nimport ResourceService = angular.resource.IResourceService;\r\nimport Resource = angular.resource.IResource;\r\nimport ResourceClass = angular.resource.IResourceClass;\r\nimport Dictionary = Umbrella.Indicators.Dictionary;\r\n\r\nnamespace Umbrella.CustomerService {\r\n export interface IIndicatorEvaluationResource\r\n extends Resource,\r\n EvaluationModel {}\r\n export interface IIndicatorEvaluationResourceClass\r\n extends ResourceClass {\r\n active(\r\n { key: string },\r\n models: any[]\r\n ): ng.resource.IResource;\r\n indicatorsForMultipleKeys(\r\n models: GetActiveIndicatorsModel[]\r\n ): ng.resource.IResource>;\r\n }\r\n angular.module('Umbrella').service('IndicatorEvaluationResource', [\r\n '$resource',\r\n ($resource: ResourceService) =>\r\n $resource(\r\n '/api/v1/indicator/evaluation/:key',\r\n { key: '@key' },\r\n {\r\n active: {\r\n method: 'PUT',\r\n isArray: true,\r\n params: { key: '@key' }\r\n },\r\n indicatorsForMultipleKeys: {\r\n url: '/api/v1/indicator/evaluation',\r\n method: 'PUT',\r\n isArray: false\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import IndicatorModel = Umbrella.Indicators.IndicatorModel;\r\n import IndicatorSuppressionModel = Umbrella.Indicators.IndicatorSuppressionModel;\r\n import IResource = angular.resource.IResource;\r\n import IResourceClass = angular.resource.IResourceClass;\r\n import IResourceService = angular.resource.IResourceService;\r\n import Guid = System.Guid;\r\n\r\n export interface IIndicatorResource\r\n extends IResource,\r\n IndicatorModel {}\r\n export interface IIndicatorResourceClass\r\n extends IResourceClass {\r\n getAll(params: {\r\n query: string;\r\n page: number;\r\n pageSize: number;\r\n }): IndicatorModel[];\r\n getById(params: { id: Guid }): IIndicatorResource;\r\n removeIndicator(params: { id: Guid }): IIndicatorResource;\r\n update(model: IndicatorModel): IIndicatorResource;\r\n mute(model: IndicatorSuppressionModel): IIndicatorResource;\r\n }\r\n\r\n angular.module('CustomerService').service('IndicatorResource', [\r\n '$resource',\r\n ($resource: IResourceService) =>\r\n $resource(\r\n '/api/v1/indicator/:id/:action',\r\n {},\r\n {\r\n getAll: { method: 'GET', isArray: true },\r\n getById: { method: 'GET', params: { id: '@id' } },\r\n removeIndicator: {\r\n method: 'DELETE',\r\n params: { id: '@id' }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { action: '' }\r\n },\r\n mute: { method: 'POST', url: '/api/v1/indicator/mute' }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import FaqResourceClass = Modules.Knowledgebase.Faq.FaqResourceClass;\r\n import IndicatorEvaluationModel = Indicators.IndicatorEvaluationModel;\r\n import IndicatorSuppressionModel = Indicators.IndicatorSuppressionModel;\r\n import FaqModel = Modules.Knowledgebase.FaqModel;\r\n import IPromise = angular.IPromise;\r\n\r\n export interface IIndicatorEvaluationModelDetailed\r\n extends IndicatorEvaluationModel {\r\n faq: FaqModel;\r\n }\r\n\r\n @Service('Umbrella', 'IndicatorService')\r\n @Inject('IndicatorEvaluationResource', 'IndicatorResource')\r\n export class IndicatorService {\r\n constructor(\r\n private indicatorEvaluationResource: IIndicatorEvaluationResourceClass,\r\n private indicatorResource: IIndicatorResourceClass\r\n ) {}\r\n\r\n getActive(\r\n key: string,\r\n models: any[]\r\n ): IPromise {\r\n return this.indicatorEvaluationResource.active({ key }, models)\r\n .$promise;\r\n }\r\n\r\n setMuted(indicatorId: System.Guid, key: string, onmute: (id) => void) {\r\n this.indicatorResource\r\n .mute({ indicatorId, key } as IndicatorSuppressionModel)\r\n .$promise.then(() => onmute(indicatorId));\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import IResource = ng.resource.IResource;\r\n import OutgoingSmsModel = Umbrella.Sms.OutgoingSmsModel;\r\n\r\n export interface SendSmsParams {\r\n phone: string;\r\n content: string;\r\n }\r\n\r\n export interface OutgoingSmsResource {\r\n send(model: SendSmsParams): IResource;\r\n }\r\n\r\n angular.module('Umbrella').service('OutgoingSmsResource', [\r\n '$resource',\r\n ($resource: ng.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/sms/outgoing/:action/:id',\r\n {},\r\n {\r\n send: {\r\n method: 'POST',\r\n isArray: false,\r\n transformRequest: (data: string, headersGetter) => {\r\n return JSON.stringify(data);\r\n }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import IResource = ng.resource.IResource;\r\n import PhoneCallRegistrationModel = Umbrella.TelephonyControl.Statistics.PhoneCallRegistrationModel;\r\n\r\n export interface PhoneCallsParams extends PagedRequestParams {\r\n userId: System.Guid;\r\n from: string;\r\n until: string;\r\n }\r\n\r\n export interface IPhoneCallResource extends IResource {}\r\n\r\n export interface IPhoneCallResourceClass extends angular.resource.IResourceClass {\r\n phoneCalls(params: PhoneCallsParams): IResource>;\r\n }\r\n\r\n angular.module('CustomerService').service('PhoneCallResource', [\r\n '$resource',\r\n ($resource: ng.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/telephony/phonestatistics/phonecalls/:userId?from=:from&until=:until',\r\n {},\r\n {\r\n phoneCalls: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n userId: '@userId',\r\n from: '@from',\r\n until: '@until'\r\n }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n @Pipe('Umbrella', 'phonenr')\r\n class PhoneNrFilter {\r\n public transform(tel: string) {\r\n if (!tel) return 'Niet bekend';\r\n\r\n const displayInInternationalFormat = false;\r\n\r\n let phoneNr = tel\r\n .toString()\r\n .trim()\r\n .replace(/^\\+/, '');\r\n phoneNr = phoneNr.replace(/\\s/g, ''); // remove spaces\r\n\r\n if (phoneNr.match(/[^0-9]/)) return tel;\r\n\r\n let countryCode, netNr, rest: string;\r\n let hasCountryCode = true;\r\n\r\n switch (phoneNr.length) {\r\n case 10:\r\n hasCountryCode = false;\r\n netNr = this.getNetNumber(tel);\r\n if (!netNr) return tel;\r\n\r\n rest = phoneNr.slice(netNr.length);\r\n break;\r\n\r\n default:\r\n return tel;\r\n }\r\n\r\n if (!hasCountryCode) countryCode = '+31 ';\r\n\r\n let re = (netNr + '-' + rest).trim();\r\n if (displayInInternationalFormat || countryCode !== '+31 ') {\r\n rest = rest.slice(0, 3) + '-' + rest.slice(3);\r\n re = (\r\n countryCode +\r\n netNr.replace('0', '(0)') +\r\n ' ' +\r\n rest\r\n ).trim();\r\n }\r\n\r\n return re;\r\n }\r\n\r\n private getNetNumber(tel: string): string {\r\n for (const netNr of this.netNumbers) {\r\n if (tel.indexOf(netNr) === 0) return netNr;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private netNumbers = [\r\n '0111',\r\n '0113',\r\n '0114',\r\n '0115',\r\n '0117',\r\n '0118',\r\n '0161',\r\n '0162',\r\n '0164',\r\n '0165',\r\n '0166',\r\n '0167',\r\n '0168',\r\n '0172',\r\n '0174',\r\n '0180',\r\n '0181',\r\n '0182',\r\n '0183',\r\n '0184',\r\n '0186',\r\n '0187',\r\n '0222',\r\n '0223',\r\n '0224',\r\n '0226',\r\n '0227',\r\n '0228',\r\n '0229',\r\n '0251',\r\n '0252',\r\n '0255',\r\n '0294',\r\n '0297',\r\n '0299',\r\n '0313',\r\n '0314',\r\n '0315',\r\n '0316',\r\n '0317',\r\n '0318',\r\n '0320',\r\n '0321',\r\n '0341',\r\n '0342',\r\n '0343',\r\n '0344',\r\n '0345',\r\n '0346',\r\n '0347',\r\n '0348',\r\n '0411',\r\n '0412',\r\n '0413',\r\n '0416',\r\n '0418',\r\n '0475',\r\n '0478',\r\n '0481',\r\n '0485',\r\n '0486',\r\n '0487',\r\n '0488',\r\n '0492',\r\n '0493',\r\n '0495',\r\n '0497',\r\n '0499',\r\n '0511',\r\n '0512',\r\n '0513',\r\n '0514',\r\n '0515',\r\n '0516',\r\n '0517',\r\n '0518',\r\n '0519',\r\n '0521',\r\n '0522',\r\n '0523',\r\n '0524',\r\n '0525',\r\n '0527',\r\n '0528',\r\n '0529',\r\n '0541',\r\n '0543',\r\n '0544',\r\n '0545',\r\n '0546',\r\n '0547',\r\n '0548',\r\n '0561',\r\n '0562',\r\n '0566',\r\n '0570',\r\n '0571',\r\n '0572',\r\n '0573',\r\n '0575',\r\n '0577',\r\n '0578',\r\n '0591',\r\n '0592',\r\n '0593',\r\n '0594',\r\n '0595',\r\n '0596',\r\n '0597',\r\n '0598',\r\n '0599',\r\n '0800',\r\n '0900',\r\n '0906',\r\n '0909',\r\n '0970',\r\n '010',\r\n '013',\r\n '014',\r\n '014',\r\n '015',\r\n '020',\r\n '023',\r\n '024',\r\n '026',\r\n '030',\r\n '033',\r\n '035',\r\n '036',\r\n '038',\r\n '040',\r\n '043',\r\n '045',\r\n '046',\r\n '050',\r\n '053',\r\n '055',\r\n '058',\r\n '070',\r\n '071',\r\n '072',\r\n '073',\r\n '074',\r\n '075',\r\n '076',\r\n '077',\r\n '078',\r\n '079',\r\n '082',\r\n '084',\r\n '085',\r\n '087',\r\n '088',\r\n '091',\r\n '06'\r\n ];\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import IResource = ng.resource.IResource;\r\n import PhoneStatusSummaryModel = Umbrella.TelephonyControl.Statistics.PhoneStatusSummaryModel;\r\n\r\n export interface PhoneStatusSummaryParams {\r\n userId: System.Guid;\r\n from: string;\r\n until: string;\r\n }\r\n\r\n export interface IPhoneStatusSummaryResource extends IResource {}\r\n\r\n export interface IPhoneStatusSummaryResourceClass\r\n extends angular.resource.IResourceClass {\r\n phoneStatusSummary(params: PhoneStatusSummaryParams): IResource;\r\n }\r\n\r\n angular.module('CustomerService').service('PhoneStatusSummaryResource', [\r\n '$resource',\r\n ($resource: ng.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/telephony/phonestatistics/phonestatussummary/:userId?from=:from&until=:until',\r\n {},\r\n {\r\n phoneStatusSummary: {\r\n method: 'GET',\r\n isArray: true,\r\n params: {\r\n userId: '@userId',\r\n from: '@from',\r\n until: '@until'\r\n }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n @Pipe('Umbrella', 'phonetype')\r\n class PhoneTypeFilter {\r\n public transform(stringType: string | number) {\r\n switch (stringType) {\r\n case 'Home':\r\n case 0:\r\n return 'Thuis';\r\n case 'Mobile':\r\n case 1:\r\n return 'Mobiel';\r\n case 'Work':\r\n case 2:\r\n return 'Werk';\r\n case 'WhenBusy':\r\n case 4:\r\n return 'Bij geen gehoor'; \r\n default:\r\n return '';\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Customers {\r\n export interface IProspectResource\r\n extends angular.resource.IResource {}\r\n\r\n export interface ProspectResourceClass\r\n extends angular.resource.IResourceClass {\r\n provisionAccounts(): ng.resource.IResource;\r\n deleteProspect(param: IdRequestParams): ng.resource.IResource;\r\n }\r\n\r\n angular.module('CustomerService').service('ProspectResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) => {\r\n return $resource(\r\n '/housingallocation/api/v1/prospect/:action/:id',\r\n {},\r\n {\r\n provisionAccounts: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: 'provisionAccounts' }\r\n },\r\n deleteProspect: {\r\n method: 'DELETE',\r\n isArray: false,\r\n params: { action: 'delete', id: '@id' }\r\n }\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella {\r\n import Gender = Umbrella.Modules.Gender;\r\n\r\n @Pipe('Dashboard', 'salutation')\r\n class SalutationFilter {\r\n public transform(gender: string | number | Gender) {\r\n switch (gender) {\r\n case 'Male':\r\n case 0:\r\n case Gender.Male:\r\n return 'dhr.';\r\n case 'Female':\r\n case 1:\r\n case Gender.Female:\r\n return 'mevr.';\r\n default:\r\n return '';\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n angular.module('CustomerService').directive('scrollCommandsReceiver', [\r\n () => {\r\n function scrollToElement(container: ng.IAugmentedJQuery, selector: string, speed = 1000) {\r\n if (!container || !selector) return;\r\n\r\n const element = container.find(selector);\r\n\r\n if (!element || element.length < 1) return;\r\n\r\n const elPosTop = element.position().top;\r\n const containerScrollTop = container.scrollTop();\r\n const scrollTop = containerScrollTop - Math.abs(elPosTop);\r\n\r\n container.stop().animate({ scrollTop }, speed);\r\n }\r\n\r\n function scrollToBottom(container: ng.IAugmentedJQuery, speed = 1000) {\r\n if (!container || container.length < 1) return;\r\n\r\n const scrollTop = container[0].scrollHeight;\r\n\r\n container.stop().animate({ scrollTop }, speed);\r\n }\r\n\r\n return {\r\n restrict: 'A',\r\n link: (scope: ng.IScope, el: ng.IAugmentedJQuery, attr: ng.IAttributes) => {\r\n scope.$on('ScrollToCommand', (event, args) => {\r\n if (!event.defaultPrevented) {\r\n event.defaultPrevented = true;\r\n scrollToElement(el, args.selector);\r\n }\r\n });\r\n\r\n scope.$on('ScrollToBottomCommand', (event, args) => {\r\n if (!event.defaultPrevented) {\r\n event.defaultPrevented = true;\r\n scrollToBottom(el);\r\n }\r\n });\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import IResource = angular.resource.IResource;\r\n import SelfServiceScenarioModel = Modules.SelfService.SelfServiceScenarioModel;\r\n import ImpersonationResponseModel = Umbrella.Modules.SelfService.ImpersonationResponseModel;\r\n\r\n export interface NameRequestParams {\r\n id: string;\r\n }\r\n\r\n export interface SelfServiceScenarioResourceClass\r\n extends SelfServiceScenarioModel,\r\n IResource {}\r\n\r\n export interface SelfServiceScenarioResource\r\n extends angular.resource.IResourceClass {\r\n getAllByTagId(params: IdRequestParams): ng.resource.IResource;\r\n getById(params: IdRequestParams): ng.resource.IResource;\r\n getByIds(params: IdsRequestParams): ng.resource.IResource;\r\n getAll(): ng.resource.IResource;\r\n getByName(params: NameRequestParams): ng.resource.IResource;\r\n impersonate(params: {\r\n id: System.Guid;\r\n personId: System.Guid;\r\n channelType: string;\r\n caseId?: System.Guid;\r\n }): ng.resource.IResource;\r\n getActiveByPersonId(params: {\r\n personId: System.Guid;\r\n }): ng.resource.IResource;\r\n }\r\n\r\n angular.module('SelfService').service('SelfServiceScenarioResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) => {\r\n const prefix = '/api/v1/selfservice/scenario/';\r\n\r\n return $resource(\r\n prefix,\r\n {},\r\n {\r\n getById: {\r\n url: prefix + ':id',\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n getByIds: {\r\n url: prefix + 'getbyids/:id',\r\n method: 'GET',\r\n isArray: true,\r\n params: { id: '@id' }\r\n },\r\n getByName: {\r\n url: prefix + ':id',\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n getAllByTagId: {\r\n url: prefix + 'forThesaurusTag/:id',\r\n method: 'GET',\r\n isArray: true,\r\n params: { id: '@id' }\r\n },\r\n getAll: {\r\n method: 'GET',\r\n isArray: true,\r\n params: {}\r\n },\r\n getActiveByPersonId: {\r\n url: prefix + 'active/person/:personId',\r\n method: 'GET',\r\n isArray: true,\r\n params: {}\r\n },\r\n impersonate: {\r\n url: prefix + ':id/impersonate/:personId/:channelType',\r\n method: 'POST',\r\n isArray: false,\r\n params: {\r\n id: '@id',\r\n personId: '@personId',\r\n channelType: '@channelType',\r\n caseId: '@caseId'\r\n }\r\n }\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n angular.module('CustomerService').run([\r\n '$injector',\r\n ($injector: ng.auto.IInjectorService) => {\r\n $injector.get('CustomerCardCustomerInfoService');\r\n $injector.get('OfflineService');\r\n\r\n Modules.onSignalRInitialized(() => {\r\n // Loading services as background listeners with injector because otherwise SignalR hubs are unavailable\r\n $injector.get('PersonJitService');\r\n $injector.get('ActivityJitService');\r\n $injector.get('ContractJitService');\r\n $injector.get('BillJitService');\r\n $injector.get('UnitJitService');\r\n $injector.get('UnitActivityJitService');\r\n $injector.get('UnitContractJitService');\r\n $injector.get('UnitValuationJitService');\r\n $injector.get('ChatService');\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import VendorModel = Umbrella.Modules.Vendor.VendorModel;\r\n import VendorEditModel = Umbrella.Modules.Vendor.VendorEditModel;\r\n\r\n export interface SearchParams extends PagedRequestParams {\r\n id: string;\r\n onlyWithWorkAreas?: boolean;\r\n expertiseIds: System.Guid[];\r\n }\r\n\r\n export interface VendorResource\r\n extends angular.resource.IResource {}\r\n export interface VendorResourceClass\r\n extends angular.resource.IResourceClass {\r\n getById(params: IdRequestParams): ng.resource.IResource;\r\n getForEditingById(\r\n params: IdRequestParams\r\n ): ng.resource.IResource;\r\n getByIds(\r\n params: IdsRequestParams\r\n ): ng.resource.IResource;\r\n search(\r\n params: SearchParams\r\n ): ng.resource.IResource>;\r\n update(params: VendorModel): ng.resource.IResource;\r\n createNewVendor(\r\n params: VendorModel\r\n ): ng.resource.IResource;\r\n }\r\n\r\n angular.module('CustomerService').factory('VendorResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/vendor/:action/:id',\r\n {},\r\n {\r\n getAll: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { page: 0, pageSize: 10 }\r\n },\r\n getAllWithWorkAreas: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'all',\r\n id: 'withworkareas',\r\n page: 0,\r\n pageSize: 10\r\n }\r\n },\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n getForEditingById: {\r\n method: 'Get',\r\n isArray: false,\r\n params: { action: 'edit', id: '@id' }\r\n },\r\n getByIds: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'set' }\r\n },\r\n getRelatedAcquaintance: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'relatedacquaintance', id: '' }\r\n },\r\n createNewVendor: {\r\n method: 'POST',\r\n isArray: false,\r\n params: {}\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: {}\r\n },\r\n search: {\r\n method: 'GET',\r\n params: {\r\n action: 'search',\r\n id: '@id',\r\n page: 0,\r\n pageSize: 10,\r\n onlyWithWorkAreas: false\r\n },\r\n isArray: false\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import WorkAreaModel = Umbrella.Modules.SelfService.Models.WorkAreaModel;\r\n\r\n export interface IWorkAreaResource\r\n extends angular.resource.IResource {}\r\n\r\n export interface IWorkAreaResourceClass\r\n extends angular.resource.IResourceClass {\r\n getAllForResidentialZone(params: any): WorkAreaModel.ContactPerson[];\r\n getAllForResidentialZones(\r\n params: any\r\n ): angular.resource.IResource<{\r\n [id: string]: WorkAreaModel.ContactPerson[];\r\n }>;\r\n }\r\n\r\n const resource = $resource => {\r\n return $resource(\r\n '/api/v1/workarea/:action/:id',\r\n {},\r\n {\r\n getAllForResidentialZone: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'allforresidentialzone', id: '' }\r\n },\r\n getAllForResidentialZones: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'allforresidentialzones', ids: '' }\r\n }\r\n }\r\n );\r\n };\r\n\r\n angular\r\n .module('SelfService')\r\n .service('WorkAreaResource', ['$resource', resource]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n '$urlRouterProvider',\r\n (\r\n $stateProvider: angular.ui.IStateProvider,\r\n $urlRouterProvider: angular.ui.IUrlRouterProvider\r\n ) => {\r\n $stateProvider.state('customerservice', {\r\n url: '',\r\n parent: 'root',\r\n redirectTo: 'dashboard.tasks.overview',\r\n views: {\r\n 'new@': {\r\n template:\r\n '',\r\n controller: Umbrella.createComponentRouteController<\r\n TopBarState,\r\n CustomerServiceComponentState\r\n >('TopBarStore', s => ({\r\n impersonationInfo: s && s.impersonationInfo\r\n }))\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import ChannelType = Modules.ChannelType;\r\n\r\n @Pipe('CustomerService', 'activityChannel')\r\n class ActivityChannelFilter {\r\n public transform(channelType: string | ChannelType): string {\r\n switch (channelType) {\r\n case ChannelType.Phone:\r\n case ChannelType[ChannelType.Phone]:\r\n return 'Telefoongesprek: ';\r\n case ChannelType.Post:\r\n case ChannelType[ChannelType.Post]:\r\n return 'Post: ';\r\n case ChannelType.Desk:\r\n case ChannelType[ChannelType.Desk]:\r\n return 'Baliebezoek: ';\r\n case ChannelType.Email:\r\n case ChannelType[ChannelType.Email]:\r\n return 'E-mail: ';\r\n case ChannelType.Facebook:\r\n case ChannelType[ChannelType.Facebook]:\r\n return 'Facebook: ';\r\n case ChannelType.Social:\r\n case ChannelType[ChannelType.Social]:\r\n return 'Social media: ';\r\n case ChannelType.Tweet:\r\n case ChannelType[ChannelType.Tweet]:\r\n return 'Tweet: ';\r\n case ChannelType.Visit:\r\n case ChannelType[ChannelType.Visit]:\r\n return 'Huisbezoek: ';\r\n case ChannelType.Web:\r\n case ChannelType[ChannelType.Web]:\r\n return 'Klantportaal: ';\r\n case ChannelType.Chat:\r\n case ChannelType[ChannelType.Chat]:\r\n return 'Chat: ';\r\n case ChannelType.Survey:\r\n case ChannelType[ChannelType.Survey]:\r\n return 'Enquête: ';\r\n case ChannelType.Backoffice:\r\n case ChannelType[ChannelType.Backoffice]:\r\n return 'Backoffice: ';\r\n default:\r\n return '';\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import ActivityModel = Modules.ActivityModel;\r\n\r\n @Pipe('CustomerService', 'activityChannelIcon')\r\n class ActivityChannelIconFilter {\r\n public transform(activity: ActivityModel): string {\r\n if (!activity) return '';\r\n\r\n if (activity.channel && activity.channel !== 'Unknown')\r\n return activity.channel.toString().toLowerCase();\r\n\r\n return activity.type;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import ActivityModel = Modules.ActivityModel;\r\n\r\n @Pipe('CustomerService', 'activityColor')\r\n class ActivityColorFilter {\r\n public transform(activity: ActivityModel): string {\r\n const activityName =\r\n activity &&\r\n activity.type &&\r\n activity.type.replace('Activity', '').toLowerCase();\r\n\r\n if (!activityName) return '';\r\n if (\r\n activityName.substr(0, 4) === 'taak' ||\r\n activityName.substr(0, 4) === 'task'\r\n )\r\n return 'green';\r\n\r\n switch (activityName) {\r\n case 'contact':\r\n case 'outgoingmail':\r\n case 'phonecall':\r\n return 'green';\r\n case 'correspondence':\r\n case 'document':\r\n case 'initialinspectionreportsubmitted':\r\n case 'finalinspectionreportsubmitted':\r\n case 'stateofcommencementreportsubmitted':\r\n return 'orange';\r\n default:\r\n return 'purple';\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import ActivityModel = Modules.ActivityModel;\r\n\r\n @Pipe('CustomerService', 'activityIcon')\r\n class ActivityIconFilter {\r\n public transform(activity: ActivityModel): string {\r\n return activity.type;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n @Pipe('CustomerService', 'activitySummary')\r\n class ActivitySummaryFilter {\r\n public transform(activity): string {\r\n //repair request\r\n if (activity.repairRequest) {\r\n let title = '';\r\n if (\r\n activity.repairRequest.items &&\r\n activity.repairRequest.items.length === 1\r\n )\r\n title += activity.repairRequest.items[0].defectName;\r\n else if (\r\n activity.repairRequest &&\r\n activity.repairRequest.items &&\r\n activity.repairRequest.items.length > 1\r\n )\r\n title += 'Meerdere gebreken';\r\n title += ' - ' + activity.repairRequest.unit.name;\r\n return title;\r\n }\r\n\r\n //task or contact activity\r\n if (activity.description) {\r\n let description = activity.description.substr(0, 90);\r\n if (activity.description.length >= 90) description += '..';\r\n return description;\r\n }\r\n\r\n //document\r\n if (activity.correspondence)\r\n return `Bestandnaam: ${activity.correspondence.filename}`;\r\n\r\n return '';\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import ActivityModel = Modules.ActivityModel;\r\n import TaskTransferredActivityModel = Modules.Tasks.TaskTransferredActivityModel;\r\n import TaskCreatedActivityModel = Modules.Tasks.TaskCreatedActivityModel;\r\n import TaskActivityModel = Modules.Tasks.TaskActivityModel;\r\n import TaskRejectedActivityModel = Modules.Tasks.TaskRejectedActivityModel;\r\n import CustomSelfServiceReportCreatedActivityModel = Umbrella.Modules.SelfService.Custom.CustomSelfServiceReportCreatedActivityModel;\r\n\r\n @Pipe('CustomerService', 'activityTitle')\r\n @Inject('$filter')\r\n class ActivityTitleFilter {\r\n constructor(private $filter) { }\r\n\r\n public transform(activity): string {\r\n if (activity.task) return this.getActivityName(activity);\r\n\r\n if (activity.case && activity.case.faq) return activity.case.faq.question;\r\n\r\n return this.getActivityName(activity);\r\n }\r\n\r\n private getActivityName(activity: ActivityModel): string {\r\n const activityName = activity.type.toLowerCase();\r\n switch (activityName) {\r\n case 'billpaymentactivity':\r\n return 'Betaaltransactie';\r\n case 'changepaymentmethodreportcreatedactivity':\r\n return 'Betalingswijze aangepast';\r\n case 'complaintsubmittedactivity':\r\n return 'Klacht gemeld';\r\n case 'complimentsubmittedactivity':\r\n return 'Compliment gemeld';\r\n case 'contactactivity':\r\n return 'Contactmoment vastgelegd';\r\n case 'correspondenceactivity':\r\n case 'documentactivity':\r\n return 'Document vastgelegd';\r\n case 'disturbancesubmittedactivity':\r\n case 'disturbancereportsubmittedactivity':\r\n return 'Overlast gemeld';\r\n case 'houseadjustmentactivity':\r\n case 'houseadjustmentreportsubmittedactivity':\r\n case 'houseadjustmentreportcreatedactivity':\r\n return 'Woningaanpassing';\r\n case 'initialinspectionreportsubmittedactivity':\r\n return 'Voorinspectie uitgevoerd';\r\n case 'initialinspectionreportworkorderscreatedactivity':\r\n return 'Werkbonnen aangemaakt';\r\n case 'finalinspectionreportsubmittedactivity':\r\n return 'Eindinspectie uitgevoerd';\r\n case 'terminatedcontractpreinspectionappointmentdeletedactivity':\r\n return 'Voorinspectie afspraak verwijderd';\r\n case 'terminatedcontractpostinspectionappointmentdeletedactivity':\r\n return 'Eindinspectie afspraak verwijderd';\r\n case 'outgoingmailactivity':\r\n case 'outgoingsmsactivity':\r\n return 'Bericht verzonden';\r\n case 'phonecallactivity':\r\n return 'Telefoongesprek gevoerd';\r\n case 'paymentarrangementreportcreatedactivity':\r\n return 'Betalingsregeling getroffen';\r\n case 'stateofcommencementreportsubmittedactivity':\r\n return 'Staat van aanvang opgesteld';\r\n case 'joinservicefundreportsubmittedactivity':\r\n return 'Service abonnement(en) afgesloten';\r\n case 'repairrequestcanceledactivity':\r\n return 'Reparatieverzoek geannuleerd';\r\n case 'repairrequestcompletedactivity':\r\n return 'Reparatieverzoek afgerond';\r\n case 'repairrequestmodifiedactivity':\r\n return 'Reparatieverzoek gewijzigd';\r\n case 'repairrequestreopenedactivity':\r\n return 'Reparatieverzoek heropend';\r\n case 'repairrequestsubmittedactivity':\r\n return 'Reparatieverzoek ingediend';\r\n case 'repairrequestappointmentdeletedactivity':\r\n return 'Reparatieverzoek afspraak verwijderd';\r\n case 'repairrequestappointmentmodifiedactivity':\r\n return 'Reparatieverzoek afspraak gewijzigd';\r\n case 'personaldatachangedactivity':\r\n return 'Persoonlijke gegevens bijgewerkt';\r\n case 'taakaangemaaktactivity':\r\n case 'taskcreatedactivity':\r\n return `${this.getTaskType(activity)} ${this.getCompleteBy(<\r\n TaskCreatedActivityModel\r\n >activity)}`;\r\n case 'taakgewijzigdactivity':\r\n case 'taskdetailsmodifiedactivity':\r\n return 'Taak gewijzigd';\r\n case 'taakverwijderdactivity':\r\n case 'taskdeletedactivity':\r\n return 'Taak verwijderd';\r\n case 'taakdiscussieactivity':\r\n case 'taskdiscussionactivity':\r\n return 'Opmerking';\r\n case 'taakvoltooidactivity':\r\n case 'taskfinishedactivity':\r\n return 'Taak afgerond';\r\n case 'taakaangenomenactivity':\r\n case 'taskpickedupactivity':\r\n return 'Taak opgepakt';\r\n case 'taakgeweigerdactivity':\r\n case 'taskrejectedactivity':\r\n return `Taak geweigerd en terug gegeven aan ${this.getNextOwner((\r\n activity\r\n ))}`;\r\n case 'taakovergenomenactivity':\r\n case 'tasktakenoveractivity':\r\n return 'Taak overgenomen';\r\n case 'taakovergedragenactivity':\r\n case 'tasktransferredactivity':\r\n return `Taak overgedragen aan ${this.getNewOwner(activity)}`;\r\n case 'taskanonymouslinkedtocontractactivity':\r\n case 'taskanonymouslinkedactivity':\r\n return 'Taak gekoppeld aan relatie';\r\n case 'terminatecontractreportcreatedactivity':\r\n return 'Huur opgezegd';\r\n case 'customselfservicereportcreatedactivity':\r\n return (\r\n this.getReportTitle(activity) ||\r\n 'Selfservice scenario afgerond'\r\n );\r\n case 'customselfservicechangedmessageactivity':\r\n return 'Bericht';\r\n case 'caseflowstartedactivity':\r\n return 'Zaak aangemaakt';\r\n case 'caseflowreviewedactivity':\r\n return 'Zaak beoordeeld';\r\n case 'caseflowsteppickedupactivity':\r\n return 'Zaakstap opgepakt';\r\n case 'caseflowstepfinishedactivity':\r\n return 'Zaakstap afgerond';\r\n case 'caseflowcancelledactivity':\r\n return 'Zaak geannuleerd';\r\n case 'mediaaddedactivity':\r\n return 'Document toegevoegd';\r\n case 'mediadeletedactivity':\r\n return 'Document verwijderd';\r\n case 'activitydeletedactivity':\r\n return 'Gebeurtenis verwijderd';\r\n case 'activityrestoredactivity':\r\n return 'Gebeurtenis hersteld';\r\n case 'casedeletedactivity':\r\n return 'Zaak verwijderd';\r\n case 'caserestoredactivity':\r\n return 'Zaak hersteld';\r\n case 'accountactivatedactivity':\r\n return 'Account geactiveerd';\r\n case 'accountemailmodifiedactivity':\r\n return 'Account e-mailadres aangepast';\r\n case 'accountcreatedactivity':\r\n return 'Account aangemaakt';\r\n case 'accountactivationstartedactivity':\r\n return 'Account activatie gestart';\r\n case 'accountrecoverystartedactivity':\r\n return 'Herstel verificatie token aangevraagd';\r\n case 'accountrestoreactivity':\r\n return 'Wachtwoord herstel aangevraagd';\r\n case 'customerscorecreatedactivity':\r\n return 'Enquête klanttevredenheid afgenomen';\r\n case 'personaltimelineexportingactivity':\r\n return 'Exporteren van de tijdlijn gestart';\r\n case 'personaltimelineexportedactivity':\r\n return 'Exporteren van de tijdlijn voltooid';\r\n default:\r\n return 'Zaak aangemaakt';\r\n }\r\n }\r\n\r\n private getTaskType(activity: TaskActivityModel) {\r\n if (activity && activity.task && activity.task.taskType.name) return activity.task.taskType.name;\r\n else return 'Taak';\r\n }\r\n\r\n private getReportTitle(activity: CustomSelfServiceReportCreatedActivityModel): string | null {\r\n return activity && activity.report && activity.report.title;\r\n }\r\n\r\n private getCompleteBy(activity: TaskCreatedActivityModel): string {\r\n if (\r\n !activity ||\r\n (!activity.completeBy && !(activity.completeByFunctiongroup && activity.completeByFunctiongroup.length))\r\n )\r\n return '';\r\n\r\n let result = '';\r\n if (activity.completeBy) result += activity.completeBy.name;\r\n if (activity.completeBy && activity.completeByFunctiongroup && activity.completeByFunctiongroup.length)\r\n result += ' van ';\r\n if (activity.completeByFunctiongroup && activity.completeByFunctiongroup.length)\r\n result += activity.completeByFunctiongroup[0].title;\r\n\r\n return result.length ? `voor ${result}` : result;\r\n }\r\n\r\n private getNewOwner(activity: TaskTransferredActivityModel): string {\r\n const newOwner = activity.newOwner ? activity.newOwner.name : '';\r\n const newFunctiongroup =\r\n activity.newFunctiongroup && activity.newFunctiongroup.length ? activity.newFunctiongroup[0].title : '';\r\n const assignedTo =\r\n newOwner.length && newFunctiongroup.length\r\n ? `${newOwner} van ${newFunctiongroup}`\r\n : newOwner.length\r\n ? `${newOwner}`\r\n : `${newFunctiongroup}`;\r\n return assignedTo;\r\n }\r\n\r\n private getNextOwner(activity: TaskRejectedActivityModel): string {\r\n const newOwner = activity.nextOwner ? activity.nextOwner.name : '';\r\n const newFunctiongroup =\r\n activity.nextFunctiongroup && activity.nextFunctiongroup.length\r\n ? activity.nextFunctiongroup[0].title\r\n : '';\r\n const assignedTo =\r\n newOwner.length && newFunctiongroup.length\r\n ? `${newOwner} van ${newFunctiongroup}`\r\n : newOwner.length\r\n ? `${newOwner}`\r\n : `${newFunctiongroup}`;\r\n return assignedTo;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import CaseStatus = Modules.CaseStatus;\r\n\r\n @Pipe('CustomerService', 'casestatus')\r\n class CaseStatusFilter {\r\n public transform(val: CaseStatus): string {\r\n if (isNaN(val)) {\r\n val = this.convert(val.toString());\r\n }\r\n switch (val) {\r\n case CaseStatus.Submitted:\r\n return 'ingediend';\r\n case CaseStatus.Closed:\r\n return 'gesloten';\r\n case CaseStatus.InProgress:\r\n return 'in behandeling';\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n private convert(val: string): number {\r\n let convertedValue: CaseStatus = -1;\r\n switch (val.toLowerCase()) {\r\n case 'submitted':\r\n convertedValue = CaseStatus.Submitted;\r\n break;\r\n case 'closed':\r\n convertedValue = CaseStatus.Closed;\r\n break;\r\n case 'inprogress':\r\n convertedValue = CaseStatus.InProgress;\r\n break;\r\n }\r\n\r\n return convertedValue;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n @Pipe('CustomerService', 'dotToNewLine')\r\n class DotToNewLineFilter {\r\n public transform(text: string): string {\r\n return text.split(').').join(').\\r');\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n @Pipe('Umbrella', 'managementPortalPath')\r\n class ManagementPortalPathFilter {\r\n public transform(id: System.Guid) {\r\n if (!id) return '';\r\n\r\n return Config.makeManagementPortalPath(id);\r\n }\r\n }\r\n}","namespace Umbrella.CustomerService {\r\n @Pipe('CustomerService', 'taskActivitySubTitle')\r\n class TaskActivitySubTitleFilter {\r\n public transform(activity): string {\r\n if (!activity) return '';\r\n\r\n const activityName = activity.type\r\n .replace('Activity', '')\r\n .toLowerCase();\r\n switch (activityName) {\r\n case 'taakaangemaakt':\r\n case 'taskcreated':\r\n return activity.description && activity.description.length\r\n ? activity.description\r\n : activity.task.description;\r\n case 'taakdiscussie':\r\n case 'taskdiscussion':\r\n return activity.message;\r\n case 'taakvoltooid':\r\n case 'taskfinished':\r\n return activity.task && activity.task.outcome\r\n ? `Uitkomst: ${activity.task.outcome.title}`\r\n : (activity.completeReason || '');\r\n case 'taakovergenomen':\r\n case 'tasktakenover':\r\n return activity.reason;\r\n case 'taakgeweigerd':\r\n case 'taskrejected':\r\n return activity.rejectReason || '';\r\n case 'taakverwijderd':\r\n case 'taskdeleted':\r\n return activity.deleteReason || '';\r\n default:\r\n return '';\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import CaseHistoryModel = Modules.CaseHistoryModel;\r\n import ConfigResourceClass = Modules.IConfigResourceClass;\r\n\r\n @Component('CustomerService', {\r\n selector: 'activity-timeline',\r\n templateUrl: '/CustomerService/ActivityTimeline/ActivityTimelineComponent/ActivityTimeline.html',\r\n bindings: {\r\n cases: '<',\r\n loading: '<',\r\n disableRegistrationOfFollowUpActivities: '<',\r\n onLoadMore: '&',\r\n disableActivityButton: '<'\r\n }\r\n })\r\n @Inject('$scope', 'ConfigResource')\r\n export class ActivityTimelineComponent {\r\n public cases: PagedItemsModel;\r\n public loading: boolean;\r\n public config: TimelineConfig;\r\n public disableRegistrationOfFollowUpActivities: boolean;\r\n\r\n constructor(private $scope: ng.IScope, private configResource: ConfigResourceClass) {}\r\n\r\n $onInit() {\r\n this.config = window.config && window.config.modules && window.config.modules.timeline;\r\n }\r\n\r\n $onChanges(bindings: { cases: IBindingChange> }) {\r\n if (bindings.cases && bindings.cases.currentValue && bindings.cases.previousValue) {\r\n this.trackCaseChanges(bindings.cases);\r\n }\r\n }\r\n\r\n public onLoadMore: () => void;\r\n\r\n public loadMore() {\r\n this.onLoadMore();\r\n }\r\n\r\n private trackCaseChanges(cases: IBindingChange>): void {\r\n if (this.isFirstCaseChanged(cases.currentValue, cases.previousValue)) {\r\n const firstCaseId = cases.currentValue.items[0].case.id;\r\n const selector = '.activity-item.' + firstCaseId;\r\n\r\n this.$scope.$emit('ScrollToCommand', { selector });\r\n }\r\n }\r\n\r\n private isFirstCaseChanged(\r\n currentCases: PagedItemsModel,\r\n prevCases: PagedItemsModel\r\n ): boolean {\r\n if (!currentCases || !prevCases) return false;\r\n\r\n const currentHasItems = currentCases.items && currentCases.items.length > 0;\r\n const prevHasItems = prevCases.items && prevCases.items.length > 0;\r\n\r\n if (!currentHasItems || !prevHasItems) return false;\r\n\r\n const firstCurrentCase = currentCases.items[0].case;\r\n const firstPrevCase = prevCases.items[0].case;\r\n\r\n return firstCurrentCase.id !== firstPrevCase.id;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import ActivityModel = Modules.ActivityModel;\r\n\r\n @Pipe('CustomerService', 'activityLogUrl')\r\n class ActivityLogUrlFilter {\r\n public transform(activity: ActivityModel) {\r\n if (!activity || !activity.startTime) return '';\r\n\r\n return this.getLogUrlByTimespan(activity.startTime);\r\n }\r\n\r\n private getLogUrlByTimespan(startTime: Date): string {\r\n const timespanInMinutes = 1;\r\n let date = new Date(startTime);\r\n return (\r\n Config.getManagementLogRelativeUrl() +\r\n '&since=' +\r\n this.transformDateToUrlString(date) +\r\n '&until=' +\r\n this.transformDateToUrlString(date.addMinutes(timespanInMinutes))\r\n );\r\n }\r\n\r\n private transformDateToUrlString(date: Date): string {\r\n return (\r\n date.getFullYear() +\r\n '-' +\r\n (date.getUTCMonth() + 1) +\r\n '-' +\r\n date.getDate() +\r\n '%20' +\r\n date.getHours() +\r\n ':' +\r\n (date.getMinutes() < 10 ? '0' : '') +\r\n date.getMinutes()\r\n );\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import ActivityModel = Modules.ActivityModel;\r\n import IActivityResourceClass = Modules.IActivityResourceClass;\r\n import RoleModel = Umbrella.Modules.RoleModel;\r\n import ActivityCaseModel = Umbrella.Modules.Activities.ActivityCaseModel;\r\n import TaskTypeCategory = Umbrella.Modules.Tasks.TaskTypeCategory;\r\n import ActivityRegistrationService = Umbrella.CustomerService.CustomerCard.Activities.Registration.ActivityRegistrationService;\r\n import FaqResourceClass = Umbrella.Modules.Knowledgebase.Faq.FaqResourceClass;\r\n import ContactActivityResource = Umbrella.Modules.Contacts.IContactActivityResource;\r\n import CustomerCardActivityInfoService = Umbrella.CustomerService.CustomerCard.Activities.CustomerCardActivityInfoService;\r\n import TaskModel = Umbrella.Modules.Tasks.TaskModel;\r\n import StatusFilter = Umbrella.Modules.StatusFilter;\r\n\r\n interface FaqExpirationInfo {\r\n expiresOn: Date;\r\n isExpired: boolean;\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'activity-timeline-item',\r\n templateUrl: '/CustomerService/ActivityTimeline/ActivityTimelineItemComponent/ActivityTimelineItem.html',\r\n bindings: {\r\n case: '<',\r\n activity: '<',\r\n scenarioName: '@',\r\n nrOfFollowUpActivities: '@',\r\n preventFollowUpActivityLoading: '<',\r\n disableRegistrationOfFollowUpActivities: '<',\r\n lastModifiedOn: '<',\r\n lastModifiedBy: '<',\r\n disableActivityButton: '<'\r\n }\r\n })\r\n @Inject(\r\n '$mdDialog',\r\n '$timeout',\r\n 'CreateDialog',\r\n 'ActivityResource',\r\n '$stateParams',\r\n '$state',\r\n 'ActivityRegistrationService',\r\n 'FaqResource',\r\n 'ContactActivityResource',\r\n 'CustomerCardActivityInfoService'\r\n )\r\n class ActivityTimelineItemComponent {\r\n public case: ActivityCaseModel;\r\n public task: TaskModel;\r\n public activity: ActivityModel;\r\n public media = {};\r\n public mediaIds: Guid[] = [];\r\n public scenarioName: string;\r\n public nrOfFollowUpActivities: string;\r\n public preventFollowUpActivityLoading: boolean;\r\n public disableRegistrationOfFollowUpActivities: boolean;\r\n public lastModifiedOn: Date;\r\n public lastModifiedBy: RoleModel;\r\n public activities: PagedItemsModel;\r\n public loading: boolean;\r\n public showDetails: boolean;\r\n public loadedPersonId: System.Guid;\r\n public templatesFinishedLoading = 0;\r\n public templatesDoneLoading = false;\r\n public timelineConfig: TimelineConfig;\r\n public faqExpirationDatesRegistrar: {\r\n [faqId: string]: FaqExpirationInfo;\r\n } = {};\r\n public applicationLogUrl: string;\r\n private statusFilter?: StatusFilter;\r\n private statusFilterSubscription: Rx.Disposable;\r\n\r\n constructor(\r\n private $mdDialog,\r\n private $timeout: ng.ITimeoutService,\r\n private createDialog,\r\n private activityResource: IActivityResourceClass,\r\n private $stateParams: CustomerCard.CardStateParams,\r\n private $state: ng.ui.IStateService,\r\n private activityRegistrationService: ActivityRegistrationService,\r\n private faqResource: FaqResourceClass,\r\n private contactActivityResource: ContactActivityResource,\r\n private customerCardActivityInfoService: CustomerCardActivityInfoService\r\n ) {}\r\n\r\n public $onInit() {\r\n this.loadedPersonId = this.$stateParams.personId;\r\n if (this.activity.case && this.activity.case.faqId) this.getFaqExpirationDate(this.activity.case.faqId);\r\n\r\n this.timelineConfig = window.config && window.config.modules && window.config.modules.timeline;\r\n\r\n this.observeStatusFilter();\r\n }\r\n\r\n $onDestroy(): void {\r\n if (this.statusFilterSubscription) {\r\n this.statusFilterSubscription.dispose();\r\n }\r\n\r\n this.statusFilterSubscription = null;\r\n }\r\n\r\n public templateFinishedLoading() {\r\n this.templatesFinishedLoading += 1;\r\n if (this.templatesFinishedLoading === this.activities.items.length) {\r\n this.templatesDoneLoading = true;\r\n }\r\n }\r\n\r\n public toggle(): void {\r\n if (this.isAllowedToSeeActivityDetail()) {\r\n this.showDetails = !this.showDetails;\r\n if (this.showDetails && !this.activities) {\r\n if (this.preventFollowUpActivityLoading) {\r\n this.activities = {\r\n items: [this.activity],\r\n total: 1,\r\n page: 0,\r\n pageSize: 1\r\n };\r\n } else this.loadFollowUpActivities(this.activity.case);\r\n }\r\n }\r\n }\r\n\r\n public hasFollowUpActivities(): boolean {\r\n return !!parseInt(this.nrOfFollowUpActivities);\r\n }\r\n\r\n public isAllowedToRegisterTask(): boolean {\r\n return window.user.permissions.createTask;\r\n }\r\n\r\n public isAllowedToSeeActivityDetail(): boolean {\r\n return window.user.permissions.activityRead;\r\n }\r\n\r\n public isAllowedToRegisterContactActivity(): boolean {\r\n return window.user.permissions.caseCreate;\r\n }\r\n\r\n public removeActivity(activity: ActivityModel): void {\r\n if (!activity) return;\r\n\r\n this.contactActivityResource\r\n .delete({ id: activity.id })\r\n .$promise.then(() => this.customerCardActivityInfoService.removeCase(activity.case.id));\r\n }\r\n\r\n public hasPermissionToRemoveActivity = (): boolean => !!window.user.permissions.deleteContactActivity;\r\n\r\n public isAuthorizedToDeleteCasesAndActivities = (): boolean => window.user && window.user.permissions && window.user.permissions.caseDeleteAndRestore;\r\n\r\n public isContactActivityWithinRemovalPeriod(activity: ActivityModel): boolean {\r\n const now = new Date();\r\n const diffMs = now.getTime() - new Date(activity.startTime).getTime();\r\n const diffMins = Math.round(diffMs / 60000);\r\n\r\n return this.timelineConfig.activityModificationTimeLimitInMinutes > diffMins;\r\n }\r\n\r\n public launchTaskRegistrationPopup(): void {\r\n const contractId = this.case.contract && this.case.contract.id;\r\n const template = ``;\r\n this.$mdDialog\r\n .show({\r\n template,\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n })\r\n .then(() => this.loadFollowUpActivities(this.activity.case));\r\n }\r\n\r\n public launchContactActivityPopup(): void {\r\n const contractId = this.case.contract && this.case.contract.id;\r\n this.$mdDialog\r\n .show({\r\n template: ``,\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n })\r\n .then(activity => {\r\n this.activityRegistrationService.contactActivityRegistered(activity);\r\n this.$timeout(() => {\r\n this.loadFollowUpActivities(this.activity.case);\r\n }, 500);\r\n });\r\n }\r\n\r\n public launchTransferPopup() {\r\n const tagId = this.case.thesaurusTagId;\r\n const contractId = this.case.contract && this.case.contract.id;\r\n\r\n this.createDialog(\r\n '/CustomerService/_CustomerCard/_Activities/Registration/TransferPopup/TransferPopup.html',\r\n {\r\n id: 'transferPopup',\r\n modalClass: 'popup green popup_1350'\r\n },\r\n {\r\n tagId,\r\n caseId: this.case.id,\r\n contractId\r\n }\r\n );\r\n }\r\n\r\n public isOnColleagueCard(): boolean {\r\n return this.$state.includes('customerservice.colleaguecard');\r\n }\r\n\r\n public hasDifferentChannelPredecesor(index: number) {\r\n if (!this.activities || !this.activities.items || index < 1) return false;\r\n\r\n for (let i = index; i > 0; i--) {\r\n if (this.activities.items[index].channel !== this.activities.items[i].channel) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public async getFaqExpirationDate(faqId: Guid) {\r\n if (this.faqExpirationDatesRegistrar[String(faqId)]) return;\r\n\r\n const faq = await this.faqResource.getById({ id: faqId }).$promise;\r\n const today = new Date();\r\n const isExpired = faq && faq.expiresOn && today.getTime() > new Date(faq.expiresOn).midnight().getTime();\r\n const expirationInfo: FaqExpirationInfo = {\r\n expiresOn: faq && faq.expiresOn,\r\n isExpired\r\n };\r\n\r\n this.faqExpirationDatesRegistrar[String(faqId)] = expirationInfo;\r\n }\r\n\r\n private observeStatusFilter() {\r\n this.statusFilterSubscription = this.customerCardActivityInfoService\r\n .getStatusFilter()\r\n .distinctUntilChanged()\r\n .subscribe(x => {\r\n if (!this.hasPermissionToRemoveActivity) {\r\n this.statusFilter = undefined;\r\n\r\n return;\r\n }\r\n\r\n this.statusFilter = x;\r\n\r\n this.loadFollowUpActivities(this.activity.case);\r\n });\r\n }\r\n\r\n private loadFollowUpActivities(cs: ActivityCaseModel): void {\r\n const caseId = (cs && cs.id) || (this.case && this.case.id) || this.$stateParams.caseId;\r\n if (this.loading || !caseId) return;\r\n this.loading = true;\r\n\r\n this.activityResource\r\n .getByCaseId({\r\n id: caseId,\r\n page: 0,\r\n pageSize: 150,\r\n statusFilter: this.statusFilter\r\n })\r\n .$promise.then((model: PagedItemsModel) => {\r\n setTimeout(() => {\r\n angular.forEach(model.items, (item: ActivityModel) => {\r\n item.case = cs;\r\n });\r\n const isCaseFlowTaskActivity = x =>\r\n x &&\r\n x.task &&\r\n x.task.taskType &&\r\n (x.task.taskType.category === TaskTypeCategory.CaseFlow ||\r\n x.task.taskType.category === 'CaseFlow');\r\n const isTaskRelatedActivity = (x: ActivityModel) =>\r\n x &&\r\n (x.type.toLowerCase().indexOf('taak') === 0 ||\r\n x.type.toLowerCase().indexOf('task') === 0) &&\r\n !(\r\n x.type.toLowerCase().indexOf('taakaangemaakt') === 0 ||\r\n x.type.toLowerCase().indexOf('taskanonymouslinked') === 0\r\n );\r\n const isRestoredDeletedActivity = (x: ActivityModel) =>\r\n x &&\r\n (x.type === 'ActivityDeletedActivity' ||\r\n x.type === 'ActivityRestoredActivity' ||\r\n x.type === 'CaseDeletedActivity' ||\r\n x.type === 'CaseRestoredActivity');\r\n\r\n const filteredItems = model.items\r\n .filter(x => !isCaseFlowTaskActivity(x))\r\n .filter(x => !isTaskRelatedActivity(x))\r\n .filter(x => !isRestoredDeletedActivity(x));\r\n filteredItems.forEach(x => this.groupTaskActivities(x, model.items));\r\n this.activities = {\r\n items: filteredItems,\r\n total: model.total,\r\n page: model.page,\r\n pageSize: model.pageSize\r\n };\r\n }, 25);\r\n })\r\n .finally(() => (this.loading = false));\r\n }\r\n\r\n private groupTaskActivities(activity: any, items: ActivityModel[]): void {\r\n const isRootActivity = x =>\r\n (x && x.task && x.type.toLowerCase().indexOf('taakaangemaakt') === 0) ||\r\n (x && x.task && x.type.toLowerCase().indexOf('taskanonymouslinked') === 0);\r\n\r\n if (!isRootActivity(activity)) return;\r\n\r\n const isLinkedActivity = (x, y) => x.task && x.task.id === y.task.id;\r\n const linkedActivities = items.filter(x => isLinkedActivity(x, activity));\r\n activity.linkedActivities = linkedActivities;\r\n }\r\n\r\n public getDeleteOrRestoreActivityIconTitle = (id: Guid): string =>\r\n !this.isDeletedActivity(id)\r\n ? 'Deze gebeurtenis verwijderen van de klantkaart'\r\n : 'Deze gebeurtenis weer tonen op klantkaart';\r\n\r\n public getDeleteOrRestoreActivityIcon = (id: Guid): string =>\r\n !this.isDeletedActivity(id) ? 'delete' : 'restore_from_trash';\r\n\r\n public getDeleteOrRestoreCaseIconTitle = (cs: ActivityCaseModel): string =>\r\n !this.isDeletedCase(cs) ? 'Deze zaak verwijderen van de klantkaart' : 'Deze zaak weer tonen op klantkaart';\r\n\r\n public getDeleteOrRestoreCaseIcon = (cs: ActivityCaseModel): string =>\r\n !this.isDeletedCase(cs) ? 'delete' : 'restore_from_trash';\r\n\r\n private isDeletedActivity = (id: Guid): boolean => this.activities.items.find(x => x.id == id).isDeleted;\r\n\r\n private isDeletedCase = (cs: ActivityCaseModel): boolean => cs && cs.isDeleted;\r\n\r\n private popupMdDialogSettings(template: string): void {\r\n this.$mdDialog\r\n .show({\r\n template,\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n })\r\n .then(() => {\r\n this.loadFollowUpActivities(this.activity.case);\r\n });\r\n }\r\n\r\n public restoreOrDeleteActivity = (id: Guid): void =>\r\n this.isDeletedActivity(id)\r\n ? this.popupMdDialogSettings(`<${'restore-activity-timeline-item'}\r\n is-Case='${JSON.stringify(false)}'\r\n id='${JSON.stringify(id)}'\r\n >`)\r\n : this.popupMdDialogSettings(`<${'delete-activity-timeline-item'}\r\n is-Case='${JSON.stringify(false)}'\r\n id='${JSON.stringify(id)}'\r\n >`);\r\n\r\n public restoreOrDeleteCaseAction = (id: Guid): void =>\r\n this.case.isDeleted\r\n ? this.popupMdDialogSettings(`<${'restore-activity-timeline-item'}\r\n is-Case='${JSON.stringify(true)}'\r\n id='${JSON.stringify(id)}'\r\n >`)\r\n : this.popupMdDialogSettings(`<${'delete-activity-timeline-item'}\r\n is-Case='${JSON.stringify(true)}'\r\n id='${JSON.stringify(id)}'\r\n >`);\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard {\r\n import throttle = Umbrella.Helpers.throttle;\r\n\r\n angular.module('Umbrella').directive('timelineItem', [\r\n '$window',\r\n $window => {\r\n return {\r\n link(scope, element: ng.IAugmentedJQuery, attr) {\r\n let timelineItem: HTMLElement = document.createElement('div');\r\n let timelineItemStyling = getComputedStyle(timelineItem);\r\n let elementTransitionDuration = parseFloat(timelineItemStyling.transitionDuration) * 1000;\r\n let collapsedTimelineChildrenInViewport: any;\r\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\r\n let collapsedStatus = false;\r\n let isScrolling = false;\r\n const scrollContainer = document.querySelector('.scrollContainer');\r\n let positionOfItem: number;\r\n let totalHeight = 0;\r\n let activityItem: HTMLElement;\r\n checkHeaderHight(element);\r\n\r\n activityItem = element.parent().length > 0 ? element.parent()[0] : null;\r\n\r\n const domMutationObserver = new MutationObserver(mutations => {\r\n mutations.forEach(() => throttle(calculateItemHeight(timelineItem), 100));\r\n });\r\n\r\n const config = {\r\n childList: true,\r\n subtree: true,\r\n characterData: true\r\n };\r\n\r\n attr.$observe('timelineItem', value => {\r\n if (value === 'true') {\r\n domMutationObserver.observe(activityItem, config);\r\n setTimeout(() => {\r\n collapsedStatus = true;\r\n toggleHeightOfItem(timelineItem);\r\n }, 650);\r\n } else {\r\n domMutationObserver.disconnect();\r\n }\r\n });\r\n\r\n element.on('click', () => {\r\n setValues();\r\n hideFooterIfEmpty(timelineItem);\r\n scrollToTopOfElement();\r\n isScrollToFinished();\r\n toggleHeightOfItem(timelineItem);\r\n addCollapsedClass();\r\n setWidthFooterAndHeaderItem(timelineItem);\r\n addStickyFooterTimelineItems();\r\n removeStickyFooterTimelineItems();\r\n removeStickyFooterFromViewportTimelineItems();\r\n });\r\n\r\n angular.element($window).bind('resize', () => {\r\n if (timelineItem.parentElement && isItemCollapsed(timelineItem)) {\r\n setWidthFooterAndHeaderItem(timelineItem);\r\n }\r\n });\r\n\r\n scope.$on('toggleCaseFlowStep', (event, args) => {\r\n setTimeout(() => {\r\n if (attr.$$element[0].parentElement === args.item) {\r\n calculateItemHeight(timelineItem);\r\n }\r\n }, 50);\r\n });\r\n\r\n function setValues() {\r\n timelineItem = element[0].parentElement;\r\n timelineItemStyling = getComputedStyle(timelineItem.parentElement);\r\n elementTransitionDuration = parseFloat(timelineItemStyling.transitionDuration) * 1000;\r\n collapsedTimelineChildrenInViewport = buildArray(timelineItem);\r\n positionOfItem = timelineItem.parentElement.offsetTop;\r\n }\r\n\r\n function scrollToTopOfElement() {\r\n if (isItemCollapsed(timelineItem) && !collapsedStatus) {\r\n let itemHasStickyHeader = false;\r\n if (timelineItem.parentElement.classList.contains('sticky-header')) {\r\n itemHasStickyHeader = true;\r\n }\r\n if (itemHasStickyHeader) {\r\n $(scrollContainer).animate(\r\n {\r\n scrollTop: positionOfItem - 20\r\n },\r\n 250\r\n );\r\n }\r\n }\r\n }\r\n\r\n function isScrollToFinished() {\r\n if (timelineItem.parentElement.classList.contains('sticky-header')) {\r\n isScrolling = true;\r\n const checkIfScrollToIsFinished = setInterval(() => {\r\n if (positionOfItem === Math.round(scrollContainer.scrollTop) + 20 && !collapsedStatus) {\r\n removeStickyFooterFromItem(timelineItem.parentElement);\r\n removeCollapsedClassFromItem(timelineItem);\r\n resetHeightItem(timelineItem);\r\n clearInterval(checkIfScrollToIsFinished);\r\n }\r\n }, 25);\r\n }\r\n }\r\n\r\n function toggleHeightOfItem(timelineItem: HTMLElement) {\r\n if (isItemCollapsed(timelineItem) && !collapsedStatus) {\r\n collapsedStatus = false;\r\n const isFooterItemInViewport = setInterval(() => {\r\n if (\r\n timelineItem.lastElementChild &&\r\n timelineItem.lastElementChild.getBoundingClientRect() &&\r\n isFooterElementInViewport(timelineItem.lastElementChild.getBoundingClientRect())\r\n ) {\r\n if (!timelineItem.parentElement.classList.contains('sticky-header')) {\r\n removeCollapsedClassFromItem(timelineItem);\r\n resetHeightItem(timelineItem);\r\n }\r\n removeStickyHeader(timelineItem);\r\n removeStickyFooterFromItem(timelineItem.parentElement);\r\n if (!isScrolling) {\r\n resetHeightItem(timelineItem);\r\n }\r\n clearInterval(isFooterItemInViewport);\r\n }\r\n }, 25);\r\n } else {\r\n collapsedStatus = false;\r\n calculateItemHeight(timelineItem);\r\n const isBottomItemNotInViewport = setInterval(() => {\r\n if (!isBottomElementInViewport(timelineItem.parentElement.getBoundingClientRect())) {\r\n addStickyFooterToItem(timelineItem.parentElement);\r\n clearInterval(isBottomItemNotInViewport);\r\n }\r\n }, 25);\r\n setTimeout(() => {\r\n clearInterval(isBottomItemNotInViewport);\r\n }, elementTransitionDuration);\r\n }\r\n }\r\n\r\n function calculateItemHeight(timelineItem) {\r\n totalHeight = 0;\r\n for (const item of timelineItem.children) {\r\n totalHeight += item.clientHeight;\r\n }\r\n if (totalHeight > 50) {\r\n timelineItem.parentElement.style.height = totalHeight + 'px';\r\n }\r\n }\r\n\r\n function addStickyFooterTimelineItems() {\r\n for (const item of collapsedTimelineChildrenInViewport) {\r\n const isBodyInViewportAndBottomNot = setInterval(() => {\r\n if (\r\n isTopElementInViewport(item.getBoundingClientRect()) &&\r\n !isBottomElementInViewport(item.getBoundingClientRect())\r\n ) {\r\n addStickyFooterToItem(item);\r\n clearInterval(isBodyInViewportAndBottomNot);\r\n }\r\n }, 25);\r\n setTimeout(() => {\r\n clearInterval(isBodyInViewportAndBottomNot);\r\n }, elementTransitionDuration);\r\n }\r\n }\r\n\r\n function removeStickyFooterTimelineItems() {\r\n for (const item of collapsedTimelineChildrenInViewport) {\r\n const isTopElementNotInViewport = setInterval(() => {\r\n if (!isTopElementInViewport(item.getBoundingClientRect())) {\r\n removeStickyFooterFromItem(item);\r\n clearInterval(isTopElementNotInViewport);\r\n }\r\n }, 25);\r\n setTimeout(() => {\r\n clearInterval(isTopElementNotInViewport);\r\n }, elementTransitionDuration);\r\n }\r\n }\r\n\r\n function removeStickyFooterFromViewportTimelineItems() {\r\n for (const item of collapsedTimelineChildrenInViewport) {\r\n const areTopAndBottomOfElementInViewport = setInterval(() => {\r\n if (\r\n isTopElementInViewport(item.getBoundingClientRect()) &&\r\n isBottomElementInViewport(item.getBoundingClientRect())\r\n ) {\r\n removeStickyFooterFromItem(item);\r\n }\r\n }, 25);\r\n setTimeout(() => {\r\n clearInterval(areTopAndBottomOfElementInViewport);\r\n }, elementTransitionDuration);\r\n }\r\n }\r\n\r\n function buildArray(timelineItem) {\r\n const initialArray = [timelineItem];\r\n collapsedTimelineChildrenInViewport = [];\r\n\r\n for (let i = 0; i < 10; i++) {\r\n const lastChild = initialArray.slice(-1)[0];\r\n if (!lastChild) break;\r\n if (lastChild.parentElement.nextElementSibling !== null) {\r\n initialArray.push(lastChild.parentElement.nextElementSibling.firstElementChild);\r\n if (lastChild.parentElement.nextElementSibling.classList.contains('collapsed')) {\r\n collapsedTimelineChildrenInViewport.push(\r\n lastChild.parentElement.nextElementSibling\r\n );\r\n }\r\n }\r\n }\r\n return collapsedTimelineChildrenInViewport;\r\n }\r\n\r\n function checkHeaderHight(timelineItem) {\r\n setTimeout(() => {\r\n timelineItem[0].parentElement.parentElement.style.height =\r\n timelineItem[0].clientHeight + 'px';\r\n }, 50);\r\n }\r\n\r\n function hideFooterIfEmpty(item) {\r\n if (\r\n item.lastElementChild &&\r\n item.lastElementChild.style &&\r\n item.lastElementChild.children &&\r\n item.lastElementChild.children.length < 1\r\n )\r\n item.lastElementChild.style.padding = '0px';\r\n }\r\n\r\n function isItemCollapsed(timelineItem) {\r\n return (timelineItem.parentElement && timelineItem.parentElement.classList.contains('collapsed')) ? true : false;\r\n }\r\n\r\n function addCollapsedClass() {\r\n timelineItem.parentElement.classList.add('collapsed');\r\n }\r\n\r\n function removeStickyHeader(item) {\r\n item.parentElement.classList.remove('sticky-header');\r\n }\r\n\r\n function addStickyFooterToItem(item) {\r\n item.classList.add('sticky-footer');\r\n }\r\n\r\n function removeCollapsedClassFromItem(item) {\r\n item.parentElement.classList.remove('collapsed');\r\n }\r\n\r\n function resetHeightItem(item) {\r\n item.parentElement.style.height = item.firstElementChild.clientHeight + 'px';\r\n }\r\n\r\n function removeStickyFooterFromItem(item) {\r\n item.classList.remove('sticky-footer');\r\n }\r\n\r\n function setWidthFooterAndHeaderItem(item) {\r\n if (!item.parentElement) return;\r\n\r\n if (item && item.firstChild && item.firstChild.style)\r\n item.firstChild.style.width = item.parentElement.clientWidth + 'px';\r\n\r\n if (item && item.lastElementChild && item.lastElementChild.style)\r\n item.lastElementChild.style.width = item.parentElement.clientWidth + 'px';\r\n }\r\n\r\n function isFooterElementInViewport(footerElement) {\r\n return Math.round(footerElement.bottom) <= viewportHeight &&\r\n Math.round(footerElement.bottom) > 122\r\n ? true\r\n : false;\r\n }\r\n\r\n function isTopElementInViewport(elementPosition) {\r\n return Math.round(elementPosition.top) <= viewportHeight &&\r\n Math.round(elementPosition.top) > 122\r\n ? true\r\n : false;\r\n }\r\n\r\n function isBottomElementInViewport(elementPosition) {\r\n return Math.round(elementPosition.bottom) <= viewportHeight &&\r\n Math.round(elementPosition.bottom) > 122\r\n ? true\r\n : false;\r\n }\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella {\r\n import IActivityResourceClass = Umbrella.Modules.IActivityResourceClass;\r\n import CustomerCardActivityInfoService = Umbrella.CustomerService.CustomerCard.Activities.CustomerCardActivityInfoService;\r\n\r\n @Component('Umbrella', {\r\n selector: 'delete-activity-timeline-item',\r\n templateUrl: '/CustomerService/ActivityTimeline/ActivityTimelineItemComponent/DeleteActivityTimelineItem.html',\r\n bindings: {\r\n isCase: '<',\r\n id: '<'\r\n }\r\n })\r\n @Inject(\r\n '$mdDialog',\r\n 'ToastMessageService',\r\n 'CustomerCardActivityInfoService')\r\n\r\n export class DeleteActivityTimelineItemComponent {\r\n\r\n public isCase: boolean;\r\n public reason = '';\r\n public id: Guid;\r\n\r\n constructor(\r\n private $mdDialog,\r\n private toastMessageService: ToastMessageService,\r\n private customerCardActivityInfoService : CustomerCardActivityInfoService\r\n ) {\r\n }\r\n\r\n public cancel(): void {\r\n this.$mdDialog.cancel();\r\n }\r\n\r\n public deleteCase(): void {\r\n this.customerCardActivityInfoService.deleteCase(this.id);\r\n this.$mdDialog.hide();\r\n }\r\n\r\n public deleteActivity(): void {\r\n this.customerCardActivityInfoService.deleteActivity(this.id);\r\n this.$mdDialog.hide();\r\n }\r\n }\r\n}\r\n","namespace Umbrella {\r\n import IActivityResourceClass = Umbrella.Modules.IActivityResourceClass;\r\n import CustomerCardActivityInfoService = Umbrella.CustomerService.CustomerCard.Activities.CustomerCardActivityInfoService;\r\n\r\n @Component('Umbrella', {\r\n selector: 'restore-activity-timeline-item',\r\n templateUrl: '/CustomerService/ActivityTimeline/ActivityTimelineItemComponent/RestoreActivityTimelineItem.html',\r\n bindings: {\r\n isCase: '<',\r\n id: '<'\r\n }\r\n })\r\n @Inject(\r\n '$mdDialog',\r\n 'ToastMessageService',\r\n 'CustomerCardActivityInfoService')\r\n\r\n export class RestoreActivityTimelineItemComponent {\r\n\r\n public isCase: boolean;\r\n public reason = '';\r\n public id: Guid;\r\n\r\n constructor(\r\n private $mdDialog,\r\n private toastMessageService: ToastMessageService,\r\n private customerCardActivityInfoService : CustomerCardActivityInfoService\r\n ) {\r\n }\r\n\r\n public cancel(): void {\r\n this.$mdDialog.cancel();\r\n }\r\n\r\n public restoreCase(): void {\r\n this.customerCardActivityInfoService.restoreCase(this.id);\r\n this.$mdDialog.hide();\r\n }\r\n\r\n public restoreActivity(): void {\r\n this.customerCardActivityInfoService.restoreActivity(this.id);\r\n this.$mdDialog.hide();\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import FaqResourceClass = Modules.Knowledgebase.Faq.FaqResourceClass;\r\n import FaqModel = Modules.Knowledgebase.FaqModel;\r\n enum SuggestionState {\r\n Default = 0,\r\n Creating = 1,\r\n Done = 2\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'create-faq-suggestion',\r\n templateUrl:\r\n '/CustomerService/CreateFaqSuggestionComponent/CreateFaqSuggestionComponent.html',\r\n bindings: {\r\n faqId: '<'\r\n }\r\n })\r\n @Inject('TaskResource', 'FaqResource')\r\n class CreateFaqSuggestionComponent {\r\n private faqId: Guid;\r\n public faq: FaqModel.Detailed;\r\n public suggestionState: SuggestionState = 0;\r\n public suggestion: string = '';\r\n\r\n constructor(\r\n private taskResource: Umbrella.Modules.Tasks.ITaskResourceClass,\r\n private faqResource: FaqResourceClass\r\n ) {}\r\n\r\n $onInit() {\r\n this.faqResource\r\n .getById({ id: this.faqId })\r\n .$promise.then(faq => {\r\n this.faq = faq;\r\n })\r\n .catch(() => {\r\n this.faq = null;\r\n });\r\n }\r\n\r\n public createSuggestion() {\r\n switch (this.suggestionState) {\r\n case 0:\r\n case SuggestionState.Default:\r\n this.suggestionState = SuggestionState.Creating;\r\n break;\r\n case 1:\r\n case SuggestionState.Creating:\r\n this.submitSuggestion();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n public hasPermissions() {\r\n return !!window.user.permissions.knowledgebaseFaqCreateSuggestion;\r\n }\r\n\r\n private submitSuggestion() {\r\n this.taskResource\r\n .createFaqSuggestion({\r\n question: this.faq.question,\r\n suggestion: this.suggestion,\r\n fromOperatorId: window.user.id\r\n })\r\n .$promise.then(task => {\r\n this.suggestionState = SuggestionState.Done;\r\n })\r\n .finally(() => {\r\n this.suggestion = '';\r\n setTimeout(() => {\r\n this.suggestionState = SuggestionState.Default;\r\n }, 5000);\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n import generateGuid = Umbrella.Helpers.generateGuid;\r\n import AppointmentModel = Umbrella.Modules.Colleagues.Calendar.AppointmentModel;\r\n\r\n interface CalendarModel {\r\n [day: string]: CalendarAppointmentModel[];\r\n }\r\n\r\n interface CalendarAppointmentModel extends AppointmentModel {\r\n calendarId?: Guid;\r\n overlappingWithEvents: CalendarAppointmentModel[];\r\n columnsCount?: number;\r\n columnPosition?: number;\r\n groupNumber: number;\r\n fromPreviousDay: boolean;\r\n }\r\n\r\n angular\r\n .module('CustomerService')\r\n\r\n .directive('attachCalendarEvents', [\r\n '$timeout',\r\n '$filter',\r\n ($timeout, $filter) => {\r\n function attachEvents(element: ng.IAugmentedJQuery, calendarModel: CalendarModel, startFromHour = 8) {\r\n Object.keys(calendarModel).forEach((key, index) => {\r\n const dayEvents = calendarModel[key];\r\n\r\n for (const agendaEvent of dayEvents) {\r\n let target: ng.IAugmentedJQuery;\r\n\r\n const eventStartHour = agendaEvent.startTime.getHours();\r\n const eventEndHour = agendaEvent.endTime.getHours();\r\n let customAttachTime: Date;\r\n if (\r\n (eventStartHour < startFromHour && eventEndHour > startFromHour) ||\r\n agendaEvent.fromPreviousDay\r\n ) {\r\n customAttachTime = new Date(agendaEvent.startTime);\r\n customAttachTime.setHours(startFromHour);\r\n customAttachTime.setMinutes(0);\r\n customAttachTime.setSeconds(0);\r\n\r\n const dayInfo = key.split('.');\r\n const day = Number(dayInfo[0]);\r\n const month = Number(dayInfo[1]) - 1;\r\n\r\n customAttachTime.setDate(day);\r\n customAttachTime.setMonth(month);\r\n }\r\n\r\n if (agendaEvent.isAllDay) {\r\n target = findHeaderElementMatchingDate(element, customAttachTime || agendaEvent.startTime);\r\n } else {\r\n target = findElementMatchingDateAndHour(\r\n element,\r\n agendaEvent.startTime,\r\n customAttachTime\r\n );\r\n }\r\n\r\n if (target && target.length > 0) {\r\n const eventElement = createEventElement(\r\n agendaEvent,\r\n target,\r\n agendaEvent.fromPreviousDay,\r\n customAttachTime\r\n );\r\n\r\n appentStylingAccordingToColumn(\r\n eventElement,\r\n agendaEvent.columnPosition,\r\n agendaEvent.columnsCount\r\n );\r\n\r\n eventElement.mouseenter((event: JQueryMouseEventObject) => {\r\n const tooltip: ng.IAugmentedJQuery = createEventElementTooltip(agendaEvent);\r\n angular.element('body').append(tooltip);\r\n\r\n angular.element(document).on('mousemove', (event: JQueryMouseEventObject) => {\r\n const mouseX = event.clientX;\r\n const mouseY = event.clientY;\r\n const bb = tooltip[0].getBoundingClientRect();\r\n const left = mouseX - bb.width > 0 ? mouseX - bb.width : 0;\r\n const top = mouseY - bb.height > 0 ? mouseY - bb.height : 0;\r\n tooltip.css({\r\n left,\r\n top\r\n });\r\n });\r\n\r\n eventElement.mouseleave(event => {\r\n tooltip.remove();\r\n });\r\n });\r\n target.append(eventElement);\r\n }\r\n }\r\n });\r\n }\r\n\r\n function appentStylingAccordingToColumn(\r\n element: ng.IAugmentedJQuery,\r\n currentColumn: number,\r\n totalColumns: number\r\n ): void {\r\n if (currentColumn === null || totalColumns === null) return;\r\n\r\n const width = Math.floor(100 / totalColumns);\r\n const margin = currentColumn + 1;\r\n element.css({\r\n 'max-width': `calc(${width}% - 2px)`,\r\n left: `calc((${width * currentColumn}%) + ${margin}px)`\r\n });\r\n }\r\n\r\n function findElementMatchingDateAndHour(\r\n parent: ng.IAugmentedJQuery,\r\n date: Date,\r\n customAttachTime?: Date\r\n ): ng.IAugmentedJQuery | null {\r\n const attachDate = customAttachTime ? customAttachTime : date;\r\n\r\n const daySelector = '.day' + attachDate.getDate();\r\n const monthSelector = '.month' + (attachDate.getMonth() + 1);\r\n const yearSelector = '.year' + attachDate.getFullYear();\r\n const hourSelector = '.hour' + attachDate.getHours();\r\n\r\n const matchingExactElements = parent[0].querySelectorAll(\r\n daySelector + monthSelector + yearSelector + hourSelector\r\n );\r\n\r\n if (matchingExactElements && matchingExactElements.length > 0) {\r\n return angular.element(matchingExactElements[0]);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function findHeaderElementMatchingDate(\r\n parent: ng.IAugmentedJQuery,\r\n date: Date\r\n ): ng.IAugmentedJQuery | null {\r\n const daySelector = '.day' + date.getDate();\r\n const monthSelector = '.month' + (date.getMonth() + 1);\r\n const yearSelector = '.year' + date.getFullYear();\r\n\r\n const matchingExactElements = parent[0].querySelectorAll(\r\n 'th' + daySelector + monthSelector + yearSelector\r\n );\r\n\r\n if (matchingExactElements && matchingExactElements.length > 0) {\r\n return angular.element(matchingExactElements[0].children[2]);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function createEventElement(\r\n agendaEvent: CalendarAppointmentModel,\r\n parent: ng.IAugmentedJQuery,\r\n fromPreviousDay: boolean,\r\n customAttachTime?: Date\r\n ): ng.IAugmentedJQuery {\r\n if (!agendaEvent || !parent || !parent.length) return null;\r\n\r\n const attachStartTime = customAttachTime ? customAttachTime : agendaEvent.startTime;\r\n\r\n const element = angular.element('
    ');\r\n const parentHeight = parent.outerHeight();\r\n const eventMinutes = attachStartTime.getMinutes();\r\n const eventMinutesPercentage = (100 / 60) * eventMinutes;\r\n\r\n const topDistance = (eventMinutesPercentage / 100) * parentHeight;\r\n element.css('top', topDistance + 'px');\r\n\r\n const messageSpan = angular.element('

    ');\r\n messageSpan.text(agendaEvent.subject);\r\n element.append(messageSpan);\r\n\r\n const eventStartMs = attachStartTime.getTime();\r\n const eventEndMs = agendaEvent.endTime.getTime();\r\n const durationInMinutes = Math.ceil((eventEndMs - eventStartMs) / 1000 / 60);\r\n const heightPercentage = ((100 / 60) * durationInMinutes) / 100;\r\n const height = parentHeight * heightPercentage;\r\n\r\n element.css({\r\n height: height - 2 + 'px',\r\n 'margin-top': '1px'\r\n });\r\n\r\n if (durationInMinutes < 30) element.addClass('short-event');\r\n\r\n if (agendaEvent.isAllDay) {\r\n element.addClass('allDay');\r\n element.css({\r\n height: parentHeight * 0.35 + 'px',\r\n top: 'auto',\r\n bottom: 0\r\n });\r\n } else {\r\n element.addClass(agendaEvent.status.toString());\r\n }\r\n\r\n if (fromPreviousDay) {\r\n element.addClass('startsEarly');\r\n }\r\n\r\n return element;\r\n }\r\n\r\n function createEventElementTooltip(agendaEvent: CalendarAppointmentModel): ng.IAugmentedJQuery {\r\n const element = angular.element('
    ');\r\n\r\n element.append(\r\n `
    Onderwerp:${agendaEvent.subject}
    `\r\n );\r\n element.append(\r\n `
    Locatie:${agendaEvent.location}
    `\r\n );\r\n\r\n element.append('
    ');\r\n\r\n const startTime = $filter('date')(agendaEvent.startTime, 'HH:mm');\r\n element.append(\r\n `
    Startijd:${startTime}
    `\r\n );\r\n\r\n const endTime = $filter('date')(agendaEvent.endTime, 'HH:mm');\r\n element.append(\r\n `
    Eindtijd:${endTime}
    `\r\n );\r\n\r\n element.append(\r\n `
    Duur:${agendaEvent.duration} minuten
    `\r\n );\r\n\r\n return element;\r\n }\r\n\r\n function generateCalendarModel(events: AppointmentModel[]): CalendarModel {\r\n const calendarModel: CalendarModel = splitEventsByDays(events);\r\n\r\n // build overlapping relations\r\n Object.keys(calendarModel).forEach((key, index) => {\r\n const eventsInTheDay = calendarModel[key];\r\n\r\n for (const agendaEvent of eventsInTheDay) {\r\n const otherEvents = eventsInTheDay.filter(x => x.calendarId !== agendaEvent.calendarId);\r\n agendaEvent.overlappingWithEvents = [];\r\n\r\n for (const otherEvent of otherEvents) {\r\n if (areEventsOverlapping(agendaEvent, otherEvent) && !otherEvent.isAllDay)\r\n agendaEvent.overlappingWithEvents.push(otherEvent);\r\n }\r\n }\r\n });\r\n\r\n // calculate column info\r\n Object.keys(calendarModel).forEach((key, index) => {\r\n const eventsInTheDay = calendarModel[key];\r\n let visited: CalendarAppointmentModel[] = [];\r\n\r\n for (const agendaEvent of eventsInTheDay) {\r\n if (visited.find(x => x.calendarId === agendaEvent.calendarId)) continue;\r\n let overlappingGroup = calculateGroupClutter(agendaEvent);\r\n visited = visited.concat(overlappingGroup);\r\n\r\n overlappingGroup = overlappingGroup.sort(\r\n (a, b) => a.startTime.getTime() - b.startTime.getTime()\r\n );\r\n\r\n // fill the column position\r\n let highestColumn = 0;\r\n for (const ev of overlappingGroup) {\r\n ev.columnPosition = calculateColumnPosition(ev);\r\n if (ev.columnPosition > highestColumn) highestColumn = ev.columnPosition;\r\n }\r\n\r\n // fill the total column count for the group\r\n for (const ev of overlappingGroup) {\r\n ev.columnsCount = highestColumn + 1;\r\n }\r\n }\r\n });\r\n\r\n return calendarModel;\r\n\r\n function splitEventsByDays(events: AppointmentModel[]): CalendarModel {\r\n const calendarModel: CalendarModel = {};\r\n\r\n const sortedEvents = events.sort((a, b) => b.startTime.getTime() - a.startTime.getTime());\r\n\r\n for (const agendaEvent of sortedEvents) {\r\n const eventStartMs = agendaEvent.startTime.getTime();\r\n const eventEndMs = agendaEvent.endTime.getTime();\r\n const durationInDays = Math.ceil((eventEndMs - eventStartMs) / 1000 / 60 / 60 / 24);\r\n const calendarAppointmentModel: CalendarAppointmentModel = {\r\n ...agendaEvent,\r\n overlappingWithEvents: [],\r\n groupNumber: 0,\r\n fromPreviousDay: false,\r\n columnPosition: null,\r\n columnsCount: null\r\n };\r\n\r\n for (let i = 0; i < durationInDays; i++) {\r\n const model: CalendarAppointmentModel = {\r\n ...calendarAppointmentModel\r\n };\r\n const day = $filter('date')(agendaEvent.startTime.addDays(i), 'dd.MM');\r\n if (!calendarModel[day]) calendarModel[day] = [];\r\n\r\n // We fill the Guids here so same event in each day has a unique identifier\r\n model.calendarId = generateGuid();\r\n\r\n if (i > 0) {\r\n model.fromPreviousDay = true;\r\n }\r\n\r\n calendarModel[day].push(model);\r\n }\r\n }\r\n\r\n return calendarModel;\r\n }\r\n\r\n function calculateGroupClutter(\r\n agendaEvent: CalendarAppointmentModel,\r\n visited: CalendarAppointmentModel[] = []\r\n ): CalendarAppointmentModel[] {\r\n const isVisited = !!visited.find(x => x.calendarId === agendaEvent.calendarId);\r\n\r\n if (isVisited || agendaEvent.isAllDay) return visited;\r\n\r\n visited.push(agendaEvent);\r\n\r\n for (const relationEvent of agendaEvent.overlappingWithEvents) {\r\n visited = calculateGroupClutter(relationEvent, visited);\r\n }\r\n\r\n return visited;\r\n }\r\n\r\n function areEventsOverlapping(event1: AppointmentModel, event2: AppointmentModel): boolean {\r\n const firstFactor = event1.startTime < event2.endTime;\r\n const secondFactor = event2.startTime < event1.endTime;\r\n\r\n if (firstFactor && secondFactor) return true;\r\n\r\n return false;\r\n }\r\n\r\n function calculateColumnPosition(agendaEvent: CalendarAppointmentModel): number {\r\n if (\r\n !agendaEvent ||\r\n !agendaEvent.overlappingWithEvents ||\r\n agendaEvent.overlappingWithEvents.length < 1\r\n )\r\n return 0;\r\n\r\n const usedPositions: number[] = [];\r\n let highestColumnPosition = null;\r\n\r\n for (const ev of agendaEvent.overlappingWithEvents) {\r\n if (ev.columnPosition !== null) {\r\n usedPositions.push(ev.columnPosition);\r\n\r\n if (highestColumnPosition === null || highestColumnPosition < ev.columnPosition)\r\n highestColumnPosition = ev.columnPosition;\r\n }\r\n }\r\n\r\n if (highestColumnPosition === null) return 0;\r\n\r\n let columnPosition = 0;\r\n let columnPositionSet = false;\r\n for (let i = 0; i < highestColumnPosition; i++) {\r\n if (usedPositions.indexOf(i) === -1) {\r\n columnPosition = i;\r\n columnPositionSet = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!columnPositionSet) {\r\n columnPosition = highestColumnPosition + 1;\r\n }\r\n\r\n return columnPosition;\r\n }\r\n }\r\n return {\r\n restrict: 'A',\r\n priority: -10,\r\n scope: {\r\n events: '<',\r\n startFromHour: '<'\r\n },\r\n link(scope: ng.IScope, element: ng.IAugmentedJQuery) {\r\n let calendarModel: CalendarModel;\r\n\r\n scope.$watch('events', (newValue, oldValue) => {\r\n $timeout(() => {\r\n calendarModel = generateCalendarModel(scope.events);\r\n attachEvents(element, calendarModel, scope.startFromHour);\r\n });\r\n });\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.CustomerService {\r\n export class EventCalendarHelper {\r\n private static readonly FIRSTHOUR = 7;\r\n private static readonly LASTHOUR = 18;\r\n\r\n static firstHourOfDay = (day: Date) =>\r\n day.midnight().addHours(EventCalendarHelper.FIRSTHOUR);\r\n static lastHourOfDay = (day: Date) =>\r\n day.midnight().addHours(EventCalendarHelper.LASTHOUR);\r\n }\r\n}\r\n","/// \r\nnamespace Umbrella.CustomerService {\r\n import AppointmentModel = Umbrella.Modules.Colleagues.Calendar.AppointmentModel;\r\n\r\n @Pipe('CustomerService', 'calendarEventItemClasses')\r\n class CalendarEventItemClassesFilter {\r\n public transform(app: AppointmentModel, day: Date): string {\r\n if (!app || !day) return '';\r\n\r\n try {\r\n const clz = [app.status.toString()];\r\n\r\n clz.push(locale.nl.day_names[day.getDay()]);\r\n\r\n if (app.isAllDay) clz.push('allday');\r\n if (app.isRecurring) clz.push('recurring');\r\n\r\n if (!app.isAllDay) {\r\n const hr = app.startTime.getHours();\r\n const min =\r\n (Math.round(app.startTime.getMinutes() / 30) * 30) % 60;\r\n clz.push(\r\n `hour${('00' + hr).slice(-2)}${('00' + min).slice(-2)}`\r\n );\r\n\r\n const firstHourOfDay = EventCalendarHelper.firstHourOfDay(\r\n day\r\n );\r\n const early = app.startTime < firstHourOfDay;\r\n const late =\r\n app.endTime > EventCalendarHelper.lastHourOfDay(day);\r\n\r\n if (early) clz.push('startsearly');\r\n if (late) clz.push('endslate');\r\n\r\n if (!late) {\r\n const start = early ? firstHourOfDay : app.startTime;\r\n const duration =\r\n Math.ceil(\r\n app.endTime.minutesDifference(start) / 30\r\n ) * 30;\r\n clz.push(`duration${duration}`);\r\n }\r\n }\r\n return clz.join(' ');\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import AppointmentModel = Umbrella.Modules.Colleagues.Calendar.AppointmentModel;\r\n\r\n class DayWithEvents {\r\n date: Date;\r\n events: AppointmentModel[];\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'event-calendar',\r\n templateUrl:\r\n '/CustomerService/EventCalendarComponent/EventCalendar.html',\r\n bindings: {\r\n events: '<',\r\n hideDatepicker: '<',\r\n hideTodayAgenda: '<',\r\n selectedDay: '<',\r\n onDaySelected: '&'\r\n }\r\n })\r\n class EventCalendarComponent {\r\n public events: AppointmentModel[];\r\n public hideDatepicker: boolean;\r\n public hideTodayAgenda: boolean;\r\n public onDaySelected: Function;\r\n\r\n public today: Date = new Date();\r\n public selectedDay: Date;\r\n public weekDays: Date[];\r\n public dayEvents: AppointmentModel[];\r\n public weekWithEvents: DayWithEvents[];\r\n public workHoursStart = 8;\r\n public workHoursEnd = 18;\r\n public workHours: number[];\r\n\r\n public $onInit() {\r\n this.selectedDay = this.selectedDay || new Date();\r\n this.workHours = this.generateWorkHours();\r\n this.weekDays = this.getWeekDays(this.selectedDay, 5);\r\n }\r\n\r\n public $onChanges() {\r\n this.events = this.events || [];\r\n\r\n const dayStart =\r\n (this.selectedDay && this.selectedDay.midnight()) ||\r\n new Date().midnight();\r\n const dayEnd = dayStart.addDays(1);\r\n this.dayEvents = this.events.length\r\n ? this.getEventsBetween(this.events, dayStart, dayEnd)\r\n : [];\r\n }\r\n\r\n public isWeekday(day: Date): boolean {\r\n return day.isWeekDay();\r\n }\r\n\r\n public selectDay(day: Date): void {\r\n if (!day) return;\r\n\r\n this.weekDays = this.getWeekDays(this.selectedDay, 5);\r\n this.onDaySelected({ value: day.midnight() });\r\n }\r\n\r\n public previousWeek(): void {\r\n const previousWeekStart = this.selectedDay;\r\n previousWeekStart.setDate(this.selectedDay.getDate() - 7);\r\n this.selectDay(previousWeekStart.midnight());\r\n }\r\n\r\n public nextWeek(): void {\r\n const nextWeekStart = this.selectedDay;\r\n nextWeekStart.setDate(this.selectedDay.getDate() + 7);\r\n this.selectDay(nextWeekStart.midnight());\r\n }\r\n\r\n public getMonthAndYear(): string {\r\n return (\r\n this.selectedDay.getMonthName('nl') +\r\n ' ' +\r\n this.selectedDay.getFullYear()\r\n );\r\n }\r\n\r\n public getSelectedDay(): Date {\r\n return this.selectedDay ? new Date(this.selectedDay) : new Date();\r\n }\r\n\r\n private generateWorkHours(): number[] {\r\n const workHoursArray = [];\r\n for (let i = this.workHoursStart; i <= this.workHoursEnd; i++) {\r\n workHoursArray.push(i);\r\n }\r\n\r\n return workHoursArray;\r\n }\r\n\r\n public isSameDay(d1: Date, d2: Date): boolean {\r\n return d1.getDate() === d2.getDate();\r\n }\r\n\r\n private getEventsBetween(\r\n events: AppointmentModel[],\r\n start: Date,\r\n end: Date\r\n ) {\r\n if (!events || !events.length) return [];\r\n\r\n return events.filter(\r\n a => new Date(a.startTime) < end && new Date(a.endTime) > start\r\n );\r\n }\r\n\r\n private getWeekDays(day: Date, days = 5): Date[] {\r\n const result = [];\r\n if (!day) return result;\r\n\r\n day.setHours(0, 0, 0, 0);\r\n while (result.length < days) {\r\n if (day.getDay() !== 0 && day.getDay() !== 6)\r\n result.push(day.clone());\r\n day = day.addDays(1);\r\n }\r\n return result;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import FaqResourceClass = Modules.Knowledgebase.Faq.FaqResourceClass;\r\n import IndicatorEvaluationModel = Umbrella.Indicators.IndicatorEvaluationModel;\r\n export abstract class BaseIndicatorsComponent {\r\n constructor(\r\n private $mdDialog: any,\r\n private faqResource: FaqResourceClass,\r\n private toastMessageService: ToastMessageService\r\n ) {}\r\n\r\n public displayExplanation(indicator: IndicatorEvaluationModel) {\r\n if (!indicator || !indicator.faqId) return;\r\n\r\n this.faqResource\r\n .getById({ id: indicator.faqId })\r\n .$promise.then(\r\n faq => faq.expiresOn && new Date().getTime() > new Date(faq.expiresOn).midnight().getTime() \r\n ? this.toastMessageService.warning(\"Geen toelichting beschikbaar, publicatieperiode is verlopen\") \r\n : this.displayPopup(indicator.title, faq.answer), \r\n e => this.toastMessageService.error(\"Geen toelichting beschikbaar, gekoppelde vraag is niet gevonden of niet gepubliceerd\")\r\n );\r\n }\r\n\r\n private displayPopup(title: string, answer: string) {\r\n this.$mdDialog.show(\r\n this.$mdDialog\r\n .alert()\r\n .clickOutsideToClose(true)\r\n .title(title)\r\n .textContent(stripHtml(answer))\r\n .ariaLabel(title)\r\n .ok('Sluiten')\r\n );\r\n }\r\n }\r\n}","/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import FaqResourceClass = Modules.Knowledgebase.Faq.FaqResourceClass;\r\n import IndicatorEvaluationModel = Umbrella.Indicators.IndicatorEvaluationModel;\r\n \r\n export interface IndicatorBindings {\r\n key: IBindingChange;\r\n model: IBindingChange;\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'indicators',\r\n templateUrl: '/CustomerService/IndicatorsComponent/IndicatorsComponent.html',\r\n bindings: {\r\n key: '@',\r\n model: '<',\r\n models: '<'\r\n }\r\n })\r\n @Inject('IndicatorService', '$mdDialog', 'FaqResource', 'ToastMessageService')\r\n export class IndicatorsComponent extends BaseIndicatorsComponent {\r\n public model: any;\r\n public indicators: IndicatorEvaluationModel[];\r\n public models: any[];\r\n public key: string;\r\n private previousModels: any[] = [];\r\n\r\n constructor(\r\n protected indicatorService: Umbrella.CustomerService.IndicatorService,\r\n $mdDialog,\r\n faqResource: FaqResourceClass,\r\n toastMessageService: ToastMessageService\r\n ) {\r\n super($mdDialog, faqResource, toastMessageService);\r\n }\r\n\r\n public $onChanges() {\r\n const models = this.models || [];\r\n if (this.model) models.push(this.model);\r\n\r\n if (models.length && this.isModelChanged(models)) {\r\n this.indicatorService.getActive(this.key, models).then(indicators => (this.indicators = indicators));\r\n }\r\n }\r\n\r\n private isModelChanged(models: any[]): boolean {\r\n const isChanged = JSON.stringify(this.previousModels) !== JSON.stringify(models);\r\n this.previousModels = models;\r\n return isChanged;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import FaqResourceClass = Modules.Knowledgebase.Faq.FaqResourceClass;\r\n import IndicatorEvaluationModel = Umbrella.Indicators.IndicatorEvaluationModel;\r\n\r\n @Component('CustomerService', {\r\n selector: 'preloaded-indicators',\r\n templateUrl: '/CustomerService/IndicatorsComponent/IndicatorsComponent.html',\r\n bindings: {\r\n indicators: '<',\r\n }\r\n })\r\n @Inject('IndicatorService', '$mdDialog', 'FaqResource', 'ToastMessageService')\r\n export class PreloadedIndicatorsComponent extends BaseIndicatorsComponent {\r\n public indicators: IndicatorEvaluationModel[];\r\n\r\n constructor(\r\n $mdDialog: any,\r\n faqResource: FaqResourceClass,\r\n toastMessageService: ToastMessageService\r\n ) {\r\n super($mdDialog, faqResource, toastMessageService);\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import FaqResourceClass = Umbrella.Modules.Knowledgebase.Faq.FaqResourceClass;\r\n import FaqModel = Umbrella.Modules.Knowledgebase.FaqModel;\r\n import AdminFaqModel = Umbrella.Modules.Knowledgebase.AdminFaqModel;\r\n import ThesaurusTagModel = Umbrella.Modules.Knowledgebase.ThesaurusTagModel;\r\n import ThesaurusResource = Umbrella.Modules.Knowledgebase.ThesaurusResource;\r\n import debounce = Umbrella.Helpers.debounce;\r\n import FaqTargetGroupModel = Umbrella.Modules.Knowledgebase.FaqTargetGroupModel;\r\n import PublicationStatus = Umbrella.Modules.Knowledgebase.PublicationStatus;\r\n import GetEnumValueAsNumber = Umbrella.Helpers.GetEnumValueAsNumber;\r\n import TargetGroupModel = Umbrella.Modules.Knowledgebase.TargetGroupModel;\r\n\r\n interface OnSelectedParam {\r\n faq: FaqModel;\r\n tag?: ThesaurusTagModel;\r\n targetGroupId?: System.Guid;\r\n followUpQuestionId?: System.Guid;\r\n }\r\n\r\n export interface ButtonDefinition {\r\n name: string;\r\n primary: boolean;\r\n onExecute: Function;\r\n }\r\n\r\n export interface KnowledgebaseSuggestionsInput {\r\n basedOn: KnowledgebaseSuggestionsBasedOn;\r\n query: string;\r\n }\r\n\r\n export enum KnowledgebaseSuggestionsBasedOn {\r\n Chat = 0,\r\n Email\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'knowledgebase',\r\n templateUrl: 'CustomerService/KnowledgebaseComponent/Knowledgebase.html',\r\n bindings: {\r\n searchQuery: '@',\r\n suggestionsQuery: '<',\r\n faqActions: '<',\r\n onFaqSelected: '&',\r\n onClose: '&',\r\n subscribedTargetgroups: '<'\r\n }\r\n })\r\n @Inject('$mdDialog', 'FaqResource', 'ThesaurusResource', 'LocalStorageService', 'TargetGroupResource')\r\n export class KnowledgebaseComponent {\r\n public searchQuery: string;\r\n public suggestionsQuery: KnowledgebaseSuggestionsInput;\r\n public onFaqSelected: (params: OnSelectedParam) => void;\r\n public onClose: () => void;\r\n public faqActions: ButtonDefinition[] = [];\r\n public faqs: PagedItemsModel;\r\n public tags: ThesaurusTagModel[] = [];\r\n public selectedFaqId: System.Guid;\r\n public selectedTag: ThesaurusTagModel;\r\n public newFaq: FaqModel;\r\n public loadingTags: boolean;\r\n public loadingFaqs: boolean;\r\n public targetGroupChoices: { [id: string]: FaqTargetGroupModel } = {};\r\n public targetGroupAnswers: { [id: string]: string } = {};\r\n public recentFaqs: FaqModel[] = [];\r\n public suggestedFaqs: FaqModel[] = []; \r\n public suggestionsTitle: string = '';\r\n public subscribedTargetgroups: TargetGroupModel[];\r\n public answersForSubscribedTargetGroups: FaqTargetGroupModel[] = [];\r\n public answersForUnsubscribedTargetGroups: FaqTargetGroupModel[] = [];\r\n private pendingSuggestionsUpdate: boolean;\r\n private page = 0;\r\n private pageSize = 10;\r\n private faqAnswerSelected: boolean;\r\n private maxSuggestedFaqs = 5;\r\n\r\n constructor(\r\n private $mdDialog,\r\n private faqResource: FaqResourceClass,\r\n private thesaurusResource: ThesaurusResource,\r\n private localStorageService: LocalStorageService,\r\n private targetGroupResource: Umbrella.Modules.Knowledgebase.TargetGroup.TargetGroupResourceClass\r\n ) {}\r\n\r\n public $onInit() {\r\n if (!this.subscribedTargetgroups) this.subscribedTargetgroups = [];\r\n\r\n this.initializeSuggestions(); \r\n if (this.searchQuery) {\r\n this.search(this.searchQuery);\r\n return;\r\n }\r\n\r\n this.loadRootItems();\r\n }\r\n\r\n $onChanges(bindings: { suggestionsQuery: IBindingChange }) {\r\n if (bindings.suggestionsQuery && bindings.suggestionsQuery.currentValue) {\r\n this.pendingSuggestionsUpdate = true;\r\n }\r\n }\r\n\r\n public async initializeSuggestions(): Promise {\r\n if (this.suggestionsQuery) {\r\n switch (this.suggestionsQuery.basedOn) {\r\n case KnowledgebaseSuggestionsBasedOn.Chat:\r\n this.suggestionsTitle = 'Voorgestelde vragen op basis van chat gesprek';\r\n break;\r\n default:\r\n this.suggestionsTitle = 'Voorgestelde vragen';\r\n }\r\n await this.generateSuggestions(this.suggestionsQuery.query);\r\n }\r\n\r\n if (!this.suggestionsQuery || this.suggestedFaqs.length < 1) {\r\n const promise = this.loadRecentFaqs(); \r\n if (promise)\r\n await promise.finally(() => this.suggestedFaqs = this.recentFaqs);\r\n else \r\n this.suggestedFaqs = [];\r\n\r\n await this.loadMostViewedFaqs();\r\n }\r\n }\r\n\r\n public loadRootItems(): void {\r\n this.reset();\r\n this.loadTags();\r\n }\r\n\r\n public selectFaq(faq: FaqModel | AdminFaqModel): void {\r\n if (!faq) return;\r\n\r\n if (faq.targetGroupAnswers) {\r\n const ids = faq.targetGroupAnswers.map(x => x.targetGroupId);\r\n this.targetGroupResource.getByIds({ ids: ids }).$promise.then(data => {\r\n data.forEach(x => {\r\n this.targetGroupAnswers[x.id.toString()] = x.name;\r\n });\r\n });\r\n }\r\n\r\n this.selectedFaqId = this.selectedFaqId === faq.id ? null : faq.id;\r\n\r\n if (!this.selectedFaqId) return;\r\n\r\n this.answersForSubscribedTargetGroups = this.getAnswersForSubscribedTargetGroups(faq);\r\n this.answersForUnsubscribedTargetGroups = this.getAnswersForUnsubscribedTargetGroups(faq);\r\n\r\n // tslint:disable-next-line:no-string-literal\r\n const faqStatus = faq['status'] || PublicationStatus.Published;\r\n if (GetEnumValueAsNumber(PublicationStatus, faqStatus) === PublicationStatus.Published)\r\n this.faqResource.increaseViewCount({ id: this.selectedFaqId });\r\n\r\n const tag = this.getSelectedTag();\r\n this.onFaqSelected({ faq, tag });\r\n }\r\n\r\n public selectTag(tag: ThesaurusTagModel): void {\r\n if (!tag) return;\r\n\r\n this.reset();\r\n this.selectedTag = tag;\r\n\r\n this.loadTags(tag.id);\r\n this.loadFaqs(tag.id);\r\n }\r\n\r\n public putInRecentFaqs(faq: FaqModel): void {\r\n const faqFoundInRecents = this.recentFaqs.filter(x => x.id === faq.id);\r\n if (faqFoundInRecents.length > 0) {\r\n this.recentFaqs = this.recentFaqs.filter(x => x.id !== faq.id);\r\n } else if (this.recentFaqs) {\r\n this.recentFaqs = this.recentFaqs.slice(0, this.maxSuggestedFaqs - 1);\r\n }\r\n this.recentFaqs.unshift(faq);\r\n\r\n this.localStorageService.store('KnowledgebaseRecentFaqs', JSON.stringify(this.recentFaqs));\r\n }\r\n\r\n public loadRecentFaqs(): ng.IPromise {\r\n var recentIds = this.getRecentFaqs().map(x => x.id);\r\n if (recentIds && recentIds.length > 0) { \r\n return this.faqResource.getByIds({ ids: recentIds.join(',') })\r\n .$promise\r\n .then((faqs) => {\r\n this.recentFaqs = faqs.sort((a, b) => recentIds.indexOf(a.id) - recentIds.indexOf(b.id));\r\n this.localStorageService.store('KnowledgebaseRecentFaqs', JSON.stringify(faqs));\r\n });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public async loadMostViewedFaqs(): Promise {\r\n var additionalFaqsToLoad = this.maxSuggestedFaqs - this.suggestedFaqs.length;\r\n if(additionalFaqsToLoad > 0)\r\n {\r\n const models = await this.faqResource.getOrderedByViewCount({ count: additionalFaqsToLoad}).$promise;\r\n this.suggestedFaqs.push(...models);\r\n }\r\n }\r\n\r\n public getRecentFaqs(): any {\r\n const storedRecentFaqs = this.localStorageService.get('KnowledgebaseRecentFaqs');\r\n const parsedRecentFaqs = JSON.parse(storedRecentFaqs);\r\n return parsedRecentFaqs && parsedRecentFaqs.length > 0 ? parsedRecentFaqs : [];\r\n }\r\n\r\n public getSelectedTag(): ThesaurusTagModel {\r\n return this.isInSearchMode() ? null : this.selectedTag;\r\n }\r\n\r\n public getSelectedFaqTargetGroup(): FaqTargetGroupModel {\r\n if (this.faqAnswerSelected) return null;\r\n\r\n return (\r\n this.targetGroupChoices[String(this.selectedFaqId)] ||\r\n (this.answersForSubscribedTargetGroups &&\r\n this.answersForSubscribedTargetGroups.length > 0 &&\r\n this.answersForSubscribedTargetGroups[0])\r\n );\r\n }\r\n\r\n public registerFaq(tag: ThesaurusTagModel) {\r\n if (!tag || !tag.parent) return;\r\n\r\n this.$mdDialog\r\n .show({\r\n template: ``,\r\n locals: {\r\n tag\r\n },\r\n controller: [\r\n '$scope',\r\n 'tag',\r\n ($scope, tag) => {\r\n $scope.tag = tag;\r\n }\r\n ],\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n })\r\n .then(faq => {\r\n this.newFaq = faq;\r\n this.selectedFaqId = faq.id;\r\n });\r\n }\r\n\r\n public applySearch = debounce(\r\n (query: string) => {\r\n this.reset();\r\n this.search(query);\r\n },\r\n 500,\r\n false\r\n );\r\n\r\n public isInSearchMode(): boolean {\r\n return !!(this.searchQuery && this.searchQuery.length);\r\n }\r\n\r\n public isLoadMoreVisible(): boolean {\r\n return this.faqs && !this.loadingFaqs && this.getTotalRemainingFaqCount() > 0;\r\n }\r\n\r\n public getTotalRemainingFaqCount(): number {\r\n if (!this.faqs || !this.faqs.items) return 0;\r\n\r\n return this.faqs.total - this.faqs.items.length;\r\n }\r\n\r\n public getNextRemainingFaqCount(): number {\r\n if (!this.faqs || !this.faqs.items) return 0;\r\n\r\n return Math.min(this.faqs.pageSize, this.getTotalRemainingFaqCount());\r\n }\r\n\r\n public loadMore(): void {\r\n this.page += 1;\r\n\r\n if (this.searchQuery && this.searchQuery.length) this.search(this.searchQuery);\r\n else if (this.selectedTag) this.loadFaqs(this.selectedTag.id);\r\n }\r\n\r\n public hasTargetGroupContent(faq: FaqModel): boolean {\r\n return faq.targetGroupAnswers.length > 0;\r\n }\r\n\r\n public selectTargetGroupForFaq(faq: FaqModel, targetGroupAnswer?: FaqTargetGroupModel): void {\r\n if (!targetGroupAnswer) {\r\n delete this.targetGroupChoices[String(faq.id)];\r\n this.faqAnswerSelected = true;\r\n return;\r\n }\r\n\r\n this.targetGroupChoices[String(faq.id)] = targetGroupAnswer;\r\n this.faqAnswerSelected = false;\r\n }\r\n\r\n public isTargetGroupSelected(faq: FaqModel, targetGroupAnswer?: FaqTargetGroupModel): boolean {\r\n const savedTargetGroupInfo = this.targetGroupChoices && this.targetGroupChoices[String(faq.id)];\r\n\r\n if (!targetGroupAnswer && !savedTargetGroupInfo) return true;\r\n\r\n if (\r\n savedTargetGroupInfo &&\r\n targetGroupAnswer &&\r\n savedTargetGroupInfo.targetGroupId === targetGroupAnswer.targetGroupId\r\n )\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n public getFaqAnswer(faq: FaqModel): string {\r\n const savedTargetGroupInfo = this.targetGroupChoices && this.targetGroupChoices[String(faq.id)];\r\n return (savedTargetGroupInfo && savedTargetGroupInfo.answer) || faq.answer;\r\n }\r\n\r\n public getAnswersForSubscribedTargetGroups(faq: FaqModel): FaqTargetGroupModel[] {\r\n const targetGroupsLinkedToPerson = this.subscribedTargetgroups;\r\n const targetGroupAnswers = faq && faq.targetGroupAnswers;\r\n\r\n if (!targetGroupAnswers || !targetGroupsLinkedToPerson.length) return [];\r\n\r\n return targetGroupAnswers.filter(\r\n x => targetGroupsLinkedToPerson.map(x => x.id).indexOf(x.targetGroupId) >= 0\r\n );\r\n }\r\n\r\n public getAnswersForUnsubscribedTargetGroups(faq: FaqModel): FaqTargetGroupModel[] {\r\n const targetGroupsLinkedToPerson = this.subscribedTargetgroups;\r\n const targetGroupAnswers = faq && faq.targetGroupAnswers;\r\n\r\n if (!targetGroupAnswers) return [];\r\n\r\n if (!targetGroupsLinkedToPerson.length) return targetGroupAnswers;\r\n\r\n return targetGroupAnswers.filter(\r\n x => targetGroupsLinkedToPerson.map(x => x.id).indexOf(x.targetGroupId) == -1\r\n );\r\n }\r\n\r\n public supplementAnswerWithTargetGroupInfoText(answer: string, targetGroupName: string): string {\r\n return `${answer}\r\n

    Je leest het antwoord voor de doelgroep ${targetGroupName}. Lees het antwoord voor:

    `;\r\n }\r\n\r\n public executeFaqAction(faq: FaqModel, action: ButtonDefinition) {\r\n this.putInRecentFaqs(faq);\r\n const faqTargetGroup = this.getSelectedFaqTargetGroup();\r\n action.onExecute(faq, this.getSelectedTag(), faqTargetGroup && faqTargetGroup.targetGroupId);\r\n }\r\n\r\n private async search(searchQuery: string): Promise {\r\n if (!searchQuery || !searchQuery.length) {\r\n this.loadRootItems();\r\n return;\r\n }\r\n\r\n this.loadingFaqs = true;\r\n const model = await this.faqResource.search({\r\n q: searchQuery,\r\n page: this.page,\r\n pageSize: this.pageSize,\r\n getFaqsWithoutItems: true,\r\n targetGroups: this.subscribedTargetgroups.map(x => x.id)\r\n }).$promise;\r\n this.loadingFaqs = false;\r\n\r\n if (!model || !model.items) return;\r\n\r\n this.updateFaqList(model);\r\n }\r\n\r\n public async generateSuggestions(suggestionsQuery: string, limit = 5): Promise {\r\n if (!suggestionsQuery || !suggestionsQuery.length) return;\r\n\r\n this.loadingFaqs = true;\r\n this.pendingSuggestionsUpdate = false;\r\n const model = await this.faqResource.similar({\r\n content: suggestionsQuery,\r\n page: 0,\r\n pageSize: limit,\r\n targetGroups: []\r\n }).$promise;\r\n this.loadingFaqs = false;\r\n\r\n const suggestions = model.items;\r\n\r\n for (let i = suggestions.length - 1; i >= 0; i--) {\r\n const faqAlreadyInList = this.suggestedFaqs.filter(x => x.id === suggestions[i].id);\r\n\r\n if (faqAlreadyInList.length > 0)\r\n this.suggestedFaqs = this.suggestedFaqs.filter(x => x.id !== suggestions[i].id);\r\n\r\n this.suggestedFaqs.unshift(suggestions[i]);\r\n }\r\n\r\n if (this.suggestedFaqs.length > limit) this.suggestedFaqs = this.suggestedFaqs.slice(0, limit);\r\n }\r\n\r\n public isOnStartPage(): boolean {\r\n return (!this.selectedTag || this.selectedTag === null) && !this.isInSearchMode();\r\n }\r\n\r\n public cancelSearch() {\r\n this.searchQuery = '';\r\n this.reset();\r\n }\r\n\r\n private async loadTags(parentTagId?: System.Guid): Promise {\r\n this.loadingTags = true;\r\n\r\n if (!parentTagId && this.pendingSuggestionsUpdate) this.initializeSuggestions();\r\n\r\n this.tags = await this.thesaurusResource.forParent({\r\n id: parentTagId\r\n }).$promise;\r\n this.loadingTags = false;\r\n }\r\n\r\n private async loadFaqs(tagId: System.Guid): Promise {\r\n this.loadingFaqs = true;\r\n const model = await this.faqResource.getByTagIdPaged({\r\n id: tagId,\r\n page: this.page,\r\n pageSize: this.pageSize\r\n }).$promise;\r\n this.loadingFaqs = false;\r\n\r\n if (!model || !model.items) return;\r\n\r\n this.updateFaqList(model);\r\n }\r\n\r\n private updateFaqList(model: PagedItemsModel): void {\r\n if (!this.faqs) {\r\n this.faqs = model;\r\n return;\r\n }\r\n\r\n this.faqs = {\r\n ...this.faqs,\r\n page: model.page,\r\n items: [...this.faqs.items, ...model.items]\r\n };\r\n }\r\n\r\n private reset(): void {\r\n this.page = 0;\r\n this.faqs = null;\r\n this.tags = [];\r\n this.selectedTag = null;\r\n this.selectedFaqId = null;\r\n this.newFaq = null;\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n @Component('CustomerService', {\r\n selector: 'multiline-prompt-dialog',\r\n bindings: {\r\n theme: '@',\r\n title: '@',\r\n textContent: '@',\r\n placeholder: '@?',\r\n ariaLabel: '@',\r\n maxRows: '@?',\r\n cancelText: '@?',\r\n confirmText: '@?',\r\n required: '<'\r\n },\r\n templateUrl:\r\n '/CustomerService/MultiLinePromptDialogComponent/MultiLinePromptDialog.html'\r\n })\r\n @Inject('$mdDialog')\r\n export class MultiLinePromptDialogComponent {\r\n public defaultTheme = 'umb-blue';\r\n public maxRows = 3;\r\n public cancelText = 'Annuleren';\r\n public confirmText = 'Bevestigen';\r\n public result: string;\r\n\r\n constructor(private $mdDialog) {}\r\n\r\n public cancel(): void {\r\n this.$mdDialog.cancel();\r\n }\r\n\r\n public confirm(): void {\r\n this.$mdDialog.hide(this.result);\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import PhoneService = Modules.Telephony.PhoneService;\r\n import StatusModel = Umbrella.Modules.Colleagues.StatusModel;\r\n import PresenceResource = Umbrella.IPresenceResource;\r\n\r\n @Component('CustomerService', {\r\n selector: 'profile-with-popup',\r\n templateUrl:\r\n 'CustomerService/ProfileWithPopupComponent/ProfileWithPopup.html',\r\n bindings: {\r\n person: '<',\r\n personId: '<',\r\n personName: '@',\r\n position: '@',\r\n extended: '<',\r\n description: '<'\r\n }\r\n })\r\n @Inject('PersonResource', 'PhoneService', 'PresenceResource', '$state')\r\n export class ProfileWithPopupComponent {\r\n public person: PersonModel;\r\n public personName: string;\r\n public position: string;\r\n public extended: boolean;\r\n public description: string;\r\n public phoneNumbers: Modules.Telephony.ContactPhoneNumberModel[];\r\n public emailAddresses: EmailAddressModel[];\r\n public availabilityStatus: StatusModel;\r\n public isOnSelectedPersonCustomerCard: boolean;\r\n private personId: Guid;\r\n private loaded: boolean;\r\n\r\n constructor(\r\n private personResource: PersonResource,\r\n private phoneService: PhoneService,\r\n private presenceResource: PresenceResource,\r\n private $state: ng.ui.IStateService\r\n ) {}\r\n\r\n public async openMenu($mdMenu) {\r\n if (!this.loaded) await this.load();\r\n $mdMenu.open();\r\n }\r\n\r\n public callNr(nr: string): void {\r\n this.phoneService.callNr(nr);\r\n }\r\n\r\n private async load() {\r\n if (!this.person && this.personId) {\r\n this.person = await this.personResource.getById({\r\n id: this.personId\r\n }).$promise;\r\n }\r\n\r\n this.getPhoneNumbers();\r\n this.getEmailAddresses();\r\n this.getPosition();\r\n await this.getAvailabilityStatus(this.personId);\r\n this.getSpawnPath();\r\n\r\n this.loaded = true;\r\n }\r\n\r\n private getPhoneNumbers() {\r\n const contactDetails = this.person && this.person.contactDetails;\r\n this.phoneNumbers = contactDetails && contactDetails.phoneNumbers;\r\n }\r\n\r\n private getEmailAddresses() {\r\n const contactDetails = this.person && this.person.contactDetails;\r\n this.emailAddresses =\r\n contactDetails && contactDetails.emailAddresses;\r\n }\r\n\r\n private getPosition() {\r\n switch (this.position) {\r\n case 'left':\r\n this.position = 'right'; // switched because of the way mdMenu works\r\n break;\r\n case 'right':\r\n this.position = 'left';\r\n break;\r\n case 'top':\r\n this.position = 'top';\r\n break;\r\n default:\r\n this.position = 'bottom';\r\n break;\r\n }\r\n }\r\n\r\n private async getAvailabilityStatus(id: System.Guid): Promise {\r\n const presence = await this.presenceResource.getStatusByIds({\r\n ids: [id]\r\n }).$promise;\r\n if (!presence || !presence.length) return;\r\n\r\n this.availabilityStatus = presence[0].status;\r\n }\r\n\r\n private getSpawnPath() {\r\n const customerCardPath = 'customerservice.customercard';\r\n const isOnCustomerCard = this.$state.current.name.includes(\r\n customerCardPath\r\n );\r\n const isCustomerSelected =\r\n this.$state.params['personId'] &&\r\n this.$state.params['personId'] == this.person.id;\r\n\r\n this.isOnSelectedPersonCustomerCard =\r\n isOnCustomerCard && isCustomerSelected;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n export interface QuickMenuButtonDefinition {\r\n tooltip: string;\r\n icon: string;\r\n label: string;\r\n class: string;\r\n auth: string;\r\n action: Function;\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'quick-menu',\r\n templateUrl:\r\n 'CustomerService/QuickMenuComponent/QuickMenuComponent.html',\r\n bindings: {\r\n buttons: '<'\r\n }\r\n })\r\n export class QuickMenuComponent {\r\n public buttons: QuickMenuButtonDefinition[];\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.ColleagueCard {\r\n export interface ColleagueCardStateParams {\r\n personId: System.Guid;\r\n }\r\n\r\n angular.module('Colleagues').config([\r\n '$stateProvider',\r\n '$urlRouterProvider',\r\n ($stateProvider, $urlRouterProvider) => {\r\n $stateProvider.state('customerservice.colleaguecard', {\r\n reloadOnSearch: false,\r\n url: '/collegakaart/:personId',\r\n redirectTo: () =>\r\n window.config && window.config.facets && window.config.facets.calendar\r\n ? 'customerservice.colleaguecard.calendar'\r\n : 'customerservice.colleaguecard.activities',\r\n data: {\r\n pageTitle: 'Collegakaart'\r\n },\r\n views: {\r\n 'right@customerservice': {\r\n template: ''\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.ColleagueCard {\r\n import IMenuTab = Modules.IMenuTab;\r\n import IStateMenuTab = Modules.IStateMenuTab;\r\n import ColleagueModel = Umbrella.Modules.Colleagues.ColleagueModel;\r\n\r\n @Component('CustomerService', {\r\n selector: 'colleaguecard-menu',\r\n template: `\r\n
    \r\n `,\r\n bindings: {\r\n colleague: '<'\r\n }\r\n })\r\n @Inject('$stateParams', 'ColleagueResource')\r\n class ColleagueCardMenuComponent {\r\n public tabs: IMenuTab[];\r\n public colleague: ColleagueModel.Detailed;\r\n\r\n public $onInit() {\r\n this.createTabs();\r\n }\r\n\r\n private createTabs() {\r\n this.tabs = [];\r\n if (window.config.facets.calendar)\r\n this.tabs.push({\r\n title: 'agenda',\r\n state: 'customerservice.colleaguecard.calendar'\r\n });\r\n\r\n if (window.user.permissions.customerCard) {\r\n this.tabs.push({\r\n title: 'tijdlijn',\r\n state: 'customerservice.colleaguecard.activities'\r\n });\r\n if (window.user.permissions.phoneViewColleagueHistory || (this.colleague && window.user.id === this.colleague.id)) {\r\n this.tabs.push({\r\n title: 'telefonie',\r\n state: 'customerservice.colleaguecard.telephony'\r\n });\r\n }\r\n }\r\n }\r\n\r\n private createTab(title: string, state: string): IStateMenuTab {\r\n return {\r\n title,\r\n state\r\n };\r\n }\r\n\r\n private addTab(tab: IStateMenuTab) {\r\n this.tabs.push(tab);\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Colleagues {\r\n export interface IColleagueResource\r\n extends angular.resource.IResource,\r\n Modules.Colleagues.ColleagueModel.Detailed {}\r\n export interface ISearchPagedParams extends PagedRequestParams {\r\n id?: string;\r\n }\r\n export interface ISearchPagedWithRoleParams extends ISearchPagedParams {\r\n authorizationRoleId?: System.Guid;\r\n }\r\n export interface ISearchPagedWithFunctiongroupsParams extends ISearchPagedParams {\r\n userId?: System.Guid;\r\n }\r\n\r\n export interface IGetByIdsParams {\r\n ids: System.Guid[];\r\n }\r\n\r\n export interface IGetByUnitAndTagRequestParams extends PagedRequestWithIdParams {\r\n unitId: System.Guid;\r\n }\r\n\r\n export interface IColleagueResourceClass extends angular.resource.IResourceClass {\r\n getById(params: IdRequestParams): ng.resource.IResource;\r\n getByIds(params: IGetByIdsParams): ng.resource.IResource;\r\n getAll(\r\n params: PagedRequestParams,\r\n succes?: Function,\r\n error?: Function\r\n ): PagedItemsModel;\r\n getAllWithRoles(\r\n params: PagedRequestParams,\r\n succes?: Function,\r\n error?: Function\r\n ): PagedItemsModel;\r\n getAllWithRolesByRoleId(\r\n params: ISearchPagedWithRoleParams,\r\n succes?: Function,\r\n error?: Function\r\n ): PagedItemsModel;\r\n update(model: ColleagueModel.Detailed): IColleagueResource;\r\n add(model: IColleagueResource, succes: Function, error: Function);\r\n search(\r\n params: ISearchPagedParams,\r\n succes?: Function,\r\n error?: Function\r\n ): PagedItemsModel;\r\n searchWithRoles(\r\n params: ISearchPagedWithRoleParams,\r\n succes?: Function,\r\n error?: Function\r\n ): PagedItemsModel;\r\n getColleaguesByTagId(\r\n params: PagedRequestWithIdParams\r\n ): ng.resource.IResource;\r\n getColleaguesByTagAndUnitId(\r\n params: IGetByUnitAndTagRequestParams\r\n ): ng.resource.IResource;\r\n getColleaguesAndFunctiongroups(\r\n params: ISearchPagedWithFunctiongroupsParams\r\n ): ng.resource.IResource>;\r\n }\r\n\r\n interface IResourceParams {\r\n action?: string;\r\n page?: number;\r\n pageSize?: number;\r\n id?: string;\r\n userId?: string;\r\n }\r\n\r\n class ColleagueResource {\r\n static $inject = ['$resource'];\r\n\r\n constructor(public $resource: angular.resource.IResourceService) {}\r\n\r\n getColleagueResource(): IColleagueResourceClass {\r\n return this.$resource(\r\n '/api/v1/colleague/:action/:id',\r\n {},\r\n {\r\n getById: this.getResource('GET', false, { action: '@id' }),\r\n getByIds: this.getResource('GET', true, { action: 'set' }),\r\n getAll: this.getResource('GET', false, {\r\n page: 0,\r\n pageSize: 10\r\n }),\r\n getAllWithRoles: this.getResource('GET', false, {\r\n action: 'pagedwithroles',\r\n page: 0,\r\n pageSize: 10\r\n }),\r\n getAllWithRolesByRoleId: this.getResource('GET', false, {\r\n action: 'pagedwithrolesbyroleid',\r\n page: 0,\r\n pageSize: 10\r\n }),\r\n add: this.getResource('POST', false, {}),\r\n update: this.getResource('PUT', false, {}),\r\n search: this.getResource('GET', false, {\r\n action: 'search',\r\n pageSize: 10,\r\n page: 0\r\n }),\r\n searchWithRoles: this.getResource('GET', false, {\r\n action: 'searchWithRoles',\r\n pageSize: 10,\r\n page: 0\r\n }),\r\n getColleaguesByTagId: this.getResource('GET', true, {\r\n action: 'colleaguesbytag',\r\n id: '@id',\r\n page: 0,\r\n pageSize: 5\r\n }),\r\n getColleaguesByTagAndUnitId: this.getResource('GET', true, {\r\n action: 'bytagandunitid',\r\n id: '@id',\r\n page: 0,\r\n pageSize: 5\r\n }),\r\n getColleaguesAndFunctiongroups: this.getResource('GET', false, {\r\n action: 'searchcolleaguesandfunctiongroups',\r\n id: '@id',\r\n userId: '',\r\n page: 0,\r\n pageSize: 5\r\n })\r\n }\r\n );\r\n }\r\n\r\n private getResource(\r\n method: string,\r\n isArray: boolean,\r\n params?: IResourceParams,\r\n headers?: any\r\n ): angular.resource.IActionDescriptor {\r\n return { method, isArray, params, headers };\r\n }\r\n }\r\n\r\n angular\r\n .module('Colleagues')\r\n .service('ColleagueResource', [\r\n '$resource',\r\n $resource => new ColleagueResource($resource).getColleagueResource()\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\ninterface SignalR {\r\n presenceHub: Umbrella.IPresenceHubProxy;\r\n}\r\n\r\nnamespace Umbrella {\r\n import StatusUpdateModel = Modules.Colleagues.StatusUpdateModel;\r\n\r\n export interface IPresenceHubServerResponse {\r\n done(calback: () => void): IPresenceHubServerResponse;\r\n fail(\r\n callback: (ErrorService: string) => void\r\n ): IPresenceHubServerResponse;\r\n }\r\n\r\n export interface IPresenceHubClient {\r\n update(statusUpdate: StatusUpdateModel);\r\n }\r\n\r\n export interface IPresenceHubProxy extends HubProxy {\r\n client: IPresenceHubClient;\r\n }\r\n\r\n export const colleagueStatusUpdated$ = new Rx.Subject();\r\n\r\n angular\r\n .module('Telephony')\r\n .factory('ColleagueHub', () => $.connection.presenceHub);\r\n\r\n Modules.onSignalRInitialized(() => {\r\n $.connection.presenceHub.client.update = statusUpdate => {\r\n colleagueStatusUpdated$.onNext(statusUpdate);\r\n };\r\n });\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.ColleagueCard {\r\n import ColleagueModel = Umbrella.Modules.Colleagues.ColleagueModel;\r\n import StatusModel = Umbrella.Modules.Colleagues.StatusModel;\r\n import PresenceResource = Umbrella.IPresenceResource;\r\n\r\n @Component('CustomerService', {\r\n selector: 'colleague-header',\r\n templateUrl:\r\n '/CustomerService/_ColleagueCard/ColleagueHeaderComponent/ColleagueHeader.html',\r\n bindings: {\r\n colleague: '<'\r\n }\r\n })\r\n @Inject('PresenceResource')\r\n class ColleagueHeaderComponent {\r\n public colleague: ColleagueModel.Detailed;\r\n public availabilityStatus: StatusModel;\r\n private presenceObserver: Rx.IDisposable;\r\n\r\n constructor(private presenceResource: PresenceResource) {}\r\n\r\n public $onInit() {\r\n if (!this.colleague) return;\r\n\r\n this.loadAvailabilityStatus(this.colleague.personId);\r\n this.observeAvailabilityStatus();\r\n }\r\n\r\n public $onDestroy() {\r\n if (this.presenceObserver) this.presenceObserver.dispose();\r\n\r\n this.presenceObserver = null;\r\n }\r\n\r\n private async loadAvailabilityStatus(id: System.Guid): Promise {\r\n const presence = await this.presenceResource.getStatusByIds({\r\n ids: [id]\r\n }).$promise;\r\n if (!presence || !presence.length) return;\r\n\r\n this.availabilityStatus = presence[0].status;\r\n }\r\n\r\n private observeAvailabilityStatus(): void {\r\n this.presenceObserver = colleagueStatusUpdated$\r\n .filter(x => !!x)\r\n .distinctUntilChanged()\r\n .subscribe(update => {\r\n if (this.colleague && this.colleague.id === update.userId)\r\n this.availabilityStatus = update.status;\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.ColleagueCard.Activities {\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('customerservice.colleaguecard.activities', {\r\n data: {\r\n tab: 'history',\r\n authorize: ps => ps.customerCard\r\n },\r\n url: '/history',\r\n views: {\r\n 'tab@customerservice': {\r\n template:\r\n ''\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.ColleagueCard.Activities {\r\n import PermissionsModel = Umbrella.PermissionsModel;\r\n import PagedItemsModel = Umbrella.PagedItemsModel;\r\n import ActivityModel = Umbrella.Modules.ActivityModel;\r\n import IActivityResourceClass = Umbrella.Modules.IActivityResourceClass;\r\n import ColleagueModel = Umbrella.Modules.Colleagues.ColleagueModel;\r\n import IColleagueResourceClass = Umbrella.Modules.Colleagues.IColleagueResourceClass;\r\n\r\n @Component('CustomerService', {\r\n selector: 'colleague-activities',\r\n templateUrl:\r\n '/CustomerService/_ColleagueCard/_Activities/ColleagueActivitiesComponent/ColleagueActivities.html'\r\n })\r\n @Inject('$stateParams', 'ActivityResource', 'ColleagueResource')\r\n export class ColleagueActivitiesComponent {\r\n public permissions: PermissionsModel;\r\n public loading: boolean;\r\n public loadingActivities: boolean;\r\n public activities: PagedItemsModel;\r\n public colleague: ColleagueModel.Detailed;\r\n\r\n constructor(\r\n private $stateParams: ColleagueCardStateParams,\r\n private activityResource: IActivityResourceClass,\r\n private colleagueResource: IColleagueResourceClass\r\n ) {}\r\n\r\n public $onInit() {\r\n this.permissions = window.user.permissions;\r\n this.loadColleague();\r\n this.loadActivities();\r\n }\r\n\r\n private loadColleague(): void {\r\n this.loading = true;\r\n this.colleagueResource\r\n .getById({ id: this.$stateParams.personId })\r\n .$promise.then(data => {\r\n this.colleague = data;\r\n this.loading = false;\r\n });\r\n }\r\n protected loadActivities(): void {\r\n this.loadingActivities = true;\r\n const page = this.activities ? this.activities.page + 1 : 0;\r\n const pageSize = this.activities ? this.activities.pageSize : 20;\r\n this.activityResource.getByColleagueId(\r\n { id: this.$stateParams.personId, page, pageSize },\r\n activities => {\r\n this.activities = {\r\n items: this.activities\r\n ? this.activities.items.concat(activities.items)\r\n : activities.items,\r\n total: activities.total,\r\n page: activities.page,\r\n pageSize: activities.pageSize\r\n };\r\n this.loadingActivities = false;\r\n }\r\n );\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Colleagues {\r\n export interface ICalendarResource\r\n extends angular.resource.IResource,\r\n Calendar.CalendarModel {}\r\n export interface ICalendarResourceClass\r\n extends angular.resource.IResourceClass {\r\n getAppointmentsForDay(\r\n params: ICallendarRequestParam\r\n ): ng.resource.IResource<\r\n Umbrella.Modules.Colleagues.Calendar.AppointmentModel[]\r\n >;\r\n }\r\n\r\n export interface ICallendarRequestParam {\r\n id: System.Guid;\r\n day: Date;\r\n days?: number;\r\n }\r\n\r\n class CalendarResourceBuilder {\r\n static $inject = ['$resource'];\r\n\r\n constructor(public $resource: angular.resource.IResourceService) {}\r\n\r\n getCalendarResource(): ICalendarResource {\r\n return this.$resource(\r\n '/api/v1/calendar/:action/:id',\r\n {},\r\n {\r\n getAppointmentsForDay: {\r\n method: 'GET',\r\n isArray: true,\r\n params: {\r\n action: 'forday',\r\n id: '@id',\r\n day: '@day',\r\n days: '@days'\r\n }\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n angular\r\n .module('Colleagues')\r\n .service('CalendarResource', [\r\n '$resource',\r\n $resource =>\r\n new CalendarResourceBuilder($resource).getCalendarResource()\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.ColleagueCard.Calendar {\r\n import AppointmentModel = Umbrella.Modules.Colleagues.Calendar.AppointmentModel;\r\n import IUmbrellaRootScope = Umbrella.IUmbrellaRootScope;\r\n import ICalendarResourceClass = Umbrella.Modules.Colleagues.ICalendarResourceClass;\r\n import IColleagueResourceClass = Umbrella.Modules.Colleagues.IColleagueResourceClass;\r\n import ColleagueModel = Umbrella.Modules.Colleagues.ColleagueModel;\r\n\r\n interface ColleagueCalendarTabControllerScope extends IUmbrellaRootScope {\r\n appointments: AppointmentModel[];\r\n loading: boolean;\r\n config: any;\r\n colleague: ColleagueModel.Detailed;\r\n }\r\n\r\n interface ColleagueCalendarStateParams extends ng.ui.IStateParamsService {\r\n personId: System.Guid;\r\n }\r\n\r\n @Controller('CustomerService', 'ColleagueCalendarTabController')\r\n @Inject('$scope', '$stateParams', 'ColleagueResource', 'CalendarResource', 'EmptyGuid', 'ToastMessageService')\r\n class ColleagueCalendarTabController {\r\n private nrOfDaysToLoad = 8;\r\n\r\n constructor(\r\n private $scope: ColleagueCalendarTabControllerScope,\r\n private $stateParams: ColleagueCalendarStateParams,\r\n private colleagueResource: IColleagueResourceClass,\r\n private calendarResource: ICalendarResourceClass,\r\n private emptyGuid: System.Guid,\r\n private toastMessageService: ToastMessageService\r\n ) {\r\n $scope.config = window.config;\r\n $scope.appointments = null;\r\n\r\n $scope.reloadCalendar = (day: Date) => {\r\n this.loadCalendar(this.$stateParams.personId, day, this.nrOfDaysToLoad);\r\n };\r\n\r\n this.initialize();\r\n }\r\n\r\n private initialize() {\r\n const colleagueId = this.$stateParams.personId;\r\n if (!colleagueId || colleagueId === this.emptyGuid) return;\r\n\r\n this.colleagueResource.getById({ id: colleagueId }).$promise.then(data => {\r\n this.$scope.colleague = data;\r\n });\r\n\r\n const today = new Date();\r\n this.loadCalendar(colleagueId, today, this.nrOfDaysToLoad);\r\n }\r\n\r\n private loadCalendar(colleagueId: System.Guid, day: Date, nrOfDaysToLoad: number) {\r\n const isFacetAvailable =\r\n window.config &&\r\n window.config.facets &&\r\n window.config.facets.calendar &&\r\n window.config.facets.calendar[0] &&\r\n window.config.facets.calendar[0].available;\r\n if (!isFacetAvailable) return;\r\n\r\n this.$scope.loading = true;\r\n this.calendarResource\r\n .getAppointmentsForDay({\r\n id: colleagueId,\r\n day,\r\n days: nrOfDaysToLoad\r\n })\r\n .$promise.then(data => {\r\n const convertStringsToDates = (a: AppointmentModel) =>\r\n {\r\n ...a,\r\n startTime: new Date(a.startTime.toLocaleString()),\r\n endTime: new Date(a.endTime.toLocaleString())\r\n };\r\n this.$scope.appointments = data.map(convertStringsToDates);\r\n })\r\n .catch(() =>\r\n this.toastMessageService.error('Er is een fout opgetreden bij het ophalen van de afspraken')\r\n )\r\n .finally(() => (this.$scope.loading = false));\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.ColleagueCard.Calendar {\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('customerservice.colleaguecard.calendar', {\r\n data: {\r\n tab: 'calendar',\r\n authorize: ps => ps.customerCard\r\n },\r\n url: '/calendar',\r\n views: {\r\n 'tab@customerservice': {\r\n templateUrl:\r\n '/CustomerService/_ColleagueCard/_Calendar/Tab.html',\r\n controller: 'ColleagueCalendarTabController'\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.ColleagueCard.Telephony {\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('customerservice.colleaguecard.telephony', {\r\n data: {\r\n tab: 'telephony',\r\n authorize: ps => ps.customerCard\r\n },\r\n url: '/telephony',\r\n views: {\r\n 'tab@customerservice': {\r\n template: ''\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.ColleagueCard.Telephony {\r\n import PhoneStatusSummaryModel = Umbrella.TelephonyControl.Statistics.PhoneStatusSummaryModel;\r\n import IPhoneStatusSummaryResourceClass = Umbrella.CustomerService.IPhoneStatusSummaryResourceClass;\r\n import PhoneCallRegistrationModel = Umbrella.TelephonyControl.Statistics.PhoneCallRegistrationModel;\r\n import IPhoneCallResourceClass = Umbrella.CustomerService.IPhoneCallResourceClass;\r\n import ColleagueModel = Umbrella.Modules.Colleagues.ColleagueModel;\r\n import IColleagueResourceClass = Umbrella.Modules.Colleagues.IColleagueResourceClass;\r\n import IRoleResource = Umbrella.Modules.Customers.IRoleResource;\r\n import SessionColleagueModel = Modules.Colleagues.SessionColleagueModel;\r\n\r\n interface CallWithPersonIdAndName {\r\n callDetails: PhoneCallRegistrationModel;\r\n personId?: Guid;\r\n personName: string;\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'colleague-telephony',\r\n templateUrl: '/CustomerService/_ColleagueCard/_Telephony/ColleagueTelephonyComponent/ColleagueTelephony.html'\r\n })\r\n @Inject('$stateParams', 'PhoneStatusSummaryResource', 'PhoneCallResource', 'ColleagueResource', 'RoleResource', '$state')\r\n export class ColleagueTelephonyComponent {\r\n public loading: boolean;\r\n public loadingData: boolean;\r\n public statusSummary: PhoneStatusSummaryModel[] = [];\r\n public calls: CallWithPersonIdAndName[] = [];\r\n public colleague: ColleagueModel.Detailed;\r\n public day: Date;\r\n public page = 0;\r\n public pageSize = 250;\r\n public user: SessionColleagueModel;\r\n\r\n constructor(\r\n private $stateParams: ColleagueCardStateParams,\r\n private phoneStatusSummaryResource: IPhoneStatusSummaryResourceClass,\r\n private phoneCallResource: IPhoneCallResourceClass,\r\n private colleagueResource: IColleagueResourceClass,\r\n private roleResource: IRoleResource,\r\n private $state: ng.ui.IStateService\r\n ) {}\r\n\r\n public $onInit() {\r\n this.user = window.user;\r\n\r\n this.day = new Date(Date.now());\r\n if (!this.hasPermission()) {\r\n this.$state.transitionTo('umbrella.error_401');\r\n return;\r\n }\r\n this.loadColleague(this.$stateParams.personId);\r\n }\r\n\r\n private hasPermission(): boolean {\r\n return this.user.permissions.phoneViewColleagueHistory || (this.user.id === this.$stateParams.personId);\r\n }\r\n\r\n public async update(day: Date): Promise {\r\n this.loadingData = true;\r\n this.day = new Date(day);\r\n await this.loadStatusSummary(this.day);\r\n await this.loadPhoneCalls(this.day, this.page, this.pageSize);\r\n this.loadingData = false;\r\n }\r\n\r\n public loadMore(): void {\r\n this.page += 1;\r\n this.update(this.day);\r\n }\r\n\r\n private loadColleague(personId: Guid): void {\r\n this.loading = true;\r\n this.colleagueResource.getById({ id: personId }).$promise.then(data => {\r\n this.colleague = data;\r\n this.loading = false;\r\n this.update(this.day);\r\n });\r\n }\r\n\r\n private async loadStatusSummary(day: Date): Promise {\r\n await this.phoneStatusSummaryResource\r\n .phoneStatusSummary({\r\n userId: this.colleague.personId,\r\n from: day.toYYYYMMDDString(),\r\n until: day.addDays(1).toYYYYMMDDString()\r\n })\r\n .$promise.then(data => {\r\n this.statusSummary = data;\r\n });\r\n }\r\n\r\n private async loadPhoneCalls(day: Date, page: number, pageSize: number): Promise {\r\n if (page === 0) this.calls = [];\r\n\r\n await this.phoneCallResource\r\n .phoneCalls({\r\n userId: this.colleague.personId,\r\n from: day.toYYYYMMDDString(),\r\n until: day.addDays(1).toYYYYMMDDString(),\r\n page,\r\n pageSize\r\n })\r\n .$promise.then(calls => {\r\n if (!calls || !calls.total) return;\r\n\r\n const callsWithPersonIdAndName = calls.items.map(c => {\r\n return { callDetails: c, personId: null, personName: null };\r\n });\r\n this.calls = [...this.calls, ...callsWithPersonIdAndName];\r\n\r\n const ids = Array.from(new Set(calls.items.map(d => d.roleId)));\r\n this.roleResource.getAllByIds({ ids }).$promise.then(roles => {\r\n this.calls.forEach(c => {\r\n const callRole = c.callDetails.roleId && roles.find(r => r.id === c.callDetails.roleId);\r\n c.personId = callRole && callRole.personId;\r\n c.personName = callRole && callRole.name;\r\n });\r\n });\r\n });\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.ColleagueCard.Telephony {\r\n @Pipe('CustomerService', 'isInboundCall')\r\n class IsInboundCallFilter {\r\n public transform(type: number | string): boolean {\r\n switch (type) {\r\n case 'Inbound':\r\n case 1:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService.ColleagueCard.Telephony {\r\n import PhoneStatus = Umbrella.Telephony.PhoneStatus;\r\n\r\n @Pipe('CustomerService', 'phoneStatusDescription')\r\n class PhoneStatusDescriptionFilter {\r\n public transform(status: PhoneStatus | string | number) {\r\n switch (status) {\r\n case PhoneStatus.Unavailable:\r\n case 'Unavailable':\r\n case 1:\r\n return 'Niet beschikbaar';\r\n case PhoneStatus.Available:\r\n case 'Available':\r\n case 2:\r\n return 'Beschikbaar';\r\n case PhoneStatus.Offline:\r\n case 'Offline':\r\n case 3:\r\n return 'Offline';\r\n case PhoneStatus.Busy:\r\n case 'Busy':\r\n case 4:\r\n return 'Bezet';\r\n case PhoneStatus.ACW:\r\n case 'ACW':\r\n case 5:\r\n return 'Nawerktijd';\r\n case 'Away':\r\n return 'Even weg';\r\n }\r\n\r\n return status;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.ComplexCard {\r\n import ComplexModel = Umbrella.Modules.Housing.ComplexModel;\r\n import UnitModel = Umbrella.Modules.Housing.UnitModel;\r\n import IComplexResource = Umbrella.Modules.Housing.IComplexResource;\r\n import IUnitResource = Umbrella.Modules.Housing.Units.IUnitResource;\r\n\r\n export interface ComplexCardSidebarScope {\r\n loading: boolean;\r\n complex: ComplexModel;\r\n units: UnitModel.WithCustomerAndContract[];\r\n firstunit: UnitModel.WithCustomerAndContract;\r\n }\r\n\r\n @Controller('CustomerService', 'ComplexCardSidebarController')\r\n @Inject(\r\n '$scope',\r\n '$stateParams',\r\n '$location',\r\n '$state',\r\n 'ComplexResource',\r\n 'UnitResource'\r\n )\r\n export class ComplexCardSidebarController {\r\n private complexId: System.Guid;\r\n\r\n constructor(\r\n protected $scope: ComplexCardSidebarScope,\r\n $stateParams,\r\n $location,\r\n protected $state,\r\n protected complexResource: IComplexResource,\r\n protected unitResource: IUnitResource\r\n ) {\r\n this.complexId = $stateParams.complexId;\r\n\r\n this.loadComplexData();\r\n this.loadUnits();\r\n }\r\n\r\n private async loadComplexData(): Promise {\r\n this.$scope.loading = true;\r\n this.$scope.complex = await this.complexResource.getById({\r\n id: this.complexId\r\n }).$promise;\r\n this.$scope.loading = false;\r\n }\r\n\r\n protected async loadUnits(): Promise {\r\n this.$scope.units = await this.unitResource.getAllByComplexId({\r\n id: this.complexId\r\n }).$promise;\r\n this.$scope.firstunit = this.$scope.units.length\r\n ? this.$scope.units[0]\r\n : null;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.ComplexCard {\r\n export interface ComplexCardStateParams extends ng.ui.IStateParamsService {\r\n complexId: System.Guid;\r\n }\r\n\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n '$urlRouterProvider',\r\n (\r\n $stateProvider: angular.ui.IStateProvider,\r\n $urlRouterProvider: angular.ui.IUrlRouterProvider\r\n ) => {\r\n $urlRouterProvider.when(\r\n '/complexkaart/:complexId',\r\n '/complexkaart/:complexId/tijdlijn'\r\n );\r\n\r\n $stateProvider\r\n .state('customerservice.complexcard', {\r\n abstract: true,\r\n reloadOnSearch: false,\r\n url: '/complexkaart/:complexId',\r\n data: {\r\n pageTitle: 'Complexkaart'\r\n },\r\n views: {\r\n 'right@customerservice': {\r\n templateUrl:\r\n '/CustomerService/_ComplexCard/ComplexCardSidebar.html',\r\n controller: 'ComplexCardSidebarController'\r\n }\r\n }\r\n })\r\n .state('customerservice.complexcard.units', {\r\n reloadOnSearch: false,\r\n url: '/eenheden',\r\n data: {\r\n authorize: ps => ps.customerCard\r\n },\r\n views: {\r\n 'tab@customerservice': {\r\n template: ''\r\n }\r\n }\r\n })\r\n .state('customerservice.complexcard.activities', {\r\n reloadOnSearch: false,\r\n url: '/tijdlijn?createtask',\r\n data: {\r\n authorize: ps => ps.customerCard && ps.caseRead\r\n },\r\n views: {\r\n 'tab@customerservice': {\r\n template:\r\n ''\r\n }\r\n }\r\n })\r\n .state('customerservice.complexcard.announcements', {\r\n reloadOnSearch: false,\r\n url: '/mededelingen',\r\n data: {\r\n authorize: ps => ps.customerCard && ps.announcementRead\r\n },\r\n views: {\r\n 'tab@customerservice': {\r\n template:\r\n ''\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.CustomerService.ComplexCard {\r\n @Component('CustomerService', {\r\n selector: 'complexcard-header',\r\n templateUrl:\r\n 'CustomerService/_ComplexCard/ComplexCardHeaderComponent/ComplexCardHeader.html',\r\n bindings: {\r\n complex: '<'\r\n }\r\n })\r\n class ComplexCardHeaderComponent {}\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.ComplexCard {\r\n import ComplexModel = Umbrella.Modules.Housing.ComplexModel;\r\n import IComplexResource = Umbrella.Modules.Housing.IComplexResource;\r\n import FaqModel = Modules.Knowledgebase.FaqModel;\r\n import ICaseHistoryResourceClass = Umbrella.Modules.Cases.ICaseHistoryResourceClass;\r\n import CaseHistoryModel = Umbrella.Modules.CaseHistoryModel;\r\n import ActivityRegistrationService = Umbrella.CustomerService.CustomerCard.Activities.Registration.ActivityRegistrationService;\r\n\r\n export const openComplexCardKnowledgebase$ = new Rx.Subject();\r\n\r\n @Component('CustomerService', {\r\n selector: 'complex-activities',\r\n templateUrl: 'CustomerService/_ComplexCard/_Activities/ComplexActivitiesComponent/ComplexActivities.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject(\r\n '$stateParams',\r\n '$mdDialog',\r\n 'ComplexResource',\r\n 'CaseHistoryResource',\r\n '$location',\r\n 'ActivityRegistrationService'\r\n )\r\n class ComplexActivitiesComponent {\r\n public complex: ComplexModel;\r\n public faqActions: any;\r\n public displayKnowledgebase: boolean;\r\n public cases: PagedItemsModel;\r\n public hasPermissionsToReadActivities: boolean;\r\n public loading: boolean;\r\n private page = 0;\r\n private knowledgebaseSubscription: Rx.Disposable;\r\n\r\n constructor(\r\n private $stateParams: ComplexCardStateParams,\r\n private $mdDialog,\r\n private complexResource: IComplexResource,\r\n private caseHistoryResource: ICaseHistoryResourceClass,\r\n private $location: ng.ILocationService,\r\n private activityRegistrationService: ActivityRegistrationService\r\n ) {\r\n this.knowledgebaseSubscription = openComplexCardKnowledgebase$\r\n .filter(x => !!x)\r\n .subscribe(_ => {\r\n this.openKnowledgebase();\r\n });\r\n }\r\n\r\n public $onInit() {\r\n const complexId = this.$stateParams.complexId;\r\n this.hasPermissionsToReadActivities = !!window.user.permissions.caseRead;\r\n\r\n this.loadComplex(complexId);\r\n this.loadCases(complexId);\r\n this.setFaqActionDefinitions();\r\n\r\n if (this.$stateParams.createtask) {\r\n this.openKnowledgebase();\r\n this.$location.search({});\r\n }\r\n }\r\n\r\n public $onDestroy() {\r\n if (this.knowledgebaseSubscription) this.knowledgebaseSubscription.dispose();\r\n }\r\n\r\n public setFaqActionDefinitions(): any {\r\n this.faqActions = [\r\n {\r\n name: 'Taak aanmaken',\r\n primary: true,\r\n onExecute: (faq: FaqModel) => this.registerTask(faq)\r\n }\r\n ];\r\n }\r\n\r\n public openKnowledgebase(): void {\r\n this.displayKnowledgebase = true;\r\n }\r\n\r\n public closeKnowledgebase(): void {\r\n this.displayKnowledgebase = false;\r\n }\r\n\r\n public loadMoreCases(): void {\r\n this.loadCases(this.complex.id, this.page + 1);\r\n }\r\n\r\n public registerAnnouncement(): void {\r\n if (!this.$stateParams.complexId) return;\r\n\r\n this.$mdDialog.show({\r\n template: ``,\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n });\r\n }\r\n\r\n private registerTask(faq: FaqModel): void {\r\n const complexId = (this.complex && this.complex.id) || this.$stateParams.complexId;\r\n if (!complexId || !faq || !faq.mainTag) return;\r\n\r\n this.$mdDialog\r\n .show({\r\n template: ``,\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n })\r\n .then(() => {\r\n this.closeKnowledgebase();\r\n this.loadCases(complexId);\r\n });\r\n }\r\n\r\n private async loadComplex(complexId: System.Guid): Promise {\r\n if (!complexId) return;\r\n\r\n this.complex = await this.complexResource.getById({ id: complexId }).$promise;\r\n }\r\n\r\n private async loadCases(complexId: System.Guid, page = 0, pageSize = 10): Promise {\r\n if (!complexId) return;\r\n\r\n this.loading = true;\r\n this.page = page;\r\n\r\n const cases = await this.caseHistoryResource.getByComplexId({\r\n id: complexId,\r\n page,\r\n pageSize\r\n }).$promise;\r\n if (page === 0) this.cases = cases;\r\n else {\r\n this.cases = {\r\n page,\r\n pageSize,\r\n items: [...this.cases.items, ...cases.items],\r\n total: cases.total\r\n };\r\n }\r\n\r\n this.loading = false;\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService.ComplexCard {\r\n import IMenuTab = Modules.IMenuTab;\r\n import IStateMenuTab = Modules.IStateMenuTab;\r\n import QuickMenuButtonDefinition = CustomerService.QuickMenuButtonDefinition;\r\n import openComplexCardKnowledgebase$ = Umbrella.CustomerService.ComplexCard.openComplexCardKnowledgebase$;\r\n\r\n @Inject('$stateParams', '$mdDialog', '$state')\r\n @Component('CustomerService', {\r\n selector: 'complexcard-menu',\r\n template: `\r\n
    \r\n \r\n \r\n
    \r\n `\r\n })\r\n class ComplexCardMenuComponent {\r\n public tabs: IMenuTab[];\r\n public buttons: QuickMenuButtonDefinition[];\r\n\r\n constructor(\r\n private $stateParams: ng.ui.IStateParamsService,\r\n private $mdDialog: any,\r\n private $state: ng.ui.IStateService\r\n ) {}\r\n\r\n public $onInit() {\r\n this.createTabs();\r\n this.createButtons();\r\n }\r\n\r\n public registerTask(): void {\r\n if (!this.$stateParams.complexId) return;\r\n\r\n if (this.$state.current.name === 'customerservice.complexcard.activities')\r\n openComplexCardKnowledgebase$.onNext(true);\r\n else\r\n this.$state.go('customerservice.complexcard.activities', {\r\n complexId: this.$stateParams.complexId,\r\n createtask: true\r\n });\r\n }\r\n\r\n public registerAnnouncement(): void {\r\n if (!this.$stateParams.complexId) return;\r\n\r\n this.$mdDialog.show({\r\n template: ``,\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n });\r\n }\r\n\r\n private createButtons() {\r\n this.buttons = [\r\n {\r\n tooltip: 'Nieuwe mededeling',\r\n label: 'Mededeling aanmaken',\r\n auth: 'announcementWrite',\r\n class: 'md-warn',\r\n icon: 'volume_up',\r\n action: () => this.registerAnnouncement()\r\n },\r\n {\r\n tooltip: 'Nieuwe taak',\r\n label: 'Taak aanmaken',\r\n auth: 'createTask',\r\n class: 'md-primary',\r\n icon: 'check_box',\r\n action: () => this.registerTask()\r\n }\r\n ];\r\n }\r\n\r\n private createTabs() {\r\n this.tabs = [];\r\n\r\n if (!window.user.permissions.customerCard) return;\r\n\r\n if (window.user.permissions.caseRead)\r\n this.addTab(this.createTab('Tijdlijn', 'customerservice.complexcard.activities'));\r\n\r\n this.addTab(this.createTab('Eenheden', 'customerservice.complexcard.units'));\r\n\r\n if (window.user.permissions.announcementRead)\r\n this.addTab(this.createTab('Mededelingen', 'customerservice.complexcard.announcements'));\r\n }\r\n\r\n private createTab(title: string, state: string): IStateMenuTab {\r\n return {\r\n title,\r\n state\r\n };\r\n }\r\n\r\n private addTab(tab: IStateMenuTab) {\r\n this.tabs.push(tab);\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.ComplexCard {\r\n import ComplexModel = Umbrella.Modules.Housing.ComplexModel;\r\n import IComplexResource = Umbrella.Modules.Housing.IComplexResource;\r\n import AnnouncementResourceClass = Umbrella.Modules.Announcements.AnnouncementResourceClass;\r\n import AnnouncementModel = Umbrella.Modules.Announcements.AnnouncementModel;\r\n\r\n @Component('CustomerService', {\r\n selector: 'complex-announcements',\r\n templateUrl:\r\n 'CustomerService/_ComplexCard/_Announcements/ComplexAnnouncementsComponent/ComplexAnnouncements.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('$stateParams', 'ComplexResource', 'AnnouncementResource')\r\n class ComplexAnnouncementsComponent {\r\n public complex: ComplexModel;\r\n public announcements: PagedItemsModel;\r\n public loadingAnnouncements: boolean;\r\n private page = 0;\r\n\r\n constructor(\r\n private $stateParams: ComplexCardStateParams,\r\n private complexResource: IComplexResource,\r\n private announcementResource: AnnouncementResourceClass\r\n ) {}\r\n\r\n public $onInit() {\r\n const complexId = this.$stateParams.complexId;\r\n\r\n this.loadComplex(complexId);\r\n this.loadAnnouncements();\r\n }\r\n\r\n public loadMore(): void {\r\n this.loadAnnouncements(this.page + 1);\r\n }\r\n\r\n private async loadComplex(complexId: System.Guid): Promise {\r\n if (!complexId) return;\r\n\r\n this.complex = await this.complexResource.getById({ id: complexId })\r\n .$promise;\r\n }\r\n\r\n private async loadAnnouncements(\r\n page = 0,\r\n pageSize = 10\r\n ): Promise {\r\n const complexId = this.$stateParams.complexId;\r\n if (!complexId || this.loadingAnnouncements) return;\r\n\r\n this.loadingAnnouncements = true;\r\n this.page = page;\r\n const announcements = await this.announcementResource.byComplexId({\r\n id: complexId,\r\n page,\r\n pageSize\r\n }).$promise;\r\n if (announcements) {\r\n this.announcements =\r\n page === 0\r\n ? announcements\r\n : {\r\n ...this.announcements,\r\n page,\r\n items: this.announcements.items.concat(\r\n announcements.items\r\n )\r\n };\r\n }\r\n this.loadingAnnouncements = false;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.ComplexCard {\r\n import ComplexModel = Umbrella.Modules.Housing.ComplexModel;\r\n import UnitModel = Umbrella.Modules.Housing.UnitModel;\r\n import IComplexResource = Umbrella.Modules.Housing.IComplexResource;\r\n import IUnitResource = Umbrella.Modules.Housing.Units.IUnitResource;\r\n\r\n @Component('CustomerService', {\r\n selector: 'complex-units',\r\n templateUrl:\r\n 'CustomerService/_ComplexCard/_Units/ComplexUnitsComponent/ComplexUnits.html'\r\n })\r\n @Inject('$stateParams', 'ComplexResource', 'UnitResource')\r\n class ComplexUnitsComponent {\r\n public loadingUnits: boolean;\r\n public complex: ComplexModel;\r\n public units: UnitModel.WithCustomerAndContract[];\r\n public currentYear: number;\r\n private complexId: System.Guid;\r\n\r\n constructor(\r\n private $stateParams: ComplexCardStateParams,\r\n private complexResource: IComplexResource,\r\n private unitResource: IUnitResource\r\n ) {}\r\n\r\n public $onInit() {\r\n this.currentYear = new Date().getFullYear();\r\n this.complexId = this.$stateParams.complexId;\r\n\r\n this.loadComplex();\r\n this.loadUnits();\r\n }\r\n\r\n private async loadComplex(): Promise {\r\n this.complex = await this.complexResource.getById({\r\n id: this.complexId\r\n }).$promise;\r\n }\r\n\r\n private async loadUnits(): Promise {\r\n this.loadingUnits = true;\r\n this.units = await this.unitResource.getAllByComplexId({\r\n id: this.complexId\r\n }).$promise;\r\n this.loadingUnits = false;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard {\r\n @Service('CustomerService', 'CustomerCardAccountInfoService')\r\n @Inject('AccountResource', 'CustomerCardStore')\r\n export class CustomerCardAccountInfoService {\r\n constructor(\r\n private accountResource: Modules.Accounts.AccountResource,\r\n private customerCardStore: CustomerCardStore\r\n ) {}\r\n\r\n public load(personId: System.Guid): void {\r\n this.emit({ type: 'CustomerCardAccountLoadingEvent', personId });\r\n\r\n this.accountResource\r\n .getByPersonId({ id: personId })\r\n .$promise.then(account => {\r\n this.emit({\r\n type: 'CustomerCardAccountLoadedEvent',\r\n account\r\n });\r\n })\r\n .catch(e =>\r\n this.emit({\r\n type: 'CustomerCardAccountLoadErrorEvent',\r\n error: e\r\n })\r\n );\r\n }\r\n\r\n private emit(e: CustomerCardEvent) {\r\n this.customerCardStore.event$.onNext(e);\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard {\r\n @Service('CustomerService', 'CustomerCardCustomerInfoService')\r\n @Inject('CustomerResource', 'CustomerCardStore')\r\n export class CustomerCardCustomerInfoService {\r\n constructor(\r\n private customerResource: Modules.Customers.ICustomerResource,\r\n private customerCardStore: CustomerCardStore\r\n ) {\r\n const customerId = (x: CustomerCardState) =>\r\n x &&\r\n x.personal &&\r\n x.personal.person &&\r\n x.personal.person.roles &&\r\n (x.personal.person.roles).customer;\r\n\r\n this.customerCardStore.state$\r\n .map(customerId)\r\n .distinctUntilChanged()\r\n .subscribe(customerId => {\r\n if (customerId != null)\r\n this.load(customerId);\r\n else\r\n this.remove();\r\n });\r\n }\r\n\r\n public remove(): void {\r\n this.emit({\r\n type: 'CustomerCardCustomerLoadedEvent',\r\n customer: null\r\n });\r\n }\r\n\r\n public load(id: System.Guid): void {\r\n this.emit({ type: 'CustomerCardCustomerLoadingEvent', id });\r\n\r\n this.customerResource\r\n .getDetailed({ id })\r\n .$promise.then(customer => {\r\n this.emit({\r\n type: 'CustomerCardCustomerLoadedEvent',\r\n customer\r\n });\r\n })\r\n .catch(e =>\r\n this.emit({\r\n type: 'CustomerCardCustomerLoadErrorEvent',\r\n error: e\r\n })\r\n );\r\n }\r\n\r\n private emit(e: CustomerCardEvent) {\r\n this.customerCardStore.event$.onNext(e);\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard {\r\n import PhoneType = Modules.Telephony.PhoneType;\r\n\r\n @Service('CustomerService', 'CustomerCardPersonInfoService')\r\n @Inject('PersonResource', 'AdminPersonResource', 'CustomerCardStore', 'EmptyGuid', 'SynchronizedObjectResource')\r\n export class CustomerCardPersonInfoService {\r\n constructor(\r\n private personResource: PersonResource,\r\n private adminPersonResource: AdminPersonResource,\r\n private customerCardStore: CustomerCardStore,\r\n private emptyGuid: System.Guid,\r\n private synchronizedObjectResource: SynchronizedObjectResource\r\n ) {}\r\n\r\n public load(id: System.Guid): ng.IPromise {\r\n this.emit({ type: 'CustomerCardPersonLoadingEvent', id });\r\n\r\n const promise = this.personResource.getById({ id }).$promise;\r\n\r\n promise\r\n .then(person => {\r\n this.addEmptyPhoneNumbersEmailAddressAndPostalAddressWhenNotAvailable(person);\r\n this.makeAddressTypeNumericToGuaranteeFixedSorting(person);\r\n this.emit({\r\n type: 'CustomerCardPersonLoadedEvent',\r\n person\r\n });\r\n })\r\n .catch(e =>\r\n this.emit({\r\n type: 'CustomerCardPersonLoadErrorEvent',\r\n error: e\r\n })\r\n );\r\n\r\n this.loadWritablePersonFields(id);\r\n this.loadSynchronizedObjects(id);\r\n\r\n return promise;\r\n }\r\n\r\n private loadSynchronizedObjects(personid: System.Guid) : void {\r\n this.synchronizedObjectResource.byEntityAndId({entitytype: 'Person', entityid: personid}).$promise\r\n .then(data =>\r\n this.emit({\r\n type: 'CustomerCardPersonSynchronizedObjectsLoadedEvent',\r\n personIsDeletable: data && data.length === 0\r\n })\r\n ).catch(err => console.log(err));\r\n }\r\n\r\n private loadWritablePersonFields(id: System.Guid): void {\r\n this.personResource.getWritableFields({ id }).$promise.then((response: WritablePersonDataFieldsModel) => {\r\n this.emit({\r\n type: 'CustomerCardPersonWritableFieldsLoadedEvent',\r\n fields: response\r\n });\r\n });\r\n }\r\n\r\n public unload(id: System.Guid): void {\r\n this.emit({ type: 'CustomerCardPersonUnloadedEvent', id: id });\r\n }\r\n\r\n public update(model: PersonModel): ng.IPromise {\r\n this.emit({ type: 'CustomerCardPersonUpdatingEvent' });\r\n\r\n // HACK: Remove empty addresses to prevent FieldNotWritableErrors in the server for connectors not supporting postal addresses\r\n const isEmptyAddress = x => x.city === '' && x.houseNumber === 0;\r\n model.contactDetails.addresses = model.contactDetails.addresses.filter(x => !isEmptyAddress(x));\r\n\r\n // HACK: Remove empty phonenumbers to prevent FieldNotWritableErrors in the server for connectors not supporting PhonyType Unknown\r\n const isEmptyPhoneNr = x => x.number === '' && x.original === '';\r\n model.contactDetails.phoneNumbers = model.contactDetails.phoneNumbers.filter(x => !isEmptyPhoneNr(x));\r\n\r\n const promise = this.personResource.update(model).$promise;\r\n\r\n promise\r\n .then(person => {\r\n this.addEmptyPhoneNumbersEmailAddressAndPostalAddressWhenNotAvailable(person);\r\n this.makeAddressTypeNumericToGuaranteeFixedSorting(person);\r\n this.emit({\r\n type: 'CustomerCardPersonUpdatedEvent',\r\n person\r\n });\r\n })\r\n .catch(e =>\r\n this.emit({\r\n type: 'CustomerCardPersonUpdateErrorEvent',\r\n error: e\r\n })\r\n );\r\n\r\n return promise;\r\n }\r\n\r\n public updateCharacteristics(model: PersonModel): ng.IPromise {\r\n this.emit({ type: 'CustomerCardPersonUpdatingEvent' });\r\n\r\n const promise = this.adminPersonResource.update(model).$promise;\r\n\r\n promise\r\n .then(person => {\r\n this.addEmptyPhoneNumbersEmailAddressAndPostalAddressWhenNotAvailable(person);\r\n this.makeAddressTypeNumericToGuaranteeFixedSorting(person);\r\n this.emit({\r\n type: 'CustomerCardPersonUpdatedEvent',\r\n person\r\n });\r\n })\r\n .catch(e =>\r\n this.emit({\r\n type: 'CustomerCardPersonUpdateErrorEvent',\r\n error: e\r\n })\r\n );\r\n\r\n return promise;\r\n }\r\n\r\n public getSelectedPerson(): PersonModel {\r\n const state = this.customerCardStore.getState();\r\n return state && state.personal && state.personal.person;\r\n }\r\n\r\n /**\r\n * Add empty fields to make editting easier and to prevent business rules in presentation components\r\n * NOTE: DELIBERATELY NOT ADD HOME ADDRESS WHEN IT'S NOT AVAILABLE; SOME CORPORATIONS DO NOT USE HOME ADDRESSES\r\n */\r\n public addEmptyPhoneNumbersEmailAddressAndPostalAddressWhenNotAvailable(person: PersonModel) {\r\n if (!person.contactDetails) return;\r\n\r\n if (!person.contactDetails.phoneNumbers.length)\r\n person.contactDetails.phoneNumbers.push({\r\n type: PhoneType.Unknown,\r\n number: '',\r\n original: '',\r\n description: 'Telefoon 1',\r\n hyphenated: ''\r\n });\r\n\r\n if (person.contactDetails.phoneNumbers.length === 1)\r\n person.contactDetails.phoneNumbers.push({\r\n type: PhoneType.Unknown,\r\n number: '',\r\n original: '',\r\n description: 'Telefoon 2',\r\n hyphenated: ''\r\n });\r\n\r\n if (!person.contactDetails.emailAddresses.length)\r\n person.contactDetails.emailAddresses.push({\r\n email: '',\r\n description: 'E-mailadres',\r\n properties: EmailAddressProperties.None\r\n });\r\n\r\n if (\r\n !person.contactDetails.addresses ||\r\n !person.contactDetails.addresses.filter(\r\n x => x.type === Umbrella.Modules.AddressType.Postal || x.type.toString() === 'Postal'\r\n ).length\r\n )\r\n person.contactDetails.addresses = [\r\n ...person.contactDetails.addresses,\r\n {\r\n addressLine: '',\r\n city: '',\r\n country: '',\r\n fullAddressLine: '',\r\n houseNumber: 0,\r\n houseNumberExtension: '',\r\n street: '',\r\n type: Umbrella.Modules.AddressType.Postal,\r\n zipCode: '',\r\n id: this.emptyGuid,\r\n lines: '',\r\n isEditable: true\r\n }\r\n ];\r\n }\r\n\r\n public delete(personId: System.Guid): ng.IPromise {\r\n return this.personResource.delete({ id: personId }).$promise;\r\n }\r\n\r\n private makeAddressTypeNumericToGuaranteeFixedSorting(person: PersonModel) {\r\n for (const address of person.contactDetails.addresses) {\r\n if (address.type.toString() === 'Home') address.type = Umbrella.Modules.AddressType.Home;\r\n if (address.type.toString() === 'Postal') address.type = Umbrella.Modules.AddressType.Postal;\r\n }\r\n }\r\n\r\n private emit(e: CustomerCardEvent) {\r\n this.customerCardStore.event$.onNext(e);\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard {\r\n import ChannelType = Modules.ChannelType;\r\n import SelfServiceScenarioModel = Umbrella.Modules.SelfService.SelfServiceScenarioModel;\r\n import ThesaurusTagModel = Umbrella.Modules.Knowledgebase.ThesaurusTagModel;\r\n import ContractFilterModel = Modules.Housing.ContractFilterModel;\r\n\r\n export namespace Sidebar {\r\n export interface InitializePanelStateEvent {\r\n readonly type: 'InitializePanelStateEvent';\r\n readonly contractorPanelCollapsed: boolean;\r\n readonly contractPanelCollapsed: boolean;\r\n readonly contactPanelCollapsed: boolean;\r\n }\r\n\r\n export interface ToggleContractorPanelEvent {\r\n readonly type: 'ToggleContractorPanelEvent';\r\n }\r\n\r\n export interface ToggleContractPanelEvent {\r\n readonly type: 'ToggleContractPanelEvent';\r\n }\r\n\r\n export interface ToggleContactPanelEvent {\r\n readonly type: 'ToggleContactPanelEvent';\r\n }\r\n\r\n export interface State {\r\n contractorPanelCollapsed: boolean;\r\n contractPanelCollapsed: boolean;\r\n contactPanelCollapsed: boolean;\r\n }\r\n\r\n export function set(s: CustomerCardState, replacement: State): CustomerCardState {\r\n return {\r\n ...s,\r\n sidebar: replacement\r\n };\r\n }\r\n }\r\n\r\n export namespace Personal {\r\n export interface LoadingEvent {\r\n readonly type: 'CustomerCardPersonLoadingEvent';\r\n readonly id: System.Guid;\r\n }\r\n\r\n export interface LoadedEvent {\r\n readonly type: 'CustomerCardPersonLoadedEvent';\r\n readonly person: PersonModel;\r\n }\r\n\r\n export interface LoadErrorEvent {\r\n readonly type: 'CustomerCardPersonLoadErrorEvent';\r\n readonly error: any;\r\n }\r\n\r\n export interface UnloadedEvent {\r\n readonly type: 'CustomerCardPersonUnloadedEvent';\r\n readonly id: System.Guid;\r\n }\r\n\r\n export interface UpdatingEvent {\r\n readonly type: 'CustomerCardPersonUpdatingEvent';\r\n }\r\n\r\n export interface UpdatedEvent {\r\n readonly type: 'CustomerCardPersonUpdatedEvent';\r\n readonly person: PersonModel;\r\n }\r\n\r\n export interface UpdateErrorEvent {\r\n readonly type: 'CustomerCardPersonUpdateErrorEvent';\r\n readonly error: any;\r\n }\r\n\r\n export interface WritableFieldsLoadedEvent {\r\n readonly type: 'CustomerCardPersonWritableFieldsLoadedEvent';\r\n readonly fields: WritablePersonDataFieldsModel;\r\n }\r\n\r\n export interface PersonSynchronizedObjectsLoadedEvent {\r\n readonly type: 'CustomerCardPersonSynchronizedObjectsLoadedEvent';\r\n readonly personIsDeletable: boolean;\r\n }\r\n\r\n\r\n export interface State {\r\n readonly person: PersonModel;\r\n readonly personIsDeletable: boolean;\r\n readonly fields: WritablePersonDataFieldsModel;\r\n readonly loading: boolean;\r\n readonly updating: boolean;\r\n readonly loadError: any;\r\n }\r\n\r\n export function set(s: CustomerCardState, replacement: State): CustomerCardState {\r\n return {\r\n ...s,\r\n personal: replacement\r\n };\r\n }\r\n }\r\n\r\n export namespace AccountState {\r\n export interface LoadingEvent {\r\n readonly type: 'CustomerCardAccountLoadingEvent';\r\n readonly personId: System.Guid;\r\n }\r\n\r\n export interface LoadedEvent {\r\n readonly type: 'CustomerCardAccountLoadedEvent';\r\n readonly account: Accounts.AccountModel;\r\n }\r\n\r\n export interface LoadErrorEvent {\r\n readonly type: 'CustomerCardAccountLoadErrorEvent';\r\n readonly error: any;\r\n }\r\n\r\n export interface State {\r\n readonly account: Accounts.AccountModel;\r\n readonly loading: boolean;\r\n readonly loadError: any;\r\n }\r\n\r\n export function set(s: CustomerCardState, replacement: State): CustomerCardState {\r\n return {\r\n ...s,\r\n accountInfo: replacement\r\n };\r\n }\r\n }\r\n\r\n export namespace CustomerState {\r\n export interface LoadingEvent {\r\n readonly type: 'CustomerCardCustomerLoadingEvent';\r\n readonly id: System.Guid;\r\n }\r\n\r\n export interface LoadedEvent {\r\n readonly type: 'CustomerCardCustomerLoadedEvent';\r\n readonly customer: Modules.Customers.CustomerModel.Detailed | null;\r\n }\r\n\r\n export interface LoadErrorEvent {\r\n readonly type: 'CustomerCardCustomerLoadErrorEvent';\r\n readonly error: any;\r\n }\r\n\r\n export interface State {\r\n readonly customer: Modules.Customers.CustomerModel.Detailed;\r\n readonly loading: boolean;\r\n readonly loadError: any;\r\n }\r\n\r\n export function set(s: CustomerCardState, replacement: State): CustomerCardState {\r\n return {\r\n ...s,\r\n customerInfo: replacement\r\n };\r\n }\r\n }\r\n\r\n export namespace Contracts {\r\n import ContractModel = Umbrella.Modules.Housing.ContractModel;\r\n import OutstandingBalanceModel = Modules.Housing.OutstandingBalanceModel;\r\n import ContractorModel = Modules.Housing.ContractorModel;\r\n\r\n export interface LoadingEvent {\r\n readonly type: 'CustomerCardContractsLoadingEvent';\r\n readonly page: number;\r\n readonly pageSize: number;\r\n }\r\n\r\n export interface LoadedEvent {\r\n readonly type: 'CustomerCardContractsLoadedEvent';\r\n readonly contracts: PagedItemsModel;\r\n }\r\n\r\n export interface LoadErrorEvent {\r\n readonly type: 'CustomerCardContractsLoadErrorEvent';\r\n readonly error: any;\r\n }\r\n\r\n export interface FilteringEvent {\r\n readonly type: 'CustomerCardContractsFilteringEvent';\r\n }\r\n\r\n export interface FilteredEvent {\r\n readonly type: 'CustomerCardContractsFilteredEvent';\r\n readonly contract: ContractModel;\r\n }\r\n\r\n export interface FilterErrorEvent {\r\n readonly type: 'CustomerCardContractsFilterErrorEvent';\r\n readonly error: any;\r\n }\r\n\r\n export interface ContractorsLoadedEvent {\r\n readonly type: 'CustomerCardContractorsLoadedEvent';\r\n readonly contractors: ContractorModel[];\r\n }\r\n\r\n export interface OutstandingBalanceLoadedEvent {\r\n readonly type: 'CustomerCardOutstandingBalanceLoadedEvent';\r\n readonly outstandingBalance: OutstandingBalanceModel;\r\n }\r\n\r\n export interface State {\r\n readonly loading: boolean;\r\n readonly error: any;\r\n readonly contracts: PagedItemsModel;\r\n readonly selectedContract: ContractModel;\r\n readonly contractors: ContractorModel[];\r\n readonly outstandingBalance: OutstandingBalanceModel;\r\n }\r\n\r\n export function set(s: CustomerCardState, replacement: State): CustomerCardState {\r\n return {\r\n ...s,\r\n contractInfo: replacement\r\n };\r\n }\r\n }\r\n\r\n export namespace Announcements {\r\n export interface LoadingEvent {\r\n readonly type: 'CustomerCardAnnouncementsLoadingEvent';\r\n readonly page: number;\r\n readonly pageSize: number;\r\n readonly contractId: System.Guid;\r\n }\r\n\r\n export interface LoadedEvent {\r\n readonly type: 'CustomerCardAnnouncementsLoadedEvent';\r\n readonly announcements: PagedItemsModel;\r\n readonly contractId: System.Guid;\r\n }\r\n\r\n export interface LoadErrorEvent {\r\n readonly type: 'CustomerCardAnnouncementsLoadErrorEvent';\r\n readonly error: any;\r\n }\r\n\r\n export interface State {\r\n readonly loading: boolean;\r\n readonly error: any;\r\n readonly announcements: PagedItemsModel;\r\n readonly contractId: System.Guid;\r\n }\r\n\r\n export function set(s: CustomerCardState, replacement: State): CustomerCardState {\r\n return {\r\n ...s,\r\n announcementInfo: replacement\r\n };\r\n }\r\n }\r\n\r\n export namespace Activities {\r\n import CaseHistoryModel = Umbrella.Modules.CaseHistoryModel;\r\n import ActivityCategoryModel = Modules.ActivityCategoryModel;\r\n import StatusFilter = Umbrella.Modules.StatusFilter;\r\n\r\n export interface Filters {\r\n allActivityCategories: ActivityCategoryModel[];\r\n allScenarios: SelfServiceScenarioModel[];\r\n rootTags: ThesaurusTagModel[];\r\n query: string;\r\n activityCategory: string;\r\n contractId: System.Guid;\r\n selectedTagId: System.Guid;\r\n selectedScenarioId: System.Guid;\r\n status: StatusFilter;\r\n channel: ChannelType;\r\n }\r\n\r\n export interface LoadingEvent {\r\n readonly type: 'CustomerCardActivitiesLoadingEvent';\r\n readonly filters: Filters;\r\n readonly page: number;\r\n readonly pageSize: number;\r\n }\r\n\r\n export interface LoadedEvent {\r\n readonly type: 'CustomerCardActivitiesLoadedEvent';\r\n readonly filters: Filters;\r\n readonly cases: PagedItemsModel;\r\n }\r\n\r\n export interface LoadErrorEvent {\r\n readonly type: 'CustomerCardActivitiesLoadErrorEvent';\r\n readonly error: any;\r\n }\r\n\r\n export interface ResetEvent {\r\n readonly type: 'CustomerCardActivitiesResetEvent';\r\n }\r\n\r\n export interface CategoriesLoadedEvent {\r\n readonly type: 'CustomerCardActivityCategoriesLoadedEvent';\r\n readonly categories: ActivityCategoryModel[];\r\n }\r\n\r\n export interface AllScenariosLoaded {\r\n readonly type: 'CustomerCardAllScenariosLoadedEvent';\r\n readonly scenarios: SelfServiceScenarioModel[];\r\n }\r\n\r\n export interface RootTagsLoaded {\r\n readonly type: 'CustomerCardRootTagsLoadedEvent';\r\n readonly tags: ThesaurusTagModel[];\r\n }\r\n\r\n export interface State {\r\n readonly loading: boolean;\r\n readonly cases: PagedItemsModel;\r\n readonly contractId: System.Guid;\r\n readonly error: any;\r\n readonly filters: Filters;\r\n }\r\n\r\n export function set(s: CustomerCardState, replacement: State): CustomerCardState {\r\n return {\r\n ...s,\r\n activityInfo: replacement\r\n };\r\n }\r\n }\r\n\r\n export namespace Bills {\r\n import Payments = Umbrella.Modules.Payments;\r\n\r\n export interface LoadingEvent {\r\n readonly type: 'CustomerCardBillsLoadingEvent';\r\n readonly page: number;\r\n readonly pageSize: number;\r\n }\r\n\r\n export interface LoadedEvent {\r\n readonly type: 'CustomerCardBillsLoadedEvent';\r\n readonly bills: PagedItemsModel;\r\n }\r\n\r\n export interface LoadErrorEvent {\r\n readonly type: 'CustomerCardBillsLoadErrorEvent';\r\n readonly error: any;\r\n }\r\n\r\n export interface FilteringEvent {\r\n readonly type: 'CustomerCardBillsFilteringEvent';\r\n readonly contractId: System.Guid;\r\n readonly page: number;\r\n readonly pageSize: number;\r\n }\r\n\r\n export interface FilteredEvent {\r\n readonly type: 'CustomerCardBillsFilteredEvent';\r\n readonly contractId: System.Guid;\r\n readonly bills: PagedItemsModel;\r\n }\r\n\r\n export interface FilterErrorEvent {\r\n readonly type: 'CustomerCardBillsFilterErrorEvent';\r\n readonly error: any;\r\n }\r\n\r\n export interface FilterLoadedEvent {\r\n readonly type: 'CustomerCardBillsContractFilterLoaded';\r\n readonly contracts: ContractFilterModel[];\r\n }\r\n\r\n export interface State {\r\n readonly loading: boolean;\r\n readonly contractId: System.Guid;\r\n readonly contracts: ContractFilterModel[];\r\n readonly error: any;\r\n readonly hasMultipleContracts: boolean;\r\n readonly bills: PagedItemsModel;\r\n }\r\n\r\n export function set(s: CustomerCardState, replacement: State): CustomerCardState {\r\n return {\r\n ...s,\r\n billInfo: replacement\r\n };\r\n }\r\n\r\n export function addAddressLinesToBills(\r\n bills: PagedItemsModel,\r\n contracts: ContractFilterModel[]\r\n ): PagedItemsModel {\r\n if (!bills) return null;\r\n\r\n if (!contracts) contracts = [];\r\n\r\n const getAddress = (bill: Modules.Payments.Billing.BillModel, contracts: ContractFilterModel[]) => {\r\n const contract = contracts.find(c => c.id == bill.contractId);\r\n if (contract) return contract.addressLine;\r\n\r\n return '';\r\n };\r\n\r\n return {\r\n page: bills.page,\r\n items: bills.items.map(b => ({ ...b, fullAddress: getAddress(b, contracts) })),\r\n pageSize: bills.pageSize,\r\n total: bills.total\r\n };\r\n }\r\n }\r\n\r\n export namespace Registrations {\r\n import RegistrationModel = Umbrella.HousingAllocation.Registrations.Detailed;\r\n\r\n export interface LoadingEvent {\r\n readonly type: 'CustomerCardRegistrationsLoadingEvent';\r\n }\r\n\r\n export interface LoadedEvent {\r\n readonly type: 'CustomerCardRegistrationsLoadedEvent';\r\n readonly registrations: RegistrationModel[];\r\n }\r\n\r\n export interface LoadErrorEvent {\r\n readonly type: 'CustomerCardRegistrationsLoadErrorEvent';\r\n readonly error: any;\r\n }\r\n\r\n export interface State {\r\n readonly loading: boolean;\r\n readonly error: any;\r\n readonly registrations: RegistrationModel[];\r\n }\r\n\r\n export function set(s: CustomerCardState, replacement: State): CustomerCardState {\r\n return {\r\n ...s,\r\n registrationInfo: replacement\r\n };\r\n }\r\n }\r\n\r\n export interface ActivityRegistrationChangedEvent {\r\n readonly type: 'CustomerCardActivityRegistrationChangedEvent';\r\n readonly newState: Activities.Registration.ActivityRegistrationState;\r\n }\r\n\r\n export type CustomerCardEvent =\r\n | Personal.LoadingEvent\r\n | Personal.LoadedEvent\r\n | Personal.LoadErrorEvent\r\n | Personal.UnloadedEvent\r\n | Personal.UpdatingEvent\r\n | Personal.UpdatedEvent\r\n | Personal.UpdateErrorEvent\r\n | Personal.WritableFieldsLoadedEvent\r\n | Personal.PersonSynchronizedObjectsLoadedEvent\r\n | AccountState.LoadedEvent\r\n | AccountState.LoadErrorEvent\r\n | AccountState.LoadingEvent\r\n | CustomerState.LoadedEvent\r\n | CustomerState.LoadErrorEvent\r\n | CustomerState.LoadingEvent\r\n | Contracts.LoadingEvent\r\n | Contracts.LoadedEvent\r\n | Contracts.LoadErrorEvent\r\n | Contracts.FilteringEvent\r\n | Contracts.FilteredEvent\r\n | Contracts.FilterErrorEvent\r\n | Contracts.ContractorsLoadedEvent\r\n | Contracts.OutstandingBalanceLoadedEvent\r\n | Announcements.LoadingEvent\r\n | Announcements.LoadedEvent\r\n | Announcements.LoadErrorEvent\r\n | Activities.LoadingEvent\r\n | Activities.LoadedEvent\r\n | Activities.LoadErrorEvent\r\n | Activities.ResetEvent\r\n | Activities.CategoriesLoadedEvent\r\n | Activities.AllScenariosLoaded\r\n | Activities.RootTagsLoaded\r\n | Bills.LoadingEvent\r\n | Bills.LoadedEvent\r\n | Bills.LoadErrorEvent\r\n | Bills.FilteringEvent\r\n | Bills.FilteredEvent\r\n | Bills.FilterErrorEvent\r\n | Bills.FilterLoadedEvent\r\n | Registrations.LoadingEvent\r\n | Registrations.LoadedEvent\r\n | Registrations.LoadErrorEvent\r\n | Sidebar.InitializePanelStateEvent\r\n | Sidebar.ToggleContractorPanelEvent\r\n | Sidebar.ToggleContractPanelEvent\r\n | Sidebar.ToggleContactPanelEvent;\r\n\r\n export interface CustomerCardState {\r\n readonly id: System.Guid;\r\n readonly sidebar: Sidebar.State;\r\n readonly personal: Personal.State;\r\n readonly accountInfo: AccountState.State;\r\n readonly customerInfo: CustomerState.State;\r\n readonly contractInfo: Contracts.State;\r\n readonly billInfo: Bills.State;\r\n readonly activityInfo: Activities.State;\r\n readonly announcementInfo: Announcements.State;\r\n readonly activityRegistrationInfo: Activities.Registration.ActivityRegistrationState;\r\n readonly registrationInfo: Registrations.State;\r\n }\r\n\r\n function reduce(e: CustomerCardEvent): (s: CustomerCardState) => CustomerCardState {\r\n switch (e.type) {\r\n case 'CustomerCardPersonLoadingEvent':\r\n return s => ({\r\n ...s,\r\n id: e.id,\r\n personal: {\r\n loading: true,\r\n updating: false,\r\n person: null,\r\n fields: null,\r\n loadError: null,\r\n personIsDeletable: false,\r\n },\r\n contractInfo: null,\r\n billInfo: null,\r\n announcementInfo: null,\r\n activityInfo: {\r\n loading: false,\r\n cases: null,\r\n contractId: null,\r\n error: null,\r\n filters: {\r\n allActivityCategories:\r\n s &&\r\n s.activityInfo &&\r\n s.activityInfo.filters &&\r\n s.activityInfo.filters.allActivityCategories,\r\n status: s && s.activityInfo && s.activityInfo.filters && s.activityInfo.filters.status,\r\n allScenarios:\r\n s && s.activityInfo && s.activityInfo.filters && s.activityInfo.filters.allScenarios,\r\n rootTags: s && s.activityInfo && s.activityInfo.filters && s.activityInfo.filters.rootTags,\r\n activityCategory: '',\r\n contractId: null,\r\n query: '',\r\n selectedScenarioId: null,\r\n selectedTagId: null,\r\n channel: s && s.activityInfo && s.activityInfo.filters && s.activityInfo.filters.channel\r\n }\r\n },\r\n activityRegistrationInfo: {\r\n selectedChannelType: ChannelType.Unknown,\r\n selectedTag: null,\r\n selectedFaq: null,\r\n selectedTargetGroup: null,\r\n selectedFollowUpQuestionId: null,\r\n selectedScenario: null,\r\n selectedPanel: null,\r\n query: '',\r\n scenarios: [],\r\n tagInfo: null,\r\n faqInfo: null,\r\n contactRegistrationInfo: null,\r\n taskRegistrationInfo: null,\r\n targetGroupInfo: null\r\n },\r\n registrationInfo: null\r\n });\r\n\r\n case 'CustomerCardPersonLoadedEvent':\r\n return s =>\r\n Personal.set(s, {\r\n loading: false,\r\n updating: s.personal.updating,\r\n person: e.person,\r\n fields: s.personal.fields,\r\n loadError: null,\r\n personIsDeletable: s.personal.personIsDeletable\r\n });\r\n\r\n case 'CustomerCardPersonUnloadedEvent':\r\n return s => s;\r\n\r\n case 'CustomerCardPersonLoadErrorEvent':\r\n console.error(e.type, e.error);\r\n return s =>\r\n Personal.set(s, {\r\n loading: false,\r\n updating: s.personal.updating,\r\n person: s.personal.person,\r\n fields: s.personal.fields,\r\n loadError: e.error,\r\n personIsDeletable: s.personal.personIsDeletable\r\n });\r\n\r\n case 'CustomerCardPersonUpdatingEvent':\r\n return s =>\r\n Personal.set(s, {\r\n loading: s.personal.loading,\r\n updating: true,\r\n person: s.personal.person,\r\n fields: s.personal.fields,\r\n loadError: s.personal.loadError,\r\n personIsDeletable: s.personal.personIsDeletable\r\n });\r\n\r\n case 'CustomerCardPersonUpdatedEvent':\r\n return s =>\r\n Personal.set(s, {\r\n loading: s.personal.loading,\r\n updating: false,\r\n person: e.person,\r\n fields: s.personal.fields,\r\n loadError: s.personal.loadError,\r\n personIsDeletable: s.personal.personIsDeletable\r\n });\r\n\r\n case 'CustomerCardPersonUpdateErrorEvent':\r\n console.error(e.type, e.error);\r\n return s =>\r\n Personal.set(s, {\r\n loading: s.personal.loading,\r\n updating: false,\r\n person: s.personal.person,\r\n fields: s.personal.fields,\r\n loadError: e.error,\r\n personIsDeletable: s.personal.personIsDeletable\r\n });\r\n\r\n case 'CustomerCardPersonWritableFieldsLoadedEvent':\r\n return s =>\r\n Personal.set(s, {\r\n loading: s.personal.loading,\r\n updating: s.personal.updating,\r\n person: s.personal.person,\r\n fields: e.fields,\r\n loadError: s.personal.loadError,\r\n personIsDeletable: s.personal.personIsDeletable\r\n });\r\n\r\n case 'CustomerCardPersonSynchronizedObjectsLoadedEvent':\r\n return s =>\r\n Personal.set(s, {\r\n loading: s.personal.loading,\r\n updating: s.personal.updating,\r\n person: s.personal.person,\r\n fields: s.personal.fields,\r\n loadError: s.personal.loadError,\r\n personIsDeletable: e.personIsDeletable\r\n });\r\n\r\n case 'CustomerCardContractsLoadingEvent':\r\n return s =>\r\n Contracts.set(s, {\r\n ...s.contractInfo,\r\n loading: true,\r\n error: null,\r\n contracts: s.contractInfo && s.contractInfo.contracts,\r\n selectedContract: null,\r\n outstandingBalance: null\r\n });\r\n\r\n case 'CustomerCardContractsLoadedEvent':\r\n return s =>\r\n Contracts.set(s, {\r\n ...s.contractInfo,\r\n loading: false,\r\n error: null,\r\n contracts: e.contracts,\r\n selectedContract: null\r\n });\r\n\r\n case 'CustomerCardAccountLoadErrorEvent':\r\n return s =>\r\n AccountState.set(s, {\r\n ...s.accountInfo,\r\n loading: false,\r\n loadError: e.error\r\n });\r\n\r\n case 'CustomerCardAccountLoadedEvent':\r\n return s =>\r\n AccountState.set(s, {\r\n ...s.accountInfo,\r\n account: e.account,\r\n loading: false,\r\n loadError: null\r\n });\r\n\r\n case 'CustomerCardAccountLoadingEvent':\r\n return s =>\r\n AccountState.set(s, {\r\n ...s.accountInfo,\r\n account: null,\r\n loading: true,\r\n loadError: null\r\n });\r\n\r\n case 'CustomerCardCustomerLoadErrorEvent':\r\n return s =>\r\n CustomerState.set(s, {\r\n ...s.customerInfo,\r\n loading: false,\r\n loadError: e.error\r\n });\r\n\r\n case 'CustomerCardCustomerLoadedEvent':\r\n return s =>\r\n CustomerState.set(s, {\r\n ...(s && s.customerInfo),\r\n customer: e.customer,\r\n loading: false,\r\n loadError: null\r\n });\r\n\r\n case 'CustomerCardCustomerLoadingEvent':\r\n return s =>\r\n CustomerState.set(s, {\r\n ...s.customerInfo,\r\n customer: null,\r\n loading: true,\r\n loadError: null\r\n });\r\n\r\n case 'CustomerCardContractsLoadErrorEvent':\r\n return s =>\r\n Contracts.set(s, {\r\n ...s.contractInfo,\r\n loading: false,\r\n error: e.error,\r\n contracts: null,\r\n selectedContract: null\r\n });\r\n\r\n case 'CustomerCardContractsFilteringEvent':\r\n return s =>\r\n Contracts.set(s, {\r\n ...s.contractInfo,\r\n loading: true,\r\n selectedContract: null\r\n });\r\n\r\n case 'CustomerCardContractsFilteredEvent':\r\n return s =>\r\n Contracts.set(s, {\r\n ...s.contractInfo,\r\n loading: false,\r\n selectedContract: e.contract\r\n });\r\n\r\n case 'CustomerCardContractsFilterErrorEvent':\r\n return s =>\r\n Contracts.set(s, {\r\n ...s.contractInfo,\r\n loading: false,\r\n selectedContract: null,\r\n error: e.error\r\n });\r\n\r\n case 'CustomerCardContractorsLoadedEvent':\r\n return s =>\r\n Contracts.set(s, {\r\n ...s.contractInfo,\r\n contractors: e.contractors\r\n });\r\n\r\n case 'CustomerCardOutstandingBalanceLoadedEvent':\r\n return s =>\r\n Contracts.set(s, {\r\n ...s.contractInfo,\r\n outstandingBalance: e.outstandingBalance\r\n });\r\n\r\n case 'CustomerCardAnnouncementsLoadingEvent':\r\n return s =>\r\n Announcements.set(s, {\r\n loading: true,\r\n error: null,\r\n announcements: s.announcementInfo && s.announcementInfo.announcements,\r\n contractId: e.contractId\r\n });\r\n\r\n case 'CustomerCardAnnouncementsLoadedEvent':\r\n return s =>\r\n Announcements.set(s, {\r\n loading: false,\r\n error: null,\r\n announcements: e.announcements,\r\n contractId: e.contractId\r\n });\r\n\r\n case 'CustomerCardAnnouncementsLoadErrorEvent':\r\n return s =>\r\n Announcements.set(s, {\r\n loading: false,\r\n error: e.error,\r\n announcements: null,\r\n contractId: null\r\n });\r\n\r\n case 'CustomerCardActivitiesResetEvent':\r\n return s =>\r\n Activities.set(s, {\r\n ...s.activityInfo,\r\n filters: {\r\n ...(s.activityInfo && s.activityInfo.filters)\r\n },\r\n loading: false,\r\n cases: null,\r\n contractId: null,\r\n error: null\r\n });\r\n\r\n case 'CustomerCardActivitiesLoadingEvent':\r\n return s =>\r\n Activities.set(s, {\r\n ...s.activityInfo,\r\n filters: {\r\n ...(s.activityInfo && s.activityInfo.filters),\r\n ...e.filters\r\n },\r\n loading: true,\r\n contractId: null,\r\n error: null\r\n });\r\n\r\n case 'CustomerCardActivitiesLoadedEvent':\r\n return s =>\r\n Activities.set(s, {\r\n ...s.activityInfo,\r\n filters: {\r\n ...(s.activityInfo && s.activityInfo.filters),\r\n ...e.filters\r\n },\r\n loading: false,\r\n cases: e.cases,\r\n contractId: null,\r\n error: null\r\n });\r\n\r\n case 'CustomerCardActivitiesLoadErrorEvent':\r\n return s =>\r\n Activities.set(s, {\r\n ...s.activityInfo,\r\n loading: false,\r\n error: e.error\r\n });\r\n\r\n case 'CustomerCardActivityCategoriesLoadedEvent':\r\n return s =>\r\n Activities.set(s, {\r\n ...s.activityInfo,\r\n filters: {\r\n ...(s.activityInfo && s.activityInfo.filters),\r\n allActivityCategories: e.categories\r\n }\r\n });\r\n\r\n case 'CustomerCardAllScenariosLoadedEvent':\r\n return s =>\r\n Activities.set(s, {\r\n ...s.activityInfo,\r\n filters: {\r\n ...(s.activityInfo && s.activityInfo.filters),\r\n allScenarios: e.scenarios\r\n }\r\n });\r\n\r\n case 'CustomerCardRootTagsLoadedEvent':\r\n return s =>\r\n Activities.set(s, {\r\n ...s.activityInfo,\r\n filters: {\r\n ...(s.activityInfo && s.activityInfo.filters),\r\n rootTags: e.tags\r\n }\r\n });\r\n\r\n case 'CustomerCardBillsLoadingEvent':\r\n return s =>\r\n Bills.set(s, {\r\n loading: true,\r\n error: null,\r\n contracts: s.billInfo && s.billInfo.contracts,\r\n bills: s.billInfo && s.billInfo.bills,\r\n contractId: null,\r\n hasMultipleContracts: s.billInfo && s.billInfo.hasMultipleContracts\r\n });\r\n\r\n case 'CustomerCardBillsLoadedEvent':\r\n return s =>\r\n Bills.set(s, {\r\n loading: false,\r\n error: null,\r\n contracts: s.billInfo && s.billInfo.contracts,\r\n bills: Bills.addAddressLinesToBills(e.bills, s.billInfo && s.billInfo.contracts),\r\n contractId: null,\r\n hasMultipleContracts: s.billInfo && s.billInfo.hasMultipleContracts\r\n });\r\n\r\n case 'CustomerCardBillsLoadErrorEvent':\r\n return s =>\r\n Bills.set(s, {\r\n loading: false,\r\n error: e.error,\r\n contracts: s.billInfo && s.billInfo.contracts,\r\n bills: null,\r\n contractId: null,\r\n hasMultipleContracts: s.billInfo && s.billInfo.hasMultipleContracts\r\n });\r\n\r\n case 'CustomerCardBillsFilteringEvent':\r\n return s =>\r\n Bills.set(s, {\r\n loading: true,\r\n error: null,\r\n contracts: s.billInfo && s.billInfo.contracts,\r\n bills: null,\r\n contractId: e.contractId,\r\n hasMultipleContracts: s.billInfo.hasMultipleContracts\r\n });\r\n\r\n case 'CustomerCardBillsFilteredEvent':\r\n return s =>\r\n Bills.set(s, {\r\n loading: false,\r\n error: null,\r\n contracts: s.billInfo && s.billInfo.contracts,\r\n bills: Bills.addAddressLinesToBills(e.bills, s.billInfo && s.billInfo.contracts),\r\n contractId: e.contractId,\r\n hasMultipleContracts: s.billInfo.hasMultipleContracts\r\n });\r\n\r\n case 'CustomerCardBillsFilterErrorEvent':\r\n return s =>\r\n Bills.set(s, {\r\n loading: false,\r\n error: e.error,\r\n contracts: s.billInfo && s.billInfo.contracts,\r\n bills: null,\r\n contractId: null,\r\n hasMultipleContracts: s.billInfo.hasMultipleContracts\r\n });\r\n\r\n case 'CustomerCardBillsContractFilterLoaded':\r\n return s =>\r\n Bills.set(s, {\r\n loading: s.billInfo && s.billInfo.loading,\r\n error: null,\r\n contracts: e.contracts,\r\n bills: Bills.addAddressLinesToBills(s.billInfo && s.billInfo.bills, e.contracts),\r\n contractId: s.billInfo && s.billInfo.contractId,\r\n hasMultipleContracts: e.contracts.length > 1\r\n });\r\n\r\n case 'CustomerCardRegistrationsLoadingEvent':\r\n return s =>\r\n Registrations.set(s, {\r\n loading: true,\r\n error: null,\r\n registrations: s.registrationInfo && s.registrationInfo.registrations\r\n });\r\n\r\n case 'CustomerCardRegistrationsLoadedEvent':\r\n return s =>\r\n Registrations.set(s, {\r\n loading: false,\r\n error: null,\r\n registrations: e.registrations\r\n });\r\n\r\n case 'CustomerCardRegistrationsLoadErrorEvent':\r\n return s =>\r\n Registrations.set(s, {\r\n loading: false,\r\n error: e.error,\r\n registrations: null\r\n });\r\n\r\n case 'InitializePanelStateEvent':\r\n return s =>\r\n Sidebar.set(s, {\r\n contractorPanelCollapsed: e.contractorPanelCollapsed,\r\n contractPanelCollapsed: e.contractPanelCollapsed,\r\n contactPanelCollapsed: e.contactPanelCollapsed\r\n });\r\n\r\n case 'ToggleContractorPanelEvent':\r\n return s =>\r\n Sidebar.set(s, {\r\n ...s.sidebar,\r\n contractorPanelCollapsed: !s.sidebar.contractorPanelCollapsed\r\n });\r\n\r\n case 'ToggleContractPanelEvent':\r\n return s =>\r\n Sidebar.set(s, {\r\n ...s.sidebar,\r\n contractPanelCollapsed: !s.sidebar.contractPanelCollapsed\r\n });\r\n\r\n case 'ToggleContactPanelEvent':\r\n return s =>\r\n Sidebar.set(s, {\r\n ...s.sidebar,\r\n contactPanelCollapsed: !s.sidebar.contactPanelCollapsed\r\n });\r\n }\r\n }\r\n\r\n export type CustomerCardStore = ObservableStore.EventStore;\r\n\r\n export const customerCardStore: CustomerCardStore = rootStore.map(\r\n lens('CustomerCard'),\r\n reduce\r\n );\r\n\r\n angular.module('CustomerService').value('CustomerCardStore', customerCardStore);\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard {\r\n import SelfServiceScenarioModel = Modules.SelfService.SelfServiceScenarioModel;\r\n import ActivityRegistrationService = Umbrella.CustomerService.CustomerCard.Activities.Registration.ActivityRegistrationService;\r\n import CustomerCardPersonInfoService = Umbrella.CustomerService.CustomerCard.CustomerCardPersonInfoService;\r\n\r\n @Service('SelfService', 'ImpersonationService')\r\n @Inject(\r\n '$location',\r\n '$state',\r\n 'SelfServiceScenarioResource',\r\n 'TopBarStore',\r\n 'ActivityRegistrationService',\r\n 'CustomerCardPersonInfoService',\r\n 'ToastMessageService'\r\n )\r\n export class ImpersonationService extends BaseStoreService {\r\n portalUrl: string;\r\n private returnToCase: boolean;\r\n\r\n constructor(\r\n private $location: ng.ILocationService,\r\n private $state: ng.ui.IStateService,\r\n private selfServiceScenarioResource: SelfServiceScenarioResource,\r\n protected topBarStore: TopBarStore,\r\n private activityRegistrationService: ActivityRegistrationService,\r\n private personInfoService: CustomerCardPersonInfoService,\r\n private toastMessageService: ToastMessageService\r\n ) {\r\n super(topBarStore);\r\n }\r\n\r\n public start(\r\n scenarioId: System.Guid | string,\r\n personId: System.Guid,\r\n channel?: Umbrella.Modules.ChannelType,\r\n caseId?: System.Guid,\r\n caseFlowId?: System.Guid,\r\n returnToCase?: boolean,\r\n ): void {\r\n this.returnToCase = returnToCase;\r\n this.$state.go('customerservice.customercard.impersonation', {\r\n personId,\r\n scenarioId,\r\n channel: channel\r\n ? Umbrella.Modules.ChannelType[channel].toString()\r\n : this.activityRegistrationService.getSelectedChannelType(),\r\n caseId,\r\n caseFlowId\r\n });\r\n }\r\n\r\n public async updateImpersonationState(\r\n scenarioId: System.Guid | string,\r\n personId: System.Guid,\r\n caseFlowId?: System.Guid\r\n ): Promise {\r\n const lastLoadedPerson = this.personInfoService.getSelectedPerson();\r\n if (!lastLoadedPerson || lastLoadedPerson.id !== personId) await this.personInfoService.load(personId);\r\n\r\n const scenario = await this.selfServiceScenarioResource.getByName({\r\n id: scenarioId.toString()\r\n }).$promise;\r\n\r\n if (!scenario) {\r\n this.toastMessageService.error(`Fout opgetreden tijdens starten selfservice scenario`);\r\n return;\r\n }\r\n\r\n if (scenario.status && !scenario.status.active) {\r\n this.toastMessageService.error(`Selfservice scenario momenteel niet actief`);\r\n return;\r\n }\r\n\r\n this.activityRegistrationService.selectScenario(scenario);\r\n\r\n this.emit({\r\n type: 'ImpersonationEnterEvent',\r\n person: this.personInfoService.getSelectedPerson(),\r\n scenario,\r\n caseFlowId\r\n });\r\n }\r\n\r\n public leaveAndReturn(): void {\r\n const state = this.getState();\r\n const caseflowId = state && state.impersonationInfo && state.impersonationInfo.caseFlowId;\r\n\r\n this.leave();\r\n\r\n if (caseflowId && this.returnToCase) {\r\n // Changed in commit c6a0e6aa05539db5d4c9cb40e84e4a495155c837 for fixing a bug.\r\n this.$location.url('/dashboard/zaken/overzicht/' + caseflowId + '/stappen');\r\n // this.$state.go('dashboard.caseflow.overview.details.steps', {\r\n // id: caseflowId\r\n // });\r\n return;\r\n }\r\n\r\n const person = this.personInfoService.getSelectedPerson();\r\n if (person) {\r\n this.$state.go('customerservice.customercard.timeline', {\r\n personId: person.id\r\n });\r\n return;\r\n }\r\n\r\n\r\n this.$state.go('dashboard.tasks');\r\n }\r\n\r\n public leave(): void {\r\n this.emit({ type: 'ImpersonationLeaveEvent' });\r\n }\r\n\r\n public switchOnFullScreen(): void {\r\n this.emit({ type: 'ImpersonationFullScreenSwitchEvent', enabled: true });\r\n }\r\n\r\n public switchOffFullScreen(): void {\r\n this.emit({ type: 'ImpersonationFullScreenSwitchEvent', enabled: false });\r\n }\r\n\r\n public isFullScreen(): boolean {\r\n const state = this.getState();\r\n const fullscreenMode = state && state.impersonationInfo && state.impersonationInfo.fullscreenMode;\r\n\r\n if (fullscreenMode) return fullscreenMode;\r\n else return false;\r\n }\r\n\r\n public setPortalUrl(portalUrl: string): void {\r\n this.portalUrl = portalUrl;\r\n }\r\n\r\n public getPortalUrl(): string {\r\n return this.portalUrl;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\ninterface SignalR {\r\n personHub: Umbrella.CustomerService.CustomerCard.IPersonHubProxy;\r\n}\r\n\r\nnamespace Umbrella.CustomerService.CustomerCard {\r\n export interface IPersonHubProxy extends HubProxy {\r\n client: IPersonHubClient;\r\n server: IPersonHubServer;\r\n }\r\n\r\n export const personHubOnUpdated$ = new Rx.Subject();\r\n export const personHubOnStarted$ = new Rx.Subject();\r\n\r\n export interface IPersonHubClient {\r\n updated(person: PersonModel);\r\n started(personId: System.Guid);\r\n }\r\n\r\n export interface IPersonHubServer {\r\n startJitUpdate(personId: System.Guid);\r\n unsubscribe(personId: System.Guid);\r\n }\r\n\r\n angular\r\n .module('CustomerService')\r\n .factory('PersonHub', () => $.connection.personHub);\r\n\r\n Modules.onSignalRInitialized(() => {\r\n $.connection.personHub.client.updated = model => {\r\n personHubOnUpdated$.onNext(model);\r\n };\r\n\r\n $.connection.personHub.client.started = personId => {\r\n personHubOnStarted$.onNext(personId);\r\n };\r\n });\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard {\r\n @Service('CustomerService', 'PersonJitService')\r\n @Inject('CustomerCardStore', 'PersonHub', 'CustomerCardPersonInfoService', 'ToastMessageService')\r\n export class PersonJitService {\r\n private message: any;\r\n\r\n constructor(\r\n store: CustomerCardStore,\r\n private personHub: IPersonHubProxy,\r\n personInfoService: CustomerCardPersonInfoService,\r\n private toastMessageService: ToastMessageService\r\n ) {\r\n const selectPersonId = (state: CustomerCardState) =>\r\n state && state.personal && state.personal.person && state.personal.person.id;\r\n\r\n personHubOnUpdated$\r\n .filter(model => {\r\n return selectPersonId(store.getState()) === model.id;\r\n })\r\n .subscribe(model => {\r\n personInfoService.addEmptyPhoneNumbersEmailAddressAndPostalAddressWhenNotAvailable(model);\r\n store.event$.onNext({\r\n type: 'CustomerCardPersonUpdatedEvent',\r\n person: model\r\n });\r\n this.clearToastMessage();\r\n });\r\n\r\n personHubOnStarted$\r\n .filter(personId => {\r\n return selectPersonId(store.getState()) === personId;\r\n })\r\n .subscribe(model => {\r\n if (this.message) {\r\n return;\r\n }\r\n\r\n this.message = this.toastMessageService.updating('Persoonlijke gegevens', 60000, {\r\n onHidden: () => {\r\n this.message = null;\r\n }\r\n });\r\n\r\n setTimeout(() => {\r\n if (this.message) {\r\n this.message = null;\r\n }\r\n }, 60000);\r\n });\r\n\r\n store.state$\r\n .map(selectPersonId)\r\n .distinctUntilChanged()\r\n .flatMapLatest(Modules.waitUntilSignalRConnected)\r\n .debounce(() => Rx.Observable.timer(1000))\r\n .subscribe(personId => this.triggerJitUpdate(personId));\r\n\r\n store.event$\r\n .where(e => e.type === 'CustomerCardPersonUnloadedEvent')\r\n .subscribe((e: Personal.UnloadedEvent) => this.unsubscribe(e.id));\r\n }\r\n\r\n private triggerJitUpdate(personId: System.Guid) {\r\n this.clearToastMessage();\r\n\r\n if (personId)\r\n this.personHub.server.startJitUpdate(personId).fail(e => {\r\n this.clearToastMessage();\r\n this.message = this.toastMessageService.error('Synchronisatie persoonlijke gegevens mislukt');\r\n });\r\n }\r\n\r\n private unsubscribe(personId: System.Guid) {\r\n this.personHub.server.unsubscribe(personId);\r\n this.clearToastMessage();\r\n }\r\n\r\n \r\n private clearToastMessage() {\r\n if (this.message) {\r\n this.toastMessageService.clear(this.message);\r\n this.message = null;\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard {\r\n import CustomerCardContractInfoService = Contracts.CustomerCardContractInfoService;\r\n import ChannelType = Modules.ChannelType;\r\n import CustomerCardSidebarComponentState = Sidebar.CustomerCardSidebarComponentState;\r\n\r\n export interface CardQueryParams {\r\n channel?: string;\r\n query?: string;\r\n tag?: System.Guid;\r\n faq?: System.Guid;\r\n }\r\n\r\n export interface CardStateParams extends CardQueryParams {\r\n personId: System.Guid;\r\n caseId: System.Guid;\r\n }\r\n\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('customerservice.customercard', {\r\n url: '/klantenkaart/:personId?channel&tag&query&faq',\r\n reloadOnSearch: false,\r\n redirectTo: 'customerservice.customercard.timeline',\r\n data: { pageTitle: 'Relatiekaart' },\r\n views: {\r\n 'right@customerservice': {\r\n template:\r\n '',\r\n controller: createComponentRouteController<\r\n CustomerCardState,\r\n CustomerCardSidebarComponentState\r\n >('CustomerCardStore', s => ({\r\n loading:\r\n (s.personal && s.personal.loading) ||\r\n (s.contractInfo && s.contractInfo.loading) ||\r\n (s.accountInfo && s.accountInfo.loading) ||\r\n (s.customerInfo && s.customerInfo.loading) ||\r\n (s.registrationInfo && s.registrationInfo.loading),\r\n person: s.personal && s.personal.person,\r\n account: s.accountInfo && s.accountInfo.account,\r\n customer: s.customerInfo && s.customerInfo.customer,\r\n registrationInfo : s.registrationInfo && s.registrationInfo.registrations,\r\n contracts:\r\n s && s.contractInfo && s.contractInfo.contracts,\r\n contractors:\r\n s &&\r\n s.contractInfo &&\r\n s.contractInfo.contractors,\r\n outstandingBalance:\r\n s &&\r\n s.contractInfo &&\r\n s.contractInfo.outstandingBalance,\r\n panelState: s && s.sidebar\r\n }))\r\n }\r\n },\r\n onEnter: [\r\n '$stateParams',\r\n 'CustomerCardPersonInfoService',\r\n 'CustomerCardAccountInfoService',\r\n 'CustomerCardContractInfoService',\r\n 'ActivityRegistrationService',\r\n 'CustomerCardRegistrationInfoService',\r\n (\r\n $stateParams: CardStateParams,\r\n personInfoService: CustomerCardPersonInfoService,\r\n accountInfoService: CustomerCardAccountInfoService,\r\n contractInfoService: CustomerCardContractInfoService,\r\n activityRegistrationService: Activities.Registration.ActivityRegistrationService,\r\n registrationInfoService: CustomerCardRegistrationInfoService\r\n ) => {\r\n personInfoService.load($stateParams.personId);\r\n accountInfoService.load($stateParams.personId);\r\n contractInfoService.ensureLoaded();\r\n activityRegistrationService.initialize(\r\n $stateParams.personId,\r\n $stateParams.channel,\r\n $stateParams.tag,\r\n $stateParams.faq,\r\n $stateParams.query\r\n );\r\n registrationInfoService.ensureLoaded($stateParams.personId);\r\n }\r\n ],\r\n onExit: [\r\n '$stateParams',\r\n 'CustomerCardPersonInfoService',\r\n (\r\n $stateParams: CardStateParams,\r\n personInfoService: CustomerCardPersonInfoService\r\n ) => {\r\n personInfoService.unload($stateParams.personId);\r\n }\r\n ]\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard {\r\n angular.module('Umbrella').directive('stickyElements', [\r\n '$window',\r\n $window => {\r\n return {\r\n link(scope, element) {\r\n const mainEl = document.getElementById('main');\r\n const heightTopBar = getHeightTopBar();\r\n let viewportHeight = getViewportHeight();\r\n let itemHeaderHeight: number;\r\n\r\n angular.element($window).bind('resize', () => {\r\n viewportHeight = getViewportHeight();\r\n });\r\n\r\n mainEl.addEventListener('scroll', () => {\r\n if (element[0].classList.contains('collapsed')) {\r\n const elementPosition = element[0].getBoundingClientRect();\r\n const elementContainsStickyFooterClass = element[0].classList.contains('sticky-footer');\r\n const elementContainsStickyHeaderClass = element[0].classList.contains('sticky-header');\r\n\r\n if (\r\n !isTopElementInViewport(elementPosition) &&\r\n isBodyElementInViewport(elementPosition) &&\r\n !elementContainsStickyHeaderClass\r\n ) {\r\n element[0].classList.add('sticky-header');\r\n }\r\n\r\n if (isTopElementInViewport(elementPosition) && elementContainsStickyHeaderClass) {\r\n element[0].classList.remove('sticky-header');\r\n }\r\n\r\n const itemHeaderEl = document.getElementsByClassName('activity-header');\r\n if (!itemHeaderEl || itemHeaderEl.length < 1) return;\r\n\r\n itemHeaderHeight = document.getElementsByClassName('activity-header')[0].clientHeight;\r\n\r\n if (!isBodyElementInViewport(elementPosition) && elementContainsStickyHeaderClass) {\r\n element[0].classList.remove('sticky-header');\r\n }\r\n\r\n if (\r\n isBodyElementInViewport(elementPosition) &&\r\n !isBottomElementInViewport(elementPosition) &&\r\n !elementContainsStickyFooterClass\r\n ) {\r\n element[0].classList.add('sticky-footer');\r\n }\r\n\r\n if (\r\n isBodyElementInViewport(elementPosition) &&\r\n isBottomElementInViewport(elementPosition) &&\r\n elementContainsStickyFooterClass\r\n ) {\r\n element[0].classList.remove('sticky-footer');\r\n }\r\n\r\n if (\r\n !isBodyElementInViewport(elementPosition) &&\r\n !isBottomElementInViewport(elementPosition) &&\r\n elementContainsStickyFooterClass\r\n ) {\r\n element[0].classList.remove('sticky-footer');\r\n }\r\n }\r\n });\r\n\r\n function getHeightTopBar() {\r\n if (window.device.tablet()) {\r\n return 0;\r\n }\r\n\r\n if (document.getElementsByClassName('top-bar')[0].clientHeight > 0) {\r\n return document.getElementsByClassName('top-bar')[0].clientHeight;\r\n } else {\r\n return document.getElementById('responsive-navigation').clientHeight;\r\n }\r\n }\r\n\r\n function isTopElementInViewport(elementPosition) {\r\n return elementPosition.top <= viewportHeight && elementPosition.top > heightTopBar\r\n ? true\r\n : false;\r\n }\r\n\r\n function isBottomElementInViewport(elementPosition) {\r\n return elementPosition.bottom <= viewportHeight && elementPosition.bottom > heightTopBar\r\n ? true\r\n : false;\r\n }\r\n\r\n function isBodyElementInViewport(elementPosition) {\r\n return (elementPosition.top > heightTopBar + itemHeaderHeight ||\r\n elementPosition.bottom > heightTopBar + itemHeaderHeight) &&\r\n elementPosition.top < viewportHeight - itemHeaderHeight\r\n ? true\r\n : false;\r\n }\r\n\r\n function getViewportHeight() {\r\n return window.innerHeight || document.documentElement.clientHeight;\r\n }\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n @Component('CustomerService', {\r\n selector: 'card-feedback-message',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/CardFeedbackMessageComponent/CardFeedbackMessage.html',\r\n bindings: {\r\n message: '@'\r\n }\r\n })\r\n class CardFeedbackMessageComponent {}\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n @Component('CustomerService', {\r\n selector: 'card-loading-indicator',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/CardLoadingIndicatorComponent/CardLoadingIndicator.html'\r\n })\r\n class CustomerLoadingIndicatorComponent {}\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n @Component('CustomerService', {\r\n selector: 'card-progress-message',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/CardProgressMessageComponent/CardProgressMessage.html',\r\n bindings: {\r\n message: '@',\r\n nested: '<'\r\n }\r\n })\r\n class CardProgressMessageComponent {}\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Activities {\r\n import FaqModel = Modules.Knowledgebase.FaqModel;\r\n import ThesaurusTagModel = Umbrella.Modules.Knowledgebase.ThesaurusTagModel;\r\n import ActivityRegistrationService = Umbrella.CustomerService.CustomerCard.Activities.Registration.ActivityRegistrationService;\r\n import ChatStore = Umbrella.ChatConversationHandling.ChatStore;\r\n import ChatMessage = Umbrella.ChatConversationHandling.ChatMessage;\r\n import KnowledgebaseSuggestionsInput = Umbrella.CustomerService.KnowledgebaseSuggestionsInput;\r\n import RegistrationModel = Umbrella.HousingAllocation.Registrations.Detailed;\r\n\r\n export const openKnowledgebase$ = new Rx.Subject();\r\n export const openSelfServicePanel$ = new Rx.Subject();\r\n\r\n export interface CustomerActivitiesComponentState {\r\n loading: boolean;\r\n person: PersonModel;\r\n customer: Modules.Customers.CustomerModel.Detailed;\r\n announcementInfo: Announcements.State;\r\n registrationInfo: RegistrationModel[];\r\n activityInfo: Activities.State;\r\n activityRegistrationInfo: Registration.ActivityRegistrationState;\r\n selfServiceScenarios: Modules.SelfService.SelfServiceScenarioModel.Detailed[];\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'customer-activities',\r\n templateUrl: '/CustomerService/_CustomerCard/_Activities/CustomerActivitiesComponent/CustomerActivities.html',\r\n bindings: { state: '<' }\r\n })\r\n @Inject(\r\n '$location',\r\n '$stateParams',\r\n '$mdDialog',\r\n 'CreateDialog',\r\n 'CustomerCardAnnouncementInfoService',\r\n 'CustomerCardActivityInfoService',\r\n 'CustomerCardPersonInfoService',\r\n 'ActivityRegistrationService',\r\n 'ChatStore'\r\n )\r\n class CustomerActivitiesComponent {\r\n public state: CustomerActivitiesComponentState;\r\n public knowledgebaseActions: any;\r\n public knowledgebaseInitialized: boolean;\r\n public suggestionsQuery: KnowledgebaseSuggestionsInput;\r\n public personHasRoles: boolean;\r\n private chatSubscription: Rx.Disposable;\r\n private knowledgebaseSubscription: Rx.Disposable;\r\n private sssSubscription: Rx.Disposable;\r\n private currentPerson: PersonModel;\r\n\r\n constructor(\r\n private $location: ng.ILocationService,\r\n private $stateParams: CustomerActivitiesStateParams,\r\n private $mdDialog,\r\n private createDialog,\r\n private announcementInfoService: CustomerCardAnnouncementInfoService,\r\n private activityInfoService: CustomerCardActivityInfoService,\r\n private personInfoService: CustomerCardPersonInfoService,\r\n private activityRegistrationService: ActivityRegistrationService,\r\n private chatStore: ChatStore\r\n ) {\r\n this.knowledgebaseSubscription = openKnowledgebase$\r\n .filter(x => !!x)\r\n .filter(_ => !this.isContactRegistrationPanelSelected())\r\n .subscribe(_ => {\r\n this.openKnowledgebase();\r\n });\r\n\r\n this.sssSubscription = openSelfServicePanel$\r\n .filter(x => !!x)\r\n .filter(_ => !this.isSssRegistrationPanelSelected())\r\n .subscribe(_ => {\r\n this.openSssRegistrationPanel();\r\n });\r\n }\r\n\r\n public $onInit() {\r\n this.createKnowledgebaseActionDefinitions();\r\n\r\n if (this.$stateParams.openKnowledgebase) this.openKnowledgebase();\r\n else if (this.$stateParams.openSelfServicePanel) this.openSssRegistrationPanel();\r\n\r\n this.hasRoles();\r\n }\r\n\r\n public $onChanges(bindings: { state: IBindingChange }) {\r\n if (!bindings.state || !bindings.state.currentValue || !bindings.state.currentValue.person) return;\r\n\r\n const hasPersonChanged = bindings.state.currentValue.person.id !== bindings.state.previousValue.person;\r\n if (hasPersonChanged) {\r\n this.checkForPersonChatActivity(bindings.state.currentValue.person);\r\n this.hasRoles();\r\n }\r\n }\r\n\r\n $onDestroy() {\r\n if (this.chatSubscription) this.chatSubscription.dispose();\r\n if (this.knowledgebaseSubscription) this.knowledgebaseSubscription.dispose();\r\n if (this.sssSubscription) this.sssSubscription.dispose();\r\n }\r\n\r\n public loadMoreAnnouncements(): void {\r\n this.announcementInfoService.loadMore();\r\n }\r\n\r\n public loadMoreActivities(): void {\r\n this.activityInfoService.loadMore();\r\n }\r\n\r\n public checkForPersonChatActivity(person: PersonModel) {\r\n if (!person) return;\r\n\r\n if (this.chatSubscription) this.chatSubscription.dispose();\r\n\r\n const personId = person.id;\r\n const hasStateOrConversations = x => x && x.operatorConversations;\r\n const personHasActiveChat = x => x.filter(c => c.customer.id === personId).length > 0;\r\n const chatWithPerson = x => x.find(c => c.customer.id === personId);\r\n const hasMessages = x => x.messages && x.messages.length > 0;\r\n\r\n /*this.chatSubscription = this.chatStore.state$\r\n .filter(hasStateOrConversations)\r\n .map(x => x.operatorConversations)\r\n .filter(personHasActiveChat)\r\n .map(chatWithPerson)\r\n .filter(hasMessages)\r\n .map(x => x.messages)\r\n .subscribe(messages => {\r\n this.generateSuggestionsQueryBasedOnChatMessaged(messages);\r\n });*/\r\n }\r\n\r\n public createKnowledgebaseActionDefinitions(): any {\r\n this.knowledgebaseActions = [];\r\n\r\n if (window.user.permissions.createTask)\r\n this.knowledgebaseActions.push({\r\n name: 'Taak aanmaken',\r\n onExecute: (faq: FaqModel, tag: ThesaurusTagModel) => this.registerTask(faq, tag)\r\n });\r\n\r\n this.knowledgebaseActions.push({\r\n name: 'Doorschakelen',\r\n onExecute: (faq: FaqModel, tag: ThesaurusTagModel) => this.launchTransferPopup(faq, tag)\r\n });\r\n\r\n if (window.user.permissions.caseCreate)\r\n this.knowledgebaseActions.push({\r\n name: 'Contact vastleggen',\r\n primary: true,\r\n onExecute: (faq: FaqModel, tag: ThesaurusTagModel, targetGroupId?: Guid) =>\r\n this.registerContactActivity(faq, tag, targetGroupId)\r\n });\r\n }\r\n\r\n public registerTask(faq: FaqModel, tag: ThesaurusTagModel): void {\r\n if (!faq || !faq.mainTag) return;\r\n\r\n const person = this.personInfoService.getSelectedPerson();\r\n if (!person) return;\r\n\r\n this.$mdDialog\r\n .show({\r\n template: ``,\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n })\r\n .then(task => {\r\n this.activityRegistrationService.taskRegistered(task);\r\n this.activityInfoService.reload();\r\n this.knowledgebaseInitialized = false;\r\n });\r\n }\r\n\r\n public registerContactActivity(faq: FaqModel, tag: ThesaurusTagModel, targetGroupId?: Guid): void {\r\n if (!faq || !faq.mainTag) return;\r\n\r\n const person = this.personInfoService.getSelectedPerson();\r\n if (!person) return;\r\n\r\n this.$mdDialog\r\n .show({\r\n template: `\r\n `,\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n })\r\n .then(activity => {\r\n this.activityRegistrationService.contactActivityRegistered(activity);\r\n this.activityInfoService.reload();\r\n this.knowledgebaseInitialized = false;\r\n });\r\n }\r\n\r\n public launchTransferPopup(faq: FaqModel, tag: ThesaurusTagModel) {\r\n if (!faq) return;\r\n\r\n const person = this.personInfoService.getSelectedPerson();\r\n const customerId = person && person.roles['customer'];\r\n\r\n this.createDialog(\r\n '/CustomerService/_CustomerCard/_Activities/Registration/TransferPopup/TransferPopup.html',\r\n {\r\n id: 'transferPopup',\r\n modalClass: 'popup green popup_1350',\r\n successCallback: () => (this.knowledgebaseInitialized = false)\r\n },\r\n {\r\n faq,\r\n tagId: (tag && tag.id) || faq.mainTag.id,\r\n customerId\r\n }\r\n );\r\n }\r\n\r\n public hasRoles() {\r\n const person = this.personInfoService.getSelectedPerson();\r\n if(person)\r\n this.personHasRoles = Object.keys(person.roles).length > 0;\r\n\r\n }\r\n\r\n public toggleSssRegistrationPanel(): void {\r\n this.state.activityRegistrationInfo.selectedPanel === Registration.SelectedPanel.Sss\r\n ? this.closeSssRegistrationPanel()\r\n : this.openSssRegistrationPanel();\r\n }\r\n\r\n public toggleContactRegistrationPanel(): void {\r\n this.state.activityRegistrationInfo.selectedPanel === Registration.SelectedPanel.Registration\r\n ? this.closeKnowledgebase()\r\n : this.openKnowledgebase();\r\n\r\n if (!this.knowledgebaseInitialized) this.knowledgebaseInitialized = true;\r\n }\r\n\r\n public isContactRegistrationPanelSelected(): boolean {\r\n const isActive =\r\n this.state.activityRegistrationInfo.selectedPanel === Registration.SelectedPanel.Registration;\r\n if (isActive && !this.knowledgebaseInitialized) this.knowledgebaseInitialized = true;\r\n\r\n return isActive;\r\n }\r\n\r\n public isSssRegistrationPanelSelected(): boolean {\r\n return this.state.activityRegistrationInfo.selectedPanel === Registration.SelectedPanel.Sss;\r\n }\r\n\r\n public closeKnowledgebase(): void {\r\n this.activityRegistrationService.selectPanel(Registration.SelectedPanel.None);\r\n }\r\n\r\n private openKnowledgebase(): void {\r\n this.activityRegistrationService.selectPanel(Registration.SelectedPanel.Registration);\r\n }\r\n\r\n private openSssRegistrationPanel(): void {\r\n this.activityRegistrationService.selectPanel(Registration.SelectedPanel.Sss);\r\n }\r\n\r\n private closeSssRegistrationPanel(): void {\r\n this.activityRegistrationService.selectPanel(Registration.SelectedPanel.None);\r\n }\r\n\r\n private generateSuggestionsQueryBasedOnChatMessaged(messages: ChatMessage[]) {\r\n if (!messages || messages.length < 1) return;\r\n\r\n const query = messages\r\n .filter(x => x.direction === 1)\r\n .map(x => x.text)\r\n .join(' ');\r\n\r\n const basedOn = KnowledgebaseSuggestionsBasedOn.Chat;\r\n\r\n this.suggestionsQuery = {\r\n query,\r\n basedOn\r\n };\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import IMenuTab = Modules.IMenuTab;\r\n import IStateMenuTab = Modules.IStateMenuTab;\r\n import QuickMenuButtonDefinition = CustomerService.QuickMenuButtonDefinition;\r\n import CustomerCardAnnouncementInfoService = Umbrella.CustomerService.CustomerCard.CustomerCardAnnouncementInfoService;\r\n import openKnowledgebase$ = Umbrella.CustomerService.CustomerCard.Activities.openKnowledgebase$;\r\n import openSelfServicePanel$ = Umbrella.CustomerService.CustomerCard.Activities.openSelfServicePanel$;\r\n import ICaseHistoryResourceClass = Modules.Cases.ICaseHistoryResourceClass;\r\n import RegistrationsResource = Umbrella.CustomerService.CustomerCard.Registrations.RegistrationsResource;\r\n import RegistrationModel = Umbrella.HousingAllocation.Registrations.Detailed;\r\n\r\n @Inject(\r\n '$state',\r\n '$stateParams',\r\n '$mdDialog',\r\n 'CustomerCardAnnouncementInfoService',\r\n 'CaseHistoryResource',\r\n 'ToastMessageService',\r\n 'RegistrationsResource'\r\n )\r\n @Component('CustomerService', {\r\n selector: 'customercard-menu',\r\n template: `\r\n
    \r\n \r\n \r\n
    \r\n `,\r\n bindings: {\r\n person: '<',\r\n registrationInfo: '<'\r\n }\r\n })\r\n class CustomerCardMenuComponent {\r\n public person: PersonModel;\r\n public registrationInfo: RegistrationModel[];\r\n public tabs: IMenuTab[];\r\n public buttons: QuickMenuButtonDefinition[];\r\n\r\n constructor(\r\n private $state: ng.ui.IStateService,\r\n private $stateParams: ng.ui.IStateParamsService,\r\n private $mdDialog: any,\r\n private announcementInfoService: CustomerCardAnnouncementInfoService,\r\n private caseHistoryResource: ICaseHistoryResourceClass,\r\n private toastMessageService: ToastMessageService,\r\n private registrationsResource: RegistrationsResource\r\n ) {}\r\n\r\n public $onInit() {\r\n this.createTabs();\r\n this.createButtons();\r\n }\r\n\r\n public $onChanges() {\r\n this.createTabs();\r\n }\r\n\r\n private createTabs() {\r\n this.tabs = [];\r\n\r\n const isCustomer = this.person.roles['customer'];\r\n const isProspect = this.registrationInfo && this.registrationInfo.length > 0;\r\n\r\n if (!window.user.permissions.customerCard) return;\r\n\r\n this.addTab(this.createTab('Tijdlijn', 'customerservice.customercard.timeline'));\r\n this.addTab(this.createTab('Klantgegevens', 'customerservice.customercard.personal'));\r\n\r\n if (isCustomer && window.user.permissions.contractRead)\r\n this.addTab(this.createTab('Contracten', 'customerservice.customercard.contracts'));\r\n\r\n if (isProspect && window.user.permissions.registrationRead)\r\n this.addTab(this.createTab('Inschrijvingen', 'customerservice.customercard.registrations'));\r\n\r\n if (isCustomer && window.user.permissions.billRead)\r\n this.addTab(this.createTab('Financieel', 'customerservice.customercard.bills'));\r\n\r\n if (window.user.permissions.announcementRead)\r\n this.addTab(this.createTab('Mededelingen', 'customerservice.customercard.announcements'));\r\n\r\n if (window.user.permissions.customerSatisfactionRead)\r\n this.addTab(this.createTab('Klantscore', 'customerservice.customercard.customersatisfaction'));\r\n }\r\n\r\n public registerAnnouncement(): void {\r\n if (!this.$stateParams.personId) return;\r\n\r\n this.$mdDialog\r\n .show({\r\n template: ``,\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n })\r\n .then(() => {\r\n this.announcementInfoService.reload();\r\n });\r\n }\r\n\r\n private createButtons() {\r\n this.buttons = [\r\n {\r\n tooltip: 'Nieuwe mededeling',\r\n label: 'Mededeling aanmaken',\r\n auth: 'announcementWrite',\r\n class: 'md-warn',\r\n icon: 'volume_up',\r\n action: () => this.registerAnnouncement()\r\n },\r\n {\r\n tooltip: 'Direct regelen',\r\n label: 'Direct regelen',\r\n auth: 'caseCreate',\r\n class: 'purple, hide-for-mobile',\r\n icon: 'mouse',\r\n action: () => this.openSelfServicePanel()\r\n },\r\n {\r\n tooltip: 'Contact vastleggen',\r\n label: 'Contact vastleggen',\r\n auth: 'caseCreate',\r\n class: 'md-primary',\r\n icon: 'assignment_turned_in',\r\n action: () => this.openKnowledgebase()\r\n }\r\n ];\r\n\r\n const userHasPermissions = window.user.permissions.caseRead && window.user.permissions.exportTimeline;\r\n if (userHasPermissions) {\r\n this.buttons.push({\r\n tooltip: 'Export tijdlijn',\r\n label: 'Tijdlijn exporteren',\r\n auth: 'caseCreate',\r\n class: 'md-accent md-hue-2',\r\n icon: 'save_alt',\r\n action: () => this.exportTimeline()\r\n });\r\n }\r\n }\r\n\r\n private exportTimeline(): void {\r\n this.caseHistoryResource\r\n .startTimelineExport({ id: this.person.id })\r\n .$promise.then(() => {\r\n this.toastMessageService.info('Tijdlijn exporteren gestart');\r\n })\r\n .catch(() => {\r\n this.toastMessageService.error('Fout opgetreden tijdens exporteren van de tijdlijn');\r\n });\r\n }\r\n\r\n private openKnowledgebase(): void {\r\n if (this.$state.current.name === 'customerservice.customercard.timeline') openKnowledgebase$.onNext(true);\r\n else this.$state.go('customerservice.customercard.timeline', { openKnowledgebase: true });\r\n }\r\n\r\n private openSelfServicePanel(): void {\r\n if (this.$state.current.name === 'customerservice.customercard.timeline')\r\n openSelfServicePanel$.onNext(true);\r\n else this.$state.go('customerservice.customercard.timeline', { openSelfServicePanel: true });\r\n }\r\n\r\n private createTab(title: string, state: string): IStateMenuTab {\r\n return {\r\n title,\r\n state\r\n };\r\n }\r\n\r\n private addTab(tab: IStateMenuTab) {\r\n this.tabs.push(tab);\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.Registrations {\r\n import RegistrationModelDetailed = Umbrella.HousingAllocation.Registrations.Detailed;\r\n import UpdateRegistrationModel = Umbrella.HousingAllocation.Registrations.UpdateRegistrationModel;\r\n import RegistrantInfoModel = Umbrella.HousingAllocation.Registrations.RegistrantInfoModel;\r\n\r\n export interface RegistrationsResource {\r\n getDetailedRegistrationsByPerson(\r\n param: IdRequestParams\r\n ): ng.resource.IResource;\r\n update(registration: UpdateRegistrationModel): ng.resource.IResource;\r\n delete(registrationId: Guid);\r\n getRegistrantInfoByPerson(\r\n param: IdRequestParams\r\n ): ng.resource.IResource;\r\n }\r\n\r\n angular.module('CustomerService').service('RegistrationsResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) => {\r\n return $resource(\r\n '/housingallocation/api/v1/registration/agent/:action/:id',\r\n {},\r\n {\r\n getDetailedRegistrationsByPerson: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'byPerson', id: '@id' }\r\n },\r\n\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: {action: 'update'}\r\n },\r\n\r\n delete: {\r\n method: 'DELETE',\r\n isArray: false,\r\n params: { }\r\n },\r\n\r\n getRegistrantInfoByPerson: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'getRegistrantInfoByPerson', id: '@id' }\r\n }\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import Detailed = Umbrella.Modules.Customers.CustomerModel.Detailed;\r\n import RegistrationsResource = Umbrella.CustomerService.CustomerCard.Registrations.RegistrationsResource;\r\n import RegistrantInfoModel = Umbrella.HousingAllocation.Registrations.RegistrantInfoModel;\r\n\r\n const isHousingAllocationAvailable = () =>\r\n window &&\r\n window.config &&\r\n window.config.facets &&\r\n window.config.facets.housingAllocation &&\r\n window.config.facets.housingAllocation[0] &&\r\n window.config.facets.housingAllocation[0].available;\r\n\r\n @Component('CustomerService', {\r\n selector: 'customer-header',\r\n templateUrl: '/CustomerService/_CustomerCard/CustomerHeaderComponent/CustomerHeader.html',\r\n bindings: {\r\n person: '<',\r\n customer: '<'\r\n }\r\n })\r\n @Inject('RegistrationsResource')\r\n class CustomerHeaderComponent {\r\n public person: PersonModel;\r\n public customer: Detailed;\r\n\r\n public registrantInfo: RegistrantInfoModel;\r\n constructor(private registrationsResource: RegistrationsResource) {}\r\n\r\n public $onInit() {\r\n if (isHousingAllocationAvailable()) {\r\n this.getRegistrantInfoByPerson();\r\n }\r\n }\r\n\r\n private async getRegistrantInfoByPerson(): Promise {\r\n const regInfo = await this.registrationsResource.getRegistrantInfoByPerson({\r\n id: this.person.id\r\n }).$promise;\r\n\r\n this.registrantInfo = regInfo;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.Sidebar {\r\n @Service('CustomerService', 'CustomerCardSidebarService')\r\n @Inject('CustomerCardStore', 'LocalStorageService')\r\n export class CustomerCardSidebarService extends BaseStoreService<\r\n CustomerCardState,\r\n CustomerCardEvent,\r\n CustomerCardStore\r\n > {\r\n constructor(\r\n store: CustomerCardStore,\r\n private localStorageService: LocalStorageService\r\n ) {\r\n super(store);\r\n\r\n this.initializePanelState();\r\n }\r\n\r\n public toggleContractPanel(): void {\r\n const sidebarState = this.getSidebarState();\r\n const isCollapsed =\r\n sidebarState && sidebarState.contractPanelCollapsed;\r\n this.emit({ type: 'ToggleContractPanelEvent' });\r\n this.localStorageService.store(\r\n 'ContractPanelCollapsed',\r\n !isCollapsed\r\n );\r\n }\r\n\r\n public toggleContractorPanel(): void {\r\n const sidebarState = this.getSidebarState();\r\n const isCollapsed =\r\n sidebarState && sidebarState.contractorPanelCollapsed;\r\n this.emit({ type: 'ToggleContractorPanelEvent' });\r\n this.localStorageService.store(\r\n 'ContractorPanelCollapsed',\r\n !isCollapsed\r\n );\r\n }\r\n\r\n public toggleContactPanel(): void {\r\n const sidebarState = this.getSidebarState();\r\n const isCollapsed =\r\n sidebarState && sidebarState.contactPanelCollapsed;\r\n this.emit({ type: 'ToggleContactPanelEvent' });\r\n this.localStorageService.store(\r\n 'ContactPanelCollapsed',\r\n !isCollapsed\r\n );\r\n }\r\n\r\n private initializePanelState(): void {\r\n this.emit({\r\n type: 'InitializePanelStateEvent',\r\n contractPanelCollapsed: this.getStoredValue(\r\n 'ContractPanelCollapsed'\r\n ),\r\n contractorPanelCollapsed: this.getStoredValue(\r\n 'ContractorPanelCollapsed'\r\n ),\r\n contactPanelCollapsed: this.getStoredValue(\r\n 'ContactPanelCollapsed'\r\n )\r\n });\r\n }\r\n\r\n private getStoredValue(storageKey: string): boolean {\r\n const isNullOrUndefined = value =>\r\n value === null || value === undefined;\r\n const storedValue = this.localStorageService.get(storageKey);\r\n const isCollapsed = isNullOrUndefined(storedValue)\r\n ? true\r\n : storedValue;\r\n return isCollapsed;\r\n }\r\n\r\n private getSidebarState(): Sidebar.State {\r\n const state = this.store.getState();\r\n return state && state.sidebar;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Sidebar {\r\n import ContractModel = Modules.Housing.ContractModel;\r\n import WorkAreaModel = Modules.SelfService.Models.WorkAreaModel.ContactPerson;\r\n import IWorkAreaResourceClass = Umbrella.CustomerService.IWorkAreaResourceClass;\r\n\r\n @Component('CustomerService', {\r\n selector: 'card-sidebar-contact-persons',\r\n bindings: {\r\n collapsed: '<',\r\n contracts: '<',\r\n onToggle: '&'\r\n },\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/Sidebar/CardSidebarContactPersonsComponent/CardSidebarContactPersons.html'\r\n })\r\n @Inject('WorkAreaResource', 'PhoneService')\r\n class CardSidebarContactPersonsComponent {\r\n public collapsed: boolean;\r\n public contracts: PagedItemsModel;\r\n public workareas: { [index: string]: WorkAreaModel[] };\r\n public workAreaGroups: {\r\n [areaId: string]: { [groupName: string]: WorkAreaModel[] };\r\n };\r\n\r\n public onToggle: () => void;\r\n\r\n constructor(public workAreaResource: IWorkAreaResourceClass, public phoneService) {}\r\n\r\n public $onInit() {\r\n if (this.contracts && this.contracts.total) this.loadWorkAreasForActiveContracts(this.contracts);\r\n }\r\n\r\n public callNr(nr: string): void {\r\n this.phoneService.callNr(nr);\r\n }\r\n\r\n public getResidentialZoneName(id: string): string {\r\n const contract = this.contracts.items.filter(x => x.unit.id === id)[0];\r\n return contract ? contract.unit.addressLine : '';\r\n }\r\n\r\n public getResourceCount(): number {\r\n let total = 0;\r\n for (const groupKey in this.workAreaGroups) {\r\n const group = this.workAreaGroups[groupKey];\r\n if (group) {\r\n for (const workAreaKey in group) {\r\n total += group[workAreaKey].length;\r\n }\r\n }\r\n }\r\n\r\n return total;\r\n }\r\n\r\n private loadWorkAreasForActiveContracts(contracts: PagedItemsModel) {\r\n const activeContracts = contracts.items.filter(x => this.isActiveContract(x));\r\n if (!activeContracts.length) return;\r\n\r\n const unitIds = activeContracts.map(x => x.unit.id);\r\n const onlyUnique = (value, index, self) => self.indexOf(value) === index;\r\n const uniqueUnitIds = unitIds.filter(onlyUnique).slice(0, 5);\r\n if (!uniqueUnitIds.length) return;\r\n\r\n this.workAreaResource.getAllForResidentialZones({ ids: uniqueUnitIds }).$promise.then(workareas => {\r\n this.workareas = workareas;\r\n const workAreaGroups: {\r\n [areaId: string]: {\r\n [groupName: string]: WorkAreaModel[];\r\n };\r\n } = {};\r\n\r\n uniqueUnitIds.forEach(areaId => {\r\n const areaGroups: {\r\n [groupName: string]: WorkAreaModel[];\r\n } = {};\r\n\r\n const workAreas = workareas && workareas[areaId.toString()];\r\n workAreas.forEach(item => {\r\n const groupName = item.expertise.description || item.expertise.name;\r\n areaGroups[groupName] = areaGroups[groupName] || [];\r\n areaGroups[groupName].push(item);\r\n });\r\n workAreaGroups[areaId.toString()] = areaGroups;\r\n });\r\n\r\n this.workAreaGroups = workAreaGroups;\r\n });\r\n }\r\n\r\n private isActiveContract(contract: ContractModel) {\r\n return contract.status.toString() === 'Active' || contract.status === 1;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import Dictionary = Umbrella.Indicators.Dictionary;\r\n\r\n @Component('CustomerService', {\r\n selector: 'card-sidebar-contract-info',\r\n bindings: {\r\n collapsed: '<',\r\n contracts: '<',\r\n onToggle: '&'\r\n },\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/Sidebar/CardSidebarContractInfoComponent/CardSidebarContractInfo.html'\r\n })\r\n @Inject('IndicatorEvaluationResource')\r\n class CardSidebarContractInfoComponent {\r\n public collapsed: boolean;\r\n public contracts: PagedItemsModel;\r\n public indicators: Dictionary;\r\n public onToggle: () => void;\r\n private previousModels: Modules.Housing.ContractModel[];\r\n\r\n constructor(private indicatorEvaluationResource: IIndicatorEvaluationResourceClass) { \r\n }\r\n\r\n public $onChanges() {\r\n if (this.contracts && this.contracts.items && this.contracts.items.length && this.isModelChanged(this.contracts.items)) {\r\n let models = this.contracts.items.map(x => { return { key: x.id.toString(), models: [{ Contract: x }] } });\r\n this.indicatorEvaluationResource\r\n .indicatorsForMultipleKeys(models)\r\n .$promise\r\n .then(indicators => {\r\n this.indicators = indicators;\r\n });\r\n }\r\n }\r\n\r\n private isModelChanged(models: Modules.Housing.ContractModel[]): boolean {\r\n const isChanged = JSON.stringify(this.previousModels) !== JSON.stringify(models);\r\n this.previousModels = models;\r\n return isChanged;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import PhoneService = Modules.Telephony.PhoneService;\r\n import ContractorModel = Modules.Housing.ContractorModel;\r\n import copyToClipboard = Umbrella.Helpers.copyToClipboard;\r\n import AddressModel = Umbrella.Modules.AddressModel;\r\n import RegistrationsResource = Umbrella.CustomerService.CustomerCard.Registrations.RegistrationsResource;\r\n import RegistrantInfoModel = Umbrella.HousingAllocation.Registrations.RegistrantInfoModel;\r\n\r\n interface ContractorRegistrationInfo {\r\n personId: Guid;\r\n regInfo: RegistrantInfoModel;\r\n }\r\n\r\n const isHousingAllocationAvailable = () =>\r\n window &&\r\n window.config &&\r\n window.config.facets &&\r\n window.config.facets.housingAllocation &&\r\n window.config.facets.housingAllocation[0] &&\r\n window.config.facets.housingAllocation[0].available;\r\n\r\n @Component('CustomerService', {\r\n selector: 'card-sidebar-contractors',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/Sidebar/CardSidebarContractorsComponent/CardSidebarContractors.html',\r\n bindings: {\r\n collapsed: '<',\r\n person: '<',\r\n contractors: '<',\r\n onToggle: '&'\r\n }\r\n })\r\n @Inject('$sce', 'PhoneService', 'ToastMessageService', 'RegistrationsResource')\r\n class CardSidebarContractorsComponent {\r\n public collapsed: boolean;\r\n public contractors: ContractorModel[];\r\n public onToggle: () => void;\r\n public contractorsRegInfo: ContractorRegistrationInfo[];\r\n\r\n constructor(\r\n private $sce: ng.ISCEService,\r\n private phoneService: PhoneService,\r\n private toast: ToastMessageService,\r\n private registrationsResource: RegistrationsResource\r\n ) {}\r\n\r\n public $onInit() {\r\n if (isHousingAllocationAvailable()) {\r\n this.getContractorsRegistrantInfo();\r\n }\r\n }\r\n\r\n private async getContractorsRegistrantInfo(): Promise {\r\n this.contractorsRegInfo = [];\r\n this.contractors.forEach(async c => {\r\n await this.registrationsResource\r\n .getRegistrantInfoByPerson({\r\n id: c.person.id\r\n })\r\n .$promise.then(x => {\r\n this.contractorsRegInfo.push({\r\n personId: c.person.id,\r\n regInfo: x\r\n });\r\n });\r\n });\r\n }\r\n\r\n public hasActiveHousingRegistration(personId: Guid): boolean {\r\n if (!this.contractorsRegInfo || !this.contractorsRegInfo.length) return false;\r\n\r\n const contractor = this.contractorsRegInfo.find(c => c.personId === personId);\r\n if (!contractor) return false;\r\n\r\n return contractor.regInfo.hasActiveHousingRegistration;\r\n }\r\n\r\n public copyToClipboard = (text: string) =>\r\n copyToClipboard(text, () => this.toast.info('Telefoonnummer gekopieerd'));\r\n\r\n public callNr(nr: string): void {\r\n this.phoneService.callNr(nr);\r\n }\r\n\r\n public isOccupantOnly(person: PersonModel): boolean {\r\n return person && person.roles && Object.keys(person.roles).length === 1 && person.roles['occupant'];\r\n }\r\n\r\n public getAsTrustedUrl(url: string): string {\r\n if (!url || !url.length) return url;\r\n\r\n return this.$sce.trustAsResourceUrl(url);\r\n }\r\n\r\n public showCountry(address: AddressModel): Boolean {\r\n return (\r\n address.country && address.country.toLowerCase() != 'nederland' && address.country.toLowerCase() != 'nl'\r\n );\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n @Component('CustomerService', {\r\n selector: 'card-sidebar-vendor-info',\r\n bindings: {\r\n person: '<'\r\n },\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/Sidebar/CardSidebarVendorInfoComponent/CardSidebarVendorInfo.html'\r\n })\r\n @Inject('PhoneService')\r\n class CardSidebarVendorInfoComponent {\r\n constructor(public phoneService) {}\r\n\r\n public person: PersonModel;\r\n\r\n public callNr(nr: string): void {\r\n this.phoneService.callNr(nr);\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Sidebar {\r\n import ContractModel = Modules.Housing.ContractModel;\r\n import OutstandingBalanceModel = Modules.Housing.OutstandingBalanceModel;\r\n import ContractorModel = Modules.Housing.ContractorModel;\r\n\r\n export interface SidebarPanelsState {\r\n contractorPanelCollapsed: boolean;\r\n contractPanelCollapsed: boolean;\r\n contactPanelCollapsed: boolean;\r\n }\r\n\r\n export interface PersonIndicatorEvaluationModel {\r\n accountNumber?: string;\r\n contract?: Umbrella.Modules.Housing.SimpleContractModel;\r\n customerNumber?: string;\r\n externalUrl?: string;\r\n active?: boolean;\r\n age?: number;\r\n characteristic?: number;\r\n correspondenceType?: Umbrella.Modules.CorrespondenceType;\r\n email?: string;\r\n homeAddress?: Umbrella.Modules.AddressModel;\r\n id?: System.Guid;\r\n isAggressive?: boolean;\r\n legalPerson?: Umbrella.Modules.LegalPersonModel;\r\n mobile?: string;\r\n name?: string;\r\n naturalPerson?: Umbrella.Modules.NaturalPersonModel;\r\n personId?: System.Guid;\r\n phone?: string;\r\n phoneNumber?: string;\r\n phoneNumber2?: string;\r\n postalAddress?: Umbrella.Modules.AddressModel;\r\n properties?: any;\r\n type?: string;\r\n contactDetails?: Umbrella.PersonContactDetailsModel;\r\n // correspondenceType: Umbrella.Modules.CorrespondenceType;\r\n // id: System.Guid;\r\n // isAggressive: boolean;\r\n isExcludedFromSingleService?: boolean;\r\n // name: string;\r\n roles?: System.Collections.Generic.KeyValuePair[];\r\n // type: string;\r\n hasArrears?: boolean;\r\n hasPaymentArrangement?: boolean;\r\n hasUnpaidBills?: boolean;\r\n isBailiffCase?: boolean;\r\n outstandingBalance?: number;\r\n }\r\n\r\n export interface CustomerCardSidebarComponentState {\r\n loading: boolean;\r\n person: PersonModel;\r\n account: Accounts.AccountModel;\r\n customer: Modules.Customers.CustomerModel;\r\n contracts: PagedItemsModel;\r\n contractors: ContractorModel[];\r\n outstandingBalance: OutstandingBalanceModel;\r\n panelState: SidebarPanelsState;\r\n }\r\n\r\n export interface PersonIndicatorModel {\r\n Account: Accounts.AccountModel;\r\n Person: PersonIndicatorEvaluationModel;\r\n }\r\n\r\n export interface CustomerIndicatorModel extends PersonIndicatorModel {\r\n Unit: Modules.Housing.UnitModel.Extended;\r\n }\r\n\r\n export interface ContractIndicatorModel {\r\n Contract: ContractModel;\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'customer-card-sidebar',\r\n templateUrl: '/CustomerService/_CustomerCard/Sidebar/CustomerCardSidebarComponent/CustomerCardSideBar.html',\r\n bindings: { stateStream: '<' }\r\n })\r\n @Inject('CustomerCardSidebarService')\r\n class CustomerCardSidebarComponent {\r\n public stateStream: Rx.Subject;\r\n public state: CustomerCardSidebarComponentState;\r\n public indicatorModels: (PersonIndicatorModel | CustomerIndicatorModel | ContractIndicatorModel)[];\r\n private stateObserver: Rx.IDisposable;\r\n\r\n constructor(private customerCardSidebarService: CustomerCardSidebarService) {}\r\n\r\n public $onInit() {\r\n const personHasRoles = (x: CustomerCardSidebarComponentState) => !!(x && x.person && x.person.roles);\r\n const isCustomer = (x: CustomerCardSidebarComponentState) =>\r\n !!(x && x.person && x.person.roles['customer']);\r\n const allPersonDataLoaded = (x: CustomerCardSidebarComponentState) => !!(x && x.person && x.account);\r\n const isOutstandingBalanceLoadedOrNoFinancialPermissions = (x: CustomerCardSidebarComponentState) =>\r\n !window.user.permissions.billRead || (window.user.permissions.billRead && x.outstandingBalance);\r\n const allCustomerDataLoaded = (x: CustomerCardSidebarComponentState) =>\r\n !!(\r\n allPersonDataLoaded(x) &&\r\n x.contractors &&\r\n x.contracts &&\r\n isOutstandingBalanceLoadedOrNoFinancialPermissions(x)\r\n );\r\n\r\n this.stateObserver = this.stateStream\r\n .filter(personHasRoles)\r\n .filter(x => (isCustomer(x) ? allCustomerDataLoaded(x) : allPersonDataLoaded(x)))\r\n .distinctUntilChanged()\r\n .debounce(1000) //prevent lots of indicator requests because of model changes during loading the customer card\r\n .subscribe(state => {\r\n this.state = {\r\n ...state,\r\n panelState:\r\n this.state && this.state.panelState // HACK: To prevent delay of 1 second for state change\r\n ? { ...this.state.panelState }\r\n : state.panelState && { ...state.panelState }\r\n };\r\n if (isCustomer(state)) this.mapCustomerStateToIndicatorModel(state);\r\n else this.mapPersonStateToIndicatorModel(state);\r\n });\r\n }\r\n\r\n public $onDestroy() {\r\n if (this.stateObserver) this.stateObserver.dispose();\r\n\r\n this.stateObserver = null;\r\n }\r\n\r\n public toggleContractorPanel(): void {\r\n this.customerCardSidebarService.toggleContractorPanel();\r\n this.state.panelState.contractorPanelCollapsed = !this.state.panelState.contractorPanelCollapsed; // HACK: To prevent delay of 1 second for state change\r\n }\r\n\r\n public toggleContractPanel(): void {\r\n this.customerCardSidebarService.toggleContractPanel();\r\n this.state.panelState.contractPanelCollapsed = !this.state.panelState.contractPanelCollapsed; // HACK: To prevent delay of 1 second for state change\r\n }\r\n\r\n public toggleContactPanel(): void {\r\n this.customerCardSidebarService.toggleContactPanel();\r\n this.state.panelState.contactPanelCollapsed = !this.state.panelState.contactPanelCollapsed; // HACK: To prevent delay of 1 second for state change\r\n }\r\n\r\n public isAuthorizedForContactPersons(): boolean {\r\n return window.user.permissions.contactPersonRead;\r\n }\r\n\r\n private mapCustomerStateToIndicatorModel(state: CustomerCardSidebarComponentState) {\r\n const person = {};\r\n const customer = {};\r\n const contract = state.contracts.items.length && state.contracts.items[0];\r\n const unit = contract && this.isActiveContract(contract) && contract.unit;\r\n const hasBailiffCase = state.contracts.items.filter(x => x.bailiffCase).length > 0;\r\n const hasArrears = state.contracts.items.filter(x => x.hasArrears).length > 0;\r\n const hasPaymentArrangement = state.contracts.items.filter(x => x.hasPaymentArrangement).length > 0;\r\n const hasUnpaidBills = state.contracts.items.filter(x => x.hasUnpaidBills).length > 0;\r\n\r\n const isPropertiesProperty = key => key.toLowerCase() === 'properties';\r\n Object.keys(state.person || {})\r\n .filter(key => !isPropertiesProperty(key))\r\n .map(x => (person[x] = state.person[x]));\r\n Object.keys(state.customer || {})\r\n .filter(key => !isPropertiesProperty(key))\r\n .map(x => (customer[x] = state.customer[x]));\r\n\r\n const customerProperties = state.customer && state.customer.properties ? state.customer.properties : {};\r\n const personProperties = state.person && state.person.properties ? state.person.properties : {};\r\n const properties = Object.assign(customerProperties, personProperties);\r\n\r\n const contractIndicatorModels = state.contracts.items\r\n .filter(contract => this.isActiveContract(contract))\r\n .map(contract => ({ Contract: { ...contract } }));\r\n const personIndicatorModel = {\r\n Account: {\r\n ...state.account\r\n },\r\n Person: {\r\n ...customer,\r\n ...person,\r\n ...{ properties },\r\n ...state.outstandingBalance,\r\n hasBailiffCase,\r\n hasArrears,\r\n hasPaymentArrangement,\r\n hasUnpaidBills\r\n },\r\n Unit: {\r\n ...unit\r\n }\r\n };\r\n\r\n this.indicatorModels = [personIndicatorModel, ...contractIndicatorModels];\r\n }\r\n\r\n private isActiveContract(contract: ContractModel) {\r\n return contract.status.toString() === 'Active' || contract.status === 1;\r\n }\r\n\r\n private mapPersonStateToIndicatorModel(state: CustomerCardSidebarComponentState) {\r\n const personIndicatorModel = {\r\n Account: {\r\n ...state.account\r\n },\r\n Person: {\r\n ...state.person\r\n }\r\n };\r\n\r\n this.indicatorModels = [personIndicatorModel];\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\ninterface SignalR {\r\n activityHub: Umbrella.CustomerService.CustomerCard.Activities.IActivityHubProxy;\r\n}\r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Activities {\r\n export interface IActivityHubProxy extends HubProxy {\r\n client: IActivityHubClient;\r\n server: IActivityHubServer;\r\n }\r\n\r\n export const activityHubOnUpdated$ = new Rx.Subject();\r\n export const activityHubOnStarted$ = new Rx.Subject();\r\n\r\n export interface IActivityHubClient {\r\n updated(personId: System.Guid);\r\n started(personId: System.Guid);\r\n }\r\n\r\n export interface IActivityHubServer {\r\n subscribe(personId: System.Guid);\r\n unsubscribe(personId: System.Guid);\r\n } \r\n\r\n angular\r\n .module('CustomerService')\r\n .factory('ActivityHub', () => $.connection.activityHub);\r\n\r\n Modules.onSignalRInitialized(() => {\r\n $.connection.activityHub.client.updated = personId =>\r\n activityHubOnUpdated$.onNext(personId);\r\n $.connection.activityHub.client.started = personId =>\r\n activityHubOnStarted$.onNext(personId);\r\n });\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.Activities {\r\n @Service('CustomerService', 'ActivityJitService')\r\n @Inject('CustomerCardStore', 'ActivityHub', 'CustomerCardActivityInfoService', 'ToastMessageService')\r\n export class ActivityJitService {\r\n private message: any;\r\n\r\n constructor(\r\n store: CustomerCardStore,\r\n private activityHub: IActivityHubProxy,\r\n customerCardActivityInfoService: CustomerCardActivityInfoService,\r\n private toastMessageService: ToastMessageService\r\n ) {\r\n const getPersonId = (state: CustomerCardState) =>\r\n state && state.personal && state.personal.person && state.personal.person.id;\r\n\r\n activityHubOnUpdated$\r\n .filter(personId => getPersonId(store.getState()) === personId)\r\n .debounce(() => Rx.Observable.timer(5000))\r\n .subscribe(list => {\r\n this.clearToastMessage();\r\n customerCardActivityInfoService.reload();\r\n });\r\n\r\n activityHubOnStarted$\r\n .filter(personId => getPersonId(store.getState()) === personId)\r\n .subscribe(() => {\r\n if (this.message) {\r\n return;\r\n }\r\n\r\n this.message = this.toastMessageService.updating('Tijdlijn gegevens', 60000, {\r\n onHidden: () => {\r\n this.message = null;\r\n }\r\n });\r\n\r\n setTimeout(() => {\r\n if (this.message) {\r\n this.message = null;\r\n }\r\n }, 60000);\r\n });\r\n\r\n store.state$\r\n .map(getPersonId)\r\n .distinctUntilChanged()\r\n .flatMapLatest(Modules.waitUntilSignalRConnected)\r\n .debounce(() => Rx.Observable.timer(1000))\r\n .subscribe(personId => this.subscribe(personId));\r\n\r\n store.event$\r\n .where(e => e.type === 'CustomerCardPersonUnloadedEvent')\r\n .subscribe(_ => this.unsubscribe(getPersonId(store.getState())));\r\n }\r\n\r\n private subscribe(personId: Guid) {\r\n if(personId) {\r\n this.activityHub.server.subscribe(personId);\r\n }\r\n this.clearToastMessage();\r\n }\r\n\r\n private unsubscribe(personId: Guid) {\r\n this.clearToastMessage();\r\n this.activityHub.server.unsubscribe(personId);\r\n }\r\n\r\n private clearToastMessage() {\r\n if (this.message) {\r\n this.toastMessageService.clear(this.message);\r\n this.message = null;\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Activities {\r\n import ICaseHistoryResourceClass = Modules.Cases.ICaseHistoryResourceClass;\r\n import CaseHistoryModel = Modules.CaseHistoryModel;\r\n import IActivityResourceClass = Modules.IActivityResourceClass;\r\n import ActivityCategoryModel = Modules.ActivityCategoryModel;\r\n import ThesaurusResource = Umbrella.Modules.Knowledgebase.ThesaurusResource;\r\n import StatusFilter = Umbrella.Modules.StatusFilter;\r\n import ChannelType = Umbrella.Modules.ChannelType;\r\n\r\n @Service('CustomerService', 'CustomerCardActivityInfoService')\r\n @Inject(\r\n 'CustomerCardStore',\r\n 'CaseHistoryResource',\r\n 'ActivityResource',\r\n 'ToastMessageService',\r\n 'SelfServiceScenarioResource',\r\n 'ThesaurusResource'\r\n )\r\n export class CustomerCardActivityInfoService extends BaseStoreService<\r\n CustomerCardState,\r\n CustomerCardEvent,\r\n CustomerCardStore\r\n > {\r\n private pageSize = 10;\r\n\r\n constructor(\r\n store: CustomerCardStore,\r\n private caseHistoryResource: ICaseHistoryResourceClass,\r\n private activityResource: IActivityResourceClass,\r\n private toastMessageService: ToastMessageService,\r\n private selfServiceScenarioResource: Umbrella.CustomerService.SelfServiceScenarioResource,\r\n private thesaurusResource: ThesaurusResource\r\n ) {\r\n super(store);\r\n }\r\n\r\n public ensureLoaded(personId: System.Guid, pageSize = 10, force = false): void {\r\n this.pageSize = pageSize;\r\n const state = this.getState();\r\n\r\n const isDifferentPerson = state.personal && state.personal.person && state.personal.person.id !== personId;\r\n if (isDifferentPerson) this.resetActivities();\r\n\r\n if (isDifferentPerson || !state.activityInfo || !state.activityInfo.cases || force)\r\n this.loadActivities(personId, null, 0, pageSize, cases => cases);\r\n\r\n this.loadFilters();\r\n }\r\n\r\n public deleteCase(id: Guid): void {\r\n const currentState = this.getState();\r\n\r\n this.caseHistoryResource\r\n .deleteItem({\r\n id: id\r\n })\r\n .$promise.then(() => {\r\n this.ensureLoaded(\r\n currentState.personal.person.id,\r\n currentState.activityInfo.cases.items.length,\r\n true\r\n );\r\n this.reload();\r\n this.toastMessageService.success('Zaak succesvol verwijderd');\r\n })\r\n .catch(() => {\r\n this.toastMessageService.error('Verwijderen van de zaak is mislukt');\r\n });\r\n }\r\n\r\n public restoreCase(id: Guid): void {\r\n const currentState = this.getState();\r\n\r\n this.caseHistoryResource\r\n .restoreItem({\r\n id: id\r\n })\r\n .$promise.then(() => {\r\n this.ensureLoaded(\r\n currentState.personal.person.id,\r\n currentState.activityInfo.cases.items.length,\r\n true\r\n );\r\n this.reload();\r\n this.toastMessageService.success('Zaak succesvol herstelt');\r\n })\r\n .catch(() => {\r\n this.toastMessageService.error('Herstellen van de zaak is mislukt.');\r\n });\r\n }\r\n\r\n public deleteActivity(id: Guid): void {\r\n const currentState = this.getState();\r\n\r\n this.activityResource\r\n .deleteItem({\r\n id: id\r\n })\r\n .$promise.then(() => {\r\n this.ensureLoaded(\r\n currentState.personal.person.id,\r\n currentState.activityInfo.cases.items.length,\r\n true\r\n );\r\n this.reload();\r\n this.toastMessageService.success('Gebeurtenis succesvol verwijderd');\r\n })\r\n .catch(() => {\r\n this.toastMessageService.error('Verwijderen van de gebeurtenis is mislukt');\r\n });\r\n }\r\n\r\n public restoreActivity(id: Guid): void {\r\n const currentState = this.getState();\r\n\r\n this.activityResource\r\n .restoreItem({\r\n id: id\r\n })\r\n .$promise.then(() => {\r\n this.ensureLoaded(\r\n currentState.personal.person.id,\r\n currentState.activityInfo.cases.items.length,\r\n true\r\n );\r\n this.reload();\r\n this.toastMessageService.success('Gebeurtenis succesvol herstelt');\r\n })\r\n .catch(() => {\r\n this.toastMessageService.error('herstellen van de gebeurtenis is mislukt.');\r\n });\r\n }\r\n\r\n public filterByQuery(query: string) {\r\n const state = this.getState();\r\n if (!state.personal || !state.personal.person || !state.activityInfo) return;\r\n\r\n const filters: Filters = {\r\n ...state.activityInfo.filters,\r\n query\r\n };\r\n\r\n if (JSON.stringify(state.activityInfo.filters) === JSON.stringify(filters)) return;\r\n\r\n this.loadActivities(state.personal.person.id, filters, 0, this.pageSize, cases => cases);\r\n }\r\n\r\n public filterByContract(contractId: System.Guid) {\r\n const state = this.getState();\r\n if (!state.personal || !state.personal.person || !state.activityInfo) return;\r\n\r\n const filters: Filters = {\r\n ...state.activityInfo.filters,\r\n contractId\r\n };\r\n\r\n if (JSON.stringify(state.activityInfo.filters) === JSON.stringify(filters)) return;\r\n\r\n this.loadActivities(state.personal.person.id, filters, 0, this.pageSize, cases => cases);\r\n }\r\n\r\n public filterByActivityCategory(category: string) {\r\n const state = this.getState();\r\n if (!state.personal || !state.personal.person || !state.activityInfo) return;\r\n\r\n const filters: Filters = {\r\n ...state.activityInfo.filters,\r\n activityCategory: category\r\n };\r\n\r\n if (JSON.stringify(state.activityInfo.filters) === JSON.stringify(filters)) return;\r\n\r\n this.loadActivities(state.personal.person.id, filters, 0, this.pageSize, cases => cases);\r\n }\r\n\r\n public filterByScenarioId(scenarioId: System.Guid): void {\r\n const state = this.getState();\r\n if (!state.personal || !state.personal.person || !state.activityInfo) return;\r\n\r\n const filters: Filters = {\r\n ...state.activityInfo.filters,\r\n selectedScenarioId: scenarioId\r\n };\r\n\r\n if (JSON.stringify(state.activityInfo.filters) === JSON.stringify(filters)) return;\r\n\r\n this.loadActivities(state.personal.person.id, filters, 0, this.pageSize, cases => cases);\r\n }\r\n\r\n public filterByTagId(tagId: System.Guid): void {\r\n const state = this.getState();\r\n if (!state.personal || !state.personal.person || !state.activityInfo) return;\r\n\r\n const filters: Filters = {\r\n ...state.activityInfo.filters,\r\n selectedTagId: tagId\r\n };\r\n\r\n if (JSON.stringify(state.activityInfo.filters) === JSON.stringify(filters)) return;\r\n\r\n this.loadActivities(state.personal.person.id, filters, 0, this.pageSize, cases => cases);\r\n }\r\n\r\n public filterByStatus(statusFilter: StatusFilter): void {\r\n const state = this.getState();\r\n if (!state.personal || !state.id || !state.activityInfo) return;\r\n\r\n const filters: Filters = {\r\n ...state.activityInfo.filters,\r\n status: statusFilter\r\n };\r\n if (JSON.stringify(state.activityInfo.filters) === JSON.stringify(filters)) return;\r\n this.loadActivities(state.id, filters, 0, this.pageSize, cases => cases);\r\n }\r\n\r\n public filterByChannel(channelFilter: string) {\r\n const state = this.getState();\r\n if (!state.personal || !state.personal.person || !state.activityInfo) return;\r\n\r\n const filters: Filters = {\r\n ...state.activityInfo.filters,\r\n channel: ChannelType[channelFilter]\r\n };\r\n\r\n if (JSON.stringify(state.activityInfo.filters) === JSON.stringify(filters)) return;\r\n\r\n this.loadActivities(state.personal.person.id, filters, 0, this.pageSize, cases => cases);\r\n }\r\n\r\n public loadMore(): void {\r\n const state = this.store.getState();\r\n if (!state.personal || !state.personal.person || !state.activityInfo) return;\r\n\r\n this.loadActivities(\r\n state.personal.person.id,\r\n state.activityInfo.filters,\r\n state.activityInfo.cases.page + 1,\r\n state.activityInfo.cases.pageSize,\r\n cases => ({\r\n items:\r\n state.activityInfo && state.activityInfo.cases\r\n ? state.activityInfo.cases.items.concat(cases.items)\r\n : cases.items,\r\n total: cases.total,\r\n page: cases.page,\r\n pageSize: cases.pageSize\r\n })\r\n );\r\n }\r\n\r\n public reload(): void {\r\n const state = this.store.getState();\r\n if (!state.personal || !state.personal.person || !state.activityInfo || !state.activityInfo.cases) return;\r\n\r\n const currentNrOfActivities = state.activityInfo.cases.items.length;\r\n this.loadActivities(\r\n state.personal.person.id,\r\n state.activityInfo.filters,\r\n 0,\r\n currentNrOfActivities < 10 ? 10 : currentNrOfActivities,\r\n cases => cases\r\n );\r\n }\r\n\r\n private resetActivities() {\r\n this.emit({\r\n type: 'CustomerCardActivitiesResetEvent'\r\n });\r\n }\r\n\r\n private loadActivities(\r\n personId: System.Guid,\r\n filters: Filters,\r\n page: number,\r\n pageSize,\r\n loaded: (a: PagedItemsModel) => PagedItemsModel\r\n ) {\r\n const displayActivityCount =\r\n window.clientConfig &&\r\n window.clientConfig.features &&\r\n window.clientConfig.features.find(x => x.name === 'timelineActivityCount');\r\n\r\n this.emit({\r\n type: 'CustomerCardActivitiesLoadingEvent',\r\n filters,\r\n page,\r\n pageSize\r\n });\r\n\r\n const promise = this.caseHistoryResource.filterByPersonIdAndFilters({\r\n page,\r\n pageSize,\r\n id: personId,\r\n query: filters ? filters.query : '',\r\n category: filters ? filters.activityCategory : '',\r\n contractId: filters ? filters.contractId : '',\r\n sssIds: filters && filters.selectedScenarioId ? [filters.selectedScenarioId] : [],\r\n tagIds: filters && filters.selectedTagId ? [filters.selectedTagId] : [],\r\n status: filters && filters.status,\r\n channel: filters && filters.channel\r\n }).$promise;\r\n\r\n promise\r\n .then(data => {\r\n this.linkActivitiesToCaseAsSolutionToPreventBigDataResponse(data);\r\n const cases = loaded(data);\r\n\r\n this.emit({\r\n type: 'CustomerCardActivitiesLoadedEvent',\r\n filters,\r\n cases: {\r\n ...cases,\r\n page,\r\n pageSize\r\n }\r\n });\r\n })\r\n .catch(this.onError);\r\n }\r\n\r\n private onError(e: any): void {\r\n this.toastMessageService.error('Fout opgetreden tijdens ophalen van gebeurtenissen');\r\n this.emit({\r\n type: 'CustomerCardActivitiesLoadErrorEvent',\r\n error: e\r\n });\r\n }\r\n\r\n public removeCase(caseId: Guid): void {\r\n if (!caseId) return;\r\n\r\n const state = this.store.getState();\r\n const activityInfo = state && state.activityInfo;\r\n const cases = activityInfo && activityInfo.cases;\r\n const updatedCases: PagedItemsModel = {\r\n ...cases,\r\n items: cases.items.filter(x => x.case.id !== caseId),\r\n total: cases.total - 1\r\n };\r\n\r\n const filters = activityInfo && activityInfo.filters;\r\n\r\n this.emit({\r\n type: 'CustomerCardActivitiesLoadedEvent',\r\n filters,\r\n cases: updatedCases\r\n });\r\n }\r\n\r\n public getStatusFilter(): Rx.Observable {\r\n return this.store.state$.map(x => x.activityInfo && x.activityInfo.filters && x.activityInfo.filters.status);\r\n }\r\n\r\n private linkActivitiesToCaseAsSolutionToPreventBigDataResponse(data: PagedItemsModel): void {\r\n for (const item of data.items) {\r\n if (item.firstActivity) item.firstActivity.case = item.case;\r\n\r\n if (item.lastActivity) item.lastActivity.case = item.case;\r\n }\r\n }\r\n\r\n private loadFilters(): void {\r\n const state = this.getState();\r\n const filters = state.activityInfo && state.activityInfo.filters;\r\n\r\n if (!filters || !filters.allActivityCategories) this.loadActivityCategories();\r\n\r\n if (!filters || !filters.allScenarios) this.loadAllSelfserviceScenarios();\r\n\r\n if (!filters || !filters.rootTags) this.loadRootTags();\r\n }\r\n\r\n private loadActivityCategories(): void {\r\n this.activityResource.getCategories().$promise.then(categories => {\r\n this.emit({\r\n type: 'CustomerCardActivityCategoriesLoadedEvent',\r\n categories: this.filterActivityCategories(categories)\r\n });\r\n });\r\n }\r\n\r\n private loadAllSelfserviceScenarios() {\r\n this.selfServiceScenarioResource.getAll().$promise.then(scenarios => {\r\n const filteredScenarios = scenarios.filter(scenario => scenario.showInOverview);\r\n this.emit({\r\n type: 'CustomerCardAllScenariosLoadedEvent',\r\n scenarios: filteredScenarios\r\n });\r\n });\r\n }\r\n\r\n private loadRootTags() {\r\n this.thesaurusResource.getRootTags().$promise.then(tags => {\r\n this.emit({\r\n type: 'CustomerCardRootTagsLoadedEvent',\r\n tags\r\n });\r\n });\r\n }\r\n\r\n private filterActivityCategories(categories: ActivityCategoryModel[]) {\r\n return categories.filter(x => x.name !== 'Zaakgericht Werken').filter(x => x.name !== 'Document');\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Activities {\r\n export interface CustomerActivitiesStateParams {\r\n openKnowledgebase: boolean;\r\n openSelfServicePanel: boolean;\r\n personId: System.Guid;\r\n }\r\n\r\n function mapState(s: CustomerCardState): CustomerActivitiesComponentState {\r\n return {\r\n loading:\r\n (!s ||\r\n !s.personal ||\r\n !s.personal.person ||\r\n s.personal.loading ||\r\n (s.personal.person.roles['customer'] && (!s.announcementInfo || s.announcementInfo.loading))) &&\r\n (!s || !s.registrationInfo || !s.registrationInfo.registrations || s.registrationInfo.loading),\r\n person: s && s.personal && s.personal.person,\r\n registrationInfo: s && s.registrationInfo && s.registrationInfo.registrations,\r\n customer: s && s.customerInfo && s.customerInfo.customer,\r\n announcementInfo: s && s.announcementInfo,\r\n activityInfo: s && s.activityInfo,\r\n activityRegistrationInfo: s && s.activityRegistrationInfo,\r\n selfServiceScenarios: s && s.activityRegistrationInfo && s.activityRegistrationInfo.scenarios\r\n };\r\n }\r\n\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) =>\r\n $stateProvider.state('customerservice.customercard.timeline', {\r\n url: '/tijdlijn?openKnowledgebase&openSelfServicePanel',\r\n reloadOnSearch: false,\r\n data: { tab: 'tijdlijn', authorize: ps => ps.customerCard },\r\n views: {\r\n 'left@customerservice': {\r\n template: '',\r\n controller: Umbrella.createComponentRouteController<\r\n CustomerCardState,\r\n Timeline.CustomerTimelineFiltersComponentState\r\n >('CustomerCardStore', s => ({\r\n person: s && s.personal && s.personal.person,\r\n query: s && s.activityInfo && s.activityInfo.filters && s.activityInfo.filters.query,\r\n selectedContract:\r\n s && s.activityInfo && s.activityInfo.filters && s.activityInfo.filters.contractId,\r\n activityCategories:\r\n s &&\r\n s.activityInfo &&\r\n s.activityInfo.filters &&\r\n s.activityInfo.filters.allActivityCategories,\r\n selectedCategory:\r\n s &&\r\n s.activityInfo &&\r\n s.activityInfo.filters &&\r\n s.activityInfo.filters.activityCategory,\r\n allScenarios:\r\n s && s.accountInfo && s.activityInfo.filters && s.activityInfo.filters.allScenarios,\r\n rootTags: s && s.accountInfo && s.activityInfo.filters && s.activityInfo.filters.rootTags\r\n }))\r\n },\r\n 'tab@customerservice': {\r\n template: '',\r\n controller: createComponentRouteController('CustomerCardStore', mapState)\r\n }\r\n },\r\n onEnter: [\r\n '$stateParams',\r\n 'CustomerCardActivityInfoService',\r\n 'CustomerCardAnnouncementInfoService',\r\n 'CustomerCardRegistrationInfoService',\r\n (\r\n $stateParams: CardStateParams,\r\n activityService: CustomerCardActivityInfoService,\r\n announcementService: CustomerCardAnnouncementInfoService\r\n ) => {\r\n if (!$stateParams.personId) return;\r\n\r\n activityService.ensureLoaded($stateParams.personId);\r\n if (window.user.permissions.announcementRead) announcementService.ensureLoaded();\r\n }\r\n ]\r\n })\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n @Service('Umbrella', 'ToastMessageService')\r\n export class ToastMessageService {\r\n private defaultTimeOut = 3000;\r\n private errorTimeOut = 10000;\r\n private defaultOptions = {\r\n positionClass: 'toast-top-center',\r\n hideDuration: 100,\r\n timeOut: this.defaultTimeOut\r\n };\r\n\r\n constructor() {\r\n toastr.options = this.defaultOptions;\r\n }\r\n\r\n public info(text: string, duration: number = this.defaultTimeOut): JQuery {\r\n const options = { ...this.defaultOptions, timeOut: duration };\r\n return toastr.info(text, '', options);\r\n }\r\n\r\n public success(text: string, duration: number = this.defaultTimeOut): JQuery {\r\n const options = { ...this.defaultOptions, timeOut: duration };\r\n return toastr.success(text, '', options);\r\n }\r\n\r\n public warning(text: string, duration: number = this.defaultTimeOut): JQuery {\r\n const options = { ...this.defaultOptions, timeOut: duration };\r\n return toastr.warning(text, '', options);\r\n }\r\n\r\n public error(text: string, duration: number = this.errorTimeOut): JQuery {\r\n const options = { ...this.defaultOptions, timeOut: duration };\r\n return toastr.error(text, '', options);\r\n }\r\n\r\n public updating(text: string, duration: number = this.defaultTimeOut, options: ToastrOptions = {}): JQuery {\r\n const passedOptions = {\r\n ...this.defaultOptions,\r\n timeOut: duration,\r\n positionClass: 'toast-syncronize-container',\r\n toastClass: 'toast-syncronize',\r\n ...options\r\n };\r\n return toastr.info(text, '', passedOptions);\r\n }\r\n\r\n public clear(toast: JQuery): void {\r\n toastr.clear(toast);\r\n }\r\n\r\n public clearAll(): void {\r\n toastr.clear();\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard {\r\n import AnnouncementResourceClass = Umbrella.Modules.Announcements.AnnouncementResourceClass;\r\n import AnnoucementModel = Umbrella.Modules.Announcements.AnnouncementModel;\r\n\r\n @Component('CustomerService', {\r\n selector: 'register-announcement-popup',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Activities/RegisterAnnouncementPopupComponent/RegisterAnnouncementPopup.html',\r\n bindings: {\r\n personId: '@',\r\n residentialZoneId: '@'\r\n }\r\n })\r\n @Inject(\r\n '$mdDialog',\r\n 'EmptyGuid',\r\n 'AnnouncementResource',\r\n 'ToastMessageService'\r\n )\r\n class RegisterAnnouncementPopupComponent {\r\n private personId: System.Guid;\r\n private residentialZoneId: System.Guid;\r\n\r\n public announcement: AnnoucementModel.Edit;\r\n\r\n constructor(\r\n private $mdDialog,\r\n private emptyGuid: System.Guid,\r\n private announcementResource: AnnouncementResourceClass,\r\n private toastMessageService: ToastMessageService\r\n ) {}\r\n\r\n public $onInit() {\r\n this.announcement = {\r\n id: this.emptyGuid,\r\n created: new Date(),\r\n createdBy: null,\r\n description: '',\r\n endDate: null,\r\n isExternal: false,\r\n lastModifiedBy: null,\r\n modified: null,\r\n order: 0,\r\n personIds: this.personId ? [this.personId] : [],\r\n properties: null,\r\n residentialZoneIds: this.residentialZoneId\r\n ? [this.residentialZoneId]\r\n : [],\r\n startDate: null,\r\n title: '',\r\n url: '',\r\n applicationIds: null\r\n };\r\n }\r\n\r\n public cancel(): void {\r\n this.$mdDialog.cancel();\r\n }\r\n\r\n public save(): void {\r\n this.announcement.created = new Date();\r\n\r\n this.announcementResource\r\n .save(this.announcement)\r\n .$promise.then(() => {\r\n this.toastMessageService.success(\r\n 'Mededeling succesvol vastgelegd'\r\n );\r\n this.$mdDialog.hide();\r\n })\r\n .catch(() =>\r\n this.toastMessageService.error(\r\n 'Fout opgetreden tijdens vastleggen van de mededeling'\r\n )\r\n );\r\n }\r\n\r\n public resetStartDate() {\r\n this.announcement.startDate = null;\r\n }\r\n\r\n public resetEndDate() {\r\n this.announcement.endDate = null;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Knowledgebase {\r\n @Service('Knowledgebase', 'FaqService')\r\n @Inject('EmptyGuid')\r\n export class FaqService {\r\n constructor(private emptyGuid: System.Guid) {}\r\n\r\n createNewFollowUpQuestion(\r\n question: string,\r\n answer: string,\r\n name: string,\r\n index: number,\r\n parent: FollowupQuestionModel\r\n ): FollowupQuestionModel {\r\n return {\r\n id: this.emptyGuid,\r\n parent,\r\n question,\r\n answer,\r\n icon: null,\r\n value: null,\r\n name,\r\n index,\r\n parentId: parent ? parent.id : null,\r\n options: []\r\n };\r\n }\r\n\r\n createEmptyFaq(applicationIds: System.Guid[] = []): AdminFaqModel {\r\n return {\r\n //Update\r\n applicationIds,\r\n media: [],\r\n followupQuestion: null,\r\n targetGroups: [],\r\n\r\n //FaqModel\r\n additionalInternalInfo: '',\r\n mainTag: null,\r\n tags: [],\r\n synonyms: [],\r\n\r\n //SimpleFaqModel\r\n answer: '',\r\n author: null,\r\n created: new Date(),\r\n faqType: {\r\n name: FaqType.Default.toString(),\r\n value: FaqType.Default\r\n },\r\n lastModified: null,\r\n lastModifiedBy: null,\r\n lastPublished: null,\r\n question: '',\r\n deletion: null,\r\n status: PublicationStatus.Concept\r\n };\r\n }\r\n createEmptyFollowUpQuestion(): FollowupQuestionModel {\r\n return this.createNewFollowUpQuestion('', '', '', 0, null);\r\n }\r\n createEmptyFollowUpQuestionLinkedToParent(\r\n parent: FollowupQuestionModel\r\n ): FollowupQuestionModel {\r\n return this.createNewFollowUpQuestion('', '', '', 0, parent);\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Knowledgebase.Faq {\r\n export interface IAdminFaqResource\r\n extends angular.resource.IResource,\r\n AdminFaqModel {}\r\n export interface AdminFaqResourceClass\r\n extends angular.resource.IResourceClass {\r\n getById(params: any): IAdminFaqResource;\r\n update(model: AdminFaqModel): IAdminFaqResource;\r\n findByName(\r\n {\r\n id,\r\n page,\r\n pageSize,\r\n status,\r\n applicationId\r\n }: {\r\n id: string;\r\n page: number;\r\n pageSize: number;\r\n status?: PublicationStatus;\r\n applicationId?: System.Guid;\r\n },\r\n onSuccessCallback?: Function,\r\n onErrorCallback?: Function\r\n ): angular.resource.IResource>;\r\n getAll(\r\n {\r\n page,\r\n pageSize,\r\n status,\r\n thesaurus,\r\n applicationId\r\n }: {\r\n page: number;\r\n pageSize: number;\r\n status?: PublicationStatus;\r\n thesaurus?: System.Guid;\r\n applicationId?: System.Guid;\r\n },\r\n onSuccessCallback?: Function,\r\n onErrorCallback?: Function\r\n ): angular.resource.IResource>;\r\n }\r\n angular.module('Knowledgebase').service('AdminFaqResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) => {\r\n return $resource(\r\n '/api/v1/faqs/admin/:action/:id',\r\n {},\r\n {\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n save: {\r\n method: 'POST',\r\n isArray: false,\r\n params: {}\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: {}\r\n },\r\n findByName: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'search',\r\n id: '',\r\n page: 0,\r\n pageSize: 25,\r\n applicationId: null\r\n }\r\n },\r\n getAll: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'all',\r\n page: 0,\r\n pageSize: 25,\r\n applicationId: null\r\n }\r\n },\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import AdminFaqModel = Umbrella.Modules.Knowledgebase.AdminFaqModel;\r\n import AdminFaqResourceClass = Umbrella.Modules.Knowledgebase.Faq.AdminFaqResourceClass;\r\n import FaqService = Umbrella.Modules.Knowledgebase.FaqService;\r\n import ThesaurusTagModel = Umbrella.Modules.Knowledgebase.ThesaurusTagModel;\r\n\r\n @Component('CustomerService', {\r\n selector: 'register-faq-popup',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Activities/RegisterFaqPopupComponent/RegisterFaqPopup.html',\r\n bindings: {\r\n tag: '<'\r\n }\r\n })\r\n @Inject(\r\n '$mdDialog',\r\n 'EmptyGuid',\r\n 'AdminFaqResource',\r\n 'ToastMessageService',\r\n 'FaqService',\r\n 'ApplicationResource'\r\n )\r\n class RegisterFaqPopupComponent {\r\n public faq: AdminFaqModel;\r\n private tag: ThesaurusTagModel;\r\n\r\n constructor(\r\n private $mdDialog,\r\n private emptyGuid: System.Guid,\r\n private adminFaqResource: AdminFaqResourceClass,\r\n private toastMessageService: ToastMessageService,\r\n private faqService: FaqService,\r\n private applicationResource: Umbrella.IApplicationResource\r\n ) {}\r\n\r\n public $onInit() {\r\n this.faq = this.faqService.createEmptyFaq();\r\n this.faq.status = Modules.Knowledgebase.PublicationStatus.ToReview;\r\n this.applicationResource.mine()\r\n .$promise\r\n .then(app => this.faq.applicationIds = [app.id]);\r\n }\r\n\r\n public cancel(): void {\r\n this.$mdDialog.cancel();\r\n }\r\n\r\n public save(faq: AdminFaqModel): void {\r\n if (!faq || !this.tag) return;\r\n\r\n this.faq.mainTag = this.tag;\r\n this.faq.tags = [this.tag];\r\n \r\n this.adminFaqResource\r\n .save(faq)\r\n .$promise.then(faq => {\r\n this.toastMessageService.success(\r\n 'Vraag succesvol vastgelegd'\r\n );\r\n this.$mdDialog.hide(faq);\r\n })\r\n .catch(() =>\r\n this.toastMessageService.error(\r\n 'Fout opgetreden tijdens vastleggen van de vraag'\r\n )\r\n );\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.Activities.Registration {\r\n import ChannelType = Umbrella.Modules.ChannelType;\r\n import SelfServiceScenarioModel = Umbrella.Modules.SelfService.SelfServiceScenarioModel;\r\n import FaqModel = Umbrella.Modules.Knowledgebase.FaqModel;\r\n import ThesaurusTagModel = Umbrella.Modules.Knowledgebase.ThesaurusTagModel;\r\n import TaskTypeModel = Umbrella.Modules.Tasks.TaskTypeModel;\r\n import TargetGroupModel = Umbrella.Modules.Knowledgebase.TargetGroupModel;\r\n import ContactDirection = Modules.Contacts.ContactDirection;\r\n\r\n export interface TagInfo {\r\n readonly loading: boolean;\r\n readonly tags: ThesaurusTagModel[];\r\n }\r\n\r\n export interface FaqConcept {\r\n readonly id?: System.Guid;\r\n readonly saving: boolean;\r\n readonly question: string;\r\n readonly answer: string;\r\n }\r\n\r\n export interface FaqInfo {\r\n readonly loading: boolean;\r\n readonly faqs: PagedItemsModel;\r\n readonly faqConcept: FaqConcept;\r\n }\r\n\r\n export interface NewContact {\r\n description: string;\r\n roleId: System.Guid;\r\n caseId: System.Guid;\r\n contractId: System.Guid;\r\n notifyClient: boolean;\r\n direction: ContactDirection.Inbound;\r\n isPublic: boolean;\r\n }\r\n\r\n export interface ContactRegistrationInfo {\r\n saving: boolean;\r\n error: any;\r\n contact: NewContact;\r\n }\r\n\r\n export interface NewTask {\r\n subject: string;\r\n description: string;\r\n contractId: System.Guid;\r\n roleId: System.Guid;\r\n caseId: System.Guid;\r\n completeById: System.Guid;\r\n fromId: System.Guid;\r\n taskType: TaskTypeModel;\r\n endDate: Date;\r\n mediaIds: System.Guid[];\r\n }\r\n\r\n export interface TaskRegistrationInfo {\r\n saving: boolean;\r\n error: any;\r\n task: NewTask;\r\n }\r\n\r\n export enum SelectedPanel {\r\n Registration,\r\n Sss,\r\n None\r\n }\r\n\r\n export interface TargetGroupInfo {\r\n loading: boolean;\r\n targetGroups: TargetGroupModel[];\r\n }\r\n\r\n export interface ActivityRegistrationState {\r\n readonly selectedPanel: SelectedPanel;\r\n readonly selectedChannelType: ChannelType;\r\n readonly selectedTag: ThesaurusTagModel;\r\n readonly selectedFaq: FaqModel;\r\n readonly selectedTargetGroup: TargetGroupModel;\r\n readonly selectedFollowUpQuestionId: System.Guid;\r\n readonly selectedScenario: SelfServiceScenarioModel;\r\n readonly query: string;\r\n readonly scenarios: SelfServiceScenarioModel.Detailed[];\r\n readonly tagInfo: TagInfo;\r\n readonly faqInfo: FaqInfo;\r\n readonly contactRegistrationInfo: ContactRegistrationInfo;\r\n readonly taskRegistrationInfo: TaskRegistrationInfo;\r\n readonly targetGroupInfo: TargetGroupInfo;\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Activities.Registration {\r\n import ChannelType = Umbrella.Modules.ChannelType;\r\n import SelfServiceScenarioModel = Umbrella.Modules.SelfService.SelfServiceScenarioModel;\r\n import FaqModel = Umbrella.Modules.Knowledgebase.FaqModel;\r\n import ThesaurusTagModel = Umbrella.Modules.Knowledgebase.ThesaurusTagModel;\r\n import TargetGroupModel = Umbrella.Modules.Knowledgebase.TargetGroupModel;\r\n\r\n export interface ChannelSelected {\r\n readonly type: 'ActivityRegistrationChannelSelectedEvent';\r\n readonly channelType: ChannelType;\r\n }\r\n\r\n export interface ChannelCleared {\r\n readonly type: 'ActivityRegistrationChannelClearedEvent';\r\n }\r\n\r\n export interface TagsLoaded {\r\n readonly type: 'ActivityRegistrationTagsLoadedEvent';\r\n readonly tags: ThesaurusTagModel[];\r\n }\r\n\r\n export interface ScenariosForPersonLoaded {\r\n readonly type: 'ActivityRegistrationScenariosForPersonLoadedEvent';\r\n readonly scenarios: SelfServiceScenarioModel.Detailed[];\r\n }\r\n\r\n export interface TagSelected {\r\n readonly type: 'ActivityRegistrationTagSelectedEvent';\r\n readonly tag: ThesaurusTagModel;\r\n }\r\n\r\n export interface FaqsLoading {\r\n readonly type: 'ActivityRegistrationFaqsLoadingEvent';\r\n readonly page: number;\r\n readonly pageSize: number;\r\n }\r\n\r\n export interface FaqsLoaded {\r\n readonly type: 'ActivityRegistrationFaqsLoadedEvent';\r\n readonly faqs: PagedItemsModel;\r\n }\r\n\r\n export interface FaqSelected {\r\n readonly type: 'ActivityRegistrationFaqSelectedEvent';\r\n readonly faq: FaqModel;\r\n }\r\n\r\n export interface TargetGroupSelected {\r\n readonly type: 'ActivityRegistrationTargetGroupSelected';\r\n readonly targetGroup: TargetGroupModel;\r\n }\r\n\r\n export interface FollowUpQuestionSelected {\r\n readonly type: 'ActivityRegistrationFollowUpQuestionSelected';\r\n readonly followUpQuestionId: System.Guid;\r\n }\r\n\r\n export interface ScenarioSelected {\r\n readonly type: 'ActivityRegistrationScenarioSelectedEvent';\r\n readonly scenario: SelfServiceScenarioModel;\r\n }\r\n\r\n export interface PanelSelected {\r\n readonly type: 'ActivityRegistrationPanelSelectedEvent';\r\n readonly panel: SelectedPanel;\r\n }\r\n\r\n export interface Searching {\r\n readonly type: 'ActivityRegistrationSearchingEvent';\r\n readonly query: string;\r\n }\r\n\r\n export interface Searched {\r\n readonly type: 'ActivityRegistrationSearchedEvent';\r\n readonly faqs: PagedItemsModel;\r\n }\r\n\r\n export interface ConceptFaqChanged {\r\n readonly type: 'ActivityRegistrationFaqConceptChangedEvent';\r\n readonly concept: FaqConcept;\r\n }\r\n\r\n export interface ConceptFaqSaving {\r\n readonly type: 'ActivityRegistrationFaqConceptSavingEvent';\r\n }\r\n\r\n export interface ConceptFaqSaved {\r\n readonly type: 'ActivityRegistrationFaqConceptSavedEvent';\r\n readonly faq: Modules.Knowledgebase.AdminFaqModel;\r\n }\r\n\r\n export interface ConceptFaqCancelled {\r\n readonly type: 'ActivityRegistrationFaqConceptCancelledEvent';\r\n }\r\n\r\n export interface Registered {\r\n readonly type: 'ActivityRegistrationRegisteredEvent';\r\n }\r\n\r\n export interface TaskRegistering {\r\n readonly type: 'TaskRegistrationRegisteringEvent';\r\n readonly task: NewTask;\r\n }\r\n\r\n export interface TaskRegistered {\r\n readonly type: 'TaskRegistrationRegisteredEvent';\r\n }\r\n\r\n export interface TaskRegisterError {\r\n readonly type: 'TaskRegistrationRegisterErrorEvent';\r\n readonly error: any;\r\n }\r\n\r\n export interface TargetGroupsLoadingEvent {\r\n readonly type: 'TargetGroupsLoadingEvent';\r\n }\r\n\r\n export interface TargetGroupsLoadedEvent {\r\n readonly type: 'TargetGroupsLoadedEvent';\r\n readonly targetGroups: TargetGroupModel[];\r\n }\r\n\r\n export type ActivityRegistrationEvent =\r\n | PanelSelected\r\n | ChannelSelected\r\n | ChannelCleared\r\n | ScenariosForPersonLoaded\r\n | TagsLoaded\r\n | TagSelected\r\n | FaqsLoading\r\n | FaqsLoaded\r\n | FaqSelected\r\n | ScenarioSelected\r\n | Searching\r\n | Searched\r\n | ConceptFaqChanged\r\n | ConceptFaqSaving\r\n | ConceptFaqSaved\r\n | ConceptFaqCancelled\r\n | Registered\r\n | TaskRegistering\r\n | TaskRegistered\r\n | TaskRegisterError\r\n | TargetGroupsLoadingEvent\r\n | TargetGroupsLoadedEvent\r\n | TargetGroupSelected\r\n | FollowUpQuestionSelected;\r\n\r\n function reduce(\r\n e: ActivityRegistrationEvent\r\n ): (s: ActivityRegistrationState) => ActivityRegistrationState {\r\n switch (e.type) {\r\n case 'ActivityRegistrationChannelSelectedEvent':\r\n return s => ({\r\n ...s,\r\n selectedChannelType: e.channelType,\r\n selectedTag: null,\r\n selectedFaq: null,\r\n selectedScenario: null,\r\n tagInfo: {\r\n loading: true,\r\n tags: []\r\n },\r\n faqInfo: null\r\n });\r\n\r\n case 'ActivityRegistrationChannelClearedEvent':\r\n return s => ({\r\n ...s,\r\n selectedChannelType: ChannelType.Unknown,\r\n selectedTag: null,\r\n selectedFaq: null,\r\n selectedScenario: null,\r\n query: '',\r\n tagInfo: null,\r\n faqInfo: null\r\n });\r\n\r\n case 'ActivityRegistrationScenariosForPersonLoadedEvent':\r\n return s => ({\r\n ...s,\r\n scenarios: e.scenarios\r\n });\r\n\r\n case 'ActivityRegistrationTagsLoadedEvent':\r\n return s => ({\r\n ...s,\r\n tagInfo: {\r\n loading: false,\r\n tags: e.tags\r\n }\r\n });\r\n\r\n case 'ActivityRegistrationTagSelectedEvent':\r\n return s => ({\r\n ...s,\r\n selectedTag: e.tag,\r\n selectedFaq: null,\r\n query: '',\r\n tagInfo: {\r\n loading: e.tag && !e.tag.parent,\r\n tags: []\r\n },\r\n faqInfo: null\r\n });\r\n\r\n case 'ActivityRegistrationFaqsLoadingEvent':\r\n return s => ({\r\n ...s,\r\n faqInfo: {\r\n loading: true,\r\n faqs: {\r\n total: s.faqInfo && s.faqInfo.faqs.total,\r\n page: e.page,\r\n pageSize: e.pageSize,\r\n items: s.faqInfo && s.faqInfo.faqs.items\r\n },\r\n faqConcept: s.faqInfo && s.faqInfo.faqConcept\r\n }\r\n });\r\n\r\n case 'ActivityRegistrationFaqsLoadedEvent':\r\n return s => ({\r\n ...s,\r\n faqInfo: {\r\n loading: false,\r\n faqs: e.faqs,\r\n faqConcept: s.faqInfo && s.faqInfo.faqConcept\r\n }\r\n });\r\n\r\n case 'ActivityRegistrationFaqSelectedEvent':\r\n return s => ({\r\n ...s,\r\n selectedFaq:\r\n s.selectedFaq && s.selectedFaq.id === e.faq.id\r\n ? null\r\n : e.faq,\r\n selectedTargetGroup: null,\r\n selectedFollowUpQuestionId: null\r\n });\r\n\r\n case 'ActivityRegistrationTargetGroupSelected':\r\n return s => ({\r\n ...s,\r\n selectedTargetGroup: e.targetGroup\r\n });\r\n\r\n case 'ActivityRegistrationFollowUpQuestionSelected':\r\n return s => ({\r\n ...s,\r\n selectedFollowUpQuestionId: e.followUpQuestionId\r\n });\r\n\r\n case 'ActivityRegistrationScenarioSelectedEvent':\r\n return s => ({\r\n ...s,\r\n selectedScenario: e.scenario\r\n });\r\n\r\n case 'ActivityRegistrationPanelSelectedEvent':\r\n return s => ({\r\n ...s,\r\n selectedPanel: e.panel\r\n });\r\n\r\n case 'ActivityRegistrationSearchingEvent':\r\n return s => ({\r\n ...s,\r\n query: e.query,\r\n faqInfo: {\r\n loading: true,\r\n faqs: {\r\n total: 0,\r\n page: 0,\r\n pageSize: 7,\r\n items: []\r\n },\r\n faqConcept: s.faqInfo && s.faqInfo.faqConcept\r\n }\r\n });\r\n\r\n case 'ActivityRegistrationSearchedEvent':\r\n return s => ({\r\n ...s,\r\n faqInfo: {\r\n loading: false,\r\n faqs: e.faqs,\r\n faqConcept: s.faqInfo && s.faqInfo.faqConcept\r\n }\r\n });\r\n case 'ActivityRegistrationFaqConceptChangedEvent':\r\n return s => ({\r\n ...s,\r\n faqInfo: {\r\n ...s.faqInfo,\r\n faqConcept: e.concept\r\n }\r\n });\r\n case 'ActivityRegistrationFaqConceptSavingEvent':\r\n return s => ({\r\n ...s,\r\n faqInfo: {\r\n ...s.faqInfo,\r\n faqConcept: {\r\n ...s.faqInfo.faqConcept,\r\n id: null,\r\n saving: true\r\n }\r\n },\r\n contactRegistrationInfo: s.contactRegistrationInfo,\r\n taskRegistrationInfo: s.taskRegistrationInfo\r\n });\r\n case 'ActivityRegistrationFaqConceptSavedEvent':\r\n return s => ({\r\n ...s,\r\n selectedFaq: e.faq,\r\n faqInfo: {\r\n ...s.faqInfo,\r\n faqConcept: {\r\n id: e.faq.id,\r\n question: e.faq.question,\r\n answer: e.faq.answer,\r\n saving: false\r\n }\r\n }\r\n });\r\n case 'ActivityRegistrationFaqConceptCancelledEvent':\r\n return s => ({\r\n ...s,\r\n faqInfo: {\r\n ...s.faqInfo,\r\n faqConcept: null\r\n }\r\n });\r\n case 'ActivityRegistrationRegisteredEvent':\r\n return s => ({\r\n ...s,\r\n query: '',\r\n contactRegistrationInfo: null,\r\n selectedTag: null,\r\n selectedFaq: null,\r\n faqInfo: null,\r\n tagInfo: null,\r\n selectedPanel: SelectedPanel.None\r\n });\r\n case 'TaskRegistrationRegisteringEvent':\r\n return s => ({\r\n ...s,\r\n taskRegistrationInfo: {\r\n saving: true,\r\n task: e.task,\r\n error: null\r\n }\r\n });\r\n case 'TaskRegistrationRegisteredEvent':\r\n return s => ({\r\n ...s,\r\n query: '',\r\n taskRegistrationInfo: null,\r\n selectedTag: null,\r\n selectedFaq: null,\r\n faqInfo: null,\r\n tagInfo: null,\r\n selectedPanel: SelectedPanel.None\r\n });\r\n case 'TaskRegistrationRegisterErrorEvent':\r\n return s => ({\r\n ...s,\r\n taskRegistrationInfo: {\r\n saving: false,\r\n task: s.taskRegistrationInfo.task,\r\n error: e.error\r\n }\r\n });\r\n\r\n case 'TargetGroupsLoadingEvent':\r\n return s => ({\r\n ...s,\r\n targetGroupInfo: {\r\n loading: true,\r\n targetGroups: []\r\n }\r\n });\r\n\r\n case 'TargetGroupsLoadedEvent':\r\n return s => ({\r\n ...s,\r\n targetGroupInfo: {\r\n loading: false,\r\n targetGroups: e.targetGroups\r\n }\r\n });\r\n }\r\n }\r\n\r\n function set(\r\n s: CustomerCardState,\r\n replacement: ActivityRegistrationState\r\n ): CustomerCardState {\r\n return {\r\n ...s,\r\n activityRegistrationInfo: replacement\r\n };\r\n }\r\n\r\n export type ActivityRegistrationStore = ObservableStore.EventStore<\r\n ActivityRegistrationState,\r\n ActivityRegistrationEvent\r\n >;\r\n\r\n export const activityRegistrationStore = customerCardStore.map<\r\n ActivityRegistrationState,\r\n ActivityRegistrationEvent\r\n >(\r\n { get: s => s && s.activityRegistrationInfo, set: (s, a) => set(s, a) },\r\n reduce\r\n );\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Contacts {\r\n export interface IContactActivityResource {\r\n register(\r\n contact: RegisterContactModel\r\n ): ng.resource.IResource;\r\n delete(params: IdRequestParams): ng.resource.IResource;\r\n\r\n assignChatConversation(\r\n chatContactMoment: ChatContactMoment\r\n ): ng.resource.IResource;\r\n assignMailConversation(\r\n mailContactMoment: MailContactMoment\r\n ): ng.resource.IResource;\r\n }\r\n\r\n export class ChatContactMoment {\r\n constructor(\r\n public contactMomentId: System.Guid,\r\n public chatConversationId: System.Guid\r\n ) {}\r\n }\r\n\r\n export class MailContactMoment {\r\n constructor(\r\n public contactMomentId: System.Guid,\r\n public mailConversationId: System.Guid\r\n ) {}\r\n }\r\n\r\n angular.module('CustomerService').service('ContactActivityResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/activity/contact/:action',\r\n {},\r\n {\r\n register: {\r\n method: 'POST',\r\n action: '',\r\n isArray: false,\r\n params: {}\r\n },\r\n delete: {\r\n method: 'DELETE',\r\n action: '',\r\n isArray: false,\r\n params: {}\r\n },\r\n assignChatConversation: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: 'assignChatConversation' }\r\n },\r\n assignMailConversation: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: 'assignMailConversation' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.Activities.Registration {\r\n import BaseTagModel = Modules.Knowledgebase.BaseTagModel;\r\n\r\n interface Channel {\r\n title: string;\r\n name: string;\r\n type: string;\r\n }\r\n\r\n interface IOnChannelSelectedParam {\r\n value: Channel;\r\n }\r\n\r\n interface IOnTagSelectedParam {\r\n value: BaseTagModel;\r\n }\r\n\r\n @Component('Knowledgebase', {\r\n selector: 'card-knowledgebase-bread-crumb',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Activities/Registration/CardKnowledgebaseBreadCrumbComponent/CardKnowledgebaseBreadCrumb.html',\r\n bindings: {\r\n rootText: '@',\r\n channel: '<',\r\n tag: '<',\r\n onChannelCleared: '&',\r\n onChannelSelected: '&',\r\n onTagSelected: '&',\r\n cssClass: '@',\r\n onReset: '&'\r\n }\r\n })\r\n class CardKnowledgebaseBreadCrumbComponent {\r\n public channel: Channel;\r\n public tag: BaseTagModel;\r\n public onChannelCleared: () => void;\r\n public onReset: () => void;\r\n public onChannelSelected: (params: IOnChannelSelectedParam) => void;\r\n public onTagSelected: (params: IOnTagSelectedParam) => void;\r\n public cssClass: string;\r\n\r\n constructor() {}\r\n\r\n public resetChannel(): void {\r\n this.onChannelCleared();\r\n }\r\n\r\n public selectChannel(channel: Channel): void {\r\n this.onChannelSelected({ value: channel });\r\n }\r\n\r\n public selectTag(tag: BaseTagModel): void {\r\n this.onTagSelected({ value: tag });\r\n }\r\n\r\n public tagWithParents(tag: BaseTagModel): BaseTagModel[] {\r\n return Modules.Knowledgebase.tagWithParents(tag);\r\n }\r\n\r\n public reset(): void {\r\n this.onReset();\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.Activities.Registration {\r\n export interface IOnChannelSelectedParam {\r\n value: ChannelInfo;\r\n }\r\n\r\n @Component('Knowledgebase', {\r\n selector: 'card-knowledgebase-channel-selection-panel',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Activities/Registration/CardKnowledgebaseChannelSelectionPanelComponent/CardKnowledgebaseChannelSelectionPanel.html',\r\n bindings: {\r\n channels: '<',\r\n onChannelSelected: '&'\r\n }\r\n })\r\n class CardKnowledgebaseChannelSelectionPanelComponent {\r\n public channels: ChannelInfo[];\r\n public onChannelSelected: (params: IOnChannelSelectedParam) => void;\r\n\r\n public selectChannel(channel: ChannelInfo): void {\r\n this.onChannelSelected({ value: channel });\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.Activities.Registration {\r\n import BaseTagModel = Modules.Knowledgebase.BaseTagModel;\r\n @Component('Knowledgebase', {\r\n selector: 'card-knowledgebase-faq-bread-crumb',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Activities/Registration/CardKnowledgebaseFaqBreadCrumbComponent/CardKnowledgebaseFaqBreadCrumb.html',\r\n bindings: {\r\n faq: '<',\r\n onTagSelected: '&'\r\n }\r\n })\r\n class CardKnowledgebaseFaqBreadCrumbComponent {\r\n public onTagSelected: (args: { value: BaseTagModel }) => void;\r\n public faq: Modules.Knowledgebase.FaqModel;\r\n\r\n public tagWithParents(tag: BaseTagModel): BaseTagModel[] {\r\n return Modules.Knowledgebase.tagWithParents(tag);\r\n }\r\n\r\n public tagClicked(tag: BaseTagModel) {\r\n this.onTagSelected({ value: tag });\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.Activities.Registration {\r\n import FollowupQuestionModel = Modules.Knowledgebase.FollowupQuestionModel;\r\n import FaqResourceClass = Modules.Knowledgebase.Faq.FaqResourceClass;\r\n\r\n @Component('Knowledgebase', {\r\n selector: 'card-knowledgebase-follow-up-question',\r\n bindings: {\r\n faqId: '@',\r\n followUp: '<',\r\n lvl: '<'\r\n },\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Activities/Registration/CardKnowledgebaseFollowupQuestionComponent/CardKnowledgebaseFollowupQuestion.html'\r\n })\r\n @Inject('FaqResource', 'ActivityRegistrationService')\r\n class CardKnowledgebaseFollowUpQuestion {\r\n public followUp: FollowupQuestionModel;\r\n public chosenOption: FollowupQuestionModel;\r\n private lvl: number;\r\n private faqId: System.Guid;\r\n\r\n constructor(\r\n private faqResource: FaqResourceClass,\r\n private activityRegistrationService: ActivityRegistrationService\r\n ) {}\r\n\r\n public $onInit() {\r\n if (!this.followUp && this.faqId)\r\n this.faqResource\r\n .getById({ id: this.faqId })\r\n .$promise.then(\r\n data => (this.followUp = data.followupQuestion)\r\n );\r\n }\r\n\r\n public chooseOption(\r\n $event: ng.IAngularEvent,\r\n option: FollowupQuestionModel\r\n ): void {\r\n this.chosenOption = option;\r\n this.activityRegistrationService.selectFollowUpQuestion(\r\n option && option.id\r\n );\r\n $event.stopPropagation();\r\n }\r\n public hasChosen(): boolean {\r\n return !!this.chosenOption;\r\n }\r\n public isRootLevel(): boolean {\r\n return this.getLevel() === 1;\r\n }\r\n public showQuestion(): boolean {\r\n return (\r\n this.followUp &&\r\n this.followUp.options &&\r\n this.followUp.options.length > 0\r\n );\r\n }\r\n public getLevel(): number {\r\n return this.lvl ? this.lvl : 1;\r\n }\r\n public getLevelClass(): string {\r\n return !this.showQuestion() ? 'optionFinal' : 'optionCurrent';\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Activities.Registration {\r\n import SelfServiceScenarioModel = Modules.SelfService.SelfServiceScenarioModel;\r\n import ChannelType = Modules.ChannelType;\r\n import getChannelTypes = Umbrella.CustomerService.getChannelTypes;\r\n import ChannelInfo = Umbrella.CustomerService.ChannelInfo;\r\n\r\n @Component('Knowledgebase', {\r\n selector: 'card-knowledgebase-selfservice',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Activities/Registration/CardKnowledgebaseSelfserviceComponent/CardKnowledgebaseSelfservice.html',\r\n bindings: {\r\n person: '<',\r\n selectedChannel: '<',\r\n selfServiceScenarios: '<',\r\n onClose: '&'\r\n }\r\n })\r\n @Inject(\r\n 'ActivityRegistrationService',\r\n 'ImpersonationService',\r\n 'ToastMessageService'\r\n )\r\n class CardKnowledgebaseComponent {\r\n public selfServiceScenarios: SelfServiceScenarioModel.Detailed[];\r\n public person: PersonModel;\r\n public selectedChannel: ChannelType;\r\n public channels: ChannelInfo[];\r\n public onClose: () => void;\r\n\r\n constructor(\r\n private activityRegistrationService: ActivityRegistrationService,\r\n private impersonationService: ImpersonationService,\r\n private toastMessageService: ToastMessageService\r\n ) {}\r\n\r\n public $onInit() {\r\n this.loadChannels();\r\n }\r\n\r\n public resetAndClose() {\r\n this.activityRegistrationService.clearChannel();\r\n this.onClose();\r\n }\r\n\r\n public isChannelSelected = () =>\r\n this.selectedChannel !== ChannelType.Unknown;\r\n\r\n public isSssSelectionPanelVisible = () =>\r\n this.isChannelSelected() && this.selfServiceScenarios;\r\n\r\n public startSelfserviceScenario(\r\n scenario: SelfServiceScenarioModel.Detailed\r\n ) {\r\n const isCustomerOrProspect =\r\n this.person.roles['customer'] || this.person.roles['prospect'];\r\n if (isCustomerOrProspect) {\r\n const channelInfo = this.getSelectedChannel();\r\n const channelType = (channelInfo && channelInfo.type) || null;\r\n this.impersonationService.start(\r\n scenario.id,\r\n this.person.id,\r\n channelType,\r\n null,\r\n null,\r\n null\r\n );\r\n }\r\n }\r\n\r\n public getChannels(): ChannelInfo[] {\r\n return getChannelTypes();\r\n }\r\n\r\n public clearChannel() {\r\n this.activityRegistrationService.clearChannel();\r\n }\r\n\r\n public selectChannel(channel: ChannelInfo) {\r\n this.activityRegistrationService.selectChannel(channel.type);\r\n this.activityRegistrationService.loadRootTags();\r\n }\r\n\r\n public getSelectedChannel(): ChannelInfo {\r\n return this.channels\r\n .filter(\r\n x =>\r\n ChannelType[x.type] ===\r\n ChannelType[this.selectedChannel]\r\n )\r\n .shift();\r\n }\r\n\r\n private loadChannels(): void {\r\n this.channels = getChannelTypes();\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.Activities.Registration {\r\n import SelfServiceScenarioModel = Modules.SelfService.SelfServiceScenarioModel;\r\n\r\n interface IOnScenarioSelectedParam {\r\n value: SelfServiceScenarioModel.Detailed;\r\n }\r\n @Component('Knowledgebase', {\r\n selector: 'card-knowledgebase-sss-selection-panel',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Activities/Registration/CardKnowledgebaseSssSelectionPanelComponent/CardKnowledgebaseSssSelectionPanel.html',\r\n bindings: {\r\n scenarios: '<',\r\n onScenarioSelected: '&'\r\n }\r\n })\r\n class CardKnowledgebaseSssSelectionPanelComponent {\r\n public scenarios: SelfServiceScenarioModel.Detailed[];\r\n\r\n public onScenarioSelected: (params: IOnScenarioSelectedParam) => void;\r\n\r\n public selectScenario(\r\n scenario: SelfServiceScenarioModel.Detailed\r\n ): void {\r\n this.onScenarioSelected({ value: scenario });\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.Activities.Registration {\r\n import MediaResourceProvider = Modules.MediaResourceProvider;\r\n import MediaModel = Umbrella.Media.MediaModel;\r\n import SimpleFaqModel = Modules.Knowledgebase.SimpleFaqModel;\r\n import AdminMediaModel = Umbrella.Media.AdminMediaModel;\r\n\r\n @Component('Knowledgebase', {\r\n selector: 'faq-media',\r\n bindings: {\r\n faq: '<'\r\n },\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Activities/Registration/FaqMediaComponent/FaqMedia.html'\r\n })\r\n @Inject('MediaResourceProvider')\r\n class FaqMediaComponent {\r\n public mediaLoading: boolean;\r\n public media: MediaModel[];\r\n\r\n constructor(protected mediaResource: MediaResourceProvider) {}\r\n\r\n private $onChanges(bindings: { faq: IBindingChange }) {\r\n if (\r\n bindings.faq &&\r\n bindings.faq.currentValue !== bindings.faq.previousValue\r\n ) {\r\n this.loadMediaItems(bindings.faq.currentValue);\r\n }\r\n }\r\n\r\n private loadMediaItems(faq: SimpleFaqModel) {\r\n if (!faq || !faq.mediaWithVisibility || !faq.mediaWithVisibility.length) return;\r\n\r\n this.mediaLoading = true;\r\n\r\n const ids = faq.mediaWithVisibility.map(x => x.mediaId);\r\n\r\n this.mediaResource\r\n .getByIdsV2({ ids })\r\n .$promise.then(mediaObjects => {\r\n this.media = mediaObjects as MediaModel[];\r\n })\r\n .finally(() => {\r\n this.mediaLoading = false;\r\n });\r\n };\r\n }\r\n}\r\n","/// \r\n/// import { config } from \"rx.lite\";\r\n\r\ninterface SignalR {\r\n phoneHub: Umbrella.Modules.Telephony.PhoneHubProxy;\r\n allPhonesHub: any;\r\n}\r\n\r\nnamespace Umbrella.Modules.Telephony {\r\n import PhoneModel = Umbrella.TelephonyControl.PhoneModel;\r\n import PhoneStatsModel = Umbrella.TelephonyControl.Statistics.PhoneStatsModel;\r\n import PhoneCallRoleModel = Umbrella.TelephonyControl.PhoneCallRoleModel;\r\n\r\n export interface PhoneHubServerResponse {\r\n done(callback: () => void): PhoneHubServerResponse;\r\n fail(callback: (error: string) => void): PhoneHubServerResponse;\r\n }\r\n\r\n export interface PhoneHubProxy extends HubProxy {\r\n client: PhoneHubClient;\r\n server: PhoneHubServer;\r\n }\r\n\r\n export interface PhoneHubClient {\r\n update(phone: PhoneModel);\r\n updatePhoneCallRoles(phoneCallRoleModel: PhoneCallRoleModel);\r\n onMessage(message: any);\r\n stats(stats: PhoneStatsModel);\r\n }\r\n\r\n export interface PhoneHubServer {\r\n login(nr: string, password: string): PhoneHubServerResponse;\r\n logout(): PhoneHubServerResponse;\r\n logoutMultipleByUserIds(userIds: Guid[]): PhoneHubServerResponse;\r\n reportUserReconnected(): PhoneHubServerResponse;\r\n\r\n setRoleForCall(\r\n connectionId: System.Guid,\r\n roleId: System.Guid\r\n ): PhoneHubServerResponse;\r\n unsetRoleForCall(connectionId: System.Guid): PhoneHubServerResponse;\r\n\r\n ready(): PhoneHubServerResponse;\r\n notReady(): PhoneHubServerResponse;\r\n endAfterCallWork(): PhoneHubServerResponse;\r\n endAfterCallWorkAndLeaveQueue(): PhoneHubServerResponse;\r\n leaveQueue(): PhoneHubServerResponse;\r\n enterQueue(): PhoneHubServerResponse;\r\n setPhoneRichPresenceState(\r\n phoneRichPresenceState: string\r\n ): PhoneHubServerResponse;\r\n dial(nr: string): PhoneHubServerResponse;\r\n transferDirect(\r\n nr: string,\r\n connectionId: string\r\n ): PhoneHubServerResponse;\r\n pickup(connectionId: string): PhoneHubServerResponse;\r\n holdCall(connectionId: string): PhoneHubServerResponse;\r\n resumeCall(connectionId: string): PhoneHubServerResponse;\r\n forwardCall(connectionId: string): PhoneHubServerResponse;\r\n releaseCall(connectionId: string): PhoneHubServerResponse;\r\n }\r\n\r\n export const phoneHubOnError$ = new Rx.Subject();\r\n export const phoneHubOnUpdated$ = new Rx.Subject();\r\n export const phoneHubOnPhoneCallRolesUpdated$ = new Rx.Subject<\r\n PhoneCallRoleModel\r\n >();\r\n export const phoneHubOnMessage$ = new Rx.Subject();\r\n export const phoneHubOnStatsUpdated$ = new Rx.Subject();\r\n\r\n function isInDebugMode() {\r\n return window.clientConfig && window.clientConfig.debug;\r\n }\r\n\r\n function writeToConsoleWhenInDebugMode(eventName: string, params: any[]) {\r\n if (isInDebugMode()) console.debug(eventName, ...params);\r\n }\r\n\r\n Modules.onSignalRInitialized(() => {\r\n $.connection.phoneHub.client.update = (phone: PhoneModel) => {\r\n phoneHubOnUpdated$.onNext(phone);\r\n writeToConsoleWhenInDebugMode('phoneHub.update: ', [phone]);\r\n };\r\n $.connection.phoneHub.client.updatePhoneCallRoles = (\r\n phoneCallRoleModel: PhoneCallRoleModel\r\n ) => {\r\n phoneHubOnPhoneCallRolesUpdated$.onNext(phoneCallRoleModel);\r\n writeToConsoleWhenInDebugMode('phoneHub.updatePhoneCallRoles: ', [\r\n phoneCallRoleModel\r\n ]);\r\n };\r\n $.connection.phoneHub.client.onMessage = (message: any) => {\r\n phoneHubOnMessage$.onNext(message);\r\n writeToConsoleWhenInDebugMode('phoneHub.onMessage: ', [message]);\r\n };\r\n $.connection.phoneHub.client.stats = (stats: PhoneStatsModel) => {\r\n phoneHubOnStatsUpdated$.onNext(stats);\r\n writeToConsoleWhenInDebugMode('phoneHub.stats: ', [stats]);\r\n };\r\n });\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Telephony {\r\n import IRoleResource = Umbrella.Modules.Customers.IRoleResource;\r\n import PhoneModel = Umbrella.TelephonyControl.PhoneModel;\r\n import PhoneCallModel = Umbrella.TelephonyControl.PhoneCallModel;\r\n import PhoneCallRoleModel = Umbrella.TelephonyControl.PhoneCallRoleModel;\r\n import PhoneCallStatus = Umbrella.TelephonyControl.PhoneCallStatus;\r\n import PhoneQueueStatus = Umbrella.TelephonyControl.PhoneQueueStatus;\r\n import PhoneStatsModel = Umbrella.TelephonyControl.Statistics.PhoneStatsModel;\r\n import PhoneStatus = Umbrella.TelephonyControl.PhoneStatus;\r\n import ActivityRegistrationService = Umbrella.CustomerService.CustomerCard.Activities.Registration.ActivityRegistrationService;\r\n\r\n export interface RoleModelDictionary {\r\n [roleId: string]: RoleModel;\r\n }\r\n\r\n const telephonyInstalled = () => window && window.config && window.config.facets && window.config.facets.telephony;\r\n const telephonyAvailable = () =>\r\n window &&\r\n window.config &&\r\n window.config.facets &&\r\n window.config.facets.telephony &&\r\n window.config.facets.telephony[0] &&\r\n window.config.facets.telephony[0].available;\r\n\r\n @Service('Telephony', 'PhoneService')\r\n @Inject(\r\n 'TopBarStore',\r\n '$filter',\r\n 'NotificationService',\r\n 'ToastMessageService',\r\n 'RoleResource',\r\n 'ActivityRegistrationService'\r\n )\r\n export class PhoneService extends BaseStoreService {\r\n private readonly roleModelCache: RoleModelDictionary = {};\r\n private inboundCallFilter: (calls: PhoneCallModel[]) => PhoneCallModel;\r\n private isRingingStatusFilter: (status: PhoneCallStatus) => boolean;\r\n\r\n constructor(\r\n store: TopBarStore,\r\n $filter: ng.IFilterService,\r\n private notificationService: NotificationService,\r\n private toastMessageService: ToastMessageService,\r\n private roleResource: IRoleResource,\r\n private activityRegistrationService: ActivityRegistrationService\r\n ) {\r\n super(store);\r\n\r\n this.inboundCallFilter = $filter('inboundCall');\r\n this.isRingingStatusFilter = $filter('isRingingStatus');\r\n\r\n Umbrella.session$\r\n .skipWhile(s => !s.config || !s.config.facets)\r\n .distinctUntilChanged()\r\n .map(s => s.config.facets)\r\n .subscribe(facets => {\r\n this.emit({\r\n type: 'TelephonyAvailabilityChangedEvent',\r\n availabilityStatus: this.calculateTelephonyAvailablilty()\r\n });\r\n });\r\n\r\n Umbrella.session$\r\n .filter(telephonyAvailable)\r\n .flatMapLatest(Modules.waitUntilSignalRConnected)\r\n .take(1)\r\n .subscribe(() => {\r\n phoneHubOnError$.distinctUntilChanged().subscribe((phone: PhoneModel) => {\r\n this.handlePhoneEvent(phone);\r\n this.emit({\r\n type: 'TelephonyErrorEvent',\r\n phone,\r\n error: ''\r\n });\r\n });\r\n\r\n phoneHubOnUpdated$.distinctUntilChanged().subscribe((phone: PhoneModel) => {\r\n this.handlePhoneEvent(phone);\r\n this.emit({\r\n type: 'TelephonyChangedEvent',\r\n phone,\r\n availabilityStatus: this.calculateTelephonyAvailablilty(phone)\r\n });\r\n });\r\n\r\n phoneHubOnPhoneCallRolesUpdated$\r\n .distinctUntilChanged()\r\n .subscribe((phoneCallRoleModel: PhoneCallRoleModel) => {\r\n this.retrieveRoleModelsForCall(phoneCallRoleModel);\r\n this.emit({\r\n type: 'PhoneCallRolesChangedEvent',\r\n phoneCallRoleModel\r\n });\r\n });\r\n\r\n phoneHubOnMessage$.distinctUntilChanged().subscribe((message: any) => {\r\n switch (message.type) {\r\n case 'Error':\r\n case 1:\r\n this.toastMessageService.error(message.message);\r\n break;\r\n case 2:\r\n case 'Warning':\r\n this.toastMessageService.warning(message.message);\r\n break;\r\n case 'Success':\r\n case 3:\r\n this.toastMessageService.success(message.message);\r\n break;\r\n case 0:\r\n case 'Info':\r\n default:\r\n this.toastMessageService.info(message.message);\r\n break;\r\n }\r\n });\r\n\r\n phoneHubOnStatsUpdated$.distinctUntilChanged().subscribe((stats: PhoneStatsModel) => {\r\n this.emit({\r\n type: 'TelephonyStatisticsChangedEvent',\r\n statistics: stats\r\n });\r\n });\r\n\r\n this.reportUserReconnected();\r\n });\r\n }\r\n\r\n public hasActiveCall(roleId: System.Guid): boolean {\r\n const state = this.getState();\r\n const hasActiveCallForRoleId =\r\n state &&\r\n state.telephonyInfo &&\r\n state.telephonyInfo.phone &&\r\n state.telephonyInfo.phone.calls &&\r\n state.telephonyInfo.phone.calls.filter(x => x.subjectRoleId === roleId).length > 0;\r\n\r\n const hasAcwCallForRoleId =\r\n state &&\r\n state.telephonyInfo &&\r\n state.telephonyInfo.phone &&\r\n state.telephonyInfo.phone.status &&\r\n (state.telephonyInfo.phone.status === PhoneStatus.ACW ||\r\n state.telephonyInfo.phone.status.toString() === 'ACW') &&\r\n state.telephonyInfo.phone.lastFinishedCall &&\r\n state.telephonyInfo.phone.lastFinishedCall.subjectRoleId === roleId;\r\n\r\n return hasActiveCallForRoleId || hasAcwCallForRoleId;\r\n }\r\n\r\n public callNr(nr: string) {\r\n if (this.isValidPhoneNr(nr) && window.user && this.allowedToCall(window.user.telephone, true)) {\r\n this.whenTelephonyAvailableAndSignalRInitialized(() => {\r\n $.connection.phoneHub.server.dial(nr);\r\n });\r\n }\r\n }\r\n\r\n public callNrDirect(nr: string) {\r\n if (window.user && window.user.telephone.calls && this.allowedToCall(window.user.telephone, true)) {\r\n this.whenTelephonyAvailableAndSignalRInitialized(() => {\r\n $.connection.phoneHub.server.transferDirect(nr, window.user.telephone.calls[0].connectionId);\r\n });\r\n }\r\n }\r\n\r\n public logout() {\r\n this.whenTelephonyAvailableAndSignalRInitialized(() => {\r\n $.connection.phoneHub.server.logout();\r\n });\r\n }\r\n\r\n public logoutMultipleByUserIds(userIds: Guid[]) {\r\n this.whenTelephonyAvailableAndSignalRInitialized(() => {\r\n $.connection.phoneHub.server.logoutMultipleByUserIds(userIds);\r\n });\r\n }\r\n\r\n public releasecall(call: PhoneCallModel) {\r\n this.whenTelephonyAvailableAndSignalRInitialized(() => {\r\n $.connection.phoneHub.server.releaseCall(call.connectionId);\r\n });\r\n }\r\n\r\n public forwardcall(call: PhoneCallModel) {\r\n this.whenTelephonyAvailableAndSignalRInitialized(() => {\r\n $.connection.phoneHub.server.forwardCall(call.connectionId);\r\n });\r\n }\r\n\r\n public pickup(call: PhoneCallModel) {\r\n this.whenTelephonyAvailableAndSignalRInitialized(() => {\r\n $.connection.phoneHub.server.pickup(call.connectionId);\r\n });\r\n }\r\n\r\n public holdcall(call: PhoneCallModel) {\r\n this.whenTelephonyAvailableAndSignalRInitialized(() => {\r\n switch (call.status) {\r\n case PhoneCallStatus.Established:\r\n case 'Established':\r\n $.connection.phoneHub.server.holdCall(call.connectionId);\r\n break;\r\n case PhoneCallStatus.OnHold:\r\n case 'OnHold':\r\n $.connection.phoneHub.server.resumeCall(call.connectionId);\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public statusChanged(status: PhoneStatus | string) {\r\n this.whenTelephonyAvailableAndSignalRInitialized(() => {\r\n switch (status) {\r\n case PhoneStatus.Unavailable:\r\n case 'Unavailable':\r\n $.connection.phoneHub.server.ready();\r\n break;\r\n case PhoneStatus.Available:\r\n case 'Available':\r\n $.connection.phoneHub.server.notReady();\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public queueStatusChanged(queueStatus: PhoneQueueStatus | string) {\r\n this.whenTelephonyAvailableAndSignalRInitialized(() => {\r\n switch (queueStatus) {\r\n case PhoneQueueStatus.Available:\r\n case 'Available':\r\n $.connection.phoneHub.server.leaveQueue();\r\n break;\r\n default:\r\n $.connection.phoneHub.server.enterQueue();\r\n }\r\n });\r\n }\r\n\r\n public login(nr: string, password: string) {\r\n this.whenTelephonyAvailableAndSignalRInitialized(() => {\r\n $.connection.phoneHub.server.login(nr, password);\r\n this.activityRegistrationService.loadRootTags();\r\n });\r\n }\r\n\r\n public setPhoneRichPresenceState(phoneRichPresenceState: string) {\r\n this.whenTelephonyAvailableAndSignalRInitialized(() => {\r\n $.connection.phoneHub.server.setPhoneRichPresenceState(phoneRichPresenceState);\r\n });\r\n }\r\n\r\n public endAfterCallWork() {\r\n this.whenTelephonyAvailableAndSignalRInitialized(() => {\r\n $.connection.phoneHub.server.endAfterCallWork();\r\n });\r\n }\r\n\r\n public endAfterCallWorkAndLeaveQueue() {\r\n this.whenTelephonyAvailableAndSignalRInitialized(() => {\r\n $.connection.phoneHub.server.endAfterCallWorkAndLeaveQueue();\r\n });\r\n }\r\n\r\n public setRoleForCall(call: PhoneCallModel, roleId: System.Guid) {\r\n this.whenTelephonyAvailableAndSignalRInitialized(() => {\r\n $.connection.phoneHub.server.setRoleForCall(call.phoneCallRegistrationId, roleId);\r\n });\r\n }\r\n\r\n public unsetRoleForCall(call: PhoneCallModel) {\r\n this.whenTelephonyAvailableAndSignalRInitialized(() => {\r\n $.connection.phoneHub.server.unsetRoleForCall(call.phoneCallRegistrationId);\r\n });\r\n }\r\n\r\n public isAvailableToUser(): boolean {\r\n return window.user && this.allowedToCall(window.user.telephone, false);\r\n }\r\n\r\n private allowedToCall(telephone: PhoneModel, showAlerts: boolean) {\r\n const result = telephonyAvailable() && this.isLoggedIn(telephone);\r\n\r\n if (showAlerts) {\r\n if (!telephonyInstalled()) alert('Telefonie is niet geinstalleerd in uw omgeving.');\r\n else if (!telephonyAvailable())\r\n alert('Telefonie is op dit moment niet beschikbaar. Probeer het later opnieuw.');\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private isLoggedIn(telephone: PhoneModel) {\r\n if (!telephone || !telephone.status) return false;\r\n const status: PhoneStatus | string = telephone.status;\r\n\r\n return (\r\n status.toString() === 'Unavailable' ||\r\n status === PhoneStatus.Unavailable ||\r\n status.toString() === 'Available' ||\r\n status === PhoneStatus.Available ||\r\n status.toString() === 'Busy' ||\r\n status === PhoneStatus.Busy ||\r\n status.toString() === 'ACW' ||\r\n status === PhoneStatus.ACW\r\n );\r\n }\r\n\r\n private isValidPhoneNr = (nr: string) => {\r\n return nr && nr !== 'Niet bekend';\r\n };\r\n\r\n private retrieveRoleModelsForCall(phoneCall: PhoneCallModel | PhoneCallRoleModel) {\r\n if (phoneCall.subjectRoleId) this.retrieveRoleModel(phoneCall.subjectRoleId);\r\n\r\n if (phoneCall.candidateRoleIds)\r\n for (const roleId of phoneCall.candidateRoleIds) this.retrieveRoleModel(roleId);\r\n }\r\n\r\n private retrieveRoleModel(roleId: System.Guid) {\r\n if (this.roleModelCache[roleId.toString()]) return;\r\n\r\n this.roleResource.getById({ id: roleId }).$promise.then((roleModel: RoleModel) => {\r\n this.emit({\r\n type: 'TelephonyRoleModelRetrievedEvent',\r\n role: roleModel\r\n });\r\n });\r\n }\r\n\r\n private handlePhoneEvent(phone: PhoneModel) {\r\n const session = session$.getValue();\r\n const user = (session && session.user) || {};\r\n user.telephone = phone;\r\n\r\n session$.onNext({\r\n ...session,\r\n user: user\r\n });\r\n window.user.telephone = phone;\r\n\r\n const call = this.inboundCallFilter(phone && phone.calls);\r\n if (call && this.isRingingStatusFilter(call.status)) {\r\n this.notificationService.show('Inkomende oproep van ' + call.number + '.', call.number);\r\n this.emit({ type: 'TelephonyCallRingingEvent', phone, call });\r\n } else {\r\n this.notificationService.hide();\r\n this.emit({ type: 'TelephonyCallRingingStoppedEvent', phone });\r\n }\r\n if (phone && phone.calls) {\r\n for (const call of phone.calls) {\r\n this.retrieveRoleModelsForCall(call);\r\n }\r\n }\r\n }\r\n\r\n private whenTelephonyAvailableAndSignalRInitialized(callback: () => void): void {\r\n if (telephonyAvailable()) {\r\n onSignalRInitialized(callback);\r\n }\r\n }\r\n\r\n private whenTelephonyAvailableAndSignalRConnected(callback: () => void): void {\r\n if (telephonyAvailable()) {\r\n onSignalRConnected(callback);\r\n }\r\n }\r\n\r\n private calculateTelephonyAvailablilty(phone?: PhoneModel): Umbrella.TelephonyControl.AvailabilityStatus {\r\n if (!phone || !telephonyInstalled()) {\r\n return Umbrella.TelephonyControl.AvailabilityStatus.Unavailable;\r\n } else if (!telephonyAvailable()) {\r\n return Umbrella.TelephonyControl.AvailabilityStatus.Offline;\r\n } else if (phone.phoneCapabilities.toString() === 'None' || phone.phoneCapabilities === 0) {\r\n return Umbrella.TelephonyControl.AvailabilityStatus.InvalidUser;\r\n } else if (phone.status.toString() !== 'Offline' && phone.status !== 3) {\r\n return Umbrella.TelephonyControl.AvailabilityStatus.Online;\r\n } else {\r\n return Umbrella.TelephonyControl.AvailabilityStatus.NotLoggedIn;\r\n }\r\n }\r\n\r\n private reportUserReconnected() {\r\n this.whenTelephonyAvailableAndSignalRConnected(() => {\r\n $.connection.phoneHub.server.reportUserReconnected();\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Activities.Registration {\r\n import IContractResource = Modules.Housing.IContractResource;\r\n import ContractFilterModel = Modules.Housing.ContractFilterModel;\r\n import IContactActivityResource = Modules.Contacts.IContactActivityResource;\r\n import ContractModel = Modules.Housing.ContractModel;\r\n import RoleModel = Modules.RoleModel;\r\n import NewContact = Umbrella.CustomerService.CustomerCard.Activities.Registration.NewContact;\r\n import ChannelType = Modules.ChannelType;\r\n import PhoneService = Modules.Telephony.PhoneService;\r\n import ChatService = Umbrella.ChatConversationHandling.ChatService;\r\n import ContactDirection = Modules.Contacts.ContactDirection;\r\n import FaqResourceClass = Umbrella.Modules.Knowledgebase.Faq.FaqResourceClass;\r\n\r\n @Component('CustomerService', {\r\n selector: 'register-contact-activity-popup',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Activities/Registration/RegisterContactActivityPopupComponent/RegisterContactActivityPopup.html',\r\n bindings: {\r\n caseId: '@',\r\n contractId: '@',\r\n selectedChannelType: '@',\r\n selectedTagId: '@',\r\n selectedFaqId: '@',\r\n personId: '@',\r\n selectedTargetGroupId: '@',\r\n selectedFollowUpQuestionId: '@',\r\n mailId: '@',\r\n disableDirectionSelection: '<'\r\n }\r\n })\r\n @Inject(\r\n '$mdDialog',\r\n 'EmptyGuid',\r\n 'ContactActivityResource',\r\n 'ContractResource',\r\n 'PersonResource',\r\n 'ToastMessageService',\r\n 'ActivityRegistrationService',\r\n 'PhoneService',\r\n 'ChatService',\r\n 'LocalStorageService',\r\n 'Upload',\r\n 'FaqResource'\r\n )\r\n class RegisterContactActivityPopupComponent {\r\n // bindings\r\n public caseId: System.Guid;\r\n private contractId: System.Guid;\r\n private selectedChannelType: ChannelType;\r\n private selectedFaqId: System.Guid;\r\n private selectedTagId: System.Guid;\r\n private personId: System.Guid;\r\n private selectedTargetGroupId: System.Guid;\r\n private selectedFollowUpQuestionId: System.Guid;\r\n public disableDirectionSelection: boolean;\r\n\r\n public activity: NewContact;\r\n public allContracts: ContractFilterModel[] = [];\r\n public displayedContracts: ContractFilterModel[] = [];\r\n public selectedContract: ContractFilterModel;\r\n public contractors: RoleModel[] = [];\r\n public selectedContractor: RoleModel;\r\n public customerId: System.Guid;\r\n public isSaving = false;\r\n public channels: ChannelInfo[];\r\n public selectedChannel: ChannelInfo;\r\n private roleId: System.Guid;\r\n private person: PersonModel;\r\n private mailId: Guid;\r\n private readonly LAST_SELECTED_DIRECTION = 'lastSelectedDirection';\r\n private media: Umbrella.Media.MediaModel[] = [];\r\n public isUploading: boolean;\r\n private isPublic: boolean;\r\n\r\n constructor(\r\n private $mdDialog,\r\n private emptyGuid: System.Guid,\r\n private contactActivityResource: IContactActivityResource,\r\n private contractResource: IContractResource,\r\n private personResource: PersonResource,\r\n private toastMessageService: ToastMessageService,\r\n private activityRegistrationService: ActivityRegistrationService,\r\n private phoneService: PhoneService,\r\n private chatService: ChatService,\r\n private localStorageService: LocalStorageService,\r\n private uploadService: any,\r\n private faqResource: FaqResourceClass\r\n ) {}\r\n\r\n public $onInit() {\r\n this.init();\r\n }\r\n\r\n public canChangeDirectionForSelectedChannelType(): boolean {\r\n const channelType = this.getSelectedChannelType();\r\n\r\n switch (channelType) {\r\n case ChannelType.Visit:\r\n case ChannelType.Chat:\r\n case ChannelType.Desk:\r\n return false;\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n public resetDirectionForInboundChannelTypes(): void {\r\n if (!this.canChangeDirectionForSelectedChannelType()) this.activity.direction = ContactDirection.Inbound;\r\n }\r\n\r\n private async init() {\r\n await this.loadPerson(this.personId);\r\n\r\n await this.setIsPublic();\r\n\r\n this.activity = {\r\n description: '',\r\n caseId: this.caseId,\r\n contractId: this.contractId,\r\n roleId: this.roleId,\r\n notifyClient: false,\r\n direction: this.disableDirectionSelection\r\n ? ContactDirection.Inbound\r\n : this.localStorageService.get(this.LAST_SELECTED_DIRECTION) || ContactDirection.Inbound,\r\n isPublic: this.isPublic\r\n };\r\n\r\n this.loadChannels();\r\n\r\n if (this.customerId) this.loadContracts(this.customerId);\r\n\r\n this.addPasteEventListener();\r\n\r\n this.isSaving = false;\r\n }\r\n\r\n public cancel(): void {\r\n this.$mdDialog.cancel();\r\n }\r\n\r\n public save(): void {\r\n if (this.isSaving) return;\r\n this.isSaving = true;\r\n\r\n this.activity.roleId = (this.selectedContractor && this.selectedContractor.id) || this.roleId;\r\n this.activity.contractId = this.selectedContract && this.selectedContract.id;\r\n\r\n const req: Modules.Contacts.RegisterContactModel = {\r\n caseId: this.activity.caseId,\r\n channelType: this.getSelectedChannelType(),\r\n tagId: this.selectedTagId || this.emptyGuid,\r\n faqId: this.selectedFaqId || this.emptyGuid,\r\n targetGroupId: this.selectedTargetGroupId || null,\r\n followUpQuestionId: this.selectedFollowUpQuestionId || null,\r\n contractId: this.activity.contractId,\r\n roleId: this.activity.roleId,\r\n description: this.activity.description,\r\n notifyClient: this.activity.notifyClient,\r\n mailId: this.mailId || null,\r\n direction: this.canChangeDirectionForSelectedChannelType()\r\n ? this.activity.direction\r\n : ContactDirection.Inbound,\r\n mediaIds: this.media.map(m => m.id),\r\n isPublic: this.activity.isPublic\r\n };\r\n\r\n this.contactActivityResource\r\n .register(req)\r\n .$promise.then(activity => {\r\n this.toastMessageService.success('Contactmoment vastgelegd');\r\n\r\n this.localStorageService.store(this.LAST_SELECTED_DIRECTION, req.direction);\r\n\r\n if (\r\n !activity.role ||\r\n (!this.phoneService.hasActiveCall(activity.role.id) &&\r\n !this.chatService.hasActiveConversation(activity.role.personId)\r\n )\r\n )\r\n this.activityRegistrationService.selectChannel(req.channelType);\r\n\r\n this.$mdDialog.hide(activity);\r\n })\r\n .catch(e => {\r\n if (window.clientConfig && window.clientConfig.debug) console.log(e);\r\n this.toastMessageService.error('Fout opgetreden tijdens vastleggen contactmoment');\r\n })\r\n .finally(() => {\r\n setTimeout(() => {\r\n this.isSaving = false;\r\n }, 200);\r\n });\r\n }\r\n\r\n public searchContract(query: string) {\r\n this.displayedContracts = this.allContracts.filter(\r\n x => x.addressLine.toLowerCase().indexOf(query.toLowerCase()) > -1\r\n );\r\n }\r\n\r\n public selectContract(contract: ContractFilterModel): void {\r\n if (!contract) {\r\n this.selectedContract = null;\r\n this.contractors = [];\r\n return;\r\n }\r\n\r\n this.selectedContract = contract;\r\n this.loadContractors(contract.id);\r\n }\r\n\r\n public upload = (file: any) => {\r\n const url = Config.makeAbsoluteApiUrl('/api/v2/media?mediaCategory=TaskMedia');\r\n if (file) {\r\n this.isUploading = true;\r\n file.upload = this.uploadService\r\n .upload({\r\n url,\r\n data: { file }\r\n })\r\n .then(result => {\r\n this.isUploading = false;\r\n this.media.push(result.data);\r\n this.toastMessageService.success('Bestand is succesvol toegevoegd');\r\n })\r\n .catch(() => {\r\n this.isUploading = false;\r\n this.toastMessageService.error('Bestand toevoegen is mislukt');\r\n });\r\n }\r\n };\r\n\r\n private async loadContracts(customerId: System.Guid): Promise {\r\n const contractList = await this.contractResource.getAllFilterValuesByRoleId({\r\n id: customerId,\r\n }).$promise;\r\n this.displayedContracts = this.allContracts = contractList;\r\n\r\n const preselectedContract = this.contractId\r\n ? this.allContracts.filter(x => x.id === this.contractId)[0] ||\r\n (await this.getContract(this.contractId))\r\n : !this.selectedContract && this.allContracts.filter(x => this.isActiveOrFutureContract(x))[0];\r\n\r\n if (preselectedContract)\r\n this.selectContract(this.allContracts.filter(x => x.id === preselectedContract.id)[0]);\r\n }\r\n\r\n private isActiveOrFutureContract(contract: ContractFilterModel): boolean {\r\n switch (contract.status.toString().toLowerCase()) {\r\n case 'active':\r\n case '1':\r\n case 'future':\r\n case '2':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private async loadContractors(contractId: System.Guid): Promise {\r\n this.contractors = await this.contractResource.getContacts({\r\n id: contractId\r\n }).$promise;\r\n this.selectedContractor = this.contractors.filter(x => x.id === this.customerId)[0];\r\n }\r\n\r\n private async getContract(contractId: System.Guid): Promise {\r\n const contract = await this.contractResource.getById({\r\n id: contractId\r\n }).$promise;\r\n return contract;\r\n }\r\n\r\n private loadChannels(): void {\r\n this.channels = getChannelTypes();\r\n\r\n let selectedChannelType = this.selectedChannelType || ChannelType.Unknown;\r\n if (this.phoneService.hasActiveCall(this.roleId)) selectedChannelType = ChannelType.Phone;\r\n else if (this.chatService.hasActiveConversation(this.personId)) selectedChannelType = ChannelType.Chat;\r\n\r\n this.selectedChannel = this.channels\r\n .filter(x => x.type.toString() === selectedChannelType.toString())\r\n .shift();\r\n }\r\n\r\n private getSelectedChannelType(): ChannelType {\r\n return (this.selectedChannel && this.selectedChannel.type) || ChannelType.Unknown;\r\n }\r\n\r\n private async loadPerson(personId: System.Guid): Promise {\r\n if (!personId) return;\r\n\r\n this.person = await this.personResource.getById({ id: personId }).$promise;\r\n this.customerId = this.person && this.person.roles['customer'];\r\n this.roleId =\r\n this.person &&\r\n (this.person.roles['customer'] ||\r\n this.person.roles['occupant'] ||\r\n this.person.roles['vendor'] ||\r\n this.person.roles['prospect']);\r\n }\r\n\r\n private addPasteEventListener(): void {\r\n window.addEventListener('paste', (event: Event) => {\r\n const clipboardEvent: ClipboardEvent = event;\r\n \r\n if(clipboardEvent.clipboardData.items) {\r\n const item = clipboardEvent.clipboardData.items[0];\r\n if(item)\r\n this.upload(item.getAsFile());\r\n }\r\n }); \r\n }\r\n\r\n private async setIsPublic(): Promise {\r\n if(!this.selectedFaqId){\r\n this.isPublic = false;\r\n return;\r\n }\r\n try{\r\n const faq = await this.faqResource.getById({id: this.selectedFaqId}).$promise;\r\n let publicApplicationIds: System.Guid[] = [];\r\n if (window &&\r\n window.config &&\r\n window.config.modules &&\r\n window.config.modules.timeline &&\r\n window.config.modules.timeline.publicApplicationIds) {\r\n publicApplicationIds = window.config.modules.timeline.publicApplicationIds;\r\n }\r\n\r\n if (faq &&\r\n faq.applicationIds) {\r\n this.isPublic = publicApplicationIds.some(id => faq.applicationIds.indexOf(id) >= 0);\r\n }\r\n else {\r\n this.isPublic = false;\r\n }\r\n }\r\n catch(err){\r\n this.isPublic = false;\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Activities.Registration {\r\n import TaskModel = Modules.Tasks.TaskModel.Detailed;\r\n import MediaModel = Umbrella.Media.MediaModel;\r\n\r\n import TaskService = Umbrella.Modules.Tasks.TaskService;\r\n import ITaskResourceClass = Modules.Tasks.ITaskResourceClass;\r\n import TaskTypeModel = Modules.Tasks.TaskTypeModel;\r\n import IContractResource = Modules.Housing.IContractResource;\r\n import ContractFilterModel = Modules.Housing.ContractFilterModel;\r\n import RoleModel = Modules.RoleModel;\r\n import SelectedColleagueOrFunctiongroup = Modules.SelectedColleagueOrFunctiongroup;\r\n import FunctionGroupModel = Modules.Knowledgebase.FunctionGroupModel;\r\n import SummarizedColleagueModel = Modules.Colleagues.SummarizedColleagueModel;\r\n import ColleagueModel = Modules.Colleagues.ColleagueModel;\r\n import IColleagueResourceClass = Modules.Colleagues.IColleagueResourceClass;\r\n import TaskTypeCategory = Modules.Tasks.TaskTypeCategory;\r\n import ContractModel = Modules.Housing.ContractModel;\r\n import IFunctionGroupResourceClass = Modules.Colleagues.IFunctionGroupResourceClass;\r\n import ChannelType = Modules.ChannelType;\r\n import CreateTaskModel = Modules.Tasks.CreateTaskModel;\r\n import IResidentialZoneResourceClass = Modules.Housing.IResidentialZoneResourceClass;\r\n import ResidentialZoneModel = Modules.Housing.ResidentialZoneModel;\r\n import PhoneService = Modules.Telephony.PhoneService;\r\n import ChatService = Umbrella.ChatConversationHandling.ChatService;\r\n import ChatCustomerInformation = Umbrella.Modules.Chat.ChatCustomerInformation;\r\n import FaqResourceClass = Umbrella.Modules.Knowledgebase.Faq.FaqResourceClass;\r\n\r\n @Component('CustomerService', {\r\n selector: 'register-task-popup',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Activities/Registration/RegisterTaskPopupComponent/RegisterTaskPopup.html',\r\n bindings: {\r\n personId: '@',\r\n residentialZoneId: '@',\r\n channelType: '@',\r\n faqId: '@',\r\n tagId: '@',\r\n caseId: '@',\r\n contractId: '@',\r\n assignTo: '<',\r\n taskType: '<',\r\n chatCustomerInformation: '<'\r\n }\r\n })\r\n @Inject(\r\n '$mdDialog',\r\n 'PersonResource',\r\n 'TaskService',\r\n 'TaskResource',\r\n 'ContractResource',\r\n 'ColleagueResource',\r\n 'FunctionGroupResource',\r\n 'Upload',\r\n 'ResidentialZoneResource',\r\n 'ToastMessageService',\r\n 'LocalStorageService',\r\n 'ActivityRegistrationService',\r\n 'PhoneService',\r\n 'ChatService',\r\n 'FaqResource'\r\n )\r\n class RegisterUnitTaskPopupComponent {\r\n // bindings\r\n private personId: System.Guid;\r\n private residentialZoneId: System.Guid;\r\n private faqId: System.Guid;\r\n private tagId: System.Guid;\r\n private channelType: ChannelType;\r\n private caseId: System.Guid;\r\n private contractId: System.Guid;\r\n private assignTo: ColleagueModel | FunctionGroupModel;\r\n private taskType: TaskTypeCategory;\r\n private chatCustomerInformation: ChatCustomerInformation;\r\n\r\n public task: TaskModel;\r\n public media: MediaModel[];\r\n public taskTypes: TaskTypeModel[] = [];\r\n public selectedTaskType: TaskTypeModel;\r\n public allContracts: ContractFilterModel[] = [];\r\n public displayedContracts: ContractFilterModel[] = [];\r\n public selectedContract: ContractFilterModel;\r\n public contractors: RoleModel[] = [];\r\n public selectedContractor: RoleModel;\r\n public createdBy: SelectedColleagueOrFunctiongroup;\r\n public createdByList: SelectedColleagueOrFunctiongroup[] = [];\r\n public assignedTo: SummarizedColleagueModel | ColleagueModel.Detailed | FunctionGroupModel;\r\n public assignedToList: SummarizedColleagueModel[] = [];\r\n public now = new Date();\r\n public isSaving: boolean;\r\n public channels: ChannelInfo[];\r\n public selectedChannel: ChannelInfo;\r\n public isCustomer: boolean;\r\n public isPublic: boolean;\r\n public isUploading: boolean;\r\n\r\n private person: PersonModel;\r\n private residentialZone: ResidentialZoneModel;\r\n private readonly LAST_SELECTED_FUNCTIONGROUP = 'lastSelectedFunctionGroup';\r\n\r\n constructor(\r\n private $mdDialog,\r\n private personResource: PersonResource,\r\n private taskService: TaskService,\r\n private taskResource: ITaskResourceClass,\r\n private contractResource: IContractResource,\r\n private colleagueResource: IColleagueResourceClass,\r\n private functiongroupResource: IFunctionGroupResourceClass,\r\n private uploadService: any,\r\n private residentialZoneResource: IResidentialZoneResourceClass,\r\n private toastMessageService: ToastMessageService,\r\n private localStorageService: LocalStorageService,\r\n private activityRegistrationService: ActivityRegistrationService,\r\n private phoneService: PhoneService,\r\n private chatService: ChatService,\r\n private faqResource: FaqResourceClass\r\n ) {}\r\n\r\n public async $onInit() {\r\n this.task = this.taskService.createNewTask(null, null, this.chatCustomerInformation);\r\n if (this.personId) await this.loadPerson(this.personId);\r\n\r\n await this.setIsPublic();\r\n\r\n this.loadChannels();\r\n if (this.residentialZoneId) this.loadResidentialZone(this.residentialZoneId);\r\n\r\n this.loadAndPreSelectDropdowns();\r\n\r\n this.addPasteEventListener();\r\n\r\n this.media = [];\r\n }\r\n\r\n public isCustomerOrProspect(): boolean {\r\n return (\r\n this.person && this.person.roles && ('customer' in this.person.roles || 'prospect' in this.person.roles)\r\n );\r\n }\r\n\r\n public cancel(): void {\r\n this.$mdDialog.cancel();\r\n }\r\n\r\n public save(): void {\r\n this.isSaving = true;\r\n\r\n const task: CreateTaskModel = {\r\n description: this.task.description,\r\n endDate: this.task.ends,\r\n subject: this.generateSubject(),\r\n taskType: this.selectedTaskType,\r\n caseId: this.caseId,\r\n completeById: (this.assignedTo && this.assignedTo.id) || window.user.id,\r\n contractId: this.selectedContract && this.selectedContract.id,\r\n fromId: (this.createdBy && this.createdBy.id) || window.user.id,\r\n roleId: (this.selectedContractor && this.selectedContractor.id) || this.getRoleId() || null,\r\n mediaIds: this.task.mediaIds,\r\n faqId: this.faqId,\r\n tagId: this.tagId,\r\n channel: (this.selectedChannel && this.selectedChannel.type) || ChannelType.Unknown,\r\n residentialZoneId: this.residentialZoneId,\r\n isPublic: this.isPublic\r\n };\r\n\r\n this.taskResource\r\n .save(task)\r\n .$promise.then(createdTask => {\r\n this.toastMessageService.success('Taak succesvol geregistreerd');\r\n\r\n if (\r\n !this.phoneService.hasActiveCall(task.roleId) &&\r\n !this.chatService.hasActiveConversation(this.personId)\r\n )\r\n this.activityRegistrationService.selectChannel(task.channel);\r\n\r\n this.$mdDialog.hide(createdTask);\r\n })\r\n .catch(() => {\r\n if (this.faqId === 'null' || this.faqId === 'undefined') {\r\n this.toastMessageService.warning('Er is geen FAQ aan deze taak gekoppeld');\r\n return;\r\n }\r\n if (this.tagId === 'null' || this.tagId === 'undefined') {\r\n this.toastMessageService.warning('Er is geen Tag aan deze FAQ gekoppeld');\r\n return;\r\n }\r\n })\r\n .finally(() => (this.isSaving = false));\r\n }\r\n\r\n public searchContract(query: string) {\r\n this.displayedContracts = this.allContracts.filter(\r\n x => x.addressLine.toLowerCase().indexOf(query.toLowerCase()) > -1\r\n );\r\n }\r\n\r\n public selectContract(contract: ContractFilterModel): void {\r\n if (!contract) {\r\n this.selectedContract = null;\r\n this.contractors = [];\r\n return;\r\n }\r\n\r\n this.selectedContract = contract;\r\n this.loadContractors(contract.id);\r\n this.preSelectAssignedTo();\r\n }\r\n\r\n public async searchAssignedTo(query = ''): Promise {\r\n const pagedList = await this.colleagueResource.getColleaguesAndFunctiongroups({\r\n page: 0,\r\n pageSize: 20,\r\n id: query,\r\n userId: null\r\n }).$promise;\r\n this.assignedToList = pagedList.items;\r\n }\r\n\r\n public upload = (file: any) => {\r\n const url = Config.makeAbsoluteApiUrl('/api/v2/media?mediaCategory=TaskMedia');\r\n if (file) {\r\n this.isUploading = true;\r\n file.upload = this.uploadService\r\n .upload({\r\n url,\r\n data: { file }\r\n })\r\n .then(result => {\r\n this.isUploading = false;\r\n this.media.push(result.data);\r\n this.task.mediaIds.push(result.data.id);\r\n this.toastMessageService.success('Bestand is succesvol toegevoegd');\r\n })\r\n .catch(() => {\r\n this.isUploading = false;\r\n this.toastMessageService.error('Bestand toevoegen is mislukt');\r\n });\r\n }\r\n };\r\n\r\n public setCreatedBy(colleagueOrFunctionGroup: SelectedColleagueOrFunctiongroup): void {\r\n if (!colleagueOrFunctionGroup) return;\r\n\r\n if (this.isFunctionGroup(colleagueOrFunctionGroup))\r\n this.localStorageService.store(this.LAST_SELECTED_FUNCTIONGROUP, colleagueOrFunctionGroup);\r\n }\r\n\r\n private async loadPerson(personId: System.Guid): Promise {\r\n if (!personId) return;\r\n\r\n this.person = await this.personResource.getById({ id: personId }).$promise;\r\n }\r\n\r\n private getCustomerId(): System.Guid {\r\n // tslint:disable-next-line:no-string-literal\r\n return this.person && this.person.roles['customer'];\r\n }\r\n\r\n private getRoleId(): System.Guid {\r\n return (\r\n this.person &&\r\n // tslint:disable-next-line:no-string-literal\r\n (this.person.roles['customer'] || this.person.roles['vendor'] || this.person.roles['prospect'])\r\n );\r\n }\r\n\r\n private async loadAndPreSelectDropdowns(): Promise {\r\n this.loadTaskTypes();\r\n this.loadCreatedByList();\r\n this.preSelectCreatedBy();\r\n await this.loadAssignedToList();\r\n if (this.personId) await this.loadContracts();\r\n this.preSelectAssignedTo();\r\n }\r\n\r\n private async loadTaskTypes() {\r\n this.taskTypes = await this.taskResource.queryVisibleTypes().$promise;\r\n\r\n if (this.taskType || this.taskType === 0)\r\n // 0 = call me back (terugbellen)\r\n this.selectedTaskType = this.taskTypes[this.taskType];\r\n else if (this.taskTypes.length) {\r\n const requestTaskType = this.taskTypes.filter(x => x.name.toLowerCase().includes('verzoek'))[0];\r\n this.selectedTaskType = requestTaskType || this.taskTypes[0];\r\n }\r\n }\r\n\r\n private async loadContracts(): Promise {\r\n const customerId = this.getCustomerId();\r\n this.isCustomer = !!customerId;\r\n\r\n if (!this.isCustomer) return;\r\n\r\n const contractList = await this.contractResource.getAllFilterValuesByRoleId({\r\n id: customerId\r\n }).$promise;\r\n this.displayedContracts = this.allContracts = contractList;\r\n\r\n const preselectedContract = this.contractId\r\n ? this.allContracts.filter(x => x.id === this.contractId)[0] ||\r\n (await this.getContract(this.contractId))\r\n : !this.selectedContract && this.allContracts.filter(x => this.isActiveOrFutureContract(x))[0];\r\n\r\n if (preselectedContract)\r\n this.selectContract(this.allContracts.filter(x => x.id === preselectedContract.id)[0]);\r\n }\r\n\r\n private isActiveOrFutureContract(contract: ContractFilterModel): boolean {\r\n switch (contract.status.toString().toLowerCase()) {\r\n case 'active':\r\n case '1':\r\n case 'future':\r\n case '2':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private async loadAssignedToList(): Promise {\r\n await this.searchAssignedTo('');\r\n }\r\n\r\n private async preSelectAssignedTo(): Promise {\r\n if (this.assignTo) {\r\n if (this.assignedToList.filter(x => x.id === this.assignTo.id).length)\r\n this.assignedTo = this.assignedToList.filter(x => x.id === this.assignTo.id)[0];\r\n else {\r\n this.assignedTo = this.assignTo;\r\n this.assignedToList.push(this.assignedTo);\r\n }\r\n return;\r\n }\r\n\r\n if (!this.tagId) return;\r\n\r\n if (this.selectedContract && this.selectedContract.unitId)\r\n this.loadExpertiseForUnitAndMainTag(this.selectedContract.unitId, this.tagId);\r\n else this.loadExpertiseForMainTag(this.tagId);\r\n }\r\n\r\n private async loadExpertiseForMainTag(tagId: System.Guid): Promise {\r\n const functiongroupList = await this.functiongroupResource.getPagedByTagId({ id: tagId }).$promise;\r\n const firstFunctiongroup = functiongroupList && functiongroupList.total && functiongroupList.items[0];\r\n this.assignToFunctionGroup(firstFunctiongroup);\r\n }\r\n\r\n private async loadExpertiseForUnitAndMainTag(unitId: System.Guid, tagId: System.Guid): Promise {\r\n try {\r\n const functiongroup = await this.functiongroupResource.getByUnitAndTagId({ id: unitId, tagId })\r\n .$promise;\r\n this.assignToFunctionGroup(functiongroup);\r\n } catch (error) {\r\n this.loadExpertiseForMainTag(tagId);\r\n }\r\n }\r\n\r\n private assignToFunctionGroup(functiongroup: FunctionGroupModel): void {\r\n if (functiongroup) {\r\n if (this.assignedToList.filter(x => x.id === functiongroup.id).length)\r\n this.assignedTo = this.assignedToList.filter(x => x.id === functiongroup.id)[0];\r\n else {\r\n this.assignedTo = functiongroup;\r\n this.assignedToList.push(functiongroup);\r\n }\r\n }\r\n }\r\n\r\n private async loadContractors(contractId: System.Guid): Promise {\r\n this.contractors = await this.contractResource.getContacts({\r\n id: contractId\r\n }).$promise;\r\n this.selectedContractor = this.contractors.filter(x => x.id === this.getCustomerId())[0];\r\n }\r\n\r\n private loadCreatedByList(): void {\r\n this.createdByList = this.getUserWithFunctiongroups();\r\n }\r\n\r\n private preSelectCreatedBy(): void {\r\n const lastSelectedFunctionGroup = this.localStorageService.get(this.LAST_SELECTED_FUNCTIONGROUP);\r\n if (\r\n lastSelectedFunctionGroup &&\r\n lastSelectedFunctionGroup.id &&\r\n this.createdByList.find(x => x.id === lastSelectedFunctionGroup.id)\r\n ) {\r\n this.createdBy = this.createdByList.find(x => x.id === lastSelectedFunctionGroup.id);\r\n return;\r\n }\r\n\r\n if (this.createdByList.length) this.createdBy = this.createdByList[0];\r\n }\r\n\r\n private isFunctionGroup(colleagueOrFunctionGroup: SelectedColleagueOrFunctiongroup): boolean {\r\n return colleagueOrFunctionGroup.type === 'FunctionGroups';\r\n }\r\n\r\n private getUserWithFunctiongroups(): SelectedColleagueOrFunctiongroup[] {\r\n const currentUser: SelectedColleagueOrFunctiongroup = {\r\n id: window.user.id,\r\n name: window.user.name,\r\n department: window.user.department,\r\n type: 'Colleagues'\r\n };\r\n const toModel = (x: FunctionGroupModel) =>\r\n {\r\n id: x.id,\r\n name: x.title,\r\n department: '',\r\n type: 'FunctionGroups'\r\n };\r\n const orderByTitle = (x, y) => (x.title > y.title ? 1 : -1);\r\n const functiongroups: SelectedColleagueOrFunctiongroup[] = window.user.functionGroups\r\n .sort(orderByTitle)\r\n .map(toModel);\r\n return [...functiongroups, currentUser];\r\n }\r\n\r\n private async getContract(contractId: System.Guid): Promise {\r\n const contract = await this.contractResource.getById({\r\n id: contractId\r\n }).$promise;\r\n return contract;\r\n }\r\n\r\n private generateSubject(): string {\r\n if (this.chatCustomerInformation) return this.getSubjectForChat();\r\n if (this.residentialZone) return this.residentialZone.name;\r\n if (this.person) return this.getSubjectForPerson();\r\n\r\n return '';\r\n }\r\n\r\n private getSubjectForChat(): string {\r\n return `Chatgesprek met\r\n \"${this.chatCustomerInformation.firstName}${\r\n this.chatCustomerInformation.lastName.length > 0 ? ' ' : ''\r\n }${this.chatCustomerInformation.lastName}\" - ${this.chatCustomerInformation.phoneNumber}${\r\n this.chatCustomerInformation.email\r\n }`;\r\n }\r\n\r\n private getSubjectForPerson(): string {\r\n const name = this.selectedContractor ? this.selectedContractor.name : this.person.name;\r\n\r\n const selectedContractAddress = this.selectedContract && this.selectedContract.fullAddress;\r\n const selectedContractorHome =\r\n this.selectedContractor &&\r\n this.selectedContractor.homeAddress &&\r\n this.selectedContractor.homeAddress.fullAddressLine;\r\n const selectedContractorPostal =\r\n this.selectedContractor &&\r\n this.selectedContractor.postalAddress &&\r\n this.selectedContractor.postalAddress.fullAddressLine;\r\n const personAddress =\r\n this.person.contactDetails.addresses.length && this.person.contactDetails.addresses[0].fullAddressLine;\r\n\r\n const address =\r\n selectedContractAddress || selectedContractorHome || selectedContractorPostal || personAddress;\r\n\r\n return address ? `${name}, ${address}` : name;\r\n }\r\n\r\n private async loadResidentialZone(id: System.Guid): Promise {\r\n const zones = await this.residentialZoneResource.getByIds({\r\n ids: [id]\r\n }).$promise;\r\n this.residentialZone = zones && zones[0];\r\n }\r\n\r\n private loadChannels(): void {\r\n this.channels = getChannelTypes();\r\n const channelUnknown = {\r\n name: 'unknown',\r\n type: ChannelType.Unknown,\r\n title: 'N.v.t.'\r\n };\r\n this.channels.push(channelUnknown);\r\n\r\n let selectedChannelType = this.channelType || ChannelType.Unknown;\r\n const roleId = this.getRoleId();\r\n if (this.phoneService.hasActiveCall(roleId)) selectedChannelType = ChannelType.Phone;\r\n else if (this.chatService.hasActiveConversation(this.personId)) selectedChannelType = ChannelType.Chat;\r\n\r\n this.selectedChannel = this.channels.filter(x => x.type.toString() === selectedChannelType.toString())[0];\r\n }\r\n\r\n private addPasteEventListener(): void {\r\n window.addEventListener('paste', (event: Event) => {\r\n const clipboardEvent: ClipboardEvent = event;\r\n\r\n if (clipboardEvent.clipboardData.items) {\r\n const item = clipboardEvent.clipboardData.items[0];\r\n if (item) this.upload(item.getAsFile());\r\n }\r\n });\r\n }\r\n\r\n private async setIsPublic(): Promise {\r\n if(!this.faqId){\r\n this.isPublic = false;\r\n return;\r\n }\r\n try{\r\n const faq = await this.faqResource.getById({id: this.faqId}).$promise;\r\n\r\n let publicApplicationIds: System.Guid[] = [];\r\n if (window &&\r\n window.config &&\r\n window.config.modules &&\r\n window.config.modules.timeline &&\r\n window.config.modules.timeline.publicApplicationIds) {\r\n publicApplicationIds = window.config.modules.timeline.publicApplicationIds;\r\n }\r\n\r\n if (faq &&\r\n faq.applicationIds) {\r\n this.isPublic = publicApplicationIds.some(id => faq.applicationIds.indexOf(id) >= 0);\r\n }\r\n else {\r\n this.isPublic = false;\r\n }\r\n }\r\n catch(err){\r\n this.isPublic = false;\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.Activities.Registration {\r\n import KnowledgebaseItemModel = Modules.Knowledgebase.KnowledgebaseItemModel;\r\n import IKnowledgebaseItemResource = Modules.Knowledgebase.IKnowledgebaseItemResource;\r\n\r\n interface IBindingChange {\r\n currentValue: any;\r\n previousValue: any;\r\n isFirstChange(): boolean;\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'thesaurus-tag-media',\r\n bindings: {\r\n tagId: '<'\r\n },\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Activities/Registration/ThesaurusTagMediaComponent/ThesaurusTagMedia.html'\r\n })\r\n @Inject('KnowledgebaseItemResource')\r\n class ThesaurusTagMediaComponent {\r\n public knowledgebaseItem: KnowledgebaseItemModel.WithMedia;\r\n private tagId: System.Guid;\r\n public mediaLoading: boolean;\r\n\r\n constructor(\r\n protected knowledgebaseItemResource: IKnowledgebaseItemResource\r\n ) {}\r\n\r\n private $onInit() {\r\n this.loadMediaItems(this.tagId);\r\n }\r\n\r\n private loadMediaItems = tagId => {\r\n if (tagId) {\r\n this.mediaLoading = true;\r\n\r\n this.knowledgebaseItemResource\r\n .getByTagId({ id: tagId })\r\n .$promise.then(data => {\r\n this.knowledgebaseItem = data;\r\n })\r\n .finally(() => {\r\n this.mediaLoading = false;\r\n });\r\n } else {\r\n this.knowledgebaseItem = null;\r\n }\r\n };\r\n\r\n public $onChanges(bindings: { tagId: IBindingChange }) {\r\n if (\r\n bindings.tagId &&\r\n bindings.tagId.currentValue !== bindings.tagId.previousValue\r\n ) {\r\n this.loadMediaItems(bindings.tagId.currentValue);\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Colleagues {\r\n\r\n export function getColleagueEmail(emails: EmailAddressModel[]) : string {\r\n if (!emails) return '';\r\n\r\n return emails.reduce((previousValue, currentValue) => {\r\n if(!currentValue.email) {\r\n return previousValue; \r\n }\r\n\r\n return currentValue.email\r\n }, '') \r\n };\r\n}","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import PersonSearchModel = Umbrella.Modules.PersonSearchModel;\r\n import SummarizedColleagueModel = Modules.Colleagues.SummarizedColleagueModel;\r\n import PhoneService = Modules.Telephony.PhoneService;\r\n import ICalendarResourceClass = Modules.Colleagues.ICalendarResourceClass;\r\n import AppointmentModel = Modules.Colleagues.Calendar.AppointmentModel;\r\n import FaqModel = Modules.Knowledgebase.FaqModel;\r\n import IColleagueResource = Umbrella.Modules.Colleagues.IColleagueResourceClass;\r\n import CustomerCardStore = Umbrella.CustomerService.CustomerCard.CustomerCardStore;\r\n import FunctionGroupModel = Umbrella.Modules.Knowledgebase.FunctionGroupModel;\r\n import PresenceResource = Umbrella.IPresenceResource;\r\n import StatusUpdateModel = Umbrella.Modules.Colleagues.StatusUpdateModel;\r\n import TaskTypeCategory = Modules.Tasks.TaskTypeCategory;\r\n import ActivityRegistrationService = Umbrella.CustomerService.CustomerCard.Activities.Registration.ActivityRegistrationService;\r\n import IContractResource = Modules.Housing.IContractResource;\r\n import ContractFilterModel = Modules.Housing.ContractFilterModel;\r\n\r\n interface SummarizedColleagueModelWithStatus extends SummarizedColleagueModel {\r\n status?: Umbrella.Modules.Colleagues.StatusModel;\r\n }\r\n\r\n export interface TransferPopupControllerScope extends IUmbrellaRootScope {\r\n colleague: SummarizedColleagueModelWithStatus;\r\n caseId: System.Guid;\r\n contractId: System.Guid;\r\n functionGroups: FunctionGroupModel[];\r\n functionGroupsDoneLoading: boolean;\r\n colleaguesWithExpertise: SummarizedColleagueModelWithStatus[];\r\n contracts: ContractFilterModel[];\r\n selectedContract: ContractFilterModel;\r\n selectedDay: Date;\r\n appointments: AppointmentModel[];\r\n faq: FaqModel;\r\n tagId: System.Guid;\r\n\r\n reloadCalendar(day: Date): void;\r\n setColleague(colleague: SummarizedColleagueModel);\r\n setPerson(colleague: PersonSearchModel);\r\n callNr(phoneNr: string): void;\r\n isCalendarAvailable(): boolean;\r\n setUnit(value): void;\r\n }\r\n\r\n @Controller('CustomerService', 'TransferPopupController')\r\n @Inject(\r\n '$scope',\r\n '$mdDialog',\r\n 'PhoneService',\r\n 'CalendarResource',\r\n 'ColleagueResource',\r\n 'CustomerCardStore',\r\n 'PresenceResource',\r\n 'ActivityRegistrationService',\r\n 'ContractResource'\r\n )\r\n export class TransferPopupController {\r\n private nrOfDaysToLoad = 8;\r\n private presenceObserver: Rx.IDisposable;\r\n\r\n constructor(\r\n private $scope: TransferPopupControllerScope,\r\n private $mdDialog,\r\n phoneService: PhoneService,\r\n private calendarResource: ICalendarResourceClass,\r\n private colleagueResource: IColleagueResource,\r\n private customerCardStore: CustomerCardStore,\r\n private presenceResource: PresenceResource,\r\n private activityRegistrationService: ActivityRegistrationService,\r\n private contractResource: IContractResource\r\n ) {\r\n $scope.colleague = null;\r\n $scope.start = new Date();\r\n $scope.colleaguesWithExpertise = [];\r\n $scope.selectedDay = new Date();\r\n\r\n $scope.reloadCalendar = (day: Date) => {\r\n this.$scope.selectedDay = day;\r\n if (this.$scope.colleague) this.loadCalendar(this.$scope.colleague.id, day, this.nrOfDaysToLoad);\r\n };\r\n\r\n $scope.setColleague = colleague => {\r\n if (!colleague) return;\r\n\r\n $scope.colleague = { ...colleague, status: null };\r\n this.loadPresence([colleague]);\r\n this.loadCalendar(colleague.id, new Date().midnight(), this.nrOfDaysToLoad);\r\n this.loadFunctionGroups(colleague.id);\r\n };\r\n\r\n $scope.setPerson = person => {\r\n if (!person) return;\r\n const colleague: SummarizedColleagueModel = {\r\n department: person.department,\r\n id: person.roles['employee'],\r\n personId: person.id,\r\n job: person.jobTitle,\r\n name: person.name || `${person['firtsName']} ${person['lastName']}`,\r\n email: Umbrella.Modules.Colleagues.getColleagueEmail(person.contactDetails.emailAddresses),\r\n phoneNumber:\r\n person.contactDetails.phoneNumbers.length > 0\r\n ? person.contactDetails.phoneNumbers[0].number\r\n : '',\r\n phoneNumber2:\r\n person.contactDetails.phoneNumbers.length > 1\r\n ? person.contactDetails.phoneNumbers[1].number\r\n : '',\r\n function: '',\r\n pictureBlobId: null\r\n };\r\n $scope.colleague = { ...colleague, status: null };\r\n this.loadPresence([colleague]);\r\n this.loadCalendar(colleague.id, new Date().midnight(), this.nrOfDaysToLoad);\r\n this.loadFunctionGroups(colleague.id);\r\n };\r\n\r\n $scope.callNr = (phoneNr: string) => {\r\n phoneService.callNr(phoneNr);\r\n $scope.$modalCancel();\r\n };\r\n\r\n $scope.isCalendarAvailable = () => {\r\n return this.isCalendarFacetAvailable();\r\n };\r\n\r\n $scope.launchTaskRegistrationPopup = () => {\r\n const faqId = (this.$scope.faq && this.$scope.faq.id) || '';\r\n const tagId = this.$scope.tagId || '';\r\n const caseId = this.$scope.caseId || '';\r\n const contractId = this.$scope.contractId || '';\r\n\r\n this.customerCardStore.state$\r\n .map(x => x && x.personal && x.personal.person && x.personal.person.id)\r\n .filter(x => !!x)\r\n .take(1)\r\n .subscribe((personId: System.Guid) => {\r\n const firstFunctionGroup =\r\n $scope.functionGroups && $scope.functionGroups.length && $scope.functionGroups[0];\r\n const template = ``;\r\n this.$mdDialog.show({\r\n template,\r\n locals: {\r\n assignTo: firstFunctionGroup || $scope.colleague\r\n },\r\n controller: [\r\n '$scope',\r\n 'assignTo',\r\n ($scope, assignTo) => {\r\n $scope.assignTo = assignTo;\r\n }\r\n ],\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n });\r\n\r\n $scope.$modalCancel();\r\n });\r\n };\r\n\r\n $scope.selectContract = (contract: ContractFilterModel) => {\r\n const tagId = this.$scope.tagId || (this.$scope.faq && this.$scope.faq.mainTag.id);\r\n const unitId = contract && contract.unitId;\r\n this.loadColleaguesWithExpertise(tagId, unitId);\r\n };\r\n\r\n $scope.setDirectiveFunction = setHeightColleagueColumn => {\r\n $scope.setHeightColleagueColumn = setHeightColleagueColumn;\r\n };\r\n\r\n this.initialize();\r\n }\r\n\r\n public $onDestroy() {\r\n if (this.presenceObserver) {\r\n this.presenceObserver.dispose();\r\n this.presenceObserver = null;\r\n }\r\n }\r\n\r\n private initialize(): void {\r\n if (this.$scope.customerId) this.loadContractsAndDetermineExpertiseByFirstContract(this.$scope.customerId);\r\n else {\r\n const tagId = this.$scope.tagId || (this.$scope.faq && this.$scope.faq.mainTag.id);\r\n this.loadColleaguesWithExpertise(tagId);\r\n }\r\n\r\n this.observePresence();\r\n }\r\n\r\n private observePresence(): void {\r\n this.presenceObserver = colleagueStatusUpdated$\r\n .filter(x => !!x)\r\n .distinctUntilChanged()\r\n .subscribe(update => {\r\n if (this.$scope.colleague && this.$scope.colleague.personId === update.userId)\r\n this.$scope.colleague.status = update.status;\r\n\r\n const colleague = this.$scope.colleaguesWithExpertise.filter(x => x.personId === update.userId)[0];\r\n if (colleague) colleague.status = update.status;\r\n });\r\n }\r\n\r\n private isCalendarFacetAvailable(): boolean {\r\n const isFacetAvailable =\r\n window.config &&\r\n window.config.facets &&\r\n window.config.facets.calendar &&\r\n window.config.facets.calendar[0] &&\r\n window.config.facets.calendar[0].available;\r\n return isFacetAvailable;\r\n }\r\n\r\n private loadCalendar(colleagueId: System.Guid, day: Date, nrOfDaysToLoad: number) {\r\n if (!this.isCalendarFacetAvailable() || !day) return;\r\n\r\n this.$scope.appointments = null;\r\n this.$scope.loading = true;\r\n this.$scope.selectedDay = day.midnight();\r\n\r\n this.calendarResource\r\n .getAppointmentsForDay({\r\n id: colleagueId,\r\n day: this.$scope.selectedDay,\r\n days: nrOfDaysToLoad\r\n })\r\n .$promise.then(data => {\r\n const convertStringsToDates = (a: AppointmentModel) =>\r\n {\r\n ...a,\r\n startTime: new Date(a.startTime),\r\n endTime: new Date(a.endTime)\r\n };\r\n this.$scope.appointments = data.map(convertStringsToDates);\r\n })\r\n .finally(() => (this.$scope.loading = false));\r\n }\r\n\r\n private loadFunctionGroups(colleagueId: System.Guid): void {\r\n this.colleagueResource.getById({ id: colleagueId }).$promise.then(colleague => {\r\n this.$scope.functionGroups = colleague.functiongroups;\r\n this.$scope.functionGroupsDoneLoading = !this.$scope.functionGroupsDoneLoading;\r\n });\r\n }\r\n\r\n private loadColleaguesWithExpertise(tagId: System.Guid, unitId?: System.Guid): void {\r\n if (!tagId) return;\r\n\r\n const promise = unitId\r\n ? this.colleagueResource.getColleaguesByTagAndUnitId({\r\n id: tagId,\r\n unitId,\r\n pageSize: 20,\r\n page: 0\r\n }).$promise\r\n : this.colleagueResource.getColleaguesByTagId({\r\n id: tagId,\r\n pageSize: 20,\r\n page: 0\r\n }).$promise;\r\n\r\n promise.then((colleagues: SummarizedColleagueModel[]) => {\r\n this.$scope.colleaguesWithExpertise = colleagues;\r\n if (colleagues.length) this.$scope.setColleague(colleagues[0]);\r\n\r\n this.loadPresence(colleagues);\r\n });\r\n }\r\n\r\n private loadPresence(colleagues: SummarizedColleagueModel[]): void {\r\n if (!colleagues || !colleagues.length) return;\r\n\r\n this.presenceResource\r\n .getStatusByIds({ ids: colleagues.map(x => x.personId) })\r\n .$promise.then(colleaguePhoneStatuses =>\r\n this.mapPhoneStatusesToColleagues(colleaguePhoneStatuses, colleagues)\r\n );\r\n }\r\n\r\n private mapPhoneStatusesToColleagues(\r\n colleaguePhoneStatuses: StatusUpdateModel[],\r\n colleagues: SummarizedColleagueModelWithStatus[]\r\n ) {\r\n colleagues.forEach(colleague => {\r\n const foundStatus = colleaguePhoneStatuses.filter(x => x.userId === colleague.personId)[0];\r\n if (foundStatus) colleague.status = foundStatus.status;\r\n });\r\n }\r\n\r\n private async loadContractsAndDetermineExpertiseByFirstContract(customerId: System.Guid): Promise {\r\n const data = await this.contractResource.getAllFilterValuesByRoleId({\r\n id: customerId\r\n }).$promise;\r\n this.$scope.contracts = data;\r\n this.$scope.selectedContract = data && data[0];\r\n\r\n const tagId = this.$scope.faq && this.$scope.faq.mainTag.id;\r\n const unitId = this.$scope.selectedContract && this.$scope.selectedContract.unitId;\r\n this.loadColleaguesWithExpertise(tagId, unitId);\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Activities {\r\n angular.module('CustomerService').directive('resizeOnChange', [\r\n '$window',\r\n ($window: string) => {\r\n return {\r\n restrict: 'AE',\r\n scope: {\r\n setFunction: '&'\r\n },\r\n link: (scope, element) => {\r\n scope.callSetHeightColleagueColumn = () => {\r\n setHeightColleagueColumn();\r\n };\r\n scope.setFunction({ setHeightColleagueColumn: scope.callSetHeightColleagueColumn });\r\n\r\n angular.element($window).bind('resize', () => {\r\n setHeightColleagueColumn();\r\n });\r\n\r\n function setHeightColleagueColumn(): void {\r\n if (element[0]) {\r\n const suggestedColleaguesWithExpertise =\r\n element[0].children[element[0].children.length - 1];\r\n suggestedColleaguesWithExpertise.setAttribute(\r\n 'style',\r\n 'height:' + returnSuggestedColleaguesWithExpertiseHeight() + 'px'\r\n );\r\n }\r\n }\r\n\r\n function returnSuggestedColleaguesWithExpertiseHeight(): number {\r\n if (element[0]) {\r\n let transferColleaguesHeight = element[0].clientHeight;\r\n const transferColleaguesChildElements = <[HTMLElement]>element[0].children;\r\n for (let i = 0; i < transferColleaguesChildElements.length - 1; i++) {\r\n transferColleaguesHeight -= Math.ceil(transferColleaguesChildElements[i].clientHeight);\r\n }\r\n return transferColleaguesHeight - 20;\r\n }\r\n return 0;\r\n }\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.Activities.Timeline {\r\n import debounce = Umbrella.Helpers.debounce;\r\n import ActivityCategoryModel = Modules.ActivityCategoryModel;\r\n import ContractFilterModel = Modules.Housing.ContractFilterModel;\r\n import IContractResource = Modules.Housing.IContractResource;\r\n import ThesaurusTagModel = Umbrella.Modules.Knowledgebase.ThesaurusTagModel;\r\n import SelfServiceScenarioModel = Umbrella.Modules.SelfService.SelfServiceScenarioModel;\r\n import StatusFilter = Umbrella.Modules.StatusFilter;\r\n import ChannelType = Umbrella.Modules.ChannelType;\r\n\r\n export interface CustomerTimelineFiltersComponentState {\r\n person: PersonModel;\r\n query: string;\r\n activityCategories: ActivityCategoryModel[];\r\n selectedCategory: string;\r\n selectedContract: Guid;\r\n allScenarios: SelfServiceScenarioModel[];\r\n rootTags: ThesaurusTagModel[];\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'customer-timeline-filters',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Activities/Timeline/CustomerTimelineFiltersComponent/CustomerTimelineFilters.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('$state', 'ContractResource', 'CustomerCardActivityInfoService', 'CustomerCardAnnouncementInfoService')\r\n class CustomerTimelineFiltersComponent {\r\n public state: CustomerTimelineFiltersComponentState;\r\n public searchQuery: string;\r\n public selectedCategory: string;\r\n public displayedContracts: ContractFilterModel[] = [];\r\n public selectedContract: ContractFilterModel;\r\n public isOnCustomerCardAnnouncements: boolean;\r\n public selectedTagName: string;\r\n public selectedScenarioTitle: string;\r\n private loadingContracts: boolean;\r\n public selectedStatusFilter: number;\r\n public statusFilter: StatusFilter;\r\n public selectedChannelFilter: string;\r\n private channelFilters: { value: string; key: any }[];\r\n\r\n constructor(\r\n private $state: ng.ui.IStateService,\r\n private contractResource: IContractResource,\r\n private activityInfoService: CustomerCardActivityInfoService,\r\n private announcementInfoService: CustomerCardAnnouncementInfoService\r\n ) {}\r\n\r\n public $onInit() {\r\n this.selectedCategory = this.state && this.state.selectedCategory;\r\n this.searchQuery = this.state && this.state.query;\r\n\r\n this.filterByStatus(StatusFilter.Active);\r\n\r\n const cardAnnouncementsState = 'customercard.announcements';\r\n this.isOnCustomerCardAnnouncements = this.$state.current.name.includes(cardAnnouncementsState);\r\n\r\n this.channelFilters = Object.keys(ChannelType)\r\n .filter(x => !(parseInt(x) >= 0))\r\n .filter(\r\n function(e) {\r\n return this.indexOf(e) < 0;\r\n },\r\n ['Unknown', 'Umbrella', 'Facebook', 'Tweet']\r\n )\r\n .map(value => ({ key: ChannelType[value], value }));\r\n }\r\n\r\n public $onChanges() {\r\n const customerId = this.getCustomerId();\r\n const contractsLoaded = this.displayedContracts.length > 0;\r\n if (customerId && !contractsLoaded && !this.loadingContracts) {\r\n this.loadingContracts = true;\r\n this.loadContracts(customerId);\r\n }\r\n }\r\n\r\n public filterByQuery = debounce(\r\n (query: string) => {\r\n this.searchQuery = query;\r\n this.activityInfoService.filterByQuery(query);\r\n },\r\n 1000,\r\n false\r\n );\r\n\r\n public searchContract = debounce(\r\n (query: string) => {\r\n const customerId = this.getCustomerId();\r\n if (!customerId) return;\r\n\r\n this.loadContracts(customerId, query);\r\n },\r\n 500,\r\n false\r\n );\r\n\r\n public filterByContract(contract: ContractFilterModel) {\r\n this.activityInfoService.filterByContract(contract && contract.id);\r\n this.announcementInfoService.filterByContractId(contract && contract.id);\r\n }\r\n\r\n public filterByCategory(category: ActivityCategoryModel): void {\r\n this.selectedCategory = category && category.name;\r\n this.activityInfoService.filterByActivityCategory(category && category.name);\r\n }\r\n\r\n public filterByTag(tag: ThesaurusTagModel): void {\r\n this.selectedTagName = tag && tag.name;\r\n this.activityInfoService.filterByTagId(tag && tag.id);\r\n }\r\n\r\n public filterByScenario(scenario: SelfServiceScenarioModel): void {\r\n this.selectedScenarioTitle = scenario && scenario.title;\r\n this.activityInfoService.filterByScenarioId(scenario && scenario.id);\r\n }\r\n\r\n public filterByStatus(selectedStatusFilter: StatusFilter): void {\r\n this.selectedStatusFilter = selectedStatusFilter;\r\n this.activityInfoService.filterByStatus(selectedStatusFilter);\r\n }\r\n\r\n public filterByChannel(selectedChannelFilter: string): void {\r\n this.selectedChannelFilter = selectedChannelFilter;\r\n this.activityInfoService.filterByChannel(selectedChannelFilter);\r\n }\r\n\r\n public getStatusFilterDescription(statusFilter: StatusFilter): string {\r\n switch (+statusFilter) {\r\n case Umbrella.Modules.StatusFilter.Active:\r\n return 'Actief';\r\n case Umbrella.Modules.StatusFilter.All:\r\n return 'Alles';\r\n case Umbrella.Modules.StatusFilter.Deleted:\r\n return 'Verwijderd';\r\n default:\r\n throw new Error('Value not implemented');\r\n }\r\n }\r\n\r\n public getChannelFilterDescription(channelFilter: string): string {\r\n switch (+channelFilter) {\r\n case Umbrella.Modules.ChannelType.Unknown:\r\n return 'Unknown';\r\n case Umbrella.Modules.ChannelType.Phone:\r\n return 'Telefoongesprek';\r\n case Umbrella.Modules.ChannelType.Visit:\r\n return 'Huisbezoek';\r\n case Umbrella.Modules.ChannelType.Desk:\r\n return 'Baliebezoek';\r\n case Umbrella.Modules.ChannelType.Email:\r\n return 'E-mail';\r\n case Umbrella.Modules.ChannelType.Post:\r\n return 'Post';\r\n case Umbrella.Modules.ChannelType.Social:\r\n return 'Social media';\r\n case Umbrella.Modules.ChannelType.Tweet:\r\n return 'Tweet';\r\n case Umbrella.Modules.ChannelType.Facebook:\r\n return 'Facebook';\r\n case Umbrella.Modules.ChannelType.Web:\r\n return 'Klantportaal';\r\n case Umbrella.Modules.ChannelType.Chat:\r\n return 'Chat';\r\n case Umbrella.Modules.ChannelType.Sms:\r\n return 'Sms';\r\n case Umbrella.Modules.ChannelType.Umbrella:\r\n return 'Umbrella';\r\n case Umbrella.Modules.ChannelType.Survey:\r\n return 'Enquête';\r\n case Umbrella.Modules.ChannelType.Backoffice:\r\n return 'Backoffice';\r\n default:\r\n throw new Error('Value not implemented');\r\n }\r\n }\r\n\r\n private getCustomerId(): System.Guid {\r\n return this.state && this.state.person && this.state.person.roles['customer'];\r\n }\r\n\r\n public getStatusFilters(): string[] {\r\n return Object.keys(StatusFilter).filter(x => parseInt(x) >= 0 && parseInt(x) < 2);\r\n }\r\n\r\n public getChannelFilters(): { value: string; key: string }[] {\r\n return this.channelFilters;\r\n }\r\n\r\n private loadContracts(customerId: System.Guid, query?: string): void {\r\n this.contractResource\r\n .getFilterValuesByRoleId({\r\n id: customerId,\r\n page: 0,\r\n pageSize: 255,\r\n searchQuery: query\r\n })\r\n .$promise.then(data => {\r\n this.displayedContracts = data.items;\r\n });\r\n }\r\n\r\n public isAutorizedToFilterOnIsDeleted = (): boolean => window.user.permissions.caseReadDeleted;\r\n\r\n public closeFilter() {\r\n if (\r\n document.getElementsByTagName('body')[0].classList.contains('ismobile') &&\r\n document.getElementsByClassName('responsive-view-filters').length\r\n ) {\r\n document\r\n .getElementsByClassName('responsive-view-filters')[0]\r\n .setAttribute('style', 'display:none !important');\r\n if (document.getElementsByClassName('active-icon').length)\r\n document.getElementsByClassName('active-icon')[0].classList.remove('active-icon');\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard {\r\n import AnnouncementModel = Modules.Announcements.AnnouncementModel;\r\n import PersonAnnouncementResourceClass = Umbrella.Modules.Announcements.PersonAnnouncementResourceClass;\r\n import AnnouncementResourceClass = Umbrella.Modules.Announcements.AnnouncementResourceClass;\r\n\r\n const PAGE_SIZE: number = 20;\r\n\r\n @Service('CustomerService', 'CustomerCardAnnouncementInfoService')\r\n @Inject(\r\n 'CustomerCardStore',\r\n 'PersonAnnouncementResource',\r\n 'AnnouncementResource'\r\n )\r\n export class CustomerCardAnnouncementInfoService extends BaseStoreService<\r\n CustomerCardState,\r\n CustomerCardEvent,\r\n CustomerCardStore\r\n > {\r\n constructor(\r\n store: CustomerCardStore,\r\n private personAnnouncementResource: PersonAnnouncementResourceClass,\r\n private announcementResource: AnnouncementResourceClass\r\n ) {\r\n super(store);\r\n }\r\n\r\n public ensureLoaded(pageSize = PAGE_SIZE): void {\r\n if (!this.getState().announcementInfo)\r\n this.loadPage(\r\n 0,\r\n pageSize,\r\n null,\r\n announcements => announcements\r\n );\r\n }\r\n\r\n public reload(): void {\r\n const state = this.getState();\r\n const pageSize =\r\n (state.announcementInfo &&\r\n state.announcementInfo.announcements &&\r\n state.announcementInfo.announcements.pageSize) ||\r\n PAGE_SIZE;\r\n const contractId =\r\n state.announcementInfo && state.announcementInfo.contractId;\r\n\r\n this.loadPage(\r\n 0,\r\n pageSize,\r\n contractId,\r\n announcements => announcements\r\n );\r\n }\r\n\r\n public loadMore(): void {\r\n const state = this.store.getState();\r\n const pagedItems =\r\n state.announcementInfo && state.announcementInfo.announcements;\r\n const contractId =\r\n state.announcementInfo && state.announcementInfo.contractId;\r\n\r\n this.loadPage(\r\n pagedItems.page + 1,\r\n pagedItems.pageSize,\r\n contractId,\r\n announcements => ({\r\n items: pagedItems\r\n ? pagedItems.items.concat(announcements.items)\r\n : announcements.items,\r\n total: announcements.total,\r\n page: announcements.page,\r\n pageSize: announcements.pageSize\r\n })\r\n );\r\n }\r\n\r\n public filterByContractId(contractId: System.Guid): void {\r\n const state = this.store.getState();\r\n const pageSize =\r\n (state.announcementInfo &&\r\n state.announcementInfo.announcements &&\r\n state.announcementInfo.announcements.pageSize) ||\r\n PAGE_SIZE;\r\n\r\n this.loadPage(\r\n 0,\r\n pageSize,\r\n contractId,\r\n announcements => announcements\r\n );\r\n }\r\n\r\n private loadPage(\r\n page: number,\r\n pageSize: number,\r\n contractId: System.Guid,\r\n loaded: ((\r\n a: PagedItemsModel\r\n ) => PagedItemsModel)\r\n ) {\r\n const state = this.getState();\r\n if (state.personal.person) {\r\n this.emit({\r\n type: 'CustomerCardAnnouncementsLoadingEvent',\r\n page,\r\n pageSize,\r\n contractId\r\n });\r\n\r\n let request;\r\n if (contractId) {\r\n request = this.announcementResource.byContractId({\r\n id: contractId,\r\n page,\r\n pageSize\r\n }).$promise;\r\n } else {\r\n request = this.personAnnouncementResource.getPagedByPersonId(\r\n { id: state.personal.person.id, page, pageSize }\r\n ).$promise;\r\n }\r\n\r\n request\r\n .then(announcements => {\r\n const newAnnouncements = loaded(announcements);\r\n this.emit({\r\n type: 'CustomerCardAnnouncementsLoadedEvent',\r\n announcements: newAnnouncements,\r\n contractId\r\n });\r\n })\r\n .catch(e =>\r\n this.emit({\r\n type: 'CustomerCardAnnouncementsLoadErrorEvent',\r\n error: e\r\n })\r\n );\r\n } else {\r\n this.store.state$\r\n .map(x => x && x.personal)\r\n .filter(\r\n personal => !personal.loading && !personal.loadError\r\n )\r\n .take(1)\r\n .subscribeOnCompleted(() =>\r\n this.loadPage(page, pageSize, contractId, loaded)\r\n );\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Announcements {\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('customerservice.customercard.announcements', {\r\n url: '/mededelingen',\r\n reloadOnSearch: false,\r\n data: {\r\n tab: 'announcements',\r\n authorize: ps => ps.customerCard && ps.announcementRead\r\n },\r\n onEnter: [\r\n 'CustomerCardAnnouncementInfoService',\r\n (\r\n announcementInfoService: CustomerCardAnnouncementInfoService\r\n ) => {\r\n announcementInfoService.ensureLoaded();\r\n }\r\n ],\r\n views: {\r\n 'left@customerservice': {\r\n template:\r\n '',\r\n controller: Umbrella.createComponentRouteController<\r\n CustomerCardState,\r\n CustomerAnnouncementFiltersComponentState\r\n >('CustomerCardStore', s => ({\r\n person: s && s.personal && s.personal.person,\r\n selectedContract:\r\n s &&\r\n s.activityInfo &&\r\n s.activityInfo.filters &&\r\n s.activityInfo.filters.contractId\r\n }))\r\n },\r\n 'tab@customerservice': {\r\n template:\r\n '',\r\n controller: createComponentRouteController<\r\n CustomerCardState,\r\n CustomerAnnouncementsComponentState\r\n >('CustomerCardStore', s => ({\r\n loading:\r\n s.announcementInfo &&\r\n s.announcementInfo.loading &&\r\n s.registrationInfo &&\r\n s.registrationInfo.loading,\r\n person: s.personal && s.personal.person,\r\n customer:\r\n s && s.customerInfo && s.customerInfo.customer,\r\n announcementInfo: s.announcementInfo,\r\n registrationInfo:\r\n s.registrationInfo &&\r\n s.registrationInfo.registrations\r\n }))\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import AnnouncementModel = Modules.Announcements.AnnouncementModel;\r\n\r\n @Component('CustomerService', {\r\n selector: 'announcement-timeline',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Announcements/AnnouncementTimelineComponent/AnnouncementTimeline.html',\r\n bindings: {\r\n announcements: '<',\r\n paging: '<',\r\n pageSize: '<',\r\n hideFeedback: '<',\r\n loading: '<',\r\n onLoadMore: '&'\r\n }\r\n })\r\n export class AnnouncementTimelineComponent {\r\n public announcements: PagedItemsModel;\r\n public paging: boolean;\r\n public pageSize: number;\r\n public hideFeedback: boolean;\r\n public loading: boolean;\r\n public onLoadMore: () => void;\r\n public onDisplayAll: () => void;\r\n\r\n public getAnnouncements(): AnnouncementModel[] {\r\n if (!this.paging && this.announcements.items.length > this.pageSize)\r\n return this.announcements.items.slice(0, this.pageSize);\r\n\r\n return this.announcements.items;\r\n }\r\n\r\n public loadMore() {\r\n this.onLoadMore();\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import AnnouncementModel = Modules.Announcements.AnnouncementModel;\r\n import ResidentialZoneModel = Umbrella.Modules.Housing.ResidentialZoneModel;\r\n import IResidentialZoneResourceClass = Umbrella.Modules.Housing.IResidentialZoneResourceClass;\r\n\r\n @Component('CustomerService', {\r\n selector: 'announcement-timeline-item',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Announcements/AnnouncementTimelineItemComponent/AnnouncementTimelineItem.html',\r\n bindings: {\r\n announcement: '<',\r\n displayAllAnnouncementsLink: '<'\r\n }\r\n })\r\n @Inject('PersonResource', 'ResidentialZoneResource')\r\n export class AnnouncementTimelineItemComponent {\r\n public announcement: AnnouncementModel;\r\n public displayAllAnnouncementsLink: boolean;\r\n\r\n public residentialZones: ResidentialZoneModel[];\r\n public people: PersonModel[];\r\n public visible: boolean;\r\n\r\n constructor(\r\n private personResource: PersonResource,\r\n private residentialZoneResource: IResidentialZoneResourceClass\r\n ) {}\r\n\r\n public toggleVisibility() {\r\n this.visible = !this.visible;\r\n\r\n if (!this.people && !this.residentialZones && this.visible) {\r\n this.loadResidentialZonesForSelectedAnnouncement();\r\n this.loadCustomersForSelectedAnnouncement();\r\n }\r\n }\r\n\r\n private loadResidentialZonesForSelectedAnnouncement() {\r\n this.residentialZones = [];\r\n\r\n if (\r\n this.announcement &&\r\n this.announcement.residentialZoneIds.length > 0\r\n )\r\n this.residentialZoneResource\r\n .getByIds({ ids: this.announcement.residentialZoneIds })\r\n .$promise.then(\r\n residentialZones =>\r\n (this.residentialZones = residentialZones)\r\n );\r\n }\r\n\r\n private loadCustomersForSelectedAnnouncement() {\r\n this.people = [];\r\n\r\n if (this.announcement && this.announcement.personIds.length > 0)\r\n this.personResource\r\n .getByIds({ ids: this.announcement.personIds })\r\n .$promise.then(people => (this.people = people));\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Announcements {\r\n import IContractResource = Modules.Housing.IContractResource;\r\n import ContractFilterModel = Modules.Housing.ContractFilterModel;\r\n import debounce = Umbrella.Helpers.debounce;\r\n\r\n export interface CustomerAnnouncementFiltersComponentState {\r\n person: PersonModel;\r\n selectedContract: Guid;\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'customer-announcement-filters',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Announcements/CustomerAnnouncementFiltersComponent/CustomerAnnouncementFilters.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('ContractResource', 'CustomerCardAnnouncementInfoService')\r\n class CustomerAnnouncementFiltersComponent {\r\n public state: CustomerAnnouncementFiltersComponentState;\r\n public displayedContracts: ContractFilterModel[] = [];\r\n public selectedContract: ContractFilterModel;\r\n\r\n constructor(\r\n private contractResource: IContractResource,\r\n private announcementInfoService: CustomerCardAnnouncementInfoService\r\n ) {}\r\n\r\n public $onChanges() {\r\n const customerId =\r\n this.state &&\r\n this.state.person &&\r\n this.state.person.roles['customer'];\r\n const contractsLoaded = this.displayedContracts.length > 0;\r\n if (customerId && !contractsLoaded) this.loadContracts(customerId);\r\n }\r\n\r\n public searchContract = debounce(\r\n (query: string) => {\r\n const customerId = this.getCustomerId();\r\n this.loadContracts(customerId, query);\r\n },\r\n 500,\r\n false\r\n );\r\n\r\n public filterByContract(contract: ContractFilterModel) {\r\n if (contract)\r\n this.announcementInfoService.filterByContractId(contract.id);\r\n else this.announcementInfoService.ensureLoaded();\r\n }\r\n\r\n private getCustomerId(): System.Guid {\r\n return (\r\n this.state &&\r\n this.state.person &&\r\n this.state.person.roles['customer']\r\n );\r\n }\r\n\r\n private loadContracts(customerId: System.Guid, query?: string): void {\r\n this.contractResource\r\n .getFilterValuesByRoleId({\r\n id: customerId,\r\n page: 0,\r\n pageSize: 255,\r\n searchQuery: query\r\n })\r\n .$promise.then(data => {\r\n this.displayedContracts = data.items;\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard {\r\n\r\n import RegistrationModel = Umbrella.HousingAllocation.Registrations.Detailed;\r\n \r\n export interface CustomerAnnouncementsComponentState {\r\n loading: boolean;\r\n person: PersonModel;\r\n customer: Modules.Customers.CustomerModel.Detailed;\r\n announcementInfo: Announcements.State;\r\n registrationInfo: RegistrationModel[];\r\n }\r\n\r\n @Inject('CustomerCardAnnouncementInfoService')\r\n @Component('CustomerService', {\r\n selector: 'customer-announcements',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Announcements/CustomerAnnouncementsComponent/CustomerAnnouncements.html',\r\n bindings: { state: '<' }\r\n })\r\n class CustomerAnnouncementsComponent {\r\n public state: CustomerAnnouncementsComponentState;\r\n\r\n constructor(\r\n private announcementInfoService: CustomerCardAnnouncementInfoService\r\n ) {}\r\n\r\n public loadMore() {\r\n this.announcementInfoService.loadMore();\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\ninterface SignalR {\r\n billHub: Umbrella.CustomerService.CustomerCard.Bills.IBillHubProxy;\r\n}\r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Bills {\r\n export interface IBillHubProxy extends HubProxy {\r\n client: IBillHubClient;\r\n server: IBillHubServer;\r\n }\r\n\r\n export const billHubOnUpdated$ = new Rx.Subject();\r\n\r\n export interface IBillHubClient {\r\n updated(personId: System.Guid);\r\n }\r\n\r\n export interface IBillHubServer {\r\n subscribe(personId: System.Guid);\r\n unsubscribe(personId: System.Guid);\r\n } \r\n\r\n angular\r\n .module('CustomerService')\r\n .factory('BillHub', () => $.connection.billHub);\r\n\r\n Modules.onSignalRInitialized(() => {\r\n $.connection.billHub.client.updated = personId => {\r\n billHubOnUpdated$.onNext(personId);\r\n };\r\n });\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.Bills {\r\n import CustomerCardContractInfoService = Umbrella.CustomerService.CustomerCard.Contracts.CustomerCardContractInfoService;\r\n\r\n @Service('CustomerService', 'BillJitService')\r\n @Inject(\r\n 'CustomerCardStore',\r\n 'BillHub',\r\n 'CustomerCardBillInfoService',\r\n 'CustomerCardContractInfoService'\r\n )\r\n export class BillJitService {\r\n constructor(\r\n store: CustomerCardStore,\r\n private billHub: IBillHubProxy,\r\n private billInfoService: CustomerCardBillInfoService,\r\n private contractInfoService: CustomerCardContractInfoService\r\n ) {\r\n const getPersonId = (s: CustomerCardState) => s && s.personal && s.personal.person && s.personal.person.id;\r\n const isSelected = (s: CustomerCardState, personId: Guid) => getPersonId(s) === personId;\r\n\r\n billHubOnUpdated$\r\n .filter(personId => isSelected(store.getState(), personId))\r\n .debounce(() => Rx.Observable.timer(5000))\r\n .subscribe(_ => this.reload());\r\n\r\n store.state$\r\n .map(getPersonId)\r\n .distinctUntilChanged()\r\n .flatMapLatest(Modules.waitUntilSignalRConnected)\r\n .debounce(() => Rx.Observable.timer(1000))\r\n .subscribe(personId => this.subscribe(personId)); \r\n\r\n store.event$\r\n .where(e => e.type === 'CustomerCardPersonUnloadedEvent')\r\n .subscribe(e => this.unsubscribe(getPersonId(store.getState())));\r\n }\r\n\r\n private subscribe(personId: Guid) {\r\n this.billHub.server.subscribe(personId);\r\n }\r\n\r\n private reload() {\r\n this.billInfoService.reload();\r\n this.contractInfoService.reload(true);\r\n }\r\n\r\n private unsubscribe(personId: Guid) {\r\n this.billHub.server.unsubscribe(personId);\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.Bills {\r\n import BillPaymentModel = Modules.Payments.Billing.BillPaymentModel;\r\n import Detailed = Modules.Payments.Billing.BillModel.Detailed;\r\n\r\n export interface BillResource {\r\n getPagedByContractId(\r\n param: PagedRequestWithIdParams\r\n ): ng.resource.IResource>;\r\n getPagedLinkedToPersonByPersonId(\r\n param: PagedRequestWithIdParams\r\n ): ng.resource.IResource>;\r\n getAllPaymentsByBillId(\r\n param: IdRequestParams\r\n ): ng.resource.IResource;\r\n }\r\n\r\n angular.module('CustomerService').service('BillResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) => {\r\n return $resource(\r\n '/api/v1/bill/:action/:id/:subaction',\r\n {},\r\n {\r\n getPagedByContractId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'bycontract', id: '@id' }\r\n },\r\n getPagedLinkedToPersonByPersonId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'linkedtoperson', id: '@id' }\r\n },\r\n getAllPaymentsByBillId: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { id: '@id', subaction: 'payments' }\r\n }\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard {\r\n import BillModel = Modules.Payments.Billing.BillModel;\r\n import BillModelWithAddress = Modules.Payments.Billing.BillModel.BillModelWithAddress;\r\n import BillResource = Umbrella.CustomerService.CustomerCard.Bills.BillResource;\r\n import IContractResource = Modules.Housing.IContractResource;\r\n import ContractModel = Modules.Housing.ContractModel;\r\n import ContractFilterModel = Umbrella.Modules.Housing.ContractFilterModel;\r\n\r\n interface BillResponseModel {\r\n bills: PagedItemsModel;\r\n hasMultipleContracts: boolean;\r\n }\r\n\r\n @Service('CustomerService', 'CustomerCardBillInfoService')\r\n @Inject('CustomerCardStore', 'BillResource', 'ContractResource')\r\n export class CustomerCardBillInfoService extends BaseStoreService<\r\n CustomerCardState,\r\n CustomerCardEvent,\r\n CustomerCardStore\r\n > {\r\n constructor(\r\n store: CustomerCardStore,\r\n private billResource: BillResource,\r\n private contractResource: IContractResource\r\n ) {\r\n super(store);\r\n }\r\n\r\n public ensureLoaded(pageSize = 20): void {\r\n const state = this.getState();\r\n if (!state.billInfo || !state.billInfo.contracts)\r\n this.loadContractFilters();\r\n\r\n if (!state.billInfo || state.billInfo.contractId)\r\n this.loadBills(0, pageSize, bills => bills);\r\n }\r\n\r\n public loadContractFilters(): void {\r\n const state = this.getState();\r\n if (state.personal && state.personal.person) {\r\n const customerId = state.personal.person.roles['customer'];\r\n if (!customerId) return;\r\n\r\n this.contractResource.getAllFilterValuesByRoleId({id: customerId})\r\n .$promise.then(data => {\r\n this.emit({\r\n type: 'CustomerCardBillsContractFilterLoaded',\r\n contracts: data\r\n });\r\n });\r\n } else {\r\n this.store.state$\r\n .map(x => x && x.personal)\r\n .filter(\r\n personal => !personal.loading && !personal.loadError\r\n )\r\n .take(1)\r\n .subscribe((p: Personal.State) =>\r\n this.contractResource.getAllFilterValuesByRoleId({id: p.person.roles['customer']})\r\n .$promise.then(data => {\r\n this.emit({\r\n type: 'CustomerCardBillsContractFilterLoaded',\r\n contracts: data\r\n });\r\n })\r\n );\r\n }\r\n }\r\n\r\n public reload(): void {\r\n const state = this.store.getState();\r\n if (!state.personal || !state.personal.person) return;\r\n\r\n const pageSize =\r\n state.billInfo && state.billInfo.bills\r\n ? state.billInfo.bills.pageSize\r\n : 20;\r\n this.loadBills(0, pageSize, bills => bills);\r\n }\r\n\r\n public filterByContract(contractId: System.Guid) {\r\n if (\r\n !this.getState().billInfo ||\r\n !this.getState().billInfo.contractId ||\r\n this.getState().billInfo.contractId !== contractId\r\n )\r\n this.filterBills(contractId, 0, 20, bills => bills);\r\n }\r\n\r\n public loadMore(): void {\r\n const state = this.store.getState();\r\n const pagedItems = state.billInfo && state.billInfo.bills;\r\n\r\n if (!state.billInfo.contractId) {\r\n this.loadBills(\r\n pagedItems.page + 1,\r\n pagedItems.pageSize,\r\n bills => ({\r\n items: pagedItems\r\n ? pagedItems.items.concat(bills.items)\r\n : bills.items,\r\n total: bills.total,\r\n page: bills.page,\r\n pageSize: bills.pageSize\r\n })\r\n );\r\n } else {\r\n this.filterBills(\r\n state.billInfo.contractId,\r\n pagedItems.page + 1,\r\n pagedItems.pageSize,\r\n bills => ({\r\n items: pagedItems\r\n ? pagedItems.items.concat(bills.items)\r\n : bills.items,\r\n total: bills.total,\r\n page: bills.page,\r\n pageSize: bills.pageSize\r\n })\r\n );\r\n }\r\n }\r\n\r\n private loadBillsByPerson(\r\n page: number,\r\n pageSize,\r\n personId: System.Guid,\r\n loaded: ((\r\n a: PagedItemsModel\r\n ) => PagedItemsModel)\r\n ) {\r\n this.emit({\r\n type: 'CustomerCardBillsLoadingEvent',\r\n page,\r\n pageSize\r\n });\r\n\r\n this.billResource.getPagedLinkedToPersonByPersonId({\r\n id: personId,\r\n page,\r\n pageSize\r\n }).$promise\r\n .then(\r\n response =>\r\n this.emit({\r\n type: 'CustomerCardBillsLoadedEvent',\r\n bills: loaded(response)\r\n }),\r\n error =>\r\n this.emit({\r\n type: 'CustomerCardBillsLoadErrorEvent',\r\n error\r\n })\r\n );\r\n }\r\n\r\n private loadBills(\r\n page: number,\r\n pageSize,\r\n loaded: ((\r\n a: PagedItemsModel\r\n ) => PagedItemsModel)\r\n ) {\r\n const state = this.getState();\r\n if (state.personal && state.personal.person) {\r\n const personId = state.personal.person.id;\r\n if (!personId) return;\r\n\r\n this.loadBillsByPerson(page, pageSize, personId, loaded);\r\n } else {\r\n this.store.state$\r\n .map(x => x && x.personal)\r\n .filter(\r\n personal => !personal.loading && !personal.loadError\r\n )\r\n .take(1)\r\n .subscribe((p: Personal.State) =>\r\n this.loadBillsByPerson(\r\n page,\r\n pageSize,\r\n p.person.id,\r\n loaded\r\n )\r\n );\r\n }\r\n }\r\n\r\n private async filterBills(\r\n contractId: System.Guid,\r\n page: number,\r\n pageSize,\r\n loaded: ((\r\n a: PagedItemsModel\r\n ) => PagedItemsModel)\r\n ) {\r\n const state = this.getState();\r\n if (\r\n state.personal.person &&\r\n state.personal.person.roles['customer']\r\n ) {\r\n this.emit({\r\n type: 'CustomerCardBillsFilteringEvent',\r\n contractId,\r\n page: 0,\r\n pageSize: 20\r\n });\r\n\r\n const contract = await this.contractResource.getById({\r\n id: contractId\r\n }).$promise;\r\n\r\n this.billResource\r\n .getPagedByContractId({ id: contractId, page, pageSize })\r\n .$promise.then(bills => {\r\n const newBills = {\r\n ...bills,\r\n items: bills.items.map(b => ({\r\n ...b,\r\n fullAddress: contract.unit.fullAddressLine\r\n }))\r\n };\r\n this.emit({\r\n type: 'CustomerCardBillsFilteredEvent',\r\n contractId,\r\n bills: loaded(newBills)\r\n });\r\n })\r\n .catch(e =>\r\n this.emit({\r\n type: 'CustomerCardBillsFilterErrorEvent',\r\n error: e\r\n })\r\n );\r\n } else {\r\n this.store.state$\r\n .map(x => x && x.personal)\r\n .filter(\r\n personal => !personal.loading && !personal.loadError\r\n )\r\n .take(1)\r\n .subscribeOnCompleted(() =>\r\n this.filterBills(contractId, page, pageSize, loaded)\r\n );\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import PaymentStatus = Modules.Payments.PaymentStatus;\r\n\r\n @Pipe('CustomerService', 'paymentStatus')\r\n class PaymentStatusFilter {\r\n public transform(val: PaymentStatus): string {\r\n switch (val) {\r\n case 'New':\r\n case PaymentStatus.New:\r\n case 0:\r\n return 'Nieuwe betaling';\r\n case 'Success':\r\n case PaymentStatus.Success:\r\n case 1:\r\n return 'Betaling ontvangen';\r\n case 'Pending':\r\n case PaymentStatus.Pending:\r\n case 10:\r\n return 'Betaling in afwachting';\r\n case 'Failed':\r\n case PaymentStatus.Failed:\r\n case 90:\r\n return 'Betaling mislukt';\r\n case 'Cancelled':\r\n case PaymentStatus.Cancelled:\r\n case 91:\r\n return 'Betaling afgebroken';\r\n case 'Expired':\r\n case PaymentStatus.Expired:\r\n case 92:\r\n return 'Betaling verlopen';\r\n default:\r\n return '';\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Bills {\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('customerservice.customercard.bills', {\r\n url: '/financieel',\r\n reloadOnSearch: false,\r\n data: {\r\n tab: 'bills',\r\n authorize: ps => ps.customerCard && ps.billRead\r\n },\r\n onEnter: [\r\n '$stateParams',\r\n 'CustomerCardBillInfoService',\r\n 'BillJitService',\r\n 'CustomerCardStore',\r\n (\r\n $stateParams: CardStateParams,\r\n billInfoService: CustomerCardBillInfoService,\r\n billJitService: BillJitService,\r\n customerCardStore: CustomerCardStore\r\n ) => {\r\n billInfoService.ensureLoaded();\r\n }\r\n ],\r\n views: {\r\n 'tab@customerservice': {\r\n template:\r\n '',\r\n controller: Umbrella.createComponentRouteController<\r\n CustomerCardState,\r\n CustomerBillsComponentState\r\n >('CustomerCardStore', s => ({\r\n loading: s.billInfo && s.billInfo.loading &&\r\n (s.registrationInfo &&\r\n s.registrationInfo.loading),\r\n person: s.personal && s.personal.person,\r\n customer:\r\n s && s.customerInfo && s.customerInfo.customer,\r\n billInfo: s.billInfo,\r\n registrationInfo:\r\n s.registrationInfo &&\r\n s.registrationInfo.registrations\r\n }))\r\n },\r\n 'left@customerservice': {\r\n template:\r\n '',\r\n controller: Umbrella.createComponentRouteController<\r\n CustomerCardState,\r\n CustomerBillFiltersComponentState\r\n >('CustomerCardStore', s => ({\r\n person: s.personal.person\r\n }))\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import Detailed = Modules.Payments.Billing.BillModel.Detailed;\r\n\r\n @Component('CustomerService', {\r\n selector: 'bill-timeline',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Bills/BillTimelineComponent/BillTimeline.html',\r\n bindings: {\r\n bills: '<',\r\n loading: '<',\r\n displayAddress: '<',\r\n onLoadMore: '&'\r\n }\r\n })\r\n class BillTimelineComponent {\r\n public bills: PagedItemsModel;\r\n public loading: boolean;\r\n public onLoadMore: () => void;\r\n\r\n public loadMore() {\r\n this.onLoadMore();\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import BillStatus = Umbrella.Modules.Payments.Billing.BillStatus;\r\n\r\n @Pipe('CustomerService', 'isBillStatusInProgress')\r\n class IsBillStatusInProgressFilter {\r\n public transform(status: BillStatus | string | number) {\r\n switch (status) {\r\n case BillStatus.InProgress:\r\n case 'InProgress':\r\n case 1:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import BillModel = Modules.Payments.Billing.BillModel;\r\n import BillPaymentModel = Modules.Payments.Billing.BillPaymentModel;\r\n import BillResource = Umbrella.CustomerService.CustomerCard.Bills.BillResource;\r\n import PaymentStatus = Modules.Payments.PaymentStatus;\r\n\r\n @Component('CustomerService', {\r\n selector: 'bill-timeline-item',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Bills/BillTimelineItemComponent/BillTimelineItem.html',\r\n bindings: {\r\n bill: '<',\r\n displayAddress: '<'\r\n }\r\n })\r\n @Inject('BillResource')\r\n class BillTimelineItemComponent {\r\n public visible: boolean;\r\n public bill: BillModel;\r\n public billPayments: BillPaymentModel[];\r\n\r\n constructor(private billResource: BillResource) {\r\n this.visible = false;\r\n }\r\n\r\n public toggleVisibility() {\r\n this.visible = !this.visible;\r\n\r\n if (!this.billPayments && this.visible) {\r\n this.billResource\r\n .getAllPaymentsByBillId({ id: this.bill.id })\r\n .$promise.then(\r\n results =>\r\n (this.billPayments = results.filter(result =>\r\n this.filterForSuccessStatus(result.status)\r\n ))\r\n );\r\n }\r\n }\r\n\r\n public filterForSuccessStatus(status): any {\r\n switch (status) {\r\n case 'Success':\r\n case PaymentStatus.Success:\r\n case 1:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Bills {\r\n import IContractResource = Modules.Housing.IContractResource;\r\n import ContractFilterModel = Modules.Housing.ContractFilterModel;\r\n import debounce = Umbrella.Helpers.debounce;\r\n\r\n export interface CustomerBillFiltersComponentState {\r\n person: PersonModel;\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'customer-bill-filters',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Bills/CustomerBillFiltersComponent/CustomerBillFilters.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('ContractResource', 'CustomerCardBillInfoService')\r\n class CustomerBillFiltersComponent {\r\n public state: CustomerBillFiltersComponentState;\r\n public displayedContracts: ContractFilterModel[] = [];\r\n public selectedContract: ContractFilterModel;\r\n\r\n constructor(\r\n private contractResource: IContractResource,\r\n private billInfoService: CustomerCardBillInfoService\r\n ) {}\r\n\r\n public $onChanges() {\r\n const customerId =\r\n this.state &&\r\n this.state.person &&\r\n this.state.person.roles['customer'];\r\n const contractsLoaded = this.displayedContracts.length > 0;\r\n if (customerId && !contractsLoaded) this.loadContracts(customerId);\r\n }\r\n\r\n public searchContract = debounce(\r\n (query: string) => {\r\n const customerId = this.getCustomerId();\r\n this.loadContracts(customerId, query);\r\n },\r\n 500,\r\n false\r\n );\r\n\r\n public filterByContract(contract: ContractFilterModel) {\r\n if (contract) this.billInfoService.filterByContract(contract.id);\r\n else this.billInfoService.ensureLoaded(); \r\n }\r\n\r\n private getCustomerId(): System.Guid {\r\n return (\r\n this.state &&\r\n this.state.person &&\r\n this.state.person.roles['customer']\r\n );\r\n }\r\n\r\n private loadContracts(customerId: System.Guid, query?: string): void {\r\n this.contractResource\r\n .getFilterValuesByRoleId({\r\n id: customerId,\r\n page: 0,\r\n pageSize: 255,\r\n searchQuery: query\r\n })\r\n .$promise.then(data => {\r\n this.displayedContracts = data.items;\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Bills {\r\n import Detailed = Umbrella.Modules.Customers.CustomerModel.Detailed;\r\n import RegistrationModel = Umbrella.HousingAllocation.Registrations.Detailed;\r\n\r\n export interface CustomerBillsComponentState {\r\n loading: boolean;\r\n person: PersonModel;\r\n customer: Detailed;\r\n billInfo: Bills.State;\r\n registrationInfo: RegistrationModel[];\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'customer-bills',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Bills/CustomerBillsComponent/CustomerBills.html',\r\n bindings: { state: '<' }\r\n })\r\n @Inject('CustomerCardBillInfoService')\r\n class CustomerBillsComponent {\r\n public state: CustomerBillsComponentState;\r\n\r\n constructor(private billInfoService: CustomerCardBillInfoService) {}\r\n\r\n public loadMore() {\r\n this.billInfoService.loadMore();\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\ninterface SignalR {\r\n contractHub: Umbrella.CustomerService.CustomerCard.Contracts.IContractHubProxy;\r\n}\r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Contracts {\r\n export interface IContractHubProxy extends HubProxy {\r\n client: IContractHubClient;\r\n server: IContractHubServer;\r\n }\r\n\r\n export const contractHubOnContractUpdated$ = new Rx.Subject();\r\n\r\n export interface IContractHubClient {\r\n contractUpdated(contractId: System.Guid);\r\n }\r\n\r\n export interface IContractHubServer {\r\n subscribe(id: System.Guid);\r\n unsubscribe(id: System.Guid);\r\n } \r\n\r\n angular\r\n .module('CustomerService')\r\n .factory('ContractHub', () => $.connection.contractHub);\r\n\r\n Modules.onSignalRInitialized(() => {\r\n $.connection.contractHub.client.contractUpdated = contractId => {\r\n contractHubOnContractUpdated$.onNext(contractId);\r\n };\r\n });\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Contracts {\r\n @Service('CustomerService', 'ContractJitService')\r\n @Inject('CustomerCardStore', 'ContractHub', 'ToastMessageService', 'CustomerCardContractInfoService')\r\n export class ContractJitService {\r\n constructor(\r\n store: CustomerCardStore,\r\n private contractHub: IContractHubProxy,\r\n private toastMessageService: ToastMessageService,\r\n contractInfoService: CustomerCardContractInfoService\r\n ) {\r\n const getPersonId = (s: CustomerCardState) => s && s.personal && s.personal.person && s.personal.person.id;\r\n const containsContractId = (s: CustomerCardState, contractId) => {\r\n if (s && s.contractInfo && s.contractInfo.contracts && s.contractInfo.contracts.items && s.contractInfo.contracts.items) {\r\n return s.contractInfo.contracts.items.some(x => x.id === contractId);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n contractHubOnContractUpdated$\r\n .filter(contractId => containsContractId(store.getState(), contractId))\r\n .subscribe(_ => contractInfoService.reload());\r\n\r\n store.state$\r\n .map(getPersonId)\r\n .distinctUntilChanged()\r\n .flatMapLatest(Modules.waitUntilSignalRConnected)\r\n .debounce(() => Rx.Observable.timer(1000))\r\n .subscribe(personId => this.subscribe(personId));\r\n\r\n store.event$\r\n .where(e => e.type === 'CustomerCardPersonUnloadedEvent')\r\n .subscribe(_ => this.unsubscribe(getPersonId(store.getState())));\r\n }\r\n\r\n private subscribe(personId: Guid) {\r\n if (personId) {\r\n this.contractHub.server.subscribe(personId);\r\n }\r\n }\r\n\r\n private unsubscribe(personId: Guid) {\r\n this.contractHub.server.unsubscribe(personId);\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.Contracts {\r\n import IContractResource = Modules.Housing.IContractResource;\r\n import ContractModel = Modules.Housing.ContractModel;\r\n import RoleModel = Modules.RoleModel;\r\n import OutstandingBalanceModel = Modules.Housing.OutstandingBalanceModel;\r\n\r\n @Service('CustomerService', 'CustomerCardContractInfoService')\r\n @Inject('CustomerCardStore', 'ContractResource')\r\n export class CustomerCardContractInfoService extends BaseStoreService<\r\n CustomerCardState,\r\n CustomerCardEvent,\r\n CustomerCardStore\r\n > {\r\n constructor(store: CustomerCardStore, private contractResource: IContractResource) {\r\n super(store);\r\n\r\n const personLoaded = (x: CustomerCardState) => x && x.personal && x.personal.person;\r\n store.state$\r\n .map(personLoaded)\r\n .distinctUntilChanged()\r\n .subscribe(person => {\r\n this.loadOutstandingBalance(person);\r\n this.loadActiveAssociatedContractors(person);\r\n });\r\n }\r\n\r\n public ensureLoaded(pageSize = 5, force = false): void {\r\n const state = this.getState();\r\n if (!state.contractInfo || force || state.contractInfo.selectedContract)\r\n this.loadContracts(0, pageSize, force, contracts => contracts);\r\n }\r\n\r\n public reload(skipReloadOfAssociatedContractors = false): void {\r\n const state = this.store.getState();\r\n if (!state.personal || !state.personal.person) return;\r\n\r\n const pageSize =\r\n state.contractInfo && state.contractInfo.contracts ? state.contractInfo.contracts.pageSize : 5;\r\n this.loadContracts(0, pageSize, true, contracts => contracts);\r\n\r\n this.loadOutstandingBalance(state.personal.person);\r\n\r\n if (!skipReloadOfAssociatedContractors) this.loadActiveAssociatedContractors(state.personal.person);\r\n }\r\n\r\n public filterByContract(contractId: System.Guid) {\r\n const state = this.getState();\r\n\r\n if (contractId === null) {\r\n this.resetContractFiltering();\r\n return;\r\n }\r\n\r\n if (\r\n state.contractInfo &&\r\n (!state.contractInfo.selectedContract || state.contractInfo.selectedContract !== contractId)\r\n )\r\n this.loadContract(contractId);\r\n }\r\n\r\n public resetContractFiltering(): void {\r\n this.emit({\r\n type: 'CustomerCardContractsFilteredEvent',\r\n contract: null\r\n });\r\n }\r\n\r\n public loadMore(): void {\r\n const state = this.store.getState();\r\n const pagedItems = state.contractInfo && state.contractInfo.contracts;\r\n\r\n this.loadContracts(pagedItems.page + 1, pagedItems.pageSize, false, contracts => ({\r\n items: pagedItems ? pagedItems.items.concat(contracts.items) : contracts.items,\r\n total: contracts.total,\r\n page: contracts.page,\r\n pageSize: contracts.pageSize\r\n }));\r\n }\r\n\r\n private loadContractsByCustomer(\r\n page: number,\r\n size: number,\r\n customerId: System.Guid,\r\n loaded: (a: PagedItemsModel) => PagedItemsModel\r\n ) {\r\n this.emit({\r\n type: 'CustomerCardContractsLoadingEvent',\r\n page,\r\n pageSize: size\r\n });\r\n\r\n this.contractResource\r\n .getPagedByRoleId({ id: customerId, page, pageSize: size })\r\n .$promise.then(contracts => {\r\n const newContracts = loaded(contracts);\r\n this.emit({\r\n type: 'CustomerCardContractsLoadedEvent',\r\n contracts: newContracts\r\n });\r\n })\r\n .catch(e =>\r\n this.emit({\r\n type: 'CustomerCardContractsLoadErrorEvent',\r\n error: e\r\n })\r\n );\r\n }\r\n\r\n private loadContracts(\r\n page: number,\r\n size: number,\r\n force: boolean,\r\n loaded: (a: PagedItemsModel) => PagedItemsModel\r\n ) {\r\n const state = this.getState();\r\n\r\n if (!force) {\r\n if (\r\n state.contractInfo &&\r\n (state.contractInfo.loading ||\r\n (state.contractInfo.contracts &&\r\n state.contractInfo.contracts.page === page &&\r\n state.contractInfo.contracts &&\r\n state.contractInfo.contracts.pageSize === size))\r\n )\r\n return;\r\n }\r\n\r\n if (state.personal && state.personal.person) {\r\n const customerId = state.personal.person.roles['customer'];\r\n if (!customerId) return;\r\n\r\n this.loadContractsByCustomer(page, size, customerId, loaded);\r\n } else {\r\n this.store.state$\r\n .map(x => x && x.personal)\r\n .filter(personal => !personal.loading && !personal.loadError)\r\n .take(1)\r\n .subscribe((p: Personal.State) =>\r\n this.loadContractsByCustomer(page, size, p.person.roles['customer'], loaded)\r\n );\r\n }\r\n }\r\n\r\n private loadContract(contractId: System.Guid) {\r\n const state = this.getState();\r\n if (state.personal.person && state.personal.person.roles['customer']) {\r\n this.emit({ type: 'CustomerCardContractsFilteringEvent' });\r\n\r\n this.contractResource\r\n .getById({ id: contractId })\r\n .$promise.then(contract => {\r\n this.emit({\r\n type: 'CustomerCardContractsFilteredEvent',\r\n contract\r\n });\r\n })\r\n .catch(e =>\r\n this.emit({\r\n type: 'CustomerCardContractsFilterErrorEvent',\r\n error: e\r\n })\r\n );\r\n } else {\r\n this.store.state$\r\n .map(x => x && x.personal)\r\n .filter(personal => !personal.loading && !personal.loadError)\r\n .take(1)\r\n .subscribeOnCompleted(() => this.loadContract(contractId));\r\n }\r\n }\r\n\r\n private async loadActiveAssociatedContractors(person: PersonModel): Promise {\r\n const customerId = person && person.roles['customer'];\r\n if (!customerId) return;\r\n\r\n const contractors = await this.contractResource.getActiveAssociatedContractors({ id: customerId }).$promise;\r\n if (!contractors) return;\r\n\r\n const orderedList = [\r\n ...contractors.filter(x => x.person.id === person.id),\r\n ...contractors.filter(x => x.person.id !== person.id)\r\n ];\r\n\r\n this.emit({\r\n type: 'CustomerCardContractorsLoadedEvent',\r\n contractors: orderedList\r\n });\r\n }\r\n\r\n private loadOutstandingBalance(person: PersonModel): void {\r\n const customerId = person && person.roles['customer'];\r\n\r\n if (!window.user || !window.user.permissions || !window.user.permissions.billRead) return;\r\n if (!customerId) return;\r\n\r\n this.contractResource\r\n .getOutstandingBalanceFor({ id: customerId })\r\n .$promise.then((balance: OutstandingBalanceModel) => {\r\n this.emit({\r\n type: 'CustomerCardOutstandingBalanceLoadedEvent',\r\n outstandingBalance: balance\r\n });\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Contracts {\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('customerservice.customercard.contracts', {\r\n url: '/contracten',\r\n reloadOnSearch: false,\r\n data: {\r\n tab: 'contracts',\r\n authorize: ps => ps.customerCard && ps.contractRead\r\n },\r\n views: {\r\n 'tab@customerservice': {\r\n template: '',\r\n controller: Umbrella.createComponentRouteController<\r\n CustomerCardState,\r\n CustomerContractsComponentState\r\n >('CustomerCardStore', s => ({\r\n person: s.personal && s.personal.person,\r\n registrationInfo: s.registrationInfo && s.registrationInfo.registrations,\r\n contracts: s.contractInfo && s.contractInfo.contracts,\r\n selectedContract: s.contractInfo && s.contractInfo.selectedContract,\r\n customer: s && s.customerInfo && s.customerInfo.customer,\r\n loading: (s.personal && s.personal.loading && s.registrationInfo &&\r\n s.registrationInfo.loading) || !s.contractInfo || s.contractInfo.loading\r\n }))\r\n },\r\n 'left@customerservice': {\r\n template: '',\r\n controller: Umbrella.createComponentRouteController<\r\n CustomerCardState,\r\n CustomerContractFiltersComponentState\r\n >('CustomerCardStore', s => ({\r\n person: s.personal.person\r\n }))\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.Housing {\r\n import ContractModel = Modules.Housing.ContractModel;\r\n\r\n @Component('CustomerService', {\r\n selector: 'contract-timeline',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Contracts/ContractTimelineComponent/ContractTimeline.html',\r\n bindings: {\r\n contracts: '<',\r\n person: '<',\r\n loading: '<',\r\n onLoadMore: '&'\r\n }\r\n })\r\n export class ContractTimelineComponent {\r\n public contracts: PagedItemsModel;\r\n public person: PersonModel;\r\n public loading: boolean;\r\n public onLoadMore: () => void;\r\n\r\n public loadMore() {\r\n this.onLoadMore();\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Contracts {\r\n import ContractModel = Modules.Housing.ContractModel;\r\n import SessionColleagueModel = Modules.Colleagues.SessionColleagueModel;\r\n\r\n @Component('CustomerService', {\r\n selector: 'contract-timeline-item',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Contracts/ContractTimelineItemComponent/ContractTimelineItem.html',\r\n bindings: {\r\n person: '<',\r\n contract: '<'\r\n }\r\n })\r\n @Inject('$state')\r\n class ContractTimelineItemComponent {\r\n public contract: ContractModel;\r\n public person: PersonModel;\r\n public currentYear: number;\r\n public user: SessionColleagueModel;\r\n public displayCustomerInsteadOfAddress: boolean;\r\n private toggleStatus: boolean;\r\n\r\n constructor(private $state: ng.ui.IStateService) {\r\n this.user = window.user;\r\n this.toggleStatus = this.contract && this.contract.endDate && new Date(this.contract.endDate) < new Date();\r\n }\r\n\r\n public $onInit() {\r\n this.displayCustomerInsteadOfAddress = this.isOnUnitCard() && this.contractHasCustomers();\r\n this.currentYear = new Date().getFullYear();\r\n }\r\n\r\n public toggleContract() {\r\n this.toggleStatus = !this.toggleStatus;\r\n }\r\n\r\n public getFirstPersonId(): System.Guid {\r\n if (!this.contractHasCustomers()) return null;\r\n\r\n const customer = this.contract.customers[0];\r\n return customer.personId;\r\n }\r\n\r\n public contractHasCustomers(): boolean {\r\n return this.contract && this.contract.customers && this.contract.customers.length > 0;\r\n }\r\n\r\n public isOnUnitCard(): boolean {\r\n return this.$state.current.name.indexOf('unit') > -1;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.Contracts {\r\n import IContractResource = Modules.Housing.IContractResource;\r\n import ContractFilterModel = Modules.Housing.ContractFilterModel;\r\n import debounce = Umbrella.Helpers.debounce;\r\n\r\n export interface CustomerContractFiltersComponentState {\r\n person: PersonModel;\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'customer-contract-filters',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Contracts/CustomerContractFiltersComponent/CustomerContractFilters.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('ContractResource', 'CustomerCardContractInfoService')\r\n class CustomerContractFiltersComponent {\r\n public state: CustomerContractFiltersComponentState;\r\n public displayedContracts: ContractFilterModel[] = [];\r\n public selectedContract: ContractFilterModel;\r\n\r\n constructor(\r\n private contractResource: IContractResource,\r\n private contractInfoService: CustomerCardContractInfoService\r\n ) {}\r\n\r\n public $onChanges() {\r\n const customerId = this.getCustomerId();\r\n const contractsLoaded = this.displayedContracts.length > 0;\r\n if (customerId && !contractsLoaded) this.loadContracts(customerId);\r\n }\r\n\r\n public searchContract = debounce(\r\n (query: string) => {\r\n const customerId = this.getCustomerId();\r\n this.loadContracts(customerId, query);\r\n },\r\n 500,\r\n false\r\n );\r\n\r\n public filterByContract(contract: ContractFilterModel) {\r\n this.contractInfoService.filterByContract(contract && contract.id);\r\n }\r\n\r\n private getCustomerId(): System.Guid {\r\n return (\r\n this.state &&\r\n this.state.person &&\r\n this.state.person.roles['customer']\r\n );\r\n }\r\n\r\n private loadContracts(customerId: System.Guid, query?: string): void {\r\n this.contractResource\r\n .getFilterValuesByRoleId({\r\n id: customerId,\r\n page: 0,\r\n pageSize: 255,\r\n searchQuery: query\r\n })\r\n .$promise.then(data => {\r\n this.displayedContracts = data.items;\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Contracts {\r\n import ContractModel = Modules.Housing.ContractModel;\r\n import SelfServiceScenarioResource = Umbrella.CustomerService.SelfServiceScenarioResource;\r\n import RegistrationModel = Umbrella.HousingAllocation.Registrations.Detailed;\r\n\r\n export interface CustomerContractsStateParams {\r\n page: number;\r\n size: number;\r\n personId: System.Guid;\r\n }\r\n\r\n export interface CustomerContractsComponentState {\r\n person: PersonModel;\r\n contracts: PagedItemsModel;\r\n selectedContract: ContractModel;\r\n customer: Modules.Customers.CustomerModel.Detailed;\r\n loading: boolean;\r\n registrationInfo: RegistrationModel[];\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'customer-contracts',\r\n bindings: { state: '<' },\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Contracts/CustomerContractsComponent/CustomerContracts.html'\r\n })\r\n @Inject(\r\n '$stateParams',\r\n 'SelfServiceScenarioResource',\r\n 'CustomerCardContractInfoService'\r\n )\r\n class CustomerContractsComponent {\r\n public state: CustomerContractsComponentState;\r\n public changePaymentMethodSssIsActive: boolean;\r\n public contracts: PagedItemsModel;\r\n\r\n constructor(\r\n private $stateParams: CustomerContractsStateParams,\r\n private selfServiceScenarioResource: SelfServiceScenarioResource,\r\n private contractInfoService: CustomerCardContractInfoService\r\n ) {}\r\n\r\n public $onChanges() {\r\n const contracts =\r\n this.state &&\r\n this.state.contracts &&\r\n this.state.contracts.items;\r\n this.contracts =\r\n this.state && this.state.selectedContract\r\n ? {\r\n page: 0,\r\n pageSize: 1,\r\n total: 1,\r\n items: [this.state.selectedContract]\r\n }\r\n : this.state.contracts;\r\n }\r\n\r\n private cbStartSelfServiceScenario: (T: any) => void;\r\n\r\n public loadMore(page: number) {\r\n this.contractInfoService.loadMore();\r\n }\r\n\r\n private checkChangePaymentMethodIsActive() {\r\n this.selfServiceScenarioResource\r\n .getByName({ id: 'ChangePaymentMethod' })\r\n .$promise.then(\r\n () => (this.changePaymentMethodSssIsActive = true)\r\n );\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import IResource = ng.resource.IResource;\r\n\r\n export interface PagedRequestWithIdAndCategoryParams extends PagedRequestWithIdParams {\r\n category?: string;\r\n sortDesc: boolean;\r\n }\r\n\r\n export interface CustomerSatifactionScoreGetModel {\r\n id: Guid;\r\n personId: Guid;\r\n createdOn: Date;\r\n externalReportUrl: string;\r\n category: string;\r\n score: number;\r\n }\r\n\r\n export interface CustomerSatisfactionCategoryGetModel {\r\n category: string;\r\n count: number;\r\n }\r\n\r\n export interface ICustomerSatisfactionResource {\r\n getById(params: IdRequestParams): IResource;\r\n getByPersonId(\r\n params: PagedRequestWithIdAndCategoryParams\r\n ): IResource>;\r\n getCategoriesForPersonId(params: IdRequestParams): IResource;\r\n }\r\n\r\n angular.module('CustomerService').service('CustomerSatisfactionResource', [\r\n '$resource',\r\n $resource =>\r\n $resource(\r\n '/api/v1/customersatisfaction/scores/:action/:id',\r\n {},\r\n {\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n getByPersonId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id', action: 'byPerson' }\r\n },\r\n getCategoriesForPersonId: {\r\n url: '/api/v1/customersatisfaction/scores/categories/byPerson/:id',\r\n method: 'GET',\r\n isArray: true,\r\n params: { id: '@id' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.CustomerSatisfaction {\r\n @Pipe('CustomerService', 'satisfactionScoreColor')\r\n class SatisfactionScoreColorFilter {\r\n public transform(score: number): string {\r\n if (score >= 7) {\r\n return '#4caf50';\r\n } else if (score >= 4) {\r\n return '#fda12a';\r\n } else if (score >= 0) {\r\n return '#f55753';\r\n }\r\n\r\n return '#caceca';\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n interface IScope extends ng.IScope {\r\n chartConfiguration: Chart.ChartConfiguration;\r\n }\r\n\r\n angular.module('Umbrella').directive('umbrellaChart', () => {\r\n function generateChart(element: ng.IAugmentedJQuery, configuration: Chart.ChartConfiguration): Chart {\r\n if (!configuration) return null;\r\n\r\n const canvas = angular.element(document.createElement('canvas'));\r\n element.append(canvas);\r\n const ctx = (canvas[0]).getContext('2d');\r\n\r\n return new Chart(ctx, configuration);\r\n }\r\n function updateChart(chart: Chart, configuration: Chart.ChartConfiguration): void {\r\n if (!configuration) return;\r\n\r\n chart.config = configuration;\r\n chart.update();\r\n }\r\n return {\r\n scope: {\r\n chartConfiguration: '<'\r\n },\r\n link(scope: IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes) {\r\n let chart: Chart;\r\n\r\n scope.$watch('chartConfiguration', (newValue, oldValue) => {\r\n if (chart) {\r\n updateChart(chart, scope.chartConfiguration);\r\n } else {\r\n chart = generateChart(element, scope.chartConfiguration) || chart;\r\n }\r\n });\r\n }\r\n };\r\n });\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.CustomerSatisfaction {\r\n import PermissionsModel = Umbrella.PermissionsModel;\r\n\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) =>\r\n $stateProvider.state('customerservice.customercard.customersatisfaction', {\r\n url: '/klantscore',\r\n reloadOnSearch: false,\r\n data: {\r\n tab: 'Customer satisfaction',\r\n authorize: (ps: PermissionsModel) => ps.customerSatisfactionRead\r\n },\r\n views: {\r\n 'tab@customerservice': {\r\n template: '',\r\n controller: createComponentRouteController<\r\n CustomerCardState,\r\n CustomerSatisfactionComponentState\r\n >('CustomerCardStore', s => ({\r\n person: s && s.personal && s.personal.person,\r\n loading: s && s.personal && s.personal.loading && s.registrationInfo && s.registrationInfo.loading,\r\n customer: s && s.customerInfo && s.customerInfo.customer,\r\n registrationInfo: s.registrationInfo && s.registrationInfo.registrations,\r\n }))\r\n }\r\n }\r\n })\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.CustomerSatisfaction {\r\n import CustomerSatisfactionCategoryGetModel = Umbrella.CustomerService.CustomerSatisfactionCategoryGetModel;\r\n import RegistrationModel = Umbrella.HousingAllocation.Registrations.Detailed;\r\n\r\n export interface CustomerSatisfactionComponentState {\r\n person: PersonModel;\r\n loading: boolean;\r\n registrationInfo: RegistrationModel[];\r\n customer: Umbrella.Modules.Customers.CustomerModel.Detailed;\r\n }\r\n\r\n @Inject('CustomerSatisfactionResource')\r\n @Component('CustomerService', {\r\n selector: 'customer-satisfaction',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_CustomerSatisfaction/CustomerSatisfactionComponent/CustomerSatisfactionComponent.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n class CustomerSatisfactionComponent {\r\n public state: CustomerSatisfactionComponentState;\r\n public scoreCategories: CustomerSatisfactionCategoryGetModel[];\r\n private initiated = false;\r\n\r\n constructor(private customerSatisfactionResource: ICustomerSatisfactionResource) {}\r\n\r\n $onChanges() {\r\n if (this.initiated || !this.state || !this.state.person) return;\r\n\r\n this.customerSatisfactionResource\r\n .getCategoriesForPersonId({ id: this.state.person.id })\r\n .$promise.then(categories => {\r\n this.scoreCategories = categories;\r\n this.initiated = true;\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.CustomerSatisfaction {\r\n import CustomerSatifactionScoreGetModel = Umbrella.CustomerService.CustomerSatifactionScoreGetModel;\r\n import CustomerSatisfactionCategoryGetModel = Umbrella.CustomerService.CustomerSatisfactionCategoryGetModel;\r\n import PagedRequestWithIdAndCategoryParams = Umbrella.CustomerService.PagedRequestWithIdAndCategoryParams;\r\n\r\n export interface ChartData {\r\n title: string;\r\n xAxis: string[];\r\n yAxis: number[];\r\n }\r\n\r\n @Inject('CustomerSatisfactionResource', '$filter', '$scope')\r\n @Component('CustomerService', {\r\n selector: 'customer-satisfaction-section',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_CustomerSatisfaction/CustomerSatisfactionSectionComponent/CustomerSatisfactionSectionComponent.html',\r\n bindings: {\r\n personId: '<',\r\n category: '<'\r\n }\r\n })\r\n class CustomerSatisfactionSectionComponent {\r\n public category: CustomerSatisfactionCategoryGetModel;\r\n public scores: PagedItemsModel;\r\n public chartConfiguration: Chart.ChartConfiguration;\r\n public isLoading = false;\r\n private personId: Guid;\r\n\r\n constructor(\r\n private customerSatisfactionResource: ICustomerSatisfactionResource,\r\n private $filter: ng.IFilterService,\r\n private $scope: ng.IScope\r\n ) {}\r\n\r\n $onInit() {\r\n this.load();\r\n }\r\n\r\n public loadMore() {\r\n this.load(++this.scores.page);\r\n }\r\n\r\n private load(page = 0, pageSize = 4) {\r\n if (!this.personId) return;\r\n\r\n if (page === 0) this.isLoading = true;\r\n\r\n const request: PagedRequestWithIdAndCategoryParams = { id: this.personId, page, pageSize, sortDesc: false };\r\n if (this.category) request.category = this.category.category;\r\n\r\n this.customerSatisfactionResource\r\n .getByPersonId(request)\r\n .$promise.then(scores => {\r\n if (scores.items.length < 1) return;\r\n\r\n const items =\r\n this.scores && this.scores.items\r\n ? (this.scores.items = [...this.scores.items, ...scores.items])\r\n : scores.items;\r\n this.scores = {\r\n ...scores,\r\n items\r\n };\r\n const chartData = this.generateChartData(scores.items);\r\n this.chartConfiguration = this.generateChartConfiguration(chartData);\r\n\r\n setTimeout(() => {\r\n this.$scope.$emit('ScrollToBottomCommand');\r\n }, 50);\r\n })\r\n .finally(() => {\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n private generateChartData(scores: CustomerSatifactionScoreGetModel[]): ChartData {\r\n const chartData = {\r\n xAxis: [],\r\n yAxis: [],\r\n title: this.category ? this.category.category : ''\r\n };\r\n\r\n if (!scores) return chartData;\r\n\r\n const dateFilter = this.$filter('date');\r\n\r\n for (const score of this.scores.items) {\r\n const date = dateFilter(score.createdOn, 'd-yyyy');\r\n chartData.xAxis.push(date);\r\n chartData.yAxis.push(score.score);\r\n }\r\n\r\n return chartData;\r\n }\r\n\r\n private generateChartConfiguration(chartData: ChartData): Chart.ChartConfiguration {\r\n return {\r\n type: 'line',\r\n data: {\r\n labels: chartData.xAxis,\r\n datasets: [\r\n {\r\n label: chartData.title,\r\n data: chartData.yAxis,\r\n fill: false,\r\n borderColor: ['rgb(76, 175, 80)']\r\n }\r\n ]\r\n },\r\n options: {\r\n animation: {\r\n duration: 200\r\n },\r\n legend: {\r\n display: false\r\n },\r\n responsive: true,\r\n scales: {\r\n yAxes: [\r\n {\r\n ticks: {\r\n beginAtZero: false,\r\n padding: 15,\r\n min: 0,\r\n max: 10\r\n },\r\n gridLines: {\r\n display: false\r\n }\r\n }\r\n ],\r\n xAxes: [\r\n {\r\n ticks: {\r\n padding: 15\r\n },\r\n gridLines: {\r\n display: false\r\n }\r\n }\r\n ]\r\n },\r\n elements: {\r\n line: {\r\n tension: 0\r\n },\r\n point: {\r\n radius: 5,\r\n hoverRadius: 5,\r\n backgroundColor: 'rgb(255, 255, 255)',\r\n borderWidth: 3,\r\n hoverBorderWidth: 4\r\n }\r\n }\r\n }\r\n };\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.CustomerSatisfaction {\r\n @Component('CustomerService', {\r\n selector: 'customer-score-created-timeline-item',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_CustomerSatisfaction/CustomerScoreCreatedTimelineItemComponent/CustomerScoreCreatedTimelineItem.html',\r\n bindings: {\r\n customerSatisfactionId: '<'\r\n }\r\n })\r\n @Inject('CustomerSatisfactionResource')\r\n class CustomerScoreCreatedTimelineItemComponent {\r\n private customerSatisfactionId: System.Guid;\r\n\r\n public customerSatisfactionModel: CustomerSatifactionScoreGetModel;\r\n\r\n constructor(private customerSatisfactionResource: ICustomerSatisfactionResource) {\r\n }\r\n\r\n public $onInit() {\r\n this.customerSatisfactionResource.getById({ id: this.customerSatisfactionId })\r\n .$promise\r\n .then((model) => this.customerSatisfactionModel = model);\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Impersonation {\r\n import ChannelType = Modules.ChannelType;\r\n\r\n export interface ImpersonationWindowState {\r\n personId: System.Guid;\r\n scenarioId: System.Guid;\r\n caseId?: System.Guid;\r\n caseFlowId?: System.Guid;\r\n channel: ChannelType;\r\n }\r\n\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('customerservice.customercard.impersonation', {\r\n url: '/impersonation/:scenarioId?caseId&caseFlowId',\r\n reloadOnSearch: false,\r\n views: {\r\n 'tab@customerservice': {\r\n template:\r\n '',\r\n controller: createComponentRouteController<\r\n CustomerCardState,\r\n ImpersonationWindowState\r\n >('CustomerCardStore', s => ({\r\n personId:\r\n s.personal &&\r\n s.personal.person &&\r\n s.personal.person.id,\r\n scenarioId:\r\n s &&\r\n s.activityRegistrationInfo &&\r\n s.activityRegistrationInfo.selectedScenario &&\r\n s.activityRegistrationInfo.selectedScenario.id,\r\n channel:\r\n (s &&\r\n s.activityRegistrationInfo &&\r\n s.activityRegistrationInfo\r\n .selectedChannelType) ||\r\n ChannelType.Unknown\r\n }))\r\n }\r\n },\r\n onEnter: [\r\n 'ImpersonationService',\r\n '$stateParams',\r\n (\r\n impersonationService: ImpersonationService,\r\n $stateParams: ImpersonationWindowState\r\n ) => {\r\n const stateParamsSet = !!(\r\n $stateParams.personId &&\r\n $stateParams.scenarioId &&\r\n $stateParams.channel.toString()\r\n );\r\n\r\n if (stateParamsSet)\r\n impersonationService.updateImpersonationState(\r\n $stateParams.scenarioId,\r\n $stateParams.personId,\r\n $stateParams.caseFlowId\r\n );\r\n }\r\n ],\r\n onExit: [\r\n 'ImpersonationService',\r\n (impersonationService: ImpersonationService) => {\r\n impersonationService.leave();\r\n }\r\n ]\r\n });\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard.Impersonation {\r\n import SelfServiceScenarioResource = Umbrella.CustomerService.SelfServiceScenarioResource;\r\n import ImpersonationService = CustomerService.CustomerCard.ImpersonationService;\r\n import ImpersonationResponseModel = Modules.SelfService.ImpersonationResponseModel;\r\n\r\n @Component('CustomerService', {\r\n selector: 'impersonation-window',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Impersonation/ImpersonationWindowComponent/ImpersonationWindow.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('SelfServiceScenarioResource', 'ImpersonationService', '$stateParams')\r\n export class ImpersonationWindowComponent {\r\n public state: ImpersonationWindowState;\r\n\r\n constructor(\r\n private selfServiceScenarioResource: SelfServiceScenarioResource,\r\n private impersonationService: ImpersonationService,\r\n private $stateParams: ImpersonationWindowState\r\n ) {}\r\n\r\n public $onInit() {\r\n const scenarioId = this.$stateParams.scenarioId || this.state.scenarioId;\r\n const personId = this.state.personId || this.$stateParams.personId;\r\n const channelType = this.$stateParams.channel || this.state.channel;\r\n const caseId = this.$stateParams.caseId || this.state.caseId;\r\n\r\n this.selfServiceScenarioResource\r\n .impersonate({\r\n id: scenarioId,\r\n personId,\r\n channelType: channelType.toString(),\r\n caseId\r\n })\r\n .$promise.then(response => this.startImpersonationSession(response));\r\n }\r\n\r\n private startImpersonationSession(response: ImpersonationResponseModel) {\r\n const selfServiceForm = document.getElementById('selfServiceIFrameForm');\r\n\r\n if (selfServiceForm) {\r\n this.impersonationService.setPortalUrl(new URL(response.url.toString()).origin);\r\n selfServiceForm.action = response.url.toString();\r\n selfServiceForm.data.value = response.packet;\r\n selfServiceForm.submit();\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard {\r\n import GetAddressModel = Umbrella.Modules.GetAddressModel;\r\n\r\n export interface AddressParams {\r\n zipCode: string;\r\n houseNumber: number;\r\n houseNumberSuffix: string;\r\n }\r\n\r\n export interface AddressResource {\r\n get(params: AddressParams): ng.resource.IResource;\r\n }\r\n\r\n angular.module('CustomerService').service('AddressResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/address/:action',\r\n {},\r\n {\r\n get: {\r\n method: 'GET',\r\n action: '',\r\n isArray: true,\r\n params: { action: 'find' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","namespace Umbrella.CustomerService.CustomerCard {\r\n import AgentFacetService = Umbrella.Modules.AgentFacetService;\r\n\r\n interface ExtendedPersonModel extends PersonModel {\r\n birthDate: Date;\r\n }\r\n\r\n export abstract class EditCustomerDataComponent {\r\n public person: PersonModel;\r\n public writableFields: WritablePersonDataFieldsModel;\r\n public personSynchronizedObjects: SynchronizedObjectModel[];\r\n public personClone: ExtendedPersonModel;\r\n public editMode: boolean;\r\n protected updating: boolean;\r\n\r\n protected constructor(\r\n protected agentFacetService: AgentFacetService,\r\n protected toastMessageService: ToastMessageService,\r\n protected personInfoService: CustomerCardPersonInfoService\r\n ) { }\r\n\r\n public $onInit() {\r\n this.clonePerson();\r\n }\r\n\r\n public hasUpdateableContactFields(): boolean {\r\n return (\r\n this.isAuthorizedToUpdateField(PersonFieldTypes.PhoneNumber) ||\r\n this.isAuthorizedToUpdateField(PersonFieldTypes.EmailAddress)\r\n );\r\n }\r\n\r\n public allowsMultipleTypesOfTheSameTelephoneNumber(): boolean {\r\n return (\r\n this.writableFields &&\r\n this.writableFields.capabilities &&\r\n this.writableFields.capabilities.multipleEqualPhoneTypesAllowed\r\n );\r\n }\r\n\r\n public isAuthorizedToUpdateField(fieldType: PersonFieldTypes): boolean {\r\n const fieldName = PersonFieldTypes[fieldType.toString()];\r\n const isFieldFoundInWritableFieldCollection =\r\n this.writableFields &&\r\n this.writableFields.fields &&\r\n !!this.writableFields.fields.find(x => x === fieldName);\r\n return isFieldFoundInWritableFieldCollection && this.hasPermissionToUpdateField(fieldType);\r\n }\r\n\r\n public isFieldUpdateable(field: string): boolean {\r\n return this.editMode && this.isAuthorizedToUpdateField(PersonFieldTypes[field]);\r\n }\r\n\r\n public isPhoneNumberUpdateable(): boolean {\r\n return this.editMode && this.isAuthorizedToUpdateField(PersonFieldTypes.PhoneNumber);\r\n }\r\n\r\n public isPhoneTypeUpdateable(): boolean {\r\n return this.editMode && this.isAuthorizedToUpdateField(PersonFieldTypes.PhoneType);\r\n }\r\n\r\n public isPhoneTypeViewable(): boolean {\r\n return this.isAuthorizedToUpdateField(PersonFieldTypes.PhoneType);\r\n }\r\n\r\n public isEmailAddressUpdateable(): boolean {\r\n return this.editMode && this.isAuthorizedToUpdateField(PersonFieldTypes.EmailAddress);\r\n }\r\n\r\n public isAllowedPhoneType(phoneType: string): boolean {\r\n return (this.writableFields.capabilities.allowedPhoneTypes.indexOf(phoneType) > -1);\r\n }\r\n\r\n private hasPermissionToUpdateField(fieldName: PersonFieldTypes): boolean {\r\n switch (fieldName) {\r\n case Umbrella.PersonFieldTypes.BirthDate:\r\n return window.user.permissions.updateBirthDate;\r\n case Umbrella.PersonFieldTypes.EmailAddress:\r\n return window.user.permissions.updateContactEmailAddresses;\r\n case Umbrella.PersonFieldTypes.PhoneNumber:\r\n return window.user.permissions.updateContactPhoneNumbers;\r\n case Umbrella.PersonFieldTypes.Gender:\r\n return window.user.permissions.updateGender;\r\n case Umbrella.PersonFieldTypes.PostalAddress:\r\n return window.user.permissions.updateContactPostalAddress;\r\n default:\r\n return window.user.permissions.customerWrite;\r\n }\r\n }\r\n\r\n public enterEditMode() {\r\n this.clonePerson();\r\n this.editMode = true;\r\n }\r\n\r\n public saveAndLeaveEditMode() {\r\n if (this.updating) return;\r\n\r\n this.updating = true;\r\n\r\n this.person = this.personClone;\r\n\r\n const nrOfAddresses = (this.person && this.person.contactDetails.addresses.length) || 0;\r\n for (let count = 0; count < nrOfAddresses; count++)\r\n this.person.contactDetails.addresses[count].houseNumber =\r\n this.person.contactDetails.addresses[count].houseNumber || 0;\r\n\r\n this.personInfoService\r\n .update(this.person)\r\n .then(() => {\r\n this.editMode = false;\r\n this.toastMessageService.success('Wijzigingen zijn succesvol opgeslagen.');\r\n })\r\n .catch(() => {\r\n this.toastMessageService.error('Fout opgetreden bij het opslaan van de wijzigingen.');\r\n })\r\n .finally(() => (this.updating = false));\r\n }\r\n\r\n public cancelAndLeaveEditMode(): void {\r\n this.clonePerson();\r\n this.editMode = false;\r\n }\r\n\r\n public clonePerson(): void {\r\n this.personClone = JSON.parse(JSON.stringify(this.person));\r\n if (this.personClone.birthDate) {\r\n this.personClone.birthDate = this.fixTheDate(\r\n new Date(Date.parse(this.personClone.birthDate.toString()))\r\n );\r\n }\r\n }\r\n\r\n private fixTheDate(date: Date) {\r\n const minutes = date.getMinutes();\r\n const hours = date.getHours();\r\n const day = date.getDate();\r\n const month = date.getMonth();\r\n const year = date.getFullYear();\r\n\r\n return new Date(Date.UTC(year, month, day, hours, minutes));\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Personal {\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) =>\r\n $stateProvider.state('customerservice.customercard.personal', {\r\n url: '/gegevens',\r\n reloadOnSearch: false,\r\n data: { tab: 'personal', authorize: ps => ps.customerCard },\r\n views: {\r\n 'tab@customerservice': {\r\n template: '',\r\n controller: createComponentRouteController(\r\n 'CustomerCardStore',\r\n s => ({\r\n person: s.personal && s.personal.person,\r\n writableFields: s.personal && s.personal.fields,\r\n personIsDeletable: s.personal && s.personal.personIsDeletable,\r\n loading:\r\n s.personal &&\r\n s.personal.loading &&\r\n s.registrationInfo &&\r\n s.registrationInfo.loading,\r\n customer: s && s.customerInfo && s.customerInfo.customer,\r\n registrationInfo: s.registrationInfo && s.registrationInfo.registrations,\r\n })\r\n )\r\n }\r\n }\r\n })\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard {\r\n @Component('CustomerService', {\r\n selector: 'account-info',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Personal/AccountInfoComponent/AccountInfo.html',\r\n bindings: {\r\n person: '<'\r\n }\r\n })\r\n @Inject('ToastMessageService')\r\n class AccountInfoComponent {\r\n public person: PersonModel;\r\n\r\n constructor(private toastMessageService: ToastMessageService) {}\r\n\r\n public accountCreated(): void {\r\n this.toastMessageService.success('Account succesvol aangemaakt');\r\n }\r\n\r\n public accountCreationFailed(): void {\r\n this.toastMessageService.error(\r\n 'Aanmaken account mislukt, mogelijk omdat het e-mail adres niet beschikbaar is.'\r\n );\r\n }\r\n\r\n public accountRecovered(): void {\r\n this.toastMessageService.success(\r\n 'Accountherstel gestart. Verificatie e-mail wordt verstuurd.'\r\n );\r\n }\r\n\r\n public accountRecoverFailed(): void {\r\n this.toastMessageService.success(\r\n 'Accountherstel mislukt, mogelijk omdat het e-mail adres al is gekoppeld aan een ander account.'\r\n );\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Personal {\r\n import AgentFacetService = Modules.AgentFacetService;\r\n import EditCustomerDataComponent = Umbrella.CustomerService.CustomerCard.EditCustomerDataComponent;\r\n\r\n @Component('CustomerService', {\r\n selector: 'customer-characteristics',\r\n bindings: {\r\n person: '<',\r\n writableFields: '<'\r\n },\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Personal/CustomerCharacteristicsComponent/CustomerCharacteristics.html'\r\n })\r\n @Inject('AgentFacetService', 'ToastMessageService', 'CustomerCardPersonInfoService')\r\n class CustomerCharacteristicsComponent extends EditCustomerDataComponent {\r\n public person: PersonModel;\r\n\r\n constructor(\r\n protected agentFacetService: AgentFacetService,\r\n protected toastMessageService: ToastMessageService,\r\n protected personInfoService: CustomerCardPersonInfoService\r\n ) {\r\n super(agentFacetService, toastMessageService, personInfoService);\r\n }\r\n\r\n public canEdit(fieldName: PersonFieldTypes): boolean {\r\n return this.writableFields.fields.indexOf(fieldName) !== -1;\r\n }\r\n\r\n public saveAndLeaveEditMode() {\r\n if (this.updating || !this.hasPermissions()) return;\r\n\r\n this.updating = true;\r\n\r\n this.person = this.personClone;\r\n\r\n const nrOfAddresses = (this.person && this.person.contactDetails.addresses.length) || 0;\r\n for (let count = 0; count < nrOfAddresses; count++)\r\n this.person.contactDetails.addresses[count].houseNumber =\r\n this.person.contactDetails.addresses[count].houseNumber || 0;\r\n\r\n this.personInfoService\r\n .updateCharacteristics(this.person)\r\n .then(() => {\r\n this.editMode = false;\r\n\r\n this.toastMessageService.success('Wijzigingen zijn succesvol opgeslagen.');\r\n })\r\n .catch(() => {\r\n this.toastMessageService.error('Fout opgetreden bij het opslaan van de wijzigingen.');\r\n })\r\n .finally(() => (this.updating = false));\r\n }\r\n\r\n private hasPermissions(): boolean {\r\n return !!window.user.permissions.customerManagement;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules {\r\n export interface IAgentFacetService {\r\n isJitUpdateEnabled(): boolean;\r\n isErpFieldUpdateable(field: string): boolean;\r\n }\r\n\r\n @Service('Umbrella', 'AgentFacetService')\r\n export class AgentFacetService implements IAgentFacetService {\r\n public isJitUpdateEnabled(): boolean {\r\n return this.erpAvailable() && this.getErpFacetConfiguration().isJitUpdateEnabled;\r\n }\r\n\r\n public hasUpdateableCompanyFields(): boolean {\r\n return this.isErpFieldUpdateable('companyName') || this.isErpFieldUpdateable('postalAddress');\r\n }\r\n\r\n public hasUpdateableRegistrationFields(): boolean {\r\n return this.isErpFieldUpdateable('grossIncome') || this.isErpFieldUpdateable('numberOfPeople');\r\n }\r\n\r\n public isErpFieldUpdateable(field: string): boolean {\r\n if (!this.isAuthorizedToUpdateField(field)) return false;\r\n if (this.isInDebugMode() || !this.erpRegistered()) return true;\r\n if (!this.erpAvailable()) return false;\r\n\r\n const erp = this.getErpFacetConfiguration();\r\n return erp && erp.updateableRoleFields && erp.updateableRoleFields[field];\r\n }\r\n\r\n private isAuthorizedToUpdateField(fieldName: string): boolean {\r\n switch (fieldName) {\r\n case 'postalAddress':\r\n return window.user.permissions.updateContactPostalAddress;\r\n case 'phoneNumber':\r\n return window.user.permissions.updateContactPhoneNumbers;\r\n case 'phoneNumber2':\r\n return window.user.permissions.updateContactPhoneNumbers;\r\n case 'email':\r\n return window.user.permissions.updateContactEmailAddresses;\r\n case 'personBirthDate':\r\n return window.user.permissions.updateBirthDate;\r\n case 'personGender':\r\n return window.user.permissions.updateGender;\r\n case 'grossIncome':\r\n return window.user.permissions.registrationWrite;\r\n case 'numberOfPeople':\r\n return window.user.permissions.registrationWrite;\r\n default:\r\n return window.user.permissions.customerWrite;\r\n }\r\n }\r\n\r\n private erpRegistered(): boolean {\r\n const erp = this.getErpFacetConfiguration();\r\n return erp !== null && erp != undefined;\r\n }\r\n\r\n private erpAvailable(): boolean {\r\n const erp = this.getErpFacetConfiguration();\r\n return erp && erp.available;\r\n }\r\n\r\n private getErpFacetConfiguration(): any {\r\n return window.config && window.config.facets && window.config.facets.erp && window.config.facets.erp[0];\r\n }\r\n\r\n private isInDebugMode(): boolean {\r\n return window.config.configuration === 'DEBUG';\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard {\r\n import AgentFacetService = Modules.AgentFacetService;\r\n import CustomerModel = Umbrella.Modules.Customers.CustomerModel;\r\n import AddressModel = Umbrella.Modules.AddressModel;\r\n\r\n @Component('CustomerService', {\r\n selector: 'customer-company-data',\r\n templateUrl: '/CustomerService/_CustomerCard/_Personal/CustomerCompanyDataComponent/CustomerCompanyData.html',\r\n bindings: {\r\n person: '<',\r\n customer: '<',\r\n writableFields: '<'\r\n }\r\n })\r\n @Inject('AgentFacetService', 'ToastMessageService', 'CustomerCardPersonInfoService')\r\n class CustomerCompanyDataComponent extends EditCustomerDataComponent {\r\n public user = window.user;\r\n public customer: CustomerModel;\r\n\r\n constructor(\r\n protected agentFacetService: AgentFacetService,\r\n toastMessageService: ToastMessageService,\r\n personInfoService: CustomerCardPersonInfoService\r\n ) {\r\n super(agentFacetService, toastMessageService, personInfoService);\r\n }\r\n\r\n public hasUpdateableCompanyFields(): boolean {\r\n return this.agentFacetService.hasUpdateableCompanyFields();\r\n }\r\n\r\n public showCountry(address: AddressModel): Boolean {\r\n return (\r\n address.country && address.country.toLowerCase() != 'nederland' && address.country.toLowerCase() != 'nl'\r\n );\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Accounts {\r\n import Resource = ng.resource.IResource;\r\n import AccountModel = Umbrella.Accounts.AccountModel;\r\n\r\n interface AccountRequestParams {\r\n id?: string;\r\n action?: string;\r\n subaction?: string;\r\n }\r\n\r\n export interface EmailRequestParam {\r\n email: string;\r\n }\r\n\r\n export interface AccountResource\r\n extends ng.resource.IResourceClass> {\r\n getByPersonId(\r\n params: IdRequestParams\r\n ): Resource;\r\n getPaged(\r\n params: ResourceSearchParams\r\n ): Resource>;\r\n block(\r\n params: IdRequestParams\r\n ): Resource;\r\n unblock(\r\n params: IdRequestParams\r\n ): Resource;\r\n startRecovery(params: EmailRequestParam): Resource<{}>;\r\n createAccounts(): Resource<{}>;\r\n getBlockedAccounts(\r\n params: PagedRequestParams\r\n ): Resource>;\r\n deleteAccount(params: IdRequestParams);\r\n }\r\n\r\n class AccountResourceBuilder {\r\n static $inject = ['$resource'];\r\n\r\n constructor(public $resource: ng.resource.IResourceService) {}\r\n\r\n getAccountResource(): AccountResource {\r\n return this.$resource(\r\n '/api/v1/account/:action/:id/:subaction',\r\n {},\r\n {\r\n getByPersonId: this.getResource('GET', false, {\r\n id: '@id'\r\n }),\r\n getPaged: this.getResource('GET', false, {\r\n action: 'paged'\r\n }),\r\n block: this.getResource('PUT', false, {\r\n action: 'block',\r\n id: '@id'\r\n }),\r\n unblock: this.getResource('PUT', false, {\r\n action: 'unblock',\r\n id: '@id'\r\n }),\r\n startRecovery: this.getResource('POST', false, {\r\n action: 'recover', subaction: 'start' }),\r\n createAccounts: this.getResource('POST', false, {\r\n action: 'provision'\r\n }),\r\n getBlockedAccounts: this.getResource('GET', false, {\r\n action: 'blocked'\r\n }),\r\n deleteAccount: this.getResource('DELETE', false, {\r\n id: '@id'\r\n })\r\n }\r\n );\r\n }\r\n\r\n private getResource(\r\n method: string,\r\n isArray: boolean,\r\n params?: AccountRequestParams,\r\n headers?: any\r\n ): ng.resource.IActionDescriptor {\r\n return { method, isArray, params, headers };\r\n }\r\n }\r\n\r\n angular\r\n .module('Umbrella')\r\n .service('AccountResource', [\r\n '$resource',\r\n ($resource: any) =>\r\n new AccountResourceBuilder($resource).getAccountResource()\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Accounts {\r\n import AccountModel = Umbrella.Accounts.AccountModel;\r\n\r\n @Service('Umbrella', 'AccountService')\r\n @Inject('$q', 'AccountResource', '$http')\r\n export class AccountService {\r\n constructor(\r\n private $q: ng.IQService,\r\n private accountResource: AccountResource,\r\n private $http: ng.IHttpService\r\n ) {}\r\n\r\n get(personId: System.Guid): ng.IPromise {\r\n return this.accountResource.getByPersonId({ id: personId })\r\n .$promise;\r\n }\r\n\r\n create(\r\n personId: System.Guid,\r\n email: string\r\n ): ng.IHttpPromise {\r\n if (!this.canCreate()) throw new Error('Cannot create account');\r\n\r\n return this.$http({\r\n url: '/api/v1/account/' + personId,\r\n method: 'POST',\r\n params: { username: email }\r\n });\r\n }\r\n\r\n delete(personId: System.Guid): ng.IPromise<{}> {\r\n return this.accountResource.deleteAccount({ id: personId })\r\n .$promise;\r\n }\r\n\r\n startRecovery(email: string): ng.IPromise<{}> {\r\n if (!this.canRecover()) throw new Error('Cannot reject');\r\n\r\n const task = this.$q.defer();\r\n this.accountResource\r\n .startRecovery({ email })\r\n .$promise.then(\r\n () => task.resolve(),\r\n error => task.reject(error)\r\n );\r\n\r\n return task.promise;\r\n }\r\n\r\n canCreate(): boolean {\r\n return (\r\n window.config.modules.accounts.enabled &&\r\n window.user.permissions.accountCreate\r\n );\r\n }\r\n\r\n canRecover(): boolean {\r\n return (\r\n window.config.modules.accounts.enabled &&\r\n window.user.permissions.accountRecover\r\n );\r\n }\r\n\r\n isActive(account: AccountModel): boolean {\r\n return account && account.isActivated;\r\n }\r\n\r\n isInactive(account: AccountModel): boolean {\r\n return account && !account.isActivated && !account.isBlocked;\r\n }\r\n\r\n isRecoverable(account: AccountModel): boolean {\r\n return this.canRecover() && this.isActive(account);\r\n }\r\n\r\n block(\r\n personId: System.Guid\r\n ): ng.IPromise {\r\n return this.accountResource.block({ id: personId }).$promise;\r\n }\r\n\r\n unblock(\r\n personId: System.Guid\r\n ): ng.IPromise {\r\n return this.accountResource.unblock({ id: personId }).$promise;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import AgentFacetService = Modules.AgentFacetService;\r\n import EditCustomerDataComponent = Umbrella.CustomerService.CustomerCard.EditCustomerDataComponent;\r\n import AccountService = Modules.Accounts.AccountService;\r\n import AccountModel = Accounts.AccountModel;\r\n import CustomerCardPersonInfoService = CustomerService.CustomerCard.CustomerCardPersonInfoService;\r\n\r\n interface PhoneType {\r\n name: string;\r\n value: string;\r\n }\r\n @Component('CustomerService', {\r\n selector: 'customer-contact-data',\r\n templateUrl: '/CustomerService/_CustomerCard/_Personal/CustomerContactDataComponent/CustomerContactData.html',\r\n bindings: {\r\n person: '<',\r\n writableFields: '<'\r\n }\r\n })\r\n @Inject('AgentFacetService', 'ToastMessageService', 'CustomerCardPersonInfoService', 'AccountService')\r\n class CustomerContactDataComponent extends EditCustomerDataComponent {\r\n public person: PersonModel;\r\n private account: AccountModel.Activation;\r\n public selectedValue: string;\r\n public phoneTypes: PhoneType[] = [\r\n { name: 'Thuis', value: 'Home' },\r\n { name: 'Mobiel', value: 'Mobile' },\r\n { name: 'Werk', value: 'Work' },\r\n { name: 'Bij geen gehoor', value: 'WhenBusy' },\r\n { name: 'Onbekend', value: 'Unknown' }\r\n ];\r\n\r\n constructor(\r\n protected agentFacetService: AgentFacetService,\r\n toastMessageService: ToastMessageService,\r\n personInfoService: CustomerCardPersonInfoService,\r\n private accountService: AccountService\r\n ) {\r\n super(agentFacetService, toastMessageService, personInfoService);\r\n }\r\n\r\n public $onChanges = (bindings: { person: IBindingChange }) => {\r\n if (bindings.person && bindings.person.currentValue) {\r\n this.clonePerson(); //necessary to update normalized phone field (PhoneModel.Number) after a modification\r\n if (this.person.roles['customer'] || this.person.roles['prospect']) {\r\n this.accountService.get(this.person.id).then(account => (this.account = account));\r\n }\r\n }\r\n };\r\n\r\n public phoneNumberContainsText(phoneNr: string) {\r\n return !/([^0-9- +()]+)([^0-9 ]{6,10})/.test(phoneNr);\r\n }\r\n public getSelectedValue(value: string) {\r\n return this.phoneTypes.find(x => x.name == value).value || Umbrella.Modules.Telephony.PhoneType.Unknown;\r\n }\r\n public extractTextFromPhoneNumber(phoneNr: string) {\r\n const regex = /([0-9- +()]+)([0-9 ]{6,10})(.*)/;\r\n const groups = phoneNr.match(regex);\r\n\r\n if (!groups || groups.length < 4) {\r\n return '';\r\n } else {\r\n return groups[3];\r\n }\r\n }\r\n\r\n public isLinkedToAccount(email: string): boolean {\r\n if (!this.account || !email) return false;\r\n\r\n return this.account.isActivated && this.account.email === email;\r\n }\r\n\r\n public saveAndLeaveEditMode() {\r\n if (!this.validatePhoneType()) return;\r\n\r\n return super.saveAndLeaveEditMode();\r\n }\r\n\r\n private onlyUnique(value, index, self): boolean {\r\n return self.indexOf(value) === index;\r\n }\r\n\r\n private validatePhoneType(): boolean {\r\n if (this.isPhoneTypeUpdateable()) {\r\n const phoneTypes = [];\r\n if (this.personClone.contactDetails && this.personClone.contactDetails.phoneNumbers) {\r\n this.personClone.contactDetails.phoneNumbers.forEach(x => {\r\n if (x.original.length > 0) {\r\n phoneTypes.push(x.type);\r\n } else {\r\n x.type = Umbrella.Modules.Telephony.PhoneType.Unknown;\r\n }\r\n });\r\n\r\n if (\r\n phoneTypes.some(type => !this.isAllowedPhoneType(type))\r\n ) {\r\n this.toastMessageService.error('Een niet ondersteund telefoontype geselecteerd.');\r\n return false;\r\n }\r\n\r\n if (\r\n !this.allowsMultipleTypesOfTheSameTelephoneNumber() &&\r\n phoneTypes.length !== phoneTypes.filter(this.onlyUnique).length\r\n ) {\r\n this.toastMessageService.error('Niet mogelijk om meerdere dezelfde telefoontypes op te slaan.');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n return true;\r\n }\r\n return true;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Personal {\r\n import RegistrationModel = Umbrella.HousingAllocation.Registrations.Detailed;\r\n\r\n export interface CustomerDetailsComponentState {\r\n person: PersonModel;\r\n writableFields: WritablePersonDataFieldsModel;\r\n loading: boolean;\r\n customer: Umbrella.Modules.Customers.CustomerModel.Detailed;\r\n registrationInfo: RegistrationModel[];\r\n personIsDeletable: boolean;\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'customer-details',\r\n bindings: { state: '<' },\r\n templateUrl: '/CustomerService/_CustomerCard/_Personal/CustomerDetailsComponent/CustomerDetails.html'\r\n })\r\n class CustomerDetailsComponent {\r\n public state: CustomerDetailsComponentState;\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import AgentFacetService = Modules.AgentFacetService;\r\n import EditCustomerDataComponent = Umbrella.CustomerService.CustomerCard.EditCustomerDataComponent;\r\n import CustomerCardPersonInfoService = CustomerService.CustomerCard.CustomerCardPersonInfoService;\r\n import NotificationPersonalPreferencesResource = Umbrella.CustomerService.CustomerCard.NotificationPersonalPreferencesResource;\r\n import PersonalPreferencesModel = Umbrella.Notifications.Preferences.PersonalPreferencesModel;\r\n\r\n @Component('CustomerService', {\r\n selector: 'customer-notification-settings',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Personal/CustomerNotificationSettingsComponent/CustomerNotificationSettings.html',\r\n bindings: {\r\n person: '<'\r\n }\r\n })\r\n @Inject(\r\n 'NotificationPersonalPreferencesResource',\r\n 'AgentFacetService',\r\n 'ToastMessageService',\r\n 'CustomerCardPersonInfoService'\r\n )\r\n class CustomerNotificationSettingsComponent extends EditCustomerDataComponent {\r\n public person: PersonModel;\r\n public personalPreferences: PersonalPreferencesModel;\r\n\r\n constructor(\r\n private notificationPersonalPreferencesResource: NotificationPersonalPreferencesResource,\r\n protected agentFacetService: AgentFacetService,\r\n protected toastMessageService: ToastMessageService,\r\n protected personInfoService: CustomerCardPersonInfoService\r\n ) {\r\n super(agentFacetService, toastMessageService, personInfoService);\r\n }\r\n\r\n public $onInit() {\r\n this.notificationPersonalPreferencesResource.get({ id: this.person.id }).$promise.then(prefences => {\r\n this.personalPreferences = prefences;\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard {\r\n import PersonalPreferencesModel = Umbrella.Notifications.Preferences.PersonalPreferencesModel;\r\n\r\n export interface PersonalPreferenceParams {\r\n id: System.Guid;\r\n }\r\n\r\n export interface NotificationPersonalPreferencesResource {\r\n get(params: PersonalPreferenceParams): ng.resource.IResource;\r\n }\r\n\r\n angular.module('CustomerService').service('NotificationPersonalPreferencesResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/notifications/preferences/:action/:id',\r\n {},\r\n {\r\n get: {\r\n method: 'GET',\r\n action: '',\r\n isArray: false,\r\n params: { action: '', id: '@id' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard {\r\n import AgentFacetService = Umbrella.Modules.AgentFacetService;\r\n import CustomerModel = Umbrella.Modules.Customers.CustomerModel;\r\n import AddressModel = Umbrella.Modules.AddressModel;\r\n\r\n @Component('CustomerService', {\r\n selector: 'customer-personal-data',\r\n templateUrl: '/CustomerService/_CustomerCard/_Personal/CustomerPersonalDataComponent/CustomerPersonalData.html',\r\n bindings: {\r\n person: '<',\r\n customer: '<',\r\n personIsDeletable: '<',\r\n writableFields: '<'\r\n }\r\n })\r\n @Inject(\r\n '$state',\r\n 'AgentFacetService',\r\n 'ToastMessageService',\r\n 'CustomerCardPersonInfoService',\r\n '$mdDialog',\r\n 'AddressResource'\r\n )\r\n class CustomerPersonalDataComponent extends EditCustomerDataComponent {\r\n public user = window.user;\r\n public customer: CustomerModel;\r\n public addressLoading: boolean;\r\n public addressError: boolean;\r\n public yesterday: Date;\r\n public personIsDeletable: boolean;\r\n\r\n constructor(\r\n private $state: ng.ui.IStateService,\r\n agentFacetService: AgentFacetService,\r\n toastMessageService: ToastMessageService,\r\n personInfoService: CustomerCardPersonInfoService,\r\n private $mdDialog,\r\n private addressService: AddressResource\r\n ) {\r\n super(agentFacetService, toastMessageService, personInfoService);\r\n }\r\n\r\n public $onInit() {\r\n this.yesterday = new Date().addDays(-1);\r\n }\r\n\r\n public $onChanges(changes: { person: IBindingChange }) {\r\n this.clonePerson();\r\n }\r\n\r\n public static isAddressRequired(address: AddressModel): boolean {\r\n return !!(address.zipCode || address.houseNumber || address.street || address.city);\r\n }\r\n\r\n public getAddress(address: AddressModel) {\r\n const isFacetAvailable =\r\n window.config &&\r\n window.config.facets &&\r\n window.config.facets.geography &&\r\n window.config.facets.geography[0] &&\r\n window.config.facets.geography[0].available;\r\n\r\n if (!isFacetAvailable) return;\r\n if (!address.zipCode || address.zipCode.length < 5 || address.houseNumber <= 0) return;\r\n\r\n this.addressLoading = true;\r\n this.addressError = false;\r\n\r\n this.addressService\r\n .get({\r\n zipCode: address.zipCode,\r\n houseNumber: address.houseNumber,\r\n houseNumberSuffix: address.houseNumberExtension\r\n })\r\n .$promise.then((data: Umbrella.Modules.GetAddressModel[]) => {\r\n this.addressError = false;\r\n\r\n if (data.length === 0) {\r\n address.street = '';\r\n address.city = '';\r\n } else {\r\n const firstAddress = data[0];\r\n\r\n address.street = firstAddress.street;\r\n address.city = firstAddress.city;\r\n }\r\n })\r\n .catch(() => {\r\n this.addressError = true;\r\n\r\n address.street = '';\r\n address.city = '';\r\n })\r\n .finally(() => {\r\n this.addressLoading = false;\r\n });\r\n }\r\n\r\n public showCountry(address: AddressModel): Boolean {\r\n return (\r\n address.country && address.country.toLowerCase() != 'nederland' && address.country.toLowerCase() != 'nl'\r\n );\r\n }\r\n\r\n public hasUpdateablePersonFields(): boolean {\r\n return (\r\n this.isAuthorizedToUpdateField(PersonFieldTypes.Initials) ||\r\n this.isAuthorizedToUpdateField(PersonFieldTypes.FirstName) ||\r\n this.isAuthorizedToUpdateField(PersonFieldTypes.Insertion) ||\r\n this.isAuthorizedToUpdateField(PersonFieldTypes.LastName) ||\r\n this.isAuthorizedToUpdateField(PersonFieldTypes.BirthDate) ||\r\n this.isAuthorizedToUpdateField(PersonFieldTypes.Gender) ||\r\n this.isAuthorizedToUpdateField(PersonFieldTypes.PostalAddress)\r\n );\r\n }\r\n\r\n public deletePerson(): void {\r\n const dialog = this.$mdDialog\r\n .confirm()\r\n .title(`Relatie verwijderen`)\r\n .htmlContent(`Weet je zeker dat je deze relatie wilt verwijderen?`)\r\n .ok('Verwijderen')\r\n .cancel('Annuleren');\r\n\r\n this.$mdDialog.show(dialog).then(_ =>\r\n this.personInfoService\r\n .delete(this.person.id)\r\n .then(() => {\r\n this.toastMessageService.info(`Relatie succesvol verwijderd`);\r\n this.$state.go('dashboard.tasks');\r\n })\r\n .catch(e => {\r\n this.toastMessageService.error(`Relatie kan niet verwijderd worden. Probeer het nogmaals.`);\r\n })\r\n );\r\n }\r\n }\r\n}\r\n","import UpdateRegistrationModel = Umbrella.HousingAllocation.Registrations.UpdateRegistrationModel;\r\nnamespace Umbrella.CustomerService.CustomerCard {\r\n @Service('CustomerService', 'CustomerCardRegistrationInfoService')\r\n @Inject('CustomerCardStore', 'RegistrationsResource')\r\n export class CustomerCardRegistrationInfoService extends BaseStoreService<\r\n CustomerCardState,\r\n CustomerCardEvent,\r\n CustomerCardStore\r\n > {\r\n constructor(\r\n store: CustomerCardStore,\r\n private registrationsResource: Registrations.RegistrationsResource\r\n ) {\r\n super(store);\r\n }\r\n\r\n public ensureLoaded(personId?:Guid): void {\r\n const state = this.getState();\r\n if (!state.registrationInfo && this.isHousingAllocationAvailable()) this.loadRegistrations(personId);\r\n }\r\n\r\n public update(model: UpdateRegistrationModel) {\r\n const state = this.getState();\r\n\r\n model.personId = state.personal.person.id;\r\n const action = this.registrationsResource\r\n .update(model);\r\n\r\n return action.$promise;\r\n }\r\n\r\n public delete(registrationId:Guid) {\r\n const state = this.getState();\r\n const action = this.registrationsResource\r\n .delete(registrationId);\r\n\r\n return action.$promise;\r\n }\r\n\r\n public reload() {\r\n this.loadRegistrations();\r\n }\r\n\r\n private loadRegistrations(personId?:Guid) {\r\n const state = this.getState();\r\n const id = personId || state.personal.person;\r\n if (id) {\r\n this.emit({ type: 'CustomerCardRegistrationsLoadingEvent' });\r\n\r\n this.registrationsResource\r\n .getDetailedRegistrationsByPerson({\r\n id\r\n })\r\n .$promise.then(reg =>\r\n this.emit({\r\n type: 'CustomerCardRegistrationsLoadedEvent',\r\n registrations: reg\r\n })\r\n )\r\n .catch(e => {\r\n if (e.status === 404)\r\n this.emit({\r\n type: 'CustomerCardRegistrationsLoadedEvent',\r\n registrations: []\r\n });\r\n else\r\n this.emit({\r\n type: 'CustomerCardRegistrationsLoadErrorEvent',\r\n error: e\r\n });\r\n });\r\n } else {\r\n this.store.state$\r\n .map(x => x && x.personal)\r\n .filter(\r\n personal => !personal.loading && !personal.loadError\r\n )\r\n .take(1)\r\n .subscribeOnCompleted(() => this.loadRegistrations());\r\n }\r\n }\r\n\r\n private isHousingAllocationAvailable = () =>\r\n window.config &&\r\n window.config.facets &&\r\n window.config.facets.housingAllocation &&\r\n window.config.facets.housingAllocation[0] &&\r\n window.config.facets.housingAllocation[0].available;\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Registrations {\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('customerservice.customercard.registrations', {\r\n url: '/registraties',\r\n reloadOnSearch: false,\r\n data: {\r\n tab: 'registraties',\r\n authorize: ps => ps.customerCard && ps.registrationRead\r\n },\r\n views: {\r\n 'tab@customerservice': {\r\n template:\r\n '',\r\n controller: Umbrella.createComponentRouteController<\r\n CustomerCardState,\r\n ProspectRegistrationsComponentState\r\n >('CustomerCardStore', s => ({\r\n person: s.personal && s.personal.person,\r\n loading:\r\n (s.personal && s.personal.loading) ||\r\n (s.registrationInfo &&\r\n s.registrationInfo.loading),\r\n customer:\r\n s && s.customerInfo && s.customerInfo.customer,\r\n registrations:\r\n s.registrationInfo &&\r\n s.registrationInfo.registrations\r\n }))\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Registrations {\r\n import RegistrationModel = Umbrella.HousingAllocation.Registrations.Detailed;\r\n\r\n export interface ProspectRegistrationsStateParams {\r\n personId: System.Guid;\r\n }\r\n\r\n export interface ProspectRegistrationsComponentState {\r\n person: PersonModel;\r\n loading: boolean;\r\n registrations: RegistrationModel[];\r\n customer: Modules.Customers.CustomerModel.Detailed;\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'prospect-registrations',\r\n bindings: { state: '<' },\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Registrations/ProspectRegistrationsComponent/ProspectRegistrations.html'\r\n })\r\n class ProspectRegistrationsComponent {\r\n public state: ProspectRegistrationsComponentState;\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import RegistrationModel = Umbrella.HousingAllocation.Registrations.Detailed;\r\n\r\n @Component('CustomerService', {\r\n selector: 'registration-timeline',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Registrations/RegistrationTimelineComponent/RegistrationTimeline.html',\r\n bindings: {\r\n registrations: '<',\r\n loading: '<'\r\n }\r\n })\r\n class RegistrationTimelineComponent {\r\n public registrations: RegistrationModel[];\r\n public loading: boolean;\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.CustomerCard.Registrations {\r\n import RegistrationModel = Umbrella.HousingAllocation.Registrations.Detailed;\r\n import Activity = Umbrella.HousingAllocation.Registration.RegistrationActivityModel;\r\n import ActivityType = Umbrella.HousingAllocation.Registration.RegistrationActivityModelType;\r\n import OptionStatus = Umbrella.HousingAllocation.Propositions.PropositionOptionStatus;\r\n import RegistrationType = Umbrella.HousingAllocation.Registrations.RegistrationType;\r\n import AgentFacetService = Umbrella.Modules.AgentFacetService;\r\n\r\n @Component('CustomerService', {\r\n selector: 'registration-timeline-item',\r\n templateUrl:\r\n '/CustomerService/_CustomerCard/_Registrations/RegistrationTimelineItemComponent/RegistrationTimelineItem.html',\r\n bindings: {\r\n registration: '<'\r\n }\r\n })\r\n @Inject(\r\n 'AgentFacetService',\r\n 'CustomerCardRegistrationInfoService',\r\n 'ToastMessageService'\r\n )\r\n class RegistrationTimelineItemComponent {\r\n public showDetails: boolean;\r\n public showActivities: boolean;\r\n public user = window.user;\r\n public registration: RegistrationModel;\r\n public registrationClone: RegistrationModel;\r\n public activities: Activity[];\r\n private editMode: boolean;\r\n private updating: boolean;\r\n\r\n constructor(\r\n private agentFacetService: AgentFacetService, \r\n private customerCardRegistrationInfoService: CustomerCardRegistrationInfoService,\r\n private toastMessageService: ToastMessageService\r\n ) {\r\n this.showDetails = false;\r\n this.showActivities = false;\r\n }\r\n\r\n public $onChanges(changes: {\r\n registration: IBindingChange;\r\n }) {\r\n if (changes.registration.currentValue) {\r\n this.activities = this.getActivities();\r\n }\r\n }\r\n\r\n public getRegistrationType(\r\n type:\r\n | RegistrationType\r\n | number\r\n | string\r\n ): string {\r\n switch (type) {\r\n case RegistrationType.Housing:\r\n case \"Housing\":\r\n case 1:\r\n return \"Woning\";\r\n case RegistrationType.Garage:\r\n case \"Garage\":\r\n case 2:\r\n return \"Garage\";\r\n case RegistrationType.Parking:\r\n case \"Parking\":\r\n case 3:\r\n return \"Parkeergelegenheid\";\r\n }\r\n\r\n return type.toString();\r\n }\r\n\r\n public hasUpdateableRegistrationFields(): boolean {\r\n return this.agentFacetService.hasUpdateableRegistrationFields();\r\n }\r\n public enterEditMode() {\r\n this.cloneRegistration();\r\n this.editMode = true;\r\n }\r\n public cancelAndLeaveEditMode(): void {\r\n this.registrationClone = null;\r\n this.editMode = false;\r\n }\r\n public fieldEditable(fieldName: string): boolean {\r\n return this.editMode && this.agentFacetService.isErpFieldUpdateable(fieldName);\r\n }\r\n\r\n public saveAndLeaveEditMode() {\r\n if (this.updating) return;\r\n\r\n this.updating = true;\r\n this.registration = this.registrationClone;\r\n const updateRegistrationModel = { \r\n id: this.registrationClone.id, \r\n personId: null, \r\n grossIncome: this.registrationClone.grossIncome, \r\n numberOfChildren: this.registrationClone.numberOfChildren, \r\n numberOfPeople: this.registrationClone.numberOfPeople\r\n }\r\n\r\n this.customerCardRegistrationInfoService\r\n .update(updateRegistrationModel)\r\n .then(() => {\r\n\r\n this.editMode = false;\r\n this.toastMessageService.success(\r\n 'Wijzigingen zijn succesvol opgeslagen.'\r\n );\r\n })\r\n .catch(() => {\r\n this.toastMessageService.error(\r\n 'Fout opgetreden bij het opslaan van de wijzigingen.'\r\n );\r\n })\r\n .finally(() => (this.updating = false));\r\n }\r\n public delete() {\r\n if (this.registration.registrationNumber != '') {\r\n this.toastMessageService.error(\r\n 'Inschrijving met een registratienummer kan niet worden verwijderd');\r\n return;\r\n }\r\n this.customerCardRegistrationInfoService\r\n .delete({ id: this.registration.id })\r\n .then(() => {\r\n this.toastMessageService.success(\r\n 'Inschrijving is verwijderd.'\r\n );\r\n this.customerCardRegistrationInfoService.reload();\r\n })\r\n .catch(() => {\r\n this.toastMessageService.error(\r\n 'Fout opgetreden bij het verwijderen van de inschrijving.'\r\n );\r\n });\r\n }\r\n\r\n public cloneRegistration(): void {\r\n this.registrationClone = JSON.parse(JSON.stringify(this.registration));\r\n }\r\n public toggleDetails() {\r\n this.showDetails = !this.showDetails;\r\n }\r\n\r\n public toggleActivities() {\r\n this.showActivities = !this.showActivities;\r\n }\r\n\r\n public getActivityType(activity: Activity): string {\r\n return activity.type.toString();\r\n }\r\n\r\n private getOptionStatus(status: OptionStatus | number): string {\r\n return status.toString();\r\n }\r\n\r\n public getActivities(): Activity[] {\r\n let options = [];\r\n let reactions = [];\r\n\r\n if (this.registration.options) {\r\n options = this.registration.options.map(option => ({\r\n title: option.proposition.name,\r\n type: ActivityType.Option,\r\n creationDate: option.creationDate,\r\n statusText: option.statusText\r\n }));\r\n }\r\n if (this.registration.reactions) {\r\n reactions = this.registration.reactions.map(reaction => ({\r\n title: reaction.advertisementTitle,\r\n type: ActivityType.Reaction,\r\n creationDate: reaction.createdTime,\r\n statusText: reaction.statusText,\r\n rank: reaction.rank\r\n }));\r\n }\r\n\r\n return options.concat(reactions).sort(this.byCreationDateDesc);\r\n }\r\n\r\n private byCreationDateDesc(left: Activity, right: Activity): number {\r\n if (left.creationDate < right.creationDate) return -1;\r\n if (left.creationDate > right.creationDate) return 1;\r\n return 0;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard {\r\n import UnitModel = Modules.Housing.UnitModel;\r\n import IUnitResource = Modules.Housing.Units.IUnitResource;\r\n import IValuationResourceClass = Modules.Housing.Valuations.IValuationResourceClass;\r\n import IContractResource = Modules.Housing.IContractResource;\r\n\r\n @Service('CustomerService', 'UnitCardService')\r\n @Inject('UnitResource', 'EmptyGuid', 'UnitCardStore', 'ValuationResource', 'ContractResource')\r\n export class UnitCardService {\r\n constructor(\r\n private unitResource: IUnitResource,\r\n private emptyGuid: System.Guid,\r\n private unitCardStore: UnitCardStore,\r\n private valuationResource: IValuationResourceClass,\r\n private contractResource: IContractResource\r\n ) {}\r\n\r\n public loadByUnitId(unitId: System.Guid): void {\r\n this.loading(unitId);\r\n\r\n this.unitResource.getById({ id: unitId }).$promise.then(unit => this.loaded(unit));\r\n }\r\n\r\n public reload(): void {\r\n const unitId = this.getState().id;\r\n\r\n this.unitResource.getById({ id: unitId }).$promise.then(unit => this.loaded(unit));\r\n }\r\n\r\n public loadValuations(force = false): void {\r\n if (!this.getState().valuation || force) {\r\n this.emit({ type: 'UnitValuationLoadingEvent' });\r\n\r\n this.valuationResource\r\n .getByUnitId({ id: this.getState().id })\r\n .$promise.then(value =>\r\n this.emit({\r\n type: 'UnitValuationLoadedEvent',\r\n valuation: value\r\n })\r\n )\r\n .catch(e => {\r\n if (e.status === 404)\r\n this.emit({\r\n type: 'UnitValuationLoadedEvent',\r\n valuation: null\r\n });\r\n else\r\n this.emit({\r\n type: 'UnitValuationLoadErrorEvent',\r\n error: e\r\n });\r\n });\r\n }\r\n }\r\n\r\n public unload() {\r\n this.emit({ type: 'UnitCardUnloadedEvent' });\r\n }\r\n\r\n public loadContracts = (page = 0, pageSize = 5, force = false): void => {\r\n const contracts = this.getState().contractInfo && this.getState().contractInfo.contracts;\r\n\r\n if (!contracts || contracts.page !== page || contracts.pageSize !== pageSize || force) {\r\n const promise = this.contractResource.getAllByUnitIdPaged({\r\n id: this.getState().id,\r\n page,\r\n pageSize\r\n }).$promise;\r\n\r\n this.emit({\r\n type: 'UnitContractsLoadingEvent',\r\n page,\r\n pageSize\r\n });\r\n\r\n promise.then(data => {\r\n const mergedList = {\r\n items:\r\n contracts && contracts.page < data.page ? [...data.items, ...contracts.items] : data.items,\r\n total: data.total,\r\n page: data.page,\r\n pageSize: data.pageSize\r\n };\r\n\r\n this.emit({\r\n type: 'UnitContractsLoadedEvent',\r\n contracts: mergedList\r\n });\r\n });\r\n }\r\n };\r\n\r\n private loading(id: System.Guid) {\r\n this.emit({\r\n type: 'UnitCardLoadingEvent',\r\n id\r\n });\r\n }\r\n\r\n private loaded(unit: UnitModel) {\r\n this.emit({\r\n type: 'UnitCardLoadedEvent',\r\n unit\r\n });\r\n }\r\n\r\n private emit(e: UnitCardEvent) {\r\n this.unitCardStore.event$.onNext(e);\r\n }\r\n\r\n private getState(): UnitCardState {\r\n return this.unitCardStore.getState();\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\ninterface SignalR {\r\n unitHub: Umbrella.CustomerService.UnitCard.IUnitHubProxy;\r\n}\r\n\r\nnamespace Umbrella.CustomerService.UnitCard {\r\n import UnitModel = Modules.Housing.UnitModel;\r\n\r\n export interface IUnitHubProxy extends HubProxy {\r\n client: IUnitHubClient;\r\n server: IUnitHubServer;\r\n }\r\n\r\n export interface IUnitHubClient {\r\n updated(unitId: System.Guid);\r\n started(unitId: System.Guid);\r\n }\r\n export interface IUnitHubServer {\r\n startJitUpdate(unitId: System.Guid);\r\n leave(unitId: System.Guid);\r\n }\r\n\r\n angular\r\n .module('CustomerService')\r\n .factory('UnitHub', () => $.connection.unitHub);\r\n\r\n export const unitHubOnUpdated$ = new Rx.Subject();\r\n export const unitHubOnStarted$ = new Rx.Subject();\r\n\r\n Modules.onSignalRInitialized(() => {\r\n $.connection.unitHub.client.updated = unitId => {\r\n unitHubOnUpdated$.onNext(unitId);\r\n };\r\n\r\n $.connection.unitHub.client.started = unitId => {\r\n unitHubOnStarted$.onNext(unitId);\r\n };\r\n });\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard {\r\n export class Message {\r\n unitId: System.Guid;\r\n element: any;\r\n }\r\n\r\n @Service('CustomerService', 'UnitJitService')\r\n @Inject('UnitCardStore', 'UnitHub', 'ToastMessageService', 'UnitCardService')\r\n export class UnitJitService {\r\n private message: any;\r\n\r\n constructor(\r\n store: UnitCardStore,\r\n private unitHub: IUnitHubProxy,\r\n private toastMessageService: ToastMessageService,\r\n private unitCardService: UnitCardService\r\n ) {\r\n const selectUnitId = (state: UnitCardState) => state && state.id;\r\n\r\n unitHubOnUpdated$\r\n .filter(unitId => {\r\n return selectUnitId(store.getState()) === unitId;\r\n })\r\n .subscribe(unitId => {\r\n unitCardService.reload();\r\n this.clearToastMessage();\r\n });\r\n\r\n unitHubOnStarted$\r\n .filter(unitId => {\r\n return selectUnitId(store.getState()) === unitId;\r\n })\r\n .subscribe(model => {\r\n if (this.message) {\r\n return;\r\n }\r\n\r\n this.message = this.toastMessageService.updating('Eenheidgegevens', 60000, {\r\n onHidden: () => {\r\n this.message = null;\r\n }\r\n });\r\n\r\n setTimeout(() => {\r\n if (this.message) {\r\n this.message = null;\r\n }\r\n }, 60000);\r\n });\r\n\r\n store.state$\r\n .map(selectUnitId)\r\n .distinctUntilChanged()\r\n .flatMapLatest(Modules.waitUntilSignalRConnected)\r\n .debounce(() => Rx.Observable.timer(1000))\r\n .subscribe(unitId => this.triggerJitUpdate(unitId));\r\n\r\n store.event$.where(e => e.type === 'UnitCardUnloadedEvent').subscribe(_ => this.clearToastMessage());\r\n }\r\n\r\n private triggerJitUpdate(unitId: System.Guid) {\r\n this.clearToastMessage();\r\n\r\n if (unitId)\r\n this.unitHub.server.startJitUpdate(unitId).fail(e => {\r\n this.clearToastMessage();\r\n this.message = this.toastMessageService.error('Synchronisatie eenheidgegevens mislukt');\r\n });\r\n }\r\n\r\n private clearToastMessage() {\r\n if (this.message) {\r\n this.toastMessageService.clear(this.message);\r\n this.message = null;\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard {\r\n import UnitModel = Modules.Housing.UnitModel;\r\n import ContractModel = Modules.Housing.ContractModel;\r\n import ValuationModel = Modules.Housing.Valuations.ValuationModel;\r\n\r\n export interface UnitCardLoadingEvent {\r\n type: 'UnitCardLoadingEvent';\r\n id: System.Guid;\r\n }\r\n\r\n export interface UnitCardLoadedEvent {\r\n type: 'UnitCardLoadedEvent';\r\n unit: UnitModel;\r\n }\r\n\r\n export interface UnitJitUpdatingEvent {\r\n type: 'UnitJitUpdatingEvent';\r\n newUnit: UnitModel;\r\n }\r\n\r\n export interface UnitJitUpdatedEvent {\r\n type: 'UnitJitUpdatedEvent';\r\n newUnit: UnitModel;\r\n }\r\n\r\n export interface UnitCardUnloadedEvent {\r\n type: 'UnitCardUnloadedEvent';\r\n }\r\n\r\n export interface UnitValuationLoadingEvent {\r\n type: 'UnitValuationLoadingEvent';\r\n }\r\n\r\n export interface UnitValuationLoadedEvent {\r\n type: 'UnitValuationLoadedEvent';\r\n valuation: ValuationModel;\r\n }\r\n\r\n export interface UnitValuationLoadErrorEvent {\r\n type: 'UnitValuationLoadErrorEvent';\r\n error: any;\r\n }\r\n\r\n export namespace Contracts {\r\n export interface LoadingEvent {\r\n readonly type: 'UnitContractsLoadingEvent';\r\n readonly page: number;\r\n readonly pageSize: number;\r\n }\r\n\r\n export interface LoadedEvent {\r\n readonly type: 'UnitContractsLoadedEvent';\r\n readonly contracts: PagedItemsModel;\r\n }\r\n\r\n export interface LoadErrorEvent {\r\n readonly type: 'UnitContractsLoadErrorEvent';\r\n readonly error: any;\r\n }\r\n\r\n export interface State {\r\n readonly loading: boolean;\r\n readonly contracts: PagedItemsModel;\r\n readonly error: any;\r\n }\r\n\r\n export function set(\r\n s: UnitCardState,\r\n replacement: State\r\n ): UnitCardState {\r\n return {\r\n id: s.id,\r\n unit: s.unit,\r\n status: s.status,\r\n valuation: s.valuation,\r\n activityInfo: s.activityInfo,\r\n contractInfo: replacement\r\n };\r\n }\r\n }\r\n\r\n export namespace Activities {\r\n import CaseHistoryModel = Umbrella.Modules.CaseHistoryModel;\r\n\r\n export interface LoadingEvent {\r\n readonly type: 'UnitActivitiesLoadingEvent';\r\n readonly page: number;\r\n readonly pageSize: number;\r\n }\r\n\r\n export interface LoadedEvent {\r\n readonly type: 'UnitActivitiesLoadedEvent';\r\n readonly cases: PagedItemsModel;\r\n }\r\n\r\n export interface LoadErrorEvent {\r\n readonly type: 'UnitActivitiesLoadErrorEvent';\r\n readonly error: any;\r\n }\r\n\r\n export interface State {\r\n readonly loading: boolean;\r\n readonly cases: PagedItemsModel;\r\n readonly error: any;\r\n }\r\n\r\n export function set(\r\n s: UnitCardState,\r\n replacement: State\r\n ): UnitCardState {\r\n return {\r\n id: s.id,\r\n unit: s.unit,\r\n status: s.status,\r\n valuation: s.valuation,\r\n activityInfo: replacement,\r\n contractInfo: s.contractInfo\r\n };\r\n }\r\n }\r\n\r\n export type UnitCardEvent =\r\n | UnitCardLoadingEvent\r\n | UnitCardLoadedEvent\r\n | UnitJitUpdatingEvent\r\n | UnitJitUpdatedEvent\r\n | UnitCardUnloadedEvent\r\n | UnitValuationLoadingEvent\r\n | UnitValuationLoadedEvent\r\n | UnitValuationLoadErrorEvent\r\n | Contracts.LoadingEvent\r\n | Contracts.LoadedEvent\r\n | Contracts.LoadErrorEvent\r\n | Activities.LoadingEvent\r\n | Activities.LoadedEvent\r\n | Activities.LoadErrorEvent;\r\n\r\n export enum UnitCardLoadingStatus {\r\n Empty,\r\n Loading,\r\n Jitting,\r\n Loaded\r\n }\r\n\r\n export interface UnitValuationState {\r\n loading: boolean;\r\n valuation: ValuationModel;\r\n error: any;\r\n }\r\n\r\n export interface UnitCardState {\r\n readonly id: System.Guid;\r\n readonly unit?: UnitModel;\r\n readonly status: UnitCardLoadingStatus;\r\n readonly valuation: UnitValuationState;\r\n readonly activityInfo: Activities.State;\r\n readonly contractInfo: Contracts.State;\r\n }\r\n\r\n function reduce(e: UnitCardEvent): (s: UnitCardState) => UnitCardState {\r\n switch (e.type) {\r\n case 'UnitCardLoadingEvent':\r\n return s => ({\r\n id: e.id,\r\n unit: null,\r\n status: UnitCardLoadingStatus.Loading,\r\n valuation: null,\r\n contractInfo: null,\r\n activityInfo: null\r\n });\r\n\r\n case 'UnitCardLoadedEvent':\r\n return s => ({\r\n id: s.id,\r\n unit: e.unit,\r\n status: UnitCardLoadingStatus.Loaded,\r\n valuation: s.valuation,\r\n contractInfo: s.contractInfo,\r\n activityInfo: s.activityInfo\r\n });\r\n\r\n case 'UnitJitUpdatingEvent':\r\n return s => ({\r\n id: s.id,\r\n unit: s.unit,\r\n status: UnitCardLoadingStatus.Jitting,\r\n valuation: s.valuation,\r\n contractInfo: s.contractInfo,\r\n activityInfo: s.activityInfo\r\n });\r\n\r\n case 'UnitJitUpdatedEvent':\r\n return s => ({\r\n id: s.id,\r\n unit: e.newUnit,\r\n status: UnitCardLoadingStatus.Loaded,\r\n valuation: s.valuation,\r\n contractInfo: s.contractInfo,\r\n activityInfo: s.activityInfo\r\n });\r\n\r\n case 'UnitCardUnloadedEvent':\r\n return s => s;\r\n\r\n case 'UnitValuationLoadingEvent':\r\n return s => ({\r\n id: s.id,\r\n unit: s.unit,\r\n status: s.status,\r\n valuation: {\r\n loading: true,\r\n error: null,\r\n valuation: null\r\n },\r\n contractInfo: s.contractInfo,\r\n activityInfo: s.activityInfo\r\n });\r\n\r\n case 'UnitValuationLoadedEvent':\r\n return s => ({\r\n id: s.id,\r\n unit: s.unit,\r\n status: s.status,\r\n valuation: {\r\n loading: false,\r\n error: null,\r\n valuation: e.valuation\r\n },\r\n contractInfo: s.contractInfo,\r\n activityInfo: s.activityInfo\r\n });\r\n\r\n case 'UnitValuationLoadErrorEvent':\r\n return s => ({\r\n id: s.id,\r\n unit: s.unit,\r\n status: s.status,\r\n valuation: {\r\n loading: false,\r\n error: e.error,\r\n valuation: null\r\n },\r\n contractInfo: s.contractInfo,\r\n activityInfo: s.activityInfo\r\n });\r\n\r\n case 'UnitContractsLoadingEvent':\r\n return s =>\r\n Contracts.set(s, {\r\n loading: true,\r\n contracts: null,\r\n error: null\r\n });\r\n\r\n case 'UnitContractsLoadedEvent':\r\n return s =>\r\n Contracts.set(s, {\r\n loading: false,\r\n contracts: e.contracts,\r\n error: null\r\n });\r\n\r\n case 'UnitContractsLoadErrorEvent':\r\n return s =>\r\n Contracts.set(s, {\r\n loading: false,\r\n contracts: null,\r\n error: e.error\r\n });\r\n\r\n case 'UnitActivitiesLoadingEvent':\r\n return s =>\r\n Activities.set(s, {\r\n loading: true,\r\n cases: null,\r\n error: null\r\n });\r\n\r\n case 'UnitActivitiesLoadedEvent':\r\n return s =>\r\n Activities.set(s, {\r\n loading: false,\r\n cases: e.cases,\r\n error: null\r\n });\r\n\r\n case 'UnitActivitiesLoadErrorEvent':\r\n return s =>\r\n Activities.set(s, {\r\n loading: false,\r\n cases: null,\r\n error: e.error\r\n });\r\n }\r\n\r\n throw new Error('Unknown event ' + (event.type || event));\r\n }\r\n\r\n export type UnitCardStore = ObservableStore.EventStore<\r\n UnitCardState,\r\n UnitCardEvent\r\n >;\r\n\r\n export const unitCardStore: UnitCardStore = rootStore.map(\r\n lens('unitCard'),\r\n reduce\r\n );\r\n\r\n angular.module('CustomerService').value('UnitCardStore', unitCardStore);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard {\r\n export interface UnitCardStateParams extends ng.ui.IStateParamsService {\r\n unitId: System.Guid;\r\n }\r\n\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n '$urlRouterProvider',\r\n ($stateProvider: angular.ui.IStateProvider, $urlRouterProvider: angular.ui.IUrlRouterProvider) => {\r\n $urlRouterProvider.when('/objectkaart/:unitId', '/objectkaart/:unitId/tijdlijn');\r\n\r\n $stateProvider\r\n .state('customerservice.unitcard', {\r\n abstract: true,\r\n reloadOnSearch: false,\r\n url: '/objectkaart/:unitId',\r\n data: { pageTitle: 'Eenheidkaart' },\r\n views: {\r\n 'right@customerservice': {\r\n template: '',\r\n controller: createComponentRouteController(\r\n 'UnitCardStore',\r\n s => ({\r\n unit: s && s.unit,\r\n contracts: s && s.contractInfo && s.contractInfo.contracts\r\n })\r\n )\r\n }\r\n },\r\n onEnter: [\r\n '$stateParams',\r\n 'UnitCardService',\r\n ($stateParams: UnitCardStateParams, unitCardService: UnitCardService) => {\r\n unitCardService.loadByUnitId($stateParams.unitId);\r\n unitCardService.loadContracts();\r\n }\r\n ],\r\n onExit: [\r\n 'UnitCardService',\r\n (unitCardService: UnitCardService) => {\r\n unitCardService.unload();\r\n }\r\n ]\r\n })\r\n .state('customerservice.unitcard.tab', {\r\n reloadOnSearch: false,\r\n abstract: true\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard {\r\n @Component('CustomerService', {\r\n templateUrl: '/CustomerService/_UnitCard/MapComponent/Map.html',\r\n selector: 'map',\r\n bindings: {\r\n street: '@',\r\n houseNumber: '@',\r\n houseNumberExtension: '@',\r\n houseNumberLetter: '@',\r\n city: '@',\r\n displayMarker: '<'\r\n }\r\n })\r\n export class MapComponent {\r\n public error: string;\r\n public streetviewUrl: string;\r\n\r\n private street: string;\r\n private houseNumber: string;\r\n private houseNumberExtension: string;\r\n private houseNumberLetter: string;\r\n private city: string;\r\n private displayMarker: boolean;\r\n private map: L.Map;\r\n private initialLoad = false;\r\n\r\n public loadData() {\r\n if (\r\n this.initialLoad === false &&\r\n window.document.getElementById('streetmap_tab_osm') !== null &&\r\n this.map === undefined\r\n ) {\r\n this.initialLoad = true;\r\n $.ajax({\r\n url: `https://nominatim.openstreetmap.org/search?format=json&q=${this.street} ${this.houseNumber}${this.houseNumberExtension}${this.houseNumberLetter}, ${this.city}`,\r\n dataType: 'json',\r\n xhrFields: {\r\n withCredentials: false\r\n },\r\n headers: { 'Access-Control-Allow-Origin': '*' },\r\n success: data => {\r\n // When no address found then try again without housenumber extension and letter\r\n if (!data[0]) {\r\n $.ajax({\r\n url: `https://nominatim.openstreetmap.org/search?format=json&q=${this.street} ${this.houseNumber}, ${this.city}`,\r\n dataType: 'json',\r\n xhrFields: {\r\n withCredentials: false\r\n },\r\n headers: { 'Access-Control-Allow-Origin': '*' },\r\n success: dataWithoutExtensions => {\r\n if (!dataWithoutExtensions[0]) {\r\n this.error = 'Geen kaart voor dit adres';\r\n return;\r\n }\r\n this.loadMap(dataWithoutExtensions);\r\n }\r\n });\r\n return;\r\n }\r\n this.loadMap(data);\r\n },\r\n error: () => {\r\n this.error = 'Geen kaart voor dit adres';\r\n return;\r\n }\r\n });\r\n }\r\n }\r\n\r\n private loadMap(data: any) {\r\n const zoomFactor = 18;\r\n const placemarkLat = data[0].lat;\r\n const placemarkLon = data[0].lon;\r\n this.streetviewUrl = `https://maps.google.com/maps?q=&layer=c&cbll=${placemarkLat},${placemarkLon}`;\r\n $('#streetmap_tab_osm').html('');\r\n\r\n this.map = new L.Map('streetmap_tab_osm').setView([placemarkLat, placemarkLon], zoomFactor);\r\n\r\n L.tileLayer('https://{s}.tile.osm.org/{z}/{x}/{y}.png', {\r\n attribution: '© OpenStreetMap contributors'\r\n }).addTo(this.map);\r\n\r\n if (this.displayMarker) {\r\n L.circle([placemarkLat, placemarkLon], {\r\n color: 'red',\r\n fillColor: '#f03',\r\n fillOpacity: 0.1,\r\n radius: 5\r\n }).addTo(this.map);\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard {\r\n import UnitModel = Modules.Housing.UnitModel;\r\n import ContractModel = Modules.Housing.ContractModel;\r\n\r\n export interface UnitCardSidebarComponentState {\r\n unit: UnitModel;\r\n contracts: PagedItemsModel;\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'unitcard-sidebar',\r\n templateUrl: '/CustomerService/_UnitCard/Sidebar/UnitCardSideBarComponent/UnitCardSideBar.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n class UnitCardSideBarComponent {\r\n public state: UnitCardSidebarComponentState;\r\n public indicatorModel: { unit: UnitModel };\r\n\r\n public $onChanges(bindings: { state: IBindingChange }) {\r\n const currentState = bindings && bindings.state && bindings.state.currentValue;\r\n\r\n if (!currentState || !currentState.contracts || !currentState.unit) return;\r\n\r\n this.indicatorModel = {\r\n unit:\r\n currentState &&\r\n currentState.contracts.items.some(contract => this.isActiveContract(contract)) &&\r\n currentState.unit\r\n };\r\n }\r\n\r\n public isAuthorizedForContactPersons(): boolean {\r\n return window.user.permissions.contactPersonRead;\r\n }\r\n\r\n private isActiveContract(contract: ContractModel) {\r\n return contract.status.toString() === 'Active' || contract.status === 1;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard {\r\n import ResidentialZoneModel = Modules.Housing.ResidentialZoneModel;\r\n import UnitModel = Modules.Housing.UnitModel;\r\n import WorkAreaModel = Modules.SelfService.Models.WorkAreaModel.ContactPerson;\r\n\r\n @Component('CustomerService', {\r\n selector: 'unitcard-sidebar-contactpersons',\r\n templateUrl:\r\n '/CustomerService/_UnitCard/Sidebar/UnitCardSidebarContactPersonsComponent/UnitCardSidebarContactPersons.html',\r\n bindings: {\r\n unit: '<'\r\n }\r\n })\r\n @Inject('WorkAreaResource', 'PhoneService')\r\n class UnitCardSidebarContactPersonsComponent {\r\n unit: UnitModel;\r\n workareas: WorkAreaModel[];\r\n\r\n constructor(\r\n public workAreaResource: Umbrella.CustomerService.IWorkAreaResourceClass,\r\n public phoneService\r\n ) {}\r\n\r\n public $onInit() {\r\n if (this.unit) this.loadWorkAreas(this.unit.id);\r\n }\r\n\r\n public callNr(nr: string): void {\r\n this.phoneService.callNr(nr);\r\n }\r\n\r\n private loadWorkAreas(unitId: System.Guid) {\r\n this.workareas = [];\r\n\r\n this.workAreaResource\r\n .getAllForResidentialZone({ id: unitId })\r\n .$promise.then((workareas: WorkAreaModel[]) => {\r\n this.workareas = workareas;\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard {\r\n import UnitModel = Modules.Housing.UnitModel;\r\n\r\n @Component('CustomerService', {\r\n selector: 'unitcard-sidebar-unit-info',\r\n templateUrl:\r\n '/CustomerService/_UnitCard/Sidebar/UnitCardSidebarUnitInfoComponent/UnitCardSidebarUnitInfo.html',\r\n bindings: {\r\n unit: '<'\r\n }\r\n })\r\n class UnitCardSidebarUnitInfoComponent {\r\n public unit: UnitModel;\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.UnitCard {\r\n @Component('CustomerService', {\r\n selector: 'unitcard-header',\r\n templateUrl:\r\n 'CustomerService/_UnitCard/UnitCardHeaderComponent/UnitCardHeader.html',\r\n bindings: {\r\n unit: '<'\r\n }\r\n })\r\n class UnitCardHeaderComponent {}\r\n}\r\n","namespace Umbrella.CustomerService.UnitCard.Activities {\r\n import UnitModel = Modules.Housing.UnitModel;\r\n import FaqModel = Modules.Knowledgebase.FaqModel;\r\n import ActivityRegistrationService = Umbrella.CustomerService.CustomerCard.Activities.Registration.ActivityRegistrationService;\r\n\r\n export interface UnitActivitiesComponentState {\r\n unit: UnitModel;\r\n activityInfo: Activities.State;\r\n }\r\n\r\n export const openUnitCardKnowledgebase$ = new Rx.Subject();\r\n\r\n @Component('CustomerService', {\r\n selector: 'unit-activities',\r\n templateUrl: 'CustomerService/_UnitCard/_Activities/UnitActivitiesComponent/UnitActivities.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('$stateParams', '$mdDialog', 'UnitActivitiesService', 'ActivityRegistrationService', '$location')\r\n class UnitActivitiesComponent {\r\n public state: UnitActivitiesComponentState;\r\n public permissions: PermissionsModel;\r\n public faqActions: any;\r\n public displayKnowledgebase: boolean;\r\n private knowledgebaseSubscription: Rx.Disposable;\r\n\r\n constructor(\r\n private $stateParams: UnitCardStateParams,\r\n private $mdDialog,\r\n private unitActivitiesService: UnitActivitiesService,\r\n private activityRegistrationService: ActivityRegistrationService,\r\n private $location: ng.ILocationService\r\n ) {\r\n this.knowledgebaseSubscription = openUnitCardKnowledgebase$\r\n .filter(x => !!x)\r\n .subscribe(_ => {\r\n this.openKnowledgebase();\r\n });\r\n }\r\n\r\n public $onInit() {\r\n this.permissions = window.user.permissions;\r\n this.setFaqActionDefinitions();\r\n\r\n if (this.$stateParams.createtask) {\r\n this.openKnowledgebase();\r\n this.$location.search({});\r\n }\r\n }\r\n\r\n public $onDestroy() {\r\n if (this.knowledgebaseSubscription) this.knowledgebaseSubscription.dispose();\r\n }\r\n\r\n public loadMoreActivities(): void {\r\n this.unitActivitiesService.loadMore();\r\n }\r\n\r\n public registerTask(faq: FaqModel): void {\r\n if (!this.$stateParams.unitId || !faq || !faq.mainTag) return;\r\n\r\n this.$mdDialog\r\n .show({\r\n template: ``,\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n })\r\n .then(() => {\r\n this.closeKnowledgebase();\r\n this.unitActivitiesService.reload();\r\n });\r\n }\r\n\r\n public openKnowledgebase(): void {\r\n this.displayKnowledgebase = true;\r\n }\r\n\r\n public closeKnowledgebase(): void {\r\n this.displayKnowledgebase = false;\r\n }\r\n\r\n public registerAnnouncement(): void {\r\n if (!this.$stateParams.unitId) return;\r\n\r\n this.$mdDialog.show({\r\n template: ``,\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n });\r\n }\r\n\r\n public setFaqActionDefinitions(): any {\r\n this.faqActions = [\r\n {\r\n name: 'Taak aanmaken',\r\n primary: true,\r\n onExecute: (faq: FaqModel) => this.registerTask(faq)\r\n }\r\n ];\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard {\r\n import IMenuTab = Modules.IMenuTab;\r\n import IStateMenuTab = Modules.IStateMenuTab;\r\n import QuickMenuButtonDefinition = CustomerService.QuickMenuButtonDefinition;\r\n import openUnitCardKnowledgebase$ = Umbrella.CustomerService.UnitCard.Activities.openUnitCardKnowledgebase$;\r\n\r\n @Inject('$stateParams', '$mdDialog', '$state')\r\n @Component('CustomerService', {\r\n selector: 'unitcard-menu',\r\n template: `\r\n
    \r\n \r\n \r\n
    \r\n `\r\n })\r\n class UnitCardMenuComponent {\r\n public tabs: IMenuTab[];\r\n public buttons: QuickMenuButtonDefinition[];\r\n\r\n constructor(private $stateParams: any, private $mdDialog: any, private $state: ng.ui.IStateService) {}\r\n\r\n public $onInit() {\r\n this.createTabs();\r\n this.createButtons();\r\n }\r\n\r\n public registerTask(): void {\r\n if (!this.$stateParams.unitId) return;\r\n\r\n if (this.$state.current.name === 'customerservice.unitcard.tab.activities')\r\n openUnitCardKnowledgebase$.onNext(true);\r\n else\r\n this.$state.go('customerservice.unitcard.tab.activities', {\r\n unitId: this.$stateParams.unitId,\r\n createtask: true\r\n });\r\n }\r\n\r\n public registerAnnouncement(): void {\r\n if (!this.$stateParams.unitId) return;\r\n\r\n this.$mdDialog.show({\r\n template: ``,\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n });\r\n }\r\n\r\n private createButtons() {\r\n this.buttons = [\r\n {\r\n tooltip: 'Nieuwe mededeling',\r\n label: 'Mededeling aanmaken',\r\n auth: 'announcementWrite',\r\n class: 'md-warn',\r\n icon: 'volume_up',\r\n action: () => this.registerAnnouncement()\r\n },\r\n {\r\n tooltip: 'Nieuwe taak',\r\n label: 'Taak aanmaken',\r\n auth: 'createTask',\r\n class: 'md-primary',\r\n icon: 'check_box',\r\n action: () => this.registerTask()\r\n }\r\n ];\r\n }\r\n\r\n private createTabs() {\r\n this.tabs = [];\r\n\r\n if (!window.user.permissions.customerCard) return;\r\n\r\n if (window.user.permissions.caseRead)\r\n this.addTab(this.createTab('Tijdlijn', 'customerservice.unitcard.tab.activities'));\r\n\r\n this.addTab(this.createTab('Contracten', 'customerservice.unitcard.tab.contracts'));\r\n\r\n if (window.user.permissions.announcementRead)\r\n this.addTab(this.createTab('Mededelingen', 'customerservice.unitcard.tab.announcements'));\r\n \r\n this.addTab(this.createTab('Woningwaardering', 'customerservice.unitcard.tab.valuation'));\r\n\r\n if (window.user.permissions.anonymousRepairRequestWrite)\r\n this.addTab(this.createTab('Reparatieverzoek', 'customerservice.unitcard.tab.repairrequest'));\r\n }\r\n\r\n private createTab(title: string, state: string): IStateMenuTab {\r\n return {\r\n title,\r\n state\r\n };\r\n }\r\n\r\n private addTab(tab: IStateMenuTab) {\r\n this.tabs.push(tab);\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.UnitCard.Activities {\r\n import ICaseHistoryResourceClass = Modules.Cases.ICaseHistoryResourceClass;\r\n import CaseHistoryModel = Modules.CaseHistoryModel;\r\n\r\n @Service('CustomerService', 'UnitActivitiesService')\r\n @Inject('UnitCardStore', 'CaseHistoryResource')\r\n export class UnitActivitiesService extends BaseStoreService<\r\n UnitCardState,\r\n UnitCardEvent,\r\n UnitCardStore\r\n > {\r\n private pageSize = 20;\r\n\r\n constructor(\r\n store: UnitCardStore,\r\n private caseHistoryResource: ICaseHistoryResourceClass\r\n ) {\r\n super(store);\r\n }\r\n\r\n public ensureLoaded(pageSize = this.pageSize, force = false): void {\r\n const state = this.getState();\r\n if (!state.activityInfo || force)\r\n this.loadActivities(0, pageSize, cases => cases);\r\n }\r\n\r\n public reload(): void {\r\n this.ensureLoaded(this.pageSize, true);\r\n }\r\n\r\n public loadMore(): void {\r\n const state = this.store.getState();\r\n const pagedItems = state.activityInfo && state.activityInfo.cases;\r\n\r\n this.loadActivities(\r\n pagedItems.page + 1,\r\n pagedItems.pageSize,\r\n cases => ({\r\n items: pagedItems\r\n ? pagedItems.items.concat(cases.items)\r\n : cases.items,\r\n total: cases.total,\r\n page: cases.page,\r\n pageSize: cases.pageSize\r\n })\r\n );\r\n }\r\n\r\n private loadActivities(\r\n page: number,\r\n pageSize,\r\n loaded: ((\r\n a: PagedItemsModel\r\n ) => PagedItemsModel)\r\n ) {\r\n const state = this.getState();\r\n if (state.unit) {\r\n this.emit({\r\n type: 'UnitActivitiesLoadingEvent',\r\n page,\r\n pageSize\r\n });\r\n\r\n this.caseHistoryResource\r\n .getByUnitId({\r\n id: state.id,\r\n page,\r\n pageSize\r\n })\r\n .$promise.then(data => {\r\n //NOTE: set case client-side for activities: deliberately done to prevent big data responses\r\n angular.forEach(\r\n data.items,\r\n (item: CaseHistoryModel) => {\r\n if (item.firstActivity) {\r\n item.firstActivity.case = item.case;\r\n }\r\n\r\n if (item.lastActivity) {\r\n item.lastActivity.case = item.case;\r\n }\r\n }\r\n );\r\n\r\n const cases = loaded(data);\r\n this.emit({ type: 'UnitActivitiesLoadedEvent', cases });\r\n })\r\n .catch(e =>\r\n this.emit({\r\n type: 'UnitActivitiesLoadErrorEvent',\r\n error: e\r\n })\r\n );\r\n } else {\r\n this.store.state$\r\n .map(x => x && x.unit)\r\n .filter(x => x != null)\r\n .take(1)\r\n .subscribeOnCompleted(() =>\r\n this.loadActivities(page, pageSize, loaded)\r\n );\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\ninterface SignalR {\r\n unitActivityHub: Umbrella.CustomerService.UnitCard.Activities.IUnitActivityHubProxy;\r\n}\r\n\r\nnamespace Umbrella.CustomerService.UnitCard.Activities {\r\n export interface IUnitActivityHubProxy extends HubProxy {\r\n client: IUnitActivityHubClient;\r\n server: IUnitActivityHubServer;\r\n }\r\n\r\n export interface IUnitActivityHubClient {\r\n updated(unitId: System.Guid);\r\n started(unitId: System.Guid);\r\n }\r\n\r\n export interface IUnitActivityHubServer {\r\n subscribe(unitId: System.Guid);\r\n unsubscribe(unitId: System.Guid);\r\n }\r\n\r\n angular\r\n .module('CustomerService')\r\n .factory('UnitActivityHub', () => $.connection.unitActivityHub);\r\n\r\n export const unitActivityHubOnUpdated$ = new Rx.Subject();\r\n export const unitActivityHubOnStarted$ = new Rx.Subject();\r\n\r\n Modules.onSignalRInitialized(() => {\r\n $.connection.unitActivityHub.client.updated = model => {\r\n unitActivityHubOnUpdated$.onNext(model);\r\n };\r\n\r\n $.connection.unitActivityHub.client.started = unitId => {\r\n unitActivityHubOnStarted$.onNext(unitId);\r\n };\r\n });\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard.Activities {\r\n @Service('CustomerService', 'UnitActivityJitService')\r\n @Inject('UnitCardStore', 'UnitActivitiesService', 'UnitActivityHub', 'ToastMessageService')\r\n export class UnitActivityJitService {\r\n private message: any;\r\n\r\n constructor(\r\n store: UnitCardStore,\r\n service: Umbrella.CustomerService.UnitCard.Activities.UnitActivitiesService,\r\n private unitActivityHub: IUnitActivityHubProxy,\r\n private toastMessageService: ToastMessageService\r\n ) {\r\n const getUnitId = (state: UnitCardState) => state && state.id;\r\n\r\n unitActivityHubOnUpdated$\r\n .filter(unitId => getUnitId(store.getState()) === unitId)\r\n .subscribe(() => {\r\n service.ensureLoaded(undefined, true);\r\n this.clearToastMessage();\r\n });\r\n\r\n unitActivityHubOnStarted$\r\n .filter(unitId => getUnitId(store.getState()) === unitId)\r\n .subscribe(() => {\r\n if (this.message) {\r\n return;\r\n }\r\n\r\n this.message = this.toastMessageService.updating('Tijdlijn gegevens', 60000, {\r\n onHidden: () => {\r\n this.message = null;\r\n }\r\n });\r\n\r\n setTimeout(() => {\r\n if (this.message) {\r\n this.message = null;\r\n }\r\n }, 60000);\r\n });\r\n\r\n store.state$\r\n .map(getUnitId)\r\n .distinctUntilChanged()\r\n .flatMapLatest(Modules.waitUntilSignalRConnected)\r\n .debounce(() => Rx.Observable.timer(1000))\r\n .subscribe(unitId => this.subscribe(unitId));\r\n\r\n store.event$.where(e => e.type === 'UnitCardUnloadedEvent').subscribe(_ => this.unsubscribe(getUnitId(store.getState())));\r\n }\r\n\r\n private subscribe(unitId: System.Guid) {\r\n if (unitId) {\r\n this.unitActivityHub.server.subscribe(unitId);\r\n }\r\n this.clearToastMessage();\r\n }\r\n\r\n private unsubscribe(unitId: System.Guid) {\r\n if (unitId) {\r\n this.unitActivityHub.server.unsubscribe(unitId);\r\n }\r\n this.clearToastMessage();\r\n }\r\n\r\n private clearToastMessage() {\r\n if (this.message) {\r\n this.toastMessageService.clear(this.message);\r\n this.message = null;\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard.Activities {\r\n function mapState(s: UnitCardState): UnitActivitiesComponentState {\r\n return {\r\n unit: s.unit,\r\n activityInfo: s.activityInfo\r\n };\r\n }\r\n\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('customerservice.unitcard.tab.activities', {\r\n url: '/tijdlijn?createtask',\r\n reloadOnSearch: false,\r\n data: {\r\n tab: 'tijdlijn',\r\n authorize: ps => ps.customerCard && ps.caseRead\r\n },\r\n views: {\r\n 'tab@customerservice': {\r\n template:\r\n '',\r\n controller: createComponentRouteController(\r\n 'UnitCardStore',\r\n mapState\r\n )\r\n }\r\n },\r\n onEnter: [\r\n 'UnitActivitiesService',\r\n (unitActivitiesService: UnitActivitiesService) => {\r\n unitActivitiesService.ensureLoaded();\r\n }\r\n ]\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard.Announcements {\r\n function mapState(s: UnitCardState): UnitAnnouncementsComponentState {\r\n return {\r\n unit: s && s.unit,\r\n loading: !s || !s.unit\r\n };\r\n }\r\n\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('customerservice.unitcard.tab.announcements', {\r\n url: '/mededelingen',\r\n reloadOnSearch: false,\r\n data: {\r\n tab: 'Mededelingen',\r\n authorize: ps => ps.customerCard && ps.announcementRead\r\n },\r\n views: {\r\n 'tab@customerservice': {\r\n template:\r\n '',\r\n controller: createComponentRouteController(\r\n 'UnitCardStore',\r\n mapState\r\n )\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard {\r\n import UnitModel = Modules.Housing.UnitModel;\r\n import AnnouncementResourceClass = Umbrella.Modules.Announcements.AnnouncementResourceClass;\r\n import AnnouncementModel = Umbrella.Modules.Announcements.AnnouncementModel;\r\n\r\n export interface UnitAnnouncementsComponentState {\r\n readonly loading: boolean;\r\n readonly unit: UnitModel;\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'unit-announcements',\r\n templateUrl:\r\n 'CustomerService/_UnitCard/_Announcements/UnitAnnouncementsComponent/UnitAnnouncements.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('$stateParams', 'AnnouncementResource')\r\n class UnitAnnouncementsComponent {\r\n public state: UnitAnnouncementsComponentState;\r\n public announcements: PagedItemsModel;\r\n public loadingAnnouncements: boolean;\r\n private page = 0;\r\n\r\n constructor(\r\n private $stateParams: UnitCardStateParams,\r\n private announcementResource: AnnouncementResourceClass\r\n ) {}\r\n\r\n public $onInit() {\r\n this.loadAnnouncements();\r\n }\r\n\r\n public loadMore(): void {\r\n this.loadAnnouncements(this.page + 1);\r\n }\r\n\r\n private async loadAnnouncements(\r\n page = 0,\r\n pageSize = 10\r\n ): Promise {\r\n const unitId =\r\n (this.state && this.state.unit && this.state.unit.id) ||\r\n this.$stateParams.unitId;\r\n if (!unitId || this.loadingAnnouncements) return;\r\n\r\n this.loadingAnnouncements = true;\r\n this.page = page;\r\n const announcements = await this.announcementResource.byUnitId({\r\n id: unitId,\r\n page,\r\n pageSize\r\n }).$promise;\r\n if (announcements) {\r\n this.announcements =\r\n page === 0\r\n ? announcements\r\n : {\r\n ...this.announcements,\r\n page,\r\n items: this.announcements.items.concat(\r\n announcements.items\r\n )\r\n };\r\n }\r\n this.loadingAnnouncements = false;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\ninterface SignalR {\r\n unitContractHub: Umbrella.CustomerService.UnitCard.Contracts.IUnitContractHubProxy;\r\n}\r\n\r\nnamespace Umbrella.CustomerService.UnitCard.Contracts {\r\n import ContractModel = Modules.Housing.ContractModel;\r\n\r\n export interface IUnitContractHubProxy extends HubProxy {\r\n client: IUnitContractHubClient;\r\n server: IUnitContractHubServer;\r\n }\r\n\r\n export interface IUnitContractHubClient {\r\n updated(unitId: System.Guid);\r\n started(unitId: System.Guid);\r\n contractUpdated(contractId: System.Guid);\r\n }\r\n\r\n export interface IUnitContractHubServer {\r\n subscribe(unitId: System.Guid);\r\n unsubscribe(unitId: System.Guid);\r\n } \r\n\r\n export const unitContractHubOnUpdated$ = new Rx.Subject();\r\n export const unitContractHubOnStarted$ = new Rx.Subject();\r\n export const unitContractHubOnContractUpdated$ = new Rx.Subject();\r\n\r\n angular\r\n .module('CustomerService')\r\n .factory('UnitContractHub', () => $.connection.unitContractHub);\r\n\r\n Modules.onSignalRInitialized(() => {\r\n $.connection.unitContractHub.client.updated = unitId => {\r\n unitContractHubOnUpdated$.onNext(unitId);\r\n };\r\n\r\n $.connection.unitContractHub.client.started = unitId => {\r\n unitContractHubOnStarted$.onNext(unitId);\r\n };\r\n\r\n $.connection.unitContractHub.client.contractUpdated = contractId => {\r\n unitContractHubOnContractUpdated$.onNext(contractId);\r\n };\r\n });\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard.Contracts {\r\n @Service('CustomerService', 'UnitContractJitService')\r\n @Inject('UnitCardStore', 'UnitContractHub', 'ToastMessageService', 'UnitCardService')\r\n export class UnitContractJitService {\r\n private message: any;\r\n constructor(\r\n store: UnitCardStore,\r\n private unitContractHub: IUnitContractHubProxy,\r\n private toastMessageService: ToastMessageService,\r\n unitCardService: UnitCardService\r\n ) {\r\n const getUnitId = (state: UnitCardState) => state && state.id;\r\n\r\n const containsContractId = (s: UnitCardState, contractId) => {\r\n\r\n if (s && s.contractInfo && s.contractInfo.contracts && s.contractInfo.contracts.items && s.contractInfo.contracts.items) {\r\n return s.contractInfo.contracts.items.some(x => x.id === contractId);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n unitContractHubOnUpdated$\r\n .filter(unitId => getUnitId(store.getState()) === unitId)\r\n .subscribe(_ => {\r\n if (store.getState().contractInfo) unitCardService.loadContracts(undefined, undefined, true);\r\n\r\n this.clearToastMessage();\r\n });\r\n\r\n unitContractHubOnContractUpdated$\r\n .filter(contractId => containsContractId(store.getState(), contractId))\r\n .subscribe(_ => unitCardService.loadContracts(undefined, undefined, true));\r\n\r\n unitContractHubOnStarted$\r\n .filter(unitId => getUnitId(store.getState()) === unitId)\r\n .subscribe(_ => {\r\n if (this.message) {\r\n return;\r\n }\r\n\r\n this.message = this.toastMessageService.updating('Contractgegevens', 60000, {\r\n onHidden: () => {\r\n this.message = null;\r\n }\r\n });\r\n\r\n setTimeout(() => {\r\n if (this.message) {\r\n this.message = null;\r\n }\r\n }, 60000);\r\n });\r\n\r\n store.event$.where(e => e.type === 'UnitCardUnloadedEvent').subscribe(_ => this.unsubscribe(getUnitId(store.getState())));\r\n\r\n store.state$\r\n .map(getUnitId)\r\n .distinctUntilChanged()\r\n .flatMapLatest(Modules.waitUntilSignalRConnected)\r\n .debounce(() => Rx.Observable.timer(1000))\r\n .subscribe(unitId => this.subscribe(unitId)); \r\n }\r\n\r\n private subscribe(unitId: System.Guid) {\r\n if (unitId) {\r\n this.unitContractHub.server.subscribe(unitId);\r\n }\r\n this.clearToastMessage();\r\n }\r\n\r\n private unsubscribe(unitId: System.Guid) {\r\n this.unitContractHub.server.unsubscribe(unitId);\r\n this.clearToastMessage();\r\n }\r\n\r\n private clearToastMessage() {\r\n if (this.message) {\r\n this.toastMessageService.clear(this.message);\r\n this.message = null;\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard.Contracts {\r\n function mapState(s: UnitCardState): UnitContractsComponentState {\r\n return {\r\n unit: s && s.unit,\r\n contracts: s && s.contractInfo && s.contractInfo.contracts,\r\n loading: !s || !s.unit || !s.contractInfo || s.contractInfo.loading\r\n };\r\n }\r\n\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('customerservice.unitcard.tab.contracts', {\r\n url: '/contracten',\r\n reloadOnSearch: false,\r\n data: {\r\n tab: 'Object gegevens',\r\n authorize: ps => ps.customerCard && ps.contractRead\r\n },\r\n views: {\r\n 'tab@customerservice': {\r\n template:\r\n '',\r\n controller: createComponentRouteController(\r\n 'UnitCardStore',\r\n mapState\r\n )\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.CustomerService.UnitCard.Contracts {\r\n import UnitModel = Modules.Housing.UnitModel;\r\n import ContractModel = Modules.Housing.ContractModel;\r\n\r\n export interface UnitContractsComponentState {\r\n readonly loading: boolean;\r\n readonly contracts: PagedItemsModel;\r\n readonly unit: UnitModel;\r\n }\r\n\r\n interface UnitContractsStateParams extends UnitCardStateParams {\r\n unitId: System.Guid;\r\n page: number;\r\n size: number;\r\n }\r\n\r\n @Component('CustomerService', {\r\n selector: 'unit-contracts',\r\n templateUrl:\r\n 'CustomerService/_UnitCard/_Contracts/UnitContractsComponent/UnitContracts.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('UnitCardService')\r\n class UnitContractsComponent {\r\n public state: UnitContractsComponentState;\r\n\r\n constructor(private unitCardService: UnitCardService) {}\r\n\r\n public loadMore() {\r\n this.unitCardService.loadContracts(\r\n this.state.contracts.page + 1,\r\n this.state.contracts.pageSize\r\n );\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\ninterface SignalR {\r\n unitValuationHub: Umbrella.CustomerService.UnitCard.Valuation.IUnitValuationHubProxy;\r\n}\r\n\r\nnamespace Umbrella.CustomerService.UnitCard.Valuation {\r\n export interface IUnitValuationHubProxy extends HubProxy {\r\n client: IUnitValuationHubClient;\r\n server: IUnitValuationHubServer;\r\n }\r\n \r\n export interface IUnitValuationHubClient {\r\n updated(unitId: System.Guid);\r\n started(unitId: System.Guid);\r\n }\r\n\r\n export interface IUnitValuationHubServer {\r\n subscribe(unitId: System.Guid);\r\n unsubscribe(unitId: System.Guid);\r\n } \r\n\r\n export const unitValuationHubOnUpdated$ = new Rx.Subject();\r\n export const unitValuationHubOnJitStarted$ = new Rx.Subject();\r\n\r\n angular\r\n .module('CustomerService')\r\n .factory('UnitValuationHub', () => $.connection.unitValuationHub);\r\n\r\n Modules.onSignalRInitialized(() => {\r\n $.connection.unitValuationHub.client.updated = unitId => {\r\n unitValuationHubOnUpdated$.onNext(unitId);\r\n };\r\n\r\n $.connection.unitValuationHub.client.started = unitId => {\r\n unitValuationHubOnJitStarted$.onNext(unitId);\r\n };\r\n });\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard.Valuation {\r\n @Service('CustomerService', 'UnitValuationJitService')\r\n @Inject('UnitCardStore', 'UnitValuationHub', 'UnitCardService', 'ToastMessageService')\r\n export class UnitValuationJitService {\r\n private message: any;\r\n\r\n constructor(\r\n store: UnitCardStore,\r\n private unitValuationHub: IUnitValuationHubProxy,\r\n private unitCardService: UnitCardService,\r\n private toastMessageService: ToastMessageService\r\n ) {\r\n const getUnitId = (state: UnitCardState) => state && state.id;\r\n\r\n unitValuationHubOnUpdated$\r\n .filter(unitId => getUnitId(store.getState()) === unitId)\r\n .subscribe(_ => {\r\n if (store.getState().valuation) unitCardService.loadValuations(true);\r\n\r\n this.clearToastMessage();\r\n });\r\n\r\n unitValuationHubOnJitStarted$\r\n .filter(unitId => getUnitId(store.getState()) === unitId)\r\n .subscribe(_ => {\r\n this.clearToastMessage();\r\n this.message = this.toastMessageService.updating('Woningwaardering', 60000);\r\n });\r\n\r\n store.state$\r\n .map(getUnitId)\r\n .distinctUntilChanged()\r\n .flatMapLatest(Modules.waitUntilSignalRConnected)\r\n .debounce(() => Rx.Observable.timer(1000))\r\n .subscribe(unitId => this.subscribe(unitId));\r\n\r\n store.event$.where(e => e.type === 'UnitCardUnloadedEvent').subscribe(_ => this.unsubscribe(getUnitId(store.getState())));\r\n }\r\n\r\n private subscribe(unitId: System.Guid)\r\n {\r\n this.clearToastMessage();\r\n if (unitId) {\r\n this.unitValuationHub.server.subscribe(unitId);\r\n }\r\n }\r\n\r\n\r\n private unsubscribe(unitId: System.Guid)\r\n {\r\n if (unitId) {\r\n this.unitValuationHub.server.unsubscribe(unitId);\r\n }\r\n this.clearToastMessage();\r\n }\r\n\r\n private clearToastMessage() {\r\n if (this.message) {\r\n this.toastMessageService.clear(this.message);\r\n this.message = null;\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard.Valuation {\r\n angular.module('CustomerService').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) =>\r\n $stateProvider.state('customerservice.unitcard.tab.valuation', {\r\n url: '/woningwaardering',\r\n reloadOnSearch: false,\r\n data: {\r\n tab: 'Woningwaardering',\r\n authorize: ps => ps.customerCard\r\n },\r\n views: {\r\n 'tab@customerservice': {\r\n template: ''\r\n }\r\n },\r\n onEnter: [\r\n '$stateParams',\r\n 'UnitCardService',\r\n (\r\n $stateParams: UnitCardStateParams,\r\n unitCardService: UnitCardService\r\n ) => {\r\n unitCardService.loadValuations();\r\n }\r\n ]\r\n })\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard.Valuation {\r\n import ValuationModel = Modules.Housing.Valuations.ValuationModel;\r\n import UnitModel = Modules.Housing.UnitModel;\r\n\r\n export interface HousingValuationScope extends angular.IScope {\r\n unit: UnitModel;\r\n valuation: ValuationModel;\r\n requestForUnitId(unit: UnitModel.Extended): void;\r\n loading: boolean;\r\n errors: string[];\r\n }\r\n\r\n @Inject(\r\n '$scope',\r\n '$stateParams',\r\n 'CreateDialog',\r\n 'UnitCardStore',\r\n 'UnitCardService'\r\n )\r\n export class HousingValuationController {\r\n constructor(\r\n public $scope: HousingValuationScope,\r\n $stateParams,\r\n createDialog,\r\n unitCardStore: UnitCardStore,\r\n unitCardService: UnitCardService\r\n ) {\r\n $scope.requestForUnitId = unit => {\r\n createDialog(\r\n '/CustomerService/_UnitCard/_Valuation/UnitValuationComponent/RequestValuationPopup.html',\r\n {\r\n id: 'contactPopup',\r\n modalClass: 'popup popup_725 green'\r\n },\r\n {\r\n unit\r\n }\r\n );\r\n };\r\n\r\n $scope.hasTaskCreatePermissions = () => {\r\n return window.user.permissions.createTask;\r\n };\r\n\r\n const subscription = unitCardStore.state$.subscribe(x => {\r\n $scope.unit = x.unit;\r\n $scope.valuation = x.valuation && x.valuation.valuation;\r\n $scope.errors = x.valuation && x.valuation.error;\r\n $scope.loading = x.valuation && x.valuation.loading;\r\n });\r\n\r\n $scope.$on('$destroy', () => subscription.dispose());\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.UnitCard.Valuation {\r\n export class HousingValuationDirective implements angular.IDirective {\r\n restrict = 'EA';\r\n templateUrl =\r\n '/CustomerService/_UnitCard/_Valuation/HousingValuationDirective/HousingValuation.html';\r\n replace = true;\r\n transclude = true;\r\n controller = HousingValuationController;\r\n scope = {\r\n unit: '='\r\n };\r\n\r\n static factory(): angular.IDirectiveFactory {\r\n return () => new HousingValuationDirective();\r\n }\r\n }\r\n angular\r\n .module('CustomerService')\r\n .directive('housingValuation', HousingValuationDirective.factory());\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService.UnitCard.Valuation {\r\n import IValuationResourceClass = Modules.Housing.Valuations.IValuationResourceClass;\r\n import ValuationRequestModel = Modules.Housing.Valuations.ValuationRequestModel;\r\n import SummarizedColleagueModel = Modules.Colleagues.SummarizedColleagueModel.WithFunctionGroup;\r\n import UnitModel = Modules.Housing.UnitModel;\r\n import RoleModel = Modules.RoleModel;\r\n\r\n export interface IRequestValuationPopupScope {\r\n description: string;\r\n valuationform: angular.IFormController;\r\n errors: boolean;\r\n unit: UnitModel;\r\n completedBy: SummarizedColleagueModel;\r\n waiting: boolean;\r\n\r\n save(): void;\r\n $modalSuccess(): void;\r\n getRole(): RoleModel;\r\n\r\n onColleagueOrFunctionGroupSelected(\r\n newSelection: SummarizedColleagueModel\r\n );\r\n }\r\n\r\n @Controller('CustomerService', 'RequestValuationPopupController')\r\n export class RequestValuationPopupController {\r\n static $inject = ['$scope', 'ValuationResource'];\r\n\r\n constructor(\r\n $scope: IRequestValuationPopupScope,\r\n private valuationResource: IValuationResourceClass\r\n ) {\r\n $scope.description = 'Verzoek tot woningwaardering';\r\n\r\n $scope.save = () => {\r\n if (!$scope.valuationform.$valid) {\r\n return;\r\n }\r\n\r\n const request: ValuationRequestModel = {\r\n completeBy: $scope.completedBy,\r\n unitId: $scope.unit.id,\r\n description: $scope.description\r\n };\r\n\r\n $scope.waiting = true;\r\n this.valuationResource\r\n .createTask(request)\r\n .$promise.then(\r\n () => $scope.$modalSuccess(),\r\n response => ($scope.errors = true)\r\n )\r\n .finally(() => ($scope.waiting = false));\r\n };\r\n\r\n $scope.onColleagueOrFunctionGroupSelected = (\r\n newSelection: SummarizedColleagueModel\r\n ) => {\r\n $scope.completedBy = newSelection;\r\n };\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService.UnitCard.Valuation {\r\n import UnitModel = Modules.Housing.UnitModel;\r\n\r\n @Component('CustomerService', {\r\n selector: 'unit-valuation',\r\n templateUrl:\r\n 'CustomerService/_UnitCard/_Valuation/UnitValuationComponent/UnitValuation.html'\r\n })\r\n @Inject('UnitCardStore')\r\n class CustomerValuationComponent {\r\n public unit: UnitModel;\r\n private subscription: Rx.IDisposable;\r\n\r\n constructor(private unitCardStore: UnitCardStore) {}\r\n\r\n public $onInit() {\r\n this.subscription = this.unitCardStore.state$.subscribe(x => {\r\n this.unit = x.unit;\r\n });\r\n }\r\n\r\n public $onDestroy() {\r\n this.subscription.dispose();\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n angular.module('Umbrella').config([\r\n '$stateProvider',\r\n ($stateProvider: ng.ui.IStateProvider) => {\r\n $stateProvider\r\n .state('umbrella.error_general', {\r\n url: '/error',\r\n data: { pageTitle: 'Error' },\r\n views: {\r\n 'center@': { templateUrl: '/Errors/Error.html' }\r\n }\r\n })\r\n .state('umbrella.error_401', {\r\n url: '/error/401',\r\n data: { pageTitle: '401' },\r\n views: {\r\n 'new@': { templateUrl: '/Errors/Unauthorized.html' }\r\n }\r\n })\r\n .state('umbrella.error_404', {\r\n url: '/error/404',\r\n data: { pageTitle: '404' },\r\n views: {\r\n 'center@': { templateUrl: '/Errors/NotFound.html' }\r\n }\r\n })\r\n .state('umbrella.error_503', {\r\n url: '/error/503',\r\n data: { pageTitle: '503' },\r\n views: {\r\n 'center@': {\r\n templateUrl: '/Errors/ServerNotAvailable.html'\r\n }\r\n }\r\n })\r\n .state('umbrella.otherwise', {\r\n data: { pageTitle: '404' },\r\n views: {\r\n 'center@': { templateUrl: '/Errors/NotFound.html' }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n angular.module('Umbrella').directive('triggerExperimentalArea', [\r\n 'ToastMessageService',\r\n '$state',\r\n 'LocalStorageService',\r\n (\r\n toastMessageService: ToastMessageService,\r\n $state: ng.ui.IStateService,\r\n localStorageService: LocalStorageService\r\n ) => {\r\n const timeAllowedBetweenClicks = 1000;\r\n const requiredClicks = 3;\r\n let lastClickTime: Date;\r\n let clickCounter = 0;\r\n\r\n function handleClicks(event: Event) {\r\n if (!(event).altKey) {\r\n resetClicks();\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopImmediatePropagation();\r\n event.stopPropagation();\r\n\r\n const clickTime = new Date();\r\n\r\n if (!lastClickTime) {\r\n increaseCounter(clickTime);\r\n return;\r\n }\r\n\r\n const diff = clickTime.getTime() - lastClickTime.getTime();\r\n\r\n if (diff >= timeAllowedBetweenClicks) resetClicks();\r\n increaseCounter(clickTime);\r\n }\r\n\r\n function resetClicks() {\r\n lastClickTime = null;\r\n clickCounter = 0;\r\n }\r\n\r\n function increaseCounter(timeClicked: Date) {\r\n clickCounter++;\r\n lastClickTime = timeClicked;\r\n\r\n if (\r\n clickCounter > requiredClicks &&\r\n window.user.permissions.shell\r\n ) {\r\n // handled clicks are +1 from the actual clicks because of the double event handler\r\n resetClicks();\r\n\r\n succeed();\r\n }\r\n }\r\n\r\n function succeed() {\r\n const devAreaUnlocked = localStorageService.get(\r\n 'ExperimentalAreaUnlocked'\r\n );\r\n if (devAreaUnlocked) {\r\n Config.changeExperimentalAreaState(false);\r\n localStorageService.store(\r\n 'ExperimentalAreaUnlocked',\r\n false\r\n );\r\n toastMessageService.warning('Config developer area locked');\r\n $state.go('dashboard.tasks');\r\n } else {\r\n Config.changeExperimentalAreaState(true);\r\n localStorageService.store('ExperimentalAreaUnlocked', true);\r\n toastMessageService.warning(\r\n 'Config developer area unlocked'\r\n );\r\n }\r\n }\r\n\r\n return {\r\n link(\r\n scope: ng.IScope,\r\n el: ng.IAugmentedJQuery,\r\n attrs: ng.IAttributes\r\n ) {\r\n el.bind('mouseup click', (event: Event) => {\r\n handleClicks(event);\r\n });\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n angular.module('Umbrella')\r\n .config(['$stateProvider', ($stateProvider: ng.ui.IStateProvider) => {\r\n $stateProvider\r\n .state('dashboard.experimentalarea',\r\n {\r\n url: '/experimentalarea',\r\n reloadOnSearch: false,\r\n data: { pageTitle: 'Secret Area' },\r\n views: {\r\n overview: { templateUrl: '/ExperimentalArea/ExperimentalArea.html' }\r\n },\r\n onEnter: ['$state', 'LocalStorageService', ($state: ng.ui.IStateService, localStorageService: LocalStorageService) => {\r\n const areaUnlocked = localStorageService.get('ExperimentalAreaUnlocked');\r\n if (!areaUnlocked)\r\n $state.go('dashboard.tasks');\r\n }]\r\n });\r\n }]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n angular.module('Umbrella')\r\n .config(['$stateProvider', ($stateProvider: ng.ui.IStateProvider) => {\r\n $stateProvider\r\n .state('umbrella.windowsauth',\r\n {\r\n url: '/windows-auth',\r\n data: { pageTitle: 'Windows authentication' },\r\n views: {\r\n 'new@': { templateUrl: '/ExperimentalArea/WindowsAuthentication.html' }\r\n }, \r\n onEnter: ['$state', ($state: ng.ui.IStateService) => {\r\n Config.switchFeatureFlag('windowsAuthentication', true);\r\n }] \r\n });\r\n }]);\r\n}","/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n\r\n @Component('Umbrella', {\r\n selector: 'setup-features',\r\n templateUrl: '/ExperimentalArea/SetupFeaturesComponent/SetupFeaturesComponent.html'\r\n })\r\n @Inject('$rootScope')\r\n class SetupFeaturesComponent {\r\n public flags: Config.FeatureFlag[];\r\n private configSub: Rx.Disposable;\r\n constructor(private $rootScope: ng.IRootScopeService) { }\r\n $onInit() {\r\n const hasFeatureFlags = x => x && x.config && x.config.features;\r\n this.configSub = Config.configStore\r\n .state$\r\n .filter(hasFeatureFlags)\r\n .map(x => x.config.features)\r\n .subscribe(x => this.flags = x);\r\n }\r\n\r\n $onDestroy() {\r\n if (this.configSub)\r\n this.configSub.dispose();\r\n this.configSub = null;\r\n }\r\n\r\n public switchFlag(flag: Config.FeatureFlag) {\r\n Config.switchFeatureFlag(flag.name, !flag.enabled);\r\n this.$rootScope.$broadcast(flag.name + 'Changed');\r\n }\r\n }\r\n}","/// \r\n/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n export const taskSelected$ = new Rx.Subject();\r\n\r\n angular\r\n .module('TaskHandling')\r\n .filter('hoursagoClass', function() {\r\n return function(hours: number, warningInXHours: number = -4) {\r\n if (hours > 0) {\r\n return '#f55753'; //@color-danger\r\n } else if (hours <= 0 && hours >= warningInXHours) {\r\n return '#fda12a'; //@color-warning\r\n }\r\n\r\n return '';\r\n };\r\n })\r\n .filter('toArray', function() {\r\n return function(obj, addKey) {\r\n if (!angular.isObject(obj)) return obj;\r\n\r\n if (addKey === false) {\r\n return Object.keys(obj).map(function(key) {\r\n return obj[key];\r\n });\r\n } else {\r\n return Object.keys(obj).map(function(key) {\r\n let value = obj[key];\r\n return angular.isObject(value)\r\n ? Object.defineProperty(value, '$key', {\r\n enumerable: false,\r\n value: key\r\n })\r\n : { $key: key, $value: value };\r\n });\r\n }\r\n };\r\n });\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Shared {\r\n export interface InfiniteListComponentState {}\r\n\r\n export interface MaterialInfiniteList {\r\n // required by material infinite list\r\n getItemAtIndex(index): any;\r\n getLength(): number;\r\n }\r\n\r\n export const toggleTaskListScroll$ = new Rx.Subject();\r\n\r\n @Component('Umbrella', {\r\n selector: 'infinite-list',\r\n templateUrl: '/InfiniteListComponent/InfiniteListComponent.html',\r\n bindings: {\r\n topItemIndex: ' any;\r\n private loadItemsFunction: (options?: any) => any;\r\n private itemCountLoaded = 0;\r\n private externalCollection: any[];\r\n private isFetching: boolean;\r\n private fetchTries = 0;\r\n private indexListener;\r\n private isTaskListFilterViewEnabledSubscription: Rx.Disposable;\r\n public isTaskListFilterViewEnabled: boolean;\r\n public totalItemsCountInternal: number;\r\n public topItemIndex: number;\r\n public startAtIndex: number;\r\n public itemTemplate: string;\r\n public isListEndReached: boolean;\r\n public startAtPage: number;\r\n\r\n constructor(private $scope: any) {\r\n this.topItemIndex = this.topItemIndex || 0;\r\n this.startAtIndex = this.startAtIndex || 0;\r\n this.itemsPerPage = this.itemsPerPage || 10;\r\n this.startAtPage = this.startAtPage && this.startAtPage > 0 ? this.startAtPage : 1;\r\n }\r\n\r\n public $onInit() {\r\n this.subscribeEvents();\r\n if (this.externalCollection) {\r\n this.itemCountLoaded = this.externalCollection.length;\r\n }\r\n\r\n this.loadUntilPage(this.startAtPage);\r\n\r\n this.indexListener = this.$scope.$watch('vm.topItemIndex', (newValue, oldValue) => {\r\n if (!newValue || !oldValue || !this.pageChangedCallback) {\r\n return;\r\n }\r\n\r\n const newPage = this.calculatePageForItemAtIndex(newValue);\r\n const oldPage = this.calculatePageForItemAtIndex(oldValue);\r\n\r\n if (newPage !== oldPage) {\r\n this.pageChangedCallback({ newPage });\r\n }\r\n });\r\n }\r\n\r\n public $onDestroy() {\r\n this.unsubscribeEvents();\r\n this.indexListener();\r\n }\r\n\r\n public $onChanges(bindings: {\r\n externalCollection: IBindingChange;\r\n totalItemsCount: IBindingChange;\r\n }) {\r\n if (bindings.externalCollection && bindings.externalCollection.currentValue) {\r\n this.onExternalCollectionUpdate(\r\n bindings.externalCollection.currentValue,\r\n bindings.externalCollection.previousValue\r\n );\r\n }\r\n\r\n if (bindings.totalItemsCount && bindings.totalItemsCount.currentValue) {\r\n this.onTotalItemsCountUpdate(\r\n bindings.totalItemsCount.currentValue,\r\n bindings.totalItemsCount.previousValue\r\n );\r\n }\r\n }\r\n\r\n private subscribeEvents() {\r\n this.isTaskListFilterViewEnabledSubscription = toggleTaskListScroll$.subscribe(() => {\r\n this.isTaskListFilterViewEnabled = !this.isTaskListFilterViewEnabled;\r\n });\r\n }\r\n\r\n private unsubscribeEvents() {\r\n if (this.isTaskListFilterViewEnabledSubscription) {\r\n this.isTaskListFilterViewEnabledSubscription.dispose();\r\n this.isTaskListFilterViewEnabledSubscription = null;\r\n }\r\n }\r\n\r\n public getItemAtIndex(index): any {\r\n if (index > this.itemCountLoaded || this.itemCountLoaded === 0) {\r\n this.fetchMoreItems();\r\n return null;\r\n }\r\n\r\n return this.externalCollection[index];\r\n }\r\n\r\n public getLength() {\r\n return this.itemCountLoaded;\r\n }\r\n\r\n private onExternalCollectionUpdate(updatedCollection: any[], previousCollectionState: any[]) {\r\n if (previousCollectionState && updatedCollection.length !== previousCollectionState.length) {\r\n this.fetchTries = 0;\r\n this.isFetching = false;\r\n this.isListEndReached = false;\r\n }\r\n\r\n if (updatedCollection.length === 0) {\r\n this.topItemIndex = 0;\r\n }\r\n\r\n this.itemCountLoaded = updatedCollection.length;\r\n\r\n if (this.totalItemsCountInternal && this.totalItemsCountInternal === updatedCollection.length) {\r\n this.isListEndReached = true;\r\n }\r\n }\r\n\r\n private onTotalItemsCountUpdate(newCount: number, oldCount: number) {\r\n this.totalItemsCountInternal = newCount * 1;\r\n\r\n if (oldCount && oldCount !== newCount) {\r\n this.topItemIndex = 0;\r\n this.isFetching = false;\r\n }\r\n\r\n if (this.totalItemsCountInternal <= 0 || this.totalItemsCountInternal === this.itemCountLoaded) {\r\n this.isListEndReached = true;\r\n } else {\r\n this.isListEndReached = false;\r\n }\r\n }\r\n\r\n private calculatePageForItemAtIndex(index: number) {\r\n return Math.ceil(index / this.itemsPerPage);\r\n }\r\n\r\n private calculateNextPageToRequest() {\r\n return Math.floor(this.itemCountLoaded / this.itemsPerPage) + 1;\r\n }\r\n\r\n private async fetchMoreItems() {\r\n if (this.isListEndReached) {\r\n return;\r\n }\r\n\r\n if (!this.isFetching) {\r\n if (this.fetchTries > 2) {\r\n this.isListEndReached = true;\r\n }\r\n this.isFetching = true;\r\n const itemCountBeforeFetch = this.itemCountLoaded * 1;\r\n await this.loadItemsFunction({\r\n page: this.calculateNextPageToRequest(),\r\n itemsPerPage: this.itemsPerPage\r\n });\r\n this.isFetching = false;\r\n\r\n if (itemCountBeforeFetch === this.itemCountLoaded) {\r\n this.fetchTries++;\r\n }\r\n }\r\n }\r\n\r\n private async loadUntilPage(page) {\r\n const itemsToLoad = page * this.itemsPerPage;\r\n\r\n while (this.itemCountLoaded < itemsToLoad && !this.isListEndReached) {\r\n await this.fetchMoreItems();\r\n }\r\n\r\n this.topItemIndex = (page - 1) * this.itemsPerPage;\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.KeycloakAuth {\r\n\r\n export let keycloak: Keycloak.KeycloakInstance = null;\r\n\r\n function startSession(): void {\r\n const headers = {\r\n 'Authorization': `Bearer ${keycloak.token}`\r\n };\r\n\r\n $.ajax(Config.makeAbsoluteApiUrl('api/v1/system/session'), {\r\n dataType: 'json',\r\n headers: headers,\r\n cache: false,\r\n success: (x: SessionState) =>\r\n session$.onNext({\r\n ...x,\r\n accessToken: keycloak.token\r\n }),\r\n error: (jqXHR, textStatus, errorThrown) =>\r\n session$.onNext({\r\n user: null,\r\n accessToken: null,\r\n config: null,\r\n error: {\r\n name: 'NotAuthorized',\r\n message: `Status: ${textStatus || '(null)'}. Error: ${errorThrown || '(null)'}`,\r\n stack: ''\r\n }\r\n })\r\n });\r\n }\r\n\r\n const startKeycloak = async function(cfg: Config.Config) {\r\n console.debug(cfg.keycloak);\r\n const KeycloakCtor = (window).kc;\r\n keycloak = new KeycloakCtor(cfg.keycloak);\r\n\r\n const keycloakInitOptions: Keycloak.KeycloakInitOptions = {\r\n scope: \"openid suite-user identity-provider-user\",\r\n pkceMethod: \"S256\",\r\n responseMode: \"query\",\r\n redirectUri: `${document.location.origin}${document.location.pathname}${document.location.hash || '#/dashboard/taken/overzicht'}`,\r\n onLoad: \"login-required\",\r\n timeSkew: 0,\r\n checkLoginIframe: false\r\n };\r\n\r\n const succeeded = await keycloak.init(keycloakInitOptions);\r\n if (succeeded) {\r\n console.debug('logged in!');\r\n console.debug(keycloak.token);\r\n startSession();\r\n\r\n setInterval(async () => {\r\n try {\r\n const refreshed = await keycloak.updateToken(70);\r\n\r\n if (refreshed) {\r\n session$.onNext({\r\n ...session$.getValue(),\r\n accessToken: keycloak.token\r\n }),\r\n console.debug('Token refreshed');\r\n } else {\r\n console.warn('Token not refreshed');\r\n }\r\n } catch {\r\n console.error('Failed to refresh token');\r\n }\r\n }, 50000)\r\n } else {\r\n console.error('Failed to login', succeeded);\r\n }\r\n }\r\n\r\n Umbrella.Config.configStore.state$\r\n .map(state => {\r\n return state && state.config;\r\n })\r\n .skipWhile(cfg => {\r\n return !(cfg && cfg.keycloak);\r\n })\r\n .take(1)\r\n .subscribe(cfg => startKeycloak(cfg));\r\n}","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules {\r\n interface AppControllerScope extends ng.IScope {\r\n isSelfserviceModule(): boolean;\r\n isDashBoardModule(): boolean;\r\n isLegacyBrowser(): boolean;\r\n isMobileDevice(): boolean;\r\n getModuleTheme(): any;\r\n }\r\n\r\n @Controller('Umbrella', 'AppController')\r\n @Inject('$rootScope', '$scope', '$window', '$state')\r\n class AppController {\r\n constructor(\r\n $rootScope: IUmbrellaRootScope,\r\n $scope: AppControllerScope,\r\n $window: any,\r\n $state: ng.ui.IStateService\r\n ) {\r\n $scope.isSelfserviceModule = () => {\r\n return $state.includes('selfservicedesign');\r\n };\r\n\r\n $scope.getModuleTheme = () => {\r\n if (\r\n $state.includes('dashboard.tasks') ||\r\n $state.includes('dashboard.tasks.*') ||\r\n $state.includes('dashboard.chat') ||\r\n $state.includes('dashboard.chat.*') ||\r\n $state.includes('dashboard.mail') ||\r\n $state.includes('dashboard.mail.*')\r\n )\r\n return 'umb-green';\r\n else if ($state.includes('dashboard.caseflow') || $state.includes('dashboard.caseflow.*'))\r\n return 'umb-purple';\r\n else return 'plainstate';\r\n };\r\n\r\n $scope.isLegacyBrowser = () => {\r\n return !!navigator.userAgent.match(/MSIE/i) || !!navigator.userAgent.match(/Trident.*rv:11\\./);\r\n };\r\n\r\n $scope.isMobileDevice = () => {\r\n // Adapted from http://www.detectmobilebrowsers.com\r\n const ua = $window.navigator.userAgent || $window.navigator.vendor || $window.opera;\r\n return (\r\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(\r\n ua\r\n ) ||\r\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\r\n ua.substr(0, 4)\r\n )\r\n );\r\n };\r\n\r\n\r\n // Kill all animations for IE:\r\n if ('ActiveXObject' in window) $.fx.off = true;\r\n\r\n $rootScope.$on('$stateChangeSuccess', (event, toState: ng.ui.IState) => {\r\n const subTitle = toState && toState.data && toState.data.pageTitle;\r\n document.title = `Umbrella ${subTitle && '- '}${subTitle}`;\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Cases {\r\n import Guid = System.Guid;\r\n import StatusFilter = Umbrella.Modules.StatusFilter;\r\n\r\n export interface ICaseHistoryResource\r\n extends CaseHistoryModel,\r\n angular.resource.IResource {}\r\n export interface ISimpleCaseResource\r\n extends Umbrella.Modules.Customers.CaseModel,\r\n angular.resource.IResource<\r\n Umbrella.Modules.Customers.CaseModel\r\n > {}\r\n export interface ISimpleCaseV2Resource\r\n extends Umbrella.Modules.Customers.v2.CaseModel,\r\n angular.resource.IResource<\r\n Umbrella.Modules.Customers.v2.CaseModel\r\n > {}\r\n\r\n export interface DeleteMediaRequestParams extends IdRequestParams {\r\n mediaId: System.Guid;\r\n }\r\n\r\n export interface FilterHistoryParams extends PagedRequestWithIdParams {\r\n query: string;\r\n category: string;\r\n contractId: Guid;\r\n sssIds: System.Guid[];\r\n tagIds: System.Guid[];\r\n status: StatusFilter;\r\n channel: ChannelType;\r\n }\r\n\r\n export interface ICaseHistoryResourceClass\r\n extends angular.resource.IResourceClass {\r\n getById(params: IdRequestParams): ISimpleCaseResource;\r\n getByIdV2(params: IdRequestParams): ISimpleCaseV2Resource;\r\n getCaseMedia(params: IdRequestParams): ng.resource.IResource;\r\n deleteMediaItem(params: DeleteMediaRequestParams): ISimpleCaseResource;\r\n getByContractId(\r\n params: PagedRequestWithIdParams\r\n ): ng.resource.IResource>;\r\n getByEmployeeId(\r\n params: PagedRequestWithIdParams\r\n ): ng.resource.IResource>;\r\n getBySubjectId(\r\n params: PagedRequestWithIdParams\r\n ): ng.resource.IResource>;\r\n getByUnitId(\r\n params: PagedRequestWithIdParams\r\n ): ng.resource.IResource>;\r\n getByComplexId(\r\n params: PagedRequestWithIdParams\r\n ): ng.resource.IResource>;\r\n getByPersonId(\r\n params: PagedRequestWithIdParams\r\n ): ng.resource.IResource>;\r\n filterByPersonIdAndFilters(\r\n params: FilterHistoryParams\r\n ): ng.resource.IResource>;\r\n startTimelineExport(params: IdRequestParams): ISimpleCaseResource;\r\n deleteItem(\r\n params: IdRequestParams,\r\n succes?: Function,\r\n error?: Function\r\n ): ng.resource.IResource>;\r\n restoreItem(\r\n params: IdRequestParams,\r\n succes?: Function,\r\n error?: Function\r\n ): ng.resource.IResource>;\r\n }\r\n\r\n angular.module('Umbrella').service('CaseHistoryResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/case/:action/:id/:subaction',\r\n {\r\n action: '@action',\r\n id: '@id'\r\n },\r\n {\r\n getById: {\r\n method: 'GET',\r\n isArray: false\r\n },\r\n getByIdV2: {\r\n url: 'api/v2/case/:action/:id',\r\n method: 'GET',\r\n isArray: false\r\n },\r\n getCaseMedia: {\r\n url: 'api/v2/case/:action/:id',\r\n method: 'GET',\r\n isArray: true,\r\n params: {\r\n action: 'casemedia',\r\n id: '@id'\r\n }\r\n },\r\n deleteMediaItem: {\r\n url: '/api/v1/case/:id/:action/:mediaId',\r\n method: 'DELETE',\r\n isArray: false,\r\n params: {\r\n action: 'deletemediaitem',\r\n id: '@id',\r\n mediaId: '@mediaId'\r\n }\r\n },\r\n getByContractId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'contract',\r\n id: ''\r\n }\r\n },\r\n getByEmployeeId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'employee',\r\n id: ''\r\n }\r\n },\r\n getBySubjectId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'role',\r\n id: ''\r\n }\r\n },\r\n getByUnitId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'unit',\r\n id: ''\r\n }\r\n },\r\n getByComplexId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'complex',\r\n id: ''\r\n }\r\n },\r\n getByPersonId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'person',\r\n id: ''\r\n }\r\n },\r\n filterByPersonIdAndFilters: {\r\n url: '/api/v1/case/person/:id/filters',\r\n method: 'POST',\r\n isArray: false\r\n },\r\n startTimelineExport: {\r\n url: '/api/v1/case/person/:id/export',\r\n method: 'POST',\r\n isArray: false,\r\n },\r\n deleteItem: {\r\n url: '/api/v1/case/:id/',\r\n method: 'DELETE',\r\n isArray: false,\r\n params: {\r\n id: '@id'\r\n }\r\n },\r\n restoreItem: {\r\n url: '/api/v1/case/:id/:action',\r\n method: 'PUT',\r\n isArray: false,\r\n params: {\r\n action: 'restore',\r\n id: '@id'\r\n }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules {\r\n angular\r\n .module('Umbrella')\r\n\r\n .run([\r\n '$rootScope',\r\n '$state',\r\n '$stateParams',\r\n (\r\n $rootScope: IUmbrellaRootScope,\r\n $state: ng.ui.IStateService,\r\n $stateParams: ng.ui.IStateParamsService\r\n ) => {\r\n $rootScope.user = window.user;\r\n $rootScope.$state = $state;\r\n $rootScope.$stateParams = $stateParams;\r\n $rootScope.isloading = false;\r\n\r\n $rootScope.$on(\r\n '$stateChangeStart',\r\n (\r\n event: ng.IAngularEvent,\r\n toState: ng.ui.IState,\r\n toParams: ng.ui.IStateParamsService,\r\n fromState: ng.ui.IState,\r\n fromParams: ng.ui.IStateParamsService\r\n ) => {\r\n $rootScope.isloading = true;\r\n }\r\n );\r\n\r\n $rootScope.$on(\r\n '$stateChangeSuccess',\r\n (\r\n event: ng.IAngularEvent,\r\n toState: ng.ui.IState,\r\n toParams: ng.ui.IStateParamsService,\r\n fromState: ng.ui.IState,\r\n fromParams: ng.ui.IStateParamsService\r\n ) => {\r\n $rootScope.isloading = false;\r\n }\r\n );\r\n\r\n $rootScope.$on(\r\n '$stateChangeError',\r\n (\r\n event: ng.IAngularEvent,\r\n toState: ng.ui.IState,\r\n toParams: ng.ui.IStateParamsService,\r\n fromState: ng.ui.IState,\r\n fromParams: ng.ui.IStateParamsService,\r\n error\r\n ) => {\r\n $rootScope.isloading = false;\r\n }\r\n );\r\n\r\n $rootScope.safeApply = function(fn) {\r\n let phase = (this.$root || this).$$phase;\r\n if (phase === '$apply' || phase === '$digest') {\r\n if (fn && typeof fn === 'function') {\r\n fn();\r\n }\r\n } else {\r\n this.$apply(fn);\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.Modules {\r\n export interface IStateMenuTab {\r\n state: string;\r\n title: string;\r\n }\r\n\r\n export interface IMenuTab {\r\n state?: string;\r\n routeTail?: string;\r\n title: string;\r\n }\r\n\r\n @Component('Umbrella', {\r\n selector: 'menu-tabs',\r\n\r\n template: `\r\n \r\n \r\n \r\n `,\r\n bindings: {\r\n tabs: '<',\r\n cssClass: '@'\r\n }\r\n })\r\n @Inject('$state', '$scope')\r\n class MenuTabsComponent {\r\n public cssClass: string;\r\n public tabs: IStateMenuTab[];\r\n public selectedTabIndex: number;\r\n public name: string;\r\n\r\n constructor(private $state: ng.ui.IStateService, private $scope: any) {}\r\n\r\n public $onInit() {\r\n this.$scope.$watch(() => this.$state.current.name, () => {\r\n this.selectedTabIndex = this.getSelectedTabIndex();\r\n });\r\n }\r\n\r\n public isActiveTab(tab: IStateMenuTab): boolean {\r\n return this.$state.includes(tab.state);\r\n }\r\n\r\n private getSelectedTabIndex(): number {\r\n let index = 0;\r\n for (const tab of this.tabs) {\r\n if (this.isActiveTab(tab)) return index;\r\n\r\n index += 1;\r\n }\r\n\r\n return index;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules {\r\n import ChatService = Umbrella.ChatConversationHandling.ChatService;\r\n import ChannelType = Modules.ChannelType;\r\n\r\n interface ChannelRestoreInfo {\r\n channelType: ChannelType;\r\n userId: System.Guid;\r\n }\r\n\r\n @Service('Umbrella', 'RestoreChannelService')\r\n @Inject('LocalStorageService', 'ChatService')\r\n export class RestoreChannelService {\r\n private localStorageKey = 'RestoreChannelData';\r\n\r\n constructor(private localStorageService: LocalStorageService, private chatService: ChatService) {}\r\n\r\n public saveChannel(channelType: ChannelType): void {\r\n const info: ChannelRestoreInfo = {\r\n channelType: channelType,\r\n userId: window.user.id\r\n };\r\n\r\n this.localStorageService.store(this.buildKey(window.user.id), info);\r\n }\r\n\r\n public removeChannelInfo(): void {\r\n this.localStorageService.remove(this.buildKey(window.user.id));\r\n }\r\n\r\n public restoreSavedChannel(): void {\r\n const channelInfo = this.localStorageService.get(this.buildKey(window.user.id));\r\n if (channelInfo) {\r\n if (channelInfo.channelType === ChannelType.Chat) {\r\n this.chatService.registerOperator();\r\n }\r\n }\r\n }\r\n\r\n private buildKey(userId: System.Guid): string {\r\n return `${this.localStorageKey}${userId}`;\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.Modules.Accounts {\r\n import AccountModel = Umbrella.Accounts.AccountModel;\r\n\r\n @Component('CustomerService', {\r\n selector: 'card-account-details',\r\n templateUrl: '/Modules/Accounts/CardAccountDetailsComponent/CardAccountDetails.html',\r\n bindings: {\r\n person: '<',\r\n onCreated: '&',\r\n onCreateFailed: '&',\r\n onRecovered: '&',\r\n onRecoverFailed: '&'\r\n }\r\n })\r\n @Inject('AccountService', 'ToastMessageService', '$mdDialog')\r\n class CardAccountDetailsComponent {\r\n public person: PersonModel;\r\n public account: AccountModel.Activation;\r\n public onCreated: () => void;\r\n public onCreateFailed: () => void;\r\n public onRecovered: () => void;\r\n public onRecoverFailed: () => void;\r\n public loading = true;\r\n\r\n public isBlockingAccount = false;\r\n public isUnblockingAccount = false;\r\n private creatingAccount = false;\r\n private recoveringAccount = false;\r\n private createEnabled: boolean;\r\n private createDisabledReason: string;\r\n public accountActivationVerificationMethod: string;\r\n\r\n constructor(\r\n private accountService: AccountService,\r\n private ToastMessageService: ToastMessageService,\r\n private $mdDialog\r\n ) {}\r\n\r\n public $onInit(): void {\r\n this.loading = true;\r\n this.createEnabled = true; // TODO\r\n if (!this.createEnabled)\r\n this.createDisabledReason =\r\n 'Account aanmaken niet mogelijk, want zowel woonadres als postadres is niet bekend voor deze klant.';\r\n\r\n this.accountService\r\n .get(this.person.id)\r\n .then(account => {\r\n // hack to recognize NoContent http result\r\n if (account && account.id !== undefined) this.setAccount(account);\r\n })\r\n .finally(() => (this.loading = false));\r\n\r\n this.setAccountActivationVerificationMethod();\r\n }\r\n\r\n public isEnabled(): boolean {\r\n return window.config.modules.accounts.enabled;\r\n }\r\n \r\n public canCreate(): boolean {\r\n return this.createEnabled && this.accountService.canCreate();\r\n }\r\n\r\n public isRecoveryEnabled(): boolean {\r\n return this.accountService.isRecoverable(this.account);\r\n }\r\n\r\n public isCreatingAccount(): boolean {\r\n return this.creatingAccount;\r\n }\r\n\r\n public isRecoveringAccount(): boolean {\r\n return this.recoveringAccount;\r\n }\r\n\r\n public isActive(): boolean {\r\n return this.account && this.accountService.isActive(this.account);\r\n }\r\n\r\n public isInactive(): boolean {\r\n return this.account && this.accountService.isInactive(this.account);\r\n }\r\n\r\n public hasDisableReason(): boolean {\r\n return !this.createEnabled && !!this.createDisabledReason;\r\n }\r\n\r\n public getStatus(): string {\r\n if (this.account.isExpired && this.account.isBlocked) return 'Geblokkeerd en Verlopen';\r\n if (this.account.isExpired) return 'Verlopen';\r\n if (this.account.isBlocked) return 'Geblokkeerd';\r\n if (this.isActive()) return 'Actief';\r\n return 'Niet actief';\r\n }\r\n\r\n public createAccount(): void {\r\n this.creatingAccount = true;\r\n\r\n const email =\r\n this.person &&\r\n this.person.contactDetails &&\r\n this.person.contactDetails.emailAddresses &&\r\n this.person.contactDetails.emailAddresses.length &&\r\n this.person.contactDetails.emailAddresses[0].email;\r\n this.accountService\r\n .create(this.person.id, email)\r\n .then(response => {\r\n this.setAccount(response.data);\r\n this.onCreated();\r\n })\r\n .catch(e => this.onCreateFailed())\r\n .finally(() => (this.creatingAccount = false));\r\n }\r\n\r\n public startRecovery(): void {\r\n this.recoveringAccount = true;\r\n this.accountService\r\n .startRecovery(this.account.email)\r\n .then(() => this.onRecovered())\r\n .catch(() => {\r\n this.onRecoverFailed();\r\n })\r\n .finally(() => (this.recoveringAccount = false));\r\n }\r\n\r\n public isBusy(): boolean {\r\n return (\r\n this.loading ||\r\n this.isBlockingAccount ||\r\n this.isUnblockingAccount ||\r\n this.creatingAccount ||\r\n this.recoveringAccount\r\n );\r\n }\r\n\r\n public canBlockAccount(): boolean {\r\n return this.account && !this.account.isBlocked && window.user.permissions.blockAccount;\r\n }\r\n\r\n public blockAccount(): void {\r\n this.isBlockingAccount = true;\r\n this.accountService\r\n .block(this.account.personId)\r\n .then(acc => this.setAccount(acc))\r\n .finally(() => (this.isBlockingAccount = false));\r\n }\r\n\r\n public canUnblockAccount(): boolean {\r\n return this.account && this.account.isBlocked && window.user.permissions.blockAccount;\r\n }\r\n\r\n public unblockAccount(): void {\r\n this.isUnblockingAccount = true;\r\n this.accountService\r\n .unblock(this.account.personId)\r\n .then(acc => this.setAccount(acc))\r\n .finally(() => (this.isUnblockingAccount = false));\r\n }\r\n\r\n public deleteAccount(personId: System.Guid): void {\r\n const dialog = this.$mdDialog\r\n .confirm()\r\n .title('Account verwijderen')\r\n .textContent('Weet je zeker dat je dit account wilt verwijderen?')\r\n .ariaLabel('Confirm')\r\n .ok('Ja')\r\n .cancel('Nee')\r\n .theme('umb-green');\r\n\r\n this.$mdDialog.show(dialog).then(() =>\r\n this.accountService\r\n .delete(personId)\r\n .then(() => {\r\n this.account = null;\r\n this.ToastMessageService.success('Account successvol verwijderd');\r\n })\r\n .catch(Error => this.ToastMessageService.error('Fout opgetreden tijdens verwijderen account'))\r\n );\r\n }\r\n\r\n private setAccount(account: AccountModel.Activation): void {\r\n this.account = account;\r\n }\r\n\r\n private setAccountActivationVerificationMethod() {\r\n if (window &&\r\n window.config &&\r\n window.config.modules &&\r\n window.config.modules.accounts &&\r\n window.config.modules.accounts.accountActivationVerificationMethod) {\r\n this.accountActivationVerificationMethod = window.config.modules.accounts.accountActivationVerificationMethod;\r\n }\r\n else {\r\n this.accountActivationVerificationMethod = 'notAvailable';\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Announcements {\r\n export interface AnnouncementResource\r\n extends angular.resource.IResource {}\r\n\r\n export interface AnnouncementResourceClass\r\n extends angular.resource.IResourceClass {\r\n getOverview(\r\n params: PagedRequestParams\r\n ): angular.resource.IResource>;\r\n getCount(): angular.resource.IResource;\r\n search(\r\n params: PagedRequestWithIdParams\r\n ): angular.resource.IResource>;\r\n getItem(id: IdRequestParams): AnnouncementResource;\r\n byUnitId(\r\n id: PagedRequestWithIdParams\r\n ): angular.resource.IResource>;\r\n byComplexId(\r\n id: PagedRequestWithIdParams\r\n ): angular.resource.IResource>;\r\n byContractId(\r\n id: PagedRequestWithIdParams\r\n ): angular.resource.IResource>;\r\n }\r\n\r\n angular.module('Umbrella').service('AnnouncementResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) => {\r\n return $resource(\r\n '/api/v1/announcement/:action/:subaction/:id',\r\n {},\r\n {\r\n getOverview: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'overview', id: '' }\r\n },\r\n getCount: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'overview', subaction: 'count', id: '' }\r\n },\r\n search: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'overview', subaction: 'search', id: '@id' }\r\n },\r\n getItem: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n save: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: 'admin' },\r\n transformRequest: (data: string) => {\r\n return JSON.stringify(data);\r\n }\r\n },\r\n byUnitId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'byUnit', id: '@id' }\r\n },\r\n byComplexId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'byComplex', id: '@id' }\r\n },\r\n byContractId: {\r\n methid: 'GET',\r\n isArray: false,\r\n params: { action: 'contract', id: '@id' }\r\n }\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\ninterface SignalR {\r\n announcementHub: Umbrella.Modules.Announcements.IAnnouncementHubProxy;\r\n}\r\n\r\nnamespace Umbrella.Modules.Announcements {\r\n export interface IAnnouncementHubClient {\r\n created(announcement: AnnouncementModel);\r\n deleted(announcement: AnnouncementModel);\r\n contentsModified(announcement: AnnouncementModel);\r\n }\r\n\r\n export interface IAnnouncementHubProxy extends HubProxy {\r\n client: IAnnouncementHubClient;\r\n }\r\n\r\n export const announcementHubOnCreated$ = new Rx.Subject<\r\n AnnouncementModel\r\n >();\r\n export const announcementHubOnUpdated$ = new Rx.Subject<\r\n AnnouncementModel\r\n >();\r\n export const announcementHubOnDeleted$ = new Rx.Subject<\r\n AnnouncementModel\r\n >();\r\n\r\n Modules.onSignalRInitialized(() => {\r\n $.connection.announcementHub.client.created = model => {\r\n announcementHubOnCreated$.onNext(model);\r\n };\r\n $.connection.announcementHub.client.contentsModified = model => {\r\n announcementHubOnUpdated$.onNext(model);\r\n };\r\n $.connection.announcementHub.client.deleted = model => {\r\n announcementHubOnDeleted$.onNext(model);\r\n };\r\n });\r\n}\r\n","namespace Umbrella.Modules.Announcements {\r\n export interface IAnnouncementsResource\r\n extends angular.resource.IResource {}\r\n\r\n export interface PersonAnnouncementResourceClass\r\n extends angular.resource.IResourceClass {\r\n getById(params: PagedRequestWithIdParams): IAnnouncementsResource;\r\n getPagedByPersonId(\r\n params: PagedRequestWithIdParams\r\n ): angular.resource.IResource>;\r\n }\r\n\r\n angular.module('Umbrella').service('PersonAnnouncementResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) => {\r\n return $resource(\r\n '/api/v1/announcement/:action/:id',\r\n {},\r\n {\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n getPagedByPersonId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'person', id: '' }\r\n }\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.Modules.Announcements {\r\n @Component('Umbrella', {\r\n selector: 'announcement-panel',\r\n templateUrl:\r\n '/Modules/Announcements/AnnouncementPanelComponent/AnnouncementPanel.html'\r\n })\r\n @Inject('AnnouncementResource', 'LocalStorageService')\r\n class AnnouncementPanelComponent {\r\n public announcements: AnnouncementModel[] = [];\r\n public displayPanel = false;\r\n public lastReadOn: Date;\r\n\r\n private LAST_READ = 'AnnouncementPanelLastReadOn';\r\n private createdSubscription: Rx.IDisposable;\r\n private modifiedSubscription: Rx.IDisposable;\r\n private deletedSubscription: Rx.IDisposable;\r\n\r\n constructor(\r\n private announcementResource: AnnouncementResourceClass,\r\n private localStorageService: LocalStorageService\r\n ) {}\r\n\r\n public async $onInit(): Promise {\r\n const storedDate = this.localStorageService.get(this.LAST_READ);\r\n if (storedDate) this.lastReadOn = new Date(storedDate);\r\n\r\n await this.loadAnnouncements();\r\n this.subscribeEvents();\r\n }\r\n\r\n public $onDestroy() {\r\n this.unsubscribeEvents();\r\n }\r\n\r\n public togglePanel(): void {\r\n this.displayPanel = !this.displayPanel;\r\n if (this.displayPanel)\r\n this.localStorageService.store(this.LAST_READ, Date.now());\r\n else this.lastReadOn = new Date();\r\n }\r\n\r\n public toggleWhenOpen(): void {\r\n if (this.displayPanel) this.togglePanel();\r\n }\r\n\r\n public hasReadBefore(announcement: AnnouncementModel): boolean {\r\n if (!this.lastReadOn) return false;\r\n\r\n return (\r\n new Date(announcement.created).getTime() <\r\n this.lastReadOn.getTime()\r\n );\r\n }\r\n\r\n public nrOfUnreadAnnouncements(): number {\r\n if (!this.announcements || !this.announcements.length) return 0;\r\n\r\n return !this.lastReadOn\r\n ? this.announcements.length\r\n : this.announcements.filter(x => !this.hasReadBefore(x)).length;\r\n }\r\n\r\n private async loadAnnouncements(): Promise {\r\n const result = await this.announcementResource.getOverview({\r\n page: 0,\r\n pageSize: 10\r\n }).$promise;\r\n if (result && result.items) this.announcements = result.items;\r\n }\r\n\r\n private subscribeEvents(): void {\r\n const isGeneralAnnouncement = (x: AnnouncementModel) =>\r\n x &&\r\n (!x.personIds || !x.personIds.length) &&\r\n (!x.residentialZoneIds || !x.residentialZoneIds.length);\r\n const isInPublicationPeriod = (x: AnnouncementModel) =>\r\n x &&\r\n (!x.startDate || x.startDate < new Date()) &&\r\n (!x.endDate || x.endDate > new Date());\r\n\r\n this.createdSubscription = announcementHubOnCreated$\r\n .filter(isGeneralAnnouncement)\r\n .filter(isInPublicationPeriod)\r\n .subscribe(announcement => this.addAnnouncement(announcement));\r\n\r\n this.modifiedSubscription = announcementHubOnUpdated$.subscribe(\r\n announcement => this.loadAnnouncements()\r\n );\r\n this.deletedSubscription = announcementHubOnDeleted$.subscribe(\r\n announcement => this.loadAnnouncements()\r\n );\r\n }\r\n\r\n private unsubscribeEvents(): void {\r\n if (this.createdSubscription) {\r\n this.createdSubscription.dispose();\r\n this.createdSubscription = null;\r\n }\r\n\r\n if (this.modifiedSubscription) {\r\n this.modifiedSubscription.dispose();\r\n this.modifiedSubscription = null;\r\n }\r\n\r\n if (this.deletedSubscription) {\r\n this.deletedSubscription.dispose();\r\n this.deletedSubscription = null;\r\n }\r\n }\r\n\r\n private addAnnouncement(announcement: AnnouncementModel): void {\r\n this.announcements = [announcement, ...this.announcements];\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Announcements {\r\n @Pipe('Umbrella', 'safeHrefs')\r\n class SafeHrefsFilter {\r\n public transform(html: string) {\r\n return html\r\n ? html.replace(\r\n '|\\s.*>))\\/?.*?>/gm, '')\r\n : '';\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Chat {\r\n import IResource = ng.resource.IResource;\r\n import ChatConfiguration = Umbrella.Chat.ChatConfigurationModel;\r\n\r\n export interface NamedParams {\r\n name: string;\r\n }\r\n\r\n export interface ChatConfigResource {\r\n get(): IResource;\r\n update(section: ChatConfiguration): IResource;\r\n }\r\n\r\n angular.module('Chat').service('ChatConfigResource', [\r\n '$resource',\r\n $resource =>\r\n $resource('chat/api/v1/chat/config', null, {\r\n get: {\r\n method: 'GET',\r\n isArray: false\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false\r\n }\r\n })\r\n ]);\r\n}\r\n","namespace Umbrella.ChatConversationHandling {\r\n @Pipe('Umbrella', 'chatProviderName')\r\n class ChatProviderNameFilter {\r\n public transform(providerType: ChatProviderType): string {\r\n return ChatProviderType[providerType];\r\n }\r\n }\r\n}\r\n","namespace Umbrella.ChatConversationHandling {\r\n import IResource = ng.resource.IResource;\r\n import WaitingStatisticsModel = Umbrella.Chat.WaitingStatisticsModel;\r\n import OperatorModel = Umbrella.Chat.OperatorModel;\r\n import ConversationRequestModel = Umbrella.Chat.ConversationRequestModel;\r\n import AddMessageInput = Umbrella.Chat.AddMessageInput;\r\n import ChatDefaultMessageModel = Umbrella.Chat.ChatDefaultMessageModel;\r\n import ChatOperatorModel = Umbrella.Chat.ChatOperatorModel;\r\n\r\n interface CustomerConversationRequestParams extends IdRequestParams {\r\n customerId: System.Guid;\r\n }\r\n\r\n interface LoginModel {\r\n firstName: string;\r\n lastName: string;\r\n avatar: string;\r\n }\r\n\r\n export interface ConversationIdResponseModel {\r\n kccConversationId: { kccConversationId: System.Guid };\r\n }\r\n\r\n export interface ChatResource {\r\n getById(params: IdRequestParams): IResource;\r\n getAllOperators(): IResource;\r\n getDefaultMessages(): IResource<{ messages: ChatDefaultMessageModel[] }>;\r\n register(params: LoginModel): IResource;\r\n login(): IResource;\r\n logout(): IResource;\r\n getActiveConversations(): IResource;\r\n getPendingConversations(): IResource;\r\n accept(params: IdRequestParams): IResource;\r\n pickup(params: IdRequestParams): IResource;\r\n detach(params: IdRequestParams): IResource;\r\n leave(params: IdRequestParams): IResource;\r\n endAcw(params: IdRequestParams): IResource;\r\n sendMessage(params: IdRequestParams, message: AddMessageInput): IResource;\r\n linkCustomer(params: CustomerConversationRequestParams): IResource;\r\n unlinkCustomer(params: IdRequestParams): IResource;\r\n getWaitingStats(): IResource;\r\n }\r\n\r\n angular.module('Chat').service('ChatResource', [\r\n '$resource',\r\n $resource => {\r\n const actionUrl = '/chatkcc/api/v1/:action';\r\n const actionIdSubactionUrl = '/chatkcc/api/v1/:action/:id/:subaction';\r\n const actionSubactionUrl = '/chatkcc/api/v1/:action/:subaction';\r\n const actionSubactionSubsubactionUrl = '/chatkcc/api/v1/:action/:subaction/:subsubaction';\r\n\r\n return $resource(\r\n '/chatkcc/api/v1/:action/:subaction/:id/:subsubaction/:subid',\r\n {},\r\n {\r\n getById: {\r\n url: '/chatkcc/api/v1/:action/:id',\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'conversations', id: '@id' }\r\n },\r\n getAllOperators: {\r\n url: actionUrl,\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'chatoperators' }\r\n },\r\n getDefaultMessages: {\r\n url: actionUrl,\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'defaultmessages' }\r\n },\r\n register: {\r\n url: actionSubactionUrl,\r\n method: 'POST',\r\n isArray: false,\r\n params: {\r\n action: 'chatoperators',\r\n subaction: 'register'\r\n },\r\n transformRequest: (data: string) => {\r\n return JSON.stringify(data);\r\n }\r\n },\r\n login: {\r\n url: actionSubactionSubsubactionUrl,\r\n method: 'POST',\r\n isArray: false,\r\n params: {\r\n action: 'chatoperators',\r\n subaction: 'sessions',\r\n subsubaction: 'login'\r\n }\r\n },\r\n logout: {\r\n url: actionSubactionSubsubactionUrl,\r\n method: 'POST',\r\n isArray: false,\r\n params: {\r\n action: 'chatoperators',\r\n subaction: 'sessions',\r\n subsubaction: 'logout'\r\n }\r\n },\r\n getPendingConversations: {\r\n url: actionSubactionUrl,\r\n method: 'GET',\r\n isArray: true,\r\n params: {\r\n action: 'conversations',\r\n subaction: 'pending'\r\n }\r\n },\r\n getActiveConversations: {\r\n url: actionSubactionUrl,\r\n method: 'GET',\r\n isArray: true,\r\n params: {\r\n action: 'conversations',\r\n subaction: 'active'\r\n }\r\n },\r\n accept: {\r\n url: '/chatkcc/api/v1/conversations/pending/:id/accept',\r\n method: 'POST',\r\n isArray: false,\r\n params: {\r\n id: '@id'\r\n }\r\n },\r\n pickup: {\r\n url: actionIdSubactionUrl,\r\n method: 'POST',\r\n isArray: false,\r\n params: {\r\n action: 'conversations',\r\n id: '@id',\r\n subaction: 'pickup'\r\n }\r\n },\r\n sendMessage: {\r\n method: 'POST',\r\n url: '/chatkcc/api/v1/conversations/:id/messages/new',\r\n isArray: false,\r\n params: {\r\n id: '@id'\r\n },\r\n transformRequest: (data: string) => {\r\n return JSON.stringify(data);\r\n }\r\n },\r\n leave: {\r\n url: actionIdSubactionUrl,\r\n method: 'POST',\r\n isArray: false,\r\n params: {\r\n action: 'conversations',\r\n id: '@id',\r\n subaction: 'leave'\r\n }\r\n },\r\n endAcw: {\r\n url: actionIdSubactionUrl,\r\n method: 'POST',\r\n isArray: false,\r\n params: {\r\n action: 'conversations',\r\n id: '@id',\r\n subaction: 'endacw'\r\n }\r\n },\r\n detach: {\r\n url: actionIdSubactionUrl,\r\n method: 'POST',\r\n isArray: false,\r\n params: {\r\n action: 'conversations',\r\n id: '@id',\r\n subaction: 'detach'\r\n }\r\n },\r\n linkCustomer: {\r\n url: '/chatkcc/api/v1/conversations/:id/customerId/:customerId',\r\n method: 'PUT',\r\n isArray: false,\r\n params: {\r\n id: '@id',\r\n customerId: '@customerId'\r\n }\r\n },\r\n unlinkCustomer: {\r\n url: '/chatkcc/api/v1/conversations/:id/customerId/',\r\n method: 'DELETE',\r\n isArray: false,\r\n params: {\r\n id: '@id'\r\n }\r\n },\r\n getWaitingStats: {\r\n url: actionUrl,\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'waitingstatistics'\r\n }\r\n }\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.ChatConversationHandling {\r\n import Guid = System.Guid;\r\n\r\n export interface Emojifier {\r\n emojify(input: string): string;\r\n }\r\n\r\n const pendingConversationStatuses = ['0', 'Pending'];\r\n const detachedConversationStatuses = ['1', 'Detached'];\r\n const activeConversationStatuses = ['2', 'Active'];\r\n const acwConversationStatuses = ['3', 'ACW'];\r\n const endedConversationStatuses = ['4', 'Ended'];\r\n\r\n export const isPendingConversation = (conversationStatus): boolean => {\r\n return pendingConversationStatuses.some(x => x == conversationStatus);\r\n };\r\n\r\n export const isDetachedConversation = (conversationStatus): boolean => {\r\n return detachedConversationStatuses.some(x => x == conversationStatus);\r\n };\r\n\r\n export const isActiveConversation = (conversationStatus): boolean => {\r\n return activeConversationStatuses.some(x => x == conversationStatus);\r\n };\r\n\r\n export const isAcwConversation = (conversationStatus): boolean => {\r\n return acwConversationStatuses.some(x => x == conversationStatus);\r\n };\r\n\r\n export const isEndedConversation = (conversationStatus): boolean => {\r\n return endedConversationStatuses.some(x => x == conversationStatus);\r\n };\r\n\r\n export const isActiveOrAcwConversation = (conversationStatus): boolean => {\r\n return isActiveConversation(conversationStatus) || isAcwConversation(conversationStatus);\r\n };\r\n\r\n export const isAcwOrEndedConversation = (conversationStatus): boolean => {\r\n return isAcwConversation(conversationStatus) || isEndedConversation(conversationStatus);\r\n };\r\n\r\n export const isPendingPendingOrEndedConversation = (conversationStatus): boolean => {\r\n return isPendingConversation(conversationStatus) || isEndedConversation(conversationStatus);\r\n };\r\n\r\n const newPopupStatuses = ['0', 'New'];\r\n const openPopupStatuses = ['1', 'Open'];\r\n const minimizedPopupStatuses = ['2', 'Minimized'];\r\n\r\n export const isConversationPopupStatusNew = (conversationPopupStatus): boolean => {\r\n return newPopupStatuses.some(x => x == conversationPopupStatus);\r\n };\r\n\r\n export const isConversationPopupStatusOpen = (conversationPopupStatus): boolean => {\r\n return openPopupStatuses.some(x => x == conversationPopupStatus);\r\n };\r\n\r\n export const isConversationPopupStatusMinimized = (conversationPopupStatus): boolean => {\r\n return minimizedPopupStatuses.some(x => x == conversationPopupStatus);\r\n };\r\n\r\n export const isConversationPopupStatusNewOrMinimized = (conversationPopupStatus): boolean => {\r\n return (\r\n newPopupStatuses.some(x => x == conversationPopupStatus) ||\r\n minimizedPopupStatuses.some(x => x == conversationPopupStatus)\r\n );\r\n };\r\n\r\n export const allowedEmoticons = [':)', ':(', ';)', ':D', ':O', ':P', ':d', ':o', ':p', ';('];\r\n\r\n export const emojifier = (() => {\r\n // :) is emoticon\r\n // smile.png is emoji\r\n\r\n const emoticonToEmojiMap = {\r\n ':)': '😃',\r\n ':(': '😟',\r\n ';)': '😉',\r\n ':D': '😁',\r\n ':d': '😁',\r\n ':O': '😱',\r\n ':o': '😱',\r\n ':P': '😋',\r\n ':p': '😋',\r\n ';(': '😢'\r\n };\r\n\r\n const self: Emojifier = {\r\n emojify: (input: string): string => {\r\n let emojifiedText: string = input;\r\n allowedEmoticons.forEach((currentEmoticon: string, index: number) => {\r\n if (input.indexOf(currentEmoticon) > -1)\r\n emojifiedText = input.replace(currentEmoticon, emoticonToEmojiMap[currentEmoticon]);\r\n });\r\n return emojifiedText;\r\n }\r\n };\r\n\r\n return self;\r\n })();\r\n}\r\n","namespace Umbrella.ChatConversationHandling {\r\n @Pipe('Umbrella', 'isAcwConversation')\r\n class IsAcwConversationFilter {\r\n public transform(conversation: ChatConversation): boolean {\r\n if (!conversation) return false;\r\n\r\n return isAcwConversation(conversation.status);\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.Modules.Chat {\r\n import ChatStore = Umbrella.ChatConversationHandling.ChatStore;\r\n import ChatService = Umbrella.ChatConversationHandling.ChatService;\r\n\r\n @Component('Chat', {\r\n selector: 'chat-attachment',\r\n templateUrl: '/Modules/Chat/AttachmentComponent/Attachment.html',\r\n bindings: {\r\n attachment: '<'\r\n }\r\n })\r\n @Inject('$state', 'ChatStore', 'ChatService')\r\n export class AttachmentComponent {\r\n public attachment: any;\r\n constructor(\r\n private $state: angular.ui.IStateService,\r\n private chatStore: ChatStore,\r\n private chatService: ChatService\r\n ) {}\r\n\r\n public isAudio(): boolean {\r\n switch (this.attachment.mimeType) {\r\n case 'audio/ogg; codecs=opus':\r\n case 'audio/wave':\r\n case 'audio/mpeg':\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n public isImage(): boolean {\r\n return this.attachment.mimeType === 'image/jpeg';\r\n }\r\n\r\n public isMovie(): boolean {\r\n return this.attachment.mimeType === 'video/mp4';\r\n }\r\n\r\n public getMimeType() {\r\n return this.attachment.mimeType;\r\n }\r\n\r\n public isFile(): boolean {\r\n return !this.isImage() && !this.isMovie() && !this.isAudio();\r\n }\r\n\r\n public getMediaUrl() {\r\n return Umbrella.Config.makeAbsoluteApiUrl(\r\n `/api/v1/media/view/${this.attachment.umbrellaMediaId}`\r\n );\r\n }\r\n\r\n public getDownloadUrl() {\r\n return `${this.getMediaUrl()}?asDownload=true`;\r\n }\r\n\r\n public getAttachmentFilename() {\r\n return this.attachment.filename || 'Bijlage';\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Chat {\r\n import ActivityRegistrationService = Umbrella.CustomerService.CustomerCard.Activities.Registration.ActivityRegistrationService;\r\n import SelectedPanel = Umbrella.CustomerService.CustomerCard.Activities.Registration.SelectedPanel;\r\n import CreateCustomerModel = Umbrella.Modules.Customers.CreateCustomerModel;\r\n import ContactPhoneNumberModel = Umbrella.Modules.Telephony.ContactPhoneNumberModel;\r\n import ChatStore = Umbrella.ChatConversationHandling.ChatStore;\r\n import ChatService = Umbrella.ChatConversationHandling.ChatService;\r\n import ChatConversation = Umbrella.ChatConversationHandling.ChatConversation;\r\n import ChatState = Umbrella.ChatConversationHandling.ChatState;\r\n import MessageDirections = Umbrella.ChatConversationHandling.MessageDirections;\r\n import customerCardStore = Umbrella.CustomerService.CustomerCard.customerCardStore;\r\n import CustomerModel = Umbrella.Modules.Customers.CustomerModel;\r\n\r\n @Component('Chat', {\r\n selector: 'chat-bar',\r\n templateUrl: '/Modules/Chat/ChatBarComponent/ChatBar.html'\r\n })\r\n @Inject(\r\n '$state',\r\n 'ChatStore',\r\n 'ChatService',\r\n 'ActivityRegistrationService',\r\n '$mdDialog',\r\n 'ToastMessageService',\r\n 'EmptyGuid',\r\n 'PersonResource'\r\n )\r\n export class ChatBarComponent {\r\n enabled: boolean;\r\n conversations: any[] = [];\r\n conversationsStatistics: Umbrella.ChatConversationHandling.ConversationStatistics[] = [];\r\n isCustomerCardOpen = false;\r\n $close: () => void;\r\n person: PersonModel;\r\n\r\n public visibleChatsCount;\r\n public collapsedTabsOpened = false;\r\n\r\n private currentOpenedConversationId: System.Guid;\r\n private activeConversationId: System.Guid;\r\n private lastActiveConversationId: System.Guid;\r\n private personObserver: Rx.IDisposable;\r\n private conversationObserver: Rx.IDisposable;\r\n private activeConversationObserver: Rx.IDisposable;\r\n\r\n constructor(\r\n private $state: angular.ui.IStateService,\r\n private chatStore: ChatStore,\r\n private chatService: ChatService,\r\n private activityRegistrationService: ActivityRegistrationService,\r\n private $mdDialog,\r\n private toastMessageService: ToastMessageService,\r\n private emptyGuid: System.Guid,\r\n private personResource: PersonResource\r\n ) {\r\n this.personObserver = customerCardStore.state$\r\n .map(s => s && s.personal && s.personal.person && s.personal.person)\r\n .filter(person => person !== null)\r\n .distinctUntilChanged()\r\n .subscribe(person => {\r\n this.person = person;\r\n });\r\n }\r\n\r\n public $onInit() {\r\n const hasConversations = (state: ChatState) => !!(state && state.conversations);\r\n const pickedUpConversations = (state: ChatState) => state.conversations.filter(x => !!x.id);\r\n\r\n this.conversationObserver = this.chatStore.state$\r\n .filter(hasConversations)\r\n .distinctUntilChanged()\r\n .subscribe(s => {\r\n this.conversations = s.conversations.filter(x => !!x.id);\r\n this.conversationsStatistics = s.conversationsStatistics;\r\n });\r\n\r\n this.activeConversationObserver = this.chatStore.state$\r\n .map(x => x && x.activeId)\r\n .distinctUntilChanged()\r\n .subscribe(conversationId => {\r\n if (!conversationId || conversationId !== this.activeConversationId)\r\n this.lastActiveConversationId = this.activeConversationId;\r\n\r\n this.activeConversationId = conversationId;\r\n });\r\n }\r\n\r\n public getUserConversations() {\r\n return this.conversations.filter(x => x.operator && x.operator.id);\r\n }\r\n\r\n public $onDestroy() {\r\n if (this.personObserver) {\r\n this.personObserver.dispose();\r\n this.personObserver = null;\r\n }\r\n\r\n if (this.conversationObserver) {\r\n this.conversationObserver.dispose();\r\n this.conversationObserver = null;\r\n }\r\n\r\n if (this.activeConversationObserver) {\r\n this.activeConversationObserver.dispose();\r\n this.activeConversationObserver = null;\r\n }\r\n }\r\n\r\n public getPendingMessages(conversation: ChatConversation): number {\r\n if (this.activeConversationId === conversation.id) return 0;\r\n\r\n const stats = this.conversationsStatistics.find(s => s && s.id === conversation.id);\r\n const lastReadTime = stats ? stats.lastReadTime : new Date(2019, 1, 1);\r\n\r\n const numberOfPendingMessages =\r\n conversation.messages &&\r\n conversation.messages.filter(\r\n message => message.direction === MessageDirections.toOperator && message.sentOn > lastReadTime\r\n );\r\n\r\n if (!numberOfPendingMessages) return 0;\r\n\r\n return numberOfPendingMessages.length;\r\n }\r\n\r\n public setAcwStatus = (conversation: ChatConversation) => {\r\n if (this.isConversationInACWStatus(conversation)) return;\r\n\r\n this.chatService.startAfterCallWork(conversation.id);\r\n };\r\n\r\n public detachOperator = (conversation: ChatConversation) => {\r\n if (this.isConversationInACWStatus(conversation)) return;\r\n\r\n this.chatService.detachOperator(conversation.id);\r\n };\r\n\r\n public linkCustomer = (conversation: ChatConversation, person: PersonModel) => {\r\n if (!conversation || !person || person.id === conversation.customer.id) return;\r\n\r\n this.chatService.link(conversation.id, person);\r\n };\r\n\r\n public unlinkCustomer = (conversation: ChatConversation) => {\r\n if (!conversation || conversation.isAnonymous || this.isConversationInACWStatus(conversation)) return;\r\n\r\n this.chatService.unlinkCustomer(conversation.id);\r\n };\r\n\r\n public createCustomer(conversation: ChatConversation) {\r\n const person: CreateCustomerModel = {\r\n customerId: this.emptyGuid,\r\n email: conversation.customer.email,\r\n firstName: conversation.customer.firstName,\r\n gender: null,\r\n insertion: '',\r\n lastName: conversation.customer.lastName,\r\n phoneNumber: '',\r\n externalId: null,\r\n agentInfoId: this.emptyGuid\r\n };\r\n\r\n this.$mdDialog\r\n .show({\r\n template: '',\r\n targetEvent: null,\r\n clickOutsideToClose: false,\r\n preserveScope: true,\r\n locals: { person },\r\n controller: [\r\n '$scope',\r\n 'person',\r\n ($scope, person) => {\r\n $scope.person = person;\r\n }\r\n ]\r\n })\r\n .then((customer: CustomerModel) => {\r\n const errorMessage =\r\n 'Fout opgetreden tijdens koppelen van het gesprek. Open de relatiekaart om het nogmaals te proberen.';\r\n if (!customer) {\r\n this.toastMessageService.error(errorMessage);\r\n return;\r\n }\r\n\r\n this.personResource\r\n .getById({ id: customer.personId })\r\n .$promise.then((person: PersonModel) => {\r\n this.chatService.link(conversation.id, person);\r\n })\r\n .catch(() => {\r\n this.toastMessageService.error(errorMessage);\r\n });\r\n });\r\n }\r\n\r\n public openMenu(conversation: ChatConversation, $event) {\r\n $event.stopPropagation();\r\n\r\n this.isCustomerCardOpen = this.$state.current.name.indexOf('customerservice.customercard.') > -1;\r\n this.currentOpenedConversationId = conversation.id;\r\n\r\n /*this.chatService.chatBarMenuEvent(conversation.id, !conversation.isMenuOpened);*/\r\n }\r\n\r\n public closeMenu = (conversation: ChatConversation) => {\r\n this.currentOpenedConversationId = null;\r\n };\r\n\r\n public toggleMenu(conversation: ChatConversation, $event) {\r\n if (this.currentOpenedConversationId === conversation.id) this.closeMenu(conversation);\r\n else this.openMenu(conversation, $event);\r\n }\r\n\r\n public openConversation(conversation: ChatConversation) {\r\n if (!conversation) return;\r\n\r\n this.chatService.openConversation(conversation.id);\r\n\r\n /*\r\n if (isConversationPopupStatusNewOrMinimized) {\r\n this.toggleChatWindow(conversation);\r\n }*/\r\n if (conversation.customer && conversation.customer.id) {\r\n const initQuestion =\r\n (conversation.messages && conversation.messages.length && conversation.messages[0].text) || '';\r\n this.navigateToCustomerCard(conversation.customer.id, initQuestion);\r\n }\r\n }\r\n\r\n public canCreateRelation(): boolean {\r\n return window.user.permissions.relationWrite;\r\n }\r\n\r\n private navigateToCustomerCard(customerId: System.Guid, question: string): void {\r\n const chatChannelName = ChannelType[ChannelType.Chat];\r\n\r\n this.$state.go('customerservice.customercard.timeline', {\r\n personId: customerId,\r\n selectedPanel: SelectedPanel.Registration,\r\n channel: chatChannelName,\r\n query: question\r\n });\r\n\r\n setTimeout(() => {\r\n this.activityRegistrationService.selectPanel(SelectedPanel.Registration);\r\n this.activityRegistrationService.search(question);\r\n });\r\n }\r\n\r\n public closeConversation = (id: System.Guid) => {\r\n this.chatService.endAfterCallWork(id);\r\n };\r\n\r\n public isActiveConversation(id: System.Guid): boolean {\r\n return id === this.activeConversationId;\r\n }\r\n\r\n public isActiveOrOpenedConversation(id: System.Guid): boolean {\r\n const isOrWasActiveId = this.activeConversationId || this.lastActiveConversationId;\r\n const isOpenedId = this.currentOpenedConversationId;\r\n\r\n const isActiveOrOpened = isOrWasActiveId ? isOrWasActiveId === id : isOpenedId === id;\r\n\r\n return isActiveOrOpened;\r\n }\r\n\r\n public reduceVisibleChats() {\r\n if (this.visibleChatsCount > 0) {\r\n this.visibleChatsCount--;\r\n }\r\n this.collapsedTabsOpened = false;\r\n }\r\n\r\n public increaseVisibleChats() {\r\n this.visibleChatsCount++;\r\n this.collapsedTabsOpened = false;\r\n }\r\n\r\n public toggleCollapsedTabs(forceClose?: boolean) {\r\n if (forceClose) {\r\n this.collapsedTabsOpened = false;\r\n return;\r\n }\r\n\r\n this.collapsedTabsOpened = !this.collapsedTabsOpened;\r\n }\r\n\r\n public moveChatInfront(conversation: ChatConversation) {\r\n // this.chatService.moveOperatorChatInfront(conversation.id);\r\n this.openConversation(conversation);\r\n }\r\n\r\n public updatePhoneNumber(conversation: ChatConversation) {\r\n /*this.personResource.getById({ id: conversation.customer.id }).$promise.then((person: PersonModel) => {\r\n const phoneNumber = this.createPhoneNumberModel(conversation.customer.phoneNumber);\r\n if (!person.contactDetails.phoneNumbers[0]) {\r\n person.contactDetails.phoneNumbers.push(phoneNumber);\r\n } else {\r\n person.contactDetails.phoneNumbers[1] = phoneNumber;\r\n }\r\n this.personResource.update(person).$promise.then(() => {\r\n this.chatService.setCustomerPhoneNumberAsUpdated(conversation.id);\r\n });\r\n });*/\r\n }\r\n\r\n public canUpdatePhoneNumber(conversation: ChatConversation) {\r\n const personPhoneNumbers = this.person && this.person.contactDetails.phoneNumbers.map(p => p.original);\r\n\r\n return (\r\n conversation.providerType === 1 &&\r\n (!personPhoneNumbers || !personPhoneNumbers.find(n => n === conversation.customer.phoneNumber)) &&\r\n conversation.isAnonymous &&\r\n conversation.isLinked\r\n );\r\n }\r\n\r\n private isConversationInACWStatus = (conversation: ChatConversation): boolean =>\r\n Umbrella.ChatConversationHandling.isAcwConversation(conversation.status);\r\n\r\n private createPhoneNumberModel(phoneNumber: string): ContactPhoneNumberModel {\r\n return {\r\n original: phoneNumber,\r\n description: '',\r\n number: phoneNumber,\r\n hyphenated: '',\r\n type: Umbrella.Modules.Telephony.PhoneType.Unknown\r\n };\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Chat {\r\n import PhotoUrlService = Modules.Colleagues.PhotoUrlService;\r\n import Guid = System.Guid;\r\n import ChatConversation = Umbrella.ChatConversationHandling.ChatConversation;\r\n import ChatResource = Umbrella.ChatConversationHandling.ChatResource;\r\n\r\n @Component('Chat', {\r\n selector: 'chat-conversation-history',\r\n templateUrl: '/Modules/Chat/ChatConversationHistoryComponent/ChatConversationHistory.html',\r\n bindings: {\r\n conversationId: '<',\r\n conversation: '<',\r\n limitMessagesTo: '<'\r\n }\r\n })\r\n @Inject('ChatResource', 'PhotoUrlService')\r\n export class ChatConversationHistoryComponent {\r\n public conversationId: Guid;\r\n public conversation: ChatConversation;\r\n public limitMessagesTo: number;\r\n public initialMessage: any;\r\n public chatConversation: any;\r\n public operatorAvatarUrl: string;\r\n public customerAvatarUrl: string;\r\n\r\n constructor(private chatConversationResource: ChatResource, private photoUrlService: PhotoUrlService) {}\r\n\r\n $onInit() {\r\n if (this.conversation) {\r\n this.assignConversation(this.conversation);\r\n } else {\r\n this.loadConversation(this.conversationId);\r\n }\r\n }\r\n\r\n private loadConversation(id: Guid): void {\r\n this.chatConversationResource.getById({ id }).$promise.then(conversation => {\r\n this.assignConversation(conversation);\r\n });\r\n \r\n }\r\n\r\n private assignConversation(conversation: any): void {\r\n conversation.messages.sort(\r\n (m1, m2) => new Date(m1.timestamp.toString()).getTime() - new Date(m2.timestamp.toString()).getTime()\r\n );\r\n const initialParticipant = conversation.participantInfo.find(x => !x.chatOperator);\r\n const initialParticipantId = (initialParticipant && initialParticipant.participantId.toString()) || null;\r\n\r\n this.initialMessage = conversation.messages.splice(0, 1)[0];\r\n this.customerAvatarUrl = this.photoUrlService.photoUrl(conversation.customerId, 100, 100);\r\n this.operatorAvatarUrl = this.photoUrlService.photoUrl(conversation.customerId, 100, 100);\r\n this.chatConversation = conversation;\r\n \r\n this.chatConversation.messages.forEach(x => {\r\n x.participantId.toString() == initialParticipantId ? \r\n x.direction = 'ToOperator' : x.direction = 'toCustomer';\r\n });\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Chat {\r\n export interface ChatConversationHistoryModalScope extends IPopupScope {\r\n conversationId: System.Guid;\r\n }\r\n\r\n @Controller('Chat', 'ChatConversationHistoryModalController')\r\n export class ChatConversationHistoryModalController {}\r\n}\r\n","namespace Umbrella.ChatConversationHandling {\r\n import customerCardStore = Umbrella.CustomerService.CustomerCard.customerCardStore;\r\n import Emojifier = Umbrella.ChatConversationHandling.emojifier;\r\n\r\n @Component('Chat', {\r\n selector: 'chat-conversation-modal',\r\n templateUrl: '/Modules/Chat/ChatConversationModal/ChatConversationModal.html'\r\n })\r\n @Inject('$state', 'ChatService', 'ChatStore')\r\n export class ChatConversationModalComponent {\r\n public defaultMessages: Umbrella.Chat.ChatDefaultMessageModel[];\r\n public newMessage: string;\r\n public allowedEmoticons;\r\n public showNotification: boolean;\r\n public toggleMessages: boolean;\r\n public notification: string;\r\n public disableMessageSending: boolean;\r\n public showSmileys: boolean;\r\n public conversation: any;\r\n public operatorAvatarUrl: string;\r\n public showOperatorAvatar: boolean;\r\n public person: PersonModel;\r\n public contact: string;\r\n public chatType: string;\r\n\r\n private endChatButtonDisabled: boolean;\r\n private activeConversationObserver: Rx.IDisposable;\r\n private settingsObserver: Rx.Disposable;\r\n private personObserver: Rx.IDisposable;\r\n private selectedAnswerObserver: Rx.IDisposable;\r\n\r\n constructor(\r\n private $state: ng.ui.IStateService,\r\n private chatService: ChatService,\r\n private chatStore: ChatStore\r\n ) {}\r\n\r\n $onInit() {\r\n this.allowedEmoticons = allowedEmoticons.filter(e => e !== ':p' && e !== ':d' && e !== ':o');\r\n this.observeActiveConversation();\r\n this.observeCurrentlyLoadedCustomerCard();\r\n this.observeSelectedAnswers();\r\n }\r\n\r\n $onDestroy() {\r\n if (this.activeConversationObserver) this.activeConversationObserver.dispose();\r\n if (this.settingsObserver) this.settingsObserver.dispose();\r\n if (this.personObserver) this.personObserver.dispose();\r\n if (this.selectedAnswerObserver) this.selectedAnswerObserver.dispose();\r\n }\r\n\r\n minimize = (conversation: ChatConversation) => {\r\n this.chatService.closeConversation(conversation);\r\n };\r\n\r\n confirmCloseConversation = (id: Guid) => {\r\n if (this.endChatButtonDisabled) {\r\n return;\r\n }\r\n this.chatService.endAfterCallWork(id);\r\n this.endChatButtonDisabled = true;\r\n setTimeout(() => {\r\n this.endChatButtonDisabled = false;\r\n }, 1000);\r\n };\r\n\r\n sendMessage = (conversationId: string) => {\r\n if (this.newMessage) {\r\n this.chatService.sendMessage(conversationId, this.newMessage);\r\n this.newMessage = '';\r\n }\r\n };\r\n\r\n startTyping = params => {\r\n const event = params.event;\r\n if (event.which === 13) {\r\n event.preventDefault();\r\n if (event.shiftKey || event.ctrlKey) {\r\n this.newMessage += '\\n';\r\n } else {\r\n this.sendMessage(params.conversationId);\r\n }\r\n }\r\n\r\n this.chatService.conversationMessagesRead(params.conversationId);\r\n };\r\n\r\n provideDefaultMessage = (msg: string) => {\r\n this.newMessage = msg;\r\n this.toggleMessages = false;\r\n };\r\n\r\n readMessages = (conversation: ChatConversation) => {\r\n if (!conversation) return;\r\n\r\n this.chatService.conversationMessagesRead(conversation.id);\r\n };\r\n\r\n setEmoticonToInput = emoticon => {\r\n this.showSmileys = false;\r\n if (!this.disableMessageSending) {\r\n this.newMessage = `${this.newMessage || ''} ${Emojifier.emojify(emoticon)} `;\r\n const newMessageElement = document.getElementById('newMessage');\r\n this.putCursorAtEnd(newMessageElement);\r\n }\r\n };\r\n\r\n public getBannerText(): string {\r\n if (this.showLinkOpenedCard()) {\r\n return ' Dit gesprek is niet gekoppeld aan de geopende relatiekaart!';\r\n } else if (this.showOpenLinkedCard()) {\r\n return ' Gekoppelde relatiekaart wordt niet getoond';\r\n } else {\r\n return ' Er is nog geen relatie gekoppeld aan dit gesprek...';\r\n }\r\n }\r\n\r\n public showBanner(): boolean {\r\n if (this.isOnCustomerCard() && (this.person && this.person.id === this.conversation.customer.id)) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public showLinkOpenedCard(): boolean {\r\n return this.isOnCustomerCard() && (this.person && this.person.id !== this.conversation.customer.id);\r\n }\r\n\r\n public showOpenLinkedCard(): boolean {\r\n return (\r\n (!this.conversation.isAnonymous && !this.isOnCustomerCard()) ||\r\n (!this.conversation.isAnonymous && this.isOnCustomerCard() && this.person && this.person.id !== this.conversation.customer.id)\r\n );\r\n }\r\n\r\n public linkCustomer = (conversation: ChatConversation, person: PersonModel) => {\r\n if (!conversation || !person || person.id === conversation.customer.id) return;\r\n\r\n this.chatService.link(conversation.id, person);\r\n };\r\n\r\n public addAnswerToInput(answer: string) {\r\n this.newMessage += answer + ' ';\r\n }\r\n\r\n public isOnCustomerCard(): boolean {\r\n return (\r\n this.$state &&\r\n this.$state.current &&\r\n this.$state.current.name.indexOf('customerservice.customercard') !== -1\r\n );\r\n }\r\n\r\n public navigateToCustomerCard(): void {\r\n if (this.conversation.customer) {\r\n this.$state.go('customerservice.customercard.timeline', {\r\n personId: this.conversation.customer.id\r\n });\r\n } else {\r\n this.$state.go('customerservice.customercard.timeline', {\r\n personId: this.person.id\r\n });\r\n }\r\n }\r\n\r\n private observeActiveConversation() {\r\n this.activeConversationObserver = this.chatStore.state$\r\n .filter(x => !!x)\r\n .map(x => x.activeId && x.conversations && x.conversations.find(c => c.id === x.activeId))\r\n .distinctUntilChanged()\r\n .subscribe(conversation => {\r\n const currentId = this.conversation && this.conversation.id;\r\n\r\n if (!conversation || conversation.id !== currentId) this.newMessage = '';\r\n\r\n this.conversation = conversation;\r\n this.disableMessageSending = !conversation || isAcwOrEndedConversation(conversation.status);\r\n });\r\n }\r\n\r\n private observeSelectedAnswers() {\r\n this.selectedAnswerObserver = this.chatStore.state$\r\n .filter(x => !!x)\r\n .map(x => x.selectedAnswer)\r\n .distinctUntilChanged()\r\n .subscribe(answer => {\r\n this.addAnswerToInput(answer);\r\n });\r\n }\r\n\r\n private observeCurrentlyLoadedCustomerCard(): void {\r\n this.personObserver = customerCardStore.state$\r\n .map(s => s && s.personal && s.personal.person && s.personal.person)\r\n .filter(person => person !== null)\r\n .distinctUntilChanged()\r\n .subscribe(person => {\r\n this.person = person;\r\n });\r\n }\r\n\r\n private putCursorAtEnd(el) {\r\n const $el = $(el);\r\n $el.blur();\r\n setTimeout(() => {\r\n $el.focus();\r\n // If this function exists...\r\n if (el.setSelectionRange) {\r\n // ... then use it (Doesn't work in IE)\r\n // Double the length because Opera is inconsistent about whether a carriage return is one character or two. Sigh.\r\n const len = $el.val().length * 2;\r\n el.setSelectionRange(len, len);\r\n } else {\r\n // ... otherwise replace the contents with itself\r\n // (Doesn't work in Google Chrome)\r\n $el.val($el.val());\r\n }\r\n // Scroll to the bottom, in case we're in a tall textarea\r\n // (Necessary for Firefox and Google Chrome)\r\n el.scrollTop = 999999;\r\n }, 200);\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Chat {\r\n export class DraggableDirective implements angular.IDirective {\r\n restrict = 'C';\r\n link = function(scope, element) {\r\n let previousPosition = localStorage.getItem('cmp');\r\n\r\n if (previousPosition) {\r\n //prevent flickering of the modal in different positions\r\n element.hide();\r\n setTimeout(function() {\r\n element.css(JSON.parse(previousPosition));\r\n element.show();\r\n }, 0);\r\n }\r\n\r\n element.draggable({\r\n stop(event, ui) {\r\n let position = element.position();\r\n localStorage.setItem('cmp', JSON.stringify(position));\r\n }\r\n });\r\n };\r\n static factory(): angular.IDirectiveFactory {\r\n return () => new DraggableDirective();\r\n }\r\n }\r\n\r\n angular\r\n .module('Chat')\r\n .directive('draggableModal', DraggableDirective.factory());\r\n}\r\n","namespace Umbrella.ChatConversationHandling {\r\n @Pipe('Chat', 'messageDirection')\r\n class ChatConversationPendingStatusFilter {\r\n public transform(message: ChatMessage) {\r\n return message && message.direction === MessageDirections.toCustomer ? 'from-me' : 'from-them';\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.Modules.Chat {\r\n import ChatStore = Umbrella.ChatConversationHandling.ChatStore;\r\n import FaqResourceClass = Umbrella.Modules.Knowledgebase.Faq.FaqResourceClass;\r\n import FaqModel = Umbrella.Modules.Knowledgebase.FaqModel;\r\n import debounce = Umbrella.Helpers.debounce;\r\n import copyToClipboard = Umbrella.Helpers.copyToClipboard;\r\n import FaqTargetGroupModel = Umbrella.Modules.Knowledgebase.FaqTargetGroupModel;\r\n import ChatMessage = Umbrella.ChatConversationHandling.ChatMessage;\r\n import ChatOverviewItemModel = Umbrella.ChatConversationHandling.ChatOverviewItemModel;\r\n import ChatService = Umbrella.ChatConversationHandling.ChatService;\r\n import MessageDirections = Umbrella.ChatConversationHandling.MessageDirections;\r\n import ActivityRegistrationService = Umbrella.CustomerService.CustomerCard.Activities.Registration.ActivityRegistrationService;\r\n import CustomerCardPersonInfoService = Umbrella.CustomerService.CustomerCard.CustomerCardPersonInfoService;\r\n import ContactActivityModel = Umbrella.Modules.Contacts.ContactActivityModel;\r\n\r\n export interface ChatCustomerInformation {\r\n firstName: string;\r\n lastName: string;\r\n phoneNumber: string;\r\n email: string;\r\n }\r\n\r\n @Component('Chat', {\r\n selector: 'chat-faq-browser',\r\n templateUrl: '/Modules/Chat/ChatFaqBrowserComponent/ChatFaqBrowser.html',\r\n bindings: {\r\n messages: '<',\r\n conversationId: '<'\r\n }\r\n })\r\n @Inject(\r\n 'ChatStore',\r\n 'FaqResource',\r\n 'ChatService',\r\n 'TargetGroupResource',\r\n 'ToastMessageService',\r\n '$filter',\r\n '$mdDialog',\r\n 'ActivityRegistrationService',\r\n 'CustomerCardPersonInfoService'\r\n )\r\n export class ChatFaqBrowserComponent {\r\n public suggestions: FaqModel[];\r\n public searchQuery: string;\r\n public faqs: PagedItemsModel;\r\n public selectedFaq: FaqModel;\r\n public loadingFaqs: boolean;\r\n public targetGroupChoices: { [id: string]: FaqTargetGroupModel } = {};\r\n public targetGroupAnswers: { [id: string]: string } = {};\r\n public selectedFaqId: Guid;\r\n public selectededThesaurasTag: Guid;\r\n public portalUrl: string;\r\n public conversation: ChatOverviewItemModel;\r\n\r\n private activeConversationObserver: Rx.IDisposable;\r\n private messages: ChatMessage[];\r\n private conversationId: Guid;\r\n private lastMessageId: Guid;\r\n private suggestionsLimit: number = 8;\r\n private page = 0;\r\n private pageSize = 10;\r\n private initializedSuggestions: boolean;\r\n\r\n constructor(\r\n private chatStore: ChatStore,\r\n private faqResource: FaqResourceClass,\r\n private chatService: ChatService,\r\n private targetGroupResource: Umbrella.Modules.Knowledgebase.TargetGroup.TargetGroupResourceClass,\r\n private toastMessageService: ToastMessageService,\r\n private $filter: ng.IFilterService,\r\n private $mdDialog,\r\n private activityRegistrationService: ActivityRegistrationService,\r\n private personInfoService: CustomerCardPersonInfoService\r\n ) {}\r\n\r\n $onInit() {\r\n this.generateInitialSuggestions();\r\n this.loadPortalConfig();\r\n this.observeActiveConversation();\r\n }\r\n\r\n $onDestroy() {\r\n if (this.activeConversationObserver) this.activeConversationObserver.dispose();\r\n }\r\n\r\n $onChanges(bindings: { messages: IBindingChange }) {\r\n const updatedMessagesBinding = bindings && bindings.messages && bindings.messages.currentValue;\r\n if (this.initializedSuggestions && updatedMessagesBinding) {\r\n const customerMessages = updatedMessagesBinding.filter(\r\n x => x.direction === MessageDirections.toOperator\r\n );\r\n\r\n if (customerMessages.length < 1) return;\r\n\r\n const lastCustomerMessage = customerMessages[customerMessages.length - 1];\r\n\r\n if (lastCustomerMessage.id === this.lastMessageId) return;\r\n\r\n this.generateSuggestion(lastCustomerMessage);\r\n }\r\n }\r\n\r\n private observeActiveConversation() {\r\n this.activeConversationObserver = this.chatStore.state$\r\n .filter(x => !!x)\r\n .map(x => x.activeId && x.conversations && x.conversations.find(c => c.id === x.activeId))\r\n .distinctUntilChanged()\r\n .subscribe(conversation => {\r\n this.conversation = conversation;\r\n });\r\n }\r\n\r\n public loadPortalConfig(): void {\r\n this.portalUrl = Config.getPortalUrl();\r\n }\r\n\r\n public applySearch = debounce(\r\n (query: string) => {\r\n this.reset();\r\n this.search(query);\r\n },\r\n 500,\r\n false\r\n );\r\n\r\n public isLoadMoreVisible(): boolean {\r\n return this.faqs && !this.loadingFaqs && this.getTotalRemainingFaqCount() > 0 && this.isInSearchMode();\r\n }\r\n\r\n public getTotalRemainingFaqCount(): number {\r\n if (!this.faqs || !this.faqs.items) return 0;\r\n\r\n return this.faqs.total - this.faqs.items.length;\r\n }\r\n\r\n public loadMore(): void {\r\n this.page += 1;\r\n\r\n if (this.searchQuery && this.searchQuery.length) this.search(this.searchQuery);\r\n }\r\n\r\n public selectFaq(faq: FaqModel): void {\r\n if (!faq) return;\r\n\r\n this.selectedFaq = faq;\r\n\r\n if (faq.targetGroupAnswers) {\r\n const ids = faq.targetGroupAnswers.map(x => x.targetGroupId);\r\n this.targetGroupResource.getByIds({ ids: ids }).$promise.then(data => {\r\n data.forEach(x => {\r\n this.targetGroupAnswers[x.id.toString()] = x.name;\r\n });\r\n });\r\n }\r\n\r\n this.selectedFaqId = this.selectedFaqId === faq.id ? null : faq.id;\r\n this.selectededThesaurasTag = this.selectededThesaurasTag === faq.mainTag.id ? null : faq.mainTag.id;\r\n\r\n if (this.selectedFaqId) this.faqResource.increaseViewCount({ id: this.selectedFaqId });\r\n }\r\n\r\n public faqIsSelected(): boolean {\r\n if (this.selectedFaqId == null || this.selectedFaqId == 'undefined') {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public selectFaqAnswer(answer: string): void {\r\n this.chatService.addSelectedAnswer(answer.replace(/(<([^>]+)>)/gi, ''));\r\n }\r\n\r\n public selectFaqUrl(faq: FaqModel) {\r\n this.chatService.addSelectedAnswer(this.getFaqUrlString(faq));\r\n }\r\n\r\n public closeFaq() {\r\n this.selectedFaqId = null;\r\n }\r\n\r\n public getFaqAnswer(faq: FaqModel): string {\r\n if (!faq) return '';\r\n const savedTargetGroupInfo = this.targetGroupChoices && this.targetGroupChoices[String(faq.id)];\r\n const returnAnswer = (savedTargetGroupInfo && savedTargetGroupInfo.answer) || faq.answer;\r\n\r\n return this.addBulletPoints(returnAnswer);\r\n }\r\n\r\n public getNextRemainingFaqCount(): number {\r\n if (!this.faqs || !this.faqs.items) return 0;\r\n\r\n return Math.min(this.faqs.pageSize, this.getTotalRemainingFaqCount());\r\n }\r\n\r\n public isInSearchMode(): boolean {\r\n return !!(this.searchQuery && this.searchQuery.length);\r\n }\r\n\r\n public cancelSearch() {\r\n this.reset();\r\n this.searchQuery = '';\r\n }\r\n\r\n public copyFaqAnswerToClipboard(faq: FaqModel): void {\r\n if (!faq || !faq.answer) return;\r\n\r\n const stripHtmlFilter = this.$filter('stripHtml');\r\n let faqAnswer = stripHtmlFilter(faq.answer);\r\n\r\n const element = document.createElement('div');\r\n element.innerHTML = faqAnswer;\r\n faqAnswer = element.textContent;\r\n element.textContent = '';\r\n\r\n copyToClipboard(faqAnswer, () => {\r\n this.toastMessageService.info('Antwoord gekopieerd');\r\n });\r\n }\r\n\r\n public copyFaqPortalUrlToClipboard(faq: FaqModel): void {\r\n if (!faq || !this.portalUrl) return;\r\n\r\n let faqUrl = this.getFaqUrlString(faq);\r\n\r\n this.chatService.sendMessage(this.conversationId, faqUrl);\r\n }\r\n\r\n private addBulletPoints(answer: string): string {\r\n return answer.split('
  • ').join('
  • - ');\r\n }\r\n\r\n private getFaqUrlString(faq: FaqModel): string {\r\n let faqUrl = this.portalUrl;\r\n faqUrl += this.portalUrl[this.portalUrl.length - 1] !== '/' ? '/' : '';\r\n faqUrl += 'faq/';\r\n faqUrl += faq.id;\r\n return faqUrl;\r\n }\r\n\r\n private async search(searchQuery: string): Promise {\r\n if (!searchQuery || !searchQuery.length) {\r\n return;\r\n }\r\n\r\n this.loadingFaqs = true;\r\n const model = await this.faqResource.search({\r\n q: searchQuery,\r\n page: this.page,\r\n pageSize: this.pageSize,\r\n getFaqsWithoutItems: true\r\n }).$promise;\r\n this.loadingFaqs = false;\r\n\r\n if (!model || !model.items) return;\r\n\r\n this.updateFaqList(model);\r\n }\r\n\r\n private updateFaqList(model: PagedItemsModel): void {\r\n if (!this.faqs) {\r\n this.faqs = model;\r\n return;\r\n }\r\n\r\n this.faqs = {\r\n ...this.faqs,\r\n page: model.page,\r\n items: [...this.faqs.items, ...model.items]\r\n };\r\n }\r\n\r\n private async generateSuggestion(message: ChatMessage): Promise {\r\n if (!message) return null;\r\n\r\n this.lastMessageId = message.id;\r\n const suggestions = await this.getSuggestionsForMessage(message);\r\n\r\n if (!suggestions || suggestions.length < 1) return;\r\n\r\n for (let i = suggestions.length - 1; i >= 0; i--) {\r\n this.addToSuggestions(suggestions[i]);\r\n }\r\n }\r\n\r\n private async getSuggestionsForMessage(message: ChatMessage): Promise {\r\n if (!message) return null;\r\n\r\n const suggestionsQuery = message.text;\r\n const pageSize = this.suggestions\r\n ? this.suggestions.length >= this.suggestionsLimit\r\n ? 1\r\n : this.suggestionsLimit - this.suggestions.length\r\n : this.suggestionsLimit;\r\n\r\n const suggestions = await this.faqResource.search({\r\n q: suggestionsQuery,\r\n page: this.page,\r\n pageSize: pageSize,\r\n getFaqsWithoutItems: true\r\n }).$promise;\r\n\r\n if (!suggestions || suggestions.items.length < 1) return [];\r\n\r\n return suggestions.items;\r\n }\r\n\r\n private addToSuggestions(suggestion: FaqModel): void {\r\n if (!suggestion) return;\r\n\r\n if (!this.suggestions) this.suggestions = [];\r\n\r\n const suggestionExists = !!this.suggestions.find(x => x.id === suggestion.id);\r\n\r\n if (suggestionExists) {\r\n this.suggestions = this.suggestions.filter(x => x.id !== suggestion.id);\r\n this.suggestions.unshift(suggestion);\r\n return;\r\n }\r\n\r\n if (this.suggestions.length >= this.suggestionsLimit)\r\n this.suggestions = this.suggestions.splice(0, this.suggestionsLimit - 1);\r\n\r\n this.suggestions.unshift(suggestion);\r\n }\r\n\r\n private async generateInitialSuggestions() {\r\n if (!this.messages || this.messages.length < 1) {\r\n this.initializedSuggestions = true;\r\n return;\r\n }\r\n const customerMessages = this.messages.filter(x => x.direction === MessageDirections.toOperator);\r\n const requestCount =\r\n customerMessages.length > this.suggestionsLimit ? this.suggestionsLimit : customerMessages.length;\r\n\r\n if (!customerMessages || customerMessages.length < 1) {\r\n this.initializedSuggestions = true;\r\n return;\r\n }\r\n\r\n for (let i = customerMessages.length - requestCount; i < customerMessages.length; i++) {\r\n const suggestions = await this.getSuggestionsForMessage(customerMessages[i]);\r\n\r\n if (!suggestions || suggestions.length < 1) continue;\r\n\r\n for (let i = suggestions.length - 1; i >= 0; i--) {\r\n this.addToSuggestions(suggestions[i]);\r\n }\r\n }\r\n\r\n this.initializedSuggestions = true;\r\n }\r\n\r\n private reset(): void {\r\n this.page = 0;\r\n this.faqs = null;\r\n }\r\n\r\n public launchTaskRegistrationPopup(): void {\r\n let chatCustomerInformation: ChatCustomerInformation;\r\n let personId: Guid;\r\n const chatConversationId = this.conversation.id;\r\n const selectedTag = this.selectededThesaurasTag;\r\n const selectedFaqId = this.selectedFaqId;\r\n\r\n if (this.isChatAnonymous()) {\r\n chatCustomerInformation = this.returnChatCustomerInformation();\r\n } else {\r\n personId = this.conversation.customer.id;\r\n }\r\n\r\n if (!(selectedTag && selectedFaqId) || !(personId || chatCustomerInformation)) return;\r\n\r\n const template = `\r\n \r\n `;\r\n this.$mdDialog\r\n .show({\r\n template,\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n })\r\n .then(task => {\r\n this.activityRegistrationService.taskRegistered(task, chatConversationId);\r\n });\r\n }\r\n\r\n public registerContactActivity(): void {\r\n const person = this.personInfoService.getSelectedPerson();\r\n const selectedTag = this.selectededThesaurasTag;\r\n const selectedFaq = this.selectedFaq;\r\n\r\n if(!(selectedTag && selectedFaq.id) || !person) return;\r\n const template = `\r\n \r\n `;\r\n this.$mdDialog\r\n .show({\r\n template,\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n })\r\n .then((activity: ContactActivityModel) => {\r\n this.activityRegistrationService.contactActivityRegistered(activity);\r\n });\r\n }\r\n\r\n private isChatAnonymous(): boolean {\r\n return this.conversation.customer.id ? false : true;\r\n }\r\n\r\n private returnChatCustomerInformation(): ChatCustomerInformation {\r\n return {\r\n firstName: this.conversation.customer.firstName,\r\n lastName: this.conversation.customer.lastName,\r\n phoneNumber: this.conversation.customer.phoneNumber,\r\n email: this.conversation.customer.email\r\n };\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Chat {\r\n @Pipe('Chat', 'decodeHtml')\r\n class DecodeHtmlFilter {\r\n public transform(message: string) {\r\n if (!message) return '';\r\n\r\n const parse = document.createElement('parse');\r\n parse.innerHTML = message;\r\n return parse.textContent || parse.innerText;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Chat {\r\n\r\n @Pipe('Chat', 'detachUrl')\r\n class DetachUrlFilter {\r\n public transform(message: string) {\r\n if (!message) return '';\r\n if (!message.includes(' 0; i--) {\r\n if (links[i - 1].href) {\r\n links[i - 1].insertAdjacentHTML('afterend', ' ' + links[i - 1].href);\r\n }\r\n }\r\n\r\n return htmlMessage.getElementsByTagName('body')[0].innerHTML.toString();\r\n }\r\n }\r\n}","/// \r\n/// \r\n\r\nnamespace Umbrella.ChatConversationHandling {\r\n import Guid = System.Guid;\r\n import CustomerCardEvent = Umbrella.CustomerService.CustomerCard.CustomerCardEvent;\r\n\r\n @Component('Chat', {\r\n selector: 'incoming-chat-request',\r\n templateUrl: '/Modules/Chat/ChatIncomingRequestComponent/ChatIncomingRequest.html'\r\n })\r\n @Inject('$state', 'ChatStore', 'ChatService')\r\n class ChatIncomingRequestComponent {\r\n public collapsed = false;\r\n public incomingChatRequest: ChatConversation;\r\n public pendingConversations: ChatConversation[] = [];\r\n public waitingTime = 0;\r\n\r\n private cancelInterval;\r\n private newChatCheckSubscription: Rx.IDisposable;\r\n private suspendedChatId: Guid;\r\n private appearedAtDateTime: Date;\r\n private minTimeBeforeSuspendMs = 2000;\r\n\r\n constructor(\r\n private $state: ng.ui.IStateService,\r\n private chatStore: ChatStore,\r\n private chatService: ChatService\r\n ) {}\r\n /*\r\n private $onInit() {\r\n const hasOperatorConversations = s => s && s.operatorConversations;\r\n this.newChatCheckSubscription = chatStore.state$\r\n .filter(hasOperatorConversations)\r\n .map(s => s.operatorConversations)\r\n .distinctUntilChanged()\r\n .subscribe(s => {\r\n this.pendingConversations = s.filter(\r\n conversation => isPendingConversation(conversation.status) || conversation.forContinuation\r\n );\r\n this.incomingChatRequest = this.pendingConversations[0];\r\n\r\n if (this.incomingChatRequest) {\r\n clearInterval(this.cancelInterval);\r\n this.CalculateWaitingTime();\r\n } else {\r\n this.collapsed = false;\r\n }\r\n });\r\n }\r\n\r\n private $onDestroy() {\r\n this.newChatCheckSubscription.dispose();\r\n }\r\n\r\n public CalculateWaitingTime(): void {\r\n this.cancelInterval = setInterval(() => {\r\n if (this.incomingChatRequest) {\r\n const waitingTimeDifference =\r\n new Date().getTime() - new Date(this.incomingChatRequest.createdOn).getTime();\r\n\r\n this.waitingTime = waitingTimeDifference / 1000.0;\r\n }\r\n }, 500);\r\n }\r\n\r\n public pickup(): void {\r\n if (this.incomingChatRequest) {\r\n this.chatService.pickupChat(this.incomingChatRequest);\r\n } else {\r\n this.collapsed = false;\r\n }\r\n }\r\n\r\n public OpenTimelineAndPickup(): void {\r\n if (this.incomingChatRequest) {\r\n this.chatService.pickupChat(this.incomingChatRequest);\r\n this.$state.go('customerservice.customercard.personal', {\r\n personId: this.incomingChatRequest.customer.id\r\n });\r\n } else {\r\n this.collapsed = false;\r\n }\r\n }\r\n\r\n public suspend(): void {\r\n if (this.waitingTime <= this.minTimeBeforeSuspendMs / 1000.0) {\r\n return;\r\n }\r\n\r\n if (this.incomingChatRequest && this.incomingChatRequest.id) {\r\n this.collapsed = true;\r\n this.suspendedChatId = this.incomingChatRequest.id;\r\n }\r\n }*/\r\n }\r\n}\r\n","namespace Umbrella.Modules.Chat {\r\n @Component('Chat', {\r\n selector: 'chat-initial-faqs',\r\n templateUrl: '/Modules/Chat/ChatInitialFaqsComponent/ChatInitialFaqs.html',\r\n bindings: {\r\n faqs: '<'\r\n }\r\n })\r\n @Inject()\r\n export class ChatInitialFaqsComponent {}\r\n}\r\n","namespace Umbrella.Modules.Chat {\r\n @Component('Chat', {\r\n selector: 'chat-stars-rating',\r\n templateUrl: '/Modules/Chat/ChatStarsRatingComponent/ChatStarsRating.html',\r\n bindings: {\r\n rating: '<'\r\n }\r\n })\r\n export class ChatStarsRatingComponent {\r\n public inactiveStars: number[];\r\n public activeStars: number[];\r\n\r\n public $onChanges(changes: any) {\r\n if (changes && changes.rating && changes.rating.currentValue) {\r\n let rating = changes.rating.currentValue;\r\n if (rating > 5) {\r\n rating = 5;\r\n }\r\n\r\n if (rating < 0) {\r\n rating = 0;\r\n }\r\n this.activeStars = new Array(rating);\r\n this.inactiveStars = new Array(5 - rating);\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Chat {\r\n import ChatConversationModel = ChatConversationHandling.ChatConversation;\r\n import ChatMessageModel = ChatConversationHandling.ChatMessage;\r\n import ChatResource = Umbrella.ChatConversationHandling.ChatResource;\r\n\r\n @Component('Chat', {\r\n selector: 'chat-timeline-conversation',\r\n templateUrl: '/Modules/Chat/ChatTimelineConversationComponent/ChatTimelineConversation.html',\r\n bindings: {\r\n conversationId: '<'\r\n }\r\n })\r\n @Inject('ChatResource', 'CreateDialog')\r\n export class ChatTimelineConversationComponent {\r\n public conversationId: System.Guid;\r\n public conversation: ChatConversationModel;\r\n public messages: ChatMessageModel[] = [];\r\n public rating: number;\r\n public initialMessage: ChatMessageModel;\r\n\r\n constructor(private chatResource: ChatResource, private createDialog: any) {}\r\n\r\n public $onInit() {\r\n if (this.conversationId) this.loadConversation(this.conversationId);\r\n }\r\n\r\n private loadConversation(id: System.Guid) {\r\n this.chatResource.getById({ id }).$promise.then((conversation: ChatConversationModel) => {\r\n if (conversation) {\r\n this.rating = conversation.rating;\r\n this.conversation = conversation;\r\n }\r\n });\r\n }\r\n\r\n public openChatHistoryPopup() {\r\n this.createDialog(\r\n '/Modules/Chat/ChatConversationHistoryModal/ChatConversationHistoryModal.html',\r\n {\r\n id: 'chatConversationPopup',\r\n modalClass: 'popup green popup_650'\r\n },\r\n {\r\n conversationId: this.conversationId\r\n }\r\n );\r\n }\r\n }\r\n}\r\n","namespace Umbrella.ChatConversationHandling {\r\n import WaitingStatisticsModel = Umbrella.Chat.WaitingStatisticsModel;\r\n\r\n const averageQueueLength = 3;\r\n const longQueueLength = averageQueueLength * 2;\r\n const averageQueueTime = 30;\r\n const longQueueTime = 60;\r\n\r\n @Component('Chat', {\r\n selector: 'chat-waiting-stats',\r\n templateUrl: '/Modules/Chat/ChatWaitingStatsComponent/ChatWaitingStats.html'\r\n })\r\n @Inject('ChatResource', 'ChatStore', 'ToastMessageService')\r\n export class ChatWaitingStatsComponent {\r\n public waitingCustomersCount = 0;\r\n public maxWaitingTimeSeconds = 0;\r\n public averageWaitingPickupTime = 0;\r\n public averageWaitingReplyTime = 0;\r\n public activeChatConversations = 0;\r\n\r\n public chatEnabled = false;\r\n public displayPanel = false;\r\n private chatEnabledObservable: Rx.IDisposable;\r\n private chatStatisticsObservable: Rx.IDisposable;\r\n\r\n constructor(private chatResource: ChatResource, private chatStore: ChatStore, private toastMessageService: ToastMessageService,) {}\r\n\r\n $onInit() {\r\n const isEnabledAndRegistered = (state: ChatState) =>\r\n state && state.enabled && state.registration && state.registration.status === RegisterStatus.Registered;\r\n\r\n this.chatEnabledObservable = this.chatStore.state$\r\n .map(isEnabledAndRegistered)\r\n .distinctUntilChanged()\r\n .subscribe((isEnabled: boolean) => {\r\n this.chatEnabled = isEnabled;\r\n });\r\n\r\n let isRetrying = false;\r\n this.chatStatisticsObservable = Rx.Observable.interval(5000)\r\n .startWith(0)\r\n .filter(x => this.chatEnabled)\r\n .flatMapLatest(() =>\r\n Rx.Observable.fromPromise(this.chatResource.getWaitingStats().$promise).take(1)\r\n )\r\n .tapOnError((error) => {\r\n if (!isRetrying) {\r\n this.toastMessageService.warning(\r\n 'Trying to reconnect to chat...',\r\n 3600000\r\n );\r\n\r\n isRetrying = true;\r\n }\r\n\r\n return error;\r\n })\r\n .retryWhen(errors => errors.delay(10000))\r\n .subscribe((stats: WaitingStatisticsModel) => {\r\n if (isRetrying) {\r\n this.toastMessageService.success(\r\n 'Reconnected to chat.',\r\n 3600000\r\n );\r\n \r\n isRetrying = false;\r\n }\r\n\r\n this.chatEnabled = true;\r\n\r\n this.waitingCustomersCount = stats.waitingCustomersCount;\r\n this.maxWaitingTimeSeconds = stats.maxWaitingTimeSeconds;\r\n this.averageWaitingPickupTime = stats.averageWaitingPickupTime;\r\n this.averageWaitingReplyTime = stats.averageWaitingReplyTime;\r\n this.activeChatConversations = stats.activeChatConversations;\r\n });\r\n }\r\n\r\n $onDestroy() {\r\n if (this.chatStatisticsObservable) this.chatStatisticsObservable.dispose();\r\n if (this.chatEnabledObservable) this.chatEnabledObservable.dispose();\r\n }\r\n\r\n public isQueueLengthAboveAverage() {\r\n return this.waitingCustomersCount > averageQueueLength;\r\n }\r\n\r\n public isQueueLengthLong() {\r\n return this.waitingCustomersCount > longQueueLength;\r\n }\r\n\r\n public isQueueTimeAboveAverage() {\r\n return !this.isQueueTimeLong() && this.maxWaitingTimeSeconds > averageQueueTime;\r\n }\r\n\r\n public isQueueTimeLong() {\r\n return this.maxWaitingTimeSeconds > longQueueTime;\r\n }\r\n\r\n public togglePanel(): void {\r\n this.displayPanel = !this.displayPanel;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.ChatConversationHandling {\r\n @Component('Chat', {\r\n selector: 'chat-default-messages',\r\n templateUrl: '/Modules/Chat/DefaultMessagesComponent/ChatDefaultMessages.html',\r\n bindings: {\r\n customerName: '<',\r\n onMessageSelected: '&',\r\n onClose: '&'\r\n }\r\n })\r\n @Inject('ChatResource')\r\n export class DefaultMessagesComponent {\r\n public defaultMessages: Umbrella.Chat.ChatDefaultMessageModel[];\r\n public onMessageSelected: () => (msg: string) => void;\r\n public onClose: () => () => void;\r\n private customerName: string;\r\n\r\n constructor(private chatResource: ChatResource) {}\r\n\r\n public $onInit() {\r\n this.chatResource.getDefaultMessages().$promise.then(data => {\r\n this.defaultMessages = data.messages;\r\n this.personalizeDefaultMessagesText();\r\n this.sortMessages();\r\n });\r\n }\r\n\r\n public messageSelected(message: string): void {\r\n this.onMessageSelected()(message);\r\n }\r\n\r\n public close(): void {\r\n this.onClose();\r\n }\r\n\r\n private personalizeDefaultMessagesText(): void {\r\n this.defaultMessages.forEach(msg => msg.message.replace('[[username]]', this.customerName));\r\n }\r\n\r\n private sortMessages(): void {\r\n this.defaultMessages.sort((a, b) => {\r\n const x = a.message.toLowerCase();\r\n const y = b.message.toLowerCase();\r\n\r\n return x < y ? -1 : x > y ? 1 : 0;\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Chat {\r\n angular.module('Chat').directive('chatAutoScroller', [\r\n '$timeout',\r\n $timeout => {\r\n function animateScrolling(\r\n element: ng.IAugmentedJQuery,\r\n speed = 50\r\n ) {\r\n if (!element || element.length < 1) return;\r\n\r\n if (speed < 1) {\r\n element.stop();\r\n element.scrollTop(element[0].scrollHeight);\r\n return;\r\n }\r\n\r\n element.stop().animate(\r\n {\r\n scrollTop: element[0].scrollHeight\r\n },\r\n speed\r\n );\r\n }\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n chatAutoScroller: '@'\r\n },\r\n priority: -1,\r\n link: (\r\n scope: ng.IScope,\r\n el: ng.IAugmentedJQuery,\r\n attr: ng.IAttributes\r\n ) => {\r\n if (!el || el.length < 1) return;\r\n\r\n animateScrolling(el, 0);\r\n $timeout(() => {\r\n animateScrolling(el, 0);\r\n\r\n el.on('DOMNodeInserted', e => {\r\n if (angular.element(e.target).hasClass('message')) {\r\n $timeout(() => {\r\n animateScrolling(el, 1000);\r\n });\r\n return;\r\n }\r\n\r\n if (\r\n angular\r\n .element(e.target)\r\n .hasClass('notification')\r\n ) {\r\n $timeout(() => {\r\n animateScrolling(el, 0);\r\n });\r\n return;\r\n }\r\n });\r\n });\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.ChatConversationHandling {\r\n angular.module('Chat').directive('emojifyUrlify', [\r\n () => {\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n emojify: '@'\r\n },\r\n priority: -1,\r\n link: (scope, el, attr) => {\r\n const urlify = text => {\r\n const urlRegex = /(http|ftp|https):\\/\\/([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])/g;\r\n return text.replace(urlRegex, url => {\r\n return '' + url + '';\r\n });\r\n };\r\n\r\n const $element = $(el[0]);\r\n attr.$observe('emojifyUrlify', value => {\r\n $element.html($element.html().replace('>', '>'));\r\n $element.html($element.html().replace('<', '<'));\r\n $element.html(emojifier.emojify($element.html()));\r\n $element.html(urlify($element.html()));\r\n });\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Chat {\r\n angular.module('Chat').directive('uiToggleClass', [\r\n '$timeout',\r\n '$document',\r\n ($timeout, $document) => {\r\n return {\r\n restrict: 'AC',\r\n link: (scope, el, attr) => {\r\n el.on('click', e => {\r\n e.preventDefault();\r\n\r\n el.toggleClass('obscured');\r\n });\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.Modules.Colleagues {\r\n @Pipe('Colleagues', 'availabilityDescription')\r\n class AvailabilityDescriptionFilter {\r\n public transform(available) {\r\n switch (available) {\r\n case 'Away':\r\n return 'Afwezig';\r\n case 'Available':\r\n return 'Beschikbaar';\r\n case 'Busy':\r\n return 'Bezet';\r\n default:\r\n return 'Niet bekend';\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Colleagues {\r\n @Pipe('Colleagues', 'availabilityUnknown')\r\n class AvailabilityUnknownFilter {\r\n public transform(available: Availability | string | number) {\r\n switch (available) {\r\n case Availability.Unknown:\r\n case 'Unknown':\r\n case 0:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Colleagues {\r\n @Service('Colleagues', 'EmployeeService')\r\n export class EmployeeService {\r\n public isAssignedToFunctionGroup(employee, functiongroupId: System.Guid) {\r\n if (!employee || !employee.functionGroups || !functiongroupId) return false;\r\n\r\n let isInGroup = false;\r\n angular.forEach(employee.functionGroups, value => {\r\n if (!isInGroup) {\r\n if (value.id === functiongroupId) isInGroup = true;\r\n }\r\n });\r\n\r\n return isInGroup;\r\n }\r\n\r\n public isAuthorized(permissionName) {\r\n if (window.user.permissions[permissionName] !== undefined) return true;\r\n return false;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Colleagues {\r\n @Pipe('Colleagues', 'isAvailable')\r\n class IsAvailableFilter {\r\n public transform(available: Availability | string | number) {\r\n switch (available) {\r\n case Availability.Available:\r\n case 'Available':\r\n case 1:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Colleagues {\r\n @Pipe('Colleagues', 'isAway')\r\n class IsAwayFilter {\r\n public transform(available: Availability | string | number) {\r\n switch (available) {\r\n case Availability.Away:\r\n case 'Away':\r\n case 2:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Colleagues {\r\n @Pipe('Colleagues', 'isBusy')\r\n class IsBusyFilter {\r\n public transform(available: Availability | string | number) {\r\n switch (available) {\r\n case Availability.Busy:\r\n case 'Busy':\r\n case 3:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Colleagues {\r\n @Pipe('Colleagues', 'photoUrl')\r\n @Inject('PhotoUrlService')\r\n class PhotoUrlFilter {\r\n constructor(private photoUrlSvc: PhotoUrlService) {}\r\n\r\n public transform(\r\n id: System.Guid,\r\n width?: number,\r\n heigth?: number,\r\n noCache?: boolean\r\n ) {\r\n return this.photoUrlSvc.photoUrl(id, width, heigth, noCache);\r\n }\r\n }\r\n\r\n @Pipe('Colleagues', 'photoBlobUrl')\r\n @Inject('PhotoBlobUrlService')\r\n class PhotoBlobUrlFilter {\r\n constructor(private photoUrlSvc: PhotoBlobUrlService) {}\r\n\r\n public transform(\r\n id: System.Guid,\r\n width?: number,\r\n heigth?: number,\r\n noCache?: boolean\r\n ) {\r\n return this.photoUrlSvc.photoUrl(id, width, heigth, noCache);\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Colleagues {\r\n @Service('Colleagues', 'PhotoUrlService')\r\n @Inject('EmptyGuid')\r\n export class PhotoUrlService {\r\n constructor(private emptyGuid: System.Guid) {}\r\n\r\n public photoUrl(\r\n id: System.Guid,\r\n width?: number,\r\n height?: number,\r\n noCache?: boolean,\r\n useDefault?: boolean\r\n ): string {\r\n if (useDefault || !id || id == this.emptyGuid) {\r\n return Config.makeAbsoluteApiUrl(\r\n 'api/v1/colleague/photo/default/'\r\n );\r\n }\r\n\r\n let url = Config.makeAbsoluteApiUrl(\r\n 'api/v1/colleague/photo/' + (id || this.emptyGuid)\r\n );\r\n\r\n let seperator = '?';\r\n\r\n if (width) {\r\n url += seperator + 'width=' + width;\r\n seperator = '&';\r\n }\r\n\r\n if (height) {\r\n url += seperator + 'height=' + height;\r\n seperator = '&';\r\n }\r\n\r\n if (noCache) {\r\n url += seperator + 'ts=' + new Date().getMilliseconds();\r\n seperator = '&';\r\n }\r\n\r\n return url;\r\n }\r\n }\r\n\r\n @Service('Colleagues', 'PhotoBlobUrlService')\r\n @Inject('EmptyGuid')\r\n export class PhotoBlobUrlService {\r\n constructor(private emptyGuid: System.Guid) {}\r\n\r\n public photoUrl(\r\n id: System.Guid,\r\n width?: number,\r\n height?: number,\r\n noCache?: boolean,\r\n useDefault?: boolean\r\n ): string {\r\n if (useDefault || !id || id == this.emptyGuid) {\r\n return Config.makeAbsoluteApiUrl(\r\n 'api/v1/colleague/photo/default/'\r\n );\r\n }\r\n\r\n let url = Config.makeAbsoluteApiUrl(\r\n 'api/v2/media/view/blob/' + (id || this.emptyGuid)\r\n );\r\n let seperator = '?';\r\n\r\n if (width) {\r\n url += seperator + 'width=' + width;\r\n seperator = '&';\r\n }\r\n\r\n if (height) {\r\n url += seperator + 'height=' + height;\r\n seperator = '&';\r\n }\r\n\r\n if (noCache) {\r\n url += seperator + 'ts=' + new Date().getMilliseconds();\r\n seperator = '&';\r\n }\r\n\r\n return url;\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.Modules.Colleagues {\r\n angular\r\n .module('Colleagues')\r\n .filter('appointmentsOnWeekDays', () => appointments => {\r\n let show = [];\r\n\r\n if (appointments) {\r\n appointments.forEach(appointment => {\r\n let startDate = appointment.item1;\r\n\r\n if (!(startDate instanceof Date)) {\r\n startDate = new Date(startDate);\r\n }\r\n if (startDate.getDay() !== 0 && startDate.getDay() !== 6) {\r\n show.push(appointment);\r\n }\r\n });\r\n }\r\n\r\n return show;\r\n })\r\n .filter('appointmentsBetween', () => (appointments, start, end) => {\r\n let show = [];\r\n\r\n appointments.forEach(appointment => {\r\n if (appointment.isAllDay) {\r\n show.push(appointment);\r\n return;\r\n }\r\n\r\n let startDate = appointment.startTime;\r\n\r\n if (!(startDate instanceof Date)) {\r\n startDate = new Date(startDate);\r\n }\r\n\r\n let startHour = startDate.getHours();\r\n if (startHour >= start && startHour < end) {\r\n show.push(appointment);\r\n }\r\n });\r\n\r\n return show;\r\n })\r\n .filter(\r\n 'appointmentsBetweenWithThreshold',\r\n () => (appointments, threshold, end) => {\r\n let show = [];\r\n\r\n appointments.forEach(appointment => {\r\n appointment.duration2 = appointment.duration;\r\n\r\n if (appointment.isAllDay) {\r\n show.push(appointment);\r\n return;\r\n }\r\n // StartHour:\r\n let startDate = appointment.startTime;\r\n if (!(startDate instanceof Date)) {\r\n startDate = new Date(startDate);\r\n }\r\n let startHour = startDate.getHours();\r\n // EndHour:\r\n let endDate = appointment.endTime;\r\n if (!(endDate instanceof Date)) {\r\n endDate = new Date(endDate);\r\n }\r\n let endHour = endDate.getHours();\r\n //\r\n if (\r\n (startHour >= threshold && startHour < end) ||\r\n (startHour < threshold &&\r\n endHour > threshold &&\r\n endHour < end)\r\n ) {\r\n show.push(appointment);\r\n }\r\n // Add extra css-class if appointment starts before and ends after 8am:\r\n if (startHour < threshold && endHour > threshold) {\r\n appointment.startEarlyClass = ' startsearly';\r\n appointment.duration2 =\r\n appointment.duration -\r\n (parseInt(threshold) - parseInt(startHour)) * 60 +\r\n 60;\r\n } else {\r\n appointment.startEarlyClass = '';\r\n }\r\n\r\n // Add extra css-class if appointment starts before and ends after 6pm:\r\n if (startHour < end && endHour > end) {\r\n appointment.endsLateClass = ' endslate';\r\n appointment.duration2 =\r\n appointment.duration -\r\n (parseInt(endHour) - parseInt(end)) * 60;\r\n } else {\r\n appointment.endsLateClass = '';\r\n }\r\n });\r\n\r\n return show;\r\n }\r\n );\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Colleagues {\r\n import PersonSearchModel = Umbrella.Modules.PersonSearchModel;\r\n\r\n export interface AdminColleagueControllerScope extends IUmbrellaRootScope {\r\n searchResults: string;\r\n searchQuery: string;\r\n searching: boolean;\r\n noResults: boolean;\r\n showSearchbox: boolean;\r\n\r\n callNr(nr: string): void;\r\n clearSearchbox(): void;\r\n getEmailAdress(emails: EmailAddressModel[]) : string;\r\n colleagueSelected(colleague: PersonSearchModel): void;\r\n colleagueClick(colleague: PersonSearchModel): void;\r\n }\r\n\r\n @Inject('$scope', 'PersonResource', 'PhotoUrlService', 'PhoneService')\r\n export class SearchColleaguesController {\r\n private searchBox: JQuery;\r\n private currentItem: JQuery;\r\n private currentItemIndex: number;\r\n\r\n constructor(\r\n public $scope: AdminColleagueControllerScope,\r\n public personResource: PersonResource,\r\n photoUrlService: PhotoUrlService,\r\n phoneService: Telephony.PhoneService,\r\n ) {\r\n 'use strict';\r\n\r\n $scope.searchResults = null;\r\n $scope.searchQuery = '';\r\n $scope.searching = false;\r\n this.searchBox = jQuery('#popupSearchResultsBox');\r\n\r\n jQuery('.popup-search-query').bind('focus', function() {\r\n if (this.value !== '') {\r\n $scope.searchQuery = this.value;\r\n\r\n this.doShowSearchBox();\r\n }\r\n });\r\n\r\n $scope.$watch('searchQuery', () => {\r\n this.doShowSearchBox();\r\n });\r\n\r\n $scope.callNr = (nr: string): void => {\r\n if (nr) phoneService.callNr(nr);\r\n };\r\n\r\n $scope.getEmailAdress = (emails: EmailAddressModel[]) : string => getColleagueEmail(emails); \r\n\r\n $scope.clearSearchbox = () => {\r\n $scope.searchQuery = '';\r\n };\r\n\r\n $scope.colleagueSelected = (\r\n colleague: PersonSearchModel\r\n ) => {\r\n this.hideSearchResults();\r\n $scope.colleagueClick(colleague);\r\n };\r\n\r\n $scope.$on('$destroy', () => {\r\n $('body').off('click.searchboxClosed');\r\n });\r\n }\r\n\r\n doShowSearchBox() {\r\n this.$scope.showSearchbox = true;\r\n\r\n $('body').on('click.searchboxClosed', e => {\r\n let target = $(e.target);\r\n if (\r\n !target.is('#popupSearchResultsBox') &&\r\n !target.parents().is('#popupSearchResultsBox') &&\r\n !target.parents().is('.top-search')\r\n ) {\r\n $('body').off('click.searchboxClosed');\r\n\r\n this.$scope.showSearchbox = false;\r\n this.$scope.$apply();\r\n }\r\n });\r\n\r\n this.$scope.searching = true;\r\n this.search();\r\n }\r\n\r\n search() {\r\n if (this.$scope.searchQuery) {\r\n let param = this.$scope.searchQuery;\r\n\r\n if (param.charAt(param.length - 1) === '.')\r\n param = param.slice(0, -1);\r\n\r\n this.personResource.search({\r\n id: param,\r\n pageSize: 5,\r\n roles: 'employee'\r\n }).$promise.then((results) => {\r\n let innerParam = this.$scope.searchQuery;\r\n if (innerParam.charAt(innerParam.length - 1) === '.')\r\n innerParam = innerParam.slice(0, -1);\r\n\r\n if (param === innerParam)\r\n this.showSearchResults(results.items);\r\n },\r\n () => {\r\n this.hideSearchResults();\r\n }\r\n );\r\n } else this.hideSearchResults();\r\n } \r\n\r\n hideSearchResults() {\r\n this.showSearchResults({\r\n colleagues: []\r\n });\r\n\r\n this.$scope.searchQuery = '';\r\n this.$scope.noResults = false;\r\n this.currentItemIndex = 0;\r\n this.currentItem = null;\r\n jQuery('.popup-search-query').unbind(\r\n 'keydown',\r\n this.handleKeyPress\r\n );\r\n }\r\n\r\n showSearchResults(results) {\r\n this.$scope.searchResults = results;\r\n this.$scope.searching = false;\r\n\r\n results.hide = results.length === 0;\r\n\r\n this.$scope.noResults = results.hide;\r\n\r\n this.currentItem = null;\r\n this.currentItemIndex = 0;\r\n\r\n jQuery('.popup-search-query').unbind(\r\n 'keydown',\r\n this.handleKeyPress\r\n );\r\n\r\n if (this.$scope.showSearchbox) {\r\n jQuery('.popup-search-query').bind(\r\n 'keydown',\r\n this.handleKeyPress\r\n );\r\n this.searchBox\r\n .find('#popupBelBijEnter')\r\n .first()\r\n .css('display', 'inline');\r\n }\r\n }\r\n\r\n handleKeyPress(event) {\r\n let telephone = this.searchBox\r\n .find('li.popup-searchQueryItem.callNumberTop:visible')\r\n .first();\r\n let items = this.searchBox\r\n .find('li.popup-colleague,li.popup-searchQueryItem')\r\n .filter(':visible');\r\n\r\n if (this.currentItem)\r\n this.currentItem.css('background-color', '#ffffff');\r\n\r\n if (event.keyCode === 40) {\r\n // down\r\n if (this.currentItem == null) this.currentItemIndex = 0;\r\n else {\r\n this.currentItemIndex++;\r\n if (this.currentItemIndex < items.length - 1)\r\n if (items.eq(this.currentItemIndex).hasClass('header'))\r\n this.currentItemIndex++;\r\n }\r\n } else if (event.keyCode === 38) {\r\n // up\r\n if (this.currentItem == null)\r\n this.currentItemIndex = items.length - 1;\r\n else {\r\n this.currentItemIndex--;\r\n if (this.currentItemIndex > 0) {\r\n if (items.eq(this.currentItemIndex).hasClass('header'))\r\n this.currentItemIndex--;\r\n } else this.currentItemIndex = 0;\r\n }\r\n } else if (event.keyCode === 13) {\r\n // enter\r\n if (this.currentItem) {\r\n this.currentItem\r\n .find('a')\r\n .first()\r\n .trigger('click'); // first href should be clickable!\r\n } else if (telephone.length > 0) {\r\n telephone\r\n .find('a')\r\n .first()\r\n .trigger('click');\r\n return false;\r\n }\r\n }\r\n\r\n if (this.currentItemIndex > items.length - 1)\r\n this.currentItemIndex = items.length - 1;\r\n else if (this.currentItemIndex < 0) this.currentItemIndex = 0;\r\n\r\n if (event.keyCode === 40 || event.keyCode === 38) {\r\n this.currentItem = items.eq(this.currentItemIndex);\r\n }\r\n\r\n // highlight the active item\r\n if (this.currentItem)\r\n this.currentItem.css('background-color', '#D8D8D8');\r\n\r\n // only show the call on enter display value if no currentitem is set or the active item is the current item\r\n if (this.currentItem) {\r\n if (!this.currentItem.is('li.popup-searchQueryItem'))\r\n this.searchBox\r\n .find('#popupBelBijEnter')\r\n .first()\r\n .css('display', 'none');\r\n else\r\n this.searchBox\r\n .find('#popupBelBijEnter')\r\n .first()\r\n .css('display', 'inline');\r\n }\r\n\r\n // cancel default event handling\r\n if (\r\n this.currentItem &&\r\n (event.keyCode === 40 || event.keyCode === 38)\r\n )\r\n return false;\r\n\r\n return true;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Colleagues {\r\n export class SearchColleaguesDirective implements angular.IDirective {\r\n restrict = 'E';\r\n templateUrl = '/Modules/Colleagues/Colleague/SearchColleagues.html';\r\n controller = SearchColleaguesController;\r\n replace = true;\r\n transclude = true;\r\n scope = { colleagueClick: '=' };\r\n\r\n static factory(): angular.IDirectiveFactory {\r\n return () => new SearchColleaguesDirective();\r\n }\r\n }\r\n angular\r\n .module('Colleagues')\r\n .directive('searchcolleagues', SearchColleaguesDirective.factory());\r\n}\r\n","namespace Umbrella.Modules.Colleagues {\r\n import FunctionGroupModel = Knowledgebase.FunctionGroupModel;\r\n import IResource = ng.resource.IResource;\r\n\r\n export interface IdTagRequestParams extends IdRequestParams {\r\n tagId: System.Guid;\r\n }\r\n\r\n export interface IFunctionGroupResourceClass {\r\n getAll(params: PagedRequestParams): IResource>;\r\n getById(params: IdRequestParams): IResource;\r\n getByIds(params: IdsRequestParams): IResource;\r\n save(data: FunctionGroupModel): IResource;\r\n update(data: FunctionGroupModel | IResource): IResource;\r\n delete(id: IdRequestParams): IResource<{}>;\r\n getFunctiongroupsByTagId(params: PagedRequestWithIdParams): IResource>;\r\n getPagedByTagId(params: PagedRequestWithIdParams): IResource>;\r\n find(params: IdRequestParams): IResource>;\r\n updateForTag(data: UpdateFunctionGroupsOfThesaurusTagModel): IResource<{}>;\r\n getByUnitAndTagId(params: IdTagRequestParams): IResource;\r\n }\r\n\r\n angular.module('Colleagues').service('FunctionGroupResource', [\r\n '$resource',\r\n ($resource: ng.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/functiongroup/:action/:id',\r\n {},\r\n {\r\n getAll: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: '', page: 0, pageSize: 10 }\r\n },\r\n getByUnitAndTagId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'byunit', id: '' }\r\n },\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: '', id: '' }\r\n },\r\n getByIds: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'byIds', id: '' }\r\n },\r\n save: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: '' }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { action: '', id: '@id' }\r\n },\r\n delete: {\r\n method: 'DELETE',\r\n isArray: false,\r\n params: { action: '', id: '@id' }\r\n },\r\n getFunctiongroupsByTagId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'functiongroupsbytag',\r\n id: '@id',\r\n page: 0,\r\n pageSize: 10\r\n }\r\n },\r\n getPagedByTagId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'pagedbytag',\r\n id: '@id',\r\n page: 0,\r\n pageSize: 10\r\n }\r\n },\r\n find: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'find',\r\n id: '@id',\r\n page: 0,\r\n pageSize: 10\r\n }\r\n },\r\n updateForTag: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { action: 'updateForTag' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Dashboard {\r\n export interface IDashboardMenuScope {\r\n oninit: any;\r\n croute: any;\r\n stateisloading: boolean;\r\n }\r\n\r\n @Controller('Dashboard', 'DashboardController')\r\n @Inject('$rootScope', '$scope', '$state')\r\n class DashboardController {\r\n constructor(\r\n public $rootScope: IUmbrellaRootScope,\r\n private $scope: IDashboardMenuScope,\r\n public $state: ng.ui.IStateService\r\n ) {\r\n $scope.oninit = this.$onInit();\r\n $scope.croute = this.getThemeForDashboardModule();\r\n $scope.stateisloading = false;\r\n\r\n $rootScope.$on('$routeUpdate', function() {\r\n this.countResults();\r\n $scope.croute = this.getThemeForDashBoardModule();\r\n });\r\n\r\n $rootScope.$on(\r\n '$stateChangeStart',\r\n (\r\n event: ng.IAngularEvent,\r\n toState: ng.ui.IState,\r\n toParams: ng.ui.IStateParamsService,\r\n fromState: ng.ui.IState,\r\n fromParams: ng.ui.IStateParamsService\r\n ) => {\r\n if (toState.redirectTo !== fromState.name) {\r\n $scope.croute = this.getThemeForDashboardModule();\r\n $scope.stateisloading = true;\r\n }\r\n }\r\n );\r\n\r\n $rootScope.$on(\r\n '$stateChangeSuccess',\r\n (\r\n event: ng.IAngularEvent,\r\n toState: ng.ui.IState,\r\n toParams: ng.ui.IStateParamsService,\r\n fromState: ng.ui.IState,\r\n fromParams: ng.ui.IStateParamsService\r\n ) => {\r\n $scope.croute = this.getThemeForDashboardModule();\r\n $scope.stateisloading = false;\r\n }\r\n );\r\n\r\n $rootScope.$on(\r\n '$stateChangeError',\r\n (\r\n event: ng.IAngularEvent,\r\n toState: ng.ui.IState,\r\n toParams: ng.ui.IStateParamsService,\r\n fromState: ng.ui.IState,\r\n fromParams: ng.ui.IStateParamsService,\r\n error\r\n ) => {\r\n $scope.croute = this.getThemeForDashboardModule();\r\n $scope.stateisloading = false;\r\n }\r\n );\r\n }\r\n\r\n public $onInit(): void {\r\n this.$scope.croute = this.getThemeForDashboardModule();\r\n }\r\n\r\n private getThemeForDashboardModule() {\r\n if (this.$state.includes('dashboard.tasks') || this.$state.includes('dashboard.tasks.*')) {\r\n return { class: 'green', iscase: false };\r\n } else if (this.$state.includes('dashboard.caseflow') || this.$state.includes('dashboard.caseflow.*')) {\r\n return { class: 'purple', iscase: false };\r\n } else {\r\n return { class: 'blue', iscase: false };\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.CustomerService {\r\n import SessionColleagueModel = Modules.Colleagues.SessionColleagueModel;\r\n import TaskOverviewStore = TaskHandling.TaskOverviewStore;\r\n import CaseFlowOverviewStore = KCC.CaseFlowDashboard.CaseFlowOverviewStore;\r\n import ChatStore = Umbrella.ChatConversationHandling.ChatStore;\r\n\r\n @Component('CustomerService', {\r\n selector: 'dashboard-menu',\r\n templateUrl: '/Modules/Dashboard/DashboardMenu.html'\r\n })\r\n @Inject('$state', 'TaskOverviewStore', 'CaseFlowOverviewStore', 'ChatStore')\r\n class DashboardMenuComponent {\r\n public user: SessionColleagueModel;\r\n public taskTotal: number;\r\n public caseflowTotal: number;\r\n public chatConversationsTotal: number;\r\n public chatIsEnabled: boolean;\r\n public experimentalAreaUnlocked: boolean;\r\n private taskTotalObserver: Rx.IDisposable;\r\n private caseflowTotalObserver: Rx.IDisposable;\r\n private chatEnabledObserver: Rx.IDisposable;\r\n private chatTotalObserver: Rx.IDisposable;\r\n private configObserver: Rx.Disposable;\r\n\r\n constructor(\r\n private $state: ng.ui.IStateService,\r\n private taskOverviewStore: TaskOverviewStore,\r\n private caseFlowOverviewStore: CaseFlowOverviewStore,\r\n private chatStore: ChatStore\r\n ) {}\r\n\r\n public $onInit() {\r\n this.user = window.user;\r\n\r\n const notNullOrUndefined = x => x !== null && x !== undefined;\r\n\r\n this.taskTotalObserver = this.taskOverviewStore.state$\r\n .map(x => x && x.tasks)\r\n .filter(notNullOrUndefined)\r\n .distinctUntilChanged()\r\n .subscribe(x => {\r\n this.taskTotal = x.total;\r\n });\r\n\r\n this.caseflowTotalObserver = this.caseFlowOverviewStore.state$\r\n .map(x => x && x.overviewInfo && x.overviewInfo.cases && x.overviewInfo.cases.result)\r\n .filter(notNullOrUndefined)\r\n .distinctUntilChanged()\r\n .subscribe(x => {\r\n this.caseflowTotal = x.total;\r\n });\r\n\r\n this.chatEnabledObserver = this.chatStore.state$\r\n .map(x => x && x.enabled)\r\n .distinctUntilChanged()\r\n .subscribe(x => (this.chatIsEnabled = x));\r\n\r\n this.chatTotalObserver = this.chatStore.state$\r\n .map(x => x && x.conversations)\r\n .filter(notNullOrUndefined)\r\n .distinctUntilChanged()\r\n .subscribe(x => (this.chatConversationsTotal = x.length));\r\n\r\n const hasConfig = x => x && x.config;\r\n this.configObserver = Config.configStore.state$\r\n .filter(hasConfig)\r\n .map(x => x.config.experimentalAreaEnabled)\r\n .subscribe(x => (this.experimentalAreaUnlocked = x));\r\n }\r\n\r\n public displayCaseFlowOverviewSwitch(): boolean {\r\n return this.$state.includes('dashboard.caseflow');\r\n }\r\n\r\n public $onDestroy() {\r\n this.taskTotalObserver.dispose();\r\n this.caseflowTotalObserver.dispose();\r\n this.chatTotalObserver.dispose();\r\n this.chatEnabledObserver.dispose();\r\n this.configObserver.dispose();\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Housing {\r\n export interface IComplexResource {\r\n getById(\r\n params: IdRequestParams\r\n ): ng.resource.IResource;\r\n search(\r\n params: { id: string; page: number; pageSize: number },\r\n succes?: (data: any, headers: any) => void,\r\n error?: (reason: any) => void\r\n ): angular.IPromise>;\r\n }\r\n\r\n angular.module('Housing').service('ComplexResource', [\r\n '$resource',\r\n $resource => {\r\n return $resource(\r\n '/api/v1/complex/:action/:id',\r\n {},\r\n {\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n search: {\r\n nethod: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'search',\r\n id: '',\r\n page: 0,\r\n pageSize: 20\r\n }\r\n }\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Housing {\r\n export interface SearchRequestParams extends PagedRequestWithIdParams {\r\n searchQuery?: string;\r\n }\r\n\r\n export interface IContractResource {\r\n getById(params: IdRequestParams): ng.resource.IResource;\r\n getPagedByRoleId(\r\n params: PagedRequestWithIdParams\r\n ): ng.resource.IResource>;\r\n getFilterValuesByRoleId(\r\n params: SearchRequestParams\r\n ): ng.resource.IResource>;\r\n getAllFilterValuesByRoleId(params: IdRequestParams): ng.resource.IResource;\r\n getAllByUnitIdPaged(params: PagedRequestWithIdParams): ng.resource.IResource>;\r\n getActiveAssociatedContractors(params: IdRequestParams): ng.resource.IResource;\r\n getContacts(params: IdRequestParams): ng.resource.IResource;\r\n getAssociatedContractors(params: IdRequestParams): ng.resource.IResource;\r\n getActiveFor(params: IdRequestParams): ng.resource.IResource;\r\n getOutstandingBalanceFor(params: IdRequestParams): ng.resource.IResource;\r\n }\r\n\r\n export interface IAssociatedRolesRequestParam extends IdRequestParams {\r\n includingProvidedRole?: boolean;\r\n }\r\n\r\n interface IContractResourceRequestParams {\r\n id?: string;\r\n action?: string;\r\n subaction?: string;\r\n roleId?: string;\r\n }\r\n\r\n function getResource(\r\n method: string,\r\n isArray: boolean,\r\n params?: IContractResourceRequestParams,\r\n headers?: any\r\n ): angular.resource.IActionDescriptor {\r\n return { method, isArray, params, headers };\r\n }\r\n\r\n angular.module('Housing').service('ContractResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) => {\r\n return $resource(\r\n '/api/v1/contract/:action/:id/:subaction',\r\n {},\r\n {\r\n getById: getResource('GET', false, { id: '@id' }),\r\n getPagedByRoleId: getResource('GET', false, {\r\n action: 'byRole',\r\n id: '@roleId'\r\n }),\r\n getFilterValuesByRoleId: getResource('GET', false, {\r\n action: 'byRole',\r\n id: '@roleId',\r\n subaction: 'filters'\r\n }),\r\n getAllFilterValuesByRoleId: getResource('GET', true, {\r\n action: 'byRole',\r\n id: '@id',\r\n subaction: 'allFilters'\r\n }),\r\n getAllByUnitIdPaged: getResource('GET', false, {\r\n action: 'byUnit',\r\n id: '@unitId'\r\n }),\r\n getActiveAssociatedContractors: getResource('GET', true, {\r\n action: 'active',\r\n id: '@roleId',\r\n subaction: 'associatedContractors'\r\n }),\r\n getAssociatedContractors: getResource('GET', true, {\r\n id: '@roleId',\r\n subaction: 'associatedContractors'\r\n }),\r\n getContacts: getResource('GET', true, {\r\n id: '@id',\r\n subaction: 'contacts'\r\n }),\r\n getActiveFor: getResource('GET', true, {\r\n action: 'active',\r\n id: '@roleId'\r\n }),\r\n getOutstandingBalanceFor: getResource('GET', false, {\r\n action: 'outstandingbalance',\r\n id: '@id'\r\n })\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","angular.module('Housing').filter('contractstatus', function() {\r\n 'use strict';\r\n\r\n return function(val) {\r\n switch (val) {\r\n case 'Future':\r\n return 'Toekomstig';\r\n case 'Active':\r\n return 'Lopend';\r\n case 'Expired':\r\n return 'Beëindigd';\r\n case 'Cancelled':\r\n return 'Geannuleerd';\r\n default:\r\n return '';\r\n }\r\n };\r\n});\r\n","angular.module('Housing').factory('DistrictResource', [\r\n '$resource',\r\n $resource =>\r\n $resource(\r\n '/api/v1/district/:action/:id',\r\n {},\r\n {\r\n getAll: {\r\n method: 'GET',\r\n isArray: true,\r\n params: {}\r\n },\r\n getPaged: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'paged', page: 0, pageSize: 15 }\r\n },\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n delete: {\r\n method: 'DELETE',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n save: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { id: '@id' }\r\n }\r\n }\r\n )\r\n]);\r\n","namespace Umbrella.Modules.Housing {\r\n import IResource = ng.resource.IResource;\r\n\r\n interface ISearchParams extends PagedRequestParams {\r\n query?: string;\r\n }\r\n\r\n export interface IHousingTypeResourceClass {\r\n new (model: HousingTypeModel);\r\n getById(params: IdRequestParams): IResource;\r\n getAll(): IResource>;\r\n search(\r\n params: PagedRequestParams\r\n ): IResource>;\r\n\r\n save(model: HousingTypeModel): IResource<{}>;\r\n update(model: HousingTypeModel): IResource<{}>;\r\n delete(params: IdRequestParams): IResource<{}>;\r\n }\r\n\r\n angular.module('Housing').service('HousingTypeResource', [\r\n '$resource',\r\n ($resource: ng.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/housingtype/:action/:id',\r\n {},\r\n {\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n getAll: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'all', id: '' }\r\n },\r\n search: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'search', id: '@id' }\r\n },\r\n save: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: 'add', id: '' }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { action: 'update', id: '' }\r\n },\r\n delete: {\r\n method: 'DELETE',\r\n isArray: false,\r\n params: { action: 'delete', id: '@id' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","namespace Umbrella.Modules.Housing {\r\n @Pipe('Housing', 'isActiveContract')\r\n class IsActiveContractFilter {\r\n public transform(contract: SimpleContractModel) {\r\n if (!contract || !contract.status) return false;\r\n\r\n return (\r\n !contract.endDate &&\r\n new Date(contract.startDate.toString()) < new Date()\r\n );\r\n }\r\n }\r\n}\r\n","angular.module('Housing').factory('PriceComponentResource', [\r\n '$resource',\r\n $resource =>\r\n $resource(\r\n '/api/v1/pricecomponent/:action/:id',\r\n {},\r\n {\r\n getAll: {\r\n method: 'GET',\r\n isArray: true,\r\n params: {}\r\n },\r\n getPaged: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'paged', page: 0, pageSize: 15 }\r\n },\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n delete: {\r\n method: 'DELETE',\r\n isArray: false,\r\n params: { action: 'delete', id: '@id' }\r\n },\r\n save: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: 'add', id: '' }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { action: 'update', id: '' }\r\n }\r\n }\r\n )\r\n]);\r\n","namespace Umbrella.Modules.Housing {\r\n import IResource = ng.resource.IResource;\r\n import Guid = System.Guid;\r\n\r\n export interface ISearchParams extends PagedRequestParams {\r\n query?: string;\r\n }\r\n\r\n export interface IGetByIdsParams {\r\n ids: Guid[];\r\n }\r\n\r\n export interface IResidentialZoneResourceClass {\r\n getByIds(params: IGetByIdsParams): IResource;\r\n search(params: ISearchParams): IResource;\r\n }\r\n\r\n angular.module('Housing').service('ResidentialZoneResource', [\r\n '$resource',\r\n ($resource: ng.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/residentialzone/:action/:id',\r\n {},\r\n {\r\n getByIds: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'set' }\r\n },\r\n search: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'search', id: '' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","angular.module('Housing').factory('ServiceFundResource', [\r\n '$resource',\r\n $resource =>\r\n $resource(\r\n '/api/v1/servicefund/:action/:id',\r\n {},\r\n {\r\n getAll: {\r\n method: 'GET',\r\n isArray: true,\r\n params: {}\r\n },\r\n getPaged: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'paged', page: 0, pageSize: 15 }\r\n },\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n }\r\n }\r\n )\r\n]);\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Housing {\r\n export interface TerminateContractReportResource\r\n extends angular.resource.IResource {}\r\n\r\n export interface TerminateContractReportResourceClass {\r\n getByContractId(\r\n contractId: IdRequestParams,\r\n succes?: (data: TerminateContractReportModel) => void,\r\n error?: (reason: any) => void\r\n ): TerminateContractReportResource;\r\n getAll(\r\n params: ResourceSearchParams,\r\n succes?: (\r\n data: PagedItemsModel\r\n ) => void,\r\n error?: (reason: any) => void\r\n ): angular.IPromise>;\r\n }\r\n\r\n angular.module('Housing').service('TerminateContractReportResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/terminatecontract/report/:action/:contractId',\r\n {},\r\n {\r\n getAll: {\r\n method: 'GET',\r\n isArray: false\r\n },\r\n getByContractId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'bycontract', contractId: '@id' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Housing.Units {\r\n export interface IUnitResource {\r\n getById(params: IdRequestParams): ng.resource.IResource;\r\n getAllByComplexId(params: IdRequestParams): ng.resource.IResource;\r\n getByContractId(params: IdRequestParams): ng.resource.IResource;\r\n search(params: PagedRequestWithIdParams): ng.resource.IResource>;\r\n getCollectiveObjectsByCode(params: {id: System.Guid, code: string}): ng.resource.IResource;\r\n }\r\n\r\n angular.module('Housing').service('UnitResource', [\r\n '$resource',\r\n $resource => {\r\n return $resource(\r\n '/api/v1/unit/:action/:subaction/:id',\r\n {},\r\n {\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n getAllByComplexId: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'byComplex', id: '@id' }\r\n },\r\n getByContractId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'active', subaction: 'byContract', id: '@id' }\r\n },\r\n search: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'search', id: '@query' }\r\n },\r\n getCollectiveObjectsByCode: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'collectiveobjectsbycode', id: '@id' }\r\n }\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Housing.Valuations {\r\n export interface IValuationResource\r\n extends angular.resource.IResource {}\r\n\r\n export interface IValuationResourceClass\r\n extends angular.resource.IResourceClass {\r\n getByUnitId(id: System.Guid): IValuationResource;\r\n createTask(model: ValuationRequestModel): IValuationResource;\r\n }\r\n\r\n angular.module('Housing').service('ValuationResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/housing/valuation/:action/:id',\r\n {},\r\n {\r\n getByUnitId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n createTask: {\r\n method: 'POST',\r\n isArray: false,\r\n action: '',\r\n params: { id: '' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Knowledgebase.Faq {\r\n export interface IFaqResource extends ng.resource.IResource {}\r\n\r\n export interface IdAndTargetGroupIdRequestParams extends IdRequestParams {\r\n readonly targetGroups: string;\r\n }\r\n\r\n export interface IdAndTargetGroupIdPagedRequestParams\r\n extends IdRequestParams,\r\n PagedRequestParams {\r\n readonly targetGroups?: string;\r\n }\r\n\r\n export interface StringIdsRequestParams {\r\n ids: String;\r\n }\r\n\r\n export interface SearchRequestParams extends PagedRequestParams {\r\n readonly q: string;\r\n readonly getFaqsWithoutItems?: boolean;\r\n readonly targetGroups?: string;\r\n }\r\n\r\n export interface OrderedByViewCountRequestParams {\r\n count: number;\r\n }\r\n\r\n export interface FaqResourceClass\r\n extends ng.resource.IResourceClass {\r\n getAll(params: any): ng.resource.IResource>;\r\n getById(\r\n params: IdRequestParams\r\n ): ng.resource.IResource;\r\n getByIds(\r\n params: IdsRequestParams\r\n ): ng.resource.IResource;\r\n getByIdAndTargetGroupId(\r\n params: IdAndTargetGroupIdRequestParams\r\n ): ng.resource.IResource;\r\n getByTagIdPaged(\r\n params: IdAndTargetGroupIdPagedRequestParams\r\n ): ng.resource.IResource>;\r\n getStatuses(): StatusModel[];\r\n increaseViewCount(faqId: System.Guid): number;\r\n getOrderedByViewCount(params: OrderedByViewCountRequestParams): ng.resource.IResource;\r\n search(params: any): ng.resource.IResource>;\r\n searchThesaurusFaqsForSelfserviceScenario(\r\n params: any\r\n ): ng.resource.IResource<\r\n PagedItemsModel<\r\n Modules.SelfService.SelfServiceScenarioModel.Detailed\r\n >\r\n >;\r\n similar(\r\n params: FindSimilarFaqsModel\r\n ): ng.resource.IResource>;\r\n }\r\n angular.module('Knowledgebase').service('FaqResource', [\r\n '$resource',\r\n ($resource: ng.resource.IResourceService) => {\r\n return $resource(\r\n '/api/v1/faqs/:action/:id/:subaction',\r\n {},\r\n {\r\n getAll: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: '', page: 0, pageSize: 10 }\r\n },\r\n getByTagIdPaged: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'bytagpaged',\r\n id: '',\r\n page: 0,\r\n pageSize: 10,\r\n mediaUrl: Config.makeAbsoluteApiUrl('api/v1/media/view/')\r\n }\r\n },\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id', targetGroups: '', edit: true, mediaUrl: Config.makeAbsoluteApiUrl('api/v1/media/view/') }\r\n },\r\n getByIds: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action:'set', ids: '@ids' }\r\n },\r\n getByIdAndTargetGroupId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n id: '@id',\r\n targetGroups: '@targetGroups',\r\n edit: true\r\n }\r\n },\r\n getStatuses: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'statuses' }\r\n },\r\n increaseViewCount: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { id: '@id', subaction: 'increaseviewcount' }\r\n },\r\n getOrderedByViewCount: {\r\n url: '/api/v1/faqs/orderedbyviewcount',\r\n method: 'GET',\r\n isArray: true,\r\n params: { count: '@count', mediaUrl: Config.makeAbsoluteApiUrl('api/v1/media/view/') }\r\n },\r\n search: {\r\n url: '/api/v1/faqs/search/:q',\r\n method: 'GET',\r\n isArray: false,\r\n params: { q: '@q', page: 0, pageSize: 25, mediaUrl: Config.makeAbsoluteApiUrl('api/v1/media/view/') }\r\n },\r\n searchThesaurusFaqsForSelfserviceScenario: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action:\r\n 'SearchThesaurusFaqsForSelfserviceScenarios',\r\n id: '',\r\n page: 0,\r\n pageSize: 5\r\n }\r\n },\r\n similar: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: 'similar' },\r\n transformRequest: (data: FindSimilarFaqsModel) => {\r\n return JSON.stringify(data);\r\n }\r\n }\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.Modules.Knowledgebase {\r\n export interface IKnowledgebaseItemResource {\r\n getByTagId(params: {\r\n id: System.Guid;\r\n targetGroups?: string;\r\n }): ng.resource.IResource;\r\n }\r\n\r\n angular.module('Knowledgebase').factory('KnowledgebaseItemResource', [\r\n '$resource',\r\n ($resource: ng.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/knowledgebase/:action/:id',\r\n {},\r\n {\r\n getAll: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { page: 0, pageSize: 10, mediaUrl: Config.makeAbsoluteApiUrl('api/v1/media/view/') }\r\n },\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id', mediaUrl: Config.makeAbsoluteApiUrl('api/v1/media/view/') }\r\n },\r\n findByName: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'Find',\r\n id: '@id',\r\n page: 0,\r\n pageSize: 25,\r\n mediaUrl: Config.makeAbsoluteApiUrl('api/v1/media/view/')\r\n }\r\n },\r\n getByTagId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'ByTag', id: '@id' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","namespace Umbrella.Modules.Knowledgebase {\r\n import IResource = ng.resource.IResource;\r\n\r\n export interface FindRequestParams extends PagedRequestParams {\r\n id: string;\r\n index?: number;\r\n }\r\n\r\n export interface IMetaTagResource {\r\n getById(params: IdRequestParams): IResource;\r\n getAll(\r\n params: PagedRequestParams\r\n ): IResource>;\r\n findByName(\r\n params: FindRequestParams\r\n ): IResource>;\r\n\r\n save(model: MetaTagModel): IResource;\r\n update(model: MetaTagModel): IResource;\r\n delete(params: IdRequestParams): IResource;\r\n deleteWithIdsIn(params: { ids: System.Guid[] }): IResource;\r\n }\r\n\r\n angular.module('Knowledgebase').factory('MetaTagResource', [\r\n '$resource',\r\n ($resource: ng.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/metatag/:action/:id',\r\n {},\r\n {\r\n getAll: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { page: 0, pageSize: 10 }\r\n },\r\n getRoot: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: '', page: 0, pageSize: 10 }\r\n },\r\n findByName: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'Find',\r\n type: null,\r\n id: '',\r\n index: 0,\r\n page: 0,\r\n pageSize: 25\r\n }\r\n },\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'item', id: '', edit: true }\r\n },\r\n save: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: '' }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { action: '' }\r\n },\r\n deleteWithIdsIn: {\r\n method: 'DELETE',\r\n isArray: false,\r\n params: { action: 'deletewithidsin' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","namespace Umbrella.Modules.Knowledgebase {\r\n import IResource = ng.resource.IResource;\r\n import SmartlabelModel = Umbrella.Smartlabels.SmartlabelModel;\r\n\r\n export interface ISmartlabelResource {\r\n getById(params: IdRequestParams): IResource;\r\n getAll(\r\n params: PagedRequestParams\r\n ): IResource>;\r\n findByName(\r\n params: FindRequestParams\r\n ): IResource>;\r\n\r\n save(model: SmartlabelModel): IResource;\r\n update(model: SmartlabelModel): IResource;\r\n delete(params: IdRequestParams): IResource;\r\n deleteWithIdsIn(params: { ids: System.Guid[] }): IResource;\r\n\r\n getUsages(\r\n params: IdRequestParams\r\n ): IResource;\r\n }\r\n\r\n angular.module('Knowledgebase').factory('SmartlabelResource', [\r\n '$resource',\r\n ($resource: ng.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/smartlabels/:action/:id',\r\n {},\r\n {\r\n getAll: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: '', page: 0, pageSize: 10 }\r\n },\r\n getRoot: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: '', page: 0, pageSize: 10 }\r\n },\r\n findByName: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'Find',\r\n id: '',\r\n index: 0,\r\n page: 0,\r\n pageSize: 25,\r\n mediaUrl: Config.makeAbsoluteApiUrl('api/v1/media/view/')\r\n }\r\n },\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: '', id: '' }\r\n },\r\n getUsages: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'usages', id: '@id' }\r\n },\r\n save: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: '' }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { action: '' }\r\n },\r\n deleteWithIdsIn: {\r\n method: 'DELETE',\r\n isArray: false,\r\n params: { action: 'deletewithidsin' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Knowledgebase.TargetGroup {\r\n export interface ITargetGroupResource\r\n extends angular.resource.IResource {\r\n id: System.Guid;\r\n name: string;\r\n criteria: Umbrella.Modules.Knowledgebase.TargetGroupCriterionModel[];\r\n }\r\n export interface TargetGroupResourceClass\r\n extends angular.resource.IResourceClass {\r\n getById(params: IdRequestParams): ITargetGroupResource;\r\n getByIds(params: { ids: System.Guid }): TargetGroupModel[];\r\n getAllForPersonId(params: IdRequestParams): TargetGroupModel[];\r\n getAll(): TargetGroupModel[];\r\n getAllPaged(\r\n params: PagedRequestParams,\r\n succes?: Function,\r\n error?: Function\r\n ): angular.resource.IResource>;\r\n update(model: TargetGroupModel.Edit): ITargetGroupResource;\r\n }\r\n angular.module('Knowledgebase').service('TargetGroupResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/targetgroups/:action/:id',\r\n {},\r\n {\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n getAllForPersonId: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'forperson', id: '@id' }\r\n },\r\n getAll: {\r\n method: 'GET',\r\n isArray: true,\r\n params: {}\r\n },\r\n getAllPaged: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'paged' }\r\n },\r\n getByIds: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'set' }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { id: '@id' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","namespace Umbrella.Modules.Knowledgebase {\r\n export interface ThesaurusResource {\r\n getById(\r\n params: IdRequestParams\r\n ): ng.resource.IResource;\r\n getRootTags(): ng.resource.IResource;\r\n forParent(\r\n params: IdRequestParams\r\n ): ng.resource.IResource;\r\n }\r\n\r\n angular.module('Knowledgebase').service('ThesaurusResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/thesaurus/:action/:id',\r\n {},\r\n {\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'item', id: '' }\r\n },\r\n getRootTags: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'forParent', id: '' }\r\n },\r\n forParent: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'forParent', id: '@id' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.Modules.Knowledgebase {\r\n export function tagWithParents(tag: BaseTagModel): BaseTagModel[] {\r\n const tags = [];\r\n\r\n while (tag) {\r\n tags.unshift(tag);\r\n tag = tag.parent;\r\n }\r\n\r\n return tags;\r\n }\r\n\r\n angular\r\n .module('Knowledgebase')\r\n .config([\r\n '$stateProvider',\r\n '$urlRouterProvider',\r\n function($stateProvider, $urlRouterProvider) {\r\n 'use strict';\r\n\r\n $urlRouterProvider.when('/kennisbank', '/kennisbank/thesaurus');\r\n\r\n $stateProvider.state('knowledgebase', {\r\n url: '/kennisbank',\r\n parent: 'root',\r\n views: {\r\n 'left@': {\r\n templateUrl:\r\n '/Modules/Knowledgebase/KnowledgebaseFilters.html'\r\n }\r\n }\r\n });\r\n }\r\n ])\r\n .filter('isPublished', function() {\r\n return function(input) {\r\n if (input && input.toLowerCase() === 'published')\r\n return 'gepubliceerd';\r\n\r\n return 'niet gepubliceerd';\r\n };\r\n })\r\n .directive('smartlabelnamevalidation', [\r\n function() {\r\n return {\r\n require: 'ngModel',\r\n link(scope, element, attrs, modelCtrl) {\r\n modelCtrl.$parsers.push(function(inputValue) {\r\n const transformedInput = inputValue.replace(\r\n /[^a-zA-Z0-9\\-_\\.]/g,\r\n ''\r\n );\r\n\r\n if (transformedInput !== inputValue) {\r\n modelCtrl.$setViewValue(transformedInput);\r\n modelCtrl.$render();\r\n }\r\n\r\n return transformedInput;\r\n });\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.Modules.Mail {\r\n export interface IGetMailCountParams {\r\n filterforstatus: MailMessageStatus;\r\n }\r\n\r\n export declare class MailMessageResource {\r\n getMailCount(\r\n params: IGetMailCountParams\r\n ): ng.resource.IResource;\r\n }\r\n\r\n angular.module('Mail').service('MailMessageResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/mailmessage/:action/:id',\r\n {},\r\n {\r\n getById: {\r\n method: 'GET',\r\n params: { id: '@id' },\r\n isArray: false\r\n },\r\n getByIdWithCustomer: {\r\n method: 'GET',\r\n params: { action: 'GetWithCustomer', id: '@id' },\r\n isArray: false\r\n },\r\n getMailsWithCustomer: {\r\n method: 'GET',\r\n params: {\r\n action: 'GetMailsWithCustomer',\r\n page: 0,\r\n pageSize: 10\r\n },\r\n isArray: false\r\n },\r\n getMailCount: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'CountByStatus' }\r\n },\r\n getMails: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'GetMails', page: 0, pageSize: 10 }\r\n },\r\n getMailsByRoleId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'GetMailsByRoleId',\r\n page: 0,\r\n pageSize: 10\r\n }\r\n },\r\n pickUp: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { id: '@id', action: 'pickUp' }\r\n },\r\n finish: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { id: '@id', action: 'finish' }\r\n },\r\n delete: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { id: '@id', action: 'delete' }\r\n },\r\n attachCustomerToMailMessage: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: {\r\n mailMessageId: '@mailMessageId',\r\n CustomerId: '@customerId',\r\n action: 'AttachCustomerToMailMessage'\r\n }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","namespace Umbrella.Modules.Mail {\r\n import OutgoingMailResource = Umbrella.Modules.Mail.IOutgoingMailResourceClass;\r\n\r\n export interface PreviewOutgoingMailPopupButtonScope {\r\n title: string;\r\n outgoingMailActivityModel: Umbrella.Modules.Mail.OutgoingMailActivityModel;\r\n launchPreviewOutgoingMailPopup(): void;\r\n }\r\n\r\n @Controller('Mail', 'PreviewOutgoingMailPopupButtonController')\r\n @Inject('$scope', 'CreateDialog', 'OutgoingMailResource')\r\n export class PreviewOutgoingMailPopupButtonController {\r\n constructor(\r\n public $scope: PreviewOutgoingMailPopupButtonScope,\r\n createDialog,\r\n outgoingMailResource: OutgoingMailResource\r\n ) {\r\n $scope.launchPreviewOutgoingMailPopup = () => {\r\n outgoingMailResource\r\n .get({\r\n id: $scope.outgoingMailActivityModel.outgoingMailId\r\n })\r\n .$promise.then(mail =>\r\n createDialog(\r\n '/Modules/Umbrella/Admin/Mail/ViewMailPopup.html',\r\n {\r\n id: 'previewMailPopup',\r\n modalClass: 'popup green popup_1100',\r\n controller: 'ViewMailPopupController'\r\n },\r\n {\r\n mail,\r\n hideForwardButton: true\r\n }\r\n )\r\n );\r\n };\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Mail {\r\n export class PreviewOutgoingMailPopupButtonDirective\r\n implements angular.IDirective {\r\n restrict = 'EA';\r\n templateUrl =\r\n '/Modules/Mail/Directives/PreviewOutgoingMailPopupButton.html';\r\n replace = true;\r\n controller = PreviewOutgoingMailPopupButtonController;\r\n scope = {\r\n title: '@',\r\n outgoingMailActivityModel: '='\r\n };\r\n\r\n static factory(): angular.IDirectiveFactory {\r\n return () => new PreviewOutgoingMailPopupButtonDirective();\r\n }\r\n }\r\n\r\n angular\r\n .module('Mail')\r\n .directive(\r\n 'previewOutgoingMailPopupButton',\r\n PreviewOutgoingMailPopupButtonDirective.factory()\r\n );\r\n}\r\n","namespace Umbrella.Modules.Mail {\r\n import OutgoingMailActivityModel = Umbrella.Modules.Mail.OutgoingMailActivityModel;\r\n import OutgoingMailResource = Umbrella.Modules.Mail.IOutgoingMailResourceClass;\r\n\r\n export interface ResendOutgoingMailPopupButtonScope {\r\n title: string;\r\n outgoingMailActivityModel: OutgoingMailActivityModel;\r\n launchResendOutgoingMailPopup(): void;\r\n }\r\n\r\n @Controller('Mail', 'ResendOutgoingMailPopupButtonController')\r\n @Inject('$scope', 'CreateDialog', 'OutgoingMailResource')\r\n export class ResendOutgoingMailPopupButtonController {\r\n constructor(\r\n public $scope: ResendOutgoingMailPopupButtonScope,\r\n createDialog,\r\n outgoingMailResource: OutgoingMailResource\r\n ) {\r\n $scope.launchResendOutgoingMailPopup = () => {\r\n outgoingMailResource\r\n .get({\r\n id: $scope.outgoingMailActivityModel.outgoingMailId\r\n })\r\n .$promise.then(mail =>\r\n createDialog(\r\n '/Modules/Umbrella/Admin/Mail/ForwardMailPopup.html',\r\n {\r\n id: 'resendMailPopup',\r\n modalClass: 'popup green popup_800',\r\n controller: 'ForwardMailPopupController'\r\n },\r\n {\r\n mail\r\n }\r\n )\r\n );\r\n };\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Mail {\r\n export class ResendOutgoingMailPopupButtonDirective\r\n implements angular.IDirective {\r\n restrict = 'EA';\r\n templateUrl =\r\n '/Modules/Mail/Directives/ResendOutgoingMailPopupButton.html';\r\n replace = true;\r\n controller = ResendOutgoingMailPopupButtonController;\r\n scope = {\r\n title: '@',\r\n outgoingMailActivityModel: '='\r\n };\r\n\r\n static factory(): angular.IDirectiveFactory {\r\n return () => new ResendOutgoingMailPopupButtonDirective();\r\n }\r\n }\r\n\r\n angular\r\n .module('Mail')\r\n .directive(\r\n 'resendOutgoingMailPopupButton',\r\n ResendOutgoingMailPopupButtonDirective.factory()\r\n );\r\n}\r\n","namespace Umbrella.Modules.Chat {\r\n import IResource = ng.resource.IResource;\r\n\r\n export interface IAvatarResourceProvider {\r\n getBlob(params: { id: System.Guid }): IResource;\r\n getDefaultPhoto(): IResource;\r\n getInlinePhoto(params: {\r\n id: System.Guid;\r\n useDefault: boolean;\r\n }): IResource;\r\n getInlineDefaultPhoto(): IResource;\r\n }\r\n\r\n angular.module('Chat').service('AvatarResourceProvider', [\r\n '$resource',\r\n $resource =>\r\n $resource(\r\n '/api/v1/colleague/photo/:action/:subaction/:id',\r\n {},\r\n {\r\n getBlob: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: '', id: '@id', width: 40, height: 40 }\r\n },\r\n getDefaultPhoto: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'default' }\r\n },\r\n getInlinePhoto: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'inline',\r\n id: '@id',\r\n width: 40,\r\n height: 40\r\n }\r\n },\r\n getInlineDefaultPhoto: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'inline', subaction: 'default' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.Modules.Onboarding {\r\n import IResource = ng.resource.IResource;\r\n import RelationModel = Umbrella.Onboarding.relationModel;\r\n\r\n export interface IOnboardingResource {\r\n getRelationByExternalId(params: {\r\n externalId: string;\r\n }): IResource;\r\n }\r\n angular.module('Onboarding').service('OnboardingResource', [\r\n '$resource',\r\n $resource =>\r\n $resource(\r\n '/api/v1/onboarding/:action/:id',\r\n {},\r\n {\r\n getRelationByExternalId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'getRelationByExternalId' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Repairs {\r\n import AnswerModel = SelfService.Models.AnswerModel;\r\n\r\n export interface IAnswerResource extends AnswerModel.Detailed {}\r\n\r\n export interface IGetAnswersParams {\r\n parentId?: System.Guid;\r\n housingTypeId?: System.Guid;\r\n unitId: System.Guid;\r\n }\r\n\r\n export interface IAnswerResourceClass {\r\n getById(\r\n params: IdRequestParams\r\n ): ng.resource.IResource;\r\n getAnswers(\r\n params: IGetAnswersParams,\r\n callback?: (answer: AnswerModel.Detailed[]) => void\r\n ): ng.resource.IResource;\r\n }\r\n\r\n angular.module('Repairs').service('AnswerResource', [\r\n '$resource',\r\n $resource =>\r\n $resource(\r\n '/api/v1/answer/:action/:id',\r\n {},\r\n {\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'GetAnswerById', id: '@id' }\r\n },\r\n getAnswers: {\r\n method: 'GET',\r\n isArray: true,\r\n url: '/api/v1/answer/getAnswers/:parentId',\r\n params: { parentId: '@parentId' }\r\n },\r\n getAnswersOfIndex: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'getAnswersOfIndex', index: 0 }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","namespace Umbrella.Modules.Repairs {\r\n export interface ISearchParams extends PagedRequestParams {\r\n id?: string;\r\n actionType?: string;\r\n failures?: boolean;\r\n rules?: boolean;\r\n }\r\n\r\n export interface IDefectResourceClass {\r\n new (DefectModel): ng.resource.IResource & DefectModel;\r\n getById(params: IdRequestParams): ng.resource.IResource;\r\n getAll(): ng.resource.IResource;\r\n search(\r\n params: ISearchParams\r\n ): ng.resource.IResource>;\r\n getByAnswerId(\r\n params: IdRequestParams\r\n ): ng.resource.IResource;\r\n delete(params: IdRequestParams): ng.resource.IResource<{}>;\r\n update(defect: DefectModel): ng.resource.IResource;\r\n save(defect: DefectModel): ng.resource.IResource;\r\n }\r\n\r\n angular.module('Repairs').service('DefectResource', [\r\n '$resource',\r\n $resource =>\r\n $resource(\r\n '/api/v1/defect/:action/:id',\r\n {},\r\n {\r\n getAll: {\r\n method: 'GET',\r\n isArray: true,\r\n params: {}\r\n },\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n save: {\r\n method: 'POST',\r\n isArray: false,\r\n params: {}\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: {}\r\n },\r\n delete: {\r\n method: 'DELETE',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n getPaged: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'paged', page: 0, pageSize: 15 }\r\n },\r\n getActionTypes: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'ActionTypes' }\r\n },\r\n getByAnswerId: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'ByAnswer', id: 'id' }\r\n },\r\n search: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'search',\r\n id: '@id',\r\n actionType: '@actionType',\r\n failures: false,\r\n page: 0,\r\n pageSize: 10\r\n }\r\n },\r\n getFailuresPaged: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'failures', page: 0, pageSize: 15 }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","namespace Umbrella.Modules.Repairs {\r\n export interface ILocationTypeCodeResourceClass {\r\n getAll(): ng.resource.IResource;\r\n getPaged(\r\n params: PagedRequestParams\r\n ): ng.resource.IResource>;\r\n getById(\r\n params: IdRequestParams\r\n ): ng.resource.IResource;\r\n }\r\n\r\n angular.module('Repairs').service('LocationTypeCodeResource', [\r\n '$resource',\r\n $resource =>\r\n $resource(\r\n '/api/v1/locationtypecode/:action/:id',\r\n {},\r\n {\r\n getAll: {\r\n method: 'GET',\r\n isArray: true,\r\n params: {}\r\n },\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {}\r\n },\r\n getPaged: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'getPaged', page: 0, pageSize: 10 }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: {}\r\n },\r\n save: {\r\n method: 'POST',\r\n isArray: false,\r\n params: {}\r\n },\r\n delete: {\r\n method: 'DELETE',\r\n isArray: false,\r\n params: { id: '' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Repairs {\r\n import IResource = ng.resource.IResource;\r\n import Guid = System.Guid;\r\n\r\n export interface IGetAvailablePlanningOptionsParams {\r\n repairRequestId: Guid;\r\n from: Date;\r\n until: Date;\r\n external: boolean;\r\n }\r\n\r\n export interface IPlanningResource {\r\n getAvailablePlanningOptions(\r\n params: IGetAvailablePlanningOptionsParams\r\n ): IResource;\r\n }\r\n\r\n angular.module('Repairs').service('PlanningResource', [\r\n '$resource',\r\n $resource => {\r\n let prefix = '/api/v1/planning/repairrequest';\r\n return $resource(\r\n prefix,\r\n {},\r\n {\r\n getAvailablePlanningOptions: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n repairRequestId: '@repairRequestId',\r\n from: '@from',\r\n until: '@until',\r\n external: '@external'\r\n }\r\n }\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Repairs {\r\n import IResource = ng.resource.IResource;\r\n export interface SimulateParams {\r\n unitId: System.Guid;\r\n answerId: System.Guid;\r\n defectId: System.Guid;\r\n customerId: System.Guid;\r\n }\r\n export interface IdRepairRequestAppointmentParams {\r\n id: System.Guid;\r\n }\r\n\r\n export interface ActionSpecificationParams {\r\n unitId: System.Guid;\r\n answerId: System.Guid;\r\n defectId: System.Guid;\r\n }\r\n\r\n export interface IRepairRequestResourceClass {\r\n getById(params: IdRequestParams): IResource;\r\n getDetailed(\r\n params: IdRequestParams\r\n ): IResource;\r\n getAppointmentByAppointmentId(\r\n params: IdRepairRequestAppointmentParams\r\n ): IResource;\r\n simulate(\r\n params: SimulateParams\r\n ): IResource;\r\n getActionSpecification(\r\n params: ActionSpecificationParams\r\n ): IResource;\r\n createItem(\r\n params: CreateRepairItemModel\r\n ): IResource;\r\n createItemAnonymous(\r\n params: CreateRepairItemModel\r\n ): IResource;\r\n removeItem(\r\n params: RemoveDefectItemModel\r\n ): IResource;\r\n submit(params: SubmitRepairRequestModel): IResource;\r\n plan(params: PlanRepairRequestModel): IResource;\r\n }\r\n\r\n angular.module('SelfService').service('RepairRequestResource', [\r\n '$resource',\r\n $resource => {\r\n let prefix = '/api/v1/repairs/:action/:id/:route';\r\n return $resource(\r\n prefix,\r\n {},\r\n {\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n getDetailed: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id', route: 'detailed' }\r\n },\r\n getAppointmentByAppointmentId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'appointment', id: '@id' }\r\n },\r\n simulate: {\r\n method: 'POST',\r\n isArray: false,\r\n params: {\r\n action: 'simulate',\r\n unitId: '@unitId',\r\n customerId: '@customerId',\r\n answerId: '@answerId',\r\n defectId: '@defectId'\r\n }\r\n },\r\n getActionSpecification: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'actionspecification',\r\n unitId: '@unitId',\r\n answerId: '@answerId',\r\n defectId: '@defectId'\r\n }\r\n },\r\n createItem: {\r\n method: 'POST',\r\n isArray: false,\r\n params: {\r\n action: 'item'\r\n }\r\n },\r\n createItemAnonymous: {\r\n method: 'POST',\r\n isArray: false,\r\n params: {\r\n action: 'anonymousitem'\r\n }\r\n },\r\n removeItem: {\r\n method: 'POST',\r\n isArray: false,\r\n params: {\r\n action: 'removeItem'\r\n }\r\n },\r\n submit: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: {\r\n action: 'submit'\r\n }\r\n },\r\n plan: {\r\n method: 'POST',\r\n isArray: false,\r\n params: {\r\n action: 'plan'\r\n }\r\n }\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Repairs {\r\n import IResource = ng.resource.IResource;\r\n\r\n export interface IRepairRequestRuleResource\r\n extends RepairRequestRuleModel.Edit {\r\n $update(): ng.IPromise;\r\n $save(): ng.IPromise;\r\n $delete(): ng.IPromise;\r\n }\r\n\r\n export interface SearchParams extends PagedRequestParams {\r\n id?: string;\r\n actionType?: string;\r\n }\r\n\r\n export interface IRepairRequestRuleResourceClass {\r\n new (model: RepairRequestRuleModel.Edit): IRepairRequestRuleResource;\r\n getById(\r\n params: IdRequestParams,\r\n success?: (model: IRepairRequestRuleResource) => void\r\n ): IResource;\r\n getAllPaged(\r\n params: PagedRequestParams\r\n ): IResource>;\r\n search(\r\n params: SearchParams\r\n ): IResource>;\r\n save(\r\n model: RepairRequestRuleModel.Edit\r\n ): IResource;\r\n update(\r\n model: RepairRequestRuleModel.Edit\r\n ): IResource;\r\n delete(params: IdRequestParams);\r\n getPropertyConditions(): IResource<\r\n Configuration.PropertyConditionElementModel[]\r\n >;\r\n }\r\n\r\n angular.module('Repairs').service('RepairRequestRuleResource', [\r\n '$resource',\r\n $resource =>\r\n $resource(\r\n '/api/v1/repairrequestrule/:action/:id',\r\n {},\r\n {\r\n getAllPaged: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: '', page: 0, size: 10 }\r\n },\r\n save: {\r\n method: 'POST',\r\n isArray: false,\r\n params: {}\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: {}\r\n },\r\n delete: {\r\n method: 'DELETE',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n getById: {\r\n url: '/api/v1/repairrequestrule/:id',\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n search: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'search',\r\n id: '@id',\r\n actionType: '@actionType',\r\n page: 0,\r\n pageSize: 10\r\n }\r\n },\r\n getPropertyConditions: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'propertyconditions' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","namespace Umbrella.Modules.Repairs {\r\n export interface ISpecificationCodeResourceClass {\r\n getAll(): ng.resource.IResource;\r\n getPaged(\r\n params: PagedRequestParams\r\n ): ng.resource.IResource>;\r\n }\r\n\r\n angular.module('Repairs').service('SpecificationCodeResource', [\r\n '$resource',\r\n $resource =>\r\n $resource(\r\n '/api/v1/specificationcode/:action/:id',\r\n {},\r\n {\r\n getAll: {\r\n method: 'GET',\r\n isArray: true,\r\n params: {}\r\n },\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {}\r\n },\r\n getPaged: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'getPaged', page: 0, pageSize: 10 }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: {}\r\n },\r\n save: {\r\n method: 'POST',\r\n isArray: false,\r\n params: {}\r\n },\r\n delete: {\r\n method: 'DELETE',\r\n isArray: false,\r\n params: { id: '' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","namespace Umbrella.Modules.Repairs.Card {\r\n import AnswerModel = SelfService.Models.AnswerModel;\r\n import VendorModel = Umbrella.Modules.Vendor.VendorModel;\r\n import VendorResourceClass = Umbrella.CustomerService.VendorResourceClass;\r\n import IUnitResource = Umbrella.Modules.Housing.Units.IUnitResource;\r\n import ILocationTypeCodeResourceClass = Umbrella.Modules.Repairs.ILocationTypeCodeResourceClass;\r\n import CollectiveObjectModel = Umbrella.Modules.Housing.CollectiveObjectModel;\r\n\r\n export interface IAddDefectPopupScope extends IPopupScope {\r\n unit: Housing.UnitModel;\r\n }\r\n\r\n export interface IAddDefectPopupController {\r\n unit: Housing.UnitModel;\r\n answerPath: AnswerModel[];\r\n answer: AnswerModel;\r\n defect: DefectModel;\r\n actionSpecification: ActionSpecificationModel;\r\n remark: string;\r\n\r\n showDefects(): boolean;\r\n showAnswers(): boolean;\r\n showSpecification(): boolean;\r\n\r\n answers: AnswerModel[];\r\n defects: DefectModel[];\r\n\r\n selectAnswer(answer: AnswerModel): void;\r\n selectDefect(defect: DefectModel): void;\r\n selectCollectiveObject(collectiveObject: CollectiveObjectModel): void;\r\n\r\n cancel(): void;\r\n saveAndClose(): void;\r\n canSaveAndClose(): boolean;\r\n }\r\n\r\n @Controller('Housing', 'AddDefectPopupController')\r\n @Inject(\r\n '$scope',\r\n 'AnswerResource',\r\n 'DefectResource',\r\n 'RepairRequestResource',\r\n 'VendorResource',\r\n 'UnitResource',\r\n 'LocationTypeCodeResource'\r\n )\r\n export class AddDefectPopupController implements IAddDefectPopupController {\r\n public answers: AnswerModel[];\r\n public defects: DefectModel[];\r\n public unit: Housing.UnitModel;\r\n public answerPath: AnswerModel[] = [];\r\n public answer: AnswerModel = null;\r\n public defect: DefectModel = null;\r\n public actionSpecification: ActionSpecificationModel = null;\r\n public remark = '';\r\n public vendors: VendorModel[];\r\n public vendor: VendorModel;\r\n public collectiveObject: CollectiveObjectModel;\r\n public collectiveObjects: CollectiveObjectModel[];\r\n\r\n constructor(\r\n private $scope: IAddDefectPopupScope,\r\n private answerResource: IAnswerResourceClass,\r\n private defectResource: IDefectResourceClass,\r\n private repairRequestResource: IRepairRequestResourceClass,\r\n private vendorResource: VendorResourceClass,\r\n private unitResource: IUnitResource,\r\n private locationTypeCodeResource: ILocationTypeCodeResourceClass\r\n ) {\r\n this.unit = $scope.unit;\r\n\r\n this.loadOptions(this.unit, null);\r\n }\r\n\r\n public showAnswers(): boolean {\r\n return !this.answer || this.answer.index < 3;\r\n }\r\n\r\n public showDefects(): boolean {\r\n return this.answer && this.answer.index === 3;\r\n }\r\n\r\n public showCollectiveObjects(): boolean {\r\n return this.defect ? true : false;\r\n }\r\n\r\n public showSpecification(): boolean {\r\n return this.actionSpecification !== null;\r\n }\r\n\r\n public cancel(): void {\r\n this.$scope.$modalCancel();\r\n }\r\n\r\n public saveAndClose(): void {\r\n this.$scope.$modalSuccess(\r\n this.answerPath,\r\n this.defect,\r\n this.actionSpecification,\r\n this.remark,\r\n this.vendor ? this.vendor.id : null,\r\n this.collectiveObject ? this.collectiveObject.id : null\r\n );\r\n }\r\n\r\n public canSaveAndClose(): boolean {\r\n return (\r\n this.answer &&\r\n this.defect &&\r\n this.actionSpecification &&\r\n this.actionSpecification.canFinish &&\r\n (!this.actionSpecification.remarkIsRequired ||\r\n this.remark !== '')\r\n );\r\n }\r\n\r\n public selectAnswer(a: AnswerModel) {\r\n this.setAnswer(a);\r\n this.defects = [];\r\n this.answers = [];\r\n this.loadOptions(this.unit, this.answer);\r\n }\r\n\r\n public selectDefect(d: DefectModel) {\r\n this.setDefect(d);\r\n\r\n const answer = this.answerPath[1];\r\n if (!answer.locationTypeId) {\r\n this.loadActionSpecification(this.unit, this.answer, this.defect);\r\n }\r\n else {\r\n this.locationTypeCodeResource.getById({ id: answer.locationTypeId })\r\n .$promise\r\n .then((locationType: LocationTypeCodeModel) => {\r\n const type = locationType.key.split('#')[0];\r\n this.loadCollectiveObjects(type);\r\n });\r\n }\r\n }\r\n\r\n public selectCollectiveObject(collectiveObject: CollectiveObjectModel) {\r\n this.collectiveObject = collectiveObject;\r\n this.loadActionSpecification(this.unit, this.answer, this.defect);\r\n }\r\n\r\n public selectVendor(v: VendorModel) {\r\n this.vendor = v;\r\n }\r\n\r\n private loadCollectiveObjects(type: string) {\r\n this.unitResource.getCollectiveObjectsByCode({ id: this.unit.id, code: type })\r\n .$promise\r\n .then((collectiveObjects: CollectiveObjectModel[]) => {\r\n if (collectiveObjects.length === 0) {\r\n this.loadActionSpecification(this.unit, this.answer, this.defect);\r\n } else if (collectiveObjects.length === 1) {\r\n this.selectCollectiveObject(collectiveObjects[0]);\r\n } else {\r\n this.collectiveObjects = collectiveObjects;\r\n }\r\n });\r\n }\r\n\r\n private loadOptions(unit: Housing.UnitModel, answer: AnswerModel) {\r\n if (answer && answer.index === 3) {\r\n // Fetch defects for this answer\r\n this.defectResource\r\n .getByAnswerId({ id: answer.id })\r\n .$promise.then(defects => (this.defects = defects));\r\n } else {\r\n this.answerResource\r\n .getAnswers({\r\n parentId: answer ? answer.id : null,\r\n housingTypeId: unit.housingTypeId,\r\n unitId: unit.id\r\n })\r\n .$promise.then(answers => (this.answers = answers));\r\n }\r\n }\r\n\r\n private loadActionSpecification(\r\n unit: Housing.UnitModel,\r\n answer: AnswerModel,\r\n defect: DefectModel\r\n ): void {\r\n this.repairRequestResource\r\n .getActionSpecification({\r\n unitId: this.unit.id,\r\n answerId: answer.id,\r\n defectId: defect.id\r\n })\r\n .$promise.then(actionSpectification =>\r\n this.setActionSpecification(actionSpectification)\r\n );\r\n }\r\n\r\n private setAnswer(answer: AnswerModel): void {\r\n const createPath = (answer: AnswerModel) => {\r\n const ascendAnswer = (decision, func) => {\r\n const iter = d => {\r\n if (d) {\r\n func(d);\r\n iter(d.parent);\r\n }\r\n };\r\n\r\n iter(decision);\r\n };\r\n\r\n const path = [];\r\n ascendAnswer(answer, d => path.push(d));\r\n return path.reverse();\r\n };\r\n\r\n this.answerPath = createPath(answer);\r\n this.answer = answer;\r\n this.collectiveObject = null;\r\n this.defect = null;\r\n this.actionSpecification = null;\r\n }\r\n\r\n private setDefect(defect: DefectModel): void {\r\n this.defect = defect;\r\n this.collectiveObject = null;\r\n this.actionSpecification = null;\r\n }\r\n\r\n private setActionSpecification(\r\n actionSpecification: ActionSpecificationModel\r\n ): void {\r\n this.actionSpecification = actionSpecification;\r\n\r\n this.vendor = null;\r\n if (\r\n actionSpecification.vendorOptionIds &&\r\n actionSpecification.vendorOptionIds.length > 0\r\n )\r\n this.vendorResource\r\n .getByIds({ ids: actionSpecification.vendorOptionIds })\r\n .$promise.then(vendors => (this.vendors = vendors));\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Repairs.Card {\r\n import Guid = System.Guid;\r\n import AnswerModel = SelfService.Models.AnswerModel;\r\n import IUnitResource = Housing.Units.IUnitResource;\r\n import UnitActivitiesService = Umbrella.CustomerService.UnitCard.Activities.UnitActivitiesService;\r\n\r\n export enum RepairRequestStep {\r\n AddDefects,\r\n Plan,\r\n Submitted\r\n }\r\n\r\n export interface IRepairRequestTabController {\r\n currentStep: RepairRequestStep;\r\n unit: Housing.UnitModel;\r\n repairRequest: RepairRequestModel;\r\n waiting: boolean;\r\n\r\n addItem(): void;\r\n removeItem(item: RepairRequestItemModel): void;\r\n plan(planningOption: PlanningOptionModel);\r\n\r\n isAddDefectsStep(): boolean;\r\n isPlanStep(): boolean;\r\n isSubmitted(): boolean;\r\n\r\n submit(): void;\r\n submitWithoutPlanning(): void;\r\n canSubmit(): boolean;\r\n\r\n startNewRepairRequest(): void;\r\n }\r\n\r\n @Controller('Housing', 'RepairRequestTabController')\r\n @Inject(\r\n '$stateParams',\r\n '$timeout',\r\n 'UnitResource',\r\n 'RepairRequestResource',\r\n 'CreateDialog',\r\n 'UnitActivitiesService'\r\n )\r\n export class RepairRequestTabController implements IRepairRequestTabController {\r\n waiting: boolean;\r\n currentStep: RepairRequestStep;\r\n unit: Housing.UnitModel;\r\n repairRequest: RepairRequestModel = null;\r\n planningOption: PlanningOptionModel = null;\r\n\r\n constructor(\r\n protected $stateParams: ng.ui.IStateParamsService,\r\n private $timeout: ng.ITimeoutService,\r\n private unitResource: IUnitResource,\r\n private repairRequestResource: IRepairRequestResourceClass,\r\n private createDialog,\r\n private unitActivitiesService: UnitActivitiesService\r\n ) {\r\n this.loadUnit();\r\n\r\n this.currentStep = RepairRequestStep.AddDefects;\r\n this.waiting = false;\r\n }\r\n\r\n protected loadUnit(): void {\r\n this.unitResource.getById({ id: this.$stateParams.unitId }).$promise.then(unit => (this.unit = unit));\r\n }\r\n\r\n public isAddDefectsStep(): boolean {\r\n return this.currentStep === RepairRequestStep.AddDefects;\r\n }\r\n\r\n public isPlanStep(): boolean {\r\n return this.currentStep === RepairRequestStep.Plan;\r\n }\r\n\r\n public isSubmitted(): boolean {\r\n return this.currentStep === RepairRequestStep.Submitted;\r\n }\r\n\r\n public addItem(): void {\r\n this.createDialog(\r\n '/Modules/Repairs/Card/Tabs/RepairRequest/AddDefectPopup.html',\r\n {\r\n id: 'addDefectPopup',\r\n backdrop: true,\r\n modalClass: 'popup green popup_650',\r\n backdropClass: 'popup-backdrop',\r\n successCallback: (\r\n answerPath: AnswerModel[],\r\n defect: DefectModel,\r\n actionSpecification: ActionSpecificationModel,\r\n remark: string,\r\n vendorId: Guid,\r\n collectiveObjectId: Guid\r\n ) => {\r\n this.createItem(answerPath, defect, remark, vendorId, collectiveObjectId);\r\n }\r\n },\r\n { unit: this.unit }\r\n );\r\n }\r\n\r\n public needsPlanning(): boolean {\r\n return (\r\n this.repairRequest !== null &&\r\n this.repairRequest.items.reduce((x, value) => x || value.isPlannable, false)\r\n );\r\n }\r\n\r\n public hasPlanning(): boolean {\r\n return !!this.planningOption;\r\n }\r\n\r\n public goToPlanningStep(): void {\r\n this.currentStep = RepairRequestStep.Plan;\r\n }\r\n\r\n public canSubmit(): boolean {\r\n return (\r\n this.repairRequest &&\r\n this.repairRequest.items.length > 0 &&\r\n (!this.needsPlanning() || this.hasPlanning()) &&\r\n this.repairRequest.isInProgress\r\n );\r\n }\r\n\r\n protected createItem(answerPath: AnswerModel[], defect: DefectModel, remark: string, vendorId: Guid, collectiveObjectId: Guid): void {\r\n this.repairRequestResource\r\n .createItemAnonymous({\r\n answerPath: answerPath.map(answer => answer.id),\r\n defectId: defect.id,\r\n media: [],\r\n repairRequestId: this.repairRequest ? this.repairRequest.id : null,\r\n remarks: remark,\r\n unitId: this.unit.id,\r\n serviceFundId: null,\r\n vendorId,\r\n collectiveObjectId\r\n })\r\n .$promise.then(repairRequest => (this.repairRequest = repairRequest));\r\n }\r\n\r\n public removeItem(item: RepairRequestItemModel): void {\r\n this.repairRequestResource\r\n .removeItem({\r\n id: this.repairRequest.id,\r\n defectId: item.id\r\n })\r\n .$promise.then(repairRequest => (this.repairRequest = repairRequest));\r\n }\r\n\r\n public plan(planningOption: PlanningOptionModel): void {\r\n this.repairRequestResource\r\n .plan({\r\n id: this.repairRequest.id,\r\n option: planningOption,\r\n planningImpossible: false\r\n }\r\n ).$promise.then(() => this.planningOption = planningOption);\r\n }\r\n\r\n public submit(): void {\r\n this.waiting = true;\r\n\r\n this.repairRequestResource\r\n .submit({\r\n id: this.repairRequest.id,\r\n channelType: ChannelType.Umbrella,\r\n phone: '',\r\n email: ''\r\n })\r\n .$promise.then(repairRequest => {\r\n this.currentStep = RepairRequestStep.Submitted;\r\n this.repairRequest = repairRequest;\r\n this.$timeout(() => {\r\n this.reloadUnitCardActivities();\r\n }, 1000);\r\n })\r\n .finally(() => (this.waiting = false));\r\n }\r\n\r\n public submitWithoutPlanning(): void {\r\n this.waiting = true;\r\n\r\n this.repairRequestResource\r\n .plan({\r\n id: this.repairRequest.id,\r\n option: null,\r\n planningImpossible: true\r\n })\r\n .$promise.then(_ => {\r\n this.submit();\r\n })\r\n .finally(() => (this.waiting = false));\r\n }\r\n\r\n public reloadUnitCardActivities(): void {\r\n this.unitActivitiesService.reload();\r\n }\r\n\r\n public startNewRepairRequest(): void {\r\n this.repairRequest = null;\r\n this.currentStep = RepairRequestStep.AddDefects;\r\n }\r\n }\r\n\r\n angular.module('Housing').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) =>\r\n $stateProvider.state('customerservice.unitcard.tab.repairrequest', {\r\n reloadOnSearch: false,\r\n url: '/reparatieverzoek',\r\n data: {\r\n pageTitle: 'Reparatieverzoek',\r\n tab: 'repairrequest',\r\n authorize: ps => ps.anonymousRepairRequestWrite\r\n },\r\n views: {\r\n 'tab@customerservice': {\r\n templateUrl: '/Modules/Repairs/Card/Tabs/RepairRequest/Tab.html'\r\n }\r\n }\r\n })\r\n ]);\r\n}\r\n","namespace Umbrella.Modules.Repairs {\r\n @Component('Repairs', {\r\n templateUrl:\r\n '/Modules/Repairs/PlanRepairRequestComponent/PlanRepairRequestComponent.html',\r\n selector: 'plan-repairrequest',\r\n bindings: {\r\n repairRequest: '<',\r\n onChange: '&'\r\n }\r\n })\r\n @Inject('PlanningResource')\r\n export class PlanRepairRequestComponent {\r\n repairRequest: RepairRequestModel;\r\n\r\n loading: boolean;\r\n\r\n planningFrom: Date;\r\n planningUntil: Date;\r\n planningOptions: AvailablePlanningModel;\r\n planningOption: PlanningOptionModel;\r\n planningError: any = null;\r\n onChange: (data: any) => void;\r\n loadNextWeekWhenUnavailable: boolean;\r\n\r\n constructor(private planningResource: IPlanningResource) {}\r\n\r\n private $onInit() {\r\n this.planningFrom = new Date().midnight().moveToFirstDayOfWeek();\r\n this.planningUntil = this.planningFrom.moveToLastDayOfWeek();\r\n this.loadNextWeekWhenUnavailable = true;\r\n this.loadPlanning();\r\n }\r\n\r\n private loadPlanning(): void {\r\n if (this.loading) return;\r\n\r\n this.loading = true;\r\n this.planningError = null;\r\n this.planningResource\r\n .getAvailablePlanningOptions({\r\n repairRequestId: this.repairRequest.id,\r\n from: this.planningFrom,\r\n until: this.planningUntil,\r\n external: false\r\n })\r\n .$promise.then(\r\n planningOptions => {\r\n this.loading = false;\r\n if (\r\n planningOptions.availablePlanningOptions.length ===\r\n 0 &&\r\n !planningOptions.isLastPlannableWeek &&\r\n this.loadNextWeekWhenUnavailable\r\n ) {\r\n this.nextWeek();\r\n } else {\r\n this.loadNextWeekWhenUnavailable = false;\r\n this.planningOptions = planningOptions;\r\n }\r\n },\r\n errorReason => {\r\n this.planningError = errorReason;\r\n this.loading = false;\r\n }\r\n );\r\n }\r\n\r\n public nextWeek(): void {\r\n this.planningFrom = this.planningFrom.addDays(7);\r\n this.planningUntil = this.planningUntil.addDays(7);\r\n\r\n this.loadPlanning();\r\n }\r\n\r\n public hasNextWeek(): boolean {\r\n return (\r\n !this.loading &&\r\n this.planningOptions &&\r\n !this.planningOptions.isLastPlannableWeek\r\n );\r\n }\r\n\r\n public previousWeek(): void {\r\n this.planningFrom = this.planningFrom.addDays(-7);\r\n this.planningUntil = this.planningUntil.addDays(-7);\r\n\r\n this.loadPlanning();\r\n }\r\n\r\n public hasPreviousWeek(): boolean {\r\n return !this.loading && new Date() < this.planningFrom;\r\n }\r\n\r\n public selectPlanning(option: PlanningOptionModel) {\r\n this.onChange({ option });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Repairs {\r\n import RepairRequestAppointmentModel = Umbrella.Modules.Repairs.RepairRequestAppointmentModel;\r\n\r\n @Component('SelfService', {\r\n selector: 'repairs-appointment-timeline-information',\r\n templateUrl:\r\n '/Modules/Repairs/RepairsAppointmentTimelineComponent/RepairsAppointmentTimeline.html',\r\n bindings: {\r\n appointmentId: '<'\r\n }\r\n })\r\n @Inject('RepairRequestResource')\r\n export class ApppointmentTimelineComponent {\r\n public appointmentId: System.Guid;\r\n public appointment: RepairRequestAppointmentModel;\r\n constructor(private appointmentResource: IRepairRequestResourceClass) {}\r\n public $onInit() {\r\n if (this.appointmentId) {\r\n this.appointmentResource\r\n .getAppointmentByAppointmentId({ id: this.appointmentId })\r\n .$promise.then(data => (this.appointment = data));\r\n }\r\n }\r\n }\r\n}\r\n","angular.module('SelfService').factory('DecisionResource', [\r\n '$resource',\r\n function($resource) {\r\n 'use strict';\r\n\r\n return $resource(\r\n '/api/v1/decision/:action/:id',\r\n {},\r\n {\r\n getAll: {\r\n url: '/api/v1/decision/:id/children',\r\n method: 'GET',\r\n isArray: true,\r\n params: { id: '@id' }\r\n },\r\n getRoot: {\r\n url: '/api/v1/:scenario/decision/:action/:id',\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'root', id: '', scenario: '' }\r\n },\r\n delete: {\r\n method: 'DELETE',\r\n isArray: false,\r\n params: { action: '', id: '@id' }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { action: '', id: '' }\r\n }\r\n }\r\n );\r\n }\r\n]);\r\n","namespace Umbrella.Modules.SelfService {\r\n export interface SelfServiceReportGetAllRequestParams {\r\n startDate: Date;\r\n endDate: Date;\r\n page?: number;\r\n pageSize?: number;\r\n query?: string;\r\n scenarioId?: System.Guid;\r\n failed?: boolean;\r\n status?: string;\r\n }\r\n\r\n export interface SelfServiceReportResource\r\n extends Umbrella.Modules.SelfService.SelfServiceReportModel,\r\n angular.resource.IResource<\r\n Umbrella.Modules.SelfService.SelfServiceReportModel\r\n > {\r\n getAll(\r\n params: SelfServiceReportGetAllRequestParams\r\n ): PagedItemsModel;\r\n getById(params: IdRequestParams): SelfServiceReportResource;\r\n getByCaseId(params: IdRequestParams): SelfServiceReportResource;\r\n getByFlowStateId(params: IdRequestParams): angular.resource.IResource;\r\n }\r\n\r\n angular.module('SelfService').service('SelfServiceReportResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/selfservice/report/:action/:id',\r\n {},\r\n {\r\n getById: { method: 'GET', isArray: false },\r\n getAll: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { startDate: '@startDate', endDate: '@endDate' }\r\n },\r\n getByCaseId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'bycase', id: '@caseId' }\r\n },\r\n getByFlowStateId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'byflow', id: '@flowId' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","namespace Umbrella.Modules.SelfService {\r\n angular\r\n .module('SelfService')\r\n .filter('selfServiceStatusName', function() {\r\n return function(input) {\r\n switch (input) {\r\n case 1:\r\n case 'Online':\r\n default:\r\n return 'Online';\r\n case 10:\r\n case 'Offline':\r\n return 'Gepland offline';\r\n case 11:\r\n case 'KccOnly':\r\n return 'Alleen beschikbaar voor KCC medewerkers';\r\n case 12:\r\n case 'AdministratorsOnly':\r\n return 'Alleen beschikbaar voor KCC beheerders';\r\n case 20:\r\n case 'Faulted':\r\n return 'Offline';\r\n }\r\n };\r\n })\r\n .filter('selfServiceStatusClass', function() {\r\n return function(input) {\r\n switch (input) {\r\n case 1:\r\n case 'Online':\r\n default:\r\n return 'green';\r\n case 11:\r\n case 'KccOnly':\r\n case 12:\r\n case 'AdministratorsOnly':\r\n return 'orange';\r\n case 10:\r\n case 'Offline':\r\n case 20:\r\n case 'Faulted':\r\n return 'red';\r\n }\r\n };\r\n })\r\n .filter('complaintStatus', function() {\r\n return function(input) {\r\n switch (input) {\r\n case 'Pending':\r\n return 'Wachtend';\r\n case 'Submitted':\r\n return 'Ingediend door klant';\r\n case 'InProgress':\r\n return 'In behandeling';\r\n case 'Finished':\r\n return 'Afgehandeld';\r\n case 'Canceled':\r\n return 'Geannuleerd';\r\n }\r\n\r\n return 'Onbekend (' + input + ')';\r\n };\r\n })\r\n .filter('complimentStatus', function() {\r\n return function(input) {\r\n switch (input) {\r\n case 'Pending':\r\n return 'Wachtend';\r\n case 'Submitted':\r\n return 'Ingediend door klant';\r\n case 'InProgress':\r\n return 'In behandeling';\r\n case 'Finished':\r\n return 'Afgehandeld';\r\n case 'Canceled':\r\n return 'Geannuleerd';\r\n }\r\n\r\n return 'Onbekend (' + input + ')';\r\n };\r\n })\r\n .filter('disturbanceStatus', function() {\r\n return function(input) {\r\n switch (input) {\r\n case 'Pending':\r\n return 'Wachtend';\r\n case 'Submitted':\r\n return 'Ingediend door klant';\r\n case 'InProgress':\r\n return 'In behandeling';\r\n case 'Finished':\r\n return 'Afgehandeld';\r\n case 'Canceled':\r\n return 'Geannuleerd';\r\n }\r\n\r\n return 'Onbekend (' + input + ')';\r\n };\r\n })\r\n .filter('houseAdjustmentStatus', function() {\r\n return function(input) {\r\n switch (input) {\r\n case 'Pending':\r\n return 'Wachtend';\r\n case 'Submitted':\r\n return 'Ingediend door klant';\r\n case 'InProgress':\r\n return 'In behandeling';\r\n case 'Finished':\r\n return 'Afgehandeld';\r\n case 'Canceled':\r\n return 'Geannuleerd';\r\n }\r\n\r\n return 'Onbekend (' + input + ')';\r\n };\r\n })\r\n .filter('selfServiceReportStatus', function() {\r\n return function(input) {\r\n switch (input) {\r\n case 'All':\r\n return 'Alle';\r\n case 'InProgress':\r\n return 'Gewijzigd';\r\n case 'Closed':\r\n return 'Geannuleerd';\r\n case 'Submitted':\r\n return 'Ingediend door klant';\r\n }\r\n\r\n return 'Onbekend (' + input + ')';\r\n };\r\n })\r\n .filter('repairRequestStatus', function() {\r\n return function(input) {\r\n switch (input) {\r\n case 'Pending':\r\n return 'Wachtend';\r\n case 'Prepared':\r\n return 'Voorbereid';\r\n case 'Submitted':\r\n return 'Ingediend door klant';\r\n case 'Accepted':\r\n return 'Geaccepteerd / in behandeling';\r\n case 'Finished':\r\n return 'Afgehandeld';\r\n case 'Locked':\r\n return 'Gefixeerd';\r\n case 'Canceled':\r\n return 'Geannuleerd';\r\n }\r\n\r\n return 'Onbekend (' + input + ')';\r\n };\r\n })\r\n .filter('repairRequestItemStatus', function() {\r\n return function(input) {\r\n switch (input) {\r\n case 'Pending':\r\n return 'In behandeling';\r\n case 'Finished':\r\n return 'Afgerond';\r\n case 'Canceled':\r\n return 'Geannuleerd';\r\n }\r\n\r\n return 'Onbekend (' + input + ')';\r\n };\r\n })\r\n .filter('selfServiceStatusSwitchClass', function() {\r\n return function(input) {\r\n switch (input) {\r\n case 1:\r\n case 'Online':\r\n return 'greenbutton';\r\n case 10:\r\n case 'Offline':\r\n case 11:\r\n case 'KccOnly':\r\n case 12:\r\n case 'AdministratorsOnly':\r\n return 'orangebutton';\r\n case 20:\r\n case 'Faulted':\r\n return 'redbutton';\r\n default:\r\n return 'greenbutton';\r\n }\r\n };\r\n });\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.SelfService.Appointments {\r\n import Guid = System.Guid;\r\n import AppointmentManagementModel = Umbrella.Modules.SelfService.Appointment.AppointmentManagementModel;\r\n\r\n export interface IAppointmentRequestParams {\r\n withSelfServiceReport: boolean;\r\n fromDate: string;\r\n toDate: string;\r\n }\r\n export interface AppointmentResource\r\n extends angular.resource.IResource {}\r\n export interface AppointmentResourceClass\r\n extends angular.resource.IResourceClass {\r\n getAppointments(\r\n params: IAppointmentRequestParams\r\n ): ng.resource.IResource>;\r\n getById(params: IdRequestParams): AppointmentResource;\r\n }\r\n angular.module('SelfService').service('AppointmentResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n 'api/v1/appointment/:action/:id',\r\n {},\r\n {\r\n getById: {\r\n method: 'Get',\r\n isArray: false,\r\n params: { action: '' }\r\n },\r\n getAppointments: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'paged' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.SelfService.Appointments {\r\n import AppointmentManagementModel = Umbrella.Modules.Planning.AppointmentManagementModel;\r\n\r\n @Component('SelfService', {\r\n selector: 'appointment-timeline-information',\r\n templateUrl:\r\n '/Modules/SelfService/Appointments/AppointmentTimelineComponent/AppointmentTimeline.html',\r\n bindings: {\r\n appointmentId: '<'\r\n }\r\n })\r\n @Inject('AppointmentResource')\r\n export class ApppointmentTimelineComponent {\r\n public appointmentId: System.Guid;\r\n public appointment: AppointmentManagementModel;\r\n constructor(private appointmentResource: AppointmentResourceClass) {}\r\n public $onInit() {\r\n if (this.appointmentId) {\r\n this.appointmentResource\r\n .getById({ id: this.appointmentId })\r\n .$promise.then(data => (this.appointment = data));\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.SelfService {\r\n @Controller('SelfService', 'RepairRequestController')\r\n @Inject('$scope', '$stateParams', 'RepairRequestResource')\r\n class RepairRequestController {\r\n constructor($scope, $stateParams, RepairRequestResource) {\r\n $scope.report = RepairRequestResource.getDetailed({\r\n id: $stateParams.id\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\ninterface SignalR {\r\n allPhonesHub: any; // Umbrella.Modules.Telephony.IAllPhonesHub\r\n}\r\n\r\nnamespace Umbrella.Modules.Telephony {\r\n export declare interface IAllPhonesHub {\r\n server: {\r\n register(): JQueryPromise;\r\n deregister(): JQueryPromise;\r\n };\r\n client: {\r\n registered?: (phone, number) => void;\r\n updated?: (phone, number) => void;\r\n };\r\n }\r\n\r\n export interface PhoneRegisteredEvent {\r\n type: 'registered';\r\n phone: any;\r\n number: any;\r\n }\r\n\r\n export interface PhoneUpdatedEvent {\r\n type: 'updated';\r\n phone: any;\r\n number: any;\r\n }\r\n\r\n export type PhoneEvent = PhoneRegisteredEvent | PhoneUpdatedEvent;\r\n export const phoneEvent$ = new Rx.Subject();\r\n\r\n @Service('Telephony', 'AllPhonesService')\r\n export class AllPhonesService {\r\n public register() {\r\n onSignalRConnected(() =>\r\n $.connection.allPhonesHub.server.register()\r\n );\r\n }\r\n\r\n public deregister() {\r\n onSignalRConnected(() =>\r\n $.connection.allPhonesHub.server.deregister()\r\n );\r\n }\r\n\r\n public getAllPhones() {\r\n onSignalRConnected(() => {\r\n $.connection.allPhonesHub.server.getAllPhones();\r\n });\r\n }\r\n\r\n public listen() {\r\n onSignalRInitialized(() => {\r\n $.connection.allPhonesHub.on('registered', (phone, nr) => {\r\n phoneEvent$.onNext({\r\n type: 'registered',\r\n phone,\r\n number: nr\r\n });\r\n });\r\n $.connection.allPhonesHub.on('update', (phone, nr) => {\r\n phoneEvent$.onNext({ type: 'updated', phone, number: nr });\r\n });\r\n });\r\n }\r\n }\r\n\r\n angular\r\n .module('Telephony')\r\n .run([\r\n 'AllPhonesService',\r\n allPhonesService => allPhonesService.listen()\r\n ]);\r\n}\r\n","/// \r\nnamespace Umbrella.Modules.TelephonyControl {\r\n import PhoneUserStatus = Umbrella.TelephonyControl.PhoneUserStatusModel;\r\n export interface IPhoneUserStatusResource\r\n extends angular.resource.IResource<\r\n Umbrella.TelephonyControl.PhoneUserStatusModel\r\n > {}\r\n\r\n export interface IPhoneStatusesParams {\r\n ids: System.Guid[];\r\n }\r\n\r\n interface IResourceParams {\r\n action?: string;\r\n page?: number;\r\n pageSize?: number;\r\n id?: string;\r\n userId?: string;\r\n }\r\n\r\n export interface IPhoneUserStatusResource\r\n extends angular.resource.IResourceClass {\r\n getStatusByIds(\r\n params: IPhoneStatusesParams\r\n ): ng.resource.IResource<\r\n Umbrella.TelephonyControl.PhoneUserStatusModel[]\r\n >;\r\n }\r\n\r\n class PhoneUserStatusResource {\r\n static $inject = ['$resource'];\r\n\r\n constructor(public $resource: angular.resource.IResourceService) {}\r\n\r\n getPhoneUserStatusResource(): IPhoneUserStatusResource {\r\n return this.$resource<\r\n Modules.Colleagues.ColleagueModel.Detailed,\r\n IPhoneUserStatusResource\r\n >(\r\n '/api/v1/phoneuserstatus/:action/:id',\r\n {},\r\n {\r\n getStatusByIds: this.getResource('GET', true, {\r\n action: 'getstatusbyids'\r\n })\r\n }\r\n );\r\n }\r\n\r\n private getResource(\r\n method: string,\r\n isArray: boolean,\r\n params?: IResourceParams,\r\n headers?: any\r\n ): angular.resource.IActionDescriptor {\r\n return { method, isArray, params, headers };\r\n }\r\n }\r\n angular\r\n .module('Telephony')\r\n .service('PhoneUserStatusResource', [\r\n '$resource',\r\n $resource =>\r\n new PhoneUserStatusResource(\r\n $resource\r\n ).getPhoneUserStatusResource()\r\n ]);\r\n}\r\n","namespace Umbrella.Modules.Telephony {\r\n export interface IQuickDialScope {\r\n callNrDirect(nr: string, connectionId: string);\r\n callNr(nr: string);\r\n\r\n quickDials: any;\r\n }\r\n\r\n @Controller('Telephony', 'QuickDialController')\r\n export class QuickDialController {\r\n static $inject = ['$scope', 'PhoneService', 'QuickDialResource'];\r\n constructor(\r\n $scope: IQuickDialScope,\r\n phoneService,\r\n quickDialResource: QuickDialResource\r\n ) {\r\n $scope.callNrDirect = (nr: string, connectionId: string) => {\r\n phoneService.callNrDirect(nr, connectionId);\r\n };\r\n\r\n $scope.callNr = (nr: string) => {\r\n phoneService.callNr(nr);\r\n };\r\n\r\n quickDialResource.getAllActive().$promise.then(data => {\r\n $scope.quickDials = data;\r\n });\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Telephony {\r\n export interface IQuickDialResource\r\n extends angular.resource.IResource {}\r\n\r\n export interface QuickDialResource\r\n extends angular.resource.IResourceClass {\r\n getById(params: PagedRequestWithIdParams): IQuickDialResource;\r\n getAll(): angular.resource.IResource;\r\n getAllActive(): angular.resource.IResource;\r\n search(\r\n params: ResourceSearchParams\r\n ): angular.resource.IResource>;\r\n update(model: QuickDialModel): IQuickDialResource;\r\n updateOrder(ids: System.Guid[]): void;\r\n }\r\n\r\n angular.module('Telephony').service('QuickDialResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) => {\r\n return $resource(\r\n '/api/v1/quickdial/:action/:id',\r\n {},\r\n {\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n getAll: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: '', id: '' }\r\n },\r\n getAllActive: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'active' }\r\n },\r\n search: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'search' }\r\n },\r\n save: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: '', id: '' }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { action: '', id: '' }\r\n },\r\n delete: {\r\n method: 'DELETE',\r\n isArray: false,\r\n params: { action: '', id: '@id' }\r\n },\r\n updateOrder: {\r\n method: 'Post',\r\n isArray: true,\r\n params: { action: 'updateOrder', id: '' }\r\n }\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Telephony.LiveStats {\r\n angular.module('Telephony').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('umbrella.telephony', {\r\n url: '',\r\n abstract: true\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules {\r\n export interface IActivityResource extends angular.resource.IResource {}\r\n\r\n export interface PagedRequestWithIdAndCategoryParams extends PagedRequestWithIdParams {\r\n activityCategory: string;\r\n }\r\n\r\n interface CaseIdsParams {\r\n caseIds: string;\r\n }\r\n\r\n interface PagedRequestWithIdParamsWithStatusFilter extends PagedRequestWithIdParams {\r\n statusFilter?: StatusFilter;\r\n }\r\n\r\n export interface IActivityResourceClass extends angular.resource.IResourceClass {\r\n getByRoleId(\r\n params: PagedRequestWithIdParams,\r\n succes?: Function,\r\n error?: Function\r\n ): angular.resource.IResource>;\r\n getByColleagueId(\r\n params: PagedRequestWithIdParams,\r\n succes?: Function,\r\n error?: Function\r\n ): angular.resource.IResource>;\r\n getByCaseId(\r\n params: PagedRequestWithIdParamsWithStatusFilter,\r\n succes?: Function,\r\n error?: Function\r\n ): angular.resource.IResource>;\r\n getByContractId(\r\n params: PagedRequestWithIdParams,\r\n succes?: Function,\r\n error?: Function\r\n ): angular.resource.IResource>;\r\n getByContractsOfRoleId(\r\n params: PagedRequestWithIdParams,\r\n succes?: Function,\r\n error?: Function\r\n ): angular.resource.IResource>;\r\n getByActivityCategoryAndContractsOfRoleId(\r\n params: PagedRequestWithIdAndCategoryParams\r\n ): angular.resource.IResource>;\r\n getByUnitId(\r\n params: PagedRequestWithIdParams,\r\n succes?: Function,\r\n error?: Function\r\n ): angular.resource.IResource>;\r\n getAll(\r\n params: ResourceSearchParams,\r\n succes?: Function,\r\n error?: Function\r\n ): angular.resource.IResource>;\r\n getCategories(): ActivityCategoryModel[];\r\n update(model: ActivityModel): IActivityResource;\r\n getRepairRequestActivitiesByCaseId(\r\n params: PagedRequestWithIdParams,\r\n succes?: Function,\r\n error?: Function\r\n ): angular.resource.IResource>;\r\n getActivityCountForCases(params: CaseIdsParams): angular.resource.IResource;\r\n deleteItem(\r\n params: IdRequestParams,\r\n succes?: Function,\r\n error?: Function\r\n ): angular.resource.IResource>;\r\n restoreItem(\r\n params: IdRequestParams,\r\n succes?: Function,\r\n error?: Function\r\n ): angular.resource.IResource>;\r\n }\r\n\r\n angular.module('Umbrella').service('ActivityResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/activity/:action/:id/:subaction',\r\n {},\r\n {\r\n getByRoleId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'role', roleId: '@id' }\r\n },\r\n getByColleagueId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'colleague', colleagueId: '@id' }\r\n },\r\n getByCaseId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'case',\r\n caseId: '@id',\r\n sortorder: 'desc',\r\n statusFilter: '@statusFilter'\r\n }\r\n },\r\n getByContractId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'contract', contractId: '@id' }\r\n },\r\n getByContractsOfRoleId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'role',\r\n roleId: '@id',\r\n subaction: 'contracts'\r\n }\r\n },\r\n getByUnitId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'unit', contractId: '@id' }\r\n },\r\n getCategories: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'categories' }\r\n },\r\n getByActivityCategoryAndContractsOfRoleId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'role',\r\n roleId: '@id',\r\n subaction: 'bycategory'\r\n }\r\n },\r\n getRepairRequestActivitiesByCaseId: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'case',\r\n caseId: '@id',\r\n subaction: 'repairrequests'\r\n }\r\n },\r\n getActivityCountForCases: {\r\n method: 'GET',\r\n isArray: true,\r\n params: {\r\n action: 'activityCount',\r\n caseIds: 'caseIds'\r\n }\r\n },\r\n deleteItem: {\r\n url: '/api/v1/activity/:id',\r\n method: 'DELETE',\r\n isArray: false,\r\n params: {\r\n id: '@id'\r\n }\r\n },\r\n restoreItem: {\r\n url: '/api/v1/activity/:id/:action',\r\n method: 'PUT',\r\n isArray: false,\r\n params: {\r\n action: 'restore',\r\n id: '@id'\r\n }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","namespace Umbrella.Modules {\r\n @Pipe('Umbrella', 'addressLine')\r\n class AddressLineFilter {\r\n public transform(a: AddressModel) {\r\n const addressLine =\r\n (a.street ? a.street + ' ' : '') +\r\n (a.houseNumber ? a.houseNumber : '') +\r\n (a.houseNumberExtension\r\n ? this.getHousenumberExtension(a.houseNumberExtension)\r\n : '');\r\n return addressLine.trim().length > 1 ? addressLine : '';\r\n }\r\n\r\n private getHousenumberExtension = (ext: string) =>\r\n ext ? (/^[\\-*]/.test(ext) ? '' : ' ') + ext : '';\r\n }\r\n}\r\n","namespace Umbrella.Modules {\r\n angular.module('Umbrella').directive('clickable', [\r\n function() {\r\n return {\r\n priority: -1,\r\n restrict: 'A',\r\n link(scope, element, attr) {\r\n element.addClass('clickable');\r\n element.on('click', function(e) {\r\n if (\r\n e.target.nodeName.toLowerCase() == 'a' ||\r\n $(e.target).parents('a').length\r\n )\r\n return;\r\n let href = element.find('a:not(:disabled):first');\r\n if (href.length) href.trigger('click');\r\n });\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.Modules {\r\n import IResource = ng.resource.IResource;\r\n\r\n export interface NamedParams {\r\n name: string;\r\n }\r\n\r\n export interface SectionParams {\r\n section: string;\r\n }\r\n\r\n export interface IConfigResourceClass {\r\n get(params: SectionParams): IResource;\r\n update(params: SectionParams, section: any): IResource;\r\n getAgentConfig(params: NamedParams): IResource;\r\n updateAgentConfig(params: NamedParams, section: any): IResource;\r\n }\r\n\r\n angular.module('Umbrella').service('ConfigResource', [\r\n '$resource',\r\n $resource =>\r\n $resource('/api/v1/:section/config', null, {\r\n get: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { section: '@section' }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { section: '@section' }\r\n },\r\n getAgentConfig: {\r\n method: 'GET',\r\n isArray: false,\r\n url: '/api/v1/agent/config/:name',\r\n params: { name: '@name' }\r\n },\r\n updateAgentConfig: {\r\n method: 'PUT',\r\n isArray: false,\r\n url: '/api/v1/agent/config/:name',\r\n params: { name: '@name' }\r\n }\r\n })\r\n ]);\r\n}\r\n","namespace Umbrella {\r\n export interface CreateDialogOptions {\r\n id: string;\r\n backdrop?: boolean;\r\n successCallback: Function;\r\n cancelCallback?: Function;\r\n backdropClass?: string;\r\n modalClass?: string;\r\n targetElement?: ng.IAugmentedJQuery;\r\n position?: string;\r\n draggable?: boolean;\r\n isModal?: boolean;\r\n style?: string;\r\n }\r\n\r\n export type CreateDialog = (\r\n templateUrl: string,\r\n options: CreateDialogOptions,\r\n passedInLocals: T\r\n ) => void;\r\n\r\n angular.module('Umbrella').factory('CreateDialog', [\r\n '$document',\r\n '$compile',\r\n '$rootScope',\r\n '$controller',\r\n '$timeout',\r\n (\r\n $document: ng.IDocumentService,\r\n $compile: ng.ICompileService,\r\n $rootScope: ng.IRootScopeService,\r\n $controller: ng.IControllerService,\r\n $timeout: ng.ITimeoutService\r\n ) => {\r\n let defaults: CreateDialogOptions = {\r\n id: null,\r\n backdrop: true,\r\n successCallback: null,\r\n cancelCallback: null,\r\n backdropClass: 'popup-backdrop',\r\n modalClass: 'modal',\r\n targetElement: $document.find('body'),\r\n position: 'fixed',\r\n draggable: false,\r\n isModal: true,\r\n style: null\r\n };\r\n\r\n let body = $document.find('body');\r\n\r\n return function Dialog(\r\n templateUrl,\r\n options: CreateDialogOptions,\r\n passedInLocals: any\r\n ) {\r\n options = { ...defaults, ...options };\r\n\r\n let key;\r\n\r\n let idAttr = options.id ? ' id=\"' + options.id + '\" ' : '';\r\n let modalBody = (() =>\r\n '
    ')();\r\n //We don't have the scope we're gonna use yet, so just get a compile function for modal\r\n let popupTemplate = angular.element(modalBody);\r\n\r\n let backdropTemplate = angular.element(\r\n '
    '\r\n );\r\n backdropTemplate.addClass(options.backdropClass);\r\n backdropTemplate.addClass('fade in');\r\n\r\n // We give the popup a new scope, inherited from the current one.\r\n let popupScope = $rootScope.$new();\r\n\r\n // pass local parameters unto popup scope\r\n for (key in passedInLocals) {\r\n if (passedInLocals.hasOwnProperty(key))\r\n popupScope[key] = passedInLocals[key];\r\n }\r\n\r\n let backdropLinker = $compile(backdropTemplate);\r\n let backdropElement = backdropLinker(popupScope);\r\n let popupLinker = $compile(popupTemplate);\r\n let popupElement = popupLinker(popupScope);\r\n\r\n // handle key pressed (esc = close)\r\n let handleEscPressed = function(event) {\r\n if (event.keyCode === 27) {\r\n popupScope.$modalCancel();\r\n }\r\n };\r\n\r\n body.bind('keydown', handleEscPressed);\r\n // (JH) - Add 'modal-open' css class to body:\r\n if (options.isModal) {\r\n body.addClass('modal-open');\r\n body.parent().addClass('modal-open');\r\n }\r\n /**\r\n * Make sure we do not destroy our scope when a digest is in progress.\r\n * http://stackoverflow.com/questions/12729122/prevent-error-digest-already-in-progress-when-calling-scope-apply\r\n **/\r\n let destroyFn = function() {\r\n if (!popupScope.$$phase) {\r\n popupScope.$destroy();\r\n } else {\r\n $timeout(\r\n function() {\r\n destroyFn();\r\n },\r\n 100,\r\n true\r\n );\r\n }\r\n };\r\n\r\n let closeFn = function(success) {\r\n if (options.isModal || success) {\r\n body.unbind('keydown', handleEscPressed);\r\n // (JH) - Remove 'modal-open' css class to body:\r\n body.removeClass('modal-open');\r\n body.parent().removeClass('modal-open');\r\n if (options.backdrop) {\r\n backdropElement.remove();\r\n }\r\n\r\n if (popupElement.length > 0) {\r\n if ($(popupElement[0]).next()) {\r\n $(popupElement[0])\r\n .next()\r\n .remove();\r\n } else {\r\n $(popupElement[0]).remove();\r\n }\r\n }\r\n\r\n if (options.cancelCallback) {\r\n options.cancelCallback.apply(this, arguments);\r\n }\r\n\r\n destroyFn();\r\n }\r\n };\r\n\r\n popupScope.$modalCancel = closeFn;\r\n\r\n popupScope.$modalCancelFromBackdrop = function(event) {\r\n let source = event.target || event.srcElement;\r\n if (source && $(source).hasClass('popup-backdrop-inner')) {\r\n // popupScope.$modalCancel();\r\n }\r\n };\r\n\r\n popupScope.$modalSuccess = function() {\r\n if (options.successCallback) {\r\n options.successCallback.apply(this, arguments);\r\n } else {\r\n closeFn.call(this, true);\r\n }\r\n\r\n popupScope.$modalCancel();\r\n };\r\n // Is requested Popup inline or full-size?\r\n let isInlineEdit =\r\n options.modalClass.indexOf('inline-popup') > -1;\r\n\r\n if (options.backdrop) {\r\n if (isInlineEdit) {\r\n options.targetElement.append(popupElement);\r\n body.append(backdropElement);\r\n } else {\r\n let backdropInnerElement = jQuery('
    ', {\r\n class: 'popup-backdrop-inner'\r\n });\r\n backdropElement.append(backdropInnerElement);\r\n\r\n backdropInnerElement.append(popupElement);\r\n body.append(backdropElement);\r\n }\r\n } else {\r\n options.targetElement.append(popupElement);\r\n }\r\n\r\n //window.initFormElements();\r\n };\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.Modules {\r\n angular.module('Umbrella').filter('fieldLabel', () => (field: string, defaultValue: string) => {\r\n const erp = window.config && window.config.facets && window.config.facets.erp && window.config.facets.erp[0];\r\n\r\n if (erp && erp.fieldLabels[field]) {\r\n return erp.fieldLabels[field];\r\n }\r\n\r\n return defaultValue;\r\n });\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n angular.module('Umbrella').directive('ifFeatureDisabled', [\r\n '$rootScope',\r\n ($rootScope: ng.IRootScopeService) => {\r\n function calculateVisibility(\r\n element: ng.IAugmentedJQuery,\r\n attr: ng.IAttributes\r\n ) {\r\n const featureName = attr.ifFeatureDisabled;\r\n const features =\r\n window.clientConfig && window.clientConfig.features;\r\n const feature = features.find(\r\n x => x.name.toLowerCase() === featureName.toLowerCase()\r\n );\r\n const isFeatureDisabled = !feature || !feature.enabled;\r\n\r\n if (!isFeatureDisabled) element.hide();\r\n else element.show();\r\n }\r\n\r\n return {\r\n priority: -1,\r\n restrict: 'A',\r\n link: (scope: ng.IScope, element, attr) => {\r\n calculateVisibility(element, attr);\r\n\r\n $rootScope.$on(\r\n attr.ifFeatureEnabled + 'Changed',\r\n (event, data) => {\r\n calculateVisibility(element, attr);\r\n }\r\n );\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n angular.module('Umbrella').directive('ifFeatureEnabled', [\r\n '$rootScope',\r\n ($rootScope: ng.IRootScopeService) => {\r\n function calculateVisibility(\r\n element: ng.IAugmentedJQuery,\r\n attr: ng.IAttributes\r\n ) {\r\n const featureName = attr.ifFeatureEnabled;\r\n const features =\r\n window.clientConfig && window.clientConfig.features;\r\n const feature = features.find(\r\n x => x.name.toLowerCase() === featureName.toLowerCase()\r\n );\r\n const isFeatureEnabled = feature && feature.enabled;\r\n\r\n if (!isFeatureEnabled) element.hide();\r\n else element.show();\r\n }\r\n\r\n return {\r\n priority: -1,\r\n restrict: 'A',\r\n link: (scope: ng.IScope, element, attr) => {\r\n calculateVisibility(element, attr);\r\n\r\n $rootScope.$on(\r\n attr.ifFeatureEnabled + 'Changed',\r\n (event, data) => {\r\n calculateVisibility(element, attr);\r\n }\r\n );\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.Modules {\r\n import IScope = angular.IScope;\r\n\r\n export class IfNotMobileDirective implements angular.IDirective {\r\n priorit = -1;\r\n restrict = 'A';\r\n link = (scope: IScope, element, attr) => {\r\n const isMobile = document.getElementsByClassName('ismobile').length > 0;\r\n\r\n if (isMobile) element.hide();\r\n };\r\n\r\n static factory(): angular.IDirectiveFactory {\r\n return () => new IfNotMobileDirective();\r\n }\r\n }\r\n\r\n angular.module('Umbrella').directive('ifNotMobile', IfNotMobileDirective.factory());\r\n}\r\n","namespace Umbrella.Modules {\r\n import IScope = angular.IScope;\r\n\r\n export class IfUmbrellaAuthDirective implements angular.IDirective {\r\n priorit = -1;\r\n restrict = 'A';\r\n link = (scope: IScope, element, attr) => {\r\n let perm = attr.ifUmbrellaAuth;\r\n let user = window.user;\r\n\r\n if (!perm) return;\r\n\r\n if (perm.indexOf('!') === -1) {\r\n if (!user || !user.permissions[perm]) {\r\n element.hide();\r\n }\r\n } else {\r\n if (user.permissions[perm.replace('!', '')]) {\r\n element.hide();\r\n }\r\n }\r\n };\r\n\r\n static factory(): angular.IDirectiveFactory {\r\n return () => new IfUmbrellaAuthDirective();\r\n }\r\n }\r\n\r\n angular\r\n .module('Umbrella')\r\n .directive('ifUmbrellaAuth', IfUmbrellaAuthDirective.factory());\r\n}\r\n","namespace Umbrella.Modules {\r\n @Pipe('Umbrella', 'isArray')\r\n class IsArrayFilter {\r\n public transform(value: any): boolean {\r\n return angular.isArray(value);\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules {\r\n import isDate = Umbrella.Helpers.isDate;\r\n \r\n @Pipe('Umbrella', 'isDate')\r\n class IsDateFilter {\r\n public transform(value: string): boolean {\r\n return isDate(value);\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n export interface ILocalStorageService {\r\n get(key: string): any;\r\n store(key: string, value: any): void;\r\n remove(key: string): void;\r\n }\r\n\r\n @Service('Umbrella', 'LocalStorageService')\r\n @Inject('webStorage')\r\n export class LocalStorageService {\r\n constructor(\r\n private webStorage: angular.webstorage.IWebStorageService\r\n ) {}\r\n\r\n public get(key: string): any {\r\n if (this.webStorage === undefined)\r\n throw new Error(\r\n 'Not possible to retrieve data. WebStorage not defined.'\r\n );\r\n\r\n return JSON.parse(this.webStorage.get(key));\r\n }\r\n\r\n public store(key: string, value: any): void {\r\n if (this.webStorage === undefined)\r\n throw new Error(\r\n 'Not possible to store data. WebStorage not defined.'\r\n );\r\n\r\n this.webStorage.set(key, JSON.stringify(value));\r\n }\r\n\r\n public remove(key: string): void {\r\n if (this.webStorage === undefined)\r\n throw new Error(\r\n 'Not possible to remove data. WebStorage not defined.'\r\n );\r\n\r\n this.webStorage.remove(key);\r\n }\r\n }\r\n}\r\n","@Component('Umbrella', {\r\n selector: 'occupant-role-label',\r\n template: `\r\n \r\n `\r\n})\r\nclass OccupantRoleLabelComponent {}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules {\r\n @Service('Umbrella', 'OfflineService')\r\n @Inject('ToastMessageService')\r\n export class OfflineService {\r\n private firstTimeConnecting = true;\r\n private isOfflineMessage = null;\r\n\r\n constructor(private toastMessageService: ToastMessageService) {\r\n isOnline$.subscribe(online => {\r\n if (!online) {\r\n if (this.firstTimeConnecting) return;\r\n\r\n this.isOfflineMessage = this.toastMessageService.warning(\r\n 'Netwerkverbinding verbroken',\r\n 3600000\r\n );\r\n } else {\r\n if (this.firstTimeConnecting)\r\n this.firstTimeConnecting = false;\r\n\r\n if (this.isOfflineMessage) {\r\n this.toastMessageService.clear(this.isOfflineMessage);\r\n this.isOfflineMessage = null;\r\n }\r\n }\r\n });\r\n }\r\n\r\n public isOfflineMessageDisplayed(): boolean {\r\n return !!this.isOfflineMessage;\r\n }\r\n }\r\n}\r\n","@Component('Umbrella', {\r\n selector: 'prospect-role-label',\r\n template: `\r\n \r\n `\r\n})\r\nclass ProspectRoleLabelComponent {}\r\n","/// \r\nnamespace Umbrella {\r\n @Pipe('Umbrella', 'replaceYoutubeEmbed')\r\n class ReplaceYoutubeEmbedFilter {\r\n public transform(message: string) {\r\n if (!message) return '';\r\n if (!message.includes(' {\r\n const clickable = document.createElement('a');\r\n clickable.setAttribute('href', link);\r\n clickable.setAttribute('target', '_blank');\r\n clickable.setAttribute('rel', 'noopener noreferrer');\r\n clickable.text = link;\r\n return clickable;\r\n };\r\n\r\n const domparser = new DOMParser();\r\n const htmlMessage = domparser.parseFromString(message, 'text/html');\r\n\r\n const aTags = htmlMessage.getElementsByTagName('a');\r\n const existing: string[] = [];\r\n\r\n for (let i = aTags.length; i > 0; i--) {\r\n if (aTags[i - 1].href) { existing.push(aTags[i - 1].href); }\r\n }\r\n\r\n for (let i = htmlMessage.getElementsByTagName('iframe').length; i > 0; i--) {\r\n if (existing.length === 0) {\r\n htmlMessage.getElementsByTagName('iframe')[i - 1].replaceWith(\r\n transformToHyperlink(htmlMessage.getElementsByTagName('iframe')[i - 1].src)\r\n );\r\n }\r\n\r\n if (existing.length > 0 && existing.indexOf(htmlMessage.getElementsByTagName('iframe')[i - 1].src) !== -1) {\r\n htmlMessage.getElementsByTagName('iframe')[i - 1].remove();\r\n }\r\n }\r\n\r\n return htmlMessage.getElementsByTagName('body')[0].innerHTML.toString();\r\n }\r\n }\r\n}","@Component('Umbrella', {\r\n selector: 'role-label',\r\n template: `\r\n \r\n `,\r\n bindings: {\r\n labelText: '@',\r\n labelTitle: '@'\r\n }\r\n})\r\nclass RoleLabelComponent {\r\n labelText: string;\r\n}\r\n","namespace Umbrella.Modules.Customers {\r\n export interface IRoleResource\r\n extends angular.resource.IResource {\r\n getById(params: IdRequestParams): ng.resource.IResource;\r\n getAllByIds(params: IdsRequestParams): ng.resource.IResource;\r\n }\r\n\r\n angular.module('Umbrella').service('RoleResource', [\r\n '$resource',\r\n ($resource: ng.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/role/:action/:id',\r\n {},\r\n {\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n getAllByIds: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'withIds', id: '@ids' }\r\n }\r\n }\r\n )]);\r\n}\r\n","angular.module('Umbrella').filter('shortUrl', function() {\r\n return function(input) {\r\n if (input === undefined || input === null) return input;\r\n\r\n let index = input.indexOf('>');\r\n if (index === -1) return input;\r\n\r\n let ahref = input.substr(0, index + 1);\r\n let urlTitle = input.substr(index + 1, input.length - index);\r\n\r\n index = urlTitle.indexOf('<');\r\n if (index > -1) urlTitle = urlTitle.substr(0, index);\r\n if (urlTitle.length > 30) urlTitle = urlTitle.substr(0, 30) + '..';\r\n\r\n return ahref + urlTitle + '';\r\n };\r\n});\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules {\r\n @Service('Umbrella', 'SignalRStateNotifyingService')\r\n @Inject('ToastMessageService', 'OfflineService')\r\n export class SignalRStateNotifyingService {\r\n private waitTime = 10000; // wait before toast in ms\r\n private pendingNotification = null;\r\n private toastMessage = null;\r\n\r\n constructor(\r\n private toastMessageService: ToastMessageService,\r\n private offlineService: OfflineService\r\n ) {}\r\n\r\n public start() {\r\n const hasState = x => x && x.state;\r\n\r\n signalRConnectionState$\r\n .filter(hasState)\r\n .map(x => x.state)\r\n .distinctUntilChanged()\r\n .subscribe(x => {\r\n if (x === 'disconnected') {\r\n this.pendingNotification = setTimeout(() => {\r\n if (\r\n !this.offlineService.isOfflineMessageDisplayed()\r\n )\r\n this.toastMessage = this.toastMessageService.warning(\r\n 'Verbinding met de server verbroken.',\r\n 3600000\r\n );\r\n }, this.waitTime);\r\n } else {\r\n if (this.toastMessage) {\r\n this.toastMessageService.clear(this.toastMessage);\r\n this.toastMessage = null;\r\n }\r\n if (this.pendingNotification) {\r\n clearTimeout(this.pendingNotification);\r\n this.pendingNotification = null;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","interface String {\r\n format(): string;\r\n f(): string;\r\n}\r\n\r\nString.prototype.format = String.prototype.f = function() {\r\n let s = this,\r\n i = arguments.length;\r\n\r\n while (i--) {\r\n s = s.replace(new RegExp('\\\\{' + i + '\\\\}', 'gm'), arguments[i]);\r\n }\r\n return s;\r\n};\r\n","@Component('Umbrella', {\r\n selector: 'tenant-role-label',\r\n template: `\r\n \r\n \r\n \r\n `,\r\n bindings: {\r\n customerStatus: '@'\r\n }\r\n})\r\nclass TenantRoleLabelComponent {\r\n public customerStatus: string;\r\n\r\n public isActive(): boolean {\r\n return this.customerStatus === 'Active' || this.customerStatus === '0';\r\n }\r\n\r\n public isInActive(): boolean {\r\n return this.customerStatus === 'InActive' || this.customerStatus === '2';\r\n }\r\n\r\n public isFuture(): boolean {\r\n return this.customerStatus === 'Future' || this.customerStatus === '1';\r\n }\r\n}\r\n","namespace Umbrella {\r\n @Pipe('Umbrella', 'trustedAsResourceUrl')\r\n @Inject('$sce')\r\n class TrustedAsResourceUrlFilter {\r\n constructor(private $sce: ng.ISCEService) {}\r\n\r\n public transform(url: string) {\r\n return this.$sce.trustAsResourceUrl(url);\r\n }\r\n }\r\n}\r\n","namespace Umbrella {\r\n angular\r\n .module('Umbrella')\r\n .config([\r\n '$httpProvider',\r\n ($httpProvider: ng.IHttpProvider) =>\r\n $httpProvider.interceptors.push(\r\n 'UmbrellaHttpRequestInterceptor'\r\n )\r\n ])\r\n .factory('UmbrellaHttpRequestInterceptor', () => {\r\n const endsWith = (str, suffix) => {\r\n return str.indexOf(suffix, str.length - suffix.length) !== -1;\r\n };\r\n\r\n const isLocalHtmlRequest = r => {\r\n return (\r\n r.method === 'GET' &&\r\n (endsWith(r.url, '.html') ||\r\n endsWith(r.url, 'Umbrellus.json'))\r\n );\r\n };\r\n\r\n return {\r\n request: (request: ng.IRequestConfig) => {\r\n if (isLocalHtmlRequest(request)) {\r\n if (!request.params) {\r\n request.params = {};\r\n }\r\n } else {\r\n // tslint:disable-next-line:no-string-literal\r\n request.headers['Accept'] = 'application/json';\r\n request.url = Umbrella.Config.makeAbsoluteApiUrl(\r\n request.url\r\n );\r\n request.withCredentials = true;\r\n\r\n const currentSession = session$.getValue();\r\n const accessToken =\r\n currentSession && currentSession.accessToken;\r\n if (accessToken) {\r\n request.headers[\r\n 'Authorization'\r\n ] = `Bearer ${accessToken}`;\r\n request.withCredentials = false;\r\n }\r\n }\r\n return request;\r\n }\r\n };\r\n });\r\n}\r\n","namespace Umbrella.Modules {\r\n @Component('Umbrella', {\r\n selector: 'undelivered-message',\r\n templateUrl: '/Modules/Umbrella/UndeliveredMessage.html',\r\n bindings: {\r\n message: '<'\r\n }\r\n })\r\n @Inject('$scope', '$timeout', 'UndeliveredMessageResource')\r\n class UndeliveredMessageComponent {\r\n message: Modules.Monitoring.Messaging.UndeliveredMessageModel;\r\n pollPromise: ng.IPromise;\r\n\r\n constructor(private $scope, private $timeout, private resource) {\r\n $scope.$on('$destroy', () => {\r\n if (this.pollPromise) {\r\n $timeout.cancel(this.pollPromise);\r\n }\r\n });\r\n\r\n this.updateScope(this.message);\r\n }\r\n\r\n private retry(id) {\r\n this.$scope.waiting = true;\r\n this.resource\r\n .retry({ id })\r\n .$promise.then(item => {\r\n this.updateScope(item);\r\n this.pollPromise = this.poll(id);\r\n })\r\n .finally(() => (this.$scope.waiting = false));\r\n }\r\n\r\n private getConsumer(queueName) {\r\n return queueName.split('_')[3];\r\n }\r\n\r\n private getMessageType(queueName) {\r\n if (!queueName) return '';\r\n\r\n let fullName = queueName.split('_')[1].split(':')[0];\r\n let parts = fullName.split('.');\r\n return parts[parts.length - 1];\r\n }\r\n\r\n private agentStatus(agent) {\r\n if (!agent.alive) {\r\n return { text: 'Offline', class: 'red' };\r\n } else if (!agent.healthy) {\r\n return { text: 'Problematisch', class: 'red' };\r\n }\r\n\r\n return { text: 'Online', class: 'green' };\r\n }\r\n\r\n private poll(id) {\r\n return this.$timeout(() => {\r\n this.fetch(id);\r\n if (this.$scope.status === 'Retrying') {\r\n this.poll(id);\r\n }\r\n }, 1000);\r\n }\r\n\r\n private updateScope(item) {\r\n let metaData = item.message.metaData;\r\n let agent = window.config.agents.find(\r\n i => i.name === (metaData && metaData.application)\r\n );\r\n\r\n let statusText = '?';\r\n let retryButtonTitle = '?';\r\n let retryable = false;\r\n\r\n switch (item.status) {\r\n case 'Failed':\r\n statusText = 'Foutief';\r\n retryButtonTitle = 'Opnieuw';\r\n retryable = window.user.permissions.serviceBusErrorRetry;\r\n break;\r\n\r\n case 'Retrying':\r\n statusText = 'Wordt opnieuw verwerkt...';\r\n retryButtonTitle = 'Bezig...';\r\n break;\r\n\r\n case 'Resolved':\r\n statusText = 'Verwerkt';\r\n retryButtonTitle = 'Opgelost';\r\n break;\r\n }\r\n\r\n angular.extend(this.$scope, {\r\n application: metaData.application,\r\n agent: agent && {\r\n name: agent.name,\r\n status: this.agentStatus(agent)\r\n },\r\n consumer: this.getConsumer(item.message.queueName),\r\n messageType: this.getMessageType(item.message.queueName),\r\n lastAttempt: item.faultTime,\r\n errorMessage: item.exception,\r\n retryable,\r\n resolvedTime: item.resolvedTime,\r\n retry: () => {\r\n this.retry(item.id);\r\n },\r\n statusText,\r\n retryButtonTitle,\r\n messageBody: item.message.body,\r\n status: item.status,\r\n metaData: item.message.metaData\r\n });\r\n }\r\n\r\n private fetch(id) {\r\n this.resource\r\n .getById({ id })\r\n .$promise.then(item => {\r\n this.updateScope(item);\r\n })\r\n .catch(error => {\r\n this.$scope.errors = [error];\r\n });\r\n }\r\n }\r\n}\r\n","@Component('Umbrella', {\r\n selector: 'vendor-role-label',\r\n template: `\r\n \r\n `\r\n})\r\nclass VendorRoleLabelComponent {}\r\n","// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\ndeclare var ease, TimelineMax, TweenMax, Power4, Power1, Power2, Power3, Bounce, Elastic: any;\r\nimport Guid = System.Guid;\r\n\r\ninterface Number {\r\n format(n, x, s, c): string;\r\n toHHMMSS(): string;\r\n}\r\n\r\nangular\r\n .module('Umbrella')\r\n .config([\r\n '$compileProvider',\r\n '$httpProvider',\r\n '$locationProvider',\r\n '$qProvider',\r\n ($compileProvider, $httpProvider, $locationProvider: ng.ILocationProvider, $qProvider) => {\r\n $locationProvider.hashPrefix('');\r\n $compileProvider.debugInfoEnabled(window.config && window.config.configuration === 'DEBUG');\r\n $httpProvider.useApplyAsync(true);\r\n $qProvider.errorOnUnhandledRejections(false);\r\n\r\n $compileProvider.aHrefSanitizationWhitelist(\r\n /^\\s*(https?|ftp|mailto|file|tel|pronto|navision|tobias|mycorsa|ax|dynamicsnav|chromeielink):/\r\n );\r\n }\r\n ])\r\n .filter('unsafe', ['$sce', $sce => val => $sce.trustAsHtml(val)])\r\n .filter('partialstring', function() {\r\n return function(input, numWords) {\r\n let inputParts = input.split(' ');\r\n let output = '';\r\n for (let i = 0; i < inputParts.length; i++) {\r\n if (i == numWords) {\r\n break;\r\n }\r\n output = output + inputParts[i] + ' ';\r\n }\r\n return output;\r\n };\r\n })\r\n .filter('timeago', function() {\r\n return function(input, pAllowFuture) {\r\n if (input === null) return 'voor altijd';\r\n\r\n let nowTime = new Date().getTime();\r\n let date = new Date(input).getTime();\r\n\r\n //var refreshMillis= 6e4; //A minute\r\n let allowFuture = pAllowFuture || false,\r\n strings = {\r\n prefixAgo: null,\r\n prefixFromNow: 'over',\r\n suffixAgo: 'geleden',\r\n suffixFromNow: null,\r\n seconds: '1 minuut',\r\n minute: '1 minuut',\r\n minutes: '%d minuten',\r\n hour: '1 uur',\r\n hours: '%d uur',\r\n day: '1 dag',\r\n days: '%d dagen',\r\n month: '1 maand',\r\n months: '%d maanden',\r\n year: '1 jaar',\r\n years: '%d jaar',\r\n wordSeparator: undefined\r\n },\r\n dateDifference = nowTime - date,\r\n seconds = Math.abs(dateDifference) / 1000,\r\n minutes = seconds / 60,\r\n hours = minutes / 60,\r\n days = hours / 24,\r\n years = days / 365,\r\n separator = strings.wordSeparator === undefined ? ' ' : strings.wordSeparator,\r\n // var strings = this.settings.strings;\r\n prefix = strings.prefixAgo,\r\n suffix = strings.suffixAgo;\r\n\r\n let substitute = function(stringOrFunction, number, strs) {\r\n let string = $.isFunction(stringOrFunction)\r\n ? stringOrFunction(number, dateDifference)\r\n : stringOrFunction;\r\n let value = (strs.numbers && strs.numbers[number]) || number;\r\n return string.replace(/%d/i, value);\r\n };\r\n\r\n if (allowFuture) {\r\n if (dateDifference < 0) {\r\n prefix = strings.prefixFromNow;\r\n suffix = strings.suffixFromNow;\r\n }\r\n }\r\n\r\n let words =\r\n (seconds < 45 && substitute(strings.seconds, Math.round(seconds), strings)) ||\r\n (seconds < 90 && substitute(strings.minute, 1, strings)) ||\r\n (minutes < 45 && substitute(strings.minutes, Math.round(minutes), strings)) ||\r\n (minutes < 90 && substitute(strings.hour, 1, strings)) ||\r\n (hours < 24 && substitute(strings.hours, Math.round(hours), strings)) ||\r\n (hours < 42 && substitute(strings.day, 1, strings)) ||\r\n (days < 30 && substitute(strings.days, Math.round(days), strings)) ||\r\n (days < 45 && substitute(strings.month, 1, strings)) ||\r\n (days < 365 && substitute(strings.months, Math.round(days / 30), strings)) ||\r\n (years < 1.5 && substitute(strings.year, 1, strings)) ||\r\n substitute(strings.years, Math.round(years), strings);\r\n\r\n return $.trim([prefix, words, suffix].join(separator));\r\n };\r\n })\r\n .filter('timeagobasic', [\r\n 'timeagoFilter',\r\n 'timedisplayFilter',\r\n (timeagoFilter, timedisplayFilter) => (input, pAllowFuture) => {\r\n let now = new Date();\r\n let then = new Date(input);\r\n let timeDiff = Math.abs(then.getTime() - now.getTime());\r\n let diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24));\r\n\r\n //if (diffDays > 3) {\r\n return ` op ${timedisplayFilter(input)} uur`;\r\n //}\r\n\r\n //return timeagoFilter(input, pAllowFuture);\r\n }\r\n ])\r\n .filter('truncate', function() {\r\n return function(text, length, end) {\r\n if (text != undefined) {\r\n if (isNaN(length)) {\r\n length = 10;\r\n }\r\n\r\n if (!end) {\r\n end = '...';\r\n }\r\n\r\n if (text.length <= length || text.length - end.length <= length) {\r\n return text;\r\n } else {\r\n return String(text).substring(0, length - end.length) + end;\r\n }\r\n }\r\n\r\n return text;\r\n };\r\n })\r\n .filter('businessdaysago', function() {\r\n return function(input) {\r\n let date = new Date(input);\r\n if (date.isValid()) {\r\n let today = new Date();\r\n return today.businessDaysDifference(date);\r\n }\r\n\r\n return Number.MAX_VALUE;\r\n };\r\n })\r\n .filter('hoursago', function() {\r\n return function(input) {\r\n let date = new Date(input);\r\n\r\n if (date.isValid()) {\r\n let today = new Date();\r\n let hours = (today - date) / 3600000;\r\n return hours;\r\n }\r\n\r\n return Number.MAX_VALUE;\r\n };\r\n })\r\n .filter('datetime', ['$filter', $filter => input => $filter('date')(input, 'yyyy-MM-dd HH:mm:ss')])\r\n .filter('timedisplay', function() {\r\n return function(input) {\r\n if (!input) return '';\r\n let date = new Date(input); // + \"+0\" + (new Date().getTimezoneOffset() / -60) + \":00\"\r\n return (\r\n date.getDate() +\r\n ' ' +\r\n date.getMonthName('nl') +\r\n ' ' +\r\n date.getFullYear() +\r\n ' om ' +\r\n ('0' + date.getHours()).slice(-2) +\r\n ':' +\r\n ('0' + date.getMinutes()).slice(-2)\r\n );\r\n };\r\n })\r\n .filter('mailto', function(s) {\r\n return '' + s + '';\r\n })\r\n .directive('ngBlur', [\r\n '$parse',\r\n '$rootScope',\r\n function($parse, $rootScope: Umbrella.IUmbrellaRootScope) {\r\n return function(scope, element, attr) {\r\n let fn = $parse(attr.ngBlur);\r\n element.bind('blur', function(event) {\r\n $rootScope.safeApply(function() {\r\n fn(scope, { $event: event });\r\n });\r\n });\r\n };\r\n }\r\n ])\r\n .directive('umbrellaDraggable', [\r\n function() {\r\n return function(scope, element) {\r\n element.draggable({\r\n handle: $('h2', element)\r\n });\r\n };\r\n }\r\n ])\r\n .directive('ngConfirmClick', [\r\n function() {\r\n return {\r\n priority: -1,\r\n restrict: 'A',\r\n link(scope, element, attrs) {\r\n element.bind('click', function(e) {\r\n let message = attrs.ngConfirmClick;\r\n if (message && !confirm(message)) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n });\r\n }\r\n };\r\n }\r\n ])\r\n .directive('umbrellaAuth', [\r\n function() {\r\n return {\r\n priority: -1,\r\n restrict: 'A',\r\n link(scope, element, attr) {\r\n let perm = attr.umbrellaAuth;\r\n\r\n if (perm && (!window.user || !window.user.permissions[perm])) {\r\n toggleElementsDueToAuthorization(element, attr, true);\r\n }\r\n }\r\n };\r\n }\r\n ])\r\n .directive('umbrellaScrollInfinite', [\r\n function() {\r\n return function(scope, $elem, attr) {\r\n const mainEl = document.getElementById('main');\r\n mainEl.addEventListener('ps-y-reach-end', () => {\r\n scope.$apply(attr.umbrellaScrollInfinite);\r\n });\r\n };\r\n }\r\n ])\r\n .directive('selectOnClick', [\r\n '$window',\r\n function($window) {\r\n return {\r\n restrict: 'A',\r\n link(scope, element, attrs) {\r\n element.on('click', function() {\r\n if (!$window.getSelection().toString()) {\r\n // Required for mobile Safari\r\n this.setSelectionRange(0, this.value.length);\r\n }\r\n });\r\n }\r\n };\r\n }\r\n ])\r\n .directive('umbrellaPhone', [\r\n '$filter',\r\n 'PhoneService',\r\n function($filter, PhoneService) {\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n value: '='\r\n },\r\n link($scope, $element) {\r\n let isValidPhoneNr = function(nr) {\r\n return nr && nr !== 'Niet bekend';\r\n };\r\n\r\n let nrClick = function() {\r\n if (isValidPhoneNr($scope.value)) {\r\n PhoneService.callNr($scope.value);\r\n }\r\n };\r\n\r\n $element.bind('click', nrClick);\r\n $scope.$on('$destroy', function() {\r\n $element.unbind('click', nrClick);\r\n });\r\n\r\n $scope.$watch('value', function(newvalue) {\r\n if (isValidPhoneNr(newvalue)) {\r\n $element.html($filter('phonenr')(newvalue));\r\n $element.addClass('clickable');\r\n } else {\r\n $element.html('Niet bekend');\r\n $element.removeClass('clickable');\r\n }\r\n });\r\n }\r\n };\r\n }\r\n ])\r\n .directive('formatcurrency', function() {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link(scope: any, element: any, attr: any, ngModel: any) {\r\n /**\r\n * Number.prototype.format(n, x, s, c)\r\n *\r\n * @param integer n: length of decimal\r\n * @param integer x: length of whole part\r\n * @param mixed s: sections delimiter\r\n * @param mixed c: decimal delimiter\r\n */\r\n Number.prototype.format = function(n, x, s, c) {\r\n let re = '\\\\d(?=(\\\\d{' + (x || 3) + '})+' + (n > 0 ? '\\\\D' : '$') + ')',\r\n num = this.toFixed(Math.max(0, ~~n));\r\n\r\n return (c ? num.replace('.', c) : num).replace(new RegExp(re, 'g'), '$&' + (s || ','));\r\n };\r\n\r\n function format(text) {\r\n let price = +text;\r\n if (isNaN(price)) return text;\r\n return price.format(2, 3, '.', ',');\r\n }\r\n\r\n function parse(number) {\r\n /*\r\n * Currency validation:\r\n * (\\d+) At least one digit\r\n * (.\\d{3})* Optional groups of three digits seperated by a dot\r\n * (,\\d{1,2})? Optionally, end with a decimal separator (ie. comma) followed by one or two digits.\r\n */\r\n\r\n if (number) {\r\n let regex = /^(\\d+)(.\\d{3})*(,\\d{1,2})?$/;\r\n if (!regex.test(number.toString())) {\r\n ngModel.$setValidity(attr.ngModel, false);\r\n return undefined;\r\n }\r\n ngModel.$setValidity(attr.ngModel, true);\r\n return number\r\n .toString()\r\n .replace('.', '')\r\n .replace(',', '.');\r\n } else {\r\n return number;\r\n }\r\n }\r\n\r\n ngModel.$formatters.push(format);\r\n ngModel.$parsers.push(parse);\r\n }\r\n };\r\n })\r\n .filter('useFilter', [\r\n '$filter',\r\n $filter => {\r\n return function() {\r\n let filterName = [].splice.call(arguments, 1, 1)[0];\r\n\r\n //check if an additional parameter is provided to the filter that needs to be applied\r\n let filterParam = null;\r\n if (filterName.indexOf(':') > -1) {\r\n filterParam = filterName.split(':')[1];\r\n filterName = filterName.split(':')[0];\r\n }\r\n\r\n if (filterName.trim() === '') filterName = 'none';\r\n\r\n let applyParams = [arguments[0], filterParam];\r\n return $filter(filterName).apply(null, applyParams);\r\n };\r\n }\r\n ])\r\n .filter('none', function() {\r\n return function(input) {\r\n return input;\r\n };\r\n })\r\n .filter('card', function() {\r\n return function(input) {\r\n switch (input) {\r\n case 0:\r\n case 'CustomerCard':\r\n return 'relatiekaart';\r\n case 2:\r\n case 'ColleagueCard':\r\n return 'collegakaart';\r\n case 4:\r\n case 'UnitCard':\r\n return 'objectkaart';\r\n case 5:\r\n case 'CustomerHistoryCard':\r\n return 'klanthistorie';\r\n case 6:\r\n case 'ComplexCard':\r\n return 'complexkaart';\r\n case 7:\r\n case 'Portal':\r\n return 'klantportaal';\r\n default:\r\n return '';\r\n }\r\n };\r\n })\r\n .filter('entityType', function() {\r\n return function(input) {\r\n switch (input) {\r\n case 'Unit':\r\n return 'Eenheid';\r\n case 'Customer':\r\n return 'Klant';\r\n case 'Contract':\r\n return 'Contract';\r\n case 'Role':\r\n return 'Rol';\r\n default:\r\n return input;\r\n }\r\n };\r\n })\r\n .filter('time', function() {\r\n return function(input) {\r\n return secondsToHms(input);\r\n };\r\n })\r\n .filter('bytestosize', function() {\r\n let bytesToSize = function(bytes, precision) {\r\n /**\r\n * Convert number of bytes into human readable format\r\n *\r\n * @param integer bytes Number of bytes to convert\r\n * @param integer precision Number of digits after the decimal separator\r\n * @return string\r\n */\r\n if (!bytes) return '';\r\n\r\n let kilobyte = 1024;\r\n let megabyte = kilobyte * 1024;\r\n let gigabyte = megabyte * 1024;\r\n let terabyte = gigabyte * 1024;\r\n\r\n if (bytes >= 0 && bytes < kilobyte) {\r\n return bytes + ' b';\r\n } else if (bytes >= kilobyte && bytes < megabyte) {\r\n precision = 0; //override\r\n return (bytes / kilobyte).toFixed(precision) + ' Kb';\r\n } else if (bytes >= megabyte && bytes < gigabyte) {\r\n return (bytes / megabyte).toFixed(precision) + ' Mb';\r\n } else if (bytes >= gigabyte && bytes < terabyte) {\r\n return (bytes / gigabyte).toFixed(precision) + ' Gb';\r\n } else if (bytes >= terabyte) {\r\n return (bytes / terabyte).toFixed(precision) + ' Tb';\r\n } else {\r\n return bytes + ' b';\r\n }\r\n };\r\n\r\n return function(input) {\r\n return bytesToSize(input, 0);\r\n };\r\n })\r\n .filter('filetype', function() {\r\n return function(input) {\r\n if (!input) return input;\r\n\r\n let extension = input\r\n .split('.')\r\n .pop()\r\n .toLowerCase();\r\n switch (extension) {\r\n case 'pdf':\r\n return 'PDF-document';\r\n case 'doc':\r\n case 'docx':\r\n return 'Word-document';\r\n case 'jpg':\r\n case 'gif':\r\n case 'png':\r\n return 'afbeelding';\r\n default:\r\n return extension + '-document';\r\n }\r\n };\r\n })\r\n .filter('emptyDash', function() {\r\n return function(input) {\r\n if (!input) return '-';\r\n\r\n return input;\r\n };\r\n })\r\n .filter('recentlyChanged', function() {\r\n /**\r\n * Filter to detect whether an item has 'recently' changed.\r\n * used for knowledge base items.\r\n * currently set to 3 days.\r\n */\r\n return function(input) {\r\n let date = new Date(input);\r\n let today = new Date();\r\n let days = (today - date) / 86400000;\r\n\r\n return days <= 3;\r\n };\r\n })\r\n .filter('age', function() {\r\n return function(input) {\r\n let today = new Date();\r\n let birthDate = new Date(input);\r\n let age = today.getFullYear() - birthDate.getFullYear();\r\n let m = today.getMonth() - birthDate.getMonth();\r\n\r\n if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {\r\n age--;\r\n }\r\n\r\n if (isNaN(age)) return 'onbekend';\r\n\r\n return age + ' jaar';\r\n };\r\n })\r\n .filter('newlines', function() {\r\n return function(text) {\r\n if (!text) return text;\r\n\r\n return text.replace(/\\n/g, '
    ');\r\n };\r\n })\r\n .filter('formatMailAddress', function() {\r\n return function(emailObj) {\r\n if (!emailObj || !emailObj.emailAddress) return '';\r\n\r\n if (emailObj.displayName) return '\"' + emailObj.displayName + '\" <' + emailObj.emailAddress + '>';\r\n\r\n return emailObj.emailAddress;\r\n };\r\n })\r\n .filter('returnChatType', () => {\r\n return externalConversationId => {\r\n return externalConversationId ? 'WhatsApp' : 'LiveChat';\r\n };\r\n })\r\n .filter('contactType', () => {\r\n return conversation => {\r\n if (conversation.customer.id) return\r\n return conversation.externalConversationId ? conversation.customer.phoneNumber : conversation.customer.email;\r\n\r\n };\r\n })\r\n .factory('UmbrellaPage', [\r\n '$rootScope',\r\n function($rootScope) {\r\n let title = 'Umbrella';\r\n\r\n return {\r\n title() {\r\n return title;\r\n },\r\n setTitle(newTitle) {\r\n //title = newTitle;\r\n $rootScope.title = newTitle;\r\n }\r\n };\r\n }\r\n ])\r\n .value('ui.config', {\r\n date: {\r\n dateFormat: 'dd-mm-yy',\r\n dayNamesMin: ['Zo', 'Ma', 'Di', 'Wo', 'Do', 'Vr', 'Za'],\r\n dayNames: ['Zondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag'],\r\n firstDay: 1,\r\n monthNames: [\r\n 'Januari',\r\n 'Februari',\r\n 'Maart',\r\n 'April',\r\n 'Mei',\r\n 'Juni',\r\n 'Juli',\r\n 'Augustus',\r\n 'September',\r\n 'Oktober',\r\n 'November',\r\n 'December'\r\n ],\r\n nextText: 'Volgende',\r\n prevText: 'Vorige'\r\n },\r\n jq: {\r\n qtip: {\r\n position: {\r\n my: 'left center',\r\n at: 'right center'\r\n }\r\n }\r\n }\r\n })\r\n .constant('EmptyGuid', '00000000-0000-0000-0000-000000000000')\r\n /*.animation('.slide-down', function () {\r\n return {\r\n\r\n beforeAddClass: function (element, className, done) {\r\n if (className === 'ng-hide') {\r\n element.slideUp('fase', done);\r\n } else {\r\n done();\r\n }\r\n },\r\n\r\n removeClass: function (element, className, done) {\r\n if (className === 'ng-hide') {\r\n element.hide();\r\n element.slideDown(400, 'easeInOutCubic', done);\r\n }\r\n else {\r\n done();\r\n }\r\n }\r\n };\r\n })*/\r\n .value('initFormElements', initFormElements)\r\n .value('initResponsiveElements', initResponsiveElements)\r\n .value('initAutoGrow', initAutoGrow)\r\n .animation('.swap-animation', swapAnimation)\r\n .animation('.slide-animation', swapAnimation);\r\n\r\nfunction swapAnimation() {\r\n return {\r\n enter: function enter(element, done) {\r\n TweenMax.from(element, 0.5, {\r\n autoAlpha: 0,\r\n scale: 0,\r\n delay: 0.25,\r\n ease: Power4.easeInOut,\r\n onComplete: done\r\n });\r\n },\r\n leave: function leave(element, done) {\r\n TweenMax.to(element, 0.5, {\r\n autoAlpha: 0,\r\n scale: 0,\r\n ease: Power4.easeInOut,\r\n onComplete: done\r\n });\r\n }\r\n };\r\n}\r\n\r\nfunction initFormElements() {\r\n setTimeout(function() {\r\n initTextboxes();\r\n initAutoGrow();\r\n initRippleEffects();\r\n }, 500);\r\n}\r\n\r\n//\tInitialize Textbox/Area Events (error state / counters):\r\nfunction initTextboxes() {\r\n // CSS Classes and Text Counters onLoad:\r\n $('.formitem .inputField').each(function() {\r\n let input = $(this).val();\r\n if ($(this).hasClass('limited')) {\r\n let limit = $(this).attr('data-limit');\r\n if (input.length >= 0) {\r\n $(this)\r\n .parent()\r\n .find('.webformCounter')\r\n .html(input.length + ' / ' + limit);\r\n if (input.length > limit) {\r\n $(this).addClass('error');\r\n $(this)\r\n .parent()\r\n .find('.webformCounter')\r\n .addClass('error');\r\n }\r\n }\r\n }\r\n // Hotwire Textbox/Textarea onKeyUp:\r\n $(this).on('keyup', function() {\r\n let input = $(this).val().length;\r\n if ($(this).hasClass('limited')) {\r\n let limit = $(this).attr('data-limit');\r\n $(this)\r\n .parent()\r\n .find('.webformCounter')\r\n .html($(this).val().length + ' / ' + limit);\r\n if (input > limit) {\r\n $(this).addClass('error');\r\n $(this)\r\n .parent()\r\n .find('.webformCounter')\r\n .addClass('error');\r\n } else {\r\n $(this).removeClass('error');\r\n $(this)\r\n .parent()\r\n .find('.webformCounter')\r\n .removeClass('error');\r\n }\r\n } else {\r\n $(this)\r\n .removeClass('error')\r\n .find('span')\r\n .not('.bar')\r\n .fadeOut(350)\r\n .html();\r\n if ($(this).val() !== '') {\r\n $(this).removeClass('error');\r\n $(this)\r\n .parent()\r\n .find('span')\r\n .not('.bar')\r\n .fadeOut(350 * 2);\r\n }\r\n }\r\n });\r\n });\r\n}\r\n\r\n//\tInitialize Ripple Effects onClick:\r\nfunction initRippleEffects() {\r\n let $button_ink = $('.button').not('.disabled, .no-ink'),\r\n $ink,\r\n x,\r\n y,\r\n ink_diameter;\r\n $button_ink.on('click', function(e) {\r\n let $this = $(this);\r\n $this.removeClass('inked');\r\n // Avoid adding multiple ink elements\r\n if (!$this.find('.ink').length) {\r\n // no ink element added yet\r\n $this.prepend('');\r\n $ink = $this.find('.ink');\r\n } else {\r\n // Ink element added\r\n $ink = $this.find('.ink');\r\n $ink.removeClass('spill');\r\n }\r\n ink_diameter = Math.max($this.outerWidth(), $this.outerHeight());\r\n // x and y coordinates for ink element\r\n x = e.pageX - $this.offset().left - ink_diameter / 2;\r\n y = e.pageY - $this.offset().top - ink_diameter / 2;\r\n $ink.css({\r\n top: y,\r\n left: x,\r\n width: ink_diameter,\r\n height: ink_diameter\r\n }).addClass('spill');\r\n $this.addClass('inked');\r\n });\r\n}\r\n\r\n//\tInitialize Textarea AutoGrow (size scaling with input length):\r\nfunction initAutoGrow() {\r\n setTimeout(function() {\r\n $('textarea.inputField, textarea.autogrow').each(function() {\r\n let $this = $(this),\r\n minHeight = $this.height();\r\n\r\n let shadow = $('
    ')\r\n .css({\r\n position: 'absolute',\r\n top: -10000,\r\n left: -10000,\r\n width: $(this).outerWidth(),\r\n fontSize: $this.css('fontSize'),\r\n fontFamily: $this.css('fontFamily'),\r\n lineHeight: $this.css('lineHeight'),\r\n resize: 'none'\r\n })\r\n .appendTo(document.body);\r\n\r\n let update = function() {\r\n let times = function(string, number) {\r\n let r = '';\r\n for (let i = 0; i < number; i++) r += string;\r\n return r;\r\n };\r\n let val = this.value\r\n .replace(//g, '>')\r\n .replace(/&/g, '&')\r\n .replace(/\\n$/, '
     ')\r\n .replace(/\\n/g, '
    ')\r\n .replace(/ {2,}/g, function(space) {\r\n return times(' ', space.length - 1) + ' ';\r\n });\r\n shadow.html(val);\r\n $(this).css('height', Math.max(shadow.height() + 5, minHeight));\r\n };\r\n $(this)\r\n .change(update)\r\n .keyup(update)\r\n .keydown(update);\r\n update.apply(this);\r\n });\r\n }, 0);\r\n}\r\n\r\n// (JH) - Initialize Responsive Elements (timed out [meh...] to allow all html to be rendered):\r\nfunction initResponsiveElements() {\r\n // Initialize Sidebar NavIcons:\r\n setTimeout(function() {\r\n initSidebarMenus();\r\n }, 500);\r\n}\r\n\r\n// Hotwire Sidebar NavIcons:\r\nfunction initSidebarMenus() {\r\n //\r\n let content = $('#content');\r\n let sidebarTelephony = $('#sidebar_telephony');\r\n let sidebarSearch = $('.top-search');\r\n\r\n // Init. NavIcon (Menu sidebar):\r\n $('#navicon')\r\n .off('click')\r\n .on('click', function() {\r\n $('.navigation-buttons .fa').removeClass('active');\r\n\r\n // Close Search sidebar if open, and open Navigation sidebar:\r\n if (content.hasClass('openLeftSearch')) {\r\n content.removeClass('openLeftSearch').addClass('openLeft');\r\n $(this)\r\n .find('.fa')\r\n .addClass('active');\r\n }\r\n // Close Navigation sidebar if open:\r\n else if (content.hasClass('openLeft')) {\r\n content.removeClass('openLeft');\r\n }\r\n // Close Navigation sidebar if closed:\r\n else {\r\n content.addClass('openLeft');\r\n $(this)\r\n .find('.fa')\r\n .addClass('active');\r\n }\r\n // Close Card sidebar if open:\r\n if (content.hasClass('openRight')) {\r\n content.removeClass('openRight');\r\n }\r\n });\r\n\r\n // Init. SearchIcon (Search sidebar):\r\n $('#searchicon a')\r\n .off('click')\r\n .on('click', function() {\r\n $('.navigation-buttons .fa').removeClass('active');\r\n\r\n // Close Navigation sidebar if openn, and open Search sidebar:\r\n if (content.hasClass('openLeft')) {\r\n content.removeClass('openLeft').addClass('openLeftSearch');\r\n $(this)\r\n .find('.fa')\r\n .addClass('active');\r\n //searchBox.focus();\r\n }\r\n // Close Search sidebar if open:\r\n else if (content.hasClass('openLeftSearch')) {\r\n content.removeClass('openLeftSearch');\r\n }\r\n // Close Search sidebar if closed:\r\n else {\r\n content.addClass('openLeftSearch');\r\n $(this)\r\n .find('.fa')\r\n .addClass('active');\r\n //searchBox.focus();\r\n }\r\n // Close Card sidebar if open:\r\n if (content.hasClass('openRight')) {\r\n content.removeClass('openRight');\r\n }\r\n });\r\n\r\n // Init. CardIcon (Card sidebar):\r\n $('#cardicon a')\r\n .off('click')\r\n .on('click', function() {\r\n $('.navigation-buttons .fa').removeClass('active');\r\n\r\n // Close Card sidebar if opened:\r\n if (content.hasClass('openRight')) {\r\n content.removeClass('openRight');\r\n }\r\n // Open Card sidebar if closed:\r\n else {\r\n content.addClass('openRight');\r\n $(this)\r\n .find('.fa')\r\n .addClass('active');\r\n // Close Navigation/Search sidebar if closed:\r\n content.removeClass('openLeft').removeClass('openLeftSearch');\r\n }\r\n });\r\n}\r\n\r\ninterface String {\r\n toCamel(): string;\r\n}\r\nString.prototype.toCamel = function() {\r\n return this.substr(0, 1).toLowerCase() + this.substr(1);\r\n};\r\n\r\n// Fixes IE issues in the menucontroller by adding the name property to all functions\r\n/*interface Function {\r\n name: string;\r\n}*/\r\n\r\nif (Function.prototype.name == undefined) {\r\n Object.defineProperty(Function.prototype, 'name', {\r\n get() {\r\n let val = /function ([^(]*)/.exec(this + '');\r\n if (val) return val[1];\r\n return undefined;\r\n }\r\n });\r\n}\r\n\r\nNumber.prototype.toHHMMSS = function() {\r\n let sec_numb = this;\r\n\r\n let hours = Math.floor(sec_numb / 3600);\r\n let minutes: any = Math.floor((sec_numb - hours * 3600) / 60);\r\n let seconds: any = sec_numb - hours * 3600 - minutes * 60;\r\n\r\n //if (hours < 10) { hours = \"0\" + hours; }\r\n if (minutes < 10) {\r\n minutes = '' + minutes;\r\n }\r\n if (seconds < 10) {\r\n seconds = '0' + seconds;\r\n }\r\n\r\n // var time = hours + ':' + minutes + ':' + seconds;\r\n let time = minutes + ':' + seconds;\r\n return time;\r\n};\r\n\r\nfunction secondsToHms(d) {\r\n d = Number(d);\r\n\r\n let h = Math.floor(d / 3600);\r\n let m = Math.floor((d % 3600) / 60);\r\n let s = Math.floor((d % 3600) % 60);\r\n\r\n return (h > 0 ? h + ':' : '') + (m < 10 ? '0' : '') + m + ':' + (s < 10 ? '0' : '') + s;\r\n}\r\n\r\nfunction toggleElementsDueToAuthorization(element, attr, disabled) {\r\n if (disabled) {\r\n element.attr('disabled', disabled);\r\n\r\n element.find('*').attr('disabled', disabled);\r\n element.bind('click.authorized', function(event) {\r\n event.stopImmediatePropagation();\r\n event.preventDefault();\r\n });\r\n } else {\r\n element.removeAttr('disabled');\r\n\r\n element.find('*').removeAttr('disabled');\r\n element.unbind('click.authorized');\r\n }\r\n}\r\n","namespace Umbrella.Modules.Mail {\r\n import MailModel = Umbrella.Mail.MailModel;\r\n import MailRecipientModel = Umbrella.Mail.MailRecipientModel;\r\n\r\n @Controller('Mail', 'ForwardMailPopupController')\r\n @Inject('$scope', 'OutgoingMailResource')\r\n export class ForwardMailPopupController {\r\n constructor(\r\n private $scope: ng.IScope,\r\n outgoingMailResource: IOutgoingMailResourceClass\r\n ) {\r\n $scope.to = '';\r\n jQuery.each($scope.mail.to, (i, a) => {\r\n $scope.to += (a.emailAddress.value || a.emailAddress) + '; ';\r\n });\r\n $scope.to = $scope.to.substring(0, $scope.to.length - 2);\r\n\r\n $scope.cc = '';\r\n jQuery.each($scope.mail.cc, (i, a) => {\r\n $scope.cc += (a.emailAddress.value || a.emailAddress) + '; ';\r\n });\r\n $scope.cc = $scope.cc.substring(0, $scope.cc.length - 2);\r\n\r\n $scope.bcc = '';\r\n jQuery.each($scope.mail.bcc, (i, a) => {\r\n $scope.bcc += (a.emailAddress.value || a.emailAddress) + '; ';\r\n });\r\n $scope.bcc = $scope.bcc.substring(0, $scope.bcc.length - 2);\r\n\r\n $scope.send = () => {\r\n $scope.waiting = false;\r\n outgoingMailResource\r\n .resend({\r\n id: $scope.mail.id,\r\n to: $scope.to,\r\n cc: $scope.cc,\r\n bcc: $scope.bcc\r\n })\r\n .$promise.then(() => {\r\n $scope.waiting = true;\r\n $scope.$modalSuccess();\r\n });\r\n };\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Mail {\r\n import IResource = ng.resource.IResource;\r\n import SimplifiedMailModel = Umbrella.Mail.SimplifiedMailModel;\r\n import MailModel = Umbrella.Mail.MailModel;\r\n\r\n export interface ISearchParams extends PagedRequestParams {\r\n query?: string;\r\n type?: string;\r\n maand?: number;\r\n }\r\n\r\n export interface IOutgoingMailResourceClass {\r\n search(\r\n params: ISearchParams\r\n ): IResource>;\r\n get(params: { id: System.Guid }): IResource;\r\n resend(\r\n resendMailRequest: Umbrella.Mail.ResendMailRequestModel\r\n ): IResource;\r\n getAttachment(params: {\r\n mailId: System.Guid;\r\n attachmentContentId: string;\r\n }): ng.IPromise;\r\n }\r\n\r\n angular.module('Umbrella').service('OutgoingMailResource', [\r\n '$resource',\r\n ($resource: ng.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/mail/outgoing/:action/:id',\r\n {},\r\n {\r\n get: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n search: {\r\n method: 'GET',\r\n isArray: false\r\n },\r\n resend: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: 'resend', id: '@id' }\r\n },\r\n getAttachment: {\r\n url:\r\n '/api/v1/mail/outgoing/:mailId/attachment/:attachmentContentId',\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n mailId: '@mailId',\r\n attachmentContentId: '@attachmentContentId'\r\n }\r\n } /*,\r\n addAnonymousMail: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: 'addAnonymousMail' }\r\n },\r\n renderMail: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'renderMail', message: '@message' }\r\n }*/\r\n\r\n /*sendTestMail: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: 'sendtestmail' }\r\n }*/\r\n }\r\n )\r\n ]);\r\n}\r\n","namespace Umbrella.Modules.Mail {\r\n import SimplifiedMailModel = Umbrella.Mail.SimplifiedMailModel;\r\n import MailRecipientModel = Umbrella.Mail.MailRecipientModel;\r\n import Attachment = Umbrella.Mail.MailModel.Attachment;\r\n\r\n export interface ViewMailPopupScope {\r\n mail: SimplifiedMailModel;\r\n attachments: Attachment[];\r\n hideForwardButton: boolean;\r\n previewUrl: string;\r\n attachmentUrls: { [id: string]: string };\r\n $modalSuccess(): void;\r\n getPreviewUrl(mail: SimplifiedMailModel): string;\r\n getAttachmentDownloadUrl(mail: SimplifiedMailModel, attachment: Attachment): string;\r\n getAddressList(addresses: MailRecipientModel[]): string;\r\n forwardMail(mail: SimplifiedMailModel): void;\r\n isSystemUser(): boolean;\r\n }\r\n\r\n @Controller('Mail', 'ViewMailPopupController')\r\n @Inject('$scope', '$sce', 'OutgoingMailResource', 'CreateDialog')\r\n export class ViewMailPopupController {\r\n constructor(\r\n private $scope: ViewMailPopupScope,\r\n private $sce: ng.ISCEService,\r\n private outgoingMailResource: IOutgoingMailResourceClass,\r\n createDialog\r\n ) {\r\n $scope.forwardMail = mail => {\r\n createDialog(\r\n '/Modules/Umbrella/Admin/Mail/ForwardMailPopup.html',\r\n {\r\n id: 'forwardMailPopup',\r\n backdrop: true,\r\n modalClass: 'popup',\r\n backdropClass: 'popup-backdrop',\r\n controller: 'ForwardMailPopupController'\r\n },\r\n {\r\n mail\r\n }\r\n );\r\n };\r\n\r\n $scope.isSystemUser = () => {\r\n return !!window.user.permissions.shell;\r\n }; \r\n }\r\n\r\n public $onInit() {\r\n this.loadAttachments();\r\n this.$scope.previewUrl = this.getPreviewUrl(this.$scope.mail);\r\n }\r\n\r\n private loadAttachments(): void {\r\n this.$scope.attachmentUrls = {};\r\n this.outgoingMailResource.get({ id: this.$scope.mail.id }).$promise.then(data => {\r\n this.$scope.attachments = data.attachments;\r\n for (const attachment of this.$scope.attachments) {\r\n this.$scope.attachmentUrls[attachment.contentId] = this.getAttachmentDownloadUrl(\r\n this.$scope.mail,\r\n attachment\r\n );\r\n }\r\n });\r\n }\r\n\r\n private getAttachmentDownloadUrl(mail: SimplifiedMailModel, attachment: Attachment) {\r\n return this.$sce.trustAsResourceUrl(\r\n Config.makeAbsoluteApiUrl(`/api/v1/mail/outgoing/${mail.id}/attachment/${attachment.contentId}`)\r\n );\r\n }\r\n\r\n private getPreviewUrl(mail: SimplifiedMailModel) {\r\n const url = mail\r\n ? this.$sce.trustAsResourceUrl(Config.makeAbsoluteApiUrl(`/api/v1/mail/outgoing/${mail.id}`))\r\n : '';\r\n return url;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules {\r\n export interface CardAdditionalFieldsControllerScope {\r\n cardAdditionalFields: any;\r\n card: Umbrella.CardType;\r\n frame: string;\r\n block: string;\r\n position: string;\r\n classLabel: string;\r\n item: any;\r\n getDeepLinkLabel: any;\r\n getDeepLinkUrl: any;\r\n getDeepLinkTarget: any;\r\n checkFieldhasValue(item: any, name: string): boolean;\r\n }\r\n\r\n @Inject('$scope')\r\n export class CardAdditionalFieldsController {\r\n constructor(private $scope: CardAdditionalFieldsControllerScope) {\r\n this.loadCardAdditionalFields();\r\n\r\n $scope.getDeepLinkLabel = (field, item) => {\r\n if (!field || (!field.deepLinkLabel && !field.deepLinkUrl)) return '';\r\n\r\n if (!item || !item.properties) {\r\n return field.deepLinkLabel.length ? field.deepLinkLabel : field.deepLinkUrl;\r\n }\r\n\r\n return field.deepLinkLabel.length\r\n ? field.deepLinkLabel.replace('FIELD_VALUE', this.getFieldValue(item, field.name))\r\n : field.deepLinkUrl.replace('FIELD_VALUE', this.getFieldValue(item, field.name));\r\n };\r\n\r\n $scope.getDeepLinkUrl = (field, item) => {\r\n if (!field || !field.deepLinkUrl) return '';\r\n\r\n if (!item || !item.properties) return field.deepLinkUrl;\r\n\r\n return field.deepLinkUrl.replace('FIELD_VALUE', this.getFieldValue(item, field.name));\r\n };\r\n\r\n $scope.getDeepLinkTarget = (field, item) => {\r\n return field.deepLinkOpenInSelf ? '_self' : '_blank';\r\n };\r\n\r\n $scope.checkFieldhasValue = (item: any, name: string): boolean => !!this.getFieldValue(item, name);\r\n }\r\n\r\n protected getFieldValue(item: any, name: string): string {\r\n var fieldValue = '';\r\n if (item && item.properties) {\r\n angular.forEach(item.properties, (value, key) => {\r\n if (key.toLowerCase() === name.toLowerCase()) {\r\n fieldValue = value;\r\n return;\r\n }\r\n });\r\n }\r\n return fieldValue;\r\n }\r\n\r\n protected loadCardAdditionalFields() {\r\n const config = window.config;\r\n this.$scope.cardAdditionalFields = [];\r\n\r\n for (const field of config.cardAdditionalFields) {\r\n if (\r\n field &&\r\n field.isActive &&\r\n field.card === this.$scope.card &&\r\n field.frame === this.$scope.frame &&\r\n field.block === this.$scope.block &&\r\n field.position === this.$scope.position\r\n )\r\n this.$scope.cardAdditionalFields.push(field);\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules {\r\n export class CardAdditionalFieldsDirective implements angular.IDirective {\r\n restrict = 'E';\r\n templateUrl =\r\n '/Modules/Umbrella/CardAdditionalFields/CardAdditionalFields.html';\r\n replace = true;\r\n transclude = true;\r\n controller = CardAdditionalFieldsController;\r\n scope = {\r\n card: '@card',\r\n frame: '@frame',\r\n block: '@block',\r\n position: '@position',\r\n item: '=item',\r\n classLabel: '@classLabel'\r\n };\r\n\r\n static factory(): angular.IDirectiveFactory {\r\n return () => new CardAdditionalFieldsDirective();\r\n }\r\n }\r\n angular\r\n .module('Umbrella')\r\n .directive(\r\n 'cardadditionalfields',\r\n CardAdditionalFieldsDirective.factory()\r\n );\r\n}\r\n","namespace Umbrella.Modules {\r\n @Pipe('Umbrella', 'deepLink')\r\n class DeepLinkFilter {\r\n public transform(deepLinkLabel: string): string {\r\n if (deepLinkLabel || deepLinkLabel !== '')\r\n return '';\r\n\r\n return '';\r\n }\r\n }\r\n}\r\n","angular.module('Umbrella').constant('resources', {\r\n /**\r\n * Example of defining a generic key/value pair.\r\n */\r\n generic: [\r\n {\r\n key: 'prefix.keyname',\r\n value: 'value returned',\r\n description: 'description for the translator (optional)'\r\n }\r\n ],\r\n\r\n /**\r\n * Zaken\r\n */\r\n case: [\r\n {\r\n key: 'type.question',\r\n value: 'Vraag'\r\n },\r\n {\r\n key: 'type.case',\r\n value: 'Zaak'\r\n }\r\n ],\r\n\r\n media: [\r\n { key: 'filter.knowledgebaseitem', value: 'Kennisbank' },\r\n { key: 'filter.advertisement', value: 'Advertentie' },\r\n { key: 'filter.defect', value: 'Gebrek' },\r\n { key: 'filter.mail', value: 'Mail' },\r\n { key: 'filter.image', value: 'Afbeelding' },\r\n { key: 'filter.document', value: 'Document' },\r\n { key: 'filter.link', value: 'Link' },\r\n { key: 'filter.mediacategory', value: 'Category' },\r\n { key: 'filter.mediatype', value: 'Type' },\r\n { key: 'filter.all', value: 'Alle' },\r\n { key: 'filter.selfservice', value: 'Selfservice' }\r\n ],\r\n\r\n advertisement: [\r\n { key: 'filter.address.untokenizedcity', value: 'Stad' },\r\n { key: 'filter.externalsystem.name', value: 'Bronsysteem' },\r\n { key: 'filter.housingsupplyType', value: 'Aanbodtype' },\r\n { key: 'filter.price', value: 'Prijs' },\r\n { key: 'filter.size', value: 'Omvang' },\r\n { key: 'filter.type', value: 'Advertentietype' },\r\n { key: 'filter.unittype.lowercasekeyword', value: 'Eenheid type' }\r\n ],\r\n\r\n customer: [\r\n { key: 'filter.characteristics', value: 'Labels' },\r\n { key: 'filter.0', value: 'Alles' },\r\n { key: 'filter.1', value: 'Aggressief' },\r\n { key: 'filter.16', value: 'Geblokkeerd' },\r\n { key: 'filter.32', value: 'Uitgesloten van postcode login' }\r\n ],\r\n\r\n /**\r\n * Status\r\n */\r\n\r\n status: [\r\n {\r\n key: 'type.published',\r\n value: 'Gepubliceerd'\r\n },\r\n {\r\n key: 'type.concept',\r\n value: 'Concept'\r\n },\r\n {\r\n key: 'type.toreview',\r\n value: 'Nog te beoordelen'\r\n },\r\n {\r\n key: 'type.deleted',\r\n value: 'Verwijderd'\r\n },\r\n {\r\n key: 'type.imported',\r\n value: 'Geïmporteerd'\r\n },\r\n {\r\n key: 'type.expired',\r\n value: 'Verlopen'\r\n }\r\n ],\r\n\r\n /**\r\n * Status Colleague\r\n */\r\n\r\n statuscolleague: [\r\n {\r\n key: 'availability.busy',\r\n value: 'bezet'\r\n },\r\n {\r\n key: 'availability.available',\r\n value: 'beschikbaar'\r\n },\r\n {\r\n key: 'availability.away',\r\n value: 'afwezig'\r\n },\r\n {\r\n key: 'availability.unknown',\r\n value: 'onbekend'\r\n }\r\n ],\r\n\r\n log: [\r\n {\r\n key: 'filter.application',\r\n value: 'Applicaties'\r\n },\r\n {\r\n key: 'filter.level',\r\n value: 'Niveaus'\r\n }\r\n ],\r\n\r\n weekdays: [\r\n {\r\n key: 'd.0',\r\n value: 'Zondag'\r\n },\r\n {\r\n key: 'd.1',\r\n value: 'Maandag'\r\n },\r\n {\r\n key: 'd.2',\r\n value: 'Dinsdag'\r\n },\r\n {\r\n key: 'd.3',\r\n value: 'Woensdag'\r\n },\r\n {\r\n key: 'd.4',\r\n value: 'Donderdag'\r\n },\r\n {\r\n key: 'd.5',\r\n value: 'Vrijdag'\r\n },\r\n {\r\n key: 'd.6',\r\n value: 'Zaterdag'\r\n }\r\n ],\r\n\r\n person: [\r\n {\r\n key: 'title.male',\r\n value: 'Dhr.'\r\n },\r\n {\r\n key: 'title.female',\r\n value: 'Mevr.'\r\n },\r\n {\r\n key: 'title.unknown',\r\n value: ''\r\n }\r\n ],\r\n\r\n gender: [\r\n {\r\n key: 'type.male',\r\n value: 'Man'\r\n },\r\n {\r\n key: 'type.female',\r\n value: 'Vrouw'\r\n },\r\n {\r\n key: 'type.unknown',\r\n value: 'Onbekend'\r\n }\r\n ],\r\n\r\n customerupdate: [\r\n {\r\n key: 'status.updatingfailed',\r\n value: \"Het email-adres '{0}' is niet beschikbaar.\"\r\n },\r\n {\r\n key: 'status.recoveryfailed',\r\n value:\r\n \"Herstellen mislukt, het email-adres '{0}' is gekoppeld aan meerdere accounts.\"\r\n }\r\n ]\r\n});\r\n","/// \r\n\r\n/**\r\n * Localization service responsible for looking up translated strings.\r\n *\r\n * IMPORTANT! resource file should be loaded before this module!\r\n *\r\n */\r\nangular\r\n .module('Umbrella')\r\n .factory('localize', [\r\n '$rootScope',\r\n '$filter',\r\n 'resources',\r\n ($rootScope, $filter, resources) => {\r\n const localize = {\r\n // checks the dictionary for a localized resource string\r\n getLocalizedString: (selector, key) => {\r\n if (key && typeof key == 'string') key = key.toLowerCase();\r\n\r\n let result = key;\r\n let library = 'generic';\r\n let prefix = '';\r\n\r\n if (selector) {\r\n if (selector.indexOf('/')) {\r\n const selectorArr = selector.split('/');\r\n if (selectorArr.length > 1) {\r\n library = selectorArr[0];\r\n prefix = selectorArr[1];\r\n }\r\n } else {\r\n prefix = selector;\r\n }\r\n }\r\n\r\n // add (optional) prefix to string\r\n if (prefix && prefix != '') key = prefix + '.' + key;\r\n\r\n // make sure the dictionary has valid data\r\n if (\r\n resources &&\r\n resources[library] &&\r\n resources[library].length > 0\r\n ) {\r\n // use the filter service to only return those entries which match the value\r\n // and only take the first result\r\n const entry = $filter('filter')(\r\n resources[library],\r\n element => {\r\n return element.key === key;\r\n }\r\n )[0];\r\n\r\n if (entry) result = entry.value;\r\n }\r\n // return the value to the call\r\n return result;\r\n }\r\n };\r\n\r\n // return the local instance when called\r\n return localize;\r\n }\r\n ])\r\n // basic translation filter\r\n // usage {{ TOKEN | i18n:'library/prefix' }}\r\n .filter('i18n', [\r\n 'localize',\r\n localize => {\r\n return (input, params) => {\r\n return localize.getLocalizedString(params, input);\r\n };\r\n }\r\n ]);\r\n","/// \r\n/// \r\nimport switchDeviceMode = Umbrella.switchDeviceMode;\r\n\r\nnamespace Umbrella.Modules {\r\n export const selectFromSearch$ = new Rx.Subject();\r\n\r\n import debounce = Umbrella.Helpers.debounce;\r\n import PresenceResource = Umbrella.IPresenceResource;\r\n import colleagueStatusUpdated$ = Umbrella.colleagueStatusUpdated$;\r\n import StatusUpdateModel = Umbrella.Modules.Colleagues.StatusUpdateModel;\r\n import IUnitResource = Umbrella.Modules.Housing.Units.IUnitResource;\r\n import UnitModel = Umbrella.Modules.Housing.UnitModel;\r\n\r\n @Component('Umbrella', {\r\n selector: 'top-search',\r\n templateUrl: '/Top/TopSearchComponent/TopSearch.html'\r\n })\r\n @Inject(\r\n '$rootScope',\r\n '$location',\r\n '$state',\r\n '$filter',\r\n 'PersonResource',\r\n 'UnitResource',\r\n 'PhoneService',\r\n '$mdDialog',\r\n 'PresenceResource',\r\n 'isMobilePhoneFilter'\r\n )\r\n class NewSearchComponent {\r\n public width = window.innerWidth;\r\n public obscureSearch: boolean;\r\n public showresults: boolean;\r\n public showSearchbox = true;\r\n public searchResults = null;\r\n public customers: PersonSearchModel[];\r\n public vendors: PersonSearchModel[];\r\n public colleagues: PersonSearchModel[];\r\n public units: UnitModel[];\r\n public searchQuery = '';\r\n public searching = false;\r\n public noResults = false;\r\n public applySearch: (query: string) => void;\r\n public user = window.user;\r\n public isMobile = false;\r\n\r\n private currentItem = null;\r\n private currentItemIndex = 0;\r\n private currentButton = null;\r\n private currentButtonIndex = 0;\r\n private searchBox: JQuery;\r\n private highlightFilter: (addr: string, params: { match: string; hide: boolean }) => string;\r\n private colleagueStatusUpdatedSubscription: Rx.IDisposable;\r\n\r\n constructor(\r\n private $rootScope: IUmbrellaRootScope,\r\n private $location: ng.ILocationService,\r\n private $state: ng.ui.IStateService,\r\n $filter: ng.IFilterService,\r\n private personResource: PersonResource,\r\n private unitResource: IUnitResource,\r\n private phoneService: Telephony.PhoneService,\r\n private $mdDialog,\r\n private presenceResource: PresenceResource,\r\n private isMobilePhone\r\n ) {\r\n this.isMobile = !window.device.desktop();\r\n\r\n this.searchBox = jQuery('#searchResultsBox');\r\n this.showresults = false;\r\n $('#searchQueryInput').bind('focus', () => {\r\n this.showSearchbox = true;\r\n $('body').on('click.searchboxClosed', e => {\r\n const target = $(e.target);\r\n if (\r\n !target.is('#searchResultsBox') &&\r\n !target.parents().is('#searchResultsBox') &&\r\n !target.parents().is('.search-holder')\r\n ) {\r\n $('body').off('click.searchboxClosed');\r\n\r\n this.showSearchbox = false;\r\n //this.$apply();\r\n }\r\n });\r\n });\r\n\r\n this.highlightFilter = $filter('highlight');\r\n\r\n this.applySearch = debounce(\r\n (query: string) => {\r\n this.search(query);\r\n },\r\n 300,\r\n false\r\n );\r\n\r\n $rootScope.$on('performSearch', (event, query) => {\r\n this.searchQuery = query;\r\n this.search(query);\r\n });\r\n\r\n this.colleagueStatusUpdatedSubscription = colleagueStatusUpdated$\r\n .filter(x => !!x) //not null or undefined\r\n .distinctUntilChanged()\r\n .subscribe(statusUpdate => {\r\n if (!this.colleagues || !this.colleagues.length) return;\r\n\r\n this.colleagues\r\n .filter(x => x.id === statusUpdate.userId)\r\n .forEach(colleague => ((colleague).status = statusUpdate.status));\r\n });\r\n\r\n // Hide results if navigating + update 'toggle CustomerDetails'-button (disabled when not on Customer/Colleague/Vendor Card)\r\n $rootScope.$on('$stateChangeSuccess', () => {\r\n this.hideSearchResults();\r\n this.obscureSearch =\r\n $location.path().indexOf('kaart/') >= 0 || $location.path().indexOf('/dashboard/') >= 0;\r\n });\r\n }\r\n\r\n public $onDestroy() {\r\n this.colleagueStatusUpdatedSubscription.dispose();\r\n }\r\n\r\n public canCreateRelation(): boolean {\r\n return window.user.permissions.relationWrite;\r\n }\r\n\r\n public loadCard(stateName: string, personId: System.Guid) {\r\n this.hideSearchResults();\r\n if (window.config.facets.calendar && stateName === 'customerservice.colleaguecard.activities')\r\n stateName = 'customerservice.colleaguecard.calendar';\r\n this.$state.go(stateName, { personId, faq: null, tag: null, query: null }, { reload: true });\r\n }\r\n\r\n public hideSearchResults() {\r\n this.searchQuery = '';\r\n this.noResults = false;\r\n this.currentItemIndex = 0;\r\n this.currentItem = null;\r\n this.showresults = false;\r\n $('#searchQueryInput').off('keydown.navigate', e => this.handleKeyPress(e));\r\n $('body').off('click.searchboxClosed');\r\n }\r\n\r\n public showAddress(result: RoleModel, field, searchQuery) {\r\n if (result && result[field]) {\r\n const name = this.getShownAddressFieldName(result, searchQuery);\r\n return name === field;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public showBelMet(query): boolean {\r\n return this.phoneService.isAvailableToUser() && /^\\d+$/.test(query);\r\n }\r\n\r\n public clearSearchbox() {\r\n this.searchQuery = '';\r\n return false;\r\n }\r\n\r\n public callNr(nr: string) {\r\n this.phoneService.callNr(nr);\r\n this.clearSearchbox();\r\n }\r\n\r\n public showRelationPopup(): void {\r\n this.clearSearchbox();\r\n this.searching = false;\r\n this.$mdDialog\r\n .show({\r\n template: '',\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n })\r\n .then(customer => {\r\n this.loadCard('customerservice.customercard.timeline', customer.personId);\r\n });\r\n }\r\n\r\n private fullAddressLine(a: AddressModel) {\r\n return a.street + ' ' + a.houseNumber + ' ' + a.houseNumberExtension + ' ' + a.zipCode + ' ' + a.city;\r\n }\r\n\r\n private isMatchingAddress(address, searchQuery) {\r\n if (address) {\r\n const fullAddress = this.fullAddressLine(address);\r\n return (\r\n this.highlightFilter(fullAddress, {\r\n match: searchQuery,\r\n hide: true\r\n }) !== ''\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n private getShownAddressFieldName = (result: RoleModel, searchQuery: string) => {\r\n if (this.isMatchingAddress(result.homeAddress, searchQuery)) return 'homeAddress';\r\n\r\n if (this.isMatchingAddress(result.postalAddress, searchQuery)) return 'postalAddress';\r\n\r\n return result.homeAddress ? 'homeAddress' : result.postalAddress ? 'postalAddress' : null;\r\n };\r\n\r\n private search(query: string) {\r\n this.showSearchbox = true;\r\n this.searching = true;\r\n if (query) {\r\n let searchQuery = query;\r\n if (searchQuery.charAt(searchQuery.length - 1) === '.') searchQuery = searchQuery.slice(0, -1);\r\n\r\n const toSearchResponseModel = x => {\r\n const customers = x[0];\r\n const vendors = x[1];\r\n const colleagues = x[2];\r\n const units = x[3];\r\n return { customers, vendors, colleagues, units };\r\n };\r\n\r\n Rx.Observable.forkJoin(\r\n this.personResource.search({\r\n id: searchQuery,\r\n page: 0,\r\n pageSize: 4,\r\n roles: 'customer,prospect'\r\n }).$promise,\r\n this.personResource.search({\r\n id: searchQuery,\r\n page: 0,\r\n pageSize: 3,\r\n roles: 'vendor'\r\n }).$promise,\r\n (\r\n this.personResource.search({ id: searchQuery, page: 0, pageSize: 3, roles: 'employee' })\r\n .$promise\r\n ),\r\n this.unitResource.search({ id: searchQuery, page: 0, pageSize: 3 }).$promise\r\n )\r\n .map(toSearchResponseModel)\r\n .subscribe(results => {\r\n this.colleagues = results.colleagues;\r\n this.customers = this.reorderContactDetails(query, results.customers);\r\n this.vendors = results.vendors;\r\n this.units = results.units;\r\n this.noResults =\r\n !results.colleagues.items.length &&\r\n !results.customers.items.length &&\r\n !results.vendors.items.length &&\r\n !results.units.items.length;\r\n\r\n this.showSearchResults();\r\n this.searching = false;\r\n });\r\n } else {\r\n this.hideSearchResults();\r\n this.searching = false;\r\n }\r\n }\r\n\r\n private reorderContactDetails(query: string, customers: any): PersonSearchModel[] {\r\n const q = query.split(\" \").map(x => x.toLowerCase());\r\n const result = customers.items.map(customer => {\r\n const addresses = customer.contactDetails.addresses;\r\n if(addresses && addresses.length > 1) { \r\n addresses.forEach(address => {\r\n address.hits = q.map(e => address.fullAddressLine.toLowerCase().indexOf(e)).filter(r => r > -1).length; \r\n })\r\n \r\n customer.contactDetails.addresses[0] = addresses.sort((a,b) => b.hits-a.hits)[0]\r\n }\r\n\r\n return customer;\r\n }) \r\n\r\n customers.items = result; \r\n return customers; \r\n }\r\n\r\n private down(currentItemIndex, items): number {\r\n if (currentItemIndex < items.length - 1)\r\n if (\r\n items.eq(currentItemIndex).hasClass('result-data') ||\r\n items.eq(currentItemIndex).hasClass('result-footer') ||\r\n items.eq(currentItemIndex).hasClass('result-header')\r\n )\r\n // if (items.eq(currentItemIndex).hasClass('result-data') || items.eq(currentItemIndex).hasClass('result-footer') || items.eq(currentItemIndex).hasClass('result-header'))\r\n return this.down((currentItemIndex += 1), items);\r\n\r\n return currentItemIndex;\r\n }\r\n\r\n private up(currentItemIndex, items): number {\r\n if (currentItemIndex > 0)\r\n if (\r\n items.eq(currentItemIndex).hasClass('result-data') ||\r\n items.eq(currentItemIndex).hasClass('result-footer') ||\r\n items.eq(currentItemIndex).hasClass('result-header')\r\n )\r\n return this.up((this.currentItemIndex -= 1), items);\r\n\r\n return currentItemIndex;\r\n }\r\n\r\n public getMobile(person: PersonSearchModel): string {\r\n if (\r\n !person ||\r\n !person.contactDetails ||\r\n !person.contactDetails.phoneNumbers ||\r\n !person.contactDetails.phoneNumbers.length\r\n )\r\n return '';\r\n\r\n const firstMobile = person.contactDetails.phoneNumbers.find(x => this.isMobilePhone(x.number));\r\n return firstMobile && firstMobile.number;\r\n }\r\n\r\n public hasMobile(person: PersonSearchModel): boolean {\r\n if (\r\n !person ||\r\n !person.contactDetails ||\r\n !person.contactDetails.phoneNumbers ||\r\n !person.contactDetails.phoneNumbers.length\r\n )\r\n return false;\r\n\r\n return this.getMobile(person) ? true : false;\r\n }\r\n\r\n public getPhone(person: PersonSearchModel): string {\r\n if (\r\n !person ||\r\n !person.contactDetails ||\r\n !person.contactDetails.phoneNumbers ||\r\n !person.contactDetails.phoneNumbers.length\r\n )\r\n return '';\r\n\r\n const isValidNumber = x => x && x.length;\r\n\r\n const firstNumber = person.contactDetails.phoneNumbers\r\n .filter(x => isValidNumber(x.number))\r\n .find(x => !this.isMobilePhone(x.number));\r\n\r\n return firstNumber && firstNumber.number;\r\n }\r\n\r\n public hasPhone(person: PersonSearchModel): boolean {\r\n if (\r\n !person ||\r\n !person.contactDetails ||\r\n !person.contactDetails.phoneNumbers ||\r\n !person.contactDetails.phoneNumbers.length\r\n )\r\n return false;\r\n\r\n return this.getPhone(person) ? true : false;\r\n }\r\n\r\n public closeSearchOverlay() {\r\n if (!isDesktopModeActive()) {\r\n if (window.device.tablet() || window.device.mobile() || window.device.surface()) {\r\n isSearchActive$.onNext(null);\r\n toggleNavigationIcon$.onNext('search');\r\n }\r\n }\r\n }\r\n\r\n private handleKeyPress(event) {\r\n const items = this.searchBox\r\n .find('.result-block > .result-data > .result-row,li.searchQueryItem,div.search-kennisbank-item')\r\n .filter(':visible');\r\n\r\n if (this.currentItem) this.currentItem.removeClass('hover');\r\n\r\n if (this.currentButton && event.keyCode !== 13) this.currentButton.css('opacity', '1.0');\r\n\r\n if (event.keyCode === 40) {\r\n // down\r\n if (this.currentItem === null) {\r\n this.currentItemIndex = 1;\r\n } else {\r\n this.currentItemIndex++;\r\n this.currentItemIndex = this.down(this.currentItemIndex, items);\r\n }\r\n\r\n this.currentButtonIndex = 0;\r\n this.currentButton = null;\r\n } else if (event.keyCode === 38) {\r\n // up\r\n if (this.currentItem === null) {\r\n this.currentItemIndex = items.length - 1;\r\n } else {\r\n this.currentItemIndex--;\r\n this.currentItemIndex = this.up(this.currentItemIndex, items);\r\n }\r\n\r\n this.currentButtonIndex = 0;\r\n this.currentButton = null;\r\n } else if (event.keyCode === 13) {\r\n // enter\r\n if (this.showBelMet(this.searchQuery)) {\r\n this.callNr(this.searchQuery);\r\n } else {\r\n if (this.currentItem !== null) {\r\n this.currentItem.prevObject[this.currentItemIndex].children[0].click();\r\n }\r\n }\r\n } else {\r\n this.currentItem = null;\r\n this.currentItemIndex = 0;\r\n }\r\n\r\n if (this.currentItemIndex > items.length - 1) this.currentItemIndex = items.length - 1;\r\n else if (this.currentItemIndex < 0) this.currentItemIndex = 0;\r\n\r\n if (event.keyCode === 40 || event.keyCode === 38) {\r\n this.currentItem = items.eq(this.currentItemIndex);\r\n }\r\n\r\n // highlight the active item if (this.currentItem && !this.currentItem.hasClass('result-footer') && !this.currentItem.hasClass('result-data') && !this.currentItem.hasClass('result-header')) {\r\n if (\r\n this.currentItem &&\r\n !this.currentItem.hasClass('result-footer') &&\r\n !this.currentItem.hasClass('result-data') &&\r\n !this.currentItem.hasClass('result-header')\r\n ) {\r\n this.currentItem.addClass('hover');\r\n\r\n // handle left/right navigation inside the current item\r\n if (event.keyCode === 37 || event.keyCode === 39) {\r\n const buttons = this.currentItem.find(\r\n 'a.mobiel:not(.disabled),a.telefoon:not(.disabled),a.contract:not(.disabled)'\r\n );\r\n if (event.keyCode === 37) {\r\n // left\r\n if (this.currentButton === null) {\r\n this.currentButtonIndex = buttons.length - 1;\r\n } else {\r\n this.currentButtonIndex--;\r\n }\r\n } else if (event.keyCode === 39) {\r\n // right\r\n if (this.currentButton === null) {\r\n this.currentButtonIndex = 0;\r\n } else {\r\n this.currentButtonIndex++;\r\n }\r\n }\r\n\r\n if (this.currentButtonIndex > buttons.length - 1) {\r\n this.currentButtonIndex = 0;\r\n this.currentButton = null;\r\n } else if (this.currentButtonIndex < 0) {\r\n this.currentButtonIndex = buttons.length;\r\n this.currentButton = null;\r\n } else {\r\n this.currentButton = buttons.eq(this.currentButtonIndex);\r\n\r\n if (this.currentButton) this.currentButton.css('opacity', '0.6');\r\n }\r\n }\r\n }\r\n\r\n // only show the call on enter display value if no currentitem is set or the active item is the current item\r\n if (this.currentItem) {\r\n if (!this.currentItem.is('li.searchQueryItem'))\r\n this.searchBox\r\n .find('#belBijEnter')\r\n .first()\r\n .css('display', 'none');\r\n else\r\n this.searchBox\r\n .find('#belBijEnter')\r\n .first()\r\n .css('display', 'inline');\r\n }\r\n\r\n // cancel default event handling\r\n if (this.currentItem && (event.keyCode === 40 || event.keyCode === 38)) return false;\r\n\r\n if (this.currentButton && (event.keyCode === 39 || event.keyCode === 39)) return false;\r\n\r\n return true;\r\n }\r\n\r\n private showSearchResults() {\r\n this.currentItem = null;\r\n this.currentItemIndex = 0;\r\n\r\n const searchbox = $('#searchQueryInput');\r\n searchbox.off('keydown.navigate');\r\n\r\n if (this.showSearchbox) searchbox.on('keydown.navigate', e => this.handleKeyPress(e));\r\n\r\n this.loadColleaguePresence();\r\n }\r\n\r\n private loadColleaguePresence() {\r\n const colleagues = this.colleagues && this.colleagues['items'];\r\n if (!colleagues || !colleagues.length) return;\r\n\r\n const colleagueId = x => x.id;\r\n const colleagueIds = colleagues.map(colleagueId);\r\n\r\n this.presenceResource.getStatusByIds({ ids: colleagueIds }).$promise.then(colleaguePhoneStatuses => {\r\n this.mapPhoneStatusesToColleagues(colleaguePhoneStatuses, colleagues);\r\n });\r\n }\r\n\r\n private mapPhoneStatusesToColleagues(\r\n colleaguePhoneStatuses: StatusUpdateModel[],\r\n colleagues: PersonSearchModel[]\r\n ) {\r\n for (const colleague of colleagues) {\r\n // tslint:disable-next-line:no-string-literal\r\n const colleagueId = colleague.id;\r\n const foundStatus = colleaguePhoneStatuses.filter(x => x.userId === colleagueId)[0];\r\n\r\n if (foundStatus) (colleague).status = foundStatus.status;\r\n }\r\n }\r\n }\r\n}","namespace Umbrella {\r\n import copyToClipboard = Umbrella.Helpers.copyToClipboard;\r\n\r\n @Component('Umbrella', {\r\n selector: 'umbrella-email',\r\n templateUrl: '/UmbrellaEmailComponent/UmbrellaEmail.html',\r\n bindings: {\r\n emailAddress: '<'\r\n }\r\n })\r\n @Inject('ToastMessageService')\r\n export class UmbrellaEmail {\r\n public emailAddress: string;\r\n\r\n constructor(private toast: ToastMessageService) {}\r\n\r\n public copyToClipboard = (text: string) =>\r\n copyToClipboard(text, () => this.toast.info('E-mailadres gekopieerd'));\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n export const toggleNavigationIcon$ = new Rx.Subject();\r\n\r\n import taskSelected$ = Umbrella.TaskHandling.taskSelected$;\r\n import caseSelected$ = Umbrella.CaseHandling.caseSelected$;\r\n import selectFromSearch$ = Umbrella.Modules.selectFromSearch$;\r\n import TaskOverviewService = Umbrella.TaskHandling.TaskOverviewService;\r\n import showTaskDetailView$ = Umbrella.TaskHandling.showTaskDetailView$;\r\n import switchDeviceMode = Umbrella.switchDeviceMode;\r\n import toggleTaskListScroll = Umbrella.Shared.toggleTaskListScroll$;\r\n import isTaskListFilterViewEnabled = Umbrella.TaskHandling.isTaskListFilterViewEnabled$;\r\n import isCustomerFilterViewEnabled = Umbrella.CustomerService.isCustomerFilterViewEnabled$;\r\n import toggleAdditionalInformationView = Umbrella.CustomerService.toggleAdditionalInformationView$;\r\n\r\n @Component('CustomerService', {\r\n selector: 'responsive-navigation',\r\n templateUrl: '/ResponsiveNavigationComponent/ResponsiveNavigation.html',\r\n bindings: {\r\n displayAdditionalInformation: '<'\r\n }\r\n })\r\n @Inject('TaskOverviewService')\r\n class ResponsiveNavigationComponent {\r\n icon: string;\r\n classValue: string;\r\n toggleValue: boolean;\r\n private navigationIconSubscription: Rx.Disposable;\r\n additionalInformationAvailable = false;\r\n responsiveFiltersAvailable = false;\r\n customerTimelineFiltersAvailable = false;\r\n listFilterOverlay = false;\r\n private showTaskDetailViewObserver: Rx.IDisposable;\r\n public displayAdditionalInformation: boolean;\r\n\r\n constructor(private taskOverviewService: TaskOverviewService) {}\r\n\r\n public $onInit() {\r\n this.subscribeEvents();\r\n this.setIcon();\r\n this.observeTaskUpdates();\r\n this.showTaskDetailViewObserver = showTaskDetailView$.subscribe(value => {\r\n this.toggleValue = value;\r\n });\r\n }\r\n\r\n public $onDestroy() {\r\n if (this.showTaskDetailViewObserver) {\r\n this.showTaskDetailViewObserver.dispose();\r\n this.showTaskDetailViewObserver = null;\r\n }\r\n if (this.navigationIconSubscription) {\r\n this.navigationIconSubscription.dispose();\r\n this.navigationIconSubscription = null;\r\n }\r\n }\r\n\r\n private subscribeEvents() {\r\n this.navigationIconSubscription = toggleNavigationIcon$.subscribe(icon => {\r\n this.toggleIcon(icon);\r\n });\r\n }\r\n\r\n public isSurfaceTab(): boolean {\r\n return !!(window.device && window.device.surface());\r\n }\r\n\r\n public toggleDeviceMode(): void {\r\n switchDeviceMode();\r\n }\r\n\r\n public focusSearchInput() {\r\n document.getElementById('searchQueryInput').focus();\r\n }\r\n\r\n private observeTaskUpdates(): void {\r\n caseSelected$\r\n .filter(classValue => !!classValue)\r\n .subscribe(classValue => {\r\n this.toggleView();\r\n });\r\n\r\n taskSelected$\r\n .filter(classValue => !!classValue)\r\n .subscribe(classValue => {\r\n this.toggleView();\r\n });\r\n\r\n selectFromSearch$.subscribe(classValue => {\r\n this.showListFilterOverlay(classValue);\r\n this.toggleView();\r\n });\r\n }\r\n\r\n public removeTaskDetailView() {\r\n this.taskOverviewService.setDisplayTaskDetailView(false);\r\n }\r\n\r\n public setIcon() {\r\n setTimeout(() => {\r\n if (document.getElementsByClassName('additional-information').length > 0) {\r\n this.additionalInformationAvailable = true;\r\n }\r\n if (document.getElementsByClassName('responsive-view-filters').length > 0) {\r\n this.responsiveFiltersAvailable = true;\r\n }\r\n if (document.getElementsByClassName('customer-timeline-filters').length > 0) {\r\n if (\r\n document.getElementsByClassName('customer-timeline-filters')[0].children[0].children.length > 0\r\n ) {\r\n this.customerTimelineFiltersAvailable = true;\r\n }\r\n }\r\n }, 250);\r\n }\r\n\r\n public toggleIcon(iconValue) {\r\n if (iconValue === this.icon) {\r\n this.icon = '';\r\n } else {\r\n this.icon = iconValue;\r\n }\r\n }\r\n\r\n public toggleView() {\r\n this.toggleIcon('');\r\n this.removeOverlay();\r\n this.icon = '';\r\n }\r\n\r\n public removeOverlay() {\r\n if (\r\n document.getElementsByTagName('body')[0].classList.contains('ismobile') &&\r\n document.getElementsByClassName('responsive-view-filters').length\r\n ) {\r\n document\r\n .getElementsByClassName('responsive-view-filters')[0]\r\n .setAttribute('style', 'display:none !important');\r\n this.listFilterOverlay = false;\r\n if (document.getElementsByClassName('active-icon').length)\r\n document.getElementsByClassName('active-icon')[0].classList.remove('active-icon');\r\n }\r\n }\r\n\r\n public toggleAdditionalInformation() {\r\n toggleAdditionalInformationView.onNext(null);\r\n }\r\n\r\n public showListFilterOverlay(classValue) {\r\n if (this.classValue && this.classValue !== classValue) {\r\n const additionalInformationX = angular.element(document.getElementsByClassName(this.classValue));\r\n additionalInformationX[0].setAttribute('style', 'display:none !important');\r\n const additionalInformation = angular.element(document.getElementsByClassName(classValue));\r\n additionalInformation[0].setAttribute('style', 'display:flex !important');\r\n this.listFilterOverlay = true;\r\n } else {\r\n if (this.listFilterOverlay === false) {\r\n const additionalInformationX = angular.element(document.getElementsByClassName(classValue));\r\n additionalInformationX[0].setAttribute('style', 'display:flex !important');\r\n this.listFilterOverlay = true;\r\n } else {\r\n const additionalInformationX = angular.element(document.getElementsByClassName(classValue));\r\n additionalInformationX[0].setAttribute('style', 'display:none !important');\r\n this.listFilterOverlay = false;\r\n }\r\n }\r\n\r\n this.classValue = classValue;\r\n }\r\n\r\n public toggleSearchView() {\r\n isSearchActive$.onNext(null);\r\n this.toggleIcon('search');\r\n }\r\n\r\n public isTaskListFilterViewEnabled(): void {\r\n isTaskListFilterViewEnabled.onNext(null);\r\n toggleTaskListScroll.onNext(null);\r\n }\r\n\r\n public isCustomerFilterViewEnabled(): void {\r\n isCustomerFilterViewEnabled.onNext(null);\r\n }\r\n\r\n public resetDisplayElement(): void {\r\n angular.element(document.getElementsByClassName('header-top')).removeAttr('style');\r\n angular.element(document.getElementsByClassName('responsive-view-filters')).removeAttr('style');\r\n this.toggleIcon('');\r\n this.listFilterOverlay = false;\r\n }\r\n\r\n public displayDownloadButton(): boolean {\r\n return !!window.deferredPrompt;\r\n }\r\n\r\n public downloadApp(): void {\r\n window.deferredPrompt.prompt();\r\n // Wait for the user to respond to the prompt\r\n window.deferredPrompt.userChoice.then(choiceResult => {\r\n window.deferredPrompt = null;\r\n });\r\n }\r\n }\r\n}\r\n","namespace Umbrella.CustomerService {\r\n @Component('CustomerService', {\r\n selector: 'sss-decision-path',\r\n templateUrl: 'SSSDecisionPathComponent/SSSDecisionPath.html',\r\n bindings: {\r\n decisions: '<'\r\n }\r\n })\r\n export class SSSDecisionPath {}\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.Sandbox {\r\n angular.module('Sandbox').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('sandbox', {\r\n url: '/sandbox',\r\n parent: 'root',\r\n abstract: true,\r\n redirectTo: 'sandbox.dashboard',\r\n views: {\r\n 'new@': { templateUrl: '/Sandbox/Sandbox.html' }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Sandbox {\r\n @Component('Sandbox', {\r\n selector: 'sandbox-tabs',\r\n templateUrl: '/Sandbox/SandboxTabsComponent/SandboxTabs.html'\r\n })\r\n class SandboxMenuComponent {\r\n public tabs: IMenuTab[];\r\n\r\n constructor() {\r\n this.tabs = [];\r\n\r\n this.tabs.push(\r\n {\r\n title: 'Dashboard',\r\n state: 'sandbox.dashboard'\r\n },\r\n {\r\n title: 'Customer Service',\r\n state: 'sandbox.customerservice'\r\n }\r\n );\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.Sandbox.CustomerService {\r\n angular.module('Sandbox').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider\r\n .state('sandbox.customerservice', {\r\n url: '/customerservice',\r\n reloadOnSearch: false,\r\n redirectTo: 'sandbox.customerservice.icons',\r\n data: {\r\n pageTitle: 'Sandbox - Customer Service',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'left@sandbox': {\r\n templateUrl:\r\n '/Sandbox/_CustomerService/Navigation.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.customerservice.attachment', {\r\n url: '/attachment',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Customer Service attachments',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl:\r\n '/Sandbox/_CustomerService/Attachment.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.customerservice.buttons', {\r\n url: '/buttons',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Customer Service buttons',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl:\r\n '/Sandbox/_CustomerService/Buttons.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.customerservice.datepicker', {\r\n url: '/datepicker',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Customer Service datepicker',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl:\r\n '/Sandbox/_CustomerService/DatePicker.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.customerservice.dialog', {\r\n url: '/dialog',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Customer Service dialog',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl: '/Sandbox/_CustomerService/Dialog.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.customerservice.icons', {\r\n url: '/icons',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Customer Service icons',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl: '/Sandbox/_CustomerService/Icons.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.customerservice.input', {\r\n url: '/input',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Customer Service input',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl: '/Sandbox/_CustomerService/Input.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.customerservice.list', {\r\n url: '/list',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Customer Service list',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl: '/Sandbox/_CustomerService/List.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.customerservice.namecard', {\r\n url: '/namecard',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Customer Service namecard',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl:\r\n '/Sandbox/_CustomerService/Namecard.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.customerservice.pagination', {\r\n url: '/pagination',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Customer Service pagination',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl:\r\n '/Sandbox/_CustomerService/Pagination.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.customerservice.radiobuttons', {\r\n url: '/select',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Customer Service radio buttons',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl:\r\n '/Sandbox/_CustomerService/Radiobuttons.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.customerservice.select', {\r\n url: '/select',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Customer Service select',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl: '/Sandbox/_CustomerService/Select.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.customerservice.tabs', {\r\n url: '/tabs',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Customer Service tabs',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl: '/Sandbox/_CustomerService/Tabs.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.customerservice.tooltip', {\r\n url: '/tooltip',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Customer Service tooltip',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl:\r\n '/Sandbox/_CustomerService/Tooltip.html'\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Sandbox.Dashboard {\r\n @Component('Sandbox', {\r\n selector: 'dialog-component',\r\n templateUrl: '/Sandbox/_Dashboard/Dialog.html'\r\n })\r\n @Inject('$mdDialog')\r\n class DialogComponent {\r\n constructor(private $mdDialog) {}\r\n\r\n public alert(theme): void {\r\n const dialog = this.$mdDialog\r\n .alert()\r\n .clickOutsideToClose(true)\r\n .title('Taak kan niet aangepast worden')\r\n .textContent('Dit type taak kan helaas niet aangepast worden.')\r\n .ariaLabel('Alert Dialog')\r\n .ok('OK')\r\n .theme(theme);\r\n\r\n this.$mdDialog.show(dialog);\r\n }\r\n\r\n public confirm(theme): void {\r\n const dialog = this.$mdDialog\r\n .confirm()\r\n .title('Taak verwijderen')\r\n .textContent('Weet je zeker dat je deze taak wilt verwijderen?')\r\n .ariaLabel('Confirm')\r\n .ok('Ja')\r\n .cancel('Nee')\r\n .theme(theme);\r\n\r\n this.$mdDialog.show(dialog);\r\n }\r\n\r\n public prompt(theme): void {\r\n const dialog = this.$mdDialog\r\n .prompt()\r\n .title('Taak afronden')\r\n .textContent('Beschrijf hoe deze taak is afgehandeld.')\r\n .placeholder('Omschrijving')\r\n .ariaLabel('Omschrijving')\r\n .initialValue('')\r\n .required(true)\r\n .ok('Bevestigen')\r\n .cancel('Annuleren')\r\n .theme(theme);\r\n\r\n this.$mdDialog.show(dialog).then((description: string) => {\r\n console.log(description);\r\n });\r\n }\r\n\r\n public multilinePrompt(theme): void {\r\n this.$mdDialog\r\n .show({\r\n template:\r\n `\r\n `,\r\n targetEvent: null,\r\n clickOutsideToClose: true\r\n })\r\n .then((description: string) => {\r\n console.log(description);\r\n });\r\n }\r\n\r\n public customDialog(theme): void {\r\n this.$mdDialog.show({\r\n theme,\r\n template:\r\n '',\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Sandbox.Dashboard {\r\n @Component('Sandbox', {\r\n selector: 'select-component',\r\n templateUrl: '/Sandbox/_Dashboard/Select.html'\r\n })\r\n class SelectComponent {\r\n public selectedValue = '';\r\n\r\n public artists = [\r\n { name: 'Frans Bauer' },\r\n { name: 'Jan Smit' },\r\n { name: 'Wolter Kroes' },\r\n { name: 'Andre Hazes' },\r\n { name: 'Jeroen van der Boom' },\r\n { name: 'Gerard Joling' }\r\n ];\r\n\r\n public something() {\r\n alert('something');\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.Sandbox.Dashboard {\r\n angular.module('Sandbox').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider\r\n .state('sandbox.dashboard', {\r\n url: '/dashboard',\r\n reloadOnSearch: false,\r\n redirectTo: 'sandbox.dashboard.buttons',\r\n data: {\r\n pageTitle: 'Sandbox - Dashboard',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'left@sandbox': {\r\n templateUrl: '/Sandbox/_Dashboard/Navigation.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.dashboard.buttons', {\r\n url: '/buttons',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Dashboard buttons',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl: '/Sandbox/_Dashboard/Buttons.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.dashboard.datepicker', {\r\n url: '/datepicker',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Dashboard datepicker',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl: '/Sandbox/_Dashboard/DatePicker.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.dashboard.dialog', {\r\n url: '/dialog',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Dashboard dialog',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': { component: 'dialogComponent' }\r\n }\r\n })\r\n .state('sandbox.dashboard.icons', {\r\n url: '/icons',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Dashboard icons',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl: '/Sandbox/_Dashboard/Icons.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.dashboard.input', {\r\n url: '/input',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Dashboard input',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl: '/Sandbox/_Dashboard/Input.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.dashboard.list', {\r\n url: '/list',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Dashboard list',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl: '/Sandbox/_Dashboard/List.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.dashboard.menu', {\r\n url: '/menu',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Dashboard menu',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl: '/Sandbox/_Dashboard/Menu.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.dashboard.pagination', {\r\n url: '/pagination',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Dashboard pagination',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl: '/Sandbox/_Dashboard/Pagination.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.dashboard.select', {\r\n url: '/select',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Dashboard select',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': { component: 'selectComponent' }\r\n }\r\n })\r\n .state('sandbox.dashboard.statuslabel', {\r\n url: '/statuslabel',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Dashboard status label',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl: '/Sandbox/_Dashboard/StatusLabel.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.dashboard.tabs', {\r\n url: '/tabs',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Dashboard tabs',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl: '/Sandbox/_Dashboard/Tabs.html'\r\n }\r\n }\r\n })\r\n .state('sandbox.dashboard.tooltip', {\r\n url: '/tooltip',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Sandbox - Dashboard tooltip',\r\n authorize: p => p.shell\r\n },\r\n views: {\r\n 'center@sandbox': {\r\n templateUrl: '/Sandbox/_Dashboard/Tooltip.html'\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.Search {\r\n angular.module('Search').config([\r\n '$stateProvider',\r\n $stateProvider => {\r\n $stateProvider.state('search', {\r\n parent: 'root',\r\n abstract: true,\r\n views: {\r\n 'new@': {\r\n templateUrl: '/Search/Search.html'\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.Search {\r\n @Component('Search', {\r\n selector: 'search-spinner',\r\n templateUrl: '/Search/SearchSpinnerComponent/SearchSpinner.html',\r\n bindings: {\r\n searching: '<',\r\n description: '@'\r\n }\r\n })\r\n class SearchSpinnerComponent {}\r\n}\r\n","namespace Umbrella.Search {\r\n @Component('Search', {\r\n selector: 'search-status',\r\n templateUrl: '/Search/SearchStatusComponent/SearchStatus.html',\r\n bindings: {\r\n searchquery: '@',\r\n results: '<',\r\n searching: '<',\r\n singular: '@',\r\n plural: '@'\r\n }\r\n })\r\n class SearchStatusComponent {}\r\n}\r\n","namespace Umbrella.Search {\r\n @Component('Search', {\r\n selector: 'search-tabs',\r\n templateUrl: '/Search/SearchTabComponent/SearchTab.html',\r\n bindings: {\r\n activetab: '@',\r\n searchquery: '@'\r\n }\r\n })\r\n class SearchTabComponent {}\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.Search.Colleagues {\r\n import EmailAddressModel = Umbrella.EmailAddressModel; \r\n import PersonSearchModel = Umbrella.Modules.PersonSearchModel;\r\n\r\n export interface IColleagueOverviewControllerScope {\r\n page: number;\r\n size: number;\r\n searchQuery: string;\r\n searching: boolean;\r\n persons: IPersonResults;\r\n clear(): void;\r\n loadMore(): void;\r\n getEmailAdress(emails: EmailAddressModel[]): string;\r\n navigate(id: string): void;\r\n }\r\n\r\n export interface IPersonResults {\r\n items: PersonSearchModel[];\r\n total: number;\r\n }\r\n\r\n @Inject('$scope', '$stateParams', 'PersonResource')\r\n export class ColleagueOverviewController {\r\n constructor(\r\n $scope: IColleagueOverviewControllerScope,\r\n $stateParams: angular.ui.IStateParamsService,\r\n private personResource: PersonResource\r\n ) {\r\n $scope.page = 0;\r\n $scope.size = 50;\r\n $scope.searchQuery = $stateParams['query'] || '';\r\n $scope.persons = { items: [], total: 0 };\r\n\r\n $scope.clear = () => this.searchCustomers($scope, null, null);\r\n\r\n $scope.loadMore = () => {\r\n if (this.hasToShowMore($scope))\r\n this.searchCustomers(\r\n $scope,\r\n personResource,\r\n this.getSearchParam($scope.searchQuery)\r\n );\r\n };\r\n\r\n $scope.getEmailAdress = (emails: EmailAddressModel[]) : string => Umbrella.Modules.Colleagues.getColleagueEmail(emails);\r\n\r\n if ($scope.searchQuery)\r\n this.searchCustomers(\r\n $scope,\r\n personResource,\r\n $scope.searchQuery\r\n );\r\n else $scope.clear();\r\n }\r\n\r\n hasToShowMore($scope: IColleagueOverviewControllerScope): boolean {\r\n return (\r\n $scope.persons &&\r\n $scope.persons.items &&\r\n $scope.persons.items.length >= $scope.size\r\n );\r\n }\r\n\r\n getSearchParam(search: string) {\r\n return search.charAt(search.length - 1) === '.'\r\n ? search.slice(0, -1)\r\n : search;\r\n }\r\n\r\n searchCustomers(\r\n $scope: IColleagueOverviewControllerScope,\r\n personResource: PersonResource,\r\n searchQuery: string\r\n ) {\r\n if (\r\n $scope.persons.items.length === 0 ||\r\n $scope.persons.items.length < $scope.persons.total\r\n ) {\r\n $scope.searching = true;\r\n if (!searchQuery) {\r\n this.clearResults($scope);\r\n return;\r\n }\r\n\r\n personResource.search({\r\n id: searchQuery,\r\n page: $scope.page,\r\n pageSize: $scope.size,\r\n roles: 'employee'\r\n }).$promise.then((results) => {\r\n if (results.items.length !== 0) {\r\n this.showCustomers($scope, results);\r\n $scope.page++;\r\n } else {\r\n $scope.searching = false;\r\n }\r\n }\r\n );\r\n } else {\r\n $scope.searching = false;\r\n }\r\n } \r\n\r\n clearResults($scope: IColleagueOverviewControllerScope) {\r\n $scope.page = 0;\r\n $scope.searching = false;\r\n this.showCustomers($scope, { \r\n items: [],\r\n total: 0,\r\n page: 0,\r\n pageSize: 50 \r\n });\r\n }\r\n\r\n showCustomers(\r\n $scope: IColleagueOverviewControllerScope,\r\n results: PagedItemsModel\r\n ) {\r\n if ($scope.page === 0) $scope.persons = { items: [], total: 0 };\r\n \r\n $scope.persons.items = results.items;\r\n $scope.persons.total = results.total;\r\n $scope.searching = false;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Search.Colleagues {\r\n angular.module('Search').config([\r\n '$stateProvider',\r\n '$urlRouterProvider',\r\n $stateProvider => {\r\n $stateProvider.state('search.colleagues', {\r\n reloadOnSearch: true,\r\n url: '/collegas?query',\r\n data: {\r\n pageTitle: 'Collegas',\r\n authorize: ps => ps.customerCard\r\n },\r\n views: {\r\n 'center@search': {\r\n templateUrl:\r\n '/Search/_Colleagues/ColleagueOverview.html',\r\n controller: ColleagueOverviewController\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.Search.Complexes {\r\n import IComplexResource = Umbrella.Modules.Housing.IComplexResource;\r\n\r\n export interface ComplexOverviewControllerScope extends IUmbrellaRootScope {\r\n searchQuery: string;\r\n searching: boolean;\r\n page: number;\r\n complexes: { items: Modules.Housing.ComplexModel[] };\r\n search(append: boolean): void;\r\n clear(): void;\r\n navigate(id: string): void;\r\n loadMore(): void;\r\n }\r\n\r\n @Inject('$scope', '$location', 'ComplexResource')\r\n @Controller('Search', 'ComplexOverviewController')\r\n export class ComplexOverviewController {\r\n constructor(\r\n private $scope: ComplexOverviewControllerScope,\r\n $location: ng.ILocationService,\r\n complexResource: IComplexResource\r\n ) {\r\n const pageSize = 50;\r\n const searchParamName = 'query';\r\n let resultsTotal: number;\r\n\r\n $scope.navigate = id => $location.path(`/complexkaart/${id}`);\r\n $scope.searchQuery = $location.search()[searchParamName] || '';\r\n $scope.searching = false;\r\n $scope.clear = () => {\r\n $scope.complexes = { items: [] };\r\n $scope.searching = false;\r\n };\r\n\r\n $scope.search = append => {\r\n $scope.page = append ? $scope.page + 1 : 0;\r\n\r\n if (!$scope.searchQuery) {\r\n $scope.clear();\r\n return;\r\n }\r\n\r\n complexResource.search(\r\n angular.extend({\r\n id: $scope.searchQuery,\r\n page: $scope.page,\r\n pageSize\r\n }),\r\n results => {\r\n resultsTotal = results.total;\r\n this.showComplexen(results);\r\n $scope.searching = false;\r\n }\r\n );\r\n };\r\n\r\n $scope.loadMore = () => {\r\n if ($scope.complexes.items.length < resultsTotal) {\r\n $scope.searching = true;\r\n $scope.search(true);\r\n } else {\r\n $scope.searching = false;\r\n }\r\n };\r\n\r\n $scope.search(false);\r\n\r\n $scope.clear();\r\n }\r\n\r\n showComplexen(results) {\r\n if (this.$scope.page === 0) this.$scope.complexes = results;\r\n else\r\n for (const complex of results.items)\r\n this.$scope.complexes.items.push(complex);\r\n if (results.page === 0) {\r\n this.$scope.searching = false;\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Search.Complexes {\r\n angular.module('Search').config([\r\n '$stateProvider',\r\n $stateProvider => {\r\n $stateProvider.state('search.complexes', {\r\n url: '/complexen?query',\r\n data: {\r\n pageTitle: 'Complexen',\r\n authorize: ps => ps.customerCard\r\n },\r\n views: {\r\n 'center@search': {\r\n templateUrl: '/Search/_Complexes/ComplexOverview.html',\r\n controller: ComplexOverviewController\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.Search.Customers {\r\n import AddressModel = Umbrella.Modules.AddressModel;\r\n import PersonSearchModel = Umbrella.Modules.PersonSearchModel;\r\n\r\n @Controller('Search', 'CustomerOverviewController')\r\n @Inject('$scope', '$location', 'PersonResource')\r\n class CustomerOverviewController {\r\n constructor($scope, private $location: ng.ILocationService, private personResource: PersonResource) {\r\n const pageSize = 50;\r\n const searchParamName = 'query';\r\n\r\n $scope.searchQuery = $location.search()[searchParamName] || '';\r\n $scope.searching = false;\r\n\r\n // Function that displays the search result box, or hides it if no results are present.\r\n const showCustomers = results => {\r\n let i;\r\n\r\n if ($scope.page === 0) {\r\n $scope.persons = results;\r\n } else {\r\n for (i = 0; i < results.items.length; i++) {\r\n $scope.persons.items.push(results.items[i]);\r\n }\r\n }\r\n\r\n $scope.searching = false;\r\n };\r\n\r\n $scope.clear = () => {\r\n $scope.persons = [];\r\n $scope.searching = false;\r\n };\r\n\r\n // Execute search query using the current $scope.searchQuery\r\n $scope.search = append => {\r\n if (append) {\r\n $scope.page++;\r\n } else {\r\n $scope.page = 0;\r\n }\r\n\r\n if ($scope.searchQuery) {\r\n $scope.searching = true;\r\n\r\n let param = $scope.searchQuery;\r\n\r\n if (param.charAt(param.length - 1) === '.') {\r\n param = param.slice(0, -1);\r\n }\r\n\r\n personResource.search({\r\n id: param,\r\n page: $scope.page,\r\n pageSize: pageSize,\r\n roles: 'customer,prospect'\r\n })\r\n .$promise.then(results => {\r\n let p = $scope.searchQuery;\r\n\r\n if (p.charAt(p.length - 1) === '.') {\r\n p = p.slice(0, -1);\r\n } \r\n\r\n if (param.toLowerCase() === p.toLowerCase()) {\r\n showCustomers(results);\r\n }\r\n });\r\n } else {\r\n $scope.clear();\r\n }\r\n };\r\n\r\n $scope.loadMore = () => {\r\n if ($scope.persons && $scope.persons.items && $scope.persons.items.length !== $scope.persons.total)\r\n $scope.search(true);\r\n };\r\n\r\n $scope.getAddress = (addresses: any) => {\r\n if (!addresses) return ''; \r\n if(addresses.length > 1 && $scope.searchQuery) { \r\n const q = $scope.searchQuery.split(\" \").map(word => word.toLowerCase()); \r\n addresses.forEach(address => {\r\n address.hits = q.map(e => address.fullAddressLine.toLowerCase().indexOf(e)).filter(r => r > -1).length; \r\n })\r\n \r\n const result = addresses.sort((a,b) => b.hits-a.hits)[0];\r\n return result.fullAddressLine || `${result.addressLine}, ${result.zipCode} ${result.city}`; \r\n } else {\r\n return addresses.reduce((previousValue: AddressModel, currentValue: AddressModel) => {\r\n if(currentValue.type && (currentValue.type.toString() === 'Home' || currentValue.type.toString() === '0'))\r\n return currentValue.fullAddressLine || `${currentValue.addressLine}, ${currentValue.zipCode} ${currentValue.city}`\r\n if(!previousValue && currentValue.type && (currentValue.type.toString() === 'Postal' || currentValue.type.toString() === '1')) \r\n return currentValue.fullAddressLine || `${currentValue.addressLine}, ${currentValue.zipCode} ${currentValue.city}`\r\n else \r\n return previousValue \r\n }, '')\r\n }\r\n };\r\n\r\n $scope.openCustomerCard = (customer: PersonSearchModel) => {\r\n if (!customer || !(customer.type === 'natural' || customer.type === 'legal')) return;\r\n\r\n const personId = customer && customer.id;\r\n // NOTE: USE $LOCATION SERVICE INSTEAD OF $STATE SERVICE FOR NAVIGATION TO PREVENT BLOCKING RENDERING ISSUE WHEN YOU SWITCH VERY FAST FROM ADVANCED SEARCH RESULTS VIEW TO A CUSTOMER CARD AFTER A PAGE REFRESH\r\n this.$location.path(`/klantenkaart/${personId}`);\r\n };\r\n\r\n $scope.clear();\r\n $scope.search(false);\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Search.Customers {\r\n angular.module('Search').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('search.customers', {\r\n url: '/klanten?query',\r\n data: {\r\n pageTitle: 'Huurders',\r\n authorize: ps => ps.customerCard\r\n },\r\n views: {\r\n 'center@search': {\r\n templateUrl: '/Search/_Customers/CustomerOverview.html',\r\n controller: 'CustomerOverviewController'\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.Search.Units {\r\n @Controller('Search', 'UnitOverviewController')\r\n @Inject('$scope', '$location', 'UnitSearchResource')\r\n class UnitOverviewController {\r\n constructor($scope, $location, UnitSearchResource: IUnitSearchClass) {\r\n const pageSize = 50;\r\n const searchParamName = 'query';\r\n\r\n $scope.searchQuery = $location.search()[searchParamName] || '';\r\n $scope.searching = false;\r\n\r\n // Function that displays the search result box, or hides it if no results are present.\r\n const showKlanten = results => {\r\n if ($scope.page === 0) {\r\n $scope.units = results;\r\n } else {\r\n for (let i = 0; i < results.items.length; i++) {\r\n $scope.units.items.push(results.items[i]);\r\n }\r\n }\r\n\r\n $scope.searching = false;\r\n };\r\n\r\n $scope.clear = function() {\r\n $scope.units = [];\r\n $scope.searching = false;\r\n };\r\n\r\n // Start by showing no results\r\n $scope.clear();\r\n\r\n // Execute search query using the current $scope.searchQuery\r\n $scope.search = function(append) {\r\n if (append) {\r\n $scope.page++;\r\n } else {\r\n $scope.page = 0;\r\n }\r\n\r\n if ($scope.searchQuery) {\r\n $scope.searching = true;\r\n\r\n let param = $scope.searchQuery;\r\n\r\n if (param.charAt(param.length - 1) === '.') {\r\n param = param.slice(0, -1);\r\n }\r\n\r\n UnitSearchResource.units(\r\n {\r\n id: param,\r\n page: $scope.page,\r\n pageSize\r\n },\r\n (results, headers) => {\r\n let p = $scope.searchQuery;\r\n\r\n if (p.charAt(p.length - 1) === '.') {\r\n p = p.slice(0, -1);\r\n }\r\n showKlanten(results);\r\n }\r\n );\r\n } else {\r\n $scope.clear();\r\n }\r\n };\r\n\r\n $scope.loadMore = () => {\r\n if (\r\n $scope.units &&\r\n $scope.units.items &&\r\n $scope.units.items.length !== $scope.units.total\r\n )\r\n $scope.search(true);\r\n };\r\n\r\n $scope.search(false);\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Search.Units {\r\n import UnitModel = Umbrella.Modules.Housing.UnitModel;\r\n\r\n export interface UnitSearchParams extends PagedRequestParams {\r\n id: string;\r\n }\r\n export interface IUnitSearchResource\r\n extends angular.resource.IResource>,\r\n SearchItemsModel {}\r\n export interface IUnitSearchClass\r\n extends angular.resource.IResourceClass {\r\n units(\r\n params: UnitSearchParams,\r\n succes?: Function,\r\n error?: Function\r\n ): angular.IPromise>;\r\n }\r\n\r\n angular.module('Search').factory('UnitSearchResource', [\r\n '$resource',\r\n ($resource: ng.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/unit/search/:id',\r\n {},\r\n {\r\n units: {\r\n method: 'GET',\r\n params: { id: '', page: 0, pageSize: 10 },\r\n isArray: false\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Search.Units {\r\n angular.module('Search').config([\r\n '$stateProvider',\r\n $stateProvider => {\r\n $stateProvider.state('search.units', {\r\n reloadOnSearch: true,\r\n url: '/eenheden?query',\r\n data: {\r\n pageTitle: 'Eenheden',\r\n authorize: ps => ps.customerCard\r\n },\r\n views: {\r\n 'center@search': {\r\n templateUrl: '/Search/_Units/UnitOverview.html',\r\n controller: 'UnitOverviewController'\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.Search.Vendors {\r\n import AddressModel = Umbrella.Modules.AddressModel;\r\n\r\n @Inject('$scope', '$location', '$state', 'PersonResource')\r\n @Controller('Search', 'VendorOverviewController')\r\n class VendorOverviewController {\r\n constructor(\r\n $scope,\r\n $location,\r\n $state,\r\n personResource: PersonResource\r\n ) {\r\n var pageSize = 50;\r\n var searchParamName = 'query';\r\n\r\n $scope.searchQuery = $location.search()[searchParamName] || '';\r\n $scope.searching = false;\r\n\r\n // Function that displays the search result box, or hides it if no results are present.\r\n let showKlanten = function(results) {\r\n if ($scope.page === 0) {\r\n $scope.personen = results;\r\n } else {\r\n for (let i = 0; i < results.items.length; i++) {\r\n $scope.personen.items.push(results.items[i]);\r\n }\r\n }\r\n\r\n $scope.searching = false;\r\n };\r\n\r\n $scope.clear = function() {\r\n $scope.personen = [];\r\n $scope.searching = false;\r\n };\r\n\r\n // Start by showing no results\r\n $scope.clear();\r\n\r\n // Execute search query using the current $scope.searchQuery\r\n $scope.search = function(append) {\r\n if (append) {\r\n $scope.page++;\r\n } else {\r\n $scope.page = 0;\r\n }\r\n\r\n if ($scope.searchQuery) {\r\n $scope.searching = true;\r\n\r\n let param = $scope.searchQuery;\r\n\r\n if (param.charAt(param.length - 1) === '.') {\r\n param = param.slice(0, -1);\r\n }\r\n\r\n personResource.search({\r\n id: param,\r\n page: $scope.page,\r\n pageSize: pageSize,\r\n roles: 'vendor'\r\n })\r\n .$promise.then(results => {\r\n let p = $scope.searchQuery;\r\n\r\n if (p.charAt(p.length - 1) === '.') {\r\n p = p.slice(0, -1);\r\n } \r\n\r\n if (param.toLowerCase() === p.toLowerCase()) {\r\n showKlanten(results);\r\n }\r\n });\r\n } else {\r\n $scope.clear();\r\n }\r\n };\r\n\r\n $scope.loadMore = () => {\r\n if (\r\n $scope.personen !== undefined &&\r\n $scope.personen.items !== undefined &&\r\n $scope.personen.items.length !== $scope.personen.total\r\n )\r\n $scope.search(true);\r\n };\r\n\r\n $scope.getAddress = (addresses: AddressModel[]) => {\r\n if (!addresses) return '';\r\n\r\n return addresses.reduce((previousValue: AddressModel, currentValue: AddressModel) => {\r\n if(currentValue.type && (currentValue.type.toString() === 'Home' || currentValue.type.toString() === '0'))\r\n return currentValue.fullAddressLine || `${currentValue.addressLine}, ${currentValue.zipCode} ${currentValue.city}`\r\n if(!previousValue && currentValue.type && (currentValue.type.toString() === 'Postal' || currentValue.type.toString() === '1')) \r\n return currentValue.fullAddressLine || `${currentValue.addressLine}, ${currentValue.zipCode} ${currentValue.city}`\r\n else \r\n return previousValue \r\n }, '')\r\n };\r\n\r\n $scope.$watch('searchQuery', function(newVal, oldVal) {\r\n $scope.search(false);\r\n $location.search(searchParamName, newVal || null);\r\n });\r\n }\r\n }\r\n}","/// \r\n/// \r\n\r\nnamespace Umbrella.Search.Vendors {\r\n angular.module('Search').config([\r\n '$stateProvider',\r\n $stateProvider => {\r\n $stateProvider.state('search.vendors', {\r\n reloadOnSearch: true,\r\n url: '/leveranciers?query',\r\n data: {\r\n pageTitle: 'Leveranciers',\r\n authorize: ps => ps.customerCard\r\n },\r\n views: {\r\n 'center@search': {\r\n templateUrl: '/Search/_Vendors/VendorOverview.html',\r\n controller: 'VendorOverviewController'\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n @Component('Umbrella', {\r\n selector: 'simple-loading',\r\n templateUrl: '/SimpleLoadingComponent/SimpleLoadingComponent.html',\r\n bindings: {\r\n isLoading: '<'\r\n }\r\n })\r\n class SimpleLoadingComponent {\r\n public isLoading?: boolean;\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n export interface ITaskActivityResource {\r\n assignChatConversation(\r\n chatContactMoment: ChatTaskActivity\r\n ): ng.resource.IResource;\r\n }\r\n\r\n export class ChatTaskActivity {\r\n constructor(\r\n public taskId: System.Guid,\r\n public chatConversationId: System.Guid\r\n ) {}\r\n }\r\n\r\n angular.module('TaskHandling').service('TaskActivityResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/activity/task/:action',\r\n {},\r\n {\r\n assignChatConversation: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: 'assignChatConversation' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","namespace Umbrella.TaskHandling {\r\n import TaakStatus = Umbrella.Modules.Tasks.TaakStatus;\r\n\r\n @Pipe('TaskHandling', 'taskAssignee')\r\n class TaskAssigneeFilter {\r\n public transform(status: TaakStatus | string | number, name: string ) { \r\n switch (status) {\r\n case TaakStatus.Nieuw:\r\n case 'Nieuw':\r\n case 0:\r\n return `Toegewezen aan ${ name }`;\r\n case TaakStatus.Opgepakt:\r\n case 'Opgepakt':\r\n case 1:\r\n return `Opgepakt door ${ name }`;\r\n case TaakStatus.Afgerond:\r\n case 'Afgerond':\r\n case 2:\r\n return `Afgerond door ${ name }`;\r\n case TaakStatus.Verwijderd:\r\n case 'Verwijderd':\r\n case 3:\r\n return `Verwijderd door ${ name }`;\r\n case TaakStatus.Geweigerd:\r\n case 'Geweigerd':\r\n case 4:\r\n return `Toegewezen aan ${ name }`;\r\n case TaakStatus.Geannuleerd:\r\n case 'Geannuleerd':\r\n case 5:\r\n return `Geannuleerd door ${ name }`;\r\n }\r\n\r\n return '';\r\n }\r\n }\r\n}","/// \r\n/// \r\n\r\ninterface SignalR {\r\n taskHub: Umbrella.TaskHandling.ITaskHubProxy;\r\n}\r\n\r\nnamespace Umbrella.TaskHandling {\r\n import TaskModel = Modules.Tasks.TaskModel;\r\n\r\n export interface ITaskHubClient {\r\n created(task: TaskModel.Detailed);\r\n completed(task: TaskModel.Detailed);\r\n contentsModified(task: TaskModel.Detailed);\r\n discussed(task: TaskModel.Detailed);\r\n executorChanged(task: TaskModel.Detailed);\r\n pickedUp(task: TaskModel.Detailed);\r\n rejected(task: TaskModel.Detailed);\r\n deleted(task: TaskModel.Detailed);\r\n }\r\n\r\n export interface ITaskHubProxy extends HubProxy {\r\n client: ITaskHubClient;\r\n }\r\n\r\n export const taskHubOnCreated$ = new Rx.Subject();\r\n export const taskHubOnUpdated$ = new Rx.Subject();\r\n export const taskHubOnDeleted$ = new Rx.Subject();\r\n export const taskHubOnActivitiesUpdated$ = new Rx.Subject<\r\n TaskModel.Detailed\r\n >();\r\n\r\n angular\r\n .module('TaskHandling')\r\n .factory('TaskHub', () => $.connection.taskHub);\r\n\r\n Modules.onSignalRInitialized(() => {\r\n $.connection.taskHub.client.created = task =>\r\n taskHubOnCreated$.onNext(task);\r\n $.connection.taskHub.client.completed = task =>\r\n taskHubOnUpdated$.onNext(task);\r\n $.connection.taskHub.client.contentsModified = task =>\r\n taskHubOnUpdated$.onNext(task);\r\n $.connection.taskHub.client.executorChanged = task =>\r\n taskHubOnUpdated$.onNext(task);\r\n $.connection.taskHub.client.pickedUp = task =>\r\n taskHubOnUpdated$.onNext(task);\r\n $.connection.taskHub.client.rejected = task =>\r\n taskHubOnUpdated$.onNext(task);\r\n $.connection.taskHub.client.deleted = task =>\r\n taskHubOnDeleted$.onNext(task);\r\n $.connection.taskHub.client.discussed = task =>\r\n taskHubOnActivitiesUpdated$.onNext(task);\r\n });\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Tasks {\r\n export interface ITaskResource extends angular.resource.IResource, Detailed.WithChannel {}\r\n\r\n export interface IFilterTasksParams extends PagedRequestParams {\r\n createdById?: System.Guid;\r\n completeById?: System.Guid;\r\n status?: string | TaakStatus;\r\n completion?: string | CompletionState;\r\n taskTypes?: string[];\r\n searchQuery?: string;\r\n }\r\n\r\n export class TaskDeadlineModel {\r\n deadline: Date;\r\n }\r\n\r\n export class ITaskOutcomeParams {\r\n taskId: System.Guid;\r\n }\r\n\r\n export class CreateFaqSuggestionParams {\r\n question: string;\r\n suggestion: string;\r\n fromOperatorId: Guid;\r\n }\r\n\r\n export interface ITaskResourceClass extends angular.resource.IResourceClass {\r\n getById(\r\n params: IdRequestParams,\r\n succes?: (data: TaskModel.Detailed) => void,\r\n error?: (reason: any) => void\r\n ): ng.resource.IResource;\r\n getByIds(params: IdsRequestParams): ng.resource.IResource;\r\n getByCaseId(params: IdRequestParams): ng.resource.IResource;\r\n getLinkedTasks(params: IdRequestParams): ng.resource.IResource;\r\n getTasks(params: IFilterTasksParams): ng.resource.IResource>;\r\n update(model: TaskModel.Detailed): ITaskResource;\r\n queryVisibleTypes(): ng.resource.IResource;\r\n queryAllTypes(): ng.resource.IResource;\r\n queryAllTypesExceptCaseFlow(): ng.resource.IResource;\r\n getDefaultTaskType(): ng.resource.IResource;\r\n getHistory(\r\n params: PagedRequestWithIdParams,\r\n succes?: (data: PagedItemsModel) => void,\r\n error?: (reason: any) => void\r\n ): ng.IPromise>;\r\n pickUp(params: IdRequestParams): ng.resource.IResource;\r\n discuss(params: IdRequestParams, message: string): ng.resource.IResource;\r\n finish(params: IdRequestParams, message: string): ng.resource.IResource;\r\n reject(params: IdRequestParams, message: string): ng.resource.IResource;\r\n getDefaultDeadline(\r\n succes?: (data: TaskDeadlineModel) => void,\r\n error?: (reason: any) => void\r\n ): ng.IPromise;\r\n getDefaultDeadlineForTaskType(\r\n params : {\r\n name: string,\r\n category: TaskTypeCategory\r\n },\r\n succes?: (data: TaskDeadlineModel) => void,\r\n error?: (reason: any) => void\r\n ): ng.IPromise;\r\n createFaqSuggestion(params: CreateFaqSuggestionParams): ng.resource.IResource;\r\n linkAnonymousTask(model: LinkAnonymousTaskModel): ng.resource.IResource;\r\n }\r\n angular.module('TaskHandling').service('TaskResource', [\r\n '$resource',\r\n ($resource: angular.resource.IResourceService) =>\r\n $resource(\r\n '/api/v1/task/:action/:id/:subaction',\r\n {},\r\n {\r\n getById: {\r\n method: 'GET',\r\n params: { id: '' },\r\n isArray: false\r\n },\r\n getByIds: {\r\n method: 'GET',\r\n params: { action: 'byIds', id: '' },\r\n isArray: true\r\n },\r\n getByCaseId: {\r\n method: 'GET',\r\n params: { action: 'forCase', id: '@id' },\r\n isArray: true\r\n },\r\n getLinkedTasks: {\r\n method: 'GET',\r\n params: { action: 'getLinkedTasks', id: '@id' },\r\n isArray: true\r\n },\r\n save: {\r\n method: 'POST',\r\n isArray: false,\r\n params: {\r\n \"Content-Type\": \"multipart/form-data; boundary=gc0p4Jq0M2Yt08jU534c0p\",\r\n \"Content-Disposition\": \"form-data; name=file\",\r\n }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n delete: {\r\n method: 'PUT',\r\n params: { id: '@id', subaction: 'delete' },\r\n transformRequest: (data: string, headersGetter) => {\r\n return JSON.stringify(data);\r\n }\r\n },\r\n getTasks: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'overview', page: 0, pageSize: 10 }\r\n },\r\n search: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'search',\r\n id: '@id',\r\n page: 0,\r\n pageSize: 10\r\n }\r\n },\r\n queryVisibleTypes: {\r\n method: 'GET',\r\n isArray: true,\r\n params: {\r\n action: 'types',\r\n subaction: 'visible'\r\n }\r\n },\r\n queryAllTypes: {\r\n method: 'GET',\r\n isArray: true,\r\n params: {\r\n action: 'types',\r\n subaction: 'all'\r\n }\r\n },\r\n queryAllTypesExceptCaseFlow: {\r\n method: 'GET',\r\n isArray: true,\r\n params: {\r\n action: 'types',\r\n subaction: 'allexceptcaseflow'\r\n }\r\n },\r\n getDefaultTaskType: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {\r\n action: 'types',\r\n subaction: 'default'\r\n }\r\n },\r\n getHistory: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'GetHistory', page: 0, pageSize: 10 }\r\n },\r\n discuss: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { id: '@id', subaction: 'discuss' },\r\n transformRequest: (data: string, headersGetter) => {\r\n return JSON.stringify(data);\r\n }\r\n },\r\n pickUp: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { id: '@id', action: 'pickUp' }\r\n },\r\n finish: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { id: '@id', subaction: 'finish' },\r\n transformRequest: (data: string, headersGetter) => {\r\n return JSON.stringify(data);\r\n }\r\n },\r\n reject: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { id: '@id', subaction: 'reject' },\r\n transformRequest: (data: string, headersGetter) => {\r\n return JSON.stringify(data);\r\n }\r\n },\r\n getDefaultDeadline: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'GetDefaultDeadline' }\r\n },\r\n getDefaultDeadlineForTaskType: {\r\n method: 'GET',\r\n isArray: false,\r\n params: {action: 'GetDefaultDeadlineForTaskType' }\r\n },\r\n createFaqSuggestion: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: 'createFaqSuggestion' },\r\n transformRequest: (data: string, headersGetter) => {\r\n return JSON.stringify(data);\r\n }\r\n },\r\n linkAnonymousTask: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { action: 'linkAnonymousTask', id: '@id' },\r\n transformRequest: (data: string, headersGetter) => {\r\n return JSON.stringify(data);\r\n }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.Modules.Tasks {\r\n import CaseModel = Modules.Customers.CaseModel;\r\n import SummarizedColleagueModel = Modules.Colleagues.SummarizedColleagueModel;\r\n import SessionColleagueModel = Umbrella.Modules.Colleagues.SessionColleagueModel;\r\n import EmployeeService = Umbrella.Modules.Colleagues.EmployeeService;\r\n import ChatCustomerInformation = Umbrella.Modules.Chat.ChatCustomerInformation;\r\n\r\n export interface IStatusFilter {\r\n id: number;\r\n text: string;\r\n }\r\n\r\n @Service('TaskHandling', 'TaskService')\r\n @Inject('TaskResource', 'FunctionGroupResource', 'ColleagueResource', '$filter', 'EmployeeService')\r\n export class TaskService {\r\n constructor(\r\n private taskResource: ITaskResourceClass,\r\n private functionGroupResource: Colleagues.IFunctionGroupResourceClass,\r\n private colleagueResource: Modules.Colleagues.IColleagueResourceClass,\r\n private $filter: angular.IFilterService,\r\n private employeeService: EmployeeService\r\n ) {}\r\n\r\n public createNewTask(\r\n cas: CaseModel,\r\n completeBy: SummarizedColleagueModel,\r\n chatCustomerInformation?: ChatCustomerInformation\r\n ): Detailed.WithChannel {\r\n const chatCustomerDescription = chatCustomerInformation ? this.createChatDescriptionWithChatCustomerInformation(chatCustomerInformation)\r\n : null;\r\n\r\n const task = new this.taskResource({\r\n subject: '',\r\n completeBy: completeBy ? completeBy : undefined,\r\n createdBy: null,\r\n lastModifiedBy: null,\r\n description: chatCustomerDescription || '',\r\n assignedTo: cas && cas.person && cas.person.roles && cas.person.roles[0],\r\n from: window.user,\r\n case: cas,\r\n mediaIds: []\r\n });\r\n\r\n this.loadTaskData(task);\r\n this.fixForTransferCallPopup(task);\r\n\r\n return task;\r\n }\r\n\r\n private createChatDescriptionWithChatCustomerInformation(chatCustomerInformation: ChatCustomerInformation): string {\r\n const { firstName, lastName, phoneNumber, email } = chatCustomerInformation;\r\n const emailString = (email.length > 0 ? 'E-mailadres: ' + email + '\\n' : '');\r\n let chatDescription: string;\r\n\r\n if (firstName.length > 0 && lastName.length > 0) {\r\n chatDescription =\r\n (firstName.length > 0 ? 'Voornaam: ' + firstName + '\\n' : '') +\r\n (lastName.length > 0 ? 'Achternaam: ' + lastName + '\\n' : '') +\r\n (phoneNumber.length > 0 ? 'Telefoonnummer: ' + phoneNumber + '\\n' : '') +\r\n emailString;\r\n }\r\n\r\n if (firstName.length > 0 && lastName.length === 0) {\r\n chatDescription =\r\n (firstName.length > 0 ? 'Naam: ' + firstName + '\\n' : '') +\r\n (phoneNumber.length > 0 ? 'Telefoonnummer: ' + phoneNumber + '\\n' : '') +\r\n emailString;\r\n }\r\n\r\n return chatDescription;\r\n }\r\n\r\n public isAssignedToMe(task: TaskModel, user: SummarizedColleagueModel | SessionColleagueModel): boolean {\r\n if (!task || !task.completeBy || !user) return false;\r\n\r\n return task.completeBy && task.completeBy.id === user.id;\r\n }\r\n\r\n public isAssignedToMeOrOneOfMyFunctionGroups(\r\n task: TaskModel,\r\n user: SummarizedColleagueModel | SessionColleagueModel\r\n ): boolean {\r\n if (!task || !task.completeBy || !user) return false;\r\n\r\n return (\r\n this.isAssignedToMe(task, user) ||\r\n this.employeeService.isAssignedToFunctionGroup(user, task.completeBy.id)\r\n );\r\n }\r\n\r\n public isCreatedByMe(task: TaskModel.Detailed, user: SummarizedColleagueModel): boolean {\r\n return task.createdBy && task.createdBy.id === user.id;\r\n }\r\n\r\n private loadTaskData(task: TaskModel.Detailed): void {\r\n this.colleagueResource\r\n .getColleaguesAndFunctiongroups({ userId: window.user.id })\r\n .$promise.then((data: PagedItemsModel) => {\r\n if (data && data.items) {\r\n const functiongroups = this.$filter('filter')(data.items, { type: 'FunctionGroups' });\r\n if (functiongroups.length > 0) task.from = functiongroups[0];\r\n }\r\n });\r\n\r\n if (task && task.case && task.case.thesaurusTagId)\r\n this.functionGroupResource\r\n .getFunctiongroupsByTagId({ id: task.case.thesaurusTagId })\r\n .$promise.then(data => {\r\n if (data && data.items && data.items.length > 0) task.completeBy = data.items[0];\r\n });\r\n\r\n this.taskResource.getDefaultTaskType().$promise.then(result => {\r\n task.taskType = result;\r\n\r\n this.taskResource.getDefaultDeadlineForTaskType(\r\n {\r\n name: result.name,\r\n category: result.category\r\n },\r\n ret => {\r\n task.ends = new Date(ret.deadline.toLocaleString());\r\n });\r\n });\r\n\r\n }\r\n\r\n private fixForTransferCallPopup(item: TaskModel.Detailed): void {\r\n if (item.completeBy) item.completeBy.type = 1;\r\n if (item.from) item.from.type = 1;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.TaskHandling {\r\n import TaakStatus = Umbrella.Modules.Tasks.TaakStatus;\r\n\r\n @Pipe('TaskHandling', 'taskStatus')\r\n class TaskstatusFilter {\r\n public transform(status: TaakStatus | string | number) {\r\n switch (status) {\r\n case TaakStatus.Nieuw:\r\n case 'Nieuw':\r\n case 0:\r\n return 'Nieuw';\r\n case TaakStatus.Opgepakt:\r\n case 'Opgepakt':\r\n case 1:\r\n return 'Opgepakt';\r\n case TaakStatus.Afgerond:\r\n case 'Afgerond':\r\n case 2:\r\n return 'Afgerond';\r\n case TaakStatus.Verwijderd:\r\n case 'Verwijderd':\r\n case 3:\r\n return 'Verwijderd';\r\n case TaakStatus.Geweigerd:\r\n case 'Geweigerd':\r\n case 4:\r\n return 'Geweigerd';\r\n case TaakStatus.Geannuleerd:\r\n case 'Geannuleerd':\r\n case 5:\r\n return 'Geannuleerd';\r\n }\r\n\r\n return '';\r\n }\r\n }\r\n}\r\n","namespace Umbrella.TaskHandling {\r\n import TaskModel = Umbrella.Modules.Tasks.TaskModel;\r\n import RoleModel = Umbrella.Modules.RoleModel;\r\n\r\n @Pipe('TaskHandling', 'taskTitle')\r\n class TaskTitleFilter {\r\n public transform(task: TaskModel) {\r\n if (task === null) return '';\r\n\r\n let title = '';\r\n if (task.taskType.category.toString() === 'CaseFlow' && task.relatedPerson)\r\n title += `${task.subject} - ${this.getTitleForRelatedPerson(task.relatedPerson)}`;\r\n\r\n if (\r\n task.subject.length > 0 &&\r\n task.relatedPerson &&\r\n task.relatedPerson.naturalPerson &&\r\n task.relatedPerson.naturalPerson.isDeceased\r\n )\r\n title += `Erven van ${task.subject}`;\r\n\r\n if (task.subject.length > 0) title += task.subject;\r\n\r\n if (task.relatedPerson) title += this.getTitleForRelatedPerson(task.relatedPerson);\r\n\r\n if (task.taskType.category.toString() === 'Error' && task.properties) {\r\n title = this.addPropertyToTitle(title, task.properties.application);\r\n title = this.addPropertyToTitle(title, task.properties.notificationName);\r\n title = this.addPropertyToTitle(title, task.properties.consumerName);\r\n }\r\n\r\n return title;\r\n }\r\n\r\n private addPropertyToTitle(title: string, property: string): string {\r\n if (!property) return title;\r\n if (title.length == 0) return `[${property}]`;\r\n\r\n title += ` [${property}]`;\r\n\r\n return title;\r\n }\r\n\r\n private getTitleForRelatedPerson(role: RoleModel): string {\r\n let preText = '';\r\n if (role.naturalPerson && role.naturalPerson.isDeceased) preText = 'Erven van';\r\n\r\n if (role && role.homeAddress && role.homeAddress.lines && role.homeAddress.lines.length > 0)\r\n return `${preText} ${role.name}, ${role.homeAddress.lines}`;\r\n\r\n if (role && role.postalAddress && role.postalAddress.lines && role.postalAddress.lines.length > 0)\r\n return `${preText} ${role.name}, ${role.postalAddress.lines}`;\r\n\r\n if (role) return `${preText} ${role.name}`;\r\n\r\n return '';\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n angular.module('TaskHandling').config([\r\n '$stateProvider',\r\n '$urlRouterProvider',\r\n ($stateProvider: ng.ui.IStateProvider, $urlRouterProvider: ng.ui.IUrlRouterProvider) => {\r\n $stateProvider\r\n .state('dashboard.oldtasks', {\r\n url: '/dashboard/tasks?page&pageSize',\r\n redirectTo: 'dashboard.tasks.overview'\r\n })\r\n .state('dashboard.tasks', {\r\n url: '/taken',\r\n redirectTo: 'dashboard.tasks.overview',\r\n data: { pageTitle: 'Taken' },\r\n views: {\r\n overview: {\r\n template: ''\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.TaskHandling {\r\n\r\n @Pipe('TaskHandling', 'makeEmailClickable')\r\n class MakeEmailClickable {\r\n public transform(message: string) {\r\n if (!message) return '';\r\n\r\n const shouldBeClickable = (email: string, index: number) => {\r\n if (\r\n message.substring(index, index-7) == 'mailto:' ||\r\n message.substring(index-2, index-(2+email.length)) == email\r\n ) { return false; }\r\n else { return true; }\r\n }\r\n\r\n const makeClickable = (email) => {\r\n const htmlEmail = new Document;\r\n let emailHref = htmlEmail.createElement('a');\r\n emailHref.setAttribute('href', 'mailto:' + email);\r\n emailHref.innerHTML = email;\r\n return emailHref.outerHTML.toString();\r\n }\r\n\r\n const emailRegex = new RegExp('[a-zA-Z0-9_\\\\.\\\\+-]+@[a-zA-Z0-9-]+\\\\.[a-zA-Z0-9-\\\\.]+');\r\n\r\n let finding = true;\r\n let subMessage = message;\r\n let subIndex = 0;\r\n while (finding) {\r\n let foundEmail = subMessage.match(emailRegex);\r\n if (!foundEmail) {\r\n finding = false;\r\n break;\r\n }\r\n\r\n let extraLength;\r\n if (shouldBeClickable(foundEmail[0], foundEmail.index + subIndex)) {\r\n message = message.substr(0, foundEmail.index + subIndex) + makeClickable(foundEmail[0]) + message.substr(foundEmail.index + subIndex + foundEmail[0].length, message.length);\r\n extraLength = makeClickable(foundEmail[0]).length;\r\n } else { extraLength = foundEmail[0].length; }\r\n\r\n subIndex += foundEmail.index + extraLength;\r\n subMessage = message.substring(subIndex, message.length);\r\n }\r\n\r\n return message;\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TaskHandling.Overview {\r\n import ITaskResourceClass = Modules.Tasks.ITaskResourceClass;\r\n\r\n export interface TaskOverviewStateParams {\r\n page: number;\r\n pageSize: number;\r\n query: string;\r\n status: string;\r\n deadline: string;\r\n taskTypes: string[];\r\n createdById: System.Guid;\r\n assignedToId: System.Guid;\r\n }\r\n\r\n angular.module('TaskHandling').config([\r\n '$stateProvider',\r\n ($stateProvider: angular.ui.IStateProvider) => {\r\n $stateProvider.state('dashboard.tasks.overview', {\r\n url: '/overzicht?page&query&status&deadline&taskTypes&createdById&assignedToId',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Taken overzicht',\r\n authorize: p => p.viewTask\r\n },\r\n views: {\r\n filters: {\r\n template: '',\r\n controller: Umbrella.createComponentRouteController<\r\n Overview.State,\r\n TaskOverviewFiltersComponentState\r\n >('TaskOverviewStore', s => ({\r\n filters: s && s.filters\r\n }))\r\n },\r\n list: {\r\n template: '',\r\n controller: Umbrella.createComponentRouteController(\r\n 'TaskOverviewStore',\r\n s => ({\r\n loading: s && s.loading,\r\n tasks: s && s.tasks,\r\n selectedTask: s && s.selectedTask\r\n })\r\n )\r\n },\r\n details: {\r\n templateUrl: 'TaskHandling/_Overview/TaskOverviewNoTaskSelected.html'\r\n }\r\n },\r\n onEnter: [\r\n '$stateParams',\r\n 'TaskOverviewService',\r\n (params: TaskOverviewStateParams, taskOverviewService: TaskOverviewService) => {\r\n taskOverviewService.initializeFilters();\r\n taskOverviewService.filterByStateParams(params);\r\n }\r\n ]\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TaskHandling.Overview {\r\n import TaskModel = Umbrella.Modules.Tasks.TaskModel;\r\n import TaskService = Umbrella.Modules.Tasks.TaskService;\r\n import SummarizedColleagueModel = Modules.Colleagues.SummarizedColleagueModel;\r\n\r\n angular.module('TaskHandling').filter('canFinish', [\r\n 'TaskService',\r\n (taskService: TaskService): Function => {\r\n return (task: TaskModel.Detailed, employee: SummarizedColleagueModel): boolean => {\r\n if (!task || !employee) return false;\r\n if (!(task.status.toString() === 'Opgepakt')) return false;\r\n if (!task.completeBy) return false;\r\n\r\n return taskService.isAssignedToMeOrOneOfMyFunctionGroups(task, employee);\r\n };\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.TaskHandling.Overview {\r\n import TaskModel = Umbrella.Modules.Tasks.TaskModel;\r\n import TaskService = Umbrella.Modules.Tasks.TaskService;\r\n import SummarizedColleagueModel = Modules.Colleagues.SummarizedColleagueModel;\r\n import ColleagueType = Modules.Colleagues.ColleagueType;\r\n\r\n @Pipe('TaskHandling', 'canModify')\r\n class CanModifyFilter {\r\n public transform(task: TaskModel, employee: SummarizedColleagueModel) {\r\n if (!task || !employee) return false;\r\n if (\r\n task.finished ||\r\n task.status.toString() === 'Afgerond' ||\r\n task.status.toString() === '2'\r\n )\r\n return false;\r\n if (\r\n task.status.toString() === 'Verwijderd' ||\r\n task.status.toString() === '3'\r\n )\r\n return false;\r\n\r\n if (window.user.permissions.editTask) return true;\r\n if (task.createdBy && task.createdBy.id === employee.id)\r\n return true;\r\n\r\n return false;\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TaskHandling.Overview {\r\n import TaskModel = Umbrella.Modules.Tasks.TaskModel;\r\n import TaskService = Umbrella.Modules.Tasks.TaskService;\r\n import SummarizedColleagueModel = Modules.Colleagues.SummarizedColleagueModel;\r\n\r\n @Pipe('TaskHandling', 'canPickup')\r\n @Inject('TaskService')\r\n class CanPickupFilter {\r\n constructor(private taskService: TaskService) {}\r\n\r\n public transform(task: TaskModel, employee: SummarizedColleagueModel) {\r\n if (!task || !employee) return false;\r\n if (\r\n task.pickedUp ||\r\n task.status.toString() === 'Opgepakt' ||\r\n task.finished ||\r\n task.status.toString() === 'Afgerond' ||\r\n task.status.toString() === 'Verwijderd' ||\r\n task.status.toString() === 'Geannuleerd'\r\n )\r\n return false;\r\n if (!task.completeBy) return false;\r\n\r\n return this.taskService.isAssignedToMeOrOneOfMyFunctionGroups(task, employee);\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TaskHandling.Overview {\r\n import TaskModel = Umbrella.Modules.Tasks.TaskModel;\r\n import TaskService = Umbrella.Modules.Tasks.TaskService;\r\n import SummarizedColleagueModel = Modules.Colleagues.SummarizedColleagueModel;\r\n\r\n @Pipe('TaskHandling', 'canReject')\r\n @Inject('TaskService')\r\n class CanPickupFilter {\r\n constructor(private taskService: TaskService) {}\r\n\r\n public transform(task: TaskModel.Detailed, employee: SummarizedColleagueModel) {\r\n if (!task || !employee) return false;\r\n if (\r\n !task.completeBy ||\r\n !task.createdBy ||\r\n task.status.toString() === 'Afgerond' ||\r\n task.status.toString() === 'Geannuleerd'\r\n )\r\n return false;\r\n if (\r\n (task.from && task.completeBy && task.from.id === task.completeBy.id) ||\r\n (task.createdBy && task.completeBy && task.createdBy.id === task.completeBy.id)\r\n )\r\n return false;\r\n\r\n return this.taskService.isAssignedToMeOrOneOfMyFunctionGroups(task, employee);\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TaskHandling.Overview {\r\n import TaskTypeCategory = Umbrella.Modules.Tasks.TaskTypeCategory;\r\n\r\n @Pipe('TaskHandling', 'isCaseFlowType')\r\n class IsCaseFlowTypeFilter {\r\n public transform(taskTypeCategory: TaskTypeCategory | string): boolean {\r\n if (!taskTypeCategory) return false;\r\n\r\n switch (taskTypeCategory.toString().toLowerCase()) {\r\n case 'caseflow':\r\n case '9':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TaskHandling.Overview {\r\n import TaskTypeCategory = Umbrella.Modules.Tasks.TaskTypeCategory;\r\n\r\n @Pipe('TaskHandling', 'isErrorType')\r\n class IsErrorTypeFilter {\r\n public transform(taskTypeCategory: TaskTypeCategory | string): boolean {\r\n if (!taskTypeCategory) return false;\r\n\r\n switch (taskTypeCategory.toString().toLowerCase()) {\r\n case 'error':\r\n case '3':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n angular.module('TaskHandling').config([\r\n '$stateProvider',\r\n '$urlRouterProvider',\r\n ($stateProvider: ng.ui.IStateProvider, $urlRouterProvider: ng.ui.IUrlRouterProvider) => {\r\n $urlRouterProvider.when(\r\n '/dashboard/taken/overzicht/:id?page&query&status&deadline&taskTypes&createdById&assignedToId',\r\n '/dashboard/taken/overzicht/:id/informatie?page&query&status&deadline&taskTypes&createdById&assignedToId'\r\n );\r\n\r\n $stateProvider\r\n .state('dashboard.oldtasks.details', {\r\n url: '/{id:(?:[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12})}',\r\n redirectTo: 'dashboard.tasks.overview.details.information'\r\n })\r\n .state('dashboard.tasks.overview.details', {\r\n url: '/{id:(?:[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12})}',\r\n data: {\r\n pageTitle: 'Taak details',\r\n authorize: p => p.viewTask\r\n },\r\n views: {\r\n 'details@dashboard.tasks': {\r\n template: '',\r\n controller: Umbrella.createComponentRouteController<\r\n Overview.State,\r\n TaskDetailsComponentState\r\n >('TaskOverviewStore', s => ({\r\n task: s && s.selectedTask,\r\n loading: s && s.selectedTaskLoading,\r\n activities: s && s.activities,\r\n linkedTasks: s && s.linkedTasks\r\n }))\r\n }\r\n },\r\n params: {\r\n showTaskDetailView: null\r\n },\r\n onEnter: [\r\n '$stateParams',\r\n 'TaskOverviewService',\r\n ($stateParams: any, taskOverviewService: TaskOverviewService) => {\r\n if (!$stateParams.showTaskDetailView && window.device.mobile()) {\r\n taskOverviewService.setDisplayTaskDetailView(false);\r\n } else {\r\n taskOverviewService.setDisplayTaskDetailView(true);\r\n }\r\n taskOverviewService.select($stateParams.id);\r\n }\r\n ],\r\n onExit: [\r\n '$stateParams',\r\n 'TaskOverviewService',\r\n ($stateParams: any, taskOverviewService: TaskOverviewService) => {\r\n if ($stateParams.showTaskDetailView && window.device.mobile()) {\r\n taskOverviewService.setDisplayTaskDetailView(false);\r\n }\r\n }\r\n ]\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n import TaskModel = Modules.Tasks.TaskModel;\r\n import BaseTagModel = Modules.Knowledgebase.BaseTagModel;\r\n import CaseFlowResourceClass = KCC.CaseFlowDashboard.CaseFlowResourceClass;\r\n import ActivityModel = Umbrella.Modules.ActivityModel;\r\n import IResidentialZoneResourceClass = Umbrella.Modules.Housing.IResidentialZoneResourceClass;\r\n import ResidentialZoneModel = Umbrella.Modules.Housing.ResidentialZoneModel;\r\n import IMenuTab = Modules.IMenuTab;\r\n import IStateMenuTab = Modules.IStateMenuTab;\r\n import DetailedCaseFlowModel = Umbrella.CaseFlow.DetailedCaseFlowModel;\r\n\r\n export interface TaskDetailsComponentState {\r\n task: TaskModel.Detailed;\r\n loading: boolean;\r\n activities: ActivityModel[];\r\n linkedTasks: TaskModel[];\r\n }\r\n\r\n @Component('TaskHandling', {\r\n selector: 'task',\r\n templateUrl: '/TaskHandling/_Overview/_Details/TaskComponent/Task.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject(\r\n '$mdDialog',\r\n 'TaskOverviewService',\r\n 'ToastMessageService',\r\n 'ResidentialZoneResource',\r\n 'CaseFlowResource',\r\n 'CaseFlowOverviewService'\r\n )\r\n class TaskComponent {\r\n public state: TaskDetailsComponentState;\r\n public user = window.user;\r\n public isBusyWithPickUp: boolean;\r\n public isBusyWithFinish: boolean;\r\n public isBusyWithReject: boolean;\r\n public hasButton: boolean;\r\n public residentialZone: ResidentialZoneModel;\r\n public tabs: IMenuTab[] = [];\r\n public displayTaskDetailView: boolean;\r\n public linkedCaseFlow: DetailedCaseFlowModel;\r\n\r\n constructor(\r\n private $mdDialog,\r\n private taskOverviewService: TaskOverviewService,\r\n private toastMessageService: ToastMessageService,\r\n private residentialZoneResource: IResidentialZoneResourceClass,\r\n private caseFlowResource: CaseFlowResourceClass\r\n ) {}\r\n\r\n public $onInit() {\r\n this.createTabs();\r\n }\r\n\r\n public $onChanges(bindings: { state: IBindingChange }) {\r\n this.updateTab();\r\n\r\n const task = bindings && bindings.state && bindings.state.currentValue && bindings.state.currentValue.task;\r\n\r\n if (task && (task.unitId || task.complexId)) this.loadResidentialZone(task.unitId || task.complexId);\r\n\r\n if (task && task.taskType.category.toString() === 'CaseFlow') this.loadLinkedCaseFlow(task.id);\r\n }\r\n\r\n public loadLinkedCaseFlow(taskId: Guid): void {\r\n this.linkedCaseFlow = this.caseFlowResource.getByTaskId({ id: taskId });\r\n }\r\n\r\n private createTab(title: string, state: string): IStateMenuTab {\r\n return {\r\n title,\r\n state\r\n };\r\n }\r\n\r\n private createTabs() {\r\n this.addTab(this.createTab('Informatie', 'dashboard.tasks.overview.details.information'));\r\n this.addTab(this.createTab('Berichten', 'dashboard.tasks.overview.details.messages'));\r\n this.addTab(this.createTab('Gekoppelde taken', 'dashboard.tasks.overview.details.linkedtasks'));\r\n this.addTab(this.createTab('Contactmomenten', 'dashboard.tasks.overview.details.contactmoments'));\r\n }\r\n\r\n private updateTab() {\r\n for (const tab of this.tabs) {\r\n if (tab.state === 'dashboard.tasks.overview.details.messages' && this.state.activities) {\r\n tab.title = 'Berichten' + this.setLengthWithHiddenType('TaakAangemaaktActivity');\r\n }\r\n\r\n if (tab.state === 'dashboard.tasks.overview.details.linkedtasks' && this.state.linkedTasks) {\r\n tab.title = 'Gekoppelde taken' + this.setLength(this.state.linkedTasks.length);\r\n }\r\n }\r\n }\r\n\r\n private addTab(tab: IStateMenuTab) {\r\n this.tabs.push(tab);\r\n }\r\n\r\n private setLength(numberOfItems: number) {\r\n if (numberOfItems && numberOfItems > 0) {\r\n return '(' + numberOfItems + ')';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n private setLengthWithHiddenType(valueToHide: string): any {\r\n if (!this.state.activities || this.state.activities.length === 0) return '';\r\n\r\n let length = 0;\r\n this.state.activities.forEach(activity => {\r\n if (activity.type !== valueToHide) length++;\r\n });\r\n\r\n return this.setLength(length);\r\n }\r\n\r\n public confirmDelete(ev): void {\r\n this.$mdDialog\r\n .show({\r\n template: `\r\n `,\r\n targetEvent: null,\r\n clickOutsideToClose: true\r\n })\r\n .then((rejectReason: string) => {\r\n this.taskOverviewService\r\n .delete(rejectReason || '')\r\n .then(() => this.toastMessageService.success('Taak succesvol verwijderd'))\r\n .catch(() =>\r\n this.toastMessageService.error(\r\n 'Fout opgetreden tijdens verwijderen van de taak. Probeer het nogmaals.'\r\n )\r\n );\r\n });\r\n }\r\n\r\n public tagWithParents(tag): BaseTagModel[] {\r\n return Modules.Knowledgebase.tagWithParents(tag);\r\n }\r\n\r\n public pickup(): void {\r\n this.isBusyWithPickUp = true;\r\n this.taskOverviewService\r\n .pickup()\r\n .then(() => this.toastMessageService.success('Taak succesvol opgepakt'))\r\n .catch(() =>\r\n this.toastMessageService.error(\r\n 'Fout opgetreden tijdens oppakken van de taak. Probeer het nogmaals.'\r\n )\r\n )\r\n .finally(() => (this.isBusyWithPickUp = false));\r\n }\r\n\r\n public confirmReject(): void {\r\n this.$mdDialog\r\n .show({\r\n template: `\r\n `,\r\n targetEvent: null,\r\n clickOutsideToClose: true\r\n })\r\n .then((reason: string) => {\r\n this.reject(reason || '');\r\n });\r\n }\r\n\r\n public async confirmFinish(taskId: System.Guid): Promise {\r\n let stepTaskId;\r\n this.isBusyWithFinish = true;\r\n if (!window.user.permissions.viewCaseFlow) return this.confirmFinishForDefaultTask();\r\n this.caseFlowResource\r\n .getByUmbrellaTaskId({ id: taskId })\r\n .$promise.then(stepTask => {\r\n if (!stepTask.id) {\r\n return this.confirmFinishForDefaultTask();\r\n }\r\n stepTaskId = stepTask.id;\r\n return this.confirmFinishForCaseFlowTask(stepTask.outcomes);\r\n })\r\n .then((outcomeId: System.Guid) => {\r\n if (stepTaskId) {\r\n this.caseFlowResource\r\n .finishTask({ id: stepTaskId }, { outcomeId })\r\n .$promise.then(() => this.toastMessageService.success('Taak succesvol afgerond'))\r\n .catch(() =>\r\n this.toastMessageService.error(\r\n 'Fout opgetreden tijdens afronden van de taak. Probeer het nogmaals.'\r\n )\r\n )\r\n .finally(() => (this.isBusyWithFinish = false));\r\n }\r\n })\r\n .catch(error => {\r\n if (error) {\r\n console.log(error);\r\n this.toastMessageService.error('Niet mogelijk om de taak af te ronden.');\r\n }\r\n })\r\n .finally(() => (this.isBusyWithFinish = false));\r\n }\r\n\r\n public getPersonId(task: TaskModel.Detailed): Guid {\r\n let relatedPersonId: Guid;\r\n let casePersonId: Guid;\r\n\r\n if (task && task.relatedPerson && task.relatedPerson.personId) {\r\n relatedPersonId = task.relatedPerson.personId;\r\n }\r\n if (task && task.case && task.case.person && task.case.person.id) {\r\n casePersonId = task.case.person.id;\r\n }\r\n\r\n if (!relatedPersonId && !casePersonId) {\r\n return null;\r\n } else if (relatedPersonId === casePersonId) {\r\n return relatedPersonId;\r\n } else if (relatedPersonId) {\r\n return relatedPersonId;\r\n } else {\r\n return casePersonId;\r\n }\r\n }\r\n\r\n private async loadResidentialZone(id: System.Guid): Promise {\r\n const model = await this.residentialZoneResource.getByIds({\r\n ids: [id]\r\n }).$promise;\r\n this.residentialZone = model && model[0];\r\n }\r\n\r\n private confirmFinishForCaseFlowTask(\r\n outcomes: Umbrella.CaseFlow.CaseFlowStepTaskModel.CaseFlowStepTaskOutcome[]\r\n ) {\r\n return this.$mdDialog.show({\r\n template:\r\n '',\r\n locals: {\r\n outcomes: outcomes\r\n },\r\n controller: [\r\n '$scope',\r\n 'outcomes',\r\n ($scope, outcomes) => {\r\n $scope.outcomes = outcomes;\r\n }\r\n ],\r\n clickOutsideToClose: false\r\n });\r\n }\r\n\r\n private confirmFinishForDefaultTask() {\r\n return this.$mdDialog\r\n .show({\r\n template: `\r\n `,\r\n targetEvent: null,\r\n clickOutsideToClose: true\r\n })\r\n .then((description: string) => {\r\n this.finish(description || '');\r\n });\r\n }\r\n\r\n private finish(description: string): void {\r\n this.isBusyWithFinish = true;\r\n this.taskOverviewService\r\n .finish(description)\r\n .then(() => this.toastMessageService.success('Taak succesvol afgerond'))\r\n .catch(() =>\r\n this.toastMessageService.error(\r\n 'Fout opgetreden tijdens afronden van de taak. Probeer het nogmaals.'\r\n )\r\n )\r\n .finally(() => (this.isBusyWithFinish = false));\r\n }\r\n\r\n private reject(reason: string): void {\r\n this.isBusyWithReject = true;\r\n this.taskOverviewService\r\n .reject(reason)\r\n .then(() => this.toastMessageService.success('Taak succesvol geweigerd'))\r\n .catch(() =>\r\n this.toastMessageService.error(\r\n 'Fout opgetreden tijdens weigeren van de taak. Probeer het nogmaals.'\r\n )\r\n )\r\n .finally(() => (this.isBusyWithReject = false));\r\n }\r\n\r\n public taskHasButton() {\r\n this.hasButton = true;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n angular.module('TaskHandling').config([\r\n '$stateProvider',\r\n $stateProvider => {\r\n $stateProvider.state(\r\n 'dashboard.tasks.overview.details.contactmoments',\r\n {\r\n url: '/contactmomenten',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Contactmomenten',\r\n authorize: ps => ps.viewTask || ps.editTask\r\n },\r\n views: {\r\n tabcontent: {\r\n template:\r\n '',\r\n controller: Umbrella.createComponentRouteController<\r\n Overview.State,\r\n TaskContactMomentsComponentState\r\n >('TaskOverviewStore', s => ({\r\n task: s && s.selectedTask,\r\n linkedTasks: s && s.linkedTasks\r\n }))\r\n }\r\n }\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n import TaskModel = Modules.Tasks.TaskModel;\r\n\r\n export interface TaskContactMomentsComponentState {\r\n task: TaskModel.Detailed;\r\n linkedTasks: TaskModel[];\r\n }\r\n\r\n @Inject('ActivityResource')\r\n @Component('TaskHandling', {\r\n selector: 'task-contact-moments',\r\n templateUrl:\r\n '/TaskHandling/_Overview/_Details/_ContactMoments/TaskContactMomentsComponent/TaskContactMomentsComponent.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n class TaskContactMomentsComponent {\r\n public state: TaskContactMomentsComponentState;\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n angular.module('TaskHandling').config([\r\n '$stateProvider',\r\n $stateProvider => {\r\n $stateProvider.state(\r\n 'dashboard.tasks.overview.details.information',\r\n {\r\n url: '/informatie',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Taak informatie',\r\n authorize: p => p.viewTask || p.editTask\r\n },\r\n views: {\r\n tabcontent: {\r\n template:\r\n '',\r\n controller: Umbrella.createComponentRouteController<\r\n Overview.State,\r\n TaskInformationComponentState\r\n >('TaskOverviewStore', s => ({\r\n task: s && s.selectedTask\r\n }))\r\n }\r\n }\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n import TaskModel = Modules.Tasks.TaskModel;\r\n import CustomSelfServiceReportModel = Modules.SelfService.Custom.CustomSelfServiceReportModel;\r\n import SelfServiceReportResource = Modules.SelfService.SelfServiceReportResource;\r\n import isDate = Umbrella.Helpers.isDate;\r\n\r\n\r\n @Component('TaskHandling', {\r\n selector: 'self-service-report-information',\r\n templateUrl:\r\n '/TaskHandling/_Overview/_Details/_Information/SelfServiceReportInformationComponent/SelfServiceReportInformation.html',\r\n bindings: {\r\n selfServiceReport: '<',\r\n }\r\n })\r\n class SelfServiceReportInformationComponent {\r\n public selfServiceReport: CustomSelfServiceReportModel;\r\n\r\n public getFormValue(value: any): any {\r\n if (!value) return;\r\n\r\n if (isDate(value.toString())) {\r\n return new Date(value).toDDMMYYYYString();\r\n }\r\n\r\n return value;\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n @Pipe('TaskHandling', 'propertiesCount')\r\n class PropertiesCountFilter {\r\n public transform(input): number {\r\n if (!input) return 0;\r\n\r\n return Object.keys(input).length;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.TaskHandling {\r\n import Guid = System.Guid;\r\n\r\n @Component('Umbrella', {\r\n selector: 'task-errors',\r\n templateUrl:\r\n '/TaskHandling/_Overview/_Details/_Information/TaskErrorsComponent/TaskErrors.html',\r\n bindings: {\r\n onlyIconAndFilename: '<',\r\n hideTitle: '<',\r\n properties: '<'\r\n }\r\n })\r\n export class TaskErrorsComponent {\r\n public onlyIconAndFilename: boolean;\r\n public hideTitle: boolean;\r\n private properties: any;\r\n public linkProperties = [];\r\n private readonly undeliveredMessageIdFieldName = 'undeliveredMessageId';\r\n private readonly scopeIdFieldName = 'scopeId';\r\n private readonly selfServiceReportIdFieldName = 'selfServiceReportId';\r\n\r\n public $onInit() {\r\n if (!this.properties) return;\r\n\r\n if (this.properties[this.undeliveredMessageIdFieldName])\r\n this.linkProperties.push({\r\n title: 'Bekijk melding gegevens',\r\n url: Config.makeManagementErrorPath(\r\n this.properties[this.undeliveredMessageIdFieldName]\r\n )\r\n });\r\n if (this.properties[this.scopeIdFieldName])\r\n this.linkProperties.push({\r\n title: 'Bekijk logs',\r\n url: Config.makeManagementLogPath(\r\n this.properties[this.scopeIdFieldName]\r\n )\r\n });\r\n if (this.properties[this.selfServiceReportIdFieldName])\r\n this.linkProperties.push({\r\n title: 'Bekijk selfservice aanvraag',\r\n url: Config.makeManagementPortalPath(\r\n this.properties[this.selfServiceReportIdFieldName]\r\n )\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n import TaskModel = Modules.Tasks.TaskModel;\r\n import CustomSelfServiceReportModel = Modules.SelfService.Custom.CustomSelfServiceReportModel;\r\n import SelfServiceReportResource = Modules.SelfService.SelfServiceReportResource;\r\n import isDate = Umbrella.Helpers.isDate;\r\n import TaskOverviewService = Umbrella.TaskHandling.TaskOverviewService;\r\n\r\n export interface TaskInformationComponentState {\r\n task: TaskModel.Detailed;\r\n }\r\n\r\n @Component('TaskHandling', {\r\n selector: 'task-information',\r\n templateUrl:\r\n '/TaskHandling/_Overview/_Details/_Information/TaskInformationComponent/TaskInformation.html',\r\n bindings: {\r\n state: '<',\r\n }\r\n })\r\n @Inject('SelfServiceReportResource', 'TaskOverviewService')\r\n class TaskInformationComponent {\r\n public state: TaskInformationComponentState;\r\n\r\n public selfServiceReport: CustomSelfServiceReportModel;\r\n\r\n constructor(\r\n private selfServiceReportResource: SelfServiceReportResource,\r\n private taskOverviewService: TaskOverviewService\r\n ) {\r\n }\r\n\r\n public $onChanges(): void {\r\n const flowStateId = this.state.task && this.state.task.properties && this.state.task.properties.flowStateId;\r\n if (flowStateId && !this.selfServiceReport)\r\n this.selfServiceReportResource.getByFlowStateId({ id: flowStateId })\r\n .$promise\r\n .then((report) => this.selfServiceReport = report);\r\n }\r\n\r\n public getErrorDescription(): string {\r\n let description = '';\r\n\r\n if (!this.state.task || !this.state.task.properties)\r\n return description;\r\n\r\n if (this.state.task.properties.application)\r\n description += `Er is iets fout gegaan in de ${\r\n this.state.task.properties.application\r\n }\\n`;\r\n\r\n if (\r\n this.state.task.properties.notificationName &&\r\n this.state.task.properties.consumerName\r\n )\r\n description += `Bij het verwerken van de notificatie ${\r\n this.state.task.properties.notificationName\r\n } in de ${this.state.task.properties.consumerName}\\n`;\r\n\r\n description += `\\n Overig beschikbare informatie: \\r\\n`;\r\n for (const prop in this.state.task.properties) {\r\n if (!this.state.task.properties.hasOwnProperty(prop)) continue;\r\n\r\n description += `${prop}: ${this.state.task.properties[prop]}\\n`;\r\n }\r\n\r\n return description;\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n angular.module('TaskHandling').config([\r\n '$stateProvider',\r\n $stateProvider => {\r\n $stateProvider.state(\r\n 'dashboard.tasks.overview.details.linkedtasks',\r\n {\r\n url: '/koppelingen',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Gekoppelde taken',\r\n authorize: ps => ps.viewTask || ps.editTask\r\n },\r\n views: {\r\n tabcontent: {\r\n template:\r\n '',\r\n controller: Umbrella.createComponentRouteController<\r\n Overview.State,\r\n LinkedTasksComponentState\r\n >('TaskOverviewStore', s => ({\r\n task: s && s.selectedTask,\r\n linkedTasks: s && s.linkedTasks\r\n }))\r\n }\r\n }\r\n }\r\n );\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n import TaskModel = Modules.Tasks.TaskModel;\r\n\r\n export interface LinkedTasksComponentState {\r\n task: TaskModel.Detailed;\r\n linkedTasks: TaskModel[];\r\n }\r\n\r\n @Component('TaskHandling', {\r\n selector: 'linked-tasks',\r\n templateUrl:\r\n '/TaskHandling/_Overview/_Details/_LinkedTasks/LinkedTasksComponent/LinkedTasks.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('ActivityResource')\r\n class LinkedTasksComponent {\r\n public state: LinkedTasksComponentState;\r\n }\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n angular.module('TaskHandling').config([\r\n '$stateProvider',\r\n $stateProvider => {\r\n $stateProvider.state('dashboard.tasks.overview.details.messages', {\r\n url: '/berichten',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Taak berichten',\r\n authorize: p => p.viewTask || p.editTask\r\n },\r\n views: {\r\n tabcontent: {\r\n template:\r\n '',\r\n controller: Umbrella.createComponentRouteController<\r\n Overview.State,\r\n TaskMessagesComponentState\r\n >('TaskOverviewStore', s => ({\r\n activities: s && s.activities\r\n }))\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n import ActivityModel = Modules.ActivityModel;\r\n\r\n export interface TaskMessagesComponentState {\r\n activities: ActivityModel[];\r\n }\r\n\r\n @Component('TaskHandling', {\r\n selector: 'task-messages',\r\n templateUrl: '/TaskHandling/_Overview/_Details/_Messages/TaskMessagesComponent/TaskMessages.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('TaskOverviewService', 'ToastMessageService')\r\n class TaskMessagesComponent {\r\n public state: TaskMessagesComponentState;\r\n public waiting: boolean;\r\n public user = window.user;\r\n public remark: string;\r\n\r\n constructor(\r\n private taskOverviewService: TaskOverviewService,\r\n private toastMessageService: ToastMessageService\r\n ) {}\r\n\r\n public reply(message: string): void {\r\n if (!message || this.isStringEmpty(message)) return;\r\n\r\n this.waiting = true;\r\n this.taskOverviewService\r\n .reply(message)\r\n .then(() => (this.remark = ''))\r\n .catch(() =>\r\n this.toastMessageService.error(\r\n 'Er is iets mis gegaan tijdens het opslaan van het bericht. Probeer het nogmaals. '\r\n )\r\n )\r\n .then(() => (this.waiting = false));\r\n }\r\n\r\n private isStringEmpty(text: string) {\r\n if (!text) return false;\r\n\r\n return text.replace(/^\\s+|\\s+$/g, '').length === 0;\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n angular.module('TaskHandling').config([\r\n '$stateProvider',\r\n $stateProvider => {\r\n $stateProvider.state('dashboard.tasks.overview.edit', {\r\n url:\r\n '/edit/{id:(?:[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12})}',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Taak bewerken',\r\n authorize: p => p.editTask\r\n },\r\n views: {\r\n 'details@dashboard.tasks': {\r\n template:\r\n '',\r\n controller: Umbrella.createComponentRouteController<\r\n Overview.State,\r\n EditTaskComponentState\r\n >('TaskOverviewStore', s => ({\r\n task:\r\n s &&\r\n s.selectedTask &&\r\n JSON.parse(JSON.stringify(s.selectedTask))\r\n }))\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n import TaskModel = Modules.Tasks.TaskModel;\r\n import MediaModel = Umbrella.Media.MediaModel;\r\n import MediaResourceProvider = Umbrella.Modules.MediaResourceProvider;\r\n import ITaskResourceClass = Modules.Tasks.ITaskResourceClass;\r\n import TaskTypeModel = Modules.Tasks.TaskTypeModel;\r\n import SummarizedColleagueModel = Umbrella.Modules.Colleagues.SummarizedColleagueModel;\r\n import IColleagueResourceClass = Umbrella.Modules.Colleagues.IColleagueResourceClass;\r\n import IFunctionGroupResourceClass = Modules.Colleagues.IFunctionGroupResourceClass;\r\n import ColleagueModel = Modules.Colleagues.ColleagueModel;\r\n\r\n export interface EditTaskComponentState {\r\n task: TaskModel.Detailed;\r\n }\r\n\r\n interface AssignToItem {\r\n id: Guid;\r\n type: string;\r\n name: string;\r\n department?: string;\r\n }\r\n\r\n @Component('TaskHandling', {\r\n selector: 'edit-task',\r\n templateUrl: '/TaskHandling/_Overview/_Edit/EditTaskComponent/EditTask.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject(\r\n '$state',\r\n 'TaskOverviewService',\r\n 'TaskResource',\r\n 'ToastMessageService',\r\n 'ColleagueResource',\r\n 'FunctionGroupResource',\r\n 'Upload',\r\n 'MediaResourceProvider'\r\n )\r\n class EditTaskComponent {\r\n public state: TaskInformationComponentState;\r\n public taskTypes: TaskTypeModel[];\r\n public media: MediaModel[];\r\n public updating: boolean;\r\n public now = new Date();\r\n public selectedDate: Date;\r\n public assignedToList: AssignToItem[] = [];\r\n\r\n constructor(\r\n private $state: ng.ui.IStateService,\r\n private taskOverviewService: TaskOverviewService,\r\n private taskResource: ITaskResourceClass,\r\n private toastMessageService: ToastMessageService,\r\n private colleagueResource: IColleagueResourceClass,\r\n private functiongroupResource: IFunctionGroupResourceClass,\r\n private uploadService: any,\r\n private mediaResourceProvider: MediaResourceProvider\r\n ) {}\r\n\r\n public $onInit() {\r\n this.loadTaskTypes();\r\n this.loadAssignedToList();\r\n this.loadMedia();\r\n if (this.state && this.state.task) {\r\n this.state.task.ends = new Date(this.state.task.ends.toLocaleString());\r\n this.selectedDate = this.state.task.ends;\r\n }\r\n this.addPasteEventListener();\r\n }\r\n\r\n public updateDeadlineDate(newDate: Date): void {\r\n // NOTE: implemented this method (instead of direct databinding) to prevent that time is changed when historic dates are modified (check discussion in #26249).\r\n this.state.task.ends.setFullYear(newDate.getFullYear());\r\n this.state.task.ends.setMonth(newDate.getMonth());\r\n this.state.task.ends.setDate(newDate.getDate());\r\n }\r\n\r\n public update(task: TaskModel.Detailed): void {\r\n this.updating = true;\r\n this.taskOverviewService\r\n .update(task)\r\n .then(() => {\r\n this.toastMessageService.success('Taak bijgewerkt');\r\n this.$state.go('dashboard.tasks.overview.details.information', { id: task.id });\r\n })\r\n .catch(response => this.toastMessageService.error('Taak kon niet bijgewerkt worden'))\r\n .finally(() => (this.updating = false));\r\n }\r\n\r\n public deleteMediaItem(mediaItem: MediaModel): void {\r\n if (!this.state.task || !this.state.task.mediaIds) return;\r\n\r\n this.state.task.mediaIds.splice(this.state.task.mediaIds.indexOf(mediaItem.id), 1);\r\n }\r\n\r\n public upload = (file: any) => {\r\n const url = Config.makeAbsoluteApiUrl('/api/v1/media?mediaCategory=TaskMedia');\r\n\r\n if (file) {\r\n file.upload = this.uploadService\r\n .upload({\r\n url,\r\n data: { file }\r\n })\r\n .then(result => {\r\n if (!this.state.task.mediaIds) this.state.task.mediaIds = [];\r\n\r\n this.state.task.mediaIds.push(result.data.id);\r\n\r\n if (!this.media) this.media = [];\r\n\r\n this.media.push(result.data);\r\n });\r\n }\r\n };\r\n\r\n public canEditTaskType(): boolean {\r\n return (\r\n this.taskTypes &&\r\n this.taskTypes.length &&\r\n this.state.task &&\r\n this.state.task.taskType &&\r\n this.taskTypes.filter(t => t.name === this.state.task.taskType.name).length > 0\r\n );\r\n }\r\n\r\n public async searchAssignedTo(query = ''): Promise {\r\n const pagedList = await this.colleagueResource.getColleaguesAndFunctiongroups({\r\n page: 0,\r\n pageSize: 200,\r\n id: query,\r\n userId: null\r\n }).$promise;\r\n\r\n this.assignedToList = pagedList.items.map(x => ({\r\n id: x.id,\r\n type: x.type.toString(),\r\n name: x.name,\r\n department: x.department\r\n }));\r\n }\r\n\r\n private loadMedia() {\r\n if (!(this.state && this.state.task)) return;\r\n\r\n this.mediaResourceProvider.getByIdsV2({ ids: this.state.task.mediaIds }).$promise.then(data => {\r\n this.media = data.map(item => item);\r\n });\r\n }\r\n\r\n private loadTaskTypes() {\r\n this.taskResource.queryVisibleTypes().$promise.then(data => {\r\n this.taskTypes = data;\r\n });\r\n }\r\n\r\n private async loadAssignedToList(): Promise {\r\n await this.searchAssignedTo('');\r\n await this.preSelectAssignedTo();\r\n }\r\n\r\n private preSelectAssignedTo() {\r\n if (this.state.task && this.state.task.completeBy) {\r\n const { id, type: completeByType, name, department } = this.state.task.completeBy;\r\n const isLoaded = completeById => this.assignedToList.filter(x => x.id === completeById).length;\r\n\r\n if (!isLoaded(id)) {\r\n this.assignedToList.push({\r\n id,\r\n type: completeByType.toString(),\r\n name,\r\n department\r\n });\r\n }\r\n }\r\n }\r\n\r\n private addPasteEventListener(): void {\r\n window.addEventListener('paste', (event: Event) => {\r\n const clipboardEvent: ClipboardEvent = event;\r\n\r\n if (clipboardEvent.clipboardData.items) {\r\n const item = clipboardEvent.clipboardData.items[0];\r\n if (item) this.upload(item.getAsFile());\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.TaskHandling.Overview {\r\n import debounce = Umbrella.Helpers.debounce;\r\n import TaskTypeModel = Modules.Tasks.TaskTypeModel;\r\n import IColleagueResourceClass = Modules.Colleagues.IColleagueResourceClass;\r\n import SummarizedColleagueModel = Modules.Colleagues.SummarizedColleagueModel;\r\n import SelectedColleagueOrFunctiongroup = Modules.SelectedColleagueOrFunctiongroup;\r\n import IPromise = angular.IPromise;\r\n import toggleTaskListScroll = Umbrella.Shared.toggleTaskListScroll$;\r\n import isTaskListFilterViewEnabled = Umbrella.TaskHandling.isTaskListFilterViewEnabled$;\r\n\r\n export interface TaskOverviewFiltersComponentState {\r\n filters: TaskOverviewFilters;\r\n }\r\n\r\n @Component('Dashboard', {\r\n selector: 'task-overview-filters',\r\n templateUrl: '/TaskHandling/_Overview/_Filters/TaskOverviewFiltersComponent/TaskOverviewFilters.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('TaskOverviewService', 'ColleagueResource')\r\n class TaskOverviewFiltersComponent {\r\n public state: TaskOverviewFiltersComponentState;\r\n\r\n public searchQuery = '';\r\n public selectedStatus: string;\r\n public selectedDeadline: string;\r\n public allTaskTypes: TaskTypeModel[];\r\n public selectedTaskTypes: string[] = [];\r\n public selectedTaskTypesModel: TaskTypeModel[] = [];\r\n public createdBy: SelectedColleagueOrFunctiongroup;\r\n public assignedTo: SelectedColleagueOrFunctiongroup;\r\n private secondChangeHasPassed: boolean;\r\n\r\n constructor(\r\n private taskOverviewService: TaskOverviewService,\r\n private colleagueResource: IColleagueResourceClass\r\n ) {}\r\n\r\n public $onInit() {\r\n this.setFilters(this.state);\r\n }\r\n\r\n public $onChanges(bindings: { state: IBindingChange }) {\r\n // NOTE: Implemented to support setting filters by URL query params\r\n if (\r\n bindings &&\r\n bindings.state &&\r\n !bindings.state.isFirstChange() &&\r\n !this.secondChangeHasPassed &&\r\n bindings.state.currentValue\r\n ) {\r\n this.setFilters(bindings.state.currentValue);\r\n this.secondChangeHasPassed = true;\r\n }\r\n }\r\n\r\n private setFilters(state: TaskOverviewFiltersComponentState): void {\r\n this.selectedStatus = (this.state && this.state.filters && this.state.filters.status) || '';\r\n this.selectedDeadline = (this.state && this.state.filters && this.state.filters.deadline) || '';\r\n this.searchQuery = this.state && this.state.filters && this.state.filters.query;\r\n this.assignedTo =\r\n this.state && this.state.filters && this.state.filters.assignedTo\r\n ? { ...this.state.filters.assignedTo }\r\n : null;\r\n this.createdBy =\r\n this.state && this.state.filters && this.state.filters.createdBy\r\n ? { ...this.state.filters.createdBy }\r\n : null;\r\n this.selectedTaskTypes =\r\n this.state && this.state.filters && this.state.filters.taskTypes\r\n ? [...this.state.filters.taskTypes]\r\n : [];\r\n\r\n this.taskOverviewService.loadTaskTypes().then(allTaskTypes => {\r\n this.allTaskTypes = allTaskTypes;\r\n this.selectedTaskTypesModel = [\r\n ...allTaskTypes.filter(t => this.selectedTaskTypes.indexOf(t.name) > -1)\r\n ];\r\n });\r\n }\r\n\r\n public filterByQuery = debounce(\r\n (query: string) => {\r\n this.taskOverviewService.filterByQuery(query);\r\n },\r\n 500,\r\n false\r\n );\r\n\r\n public filterByStatus(newValue: string): void {\r\n this.taskOverviewService.filterByStatus(newValue);\r\n }\r\n\r\n public filterByDeadline(newValue: string): void {\r\n this.taskOverviewService.filterByDeadline(newValue);\r\n }\r\n\r\n public searchCreatedBy(query = ''): IPromise {\r\n return this.colleagueResource\r\n .getColleaguesAndFunctiongroups({\r\n page: 0,\r\n pageSize: 20,\r\n id: query,\r\n userId: null\r\n })\r\n .$promise.then(data => {\r\n return data.items;\r\n });\r\n }\r\n\r\n public filterByCreatedBy(newSelection: SelectedColleagueOrFunctiongroup): void {\r\n this.taskOverviewService.filterByCreatedBy(newSelection);\r\n }\r\n\r\n public searchAssignedTo(query = ''): IPromise {\r\n return this.colleagueResource\r\n .getColleaguesAndFunctiongroups({\r\n page: 0,\r\n pageSize: 20,\r\n id: query,\r\n userId: null\r\n })\r\n .$promise.then(data => {\r\n return data.items;\r\n });\r\n }\r\n\r\n public filterByAssignedTo(newSelection: SelectedColleagueOrFunctiongroup): void {\r\n this.taskOverviewService.filterByAssignedTo(newSelection);\r\n }\r\n\r\n public toggleTaskType(taskType: string): void {\r\n if (typeof this.selectedTaskTypes === 'string')\r\n this.selectedTaskTypes = [this.selectedTaskTypes];\r\n\r\n const index = this.selectedTaskTypes.indexOf(taskType);\r\n if (index !== -1) this.selectedTaskTypes.splice(index, 1);\r\n else this.selectedTaskTypes.push(taskType);\r\n\r\n this.taskOverviewService.filterByTaskTypes([...this.selectedTaskTypes]);\r\n }\r\n\r\n public closeTaskListFilterView() {\r\n toggleNavigationIcon$.onNext('responsive-view-filters');\r\n isTaskListFilterViewEnabled.onNext(null);\r\n toggleTaskListScroll.onNext(null);\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n angular.module('TaskHandling').config([\r\n '$stateProvider',\r\n $stateProvider => {\r\n $stateProvider.state('dashboard.tasks.overview.link', {\r\n url:\r\n '/link/{id:(?:[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12})}',\r\n reloadOnSearch: false,\r\n data: {\r\n pageTitle: 'Taak koppelen',\r\n authorize: p => p.editTask\r\n },\r\n views: {\r\n 'details@dashboard.tasks': {\r\n template:\r\n '',\r\n controller: Umbrella.createComponentRouteController<\r\n Overview.State,\r\n LinkTaskComponentState\r\n >('TaskOverviewStore', s => ({\r\n task:\r\n s &&\r\n s.selectedTask &&\r\n JSON.parse(JSON.stringify(s.selectedTask))\r\n }))\r\n }\r\n }\r\n });\r\n }\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TaskHandling {\r\n import TaskModel = Modules.Tasks.TaskModel;\r\n import ITaskResourceClass = Modules.Tasks.ITaskResourceClass;\r\n import LinkAnonymousTaskModel = Modules.Tasks.LinkAnonymousTaskModel;\r\n import PersonSearchModel = Umbrella.Modules.PersonSearchModel;\r\n import IContractResource = Modules.Housing.IContractResource;\r\n import ContractFilterModel = Modules.Housing.ContractFilterModel;\r\n\r\n export interface LinkTaskComponentState {\r\n task: TaskModel.Detailed;\r\n }\r\n\r\n @Component('TaskHandling', {\r\n selector: 'link-task',\r\n templateUrl:\r\n '/TaskHandling/_Overview/_Link/LinkTaskComponent/LinkTask.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject(\r\n '$state',\r\n 'TaskOverviewService',\r\n 'TaskResource',\r\n 'ToastMessageService',\r\n 'PersonResource',\r\n 'ContractResource'\r\n )\r\n class LinkTaskComponent {\r\n public state: TaskInformationComponentState;\r\n public updating: boolean;\r\n public searchingPersons: boolean;\r\n public searchingContracts: boolean;\r\n public linkAnonymousTaskModel: LinkAnonymousTaskModel;\r\n public persons: PersonSearchModel[] = [];\r\n public selectedPerson: PersonSearchModel;\r\n public contracts: ContractFilterModel[] = [];\r\n public selectedContract: ContractFilterModel;\r\n\r\n constructor(\r\n private $state: ng.ui.IStateService,\r\n private taskOverviewService: TaskOverviewService,\r\n private taskResource: ITaskResourceClass,\r\n private toastMessageService: ToastMessageService,\r\n private personResource: PersonResource,\r\n private contractResource: IContractResource\r\n ) {}\r\n\r\n public search = (query) => {\r\n if (!query || !query.length) {\r\n this.persons = [];\r\n return;\r\n }\r\n\r\n this.searchingPersons = true;\r\n this.personResource.search({ id: query, roles: 'customer,prospect,vendor' }).$promise\r\n .then(model => {\r\n this.persons = model.items;\r\n })\r\n .finally(() => {\r\n this.searchingPersons = false;\r\n });\r\n };\r\n\r\n public setPerson = (person: PersonSearchModel) => this.selectedPerson = person;\r\n\r\n public setContract = (contract: ContractFilterModel) => this.selectedContract = contract;\r\n\r\n public clearSelected = () => {\r\n this.selectedPerson = null;\r\n this.contracts = [];\r\n this.selectedContract = null;\r\n }\r\n\r\n public async getContracts(person: PersonSearchModel) {\r\n if (!person || !person.roles || Object.keys(person.roles).some(k => k !== 'customer')) return;\r\n\r\n this.searchingContracts = true;\r\n\r\n this.contracts = await this.contractResource.getAllFilterValuesByRoleId({\r\n id: person.roles['customer']\r\n }).$promise\r\n .finally(() => {\r\n this.searchingContracts = false;\r\n });\r\n }\r\n\r\n public linkTask() {\r\n this.updating = true;\r\n\r\n if (!this.state || !this.state.task || !this.state.task.id) return;\r\n if (!this.selectedPerson || !this.selectedPerson.id) return;\r\n\r\n this.linkAnonymousTaskModel = {\r\n taakId: this.state.task.id,\r\n personId: this.selectedPerson.id,\r\n contractId: this.selectedContract && this.selectedContract.id\r\n };\r\n\r\n this.taskResource\r\n .linkAnonymousTask(this.linkAnonymousTaskModel).$promise\r\n .then(() => {\r\n this.taskOverviewService\r\n .update(this.state.task)\r\n .then(() => {\r\n this.toastMessageService.success('Taak succesvol gekoppeld');\r\n this.$state.go(\r\n 'dashboard.tasks.overview.details.information',\r\n { id: this.state.task.id }\r\n );\r\n })\r\n .catch(response =>\r\n this.$state.go(\r\n 'dashboard.tasks.overview.details.information',\r\n { id: this.state.task.id }\r\n )\r\n )\r\n .finally(() => (this.updating = false));\r\n })\r\n .catch(response =>\r\n this.toastMessageService.error(\r\n 'Taak kan niet gekoppeld worden. Probeer het nogmaals.'\r\n )\r\n )\r\n .finally(() => (this.updating = false));\r\n }\r\n\r\n public renderPersonName(person: PersonSearchModel) {\r\n return [person.name, person.contactDetails.addresses.length && person.contactDetails.addresses[0].fullAddressLine].filter(x => !!x).join(' - ');\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TaskHandling.Overview {\r\n import TaskModel = Umbrella.Modules.Tasks.TaskModel;\r\n\r\n @Pipe('TaskHandling', 'isNewerThan')\r\n class IsNewerThanFilter {\r\n public transform(task: TaskModel, hours: number): boolean {\r\n switch (task.status.toString()) {\r\n case 'Nieuw':\r\n case '0':\r\n const nowMinusHours = new Date().addHours(-hours);\r\n let creationdate = task.created;\r\n\r\n if (!(creationdate instanceof Date))\r\n creationdate = new Date(creationdate);\r\n\r\n if (creationdate < nowMinusHours) return false;\r\n\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella.TaskHandling.Overview {\r\n import TaskOverviewItemModel = Modules.Tasks.TaskOverviewItemModel;\r\n\r\n export interface TaskListComponentState {\r\n loading: boolean;\r\n tasks: PagedItemsModel;\r\n selectedTask: TaskOverviewItemModel;\r\n }\r\n\r\n @Component('TaskHandling', {\r\n selector: 'task-list',\r\n templateUrl: '/TaskHandling/_Overview/_List/TaskListComponent/TaskList.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n @Inject('$stateParams', '$location', 'TaskOverviewService')\r\n class TaskListComponent {\r\n public state: TaskListComponentState;\r\n public page = this.$stateParams.page || 0;\r\n public pageSize = this.$stateParams.pageSize || 9;\r\n public navPage = this.page + 1;\r\n public width = window.innerWidth;\r\n\r\n constructor(\r\n private $stateParams: TaskOverviewStateParams,\r\n private $location: ng.ILocationService,\r\n private taskOverviewService: TaskOverviewService\r\n ) {}\r\n\r\n public pageChanged(newPage): void {\r\n this.page = newPage;\r\n const query = this.$location.search();\r\n this.$location.search({ ...query, page: this.page });\r\n }\r\n\r\n public async requestMoreTasks(pageSize: number) {\r\n // HACK: Early return when there are no tasks left, fixes issue when remaining task is completed but not removed from the list (because Elastic hasn't deleted it yet)\r\n if (this.state.tasks.total === 0) return;\r\n\r\n await this.taskOverviewService.load(pageSize);\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Telephony {\r\n @Pipe('Telephony', 'activeCall')\r\n class ActiveCallFilter {\r\n public transform(\r\n phoneCalls: Umbrella.Telephony.PhoneCallModel[]\r\n ): Umbrella.Telephony.PhoneCallModel {\r\n if (!phoneCalls) return undefined;\r\n\r\n let activeCall: Umbrella.Telephony.PhoneCallModel;\r\n\r\n phoneCalls.forEach(call => {\r\n switch (call.status.toString()) {\r\n case '2':\r\n case 'Established':\r\n activeCall = call;\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n if (activeCall) return activeCall;\r\n\r\n phoneCalls.forEach(call => {\r\n switch (call.status.toString()) {\r\n case '1':\r\n case 'Dialing':\r\n activeCall = call;\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n if (activeCall) return activeCall;\r\n\r\n phoneCalls.forEach(call => {\r\n switch (call.status.toString()) {\r\n case '6':\r\n case 'OnHold':\r\n activeCall = call;\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n if (activeCall) return activeCall;\r\n\r\n return phoneCalls[0];\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Telephony {\r\n @Pipe('Telephony', 'canPickupCall')\r\n class CanPickupCallFilter {\r\n public transform(\r\n status: Umbrella.Telephony.PhoneCallStatus | string\r\n ): boolean {\r\n if (!status) return false;\r\n\r\n switch (status.toString().toLowerCase()) {\r\n case '104':\r\n case 'trypickup':\r\n return false;\r\n default:\r\n return true;\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules {\r\n import debounce = Umbrella.Helpers.debounce;\r\n\r\n angular.module('Umbrella').directive('conversationBarTabControl', [\r\n () => {\r\n function recalculateHiddenTabs(\r\n scope: ng.IScope,\r\n container: ng.IAugmentedJQuery\r\n ) {\r\n if (!container || container.length < 1) return;\r\n\r\n setContainerWidth(container);\r\n\r\n const containerEl = container[0];\r\n const isOverflowing =\r\n containerEl.scrollHeight > containerEl.clientHeight ||\r\n containerEl.scrollWidth > containerEl.clientWidth;\r\n if (isOverflowing) {\r\n scope.decrease();\r\n return;\r\n }\r\n\r\n const children = container.children();\r\n let occupiedWidth = 0;\r\n\r\n angular.forEach(children, (tab: Element, key) => {\r\n occupiedWidth += tab.clientWidth;\r\n });\r\n\r\n const containerWidth = Math.ceil(container.width());\r\n const hasSpaceForMore = containerWidth - 200 > occupiedWidth;\r\n\r\n if (hasSpaceForMore) {\r\n scope.increase();\r\n }\r\n }\r\n\r\n function evaluateChanges(\r\n element: ng.IAugmentedJQuery,\r\n tabsCount: number\r\n ) {\r\n const windowWidth = angular.element(window).width();\r\n\r\n return (\r\n element[0].childNodes.length +\r\n element.width() +\r\n element[0].scrollWidth +\r\n windowWidth +\r\n tabsCount\r\n );\r\n }\r\n\r\n function setContainerWidth(container: ng.IAugmentedJQuery) {\r\n if (!container || container.length < 1) return;\r\n\r\n container.children().hide();\r\n container.css('width', 'unset');\r\n\r\n const width = container.width();\r\n\r\n container.css('width', width + 'px');\r\n container.children().show();\r\n }\r\n\r\n return {\r\n priority: 1,\r\n scope: {\r\n increase: '&',\r\n decrease: '&',\r\n tabsCount: '<'\r\n },\r\n restrict: 'A',\r\n link(scope: ng.IScope, element: ng.IAugmentedJQuery, attr) {\r\n // setTimeout(, 0);\r\n element.ready(() => recalculateHiddenTabs(scope, element));\r\n scope.$watch(\r\n (scope: ng.IScope) => {\r\n return evaluateChanges(element, scope.tabsCount);\r\n },\r\n (newValue, oldValue, scope: ng.IScope) => {\r\n if (newValue !== oldValue)\r\n debounce(\r\n () => recalculateHiddenTabs(scope, element),\r\n 50,\r\n true\r\n )();\r\n }\r\n );\r\n }\r\n };\r\n }\r\n ]);\r\n}\r\n","namespace Umbrella.Modules.Telephony {\r\n import PhoneCallModel = Umbrella.TelephonyControl.PhoneCallModel;\r\n\r\n @Pipe('Telephony', 'hasMultipleCandidates')\r\n class HasMultipleCandidatesFilter {\r\n public transform(call: PhoneCallModel): boolean {\r\n if (!call || !call.candidateRoleIds) return false;\r\n\r\n return call.candidateRoleIds.length > 1;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Telephony {\r\n @Pipe('Telephony', 'inboundCall')\r\n class InboundCallFilter {\r\n public transform(\r\n phoneCalls: Umbrella.Telephony.PhoneCallModel[]\r\n ): boolean {\r\n if (!phoneCalls) return undefined;\r\n\r\n let inboundCall = undefined;\r\n for (const call of phoneCalls) {\r\n switch (call.status.toString().toLowerCase()) {\r\n case '3':\r\n case 'ringing':\r\n inboundCall = call;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n return inboundCall;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Telephony {\r\n @Pipe('Telephony', 'isAvailableStatus')\r\n class IsAvailableStatusFilter {\r\n public transform(\r\n status: Umbrella.Telephony.PhoneCallStatus | string\r\n ): boolean {\r\n if (!status) return false;\r\n\r\n switch (status.toString().toLowerCase()) {\r\n case '3':\r\n case 'offline':\r\n return false;\r\n default:\r\n return true;\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.ChatConversationHandling {\r\n @Pipe('Chat', 'isChatAvailable')\r\n class IsChatAvailableFilter {\r\n public transform(input: ChatState): boolean {\r\n if (input && input.registration && input.registration.status === RegisterStatus.Registered) return true;\r\n\r\n return false;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Telephony {\r\n @Pipe('Telephony', 'isDialingStatus')\r\n class IsDialingStatusFilter {\r\n public transform(\r\n input: Umbrella.Telephony.PhoneCallStatus | string\r\n ): boolean {\r\n if (input) {\r\n switch (input) {\r\n case 1:\r\n case 104:\r\n case 'Dialing':\r\n case 'TryPickUp':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Telephony {\r\n @Pipe('Telephony', 'isOnHoldStatus')\r\n class IsOnHoldStatusFilter {\r\n public transform(\r\n input: Umbrella.Telephony.PhoneCallStatus | string\r\n ): boolean {\r\n if (input) {\r\n switch (input) {\r\n case 6:\r\n case 103:\r\n case 'OnHold':\r\n case 'TryHold':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Telephony {\r\n @Pipe('Telephony', 'isQueueEnabledStatus')\r\n class IsQueueEnabledStatusFilter {\r\n public transform(\r\n input: Umbrella.Telephony.PhoneQueueStatus | string\r\n ): boolean {\r\n if (!input) return false;\r\n\r\n switch (input.toString().toLowerCase()) {\r\n case '2':\r\n case 'available':\r\n case '1':\r\n case 'unavailable':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Telephony {\r\n @Pipe('Telephony', 'isRingingStatus')\r\n class IsRingingStatusFilter {\r\n public transform(\r\n input: Umbrella.Telephony.PhoneCallStatus | string\r\n ): boolean {\r\n if (input) {\r\n switch (input) {\r\n case 3:\r\n case 'Ringing':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Telephony {\r\n @Pipe('Telephony', 'onHoldCalls')\r\n class OnHoldCallsFilter {\r\n public transform(\r\n phoneCalls: Umbrella.Telephony.PhoneCallModel[]\r\n ): Umbrella.Telephony.PhoneCallModel[] {\r\n if (!phoneCalls) return undefined;\r\n\r\n const calls = [];\r\n for (const value of phoneCalls) {\r\n switch (value.status.toString().toLowerCase()) {\r\n case '6':\r\n case '106':\r\n case 'onhold':\r\n case 'tryresume':\r\n calls.push(value);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n return calls;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Telephony {\r\n @Pipe('Telephony', 'ongoingCalls')\r\n class OngoingCallsFilter {\r\n public transform(\r\n phoneCalls: Umbrella.Telephony.PhoneCallModel[]\r\n ): Umbrella.Telephony.PhoneCallModel[] {\r\n if (!phoneCalls) return undefined;\r\n\r\n const calls = [];\r\n for (const call of phoneCalls) {\r\n switch (call.status.toString()) {\r\n case '3':\r\n case 'Ringing':\r\n case '5':\r\n case 'LineClosed':\r\n break;\r\n default:\r\n calls.push(call);\r\n break;\r\n }\r\n }\r\n\r\n return calls;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Telephony {\r\n export interface PhoneButtonStatus {\r\n hold: boolean;\r\n transfer: boolean;\r\n hangup: boolean;\r\n }\r\n\r\n @Pipe('Telephony', 'phoneButtonStatus')\r\n class PhoneButtonStatusFilter {\r\n public transform(\r\n input: Umbrella.Telephony.PhoneCallStatus | string,\r\n callCount: number\r\n ): PhoneButtonStatus {\r\n if (input) {\r\n switch (input) {\r\n case 2:\r\n case 'Established':\r\n if (callCount === 1) {\r\n return {\r\n hold: true,\r\n transfer: false,\r\n hangup: true\r\n };\r\n } else if (callCount > 1) {\r\n return {\r\n hold: false,\r\n transfer: true,\r\n hangup: true\r\n };\r\n }\r\n break;\r\n case 6:\r\n case 'OnHold':\r\n case 106:\r\n case 'TryResume':\r\n if (callCount === 1) {\r\n return {\r\n hold: true,\r\n transfer: false,\r\n hangup: false\r\n };\r\n } else if (callCount > 1) {\r\n return {\r\n hold: true,\r\n transfer: false,\r\n hangup: false\r\n };\r\n }\r\n break;\r\n case 1:\r\n case 'Dialing':\r\n case 104:\r\n case 'TryPickUp':\r\n case 103:\r\n case 'TryHold':\r\n return { hold: false, transfer: false, hangup: true };\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n return { hold: false, transfer: false, hangup: false };\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Telephony {\r\n @Pipe('Telephony', 'phoneCallStatus')\r\n class PhoneCallStatusFilter {\r\n public transform(\r\n input: Umbrella.Telephony.PhoneCallStatus | string\r\n ): string {\r\n if (!input) return '';\r\n\r\n switch (input.toString().toLowerCase()) {\r\n case '6':\r\n case '106':\r\n case 'onhold':\r\n case 'tryresume':\r\n return 'orange';\r\n default:\r\n return 'green';\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Telephony {\r\n @Pipe('Telephony', 'phoneStatusIcon')\r\n class PhoneStatusIconFilter {\r\n public transform(status: number | string) {\r\n switch (status) {\r\n case 'Unavailable':\r\n case 1:\r\n return 'phone_paused';\r\n case 'Available':\r\n case 2:\r\n return 'phone_in_talk';\r\n case 'Busy':\r\n case 4:\r\n return 'phone_locked';\r\n default:\r\n return 'phone';\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\nnamespace Umbrella {\r\n export interface IPresenseResource\r\n extends angular.resource.IResource {}\r\n\r\n export interface IPresenceParams {\r\n ids: System.Guid[];\r\n }\r\n\r\n interface IResourceParams {\r\n action?: string;\r\n page?: number;\r\n pageSize?: number;\r\n id?: string;\r\n userId?: string;\r\n }\r\n\r\n export interface IPresenceResource\r\n extends angular.resource.IResourceClass {\r\n getStatusByIds(\r\n params: IPresenceParams\r\n ): ng.resource.IResource<\r\n Umbrella.Modules.Colleagues.StatusUpdateModel[]\r\n >;\r\n }\r\n\r\n class PresenceResource {\r\n static $inject = ['$resource'];\r\n\r\n constructor(public $resource: angular.resource.IResourceService) {}\r\n\r\n getPresenceResource(): IPresenceResource {\r\n return this.$resource<\r\n Modules.Colleagues.ColleagueModel.Detailed,\r\n IPresenceResource\r\n >(\r\n '/api/v1/presence/:action/:id',\r\n {},\r\n {\r\n getStatusByIds: this.getResource('GET', true, {\r\n action: 'getstatusbyids'\r\n })\r\n }\r\n );\r\n }\r\n\r\n private getResource(\r\n method: string,\r\n isArray: boolean,\r\n params?: IResourceParams,\r\n headers?: any\r\n ): angular.resource.IActionDescriptor {\r\n return { method, isArray, params, headers };\r\n }\r\n }\r\n angular\r\n .module('Umbrella')\r\n .service('PresenceResource', [\r\n '$resource',\r\n $resource => new PresenceResource($resource).getPresenceResource()\r\n ]);\r\n}\r\n","namespace Umbrella.CustomerService {\r\n import ICustomerResource = Umbrella.Modules.Customers.ICustomerResource;\r\n import IOnboardingResource = Umbrella.Modules.Onboarding.IOnboardingResource;\r\n import CreateCustomerModel = Umbrella.Modules.Customers.CreateCustomerModel;\r\n import RelationModel = Umbrella.Onboarding.relationModel;\r\n import Gender = Umbrella.Modules.Gender;\r\n import GetEnumValueAsNumber = Umbrella.Helpers.GetEnumValueAsNumber;\r\n\r\n @Component('CustomerService', {\r\n selector: 'relation-popup',\r\n templateUrl: '/Top/RelationPopup.html',\r\n bindings: {\r\n model: ' 0) {\r\n this.onboardingResource\r\n .getRelationByExternalId({\r\n externalId: this.relationNumber\r\n })\r\n .$promise.then(data => {\r\n this.relationModel = data;\r\n this.copyData();\r\n })\r\n .catch(e => {\r\n if (e.status === 409) {\r\n this.customerResource\r\n .getById({ id: e.data as System.Guid })\r\n .$promise.then(customer => {\r\n this.$mdDialog.hide(customer);\r\n })\r\n .finally(() => {\r\n this.toastMessageService.info('Deze relatie is reeds bekend');\r\n });\r\n } else if (e.status === 404) {\r\n this.toastMessageService.error('Geen gegevens gevonden voor dit relatienummer');\r\n } else {\r\n this.toastMessageService.error('Fout opgetreden tijdens ophalen gegevens');\r\n }\r\n });\r\n }\r\n }\r\n\r\n public cancel(): void {\r\n this.$mdDialog.cancel();\r\n }\r\n\r\n public add(): void {\r\n this.model.gender = GetEnumValueAsNumber(Gender, this.model.gender || Gender.Unknown);\r\n\r\n this.customerResource\r\n .add(this.model)\r\n .$promise.then(customer => {\r\n this.$mdDialog.hide(customer);\r\n })\r\n .catch(e => {\r\n this.toastMessageService.error('Aanmaken nieuwe relatie mislukt');\r\n });\r\n }\r\n\r\n private copyData(): void {\r\n this.model = {\r\n customerId: this.emptyGuid,\r\n email: this.relationModel.email,\r\n firstName: this.relationModel.firstName,\r\n gender: this.relationModel.gender,\r\n insertion: this.relationModel.insertion,\r\n lastName: this.relationModel.lastName,\r\n phoneNumber: this.relationModel.phoneNumber,\r\n externalId: this.relationModel.externalId,\r\n agentInfoId: this.relationModel.agentInfoId\r\n };\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n import PhoneStatsModel = Umbrella.TelephonyControl.Statistics.PhoneStatsModel;\r\n import ChatConversation = Umbrella.ChatConversationHandling.ChatConversation;\r\n import RoleModel = Umbrella.Modules.RoleModel;\r\n import RoleModelDictionary = Umbrella.Modules.Telephony.RoleModelDictionary;\r\n import isPendingConversation = ChatConversationHandling.isPendingConversation;\r\n import SelfServiceScenarioModel = Umbrella.Modules.SelfService.SelfServiceScenarioModel;\r\n\r\n export namespace Impersonation {\r\n export interface EnterEvent {\r\n readonly type: 'ImpersonationEnterEvent';\r\n readonly person: PersonModel;\r\n readonly scenario: SelfServiceScenarioModel;\r\n readonly caseFlowId?: System.Guid;\r\n }\r\n\r\n export interface LeaveEvent {\r\n readonly type: 'ImpersonationLeaveEvent';\r\n }\r\n\r\n export interface FullScreenSwitchEvent {\r\n readonly type: 'ImpersonationFullScreenSwitchEvent';\r\n readonly enabled: boolean;\r\n }\r\n\r\n export interface State {\r\n readonly enabled: boolean;\r\n readonly person: PersonModel;\r\n readonly scenario: SelfServiceScenarioModel;\r\n readonly caseFlowId?: System.Guid;\r\n readonly fullscreenMode: boolean;\r\n }\r\n\r\n export function set(s: TopBarState, replacement: State): TopBarState {\r\n return {\r\n impersonationInfo: replacement,\r\n telephonyInfo: s && s.telephonyInfo\r\n // chatInfo: s && s.chatInfo\r\n };\r\n }\r\n }\r\n\r\n export namespace Telephony {\r\n export interface ChangedEvent {\r\n readonly type: 'TelephonyChangedEvent';\r\n readonly phone: Umbrella.TelephonyControl.PhoneModel;\r\n readonly availabilityStatus: Umbrella.TelephonyControl.AvailabilityStatus;\r\n }\r\n\r\n export interface PhoneCallRolesChangedEvent {\r\n readonly type: 'PhoneCallRolesChangedEvent';\r\n readonly phoneCallRoleModel: Umbrella.TelephonyControl.PhoneCallRoleModel;\r\n }\r\n\r\n export interface TelephonyRoleModelRetrievedEvent {\r\n readonly type: 'TelephonyRoleModelRetrievedEvent';\r\n readonly role: RoleModel;\r\n }\r\n\r\n export interface AvailabilityChangedEvent {\r\n readonly type: 'TelephonyAvailabilityChangedEvent';\r\n readonly availabilityStatus: Umbrella.TelephonyControl.AvailabilityStatus;\r\n }\r\n\r\n export interface RingingEvent {\r\n readonly type: 'TelephonyCallRingingEvent';\r\n readonly call: Umbrella.TelephonyControl.PhoneCallModel;\r\n readonly phone: Umbrella.TelephonyControl.PhoneModel;\r\n }\r\n\r\n export interface RingingStoppedEvent {\r\n readonly type: 'TelephonyCallRingingStoppedEvent';\r\n readonly phone: Umbrella.TelephonyControl.PhoneModel;\r\n }\r\n\r\n export interface LoggedOutEvent {\r\n readonly type: 'TelephonyLoggedOutEvent';\r\n readonly userId: System.Guid;\r\n readonly phone: Umbrella.TelephonyControl.PhoneModel;\r\n }\r\n\r\n export interface LineClosedEvent {\r\n readonly type: 'TelephonyLineClosedEvent';\r\n readonly call: Umbrella.TelephonyControl.PhoneCallModel;\r\n readonly phone: Umbrella.TelephonyControl.PhoneModel;\r\n }\r\n\r\n export interface ErrorEvent {\r\n readonly type: 'TelephonyErrorEvent';\r\n readonly phone: Umbrella.TelephonyControl.PhoneModel;\r\n readonly error: any;\r\n }\r\n\r\n export interface StatisticsChangedEvent {\r\n readonly type: 'TelephonyStatisticsChangedEvent';\r\n readonly statistics: {\r\n queueTime: number;\r\n queueLength: number;\r\n queueLengthKpiState: Umbrella.TelephonyControl.Statistics.TelephonyQueueKpiState;\r\n queueTimeRequiresAttentionCap: number;\r\n queueTimeCriticalCap: number;\r\n };\r\n }\r\n\r\n export interface State {\r\n readonly statistics: PhoneStatsModel;\r\n readonly availabilityStatus: Umbrella.TelephonyControl.AvailabilityStatus;\r\n readonly phone: Umbrella.TelephonyControl.PhoneModel;\r\n readonly incomingCall: Umbrella.TelephonyControl.PhoneCallModel;\r\n readonly error: any;\r\n readonly rolesCache: RoleModelDictionary;\r\n }\r\n\r\n export function set(s: TopBarState, replacement: State): TopBarState {\r\n return {\r\n ...s,\r\n telephonyInfo: replacement\r\n };\r\n }\r\n }\r\n\r\n export type TopBarEvent =\r\n | Telephony.ChangedEvent\r\n | Telephony.PhoneCallRolesChangedEvent\r\n | Telephony.TelephonyRoleModelRetrievedEvent\r\n | Telephony.AvailabilityChangedEvent\r\n | Telephony.ErrorEvent\r\n | Telephony.RingingEvent\r\n | Telephony.RingingStoppedEvent\r\n | Telephony.LoggedOutEvent\r\n | Telephony.LineClosedEvent\r\n | Telephony.StatisticsChangedEvent\r\n | Impersonation.EnterEvent\r\n | Impersonation.LeaveEvent\r\n | Impersonation.FullScreenSwitchEvent;\r\n\r\n export interface TopBarState {\r\n readonly telephonyInfo: Telephony.State;\r\n readonly impersonationInfo: Impersonation.State;\r\n }\r\n\r\n function applyPhoneCallRoleChange(\r\n phoneModel: Umbrella.TelephonyControl.PhoneModel,\r\n phoneCallRoleModel: Umbrella.TelephonyControl.PhoneCallRoleModel\r\n ) {\r\n for (const phoneCall of phoneModel.calls) {\r\n if (phoneCall.phoneCallRegistrationId === phoneCallRoleModel.phoneCallRegistrationId) {\r\n phoneCall.candidateRoleIds = phoneCallRoleModel.candidateRoleIds;\r\n phoneCall.subjectRoleId = phoneCallRoleModel.subjectRoleId;\r\n }\r\n }\r\n\r\n return phoneModel;\r\n }\r\n\r\n function addRoleToCache(rolesCache: RoleModelDictionary, roleModel: RoleModel) {\r\n if (!rolesCache) rolesCache = {};\r\n\r\n if (roleModel && roleModel.id) rolesCache[roleModel.id.toString()] = roleModel;\r\n\r\n return rolesCache;\r\n }\r\n\r\n function reduce(e: TopBarEvent): (s: TopBarState) => TopBarState {\r\n switch (e.type) {\r\n case 'TelephonyChangedEvent':\r\n return s =>\r\n Telephony.set(s, {\r\n ...(s && s.telephonyInfo),\r\n error: null,\r\n phone: e.phone,\r\n availabilityStatus: e.availabilityStatus\r\n });\r\n\r\n case 'TelephonyAvailabilityChangedEvent':\r\n return s =>\r\n Telephony.set(s, {\r\n ...(s && s.telephonyInfo),\r\n availabilityStatus: e.availabilityStatus\r\n });\r\n\r\n case 'TelephonyRoleModelRetrievedEvent':\r\n return s =>\r\n Telephony.set(s, {\r\n ...(s && s.telephonyInfo),\r\n rolesCache: addRoleToCache(s.telephonyInfo.rolesCache, e.role)\r\n });\r\n\r\n case 'PhoneCallRolesChangedEvent':\r\n return s =>\r\n Telephony.set(s, {\r\n ...(s && s.telephonyInfo),\r\n error: null,\r\n phone: applyPhoneCallRoleChange(s.telephonyInfo.phone, e.phoneCallRoleModel)\r\n });\r\n\r\n case 'TelephonyCallRingingEvent':\r\n return s =>\r\n Telephony.set(s, {\r\n ...(s && s.telephonyInfo),\r\n error: null,\r\n phone: e.phone,\r\n incomingCall: e.call\r\n });\r\n\r\n case 'TelephonyCallRingingStoppedEvent':\r\n return s =>\r\n Telephony.set(s, {\r\n ...(s && s.telephonyInfo),\r\n error: null,\r\n phone: e.phone,\r\n incomingCall: null\r\n });\r\n\r\n case 'TelephonyLineClosedEvent':\r\n return s =>\r\n Telephony.set(s, {\r\n ...(s && s.telephonyInfo),\r\n error: null,\r\n phone: e.phone,\r\n incomingCall: null\r\n });\r\n\r\n case 'TelephonyLoggedOutEvent':\r\n return s =>\r\n Telephony.set(s, {\r\n ...(s && s.telephonyInfo),\r\n error: null,\r\n phone: e.phone,\r\n incomingCall: null\r\n });\r\n\r\n case 'TelephonyErrorEvent':\r\n return s =>\r\n Telephony.set(s, {\r\n ...(s && s.telephonyInfo),\r\n phone: e.phone,\r\n error: e.error,\r\n incomingCall: null\r\n });\r\n\r\n case 'TelephonyStatisticsChangedEvent':\r\n return s =>\r\n Telephony.set(s, {\r\n ...(s && s.telephonyInfo),\r\n statistics: e.statistics\r\n });\r\n\r\n case 'ImpersonationEnterEvent':\r\n return s =>\r\n Impersonation.set(s, {\r\n enabled: true,\r\n person: e.person,\r\n scenario: e.scenario,\r\n caseFlowId: e.caseFlowId,\r\n fullscreenMode: false\r\n });\r\n\r\n case 'ImpersonationLeaveEvent':\r\n return s =>\r\n Impersonation.set(s, {\r\n enabled: false,\r\n person: null,\r\n scenario: null,\r\n caseFlowId: null,\r\n fullscreenMode: false\r\n });\r\n\r\n case 'ImpersonationFullScreenSwitchEvent':\r\n return s =>\r\n Impersonation.set(s, {\r\n ...(s && s.impersonationInfo),\r\n fullscreenMode: e.enabled\r\n });\r\n }\r\n }\r\n\r\n export type TopBarStore = ObservableStore.EventStore;\r\n\r\n export const topBarStore: TopBarStore = rootStore.map(\r\n lens('TopBar'),\r\n reduce\r\n );\r\n\r\n angular.module('Umbrella').value('TopBarStore', topBarStore);\r\n}\r\n","/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n export interface TopComponentState {\r\n impersonationInfo: Impersonation.State;\r\n }\r\n\r\n @Component('Umbrella', {\r\n selector: 'top',\r\n templateUrl: '/Top/Top.html',\r\n bindings: {\r\n state: '<'\r\n }\r\n })\r\n class TopComponent {\r\n public state: TopComponentState;\r\n public sessionInfo: SessionState;\r\n private sessionInfoSub: Rx.Disposable;\r\n\r\n $onInit() {\r\n this.sessionInfoSub = session$.subscribe(x => (this.sessionInfo = x));\r\n }\r\n\r\n $onDestroy() {\r\n if (this.sessionInfoSub) {\r\n this.sessionInfoSub.dispose();\r\n this.sessionInfoSub = null;\r\n }\r\n }\r\n\r\n public isInFullScreenMode(): boolean {\r\n return this.state && this.state.impersonationInfo && this.state.impersonationInfo.fullscreenMode;\r\n }\r\n\r\n public isInTabletMode(): boolean {\r\n return window.navigator && window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1;\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Telephony {\r\n @Pipe('Telephony', 'isAuthLoginCapable')\r\n class IsAuthLoginCapableFilter {\r\n public transform(\r\n capability: Umbrella.Telephony.PhoneCapabilities | string\r\n ): boolean {\r\n if (!capability) return false;\r\n\r\n switch (capability.toString().toLowerCase()) {\r\n case '4':\r\n case 'authlogin':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TopBar {\r\n import RegisterStatus = ChatConversationHandling.RegisterStatus;\r\n import ChatStore = Umbrella.ChatConversationHandling.ChatStore;\r\n import ChatState = Umbrella.ChatConversationHandling.ChatState;\r\n import ChatResource = Umbrella.ChatConversationHandling.ChatResource;\r\n import ChatService = Umbrella.ChatConversationHandling.ChatService;\r\n import OperatorModel = Umbrella.Chat.OperatorModel;\r\n import ChatOverviewItemModel = Umbrella.ChatConversationHandling.ChatOverviewItemModel;\r\n import ConversationRequestModel = Umbrella.Chat.ConversationRequestModel;\r\n import RestoreChannelService = Umbrella.Modules.RestoreChannelService;\r\n import ChannelType = Modules.ChannelType;\r\n\r\n @Component('Umbrella', {\r\n selector: 'chat-availability-controls',\r\n templateUrl: '/Top/ChatAvailabilityControlsComponent/ChatAvailabilityControls.html',\r\n bindings: {\r\n chatInfo: '<'\r\n }\r\n })\r\n @Inject('ChatStore', 'ChatService', 'ChatResource', 'RestoreChannelService')\r\n class ChatAvailabilityControlsComponent {\r\n public collapsed = false;\r\n public chatInfo: ChatState;\r\n public chatAvailability;\r\n public chatIconClass: string;\r\n public chatIconTooltip: string;\r\n public nrOfChatOperators = 0;\r\n public nrOfPendingRequests = 0;\r\n private operatorObserver: Rx.IDisposable;\r\n private requestObserver: Rx.IDisposable;\r\n private loggedIn: boolean;\r\n private loggedInPreset = false;\r\n\r\n constructor(\r\n private chatStore: ChatStore,\r\n private chatService: ChatService,\r\n private chatResource: ChatResource,\r\n private restoreChannelService: RestoreChannelService\r\n ) { }\r\n\r\n public $onInit() {\r\n this.observeActiveOperators();\r\n this.observePendingRequests();\r\n\r\n this.chatStore.state$\r\n .filter(x => !!x)\r\n .distinctUntilChanged()\r\n .subscribe((s: ChatState) => {\r\n this.chatAvailability = {\r\n isAvailable: s && s.registration && s.registration.status === RegisterStatus.Registered,\r\n isEnabled: s && s.enabled\r\n };\r\n this.loggedIn = s.isLoggedIn;\r\n this.setIconColorAndLabel(\r\n (s && s.conversations) || [],\r\n this.chatAvailability.isEnabled,\r\n this.chatAvailability.isAvailable\r\n );\r\n });\r\n }\r\n\r\n public toggleAvailability() {\r\n if (this.loggedIn) {\r\n this.chatService.logoutOperator();\r\n this.loggedIn = false;\r\n } else {\r\n this.chatService.loginOperator();\r\n this.loggedIn = true;\r\n }\r\n }\r\n\r\n public toggleAvailabilityPreset() {\r\n this.loggedInPreset = !this.loggedInPreset;\r\n }\r\n\r\n public getCheckedPreset(): boolean {\r\n return this.loggedInPreset;\r\n }\r\n\r\n public getChecked(): boolean {\r\n return this.loggedIn;\r\n }\r\n\r\n public $onDestroy() {\r\n if (this.operatorObserver) this.operatorObserver.dispose();\r\n if (this.requestObserver) this.requestObserver.dispose();\r\n }\r\n\r\n public openMenu($mdMenu): void {\r\n if (\r\n (this.chatAvailability && !this.chatAvailability.isEnabled) ||\r\n !window.user.permissions.viewChatConversation\r\n ) {\r\n return;\r\n }\r\n\r\n $mdMenu.open();\r\n this.collapsed = true;\r\n }\r\n\r\n public hide(): void {\r\n this.collapsed = false;\r\n }\r\n\r\n public toggleChat(value: boolean) {\r\n if (value) {\r\n this.chatService.registerOperator(this.loggedInPreset);\r\n this.restoreChannelService.saveChannel(ChannelType.Chat)\r\n } else {\r\n this.chatService.deregisterOperator();\r\n this.restoreChannelService.removeChannelInfo();\r\n }\r\n }\r\n\r\n private observeActiveOperators(): void {\r\n this.operatorObserver = Rx.Observable.interval(5000)\r\n .filter(() => this.collapsed)\r\n .flatMapLatest(() =>\r\n Rx.Observable.fromPromise(this.chatResource.getAllOperators().$promise).take(1)\r\n )\r\n .subscribe((operators: OperatorModel[]) => {\r\n this.nrOfChatOperators = (operators && operators.filter(x => x.isLoggedIn).length) || 0;\r\n });\r\n }\r\n\r\n private observePendingRequests(): void {\r\n this.requestObserver = Rx.Observable.interval(5000)\r\n .filter(() => this.collapsed)\r\n .flatMapLatest(() =>\r\n Rx.Observable.fromPromise((\r\n this.chatResource.getPendingConversations().$promise\r\n )).take(1)\r\n )\r\n .subscribe((requests: ConversationRequestModel[]) => {\r\n this.nrOfPendingRequests = (requests && requests.length) || 0;\r\n });\r\n }\r\n\r\n private setIconColorAndLabel(\r\n conversations: ChatOverviewItemModel[],\r\n isEnabled: boolean,\r\n isAvailable: boolean\r\n ): void {\r\n const hasPickedUpConversations = conversations && !!conversations.find(x => !!x.id && !!x.operator);\r\n\r\n if (!isEnabled) {\r\n this.chatIconClass = 'grijs';\r\n this.chatIconTooltip = 'Chat niet beschikbaar';\r\n return;\r\n }\r\n\r\n if (!window.user.permissions.viewChatConversation) {\r\n this.chatIconClass = 'grijs';\r\n this.chatIconTooltip = 'Geen permissies om chat te gebruiken';\r\n return;\r\n }\r\n\r\n if (hasPickedUpConversations) {\r\n this.chatIconClass = 'white';\r\n this.chatIconTooltip = 'Chat is actief';\r\n if (isAvailable) {\r\n this.chatIconClass = this.loggedIn ? 'white' : 'oranje';\r\n this.chatIconTooltip = 'Afmelden voor chat';\r\n return;\r\n }\r\n return;\r\n }\r\n\r\n if (isAvailable) {\r\n this.chatIconClass = this.loggedIn ? 'groen' : 'oranje';\r\n this.chatIconTooltip = 'Afmelden voor chat';\r\n return;\r\n }\r\n\r\n this.chatIconClass = 'blauw';\r\n this.chatIconTooltip = 'Aanmelden voor chat';\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.ChatConversationHandling {\r\n @Component('Umbrella', {\r\n selector: 'chat-controls',\r\n templateUrl: '/Top/ChatControlsComponent/ChatControls.html',\r\n bindings: {\r\n chatInfo: '<'\r\n }\r\n })\r\n @Inject('ChatStore', 'ChatService')\r\n class ChatControlsComponent {\r\n public chatInfo: ChatState;\r\n public chatAvailability = {};\r\n public activeConversation: ChatOverviewItemModel;\r\n public totalAcwTime: number;\r\n private clearAcwInterval: any;\r\n\r\n constructor(private chatStore: ChatStore, private chatService: ChatService) {}\r\n\r\n public $onInit() {\r\n this.chatStore.state$.subscribe(s => {\r\n this.chatAvailability = {\r\n isAvailable: s && s.registration && s.registration.status === RegisterStatus.Registered,\r\n isEnabled: s && s.enabled\r\n };\r\n\r\n this.activeConversation =\r\n s &&\r\n s.conversations &&\r\n ((s.activeId && s.conversations.find(x => x.id === s.activeId)) ||\r\n (s.conversations.length === 1 && s.conversations[0]));\r\n const isInAcwState = this.activeConversation && isAcwConversation(this.activeConversation.status);\r\n if (isInAcwState) {\r\n this.calculateAcwTime(this.activeConversation.afterCallWorkStartedOn);\r\n }\r\n });\r\n }\r\n\r\n public endAfterCallWork(id: Guid): void {\r\n this.chatService.endAfterCallWork(id);\r\n }\r\n\r\n private calculateAcwTime(afterCallWorkStartedOn): void {\r\n clearInterval(this.clearAcwInterval);\r\n\r\n if (!afterCallWorkStartedOn) {\r\n this.totalAcwTime = 0;\r\n return;\r\n }\r\n\r\n this.clearAcwInterval = setInterval(() => {\r\n this.totalAcwTime = (new Date().getTime() - new Date(afterCallWorkStartedOn).getTime()) / 1000;\r\n }, 500);\r\n }\r\n }\r\n}\r\n","namespace Umbrella {\r\n import ChatState = Umbrella.ChatConversationHandling.ChatState;\r\n import isAcwConversation = ChatConversationHandling.isAcwConversation;\r\n import ChatStore = Umbrella.ChatConversationHandling.ChatStore;\r\n import RegisterStatus = Umbrella.ChatConversationHandling.RegisterStatus;\r\n import RestoreChannelService = Modules.RestoreChannelService;\r\n\r\n @Component('Umbrella', {\r\n selector: 'conversation-bar',\r\n templateUrl: '/Top/ConversationBarComponent/ConversationBar.html'\r\n })\r\n @Inject('$filter', 'TopBarStore', 'ChatStore', 'RestoreChannelService')\r\n class ConversationBarComponent {\r\n public impersonationInfo: Impersonation.State;\r\n public telephonyInfo: Telephony.State;\r\n public chatState: ChatState;\r\n public acwState: boolean;\r\n public stateClass = '';\r\n\r\n private onHoldCallsFilter: (\r\n input: Umbrella.TelephonyControl.PhoneCallModel[]\r\n ) => Umbrella.TelephonyControl.PhoneCallModel[];\r\n private ongoingCallsFilter: (\r\n input: Umbrella.TelephonyControl.PhoneCallModel[]\r\n ) => Umbrella.TelephonyControl.PhoneCallModel[];\r\n\r\n private phoneObserver: Rx.IDisposable;\r\n private impersonationObserver: Rx.IDisposable;\r\n private chatObserver: Rx.IDisposable;\r\n private mailObserver: Rx.IDisposable;\r\n\r\n constructor(\r\n $filter: ng.IFilterService,\r\n private topBarStore: TopBarStore,\r\n private chatStore: ChatStore,\r\n private restoreChannelService: RestoreChannelService\r\n ) {\r\n this.onHoldCallsFilter = $filter('onHoldCalls');\r\n this.ongoingCallsFilter = $filter('ongoingCalls');\r\n }\r\n\r\n public $onInit() {\r\n const notNullOrUndefined = x => x !== null && x !== undefined;\r\n\r\n this.impersonationObserver = this.topBarStore.state$\r\n .map(x => x && x.impersonationInfo)\r\n .filter(notNullOrUndefined)\r\n .distinctUntilChanged()\r\n .subscribe(x => {\r\n this.impersonationInfo = x;\r\n this.applyColoringAccordingToImpersonation(this.impersonationInfo);\r\n });\r\n\r\n this.phoneObserver = this.topBarStore.state$\r\n .map(x => x && x.telephonyInfo)\r\n .filter(notNullOrUndefined)\r\n .distinctUntilChanged()\r\n .subscribe(x => {\r\n this.telephonyInfo = x;\r\n\r\n const isTelephonyRegistered = this.telephonyInfo && this.telephonyInfo.phone;\r\n const isRegisteredForChat =\r\n this.chatState &&\r\n this.chatState.registration &&\r\n this.chatState.registration.status === RegisterStatus.Registered;\r\n\r\n if (!this.isImpersonationModeEnabled() && !isRegisteredForChat && isTelephonyRegistered)\r\n this.applyColoringAccordingToTelephony(this.telephonyInfo);\r\n });\r\n\r\n this.chatObserver = this.chatStore.state$\r\n .map(x => x)\r\n .filter(notNullOrUndefined)\r\n .distinctUntilChanged()\r\n .subscribe(x => {\r\n this.chatState = x;\r\n\r\n const isChatRegistered =\r\n this.chatState &&\r\n this.chatState.registration &&\r\n this.chatState.registration.status === RegisterStatus.Registered;\r\n\r\n if (\r\n this.isImpersonationModeEnabled() &&\r\n isChatRegistered &&\r\n this.chatState.conversations &&\r\n !this.chatState.conversations.length\r\n ) {\r\n this.applyColoringAccordingToImpersonation(this.impersonationInfo);\r\n return;\r\n }\r\n\r\n if (isChatRegistered) {\r\n this.applyColoringAccordingToChat(this.chatState);\r\n return;\r\n }\r\n\r\n const notLoggedInOnTelephony =\r\n this.telephonyInfo &&\r\n this.telephonyInfo.availabilityStatus ===\r\n Umbrella.TelephonyControl.AvailabilityStatus.NotLoggedIn;\r\n if (notLoggedInOnTelephony && !this.isImpersonationModeEnabled()) this.stateClass = '';\r\n });\r\n\r\n this.restoreChannelService.restoreSavedChannel();\r\n }\r\n\r\n public $onDestroy() {\r\n if (this.impersonationObserver) {\r\n this.impersonationObserver.dispose();\r\n this.impersonationObserver = null;\r\n }\r\n\r\n if (this.phoneObserver) {\r\n this.phoneObserver.dispose();\r\n this.phoneObserver = null;\r\n }\r\n\r\n if (this.chatObserver) {\r\n this.chatObserver.dispose();\r\n this.chatObserver = null;\r\n }\r\n\r\n if (this.mailObserver) {\r\n this.mailObserver.dispose();\r\n this.mailObserver = null;\r\n }\r\n }\r\n\r\n private applyColoringAccordingToImpersonation(impersonationInfo: Impersonation.State) {\r\n if (impersonationInfo.enabled || (this.impersonationInfo && this.impersonationInfo.enabled)) {\r\n document.getElementsByClassName('approot')[0].classList.add('impression-container');\r\n this.stateClass = 'purple';\r\n return;\r\n }\r\n\r\n document.getElementsByClassName('approot')[0].classList.remove('impression-container');\r\n\r\n if (this.telephonyInfo && this.telephonyInfo.phone && this.telephonyInfo.availabilityStatus !== 2) {\r\n this.applyColoringAccordingToTelephony(this.telephonyInfo);\r\n return;\r\n }\r\n\r\n if (this.chatState && this.chatState.registration && this.chatState.registration.status !== 0) {\r\n this.applyColoringAccordingToChat(this.chatState);\r\n return;\r\n }\r\n\r\n this.stateClass = '';\r\n }\r\n\r\n private applyColoringAccordingToChat(chatState: ChatState) {\r\n const activeConversation =\r\n chatState &&\r\n chatState.conversations &&\r\n ((chatState.activeId && chatState.conversations.find(x => x.id === chatState.activeId)) ||\r\n (chatState.conversations.length === 1 && chatState.conversations[0]));\r\n const isConversationInACWState = activeConversation && isAcwConversation(activeConversation.status);\r\n\r\n this.acwState = isConversationInACWState;\r\n\r\n if (isConversationInACWState) {\r\n this.stateClass = 'red';\r\n return;\r\n }\r\n\r\n const hasPickedupConversations =\r\n chatState &&\r\n chatState.conversations &&\r\n chatState.conversations.filter(x => !!x.id && x.operator).length;\r\n if (hasPickedupConversations) {\r\n this.stateClass = 'green';\r\n return;\r\n }\r\n\r\n if (this.isImpersonationModeEnabled()) {\r\n this.applyColoringAccordingToImpersonation(this.impersonationInfo);\r\n return;\r\n }\r\n\r\n this.stateClass = '';\r\n }\r\n\r\n private applyColoringAccordingToTelephony(telephonyInfo: Telephony.State) {\r\n const phone = telephonyInfo.phone;\r\n if (!phone) return;\r\n\r\n if (phone.status && (phone.status.toString() === 'ACW' || phone.status === 5)) {\r\n this.stateClass = 'red';\r\n return;\r\n }\r\n\r\n if (!phone.calls) return;\r\n\r\n const ongoingCalls = this.ongoingCallsFilter(phone.calls);\r\n const onholdCalls = this.onHoldCallsFilter(phone.calls);\r\n if (ongoingCalls && ongoingCalls.length) {\r\n this.stateClass = 'green';\r\n\r\n if (onholdCalls && onholdCalls.length === ongoingCalls.length) this.stateClass = 'orange';\r\n\r\n return;\r\n }\r\n\r\n this.stateClass = '';\r\n }\r\n\r\n private isImpersonationModeEnabled() {\r\n return this.impersonationInfo && !!this.impersonationInfo.enabled;\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TopBar {\r\n import PhoneService = Umbrella.Modules.Telephony.PhoneService;\r\n\r\n @Component('Umbrella', {\r\n selector: 'dial-pad',\r\n templateUrl: '/Top/DialPadComponent/DialPad.html',\r\n bindings: {\r\n DialPad: '<'\r\n }\r\n })\r\n @Inject('PhoneService')\r\n class DialPadComponent {\r\n public collapsed = false;\r\n public phoneNumber: string;\r\n\r\n constructor(private phoneService: PhoneService) {}\r\n\r\n public focus() {\r\n $('input.phone-number').focus();\r\n }\r\n\r\n public enterNumber(nummer) {\r\n if (this.phoneNumber === undefined) this.phoneNumber = '';\r\n\r\n this.phoneNumber = this.phoneNumber + '' + nummer;\r\n this.focus();\r\n }\r\n\r\n public call() {\r\n this.phoneService.callNr(this.phoneNumber);\r\n this.phoneNumber = '';\r\n }\r\n\r\n public resetNumber() {\r\n this.phoneNumber = '';\r\n }\r\n\r\n public hangup() {\r\n this.phoneNumber = '';\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TopBar {\r\n import ImpersonationService = CustomerService.CustomerCard.ImpersonationService;\r\n import ActivityRegistrationService = CustomerService.CustomerCard.Activities.Registration.ActivityRegistrationService;\r\n import TaskTypeModel = Umbrella.Modules.Tasks.TaskTypeModel;\r\n\r\n @Component('Umbrella', {\r\n selector: 'impersonation-controls',\r\n templateUrl: '/Top/ImpersonationControlsComponent/ImpersonationControls.html',\r\n bindings: {\r\n impersonationInfo: '<'\r\n }\r\n })\r\n @Inject('$mdDialog', 'ImpersonationService', 'ActivityRegistrationService')\r\n class AvailabilityControlsComponent {\r\n public impersonationInfo: Impersonation.State;\r\n public waiting: boolean;\r\n\r\n constructor(\r\n private $mdDialog,\r\n private impersonationService: ImpersonationService,\r\n private activityRegistrationService: ActivityRegistrationService\r\n ) {}\r\n\r\n public leaveImpersonationMode(): void {\r\n this.waiting = true;\r\n this.impersonationService.leaveAndReturn();\r\n\r\n var portalUrl = this.impersonationService.getPortalUrl();\r\n if(portalUrl)\r\n $('#selfServiceIFrame').attr('src', portalUrl + '/account/logout');\r\n else\r\n $('#selfServiceIFrame').attr('src', 'about:blank');\r\n }\r\n\r\n public launchTaskRegistrationPopup(): void {\r\n const personId =\r\n this.impersonationInfo && this.impersonationInfo.person && this.impersonationInfo.person.id;\r\n const tagId =\r\n this.impersonationInfo &&\r\n this.impersonationInfo.scenario &&\r\n this.impersonationInfo.scenario.thesaurusTagId;\r\n if (!personId || !tagId) return;\r\n\r\n this.$mdDialog.show({\r\n template: ``,\r\n targetEvent: null,\r\n clickOutsideToClose: false\r\n });\r\n }\r\n\r\n public switchFullScreen(): void {\r\n const isFullScreen = this.impersonationService.isFullScreen();\r\n\r\n if (isFullScreen) this.impersonationService.switchOffFullScreen();\r\n else this.impersonationService.switchOnFullScreen();\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TopBar {\r\n import PhoneService = Umbrella.Modules.Telephony.PhoneService;\r\n import RoleModel = Umbrella.Modules.RoleModel;\r\n import CustomerIndicatorModel = Umbrella.CustomerService.CustomerCard.Sidebar.CustomerIndicatorModel;\r\n import ContractModel = Modules.Housing.ContractModel;\r\n\r\n @Component('Umbrella', {\r\n selector: 'incoming-call',\r\n templateUrl: '/Top/IncomingCallComponent/IncomingCall.html',\r\n bindings: {\r\n incomingCall: '<',\r\n subjectRole: '<'\r\n }\r\n })\r\n @Inject('PhoneService', 'PersonResource', 'AccountResource', 'ContractResource', 'CustomerResource', '$q')\r\n class IncomingCallComponent {\r\n public collapsed = false;\r\n public incomingCall: Umbrella.TelephonyControl.PhoneCallModel;\r\n public subjectRole: RoleModel;\r\n public personalIndicators: CustomerIndicatorModel;\r\n public contractIndicators: { Contract: ContractModel }[];\r\n\r\n constructor(\r\n private phoneService: PhoneService,\r\n private personResource: PersonResource,\r\n private accountResource: Modules.Accounts.AccountResource,\r\n private contractResource: Umbrella.Modules.Housing.IContractResource,\r\n private customerResource: Modules.Customers.ICustomerResource,\r\n private $q: ng.IQService\r\n ) {}\r\n\r\n public $onChanges() {\r\n if (this.subjectRole && this.subjectRole.personId && this.subjectRole.id) {\r\n this.setIndicator(this.subjectRole.personId, this.subjectRole.id);\r\n }\r\n }\r\n\r\n public pickup() {\r\n if (this.incomingCall) this.phoneService.pickup(this.incomingCall);\r\n else this.collapsed = false;\r\n }\r\n\r\n private setIndicator(personId: System.Guid, roleId: System.Guid) {\r\n this.personalIndicators = null;\r\n this.contractIndicators = null;\r\n const getPersonPromise = this.personResource.getById({ id: personId }).$promise;\r\n const getContractsPromise = this.contractResource.getPagedByRoleId({\r\n id: roleId,\r\n page: 0,\r\n pageSize: 5\r\n }).$promise;\r\n const getAccountPromise = this.accountResource.getByPersonId({\r\n id: personId\r\n }).$promise;\r\n const getCustomerPromise = this.customerResource.getByPersonId({\r\n id: personId\r\n }).$promise;\r\n const outstandingBalancePromise = this.contractResource.getOutstandingBalanceFor({ id: roleId }).$promise;\r\n\r\n this.$q\r\n .all([\r\n getPersonPromise,\r\n getContractsPromise,\r\n getAccountPromise,\r\n getCustomerPromise,\r\n outstandingBalancePromise\r\n ])\r\n .then(data => {\r\n const isPropertiesProperty = key => key.toLowerCase() === 'properties';\r\n\r\n const person = {};\r\n const customer = {};\r\n Object.keys(data['0'] || {})\r\n .filter(key => !isPropertiesProperty(key))\r\n .map(x => (person[x] = data['0'][x]));\r\n Object.keys(data['3'] || {})\r\n .filter(key => !isPropertiesProperty(key))\r\n .map(x => (customer[x] = data['3'][x]));\r\n\r\n const personProperties = data['0'] && data['0'].properties ? data['0'].properties : {};\r\n const customerProperties = data['3'] && data['3'].properties ? data['3'].properties : {};\r\n const properties = Object.assign(customerProperties, personProperties);\r\n\r\n const account: Accounts.AccountModel = data['2'];\r\n\r\n const contracts = data['1'];\r\n const contract = contracts.items.length && contracts.items[0];\r\n\r\n const unit = contract && contract.unit;\r\n\r\n this.contractIndicators = contracts.items.map(contract => ({\r\n Contract: { ...contract }\r\n }));\r\n this.personalIndicators = {\r\n Account: {\r\n ...account\r\n },\r\n Person: {\r\n ...person,\r\n ...customer,\r\n ...{ properties },\r\n ...data['4']\r\n },\r\n Unit: {\r\n ...unit\r\n }\r\n };\r\n });\r\n }\r\n }\r\n}\r\n","namespace Umbrella {\r\n @Pipe('Umbrella', 'roleName')\r\n class RoleNameFilter {\r\n public transform(input: string) {\r\n if (!input || !input.length) return '';\r\n\r\n switch (input.toLowerCase()) {\r\n case 'customer':\r\n return 'huurder';\r\n case 'colleague':\r\n return 'collega';\r\n case 'vendor':\r\n return 'leverancier';\r\n case 'prospect':\r\n return 'woningzoekende';\r\n default:\r\n return '';\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella {\r\n @Component('Umbrella', {\r\n selector: 'login-controls',\r\n templateUrl: '/Top/LoginControlsComponent/LoginControls.html',\r\n bindings: {\r\n chatInfo: '<'\r\n }\r\n })\r\n class LoginControlsComponent {}\r\n}\r\n","/// \r\n\r\nnamespace Umbrella.TopBar {\r\n import PhoneService = Umbrella.Modules.Telephony.PhoneService;\r\n import PhoneQueueStatus = Umbrella.TelephonyControl.PhoneQueueStatus;\r\n import PhoneStatus = Umbrella.TelephonyControl.PhoneStatus;\r\n import RichPresenceStateOptionModel = Umbrella.TelephonyControl.RichPresenceStateOptionModel;\r\n\r\n @Component('Umbrella', {\r\n selector: 'phone-availability-controls',\r\n templateUrl: '/Top/PhoneAvailabilityControlsComponent/PhoneAvailabilityControls.html'\r\n })\r\n @Inject('PhoneService', 'TopBarStore')\r\n class PhoneAvailabilityControlsComponent {\r\n public collapsed = false;\r\n public capabilities: Umbrella.TelephonyControl.PhoneCapabilities;\r\n public phonenumbers: Umbrella.Modules.Telephony.PhoneNumberModel[];\r\n public selectPhoneConfig: any;\r\n public telephonyInfo: Telephony.State;\r\n public telephonyAvailable = false;\r\n public inTelephonyQueue: boolean;\r\n public richPresenceState: string;\r\n public tooltipText: string;\r\n public currentRichPresenceState: RichPresenceStateOptionModel;\r\n private phoneSubscription: Rx.IDisposable;\r\n private menu: any;\r\n\r\n constructor(private phoneService: PhoneService, private topBarStore: TopBarStore) {\r\n this.selectPhoneConfig = {\r\n width: 'off',\r\n formatNoMatches: (term: string) => 'Geen resultaten gevonden.',\r\n dropdownCssClass: 'select2-drop-telephony',\r\n formatResult: state => {\r\n const text = state.text;\r\n if (!state.id) return \"\" + text + '';\r\n return \"\" + text + '';\r\n }\r\n };\r\n }\r\n\r\n public $onInit() {\r\n const notNullOrUndefined = x => x !== null && x !== undefined;\r\n this.phoneSubscription = this.topBarStore.state$\r\n .map(s => s && s.telephonyInfo)\r\n .filter(notNullOrUndefined)\r\n .distinctUntilChanged()\r\n .subscribe(phoneInfo => {\r\n this.telephonyInfo = phoneInfo;\r\n this.tooltipText = this.getTooltip(this.telephonyInfo);\r\n\r\n const updatedPhone = this.telephonyInfo.phone;\r\n if (!updatedPhone) return;\r\n\r\n this.capabilities = updatedPhone.phoneCapabilities;\r\n this.phonenumbers = updatedPhone.phoneNumberOptions;\r\n this.updateRichPresenceState(updatedPhone.phoneRichPresenceState);\r\n\r\n this.telephonyAvailable =\r\n updatedPhone.status &&\r\n updatedPhone.status.toString() !== 'Offline' &&\r\n updatedPhone.status !== 3 &&\r\n updatedPhone.status.toString() !== 'Unavailable' &&\r\n updatedPhone.status !== 1 &&\r\n updatedPhone.status.toString() !== 'TryHide' &&\r\n updatedPhone.status !== 101;\r\n\r\n this.inTelephonyQueue =\r\n updatedPhone.queueStatus &&\r\n (updatedPhone.queueStatus.toString() === 'Available' || updatedPhone.queueStatus === 2);\r\n\r\n if (this.menu && this.isAcwOrBusyState(updatedPhone)) this.menu.close();\r\n });\r\n }\r\n\r\n public $onDestroy() {\r\n if (this.phoneSubscription) {\r\n this.phoneSubscription.dispose();\r\n this.phoneSubscription = null;\r\n }\r\n }\r\n\r\n public selectAvailabilityStatus(status: RichPresenceStateOptionModel) {\r\n this.setCurrentRichPresenceState(status);\r\n this.changePhoneRichPresenceState();\r\n }\r\n\r\n public isAcwOrBusyState(updatedPhone) {\r\n switch (updatedPhone.status.toString().toLowerCase()) {\r\n case '4':\r\n case '5':\r\n case 'busy':\r\n case 'acw':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n public statusChanged() {\r\n this.phoneService.statusChanged(this.telephonyAvailable ? PhoneStatus.Available : PhoneStatus.Unavailable);\r\n }\r\n\r\n public queueStatusChanged() {\r\n this.phoneService.queueStatusChanged(\r\n this.inTelephonyQueue ? PhoneQueueStatus.Available : PhoneQueueStatus.Unavailable\r\n );\r\n }\r\n\r\n public login() {\r\n this.phoneService.login(this.telephonyInfo.phone.number, this.telephonyInfo.phone.password);\r\n this.telephonyInfo.phone.password = '';\r\n this.collapsed = false;\r\n }\r\n\r\n public changePhoneRichPresenceState() {\r\n if (\r\n !this.telephonyInfo.phone.phoneRichPresenceStateOptions ||\r\n !this.telephonyInfo.phone.phoneRichPresenceStateOptions.length ||\r\n !this.currentRichPresenceState\r\n )\r\n return;\r\n\r\n this.phoneService.setPhoneRichPresenceState(this.currentRichPresenceState.value);\r\n }\r\n\r\n public logout() {\r\n this.phoneService.logout();\r\n this.collapsed = false;\r\n }\r\n\r\n public show(): void {\r\n if (\r\n !this.telephonyInfo ||\r\n !this.telephonyInfo.phone ||\r\n !this.telephonyInfo.phone.status ||\r\n !this.hasPermissionToUsePhone()\r\n )\r\n return;\r\n\r\n this.collapsed = true;\r\n }\r\n\r\n public hide(): void {\r\n this.collapsed = false;\r\n }\r\n\r\n public getStateClass(status: Umbrella.TelephonyControl.PhoneStatus) {\r\n if (!status || !this.hasPermissionToUsePhone()) {\r\n return 'grijs';\r\n }\r\n\r\n switch (status) {\r\n case PhoneStatus.Unavailable:\r\n case 1:\r\n case 'Unavailable':\r\n return 'away';\r\n case 2:\r\n case PhoneStatus.Available:\r\n case 'Available':\r\n case 4:\r\n case PhoneStatus.Busy:\r\n case 'Busy':\r\n return 'groen';\r\n default:\r\n return 'blauw';\r\n }\r\n }\r\n\r\n public openMenu($mdMenu): void {\r\n if (!$mdMenu) return;\r\n\r\n this.menu = $mdMenu;\r\n $mdMenu.open();\r\n }\r\n\r\n private updateRichPresenceState(statusValue: string): void {\r\n if (!statusValue) return;\r\n\r\n const currentStatus = this.getRichPresenceStatusByValue(statusValue);\r\n this.setCurrentRichPresenceState(currentStatus);\r\n }\r\n\r\n private setCurrentRichPresenceState(status: RichPresenceStateOptionModel): void {\r\n if (!status) return;\r\n\r\n this.currentRichPresenceState = {\r\n text: status.text,\r\n value: status.value\r\n };\r\n }\r\n\r\n private hasPermissionToUsePhone() {\r\n return window.user && window.user.permissions.usePhone;\r\n }\r\n\r\n private getTooltip(telephonyInfo: Telephony.State): string {\r\n if (!telephonyInfo) {\r\n return 'Telefonie niet beschikbaar';\r\n } else if (!this.hasPermissionToUsePhone()) {\r\n return 'Telefonie niet beschikbaar: Onvoldoende rechten';\r\n }\r\n\r\n const status = telephonyInfo.availabilityStatus;\r\n\r\n switch (status) {\r\n case TelephonyControl.AvailabilityStatus.Offline:\r\n case 0:\r\n case 'Offline':\r\n return 'Telefonie niet beschikbaar: Verbinding off-line';\r\n case TelephonyControl.AvailabilityStatus.InvalidUser:\r\n case 1:\r\n case 'InvalidUser':\r\n return 'Telefonie niet beschikbaar: Ongeldige gebruiker';\r\n case TelephonyControl.AvailabilityStatus.NotLoggedIn:\r\n case 2:\r\n case 'NotLoggedIn':\r\n return 'Aanmelden voor telefonie';\r\n case TelephonyControl.AvailabilityStatus.Online:\r\n case 3:\r\n case 'Online':\r\n return 'Toestelstatus wijzigen';\r\n default:\r\n return 'Telefonie niet beschikbaar';\r\n }\r\n }\r\n\r\n private getRichPresenceStatusByValue(richPresenceStateValue: string): RichPresenceStateOptionModel {\r\n if (\r\n !this.telephonyInfo.phone ||\r\n !this.telephonyInfo.phone.phoneRichPresenceStateOptions ||\r\n !this.telephonyInfo.phone.phoneRichPresenceStateOptions.length\r\n )\r\n return null;\r\n\r\n const status = this.telephonyInfo.phone.phoneRichPresenceStateOptions.filter(\r\n x => x.value === richPresenceStateValue\r\n )[0];\r\n return status;\r\n }\r\n }\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n import Guid = System.Guid;\r\n import PhoneService = Umbrella.Modules.Telephony.PhoneService;\r\n import PhoneType = Umbrella.Modules.Telephony.PhoneType;\r\n import PhoneCallModel = Umbrella.TelephonyControl.PhoneCallModel;\r\n import SessionColleagueModel = Modules.Colleagues.SessionColleagueModel;\r\n import RoleModelDictionary = Umbrella.Modules.Telephony.RoleModelDictionary;\r\n import RoleModel = Umbrella.Modules.RoleModel;\r\n import CustomerCardPersonInfoService = Umbrella.CustomerService.CustomerCard.CustomerCardPersonInfoService;\r\n\r\n export enum ConversationState {\r\n Idle = 0,\r\n Calling = 1,\r\n OnHold = 2,\r\n Acw = 3\r\n }\r\n\r\n @Component('Umbrella', {\r\n selector: 'phone-controls',\r\n templateUrl: '/Top/PhoneControlsComponent/PhoneControls.html',\r\n bindings: {\r\n telephonyInfo: '<'\r\n }\r\n })\r\n @Inject('$state', '$interval', '$filter', 'PhoneService', 'CustomerCardPersonInfoService')\r\n class PhoneControlsComponent {\r\n public telephonyInfo: Telephony.State;\r\n public activeCall: Umbrella.TelephonyControl.PhoneCallModel;\r\n public user: SessionColleagueModel;\r\n\r\n public conversationState: string;\r\n public person: PersonModel;\r\n\r\n private phoneCallTimer: ng.IPromise = null;\r\n private rolesCache: RoleModelDictionary = {};\r\n private start = Date.now();\r\n private onHoldCallsFilter: (input: PhoneCallModel[]) => PhoneCallModel[];\r\n private ongoingCallsFilter: (input: PhoneCallModel[]) => PhoneCallModel[];\r\n private activeCallFilter: (input: PhoneCallModel[]) => PhoneCallModel;\r\n private personObserver: Rx.IDisposable;\r\n private writeableFieldObserver: Rx.IDisposable;\r\n private inTelephonyQueue: boolean;\r\n private releasing: boolean;\r\n private writeableFields: WritablePersonDataFieldsModel;\r\n\r\n constructor(\r\n private $state: ng.ui.IStateService,\r\n private $interval: ng.IIntervalService,\r\n private $filter: ng.IFilterService,\r\n private phoneService: PhoneService,\r\n private personInfoService: CustomerCardPersonInfoService\r\n ) {\r\n this.user = window.user;\r\n this.schedulePhoneCallTimer();\r\n this.onHoldCallsFilter = $filter('onHoldCalls');\r\n this.ongoingCallsFilter = $filter('ongoingCalls');\r\n this.activeCallFilter = $filter('activeCall');\r\n }\r\n\r\n public $onInit() {\r\n this.personObserver = CustomerService.CustomerCard.customerCardStore.state$\r\n .map(s => s && s.personal && s.personal.person && s.personal.person)\r\n .filter(person => person !== null)\r\n .distinctUntilChanged()\r\n .subscribe(person => {\r\n this.person = person;\r\n });\r\n\r\n this.writeableFieldObserver = CustomerService.CustomerCard.customerCardStore.state$\r\n .map(s => s && s.personal && s.personal.fields)\r\n .filter(fields => fields !== null)\r\n .distinctUntilChanged()\r\n .subscribe(fields => {\r\n this.writeableFields = fields;\r\n });\r\n }\r\n\r\n public $onDestroy() {\r\n if (this.phoneCallTimer) {\r\n this.$interval.cancel(this.phoneCallTimer);\r\n }\r\n\r\n if (this.personObserver) {\r\n this.personObserver.dispose();\r\n this.personObserver = null;\r\n }\r\n\r\n if (this.writeableFieldObserver) {\r\n this.writeableFieldObserver.dispose();\r\n this.writeableFieldObserver = null;\r\n }\r\n }\r\n\r\n public $onChanges(bindings: { telephonyInfo: IBindingChange }) {\r\n this.start = Date.now();\r\n\r\n this.rolesCache = bindings.telephonyInfo.currentValue.rolesCache;\r\n\r\n this.conversationState = ConversationState[ConversationState.Idle];\r\n if (\r\n !bindings.telephonyInfo ||\r\n !bindings.telephonyInfo.currentValue ||\r\n !bindings.telephonyInfo.currentValue.phone\r\n )\r\n return;\r\n\r\n const phone = bindings.telephonyInfo.currentValue.phone;\r\n this.activeCall = this.activeCallFilter(phone.calls);\r\n\r\n if (phone.status && (phone.status.toString() === 'ACW' || phone.status === 5)) {\r\n this.conversationState = ConversationState[ConversationState.Acw];\r\n } else {\r\n const ongoingCalls = phone.calls && this.ongoingCallsFilter(phone.calls);\r\n if (ongoingCalls && ongoingCalls.length > 0) {\r\n this.conversationState = ConversationState[ConversationState.Calling];\r\n\r\n if (phone.calls && this.onHoldCallsFilter(phone.calls).length === phone.calls.length) {\r\n this.conversationState = ConversationState[ConversationState.OnHold];\r\n }\r\n }\r\n }\r\n\r\n this.inTelephonyQueue = phone.queueStatus.toString() === 'Available' || phone.queueStatus === 2;\r\n }\r\n\r\n public onCustomerCard(): boolean {\r\n return (\r\n this.$state &&\r\n this.$state.current &&\r\n this.$state.current.name.indexOf('customerservice.customercard') !== -1\r\n );\r\n }\r\n\r\n public leaveAcw() {\r\n this.phoneService.endAfterCallWork();\r\n }\r\n\r\n public leaveAcwAndQueue() {\r\n this.phoneService.endAfterCallWorkAndLeaveQueue();\r\n }\r\n\r\n private incrementCallTime() {\r\n const difference = (Date.now() - this.start) / 1000;\r\n\r\n if (this.telephonyInfo && this.telephonyInfo.phone) {\r\n if (this.telephonyInfo.phone.calls) {\r\n this.telephonyInfo.phone.calls.forEach(call => {\r\n if (call.status.toString() === 'Ringing' || call.status === 3) call.waitingTime += difference;\r\n\r\n if (\r\n call.status.toString() === 'Established' ||\r\n call.status === 2 ||\r\n call.status.toString() === 'OnHold' ||\r\n call.status === 6\r\n )\r\n call.duration += difference;\r\n });\r\n }\r\n\r\n if (\r\n (this.telephonyInfo.phone.status && this.telephonyInfo.phone.status.toString() === 'ACW') ||\r\n this.telephonyInfo.phone.status === 5\r\n )\r\n this.telephonyInfo.phone.afterCallWorkTime += difference;\r\n }\r\n this.start = Date.now();\r\n }\r\n\r\n private schedulePhoneCallTimer() {\r\n this.phoneCallTimer = this.$interval(() => {\r\n this.incrementCallTime();\r\n }, 1000);\r\n }\r\n\r\n public holdcall(call: PhoneCallModel) {\r\n if (!call) return;\r\n\r\n this.phoneService.holdcall(call);\r\n }\r\n\r\n public releasecall(call: PhoneCallModel) {\r\n if (!call || this.releasing) return;\r\n\r\n this.releasing = true;\r\n\r\n this.phoneService.releasecall(call);\r\n\r\n setTimeout(() => {\r\n this.releasing = false;\r\n }, 500);\r\n }\r\n\r\n public forwardcall(call: PhoneCallModel) {\r\n if (!call) return;\r\n\r\n this.phoneService.forwardcall(call);\r\n }\r\n\r\n public pickup(call: PhoneCallModel) {\r\n if (!call) return;\r\n\r\n this.phoneService.pickup(call);\r\n }\r\n\r\n public link(call: PhoneCallModel, roleId: System.Guid) {\r\n if (!call || !roleId) return;\r\n\r\n this.phoneService.setRoleForCall(call, roleId);\r\n }\r\n\r\n public unlink(call: PhoneCallModel) {\r\n if (!call || !call.subjectRoleId) return;\r\n\r\n this.phoneService.unsetRoleForCall(call);\r\n }\r\n\r\n public selectCall(call: PhoneCallModel): void {\r\n if (!call) return;\r\n\r\n this.activeCall = call;\r\n }\r\n\r\n public getCallSubjectRole(call: PhoneCallModel): RoleModel {\r\n return call && this.getRoleModel(call.subjectRoleId);\r\n }\r\n\r\n public getRoleModel(roleId: Guid): RoleModel {\r\n return roleId && this.rolesCache && this.rolesCache[roleId.toString()];\r\n }\r\n\r\n public addPhoneNumberToCustomer(call: PhoneCallModel, person: PersonModel, roleId: Guid) {\r\n if (!person || !call || !roleId) return;\r\n\r\n if (this.isNumberAlreadyLinked(call, person)) return;\r\n\r\n let foundEmptySlot = false;\r\n const personClone = JSON.parse(JSON.stringify(person));\r\n const phoneNumbers = personClone && personClone.contactDetails && personClone.contactDetails.phoneNumbers;\r\n\r\n for (let i = 0; i < phoneNumbers.length; i++) {\r\n if (phoneNumbers[i].number.length <= 0) {\r\n phoneNumbers[i] = overwritePhone(\r\n phoneNumbers[i],\r\n call.number,\r\n i,\r\n PhoneType.Unknown\r\n );\r\n foundEmptySlot = true;\r\n break;\r\n }\r\n }\r\n\r\n this.personInfoService.update(personClone).then(() => this.link(call, roleId));\r\n\r\n function overwritePhone(\r\n currentPhoneModel: Modules.Telephony.ContactPhoneNumberModel,\r\n newNumber: string,\r\n position: number,\r\n type: Umbrella.Modules.Telephony.PhoneType\r\n ) {\r\n return {\r\n ...currentPhoneModel,\r\n number: newNumber,\r\n original: newNumber,\r\n description: `Telefoon ${position}`,\r\n type: type\r\n };\r\n }\r\n }\r\n\r\n public isAbleToLinkNumber(call: PhoneCallModel, person: PersonModel): boolean {\r\n return !!window.user.permissions.updateContactPhoneNumbers && !this.isNumberAlreadyLinked(call, person) && this.isPhoneNumberFieldUpdateable() && this.isAllowedToAddUnknownPhoneNumber();\r\n }\r\n\r\n private isPhoneNumberFieldUpdateable(): boolean {\r\n const isPhoneNumberUpdateable = this.writeableFields &&\r\n this.writeableFields.fields &&\r\n !!this.writeableFields.fields.find((x: any) => x === \"PhoneNumber\");\r\n const nrOfPhoneNumbers = this.person.contactDetails.phoneNumbers.filter(x => x.number).length;\r\n\r\n return isPhoneNumberUpdateable && nrOfPhoneNumbers < 2;\r\n }\r\n\r\n private isAllowedToAddUnknownPhoneNumber(): boolean {\r\n if (this.writeableFields.capabilities.skipPhoneTypeCapabilityChecks) return true;\r\n\r\n const hasFoundUnknownPhoneNumber = !!this.person.contactDetails.phoneNumbers.find(x => x.type === PhoneType.Unknown && x.number.length > 0);\r\n\r\n return (this.writeableFields.capabilities.allowedPhoneTypes.indexOf(PhoneType.Unknown.toString()) > -1) && (this.writeableFields.capabilities.multipleEqualPhoneTypesAllowed || !hasFoundUnknownPhoneNumber);\r\n }\r\n\r\n private isNumberAlreadyLinked(call: PhoneCallModel, person: PersonModel): boolean {\r\n if (!person || !call || !person.contactDetails || !person.contactDetails.phoneNumbers) return false;\r\n\r\n const phonenrFilter: (phonenr: string) => string = this.$filter('phonenr');\r\n return !!person.contactDetails.phoneNumbers.find(x => phonenrFilter(x.number) === phonenrFilter(call.number));\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\nnamespace Umbrella {\r\n @Component('Umbrella', {\r\n selector: 'product-logo',\r\n templateUrl: '/Top/ProductLogoComponent/ProductLogo.html'\r\n })\r\n class UmbrellaLogoComponent {\r\n public title$: Rx.Observable;\r\n\r\n public $onInit() {\r\n this.title$ = session$\r\n .where(x => x.config != null)\r\n .map(x => x.config.environmentName)\r\n .startWith('');\r\n }\r\n }\r\n}\r\n","namespace Umbrella {\r\n import switchDeviceMode = Umbrella.switchDeviceMode;\r\n\r\n @Component('Umbrella', {\r\n selector: 'top-bar',\r\n templateUrl: '/Top/TopBarComponent/TopBar.html'\r\n })\r\n class TopBarComponent {\r\n public isSurfaceTab(): boolean {\r\n return !!(window.device && window.device.surface());\r\n }\r\n\r\n public toggleDeviceMode(): void {\r\n switchDeviceMode();\r\n }\r\n\r\n public closeSearchOverlay() {\r\n if (!isDesktopModeActive()) {\r\n if (window.device.tablet() || window.device.mobile() || window.device.surface()) {\r\n isSearchActive$.onNext(null);\r\n toggleNavigationIcon$.onNext('search');\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace Umbrella {\r\n import PhoneStatsModel = Umbrella.TelephonyControl.Statistics.PhoneStatsModel;\r\n import TelephonyQueueKpiState = Umbrella.TelephonyControl.Statistics.TelephonyQueueKpiState;\r\n\r\n @Component('Umbrella', {\r\n selector: 'top-live-stats',\r\n templateUrl: '/Top/TopLiveStatsComponent/TopLiveStats.html'\r\n })\r\n @Inject('$timeout', 'TopBarStore')\r\n class TopLiveStatsComponent {\r\n public telephonyInfo: Telephony.State;\r\n public supportsStatistics: boolean;\r\n public telephonyStatistics: PhoneStatsModel;\r\n public queueLength: string;\r\n public queueTime: string;\r\n\r\n private timeout: ng.IPromise = null;\r\n private start = Date.now();\r\n private phoneObserver: Rx.IDisposable;\r\n\r\n constructor(private $timeout: ng.ITimeoutService, private topBarStore: TopBarStore) {}\r\n\r\n public $onInit() {\r\n const notNullOrUndefined = x => x !== null && x !== undefined;\r\n this.phoneObserver = this.topBarStore.state$\r\n .map(x => x && x.telephonyInfo)\r\n .filter(notNullOrUndefined)\r\n .distinctUntilChanged()\r\n .subscribe(x => {\r\n this.telephonyStatistics = x.statistics;\r\n this.telephonyInfo = x;\r\n });\r\n\r\n this.supportsStatistics =\r\n window.config &&\r\n window.config.facets &&\r\n window.config.facets.telephony &&\r\n window.config.facets.telephony[0] &&\r\n window.config.facets.telephony[0].available;\r\n\r\n this.scheduleQueueTimer();\r\n }\r\n\r\n public $onDestroy() {\r\n this.$timeout.cancel(this.timeout);\r\n\r\n if (this.phoneObserver) {\r\n this.phoneObserver.dispose();\r\n this.phoneObserver = null;\r\n }\r\n }\r\n\r\n public isQueueLengthAboveAverage() {\r\n return (\r\n this.telephonyStatistics.queueLengthKpiState.toString() ===\r\n TelephonyQueueKpiState[TelephonyQueueKpiState.RequiresAttention] ||\r\n this.telephonyStatistics.queueLengthKpiState.toString() ===\r\n TelephonyQueueKpiState.RequiresAttention.toString()\r\n );\r\n }\r\n\r\n public isQueueLengthLong() {\r\n return (\r\n this.telephonyStatistics.queueLengthKpiState.toString() ===\r\n TelephonyQueueKpiState[TelephonyQueueKpiState.Critical] ||\r\n this.telephonyStatistics.queueLengthKpiState.toString() === TelephonyQueueKpiState.Critical.toString()\r\n );\r\n }\r\n\r\n public isQueueTimeAboveAverage() {\r\n return (\r\n !this.isQueueTimeLong() &&\r\n this.telephonyStatistics.queueTime > this.telephonyStatistics.queueTimeRequiresAttentionCap\r\n );\r\n }\r\n\r\n public isQueueTimeLong() {\r\n return this.telephonyStatistics.queueTime > this.telephonyStatistics.queueTimeCriticalCap;\r\n }\r\n\r\n private incrementQueueTime() {\r\n const difference = (Date.now() - this.start) / 1000;\r\n\r\n if (\r\n this.telephonyStatistics &&\r\n this.telephonyStatistics.queueLength &&\r\n this.telephonyStatistics.queueLength > 0\r\n )\r\n this.telephonyStatistics.queueTime += difference;\r\n\r\n this.start = Date.now();\r\n }\r\n\r\n private scheduleQueueTimer() {\r\n this.timeout = this.$timeout(\r\n () => {\r\n this.incrementQueueTime();\r\n this.scheduleQueueTimer();\r\n },\r\n 1000,\r\n true\r\n );\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Colleagues {\r\n @Pipe('Colleagues', 'presenceColor')\r\n class PresenceColorFilter {\r\n public transform(stateType: StateType | string | number) {\r\n switch (stateType) {\r\n case StateType.Available:\r\n case 'Available':\r\n case 1:\r\n return 'green';\r\n case StateType.Unavailable:\r\n case 'Unavailable':\r\n case 2:\r\n return 'red';\r\n case StateType.Busy:\r\n case 'Busy':\r\n case 3:\r\n return 'red';\r\n case StateType.Offline:\r\n case 'Offline':\r\n case 4:\r\n return '';\r\n //case StateType.Away:\r\n case 'Away':\r\n case 5:\r\n return 'yellow';\r\n //case StateType.Unknown:\r\n case 'Unknown':\r\n case 6:\r\n return '';\r\n //case StateType.ACW:\r\n case 'ACW':\r\n case 7:\r\n return 'red';\r\n //case StateType.DND:\r\n case 'DND':\r\n case 8:\r\n return 'red';\r\n default:\r\n return 'help_outline';\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Colleagues {\r\n @Pipe('Colleagues', 'presenceIcon')\r\n class PresenceIconFilter {\r\n public transform(stateType: StateType | string | number) {\r\n switch (stateType) {\r\n case StateType.Available:\r\n case 'Available':\r\n case 1:\r\n return 'check_circle'; // V green\r\n case StateType.Unavailable:\r\n case 'Unavailable':\r\n case 2:\r\n return 'remove_circle'; // - red\r\n case StateType.Busy:\r\n case 'Busy':\r\n case 3:\r\n return 'brightness_1'; // O red\r\n case StateType.Offline:\r\n case 'Offline':\r\n case 4:\r\n return 'radio_button_unchecked'; // O white\r\n // case StateType.Away:\r\n case 'Away':\r\n case 5:\r\n return 'schedule'; // L yellow\r\n // case StateType.Unknown:\r\n case 'Unknown':\r\n case 6:\r\n return 'help_outline'; // ? white\r\n // case StateType.ACW:\r\n case 'ACW':\r\n case 7:\r\n return 'schedule'; // L red\r\n // case StateType.DND:\r\n case 'DND':\r\n case 8:\r\n return 'remove_circle'; // - red\r\n default:\r\n return 'help_outline';\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella.Modules.Colleagues {\r\n @Pipe('Colleagues', 'presencePhoneIcon')\r\n class PresencePhoneIconFilter {\r\n public transform(stateType: StateType | string | number) {\r\n switch (stateType) {\r\n case StateType.Available:\r\n case 'Available':\r\n case 1:\r\n return 'phone_in_talk';\r\n case StateType.Unavailable:\r\n case 'Unavailable':\r\n case 2:\r\n return 'phone_paused';\r\n case StateType.Busy:\r\n case 'Busy':\r\n case 3:\r\n return 'phone_locked';\r\n default:\r\n return 'phone';\r\n }\r\n }\r\n }\r\n}\r\n","namespace Umbrella {\r\n @Component('Umbrella', {\r\n selector: 'top-search-header',\r\n templateUrl: '/Top/TopSearchHeaderComponent/TopSearchHeader.html',\r\n bindings: {\r\n title: '@',\r\n cssClass: '@',\r\n count: '@',\r\n total: '@',\r\n onMore: '&'\r\n }\r\n })\r\n class TopSearchHeaderComponent {\r\n public title: string;\r\n public cssClass: string;\r\n public count: string;\r\n public total: string;\r\n\r\n public onMore: () => void;\r\n }\r\n}\r\n","namespace Umbrella {\r\n angular.module('Umbrella').factory('QuickLinkResource', [\r\n '$resource',\r\n $resource =>\r\n $resource(\r\n '/api/v1/quicklink/:action/:id',\r\n {},\r\n {\r\n getById: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { id: '@id' }\r\n },\r\n getAll: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: '', id: '' }\r\n },\r\n getAllActive: {\r\n method: 'GET',\r\n isArray: true,\r\n params: { action: 'active', id: '' }\r\n },\r\n search: {\r\n method: 'GET',\r\n isArray: false,\r\n params: { action: 'search', id: '@id' }\r\n },\r\n save: {\r\n method: 'POST',\r\n isArray: false,\r\n params: { action: '', id: '' }\r\n },\r\n update: {\r\n method: 'PUT',\r\n isArray: false,\r\n params: { action: '', id: '' }\r\n },\r\n delete: {\r\n method: 'DELETE',\r\n isArray: false,\r\n params: { action: '', id: '@id' }\r\n },\r\n updateOrder: {\r\n method: 'Post',\r\n isArray: true,\r\n params: { action: 'updateOrder', id: '' }\r\n }\r\n }\r\n )\r\n ]);\r\n}\r\n","/// \r\n\r\nnamespace Umbrella {\r\n import PhotoBlobUrlService = Modules.Colleagues.PhotoBlobUrlService;\r\n import QuickLinkModel = Modules.QuickLinks.QuickLinkModel;\r\n import QuickDialResource = Modules.Telephony.QuickDialResource;\r\n import QuickDialModel = Modules.Telephony.QuickDialModel;\r\n import PhoneService = Modules.Telephony.PhoneService;\r\n\r\n @Component('Umbrella', {\r\n selector: 'top-toolbar',\r\n templateUrl: '/Top/TopToolbarComponent/TopToolbar.html'\r\n })\r\n @Inject('$location', 'PhotoBlobUrlService', 'QuickLinkResource', 'QuickDialResource', 'PhoneService', 'ConfigResource')\r\n class TopToolbarComponent {\r\n public quicklinks: QuickLinkModel[];\r\n public quickDials: QuickDialModel[];\r\n public user: Modules.Colleagues.SessionColleagueModel;\r\n public photoUrl: string;\r\n public displayPanel = false;\r\n public displayDeveloperTools = false;\r\n public powerBiWorkspaceId : Guid = null;\r\n private subscription: Rx.IDisposable;\r\n\r\n constructor(\r\n private $location: ng.ILocationService,\r\n private photoBlobUrlService: PhotoBlobUrlService,\r\n private quickLinkResource,\r\n private quickDialResource: QuickDialResource,\r\n private phoneService: PhoneService,\r\n private configResource: Modules.IConfigResourceClass\r\n ) {}\r\n\r\n public $onInit() {\r\n this.loadQuickDials();\r\n this.loadQuickLinks();\r\n this.loadPowerBiWorkspaceId();\r\n this.subscription = session$\r\n .skipWhile(x => !x.user)\r\n .map(x => x.user)\r\n .subscribe(user => {\r\n this.user = user;\r\n this.photoUrl = this.photoBlobUrlService.photoUrl(user.pictureBlobId, 65, 65);\r\n });\r\n }\r\n\r\n public $onDestroy() {\r\n this.subscription.dispose();\r\n }\r\n public loadPowerBiWorkspaceId(){\r\n this.configResource.get({section: 'reporting'})\r\n .$promise.then(val => (this.powerBiWorkspaceId = val.powerBiWorkspaceId));\r\n }\r\n\r\n public isTelephonyAgentRegistered(): boolean {\r\n return window.config && window.config.facets.telephony && window.config.facets.telephony.length > 0;\r\n }\r\n\r\n public loadQuickLinks(): void {\r\n if (!window.user.permissions.quickLinkRead) return;\r\n\r\n this.quickLinkResource\r\n .getAllActive({ page: 0, pageSize: 100 })\r\n .$promise.then(data => (this.quicklinks = data));\r\n }\r\n\r\n public loadQuickDials(): void {\r\n if (!this.isTelephonyAgentRegistered() || !window.user.permissions.quickDialRead) return;\r\n\r\n this.quickDialResource.getAllActive().$promise.then((data: QuickDialModel[]) => {\r\n this.quickDials = data;\r\n });\r\n }\r\n\r\n public callNr(nr: string): void {\r\n this.phoneService.callNr(nr);\r\n this.togglePanel();\r\n }\r\n\r\n public callNrDirect(nr: string): void {\r\n this.phoneService.callNrDirect(nr);\r\n this.togglePanel();\r\n }\r\n\r\n public togglePanel(): void {\r\n this.displayPanel = !this.displayPanel;\r\n }\r\n\r\n public toggleDeveloperTools(): void {\r\n this.displayDeveloperTools = !this.displayDeveloperTools;\r\n }\r\n\r\n public isKnowledgebaseActive() {\r\n return this.urlStartsWith('/kennisbank');\r\n }\r\n\r\n public isReportingActive() {\r\n return this.urlStartsWith('/rapportage');\r\n }\r\n\r\n public isSelfServiceActive() {\r\n return this.urlStartsWith('/selfservice');\r\n }\r\n\r\n public isShellActive() {\r\n return this.urlStartsWith('/shell');\r\n }\r\n\r\n public isXmlConfigActive() {\r\n return this.urlStartsWith('/xmlconfig');\r\n }\r\n\r\n public isAdminActive() {\r\n return this.urlStartsWith('/beheer');\r\n }\r\n\r\n public displayDownloadButton(): boolean {\r\n return !!window.deferredPrompt;\r\n }\r\n\r\n public downloadApp(): void {\r\n window.deferredPrompt.prompt();\r\n // Wait for the user to respond to the prompt\r\n window.deferredPrompt.userChoice.then(choiceResult => {\r\n window.deferredPrompt = null;\r\n });\r\n }\r\n\r\n public logout(): void {\r\n location.href = Config.makeAbsoluteApiUrl('/logout');\r\n }\r\n\r\n private urlStartsWith(prefix: string): boolean {\r\n return this.$location.path().indexOf(prefix) === 0;\r\n }\r\n }\r\n}\r\n","if (typeof $.signalR !== 'function') {\r\n throw new Error(\r\n 'SignalR: SignalR is not loaded. Please ensure jquery.signalR-x.js is referenced before ~/signalr/js.'\r\n );\r\n}\r\n\r\nvar signalR = $.signalR;\r\n\r\nfunction makeProxyCallback(hub, callback) {\r\n return function() {\r\n // Call the client hub method\r\n callback.apply(hub, $.makeArray(arguments));\r\n };\r\n}\r\n\r\nfunction registerHubProxies(instance, shouldSubscribe) {\r\n var key, hub, memberKey, memberValue;\r\n\r\n for (key in instance) {\r\n if (instance.hasOwnProperty(key)) {\r\n hub = instance[key];\r\n\r\n if (!hub.hubName) {\r\n // Not a client hub\r\n continue;\r\n }\r\n\r\n // Loop through all members on the hub and find client hub functions to subscribe/unsubscribe\r\n for (memberKey in hub.client) {\r\n if (hub.client.hasOwnProperty(memberKey)) {\r\n memberValue = hub.client[memberKey];\r\n\r\n if (!$.isFunction(memberValue)) {\r\n // Not a client hub function\r\n continue;\r\n }\r\n if(shouldSubscribe) {\r\n hub.on.call(hub, memberKey, makeProxyCallback(hub, memberValue));\r\n } else {\r\n hub.off.call(hub, memberKey, null);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n$.hubConnection.prototype.createHubProxies = function() {\r\n var proxies = {};\r\n this.starting(function() {\r\n // Register the hub proxies as subscribed\r\n // (instance, shouldSubscribe)\r\n registerHubProxies(proxies, true);\r\n\r\n this._registerSubscribedHubs();\r\n }).disconnected(function() {\r\n // Unsubscribe all hub proxies when we \"disconnect\". This is to ensure that we do not re-add functional call backs.\r\n // (instance, shouldSubscribe)\r\n registerHubProxies(proxies, false);\r\n });\r\n\r\n proxies['activityHub'] = this.createHubProxy('activityHub');\r\n proxies['activityHub'].client = {};\r\n proxies['activityHub'].server = {\r\n subscribe: function(id) {\r\n return proxies['activityHub'].invoke.apply(\r\n proxies['activityHub'],\r\n $.merge(['Subscribe'], $.makeArray(arguments))\r\n );\r\n },\r\n unsubscribe: function(id) {\r\n return proxies['activityHub'].invoke.apply(\r\n proxies['activityHub'],\r\n $.merge(['Unsubscribe'], $.makeArray(arguments))\r\n );\r\n }\r\n };\r\n\r\n proxies['allPhonesHub'] = this.createHubProxy('allPhonesHub');\r\n proxies['allPhonesHub'].client = {};\r\n proxies['allPhonesHub'].server = {\r\n deregister: function() {\r\n return proxies['allPhonesHub'].invoke.apply(\r\n proxies['allPhonesHub'],\r\n $.merge(['Deregister'], $.makeArray(arguments))\r\n );\r\n },\r\n\r\n getAllPhones: function() {\r\n return proxies['allPhonesHub'].invoke.apply(\r\n proxies['allPhonesHub'],\r\n $.merge(['GetAllPhones'], $.makeArray(arguments))\r\n );\r\n },\r\n\r\n logoutMultiple: function(userIds) {\r\n return proxies['allPhonesHub'].invoke.apply(\r\n proxies['allPhonesHub'],\r\n $.merge(['LogoutMultiple'], $.makeArray(arguments))\r\n );\r\n },\r\n\r\n register: function() {\r\n return proxies['allPhonesHub'].invoke.apply(\r\n proxies['allPhonesHub'],\r\n $.merge(['Register'], $.makeArray(arguments))\r\n );\r\n }\r\n };\r\n\r\n proxies['announcementHub'] = this.createHubProxy('announcementHub');\r\n proxies['announcementHub'].client = {};\r\n proxies['announcementHub'].server = {};\r\n\r\n proxies['billHub'] = this.createHubProxy('billHub');\r\n proxies['billHub'].client = {};\r\n proxies['billHub'].server = {\r\n subscribe: function(id) {\r\n return proxies['billHub'].invoke.apply(\r\n proxies['billHub'],\r\n $.merge(['Subscribe'], $.makeArray(arguments))\r\n );\r\n },\r\n unsubscribe: function(id) {\r\n return proxies['billHub'].invoke.apply(\r\n proxies['billHub'],\r\n $.merge(['Unsubscribe'], $.makeArray(arguments))\r\n );\r\n }\r\n };\r\n\r\n proxies['caseFlowHub'] = this.createHubProxy('caseFlowHub');\r\n proxies['caseFlowHub'].client = {};\r\n proxies['caseFlowHub'].server = {};\r\n\r\n proxies['contractHub'] = this.createHubProxy('contractHub');\r\n proxies['contractHub'].client = {};\r\n proxies['contractHub'].server = {\r\n subscribe: function(id) {\r\n return proxies['contractHub'].invoke.apply(\r\n proxies['contractHub'],\r\n $.merge(['Subscribe'], $.makeArray(arguments))\r\n );\r\n },\r\n unsubscribe: function(id) {\r\n return proxies['contractHub'].invoke.apply(\r\n proxies['contractHub'],\r\n $.merge(['Unsubscribe'], $.makeArray(arguments))\r\n );\r\n }\r\n };\r\n\r\n proxies['personHub'] = this.createHubProxy('personHub');\r\n proxies['personHub'].client = {};\r\n proxies['personHub'].server = {\r\n startJitUpdate: function(id) {\r\n return proxies['personHub'].invoke.apply(\r\n proxies['personHub'],\r\n $.merge(['StartJitUpdate'], $.makeArray(arguments))\r\n );\r\n },\r\n subscribe: function(id) {\r\n return proxies['personHub'].invoke.apply(\r\n proxies['personHub'],\r\n $.merge(['Subscribe'], $.makeArray(arguments))\r\n );\r\n },\r\n unsubscribe: function(id) {\r\n return proxies['personHub'].invoke.apply(\r\n proxies['personHub'],\r\n $.merge(['Unsubscribe'], $.makeArray(arguments))\r\n );\r\n }\r\n };\r\n\r\n proxies['phoneHub'] = this.createHubProxy('phoneHub');\r\n proxies['phoneHub'].client = {};\r\n proxies['phoneHub'].server = {\r\n dial: function(number) {\r\n return proxies['phoneHub'].invoke.apply(proxies['phoneHub'], $.merge(['Dial'], $.makeArray(arguments)));\r\n },\r\n\r\n endAfterCallWork: function() {\r\n return proxies['phoneHub'].invoke.apply(\r\n proxies['phoneHub'],\r\n $.merge(['EndAfterCallWork'], $.makeArray(arguments))\r\n );\r\n },\r\n\r\n endAfterCallWorkAndLeaveQueue: function() {\r\n return proxies['phoneHub'].invoke.apply(\r\n proxies['phoneHub'],\r\n $.merge(['EndAfterCallWorkAndLeaveQueue'], $.makeArray(arguments))\r\n );\r\n },\r\n\r\n enterQueue: function() {\r\n return proxies['phoneHub'].invoke.apply(\r\n proxies['phoneHub'],\r\n $.merge(['EnterQueue'], $.makeArray(arguments))\r\n );\r\n },\r\n\r\n forwardCall: function(connectionId) {\r\n return proxies['phoneHub'].invoke.apply(\r\n proxies['phoneHub'],\r\n $.merge(['ForwardCall'], $.makeArray(arguments))\r\n );\r\n },\r\n\r\n holdCall: function(connectionId) {\r\n return proxies['phoneHub'].invoke.apply(proxies['phoneHub'], $.merge(['HoldCall'], $.makeArray(arguments)));\r\n },\r\n\r\n leaveQueue: function() {\r\n return proxies['phoneHub'].invoke.apply(\r\n proxies['phoneHub'],\r\n $.merge(['LeaveQueue'], $.makeArray(arguments))\r\n );\r\n },\r\n\r\n login: function(number, password) {\r\n return proxies['phoneHub'].invoke.apply(proxies['phoneHub'], $.merge(['Login'], $.makeArray(arguments)));\r\n },\r\n\r\n logout: function() {\r\n return proxies['phoneHub'].invoke.apply(proxies['phoneHub'], $.merge(['Logout'], $.makeArray(arguments)));\r\n },\r\n\r\n logoutMultipleByUserIds: function(userIds) {\r\n return proxies['phoneHub'].invoke.apply(\r\n proxies['phoneHub'],\r\n $.merge(['LogoutMultipleByUserIds'], $.makeArray(arguments))\r\n );\r\n },\r\n\r\n notReady: function() {\r\n return proxies['phoneHub'].invoke.apply(proxies['phoneHub'], $.merge(['NotReady'], $.makeArray(arguments)));\r\n },\r\n\r\n pickup: function(connectionId) {\r\n return proxies['phoneHub'].invoke.apply(proxies['phoneHub'], $.merge(['Pickup'], $.makeArray(arguments)));\r\n },\r\n\r\n ready: function() {\r\n return proxies['phoneHub'].invoke.apply(proxies['phoneHub'], $.merge(['Ready'], $.makeArray(arguments)));\r\n },\r\n\r\n releaseCall: function(connectionId) {\r\n return proxies['phoneHub'].invoke.apply(\r\n proxies['phoneHub'],\r\n $.merge(['ReleaseCall'], $.makeArray(arguments))\r\n );\r\n },\r\n\r\n reportUserReconnected: function() {\r\n return proxies['phoneHub'].invoke.apply(\r\n proxies['phoneHub'],\r\n $.merge(['ReportUserReconnected'], $.makeArray(arguments))\r\n );\r\n },\r\n\r\n resumeCall: function(connectionId) {\r\n return proxies['phoneHub'].invoke.apply(\r\n proxies['phoneHub'],\r\n $.merge(['ResumeCall'], $.makeArray(arguments))\r\n );\r\n },\r\n\r\n setPhoneRichPresenceState: function(phoneRichPresenceState) {\r\n return proxies['phoneHub'].invoke.apply(\r\n proxies['phoneHub'],\r\n $.merge(['SetPhoneRichPresenceState'], $.makeArray(arguments))\r\n );\r\n },\r\n\r\n setRoleForCall: function(phoneCallRegistrationId, roleId) {\r\n return proxies['phoneHub'].invoke.apply(\r\n proxies['phoneHub'],\r\n $.merge(['SetRoleForCall'], $.makeArray(arguments))\r\n );\r\n },\r\n\r\n transferDirect: function(number, connectionId) {\r\n return proxies['phoneHub'].invoke.apply(\r\n proxies['phoneHub'],\r\n $.merge(['TransferDirect'], $.makeArray(arguments))\r\n );\r\n },\r\n\r\n unsetRoleForCall: function(phoneCallRegistrationId) {\r\n return proxies['phoneHub'].invoke.apply(\r\n proxies['phoneHub'],\r\n $.merge(['UnsetRoleForCall'], $.makeArray(arguments))\r\n );\r\n }\r\n };\r\n\r\n proxies['presenceHub'] = this.createHubProxy('presenceHub');\r\n proxies['presenceHub'].client = {};\r\n proxies['presenceHub'].server = {};\r\n\r\n proxies['shellHub'] = this.createHubProxy('shellHub');\r\n proxies['shellHub'].client = {};\r\n proxies['shellHub'].server = {\r\n complete: function(line) {\r\n return proxies['shellHub'].invoke.apply(proxies['shellHub'], $.merge(['Complete'], $.makeArray(arguments)));\r\n },\r\n\r\n execute: function(line) {\r\n return proxies['shellHub'].invoke.apply(proxies['shellHub'], $.merge(['Execute'], $.makeArray(arguments)));\r\n },\r\n\r\n login: function(outputDebugInfo) {\r\n return proxies['shellHub'].invoke.apply(proxies['shellHub'], $.merge(['Login'], $.makeArray(arguments)));\r\n },\r\n\r\n toggleOutPutDebugInfo: function(outputDebugInfo) {\r\n return proxies['shellHub'].invoke.apply(\r\n proxies['shellHub'],\r\n $.merge(['ToggleOutPutDebugInfo'], $.makeArray(arguments))\r\n );\r\n }\r\n };\r\n\r\n proxies['taskHub'] = this.createHubProxy('taskHub');\r\n proxies['taskHub'].client = {};\r\n proxies['taskHub'].server = {};\r\n\r\n proxies['unitActivityHub'] = this.createHubProxy('unitActivityHub');\r\n proxies['unitActivityHub'].client = {};\r\n proxies['unitActivityHub'].server = {\r\n subscribe: function(id) {\r\n return proxies['unitActivityHub'].invoke.apply(\r\n proxies['unitActivityHub'],\r\n $.merge(['Subscribe'], $.makeArray(arguments))\r\n );\r\n },\r\n unsubscribe: function(id) {\r\n return proxies['unitActivityHub'].invoke.apply(\r\n proxies['unitActivityHub'],\r\n $.merge(['Unsubscribe'], $.makeArray(arguments))\r\n );\r\n }\r\n };\r\n\r\n proxies['unitContractHub'] = this.createHubProxy('unitContractHub');\r\n proxies['unitContractHub'].client = {};\r\n proxies['unitContractHub'].server = {\r\n subscribe: function(id) {\r\n return proxies['unitContractHub'].invoke.apply(\r\n proxies['unitContractHub'],\r\n $.merge(['Subscribe'], $.makeArray(arguments))\r\n );\r\n },\r\n unsubscribe: function(id) {\r\n return proxies['unitContractHub'].invoke.apply(\r\n proxies['unitContractHub'],\r\n $.merge(['Unsubscribe'], $.makeArray(arguments))\r\n );\r\n }\r\n };\r\n\r\n proxies['unitHub'] = this.createHubProxy('unitHub');\r\n proxies['unitHub'].client = {};\r\n proxies['unitHub'].server = {\r\n startJitUpdate: function(id) {\r\n return proxies['unitHub'].invoke.apply(\r\n proxies['unitHub'],\r\n $.merge(['StartJitUpdate'], $.makeArray(arguments))\r\n );\r\n },\r\n subscribe: function(id) {\r\n return proxies['unitHub'].invoke.apply(\r\n proxies['unitHub'],\r\n $.merge(['Subscribe'], $.makeArray(arguments))\r\n );\r\n },\r\n unsubscribe: function(id) {\r\n return proxies['unitHub'].invoke.apply(\r\n proxies['unitHub'],\r\n $.merge(['Unsubscribe'], $.makeArray(arguments))\r\n );\r\n }\r\n };\r\n\r\n proxies['unitValuationHub'] = this.createHubProxy('unitValuationHub');\r\n proxies['unitValuationHub'].client = {};\r\n proxies['unitValuationHub'].server = {\r\n subscribe: function(id) {\r\n return proxies['unitValuationHub'].invoke.apply(\r\n proxies['unitValuationHub'],\r\n $.merge(['Subscribe'], $.makeArray(arguments))\r\n );\r\n },\r\n unsubscribe: function(id) {\r\n return proxies['unitValuationHub'].invoke.apply(\r\n proxies['unitValuationHub'],\r\n $.merge(['Unsubscribe'], $.makeArray(arguments))\r\n );\r\n }\r\n };\r\n\r\n return proxies;\r\n};\r\n\r\nsignalR.hub = $.hubConnection('/signalr', {\r\n useDefaultPath: false\r\n});\r\n$.extend(signalR, signalR.hub.createHubProxies());\r\n","/// \r\n/// \r\n\r\nimport './Content/Stylesheets/_all.less';\r\nimport './Content/css/abstract.css';\r\nimport './Content/css/good.css';\r\nimport './Content/css/elements.css';\r\nimport './Content/new_ui/app.css';\r\n\r\nconst usedModules = [\r\n 'ngResource',\r\n 'ngCookies',\r\n 'ngAria',\r\n 'ngSanitize',\r\n 'ngAnimate',\r\n 'ngUpload',\r\n 'ngResize',\r\n 'ngMaterial',\r\n 'perfect_scrollbar',\r\n 'ui.router',\r\n 'ui.router.state.events',\r\n 'ngGreensockDraggable',\r\n 'ngFileUpload',\r\n 'ngMaterialDatePicker',\r\n 'angular-click-outside',\r\n 'angularUUID2'\r\n];\r\n\r\nfunction defineModule(name: string, deps: string[]) {\r\n usedModules.push(name);\r\n angular.module(name, deps);\r\n}\r\n\r\n// Empty out module.js files and modify bundle to include module.js first\r\ndefineModule('Authorization', ['ngResource']);\r\ndefineModule('CaseHandling', ['ngResource']);\r\ndefineModule('CaseFlow', ['ngResource']);\r\ndefineModule('Chat', ['ngResource']);\r\ndefineModule('Colleagues', ['ngResource']);\r\ndefineModule('CustomerService', ['ngResource', 'webStorageModule']);\r\ndefineModule('Dashboard', ['ngResource']);\r\ndefineModule('Housing', ['ngResource']);\r\ndefineModule('Onboarding', ['ngResource']);\r\ndefineModule('Knowledgebase', ['ngResource']);\r\ndefineModule('Mail', ['ngResource']);\r\ndefineModule('Repairs', ['ngResource', 'Housing']);\r\ndefineModule('Sandbox', ['ngResource']);\r\ndefineModule('Search', ['ngResource']);\r\ndefineModule('SelfService', ['ngResource']);\r\ndefineModule('TaskHandling', ['ngResource']);\r\ndefineModule('Telephony', ['ngResource']);\r\n\r\nangular.module('Umbrella', usedModules);\r\n\r\nangular.module('Umbrella').config([\r\n '$mdDateLocaleProvider',\r\n ($mdDateLocaleProvider: any) => {\r\n $mdDateLocaleProvider.firstDayOfWeek = 1;\r\n }\r\n]);\r\n\r\nimport 'polyfills.js';\r\nimport './Modules/Umbrella/Hubs.js';\r\nimport 'Umbrella.js';\r\n\r\nangular\r\n .element(document)\r\n .ready(() => angular.bootstrap(document, ['Umbrella'], { strictDi: true }));\r\n\r\n// import 'ServiceWorker/register.ts';\r\n"],"sourceRoot":""}