{"version":3,"sources":["app.js","routing.js","actions/controllers/actionCategoriesCtrl.js","actions/controllers/actionCategoriesDetailCtrl.js","actions/controllers/actionsCtrl.js","actions/controllers/actionsDetailCtrl.js","actions/controllers/actionsScheduleCtrl.js","actions/controllers/actionsStudentsAttendanceDetailCtrl.js","actions/controllers/actionsStudentsCtrl.js","actions/controllers/actionsStudentsDetailCtrl.js","actions/directives/wbActionCategoryCombo.js","activities/controllers/ActivityReconciliationRecurringInvoiceDetailCtrl.js","activities/controllers/activitiesCtrl.js","activities/controllers/activityInstructorDetailCtrl.js","activities/controllers/activityReconciliationAttendanceCtrl.js","activities/controllers/activityReconciliationCtrl.js","activities/controllers/activityReconciliationDetailCtrl.js","activities/controllers/activityReconciliationIssuedInvoicesCtrl.js","activities/controllers/activityReconciliationReconciliationCtrl.js","activities/controllers/activityReconciliationRecurringInvoicesCtrl.js","activities/controllers/activityReservationDetailCtrl.js","activities/controllers/activityScheduleDetailCtrl.js","activities/controllers/activityScheduleInstructorsCtrl.js","activities/controllers/activityScheduleStudentsCtrl.js","activities/controllers/activitySchedulesCtrl.js","activities/controllers/activityTariffCtrl.js","activities/controllers/activityTariffDetailCtrl.js","activities/controllers/contractTemplateDetailDialogCtrl.js","activities/controllers/contractTemplatesCtrl.js","activities/controllers/contractsCtrl.js","activities/controllers/contractsDetailCtrl.js","activities/controllers/contractsOpzPlusParamsCtrl.js","activities/controllers/contractsSendContractsParamsCtrl.js","activities/controllers/czMsMtRegistryCtrl.js","activities/controllers/czMsMtRegistryDetailCtrl.js","activities/controllers/czMsMtRegistryExportDetailCtrl.js","activities/controllers/czMsMtRegistryStudentRecordsCtrl.js","activities/controllers/galleryInfoEditDialogCtrl.js","activities/directives/wbActivityCompensationTypeCombo.js","activities/directives/wbActivityTariffsCombo.js","activities/directives/wbActivityWeekEditor.js","activities/directives/wbActivityWeekSelector.js","activities/directives/wbContractTemplateCombo.js","activities/directives/wbContractTemplateTypeCombo.js","activities/directives/wbCzMsMtListUniversalCombo.js","activities/directives/wbEndIssueTypeCombo.js","activities/directives/wbReconciliationDataRangeCombo.js","activities/directives/wbRecurrenceUnitTypeCombo.js","activities/filters/aggregateNotes.js","activities/filters/contractScheduleShort.js","activities/filters/contractTemplateType.js","activities/filters/datePartOccupied.js","activities/filters/wbCzMsMtListUniversalFlt.js","activities/filters/wbRecurrenceUnitTypeFlt.js","activities/models/invoiceBase.js","activities/models/scheduleDayBase.js","activities/models/scheduleResourceBase.js","activities/models/scheduleResourceDetailBase.js","activities/models/scheduleResourceDetailDayBase.js","activities/services/activityInstructorSvc.js","activities/services/activityReservationSvc.js","activities/services/activityScheduleSvc.js","activities/services/activityStudentSettingSvc.js","activities/services/activityTariffSvc.js","activities/services/contractSvc.js","activities/services/contractTemplateSvc.js","activities/services/czMsMtRegistrySvc.js","activities/services/invoiceRecurrenceScheduleSvc.js","common/directives/authDirective.js","common/directives/codeMirror.js","common/directives/errorAlert.js","common/directives/toastUIEditor.js","common/directives/wbAccountingBookCombo.js","common/directives/wbActionCombo.js","common/directives/wbActivityCombo.js","common/directives/wbAddressEdit.js","common/directives/wbAgeRangeWithAddCombo.js","common/directives/wbAlerts.js","common/directives/wbAmortizationScheduleModeCombo.js","common/directives/wbColorPicker.js","common/directives/wbCompensationGroupCombo.js","common/directives/wbCompensationGroupMultiSelect.js","common/directives/wbCourseCategoryCombo.js","common/directives/wbCourseCombo.js","common/directives/wbCourseScheduleCombo.js","common/directives/wbDateTimePicker.js","common/directives/wbEmailCategoryCombo.js","common/directives/wbEmployeeCombo.js","common/directives/wbExcuseThresholdTypeCombo.js","common/directives/wbFranchiseCentralsCombo.js","common/directives/wbGrid3.js","common/directives/wbGroupSelect.js","common/directives/wbHtmlEditor.js","common/directives/wbInfoCardBackTypeCombo.js","common/directives/wbJarvisMenu.js","common/directives/wbOnlinePaymentConfigurationCombo.js","common/directives/wbPreviewStateCodeCombo.js","common/directives/wbRecurrenceEditor.js","common/directives/wbReferenceSourceCombo.js","common/directives/wbReservationStartTimeTypeCombo.js","common/directives/wbSchedulerScaleTypeCombo.js","common/directives/wbSearchFilter.js","common/directives/wbSecurityRoleCombo.js","common/directives/wbSecurityShow.js","common/directives/wbSemesterCombo.js","common/directives/wbSemesterDateRangeFilterTypeCombo.js","common/directives/wbSemesterMultiSelect.js","common/directives/wbSequenceEdit.js","common/directives/wbSparkline.js","common/directives/wbSplitter.js","common/directives/wbSubjectCombo.js","common/directives/wbUserLookup.js","common/filters/accountingBook.js","common/filters/activityScheduleFullName.js","common/filters/compensationGroup.js","common/filters/compensationGroups.js","common/filters/courseFullName.js","common/filters/courseType.js","common/filters/emailCategory.js","common/filters/errorIndicator.js","common/filters/franchiseCentralFlt.js","common/filters/groups.js","common/filters/groupsColors.js","common/filters/level.js","common/filters/phase.js","common/filters/previewStateCode.js","common/filters/referenceSource.js","common/filters/reservationStartTimeType.js","common/filters/semester.js","common/filters/subjectCategory.js","common/filters/userRole.js","common/interceptors/http-auth-interceptor.js","common/services/courseCategorySvc.js","common/services/previewHoursSvc.js","common/services/previewInterestSvc.js","common/services/stateCodesSvc.js","common/services/userRolesSvc.js","courses/controllers/coursesAttendanceCtrl.js","courses/controllers/coursesCopyDetailCtrl.js","courses/controllers/coursesCtrl.js","courses/controllers/coursesDetailCtrl.js","courses/controllers/coursesLeadsCtrl.js","courses/controllers/coursesScheduleCtrl.js","courses/controllers/coursesStudentsCtrl.js","courses/controllers/coursesStudentsDetailCtrl.js","courses/controllers/onlineMeetingsCtrl.js","courses/controllers/onlineMeetingsRecordingsCtrl.js","courses/controllers/studentAmortizationScheduleCtrl.js","courses/controllers/subjectsCtrl.js","courses/controllers/subjectsDetailCtrl.js","courses/directives/wbAcceptCompensationsFromEdit.js","courses/directives/wbContentInfoAccessTimeBaselineCombo.js","courses/directives/wbContentInfoAccessTimeTypeCombo.js","courses/directives/wbContentInfoAccessTypeCombo.js","courses/directives/wbFranchiseCentralSubjectsCombo.js","courses/services/onlineMeetingsSvc.js","crm/controllers/formResponsePreviewDetailCtrl.js","crm/controllers/formResponsesCtrl.js","crm/controllers/formsCtrl.js","crm/controllers/formsDetailCtrl.js","crm/controllers/leadsAdmissionDetailCtrl.js","crm/controllers/leadsAssignCourseDetailCtrl.js","crm/controllers/leadsBindUserAndStudentDetailCtrl.js","crm/controllers/leadsCtrl.js","crm/controllers/leadsDetailCtrl.js","crm/controllers/leadsSelectOpenLeadsDialogCtrl.js","crm/controllers/leadsTabsCrmNotesCtrl.js","crm/controllers/leadsTabsCrmNotesDetailCtrl.js","crm/controllers/leadsTabsDetailCtrl.js","crm/controllers/leadsTabsUserHistoryActionsCtrl.js","crm/controllers/leadsTabsUserHistoryCoursesCtrl.js","crm/controllers/levelsCtrl.js","crm/controllers/levelsDetailCtrl.js","crm/controllers/phasesCtrl.js","crm/controllers/phasesDetailCtrl.js","crm/directives/wbFlagCombo.js","crm/directives/wbFormAccessPermissionsTypeCombo.js","crm/directives/wbFormQuestionTypeCombo.js","crm/directives/wbFormTypeCombo.js","crm/directives/wbLeadSourceTypeCombo.js","crm/directives/wbLeadStatusCombo.js","crm/directives/wbPhaseCombo.js","crm/filters/wbFlag.js","crm/filters/wbFormAccessPermissionsType.js","crm/filters/wbLeadConversionType.js","crm/filters/wbLeadSourceType.js","crm/filters/wbLeadStatus.js","crm/filters/wbLevel.js","crm/filters/wbPhase.js","crm/services/leadSvc.js","crm/services/notRegisteredUserSvc.js","crm/services/phaseSvc.js","dashboard/controllers/dashboardCtrl.js","dashboard/controllers/financeSummary.js","dashboard/controllers/semesterCourseSummary.js","finance/controllers/BankCtrl.js","finance/controllers/BankUnimportantRecoveryDetailCtrl.js","finance/controllers/InvoicesCtrl.js","finance/controllers/InvoicesDetailCtrl.js","finance/controllers/accountingBookCtrl.js","finance/controllers/accountingBookDetailCtrl.js","finance/controllers/bankAccountSelectionDialogCtrl.js","finance/controllers/bankPairedInvoiceCtrl.js","finance/controllers/bankSelectionDialogCtrl.js","finance/controllers/compensationsCoursesCtrl.js","finance/controllers/compensationsCtrl.js","finance/controllers/duePaymentsAmortizationScheduleCtrl.js","finance/controllers/duePaymentsCtrl.js","finance/controllers/duePaymentsPaymentsCtrl.js","finance/controllers/duePaymentsSummaryCtrl.js","finance/controllers/duePaymentsUserInvoicesCtrl.js","finance/controllers/duePaymentsUserPaymentsCtrl.js","finance/controllers/onlinePaymentConfigurationCtrl.js","finance/controllers/onlinePaymentConfigurationDetailCtrl.js","finance/controllers/onlinePaymentsCtrl.js","finance/controllers/paymentsCtrl.js","finance/controllers/paymentsDetailCtrl.js","finance/controllers/paymentsSalesReportParamsCtrl.js","finance/controllers/taxDocumentsCtrl.js","finance/directives/wbBankImportTypeCombo.js","finance/directives/wbOnlinePaymentTypeCombo.js","finance/directives/wbYearCombo.js","finance/filters/invoiceValid.js","finance/services/bankSvc.js","finance/services/compensationsSvc.js","finance/services/taxDocumentsSvc.js","franchise/controllers/franchisesAttendanceSummaryCtrl.js","franchise/controllers/franchisesCtrl.js","franchise/controllers/franchisesEmployeesCtrl.js","franchise/controllers/franchisesEmployeesDetailCtrl.js","franchise/controllers/franchisesEmployeesLicenseDetailCtrl.js","franchise/models/franchiseEmployee.js","franchise/services/franchiseSvc.js","main/controllers/mainCtrl.js","messages/controllers/addressListCtrl.js","messages/controllers/addressSelectorCtrl.js","messages/controllers/emailCtrl.js","messages/controllers/emailTemplateLoadDialogCtrl.js","messages/controllers/emailTemplateSaveDialogCtrl.js","messages/controllers/emailTemplatesAttachmentsDetailCtrl.js","messages/controllers/emailTemplatesCtrl.js","messages/controllers/emailTemplatesDetailCtrl.js","messages/controllers/sentEmailStatisticsCtrl.js","messages/controllers/sentEmailsCtrl.js","messages/controllers/sentEmailsEmailDetailCtrl.js","messages/controllers/sentEmailsGroupDetailCtrl.js","messages/controllers/smsCtrl.js","messages/directives/wbEmailTemplateCombo.js","messages/directives/wbRecipientGroupCombo.js","messages/directives/wbRecipientList.js","messages/filters/emailGroupStatus.js","messages/services/emailAttachmentsSvc.js","messages/services/emailTemplatesSvc.js","messages/services/messageTemplateSvc.js","messages/services/messagesSvc.js","messages/services/recipientSvc.js","messages/services/sentEmailsSvc.js","navigation/controllers/asideCtrl.js","navigation/controllers/headerCtrl.js","previewHours/controllers/previewHoursCtrl.js","previewHours/controllers/previewHoursSucessSummaryCtrl.js","previewHours/controllers/previewInterestCtrl.js","previewHours/controllers/stateCodesCtrl.js","promo/controllers/membershipCtrl.js","promo/filters/wbMembershipAppliesTo.js","rents/controllers/itemTypesCtrl.js","rents/controllers/itemTypesDetailCtrl.js","rents/controllers/rentCategoriesCtrl.js","rents/controllers/rentCategoriesDetailCtrl.js","rents/controllers/rentCategoryGroupsCtrl.js","rents/controllers/rentCategoryGroupsDetailCtrl.js","rents/controllers/rentDetailAddItemDetailCtrl.js","rents/controllers/rentItemTabsRentsCtrl.js","rents/controllers/rentItemsCtrl.js","rents/controllers/rentItemsDetailCtrl.js","rents/controllers/rentTabsItemsCtrl.js","rents/controllers/rentsCtrl.js","rents/controllers/rentsDetailCtrl.js","rents/directives/wbItemConditionTypeCombo.js","rents/directives/wbItemSelectionTypeCombo.js","rents/directives/wbRentCategoryCombo.js","rents/directives/wbRentCategoryGroupCombo.js","rents/directives/wbRentHourStartTypeCombo.js","rents/directives/wbRentItemCombo.js","rents/directives/wbRentItemMultiSelect.js","rents/directives/wbRentItemTypeCombo.js","rents/directives/wbRentStatusTypeCombo.js","rents/directives/wbRentingPeriodTypeCombo.js","reports/controllers/courseStudentFluctuationCtrl.js","reports/controllers/coursesAttendanceSummaryCtrl.js","reports/controllers/franchiseAttendanceSummaryCtrl.js","reports/controllers/oneOffsSummaryCtrl.js","reports/controllers/registeredAttendanceCtrl.js","reports/controllers/registrationsSummaryCtrl.js","reports/directives/wbCourseStudentFluctuationTypeCombo.js","reports/services/reportsSvc.js","reservations/controllers/domainsCtrl.js","reservations/controllers/domainsDetailCtrl.js","reservations/controllers/domainsSpecializationsCtrl.js","reservations/controllers/domainsSpecializationsDetailCtrl.js","reservations/controllers/reservationSchedulesCtrl.js","reservations/services/domainsSpecializationsSvc.js","rfidCards/controllers/attendanceLogCtrl.js","rfidCards/controllers/attendanceLogDetailCtrl.js","rfidCards/controllers/attendanceLogMpsvReportParamsCtrl.js","rfidCards/controllers/attendanceLogMpsvStudentReportParamsCtrl.js","rfidCards/controllers/attendanceLogSupportDetailCtrl.js","rfidCards/controllers/deviceRegistrationCtrl.js","rfidCards/controllers/deviceRegistrationDetailCtrl.js","rfidCards/controllers/driverDownloadDetailCtrl.js","rfidCards/controllers/efsReportImportDetailCtrl.js","rfidCards/controllers/logUploadContactCtrl.js","rfidCards/directives/rfidCardUserTypeCombo.js","rfidCards/filters/rfidCardUserType.js","rfidCards/services/rfidCardsSvc.js","rfidCards/services/rfidDeviceRegistrationSvc.js","schedule/controllers/scheduleCourseDetailCtrl.js","schedule/controllers/scheduleCtrl.js","schedule/controllers/scheduleEventDetailCtrl.js","setting/controllers/ageRangesCtrl.js","setting/controllers/ageRangesDetailCtrl.js","setting/controllers/classroomAvailabilitySchedulesCtrl.js","setting/controllers/classroomsCtrl.js","setting/controllers/classroomsDetailCtrl.js","setting/controllers/compensationGroupsCtrl.js","setting/controllers/compensationGroupsDetailCtrl.js","setting/controllers/compensationTransferDetailCtrl.js","setting/controllers/compensationTransferDetailTransferDetailCtrl.js","setting/controllers/courseTypesCtrl.js","setting/controllers/courseTypesDetailCtrl.js","setting/controllers/holidayCalendarsCtrl.js","setting/controllers/holidayCalendarsDetailCtrl.js","setting/controllers/newsCtrl.js","setting/controllers/newsDetailCtrl.js","setting/controllers/preferredBookingDetailCourseRegistrationDetailCtrl.js","setting/controllers/preferredBookingDetailCtrl.js","setting/controllers/semestersCtrl.js","setting/controllers/semestersDetailCtrl.js","setting/controllers/terminalsCtrl.js","setting/controllers/terminalsDetailCtrl.js","setting/directives/wbAmendTypeCombo.js","setting/directives/wbCourseTypeImageCombo.js","setting/directives/wbDestinationCourseCombo.js","setting/directives/wbHolidayCalendarCombo.js","setting/directives/wbHolidayCalendarWithAddCombo.js","setting/services/compensationTransferSvc.js","setting/services/courseTypeImageSvc.js","setting/services/holidayCalendarSvc.js","setting/services/newsSvc.js","setting/services/preferredBookingSvc.js","storage/controllers/picturesCtrl.js","storage/controllers/picturesDetailCtrl.js","storage/controllers/picturesSelectDlgCtrl.js","storage/controllers/protectedStorageCtrl.js","storage/controllers/protectedStorageSelectDlgCtrl.js","storage/services/picturesSvc.js","storage/services/protectedStorageSvc.js","survey/controllers/surveyAnswerDetailCtrl.js","survey/controllers/surveyAnswersCtrl.js","survey/controllers/surveyDetailCtrl.js","survey/controllers/surveysCtrl.js","survey/directives/wbSurveyCombo.js","survey/directives/wbSurveyQuestionTypeCombo.js","survey/services/surveyResponseSvc.js","system/controllers/accountingSettingsCtrl.js","system/controllers/clientSettingsCtrl.js","system/controllers/dataExportHistoryCtrl.js","system/controllers/htmlContentCtrl.js","system/controllers/mainSettingsCtrl.js","system/controllers/notificationSettingsCtrl.js","system/controllers/settingSettingsCtrl.js","system/controllers/settingsCtrl.js","system/controllers/smsHistoryCtrl.js","system/controllers/textsSettingsCtrl.js","system/directives/wbClientThemeCombo.js","system/directives/wbDueDateTypeCombo.js","system/directives/wbLanguageAliasCombo.js","system/directives/wbMandatoryTypeCombo.js","system/directives/wbNotificationTypeCombo.js","system/directives/wbRfidLogoTypeCombo.js","system/directives/wbStorageImageCombo.js","system/services/accountingSettingsSvc.js","system/services/contentSvc.js","system/services/dataExportHistorySvc.js","system/services/dataExportSettingSvc.js","system/services/mainSettingsSvc.js","system/services/smsHistorySvc.js","users/controllers/EmployeesTimeSheetReportParamsCtrl.js","users/controllers/consentsDefinitionsCtrl.js","users/controllers/consentsDefinitionsDetailCtrl.js","users/controllers/employeeAvailabilitySchedulesCtrl.js","users/controllers/employeesCtrl.js","users/controllers/employeesDetailCtrl.js","users/controllers/groupsCtrl.js","users/controllers/groupsDetailCtrl.js","users/controllers/referenceSourceCtrl.js","users/controllers/referenceSourceTimeDevelopmentCtrl.js","users/controllers/requestConsentFromAllCtrl.js","users/controllers/selectWeekDateRangeDlg.js","users/controllers/studentsActionsCtrl.js","users/controllers/studentsAttendanceDetailCtrl.js","users/controllers/studentsAttendanceSummaryCtrl.js","users/controllers/studentsCoursesCtrl.js","users/controllers/studentsCtrl.js","users/controllers/studentsDetailCtrl.js","users/controllers/studentsTaxDeductionReportParamsCtrl.js","users/controllers/userRolesCtrl.js","users/controllers/userRolesDetailCtrl.js","users/controllers/usersConsentsCtrl.js","users/controllers/usersConsentsDetailCtrl.js","users/controllers/usersCtrl.js","users/controllers/usersDetailCtrl.js","users/controllers/usersStudentsCtrl.js","users/directives/wbAvailabilityScheduleEditor.js","users/directives/wbConsentDefinitionCombo.js","users/directives/wbConsentTypeCombo.js","users/directives/wbRfidAccessGroupTimeScheduleDayEditor.js","users/directives/wbRfidAccessTypeCombo.js","users/filters/wbAvailabilityScheduleFilter.js","users/filters/wbConsentType.js","users/filters/wbRfidAccessGroupTimeScheduleDayFilter.js","users/services/consentDefinitionSvc.js","users/services/employeeAvailabilitySchedulesSvc.js","users/services/groupSvc.js","activities/models/employee/employee.js","activities/models/employeeDetail/employeeDetail.js","activities/models/employeeDetail/employeeDetailDay.js","activities/models/reconciliation/reconciliation.js","activities/models/reconciliation/reconciliationAttendance.js","activities/models/recurringInvoiceDetail/recurringInvoice.js","activities/models/recurringInvoiceDetail/recurringSchedule.js","activities/models/schedule/schedule.js","activities/models/schedule/scheduleWeek.js","activities/models/scheduleDetail/scheduleDetail.js","activities/models/scheduleDetail/scheduleDetailDay.js","activities/models/student/student.js","activities/models/studentDetail/studentDetail.js","activities/models/studentDetail/studentDetailDay.js","wb-directives.js","wb-directives.tpl.js"],"names":["wbApp","angular","module","run","$rootScope","$translate","$on","event","currentRoute","previousRoute","title","instant","label","convertDateStringsToDates","input","key","value","date","hasOwnProperty","isNaN","moment","ISO_8601","isValid","toDate","convertDatesToDateString","_","cloneDeepWith","Date","endsWith","utc","format","config","$logProvider","debugEnabled","$datepickerProvider","extend","defaults","startWeek","autoclose","container","useNative","dateFormat","$timepicketProvider","timeFormat","$modalProvider","animation","placement","backdrop","$popoverProvider","html","localStorageServiceProvider","setPrefix","setStorageType","setNotify","$httpProvider","transformResponse","push","data","headerGetter","transformRequest","header","$translateProvider","useSanitizeValueStrategy","preferredLanguage","prototype","toISOString","this","constant","tenantInfo","uiGmapGoogleMapApiProvider","configure","v","libraries","Number","pad","size","s","String","length","$routeProvider","when","templateUrl","controller","otherwise","redirectTo","$scope","$modal","subjectsSvc","setSelectedActionCategory","actionCategory","selectedActionCategory","gridSettings","columns","dataField","caption","dataType","width","sortOrder","e","actionCategories","getAllForActionsAsync","ActionCategory","onRowSelected","onRowEdit","detailDialogPromise","$promise","then","model","copy","show","onRowAdd","createNew","onRowDelete","remove","tabs","template","activeTab","scope","$new","tenantSettingSvc","enableNewClientDesign","settings","modelOrig","detailIsUnchanged","equals","onDetailSave","success","$hide","error","detailError","isSaving","id","update","insert","semesterSvc","courseSvc","securitySvc","courseRegistrationSvc","setSelectedAction","action","refresh","selectedAction","gridInstance","clearSelection","$broadcast","isInAccountingBookRole","isInRole","filteredActions","getDefaultAsync","semester","semesterID","actions","getAllActionsAsync","refreshActionRecord","courseID","selectRows","getSemesterPercentFilled","getSemesterFilled","getSemesterCapacity","sumBy","onFilterApplied","rows","onSemesterChange","name","raw","precision","customCommands","text","isVisible","callback","getAllForCourse","forEach","courseRegistration","sendRegistrationNotification","courseRegistrationID","onRowCopy","collection","onActionSave","$watch","newValue","oldValue","onCourseSave","detailTabs","onDeletePictureBtnClick","picture","pictures","imageUri","picturesSelectDlgPromise","showPictureSelect","onPicturesSelected","p","find","courseScheduleSvc","isActive","loaded","setCanAddNewRow","actionSchedules","canAddNewRow","actionInd","getAllAsync","shouldDisableAdd","selectedSchedule","eventDetailDialogPromise","hideActionChange","onSave","onActionScheduleChanged","sendEmailNotification","sendSmsNotification","$emit","attendanceSvc","isBusy","getStudentCourseAttendance","studentID","atts","onAfterSuccessSave","$q","$window","$filter","gridSortSvc","tenantSettings","firstLesson","setUpGrid","columnOption","allowMultiAttendance","actionRegistrations","calculateSortValue","sortHumanFullName","calculateCellValue","rowData","contactPhone","type","onRowPrepared","rowType","component","getKeyByRowIndex","rowIndex","attendanceStatusNotPresent","rowElement","addClass","onCellPrepared","columnIndex","cellElement","mousemove","studentBirthday","attr","row","arrear","addPaymentPromise","isAddDuePayment","paymentDetail","paymentID","invoiceForType","invoiceID","amount","selectedDate","open","attendanceDetailDialogPromise","onActionRegistrationChanged","notificationSent","showArrearInsteadOfPayments","column","selectedRegistration","webooker_courses_models","CourseRegistration","all","actionRegistration","messageBoxSvc","localStorageService","extendModel","setIsBusy","initializeModel","registeredAttendance","allowDiscounts","calcExpectedDueDate","registrationDate","calculatedDueDate","dueDate","errorResult","isReady","tab","disabled","onRegistrationDateChange","onStudentChange","onAttendanceCountChange","updateReservedPlaces","reservedPlaces","confirmUpdate","updateInvoice","showConfirmClientNotification","userSetting","showSendSmsNotification","notificationConfig","saveManualAdjustmentTextToLocalStorage","invoice","isModified","showMessageDlg","message","buttons","isSupported","manualAdjustmentLine","lines","line","lineType","runtimeManualAdjustmentType","set","percent","addInvoiceLine","manualAdjustmentLineType","newLine","addManualAdjustmentLine","get","removeInvoiceLine","index","removeManualAdjustmentLine","addManualAdjustmentLineDropdown","click","directive","$timeout","formatResult","formatSelection","restrict","require","priority","link","elm","attrs","ctrl","models","$","select2","placeholder","dropdownAutoWidth","allowClear","minimumResultsForSearch","sortBy","a","localeSort","matcher","term","toUpperCase","indexOf","$render","$viewValue","$parsers","unshift","viewValue","parseInt","$formatters","bind","$observe","invoiceRecurrenceScheduleSvc","minDate","startDate","startOf","subtract","onScheduleSave","invoiceRecurrenceScheduleID","activitySvc","classroomSvc","accountingBookSvc","protectedStorageSvc","refreshData","reselect","resolve","reject","selectedRowKeys","getSelectedRowKeys","getAllBySemesterIDAsync","activities","setSelectedActivity","activity","selectedActivity","loadGalleryInfo","activityDetail","picturesFolders","galleryInfoBusy","findGalleryInfoByPaths","galleryInfoData","keyBy","o","galleryDirectoryPath","protectedStorageEdit","filterOptions","filterText","defaultAccountingBookID","classroomID","isNew","accountingBookID","activityDetailOrig","promises","modelPromise","getByActivityID","activityID","onActivityDetailSave","hide","protectedStorageSelectDlgPromise","galleryInfoEditDlgPromise","showProtectedStorageSelect","selectFoldersOnly","onFilesSelected","files","objectUri","removePicture","pictureUrl","splice","startEditInfo","galleryDirectory","onGalleryInfoSave","newModel","activityInstructorSvc","employeeDetailModel","days","onDataSourceChange","applyChanges","instructorsOrig","onEmployeeChange","employeeID","getAllByEmployeeAndActivity","instructorDetailModel","instructors","schedules","selection","createEmployeeDetailModel","onWeekSelectionChange","call","saveActivityInstructorDetailChanges","saveAsync","onActivityInstructorSave","reason","activityInstructorDetailError","activityReconciliationSvc","attendance","reloadData","getStudentsAttendanceByActivity","reasonCode","acivityReconciliationAttendanceFilterOptions","acivityReconciliationAttendanceGridOptions","sortInfo","fields","directions","columnDefs","field","cellFilter","displayName","noCommandColumn","disabledField","loadData","selectedStudent","students","getStudentsByActivity","reconciliationDataRange","fromDate","onStudentSelected","setUpRemainingExcuses","getAvailableExuses","remainingExcusesSparklineData","map","excusesByDate","item","noOfExcuses","broadcastStudentSelectionChanged","studentFullName","onDataRangeChanged","hasAttendance","sparklineOpts","tooltipFormatter","sparkline","options","x","y","refreshByStudentAndActivity","activeSemester","semesterId","onActivityChange","student","gridOptions","hideFooter","multiSelect","reconcileMinDate","reconcileMaxDate","reconcileFrom","reconcileTo","reconciliation","getReconciliationDetail","activityReconciliationID","reconciliationNameChanged","tariffFullName","getMinDateRange","getMaxDateRange","activityStudentSetting","tariffName","tariffPrice","i","isSelected","reconciliationOrig","add","getToDateRange","selectDateRange","getReconciliationName","rangeChanged","from","to","resetFields","onReconciliationNameChange","newName","onSelectionChanged","isSaveDisabled","isInvoiceEmpty","saveChanges","updateReconciliationDetail","insertReconciliationDetail","invoiceSvc","relatedInvoices","getInvoiceEvidenceByActivityAndStudent","relatedGridFilterOptions","relatedGridOptions","smHide","mdHide","sort","align","customCmds","command","disabledAreSelectable","hideDelete","isRecurring","isActivite","getByStudentAndActivity","acivityReconciliationReconciliationFilterOptions","acivityReconciliationReconciliationGridOptions","selected","onPrintInvoice","onSendReconciliationInfo","deleteReconciliationDetail","sendReconciliationNotification","recurringInvoices","getAllForStudentAndActivity","acivityReconciliationRecurringInvoiceFilterOptions","acivityReconciliationRecurringInvoicesGridOptions","activityReservationSvc","activityStudentSettingSvc","studentDetailModel","reservationsOrig","res","getAllByStudentAndActivity","reservationDetailModel","reservations","setting","createStudentDetailModel","activityTarifOrig","saveActivityReservationDetailChanges","tar","activitySetting","resources","onActivityReservationSave","activityReservationDetailError","activityScheduleSvc","scheduleDetailModel","scheduleWeeks","apply","saveActivityDetailChanges","activityScheduleDetailError","weeks","onScheduleDetailSave","activityWeeks","sw","selectedWeeks","sweek","w","week","weekNo","startDay","isSame","webooker_acivity_models","ScheduleDetail","slice","getWeekModelByIntervals","singlePeriodProgramOnly","acivityScheduleInstructorsGridOptions","sortHumanFullName2","monday","tuesday","wednesday","thursday","friday","saturday","notes","activityInstructorsDetailError","instructor","activityInstructorsnDetailError","acivityScheduleStudentsGridOptions","sortable","activitiesForSemester","first","changeActivity","activityId","realod","getWeeksAsync","onWeekSelected","scheduleDetailModelOrig","activityTariffSvc","activityTariffs","getAllNonDeletedAsync","activityTariffID","contractTemplateSvc","isLoading","onContractTemplateTypeChange","typeId","getSampleByType","templateSample","templateData","err","onSaveSuccessful","htmlEditorComponent","setContractTemplateId","newId","contractTemplateId","option","modelWasModified","setVariables","variables","getById","getVariablesByType","contractTemplateType","endUpdate","modelIsUnchanged","onReloadTemplate","onTemplateSelected","onNewTemplate","showNewDialog","dialogPromise","onRenameTemplate","onSaveTemplate","onDeleteTemplate","deleteTemplate","onGeneratePreview","window","htmlEditorOptions","height","valueType","readOnly","toolbar","items","acceptedValues","multiline","tableContextMenu","enabled","mediaResizing","allowSoftLineBreak","dataSource","escapeChar","bindingOptions","onContentReady","onValueChanged","undefined","customizeModules","history","delay","maxStack","contractSvc","groupSvc","preFilter","contractsRaw","groups","groupIDs","values","customFilter","contracts","filter","intersectionWith","studentGroupsIds","g1","g2","getAll","setSelectedContract","onPrintContractByType","contract","selectedContract","keyExpr","shouldShowColumnChooser","visible","fullName","studentName","studentMiddleName","studentSurname","userName","userMiddlename","userSurname","contractSchedules","encodeHtml","allowFiltering","allowHeaderFiltering","accountingBookId","getContractTemplateIdByType","contractTemplatesInfos","sendContractsParamsDialogPromise","beginGroup","opzPlusParamsDialogPromise","onContractSave","transformModelForEdit","onDeleteSchedule","schedule","onAddSchedule","active","startTime","endTime","food","sunday","onActiveClick","daySchedule","modelForSave","transformModelForSave","isFormValid","groupId","endOf","toJSON","editContractModel","contractTemplateType0Enabled","contractTemplateType0","contractTemplateType1Enabled","contractTemplateType1","contractTemplateType2Enabled","contractTemplateType2","contractTemplateType3Enabled","contractTemplateType3","contractTemplateType4Enabled","contractTemplateType4","contractTemplateType6Enabled","contractTemplateType6","contractTemplateType7Enabled","contractTemplateType7","typesToSend","sendContracts","czMsMtRegistrySvc","findLatestByActivity","czMsMtRegistry","setSelectedStudent","record","selectedRecord","parentFullName","userMiddleName","studentId","recordId","shouldDisableDelete","isLast","exportDialogPromise","dataP","onRegistryDetailSave","detailSaveAsNewImpl","dataCopy","detailSaveImpl","lastValidatedModel","changeStudentId","changeActivityId","onSaveAsANewRecord","validate","onValidate","isValidating","alert","requireSpecialEducationChanged","requireSpecialEducation","setRequireSpecialEducation","validFromUtc_help","kodVety_help","zmendat_help","validToUtc_help","zahdat_help","izo_help","cast_help","newExportModel","getInfoByRange","activitiesComboInstance","activityIds","initExportResponse","exportResponse","errors","filesToDownload","onDateRangeChanged","isBefore","isGenerating","getDownloadUrl","downloadUri","getFileName","split","pop","onGenerateExport","exportToXml","result","onErrorClick","onDruhProvozuChanged","prumDobaCelodenniProvoz","prumDobaPolodenniProvoz","prumDobaInternatniProvoz","activitiesCombo","displayExpr","valueExpr","showSelectionControls","maxDisplayedTags","itemTemplate","onInitialized","selectedStudentInd","studentRecords","findByStudent","studentInd","studentRecordsGridSettings","selectedRecord1","images","detailGalleryEditTabs","updateGalleryInfo","paymentType","on","$apply","$setViewValue","tariff","price","ngModel","replace","inLineNote","scheduleOnly","foodSupport","singlePeriod","elem","selectedDay","onNoteClick","day","createScheduleModel","restrictToSchedules","Schedule","newRow","idx","Object","defineProperty","enumerable","configurable","r","c","val","ngChange","showClearButton","init","getAllWithFilter","listName","allLists","lists","multiple","maximumSelectionSize","Array","isArray","join","n","f","reduce","asyncResult","$resolved","$stateful","ns","InvoiceBase","isReccuring","invoiceLineKindergartenCustomUnitPrice","invoiceLineKindergartenOneOffUnitPrice","_invoiceLineKindergartenLunchQty","_invoiceLineKindergartenSnackQty","_invoiceLineKindergartenLatePickupQty","initLocalization","invoiceLineKindergartenFeeName","invoiceLineKindergartenFeeReccuringName","invoiceLineKindergartenOneOffName","invoiceLineKindergartenLunchName","invoiceLineKindergartenSnackName","invoiceLineKindergartenLatePickupName","invoiceLineKindergartenCustomName","initDataByInvoiceDTO","invoiceDTO","invoiceDate","operatorID","customerOperatorID","taxDate","isVATPayer","lineItems","li","invoiceLineType","invoiceLineKindergartenSnackQty","quantity","invoiceLineKindergartenSnackUnitPrice","unitPrice","invoiceLineKindergartenLunchQty","invoiceLineKindergartenLunchUnitPrice","invoiceLineKindergartenLatePickupQty","invoiceLineKindergartenLatePickupUnitPrice","invoiceLineKindergartenFeeQty","invoiceLineKindergartenFeeUnitPrice","invoiceLineKindergartenFeeReccuringQty","invoiceLineKindergartenFeeReccuringUnitPrice","invoiceLineKindergartenOneOffQty","invoiceLineKindergartenCustomQty","getInvoiceDTO","total","invoiceSumPrice","customerStudentID","invoiceLineKindergartenSnackPrice","invoiceLineKindergartenLunchPrice","invoiceLineKindergartenLatePickupPrice","invoiceLineKindergartenFeeReccuringPrice","invoiceLineKindergartenFeePrice","invoiceLineKindergartenOneOffPrice","invoiceLineKindergartenCustomPrice","notRounded","Math","round","noOfLunches","noFirstSnacks","noSecondSnacks","sumLatePickupHours","ScheduleDayBase","normalizeDate","mvalue","hours","minutes","getUnboundedMinTimeValue","getUnboundedMaxTimeValue","getMinTimeValue","propertyName","nullIfNoValue","valueSet","d","prop","hour","minute","getMaxTimeValue","maxDate","getSchedulesByDay","sch","dayOfWeek","dateIndicia","firstPeriodStartDate","firstPeriodEndDate","secondPeriodStartDate","secondPeriodEndDate","isoWeekday","isTimeIndeterminate2","daySchedules","min","valueDate","valueMin","scheduleValue","schDate","schMin","isBoolIndeterminate2","ScheduleResourceBase","initialize","selectedSchedules","getSchedulesByDayImpl","timeCompare","vr","p1","p2","getScheduleIndiciesByDay","fpsd","spsd","selectedSch","isNullOrWhitespace","daysEnum","ScheduleResourceDetailBase","resourceID","createDayModel","dayName","notScheduled","notScheduledAM","notScheduledPM","cnt","amActive","pmActive","ScheduleResourceDetailDayBase","constructor","parent","getTimeValue","dayReservations","relevantReservations","getRelevantReservations","ret","activityScheduleID","reservation","getReservationsByDay","notScheduledProperty","getReservationByScheduleID","normalizeTimeValue","scheduleDate","scheduleMinutes","normalizedValue","valueMinutes","year","month","isTimeIndeterminate","rDate","rvalue","getBoolValue","getStringValue","isBoolIndeterminate","isStringIndeterminate","getAMNotScheduled","getPMNotScheduled","calculateProperties","createReservation","applyChangesToTimeProperty","applyChangesToBoolProperty","applyChangesToStringProperty","getReservationIndexByScheduleID","hasFirstPeriod","hasSecondPeriod","firstPeriodStartDateChanged","firstPeriodEndDateChanged","secondPeriodStartDateChanged","secondPeriodEndDateChanged","notesChanged","rindex","_firstPeriodStartDate","_firstPeriodEndDate","_secondPeriodStartDate","_secondPeriodEndDate","_notes","firstPeriodStartDateMin","firstPeriodEndDateMax","secondPeriodStartDateMin","secondPeriodEndDateMax","firstPeriodStartDateIndeterminate","firstPeriodEndDateIndeterminate","secondPeriodStartDateIndeterminate","secondPeriodEndDateIndeterminate","notesIndeterminate","firstPeriodStartDateNotScheduled","firstPeriodEndDateNotScheduled","secondPeriodStartDateNotScheduled","secondPeriodEndDateNotScheduled","getActive","setActive","getAmActive","setAmActive","getPmActive","setPmActive","factory","$resource","$http","repositorySvc","notificationSvc","BuildWeekModel","activityinstructors","employeeHash","employee","Employee","employeeFullName","scheduleIDs","sidx","deferred","defer","promise","method","url","status","headers","fatalNotify","notifyError","translateError","EmployeeDetail","notifyInfo","activityReservations","studentHash","Student","StudentDetail","bySemesterAndActivity","lastSemesterID","lastActivityID","ActivitySchedules","getAllBySemesterAndActivityID","save","reload","getAsync","customGet","scheduleModel","endDate","toBeSendToServer","getToBeSendToServer","ActivityStudentSetting","delete","successCallback","errorCallback","activityStudentSettingID","origData","nonDeleted","ActivityTariffs","allActivityTariffs","isDeleted","entity","entityInserted","entityUpdated","entityRemoved","Contract","transformDayModelForEdit","dayModel","transformDayModelForSave","midnight","diff","userId","dfAccountingBookPromise","acc","expanded","customPost","rentCategoryId","customDelete","customPutWithParams","userFullName","contractTemplatesIds","contractId","contractTemplateTypes","customPostWithParams","ContractTemplate","contractTemplates","m","CzMsMtRegistry","getStudent","getActivity","export","saveToLocalStorage","izo","cast","provoz","jazyK_O","fromDTOToModel","listsCache","fromModelToDTO","validFromUtc","okresb","okresb2","dto","startsWith","substring","trida","kstpr","stpr","sP_OBVOD","koD_ZAH","zpusob","koD_VETY","koD_ZMEN","druhProvozu","rozliseni","koD_ZAKA","tyP_TR","tyP_TR2","zvj","nadani","sz","zz","pspo","iD_ZNEV","rodc","personalIDNumber","birthday","pohlavi","gender","last","assign","fromDateUtc","toDateUtc","InvoiceRecurrenceSchedule","query","reccurenceUnitTypeID","repeatEveryNoOfUnits","endAfterNoOfIssues","RecurringSchedule","initData","getBySemesterIDAndActivityID","endAtSpecificDate","endIssueTypeID","defaultSnackPrice","defaultLunchPrice","getDTO","console","log","uiCodemirrorConfig","compile","isUndefined","CodeMirror","Error","postLink","iElement","iAttrs","codemirrot","uiCodemirrorAttr","codemirrorDefaultsKeys","codemirror","codeMirror","codemirrorOptions","$eval","uiCodemirror","uiCodemirrorOpts","tagName","fromTextArea","cm_el","append","newCodemirrorEditor","keys","newValues","isObject","setOption","safeViewValue","setValue","instance","getValue","$evalAsync","uiRefreshAttr","uiRefresh","newVal","oldVal","isFunction","onLoad","serverError","languageService","currentLangKey","transformMarkdownIn","element","editor","toastui","Editor","el","initialValue","hideModeSwitch","initialEditType","language","events","change","markDown","getMarkdown","toolbarItems","removeHook","test","setHTML","setMarkdown","isDefault","subjectName","course","filled","capacity","courses","newCourses","linkSemesterId","newActivities","location","iElem","defaultLocation","longitude","latitude","mapZoom","markerOptions","draggable","labelContent","labelAnchor","labelClass","control","mapCenter","markerEvents","dragend","marker","eventName","args","lat","lng","markerPos","getPosition","ageRangeSvc","disableAddBtn","onAddClick","onDataSaved","ageRangeID","$alert","queue","getQueue","$watchCollection","newCollection","oldCollection","newMessage","myAlert","content","amortizationScheduleMode","onColorClick","color","target","css","webooker_utils","ColorUtils","rgbToInt","colorUtils","intToRgb","children","compensationGroupSvc","getLookupActiveAsync","$modelValue","newModels","courseCategorySvc","courseCategories","orderBy","courseCategory","courseCategoryID","courseFullName","courseSchedule","teacher","courseId","getAllSortedAsync","courseScheduleID","newSchedules","datetimepicker","pickDate","pickTime","useMinutes","useSeconds","minuteStepping","defaultDate","disabledDates","icons","time","up","down","picker","getDate","setDate","inputVal","employeeSvc","employees","getAllActiveAsync","newEmployees","franchiseCentral","alias","tenantID","franchiseCentrals","fc","gridDataSource","onDelete","onEdit","onAdd","onCopy","resource","idPrefix","tElem","tAttrs","pre","clickTimer","lastRowCLickedId","idPrefixFixed","defaultOptions","cacheEnabled","rowAlternationEnabled","showRowLines","focusStateEnabled","hoverStateEnabled","filterRow","searchPanel","paging","pageSize","pager","showInfo","showPageSizeSelector","showNavigationButtons","showOperationChooser","groupPanel","mode","editing","allowUpdating","allowDeleting","allowAdding","allowColumnResizing","remoteOperations","selectedRowsInfo","prepareToolButtons","selectedRowsData","onRowClick","getSelectedRowsData","clearTimeout","raiseOnEdit","setTimeout","masterDetail","columnChooser","stateStoring","storageKey","ignoreColumnOptionNames","calculateFilterExpression","filterValue","selectedFilterOperation","filterExpressionWithoutAccents","shouldDisableEdit","detailSetting","detailOnSelectionChanged","detailonRowPrepared","cellTemplate","allowGrouping","allowHiding","allowReordering","allowResizing","allowSorting","commandMenuDS","detailCommandMenuDS","menuItemClicked","itemData","showDeleteMsg","contextMenu","DevExpress","ui","dxContextMenu","appendTo","onItemClick","position","offset","alternativeInvocationMode","shouldDisableExportMenu","disable","shouldShowAdd","shouldDisableCopy","shouldShowEdit","shouldShowCopy","shouldShowDelete","menuItemCanBeginGroup","menu","atLeastOneVisible","isDisabled","isBeginGroup","toLowerCase","commandColHeaderBtn","icon","onClick","submenuShowing","ds","menuItem","detailSubmenuShowing","detailMenuItemClicked","_options","parentData","disableDeleteConfirmation","headerCellTemplate","showInColumnChooser","autoSizeGrid","repaint","newHeight","significantParent","closest","outerHeight","prevAll","nextAll","removeToolButtons","exportMenuElementId","pagerDiv","filterRowSwithElementId","exportButtonElementId","exportDiv","contextExportMenu","Globalize","formatMessage","workbook","ExcelJS","Workbook","worksheet","addWorksheet","notVisibleColumns","beginUpdate","col","excelExporter","exportDataGrid","autoFilterEnabled","xlsx","writeBuffer","buffer","fileName","saveAs","Blob","prependTo","dxButton","stateResetButtonElementId","dxDropDownButton","useSelectMode","splitButton","stylingMode","hint","dropDownOptions","minWidth","showColumnChooser","state","onButtonClick","filterExpr","getCombinedFilter","gridData","DataSource","store","paginate","load","done","origOnCellPrepared","onDisposing","off","onSplitterPaneResized","onActiveTabChanged","post","parentTab","description","groupID","resizeEditor","prev","scrollWindow","taBind","jarvismenu","accordion","speed","closedSign","openedSign","fn","opts","$this","each","parents","slideDown","is","visibleIndex","close","parentIndex","slideUp","removeClass","hasClass","onlinePaymentConfigurationSvc","getProviderTypeStr","providerType","configs","stateCodesSvc","stateCode","stateCodes","ngEnable","recurrence","defaultRecurrence","repeatByWeeks","endByType","range","rangeDays","endByOccurenceCount","repeatEveryWeekday","weekDayIdx","referenceSourceSvc","added","reservationStartTimeType","required","searchText","userRolesSvc","roles","attributes","wbSecurityShow","shouldReplaceContent","wbSecurityUnauthorizedContent","dateFilter","isMain","semesters","setDefault","destroyed","initialized","read","amt","autoNumeric","aSign","aDec","aSep","altDec","pSign","vMin","vMax","parseFloat","render","isString","methods","setMinHeightAndMinWidth","$splitPane","components","getComponents","minHeight","divider","mousedownHandler","preventDefault","$divider","match","pageX","pageY","moveEventHandler","pageXof","pageYof","fixedTopHandler","fixedBottomHandler","horizontalPercentHandler","fixedLeftHandler","fixedRightHandler","verticalPercentHandler","document","one","trigger","getComponentsSizes","property","firstComponentSize","lastComponentSize","attachResizeHandler","internalHandler","lastComponentMinHeight","maxfirstComponentHeight","splitPane","offsetHeight","setTop","firstComponentMinHeight","maxLastComponentHeight","setBottom","lastComponentMinWidth","maxFirstComponentWidth","offsetWidth","setLeft","firstComponentMinWidth","maxLastComponentWidth","setRight","maxFirstComponentHeight","topOffset","offsetTop","top","max","bottomOffset","bottom","splitPaneHeight","leftOffset","offsetLeft","left","rightOffset","right","splitPaneWidth","originalEvent","touches","style","$splitPanes","grep","arguments","it","jQuery","transclude","splitPaneProperties","addComponent","addDivider","bottomPercent","localFirstComponentSize","localLastComponentSize","$firstComponent","$lastComponent","rightPercent","marginRight","marginLeft","marginBottom","marginTop","paneCtrl","subject","getAllWithActiveFranchiesesAsync","userSvc","email","phone","ajax","page","pageNo","results","more","initSelection","params","userID","getActivityScheduleFullName","getLookup","flatten","getCourseFullName","courseTypeSvc","courseTypeID","levelSvc","phaseSvc","httpBuffer","loginConfirmed","configUpdater","updater","retryAll","responseInterceptors","response","ignoreAuthModule","$injector","retryHttpRequest","previewHours","forSemesterID","PreviewHour","register","excuse","rebook","getPreviewHoursSuccessStats","getAllForClassroomAsync","registerOnCourse","successResult","excuseFromLesson","bookOnLessonAgain","getPreviewHoursSuccessGraph","cols","reference","noOfPreviewHours","noOfRegistrationsInTheSameSemester","noOfRegistrationsInAnySemester","previewInterests","PreviewInterest","book","bookLesson","interestID","StateCode","sc","userRoles","UserRole","userRolesDict","ConvertArrayToProperties","array","sf","extendWithRfidSchedule","rfidAccessGroup","rfidAccessGroupID","period0","period1","period2","period3","period4","role","securityFeatures","ConvertPropertiesToArray","buildIn","selectedCourse","courseAttendance","prepareFullCourseAttendanceTable","columnCount","deleteColumn","sortedSchedules","addColumn","alignment","attendanceStatus","setGridColumns","courseAttendanceGridSettings","courseInd","columnFixing","sortIndex","fixed","showColumnLines","visibleColumnIndex","attendanceStatusStr","attendanceTypeStr","attendanceType","isRegistered","holidayCalendarSvc","origCourseID","lessons","courseCopyMode","lastExpanded","recurrenceInfo","expandRecurrence","holidayCalendarId","holidayCalendar","expandRecurrenceImpl","holidays","recurrenceType","expandRecurrencePattern","lessonsGridSettings","selectAll","h","lesson","l","deselectRows","recurrenceExpanded","saveImpl","dataToSave","selectedStudents","studentsGridSettings","studentIDs","selectedLessons","courseCopySave","onCourseCopySave","studentsLoaded","lessonAttendance","newRecurrenceModel","editRecurrence","duration","fdays","fhours","fminutes","fmonths","months","fyears","years","lessonLength","onStartDateChanged","updateEventByStartDate","teacherFromNowOnShouldShow","enableZoomIntegration","enableAmortizationSchedules","findIndex","addAmortizationSchedule","amortizationSchedules","percentageAmount","issueAt","issueDaysAfterRegistration","removeAmortizationSchedule","dataFiled","noFurtherRegisteredAttendance","rawCourses","compensationGroupID","filteredCourses","setSelectedCourse","courseTypes","getAllForLookup","refreshCourseRecord","mfirstLesson","getByCourseID","detailCopyDialogPromise","lessonLengthInMinutes","onContentInfoAccessTimeChanged","contentInfoAccessTime","accessTimeType","noOfDays","accessAtUtc","onContentInfoDeleteBtnClick","contentInfo","contentInfos","contentType","accessTimeBaseline","accessType","allowAccessFrom","allowAccessTo","leadSvc","courseLeads","getAllByStatusAndCourse","courseLeadsGridSettings","lead","studentIds","ignoreLeadAssignment","cr","conversionType","conversionReferenceId","conversionDateUtc","conversionText","user","loggedInUser","updatedAtUtc","updatedByUserId","updatedByName","onChangeStatus","leadsNoteDetailPromise","leadId","noteId","onLeadSave","courseSchedules","orderIdx","onCourseScheduleChanged","newLesson","courseDetailDialogPromise","newRecurrence","deleteSingleLessonRecurrence","getSelectedCourseName","deleteEvent","courseName","getPattern","pattern","courseSchedulesGridSettings","cellInfo","waitQueue","courseRegistrations","courseRegistrationsGridSettings","popover","okClick","fromDateM","toDateM","lessonStartDate","isSameOrBefore","isSameOrAfter","onDetailCanceled","onAfterDialogCancel","selectedLead","cancel","getAllByStatusAndStudent","leads","leadSelectionDlg","onLeadSelected","attendanceFilterOptions","amortizationScheduleDlg","attendanceGridOptions","selectedField","showAmortizationSchedule","studentRegistration","amortizationScheduleTemplates","onlineMeetingsSvc","onlineMeetings","getInfoByDateRange","joinUrl","meeting","onlineMeetingsRecordings","onlineMeetingInd","onlineMeetingDetail","recordings","onlineMeetingsRecordingsGridSettings","datetime","coursePriceSvc","calculateAmortizationSchedules","setSelectedSubject","selectedSubject","isFranchise","supportSubjectLicenses","isFranchiseCentral","subjects","getAllForCoursesAsync","isFranchiseSubject","franchiseSubjectID","franchiseCentralTenantID","isAnyFranchiesActive","isFranchiesActive","onSubjectDetailSave","onFranchiseCentralChange","franchiseCentralID","onFranchiseSubjectChange","getFranchiseCentralSubject","compensationGroupsRaw","compensationGroups","lookup","cg","included","newViewValue","franchiseCentralTenantId","getAllFranchiseCentralCourseSubjects","newSubjects","tenantInfoSvc","ZoomMeetings","meetingId","formSvc","formResponseSvc","studentSvc","saveResponse","responseDto","showFullEditableUserDetail","formSaved","adminEdit","formResponseId","shouldEnableSaveButton","formResponse","enableSave","onSaveClick","showFullEditableStudentDetail","isNotRegisteredUser","respondedSuccesfully","errorDetail","formsResponses","selectedForm","formId","getAllByFormId","newlySelectedForm","formsResponsesGridSettings","formType","allowClearing","calculateDisplayValue","userPhone","onEditorPreparing","parentType","editorOptions","itemIndex","itemElement","onShowFormPreview","onShowContractTemplate","responseInfo","formPreviewPromise","formDefinitionRevision","auditEvent","revision","onAddResponse","onDeleteResponse","forms","setSelectedForm","form","tenantSetting","enableKindergartenSupport","onFormSave","primaryQuestionIndexPlusOne","primaryQuestionIndex","onPrimaryQuestionIndexPlusOneChange","onQuestionAdd","addNewQuestion","onQuestionRemove","question","questions","onOptionAdd","addNewOption","onOptionRemove","onQuestionTypeChanged","questionType","pull","pictureUrls","imageUrl","onAccessPermissionChange","accessPermissions","contractTemplateTypeId","dialogType","contractTemplateTypeFilter","savebuttonText","onSaveChanges","admissionAcceptanceNotification","admissionRejectionNotification","leadSourceType","getCourseInterestById","leadSourceReferenceId","assignExistingRegistration","studentRegistrations","existingRegistration","canBeSaved","onAssignExistingCourseBtnClick","getAllCoursesByStudent","onCreateNewRegistrationBtnClick","onExistingRegistrationRowSelected","isSaving2","firstDate","lead_and_course","parentID","studentRegistrationsGridSettings","onHide","inputModel","isInvalid","disableStudentAdd","onAddUserClick","userDetail","notRegisteredUserInfo","surname","middlename","address","referenceSourceID","referenceSourceId","userDetailDialogPromise","preFilled","userSaved","onAddStudentclick","nationality","adminNotes","health","studentDialogPromise","onStudentSave","onUserAndStudentAssigned","semesterDataRange","getAllByStatusAndDateRange","setSelectedLead","getAllByStatusAndSemester","semestersDataSource","CustomStore","loadOptions","byKey","loadMode","phaseDataSource","markerIdToColor","levelId","toNow","editorName","onAssignCourse","onCreateContract","onSendAdmissionAcceptance","onPrintAdmissionAcceptance","onSendAdmissionRejection","onPrintAdmissionRejection","leadsAdmissionDialogPromise","leadsDetailPromise","onLeadStatusChange","leadsAssingCourseDetailPromise","contractDetailDialogPromise","disableUserStudentSelection","freshLead","notRegisteredUserSvc","loadUser","promisses","getByIDFull","getAllByUserIDAsync","arrVal","othVal","notRegisteredUserInfoOrig","onAnonymousBtnClick","onExistingBtnClick","modelEquals","userEquals","modelToSave","nextContactAtUtc","onBindUserAndStudentClick","bindUserAndStudentDialogPromise","onChangeUserAndOrStudentClick","finalizeLoading","onLeadSelectionDetailSave","onLeadSelectionDetailCancel","onLeadSelectionRowSelected","leadSelectionGridSettings","auditEvents","eventTimeUtc","leadNotes","fullLead","newlySelectedLead","leadNotesGridSettings","leadOrig","userEmailAddress","getAllActionsByUser","middleName","surName","getAllCoursesByUser","levels","setSelectedLevel","level","selectedLevel","onLevelSave","phases","setSelectedPhase","phase","selectedPhase","onPhaseSave","shouldBeVisible","visibleSelection","includes","disabledSelection","Lead","leadSourceName","leadSourceText","phaseId","markerId","notRegisteredUsers","NotRegistredUser","Phase","selectSemesterData","semesterData","chart","displayExactValues","isStacked","chartArea","legend","seriesType","series","3","getFinanceSummary","newData","summary","getCourseSummaryAsync","statusPresent","statusNotPresentNotExcused","statusNotPresentExcused","statusNotPresentExcusedNoCompensation","bankSvc","records","onAccountingBookChange","unimportantRecoveryDetailDlgPromise","setSelectedRecord","getAllByAccountingBookID","transactionID","isAddBankPayment","bankTransactionDetail","invoiceNo","externalAccountNo","paymentTypeID","onPaymentSuccessSave","markAsUnimportant","removePairing","requestPairing","onFromDateChange","onToDateChange","transactions","getUnimportantByAccountingBookID","isReadyToSave","some","restoreUnimportant","rawInvoices","accountingBooks","accountingBookIDs","invoices","getInvoiceEvidenceBySemester","getInvoiceEvidenceByDateRange","onMoneyS3ExportRequested","exportAsInvoices","uniqueByAccountingBooks","uniqBy","filteredRows","getMoneyS3InvoiceExport","onMoneyS3ExportGenerated","onStormwareExportGenerated","onCsvExportGenerated","typeID","latest","notLatest","allRows","invoiceIDs","encodeURIComponent","JSON","stringify","getStormwareInvoiceExport","getCsvInvoiceExport","selectedInvoice","getByID","$routeParams","$location","editDetailAccountingBookId","path","tag","$options","isBussy","bankImportCredentials","shopName","password","minFromDate","goCardlessData","bankTransactionImportType","securityAccessToken","institutionId","statusStr","accountingStampUrl","getConnection","onBankImportCredentialsChange","onImportTypeChange","bankTransactionImportAmountLimit","bankTransactionImportStartDate","onSelectBankClick","bankSelectionDialogPromise","onInstitutionSelected","institution","createBankConnection","href","authorizationLinkUrl","onSelectBankAccount","bankAccountSelectionDialogPromise","onBankAccountSelected","account","selectBankAccount","selectedAccountIndex","onDeleteBankConnection","deleteConnection","tabId","selectedTabId","selectedTabIndex","isTdSequenceSaving","tdSeq","selectedYear","nextSequenceNo","peekNextSequenceNoRaw","onTaxDocumentYearChange","nextSeq","onTaxDocumentSequnceSave","setNextSequenceNoRaw","getSequenceNoPadded","number","getAccountingBookIdPadded","onAddStampBtnClick","pictureWidth","pictureHeight","onUploadImage","uploadAccountingStamp","onImageSave","getTime","onDeleteStampBtnClick","deleteAccountingStamp","selectedBankAccount","onBankAccountSelect","isBankAccountSelected","selectedInvoiceID","getInvoiceEvidenceByInvoiceID","selectedInvoiceNo","institutions","getInstitutions","selectedInstitution","onInstitutionConnect","selectInstitution","isInstitutionSelected","compensationsSvc","compensationCoursesGridFilterOptions","compensationCoursesGridOptions","compensationCourses","compensation","getDetailAsync","setSelectedCompensation","selectedCompensation","comensationSummary","paymentsSvc","getAmortizationScheduleDuePayments","amortizationSchedulesGridSettings","duePaymentsSvc","rawDuePayments","typeIDs","showAfterDueDateOnly","duePayments","claimOverdue","getAllByDateRangeAsync","setSelectedDuePayment","duePayment","selectedDuePayment","trueText","falseText","showEditorAlways","invoiceNotInSync","onDuePaymentNotification","removeFromCourse","expectedPricePop","typeReferenceID","onUpdateInvoice","invoiceDetailDialogPromise","sendRequestForPayment","typeReference2ID","payments","getAllRelatedPaymentsByInvoiceID","paymentsGridSettings","terminalID","filterSummaryDuePaymentsTypes","summaryDuePaymentsTypes","calculateSummary","types","summaryAll","calculateSummaryAll","getInvoiceEvidenceByUserAsync","dangerFn","relatedPayments","getAllForUserAsync","onlinePaymentConfigurations","secret","merchantId","merchantPassword","clientCertificateBase64","onlinePaymentsSvc","onlinePayments","getAllByDateRange","isTesting","createdAt","isAfter","onlinePaymentID","reverse","manualReverse","isOnlinePayment","onlineTransactionDetail","selectedOnlinePayment","terminalSvc","rawPayments","terminals","includesTypeID","includesTerminalID","terminal","includesAccountBookID","getAllForSemester","getAllForDateRange","onPrintReceipt","onPrintConfirmationReport","selectedPayment","exportVisibleColumnsOnly","allowColumnReordering","accountingBookTransactionID","salesReportParamsPromise","createTaxDocuments","issueTaxDocumentIfNeeded","filterSummaryPaymentTypes","paymentTypes","orig","payment","paymentDate","cashReceiptNo","onPaymentDetailSave","savePayment","sendNotification","finalizePayment","autoPaymentConfirmationPrintForCardPayments","savePaymentEditModel","onClearBtnClick","initializePaymentEditModel","clearPaymentEditModel","getTerminalSetting","terminalChanged","setTerminalSetting","onSaveBtnClick","isPaymentValid","isRequired","isPaymentEditModelValid","terminalSetting","terminalIDparam","taxDocumentsSvc","rawTaxDocuments","taxDocuments","onPrintTaxDocument","taxDocumentID","taxDocumentsIDs","getStormwareTaxDocumentExport","getMoneyS3TaxDocumentExport","getCsvTaxDocumentExport","GetBriefBySemester","selectedTaxDocument","origin","maxYear","Bank","removePayment","accountingBookTransactionIDs","Compensations","getDetail","TaxDocuments","taxDocumentIDs","franchiseSvc","attendanceSummary","getAttendanceSummaryAsync","requireTeacherFranchiseLicenses","franchises","selectedFranchise","newFranchise","franchiseTenantAlias","getEmployeesByTenant","onSaveSuccess","employeeDTO","licenses","license","updateEmployeeByTenant","franchiseSubjectName","webooker_franchise_models","FranchiseEmployee","$cacheFactory","Franchise","getAttendanceSummary","getAttendanceSummaryForFranchiseCentral","cache","put","tenant","employeesForTenantAlias","breadcrumbs","onRefreshButtonClick","recipientSvc","addressList","getAddressList","recipientList","onAddAddress","recipient","isAddDisabled","recipientGroupType","courseScheduleId","classroomId","compensationGroupId","semester2Id","messagesSvc","messageTemplateSvc","addAddress","addressSelectorPromise","createRecipientModel","templateModel","clearAll","messageBody","attachments","sendMessage","sendEmail","getRecipients","addressListPromise","recipients","saveTemplateDialogPromise","savedData","onLoadTemplate","loadTemplateDialogPromise","loadedData","recipientInfo","uploadComponent","uploadUrl","uploadSuccess","uploadFullSuccess","uploadError","uploadInProgress","removeAttachment","attachment","fileUploaderOptions","accept","uploadMode","showFileList","labelText","selectButtonText","maxFileSize","onUploadError","request","responseText","reset","onUploadStarted","onUploaded","parse","templates","getAllInfo","selectedTemplate","loadTemplate","onSaveAsNew","onSaveExisting","emailAttachmentsSvc","localeAlias","languageAlias","fileManagerOptions","fileSystemProvider","fileManagement","CustomFileSystemProvider","getItems","pathInfo","getFiles","documentTemplateType","emailCategory","downloadItems","deleteItem","deleteFile","uploadFileChunk","fileData","uploadInfo","destinationDirectory","fileSize","deffered","chunkCount","filePath","chunkIndex","getUploadUrl","customData","accessUrl","chunkBlob","chunkFirstByte","bytesUploaded","chunkLastByte","contentLength","Content-Range","crossDomain","processData","nameExpr","sizeExpr","dateModifiedExpr","permissions","download","create","upload","selectionMode","chunkSize","itemView","showFolders","showParentFolder","emailTemplatesSvc","codeEditorInstance","oldEmailTemplateId","emailTemplateId","markClean","docIsClean","isClean","numberOfAttachments","onRefreshTemplate","saveDisabled","onValidateTemplate","previewDialogPromise","detail","preview","onAttachments","attachmentsDialogPromise","codemirrorLoaded","_editor","getDoc","lineNumbers","theme","base","sampleDataEditorOptions","json","statementIndent","loadWithIsCleanCheck","oldemailTemplateId","getInfoById","infoData","isCompatibleOverride","isOverridden","validationErrors","contents","htmlBody","sentEmailsSvc","getStatistics","sentEmailStatistics","vAxis","hAxis","orientation","selectedGroup","emails","getSummary","subjectHtmlEncoded","toAddressEmailHtmlEncoded","toAddress","sentEmailsGroupGridSettings","onEmailSelected","enableSMSSupport","smsMessages","getSmsHistoryByDateRage","selectedRow","onNewSms","smsText","sendSms","attachmentsCnt","emailTemplateName","current","old","wbAutoSize","removeItem","EamilAttachments","allInfos","EmailTemplates","MessageTemplate","templateId","SmsHistory","getSmsHistoryByDateRange","Recipient","activeOnly","_name","getName","groupType","str","str2","me","getByIDAsync","getCourseAsync","allData","classroom","compensationGroup","getActionAsync","list","emailAddress","Emails","count","runningSum","previewInterestSvc","uiUtilsSvc","scrollbarWidth","getScrollbarWidth","getActiveAsync","enableRfidCardSupport","isFranchiseCentralAndSupportSubjectLicenses","franchiseCentralSettings","enableDataExportHistory","enableDataExport","enableOnlinePayments","enablePaymentGateways","enableReservationSupport","enableOnlineMeetings","enableRentSupport","minifyAsideClick","toggleClass","resize","supportedLanguages","currentLanguage","isAuthenticated","changeLanguage","langKey","supportedLanguagesDropdown","lang","img","nameResID","toggleAssideNavigation","signInDialogPromise","signOut","adminLogout","signIn","isAdmin","previewHoursSvc","activeSemesterPromise","onClassroomChange","regCourseID","onRegisterOnCourse","onAttendanceExcuse","onAttendanceBookAgain","onExporting","grid","origColLength","prepareGridForExport","onExported","cleanGridAfterExport","stateCodeName","stateModel","previewHoursDetail","nextContact","note","previewHoursDetailOrig","onPreviewHoursDetailSave","previewHoursRegOnCourse","previewHoursRegOnCourseOrig","regCourseSemesterID","detailRegisterOncoursePromise","registerOnCourseError","onRegisterOnCourseSave","payload","previewHoursBookPreview","previewHoursBookPreviewOrig","onBookPreview","detailBookPreviewPromise","bookPreviewError","bookPreviewIsUnchanged","onBookPreviewSave","dlgExcuseConfirmationPromise","attendanceExcuseData","onConfirmExcuse","attendanceBookAgainData","dlgReBookConfirmationPromise","onConfirmBookAgain","stats","previewHoursSuccessGraph","previewHoursSuccessStatsGridSettings","previewInterestDetail","previewInterestDetailOrig","onPreviewInterestDetailSave","stateCodeDetail","stateCodeDetailOrig","onStateCodeDetailSave","membershipSvc","membershipStudentSvc","lastSelectedMembershipId","setSelectedMembership","selectedMembershipStudents","GetAllByMembershipAsync","memberships","validityPeriodInDays","validFrom","validTo","isBetween","membershipDetail","membershipDetailOrig","isMandatory","isClientAssignable","discountPct","applyToActions","applyToCourses","onMembershipDetailSave","membershipStudentDetail","membershipStudentDetailOrig","membershipStudentDetailError","onMSRowEdit","membershipStudentDetailDialogPromise","onMSRowAdd","membershipStudentID","membershipID","onMSRowDelete","membershipStudentDetailIsUnchanged","onMembershipStudentDetailSave","itemTypeSvc","itemTypes","setSelectedItemType","itemType","selectedItemType","onItemTypeSave","rentCategorySvc","rentCategoryGroupSvc","rentCategories","setSelectedRentCategory","rentCategoryGroupDataSource","rentCategory","selectedRentCategory","onRentCategorySave","pickupTimeFrom","date_pickupTimeFrom","pickupTimeTo","date_pickupTimeTo","returnTimeFrom","date_returnTimeFrom","returnTimeTo","date_returnTimeTo","ondate_pickupTimeFromChange","ondate_pickupTimeToChange","ondate_returnTimeFromChange","ondate_returnTimeToChange","onrentingPeriodTypeChange","rentingPeriodType","rentingPeriodStepSize","minimumRentingPeriods","maximumRentingPeriods","rentHourStartType","setSelectedRentCategoryGroup","rentCategoryGroup","selectedRentCategoryGroup","onRentCategoryGroupSave","rentItemSvc","allCategories","selectedCategory","itemSelectionType","minimumNumberOfRentedItem","maximumNumberOfRentedItems","externalId","numberOfItemsToAdd","itemTypeId","times","allItems","onAddItemDetailSave","onCategoryChange","rentSvc","selectedRentItem","rents","rentItem","totoDateUtc","getAllByPlaceAndItemAndDateRange","placeId","newlySelectedRentItem","rentsGridSettings","rentedItems","sum","rentedItem","itemCondition","momentNow","toUtc","rentItemName","rentCategoryName","rentItems","setSelectedRentItem","classroomDataSource","rentCategoryDataSource","itemTypeDataSource","onRentItemSave","selectedRent","newlySelectedRent","rentItemsGridSettings","getAllByPlaceAndDateRange","setSelectedRent","rent","classrooms","selectedPlace","head","onPlaceChange","onRentSave","notRegisteredUserPromise","statusDisabledSelection","$index","addItemDialogPromise","addItem","union","unionWith","fromUtcPickerOptions","toUtcPickerOptions","oldRentCategoryId","getAllByPlaceAndRentCategory","getAllByCategoryGroupedByItemType","shouldBeDisbled","reportsSvc","fromSemesterID","toSemesterID","include","includeNew","includeLeaving","fluctuationType","sankeyInstance","courseStudentFluctuationOverall","courseStudentFluctuationByTeacher","courseStudentFluctuationByClassroom","courseStudentFluctuationBySubject","leftCount","uniq","rightCount","setTitle","newTitle","resizableOptions","handles","onResizeEnd","sankeyOptions","sourceField","targetField","weightField","node","padding","customizeText","info","weightOut","linksOut","weightIn","linksIn","margin","colorMode","tooltip","zIndex","customizeLinkTooltip","allLeftCounts","source","weight","customizeNodeTooltip","onFromSemesterChange","onToSemesterChange","onFluctuationTypeChange","onIncludeNewChange","onIncludeLeavingChange","mFromDate","mToDate","cousesAttendaceSummary","getCoursesAttendanceSummaryForDateRange","courseAttendanceStatusID","courseAttendanceTypeID","studentGroups","onSeachCriteriaChanged","rawOneOffsSummary","noGroupSelected","oneOffsSummary","intersection","getOneOffAttendanceSummary","courseAbbreviation","parentName","parentMiddlename","parentSurname","parentPhone","getRegisteredAttendanceAsync","newColumnDefs","sortedDefs","getCourseRegistrationSummaryForSemester","getCourseRegistrationSummaryForDateRange","groupsCombo","subjectCategoryID","operatorPhone","operatorPhone2","Reports","getRegisteredAttendance","getCourseStudentFluctuationOverall","getCourseStudentFluctuationByTeacher","getCourseStudentFluctuationBySubject","getCourseStudentFluctuationByClassroom","includeNewClients","includeLeavingClients","domainsSvc","setSelectedDomain","domain","selectedDomain","domains","domainsSpecializationsSvc","domainsSpecializations","domainInd","domainsSpecializationsGridSettings","domainId","classroomAvailabilitySchedulesSvc","reservationsSvc","pricingSvc","employeesForDateRangePromise","nowStr","availableCache","now","selectedClassroom","activeClassrooms","place","classroomAvailiability","selectedEmployees","lastFilteredEmployeeSchedules","relaodDueToResources","getDomain","getSpecialization","specializationId","specializations","getAllExpanded","domainsDataSource","refreshUsersDataSource","userDataSource","getAllBrief","selectedUserId","refreshStudentsDataSource","studentsDataSource","lastError","scheduleDataSource","canLoadData","employeeSchedules","schedulerInstance","getStartViewDate","getEndViewDate","classroomAvailabilityPromise","loadDay","reservationsPromise","getAllByRangeAndPlace","availability","periods","start","end","employeeId","filteredEmployeeSchedules","reservationStartDate","reservationEndDate","studentsIds","domainSpecialization","domainName","domainSpecializationName","mbirthday","age","invoiceId","employeeData","specialization","employeeDataCopy","schedulesUpdateDay","createEmployeeScheduleIfMissing","oldData","affectedPeriod","periodStartDate","periodEndDate","employeeIds","schedulesDeleteDay","errorHandler","setUpStudentBookingForm","copyMode","appointmentData","tbStartDate","tbEndDate","formData","calculatePrice","domainOrSpecializationId","domainAndSpecializationIds","domainSpecializationId","calculateReservationPrice","popup","dxPopup","userSelectBox","studentAddButtonInstance","xs","sm","md","lg","editorType","searchExpr","searchEnabled","previousValue","validationRules","cssClass","applyValueMode","resizeEnabled","contentTemplate","dxTreeView","dataStructure","itemsExpr","selectByClick","selectNodesRecursive","onItemSelectionChanged","arg","currency","getCurrencySymbol","dxValidator","validationCallback","reevaluate","classroomSelectOptions","employeeSelectOptions","cellContextMenuItems","cellContextMenuCellData","showAppointmentPopup","emptyCellContextMenuOptions","schedulerOptions","views","timeCellTemplate","resourceCellTemplate","currentView","maxAppointmentsPerCell","firstDayOfWeek","startDayHour","endDayHour","cellDuration","crossScrollingEnabled","currentDate","allowDragging","fieldExpr","allowMultiple","useColorAsDefault","resources[0].dataSource","dataCellTemplate","markAvailable","appointmentTooltipTemplate","onCellContextMenu","cellData","selectedCellData","onCellClick","onAppointmentFormOpening","setUpEmployeeReservationForm","popupConfig","_popupConfig","popupOptions","onOptionChanged","onAppointmentRendered","origHeight","appointmentElement","backgroundColor","markPlaceAvailable","getHours","getMinutes","dayAvailability","periodStart","periodEnd","startIndication","endIndication","employeeScheduleDelete","deleteAppointment","hideAppointmentTooltip","employeeScheduleEdit","reservationDelete","reservationEdit","reservationCopy","reservationCreatePayment","Specializations","rfidCardsSvc","rawAttendanceLog","hasAttendanceWithoutGroup","attendanceLog","inUpdateRole","inInsertRole","inDeleteRole","inSupportRole","mfromDate","mtoDate","getAllLogsAsync","showMPSVReportParamsDialog","isNursery","mpsvDialogPromise","reportGenerated","showAttendanceLogSupportDetail","operationMode","attendanceLogSupportDetailPromise","rowAddDisabled","skeleton","validationErrorMessage","userIDType","overriden","overridenWithDescription","rfidCardLogOverrideID","childrenGroupSupport","smallNurserySupport","rfidAttendanceEUSupport","mpsvStudentDialogPromise","projectName","projectRegistrationNumber","recipientName","rr","deviceSerialNumber","rrr","shortened","toJson","encodeURI","efsReportImportDetailPromise","deleteConfirmationPromise","dataToDelete","downloadBtnClick","driverDownloadDetailPromise","rfidCardLogID","onUserTypeChange","isLoadingData","studentIsSelected","employeeIsSelected","getRegisteredStudentsForPeriodAsync","getRegisteredEmployeesForPeriodAsync","updateDetailError","shouldMessageBePresent","msg","studentsGridSelectionChanged","employeesGridSelectionChanged","studentsGridFilterOptions","filterFunction","employeesGridFilterOptions","studentsGridOptions","hidden","disableExport","employeesGridOptions","isSavingXls","isSavingXlsx","compatibility","group","getMPSVNurseryAttendanceReportAsync","getMPSVAttendanceReportAsync","repParams","g","projectBeneficiary","operationResultText","userIdType","oldUserId","newUserId","timeShiftInMinutes","uploadContacts","supportReplaceRange","supportDeleteUserInRange","successWithTextDecode","supportReplaceUserInRange","timeShift","abs","seconds","supportShiftOriginEventInRange","rfidDeviceRegistrationSvc","deviceRegistrations","dryRun","uploadResultText","getAllUploadContacts","RfidCards","getAllLogs","getRegisteredStudentsForPeriod","getRegisteredEmployeesForPeriod","getMPSVAttendanceReport","getMPSVNurseryAttendanceReport","filtered","rejectReason","isRemove","rfidCardLogUploadContactID","eventType","subEvent","eventTime","operatorFullName","operatorAddress","operatorEmail","uploadedAt","RfidDevices","getLessonAttendance","getRegisteredAttendanceForCourse","attendanceChanged","onCourseChange","cID","onDetailCancel","waitQeueuGridSettings","lastStartDate","lastEndDate","loadSemesterSchedule","isValidDate","getAllForSemesterAllAsync","onDateChanged","origAction","schedulerSettings","weekView","autoHourRange","noHeader","visibleResources","showRecurrence","startHour","scheduleVisibleTimeStart","endHour","scheduleVisibleTimeEnd","scale","scheduleTimeScale","resourcesMapping","actionsMapping","commands","createNewCourse","selectedResourceID","createNewEvent","getSingle","ageRanges","selectedWeek","reloadDataWithModificationAsk","saveClassroom","newClassroom","startOfWeek","saveModel","loadWeek","saveWeek","newlySelectedClassroom","calendarSettings","newStartOfWeek","onModelSave","onModelCancel","isSaveRangeEnabled","dateRangeSelectionDlg","onModelRangeSave","onCanceled","onSaved","rangeModel","saveWeekAsPaternForPeriod","setSelectedEmployee","addressID","geoCoderSvc","domainsInitialized","treeListInstance","classroomDomains","domainsOptions","recursive","autoExpandAll","allowEditing","isNil","reservationTeacherHourSingleRateOverride","reservationTeacherHourSingleRate","reservationTeacherHourGroupOneRateOverride","reservationTeacherHourGroupOneRate","reservationTeacherHourGroupTwoRateOverride","reservationTeacherHourGroupTwoRate","origDomainsSelected","obj","currentSelectedRowKeys","parentId","currentDeselectedRowKeys","originDomains","domainsAreUnchanged","isEqual","loadDomainsData","cloneDeep","onClassroomDetailSave","saveDomainsData","getAddress","geocode","compensationTransferSvc","createEmptyModel","sourceSemesterID","initilizeModelAsync","compensationTransfer","destinationSemesterID","onDestinationSemesterChange","onTransferToAmendTypeChange","transferToAmendType","changeTransferToAmendType","onMaximumTransferredAmendsChange","maximumTransferredAmends","changeMaximumTransferredAmends","onTransferRemainingPreAmendsChange","transferRemainingPreAmends","changeTransferRemainingPreAmends","onTransferRemainingTimeBoundAmendsChange","transferRemainingTimeBoundAmends","changeTransferRemainingTimeBoundAmends","onNextBtnClick","onBackBtnClick","errorGridOptions","onCompensationTransferDetailSave","compensationTransferErrorModalPromise","compensationTransferDetailDialogPromise","modelCopy","onSemesterDetailSave","isPristine","onDestinationCourseChange","destinationCourseRegistrationID","destinationCourseFullName","selectedCourseType","holidayCalendars","onDataSave","onDeleteDay","onAddDay","b","onAddBankHoliday","getBankHoliday","newsSvc","news","publishedAtUtcPickerOptions","onNewsDetailSave","onCourseRegistrationDetailSave","preferredBookingSvc","getBySemesterID","isModelValid","sourceSemestersIDs","onFromSemestersChanged","getByPreferredBooking","destinationSemesterCourseRegistrations","compensationGroupsIDs","onCourseRegistrationRowEdit","courseRegistrationDetailPromise","onPreferredBookingSave","onPreferredBookingSavedSuccessfully","preferredBookingID","rawSemesters","showInactive","preferredBookingSupported","courseInterestsSupport","coursePreviewOnlyRegistration","allowClientCourseRegistration","preferredBookingStartDate","preferredBookingEndDate","preferredBookingIsActive","preferredBookingEffectiveIsActive","compensationTransferDialogPromise","preferredBookingDialogPromise","selectedSemester","courseTypeImageSvc","courseTypeImage","CompensationTransfer","availableAmends","transferredPreAmends","transferredTimeBoundAmends","initializeAmends","remainingAmends","remainingPreAmends","remainingTimeBoundAmends","CourseTypeImage","HolidayCalendar","countryCode","News","subTitle","publishedAtUtc","isVisibleToClients","body","PreferredBooking","picturesSvc","setSelected","onDeleteBtnClick","isUsed","onUploadImageClick","image","croppedImage","imageIsValid","previewHeight","pictureAspect","resultPictureSize","onImageLoadSuccess","onImageLoadError","handleFileSelect","evt","file","currentTarget","reader","FileReader","onload","readAsDataURL","onUploadClick","originalFormat","prepareImageData","decodeImageTypeFromData","querySelector","toggleSelected","onPicturesAdd","onAddBtnClick","fileManagerInstance","contextMenuItems","getDirectory","downloadUrl","dataUrl","createElement","setAttribute","appendChild","removeChild","createDirectory","parentDir","isDirectory","deleteDirectory","contentExpr","isPublic","selectedItems","dataItem","onContextMenuItemClick","getSelectedItems","setPublicAccess","details","onOk","selectedFiles","isNothingSelected","selectedItemKeys","jpgstr","pngstr","Picture","dashboard","includesGlobal","imageData","imageType","imageBase64","imageFormatType","convertToImageFormatType","errorReason","lastIndexOf","includeGlobal","getDashboardImages","insertDashboard","ProtectedStorage","paths","includeImages","surveyResponseSvc","getByResponseIDAyns","surveyResponseID","getQuestionWithAnswersModel","survey","surveyQuestions","responseAnswers","newlySelectedSurvey","surveyID","surveyAnswers","getAllBySurveyIDAsync","surveyAnswersFilterOptions","onShowAnswers","onGetExcelExport","getExcelExportBySurveyID","answersGridOptions","surveySvc","paneScrollable","newQuestion","onSurveyTypeChanged","surveyTypeID","allowCustomNote","onSurveyDetailSave","surveys","getAllNonDeleted","selectedSurvey","SurveyResponse","getByResponseID","answers","q","surveyQuestionID","surveyQuestionTypeID","bitAnswer","intAnswer","textAnswer","accountingSettingsSvc","accountingSetting","tenantSettingSrc","accountingSettingOrig","tenantSettingOrig","onCancel","accountingSettingData","tenantSettingData","updates","accountingSettingIsUnchanged","tenantSettingIsUnchanged","currentSetting","printedInvoiceName","sendInvoicesToClients","invoiceDueDateType","invoiceDueDates","invoiceDueDate","cashReceiptPurposeForCourses","disableCashReceiptNumbering","cashReceiptPurposeForActions","cashReceiptPurposeForActivitiesReconciliation","cashReceiptPurposeForActivitiesReccuring","showInvoiceNoInCashReceipt","putStudentAgeIntoInvoices","enableQrCodeOnInvoices","themeData","newClientDesignThemeData","transformThemeDataIn","seedColor","primary","onPrimary","primaryContainer","onPrimaryContainer","secondary","onSecondary","secondaryContainer","onSecondaryContainer","tertiary","onTertiary","tertiaryContainer","onTertiaryContainer","onError","errorContainer","onErrorContainer","surface","onSurface","surfaceTint","surfaceVariant","outline","onUpdateThemeData","checked","clientTitlePictureUrl","onCheckboxClick","transformThemeDataOut","tenantSettingCurrent","newClientDesignThemeCode","imageUpload","imageUploadError","Image","src","isImageUploading","dataExportHistorySvc","grouping","groupIndex","groupItems","summaryType","displayFormat","alignByColumn","showInColumn","sortByGroupSummaryInfo","summaryItem","dataExportHistory","contentSvc","htmlContentType","tabIndex","htmlData","mainSettingsSvc","mainSetting","mainSettingOrig","mainSettingData","mainSettingIsUnchanged","registrationOpenPicture","facebookPageUrl","customerLogos","instagramUrl","twitterUrl","userSettingSvc","userSettingSrc","userSettingOrig","userSettingData","userSettingIsUnchanged","sendEmailsToClients","disableInformTeachers","courseRegistrationQuestionCCToTeacher","disableAllEmails","disableAllEmailsExceptUserRegistration","allowTeacherEmailInClientSection","enableUserCreatedNotification","enableCoursePaymentEvidenceNotification","enableAttendanceExcusedCancelledNotification","enableCourseScheduleDateChangedNotification","enableStudentActionRegistrationDeleteNotification","enableStudentCourseRegistrationPriceChangeNotification","enableAttendanceActionExcusedCancelledNotification","enableStudentAddedToWaitQueueNotification","enableStudentRemovedFromActionWaitQueueNotification","enableAttendancePreviewInterestNotification","enableUserPasswordChangedNotification","enableAttendanceExcusedNotification","enableAttendanceNewOneOffNotification","enableCourseScheduleTeacherChangedNotification","enableSendRequestForPaymentNotification","enableAttendanceActionExcusedNotification","enableStudentCourseInterestRegistrationNotification","enableStudentRemovedFromWaitQueueNotification","enableNotExcusedNotification","enableStudentActionRegistrationPriceChange","enableStudentCourseRegistrationNotification","enableAttendanceExcusedNoCompensationNotification","enableAttendanceNewAmendNotification","enableStudentActionRegistrationNotification","enableCourseScheduleNoteChangedNotification","enableAttendanceActionExcusedNoCompensationNotification","enableAttendanceNoteChangedNotification","enableStudentAddedToActionWaitQueueNotification","enableAttendancePreviewNotification","coursePaymentEvidenceCCTeacher","enableActivityAttendanceChangeNotification","enableActivityReconciliationCreatedNotification","enableActivityReconciliationPaymentEvidenceNotification","enableActivityAttendanceFoodTakenNotification","enableActivityFoodOrderNotification","enableRegisterActivityInterestNotification","enableSurveyRequestNotification","enableCourseRegistrationQuestionNotification","enableOnlineLessonReminderNotification","enableOnlineLessonStartedNotification","enableScheduledInvoiceIssuedNotification","enableActivityScheduleNoteChangeNotification","enableTaxDocumentCreatedNotification","enableNewConsentAssignedNotification","enableAmortizationSchedulePaymentNotification","enableFormResponseCreatedNotification","enableFullCourseInterestNotification","enableStudentActionRegistrationAutoDeleteNotification","EnableOnlineMeetingRecordingCompletedNotification","enableOnlineMeetingRecordingCompletedNotification","enableReservationPaymentEvidenceNotification","dataExportSettingSvc","dataExportSetting","dataExportSettingOrig","dataExportSettingData","dataExportSettingIsUnchanged","enableUserRegistration","defaultNationality","quickUserRegistrationMode","allowClientActionRegistration","sortNamesBySurname","showArrearInMyCourses","readOnlyClientCourseRegistration","allowShareOnFBForCourses","allowShareOnFBForActions","enableSMSInWaitQueueAutoBooking","showQuickNavOnHomePage","disableExcuseInMyCourses","courseRegistrationAgreement","noOfDaysToShowAction","showHealthInCourseRegistration","showAttendantHealthInCourseRegistration","sendApplicationForm","showClassroomFilterInCourses","showLessonsRemaining","showNearestLessonInCourses","showPriceInCourseRegistration","useTotalPriceForCourses","noteDescriptionInCourseRegistration","showCourseTypeFilterInCourses","noOfAllowedOneOffs","showNoteInCourseRegistration","coursesSortByDate","clientScheduleWeekView","scheduleEnableAutoHourRange","disableClientCalendar","scheduleDayViewResourcesPerPage","showAllCoursesInClientSchedule","courseExcuseThresholdType","courseExcuseThreshold","showContatInClientAttendance","clientAttendanceShowStudentNote","showArrearInClientAttendance","showNoteInClientAttendance","actionExcuseThresholdType","actionExcuseThreshold","showAgeInClientAttenandace","noOfHoursToUpdateAttendance","allowMultiAmends","activityExcuseWithoutFoodThresholdType","activityExcuseWithoutFoodThreshold","calcSnacksOnlyForPresent","activityExcuseThresholdType","activityExcuseThreshold","enableRfidAccessGroups","rfidBreakTresholdIntervalInMinutes","rfidValidateESFByLaw","sendInfoCardWithCourseRegistration","sendApplicationFormAction","showExcusesAndAmendsInMyActivities","facebookPixelID","showAgeFilterInCourses","showScheduleInCourses","showAgeRangesInCourses","enableDuePaymentsInClient","showOverpaymentsInClientDuePayments","showDateInClientCourses","showAskQuestionInCourseRegistration","maxNumberOfActivityWaitQueueReservations","maxNumberOfCourseWaitQueueReservations","allowReferenceSource","mandatoryStudentBirthday","mandatoryStudentNationality","mandatoryUserAddress","mandatoryUserNationality","mandatoryStudentName","mandatoryEmail2","mandatoryPhone2","mandatoryStudentGender","maxNoOfPreviewStudentsOnOneLesson","showCourseWaitQueueIndexInClient","reservationExcuseThresholdType","reservationExcuseThreshold","reservationTeacherGroupOneSizeFrom","reservationTeacherGroupOneSizeTo","reservationTeacherGroupTwoSizeFrom","reservationTeacherGroupTwoSizeTo","reservationCreateThresholdType","reservationCreateThreshold","enableFullCourseInterest","enableWalletSupport","walletAccountingBook","walletDepositExpirationInDays","mandatoryStudentPersonalIDNumber","sendPaymentConfirmationForm","requireTermsAndConditionsAgreement","requireTradeTermsAgreement","googleAnalyticsId","allowClientActionUnRegistrationInsteadOfExcuse","mandatoryStudentHealthInsurance","mandatoryStudentAddress","mandatoryStudentAllergies","mandatoryStudentPlaceOfBirth","mandatoryUserIdentityCardNumber","mandatoryUserPersonalIDNumber","mandatoryUserNationality2","mandatoryUserName2","mandatoryUserSurname2","mandatoryUserMiddleName2","mandatoryUserAddress2","mandatoryUserIdentityCardNumber2","mandatoryUserPersonalIDNumber2","mandatoryUserBirthday","mandatoryUserBirthday2","infoCardBackUseLogo","mandatoryStudentNotes","showNoteInEventRegistration","enableClientUserSchedules","rfidLogoType","showCapacityInClientUserSchedules","showEmailInClientAttendance","enableCashPayments","showFreePlacesInCourseDetail","showRemainingLessonsInCourseDetail","noteDescriptionInReservations","onTriggerPortalUpdate","triggerPortalUpdate","ts","smsHistorySvc","smsHistory","coursesMainPageButton","eventMainPageButton","compensationsMainPageButton","kidergartenMainPageButton","reservationsMainPageButton","formsMainPageButton","rentsMainPageButton","attendanceMainPageButton","coursesMenuName","eventsMenuName","compensationsMenuName","kidergartenMenuName","customContentTypeText","myKidergartenMenuName","attendanceMenuName","containerCssClass","useFullUrl","AccountingSettings","Content","DataExportHistory","DataExportSetting","MainSetting","onReportPrint","isRfidReport","withCarryOver","onExportReportToXls","consentDefinitionSvc","consentTypeID","consentsDefinitions","consentDefinitionID","employeeAvailabilitySchedulesSvc","selectedEmployee","saveEmployee","newEmployee","newlySelectedEmployee","rawEmployees","selectedGroups","onPrintEmployeeTimeSheet","employeeTimeSheetParamsDialog","defaultCroppedImage","emptyImage","employeeDomains","isDeletePictureDisabled","smallImageUrl","onDeletePicture","smallImageData","onFranchiseAdd","initNewFranchisesLicense","onFranchiseRemove","franchise","childrenGroupModel","nurseryGroupModel","nurseryGroupModelOrig","childrenGroupModelOrig","isChildrenGroupModelSet","isNurseryGroupModelSet","rederenceSource","referenceSourceDetail","referenceSourceDetailOrig","onReferenceSourceDetailSave","getReferenceSourceTimeDevelopment","referenceSourceTimeDevelopment","consentSvc","selectableConsents","consent","onConsentClick","informUsers","selectedConsentIDs","userIDs","selectedUsers","assignConsensts","consnetIDs","getAllActionsByStudent","attendanceDetail","groupAttendanceDetail","getStudentAttendanceDetail","attendanceDetailFilterOptions","disableRowSelection","isGroupRowPropertyName","subItemsPropertyName","$popover","onExcusesClick","myPopover","eligibleAmends","eligiblePreAmends","eligibleTimeBoundAmends","autoClose","viewport","$applyPlacement","isInCourseRole","isInActionRole","isInAttendanceRole","rawStudents","isInProtectedViewRole","filteredStudents","studentAddress","activityTaxDeductionReportParamsDialog","getStudentsActive","countBy","getStudentsCount","getStudentsActivePercent","isInSupportRole","newStudent","typeAheadAddress","allMatch","region","bounds","endOfApril","onAccessTypeChange","setSelectedUser","selectedUser","usersConsents","getConsentsInfoBrief","filteredUsers","customFileter","dataGridInstance","idmConsentIssued","showConsentsDefinitionsDetail","requestConsentsFromAll","requestAnonimizeData","consents","customConsent","consentRatifiedTo","getConsentNameByIDAsync","requestConsentFromAllDialog","anonymize","danger","userConsentsDetails","newlySelectedUser","getConsentsInfoForUser","userConsentsDetailGridSettings","consentRevokedAt","consentRatifiedAt","unfinishedRegistrations","users","hasSecondContact","sendInvitationToAll","reSendOnly","sendInvitationToAllImpl","usersToInvite","sendInvitationToUser","progressCallback","requestBindToIDM","pctProgress","progressMsg","errorMsg","showPctProgress","boundUsersToReInvite","notBoundUsersToInvite","isAnonymized","idmEmailConfirmed","boundToIDM","allowEmailContact","securityRoleID","navigateToRow","userUpdateRole","IDMInfoLockedForEdit","userDetailOrig","onIDMLockClick","onUserDetailSave","newUser","userDetailError","overrideIDMProperties","onUserDetailSaveWithIDMRequest","selectedUserStudents","mday","grpIndex","colAssignPeriod","period","markAllToIndex","isSelecting","isDeselecting","startIdx","lastSelectedIdx","grpStart","changed","lastSelectedCell","onMouseDown","onMouseUp","onMouseMove","consentDefinition","grpIdx","printPeriod","startMinute","floor","endMinute","consentDefinitions","ConsentDefinition","validToDays","consentDefinitionIDToInclude","sIDs","filteredConsentDefinitions","AvailabilitySchedule","getRange","updateRange","endOfWeek","dayData","extractErrorData","weekModelTemplate","templateCopy","timeDifference","startOfWeekPeriod","endOfWeekPeriod","currentPeriod","toSave","$sce","Label","addNoLabel","rgbColor","htmlCaption","trustAsHtml","EmployeeDetailDay","activityInstructorID","Reconciliation","getReconciliationDetailDTO","reconciledAt","notificationSentAt","att","getReconciliationAttendanceDTO","reconciliationDetailDTO","initDataAttendance","initDataActivity","defaultLatePickupPrice","amodel","ReconciliationAttendance","lunch","firstSnack","secondSnack","firstPeriodRegistered","secondPeriodRegistered","secondPeriodAttendanceShortened","firstPeriodAttendanceTypeID","firstPeriodAttendanceStatusID","secondPeriodAttendanceTypeID","secondPeriodAttendanceStatusID","firstPeriodLatePickupHours","secondPeriodLatePickupHours","noOfMinutes","minutesOrig","reconciled","reservationNotes","scheduleNotes","firstPeriod","secondPeriod","firstSnackReserved","firstPeriodAttendanceStatus","attendanceStatusToString","firstPeriodAttendanceType","attendanceTypeToString","secondSnackReserved","secondPeriodAttendanceStatus","secondPeriodAttendanceType","RecurringInvoice","invoiceTemplateID","paymentReferenceNumber","issuedInvoices","today","_endIssueTypeID","_lastEndAfterNoOfIssues","_lastEndAtSpecificDate","issuedAt","lastDayOfMonth","maxDay","lastIssuedDate","nextIssueDate","todayIsImportant","semesterStartDate","semesterEndDate","firstStart","lastStart","mStartDate","mEndDate","weekModel","ScheduleWeek","findWeekSchedule","currentSchedule","currentStart","weekSchedules","getScheduleByDay","removeScheduleByDay","am","pm","ScheduleDetailDay","getPrevFilledInDay","next","scheduleDetail","parentDetail","_lunch","_firstSnack","_secondSnack","_firstPeriodCapacity","getNumberValue","_secondPeriodCapacity","lunchIndeterminate","firstSnackIndeterminate","secondSnackIndeterminate","firstPeriodCapacityIndeterminate","isNumberIndeterminate","secondPeriodCapacityIndeterminate","_active","lunchChanged","firstSnackChanged","secondSnackChanged","firstPeriodCapacityChanged","secondPeriodCapacityChanged","isDirty","applyChangesToNumberProperty","firstPeriodCapacity","secondPeriodCapacity","nvalue","setCommonPropertyValue","wasUndef","dirty","getCommonPropertyValue","propertyValue","firstRun","mPropertValue","schedulePropertyValue","mSchedulePropertyValue","valueOf","StudentDetailDay","activityReservationID","fistSnack","lunchNotScheduled","firstSnackNotScheduled","secondSnackNotScheduled","$tooltip","oldHtml","tooltipMode","busyTooltip","tooltipTop","wbBusyIndicator","wbBusyIndicatorOverlay","margin-top","spanChecked","spanClick","$event","focus","indeterminate","fromViewValue","translations","TXT_TODAY","TXT_BUSY","TXT_LBL_START_DATE","TXT_LBL_END_DATE","TXT_LBL_EMPLOYEE","TXT_LBL_NAME","TXT_LBL_FILLED","TXT_NOTE","TXT_RECURRENCE_TYPE_DAILY","TXT_RECURRENCE_TYPE_WEEKLY","TXT_RECURRENCE_TYPE_MONTHLY","TXT_RECURRENCE_TYPE_YEARLY","TXT_RECURRENCE_WEEK_DAYS_SUNDAY","TXT_RECURRENCE_WEEK_DAYS_MONDAY","TXT_RECURRENCE_WEEK_DAYS_TUESDAY","TXT_RECURRENCE_WEEK_DAYS_WEDNESDAY","TXT_RECURRENCE_WEEK_DAYS_THURSDAY","TXT_RECURRENCE_WEEK_DAYS_FRIDAY","TXT_RECURRENCE_WEEK_DAYS_SATURDAY","TXT_RECURRENCE_WEEK_EVERY_1","TXT_RECURRENCE_WEEK_EVERY_2","TXT_RECURRENCE_WEEK_EVERY_3","TXT_RECURRENCE_WEEK_1","TXT_RECURRENCE_WEEK_2","TXT_RECURRENCE_WEEK_3","TXT_RECURRENCE_DAY_1","TXT_RECURRENCE_DAY_2","TXT_RECURRENCE_DAY_3","TXT_RECURRENCE_WEEK_WORKDAY","TXT_RECURRENCE_MONTH_EVERY_1","TXT_RECURRENCE_MONTH_EVERY_2","TXT_RECURRENCE_MONTH_EVERY_3","TXT_RECURRENCE_MONTH_FROM_EVERY","TXT_RECURRENCE_MONTH_MONTH","TXT_RECURRENCE_WEEK_OF_MONTH_FIRST","TXT_RECURRENCE_WEEK_OF_MONTH_SECOND","TXT_RECURRENCE_WEEK_OF_MONTH_THIRD","TXT_RECURRENCE_WEEK_OF_MONTH_FOURTH","TXT_RECURRENCE_WEEK_OF_MONTH_LAST","TXT_RECURRENCE_MONTH_JANUARY","TXT_RECURRENCE_MONTH_FEBRUARY","TXT_RECURRENCE_MONTH_MARCH","TXT_RECURRENCE_MONTH_APRIL","TXT_RECURRENCE_MONTH_MAY","TXT_RECURRENCE_MONTH_JUNE","TXT_RECURRENCE_MONTH_JULY","TXT_RECURRENCE_MONTH_AUGUST","TXT_RECURRENCE_MONTH_SEPTEMBER","TXT_RECURRENCE_MONTH_OCTOBER","TXT_RECURRENCE_MONTH_NOVEMBER","TXT_RECURRENCE_MONTH_DECEMBER","TXT_RECURRENCE_IN","TXT_RECURRENCE_ENDS_AFTER","TXT_RECURRENCE_ENDS_AT","TXT_RECURRENCE_OCCURRENCES","$parse","wbRightClick","$dropdown","wbSchedulerSvc","defaultSettings","showWeekend","toolTipDelay","toolTipTemplateUrl","toolTipTrigger","selectByBlocks","maximumSelectedBlocks","startTimeType","sourceSettings","actionClicked","selectionChanged","commandDropdown","calculateColumns","calculateRows","calculateSizes","calculateEvents","calculateAvailability","toolTipEnabled","isAlternateRow","isSelectable","selectionStart","selectionEnd","inSelection","setSelection","colStart","colEnd","rowStart","startEndDates","newSelection","rowEnd","colIndex","endRow","getStartEndDateBySelection","disposeCommandDropdown","destroy","showCommandMenu","commandMenu","onCellMouseDown","canSelectRegion","onCellMouseMove","secondClickCheck","onCellMouseUp","lastClickEvent","onSelectEvent","dateChanged","onPrevBtnClick","interval","selectPrevDate","selectNextDate","onTodayBtnClick","selectToday","onDatePickerChange","fixSelectedDate","mapRecurrenceDtoToModel","mapRecurrenceModelToDto","lastWeekViewValue","lastVisibleResources","selectedResources","getSelectedResources","getMappedResourceID","currentVal","validResourceID","getValidSelectedResourceID","limitEvents","findColumn","calculateEventsImpl","mStartDateStartOfDay","mEndDateStartOfDay","mCurrentStartDate","mCurrentEndDate","mCurrentStartDateStartOfDay","getResourceIDPropertyName","columnDate","startFix","startOverflow","startOverflowDay","endFix","endOverflow","endOverflowDay","noOfSubColumns","subColumn","getMappedPropertyName","showWaitQueue","showActionNote","lastEvent","detectOverlaps","mapping","defaultPropertyName","getSelectedResourceIDStartIndex","findSettings","resourceStartIdx","emptyResource","resourcesLimit","origResource","getDateByRowAndColIndex","isStartTime","subIndex","noOfSubRows","dateToWeekDays","shouldBeSelected","daysLimit","todayIndex","saturdayStartDay","clone","sundayEndDay","actionStartDate","actionEndDate","recourcesMapping","shouldShowWeekend","clonedDate","resourceName","ceil","startEndHours","lowerBound","upperBound","endDateSorted","visibleStartDateActions","visibleEndDateActions","actionStartDateDay","actionEndDateDay","startDateSorted","calcStartEndHours","firstRow","lastRow","columnWidth","rowHeigh","occurrenceCount","dayWeekDays","weekDays","dayPeriodicity","periodicity","weekPeriodicity","weekWeekDays","monthRecurrenceType","weekOfMonth","monthDayNumber","dayNumber","monthWeekOfMonth","monthPeriodicity0","monthPeriodicity1","monthWeekDays","yearRecurrenceType","yearWeekOfMonth","yearMonth0","yearMonth1","yearWeekDays","yearDayNumber","availabilityObj","a_startDate","a_endDate","startDateOffset","startIndex","endDateOffset","endIndex","endRowIdx","startRowIdx","startCol","endCol","origStartRowIdx","$compile","panes","addPane","pane","handler","$parent","topHeight","pane1","pane2","vertical","pane1Min","minSize","pane2Min","pane2Size","initSize","drag","lastSize","minified","after","getBoundingClientRect","setPosition","pos","ev","clientY","clientX","onMinimizeUp","onMinimizeDown","wbSplitterCtrl","$templateCache"],"mappings":"AAKA,IAAAA,MAAAC,QAAAC,OAAA,QAAA,CACA,YACA,iBACA,yBACA,UACA,aACA,aACA,gBAEA,uBACA,cAEA,cACA,+BACA,cACA,qBACA,SACA,YACA,sBACA,oBACA,gBACA,OACAC,IAAA,CAAA,aAAA,aAAA,SAAAC,EAAAC,GACAD,EAAAE,IAAA,sBAAA,SAAAC,EAAAC,EAAAC,GACAL,EAAAM,MAAAL,EAAAM,QAAAH,EAAAI,YAsDA,SAAAC,0BAAAC,GAEA,GAAA,iBAAAA,EAAA,OAAAA,EAEA,IAAA,IAAAC,KAAAD,EAAA,CACA,IAEAE,EAIAC,EANAH,EAAAI,eAAAH,KAKA,iBAHAC,EAAAF,EAAAC,KAGAI,MAAAH,IACAC,EAAAG,OAAAJ,EAAAI,OAAAC,WACAC,YACAR,EAAAC,GAAAE,EAAAM,UAEA,iBAAAP,GAEAH,0BAAAG,KAMA,SAAAQ,yBAAAV,GAEA,OAAAW,EAAAC,cAAAZ,EAAA,SAAAE,EAAAD,GACA,GAAAC,aAAAW,KAAA,CACAV,EAAAG,OAAAJ,GACA,GAAAC,EAAAK,UACA,OAAAH,MAAAJ,IAAAA,EAAAa,SAAA,OACAX,EAAAY,MAAAC,SAEAb,EAAAa,OAAA,0BAlFA9B,MAAA+B,OAAA,CAAA,eACA,SAAAC,GACAA,EAAAC,cAAA,MAGAjC,MAAA+B,OAAA,CAAA,sBAAA,SAAAG,GACAjC,QAAAkC,OAAAD,EAAAE,SAAA,CACAC,UAAA,EACAC,WAAA,EACAC,UAAA,OACAC,WAAA,EACAC,WAAA,gBAKAzC,MAAA+B,OAAA,CAAA,sBAAA,SAAAW,GACAzC,QAAAkC,OAAAO,EAAAN,SAAA,CACAE,WAAA,EAEAE,WAAA,EACAG,WAAA,YAIA3C,MAAA+B,OAAA,CAAA,iBAAA,SAAAa,GACA3C,QAAAkC,OAAAS,EAAAR,SAAA,CACAS,UAAA,wBACAC,UAAA,SACAC,SAAA,cAIA/C,MAAA+B,OAAA,CAAA,mBAAA,SAAAiB,GACA/C,QAAAkC,OAAAa,EAAAZ,SAAA,CACAG,UAAA,OACAU,MAAA,OAIAjD,MAAA+B,OAAA,CAAA,8BAAA,SAAAmB,GACAA,EAAAC,UAAA,gBACAD,EAAAE,eAAA,gBACAF,EAAAG,WAAA,GAAA,MA8CArD,MAAA+B,OAAA,CAAA,gBAAA,SAAAuB,GACAA,EAAAlB,SAAAmB,kBAAAC,KAAA,SAAAC,EAAAC,GAEA,OADA7C,0BAAA4C,GACAA,IAGAH,EAAAlB,SAAAuB,iBAAAH,KAAA,SAAAC,EAAAG,GACA,OAAAH,OAKAzD,MAAA+B,OAAA,CAAA,qBAAA,SAAA8B,GACAA,EACAC,yBAAA,MACAD,EACAE,kBAAA,SAKApC,KAAAqC,UAAAC,YAAA,WACA,OAAA7C,OAAA8C,MAAApC,OAAA,wBAGA9B,MAAAmE,SAAA,aAAAC,YACApE,MAAAmE,SAAA,oBAAAJ,mBAEA/D,MAAA+B,OAAA,CAAA,6BAAA,SAAAsC,GACAA,EAAAC,UAAA,CACAvD,IAAA,0CACAwD,EAAA,OACAC,UAAA,sCAKAC,OAAAT,UAAAU,IAAA,SAAAC,GAEA,IADA,IAAAC,EAAAC,OAAAX,MACAU,EAAAE,QAAAH,GAAA,IAAAC,EAAA,IAAAA,EACA,OAAAA,GChKA5E,MAAA+B,OAAA,CAAA,iBACA,SAAAgD,GACAA,EACAC,KAAA,aAAA,CACAC,YAAA,2BACAC,WAAA,gBACAtE,MAAA,uBAEAoE,KAAA,6BAAA,CACAC,YAAA,iCACAC,WAAA,iBACAtE,MAAA,uCAEAoE,KAAA,+BAAA,CACAC,YAAA,mCACAC,WAAA,mBACAtE,MAAA,yCAEAoE,KAAA,kCAAA,CACAC,YAAA,sCACAC,WAAA,sBACAtE,MAAA,4CAEAoE,KAAA,wBAAA,CACAC,YAAA,4BACAC,WAAA,cACAtE,MAAA,kCAEAoE,KAAA,yBAAA,CACAC,YAAA,0CACAC,WAAA,2BACAtE,MAAA,gDAEAoE,KAAA,oBAAA,CACAC,YAAA,iCACAC,WAAA,gBACAtE,MAAA,8BAEAoE,KAAA,8BAAA,CACAC,YAAA,qDACAC,WAAA,yBACAtE,MAAA,wCAEAoE,KAAA,yBAAA,CACAC,YAAA,yCACAC,WAAA,qBACAtE,MAAA,mCAEAoE,KAAA,oBAAA,CACAC,YAAA,iCACAC,WAAA,gBACAtE,MAAA,8BAEAoE,KAAA,eAAA,CACAC,YAAA,uBACAC,WAAA,YACAtE,MAAA,yBAEAoE,KAAA,aAAA,CACAC,YAAA,mBACAC,WAAA,YACAtE,MAAA,uBAEAoE,KAAA,aAAA,CACAC,YAAA,mBACAC,WAAA,YACAtE,MAAA,uBAEAoE,KAAA,cAAA,CACAC,YAAA,qBACAC,WAAA,aACAtE,MAAA,wBAEAoE,KAAA,cAAA,CACAC,YAAA,qBACAC,WAAA,aACAtE,MAAA,wBAEAoE,KAAA,eAAA,CACAC,YAAA,mBACAC,WAAA,YACAtE,MAAA,mBAEAoE,KAAA,oBAAA,CACAC,YAAA,wBACAC,WAAA,gBACAtE,MAAA,8BAEAoE,KAAA,0BAAA,CACAC,YAAA,8BACAC,WAAA,sBACAtE,MAAA,oCAEAoE,KAAA,mBAAA,CACAC,YAAA,iCACAC,WAAA,gBACAtE,MAAA,6BAEAoE,KAAA,kBAAA,CACAC,YAAA,+BACAC,WAAA,eACAtE,MAAA,4BAEAoE,KAAA,wBAAA,CACAC,YAAA,2CACAC,WAAA,oBACAtE,MAAA,kCAEAoE,KAAA,oBAAA,CACAC,YAAA,wBACAC,WAAA,iBACAtE,MAAA,8BAEAoE,KAAA,yBAAA,CACAC,YAAA,6BACAC,WAAA,iBACAtE,MAAA,mCAEAoE,KAAA,iCAAA,CACAC,YAAA,oCACAC,WAAA,wBACAtE,MAAA,2CAEAoE,KAAA,sCAAA,CACAC,YAAA,0CACAC,WAAA,6BACAtE,MAAA,gDAEAoE,KAAA,+BAAA,CACAC,YAAA,oDACAC,WAAA,qBACAtE,MAAA,yCAEAoE,KAAA,gCAAA,CACAC,YAAA,2CACAC,WAAA,qBACAtE,MAAA,0CAEAoE,KAAA,wBAAA,CACAC,YAAA,qCACAC,WAAA,gBACAtE,MAAA,kCAEAoE,KAAA,iCAAA,CACAC,YAAA,uDACAC,WAAA,wBACAtE,MAAA,2CAEAoE,KAAA,kBAAA,CACAC,YAAA,sBACAC,WAAA,YACAtE,MAAA,4BAEAoE,KAAA,wBAAA,CACAC,YAAA,4BACAC,WAAA,iBACAtE,MAAA,yBAEAoE,KAAA,4BAAA,CACAC,YAAA,gCACAC,WAAA,qBACAtE,MAAA,sCAEAoE,KAAA,gBAAA,CACAC,YAAA,oBACAC,WAAA,UACAtE,MAAA,0BAEAoE,KAAA,oBAAA,CACAC,YAAA,wBACAC,WAAA,eACAtE,MAAA,8BAEAoE,KAAA,mBAAA,CACAC,YAAA,+BACAC,WAAA,cACAtE,MAAA,6BAEAoE,KAAA,2BAAA,CACAC,YAAA,+CACAC,WAAA,qBACAtE,MAAA,qCAEAoE,KAAA,oBAAA,CACAC,YAAA,iCACAC,WAAA,eACAtE,MAAA,8BAEAoE,KAAA,wBAAA,CACAC,YAAA,yCACAC,WAAA,kBACAtE,MAAA,kCAEAoE,KAAA,oBAAA,CACAC,YAAA,iCACAC,WAAA,eACAtE,MAAA,8BAEAoE,KAAA,gBAAA,CACAC,YAAA,yBACAC,WAAA,WACAtE,MAAA,0BAEAoE,KAAA,4BAAA,CACAC,YAAA,iDACAC,WAAA,qBACAtE,MAAA,sCAEAoE,KAAA,gCAAA,CACAC,YAAA,iDACAC,WAAA,uBAGAF,KAAA,2CAAA,CACAC,YAAA,iDACAC,WAAA,uBAGAF,KAAA,yBAAA,CACAC,YAAA,2CACAC,WAAA,oBACAtE,MAAA,mCAEAoE,KAAA,yCAAA,CACAC,YAAA,2EACAC,WAAA,iCACAtE,MAAA,kDAEAoE,KAAA,2BAAA,CACAC,YAAA,+CACAC,WAAA,qBACAtE,MAAA,qCAEAoE,KAAA,yBAAA,CACAC,YAAA,2CACAC,WAAA,mBACAtE,MAAA,mCAEAoE,KAAA,6BAAA,CACAC,YAAA,mDACAC,WAAA,uBACAtE,MAAA,uCAEAoE,KAAA,oBAAA,CACAC,YAAA,iCACAC,WAAA,eACAtE,MAAA,8BAEAoE,KAAA,kBAAA,CACAC,YAAA,sBACAC,WAAA,cACAtE,MAAA,4BAEAoE,KAAA,gCAAA,CACAC,YAAA,qCACAC,WAAA,2BACAtE,MAAA,6CAEAoE,KAAA,wCAAA,CACAC,YAAA,4CACAC,WAAA,iCACAtE,MAAA,kDAEAoE,KAAA,iCAAA,CACAC,YAAA,qCACAC,WAAA,2BACAtE,MAAA,2CAEAoE,KAAA,4BAAA,CACAC,YAAA,gCACAC,WAAA,qBACAtE,MAAA,sCAEAoE,KAAA,sCAAA,CACAC,YAAA,0CACAC,WAAA,+BACAtE,MAAA,gDAEAoE,KAAA,sCAAA,CACAC,YAAA,0CACAC,WAAA,+BACAtE,MAAA,gDAEAoE,KAAA,qBAAA,CACAC,YAAA,mCACAC,WAAA,gBACAtE,MAAA,+BAEAoE,KAAA,sBAAA,CACAC,YAAA,qCACAC,WAAA,iBACAtE,MAAA,gCAEAoE,KAAA,uBAAA,CACAC,YAAA,yCACAC,WAAA,kBACAtE,MAAA,kCAEAoE,KAAA,+BAAA,CACAC,YAAA,uDACAC,WAAA,yBACAtE,MAAA,yCAEAoE,KAAA,gBAAA,CACAC,YAAA,2BACAC,WAAA,aACAtE,MAAA,4BAEAoE,KAAA,sBAAA,CACAC,YAAA,qCACAC,WAAA,gBACAtE,MAAA,gCAEAoE,KAAA,6BAAA,CACAC,YAAA,mDACAC,WAAA,uBACAtE,MAAA,uCAEAoE,KAAA,qBAAA,CACAC,YAAA,mCACAC,WAAA,gBACAtE,MAAA,+BAEAoE,KAAA,gBAAA,CACAC,YAAA,yBACAC,WAAA,WACAtE,MAAA,0BAEAoE,KAAA,wBAAA,CACAC,YAAA,uCACAC,WAAA,iBACAtE,MAAA,kCAEAoE,KAAA,2CAAA,CACAC,YAAA,0DACAC,WAAA,kCACAtE,MAAA,qDAEAoE,KAAA,4BAAA,CACAC,YAAA,gDACAC,WAAA,oBACAtE,MAAA,yCAEAoE,KAAA,2CAAA,CACAC,YAAA,wDACAC,WAAA,uBACAtE,MAAA,wDAEAoE,KAAA,kCAAA,CACAC,YAAA,0DACAC,WAAA,yBACAtE,MAAA,sEAEAoE,KAAA,mBAAA,CACAC,YAAA,gCACAC,WAAA,eACAtE,MAAA,6BAEAoE,KAAA,sBAAA,CACAC,YAAA,sCACAC,WAAA,iBACAtE,MAAA,gCAEAoE,KAAA,8BAAA,CACAC,YAAA,sDACAC,WAAA,wBACAtE,MAAA,wCAEAoE,KAAA,6BAAA,CACAC,YAAA,iCACAC,WAAA,uBACAtE,MAAA,uCAEAoE,KAAA,mBAAA,CACAC,YAAA,+BACAC,WAAA,cACAtE,MAAA,6BAEAoE,KAAA,qBAAA,CACAC,YAAA,yBACAC,WAAA,eACAtE,MAAA,+BAEAuE,UAAA,CACAC,WAAA,kBClYApF,MAAAkF,WAAA,uBAAA,CAAA,SAAA,SAAA,aAAA,cAAA,aACA,SAAAG,EAAAC,EAAAjF,EAAAkF,EAAAnB,GASA,SAAAoB,EAAAC,GACAJ,EAAAK,uBAAAD,EARAJ,EAAAM,aAAA,CACAC,QAAA,CACA,CAAAC,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,QAAAC,UAAA,OACA,CAAAJ,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,YAQAV,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAc,iBAAAZ,EAAAa,uBAAA,GACAZ,EAAA,QAGAH,EAAAc,iBAAAZ,EAAAa,uBAAA,GAEAf,EAAAgB,eAAA,GAEAhB,EAAAiB,cAAA,SAAA7C,GACA+B,EAAA/B,IAGA4B,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAApB,EAAAwB,UAAA,GACAP,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACA8B,EAAA0B,OAAAxD,IAGA4B,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,sDAGA9B,EAAA6B,KAAAE,UAAA,EAGA,IAAAZ,EAAAlB,EAAA,CACAL,YAAA,wCACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YCzDAtH,MAAAkF,WAAA,6BAAA,CAAA,SAAA,cAAA,aAAA,mBACA,SAAAG,EAAAE,EAAAnB,EAAAmD,GAEAlC,EAAAmC,sBAAAD,EAAAE,SAAAD,sBAEAnC,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAAwC,aAAA,SAAApE,GAcA,SAAAqE,IACAzC,EAAA0C,QAGA,SAAAC,EAAAvE,GACA4B,EAAA4C,YAAAxE,EACA4B,EAAA6C,UAAA,EAlBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEAzE,EAAA0E,GAGA5C,EAAA6C,OAAA3E,EAAAqE,EAAAE,GAFAzC,EAAA8C,OAAA5E,EAAAqE,EAAAE,QCpBAhI,MAAAkF,WAAA,cAAA,CAAA,SAAA,SAAA,aAAA,cAAA,YAAA,cAAA,mBAAA,wBACA,SAAAG,EAAAC,EAAAjF,EAAAiI,EAAAC,EAAAC,EAAAjB,EAAAkB,GAKA,SAAAC,EAAAC,EAAAC,KACAvD,EAAAwD,eAAAF,IAEAtD,EAAAM,aAAAmD,cACAzD,EAAAM,aAAAmD,aAAAC,iBAGA1D,EAAA2D,WAAA,wBAAA,CAAAL,OAAAA,EAAAC,UAAAA,IAVAvD,EAAA4D,uBAAAT,EAAAU,SAAA,kBACA7D,EAAA8D,gBAAA,GAaAb,EAAAc,kBACA1C,KAAA,SAAA2C,GACAhE,EAAAiE,WAAAD,EAAAlB,GAEA9C,EAAAkE,QAAAhB,EAAAiB,mBAAAnE,EAAAiE,YAAA,GACAjE,EAAA8D,gBAAA9D,EAAAkE,QACAb,EAAA,QAGArD,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAiE,aACAjE,EAAAkE,QAAAhB,EAAAiB,mBAAAnE,EAAAiE,YAAA,GACAjE,EAAA8D,gBAAA9D,EAAAkE,QACAb,EAAA,SAIArD,EAAA/E,IAAA,wBAAA,SAAA4F,EAAAzC,GACA8E,EAAAkB,oBAAApE,EAAAiE,WAAA7F,EAAAkF,OAAAe,SAAArE,EAAAkE,QAAA,WACAlE,EAAAwD,eAAAa,WAAAjG,EAAAkF,OAAAe,WACAhB,EAAAjF,EAAAkF,QAAA,GACAtD,EAAAM,aAAAmD,cACAzD,EAAAM,aAAAmD,aAAAa,WAAAlG,EAAAkF,QAAA,QAMAtD,EAAAuE,yBAAA,WACA,OAAAvE,EAAAwE,oBAAAxE,EAAAyE,sBAAA,KAGAzE,EAAAwE,kBAAA,WACA,OAAAxE,EAAA8D,gBACA1H,EAAAsI,MAAA1E,EAAA8D,gBAAA,UAEA,GAGA9D,EAAAyE,oBAAA,WACA,OAAAzE,EAAA8D,gBACA1H,EAAAsI,MAAA1E,EAAA8D,gBAAA,YAEA,KAGA9D,EAAA2E,gBAAA,SAAAC,GACA5E,EAAA8D,gBAAAc,GAGA5E,EAAA6E,iBAAA,SAAAZ,GACAA,IACAjE,EAAAkE,QAAAhB,EAAAiB,mBAAAnE,EAAAiE,YAAA,IAEAZ,EAAA,OAGArD,EAAAM,aAAA,CACAwE,KAAA,UACAvE,QAAA,CACA,CAAAC,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,wBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,2BAAAoF,SAAA,SAAAE,UAAA,OACA,CAAAJ,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,qBAAAoF,SAAA,OAAAjE,OAAA,CAAAsI,IAAA,sBAAApE,MAAA,SACA,CAAAH,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAjE,OAAA,WAAAuI,UAAA,EAAArE,MAAA,SACA,CAAAH,UAAA,oBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UAAAC,MAAA,SAEAsE,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,oDACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,uBACAuB,SAAA,SAAAhH,GAIAiG,EAJAjG,EAAAiG,SAKAjB,EAAAiC,gBAAAhB,GACAjD,SAAAC,KAAA,SAAAjD,GACAhC,EAAAkJ,QAAAlH,EAAA,SAAAmH,GACAnC,EAAAoC,6BAAAD,EAAAE,8BAKAzF,EAAAwD,eAAA,GAEAxD,EAAAiB,cAAA,SAAA7C,GACA4B,EAAAwD,eAAApF,EACAiF,EAAArD,EAAAwD,iBAGAxD,EAAA0F,UAAA,SAAAtH,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAA2F,WAAA3F,EAAAkE,QACA/C,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAAsB,MAAA+C,SAAA,EACAlD,EAAAK,UAIAxB,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAA2F,WAAA3F,EAAAkE,QACA/C,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAA4F,aAAA,SAAAtE,GACA+B,EAAA/B,GAAA,IAEAH,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAA2F,WAAA3F,EAAAkE,QACA/C,EAAAnB,OAAAsB,MAAA4B,EAAAxB,UAAA1B,EAAAiE,YAAA,GACA9C,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACA8E,EAAAtB,OAAAxD,EAAA4B,EAAAkE,QAAA,WACAlE,EAAAwD,eAAA,KACAH,EAAA,SAIArD,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,mDACA,CACAzG,MAAA,mBACAyG,SAAA,qDACA,CACAzG,MAAA,oBACAyG,SAAA,sDAGA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,EAAAC,SAAAA,MAGA,IAAA5E,EAAAlB,EAAA,CACAL,YAAA,8BACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YCtKAtH,MAAAkF,WAAA,oBAAA,CAAA,SAAA,SAAA,YAAA,mBACA,SAAAG,EAAAC,EAAAiD,EAAAhB,GAEAlC,EAAAmC,sBAAAD,EAAAE,SAAAD,sBAEAnC,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAAwC,aAAA,SAAApE,GAcA,SAAAqE,EAAAnB,GACAtB,EAAA0C,QACA1C,EAAAgG,cACAhG,EAAAgG,aAAA1E,GAIA,SAAAqB,EAAAvE,GACA4B,EAAA4C,YAAAxE,EACA4B,EAAA6C,UAAA,EArBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEAzE,EAAAiG,SAGAnB,EAAAH,OAAA3E,EAAA4B,EAAA2F,WAAAlD,EAAAE,GAFAO,EAAAF,OAAA5E,EAAA4B,EAAA2F,WAAAlD,EAAAE,KAkBA3C,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,wCACA,CACAzG,MAAA,gBACAyG,SAAA,yCACA,CACAzG,MAAA,kBACAyG,SAAA,4CACA,CACAzG,MAAA,sBACAyG,SAAA,+CACA,CACAzG,MAAA,mBACAyG,SAAA,6CAGA9B,EAAAiG,WAAAlE,UAAA,EAEA/B,EAAAkG,wBAAA,SAAAC,GACA/J,EAAAwF,OAAA5B,EAAAsB,MAAA8E,UAAA,GAAA,CAAAC,SAAAF,EAAAE,YAqBA,IAAAC,EAAArG,EAAA,CACAL,YAAA,4CACA4B,OApBAxB,EAAAuG,kBAAA,WACAD,EAAAlF,SAAAC,KAAA,WACAiF,EAAAtG,OAAAwG,mBAAA,SAAAJ,GAEApG,EAAAsB,MAAA8E,WACApG,EAAAsB,MAAA8E,SAAA,IAGAxL,QAAA0K,QAAAc,EAAA,SAAAK,GACArK,EAAAsK,KAAA1G,EAAAsB,MAAA8E,SAAA,CAAAC,SAAAI,EAAAJ,YACArG,EAAAsB,MAAA8E,SAAAjI,KAAAsI,MAIAH,EAAA9E,WAOAQ,MAAAhC,EAAAiC,YCjFAtH,MAAAkF,WAAA,sBAAA,CAAA,SAAA,SAAA,aAAA,oBACA,SAAAG,EAAAC,EAAAjF,EAAA2L,GAEA,IAAAnD,EAAA,KACAoD,GAAA,EACAC,GAAA,EAIA,SAAAC,IACA9G,EAAA+G,gBAAA3F,SACApB,EAAA+G,gBAAA3F,SAAAC,KAAA,WACA,IAAArB,EAAA+G,gBAAAtH,OACAO,EAAAgH,cAAA,EAEAhH,EAAAgH,cAAA,IAIAhH,EAAAgH,cAAA,EAbAhH,EAAAgH,cAAA,EACAhH,EAAA+G,gBAAA,GAgBA/G,EAAA/E,IAAA,wBAAA,SAAA4F,EAAAoG,GACAA,EAAA3D,OAMAuD,IALAD,IACApD,IAAAyD,EAAA3D,SAAA2D,EAAA1D,UACAvD,EAAA+G,gBAAAJ,EAAAO,YAAAD,EAAA3D,OAAAe,UAAA,GACAyC,MAEA,GAKA9G,EAAA+G,gBAAAtH,OAAA,EAEA+D,EAAAyD,EAAA3D,SAGAtD,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAArD,IACAxD,EAAA+G,gBAAAJ,EAAAO,YAAA1D,EAAAa,UAAA,GACAyC,IACAD,GAAA,IAIAD,GAAA,IAIA5G,EAAAM,aAAA,CACAC,QAAA,CACA,CAAAC,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAjE,OAAA,CAAAsI,IAAA,sBAAApE,MAAA,QAAAC,UAAA,OACA,CAAAJ,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,OAAAjE,OAAA,CAAAsI,IAAA,SAAApE,MAAA,QACA,CAAAH,UAAA,gBAAAC,QAAAzF,EAAAM,QAAA,qBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,YAAAoF,SAAA,WAEAyG,iBAAA,WAAA,OAAAnH,EAAAwD,iBAAAxD,EAAAgH,eAGAhH,EAAAoH,iBAAA,GAEApH,EAAAiB,cAAA,SAAA7C,GACA4B,EAAAoH,iBAAAhJ,GAGA4B,EAAAkB,UAAA,SAAA9C,GACAiJ,EAAAjG,SAAAC,KAAA,WACAgG,EAAArH,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACAiJ,EAAArH,OAAAsH,kBAAA,EACAD,EAAArH,OAAAuH,OAAAvH,EAAAwH,wBACAH,EAAA7F,UAIAxB,EAAAyB,SAAA,WACAzB,EAAAgH,cACAK,EAAAjG,SAAAC,KAAA,WACAgG,EAAArH,OAAAsB,MAAAqF,EAAAjF,UAAA8B,GACA6D,EAAArH,OAAAsH,kBAAA,EACAD,EAAArH,OAAAuH,OAAAvH,EAAAwH,wBACAH,EAAA7F,UAKAxB,EAAA2B,YAAA,SAAAvD,GACAuI,EAAA/E,OAAAxD,EAAA,CAAAqJ,uBAAA,EAAAC,qBAAA,GAAA,WACA1H,EAAAwH,wBAAApJ,KAEA0I,KAaA,IAAAO,EAAApH,EAAA,CACAL,YAAA,sCACA4B,OAZAxB,EAAAwH,wBAAA,SAAAlG,GACAtB,EAAA2H,MAAA,wBAAA,CAAArE,OAAAtD,EAAAwD,mBAYAxB,MAAAhC,EAAAiC,YCjHAtH,MAAAkF,WAAA,sCAAA,CAAA,SAAA,gBACA,SAAAG,EAAA4H,GAEA5H,EAAA6C,UAAA,EACA7C,EAAA6H,QAAA,EAIAD,EAAAE,2BAAA9H,EAAAqE,SAAArE,EAAA+H,WACA3G,SAAAC,KAAA,SAAA2G,GACAhI,EAAA6H,QAAA,EAEA,EAAAG,EAAAvI,SACAO,EAAAsB,MAAA0G,EAAA,GACAhI,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,UAIAtB,EAAAwC,aAAA,SAAAlB,GAEAtB,EAAA6C,WAIA7C,EAAA6C,UAAA,EAgBA+E,EAAA7E,OAAAzB,EAAA,KAdA,WACAtB,EAAAiI,qBACAjI,EAAA0C,SAGA,SAAAtE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,MAUA4B,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,eC5CA1H,MAAAkF,WAAA,sBAAA,CAAA,SAAA,KAAA,SAAA,UAAA,aAAA,UAAA,cAAA,mBAAA,wBAAA,cACA,SAAAG,EAAAkI,EAAAjI,EAAAkI,EAAAnN,EAAAoN,EAAAjF,EAAAjB,EAAAkB,EAAAiF,GAEArI,EAAAsI,eAAApG,EAAAE,SAEApC,EAAAwD,eAAA,KACA,IAAAoD,GAAA,EACAC,GAAA,EAIA,SAAAC,IACAD,GAAA7G,EAAAwD,gBAAAxD,EAAAwD,eAAA+E,YACAvI,EAAAgH,cAAA,EAEAhH,EAAAgH,cAAA,EAkHA,SAAAwB,IACAxI,EAAAwD,gBAAAxD,EAAAM,aAAAmD,cACAzD,EAAAM,aAAAmD,aAAAgF,aAAA,iBAAA,UAAAzI,EAAAwD,eAAAkF,sBA3HA1I,EAAAgH,cAAA,EACAhH,EAAA2I,oBAAA,GAUA3I,EAAA/E,IAAA,wBAAA,SAAA4F,EAAAoG,GACAA,EAAA3D,OASAuD,IARAD,IACA5G,EAAAwD,iBAAAyD,EAAA3D,SAAA2D,EAAA1D,UACAvD,EAAA2I,oBAAAvF,EAAAiC,gBAAA4B,EAAA3D,OAAAe,UACArE,EAAA2I,oBAAAvH,SAAAC,KAAA,WACAmH,IACA1B,QAGA,GAKA9G,EAAA2I,oBAAAlJ,OAAA,EAEAO,EAAAwD,eAAAyD,EAAA3D,OACAwD,MAGA9G,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAA7G,EAAAwD,iBACAxD,EAAA2I,oBAAAvF,EAAAiC,gBAAArF,EAAAwD,eAAAa,UACArE,EAAA2I,oBAAAvH,SAAAC,KAAA,WACAmH,IACA1B,MAEAD,GAAA,IAIAD,GAAA,EAEAE,MAGA9G,EAAAM,aAAA,CACAC,QAAA,CACA,CACAC,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,QAAAC,UAAA,MACAgI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAQ,kBAAAzK,EAAA,cAAA,iBAAA,uBAEA,CAAAoC,UAAA,aAAAC,QAAAzF,EAAAM,QAAA,eAAAoF,SAAA,SAAAC,MAAA,QACA,CACAH,UAAA,eACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAAC,eAEArI,MAAA,SAEA,CAAAH,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,YAAAoF,SAAA,UACA,CAAAF,UAAA,uBAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,SACA,CAAAH,UAAA,iBAAAC,QAAAzF,EAAAM,QAAA,2BAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,sCAAAoF,SAAA,OAAAjE,OAAA,CAAAb,KAAA,SAAA+E,MAAA,UAEAwG,iBAAA,WAAA,OAAAnH,EAAAwD,iBAAAxD,EAAAgH,cACAkC,cAAA,SAAArI,GACA,QAAAA,EAAAsI,SACAtI,EAAAuI,UAAAC,iBAAAxI,EAAAyI,UACAC,4BACA1I,EAAA2I,WAAAC,SAAA,eAIAC,eAAA,SAAA7I,GACA,SAAAA,EAAAsI,SAAA,GAAAtI,EAAA8I,aACA9I,EAAA+I,YAAAC,UAAA,WACAhJ,EAAAzC,KAAA0L,iBACAjJ,EAAA+I,YAAAG,KAAA,QAAA/O,EAAAM,QAAA,oBAAA,KAAA8M,EAAA,OAAAA,CAAAvH,EAAAzC,KAAA0L,gBAAA,iBAKA7E,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,2BACA6J,UAAA,SAAA6E,GAAA,OAAA,EAAAA,EAAAC,QAAA9G,EAAAU,SAAA,mBACAuB,SAAA,SAAA4E,GA8HA5L,EA9HA4L,EA+HAE,EAAAlK,OAAAmK,iBAAA,EACAD,EAAAlK,OAAAoK,cAAA,CACAC,UAAA,EACAC,eAAA,EACAC,UAAAnM,EAAAmM,UACAC,OAAApM,EAAA6L,OACAQ,aAAA1O,SAAAG,UAGAgO,EAAA9I,SAAAC,KAAA,WACA6I,EAAAlK,OAAA4C,YAAA,KACAsH,EAAAlK,OAAAuH,OAAA,WACAvH,EAAA2I,oBAAAvF,EAAAiC,gBAAArF,EAAAwD,eAAAa,WAGA6F,EAAA1I,WA7IA,CACA0D,KAAAlK,EAAAM,QAAA,0BACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,YACAuB,SAAA,SAAAhH,GA4BAqH,EA5BArH,EAAAqH,qBA6BA0C,EAAAuC,KAAA,kCAAAjF,EAAA,kBACA,SAAA,mHA7BA,CACAP,KAAAlK,EAAAM,QAAA,mCACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,YAAAV,EAAAU,SAAA,4CACAuB,SAAA,SAAAhH,GA6BAqH,EA7BArH,EAAAqH,qBA8BA0C,EAAAuC,KAAA,4DAAAjF,EACA,SAAA,mHA9BA,CACAP,KAAAlK,EAAAM,QAAA,4BACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,sBACAuB,SAAA,SAAAhH,GA8BA,IAAAiG,EAAA0D,EAAA1D,EA9BAjG,EAAAiG,SA8BA0D,EA9BA3J,EAAA2J,UA+BA4C,EAAAvJ,SAAAC,KAAA,WACAsJ,EAAA3K,OAAAqE,SAAAA,EACAsG,EAAA3K,OAAA+H,UAAAA,EACA4C,EAAA3K,OAAAiI,mBAAA,WACAjI,EAAA4K,4BAAA5K,EAAAwD,iBAEAmH,EAAAnJ,WApCA,CACA0D,KAAAlK,EAAAM,QAAA,oDACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,uBACAuB,SAAA,SAAAhH,GACAgF,EAAAoC,6BAAApH,EAAAqH,sBACApE,KAAA,WACAjD,EAAAyM,kBAAA,SAkCA7K,EAAAsI,eAAAwC,8BACAC,EAAA3O,EAAAsK,KAAA1G,EAAAM,aAAAC,QAAA,CAAAC,UAAA,mBAEAuK,EAAAvK,UAAA,SACAuK,EAAAtK,QAAAzF,EAAAM,QAAA,mBAIA0E,EAAAgL,qBAAA,GAEAhL,EAAAiB,cAAA,SAAA7C,GACA4B,EAAAgL,qBAAA5M,GAGA4B,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsD,OAAAtD,EAAAwD,eACArC,EAAAnB,OAAAsB,MAAA,IAAA2J,wBAAAC,mBAAA9M,GACA+C,EAAAnB,OAAAiI,mBAAA,WACAjI,EAAA2I,oBAAAvF,EAAAiC,gBAAArF,EAAAwD,eAAAa,UACArE,EAAA4K,4BAAA5K,EAAAwD,iBAEArC,EAAAK,UAIAxB,EAAA4K,4BAAA,SAAAtJ,GACAtB,EAAA2H,MAAA,wBAAA,CAAArE,OAAAtD,EAAAwD,kBAGAxD,EAAAyB,SAAA,WAEAyG,EAAAiD,IAAA,CAAAhK,EAAAC,SAAAgC,EAAA1B,UAAA1B,EAAAwD,gBAAA,KACAnC,KAAA,SAAAjD,GACAgN,EAAAhN,EAAA,GACA+C,EAAAnB,OAAAsD,OAAAtD,EAAAwD,eACArC,EAAAnB,OAAAsB,MAAA8J,EACAjK,EAAAnB,OAAAiI,mBAAA,WACAjI,EAAA2I,oBAAAvF,EAAAiC,gBAAArF,EAAAwD,eAAAa,UACArE,EAAA4K,4BAAA5K,EAAAwD,iBAEArC,EAAAK,UAcA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,2DACA4B,OAZAxB,EAAA2B,YAAA,SAAAvD,GACAgF,EAAAxB,OACAxD,EACA,EACA,WACA4B,EAAA2I,oBAAAvF,EAAAiC,gBAAArF,EAAAwD,eAAAa,UACArE,EAAA4K,4BAAA5K,EAAAwD,oBAOAxB,MAAAhC,EAAAiC,SAGA0I,EAAA1K,EAAA,CACAL,YAAA,qEACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGAiI,EAAAjK,EAAA,CACAL,YAAA,wCACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YClOAtH,MAAAkF,WAAA,4BAAA,CAAA,SAAA,cAAA,gBAAA,wBAAA,mBACA,sBAAA,aACA,SAAAG,EAAAmD,EAAAkI,EAAAjI,EAAAlB,EAAAoJ,EAAAtQ,GAkBA,SAAAuQ,EAAAjI,GAEAkI,GAAA,GAEApI,EAAAqI,gBAAAzL,EAAAsB,MAAAgC,GAAA,GAAA,GACAjC,KAAA,WACArB,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OACAtB,EAAA0L,qBAAA1L,EAAAsB,MAAAoK,qBAEA1L,EAAA2L,gBACAvI,EAAAwI,oBAAA5L,EAAAsD,OAAAe,SAAArE,EAAAsB,MAAAuK,kBAAAzK,SAAAC,KAAA,SAAAjD,GACA4B,EAAA8L,kBAAAC,QAAA3N,EAAA2N,UAIAP,GAAA,IAEA,SAAAQ,GACAhM,EAAA0L,qBAAA,GACA1L,EAAA4C,YAAAoJ,EAEAR,GAAA,KAIA,SAAAA,EAAA3D,GACA7H,EAAA6H,OAAAA,EACA7H,EAAAiM,SAAApE,EACAjN,QAAA0K,QAAAtF,EAAAiG,WAAA,SAAAiG,GACAA,EAAAC,SAAAtE,IA7CA7H,EAAA2L,eAAAzJ,EAAAE,SAAAuJ,eACA3L,EAAA8L,kBAAA,CAAAC,QAAA,MACA/L,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OACAtB,EAAA0L,qBAAA,GAEA1L,EAAAiM,SAAA,EACAjM,EAAA6H,QAAA,EAEA7H,EAAAoM,yBAAA,SAAAP,GACA7L,EAAA2L,gBACAvI,EAAAwI,oBAAA5L,EAAAsD,OAAAe,SAAAwH,GAAAzK,SAAAC,KAAA,SAAAjD,GACA4B,EAAA8L,kBAAAC,QAAA3N,EAAA2N,WAuCAR,EAAAvL,EAAAsD,QAEAtD,EAAAqM,gBAAA,SAAAtE,GACAwD,EAAAvL,EAAAsD,SAGAtD,EAAAsM,wBAAA,SAAAhL,GACA8B,EAAAmJ,qBAAAjL,EAAAA,EAAAkL,iBAGAxM,EAAA6C,UAAA,EAEA7C,EAAAwC,aAAA,SAAAlB,GAUA,SAAAmB,IACAzC,EAAAiI,qBACAjI,EAAA0C,QAGA,SAAAC,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EAOA,SAAAqO,EAAAC,GACArB,EAAAsB,8BAAA,CACAC,YAAA,CAAA,mCACAC,yBAAA,EACAzH,SAAA,SAAA0H,GACA1J,EAAAL,OACAzB,EACAwL,EACA,EACAJ,EACAjK,EACAE,MAjCA3C,EAAA+M,uCAAAzL,EAAA0L,SAEAhN,EAAA6C,WAIA7C,EAAA6C,UAAA,EAgCAvB,EAAAmE,qBAcAnE,EAAA0L,QAAAC,WAEA5B,EAAA6B,eAAA,CACA7R,MAAA,yBACA8R,QAAA,+BACAC,QAAA,CAAA,CACAlI,KAAA,iBACAE,SAzCA,WACApF,EAAA6C,UAAA,IAyCA,CACAqC,KAAA,6BACAE,SAAA,WAAAqH,GAAA,KACA,CACAvH,KAAA,6BACAE,SAAA,WAAAqH,GAAA,QAIArJ,EAAAL,OACAzB,EACA,CACAmG,uBAAA,EACAC,qBAAA,GAEA,GACA,EACAjF,EACAE,GAvCA0I,EAAAsB,8BAAA,CACAC,YAAA,CAAA,mCACAC,yBAAA,EACAzH,SAAA,SAAA0H,GACA1J,EAAAJ,OACA1B,EACAwL,EACA,EACArK,EACAE,QAoCA3C,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,cACArC,EAAAsB,MAAA0L,UAAAhN,EAAAsB,MAAA0L,QAAAC,cACAjN,EAAAsB,MAAAmE,sBAGAzF,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,oEACAqK,UAAA,GACA,CACA9Q,MAAA,gBACAyG,SAAA,qEACAqK,UAAA,GACA,CACA9Q,MAAA,iBACAyG,SAAA,sEACAqK,UAAA,IAGAnM,EAAAiG,WAAAlE,UAAA,EAEA/B,EAAA+M,uCAAA,SAAAC,IACA1B,EAAA+B,cACAC,EAAAlR,EAAAsK,KAAAsG,EAAAO,MAAA,SAAAC,GACA,MAAA,oBAAAA,EAAAC,UAAA,GAAAD,EAAAE,iCAIApC,EAAAqC,IAAA,mCAAAL,EAAAxI,MACAwG,EAAAqC,IAAA,sCAAAL,EAAAM,WAKA5N,EAAA6N,eAAA,SAAAC,GACA,IAAAC,EAAA/N,EAAAsB,MAAA0L,QAAAgB,wBAAAF,GACA,GAAAA,IAEAxC,EAAA+B,aACAU,EAAAjJ,KAAAwG,EAAA2C,IAAA,qCAAAjT,EAAAM,QAAA,gBACAyS,EAAAH,QAAAtC,EAAA2C,IAAA,wCAAA,GAEAF,EAAAjJ,KAAA9J,EAAAM,QAAA,kBAKA0E,EAAAkO,kBAAA,SAAAlB,EAAAmB,GACAnB,EAAAoB,2BAAAD,IAGAnO,EAAAqO,gCAAA,CACA,CACAnJ,KAAAlK,EAAAM,QAAA,oCACAgT,MAAA,qBAEA,CACApJ,KAAAlK,EAAAM,QAAA,sBACAgT,MAAA,yBCtNA3T,MAAA4T,UAAA,wBAAA,CAAA,WAAA,aAAA,UAAA,cAAA,cACA,SAAAC,EAAAxT,EAAAoN,EAAAlI,EAAAmI,GACA,SAAAoG,EAAArO,GACA,GAAAA,EAEA,OAAAA,EAAA0E,KAGA,SAAA4J,EAAAtO,GACA,OAAAA,EAAA0E,KAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,WACAC,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAAC,EAAAhP,EAAAa,uBAAA,GAEAmO,EAAA9N,SAAAC,KAAA,WACAmN,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,mCACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,wBAAA,EACA1M,GAAA,SAAAxB,GACA,OAAAA,EAAAwB,IAEA1E,KAAAhC,EAAAqT,OAAAP,EAAA,SAAAQ,GACA,OAAArH,EAAAsH,WAAAD,EAAA,UAEAE,QAAA,SAAAC,EAAA3K,EAAA9G,GACA,OAAA,GAAAA,EAAA0G,KAAAgL,cAAAC,QAAAF,EAAAC,kBAIAb,EAAAe,QAAA,WACAb,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,aAGAhB,EAAAe,WACA,GAEAf,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,KAOAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAsT,EAAAe,iBCtEArV,MAAAkF,WAAA,mDAAA,CAAA,SAAA,UAAA,gBAAA,+BACA,SAAAG,EAAAoI,EAAAiD,EAAAoF,GAEAzQ,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,6EAEA,CACAzG,MAAA,kBACAyG,SAAA,iFAIA9B,EAAA0Q,QAAA3U,OAAAiE,EAAAsB,MAAAqP,WAAAC,QAAA,OAAAC,SAAA,EAAA,OAEA7Q,EAAAiG,WAAAlE,UAAA,EAGA/B,EAAAwC,aAAA,SAAApE,GAeA,SAAAqE,EAAAnB,GACAtB,EAAA0C,QACA1C,EAAA8Q,gBACA9Q,EAAA8Q,eAAAxP,GAIA,SAAAqB,EAAAvE,GACA4B,EAAA4C,YAAAxE,EACA4B,EAAA6C,UAAA,EAtBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,EAGAzE,EAAA2S,4BAGAN,EAAA1N,OAAA3E,EAAAqE,EAAAE,GAFA8N,EAAAzN,OAAA5E,EAAAqE,EAAAE,QC/BAhI,MAAAkF,WAAA,iBAAA,CAAA,SAAA,SAAA,WAAA,KAAA,aAAA,UAAA,cAAA,cACA,eAAA,oBAAA,sBAAA,cACA,SAAAG,EAAAC,EAAAuO,EAAAtG,EAAAlN,EAAAoN,EAAA4I,EAAA/N,EACAgO,EAAAC,EAAAC,EAAAhO,GA8BA,SAAAiO,EAAAC,GACA,OAAAnJ,EAAA,SAAAoJ,EAAAC,GACA,IAAAC,EAAA,KACAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cAAA4N,IACAG,EAAAxR,EAAAM,aAAAmD,aAAAgO,sBAGAT,EAAAU,wBAAA1R,EAAAiE,YAAA,GACA7C,SAAAC,KAAA,SAAAjD,GACA4B,EAAA2R,WAAAvT,EAEAoT,GAAAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cAAA4N,EACA7C,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAAkN,GAAA,GAAAnQ,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACAmS,EAAA,SAGA,KAEAA,EAAA,MAGAN,KAEA,SAAA3O,GACA3C,EAAA2R,WAAA,GACAC,EAAA,MAEAL,QAKA,SAAAK,EAAAC,GACA7R,EAAA8R,iBAAAD,EACA7R,EAAA2D,WAAA,2BAAA3D,EAAA8R,kBA4IA,SAAAC,IACA/R,EAAAgS,eAAAC,iBAAA,IAAAjS,EAAAgS,eAAAC,gBAAAxS,SAIAO,EAAAkS,iBAAA,EACAf,EAAAgB,uBAAAnS,EAAAgS,eAAAC,iBAAA,GACA7Q,SAAAC,KAAA,SAAAjD,GACA4B,EAAAkS,iBAAA,EAEAlS,EAAAoS,gBAAAhW,EAAAiW,MAAAjU,EAAA,SAAAkU,GACA,OAAAA,EAAAC,wBAGA,SAAA5P,GACA3C,EAAAkS,iBAAA,KA3NAlS,EAAA6C,UAAA,EACA7C,EAAAwS,qBAAArP,EAAAU,SAAA,2BAEA7D,EAAAyS,cAAA,CACAC,WAAA,IAGAxK,EAAAiD,IAAA,CAAAlI,EAAAc,kBACAmN,EAAAnN,kBACAkN,EAAA/J,cAAA9F,SACA8P,EAAAhK,cAAA9F,WACAC,KAAA,SAAAjD,GACAA,EAAA,KACA4B,EAAAiE,WAAA7F,EAAA,GAAA0E,IAGA1E,EAAA,KACA4B,EAAA2S,wBAAAvU,EAAA,GAAA0E,IAGA9C,EAAA2R,WAAAX,EAAAU,wBACA,MAAA1R,EAAAiE,WAAAjE,EAAAiE,WAAA,QAGAjE,EAAA6E,iBAAA,SAAAZ,GACAmN,GAAA,IA0CApR,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,GAAA,KAGApR,EAAAM,aAAA,CACAwE,KAAA,aACAvE,QAAA,CACA,CACAC,UAAA,OACAC,QAAAzF,EAAAM,QAAA,gBACAoF,SAAA,SACAC,MAAA,QACAC,UAAA,OAEA,CAAAJ,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,UACA,CACAF,UAAA,cACAC,QAAAzF,EAAAM,QAAA,qBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,YAAAA,CAAAW,EAAA6J,cAEAjS,MAAA,WAKAX,EAAAiB,cAAA,SAAA7C,GACAwT,EAAAxT,IAGA4B,EAAAyB,SAAA,WAEAzB,EAAAgS,eAAA,CACA/N,WAAAjE,EAAAiE,WACA4O,OAAA,EACAC,iBAAA9S,EAAA2S,yBAEA3S,EAAA+S,mBAAAnY,QAAA2G,KAAAvB,EAAAgS,gBAEA7Q,EAAAC,SAAAC,KAAA,WACArB,EAAA4C,YAAA,KACAzB,EAAAK,UAIAxB,EAAAkB,UAAA,SAAA9C,GAEA,IAAA4U,EAAA,GACAC,EAAAjC,EAAAkC,gBAAA9U,EAAA+U,YAAA,GACAH,EAAA7U,KAAA8U,EAAA7R,UAEA4R,EAAA7U,KAAAgD,EAAAC,UAEA8G,EAAAiD,IAAA6H,GAAA3R,KAAA,WACArB,EAAAgS,eAAAiB,EACAjT,EAAA+S,mBAAAnY,QAAA2G,KAAAvB,EAAAgS,gBAEA7Q,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACA4S,EAAApP,OAAAxD,GAAAgD,SAAAC,KAAA,WACA+P,GAAA,MAIApR,EAAAoT,qBAAA,SAAAhV,GAcA,SAAAqE,IACAtB,EAAAkS,OAEAjC,IADApR,EAAA6C,UAAA,IAIA,SAAAF,EAAAqJ,GACAhM,EAAA4C,YAAAoJ,EACAhM,EAAA6C,UAAA,EApBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEAzE,EAAAyU,MACA7B,EAAAhO,OAAA5E,EAAAqE,EAAAE,GAEAqO,EAAAjO,OAAA3E,EAAAqE,EAAAE,KAeA3C,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAA+S,qBAGA/S,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,qCAIA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,8CACA,CACAzG,MAAA,gBACAyG,SAAA,+CACA,CACAzG,MAAA,wBACAyG,SAAA,sDACA,CACAzG,MAAA,sBACAyG,SAAA,qDACA,CACAzG,MAAA,sBACAyG,SAAA,kDAGA9B,EAAAiG,WAAAlE,UAAA,EAEA/B,EAAA6F,OAAA,uBAAA,SAAAC,EAAAC,GAEA,IADAD,GAEAiM,MAKA/R,EAAAkS,iBAAA,EAuBA,IAAA/Q,EAAAlB,EAAA,CACAL,YAAA,oCACA4B,OAxBAxB,EAAAoS,gBAAA,IAyBApQ,MAAAhC,IAGAsT,EAAArT,EAAA,CACAL,YAAA,8DACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGAsR,EAAAtT,EAAA,CACAL,YAAA,wCACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGAjC,EAAAwT,2BAAA,WACAF,EAAAlS,SAAAC,KAAA,WAEAiS,EAAAtT,OAAAyT,mBAAA,EAEAH,EAAAtT,OAAA0T,gBAAA,SAAAC,GAEA3T,EAAAgS,eAAAC,kBACAjS,EAAAgS,eAAAC,gBAAA,IAGArX,QAAA0K,QAAAqO,EAAA,SAAAlN,GACAzG,EAAAgS,eAAAC,gBAAAvL,KAAA7F,GAAAA,GAAA4F,EAAAmN,aACA5T,EAAAgS,eAAAC,gBAAA9T,KAAAsI,EAAAmN,WACA7B,QAIAuB,EAAA9R,UAIAxB,EAAA6T,cAAA,SAAAC,GACA3F,EAAAnO,EAAAgS,eAAAC,gBAAAlC,QAAA+D,IACA,EAAA3F,GACAnO,EAAAgS,eAAAC,gBAAA8B,OAAA5F,EAAA,IAIAnO,EAAAgU,cAAA,SAAAC,GACA,IAAA3S,EAAAtB,EAAAoS,gBAAA6B,GACAV,EAAAnS,SAAAC,KAAA,WACAkS,EAAAvT,OAAAsB,MAAA1G,QAAA2G,KAAAD,GACAiS,EAAAvT,OAAAiU,iBAAAA,EACAV,EAAAvT,OAAAkU,kBAAA,SAAAC,GACAnU,EAAAoS,gBAAA6B,GAAAE,GAEAZ,EAAA/R,aC7RA7G,MAAAkF,WAAA,+BAAA,CAAA,SAAA,wBACA,SAAAG,EAAAoU,GAEApU,EAAAqU,oBAAA,CAAAC,KAAA,GAAAC,mBAAA,aAAAC,aAAA,cACAxU,EAAAyU,gBAAA,GAWAzU,EAAA0U,iBAAA,SAAAC,GACAP,EAAAQ,4BACAD,EAAA3U,EAAA6U,sBAAA1B,YACA/R,SACAC,KAAA,SAAAyT,GAZA,IAAAA,EAAAC,EAAAD,EAaAA,EAbAC,EAaA/U,EAAA6U,sBAAAG,UAbA7B,EAaAnT,EAAA6U,sBAAA1B,WAVA7R,EAAA8S,EAAAa,0BAAAH,EAAAC,EAUAJ,EAVAxB,GACAnT,EAAAyU,gBAAA7Z,QAAA2G,KAAAuT,GACA9U,EAAAqU,oBAAA/S,KAYAtB,EAAAkV,sBAAA,SAAAF,GACAhV,EAAAqU,oBAAAG,aAAAW,KAAAnV,EAAAqU,qBACArU,EAAAqU,oBAAAE,mBAAAY,KAAAnV,EAAAqU,sBAGArU,EAAAoV,oCAAA,WACApV,EAAAqU,oBAAAG,aAAAW,KAAAnV,EAAAqU,qBACAzZ,QAAA2H,OAAAvC,EAAAqU,oBAAAS,YAAA9U,EAAAyU,kBACAL,EAAAiB,UACArV,EAAAqU,oBAAAS,YACA9U,EAAA6U,sBAAAF,WACA3U,EAAA6U,sBAAA1B,YACA9R,KAAA,SAAAjD,GACA4B,EAAAsV,yBAAAlX,IACA,SAAAmX,GACAvV,EAAAwV,8BAAAD,KAMAvV,EAAA6U,sBAAAhC,OACA7S,EAAA0U,iBAAA1U,EAAA6U,sBAAAF,eC9CAha,MAAAkF,WAAA,uCAAA,CAAA,SAAA,SAAA,4BACA,SAAAG,EAAAC,EAAAwV,GAEAzV,EAAA0V,WAAA,GAEA1V,EAAAiE,WAAA,KACAjE,EAAAmT,WAAA,KACAnT,EAAA+H,UAAA,KAEA,IAAAnB,GAAA,EACAC,GAAA,EAEA,SAAA8O,IACA3V,EAAAmT,YAAAnT,EAAA+H,WACA/H,EAAA0V,WAAAD,EAAAG,gCACA5V,EAAAiE,WACAjE,EAAAmT,WACAnT,EAAA+H,WACAlB,GAAA,GAEA7G,EAAA0V,WAAA,GAIA1V,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,EACAC,GACA8O,KAIA/O,GAAA,IAIA5G,EAAA/E,IAAA,kCAAA,SAAA4F,EAAAzC,GACAA,EAAA2J,WAAA/H,EAAA+H,WACA3J,EAAA+U,YAAAnT,EAAAmT,YACA,iCAAA/U,EAAAyX,YACA7V,EAAAiE,WAAA7F,EAAA6F,WACAjE,EAAAmT,WAAA/U,EAAA+U,WACAnT,EAAA+H,UAAA3J,EAAA2J,UAEAnB,EACA+O,IAEA9O,GAAA,GAGA7G,EAAA0V,WAAAjW,OAAA,IAIAO,EAAA8V,6CAAA,CACApD,WAAA,IAGA1S,EAAA+V,2CAAA,CACAC,SAAA,CAAAC,OAAA,CAAA,QAAAC,WAAA,CAAA,QACAC,WAAA,CACA,CAAAC,MAAA,OAAAC,WAAA,sBAAAC,YAAA,UAAA3V,MAAA,SACA,CAAAyV,MAAA,cAAAE,YAAA,SAAA3V,MAAA,SACA,CAAAyV,MAAA,aAAAE,YAAA,YAAA3V,MAAA,QACA,CAAAyV,MAAA,QAAAE,YAAA,YAAA3V,MAAA,QACA,CAAAyV,MAAA,8BAAAC,WAAA,YAAAC,YAAA,4BAAA3V,MAAA,SACA,CAAAyV,MAAA,4BAAAC,WAAA,YAAAC,YAAA,0BAAA3V,MAAA,SACA,CAAAyV,MAAA,eAAAE,YAAA,SAAA3V,MAAA,SACA,CAAAyV,MAAA,cAAAE,YAAA,YAAA3V,MAAA,QACA,CAAAyV,MAAA,+BAAAC,WAAA,YAAAC,YAAA,4BAAA3V,MAAA,SACA,CAAAyV,MAAA,6BAAAC,WAAA,YAAAC,YAAA,0BAAA3V,MAAA,SACA,CAAAyV,MAAA,QAAAE,YAAA,iBAEAC,iBAAA,EACAC,cAAA,iBC3EA7b,MAAAkF,WAAA,6BAAA,CAAA,SAAA,SAAA,aAAA,UAAA,gBAAA,cAAA,cAAA,4BACA,SAAAG,EAAAC,EAAAjF,EAAAoN,EAAAiD,EAAA2F,EAAA/N,EAAAwS,GAkBA,SAAAgB,IACAzW,EAAA0W,gBAAA,GAEA1W,EAAAmT,WACAnT,EAAA2W,SAAAlB,EAAAmB,sBACA5W,EAAAiE,WACAjE,EAAAmT,WACAnT,EAAA6W,wBACA7W,EAAA8W,SACA9W,EAAA9D,QAEA8D,EAAA2W,SAAAlX,OAAA,EAGAO,EAAA+W,kBAAA,MAEAC,EAAAhX,EAAAmT,WAAA,MAkFA,SAAA6D,EAAA7D,EAAApL,GACAoL,GAAApL,EAGA0N,EAAAwB,mBAAAjX,EAAAmT,WAAAnT,EAAA0W,gBAAA3O,WACA3G,SAAAC,KAAA,SAAAjD,GACA4B,EAAAkX,8BAAA9a,EAAA+a,IAAA/Y,EAAAgZ,cAAA,SAAAC,GACA,MAAA,CAAAA,EAAAzb,KAAAyb,EAAAC,gBAGA,SAAA3U,GACA3C,EAAAkX,8BAAA,KATAlX,EAAAkX,8BAAA,GAmDA,SAAAK,EAAA1B,GACA7V,EAAA2D,WAAA,kCAAA,CACAM,WAAAjE,EAAAiE,WACAkP,WAAAnT,EAAAmT,WACApL,UAAA/H,EAAA0W,gBAAA1W,EAAA0W,gBAAA3O,UAAA,KACAyP,gBAAAxX,EAAA0W,gBAAA1W,EAAA0W,gBAAAc,gBAAA,KACA3B,WAAAA,IA7KA7V,EAAA6W,wBAAA,EACA7W,EAAA8W,SAAA/a,SAAA8U,SAAA,EAAA,KAAAD,QAAA,OAAA1U,SACA8D,EAAA9D,OAAAH,SAAA6U,QAAA,OAAA1U,SAEA8D,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAiE,YAAAjE,EAAAmT,YACAsD,MAIAzW,EAAAyX,mBAAA,WACAzX,EAAAiE,YAAAjE,EAAAmT,YACAsD,KAuBAzW,EAAAM,aAAA,CACAwE,KAAA,WACAvE,QAAA,CACA,CAAAC,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAE,UAAA,OAEA,CAAAJ,UAAA,8BAAAC,QAAAzF,EAAAM,QAAA,iBAAA,IAAAN,EAAAM,QAAA,6BAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,sCAAAC,QAAAzF,EAAAM,QAAA,yBAAA,IAAAN,EAAAM,QAAA,6BAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,uCAAAC,QAAAzF,EAAAM,QAAA,0BAAA,IAAAN,EAAAM,QAAA,6BAAAoF,SAAA,SAAAC,MAAA,QAEA,CAAAH,UAAA,mCAAAC,QAAAzF,EAAAM,QAAA,iBAAA,IAAAN,EAAAM,QAAA,uBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,2CAAAC,QAAAzF,EAAAM,QAAA,yBAAA,IAAAN,EAAAM,QAAA,uBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,4CAAAC,QAAAzF,EAAAM,QAAA,0BAAA,IAAAN,EAAAM,QAAA,uBAAAoF,SAAA,SAAAC,MAAA,QAEA,CAAAH,UAAA,iBAAAC,QAAAzF,EAAAM,QAAA,iBAAA,IAAAN,EAAAM,QAAA,0BAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,yBAAAC,QAAAzF,EAAAM,QAAA,yBAAA,IAAAN,EAAAM,QAAA,0BAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,0BAAAC,QAAAzF,EAAAM,QAAA,0BAAA,IAAAN,EAAAM,QAAA,0BAAAoF,SAAA,SAAAC,MAAA,QAcA,CAAAH,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,0BAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,yBAAAC,QAAAzF,EAAAM,QAAA,2BAAAoF,SAAA,OAAAC,MAAA,UAEAuI,cAAA,SAAArI,GACA,QAAAA,EAAAsI,UACAtI,EAAAuI,UAAAC,iBAAAxI,EAAAyI,UACAoO,eACA7W,EAAA2I,WAAAC,SAAA,iBAgCAzJ,EAAA2X,cAAA,CACAhX,MAAA,OACAiX,iBAAA,SAAAC,EAAAC,EAAA7B,GACA,OAAA7N,EAAA,OAAAA,CAAA6N,EAAA8B,EAAA,OAAA,IAAA3P,EAAA,OAAAA,CAAA6N,EAAA8B,EAAA,aAAA,MAAA9B,EAAA+B,IAIAhY,EAAAkX,8BAAA,GAmBAlX,EAAAiE,WACAjE,EAAAmT,WACAnT,EAAA2W,SAAA,GACA3W,EAAA0W,gBAAA,GAEA1W,EAAA/E,IAAA,gCAAA,SAAA4F,EAAAzC,GAEAqX,EAAAwC,4BACAjY,EAAA2W,SACAvY,EAAA2J,UACA/H,EAAAiE,WACAjE,EAAAmT,WACAnT,EAAA6W,wBACA7W,EAAA8W,SACA9W,EAAA9D,QAEAqb,EAAA,mCAGAtU,EAAAc,kBAAA1C,KAAA,SAAA6W,GACAA,GACAlY,EAAAiE,WAAAiU,EAAApV,GACA9C,EAAA6E,iBAAA7E,EAAAiE,aAEAjE,EAAAiE,WAAA,OAIAjE,EAAA6E,iBAAA,SAAAsT,GACAnH,EAAAU,wBAAAyG,IAGAnY,EAAAoY,iBAAA,SAAAjF,GACAsD,KAaAzW,EAAA+W,kBAAA,SAAAsB,GACArY,EAAA0W,gBAAA2B,EACArB,EAAAhX,EAAAmT,WAAAkF,EAAAA,EAAAtQ,UAAA,MACAwP,EAAA,4BAGAvX,EAAAkB,UAAA,SAAAmX,KAIArY,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,uDAEA,CACAzG,MAAA,qBACAyG,SAAA,2DAEA,CACAzG,MAAA,0BACAyG,SAAA,gEAEA,CACAzG,MAAA,6BACAyG,SAAA,mEAEA,CACAzG,MAAA,0BACAyG,SAAA,iEAGA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,SCvNAnL,MAAAkF,WAAA,mCAAA,CAAA,SAAA,UAAA,gBAAA,4BACA,SAAAG,EAAAoI,EAAAiD,EAAAoK,GAEAzV,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,2DAEA,CACAzG,MAAA,kBACAyG,SAAA,6DAEA,CACAzG,MAAA,qBACAyG,SAAA,iEAEA,CACAzG,MAAA,eACAyG,SAAA,4DAEA,CACAzG,MAAA,gBACAyG,SAAA,+DAIA9B,EAAAiG,WAAAlE,UAAA,EAEA/B,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,QAAAC,WAAA,CAAA,QACAC,WAAA,CACA,CAAAC,MAAA,OAAAC,WAAA,oBAAAC,YAAA,OACA,CAAAF,MAAA,cAAAE,YAAA,YAAA3V,MAAA,QACA,CAAAyV,MAAA,QAAAE,YAAA,OAAA3V,MAAA,QACA,CAAAyV,MAAA,8BAAAC,WAAA,YAAAC,YAAA,4BAAA3V,MAAA,QACA,CAAAyV,MAAA,4BAAAC,WAAA,YAAAC,YAAA,0BAAA3V,MAAA,QACA,CAAAyV,MAAA,eAAAE,YAAA,YAAA3V,MAAA,QACA,CAAAyV,MAAA,+BAAAC,WAAA,YAAAC,YAAA,4BAAA3V,MAAA,QACA,CAAAyV,MAAA,6BAAAC,WAAA,YAAAC,YAAA,0BAAA3V,MAAA,SAEA4V,iBAAA,EACAgC,YAAA,EACAC,aAAA,EACAhC,cAAA,cAGAxW,EAAAyY,iBAAA,IAAAnc,KACA0D,EAAA0Y,iBAAA,IAAApc,KACA0D,EAAA2Y,cAAA3Y,EAAAyY,iBACAzY,EAAA4Y,YAAA5Y,EAAA0Y,iBACA1Y,EAAA6Y,eAAApD,EAAAqD,wBAAA9Y,EAAAmT,WAAAnT,EAAA+H,UAAA/H,EAAA+Y,0BACA/Y,EAAAgZ,2BAAA,EACAhZ,EAAAiZ,eAAA,GAEAjZ,EAAA6Y,eAAAzX,SAAAC,KAAA,WAMA,GALArB,EAAAyY,iBAAAhD,EAAAyD,gBAAAlZ,EAAA6Y,eAAAnD,YACA1V,EAAA0Y,iBAAAjD,EAAA0D,gBAAAnZ,EAAA6Y,eAAAnD,YACA1V,EAAAiZ,eAAAjZ,EAAA6Y,eAAAO,uBACApZ,EAAA6Y,eAAAO,uBAAAC,WAAA,KAAAjR,EAAA,gBAAAA,CAAApI,EAAA6Y,eAAAO,uBAAAE,aAAA,IACA,GACAtZ,EAAA6Y,eAAAE,yBAUA,CACA/Y,EAAA2Y,cAAA,KACA,IAAA,IAAAY,EAAA,EAAAA,EAAAvZ,EAAA6Y,eAAAnD,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7D,EAAA1V,EAAA6Y,eAAAnD,WAAA6D,GACA7D,EAAA8D,aACAxZ,EAAA4Y,YAAA7c,OAAA2Z,EAAA9Z,MAAAgV,QAAA,OAAA1U,SAEA8D,EAAA2Y,gBACA3Y,EAAA2Y,cAAA5c,OAAA2Z,EAAA9Z,MAAAgV,QAAA,OAAA1U,WAIA8D,EAAAyZ,mBAAA7e,QAAA2G,KAAAvB,EAAA6Y,qBApBA7Y,EAAAyZ,mBAAA7e,QAAA2G,KAAAvB,EAAA6Y,gBAEA7Y,EAAA2Y,cAAA5c,OAAAiE,EAAAyY,kBAAAiB,IAAA,EAAA,QAAA9I,QAAA,OAAA1U,SACA8D,EAAA4Y,YAAAnD,EAAAkE,eACA3Z,EAAA6Y,eAAAnD,WAAA1V,EAAA2Y,cAAA3Y,EAAA0Y,kBAEAjD,EAAAmE,gBAAA5Z,EAAA6Y,eAAAnD,WAAA1V,EAAA2Y,cAAA3Y,EAAA4Y,aACA5Y,EAAA6Y,eAAA/T,KAAA2Q,EAAAoE,sBAAA7Z,EAAA2Y,cAAA3Y,EAAA4Y,eAiBA5Y,EAAA8Z,aAAA,SAAAC,EAAAC,GACAvE,EAAAmE,gBAAA5Z,EAAA6Y,eAAAnD,WAAAqE,EAAAC,GACAha,EAAA6Y,eAAAoB,YAAA9E,KAAAnV,EAAA6Y,gBAEA7Y,EAAAgZ,4BACAhZ,EAAA6Y,eAAA/T,KAAA2Q,EAAAoE,sBAAAE,EAAAC,KAIAha,EAAAka,2BAAA,SAAAC,GACAna,EAAAgZ,2BAAA,GAGAhZ,EAAAoa,mBAAA,SAAAhc,GACA4B,EAAA6Y,eAAAoB,YAAA9E,KAAAnV,EAAA6Y,iBAGA7Y,EAAAqa,eAAA,WACA,OAAAra,EAAA6Y,eAAAyB,gBACA1f,QAAA2H,OAAAvC,EAAA6Y,eAAA7Y,EAAAyZ,qBAGAzZ,EAAAua,YAAA,WAoDA,SAAA9X,IACAzC,EAAA2H,MAAA,oCAAA,IACA3H,EAAA0C,QAGA,SAAAC,EAAAqJ,GACAhM,EAAA4C,YAAAoJ,EACAhM,EAAA6C,UAAA,EAzDA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEAwI,EAAA6B,eAAA,CACA7R,MAAA,wCACA8R,QAAA,uCACAC,QAAA,CAAA,CACAlI,KAAA,aACAE,SAuBA,WACApF,EAAA6Y,eAAAE,yBACAtD,EAAA+E,2BACAxa,EAAA6Y,gBACA,EACApW,EACAE,GAEA8S,EAAAgF,2BACAza,EAAA6Y,gBACA,EACApW,EACAE,KAlCA,CACAuC,KAAA,cACAE,SAIA,WACApF,EAAA6Y,eAAAE,yBACAtD,EAAA+E,2BACAxa,EAAA6Y,gBACA,EACApW,EACAE,GAEA8S,EAAAgF,2BACAza,EAAA6Y,gBACA,EACApW,EACAE,aC9IAhI,MAAAkF,WAAA,2CAAA,CAAA,SAAA,SAAA,UAAA,aACA,SAAAG,EAAAC,EAAAkI,EAAAuS,GAEA1a,EAAAiE,WAAA,KACAjE,EAAAmT,WAAA,KACAnT,EAAA+H,UAAA,KAEA,IAAAnB,GAAA,EACAC,GAAA,EAIA,SAAA4P,EAAAxS,EAAAkP,EAAApL,GAEA/H,EAAA2a,gBADAxH,GAAApL,EACA2S,EAAAE,uCAAAzH,EAAApL,GAEA,KANA/H,EAAA2a,gBAAA,KAUA3a,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAA7G,EAAAmT,YAAAnT,EAAA+H,YACA0O,EAAAzW,EAAAiE,WAAAjE,EAAAmT,WAAAnT,EAAA+H,WACAlB,GAAA,IAIAD,GAAA,IAIA5G,EAAA/E,IAAA,kCAAA,SAAA4F,EAAAzC,GACAA,EAAA2J,WAAA/H,EAAA+H,WACA3J,EAAA+U,YAAAnT,EAAAmT,YACA,iCAAA/U,EAAAyX,aACA7V,EAAAiE,WAAA7F,EAAA6F,WACAjE,EAAAmT,WAAA/U,EAAA+U,WACAnT,EAAA+H,UAAA3J,EAAA2J,UAIAlB,IAFAD,IACA6P,EAAAzW,EAAAiE,WAAAjE,EAAAmT,WAAAnT,EAAA+H,YACA,MAQA/H,EAAA6a,yBAAA,CACAnI,WAAA,IAGA1S,EAAA8a,mBAAA,CACA9E,SAAA,CAAAC,OAAA,CAAA,gBAAAC,WAAA,CAAA,QACAC,WAAA,CACA,CAAAC,MAAA,cAAAE,YAAA,oBAAA3V,MAAA,OAAA0V,WAAA,YAAA0E,QAAA,EAAAC,QAAA,GACA,CAAA5E,MAAA,eAAAE,YAAA,qBAAA3V,MAAA,QAAAoa,QAAA,EAAAC,QAAA,GACA,CAAA5E,MAAA,SAAAE,YAAA,eAAAD,WAAA,iBAAA1V,MAAA,OAAAoa,QAAA,EAAAC,QAAA,GACA,CAAA5E,MAAA,UAAAE,YAAA,kBAAA2E,KAAA,UACA,CAAA7E,MAAA,cAAAE,YAAA,uBAAAD,WAAA,mBAAA1V,MAAA,OAAAoa,QAAA,EAAAC,QAAA,GACA,CAAA5E,MAAA,UAAAE,YAAA,mBAAAD,WAAA,mBAAA1V,MAAA,QACA,CAAAyV,MAAA,QAAAE,YAAA,iBAAAD,WAAA,gBAAA1V,MAAA,QAAAua,MAAA,SACA,CAAA9E,MAAA,aAAAE,YAAA,uBAAAD,WAAA,gBAAA1V,MAAA,QAAAua,MAAA,QAAAH,QAAA,GACA,CAAA3E,MAAA,SAAAE,YAAA,gBAAAD,WAAA,eAAA1V,MAAA,SAEAwa,WAAA,CACA,CACAjW,KAAA,yBAEAkW,QAAA,SAAApR,GAOAO,EAPAP,EAAAO,UAQApC,EAAAuC,KAAA,kCAAAH,EAAA,kBACA,SAAA,oHAPAiM,cAAA,YACA6E,uBAAA,EACAC,WAAA,SAAAtR,GAAA,OAAAA,EAAAuR,cASAvb,EAAA2B,YAAA,SAAAqI,GACAA,EAAAuR,aACAb,EAAA9Y,OAAAoI,EAAA,WACAyM,EAAAzW,EAAAiE,WAAAjE,EAAAmT,WAAAnT,EAAA+H,iBCvFApN,MAAAkF,WAAA,2CAAA,CAAA,SAAA,SAAA,KAAA,UAAA,4BACA,SAAAG,EAAAC,EAAAiI,EAAAC,EAAAsN,GAEAzV,EAAA6Y,eAAA,GAEA7Y,EAAAiE,WAAA,KACAjE,EAAAmT,WAAA,KACAnT,EAAA+H,UAAA,KACA/H,EAAAwX,gBAAA,KAEA,IAAAgE,GAAA,EACA3U,GAAA,EAEA,SAAA8O,IACA6F,IACAxb,EAAAmT,YAAAnT,EAAA+H,WACA/H,EAAA6Y,eAAApD,EAAAgG,wBACAzb,EAAAiE,WACAjE,EAAAmT,WACAnT,EAAA+H,WACAlB,GAAA,IAEAA,GAAA,EACA7G,EAAA6Y,eAAA,KAKA7Y,EAAA/E,IAAA,oCAAA,SAAA4F,EAAAzC,GACAuX,IACA3V,EAAA2H,MAAA,gCAAA,CAAAI,UAAA/H,EAAA+H,cAGA/H,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACAyZ,IACAA,GAAA,EACA3U,GACA8O,KAIA6F,GAAA,IAIAxb,EAAA/E,IAAA,kCAAA,SAAA4F,EAAAzC,GACAA,EAAA2J,WAAA/H,EAAA+H,WACA3J,EAAA+U,YAAAnT,EAAAmT,YACAnT,EAAAiE,WAAA7F,EAAA6F,WACAjE,EAAAmT,WAAA/U,EAAA+U,WACAnT,EAAA+H,UAAA3J,EAAA2J,UACA/H,EAAAwX,gBAAApZ,EAAAoZ,gBAEAgE,EACA7F,IAEA9O,GAAA,GAGA7G,EAAA6Y,eAAApZ,OAAA,IAIAO,EAAA0b,iDAAA,CACAhJ,WAAA,IAGA1S,EAAA2b,+CAAA,CACA3F,SAAA,CAAAC,OAAA,CAAA,gBAAAC,WAAA,CAAA,QACAC,WAAA,CACA,CAAAC,MAAA,eAAAC,WAAA,mBAAAC,YAAA,eAAA3V,MAAA,QACA,CAAAyV,MAAA,OAAAzV,MAAA,QAAA2V,YAAA,gBACA,CAAAF,MAAA,QAAAE,YAAA,gBACA,CAAAF,MAAA,QAAAE,YAAA,gBAAA3V,MAAA,OAAA0V,WAAA,gBAAA6E,MAAA,SACA,CAAA9E,MAAA,SAAAE,YAAA,mBAAA3V,MAAA,OAAA0V,WAAA,gBAAA6E,MAAA,SACA,CAAA9E,MAAA,qBAAAE,YAAA,WAAA3V,MAAA,QAAA0V,WAAA,iBAEA8E,WAAA,CACA,CACAjW,KAAA,yBACAmO,KAAA,SAAAuI,GAAA,OAAAA,IAAAA,EAAArR,WACA6Q,QAAA,SAAApR,GAAAhK,EAAA6b,eAAA7R,KACA,CACA9E,KAAA,oCACAmO,KAAA,SAAAuI,GAAA,OAAAA,IAAAA,EAAArR,WACA6Q,QAAA,SAAApR,GAAAhK,EAAA8b,yBAAA9R,OAIAhK,EAAA2B,YAAA,SAAAqI,GACAyL,EAAAsG,2BACA/b,EAAAmT,WACAnT,EAAA+H,UACAiC,EAAA+O,yBAGA,WACApD,OAIA3V,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAA+Y,yBAAA,KACA5X,EAAAK,UAIAxB,EAAAkB,UAAA,SAAA8I,GACA7I,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAA+Y,yBAAA/O,EAAA+O,yBACA5X,EAAAK,UAIAxB,EAAA6b,eAAA,SAAA7R,GACA7B,EAAAuC,KAAA,kCAAAV,EAAAO,UAAA,kBACA,SAAA,kHAiBA,IAAApJ,EAAAlB,EAAA,CACAL,YAAA,iDACA4B,OAfAxB,EAAA8b,yBAAA,SAAA9R,GACAyL,EAAAuG,+BACAhc,EAAAmT,WACAnT,EAAA+H,UACAiC,EAAA+O,yBACA/O,EAAAO,UAGA,WACAoL,QAOA3T,MAAAhC,EAAAiC,YC5IAtH,MAAAkF,WAAA,8CAAA,CAAA,KAAA,SAAA,SAAA,+BACA,SAAAqI,EAAAlI,EAAAC,EAAAwQ,GAEAzQ,EAAAiE,WAAA,KACAjE,EAAAmT,WAAA,KACAnT,EAAA+H,UAAA,KAEA,IAAAnB,GAAA,EACAC,GAAA,EAEA,SAAA4P,EAAAxS,EAAAkP,EAAApL,GACA/H,EAAAmT,YAAAnT,EAAA+H,WACA/H,EAAAic,kBAAAxL,EAAAyL,4BAAAjY,EAAA8D,EAAAoL,GACAtM,GAAA,IAEAA,GAAA,EACA7G,EAAAic,kBAAA,MAIAjc,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,EACAC,GACA4P,EAAAzW,EAAAiE,WAAAjE,EAAAmT,WAAAnT,EAAA+H,YAIAnB,GAAA,IAIA5G,EAAA/E,IAAA,kCAAA,SAAA4F,EAAAzC,GACAA,EAAA2J,WAAA/H,EAAA+H,WACA3J,EAAA+U,YAAAnT,EAAAmT,YACA,iCAAA/U,EAAAyX,aACA7V,EAAAiE,WAAA7F,EAAA6F,WACAjE,EAAAmT,WAAA/U,EAAA+U,WACAnT,EAAA+H,UAAA3J,EAAA2J,UACA/H,EAAAwX,gBAAApZ,EAAAoZ,gBAEA5Q,EACA6P,EAAAzW,EAAAiE,WAAAjE,EAAAmT,WAAAnT,EAAA+H,WAEAlB,GAAA,KAMA7G,EAAAmc,mDAAA,CACAzJ,WAAA,IAGA1S,EAAAoc,kDAAA,CACApG,SAAA,CAAAC,OAAA,CAAA,gBAAAC,WAAA,CAAA,QACAC,WAAA,CACA,CAAAC,MAAA,SAAAE,YAAA,iBAAAD,WAAA,YAAA1V,MAAA,QACA,CAAAyV,MAAA,OAAAE,YAAA,gBACA,CAAAF,MAAA,uBAAAE,YAAA,uBAAA3V,MAAA,SACA,CAAAyV,MAAA,uBAAAE,YAAA,GAAAD,WAAA,0BAAA1V,MAAA,SACA,CAAAyV,MAAA,YAAAC,WAAA,mBAAAC,YAAA,qBAAA3V,MAAA,QACA,CAAAyV,MAAA,UAAAC,WAAA,mBAAAC,YAAA,mBAAA3V,MAAA,QACA,CAAAyV,MAAA,cAAAC,WAAA,mBAAAC,YAAA,qBAAA3V,MAAA,SACA,CAAAyV,MAAA,eAAAC,WAAA,gBAAAC,YAAA,kBAAA4E,MAAA,QAAAva,MAAA,UAEA6V,cAAA,YACA6E,uBAAA,GAGArb,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAA8Q,eAAA,WACA2F,EAAAzW,EAAAiE,WAAAjE,EAAAmT,WAAAnT,EAAA+H,YAEA5G,EAAAK,UAIAxB,EAAAyB,SAAA,WAEA,IAAAH,EAAAmP,EAAA/O,UACA1B,EAAAiE,WAAAjE,EAAA+H,UAAA/H,EAAAmT,YAEAjL,EAAAiD,IAAA,CAAAhK,EAAAC,SAAAE,EAAAF,WAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAAA,EACAH,EAAAnB,OAAA8Q,eAAA,WACA2F,EAAAzW,EAAAiE,WAAAjE,EAAAmT,WAAAnT,EAAA+H,YAEA5G,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACAqS,EAAA7O,OAAAxD,EAAA,WACAqY,EAAAzW,EAAAiE,WAAAjE,EAAAmT,WAAAnT,EAAA+H,cAMA,IAAA5G,EAAAlB,EAAA,CACAL,YAAA,mEACA4B,OAJAxB,EAAAic,kBAAA,IAKAja,MAAAhC,EAAAiC,YCxGAtH,MAAAkF,WAAA,gCAAA,CAAA,SAAA,KAAA,yBAAA,4BACA,SAAAG,EAAAkI,EAAAmU,EAAAC,GAEAtc,EAAAuc,mBAAA,CAAAjI,KAAA,GAAAC,mBAAA,aAAAC,aAAA,cACAxU,EAAAwc,iBAAA,GAYAxc,EAAAqM,gBAAA,SAAAtE,GACA,IAAA0U,EAAAJ,EAAAK,2BACA3U,EAAA/H,EAAA2c,uBAAAxJ,YACAxF,EAAA2O,EAAAb,wBAAA1T,EAAA/H,EAAA2c,uBAAAxJ,YAEAjL,EAAAiD,IAAA,CAAAsR,EAAArb,SAAAuM,IACAtM,KAAA,SAAAjD,GAEA,IAjBAwe,EAiBAA,EAAAxe,EAAA,GACAye,EAAAze,EAAA,GAEAye,EAAA1J,WAAAnT,EAAA2c,uBAAAxJ,WACA0J,EAAA9U,UAAAA,EArBA6U,EAuBAA,EAvBA7H,EAuBA/U,EAAA2c,uBAAA3H,UAvBA7B,EAuBAnT,EAAA2c,uBAAAxJ,WAvBA0J,EAuBAA,EApBAvb,EAAA+a,EAAAS,yBAAAF,EAAA7H,EAoBAhN,EApBAoL,EAAA0J,GACA7c,EAAAwc,iBAAA5hB,QAAA2G,KAAAqb,GACA5c,EAAA+c,kBAAAniB,QAAA2G,KAAAsb,GACA7c,EAAAuc,mBAAAjb,KAqBAtB,EAAAkV,sBAAA,SAAAF,GACAhV,EAAAuc,mBAAA/H,aAAAW,KAAAnV,EAAAuc,oBACAvc,EAAAuc,mBAAAhI,mBAAAY,KAAAnV,EAAAuc,qBAGAvc,EAAAgd,qCAAA,WAEA,IAQAP,EAMAQ,EAdAjd,EAAA6C,WAIA7C,EAAAuc,mBAAA/H,aAAAW,KAAAnV,EAAAuc,oBAEAvc,EAAA6C,UAAA,EAEA4Z,EAAAJ,EAAAhH,UACArV,EAAAuc,mBAAAK,aACA5c,EAAA2c,uBAAA5U,UACA/H,EAAA2c,uBAAAxJ,WACAnT,EAAAwc,kBAEAS,EAAAX,EAAAjH,UACArV,EAAAuc,mBAAAW,gBACAld,EAAA+c,mBAEA7U,EAAAiD,IAAA,CAAAsR,EAAAQ,IACA5b,KAAA,SAAAjD,GACA+e,EAAA/e,EAAA,GACA4B,EAAAod,0BAAAD,IACA,SAAA5H,GACAvV,EAAAqd,+BAAA9H,EACAvV,EAAA6C,UAAA,MAIA7C,EAAA2c,uBAAA9J,OACA7S,EAAAqM,gBAAArM,EAAA2c,uBAAA5U,WAGA/H,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,wDAEA,CACAzG,MAAA,mBACAyG,SAAA,6DAGA9B,EAAAiG,WAAAlE,UAAA,KCnFApH,MAAAkF,WAAA,6BAAA,CAAA,SAAA,sBACA,SAAAG,EAAAsd,GAuBAtd,EAAAkV,sBAAA,SAAAF,GACAhV,EAAAud,oBAAA/I,aAAAW,KAAAnV,EAAAud,qBACAvd,EAAAud,oBAAAC,cAAA/d,OAAA,EACAO,EAAAud,oBAAAC,cAAArf,KAAAsf,MACAzd,EAAAud,oBAAAC,cACAxI,GACAhV,EAAAud,oBAAAhJ,mBAAAY,KAAAnV,EAAAud,sBAGAvd,EAAA0d,0BAAA,SAAAH,GACAvd,EAAA2d,4BAAA,KACA3d,EAAAud,oBAAA/I,aAAAW,KAAAnV,EAAAud,qBAEAD,EAAAjI,UACArV,EAAA4d,MACA5d,EAAAiE,WACAjE,EAAAmT,YACA9R,KAAA,SAAAjD,GACA4B,EAAA6d,qBAAAzf,IACA,SAAAmX,GACAvV,EAAA2d,4BAAApI,EAAAnX,QAvCA,WACA4B,EAAA4d,MAAAhjB,QAAA2G,KAAAvB,EAAA8d,eACA9d,EAAAgV,UAAA,GACA,IAAA,IAAA+I,EAAA,EAAAA,EAAA/d,EAAAge,cAAAve,OAAAse,IAGA,IAFA,IAAAE,EAAAje,EAAAge,cAAAD,GAEAG,EAAA,EAAAA,EAAAle,EAAA4d,MAAAne,OAAAye,IAAA,CACA,IAAAC,EAAAne,EAAA4d,MAAAM,GACAC,EAAAC,SAAAH,EAAAG,QACAriB,OAAAoiB,EAAAE,UAAAC,OAAAviB,OAAAkiB,EAAAI,YACAre,EAAAgV,UAAA7W,KAAAggB,GAMAne,EAAAud,oBAAA,IAAAgB,wBAAAC,eAAAxe,EAAAgV,UAAAyJ,MAAA,IA2BA9I,MChDAhb,MAAAkF,WAAA,kCAAA,CAAA,SAAA,SAAA,aAAA,UAAA,cAAA,wBACA,SAAAG,EAAAC,EAAAjF,EAAAoN,EAAAC,EAAA+L,GAEApU,EAAA8d,cAAA,KACA9d,EAAAgV,UAAA,KACAhV,EAAAmT,WAAA,KAGA,IAAArB,EAFA9R,EAAAiE,WAAA,KAIAjE,EAAA/E,IAAA,mCAAA,SAAA4F,EAAAzC,GACAA,EAAA4W,WAAA,EAAA5W,EAAA4W,UAAAvV,OACA7E,QAAA2H,OAAAnE,EAAA4W,UAAAhV,EAAAgV,aACAhV,EAAAiE,WAAA7F,EAAA6F,WACAjE,EAAA8U,YAAAV,EAAAsK,wBAAAtgB,EAAA6F,WAAA7F,EAAA+U,WAAA/U,EAAA4W,WAEAhV,EAAA8U,YAAA1T,SAAAC,KAAA,WACAjF,EAAAkJ,QAAAtF,EAAA8U,YAAA,SAAAoJ,GACAA,EAAAS,0BAAA7M,GAAAA,EAAA6M,4BAIA3e,EAAA8d,cAAA1f,EAAA0f,cACA9d,EAAAgV,UAAA5W,EAAA4W,UACAhV,EAAAmT,WAAA/U,EAAA+U,aAGAnT,EAAA8U,cACA9U,EAAA8U,YAAArV,OAAA,GAGAO,EAAAiE,WAAA,KACAjE,EAAA8d,cAAA1f,EAAA0f,cACA9d,EAAAgV,UAAA,KACAhV,EAAAmT,WAAA,QAKAnT,EAAA/E,IAAA,2BAAA,SAAA4F,EAAAzC,GACAA,EAAA+U,aACAnT,EAAAmT,WAAA/U,EAAA+U,YAGArB,EAAA1T,EAAAyT,WAGA7R,EAAA4e,sCAAA,CACA9Z,KAAA,sCACAvE,QAAA,CACA,CACAC,UAAA,WACAE,SAAA,SACAD,QAAAzF,EAAAM,QAAA,kBACAqF,MAAA,QACAC,UAAA,MACAgI,mBAAA,SAAAxK,GACA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,cAGA,CACAoC,UAAA,SACAE,SAAA,SACAD,QAAAzF,EAAAM,QAAA,cACAwN,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAA+V,SAEAne,MAAA,QAEA,CACAH,UAAA,UACAE,SAAA,SACAD,QAAAzF,EAAAM,QAAA,eACAwN,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAAgW,UAEApe,MAAA,QAEA,CACAH,UAAA,YACAE,SAAA,SACAD,QAAAzF,EAAAM,QAAA,iBACAwN,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAAiW,YAEAre,MAAA,QAEA,CACAH,UAAA,WACAE,SAAA,SACAD,QAAAzF,EAAAM,QAAA,gBACAwN,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAAkW,WAEAte,MAAA,QAEA,CACAH,UAAA,SACAE,SAAA,SACAD,QAAAzF,EAAAM,QAAA,cACAwN,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAAmW,SAEAve,MAAA,QAEA,CACAH,UAAA,WACAE,SAAA,SACAD,QAAAzF,EAAAM,QAAA,gBACAwN,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAAoW,WAEAxe,MAAA,QAEA,CACAH,UAAA,SACAE,SAAA,SACAD,QAAAzF,EAAAM,QAAA,cACAwN,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAAoW,WAEAxe,MAAA,QAEA,CACAH,UAAA,QACAE,SAAA,SACAD,QAAAzF,EAAAM,QAAA,gBACAwN,mBAAA,SAAAC,GACA,OAAAX,EAAA,iBAAAA,CAAAW,EAAAqW,UAIAjY,iBAAA,WAAA,OAAAnH,EAAAgV,YAGAhV,EAAA6U,sBAAA,KAEA7U,EAAAyB,SAAA,WACAzB,EAAA6U,sBAAA,CACAhC,OAAA,EACA8B,WAAA,KACAxB,WAAAnT,EAAAmT,WACA6B,UAAAhV,EAAAgV,UAAAyJ,MAAA,GACAX,cAAA9d,EAAA8d,eAGA3c,EAAAC,SAAAC,KAAA,WACArB,EAAAqf,+BAAA,KACAle,EAAAnB,OAAA2e,0BAAA7M,GAAAA,EAAA6M,wBACAxd,EAAAK,UAIAxB,EAAAkB,UAAA,SAAAoe,GAEAtf,EAAA6U,sBAAA,CACAhC,OAAA,EACA8B,WAAA2K,EAAA3K,WACAxB,WAAAnT,EAAAmT,WACA6B,UAAAhV,EAAAgV,UAAAyJ,MAAA,GACAX,cAAA9d,EAAA8d,eAGA3c,EAAAC,SAAAC,KAAA,WACArB,EAAAuf,gCAAA,KACApe,EAAAnB,OAAA2e,0BAAA7M,GAAAA,EAAA6M,wBACAxd,EAAAK,UAmBA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,6CACA4B,OAjBAxB,EAAAsV,yBAAA,WACAnU,EAAAkS,OAEArT,EAAA8U,YAAAV,EAAAsK,wBACA1e,EAAAiE,WACAjE,EAAAmT,WACAnT,EAAAgV,WAEAhV,EAAA8U,YAAA1T,SAAAC,KAAA,WACAjF,EAAAkJ,QAAAtF,EAAA8U,YAAA,SAAAoJ,GACAA,EAAAS,0BAAA7M,GAAAA,EAAA6M,8BAQA3c,MAAAhC,OC5LArF,MAAAkF,WAAA,+BAAA,CAAA,SAAA,SAAA,aAAA,UAAA,cAAA,yBACA,SAAAG,EAAAC,EAAAjF,EAAAoN,EAAAC,EAAAgU,GAEArc,EAAA8d,cAAA,KACA9d,EAAAgV,UAAA,KACAhV,EAAAmT,WAAA,KAGA,IAAArB,EAFA9R,EAAAiE,WAAA,KAIAjE,EAAA/E,IAAA,mCAAA,SAAA4F,EAAAzC,GACAA,EAAA4W,WAAA,EAAA5W,EAAA4W,UAAAvV,OACA7E,QAAA2H,OAAAnE,EAAA4W,UAAAhV,EAAAgV,aACAhV,EAAAiE,WAAA7F,EAAA6F,WACAjE,EAAA2W,SAAA0F,EAAAqC,wBAAAtgB,EAAA6F,WAAA7F,EAAA+U,WAAA/U,EAAA4W,WAEAhV,EAAA2W,SAAAvV,SAAAC,KAAA,WACAjF,EAAAkJ,QAAAtF,EAAA2W,SAAA,SAAAuH,GACAA,EAAAS,0BAAA7M,GAAAA,EAAA6M,4BAIA3e,EAAA8d,cAAA1f,EAAA0f,cACA9d,EAAAgV,UAAA5W,EAAA4W,UAAAyJ,MAAA,GACAze,EAAAmT,WAAA/U,EAAA+U,aAGAnT,EAAA2W,WACA3W,EAAA2W,SAAAlX,OAAA,GAGAO,EAAAiE,WAAA,KACAjE,EAAA8d,cAAA1f,EAAA0f,cACA9d,EAAAgV,UAAA,KACAhV,EAAAmT,WAAA,QAIAnT,EAAA/E,IAAA,2BAAA,SAAA4F,EAAAzC,GACAA,EAAA+U,aACAnT,EAAAmT,WAAA/U,EAAA+U,YAGArB,EAAA1T,EAAAyT,WAGA7R,EAAAwf,mCAAA,CACA1a,KAAA,mCACAvE,QAAA,CACA,CACAC,UAAA,WACAE,SAAA,SACAD,QAAAzF,EAAAM,QAAA,kBACAqF,MAAA,QACAC,UAAA,MACAgI,mBAAA,SAAAxK,GACA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,cAGA,CACAoC,UAAA,SACAE,SAAA,SACAD,QAAAzF,EAAAM,QAAA,cACAwN,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAA+V,SAEAne,MAAA,QAEA,CACAH,UAAA,UACAE,SAAA,SACAD,QAAAzF,EAAAM,QAAA,eACAwN,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAAgW,UAEApe,MAAA,QAEA,CACAH,UAAA,YACAE,SAAA,SACAD,QAAAzF,EAAAM,QAAA,iBACAwN,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAAiW,YAEAre,MAAA,QAEA,CACAH,UAAA,WACAE,SAAA,SACAD,QAAAzF,EAAAM,QAAA,gBACAwN,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAAkW,WAEAte,MAAA,QAEA,CACAH,UAAA,SACAE,SAAA,SACAD,QAAAzF,EAAAM,QAAA,cACAwN,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAAmW,SAEAve,MAAA,QAEA,CACAH,UAAA,WACAE,SAAA,SACAD,QAAAzF,EAAAM,QAAA,gBACAwN,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAAoW,WAEAxe,MAAA,QAEA,CACAH,UAAA,SACAE,SAAA,SACAD,QAAAzF,EAAAM,QAAA,cACAwN,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAAoW,WAEAxe,MAAA,QAEA,CACAH,UAAA,QACAE,SAAA,SACAD,QAAAzF,EAAAM,QAAA,gBACAwN,mBAAA,SAAAC,GACA,OAAAX,EAAA,iBAAAA,CAAAW,EAAAqW,UAIAjY,iBAAA,WAAA,OAAAnH,EAAAgV,YAGAhV,EAAA2c,uBAAA,KAEA3c,EAAAyB,SAAA,WACAzB,EAAA2c,uBAAA,CACA9J,OAAA,EACA9K,UAAA,KACAoL,WAAAnT,EAAAmT,WACA6B,UAAAhV,EAAAgV,UAAAyJ,MAAA,GACAX,cAAA9d,EAAA8d,eAGA3c,EAAAC,SAAAC,KAAA,WACArB,EAAAqd,+BAAA,KACAlc,EAAAnB,OAAA2e,0BAAA7M,GAAAA,EAAA6M,wBACAxd,EAAAK,UAIAxB,EAAAkB,UAAA,SAAAmX,GAEArY,EAAA2c,uBAAA,CACA9J,OAAA,EACA9K,UAAAsQ,EAAAtQ,UACAoL,WAAAnT,EAAAmT,WACA6B,UAAAhV,EAAAgV,UAAAyJ,MAAA,GACAX,cAAA9d,EAAA8d,eAGA3c,EAAAC,SAAAC,KAAA,WACArB,EAAAqd,+BAAA,KACAlc,EAAAnB,OAAA2e,0BAAA7M,GAAAA,EAAA6M,wBACAxd,EAAAK,UAmBA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,8CACA4B,OAjBAxB,EAAAod,0BAAA,WACAjc,EAAAkS,OAEArT,EAAA2W,SAAA0F,EAAAqC,wBACA1e,EAAAiE,WACAjE,EAAAmT,WACAnT,EAAAgV,WAEAhV,EAAA2W,SAAAvV,SAAAC,KAAA,WACAjF,EAAAkJ,QAAAtF,EAAA2W,SAAA,SAAAuH,GACAA,EAAAS,0BAAA7M,GAAAA,EAAA6M,8BAQA3c,MAAAhC,OC3LArF,MAAAkF,WAAA,wBAAA,CAAA,SAAA,SAAA,WAAA,gBAAA,cACA,cAAA,sBAAA,cACA,SAAAG,EAAAC,EAAAuO,EAAAnD,EAAA2F,EAAA/N,EAAAqa,EAAAna,GAEAnD,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,aAAAC,WAAA,CAAA,QAEAC,WAAA,CAAA,CAAAC,MAAA,SAAAE,YAAA,kBAAA3V,MAAA,OAAA8e,UAAA,GACA,CAAArJ,MAAA,YAAAE,YAAA,eAAAD,WAAA,mBAAA1V,MAAA,OAAA8e,UAAA,GACA,CAAArJ,MAAA,UAAAE,YAAA,aAAAD,WAAA,mBAAA1V,MAAA,OAAA8e,UAAA,GACA,CAAArJ,MAAA,SAAAE,YAAA,aAAAD,WAAA,mBAAA1V,MAAA,OAAA8e,UAAA,GACA,CAAArJ,MAAA,UAAAE,YAAA,cAAAD,WAAA,mBAAA1V,MAAA,OAAA8e,UAAA,GACA,CAAArJ,MAAA,YAAAE,YAAA,gBAAAD,WAAA,mBAAA1V,MAAA,OAAA8e,UAAA,GACA,CAAArJ,MAAA,WAAAE,YAAA,eAAAD,WAAA,mBAAA1V,MAAA,OAAA8e,UAAA,GACA,CAAArJ,MAAA,SAAAE,YAAA,aAAAD,WAAA,mBAAA1V,MAAA,OAAA8e,UAAA,GACA,CAAArJ,MAAA,WAAAE,YAAA,eAAAD,WAAA,mBAAA1V,MAAA,OAAA8e,UAAA,GACA,CAAArJ,MAAA,SAAAE,YAAA,aAAAD,WAAA,mBAAA1V,MAAA,OAAA8e,UAAA,GACA,CAAArJ,MAAA,QAAAE,YAAA,eAAAD,WAAA,iBAAAoJ,UAAA,IAEAlJ,iBAAA,GAGA,IACAzE,EADA4N,EAAA,GAGA1f,EAAAiE,WACAjE,EAAAmT,WACAnT,EAAA8d,cAAA,GACA,IAAA6B,GAAA,EAeA,SAAAC,EAAAC,EAAAC,GAEAhO,EAAA1V,EAAAsK,KAAAgZ,EAAA,CAAAvM,WAAA0M,IAEAA,GACA7f,EAAA8d,cAAAR,EAAAyC,cACA/f,EAAAiE,WAAA4b,EAAAC,GAEA9f,EAAA8d,cAAA1c,SAAAC,KAAA,WACAjF,EAAAkJ,QAAAtF,EAAA8d,cAAA,SAAAI,GACAA,EAAAS,0BAAA7M,GAAAA,EAAA6M,4BAIAgB,IACAA,GAAA,EA3BA3f,EAAA8d,cAAA1c,SAAAC,KAAA,WACAmN,EAAA,WACA,IACA2P,EADA,EAAAne,EAAA8d,cAAAre,UACA0e,EAAAne,EAAA8d,cAAA,IACAtE,YAAA,EAEAxZ,EAAAggB,eAAA7B,UAyBAne,EAAA8d,cAAAre,OAAA,EAEAO,EAAA2D,WAAA,mCAAA,CAAAqR,UAAA,OAGAhV,EAAA6E,iBAAA,SAAAsT,GACAnH,EAAAU,wBAAAyG,GAAA/W,SAAAC,KAAA,SAAAsQ,GAEA+N,EAAA/N,EAEAiO,EAAA,EAAAjO,EAAAlS,OAAAkS,EAAA,GAAAwB,WAAA,MAAA,GAEAnT,EAAA2D,WAAA,mCAAA,CAAAqR,UAAA,UAIAhV,EAAAoY,iBAAA,SAAAvG,GACA+N,EAAA/N,GAEA7R,EAAA2D,WAAA,mCAAA,CAAAqR,UAAA,OACAhV,EAAA2D,WAAA,2BAAA,CACAwP,WAAAtB,EACAA,SAAAC,KAIA7O,EAAAc,kBAAA1C,KAAA,SAAA6W,GACAA,GACAlY,EAAAiE,WAAAiU,EAAApV,GACA9C,EAAA6E,iBAAA7E,EAAAiE,aAEAjE,EAAAiE,WAAA,OAIAjE,EAAAud,oBACAvd,EAAAigB,wBAEAjgB,EAAAkB,UAAA,SAAA4c,GAEA,IAAA9I,EAAA,GACA8I,GACA9I,EAAA7W,KAAA2f,GAGA9d,EAAAge,cAAAhJ,EAEA7T,EAAAC,SAAAC,KAAA,WACArB,EAAA2d,4BAAA,KACAxc,EAAAnB,OAAA2e,0BAAA7M,GAAAA,EAAA6M,wBACAxd,EAAAK,UAIAxB,EAAA6d,qBAAA,SAAAzf,GACA4B,EAAA8d,cAAA1f,EACA4B,EAAAge,cAAAve,OAAA,EACA0B,EAAAkS,OAEArT,EAAA2D,WAAA,mCAAA,CACAM,WAAAjE,EAAAiE,WACAkP,WAAAnT,EAAAmT,WACA6B,UAAAhV,EAAAge,cACAF,cAAA9d,EAAA8d,gBAGA1hB,EAAAkJ,QAAAtF,EAAA8d,cAAA,SAAAI,GACAA,EAAAS,0BAAA7M,GAAAA,EAAA6M,2BAIA3e,EAAAggB,eAAA,SAAA5hB,GAEA,IAAA4W,EAAA,GACA5W,GACA4W,EAAA7W,KAAAC,GAEA4B,EAAAge,cAAAhJ,EAEAhV,EAAA2D,WAAA,mCAAA,CACAM,WAAAjE,EAAAiE,WACAkP,WAAAnT,EAAAmT,WACA6B,UAAAA,EACA8I,cAAA9d,EAAA8d,iBAIA9d,EAAA6B,KAAA,GAEAsB,EAAAU,SAAA,wBACA7D,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,mBACAyG,SAAA,oDAIAqB,EAAAU,SAAA,uBACA7D,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,sBACAyG,SAAA,uDAIA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,MAIA,IAAA3E,EAAAlB,EAAA,CACAL,YAAA,2CACA4B,MAAA,EACAQ,MAAAhC,OCjLArF,MAAAkF,WAAA,qBAAA,CAAA,SAAA,SAAA,oBACA,SAAAG,EAAAC,EAAAigB,GAEAlgB,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,QAAAC,WAAA,CAAA,QACAC,WAAA,CAAA,CAAAC,MAAA,OAAAE,YAAA,eAAA2E,KAAA,UACA,CAAA7E,MAAA,QAAAE,YAAA,gBAAA4E,MAAA,QAAA7E,WAAA,gBAAA1V,MAAA,WAIAX,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAmgB,gBAAAD,EAAAE,uBAAA,KAGApgB,EAAAmgB,gBAAAD,EAAAE,uBAAA,GAEApgB,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA4e,EAAAxe,YACAP,EAAAK,UAQA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,2DACA4B,OANAxB,EAAA2B,YAAA,SAAAvD,GACA8hB,EAAAte,OAAAxD,KAMA4D,MAAAhC,EAAAiC,YCzCAtH,MAAAkF,WAAA,2BAAA,CAAA,SAAA,oBACA,SAAAG,EAAAkgB,GAEAlgB,EAAA6C,UAAA,EAEA7C,EAAAwC,aAAA,SAAAlB,GAQA,SAAAmB,IACAzC,EAAA0C,QAGA,SAAAC,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EAZA4B,EAAA6C,WAIA7C,EAAA6C,UAAA,EAWAvB,EAAA+e,iBAGAH,EAAAnd,OAAAzB,EAAAmB,EAAAE,GAFAud,EAAAld,OAAA1B,EAAAmB,EAAAE,QCvBAhI,MAAAkF,WAAA,mCAAA,CAAA,SAAA,sBACA,SAAAG,EAAAsgB,GAEAtgB,EAAAsB,MAAAtB,EAAAsB,OAAAgf,EAAA5e,YACA1B,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAA6C,UAAA,EACA7C,EAAAugB,WAAA,EAEAvgB,EAAAwgB,6BAAA,SAAAC,GAEAzgB,EAAAugB,WAAA,EACAD,EAAAI,gBAAAD,GAAArf,SAAAC,KAAA,SAAAsf,GACA3gB,EAAAsB,MAAAsf,aAAAD,EAAAC,aACA5gB,EAAAugB,WAAA,GACA,SAAAM,GACA7gB,EAAAugB,WAAA,KAIAvgB,EAAAsB,MAAAwB,IACA9C,EAAAwgB,6BAAA,GAGAxgB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAAwC,aAAA,SAAAlB,GAQA,SAAAmB,EAAArE,GACA4B,EAAA8gB,kBACA9gB,EAAA8gB,iBAAA1iB,GAEA4B,EAAA0C,QAGA,SAAAC,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EAfA4B,EAAA6C,UAAA7C,EAAAugB,YAIAvgB,EAAA6C,UAAA,GAcAvB,EAAAwB,GAGAwd,EAAAvd,OAAAzB,GAFAgf,EAAAtd,OAAA1B,IAEAF,SAAAC,KAAAoB,EAAAE,QCnDAhI,MAAAkF,WAAA,wBAAA,CAAA,SAAA,SAAA,aAAA,UAAA,WAAA,KAAA,sBACA,gBACA,SAAAG,EAAAC,EAAAjF,EAAAoN,EAAAoG,EAAAtG,EAAAoY,EAAAjV,GAEArL,EAAAsB,MAAA,CACAsf,aAAA,MAKA,IAAAG,EAFA/gB,EAAAqC,UAAA,KAKA,SAAA2e,EAAAC,GACAjhB,EAAAkhB,qBAAAD,IACAjhB,EAAAkhB,mBAAAD,GAEAF,GACAA,EAAAI,OAAA,YAAAnhB,EAAAkhB,oBAPAlhB,EAAAkhB,mBAAA,KAYA,IAAAE,GAAA,EAOA,SAAAC,EAAAC,GACAP,GACAA,EAAAI,OAAA,uBAAAG,GAIA,SAAA7K,IACA,GAAAzW,EAAAkhB,mBASA,CACA,IAAA5f,EAAAgf,EAAAiB,QAAAvhB,EAAAkhB,oBACA5f,EAAAF,SAAAC,KAAA,WACA,IAAAigB,EAAAhB,EAAAkB,mBAAAlgB,EAAAmgB,sBACAH,EAAAlgB,SAAAC,KAAA,WACArB,EAAAsB,MAAAA,EACAtB,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OACA8f,GAAA,EACAC,EAAAC,GACAP,EAAAW,qBAjBA1hB,EAAAqC,UAAA,CACAue,aAAA,MAEA5gB,EAAAsB,MAAA,CACAsf,aAAA,MAEAQ,GAAA,EACAC,EAAA,IAeAN,GACAA,EAAAI,OAAA,YAAAnhB,EAAAkhB,oBArCAlhB,EAAA2hB,iBAAA,WAEA,OAAAP,GAuCAphB,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAA4hB,qBAGA5hB,EAAA4hB,iBAAA,WACA5hB,EAAA2hB,mBAYAlL,IAXApL,EAAA6B,eAAA,CACA7R,MAAA,yBACA8R,QAAAnS,EAAAM,QAAA,6CACA8R,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAAqR,OAQAzW,EAAA6hB,mBAAA,YACA7hB,EAAA2hB,oBAAA3hB,EAAAqC,UACAgJ,EAAA6B,eAAA,CACA7R,MAAA,yBACA8R,QAAAnS,EAAAM,QAAA,sCACA8R,QAAA,CAAA,CACAlI,KAAA,aACAE,SAAA,WACA4b,EAAAhhB,EAAAqC,UAAAS,MAEA,CACAoC,KAAA,cACAE,SAAAqR,MAIAA,KAIAzW,EAAA8hB,cAAA,WAEA,SAAAC,IACAC,EAAA5gB,SAAAC,KAAA,WACA2gB,EAAAhiB,OAAAsB,MAAA,KACA0gB,EAAAhiB,OAAA8gB,iBAAA,SAAAxf,GACAtB,EAAA2D,WAAA,+BAAA,CAAAb,GAAAxB,EAAAwB,KACAke,EAAA1f,EAAAwB,IACA2T,KAEAuL,EAAAxgB,UAIAxB,EAAA2hB,oBAAA3hB,EAAAqC,UACAgJ,EAAA6B,eAAA,CACA7R,MAAA,yBACA8R,QAAAnS,EAAAM,QAAA,qCACA8R,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAA2c,MAIAA,KAIA/hB,EAAAiiB,iBAAA,WACAD,EAAA5gB,SAAAC,KAAA,WACA2gB,EAAAhiB,OAAAsB,MAAA1G,QAAA2G,KAAAvB,EAAAsB,OACA0gB,EAAAhiB,OAAA8gB,iBAAA,SAAAxf,GACAtB,EAAA2D,WAAA,+BAAA,CAAAb,GAAAxB,EAAAwB,KACAke,EAAA1f,EAAAwB,IACA2T,KAEAuL,EAAAxgB,UAIAxB,EAAAkiB,eAAA,WACA5B,EAAAvd,OAAA/C,EAAAsB,OAAAF,SAAAC,KAAA,SAAAC,GACAtB,EAAAsB,MAAAA,EACAtB,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OACA8f,GAAA,KAKAphB,EAAAmiB,iBAAA,WAEA,SAAAC,IACA9B,EAAA1e,OAAA5B,EAAAsB,MAAAwB,IAAA1B,SAAAC,KAAA,WACArB,EAAA2D,WAAA,+BAAA,IACA3D,EAAAkhB,mBAAA,KACAzK,OAIAzW,EAAA2hB,oBAAA3hB,EAAAqC,UACAgJ,EAAA6B,eAAA,CACA7R,MAAA,yBACA8R,QAAAnS,EAAAM,QAAA,wCACA8R,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAAgd,MAIA/W,EAAA6B,eAAA,CACA7R,MAAA,yBACA8R,QAAAnS,EAAAM,QAAA,0CACA8R,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAAgd,OAMApiB,EAAAqiB,kBAAA,SAAAvf,GACAwd,EAAAvd,OAAA/C,EAAAsB,OAAAF,SAAAC,KAAA,SAAAC,GACAtB,EAAAsB,MAAAA,EACAtB,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OACA8f,GAAA,EACAkB,OAAA5X,KAAA,8BAAA5H,EAAA,WAAA,aAsGA,IAAAkf,EAAA/hB,EAAA,CACAL,YAAA,qEACA4B,OAjGAxB,EAAAuiB,kBAAA,CACA5hB,MAAA,OACA6hB,OAAA,OACAC,UAAA,OACAC,UAAA,EACAC,QAAA,CACAC,MAAA,CACA,OACA,OACA,YACA,CACA9d,KAAA,OACA+d,eAAA,CAAA,MAAA,OAAA,OAAA,OAAA,OAAA,OAAA,SAEA,CACA/d,KAAA,OACA+d,eAAA,CAAA,QAAA,UAAA,SAAA,kBAAA,YAEA,YACA,OACA,SACA,SACA,YACA,YACA,YACA,cACA,aACA,eACA,YACA,cACA,aACA,YACA,CACA/d,KAAA,SACA+d,eAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,IAEA,YACA,QACA,aACA,YACA,OACA,QACA,YACA,QACA,YACA,aACA,YACA,cACA,cACA,iBACA,iBACA,YACA,mBACA,oBACA,eACA,iBACA,kBACA,YAEAC,WAAA,GAEAC,iBAAA,CACAC,SAAA,GAEAC,cAAA,CACAD,SAAA,GAEAE,oBAAA,EAKA5B,UAAA,CACA6B,WAAA,GACAC,WAAA,CAAA,GAAA,KAEAC,eAAA,CACA1nB,MAAA,sBAEA2nB,eAAA,SAAAziB,GACAkgB,EAAAlgB,EAAAuI,WAEAma,eAAA,SAAA1iB,QACA2iB,IAAA3iB,EAAA3F,QACAkmB,GAAA,IAGAqC,iBAAA,SAAA/mB,GACAA,EAAAgnB,QAAA,CACAC,MAAA,EACAC,SAAA,QAQA5hB,MAAAhC,EAAAiC,YC9SAtH,MAAAkF,WAAA,gBAAA,CAAA,SAAA,SAAA,aAAA,UAAA,WAAA,KAAA,cAAA,WAAA,cACA,SAAAG,EAAAC,EAAAjF,EAAAoN,EAAAoG,EAAAtG,EAAA2b,EAAAC,EAAA3gB,GAOA,SAAA4gB,IACA,OAAA7b,EAAA,SAAAoJ,EAAAC,GACArJ,EAAAiD,IAAA,CAAAnL,EAAAgkB,aAAA5iB,SAAApB,EAAAikB,OAAA7iB,WAAAC,KAAA,WACA,IAAA6iB,EAAA9nB,EAAA+nB,OAAAnkB,EAAAokB,aAAAH,QACAjkB,EAAAqkB,UAAA5kB,OAAA,EACAO,EAAAqkB,UAAAlmB,KAAAsf,MAAAzd,EAAAqkB,UACAjoB,EAAAkoB,OAAAtkB,EAAAgkB,aAAA,SAAA1R,GACA,QAAA,EAAA4R,EAAAzkB,SAGA,EAFArD,EAAAmoB,iBAAAjS,EAAAkS,iBAAAN,EAAA,SAAAO,EAAAC,GACA,OAAAD,GAAAC,IACAjlB,UAKA6R,QAKA,SAAAF,EAAAC,GAEA,OAAAnJ,EAAA,SAAAoJ,EAAAC,GACA,IAAAC,EAAA,KACAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cAAA4N,IACAG,EAAAxR,EAAAM,aAAAmD,aAAAgO,sBAGA,IAAAtG,EAAA0Y,EAAAc,QAAA,GACAxZ,EAAA/J,SAAAC,KAAA,SAAAjD,GACA4B,EAAAgkB,aAAA5lB,EACA2lB,IAAA1iB,KAAA,WACAmQ,GAAAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cAAA4N,EACA7C,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAAkN,GAAA,GAAAnQ,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACAmlB,EAAA,SAGA,KAGAA,EAAA,MAGAtT,OAEA,SAAA3O,GACA3C,EAAAqkB,UAAA,GACAO,EAAA,MAEArT,QAxDAvR,EAAAgkB,aAAA,GACAhkB,EAAAqkB,UAAA,GACArkB,EAAAikB,OAAAH,EAAA5c,cACAlH,EAAAokB,aAAA,CAAAH,OAAA,IA0DA7S,IAEApR,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,GAAA,KAGApR,EAAA6F,OAAA,eAAA,SAAAC,EAAAC,GACAge,MACA,GAEA/jB,EAAAiB,cAAA,SAAA7C,GACAwmB,EAAAxmB,IAGA,SAAAymB,EAAAvjB,EAAAmgB,GACAa,OAAA5X,KAAA,qBAAApJ,EAAAwB,GAAA,WAAA2e,EAAA,UAiLA,SAAAmD,EAAAE,GACA9kB,EAAA+kB,iBAAAD,EACA9kB,EAAA2D,WAAA,2BAAA3D,EAAA+kB,kBAhLA/kB,EAAAM,aAAA,CACAwE,KAAA,YACAkgB,QAAA,KACAC,yBAAA,EACA1kB,QAAA,CACA,CAAAC,UAAA,KAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UAAAC,MAAA,QACA,CAAAH,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,aAAAtI,MAAA,QACA,CAAAH,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,aAAAtI,MAAA,QACA,CACAH,UAAA,iBACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAC,MAAA,QACAmI,mBAAA,SAAAC,GACA,OAAAvJ,OAAAb,UAAAwmB,SAAApc,EAAAqc,YAAArc,EAAAsc,kBAAAtc,EAAAuc,kBAGA,CACA9kB,UAAA,cACAC,QAAAzF,EAAAM,QAAA,kBACAoF,SAAA,SACAC,MAAA,QACAmI,mBAAA,SAAAC,GACA,OAAAvJ,OAAAb,UAAAwmB,SAAApc,EAAAwc,SAAAxc,EAAAyc,eAAAzc,EAAA0c,eAGA,CACAjlB,UAAA,oBACAC,QAAAzF,EAAAM,QAAA,gBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,wBAAAA,CAAAW,EAAA2c,qBAGA,CACAllB,UAAA,mBACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAilB,YAAA,EACAC,gBAAA,EACAC,sBAAA,EACA/c,mBAAA,SAAAC,GACA,OAAAX,EAAA,eAAAA,CAAAW,EAAAyb,mBAEA7jB,MAAA,QAEA,CACAH,UAAA,mBACAC,QAAAzF,EAAAM,QAAA,2BACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,iBAAAA,EAAAW,EAAA+c,mBAEAnlB,MAAA,QACAukB,SAAA,IAGAjgB,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,2BACA6J,UAAA,SAAA/G,GAAA,OAAA+E,EAAAU,SAAA,cAAAggB,EAAAkC,4BAAA3nB,EAAA,IACAgH,SAAA,SAAAhH,GAAAymB,EAAAzmB,EAAA,KACA,CACA8G,KAAAlK,EAAAM,QAAA,qCACA6J,UAAA,SAAA/G,GAAA,OAAA+E,EAAAU,SAAA,cAAAggB,EAAAkC,4BAAA3nB,EAAA,IACAgH,SAAA,SAAAhH,GAAAymB,EAAAzmB,EAAA,KACA,CACA8G,KAAAlK,EAAAM,QAAA,qCACA6J,UAAA,SAAA/G,GAAA,OAAA+E,EAAAU,SAAA,cAAAggB,EAAAkC,4BAAA3nB,EAAA,IACAgH,SAAA,SAAAhH,GAAAymB,EAAAzmB,EAAA,KACA,CACA8G,KAAAlK,EAAAM,QAAA,wCACA6J,UAAA,SAAA/G,GAAA,OAAA+E,EAAAU,SAAA,cAAAggB,EAAAkC,4BAAA3nB,EAAA,IACAgH,SAAA,SAAAhH,GAAAymB,EAAAzmB,EAAA,KACA,CACA8G,KAAAlK,EAAAM,QAAA,uBACA6J,UAAA,SAAA/G,GAAA,OAAA+E,EAAAU,SAAA,cAAAggB,EAAAkC,4BAAA3nB,EAAA,IACAgH,SAAA,SAAAhH,GAAAymB,EAAAzmB,EAAA,KACA,CACA8G,KAAAlK,EAAAM,QAAA,2BACA6J,UAAA,SAAA/G,GAAA,OAAA+E,EAAAU,SAAA,cAAAggB,EAAAkC,4BAAA3nB,EAAA,IACAgH,SAAA,SAAAhH,GAAAymB,EAAAzmB,EAAA,KACA,CACA8G,KAAAlK,EAAAM,QAAA,2BACA6J,UAAA,SAAA/G,GAAA,OAAA+E,EAAAU,SAAA,cAAAggB,EAAAkC,4BAAA3nB,EAAA,IACAgH,SAAA,SAAAhH,GAAAymB,EAAAzmB,EAAA,KACA,CACA8G,KAAAlK,EAAAM,QAAA,sBACA6J,UAAA,SAAA/G,GAAA,QAAAA,EAAA4nB,wBACA5gB,SAAA,SAAAhH,GAsEA,IAAA0mB,EAAAA,EAtEA1mB,EAuEA6nB,EAAA7kB,SAAAC,KAAA,WACA4kB,EAAAjmB,OAAA8kB,SAAAlqB,QAAA2G,KAAAujB,GAGAmB,EAAAzkB,UA1EA0kB,YAAA,GACA,CACAhhB,KAAAlK,EAAAM,QAAA,gBACA6J,UAAA,SAAA/G,GAAA,OAAA+E,EAAAU,SAAA,YACAuB,SAAA,SAAAhH,GA2EA+nB,EAAA/kB,SAAAC,KAAA,WACA8kB,EAAA3kB,UA3EA0kB,YAAA,KAIAlmB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAwiB,EAAAniB,YAAAL,KAAA,SAAA8S,GACAhT,EAAAnB,OAAAsB,MAAA6S,EACAhT,EAAAnB,OAAAomB,eAAA,SAAA9kB,GACA8P,IAAA/P,KAAA,WACArB,EAAAM,cAAAN,EAAAM,aAAAmD,cACA+K,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAA,CAAAhD,EAAAwB,KAAA,GAAAzB,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACAmlB,EAAA,SAGA,QAIAzjB,EAAAK,YAKAxB,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAAomB,eAAA,WACAhV,GAAA,IAEAjQ,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACAylB,EAAAjiB,OAAAxD,EAAA0E,IAAA1B,SAAAC,KAAA,WACA+P,OA8CA,IAAAjQ,EAAAlB,EAAA,CACAL,YAAA,4CACA4B,OA5CAxB,EAAA0F,UAAA,SAAAtH,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAAsB,MAAAuR,OAAA,EACA1R,EAAAnB,OAAAsB,MAAAwB,GAAA,KACA3B,EAAAnB,OAAAomB,eAAA,SAAA9kB,GACA8P,IAAA/P,KAAA,WACArB,EAAAM,cAAAN,EAAAM,aAAAmD,cACA+K,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAA,CAAAhD,EAAAwB,KAAA,GAAAzB,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACAmlB,EAAA,SAGA,QAIAzjB,EAAAK,WA2BAQ,MAAAhC,EAAAiC,SAGAgkB,EAAAhmB,EAAA,CACAL,YAAA,yDACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGAkkB,EAAAlmB,EAAA,CACAL,YAAA,mDACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YCpRAtH,MAAAkF,WAAA,sBAAA,CAAA,SAAA,SAAA,cACA,SAAAG,EAAAC,EAAA4jB,GAEA7jB,EAAAsB,MAAAuiB,EAAAwC,sBAAArmB,EAAAsB,OAEAtB,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsmB,iBAAA,SAAAC,GACApY,EAAAnO,EAAAsB,MAAAokB,kBAAA3V,QAAAwW,IACA,EAAApY,GACAnO,EAAAsB,MAAAokB,kBAAA3R,OAAA5F,EAAA,GAEA,IAAAnO,EAAAsB,MAAAokB,kBAAAjmB,QACAO,EAAAwmB,iBAIAxmB,EAAAwmB,cAAA,WACAxmB,EAAAsB,MAAAokB,kBAAAvnB,KAAA,CACA2gB,OAAA,CAAA2H,QAAA,EAAAC,UAAA,KAAAC,QAAA,KAAAC,MAAA,GACA7H,QAAA,CAAA0H,QAAA,EAAAC,UAAA,KAAAC,QAAA,KAAAC,MAAA,GACA5H,UAAA,CAAAyH,QAAA,EAAAC,UAAA,KAAAC,QAAA,KAAAC,MAAA,GACA3H,SAAA,CAAAwH,QAAA,EAAAC,UAAA,KAAAC,QAAA,KAAAC,MAAA,GACA1H,OAAA,CAAAuH,QAAA,EAAAC,UAAA,KAAAC,QAAA,KAAAC,MAAA,GACAzH,SAAA,CAAAsH,QAAA,EAAAC,UAAA,KAAAC,QAAA,KAAAC,MAAA,GACAC,OAAA,CAAAJ,QAAA,EAAAC,UAAA,KAAAC,QAAA,KAAAC,MAAA,MAIA5mB,EAAA8mB,cAAA,SAAAC,EAAAN,GACAA,IACAM,EAAAL,UAAA,KACAK,EAAAJ,QAAA,KACAI,EAAAH,MAAA,IAIA5mB,EAAAwC,aAAA,SAAApE,GAEA,IAIA4oB,EAYA,SAAAvkB,EAAA0R,GACAnU,EAAAomB,eAAAjS,GACAnU,EAAA0C,QAGA,SAAAC,EAAAqJ,GACAhM,EAAA4C,YAAAoJ,EACAhM,EAAA6C,UAAA,EAvBA7C,EAAA6C,WAIAmkB,EAAAnD,EAAAoD,sBAAArsB,QAAA2G,KAAAnD,IAEA4B,EAAA6C,UAAA,GAEAzE,EAAA0E,GAIA+gB,EAAA9gB,OAAAikB,GAHAnD,EAAA7gB,OAAAgkB,IAIA5lB,SAAAC,KAAAoB,EAAAE,KAcA3C,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAIArC,EAAAknB,YAAA,WACA,OAAA,GAGAlnB,EAAAiG,WAAA,CAAA,CACA5K,MAAA,WACAyG,SAAA,sDACA,CACAzG,MAAA,eACAyG,SAAA,0DACA,CACAzG,MAAA,gBACAyG,SAAA,4DAGA9B,EAAAiG,WAAAlE,UAAA,KCtFApH,MAAAkF,WAAA,6BAAA,CAAA,SAAA,KAAA,aAAA,WACA,SAAAG,EAAAkI,EAAAlN,EAAA8oB,GACA9jB,EAAA6C,UAAA,EAEA7C,EAAAsB,MAAA,CACAwV,SAAA/a,SAAAG,SACAA,OAAAH,SAAAG,SACAirB,QAAA,MAEAnnB,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAikB,OAAAH,EAAA5c,cAEAlH,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAAwC,aAAA,SAAAlB,GACAtB,EAAA0C,QACA,IAAAoU,EAAA/a,OAAAuF,EAAAwV,UAAAlG,QAAA,OAAA1U,SACAA,EAAAH,OAAAuF,EAAApF,QAAAkrB,MAAA,OAAAlrB,SACAomB,OAAA5X,KAAA,8CAAAoM,EAAAuQ,SAAA,WAAAnrB,EAAAmrB,SAAA,YAAA/lB,EAAA6lB,QAAA,cCrBAxsB,MAAAkF,WAAA,mCAAA,CAAA,SAAA,SAAA,cACA,SAAAG,EAAAC,EAAA4jB,GAEA,IAAAyD,EAAAzD,EAAAwC,sBAAArmB,EAAA8kB,UAEA9kB,EAAAsB,MAAA,CACAimB,+BAAAD,EAAAE,sBACAC,+BAAAH,EAAAI,sBACAC,+BAAAL,EAAAM,sBACAC,+BAAAP,EAAAQ,sBACAC,+BAAAT,EAAAU,sBACAC,+BAAAX,EAAAY,sBACAC,+BAAAb,EAAAc,sBAEAZ,uBAAA,EACAE,uBAAA,EACAE,uBAAA,EACAE,uBAAA,EACAE,uBAAA,EACAE,uBAAA,EACAE,uBAAA,GAGApoB,EAAAknB,YAAA,WACA,SAAAlnB,EAAAsB,MAAAkmB,uBACAxnB,EAAAsB,MAAAomB,uBACA1nB,EAAAsB,MAAAsmB,uBACA5nB,EAAAsB,MAAAwmB,uBACA9nB,EAAAsB,MAAA0mB,uBACAhoB,EAAAsB,MAAA4mB,uBACAloB,EAAAsB,MAAA8mB,wBAGApoB,EAAAwC,aAAA,SAAAlB,GACA,IAAAtB,EAAA6C,SAAA,CAIA7C,EAAA6C,UAAA,EAEA,IAAAwlB,EAAA,GACAroB,EAAAsB,MAAAkmB,uBACAa,EAAAlqB,KAAA,GAEA6B,EAAAsB,MAAAomB,uBACAW,EAAAlqB,KAAA,GAEA6B,EAAAsB,MAAAsmB,uBACAS,EAAAlqB,KAAA,GAEA6B,EAAAsB,MAAAwmB,uBACAO,EAAAlqB,KAAA,GAEA6B,EAAAsB,MAAA0mB,uBACAK,EAAAlqB,KAAA,GAEA6B,EAAAsB,MAAA4mB,uBACAG,EAAAlqB,KAAA,GAEA6B,EAAAsB,MAAA8mB,uBACAC,EAAAlqB,KAAA,GAGA0lB,EAAAyE,cAAAtoB,EAAA8kB,SAAAhiB,GAAAulB,GAAAjnB,SAAAC,KAAA,WACArB,EAAA6C,UAAA,EACA7C,EAAA0C,SACA,SAAAC,GACA3C,EAAA4C,YAAAD,EACA3C,EAAA6C,UAAA,SClEAlI,MAAAkF,WAAA,qBAAA,CAAA,SAAA,SAAA,WAAA,KAAA,aAAA,UAAA,oBAAA,cAAA,cACA,SAAAG,EAAAC,EAAAuO,EAAAtG,EAAAlN,EAAAoN,EAAAmgB,EAAAtlB,EAAA+N,GAgCA,SAAAI,IACApR,EAAAmT,YACAoV,EAAAC,qBAAAxoB,EAAAmT,YAAA/R,SAAAC,KAAA,SAAAjD,GACA4B,EAAAyoB,eAAArqB,IAKA,SAAAsqB,EAAAC,EAAAplB,GACAvD,EAAA4oB,eAAAD,EACA3oB,EAAAwX,gBAAAhY,OAAAb,UAAAwmB,SAAAwD,EAAAvD,YAAAuD,EAAAtD,kBAAAsD,EAAArD,gBACAtlB,EAAA6oB,eAAArpB,OAAAb,UAAAwmB,SAAAwD,EAAApD,SAAAoD,EAAAG,eAAAH,EAAAlD,aAEAkD,EACA3oB,EAAA2D,WAAA,yBAAA,CACAolB,UAAAJ,EAAAI,UACAxlB,UAAAA,EACAylB,SAAAL,EAAA7lB,KAGA9C,EAAA2D,WAAA,yBAAA,CACAolB,UAAA,KACAxlB,UAAAA,EACAylB,SAAA,OArDAhpB,EAAA6C,UAAA,EACA7C,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAiE,WAAA,KACAjE,EAAAmT,WAAA,KACAnT,EAAAyoB,eAAA,GAEAvgB,EAAAiD,IAAA,CAAAlI,EAAAc,oBACA1C,KAAA,SAAAjD,GACAA,EAAA,KACA4B,EAAAiE,WAAA7F,EAAA,GAAA0E,MAOA9C,EAAA6E,iBAAA,SAAAsT,GACAnY,EAAAmT,WAAA,KACAnT,EAAAyoB,eAAA,GACAC,EAAA,KAGA1oB,EAAAoY,iBAAA,SAAAyH,GACAzO,IACAsX,EAAA,KA+BA1oB,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,MAGApR,EAAAM,aAAA,CACAwE,KAAA,iBACAvE,QAAA,CACA,CACAC,UAAA,iBACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SAEAoI,mBAAA,SAAAC,GACA,OAAAvJ,OAAAb,UAAAwmB,SAAApc,EAAAqc,YAAArc,EAAAsc,kBAAAtc,EAAAuc,kBAGA,CACA9kB,UAAA,cACAC,QAAAzF,EAAAM,QAAA,kBACAoF,SAAA,SACAC,MAAA,QACAmI,mBAAA,SAAAC,GACA,OAAAvJ,OAAAb,UAAAwmB,SAAApc,EAAAwc,SAAAxc,EAAAyc,eAAAzc,EAAA0c,eAGA,CAAAjlB,UAAA,SAAAC,QAAA,SAAAC,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,aAAAtI,MAAA,QACA,CAAAH,UAAA,UAAAC,QAAA,UAAAC,SAAA,UAAAC,MAAA,QACA,CAAAH,UAAA,0BAAAC,QAAA,OAAAC,SAAA,UAAAC,MAAA,SAEAsoB,oBAAA,WAAA,OAAAjpB,EAAA4oB,iBAAA5oB,EAAA4oB,eAAAM,QACAjkB,eAAA,CAAA,CACAC,KAAA,6BACAE,SAAA,SAAAhH,GAsEA+qB,EAAA/nB,SAAAC,KAAA,WACA8nB,EAAA3nB,aAnEAxB,EAAAiB,cAAA,SAAA7C,GACAsqB,EAAAtqB,IAGA4B,EAAAyB,SAAA,WACAzB,EAAAiE,YAAAjE,EAAAmT,YACAjL,EAAAiD,IAAA,CACAhK,EAAAC,SACAmnB,EAAA7mB,UAAA1B,EAAAiE,WAAAjE,EAAAmT,cACA9R,KAAA,SAAA+nB,GACAjoB,EAAAnB,OAAAsB,MAAA8nB,EAAA,GACAjoB,EAAAnB,OAAAqpB,qBAAA,SAAAjrB,GACAgT,IACApR,EAAA2D,WAAA,yBAAA,CAAAolB,UAAA3qB,EAAA2qB,UAAAxlB,SAAA,EAAAylB,SAAA5qB,EAAA0E,MAEA3B,EAAAK,UAMAxB,EAAAkB,UAAA,SAAA9C,GAEA6U,EAAAsV,EAAAhH,QAAAnjB,EAAA0E,IACAoF,EAAAiD,IAAA,CAAA8H,EAAA9R,EAAAC,WAAAC,KAAA,SAAAC,GACAH,EAAAnB,OAAAsB,MAAAA,EAAA,GACAH,EAAAnB,OAAAqpB,qBAAA,SAAAjrB,GACAgT,IACApR,EAAA2D,WAAA,yBAAA,CAAAolB,UAAA3qB,EAAA2qB,UAAAxlB,SAAA,EAAAylB,SAAA5qB,EAAA0E,MAEA3B,EAAAK,UAKAxB,EAAA2B,YAAA,SAAAvD,GACAmqB,EAAA3mB,OAAAxD,EAAA0E,IAAA1B,SAAAC,KAAA,WACA+P,IACAsX,EAAA,SAIA1oB,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,2CAEA,CACAzG,MAAA,wBACAyG,SAAA,yEAIA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,EAAAC,SAAAA,MAGA,IAAA5E,EAAAlB,EAAA,CACAL,YAAA,kDACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,MAAA,KASA,IAAAknB,EAAAlpB,EAAA,CACAL,YAAA,yDACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,MAAA,QC9KAtH,MAAAkF,WAAA,2BAAA,CAAA,SAAA,SAAA,oBAAA,gBACA,SAAAG,EAAAC,EAAAsoB,EAAAld,GA8DA,SAAAie,EAAAlrB,GACA,IAAA4B,EAAA6C,SAAA,CAIA7C,EAAA6C,UAAA,EAEA,IAAA0mB,EAAA3uB,QAAA2G,KAAAnD,GACAmrB,EAAAzmB,GAAA,KAEAylB,EAAAvlB,OAAAumB,GACAnoB,SAAAC,KAEA,SAAA8S,GACAnU,EAAAqpB,qBAAAlV,GACAnU,EAAA0C,SAGA,SAAAsJ,GACAhM,EAAA4C,YAAAoJ,EACAhM,EAAA6C,UAAA,KAIA,SAAA2mB,EAAAprB,GACA,IAKAmrB,EAUA,SAAA9mB,EAAA0R,GACAnU,EAAAqpB,qBAAAlV,GACAnU,EAAA0C,QAGA,SAAAC,EAAAqJ,GACAhM,EAAA4C,YAAAoJ,EACAhM,EAAA6C,UAAA,EAtBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,EACA0mB,EAAA3uB,QAAA2G,KAAAnD,IAEAA,EAAA0E,GAIAylB,EAAAxlB,OAAAwmB,GAHAhB,EAAAvlB,OAAAumB,IAIAnoB,SAAAC,KAAAoB,EAAAE,IAjGA3C,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OACAtB,EAAAypB,mBAAA7uB,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAqM,gBAAA,SAAA0c,GACAR,EAAAmB,gBAAA1pB,EAAAsB,MAAAynB,IAGA/oB,EAAAoY,iBAAA,WACAmQ,EAAAoB,iBAAA3pB,EAAAsB,MAAAtB,EAAAsB,MAAAue,aAGA7f,EAAA4pB,mBAAA,SAAAxrB,GACAmqB,EAAAsB,SAAAzrB,GAAAgD,SAAAC,KAAA,SAAAoB,GACA,IAAAA,EAAAhD,OACA6pB,EAAAlrB,GAGAiN,EAAA6B,eAAA,CACA7R,MAAA,yBACA8R,QAAA,+EACAC,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WACAkkB,EAAAlrB,WAQA4B,EAAAwC,aAAA,SAAApE,GACA,IAEAmrB,EAFAvpB,EAAAqC,UAAApG,SAEAstB,EAAA3uB,QAAA2G,KAAAnD,GACAmqB,EAAAsB,SAAAN,GAAAnoB,SAAAC,KAAA,SAAAoB,GACA,IAAAA,EAAAhD,OACA+pB,EAAAprB,GAEAiN,EAAA6B,eAAA,CACA7R,MAAA,yBACA8R,QAAA,wGACAC,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WACAokB,EAAAprB,WAOAorB,EAAAprB,IAuDA4B,EAAA8pB,WAAA,SAAA1rB,GACA,IAKAmrB,EALAvpB,EAAA+pB,eAIA/pB,EAAA+pB,cAAA,EACAR,EAAA3uB,QAAA2G,KAAAnD,GAEAmqB,EAAAsB,SAAAN,GAAAnoB,SAAAC,KAAA,SAAAoB,GAEA,GADAzC,EAAA+pB,cAAA,EACA,IAAAtnB,EAAAhD,OACArB,EAAAnC,SAAA,EACA+D,EAAAypB,mBAAA7uB,QAAA2G,KAAAnD,OACA,CACAA,EAAAnC,SAAA,EACA+D,EAAAypB,mBAAA7uB,QAAA2G,KAAAnD,GAEA,IAAA+O,EAAA,GACA/Q,EAAAkJ,QAAA7C,EAAA,SAAAlD,GACA4N,GAAA,sFAAA5N,EAAA,YAEA8L,EAAA6B,eAAA,CACA7R,MAAA,wBACA8R,QAAAA,EACAC,QAAA,CAAA,CACAlI,KAAA,mBAIA,SAAAvC,GACA3C,EAAA+pB,cAAA,EACAC,MAAArnB,OAIA3C,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAIArC,EAAAknB,YAAA,SAAA9oB,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAypB,qBAAAzpB,EAAAypB,mBAAAxtB,SAGA+D,EAAAiqB,+BAAA,SAAAC,GACA3B,EAAA4B,2BAAAnqB,EAAAsB,MAAA4oB,IAGAlqB,EAAAiG,WAAA,CAAA,CACA5K,MAAA,WACAyG,SAAA,4DACA,CACAzG,MAAA,qBACAyG,SAAA,kEACA,CACAzG,MAAA,gBACAyG,SAAA,+DACA,CACAzG,MAAA,oBACAyG,SAAA,gEAGA9B,EAAAiG,WAAAlE,UAAA,EAEA/B,EAAAoqB,kBAAA,kyBAQApqB,EAAAqqB,aAAA,gWAKArqB,EAAAsqB,aAAA,wiCAgBAtqB,EAAAuqB,gBAAA,+bASAvqB,EAAAwqB,YAAA,iVAMAxqB,EAAAyqB,SAAA,6lBAQAzqB,EAAA0qB,UAAA,+uBCtOA/vB,MAAAkF,WAAA,iCAAA,CAAA,SAAA,SAAA,oBAAA,KAAA,cACA,SAAAG,EAAAC,EAAAsoB,EAAArgB,EAAA8I,GAEAhR,EAAAsB,MAAAinB,EAAAoC,iBACA3qB,EAAA2R,WAAAX,EAAA4Z,eAAA5qB,EAAAsB,MAAAwV,SAAA9W,EAAAsB,MAAApF,QACA8D,EAAA2R,WAAAvQ,SAAAC,KAAA,WACA,MAAAwpB,IACA7qB,EAAAsB,MAAAwpB,YAAA1uB,EAAA+a,IAAAnX,EAAA2R,WAAA,SAIA,IAAAkZ,EAAA,KAEA,SAAAE,IACA/qB,EAAAgrB,eAAA,CACAC,OAAA,GACAC,gBAAA,IAIAlrB,EAAAmrB,mBAAA,WACAnrB,EAAAsB,MAAAwV,UAAA9W,EAAAsB,MAAApF,QACAH,OAAAiE,EAAAsB,MAAAwV,UAAAsU,SAAArvB,OAAAiE,EAAAsB,MAAApF,UACA8D,EAAA2R,WAAAX,EAAA4Z,eAAA5qB,EAAAsB,MAAAwV,SAAA9W,EAAAsB,MAAApF,QACA8D,EAAA2R,WAAAvQ,SAAAC,KAAA,WACA,MAAAwpB,IACA7qB,EAAAsB,MAAAwpB,YAAA1uB,EAAA+a,IAAAnX,EAAA2R,WAAA,UAIA3R,EAAA2R,WAAA,IAIA3R,EAAAqrB,cAAA,EAEAN,IAEA/qB,EAAAsrB,eAAA,SAAAC,GACA,oDAAAA,KAGAvrB,EAAAwrB,YAAA,SAAAD,GACA,OAAAA,EAAAE,MAAA,KAAAC,OAGA1rB,EAAA2rB,iBAAA,WAEA3rB,EAAAqrB,eAIArrB,EAAAqrB,cAAA,EAEAN,IAEAxC,EAAAqD,YAAA5rB,EAAAsB,OAAAF,SAAAC,KAAA,SAAAwqB,GACA7rB,EAAAgrB,eAAAa,EACA7rB,EAAAqrB,cAAA,GACA,SAAA1oB,GACA3C,EAAAqrB,cAAA,MAIArrB,EAAA8rB,aAAA,SAAAhpB,GACA,IAAAmQ,EAAAsV,EAAAhH,QAAAze,GACAoF,EAAAiD,IAAA,CAAA8H,EAAA7R,SAAAD,EAAAC,WAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA2R,EACA9R,EAAAnB,OAAAqpB,qBAAA,aAEAloB,EAAAK,UAUA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,kDACA4B,OARAxB,EAAA+rB,qBAAA,WACA/rB,EAAAsB,MAAA0qB,wBAAA,EACAhsB,EAAAsB,MAAA2qB,wBAAA,EACAjsB,EAAAsB,MAAA4qB,yBAAA,IAMAlqB,MAAAhC,EAAAiC,MAAA,KAGAjC,EAAAmsB,gBAAA,CAEAC,YAAA,OACAC,UAAA,KACAC,uBAAA,EACAC,iBAAA,EACAzJ,WAAA,EAEA0J,aAAA,aACAnJ,eAAA,CACAT,MAAA,aACAjnB,MAAA,qBAEA8wB,cAAA,SAAA5rB,GACAgqB,EAAAhqB,EAAAuI,eClGAzO,MAAAkF,WAAA,mCAAA,CAAA,SAAA,KAAA,SAAA,UAAA,aAAA,UAAA,cAAA,mBAAA,oBAAA,cACA,SAAAG,EAAAkI,EAAAjI,EAAAkI,EAAAnN,EAAAoN,EAAAjF,EAAAjB,EAAAqmB,EAAAlgB,GAEArI,EAAAsI,eAAApG,EAAAE,SAGA,IAAAwE,IADA5G,EAAA0sB,mBAAA,IAEA7lB,GAAA,EAGA,SAAAuK,EAAA2X,GACA/oB,EAAA2sB,eAAApE,EAAAqE,cAAA7D,GAHA/oB,EAAA2sB,eAAA,GAOA3sB,EAAA/E,IAAA,yBAAA,SAAA4F,EAAAgsB,GACAA,EAAA9D,UAKAliB,IAJAD,IACA5G,EAAA0sB,mBAAA3D,YAAA8D,EAAA9D,YAAA8D,EAAAtpB,SACA6N,EAAAyb,EAAA9D,YAEA,GAKA/oB,EAAA2sB,eAAA,GAEA3sB,EAAA0sB,mBAAAG,IAGA7sB,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAA7G,EAAA0sB,oBAAA1sB,EAAA0sB,mBAAA3D,YACA3X,EAAApR,EAAA0sB,mBAAA3D,WACAliB,GAAA,IAIAD,GAAA,IAIA5G,EAAA8sB,2BAAA,CACAhoB,KAAA,iBACAvE,QAAA,CACA,CACAC,UAAA,iBACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SAEAoI,mBAAA,SAAAC,GACA,OAAAvJ,OAAAb,UAAAwmB,SAAApc,EAAAqc,YAAArc,EAAAsc,kBAAAtc,EAAAuc,kBAGA,CAAA9kB,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,aAAAtI,MAAA,OAAAC,UAAA,QACA,CAAAJ,UAAA,aAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,aAAAtI,MAAA,QACA,CAAAH,UAAA,UAAAC,QAAA,UAAAC,SAAA,UAAAC,MAAA,QACA,CAAAH,UAAA,0BAAAC,QAAA,OAAAC,SAAA,UAAAC,MAAA,SAEAsoB,oBAAA,WAAA,OAAAjpB,EAAA+sB,kBAAA/sB,EAAA+sB,gBAAA7D,QACAhgB,cAAA,SAAArI,GACA,SAAAA,EAAAsI,SAAAnJ,EAAA0sB,oBACA7rB,EAAAuI,UAAAC,iBAAAxI,EAAAyI,UACAxG,KAAA9C,EAAA0sB,mBAAA1D,UACAnoB,EAAA2I,WAAAC,SAAA,kBAyCAzJ,EAAAiB,cAAA,SAAA7C,GACA4B,EAAA+sB,gBAAA3uB,GA8BA4B,EAAA2B,YAAA,SAAAvD,GACAmqB,EAAA3mB,OAAAxD,EAAA0E,IAAA1B,SAAAC,KAAA,WACA+P,EAAApR,EAAA0sB,mBAAA3D,WACA/oB,EAAA2H,MAAA,cAAA,MACA3H,EAAA+sB,gBAAA,QAkBA,IAAA5rB,EAAAlB,EAAA,CACAL,YAAA,kDACA4B,OAhBAxB,EAAAkB,UAAA,SAAA9C,GAEA,IAAA6U,EAAAsV,EAAAhH,QAAAnjB,EAAA0E,IACAoF,EAAAiD,IAAA,CAAA8H,EAAA7R,SAAAD,EAAAC,WAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA2R,EACA9R,EAAAnB,OAAAqpB,qBAAA,WACAjY,EAAApR,EAAA0sB,mBAAA3D,WACA/oB,EAAA2H,MAAA,cAAA,OAEAxG,EAAAK,WAQAQ,MAAAhC,OCxKArF,MAAAkF,WAAA,4BAAA,CAAA,SAAA,sBAAA,cACA,SAAAG,EAAAmR,EAAAhO,GAEAnD,EAAA6C,UAAA,EACA7C,EAAAiU,iBAAAjU,EAAAiU,kBAAA,GACAjU,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OACAtB,EAAAgtB,OAAA,GAEAhtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAAitB,sBAAA,CAAA,CACA5xB,MAAA,WACAyG,SAAA,mDAEAqB,EAAAU,SAAA,qBACA7D,EAAAitB,sBAAA9uB,KAAA,CACA9C,MAAA,mBACAyG,SAAA,uDAIA9B,EAAAitB,sBAAAlrB,UAAA,EAEA/B,EAAA6F,OAAA,kCAAA,SAAAC,EAAAC,GAEA,IADAD,GAQAqL,EAAAgB,uBAAA,CAAAnS,EAAAiU,mBAAA,GACA7S,SAAAC,KAAA,SAAAjD,GACA4B,EAAAgtB,OAAAvtB,OAAA,EACAO,EAAAgtB,OAAA7uB,KAAAsf,MAAAzd,EAAAgtB,OAAA5uB,EAAA,GAAA4uB,SACA,gBAKAhtB,EAAAwC,aAAA,SAAAlB,GAEAtB,EAAA6C,WAIA7C,EAAA6C,UAAA,EAGAsO,EAAA+b,kBAAA5rB,EAAAtB,EAAAiU,kBACA7S,SAAAC,KAAA,WACArB,EAAA6C,UAAA,EACA7C,EAAA0C,QACA1C,EAAAkU,mBACAlU,EAAAkU,kBAAA5S,IAEA,SAAAlD,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,SC7DAzD,MAAA4T,UAAA,kCAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAA0e,GACA,GAAAA,EACA,OAAAnyB,EAAAM,QAAA6xB,EAAAjoB,MAGA,SAAAwJ,EAAAye,GACA,OAAAnyB,EAAAM,QAAA6xB,EAAAjoB,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,kDACA,CAAApC,GAAA,EAAAoC,KAAA,kDACA,CAAApC,GAAA,EAAAoC,KAAA,kDAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QCpEAzU,MAAA4T,UAAA,yBAAA,CAAA,WAAA,aAAA,UAAA,oBACA,SAAAC,EAAAxT,EAAAoN,EAAA8X,GACA,SAAAzR,EAAA8e,GACA,GAAAA,EAIA,MAAA,0CACAA,EAAAzoB,KAAA,0DACAsD,EAAA,gBAAAA,CAAAmlB,EAAAC,OAAA,eAIA,SAAA9e,EAAA6e,GACA,OAAAA,EAAAzoB,KAAA,KAAAsD,EAAA,gBAAAA,CAAAmlB,EAAAC,OAAA,IAGA,MAAA,CACA7e,SAAA,IACAC,QAAA,WACAC,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAAC,EAAAgR,EAAAE,uBAAA,EAAApe,EAAAyrB,SAEAjf,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,0CACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACA1M,GAAA,SAAAxB,GAAA,OAAAA,EAAA+e,kBACAjiB,KAAA8Q,IAGAD,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAsT,EAAAe,QAAA,WACAd,EAAA9N,UACA8N,EAAA9N,SAAAC,KAAA,WACA8N,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,eAKAlB,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,MAGA,QCrEAhB,MAAA4T,UAAA,uBAAA,CACA,WAEA,MAAA,CACAI,SAAA,IACAE,SAAA,EACA6e,SAAA,EACA1rB,MAAA,CACAyrB,QAAA,IACAE,WAAA,IACAC,aAAA,IACAC,YAAA,IACAC,aAAA,KAEAluB,YAAA,kDACAkP,KAAA,SAAA9M,EAAA+rB,EAAA/e,GAEAhN,EAAAgsB,YAAA,GAEAhsB,EAAAisB,YAAA,SAAAC,GACAlsB,EAAAgsB,YAAAE,QCpBAvzB,MAAA4T,UAAA,yBAAA,CACA,WAEA,SAAA4f,EAAAvQ,EAAA5I,EAAAoZ,GAaA,SAAAC,EAAAzQ,EAAA5I,EAAAoZ,GACAvvB,KAAA+F,KAAA,GACA/F,KAAAuvB,oBAAAA,EAEA,IAAAE,EAAA,GACAzvB,KAAA+F,KAAAzG,KAAAmwB,GAEA,IAAA,IAAAC,EAAA,EAAAA,EAAA3Q,EAAAne,OAAA8uB,IACAA,EAAA,GAAA,GAAA,EAAAA,GAEA1vB,KAAA+F,KAAAzG,KADAmwB,EAAA,IAGAA,EAAAnwB,KAAA,CACAyd,SAxBA,SAAA5G,EAAAmJ,GACA,IAAA,IAAA5E,EAAA,EAAAA,EAAAvE,EAAAvV,OAAA8Z,IAAA,CACA,IAAAha,EAAAyV,EAAAuE,GACA,GAAAha,EAAA6e,SAAAD,EAAAC,QACAriB,OAAAwD,EAAAoR,WAAA2N,OAAAviB,OAAAoiB,EAAAxN,YACA,OAAA,EAGA,OAAA,EAgBA6I,CAAAxE,EAAA4I,EAAA2Q,MACA3Q,EAAA2Q,GAAAxZ,WAAA,EAAA6I,EAAA2Q,GAAAxZ,UAAAtV,SAAAZ,KAAAuvB,qBACAjQ,KAAAP,EAAA2Q,KAiCA,OA5BAC,OAAAC,eAAAJ,EAAA1vB,UAAA,cAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2N,GAAA,EACAgT,EAAA,EAAAA,EAAA/vB,KAAA+F,KAAAnF,OAAAmvB,IAEA,IADA,IAAA5kB,EAAAnL,KAAA+F,KAAAgqB,GACAC,EAAA,EAAAA,EAAA7kB,EAAAvK,OAAAovB,IAAA,CACA,IAAA9jB,EAAAf,EAAA6kB,IACA9jB,EAAAoT,KAAApJ,WAAA,EAAAhK,EAAAoT,KAAApJ,UAAAtV,SAAAZ,KAAAuvB,uBACAxS,GAAA7Q,EAAA6Q,UAIA,OAAA,IAAAA,GAEAjO,IAAA,SAAAmhB,GACA,IAAA,IAAAF,EAAA,EAAAA,EAAA/vB,KAAA+F,KAAAnF,OAAAmvB,IAEA,IADA,IAAA5kB,EAAAnL,KAAA+F,KAAAgqB,GACAC,EAAA,EAAAA,EAAA7kB,EAAAvK,OAAAovB,IAAA,CACA,IAAA9jB,EAAAf,EAAA6kB,IACA9jB,EAAAoT,KAAApJ,WAAA,EAAAhK,EAAAoT,KAAApJ,UAAAtV,SAAAZ,KAAAuvB,uBACArjB,EAAA6Q,SAAAkT,OAOA,IAAAT,EAAAzQ,EAAA5I,EAAAoZ,GAGA,MAAA,CACAzf,SAAA,IACAE,SAAA,EACA6e,SAAA,EACA1rB,MAAA,CACAyrB,QAAA,IACAzY,UAAA,IACAoZ,oBAAA,IACAW,SAAA,KAEAnvB,YAAA,oDACAkP,KAAA,SAAA9M,EAAA+rB,EAAA/e,GAEAhN,EAAAukB,SAAA,GAEAvkB,EAAA6D,OAAA,UAAA,SAAAC,EAAAC,GACA/D,EAAAgT,YACAhT,EAAAukB,SAAA4H,EAAAroB,EAAA9D,EAAAgT,UAAAhT,EAAAosB,wBAIApsB,EAAA6D,OAAA,WAAA,SAAAvE,GAEA,IAAA,IAAAstB,EADA5sB,EAAAgT,UAAAvV,OAAA,EACAmvB,EAAAttB,EAAAsD,KAAAnF,OAAAmvB,IAEA,IADA,IAAA5kB,EAAA1I,EAAAsD,KAAAgqB,GACAC,EAAA,EAAAA,EAAA7kB,EAAAvK,OAAAovB,IAAA,CACA,IAAA9jB,EAAAf,EAAA6kB,GACA9jB,EAAA6Q,UACA5Z,EAAAgT,UAAA7W,KAAA4M,EAAAoT,MAIAnc,EAAA+sB,YACA/sB,EAAA+sB,UAAA/sB,CAAAA,EAAAgT,aAEA,QCtGAra,MAAA4T,UAAA,0BAAA,CAAA,WAAA,aAAA,UAAA,sBACA,SAAAC,EAAAxT,EAAAoN,EAAAkY,GAEA,SAAA7R,EAAAnN,GACA,GAAAA,EAEA,MAAA,0CACA8G,EAAA,uBAAAA,CAAA9G,EAAAmgB,sBAAA,+BACAngB,EAAAwD,KAAA,eAIA,SAAA4J,EAAApN,GACA,OAAAA,EAAAwD,KAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,WACAC,SAAA,EACA7M,MAAA,CACAyrB,QAAA,IACAuB,gBAAA,IACAvN,qBAAA,MAEA3S,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA,SAAAovB,IACA/f,EAAA9N,SAAAC,KAAA,WACAmN,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,4CACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,aAAAvN,EAAAgtB,gBACAxf,wBAAA,EACA1M,GAAA,SAAAxB,GACA,OAAAA,EAAAwB,IAEA1E,KAAA8Q,EACAU,QAAA,SAAAC,EAAA3K,EAAA9G,GACA,OAAA,GAAAA,EAAA0G,KAAAgL,cAAAC,QAAAF,EAAAC,kBAIAjQ,EAAAmQ,WACA,GAEAnQ,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGAlB,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAvP,EAAAmQ,YAKA,IAAAd,EAAAoR,EAAA4O,kBAAA,EAAAltB,EAAAyf,sBACAvS,EAAA9N,SAAAC,KAAA,WACAmN,EAAA,WACAxM,EAAAgtB,iBAAA,IAAA9f,EAAAzP,QACAI,EAAAytB,cAAApe,EAAA,GAAApM,QAKAd,EAAA/G,IAAA,+BAAA,SAAA4F,EAAAzC,IACA8Q,EAAAoR,EAAA4O,kBAAA,EAAAltB,EAAAyf,uBACArgB,SAAAC,KAAA,WACAmN,EAAA,WACA,IAAAwG,EAAA5W,GAAAA,EAAA0E,GAEA1E,EAAA0E,GADAiM,EAAAK,QAAA,OAEAL,EAAAK,QAAA,WACA6f,IACApvB,EAAAytB,cAAAtY,SAKAia,SCnGAt0B,MAAA4T,UAAA,8BAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAAnN,GACA,GAAAA,EACA,OAAAtG,EAAAM,QAAAgG,EAAA4D,MAGA,SAAAwJ,EAAApN,GACA,OAAAtG,EAAAM,QAAAgG,EAAA4D,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,iCACA,CAAApC,GAAA,EAAAoC,KAAA,8BACA,CAAApC,GAAA,EAAAoC,KAAA,8BACA,CAAApC,GAAA,EAAAoC,KAAA,iCACA,CAAApC,GAAA,EAAAoC,KAAA,gBACA,CAAApC,GAAA,EAAAoC,KAAA,yCACA,CAAApC,GAAA,EAAAoC,KAAA,sCACA,CAAApC,GAAA,EAAAoC,KAAA,sCACA,CAAApC,GAAA,EAAAoC,KAAA,4BACA,CAAApC,GAAA,EAAAoC,KAAA,8BAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QC3EAzU,MAAA4T,UAAA,6BAAA,CAAA,WAAA,aAAA,oBACA,SAAAC,EAAAxT,EAAAutB,GACA,SAAA9rB,EAAA4a,GACA,GAAAA,EAAAvU,GAAA,OAAAuU,EAAAvS,KAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,WACA5M,MAAA,CACAyrB,QAAA,IACA0B,SAAA,IACA3W,YAAA,KAEA1J,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA,IAAAuvB,EAAA7G,EAAA8G,QACAD,EAAAhuB,SAAAC,KAAA,WACAmN,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAA,aACAZ,aAAAhS,EACAiS,gBAAAjS,EACA6S,mBAAA,EACAC,YAAA,EACAC,wBAAA,EACA1M,GAAA,SAAAxB,GACA,OAAAA,EAAAwB,IAEA1E,KAAAgxB,EAAAptB,EAAAmtB,UACAvf,QAAA,SAAAC,EAAA3K,EAAA9G,GACA,OAAA,GAAAA,EAAA0G,KAAAgL,cAAAC,QAAAF,EAAAC,gBAEAwf,SAAAttB,EAAAwW,cAAA,EACA+W,qBAAA,IAGA1vB,EAAAmQ,QAAA,WACAof,EAAAhuB,UACAguB,EAAAhuB,SAAAC,KAAA,WACA0N,EAAAK,QAAA,MAAAvP,EAAAoQ,eAKAjO,EAAAwW,cACA3Y,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,GAAAof,MAAAC,QAAArf,GACA,OAAA,IAAAA,EAAA3Q,OACA,KAEA2Q,EAAAsf,KAAA,OAIA7vB,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAS,EAAA+a,IAAAxb,EAAA8vB,MAAA,KAAA,SAAAkE,GACA,OAAAA,EAAA,KACAD,KAAA,KAJA,QAQA3gB,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAEA,UClFAzU,MAAA4T,UAAA,sBAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAA0e,GACA,GAAAA,EACA,OAAAnyB,EAAAM,QAAA6xB,EAAAjoB,MAGA,SAAAwJ,EAAAye,GACA,OAAAnyB,EAAAM,QAAA6xB,EAAAjoB,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,mBACA,CAAApC,GAAA,EAAAoC,KAAA,iCAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QCnEAzU,MAAA4T,UAAA,iCAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAArQ,GACA,GAAAA,EACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,SAAAwJ,EAAAtQ,GACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,oCACA,CAAApC,GAAA,EAAAoC,KAAA,gCAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QCnEAzU,MAAA4T,UAAA,4BAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAA0e,GACA,GAAAA,EACA,OAAAnyB,EAAAM,QAAA6xB,EAAAjoB,MAGA,SAAAwJ,EAAAye,GACA,OAAAnyB,EAAAM,QAAA6xB,EAAAjoB,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,eACA,CAAApC,GAAA,EAAAoC,KAAA,gBACA,CAAApC,GAAA,EAAAoC,KAAA,oBAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QCpEAzU,MAAA2pB,OAAA,iBAAA,CAAA,aAAA,SAAAtpB,GACA,OAAA,SAAAS,GACA,OAAAA,EACAA,EAAAm0B,EACA50B,EAAAM,QAAA,oBACAN,EAAAM,QAAA,qBACAN,EAAAM,QAAA,uBACAN,EAAAM,QAAA,sBACAN,EAAAM,QAAA,oBACAN,EAAAM,QAAA,sBACAN,EAAAM,QAAA,qBAEA,OCZAX,MAAA2pB,OAAA,wBAAA,CAAA,aAAA,SAAAtpB,GA2BA,OAAA,SAAAS,GACA,GAAAA,EAEA,OAAAW,EAAAyzB,OAAAp0B,EAAA,SAAAowB,EAAAtF,GACAsF,IACAA,GAAA,OAEAA,GAAA9vB,OAAAwqB,EAAAzP,UAAAra,OAAA,YAAA,MAAAV,OAAAwqB,EAAArqB,QAAAO,OAAA,YAAA,KAEA,IAAA6X,EAAA,GAuBA,OAtBAiS,EAAAzH,QACAxK,EAAAnW,KAAAnD,EAAAM,QAAA,qBAEAirB,EAAAxH,SACAzK,EAAAnW,KAAAnD,EAAAM,QAAA,sBAEAirB,EAAAvH,WACA1K,EAAAnW,KAAAnD,EAAAM,QAAA,wBAEAirB,EAAAtH,UACA3K,EAAAnW,KAAAnD,EAAAM,QAAA,uBAEAirB,EAAArH,QACA5K,EAAAnW,KAAAnD,EAAAM,QAAA,qBAEAirB,EAAApH,UACA7K,EAAAnW,KAAAnD,EAAAM,QAAA,uBAEAirB,EAAAM,QACAvS,EAAAnW,KAAAnD,EAAAM,QAAA,qBAGAuwB,EAAAvX,EAAAob,KAAA,KAAA,KACA,QC5DA/0B,MAAA2pB,OAAA,uBAAA,CAAA,aAAA,SAAAtpB,GACA,OAAA,SAAAS,GACA,OAAAA,GACA,KAAA,EACA,OAAAT,EAAAM,QAAA,iCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,8BACA,KAAA,EACA,OAAAN,EAAAM,QAAA,8BACA,KAAA,EACA,OAAAN,EAAAM,QAAA,iCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,gBACA,KAAA,EACA,OAAAN,EAAAM,QAAA,yCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,sCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,sCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,4BACA,KAAA,EACA,OAAAN,EAAAM,QAAA,2BACA,QACA,MAAA,QCxBAX,MAAA2pB,OAAA,mBAAA,CAAA,aAAA,SAAAtpB,GACA,OAAA,SAAAS,GACA,OAAAA,GACA,IAAA,KACA,OAAAT,EAAAM,QAAA,oBACA,IAAA,KACA,OAAAN,EAAAM,QAAA,oBACA,IAAA,OACA,OAAAN,EAAAM,QAAA,0BACA,IAAA,gBACA,OAAAN,EAAAM,QAAA,+BAEA,MAAA,OCZAX,MAAA2pB,OAAA,2BAAA,CAAA,aAAA,oBAAA,SAAAtpB,EAAAutB,GACA,IAAA6G,EAAA7G,EAAA8G,QAEA,SAAAS,EAAAr0B,EAAA0zB,GACA,GAAAC,EAAAW,UAAA,CACAzuB,EAAAlF,EAAAsK,KAAA0oB,EAAAD,GAAA,CAAArsB,GAAArH,IACA,OAAA6F,EACAA,EAAAwD,KAEA,GAGA,OAAA9J,EAAAM,QAAA,oBAMA,OAFAw0B,EAAAE,WAAA,EAEAF,KClBAn1B,MAAA2pB,OAAA,0BAAA,CAAA,aAAA,SAAAtpB,GACA,OAAA,SAAAS,GACA,OAAAA,GACA,KAAA,EACA,OAAAT,EAAAM,QAAA,eACA,KAAA,EACA,OAAAN,EAAAM,QAAA,gBACA,KAAA,EACA,OAAAN,EAAAM,QAAA,iBAEA,MAAA,OCVA,IAAAijB,wBAAAA,yBAAA,IAEA,SAAA0R,GAGAA,EAAAC,YAAA,SAAAC,GACAtxB,KAAAsxB,YAAAA,GAMAF,EAAAC,YAAAvxB,UAAAsb,YAAA,WACApb,KAAAuxB,uCAAA,EACAvxB,KAAAwxB,uCAAA,EAEAxxB,KAAAyxB,yCACAzxB,KAAA,iCAGAA,KAAA0xB,yCACA1xB,KAAA,iCAGAA,KAAA2xB,8CACA3xB,KAAA,uCAIAoxB,EAAAC,YAAAvxB,UAAA8xB,iBAAA,SAAAz1B,GACA6D,KAAA6xB,+BAAA11B,EAAAM,QAAA,wBACAuD,KAAA8xB,wCAAA31B,EAAAM,QAAA,wBACAuD,KAAA+xB,kCAAA51B,EAAAM,QAAA,gCACAuD,KAAAgyB,iCAAA71B,EAAAM,QAAA,0BACAuD,KAAAiyB,iCAAA91B,EAAAM,QAAA,0BACAuD,KAAAkyB,sCAAA/1B,EAAAM,QAAA,gCACAuD,KAAAmyB,kCAAAh2B,EAAAM,QAAA,2BAGA20B,EAAAC,YAAAvxB,UAAAsyB,qBAAA,SAAAC,GACA,GAAAA,IACAryB,KAAA0L,UAAA2mB,EAAA3mB,UACA1L,KAAAsyB,YAAAD,EAAAC,YACAtyB,KAAAuyB,WAAAF,EAAAG,mBACAxyB,KAAAiU,iBAAAoe,EAAApe,iBACAjU,KAAAyyB,QAAAJ,EAAAI,QACAzyB,KAAA0yB,WAAAL,EAAAK,WAEAL,EAAAM,WACA,IAAA,IAAAjY,EAAA,EAAAA,EAAA2X,EAAAM,UAAA/xB,OAAA8Z,IAAA,CACA,IAAAkY,EAAAP,EAAAM,UAAAjY,GACA,OAAAkY,EAAAC,iBACA,IAAA,gBACA7yB,KAAAiyB,iCAAAW,EAAA3sB,KACAjG,KAAA8yB,gCAAAF,EAAAG,SACA/yB,KAAAgzB,sCAAAJ,EAAAK,WAAA,EACA,MACA,IAAA,gBACAjzB,KAAAgyB,iCAAAY,EAAA3sB,KACAjG,KAAAkzB,gCAAAN,EAAAG,SACA/yB,KAAAmzB,sCAAAP,EAAAK,WAAA,EACA,MACA,IAAA,qBACAjzB,KAAAkyB,sCAAAU,EAAA3sB,KACAjG,KAAAozB,qCAAAR,EAAAG,SACA/yB,KAAAqzB,2CAAAT,EAAAK,WAAA,EACA,MACA,IAAA,cACAjzB,KAAA6xB,+BAAAe,EAAA3sB,KACAjG,KAAAszB,8BAAA,MAAAV,EAAAG,SACA,EACAH,EAAAG,SACA/yB,KAAAuzB,oCAAAX,EAAAK,WAAAL,EAAAjE,MACA,MACA,IAAA,uBACA3uB,KAAA8xB,wCAAAc,EAAA3sB,KACAjG,KAAAwzB,uCAAA,MAAAZ,EAAAG,SACA,EACAH,EAAAG,SACA/yB,KAAAyzB,6CAAAb,EAAAK,WAAAL,EAAAjE,MACA,MACA,IAAA,oBACA3uB,KAAA+xB,kCAAAa,EAAA3sB,KACAjG,KAAA0zB,iCAAA,MAAAd,EAAAG,SACAH,EAAAjE,MAAA,EAAA,EACAiE,EAAAG,SACA/yB,KAAAwxB,uCAAAoB,EAAAK,WAAAL,EAAAjE,MACA,MACA,IAAA,mBACA3uB,KAAAmyB,kCAAAS,EAAA3sB,KACAjG,KAAA2zB,iCAAA,MAAAf,EAAAG,SACAH,EAAAjE,MAAA,EAAA,EACAiE,EAAAG,SACA/yB,KAAAuxB,uCAAAqB,EAAAK,WAAAL,EAAAjE,MACA,MACA,QACAxD,MAAA,8BAAAyH,EAAAC,kBAMA7yB,KAAAgzB,sCAAAhzB,KAAAgzB,uCAAA,EACAhzB,KAAAgzB,wCACAhzB,KAAA8yB,gCAAA9yB,KAAA8yB,iCAAA,GAGA9yB,KAAAmzB,sCAAAnzB,KAAAmzB,uCAAA,EACAnzB,KAAAmzB,wCACAnzB,KAAAkzB,gCAAAlzB,KAAAkzB,iCAAA,GAGAlzB,KAAAqzB,2CAAArzB,KAAAqzB,4CAAA,EACArzB,KAAAqzB,6CACArzB,KAAAozB,qCAAApzB,KAAAozB,sCAAA,GAGApzB,KAAAuzB,oCAAAvzB,KAAAuzB,qCAAA,EACAvzB,KAAAszB,8BAAAtzB,KAAAszB,+BAAA,EAEAtzB,KAAAyzB,6CAAAzzB,KAAAyzB,8CAAA,EACAzzB,KAAAwzB,uCAAAxzB,KAAAwzB,wCAAA,EAEAxzB,KAAAwxB,uCAAAxxB,KAAAwxB,wCAAA,EACAxxB,KAAA0zB,iCAAA1zB,KAAA0zB,kCAAA,EAEA1zB,KAAAuxB,uCAAAvxB,KAAAuxB,wCAAA,EACAvxB,KAAA2zB,iCAAA3zB,KAAA2zB,kCAAA,GAKAvC,EAAAC,YAAAvxB,UAAA8zB,cAAA,SAAAz3B,GACA,IAAAyhB,EAAA,CAAA+U,UAAA,IA+EA,OA7EA/U,EAAAlS,UAAA1L,KAAA0L,UACAkS,EAAAiW,MAAA7zB,KAAA8zB,gBACAlW,EAAAmW,kBAAA/zB,KAAAkJ,UACA0U,EAAA4U,mBAAAxyB,KAAAuyB,WACA3U,EAAA3J,iBAAAjU,KAAAiU,iBACA2J,EAAA0U,YAAAtyB,KAAAsyB,aAAA,IAAA70B,KACAmgB,EAAA6U,QAAAzyB,KAAAyyB,QAEAzyB,KAAAg0B,mCACApW,EAAA+U,UAAArzB,KAAA,CACAuzB,gBAAA,gBACA5sB,KAAAjG,KAAAiyB,iCACAtD,MAAA3uB,KAAAg0B,kCACAjB,SAAA/yB,KAAA8yB,gCACAG,UAAAjzB,KAAAgzB,wCAIAhzB,KAAAi0B,mCACArW,EAAA+U,UAAArzB,KAAA,CACAuzB,gBAAA,gBACA5sB,KAAAjG,KAAAgyB,iCACArD,MAAA3uB,KAAAi0B,kCACAlB,SAAA/yB,KAAAkzB,gCACAD,UAAAjzB,KAAAmzB,wCAIAnzB,KAAAk0B,wCACAtW,EAAA+U,UAAArzB,KAAA,CACAuzB,gBAAA,qBACA5sB,KAAAjG,KAAAkyB,sCACAvD,MAAA3uB,KAAAk0B,uCACAnB,SAAA/yB,KAAAozB,qCACAH,UAAAjzB,KAAAqzB,6CAKArzB,KAAAsxB,YASA1T,EAAA+U,UAAArzB,KAAA,CACAuzB,gBAAA,uBACA5sB,KAAAjG,KAAA8xB,yCAAA31B,EAAAM,QAAA,wBACAkyB,MAAA3uB,KAAAm0B,0CAAA,EACApB,SAAA/yB,KAAAwzB,wCAAA,EACAP,UAAAjzB,KAAAyzB,8CAAA,IAbA7V,EAAA+U,UAAArzB,KAAA,CACAuzB,gBAAA,cACA5sB,KAAAjG,KAAA6xB,gCAAA11B,EAAAM,QAAA,wBACAkyB,MAAA3uB,KAAAo0B,iCAAA,EACArB,SAAA/yB,KAAAszB,+BAAA,EACAL,UAAAjzB,KAAAuzB,qCAAA,IAYAvzB,KAAAq0B,oCACAzW,EAAA+U,UAAArzB,KAAA,CACAuzB,gBAAA,oBACA5sB,KAAAjG,KAAA+xB,kCACApD,MAAA3uB,KAAAq0B,oCAAA,EACAtB,SAAA/yB,KAAA0zB,kCAAA,EACAT,UAAAjzB,KAAAwxB,wCAAA,IAIAxxB,KAAAs0B,oCACA1W,EAAA+U,UAAArzB,KAAA,CACAuzB,gBAAA,mBACA5sB,KAAAjG,KAAAmyB,kCACAxD,MAAA3uB,KAAAs0B,oCAAA,EACAvB,SAAA/yB,KAAA2zB,kCAAA,EACAV,UAAAjzB,KAAAuxB,wCAAA,IAIA3T,GAOA+R,OAAAC,eAAAwB,EAAAC,YAAAvxB,UAAA,kCAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,IAAAmlB,EAAAv0B,KAAAszB,8BAAAtzB,KAAAuzB,oCACA,OAAAiB,KAAAC,MAAA,IAAAF,GAAA,OAIA5E,OAAAC,eAAAwB,EAAAC,YAAAvxB,UAAA,2CAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,IAAAmlB,EAAAv0B,KAAAwzB,uCAAAxzB,KAAAyzB,6CACA,OAAAe,KAAAC,MAAA,IAAAF,GAAA,OAIA5E,OAAAC,eAAAwB,EAAAC,YAAAvxB,UAAA,qCAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,IAAAmlB,EAAAv0B,KAAA0zB,iCAAA1zB,KAAAwxB,uCACA,OAAAgD,KAAAC,MAAA,IAAAF,GAAA,OAIA5E,OAAAC,eAAAwB,EAAAC,YAAAvxB,UAAA,qCAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,IAAAmlB,EAAAv0B,KAAA2zB,iCAAA3zB,KAAAuxB,uCACA,OAAAiD,KAAAC,MAAA,IAAAF,GAAA,OAIA5E,OAAAC,eAAAwB,EAAAC,YAAAvxB,UAAA,kCAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,YAAAuV,IAAA3kB,KAAAyxB,iCACAzxB,KAAA00B,YAEA10B,KAAAyxB,kCAGA3iB,IAAA,SAAAhS,GACAkD,KAAAyxB,iCAAA30B,KAIA6yB,OAAAC,eAAAwB,EAAAC,YAAAvxB,UAAA,oCAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,IAAAmlB,EAAAv0B,KAAAkzB,gCAAAlzB,KAAAmzB,sCACA,OAAAqB,KAAAC,MAAA,IAAAF,GAAA,OAIA5E,OAAAC,eAAAwB,EAAAC,YAAAvxB,UAAA,kCAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,YAAAuV,IAAA3kB,KAAA0xB,iCACA1xB,KAAA20B,cAAA30B,KAAA40B,eAEA50B,KAAA0xB,kCAGA5iB,IAAA,SAAAhS,GACAkD,KAAA0xB,iCAAA50B,KAIA6yB,OAAAC,eAAAwB,EAAAC,YAAAvxB,UAAA,oCAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,IAAAmlB,EAAAv0B,KAAA8yB,gCAAA9yB,KAAAgzB,sCACA,OAAAwB,KAAAC,MAAA,IAAAF,GAAA,OAIA5E,OAAAC,eAAAwB,EAAAC,YAAAvxB,UAAA,uCAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,YAAAuV,IAAA3kB,KAAA2xB,sCACA3xB,KAAA60B,mBAEA70B,KAAA2xB,uCAGA7iB,IAAA,SAAAhS,GACAkD,KAAA2xB,sCAAA70B,KAIA6yB,OAAAC,eAAAwB,EAAAC,YAAAvxB,UAAA,yCAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,IAAAmlB,EAAAv0B,KAAAozB,qCAAApzB,KAAAqzB,2CACA,OAAAmB,KAAAC,MAAA,IAAAF,GAAA,OAIA5E,OAAAC,eAAAwB,EAAAC,YAAAvxB,UAAA,kBAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WASA,OARA7O,OAAAP,KAAAg0B,mCAAA,GACAzzB,OAAAP,KAAAi0B,mCAAA,GACA1zB,OAAAP,KAAAq0B,oCAAA,GACA9zB,OAAAP,KAAAo0B,iCAAA,GACA7zB,OAAAP,KAAAm0B,0CAAA,GACA5zB,OAAAP,KAAAs0B,oCAAA,GACA/zB,OAAAP,KAAAk0B,wCAAA,MAMAvE,OAAAC,eAAAwB,EAAAC,YAAAvxB,UAAA,iBAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,QAAApP,KAAAg0B,mCACAh0B,KAAAi0B,mCACAj0B,KAAAq0B,oCACAr0B,KAAAo0B,iCACAp0B,KAAAm0B,0CACAn0B,KAAAs0B,oCACAt0B,KAAAk0B,2CApVA,CA0VAxU,yBC1VA,SAAA0R,GAGAA,EAAA0D,gBAAA,aAMA1D,EAAA0D,gBAAAh1B,UAAAi1B,cAAA,SAAAC,GACA,OAAA,IAAAv3B,KAAA,KAAA,EAAA,EAAAu3B,EAAAC,QAAAD,EAAAE,YAGA9D,EAAA0D,gBAAAh1B,UAAAq1B,yBAAA,WACA,OAAAj4B,OAAA,IAAAO,KAAA,KAAA,EAAA,EAAA,KAGA2zB,EAAA0D,gBAAAh1B,UAAAs1B,yBAAA,WAEA,OAAAl4B,OAAA,IAAAO,KAAA,KAAA,EAAA,EAAA,GAAA,GAAA,GAAA,MAGA2zB,EAAA0D,gBAAAh1B,UAAAu1B,gBAAA,SAAAnf,EAAAof,EAAAC,GACA,IAAA1jB,EAAA7R,KAAAm1B,2BACAK,GAAA,EAEA,GAAAtf,EACA,IAAA,IAAAuf,EAAA,EAAAA,EAAAvf,EAAAtV,OAAA60B,IAAA,CACA,IAAAC,EAAAxf,EAAAuf,GAAAH,IACAI,IAEA,IADA34B,EAAAG,OAAAw4B,IACAC,OAAA54B,EAAA64B,UACA,GAAA/jB,EAAA8jB,OAAA9jB,EAAA+jB,WAEAJ,KACA3jB,EAAA9U,EACAy4B,GAAA,GAMA,OAAAA,GAAAD,EACA,KAGAv1B,KAAA+0B,cAAAljB,IAGAuf,EAAA0D,gBAAAh1B,UAAA+1B,gBAAA,SAAA3f,EAAAof,EAAAC,GACA,IAAAO,EAAA91B,KAAAo1B,2BACAI,GAAA,EAEA,GAAAtf,EACA,IAAA,IAAAuf,EAAA,EAAAA,EAAAvf,EAAAtV,OAAA60B,IAAA,CACA,IAEA14B,EAFA24B,EAAAxf,EAAAuf,GAAAH,GACAI,IAEAR,EAAA,IADAn4B,EAAAG,OAAAw4B,IACAC,OAAA54B,EAAA64B,UACA,GAAAE,EAAAH,OAAAG,EAAAF,UAEAV,IAAAM,KACAM,EAAA/4B,EACAy4B,GAAA,IAMA,OAAAA,GAAAD,EACA,KAGAv1B,KAAA+0B,cAAAe,IAGA1E,EAAA0D,gBAAAh1B,UAAAi2B,kBAAA,SAAAC,EAAAC,GACA,IAAA3pB,EAAA,GAEA,GAAA0pB,EACA,IAAA,IAAA3W,EAAA,EAAAA,EAAA2W,EAAAp1B,OAAAye,IAIA,IAHA,IAAAC,EAAA0W,EAAA3W,GAGA3e,EAAA,EAAAA,EAAA4e,EAAApJ,UAAAtV,OAAAF,IAAA,CACA,IAAAgnB,EAAApI,EAAApJ,UAAAxV,GACAw1B,EAAAxO,EAAAyO,sBACAzO,EAAA0O,oBACA1O,EAAA2O,uBACA3O,EAAA4O,oBAEAJ,GACAh5B,OAAAg5B,GAAAK,eAEAN,GACA3pB,EAAAhN,KAAAooB,GAOA,OAAApb,GAGA8kB,EAAA0D,gBAAAh1B,UAAA02B,qBAAA,SAAAC,EAAAnB,EAAAx4B,EAAA45B,GACA,IAAAD,IAAAA,EAAA71B,SAAA9D,EACA,OAAA,EAMA,IAHA,IAAA65B,EAAAz5B,OAAAJ,GACA85B,EAAA,GAAAD,EAAA1B,QAAA0B,EAAAzB,UAEAx0B,EAAA,EAAAA,EAAA+1B,EAAA71B,OAAAF,IAAA,CACA,IACAm2B,EADAJ,EAAA/1B,GACA40B,GACA,IAAAuB,EACA,OAAA,EAGAC,EAAA55B,OAAA25B,GACAE,EAAA,GAAAD,EAAA7B,QAAA6B,EAAA5B,UAEA,GAAAwB,GACA,GAAAE,EAAAG,EACA,OAAA,OAGA,GAAAA,EAAAH,EACA,OAAA,EAKA,OAAA,GAGAxF,EAAA0D,gBAAAh1B,UAAAk3B,qBAAA,SAAAP,EAAAnB,EAAAx4B,GACA,IAAA25B,IAAAA,EAAA71B,QAAA,MAAA9D,EACA,OAAA,EAGA,IAAA,IAAA4D,EAAA,EAAAA,EAAA+1B,EAAA71B,OAAAF,IAAA,CACA,IACAm2B,EADAJ,EAAA/1B,GACA40B,GACA,GAAAx4B,IAAA+5B,EACA,OAAA,EAIA,OAAA,GAtJA,CAFAnX,wBAAAA,yBAAA,ICEA,SAAA0R,GAGAA,EAAA6F,qBAAA,WACAj3B,KAAA8f,yBAAA,GAMAsR,EAAA6F,qBAAAn3B,UAAAo3B,WAAA,SAAAC,GACAn3B,KAAAkW,UAAA,GACAlW,KAAAm3B,kBAAAA,GAGA/F,EAAA6F,qBAAAn3B,UAAAs3B,sBAAA,SAAApB,EAAAC,GACA,IAAA3pB,EAAA,GAEA,GAAA0pB,EACA,IAAA,IAAAt1B,EAAA,EAAAA,EAAAs1B,EAAAp1B,OAAAF,IAAA,CACA,IAAAgnB,EAAAsO,EAAAt1B,GACAw1B,EAAAxO,EAAAyO,sBACAzO,EAAA0O,oBACA1O,EAAA2O,uBACA3O,EAAA4O,oBAEAJ,GACAh5B,OAAAg5B,GAAAK,eAEAN,GACA3pB,EAAAhN,KAAAooB,GAMA,OAAApb,GAGA8kB,EAAA6F,qBAAAn3B,UAAAi2B,kBAAA,SAAAC,EAAAC,GACA,OAAAj2B,KAAAo3B,sBAAApB,EAAAC,IAGA7E,EAAA6F,qBAAAn3B,UAAAu3B,YAAA,SAAAC,EAAA52B,EAAA40B,GACA,QAAA,IAAAgC,EACA,OAAA52B,EAAA40B,GAEA,GAAA50B,EAAA40B,IAAAgC,EAAA,CACAC,EAAAr6B,OAAAwD,EAAA40B,IACAkC,EAAAt6B,OAAAo6B,GAEA,OAAAC,EAAA5B,SAAA6B,EAAA7B,QACA4B,EAAA3B,WAAA4B,EAAA5B,SACA,gBAEA0B,EAGA,OAAAA,GAKAlG,EAAA6F,qBAAAn3B,UAAA23B,yBAAA,SAAAxB,GACA,IAWAyB,EAAAC,EAXA3B,EAAAh2B,KAAA+1B,kBAAA/1B,KAAAkW,UAAA+f,GACA2B,EAAA53B,KAAA+1B,kBAAA/1B,KAAAm3B,kBAAAlB,GAEA,OAAA,IAAAD,EAAAp1B,OACA,GAGAo1B,EAAAp1B,SAAAg3B,EAAAh3B,OACA,iBAKA7E,QAAA0K,QAAAuvB,EAAA,SAAAt1B,EAAAgvB,GACAgI,EAAA13B,KAAAq3B,YAAAK,EAAAh3B,EAAA,wBACAi3B,EAAA33B,KAAAq3B,YAAAM,EAAAj3B,EAAA,0BACAV,MAEA03B,GAAA,kBAAAA,GAIAC,GAAA,kBAAAA,EAHA,gBAOAD,GAAAC,GACAD,GAAA13B,KAAA8f,wBADA,OAEA4X,EAAA,KACAC,EAAA,KAEA,KAMAhI,OAAAC,eAAAwB,EAAA6F,qBAAAn3B,UAAA,SAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,OAAApP,KAAAy3B,yBAAA,MAIA9H,OAAAC,eAAAwB,EAAA6F,qBAAAn3B,UAAA,UAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAAA,OAAApP,KAAAy3B,yBAAA,MAGA9H,OAAAC,eAAAwB,EAAA6F,qBAAAn3B,UAAA,YAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAAA,OAAApP,KAAAy3B,yBAAA,MAGA9H,OAAAC,eAAAwB,EAAA6F,qBAAAn3B,UAAA,WAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAAA,OAAApP,KAAAy3B,yBAAA,MAGA9H,OAAAC,eAAAwB,EAAA6F,qBAAAn3B,UAAA,SAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAAA,OAAApP,KAAAy3B,yBAAA,MAGA9H,OAAAC,eAAAwB,EAAA6F,qBAAAn3B,UAAA,WAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAAA,OAAApP,KAAAy3B,yBAAA,MAGA9H,OAAAC,eAAAwB,EAAA6F,qBAAAn3B,UAAA,SAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAAA,OAAApP,KAAAy3B,yBAAA,MAGA9H,OAAAC,eAAAwB,EAAA6F,qBAAAn3B,UAAA,QAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IAAAqG,EAAA,IAAAkb,MAAA,GAEA,GAAA3wB,KAAAkW,UACA,IAAA,IAAAxV,EAAA,EAAAA,EAAAV,KAAAkW,UAAAtV,OAAAF,IAAA,CACA,IAAAgnB,EAAA1nB,KAAAkW,UAAAxV,GACAw1B,EAAAxO,EAAAyO,sBACAzO,EAAA0O,oBACA1O,EAAA2O,uBACA3O,EAAA4O,oBAEAJ,IACAzgB,EAAAvY,OAAAg5B,GAAAK,aAAA,GAAA7O,GAOA,IAFA,IAAAsF,EAAA,GAEAyI,EAAA,EAAAA,EAAAhgB,EAAA7U,OAAA60B,IAAA,CACA,IAAApG,EAAA5Z,EAAAggB,GACApG,IAAA1uB,OAAAb,UAAA+3B,mBAAAxI,EAAA9O,SACA5f,OAAAb,UAAA+3B,mBAAA7K,GACAA,GAAA,IAAAyI,EAAA,MAAApG,EAAA9O,MAEAyM,GAAA,MAAAyI,EAAA,MAAApG,EAAA9O,OAKA,OAAAyM,KA3KA,CAFAtN,wBAAAA,yBAAA,ICEA,SAAA0R,GAEA,IAAA0G,EAAA,CAAA,aAAA,cAAA,gBAAA,eAAA,aAAA,eAAA,cAGA1G,EAAA2G,2BAAA,aAKA3G,EAAA2G,2BAAAj4B,UAAAo3B,WAAA,SAAAnZ,EAAA7H,EAAA8hB,EAAA1jB,GAEAtU,KAAAkW,UAAAA,EAEAlW,KAAAyV,KAAA,GACA,IAAA,IAAA4Z,EAAA,EAAAA,GAAA,EAAAA,IACArvB,KAAAyV,KAAAnW,KAAAU,KAAAi4B,eAAAla,EAAA7H,EAAAmZ,EAAAyI,EAAAzI,EAAA,GAAA2I,EAAA1jB,KAIA8c,EAAA2G,2BAAAj4B,UAAAm4B,eAAA,SAAAla,EAAA7H,EAAA+f,EAAAiC,EAAAF,EAAA1jB,GACA,OAAA,MAGA8c,EAAA2G,2BAAAj4B,UAAA4V,mBAAA,WACA,IAAA,IAAA+f,EAAA,EAAAA,EAAAz1B,KAAAyV,KAAA7U,OAAA60B,IACAz1B,KAAAyV,KAAAggB,GAAA/f,mBAAAY,KAAAtW,KAAAyV,KAAAggB,KAIArE,EAAA2G,2BAAAj4B,UAAA6V,aAAA,WACA,IAAA,IAAA8f,EAAA,EAAAA,EAAAz1B,KAAAyV,KAAA7U,OAAA60B,IACAz1B,KAAAyV,KAAAggB,GAAA9f,aAAAW,KAAAtW,KAAAyV,KAAAggB,KAMA9F,OAAAC,eAAAwB,EAAA2G,2BAAAj4B,UAAA,eAAA,CACAsP,IAAA,WAEA,IADA,IAAA+oB,GAAA,EACAzd,EAAA,EAAAA,EAAA1a,KAAAyV,KAAA7U,OAAA8Z,IAEAyd,GADAn4B,KAAAyV,KAAAiF,GACAyd,aAEA,OAAAA,GAEAtI,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAA2G,2BAAAj4B,UAAA,iBAAA,CACAsP,IAAA,WAEA,IADA,IAAA+oB,GAAA,EACAzd,EAAA,EAAAA,EAAA1a,KAAAyV,KAAA7U,OAAA8Z,IAEAyd,GADAn4B,KAAAyV,KAAAiF,GACA0d,eAEA,OAAAD,GAEAtI,YAAA,EACAC,cAAA,IAIAH,OAAAC,eAAAwB,EAAA2G,2BAAAj4B,UAAA,iBAAA,CACAsP,IAAA,WAEA,IADA,IAAA+oB,GAAA,EACAzd,EAAA,EAAAA,EAAA1a,KAAAyV,KAAA7U,OAAA8Z,IAEAyd,GADAn4B,KAAAyV,KAAAiF,GACA2d,eAEA,OAAAF,GAEAtI,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAA2G,2BAAAj4B,UAAA,SAAA,CACAsP,IAAA,WAGA,IAFA,IAAAyB,GAAA,EACAynB,EAAA,EACA5d,EAAA,EAAAA,EAAA1a,KAAAyV,KAAA7U,OAAA8Z,IAAA,CACA,IAAA+a,EAAAz1B,KAAAyV,KAAAiF,GACA+a,EAAA0C,eACAtnB,GAAA4kB,EAAA7N,OACA0Q,KAGA,OAAAznB,GAAA,EAAAynB,GAEAxpB,IAAA,SAAAhS,GACA,IAAA,IAAA4d,EAAA,EAAAA,EAAA1a,KAAAyV,KAAA7U,OAAA8Z,IAAA,CACA,IAAA+a,EAAAz1B,KAAAyV,KAAAiF,GACA+a,EAAA0C,eACA1C,EAAA7N,OAAA9qB,KAIA+yB,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAA2G,2BAAAj4B,UAAA,WAAA,CACAsP,IAAA,WAGA,IAFA,IAAAyB,GAAA,EACAynB,EAAA,EACA5d,EAAA,EAAAA,EAAA1a,KAAAyV,KAAA7U,OAAA8Z,IAAA,CACA,IAAA+a,EAAAz1B,KAAAyV,KAAAiF,GACA+a,EAAA2C,iBACAvnB,GAAA4kB,EAAA8C,SACAD,KAGA,OAAAznB,GAAA,EAAAynB,GAEAxpB,IAAA,SAAAhS,GACA,IAAA,IAAA4d,EAAA,EAAAA,EAAA1a,KAAAyV,KAAA7U,OAAA8Z,IAAA,CACA,IAAA+a,EAAAz1B,KAAAyV,KAAAiF,GACA+a,EAAA2C,iBACA3C,EAAA8C,SAAAz7B,KAIA+yB,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAA2G,2BAAAj4B,UAAA,WAAA,CACAsP,IAAA,WAGA,IAFA,IAAAyB,GAAA,EACAynB,EAAA,EACA5d,EAAA,EAAAA,EAAA1a,KAAAyV,KAAA7U,OAAA8Z,IAAA,CACA,IAAA+a,EAAAz1B,KAAAyV,KAAAiF,GACA+a,EAAA4C,iBACAxnB,GAAA4kB,EAAA+C,SACAF,KAGA,OAAAznB,GAAA,EAAAynB,GAEAxpB,IAAA,SAAAhS,GACA,IAAA,IAAA4d,EAAA,EAAAA,EAAA1a,KAAAyV,KAAA7U,OAAA8Z,IAAA,CACA,IAAA+a,EAAAz1B,KAAAyV,KAAAiF,GACA+a,EAAA4C,iBACA5C,EAAA+C,SAAA17B,KAIA+yB,YAAA,EACAC,cAAA,IAtJA,CAFApQ,wBAAAA,yBAAA,ICEA,SAAA0R,GAGAA,EAAAqH,8BAAA,aAOArH,EAAAqH,8BAAA34B,UAAA,IAAAsxB,EAAA0D,gBACA1D,EAAAqH,8BAAA34B,UAAA44B,YAAAtH,EAAAqH,8BACArH,EAAAqH,8BAAA34B,UAAA64B,OAAAvH,EAAA0D,gBAAAh1B,UAKAsxB,EAAAqH,8BAAA34B,UAAAo3B,WAAA,SAAAnZ,EAAA7H,EAAA+f,EAAAiC,EAAAF,EAAA1jB,GACAtU,KAAA+d,aAAAA,EACA/d,KAAAkW,UAAAA,EACAlW,KAAAi2B,UAAAA,EACAj2B,KAAAqvB,IAAA6I,EACAl4B,KAAAg4B,WAAAA,EACAh4B,KAAAsU,WAAAA,EAEAtU,KAAA0V,sBAGA0b,EAAAqH,8BAAA34B,UAAA84B,aAAA,SAAAnC,EAAAoC,EAAAvD,EAAAoB,GACA,KAAAD,GAAAA,EAAA71B,QAAAi4B,GAAAA,EAAAj4B,QACA,OAAA,KAGAk4B,EAAA94B,KAAA+4B,wBAAAtC,EAAAoC,GACA,OAAAnC,EACA12B,KAAAq1B,gBAAAyD,EAAAxD,GAAA,GAEAt1B,KAAA61B,gBAAAiD,EAAAxD,GAAA,IAMAlE,EAAAqH,8BAAA34B,UAAAi5B,wBAAA,SAAAtC,EAAAoC,GACA,KAAApC,GAAAA,EAAA71B,QAAAi4B,GAAAA,EAAAj4B,QACA,MAAA,GAKA,IAFA,IAAAo4B,EAAA,GAEAt4B,EAAA,EAAAA,EAAA+1B,EAAA71B,OAAAF,IAEA,IADA,IAAAu4B,EAAAxC,EAAA/1B,GAAAu4B,mBACAlJ,EAAA,EAAAA,EAAA8I,EAAAj4B,OAAAmvB,IAAA,CACA,IAAAmJ,EAAAL,EAAA9I,GACAmJ,EAAAD,qBAAAA,GACAD,EAAA15B,KAAA45B,GAKA,OAAAF,GAGA5H,EAAAqH,8BAAA34B,UAAAq5B,qBAAA,SAAAnD,EAAAC,GACA,IAAA3pB,EAAA,GAEA,GAAA0pB,EACA,IAAA,IAAAt1B,EAAA,EAAAA,EAAAs1B,EAAAp1B,OAAAF,IAAA,CACA,IAAAgnB,EAAAsO,EAAAt1B,GACAw1B,EAAAxO,EAAAyO,sBACAzO,EAAA0O,oBACA1O,EAAA2O,uBACA3O,EAAA4O,oBAEAJ,GACAh5B,OAAAg5B,GAAAK,eAEAN,GACA3pB,EAAAhN,KAAAooB,GAMA,OAAApb,GAGA8kB,EAAAqH,8BAAA34B,UAAAs5B,qBAAA,SAAA3C,EAAAnB,GACA,IAAAmB,IAAAA,EAAA71B,OACA,OAAA,EAGA,IAAA,IAAA60B,EAAA,EAAAA,EAAAgB,EAAA71B,OAAA60B,IAEA,GADAgB,EAAAhB,GACAH,GACA,OAAA,EAIA,OAAA,GAGAlE,EAAAqH,8BAAA34B,UAAAi5B,wBAAA,SAAAtC,EAAAoC,GACA,KAAApC,GAAAA,EAAA71B,QAAAi4B,GAAAA,EAAAj4B,QACA,MAAA,GAKA,IAFA,IAAAo4B,EAAA,GAEAt4B,EAAA,EAAAA,EAAA+1B,EAAA71B,OAAAF,IAEA,IADA,IAAAu4B,EAAAxC,EAAA/1B,GAAAu4B,mBACAlJ,EAAA,EAAAA,EAAA8I,EAAAj4B,OAAAmvB,IAAA,CACA,IAAAmJ,EAAAL,EAAA9I,GACAmJ,EAAAD,qBAAAA,GACAD,EAAA15B,KAAA45B,GAKA,OAAAF,GAGA5H,EAAAqH,8BAAA34B,UAAAu5B,2BAAA,SAAAtb,EAAAkb,GACA,IAAAlb,IAAAA,EAAAnd,OACA,OAAA,KAGA,IAAA,IAAAmvB,EAAA,EAAAA,EAAAhS,EAAAnd,OAAAmvB,IAAA,CACA,IAAAnS,EAAAG,EAAAgS,GACA,GAAAnS,EAAAqb,qBAAAA,EACA,OAAArb,EAIA,OAAA,MAGAwT,EAAAqH,8BAAA34B,UAAAw5B,mBAAA,SAAAzC,EAAA/5B,EAAA45B,GACA,IAGA6C,EACA5C,EACA6C,EALAC,EAAA,KAuBA,OArBA38B,IACAy8B,EAAAr8B,OAAA25B,GACAF,EAAAz5B,OAAAJ,GACA08B,EAAA,GAAAD,EAAA5D,OAAA4D,EAAA3D,SACA8D,EAAA,GAAA/C,EAAAhB,OAAAgB,EAAAf,SAIA6D,EAFA/C,EACA8C,GAAAE,EACA,IAAAj8B,KAAA87B,EAAAI,OAAAJ,EAAAK,QAAAL,EAAAx8B,OAAA45B,EAAAhB,OAAAgB,EAAAf,SAAA,EAAA,GAEAiB,EAGA2C,GAAAE,EACA7C,EAEA,IAAAp5B,KAAA87B,EAAAI,OAAAJ,EAAAK,QAAAL,EAAAx8B,OAAA45B,EAAAhB,OAAAgB,EAAAf,SAAA,EAAA,IAKA6D,GAGArI,EAAAqH,8BAAA34B,UAAA+5B,oBAAA,SAAApD,EAAAoC,EAAAvD,GAEA,IAAAmB,IACAA,EAAA71B,OACA,OAAA,EAQA,IALA,IAAAkgB,GAAA,EACAmP,EAAA,KACA6J,EAAA,KAGAp5B,EAAA,EAAAA,EAAA+1B,EAAA71B,OAAAF,IAAA,CACA,IAAAgnB,EAAA+O,EAAA/1B,GACA,GAAAgnB,EAAA4N,GAAA,CAEA1X,EAAA5d,KAAAq5B,2BAAAR,EAAAnR,EAAAuR,oBACA,GAAArb,EAKA,CACAmc,EAAAnc,EAAA0X,GACA,GAAAxU,EACAiZ,IAGA9J,EADA,IADA6J,EAAA58B,OAAA68B,IACA9E,QAAA6E,EAAA5E,WAGApU,GAAA,OAEA,GAAAiZ,GAGA,GAAA9J,IADA,IADA6J,EAAA58B,OAAA68B,IACA9E,QAAA6E,EAAA5E,UAEA,OAAA,OAGA,GAAA,OAAAjF,EACA,OAAA,MAvBA,CACA,IAAAnP,GAAAmP,EACA,OAAA,EAEAnP,GAAA,IA2BA,OAAA,GAGAsQ,EAAAqH,8BAAA34B,UAAAk6B,aAAA,SAAAvD,EAAAoC,EAAAvD,GACA,KAAAmB,GAAAA,EAAA71B,QAAAi4B,GAAAA,EAAAj4B,QACA,OAAA,KAKA,IAFA,IAAAk4B,EAAA94B,KAAA+4B,wBAAAtC,EAAAoC,GAEApD,EAAA,EAAAA,EAAAqD,EAAAl4B,OAAA60B,IAEA,GADAqD,EAAArD,GAAAH,GAEA,OAAA,EAIA,OAAA,GAGAlE,EAAAqH,8BAAA34B,UAAAm6B,eAAA,SAAAxD,EAAAoC,EAAAvD,GACA,KAAAmB,GAAAA,EAAA71B,QAAAi4B,GAAAA,EAAAj4B,QACA,OAAA,KAQA,IALA,IAAAk4B,EAAA94B,KAAA+4B,wBAAAtC,EAAAoC,GAEA5I,EAAA,KACAnP,GAAA,EAEA2U,EAAA,EAAAA,EAAAqD,EAAAl4B,OAAA60B,IAAA,CACA,IAAAC,EAAAoD,EAAArD,GAAAH,GACA,GAAAxU,EACAA,GAAA,EACAmP,EAAAyF,OAEA,GAAAzF,IAAAyF,EACA,OAAA,KAKA,OAAAzF,GAGAmB,EAAAqH,8BAAA34B,UAAAo6B,oBAAA,SAAAzD,EAAAoC,EAAAvD,GACA,IAAAmB,IACAA,EAAA71B,OACA,OAAA,EAMA,IAHA,IAAAkgB,GAAA,EACAmP,EAAA,KAEAvvB,EAAA,EAAAA,EAAA+1B,EAAA71B,OAAAF,IAAA,CACA,IAAAgnB,EAAA+O,EAAA/1B,GACA,GAAAgnB,EAAA4N,GAAA,CAEA1X,EAAA5d,KAAAq5B,2BAAAR,EAAAnR,EAAAuR,oBACA,GAAArb,EAKA,CACAmc,EAAAnc,EAAA0X,GACA,GAAAxU,EACAmP,EAAA8J,EACAjZ,GAAA,OAEA,GAAAiZ,IAAA9J,EACA,OAAA,MAZA,CACA,IAAAnP,GAAAmP,EACA,OAAA,EAEAnP,GAAA,MAiBAsQ,EAAAqH,8BAAA34B,UAAAq6B,sBAAA,SAAA1D,EAAAoC,EAAAvD,GACA,IAAAmB,IACAA,EAAA71B,OACA,OAAA,EAMA,IAHA,IAAAkgB,GAAA,EACAmP,EAAA,KAEAvvB,EAAA,EAAAA,EAAA+1B,EAAA71B,OAAAF,IAAA,CACA,IAAAgnB,EAAA+O,EAAA/1B,GAEAkd,EAAA5d,KAAAq5B,2BAAAR,EAAAnR,EAAAuR,oBACA,GAAArb,EAKA,CACAmc,EAAAnc,EAAA0X,GACA,GAAAxU,EACAmP,EAAA8J,EACAjZ,GAAA,OAEA,IAAAngB,OAAAb,UAAA+3B,mBAAAkC,KAAAp5B,OAAAb,UAAA+3B,mBAAA5H,IAAA8J,IAAA9J,EACA,OAAA,MAZA,CACA,IAAAnP,GAAAmP,EACA,OAAA,EAEAnP,GAAA,GAaA,OAAA,GAGAsQ,EAAAqH,8BAAA34B,UAAAs6B,kBAAA,SAAA3D,GACA,IAAAA,IAAAA,EAAA71B,OACA,OAAA,EAGA,IAAA,IAAAF,EAAA,EAAAA,EAAA+1B,EAAA71B,OAAAF,IAAA,CACA,IAAAwnB,EAAAuO,EAAA/1B,GAEA,IAAAwnB,EAAA,uBACAA,EAAA,mBACA,OAAA,EAIA,OAAA,GAGAkJ,EAAAqH,8BAAA34B,UAAAu6B,kBAAA,SAAA5D,GACA,IAAAA,IAAAA,EAAA71B,OACA,OAAA,EAGA,IAAA,IAAAF,EAAA,EAAAA,EAAA+1B,EAAA71B,OAAAF,IAAA,CACA,IAAAwnB,EAAAuO,EAAA/1B,GAEA,IAAAwnB,EAAA,wBACAA,EAAA,oBACA,OAAA,EAIA,OAAA,GAGAkJ,EAAAqH,8BAAA34B,UAAA4V,mBAAA,WACA1V,KAAAs6B,oBAAAt6B,KAAAkW,UAAAlW,KAAA+d,aAAA/d,KAAAi2B,YAGA7E,EAAAqH,8BAAA34B,UAAAy6B,kBAAA,SAAAtB,GACA,OAAA,MAGA7H,EAAAqH,8BAAA34B,UAAA06B,2BAAA,SAAA/D,EAAA1Y,EAAAuX,EAAAx4B,EAAA45B,GAEA,IAAA,IAAAh2B,EAAA,EAAAA,EAAA+1B,EAAA71B,OAAAF,IAAA,CACA,IAMA+4B,EANAvR,EAAAuO,EAAA/1B,GACAm2B,EAAA3O,EAAAoN,GACAuB,IAIA4C,EAAAz5B,KAAAs5B,mBAAAzC,EAAA/5B,EAAA45B,IAEAwC,EAAAl5B,KAAAq5B,2BAAAtb,EAAAmK,EAAA+Q,qBASAC,EAAA5D,GAAAmE,EAPAA,KAEAP,EAAAl5B,KAAAu6B,kBAAArS,EAAA+Q,qBACA3D,GAAAmE,EACA1b,EAAAze,KAAA45B,OAQA9H,EAAAqH,8BAAA34B,UAAA26B,2BAAA,SAAAhE,EAAA1Y,EAAAuX,EAAAx4B,GACA,IAAA,IAAA4D,EAAA,EAAAA,EAAA+1B,EAAA71B,OAAAF,IAAA,CACA,IAAAwnB,EAAAuO,EAAA/1B,GACAm2B,EAAA3O,EAAAoN,GAEA4D,EAAAl5B,KAAAq5B,2BAAAtb,EAAAmK,EAAA+Q,oBACAC,IACAA,EAAA5D,GAAAx4B,GAAA+5B,KAKAzF,EAAAqH,8BAAA34B,UAAA46B,6BAAA,SAAAjE,EAAA1Y,EAAAuX,EAAAx4B,GACA,IAAA,IAAA4D,EAAA,EAAAA,EAAA+1B,EAAA71B,OAAAF,IAAA,CACA,IAAAwnB,EAAAuO,EAAA/1B,GACAw4B,EAAAl5B,KAAAq5B,2BAAAtb,EAAAmK,EAAA+Q,oBACAC,IACAA,EAAA5D,GAAAx4B,KAKAs0B,EAAAqH,8BAAA34B,UAAA66B,gCAAA,SAAA5c,EAAAkb,GACA,IAAA,IAAAve,EAAA,EAAAA,EAAAqD,EAAAnd,OAAA8Z,IAEA,GADAqD,EAAArD,GACAue,qBAAAA,EACA,OAAAve,EAIA,OAAA,GAGA0W,EAAAqH,8BAAA34B,UAAA6V,aAAA,WAEA,IAAAilB,IAAA56B,KAAAm2B,wBAAAn2B,KAAAo2B,mBACAyE,IAAA76B,KAAAq2B,yBAAAr2B,KAAAs2B,oBAGA,GAAAsE,GAAAC,EAgBAD,GACA56B,KAAA86B,8BACA96B,KAAAw6B,2BAAAx6B,KAAAy2B,aAAAz2B,KAAA+d,aAAA,uBAAA/d,KAAAm2B,sBAAA,GACAn2B,KAAA86B,6BAAA,GAEA96B,KAAA+6B,4BACA/6B,KAAAw6B,2BAAAx6B,KAAAy2B,aAAAz2B,KAAA+d,aAAA,qBAAA/d,KAAAo2B,oBAAA,GACAp2B,KAAA+6B,2BAAA,KAGA/6B,KAAA86B,6BAAA96B,KAAA+6B,6BACA/6B,KAAAw6B,2BAAAx6B,KAAAy2B,aAAAz2B,KAAA+d,aAAA,uBAAA,MAAA,GACA/d,KAAAw6B,2BAAAx6B,KAAAy2B,aAAAz2B,KAAA+d,aAAA,qBAAA,MAAA,GACA/d,KAAA86B,6BAAA,EACA96B,KAAA+6B,2BAAA,GAIAF,GACA76B,KAAAg7B,+BACAh7B,KAAAw6B,2BAAAx6B,KAAAy2B,aAAAz2B,KAAA+d,aAAA,wBAAA/d,KAAAq2B,uBAAA,GACAr2B,KAAAg7B,8BAAA,GAEAh7B,KAAAi7B,6BACAj7B,KAAAw6B,2BAAAx6B,KAAAy2B,aAAAz2B,KAAA+d,aAAA,sBAAA/d,KAAAs2B,qBAAA,GACAt2B,KAAAi7B,4BAAA,KAGAj7B,KAAAg7B,8BAAAh7B,KAAAi7B,8BACAj7B,KAAAw6B,2BAAAx6B,KAAAy2B,aAAAz2B,KAAA+d,aAAA,wBAAA,MAAA,GACA/d,KAAAw6B,2BAAAx6B,KAAAy2B,aAAAz2B,KAAA+d,aAAA,sBAAA,MAAA,GACA/d,KAAAg7B,8BAAA,EACAh7B,KAAAi7B,4BAAA,GAKAj7B,KAAAk7B,eACAl7B,KAAA06B,6BAAA16B,KAAAy2B,aAAAz2B,KAAA+d,aAAA,QAAA/d,KAAAugB,OACAvgB,KAAAk7B,cAAA,OAvDA,CAEA,IAAA,IAAAx6B,EAAA,EAAAA,EAAAV,KAAAy2B,aAAA71B,OAAAF,IAAA,CACA,IAAAgnB,EAAA1nB,KAAAy2B,aAAA/1B,GACAy6B,EAAAn7B,KAAA26B,gCAAA36B,KAAA+d,aAAA2J,EAAAuR,qBACA,IAAAkC,GACAn7B,KAAA+d,aAAA7I,OAAAimB,EAAA,GAIAn7B,KAAA86B,6BAAA,EACA96B,KAAA+6B,2BAAA,EACA/6B,KAAAg7B,8BAAA,EACAh7B,KAAAi7B,4BAAA,EACAj7B,KAAAk7B,cAAA,IA8CA9J,EAAAqH,8BAAA34B,UAAAw6B,oBAAA,SAAApkB,EAAA6H,EAAAkY,GAEAj2B,KAAAy2B,aAAAz2B,KAAA+1B,kBAAA7f,EAAA+f,GACAj2B,KAAA64B,gBAAA74B,KAAAm5B,qBAAApb,EAAAkY,GAEAj2B,KAAAo7B,sBAAAp7B,KAAA44B,aAAA54B,KAAAy2B,aAAAz2B,KAAA64B,gBAAA,wBAAA,GACA74B,KAAAq7B,oBAAAr7B,KAAA44B,aAAA54B,KAAAy2B,aAAAz2B,KAAA64B,gBAAA,sBAAA,GACA74B,KAAAs7B,uBAAAt7B,KAAA44B,aAAA54B,KAAAy2B,aAAAz2B,KAAA64B,gBAAA,yBAAA,GACA74B,KAAAu7B,qBAAAv7B,KAAA44B,aAAA54B,KAAAy2B,aAAAz2B,KAAA64B,gBAAA,uBAAA,GACA74B,KAAAw7B,OAAAx7B,KAAAi6B,eAAAj6B,KAAAy2B,aAAAz2B,KAAA64B,gBAAA,SAGA74B,KAAAm4B,eAAAn4B,KAAAy2B,cAAAz2B,KAAAy2B,aAAA71B,QACAZ,KAAAo4B,eAAAp4B,KAAAo6B,kBAAAp6B,KAAAy2B,cACAz2B,KAAAq4B,eAAAr4B,KAAAq6B,kBAAAr6B,KAAAy2B,cAEAz2B,KAAAy7B,wBAAAz7B,KAAAq1B,gBAAAr1B,KAAAy2B,aAAA,wBACAz2B,KAAA07B,sBAAA17B,KAAA61B,gBAAA71B,KAAAy2B,aAAA,sBACAz2B,KAAA27B,yBAAA37B,KAAAq1B,gBAAAr1B,KAAAy2B,aAAA,yBACAz2B,KAAA47B,uBAAA57B,KAAA61B,gBAAA71B,KAAAy2B,aAAA,uBAGAz2B,KAAA67B,kCAAA77B,KAAA65B,oBAAA75B,KAAAy2B,aAAAz2B,KAAA64B,gBAAA,wBACA74B,KAAA87B,gCAAA97B,KAAA65B,oBAAA75B,KAAAy2B,aAAAz2B,KAAA64B,gBAAA,sBACA74B,KAAA+7B,mCAAA/7B,KAAA65B,oBAAA75B,KAAAy2B,aAAAz2B,KAAA64B,gBAAA,yBACA74B,KAAAg8B,iCAAAh8B,KAAA65B,oBAAA75B,KAAAy2B,aAAAz2B,KAAA64B,gBAAA,uBACA74B,KAAAi8B,mBAAAj8B,KAAAm6B,sBAAAn6B,KAAAy2B,aAAAz2B,KAAA64B,gBAAA,SAGA74B,KAAAk8B,iCAAAl8B,KAAAo5B,qBAAAp5B,KAAAy2B,aAAA,wBACAz2B,KAAAm8B,+BAAAn8B,KAAAo5B,qBAAAp5B,KAAAy2B,aAAA,sBACAz2B,KAAAo8B,kCAAAp8B,KAAAo5B,qBAAAp5B,KAAAy2B,aAAA,yBACAz2B,KAAAq8B,gCAAAr8B,KAAAo5B,qBAAAp5B,KAAAy2B,aAAA,wBAGArF,EAAAqH,8BAAA34B,UAAAw8B,UAAA,WACA,OAAAt8B,KAAAm4B,iBAIAn4B,KAAAm2B,wBAAAn2B,KAAAo2B,sBACAp2B,KAAAq2B,yBAAAr2B,KAAAs2B,sBAGAlF,EAAAqH,8BAAA34B,UAAAy8B,UAAA,SAAAz/B,GACAA,GACAkD,KAAAk8B,mCACAl8B,KAAAm2B,qBAAAn2B,KAAAy7B,wBACAz7B,KAAAo2B,mBAAAp2B,KAAA07B,uBAEA17B,KAAAo8B,oCACAp8B,KAAAq2B,sBAAAr2B,KAAA27B,yBACA37B,KAAAs2B,oBAAAt2B,KAAA47B,0BAGA57B,KAAAm2B,qBAAA,KACAn2B,KAAAo2B,mBAAA,KACAp2B,KAAAq2B,sBAAA,KACAr2B,KAAAs2B,oBAAA,KACAt2B,KAAAugB,MAAA,OAIA6Q,EAAAqH,8BAAA34B,UAAA08B,YAAA,WACA,OAAAx8B,KAAAm4B,iBAIAn4B,KAAAm2B,wBAAAn2B,KAAAo2B,qBAGAhF,EAAAqH,8BAAA34B,UAAA28B,YAAA,SAAA3/B,GACAA,EACAkD,KAAAk8B,mCACAl8B,KAAAm2B,qBAAAn2B,KAAAy7B,wBACAz7B,KAAAo2B,mBAAAp2B,KAAA07B,wBAGA17B,KAAAm2B,qBAAA,KACAn2B,KAAAo2B,mBAAA,OAIAhF,EAAAqH,8BAAA34B,UAAA48B,YAAA,WACA,OAAA18B,KAAAm4B,iBAIAn4B,KAAAq2B,yBAAAr2B,KAAAs2B,sBAGAlF,EAAAqH,8BAAA34B,UAAA68B,YAAA,SAAA7/B,GACAA,EACAkD,KAAAo8B,oCACAp8B,KAAAq2B,sBAAAr2B,KAAA27B,yBACA37B,KAAAs2B,oBAAAt2B,KAAA47B,yBAGA57B,KAAAq2B,sBAAA,KACAr2B,KAAAs2B,oBAAA,OAOA3G,OAAAC,eAAAwB,EAAAqH,8BAAA34B,UAAA,SAAA,CACAsP,IAAA,WAAA,OAAApP,KAAAs8B,aACAxtB,IAAA,SAAAhS,GAAAkD,KAAAu8B,UAAAz/B,IACA+yB,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAAqH,8BAAA34B,UAAA,WAAA,CACAsP,IAAA,WAAA,OAAApP,KAAAw8B,eACA1tB,IAAA,SAAAhS,GAAAkD,KAAAy8B,YAAA3/B,IACA+yB,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAAqH,8BAAA34B,UAAA,WAAA,CACAsP,IAAA,WAAA,OAAApP,KAAA08B,eACA5tB,IAAA,SAAAhS,GAAAkD,KAAA28B,YAAA7/B,IACA+yB,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAAqH,8BAAA34B,UAAA,uBAAA,CACAsP,IAAA,WACA,OAAApP,KAAAo7B,uBAEAtsB,IAAA,SAAAhS,GACAkD,KAAAo7B,sBAAA,OAAAt+B,EAAAI,OAAAJ,GAAAO,SAAA,KACA2C,KAAA86B,6BAAA,OACAnW,IAAA7nB,IACAkD,KAAA67B,kCAAA77B,KAAAw2B,qBAAAx2B,KAAAy2B,aAAA,uBAAA35B,GAAA,KAGA+yB,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAAqH,8BAAA34B,UAAA,qBAAA,CACAsP,IAAA,WACA,OAAApP,KAAAq7B,qBAEAvsB,IAAA,SAAAhS,GACAkD,KAAAq7B,oBAAA,OAAAv+B,EAAAI,OAAAJ,GAAAO,SAAA,KACA2C,KAAA+6B,2BAAA,OACApW,IAAA7nB,IACAkD,KAAA87B,gCAAA97B,KAAAw2B,qBAAAx2B,KAAAy2B,aAAA,qBAAA35B,GAAA,KAGA+yB,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAAqH,8BAAA34B,UAAA,wBAAA,CACAsP,IAAA,WACA,OAAApP,KAAAs7B,wBAEAxsB,IAAA,SAAAhS,GACAkD,KAAAs7B,uBAAA,OAAAx+B,EAAAI,OAAAJ,GAAAO,SAAA,KACA2C,KAAAg7B,8BAAA,OACArW,IAAA7nB,IACAkD,KAAA+7B,mCAAA/7B,KAAAw2B,qBAAAx2B,KAAAy2B,aAAA,wBAAA35B,GAAA,KAGA+yB,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAAqH,8BAAA34B,UAAA,sBAAA,CACAsP,IAAA,WACA,OAAApP,KAAAu7B,sBAEAzsB,IAAA,SAAAhS,GACAkD,KAAAu7B,qBAAA,OAAAz+B,EAAAI,OAAAJ,GAAAO,SAAA,KACA2C,KAAAi7B,4BAAA,OACAtW,IAAA7nB,IACAkD,KAAAg8B,iCAAAh8B,KAAAw2B,qBAAAx2B,KAAAy2B,aAAA,sBAAA35B,GAAA,KAGA+yB,YAAA,EACAC,cAAA,IAIAH,OAAAC,eAAAwB,EAAAqH,8BAAA34B,UAAA,QAAA,CACAsP,IAAA,WACA,OAAApP,KAAAw7B,QAEA1sB,IAAA,SAAAhS,GACAkD,KAAAw7B,OAAA1+B,EACAkD,KAAAk7B,cAAA,OACAvW,IAAA7nB,IACAkD,KAAAi8B,oBAAA,IAGApM,YAAA,EACAC,cAAA,IAnrBA,CAFApQ,wBAAAA,yBAAA,ICEA5jB,MAAA8gC,QAAA,wBAAA,CAAA,YAAA,KAAA,aAAA,QAAA,gBAAA,kBACA,SAAAC,EAAAxzB,EAAAlN,EAAA2gC,EAAAC,EAAAC,GAMA,SAAAC,EAAAC,EAAAhnB,GACA,IAAAinB,EAAA,GAEAphC,QAAA0K,QAAAy2B,EAAA,SAAAzc,EAAAiP,GACA,IAAA0N,EAAAD,EAAA1c,EAAA3K,YACAsnB,IACAA,EATA,IAAA1d,wBAAA2d,SASAnnB,IACAinB,EAAA1c,EAAA3K,YAAAsnB,GACA9W,SAAA7F,EAAA6c,iBACAF,EAAAtnB,WAAA2K,EAAA3K,WACAsnB,EAAA9oB,WAAAmM,EAAAnM,YAGA8oB,EAAAlnB,UAAA5W,KAAAmhB,KAGA,IAEA3K,EAFAkjB,EAAA,GAEA,IAAAljB,KAAAqnB,EACAnE,EAAA15B,KAAA69B,EAAArnB,IAGA,OAAAkjB,EA4HA,MAAA,CACAnZ,wBA1HA,SAAAvG,EAAA0H,EAAAjC,GACA,IAAAwe,EAAA,GACArnB,EAAA,GAEAna,QAAA0K,QAAAsY,EAAA,SAAAO,EAAAoQ,GACA3zB,QAAA0K,QAAA6Y,EAAApJ,UAAA,SAAAwR,EAAA8V,GACAD,EAAAj+B,KAAAooB,EAAAuR,oBACA/iB,EAAA5W,KAAAooB,OAKA,IAAA+V,EAAAp0B,EAAAq0B,QACA1Q,EAAA,GAoCA,OAlCAA,EAAAzqB,SAAAk7B,EAAAE,QAEA,EAAAJ,EAAA38B,OACAk8B,EAAA,CACAc,OAAA,OACAC,IAAA,6CACAt+B,KAAA,CACA6F,WAAAkU,EACAhF,WAAA0M,EACA9K,UAAAqnB,KAGA35B,QAAA,SAAArE,EAAAu+B,EAAAC,EAAAlgC,GAEA4E,EAAAw6B,EAAA19B,EAAA2W,GAEA8W,EAAA1tB,KAAAsf,MAAAoO,EAAAvqB,GACAg7B,EAAAhrB,QAAAhQ,KAEAqB,MAAA,SAAAqJ,EAAA2wB,EAAAC,EAAAlgC,GACA4/B,EAAA/qB,OAAAvF,GACA,MAAAA,EAAA2wB,OACAd,EAAAgB,YACA7hC,EAAAM,QAAA,6BAEAugC,EAAAiB,YACA9hC,EAAAM,QAAA,oCACAugC,EAAAkB,eAAA/wB,EAAA5N,SAIAk+B,EAAAhrB,QAAA,IAGAua,GA0EAjX,4BAvEA,SAAAD,EAAAxB,GACA,IAAAmpB,EAAAp0B,EAAAq0B,QACA1Q,EAAA,GA2BA,OA1BAA,EAAAzqB,SAAAk7B,EAAAE,QAEAb,EAAA,CACAc,OAAA,OACAC,IAAA,uDACAt+B,KAAA,CACAuW,WAAAA,EACAxB,WAAAA,KAGA1Q,QAAA,SAAArE,EAAAu+B,EAAAC,EAAAlgC,GACAmvB,EAAA1tB,KAAAsf,MAAAoO,EAAAztB,GACAk+B,EAAAhrB,QAAAua,KAEAlpB,MAAA,SAAAqJ,EAAA2wB,EAAAC,EAAAlgC,GACA4/B,EAAA/qB,OAAAvF,GACA,MAAAA,EAAA2wB,OACAd,EAAAgB,YACA7hC,EAAAM,QAAA,6BAEAugC,EAAAiB,YACA9hC,EAAAM,QAAA,oCACAugC,EAAAkB,eAAA/wB,EAAA5N,SAIAytB,GA2CA5W,0BAxCA,SAAAH,EAAAC,EAAAJ,EAAAxB,GAEA,OAAA,IAAAoL,wBAAAye,eAAAloB,EAAAC,EAAAJ,EAAAxB,IAuCAkC,UApCA,SAAAP,EAAAH,EAAAxB,GACA,IAAAmpB,EAAAp0B,EAAAq0B,QA4BA,OA1BAZ,EAAA,CACAc,OAAA,OACAC,IAAA,gCACAt+B,KAAA,CACAuW,WAAAA,EACAxB,WAAAA,EACA2B,YAAAA,GAAA,MAGArS,QAAA,SAAArE,EAAAu+B,EAAAC,EAAAlgC,GACA4/B,EAAAhrB,QAAAlT,GACAy9B,EAAAoB,WACAjiC,EAAAM,QAAA,kDAEAqH,MAAA,SAAAqJ,EAAA2wB,EAAAC,EAAAlgC,GACA4/B,EAAA/qB,OAAAvF,GACA,MAAAA,EAAA2wB,OACAd,EAAAgB,YACA7hC,EAAAM,QAAA,6BAEAugC,EAAAiB,YACA9hC,EAAAM,QAAA,oCACAugC,EAAAkB,eAAA/wB,EAAA5N,SAIAk+B,EAAAE,aCtJA7hC,MAAA8gC,QAAA,yBAAA,CAAA,YAAA,KAAA,aAAA,QAAA,gBAAA,kBACA,SAAAC,EAAAxzB,EAAAlN,EAAA2gC,EAAAC,EAAAC,GAMA,SAAAC,EAAAoB,EAAAnoB,GACA,IAAAooB,EAAA,GAEAviC,QAAA0K,QAAA43B,EAAA,SAAAnF,EAAAxJ,GACA,IAAAlW,EAAA8kB,EAAApF,EAAAhwB,WACAsQ,IACAA,EATA,IAAAkG,wBAAA6e,QASAroB,IACAooB,EAAApF,EAAAhwB,WAAAsQ,GACA8M,SAAA4S,EAAAvgB,gBACAa,EAAAtQ,UAAAgwB,EAAAhwB,UACAsQ,EAAAlF,WAAA4kB,EAAA5kB,YAGAkF,EAAAtD,UAAA5W,KAAA45B,KAGA,IAEAhwB,EAFA8vB,EAAA,GAEA,IAAA9vB,KAAAo1B,EACAtF,EAAA15B,KAAAg/B,EAAAp1B,IAGA,OAAA8vB,EAgIA,MAAA,CACAnZ,wBA9HA,SAAAvG,EAAA0H,EAAAjC,GACA,IAAAwe,EAAA,GACArnB,EAAA,GAEAna,QAAA0K,QAAAsY,EAAA,SAAAO,EAAAoQ,GACA3zB,QAAA0K,QAAA6Y,EAAApJ,UAAA,SAAAwR,EAAA8V,GACAD,EAAAj+B,KAAAooB,EAAAuR,oBACA/iB,EAAA5W,KAAAooB,OAKA,IAAA+V,EAAAp0B,EAAAq0B,QACA1Q,EAAA,GAoCA,OAlCAA,EAAAzqB,SAAAk7B,EAAAE,QAEA,EAAAJ,EAAA38B,OACAk8B,EAAA,CACAc,OAAA,OACAC,IAAA,8CACAt+B,KAAA,CACA6F,WAAAkU,EACAhF,WAAA0M,EACA9K,UAAAqnB,KAGA35B,QAAA,SAAArE,EAAAu+B,EAAAC,EAAAlgC,GAEA4E,EAAAw6B,EAAA19B,EAAA2W,GAEA8W,EAAA1tB,KAAAsf,MAAAoO,EAAAvqB,GACAg7B,EAAAhrB,QAAAhQ,KAEAqB,MAAA,SAAAqJ,EAAA2wB,EAAAC,EAAAlgC,GACA4/B,EAAA/qB,OAAAvF,GACA,MAAAA,EAAA2wB,OACAd,EAAAgB,YACA7hC,EAAAM,QAAA,6BAEAugC,EAAAiB,YACA9hC,EAAAM,QAAA,oCACAugC,EAAAkB,eAAA/wB,EAAA5N,SAIAk+B,EAAAhrB,QAAA,IAGAua,GA8EAnP,2BA3EA,SAAA3U,EAAAoL,GACA,IAAAmpB,EAAAp0B,EAAAq0B,QACA1Q,EAAA,GA2BA,OA1BAA,EAAAzqB,SAAAk7B,EAAAE,QAEAb,EAAA,CACAc,OAAA,OACAC,IAAA,uDACAt+B,KAAA,CACA2J,UAAAA,EACAoL,WAAAA,KAGA1Q,QAAA,SAAArE,EAAAu+B,EAAAC,EAAAlgC,GACAmvB,EAAA1tB,KAAAsf,MAAAoO,EAAAztB,GACAk+B,EAAAhrB,QAAAua,KAEAlpB,MAAA,SAAAqJ,EAAA2wB,EAAAC,EAAAlgC,GACA4/B,EAAA/qB,OAAAvF,GACA,MAAAA,EAAA2wB,OACAd,EAAAgB,YACA7hC,EAAAM,QAAA,6BAEAugC,EAAAiB,YACA9hC,EAAAM,QAAA,oCACAugC,EAAAkB,eAAA/wB,EAAA5N,SAIAytB,GA+CA/O,yBA5CA,SAAAF,EAAA7H,EAAAhN,EAAAoL,EAAA+J,GAEA,OAAA,IAAAqB,wBAAA8e,cAAAzgB,EAAA7H,EAAAhN,EAAAoL,EAAA+J,IA2CA7H,UAxCA,SAAAuH,EAAA7U,EAAAoL,EAAAqJ,GACA,IAAA8f,EAAAp0B,EAAAq0B,QAgCA,OA9BA3hC,QAAA2H,OAAAqa,EAAAJ,GACA8f,EAAAhrB,QAAAsL,GAEA+e,EAAA,CACAc,OAAA,OACAC,IAAA,iCACAt+B,KAAA,CACA2J,UAAAA,EACAoL,WAAAA,EACAyJ,aAAAA,GAAA,MAGAna,QAAA,SAAArE,EAAAu+B,EAAAC,EAAAlgC,GACA4/B,EAAAhrB,QAAAlT,GACAy9B,EAAAoB,WACAjiC,EAAAM,QAAA,kDAEAqH,MAAA,SAAAqJ,EAAA2wB,EAAAC,EAAAlgC,GACA4/B,EAAA/qB,OAAAvF,GACA,MAAAA,EAAA2wB,OACAd,EAAAgB,YACA7hC,EAAAM,QAAA,6BAEAugC,EAAAiB,YACA9hC,EAAAM,QAAA,oCACAugC,EAAAkB,eAAA/wB,EAAA5N,SAKAk+B,EAAAE,aC1JA7hC,MAAA8gC,QAAA,sBAAA,CAAA,YAAA,KAAA,aAAA,gBAAA,cAAA,kBACA,SAAAC,EAAAxzB,EAAAlN,EAAA4gC,EAAA34B,EAAA44B,GACA,IAKAyB,EACAC,EACAC,EAPAC,EAAA/B,EAAA,6BAAA,GAAA,CACAgC,8BAAA,CAAAjB,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,wDACAiB,KAAA,CAAAlB,OAAA,OAAAC,IAAA,8BAAAjN,SAAA,KAmGA,MAAA,CACA1P,cAhFA,SAAA9b,EAAAkP,EAAAyqB,GACA,IAAA/R,EAAA,GACAyQ,EAAAp0B,EAAAq0B,QAcA,OAZAr0B,EAAAiD,IAAA,CACAlI,EAAA46B,SAAA55B,IAlBAA,EAmBAA,EAnBAkP,EAmBAA,EAnBAyqB,EAmBAA,EAlBAN,GAAAC,IAAAt5B,GAAAu5B,IAAArqB,IAAAyqB,IACAN,EAAA1B,EAAAkC,UAAA,gCAAAL,EAAA,CACAx5B,WAAAA,EACAkP,WAAAA,IAEAoqB,EAAAt5B,EACAu5B,EAAArqB,GAGAmqB,EASAl8B,YACAC,KAAA,SAAAjD,GACA,IAAA4F,EAAA5F,EAAA,GACA2W,EAAA3W,EAAA,GACA2/B,EAAA,IAAAxf,wBAAA8P,SAAArqB,EAAA2M,UAAA3M,EAAAg6B,QAAAjpB,GACA8W,EAAA1tB,KAAAsf,MAAAoO,EAAAkS,EAAAngB,OACA0e,EAAAhrB,QAAAua,KAGAA,EAAAzqB,SAAAk7B,EAAAE,QACA3Q,GAiEAxW,UA5CA,SAAAuI,EAAAzF,EAAA0H,GAEA,IAAAoe,EApBA,SAAAjgB,EAAA7F,EAAA0H,GAEA,IADA,IAAAoe,EAAA,GACA/f,EAAA,EAAAA,EAAAF,EAAAve,OAAAye,IAGA,IAFA,IAAAC,EAAAH,EAAAE,GAEA3e,EAAA,EAAAA,EAAA4e,EAAApJ,UAAAtV,OAAAF,IAAA,CACA,IAAAgnB,EAAApI,EAAApJ,UAAAxV,GAEAgnB,EAAAtiB,WAAAkU,EACAoO,EAAApT,WAAA0M,EACAoe,EAAA9/B,KAAAooB,GAKA,OAAA0X,EAKAC,CAAAtgB,EAAAzF,EAAA0H,GAEAgM,EAAA,GACAyQ,EAAAp0B,EAAAq0B,QAEA9f,EAAAghB,EAAAE,KAAA,CACA15B,WAAAkU,EACAhF,WAAA0M,EACAve,MAAA28B,IA6BA,OA1BA/1B,EAAAiD,IAAA,CACAlI,EAAA46B,SAAA1lB,GACAsE,EAAArb,WACAC,KAAA,SAAAjD,GACA,IAAA4F,EAAA5F,EAAA,GACA2W,EAAA3W,EAAA,GACA2/B,EAAA,IAAAxf,wBAAA8P,SAAArqB,EAAA2M,UAAA3M,EAAAg6B,QAAAjpB,GACA8W,EAAA1tB,KAAAsf,MAAAoO,EAAAkS,EAAAngB,OAEA0f,EAAAzR,EACA0R,EAAAplB,EACAqlB,EAAA3d,EAEAyc,EAAAhrB,QAAAua,GACAgQ,EAAAoB,WAAAjiC,EAAAM,QAAA,6CACA,SAAA0Q,GACA,MAAAA,EAAA2wB,OACAd,EAAAgB,YAAA7hC,EAAAM,QAAA,6BAEAugC,EAAAiB,YACA9hC,EAAAM,QAAA,+CACAugC,EAAAkB,eAAA/wB,EAAA5N,OAEAk+B,EAAA/qB,OAAAvF,KAGAswB,EAAAE,aCpGA7hC,MAAA8gC,QAAA,4BAAA,CAAA,YAAA,KAAA,gBACA,SAAAC,EAAAxzB,EAAA0zB,GAEA,IAAAuC,EAAAzC,EAAA,kCAAA,GAAA,CACAjgB,wBAAA,CAAAghB,OAAA,MAAAC,IAAA,uDACA35B,OAAA,CAAA05B,OAAA,OAAAC,IAAA,sCACA15B,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,sCACA0B,OAAA,CAAA3B,OAAA,OAAAC,IAAA,wCAuCA,SAAA15B,EAAA5E,EAAAigC,EAAAC,GACA1C,EAAA54B,OACAm7B,EACA,KACA//B,EACAigC,EACAC,EACA,4BAGA,SAAAv7B,EAAA3E,EAAAigC,EAAAC,GACA1C,EAAA74B,OACAo7B,EACA,KACA//B,EACAigC,EACAC,EACA,4BAcA,MAAA,CACA58B,UApEA,WACA,MAAA,IAoEA+Z,wBAhEA,SAAA1T,EAAAoL,GACA,OAAAyoB,EAAAkC,UAAA,0BAAAK,EAAA,CACAp2B,UAAAA,EACAoL,WAAAA,KA8DAnQ,OAAAA,EACAD,OAAAA,EACAnB,OAhBA,SAAAxD,EAAAigC,EAAAC,GACA1C,EAAAh6B,OACAu8B,EACA,KACA//B,EACAigC,EACAC,EACA,CAAAC,yBAAAngC,EAAAmgC,0BACA,6BASAlpB,UA7DA,SAAAjX,EAAAogC,GACA,IAAAlC,EAAAp0B,EAAAq0B,QAEA,SAAA95B,EAAA6xB,GACAgI,EAAAhrB,QAAAgjB,GAGA,SAAA3xB,EAAA9B,GACAy7B,EAAA/qB,OAAA1Q,GAaA,OAVAjG,QAAA2H,OAAAnE,EAAAogC,GACAlC,EAAAhrB,QAAAlT,IAEAA,EAAAmgC,yBACAx7B,EAEAC,GAFA5E,EAAAqE,EAAAE,GAMA25B,EAAAE,aC3CA7hC,MAAA8gC,QAAA,oBAAA,CAAA,YAAA,KAAA,gBACA,SAAAC,EAAAxzB,EAAA0zB,GAEA,IAOAzb,EACAse,EARAC,EAAAhD,EAAA,2BAAA,GAAA,CACA/W,OAAA,CAAA8X,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,+BACA35B,OAAA,CAAA05B,OAAA,OAAAC,IAAA,+BACA15B,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,+BACA0B,OAAA,CAAA3B,OAAA,OAAAC,IAAA,iCAYA,SAAAx1B,EAAA02B,GAMA,OALAzd,IAAAyd,IACAzd,EAAAyb,EAAAkC,UAAA,SAAAY,GACAD,EAAA,MAGAte,EAmFA,MAAA,CACAze,UAhGA,WACA,MAAA,CACA8rB,MAAA,IA+FAtmB,YAAAA,EACAkZ,sBAlFA,SAAAwd,EAAAvd,GACA,GAAAoe,IAAAb,EACA,OAAAa,EAGAE,EAAAz3B,EAAA02B,GACAa,EAAA,GACA,IAAAnC,EAAAp0B,EAAAq0B,QAcA,OAbAkC,EAAAr9B,SAAAk7B,EAAAE,QAEAmC,EAAAv9B,SAAAC,KAAA,SAAAjD,GACAxD,QAAA0K,QAAAlH,EAAA,SAAAzC,EAAAD,GACAC,EAAAijC,WAAAjjC,EAAA0kB,mBAAAA,GACAoe,EAAAtgC,KAAAxC,KAGA2gC,EAAAhrB,QAAAmtB,IACA,SAAAlpB,GACA+mB,EAAA/qB,OAAAgE,KAGAkpB,GA8DAz7B,OA3DA,SAAA5E,EAAAigC,EAAAC,GACA1C,EAAA54B,OACA07B,EACAve,EACA/hB,EAKA,SAAAygC,GACAjD,EAAAkD,eAAAL,EAAAI,GAEAR,GACAA,EAAAQ,IAPAP,EACA,qBAqDAv7B,OA1CA,SAAA3E,EAAAigC,EAAAC,GACA1C,EAAA74B,OACA27B,EACAve,EACA/hB,EAKA,SAAAygC,GACAjD,EAAAmD,cAAAN,EAAAI,EAAA,oBAEAR,GACAA,EAAAQ,IAPAP,EACA,qBAoCA18B,OAzBA,SAAAxD,EAAAigC,EAAAC,GACA1C,EAAAh6B,OACA88B,EACAve,EACA/hB,EAMA,WACAw9B,EAAAoD,cAAAP,EAAArgC,EAAA0E,GAAA,oBAEAu7B,GACAA,KARAC,EACA,CAAAje,iBAAAjiB,EAAAiiB,kBACA,yBCjGA1lB,MAAA8gC,QAAA,cAAA,CAAA,YAAA,KAAA,gBAAA,oBACA,SAAAC,EAAAxzB,EAAA0zB,EAAA1qB,GAEA,MAAA+tB,EAAAvD,EAAA,yBAAA,GAAA,CACAna,QAAA,CAAAkb,OAAA,MAAAC,IAAA,0BACA/X,OAAA,CAAA8X,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,sBACA15B,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,sBACA35B,OAAA,CAAA05B,OAAA,MAAAC,IAAA,0BACA0B,OAAA,CAAA3B,OAAA,SAAAC,IAAA,0BACApU,cAAA,CAAAmU,OAAA,OAAAC,IAAA,wDAGA,IAAArY,EAwFA,SAAA6a,EAAAC,GACA,OAAAA,GAQAA,EAAA1Y,QAAA,EACA3qB,MAAAqjC,EAAAzY,aACAyY,EAAAzY,UAAA3qB,SAAA6U,QAAA,OAAA8I,IAAAylB,EAAAzY,UAAA,WAAAxqB,UAEAJ,MAAAqjC,EAAAxY,WACAwY,EAAAxY,QAAA5qB,SAAA6U,QAAA,OAAA8I,IAAAylB,EAAAxY,QAAA,WAAAzqB,UAIAijC,GAhBA,CACA1Y,QAAA,EACAC,UAAA,KACAC,QAAA,KACAC,MAAA,GAeA,SAAAwY,EAAAD,GACA,OAAAA,EAAA1Y,QAGA1qB,OAAAojC,EAAAzY,WAAAzqB,WACAojC,EAAAtjC,OAAAojC,EAAAzY,WAAA9V,QAAA,OACAuuB,EAAAzY,UAAA3qB,OAAAojC,EAAAzY,WAAA4Y,KAAAD,EAAA,YAEAF,EAAAzY,UAAA,KAEA3qB,OAAAojC,EAAAxY,SAAA1qB,WACAojC,EAAAtjC,OAAAojC,EAAAxY,SAAA/V,QAAA,OACAuuB,EAAAxY,QAAA5qB,OAAAojC,EAAAxY,SAAA2Y,KAAAD,EAAA,YAEAF,EAAAxY,QAAA,KAIAwY,GAhBA,KAEA,IAOAE,EAyDA,MAAA,CACA39B,UAhLA,WAEA,OAAAwG,EAAA,SAAAoJ,EAAAC,GACA,IAAAjQ,EAAA,CACAwB,GAAA,KACA8D,UAAA,EACA8e,kBAAA,CAAA,IACA6Z,OAAA,KACAxW,UAAA,MAGA,IAAAyW,EAAAtuB,EAAAnN,kBACAy7B,EAAAn+B,KAAA,SAAAo+B,GACAn+B,EAAAwkB,iBAAA2Z,EAAA38B,GACAwO,EAAAhQ,IACA,SAAAuf,GACAtP,EAAAsP,QAiKAU,QAfA,SAAAze,GACA,OAAA84B,EAAAkC,UAAA,UAAAmB,EAAA,CAAAn8B,GAAAA,KAeA6hB,OAZA,SAAAphB,GAMA,OALA8gB,IAAA9gB,IACA8gB,EAAAuX,EAAAkC,UAAA,SAAAmB,EAAA,CACAS,SAAA,8CAGArb,GAOArhB,OAzCA,SAAA1B,GACA,OAAAs6B,EAAA+D,WACA,SACAV,EACA39B,IAsCAM,OAnCA,SAAAg+B,GAEA,OADAvb,EAAA,KACAuX,EAAAiE,aACA,SACAZ,EACA,CAAAn8B,GAAA88B,KA+BA78B,OA5BA,SAAAzB,GAEA,OADA+iB,EAAA,KACAuX,EAAAkE,oBACA,SACAb,EACA,CAAAn8B,GAAAxB,EAAAwB,IACA3G,yBAAAmF,KAuBA+kB,sBA/HA,SAAA/kB,GA4BA,OA3BAA,EAAAy+B,aAAA,GAEAz+B,EAAAokB,mBAAA,IAAApkB,EAAAokB,kBAAAjmB,SACA6B,EAAAokB,kBAAA,IAGAtpB,EAAAkJ,QAAAhE,EAAAokB,kBAAA,SAAAa,GACAA,EAAAzH,OAAAogB,EAAA3Y,EAAAzH,QACAyH,EAAAxH,QAAAmgB,EAAA3Y,EAAAxH,SACAwH,EAAAvH,UAAAkgB,EAAA3Y,EAAAvH,WACAuH,EAAAtH,SAAAigB,EAAA3Y,EAAAtH,UACAsH,EAAArH,OAAAggB,EAAA3Y,EAAArH,QACAqH,EAAApH,SAAA+f,EAAA3Y,EAAApH,UACAoH,EAAAM,OAAAqY,EAAA3Y,EAAAM,UAGAvlB,EAAA0kB,yBACA1kB,EAAA0kB,uBAAA,IAEA1kB,EAAAkmB,sBAAAprB,EAAAsK,KAAApF,EAAA0kB,uBAAA,CAAAvE,qBAAA,KAAA3e,GACAxB,EAAAomB,sBAAAtrB,EAAAsK,KAAApF,EAAA0kB,uBAAA,CAAAvE,qBAAA,KAAA3e,GACAxB,EAAAsmB,sBAAAxrB,EAAAsK,KAAApF,EAAA0kB,uBAAA,CAAAvE,qBAAA,KAAA3e,GACAxB,EAAAwmB,sBAAA1rB,EAAAsK,KAAApF,EAAA0kB,uBAAA,CAAAvE,qBAAA,KAAA3e,GACAxB,EAAA0mB,sBAAA5rB,EAAAsK,KAAApF,EAAA0kB,uBAAA,CAAAvE,qBAAA,KAAA3e,GACAxB,EAAA4mB,sBAAA9rB,EAAAsK,KAAApF,EAAA0kB,uBAAA,CAAAvE,qBAAA,KAAA3e,GACAxB,EAAA8mB,sBAAAhsB,EAAAsK,KAAApF,EAAA0kB,uBAAA,CAAAvE,qBAAA,KAAA3e,GAEAxB,GAoGA2lB,sBAlKA,SAAA3lB,GA0BA,OAzBAA,EAAAy+B,aAAA,KAEAz+B,EAAAokB,mBAAA,IAAApkB,EAAAokB,kBAAAjmB,SACA6B,EAAAokB,kBAAA,IAGAtpB,EAAAkJ,QAAAhE,EAAAokB,kBAAA,SAAAa,GACAA,EAAAzH,OAAAsgB,EAAA7Y,EAAAzH,QACAyH,EAAAxH,QAAAqgB,EAAA7Y,EAAAxH,SACAwH,EAAAvH,UAAAogB,EAAA7Y,EAAAvH,WACAuH,EAAAtH,SAAAmgB,EAAA7Y,EAAAtH,UACAsH,EAAArH,OAAAkgB,EAAA7Y,EAAArH,QACAqH,EAAApH,SAAAigB,EAAA7Y,EAAApH,UACAoH,EAAAM,OAAAuY,EAAA7Y,EAAAM,UAGAvlB,EAAA0+B,qBAAA,GACA1+B,EAAAkmB,uBAAAlmB,EAAA0+B,qBAAA7hC,KAAAmD,EAAAkmB,uBACAlmB,EAAAomB,uBAAApmB,EAAA0+B,qBAAA7hC,KAAAmD,EAAAomB,uBACApmB,EAAAsmB,uBAAAtmB,EAAA0+B,qBAAA7hC,KAAAmD,EAAAsmB,uBACAtmB,EAAAwmB,uBAAAxmB,EAAA0+B,qBAAA7hC,KAAAmD,EAAAwmB,uBACAxmB,EAAA0mB,uBAAA1mB,EAAA0+B,qBAAA7hC,KAAAmD,EAAA0mB,uBACA1mB,EAAA4mB,uBAAA5mB,EAAA0+B,qBAAA7hC,KAAAmD,EAAA4mB,uBACA5mB,EAAA8mB,uBAAA9mB,EAAA0+B,qBAAA7hC,KAAAmD,EAAA8mB,uBAEA9mB,GAyIAykB,4BAtIA,SAAAzkB,EAAAmgB,GAEA,OAAArlB,EAAAsK,KAAApF,EAAA0kB,uBAAA,CAAAvE,qBAAAA,KAAA3e,IAqIAwlB,cAzDA,SAAA2X,EAAAC,GACA,OAAAtE,EAAAuE,qBACA,gBACAlB,EACA,CAAAn8B,GAAAm9B,GACA,CACAC,sBAAAA,SCpJAvlC,MAAA8gC,QAAA,sBAAA,CAAA,YAAA,KAAA,gBACA,SAAAC,EAAAxzB,EAAA0zB,GAEA,MAAAwE,EAAA1E,EAAA,kCAAA,GAAA,CACAna,QAAA,CAAAkb,OAAA,MAAAC,IAAA,mCACA/X,OAAA,CAAA8X,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,+BACA15B,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,+BACA35B,OAAA,CAAA05B,OAAA,MAAAC,IAAA,mCACA0B,OAAA,CAAA3B,OAAA,SAAAC,IAAA,mCACAlb,mBAAA,CAAAib,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,4DACAhc,gBAAA,CAAA+b,OAAA,MAAAC,IAAA,oEAGA,IAAA2D,EA4CA,SAAA1b,EAAAphB,GAIA,OAHA88B,IAAA98B,IACA88B,EAAAzE,EAAAkC,UAAA,SAAAsC,EAAA,KAEAC,EA4BA,MAAA,CACA3+B,UA3EA,WAEA,MAAA,CACAoB,GAAA,KACAgC,KAAA,GACA2c,qBAAA,EACAb,aAAA,KAsEAW,QA1CA,SAAAze,GACA,OAAA84B,EAAAkC,UAAA,UAAAsC,EAAA,CAAAt9B,GAAAA,KA0CA6hB,OAAAA,EACA3hB,OApEA,SAAA1B,GACA,OAAAs6B,EAAA+D,WACA,SACAS,EACA9+B,IAiEAM,OA9DA,SAAAkB,GAEA,OADAu9B,EAAA,KACAzE,EAAAiE,aACA,SACAO,EACA,CAAAt9B,GAAAA,KA0DAC,OAvDA,SAAAzB,GAEA,OADA++B,EAAA,KACAzE,EAAAkE,oBACA,SACAM,EACA,CAAAt9B,GAAAxB,EAAAwB,IACA3G,yBAAAmF,KAkDAkgB,mBAXA,SAAAf,GACA,OAAAmb,EAAAkC,UAAA,qBAAAsC,EAAA,CAAAt9B,GAAA2d,KAWAyO,iBAjCA,SAAA3rB,EAAAke,GACA,GAAA,MAAAA,EAEA,OAAAkD,EAAAphB,GAGA,CACA,IAAA+4B,EAAAp0B,EAAAq0B,QACA+D,EAAA,GACAA,EAAAl/B,SAAAk7B,EAAAE,QAEA,IAAAttB,EAAAyV,EAAAphB,GAMA,OALA2L,EAAA9N,SAAAC,KAAA,WACAi/B,EAAAniC,KAAAsf,MAAA6iB,EAAAlkC,EAAAkoB,OAAApV,EAAA,CAAAuS,qBAAAA,KACA6a,EAAAhrB,QAAAgvB,KAGAA,IAiBA5f,gBA7CA,SAAAD,GACA,OAAAmb,EAAAkC,UAAA,kBAAAsC,EAAA,CAAAt9B,GAAA2d,SCtDA9lB,MAAA8gC,QAAA,oBAAA,CAAA,KAAA,YAAA,gBAAA,sBACA,SAAAvzB,EAAAwzB,EAAAE,EAAAtwB,GACA,MAAAi1B,EAAA7E,EAAA,iCAAA,GAAA,CACAna,QAAA,CAAAkb,OAAA,MAAAC,IAAA,kCACA9P,cAAA,CAAA6P,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,8CACAlU,qBAAA,CAAAiU,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,sDACA15B,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,8BACA35B,OAAA,CAAA05B,OAAA,MAAAC,IAAA,kCACA0B,OAAA,CAAA3B,OAAA,SAAAC,IAAA,kCACArN,MAAA,CAAAoN,OAAA,MAAAC,IAAA,6CACA7S,SAAA,CAAA4S,OAAA,OAAAhN,SAAA,EAAAiN,IAAA,gDACA8D,WAAA,CAAA/D,OAAA,MAAAC,IAAA,yBACA+D,YAAA,CAAAhE,OAAA,MAAAC,IAAA,2BACAgE,OAAA,CAAAjE,OAAA,OAAAC,IAAA,gDA6EA,SAAAiE,EAAAr/B,GACAgK,EAAA+B,cACA/B,EAAAqC,IAAA,qBAAArM,EAAAs/B,KACAt1B,EAAAqC,IAAA,sBAAArM,EAAAu/B,MACAv/B,EAAAue,aACAvU,EAAAqC,2BAAArM,EAAAue,oBAAAve,EAAAw/B,QACAx1B,EAAAqC,2BAAArM,EAAAue,qBAAAve,EAAAy/B,WAkHA,SAAAnU,EAAA7D,GACA,IAAAuT,EAAAp0B,EAAAq0B,QACA1Q,EAAA,GAQA,OAPAA,EAAAzqB,SAAAk7B,EAAAE,QAEAZ,EAAAkC,UAAA,gBAAAyC,EAAA,CAAAxX,UAAAA,IAAA3nB,SAAAC,KACA,SAAAjD,GACAk+B,EAAAhrB,QAAAlV,EAAA+a,IAAA/Y,EAAA4iC,KACA1E,EAAA/qB,QAEAsa,EAwDA,IAAAoV,EAAA,KA2BA,SAAAC,EAAA5/B,GAQA,OAPAA,EAAA6/B,aAAAplC,OAAAuF,EAAA6/B,cAAAvwB,QAAA,OAAA1U,SACA,WAAAoF,EAAA8/B,QAAA,MAAA9/B,EAAA+/B,UACA//B,EAAA8/B,OAAA,MAAA9/B,EAAA+/B,gBAGA//B,EAAA+/B,QAEAllC,yBAAAmF,GAUA,SAAA0/B,EAAAM,GAMA,OALA,MAAAA,EAAAF,QAAAE,EAAAF,OAAAG,WAAA,SAEAD,EAAAD,QAAAC,EAAAF,OAAAI,UAAA,GACAF,EAAAF,OAAA,UAEAE,EAGA,MAAA,CACA5/B,UAtMA,SAAAyW,EAAA0H,GACA,OAAA3X,EAAA,SAAAoJ,EAAAC,GACAqqB,EAAAkC,UAAA,cAAAyC,EAAA,CAAAz9B,GAAA+c,IAAAze,SAAAC,KACA,SAAAwQ,GACA,IApCAvQ,EAoCAA,EAAA,CACAwB,GAAA,KACAimB,UAAA,KACA5Q,WAAAA,EACA0H,WAAAA,EACA4hB,MAAA5vB,EAAA/M,KACAolB,yBAAA,EACAiX,aAAA,IAAA7kC,KACAolC,MAAA,IACAC,KAAA,MACAC,SAAA,IAEAC,QAAA,IAGAd,QAAA,KACAe,OAAA,IACAC,SAAA,IACAC,SAAA,KAtDA1gC,EAwDAA,EAvDAgK,EAAA+B,eACAuzB,EAAAt1B,EAAA2C,IAAA,yBAEA3M,EAAAs/B,IAAAA,IAEAC,EAAAv1B,EAAA2C,IAAA,0BAEA3M,EAAAu/B,KAAAA,IAEAC,EAAAx1B,EAAA2C,2BAAA3M,EAAAue,wBAEAve,EAAAw/B,OAAAA,IAEAC,EAAAz1B,EAAA2C,2BAAA3M,EAAAue,yBAEAve,EAAAy/B,QAAAA,IAyCAzvB,EAAAhQ,IAEAiQ,MA4KAoZ,eA5TA,WACA,IAAArpB,EAAA,CACAwV,SAAA,IAAAxa,KAAAP,SAAAy8B,OAAA,EAAA,EAAA,GACAt8B,OAAA,IAAAI,KAAAP,SAAAy8B,OAAA,EAAA,IACAoI,IAAA,GACAC,KAAA,GACAoB,YAAA,IACAC,UAAA,IACAlW,wBAAA,EACAC,wBAAA,EACAC,yBAAA,EACApB,YAAA,IAGA,IAaAoX,EAMA,OAnBA52B,EAAA+B,eACAuzB,EAAAt1B,EAAA2C,IAAA,yBAEA3M,EAAAs/B,IAAAA,IAEAC,EAAAv1B,EAAA2C,IAAA,0BAEA3M,EAAAu/B,KAAAA,IAEAoB,EAAA32B,EAAA2C,IAAA,iCAEA3M,EAAA2gC,YAAAA,IAEAC,EAAA52B,EAAA2C,IAAA,+BAEA3M,EAAA4gC,UAAAA,IAIA5gC,GA4RAsrB,cAAAA,EACApE,qBA/GA,SAAA3I,GACA,IAAAyc,EAAAp0B,EAAAq0B,QACA1Q,EAAA,GAQA,OAPAA,EAAAzqB,SAAAk7B,EAAAE,QAEAZ,EAAAkC,UAAA,uBAAAyC,EAAA,CAAA1gB,WAAAA,IAAAze,SAAAC,KACA,SAAAjD,GACAk+B,EAAAhrB,QAAAlV,EAAA+a,IAAA/Y,EAAA4iC,KACA1E,EAAA/qB,QAEAsa,GAsGAtK,QAtIA,SAAAze,GACA,OAAAoF,EAAA,SAAAoJ,EAAAC,GACAqqB,EAAAkC,UAAA,UAAAyC,EAAA,CAAAz9B,GAAAA,IAAA1B,SAAAC,KACA,SAAAjD,GACAkT,EAAA0vB,EAAA5iC,KACAmT,MAkIAvO,OApGA,SAAA1B,EAAA+8B,EAAAC,GAGA,OAFAqC,EAAAr/B,GACAggC,EAAAJ,EAAA5/B,GACAs6B,EAAA54B,OACAu9B,EACA,KACAe,EACAjD,EACAC,IA6FAv7B,OA1FA,SAAAzB,GAGA,OAFAq/B,EAAAr/B,GACAggC,EAAAJ,EAAA5/B,GACAs6B,EAAAkE,oBACA,SACAS,EACA,CAAAz9B,GAAAw+B,EAAAx+B,IACAw+B,IAoFA1/B,OArEA,SAAAkB,GACA,OAAA84B,EAAAiE,aACA,SACAU,EACA,CAAAz9B,GAAAA,KAkEAusB,MA7DA,WAKA,OAHA4R,EADAA,GACArF,EAAAkC,UAAA,QAAAyC,EAAA,IAGAU,GAyDA9W,2BAtDA,SAAA7oB,EAAA4oB,GACAA,EAYA5oB,EAAA6gC,SAAA7gC,EAAAynB,WAXAznB,EAAA6gC,SAAA,KACA7gC,EAAA8gC,OAAA,KACA9gC,EAAA+gC,QAAA,KACA/gC,EAAAghC,IAAA,KACAhhC,EAAAihC,OAAA,KACAjhC,EAAAkhC,GAAA,KACAlhC,EAAAmhC,GAAA,KACAnhC,EAAAohC,KAAA,KACAphC,EAAAqhC,QAAA,OA6CA9Y,SApFA,SAAAvoB,GAEA,OADAggC,EAAAJ,EAAA5/B,GACAs6B,EAAAuE,qBACA,WACAI,EACA,GACAe,EACA,KACA,MACA,IA4EA5X,gBAjLA,SAAApoB,EAAAynB,GACA,OAAA7gB,EAAA,SAAAoJ,EAAAC,IACAjQ,EAAAynB,UAAAA,GAEA7gB,EAAAiD,IAAA,CACAyhB,EAAAtrB,EAAAynB,WAAA3nB,SACAw6B,EAAAkC,UAAA,aAAAyC,EAAA,CAAAz9B,GAAAimB,MACA1nB,KAAA,SAAAjD,GACA,IAAAuuB,EAAAvuB,EAAA,GACAia,EAAAja,EAAA,GACAia,IACA/W,EAAAshC,KAAAvqB,EAAAwqB,iBACAvhC,EAAAwhC,SAAAzqB,EAAAyqB,SACAxhC,EAAAyhC,QAAA,MAAA1qB,EAAA2qB,OAAA,IAAA,MAEArW,IACAsW,EAAA7mC,EAAAsK,KAAAimB,EAAA,CAAAzD,QAAA,OAEA/Q,EAAA7W,EAAA6W,WACA0H,EAAAve,EAAAue,WAEAzjB,EAAA8mC,OAAA5hC,EAAA2hC,GAEA3hC,EAAA6W,WAAAA,EACA7W,EAAAue,WAAAA,EACAve,EAAA6/B,aAAA,IAAA7kC,MAGAgV,EAAAhQ,IACAiQ,GAEAD,EAAAhQ,MAmJAqoB,iBA7NA,SAAAroB,EAAAue,GACA,OAAA3X,EAAA,SAAAoJ,EAAAC,GACAqqB,EAAAkC,UAAA,cAAAyC,EAAA,CAAAz9B,GAAA+c,IAAAze,SAAAC,KACA,SAAAwQ,GACAvQ,EAAAue,WAAAA,EACAve,EAAAmgC,MAAA5vB,EAAA/M,KACAwM,EAAAhQ,IACAiQ,MAuNAqa,YA3QA,SAAAtqB,GACA,IAAAggC,GA1BAhgC,EA0BAA,EAbAnF,yBAZA,CACAgnC,YAAApnC,OAAAuF,EAAAwV,UAAAlG,QAAA,OAAA1U,SACAknC,UAAArnC,OAAAuF,EAAApF,QAAA0U,QAAA,OAAA1U,SACA0kC,IAAAt/B,EAAAs/B,IACAC,KAAAv/B,EAAAu/B,KACAoB,YAAA3gC,EAAA2gC,YACAC,UAAA5gC,EAAA4gC,UACAlW,wBAAA1qB,EAAA0qB,wBACAC,wBAAA3qB,EAAA2qB,wBACAC,yBAAA5qB,EAAA4qB,yBACApB,YAAAxpB,EAAAwpB,eAiBA,OAZAxpB,EAWAA,EAVAgK,EAAA+B,cACA/B,EAAAqC,IAAA,qBAAArM,EAAAs/B,KACAt1B,EAAAqC,IAAA,sBAAArM,EAAAu/B,MACAv1B,EAAAqC,IAAA,6BAAArM,EAAA2gC,aACA32B,EAAAqC,IAAA,2BAAArM,EAAA4gC,YAOAtG,EAAAuE,qBACA,SACAI,EACA,GACAe,EACA,KACA,MACA,QCzFA3mC,MAAA8gC,QAAA,+BAAA,CAAA,YAAA,KAAA,aAAA,UAAA,gBAAA,kBAAA,mBAAA,cAAA,4BAAA,cACA,SAAAC,EAAAxzB,EAAAlN,EAAAoN,EAAAwzB,EAAAC,EAAA35B,EAAAe,EAAAqZ,EAAAtL,GAgBA,IAAAqyB,EAAA3H,EAAA,qCAAA,GAAA,CACA4H,MAAA,CAAA7G,OAAA,MAAAhN,SAAA,GACA1sB,OAAA,CAAA05B,OAAA,OAAAC,IAAA,yCACA15B,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,yCACA0B,OAAA,CAAA3B,OAAA,OAAAC,IAAA,yCACAxgB,4BAAA,CAAAugB,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,gEAuHA,MAAA,CACAh7B,UApFA,SAAAuC,EAAA8D,EAAAoL,GACA,IAAAmtB,EAAA,CACAvvB,4BAAA,EACAwyB,qBAAA,EACAC,qBAAA,EACAC,mBAAA,KACA17B,UAAAA,EACAoL,WAAAA,EACAlP,WAAAA,EACA0M,UAAA5U,SAAA6U,QAAA,OAAA1U,SACAuqB,QAAA,EACAzZ,QAAA,CACA4lB,kBAAA7qB,IAIAzG,EAAA,IAAAid,wBAAAmlB,kBAAA1oC,GACAsG,EAAAqiC,SAAArD,GAEA,IAAAhE,EAAAp0B,EAAAq0B,QAqBA,OApBAj7B,EAAAF,SAAAk7B,EAAAE,QAEAt0B,EAAAiD,IAAA,CACAlI,EAAA46B,SAAA55B,GACAqY,EAAAb,wBAAA1T,EAAAoL,GAAA/R,SACA4P,EAAA4yB,6BAAA3/B,EAAAkP,KACA9R,KAAA,SAAAjD,GACAkD,EAAAuiC,kBAAAzlC,EAAA,GAAA4/B,QACA18B,EAAAwiC,eAAA,EACAxiC,EAAA0L,QAAAslB,6CAAAl0B,EAAA,GAAAkb,YACAhY,EAAA0L,QAAAqlB,uCAAA,EACA/wB,EAAA2X,eAAA7a,EAAA,GAAAib,WAAA,KAAAjR,EAAA,gBAAAA,CAAAhK,EAAA,GAAAkb,aAAA,IACAhY,EAAA0L,QAAA6kB,sCAAAzzB,EAAA,GAAA2lC,kBACAziC,EAAA0L,QAAAglB,sCAAA5zB,EAAA,GAAA4lC,kBAEA1H,EAAAhrB,QAAAhQ,IACA,SAAA0K,GACAswB,EAAA/qB,OAAAvF,KAGA1K,GA6CA0B,OA1CA,SAAA5E,EAAAigC,EAAAC,GAEAgD,EAAAljC,EAAA6lC,OAAAjpC,GAEA4gC,EAAA54B,OACAqgC,EACA,KACA/B,EACAjD,EACAC,IAkCAv7B,OA9BA,SAAA3E,EAAAigC,EAAAC,GAEAgD,EAAAljC,EAAA6lC,OAAAjpC,GAEA4gC,EAAA74B,OACAsgC,EACA,KACA/B,EACAjD,EACAC,EACA,gCAqBA18B,OAlBA,SAAAxD,EAAAigC,EAAAC,GAEAgD,EAAAljC,EAAA6lC,OAAAjpC,GAEA4gC,EAAAh6B,OACAyhC,EACA,KACA/B,EACAjD,EACAC,EACA,KACA,gCAQApiB,4BAzHA,SAAAjY,EAAA8D,EAAAoL,GACA,IAAAmpB,EAAAp0B,EAAAq0B,QACA1Q,EAAA,GA4BA,OA1BA3jB,EAAAiD,IAAA,CACAywB,EAAAkC,UAAA,8BAAAuF,EAAA,CACAt7B,UAAAA,EACAoL,WAAAA,IACA/R,SAEAkb,EAAAb,wBAAA1T,EAAAoL,GAAA/R,SACA4P,EAAA4yB,6BAAA3/B,EAAAkP,KACA9R,KAAA,SAAAjD,GAEAxD,QAAA0K,QAAAlH,EAAA,GAAA,SAAAkiC,GACA,IAAAh/B,EAAA,IAAAid,wBAAAmlB,kBAAA1oC,GACAsG,EAAAqiC,SAAArD,GACAh/B,EAAA2X,eAAA7a,EAAA,GAAAib,WAAA,KAAAjR,EAAA,gBAAAA,CAAAhK,EAAA,GAAAkb,aAAA,IAIAuS,EAAA1tB,KAAAmD,KAGAg7B,EAAAhrB,QAAAua,IACA,SAAA7f,GACAswB,EAAA/qB,OAAAvF,KAGA6f,EAAAzqB,SAAAk7B,EAAAE,QACA3Q,OCtDAjxB,QAAAC,OAAA,iBAAA,IAAA0T,UAAA,gBAAA,SAAAtO,GACA,MAAA,CACA0O,SAAA,IACAG,KAAA,SAAA9M,EAAA+rB,EAAA/e,GACAhN,EAAA/G,IAAA,2BAAA,WACAipC,QAAAC,IAAA,4BCNAxpC,MAAAmE,SAAA,qBAAA,IACAyP,UAAA,eAAA,CAAA,WAAA,qBACA,SAAAC,EAAA41B,GAEA,MAAA,CACAz1B,SAAA,KACAC,QAAA,WACAy1B,QAAA,WAGA,GAAAzpC,QAAA0pC,YAAAhiB,OAAAiiB,YACA,MAAA,IAAAC,MAAA,sDAGA,OAAAC,IAIA,SAAAA,EAAAziC,EAAA0iC,EAAAC,EAAAlX,GAEA,IAmDAmX,EAAAC,EAGAC,EAiBAC,EAAAtX,EAAAzrB,EAmCAgjC,EA1GAC,EAAArqC,QAAAkC,OACA,CAAAnB,MAAA+oC,EAAAx/B,QACAk/B,EAAAW,YAAA,GACA/iC,EAAAkjC,MAAAP,EAAAQ,cACAnjC,EAAAkjC,MAAAP,EAAAS,mBAGAL,EA4BA,SAAAL,EAAAO,GAKAL,EAFA,aAAAF,EAAA,GAAAW,QAEA/iB,OAAAiiB,WAAAe,aAAAZ,EAAA,GAAAO,IAEAP,EAAA9mC,KAAA,IACA,IAAA0kB,OAAAiiB,WAAA,SAAAgB,GACAb,EAAAc,OAAAD,IACAN,IAGA,OAAAL,EAzCAa,CAAAf,EAAAO,GA4CAL,EAzCAG,EAyCAF,EAxCAF,EAAAQ,cAAAR,EAAAS,iBAwCApjC,EAvCAA,EAwCA6iC,IAEAC,EAAAtW,OAAAkX,KAAApjB,OAAAiiB,WAAAxnC,UACAiF,EAAA6D,OAAAg/B,EACA,SAAAc,EAAA5/B,GACAnL,QAAAgrC,SAAAD,IACAb,EAAAx/B,QAAA,SAAA5J,GACAiqC,EAAA9pC,eAAAH,KAEAqK,GAAA4/B,EAAAjqC,KAAAqK,EAAArK,IAIAkpC,EAAAiB,UAAAnqC,EAAAiqC,EAAAjqC,SAVA,IAgBAqpC,EAxDAA,EAwDA/iC,EAxDAA,GAwDAyrB,EAxDAA,KA4DAA,EAAAnd,YAAAnS,KAAA,SAAAxC,GACA,GAAAf,QAAA0pC,YAAA3oC,IAAA,OAAAA,EACA,MAAA,GACA,GAAAf,QAAAgrC,SAAAjqC,IAAAf,QAAA60B,QAAA9zB,GACA,MAAA,IAAA6oC,MAAA,6DAEA,OAAA7oC,IAMA8xB,EAAAzd,QAAA,WAGA,IAAA81B,EAAArY,EAAAxd,YAAA,GACA80B,EAAAgB,SAAAD,IAKAf,EAAA3X,GAAA,SAAA,SAAA4Y,GACA,IAAAlgC,EAAAkgC,EAAAC,WACAngC,IAAA2nB,EAAAxd,YACAjO,EAAAkkC,WAAA,WACAzY,EAAAH,cAAAxnB,QAMAk/B,EAzFAD,EAyFAoB,EAzFAxB,EAAAyB,UAyFApkC,EAzFAA,EA0FAmkC,GAEAnkC,EAAA6D,OAAAsgC,EAAA,SAAAE,EAAAC,GAEAD,IAAAC,GACA93B,EAAA,WACAw2B,EAAAzhC,cA5FAvB,EAAA/G,IAAA,aAAA,SAAAC,EAAAkK,GACA,IAAAxK,QAAA2rC,WAAAnhC,GAGA,MAAA,IAAAo/B,MAAA,qDAFAp/B,EAAA2/B,KAOAnqC,QAAA2rC,WAAAtB,EAAAuB,SACAvB,EAAAuB,OAAAzB,OCjDApqC,MAAA4T,UAAA,eACA,WACA,MAAA,CACAI,SAAA,IACAC,QAAA,UACAC,SAAA,EACA7M,MAAA,CAAAykC,YAAA,YACA/Y,SAAA,EACA5rB,SACA,sfCXAnH,MAAA4T,UAAA,kBAAA,CAAA,UAAA,WAAA,kBACA,SAAApG,EAAAqG,EAAAk4B,GACA,IAAAC,EAAAD,EAAAC,iBAgBA,SAAAC,EAAAnrC,GACA,OAAAA,EAAAiyB,QAAA,QAAA,UAGA,MAAA,CACA/e,SAAA,IACAC,QAAA,UACA5M,MAAA,CACA26B,OAAA,WACAna,OAAA,aAEAkL,SAAA,EACA5rB,SAAA,yCACAgN,KAAA,SAAA9M,EAAA6kC,EAAA73B,EAAAC,GACAT,EAAA,WACA,MAAAs4B,EAAA,IAAAC,QAAAC,OAAA,CACAC,GAAAJ,EAAA,GACArkB,OAAAxgB,EAAAwgB,QAAA,QACA0kB,aAAAN,EAAA33B,EAAAgB,YAAA,IACAk3B,gBAAA,EACAC,gBAAA,UACAC,SAAAV,EACAW,OAAA,CACAC,OAAA,SAAAnpC,GACA,IAAAopC,EAAAV,EAAAW,cA7BA/Z,QAAA,QAAA,MA+BAze,EAAAqe,cAAAka,KAOAE,aAAA,CACA,CAAA,UAAA,OAAA,SAAA,UACA,CAAA,KAAA,SACA,CAAA,KAAA,KAAA,OAAA,SAAA,WACA,CAAA,QAAA,QACA,CAAA,OAAA,aACA,CAAA,iBAGAZ,EAAAa,WAAA,oBAEA14B,EAAAe,QAAA,WAvDA,2DAAA43B,KAwDA34B,EAAAgB,YACA62B,EAAAe,QAAA54B,EAAAgB,YAEA62B,EAAAgB,YAAAlB,EAAA33B,EAAAgB,qBClEAtV,MAAA4T,UAAA,wBAAA,CAAA,WAAA,aAAA,oBACA,SAAAC,EAAAxT,EAAAkW,GACA,SAAAzC,EAAAnN,GACA,GAAAA,EAEA,OAAAA,EAAAymC,UACA,qEACAzmC,EAAAwD,KAAA,iDACAxD,EAAA0mC,aAAA,IAAA,wBAGA,6DACA1mC,EAAAwD,KAAA,gCACAxD,EAAA0mC,aAAA,IAAA,eAKA,SAAAt5B,EAAApN,GACA,OAAAA,EAAAwD,KAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,WACAC,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAAC,EAAAgC,EAAAhK,cAEAsH,EAAA,WAEAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,0CACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA8Q,IAGAD,EAAAe,YAGAf,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,KAMAsT,EAAAe,QAAA,WACAd,EAAA9N,SAAAC,KAAA,WACA8N,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,eAIAlB,EAAAqe,GAAA,SAAA,SAAAvsB,GACAmB,EAAAqrB,OAAA,WACApe,EAAAqe,cAAAzsB,EAAAiuB,SAIA/f,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,UC9EAhB,MAAA4T,UAAA,gBAAA,CAAA,WAAA,aAAA,UAAA,YACA,SAAAC,EAAAxT,EAAAoN,EAAAlF,GACA,SAAAuL,EAAAw5B,GACA,GAAAA,EAEA,MAAA,0CACA7/B,EAAA,iBAAAA,CAAA6/B,GAAA,gCACAA,EAAA1/B,YAAAH,EAAA,OAAAA,CAAA6/B,EAAA1/B,YAAA,aAAAuH,cAAA,IAAA,+BACAm4B,EAAAC,OAAA,IAAAD,EAAAE,SAAA,eAIA,SAAAz5B,EAAAu5B,GACA,OAAA7/B,EAAA,iBAAAA,CAAA6/B,GAGA,MAAA,CACAt5B,SAAA,IACAC,QAAA,UACAC,SAAA,EACA6e,SAAA,EACA1rB,MAAA,CACAmW,WAAA,KAEArJ,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAAm5B,EAAAllC,EAAAiB,mBAAAnC,EAAAmW,YAAA,GAEA3J,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,iCACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACA1M,GAAA,SAAAmlC,GAAA,OAAAA,EAAA5jC,UACAjG,KAAAgqC,IAGAn5B,EAAAe,YAGAf,EAAAe,QAAA,WACAo4B,EAAAhnC,SAAAC,KAAA,WACA8N,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,eAIAjO,EAAA6D,OAAA,aAAA,SAAAC,GACA,IAAAuiC,EAAAnlC,EAAAiB,mBAAA2B,GACAuiC,EAAAjnC,SAAAC,KAAA,WACAgnC,IAAAD,IACAA,EAAA3oC,OAAA,EACA2oC,EAAAjqC,KAAAsf,MAAA2qB,EAAAC,IAGA,IAAA,IAAA9uB,EAAA,EAAAA,EAAA6uB,EAAA3oC,OAAA8Z,IACA,GAAA6uB,EAAA7uB,GAAAlV,UAAA4K,EAAAgB,WACA,OAIAd,EAAAJ,GAAAK,QAAA,MAAA,MACAH,EAAAqe,cAAA,UAIAve,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,UCvEAhB,MAAA4T,UAAA,kBAAA,CAAA,WAAA,aAAA,cAAA,KACA,SAAAC,EAAAxT,EAAAgW,EAAA9I,GACA,SAAAuG,EAAAnN,GACA,GAAAA,EAEA,OAAAA,EAAAwD,KAGA,SAAA4J,EAAApN,GACA,OAAAA,EACAA,EAAAwD,KAGA,GAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,UACAC,SAAA,EACA6e,SAAA,EACA1rB,MAAA,CACAmW,WAAA,KAEArJ,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAAq5B,EAAAtmC,EAAAmW,WACAxG,EACA,GAAA3P,EAAAmW,WACAxG,EAAAX,EAAAU,wBAAA1P,EAAAmW,gBACA,CACA,IAAAmkB,EAAAp0B,EAAAq0B,QACA5qB,EAAA,GACAA,EAAAvQ,SAAAk7B,EAAAE,QACAF,EAAAhrB,QAAAK,GAGAA,EAAAvQ,SAAAC,KAAA,WACAmN,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,mCACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACA1M,GAAA,SAAA+O,GAAA,OAAAA,EAAAsB,YACA/U,KAAAuT,IAGA1C,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAsT,EAAAe,QAAA,WACA2B,EAAAvQ,SACAuQ,EAAAvQ,SAAAC,KAAA,WACA8N,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,cAGAd,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,aAIAjO,EAAA6D,OAAA,aAAA,SAAAC,GACA,OAAAA,OAMAA,GAAAwiC,IAGAA,EAAA,KAEAt3B,EAAAU,wBAAA5L,GACA1E,SAAAC,KAAA,SAAAknC,GACA52B,EAAAlS,OAAA,EACAkS,EAAAxT,KAAAsf,MAAA9L,EAAA42B,GAEA,IAAA,IAAAhvB,EAAA,EAAAA,EAAA5H,EAAAlS,OAAA8Z,IACA,GAAA5H,EAAA4H,GAAApG,YAAAlE,EAAAgB,WACA,OAIA,EAAA0B,EAAAlS,QACA0P,EAAAJ,GAAAK,QAAA,MAAAuC,EAAA,GAAAwB,YACAlE,EAAAqe,cAAA3b,EAAA,GAAAwB,cAEAhE,EAAAJ,GAAAK,QAAA,MAAA,MACAH,EAAAqe,cAAA,YA1BAne,EAAAJ,GAAAK,QAAA,MAAA,WACAH,EAAAqe,cAAA,SA8BAve,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,MAGA,UCvHAhB,MAAA4T,UAAA,gBAAA,CAAA,WACA,SAAAC,GAEA,MAAA,CACAG,SAAA,IACA3M,MAAA,CACAwmC,SAAA,KAEA1mC,SAAA,iPAGAgN,KAAA,SAAA9M,EAAAymC,EAAA1+B,EAAAlK,GAEA,IAAA6oC,EAAA,CACAC,UAAA,mBACAC,SAAA,mBAGA5mC,EAAA6mC,QAAA,GAEA7mC,EAAA8mC,cAAA,CACAC,WAAA,EACAC,aAAA,GACAC,YAAA,MACAC,WAAA,iBAGAlnC,EAAAmnC,QAAA,GAEAnnC,EAAA/G,IAAA,mBAAA,SAAA4F,EAAAzC,GACAoQ,EAAA,WACAxM,EAAAmnC,QAAA5lC,QAAAvB,EAAAonC,YACA,OAGApnC,EAAAqnC,aAAA,CACAC,QAAA,SAAAC,EAAAC,EAAAC,GACA,IAGAC,EACAC,GAJAJ,IACAK,EAAAL,EAAAM,iBAEAH,EAAAE,EAAAF,MACAC,EAAAC,EAAAD,OAGA3nC,EAAAwmC,WACAxmC,EAAAwmC,SAAA,IAGAxmC,EAAAwmC,SAAAI,SAAAc,EACA1nC,EAAAwmC,SAAAG,UAAAgB,IAIA3nC,EAAA6D,OAAA,WAAA,SAAAipB,GAEAA,IAAAA,EAAA6Z,WAAA7Z,EAAA8Z,UAIA5mC,EAAA6mC,QAAA,IAHA/Z,EAAA4Z,EACA1mC,EAAA6mC,QAAA,GAKA7mC,EAAAonC,UAAAxuC,QAAA2G,KAAAutB,GACA9sB,EAAA4nC,UAAAhvC,QAAA2G,KAAAutB,KACA,QChEAn0B,MAAA4T,UAAA,yBAAA,CACA,WAEA,MAAA,CACAI,SAAA,IACAE,SAAA,EACA7M,MAAA,CACAyrB,QAAA,KAEA3rB,SACA,0VAMAjC,WAAA,CAAA,SAAA,SAAA,cAAA,cACA,SAAAG,EAAAC,EAAAkD,EAAA2mC,GAEA9pC,EAAA+pC,eAAA5mC,EAAAU,SAAA,mBAcA,IAAA1C,EAAAlB,EAAA,CACAL,YAAA,4CACA4B,OAdAxB,EAAAgqC,WAAA,WACA7oC,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAAwoC,EAAApoC,YACAP,EAAAnB,OAAAiqC,YAAA,SAAA3oC,GACAA,IACAtB,EAAAytB,QAAAnsB,EAAA4oC,aAGA/oC,EAAAK,WAOAQ,MAAAhC,EAAAiC,eClCAtH,MAAA4T,UAAA,UAAA,CAAA,WAAA,SAAA,kBACA,SAAAC,EAAA27B,EAAAtO,GACA,MAAA,CACAltB,SAAA,IACAE,SAAA,EACA6e,SAAA,EACA1rB,MAAA,GACA8M,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,KAEAA,WAAA,CAAA,SAAA,SAAAG,GACAA,EAAAoqC,MAAAvO,EAAAwO,WAEArqC,EAAAsqC,iBAAA,QAAA,SAAAC,EAAAC,EAAAxoC,GAEA,IACAyoC,EAGAC,EAJAH,EAAA9qC,SACAgrC,EAAAF,EAAA,GACAA,EAAAx2B,OAAA,EAAA,GAEA22B,EAAAP,EACA,CACA9uC,MAAAovC,EAAApvC,MACAsvC,QAAAF,EAAAE,QACAltC,UAAA,YACAD,UAAA,oBACAN,UAAA,kBACA+L,KAAAwhC,EAAAxhC,KACAzH,MAAA,IAGAgN,EAAA,WACAk8B,EAAAr3B,QACA,cCjCA1Y,MAAA4T,UAAA,kCAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAAm8B,GACA,GAAAA,EACA,OAAA5vC,EAAAM,QAAAsvC,EAAA1lC,MAGA,SAAAwJ,EAAAk8B,GACA,OAAA5vC,EAAAM,QAAAsvC,EAAA1lC,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,mCACA,CAAApC,GAAA,EAAAoC,KAAA,yCACA,CAAApC,GAAA,EAAAoC,KAAA,oCAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QClEAzU,MAAA4T,UAAA,gBAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GAEA,MAAA,CACA2T,SAAA,IACAC,QAAA,UACAC,SAAA,EACA7M,MAAA,CAAAyrB,QAAA,KACA3rB,SAAA,yLACAgN,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GACAjN,EAAA6oC,aAAA,SAAAhqC,GACA,IAAAiqC,EAAA37B,EAAAtO,EAAAkqC,QAAAC,IAAA,oBACAF,IACA77B,EAAAqe,cAAAwd,EAAAjqC,GACAoO,EAAAe,YAIAf,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAA,GAGA,IAAA66B,eAAAC,YAEAC,SAAA/6B,GAJA,IAQAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,IAAAyvC,EAAA,IAAAH,eAAAC,WAEA,OAAAvvC,EAGAyvC,EAAAC,SAAA1vC,GAFAyvC,EAAAC,SAAA,KAMAp8B,EAAAe,QAAA,WACAjB,EAAAu8B,WAAAN,IAAA,mBAAA/7B,EAAAgB,kBCzCAtV,MAAA4T,UAAA,2BAAA,CAAA,WAAA,aAAA,uBACA,SAAAC,EAAAxT,EAAAuwC,GACA,SAAA98B,EAAAnN,GACA,GAAAA,EAAA,CAEA,IAEAwD,EADAxD,EAAAs9B,UACAt9B,EAAAwD,KAAA,KAAA9J,EAAAM,QAAA,mBAAA,IACAgG,EAAAmlB,OAGAnlB,EAAAwD,KAFAxD,EAAAwD,KAAA,KAAA9J,EAAAM,QAAA,sBAAA,IAKA,OAAAgG,EAAAymC,UACA,WAAAjjC,EAAA,YAEAA,GAIA,SAAA4J,EAAApN,GACA,OAAAA,EAAAs9B,UACAt9B,EAAAwD,KAAA,KAAA9J,EAAAM,QAAA,mBAAA,IACAgG,EAAAmlB,OAGAnlB,EAAAwD,KAFAxD,EAAAwD,KAAA,KAAA9J,EAAAM,QAAA,sBAAA,IAMA,MAAA,CACAqT,SAAA,IACAC,QAAA,UACAC,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAAC,EAAAq8B,EAAAC,qBAAAv8B,EAAAw8B,YAAA,CAAAx8B,EAAAw8B,aAAA,MAEAj9B,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,6CACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,wBAAA,EACApR,KAAA8Q,EACAU,QAAA,SAAAC,EAAA3K,EAAA9G,GACA,OAAA,GAAAA,EAAA0G,KAAAgL,cAAAC,QAAAF,EAAAC,kBAIAb,EAAAe,YAGAf,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAA5Q,OAAAb,UAAA+3B,mBAAAtmB,GACA,KAEAC,SAAAD,KAIAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAA,OAAAA,EACAA,EAEAA,EAAA,KAIAsT,EAAAe,QAAA,WACAd,EAAA9N,SAAAC,KAAA,WACA,IAEAqqC,EAFAtvC,EAAAsK,KAAAwI,EAAA,CAAApM,GAAAmM,EAAAw8B,cAUAt8B,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,aARAy7B,EAAAH,EAAAC,qBAAAv8B,EAAAw8B,YAAA,CAAAx8B,EAAAw8B,aAAA,OACArqC,SAAAC,KAAA,WACA6N,EAAAzP,OAAA,EACAyP,EAAA/Q,KAAAsf,MAAAvO,EAAAw8B,GAEAv8B,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,iBAQAlB,EAAAqe,GAAA,SAAA,SAAAvsB,GACAmB,EAAAqrB,OAAA,WACApe,EAAAqe,cAAAzsB,EAAAiuB,SAIA/f,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,UClGAhB,MAAA4T,UAAA,iCAAA,CAAA,WAAA,aAAA,uBACA,SAAAC,EAAAxT,EAAAuwC,GACA,SAAA98B,EAAAnN,GACA,GAAAA,EAAA,CAEA,IAEAwD,EADAxD,EAAAs9B,UACAt9B,EAAAwD,KAAA,KAAA9J,EAAAM,QAAA,mBAAA,IACAgG,EAAAmlB,OAGAnlB,EAAAwD,KAFAxD,EAAAwD,KAAA,KAAA9J,EAAAM,QAAA,sBAAA,IAKA,OAAAgG,EAAAymC,UACA,WAAAjjC,EAAA,YAEAA,GAIA,SAAA4J,EAAApN,GACA,OAAAA,EAAAs9B,UACAt9B,EAAAwD,KAAA,KAAA9J,EAAAM,QAAA,mBAAA,IACAgG,EAAAmlB,OAGAnlB,EAAAwD,KAFAxD,EAAAwD,KAAA,KAAA9J,EAAAM,QAAA,sBAAA,IAMA,MAAA,CACAqT,SAAA,IACAC,QAAA,WACAC,SAAA,EACA7M,OAAA,EACA8M,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAAC,EAAAq8B,EAAAC,qBAAAv8B,EAAAw8B,aAAA,MAEAv8B,EAAA9N,SAAAC,KAAA,WACAmN,EAAA,WAEAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,wBAAA,EACApR,KAAA8Q,EACAogB,UAAA,EACA1f,QAAA,SAAAC,EAAA3K,EAAA9G,GACA,OAAA,GAAAA,EAAA0G,KAAAgL,cAAAC,QAAAF,EAAAC,kBAIAb,EAAAe,cAKAf,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAof,MAAAC,QAAArf,GACAhU,EAAA+a,IAAA/G,EAAA,SAAAuf,GAAA,OAAAtf,SAAAsf,KAEAvzB,EAAA+a,IAAA/G,EAAAqb,MAAA,KAAA,SAAAkE,GAAA,OAAAtf,SAAAsf,KALA,KAUA1gB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,GAGA6zB,MAAAC,QAAA9zB,GACAS,EAAA+a,IAAAxb,EAAA,SAAAg0B,GAAA,OAAAA,EAAA,KAEAvzB,EAAA+a,IAAAxb,EAAA8vB,MAAA,KAAA,SAAAkE,GAAA,OAAAA,EAAA,MAFAD,OAHA,KAUA3gB,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,UC5FAhB,MAAA4T,UAAA,wBAAA,CAAA,WAAA,aAAA,UAAA,oBACA,SAAAC,EAAAxT,EAAAoN,EAAAujC,GACA,SAAAl9B,EAAAnN,GACA,GAAAA,EAEA,OAAAA,EAAA4D,KAGA,SAAAwJ,EAAApN,GACA,OAAAA,EACAA,EAAA4D,KAGA,GAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAC,SAAA,EACA6e,SAAA,EACA5e,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAA28B,EAAAxvC,EAAAyvC,QAAAF,EAAAhnB,SAAA,QAEAnW,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EAEAzM,GAAA,SAAAgpC,GAAA,OAAAA,EAAAC,kBACA3tC,KAAAwtC,IAGA38B,EAAAe,YAGAf,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,KAMAsT,EAAAe,QAAA,WACAb,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,aAGAlB,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,UC9DAhB,MAAA4T,UAAA,gBAAA,CAAA,WAAA,aAAA,UAAA,YACA,SAAAC,EAAAxT,EAAAoN,EAAAlF,GACA,SAAAuL,EAAAw5B,GACA,GAAAA,EAEA,MAAA,0CACA7/B,EAAA,iBAAAA,CAAA6/B,GAAA,gCACAA,EAAA1/B,YAAAH,EAAA,OAAAA,CAAA6/B,EAAA1/B,YAAA,aAAAuH,cAAA,IAAA,+BACAm4B,EAAAC,OAAA,IAAAD,EAAAE,SAAA,eAIA,SAAAz5B,EAAAu5B,GACA,OAAA7/B,EAAA,iBAAAA,CAAA6/B,GAGA,MAAA,CACAt5B,SAAA,IACAC,QAAA,UACAC,SAAA,EACA6e,SAAA,EACA1rB,MAAA,CACAmW,WAAA,KAEArJ,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAAm5B,EAAAllC,EAAAgE,YAAAlF,EAAAmW,YAAA,GAEA3J,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,iCACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,wBAAA,EACA1M,GAAA,SAAAmlC,GAAA,OAAAA,EAAA5jC,UACAjG,KAAAgqC,EACAx4B,QAAA,SAAAC,EAAA3K,EAAA+iC,GACA,IAAA+D,EAAA5jC,EAAA,iBAAAA,CAAA6/B,GACA1/B,EAAA0/B,EAAA1/B,YAAAH,EAAA,OAAAA,CAAA6/B,EAAA1/B,YAAA,aAAAuH,cAAA,GACA,OAAA,GAAAk8B,EAAAl8B,cAAAC,QAAAF,EAAAC,gBACA,GAAAvH,EAAAuH,cAAAC,QAAAF,EAAAC,kBAIAb,EAAAe,YAGAf,EAAAe,QAAA,WACAo4B,EAAAhnC,SAAAC,KAAA,WACA8N,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,eAIAjO,EAAA6D,OAAA,aAAA,SAAAC,GACA,IAAAuiC,EAAAnlC,EAAAgE,YAAApB,GACAuiC,EAAAjnC,SAAAC,KAAA,WACAgnC,IAAAD,IACAA,EAAA3oC,OAAA,EACA2oC,EAAAjqC,KAAAsf,MAAA2qB,EAAAC,IAGA,IAAA,IAAA9uB,EAAA,EAAAA,EAAA6uB,EAAA3oC,OAAA8Z,IACA,GAAA6uB,EAAA7uB,GAAAlV,UAAA4K,EAAAgB,WACA,OAIAd,EAAAJ,GAAAK,QAAA,MAAA,MACAH,EAAAqe,cAAA,UAIAve,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,UC/EAhB,MAAA4T,UAAA,wBAAA,CAAA,WAAA,aAAA,UAAA,oBACA,SAAAC,EAAAxT,EAAAoN,EAAAzB,GACA,SAAA8H,EAAAw9B,GACA,GAAAA,EAEA,MAAA,0CACA7jC,EAAA,OAAAA,CAAA6jC,EAAAt7B,UAAA,YAAA,+BAEAvI,EAAA,OAAAA,CAAA6jC,EAAAt7B,UAAA,aAAAb,cACA,MACA1H,EAAA,OAAAA,CAAA6jC,EAAAjO,QAAA,SAAAluB,cACA,+BACAm8B,EAAAC,QAAA,+BACAD,EAAA/D,OAAA,IAAA+D,EAAA9D,SAAA,eAIA,SAAAz5B,EAAAu9B,GACA,OAAA7jC,EAAA,OAAAA,CAAA6jC,EAAAt7B,UAAA,6BAAAb,cACA,MACA1H,EAAA,OAAAA,CAAA6jC,EAAAjO,QAAA,UAAAluB,cAGA,MAAA,CACAnB,SAAA,IACAC,QAAA,UACAC,SAAA,EACA6e,SAAA,EACA1rB,MAAA,CACAmqC,SAAA,IACA1e,QAAA,KAEA3e,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAA8F,EAAA/S,EAAAmqC,SACAxlC,EAAAylC,kBAAApqC,EAAAmqC,UACA,GAEA39B,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,0CACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACA1M,GAAA,SAAAyjB,GAAA,OAAAA,EAAA8lB,kBACAjuC,KAAA2W,IAGA9F,EAAAe,QAAA,WACAf,EAAAgB,aAEA8E,GADAA,EAAA3T,SACAuF,EAAAylC,kBAAAn9B,EAAAgB,YAGA8E,GAAA3T,SAAAC,KAAA,WACA8N,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,eAKAjO,EAAA6D,OAAA,WAAA,SAAAC,GACA,IACAwmC,EADAxmC,GACAwmC,EAAA3lC,EAAAylC,kBAAAtmC,IACA1E,SAAAC,KAAA,WACAirC,IAAAv3B,IACAA,EAAAtV,OAAA,EACAsV,EAAA5W,KAAAsf,MAAA1I,EAAAu3B,IAGA,IAAA,IAAA/yB,EAAA,EAAAA,EAAAxE,EAAAtV,OAAA8Z,IACA,GAAAxE,EAAAwE,GAAA8yB,kBAAAp9B,EAAAgB,WACA,OAIAd,EAAAJ,GAAAK,QAAA,MAAA,MACAH,EAAAqe,cAAA,SAGAne,EAAAJ,GAAAK,QAAA,MAAA,MACAH,EAAAqe,cAAA,SAIAve,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAsT,EAAAe,WAEA,QC9FArV,MAAA4T,UAAA,mBAAA,CAAA,WACA,SAAAC,GACA,MAAA,CACAG,SAAA,IACAC,QAAA,UACA5M,MAAA,CACAyrB,QAAA,IACApe,YAAA,KAEAvN,SACA,sNAKA4rB,SAAA,EACA5e,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GACA2O,EAAA,WACAW,EAAAJ,GAAAw9B,eAAA,CACAC,UAAA,EACAC,UAAA,EACAC,YAAA,EACAC,YAAA,EACAC,eAAA,GAGAvF,SAAA,KACAwF,YAAA,GACAC,cAAA,GAEAC,MAAA,CACAC,KAAA,gBACApxC,KAAA,iBACAqxC,GAAA,iBACAC,KAAA,sBAIAlrC,EAAA6D,OAAA,UAAA,SAAAC,GACA,IAAAqnC,EAAAh+B,EAAAJ,GAAA3Q,KAAA,kBACA+uC,GAEArnC,IADAqnC,EAAAC,WAEAD,EAAAE,QAAAvnC,KAKAqJ,EAAAJ,GAAAqe,GAAA,YAAA,SAAAvsB,GAEA,IAAAysC,EAAAn+B,EAAAJ,GAAArI,KAAA,SAAAooB,WAEAtL,IAAA3iB,EAAAjF,OACA0xC,EAGAtrC,EAAAyrB,UAAA5sB,EAAAjF,OACAoG,EAAAyrB,QAAA5sB,EAAAjF,MAHAoG,EAAAyrB,QAAA,KAMAzrB,EAAAqrB,aAIA,QClEA1yB,MAAA4T,UAAA,uBAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAA0e,GACA,GAAAA,EACA,OAAAnyB,EAAAM,QAAA6xB,EAAAjoB,MAGA,SAAAwJ,EAAAye,GACA,OAAAnyB,EAAAM,QAAA6xB,EAAAjoB,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,kCACA,CAAApC,GAAA,EAAAoC,KAAA,wCACA,CAAApC,GAAA,EAAAoC,KAAA,uCACA,CAAApC,GAAA,EAAAoC,KAAA,wCACA,CAAApC,GAAA,EAAAoC,KAAA,wCACA,CAAApC,GAAA,EAAAoC,KAAA,wCACA,CAAApC,GAAA,EAAAoC,KAAA,wCACA,CAAApC,GAAA,EAAAoC,KAAA,wCACA,CAAApC,GAAA,EAAAoC,KAAA,wCACA,CAAApC,GAAA,GAAAoC,KAAA,wCACA,CAAApC,GAAA,GAAAoC,KAAA,wCACA,CAAApC,GAAA,GAAAoC,KAAA,wCACA,CAAApC,GAAA,GAAAoC,KAAA,4CAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QChFAzU,MAAA4T,UAAA,kBAAA,CAAA,WAAA,aAAA,cACA,SAAAC,EAAAxT,EAAAuyC,GACA,SAAA9+B,EAAAwtB,GACA,GAAAA,EACA,OAAAA,EAAA2C,UACA3C,EAAA9W,SAAA,KAAAnqB,EAAAM,QAAA,mBAAA,IACA2gC,EAAAxV,OAGAwV,EAAA9W,SAFA8W,EAAA9W,SAAA,KAAAnqB,EAAAM,QAAA,sBAAA,IAMA,SAAAoT,EAAAutB,GACA,OAAAA,EAAA2C,UACA3C,EAAA9W,SAAA,KAAAnqB,EAAAM,QAAA,mBAAA,IACA2gC,EAAAxV,OAGAwV,EAAA9W,SAFA8W,EAAA9W,SAAA,KAAAnqB,EAAAM,QAAA,sBAAA,IAMA,MAAA,CACAqT,SAAA,IACAC,QAAA,WACAC,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GACA,IAAAu+B,EAAAD,EAAAE,kBAAAx+B,EAAAw8B,aAEAj9B,EAAA,WAEAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,mCACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,wBAAA,EACApR,KAAAovC,EACA1qC,GAAA,SAAAm5B,GAAA,OAAAA,EAAAtnB,YACA/E,QAAA,SAAAC,EAAA3K,EAAA+2B,GACA,OAAA,GAAAA,EAAA9W,SAAArV,cAAAC,QAAAF,EAAAC,kBAIAb,EAAAe,YAGAf,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,KAMAsT,EAAAe,QAAA,WACAw9B,EAAApsC,SAAAC,KAAA,WACA,IAEAqsC,EAFAtxC,EAAAsK,KAAA8mC,EAAA,CAAA74B,WAAA1F,EAAAw8B,cAUAt8B,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,aARAy9B,EAAAH,EAAAE,kBAAAx+B,EAAAw8B,cACArqC,SAAAC,KAAA,WACAmsC,EAAA/tC,OAAA,EACA+tC,EAAArvC,KAAAsf,MAAA+vB,EAAAE,GAEAv+B,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,iBAQAlB,EAAAqe,GAAA,SAAA,SAAAvsB,GACAmB,EAAAqrB,OAAA,WACApe,EAAAqe,cAAAzsB,EAAAiuB,SAIA/f,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,UC7FAhB,MAAA4T,UAAA,6BAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAArQ,GACA,GAAAA,EACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,SAAAwJ,EAAAtQ,GACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,oCACA,CAAApC,GAAA,EAAAoC,KAAA,0CACA,CAAApC,GAAA,EAAAoC,KAAA,sDACA,CAAApC,GAAA,EAAAoC,KAAA,iDACA,CAAApC,GAAA,EAAAoC,KAAA,yDAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QCpEAzU,MAAA4T,UAAA,2BAAA,CAAA,WAAA,aAAA,aACA,SAAAC,EAAAxT,EAAA+D,GACA,SAAA0P,EAAAk/B,GACA,OAAAA,EAAAC,MAGA,SAAAl/B,EAAAi/B,GACA,OAAAA,EAAAC,MAGA,MAAA,CACAj/B,SAAA,IACAC,QAAA,UACAC,SAAA,EACA6e,SAAA,EACA5e,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,4CACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACA1M,GAAA,SAAA6sB,GAAA,OAAAA,EAAAke,UACAzvC,KAAAhC,EAAA+a,IAAApY,EAAA+uC,kBAAA,SAAAC,GACA,MAAA,CACAF,SAAAE,EAAAF,SACAD,MAAAG,EAAAH,MACAzhC,UAAA4hC,EAAAnnC,cAKA/G,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAkE,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGAlB,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QCzEAzU,MAAA4T,UAAA,UAAA,CAAA,UAAA,aAAA,UAAA,WAAA,gBAAA,cAAA,cACA,SAAApG,EAAAnN,EAAAoN,EAAAoG,EAAAnD,EAAAlI,EAAAkF,GAEA,MAAA,CACAsG,SAAA,IACA3M,MAAA,CACA1B,aAAA,IACA0tC,eAAA,IACAC,SAAA,IACAC,OAAA,IACAC,MAAA,IACAC,OAAA,IACAh0B,mBAAA,IACAzV,gBAAA,IACA0pC,SAAA,IACAC,SAAA,KAEAxsC,SACA,o6BAqBA4rB,SAAA,EACA2W,QAAA,SAAAkK,EAAAC,GACA,MAAA,CACAC,IAAA,SAAAzsC,EAAAymC,EAAA9D,GAIA,IAAA+J,EAAAC,EAFA3sC,EAAA4sC,cAAA5sC,EAAAssC,SAuBA,IAEAO,EAAA,CACAluC,MAAA,OACA6hB,OAAA,OACAssB,cAAA,EACAC,uBAAA,EACAC,cAAA,EACAC,mBAAA,EACAC,mBAAA,EACA7rB,eAAA,CACAF,WAAA,iBACAgsB,UAAA,yBACAC,YAAA,4BAEAC,OAAA,CACAC,SAAA,IAEAC,MAAA,CACAC,UAAA,EACAC,sBAAA,EACAC,uBAAA,EACAxqB,QAAA,QAEAiqB,UAAA,CACAQ,sBAAA,GAEAC,WAAA,CACA1qB,SAAA,GAEAlQ,UAAA,CACA66B,KAAA,UAEAC,QAAA,CACAC,eAAA,EACAC,eAAA,EACAC,aAAA,GAEAC,qBAAA,EACAC,kBAAA,EACA/1B,mBAAA,SAAAg2B,GACApuC,EAAAquC,qBAEA1L,EAAAvqB,oBACA,EAAAg2B,EAAAE,iBAAA7wC,QACAuC,EAAAoY,mBAAA,CAAA9Y,MAAA8uC,EAAAE,iBAAA,MAIAC,WApEA,SAAA1vC,GACAmB,EAAAyB,aAAA+sC,sBAEA9B,GAAAC,IAAA9tC,EAAAyI,UACAmnC,aAAA/B,GACAA,EAAA,KACAC,EAAA9tC,EAAAyI,SAEAonC,EAAA7vC,EAAAzC,OAGAswC,EAAAiC,WAAA,WACAhC,EAAA,MACA,KAGAA,EAAA9tC,EAAAyI,UAqDArE,eAAA,GACA2rC,aAAA,CACA5tB,SAAA,EACA5gB,SAAA,CACA4S,UAAA,CACA66B,KAAA,YAIAgB,cAAA,CACA7tB,SAAA,EACA6sB,KAAA,SACAx0C,MAAAL,EAAAM,QAAA,uBAEAw1C,aAAA,CACA9tB,SAAA,EACA+tB,WAAA/uC,EAAA4sC,cAAA,gBACA3lC,KAAA,eACA+nC,wBAAA,KAIAhvC,EAAA1B,aAAA6uC,YACAntC,EAAA1B,aAAA6uC,UAAA,IAGAntC,EAAAI,SAAAxH,QAAAkC,OAAA,GAAA+xC,EAAA7sC,EAAA1B,cAEA0B,EAAAI,SAAA0uC,aAAA9tB,QAAAhhB,EAAA1B,aAAA2kB,wBAIA,IAAA,IAAA1L,EAAA,EAAAA,EAAAvX,EAAAI,SAAA7B,QAAAd,OAAA8Z,IAAA,CACA,IAAAxO,EAAA/I,EAAAI,SAAA7B,QAAAgZ,GACA,MAAAxO,EAAAnC,oBAAA,MAAAmC,EAAAvK,YACAuK,EAAAkmC,0BAAA,CAAAC,EAAAC,EAAApG,IACA1iC,EAAA+oC,+BAAAF,EAAAC,EAAApG,EAAAhgC,EAAAvK,YA2CA,SAAAkwC,EAAAtyC,GACA4D,EAAAqvC,kBAAAjzC,IACA4D,EAAAksC,OAAA,CAAA5sC,MAAAlD,IAzCA4D,EAAAsvC,cAAAtvC,EAAA1B,aAAAswC,aACA5uC,EAAA1B,aAAAswC,aAAAxuC,SACA,GACAJ,EAAAsvC,cAAAjuB,iBACArhB,EAAAsvC,cAAAjuB,eAAAjJ,mBAAA,mCACApY,EAAAsvC,cAAAjuB,eAAAna,cAAA,+BAGAlH,EAAAuvC,yBAAA,SAAA1wC,GACAmB,EAAAsvC,cAAAl3B,oBACApY,EAAAsvC,cAAAl3B,mBAAAvZ,IAIAmB,EAAAwvC,oBAAA,SAAA3wC,GACAmB,EAAAsvC,cAAApoC,eACAlH,EAAAsvC,cAAApoC,cAAArI,IAIAmB,EAAAI,SAAAwuC,aAAAxuC,SAAA7B,SACAyB,EAAAI,SAAAwuC,aAAAxuC,SAAA7B,QAAA4P,QACA,CACA3P,UAAA,iBACAixC,aAAA,+BACA7rB,gBAAA,EACA8rB,eAAA,EACAC,aAAA,EACAC,iBAAA,EACAC,eAAA,EACAC,cAAA,EACArxC,QAAA,GACAE,MAAA,SAIAqB,EAAA+vC,cAAA,GACA/vC,EAAAgwC,oBAAA,GAYAhwC,EAAAiwC,gBAAA,SAAAnjB,GACA,OAAAA,EAAAojB,SAAApvC,IACA,IAAA,MACA6hC,EAAAwJ,OACAnsC,EAAAmsC,QAEA,MACA,IAAA,OACAuC,EAAA5hB,EAAAojB,SAAA9zC,MACA,MACA,IAAA,OACAumC,EAAAwJ,QAfA/vC,EAgBA0wB,EAAAojB,SAAA9zC,KAfA4D,EAAAosC,OAAA,CAAA9sC,MAAAlD,KAiBA,MACA,IAAA,SACAumC,EAAAsJ,UACAjsC,EAAAmwC,cAAArjB,EAAAojB,SAAA9zC,MAEA,MACA,QACA0wB,EAAAojB,SAAA9sC,UACA0pB,EAAAojB,SAAA9sC,SAAA0pB,EAAAojB,SAAA9zC,MA1BA,IAAAA,GAgCA,IAAAg0C,EAAA,IAAAC,WAAAC,GAAAC,cAAApjC,EAAA,YAAAnN,EAAA4sC,cAAA,mBAAA4D,SAAA,QAAA,CACAzH,OAAA57B,IACAgU,WAAAnhB,EAAA+vC,cACAU,YAAAzwC,EAAAiwC,gBACAS,SAAA,CAAAC,OAAA,SACAC,0BAAA,CAAA5vB,SAAA,GACAriB,MAAA,SAAAud,GACA,OAAAA,EAAA,IAAA,QAIAlc,EAAAmF,iBAAA,WACA,IAAA6b,GAAA,EAOA,OALAA,GADAA,EAAAA,KAAA2hB,EAAAwJ,QACAhrC,EAAAU,UAAA7B,EAAAqsC,UAAA,IAAA,aAEArrB,EADAhhB,EAAA1B,aAAA6G,iBACA6b,IAAAhhB,EAAA1B,aAAA6G,mBAGA6b,IAGAhhB,EAAA6wC,wBAAA,WACA,IAAAC,GAAA,EAMA,OAHAA,EADA9wC,EAAA1B,aAAAuyC,wBACAC,GAAA9wC,EAAA1B,aAAAuyC,0BAGAC,GAGA9wC,EAAA+wC,cAAA,WACA,IAAAvxC,GAAA,EAMA,OAHAA,EADAQ,EAAA1B,aAAAyyC,cACAvxC,GAAAQ,EAAA1B,aAAAyyC,gBAGAvxC,GAGAQ,EAAAqvC,kBAAA,SAAArnC,GACA,IACAgZ,GADAA,GAAA,MACA2hB,EAAAuJ,OAOA,QALAlrB,EADAhhB,EAAA1B,aAAA+wC,kBACAruB,IAAAhhB,EAAA1B,aAAA+wC,kBAAArnC,GAEAgZ,GAAA7f,EAAAU,UAAA7B,EAAAqsC,UAAA,IAAA,aAMArsC,EAAAgxC,kBAAA,SAAAhpC,GACA,IACAgZ,GADAA,GAAA,MACA2hB,EAAAyJ,OAOA,QALAprB,EADAhhB,EAAA1B,aAAA0yC,kBACAhwB,IAAAhhB,EAAA1B,aAAA0yC,kBAAAhpC,GAEAgZ,GAAA7f,EAAAU,UAAA7B,EAAAqsC,UAAA,IAAA,aAMArsC,EAAAixC,eAAA,SAAAjpC,GACA,IAAAxI,GAAA,EAMA,OAHAA,EADAQ,EAAA1B,aAAA2yC,eACAzxC,GAAAQ,EAAA1B,aAAA2yC,eAAAjpC,GAGAxI,GAGAQ,EAAAkxC,eAAA,SAAAlpC,GACA,IACAxI,GADAA,GAAA,MACAmjC,EAAAyJ,OAKA,OAHA5sC,EADAQ,EAAA1B,aAAA4yC,eACA1xC,GAAAQ,EAAA1B,aAAA4yC,eAAAlpC,GAGAxI,GAGAQ,EAAAinB,oBAAA,SAAAjf,GACA,IACAgZ,GADAA,GAAA,MACA2hB,EAAAsJ,SAOA,QALAjrB,EADAhhB,EAAA1B,aAAA2oB,oBACAjG,IAAAhhB,EAAA1B,aAAA2oB,oBAAAjf,GAEAgZ,GAAA7f,EAAAU,UAAA7B,EAAAqsC,UAAA,IAAA,aAMArsC,EAAAmxC,iBAAA,SAAAnpC,GACA,IAAAxI,GAAA,EAMA,OAHAA,EADAQ,EAAA1B,aAAA6yC,iBACA3xC,GAAAQ,EAAA1B,aAAA6yC,iBAAAnpC,GAGAxI,GAGAQ,EAAAoxC,sBAAA,SAAAC,EAAAh8B,GACA,IAAAg8B,IAAAh8B,EACA,OAAA,EAIA,IADA,IAAAi8B,GAAA,EACA/5B,EAAA,EAAAA,EAAA85B,EAAA5zC,QACA4zC,EAAA95B,KAAAlC,EADAkC,IAEA+5B,EAAAA,GAAAD,EAAA95B,GAAA2L,QAMA,OAAAouB,GAGA3O,EAAAwJ,OACAnsC,EAAA+vC,cAAA5zC,KAAA,CACA+G,KAAAlK,EAAAM,QAAA,gBACAwH,GAAA,MACAywC,WAAAvxC,EAAAmF,iBACAhC,UAAAnD,EAAA+wC,gBAIApO,EAAAuJ,QACAlsC,EAAA+vC,cAAA5zC,KAAA,CACA+G,KAAAlK,EAAAM,QAAA,iBACAwH,GAAA,OACAywC,WAAA,SAAAzkB,GACA,OAAA9sB,EAAAqvC,kBAAAviB,IAEA3pB,UAAA,SAAA2pB,GACA,OAAA9sB,EAAAixC,eAAAnkB,MAKA6V,EAAAyJ,QACApsC,EAAA+vC,cAAA5zC,KAAA,CACA+G,KAAAlK,EAAAM,QAAA,YACAwH,GAAA,OACAywC,WAAA,SAAAzkB,GACA9sB,EAAAgxC,kBAAAlkB,IAEA3pB,UAAA,SAAA2pB,GACA9sB,EAAAkxC,eAAApkB,MAKA6V,EAAAsJ,UACAjsC,EAAA+vC,cAAA5zC,KAAA,CACA+G,KAAAlK,EAAAM,QAAA,mBACAwH,GAAA,SACAojB,WAAA,EAAAlkB,EAAA+vC,cAAAtyC,OACA8zC,WAAAvxC,EAAAinB,oBACA9jB,UAAA,SAAA2pB,GACA,OAAA9sB,EAAAmxC,iBAAArkB,IAEA0kB,aAAA,SAAAH,EAAAh8B,GACA,OAAArV,EAAAoxC,sBAAAC,EAAAh8B,MAKA,IAAA6O,GAAA,EAEAtrB,QAAA0K,QAAAtD,EAAAI,SAAA6C,eAAA,SAAAoS,GACArV,EAAA+vC,cAAA5zC,KAAA,CACA+G,KAAAmS,EAAAnS,KACApC,GAAA,WAAAuU,EAAAvU,IAAAuU,EAAAnS,KAAAuuC,eACAvtB,WAAAA,KAAA7O,EAAA6O,WACA9gB,SAAAiS,EAAAjS,SACAmuC,WAAAl8B,EAAAk8B,YAAA,WAAA,OAAA,GACApuC,UAAAkS,EAAAlS,WAAA,WAAA,OAAA,GACAquC,aAAAttB,GAAA7O,EAAA6O,WACA,SAAAmtB,EAAAh8B,GAAA,OAAArV,EAAAoxC,sBAAAC,EAAAh8B,IACA,WAAA,OAAA,KAEA6O,GAAA,IAGAtrB,QAAA0K,QAAAtD,EAAAI,SAAAwuC,aAAAxuC,SAAA6C,eAAA,SAAAoS,GACArV,EAAAgwC,oBAAA7zC,KAAA,CACA+G,KAAAmS,EAAAnS,KACApC,GAAA,kBAAAuU,EAAAvU,IAAAuU,EAAAnS,KAAAuuC,eACAruC,SAAAiS,EAAAjS,SACAmuC,WAAAl8B,EAAAk8B,YAAA,WAAA,OAAA,GACApuC,UAAAkS,EAAAlS,WAAA,WAAA,OAAA,OAKAnD,EAAA0xC,oBAAA,CACArwB,eAAA,CACAlX,SAAA,8BAEAwnC,KAAA,mBACAhzC,MAAA,OACA6hB,OAAA,OACAoxB,QAAA,WACAjP,EAAAwJ,OACAnsC,EAAAmsC,UAKAnsC,EAAA6xC,eAAA,SAAAz1C,GAEA4D,EAAA4sC,cAEA,IAFA,IACAkF,EAAA1B,EAAAjxB,OAAA,cACA5H,EAAA,EAAAA,EAAAu6B,EAAAr0C,OAAA8Z,IAAA,CACA,IAAAw6B,EAAAD,EAAAv6B,GACAw6B,EAAA7tB,WAAA6tB,EAAAP,aAAAO,EAAAP,aAAAM,EAAAC,GAAAA,EAAA7tB,WACA6tB,EAAA5nC,SAAA4nC,EAAAR,WAAAn1C,EAAAA,MACA21C,EAAA7uB,QAAA6uB,EAAA5uC,UAAA/G,EAAAA,MACA21C,EAAA31C,KAAAA,EAAAA,KAEAg0C,EAAAjxB,OAAA,aAAA2yB,GACA1B,EAAAjxB,OAAA,SAAA/iB,EAAAwL,aACAwoC,EAAA5wC,QAGAQ,EAAAgyC,qBAAA,SAAA51C,KAYA4D,EAAAiyC,sBAAA,SAAAnlB,GACAA,EAAAojB,SAAA9sC,UACA0pB,EAAAojB,SAAA9sC,SAAA0pB,EAAA1lB,UAAA8qC,SAAAC,WAAArlB,EAAAojB,SAAA9zC,OAIA4D,EAAAmwC,cAAA,SAAA7wC,GACAU,EAAA1B,aAAA8zC,0BACApyC,EAAAisC,SAAA,CAAA3sC,MAAAA,IAEA+J,EAAA6B,eAAA,CACA7R,MAAA,2BACA8R,QAAA,0BACAC,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WAAApD,EAAAisC,SAAA,CAAA3sC,MAAAA,WAMAU,EAAA+vC,cAAAtyC,QAAAklC,EAAAwJ,QACAnsC,EAAAI,SAAA7B,QAAA4P,QACA,CACA3P,UAAA,iBACAixC,aAAA,yBACA4C,mBAAA1P,EAAAwJ,MAAA,2BAAA,KACAvoB,gBAAA,EACA8rB,eAAA,EACAC,aAAA,EACAC,iBAAA,EACAC,eAAA,EACAC,cAAA,EACAwC,qBAAA,EACA7zC,QAAA,GACAE,MAAA,SAIAqB,EAAAuyC,aAAA,SAAAC,GACAxyC,EAAAyB,eACA+wC,GACAxyC,EAAAyB,aAAA+wC,WAKAC,EAAA,GAFAC,EAAAjM,EAAAkM,QAAA,6BAEAl1C,OACAi1C,EAAAE,cAAAnM,EAAAoM,UAAAD,cAAAnM,EAAAqM,UAAAF,cACAnM,EAAAjR,SAAAod,cAAAnM,EAAAoM,UAAAD,cAAAnM,EAAAqM,UAAAF,iBACA5yC,EAAAyB,aAAA0d,OAAA,WAEAnf,EAAAyB,aAAA0d,OAAA,SAAAszB,KAOAzyC,EAAA+yC,kBAAA,WACA,IAAAC,EAAAhzC,EAAA4sC,cAAA,uBACA7/B,EAAAI,EAAA,IAAA6lC,GACA,EAAAjmC,EAAAtP,QACAsP,EAAAnN,UAIAI,EAAAquC,mBAAA,WACA,IA4DA4E,EACAC,EA2DAC,EAEAC,EA1HApzC,EAAAyB,eAIAuxC,EAAAhzC,EAAA4sC,cAAA,uBACA,IAAAz/B,EAAA,IAAA6lC,GAAAv1C,SACAuC,EAAAqzC,kBAAA,IAAAhD,WAAAC,GAAAC,cAAApjC,EAAA,YAAA6lC,EAAA,MAAAxC,SAAA,QAAA,CACAzH,OAAA57B,IACAyT,MAAA,CAAA,CACA9f,GAAA,iBACAoC,KAAAowC,UAAAC,cAAA,4BACAppC,SAAAnK,EAAA6wC,4BAEAJ,YAAA,SAAA3jB,GACA,OAAAA,EAAAojB,SAAApvC,IACA,IAAA,iBAAA,CACA,MAAA0yC,EAAA,IAAAC,QAAAC,SACA,IAAAC,EAAAH,EAAAI,aAAA,cAEA,IAAAC,EAAA,GACA7zC,EAAAyB,aAAAqyC,cACA9zC,EAAAI,SAAA7B,QAAA+E,QAAA,SAAAywC,QACAvyB,IAAAuyB,EAAA7wB,SAAA6wB,EAAA7wB,UACA2wB,EAAA13C,KAAA43C,GACA/zC,EAAAyB,aAAAgF,aAAAstC,EAAAv1C,UAAA,WAAA,MAIA6xC,WAAA2D,cAAAC,eAAA,CACAN,UAAAA,EACAvsC,UAAApH,EAAAyB,aACAyyC,mBAAA,IACA70C,KAAA,WACAm0C,EAAAW,KAAAC,cAAA/0C,KAAA,SAAAg1C,GACA,IAAAC,EAAA,QAAAluC,EAAA,OAAAA,CAAA,IAAA9L,KAAA,2BAAA,QACAi6C,OAAA,IAAAC,KAAA,CAAAH,GAAA,CAAAptC,KAAA,6BAAAqtC,OAEAj1C,KAAA,WACAw0C,EAAAvwC,QAAA,SAAAywC,GACA/zC,EAAAyB,aAAAgF,aAAAstC,EAAAv1C,UAAA,WAAA,KAEAwB,EAAAyB,aAAAie,aACA,SAAA/e,GACAkzC,EAAAvwC,QAAA,SAAAywC,GACA/zC,EAAAyB,aAAAgF,aAAAstC,EAAAv1C,UAAA,WAAA,KAEAwB,EAAAyB,aAAAie,cAEA,SAIAgxB,SAAA,CAAAC,OAAA,SACAC,0BAAA,CAAA5vB,SAAA,GACAriB,MAAA,SAAAud,GACA,OAAAA,EAAA,IAAA,SAKA+2B,EAAA9lC,EAAAnN,EAAAyB,aAAAojC,WAAAngC,KAAA,qBACAwuC,EAAAlzC,EAAA4sC,cAAA,qBAEA,IAAAz/B,EAAA,IAAA+lC,GAAAz1C,QACA0P,EAAA,YAAA+lC,EAAA,kCAAAuB,UAAAxB,GACAyB,SAAA,CACA/C,KAAA,eACAC,QAAA,WACA5xC,EAAAyB,aAAA0d,OAAA,qBAAAnf,EAAAyB,aAAA0d,OAAA,yBAKAnf,EAAA1B,aAAA2kB,0BAYA0xB,EAAA30C,EAAA4sC,cAAA,sBACA,IAAAz/B,EAAA,IAAAwnC,GAAAl3C,QACA0P,EAAA,YAAAwnC,EAAA,kCAAAF,UAAAxB,GACA2B,iBAAA,CACAjD,KAAA,cACAkD,eAAA,EACAC,aAAA,EACAC,YAAA,WACA/xB,QAAA,KACAoH,YAAA,OACA4qB,KAAAh8C,EAAAM,QAAA,sBACAsnB,MAAA,CACA,CAAA9f,GAAA,EAAAoC,KAAAlK,EAAAM,QAAA,uBACA,CAAAwH,GAAA,EAAAoC,KAAAlK,EAAAM,QAAA,0BACA27C,gBAAA,CACAC,SAAA,KAEAzE,YAAA,SAAA5xC,GACA,GAAAA,EAAAqxC,SAAApvC,GACAd,EAAAyB,aAAA0zC,oBACA,GAAAt2C,EAAAqxC,SAAApvC,IACA0L,EAAA,WACAxM,EAAAyB,aAAA2zC,MAAA,IACAp1C,EAAAyB,aAAAF,UACAvB,EAAAyB,aAAA+wC,aAIA6C,cAAA,WACAr1C,EAAAyB,aAAA0zC,wBAMAhC,EAAAnzC,EAAA4sC,cAAA,iBACA,IAAAz/B,EAAA,IAAAgmC,GAAA11C,SACA21C,EAAAjmC,EAAA,YAAAgmC,EAAA,kCAAAsB,UAAAxB,IACAyB,SAAA,CACA/C,KAAA,iBACAC,QAAA,WACA5xC,EAAAqzC,kBAAAl0B,OAAA,SAAAi0B,GACApzC,EAAAqzC,kBAAA7zC,YAMAQ,EAAAI,SAAAkhB,eAAA,SAAAziB,GAWA,IACAy2C,EAVAt1C,EAAAyB,aAAA5C,EAAAuI,UACApH,EAAAuyC,eAEAvyC,EAAA1B,aAAAmD,aAAA5C,EAAAuI,UAEApH,EAAA1B,aAAAgjB,gBACAthB,EAAA1B,aAAAgjB,eAAAziB,GAGA8jC,EAAAhgC,mBACA2yC,EAAAt1C,EAAAyB,aAAA8zC,uBAEAC,EAAA,IAAAnF,WAAAj0C,KAAAq5C,WAAA,CACAC,MAAA11C,EAAAgsC,eACA2J,UAAA,KAGArzB,OAAAgzB,GACAE,EAAAI,OAAAC,KAAA,SAAAhsB,GACA7pB,EAAA2C,iBAAA3C,CAAA6pB,MAGA7pB,EAAA2C,iBAAA3C,CAAAA,EAAAgsC,iBAIAhsC,EAAAquC,sBAGA,IAAAyH,EAAA91C,EAAAI,SAAAsH,eAEA1H,EAAAI,SAAAsH,eAAA,SAAA7I,GACA,WAAAA,EAAAsI,SACA,IAAAtI,EAAAkK,OAAA,QACA/I,EAAA+vC,cAAAtyC,QAAAklC,EAAAwJ,QACAvzC,QAAAisC,QAAA,yCACA6P,SAAA,CACA/C,KAAA,QACAhzC,MAAA,OACA6hB,OAAA,OACAoxB,QAAA,WACA,GAAA5xC,EAAAyB,aAEA,IADA,IAAAlD,EAAAyB,EAAAyB,aAAA0d,OAAA,WACA5H,EAAA,EAAAA,EAAAhZ,EAAAd,OAAA8Z,IACAvX,EAAAyB,aAAAgF,aAAA8Q,EAAA,mBAAAiK,MAKAgvB,SAAA3xC,EAAA+I,aAIAkuC,GACAA,EAAAj3C,IAIAmB,EAAAI,SAAA21C,YAAA,SAAAl3C,GAEAmB,EAAA+yC,oBACAl0C,EAAAuI,UAAA4uC,IAAA,gBACAh2C,EAAAI,SAAAkhB,eAAA,KAEAthB,EAAAi2C,uBACAj2C,EAAAi2C,wBAGAj2C,EAAAk2C,oBACAl2C,EAAAk2C,uBAIAC,KAAA,SAAAn2C,EAAAymC,EAAA9D,GACA3iC,EAAAi2C,sBAAAj2C,EAAA/G,IAAA,wBAAA,WACA+G,EAAAuyC,cACAvyC,EAAAuyC,iBAIAvyC,EAAAk2C,mBAAAl2C,EAAA/G,IAAA,mBAAA,SAAAC,EAAAkD,GAEA,IACAg6C,GADAh6C,QAAAolB,IAAAplB,EAAA2D,WAEA,KADAq2C,EAAA3P,EAAAkM,QAAA,0BACAl1C,QACA24C,EAAAruC,KAAA,cACA3L,EAAA2D,YACAyM,EAAA,WACAxM,EAAAuyC,cAAA,IACA,IACA/lC,EAAA,WACAxM,EAAAuyC,cAAA,IACA,QAMA35C,QAAAisC,QAAA1+B,GAAAoI,KAAA,SAAA,WACAvO,EAAAuyC,cACAvyC,EAAAuyC,wBChxBA55C,MAAA4T,UAAA,gBAAA,CAAA,WAAA,aAAA,WACA,SAAAC,EAAAxT,EAAA8oB,GACA,SAAArV,EAAAnN,GACA,IAAA8pC,EAAA,IAAAH,eAAAC,WAEA,MAAA,2CACA5pC,EAAAwD,KAAA,gCACAxD,EAAA+2C,aAAA,IAAA,4DACAjN,EAAAC,SAAA/pC,EAAAwpC,OAAA,iEAIA,SAAAp8B,EAAApN,GAGA,MAAA,gIAFA,IAAA2pC,eAAAC,YAEAG,SAAA/pC,EAAAwpC,OAAA,0GAAAxpC,EAAAwD,KAAA,eAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,WACAC,SAAA,EACA7M,OAAA,EACA8M,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAAC,EAAA4U,EAAA5c,cAEAgI,EAAA9N,SAAAC,KAAA,WACAmN,EAAA,WAEAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACA1M,GAAA,SAAAxB,GAAA,OAAAA,EAAAg3C,SACAl6C,KAAA8Q,EACAogB,UAAA,IAGArgB,EAAAe,cAKAf,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAof,MAAAC,QAAArf,GACAhU,EAAA+a,IAAA/G,EAAA,SAAAuf,GAAA,OAAAtf,SAAAsf,KAEAvzB,EAAA+a,IAAA/G,EAAAqb,MAAA,KAAA,SAAAkE,GAAA,OAAAtf,SAAAsf,KALA,KAUA1gB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,GAGA6zB,MAAAC,QAAA9zB,GACAS,EAAA+a,IAAAxb,EAAA,SAAAg0B,GAAA,OAAAA,EAAA,KAEAvzB,EAAA+a,IAAAxb,EAAA8vB,MAAA,KAAA,SAAAkE,GAAA,OAAAA,EAAA,MAFAD,OAHA,KAUA3gB,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,UC1CAhB,MAAA4T,UAAA,eAAA,CAAA,UAAA,WACA,SAAApG,EAAAqG,GACA,MAAA,CACAG,SAAA,IACAC,QAAA,WACA8e,SAAA,EACA5rB,SAAA,0SACAgN,KAAA,SAAA9M,EAAA6kC,EAAA73B,EAAAye,GAEA,SAAA8qB,IACA,IAAA/gB,EAAAqP,EAAArP,SACAghB,EAAA3R,EAAA2R,OACAC,EAAA5R,EAAAngC,KAAA,qBACAgyC,EAAA7R,EAAAngC,KAAA,YACAic,EAAAkkB,EAAAngC,KAAA,eAEA+tC,EAAAjd,EAAAhV,SAAAg2B,EAAA5D,cAAAjyB,EAAAiyB,cAAA,EACA6D,EAAAj2B,OAAAiyB,GACAiE,EAAA1N,IAAA,aAAAyJ,EAAA,MAGA75C,QAAAisC,QAAA1+B,GAAAoI,KAAA,SAAAgoC,GAEA/pC,EAAA,WAAA+pC,WC1DA59C,MAAA4T,UAAA,0BAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAArQ,GACA,GAAAA,EACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,SAAAwJ,EAAAtQ,GACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,oCACA,CAAApC,GAAA,EAAAoC,KAAA,gCACA,CAAApC,GAAA,EAAAoC,KAAA,uCAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QClEAzU,MAAA4T,UAAA,eAAA,CAAA,WACA,SAAAC,GACA,MAAA,CACAG,SAAA,IACAE,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GACA2O,EAAA,WACAW,EAAAJ,GAAA4pC,WAAA,CACAC,WAAA,EACAC,MAAA,IACAC,WAAA,wCACAC,WAAA,4CAEA,QAQA5pC,EAAA6pC,GAAAl8C,OAAA,CAEA67C,WAAA,SAAA7gC,GAEA,IAQAmhC,EAAA9pC,EAAArS,OARA,CACA87C,UAAA,OACAC,MAAA,IACAC,WAAA,MACAC,WAAA,OAIAjhC,GAEAohC,EAAA/pC,EAAAtQ,MAGAq6C,EAAAxyC,KAAA,MACAyyC,KAAA,WAGA,GAFAhqC,EAAAtQ,MACA6H,KAAA,MACApH,SAEA6P,EAAAtQ,MACA6H,KAAA,WACA8+B,OAAA,4BAAAyT,EAAAH,WAAA,QAKA,KAFA3pC,EAAAtQ,MACA6H,KAAA,WACAqD,KAAA,SACAoF,EAAAtQ,MACA6H,KAAA,WACA4H,MAAA,WACA,OAAA,OAOA4qC,EAAAxyC,KAAA,aACAyyC,KAAA,WACAhqC,EAAAtQ,MACAu6C,QAAA,MACAC,UAAAJ,EAAAJ,OACA1pC,EAAAtQ,MACAu6C,QAAA,MACA5hB,OAAA,MACA9wB,KAAA,WACA9I,KAAAq7C,EAAAF,YACA5pC,EAAAtQ,MACAu6C,QAAA,MACA5hB,OAAA,MACA/tB,SAAA,UAGAyvC,EAAAxyC,KAAA,QACA4H,MAAA,WAEA,IAWA8qC,EAGAl0B,EAXA,GAHA/V,EAAAtQ,MACA24B,SACA9wB,KAAA,MACApH,SAEA25C,EAAAL,YAEAzpC,EAAAtQ,MACA24B,SACA9wB,KAAA,MACA4yC,GAAA,cACAF,EAAAjqC,EAAAtQ,MACA24B,SACA4hB,QAAA,OACAl0B,EAAAg0B,EAAAxyC,KAAA,eACAyyC,KAAA,SAAAI,GACA,IAAAC,GAAA,EACAJ,EAAAD,KAAA,SAAAM,GACA,GAAAL,EAAAK,IAAAv0B,EAAAq0B,GAEA,OADAC,GAAA,IAIAA,GACArqC,EAAAtQ,MACA24B,SACA9wB,KAAA,OAAAwe,EAAAq0B,IACApqC,EAAA+V,EAAAq0B,IACAG,QAAAT,EAAAJ,MAAA,WACA1pC,EAAAtQ,MACA24B,OAAA,MACA9wB,KAAA,WACA9I,KAAAq7C,EAAAH,YACA3pC,EAAAtQ,MACA24B,OAAA,MACAmiB,YAAA,cAQAxqC,EAAAtQ,MACA24B,SACA9wB,KAAA,YACA4yC,GAAA,cAAAnqC,EAAAtQ,MACA24B,SACA9wB,KAAA,YACAkzC,SAAA,UACAzqC,EAAAtQ,MACA24B,SACA9wB,KAAA,YACAgzC,QAAAT,EAAAJ,MAAA,WACA1pC,EAAAtQ,MACA24B,OAAA,MACAmiB,YAAA,QACAxqC,EAAAtQ,MACA24B,OAAA,MACA9wB,KAAA,WACAid,MAAAs1B,EAAAJ,OACAj7C,KAAAq7C,EAAAH,cAIA3pC,EAAAtQ,MACA24B,SACA9wB,KAAA,YACA2yC,UAAAJ,EAAAJ,MAAA,WAEA1pC,EAAAtQ,MACA24B,OAAA,MACA/tB,SAAA,QACA0F,EAAAtQ,MACA24B,OAAA,MACA9wB,KAAA,WACAid,MAAAs1B,EAAAJ,OACAj7C,KAAAq7C,EAAAF,oBChKAp+C,MAAA4T,UAAA,oCAAA,CAAA,WAAA,aAAA,UAAA,gCACA,SAAAC,EAAAxT,EAAAoN,EAAAyxC,GAEA,SAAAC,EAAAC,GACA,OAAAA,GAGA,KAAA,EACA,MAAA,UACA,KAAA,EACA,MAAA,YACA,QACA,MAAA,WAIA,SAAAtrC,EAAA/R,GACA,GAAAA,EAEA,MAAA,8DACAA,EAAAoI,KAAA,+BACAg1C,EAAAp9C,EAAAq9C,cAAA,eAKA,SAAArrC,EAAAhS,GACA,OAAAA,EAAAoI,KAAA,KAAAg1C,EAAAp9C,EAAAq9C,cAAA,IAGA,MAAA,CACAprC,SAAA,IACAC,QAAA,WACAC,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAA+qC,EAAAH,EAAA3yC,cAEAsH,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,uDACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA47C,EACAl3C,GAAA,SAAApG,GAAA,OAAAA,EAAAoG,MAGAmM,EAAAe,YAGAf,EAAAe,QAAA,WACAgqC,EAAA54C,SAAAC,KAAA,WACA8N,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,eAIAlB,EAAAqe,GAAA,SAAA,SAAAvsB,GACAmB,EAAAqrB,OAAA,WACApe,EAAAqe,cAAAzsB,EAAAiuB,SAIA/f,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,UCpEAhB,MAAA4T,UAAA,0BAAA,CAAA,WAAA,aAAA,gBACA,SAAAC,EAAAxT,EAAAi/C,GACA,SAAAxrC,EAAAyrC,GACA,GAAAA,EAEA,MAAA,0CACAA,EAAAp1C,KAAA,gCACA,MAAAo1C,EAAA7B,YAAA6B,EAAA7B,YAAA,IAAA,eAIA,SAAA3pC,EAAA2I,GACA,OAAAA,EAAAvS,KAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,UACAC,SAAA,EACA6e,SAAA,EACA1rB,MAAA,CAAAyrB,QAAA,KACA3rB,SAAA,iDACAgN,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA,IAAAs6C,EAAAF,EAAA/yC,cAEAsH,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,gCACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA+7C,IAEAt6C,EAAAmQ,UAEAhO,EAAA6D,OAAA,UAAA,SAAAC,GACAA,GACAq0C,EAAA/4C,SAAAC,KAAA,WACA8N,EAAAJ,GAAAK,QAAA,MAAAtJ,OAKAiJ,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAqT,EAAAorC,UACAp4C,EAAA6D,OAAAmJ,EAAAorC,SAAA,SAAA/T,GACAt3B,EAAAK,QAAA,WAAAi3B,MAIA,QClEA1rC,MAAA4T,UAAA,qBACA,WACA,MAAA,CACAI,SAAA,IACAC,QAAA,WACAC,SAAA,EACA7M,MAAA,CACAq4C,WAAA,WACA1pC,UAAA,KAEA+c,SAAA,EACA9tB,YAAA,kCACAC,WAAA,CAAA,SAAA,SAAAG,GAEA,IAAAs6C,EAAA,CACArxC,KAAA,EACAsxC,cAAA,EACAC,UAAA,EACAC,MAAA,EACAC,UAAA,EACAC,oBAAA,GACAC,mBAAA,EAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,IAGA56C,EAAAq6C,WAGAr6C,EAAAq6C,WAAAz/C,QAAAkC,OAAA,GAAAw9C,EAAAt6C,EAAAq6C,YAFAr6C,EAAAq6C,WAAAz/C,QAAAkC,OAAA,GAAAw9C,GAKAt6C,EAAA6F,OAAA,YAAA,SAAAC,GACA,GAAAA,EAGA,IAFA,IAAA+0C,EAAA9+C,OAAA+J,GAAAsvB,aAAA,EAEA7b,EAAA,EAAAA,EAAA,EAAAA,IACAvZ,EAAAq6C,WAAAO,mBAAArhC,GAAAA,IAAAshC,SCjCAlgD,MAAA4T,UAAA,yBAAA,CAAA,WAAA,aAAA,qBACA,SAAAC,EAAAxT,EAAA8/C,GACA,SAAArsC,EAAAnN,GACA,GAAAA,EAEA,OAAAA,EAAAwD,KAGA,SAAA4J,EAAApN,GACA,OAAAA,EAAAwD,KAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,UACAC,SAAA,EACA6e,SAAA,EACA1rB,MAAA,CACAyrB,QAAA,IACAsB,SAAA,KAEAjtB,SAAA,iDACAgN,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAGA,IAAAqP,EAAA4rC,EAAA5zC,cAEAsH,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,2CACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA8Q,IAEArP,EAAAmQ,UAEAhO,EAAA6D,OAAA,UAAA,SAAAC,GACAA,GACAoJ,EAAA9N,SAAAC,KAAA,WACA8N,EAAAJ,GAAAK,QAAA,MAAAtJ,OAKAqJ,EAAAJ,GAAAqe,GAAA,SAAA,SAAAvsB,GACAmB,EAAA+sB,YACA/sB,EAAA+sB,UAAA/sB,CAAAnB,EAAAk6C,SAIAhsC,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAqT,EAAAorC,UACAp4C,EAAA6D,OAAAmJ,EAAAorC,SAAA,SAAA/T,GACAt3B,EAAAK,QAAA,WAAAi3B,MAIA,QCzEA1rC,MAAA4T,UAAA,6BAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAAusC,GACA,GAAAA,EACA,OAAAhgD,EAAAM,QAAA0/C,EAAA91C,MAGA,SAAAwJ,EAAAssC,GACA,OAAAhgD,EAAAM,QAAA0/C,EAAA91C,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAAP,EAAAisC,SACAzrC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,2CACA,CAAApC,GAAA,EAAAoC,KAAA,wCACA,CAAApC,GAAA,EAAAoC,KAAA,uCACA,CAAApC,GAAA,EAAAoC,KAAA,oDAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,OAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,OAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QCrEAzU,MAAA4T,UAAA,4BAAA,CAAA,WACA,SAAAC,GASA,MAAA,CACAG,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CAGAE,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,GAAAoC,KAAA,MACA,CAAApC,GAAA,GAAAoC,KAAA,MACA,CAAApC,GAAA,GAAAoC,KAAA,SAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QCnEAzU,MAAA4T,UAAA,iBAAA,CACA,WACA,MAAA,CACAI,SAAA,IACA3M,MAAA,CACAyQ,cAAA,KAEA3Q,SAAA,6dAkBAnH,MAAA4T,UAAA,kBAAA,CACA,WACA,MAAA,CACAI,SAAA,IACA3M,MAAA,CACAyQ,cAAA,IACAyoC,WAAA,KAEAp5C,SAAA,8cC/BAnH,MAAA4T,UAAA,sBAAA,CAAA,WAAA,eACA,SAAAC,EAAA2sC,GACA,SAAA1sC,EAAArQ,GACA,GAAAA,EAEA,MAAA,6DACAA,EAAA0G,KAAA,gCACA1G,EAAAi6C,aAAA,IAAA,eAIA,SAAA3pC,EAAAtQ,GACA,OAAAA,EAAA0G,KAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,UACAC,SAAA,EACA6e,SAAA,EACA1rB,MAAA,CACAyrB,QAAA,IACAsB,SAAA,KAEAjtB,SAAA,iDACAgN,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA,IAAAu7C,EAAAD,EAAAj0C,cAEAsH,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CAEAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAAg9C,IAEAv7C,EAAAmQ,UAEAhO,EAAA6D,OAAA,UAAA,SAAAC,GACAA,GACAs1C,EAAAh6C,SAAAC,KAAA,WACA8N,EAAAJ,GAAAK,QAAA,MAAAtJ,OAKAqJ,EAAAJ,GAAAqe,GAAA,SAAA,SAAAvsB,GACAmB,EAAA+sB,YACA/sB,EAAA+sB,UAAA/sB,CAAAnB,EAAAk6C,SAIAhsC,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAqT,EAAAorC,UACAp4C,EAAA6D,OAAAmJ,EAAAorC,SAAA,SAAA/T,GACAt3B,EAAAK,QAAA,WAAAi3B,MAIA,QCzEA1rC,MAAA4T,UAAA,iBAAA,CAAA,cAAA,aACA,SAAApL,EAAAnI,GACA,MAAA,CACA2T,SAAA,IACAE,SAAA,IACAC,KAAA,SAAA9O,EAAA6mC,EAAAwU,GACA,IAAAD,EAAAC,EAAAC,eACAC,EAAAF,EAAAG,8BACA5sB,EAAA5uB,EAAAklC,MAAAkW,GACAj4C,EAAAU,SAAA+qB,KACA2sB,EACA1U,EAAAjpC,KAAA,uCAAA5C,EAAAM,QAAA,6BAAA,eAEAurC,EAAAxzB,aCfA1Y,MAAA4T,UAAA,kBAAA,CAAA,WAAA,aAAA,UAAA,cACA,SAAAC,EAAAxT,EAAAoN,EAAAnF,GACA,SAAAwL,EAAAzK,GACA,GAAAA,EAAA,CAEA,IAAAy3C,EAAArzC,EAAA,QAEA,OAAApE,EAAA03C,OACA,sEACA13C,EAAAc,KAAA,gDACA22C,EAAAz3C,EAAA2M,UAAA,aAAA,MAAA8qC,EAAAz3C,EAAAg6B,QAAA,aAAA,wBAGA,8DACAh6B,EAAAc,KAAA,+BACA22C,EAAAz3C,EAAA2M,UAAA,aAAA,MAAA8qC,EAAAz3C,EAAAg6B,QAAA,aAAA,gBAKA,SAAAtvB,EAAA1K,GACA,OAAAA,EAAAc,KAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,WACA5M,MAAA,CACAyrB,QAAA,IACAuB,gBAAA,KAEAngB,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAA0sC,EAAA14C,EAAAwqC,oBAEAj/B,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,mCACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,aAAAvN,EAAAgtB,gBACAxf,wBAAA,EACApR,KAAAu9C,EACA/rC,QAAA,SAAAC,EAAA3K,EAAA9G,GACA,OAAA,GAAAA,EAAA0G,KAAAgL,cAAAC,QAAAF,EAAAC,kBAIAb,EAAAe,YAGAf,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,OAMAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,KAMAsT,EAAAe,QAAA,WACA2rC,EAAAv6C,SAAAC,KAAA,WACA8N,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,eAIAlB,EAAAqe,GAAA,SAAA,SAAAvsB,GACAmB,EAAAqrB,OAAA,WACApe,EAAAqe,cAAAzsB,EAAAiuB,KACA7rB,EAAA24C,WAAA/6C,EAAAiuB,SAIA/f,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,UCvFAhB,MAAA4T,UAAA,qCAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAArQ,GACA,GAAAA,EACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,SAAAwJ,EAAAtQ,GACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,wBACA,CAAApC,GAAA,EAAAoC,KAAA,gCAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QCjEAzU,MAAA4T,UAAA,wBAAA,CAAA,WAAA,aAAA,cACA,SAAAC,EAAAxT,EAAAiI,GACA,SAAAwL,EAAAnN,GACA,OAAAA,EAAAwD,KAGA,SAAA4J,EAAApN,GACA,OAAAA,EAAAwD,KAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,WACAC,SAAA,EACA7M,OAAA,EACA8M,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAAC,EAAAjM,EAAAiE,cAEAgI,EAAA9N,SAAAC,KAAA,WACAmN,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACA1M,GAAA,SAAAxB,GAAA,OAAAA,EAAAwB,IACA1E,KAAA8Q,EACAogB,UAAA,IAGArgB,EAAAe,cAKAf,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAof,MAAAC,QAAArf,GACAhU,EAAA+a,IAAA/G,EAAA,SAAAuf,GAAA,OAAAtf,SAAAsf,KAEAvzB,EAAA+a,IAAA/G,EAAAqb,MAAA,KAAA,SAAAkE,GAAA,OAAAtf,SAAAsf,KALA,KAUA1gB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,GAGA6zB,MAAAC,QAAA9zB,GACAS,EAAA+a,IAAAxb,EAAA,SAAAg0B,GAAA,OAAAA,EAAA,KAEAvzB,EAAA+a,IAAAxb,EAAA8vB,MAAA,KAAA,SAAAkE,GAAA,OAAAA,EAAA,MAFAD,OAHA,KAUA3gB,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,UCpEAhB,MAAA4T,UAAA,iBAAA,CAAA,WACA,SAAAC,GACA,MAAA,CACAG,SAAA,IACAC,QAAA,WACAC,SAAA,IACAC,KAAA,SAAA9M,EAAA6kC,EAAA98B,EAAA0jB,GACA,IAAAouB,GAAA,EACAC,GAAA,EAsDA,SAAAC,IACA,IAAAC,EAAAnV,EAAAoV,YAAA,OACAxuB,EAAAH,cAAA0uB,GAtDAxtC,EAAA,WACAq4B,EAAAoV,YAAA,OACA,CACAC,MAAA,GACAC,KAAA,IACAC,KAAA,GACAC,OAAA,GACAC,MAAA,IACAC,KAAA,IACAC,KAAA,UAGAV,GAAA,IAGAruB,EAAAvd,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGA,iBAAAA,GAAAA,aAAA5Q,OACAi9C,WAAArsC,EAAAsd,QAAA,KAAA,MAGAtd,EANA,IAUAqd,EAAAnd,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMA8xB,EAAAzd,QAAA,WACA6rC,IAEAC,EACAjV,EAAAoV,YAAA,MAAAxuB,EAAAxd,YAAA,KAEAzB,EAAA,WACAq4B,EAAAoV,YAAA,MAAAxuB,EAAAxd,YAAA,SAMA42B,EAAAzZ,GAAA,oBAAA,WACAprB,EAAAkkC,WAAA6V,KAQA5sC,EAAA03B,GAAAzZ,GAAA,SAAA,WACAyuB,GAAA,EACAhV,EAAAoV,YAAA,kBCrEAthD,MAAA4T,UAAA,cAAA,CAAA,wBAEA,MAAA,CACAI,SAAA,IACAC,QAAA,UACA5M,MAAA,CACAi3C,KAAA,KAEAnqC,KAAA,SAAA9M,EAAA+rB,EAAA/e,EAAAC,GAIA,SAAAytC,IACA,IAMAt+C,EAJAxD,QAAAkC,OAAAm8C,EAAAj3C,EAAAi3C,MAGA33C,EAAA1G,QAAA+hD,SAAA1tC,EAAAgB,YAAAhB,EAAAgB,WAAAyd,QAAA,aAAA,IAAAze,EAAAgB,WAGA7R,EAAAxD,QAAA60B,QAAAnuB,GAAAA,EAAAA,EAAAmqB,MAAA,KACAtc,EAAA4e,GAAAlW,UAAAzZ,EAAA66C,GAZA,IAAAA,EAAA,CAAAhwC,KAAA,QAeAgG,EAAAe,QAAA,WACA0sC,KAGA16C,EAAA6D,OAAAozC,EAAA,WACAyD,WCnBA,SAAAvtC,gBAIA,IAAAytC,EAAA,GAiEA,SAAAC,IACA,IAAAC,EAAA3tC,EAAAtQ,MACAk+C,EAAAC,EAAAF,GACAA,EAAAxD,GAAA,kDACAwD,EAAA9R,IAAA,aAAAiS,EAAAF,EAAAp9B,OAAAs9B,EAAAF,EAAA9Z,MAAA9zB,EAAA4tC,EAAAG,SAAA16B,SAAA,MAEAs6B,EAAA9R,IAAA,YAAAkM,EAAA6F,EAAAp9B,OAAAu3B,EAAA6F,EAAA9Z,MAAA9zB,EAAA4tC,EAAAG,SAAAv8C,QAAA,MAIA,SAAAw8C,EAAAjiD,GACAA,EAAAkiD,iBACA,IAAAC,EAAAluC,EAAAtQ,MACAi+C,EAAAO,EAAA7lB,SACA6lB,EAAA5zC,SAAA,WACAvO,EAAA+N,KAAAq0C,MAAA,WACAD,EAAA5zC,SAAA,SAEA,IAoGAqzC,EAAAS,EAAAC,EApGAC,GAoGAX,EApGAA,EAoGAS,EApGAG,EAAAxiD,GAoGAsiD,EApGAG,EAAAziD,GAqGA6hD,EAAAC,EAAAF,GACAA,EAAAxD,GAAA,cACAsE,EAAAb,EAAAS,GACAV,EAAAxD,GAAA,iBACAuE,EAAAd,EAAAS,GACAV,EAAAxD,GAAA,uBACAwE,EAAAf,EAAAS,GACAV,EAAAxD,GAAA,eACAyE,EAAAhB,EAAAQ,GACAT,EAAAxD,GAAA,gBACA0E,EAAAjB,EAAAQ,GACAT,EAAAxD,GAAA,qBACA2E,EAAAlB,EAAAQ,QADA,GA/GApuC,EAAA+uC,UAAA9wB,GAAA,sBAAAqwB,GACAtuC,EAAA+uC,UAAAC,IAAA,mBAAA,SAAAjjD,GACAiU,EAAA+uC,UAAAlG,IAAA,sBAAAyF,GACAJ,EAAA1D,YAAA,iBACAmD,EAAAsB,QAAA,iBAAA,CAAAC,EAAAvB,OAEAA,EAAAsB,QAAA,mBAAA,CAAAC,EAAAvB,KAGA,SAAAuB,EAAAvB,GACA,IAAAwB,EAAAxB,EAAAxD,GAAA,kDACA,SAAA,QACA,MAAA,CACAiF,mBAAAluC,SAAAysC,EAAAp2C,KAAA,+BAAAskC,IAAAsT,GAAA,IACAE,kBAAAnuC,SAAAysC,EAAAp2C,KAAA,8BAAAskC,IAAAsT,GAAA,KAIA,SAAAG,IACA,IAWA3B,EACAC,EAZAD,EAAA3tC,EAAAtQ,MACA6/C,GAWA3B,EAAAC,EADAF,EAVAA,GAYAA,EAAAxD,GAAA,cACA,SAAAp+C,GACA,IAAAyjD,EAAA1B,EAAAF,EAAA9Z,MACA2b,EAAA7B,EAAA8B,UAAAC,aAAAH,EAAA5B,EAAAG,QAAA4B,aACA/B,EAAAp9B,MAAAm/B,aAAAF,GACAG,EAAAhC,EAAA6B,EAAA,MAEA9B,EAAAsB,QAAA,kBAAA,CAAAC,EAAAvB,MAEAA,EAAAxD,GAAA,iBACA,SAAAp+C,GACA,IAAA8jD,EAAA/B,EAAAF,EAAAp9B,OACAs/B,EAAAlC,EAAA8B,UAAAC,aAAAE,EAAAjC,EAAAG,QAAA4B,aACA/B,EAAA9Z,KAAA6b,aAAAG,GACAC,EAAAnC,EAAAkC,EAAA,MAEAnC,EAAAsB,QAAA,kBAAA,CAAAC,EAAAvB,MAEAA,EAAAxD,GAAA,uBACA,SAAAp+C,GACA,IAAAyjD,EAAA1B,EAAAF,EAAA9Z,MACA+b,EAAA/B,EAAAF,EAAAp9B,OACAs/B,EAAAlC,EAAA8B,UAAAC,aAAAE,EAAAjC,EAAAG,QAAA4B,aACA/B,EAAA9Z,KAAA6b,aAAAG,EACAC,EAAAnC,EAAAkC,EAAAlC,EAAA8B,UAAAC,aAAA,IAAA,KAEA/B,EAAA8B,UAAAC,aAAA/B,EAAAp9B,MAAAm/B,aAAA/B,EAAAG,QAAA4B,aAAAH,GACAO,EAAAnC,EAAA4B,EAAA5B,EAAA8B,UAAAC,aAAA,IAAA,KAGAhC,EAAAsB,QAAA,kBAAA,CAAAC,EAAAvB,MAEAA,EAAAxD,GAAA,eACA,SAAAp+C,GACA,IAAAikD,EAAAjI,EAAA6F,EAAA9Z,MACAmc,EAAArC,EAAA8B,UAAAQ,YAAAF,EAAApC,EAAAG,QAAAmC,YACAtC,EAAAp9B,MAAA0/B,YAAAD,GACAE,EAAAvC,EAAAqC,EAAA,MAEAtC,EAAAsB,QAAA,kBAAA,CAAAC,EAAAvB,MAEAA,EAAAxD,GAAA,gBACA,SAAAp+C,GACA,IAAAqkD,EAAArI,EAAA6F,EAAAp9B,OACA6/B,EAAAzC,EAAA8B,UAAAQ,YAAAE,EAAAxC,EAAAG,QAAAmC,YACAtC,EAAA9Z,KAAAoc,YAAAG,GACAC,EAAA1C,EAAAyC,EAAA,MAEA1C,EAAAsB,QAAA,kBAAA,CAAAC,EAAAvB,MAEAA,EAAAxD,GAAA,qBACA,SAAAp+C,GACA,IAAAikD,EAAAjI,EAAA6F,EAAA9Z,MACAsc,EAAArI,EAAA6F,EAAAp9B,OACA6/B,EAAAzC,EAAA8B,UAAAQ,YAAAE,EAAAxC,EAAAG,QAAAmC,YACAtC,EAAA9Z,KAAAoc,YAAAG,EACAC,EAAA1C,EAAAyC,EAAAzC,EAAA8B,UAAAQ,YAAA,IAAA,KAEAtC,EAAA8B,UAAAQ,YAAAtC,EAAAp9B,MAAA0/B,YAAAtC,EAAAG,QAAAmC,YAAAF,GACAM,EAAA1C,EAAAoC,EAAApC,EAAA8B,UAAAQ,YAAA,IAAA,KAGAvC,EAAAsB,QAAA,kBAAA,CAAAC,EAAAvB,WAZA,GA7DAtlB,EAAAslB,EAAAtlB,SAAAmd,QAAA,eAAA,IAAAryB,OACAnT,EAAAqoB,GAAApK,GAAAoK,IAAAlV,OAAA,SAAA,kBAAA,SAAApnB,IACAA,EAAA6vC,SAAAmT,SAAA57B,OAAApnB,EAAA6vC,UACAvT,GACAknB,EAAAxjD,KA2FA,SAAA0iD,EAAAb,EAAAS,GACA,IAAAwB,EAAA/B,EAAAF,EAAAp9B,OACA+/B,EAAA3C,EAAA8B,UAAAC,aAAA7B,EAAAF,EAAA9Z,MAAA8Z,EAAAG,QAAA4B,aACAa,EAAA5C,EAAAG,QAAA0C,UAAApC,EACA,OAAA,SAAAtiD,GACAA,EAAAkiD,gBAAAliD,EAAAkiD,iBACA,IAiHA4B,EAAAU,EAjHAG,GAiHAb,EAjHAA,EAiHAU,EAjHAA,EAiHA/jD,EAjHAgkD,EAAAhC,EAAAziD,GAkHAm4B,KAAAkC,IAAAlC,KAAAysB,IAAAd,EAAArjD,GAAA+jD,IAjHAX,EAAAhC,EAAA8C,EAAA,MACA1wC,EAAA4tC,EAAA8B,WAAAT,QAAA,kBAAA,CAAAC,EAAAlvC,EAAA4tC,EAAA8B,eAIA,SAAAhB,EAAAd,EAAAS,GACA,IAAAmB,EAAA1B,EAAAF,EAAA9Z,MACAgc,EAAAlC,EAAA8B,UAAAC,aAAA7B,EAAAF,EAAAp9B,OAAAo9B,EAAAG,QAAA4B,aACAiB,EAAAhD,EAAA9Z,KAAA6b,aAAAtB,EACA,OAAA,SAAAtiD,GACAA,EAAAkiD,gBAAAliD,EAAAkiD,iBACA4C,EAAA3sB,KAAAkC,IAAAlC,KAAAysB,IAAAnB,EAAAoB,EAAApC,EAAAziD,IAAA+jD,GACAC,EAAAnC,EAAAiD,EAAA,MACA7wC,EAAA4tC,EAAA8B,WAAAT,QAAA,kBAAA,CAAAC,EAAAlvC,EAAA4tC,EAAA8B,eAIA,SAAAf,EAAAf,EAAAS,GACA,IAAAyC,EAAAlD,EAAA8B,UAAAC,aACAH,EAAA1B,EAAAF,EAAA9Z,MACAgc,EAAAgB,EAAAhD,EAAAF,EAAAp9B,OAAAo9B,EAAAG,QAAA4B,aACAiB,EAAAhD,EAAA9Z,KAAA6b,aAAAtB,EACA,OAAA,SAAAtiD,GACAA,EAAAkiD,gBAAAliD,EAAAkiD,iBACA4C,EAAA3sB,KAAAkC,IAAAlC,KAAAysB,IAAAnB,EAAAoB,EAAApC,EAAAziD,IAAA+jD,GACAC,EAAAnC,EAAAiD,EAAAC,EAAA,IAAA,KACA9wC,EAAA4tC,EAAA8B,WAAAT,QAAA,kBAAA,CAAAC,EAAAlvC,EAAA4tC,EAAA8B,eAIA,SAAAd,EAAAhB,EAAAQ,GACA,IAAAgC,EAAArI,EAAA6F,EAAAp9B,OACAy/B,EAAArC,EAAA8B,UAAAQ,YAAAnI,EAAA6F,EAAA9Z,MAAA8Z,EAAAG,QAAAmC,YACAa,EAAAnD,EAAAG,QAAAiD,WAAA5C,EACA,OAAA,SAAAriD,GACAA,EAAAkiD,gBAAAliD,EAAAkiD,iBACA,IAgFAmC,EAAAH,EAhFAgB,GAgFAb,EAhFAA,EAgFAH,EAhFAA,EAgFAzjD,EAhFAukD,EAAAxC,EAAAxiD,GAiFAm4B,KAAAkC,IAAAlC,KAAAysB,IAAAP,EAAA5jD,GAAAyjD,IAhFAE,EAAAvC,EAAAqD,EAAA,MACAjxC,EAAA4tC,EAAA8B,WAAAT,QAAA,kBAAA,CAAAC,EAAAlvC,EAAA4tC,EAAA8B,eAIA,SAAAb,EAAAjB,EAAAQ,GACA,IAAA4B,EAAAjI,EAAA6F,EAAA9Z,MACAuc,EAAAzC,EAAA8B,UAAAQ,YAAAnI,EAAA6F,EAAAp9B,OAAAo9B,EAAAG,QAAAmC,YACAgB,EAAAtD,EAAA9Z,KAAAoc,YAAA9B,EACA,OAAA,SAAAriD,GACAA,EAAAkiD,gBAAAliD,EAAAkiD,iBACAkD,EAAAjtB,KAAAkC,IAAAlC,KAAAysB,IAAAX,EAAAkB,EAAA3C,EAAAxiD,IAAAskD,GACAC,EAAA1C,EAAAuD,EAAA,MACAnxC,EAAA4tC,EAAA8B,WAAAT,QAAA,kBAAA,CAAAC,EAAAlvC,EAAA4tC,EAAA8B,eAIA,SAAAZ,EAAAlB,EAAAQ,GACA,IAAAgD,EAAAxD,EAAA8B,UAAAQ,YACAF,EAAAjI,EAAA6F,EAAA9Z,MACAuc,EAAAe,EAAArJ,EAAA6F,EAAAp9B,OAAAo9B,EAAAG,QAAAmC,YACAgB,EAAAtD,EAAA9Z,KAAAoc,YAAA9B,EACA,OAAA,SAAAriD,GACAA,EAAAkiD,gBAAAliD,EAAAkiD,iBACAkD,EAAAjtB,KAAAkC,IAAAlC,KAAAysB,IAAAX,EAAAkB,EAAA3C,EAAAxiD,IAAAskD,GACAC,EAAA1C,EAAAuD,EAAAC,EAAA,IAAA,KACApxC,EAAA4tC,EAAA8B,WAAAT,QAAA,kBAAA,CAAAC,EAAAlvC,EAAA4tC,EAAA8B,eAIA,SAAA7B,EAAAF,GACA,MAAA,CACA+B,UAAA/B,EAAA,GACAn9B,MAAAm9B,EAAAxR,SAAA,+BAAA,GACA4R,QAAAJ,EAAAxR,SAAA,uBAAA,GACArI,KAAA6Z,EAAAxR,SAAA,8BAAA,IAIA,SAAAoS,EAAAxiD,GACA,YAAAsoB,IAAAtoB,EAAAqiD,MACAriD,EAAAqiD,WACA/5B,IAAAtoB,EAAAslD,cAAAjD,MACAriD,EAAAslD,cAAAjD,MACAriD,EAAAslD,cAAAC,QACAvlD,EAAAslD,cAAAC,QAAA,GAAAlD,WADA,EAKA,SAAAI,EAAAziD,GACA,YAAAsoB,IAAAtoB,EAAAsiD,MACAtiD,EAAAsiD,WACAh6B,IAAAtoB,EAAAslD,cAAAhD,MACAtiD,EAAAslD,cAAAhD,MACAtiD,EAAAslD,cAAAC,QACAvlD,EAAAslD,cAAAC,QAAA,GAAAjD,WADA,EAKA,SAAAP,EAAApW,GACA,OAAAx2B,SAAAlB,EAAA03B,GAAAmE,IAAA,cAAA,KAAA,EAGA,SAAAkM,EAAArQ,GACA,OAAAx2B,SAAAlB,EAAA03B,GAAAmE,IAAA,aAAA,KAAA,EAkBA,SAAA+T,EAAAhC,EAAA8C,GACA9C,EAAAp9B,MAAA+gC,MAAAl+B,OAAAq9B,EACA9C,EAAAG,QAAAwD,MAAAb,IAAAA,EACA9C,EAAA9Z,KAAAyd,MAAAb,IAAAA,EAGA,SAAAX,EAAAnC,EAAAiD,GACAjD,EAAAp9B,MAAA+gC,MAAAV,OAAAA,EACAjD,EAAAG,QAAAwD,MAAAV,OAAAA,EACAjD,EAAA9Z,KAAAyd,MAAAl+B,OAAAw9B,EAGA,SAAAV,EAAAvC,EAAAqD,GACArD,EAAAp9B,MAAA+gC,MAAA//C,MAAAy/C,EACArD,EAAAG,QAAAwD,MAAAN,KAAAA,EACArD,EAAA9Z,KAAAyd,MAAAN,KAAAA,EAGA,SAAAX,EAAA1C,EAAAuD,GACAvD,EAAAp9B,MAAA+gC,MAAAJ,MAAAA,EACAvD,EAAAG,QAAAwD,MAAAJ,MAAAA,EACAvD,EAAA9Z,KAAAyd,MAAA//C,MAAA2/C,EAzVA1D,EAAA3tB,KAAA,WACA,IAAA0xB,EAAA9hD,KACA8hD,EAAAxH,KAAA0D,GACA8D,EAAArV,SAAA,uBAAA1tC,KAAA,gDACA+iD,EAAArV,SAAA,uBAAAle,GAAA,uBAAA+vB,GACAxM,WAAA,WAGAgQ,EAAAxH,KAAAsF,GACAtvC,EAAAmT,QAAA87B,QAAA,WACA,MAGAxB,EAAA2B,mBAAA,SAAA5iD,GACAkD,KAAAs6C,KAAA,WACA,IAAA2D,EAAA3tC,EAAAtQ,MACAk+C,EAAAC,EAAAF,GACAA,EAAAxD,GAAA,cACAsE,EAAAb,EAAAA,EAAAG,QAAA0C,UAAAhC,CAAA,CAAAJ,MAAA7hD,IACAmhD,EAAAxD,GAAA,kBACA39C,EAAAohD,EAAA8B,UAAAC,aAAA/B,EAAAG,QAAA4B,aAAAnjD,EACAkiD,EAAAd,GAAAA,EAAA9Z,KAAA6b,aAAAjB,CAAA,CAAAL,OAAA7hD,KACAmhD,EAAAxD,GAAA,wBACA39C,EAAAohD,EAAA8B,UAAAC,aAAA/B,EAAAG,QAAA4B,aAAAnjD,EACAmiD,EAAAf,GAAAA,EAAA9Z,KAAA6b,aAAAhB,CAAA,CAAAN,OAAA7hD,KACAmhD,EAAAxD,GAAA,eACAyE,EAAAhB,EAAAA,EAAAG,QAAAiD,WAAApC,CAAA,CAAAR,MAAA5hD,IACAmhD,EAAAxD,GAAA,iBACA39C,EAAAohD,EAAA8B,UAAAQ,YAAAtC,EAAAG,QAAAmC,YAAA1jD,EACAqiD,EAAAjB,GAAAA,EAAA9Z,KAAAoc,YAAArB,CAAA,CAAAT,OAAA5hD,KACAmhD,EAAAxD,GAAA,uBACA39C,EAAAohD,EAAA8B,UAAAQ,YAAAtC,EAAAG,QAAAmC,YAAA1jD,EACAsiD,EAAAlB,GAAAA,EAAA9Z,KAAAoc,YAAApB,CAAA,CAAAV,OAAA5hD,QAKAihD,EAAA4B,kBAAA,SAAA7iD,GACAkD,KAAAs6C,KAAA,WACA,IAAA2D,EAAA3tC,EAAAtQ,MACAk+C,EAAAC,EAAAF,GACAA,EAAAxD,GAAA,eACA39C,EAAAohD,EAAA8B,UAAAC,aAAA/B,EAAAG,QAAA4B,aAAAnjD,EACAiiD,EAAAb,EAAAA,EAAAG,QAAA0C,UAAAhC,CAAA,CAAAJ,MAAA7hD,KACAmhD,EAAAxD,GAAA,iBACAuE,EAAAd,GAAAA,EAAA9Z,KAAA6b,aAAAjB,CAAA,CAAAL,OAAA7hD,IACAmhD,EAAAxD,GAAA,uBACAwE,EAAAf,GAAAA,EAAA9Z,KAAA6b,aAAAhB,CAAA,CAAAN,OAAA7hD,IACAmhD,EAAAxD,GAAA,gBACA39C,EAAAohD,EAAA8B,UAAAQ,YAAAtC,EAAAG,QAAAmC,YAAA1jD,EACAoiD,EAAAhB,EAAAA,EAAAG,QAAAiD,WAAApC,CAAA,CAAAR,MAAA5hD,KACAmhD,EAAAxD,GAAA,gBACA0E,EAAAjB,GAAAA,EAAA9Z,KAAAoc,YAAArB,CAAA,CAAAT,OAAA5hD,IACAmhD,EAAAxD,GAAA,sBACA2E,EAAAlB,GAAAA,EAAA9Z,KAAAoc,YAAApB,CAAA,CAAAV,OAAA5hD,OAKAwT,EAAA6pC,GAAA6F,UAAA,SAAApiB,GACAmgB,EAAAngB,GAAA,QAAAhf,MAAA5e,KAAAsQ,EAAAyxC,KAAAC,UAAA,SAAAC,EAAAvnC,GAAA,OAAA,EAAAA,MAlEA,CAkWAwnC,QAEApmD,MAAA4T,UAAA,YAAA,WACA,MAAA,CACAI,SAAA,KACA+e,SAAA,EACAszB,YAAA,EACAh/C,MAAA,CACAi/C,oBAAA,KAEAphD,WAAA,CAAA,SAAA,SAAAG,GACAA,EAAA+8C,WAAA,GACAl+C,KAAAqiD,aAAA,SAAA7F,GACAr7C,EAAA+8C,WAAA5+C,KAAAk9C,IAEAx8C,KAAAsiD,WAAA,SAAA9F,GACAr7C,EAAAk9C,QAAA7B,KAGAvsC,KAAA,SAAA9O,EAAA6mC,EAAA73B,GACA,IA0BAoyC,EAqBAC,EAAAC,EA/CAC,EAAA1a,EAAAyE,SAAA,+BACA+R,EAAAxW,EAAAyE,SAAA,uBACAkW,EAAA3a,EAAAyE,SAAA,8BACAtrC,EAAA+8C,WAAA,GAAAp8C,OAAAX,EAAA+8C,WAAA,GAAAp8C,MAAA28C,MAAA,OACAzW,EAAAp9B,SAAA,oBACAg4C,EAAA,IAAAhF,WAAAz8C,EAAA+8C,WAAA,GAAAp8C,MAAA28C,MAAA,WAAA,IAAA,IACAiE,EAAAvW,IAAA,CAAAsV,MAAAmB,EAAAC,YAAA1hD,EAAAk9C,QAAAv8C,QACA08C,EAAArS,IAAA,CAAAsV,MAAAmB,EAAA9gD,MAAAX,EAAAk9C,QAAAv8C,QACA6gD,EAAAxW,IAAA,CAAArqC,MAAA8gD,KACAzhD,EAAA+8C,WAAA,GAAAp8C,OACAkmC,EAAAp9B,SAAA,cACA83C,EAAAvW,IAAA,CAAArqC,MAAAX,EAAA+8C,WAAA,GAAAp8C,QACA08C,EAAArS,IAAA,CAAAoV,KAAApgD,EAAA+8C,WAAA,GAAAp8C,MAAAA,MAAAX,EAAAk9C,QAAAv8C,QACA6gD,EAAAxW,IAAA,CAAAoV,KAAApgD,EAAA+8C,WAAA,GAAAp8C,MAAAghD,WAAA3hD,EAAAk9C,QAAAv8C,SACAX,EAAA+8C,WAAA,GAAAp8C,OAAAX,EAAA+8C,WAAA,GAAAp8C,MAAA28C,MAAA,OACAzW,EAAAp9B,SAAA,oBACA83C,EAAAvW,IAAA,CAAAsV,MAAAtgD,EAAA+8C,WAAA,GAAAp8C,MAAA+gD,YAAA1hD,EAAAk9C,QAAAv8C,QACA08C,EAAArS,IAAA,CAAAsV,MAAAtgD,EAAA+8C,WAAA,GAAAp8C,MAAAA,MAAAX,EAAAk9C,QAAAv8C,QACA6gD,EAAAxW,IAAA,CAAArqC,MAAAX,EAAA+8C,WAAA,GAAAp8C,SACAX,EAAA+8C,WAAA,GAAAp8C,OACAkmC,EAAAp9B,SAAA,eACA83C,EAAAvW,IAAA,CAAAsV,MAAAtgD,EAAA+8C,WAAA,GAAAp8C,MAAA+gD,YAAA1hD,EAAAk9C,QAAAv8C,QACA08C,EAAArS,IAAA,CAAAsV,MAAAtgD,EAAA+8C,WAAA,GAAAp8C,MAAAA,MAAAX,EAAAk9C,QAAAv8C,QACA6gD,EAAAxW,IAAA,CAAArqC,MAAAX,EAAA+8C,WAAA,GAAAp8C,SACAX,EAAA+8C,WAAA,GAAAv6B,QAAAxiB,EAAA+8C,WAAA,GAAAv6B,OAAA86B,MAAA,OACAzW,EAAAp9B,SAAA,sBACA23C,EAAA,IAAA3E,WAAAz8C,EAAA+8C,WAAA,GAAAv6B,OAAA86B,MAAA,WAAA,IAAA,IACAiE,EAAAvW,IAAA,CAAAgV,OAAAoB,EAAAQ,aAAA5hD,EAAAk9C,QAAA16B,SACA66B,EAAArS,IAAA,CAAAgV,OAAAoB,EAAA5+B,OAAAxiB,EAAAk9C,QAAA16B,SACAg/B,EAAAxW,IAAA,CAAAxoB,OAAA4+B,KACAphD,EAAA+8C,WAAA,GAAAv6B,SACAqkB,EAAAp9B,SAAA,aACA83C,EAAAvW,IAAA,CAAAxoB,OAAAxiB,EAAA+8C,WAAA,GAAAv6B,SACA66B,EAAArS,IAAA,CAAA6U,IAAA7/C,EAAA+8C,WAAA,GAAAv6B,OAAAA,OAAAxiB,EAAAk9C,QAAA16B,SACAg/B,EAAAxW,IAAA,CAAA6U,IAAA7/C,EAAA+8C,WAAA,GAAAv6B,OAAAq/B,UAAA7hD,EAAAk9C,QAAA16B,UACAxiB,EAAA+8C,WAAA,GAAAv6B,QAAAxiB,EAAA+8C,WAAA,GAAAv6B,OAAA86B,MAAA,OACAzW,EAAAp9B,SAAA,sBACA83C,EAAAvW,IAAA,CAAAgV,OAAAhgD,EAAA+8C,WAAA,GAAAv6B,OAAAo/B,aAAA5hD,EAAAk9C,QAAA16B,SACA66B,EAAArS,IAAA,CAAAgV,OAAAhgD,EAAA+8C,WAAA,GAAAv6B,OAAAA,OAAAxiB,EAAAk9C,QAAA16B,SACAg/B,EAAAxW,IAAA,CAAAxoB,OAAAxiB,EAAA+8C,WAAA,GAAAv6B,UACAxiB,EAAA+8C,WAAA,GAAAv6B,SACAqkB,EAAAp9B,SAAA,gBACA83C,EAAAvW,IAAA,CAAAgV,OAAAhgD,EAAA+8C,WAAA,GAAAv6B,OAAAo/B,aAAA5hD,EAAAk9C,QAAA16B,SACA66B,EAAArS,IAAA,CAAAgV,OAAAhgD,EAAA+8C,WAAA,GAAAv6B,OAAAA,OAAAxiB,EAAAk9C,QAAA16B,SACAg/B,EAAAxW,IAAA,CAAAxoB,OAAAxiB,EAAA+8C,WAAA,GAAAv6B,UAEAqkB,EAAAgY,YAEAhY,EAAAzZ,GAAA,kBAAA,SAAAlyB,EAAA+lD,GACAjhD,EAAAihD,qBAAA/lD,EAAA6vC,SAAAlE,EAAA,IACAwa,IAAAJ,EAAA1C,oBACA+C,IAAAL,EAAAzC,mBACAx+C,EAAAqtB,OAAA,WACAg0B,EAAAJ,EAAA1C,mBACAv+C,EAAAihD,oBAAA1C,mBAAA0C,EAAA1C,mBACA+C,EAAAL,EAAAzC,kBACAx+C,EAAAihD,oBAAAzC,kBAAAyC,EAAAzC,sBAIAx+C,EAAA6F,OAAA,yCAAA,SAAA04C,IACAA,GAAA,IAAAA,GAAAA,IAAA8C,IACAA,EAAA9C,EACA1X,EAAAgY,UAAA,qBAAAN,MAGAv+C,EAAA6F,OAAA,wCAAA,SAAA24C,IACAA,GAAA,IAAAA,GAAAA,IAAA8C,IACAA,EAAA9C,EACA3X,EAAAgY,UAAA,oBAAAL,OAIA18C,SAAA,kDAGAyM,UAAA,qBAAA,WACA,MAAA,CACAI,SAAA,KACA+e,SAAA,EACAszB,YAAA,EACApyC,QAAA,aACAE,KAAA,SAAA9O,EAAA6mC,EAAA73B,EAAA8yC,GACAA,EAAAZ,aAAA,CAAAvgD,MAAAqO,EAAArO,MAAA6hB,OAAAxT,EAAAwT,UAEA1gB,SAAA,4DAGAyM,UAAA,mBAAA,WACA,MAAA,CACAI,SAAA,KACA+e,SAAA,EACAszB,YAAA,EACApyC,QAAA,aACAE,KAAA,SAAA9O,EAAA6mC,EAAA73B,EAAA8yC,GACAA,EAAAX,WAAA,CAAAxgD,MAAAqO,EAAArO,MAAA6hB,OAAAxT,EAAAwT,UAEA1gB,SAAA,0DCleAnH,MAAA4T,UAAA,iBAAA,CAAA,WAAA,aAAA,UAAA,cAAA,cACA,SAAAC,EAAAxT,EAAAoN,EAAAlI,EAAAmI,GACA,SAAAoG,EAAAszC,GACA,GAAAA,EAEA,OAAAA,EAAAj9C,KAGA,SAAA4J,EAAAqzC,GACA,OAAAA,EAAAj9C,KAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,WACAC,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAAC,EAAAhP,EAAA8hD,kCAAA,EAAA/yC,EAAAw8B,aAEAv8B,EAAA9N,SAAAC,KAAA,WACAmN,EAAA,WAEAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,kCACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,wBAAA,EACA1M,GAAA,SAAAxB,GACA,OAAAA,EAAAwB,IAEA1E,KAAAhC,EAAAqT,OAAAP,EAAA,SAAAQ,GACA,OAAArH,EAAAsH,WAAAD,EAAA,UAEAE,QAAA,SAAAC,EAAA3K,EAAA9G,GACA,OAAA,GAAAA,EAAA0G,KAAAgL,cAAAC,QAAAF,EAAAC,kBAKAb,EAAAe,QAAA,WACAb,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,aAGAhB,EAAAe,WACA,GAEAf,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,KAOAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAsT,EAAAe,iBCxEArV,MAAA4T,UAAA,eAAA,CAAA,QAAA,aAAA,WAAA,UAAA,UACA,SAAAotB,EAAA3gC,EAAAwT,EAAApG,EAAA65C,GACA,SAAAxzC,EAAAnN,GACA,GAAAA,EAEA,MAAA,0CACAA,EAAA6jB,SAAA,+BACA7jB,EAAA4gD,MAAA,+BACA95C,EAAA,QAAAA,CAAA9G,EAAA6gD,OAAA,eAIA,SAAAzzC,EAAApN,GACA,OAAAA,EAAA6jB,SAGA,MAAA,CACAxW,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,+BACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAAP,EAAAisC,SACAmH,KAAA,CACA1lB,IAAA,2BACAt+B,KAAA,SAAAyR,EAAAwyC,GACA,MAAA,CACA/e,MAAAzzB,EACAy/B,SAAA,GACAgT,OAAAD,IAGAE,QAAA,SAAAnkD,EAAAikD,GAEA,MAAA,CAAAE,QAAAnkD,EAAAokD,KADA,EAAApkD,EAAAqB,UAIAgjD,cAAA,SAAA5b,EAAAzhC,GACAtC,EAAAqM,EAAA03B,GAAA/X,MACAhsB,GAAA,aAAAA,GACA64B,EAAA,CACAc,OAAA,MACAC,IAAA,wBACAgmB,OAAA,CAAAC,OAAA7/C,KAEAL,QAAA,SAAArE,EAAAu+B,EAAAC,EAAAlgC,GACAmD,EAAAytB,cAAAlvB,EAAA0E,IACAsC,EAAAhH,QAMAyB,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAaAjB,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QClFAzU,MAAA2pB,OAAA,iBAAA,CAAA,aAAA,oBAAA,cACA,SAAAtpB,EAAAkW,EAAA/N,GAEA,IAAAS,EAAAT,EAAAU,SAAA,kBACAqL,EAAA,GAMA,SAAA4gB,EAAAr0B,GACA,IAAAmI,EACA,OAAA5I,EAAAM,QAAA,4BAGA,GAAA4T,EAAA6gB,UAAA,CACAzuB,EAAAlF,EAAAsK,KAAAwI,EAAA,CAAApM,GAAArH,IACA,OAAA6F,EACAA,EAAAwD,KAEA,GAGA,OAAA9J,EAAAM,QAAA,oBAMA,OAvBAsI,IACAsL,EAAAgC,EAAAhK,eAoBA4oB,EAAAE,WAAA,EAEAF,KC7BAn1B,MAAA2pB,OAAA,2BAAA,CAAA,sBAAA,SAAAhH,GACA,OAAA,SAAA7hB,GACA,OAAAA,GACA6hB,EAAAslC,4BAAAnnD,OCHAd,MAAA2pB,OAAA,oBAAA,CAAA,aAAA,uBAAA,SAAAtpB,EAAAuwC,GACA,IAAAr8B,EAAAq8B,EAAAsX,YAEA,SAAA/yB,EAAAr0B,GACA,GAAAyT,EAAA6gB,UAAA,CACA,IAAAzuB,EAAAlF,EAAAsK,KAAAwI,EAAA,SAAAmI,GAAA,OAAAA,EAAAvU,IAAArH,IACA,OAAA6F,EACAA,EAAAwD,KAEA,GAGA,OAAA9J,EAAAM,QAAA,oBAMA,OAFAw0B,EAAAE,WAAA,EAEAF,KClBAn1B,MAAA2pB,OAAA,qBAAA,CAAA,aAAA,uBAAA,SAAAtpB,EAAAuwC,GACA,IAAAr8B,EAAAq8B,EAAAsX,YAEA,SAAA/yB,EAAAr0B,GACA,GAAAyT,EAAA6gB,UAAA,CACAnU,EAAAxf,EAAA0mD,QAAA1mD,EAAA+a,IAAA1b,EAAA,SAAA4b,GACA,OAAAjb,EAAAkoB,OAAApV,EAAA,CAAApM,GAAAuU,OAGA,OAAA,EAAAuE,EAAAnc,OACArD,EAAA+a,IAAAyE,EAAA,QAAA8T,KAAA,MAEA,GAGA,OAAA10B,EAAAM,QAAA,oBAMA,OAFAw0B,EAAAE,WAAA,EAEAF,KCrBAn1B,MAAA2pB,OAAA,iBAAA,CAAA,YAAA,SAAAphB,GACA,OAAA,SAAAzH,GACA,OAAAA,GACAyH,EAAA6/C,kBAAAtnD,OCHAd,MAAA2pB,OAAA,aAAA,CAAA,aAAA,gBAAA,SAAAtpB,EAAAgoD,GACA,SAAAlzB,EAAAr0B,GACA,IAAAyT,EAAA8zC,EAAA97C,cAEA,GAAAgI,EAAA6gB,UAAA,CACAzuB,EAAAlF,EAAAsK,KAAAwI,EAAA,CAAA+zC,aAAAxnD,IACA,OAAA6F,EACAA,EAAAwD,KAEA,GAGA,OAAA9J,EAAAM,QAAA,oBAMA,OAFAw0B,EAAAE,WAAA,EAEAF,KClBAn1B,MAAA2pB,OAAA,gBAAA,CAAA,aAAA,SAAAtpB,GACA,OAAA,SAAAS,GACA,OAAAA,GACA,KAAA,EACA,OAAAT,EAAAM,QAAA,kCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,wCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,uCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,wCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,wCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,wCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,wCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,wCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,wCACA,KAAA,GACA,OAAAN,EAAAM,QAAA,wCACA,KAAA,GACA,OAAAN,EAAAM,QAAA,wCACA,KAAA,GACA,OAAAN,EAAAM,QAAA,wCACA,KAAA,GACA,OAAAN,EAAAM,QAAA,yCAEA,QACA,MAAA,QC/BAX,MAAA2pB,OAAA,iBAAA,CAAA,WACA,OAAA,SAAA7oB,GACA,OAAAA,EACA,6EAAAA,EAAA,SAGA,OAKAd,MAAA2pB,OAAA,gBAAA,CAAA,WACA,OAAA,SAAA7oB,GACA,OAAAA,EACA,2EAAAA,EAAA,SAGA,OCjBAd,MAAA2pB,OAAA,sBAAA,CAAA,aAAA,SAAAvlB,GACA,OAAA,SAAAtD,GACA,GAAAA,EAAA,CACAkyC,EAAAvxC,EAAAsK,KAAA3H,EAAA+uC,kBAAA,CAAAD,SAAApyC,IACA,GAAAkyC,EACA,OAAAA,EAAAC,MAIA,MAAA,OCTAjzC,MAAA2pB,OAAA,SAAA,CAAA,aAAA,WACA,SAAAtpB,EAAA8oB,GAEA,IAAA5U,EAAA4U,EAAA5c,cAEA,SAAA4oB,EAAAr0B,GACA,GAAAyT,EAAA6gB,UAAA,CACAnU,EAAAxf,EAAA0mD,QAAA1mD,EAAA+a,IAAA1b,EAAA,SAAA4b,GACA,OAAAjb,EAAAkoB,OAAApV,EAAA,CAAAopC,QAAAjhC,OAGA,OAAA,EAAAuE,EAAAnc,OACArD,EAAA+a,IAAAyE,EAAA,QAAA8T,KAAA,MAEA,GAGA,OAAA10B,EAAAM,QAAA,oBAMA,OAFAw0B,EAAAE,WAAA,EAEAF,KCvBAn1B,MAAA2pB,OAAA,eAAA,CAAA,aAAA,WACA,SAAAtpB,EAAA8oB,GAEA,IAAA5U,EAAA4U,EAAA5c,cAEA,SAAA4oB,EAAAr0B,GACA,GAAAyT,EAAA6gB,UAAA,CACA,IAAAnU,EAAAxf,EAAA0mD,QAAA1mD,EAAA+a,IAAA1b,EAAA,SAAA4b,GACA,OAAAjb,EAAAkoB,OAAApV,EAAA,SAAAoxB,GAAA,OAAAA,EAAAgY,SAAAjhC,OAGA,GAAA,EAAAuE,EAAAnc,OAAA,CACA,IAAA2rC,EAAA,IAAAH,eAAAC,WACA,OAAA9uC,EAAA+a,IAAAyE,EAAA,SAAArc,GACA,IAAAlE,EAAA,EAAAugB,EAAAnc,OACA,8FACAF,EAAAuF,KAEA,MAAA,iCAAAsmC,EAAAC,SAAA9rC,EAAAurC,OAAA,GACA,oFACAzvC,EAAA,oBAEAq0B,KAAA,KAEA,MAAA,GAGA,OAAA10B,EAAAM,QAAA,oBAMA,OAFAw0B,EAAAE,WAAA,EAEAF,KCjCAn1B,MAAA2pB,OAAA,QAAA,CAAA,aAAA,WAAA,SAAAtpB,EAAAkoD,GACA,IAAAh0C,EAAAg0C,EAAAv+B,SAEA,SAAAmL,EAAAr0B,GACA,GAAAyT,EAAA6gB,UAAA,CACA,IAAAzuB,EAAAlF,EAAAsK,KAAAwI,EAAA,CAAApM,GAAArH,IACA,OAAA6F,EACAA,EAAAwD,KACArJ,GAEAyT,EAAAg0C,EAAAv+B,UACAoL,WACAzuB,EAAAlF,EAAAsK,KAAAwI,EAAA,CAAApM,GAAArH,KAEA6F,EAAAwD,KAEA,GAGA9J,EAAAM,QAAA,oBAGA,GAGA,OAAAN,EAAAM,QAAA,oBAMA,OAFAw0B,EAAAE,WAAA,EAEAF,KC/BAn1B,MAAA2pB,OAAA,QAAA,CAAA,aAAA,WAAA,SAAAtpB,EAAAmoD,GACA,IAAAj0C,EAAAi0C,EAAAx+B,SAEA,SAAAmL,EAAAr0B,GACA,GAAAyT,EAAA6gB,UAAA,CACA,IAAAzuB,EAAAlF,EAAAsK,KAAAwI,EAAA,CAAApM,GAAArH,IACA,OAAA6F,EACAA,EAAAwD,KACArJ,GAEAyT,EAAAi0C,EAAAx+B,UACAoL,WACAzuB,EAAAlF,EAAAsK,KAAAwI,EAAA,CAAApM,GAAArH,KAEA6F,EAAAwD,KAEA,GAGA9J,EAAAM,QAAA,oBAGA,GAGA,OAAAN,EAAAM,QAAA,oBAMA,OAFAw0B,EAAAE,WAAA,EAEAF,KC/BAn1B,MAAA2pB,OAAA,mBAAA,CAAA,gBAAA,SAAA21B,GACA,OAAA,SAAAx+C,GACA,GAAAA,EAAA,CACA,IAAAghB,EAAAw9B,EAAAhsC,IAAAxS,GACA,GAAAghB,EACA,OAAAA,EAAA3X,KAIA,OAAArJ,MCTAd,MAAA2pB,OAAA,kBAAA,CAAA,qBAAA,SAAAw2B,GACA,OAAA,SAAAr/C,GACA,GAAAA,EAAA,CACA,IAAAghB,EAAAq+B,EAAA7sC,IAAAxS,GACA,GAAAghB,EACA,OAAAA,EAAA3X,KAIA,OAAArJ,MCTAd,MAAA2pB,OAAA,2BAAA,CAAA,aAAA,SAAAtpB,GACA,OAAA,SAAAS,GACA,OAAAA,GACA,KAAA,EACA,OAAAT,EAAAM,QAAA,2CACA,KAAA,EACA,OAAAN,EAAAM,QAAA,wCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,uCACA,QACA,MAAA,QCVAX,MAAA2pB,OAAA,WAAA,CAAA,cAAA,SAAArhB,GACA,OAAA,SAAAxH,GACA,GAAAA,EAAA,CACAghB,EAAAxZ,EAAAgL,IAAAxS,GACA,GAAAghB,EACA,OAAAA,EAAA3X,KAIA,MAAA,OCTAnK,MAAA2pB,OAAA,kBAAA,CAAA,aAAA,SAAAtpB,GACA,OAAA,SAAAS,GACA,OAAAA,GACA,KAAA,EACA,OAAAT,EAAAM,QAAA,kBACA,KAAA,EACA,OAAAN,EAAAM,QAAA,kBACA,QACA,MAAA,QCRAX,MAAA2pB,OAAA,WAAA,CAAA,eAAA,SAAA62B,GACA,OAAA,SAAA1/C,GACA,GAAAA,EAAA,CACA,IAAAghB,EAAA0+B,EAAAltC,IAAAxS,GACA,GAAAghB,EACA,OAAAA,EAAA3X,KAIA,OAAArJ,MCCAb,QAAAC,OAAA,wBAAA,CAAA,iCAEA4gC,QAAA,cAAA,CAAA,aAAA,aAAA,SAAA1gC,EAAAqoD,GACA,MAAA,CAOAC,eAAA,SAAAjlD,EAAAklD,GACAC,EAAAD,GAAA,SAAA5mD,GAAA,OAAAA,GACA3B,EAAA4I,WAAA,4BAAAvF,GACAglD,EAAAI,SAAAD,QAUA7mD,OAAA,CAAA,gBAAA,SAAAuB,GAuBAA,EAAAwlD,qBAAAtlD,KArBA,CAAA,aAAA,KAAA,aAAA,SAAApD,EAAAmN,EAAAk7C,GACA,SAAA3gD,EAAAihD,GACA,OAAAA,EAGA,SAAA/gD,EAAA+gD,GACA,GAAA,MAAAA,EAAA/mB,QAAA+mB,EAAAhnD,OAAAinD,iBAOA,OAAAz7C,EAAAqJ,OAAAmyC,GANA,IAAApnB,EAAAp0B,EAAAq0B,QAGA,OAFA6mB,EAAA5d,OAAAke,EAAAhnD,OAAA4/B,GACAvhC,EAAA4I,WAAA,4BACA24B,EAAAE,QAMA,OAAA,SAAAA,GACA,OAAAA,EAAAn7B,KAAAoB,EAAAE,UAUA/H,QAAAC,OAAA,+BAAA,IAEA4gC,QAAA,aAAA,CAAA,YAAA,SAAAmoB,GAEA,IAGAjoB,EAHA0a,EAAA,GAKA,SAAAwN,EAAAnnD,EAAA4/B,IAOAX,EAAAA,GAAAioB,EAAA31C,IAAA,UACAvR,GAAA2E,KAPA,SAAAqiD,GACApnB,EAAAhrB,QAAAoyC,IAEA,SAAAA,GACApnB,EAAA/qB,OAAAmyC,KAMA,MAAA,CAIAle,OAAA,SAAA9oC,EAAA4/B,GACA+Z,EAAAl4C,KAAA,CACAzB,OAAAA,EACA4/B,SAAAA,KAOAknB,SAAA,SAAAD,GACA,IAAA,IAAAhqC,EAAA,EAAAA,EAAA88B,EAAA52C,SAAA8Z,EACAsqC,EAAAN,EAAAlN,EAAA98B,GAAA7c,QAAA25C,EAAA98B,GAAA+iB,UAEA+Z,EAAA,QCpGA17C,MAAA8gC,QAAA,oBAAA,CAAA,YAAA,aACA,SAAAC,EAAA1gC,GA4BA,MAAA,CACA2pB,OA3BA,WACA,MAAA,CACA,CAAAonB,iBAAA,EAAA7mC,KAAAlK,EAAAM,QAAA,mCACA,CAAAywC,iBAAA,EAAA7mC,KAAAlK,EAAAM,QAAA,qCACA,CAAAywC,iBAAA,EAAA7mC,KAAAlK,EAAAM,QAAA,sCACA,CAAAywC,iBAAA,EAAA7mC,KAAAlK,EAAAM,QAAA,qCACA,CAAAywC,iBAAA,EAAA7mC,KAAAlK,EAAAM,QAAA,sCACA,CAAAywC,iBAAA,EAAA7mC,KAAAlK,EAAAM,QAAA,qCACA,CAAAywC,iBAAA,EAAA7mC,KAAAlK,EAAAM,QAAA,qCACA,CAAAywC,iBAAA,EAAA7mC,KAAAlK,EAAAM,QAAA,kCACA,CAAAywC,iBAAA,EAAA7mC,KAAAlK,EAAAM,QAAA,oCACA,CAAAywC,iBAAA,GAAA7mC,KAAAlK,EAAAM,QAAA,kCACA,CAAAywC,iBAAA,GAAA7mC,KAAAlK,EAAAM,QAAA,uCACA,CAAAywC,iBAAA,GAAA7mC,KAAAlK,EAAAM,QAAA,mCACA,CAAAywC,iBAAA,GAAA7mC,KAAAlK,EAAAM,QAAA,sCACA,CAAAywC,iBAAA,GAAA7mC,KAAAlK,EAAAM,QAAA,qCACA,CAAAywC,iBAAA,GAAA7mC,KAAAlK,EAAAM,QAAA,oCACA,CAAAywC,iBAAA,GAAA7mC,KAAAlK,EAAAM,QAAA,qCACA,CAAAywC,iBAAA,GAAA7mC,KAAAlK,EAAAM,QAAA,sCACA,CAAAywC,iBAAA,GAAA7mC,KAAAlK,EAAAM,QAAA,sCACA,CAAAywC,iBAAA,GAAA7mC,KAAAlK,EAAAM,QAAA,gCACA,CAAAywC,iBAAA,GAAA7mC,KAAAlK,EAAAM,QAAA,mCACA,CAAAywC,iBAAA,GAAA7mC,KAAAlK,EAAAM,QAAA,wDCvBAX,MAAA8gC,QAAA,kBAAA,CAAA,YAAA,aAAA,KAAA,kBAAA,gBACA,SAAAC,EAAA1gC,EAAAkN,EAAA2zB,EAAAD,GAEA,IAWAkoB,EACAC,EAZAC,EAAAtoB,EAAA,wBAAA,GAAA,CACA4H,MAAA,CAAA7G,OAAA,MAAAhN,SAAA,GACAzsB,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,4BACA35B,OAAA,CAAA05B,OAAA,OAAAC,IAAA,4BACA0B,OAAA,CAAA3B,OAAA,OAAAC,IAAA,4BACAunB,SAAA,CAAAxnB,OAAA,OAAAC,IAAA,8BACAwnB,OAAA,CAAAznB,OAAA,OAAAC,IAAA,4BACAynB,OAAA,CAAA1nB,OAAA,OAAAC,IAAA,4BACA0nB,4BAAA,CAAA3nB,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,mDA6CA,SAAA/X,EAAA1gB,EAAAV,GAKA,OAJAugD,GAAAC,GAAA9/C,IAAAV,IACAugD,EAAAloB,EAAA3tB,IAAA+1C,EAAA,CAAA//C,WAAAA,IACA8/C,EAAA9/C,GAEA6/C,EAqIA,MAAA,CACAn/B,OAAAA,EACA0/B,wBApIA,SAAApgD,EAAA2O,EAAArP,GACA,IAAAqP,EACA,OAAA+R,EAAA1gB,EAAAV,GAGA,IAAA+4B,EAAAp0B,EAAAq0B,QACA+D,EAAA,GAeA,OAdAA,EAAAl/B,SAAAk7B,EAAAE,QAEA7X,EAAA1gB,EAAAV,GAAAnC,SACAC,KAAA,SAAAjD,GACA,IAAA,IAAAmb,EAAA,EAAAA,EAAAnb,EAAAqB,OAAA8Z,IAAA,CACA,IAAA+a,EAAAl2B,EAAAmb,GACA+a,EAAA1hB,cAAAA,GACA0tB,EAAAniC,KAAAm2B,GAIAgI,EAAAhrB,QAAAgvB,KAGAA,GAgHAt9B,OA7GA,SAAA5E,EAAAigC,EAAAC,GACA,IAEA73B,EADAs9C,GAAA3lD,EAAA6F,WACA,GAGA6/C,EADAA,GACA,GAKAloB,EAAA54B,OACAghD,EACAv9C,EACArI,EACAigC,EACAC,IA8FAv7B,OA3FA,SAAA3E,EAAAigC,EAAAC,GACA1C,EAAA74B,OACAihD,EACAF,EACA1lD,EACAigC,EACAC,IAsFA18B,OAnFA,SAAAxD,EAAAkgC,GACA1C,EAAAh6B,OACAoiD,EACAF,EACA1lD,EACA,KACAkgC,EACA,CAAAv2B,UAAA3J,EAAA2J,UAAAskC,iBAAAjuC,EAAAiuC,oBA6EAiY,iBA1EA,SAAAlmD,EAAAigC,EAAAC,GACA0lB,EAAAC,SAAA7lD,EAAA,SAAAmmD,GACAlmB,IACAzC,EAAAmD,cAAA+kB,EAAAS,GACAlmB,EAAAkmB,GACA1oB,EAAAoB,WACAjiC,EAAAM,QAAA,kDAGA,SAAA0Q,GACAsyB,EACAA,EAAAtyB,EAAA5N,MAEAy9B,EAAAiB,YACA9hC,EAAAM,QAAA,+CACAugC,EAAAkB,eAAA/wB,EAAA5N,UA4DAomD,iBAvDA,SAAApmD,EAAAigC,EAAAC,GAEA0lB,EAAAE,OAAA9lD,EAEA,SAAAmmD,GACA3oB,EAAAmD,cAAA+kB,EAAAS,GACAlmB,GACAA,EAAAkmB,GAEA1oB,EAAAoB,WACAjiC,EAAAM,QAAA,+CAGA,SAAA0Q,GACAsyB,EACAA,EAAAtyB,EAAA5N,MAEAy9B,EAAAiB,YACA9hC,EAAAM,QAAA,6CACAugC,EAAAkB,eAAA/wB,EAAA5N,UAqCAqmD,kBAhCA,SAAArmD,EAAAigC,EAAAC,GAEA0lB,EAAAG,OAAA/lD,EAEA,SAAAmmD,GACA3oB,EAAAmD,cAAA+kB,EAAAS,GACAlmB,GACAA,EAAAkmB,GAEA1oB,EAAAoB,WACAjiC,EAAAM,QAAA,mDAGA,SAAA0Q,GACAsyB,EACAA,EAAAtyB,EAAA5N,MAEAy9B,EAAAiB,YACA9hC,EAAAM,QAAA,iDACAugC,EAAAkB,eAAA/wB,EAAA5N,UAcAgmD,4BA1LA,SAAAttC,EAAA5a,GAEA,OAAA0/B,EAAAkC,UACA,8BACAkmB,EACA,CACAltC,SAAAA,EACA5a,OAAAA,KAoLAwoD,4BAhLA,SAAAtmD,GAEA,IAAAumD,EAAA,CACA,CAAA7hD,GAAA,IAAAvH,MAAAP,EAAAM,QAAA,qBAAA2N,KAAA,UACA,CAAAnG,GAAA,IAAAvH,MAAAP,EAAAM,QAAA,qBAAA2N,KAAA,UACA,CAAAnG,GAAA,IAAAvH,MAAAP,EAAAM,QAAA,qBAAA2N,KAAA,UACA,CAAAnG,GAAA,IAAAvH,MAAAP,EAAAM,QAAA,gBAAA2N,KAAA,WAEArE,EAAA,GAaA,OAXAxI,EAAAkJ,QAAAlH,EAAA,SAAAk2B,GACA1vB,EAAAzG,KAAA,CACA0wB,EAAA,CACA,CAAA3vB,EAAAo1B,EAAAswB,WACA,CAAA1lD,EAAAo1B,EAAAuwB,kBACA,CAAA3lD,EAAAo1B,EAAAwwB,oCACA,CAAA5lD,EAAAo1B,EAAAywB,qCAKA,CACAJ,KAAAA,EACA//C,KAAAA,QCnDAjK,MAAA8gC,QAAA,qBAAA,CAAA,YAAA,aAAA,kBAAA,gBACA,SAAAC,EAAA1gC,EAAA6gC,EAAAD,GAEA,IAKAopB,EACAjB,EANAkB,EAAAvpB,EAAA,4BAAA,GAAA,CACA4H,MAAA,CAAA7G,OAAA,MAAAhN,SAAA,GACAy1B,KAAA,CAAAzoB,OAAA,OAAAC,IAAA,gCAmCA,MAAA,CACA/X,OA9BA,SAAA1gB,GAKA,OAJA+gD,GAAAjB,GAAA9/C,IACA+gD,EAAAppB,EAAA3tB,IAAAg3C,EAAA,CAAAhhD,WAAAA,IACA8/C,EAAA9/C,GAEA+gD,GA0BAG,WAvBA,SAAA/mD,EAAAigC,EAAAC,GACA2mB,EAAAC,KAAA,CAAAE,WAAAhnD,EAAAgnD,WAAA/Y,iBAAAjuC,EAAAiuC,kBACA,SAAAkY,GACAnmD,EAAA6F,YAAA8/C,GACAnoB,EAAAoD,cAAAgmB,EAAA5mD,EAAAgnD,YAEA/mB,EAAAkmB,GACA1oB,EAAAoB,WACAjiC,EAAAM,QAAA,4CAEA,SAAA0Q,GACAsyB,EACAA,EAAAtyB,EAAA5N,MAEAy9B,EAAAiB,YACA9hC,EAAAM,QAAA,0CACAugC,EAAAkB,eAAA/wB,EAAA5N,cCnCAzD,MAAA8gC,QAAA,gBAAA,CAAA,YAAA,gBACA,SAAAC,EAAAE,GAEA,IAMAue,EANAkL,EAAA3pB,EAAA,6BAAA,GAAA,CACA4H,MAAA,CAAA7G,OAAA,MAAAhN,SAAA,GACAkO,KAAA,CAAAlB,OAAA,OAAAC,IAAA,+BACA0B,OAAA,CAAA3B,OAAA,OAAAC,IAAA,mCA0CA,MAAA,CACAx1B,YAtCA,WAIA,OAFAizC,EADAA,GACAve,EAAA3tB,IAAAo3C,EAAA,KAqCA1nB,KApBA,SAAAv/B,EAAAigC,EAAAC,GACA1C,EAAA+B,KACA0nB,EACAlL,EACA/7C,EACAigC,EACAC,IAeA18B,OAZA,SAAAxD,EAAAkgC,GACA1C,EAAAh6B,OACAyjD,EACAlL,EACA/7C,EACA,KACAkgC,IAOArwB,IAlCA,SAAAnL,GACA,GAAAq3C,EACA,IAAA,IAAA5gC,EAAA,EAAAA,EAAA4gC,EAAA16C,OAAA8Z,IAAA,CACA,IAAA+rC,EAAAnL,EAAA5gC,GACA,GAAA+rC,EAAAxiD,KAAAA,EACA,OAAAwiD,EAIA,OAAA,UC3BA3qD,MAAA8gC,QAAA,eAAA,CAAA,YAAA,gBACA,SAAAC,EAAAE,GACA,IAMA2pB,EANAC,EAAA9pB,EAAA,qBAAA,GAAA,CACA4H,MAAA,CAAA7G,OAAA,MAAAhN,SAAA,GACAkO,KAAA,CAAAlB,OAAA,OAAAC,IAAA,uBACA0B,OAAA,CAAA3B,OAAA,OAAAC,IAAA,2BAIA+oB,EAAA,GAgBA,SAAAC,EAAAC,GACA,IAAAC,EAAA,GACA,GAAAD,EACA,IAAA,IAAA/1B,EAAA,EAAAA,EAAA+1B,EAAAlmD,OAAAmwB,IACAg2B,EAAAD,EAAA/1B,KAAA,EAIA,OAAAg2B,EA2DA,SAAAC,EAAAvkD,GAiBA,OAfA,KAAAA,EAAAwkD,gBAAAC,mBACA,KAAAzkD,EAAAwkD,gBAAAC,mBACA,KAAAzkD,EAAAwkD,gBAAAC,oBAEAzkD,EAAAwkD,gBAAAv/B,SAAA,CACAM,OAAA,CAAAm/B,QAAA,CAAAt/B,UAAA,EAAAC,QAAA,GAAAs/B,QAAA,CAAAv/B,UAAA,EAAAC,QAAA,GAAAu/B,QAAA,CAAAx/B,UAAA,EAAAC,QAAA,GAAAw/B,QAAA,CAAAz/B,UAAA,EAAAC,QAAA,GAAAy/B,QAAA,CAAA1/B,UAAA,EAAAC,QAAA,IACA7H,OAAA,CAAAknC,QAAA,CAAAt/B,UAAA,EAAAC,QAAA,GAAAs/B,QAAA,CAAAv/B,UAAA,EAAAC,QAAA,GAAAu/B,QAAA,CAAAx/B,UAAA,EAAAC,QAAA,GAAAw/B,QAAA,CAAAz/B,UAAA,EAAAC,QAAA,GAAAy/B,QAAA,CAAA1/B,UAAA,EAAAC,QAAA,IACA5H,QAAA,CAAAinC,QAAA,CAAAt/B,UAAA,EAAAC,QAAA,GAAAs/B,QAAA,CAAAv/B,UAAA,EAAAC,QAAA,GAAAu/B,QAAA,CAAAx/B,UAAA,EAAAC,QAAA,GAAAw/B,QAAA,CAAAz/B,UAAA,EAAAC,QAAA,GAAAy/B,QAAA,CAAA1/B,UAAA,EAAAC,QAAA,IACA3H,UAAA,CAAAgnC,QAAA,CAAAt/B,UAAA,EAAAC,QAAA,GAAAs/B,QAAA,CAAAv/B,UAAA,EAAAC,QAAA,GAAAu/B,QAAA,CAAAx/B,UAAA,EAAAC,QAAA,GAAAw/B,QAAA,CAAAz/B,UAAA,EAAAC,QAAA,GAAAy/B,QAAA,CAAA1/B,UAAA,EAAAC,QAAA,IACA1H,SAAA,CAAA+mC,QAAA,CAAAt/B,UAAA,EAAAC,QAAA,GAAAs/B,QAAA,CAAAv/B,UAAA,EAAAC,QAAA,GAAAu/B,QAAA,CAAAx/B,UAAA,EAAAC,QAAA,GAAAw/B,QAAA,CAAAz/B,UAAA,EAAAC,QAAA,GAAAy/B,QAAA,CAAA1/B,UAAA,EAAAC,QAAA,IACAzH,OAAA,CAAA8mC,QAAA,CAAAt/B,UAAA,EAAAC,QAAA,GAAAs/B,QAAA,CAAAv/B,UAAA,EAAAC,QAAA,GAAAu/B,QAAA,CAAAx/B,UAAA,EAAAC,QAAA,GAAAw/B,QAAA,CAAAz/B,UAAA,EAAAC,QAAA,GAAAy/B,QAAA,CAAA1/B,UAAA,EAAAC,QAAA,IACAxH,SAAA,CAAA6mC,QAAA,CAAAt/B,UAAA,EAAAC,QAAA,GAAAs/B,QAAA,CAAAv/B,UAAA,EAAAC,QAAA,GAAAu/B,QAAA,CAAAx/B,UAAA,EAAAC,QAAA,GAAAw/B,QAAA,CAAAz/B,UAAA,EAAAC,QAAA,GAAAy/B,QAAA,CAAA1/B,UAAA,EAAAC,QAAA,MAIArlB,EAGA,MAAA,CACA4F,YAtGA,SAAA3D,GAWA,OAVAgiD,IAAAhiD,IACAkiD,EAAA,GACAF,EAAA3pB,EAAA3tB,IAAAu3C,EAAA,GAAA,SAAA35B,GACA,IAAA,IAAA+C,EAAA,EAAAA,EAAA/C,EAAApsB,OAAAmvB,IAAA,CACA,IAAAy3B,EAAAx6B,EAAA+C,GACAy3B,EAAAT,GAAAF,EAAAW,EAAAC,kBACAb,EAAAY,EAAAvjD,IAAAujD,MAIAd,GA4FAt3C,IAjEA,SAAAnL,GACA,OAAA2iD,EAAA3iD,IAiEA66B,KA9DA,SAAAv/B,EAAAigC,EAAAC,GAEAlgC,EAAAkoD,iBAnBA,SAAAV,GACA,IAAAD,EAAA,GACA,GAAAC,EACA,IAAA,IAAAzxB,KAAAyxB,EACAA,EAAAzxB,IACAwxB,EAAAxnD,KAAAg2B,GAKA,OAAAwxB,EASAY,CAAAnoD,EAAAwnD,IAEAhqB,EAAA+B,KACA6nB,EACAD,EACAnnD,EACA,SAAAA,GACAA,EAAAwnD,GAAAF,EAAAtnD,EAAAkoD,kBACAjoB,GACAA,EAAAjgC,IAGAkgC,IAiDA18B,OA9CA,SAAAxD,EAAAkgC,GACA1C,EAAAh6B,OACA4jD,EACAD,EACAnnD,EACA,KACAkgC,IAyCA58B,UAtCA,WACA,OAAAmkD,EAAA,CACA/iD,IAAA,EACAgC,KAAA,GACAuzC,YAAA,GACAmO,SAAA,EACAZ,GAAA,GACAE,gBAAA,CACAC,kBAAA,QA+BAF,uBAAAA,MCxHAlrD,MAAAkF,WAAA,wBAAA,CAAA,SAAA,aAAA,KAAA,UAAA,oBAAA,gBAAA,cACA,SAAAG,EAAAhF,EAAAkN,EAAAE,EAAAzB,EAAAiB,EAAAS,GAEA,IAAAo+C,EAAA,KACA7/C,GAAA,EACAC,GAAA,EAGA,SAAA8O,EAAApS,GACA,IACAwR,EACAW,EAFA+wC,IACA1xC,EAAApO,EAAAO,YAAAu/C,EAAApiD,SAAAd,GACAmS,EAAA9N,EAAAvC,gBAAAohD,EAAApiD,UACA6D,EAAAiD,IAAA,CAAA4J,EAAA3T,SAAAsU,EAAAtU,WAAAC,KAAA,SAAAob,GACAzc,EAAA0mD,iBAAA9+C,EAAA++C,iCAAAjxC,EAAAX,GAwFA,SAAAzU,EAAAyU,GACA,GAAAzU,EAAAmD,aAAA,CAEAnD,EAAAmD,aAAAqyC,cAGA,IADA,IACAv8B,EADAjZ,EAAAmD,aAAAmjD,cACA,EAAA,GAAArtC,EAAAA,IACAjZ,EAAAmD,aAAAojD,aAAAttC,GAGAutC,EAAA1qD,EAAAyvC,QAAA92B,EAAA,aACA3Y,EAAAkJ,QAAAwhD,EAAA,SAAAvgC,GACAjmB,EAAAmD,aAAAsjD,UAAA,CACAvmD,UAAA+lB,EAAA8lB,iBACA5rC,QAAA2H,EAAA,OAAAA,CAAAme,EAAA5V,UAAA,aACAhQ,MAAA,OACAqmD,UAAA,SACAl+C,mBAAA,SAAAC,GAOA,QAFAA,EAAAwd,EAAA8lB,mBAAA,CAAA4a,iBAAA,OAEAA,kBACA,KAAA,KACA,MAAA,GACA,KAAA,EACA,MAAA,IACA,KAAA,EACA,MAAA,IACA,KAAA,EACA,MAAA,IACA,KAAA,EACA,MAAA,WAMA3mD,EAAAmD,aAAAsjD,UAAA,CACAvmD,UAAA,KACAC,QAAA,MAGAH,EAAAmD,aAAAie,aAnIAwlC,CAAAlnD,EAAAmnD,6BAAApyC,GACAlO,GAAA,KAVA7G,EAAA0mD,iBAAA,GAqBA1mD,EAAA/E,IAAA,wBAAA,SAAA4F,EAAAumD,GACAA,EAAAnf,OAMAphC,IALAD,IACA6/C,IAAAW,EAAAnf,SAAAmf,EAAA7jD,UACAkjD,EAAAW,EAAAnf,OACAtyB,EAAAyxC,EAAA7jD,WAEA,GAKAvD,EAAA0mD,iBAAA,GAEAD,EAAAW,EAAAnf,SAGAjoC,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAA4/C,GACA9wC,KAIA/O,GAAA,IAIA5G,EAAAmnD,6BAAA,CACAriD,KAAA,mBACAuiD,aAAA,CACArkC,SAAA,GAEAziB,QAAA,CAAA,CACAC,UAAA,WACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAE,UAAA,MACA0mD,UAAA,EACAC,OAAA,EACA5mD,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,cACA,CACAoC,UAAA,eACAC,QAAAzF,EAAAM,QAAA,sBACAsF,UAAA,OACA0mD,UAAA,EACApiC,SAAA,IAEAsiC,iBAAA,EACAxY,cAAA,EACAtlC,eAAA,SAAA7I,GACA,IAAA4mD,EAAA5mD,EAAA8I,YAAA,EAEA,SAAA9I,EAAAsI,SAAA,EAAAs+C,GACA5mD,EAAA+I,YAAAC,UAAA,WACA,IAAArJ,EAAAR,EAAAmnD,6BAAA1jD,aAAAgF,aAAAg/C,EAAA,aACAC,EAAAt/C,EAAA,mBAAAA,CAAAvH,EAAAzC,KAAAoC,GAAAymD,kBACAU,EAAAv/C,EAAA,iBAAAA,CAAAvH,EAAAzC,KAAAoC,GAAAonD,gBAEA/mD,EAAA+I,YAAAG,KAAA,QADA49C,EAAAA,EAAA,KAAAD,EAAA,MAKA,SAAA7mD,EAAAsI,SAAA,IAAAtI,EAAA8I,aACA9I,EAAAzC,KAAAypD,cACAhnD,EAAA+I,YAAAH,SAAA,aC/FA9O,MAAAkF,WAAA,wBAAA,CAAA,SAAA,SAAA,YAAA,mBAAA,oBAAA,wBACA,aAAA,WAAA,gBAAA,cAAA,qBAAA,cACA,SAAAG,EAAAC,EAAAiD,EAAAhB,EAAAyE,EAAAvD,EACApI,EAAAwT,EAAAnD,EAAApI,EAAA6kD,EAAAz/C,GAGApF,EAAAiE,aAAA,GAEA,IAAA6gD,EAAA/nD,EAAAsB,MAAA+C,SAEArE,EAAAsB,MAAA+C,SAAA,EACArE,EAAAgoD,QAAA,GACAhoD,EAAAioD,gBAAA,EAEA,IAAAC,EAAA,CACAC,eAAA,IAaA,SAAAC,EAAA9mD,GACA,IAAA0C,EAAAf,EAAAgL,IAAA3M,EAAA2C,YAEAD,GAAAA,EAAAqkD,kBACAP,EAAAvmC,QAAAvd,EAAAqkD,mBAAAjnD,SAAAC,KAAA,SAAAinD,GACAC,EAAAjnD,EAAAgnD,EAAAh0C,MAAA,MAIAi0C,EAAAjnD,EAAA,IAIA,SAAAinD,EAAAjnD,EAAAknD,GACAN,EAAA,CACAv3C,UAAArP,EAAAqP,UACAqtB,QAAA18B,EAAA08B,QACA/5B,WAAA3C,EAAA2C,WACAkkD,eAAAvtD,QAAA2G,KAAAD,EAAA6mD,gBACAM,eAAAnnD,EAAAmnD,gBAGA9hD,EAAA+hD,wBACAR,GAAA9mD,SAAAC,KAAA,SAAAjD,GACA4B,EAAAgoD,QAAA5pD,EAEA4B,EAAA2oD,oBAAAllD,aACA+K,EAAA,WACAxO,EAAA2oD,oBAAAllD,aAAAmlD,YAEAxsD,EAAAkJ,QAAAkjD,EAAA,SAAAK,GACA,IAAAC,EAAA1sD,EAAAsK,KAAA1G,EAAAgoD,QAAA,SAAAe,GACA,OAAAhtD,OAAAgtD,EAAAp4C,WAAAC,QAAA,OAAA0N,OAAAuqC,KAEAC,GACA9oD,EAAA2oD,oBAAAllD,aAAAulD,aAAA,CAAAF,EAAAzc,qBAIArsC,EAAAipD,oBAAA,EACAjpD,EAAA6H,QAAA,GACA,MAEA7H,EAAAipD,oBAAA,EACAjpD,EAAA6H,QAAA,IAEA,SAAAlF,MAyEA,SAAAumD,EAAA9qD,GACA4B,EAAA6C,UAAA,EAEA,IAAAsmD,EAAAvuD,QAAA2G,KAAAnD,GACAgrD,EAAAppD,EAAAqpD,qBAAA5lD,aAAA+sC,sBACA8Y,EAAAltD,EAAA+a,IAAAiyC,EAAA,aACAD,EAAAG,WAAAA,EAEAC,EAAAvpD,EAAA2oD,oBAAAllD,aAAA+sC,sBACAwX,EAAA5rD,EAAA+a,IAAAoyC,EAAA,aACAJ,EAAAnB,QAAAA,EAEA9kD,EAAAsmD,eAAAL,EAEA,WACAnpD,EAAA0C,QACA1C,EAAAypD,kBACAzpD,EAAAypD,oBAIA,SAAArrD,GACA4B,EAAA4C,YAAAxE,EACA4B,EAAA6C,UAAA,IAvJA7C,EAAA6E,iBAAA,SAAAZ,GACAmkD,EAAApoD,EAAAsB,QAGAtB,EAAA6H,QAAA,EAEA7H,EAAA0pD,gBAAA,EACA1pD,EAAAipD,oBAAA,EAqDA7lD,EAAAiC,gBAAA0iD,GAAA3mD,SAAAC,KACA,SAAAsV,GACA3W,EAAA2pD,iBAAAhzC,EAEA,IAAAizC,EAAAjjD,EAAAjF,UAAA1B,EAAAsB,OAAA,EAAA,WACAtB,EAAAsB,MAAAqP,UAAAi5C,EAAAj5C,UACA3Q,EAAAsB,MAAA08B,QAAA4rB,EAAA5rB,QACAh+B,EAAAsB,MAAA6mD,eAAAyB,EAAAzB,eACAnoD,EAAAsB,MAAAmnD,eAAAmB,EAAAnB,eACAzoD,EAAA6pD,gBAAA,IAGA7pD,EAAAqpD,qBAAA5lD,aACA+K,EAAA,WACAxO,EAAAqpD,qBAAA5lD,aAAAmlD,YAEAR,EAAApoD,EAAAsB,OAEAtB,EAAA6F,OAAA,QAAA,SAAAvE,GACA,IAAAg+B,EAAAvjC,OAAA+tD,SAAA/tD,OAAAuF,EAAA08B,SAAAsB,KAAAvjC,OAAAuF,EAAAqP,aAEAo5C,EAAAzqB,EAAAhrB,OAAAgrB,EAAAhrB,OAAA,KAAA,GACA01C,EAAA1qB,EAAAxL,QAAAwL,EAAAxL,QAAA,KAAA,GACAm2B,EAAA3qB,EAAAvL,UAAAuL,EAAAvL,UAAA,KAAA,GACAm2B,EAAA5qB,EAAA6qB,SAAA7qB,EAAA6qB,SAAA,KAAA,GACAC,EAAA9qB,EAAA+qB,QAAA/qB,EAAA+qB,QAAA,KAAA,GAEArqD,EAAAsqD,aAAAF,EAAAF,EAAAH,EAAAC,EAAAC,EAEArvD,QAAA2H,OAAAjB,EAAA6mD,eAAAD,EAAAC,iBACApsD,OAAAuF,EAAAqP,WAAA2N,OAAA4pC,EAAAv3C,YACA5U,OAAAuF,EAAA08B,SAAA1f,OAAA4pC,EAAAlqB,UACA18B,EAAAmnD,gBAAAP,EAAAO,gBAEAnnD,EAAAqP,WAAArP,EAAA08B,SACAjiC,OAAAuF,EAAAqP,WAAAya,SAAA9pB,EAAA08B,WACAh+B,EAAA6H,QAAA,EACAugD,EAAA9mD,MAIA,GAEAtB,EAAA0pD,gBAAA,EAEA1pD,EAAA6H,QAAA,GACA,MAEA7H,EAAA0pD,gBAAA,EACA1pD,EAAA6H,QAAA,IAGA,SAAAlF,GACA3C,EAAA6H,QAAA,IAGA7H,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAuqD,mBAAA,SAAA55C,GACAhK,EAAA6jD,uBAAAxqD,EAAAsB,MAAAqP,IAKA3Q,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YA8BArC,EAAAwC,aAAA,SAAApE,GAEA4B,EAAA6C,UAIAwI,EAAA6B,eAAA,CACA7R,MAAA,yBACA8R,QAAAnS,EAAAM,QAAA,2BACA8R,QAAA,CAAA,CACAlI,KAAA,kBACA,CACAA,KAAA,eACAE,SAAA,WAAA8jD,EAAA9qD,SAKA4B,EAAAyqD,2BAAA,WACA,OAAA,GAGAzqD,EAAAq6C,WAAA,CACApxC,KAAA,GAGAjJ,EAAA0qD,sBAAAxoD,EAAAE,SAAAsoD,sBACA1qD,EAAAmC,sBAAAD,EAAAE,SAAAD,sBAEAnC,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,wCACA,CACAzG,MAAA,gBACAyG,SAAA,yCACA,CACAzG,MAAA,mBACAyG,SAAA,gDACA,CACAzG,MAAA,0BACAyG,SAAA,uDACA,CACAzG,MAAA,kBACAyG,SAAA,4CACA,CACAzG,MAAA,sBACAyG,SAAA,+CACA,CACAzG,MAAA,mBACAyG,SAAA,4CACA,CACAzG,MAAA,gBACAyG,SAAA,qDACA,CACAzG,MAAA,qBACAyG,SAAA,gEACA,CACAzG,MAAA,0BACAyG,SAAA,gDACA,CACAzG,MAAA,mBACAyG,SAAA,kDAGAI,EAAAE,SAAAuoD,8BACAx8C,EAAA/R,EAAAwuD,UAAA5qD,EAAAiG,WAAA,CAAA5K,MAAA,qBAEA2E,EAAAiG,WAAA8N,OAAA5F,EAAA,EAAA,CACA9S,MAAA,gCACAyG,SAAA,2DAKA9B,EAAAiG,WAAAlE,UAAA,EAEA/B,EAAAkG,wBAAA,SAAAC,GACA/J,EAAAwF,OAAA5B,EAAAsB,MAAA8E,UAAA,GAAA,CAAAC,SAAAF,EAAAE,YAsBA,IAAAC,EAAArG,EAAA,CACAL,YAAA,4CACA4B,OArBAxB,EAAAuG,kBAAA,WACAD,EAAAlF,SAAAC,KAAA,WACAiF,EAAAtG,OAAAwG,mBAAA,SAAAJ,GAEApG,EAAAsB,MAAA8E,WACApG,EAAAsB,MAAA8E,SAAA,IAGAxL,QAAA0K,QAAAc,EAAA,SAAAK,GACArK,EAAAsK,KAAA1G,EAAAsB,MAAA8E,SAAA,CAAAC,SAAAI,EAAAJ,YAEArG,EAAAsB,MAAA8E,SAAAjI,KAAAsI,MAIAH,EAAA9E,WAOAQ,MAAAhC,EAAAiC,SAGAjC,EAAA6qD,wBAAA,WACA7qD,EAAAsB,MAAAwpD,sBAAA3sD,KAAA,CACAqM,OAAA,KACAugD,iBAAA,KACAC,QAAA,KACAC,2BAAA,GAAAjrD,EAAAsB,MAAAwpD,sBAAArrD,OAAA,EAAA,QAIAO,EAAAkrD,2BAAA,SAAA3kC,GACApY,EAAA/R,EAAA2T,QAAA/P,EAAAsB,MAAAwpD,sBAAAvkC,IACA,EAAApY,GACAnO,EAAAsB,MAAAwpD,sBAAA/2C,OAAA5F,EAAA,IAIAnO,EAAA2oD,oBAAA,CACA7jD,KAAA,UACAkgB,QAAA,mBACAzkB,QAAA,CACA,CAAA4qD,UAAA,mBAAAzqD,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAjE,OAAA,CAAAsI,IAAA,sBAAApE,MAAA,QAAAC,UAAA,OACA,CAAAJ,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,OAAAjE,OAAA,CAAAsI,IAAA,WAEAiQ,UAAA,CACA66B,KAAA,YAEAvsB,eAAA,cAKAtjB,EAAAqpD,qBAAA,CACAvkD,KAAA,WACAvE,QAAA,CACA,CAAA4qD,UAAA,YAAAzqD,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SACAE,UAAA,MACAgI,mBAAA,SAAAxK,GACA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,sBAGA8K,cAAA,SAAArI,GACA,QAAAA,EAAAsI,SACAtI,EAAAuI,UAAAC,iBAAAxI,EAAAyI,UACA8hD,+BACAvqD,EAAA2I,WAAAC,SAAA,eAIAuL,UAAA,CACA66B,KAAA,YAEAvsB,eAAA,WACAtjB,EAAAqpD,qBAAA5lD,aAAAmlD,iBC5UAjuD,MAAAkF,WAAA,cAAA,CAAA,SAAA,SAAA,UAAA,aAAA,UAAA,cACA,YAAA,cAAA,mBAAA,gBAAA,wBACA,SAAAG,EAAAC,EAAAkI,EAAAnN,EAAAoN,EAAAnF,EAAAC,EAAAC,EAAAjB,EAAA8gD,EACA5/C,GASA,SAAA2gB,IACA/jB,EAAAqrD,WAAAjqD,UAIApB,EAAAqrD,WAAAjqD,SAAAC,KAAA,WACArB,EAAAokB,aAAAknC,qBAIAtrD,EAAAooC,QAAA3oC,OAAA,EACAO,EAAAooC,QAAAjqC,KAAAsf,MAAAzd,EAAAooC,QACAhsC,EAAAkoB,OAAAtkB,EAAAqrD,WAAA,SAAA/4C,GACA,OAAAA,EAAAg5C,qBAAAtrD,EAAAokB,aAAAknC,yBANAtrD,EAAAooC,QAAA3oC,OAAA,EACAO,EAAAooC,QAAAjqC,KAAAsf,MAAAzd,EAAAooC,QAAApoC,EAAAqrD,aASArrD,EAAAurD,gBAAAvrD,EAAAooC,UAQA,SAAAojB,EAAAvjB,EAAA1kC,KACAvD,EAAAymD,eAAAxe,IAEAjoC,EAAAM,aAAAmD,cACAzD,EAAAM,aAAAmD,aAAAC,iBAGA1D,EAAA2D,WAAA,wBAAA,CAAAskC,OAAAA,EAAA1kC,UAAAA,IAeA,SAAA6N,IACApR,EAAAiE,aACAjE,EAAAqrD,WAAAnoD,EAAAgE,YAAAlH,EAAAiE,YAAA,GACA8f,IAEAynC,EAAA,OA3DAxrD,EAAA4D,uBAAAT,EAAAU,SAAA,kBACA7D,EAAAurD,gBAAA,GACAvrD,EAAAqrD,WAAA,GACArrD,EAAAooC,QAAA,GACApoC,EAAAokB,aAAA,CAAAknC,oBAAA,MACAtrD,EAAAyrD,YAAAzI,EAAA0I,kBAuBA1rD,EAAA6F,OAAA,mCAAA,SAAAC,EAAAC,GACAge,MACA,GAYA/jB,EAAA0qD,sBAAAxoD,EAAAE,SAAAsoD,sBAEAznD,EAAAc,kBACA1C,KAAA,SAAA2C,GACAhE,EAAAiE,WAAAD,EAAAlB,GAEA9C,EAAAqrD,WAAAnoD,EAAAgE,YAAAlH,EAAAiE,YAAA,GAEA8f,IACAynC,EAAA,QAYAxrD,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,MAGApR,EAAA/E,IAAA,wBAAA,SAAA4F,EAAAzC,GACA8E,EAAAyoD,oBAAA3rD,EAAAiE,WAAA7F,EAAA6pC,OAAA5jC,SAAArE,EAAAooC,QAAA,WACApoC,EAAAymD,eAAApiD,WAAAjG,EAAA6pC,OAAA5jC,WACAmnD,EAAAptD,EAAA6pC,QAAA,GACAjoC,EAAAM,aAAAmD,cACAzD,EAAAM,aAAAmD,aAAAa,WAAAlG,EAAA6pC,QAAA,QAMAjoC,EAAAuE,yBAAA,WACA,OAAAvE,EAAAwE,oBAAAxE,EAAAyE,sBAAA,KAGAzE,EAAAwE,kBAAA,WACA,OAAAxE,EAAAurD,gBACAnvD,EAAAyzB,OAAA7vB,EAAAurD,gBAAA,SAAA74B,EAAA/C,GACA,OAAA+C,EAAA/C,EAAAuY,QACA,GAEA,GAGAloC,EAAAyE,oBAAA,WACA,OAAAzE,EAAAurD,gBACAnvD,EAAAyzB,OAAA7vB,EAAAurD,gBAAA,SAAA74B,EAAA/C,GACA,OAAA+C,EAAA/C,EAAAwY,UACA,GAEA,KAGAnoC,EAAA2E,gBAAA,SAAAC,GACA5E,EAAAurD,gBAAA3mD,GAGA5E,EAAA6E,iBAAA,SAAAZ,GACAA,IACAjE,EAAAqrD,WAAAnoD,EAAAgE,YAAAlH,EAAAiE,YAAA,GACA8f,KAEAynC,EAAA,OAGAxrD,EAAAM,aAAA,CACAwE,KAAA,UACAvE,QAAA,CACA,CAAAC,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,wBAAAoF,SAAA,SAAAC,MAAA,SACA,CACAH,UAAA,eACAC,QAAAzF,EAAAM,QAAA,uBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,aAAAA,CAAAW,EAAAk6C,eAEAtiD,MAAA,SAEA,CAAAH,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,UACA,CAAAF,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAE,UAAA,OACA,CACAJ,UAAA,cACAC,QAAAzF,EAAAM,QAAA,qBACAoF,SAAA,OACAjE,OAAA,CAAAsI,IAAA,aACA6D,mBAAA,SAAAG,GACA,IAAA6iD,EAAA7vD,OAAAgN,EAAAR,aACA,OAAAqjD,EAAA3vD,UACA,IAAA2vD,EAAA19B,MAAA,IAAA09B,EAAAp3B,OAAAo3B,EAAAn3B,SACA1rB,EAAAR,aAEA5H,MAAA,QAEA,CAAAH,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,SACA,CAAAH,UAAA,aAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,SACA,CAAAH,UAAA,oBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UAAAC,MAAA,QACA,CAAAH,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UAAAC,MAAA,OAAAukB,QAAAllB,EAAA0qD,uBACA,CAAAlqD,UAAA,wBAAAC,QAAAzF,EAAAM,QAAA,yBAAAoF,SAAA,SAAAC,MAAA,QAAAukB,SAAA,IAEAhc,cAAA,SAAArI,GACA,IACAzC,EADA,SAAAyC,EAAAsI,UACA/K,EAAAyC,EAAAuI,UAAAC,iBAAAxI,EAAAyI,WACA4+B,QAAA9pC,EAAA+pC,UACAtnC,EAAA2I,WAAAC,SAAA,eAIAxE,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,4BACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,oBAAAV,EAAAU,SAAA,YACAuB,SAAA,SAAAhH,GA2BAiG,EA3BAjG,EAAAiG,SA4BA8D,EAAAuC,KAAA,mCAAArG,EACA,SAAA,mHA5BA,CACAa,KAAAlK,EAAAM,QAAA,oDACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,uBACAuB,SAAA,SAAAhH,GAaAiG,EAbAjG,EAAAiG,SAcAjB,EAAAiC,gBAAAhB,GACAjD,SAAAC,KAAA,SAAAjD,GACAhC,EAAAkJ,QAAAlH,EAAA,SAAAmH,GACAnC,EAAAoC,6BAAAD,EAAAE,4BAhBA,CACAP,KAAAlK,EAAAM,QAAA,YACA6J,UAAA,WACA,OAAAhC,EAAAU,SAAA,gBACAV,EAAAU,SAAA,8BACAV,EAAAU,SAAA,0BACAV,EAAAU,SAAA,kBAEAuB,SAAA,SAAAhH,GAmBAiG,EAnBAjG,EAAAiG,SAoBAnB,EAAA2oD,cAAAxnD,GAAAjD,SAAAC,KAAA,SAAA4mC,GACA6jB,EAAA1qD,SAAAC,KAAA,WACAyqD,EAAA9rD,OAAAsB,MAAA1G,QAAA2G,KAAA0mC,GACA6jB,EAAA9rD,OAAAypD,iBAAA,WACAr4C,KAEA06C,EAAAtqD,eAKAxB,EAAAymD,eAAA,GAEAzmD,EAAAiB,cAAA,SAAA7C,GACA4B,EAAAymD,eAAAroD,EACAotD,EAAAxrD,EAAAymD,iBAGAzmD,EAAAkB,UAAA,SAAA9C,GACA8E,EAAA2oD,cAAAztD,EAAAiG,UAAAjD,SAAAC,KAAA,SAAA4mC,GACA9mC,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAA2F,WAAA3F,EAAAooC,QACAjnC,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAA0mC,GACA9mC,EAAAnB,OAAAgG,aAAA,SAAA1E,GACAkqD,EAAAlqD,GAAA,IAEAH,EAAAK,YAKAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAA2F,WAAA3F,EAAAooC,QACAjnC,EAAAnB,OAAAsB,MAAA4B,EAAAxB,UAAA1B,EAAAiE,YAAA,GACA9C,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACA8E,EAAAtB,OAAAxD,EAAA4B,EAAAooC,QAAA,WACApoC,EAAAymD,eAAA,KACA+E,EAAA,SAIAxrD,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,mDACA,CACAzG,MAAA,mBACAyG,SAAA,qDACA,CACAzG,MAAA,oBACAyG,SAAA,qDACA,CACAzG,MAAA,qBACAyG,SAAA,wDAGAqB,EAAAU,SAAA,UAEA7D,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,kCACAyG,SAAA,mDAIA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,EAAAC,SAAAA,MAGA,IAAA5E,EAAAlB,EAAA,CACAL,YAAA,8BACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAIA6pD,EAAA7rD,EAAA,CACAL,YAAA,mCACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YC7RAtH,MAAAkF,WAAA,oBAAA,CAAA,SAAA,SAAA,YAAA,mBAAA,sBACA,SAAAG,EAAAC,EAAAiD,EAAAhB,EAAAoJ,GAEAA,EAAA+B,cACArN,EAAAsB,MAAA+C,WACArE,EAAAsB,MAAAyqD,sBAAAzgD,EAAA2C,IAAA,0BAAA,KAIAjO,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAAwC,aAAA,SAAApE,GAoBA,SAAAqE,EAAAnB,GACAtB,EAAA0C,QACA1C,EAAAgG,cACAhG,EAAAgG,aAAA1E,GAIA,SAAAqB,EAAAvE,GACA4B,EAAA4C,YAAAxE,EACA4B,EAAA6C,UAAA,EA3BA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEAyI,EAAA+B,aACArN,EAAAqC,UAAA0pD,uBAAA3tD,EAAA2tD,uBACAzgD,EAAAqC,IAAA,wBAAAvP,EAAA2tD,uBAIA3tD,EAAAiG,SAGAnB,EAAAH,OAAA3E,EAAA4B,EAAA2F,WAAAlD,EAAAE,GAFAO,EAAAF,OAAA5E,EAAA4B,EAAA2F,WAAAlD,EAAAE,KAkBA3C,EAAA6E,iBAAA,SAAAZ,KAIAjE,EAAAyqD,2BAAA,WACA,QAAAzqD,EAAAsB,MAAA+C,UAAArE,EAAAqC,UAAAsS,aAAA3U,EAAAsB,MAAAqT,YAGA3U,EAAAq6C,WAAA,CACApxC,KAAA,GAGAjJ,EAAA0qD,sBAAAxoD,EAAAE,SAAAsoD,sBACA1qD,EAAAmC,sBAAAD,EAAAE,SAAAD,sBAEAnC,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,wCACA,CACAzG,MAAA,gBACAyG,SAAA,yCACA,CACAzG,MAAA,mBACAyG,SAAA,gDACA,CACAzG,MAAA,0BACAyG,SAAA,uDACA,CACAzG,MAAA,kBACAyG,SAAA,4CACA,CACAzG,MAAA,sBACAyG,SAAA,+CACA,CACAzG,MAAA,mBACAyG,SAAA,4CACA,CACAzG,MAAA,gBACAyG,SAAA,sDAGAI,EAAAE,SAAAuoD,8BACAx8C,EAAA/R,EAAAwuD,UAAA5qD,EAAAiG,WAAA,CAAA5K,MAAA,qBAEA2E,EAAAiG,WAAA8N,OAAA5F,EAAA,EAAA,CACA9S,MAAA,gCACAyG,SAAA,2DAKA9B,EAAAiG,WAAAlE,UAAA,EAEA/B,EAAAkG,wBAAA,SAAAC,GACA/J,EAAAwF,OAAA5B,EAAAsB,MAAA8E,UAAA,GAAA,CAAAC,SAAAF,EAAAE,YAGArG,EAAAgsD,+BAAA,SAAAC,GACA,OAAAA,EAAAC,gBACA,KAAA,EACAD,EAAAE,SAAA,KACAF,EAAAG,YAAA,KACA,MACA,KAAA,EACAH,EAAAE,SAAA,EACAF,EAAAG,YAAA,KACA,MACA,KAAA,EACAH,EAAAE,SAAA,KACAF,EAAAG,YAAA,IAAA9vD,OAKA0D,EAAAqsD,4BAAA,SAAAC,GACAlwD,EAAAwF,OAAA5B,EAAAsB,MAAAirD,cAAA,GAAA,CAAA34C,UAAA04C,EAAA14C,aAmCA,IAAAN,EAAArT,EAAA,CACAL,YAAA,8DACA4B,OAlCAxB,EAAAwT,2BAAA,WACAF,EAAAlS,SAAAC,KAAA,WACAiS,EAAAtT,OAAA0T,gBAAA,SAAAC,GAEA3T,EAAAsB,MAAAirD,eACAvsD,EAAAsB,MAAAirD,aAAA,IAGA3xD,QAAA0K,QAAAqO,EAAA,SAAAlN,GACArK,EAAAsK,KAAA1G,EAAAsB,MAAAirD,aAAA,CAAA34C,UAAAnN,EAAAmN,aACA5T,EAAAsB,MAAAirD,aAAApuD,KAAA,CACAyV,UAAAnN,EAAAmN,UACA9O,KAAA2B,EAAA3B,KACAuzC,YAAA,KACAmU,YAAA/lD,EAAA+lD,YACAC,mBAAA,EACAC,WAAA,EACAC,gBAAA,CACAT,eAAA,EACAC,SAAA,GAEAS,cAAA,CACAV,eAAA,QAMA54C,EAAA9R,WAOAQ,MAAAhC,EAAAiC,SAsBAqE,EAAArG,EAAA,CACAL,YAAA,4CACA4B,OArBAxB,EAAAuG,kBAAA,WACAD,EAAAlF,SAAAC,KAAA,WACAiF,EAAAtG,OAAAwG,mBAAA,SAAAJ,GAEApG,EAAAsB,MAAA8E,WACApG,EAAAsB,MAAA8E,SAAA,IAGAxL,QAAA0K,QAAAc,EAAA,SAAAK,GACArK,EAAAsK,KAAA1G,EAAAsB,MAAA8E,SAAA,CAAAC,SAAAI,EAAAJ,YAEArG,EAAAsB,MAAA8E,SAAAjI,KAAAsI,MAIAH,EAAA9E,WAOAQ,MAAAhC,EAAAiC,SAGAjC,EAAA6qD,wBAAA,WACA7qD,EAAAsB,MAAAwpD,sBAAA3sD,KAAA,CACAqM,OAAA,KACAugD,iBAAA,KACAC,QAAA,KACAC,2BAAA,GAAAjrD,EAAAsB,MAAAwpD,sBAAArrD,OAAA,EAAA,QAIAO,EAAAkrD,2BAAA,SAAA3kC,GACApY,EAAA/R,EAAA2T,QAAA/P,EAAAsB,MAAAwpD,sBAAAvkC,IACA,EAAApY,GACAnO,EAAAsB,MAAAwpD,sBAAA/2C,OAAA5F,EAAA,OCxMAxT,MAAAkF,WAAA,mBAAA,CAAA,SAAA,SAAA,KAAA,aAAA,UAAA,UAAA,YAAA,cACA,cAAA,wBACA,SAAAG,EAAAC,EAAAiI,EAAAlN,EAAAoN,EAAAykD,EAAA3pD,EAAAmF,EAAAlF,EAAAC,GAEApD,EAAAymD,eAAA,KACA,IAAA7/C,GAAA,EACAC,GAAA,EACA7G,EAAA8sD,YAAA,GAEA9sD,EAAA/E,IAAA,wBAAA,SAAA4F,EAAAumD,GACAA,EAAAnf,OAKAphC,IAJAD,IACA5G,EAAAymD,iBAAAW,EAAAnf,SAAAmf,EAAA7jD,UACAvD,EAAA8sD,YAAAD,EAAAE,wBAAA,EAAA3F,EAAAnf,OAAA5jC,YAEA,GAKArE,EAAA8sD,YAAA,GAEA9sD,EAAAymD,eAAAW,EAAAnf,SAGAjoC,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAA7G,EAAAymD,iBACAzmD,EAAA8sD,YAAAD,EAAAE,wBAAA,EAAA/sD,EAAAymD,eAAApiD,UACAwC,GAAA,IAIAD,GAAA,IAIA5G,EAAAgtD,wBAAA,CACAloD,KAAA,cACAvE,QAAA,CACA,CACAC,UAAA,KACAC,QAAAzF,EAAAM,QAAA,cACAoF,SAAA,SACAwkB,SAAA,EACAovB,qBAAA,GAEA,CACA9zC,UAAA,eACAC,QAAAzF,EAAAM,QAAA,gBACAoF,SAAA,SACAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,kBAEA,CACAoC,UAAA,mBACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAE,UAAA,MACAgI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,sBAEA,CACAoC,UAAA,kBACAC,QAAAzF,EAAAM,QAAA,oBACAoF,SAAA,OACAjE,OAAA,CAAAb,KAAA,SACA+E,MAAA,QAEA,CACAH,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAAo5C,QAEAxhD,MAAA,SAEA,CAAAH,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAC,MAAA,SAEA,CACAH,UAAA,eACAC,QAAAzF,EAAAM,QAAA,sBACAoF,SAAA,OACAjE,OAAA,CAAAb,KAAA,SACA+E,MAAA,SAGAsE,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,+BACA6J,UAAA,SAAA6E,GAAA,OAAA7G,EAAAU,SAAA,iBAAAV,EAAAU,SAAA,8BACAuB,SAAA,SAAA4E,GASA6iD,EAAAtrC,QATAvX,EASAlH,IAAA1B,SAAAC,KAAA,SAAA4rD,GAEA,IAAAhlB,EAAAjoC,EAAAymD,eAEA,GAAAwG,EAAAtwB,OACA38B,EAAA4C,YAAA,CAAAqoB,OAAA,CAAA,CAAA9d,QAAAnS,EAAAM,QAAA,uCAGA4M,EAAAiD,IAAA,CAAAhK,EAAAC,SAAAgC,EAAA1B,UAAAumC,GAAA,KACA5mC,KAAA,SAAAjD,GACAmH,EAAAnH,EAAA,GACA6uD,EAAAC,YAAA,EAAAD,EAAAC,WAAAztD,SACA8F,EAAAwC,UAAAklD,EAAAC,WAAA,IAGA/rD,EAAAnB,OAAAioC,OAAAA,EACA9mC,EAAAnB,OAAAsB,MAAAiE,EAEApE,EAAAnB,OAAAmtD,sBAAA,EACAhsD,EAAAnB,OAAAiI,mBAAA,SAAAmlD,GAEAH,EAAAI,eAAA,EACAJ,EAAAK,sBAAAF,EAAA3nD,qBACAwnD,EAAAM,kBAAAxxD,SAAAG,SAEA,IAAA8vC,EAAA5jC,EAAA,iBAAAA,CAAA6/B,GACA1/B,EAAA0/B,EAAA1/B,YACA,KAAAH,EAAA,OAAAA,CAAA6/B,EAAA1/B,YAAA,aAAAuH,cAAA,IACA,GACAm9C,EAAAO,eAAAxhB,EAAAzjC,EACA0kD,EAAAtwB,OAAA,EAEAswB,EAAA7tC,OAAA,GAAA6tC,EAAA7tC,MAAA3f,SACAwtD,EAAA7tC,MAAA,IAGAquC,EAAAtqD,EAAAuqD,eAEAT,EAAA7tC,MAAAjhB,KAAA,CACA+G,KAAAlK,EAAAM,QAAA,gCAAA,KAAA2xD,EAAAO,eACAG,aAAA5xD,SAAAG,SACA0xD,gBAAAH,EAAA9K,OAAA,GACAkL,cAAAJ,EAAAtoC,WAGA0nC,EAAA9pD,OAAAkqD,GAAA7rD,SAAAC,KAAA,WACArB,EAAA8sD,YAAAD,EAAAE,wBAAA,EAAA/sD,EAAAymD,eAAApiD,aAGAlD,EAAAK,aAzDA,CACA0D,KAAAlK,EAAAM,QAAA,oBACA6J,UAAA,SAAA/G,GAAA,OAAA+E,EAAAU,SAAA,iBACAuB,SAAA,SAAAhH,GAAA4B,EAAA8tD,eAAA1vD,OAuEA,IAAA+C,EAAAlB,EAAA,CACAL,YAAA,2DACA4B,OAbAxB,EAAA8tD,eAAA,SAAAb,GACAc,EAAA3sD,SAAAC,KAAA,WACA0sD,EAAA/tD,OAAAguD,OAAAf,EAAAnqD,GACAirD,EAAA/tD,OAAAiuD,OAAA,KACAF,EAAA/tD,OAAAkuD,WAAA,SAAA5sD,GACAtB,EAAA8sD,YAAAD,EAAAE,wBAAA,EAAA/sD,EAAAymD,eAAApiD,WAEA0pD,EAAAvsD,WAOAQ,MAAAhC,EAAAiC,SAGA8rD,EAAA9tD,EAAA,CACAL,YAAA,gDACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YChLAtH,MAAAkF,WAAA,sBAAA,CAAA,SAAA,SAAA,aAAA,KAAA,gBAAA,oBAAA,cAAA,YACA,SAAAG,EAAAC,EAAAjF,EAAAkN,EAAAmD,EAAA1E,EAAAxD,EAAAD,GAEA,IAAAujD,EAAA,KACA7/C,GAAA,EACAC,GAAA,EAGA,SAAA8O,EAAApS,GACAkjD,IACAzmD,EAAAmuD,gBAAAxnD,EAAAO,YAAAu/C,EAAApiD,SAAAd,GAAA,GACAvD,EAAAmuD,gBAAA/sD,SAAAC,KAAA,SAAAjD,GAEA,IAAAqhC,EAAA,EACArjC,EAAAkJ,QAAAlJ,EAAAyvC,QAAAztC,EAAA,CAAA,aAAA,CAAA,QAAA,SAAAmoB,GACA,IAAAA,EAAAkiC,iBACAliC,EAAA6nC,SAAA3uB,EACAA,SAIA54B,GAAA,GAIA,SAAAwnD,EAAA9qD,GACAoS,EAAApS,GACAvD,EAAA2H,MAAA,wBAAA,CAAAsgC,OAAAjoC,EAAAymD,iBAiCA,SAAA6H,IACAC,EAAAntD,SAAAC,KAAA,WACAktD,EAAAvuD,OAAA6pD,gBAAA,EACA0E,EAAAvuD,OAAAsB,MAAAqF,EAAAjF,UAAA+kD,GACA8H,EAAAvuD,OAAAuH,OAAA,WACA8mD,GAAA,IAEAE,EAAA/sD,SAIA,SAAAgtD,IACAD,EAAAntD,SAAAC,KAAA,WACAktD,EAAAvuD,OAAA6pD,gBAAA,EACA0E,EAAAvuD,OAAAsB,MAAAqF,EAAAjF,UAAA+kD,GAAA,GACA8H,EAAAvuD,OAAAuH,OAAA,WACA8mD,GAAA,IAEAE,EAAA/sD,SA2CA,SAAAitD,EAAAvzD,GACAyL,EAAA/E,OACA1G,EACA,CACAuM,uBAAA,EACAC,qBAAA,GAEA,WACA2mD,GAAA,KAuBA,SAAAK,IACA,OAAAxrD,EAAA6/C,kBAAA0D,GAkBA,SAAAkI,EAAAzzD,GACA,IAeA0zD,EAfA,IAAA1zD,EAAAutD,eACAp9C,EAAA6B,eAAA,CACA7R,MAAA,2BACA8R,QAAA,0BACAC,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WAvEAuB,EAAA/E,OAwEA1G,EAtEA,CACAuM,uBAAA,EACAC,qBAAA,GAEA,WACA2mD,GAAA,WAuEAO,EAAAF,IAEArjD,EAAA6B,eAAA,CACA7R,MAAA,sCACA8R,QAAAnS,EAAAM,QAAA,sCAAAs0B,EAAAg/B,GACAxhD,QAAA,CAAA,CACAlI,KAAA,kBACA,CACAA,KAAA,iBACAE,SAAA,WA5DAuB,EAAAkoD,WA6DA3zD,EA5DAmJ,SA4DAnJ,EA5DAmxC,kBACAjrC,SAAAC,KAAA,SAAAytD,GACAnoD,EAAA/E,OACAktD,EACA,CACArnD,uBAAA,EACAC,qBAAA,GAEA,WACA2mD,GAAA,SAqDA,CACAnpD,KAAA,sBACAE,SAAA,WACAqpD,EAAAvzD,SApMA8E,EAAAmuD,gBAAA,GAwBAnuD,EAAA/E,IAAA,wBAAA,SAAA4F,EAAAumD,GACAA,EAAAnf,OAMAphC,IALAD,IACA6/C,IAAAW,EAAAnf,SAAAmf,EAAA7jD,UACAkjD,EAAAW,EAAAnf,OACAtyB,EAAAyxC,EAAA7jD,WAEA,GAKAvD,EAAAmuD,gBAAA,GAEA1H,EAAAW,EAAAnf,SAGAjoC,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAA4/C,GACA9wC,KAIA/O,GAAA,IA0JA5G,EAAA+uD,4BAAA,CACAjqD,KAAA,kBACAvE,QAAA,CACA,CACAC,UAAA,mBACAC,QAAA,IACAC,SAAA,SACAklB,gBAAA,EACA6rB,aAAA,SAAA7nC,EAAAolD,GACA7/C,EAAA,UAAA6/C,EAAA5wD,KAAAgwD,UAAA,IAAA,UAAA5b,SAAA5oC,IAEAjJ,MAAA,QAEA,CACAH,UAAA,eACAC,QAAA,GACAC,SAAA,SACAklB,gBAAA,EACA6rB,aAAA,SAAA7nC,EAAAolD,IACA,IAAAA,EAAA5wD,KAAAqqD,eACAt5C,EAAA,oDAAAqjC,SAAA5oC,GACAolD,EAAA5wD,KAAAqqD,gBACAt5C,EAAA,gEAAAqjC,SAAA5oC,IAGAjJ,MAAA,QAEA,CAAAH,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAjE,OAAA,CAAAsI,IAAA,sBAAApE,MAAA,QAAAC,UAAA,OACA,CAAAJ,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,OAAAjE,OAAA,CAAAsI,IAAA,SAAApE,MAAA,QACA,CAAAH,UAAA,gBAAAC,QAAAzF,EAAAM,QAAA,qBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAC,MAAA,QACA,CACAH,UAAA,YACAC,QAAAzF,EAAAM,QAAA,sBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAA,EAAAkmD,UAAAxvD,QAEAkB,MAAA,QAEA,CAAAH,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,YAAAoF,SAAA,WAEAyG,iBAAA,WAAA,OAAAnH,EAAAymD,gBACAv9C,cAAA,SAAArI,GACA,QAAAA,EAAAsI,SAEA,IADAtI,EAAAuI,UAAAC,iBAAAxI,EAAAyI,UACAm/C,gBACA5nD,EAAA2I,WAAAC,SAAA,eAIAxE,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,sBACA6J,UAAA,WACA,OAAAhC,EAAAU,SAAA,0BAEAuB,SAAA,WACAkpD,MAEA,CACAppD,KAAAlK,EAAAM,QAAA,0BACA6J,UAAA,WACA,OAAAhC,EAAAU,SAAA,0BAEAuB,SAAA,WACAopD,MAEA,CACAtpD,KAAAlK,EAAAM,QAAA,iBACA6J,UAAA,SAAAjK,GACA,QAAAA,GAAA,IAAAA,EAAAutD,gBAAAtlD,EAAAU,SAAA,0BAEAuB,SAAA,SAAAlK,GA3LA,IAAAkD,EAAAA,EA4LAlD,EA3LAqzD,EAAAntD,SAAAC,KAAA,WACAktD,EAAAvuD,OAAA6pD,gBAAA,EACA0E,EAAAvuD,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACAmwD,EAAAvuD,OAAAuH,OAAA,WACA8mD,GAAA,IAEAE,EAAA/sD,WAuLA,CACA0D,KAAAlK,EAAAM,QAAA,6BACA6J,UAAA,SAAAjK,GACA,QAAAA,GAAA,IAAAA,EAAAutD,gBAAA,IAAAvtD,EAAAutD,gBAAAtlD,EAAAU,SAAA,0BAEAuB,SAAA,SAAAlK,GAlNA,IACA4zD,EAAAA,EAAAnoD,EAAAkoD,WAkNA3zD,EAjNAmJ,SAiNAnJ,EAjNAmxC,kBACAnkC,EAAAiD,IAAA,CAAA2jD,EAAA1tD,SAAAmtD,EAAAntD,WAAAC,KACA,WACAktD,EAAAvuD,OAAA6pD,gBAAA,EACA0E,EAAAvuD,OAAAsB,MAAA1G,QAAA2G,KAAAutD,GACAP,EAAAvuD,OAAAuH,OAAA,WACA8mD,GAAA,IAEAE,EAAA/sD,WA2MA,CACA0D,KAAAlK,EAAAM,QAAA,mBACA6J,UAAA,SAAAjK,GACA,QAAAA,GAAA,IAAAA,EAAAutD,gBAAAtlD,EAAAU,SAAA,0BAEAuB,SAAA,SAAAlK,GACAyzD,EAAAzzD,KAEA,CACAgK,KAAAlK,EAAAM,QAAA,eACA6J,UAAA,SAAAjK,GACA,QAAAA,GAAA,IAAAA,EAAAutD,gBAAAtlD,EAAAU,SAAA,0BAEAuB,SAAA,SAAAlK,GAxJA,IAAAA,EAAAA,EAyJAA,EAxJAmQ,EAAA6B,eAAA,CACA7R,MAAA,4BACA8R,QAAAnS,EAAAM,QAAA,4BACA8R,QAAA,CAAA,CACAlI,KAAA,kBACA,CACAA,KAAA,cACAE,SAAA,WACAqpD,EAAAvzD,YAsJA8E,EAAAoH,iBAAA,GAEApH,EAAAiB,cAAA,SAAA7C,GACA4B,EAAAoH,iBAAAhJ,GAyBA,IAAAmwD,EAAAtuD,EAAA,CACAL,YAAA,uCACA4B,OAxBAxB,EAAAyB,SAAA,WACA,IAAAmtD,EAAAF,IAEArjD,EAAA6B,eAAA,CACA7R,MAAA,qBACA8R,QAAAnS,EAAAM,QAAA,wCAAAs0B,EAAAg/B,GACAxhD,QAAA,CAAA,CACAlI,KAAA,kBACA,CACAA,KAAA,wBACAE,SAAA,WACAopD,MAEA,CACAtpD,KAAA,wBACAE,SAAA,WACAkpD,WASAtsD,MAAAhC,EAAAiC,YC1VAtH,MAAAkF,WAAA,sBAAA,CAAA,SAAA,KAAA,SAAA,UAAA,aAAA,UAAA,cAAA,mBAAA,wBAAA,cACA,SAAAG,EAAAkI,EAAAjI,EAAAkI,EAAAnN,EAAAoN,EAAAjF,EAAAjB,EAAAkB,EAAAiF,GAEArI,EAAAsI,eAAApG,EAAAE,SAEApC,EAAAymD,eAAA,KACA,IAAA7/C,GAAA,EACAC,GAAA,EAGA,SAAAwnD,IACAruD,EAAA2H,MAAA,wBAAA,CAAAsgC,OAAAjoC,EAAAymD,iBAHAzmD,EAAAkvD,oBAAA,GAMAlvD,EAAA/E,IAAA,wBAAA,SAAA4F,EAAAumD,GACAA,EAAAnf,OAKAphC,IAJAD,IACA5G,EAAAymD,iBAAAW,EAAAnf,SAAAmf,EAAA7jD,UACAvD,EAAAkvD,oBAAA9rD,EAAAiC,gBAAA+hD,EAAAnf,OAAA5jC,YAEA,GAKArE,EAAAkvD,oBAAA,GAEAlvD,EAAAymD,eAAAW,EAAAnf,SAGAjoC,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAA7G,EAAAymD,iBACAzmD,EAAAkvD,oBAAA9rD,EAAAiC,gBAAArF,EAAAymD,eAAApiD,UACAwC,GAAA,IAIAD,GAAA,IAIA5G,EAAAmvD,gCAAA,CACArqD,KAAA,sBACAvE,QAAA,CACA,CACAC,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,QAAAC,UAAA,MACAgI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAQ,kBAAAzK,EAAA,cAAA,iBAAA,uBAEA,CAAAoC,UAAA,aAAAC,QAAAzF,EAAAM,QAAA,eAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,OAAAjE,OAAA,CAAAb,KAAA,SAAA+E,MAAA,OAAAukB,SAAA,GACA,CACA1kB,UAAA,eACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAAC,eAEArI,MAAA,SAEA,CAAAH,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,YAAAoF,SAAA,UACA,CAAAF,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,SACA,CAAAH,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,sCAAAoF,SAAA,OAAAjE,OAAA,CAAAb,KAAA,SAAA+E,MAAA,QACA,CAAAH,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,6BAAAoF,SAAA,UAAAC,MAAA,SAEAwG,iBAAA,WAAA,OAAAnH,EAAAymD,gBACAv9C,cAAA,SAAArI,GACA,QAAAA,EAAAsI,SACAtI,EAAAuI,UAAAC,iBAAAxI,EAAAyI,UACA8hD,+BACAvqD,EAAA2I,WAAAC,SAAA,eAIAC,eAAA,SAAA7I,GACA,SAAAA,EAAAsI,SAAA,GAAAtI,EAAA8I,aACA9I,EAAA+I,YAAAC,UAAA,WACAhJ,EAAAzC,KAAA0L,iBACAjJ,EAAA+I,YAAAG,KAAA,QAAA/O,EAAAM,QAAA,oBAAA,KAAA8M,EAAA,OAAAA,CAAAvH,EAAAzC,KAAA0L,gBAAA,iBAKA7E,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,2BACA6J,UAAA,SAAA6E,GAAA,OAAA,EAAAA,EAAAC,QAAA9G,EAAAU,SAAA,mBACAuB,SAAA,SAAA4E,GAwGA5L,EAxGA4L,EAyGAE,EAAAlK,OAAAmK,iBAAA,EACAD,EAAAlK,OAAAoK,cAAA,CACAC,UAAA,EACAC,eAAA,EACAC,UAAAnM,EAAAmM,UACAC,OAAApM,EAAA6L,OACAQ,aAAA1O,SAAAG,UAGAgO,EAAA9I,SAAAC,KAAA,WACA6I,EAAAlK,OAAA4C,YAAA,KACAsH,EAAAlK,OAAAuH,OAAA,WACAvH,EAAAkvD,oBAAA9rD,EAAAiC,gBAAArF,EAAAymD,eAAApiD,WAGA6F,EAAA1I,WAvHA,CACA0D,KAAAlK,EAAAM,QAAA,0BACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,YAAAV,EAAAU,SAAA,oCACAuB,SAAA,SAAAhH,GA0BAqH,EA1BArH,EAAAqH,qBA2BA0C,EAAAuC,KAAA,kCAAAjF,EAAA,kBACA,SAAA,mHA3BA,CACAP,KAAAlK,EAAAM,QAAA,mCACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,YAAAV,EAAAU,SAAA,4CACAuB,SAAA,SAAAhH,GA2BAqH,EA3BArH,EAAAqH,qBA4BA0C,EAAAuC,KAAA,sDAAAjF,EACA,SAAA,mHA5BA,CACAP,KAAAlK,EAAAM,QAAA,4BACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,oBAAAV,EAAAU,SAAA,YACAuB,SAAA,SAAAhH,GAaA,IAAAiG,EAAAA,EAbAjG,EAAAiG,SAaA0D,EAbA3J,EAAA2J,UAcAI,EAAAuC,KAAA,mCAAArG,EAAA,cAAA0D,EACA,SAAA,mHAdA,CACA7C,KAAAlK,EAAAM,QAAA,oDACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,uBACAuB,SAAA,SAAAhH,GACAgF,EAAAoC,6BAAApH,EAAAqH,sBACApE,KAAA,WACAjD,EAAAyM,kBAAA,SAsBA7K,EAAAsI,eAAAwC,8BACAC,EAAA3O,EAAAsK,KAAA1G,EAAAmvD,gCAAA5uD,QAAA,CAAAC,UAAA,mBAEAuK,EAAAvK,UAAA,SACAuK,EAAAtK,QAAAzF,EAAAM,QAAA,mBAIA0E,EAAAgL,qBAAA,GAEAhL,EAAAiB,cAAA,SAAA7C,GACA4B,EAAAgL,qBAAA5M,GAGA4B,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAioC,OAAAjoC,EAAAymD,eACAtlD,EAAAnB,OAAAsB,MAAA,IAAA2J,wBAAAC,mBAAA9M,GACA+C,EAAAnB,OAAAiI,mBAAA,WACAjI,EAAAkvD,oBAAA9rD,EAAAiC,gBAAArF,EAAAymD,eAAApiD,UACAgqD,KAEAltD,EAAAK,UAIAxB,EAAAyB,SAAA,WAEAyG,EAAAiD,IAAA,CAAAhK,EAAAC,SAAAgC,EAAA1B,UAAA1B,EAAAymD,gBAAA,KACAplD,KAAA,SAAAjD,GACAmH,EAAAnH,EAAA,GACA+C,EAAAnB,OAAAioC,OAAAjoC,EAAAymD,eACAtlD,EAAAnB,OAAAsB,MAAAiE,EACApE,EAAAnB,OAAAiI,mBAAA,WACAjI,EAAAkvD,oBAAA9rD,EAAAiC,gBAAArF,EAAAymD,eAAApiD,UACAgqD,KAEAltD,EAAAK,UAcA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,2DACA4B,OAZAxB,EAAA2B,YAAA,SAAAvD,GACAgF,EAAAxB,OACAxD,EACA,EACA,WACA4B,EAAAkvD,oBAAA9rD,EAAAiC,gBAAArF,EAAAymD,eAAApiD,UACAgqD,QAOArsD,MAAAhC,EAAAiC,SAGAiI,EAAAjK,EAAA,CACAL,YAAA,wCACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YC9LAtH,MAAAkF,WAAA,4BAAA,CAAA,SAAA,SAAA,cAAA,gBAAA,wBAAA,mBAAA,UACA,aAAA,YAAA,UAAA,sBACA,SAAAG,EAAAC,EAAAkD,EAAAkI,EAAAjI,EAAAlB,EAAA2qD,EAAA7xD,EAAAkI,EAAAkF,EAAAkD,GA2CA,SAAAC,EAAA08B,GAEAz8B,GAAA,GAEApI,EAAAqI,gBAAAzL,EAAAsB,MAAA2mC,GAAA,GAAA,GACA5mC,KAAA,WACArB,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OACAtB,EAAA0L,qBAAA1L,EAAAsB,MAAAoK,qBAEA1L,EAAA2L,gBACAvI,EAAAwI,oBAAA5L,EAAAioC,OAAA5jC,SAAArE,EAAAsB,MAAAuK,kBAAAzK,SAAAC,KAAA,SAAAjD,GACA4B,EAAA8L,kBAAAC,QAAA3N,EAAA2N,UAIAP,GAAA,IAEA,SAAAQ,GACAhM,EAAA0L,qBAAA,GACA1L,EAAA4C,YAAAoJ,EAEAR,GAAA,KAIA,SAAAA,EAAA3D,GACA7H,EAAA6H,OAAAA,EACA7H,EAAAiM,SAAApE,EACAjN,QAAA0K,QAAAtF,EAAAiG,WAAA,SAAAiG,GACAA,EAAAC,SAAAtE,IAtEA7H,EAAA2L,eAAAzJ,EAAAE,SAAAuJ,eACA3L,EAAA8L,kBAAA,CAAAC,QAAA,MACA/L,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OACAtB,EAAA0L,qBAAA,GAEA1L,EAAAiM,SAAA,EACAjM,EAAA6H,QAAA,EAEA7H,EAAAovD,QAAA,CACAt4C,SAAA,KACA5a,OAAA,KACAmzD,QAAA,WACA,IAAAC,EAAAvzD,OAAAiE,EAAAovD,QAAAt4C,UAAAlG,QAAA,OACA2+C,EAAAxzD,OAAAiE,EAAAovD,QAAAlzD,QAAAkrB,MAAA,OAEAxsB,QAAA0K,QAAAtF,EAAA0L,qBAAA,SAAAhQ,EAAAC,GACA,IAAA6zD,EAAAzzD,OAAAL,EAAAiV,WACA2+C,EAAAG,eAAAD,IACAD,EAAAG,cAAAF,GAEA9zD,EAAA63C,aACA73C,EAAAmsD,cAAA,GAIAnsD,EAAA63C,aACA73C,EAAAmsD,cAAA,OAOA7nD,EAAAoM,yBAAA,SAAAP,GACA7L,EAAA2L,gBACAvI,EAAAwI,oBAAA5L,EAAAioC,OAAA5jC,SAAAwH,GAAAzK,SAAAC,KAAA,SAAAjD,GACA4B,EAAA8L,kBAAAC,QAAA3N,EAAA2N,WAuCAR,EAAAvL,EAAAioC,QAEAjoC,EAAAqM,gBAAA,SAAAtE,GACAwD,EAAAvL,EAAAioC,SAGAjoC,EAAA6C,UAAA,EAEA7C,EAAAyX,mBAAA,aAIAzX,EAAA2vD,iBAAA,WACA3vD,EAAA0C,QACA1C,EAAA4vD,qBACA5vD,EAAA4vD,uBAIA5vD,EAAAwC,aAAA,SAAAlB,GAEA,IAsDAuuD,EAfA,SAAAptD,EAAA2qD,GAjCA,IAAAA,EAQAphB,EARAohB,EAkCAA,EAjCAyC,GACA1sD,EAAAU,SAAA,UAAAV,EAAAU,SAAA,kBAEAgsD,EAAAxC,eAAA,EACAwC,EAAAvC,sBAAAF,EAAA3nD,qBACAoqD,EAAAtC,kBAAAxxD,SAAAG,SAEA8vC,EAAA9oC,EAAA6/C,kBAAA/iD,EAAAioC,QACA1/B,EAAAvI,EAAAioC,OAAA1/B,YACA,KAAAH,EAAA,OAAAA,CAAApI,EAAAioC,OAAA1/B,YAAA,aAAAuH,cAAA,IACA,GACA+/C,EAAArC,eAAAxhB,EAAAzjC,EACAsnD,EAAAlzB,OAAA,EAEAkzB,EAAAzwC,OAAA,GAAAywC,EAAAzwC,MAAA3f,SACAowD,EAAAzwC,MAAA,IAGAquC,EAAAtqD,EAAAuqD,eAEAmC,EAAAzwC,MAAAjhB,KAAA,CACA+G,KAAAlK,EAAAM,QAAA,gCAAA,KAAAu0D,EAAArC,eACAG,aAAA5xD,SAAAG,SACA0xD,gBAAAH,EAAA9K,OAAA,GACAkL,cAAAJ,EAAAtoC,WAGA0nC,EAAA9pD,OAAA8sD,IAOA7vD,EAAAiI,mBAAAmlD,GACAptD,EAAA0C,QAGA,SAAAC,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EAGA,SAAA0xD,IACA9vD,EAAA6C,UAAA,EAKA,SAAA4J,EAAAC,GACArB,EAAAsB,8BAAA,CACAC,YAAA,CAAA,mCACAC,yBAAA,EACAzH,SAAA,SAAA0H,GACA1J,EAAAL,OACAzB,EACAwL,EACA,EACAJ,EACAjK,EACAE,MA6BA,SAAAumD,IAEAlpD,EAAA+M,uCAAAzL,EAAA0L,SAEA1L,EAAAmE,qBAcAnE,EAAA0L,QAAAC,WAEA5B,EAAA6B,eAAA,CACA7R,MAAA,yBACA8R,QAAA,+BACAC,QAAA,CAAA,CACAlI,KAAA,iBACAE,SAAA0qD,GACA,CACA5qD,KAAA,6BACAE,SAAA,WAAAqH,GAAA,KACA,CACAvH,KAAA,6BACAE,SAAA,WAAAqH,GAAA,QAIArJ,EAAAL,OACAzB,EACA,CACAmG,uBAAA,EACAC,qBAAA,GAEA,GACA,EACAjF,EACAE,GAvCA0I,EAAAsB,8BAAA,CACAC,YAAA,CAAA,mCACAC,yBAAA,EACAzH,SAAA,SAAA0H,GACA1J,EAAAJ,OACA1B,EACAwL,EACA,EACArK,EACAE,MA9GA3C,EAAA6C,WAIA7C,EAAA6C,UAAA,EAkDAgtD,EAAA,MAkBA7vD,EAAAmtD,uBACA7rD,EAAAmE,sBACAtC,EAAAU,SAAA,UACAV,EAAAU,SAAA,gBACAgpD,EAAAkD,yBAAA,EAAAzuD,EAAAyG,WAAA3G,SAAAC,KAAA,SAAA2uD,GACAA,GAAA,GAAAA,EAAAvwD,OAEAwwD,EAAA7uD,SAAAC,KAAA,WACA4uD,EAAAjwD,OAAAgwD,MAAAA,EACAC,EAAAjwD,OAAAkwD,eAAA,SAAAjD,GACA4C,EAAA5C,EACA/D,KAEA+G,EAAAzuD,UAGAquD,EAAA,KACA3G,OAIAA,MAqDAlpD,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,cAAArC,EAAAqC,UAAAoD,wBACAzF,EAAAsB,MAAA0L,UAAAhN,EAAAsB,MAAA0L,QAAAC,YAGAjN,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,oEACAqK,UAAA,GACA,CACA9Q,MAAA,+BACAyG,SAAA,6EACAqK,UAAA,GACA,CACA9Q,MAAA,qBACAyG,SAAA,0EACAqK,UAAA,GACA,CACA9Q,MAAA,gBACAyG,SAAA,qEACAqK,UAAA,GACA,CACA9Q,MAAA,iBACAyG,SAAA,sEACAqK,UAAA,GACA,CACA9Q,MAAA,iBACAyG,SAAA,sEACAqK,UAAA,IAGAhJ,EAAAU,SAAA,qCACA7D,EAAAiG,WAAA8N,OAAA,EAAA,GAGA/T,EAAAiG,WAAAlE,UAAA,EAGA/B,EAAAmwD,wBAAA,CACAz9C,WAAA,IAkBA,IAAA09C,EAAAnwD,EAAA,CACAL,YAAA,0EACA4B,OAjBAxB,EAAAqwD,sBAAA,CACAr6C,SAAA,CAAAC,OAAA,CAAA,aAAAC,WAAA,CAAA,QACAC,WAAA,CAAA,CAAAC,MAAA,YAAAE,YAAA,qBAAAD,WAAA,0BAAA1V,MAAA,SACA,CAAAyV,MAAA,UAAAE,YAAA,mBAAAD,WAAA,aAAA1V,MAAA,QACA,CAAAyV,MAAA,uBAAAE,YAAA,0BAAAD,WAAA,iBAAA1V,MAAA,SACA,CAAAyV,MAAA,yBAAAE,YAAA,4BAAAD,WAAA,mBAAA1V,MAAA,SACA,CAAAyV,MAAA,kBAAAE,YAAA,aAEAC,iBAAA,EACAiC,aAAA,EACA83C,cAAA,eACA95C,cAAA,aACA84B,SAAA,KAMA5xC,UAAA,EACAsE,MAAAhC,EAAAiC,SAGAguD,EAAAhwD,EAAA,CACAL,YAAA,iDACA4B,MAAA,EACA9D,UAAA,EACAsE,MAAAhC,EAAAiC,SAIAjC,EAAAuwD,yBAAA,SAAAC,GACAJ,EAAAhvD,SAAAC,KAAA,WACA+uD,EAAApwD,OAAAsB,MAAAkvD,EACAJ,EAAApwD,OAAAywD,8BAAAD,EAAAxjD,QAAAi7B,OAAA6iB,sBACAsF,EAAA5uD,UAIAxB,EAAA+M,uCAAA,SAAAC,IACA1B,EAAA+B,cACAC,EAAAlR,EAAAsK,KAAAsG,EAAAO,MAAA,SAAAC,GACA,MAAA,oBAAAA,EAAAC,UAAA,GAAAD,EAAAE,iCAIApC,EAAAqC,IAAA,mCAAAL,EAAAxI,MACAwG,EAAAqC,IAAA,sCAAAL,EAAAM,WAKA5N,EAAA6N,eAAA,SAAAC,GACA,IAAAC,EAAA/N,EAAAsB,MAAA0L,QAAAgB,wBAAAF,GACA,GAAAA,IAEAxC,EAAA+B,aACAU,EAAAjJ,KAAAwG,EAAA2C,IAAA,qCAAAjT,EAAAM,QAAA,gBACAyS,EAAAH,QAAAtC,EAAA2C,IAAA,wCAAA,GAEAF,EAAAjJ,KAAA9J,EAAAM,QAAA,kBAKA0E,EAAAkO,kBAAA,SAAAlB,EAAAmB,GACAnB,EAAAoB,2BAAAD,IAGAnO,EAAAqO,gCAAA,CACA,CACAnJ,KAAAlK,EAAAM,QAAA,oCACAgT,MAAA,qBAEA,CACApJ,KAAAlK,EAAAM,QAAA,sBACAgT,MAAA,yBC5WA3T,MAAAkF,WAAA,qBAAA,CAAA,SAAA,SAAA,aAAA,oBAAA,aAAA,gBAAA,cACA,SAAAG,EAAAC,EAAAjF,EAAA01D,EAAA3xD,EAAAsM,EAAAlI,GAcA,SAAAiO,IAEApR,EAAA2wD,eAAAD,EAAAE,mBAAA5wD,EAAA8W,SAAA9W,EAAA9D,QAdA8D,EAAA8W,SAAA/a,SAAA8U,SAAA,EAAA,OAAAD,QAAA,OACA5Q,EAAA9D,OAAAH,SAAA2d,IAAA,EAAA,OAAA9I,QAAA,OACA5Q,EAAA2wD,eAAA,GAEA3wD,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,MAGApR,EAAAyX,mBAAA,WACArG,KAQAA,IAEApR,EAAAM,aAAA,CACAwE,KAAA,iBACAkgB,QAAA,KACAzkB,QAAA,CACA,CAAAC,UAAA,KAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CACA1kB,UAAA,qBACAC,QAAAzF,EAAAM,QAAA,qBACAoF,SAAA,OACAjE,OAAA,CAAAwM,KAAA,sBACAtI,MAAA,QACAC,UAAA,QAEA,CAAAJ,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,UACA,CAAAF,UAAA,gBAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,UAAAC,MAAA,QACA,CAAAH,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,yBAAAoF,SAAA,SAAAC,MAAA,QACA,CACAH,UAAA,SACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SAHAC,MAiBA,QAZAmI,mBAAA,SAAAC,GACA,OAAAA,EAAA4zB,QAEA,KAAA,EACA,OAAA3hC,EAAAM,QAAA,wCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,wCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,qCAEA,OAAAN,EAAAM,QAAA,2CAKA4N,cAAA,SAAArI,GACA,QAAAA,EAAAsI,SACAtI,EAAAuI,UAAAC,iBAAAxI,EAAAyI,UACAs1B,WACA/9B,EAAA2I,WAAAC,SAAA,eAIAxE,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,wBACA6J,UAAA,SAAA/G,GAAA,OAAA+E,EAAAU,SAAA,kBACAuB,SAAA,SAAAhH,GAQAyyD,EARAzyD,EAAAyyD,QASAxlD,EAAA6B,eAAA,CACA7R,MAAA,uBACA8R,QAAA,wCAAAyiB,EAAAihC,GACAzjD,QAAA,CAAA,CACAlI,KAAA,qBATAlF,EAAAiB,cAAA,SAAA7C,GACA4B,EAAA2D,WAAA,+BAAA,CAAAmtD,QAAA1yD,KAaA4B,EAAA6B,KAAA,CACA,CACAxG,MAAA,qBACAyG,SAAA,iEAGA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,EAAAC,SAAAA,SCjGApL,MAAAkF,WAAA,+BAAA,CAAA,SAAA,KAAA,SAAA,UAAA,aAAA,oBACA,SAAAG,EAAAkI,EAAAjI,EAAAkI,EAAAnN,EAAA01D,GAEA1wD,EAAA+wD,yBAAA,GAEA/wD,EAAA/E,IAAA,+BAAA,SAAA4F,EAAAmwD,GACAA,EACAN,EAAAnvC,QAAAyvC,EAAAF,QAAAhuD,IAAA1B,SAAAC,KAAA,SAAA4vD,GACAjxD,EAAA+wD,yBAAAE,EAAAC,aAGAlxD,EAAA+wD,yBAAA,KAIA/wD,EAAAmxD,qCAAA,CACArsD,KAAA,2BACAvE,QAAA,CACA,CACAC,UAAA,MACAC,QAAAzF,EAAAM,QAAA,kBACAoF,SAAA,SACA+wC,aAAA,SAAA7nC,EAAAolD,GACA7/C,EAAA,YAAA6/C,EAAA5wD,KAAAs+B,IAAA,qBAAAsyB,EAAA5wD,KAAAs+B,IAAA,QAAA8V,SAAA5oC,KAGA,CAAApJ,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,WAAAjE,OAAA,CAAA20D,SAAA,SAAAzwD,MAAA,QAAAC,UAAA,OACA,CAAAJ,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,WAAAjE,OAAA,CAAA20D,SAAA,SAAAzwD,MAAA,cC7BAhG,MAAAkF,WAAA,kCAAA,CAAA,SAAA,iBACA,SAAAG,EAAAqxD,GAEArxD,EAAA8qD,sBAAAuG,EAAAC,+BACAtxD,EAAAsB,MAAA0L,QAAA0lB,MACA1yB,EAAAsB,MAAAuK,kBAAA9P,SAAAG,SACA8D,EAAAywD,kCCJA91D,MAAAkF,WAAA,eAAA,CAAA,SAAA,SAAA,cAAA,aACA,SAAAG,EAAAC,EAAAC,EAAAnB,GA8BA,SAAAwyD,EAAAxP,GACA/hD,EAAAwxD,gBAAAzP,EA7BA/hD,EAAAyxD,cAAAr1D,EAAAsK,KAAA3H,EAAA+uC,kBAAA,CAAAlnC,UAAA,EAAA8qD,wBAAA,IACA1xD,EAAA2xD,mBAAA5yD,EAAA4yD,mBAEA3xD,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAyxD,YACAzxD,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,QAAAC,WAAA,CAAA,QACAC,WAAA,CAAA,CAAAC,MAAA,2BAAAE,YAAA,oBAAAD,WAAA,sBAAA1V,MAAA,QACA,CAAAyV,MAAA,OAAAE,YAAA,eAAA2E,KAAA,SAAAta,MAAA,SACA,CAAAyV,MAAA,cAAAE,YAAA,sBAAA2E,KAAA,WAEAzE,cAAA,2BACA6E,uBAAA,GAGArb,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,QAAAC,WAAA,CAAA,QACAC,WAAA,CAAA,CAAAC,MAAA,OAAAE,YAAA,eAAA2E,KAAA,SAAAta,MAAA,SACA,CAAAyV,MAAA,cAAAE,YAAA,sBAAA2E,KAAA,WAEAzE,cAAA,2BACA6E,uBAAA,GAQArb,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAA4xD,SAAA1xD,EAAA2xD,uBAAA,GACAN,EAAA,QAGAvxD,EAAA4xD,SAAA1xD,EAAA2xD,uBAAA,GAEA7xD,EAAAwxD,gBAAA,GAEAxxD,EAAAiB,cAAA,SAAA7C,GACAmzD,EAAAnzD,IAGA4B,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAApB,EAAAwB,YACAP,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACA8B,EAAA0B,OAAAxD,IAGA4B,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,6CAGA9B,EAAA6B,KAAAE,UAAA,EAGA,IAAAZ,EAAAlB,EAAA,CACAL,YAAA,+BACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YChFAtH,MAAAkF,WAAA,qBAAA,CAAA,SAAA,cAAA,aAAA,mBACA,SAAAG,EAAAE,EAAAnB,EAAAmD,GAEAlC,EAAAmC,sBAAAD,EAAAE,SAAAD,sBAEAnC,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAGAtB,EAAA8xD,mBAAA,WACA,SAAA9xD,EAAAsB,MAAAywD,qBAAA/xD,EAAAsB,MAAA0wD,0BAAAjzD,EAAA4yD,qBAGA3xD,EAAAiyD,uBAAA71D,EAAAsK,KAAA3H,EAAA+uC,kBAAA,CAAAlnC,UAAA,EAAA8qD,wBAAA,IAEA1xD,EAAA2xD,mBAAA5yD,EAAA4yD,mBAEA3xD,EAAAkyD,kBAAA,WACA,QAAA91D,EAAAsK,KAAA3H,EAAA+uC,kBAAA,CAAAD,SAAA7tC,EAAAsB,MAAA0wD,yBAAAprD,UAAA,KAGA5G,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAAmyD,oBAAA,SAAA/zD,GAcA,SAAAqE,IACAzC,EAAA0C,QAGA,SAAAC,EAAAvE,GACA4B,EAAA4C,YAAAxE,EACA4B,EAAA6C,UAAA,EAlBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEAzE,EAAA0E,GAGA5C,EAAA6C,OAAA3E,EAAAqE,EAAAE,GAFAzC,EAAA8C,OAAA5E,EAAAqE,EAAAE,KAeA3C,EAAAoyD,yBAAA,SAAAC,GACAA,IACAryD,EAAAsB,MAAA0wD,yBAAA,KACAhyD,EAAAsB,MAAAywD,mBAAA,OAIA/xD,EAAAsyD,yBAAA,SAAAP,GACAA,EACA7xD,EAAAqyD,2BACAvyD,EAAAsB,MAAA0wD,yBACAD,GACA1wD,KAAA,SAAA0gD,GACAA,GACA/hD,EAAAsB,MAAAwD,KAAAi9C,EAAAj9C,KACA9E,EAAAsB,MAAA+2C,YAAA0J,EAAA1J,cAEAr4C,EAAAsB,MAAAwD,KAAA,GACA9E,EAAAsB,MAAA+2C,YAAA,SAIAr4C,EAAAsB,MAAAwD,KAAA,GACA9E,EAAAsB,MAAA+2C,YAAA,UCvEA19C,MAAA4T,UAAA,gCAAA,CAAA,uBACA,SAAAg9B,GAEA,MAAA,CACA58B,SAAA,IACAC,QAAA,UACA9M,SAAA,2eAWA4rB,SAAA,EACA5e,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GACA,IAAAujD,EAAAjnB,EAAAC,qBAAAv8B,EAAAgB,YACA6rC,GAAA,EAEA95C,EAAAywD,mBAAA,GAEAxjD,EAAAe,QAAA,YAGAwiD,GADA1W,EACAvQ,EAAAC,qBAAAv8B,EAAAgB,YAGAuiD,GAAApxD,SAAAC,KAAA,WAEA,IAAAqxD,EAAAzjD,EAAAgB,WAEAf,EAAA9S,EAAA+a,IAAAq7C,EAAA,SAAAG,GACA,MAAA,CACA7vD,GAAA6vD,EAAA7vD,GACAgC,KAAA6tD,EAAA7tD,KACA2hB,OAAAksC,EAAAlsC,OACAmY,UAAA+zB,EAAA/zB,UACAg0B,UAAA,IAAAx2D,EAAA2T,QAAA2iD,EAAAC,EAAA7vD,OAIAg5C,GAAA,EACA95C,EAAAywD,mBAAAhzD,OAAA,EACAuC,EAAAywD,mBAAAt0D,KAAAsf,MAAAzb,EAAAywD,mBAAAvjD,MAKAlN,EAAA6D,OAAA,qBAAA,SAAAC,GACAg2C,IAIA8W,EAAAx2D,EAAAkoB,OAAAxe,EAAA,CAAA8sD,UAAA,IACAC,EAAAz2D,EAAA+a,IAAAy7C,EAAA,SAAAr5C,GACA,OAAAA,EAAAzW,KAGAmM,EAAAqe,cAAAulC,MACA,QC5DAl4D,MAAA4T,UAAA,uCAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GAEA,SAAAyT,EAAA4I,GACA,GAAAA,EAEA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,SAAAwJ,EAAA2I,GACA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACA8e,SAAA,EACA7e,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEAA,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAhR,OAAAgR,KAGAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAAA,KAGA6S,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAI,yBAAA,EACAf,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAnR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,0CACA,CAAApC,GAAA,EAAAoC,KAAA,gDACA,CAAApC,GAAA,EAAAoC,KAAA,mDAIA6J,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,MAGA,QClDAhB,MAAA4T,UAAA,mCAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GAEA,SAAAyT,EAAA4I,GACA,GAAAA,EAEA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,SAAAwJ,EAAA2I,GACA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACA8e,SAAA,EACA7e,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEAA,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAhR,OAAAgR,KAGAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAAA,KAGA6S,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAI,yBAAA,EACAf,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAnR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,wCACA,CAAApC,GAAA,EAAAoC,KAAA,2CACA,CAAApC,GAAA,EAAAoC,KAAA,4CAIA6J,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,MAGA,QClDAhB,MAAA4T,UAAA,+BAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GAEA,SAAAyT,EAAA4I,GACA,GAAAA,EAEA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,SAAAwJ,EAAA2I,GACA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACA8e,SAAA,EACA7e,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEAA,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAhR,OAAAgR,KAGAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAAA,KAGA6S,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAI,yBAAA,EACAf,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAnR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,kCACA,CAAApC,GAAA,EAAAoC,KAAA,yCAIA6J,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,MAGA,QCnDAhB,MAAA4T,UAAA,kCAAA,CAAA,WAAA,aAAA,cACA,SAAAC,EAAAxT,EAAAkF,GACA,SAAAuO,EAAAszC,GACA,GAAAA,EAEA,OAAAA,EAAAj9C,KAQA,SAAA4J,EAAAqzC,GACA,OAAAA,EAAAj9C,KAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,UACAC,SAAA,EACA6e,SAAA,EACA1rB,MAAA,CACA8wD,yBAAA,KAEAhkD,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAGA,IAAA2iD,EAAA5vD,EAAA8wD,yBACA5yD,EAAA6yD,qCAAA/wD,EAAA8wD,0BAAA,GACA,GAEAtkD,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,oDACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACA1M,GAAA,SAAAi/C,GAAA,OAAAA,EAAAj/C,IACA1E,KAAAwzD,IAGA3iD,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAsT,EAAAe,QAAA,WACA4hD,EAAAxwD,UACAwwD,EAAAxwD,SAAAC,KAAA,WACA8N,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,eAKAjO,EAAA6D,OAAA,2BAAA,SAAAC,GACA,IAIAktD,EAJAltD,GAIAktD,EAAA9yD,EAAA6yD,qCAAAjtD,IACA1E,SAAAC,KAAA,WACA2xD,IAAApB,IACAA,EAAAnyD,OAAA,EACAmyD,EAAAzzD,KAAAsf,MAAAm0C,EAAAoB,IAGA,IAAA,IAAAz5C,EAAA,EAAAA,EAAAq4C,EAAAnyD,OAAA8Z,IACA,GAAAq4C,EAAAr4C,GAAAzW,IAAAmM,EAAAgB,WAEA,YADAd,EAAAJ,GAAAK,QAAA,MAAAwiD,EAAAr4C,GAAAzW,IAKAqM,EAAAJ,GAAAK,QAAA,MAAA,MACAH,EAAAqe,cAAA,QAlBAskC,EAAAnyD,OAAA,IAsBAsP,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,MAGA,QCpGAhB,MAAA8gC,QAAA,oBAAA,CAAA,YAAA,KAAA,gBAAA,gBACA,SAAAC,EAAAxzB,EAAA0zB,EAAAq3B,GACA,IAAAC,EAAAx3B,EAAA,yBAAA,GAAA,CACAk1B,mBAAA,CAAAn0B,OAAA,MAAAC,IAAA,oCAAAjN,SAAA,GACAlO,QAAA,CAAAkb,OAAA,MAAAC,IAAA,gCAeA,MAAA,CACAnb,QALA,SAAA4xC,GACA,OAAAv3B,EAAAkC,UAAA,UAAAo1B,EAAA,CAAApwD,GAAAqwD,KAKAvC,mBAdA,SAAAztB,EAAAC,GACA,OAAAxH,EAAAkC,UAAA,qBAAAo1B,EAAA,CACAn5C,KAAAhe,OAAAonC,GAAAvyB,QAAA,OAAA1U,SACA8d,GAAAje,OAAAqnC,GAAAhc,MAAA,OAAAlrB,SACAwjC,SAAA,qCCXA/kC,MAAAkF,WAAA,gCAAA,CAAA,SAAA,KAAA,UAAA,kBAAA,UAAA,aACA,SAAAG,EAAAkI,EAAAkrD,EAAAC,EAAApR,EAAAqR,GAeA,SAAAC,EAAA7P,GAEA,IAAA8P,EAAA54D,QAAA2G,KAAAmiD,GACA8P,EAAA/F,KAAA,KACA+F,EAAAn7C,QAAA,KACAm7C,EAAAC,2BAAA,KAEAJ,EAAArwD,OAAAwwD,GAAApyD,SAAAC,KAAA,SAAAoB,GACAzC,EAAA0zD,WACA1zD,EAAA0zD,UAAAjxD,GAEAzC,EAAA6C,UAAA,EACA7C,EAAA0C,SAEA,SAAAC,GACA3C,EAAA6C,UAAA,IA1BA7C,EAAA2zD,WAAA3zD,EAAA4zD,eACA5zD,EAAA6C,UAAA,EAEA7C,EAAA6zD,uBAAA,WACA,QAAA7zD,EAAA8zD,aAAA73D,UAAA+D,EAAA6C,YAAA7C,EAAA+zD,YAGA/zD,EAAA8zD,aAAA,CACAhxD,GAAA9C,EAAA4zD,gBAsBA5zD,EAAAg0D,YAAA,WACA,IAAAh0D,EAAA6C,SAMA,GAFA7C,EAAA6C,UAAA,GAEA7C,EAAA8zD,aAAAL,6BAAAzzD,EAAA8zD,aAAAG,+BACAj0D,EAAA8zD,aAAAI,oBAqBAX,EAAAvzD,EAAA8zD,kBArBA,CAEA,IAAA9gD,EAAA,GAEAhT,EAAA8zD,aAAArG,MAAAztD,EAAA8zD,aAAAL,4BACAzgD,EAAA7U,KAAA8jD,EAAAl/C,OAAA/C,EAAA8zD,aAAArG,KAAA,KAAA,MAAA,IAGAztD,EAAA8zD,aAAAz7C,SAAArY,EAAA8zD,aAAAG,+BACAjhD,EAAA7U,KAAAm1D,EAAAvwD,OAAA/C,EAAA8zD,aAAAz7C,QAAA,KAAA,KAAA,MAAA,IAGAnQ,EAAAiD,IAAA6H,GAAA3R,KAAA,WACAkyD,EAAAvzD,EAAA8zD,eACA,SAAAnxD,GACA3C,EAAA6C,UAAA,EACA7C,EAAAm0D,sBAAA,EACAn0D,EAAAo0D,YAAAzxD,SC5DAhI,MAAAkF,WAAA,oBAAA,CAAA,SAAA,SAAA,aAAA,UAAA,kBAAA,cAAA,cACA,SAAAG,EAAAC,EAAAjF,EAAAoN,EAAAirD,EAAAlwD,EAAAkF,GAEArI,EAAAq0D,eAAA,GACA,IAAAC,EAAA,KAEAC,EAAA,KAEA,SAAA99C,EAAA89C,GAEAv0D,EAAAq0D,eAAA,GACAhB,EAAAmB,eAAAD,GACAlzD,KAAA,SAAAjD,GACA4B,EAAAq0D,eAAAj2D,GACA,SAAAuE,GACA3C,EAAAq0D,eAAA,KAIAr0D,EAAA/E,IAAA,uBAAA,SAAA4F,EAAA4zD,GACAA,GAEAz0D,EAAA00D,2BAAAjxD,cACAzD,EAAA00D,2BAAAjxD,aAAAgF,aAAA,kBAAA,UAAA,IAAAgsD,EAAAE,UAGAL,GAAAA,EAAAxxD,KAAA2xD,EAAA3xD,IAEA2T,EADA89C,EAAAE,EAAA3xD,KAKA9C,EAAAq0D,eAAA,GAGAC,EAAAG,IAGAz0D,EAAA00D,2BAAA,CACA5vD,KAAA,iBACAvE,QAAA,CACA,CAAAC,UAAA,KAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CACAovB,qBAAA,EACA7zC,QAAA,GACAD,UAAA,sBACAG,MAAA,OACAqmD,UAAA,SACA0L,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA,CACAzuC,KAAA,QACA7K,KAAA,CACA,CAAA0E,IAAA,EAAAgC,KAAA9J,EAAAM,QAAA,uBACA,CAAAwH,IAAA,EAAAgC,KAAA9J,EAAAM,QAAA,yBAEAI,IAAA,MAEA4zC,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,QAEAzG,YAAA,EACA/c,mBAAA,SAAAG,GAAA,OAAAA,EAAAwgC,QACAsrB,sBAAA,SAAA9rD,GACA,YAAA,IAAAA,EAAAmrD,qBAAA,OAAAnrD,EAAAmrD,oBACA,GAGA,iBADAnrD,EAAAmrD,oBAAA,YAAA,WACA,8BAMA,CACA1zD,UAAA,kBACAsE,KAAA,kBACArE,QAAAzF,EAAAM,QAAA,wBACAoF,SAAA,SACAC,MAAA,OACAukB,SAAA,GAEA,CACA1kB,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,qBAEA,CACAoC,UAAA,YACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAA+rD,YAEAn0D,MAAA,SAEA,CAAAH,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,OAAAjE,OAAA,CAAAb,KAAA,SAAA+E,MAAA,QACA,CACAH,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,qBAAAoF,SAAA,SAAAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,kBAEA,CAAAoC,UAAA,gBAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,UACA,CAAAF,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAE,UAAA,OAAAnE,OAAA,CAAAwM,KAAA,sBAAAtI,MAAA,UAEAo0D,kBAAA,SAAAl0D,GACA,aAAAA,EAAAm0D,YAAA,uBAAAn0D,EAAAL,YACAK,EAAAo0D,cAAAzoC,aAAA,SAAA0lB,EAAAgjB,EAAAC,GACA,OAAA,GAAAD,EACA/lD,EAAA,wDAGA,iBADA,GAAA+lD,EAAA,YAAA,WACA,+BAOA/tD,iBAAA,WAAA,OAAAnH,EAAAs0D,cACArvD,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,oBACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,uBAAAywD,GACAlvD,SAAA,SAAAhH,GAAA4B,EAAAo1D,kBAAAh3D,KACA,CACA8G,KAAAlK,EAAAM,QAAA,+BACA6J,UAAA,WAAA,QAAAmvD,IAAA90D,OAAAb,UAAA+3B,mBAAA49B,EAAApzC,qBACA9b,SAAA,SAAAhH,GAAA4B,EAAAq1D,uBAAAj3D,OAIA4B,EAAAq1D,uBAAA,SAAAC,GACAhzC,OAAA5X,KAAA,2BAAA4qD,EAAAxyD,GAAA,UAAA,WAGA9C,EAAAo1D,kBAAA,SAAAE,GACAC,EAAAn0D,SAAAC,KAAA,WACAk0D,EAAAv1D,OAAAu0D,OAAAD,EAAAxxD,GACAyyD,EAAAv1D,OAAAw1D,uBAAAlB,EAAAmB,WAAAC,WAAAJ,EAAAE,uBACAF,EAAAE,uBACA,KACAD,EAAAv1D,OAAA4zD,eAAA0B,EAAAxyD,GACAyyD,EAAAv1D,OAAA+zD,YAAA,EACAwB,EAAA/zD,UAIAxB,EAAA21D,cAAA,WACAJ,EAAAn0D,SAAAC,KAAA,WACAk0D,EAAAv1D,OAAAu0D,OAAAD,EAAAxxD,GACAyyD,EAAAv1D,OAAAw1D,uBAAA,KACAD,EAAAv1D,OAAA4zD,eAAA,KACA2B,EAAAv1D,OAAA+zD,YAAA,EACAwB,EAAAv1D,OAAA0zD,UAAA,WACAj9C,EAAA89C,IAEAgB,EAAA/zD,UAUA,IAAA+zD,EAAAt1D,EAAA,CACAL,YAAA,oCACA4B,OARAxB,EAAA41D,iBAAA,SAAAx3D,GACAi1D,EAAAzxD,OAAAxD,EAAA0E,IAAA1B,SAAAC,KAAA,WACAoV,EAAA69C,EAAAxxD,QAOAd,MAAAhC,EAAAiC,YC5KAtH,MAAAkF,WAAA,YAAA,CAAA,SAAA,KAAA,SAAA,aAAA,UAAA,cAAA,mBACA,SAAAG,EAAAkI,EAAAjI,EAAAjF,EAAAo4D,EAAAjwD,EAAAjB,GAIA,SAAAkP,IAEA,OAAAlJ,EAAA,SAAAoJ,EAAAC,GACA,IAAApG,EAAAioD,EAAAzuC,SACAxZ,EAAA9J,KAAA,SAAAjD,GACA4B,EAAA61D,MAAAz3D,EACA03D,EAAA,MACAxkD,KACA,SAAA3O,GACA3C,EAAA61D,MAAA,GACAC,EAAA,MACAvkD,QAkHA,SAAAukD,EAAAC,GACA/1D,EAAAs0D,aAAAyB,EACA/1D,EAAA2D,WAAA,uBAAA3D,EAAAs0D,cAjIAt0D,EAAAg2D,cAAA9zD,EAAAE,SAmBAgP,IAEApR,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,MAGApR,EAAAM,aAAA,CACAwE,KAAA,QACAvE,QAAA,CACA,CAAAC,UAAA,KAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAE,UAAA,OACA,CAAAJ,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UAAAC,MAAA,QACA,CACAH,UAAA,WACAC,QAAAzF,EAAAM,QAAA,qBACAoF,SAAA,SACAgyD,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA,CACAzuC,KAAA,QACA7K,KAAA,CACA,CAAA0E,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,0BACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,2CAEAI,IAAA,MAEA4zC,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,QAEAzrB,MAAA,QACAukB,QAAAllB,EAAAg2D,cAAAC,2BAEA,CAAAz1D,UAAA,0BAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,sBAAAtI,MAAA,SACA,CAAAH,UAAA,0BAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,aAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,sBAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAC,MAAA,SAEAsE,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,oBACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,qBACAuB,SAAA,SAAAhH,GAAA4B,EAAAo1D,kBAAAh3D,EAAA0E,QAIA9C,EAAAo1D,kBAAA,SAAAb,GACAgB,EAAAn0D,SAAAC,KAAA,WACAk0D,EAAAv1D,OAAAu0D,OAAAA,EACAgB,EAAAv1D,OAAA+zD,YAAA,EACAwB,EAAA/zD,UAIAxB,EAAAiB,cAAA,SAAA7C,GACA03D,EAAA13D,IAGA4B,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA8xD,EAAA1xD,YACAP,EAAAnB,OAAAk2D,WAAA,SAAA50D,GACA8P,KAEAjQ,EAAAK,UAIAxB,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAAk2D,WAAA,WACA9kD,KAEAjQ,EAAAK,UAIAxB,EAAA0F,UAAA,SAAAtH,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAAsB,MAAAuR,OAAA,EACA1R,EAAAnB,OAAAsB,MAAAwB,GAAA,KACA3B,EAAAnB,OAAAk2D,WAAA,SAAA50D,GACA8P,IAAA/P,KAAA,WACArB,EAAAM,cAAAN,EAAAM,aAAAmD,cACA+K,SAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAA,CAAAhD,EAAAwB,KAAA,GAAAzB,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACAq2D,EAAA,SAGA,QAIA30D,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACAg1D,EAAAxxD,OAAAxD,EAAA0E,IAAA1B,SAAAC,KAAA,WACA+P,OASApR,EAAA6B,KAAA,CACA,CACAxG,MAAA,yBACAyG,SAAA,yCAGA9B,EAAA6B,KAAAE,UAAA,EAEA,IAAAZ,EAAAlB,EAAA,CACAL,YAAA,0BACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGAszD,EAAAt1D,EAAA,CACAL,YAAA,oCACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YCxJAtH,MAAAkF,WAAA,kBAAA,CAAA,SAAA,SAAA,UAAA,mBACA,SAAAG,EAAAC,EAAAmzD,EAAAlxD,GAEAlC,EAAAg2D,cAAA9zD,EAAAE,SACApC,EAAAmC,sBAAAD,EAAAE,SAAAD,sBAEAnC,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAwC,aAAA,SAAApE,GAgBA,SAAAqE,IACAzC,EAAAk2D,aACAl2D,EAAA0C,QAGA,SAAAC,EAAAqJ,GACAhM,EAAA4C,YAAAoJ,EACAhM,EAAA6C,UAAA,EArBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,GAEAzE,EAAAyU,MACAugD,EAAApwD,OAAA5E,GAGAg1D,EAAArwD,OAAA3E,IAFAgD,SAAAC,KAAAoB,EAAAE,KAiBA3C,EAAAm2D,4BAAAn2D,EAAAsB,MAAA80D,qBAAA,EACAp2D,EAAAq2D,oCAAA,SAAAvwD,GAEA9F,EAAAsB,MAAA80D,qBAAAtwD,EAAA,GAGA9F,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAAs2D,cAAA,WACAlD,EAAAmD,eAAAv2D,EAAAsB,QAGAtB,EAAAw2D,iBAAA,SAAAC,GACAtoD,EAAAnO,EAAAsB,MAAAo1D,UAAA3mD,QAAA0mD,IACA,EAAAtoD,GACAnO,EAAAsB,MAAAo1D,UAAA3iD,OAAA5F,EAAA,IAIAnO,EAAA22D,YAAA,SAAAF,GACArD,EAAAwD,aAAAH,IAGAz2D,EAAA62D,eAAA,SAAAJ,EAAAt1C,GACAhT,EAAAsoD,EAAA3+C,QAAA/H,QAAAoR,IACA,EAAAhT,GACAsoD,EAAA3+C,QAAA/D,OAAA5F,EAAA,IAIAnO,EAAAknB,YAAA,WACA,OAAAksC,EAAAlsC,YAAAlnB,EAAAsB,QAGAtB,EAAA82D,sBAAA,SAAAL,EAAAM,GAEA,GAAAA,EAEAN,EAAA3+C,SAAA,GAAA2+C,EAAA3+C,QAAArY,QAEA2zD,EAAAwD,aAAAH,GAKAA,EAAA3+C,QAAA,MAIA9X,EAAAkG,wBAAA,SAAA4N,GACA1X,EAAA46D,KAAAh3D,EAAAsB,MAAA21D,aAAA,GAAAnjD,IAGA9T,EAAAuG,kBAAA,WACAD,EAAAlF,SAAAC,KAAA,WACAiF,EAAAtG,OAAAwG,mBAAA,SAAAJ,GAEApG,EAAAsB,MAAA21D,cACAj3D,EAAAsB,MAAA21D,YAAA,IAGAr8D,QAAA0K,QAAAc,EAAA,SAAAK,GACArK,EAAAsK,KAAA1G,EAAAsB,MAAA21D,YAAAxwD,EAAAywD,WACAl3D,EAAAsB,MAAA21D,YAAA94D,KAAAsI,EAAAywD,aAIA5wD,EAAA9E,UAiBA,IAAA8E,EAAArG,EAAA,CACAL,YAAA,4CACA4B,OAfAxB,EAAAm3D,yBAAA,WACA,GAAAn3D,EAAAsB,MAAA81D,oBACAp3D,EAAAsB,MAAA2yD,+BAAA,EAEA,GAAAj0D,EAAAsB,MAAA81D,oBACAp3D,EAAAsB,MAAAmyD,4BAAA,EAEAzzD,EAAAsB,MAAA4f,mBAAA,KACAlhB,EAAAsB,MAAAqzD,SAAA,MAQA3yD,MAAAhC,EAAAiC,SAGAjC,EAAAiG,WAAA,CAAA,CACA5K,MAAA,WACAyG,SAAA,oCAEA,CACAzG,MAAA,kBACAyG,SAAA,wCAEA,CACAzG,MAAA,oBACAyG,SAAA,yCAEA,CACAzG,MAAA,mBACAyG,SAAA,yCAGA9B,EAAAiG,WAAAlE,UAAA,KChJApH,MAAAkF,WAAA,2BAAA,CAAA,SAAA,SAAA,aAAA,WAAA,UAAA,sBACA,SAAAG,EAAAC,EAAAjF,EAAAwT,EAAAq+C,EAAAvhD,GAUA,OALAtL,EAAA6C,UAAA,EACA7C,EAAAsB,MAAA,CACA+1D,uBAAA,MAGAr3D,EAAAs3D,YACA,IAAA,0BACAt3D,EAAAu3D,2BAAA,EACAv3D,EAAAw3D,eAAAx8D,EAAAM,QAAA,gBACA0E,EAAA3E,MAAAL,EAAAM,QAAA,iCACA0E,EAAAsB,MAAA+1D,uBAAA/rD,EAAA2C,IAAA,yCACA,MACA,IAAA,2BACAjO,EAAAu3D,2BAAA,EACAv3D,EAAAw3D,eAAAx8D,EAAAM,QAAA,iBACA0E,EAAA3E,MAAAL,EAAAM,QAAA,kCACA0E,EAAAsB,MAAA+1D,uBAAA/rD,EAAA2C,IAAA,yCACA,MACA,IAAA,yBACAjO,EAAAu3D,2BAAA,EACAv3D,EAAAw3D,eAAAx8D,EAAAM,QAAA,gBACA0E,EAAA3E,MAAAL,EAAAM,QAAA,gCACA0E,EAAAsB,MAAA+1D,uBAAA/rD,EAAA2C,IAAA,wCACA,MACA,IAAA,0BACAjO,EAAAu3D,2BAAA,EACAv3D,EAAAw3D,eAAAx8D,EAAAM,QAAA,iBACA0E,EAAA3E,MAAAL,EAAAM,QAAA,iCACA0E,EAAAsB,MAAA+1D,uBAAA/rD,EAAA2C,IAAA,wCAIAjO,EAAAwC,aAAA,WAIA,SAAAC,IACAzC,EAAA6C,UAAA,EACA7C,EAAA0C,QACA1C,EAAAy3D,eACAjpD,EAAA,WACAxO,EAAAy3D,iBACA,KAIA,SAAA90D,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EAGA,OAjBA4B,EAAA6C,UAAA,EAiBA7C,EAAAs3D,YACA,IAAA,0BACAhsD,EAAAqC,IAAA,wCAAA3N,EAAAsB,MAAA+1D,wBACAxK,EAAA6K,gCAAA13D,EAAAitD,KAAAnqD,GAAA9C,EAAAsB,MAAA+1D,uBAAA50D,EAAAE,GACA,MACA,IAAA,2BACA2I,EAAAqC,IAAA,wCAAA3N,EAAAsB,MAAA+1D,wBACA/0C,OAAA5X,KAAA,iBAAA1K,EAAAitD,KAAAnqD,GAAA,mDAAA9C,EAAAsB,MAAA+1D,uBAAA,UACA50D,IACA,MACA,IAAA,yBACA6I,EAAAqC,IAAA,uCAAA3N,EAAAsB,MAAA+1D,wBACAxK,EAAA8K,+BAAA33D,EAAAitD,KAAAnqD,GAAA9C,EAAAsB,MAAA+1D,uBAAA50D,EAAAE,GACA,MACA,IAAA,0BACA2I,EAAAqC,IAAA,uCAAA3N,EAAAsB,MAAA+1D,wBACA/0C,OAAA5X,KAAA,iBAAA1K,EAAAitD,KAAAnqD,GAAA,kDAAA9C,EAAAsB,MAAA+1D,uBAAA,UACA50D,SC1EA9H,MAAAkF,WAAA,8BAAA,CAAA,SAAA,SAAA,aAAA,KAAA,UAAA,UACA,wBAAA,YAAA,cAAA,cACA,SAAAG,EAAAC,EAAAjF,EAAAkN,EAAAE,EAAAykD,EAAAzpD,EAAAF,EAAAD,EAAAE,GAEAnD,EAAAsB,MAAA,CACA2C,WAAA,KACAI,SAAA,KACA+a,MAAA,MAGA,IAAApf,EAAA43D,gBACAx0D,EAAAy0D,sBAAA73D,EAAA83D,uBAAA12D,SAAAC,KAAA,SAAAjD,GACAA,IACA4B,EAAAsB,MAAA+C,SAAAjG,EAAA+tC,SACAnsC,EAAAsB,MAAA8d,MAAAhhB,EAAAghB,SAMApf,EAAA+3D,4BAAA,EACA/3D,EAAAg4D,qBAAA,GACAh4D,EAAAi4D,qBAAA,KAEAj4D,EAAAk4D,WAAA,WACA,OAAAl4D,EAAA+3D,8BACA/3D,EAAAi4D,sBAMAj4D,EAAAm4D,+BAAA,WACAn4D,EAAA+3D,4BAAA,EACA/3D,EAAAi4D,sBAAA,EACAj4D,EAAAg4D,qBAAA50D,EAAAg1D,uBAAAp4D,EAAA+oB,YAGA/oB,EAAAq4D,gCAAA,WACAr4D,EAAA+3D,4BAAA,GAGA/3D,EAAAs4D,kCAAA,SAAAtuD,GACAhK,EAAAi4D,qBAAAjuD,GAIA,IAAAuuD,EADAv4D,EAAA6C,UAAA,EAGAI,EAAAc,kBAAA1C,KAAA,SAAAjD,GACAA,IACA4B,EAAAsB,MAAA2C,WAAA7F,EAAA0E,MAIA9C,EAAAwC,aAAA,SAAAlB,GAEAtB,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEA7C,EAAA+3D,4BAAA/3D,EAAAi4D,qBACApL,EAAAtrC,QAAAvhB,EAAAguD,QAAA5sD,SAAAC,KAAA,SAAA4rD,GAEAsL,GAAA,EAEAtL,EAAAI,eAAA,EACAJ,EAAAK,sBAAAttD,EAAAi4D,qBAAAxyD,qBACAwnD,EAAAM,kBAAAxxD,SAAAG,SACA,IAAA8vC,EAAAhsC,EAAAi4D,qBAAAjsB,eACAzjC,EAAAvI,EAAAi4D,qBAAAO,UACA,KAAApwD,EAAA,OAAAA,CAAApI,EAAAi4D,qBAAAO,UAAA,aAAA1oD,cAAA,IACA,GACAm9C,EAAAO,eAAAxhB,EAAAzjC,EACA0kD,EAAAtwB,OAAA,EAEAswB,EAAA7tC,OAAA,GAAA6tC,EAAA7tC,MAAA3f,SACAwtD,EAAA7tC,MAAA,IAGAquC,EAAAtqD,EAAAuqD,eAEAT,EAAA7tC,MAAAjhB,KAAA,CACA+G,KAAAlK,EAAAM,QAAA,gCAAA,KAAA2xD,EAAAO,eACAG,aAAA5xD,SAAAG,SACA0xD,gBAAAH,EAAA9K,OAAA,GACAkL,cAAAJ,EAAAtoC,WAGA0nC,EAAA9pD,OAAAkqD,GAAA7rD,SAAAC,KAAA,WACArB,EAAA6C,UAAA,EACA01D,GAAA,EACAv4D,EAAA0C,QACA1C,EAAAkuD,WAAAjB,IACA,SAAAtqD,GACA3C,EAAA4C,YAAAD,EACA3C,EAAA6C,UAAA,EACA01D,GAAA,KAEA,SAAA51D,GACA3C,EAAA4C,YAAAD,EACA3C,EAAA6C,UAAA,IAKAqF,EAAAiD,IAAA,CACA0hD,EAAAtrC,QAAAvhB,EAAAguD,QAAA5sD,SACA8B,EAAA2oD,cAAAvqD,EAAA+C,UAAAjD,WAAAC,KAAA,SAAAo3D,GAEA,IAAAxL,EAAAwL,EAAA,GACAxwB,EAAAwwB,EAAA,GAEA,GAAAxL,EAAAtwB,QACA38B,EAAA4C,YAAA,CAAAqoB,OAAA,CAAA,CAAA9d,QAAAnS,EAAAM,QAAA,uCACA0E,EAAA6C,UAAA,GAGAqF,EAAAiD,IAAA,CAAAhK,EAAAC,SAAAgC,EAAA1B,UAAAumC,GAAA,KACA5mC,KAAA,SAAAjD,GACAmH,EAAAnH,EAAA,GACAmH,EAAAmzD,SAAAzL,EAAA1tB,OACA0tB,EAAAC,YAAA,EAAAD,EAAAC,WAAAztD,SACA8F,EAAAwC,UAAAklD,EAAAC,WAAA,IAEA3nD,EAAA6Z,MAAA9d,EAAA8d,MACAje,EAAAnB,OAAAioC,OAAAA,EACA9mC,EAAAnB,OAAAsB,MAAAiE,EAEApE,EAAAnB,OAAAmtD,sBAAA,EACAhsD,EAAAnB,OAAAiI,mBAAA,SAAAmlD,GAEAmL,GAAA,EAEAtL,EAAAI,eAAA,EACAJ,EAAAK,sBAAAF,EAAA3nD,qBACAwnD,EAAAM,kBAAAxxD,SAAAG,SAEA,IAAA8vC,EAAA5jC,EAAA,iBAAAA,CAAA6/B,GACA1/B,EAAA0/B,EAAA1/B,YACA,KAAAH,EAAA,OAAAA,CAAA6/B,EAAA1/B,YAAA,aAAAuH,cAAA,IACA,GACAm9C,EAAAO,eAAAxhB,EAAAzjC,EACA0kD,EAAAtwB,OAAA,EAEAswB,EAAA7tC,OAAA,GAAA6tC,EAAA7tC,MAAA3f,SACAwtD,EAAA7tC,MAAA,IAGAquC,EAAAtqD,EAAAuqD,eAEAT,EAAA7tC,MAAAjhB,KAAA,CACA+G,KAAAlK,EAAAM,QAAA,gCAAA,KAAA2xD,EAAAO,eACAG,aAAA5xD,SAAAG,SACA0xD,gBAAAH,EAAA9K,OAAA,GACAkL,cAAAJ,EAAAtoC,WAGA0nC,EAAA9pD,OAAAkqD,GAAA7rD,SAAAC,KAAA,WACArB,EAAA6C,UAAA,EACA01D,GAAA,EACAv4D,EAAA0C,QACA1C,EAAAkuD,WAAAjB,IACA,SAAAtqD,GACA3C,EAAA4C,YAAAD,EACA3C,EAAA6C,UAAA,EACA01D,GAAA,KAGAp3D,EAAAnB,OAAA4vD,oBAAA,WACA5vD,EAAA6C,UAAA,GAEA1B,EAAAK,QACA,SAAAmB,GACA3C,EAAA4C,YAAAD,EACA3C,EAAA6C,UAAA,KAGA,SAAAF,GACA3C,EAAA4C,YAAAD,EACA3C,EAAA6C,UAAA,MA8CA,IAAA1B,EAAAlB,EAAA,CACAL,YAAA,2DACA4B,OA3CAxB,EAAA24D,iCAAA,CACA7zD,KAAA,6BACAkgB,QAAA,uBACAzkB,QAAA,CACA,CACAC,UAAA,uBACAC,QAAAzF,EAAAM,QAAA,cACAoF,SAAA,SACAwkB,SAAA,EACAovB,qBAAA,GAEA,CACA9zC,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,sCACAoF,SAAA,OACAjE,OAAA,CAAAb,KAAA,SACA+E,MAAA,OACAC,UAAA,QAEA,CACAJ,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,oBACAoF,SAAA,SACAC,MAAA,SAEA,CACAH,UAAA,YACAC,QAAAzF,EAAAM,QAAA,qBACAoF,SAAA,OACAjE,OAAA,CAAAsI,IAAA,aACA6D,mBAAA,SAAAG,GACA,IAAA6iD,EAAA7vD,OAAAgN,EAAAR,aACA,OAAAqjD,EAAA3vD,UACA,IAAA2vD,EAAA19B,MAAA,IAAA09B,EAAAp3B,OAAAo3B,EAAAn3B,SACA1rB,EAAAR,aAEA5H,MAAA,QAEA,CAAAH,UAAA,iBAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,aAQAk4D,OAAA,WAAAL,IAAAv4D,EAAA6C,UAAA,IACAb,MAAAhC,EAAAiC,YCxOAtH,MAAAkF,WAAA,oCAAA,CAAA,SAAA,aAAA,KAAA,SAAA,UAAA,aACA,SAAAG,EAAAhF,EAAAkN,EAAAjI,EAAAgiD,EAAAqR,GAEAtzD,EAAAsB,MAAAtB,EAAA64D,YAAA,GAEA74D,EAAA6C,UAAA,EAEA7C,EAAA84D,UAAA,SAAAx3D,GACA,OAAAA,IAAAA,EAAAqhD,SAAArhD,EAAAyG,WAGA/H,EAAA+4D,kBAAA,SAAAz3D,GACA,OAAAA,IAAAA,EAAAqhD,QAGA3iD,EAAAg5D,eAAA,WACA,IAAAC,EAAAhX,EAAAvgD,YACA1B,EAAAk5D,wBACAD,EAAAE,QAAAn5D,EAAAk5D,sBAAAC,QACAF,EAAAn0D,KAAA9E,EAAAk5D,sBAAAp0D,KACAm0D,EAAAG,WAAAp5D,EAAAk5D,sBAAAE,WACAH,EAAA9W,MAAAniD,EAAAk5D,sBAAA/W,MACA8W,EAAA/W,MAAAliD,EAAAk5D,sBAAAhX,MACA+W,EAAAI,QAAAr5D,EAAAk5D,sBAAAG,QACAJ,EAAAK,kBAAAt5D,EAAAk5D,sBAAAK,mBAGAC,EAAAp4D,SAAAC,KAAA,WACAm4D,EAAAx5D,OAAAi5D,WAAAr+D,QAAA2G,KAAA03D,GACAO,EAAAx5D,OAAAy5D,WAAA,EACAD,EAAAx5D,OAAA05D,UAAA,SAAAp4D,GACAtB,EAAAsB,MAAAqhD,OAAArhD,EAAAwB,IAEA02D,EAAAh4D,UAIAxB,EAAA25D,kBAAA,WACA,IAAAthD,EAAAi7C,EAAA5xD,YACA2W,EAAAsqC,OAAA3iD,EAAAsB,MAAAqhD,OACA3iD,EAAAk5D,uBACAl5D,EAAAk5D,sBAAAviD,UACA,EAAA3W,EAAAk5D,sBAAAviD,SAAAlX,SAEA4Y,EAAAvT,KAAA9E,EAAAk5D,sBAAAviD,SAAA,GAAA7R,KACAuT,EAAA+gD,WAAAp5D,EAAAk5D,sBAAAviD,SAAA,GAAAyiD,WACA/gD,EAAA8gD,QAAAn5D,EAAAk5D,sBAAAviD,SAAA,GAAAwiD,QACA9gD,EAAAyqB,SAAA9iC,EAAAk5D,sBAAAviD,SAAA,GAAAmsB,SACAzqB,EAAAuhD,YAAA55D,EAAAk5D,sBAAAviD,SAAA,GAAAijD,YACAvhD,EAAAwhD,WAAA75D,EAAAk5D,sBAAAviD,SAAA,GAAAmjD,QAGAC,EAAA34D,SAAAC,KAAA,WACA04D,EAAA/5D,OAAA2F,WAAA,GACAo0D,EAAA/5D,OAAAsB,MAAA+W,EACA0hD,EAAA/5D,OAAAy5D,WAAA,EACAM,EAAA/5D,OAAAg6D,cAAA,SAAA14D,GACAtB,EAAAsB,MAAAyG,UAAAzG,EAAAwB,IAEAi3D,EAAAv4D,UAkBA,IAAAg4D,EAAAv5D,EAAA,CACAL,YAAA,0BACA4B,OAhBAxB,EAAAwC,aAAA,SAAAlB,GAEAtB,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEA7C,EAAAi6D,yBAAAj6D,EAAAsB,OACAtB,EAAA0C,QAEA1C,EAAA6C,UAAA,KAMAb,MAAAhC,IAGA+5D,EAAA95D,EAAA,CACAL,YAAA,sCACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YCtFAtH,MAAAkF,WAAA,YAAA,CAAA,SAAA,SAAA,aAAA,UAAA,WAAA,UAAA,sBACA,cAAA,cAAA,cAAA,WAAA,WAAA,cACA,SAAAG,EAAAC,EAAAjF,EAAAoN,EAAAoG,EAAAq+C,EAAAvhD,EACArI,EAAAE,EAAAkF,EAAA66C,EAAAC,EAAAt/B,GAuBA,SAAAzS,IAEA,IAAAI,EAAA,KACAxR,EAAAM,cAAAN,EAAAM,aAAAmD,eACA+N,EAAAxR,EAAAM,aAAAmD,aAAAgO,sBAIA,IAAAzR,EAAAk6D,mBACAl6D,EAAAgwD,MAAAnD,EAAAsN,2BAAAn6D,EAAA28B,OAAA38B,EAAA8W,SAAA9W,EAAA9D,QACA8D,EAAAgwD,MAAA5uD,SAAAC,KAAA,WAEAmQ,GAAAxR,EAAAM,cAAAN,EAAAM,aAAAmD,aACA+K,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAAkN,GAAA,GAAAnQ,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACA26D,EAAA,SAGA,KAGAA,EAAA,OAGA,SAAAz3D,GACAy3D,EAAA,SAGA,IAAAp6D,EAAAk6D,mBAAAl6D,EAAAiE,aACAjE,EAAAgwD,MAAAnD,EAAAwN,0BAAAr6D,EAAA28B,OAAA38B,EAAAiE,YACAm2D,EAAA,OAIA,SAAAA,EAAAnN,GACAjtD,EAAA6vD,aAAA5C,EACAjtD,EAAA2D,WAAA,uBAAA3D,EAAA6vD,cA1DA7vD,EAAAk6D,kBAAA,EACAl6D,EAAA8W,SAAA/a,SAAA8U,SAAA,EAAA,KAAAD,QAAA,OAAA1U,SACA8D,EAAA9D,OAAAH,SAAA6U,QAAA,OAAA1U,SACA8D,EAAA28B,OAAA,EAEA15B,EAAAc,kBAAA1C,KAAA,SAAAjD,GACAA,IACA4B,EAAAiE,WAAA7F,EAAA0E,GACA,IAAA9C,EAAAk6D,mBACA9oD,OAKA9F,EAAA+B,cACArN,EAAAk6D,kBAAA5uD,EAAA2C,IAAA,sBAAA,EACAjO,EAAA28B,OAAArxB,EAAA2C,IAAA,eAAA,GAGAjO,EAAAgwD,MAAA,GA0CA5+C,IAEA,IAAAkpD,EAAA,IAAAjoB,WAAAj0C,KAAAm8D,YAAA,CACA3iB,KAAA,SAAA4iB,GACA,OAAAv3D,EAAAiE,cAAA9F,UAEAq5D,MAAA,SAAA55D,GACA,OAAAoC,EAAA46B,SAAAh9B,IAEA65D,SAAA,cAGAC,EAAA,IAAAtoB,WAAAj0C,KAAAm8D,YAAA,CACA3iB,KAAA,SAAA4iB,GACA,OAAArX,EAAAx+B,SAAAvjB,UAEAq5D,MAAA,SAAA55D,GACA,OAAAsiD,EAAA5hC,QAAA1gB,IAEA65D,SAAA,cAGA16D,EAAAM,aAAA,CACAwE,KAAA,QACAkgB,QAAA,KACAC,yBAAA,EACA1kB,QAAA,CACA,CACAC,UAAA,KACAC,QAAAzF,EAAAM,QAAA,cACAoF,SAAA,SACAwkB,SAAA,EACAovB,qBAAA,GAEA,CACAA,qBAAA,EACA7zC,QAAA,GACAD,UAAA,SACAG,MAAA,OACAqmD,UAAA,SACA0L,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA,CACAgjB,SAAA,MACAzxD,KAAA,QACA7K,KAAA,CACA,CAAA0E,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,iBACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,oBACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,oBACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,mBACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,kBACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,oBACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,mBAEAI,IAAA,MAEA4zC,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,QAEAzG,YAAA,EACA/c,mBAAA,SAAAG,GAAA,OAAAA,EAAAwgC,QACAsrB,sBAAA,SAAA9rD,GACA,YAAA,IAAAA,EAAAwgC,QAAA,OAAAxgC,EAAAwgC,OACA,GAEA,sCAAAsjB,EAAA+N,gBAAA7xD,EAAAwgC,QAAA,8BAIA,CACA+K,qBAAA,EACA7zC,QAAA,GACAD,UAAA,sBACAG,MAAA,OACAqmD,UAAA,SACA0L,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA,CACAzuC,KAAA,QACA7K,KAAA,CACA,CAAA0E,IAAA,EAAAgC,KAAA9J,EAAAM,QAAA,uBACA,CAAAwH,IAAA,EAAAgC,KAAA9J,EAAAM,QAAA,yBAEAI,IAAA,MAEA4zC,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,QAEAzG,YAAA,EACA/c,mBAAA,SAAAG,GAAA,OAAAA,EAAAwgC,QACAsrB,sBAAA,SAAA9rD,GACA,YAAA,IAAAA,EAAAmrD,qBAAA,OAAAnrD,EAAAmrD,oBACA,GAGA,iBADAnrD,EAAAmrD,oBAAA,YAAA,WACA,8BAMA,CAAA1zD,UAAA,wBAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,EAAAovB,qBAAA,GACA,CACA9zC,UAAA,kBACAsE,KAAA,kBACArE,QAAAzF,EAAAM,QAAA,wBACAoF,SAAA,SACAC,MAAA,OACAukB,SAAA,GAEA,CACA1kB,UAAA,mBACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,sBAGA,CACAoC,UAAA,UACAC,QAAAzF,EAAAM,QAAA,aACAoF,SAAA,SACAC,MAAA,QACA+xD,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAAijB,EACArrB,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,SAGA,CACA5rB,UAAA,UACAC,QAAAzF,EAAAM,QAAA,aACAoF,SAAA,SACAC,MAAA,QACAmI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAA8xD,WAGA,CACAr6D,UAAA,aACAC,QAAAzF,EAAAM,QAAA,oBACAoF,SAAA,SACAC,MAAA,QACAukB,SAAA,EACAwtC,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA4iB,EACAhrB,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,SAGA,CAAA5rB,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,OAAAjE,OAAA,CAAAb,KAAA,SAAA+E,MAAA,QACA,CACAH,UAAA,kBACAC,QAAAzF,EAAAM,QAAA,eACAoF,SAAA,SACAwkB,SAAA,EACApc,mBAAA,SAAAC,GACA,OAAAA,EAAAe,gBACA/N,OAAAgN,EAAAe,iBAAAgxD,OAAA,GACA,IAEAn6D,MAAA,QACA,CACAH,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAAo5C,QAEAxhD,MAAA,SAEA,CACAH,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAwkB,SAAA,EACAvkB,MAAA,SAEA,CACAH,UAAA,iBACAC,QAAAzF,EAAAM,QAAA,oBACAoF,SAAA,SACAgyD,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA,CACAzuC,KAAA,QACA7K,KAAA,CACA,CAAA0E,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,kCACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,yCACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,0BACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,0BACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,qCACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,oCACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,2DAEAI,IAAA,MAEA4zC,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,QAEAzrB,MAAA,QAEA,CACAH,UAAA,eACAC,QAAAzF,EAAAM,QAAA,qBACAqF,MAAA,QACAD,SAAA,SACAkI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,kBAEA,CACAoC,UAAA,iBACAC,QAAAzF,EAAAM,QAAA,YACAoF,SAAA,SACAC,MAAA,SAEA,CACAH,UAAA,iBACAC,QAAAzF,EAAAM,QAAA,gBACAoF,SAAA,SACAC,MAAA,SAEA,CACAH,UAAA,eACAC,QAAAzF,EAAAM,QAAA,gBACAoF,SAAA,UAEA,CAAAF,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,sBAAAtI,MAAA,SACA,CAAAH,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,wBAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,sBAAAtI,MAAA,SACA,CAAAH,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,yBAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,sBAAAtI,MAAA,QAAAC,UAAA,SAEAm0D,kBAAA,SAAAl0D,GACA,aAAAA,EAAAm0D,YAAA,UAAAn0D,EAAAL,UACAK,EAAAo0D,cAAAzoC,aAAA,SAAA0lB,EAAAgjB,EAAAC,GACA,OAAA,GAAAD,EACA/lD,EAAA,mDAEAA,EAAA,sCAAA09C,EAAA+N,gBAAA1oB,EAAApvC,IAAA,8BAKA,aAAAjC,EAAAm0D,YAAA,uBAAAn0D,EAAAL,UACAK,EAAAo0D,cAAAzoC,aAAA,SAAA0lB,EAAAgjB,EAAAC,GACA,OAAA,GAAAD,EACA/lD,EAAA,wDAGA,iBADA,GAAA+lD,EAAA,YAAA,WACA,6BAOA,aAAAr0D,EAAAm0D,YAAA,WAAAn0D,EAAAL,YACAK,EAAAk6D,WAAA,cAKA91D,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,oBACA6J,UAAA,SAAA/G,GAAA,OAAA,GAAAA,EAAAw5D,gBAAA,GAAAx5D,EAAAw5D,iBAAAz0D,EAAAU,SAAA,qBACAuB,SAAA,SAAAhH,GAAA4B,EAAAo1D,kBAAAh3D,EAAA05D,yBACA,CACA5yD,KAAAlK,EAAAM,QAAA,oBACA6J,UAAA,SAAA/G,GAAA,QAAAA,GAAA,GAAAA,EAAAu+B,QAAAx5B,EAAAU,SAAA,yBACAuB,SAAA,SAAAhH,GAAA4B,EAAA8tD,eAAA1vD,KACA,CACA8G,KAAAlK,EAAAM,QAAA,+BACA6J,UAAA,SAAA/G,GACA,QAAAA,GACA,GAAAA,EAAAw5D,gBACA,GAAAx5D,EAAAu+B,SACAv+B,EAAA81D,qBACA/wD,EAAAU,SAAA,yBACAV,EAAAU,SAAA,8BAEAuB,SAAA,SAAAhH,GAAA4B,EAAAg7D,eAAA58D,KACA,CACA8G,KAAAlK,EAAAM,QAAA,4BACA6J,UAAA,SAAA/G,GACA,QAAAA,GACA,GAAAA,EAAAw5D,gBACA,GAAAx5D,EAAAu+B,SACAv+B,EAAA81D,qBACA/wD,EAAAU,SAAA,iBACAV,EAAAU,SAAA,oBAEAuB,SAAA,SAAAhH,GAAA4B,EAAAi7D,iBAAA78D,KACA,CACA8G,KAAAlK,EAAAM,QAAA,iCACA6J,UAAA,SAAA/G,GAAA,QAAAA,GAAA,GAAAA,EAAAw5D,gBAAAz0D,EAAAU,SAAA,iBACAuB,SAAA,SAAAhH,GAAA4B,EAAAk7D,0BAAA98D,IACA8nB,YAAA,GACA,CACAhhB,KAAAlK,EAAAM,QAAA,kCACA6J,UAAA,SAAA/G,GAAA,QAAAA,GAAA,GAAAA,EAAAw5D,gBAAAz0D,EAAAU,SAAA,iBACAuB,SAAA,SAAAhH,GAAA4B,EAAAm7D,2BAAA/8D,KACA,CACA8G,KAAAlK,EAAAM,QAAA,gCACA6J,UAAA,SAAA/G,GAAA,QAAAA,GAAA,GAAAA,EAAAw5D,gBAAAz0D,EAAAU,SAAA,iBACAuB,SAAA,SAAAhH,GAAA4B,EAAAo7D,yBAAAh9D,IACA8nB,YAAA,GACA,CACAhhB,KAAAlK,EAAAM,QAAA,iCACA6J,UAAA,SAAA/G,GAAA,QAAAA,GAAA,GAAAA,EAAAw5D,gBAAAz0D,EAAAU,SAAA,iBACAuB,SAAA,SAAAhH,GAAA4B,EAAAq7D,0BAAAj9D,OAIA4B,EAAAk7D,0BAAA,SAAAjO,GACAqO,EAAAl6D,SAAAC,KAAA,WACAi6D,EAAAt7D,OAAAitD,KAAAA,EACAqO,EAAAt7D,OAAAs3D,WAAA,0BACAgE,EAAA7D,cAAA,WACArmD,KAEAkqD,EAAA95D,UAIAxB,EAAAo7D,yBAAA,SAAAnO,GACAqO,EAAAl6D,SAAAC,KAAA,WACAi6D,EAAAt7D,OAAAitD,KAAAA,EACAqO,EAAAt7D,OAAAs3D,WAAA,yBACAgE,EAAA7D,cAAA,WACArmD,KAEAkqD,EAAA95D,UAIAxB,EAAAm7D,2BAAA,SAAAlO,GACAqO,EAAAl6D,SAAAC,KAAA,WACAi6D,EAAAt7D,OAAAitD,KAAAA,EACAqO,EAAAt7D,OAAAs3D,WAAA,2BACAgE,EAAA7D,cAAA,WACArmD,KAEAkqD,EAAA95D,UAIAxB,EAAAq7D,0BAAA,SAAApO,GACAqO,EAAAl6D,SAAAC,KAAA,WACAi6D,EAAAt7D,OAAAitD,KAAAA,EACAqO,EAAAt7D,OAAAs3D,WAAA,0BACAgE,EAAA7D,cAAA,WACArmD,KAEAkqD,EAAA95D,UAKAxB,EAAAo1D,kBAAA,SAAAxB,GACA2B,EAAAn0D,SAAAC,KAAA,WACAk0D,EAAAv1D,OAAAu0D,OAAA,KACAgB,EAAAv1D,OAAAw1D,uBAAA,KACAD,EAAAv1D,OAAA4zD,eAAAA,EACA2B,EAAA/zD,UAKAxB,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,MAGApR,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,MAGApR,EAAAiB,cAAA,SAAA7C,GACAg8D,EAAAh8D,IAGA4B,EAAAyB,SAAA,WACA85D,EAAAn6D,SAAAC,KAAA,WACAk6D,EAAAv7D,OAAAsB,MAAAurD,EAAAnrD,YACA65D,EAAAv7D,OAAAkuD,WAAA,SAAA5sD,GACA8P,KAEAmqD,EAAA/5D,UAIAxB,EAAAkB,UAAA,SAAA+rD,GACAsO,EAAAn6D,SAAAC,KAAA,WACAk6D,EAAAv7D,OAAAguD,OAAAf,EAAAnqD,GACAy4D,EAAAv7D,OAAAsB,MAAA,KACAi6D,EAAAv7D,OAAAkuD,WAAA,WACA98C,KAEAmqD,EAAA/5D,UAIAxB,EAAA2B,YAAA,SAAAvD,GACAyuD,EAAAjrD,OAAAxD,EAAA0E,IAAA1B,SAAAC,KAAA,WACA+P,OAIApR,EAAAyX,mBAAA,WACAzX,EAAA8W,UAAA/a,OAAAiE,EAAA8W,UAAA7a,WAAA+D,EAAA9D,QAAAH,OAAAiE,EAAA9D,QAAAD,YACAqP,EAAA+B,aACA/B,EAAAqC,IAAA,oBAAA3N,EAAAk6D,mBAEA9oD,MAIApR,EAAA6E,iBAAA,SAAAZ,GACAA,GAEAmN,KAIApR,EAAA8tD,eAAA,SAAAb,GACAc,EAAA3sD,SAAAC,KAAA,WACA0sD,EAAA/tD,OAAAguD,OAAAf,EAAAnqD,GACAirD,EAAA/tD,OAAAiuD,OAAA,KACAF,EAAA/tD,OAAAkuD,WAAA,SAAA5sD,GACA8P,KAEA28C,EAAAvsD,UAIAxB,EAAAw7D,mBAAA,SAAA7+B,GACArxB,EAAA+B,aACA/B,EAAAqC,IAAA,aAAAgvB,GAEAvrB,KAGApR,EAAAg7D,eAAA,SAAA/N,GACAwO,EAAAr6D,SAAAC,KAAA,WACAo6D,EAAAz7D,OAAA43D,eAAA3K,EAAA2K,eACA6D,EAAAz7D,OAAA83D,sBAAA7K,EAAA6K,sBACA2D,EAAAz7D,OAAAguD,OAAAf,EAAAnqD,GACA24D,EAAAz7D,OAAA+oB,UAAAkkC,EAAAC,WAAA,GACAuO,EAAAz7D,OAAAkuD,WAAA,SAAA5sD,GACA8P,KAEAqqD,EAAAj6D,UAIAxB,EAAAi7D,iBAAA,SAAAhO,GACAyO,EAAAt6D,SAAAC,KAAA,WACAwiB,EAAAniB,YAAAL,KAAA,SAAA8S,GAEAA,EAAAorB,OAAA0tB,EAAA1tB,OACAprB,EAAA4U,UAAAkkC,EAAAC,WAAA,GAEAwO,EAAA17D,OAAAsB,MAAA6S,EACAunD,EAAA17D,OAAA27D,6BAAA,EACAD,EAAA17D,OAAAomB,eAAA,SAAA9kB,GAEAurD,EAAAtrC,QAAA0rC,EAAAnqD,IAAA1B,SAAAC,KAAA,SAAAu6D,GACAA,EAAAvO,eAAA,EACAuO,EAAAtO,sBAAAhsD,EAAAwB,GACA84D,EAAArO,kBAAAxxD,SAAAG,SAGAH,OAAAuF,EAAApF,QAAAD,UACA2/D,EAAApO,eAAAxyD,EAAAM,QAAA,6BAAAs0B,EAAAxnB,EAAA,OAAAA,CAAA9G,EAAAwV,SAAA,YAAA1O,EAAA,OAAAA,CAAA9G,EAAApF,OAAA,aAEA0/D,EAAApO,eAAAxyD,EAAAM,QAAA,6BAAAs0B,EAAAxnB,EAAA,OAAAA,CAAA9G,EAAAwV,SAAA,YAAA,IAGA8kD,EAAAj/B,OAAA,EACAi/B,EAAAx8C,OAAA,GAAAw8C,EAAAx8C,MAAA3f,SACAm8D,EAAAx8C,MAAA,IAGA,IAAAquC,EAAAtqD,EAAAuqD,eACAkO,EAAAx8C,MAAAjhB,KAAA,CACA+G,KAAA02D,EAAApO,eACAG,aAAA5xD,SAAAG,SACA0xD,gBAAAH,EAAA9K,OAAA,GACAkL,cAAAJ,EAAAtoC,WAGA0nC,EAAA9pD,OAAA64D,GAAAx6D,SAAAC,KAAA,WACA+P,SAIAsqD,EAAAl6D,YAKAxB,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,uCACA,CACAzG,MAAA,kBACAyG,SAAA,qDACA,CACAzG,MAAA,kBACAyG,SAAA,qDACA,CACAzG,MAAA,gBACAyG,SAAA,2CAGA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,EAAAC,SAAAA,MAIA,IAAAwvD,EAAAt1D,EAAA,CACAL,YAAA,oCACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGA8rD,EAAA9tD,EAAA,CACAL,YAAA,gDACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGAw5D,EAAAx7D,EAAA,CACAL,YAAA,8CACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGAs5D,EAAAt7D,EAAA,CACAL,YAAA,0BACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGAq5D,EAAAr7D,EAAA,CACAL,YAAA,0CACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGAy5D,EAAAz7D,EAAA,CACAL,YAAA,4CACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YCjoBAtH,MAAAkF,WAAA,kBAAA,CAAA,SAAA,SAAA,aAAA,KAAA,UAAA,uBAAA,aAAA,UACA,SAAAG,EAAAC,EAAAjF,EAAAkN,EAAA2kD,EAAAgP,EAAAvI,EAAArR,GAYA,SAAA6Z,IACA,OAAA5zD,EAAA,SAAAzF,EAAA8O,GAEA,IAAAwqD,EAAA,GACAA,EAAA59D,KAAA8jD,EAAA+Z,YAAAh8D,EAAAsB,MAAAi+B,QAAAn+B,UACApB,EAAAsB,MAAA4rD,YAAA,EAAAltD,EAAAsB,MAAA4rD,WAAAztD,QACAs8D,EAAA59D,KAAAm1D,EAAA2I,oBAAAj8D,EAAAsB,MAAAi+B,QAAAn+B,UAGA8G,EAAAiD,IAAA4wD,GAAA16D,KAAA,SAAAjD,GACA4B,EAAAytD,KAAArvD,EAAA,GACA,EAAAA,EAAAqB,SACAkX,EAAAvY,EAAA,GACA4B,EAAA2W,SAAAva,EAAAmoB,iBAAA5N,EAAA3W,EAAAsB,MAAA4rD,WAAA,SAAAgP,EAAAC,GACA,OAAAD,EAAAp5D,IAAAq5D,IAGA//D,EAAAkJ,QAAAtF,EAAA2W,SAAA,SAAA9V,GACAA,EAAAskB,SAAA3lB,OAAAb,UAAAwmB,SAAAtkB,EAAAiE,KAAAjE,EAAAu4D,WAAAv4D,EAAAs4D,YAIA12D,KACA,SAAAE,GACA4O,EAAA5O,OAlCA3C,EAAAsB,MAAAtB,EAAAsB,OAAA,GACAtB,EAAAqC,UAAA,GACArC,EAAAuzC,YAAA,EAEAvzC,EAAAytD,KAAA,GACAztD,EAAA2W,SAAA,GAEA3W,EAAAk5D,sBAAA,KACAl5D,EAAAo8D,0BAAA,KA8EAp8D,EAAAq8D,oBAAA,WACAr8D,EAAAk5D,wBACAl5D,EAAAk5D,sBAAA2C,EAAAn6D,aAEA1B,EAAAsB,MAAA4yD,qBAAA,EACAl0D,EAAAsB,MAAAqhD,OAAA,KACA3iD,EAAAsB,MAAA4rD,WAAA,IAGAltD,EAAAs8D,mBAAA,WACAt8D,EAAAsB,MAAA4yD,qBAAA,EACAl0D,EAAAsB,MAAAqhD,OAAA,KACA3iD,EAAAsB,MAAA4rD,WAAA,CAAA,KAIAltD,EAAAknB,YAAA,WACA,OAAA,GAGAlnB,EAAAsC,kBAAA,WACA,IAAAi6D,EAAA3hE,QAAA2H,OAAAvC,EAAAsB,MAAAtB,EAAAqC,WACAm6D,EAAA5hE,QAAA2H,OAAAvC,EAAAk5D,sBAAAl5D,EAAAo8D,2BAEA,OAAAG,GAAAC,GAIAx8D,EAAA6C,UAAA,EAEA7C,EAAAwC,aAAA,WAEAxC,EAAA6C,UAAA,EAEA,IAAA45D,EAAA7hE,QAAA2G,KAAAvB,EAAAsB,OAIAi7D,EAAA3hE,QAAA2H,OAAAk6D,EAAAz8D,EAAAqC,WACAm6D,EAAA5hE,QAAA2H,OAAAvC,EAAAk5D,sBAAAl5D,EAAAo8D,2BAgGA,SAAA35D,IACAzC,EAAA6C,UAAA,EACA7C,EAAA0C,QACA1C,EAAAkuD,YACAluD,EAAAkuD,WAAAuO,GAIA,SAAA95D,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EAxGAq+D,EAAA5pD,OAEA4pD,EAAAvP,YAAAuP,EAAAvP,WAAAztD,QAAA,IAAAg9D,EAAAvP,WAAA,KACAuP,EAAAvP,WAAA,IAGAuP,EAAAr9C,OAAAq9C,EAAAr9C,MAAA3f,SACAg9D,EAAAr9C,MAAA,GAAAla,MAAAu3D,EAAAr9C,MAAA,GAAAs9C,mBACAD,EAAAr9C,MAAA,QAIAo9C,GAAAx8D,EAAAk5D,uBAAAuD,EAAAvI,oBACA2H,EAAA74D,OAAAhD,EAAAk5D,uBAAA93D,SAAAC,KAAA,SAAAizB,GAEAmoC,EAAAl9B,OAAAjL,EAAAxxB,GACAwxB,EAAA3d,UAAA2d,EAAA3d,SAAAlX,SACAg9D,EAAAvP,WAAA,CAAA54B,EAAA3d,SAAA,GAAA7T,KAGA+pD,EAAA7pD,OAAAy5D,GAAAr7D,SAAAC,KAAAoB,EAAAE,IAEAA,GAEAkqD,EAAA7pD,OAAAy5D,GAAAr7D,SAAAC,KAAAoB,EAAAE,MAKA65D,GAAAx8D,EAAAk5D,uBAAAuD,EAAAvI,sBACAl0D,EAAAk5D,sBAAAviD,UAAA3W,EAAAk5D,sBAAAviD,SAAAlX,QAEAg9D,EAAAvP,YAAAuP,EAAAvP,WAAAztD,SACAg9D,EAAAvP,WAAA,GACAqP,GAAA,KAKAC,GAAAC,EAAAvI,oBACA2H,EAAA94D,OAAA/C,EAAAk5D,uBAAA93D,SAAAC,KAAA,YAEArB,EAAAk5D,sBAAAviD,WAAA3W,EAAAk5D,sBAAAviD,SAAAlX,QACAg9D,EAAAvP,YAAAuP,EAAAvP,WAAAztD,OA0BA88D,EAGA95D,IAFAoqD,EAAA9pD,OAAA05D,GAAAr7D,SAAAC,KAAAoB,EAAAE,GAxBAk5D,EAAAt6C,QAAAvhB,EAAAk5D,sBAAAp2D,IAAA1B,SAAAC,KAAA,SAAAizB,GAEAA,EAAA3d,UAAA2d,EAAA3d,SAAAlX,SACAg9D,EAAAvP,WAAA,CAAA54B,EAAA3d,SAAA,GAAA7T,IACAy5D,GAAA,GAGAA,GACA1P,EAAA9pD,OAAA05D,GAAAr7D,SAAAC,KAAAoB,EAAAE,IAGAA,IAmBAA,GAEA45D,GACA1P,EAAA9pD,OAAA05D,GAAAr7D,SAAAC,KAAA,WACAo7D,EAAAvI,sBACAl0D,EAAAqC,UAAA6xD,qBACA,GAAAuI,EAAA7E,gBAAA,GAAA6E,EAAA7E,gBAAA,GAAA6E,EAAA7E,iBACA53D,EAAAqC,UAAAk9B,OAGA98B,IAFAo5D,EAAAj6D,OAAA5B,EAAAqC,UAAAk9B,QAAAn+B,SAAAC,KAAAoB,EAAAE,IAIAA,KAoBA3C,EAAAiG,WAAA,CAAA,CACA5K,MAAA,WACAyG,SAAA,oCACA,CACAzG,MAAA,eACAyG,SAAA,qCAGA9B,EAAAsB,MAAAuR,OACA7S,EAAAiG,WAAA9H,KAAA,CACA9C,MAAA,gBACAyG,SAAA,sCAIA9B,EAAAiG,WAAAlE,UAAA,EAGA/B,EAAA28D,0BAAA,WAEAC,EAAAx7D,SAAAC,KAAA,WACAu7D,EAAA58D,OAAAk5D,sBAAAl5D,EAAAk5D,sBACA0D,EAAA58D,OAAAi6D,yBAAA,SAAA34D,GACAtB,EAAAsB,MAAAi+B,OAAAj+B,EAAAqhD,OACA3iD,EAAAsB,MAAA4rD,WAAA,CAAA5rD,EAAAyG,WACA/H,EAAAsB,MAAA4yD,qBAAA,EACAl0D,EAAAk5D,sBAAA,KAEA4C,KAEAc,EAAAp7D,UA0BA,IA5PAwsD,EA4PA4O,EAAA38D,EAAA,CACAL,YAAA,sDACA4B,OAxBAxB,EAAA68D,8BAAA,WAEAD,EAAAx7D,SAAAC,KAAA,WACAu7D,EAAA58D,OAAAk5D,sBAAA,KACA0D,EAAA58D,OAAA64D,WAAA,CACAlW,OAAA3iD,EAAAsB,MAAAi+B,OACAx3B,UAAA,MAAA/H,EAAAsB,MAAA4rD,YAAA,EAAAltD,EAAAsB,MAAA4rD,WAAAztD,OACAO,EAAAsB,MAAA4rD,WAAA,GACA,MAEA0P,EAAA58D,OAAAi6D,yBAAA,SAAA34D,GACAtB,EAAAsB,MAAAi+B,OAAAj+B,EAAAqhD,OACA3iD,EAAAsB,MAAA4rD,WAAA,CAAA5rD,EAAAyG,WACA/H,EAAAsB,MAAA4yD,qBAAA,EACAl0D,EAAAk5D,sBAAA,KAEA4C,KAEAc,EAAAp7D,WAOAQ,MAAAhC,EAAAiC,SA5PA,SAAA66D,IAEA,GAAA98D,EAAAsB,MAAAq7B,QACA38B,EAAA4C,YAAA,CAAAqoB,OAAA,CAAA,CAAA9d,QAAAnS,EAAAM,QAAA,uCACA0E,EAAA6C,UAAA,EACA7C,EAAAuzC,YAAA,GAEAvzC,EAAAuzC,YAAA,EAEAvzC,EAAAugB,WAAA,EAsPAvgB,EAAAsB,MAAAuR,OAGA7S,EAAAuzC,YAAA,EACAvzC,EAAAq8D,wBAtQArO,EAmQAhuD,EAAAguD,OAlQAhuD,EAAAugB,WAAA,EAcAssC,EAAAtrC,QAAAysC,GAAA5sD,SAAAC,KAAA,SAAAjD,GAEA4B,EAAAsB,MAAAlD,EACA4B,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsB,MAAA4yD,oBAEA2H,EAAAt6C,QAAAvhB,EAAAsB,MAAAi+B,QAAAn+B,SAAAC,KAAA,SAAAosD,GAEAztD,EAAAk5D,sBAAAzL,EACAztD,EAAAo8D,0BAAAxhE,QAAA2G,KAAAvB,EAAAk5D,uBAEA4D,KACA,SAAAn6D,GACA3C,EAAAugB,WAAA,IAKAu7C,IAAAz6D,KAAA,WACAy7D,KACA,SAAAn6D,GACA3C,EAAAsB,MAAA,GACAtB,EAAAugB,WAAA,KAGA,SAAA5d,GACA3C,EAAAsB,MAAA,GACAtB,EAAAugB,WAAA,QCrFA5lB,MAAAkF,WAAA,iCAAA,CAAA,SAAA,SAAA,aAAA,KAAA,UACA,SAAAG,EAAAC,EAAAjF,EAAAkN,EAAAE,GAGApI,EAAA+8D,0BAAA,SAAAz7D,GACAtB,EAAAkwD,eAAAlwD,EAAA6vD,cACA7vD,EAAA0C,SAGA1C,EAAAg9D,4BAAA,WACAh9D,EAAAkwD,eAAA,MACAlwD,EAAA0C,SAGA1C,EAAAi9D,2BAAA,SAAAjzD,GACAhK,EAAA6vD,aAAA7lD,GAGAhK,EAAAk4D,WAAA,WACA,QAAAl4D,EAAA6vD,cAGA7vD,EAAAk9D,0BAAA,CACAp4D,KAAA,gBACAkgB,QAAA,KACAzkB,QAAA,CACA,CACAC,UAAA,KACAC,QAAAzF,EAAAM,QAAA,cACAoF,SAAA,SACAwkB,SAAA,EACAovB,qBAAA,GAEA,CACA9zC,UAAA,eACAC,QAAAzF,EAAAM,QAAA,sBACAoF,SAAA,OACAjE,OAAA,CAAAwM,KAAA,sBACAtI,MAAA,QACAC,UAAA,OACAkI,mBAAA,SAAAC,GACA,OAAAA,EAAAo0D,aAAA,GAAAp0D,EAAAo0D,YAAA19D,OACAsJ,EAAAo0D,YAAA,GAAAC,aAEA,KAGA,CACA58D,UAAA,iBACAC,QAAAzF,EAAAM,QAAA,oBACAoF,SAAA,SACAgyD,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA,CACAzuC,KAAA,QACA7K,KAAA,CACA,CAAA0E,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,kCACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,yCACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,0BACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,0BACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,qCACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,qCAEAI,IAAA,MAEA4zC,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,QAEAzrB,MAAA,QAEA,CACAH,UAAA,iBAAAC,QAAAzF,EAAAM,QAAA,YACAoF,SAAA,SACAC,MAAA,SAEA,CACAH,UAAA,iBAAAC,QAAAzF,EAAAM,QAAA,gBACAoF,SAAA,eCjFA/F,MAAAkF,WAAA,wBAAA,CAAA,SAAA,SAAA,aAAA,UAAA,kBACA,SAAAG,EAAAC,EAAAjF,EAAA6xD,EAAAhxB,GAEA77B,EAAAq9D,UAAA,GACA,IAAAxN,EAAA,KACAyN,EAAA,KAEA12D,GAAA,EACAC,GAAA,EA+BA,SAAA4P,EAAA3T,GACA9C,EAAAq9D,UAAA,GACAxQ,EAAAtrC,QAAAze,GAAA1B,SAAAC,KAAA,SAAAjD,GACAk/D,EAAAl/D,EACA4B,EAAAq9D,UAAAC,EAAAl+C,MACAvY,GAAA,GACA,SAAAlE,GACA26D,EAAA,KACAt9D,EAAAq9D,UAAA,GACAx2D,GAAA,IAtCA7G,EAAA/E,IAAA,uBAAA,SAAA4F,EAAA08D,GACAA,EACA32D,EACA6P,EAAA8mD,EAAAz6D,IAEA+D,GAAA,GAIA7G,EAAAq9D,UAAA,GACAC,EAAA,MAGAzN,EAAA0N,IAGAv9D,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAAgpD,GACAp5C,EAAAo5C,EAAA/sD,KAIA8D,GAAA,IAiBA5G,EAAAyB,SAAA,WACAssD,EAAA3sD,SAAAC,KAAA,WACA0sD,EAAA/tD,OAAAguD,OAAA6B,EAAA/sD,GACAirD,EAAA/tD,OAAAiuD,OAAA,KACAF,EAAA/tD,OAAAkuD,WAAA,SAAA5sD,GACAtB,EAAA2H,MAAA,cAAA,CAAA7E,GAAA+sD,EAAA/sD,MAEAirD,EAAAvsD,UAIAxB,EAAAkB,UAAA,SAAA9C,GACA2vD,EAAA3sD,SAAAC,KAAA,WACA0sD,EAAA/tD,OAAAguD,OAAA6B,EAAA/sD,GACAirD,EAAA/tD,OAAAiuD,OAAA7vD,EAAA0E,GACAirD,EAAA/tD,OAAAkuD,WAAA,WACAluD,EAAA2H,MAAA,cAAA,CAAA7E,GAAA+sD,EAAA/sD,MAEAirD,EAAAvsD,UAIAxB,EAAA2B,YAAA,SAAAvD,GACAyuD,EAAAtrC,QAAA+7C,EAAAx6D,IAAA1B,SAAAC,KAAA,SAAA4rD,GACA,IAMA1+B,EANA,GAAA0+B,EAAAtwB,OACAd,EAAAiB,YAAA9hC,EAAAM,QAAA,uCAIA2xD,EAAA7tC,YAAA,IAAAhhB,EAAA0E,IAAA,OAAA1E,EAAA0E,MAEA,IADAyrB,EAAAnyB,EAAAwuD,UAAAqC,EAAA7tC,MAAA,CAAAtc,GAAA1E,EAAA0E,QAEAmqD,EAAA7tC,MAAArL,OAAAwa,EAAA,GACAs+B,EAAA9pD,OAAAkqD,GAAA7rD,SAAAC,KAAA,WACArB,EAAA2H,MAAA,cAAA,CAAA7E,GAAA+sD,EAAA/sD,WA0BA,IAAAirD,EAAA9tD,EAAA,CACAL,YAAA,gDACA4B,OApBAxB,EAAAw9D,sBAAA,CACA14D,KAAA,YACAvE,QAAA,CACA,CAAAC,UAAA,KAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CACA1kB,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,UAGA,CAAAF,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,wBAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,sBAAAtI,MAAA,SACA,CAAAH,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,sBAAAtI,MAAA,QAAAC,UAAA,QACA,CAAAJ,UAAA,gBAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,SAAAC,MAAA,UAEAwG,iBAAA,WAAA,OAAA0oD,GAAA,GAAAA,EAAAlzB,QACA0U,kBAAA,WAAA,OAAAwe,GAAA,GAAAA,EAAAlzB,QACA1T,oBAAA,WAAA,OAAA4mC,GAAA,GAAAA,EAAAlzB,UAOA36B,MAAAhC,EAAAiC,YCnHAtH,MAAAkF,WAAA,8BAAA,CAAA,SAAA,SAAA,aAAA,UAAA,cACA,SAAAG,EAAAC,EAAAjF,EAAA6xD,EAAA1pD,GAMA,IAAA6qD,EAAAC,EAJAjuD,EAAAsB,MAAA,GACAtB,EAAAitD,KAAA,KACAjtD,EAAAuzC,YAAA,EAEAya,EA6CAhuD,EAAAguD,OA7CAC,EA6CAjuD,EAAAiuD,OA5CAjuD,EAAAugB,WAAA,EAEAssC,EAAAtrC,QAAAysC,GAAA5sD,SAAAC,KAAA,SAAAjD,GAYA,IAUAqvD,EApBAztD,EAAAitD,KAAA7uD,EAEA,GAAA4B,EAAAitD,KAAAtwB,QACA38B,EAAA4C,YAAA,CAAAqoB,OAAA,CAAA,CAAA9d,QAAAnS,EAAAM,QAAA,uCACA0E,EAAA6C,UAAA,EACA7C,EAAAuzC,YAAA,GAEAvzC,EAAAuzC,YAAA,EAGAn1C,EAAAghB,OAAA,MAAA6uC,GAMA,IADA1/B,EAAAnyB,EAAAwuD,UAAAxsD,EAAAghB,MAAA,CAAAtc,GAAAmrD,MAEAjuD,EAAAsB,MAAAlD,EAAAghB,MAAAmP,GACAvuB,EAAAsB,QACAtB,EAAAsB,MAAAqsD,aAAA5xD,SAAAG,SACAuxD,EAAAtqD,EAAAuqD,eAEA1tD,EAAAsB,MAAAssD,gBAAAH,EAAA9K,OAAA,GACA3iD,EAAAsB,MAAAusD,cAAAJ,EAAAtoC,YAGAnlB,EAAAsB,MAAA,GACAlD,EAAAghB,MAAAjhB,KAAA6B,EAAAsB,SAhBAlD,EAAAghB,MAAAhhB,EAAAghB,OAAA,GACApf,EAAAsB,MAAA,GACAlD,EAAAghB,MAAAjhB,KAAA6B,EAAAsB,QAkBAtB,EAAAy9D,SAAA7iE,QAAA2G,KAAAvB,EAAAitD,MAEAjtD,EAAAugB,WAAA,GACA,SAAA5d,GACA3C,EAAAsB,MAAA,GACAtB,EAAAugB,WAAA,IAMAvgB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAy9D,WAGAz9D,EAAA6C,UAAA,EAEA7C,EAAAwC,aAAA,WAEAxC,EAAA6C,UAAA,EAEAgqD,EAAA9pD,OAAA/C,EAAAitD,MAAA7rD,SAAAC,KAEA,WACArB,EAAA6C,UAAA,EACA7C,EAAA0C,QACA1C,EAAAkuD,YACAluD,EAAAkuD,WAAAluD,EAAAitD,OAIA,SAAA7uD,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,QC5EAzD,MAAAkF,WAAA,sBAAA,CAAA,SAAA,SAAA,aAAA,UAAA,uBACA,SAAAG,EAAAC,EAAAjF,EAAAinD,EAAA4Z,GAEA77D,EAAA6vD,aAAA,KACA7vD,EAAA09D,iBAAA,GAEA19D,EAAA/E,IAAA,uBAAA,SAAA4F,EAAA08D,GACAv9D,EAAA6vD,aAAA0N,OCPA5iE,MAAAkF,WAAA,kCAAA,CAAA,SAAA,SAAA,aAAA,wBAAA,cACA,SAAAG,EAAAC,EAAAjF,EAAAoI,EAAAiF,GAEA,IAAAwnD,EAAA,KACAjpD,GAAA,EACAC,GAAA,EA+BA,SAAA4P,EAAAw2C,GACAA,EAAAiH,qBACAl0D,EAAAkvD,oBAAA,GACAroD,GAAA,IAGA7G,EAAAq9D,UAAA,GACAj6D,EAAAu6D,oBAAA1Q,EAAA1tB,QAAAn+B,SAAAC,KAAA,SAAAjD,GACA4B,EAAAkvD,oBAAA9wD,EACAyI,GAAA,GACA,SAAAlE,GACA3C,EAAAkvD,oBAAA,GACAroD,GAAA,KAzCA7G,EAAA/E,IAAA,uBAAA,SAAA4F,EAAA08D,GACAA,EACA32D,EACA6P,EAAA8mD,GAEA12D,GAAA,GAIA7G,EAAAq9D,UAAA,GACAC,SAAA,MAGAzN,EAAA0N,IAGAv9D,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAAgpD,GACAp5C,EAAAo5C,IAIAjpD,GAAA,IA0CA5G,EAAAmvD,gCAAA,CACArqD,KAAA,sBACAvE,QAAA,CACA,CAAAC,UAAA,uBAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CACA1kB,UAAA,iBACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OA9BAjE,EA8BAiE,EAAAqc,YA9BAw4C,EA8BA70D,EAAAsc,kBA9BAw4C,EA8BA90D,EAAAuc,eA5BAs4C,IAEAz4C,EADAA,EACAA,EAAA,IAAAy4C,EAGAA,GAMAz4C,EAFA04C,EACA14C,EACAA,EAAA,IAAA04C,EAEAA,EAGA14C,EAlBA,IAAArgB,EAAA84D,GAgCAh1D,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAQ,kBAAAzK,EAAA,cAAA,iBAAA,sBACAuC,MAAA,SAEA,CAAAH,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,iBAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAC,MAAA,SACA,CACAH,UAAA,YACAC,QAAAzF,EAAAM,QAAA,qBACAoF,SAAA,OACAjE,OAAA,CAAAsI,IAAA,sBACA6D,mBAAA,SAAAG,GACA,IAAA6iD,EAAA7vD,OAAAgN,EAAAR,aACA,OAAAqjD,EAAA3vD,UACA,IAAA2vD,EAAA19B,MAAA,IAAA09B,EAAAp3B,OAAAo3B,EAAAn3B,SACA1rB,EAAAR,aAEA5H,MAAA,SAEA,CAAAH,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,UACA,CAAAF,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,SACA,CAAAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,SACA,CAAAH,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,6BAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,aAAAtI,MAAA,QAAAC,UAAA,SAEAsI,cAAA,SAAArI,GACAgvD,GAAA,GAAAA,EAAAxC,gBAAAwC,EAAAvC,uBACA,QAAAzsD,EAAAsI,SACAtI,EAAAuI,UAAAC,iBAAAxI,EAAAyI,UACA7D,sBAAAoqD,EAAAvC,uBACAzsD,EAAA2I,WAAAC,SAAA,oBCjHA9O,MAAAkF,WAAA,kCAAA,CAAA,SAAA,SAAA,aAAA,wBAAA,cACA,SAAAG,EAAAC,EAAAjF,EAAAoI,EAAAiF,GAEA,IAAAwnD,EAAA,KACAjpD,GAAA,EACAC,GAAA,EA+BA,SAAA4P,EAAAw2C,GACAA,EAAAiH,qBACAl0D,EAAAkvD,oBAAA,GACAroD,GAAA,IAGA7G,EAAAq9D,UAAA,GACAj6D,EAAA06D,oBAAA7Q,EAAA1tB,QAAAn+B,SAAAC,KAAA,SAAAjD,GACA4B,EAAAkvD,oBAAA9wD,EACAyI,GAAA,GACA,SAAAlE,GACA3C,EAAAkvD,oBAAA,GACAroD,GAAA,KAzCA7G,EAAA/E,IAAA,uBAAA,SAAA4F,EAAA08D,GACAA,EACA32D,EACA6P,EAAA8mD,GAEA12D,GAAA,GAIA7G,EAAAq9D,UAAA,GACAC,SAAA,MAGAzN,EAAA0N,IAGAv9D,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAAgpD,GACAp5C,EAAAo5C,IAIAjpD,GAAA,IA0CA5G,EAAAmvD,gCAAA,CACArqD,KAAA,sBACAvE,QAAA,CACA,CAAAC,UAAA,uBAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CACA1kB,UAAA,iBACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OA9BAjE,EA8BAiE,EAAAqc,YA9BAw4C,EA8BA70D,EAAAsc,kBA9BAw4C,EA8BA90D,EAAAuc,eA5BAs4C,IAEAz4C,EADAA,EACAA,EAAA,IAAAy4C,EAGAA,GAMAz4C,EAFA04C,EACA14C,EACAA,EAAA,IAAA04C,EAEAA,EAGA14C,EAlBA,IAAArgB,EAAA84D,GAgCAh1D,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAQ,kBAAAzK,EAAA,cAAA,iBAAA,sBACAuC,MAAA,SAEA,CAAAH,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,iBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,SACA,CACAH,UAAA,YACAC,QAAAzF,EAAAM,QAAA,qBACAoF,SAAA,OACAjE,OAAA,CAAAsI,IAAA,aACA6D,mBAAA,SAAAG,GACA,IAAA6iD,EAAA7vD,OAAAgN,EAAAR,aACA,OAAAqjD,EAAA3vD,UACA,IAAA2vD,EAAA19B,MAAA,IAAA09B,EAAAp3B,OAAAo3B,EAAAn3B,SACA1rB,EAAAR,aAEA5H,MAAA,QAEA,CAAAH,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,UACA,CAAAF,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,SACA,CAAAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,SACA,CAAAH,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,6BAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,aAAAtI,MAAA,QAAAC,UAAA,SAEAsI,cAAA,SAAArI,GACAgvD,GAAA,GAAAA,EAAAxC,gBAAAwC,EAAAvC,uBACA,QAAAzsD,EAAAsI,SACAtI,EAAAuI,UAAAC,iBAAAxI,EAAAyI,UACA7D,sBAAAoqD,EAAAvC,uBACAzsD,EAAA2I,WAAAC,SAAA,oBCjHA9O,MAAAkF,WAAA,aAAA,CAAA,SAAA,SAAA,aAAA,WAAA,KAAA,WACA,SAAAG,EAAAC,EAAAjF,EAAAwT,EAAAtG,EAAAg7C,GAEA,SAAA9xC,EAAAC,GAEA,OAAAnJ,EAAA,SAAAoJ,EAAAC,GACA,IAAAC,EAAA,KACAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cAAA4N,IACAG,EAAAxR,EAAAM,aAAAmD,aAAAgO,sBAGAyxC,EAAAv+B,QAAA,GACAvjB,SAAAC,KAAA,SAAAjD,GACA4B,EAAA+9D,OAAA3/D,EAEAoT,GAAAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cAAA4N,EACA7C,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAAkN,GAAA,GAAAnQ,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACAu+D,EAAA,SAGA,KAGAA,EAAA,MAGA1sD,KAEA,SAAA3O,GACA3C,EAAA+9D,OAAA,GACAC,EAAA,MAEAzsD,QA8DA,SAAAysD,EAAAC,GACAj+D,EAAAk+D,cAAAD,EACAj+D,EAAA2D,WAAA,wBAAA3D,EAAAk+D,eA3DA9sD,IAEApR,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,GAAA,KAGApR,EAAAM,aAAA,CACAwE,KAAA,SACAkgB,QAAA,KACAzkB,QAAA,CACA,CAAAC,UAAA,KAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,QAAAC,UAAA,OACA,CAAAJ,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,SAAAC,MAAA,UAKAX,EAAAiB,cAAA,SAAA7C,GACA4/D,EAAA5/D,IAGA4B,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA4hD,EAAAxhD,YACAP,EAAAnB,OAAAm+D,YAAA,SAAA78D,GACA8P,IAAA/P,KAAA,WACArB,EAAAM,cAAAN,EAAAM,aAAAmD,cACA+K,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAA,CAAAhD,EAAAwB,KAAA,GAAAzB,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACAu+D,EAAA,SAGA,QAIA78D,EAAAK,UAIAxB,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAAm+D,YAAA,WACA/sD,GAAA,IAEAjQ,EAAAK,UAgBA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,4BACA4B,OAdAxB,EAAA2B,YAAA,SAAAvD,GACA8kD,EAAAthD,OAAAxD,EAAA0E,IAAA1B,SAAAC,KAAA,WACA+P,QAaApP,MAAAhC,EAAAiC,YCzGAtH,MAAAkF,WAAA,mBAAA,CAAA,SAAA,SAAA,WACA,SAAAG,EAAAC,EAAAijD,GAEAljD,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAwC,aAAA,SAAApE,GAgBA,SAAAqE,EAAA0R,GACAnU,EAAAm+D,YAAAhqD,GACAnU,EAAA0C,QAGA,SAAAC,EAAAqJ,GACAhM,EAAA4C,YAAAoJ,EACAhM,EAAA6C,UAAA,EArBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,GAEAzE,EAAAyU,MACAqwC,EAAAlgD,OAAA5E,GAGA8kD,EAAAngD,OAAA3E,IAFAgD,SAAAC,KAAAoB,EAAAE,KAiBA3C,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAIArC,EAAAknB,YAAA,WACA,OAAA,MCtCAvsB,MAAAkF,WAAA,aAAA,CAAA,SAAA,SAAA,aAAA,WAAA,KAAA,WACA,SAAAG,EAAAC,EAAAjF,EAAAwT,EAAAtG,EAAAi7C,GAEA,SAAA/xC,EAAAC,GAEA,OAAAnJ,EAAA,SAAAoJ,EAAAC,GACA,IAAAC,EAAA,KACAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cAAA4N,IACAG,EAAAxR,EAAAM,aAAAmD,aAAAgO,sBAGA0xC,EAAAx+B,QAAA,GACAvjB,SAAAC,KAAA,SAAAjD,GACA4B,EAAAo+D,OAAAhgE,EAEAoT,GAAAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cAAA4N,EACA7C,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAAkN,GAAA,GAAAnQ,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACA4+D,EAAA,SAGA,KAGAA,EAAA,MAGA/sD,KAEA,SAAA3O,GACA3C,EAAAo+D,OAAA,GACAC,EAAA,MAEA9sD,QA8DA,SAAA8sD,EAAAC,GACAt+D,EAAAu+D,cAAAD,EACAt+D,EAAA2D,WAAA,wBAAA3D,EAAAu+D,eA3DAntD,IAEApR,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,GAAA,KAGApR,EAAAM,aAAA,CACAwE,KAAA,SACAkgB,QAAA,KACAzkB,QAAA,CACA,CAAAC,UAAA,KAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,QAAAC,UAAA,OACA,CAAAJ,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,SAAAC,MAAA,UAKAX,EAAAiB,cAAA,SAAA7C,GACAigE,EAAAjgE,IAGA4B,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA6hD,EAAAzhD,YACAP,EAAAnB,OAAAw+D,YAAA,SAAAl9D,GACA8P,IAAA/P,KAAA,WACArB,EAAAM,cAAAN,EAAAM,aAAAmD,cACA+K,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAA,CAAAhD,EAAAwB,KAAA,GAAAzB,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACA4+D,EAAA,SAGA,QAIAl9D,EAAAK,UAIAxB,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAAw+D,YAAA,WACAptD,GAAA,IAEAjQ,EAAAK,UAgBA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,4BACA4B,OAdAxB,EAAA2B,YAAA,SAAAvD,GACA+kD,EAAAvhD,OAAAxD,EAAA0E,IAAA1B,SAAAC,KAAA,WACA+P,QAaApP,MAAAhC,EAAAiC,YCzGAtH,MAAAkF,WAAA,mBAAA,CAAA,SAAA,SAAA,WACA,SAAAG,EAAAC,EAAAkjD,GAEAnjD,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAwC,aAAA,SAAApE,GAgBA,SAAAqE,EAAA0R,GACAnU,EAAAw+D,YAAArqD,GACAnU,EAAA0C,QAGA,SAAAC,EAAAqJ,GACAhM,EAAA4C,YAAAoJ,EACAhM,EAAA6C,UAAA,EArBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,GAEAzE,EAAAyU,MACAswC,EAAAngD,OAAA5E,GAGA+kD,EAAApgD,OAAA3E,IAFAgD,SAAAC,KAAAoB,EAAAE,KAiBA3C,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAIArC,EAAAknB,YAAA,WACA,OAAA,MCpCAvsB,MAAA4T,UAAA,cAAA,CAAA,WAAA,aAAA,UACA,SAAAC,EAAAxT,EAAA6xD,GACA,SAAAp+C,EAAAnN,GACA,MAAA,sCAAAurD,EAAA+N,gBAAAt5D,EAAAwB,IAAA,wCAAA9H,EAAAM,QAAAgG,EAAA4D,MAGA,SAAAwJ,EAAApN,GACA,MAAA,sCAAAurD,EAAA+N,gBAAAt5D,EAAAwB,IAAA,wCAAA9H,EAAAM,QAAAgG,EAAA4D,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WAEAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,gBACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACA1M,GAAA,SAAAxB,GAAA,OAAAA,EAAAwB,IACA1E,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,gBACA,CAAApC,GAAA,EAAAoC,KAAA,mBACA,CAAApC,GAAA,EAAAoC,KAAA,mBACA,CAAApC,GAAA,EAAAoC,KAAA,kBACA,CAAApC,GAAA,EAAAoC,KAAA,iBACA,CAAApC,GAAA,EAAAoC,KAAA,mBACA,CAAApC,GAAA,EAAAoC,KAAA,oBAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAA5Q,OAAAb,UAAA+3B,mBAAAtmB,GACA,KAEAC,SAAAD,KAIAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAA,OAAAA,EACAA,EAEAA,EAAA,KAIAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAvP,EAAAmQ,WACA,QC3EArV,MAAA4T,UAAA,mCAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GAEA,SAAAyT,EAAA4I,GACA,GAAAA,EAEA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,SAAAwJ,EAAA2I,GACA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACA8e,SAAA,EACA7e,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEAA,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAhR,OAAAgR,KAGAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAAA,KAGA6S,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAI,yBAAA,EACAf,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAnR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,yEACA,CAAApC,GAAA,EAAAoC,KAAA,mEACA,CAAApC,GAAA,EAAAoC,KAAA,oEACA,CAAApC,GAAA,EAAAoC,KAAA,iEAIA6J,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,MAGA,QCnDAhB,MAAA4T,UAAA,0BAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GAEA,SAAAyT,EAAA4I,GACA,GAAAA,EAEA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,SAAAwJ,EAAA2I,GACA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACA8e,SAAA,EACA7e,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEAA,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAhR,OAAAgR,KAGAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAAA,KAGA6S,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAI,yBAAA,EACAf,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAnR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,wCACA,CAAApC,GAAA,EAAAoC,KAAA,uCACA,CAAApC,GAAA,EAAAoC,KAAA,6CACA,CAAApC,GAAA,EAAAoC,KAAA,4CACA,CAAApC,GAAA,EAAAoC,KAAA,kCAIA6J,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,MAGA,QCpDAhB,MAAA4T,UAAA,kBAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GAEA,SAAAyT,EAAA4I,GACA,GAAAA,EAEA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,SAAAwJ,EAAA2I,GACA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACA8e,SAAA,EACA7e,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEAA,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAhR,OAAAgR,KAGAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAAA,KAGA6S,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAI,yBAAA,EACAf,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAnR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,yBACA,CAAApC,GAAA,EAAAoC,KAAA,4CAIA6J,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,MAGA,QCjDAhB,MAAA4T,UAAA,wBAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAA0e,GACA,GAAAA,EACA,OAAAnyB,EAAAM,QAAA6xB,EAAAjoB,MAGA,SAAAwJ,EAAAye,GACA,OAAAnyB,EAAAM,QAAA6xB,EAAAjoB,MAGA,SAAAu5D,EAAAC,EAAA57D,GACA,OAAA47D,GACAA,EAAAC,SAAA77D,EAAA,IAMA,MAAA,CACA6L,SAAA,IACAC,QAAA,UACA5M,MAAA,CACAV,MAAA,WACAo9D,iBAAA,KAEA5vD,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA,IAAAzB,EAAA,GACAqgE,EAAAz8D,EAAA08D,iBAAA,IACAtgE,EAAAD,KAAA,CAAA2E,GAAA,EAAAoC,KAAA,kCAEAu5D,EAAAz8D,EAAA08D,iBAAA,IACAtgE,EAAAD,KAAA,CAAA2E,GAAA,EAAAoC,KAAA,yCAEAu5D,EAAAz8D,EAAA08D,iBAAA,IACAtgE,EAAAD,KAAA,CAAA2E,GAAA,EAAAoC,KAAA,0BAEAu5D,EAAAz8D,EAAA08D,iBAAA,IACAtgE,EAAAD,KAAA,CAAA2E,GAAA,EAAAoC,KAAA,0BAEAu5D,EAAAz8D,EAAA08D,iBAAA,IACAtgE,EAAAD,KAAA,CAAA2E,GAAA,EAAAoC,KAAA,qCAEAu5D,EAAAz8D,EAAA08D,iBAAA,IACAtgE,EAAAD,KAAA,CAAA2E,GAAA,EAAAoC,KAAA,oCAEAu5D,EAAAz8D,EAAA08D,iBAAA,IACAtgE,EAAAD,KAAA,CAAA2E,GAAA,EAAAoC,KAAA,0DAIAsJ,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAAA,IAGAyB,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QCpGAzU,MAAA4T,UAAA,oBAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GAEA,SAAAyT,EAAA0e,GACA,GAAAA,EACA,OAAAnyB,EAAAM,QAAA6xB,EAAAjoB,MAGA,SAAAwJ,EAAAye,GACA,OAAAnyB,EAAAM,QAAA6xB,EAAAjoB,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACA5M,MAAA,CACAV,MAAA,WACAs9D,kBAAA,KAEA9vD,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,uBAAAiH,SAAA,IAAAnK,EAAA48D,mBACA,CAAA97D,GAAA,EAAAoC,KAAA,4BAAAiH,SAAA,IAAAnK,EAAA48D,mBACA,CAAA97D,GAAA,EAAAoC,KAAA,iCAAAiH,SAAA,IAAAnK,EAAA48D,mBACA,CAAA97D,GAAA,EAAAoC,KAAA,uCAAAiH,SAAA,IAAAnK,EAAA48D,mBACA,CAAA97D,GAAA,EAAAoC,KAAA,2BAAAiH,SAAA,IAAAnK,EAAA48D,sBAIA/+D,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QC3EAzU,MAAA4T,UAAA,eAAA,CAAA,WAAA,aAAA,WAAA,cACA,SAAAC,EAAAxT,EAAAmoD,EAAA96C,GACA,SAAAoG,EAAAnN,GACA,OAAAA,EAIAA,EAAAwD,KAHA,GAMA,SAAA4J,EAAApN,GACA,OAAAA,EAAAwD,KAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,WACAC,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA,IAAAqP,EAAAi0C,EAAAx+B,SAEAzV,EAAA9N,SAAAC,KAAA,WACAmN,EAAA,WAEAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,aACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,wBAAA,EACA1M,GAAA,SAAAxB,GAAA,OAAAA,EAAAwB,IACA1E,KAAAhC,EAAAqT,OAAAP,EAAA,SAAAQ,GAAA,OAAArH,EAAAsH,WAAAD,EAAA,UACAE,QAAA,SAAAC,EAAA3K,EAAA9G,GACA,OAAA,GAAAA,EAAA0G,KAAAgL,cAAAC,QAAAF,EAAAC,kBAIAjQ,EAAAmQ,YAGAnQ,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGAlB,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAvP,EAAAmQ,WACA,QCnEArV,MAAA2pB,OAAA,SAAA,CAAA,aAAA,SAAAtpB,GACA,OAAA,SAAAS,GACA,OAAAA,GACA,KAAA,EACA,OAAAT,EAAAM,QAAA,gBACA,KAAA,EACA,OAAAN,EAAAM,QAAA,mBACA,KAAA,EACA,OAAAN,EAAAM,QAAA,mBACA,KAAA,EACA,OAAAN,EAAAM,QAAA,kBACA,KAAA,EACA,OAAAN,EAAAM,QAAA,iBACA,KAAA,EACA,OAAAN,EAAAM,QAAA,mBACA,KAAA,EACA,OAAAN,EAAAM,QAAA,iBACA,QACA,MAAA,QClBAX,MAAA2pB,OAAA,4BAAA,CAAA,aAAA,SAAAtpB,GACA,OAAA,SAAAS,GACA,OAAAA,GACA,KAAA,EACA,OAAAT,EAAAM,QAAA,yEACA,KAAA,EACA,OAAAN,EAAAM,QAAA,8DACA,KAAA,EACA,OAAAN,EAAAM,QAAA,oEACA,KAAA,EACA,OAAAN,EAAAM,QAAA,mEACA,QACA,MAAA,QCZAX,MAAA2pB,OAAA,qBAAA,CAAA,aAAA,SAAAtpB,GACA,OAAA,SAAAS,GACA,OAAAA,GACA,KAAA,EACA,OAAAT,EAAAM,QAAA,iCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,iDACA,QACA,MAAA,QCRAX,MAAA2pB,OAAA,iBAAA,CAAA,aAAA,SAAAtpB,GACA,OAAA,SAAAS,GACA,OAAAA,GACA,KAAA,EACA,OAAAT,EAAAM,QAAA,iCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,wCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,yBACA,KAAA,EACA,OAAAN,EAAAM,QAAA,yBACA,KAAA,EACA,OAAAN,EAAAM,QAAA,oCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,mCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,yDACA,QACA,MAAA,QClBAX,MAAA2pB,OAAA,aAAA,CAAA,aAAA,SAAAtpB,GACA,OAAA,SAAAS,GACA,OAAAA,GACA,KAAA,EACA,OAAAT,EAAAM,QAAA,wBACA,KAAA,EACA,OAAAN,EAAAM,QAAA,6BACA,KAAA,EACA,OAAAN,EAAAM,QAAA,kCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,wCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,4BACA,QACA,MAAA,QCdAX,MAAA2pB,OAAA,UAAA,CAAA,aAAA,WAAA,SAAAtpB,EAAAkoD,GACA,IAAAh0C,EAAAg0C,EAAAv+B,SAEA,SAAAmL,EAAAr0B,GACA,GAAAyT,EAAA6gB,UAAA,CACAzuB,EAAAlF,EAAAsK,KAAAwI,EAAA,CAAApM,GAAArH,IACA,OAAA6F,EACAA,EAAAwD,KAEA,GAGA,OAAA9J,EAAAM,QAAA,oBAMA,OAFAw0B,EAAAE,WAAA,EAEAF,KClBAn1B,MAAA2pB,OAAA,UAAA,CAAA,aAAA,WAAA,SAAAtpB,EAAAmoD,GACA,IAAAj0C,EAAAi0C,EAAAx+B,SAEA,SAAAmL,EAAAr0B,GACA,GAAAyT,EAAA6gB,UAAA,CACAzuB,EAAAlF,EAAAsK,KAAAwI,EAAA,CAAApM,GAAArH,IACA,OAAA6F,EACAA,EAAAwD,KAEA,GAGA,OAAA9J,EAAAM,QAAA,oBAMA,OAFAw0B,EAAAE,WAAA,EAEAF,KClBAn1B,MAAA8gC,QAAA,UAAA,CAAA,YAAA,KAAA,gBACA,SAAAC,EAAAxzB,EAAA0zB,GAEA,IAAAijC,EAAAnjC,EAAA,qBAAA,GAAA,CACAna,QAAA,CAAAkb,OAAA,MAAAC,IAAA,sBACAy9B,2BAAA,CAAA19B,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,2CACA29B,0BAAA,CAAA59B,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,kDACAqzB,yBAAA,CAAAtzB,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,4CACAqwB,wBAAA,CAAAtwB,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,gDACA15B,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,kBACA35B,OAAA,CAAA05B,OAAA,MAAAC,IAAA,sBACA0B,OAAA,CAAA3B,OAAA,SAAAC,IAAA,sBACAg7B,gCAAA,CAAAj7B,OAAA,OAAAC,IAAA,wDACAi7B,+BAAA,CAAAl7B,OAAA,OAAAC,IAAA,yDA0HA,MAAA,CACAh7B,UAxHA,WAsBA,MApBA,CACA69B,OAAA,KACA2tB,WAAA,GACA/0C,WAAA,KACAy/C,eAAA,EACAkH,eAAA,KACAC,eAAA,KACAjH,sBAAA,KACAn7B,OAAA,EACA0wB,eAAA,EACAjuC,MAAA,CAAA,IAEA+9C,YAAA,GACA5zB,OAAA,KACAsxB,QAAA,KACAmE,QAAA,KACA9K,qBAAA,EACArhD,OAAA,IAsGA0O,QApDA,SAAAysC,GACA,OAAApyB,EAAAkC,UAAA,UAAA+gC,EAAA,CAAA/7D,GAAAkrD,KAoDAmM,2BAhDA,SAAAx9B,EAAAwG,EAAAC,GACA,OAAAxH,EAAAkC,UAAA,6BAAA+gC,EAAA,CACAliC,OAAAA,EACAwG,YAAAA,EACAC,UAAArnC,OAAAqnC,GAAAhc,MAAA,OAAAlrB,SACAwjC,SAAA,yBA4CA26B,0BAxCA,SAAA19B,EAAAxkB,GACA,OAAAyjB,EAAAkC,UAAA,4BAAA+gC,EAAA,CACAliC,OAAAA,EACAxkB,WAAAA,EACAunB,SAAA,yBAqCAqwB,yBAjCA,SAAApzB,EAAA5T,GACA,OAAA6S,EAAAkC,UAAA,2BAAA+gC,EAAA,CACAliC,OAAAA,EACA5T,UAAAA,KA+BAgkC,wBA3BA,SAAApwB,EAAAwP,GACA,OAAAvQ,EAAAkC,UAAA,0BAAA+gC,EAAA,CACAliC,OAAAA,EACAwP,SAAAA,EACAzM,SAAA,yBAwBA18B,OA/EA,SAAA1B,GACA,OAAAs6B,EAAA+D,WACA,SACAk/B,EACA1iE,yBAAAmF,KA4EAM,OAzEA,SAAAosD,GACA,OAAApyB,EAAAiE,aACA,SACAg/B,EACA,CAAA/7D,GAAAkrD,KAsEAjrD,OAnEA,SAAAzB,GACA,OAAAs6B,EAAAkE,oBACA,SACA++B,EACA,CAAA/7D,GAAAxB,EAAAwB,IACA3G,yBAAAmF,KA+DAs5D,gBAvBA,SAAAqE,GACA,OAAAA,GACA,KAAA,EAAA,MAAA,UACA,KAAA,EAAA,MAAA,UACA,KAAA,EAAA,MAAA,UACA,KAAA,EAAA,MAAA,UACA,KAAA,EAAA,MAAA,UACA,KAAA,EAAA,MAAA,UACA,KAAA,EAAA,MAAA,UACA,QAAA,MAAA,UAeAvH,gCAzGA,SAAA50D,EAAAoe,EAAAze,EAAAE,GACA,OAAAi5B,EAAAuE,qBACA,kCACA0+B,EACA,CAAA/7D,GAAAA,EAAAoe,mBAAAA,GACA,KACAze,EACAE,IAmGAg1D,+BA/FA,SAAA70D,EAAAoe,EAAAze,EAAAE,GACA,OAAAi5B,EAAAuE,qBACA,iCACA0+B,EACA,CAAA/7D,GAAAA,EAAAoe,mBAAAA,GACA,KACAze,EACAE,QC3DAhI,MAAA8gC,QAAA,uBAAA,CAAA,YAAA,KAAA,gBACA,SAAAC,EAAAxzB,EAAA0zB,GAEA,IAQAsjC,EARAC,EAAAzjC,EAAA,oCAAA,GAAA,CACAna,QAAA,CAAAkb,OAAA,MAAAC,IAAA,qCACA/X,OAAA,CAAA8X,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,gCACA15B,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,iCACA35B,OAAA,CAAA05B,OAAA,MAAAC,IAAA,qCACA0B,OAAA,CAAA3B,OAAA,SAAAC,IAAA,uCAmDA,MAAA,CACAh7B,UA/CA,WAQA,MANA,CACAmR,OAAA,EACA8D,SAAA,CAAA,MA4CA4K,QAbA,SAAAge,GACA,OAAA3D,EAAAkC,UAAA,UAAAqhC,EAAA,CAAAr8D,GAAAy8B,KAaA5a,OAVA,SAAAphB,GAIA,OAFA27D,GADAA,GAAA37D,EACAq4B,EAAAkC,UAAA,SAAAqhC,EAAA,IAEAD,GAOAl8D,OAvCA,SAAA1B,GACA,OAAAs6B,EAAA+D,WACA,SACAw/B,EACA79D,IAoCAM,OAjCA,SAAA29B,GAEA,OADA2/B,EAAA,KACAtjC,EAAAiE,aACA,SACAs/B,EACA,CAAAr8D,GAAAy8B,KA6BAx8B,OA1BA,SAAAzB,GAEA,OADA49D,EAAA,KACAtjC,EAAAkE,oBACA,SACAq/B,EACA,CAAAr8D,GAAAxB,EAAAwB,IACAxB,QC7CA3G,MAAA8gC,QAAA,WAAA,CAAA,YAAA,KAAA,gBACA,SAAAC,EAAAxzB,EAAA0zB,GAEA,IAQAwiC,EARAgB,EAAA1jC,EAAA,qBAAA,GAAA,CACAna,QAAA,CAAAkb,OAAA,MAAAC,IAAA,uBACA/X,OAAA,CAAA8X,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,kBACA15B,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,mBACA35B,OAAA,CAAA05B,OAAA,MAAAC,IAAA,uBACA0B,OAAA,CAAA3B,OAAA,SAAAC,IAAA,yBAiDA,MAAA,CACAh7B,UA7CA,WAMA,MAJA,CACAmR,OAAA,IA2CA0O,QAbA,SAAAy9C,GACA,OAAApjC,EAAAkC,UAAA,UAAAshC,EAAA,CAAAt8D,GAAAk8D,KAaAr6C,OAVA,SAAAphB,GAIA,OAFA66D,GADAA,GAAA76D,EACAq4B,EAAAkC,UAAA,SAAAshC,EAAA,IAEAhB,GAOAp7D,OAvCA,SAAA1B,GACA,OAAAs6B,EAAA+D,WACA,SACAy/B,EACA99D,IAoCAM,OAjCA,SAAAo9D,GAEA,OADAZ,EAAA,KACAxiC,EAAAiE,aACA,SACAu/B,EACA,CAAAt8D,GAAAk8D,KA6BAj8D,OA1BA,SAAAzB,GAEA,OADA88D,EAAA,KACAxiC,EAAAkE,oBACA,SACAs/B,EACA,CAAAt8D,GAAAxB,EAAAwB,IACA3G,yBAAAmF,SCzCA3G,MAAAkF,WAAA,gBAAA,CAAA,SACA,SAAAG,OCDArF,MAAAkF,WAAA,qBAAA,CAAA,SAAA,WAAA,aAAA,aAAA,cAAA,cACA,SAAAG,EAAAwO,EAAAxT,EAAA0f,EAAAzX,EAAAE,GAqCA,SAAAk8D,EAAAjhE,EAAA6F,GACA,IAAA,IAAAsV,EAAA,EAAAA,EAAAnb,EAAAqB,OAAA8Z,IAAA,CACA,IAAA+a,EAAAl2B,EAAAmb,GACA,GAAA+a,EAAArwB,YAAAA,EAAA,CACAjE,EAAAs/D,aAAAhrC,EACA,QAxCAnxB,EAAAU,SAAA,8BAIAZ,EAAAc,kBAGA1C,KAAA,SAAA6W,GAEAlY,EAAAiE,WADAiU,EACAA,EAAApV,GAEA,KAGA9C,EAAA6E,iBAAA7E,EAAAiE,cAGAjE,EAAAu/D,MAAA,CACAt2D,KAAA,aACA7K,KAAA,CACA,CAAApD,EAAAM,QAAA,oBAAAN,EAAAM,QAAA,mBAAAN,EAAAM,QAAA,mBAAAN,EAAAM,QAAA,kBAAAN,EAAAM,QAAA,qBACA,CAAA,GAAA,EAAA,EAAA,EAAA,IAEAwc,QAAA,CACA0nD,oBAAA,EACAC,WAAA,EACAC,UAAA,CAAA/+D,MAAA,MAAA6hB,OAAA,OACAm9C,OAAA,CAAAjtB,SAAA,UACAktB,WAAA,OACAC,OAAA,CAAAC,EAAA,CAAA72D,KAAA,WAIAjJ,EAAAs/D,aAAA,GAYAt/D,EAAA6E,iBAAA,SAAAZ,GACAjE,EAAA5B,KA8BAihE,EAAAr/D,EAAA5B,KAAA6F,IA7BAjE,EAAA5B,KAAAsc,EAAAqlD,oBAEA//D,EAAA5B,KAAAgD,SAAAC,KAAA,SAAAjD,GACAoQ,EAAA,WAMA,IAJA,IAAAwxD,EAAA,CACA,CAAAhlE,EAAAM,QAAA,oBAAAN,EAAAM,QAAA,mBAAAN,EAAAM,QAAA,mBAAAN,EAAAM,QAAA,kBAAAN,EAAAM,QAAA,sBAGAie,EAAA,EAAAA,EAAAnb,EAAAqB,OAAA8Z,IAAA,CACA,IAAA+a,EAAAl2B,EAAAmb,GAEAymD,EAAA7hE,KAAA,CACAm2B,EAAA,aACAA,EAAA,4BACAA,EAAA,gBACAA,EAAA,cACAA,EAAA,aAAAA,EAAA,qBAAAA,EAAA,mBAAAA,EAAA,oBAAAA,EAAA,iBAKAt0B,EAAAu/D,MAAAnhE,KAAAqB,OAAA,EACAO,EAAAu/D,MAAAnhE,KAAAD,KAAAsf,MAAAzd,EAAAu/D,MAAAnhE,KAAA4hE,GAEAX,EAAAjhE,EAAA6F,aC3EAtJ,MAAAkF,WAAA,4BAAA,CAAA,SAAA,WAAA,aAAA,cAAA,cACA,SAAAG,EAAAwO,EAAAxT,EAAAiI,EAAAE,GAEAA,EAAAU,SAAA,8BAIA7D,EAAAigE,QACAh9D,EAAAc,kBAGA1C,KAAA,SAAA6W,GAEAlY,EAAAiE,WADAiU,EACAA,EAAApV,GAEA,KAGA9C,EAAA6E,iBAAA7E,EAAAiE,cAGAjE,EAAAu/D,MAAA,CACAt2D,KAAA,WAAA7K,KAAA,CACA,CAAA,YAAA,SACA,CAAApD,EAAAM,QAAA,6BAAA,GACA,CAAAN,EAAAM,QAAA,sCAAA,GACA,CAAAN,EAAAM,QAAA,kCAAA,GACA,CAAAN,EAAAM,QAAA,kDAAA,IACAwc,QAAA,CACA0nD,oBAAA,EACAE,UAAA,CAAA/+D,MAAA,OAAA6hB,OAAA,OACAm9C,OAAA,CAAAjtB,SAAA,YAIA1yC,EAAA6E,iBAAA,SAAAZ,GACAA,IACAjE,EAAAigE,QAAAh9D,EAAAi9D,sBAAAj8D,GACAjE,EAAAigE,QAAA7+D,SAAAC,KAAA,SAAAjD,GACAoQ,EAAA,WACAxO,EAAAu/D,MAAAnhE,KAAA,GAAA,GAAAA,EAAA+hE,cACAngE,EAAAu/D,MAAAnhE,KAAA,GAAA,GAAAA,EAAAgiE,2BACApgE,EAAAu/D,MAAAnhE,KAAA,GAAA,GAAAA,EAAAiiE,wBACArgE,EAAAu/D,MAAAnhE,KAAA,GAAA,GAAAA,EAAAkiE,4CAOAtgE,EAAA3E,MAAA,UClDAV,MAAAkF,WAAA,WAAA,CAAA,SAAA,SAAA,KAAA,WAAA,aAAA,gBAAA,oBAAA,UAAA,kBACA,SAAAG,EAAAC,EAAAiI,EAAAsG,EAAAxT,EAAAqQ,EAAA6F,EAAAqvD,EAAA1kC,GAEA77B,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAA8W,SAAA/a,SAAA6U,QAAA,SAAA1U,SACA8D,EAAA9D,OAAAH,SAAAqrB,MAAA,SAAAlrB,SACA8D,EAAAwgE,QAAA,KAEAxgE,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAA8S,kBACA1B,EAAApR,EAAA8S,iBAAA9S,EAAA8W,SAAA9W,EAAA9D,UAIAgM,EAAAiD,IAAA,CAAA+F,EAAAnN,oBACA1C,KAAA,SAAAjD,GACAA,GAAA,IAAAA,EAAAqB,SACAO,EAAA8S,iBAAA1U,EAAA,GAAA0E,GACA9C,EAAAygE,uBAAAzgE,EAAA8S,iBAAA9S,EAAA8W,SAAA9W,EAAA9D,WAIA,IAAAwkE,EAAAzgE,EAAA,CACAL,YAAA,gDACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAgBA,IAAAiI,EAAAjK,EAAA,CACAL,YAAA,wCACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAyJA,SAAA0+D,EAAA/3C,GACA5oB,EAAA4oB,iBAAAA,IACA5oB,EAAA4oB,eAAAA,EACA5oB,EAAA2D,WAAA,2CAAAilB,IAIA,SAAAxX,EAAA0B,EAAAgE,EAAA5a,GACAskE,EAAAD,EAAAK,yBAAA9tD,EAAAgE,EAAA5a,GAEA8D,EAAAwgE,SAAAxgE,EAAAwgE,QAAA/gE,OACA+gE,EAAAp/D,SAAAC,KAAA,SAAAjD,GACA4B,EAAAwgE,QAAA/gE,OAAA,EACAO,EAAAwgE,QAAAriE,KAAAsf,MAAAzd,EAAAwgE,QAAApiE,GAEA4B,EAAA4oB,iBACA+3C,EACAvkE,EAAAsK,KAAA1G,EAAAwgE,QAAA,CAAAK,cAAA7gE,EAAA4oB,eAAAi4C,iBACA7gE,EAAA4oB,iBACA5oB,EAAA4oB,eAAApP,YAAA,OAKAxZ,EAAAwgE,QAAAA,EACAG,EAAA,OArJA3gE,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,QAAAC,WAAA,CAAA,QACAC,WAAA,CAAA,CAAAC,MAAA,OAAAE,YAAA,eAAAD,WAAA,iBAAA1V,MAAA,QACA,CAAAyV,MAAA,oBAAAE,YAAA,6BAAA4E,MAAA,QAAAva,MAAA,QAAAoa,QAAA,GACA,CAAA3E,MAAA,YAAAE,YAAA,0BAAA3V,MAAA,QAAAua,MAAA,SACA,CAAA9E,MAAA,oBAAAE,YAAA,2BAAA3V,MAAA,QAAAua,MAAA,QAAAH,QAAA,EAAAC,QAAA,GACA,CAAA5E,MAAA,OAAAE,YAAA,eAAA2E,KAAA,UACA,CAAA7E,MAAA,YAAAE,YAAA,kBAAAD,WAAA,YAAA1V,MAAA,OAAAoa,QAAA,GACA,CAAA3E,MAAA,QAAAE,YAAA,gBAAAD,WAAA,gBAAA1V,MAAA,QAAAua,MAAA,UAEA1E,cAAA,YACA6E,uBAAA,EACAF,WAAA,CAAA,CACAjW,KAAA,0BACAmO,KAAA,SAAArJ,GAAA,QAAAA,EAAAK,WACA+Q,QAAA,SAAApR,GAzCA5L,EA0CA4L,EAzCAE,EAAAlK,OAAA8gE,kBAAA,EACA52D,EAAAlK,OAAA+gE,sBAAA,CACAC,UAAA5iE,EAAA4iE,UACAC,kBAAA7iE,EAAA6iE,kBACA/7D,KAAA9G,EAAA8G,KACA27D,cAAAziE,EAAAyiE,cACA/tD,iBAAA9S,EAAA8S,kBAEA5I,EAAAlK,OAAAoK,cAAA,CACAC,UAAA,EACA62D,cAAA,EACA12D,OAAApM,EAAAzC,MACA8O,aAAArM,EAAAxC,MAGAsO,EAAA9I,SAAAC,KAAA,WACA6I,EAAAlK,OAAA4C,YAAA,KACAsH,EAAAlK,OAAAmhE,qBAAA,WACA/vD,EAAApR,EAAA8S,iBAAA9S,EAAA8W,SAAA9W,EAAA9D,SAGAgO,EAAA1I,WAsBA,CACA0D,KAAA,8BACAmO,KAAA,SAAArJ,GAAA,QAAAA,EAAAK,WACA+Q,QAAA,SAAApR,GACAqB,EAAA6B,eAAA,CACA7R,MAAA,yBACA8R,QAAA,yCACAC,QAAA,CAAA,CACAlI,KAAA,kBACA,CACAA,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WACAm7D,EAAAa,kBAAAphE,EAAA8S,iBAAA9I,EAAA62D,eACAx/D,KAAA,WACA+P,EAAApR,EAAA8S,iBAAA9S,EAAA8W,SAAA9W,EAAA9D,SAEA,SAAA8P,GACA6vB,EAAAiB,YACA9hC,EAAAM,QAAA,mCACAugC,EAAAkB,eAAA/wB,aAMA,CACA9G,KAAA,0BACAmO,KAAA,SAAArJ,GAAA,OAAAA,EAAAK,WACA+Q,QAAA,SAAApR,GACAqB,EAAA6B,eAAA,CACA7R,MAAA,yBACA8R,QAAA,qCACAC,QAAA,CAAA,CACAlI,KAAA,kBACA,CACAA,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WACAm7D,EAAAc,cAAArhE,EAAA8S,iBAAA9I,EAAA62D,eAAA,GACAx/D,KAAA,WACA+P,EAAApR,EAAA8S,iBAAA9S,EAAA8W,SAAA9W,EAAA9D,SAEA,SAAA8P,GACA6vB,EAAAiB,YACA9hC,EAAAM,QAAA,mCACAugC,EAAAkB,eAAA/wB,aAMA,CACA9G,KAAA,6CACAmO,KAAA,SAAArJ,GAAA,OAAAA,EAAAK,WACA+Q,QAAA,SAAApR,GACAqB,EAAA6B,eAAA,CACA7R,MAAA,yBACA8R,QAAA,iDACAC,QAAA,CAAA,CACAlI,KAAA,kBACA,CACAA,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WACAm7D,EAAAc,cAAArhE,EAAA8S,iBAAA9I,EAAA62D,eAAA,GACAx/D,KAAA,WACA+P,EAAApR,EAAA8S,iBAAA9S,EAAA8W,SAAA9W,EAAA9D,SAEA,SAAA8P,GACA6vB,EAAAiB,YACA9hC,EAAAM,QAAA,mCACAugC,EAAAkB,eAAA/wB,aAMA,CACA9G,KAAA,2CACAkW,QAAA,SAAApR,GAjJA02D,EAAAt/D,SAAAC,KAAA,WACAq/D,EAAA1gE,OAAA8W,SAAA9W,EAAA8W,SACA4pD,EAAA1gE,OAAA9D,OAAA8D,EAAA9D,OACAwkE,EAAA1gE,OAAA8S,iBAAA9S,EAAA8S,iBACA4tD,EAAA1gE,OAAAuH,OAAA,WACA6J,EAAApR,EAAA8S,iBAAA9S,EAAA8W,SAAA9W,EAAA9D,SAGAwkE,EAAAl/D,WA4IA,CACA0D,KAAA,qCACAkW,QAAA,SAAApR,GACAu2D,EAAAe,eAAAthE,EAAA8S,kBACAzR,KAAA,WACAmN,EAAA,WACAnD,EAAA6B,eAAA,CACA7R,MAAA,wBACA8R,QAAA,0BACAC,QAAA,CAAA,CACAlI,KAAA,yBAuCAlF,EAAAygE,uBAAA,SAAA3tD,GACAA,GACA1B,EAAA0B,EAAA9S,EAAA8W,SAAA9W,EAAA9D,SAIA8D,EAAAuhE,iBAAA,SAAAzqD,GACAA,GACA1F,EAAApR,EAAA8S,iBAAAgE,EAAA9W,EAAA9D,SAIA8D,EAAAwhE,eAAA,SAAAtlE,GACAA,GACAkV,EAAApR,EAAA8S,iBAAA9S,EAAA8W,SAAA5a,IAIA8D,EAAAiB,cAAA,SAAA7C,GACAuiE,EAAAviE,IAGA4B,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,+CAGA9B,EAAA6B,KAAAE,UAAA,KCjQApH,MAAAkF,WAAA,oCAAA,CAAA,SAAA,UACA,SAAAG,EAAAugE,GAEAvgE,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAyhE,aAAAlB,EAAAmB,iCAAA1hE,EAAA8S,iBACA9S,EAAA8W,SAAA9W,EAAA9D,QAeA,IAAA2G,IAbA7C,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,QAAAC,WAAA,CAAA,QACAC,WAAA,CAAA,CAAAC,MAAA,OAAAE,YAAA,eAAAD,WAAA,iBAAA1V,MAAA,QACA,CAAAyV,MAAA,YAAAE,YAAA,0BAAA3V,MAAA,QAAAua,MAAA,SACA,CAAA9E,MAAA,oBAAAE,YAAA,2BAAA3V,MAAA,QAAAua,MAAA,QAAAH,QAAA,EAAAC,QAAA,GACA,CAAA5E,MAAA,OAAAE,YAAA,eAAA2E,KAAA,UACA,CAAA7E,MAAA,QAAAE,YAAA,gBAAAD,WAAA,gBAAA1V,MAAA,QAAAua,MAAA,UAEA3E,iBAAA,EACAgC,YAAA,EACAC,aAAA,IAKAxY,EAAA2hE,cAAA,WACA,OAAAvlE,EAAAwlE,KAAA5hE,EAAAyhE,aAAA,gBAAA5+D,GAGA7C,EAAAwC,aAAA,WAEAK,GAAA,EAEA,IAAA+Y,EAAAxf,EAAA+a,IAAA/a,EAAAkoB,OAAAtkB,EAAAyhE,aAAA,CAAAjoD,YAAA,IAAA,iBACA+mD,EAAAsB,mBAAA7hE,EAAA8S,iBAAA8I,GACAva,KAAA,WACAwB,GAAA,EACA7C,EAAA0C,QACA1C,EAAAuH,UACA,WAAA1E,GAAA,QCvCAlI,MAAAkF,WAAA,eAAA,CAAA,SAAA,SAAA,KAAA,UAAA,aAAA,WAAA,UAAA,cACA,aAAA,gBAAA,kBAAA,oBAAA,cAAA,cAAA,sBACA,SAAAG,EAAAC,EAAAiI,EAAAC,EAAAnN,EAAAwT,EAAApG,EAAAnF,EACAyX,EAAArP,EAAAwwB,EAAA3qB,EAAA/N,EAAAkF,EAAAiD,GAkBA,SAAAyY,IACA7b,EAAAiD,IAAA,CAAAnL,EAAA8hE,YAAA1gE,SAAApB,EAAA+hE,gBAAA3gE,WAAAC,KAAA,WACA,IAAA2gE,EAAA5lE,EAAA+nB,OAAAnkB,EAAAokB,aAAA29C,iBACA/hE,EAAAiiE,SAAAxiE,OAAA,EACAO,EAAAiiE,SAAA9jE,KAAAsf,MAAAzd,EAAAiiE,SACA7lE,EAAAkoB,OAAAtkB,EAAA8hE,YAAA,SAAAxvD,GAEA,QAAA,EAAA0vD,EAAAviE,SACArD,EAAAuiE,SAAAqD,EAAA1vD,EAAAQ,uBA2BA,SAAA2D,IACA,IAAAzW,EAAAk6D,kBACAl6D,EAAA8hE,YAAApnD,EAAAwnD,6BAAAliE,EAAAiE,YAEAjE,EAAA8hE,YAAApnD,EAAAynD,8BACAniE,EAAA8W,SAAA9W,EAAA9D,QAAA,GAEA6nB,IA0KA,SAAAq+C,EAAAp4D,EAAAq4D,GAEA,IAAAC,EAAAlmE,EAAAmmE,OAAAviE,EAAAwiE,aAAA,oBACA,EAAAF,EAAA7iE,OACA4L,EAAA6B,eAAA,CACA7R,MAAA,4CACA8R,QAAAnS,EAAAM,QAAA,gDAAAs0B,EAAA0yC,EAAA7iE,QACA2N,QAAA,CAAA,CACAlI,KAAA,iBAmBAmG,EAAA6B,eAAA,CACA7R,MAAA,8CACA8R,QAAAnS,EAAAM,QAAA,8CAAAs0B,EAAA5vB,EAAAwiE,aAAA/iE,QACA2N,QAAA,CAAA,CACAlI,KAAA,kBACA,CACAA,KAAA,cACA,CACAA,KAAA,cACAE,SAtBA,WACAsV,EAAA+nD,wBACAz4D,EAAA8I,iBACA1W,EAAA+a,IAAAnX,EAAAwiE,aAAA,aACAH,EACAK,EACA,SAAA//D,GACAk5B,EAAAiB,YACA9hC,EAAAM,QAAA,0BACAugC,EAAAkB,eAAAp6B,WAwDA,SAAAggE,EAAAvkE,GACA+Q,EAAA,uBAAAvN,SACAuN,EAAA,QAAAq2B,OAAA,wEAAApnC,EAAAk4C,SAAA,mDAGA,SAAAosB,EAAAtkE,GACA+Q,EAAA,uBAAAvN,SACAuN,EAAA,QAAAq2B,OAAA,wEAAApnC,EAAAk4C,SAAA,oDAGA,SAAAssB,EAAAxkE,GACA+Q,EAAA,uBAAAvN,SACAuN,EAAA,QAAAq2B,OAAA,wEAAApnC,EAAAk4C,SAAA,gDAEA,SAAAz6B,EAAAtR,EAAA9N,GAEA,OAAAA,GACA0S,EAAA,uBAAAvN,SACAuN,EAAA,QAAAq2B,OAAA,uEAAAj7B,EAAA,0BAAA9N,EAAA,sCAEA0L,EAAAuC,KAAA,kCAAAH,EAAA,kBACA,SAAA,iHAxUAvK,EAAAk6D,kBAAA,EACAl6D,EAAA8W,SAAA/a,SAAA8U,SAAA,EAAA,KAAAD,QAAA,OAAA1U,SACA8D,EAAA9D,OAAAH,SAAA6U,QAAA,OAAA1U,SAEAoP,EAAA+B,cAEArN,EAAAk6D,kBAAA5uD,EAAA2C,IAAA,sBAAA,GAGAjO,EAAAokB,aAAA,CAAA29C,gBAAA,IACA/hE,EAAA8hE,YAAA,GACA9hE,EAAAiiE,SAAA,GACAjiE,EAAAwiE,aAAA,GAEAxiE,EAAA+hE,gBAAA7wD,EAAAhK,cAmBAlH,EAAAyX,mBAAA,WACAnM,EAAA+B,aACA/B,EAAAqC,IAAA,oBAAA3N,EAAAk6D,mBAGA,MAAAl6D,EAAAiE,YACAwS,IAGAzW,EAAAM,aAAAmD,eACA,IAAAzD,EAAAk6D,kBACAl6D,EAAAM,aAAAmD,aAAAgF,aAAA,iBAAA,WAAA,GAEAzI,EAAAM,aAAAmD,aAAAgF,aAAA,iBAAA,WAAA,KAeAzI,EAAA6F,OAAA,eAAA,SAAAC,EAAAC,GACAge,MACA,GAEA/jB,EAAAM,aAAA,CACAwE,KAAA,WACAvE,QAAA,CACA,CACAuE,KAAA,iBACAtE,UAAA,aACAC,QAAAzF,EAAAM,QAAA,oBACAoF,SAAA,SACAC,MAAA,QACAmI,mBAAA,SAAAC,GACA,OAAAX,EAAA,WAAAA,CAAAW,EAAA9E,aAEAihB,QAAA,IAAAllB,EAAAk6D,mBAEA,CAAA15D,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,SAAAC,MAAA,QAAAC,UAAA,QACA,CACAJ,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,qBAEA,CACAoC,UAAA,qBACAC,QAAAzF,EAAAM,QAAA,kBAAA,MACAoF,SAAA,SACAC,MAAA,QACAukB,SAAA,GAEA,CACA1kB,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,sBAEA,CACAoC,UAAA,SACAC,QAAAzF,EAAAM,QAAA,gBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,iBAAAA,CAAAW,EAAA85D,SAEAliE,MAAA,QAEA,CAAAH,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,UACA,CAAAF,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,wBAAAoF,SAAA,OAAAC,MAAA,QACA,CAAAH,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,SACA,CAAAH,UAAA,aAAAC,QAAAzF,EAAAM,QAAA,wBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,SACA,CACAH,UAAA,SACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,eAAAA,CAAAW,EAAA+5D,SAEAniE,MAAA,QAEA,CAAAH,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,2BAAAoF,SAAA,SAAAwkB,SAAA,IAEAhc,cAAA,SAAArI,GACA,QAAAA,EAAAsI,SACAtI,EAAAuI,UAAAC,iBAAAxI,EAAAyI,UACAy5D,WACAliE,EAAA2I,WAAAC,SAAA,eAIAxE,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,0BACA6J,UAAA,SAAA6E,GACA,OAAA7G,EAAAU,SAAA,oCAAAV,EAAAU,SAAA,YAEAuB,SAAA,SAAA4E,GAAA6R,EAAA7R,EAAAO,UAAA,SAEA,CACArF,KAAAlK,EAAAM,QAAA,8BACA6J,UAAA,SAAA6E,GACA,OAAA7G,EAAAU,SAAA,oCAAAV,EAAAU,SAAA,YAEAuB,SAAA,SAAA4E,EAAAg5D,GAgCA,IACAV,EACA,GADAA,EAAAlmE,EAAAmmE,OAAAviE,EAAAwiE,aAAA,qBACA/iE,OACA4L,EAAA6B,eAAA,CACA7R,MAAA,4CACA8R,QAAAnS,EAAAM,QAAA,+CAAAs0B,EAAA0yC,EAAA7iE,QACA2N,QAAA,CAAA,CACAlI,KAAA,kBAMA+9D,EAAAC,mBAAAC,KAAAC,UAAAhnE,EAAA+a,IAAAnX,EAAAwiE,aAAA,eAEAr6D,EAAAuC,KAAA,uCAAAu4D,EACA,SAAA,oHA9CA,CACA/9D,KAAAlK,EAAAM,QAAA,6BACA8J,SAAA,SAAA4E,EAAAg5D,GA+CA,IAAAh5D,EAAAA,EA/CAA,EAkDA,GADAs4D,EAAAlmE,EAAAmmE,OAAAviE,EAAAwiE,aAAA,qBACA/iE,OACA4L,EAAA6B,eAAA,CACA7R,MAAA,4CACA8R,QAAAnS,EAAAM,QAAA,gDAAAs0B,EAAA0yC,EAAA7iE,QACA2N,QAAA,CAAA,CACAlI,KAAA,iBAgBAmG,EAAA6B,eAAA,CACA7R,MAAA,8CACA8R,QAAAnS,EAAAM,QAAA,8CAAAs0B,EAAA5vB,EAAAwiE,aAAA/iE,QACA2N,QAAA,CAAA,CACAlI,KAAA,kBACA,CACAA,KAAA,cACA,CACAA,KAAA,cACAE,SAnBA,WACAsV,EAAA2oD,0BAAAr5D,EAAA8I,iBAAA1W,EAAA+a,IAAAnX,EAAAwiE,aAAA,aACAG,EACA,SAAAhgE,GACAk5B,EAAAiB,YACA9hC,EAAAM,QAAA,0BACAugC,EAAAkB,eAAAp6B,aAjEA,CACAuC,KAAAlK,EAAAM,QAAA,0CACA8J,SAAA,SAAA4E,EAAAg5D,GAAAZ,EAAAp4D,GAAA,KAEA,CACA9E,KAAAlK,EAAAM,QAAA,mCACA8J,SAAA,SAAA4E,EAAAg5D,GAAAZ,EAAAp4D,GAAA,KAEA,CACA9E,KAAAlK,EAAAM,QAAA,uBACA8J,SAAA,SAAA4E,EAAAg5D,GAkHA,IAAAh5D,EAAAA,EAlHAA,EAqHA,GADAs4D,EAAAlmE,EAAAmmE,OAAAviE,EAAAwiE,aAAA,qBACA/iE,OACA4L,EAAA6B,eAAA,CACA7R,MAAA,4CACA8R,QAAAnS,EAAAM,QAAA,gDAAAs0B,EAAA0yC,EAAA7iE,QACA2N,QAAA,CAAA,CACAlI,KAAA,iBAgBAmG,EAAA6B,eAAA,CACA7R,MAAA,8CACA8R,QAAAnS,EAAAM,QAAA,8CAAAs0B,EAAA5vB,EAAAwiE,aAAA/iE,QACA2N,QAAA,CAAA,CACAlI,KAAA,kBACA,CACAA,KAAA,cACA,CACAA,KAAA,cACAE,SAnBA,WACAsV,EAAA4oD,oBAAAt5D,EAAA8I,iBAAA1W,EAAA+a,IAAAnX,EAAAwiE,aAAA,aACAI,EACA,SAAAjgE,GACAk5B,EAAAiB,YACA9hC,EAAAM,QAAA,0BACAugC,EAAAkB,eAAAp6B,aApIA,CACAuC,KAAAlK,EAAAM,QAAA,+BACA6J,UAAA,SAAA6E,GACA,OAAA7G,EAAAU,SAAA,oCAAAV,EAAAU,SAAA,YAEAuB,SAAA,SAAA4E,GAAA6R,EAAA7R,EAAAO,UAAA,WAKAvK,EAAA2E,gBAAA,SAAA69D,GACAxiE,EAAAwiE,aAAAA,GAoKAxiE,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAiE,aACAwS,IACAzW,EAAAujE,gBAAA,KACAx/C,OAIA7b,EAAAiD,IAAA,CAAAlI,EAAAc,oBACA1C,KAAA,SAAAjD,GACAA,EAAA,KACA4B,EAAAiE,WAAA7F,EAAA,GAAA0E,IAGA9C,EAAAiE,YAEAwS,MAIAzW,EAAA6E,iBAAA,SAAAZ,GACAA,IAEAwS,IACAzW,EAAAujE,gBAAA,OAIAvjE,EAAAiB,cAAA,SAAA7C,GACA4B,EAAAujE,gBAAAnlE,MC9WAzD,MAAAkF,WAAA,qBAAA,CAAA,SAAA,aACA,SAAAG,EAAA0a,GACA1a,EAAAsB,MAAAoZ,EAAA8oD,QAAAxjE,EAAAuK,cCJA5P,MAAAkF,WAAA,qBAAA,CAAA,SAAA,SAAA,oBAAA,eAAA,YAAA,WACA,SAAAG,EAAAC,EAAAiR,EAAAuyD,EAAAC,EAAAl1D,GAEAxO,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,QAAAC,WAAA,CAAA,QACAC,WAAA,CAAA,CAAAC,MAAA,OAAAE,YAAA,eAAA2E,KAAA,SAAAta,MAAA,SACA,CAAAyV,MAAA,cAAAE,YAAA,uBAAA2E,KAAA,SAAAta,MAAA,SACA,CAAAyV,MAAA,iBAAAE,YAAA,kBAAA2E,KAAA,UACA,CAAA7E,MAAA,yBAAAE,YAAA,kCAAA4E,MAAA,QAAAva,MAAA,SACA,CAAAyV,MAAA,YAAAE,YAAA,qBAAA4E,MAAA,QAAAva,MAAA,WAIAX,EAAA+hE,gBAAA7wD,EAAAhK,aAAA,GAGA,IAAAy8D,EAAAvkE,OAAAqkE,EAAA3gE,IACA6gE,GACA3jE,EAAA+hE,gBAAA3gE,SAAAC,KAAA,SAAAwqB,GACA,IAAAztB,EAAAhC,EAAAsK,KAAA1G,EAAA+hE,gBAAA,CAAAj/D,GAAA6gE,IACAvlE,EAGA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAK,SAJAkiE,EAAAE,KAAA,+BAUA5jE,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAA+hE,gBAAA7wD,EAAAhK,aAAA,KAGAlH,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA4P,EAAAxP,YACAP,EAAAK,UAQA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,wDACA4B,OANAxB,EAAA2B,YAAA,SAAAvD,GACA8S,EAAAtP,OAAAxD,KAMA4D,MAAAhC,EAAAiC,OACA4hE,IAAA,yBAGA7jE,EAAA/E,IAAA,aAAA,SAAA4F,EAAAkqC,GACA,yBAAAA,EAAA+4B,SAAAD,KACAJ,EAAA3gE,IACA0L,EAAA,WACAk1D,EAAAE,KAAA,8BACA,QCrEAjpE,MAAAkF,WAAA,2BAAA,CAAA,SAAA,oBAAA,WAAA,SAAA,gBAAA,eAAA,aAAA,YACA,SAAAG,EAAAkR,EAAA1C,EAAAvO,EAAAoL,EAAAo4D,EAAAzoE,EAAA0oE,GAmBA,IACAj4C,EAlBAzrB,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OACAtB,EAAA+jE,SAAA,EAEA/jE,EAAAgkE,sBAAA,CACAC,SAAA,KACAC,SAAA,MAGAlkE,EAAAmkE,YAAApoE,SAAA8U,SAAA,GAAA,QAAA3U,SACA8D,EAAAokE,eAAA,CACAthE,GAAA,IAAA9C,EAAAsB,MAAA+iE,0BAAArkE,EAAAsB,MAAAgjE,oBAAA,KACAC,cAAA,KACAC,UAAA,MAGAxkE,EAAAykE,+CAAAzkE,EAAAsB,MAAAwB,uBAEA9C,EAAAsB,MAAAgjE,qBAAA,GAAAtkE,EAAAsB,MAAA+iE,2BAEA,IADA54C,EAAAzrB,EAAAsB,MAAAgjE,oBAAA74C,MAAA,MACAhsB,SACAO,EAAAgkE,sBAAAC,SAAAx4C,EAAA,GACAzrB,EAAAgkE,sBAAAE,SAAAz4C,EAAA,IAcA,IAAAzrB,EAAAsB,MAAA+iE,2BACAnzD,EAAAwzD,cAAA1kE,EAAAsB,MAAAgjE,qBAAAljE,SAAAC,KAAA,SAAAjD,GAEA,OADA4B,EAAAokE,eAAAxpE,QAAAkC,OAAA,GAAAsB,EAAA4B,EAAAokE,gBACAhmE,EAAAu+B,QACA,KAAA,EACA38B,EAAAokE,eAAAI,UAAAxpE,EAAAM,QAAA,0CACA,MACA,KAAA,EACA0E,EAAAokE,eAAAI,UAAAxpE,EAAAM,QAAA,iDACA,MACA,KAAA,EACA0E,EAAAokE,eAAAI,UAAAxpE,EAAAM,QAAA,4DACA,MACA,KAAA,EACA0E,EAAAokE,eAAAI,UAAAxpE,EAAAM,QAAA,2CACA,MACA,KAAA,EACA0E,EAAAokE,eAAAI,UAAAxpE,EAAAM,QAAA,qDACA,MACA,KAAA,EACA0E,EAAAokE,eAAAI,UAAAxpE,EAAAM,QAAA,kDACA,MACA,KAAA,EACA0E,EAAAokE,eAAAI,UAAAxpE,EAAAM,QAAA,yCACA,MACA,KAAA,EACA0E,EAAAokE,eAAAI,UAAAxpE,EAAAM,QAAA,0CACA,MACA,KAAA,EACA0E,EAAAokE,eAAAI,UAAAxpE,EAAAM,QAAA,6CAMA0E,EAAA2kE,8BAAA,SAAAV,EAAAC,GACA,GAAAlkE,EAAAsB,MAAA+iE,4BACArkE,EAAAsB,MAAAgjE,oBAAAL,EAAA,IAAAC,IAIAlkE,EAAA4kE,mBAAA,SAAA91C,GACA9uB,EAAAsB,MAAAgjE,oBAAA,KACAtkE,EAAAgkE,sBAAAC,SAAA,KACAjkE,EAAAgkE,sBAAAE,SAAA,KAEA,GAAAlkE,EAAAsB,MAAA+iE,4BACArkE,EAAAsB,MAAAujE,iCAAA,KACA7kE,EAAAsB,MAAAwjE,+BAAA,OAIA9kE,EAAA+kE,kBAAA,WACAC,EAAA5jE,SAAAC,KAAA,WACA2jE,EAAAhlE,OAAAsB,MAAAtB,EAAAsB,MACA0jE,EAAAhlE,OAAAilE,sBAAA,SAAAC,GACAllE,EAAA+jE,SAAA,EACA7yD,EAAAi0D,qBACAD,EAAApiE,MACA0lC,SAAA48B,QAAAplE,EAAAsB,MAAAwB,cACA9C,EAAAsB,MAAAwB,IAAA1B,SAAAC,KAAA,SAAAjD,GACA4B,EAAAsB,MAAAgjE,oBAAAlmE,EAAA0E,GACAoO,EAAAnO,OAAA/C,EAAAsB,MAAA,WACAtB,EAAA+jE,SAAA,EACAzhD,OAAAkmB,SAAA48B,KAAAhnE,EAAAinE,sBAEA,SAAA1iE,GACA3C,EAAA+jE,SAAA,KAEA,SAAAphE,GAAA3C,EAAA+jE,SAAA,KAEAiB,EAAAxjE,UAIAxB,EAAAslE,oBAAA,WACAC,EAAAnkE,SAAAC,KAAA,WACAkkE,EAAAvlE,OAAAsB,MAAAtB,EAAAokE,eACAmB,EAAAvlE,OAAAwlE,sBAAA,SAAAC,GACAzlE,EAAA+jE,SAAA,EACA7yD,EAAAw0D,kBAAA1lE,EAAAokE,eAAAthE,GAAA2iE,EAAA3iE,IAAA1B,SAAAC,KAAA,SAAAjD,GACA4B,EAAAokE,eAAAuB,qBAAAvnE,EAAAunE,qBACA3lE,EAAA+jE,SAAA,GAEA,SAAAxuD,GACAvV,EAAA+jE,SAAA,KAGAwB,EAAA/jE,UAIAxB,EAAA4lE,uBAAA,WACAv6D,EAAA6B,eAAA,CACA7R,MAAA,2CACA8R,QAAA,0CACAC,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WACApF,EAAA+jE,SAAA,EACA7yD,EAAA20D,iBAAA7lE,EAAAsB,MAAAgjE,qBAAAljE,SAAAC,KAAA,WACArB,EAAAsB,MAAAgjE,oBAAA,KACAtkE,EAAAsB,MAAA+iE,0BAAA,EACAnzD,EAAAnO,OAAA/C,EAAAsB,MAAA,WACAtB,EAAA+jE,SAAA,EACA/jE,EAAAokE,eAAA,CACAthE,GAAA,KACAyhE,cAAA,KACAC,UAAA,OAEA,SAAA7hE,GACA3C,EAAA+jE,SAAA,KAEA,SAAAphE,GACA3C,EAAA+jE,SAAA,UAOA/jE,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,iEACAgkE,MAAA,QAEA,CACAzqE,MAAA,qBACAyG,SAAA,uEACAgkE,MAAA,cAEA,CACAzqE,MAAA,eACAyG,SAAA,iEACAgkE,MAAA,SAIA9lE,EAAAsB,MAAAwB,KACA9C,EAAAiG,WAAA9H,KAAA,CACA9C,MAAA,oBACAyG,SAAA,sEACAgkE,MAAA,cAEA9lE,EAAAiG,WAAA9H,KAAA,CACA9C,MAAA,2BACAyG,SAAA,6EACAgkE,MAAA,sBAIA9lE,EAAAiG,WAAAlE,UAAA,EAEAgkE,EAAAtC,EAAAqC,OACAC,IAEA,KADAC,EAAA5pE,EAAAwuD,UAAA5qD,EAAAiG,WAAA,CAAA6/D,MAAAC,OAEA/lE,EAAAiG,WAAAlE,UAAAikE,GAIAhmE,EAAAimE,oBAAA,EACAjmE,EAAAkmE,MAAA,CACAC,aAAApqE,SAAAy8B,OACA1S,iBAAA9lB,EAAAsB,MAAAwB,GACAsjE,eAAA,GAGApmE,EAAAsB,MAAAwB,IACAoO,EAAAm1D,sBACA,EACArmE,EAAAkmE,MAAApgD,iBACA9lB,EAAAkmE,MAAAC,aAAA,SAAA/nE,GACA4B,EAAAkmE,MAAAE,eAAAhoE,EAAAzC,QAIAqE,EAAAsmE,wBAAA,SAAA9tC,GACAtnB,EAAAm1D,sBAAA,EAAArmE,EAAAkmE,MAAApgD,iBAAA9lB,EAAAkmE,MAAAC,aAAA,SAAAI,GACAvmE,EAAAkmE,MAAAE,eAAAG,EAAA5qE,SAIAqE,EAAAwmE,yBAAA,SAAAlmC,GACAtgC,EAAAimE,qBAIAjmE,EAAAimE,oBAAA,EACA/0D,EAAAu1D,qBAAA,EAAAzmE,EAAAkmE,MAAApgD,iBAAA9lB,EAAAkmE,MAAAC,aAAA7lC,EACA,WACAtgC,EAAAkmE,MAAAE,eAAA9lC,EACAtgC,EAAAimE,oBAAA,GACA,SAAAtjE,GACA3C,EAAAimE,oBAAA,MAIAjmE,EAAA0mE,oBAAA,SAAAC,GACA,OAAAA,EAAA,KAAAtnE,IAAA,IAGAW,EAAA4mE,0BAAA,SAAAD,GACA,OAAAA,EAAA,KAAAtnE,IAAA,IAGAW,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAA6C,UAAA,EAEA7C,EAAAwC,aAAA,SAAAlB,GAQA,SAAAmB,IACAzC,EAAA6C,UAAA,EACA7C,EAAA0C,QAGA,SAAAC,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EAbA4B,EAAA6C,WAIA7C,EAAA6C,UAAA,EAYAvB,EAAAwB,GAGAoO,EAAAnO,OAAAzB,EAAAmB,EAAAE,GAFAuO,EAAAlO,OAAA1B,EAAAmB,EAAAE,KAMA3C,EAAA6mE,mBAAA,WACA1lE,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAA8mE,aAAA,IACA3lE,EAAAnB,OAAA+mE,cAAA,IACA5lE,EAAAnB,OAAAgnE,cAAA,SAAA5oE,EAAAqE,EAAAE,GACAuO,EAAA+1D,sBAAAjnE,EAAAsB,MAAAwB,GAAA1E,GAAAgD,SAAAC,KAAA,SAAAwqB,GACAppB,EAAA,CAAAy0D,qCAAAl3D,EAAAsB,MAAAwB,yBACAH,IAEAxB,EAAAnB,OAAAknE,YAAA,SAAAhQ,GACAl3D,EAAAykE,+CAAAzkE,EAAAsB,MAAAwB,wBAAA,IAAAxG,MAAA6qE,aAEAhmE,EAAAK,UAuBA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,wCACA4B,OArBAxB,EAAAonE,sBAAA,WAEA/7D,EAAA6B,eAAA,CACA7R,MAAA,2BACA8R,QAAA,gCACAC,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WACA8L,EAAAm2D,sBAAArnE,EAAAsB,MAAAwB,IAAA1B,SAAAC,KAAA,WACArB,EAAAykE,+CAAAzkE,EAAAsB,MAAAwB,wBAAA,IAAAxG,MAAA6qE,qBAWAnlE,MAAAhC,IAGAglE,EAAA/kE,EAAA,CACAL,YAAA,sDACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGAsjE,EAAAtlE,EAAA,CACAL,YAAA,8DACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YCxUAtH,MAAAkF,WAAA,iCAAA,CAAA,SACA,SAAAG,GAGAA,EAAAsnE,oBAAA,CACAxkE,GAAA,MAIA9C,EAAAunE,oBAAA,WACAvnE,EAAA0C,QACA1C,EAAAwlE,sBAAAxlE,EAAAsnE,sBAGAtnE,EAAA0lE,kBAAA,SAAAD,GACAzlE,EAAAsnE,oBAAA7B,GAGAzlE,EAAAwnE,sBAAA,WACA,QAAAxnE,EAAAsnE,oBAAAxkE,OCnBAnI,MAAAkF,WAAA,wBAAA,CAAA,SAAA,UAAA,aACA,SAAAG,EAAAmI,EAAAuS,GAEA1a,EAAAynE,kBAAA,KACAznE,EAAAsB,MAAA,KAEAtB,EAAA/E,IAAA,2CAAA,SAAA4F,EAAAzC,GACAA,EAGA4B,EAAAynE,oBAAArpE,EAAAmM,YACAvK,EAAAynE,kBAAArpE,EAAAmM,UACAvK,EAAAynE,kBACAznE,EAAAsB,MAAAoZ,EAAAgtD,8BAAA1nE,EAAAynE,mBAEAznE,EAAAsB,MAAA,OAPAtB,EAAAsB,MAAA,KACAtB,EAAA2nE,kBAAA,QAYA3nE,EAAA6b,eAAA,SAAAtR,GACApC,EAAAuC,KAAA,kCAAAH,EAAA,kBACA,SAAA,qHCvBA5P,MAAAkF,WAAA,0BAAA,CAAA,SAAA,SAAA,oBACA,SAAAG,EAAAC,EAAAiR,GAEAlR,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAA4nE,aAAA12D,EAAA22D,kBACA7nE,EAAA8nE,oBAAA,CACAhlE,GAAA,MAIA9C,EAAA+nE,qBAAA,WACA/nE,EAAAilE,sBAAAjlE,EAAA8nE,qBACA9nE,EAAA0C,SAGA1C,EAAAgoE,kBAAA,SAAA9C,GACAllE,EAAA8nE,oBAAA5C,GAGAllE,EAAAioE,sBAAA,WACA,QAAAjoE,EAAA8nE,oBAAAhlE,IAGA9C,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAIArC,EAAAknB,YAAA,WACA,OAAA,MC9BAvsB,MAAAkF,WAAA,2BAAA,CAAA,SAAA,mBACA,SAAAG,EAAAkoE,GAGAloE,EAAAmoE,qCAAA,CACAz1D,WAAA,IAGA1S,EAAAooE,+BAAA,CACApyD,SAAA,CAAAC,OAAA,CAAA,kBAAAC,WAAA,CAAA,QACAC,WAAA,CACA,CAAAC,MAAA,iBAAAE,YAAA,iBAAA2E,KAAA,UACA,CAAA7E,MAAA,oBAAAE,YAAA,6BAAA3V,MAAA,OAAAua,MAAA,SACA,CAAA9E,MAAA,qBAAAE,YAAA,0BAAA3V,MAAA,OAAAua,MAAA,SACA,CAAA9E,MAAA,iBAAAE,YAAA,2BAAA3V,MAAA,OAAAua,MAAA,SACA,CAAA9E,MAAA,iBAAAE,YAAA,0BAAA3V,MAAA,OAAAua,MAAA,SACA,CAAA9E,MAAA,kBAAAE,YAAA,sBAAA3V,MAAA,OAAAua,MAAA,SACA,CAAA9E,MAAA,0BAAAE,YAAA,+BAAA3V,MAAA,OAAAua,MAAA,SACA,CAAA9E,MAAA,2BAAAE,YAAA,4BAAA3V,MAAA,OAAAua,MAAA,UAEA3E,iBAAA,GAGAvW,EAAAqoE,oBAAA,GAEAroE,EAAA/E,IAAA,8BAAA,SAAA4F,EAAAzC,GACAA,GAAAA,EAAA6F,YAAA7F,EAAAkqE,aACAtoE,EAAAqoE,oBAAAH,EAAAK,eAAAnqE,EAAA6F,WAAA7F,EAAAkqE,aAAAvgE,WAEA/H,EAAAqoE,oBAAA5oE,OAAA,OC7BA9E,MAAAkF,WAAA,oBAAA,CAAA,SAAA,UAAA,cAAA,mBACA,SAAAG,EAAAoI,EAAAnF,EAAAilE,GAMA,SAAAM,EAAAvkE,EAAAqkE,GACAtoE,EAAAyoE,qBAAAH,EACAtoE,EAAA2D,WAAA,8BAAA,CAAAM,WAAAA,EAAAqkE,aAAAA,IAGA,SAAAl3D,EAAAnN,GACAukE,EAAA,KAAA,MACAxoE,EAAA0oE,mBAAAR,EAAAhhE,YAAAjD,GAAA,MAXAjE,EAAAyS,cAAA,CACAC,WAAA,IAaAzP,EAAAc,kBACA1C,KAAA,SAAAjD,GACAA,IACA4B,EAAAiE,WAAA7F,EAAA0E,IAGAsO,EAAApR,EAAAiE,cAGAjE,EAAA6E,iBAAA,SAAAZ,GACAA,GACAmN,EAAApR,EAAAiE,aAIAjE,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,mBAAAC,WAAA,CAAA,QACAC,WAAA,CAAA,CAAAC,MAAA,kBAAAE,YAAA,kBAAA2E,KAAA,YAAAta,MAAA,SACA,CAAAyV,MAAA,iBAAAE,YAAA,iBAAA2E,KAAA,YAAAta,MAAA,QAAAoa,QAAA,EAAAC,QAAA,GACA,CAAA5E,MAAA,UAAAE,YAAA,kBAAA2E,KAAA,SAAAF,QAAA,GACA,CAAA3E,MAAA,QAAAE,YAAA,gBAAAyE,QAAA,EAAAC,QAAA,EAAAra,MAAA,SACA,CAAAyV,MAAA,mBAAAE,YAAA,6BAAA3V,MAAA,OAAAua,MAAA,SACA,CAAA9E,MAAA,gBAAAE,YAAA,0BAAA3V,MAAA,OAAAua,MAAA,SACA,CAAA9E,MAAA,iBAAAE,YAAA,2BAAA3V,MAAA,OAAAua,MAAA,SACA,CAAA9E,MAAA,SAAAE,YAAA,sBAAA3V,MAAA,OAAAua,MAAA,SACA,CAAA9E,MAAA,sBAAAE,YAAA,4BAAA3V,MAAA,OAAAua,MAAA,UAGA3E,iBAAA,GAGAvW,EAAAiB,cAAA,SAAA7C,GACAoqE,EAAAxoE,EAAAiE,WAAA7F,IAGA4B,EAAA6B,KAAA,CACA,CACAxG,MAAA,kBACAyG,SAAA,0DAGA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,EAAApR,EAAAiE,iBC3DAtJ,MAAAkF,WAAA,qCAAA,CAAA,SAAA,UAAA,aAAA,UAAA,cAAA,cACA,SAAAG,EAAAmI,EAAAnN,EAAAoN,EAAAugE,EAAAxlE,GAGA,IAAAyD,GAAA,EACAC,GAAA,EACA7G,EAAAuK,UAAA,KACAvK,EAAA8qD,sBAAA,GAEA9qD,EAAA/E,IAAA,4BAAA,SAAA4F,EAAAzC,GAEAA,EACAA,EAAAmM,YAAAvK,EAAAuK,WAAA1D,IACA7G,EAAAuK,UAAAnM,EAAAmM,UAGA1D,IAFAD,IACA5G,EAAA8qD,sBAAA6d,EAAAC,mCAAAxqE,EAAAmM,YACA,KAMAvK,EAAA8qD,sBAAArrD,OAAA,EACAoH,GAAA,KAKA7G,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAA7G,EAAAuK,YACAvK,EAAA8qD,sBAAA6d,EAAAC,mCAAA5oE,EAAAuK,WACA1D,GAAA,IAIAD,GAAA,IAIA5G,EAAA6oE,kCAAA,CACA/jE,KAAA,wBACAvE,QAAA,CACA,CACAC,UAAA,yBACAC,QAAAzF,EAAAM,QAAA,aACAoF,SAAA,SACAC,MAAA,OACAC,UAAA,OAEA,CAAAJ,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,OAAAC,MAAA,QACA,CAAAH,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,SACA,CAAAH,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,SCtDArK,MAAAkF,WAAA,kBAAA,CAAA,SAAA,SAAA,KAAA,UAAA,aAAA,WACA,UAAA,cAAA,iBAAA,cAAA,gBAAA,wBAAA,mBACA,sBAAA,oBAAA,cACA,SAAAG,EAAAC,EAAAiI,EAAAC,EAAAnN,EAAAwT,EAAApG,EAAAnF,EACA6lE,EAAA3lE,EAAAkI,EAAAjI,EAAAlB,EAAAoJ,EAAA4F,EAAA7I,GAqBA,SAAA0b,IACAhoB,SAEAmM,EAAAiD,IAAA,CAAAnL,EAAA+oE,eAAA3nE,SAAApB,EAAA+hE,gBAAA3gE,WAAAC,KAAA,WACA,IAAA2nE,EAAA5sE,EAAA+nB,OAAAnkB,EAAAokB,aAAA9Z,gBACA03D,EAAA5lE,EAAA+nB,OAAAnkB,EAAAokB,aAAA29C,iBACAkH,EAAAjpE,EAAAokB,aAAA6kD,qBACAjpE,EAAAkpE,YAAAzpE,OAAA,EACAO,EAAAkpE,YAAA/qE,KAAAsf,MAAAzd,EAAAkpE,YACA9sE,EAAAkoB,OAAAtkB,EAAA+oE,eAAA,SAAAz2D,GACA,IAAAuZ,GAAA,EAiBA,OAhBA,EAAAm9C,EAAAvpE,SACAosB,EAAAzvB,EAAAuiE,SAAAqK,EAAA12D,EAAAuwD,SAGA,EAAAb,EAAAviE,SACAosB,EAAAA,GAAAzvB,EAAAuiE,SAAAqD,EAAA1vD,EAAAQ,mBAKA+Y,EAFAo9C,EAEAp9C,GAAAvZ,EAAA62D,aAMAt9C,OAwBA,SAAApV,IACA,IAAAzW,EAAAk6D,kBACAl6D,EAAA+oE,eAAAD,EAAAp3D,wBACA,MAAA1R,EAAAiE,WAAAjE,EAAAiE,WAAA,MAAA,GAEAjE,EAAA+oE,eAAAD,EAAAM,uBACAppE,EAAA8W,SAAA9W,EAAA9D,QAAA,GAEA6nB,IA9EA/jB,EAAAk6D,kBAAA,EACAl6D,EAAA8W,SAAA/a,SAAA8U,SAAA,EAAA,KAAAD,QAAA,OAAA1U,SACA8D,EAAA9D,OAAAH,SAAA6U,QAAA,OAAA1U,SAEAoP,EAAA+B,cAEArN,EAAAk6D,kBAAA5uD,EAAA2C,IAAA,sBAAA,GAGAjO,EAAAokB,aAAA,CAAA9Z,eAAA,GAAA2+D,sBAAA,GACAjpE,EAAA+oE,eAAA,GACA/oE,EAAAkpE,YAAA,GAEAlpE,EAAA+hE,gBAAA7wD,EAAAhK,cAEAlH,EAAA6F,OAAA,eAAA,SAAAC,EAAAC,GACAge,MACA,GAmCA/jB,EAAAyX,mBAAA,WACAnM,EAAA+B,aACA/B,EAAAqC,IAAA,oBAAA3N,EAAAk6D,mBAGA,MAAAl6D,EAAAiE,YACAwS,IAGAzW,EAAAM,aAAAmD,eACA,IAAAzD,EAAAk6D,kBACAl6D,EAAAM,aAAAmD,aAAAgF,aAAA,iBAAA,WAAA,GAEAzI,EAAAM,aAAAmD,aAAAgF,aAAA,iBAAA,WAAA,KAgBAP,EAAAiD,IAAA,CAAAlI,EAAAc,oBACA1C,KAAA,SAAAjD,GACAA,EAAA,KACA4B,EAAAiE,WAAA7F,EAAA,GAAA0E,IAGA2T,MAGAzW,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAiE,aACAwS,IACA4yD,EAAA,SAWA,IAAAn/D,EAAAjK,EAAA,CACAL,YAAA,wCACA4B,OATAxB,EAAA6E,iBAAA,SAAAZ,GACAA,IACAwS,IACA4yD,EAAA,SAOArnE,MAAAhC,EAAAiC,SA0BA,SAAAonE,EAAAC,GACAtpE,EAAAupE,qBAAAD,IACAtpE,EAAAupE,mBAAAD,EACAtpE,EAAA2D,WAAA,4BAAA2lE,IAIAtpE,EAAA+sC,MAAA,CAAA,CACApxC,MAAA,EACAJ,MAAAP,EAAAM,QAAA,mBACA,CACAK,MAAA,EACAJ,MAAAP,EAAAM,QAAA,4BACA,CACAK,MAAA,EACAJ,MAAAP,EAAAM,QAAA,yBACA,CACAK,MAAA,EACAJ,MAAAP,EAAAM,QAAA,yBAGA0E,EAAAM,aAAA,CACAwE,KAAA,cACAvE,QAAA,CACA,CACAuE,KAAA,iBACAtE,UAAA,aACAC,QAAAzF,EAAAM,QAAA,oBACAoF,SAAA,SACAC,MAAA,QACAmI,mBAAA,SAAAC,GACA,OAAAX,EAAA,WAAAA,CAAAW,EAAA9E,aAEAihB,QAAA,IAAAllB,EAAAk6D,mBAEA,CACA15D,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,qBAEA,CAAAoC,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,SAAAC,MAAA,QACA,CACAH,UAAA,SACAC,QAAAzF,EAAAM,QAAA,gBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,iBAAAA,CAAAW,EAAA85D,SAEAliE,MAAA,QAEA,CAAAH,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAE,UAAA,OACA,CAAAJ,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,YAAAoF,SAAA,UACA,CACAF,UAAA,0BACAC,QAAAzF,EAAAM,QAAA,iCACAoF,SAAA,UACA8oE,SAAA,oDACAC,UAAA,IACA9jD,YAAA,EACA+jD,kBAAA,EACA/oE,MAAA,OACAukB,QAAAhjB,EAAAE,SAAAuoD,6BAEA,CAAAnqD,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,OAAAC,MAAA,QACA,CAAAH,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,SACA,CAAAH,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,SACA,CAAAH,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,UAEAuI,cAAA,SAAArI,GACA,QAAAA,EAAAsI,SACAtI,EAAAuI,UAAAC,iBAAAxI,EAAAyI,UACAqgE,kBACA9oE,EAAA2I,WAAAC,SAAA,gBAIAxE,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,2BACA6J,UAAA,SAAA6E,GAAA,OAAA7G,EAAAU,SAAA,mBACAuB,SAAA,SAAA4E,GArGA5L,EAqGA4L,EApGAE,EAAAlK,OAAAmK,iBAAA,EACAD,EAAAlK,OAAAoK,cAAA,CACAC,UAAA,EACAC,eAAAlM,EAAAykE,OACAt4D,UAAAnM,EAAAmM,UACAC,OAAApM,EAAAzC,MACA8O,aAAArM,EAAAxC,MAGAsO,EAAA9I,SAAAC,KAAA,WACA6I,EAAAlK,OAAA4C,YAAA,KACAsH,EAAAlK,OAAAuH,OAAA,WACAkP,IACA4yD,EAAA,OAGAn/D,EAAA1I,WAqFA,CACA0D,KAAAlK,EAAAM,QAAA,0BACA6J,UAAA,SAAA6E,GACA,OAAA7G,EAAAU,SAAA,oCAAAV,EAAAU,SAAA,YAEAuB,SAAA,SAAA4E,GAAAhK,EAAA6b,eAAA7R,EAAAO,aAEA,CACArF,KAAAlK,EAAAM,QAAA,mCACA8J,SAAA,SAAA4E,GAAAhK,EAAA4pE,yBAAA5/D,KAEA,CACA9E,KAAAlK,EAAAM,QAAA,+BACA6J,UAAA,SAAA6E,GACA,OAAA7G,EAAAU,SAAA,8BAAA,IAAAmG,EAAA64D,QAEAz9D,SAAA,SAAA4E,GAAAhK,EAAA6pE,iBAAA7/D,OAKAhK,EAAAiB,cAAA,SAAA7C,GACAirE,EAAAjrE,IAGA4B,EAAA8pE,iBAAA,CACAzuE,MAAA,iBACAsvC,QAAA3vC,EAAAM,QAAA,oCAYA0E,EAAA6pE,iBAAA,SAAAzrE,GACAiN,EAAA6B,eAAA,CACA7R,MAAA,2BACA8R,QAAAnS,EAAAM,QAAA,kCAAAs0B,EAAAxxB,EAAAoZ,gBAAApZ,EAAA2jD,SACA30C,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WAhBAhC,EAAAxB,OACA,CAAA6D,qBAeArH,EAfA2rE,iBACA,EACA,WACAtzD,YAiBAzW,EAAA6b,eAAA,SAAAtR,GACApC,EAAAuC,KAAA,kCAAAH,EAAA,kBACA,SAAA,kHAGAvK,EAAAgqE,gBAAA,SAAAz/D,GACA0/D,EAAA7oE,SAAAC,KAAA,WACA4oE,EAAAjqE,OAAAuK,UAAAA,EACA0/D,EAAAzoE,UAIAxB,EAAA4pE,yBAAA,SAAA5/D,GACA8+D,EAAAoB,sBACAlgE,EAAAO,UACAP,EAAA64D,OACA74D,EAAA+/D,gBACA//D,EAAAmgE,iBACAngE,EAAA0uD,SACA1uD,EAAAmmB,cAGAnwB,EAAA2E,gBAAA,SAAA69D,GACAxiE,EAAA2D,WAAA,gBAAA6+D,IAGAxiE,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,sDACA,CACAzG,MAAA,qBACAyG,SAAA,uDACA,CACAzG,MAAA,oBACAyG,SAAA,6DACA,CACAzG,MAAA,oBACAyG,SAAA,6DACA,CACAzG,MAAA,mBACAyG,SAAA,yDAGAI,EAAAE,SAAAuoD,6BACA3qD,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,gCACAyG,SAAA,sEAIA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,EAAAC,SAAAA,MAIA,IAAAkkE,EAAAhqE,EAAA,CACAL,YAAA,wCACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YC3UAtH,MAAAkF,WAAA,yBAAA,CAAA,SAAA,UAAA,aAAA,UAAA,cAAA,cACA,SAAAG,EAAAmI,EAAAnN,EAAAoN,EAAAugE,EAAAxlE,GAIA,IAAAyD,GAAA,EACAC,GAAA,EACA7G,EAAAuK,UAAA,KACAvK,EAAAoqE,SAAA,GAEApqE,EAAA/E,IAAA,4BAAA,SAAA4F,EAAAzC,GAEAA,EACAA,EAAAmM,YAAAvK,EAAAuK,WAAA1D,IACA7G,EAAAuK,UAAAnM,EAAAmM,UAGA1D,IAFAD,IACA5G,EAAAoqE,SAAAzB,EAAA0B,iCAAAjsE,EAAAmM,YACA,KAMAvK,EAAAoqE,SAAA3qE,OAAA,EACAoH,GAAA,KAKA7G,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAA7G,EAAAuK,YACAvK,EAAAoqE,SAAAzB,EAAA0B,iCAAArqE,EAAAuK,WACA1D,GAAA,IAIAD,GAAA,IAKA5G,EAAAsqE,qBAAA,CACAxlE,KAAA,WACAvE,QAAA,CACA,CACAC,UAAA,SACAC,QAAAzF,EAAAM,QAAA,gBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,iBAAAA,CAAAW,EAAA85D,SAEAliE,MAAA,QAEA,CAAAH,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAE,UAAA,OACA,CAAAJ,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,YAAAoF,SAAA,UACA,CAAAF,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,SACA,CACAH,UAAA,gBACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,cAAAA,CAAAW,EAAAm4D,gBAEAvgE,MAAA,QAEA,CAAAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,OAAAC,MAAA,OAAAC,UAAA,OACA,CAAAJ,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,SAAAC,MAAA,OAAAukB,SAAA,GACA,CACA1kB,UAAA,aACAC,QAAAzF,EAAAM,QAAA,oBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,WAAAA,CAAAW,EAAAwhE,aAEA5pE,MAAA,QACAukB,SAAA,QC9EAvqB,MAAAkF,WAAA,wBAAA,CAAA,SAAA,aAAA,WAAA,iBACA,SAAAG,EAAAhF,EAAAwT,EAAAs6D,GAEA9oE,EAAAwqE,8BAAA,CACAvhE,KAAA,WAAA7K,KAAA,CACA,CAAA,YAAA,SACA,CAAApD,EAAAM,QAAA,kBAAA,GACA,CAAAN,EAAAM,QAAA,2BAAA,GACA,CAAAN,EAAAM,QAAA,wBAAA,GACA,CAAAN,EAAAM,QAAA,uBAAA,IACAwc,QAAA,CACA0nD,oBAAA,EACAE,UAAA,CAAA7f,IAAA,MAAAO,KAAA,MAAAz/C,MAAA,MAAA6hB,OAAA,OAEAm9C,OAAA,CAAAjtB,SAAA,WAIA1yC,EAAAyqE,wBAAA,CACAxhE,KAAA,WAAA7K,KAAA,CACA,CAAA,YAAA,SACA,CAAApD,EAAAM,QAAA,kBAAA,GACA,CAAAN,EAAAM,QAAA,2BAAA,GACA,CAAAN,EAAAM,QAAA,wBAAA,GACA,CAAAN,EAAAM,QAAA,uBAAA,IACAwc,QAAA,CACA0nD,oBAAA,EACAE,UAAA,CAAA7f,IAAA,MAAAO,KAAA,MAAAz/C,MAAA,MAAA6hB,OAAA,OAEAm9C,OAAA,CAAAjtB,SAAA,WAIA,IAAA8vB,EAAA,KACA57D,GAAA,EACAC,GAAA,EAEA7G,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,EACAjC,EAAA69D,IAGA57D,GAAA,IAIA5G,EAAA/E,IAAA,gBAAA,SAAA4F,EAAAzC,GAEAokE,EAAApkE,EACAyI,GAAA,EAEAD,GACAjC,EAAAvG,KAIA,IAAAuG,EAAA,SAAA69D,IACA37D,GAAA27D,IAGA37D,GAAA,EACA7G,EAAAigE,QAAA6I,EAAA4B,iBAAAlI,GACAh0D,EAAA,WACAxO,EAAAwqE,8BAAApsE,KAAA,GAAA,GAAA4B,EAAAigE,QAAA0K,MAAA,GAAAhvE,MACAqE,EAAAwqE,8BAAApsE,KAAA,GAAA,GAAA4B,EAAAigE,QAAA0K,MAAA,GAAAhvE,MACAqE,EAAAwqE,8BAAApsE,KAAA,GAAA,GAAA4B,EAAAigE,QAAA0K,MAAA,GAAAhvE,MACAqE,EAAAwqE,8BAAApsE,KAAA,GAAA,GAAA4B,EAAAigE,QAAA0K,MAAA,GAAAhvE,QAGAqE,EAAA4qE,WAAA9B,EAAA+B,sBACA7qE,EAAA4qE,WAAAxpE,SAAAC,KAAA,SAAAjD,GACAoQ,EAAA,WACAxO,EAAAyqE,wBAAArsE,KAAA,GAAA,GAAAA,EAAAusE,MAAA,GAAAhvE,MACAqE,EAAAyqE,wBAAArsE,KAAA,GAAA,GAAAA,EAAAusE,MAAA,GAAAhvE,MACAqE,EAAAyqE,wBAAArsE,KAAA,GAAA,GAAAA,EAAAusE,MAAA,GAAAhvE,MACAqE,EAAAyqE,wBAAArsE,KAAA,GAAA,GAAAA,EAAAusE,MAAA,GAAAhvE,eC7EAhB,MAAAkF,WAAA,6BAAA,CAAA,SAAA,UAAA,aACA,SAAAG,EAAAmI,EAAAuS,GAGA1a,EAAA6a,yBAAA,CACAnI,WAAA,IA8BA,IAAA9L,IA3BA5G,EAAA8a,mBAAA,CACA9E,SAAA,CAAAC,OAAA,CAAA,gBAAAC,WAAA,CAAA,QACAC,WAAA,CACA,CAAAC,MAAA,aAAAE,YAAA,mBAAAD,WAAA,WAAA1V,MAAA,SACA,CAAAyV,MAAA,eAAAE,YAAA,qBAAA3V,MAAA,QAAAoa,QAAA,EAAAC,QAAA,GACA,CAAA5E,MAAA,kBAAAE,YAAA,kBAAA2E,KAAA,YAAAta,MAAA,SACA,CAAAyV,MAAA,SAAAE,YAAA,eAAAD,WAAA,iBAAA1V,MAAA,OAAAoa,QAAA,EAAAC,QAAA,GACA,CAAA5E,MAAA,UAAAE,YAAA,kBAAA2E,KAAA,UACA,CAAA7E,MAAA,QAAAE,YAAA,iBAAAD,WAAA,gBAAA1V,MAAA,QAAAua,MAAA,SACA,CAAA9E,MAAA,aAAAE,YAAA,uBAAAD,WAAA,gBAAA1V,MAAA,QAAAua,MAAA,QAAAH,QAAA,GACA,CAAA3E,MAAA,SAAAE,YAAA,gBAAAD,WAAA,eAAA1V,MAAA,SAEAwa,WAAA,CACA,CACAjW,KAAA,yBAEAkW,QAAA,SAAApR,GAMAO,EANAP,EAAAO,UAOApC,EAAAuC,KAAA,kCAAAH,EAAA,kBACA,SAAA,oHANAiM,cAAA,YACA6E,uBAAA,IASAxU,GAAA,EACA7G,EAAA04D,SAAA,KACA14D,EAAA2a,gBAAA,GAEA3a,EAAA/E,IAAA,4BAAA,SAAA4F,EAAAzC,GAEAA,EACAA,EAAAs6D,WAAA14D,EAAA04D,UAAA7xD,IACA7G,EAAA04D,SAAAt6D,EAAAs6D,SAGA7xD,IAFAD,IACA5G,EAAA2a,gBAAAD,EAAAowD,8BAAA1sE,EAAAs6D,WACA,KAMA14D,EAAA2a,gBAAAlb,OAAA,EACAoH,GAAA,KAKA7G,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAA7G,EAAA04D,WACA14D,EAAA2a,gBAAAD,EAAAowD,8BAAA9qE,EAAA04D,UACA7xD,GAAA,IAIAD,GAAA,OCrEAjM,MAAAkF,WAAA,6BAAA,CAAA,SAAA,UAAA,cAAA,cACA,SAAAG,EAAAmI,EAAAwgE,EAAAxlE,GAIAnD,EAAA6a,yBAAA,CACAnI,WAAA,IA4CA,IAAA9L,IAzCA5G,EAAA8a,mBAAA,CACA9E,SAAA,CAAAC,OAAA,CAAA,eAAAC,WAAA,CAAA,QACAC,WAAA,CACA,CAAAC,MAAA,aAAAE,YAAA,mBAAAD,WAAA,WAAA1V,MAAA,SACA,CAAAyV,MAAA,kBAAAE,YAAA,kBAAA2E,KAAA,YAAAta,MAAA,SACA,CAAAyV,MAAA,SAAAE,YAAA,eAAAD,WAAA,iBAAA1V,MAAA,QACA,CAAAyV,MAAA,UAAAE,YAAA,kBAAA2E,KAAA,UACA,CAAA7E,MAAA,QAAAE,YAAA,WAAA2E,KAAA,SAAAF,QAAA,EAAAC,QAAA,GACA,CAAA5E,MAAA,QAAAE,YAAA,iBAAAD,WAAA,gBAAA1V,MAAA,QAAAua,MAAA,SACA,CAAA9E,MAAA,gBAAAE,YAAA,kBAAAD,WAAA,cAAA1V,MAAA,QACA,CAAAyV,MAAA,cAAAE,YAAA,eAAAD,WAAA,mBAAA1V,MAAA,SAEAoqE,SAAA,SAAA/gE,GAAA,OAAAA,EAAArO,MAAA,GACAwf,WAAA,CACA,CACAjW,KAAA,yBACAmO,KAAA,SAAArJ,GACA,OAAA,IAAAA,EAAAk3D,gBAAA/9D,EAAAU,SAAA,yBAAAV,EAAAU,SAAA,YAEAuX,QAAA,SAAApR,GAUAK,EAVAL,EAAAK,UAWAlH,EAAAU,SAAA,wBAAAV,EAAAU,SAAA,YACAsE,EAAAuC,KAAA,uCAAAL,EACA,SAAA,mHAXA,CACAnF,KAAA,yBACAmO,KAAA,WAAA,OAAAlQ,EAAAU,SAAA,YACAuX,QAAA,SAAApR,GAYAO,EAZAP,EAAAO,UAaApC,EAAAuC,KAAA,kCAAAH,EAAA,kBACA,SAAA,sHAIA1D,GAAA,EACA7G,EAAA04D,SAAA,KACA14D,EAAAgrE,gBAAA,GAEAhrE,EAAA/E,IAAA,4BAAA,SAAA4F,EAAAzC,GAEAA,EACAA,EAAAs6D,WAAA14D,EAAA04D,UAAA7xD,IACA7G,EAAA04D,SAAAt6D,EAAAs6D,SAGA7xD,IAFAD,IACA5G,EAAAgrE,gBAAArC,EAAAsC,mBAAA7sE,EAAAs6D,WACA,KAMA14D,EAAAgrE,gBAAAvrE,OAAA,EACAoH,GAAA,KAKA7G,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAA7G,EAAA04D,WACA14D,EAAAgrE,gBAAArC,EAAAsC,mBAAAjrE,EAAA04D,UACA7xD,GAAA,IAIAD,GAAA,OCtFAjM,MAAAkF,WAAA,iCAAA,CAAA,SAAA,SAAA,KAAA,aAAA,gCACA,SAAAG,EAAAC,EAAAiI,EAAAlN,EAAA6+C,GAEA75C,EAAAkrE,4BAAArxB,EAAA3yC,aAAA,GAEAlH,EAAAM,aAAA,CACAC,QAAA,CACA,CAAAC,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAE,UAAA,OACA,CACAJ,UAAA,eACAC,QAAAzF,EAAAM,QAAA,yBACAoF,SAAA,SACAC,MAAA,QACA+xD,OAAA,CACAvvC,WAAA,CACAu0B,MAAA,CACAzuC,KAAA,QACA7K,KAAA,CAEA,CAAA0E,GAAA,EAAAgC,KAAA,WACA,CAAAhC,GAAA,EAAAgC,KAAA,cAEApJ,IAAA,OAGA2wB,UAAA,KACAD,YAAA,SAGA,CAAA5rB,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,UAAAC,MAAA,UAIAX,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAkrE,4BAAArxB,EAAA3yC,aAAA,KAGAlH,EAAAkB,UAAA,SAAA9C,GACA8J,EAAAiD,IAAA,CAAAhK,EAAAC,SACAy4C,EAAAhc,SAAAz/B,EAAA0E,IAAA1B,WAAAC,KAAA,SAAAizB,GACAnzB,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAA+yB,EAAA,IACAnzB,EAAAnB,OAAAuH,OAAA,WACAvH,EAAAkrE,4BAAArxB,EAAA3yC,aAAA,IAEA/F,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAAu4C,EAAAn4C,YACAP,EAAAnB,OAAAuH,OAAA,WACAvH,EAAAkrE,4BAAArxB,EAAA3yC,aAAA,IAEA/F,EAAAK,UAUA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,kFACA4B,OARAxB,EAAA2B,YAAA,SAAAvD,GACAy7C,EAAAj4C,OAAAxD,EAAA0E,IAAA1B,SAAAC,KAAA,WACArB,EAAAkrE,4BAAArxB,EAAA3yC,aAAA,OAOAlF,MAAAhC,EAAAiC,YCnEAtH,MAAAkF,WAAA,uCAAA,CAAA,SAAA,gCACA,SAAAG,EAAA65C,GAEA75C,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAA6C,UAAA,EAEA7C,EAAAwC,aAAA,SAAAlB,GAIA,OAFAtB,EAAA6C,UAAA,EAEAvB,EAAAy4C,cACA,KAAA,EACAz4C,EAAA6pE,OAAAC,WAAA,KACA9pE,EAAA6pE,OAAAE,iBAAA,KACA,MACA,KAAA,EACA/pE,EAAA6pE,OAAAG,wBAAA,KACA,MACA,KAAA,EACAhqE,EAAA6pE,OAAAE,iBAAA,KAUA,SAAA5oE,IACAzC,EAAA6C,UAAA,EACA7C,EAAAuH,QACAvH,EAAAuH,SAEAvH,EAAA0C,QAGA,SAAAC,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,GAhBAkD,EAAAwB,GAGA+2C,EAAA92C,OAAAzB,GAFAu4C,EAAA72C,OAAA1B,IAEAF,SAAAC,KAAAoB,EAAAE,OC/BAhI,MAAAkF,WAAA,qBAAA,CAAA,SAAA,SAAA,KAAA,aAAA,UAAA,UACA,oBAAA,cAAA,gBAAA,cACA,SAAAG,EAAAC,EAAAiI,EAAAlN,EAAAoN,EAAAD,EACAojE,EAAApoE,EAAAkI,EAAAhD,GAoIA,SAAA+I,EAAA0F,EAAA5a,EAAAqH,GACAvD,EAAAwrE,eAAAD,EAAAE,kBAAA30D,EAAA5a,EAAAqH,GAnIAvD,EAAAM,aAAA,CACAC,QAAA,CACA,CACAC,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,qBAEA,CACAoC,UAAA,iBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,sBAEA,CAAAoC,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,UACA,CACAF,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAC,MAAA,OACA+xD,OAAA,CACAvvC,WAAA,CACAu0B,MAAA,CACAzuC,KAAA,QACA7K,KAAA,CACA,CAAA0E,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,uCACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,0CACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,0CACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,uCACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,2CACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,+CACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,4CACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,4CACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,wCACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,qDAEAI,IAAA,OAGA2wB,UAAA,KACAD,YAAA,SAGA,CAAA5rB,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,SACA,CACAH,UAAA,YACAC,QAAAzF,EAAAM,QAAA,gBACAsF,UAAA,OACAF,SAAA,OACAjE,OAAA,qBACAkE,MAAA,SAEA,CAAAH,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,UAAAC,MAAA,SAEAsoB,oBAAA,SAAAjf,GAAA,OAAAA,EAAA0hE,WAAA,IAAA1hE,EAAAotC,OACAnyC,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,0BACA6J,UAAA,SAAA6E,GACA,QAAAA,EAAAO,WAAApH,EAAAU,SAAA,oCAAAV,EAAAU,SAAA,YAEAuB,SAAA,SAAA4E,GA6BAO,EA7BAP,EAAAO,UA8BApC,EAAAuC,KAAA,kCAAAH,EAAA,kBACA,SAAA,mHA9BA,CACArF,KAAAlK,EAAAM,QAAA,2BACA6J,UAAA,SAAA6E,GACA,OAAA7G,EAAAU,SAAA,yBACA9H,OAAAiO,EAAA2hE,WAAAC,QAAA7vE,SAAA8U,SAAA,GAAA,UACA,IAAA7G,EAAAotC,OACA,IAAAptC,EAAA+vC,cAEA30C,SAAA,SAAA4E,GAyBA,IAAA6hE,EAAAA,EAzBA7hE,EAAA6hE,gBA2BAxgE,EAAA6B,eAAA,CACA7R,MAAA,4BACA8R,QAAA,2BACAC,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WACAmmE,EAAAO,QAAAD,UAlCA,CACA3mE,KAAAlK,EAAAM,QAAA,oDACA6J,UAAA,SAAA6E,GACA,OAAA7G,EAAAU,SAAA,yBACA9H,OAAAiO,EAAA2hE,WAAAvgD,SAAArvB,SAAA8U,SAAA,EAAA,WACA,IAAA7G,EAAAotC,OAAA,IAAAptC,EAAAotC,QAEAhyC,SAAA,SAAA4E,GAiCA,IAAA6hE,EAAAA,EAjCA7hE,EAAA6hE,gBAmCAxgE,EAAA6B,eAAA,CACA7R,MAAA,mCACA8R,QAAA,kDACAC,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WACAmmE,EAAAQ,cAAAF,UA1CA,CACA3mE,KAAAlK,EAAAM,QAAA,2BACA6J,UAAA,SAAA6E,GACA,OAAA7G,EAAAU,SAAA,0BACAmG,EAAAO,WACA,IAAAP,EAAAotC,OAEAhyC,SAAA,SAAA4E,GAmFA5L,EAnFA4L,EAwFAE,EAAAlK,OAAAgsE,iBAAA,EACA9hE,EAAAlK,OAAAisE,wBAAA,CACA/mE,KAAA9G,EAAAi6C,YACAwoB,cAAAziE,EAAAytE,iBAEA3hE,EAAAlK,OAAAoK,cAAA,CACAC,UAAA,EACA62D,cAAA,EACA12D,OAAApM,EAAAovB,MACA/iB,aAAArM,EAAAutE,WAGAzhE,EAAA9I,SAAAC,KAAA,WACA6I,EAAAlK,OAAA4C,YAAA,KACAsH,EAAAlK,OAAAuH,OAAA,WACA6J,EAAApR,EAAA8W,SAAA9W,EAAA9D,QAAA,IAGAgO,EAAA1I,aAjEAxB,EAAA8W,SAAA/a,SAAA6U,QAAA,SAAA1U,SACA8D,EAAA9D,OAAAH,SAAAqrB,MAAA,SAAAlrB,SAEA8D,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,EAAApR,EAAA8W,SAAA9W,EAAA9D,QAAA,KAOAkV,EAAApR,EAAA8W,SAAA9W,EAAA9D,QAAA,GAEA8D,EAAAuhE,iBAAA,SAAAzqD,GACAA,GACA1F,EAAA0F,EAAA9W,EAAA9D,SAIA8D,EAAAwhE,eAAA,SAAAtlE,GACAA,GACAkV,EAAApR,EAAA8W,SAAA5a,IAIA8D,EAAAiB,cAAA,SAAA7C,GACA4B,EAAAksE,sBAAA9tE,GAGA4B,EAAAkB,UAAA,SAAA9C,KAOA,IAAA8L,EAAAjK,EAAA,CACAL,YAAA,wCACA4B,OANAxB,EAAA2B,YAAA,SAAAvD,GACAmtE,EAAA3pE,OAAAxD,KAMA4D,MAAAhC,EAAAiC,SA8BAjC,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,gECtMAnH,MAAAkF,WAAA,eAAA,CAAA,SAAA,SAAA,KAAA,UAAA,aAAA,WAAA,UAAA,cACA,cAAA,cAAA,cAAA,cAAA,oBAAA,sBAAA,mBACA,SAAAG,EAAAC,EAAAiI,EAAAC,EAAAnN,EAAAwT,EAAApG,EAAAnF,EACA0lE,EAAAxlE,EAAAkF,EAAA8jE,EAAAj7D,EAAA5F,EAAApJ,GAgBA,SAAA6hB,IACA7b,EAAAiD,IAAA,CAAAnL,EAAAosE,YAAAhrE,SAAApB,EAAAqsE,UAAAjrE,SAAApB,EAAA+hE,gBAAA3gE,WAAAC,KAAA,WACA,IAAA2nE,EAAA5sE,EAAA+nB,OAAAnkB,EAAAokB,aAAA9Z,gBACA03D,EAAA5lE,EAAA+nB,OAAAnkB,EAAAokB,aAAA29C,iBACA/hE,EAAAoqE,SAAA3qE,OAAA,EACAO,EAAAoqE,SAAAjsE,KAAAsf,MAAAzd,EAAAoqE,SACAhuE,EAAAkoB,OAAAtkB,EAAAosE,YAAA,SAAA95D,GACA,IAAAg6D,GAAA,EACA,EAAAtD,EAAAvpE,SACA6sE,EAAAlwE,EAAAuiE,SAAAqK,EAAA12D,EAAAuwD,SAGA,IAAA0J,GAAA,EACA,EAAAvsE,EAAAokB,aAAAooD,SAAA/sE,SACA8sE,EAAAnwE,EAAAuiE,SAAA3+D,EAAAokB,aAAAooD,SAAAl6D,EAAAi4D,aAGA,IAAAkC,GAAA,EAKA,OAJA,EAAAzK,EAAAviE,SACAgtE,EAAArwE,EAAAuiE,SAAAqD,EAAA1vD,EAAAQ,mBAGAw5D,GAAAC,GAAAE,OAwBA,SAAAh2D,IACA,IAAAzW,EAAAk6D,kBACAl6D,EAAAosE,YAAAzD,EAAA+D,kBAAA1sE,EAAAiE,YAAA,GAEAjE,EAAAosE,YAAAzD,EAAAgE,mBACA3sE,EAAA8W,SAAA9W,EAAA9D,QAAA,GAEA6nB,IAgKA,SAAA6oD,EAAAviE,EAAA5N,GACA0G,EAAAU,SAAA,wBAAAV,EAAAU,SAAA,aAEA,OAAApH,GACA0S,EAAA,uBAAAvN,SACAuN,EAAA,QAAAq2B,OAAA,4EAAAn7B,EAAA,iDAGAlC,EAAAuC,KAAA,uCAAAL,EACA,SAAA,kHAUA,SAAAwiE,EAAAxiE,EAAA5N,GACA0G,EAAAU,SAAA,+BAAAV,EAAAU,SAAA,aAEA,OAAApH,GACA0S,EAAA,uBAAAvN,SACAuN,EAAA,QAAAq2B,OAAA,oFAAAn7B,EAAA,iDAGAlC,EAAAuC,KAAA,+CAAAL,EACA,SAAA,kHA/PArK,EAAAk6D,kBAAA,EACAl6D,EAAA8W,SAAA/a,SAAA8U,SAAA,EAAA,KAAAD,QAAA,OAAA1U,SACA8D,EAAA9D,OAAAH,SAAA6U,QAAA,OAAA1U,SAEAoP,EAAA+B,cACArN,EAAAk6D,kBAAA5uD,EAAA2C,IAAA,sBAAA,GAGAjO,EAAAokB,aAAA,CAAA9Z,eAAA,GAAAkiE,SAAA,IACAxsE,EAAAosE,YAAA,GACApsE,EAAAoqE,SAAA,GAEApqE,EAAA+hE,gBAAA7wD,EAAAhK,cA8BAlH,EAAAyX,mBAAA,WACAnM,EAAA+B,aACA/B,EAAAqC,IAAA,oBAAA3N,EAAAk6D,mBAGA,MAAAl6D,EAAAiE,YACAwS,IAGAzW,EAAAM,aAAAmD,eACA,IAAAzD,EAAAk6D,kBACAl6D,EAAAM,aAAAmD,aAAAgF,aAAA,iBAAA,WAAA,GAEAzI,EAAAM,aAAAmD,aAAAgF,aAAA,iBAAA,WAAA,KAeAzI,EAAAqsE,UAAAF,EAAAjlE,cAEAlH,EAAA+sC,MAAA,CAAA,CACApxC,MAAA,EACAJ,MAAAP,EAAAM,QAAA,mBACA,CACAK,MAAA,EACAJ,MAAAP,EAAAM,QAAA,4BACA,CACAK,MAAA,EACAJ,MAAAP,EAAAM,QAAA,yBACA,CACAK,MAAA,EACAJ,MAAAP,EAAAM,QAAA,yBAGA0E,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAiE,aACAwS,IACAzW,EAAA8sE,gBAAA,QAIA9sE,EAAA6F,OAAA,eAAA,SAAAC,EAAAC,GACAge,MACA,GAEA/jB,EAAAM,aAAA,CACAwE,KAAA,WACAkgB,QAAA,YACAC,yBAAA,EACA8nD,0BAAA,EACAC,uBAAA,EACAzsE,QAAA,CACA,CACAuE,KAAA,iBACAtE,UAAA,aACAC,QAAAzF,EAAAM,QAAA,oBACAoF,SAAA,SACAC,MAAA,QACAmI,mBAAA,SAAAC,GACA,OAAAX,EAAA,WAAAA,CAAAW,EAAA9E,aAEAihB,QAAA,IAAAllB,EAAAk6D,mBAEA,CACA15D,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,qBAEA,CACAoC,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,sBAEA,CACAoC,UAAA,SACAC,QAAAzF,EAAAM,QAAA,gBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,iBAAAA,CAAAW,EAAA85D,SAEAliE,MAAA,QAEA,CAAAH,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,UACA,CAAAF,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,YAAAoF,SAAA,UACA,CAAAF,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,SACA,CACAH,UAAA,gBACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,cAAAA,CAAAW,EAAAm4D,gBAEAvgE,MAAA,QAEA,CAAAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,OAAAC,MAAA,OAAAC,UAAA,QACA,CAAAJ,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,SAAAC,MAAA,OAAAukB,SAAA,GACA,CACA1kB,UAAA,aACAC,QAAAzF,EAAAM,QAAA,oBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,WAAAA,CAAAW,EAAAwhE,aAEA5pE,MAAA,QACAukB,SAAA,GAEA,CACA1kB,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAC,MAAA,QACAukB,SAAA,GAEA,CACA1kB,UAAA,mBACAC,QAAAzF,EAAAM,QAAA,2BACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,iBAAAA,CAAAW,EAAA+J,mBAEAnS,MAAA,QACAukB,SAAA,IAGAhc,cAAA,SAAArI,GACA,IACAzC,EADA,QAAAyC,EAAAsI,YACA/K,EAAAyC,EAAAuI,UAAAC,iBAAAxI,EAAAyI,WACA2jE,6BAAA,IAAA7uE,EAAA8iE,eACArgE,EAAA2I,WAAAC,SAAA,cAEArL,EAAAzC,MAAA,IAAAyC,EAAA6uE,6BACApsE,EAAA2I,WAAAC,SAAA,iBAIA4nC,kBAAA,SAAArnC,GAAA,QAAAA,EAAAijE,6BAAA,IAAAjjE,EAAAk3D,eACAj8D,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,0BACA6J,UAAA,SAAA6E,GACA,OAAA,IAAAA,EAAAk3D,eAAA/9D,EAAAU,SAAA,wBAAAV,EAAAU,SAAA,YAEAuB,SAAA,SAAA4E,GAAA4iE,EAAA5iE,EAAAK,UAAA,SAEA,CACAnF,KAAAlK,EAAAM,QAAA,0BACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,oCAAAV,EAAAU,SAAA,YACAuB,SAAA,SAAA4E,GA6CAO,EA7CAP,EAAAO,UA8CApC,EAAAuC,KAAA,kCAAAH,EAAA,kBACA,SAAA,mHA7CA,CACArF,KAAAlK,EAAAM,QAAA,+BACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,wBAAAV,EAAAU,SAAA,YACAuB,SAAA,SAAA4E,GAgEAkjE,EAAA9rE,SAAAC,KAAA,WACA6rE,EAAA1rE,WA/DA,CACA0D,KAAAlK,EAAAM,QAAA,8CACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,+BAAAV,EAAAU,SAAA,YACAuB,SAAA,SAAA4E,GAAA6iE,EAAA7iE,EAAAK,UAAA,SAEA,CACAnF,KAAAlK,EAAAM,QAAA,+BACA6J,UAAA,SAAA6E,GACA,OAAA,IAAAA,EAAAk3D,eAAA/9D,EAAAU,SAAA,wBAAAV,EAAAU,SAAA,YAEAuB,SAAA,SAAA4E,GAAA4iE,EAAA5iE,EAAAK,UAAA,SAEA,CACAnF,KAAAlK,EAAAM,QAAA,mDACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,+BAAAV,EAAAU,SAAA,YACAuB,SAAA,SAAA4E,GAAA6iE,EAAA7iE,EAAAK,UAAA,SAEA,CACAnF,KAAA,IAAAlK,EAAAM,QAAA,mBAAA,KAAAN,EAAAM,QAAA,oCACA6J,UAAA,WAAA,OAAAjD,EAAAE,SAAA+qE,oBAAAhqE,EAAAU,SAAA,YACAuB,SAAA,SAAA4E,GAqCAK,EArCAL,EAAAK,UAsCAs+D,EAAAyE,yBAAA/iE,OAUAnC,EAAAiD,IAAA,CAAAlI,EAAAc,oBACA1C,KAAA,SAAAjD,GACAA,EAAA,KACA4B,EAAAiE,WAAA7F,EAAA,GAAA0E,IAGA9C,EAAAiE,YAEAwS,MAKAzW,EAAA6E,iBAAA,SAAAZ,GACAA,IACAwS,IACAzW,EAAA8sE,gBAAA,OAIA9sE,EAAAqtE,0BAAA,CACApkE,KAAA,WAAA7K,KAAA,CACA,CAAA,YAAA,SACA,CAAApD,EAAAM,QAAA,sCAAA,GACA,CAAAN,EAAAM,QAAA,6BAAA,GACA,CAAAN,EAAAM,QAAA,oCAAA,GACA,CAAAN,EAAAM,QAAA,qCAAA,GACA,CAAAN,EAAAM,QAAA,+BAAA,IACAwc,QAAA,CACA0nD,oBAAA,EACAE,UAAA,CAAA7f,IAAA,MAAAO,KAAA,MAAAz/C,MAAA,MAAA6hB,OAAA,OAEAm9C,OAAA,CAAAjtB,SAAA,WAIA1yC,EAAA2E,gBAAA,SAAA69D,GACAxiE,EAAAigE,QAAA0I,EAAA+B,iBAAAlI,GACAh0D,EAAA,WACAxO,EAAAqtE,0BAAAjvE,KAAA,GAAA,GAAA4B,EAAAigE,QAAAqN,aAAA,GAAA3xE,MACAqE,EAAAqtE,0BAAAjvE,KAAA,GAAA,GAAA4B,EAAAigE,QAAAqN,aAAA,GAAA3xE,MACAqE,EAAAqtE,0BAAAjvE,KAAA,GAAA,GAAA4B,EAAAigE,QAAAqN,aAAA,GAAA3xE,MACAqE,EAAAqtE,0BAAAjvE,KAAA,GAAA,GAAA4B,EAAAigE,QAAAqN,aAAA,GAAA3xE,MACAqE,EAAAqtE,0BAAAjvE,KAAA,GAAA,GAAA4B,EAAAigE,QAAAqN,aAAA,GAAA3xE,SAIAqE,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,8CACA,CACAzG,MAAA,qBACAyG,SAAA,uDAGA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA,IAEAwnE,EAFAznE,IAAAC,GAAA,IAAAD,IAEAynE,EAAAvtE,EAAAqtE,0BAAAjvE,KAAA,GAAA,GACA4B,EAAAqtE,0BAAAjvE,KAAA,GAAA,GAAA,EACAoQ,EAAA,WACAxO,EAAAqtE,0BAAAjvE,KAAA,GAAA,GAAAmvE,OAOAvtE,EAAAyB,SAAA,WACAN,EAAAnB,OAAAoK,cAAA,CACAC,UAAA,GAGAlJ,EAAAC,SAAAC,KAAA,WACArB,EAAA4C,YAAA,KACAzB,EAAAnB,OAAAuH,OAAA,SAAAimE,GACA/2D,IACAvO,EAAAiD,IAAA,CAAAnL,EAAAosE,YAAAhrE,SAAApB,EAAAqsE,UAAAjrE,SAAApB,EAAA+hE,gBAAA3gE,WAAAC,KAAA,WACAmsE,GAAAxtE,EAAAM,aAAAmD,cACAzD,EAAAM,aAAAmD,aAAAa,WAAA,CAAAkpE,EAAAnjE,YAAA,MAIAlJ,EAAAK,UAIAxB,EAAAiB,cAAA,SAAA7C,GACA4B,EAAA8sE,gBAAA1uE,GAGA4B,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAnB,OAAAoK,cAAA,CACAC,UAAAjM,EAAAiM,UACAC,eAAAlM,EAAAykE,OACAt4D,UAAAnM,EAAAmM,UACAxC,UAAA3J,EAAA2J,UACA9D,WAAA7F,EAAA6F,WAIAI,SAAA,IAAAjG,EAAAykE,OAAAzkE,EAAA2rE,gBAAA,KACA52D,WAAA,KACA4F,yBAAA,IAAA3a,EAAAykE,OAAAzkE,EAAA2rE,gBAAA,KACA7I,cAAA9iE,EAAA8iE,cACA12D,OAAApM,EAAAzC,MACA8O,aAAArM,EAAAqvE,YACAruD,MAAAhhB,EAAAghB,MACAsuD,cAAAtvE,EAAAsvE,eAGAvsE,EAAAC,SAAAC,KAAA,WACArB,EAAA4C,YAAA,KACAzB,EAAAnB,OAAAuH,OAAA,SAAAimE,GACA/2D,IACAvO,EAAAiD,IAAA,CAAAnL,EAAAosE,YAAAhrE,SAAApB,EAAAqsE,UAAAjrE,SAAApB,EAAA+hE,gBAAA3gE,WAAAC,KAAA,WACAmsE,GAAAxtE,EAAAM,aAAAmD,cACAzD,EAAAM,aAAAmD,aAAAa,WAAA,CAAAkpE,EAAAnjE,YAAA,MAIAlJ,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACAuqE,EAAA/mE,OAAAxD,EAAA,WACA2lB,OAQA,IAAA5iB,EAAAlB,EAAA,CACAL,YAAA,wCACA4B,OANAxB,EAAA2tE,oBAAA,SAAAvjE,MAOApI,MAAAhC,EAAAiC,SAGAirE,EAAAjtE,EAAA,CACAL,YAAA,4CACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YCvaAtH,MAAAkF,WAAA,qBAAA,CAAA,SAAA,UAAA,cAAA,gBAAA,cAAA,cAAA,mBACA,SAAAG,EAAAmI,EAAAwgE,EAAAt9D,EAAAlI,EAAAgpE,EAAAjqE,GAqCA,SAAA0rE,EAAAC,GACA,IAAAvsE,EAAAtB,EAAAwtE,QAYA,SAAA/qE,EAAArE,GACA,IAAAkD,EAAA4/D,eAAA/9D,EAAAU,SAAA,wBAAAV,EAAAU,SAAA,WACAwH,EAAA6B,eAAA,CACA7R,MAAA,0BACA8R,QAAA,yCACAC,QAAA,CAAA,CACAlI,KAAA,aACAE,SAAA,WAAA0oE,EAAA1vE,KACA,CACA8G,KAAA,gBACAE,SAAA,WA2BA,IAAAiF,EA3BAyjE,EAAA1vE,GA2BAiM,EA3BAjM,EAAAiM,UA4BAlC,EAAAuC,KAAA,uCAAAL,EACA,SAAA,sHA1BA,IAAA/I,EAAA4/D,eAAA/9D,EAAAU,SAAA,+BAAAV,EAAAU,SAAA,YACA3B,EAAAE,SAAA2rE,4CACA1iE,EAAA6B,eAAA,CACA7R,MAAA,0BACA8R,QAAA,6CACAC,QAAA,CAAA,CACAlI,KAAA,aACAE,SAAA,WAAA0oE,EAAA1vE,KACA,CACA8G,KAAA,gBACAE,SAAA,WAmBA,IAAAiF,EAnBAyjE,EAAA1vE,GAmBAiM,EAnBAjM,EAAAiM,UAoBAlC,EAAAuC,KAAA,+CAAAL,EACA,SAAA,sHAjBAyjE,EAAA1vE,GAIA,SAAAuE,EAAAvE,GACA4B,EAAA4C,YAAAxE,EACA4B,EAAA6C,UAAA,EA3CA7C,EAAA8gE,iBACA6H,EAAAqF,qBAAA1sE,EAAAusE,EAAAprE,EAAAE,EACA3C,EAAA+gE,sBAAAF,cAAA7gE,EAAA+gE,sBAAAjuD,kBAAA,GACA9S,EAAAgsE,gBACArD,EAAAqF,qBAAA1sE,EAAAusE,EAAAprE,EAAAE,EACA3C,EAAAisE,wBAAApL,cAAA,GAAA,GAEA8H,EAAAqF,qBAAA1sE,EAAAusE,EAAAprE,EAAAE,GAkDA,SAAAmrE,EAAAN,GACAxtE,EAAAiuE,gBAAAjuE,EAAAwtE,SACAxtE,EAAA0C,QACA1C,EAAA6C,UAAA,EACA7C,EAAAuH,QACAvH,EAAAuH,OAAAimE,GArGAxtE,EAAAwtE,QAAA7E,EAAAuF,2BAAAluE,EAAAoK,cAAApK,EAAA8gE,iBAAA9gE,EAAAmK,gBAAAnK,EAAAgsE,iBAEAhsE,EAAAiuE,gBAAA,SAAAT,GACA7E,EAAAwF,sBAAAX,EAAAxtE,EAAA8gE,iBAAA9gE,EAAAmK,gBAAAnK,EAAAgsE,kBAGAhsE,EAAAwsE,SAAAL,EAAAiC,qBAEApuE,EAAAquE,gBAAA,SAAA7B,GACAL,EAAAmC,mBAAA9B,IAGAxsE,EAAA6C,UAAA,EAEA7C,EAAAuuE,eAAA,SAAAf,GAEAxtE,EAAA6C,WAKA7C,EAAA6C,UAAA,EAEA2qE,EAAAnjE,UASAujE,GAAA,GARAviE,EAAAsB,8BAAA,CACAC,YAAA,CAAA,+CACAC,yBAAA,EACAzH,SAAA,SAAA0H,GACA8gE,EAAA9gE,EAAArF,4BA+EAzH,EAAAwuE,eAAA,SAAAhB,GACA,QAAAxtE,EAAAwsE,SAAAiC,aAAAzuE,EAAAwsE,SAAAjC,aAIA5B,EAAA+F,wBAAAlB,OCpHA7yE,MAAAkF,WAAA,+BAAA,CAAA,SAAA,UAAA,cACA,SAAAG,EAAAmI,EAAAgkE,GAEAnsE,EAAA2uE,gBAAAxC,EAAAiC,qBAEApuE,EAAAsB,MAAA,CACAqP,UAAA5U,SAAAG,SACA8hC,QAAAjiC,SAAAG,SACAglE,cAAA,EACAqJ,WAAA,MAGAvqE,EAAA2uE,gBAAAvtE,SAAAC,KAAA,SAAA9B,GACAS,EAAAsB,MAAAipE,WAAAhrE,EAAAgrE,aAIAvqE,EAAAwC,aAAA,WAEA,IAMAsU,EACA5a,EAIA0yE,EAXA5uE,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEAiU,EAAA/a,OAAAiE,EAAAsB,MAAAqP,WAAAC,QAAA,OAAA1U,SACAA,EAAAH,OAAAiE,EAAAsB,MAAA08B,SAAA5W,MAAA,OAAAlrB,SAEA8D,EAAA0C,QAEAksE,EAAA5uE,EAAAsB,MAAAipE,WAAA,eAAAvqE,EAAAsB,MAAAipE,WAAA,GAEApiE,EAAAuC,KAAA,iCACAoM,EAAAuQ,SACA,YAAAnrB,EAAAmrB,SACAunD,EACA,kBAAA5uE,EAAAsB,MAAA4/D,cACA,SAAA,sHCnCAvmE,MAAAkF,WAAA,mBAAA,CAAA,SAAA,KAAA,UAAA,aAAA,UAAA,cACA,kBAAA,oBAAA,cAAA,cAAA,gBAAA,kBACA,SAAAG,EAAAkI,EAAAC,EAAAnN,EAAAoN,EAAAnF,EACA4rE,EAAA39D,EAAA/N,EAAAkF,EAAAgD,EAAAwwB,GASA,SAAA9X,IACA7b,EAAAiD,IAAA,CAAAnL,EAAA8uE,gBAAA1tE,SAAApB,EAAA+hE,gBAAA3gE,WAAAC,KAAA,WACA,IAAA2gE,EAAA5lE,EAAA+nB,OAAAnkB,EAAAokB,aAAA29C,iBACA/hE,EAAA+uE,aAAAtvE,OAAA,EACAO,EAAA+uE,aAAA5wE,KAAAsf,MAAAzd,EAAA+uE,aACA3yE,EAAAkoB,OAAAtkB,EAAA8uE,gBAAA,SAAAx8D,GAEA,QAAA,EAAA0vD,EAAAviE,SACArD,EAAAuiE,SAAAqD,EAAA1vD,EAAAQ,uBA0GA,SAAAk8D,EAAAC,EAAAxyE,GAEA,OAAAA,GACA0S,EAAA,uBAAAvN,SACAuN,EAAA,QAAAq2B,OAAA,gFAAAypC,EAAA,WAAAxyE,EAAA,sCAIA0L,EAAAuC,KAAA,2CAAAukE,EACA,SAAA,iHAuJA,SAAAtM,EAAAvkE,GACA+Q,EAAA,uBAAAvN,SACAuN,EAAA,QAAAq2B,OAAA,4EAAApnC,EAAAk4C,SAAA,qCA3RAt2C,EAAAokB,aAAA,CAAA29C,gBAAA,IACA/hE,EAAA8uE,gBAAA,GACA9uE,EAAA+uE,aAAA,GACA/uE,EAAAwiE,aAAA,GAEAxiE,EAAA+hE,gBAAA7wD,EAAAhK,cAmBAlH,EAAA6F,OAAA,eAAA,SAAAC,EAAAC,GACAge,MACA,GAEA/jB,EAAAM,aAAA,CACAwE,KAAA,eACAvE,QAAA,CACA,CAAAC,UAAA,gBAAAC,QAAAzF,EAAAM,QAAA,2BAAAoF,SAAA,SAAAC,MAAA,QAAAC,UAAA,OACA,CAAAJ,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,SAAAC,MAAA,SACA,CACAH,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,qBAEA,CACAoC,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,sBAEA,CAAAoC,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,UACA,CAAAF,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,wBAAAoF,SAAA,OAAAC,MAAA,QACA,CAAAH,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,SACA,CAAAH,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,2BAAAoF,SAAA,SAAAwkB,SAAA,IAUAjgB,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,+BACA6J,UAAA,SAAA6E,GACA,OAAA7G,EAAAU,SAAA,sBAAAV,EAAAU,SAAA,YAEAuB,SAAA,SAAA4E,GAAAglE,EAAAhlE,EAAAilE,cAAA,SAEA,CACA/pE,KAAAlK,EAAAM,QAAA,mCACA6J,UAAA,SAAA6E,GACA,OAAA7G,EAAAU,SAAA,sBAAAV,EAAAU,SAAA,YAEAuB,SAAA,SAAA4E,EAAAg5D,GA0BA,IACAV,EACA,GADAA,EAAAlmE,EAAAmmE,OAAAviE,EAAAwiE,aAAA,qBACA/iE,OACA4L,EAAA6B,eAAA,CACA7R,MAAA,4CACA8R,QAAAnS,EAAAM,QAAA,+CAAAs0B,EAAA0yC,EAAA7iE,QACA2N,QAAA,CAAA,CACAlI,KAAA,kBAMAgqE,EAAAhM,mBAAAC,KAAAC,UAAAhnE,EAAA+a,IAAAnX,EAAAwiE,aAAA,mBAEAr6D,EAAAuC,KAAA,gDAAAwkE,EACA,SAAA,oHAxCA,CACAhqE,KAAAlK,EAAAM,QAAA,0BACA6J,UAAA,SAAA6E,GACA,OAAA7G,EAAAU,SAAA,oCAAAV,EAAAU,SAAA,YAEAuB,SAAA,SAAA4E,GA2CAO,EA3CAP,EAAAO,UA4CApC,EAAAuC,KAAA,kCAAAH,EAAA,kBACA,SAAA,mHA5CA,CACArF,KAAAlK,EAAAM,QAAA,6BACA8J,SAAA,SAAA4E,EAAAg5D,GA0FA,IAAAh5D,EAAAA,EA1FAA,EA6FA,GADAs4D,EAAAlmE,EAAAmmE,OAAAviE,EAAAwiE,aAAA,qBACA/iE,OACA4L,EAAA6B,eAAA,CACA7R,MAAA,4CACA8R,QAAAnS,EAAAM,QAAA,mDAAAs0B,EAAA0yC,EAAA7iE,QACA2N,QAAA,CAAA,CACAlI,KAAA,iBAgBAmG,EAAA6B,eAAA,CACA7R,MAAA,8CACA8R,QAAAnS,EAAAM,QAAA,mDAAAs0B,EAAA5vB,EAAAwiE,aAAA/iE,QACA2N,QAAA,CAAA,CACAlI,KAAA,kBACA,CACAA,KAAA,cACA,CACAA,KAAA,cACAE,SAnBA,WACAypE,EAAAM,8BAAAnlE,EAAA8I,iBAAA1W,EAAA+a,IAAAnX,EAAAwiE,aAAA,iBACAG,EACA,SAAAhgE,GACAk5B,EAAAiB,YACA9hC,EAAAM,QAAA,0BACAugC,EAAAkB,eAAAp6B,aA7GA,CACAuC,KAAAlK,EAAAM,QAAA,2BACA8J,SAAA,SAAA4E,EAAAg5D,GA8HA,IAAAh5D,EAAAA,EA9HAA,EAiIA,GADAs4D,EAAAlmE,EAAAmmE,OAAAviE,EAAAwiE,aAAA,qBACA/iE,OACA4L,EAAA6B,eAAA,CACA7R,MAAA,4CACA8R,QAAAnS,EAAAM,QAAA,mDAAAs0B,EAAA0yC,EAAA7iE,QACA2N,QAAA,CAAA,CACAlI,KAAA,iBAgBAmG,EAAA6B,eAAA,CACA7R,MAAA,8CACA8R,QAAAnS,EAAAM,QAAA,mDAAAs0B,EAAA5vB,EAAAwiE,aAAA/iE,QACA2N,QAAA,CAAA,CACAlI,KAAA,kBACA,CACAA,KAAA,cACA,CACAA,KAAA,cACAE,SAnBA,WACAypE,EAAAO,4BAAAplE,EAAA8I,iBAAA1W,EAAA+a,IAAAnX,EAAAwiE,aAAA,iBACAG,EACA,SAAAhgE,GACAk5B,EAAAiB,YACA9hC,EAAAM,QAAA,0BACAugC,EAAAkB,eAAAp6B,aAjJA,CACAuC,KAAAlK,EAAAM,QAAA,uBACA8J,SAAA,SAAA4E,EAAAg5D,GAiKA,IAAAh5D,EAAAA,EAjKAA,EAoKA,GADAs4D,EAAAlmE,EAAAmmE,OAAAviE,EAAAwiE,aAAA,qBACA/iE,OACA4L,EAAA6B,eAAA,CACA7R,MAAA,4CACA8R,QAAAnS,EAAAM,QAAA,mDAAAs0B,EAAA0yC,EAAA7iE,QACA2N,QAAA,CAAA,CACAlI,KAAA,iBAgBAmG,EAAA6B,eAAA,CACA7R,MAAA,8CACA8R,QAAAnS,EAAAM,QAAA,mDAAAs0B,EAAA5vB,EAAAwiE,aAAA/iE,QACA2N,QAAA,CAAA,CACAlI,KAAA,kBACA,CACAA,KAAA,cACA,CACAA,KAAA,cACAE,SAnBA,WACAypE,EAAAQ,wBAAArlE,EAAA8I,iBAAA1W,EAAA+a,IAAAnX,EAAAwiE,aAAA,iBACAG,EACA,SAAAhgE,GACAk5B,EAAAiB,YACA9hC,EAAAM,QAAA,0BACAugC,EAAAkB,eAAAp6B,aApLA,CACAuC,KAAAlK,EAAAM,QAAA,oCACA6J,UAAA,SAAA6E,GACA,OAAA7G,EAAAU,SAAA,sBAAAV,EAAAU,SAAA,YAEAuB,SAAA,SAAA4E,GAAAglE,EAAAhlE,EAAAilE,cAAA,WAwBAjvE,EAAA2E,gBAAA,SAAA69D,GACAxiE,EAAAwiE,aAAAA,GAqBAxiE,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAiE,aACAjE,EAAA8uE,gBAAAD,EAAAS,mBAAAtvE,EAAAiE,YACAjE,EAAAuvE,oBAAA,KACAxrD,OAIA7b,EAAAiD,IAAA,CAAAlI,EAAAc,oBACA1C,KAAA,SAAAjD,GACAA,EAAA,KACA4B,EAAAiE,WAAA7F,EAAA,GAAA0E,IAIA9C,EAAA8uE,gBAAAD,EAAAS,mBAAAtvE,EAAAiE,YACA8f,MAGA/jB,EAAA6E,iBAAA,SAAAZ,GACAA,IAEAjE,EAAA8uE,gBAAAD,EAAAS,mBAAArrE,GACAjE,EAAAuvE,oBAAA,KACAxrD,MAIA/jB,EAAAiB,cAAA,SAAA7C,GACA4B,EAAAuvE,oBAAAnxE,MCxKAzD,MAAA4T,UAAA,wBAAA,CAAA,WAAA,aAAA,UACA,SAAAC,EAAAxT,EAAAmN,GACA,SAAAsG,EAAArQ,GACA,GAAAA,EACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,SAAAwJ,EAAAtQ,GACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEAqkC,QAAAC,IAAAh8B,EAAAqgC,SAAAgnC,QAEAhhE,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,4BACA,CAAApC,GAAA,EAAAoC,KAAA,qCACA,CAAApC,GAAA,EAAAoC,KAAA,gDACA,CAAApC,GAAA,EAAAoC,KAAA,+BAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QCvEAzU,MAAA4T,UAAA,2BAAA,CAAA,WACA,SAAAC,GACA,SAAAC,EAAArQ,GACA,GAAAA,EACA,OAAAA,EAAA8G,KAGA,SAAAwJ,EAAAtQ,GACA,OAAAA,EAAA8G,KAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CAEA,CAAA0E,GAAA,EAAAoC,KAAA,WACA,CAAApC,GAAA,EAAAoC,KAAA,gBAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QCtEAzU,MAAA4T,UAAA,cAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAA0e,GACA,GAAAA,EACA,OAAAnyB,EAAAM,QAAA6xB,EAAAjoB,MAGA,SAAAwJ,EAAAye,GACA,OAAAnyB,EAAAM,QAAA6xB,EAAAjoB,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,WACA5M,MAAA,CACAV,MAAA,WACAmuE,QAAA,KAEA3gE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA,IAAAzB,EAAA,CAAA,CAAA0E,GAAA,KAAAoC,KAAA,QACA,CAAApC,GAAA,KAAAoC,KAAA,QACA,CAAApC,GAAA,KAAAoC,KAAA,QACA,CAAApC,GAAA,KAAAoC,KAAA,QACA,CAAApC,GAAA,KAAAoC,KAAA,QACA,CAAApC,GAAA,KAAAoC,KAAA,QACA,CAAApC,GAAA,KAAAoC,KAAA,QACA,CAAApC,GAAA,KAAAoC,KAAA,QACA,CAAApC,GAAA,KAAAoC,KAAA,QACA,CAAApC,GAAA,KAAAoC,KAAA,QACA,CAAApC,GAAA,KAAAoC,KAAA,QACA,CAAApC,GAAA,KAAAoC,KAAA,SAEAlD,EAAAytE,UACArxE,EAAAhC,EAAAkoB,OAAAlmB,EAAA,SAAA4Z,GAAA,OAAAA,EAAAlV,IAAAd,EAAAytE,WAGAjhE,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAAA,IAGAyB,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,SAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QCrFAzU,MAAA2pB,OAAA,eAAA,CAAA,aAAA,SAAAtpB,GACA,OAAA,SAAAS,GAEA,OAAAA,MAAAA,EACA,GAGAA,EACAT,EAAAM,QAAA,qBACAN,EAAAM,QAAA,0BCTAX,MAAA8gC,QAAA,UAAA,CAAA,YAAA,gBAAA,KACA,SAAAC,EAAAE,EAAA1zB,GAEA,IAAAwnE,EAAAh0C,EAAA,mBAAA,GAAA,CACA4H,MAAA,CAAA7G,OAAA,MAAAhN,SAAA,GACAmxC,yBAAA,CAAAnkC,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,sCACAglC,iCAAA,CAAAjlC,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,8CACA4kC,eAAA,CAAA7kC,OAAA,OAAAhN,SAAA,EAAAiN,IAAA,4BACA2kC,cAAA,CAAA5kC,OAAA,OAAAhN,SAAA,EAAAiN,IAAA,2BACA0kC,kBAAA,CAAA3kC,OAAA,OAAAhN,SAAA,EAAAiN,IAAA,+BACAmlC,mBAAA,CAAAplC,OAAA,OAAAhN,SAAA,EAAAiN,IAAA,kCA6EA,MAAA,CACAkkC,yBA1EA,SAAA9tD,EAAAgE,EAAA5a,GACA,OAAA0/B,EAAAkC,UAAA,2BAAA4xC,EAAA,CACA58D,iBAAAA,EACAgE,SAAAA,EACA5a,OAAAA,KAuEAwlE,iCAnEA,SAAA5uD,EAAAgE,EAAA5a,GACA,OAAA0/B,EAAAkC,UAAA,mCAAA4xC,EAAA,CACA58D,iBAAAA,EACAgE,SAAAA,EACA5a,OAAAA,KAgEAolE,eA5DA,SAAAxuD,GACA,OAAA5K,EAAA,SAAAoJ,EAAAC,GACAqqB,EAAAuE,qBACA,iBACAuvC,EAAA,CACA58D,iBAAAA,GAEA,KACAxB,EACAC,MAoDA8vD,cA/CA,SAAAvuD,EAAA+tD,EAAA8O,GACA,OAAAznE,EAAA,SAAAoJ,EAAAC,GACAqqB,EAAA+D,WACA,gBACA+vC,EAAA,CACA58D,iBAAAA,EACA+tD,cAAAA,EACA8O,cAAAA,GAEAr+D,EACAC,MAsCA6vD,kBAjCA,SAAAtuD,EAAA+tD,GACA,OAAA34D,EAAA,SAAAoJ,EAAAC,GACAqqB,EAAA+D,WACA,oBACA+vC,EAAA,CACA58D,iBAAAA,EACA+tD,cAAAA,GAEAvvD,EACAC,MAyBAswD,mBApBA,SAAA/uD,EAAA88D,GACA,OAAA1nE,EAAA,SAAAoJ,EAAAC,GACAqqB,EAAA+D,WACA,qBACA+vC,EAAA,CACA58D,iBAAAA,EACA88D,6BAAAA,GAEAt+D,EACAC,UClFA5W,MAAA8gC,QAAA,mBAAA,CAAA,YAAA,gBACA,SAAAC,EAAAE,GAEA,IAAAi0C,EAAAn0C,EAAA,kCAAA,GAAA,CACA4H,MAAA,CAAA7G,OAAA,MAAAhN,SAAA,GACAqgD,UAAA,CAAArzC,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,wCAcA,MAAA,CACAx1B,YAZA,SAAAjD,GACA,OAAA23B,EAAA3tB,IAAA4hE,EAAA,CAAA5rE,WAAAA,KAYAskE,eATA,SAAAtkE,EAAA8D,GACA,OAAA6zB,EAAAkC,UAAA,YAAA+xC,EAAA,CACA5rE,WAAAA,EACA8D,UAAAA,SCfApN,MAAA8gC,QAAA,kBAAA,CAAA,YAAA,gBACA,SAAAC,EAAAE,GAEA,IAAAm0C,EAAAr0C,EAAA,uCAAA,GAAA,CACA4H,MAAA,CAAA7G,OAAA,MAAAhN,SAAA,GACA0/C,8BAAA,CAAA1yC,OAAA,OAAAC,IAAA,mDACA0yC,4BAAA,CAAA3yC,OAAA,OAAAC,IAAA,iDACA2yC,wBAAA,CAAA5yC,OAAA,OAAAC,IAAA,+CAkCA,MAAA,CACA4yC,mBAhCA,SAAArrE,GACA,OAAA23B,EAAA3tB,IAAA8hE,EAAA,CAAA9rE,WAAAA,KAgCAkrE,8BA7BA,SAAAr8D,EAAAk9D,EAAAvtE,EAAAE,GACA,OAAAi5B,EAAA+D,WAAA,gCAAAowC,EAAA,CACAj9D,iBAAAA,EACAk9D,eAAAA,GAEAvtE,EACAE,IAwBAysE,4BArBA,SAAAt8D,EAAAk9D,EAAAvtE,EAAAE,GACA,OAAAi5B,EAAA+D,WAAA,8BAAAowC,EAAA,CACAj9D,iBAAAA,EACAk9D,eAAAA,GAEAvtE,EACAE,IAgBA0sE,wBAbA,SAAAv8D,EAAAk9D,EAAAvtE,EAAAE,GACA,OAAAi5B,EAAA+D,WAAA,0BAAAowC,EAAA,CACAj9D,iBAAAA,EACAk9D,eAAAA,GAEAvtE,EACAE,QCpCAhI,MAAAkF,WAAA,kCAAA,CAAA,SAAA,eACA,SAAAG,EAAAiwE,GAEAjwE,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAA8W,SAAA/a,SAAA6U,QAAA,SAAA1U,SACA8D,EAAA9D,OAAAH,SAAAqrB,MAAA,SAAAlrB,SAEA8D,EAAAmrB,mBAAA,WACAnrB,EAAAkwE,kBAAAD,EAAAE,0BAAAnwE,EAAA8W,SAAA9W,EAAA9D,SAGA8D,EAAAkwE,kBAAAD,EAAAE,0BAAAnwE,EAAA8W,SAAA9W,EAAA9D,QAEA8D,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,cAAAC,WAAA,CAAA,QACAK,iBAAA,EACAJ,WAAA,CACA,CAAAC,MAAA,uBAAAE,YAAA,kBAAA2E,KAAA,UACA,CAAA7E,MAAA,aAAAE,YAAA,kBAAA2E,KAAA,SAAAta,MAAA,SACA,CAAAyV,MAAA,mBAAAE,YAAA,mBAAA2E,KAAA,SAAAta,MAAA,SACA,CAAAyV,MAAA,cAAAE,YAAA,wBAAA3V,MAAA,QAAAua,MAAA,cCvBAvgB,MAAAkF,WAAA,iBAAA,CAAA,SAAA,eAAA,mBACA,SAAAG,EAAAiwE,EAAA/tE,GAEAlC,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAowE,gCAAAluE,EAAAE,SAAAguE,gCAEApwE,EAAAowE,gCACApwE,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,iBAAAC,WAAA,CAAA,QACAK,iBAAA,EACAJ,WAAA,CACA,CAAAC,MAAA,gBAAAE,YAAA,oBAAA2E,KAAA,UACA,CAAA7E,MAAA,eAAAE,YAAA,yBAAA3V,MAAA,QACA,CAAAyV,MAAA,uBAAAE,YAAA,kCAAA3V,MAAA,QACA,CAAAyV,MAAA,6BAAAE,YAAA,yCAAA3V,MAAA,UAIAX,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,iBAAAC,WAAA,CAAA,QACAK,iBAAA,EACAJ,WAAA,CACA,CAAAC,MAAA,gBAAAE,YAAA,oBAAA2E,KAAA,UACA,CAAA7E,MAAA,eAAAE,YAAA,yBAAA3V,MAAA,QACA,CAAAyV,MAAA,uBAAAE,YAAA,kCAAA3V,MAAA,UAKAX,EAAAqwE,WAAAJ,EAAA/oE,aAAA,GAEAlH,EAAA6B,KAAA,CACA,CACAxG,MAAA,2BACAyG,SAAA,6CAGA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAAiB,cAAA,SAAA7C,GACA4B,EAAAswE,kBAAAlyE,EACA4B,EAAA2D,WAAA,4BAAA3D,EAAAswE,oBAGAtwE,EAAA/E,IAAA,2BAAA,SAAA4F,EAAAo7B,GACAg0C,EAAA/oE,aAAA,GACA9F,SAAAC,KAAA,SAAAjD,GACA,IAAAmyE,EAAAn0E,EAAAsK,KAAAtI,EAAA,CAAAoyE,qBAAAxwE,EAAAswE,kBAAAE,uBACAD,EACA31E,QAAAkC,OAAAkD,EAAAswE,kBAAAC,GAEAvwE,EAAAqwE,WAAAjyE,SCxDAzD,MAAAkF,WAAA,0BAAA,CAAA,SAAA,SAAA,eAAA,mBACA,SAAAG,EAAAC,EAAAgwE,EAAA/tE,GAIA,IAAAouE,EAFAtwE,EAAAwtC,UAAA,GAIAxtC,EAAAowE,gCAAAluE,EAAAE,SAAAguE,gCAEApwE,EAAA/E,IAAA,4BAAA,SAAA4F,EAAA0vE,GACAA,GACAD,EAAAC,EACAvwE,EAAAwtC,UAAAyiC,EAAAQ,qBAAAH,EAAAE,uBAEAxwE,EAAAwtC,UAAA,KAIAxtC,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,YAAAC,WAAA,CAAA,QACAC,WAAA,CACA,CAAAC,MAAA,WAAAE,YAAA,iBAAA2E,KAAA,UACA,CAAA7E,MAAA,kBAAAE,YAAA,iBAAAD,WAAA,YAAA1V,MAAA,UAiBA,IAAAQ,EAAAlB,EAAA,CACAL,YAAA,iDACA4B,OAdAxB,EAAAkB,UAAA,SAAA+6B,GACA96B,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAA06B,GACA96B,EAAAnB,OAAAswE,kBAAAA,EACAnvE,EAAAnB,OAAA0wE,cAAA,SAAA1Q,GACA/jC,EAAA00C,YAAA3Q,EAAA2Q,YACA3wE,EAAA2H,MAAA,2BAAAs0B,IAEA96B,EAAAK,WAOAQ,MAAAhC,EAAAiC,YC9CAtH,MAAAkF,WAAA,gCAAA,CAAA,SAAA,SAAA,eAAA,aACA,SAAAG,EAAAC,EAAAgwE,EAAAlxE,GACAiB,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,wBAAAC,WAAA,CAAA,QACAC,WAAA,CACA,CAAAC,MAAA,uBAAAE,YAAA,kBAAA2E,KAAA,UACA,CAAA7E,MAAA,YAAAE,YAAA,qBAAAD,WAAA,iBAAA1V,MAAA,SACA,CAAAyV,MAAA,UAAAE,YAAA,mBAAAD,WAAA,iBAAA1V,MAAA,WAIAX,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAA4wE,SAAA5wE,EAAAsB,MAAAsvE,SACAzvE,EAAAnB,OAAAqC,UAAA,CAAAwQ,OAAA,GACA1R,EAAAK,UAIAxB,EAAAkB,UAAA,SAAA2vE,GACA1vE,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAA4wE,SAAA5wE,EAAAsB,MAAAsvE,SACAzvE,EAAAnB,OAAAqC,UAAAwuE,EACA1vE,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAkvE,GACAz0E,EAAA46D,KAAAh3D,EAAAsB,MAAAsvE,SAAAC,IAwBA,IAAA1vE,EAAAlB,EAAA,CACAL,YAAA,yDACA4B,OAvBAxB,EAAAwC,aAAA,SAAApE,GAEA4B,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEAotE,EAAAa,uBAAA9wE,EAAAswE,kBAAAE,qBAAApyE,EAEA,SAAA4hE,GACAhgE,EAAA0C,QACA1C,EAAA0wE,cAAA1Q,IAGA,SAAAh0D,GACAhM,EAAA4C,YAAAoJ,EACAhM,EAAA6C,UAAA,OAOAb,MAAAhC,EAAAiC,YCjEAtH,MAAAkF,WAAA,uCAAA,CAAA,SAAA,aAAA,cACA,SAAAG,EAAAjB,EAAAmB,GACAF,EAAAsB,MAAA1G,QAAA2G,KAAAvB,EAAAqC,WACArC,EAAAgyD,yBAAAjzD,EAAA8uC,SAEA7tC,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAAwC,aAAA,SAAApE,GAEA4B,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEAzE,EAAAyU,OACAjY,QAAAkC,OAAAkD,EAAAqC,UAAAjE,UACA4B,EAAAqC,UAAAwQ,MACA7S,EAAA4wE,SAAAzyE,KAAA6B,EAAAqC,YAEAzH,QAAAkC,OAAAkD,EAAAqC,UAAAjE,GAGA8B,EAAAqyD,2BAAAvyD,EAAAgyD,yBAAAhyD,EAAAqC,UAAA0vD,oBACA1wD,KAAA,SAAA0gD,GACA/hD,EAAAqC,UAAA0uE,qBAAAhvB,EAAAj9C,KACA9E,EAAA0C,SACA,SAAAC,GACA3C,EAAA4C,YAAAD,EACA3C,EAAA6C,UAAA,SC/BA,IAAAmuE,0BAAAA,2BAAA,IAEA,SAAA/gD,GAEAA,EAAAghD,kBAAA,SAAAN,GACA9xE,KAAA8xE,YAAAA,EAEA9xE,KAAAsmB,SAAAwrD,EAAAxrD,UAGAqJ,OAAAC,eAAAwB,EAAAghD,kBAAAtyE,UAAA,kBAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,OAAApP,KAAA8xE,YAAAN,WAAA,GAAA5pD,QAEA9Y,IAAA,SAAAhS,GACAkD,KAAA8xE,YAAAN,WAAA,GAAA5pD,OAAA9qB,KAIA6yB,OAAAC,eAAAwB,EAAAghD,kBAAAtyE,UAAA,WAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,OAAApP,KAAA8xE,YAAAN,WAAA,GAAAO,UAEAjjE,IAAA,SAAAhS,GACAkD,KAAA8xE,YAAAN,WAAA,GAAAO,SAAAj1E,KAxBA,CA4BAq1E,2BC5BAr2E,MAAA8gC,QAAA,eAAA,CAAA,YAAA,gBAAA,KAAA,gBACA,SAAAC,EAAAw1C,EAAAhpE,EAAA0zB,GAEA,IAAAu1C,EAAAz1C,EAAA,qBAAA,GAAA,CACA/W,OAAA,CAAA8X,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,yBACA+zC,qBAAA,CAAAh0C,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,uCACAo0C,uBAAA,CAAAr0C,OAAA,OAAAhN,SAAA,EAAAiN,IAAA,yCACA00C,qBAAA,CAAA30C,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,uCACA20C,wCAAA,CAAA50C,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,4DAGA40C,EAAAJ,EAAA,qBAqEA,MAAA,CACAhqE,YApEA,SAAA3D,GAEA,IAAA2L,EAAAoiE,EAAArjE,IAAA,cAWA,OATA1K,GAAA2L,IACAA,GACAoiE,EAAA1vE,OAAA,cAGAsN,EAAA0sB,EAAAkC,UAAA,SAAAqzC,GACAG,EAAAC,IAAA,aAAAriE,IAGAA,GAwDAuhE,qBAtCA,SAAAe,GACA,IAAAl1C,EAAAp0B,EAAAq0B,QACA1Q,EAAA,GAcA,OAbAA,EAAAzqB,SAAAk7B,EAAAE,QAEAZ,EAAAkC,UAAA,uBAAAqzC,EAAA,CACAM,wBAAAD,IACApwE,SAAAC,KACA,SAAAjD,GACAxD,QAAA0K,QAAAlH,EAAA,SAAAzC,GACAkwB,EAAA1tB,KAAA,IAAA6yE,0BAAAC,kBAAAt1E,MAEA2gC,EAAAhrB,QAAAua,IAEA,SAAAtW,GAAA+mB,EAAA/qB,OAAAgE,KAEAsW,GAuBAilD,uBApBA,SAAAU,EAAAv1C,EAAAx5B,EAAAE,GACAi5B,EAAA+D,WACA,yBACAwxC,EACA,CACAM,wBAAAD,EACAv1C,SAAAA,EAAA00C,aAEA,SAAAvyE,GACAqE,GACAA,EAAA,IAAAuuE,0BAAAC,kBAAA7yE,KAGAuE,IAQAwtE,0BAvDA,SAAAr5D,EAAA5a,GACA,OAAA0/B,EAAAkC,UAAA,uBAAAqzC,EAAA,CACAr6D,SAAAA,EACA5a,OAAAA,KAqDAm1E,wCAjDA,SAAArf,EAAAl7C,EAAA5a,GACA,OAAA0/B,EAAAkC,UAAA,0CAAAqzC,EAAA,CACAnf,yBAAAA,EACAl7C,SAAAA,EACA5a,OAAAA,SCxCAvB,MAAAkF,WAAA,WAAA,CAAA,SAAA,cACA,SAAAG,EAAA0xE,GACA1xE,EAAA0xE,YAAAA,EAEA1xE,EAAA2xE,qBAAA,WACA3xE,EAAA2D,WAAA,cAAA,UCLAhJ,MAAAkF,WAAA,kBAAA,CAAA,SAAA,eACA,SAAAG,EAAA4xE,GAEA5xE,EAAA6xE,YAAA,GAEAD,EAAAE,eAAA9xE,EAAA+xE,eACA1wE,KAAA,SAAAjD,GACA4B,EAAA6xE,YAAAzzE,OCPAzD,MAAAkF,WAAA,sBAAA,CAAA,SACA,SAAAG,GAEAA,EAAAmuC,MAAA,WACAnuC,EAAAgyE,aAAAhyE,EAAAiyE,YAGAjyE,EAAAkyE,cAAA,WAEA,IAAAlyE,EAAAiyE,UACA,OAAA,EAKA,OAFA5hE,SAAArQ,EAAAiyE,UAAAE,qBAGA,KAAA,EACA,OAAAnyE,EAAAiyE,UAAA1yC,OACA,KAAA,EACA,OAAAv/B,EAAAiyE,UAAA95D,aAAAnY,EAAAiyE,UAAA9lC,SACA,KAAA,EACA,OAAAnsC,EAAAiyE,UAAA95D,aAAAnY,EAAAiyE,UAAA9lC,WAAAnsC,EAAAiyE,UAAAG,iBACA,KAAA,EACA,OAAApyE,EAAAiyE,UAAA95D,aAAAnY,EAAAiyE,UAAAI,YACA,KAAA,EACA,OAAAryE,EAAAiyE,UAAAI,cAAAryE,EAAAiyE,UAAA/1E,OACA,KAAA,EACA,OAAA8D,EAAAiyE,UAAA95D,aAAAnY,EAAAiyE,UAAAK,oBACA,KAAA,EACA,KAAA,EACA,KAAA,EACA,KAAA,GACA,KAAA,GACA,OAAAtyE,EAAAiyE,UAAA95D,WACA,KAAA,GACA,OAAAnY,EAAAiyE,UAAA95D,aAAAnY,EAAAiyE,UAAAM,YAEA,KAAA,GACA,KAAA,GACA,OAAAvyE,EAAAiyE,UAAA95D,WACA,KAAA,GACA,OAAAnY,EAAAiyE,UAAA/1E,OACA,KAAA,GACA,OAAA8D,EAAAiyE,UAAAlpD,UACA,KAAA,GACA,OAAA/oB,EAAAiyE,UAAA95D,aAAAnY,EAAAiyE,UAAA9lC,cC7CAxxC,MAAAkF,WAAA,YAAA,CAAA,SAAA,SAAA,aAAA,eAAA,cAAA,qBACA,SAAAG,EAAAC,EAAAjF,EAAA42E,EAAAY,EAAAC,GAEAzyE,EAAA0yE,WAAA,WACAC,EAAAvxE,SAAAC,KAAA,WACArB,EAAAiyE,UAAAL,EAAAgB,uBACAD,EAAAnxE,UAIAxB,EAAA6yE,cAAAJ,EAAA/wE,YAEA1B,EAAAgyE,aAAA,SAAAC,GAEAjyE,EAAA+xE,cAAA5zE,KAAA8zE,IAGAjyE,EAAA8yE,SAAA,WACA9yE,EAAA+xE,cAAAtyE,OAAA,EACAO,EAAA+hD,QAAA,GACA/hD,EAAA+yE,YAAA,GACA/yE,EAAAgzE,YAAA,GAEAhzE,EAAA6yE,cAAAJ,EAAA/wE,aAGA1B,EAAAizE,YAAA,SAAAlB,EAAAhwB,EAAAgxB,EAAAC,GACAR,EAAAU,UAAAnB,EAAAhwB,EAAAgxB,EAAAC,GACA3xE,KAAArB,EAAA8yE,WAKA,IAAAH,EAAA1yE,EAAA,CACAL,YAAA,iCACA4B,OAJAxB,EAAA+xE,cAAA,IAKA/vE,MAAAhC,IAIAA,EAAAmzE,cAAA,SAAApB,GACAqB,EAAAhyE,SAAAC,KAAA,WACA+xE,EAAA5xE,UAIAxB,EAAAkiB,eAAA,WAEAliB,EAAA6yE,cAAA9wB,QAAA/hD,EAAA+hD,QACA/hD,EAAA6yE,cAAAE,YAAA/yE,EAAA+yE,YACA/yE,EAAA6yE,cAAAQ,WAAArzE,EAAA+xE,cACA/xE,EAAA6yE,cAAA/tE,OACA9E,EAAA6yE,cAAA/tE,KAAA9E,EAAA6yE,cAAA9wB,SAGAuxB,EAAAlyE,SAAAC,KAAA,WACAiyE,EAAAtzE,OAAAsB,MAAA1G,QAAA2G,KAAAvB,EAAA6yE,eACAS,EAAAtzE,OAAAuH,OAAA,SAAAgsE,GACAvzE,EAAA6yE,cAAA/tE,KAAAyuE,EAAAzuE,KACA9E,EAAA6yE,cAAA/vE,GAAAywE,EAAAzwE,IAEAwwE,EAAA9xE,UAIAxB,EAAAwzE,eAAA,WACAC,EAAAryE,SAAAC,KAAA,WACAoyE,EAAAzzE,OAAAwmC,OAAA,SAAAktC,GACA1zE,EAAA6yE,cAAAa,EAEA1zE,EAAA+hD,QAAA2xB,EAAA3xB,QAGA/hD,EAAA+xE,cAAA31E,EAAA+a,IAAAu8D,EAAAL,WAAA,SAAAM,GACA,IAAA1B,EAAAL,EAAAgB,uBAEA,OADAh4E,QAAAkC,OAAAm1E,EAAA0B,GACA1B,IAGAjyE,EAAA+yE,YAAAW,EAAAX,YACA/yE,EAAAgzE,YAAA,IAEAS,EAAAjyE,UAIA,IAAAoyE,EAAA,KACA5zE,EAAA6zE,UAAA,4BACA7zE,EAAA8zE,eAAA,EACA9zE,EAAA+zE,mBAAA,EACA/zE,EAAAg0E,aAAA,EACAh0E,EAAAi0E,kBAAA,EACAj0E,EAAAgzE,YAAA,GAEAhzE,EAAAk0E,iBAAA,SAAAC,GACAn0E,EAAAgzE,aAAAmB,KAKA,KADA5lD,EAAAvuB,EAAAgzE,YAAAjjE,QAAAokE,KAEAn0E,EAAAgzE,YAAAj/D,OAAAwa,EAAA,KAuCA,IAAA6kD,EAAAnzE,EAAA,CACAL,YAAA,6BACA4B,OArCAxB,EAAAo0E,oBAAA,CACAC,OAAA,IACAC,WAAA,YACAC,cAAA,EACAC,UAAA,GACAC,iBAAAz5E,EAAAM,QAAA,sBACAo5E,YAAA,SACApxD,eAAA,SAAAziB,GACA+yE,EAAA/yE,EAAAuI,WAEAurE,cAAA,SAAA9zE,GACAmpB,MAAAnpB,EAAA+zE,QAAAC,cACA70E,EAAA8zE,eAAA,EACA9zE,EAAAg0E,aAAA,EACAh0E,EAAAi0E,kBAAA,EACAL,EAAAkB,SAEAC,gBAAA,SAAAl0E,GACAb,EAAA8zE,eAAA,EACA9zE,EAAAg0E,aAAA,EACAh0E,EAAAi0E,kBAAA,GAEAe,WAAA,SAAAn0E,GACAb,EAAAgzE,YAAA70E,KAAAglE,KAAA8R,MAAAp0E,EAAA+zE,QAAAC,eACA70E,EAAA8zE,eAAA,EACA9zE,EAAAg0E,aAAA,EACAh0E,EAAAi0E,kBAAA,EACAL,EAAAkB,SAEAzxD,eAAA,CACAwwD,UAAA,YACA1nE,SAAA,mBAOAnK,MAAAhC,IAGAszE,EAAArzE,EAAA,CACAL,YAAA,2CACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGAwxE,EAAAxzE,EAAA,CACAL,YAAA,2CACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YC7JAtH,MAAAkF,WAAA,8BAAA,CAAA,SAAA,aAAA,UAAA,qBACA,SAAAG,EAAAhF,EAAAoN,EAAAqqE,GAEAzyE,EAAAk1E,UAAAzC,EAAA0C,aACAn1E,EAAAo1E,iBAAA,KAEAp1E,EAAAiB,cAAA,SAAAK,GACAtB,EAAAo1E,iBAAA9zE,GAGAtB,EAAAM,aAAA,CACAwE,KAAA,YACAkgB,QAAA,KACAiE,oBAAA,SAAAjf,GAAA,OAAA,GACAzJ,QAAA,CACA,CAAAC,UAAA,KAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,UACA,CACAF,UAAA,eACAC,QAAAzF,EAAAM,QAAA,sBACAoF,SAAA,OACAjE,OAAA,CAAAwM,KAAA,sBACAtI,MAAA,QACAC,UAAA,UAKAZ,EAAA2B,YAAA,SAAAL,GACAmxE,EAAA7wE,OAAAN,EAAAwB,IAAA1B,SAAAC,KAAA,WACArB,EAAAo1E,iBAAA,KACAp1E,EAAAk1E,UAAAzC,EAAA0C,gBAIAn1E,EAAAq1E,aAAA,WACA5C,EAAAlxD,QAAAvhB,EAAAo1E,iBAAAtyE,IAAA1B,SAAAC,KAAA,SAAAC,GACAtB,EAAAwmC,OAAAllC,SCrCA3G,MAAAkF,WAAA,8BAAA,CAAA,SAAA,aAAA,UAAA,qBACA,SAAAG,EAAAhF,EAAAoN,EAAAqqE,GAEAzyE,EAAA6C,UAAA,EAEA7C,EAAAs1E,YAAA,WAEAt1E,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEA7C,EAAAsB,MAAAwB,GAAA,KAEA2vE,EAAAzvE,OAAAhD,EAAAsB,OAAAF,SAAAC,KACA,SAAAjD,GACA4B,EAAA6C,UAAA,EAEA7C,EAAAuH,OAAAnJ,IAEA,SAAAuE,GACA3C,EAAA6C,UAAA,MAKA7C,EAAAu1E,eAAA,WAEAv1E,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEA4vE,EAAA1vE,OAAA/C,EAAAsB,OAAAF,SAAAC,KACA,WACArB,EAAA6C,UAAA,EAEA7C,EAAAuH,OAAAvH,EAAAsB,QAEA,SAAAqB,GACA3C,EAAA6C,UAAA,SC1CAlI,MAAAkF,WAAA,sCAAA,CAAA,SAAA,aAAA,UAAA,KAAA,sBAAA,aACA,SAAAG,EAAAhF,EAAAoN,EAAAF,EAAAstE,EAAAz2E,GAKAiB,EAAAy1E,YAAA12E,EAAA22E,eAAA,KAGA11E,EAAA21E,mBAAA,CACAC,mBAAA,IAAAvjC,WAAAwjC,eAAAC,yBAAA,CACAC,SAAA,SAAAC,GACA,OAAAR,EAAAS,SAAAj2E,EAAAsB,MAAA40E,qBAAAl2E,EAAAsB,MAAA60E,cAAAn2E,EAAAy1E,aAAAr0E,UAEAg1E,cAAA,SAAAxzD,KAEAyzD,WAAA,SAAAh/D,GACA,OAAAm+D,EAAAc,WAAAt2E,EAAAsB,MAAA40E,qBAAAl2E,EAAAsB,MAAA60E,cAAA9+D,EAAAusD,KAAA5jE,EAAAy1E,aAAAr0E,UAEAm1E,gBAAA,SAAAC,EAAAC,EAAAC,GACA,IAAAC,EAAAH,EAAAl3E,KACAktD,EAAAgqB,EAAAvtE,KAGA2tE,GAFAH,EAAAI,WAEA3uE,EAAA,SAAAoJ,EAAAC,GACA,IACAulE,EADA,IAAAL,EAAAM,YACAD,EAAAJ,EAAA9S,KAAA8S,EAAA9S,KAAA,IAAA4S,EAAA1xE,KAAA0xE,EAAA1xE,KACA0wE,EAAAwB,aAAAh3E,EAAAsB,MAAA40E,qBAAAl2E,EAAAsB,MAAA60E,cAAAW,EAAA92E,EAAAy1E,aAAAr0E,SAAAC,KAAA,SAAAwyE,GACA4C,EAAAQ,WAAAC,UAAArD,EAAAn3C,IACAprB,OAIAA,OAIA,OAAApJ,EAAA,SAAAoJ,EAAAC,GACAqlE,EAAAv1E,KAAA,WAEAo1E,EAAAU,UAAA73E,KAAA,IACA83E,EAAAX,EAAAY,cACAC,EAAAb,EAAAY,cAAAZ,EAAAU,UAAA73E,KAAA,EAGA6P,EAAAizC,KAAA,CACA1lB,IAAA+5C,EAAAQ,WAAAC,UACAjuE,KAAA,MACAujD,YAAAA,EACA+qB,cAAAd,EAAAU,UAAA73E,KACAs9B,QAAA,CACA46C,gBAAA,SAAAJ,EAAA,IAAAE,EAAA,IAAAX,GAEAv4E,KAAAq4E,EAAAU,UACAM,aAAA,EACAC,aAAA,EACAj1E,QAAA,SAAAga,GACAnL,KAEA3O,MAAA,SAAAke,GACA,KAAAA,EAAA8b,OACArrB,IAEAC,EAAAsP,WAOA82D,SAAA,WACAC,SAAA,WACA5yD,QAAA,WACA6yD,iBAAA,iBAEAC,YAAA,CACAC,UAAA,EACAC,QAAA,EACA55C,QAAA,EACA65C,QAAA,GAEAC,cAAA,SACAD,OAAA,CACAvD,YAAA,SACAyD,UAhFA,SAkFA70D,eAAA,SAAAziB,GACAA,EAAAuI,WAEAgvE,SAAA,CACAvoC,KAAA,UACAwoC,aAAA,EACAC,kBAAA,OC5FA39E,MAAAkF,WAAA,qBAAA,CAAA,SAAA,aAAA,UAAA,WAAA,SAAA,gBACA,oBAAA,aACA,SAAAG,EAAAhF,EAAAoN,EAAAoG,EAAAvO,EAAAoL,EAAAktE,EAAAx5E,GAUA,IAAAy5E,EA4FA,SAAA/hE,EAAAy/D,EAAAC,GACAoC,EAAAh3D,QAAA20D,EAAAC,EAAAn2E,EAAAy1E,aAAAr0E,SAAAC,KACA,SAAAjD,GACA4B,EAAAsB,MAAAlD,EACA4B,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAy4E,mBAAAz4E,EAAA04E,gBAEAF,GACAhqE,EAAA,WACAgqE,EAAAG,YACA34E,EAAA44E,WAAAJ,EAAAK,aAGA,SAAAh4D,GACA7gB,EAAAsB,MAAA,KACAtB,EAAAqC,UAAA,OApHArC,EAAA04E,gBAAA,KACA14E,EAAAy4E,mBAAA,KACAz4E,EAAAy1E,YAAA12E,EAAA22E,eAAA,KACA11E,EAAAsB,MAAA,KACAtB,EAAAqC,UAAA,KACArC,EAAA44E,YAAA,EACA54E,EAAA84E,oBAAA,EAIA94E,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAA6hB,qBACA7hB,EAAA2D,WAAA,2BAAA,MAGA3D,EAAA+4E,kBAAA,WACA/4E,EAAA6hB,sBAGA7hB,EAAAg5E,aAAA,WACA,OAAAh5E,EAAA44E,aACA54E,EAAAsB,QACAtB,EAAA04E,iBAGA14E,EAAAkiB,eAAA,WACAliB,EAAAg5E,gBAEAT,EAAAx1E,OAAA/C,EAAAsB,OAAAF,SAAAC,KACA,SAAAoB,GAEAzC,EAAA2D,WAAA,2BAAA,IACA8S,EAAAzW,EAAAsB,MAAA40E,qBAAAl2E,EAAAsB,MAAA60E,kBAKAn2E,EAAAmiB,iBAAA,WACAniB,EAAA04E,iBAAA14E,EAAAsB,OACA+J,EAAA6B,eAAA,CACA7R,MAAA,qBACA8R,QAAAnS,EAAAM,QAAA,qCACA8R,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WACAmzE,EAAA32E,OAAA5B,EAAAsB,MAAA40E,qBAAAl2E,EAAAsB,MAAA60E,cAAAn2E,EAAAy1E,aAAAr0E,SAAAC,KACA,SAAAoB,GACAzC,EAAA2D,WAAA,2BAAA,IACA8S,EAAAzW,EAAAsB,MAAA40E,qBAAAl2E,EAAAsB,MAAA60E,gBAEA,SAAAxzE,GACAqnB,MAAArnB,WAQA3C,EAAAi5E,mBAAA,WAEAC,EAAA93E,SAAAC,KAAA,WACA63E,EAAAl5E,OAAAm5E,OAAAZ,EAAAa,QAAAp5E,EAAAsB,OACA43E,EAAA13E,UAIAxB,EAAAq5E,cAAA,WACAC,EAAAl4E,SAAAC,KAAA,WACAi4E,EAAAt5E,OAAAsB,MAAAtB,EAAAsB,MACAg4E,EAAA93E,UAIAxB,EAAAu5E,iBAAA,SAAAC,GACAhB,EAAAgB,EAAAC,SACAz5E,EAAA44E,WAAAJ,EAAAK,UACAL,EAAAprD,GAAA,SAAA,WACAptB,EAAA44E,WAAAJ,EAAAK,aAIA74E,EAAAi1D,cAAA,CACAykB,aAAA,EACAC,MAAA,UACA9pC,KAAA,CAAA/qC,KAAA,aAAA80E,KAAA,cAGA55E,EAAA65E,wBAAA,CACAH,aAAA,EACAC,MAAA,UACA9pC,KAAA,CACA/qC,KAAA,aACAg1E,MAAA,EACAC,gBAAA,IA4EA,IAAAb,EAAAj5E,EAAA,CACAL,YAAA,+CACA4B,OAtDAxB,EAAA6hB,mBAAA,WAEA,SAAAm4D,EAAA9D,EAAAC,GACAn2E,EAAA44E,WAiBAniE,EAAAy/D,EAAAC,GAhBA9qE,EAAA6B,eAAA,CACA7R,MAAA,qBACA8R,QAAAnS,EAAAM,QAAA,qCACA8R,QAAA,CAAA,CACAlI,KAAA,aACAE,SAAA,WACApF,EAAA04E,gBAAA14E,EAAAi6E,qBAEA,CACA/0E,KAAA,cACAE,SAAA,WACAqR,EAAAy/D,EAAAC,QASA,IACA1qD,EACAyqD,EACAC,EAHAn2E,EAAA04E,kBACAjtD,EAAAzrB,EAAA04E,gBAAAjtD,MAAA,KACAyqD,EAAA7lE,SAAAob,EAAA,IACA0qD,EAAA9lE,SAAAob,EAAA,IAEA8sD,EAAA2B,YAAAhE,EAAAC,EAAAn2E,EAAAy1E,aACAp0E,KAAA,SAAA84E,GAEAn6E,EAAA84E,oBAAAqB,EAAAnH,YAAAvzE,OAEA06E,EAAAC,uBAAAD,EAAAE,aACAL,EAAA9D,EAAAC,GAEA9qE,EAAA6B,eAAA,CACA7R,MAAA,kBACA8R,QAAAnS,EAAAM,QAAA,6BACA8R,QAAA,CAAA,CACAlI,KAAA,aACAE,SAAA,WACA40E,EAAA9D,EAAAC,aAYAn0E,MAAAhC,EAAAiC,SAIAq3E,EAAAr5E,EAAA,CACAL,YAAA,mDACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGAq3E,EAAAt5E,OAAA/E,IAAA,oBAAA,WACA+E,EAAA2D,WAAA,2BAAA,SC9LAhJ,MAAAkF,WAAA,2BAAA,CAAA,SAAA,aAAA,UACA,SAAAG,EAAAhF,EAAAoN,GAEApI,EAAAiG,WAAA,CACA,CACA5K,MAAA,gBACAyG,SAAA,0DACA,CACAzG,MAAA,mBACAyG,SAAA,4DAGA9B,EAAAm5E,OAAA/3E,SAAAC,KAAA,SAAAC,GACAtB,EAAAs6E,iBAAAh5E,EAAAg5E,iBACAt6E,EAAA/D,QAAAqF,EAAArF,QACA+D,EAAA/D,UACA+D,EAAAiG,WAAAlE,UAAA,GAEAoN,EAAA,yBAAAorE,WAAA7zE,KAAA,QAAA9I,KAAA0D,EAAAk5E,eChBA7/E,MAAAkF,WAAA,0BAAA,CAAA,SAAA,aAAA,WAAA,gBACA,SAAAG,EAAAhF,EAAAwT,EAAAisE,GAqBA,SAAAhkE,IACAzW,EAAA8W,UAAA9W,EAAA9D,QACAu+E,EAAAC,cAAA16E,EAAA8W,SAAA9W,EAAA9D,QACAmF,KAAA,SAAAjD,GACA4B,EAAA26E,oBAAAv8E,KAAAA,IAGAyI,GAAA,EA1BA7G,EAAA8W,SAAA/a,SAAA8U,SAAA,EAAA,UAAA3U,SACA8D,EAAA9D,OAAAH,SAAA2d,IAAA,EAAA,OAAAxd,SAEA8D,EAAA26E,oBAAA,CACA1xE,KAAA,YACA7K,KAAA,CAAA,IACA0Z,QAAA,CACA0nD,oBAAA,EACAC,WAAA,EACAC,UAAA,CAAA7f,IAAA,GAAAO,KAAA,GAAAE,MAAA,GAAA99B,OAAA,OACAm9C,OAAA,CACAjtB,SAAA,QAEAkoC,MAAA,GACAC,MAAA,GACAC,YAAA,eAmBA,IAAAl0E,IAJA5G,EAAAmrB,mBAAA,WACA1U,MAIA5P,GAAA,EAEA7G,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,EACAC,GACA4P,KAIA7P,GAAA,OCnDAjM,MAAAkF,WAAA,iBAAA,CAAA,SAAA,aAAA,UAAA,gBACA,SAAAG,EAAAhF,EAAAoN,EAAAqyE,GAEAz6E,EAAA+6E,cAAA,GAEA/6E,EAAAM,aAAA,CACAC,QAAA,CACA,CACAC,UAAA,aACAC,QAAAzF,EAAAM,QAAA,sBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAA3M,EAAA+a,IAAA/a,EAAAkoB,OAAAvb,EAAAiyE,OAAA,QAAA,QAAAtrD,KAAA,OAEA/uB,MAAA,SAEA,CAAAH,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,qBAAAoF,SAAA,UACA,CACAF,UAAA,SACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAA4zB,SAEAh8B,MAAA,SAEA,CACAH,UAAA,YACAC,QAAAzF,EAAAM,QAAA,sBACAoF,SAAA,OACAjE,OAAA,qBACAkE,MAAA,QACAC,UAAA,UAKAZ,EAAAiB,cAAA,SAAA7C,GACA4B,EAAA+6E,cAAA38E,EAAA48E,QAGAh7E,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAg7E,OAAAP,EAAAQ,aACAj7E,EAAA+6E,cAAA,KAGA/6E,EAAAg7E,OAAAP,EAAAQ,aAEAj7E,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,+CACA,CACAzG,MAAA,iBACAyG,SAAA,8CAGA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,EAAAC,SAAAA,SC5DApL,MAAAkF,WAAA,4BAAA,CAAA,SAAA,aAAA,UAAA,gBACA,SAAAG,EAAAhF,EAAAoN,EAAAqyE,GAEAz6E,EAAAiG,WAAA,CACA,CACA5K,MAAA,gBACAyG,SAAA,sDACA,CACAzG,MAAA,kBACAyG,SAAA,yDACA,CACAzG,MAAA,4BACAyG,SAAA,sDAGA9B,EAAAk7E,mBAAA,GAEAl7E,EAAAm5E,OAAA/3E,SAAAC,KAAA,SAAAC,GACAtB,EAAAm7E,0BACA75E,EAAA85E,UAAAt2E,KAAA,IAAAxD,EAAA85E,UAAAl5B,MAAA,IACAliD,EAAAk7E,mBAAA,OAAAn6B,OAAA,WAAA77C,KAAA5D,EAAAygD,SAAAnkD,OACAuR,EAAA,yBAAAorE,WAAA7zE,KAAA,QAAA9I,KAAA0D,EAAAk5E,eCrBA7/E,MAAAkF,WAAA,4BAAA,CAAA,SAAA,aAAA,UAAA,SAAA,gBACA,SAAAG,EAAAhF,EAAAoN,EAAAnI,EAAAw6E,GAEAz6E,EAAAq7E,4BAAA,CACA96E,QAAA,CACA,CACAC,UAAA,OACAC,QAAAzF,EAAAM,QAAA,kBACAoF,SAAA,SACAC,MAAA,SAEA,CACAH,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAC,MAAA,SAEA,CACAH,UAAA,SACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,cAAAA,CAAAW,EAAA4zB,SAEAh8B,MAAA,SAEA,CAAAH,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,UACA,CACAF,UAAA,YACAC,QAAAzF,EAAAM,QAAA,sBACAoF,SAAA,OACAjE,OAAA,qBACAkE,MAAA,QACAC,UAAA,SAGAqE,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,cACA8J,SAAA,SAAA4E,GAIA,IAAAlH,EAAAA,EAJAkH,EAAAlH,GAKA3B,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAm5E,OAAAsB,EAAA3K,UAAAhtE,GACA3B,EAAAK,aAOA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,yCACA4B,OALAxB,EAAAs7E,gBAAA,SAAAh6E,MAMAU,MAAAhC,EAAAiC,YCrDAtH,MAAAkF,WAAA,UAAA,CAAA,SAAA,SAAA,aAAA,UAAA,eAAA,cAAA,mBACA,SAAAG,EAAAC,EAAAjF,EAAAoN,EAAAwpE,EAAAY,EAAAtwE,GAEAlC,EAAA8W,SAAA/a,SAAA6U,QAAA,SAAA1U,SACA8D,EAAA9D,OAAAH,SAAAqrB,MAAA,SAAAlrB,SAEA8D,EAAAu7E,iBAAAr5E,EAAAE,SAAAm5E,iBACAv7E,EAAAw7E,YAAAhJ,EAAAiJ,wBAAAz7E,EAAA8W,SAAA9W,EAAA9D,QAEA8D,EAAAM,aAAA,CACAC,QAAA,CACA,CAAAC,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAjE,OAAA,qBAAAkE,MAAA,QAAAC,UAAA,QACA,CACAJ,UAAA,YACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAAkpE,YAEAtxE,MAAA,SAEA,CAAAH,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,qBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,UACA,CAAAF,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,SAAAC,MAAA,WAeAX,EAAAuhE,iBAAA,SAAAzqD,GACAA,IACA9W,EAAAw7E,YAAAhJ,EAAAiJ,wBAAA3kE,EAAA9W,EAAA9D,UAIA8D,EAAAwhE,eAAA,SAAAtlE,GACAA,IACA8D,EAAAw7E,YAAAhJ,EAAAiJ,wBAAAz7E,EAAA8W,SAAA5a,KAIA8D,EAAA07E,YAAA,GAEA17E,EAAAiB,cAAA,SAAA7C,GACAxD,QAAA2H,OAAAvC,EAAA07E,YAAAt9E,KACA4B,EAAA07E,YAAAt9E,IAIA4B,EAAA27E,SAAA,WACAx6E,EAAAC,SAAAC,KAAA,WACArB,EAAA8yE,WACA3xE,EAAAK,UAIAxB,EAAA4C,YAAA,KAEA5C,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,uCAGA9B,EAAA6B,KAAAE,UAAA,EAEA,IAAAZ,EAAAlB,EAAA,CACAL,YAAA,0BACA4B,MAAA,EACAQ,MAAAhC,IAGAA,EAAA0yE,WAAA,WACAC,EAAAvxE,SAAAC,KAAA,WACArB,EAAAiyE,UAAAL,EAAAgB,uBACAD,EAAAnxE,UAIAxB,EAAAgyE,aAAA,SAAAC,GAEAjyE,EAAA+xE,cAAA5zE,KAAA8zE,IAGAjyE,EAAA47E,QAAA,GAGA,IAAAjJ,EAAA1yE,EAAA,CACAL,YAAA,iCACA4B,OAJAxB,EAAA+xE,cAAA,IAKA/vE,MAAAhC,IAGAA,EAAA8yE,SAAA,WACA9yE,EAAA+xE,cAAAtyE,OAAA,EACAO,EAAA47E,QAAA,IAGA57E,EAAAizE,YAAA,SAAAlB,EAAA6J,GACApJ,EAAAqJ,QAAA9J,EAAA6J,GACAv6E,KAAA,WACArB,EAAA8yE,WACA3xE,EAAAkS,aC/GA1Y,MAAA4T,UAAA,uBAAA,CAAA,WAAA,aAAA,oBAAA,cAAA,aACA,SAAAC,EAAAxT,EAAAu9E,EAAAlwE,EAAAtJ,GACA,SAAA0P,EAAAnN,GACA,IAAAA,EACA,MAAA,GAGA,IAAAw6E,EAAAx6E,EAAA0xE,YAAAvzE,QAAA,GAEA,OAAA6B,EAAA+4E,aAEA/4E,EAAA84E,qBACA,2DACA94E,EAAAy6E,kBAAA,mDACAD,EAAA,mBAIA,0DACAx6E,EAAAy6E,kBAAA,kDACAD,EAAA,mBAIA,2CACAx6E,EAAAy6E,kBAAA,+BACAD,EAAA,eAKA,SAAAptE,EAAApN,GACA,IAAAA,EACA,MAAA,GAGA,IAAAw6E,EAAAx6E,EAAA0xE,YAAAvzE,OACA,KAAA6B,EAAA0xE,YAAAvzE,OAAA,IACA,GAEA,OAAA6B,EAAA+4E,aACA/4E,EAAA84E,qBACA,iCAAA94E,EAAAy6E,kBAAAD,EAAA,cAEA,gCAAAx6E,EAAAy6E,kBAAAD,EAAA,cAGAx6E,EAAAy6E,kBAAAD,EAIA,MAAA,CACAntE,SAAA,IACAC,QAAA,WACAC,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA,SAAAovB,IACA/f,EAAA9N,SAAAC,KAAA,WACAmN,EAAA,WAEAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,6BACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,wBAAA,EACA1M,GAAA,SAAAxB,GAAA,OAAAA,EAAA40E,qBAAA,IAAA50E,EAAA60E,eACA/3E,KAAAhC,EAAAqT,OAAAP,EAAA,SAAAQ,GAAA,OAAArH,EAAAsH,WAAAD,EAAA,uBACAE,QAAA,SAAAC,EAAA3K,EAAA9G,GACA,OAAA,GAAAA,EAAA29E,kBAAAjsE,cAAAC,QAAAF,EAAAC,kBAIAjQ,EAAAmQ,YAGAnQ,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGAlB,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAvP,EAAAmQ,WACA,GAGA,IAAAd,EAAAqpE,EAAApD,WAAAp2E,EAAA22E,eAAA,MAAA,GAEA1zE,EAAA/G,IAAA,2BAAA,SAAA4F,EAAAzC,IACA8Q,EAAAqpE,EAAApD,WAAAp2E,EAAA22E,eAAA,MAAA,IACAt0E,SAAAC,KAAA,WACAmN,EAAA,WACA,IAAAwG,EAAAjG,EAAAK,QAAA,OACAL,EAAAK,QAAA,WACA6f,IACApvB,EAAAytB,cAAAtY,SAKAia,SCtHAt0B,MAAA4T,UAAA,wBAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GAEA,SAAAyT,EAAA4I,GACA,GAAAA,EAEA,MAAA,6DACArc,EAAAM,QAAA+b,EAAAnS,MAAA,+BACAlK,EAAAM,QAAA+b,EAAAghC,aAAA,eAKA,SAAA3pC,EAAA2I,GACA,MAAA,YAAAuY,EACA50B,EAAAM,QAAA+b,EAAAnS,MACAlK,EAAAM,QAAA+b,EAAAghC,cAIA,MAAA,CACA1pC,SAAA,IACAC,QAAA,UACA8e,SAAA,EACA7e,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GACA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAI,yBAAA,EACAf,aAAAA,EACAC,gBAAAA,EACAtQ,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,oBAAAmzC,YAAA,sBACA,CAAAv1C,GAAA,GAAAoC,KAAA,sBAAAmzC,YAAA,wBACA,CAAAv1C,GAAA,EAAAoC,KAAA,sBAAAmzC,YAAA,wBACA,CAAAv1C,GAAA,EAAAoC,KAAA,6BAAAmzC,YAAA,+BACA,CAAAv1C,GAAA,EAAAoC,KAAA,yBAAAmzC,YAAA,2BACA,CAAAv1C,GAAA,EAAAoC,KAAA,iCAAAmzC,YAAA,mCACA,CAAAv1C,GAAA,EAAAoC,KAAA,kCAAAmzC,YAAA,oCACA,CAAAv1C,GAAA,EAAAoC,KAAA,2BAAAmzC,YAAA,6BACA,CAAAv1C,GAAA,EAAAoC,KAAA,2BAAAmzC,YAAA,6BACA,CAAAv1C,GAAA,EAAAoC,KAAA,2CAAAmzC,YAAA,6CACA,CAAAv1C,GAAA,GAAAoC,KAAA,wBAAAmzC,YAAA,0BACA,CAAAv1C,GAAA,GAAAoC,KAAA,+BAAAmzC,YAAA,iCACA,CAAAv1C,GAAA,GAAAoC,KAAA,kDAAAmzC,YAAA,oDACA,CAAAv1C,GAAA,GAAAoC,KAAA,yCAAAmzC,YAAA,2CACA,CAAAv1C,GAAA,GAAAoC,KAAA,4DAAAmzC,YAAA,8DACA,CAAAv1C,GAAA,GAAAoC,KAAA,2BAAAmzC,YAAA,6BACA,CAAAv1C,GAAA,GAAAoC,KAAA,uBAAAmzC,YAAA,yBACA,CAAAv1C,GAAA,GAAAoC,KAAA,mBAAAmzC,YAAA,wBAIAtpC,EAAAqe,GAAA,SAAA,SAAAlyB,GACA8G,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAApyB,EAAA4zB,SAIA9sB,EAAA6D,OAAAmJ,EAAAye,QAAA,SAAAuuD,EAAAC,GACA9sE,EAAAJ,GAAAK,QAAA,MAAA4sE,KACA,GAEAjtE,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAqT,EAAAorC,UACAp4C,EAAA6D,OAAAmJ,EAAAorC,SAAA,SAAA/T,GACAt3B,EAAAK,QAAA,WAAAi3B,MAGA,QChFA1rC,MAAA4T,UAAA,kBAAA,WACA,MAAA,CACAI,SAAA,IACAC,QAAA,UACA8e,SAAA,EACA1rB,MAAA,CACAyrB,QAAA,IACAyuD,WAAA,KAEAp6E,SACA,gcAQAgN,KAAA,SAAA9M,EAAA6kC,EAAA98B,EAAAkF,GACAjN,EAAAm6E,WAAA,SAAA9kE,GACArV,EAAAyrB,SAAApW,KAKA,KADAkX,EAAAvsB,EAAAyrB,QAAA1d,QAAAsH,KAEArV,EAAAyrB,QAAA1Z,OAAAwa,EAAA,SC5BA5zB,MAAA2pB,OAAA,mBAAA,CAAA,aAAA,SAAAtpB,GACA,OAAA,SAAAS,GACA,OAAAA,GACA,KAAA,EACA,OAAAT,EAAAM,QAAA,8BACA,KAAA,EACA,OAAAN,EAAAM,QAAA,iCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,uCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,iCACA,QACA,MAAA,QAKAX,MAAA2pB,OAAA,cAAA,CAAA,aAAA,SAAAtpB,GACA,OAAA,SAAAS,GACA,OAAAA,GACA,KAAA,EACA,OAAAT,EAAAM,QAAA,uCACA,KAAA,EACA,OAAAN,EAAAM,QAAA,2CACA,KAAA,EACA,OAAAN,EAAAM,QAAA,4BACA,KAAA,EACA,OAAAN,EAAAM,QAAA,uBACA,KAAA,EACA,OAAAN,EAAAM,QAAA,qBACA,KAAA,EACA,OAAAN,EAAAM,QAAA,uBACA,KAAA,EACA,OAAAN,EAAAM,QAAA,sBACA,KAAA,EACA,OAAAN,EAAAM,QAAA,oBACA,QACA,MAAA,eCnCAX,MAAA8gC,QAAA,sBAAA,CAAA,YAAA,aAAA,KAAA,kBAAA,gBACA,SAAAC,EAAA1gC,EAAAkN,EAAA2zB,EAAAD,GAEA,IAAAwgD,EAAA1gD,EAAA,iCAAA,GAAA,CACAu6C,SAAA,CAAAx5C,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,kCACA45C,WAAA,CAAA75C,OAAA,SAAAC,IAAA,kCACAs6C,aAAA,CAAAv6C,OAAA,OAAAC,IAAA,sDA8CA,MAAA,CACAu5C,SA5CA,SAAAC,EAAAC,EAAAV,GACA,OAAA75C,EAAAkC,UACA,WACAs+C,EACA,CACAt5E,GAAAozE,EACAC,cAAAA,EACAV,YAAAA,GAAA,QAsCAa,WAlCA,SAAAJ,EAAAC,EAAA7/B,EAAAm/B,GACA,OAAA75C,EAAAuE,qBACA,aACAi8C,EACA,CACAt5E,GAAAozE,EACA5/B,SAAAA,EACA6/B,cAAAA,EACAV,YAAAA,GAAA,MAEA,KACA,KACA,MACA,IAsBAuB,aAnBA,SAAAd,EAAAC,EAAA7/B,EAAAm/B,GACA,OAAA75C,EAAAuE,qBACA,eACAi8C,EACA,CACAt5E,GAAAozE,EACA5/B,SAAAA,EACA6/B,cAAAA,EACAV,YAAAA,GAAA,MAEA,KACA,KACA,MACA,QCjDA96E,MAAA8gC,QAAA,oBAAA,CAAA,YAAA,aAAA,KAAA,kBAAA,gBACA,SAAAC,EAAA1gC,EAAAkN,EAAA2zB,EAAAD,GAEA,IAQAygD,EARAC,EAAA5gD,EAAA,2BAAA,GAAA,CACAy5C,WAAA,CAAA14C,OAAA,MAAAC,IAAA,gCAAAjN,SAAA,GACAlO,QAAA,CAAAkb,OAAA,MAAAC,IAAA,gCACA35B,OAAA,CAAA05B,OAAA,MAAAC,IAAA,gCACA0B,OAAA,CAAA3B,OAAA,SAAAC,IAAA,gCACA08C,QAAA,CAAA38C,OAAA,OAAAC,IAAA,sCAKA,SAAAy4C,EAAAM,EAAA73C,GAOA,OALAy+C,GADAA,GAAAz+C,EACAhC,EAAAkC,UAAA,aAAAw+C,EAAA,CACA7G,YAAAA,GAAA,OAIA4G,EAwDA,MAAA,CACAlH,WAAAA,EACA5zD,QA5CA,SAAA20D,EAAAC,EAAAV,GACA,OAAA75C,EAAAkC,UAAA,UAAAw+C,EAAA,CACAx5E,GAAAozE,EACAC,cAAAA,EACAV,YAAAA,GAAA,QAyCA1yE,OArCA,SAAAzB,GACA,OAAAs6B,EAAAkE,oBACA,SACAw8C,EACA,CACAx5E,GAAAxB,EAAA40E,qBACAC,cAAA70E,EAAA60E,cACAV,YAAAn0E,EAAAm0E,aAEAn0E,IA6BAM,OAfA,SAAAs0E,EAAAC,EAAAV,GACA,OAAA75C,EAAAiE,aACA,SACAy8C,EACA,CACAx5E,GAAAozE,EACAC,cAAAA,EACAV,YAAAA,GAAA,QASA2D,QA3BA,SAAA93E,GACA,OAAAs6B,EAAA+D,WACA,UACA28C,EACAh7E,EACA,KACA,MACA,IAqBA44E,YA1DA,SAAAhE,EAAAC,EAAAV,GAEA,OAAAvtE,EAAA,SAAAoJ,EAAAC,GACA4jE,EAAAM,GACAr0E,SAAAC,KAAA,SAAAjD,GACAkT,EAAAlV,EAAAsK,KAAAtI,EAAA,CAAA83E,qBAAAA,EAAAC,cAAAA,MACA5kE,UC9BA5W,MAAA8gC,QAAA,qBAAA,CAAA,YAAA,QAAA,KAAA,aAAA,kBAAA,gBACA,SAAAC,EAAAC,EAAAzzB,EAAAlN,EAAA6gC,EAAAD,GAEA,IAAA2gD,EAAA7gD,EAAA,8CAAA,GAAA,CACAna,QAAA,CAAAkb,OAAA,MAAAC,IAAA,+CACAy4C,WAAA,CAAA14C,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,gDACA15B,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,2CACA35B,OAAA,CAAA05B,OAAA,MAAAC,IAAA,+CACA0B,OAAA,CAAA3B,OAAA,SAAAC,IAAA,iDA6CA,MAAA,CACAh7B,UA3CA,WASA,MARA,CACAoB,GAAA,KACAuwE,WAAA,GACAvuE,KAAA,KACAi9C,QAAA,KACAgxB,YAAA,OAsCAxxD,QAVA,SAAAi7D,GACA,OAAA5gD,EAAAkC,UAAA,UAAAy+C,EAAA,CAAAz5E,GAAA05E,KAUArH,WAPA,WACA,OAAAv5C,EAAAkC,UAAA,aAAAy+C,EAAA,KAOAv5E,OAlCA,SAAA1B,GACA,OAAAs6B,EAAA+D,WACA,SACA48C,EACAj7E,IA+BAM,OA5BA,SAAA46E,GACA,OAAA5gD,EAAAiE,aACA,SACA08C,EACA,CAAAz5E,GAAA05E,KAyBAz5E,OAtBA,SAAAzB,GACA,OAAAs6B,EAAAkE,oBACA,SACAy8C,EACA,CAAAz5E,GAAAxB,EAAAwB,IACAxB,QC1CA3G,MAAA8gC,QAAA,cAAA,CAAA,YAAA,QAAA,KAAA,aAAA,kBAAA,gBACA,SAAAC,EAAAC,EAAAzzB,EAAAlN,EAAA6gC,EAAAD,GAEA,IAAA6gD,EAAA/gD,EAAA,oBAAA,GAAA,CACAghD,yBAAA,CAAAjgD,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,4CAmEA,MAAA,CACAw2C,UAjEA,SAAAnB,EAAAhwB,EAAAgxB,EAAAC,GACA,IAAA12C,EAAAp0B,EAAAq0B,QAwBA,OAtBAZ,EAAA,CACAc,OAAA,OACAC,IAAA,yBACAt+B,KAAA,CACAi1E,WAAAtB,EACAhwB,QAAAA,EACAgxB,YAAAA,EACAC,YAAAA,KAGAvwE,QAAA,SAAArE,EAAAu+B,EAAAC,EAAAlgC,GACA4/B,EAAAhrB,QAAAlT,GACAy9B,EAAAoB,WACAjiC,EAAAM,QAAA,yCAEAqH,MAAA,SAAAvE,EAAAu+B,EAAAC,EAAAlgC,GACA4/B,EAAA/qB,OAAAnT,GACAy9B,EAAAiB,YACA9hC,EAAAM,QAAA,sCACAugC,EAAAkB,eAAA3+B,MAGAk+B,EAAAE,SAyCAq/C,QAtCA,SAAA9J,EAAA6J,GACA,IAAAt/C,EAAAp0B,EAAAq0B,QAsBA,OApBAZ,EAAA,CACAc,OAAA,OACAC,IAAA,uBACAt+B,KAAA,CACAi1E,WAAAtB,EACAgB,YAAA6I,KAGAn5E,QAAA,SAAArE,EAAAu+B,EAAAC,EAAAlgC,GACA4/B,EAAAhrB,QAAAlT,GACAy9B,EAAAoB,WACAjiC,EAAAM,QAAA,wCAEAqH,MAAA,SAAAvE,EAAAu+B,EAAAC,EAAAlgC,GACA4/B,EAAA/qB,OAAAnT,GACAy9B,EAAAiB,YACA9hC,EAAAM,QAAA,oCACAugC,EAAAkB,eAAA3+B,MAGAk+B,EAAAE,SAgBAi/C,wBAbA,SAAA3kE,EAAA5a,GACA,OAAA0/B,EAAAkC,UACA,2BACA2+C,EACA,CACA3lE,SAAA/a,OAAA+a,GAAAuQ,SACAnrB,OAAAH,OAAAG,GAAAmrB,gBCnEA1sB,MAAA8gC,QAAA,eAAA,CAAA,aAAA,UAAA,QAAA,KAAA,kBAAA,cAAA,YAAA,eAAA,uBAAA,aAAA,UACA,SAAAzgC,EAAAoN,EAAAuzB,EAAAzzB,EAAA2zB,EAAA54B,EAAAC,EAAA+N,EAAAs6B,EAAA+nB,EAAArR,GA8KA,MAAA,CACA2wB,qBA7KA,WACA,SAAA+J,IACA99E,KAAAszE,mBAAA,EACAtzE,KAAA+9E,YAAA,EACA/9E,KAAAg+E,MAAA,KAuIA,OApIAF,EAAAh+E,UAAAm+E,QAAA,WAEA,GAAAj+E,KAAAg+E,MACA,OAAAh+E,KAAAg+E,MAGA,IAAAE,EAAA1sE,SAAAxR,KAAAszE,oBACA6K,EAAA,YACAC,EAAA,kBACAC,EAAAr+E,KAEA,OAAAk+E,GACA,KAAA,EACAG,EAAAL,MAAA7hF,EAAAM,QAAA,qBACA2mD,EAAAk7B,aAAAD,EAAA39C,QAAAn+B,SAAAC,KAAA,SAAAosD,GACAyvB,EAAAL,MAAAG,EAAAptD,EAAA50B,EAAAM,QAAA,qBAAAmyD,EAAAtoC,YAEA,MACA,KAAA,EACA+3D,EAAAL,MAAA7hF,EAAAM,QAAA,oBACA4H,EAAAk6E,eAAA/sE,SAAA6sE,EAAA/kE,YAAA9H,SAAA6sE,EAAA/wC,WAAA9qC,KAAA,SAAA4mC,GACAi1C,EAAAL,MAAAG,EAAAptD,EAAA50B,EAAAM,QAAA,uBAAA8M,EAAA,iBAAAA,CAAA6/B,MAEA,MACA,KAAA,EACAi1C,EAAAL,MAAA7hF,EAAAM,QAAA,oBACA4H,EAAAk6E,eAAA/sE,SAAA6sE,EAAA/kE,YAAA9H,SAAA6sE,EAAA/wC,WAAA9qC,KAAA,SAAA4mC,GACAi1C,EAAAL,MAAAG,EAAAptD,EAAA50B,EAAAM,QAAA,8BAAA8M,EAAA,iBAAAA,CAAA6/B,MAEA,MACA,KAAA,EACAi1C,EAAAL,MAAA7hF,EAAAM,QAAA,oBACA4M,EAAAiD,IAAA,CACA8F,EAAA4sB,SAAAxtB,SAAA6sE,EAAA7K,cACApvE,EAAA46B,SAAAxtB,SAAA6sE,EAAA/kE,eACA9W,KAAA,SAAAg8E,GACAH,EAAAL,MAAAI,EAAArtD,EAAA50B,EAAAM,QAAA,0BAAA+hF,EAAA,GAAAv4E,KAAAu4E,EAAA,GAAAv4E,QAEA,MACA,KAAA,EACAo4E,EAAAL,MAAA7hF,EAAAM,QAAA,oBACA2V,EAAA4sB,SAAAxtB,SAAA6sE,EAAA7K,cAAAhxE,KAAA,SAAAi8E,GACAJ,EAAAL,MAAAI,EAAArtD,EAAA50B,EAAAM,QAAA,kCAAAgiF,EAAAx4E,KAAAsD,EAAA,OAAAA,CAAA80E,EAAAhhF,OAAA,eAEA,MACA,KAAA,EACAghF,EAAAL,MAAA7hF,EAAAM,QAAA,oBACAiwC,EAAA1N,SAAAxtB,SAAA6sE,EAAA5K,sBAAAjxE,KAAA,SAAAk8E,GACAL,EAAAL,MAAAG,EAAAptD,EAAA50B,EAAAM,QAAA,mCAAAiiF,EAAAz4E,QAEA,MACA,KAAA,EACAo4E,EAAAL,MAAA7hF,EAAAM,QAAA,oBACA2H,EAAA46B,SAAAxtB,SAAA6sE,EAAA/kE,aAAA9W,KAAA,SAAA2C,GACAk5E,EAAAL,MAAAG,EAAAptD,EAAA50B,EAAAM,QAAA,4BAAA0I,EAAAc,QAEA,MACA,KAAA,EACAo4E,EAAAL,MAAA7hF,EAAAM,QAAA,oBACA2H,EAAA46B,SAAAxtB,SAAA6sE,EAAA/kE,aAAA9W,KAAA,SAAA2C,GACAk5E,EAAAL,MAAAG,EAAAptD,EAAA50B,EAAAM,QAAA,4BAAA0I,EAAAc,QAEA,MACA,KAAA,EACAo4E,EAAAL,MAAA7hF,EAAAM,QAAA,oBACA2H,EAAA46B,SAAAxtB,SAAA6sE,EAAA/kE,aAAA9W,KAAA,SAAA2C,GACAk5E,EAAAL,MAAAG,EAAAptD,EAAA50B,EAAAM,QAAA,4CAAA0I,EAAAc,QAGA,MACA,KAAA,GACAo4E,EAAAL,MAAA7hF,EAAAM,QAAA,oBACA2H,EAAA46B,SAAAxtB,SAAA6sE,EAAA/kE,aAAA9W,KAAA,SAAA2C,GACAk5E,EAAAL,MAAAG,EAAAptD,EAAA50B,EAAAM,QAAA,yBAAA0I,EAAAc,QAEA,MACA,KAAA,GACAo4E,EAAAL,MAAA7hF,EAAAM,QAAA,oBACA2H,EAAA46B,SAAAxtB,SAAA6sE,EAAA/kE,aAAA9W,KAAA,SAAA2C,GACAk5E,EAAAL,MAAAG,EAAAptD,EAAA50B,EAAAM,QAAA,gCAAA0I,EAAAc,QAEA,MACA,KAAA,GACAo4E,EAAAL,MAAA7hF,EAAAM,QAAA,oBACA2H,EAAA46B,SAAAxtB,SAAA6sE,EAAA/kE,aAAA9W,KAAA,SAAA2C,GACAk5E,EAAAL,MAAAG,EAAAptD,EAAA50B,EAAAM,QAAA,mDAAA0I,EAAAc,QAGA,MACA,KAAA,GACAo4E,EAAAL,MAAA7hF,EAAAM,QAAA,oBACA2H,EAAA46B,SAAAxtB,SAAA6sE,EAAA/kE,aAAA9W,KAAA,SAAA2C,GACAk5E,EAAAL,MAAAG,EAAAptD,EAAA50B,EAAAM,QAAA,0CAAA0I,EAAAc,QAEA,MACA,KAAA,GACAo4E,EAAAL,MAAA7hF,EAAAM,QAAA,oBACA2H,EAAA46B,SAAAxtB,SAAA6sE,EAAA/kE,aAAA9W,KAAA,SAAA2C,GACAk5E,EAAAL,MAAAG,EAAAptD,EAAA50B,EAAAM,QAAA,6DAAA0I,EAAAc,QAEA,MACA,KAAA,GACAo4E,EAAAL,MAAAG,EAAAptD,EAAA50B,EAAAM,QAAA,4BAAA8M,EAAA,OAAAA,CAAA80E,EAAAhhF,OAAA,aACA,MACA,KAAA,GACAghF,EAAAL,MAAA7hF,EAAAM,QAAA,wBACAg4D,EAAA6pB,aAAA9sE,SAAA6sE,EAAAn0D,YAAA3nB,SAAAC,KAAA,SAAAgX,GACA6kE,EAAAL,MAAAG,EAAAptD,EAAA50B,EAAAM,QAAA,wBAAA+c,EAAA8M,YAEA,MACA,KAAA,GACA+3D,EAAAL,MAAA7hF,EAAAM,QAAA,wBACA4H,EAAAs6E,eAAAntE,SAAA6sE,EAAA/kE,YAAA9H,SAAA6sE,EAAA/wC,WAAA9qC,KAAA,SAAA4mC,GACAi1C,EAAAL,MAAAG,EAAAptD,EAAA50B,EAAAM,QAAA,uBAAA8M,EAAA,iBAAAA,CAAA6/B,MAEA,MACA,KAAA,GACAi1C,EAAAL,MAAA7hF,EAAAM,QAAA,oBACA,MACA,QACA4hF,EAAAL,MAAA,cAIA,OAAAh+E,KAAAg+E,OAGAruD,OAAAC,eAAAkuD,EAAAh+E,UAAA,OAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAAA,OAAApP,KAAAi+E,aAGA,IAAAH,GAmCA7K,eAhCA,SAAAC,GACA,IAAAz1C,EAAAp0B,EAAAq0B,QA0BA,OAxBAZ,EAAA,CACAc,OAAA,OACAC,IAAA,iCACAt+B,KAAA2zE,IAEAtvE,QAAA,SAAArE,EAAAu+B,EAAAC,EAAAlgC,GAGA,IADA,IAAA+gF,EAAA,GACAlkE,EAAA,EAAAA,EAAAnb,EAAAqB,OAAA8Z,IACAkkE,GAAAr/E,EAAAmb,GAAA4L,SAAA,KAAA/mB,EAAAmb,GAAAmkE,aAAA,IACAnkE,EAAAnb,EAAAqB,OAAA,IACAg+E,GAAA,KAIAnhD,EAAAhrB,QAAAmsE,KAEA96E,MAAA,SAAAvE,EAAAu+B,EAAAC,EAAAlgC,GACA4/B,EAAA/qB,OAAAnT,GACAy9B,EAAAiB,YACA9hC,EAAAM,QAAA,oCACAugC,EAAAkB,eAAA3+B,MAGAk+B,EAAAE,aC5KA7hC,MAAA8gC,QAAA,gBAAA,CAAA,YAAA,aAAA,KAAA,kBAAA,gBACA,SAAAC,EAAA1gC,EAAAkN,EAAA2zB,EAAAD,GAEA,IAAA+hD,EAAAjiD,EAAA,kBAAA,GAAA,CACA4H,MAAA,CAAA7G,OAAA,MAAAhN,SAAA,GACAwrD,WAAA,CAAAx+C,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,mBACAozC,UAAA,CAAArzC,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,uBACAg+C,cAAA,CAAAj+C,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,sCA8FA,MAAA,CACAu+C,WA5FA,WACA,IAAA3+C,EAAAp0B,EAAAq0B,QACA1Q,EAAA,GAYA,OAXAA,EAAAzqB,SAAAk7B,EAAAE,QAEAZ,EAAAkC,UAAA,aAAA6/C,GACAv8E,SAAAC,KAAA,SAAAjD,GACAytB,EAAA1tB,KAAAsf,MAAAoO,EAAAztB,EAAA48E,QACA1+C,EAAAhrB,QAAAua,IAEA,SAAAlpB,GACA25B,EAAA/qB,OAAAvF,eAGA6f,GA+EAikD,UA5EA,SAAAhtE,GACA,OAAA84B,EAAAkC,UAAA,YAAA6/C,EAAA,CAAA76E,GAAAA,KA4EA43E,cAzEA,SAAA5jE,EAAA5a,GAEA,IAAA06E,EAAA1uE,EAAAq0B,QAiEA,OA/DAX,EAAAkC,UACA,gBACA6/C,EACA,CACAx6C,YAAArsB,EACAssB,UAAAlnC,IAGAkF,SAAAC,KAAA,SAAAjD,GAEA,IAAAumD,EAAA,GACAA,EAAAxmD,KAAA,CACA2E,GAAA,OACAvH,MAAA,OACA0N,KAAA,OACAxC,EAAA,KAGAk+C,EAAAxmD,KAAA,CACA2E,GAAA,UACAvH,MAAAP,EAAAM,QAAA,iBACA2N,KAAA,SACAxC,EAAA,KAGAk+C,EAAAxmD,KAAA,CACA2E,GAAA,eACAvH,MAAAP,EAAAM,QAAA,yBACA2N,KAAA,SACAxC,EAAA,KAGAk+C,EAAAxmD,KAAA,CACA2E,GAAA,cACAvH,MAAAP,EAAAM,QAAA,kBACA2N,KAAA,SACAxC,EAAA,KAIA,IADA,IAAA7B,EAAA,GACA0vB,EAAA,EAAAA,EAAAl2B,EAAAqB,OAAA60B,IAAA,CACA,IAAApG,EAAA9vB,EAAAk2B,GACAhiB,EAAA,CACAuc,EAAA,CACA,CAAA3vB,EAAAnD,OAAAmyB,EAAAA,KAAAhyB,UACA,CAAAgD,EAAAgvB,EAAA0vD,OACA,CAAA1+E,EAAAgvB,EAAA2vD,YACA,CAAA3+E,EAAA,OAIA0F,EAAAzG,KAAAmU,GAGAskE,EAAAtlE,QAAA,CACAqzC,KAAAA,EACA//C,KAAAA,KAGA,SAAA2Q,GACAqhE,EAAArlE,OAAAgE,KAGAqhE,EAAAp6C,aCpGA7hC,MAAAkF,WAAA,YAAA,CAAA,SAAA,WAAA,cAAA,qBAAA,cAAA,mBAAA,aAAA,aACA,SAAAG,EAAAwO,EAAArL,EAAA26E,EAAA76E,EAAAf,EAAAnD,EAAAg/E,GAEA/9E,EAAAo7C,MAAAj4C,EAAAi4C,MAEAp7C,EAAAytD,KAAAtqD,EAAAuqD,eACA1tD,EAAAg+E,eAAAD,EAAAE,oBAEAh7E,EAAAi7E,iBACA78E,KAAA,SAAA6W,GACAA,GACA/U,EAAAU,SAAA,kBACA7D,EAAAglD,iBAAA84B,EAAAn5D,OAAAzM,EAAApV,OAKA9C,EAAA2L,eAAAzJ,EAAAE,SAAAuJ,eACA3L,EAAAi2D,0BAAA/zD,EAAAE,SAAA6zD,0BACAj2D,EAAAm+E,sBAAAj8E,EAAAE,SAAA+7E,sBACAn+E,EAAA2xD,mBAAA5yD,EAAA4yD,mBACA3xD,EAAAo+E,4CAAAr/E,EAAA4yD,oBAAA5yD,EAAAs/E,yBAAA3sB,uBAEA1xD,EAAAyxD,cAAAr1D,EAAAsK,KAAA3H,EAAA+uC,kBAAA,CAAAlnC,UAAA,IACA5G,EAAAs+E,wBAAAp8E,EAAAE,SAAAm8E,iBACAv+E,EAAAw+E,qBAAAt8E,EAAAE,SAAAq8E,sBACAz+E,EAAAmtE,mBAAAjrE,EAAAE,SAAA+qE,mBACAntE,EAAA0+E,yBAAAx8E,EAAAE,SAAAs8E,yBACA1+E,EAAA2+E,qBAAAz8E,EAAAE,SAAAsoD,sBACA1qD,EAAA4+E,kBAAA18E,EAAAE,SAAAw8E,kBACA5+E,EAAAmC,sBAAAD,EAAAE,SAAAD,sBAEAnC,EAAA6+E,iBAAA,WACA1vE,EAAA,QAAA2vE,YAAA,YACAtwE,EAAA,WACAW,EAAA,QAAA4vE,UACA,SCpCApkF,MAAAkF,WAAA,aAAA,CAAA,SAAA,WAAA,aAAA,kBAAA,gBAAA,cAAA,SACA,SAAAG,EAAAwO,EAAAxT,EAAA0rC,EAAAr7B,EAAAlI,EAAAlD,GAqCA,IAAA++E,EAnCAh/E,EAAAi/E,gBAAAv4C,EAAAu4C,kBACAj/E,EAAAk/E,gBAAA/7E,EAAA+7E,kBAEAl/E,EAAAm/E,eAAA,SAAAC,GACA14C,EAAAC,eAAAy4C,GACA52C,SAAA5K,UAMA59B,EAAAq/E,2BAAA,GAwBAL,EAvBAt4C,EAAAs4C,mBAwBApkF,QAAA0K,QAAA05E,EAAA,SAAAM,EAAA5jF,GACA2b,EAAA,CACAnS,KAAA,kCAAAo6E,EAAAC,IAAA,iBAAAvkF,EAAAM,QAAAgkF,EAAAE,WACAlxE,MAAA,mBAAAgxE,EAAA5jF,IAAA,MAEAmD,KAAAV,KAAAkZ,IACArX,EAAAq/E,4BA5BAr/E,EAAAy/E,uBAAA,WACAtwE,EAAA,QAAA2vE,YAAA,eACAtwE,EAAA,WACAW,EAAA,QAAA4vE,UACA,MA2BA,IAAAW,EAAAz/E,EAAA,CACAL,YAAA,8BACA4B,OA1BAxB,EAAA2/E,QAAA,WACAt0E,EAAA6B,eAAA,CACA7R,MAAA,yBACA8R,QAAA,4BACAC,QAAA,CAAA,CACAlI,KAAA,kBACA,CACAA,KAAA,mBACAE,SAAA,WAAAjC,EAAAy8E,qBAmBA59E,MAAAhC,EAAAiC,SAGAjC,EAAA6/E,OAAA,WACAH,EAAAt+E,SAAAC,KAAA,WACAq+E,EAAA1/E,OAAA8/E,SAAA,EACAJ,EAAAl+E,UAIAxB,EAAAk/E,iBACAQ,EAAAt+E,SAAAC,KAAA,WACAq+E,EAAA1/E,OAAA8/E,SAAA,EACAJ,EAAAl+E,YC9DA7G,MAAAkF,WAAA,mBAAA,CAAA,KAAA,SAAA,SAAA,aAAA,UAAA,kBAAA,cAAA,gBAAA,cACA,SAAAqI,EAAAlI,EAAAC,EAAAjF,EAAAoN,EAAA23E,EAAA98E,EAAAg3C,EAAA5xC,GAEA,IAAA23E,EAAA/8E,EAAAc,kBACAo2C,EAAAF,EAAA/yC,cAEAgB,EAAAiD,IAAA,CAAA60E,EAAA7lC,EAAA/4C,WAAAC,KAAA,SAAAjD,GACA8Z,EAAA9Z,EAAA,GAEA4B,EAAAiE,WADAiU,EACAA,EAAApV,GAEA,KAGA9C,EAAA8jD,aAAAi8B,EAAA17B,wBACA,MAAAnsC,EAAAA,EAAApV,GAAA,KACA9C,EAAA4S,aAEA5S,EAAA07E,YAAA,OAGA17E,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAiE,aACAjE,EAAA8jD,aAAAi8B,EAAA17B,wBAAArkD,EAAAiE,WAAAjE,EAAA4S,aAAA,GACA5S,EAAA07E,YAAA,QAIA17E,EAAA6E,iBAAA,SAAAsT,GACAA,IACAnY,EAAA8jD,aAAAi8B,EAAA17B,wBAAAlsC,EAAAnY,EAAA4S,aACA5S,EAAA07E,YAAA,OAIA17E,EAAAigF,kBAAA,SAAArtE,GACA5S,EAAAiE,aACAjE,EAAA8jD,aAAAi8B,EAAA17B,wBAAArkD,EAAAiE,WAAA2O,GACA5S,EAAA07E,YAAA,OAIA17E,EAAAM,aAAA,CACAwE,KAAA,eACAvE,QAAA,CACA,CACAC,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,YACAwC,UAAA,QAEA,CACAJ,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,YAEA,CACAoC,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAAo5C,QAEAxhD,MAAA,SAEA,CAAAH,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UACA,CAAAF,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,OAAAjE,OAAA,CAAAsI,IAAA,kBAAApE,MAAA,SACA,CACAH,UAAA,SACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAsmD,UAAA,OACAl+C,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAA4zB,SAEAh8B,MAAA,SAEA,CAAAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,wBAAAoF,SAAA,OAAAjE,OAAA,CAAAsI,IAAA,kBAAApE,MAAA,SACA,CAAAH,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,YAAAoF,SAAA,UACA,CACAF,UAAA,cACAC,QAAAzF,EAAAM,QAAA,eACAoF,SAAA,UACAoI,mBAAA,SAAAC,GACA,QAAAA,EAAAm3E,aAEAv/E,MAAA,QAEA,CACAH,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAsmD,UAAA,OACAl+C,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAAquC,QAEAz2C,MAAA,SAEA,CAAAH,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,4BAAAoF,SAAA,SAAAC,MAAA,QAAAukB,SAAA,IAEAjgB,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,+BACA6J,UAAA,SAAAyW,GAAA,QAAAA,IAAAA,EAAAskE,aACA96E,SAAA,SAAA4E,GAAAhK,EAAAmgF,mBAAAn2E,KACA,CACA9E,KAAAlK,EAAAM,QAAA,8BACA6J,UAAA,SAAAyW,GAAA,QAAAA,GAAA,IAAAA,EAAA+gB,QACAv3B,SAAA,SAAA4E,GAAAhK,EAAAogF,mBAAAp2E,KACA,CACA9E,KAAAlK,EAAAM,QAAA,kCACA6J,UAAA,SAAAyW,GAAA,QAAAA,GAAA,IAAAA,EAAA+gB,QACAv3B,SAAA,SAAA4E,GAAAhK,EAAAqgF,sBAAAr2E,MAEAs2E,YAAA,SAAAz/E,GACAA,EAAAuI,UAAA0sC,cAWA,SAAAyqC,GACA,IAAA,IAAAhnE,EAAAinE,EAAA,EAAAjnE,EAAAgnE,EAAA35B,cAAArtC,IACAgnE,EAAA93E,aAAA8Q,EAAA,WAAA,GAZAknE,CAAA5/E,EAAAuI,YAEAs3E,WAAA,SAAA7/E,IAcA,SAAA0/E,GACA,IAAA,IAAAhnE,EAAAinE,EAAA,EAAAjnE,EAAAgnE,EAAA35B,cAAArtC,IACAgnE,EAAA93E,aAAA8Q,EAAA,WAAA,GAfAonE,CAAA9/E,EAAAuI,WACAvI,EAAAuI,UAAAsY,cAIA,IAAA8+D,GAAA,EAeAA,EAAAxgF,EAAAM,aAAAC,QAAAd,OACA06C,EAAA/4C,SAAAC,KAAA,SAAAwqB,GACA,IAAA,IAAA0C,EAAA,EAAAA,EAAA4rB,EAAA16C,OAAA8uB,IAAA,CACA,IAAAqyD,EAAAzmC,EAAA5rB,GAAAzpB,KACA9E,EAAAM,aAAAC,QAAApC,KAAA,CACAqC,UAAA,QACAC,QAAAmgF,EACAlgF,SAAA,UACAsmD,UAAA,OACAl+C,mBAAA,SAAAC,GACA83E,EAAA5mC,EAAAhsC,IAAAlF,EAAAquC,OACA,QAAAypC,GAAAA,EAAA/7E,MAAAjG,KAAA4B,SAEAE,MAAA,OACAukB,SAAA,OAUAllB,EAAA8gF,mBAAA,CAAA1pC,MAAA,EAAA2pC,YAAA,IAAAzkF,KAAA0kF,KAAA,IAEAhhF,EAAAkB,UAAA,SAAA9C,GACA4B,EAAA8gF,mBAAAlmF,QAAA2G,KAAAnD,GAGA4B,EAAA8gF,mBAAAC,YAAA3iF,EAAA2iF,aAAA,IAAAzkF,KAEA0D,EAAAihF,uBAAArmF,QAAA2G,KAAAvB,EAAA8gF,oBAEA3/E,EAAAC,SAAAC,KAAA,WACArB,EAAA4C,YAAA,KACAzB,EAAAK,UAIAxB,EAAA4C,YAAA,KAEA5C,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAihF,yBAGAjhF,EAAAkhF,yBAAA,SAAA9iF,GACA2hF,EAAAh9E,OAAA3E,EAAA,SAAAmmD,GACApjD,EAAAkS,QACA,SAAArH,GACAhM,EAAA4C,YAAAoJ,KAIAhM,EAAA2B,YAAA,SAAAvD,GACA2hF,EAAAn+E,OAAAxD,IAOA4B,EAAAmhF,wBAAA,GACAnhF,EAAAohF,4BAEAphF,EAAAmgF,mBAAA,SAAA/hF,GACA4B,EAAAmhF,wBAAAE,oBAAA,MAAAjjF,EAAAijF,oBACAjjF,EAAAijF,oBACArhF,EAAAiE,WACAjE,EAAAmhF,wBAAAjB,YAAA,MAAA9hF,EAAA8hF,YACA9hF,EAAA8hF,YACAlgF,EAAA07E,YAAAr3E,SAEArE,EAAAohF,4BAAAxmF,QAAA2G,KAAAvB,EAAAmhF,yBAEAG,EAAAlgF,SAAAC,KAAA,WACArB,EAAAuhF,sBAAA,KACAD,EAAA9/E,UAIAxB,EAAAwhF,uBAAA,SAAApjF,GACAqjF,EAAA7mF,QAAA2G,KAAAnD,GAEAqjF,EAAA15E,UAAA/H,EAAA07E,YAAA3zE,UACA05E,EAAAp1C,iBAAArsC,EAAA07E,YAAArvC,iBACArsC,EAAAuhF,sBAAA,KAEAxB,EAAAz7B,iBAAAm9B,EAAA,SAAAl9B,GACA+8B,EAAAjuE,QACA,SAAArH,GACAhM,EAAAuhF,sBAAAv1E,KAQAhM,EAAA0hF,wBAAA,GACA1hF,EAAA2hF,4BAEA3hF,EAAA4hF,cAAA,SAAAxjF,GAEA4B,EAAA0hF,wBAAA35E,UAAA,KACA/H,EAAA0hF,wBAAAr9E,SAAA,KACArE,EAAA0hF,wBAAAr1C,iBAAA,KACArsC,EAAA0hF,wBAAAz9E,WAAAjE,EAAAiE,WAEAjE,EAAA2hF,4BAAA/mF,QAAA2G,KAAAvB,EAAA0hF,yBAEAG,EAAAzgF,SAAAC,KAAA,WACArB,EAAA8hF,iBAAA,KACAD,EAAArgF,UAIAxB,EAAA+hF,uBAAA,SAAA3jF,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAA2hF,8BAGA3hF,EAAAgiF,kBAAA,SAAA5jF,GACA2hF,EAAA/8E,OAAA5E,EAAA,SAAAmmD,GACAs9B,EAAAxuE,QACA,SAAArH,GACAhM,EAAA8hF,iBAAA91E,KAgBA,IAAAi2E,EAAAhiF,EAAA,CACAL,YAAA,sDACA4B,OAVAxB,EAAAogF,mBAAA,SAAAhiF,GACA4B,EAAAkiF,qBAAAtnF,QAAA2G,KAAAnD,GAEA6jF,EAAA7gF,SAAAC,KAAA,WACA4gF,EAAAzgF,WAOAQ,MAAAhC,IAGAA,EAAAmiF,gBAAA,SAAA/jF,GACA2hF,EAAAv7B,iBAAApmD,IAOA4B,EAAAqgF,sBAAA,SAAAjiF,GACA4B,EAAAoiF,wBAAAxnF,QAAA2G,KAAAnD,GAEAikF,EAAAjhF,SAAAC,KAAA,WACAghF,EAAA7gF,UAQA,IAAA6gF,EAAApiF,EAAA,CACAL,YAAA,sDACA4B,OANAxB,EAAAsiF,mBAAA,SAAAlkF,GACA2hF,EAAAt7B,kBAAArmD,KAMA4D,MAAAhC,IAKAA,EAAA07E,YAAA,GAEA17E,EAAAiB,cAAA,SAAA7C,GACA4B,EAAA07E,YAAAt9E,GAGA4B,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,uCAEA,CACAzG,MAAA,WACAyG,SAAA,uCAEA,CACAzG,MAAA,oBACAyG,SAAA,iDAIA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,EAAAC,SAAAA,MAGA,IAAA87E,EAAA5hF,EAAA,CACAL,YAAA,gDACA4B,MAAA,EACAQ,MAAAhC,IAGAshF,EAAArhF,EAAA,CACAL,YAAA,sDACA4B,MAAA,EACAQ,MAAAhC,IAGAmB,EAAAlB,EAAA,CACAL,YAAA,0CACA4B,MAAA,EACAQ,MAAAhC,OCnWArF,MAAAkF,WAAA,gCAAA,CAAA,SAAA,aAAA,WAAA,kBACA,SAAAG,EAAAhF,EAAAwT,EAAAuxE,GAEA//E,EAAA8W,SAAA/a,SAAA8U,SAAA,EAAA,UAAA3U,SACA8D,EAAA9D,OAAAH,SAAA2d,IAAA,EAAA,OAAAxd,SAGA,IAAA0K,IADA5G,EAAAuiF,MAAA,IAEA17E,GAAA,EAgBA,SAAA4P,IACAzW,EAAA8W,UAAA9W,EAAA9D,QACA8D,EAAAuiF,MAAAxC,EAAA37B,4BAAApkD,EAAA8W,SAAA9W,EAAA9D,QACA8D,EAAAuiF,MAAAnhF,SAAAC,KAAA,SAAAjD,GAEA4B,EAAAwiF,yBAAApkF,KACA2hF,EAAAr7B,4BAAAtmD,OAIA4B,EAAAuiF,MAAA,GACAviF,EAAAwiF,yBAAApkF,KACA2hF,EAAAr7B,4BAAA,KA1BA1kD,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,EACAC,IACA4P,IACA5P,GAAA,IAIAD,GAAA,IAqBA5G,EAAAmrB,mBAAA,WACA1U,KAGAzW,EAAAwiF,yBAAA,CACAv5E,KAAA,WACA7K,KAAA2hF,EAAAr7B,4BAAA,IACA5sC,QAAA,CACA0nD,oBAAA,EACAE,UAAA,CAAA/+D,MAAA,MAAA6hB,OAAA,OACAm9C,OAAA,CACAjtB,SAAA,OAEAkoC,MAAA,GACAC,MAAA,GACAC,YAAA,eAKA96E,EAAAyiF,qCAAA,CACA39E,KAAA,0BACAvE,QAAA,CACA,CAAAC,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,qBAAAoF,SAAA,UACA,CAAAF,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,qBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,qCAAAC,QAAAzF,EAAAM,QAAA,qBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,iCAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,aCjEAhG,MAAAkF,WAAA,sBAAA,CAAA,SAAA,SAAA,KAAA,cAAA,qBACA,SAAAG,EAAAC,EAAAiI,EAAAjF,EAAA66E,GACA99E,EAAAyS,cAAA,CACAC,WAAA,IAGAzP,EAAAc,kBAEA1C,KAAA,SAAA6W,GAEAlY,EAAAiE,WADAiU,EACAA,EAAApV,GAEA,KAGA9C,EAAAglD,iBAAA84B,EAAAn5D,OACA,MAAAzM,EAAAA,EAAApV,GAAA,QAGA9C,EAAA6E,iBAAA,SAAAsT,GACAA,IACAnY,EAAAglD,iBAAA84B,EAAAn5D,OAAAxM,GACAnY,EAAA07E,YAAA,OAIA17E,EAAAiB,cAAA,SAAA7C,GACA4B,EAAA07E,YAAAt9E,GAGA4B,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,WAAAC,WAAA,CAAA,QACAC,WAAA,CAAA,CAAAC,MAAA,UAAAE,YAAA,kBAAA3V,MAAA,SACA,CAAAyV,MAAA,SAAAE,YAAA,kBACA,CAAAF,MAAA,SAAAE,YAAA,iBAAA3V,MAAA,QAAA0V,WAAA,gBACA,CAAAD,MAAA,YAAAE,YAAA,qBAAA3V,MAAA,QAAA0V,WAAA,kBAIArW,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,2CAGA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAAiB,cAAA,SAAA7C,GACA4B,EAAA07E,YAAAt9E,GAGA4B,EAAAkB,UAAA,SAAA9C,GACA4B,EAAA0iF,sBAAA9nF,QAAA2G,KAAAnD,GAEA4B,EAAA0iF,sBAAAz+E,WAAAjE,EAAAiE,WACAjE,EAAA0iF,sBAAAr+E,SAAAjG,EAAAiG,SACArE,EAAA0iF,sBAAAr2C,iBAAAjuC,EAAAiuC,iBACArsC,EAAA0iF,sBAAAt9B,WAAAhnD,EAAA0E,GAEA9C,EAAA2iF,0BAAA/nF,QAAA2G,KAAAvB,EAAA0iF,uBAEAvhF,EAAAC,SAAAC,KAAA,WACArB,EAAA4C,YAAA,KACAzB,EAAAK,UAIAxB,EAAA4iF,4BAAA,SAAAxkF,GAEA4B,EAAA4C,YAAA,KAEAk7E,EAAA34B,WAAA/mD,EACA,SAAAmmD,GACApjD,EAAAkS,QACA,SAAArH,GACAhM,EAAA4C,YAAAoJ,KAIAhM,EAAA4C,YAAA,KAEA,IAAAzB,EAAAlB,EAAA,CACAL,YAAA,6CACA4B,MAAA,EACAQ,MAAAhC,OCpFArF,MAAAkF,WAAA,iBAAA,CAAA,SAAA,SAAA,gBACA,SAAAG,EAAAC,EAAAg6C,GAEAj6C,EAAAm6C,WAAAF,EAAA/yC,cAEAlH,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,QAAAC,WAAA,CAAA,QACAC,WAAA,CAAA,CAAAC,MAAA,OAAAE,YAAA,eAAA3V,MAAA,SACA,CAAAyV,MAAA,cAAAE,YAAA,yBAGAtW,EAAA6iF,gBAAA,CAAA/9E,KAAA,GAAAuzC,YAAA,IACAr4C,EAAA8iF,oBAEA9iF,EAAAkB,UAAA,SAAA9C,GACA4B,EAAA6iF,gBAAA//E,GAAA1E,EAAA0E,GACA9C,EAAA6iF,gBAAA/9E,KAAA1G,EAAA0G,KACA9E,EAAA6iF,gBAAAxqC,YAAAj6C,EAAAi6C,YAEAr4C,EAAA8iF,oBAAAloF,QAAA2G,KAAAvB,EAAA6iF,iBAEA1hF,EAAAC,SAAAC,KAAA,WACArB,EAAA4C,YAAA,KACAzB,EAAAK,UAIAxB,EAAA4C,YAAA,KAEA5C,EAAAyB,SAAA,WACAzB,EAAA6iF,gBAAA//E,IAAA,EACA9C,EAAA6iF,gBAAA/9E,KAAA,GACA9E,EAAA6iF,gBAAAxqC,YAAA,GAEAr4C,EAAA8iF,oBAAAloF,QAAA2G,KAAAvB,EAAA6iF,iBAEA1hF,EAAAC,SAAAC,KAAA,WACArB,EAAA4C,YAAA,KACAzB,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACA67C,EAAAr4C,OAAAxD,IAGA4B,EAAA+iF,sBAAA,SAAA3kF,GACA67C,EAAAtc,KAAAv/B,EAAA,SAAAmmD,GACApjD,EAAAkS,QACA,SAAArH,GACAhM,EAAA4C,YAAAoJ,KAQA,IAAA7K,EAAAlB,EAAA,CACAL,YAAA,wCACA4B,OANAxB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAA8iF,uBAMA9gF,MAAAhC,OCjEArF,MAAAkF,WAAA,iBAAA,CAAA,SAAA,SAAA,aAAA,UAAA,UAAA,gBAAA,uBAAA,cACA,SAAAG,EAAAC,EAAAjF,EAAAoN,EAAAD,EAAA66E,EAAAC,EAAA9/E,GAoJA,IAAA+/E,EAEA,SAAAC,EAAA/kF,GACA4B,EAAA07E,YAAAt9E,GAAA,GACAA,EAGA8kF,IAAA9kF,EAAA0E,KACAogF,EAAA9kF,EAAA0E,GACA9C,EAAAojF,2BAAAH,EAAAI,wBAAAjlF,EAAA0E,KAJA9C,EAAAojF,2BAAA,GAvJApjF,EAAAsjF,YAAAN,EAAA97E,cAEAlH,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAsjF,YAAAN,EAAA97E,aAAA,GACAi8E,EAAA,QAGAnjF,EAAAM,aAAA,CACAwE,KAAA,cACAvE,QAAA,CACA,CAAAC,UAAA,KAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAE,UAAA,MAAAD,MAAA,SACA,CAAAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,UACA,CAAAF,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,SACA,CACAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,wBAAAoF,SAAA,SACAjE,OAAA,SAAAd,GACA,OAAAyM,EAAA,YAAAA,CAAAzM,IACAgF,MAAA,QAEA,CAAAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,wBAAAoF,SAAA,UAAAC,MAAA,QACA,CACAH,UAAA,uBACAC,QAAAzF,EAAAM,QAAA,kBACAoF,SAAA,UACAoI,mBAAA,SAAAC,GACA,GAAAA,EAAAw6E,qBACA,OAAA,EAGA,IAAAC,EAAAznF,OAAAgN,EAAAy6E,WACAC,EAAA1nF,OAAAgN,EAAA06E,SAEA,OAAA1nF,SAAA2nF,UAAAF,EAAAC,IAEA9iF,MAAA,UAKAX,EAAAqpD,qBAAA,CACAvkD,KAAA,6BACAmgB,yBAAA,EACA1kB,QAAA,CACA,CAAAC,UAAA,sBAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAE,UAAA,QACA,CAAAJ,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,OAAAjE,OAAA,CAAAb,KAAA,SAAA+E,MAAA,SACA,CAAAH,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAC,MAAA,SACA,CACAH,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAAo5C,QAEAxhD,MAAA,SAEA,CAAAH,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,QACA,CACAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,wBAAAoF,SAAA,SACAjE,OAAA,SAAAd,GACA,OAAAyM,EAAA,YAAAA,CAAAzM,IACAgF,MAAA,QAEA,CAAAH,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAjE,OAAA,qBAAAkE,MAAA,SACA,CACAH,UAAA,YACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,UACAoI,mBAAA,SAAAC,GACA,QAAAA,EAAAwB,WAEA5J,MAAA,OACAukB,SAAA,GAEA,CAAA1kB,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,UAAAC,MAAA,SAEAwG,iBAAA,WAAA,OAAAnH,EAAA07E,YAAA54E,IACAmC,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,0BACA6J,UAAA,SAAA6E,GAAA,OAAA7G,EAAAU,SAAA,YAAAV,EAAAU,SAAA,sCAAAmG,EAAAO,WACAnF,SAAA,SAAAhH,GAIAmM,EAJAnM,EAAAmM,UAKApC,EAAAuC,KAAA,kCAAAH,EAAA,kBACA,SAAA,qHAKAvK,EAAA2jF,iBAAA,GACA3jF,EAAA4jF,qBAEA5jF,EAAAkB,UAAA,SAAA9C,GACA4B,EAAA2jF,iBAAA/oF,QAAA2G,KAAAnD,GACA4B,EAAA4jF,qBAAAhpF,QAAA2G,KAAAnD,GAEA+C,EAAAC,SAAAC,KAAA,WACArB,EAAA4C,YAAA,KACA5C,EAAAiG,WAAAlE,UAAA,EACAZ,EAAAK,UAIAxB,EAAA4C,YAAA,KAEA5C,EAAAyB,SAAA,WAEAzB,EAAA2jF,iBAAA7gF,IAAA,EACA9C,EAAA2jF,iBAAA7+E,KAAA,GACA9E,EAAA2jF,iBAAAtrC,YAAA,GACAr4C,EAAA2jF,iBAAAE,aAAA,EACA7jF,EAAA2jF,iBAAAG,oBAAA,EACA9jF,EAAA2jF,iBAAAn2D,MAAA,EACAxtB,EAAA2jF,iBAAAI,YAAA,EACA/jF,EAAA2jF,iBAAAJ,qBAAA,KACAvjF,EAAA2jF,iBAAAH,eAAAhgE,EACAxjB,EAAA2jF,iBAAAF,aAAAjgE,EACAxjB,EAAA2jF,iBAAAK,gBAAA,EACAhkF,EAAA2jF,iBAAAM,gBAAA,EAEAjkF,EAAA4jF,qBAAAhpF,QAAA2G,KAAAvB,EAAA2jF,kBAEAxiF,EAAAC,SAAAC,KAAA,WACArB,EAAA4C,YAAA,KACA5C,EAAAiG,WAAAlE,UAAA,EACAZ,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACA4kF,EAAAphF,OAAAxD,EAEA,WACA4B,EAAA07E,YAAA,GACAwH,EAAA,KAIAljF,EAAA07E,YAAA,GACA17E,EAAAojF,2BAAA,GAgBApjF,EAAAiB,cAAA,SAAA7C,GACA+kF,EAAA/kF,IAGA4B,EAAAkkF,uBAAA,SAAA9lF,GACA4kF,EAAArlD,KAAAv/B,EAAA,SAAAmmD,GACApjD,EAAAkS,QACA,SAAArH,GACAhM,EAAA4C,YAAAoJ,KAIAhM,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAA4jF,uBAGA5jF,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,yCAEA,CACAzG,MAAA,gBACAyG,SAAA,0CAEA,CACAzG,MAAA,mBACAyG,SAAA,8CAIA9B,EAAAiG,WAAAlE,UAAA,EAEA,IAAAZ,EAAAlB,EAAA,CACAL,YAAA,+BACA4B,MAAA,EACAQ,MAAAhC,IAOAA,EAAAmkF,wBAAA,GACAnkF,EAAAokF,4BACApkF,EAAAqkF,6BAAA,KAEArkF,EAAAskF,YAAA,SAAAlmF,GACA4B,EAAAmkF,wBAAAvpF,QAAA2G,KAAAnD,GACA4B,EAAAokF,4BAAAxpF,QAAA2G,KAAAnD,GAEAmmF,EAAAnjF,SAAAC,KAAA,WACArB,EAAAqkF,6BAAA,KACAE,EAAA/iF,UAIAxB,EAAAwkF,WAAA,WACAxkF,EAAAmkF,wBAAAM,oBAAA,KACAzkF,EAAAmkF,wBAAAp8E,UAAA,KACA/H,EAAAmkF,wBAAA/kE,MAAA,KACApf,EAAAmkF,wBAAAO,aAAA1kF,EAAA07E,YAAA54E,GACA9C,EAAA07E,YAAA6H,sBACAvjF,EAAAmkF,wBAAAX,UAAA,IAAAlnF,KACA0D,EAAAmkF,wBAAAV,QAAA1nF,OAAAiE,EAAAmkF,wBAAAX,WACA9pE,IAAA,IAAA1Z,EAAA07E,YAAA6H,sBACArnF,WAEA8D,EAAAmkF,wBAAAX,UAAAxjF,EAAA07E,YAAA8H,UACAxjF,EAAAmkF,wBAAAV,QAAAzjF,EAAA07E,YAAA+H,SAEAzjF,EAAAmkF,wBAAA32D,MAAA,EACAxtB,EAAAmkF,wBAAAJ,YAAA/jF,EAAA07E,YAAAqI,YACA/jF,EAAAmkF,wBAAAF,eAAAjkF,EAAA07E,YAAAuI,eACAjkF,EAAAmkF,wBAAAH,eAAAhkF,EAAA07E,YAAAsI,eACAhkF,EAAAmkF,wBAAAtxE,OAAA,EAEA7S,EAAAokF,4BAAAxpF,QAAA2G,KAAAvB,EAAAmkF,yBAEAI,EAAAnjF,SAAAC,KAAA,WACArB,EAAAqkF,6BAAA,KACAE,EAAA/iF,UAIAxB,EAAA2kF,cAAA,SAAAvmF,GACA6kF,EAAArhF,OAAAxD,IAGA4B,EAAA4kF,mCAAA,SAAAxmF,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAokF,8BAqBA,IAAAG,EAAAtkF,EAAA,CACAL,YAAA,uCACA4B,OApBAxB,EAAA6kF,8BAAA,SAAAzmF,GAOA,SAAAqE,IACA8hF,EAAAlxE,OAGA,SAAA1Q,EAAAqJ,GACAhM,EAAAqkF,6BAAAr4E,EAXA5N,EAAAyU,MACAowE,EAAAjgF,OAAA5E,EAAAqE,EAAAE,GAEAsgF,EAAAlgF,OAAA3E,EAAAqE,EAAAE,KAiBAX,MAAAhC,IAKAA,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,oCAEA,CACAzG,MAAA,mBACAyG,SAAA,yCAIA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,SCxSAnL,MAAA2pB,OAAA,wBAAA,CAAA,aAAA,SAAAtpB,GACA,OAAA,SAAAS,GACA,IAAAowB,EAAA,GAYA,OAXApwB,EAAAwoF,iBACAp4D,EAAA7wB,EAAAM,QAAA,oBAEAG,EAAAuoF,iBACAn4D,EACAA,GAAA,KAAA7wB,EAAAM,QAAA,mBAEAuwB,EAAA7wB,EAAAM,QAAA,oBAIAuwB,MChBAlxB,MAAAkF,WAAA,gBAAA,CAAA,SAAA,SAAA,aAAA,WAAA,KAAA,cACA,SAAAG,EAAAC,EAAAjF,EAAAwT,EAAAtG,EAAA48E,GAEA,SAAA1zE,EAAAC,GAEA,OAAAnJ,EAAA,SAAAoJ,EAAAC,GACA,IAAAC,EAAA,KACAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cAAA4N,IACAG,EAAAxR,EAAAM,aAAAmD,aAAAgO,sBAGAqzE,EAAAngE,QAAA,GACAvjB,SAAAC,KAAA,SAAAjD,GACA4B,EAAA+kF,UAAA3mF,EAEAoT,GAAAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cAAA4N,EACA7C,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAAkN,GAAA,GAAAnQ,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACAulF,EAAA,SAGA,KAGAA,EAAA,MAGA1zE,KAEA,SAAA3O,GACA3C,EAAA+kF,UAAA,GACAC,EAAA,MAEAzzE,QA8DA,SAAAyzE,EAAAC,GACAjlF,EAAAklF,iBAAAD,EACAjlF,EAAA2D,WAAA,2BAAA3D,EAAAklF,kBA3DA9zE,IAEApR,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,GAAA,KAGApR,EAAAM,aAAA,CACAwE,KAAA,YACAkgB,QAAA,KACAzkB,QAAA,CACA,CAAAC,UAAA,KAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,QAAAC,UAAA,OACA,CAAAJ,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,SAAAC,MAAA,UAKAX,EAAAiB,cAAA,SAAA7C,GACA4mF,EAAA5mF,IAGA4B,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAAwjF,EAAApjF,YACAP,EAAAnB,OAAAmlF,eAAA,SAAA7jF,GACA8P,IAAA/P,KAAA,WACArB,EAAAM,cAAAN,EAAAM,aAAAmD,cACA+K,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAA,CAAAhD,EAAAwB,KAAA,GAAAzB,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACAulF,EAAA,SAGA,QAIA7jF,EAAAK,UAIAxB,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAAmlF,eAAA,WACA/zE,GAAA,IAEAjQ,EAAAK,UAgBA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,wCACA4B,OAdAxB,EAAA2B,YAAA,SAAAvD,GACA0mF,EAAAljF,OAAAxD,EAAA0E,IAAA1B,SAAAC,KAAA,WACA+P,QAaApP,MAAAhC,EAAAiC,YCzGAtH,MAAAkF,WAAA,sBAAA,CAAA,SAAA,SAAA,cACA,SAAAG,EAAAC,EAAA6kF,GAEA9kF,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAwC,aAAA,SAAApE,GAgBA,SAAAqE,EAAA0R,GACAnU,EAAAmlF,eAAAhxE,GACAnU,EAAA0C,QAGA,SAAAC,EAAAqJ,GACAhM,EAAA4C,YAAAoJ,EACAhM,EAAA6C,UAAA,EArBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,GAEAzE,EAAAyU,MACAiyE,EAAA9hF,OAAA5E,GAGA0mF,EAAA/hF,OAAA3E,IAFAgD,SAAAC,KAAAoB,EAAAE,KAiBA3C,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAIArC,EAAAknB,YAAA,WACA,OAAA,MCtCAvsB,MAAAkF,WAAA,qBAAA,CAAA,SAAA,SAAA,aAAA,WAAA,KAAA,kBAAA,uBACA,SAAAG,EAAAC,EAAAjF,EAAAwT,EAAAtG,EAAAk9E,EAAAC,GAEA,SAAAj0E,EAAAC,GAEA,OAAAnJ,EAAA,SAAAoJ,EAAAC,GACA,IAAAC,EAAA,KACAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cAAA4N,IACAG,EAAAxR,EAAAM,aAAAmD,aAAAgO,sBAGA2zE,EAAAzgE,QAAA,GACAvjB,SAAAC,KAAA,SAAAjD,GACA4B,EAAAslF,eAAAlnF,EAEAoT,GAAAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cAAA4N,EACA7C,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAAkN,GAAA,GAAAnQ,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACA8lF,EAAA,SAGA,KAGAA,EAAA,MAGAj0E,KAEA,SAAA3O,GACA3C,EAAAslF,eAAA,GACAC,EAAA,MAEAh0E,QAKAH,IAEA,IAAAo0E,EAAA,IAAAnzC,WAAAj0C,KAAAm8D,YAAA,CACA3iB,KAAA,SAAA4iB,GACA,OAAA6qB,EAAA1gE,SAAAvjB,UAEAq5D,MAAA,SAAA55D,GACA,OAAAwkF,EAAA9jE,QAAA1gB,IAEA65D,SAAA,cAgJA,SAAA6qB,EAAAE,GACAzlF,EAAA0lF,qBAAAD,EACAzlF,EAAA2D,WAAA,+BAAA3D,EAAA0lF,sBA/IA1lF,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,GAAA,KAGApR,EAAAM,aAAA,CACAwE,KAAA,iBACAkgB,QAAA,KACAzkB,QAAA,CACA,CAAAC,UAAA,KAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UAAAC,MAAA,QACA,CAAAH,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,QAAAC,UAAA,OACA,CAAAJ,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,6BAAAoF,SAAA,UACA,CACAF,UAAA,sBACAC,QAAAzF,EAAAM,QAAA,gCACAoF,SAAA,SACAC,MAAA,QACAukB,SAAA,EACAwtC,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA8tC,EACAl2C,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,SAGA,CACA5rB,UAAA,oBACAC,QAAAzF,EAAAM,QAAA,+BACAoF,SAAA,SACAgyD,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA,CACAzuC,KAAA,QACA7K,KAAA,CACA,CAAA0E,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,mCACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,uCAEAI,IAAA,MAEA4zC,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,QAEAzrB,MAAA,SAEA,CACAH,UAAA,oBACAC,QAAAzF,EAAAM,QAAA,2BACAoF,SAAA,SACAgyD,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA,CACAzuC,KAAA,QACA7K,KAAA,CACA,CAAA0E,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,oCACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,kDAEAI,IAAA,MAEA4zC,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,QAEAzrB,MAAA,WAMAX,EAAAiB,cAAA,SAAA7C,GACAmnF,EAAAnnF,IAGA4B,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA8jF,EAAA1jF,YACAP,EAAAnB,OAAA2lF,mBAAA,SAAArkF,GACA8P,IAAA/P,KAAA,WACArB,EAAAM,cAAAN,EAAAM,aAAAmD,cACA+K,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAA,CAAAhD,EAAAwB,KAAA,GAAAzB,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACA8lF,EAAA,SAGA,QAIApkF,EAAAK,UAIAxB,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAA2lF,mBAAA,WACAv0E,GAAA,IAEAjQ,EAAAK,UAIAxB,EAAA0F,UAAA,SAAAtH,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAAsB,MAAAuR,OAAA,EACA1R,EAAAnB,OAAAsB,MAAAwB,GAAA,KACA3B,EAAAnB,OAAA2lF,mBAAA,SAAArkF,GACA8P,IAAA/P,KAAA,WACArB,EAAAM,cAAAN,EAAAM,aAAAmD,cACA+K,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAA,CAAAhD,EAAAwB,KAAA,GAAAzB,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACA8lF,EAAA,SAGA,QAIApkF,EAAAK,UAgBA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,gDACA4B,OAdAxB,EAAA2B,YAAA,SAAAvD,GACAgnF,EAAAxjF,OAAAxD,EAAA0E,IAAA1B,SAAAC,KAAA,WACA+P,QAaApP,MAAAhC,EAAAiC,YCzMAtH,MAAAkF,WAAA,2BAAA,CAAA,SAAA,SAAA,kBACA,SAAAG,EAAAC,EAAAmlF,GAEA,SAAA75E,EAAAjK,GAEA,MAAAA,EAAAskF,iBACAtkF,EAAAukF,oBAAA9pF,SAAA6U,QAAA,OAAA8I,IAAApY,EAAAskF,eAAA,KAAA1pF,UAEA,MAAAoF,EAAAwkF,eACAxkF,EAAAykF,kBAAAhqF,SAAA6U,QAAA,OAAA8I,IAAApY,EAAAwkF,aAAA,KAAA5pF,UAEA,MAAAoF,EAAA0kF,iBACA1kF,EAAA2kF,oBAAAlqF,SAAA6U,QAAA,OAAA8I,IAAApY,EAAA0kF,eAAA,KAAA9pF,UAEA,MAAAoF,EAAA4kF,eACA5kF,EAAA6kF,kBAAApqF,SAAA6U,QAAA,OAAA8I,IAAApY,EAAA4kF,aAAA,KAAAhqF,UAIAqP,EAAAvL,EAAAsB,OAEAtB,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAGAtB,EAAAwC,aAAA,SAAApE,GAgBA,SAAAqE,EAAA0R,GACAnU,EAAA2lF,mBAAAxxE,GACAnU,EAAA0C,QAGA,SAAAC,EAAAqJ,GACAhM,EAAA4C,YAAAoJ,EACAhM,EAAA6C,UAAA,EArBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,GAEAzE,EAAAyU,MACAuyE,EAAApiF,OAAA5E,GAGAgnF,EAAAriF,OAAA3E,IAFAgD,SAAAC,KAAAoB,EAAAE,KAiBA3C,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAIArC,EAAAknB,YAAA,WACA,OAAA,GAGAlnB,EAAAkG,wBAAA,SAAA4N,GACA1X,EAAA46D,KAAAh3D,EAAAsB,MAAA21D,aAAA,GAAAnjD,IAqBA,IAAAxN,EAAArG,EAAA,CACAL,YAAA,4CACA4B,OApBAxB,EAAAuG,kBAAA,WACAD,EAAAlF,SAAAC,KAAA,WACAiF,EAAAtG,OAAAwG,mBAAA,SAAAJ,GAEApG,EAAAsB,MAAA21D,cACAj3D,EAAAsB,MAAA21D,YAAA,IAGAr8D,QAAA0K,QAAAc,EAAA,SAAAK,GACArK,EAAAsK,KAAA1G,EAAAsB,MAAA21D,YAAAxwD,EAAAywD,WACAl3D,EAAAsB,MAAA21D,YAAA94D,KAAAsI,EAAAywD,aAIA5wD,EAAA9E,WAOAQ,MAAAhC,EAAAiC,SAGAjC,EAAAomF,4BAAA,SAAAP,GACAvlD,EAAAvkC,OAAA8pF,GACAvlD,EAAArkC,UACA+D,EAAAsB,MAAAskF,eAAA,GAAAtlD,EAAA9L,OAAA8L,EAAA7L,SAEAz0B,EAAAsB,MAAAskF,eAAA,KAIA5lF,EAAAqmF,0BAAA,SAAAN,GACAzlD,EAAAvkC,OAAAgqF,GACAzlD,EAAArkC,UACA+D,EAAAsB,MAAAwkF,aAAA,GAAAxlD,EAAA9L,OAAA8L,EAAA7L,SAEAz0B,EAAAsB,MAAAwkF,aAAA,MAIA9lF,EAAAsmF,4BAAA,SAAAL,GACA3lD,EAAAvkC,OAAAkqF,GACA3lD,EAAArkC,UACA+D,EAAAsB,MAAA0kF,eAAA,GAAA1lD,EAAA9L,OAAA8L,EAAA7L,SAEAz0B,EAAAsB,MAAA0kF,eAAA,GAIAhmF,EAAAumF,0BAAA,SAAAJ,GACA7lD,EAAAvkC,OAAAoqF,GACA7lD,EAAArkC,UACA+D,EAAAsB,MAAA4kF,aAAA,GAAA5lD,EAAA9L,OAAA8L,EAAA7L,SAEAz0B,EAAAsB,MAAA4kF,aAAA,KAIAlmF,EAAAwmF,0BAAA,SAAAC,GACA,GAAAA,GAEAzmF,EAAAsB,MAAAskF,eAAA,KACA5lF,EAAAsB,MAAAwkF,aAAA,KACA9lF,EAAAsB,MAAA0kF,eAAA,KACAhmF,EAAAsB,MAAA4kF,aAAA,KAEAlmF,EAAAsB,MAAAolF,sBAAA,GACA1mF,EAAAsB,MAAAqlF,sBAAA,GACA3mF,EAAAsB,MAAAslF,sBAAA,IAEA5mF,EAAAsB,MAAAulF,kBAAA,IAGA7mF,EAAAsB,MAAAskF,eAAA,IACA5lF,EAAAsB,MAAAwkF,aAAA,KACA9lF,EAAAsB,MAAA0kF,eAAA,EACAhmF,EAAAsB,MAAA4kF,aAAA,IAEAlmF,EAAAsB,MAAAolF,sBAAA,EACA1mF,EAAAsB,MAAAqlF,sBAAA,EACA3mF,EAAAsB,MAAAslF,sBAAA,GAEA5mF,EAAAsB,MAAAulF,kBAAA,GAEAt7E,EAAAvL,EAAAsB,QAGAtB,EAAAiG,WAAA,CAAA,CACA5K,MAAA,WACAyG,SAAA,0DAEA,CACAzG,MAAA,mBACAyG,SAAA,kEAEA,CACAzG,MAAA,sBACAyG,SAAA,iEAEA,CACAzG,MAAA,mBACAyG,SAAA,+DAGA9B,EAAAiG,WAAAlE,UAAA,KC1KApH,MAAAkF,WAAA,yBAAA,CAAA,SAAA,SAAA,aAAA,WAAA,KAAA,uBACA,SAAAG,EAAAC,EAAAjF,EAAAwT,EAAAtG,EAAAm9E,GAEA,SAAAj0E,EAAAC,GAEA,OAAAnJ,EAAA,SAAAoJ,EAAAC,GACA,IAAAC,EAAA,KACAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cAAA4N,IACAG,EAAAxR,EAAAM,aAAAmD,aAAAgO,sBAGA4zE,EAAA1gE,QAAA,GACAvjB,SAAAC,KAAA,SAAAjD,GACA4B,EAAAslF,eAAAlnF,EAEAoT,GAAAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cAAA4N,EACA7C,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAAkN,GAAA,GAAAnQ,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACAqnF,EAAA,SAGA,KAGAA,EAAA,MAGAx1E,KAEA,SAAA3O,GACA3C,EAAAslF,eAAA,GACAwB,EAAA,MAEAv1E,QAqFA,SAAAu1E,EAAAC,GACA/mF,EAAAgnF,0BAAAD,EACA/mF,EAAA2D,WAAA,oCAAA3D,EAAAgnF,2BAlFA51E,IAEApR,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,GAAA,KAGApR,EAAAM,aAAA,CACAwE,KAAA,iBACAkgB,QAAA,KACAzkB,QAAA,CACA,CAAAC,UAAA,KAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UAAAC,MAAA,QACA,CAAAH,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,QAAAC,UAAA,OACA,CAAAJ,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,6BAAAoF,SAAA,YAKAV,EAAAiB,cAAA,SAAA7C,GACA0oF,EAAA1oF,IAGA4B,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA+jF,EAAA3jF,YACAP,EAAAnB,OAAAinF,wBAAA,SAAA3lF,GACA8P,IAAA/P,KAAA,WACArB,EAAAM,cAAAN,EAAAM,aAAAmD,cACA+K,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAA,CAAAhD,EAAAwB,KAAA,GAAAzB,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACAqnF,EAAA,SAGA,QAIA3lF,EAAAK,UAIAxB,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAAinF,wBAAA,WACA71E,GAAA,IAEAjQ,EAAAK,UAIAxB,EAAA0F,UAAA,SAAAtH,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAAsB,MAAAuR,OAAA,EACA1R,EAAAnB,OAAAsB,MAAAwB,GAAA,KACA3B,EAAAnB,OAAAinF,wBAAA,SAAA3lF,GACA8P,IAAA/P,KAAA,WACArB,EAAAM,cAAAN,EAAAM,aAAAmD,cACA+K,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAA,CAAAhD,EAAAwB,KAAA,GAAAzB,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACAqnF,EAAA,SAGA,QAIA3lF,EAAAK,UAgBA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,4DACA4B,OAdAxB,EAAA2B,YAAA,SAAAvD,GACAinF,EAAAzjF,OAAAxD,EAAA0E,IAAA1B,SAAAC,KAAA,WACA+P,QAaApP,MAAAhC,EAAAiC,YChIAtH,MAAAkF,WAAA,8BAAA,CAAA,SAAA,SAAA,uBACA,SAAAG,EAAAC,EAAAolF,GAEArlF,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAwC,aAAA,SAAApE,GAgBA,SAAAqE,EAAA0R,GACAnU,EAAAinF,wBAAA9yE,GACAnU,EAAA0C,QAGA,SAAAC,EAAAqJ,GACAhM,EAAA4C,YAAAoJ,EACAhM,EAAA6C,UAAA,EArBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,GAEAzE,EAAAyU,MACAwyE,EAAAriF,OAAA5E,GAGAinF,EAAAtiF,OAAA3E,IAFAgD,SAAAC,KAAAoB,EAAAE,KAiBA3C,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAIArC,EAAAknB,YAAA,WACA,OAAA,GAGAlnB,EAAAkG,wBAAA,SAAA4N,GACA1X,EAAA46D,KAAAh3D,EAAAsB,MAAA21D,aAAA,GAAAnjD,IAqBA,IAAAxN,EAAArG,EAAA,CACAL,YAAA,4CACA4B,OApBAxB,EAAAuG,kBAAA,WACAD,EAAAlF,SAAAC,KAAA,WACAiF,EAAAtG,OAAAwG,mBAAA,SAAAJ,GAEApG,EAAAsB,MAAA21D,cACAj3D,EAAAsB,MAAA21D,YAAA,IAGAr8D,QAAA0K,QAAAc,EAAA,SAAAK,GACArK,EAAAsK,KAAA1G,EAAAsB,MAAA21D,YAAAxwD,EAAAywD,WACAl3D,EAAAsB,MAAA21D,YAAA94D,KAAAsI,EAAAywD,aAIA5wD,EAAA9E,WAOAQ,MAAAhC,EAAAiC,SAGAjC,EAAAiG,WAAA,CAAA,CACA5K,MAAA,WACAyG,SAAA,sEAEA,CACAzG,MAAA,sBACAyG,SAAA,6EAEA,CACAzG,MAAA,mBACAyG,SAAA,2EAGA9B,EAAAiG,WAAAlE,UAAA,KClFApH,MAAAkF,WAAA,8BAAA,CAAA,SAAA,kBAAA,cACA,SAAAG,EAAAolF,EAAA8B,GAEA,IAAAC,EAAA/B,EAAAzgE,SACA3kB,EAAAonF,iBAAA,CACAC,kBAAA,EACAC,0BAAA,EACAC,2BAAA,GAGAvnF,EAAAsB,MAAA,CACAwB,GAAA,KACA0kF,WAAA,KACAC,mBAAA,EACA7nD,eAAA,KACA8nD,WAAA,MAGA1nF,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAwC,aAAA,SAAApE,GAEA,IAIA8Q,EAJAlP,EAAA6C,WAKA,GAAA7C,EAAAonF,iBAAAC,kBACAn4E,EAAA9S,EAAAurF,MAAA3nF,EAAAsB,MAAAmmF,mBAAA,SAAAl5D,GACA,MAAA,CAEAzrB,GAAA,KACA0kF,WAAA,KACA5nD,eAAA5/B,EAAAsB,MAAAs+B,eACA8nD,WAAA1nF,EAAAsB,MAAAomF,eAIAx4E,EAAA9S,EAAAurF,MAAA,EAAAvrF,EAAA0C,SAAA,CAEAgE,GAAA9C,EAAAsB,MAAAwB,GACA0kF,WAAA,KACA5nD,eAAA5/B,EAAAsB,MAAAs+B,eACA8nD,WAAA1nF,EAAAsB,MAAAomF,cAGAR,EAAAviE,SAAAvjB,SAAAC,KAAA,SAAAumF,GACAvwE,EAAAjb,EAAAsK,KAAAkhF,EAAA,CAAA9kF,GAAAoM,EAAA,GAAApM,KACAoM,EAAA,GAAAw4E,WAAArwE,EAAAqwE,cAKA1nF,EAAA6C,UAAA,EACA7C,EAAA6nF,oBAAA34E,GACAlP,EAAA0C,UAIA1C,EAAA8nF,iBAAA,WACAX,EAAA/lF,SAAAC,KAAA,WACArB,EAAAonF,iBAAAhrF,EAAAsK,KAAAygF,EAAA,CAAArkF,GAAA9C,EAAAsB,MAAAs+B,iBACA5/B,EAAAonF,mBACApnF,EAAAsB,MAAAmmF,mBAAAznF,EAAAonF,iBAAAE,8BAKAtnF,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAIArC,EAAAknB,YAAA,WACA,OAAA,MC1EAvsB,MAAAkF,WAAA,wBAAA,CAAA,SAAA,SAAA,aAAA,UAAA,UACA,SAAAG,EAAAC,EAAAjF,EAAAoN,EAAA2/E,GAEA,IAAAC,EAAA,KAEAhoF,EAAAioF,MAAA,GAEA,IAAArhF,GAAA,EACAC,GAAA,EA+BA,SAAA4P,EAAAyxE,GAGA,IAEA/kD,EACAglD,EALAnoF,EAAAioF,MAAA,GAEAC,IAEA/kD,EAAApnC,SAAA8U,SAAA,EAAA,SAAAD,QAAA,OAAA1U,SACAisF,EAAApsF,SAAA2d,IAAA,EAAA,SAAA9I,QAAA,OAAA1U,SAEA6rF,EAAAK,iCAAAF,EAAAG,QAAAH,EAAAplF,GAAAqgC,EAAAglD,GACA/mF,SAAAC,KAAA,SAAAjD,GACAk/D,SAAAl/D,EACA4B,EAAAioF,MAAA7pF,EACAyI,GAAA,GACA,SAAAlE,GACA26D,SAAA,KACAt9D,EAAAioF,MAAA,GACAphF,GAAA,KA7CA7G,EAAA/E,IAAA,2BAAA,SAAA4F,EAAAynF,GACAA,EACA1hF,EACA6P,EAAA6xE,GAEAzhF,GAAA,GAIA7G,EAAAq9D,UAAA,GACAC,SAAA,MAGA0qB,EAAAM,IAGAtoF,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAAmhF,GACAvxE,EAAAuxE,IAIAphF,GAAA,IA0BA5G,EAAAuoF,kBAAA,CACAzjF,KAAA,QACAvE,QAAA,CACA,CAAAC,UAAA,KAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CACA1kB,UAAA,YACAC,QAAA,GACAC,SAAA,SACAilB,YAAA,EACAhlB,MAAA,OACAqmD,UAAA,SACA0L,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA,CACAzuC,KAAA,QACA7K,KAAA,CACA,CAAA0E,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,8CACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,kCAEAI,IAAA,MAEA4zC,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,QAEAtjB,mBAAA,SAAAC,GAIA,OAHA3M,EAAAyzB,OAAA9mB,EAAAy/E,YAAA,SAAAC,EAAAC,GACA,OAAAD,GAAA,GAAAC,EAAAC,gBACA,GACA,EAAA,GAEA9zB,sBAAA,SAAA9rD,GAQA,IAAA6/E,EAAA7sF,SAOA,QANAA,OAAAgN,EAAA8/E,OAAAz9D,SAAAw9D,IAEAxsF,EAAAyzB,OAAA9mB,EAAAy/E,YAAA,SAAAC,EAAAC,GACA,OAAAD,GAAA,GAAAC,EAAAC,gBACA,GAGA,qEAEA,8EAIA,CACAnoF,UAAA,cACAC,QAAAzF,EAAAM,QAAA,uBACAoF,SAAA,SACAm0D,sBAAA,SAAA9rD,GACA,OAAA3M,EAAAszB,KAAAtzB,EAAA+a,IAAApO,EAAAy/E,YAAA,SAAAE,GACA,OAAAA,EAAAlB,WACAkB,EAAAI,aAAA,KAAAJ,EAAAlB,WAAA,OAAAkB,EAAAK,iBAEAL,EAAAI,aAAA,MAAAJ,EAAAK,mBAEA,QAGA,CACAz0C,qBAAA,EACA7zC,QAAA,GACAD,UAAA,sBACAG,MAAA,OACAqmD,UAAA,SACA0L,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA,CACAzuC,KAAA,QACA7K,KAAA,CACA,CAAA0E,IAAA,EAAAgC,KAAA9J,EAAAM,QAAA,uBACA,CAAAwH,IAAA,EAAAgC,KAAA9J,EAAAM,QAAA,yBAEAI,IAAA,MAEA4zC,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,QAEAzG,YAAA,EACA/c,mBAAA,SAAAG,GAAA,OAAAA,EAAAwgC,QACAsrB,sBAAA,SAAA9rD,GACA,YAAA,IAAAA,EAAAmrD,qBAAA,OAAAnrD,EAAAmrD,oBACA,GAGA,iBADAnrD,EAAAmrD,oBAAA,YAAA,WACA,8BAMA,CACA1zD,UAAA,eACAC,QAAAzF,EAAAM,QAAA,qBACAqF,MAAA,QACAD,SAAA,SACAkI,mBAAA,SAAAxK,GAAA,OAAAiK,YAAAwW,mBAAAzgB,EAAA,kBAEA,CACAoC,UAAA,mBACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,YAAAwW,mBAAAzgB,EAAA,sBAEA,CAAAoC,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,OAAAjE,OAAA,CAAAb,KAAA,SAAA+E,MAAA,QACA,CACAH,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAAo5C,QAEAxhD,MAAA,SAEA,CACAH,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAwkB,SAAA,EACAvkB,MAAA,SAEA,CAAAH,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,sBAAAtI,MAAA,QAAAC,UAAA,QACA,CAAAJ,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,sBAAAtI,MAAA,SACA,CACAH,UAAA,SACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAgyD,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA,CACAzuC,KAAA,QACA7K,KAAA,CACA,CAAA0E,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,6BACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,6BACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,2BACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,6BACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,iCACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,0CAEAI,IAAA,MAEA4zC,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,QAEAzrB,MAAA,SAEA,CAAAH,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,sBAAAtI,MAAA,UAEAo0D,kBAAA,SAAAl0D,GACA,aAAAA,EAAAm0D,YAAA,uBAAAn0D,EAAAL,YACAK,EAAAo0D,cAAAzoC,aAAA,SAAA0lB,EAAAgjB,EAAAC,GACA,OAAA,GAAAD,EACA/lD,EAAA,wDAGA,iBADA,GAAA+lD,EAAA,YAAA,WACA,8BAMA,aAAAr0D,EAAAm0D,YAAA,aAAAn0D,EAAAL,YACAK,EAAAo0D,cAAAzoC,aAAA,SAAA0lB,EAAAgjB,EAAAC,GACA,OAAA,GAAAD,EACA/lD,EAAA,qDAEA,GAAA+lD,EACA,qEAGA,mFC3PAv6D,MAAAkF,WAAA,gBAAA,CAAA,SAAA,SAAA,aAAA,WAAA,KAAA,cAAA,eAAA,kBAAA,cACA,SAAAG,EAAAC,EAAAjF,EAAAwT,EAAAtG,EAAAg/E,EAAAj2E,EAAAm0E,EAAAN,GAEA,SAAA1zE,EAAAC,GAEA,OAAAnJ,EAAA,SAAAoJ,EAAAC,GACA,IAAAC,EAAA,KACAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cAAA4N,IACAG,EAAAxR,EAAAM,aAAAmD,aAAAgO,sBAGAy1E,EAAAviE,QAAA,GACAvjB,SAAAC,KAAA,SAAAjD,GACA4B,EAAAgpF,UAAA5qF,EAEAoT,GAAAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cAAA4N,EACA7C,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAAkN,GAAA,GAAAnQ,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACAwpF,EAAA,SAGA,KAGAA,EAAA,MAGA33E,KAEA,SAAA3O,GACA3C,EAAAgpF,UAAA,GACAC,EAAA,MAEA13E,QAKAH,IAEApR,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,GAAA,KAGA,IAAA83E,EAAA,IAAA72C,WAAAj0C,KAAAm8D,YAAA,CACA3iB,KAAA,SAAA4iB,GACA,OAAAvpD,EAAA/J,cAAA9F,UAEAq5D,MAAA,SAAA55D,GACA,OAAAoQ,EAAA4sB,SAAAh9B,IAEA65D,SAAA,cAGAyuB,EAAA,IAAA92C,WAAAj0C,KAAAm8D,YAAA,CACA3iB,KAAA,SAAA4iB,GACA,OAAA4qB,EAAAzgE,SAAAvjB,UAEAq5D,MAAA,SAAA55D,GACA,OAAAukF,EAAA7jE,QAAA1gB,IAEA65D,SAAA,cAGA0uB,EAAA,IAAA/2C,WAAAj0C,KAAAm8D,YAAA,CACA3iB,KAAA,SAAA4iB,GACA,OAAAsqB,EAAAngE,SAAAvjB,UAEAq5D,MAAA,SAAA55D,GACA,OAAAikF,EAAAvjE,QAAA1gB,IAEA65D,SAAA,cAyJA,SAAAuuB,EAAAf,GACAloF,EAAAgoF,iBAAAE,EACAloF,EAAA2D,WAAA,2BAAA3D,EAAAgoF,kBAxJAhoF,EAAAM,aAAA,CACAwE,KAAA,YACAkgB,QAAA,KACAzkB,QAAA,CACA,CAAAC,UAAA,KAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CACA1kB,UAAA,iBACAC,QAAAzF,EAAAM,QAAA,0BACAoF,SAAA,SACAC,MAAA,QACAukB,SAAA,EACAwtC,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAAyxC,EACA75C,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,SAGA,CAAA5rB,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,QAAAC,UAAA,OACA,CACAJ,UAAA,aACAC,QAAAzF,EAAAM,QAAA,sBACAoF,SAAA,SACAC,MAAA,QACAukB,SAAA,EACAwtC,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA0xC,EACA95C,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,SAGA,CAAA5rB,UAAA,aAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,6BAAAoF,SAAA,UACA,CACAF,UAAA,UACAC,QAAAzF,EAAAM,QAAA,aACAoF,SAAA,SACAC,MAAA,QACAukB,SAAA,EACAwtC,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAAwxC,EACA55C,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,SAGA,CACA5rB,UAAA,gBACAC,QAAAzF,EAAAM,QAAA,2BACAoF,SAAA,SACAgyD,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA,CACAzuC,KAAA,QACA7K,KAAA,CACA,CAAA0E,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,8CACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,mCACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,wCACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,4CAEAI,IAAA,MAEA4zC,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,QAEAzrB,MAAA,WAMAX,EAAAiB,cAAA,SAAA7C,GACA6qF,EAAA7qF,IAGA4B,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA4lF,EAAAxlF,YACAP,EAAAnB,OAAAqpF,eAAA,SAAA/nF,GACA8P,IAAA/P,KAAA,WACArB,EAAAM,cAAAN,EAAAM,aAAAmD,cACA+K,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAA,CAAAhD,EAAAwB,KAAA,GAAAzB,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACAwpF,EAAA,SAGA,QAIA9nF,EAAAK,UAIAxB,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAAqpF,eAAA,WACAj4E,GAAA,IAEAjQ,EAAAK,UAIAxB,EAAA0F,UAAA,SAAAtH,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAAsB,MAAAwB,GAAA,KACA3B,EAAAnB,OAAAsB,MAAAuR,OAAA,EACA1R,EAAAnB,OAAAqpF,eAAA,SAAA/nF,GACA8P,IAAA/P,KAAA,WACArB,EAAAM,cAAAN,EAAAM,aAAAmD,cACA+K,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAA,CAAAhD,EAAAwB,KAAA,GAAAzB,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACAwpF,EAAA,SAGA,QAIA9nF,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACA8oF,EAAAtlF,OAAAxD,EAAA0E,IAAA1B,SAAAC,KAAA,WACA+P,OASApR,EAAA6B,KAAA,CACA,CACAxG,MAAA,iBACAyG,SAAA,qDAGA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,EAAAC,SAAAA,MAIA,IAAA5E,EAAAlB,EAAA,CACAL,YAAA,wCACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YCtPAtH,MAAAkF,WAAA,sBAAA,CAAA,SAAA,SAAA,cACA,SAAAG,EAAAC,EAAAinF,GAEAlnF,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAwC,aAAA,SAAApE,GAgBA,SAAAqE,EAAA0R,GACAnU,EAAAqpF,eAAAl1E,GACAnU,EAAA0C,QAGA,SAAAC,EAAAqJ,GACAhM,EAAA4C,YAAAoJ,EACAhM,EAAA6C,UAAA,EArBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,GAEAzE,EAAAyU,MACAq0E,EAAAlkF,OAAA5E,GAGA8oF,EAAAnkF,OAAA3E,IAFAgD,SAAAC,KAAAoB,EAAAE,KAiBA3C,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAIArC,EAAAknB,YAAA,WACA,OAAA,GAGAlnB,EAAAkG,wBAAA,SAAA4N,GACA1X,EAAA46D,KAAAh3D,EAAAsB,MAAA21D,aAAA,GAAAnjD,IAqBA,IAAAxN,EAAArG,EAAA,CACAL,YAAA,4CACA4B,OApBAxB,EAAAuG,kBAAA,WACAD,EAAAlF,SAAAC,KAAA,WACAiF,EAAAtG,OAAAwG,mBAAA,SAAAJ,GAEApG,EAAAsB,MAAA21D,cACAj3D,EAAAsB,MAAA21D,YAAA,IAGAr8D,QAAA0K,QAAAc,EAAA,SAAAK,GACArK,EAAAsK,KAAA1G,EAAAsB,MAAA21D,YAAAxwD,EAAAywD,WACAl3D,EAAAsB,MAAA21D,YAAA94D,KAAAsI,EAAAywD,aAIA5wD,EAAA9E,WAOAQ,MAAAhC,EAAAiC,SAGAjC,EAAAiG,WAAA,CAAA,CACA5K,MAAA,WACAyG,SAAA,kDAEA,CACAzG,MAAA,mBACAyG,SAAA,sDAEA,CACAzG,MAAA,sBACAyG,SAAA,yDAEA,CACAzG,MAAA,mBACAyG,SAAA,uDAGA9B,EAAAiG,WAAAlE,UAAA,KCtFApH,MAAAkF,WAAA,oBAAA,CAAA,SAAA,SAAA,aACA,SAAAG,EAAAC,EAAAjF,GAEA,IAAAsuF,EAEAtpF,EAAAgpF,UAAA,GAEAhpF,EAAA/E,IAAA,uBAAA,SAAA4F,EAAA0oF,GACAD,EAAAC,EAEAvpF,EAAAgpF,UAAAvpF,OAAA,EACA6pF,GACAtpF,EAAAgpF,UAAA7qF,KAAAsf,MAAAzd,EAAAgpF,UAAAM,EAAAd,eAKAxoF,EAAAwpF,sBAAA,CACA1kF,KAAA,YACAvE,QAAA,CACA,CAAAC,UAAA,KAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CACA1kB,UAAA,aACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAC,MAAA,QACAC,UAAA,OAEA,CACAJ,UAAA,eACAC,QAAAzF,EAAAM,QAAA,YACAoF,SAAA,UAEA,CACAF,UAAA,mBACAC,QAAAzF,EAAAM,QAAA,4BAFAoF,SAIA,SACAC,MAAA,SAEA,CACAH,UAAA,eACAC,QAAAzF,EAAAM,QAAA,sBAFAoF,SAIA,SACAC,MAAA,SAEA,CACAH,UAAA,gBACAC,QAAAzF,EAAAM,QAAA,2BACAoF,SAAA,SACAgyD,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA,CACAzuC,KAAA,QACA7K,KAAA,CACA,CAAA0E,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,8CACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,mCACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,wCACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,4CAEAI,IAAA,MAEA4zC,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,QAEAzrB,MAAA,cCtEAhG,MAAAkF,WAAA,YAAA,CAAA,SAAA,SAAA,aAAA,WAAA,KAAA,UAAA,UAAA,eAAA,sBAAA,uBACA,SAAAG,EAAAC,EAAAjF,EAAAwT,EAAAtG,EAAAE,EAAA2/E,EAAA92E,EAAA3F,EAAAuwD,GA2BA,SAAAzqD,EAAAC,GAEA,OAAAnJ,EAAA,SAAAoJ,EAAAC,GACA,IAAAC,EAAA,KACAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cAAA4N,IACAG,EAAAxR,EAAAM,aAAAmD,aAAAgO,sBAGAs2E,EAAA0B,0BAAAzpF,EAAAqoF,QAAAroF,EAAA8W,SAAA9W,EAAA9D,QACAkF,SAAAC,KAAA,SAAAjD,GACA4B,EAAAioF,MAAA7pF,EAEAoT,GAAAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cAAA4N,EACA7C,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAAkN,GAAA,GAAAnQ,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACAiqF,EAAA,SAGA,KAGAA,EAAA,MAGAp4E,KAEA,SAAA3O,GACA3C,EAAAioF,MAAA,GACAyB,EAAA,MAEAn4E,QA+RA,SAAAm4E,EAAAC,GACA3pF,EAAAspF,aAAAK,EACA3pF,EAAA2D,WAAA,uBAAA3D,EAAAspF,cAzVAtpF,EAAAqoF,QAAA,KACAroF,EAAA8W,SAAA/a,SAAA8U,SAAA,EAAA,QAAAD,QAAA,OAAA1U,SACA8D,EAAA9D,OAAAH,SAAA2d,IAAA,EAAA,QAAA9I,QAAA,OAAA1U,SAEA+U,EAAAmP,wBAAAhf,SAAAC,KAAA,SAAAuoF,GACA,IAEAvB,EAFAwB,EAAA,MACAv+E,EAAA+B,cACAg7E,EAAA/8E,EAAA2C,IAAA,mBAEA47E,EAAAztF,EAAAsK,KAAAkjF,EAAA,CAAA9mF,GAAAulF,MAIAwB,EADAA,GACAztF,EAAA0tF,KAAAF,MAGA5pF,EAAAqoF,QAAAwB,EAAA/mF,GACAwI,EAAA+B,aACA/B,EAAAqC,IAAA,eAAA3N,EAAAqoF,SAGAroF,EAAA+pF,cAAA/pF,EAAAqoF,YA0CAroF,EAAAyX,mBAAA,WACArG,GAAA,IAGApR,EAAA+pF,cAAA,WAEAz+E,EAAA+B,aACA/B,EAAAqC,IAAA,eAAA3N,EAAAqoF,SAEAj3E,GAAA,IAGApR,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,GAAA,KAGApR,EAAAM,aAAA,CACAwE,KAAA,QACAkgB,QAAA,KACAC,yBAAA,EACA1kB,QAAA,CACA,CAAAC,UAAA,KAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CACA1kB,UAAA,YACAC,QAAA,GACAC,SAAA,SACAilB,YAAA,EACAhlB,MAAA,OACAqmD,UAAA,SACA0L,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA,CACAzuC,KAAA,QACA7K,KAAA,CACA,CAAA0E,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,8CACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,kCAEAI,IAAA,MAEA4zC,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,QAEAtjB,mBAAA,SAAAC,GAIA,OAHA3M,EAAAyzB,OAAA9mB,EAAAy/E,YAAA,SAAAC,EAAAC,GACA,OAAAD,GAAA,GAAAC,EAAAC,gBACA,GACA,EAAA,GAEA9zB,sBAAA,SAAA9rD,GAQA,IAAA6/E,EAAA7sF,SAOA,QANAA,OAAAgN,EAAA8/E,OAAAz9D,SAAAw9D,IAEAxsF,EAAAyzB,OAAA9mB,EAAAy/E,YAAA,SAAAC,EAAAC,GACA,OAAAD,GAAA,GAAAC,EAAAC,gBACA,GAGA,qEAEA,8EAIA,CACAnoF,UAAA,cACAC,QAAAzF,EAAAM,QAAA,uBACAoF,SAAA,SACAm0D,sBAAA,SAAA9rD,GACA,OAAA3M,EAAAszB,KAAAtzB,EAAA+a,IAAApO,EAAAy/E,YAAA,SAAAE,GACA,OAAAA,EAAAlB,WACAkB,EAAAI,aAAA,KAAAJ,EAAAlB,WAAA,OAAAkB,EAAAK,iBAEAL,EAAAI,aAAA,MAAAJ,EAAAK,mBAEA,QAGA,CACAz0C,qBAAA,EACA7zC,QAAA,GACAD,UAAA,sBACAG,MAAA,OACAqmD,UAAA,SACA0L,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA,CACAzuC,KAAA,QACA7K,KAAA,CACA,CAAA0E,IAAA,EAAAgC,KAAA9J,EAAAM,QAAA,uBACA,CAAAwH,IAAA,EAAAgC,KAAA9J,EAAAM,QAAA,yBAEAI,IAAA,MAEA4zC,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,QAEAzG,YAAA,EACA/c,mBAAA,SAAAG,GAAA,OAAAA,EAAAwgC,QACAsrB,sBAAA,SAAA9rD,GACA,YAAA,IAAAA,EAAAmrD,qBAAA,OAAAnrD,EAAAmrD,oBACA,GAGA,iBADAnrD,EAAAmrD,oBAAA,YAAA,WACA,8BAMA,CACA1zD,UAAA,eACAC,QAAAzF,EAAAM,QAAA,qBACAqF,MAAA,QACAD,SAAA,SACAkI,mBAAA,SAAAxK,GAAA,OAAAiK,YAAAwW,mBAAAzgB,EAAA,kBAEA,CACAoC,UAAA,mBACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,YAAAwW,mBAAAzgB,EAAA,sBAEA,CAAAoC,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,OAAAjE,OAAA,CAAAb,KAAA,SAAA+E,MAAA,QACA,CACAH,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAAo5C,QAEAxhD,MAAA,SAEA,CACAH,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAwkB,SAAA,EACAvkB,MAAA,SAEA,CAAAH,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,sBAAAtI,MAAA,QAAAC,UAAA,QACA,CAAAJ,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,sBAAAtI,MAAA,SACA,CACAH,UAAA,SACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAgyD,OAAA,CACAkC,eAAA,EACAzxC,WAAA,CACAu0B,MAAA,CACAzuC,KAAA,QACA7K,KAAA,CACA,CAAA0E,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,6BACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,6BACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,2BACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,6BACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,iCACA,CAAAwH,GAAA,EAAAgC,KAAA9J,EAAAM,QAAA,0CAEAI,IAAA,MAEA4zC,SAAA,GACAqI,UAAA,GAEAtrB,UAAA,KACAD,YAAA,QAEAzrB,MAAA,SAEA,CAAAH,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,sBAAAtI,MAAA,UAEAo0D,kBAAA,SAAAl0D,GACA,aAAAA,EAAAm0D,YAAA,uBAAAn0D,EAAAL,YACAK,EAAAo0D,cAAAzoC,aAAA,SAAA0lB,EAAAgjB,EAAAC,GACA,OAAA,GAAAD,EACA/lD,EAAA,wDAGA,iBADA,GAAA+lD,EAAA,YAAA,WACA,8BAMA,aAAAr0D,EAAAm0D,YAAA,aAAAn0D,EAAAL,YACAK,EAAAo0D,cAAAzoC,aAAA,SAAA0lB,EAAAgjB,EAAAC,GACA,OAAA,GAAAD,EACA/lD,EAAA,qDAEA,GAAA+lD,EACA,qEAGA,gFASAl1D,EAAAiB,cAAA,SAAA7C,GACAsrF,EAAAtrF,IAGA4B,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAAymF,EAAArmF,UAAA1B,EAAAqoF,SACAlnF,EAAAnB,OAAAgqF,WAAA,SAAA1oF,GACA8P,IAAA/P,KAAA,WACArB,EAAAM,cAAAN,EAAAM,aAAAmD,cACA+K,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAA,CAAAhD,EAAAwB,KAAA,GAAAzB,KAAA,SAAAuD,GACAA,GAAAA,EAAAnF,QACAiqF,EAAA,SAGA,QAIAvoF,EAAAK,UAIAxB,EAAAkB,UAAA,SAAA9C,GAEA,IAAA4U,EAAA,GAEAC,EAAA80E,EAAAxmE,QAAAnjB,EAAA0E,IACAkQ,EAAA7U,KAAA8U,EAAA7R,UAEA4R,EAAA7U,KAAAgD,EAAAC,UAEA,IAAA6oF,EAAA,KACA7rF,EAAA81D,sBAEA+1B,EAAApuB,EAAAt6C,QAAAnjB,EAAAmhC,QACAvsB,EAAA7U,KAAA8rF,EAAA7oF,WAGA8G,EAAAiD,IAAA6H,GAAA3R,KAAA,WAEAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAA0R,GACA7U,EAAA81D,sBAEA/yD,EAAAnB,OAAAsB,MAAA43D,sBAAA+wB,EACA9oF,EAAAnB,OAAAsB,MAAAi+B,OAAA,KACAp+B,EAAAnB,OAAAsB,MAAAynB,UAAA,MAGA5nB,EAAAnB,OAAAgqF,WAAA,WACA54E,GAAA,IAEAjQ,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACA2pF,EAAAnmF,OAAAxD,EAAA0E,IAAA1B,SAAAC,KAAA,WACA+P,OASApR,EAAA6B,KAAA,CACA,CACAxG,MAAA,sBACAyG,SAAA,sCAGA9B,EAAA6B,KAAAE,UAAA,EAGA,IAAAZ,EAAAlB,EAAA,CACAL,YAAA,8BACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YC3WAtH,MAAAkF,WAAA,kBAAA,CAAA,SAAA,SAAA,UAAA,uBACA,SAAAG,EAAAC,EAAA8nF,EAAAlsB,GAEA77D,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsB,MAAAuR,MACA7S,EAAAkqF,wBAAA,CAAA,EAAA,EAAA,EAAA,GAEAlqF,EAAAkqF,wBAAA,GAGAlqF,EAAAwC,aAAA,SAAApE,GAgBA,SAAAqE,EAAA0R,GACAnU,EAAAgqF,WAAA71E,GACAnU,EAAA0C,QAGA,SAAAC,EAAAqJ,GACAhM,EAAA4C,YAAAoJ,EACAhM,EAAA6C,UAAA,EArBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,GAEAzE,EAAAyU,MACAk1E,EAAA/kF,OAAA5E,GAGA2pF,EAAAhlF,OAAA3E,IAFAgD,SAAAC,KAAAoB,EAAAE,KAsBA3C,EAAAknB,YAAA,WACA,OAAA,GAGAlnB,EAAAm8E,WAAA,SAAAgO,GACAnqF,EAAAsB,MAAAknF,YAAAz0E,OAAAo2E,EAAA,IAoBA,IAAAC,EAAAnqF,EAAA,CACAL,YAAA,8CACA4B,OAlBAxB,EAAAqqF,QAAA,WACAD,EAAAhpF,SAAAC,KAAA,WACA+oF,EAAApqF,OAAAqoF,QAAAroF,EAAAsB,MAAA+mF,QACA+B,EAAApqF,OAAA6nF,oBAAA,SAAAjlE,GAEA0nE,EAAAluF,EAAAmuF,UAAAvqF,EAAAsB,MAAAknF,YAAA5lE,EAAA,SAAAs5C,EAAAC,GACA,OAAAD,EAAAp5D,IAAAq5D,EAAAr5D,MAAAo5D,EAAAp5D,MAAAq5D,EAAAr5D,KAGA9C,EAAAsB,MAAAknF,YAAA/oF,OAAA,EACAO,EAAAsB,MAAAknF,YAAArqF,KAAAsf,MAAAzd,EAAAsB,MAAAknF,YAAA8B,IAEAF,EAAA5oF,WAOAQ,MAAAhC,EAAAiC,SAGAjC,EAAAwqF,qBAAA,CACAvhF,KAAA,WACAtI,MAAA,QAGAX,EAAAyqF,mBAAA,CACAxhF,KAAA,WACAtI,MAAA,QAGAX,EAAAq8D,oBAAA,WAEAr8D,EAAAsB,MAAA43D,wBACAl5D,EAAAsB,MAAA43D,sBAAA2C,EAAAn6D,aAEA1B,EAAAsB,MAAA4yD,qBAAA,EACAl0D,EAAAsB,MAAAqhD,OAAA,KACA3iD,EAAAsB,MAAAynB,UAAA,MAGA/oB,EAAAs8D,mBAAA,WACAt8D,EAAAsB,MAAAqhD,OAAA,KACA3iD,EAAAsB,MAAAynB,UAAA,KACA/oB,EAAAsB,MAAA4yD,qBAAA,GAGAl0D,EAAAiG,WAAA,CAAA,CACA5K,MAAA,WACAyG,SAAA,wCAEA,CACAzG,MAAA,eACAyG,SAAA,wCAEA,CACAzG,MAAA,gBACAyG,SAAA,yCAEA,CACAzG,MAAA,kBACAyG,SAAA,mDAGA9B,EAAAiG,WAAAlE,UAAA,KCnHApH,MAAA4T,UAAA,2BAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAA44E,GACA,GAAAA,EACA,OAAArsF,EAAAM,QAAA+rF,EAAAniF,MAGA,SAAAwJ,EAAA24E,GACA,OAAArsF,EAAAM,QAAA+rF,EAAAniF,MAWA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACA5M,MAAA,CACAV,MAAA,WACAo9D,iBAAA,KAEA5vD,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GACA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,4CAAAiH,SAAA,IAAAnK,EAAA48D,mBACA,CAAA97D,GAAA,EAAAoC,KAAA,iCAAAiH,SAAA,IAAAnK,EAAA48D,mBACA,CAAA97D,GAAA,EAAAoC,KAAA,sCAAAiH,SAAA,IAAAnK,EAAA48D,mBACA,CAAA97D,GAAA,EAAAoC,KAAA,yCAAAiH,SAAA,IAAAnK,EAAA48D,sBAIA/+D,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QChFAzU,MAAA4T,UAAA,2BAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAA44E,GACA,GAAAA,EACA,OAAArsF,EAAAM,QAAA+rF,EAAAniF,MAGA,SAAAwJ,EAAA24E,GACA,OAAArsF,EAAAM,QAAA+rF,EAAAniF,MAWA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACA5M,MAAA,CACAV,MAAA,WACAo9D,iBAAA,KAEA5vD,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GACA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,iCAAAiH,SAAA,IAAAnK,EAAA48D,mBACA,CAAA97D,GAAA,EAAAoC,KAAA,oCAAAiH,SAAA,IAAAnK,EAAA48D,sBAIA/+D,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QC9EAzU,MAAA4T,UAAA,sBAAA,CAAA,WAAA,aAAA,kBACA,SAAAC,EAAAxT,EAAAoqF,GACA,SAAA32E,EAAAnN,GACA,OAAAA,EAIAA,EAAAwD,KAHA,GAMA,SAAA4J,EAAApN,GACA,OAAAA,EAAAwD,KAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,WACAC,SAAA,EACA7M,MAAA,CACAuN,WAAA,KAEAT,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA,IAAAqP,EAAAk2E,EAAAzgE,SACAzV,EAAA9N,SAAAC,KAAA,WACA,GAAA6N,EAAAzP,SACA0P,EAAAJ,GAAAK,QAAA,MAAAF,EAAA,GAAApM,IACAjD,EAAAytB,cAAApe,EAAA,GAAApM,OAIAoM,EAAA9N,SAAAC,KAAA,WACAmN,EAAA,WAEAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,0BACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,gBAAA,IAAAvN,EAAAuN,YAAAvN,EAAAuN,WACAC,yBAAA,EACA1M,GAAA,SAAAxB,GAAA,OAAAA,EAAAwB,IACA1E,KAAA8Q,IAGArP,EAAAmQ,YAGAnQ,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGAlB,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAvP,EAAAmQ,WACA,QCvEArV,MAAA4T,UAAA,2BAAA,CAAA,WAAA,aAAA,uBACA,SAAAC,EAAAxT,EAAAqqF,GACA,SAAA52E,EAAAnN,GACA,OAAAA,EAIAA,EAAAwD,KAHA,GAMA,SAAA4J,EAAApN,GACA,OAAAA,EAAAwD,KAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,WACAC,SAAA,EACA7M,MAAA,CACAuN,WAAA,KAEAT,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA,IAAAqP,EAAAm2E,EAAA1gE,SACAzV,EAAA9N,SAAAC,KAAA,WACA,GAAA6N,EAAAzP,SACA0P,EAAAJ,GAAAK,QAAA,MAAAF,EAAA,GAAApM,IACAjD,EAAAytB,cAAApe,EAAA,GAAApM,OAIAoM,EAAA9N,SAAAC,KAAA,WACAmN,EAAA,WAEAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,gCACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,gBAAA,IAAAvN,EAAAuN,YAAAvN,EAAAuN,WACAC,yBAAA,EACA1M,GAAA,SAAAxB,GAAA,OAAAA,EAAAwB,IACA1E,KAAA8Q,IAGArP,EAAAmQ,YAGAnQ,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGAlB,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAvP,EAAAmQ,WACA,QCvEArV,MAAA4T,UAAA,2BAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAA44E,GACA,GAAAA,EACA,OAAArsF,EAAAM,QAAA+rF,EAAAniF,MAGA,SAAAwJ,EAAA24E,GACA,OAAArsF,EAAAM,QAAA+rF,EAAAniF,MAWA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACA5M,MAAA,CACAV,MAAA,WACAo9D,iBAAA,KAEA5vD,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GACA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,uCAAAiH,SAAA,IAAAnK,EAAA48D,mBACA,CAAA97D,GAAA,EAAAoC,KAAA,8CAAAiH,SAAA,IAAAnK,EAAA48D,mBACA,CAAA97D,GAAA,EAAAoC,KAAA,6CAAAiH,SAAA,IAAAnK,EAAA48D,mBACA,CAAA97D,GAAA,EAAAoC,KAAA,gDAAAiH,SAAA,IAAAnK,EAAA48D,sBAIA/+D,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QChFAzU,MAAA4T,UAAA,kBAAA,CAAA,WAAA,aAAA,cACA,SAAAC,EAAAxT,EAAAksF,GACA,SAAAz4E,EAAAnN,GACA,OAAAA,EAIA,0CACAA,EAAAwD,KAAA,gCACAxD,EAAAkmF,YAAA,IAAA,gCACAlmF,EAAA8d,OAAA,IAAA,eANA,GAUA,SAAA1Q,EAAApN,GACA,OAAAA,EAAAkmF,WACAlmF,EAAAwD,KAAA,KAAAxD,EAAAkmF,WAAA,IAEAlmF,EAAAwD,KAIA,MAAA,CACA6J,SAAA,IACAC,QAAA,WACAC,SAAA,EACA7M,MAAA,CACAqmF,QAAA,IACAzoD,eAAA,IACArwB,WAAA,KAEAT,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA,IAAA6qF,EAAA1oF,EAAA49B,eAEA1wB,EAAAg4E,EAAAyD,6BAAA3oF,EAAAqmF,QAAArmF,EAAA49B,gBACA1wB,EAAA9N,SAAAC,KAAA,WACA,GAAA6N,EAAAzP,SACA0P,EAAAJ,GAAAK,QAAA,MAAAF,EAAA,GAAApM,IACAjD,EAAAytB,cAAApe,EAAA,GAAApM,OAIAoM,EAAA9N,SAAAC,KAAA,WACAmN,EAAA,WAEAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,sBACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,gBAAA,IAAAvN,EAAAuN,YAAAvN,EAAAuN,WACAC,yBAAA,EACA1M,GAAA,SAAAxB,GAAA,OAAAA,EAAAwB,IACA1E,KAAA8Q,IAGArP,EAAAmQ,YAGAnQ,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGAjO,EAAA6D,OAAA,iBAAA,SAAAC,GACA,IAEA4lC,EAFAg/C,GAAA5kF,IACA4kF,EAAA5kF,GACA4lC,EAAAw7C,EAAAyD,6BAAA3oF,EAAAqmF,QAAAviF,IACA1E,SAAAC,KAAA,WACA6N,EAAAzP,OAAA,EACAyP,EAAA/Q,KAAAsf,MAAAvO,EAAAw8B,GAEA,GAAAx8B,EAAAzP,QACA0P,EAAAJ,GAAAK,QAAA,MAAAF,EAAA,GAAApM,IACAjD,EAAAytB,cAAApe,EAAA,GAAApM,MAEAqM,EAAAJ,GAAAK,QAAA,MAAA,MACAvP,EAAAytB,cAAA,YAMAve,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAvP,EAAAmQ,WACA,QCtGArV,MAAA4T,UAAA,wBAAA,CAAA,WAAA,aAAA,cAAA,cACA,SAAAC,EAAAxT,EAAAksF,EAAA7+E,GACA,SAAAoG,EAAAnN,GACA,OAAAA,EAAAkmF,WACAlmF,EAAAwD,KAAA,KAAAxD,EAAAkmF,WAAA,IAEAlmF,EAAAwD,KAIA,SAAA4J,EAAApN,GACA,OAAAA,EAAAkmF,WACAlmF,EAAAwD,KAAA,KAAAxD,EAAAkmF,WAAA,IAEAlmF,EAAAwD,KAIA,MAAA,CACA6J,SAAA,IACAC,QAAA,WACAC,SAAA,EACA7M,OAAA,EACA8M,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAAC,EAAAg4E,EAAAviE,SAEAzV,EAAA9N,SAAAC,KAAA,WACAmN,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,wBAAA,EACA1M,GAAA,SAAAxB,GAAA,OAAAA,EAAAwB,IACA1E,KAAAhC,EAAAqT,OAAAP,EAAA,SAAAQ,GAAA,OAAArH,EAAAsH,WAAAD,EAAA,UACA4f,UAAA,EACA1f,QAAA,SAAAC,EAAA3K,EAAA9G,GACA,OAAA,GAAAA,EAAA0G,KAAAgL,cAAAC,QAAAF,EAAAC,gBAEAyf,qBAAA,IAGAtgB,EAAAe,cAKAf,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAof,MAAAC,QAAArf,GACAA,EAEAA,EAAAqb,MAAA,KALA,KAUAxc,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,GAGA6zB,MAAAC,QAAA9zB,GACAS,EAAA+a,IAAAxb,EAAA,SAAAg0B,GAAA,OAAAA,EAAA,KAEAvzB,EAAA+a,IAAAxb,EAAA8vB,MAAA,KAAA,SAAAkE,GAAA,OAAAA,EAAA,MAFAD,OAHA,KAUA3gB,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,UC9EAhB,MAAA4T,UAAA,sBAAA,CAAA,WAAA,aAAA,cACA,SAAAC,EAAAxT,EAAAksF,GACA,SAAAz4E,EAAAnN,GACA,OAAAA,EAIAA,EAAAwD,KAHA,GAMA,SAAA4J,EAAApN,GACA,OAAAA,EAAAwD,KAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,WACAC,SAAA,EACA7M,MAAA,CACA49B,eAAA,IACArwB,WAAA,KAEAT,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA,IAAA6qF,EAAA1oF,EAAA49B,eAEA1wB,EAAAg4E,EAAA0D,kCAAA5oF,EAAAqmF,QAAArmF,EAAA49B,gBACA1wB,EAAA9N,SAAAC,KAAA,WACA,GAAA6N,EAAAzP,SACA0P,EAAAJ,GAAAK,QAAA,MAAAF,EAAA,GAAApM,IACAjD,EAAAytB,cAAApe,EAAA,GAAApM,OAIAoM,EAAA9N,SAAAC,KAAA,WACAmN,EAAA,WAEAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,sBACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,gBAAA,IAAAvN,EAAAuN,YAAAvN,EAAAuN,WACAC,yBAAA,EACA1M,GAAA,SAAAxB,GAAA,OAAAA,EAAAwB,IACA1E,KAAA8Q,IAGArP,EAAAmQ,YAGAnQ,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGAjO,EAAA6D,OAAA,iBAAA,SAAAC,GACA,IAEA4lC,EAFAg/C,GAAA5kF,IACA4kF,EAAA5kF,GACA4lC,EAAAw7C,EAAA0D,kCAAA5oF,EAAAqmF,QAAAviF,IACA1E,SAAAC,KAAA,WACA6N,EAAAzP,OAAA,EACAyP,EAAA/Q,KAAAsf,MAAAvO,EAAAw8B,GAEA,GAAAx8B,EAAAzP,QACA0P,EAAAJ,GAAAK,QAAA,MAAAF,EAAA,GAAApM,IACAjD,EAAAytB,cAAApe,EAAA,GAAApM,MAEAqM,EAAAJ,GAAAK,QAAA,MAAA,MACAvP,EAAAytB,cAAA,YAMAve,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAvP,EAAAmQ,WACA,QC7FArV,MAAA4T,UAAA,wBAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAA44E,GACA,GAAAA,EACA,OAAArsF,EAAAM,QAAA+rF,EAAAniF,MAGA,SAAAwJ,EAAA24E,GACA,OAAArsF,EAAAM,QAAA+rF,EAAAniF,MAWA,SAAA2lF,EAAAjsB,EAAA97D,GACA,QAAA87D,GACAA,EAAAD,SAAA77D,GAMA,MAAA,CACA6L,SAAA,IACAC,QAAA,UACA5M,MAAA,CACAV,MAAA,WACAs9D,kBAAA,KAEA9vD,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GACA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,2BAAAiH,SAAA0+E,EAAA7oF,EAAA48D,kBAAA,IACA,CAAA97D,GAAA,EAAAoC,KAAA,2BAAAiH,SAAA0+E,EAAA7oF,EAAA48D,kBAAA,IACA,CAAA97D,GAAA,EAAAoC,KAAA,yBAAAiH,SAAA0+E,EAAA7oF,EAAA48D,kBAAA,IACA,CAAA97D,GAAA,EAAAoC,KAAA,2BAAAiH,SAAA0+E,EAAA7oF,EAAA48D,kBAAA,IACA,CAAA97D,GAAA,EAAAoC,KAAA,+BAAAiH,SAAA0+E,EAAA7oF,EAAA48D,kBAAA,IACA,CAAA97D,GAAA,EAAAoC,KAAA,uCAAAiH,SAAA0+E,EAAA7oF,EAAA48D,kBAAA,OAIA/+D,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QC1FAzU,MAAA4T,UAAA,2BAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAA44E,GACA,GAAAA,EACA,OAAArsF,EAAAM,QAAA+rF,EAAAniF,MAGA,SAAAwJ,EAAA24E,GACA,OAAArsF,EAAAM,QAAA+rF,EAAAniF,MAWA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACA5M,MAAA,CACAV,MAAA,WACAo9D,iBAAA,KAEA5vD,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GACA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,kCAAAiH,SAAA,IAAAnK,EAAA48D,mBACA,CAAA97D,GAAA,EAAAoC,KAAA,+CAAAiH,SAAA,IAAAnK,EAAA48D,sBAIA/+D,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QChFAzU,MAAAkF,WAAA,+BAAA,CAAA,SAAA,aAAA,aAAA,sBAAA,cACA,SAAAG,EAAAhF,EAAA8vF,EAAAx/E,EAAArI,GAEAjD,EAAA+qF,eAAA,KACA/qF,EAAAgrF,aAAA,KACAhrF,EAAAirF,QAAA,CACAC,YAAA,EACAC,gBAAA,GAEAnrF,EAAAorF,gBAAA,EACAprF,EAAA5B,KAAA,GAEA,IAAAitF,EAAA,KAEAloE,EAAA,IAAAkvB,WAAAj0C,KAAAq5C,WAAA,CACAG,KAAA,SAAA4iB,GACA,OAAAx6D,EAAA5B,KAAAgD,UAEAq5D,MAAA,SAAA55D,KAEA65D,SAAA,cA4JA,SAAAjkD,IACA,GAAAzW,EAAA+qF,gBACA/qF,EAAAgrF,cACAhrF,EAAA+qF,gBAAA/qF,EAAAgrF,aAAA,CAEA,IAAAhrB,EAAA,GAEA,OAAAhgE,EAAAorF,iBACA,KAAA,EACAprB,EACA8qB,EAAAQ,gCAAAtrF,EAAA+qF,eAAA/qF,EAAAgrF,cACA,MACA,KAAA,EACAhrB,EACA8qB,EAAAS,kCAAAvrF,EAAA+qF,eAAA/qF,EAAAgrF,aAAAhrF,EAAAirF,QAAAC,WAAAlrF,EAAAirF,QAAAE,gBACA,MACA,KAAA,EACAnrB,EACA8qB,EAAAU,oCAAAxrF,EAAA+qF,eAAA/qF,EAAAgrF,aAAAhrF,EAAAirF,QAAAC,WAAAlrF,EAAAirF,QAAAE,gBACA,MACA,KAAA,EACAnrB,EACA8qB,EAAAW,kCAAAzrF,EAAA+qF,eAAA/qF,EAAAgrF,aAAAhrF,EAAAirF,QAAAC,WAAAlrF,EAAAirF,QAAAE,gBAIAnrF,EAAA5B,KAAA4hE,EACAhgE,EAAA5B,KAAAgD,SAAAC,KAAA,SAAAizB,GAqCA,IAAAl2B,EAAAA,EApCAk2B,EAqCAo3D,EAAAtvF,EAAAuvF,KAAAvvF,EAAA+a,IAAA/Y,EAAA,SAAAqB,OACAmsF,EAAAxvF,EAAAuvF,KAAAvvF,EAAA+a,IAAA/Y,EAAA,OAAAqB,OAEA6gC,EAAAjN,KAAAysB,IAAA4rC,EAAAE,GAEAP,GACAA,EAAAlqE,OAAA,cAAAkS,KAAAysB,IAAA,IAAA,GAAAxf,GAAA,MAzCAnd,EAAAya,UAIA,SAAAiuD,IACA,IAAAC,EAAA,GACA,OAAA9rF,EAAAorF,iBACA,KAAA,EACAU,EAAA9wF,EAAAM,QAAA,0CACA,MACA,KAAA,EACAwwF,EAAA9wF,EAAAM,QAAA,6CACA,MACA,KAAA,EACAwwF,EAAA9wF,EAAAM,QAAA,+CACA,MACA,KAAA,EACAwwF,EAAA9wF,EAAAM,QAAA,6CAGA+vF,GACAA,EAAAlqE,OAAA,QAAAnmB,EAAAM,QAAA,uCAAA,MAAAwwF,GAEA9rF,EAAAM,aAAAmD,eAEAzD,EAAAM,aAAAmD,aAAAgF,aAAA,EAAA,CAAAhI,QAAA,GAAAT,EAAAorF,gBACApwF,EAAAM,QAAA,oBACAN,EAAAM,QAAA,wBACA0E,EAAAM,aAAAmD,aAAAgF,aAAA,EAAA,CAAAhI,QAAA,GAAAT,EAAAorF,gBACApwF,EAAAM,QAAA,kBACAN,EAAAM,QAAA,uBArNA0E,EAAA+rF,iBAAA,CACAC,QAAA,SACAC,YAAA,SAAAprF,GACAwqF,GACAA,EAAA3uC,WAKA18C,EAAAksF,cAAA,CACA/oE,WAAAA,EACAgpE,YAAA,OACAC,YAAA,KACAC,YAAA,eACAhxF,MAAA,GAIAixF,KAAA,CACA3rF,MAAA,GACA4rF,QAAA,IAEAhxF,MAAA,CACAixF,cAAA,SAAAC,GAEA,IAAAC,EAAAtwF,EAAAsI,MAAA+nF,EAAAE,SAAA,UACAC,EAAAxwF,EAAAsI,MAAA+nF,EAAAI,QAAA,UAEA,OAAA,GAAAH,EACA,IAAAA,EAAA,KAAAD,EAAApxF,MAGAoxF,EAAApxF,MAAA,KAAAuxF,EAAA,MAGAE,OAAA,CACA1sC,KAAA,GACAE,MAAA,GAEAxxC,KAAA,CACAi+E,UAAA,UAEAC,QAAA,CACAhqE,SAAA,EACAiqE,OAAA,IACAC,qBAAA,SAAAT,GAEA,IAAAU,EAAA/wF,EAAAsI,MAAAtI,EAAAkoB,OAAAtkB,EAAA5B,KAAA,CAAA2b,KAAA0yE,EAAAW,SAAA,gBACAx/E,EAAAylB,KAAAC,MAAA,IAAA65D,EAAAV,EAAAY,OAAA,KAAA,IAEA,OAAA,GAAArtF,EAAAorF,gBAGA,CACAxtF,KACA,MAAA5C,EAAAM,QAAA,oBAAA,SACAmxF,EAAAW,OACA,WAAApyF,EAAAM,QAAA,kBAAA,SACAmxF,EAAA1hD,OACA,WACA/vC,EAAAM,QAAA,sBAAA,SACAmxF,EAAAY,OAAA,KAAAz/E,EAAA,MAKA,CACAhQ,KACA,MAAA5C,EAAAM,QAAA,sBAAA,SACAmxF,EAAAW,OACA,WAAApyF,EAAAM,QAAA,oBAAA,SACAmxF,EAAA1hD,OACA,WACA/vC,EAAAM,QAAA,sBAAA,SACAmxF,EAAAY,OAAA,KAAAz/E,EAAA,OAMA0/E,qBAAA,SAAAb,GACA,MAAA,CACA7uF,KACA,MAAA6uF,EAAApxF,MAAA,aACAL,EAAAM,QAAA,sBAAA,MACA,GAAAmxF,EAAAG,SACAH,EAAAG,SACAH,EAAAC,cAIAjgE,cAAA,SAAA5rB,GACAwqF,EAAAxqF,EAAAuI,UACAyiF,MAIAvgF,EAAA+B,cACArN,EAAA+qF,eAAAz/E,EAAA2C,IAAA,0CACAjO,EAAAgrF,aAAA1/E,EAAA2C,IAAA,wCACAjO,EAAAorF,gBAAA9/E,EAAA2C,IAAA,iCAAA,EACAjO,EAAAirF,QAAAC,WAAA5/E,EAAA2C,IAAA,wCAAA,EACAjO,EAAAirF,QAAAE,eAAA7/E,EAAA2C,IAAA,4CAAA,EAEAwI,KAGAzW,EAAA+qF,gBACA9nF,EAAAc,kBAAA1C,KAAA,SAAAjD,GACAA,IACA4B,EAAA+qF,eAAA3sF,EAAA0E,GACA9C,EAAAgrF,aAAA5sF,EAAA0E,GACA2T,OAKAzW,EAAAutF,qBAAA,SAAAtpF,GACAqH,EAAA+B,aACA/B,EAAAqC,IAAA,yCAAA1J,GAEAwS,KAGAzW,EAAAwtF,mBAAA,SAAAvpF,GACAqH,EAAA+B,aACA/B,EAAAqC,IAAA,uCAAA1J,GAEAwS,KAGAzW,EAAAytF,wBAAA,SAAAxkF,GACAqC,EAAA+B,aACA/B,EAAAqC,IAAA,+BAAA1E,GAEA4iF,IACAp1E,KAGAzW,EAAA0tF,mBAAA,SAAA/xF,GACA2P,EAAA+B,aACA/B,EAAAqC,IAAA,qCAAAhS,GAEA8a,KAGAzW,EAAA2tF,uBAAA,SAAAhyF,GACA2P,EAAA+B,aACA/B,EAAAqC,IAAA,yCAAAhS,GAEA8a,KA+EAzW,EAAAM,aAAA,CACAwE,KAAA,2BACAyqC,MAAA,CACAE,sBAAA,EACAvqB,QAAA,SAEAmqB,OAAA,CAAAC,SAAA,KACA/uC,QAAA,CACA,CACAC,UAAA,OACAC,QAAA,GAAAT,EAAAorF,gBACApwF,EAAAM,QAAA,oBACAN,EAAAM,QAAA,sBACAoF,SAAA,UAEA,CACAF,UAAA,KACAC,QAAA,GAAAT,EAAAorF,gBACApwF,EAAAM,QAAA,kBACAN,EAAAM,QAAA,oBACAoF,SAAA,UAEA,CAAAF,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,SAAAC,MAAA,aChRAhG,MAAAkF,WAAA,+BAAA,CAAA,SAAA,UAAA,aAAA,aACA,SAAAG,EAAAoI,EAAApN,EAAA8vF,GAgHA,SAAA15E,EAAA0F,EAAA5a,GAEA,IAAA0xF,EAAA7xF,OAAAiE,EAAA8W,UACA+2E,EAAA9xF,OAAAiE,EAAA9D,QAEA0xF,EAAA3xF,WAAA4xF,EAAA5xF,UACA+D,EAAA8tF,uBAAAhD,EAAAiD,wCAAAj3E,EAAA5a,GAEA8D,EAAA8tF,uBAAA,GAtHA9tF,EAAA8W,SAAA/a,SAAA6U,QAAA,OAAA1U,SACA8D,EAAA9D,OAAAH,SAAA6U,QAAA,OAAA8I,IAAA,EAAA,QAAAxd,SAEA8D,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAyX,mBAAA,WAEA,IAAAm2E,EAAA7xF,OAAAiE,EAAA8W,UACA+2E,EAAA9xF,OAAAiE,EAAA9D,QAEA8D,EAAA8W,UAAA82E,EAAA3xF,WAAA+D,EAAA9D,QAAA2xF,EAAA5xF,YAEA2xF,EAAAhiB,QAAAiiB,KACA7tF,EAAA9D,OAAA0xF,EAAA1xF,UAGA,GAAA2xF,EAAAvuD,KAAAsuD,EAAA,UACA5tF,EAAA9D,OAAA0xF,EAAAl0E,IAAA,GAAA,QAAAxd,UAGAkV,EAAApR,EAAA8W,SAAA9W,EAAA9D,UAIA8D,EAAAM,aAAA,CACAwE,KAAA,oBACAmgB,yBAAA,EACA8nD,0BAAA,EACAC,uBAAA,EACAzsE,QAAA,CACA,CACAC,UAAA,YACAC,QAAA,YACAC,SAAA,SACAwkB,SAAA,EACAvkB,MAAA,QAEA,CACAH,UAAA,kBACAC,QAAAzF,EAAAM,QAAA,sBACAoF,SAAA,OACAjE,OAAA,CAAAsI,IAAA,sBACApE,MAAA,QACAC,UAAA,OAEA,CAAAJ,UAAA,gBAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,OAAAjE,OAAA,CAAAsI,IAAA,SAAApE,MAAA,QACA,CAAAH,UAAA,gBAAAC,QAAAzF,EAAAM,QAAA,qBAAAoF,SAAA,SAAAC,MAAA,QAAAukB,SAAA,GACA,CAAA1kB,UAAA,iBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,wBAAAC,QAAAzF,EAAAM,QAAA,oBAAA,MAAAN,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,0BAAAC,QAAAzF,EAAAM,QAAA,oBAAA,MAAAN,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,oBAAAC,QAAAzF,EAAAM,QAAA,YAAA,MAAAN,EAAAM,QAAA,wBAAAoF,SAAA,UACA,CAAAF,UAAA,gBAAAC,QAAAzF,EAAAM,QAAA,YAAA,MAAAN,EAAAM,QAAA,kBAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,YAAA,MAAAN,EAAAM,QAAA,sBAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,oBAAAqF,MAAA,QAAAukB,SAAA,GACA,CACA1kB,UAAA,2BACAC,QAAAzF,EAAAM,QAAA,6BACAoF,SAAA,SACAC,MAAA,QACAmI,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAAilF,4BAGA,CACAxtF,UAAA,yBACAC,QAAAzF,EAAAM,QAAA,2BACAoF,SAAA,SACAC,MAAA,QACAmI,mBAAA,SAAAC,GACA,OAAAX,EAAA,iBAAAA,CAAAW,EAAAklF,0BAEA,CACAztF,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAAo5C,QAEAxhD,MAAA,QACAukB,SAAA,GAEA,CAAA1kB,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAC,MAAA,QAAAukB,SAAA,GACA,CAAA1kB,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,QAAAukB,SAAA,GACA,CAAA1kB,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,QAAAukB,SAAA,GACA,CAAA1kB,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,QAAAukB,SAAA,GACA,CAAA1kB,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAwkB,SAAA,GACA,CACA1kB,UAAA,kBACAC,QAAAzF,EAAAM,QAAA,oBACAoF,SAAA,OACAjE,OAAA,CAAAb,KAAA,SACA+E,MAAA,OACAqmD,UAAA,QACA9hC,SAAA,GAEA,CACA1kB,UAAA,gBACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,SAAAA,CAAAW,EAAAmlF,gBAEAhpE,SAAA,KAiBA9T,EAAApR,EAAA8W,SAAA9W,EAAA9D,QAEA8D,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,EAAApR,EAAA8W,SAAA9W,EAAA9D,aChIAvB,MAAAkF,WAAA,iCAAA,CAAA,SAAA,eAAA,aACA,SAAAG,EAAAiwE,EAAAlxE,GAEAiB,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAA8W,SAAA/a,SAAA6U,QAAA,SAAA1U,SACA8D,EAAA9D,OAAAH,SAAAqrB,MAAA,SAAAlrB,SACA8D,EAAAqyD,mBAAAtzD,EAAA+uC,kBAAAruC,OACAV,EAAA+uC,kBAAA,GAAAD,SACA,KAEA7tC,EAAAmuF,uBAAA,WACAnuF,EAAAkwE,kBAAAD,EAAAoB,wCAAArxE,EAAAqyD,mBAAAryD,EAAA8W,SAAA9W,EAAA9D,SAGA8D,EAAAkwE,kBAAAD,EAAAoB,wCAAArxE,EAAAqyD,mBAAAryD,EAAA8W,SAAA9W,EAAA9D,QAEA8D,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,cAAAC,WAAA,CAAA,QACAK,iBAAA,EACAJ,WAAA,CACA,CAAAC,MAAA,uBAAAE,YAAA,kBAAA2E,KAAA,UACA,CAAA7E,MAAA,mBAAAE,YAAA,mBAAA2E,KAAA,SAAAta,MAAA,SACA,CAAAyV,MAAA,cAAAE,YAAA,wBAAA3V,MAAA,QAAAua,MAAA,cCzBAvgB,MAAAkF,WAAA,qBAAA,CAAA,SAAA,UAAA,aAAA,KAAA,aAAA,cAAA,oBAAA,WACA,SAAAG,EAAAoI,EAAApN,EAAAkN,EAAA4iF,EAAA7nF,EAAAiO,EAAA4S,GAUA,SAAAC,IACA7b,EAAAiD,IAAA,CAAAnL,EAAAouF,kBAAAhtF,SAAApB,EAAA+hE,gBAAA3gE,SAAApB,EAAAikB,OAAA7iB,WAAAC,KAAA,WACA,IAAA6iB,EAAA9nB,EAAA+nB,OAAAnkB,EAAAokB,aAAAH,QACA+9C,EAAA5lE,EAAA+nB,OAAAnkB,EAAAokB,aAAA29C,iBACAssB,GAAA,IAAAruF,EAAAokB,aAAAH,OAAAlU,SAAA,GACA/P,EAAAsuF,eAAA7uF,OAAA,EACAO,EAAAsuF,eAAAnwF,KAAAsf,MAAAzd,EAAAsuF,eACAlyF,EAAAkoB,OAAAtkB,EAAAouF,kBAAA,SAAA97E,GACA,IAAAulB,GAAA,EAWA,OAVAw2D,EACAx2D,EAAAA,IAAAvlB,EAAA2R,OAAAxkB,OAEA,EAAAykB,EAAAzkB,SACAo4B,EAAAA,GAAA,EAAAz7B,EAAAmyF,aAAAj8E,EAAA2R,OAAAC,GAAAzkB,QAIAo4B,EADA,EAAAmqC,EAAAviE,OACAo4B,GAAAz7B,EAAAuiE,SAAAqD,EAAA1vD,EAAAQ,kBAEA+kB,OA3BA73B,EAAAikB,OAAAH,EAAA5c,aAAA,GACAlH,EAAAokB,aAAA,CAAAH,OAAA,GAAA89C,gBAAA,IAEA/hE,EAAA+hE,gBAAA7wD,EAAAhK,cACAlH,EAAAouF,kBAAA,GACApuF,EAAAsuF,eAAA,GA4BAtuF,EAAA6F,OAAA,eAAA,SAAAC,EAAAC,GACAge,MACA,GAEA9gB,EAAAc,kBACA1C,KAAA,SAAA2C,GACAhE,EAAAiE,WAAAD,EAAAlB,GACA9C,EAAAouF,kBAAAtD,EAAA0D,2BAAAxuF,EAAAiE,YACA8f,MAGA/jB,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAiE,aACAjE,EAAAouF,kBAAAtD,EAAA0D,2BAAAxuF,EAAAiE,YACA8f,OAIA/jB,EAAA6E,iBAAA,SAAAZ,GACAA,IACAjE,EAAAouF,kBAAAtD,EAAA0D,2BAAAxuF,EAAAiE,YACA8f,MAIA/jB,EAAAM,aAAA,CACAwE,KAAA,iBACAmgB,yBAAA,EACA1kB,QAAA,CACA,CAAAC,UAAA,iBAAAC,QAAAzF,EAAAM,QAAA,qBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,oBAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,SAAAC,MAAA,SACA,CACAH,UAAA,aACAC,QAAAzF,EAAAM,QAAA,kBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,IAAA8uB,EAAA9uB,EAAAi/B,YASA,OARAj/B,EAAA0lF,qBACA52D,GAAA,KAAA9uB,EAAA0lF,mBAAA,KAGA1lF,EAAA6lD,aACA/2B,GAAA,MAAA9uB,EAAA6lD,YAGA/2B,IAGA,CAAAr3B,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAjE,OAAA,CAAAsI,IAAA,sBAAApE,MAAA,QAAAC,UAAA,OACA,CAAAJ,UAAA,gBAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,OAAAjE,OAAA,CAAAsI,IAAA,SAAApE,MAAA,QACA,CAAAH,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,QACA,CACAH,UAAA,2BACAC,QAAAzF,EAAAM,QAAA,6BACAoF,SAAA,SACAC,MAAA,OACAmI,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAAilF,4BAGA,CACAxtF,UAAA,kBACAC,QAAAzF,EAAAM,QAAA,oBACAoF,SAAA,OACAjE,OAAA,CAAAb,KAAA,SACA+E,MAAA,OACAqmD,UAAA,SAEA,CACAxmD,UAAA,gBACAC,QAAAzF,EAAAM,QAAA,kBACAoF,SAAA,SACAC,MAAA,QACAmI,mBAAA,SAAAC,GACA,OAAAvJ,OAAAb,UAAAwmB,SAAApc,EAAA2lF,WAAA3lF,EAAA4lF,iBAAA5lF,EAAA6lF,iBAGA,CACApuF,UAAA,cACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAC,MAAA,QACAmI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAA8lF,eAGA,CAAAruF,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,gBAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAwkB,SAAA,GACA,CACA1kB,UAAA,SACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,SAAAA,CAAAW,EAAAkb,SAEAiB,SAAA,QCpIAvqB,MAAAkF,WAAA,2BAAA,CAAA,SAAA,aACA,SAAAG,EAAA8qF,GAEA,IAAAn6E,EAAA5U,SAAA6U,QAAA,SAAAC,SAAA,EAAA,QAAAD,QAAA,SA2BA,SAAAQ,EAAA0F,EAAA5a,GACA8D,EAAA0L,qBAAAo/E,EAAAgE,6BAAAh4E,EAAA5a,GAEA8D,EAAA0L,qBAAAtK,SAAAC,KAAA,SAAAjD,GACA4B,EAAAsY,YAAAnC,WAAA,CAAA,CAAAC,MAAA,gBAAAE,YAAA,oBAAA2E,KAAA,WACA,IAAA8zE,EAAA,GACA,GAAA,EAAA3wF,EAAAqB,OACA,IAAA,IAAA80B,KAAAn2B,EAAA,GACAA,EAAA,GAAAvC,eAAA04B,IAAA,gBAAAA,GAAA,kBAAAA,GACAw6D,EAAA5wF,KAAA,CAAAiY,MAAAme,EAAAje,YAAAie,EAAA5zB,MAAA,SAIA,IAAAquF,EAAA5yF,EAAAqT,OAAAs/E,EAAA,eACA/uF,EAAAsY,YAAAnC,WAAAhY,KAAAsf,MAAAzd,EAAAsY,YAAAnC,WAAA64E,KAvCAhvF,EAAA8W,SAAAnG,EAAAzU,SACA8D,EAAA9D,OAAAH,OAAA4U,GAAAyW,MAAA,SAAAlrB,SAEA8D,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAuhE,iBAAA,SAAAzqD,GACAA,GACA1F,EAAA0F,EAAA9W,EAAA9D,SAIA8D,EAAAwhE,eAAA,SAAAtlE,GACAA,GACAkV,EAAApR,EAAA8W,SAAA5a,IAIA8D,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,iBAAAC,WAAA,CAAA,QACAC,WAAA,CAAA,CAAAC,MAAA,gBAAAE,YAAA,oBAAA2E,KAAA,YAsBA7J,EAAApR,EAAA8W,SAAA9W,EAAA9D,WChDAvB,MAAAkF,WAAA,2BAAA,CAAA,SAAA,UAAA,aAAA,KAAA,aAAA,cAAA,WACA,oBAAA,sBAAA,cACA,SAAAG,EAAAoI,EAAApN,EAAAkN,EAAA4iF,EAAA7nF,EAAA6gB,EAAA5S,EACA5F,EAAAnI,GAiBA,SAAA4gB,IACA7b,EAAAiD,IAAA,CAAAnL,EAAAqrD,WAAAjqD,SAAApB,EAAAikB,OAAA7iB,SAAApB,EAAA+hE,gBAAA3gE,WAAAC,KAAA,WACA,IAAA6iB,EAAA9nB,EAAA+nB,OAAAnkB,EAAAokB,aAAAH,QACA+9C,EAAA5lE,EAAA+nB,OAAAnkB,EAAAokB,aAAA29C,iBACA/hE,EAAAooC,QAAA3oC,OAAA,EACAO,EAAAooC,QAAAjqC,KAAAsf,MAAAzd,EAAAooC,QACAhsC,EAAAkoB,OAAAtkB,EAAAqrD,WAAA,SAAA/4C,GACA,IAAAulB,GAAA,EAOA,OANA,EAAA3T,EAAAzkB,SACAo4B,EAAAA,GAAA,EAAAz7B,EAAAmyF,aAAAj8E,EAAA47E,cAAAhqE,GAAAzkB,QAGAo4B,EADA,EAAAmqC,EAAAviE,OACAo4B,GAAAz7B,EAAAuiE,SAAAqD,EAAA1vD,EAAAQ,kBAEA+kB,OAsCA,SAAAphB,IACA,IAAAzW,EAAAk6D,kBACAl6D,EAAAqrD,WAAAy/B,EAAAmE,wCAAAjvF,EAAAiE,YAEAjE,EAAAqrD,WAAAy/B,EAAAoE,yCAAAlvF,EAAA8W,SAAA9W,EAAA9D,QAEA6nB,IAzEA/jB,EAAAk6D,kBAAA,EACAl6D,EAAA8W,SAAA/a,SAAA8U,SAAA,EAAA,KAAAD,QAAA,OAAA1U,SACA8D,EAAA9D,OAAAH,SAAA6U,QAAA,OAAA1U,SAEAoP,EAAA+B,cACArN,EAAAk6D,kBAAA5uD,EAAA2C,IAAA,sBAAA,GAGAjO,EAAAokB,aAAA,CAAAH,OAAA,GAAA89C,gBAAA,IAEA/hE,EAAAikB,OAAAH,EAAA5c,cACAlH,EAAA+hE,gBAAA7wD,EAAAhK,cACAlH,EAAAqrD,WAAA,GACArrD,EAAAooC,QAAA,GAsBApoC,EAAAmvF,YAAA,CACAvsE,MAAA5iB,EAAAikB,OACAmI,YAAA,OACAC,UAAA,UACAC,uBAAA,EACAC,iBAAA,EACAzJ,WAAA,EACA0J,aAAA,aACAnd,YAAArU,EAAAM,QAAA,yBACA+nB,eAAA,CACA1nB,MAAA,wBAIAqE,EAAAyX,mBAAA,WACAnM,EAAA+B,aACA/B,EAAAqC,IAAA,oBAAA3N,EAAAk6D,mBAGA,MAAAl6D,EAAAiE,YACAwS,IAGAzW,EAAAM,aAAAmD,eACA,IAAAzD,EAAAk6D,kBACAl6D,EAAAM,aAAAmD,aAAAgF,aAAA,iBAAA,WAAA,GAEAzI,EAAAM,aAAAmD,aAAAgF,aAAA,iBAAA,WAAA,KAcAzI,EAAA6F,OAAA,eAAA,SAAAC,EAAAC,GACAge,MACA,GAEA9gB,EAAAc,kBACA1C,KAAA,SAAA2C,GACAhE,EAAAiE,WAAAD,EAAAlB,GACA2T,MAGAzW,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAiE,YACAwS,MAIAzW,EAAA6E,iBAAA,SAAAZ,GACAA,GACAwS,KAIAzW,EAAAM,aAAA,CACAwE,KAAA,uBACAmgB,yBAAA,EACA1kB,QAAA,CACA,CACAuE,KAAA,iBACAtE,UAAA,aACAC,QAAAzF,EAAAM,QAAA,oBACAoF,SAAA,SACAC,MAAA,QACAmI,mBAAA,SAAAC,GACA,OAAAX,EAAA,WAAAA,CAAAW,EAAA9E,aAEAihB,QAAA,IAAAllB,EAAAk6D,mBAEA,CACA15D,UAAA,YACAC,QAAA,YACAC,SAAA,SACAwkB,SAAA,EACAvkB,MAAA,QAEA,CACAH,UAAA,oBACAC,QAAAzF,EAAAM,QAAA,uBACAoF,SAAA,SACAilB,YAAA,EACA7c,mBAAA,SAAAC,GACA,OAAAX,EAAA,kBAAAA,CAAAW,EAAAqmF,oBAEAzuF,MAAA,QAEA,CAAAH,UAAA,iBAAAC,QAAAzF,EAAAM,QAAA,qBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,iBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAE,UAAA,QACA,CAAAJ,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,QACA,CACAH,UAAA,kBACAC,QAAAzF,EAAAM,QAAA,oBACAoF,SAAA,OACAjE,OAAA,CAAAb,KAAA,SACA+E,MAAA,OACAqmD,UAAA,SAEA,CACAxmD,UAAA,0BACAC,QAAAzF,EAAAM,QAAA,8BACAoF,SAAA,SACAC,MAAA,OACAukB,QAAA/hB,EAAAU,SAAA,0BAEA,CAAArD,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,SAAAC,MAAA,QACA,CACAH,UAAA,SACAC,QAAAzF,EAAAM,QAAA,kBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,SAAAA,CAAAW,EAAAi6B,SAEAriC,MAAA,QAEA,CAAAH,UAAA,sBAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,wBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,4BAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,SAAAC,MAAA,QACA,CACAH,UAAA,sBACAC,QAAAzF,EAAAM,QAAA,wBACAoF,SAAA,OACAjE,OAAA,CAAAb,KAAA,SACA+E,MAAA,OACAqmD,UAAA,SAEA,CACAxmD,UAAA,qBACAC,QAAAzF,EAAAM,QAAA,uBACAoF,SAAA,OACAjE,OAAA,CAAAb,KAAA,SACA+E,MAAA,OACAqmD,UAAA,SAEA,CAAAxmD,UAAA,gBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,qBAAAoF,SAAA,SAAAC,MAAA,OAAAukB,SAAA,GACA,CAAA1kB,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,YAAAoF,SAAA,UACA,CAAAF,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UACA,CACAF,UAAA,gBACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAAsmF,iBAGA,CAAA7uF,UAAA,gBAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,UACA,CACAF,UAAA,mBACAC,QAAAzF,EAAAM,QAAA,sCACAoF,SAAA,OACAjE,OAAA,CAAAb,KAAA,SACA+E,MAAA,OACAukB,SAAA,EACA8hC,UAAA,SAEA,CACAxmD,UAAA,gBACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,SAAAA,CAAAW,EAAAmlF,gBAEAhpE,SAAA,GAEA,CACA1kB,UAAA,mBACAC,QAAAzF,EAAAM,QAAA,2BACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,iBAAAA,CAAAW,EAAA+J,mBAEAoS,SAAA,GAEA,CAAA1kB,UAAA,iBAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,qBAAAoF,SAAA,SAAAwkB,SAAA,GACA,CACA1kB,UAAA,mBACAC,QAAAzF,EAAAM,QAAA,uBACAoF,SAAA,OACAjE,OAAA,CAAAb,KAAA,SACA+E,MAAA,OACAqmD,UAAA,QACA9hC,SAAA,GACA,CACA1kB,UAAA,mBACAC,QAAAzF,EAAAM,QAAA,0BACAoF,SAAA,OACAjE,OAAA,CAAAb,KAAA,SACA+E,MAAA,OACAukB,SAAA,EACA8hC,UAAA,SAEA,CACAxmD,UAAA,oBACAC,QAAAzF,EAAAM,QAAA,6BACAoF,SAAA,SACAwkB,SAAA,GAEA,CACA1kB,UAAA,iBACAC,QAAAzF,EAAAM,QAAA,kBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAAumF,iBAEApqE,SAAA,GAEA,CACA1kB,UAAA,iBACAC,QAAAzF,EAAAM,QAAA,kBACAoF,SAAA,SACAwkB,SAAA,QCvQAvqB,MAAA4T,UAAA,sCAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GAEA,SAAAyT,EAAA4I,GACA,GAAAA,EAEA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,SAAAwJ,EAAA2I,GACA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACA8e,SAAA,EACA7e,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEAA,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAhR,OAAAgR,KAGAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAAA,KAGA6S,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAI,yBAAA,EACAf,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAnR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,0CACA,CAAApC,GAAA,EAAAoC,KAAA,6CACA,CAAApC,GAAA,EAAAoC,KAAA,+CACA,CAAApC,GAAA,EAAAoC,KAAA,gDAIA6J,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,MAGA,QCrDAhB,MAAA8gC,QAAA,aAAA,CAAA,YAAA,gBACA,SAAAC,EAAAE,GACA,IAAA2zD,EAAA7zD,EAAA,sBAAA,GAAA,CACA8zD,wBAAA,CAAA/yD,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,wCACAuyD,wCAAA,CAAAxyD,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,wDACAwyD,yCAAA,CAAAzyD,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,yDACA8xD,2BAAA,CAAA/xD,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,2CAEA+yD,mCAAA,CAAAhzD,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,4CACAgzD,qCAAA,CAAAjzD,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,8CACAizD,qCAAA,CAAAlzD,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,8CACAkzD,uCAAA,CAAAnzD,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,gDAEAqxD,wCAAA,CAAAtxD,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,0DAsEA,MAAA,CACAoyD,6BApEA,SAAAh4E,EAAA5a,GACA,OAAA0/B,EAAAkC,UAAA,0BAAAyxD,EAAA,CACAz4E,SAAAA,EACA5a,OAAAA,KAkEA+yF,wCA9DA,SAAAhrF,GACA,OAAA23B,EAAAkC,UAAA,0CAAAyxD,EAAA,CACAtrF,WAAAA,KA6DAirF,yCAzDA,SAAAp4E,EAAA5a,GACA,OAAA0/B,EAAAkC,UAAA,2CAAAyxD,EAAA,CACAz4E,SAAAA,EACA5a,OAAAA,KAuDAsyF,2BA5CA,SAAAvqF,GACA,OAAA23B,EAAAkC,UAAA,6BAAAyxD,EAAA,CACAtrF,WAAAA,KA2CAqnF,gCAvCA,SAAAP,EAAAC,GACA,OAAApvD,EAAAkC,UAAA,qCAAAyxD,EAAA,CACAxE,eAAAA,EACAC,aAAAA,KAqCAO,kCAjCA,SAAAR,EAAAC,EAAA6E,EAAAC,GACA,OAAAl0D,EAAAkC,UAAA,uCAAAyxD,EAAA,CACAxE,eAAAA,EACAC,aAAAA,EACA6E,kBAAAA,EACAC,sBAAAA,KA6BArE,kCAzBA,SAAAV,EAAAC,EAAA6E,EAAAC,GACA,OAAAl0D,EAAAkC,UAAA,uCAAAyxD,EAAA,CACAxE,eAAAA,EACAC,aAAAA,EACA6E,kBAAAA,EACAC,sBAAAA,KAqBAtE,oCAjBA,SAAAT,EAAAC,EAAA6E,EAAAC,GACA,OAAAl0D,EAAAkC,UAAA,yCAAAyxD,EAAA,CACAxE,eAAAA,EACAC,aAAAA,EACA6E,kBAAAA,EACAC,sBAAAA,KAaA/B,wCAxDA,SAAAj3E,EAAA5a,GACA,OAAA0/B,EAAAkC,UAAA,0CAAAyxD,EAAA,CACAz4E,SAAAA,EACA5a,OAAAA,SCvCAvB,MAAAkF,WAAA,cAAA,CAAA,SAAA,SAAA,aAAA,aACA,SAAAG,EAAAC,EAAAjF,EAAA+0F,GAEA,SAAAC,EAAAC,EAAA1sF,GACAvD,EAAAkwF,eAAAD,EACAjwF,EAAA2D,WAAA,wBAAA,CAAAssF,OAAAA,EAAA1sF,UAAAA,IAGAvD,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAmwF,QAAAJ,EAAAprE,QAAA,GACAqrE,EAAA,QAGAhwF,EAAAmwF,QAAAJ,EAAAprE,QAAA,GAEA3kB,EAAAM,aAAA,CACAwE,KAAA,UACAvE,QAAA,CACA,CAAAC,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,QAAAC,UAAA,OACA,CAAAJ,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,UACA,CAAAF,UAAA,mCAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,QACA,CAAAH,UAAA,qCAAAC,QAAAzF,EAAAM,QAAA,yBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,QACA,CAAAH,UAAA,qCAAAC,QAAAzF,EAAAM,QAAA,yBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,QACA,CAAAH,UAAA,qBAAAC,QAAAzF,EAAAM,QAAA,4BAAAoF,SAAA,UAAAC,MAAA,UAIAX,EAAAiB,cAAA,SAAA7C,GACA4xF,EAAA5xF,IAGA4B,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAAyuF,EAAAruF,YACAP,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACA2xF,EAAAnuF,OAAAxD,IAGA4B,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,wDACA,CACAzG,MAAA,sBACAyG,SAAA,kEAGA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,EAAAC,SAAAA,MAGA,IAAA5E,EAAAlB,EAAA,CACAL,YAAA,mCACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YCnEAtH,MAAAkF,WAAA,oBAAA,CAAA,SAAA,aAAA,mBACA,SAAAG,EAAA+vF,EAAA7tF,GACAlC,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAAg2D,cAAA9zD,EAAAE,SAEApC,EAAAwC,aAAA,SAAApE,GAcA,SAAAqE,IACAzC,EAAA0C,QAGA,SAAAC,EAAAvE,GACA4B,EAAA4C,YAAAxE,EACA4B,EAAA6C,UAAA,EAlBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEAzE,EAAA0E,GAGAitF,EAAAhtF,OAAA3E,EAAAqE,EAAAE,GAFAotF,EAAA/sF,OAAA5E,EAAAqE,EAAAE,KAeA3C,EAAAiG,WAAA,CAAA,CACA5K,MAAA,WACAyG,SAAA,oDAEA,CACAzG,MAAA,gBACAyG,SAAA,qDAEA,CACAzG,MAAA,4BACAyG,SAAA,sEAGA9B,EAAAiG,WAAAlE,UAAA,KC/CApH,MAAAkF,WAAA,6BAAA,CAAA,SAAA,SAAA,aAAA,4BACA,SAAAG,EAAAC,EAAAjF,EAAAo1F,GAOApwF,EAAAkwF,eAAA,KACA,IAAAtpF,GAAA,EACAC,GAAA,EACA7G,EAAAqwF,uBAAA,GAEArwF,EAAA/E,IAAA,wBAAA,SAAA4F,EAAAyvF,GACAA,EAAAL,OAKAppF,IAJAD,IACA5G,EAAAkwF,iBAAAI,EAAAL,SAAAK,EAAA/sF,UACAvD,EAAAqwF,uBAAAD,EAAAzrE,OAAA2rE,EAAAL,OAAAntF,MAEA,GAKA9C,EAAAqwF,uBAAA,GAEArwF,EAAAkwF,eAAAI,EAAAL,SAGAjwF,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAA7G,EAAAkwF,iBACAlwF,EAAAqwF,uBAAAD,EAAAzrE,OAAA3kB,EAAAkwF,eAAAptF,IACA+D,GAAA,IAIAD,GAAA,IAIA5G,EAAAuwF,mCAAA,CACAzrF,KAAA,yBACAvE,QAAA,CACA,CAAAC,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,QAAAC,UAAA,OACA,CAAAJ,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,UACA,CAAAF,UAAA,mCAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,QACA,CAAAH,UAAA,qCAAAC,QAAAzF,EAAAM,QAAA,yBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,QACA,CAAAH,UAAA,qCAAAC,QAAAzF,EAAAM,QAAA,yBAAAoF,SAAA,SAAAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GAAArE,MAAA,QACA,CAAAH,UAAA,qBAAAC,QAAAzF,EAAAM,QAAA,4BAAAoF,SAAA,UAAAC,MAAA,UAIAX,EAAAiB,cAAA,SAAA7C,GApDA,IAAAmF,EAAA0sF,EAqDA7xF,EApDA4B,EAAAkwF,eAAAD,EACAjwF,EAAA2D,WAAA,wBAAA,CAAAssF,OAAAA,EAAA1sF,UAAAA,KAsDAvD,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAwwF,SAAAxwF,EAAAkwF,eAAAptF,GACA3B,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAAuH,OAAA,WACAvH,EAAAqwF,uBAAAD,EAAAzrE,OAAA3kB,EAAAkwF,eAAAptF,KAEA3B,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAwwF,SAAAxwF,EAAAkwF,eAAAptF,GACA3B,EAAAnB,OAAAsB,MAAA8uF,EAAA1uF,YACAP,EAAAnB,OAAAuH,OAAA,WACAvH,EAAAqwF,uBAAAD,EAAAzrE,OAAA3kB,EAAAkwF,eAAAptF,KAEA3B,EAAAK,UAaA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,2DACA4B,OAXAxB,EAAA2B,YAAA,SAAAvD,GACAgyF,EAAAxuF,OACA5B,EAAAkwF,eAAAptF,GACA1E,EACA,WACA4B,EAAAqwF,uBAAAD,EAAAzrE,OAAA3kB,EAAAkwF,eAAAptF,QAOAd,MAAAhC,EAAAiC,YC7FAtH,MAAAkF,WAAA,mCAAA,CAAA,SAAA,4BAAA,mBACA,SAAAG,EAAAowF,EAAAluF,GACAlC,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAAg2D,cAAA9zD,EAAAE,SAEApC,EAAAwC,aAAA,SAAApE,GAcA,SAAAqE,IACAzC,EAAA0C,QACA1C,EAAAuH,SAGA,SAAA5E,EAAAvE,GACA4B,EAAA4C,YAAAxE,EACA4B,EAAA6C,UAAA,EAnBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEAzE,EAAA0E,GAGAstF,EAAArtF,OAAA/C,EAAAwwF,SAAApyF,EAAAqE,EAAAE,GAFAytF,EAAAptF,OAAAhD,EAAAwwF,SAAApyF,EAAAqE,EAAAE,KAgBA3C,EAAAiG,WAAA,CAAA,CACA5K,MAAA,WACAyG,SAAA,qEAEA,CACAzG,MAAA,gBACAyG,SAAA,uEAGA9B,EAAAiG,WAAAlE,UAAA,KC5CApH,MAAAkF,WAAA,2BAAA,CAAA,SAAA,SAAA,aAAA,KAAA,WACA,eAAA,cAAA,oCAAA,gBAAA,kBACA,sBAAA,UAAA,aAAA,aAAA,aAAA,aACA,SAAAG,EAAAC,EAAAjF,EAAAkN,EAAAsG,EAAAyC,EAAAs8B,EAAAkjD,EACAplF,EAAAqlF,EAAAplF,EAAA22C,EAAAqR,EAAAv0D,EAAA4xF,EAAAZ,GAaA,IAIAa,EAIAC,EANAC,EAAA,GAIAC,EAAA,KAIAA,EAHAzlF,EAAA+B,cACAwjF,EAAAvlF,EAAA2C,IAAA,uCAEA,IAAA3R,KAAA6mE,KAAA8R,MAAA4b,IAMA90F,SAAA6U,QAAA,OAAA1U,SAIA8D,EAAAgxF,kBAAA,KACA,IAAAC,EAAAhgF,EAAAw8B,kBAAA,MAAA,GAAA,GAAArsC,SAEAwoF,EAAA1hF,EAAA,SAAAoJ,EAAAC,GAAA0/E,EAAA5vF,KACA,SAAAjD,GACAkT,EAAAlV,EAAA+a,IAAA/Y,EAAA,SAAAywB,GACA,MAAA,CACA/rB,GAAA+rB,EAAA/rB,GAAA,GACAgC,KAAA+pB,EAAA/pB,UAIA,SAAAnC,GACA4O,EAAA5O,OAIAumF,EAAA,IAAA72C,WAAAj0C,KAAAq5C,WAAA,CACA/7C,IAAA,CAAA,MACAk8C,KAAA,SAAA4iB,GACA,OAAAovB,GAEAnvB,MAAA,SAAA55D,GACA,OAAAqH,EAAA,SAAAoJ,EAAAC,GACAq4E,EAAAvoF,KACA,SAAAjD,GACA8yF,EAAA90F,EAAAsK,KAAAtI,EAAA,CAAA0E,GAAAjC,IACAyQ,EAAA4/E,IAEA,SAAAvuF,GACA4O,EAAA5O,QAIA+3D,SAAA,QAGAkvB,EAAAvoF,KAAA,SAAAjD,GACAkN,EAAA+B,cACArN,EAAAgxF,kBAAA1lF,EAAA2C,IAAA,8CAIA,IAAAu/B,EAAA,KACA2jD,EAAA,KACA5jD,EAAA5oB,SACA3kB,EAAAoxF,kBAAA,GACA,IAAAC,EAAA,GACAC,GAAA,EAEAtxF,EAAAuxF,UAAA,SAAAf,GACA,OAAAp0F,EAAAsK,KAAAypF,EAAA,CAAArtF,GAAA0tF,KAGAxwF,EAAAwxF,kBAAA,SAAAvB,EAAAwB,GACA,OAAAr1F,EAAAsK,KAAAupF,EAAAyB,gBAAA,CAAA5uF,GAAA2uF,KA+BA,IAAAtB,EAAAJ,EAAA4B,iBACAC,EAAA,IAAAv/C,WAAAj0C,KAAAq5C,WAAA,CACAG,KAAA,SAAA4iB,GACA,OAAA21B,EAAA/uF,UAEAq5D,MAAA,SAAA55D,GACA,OAAAqH,EAAA,SAAAoJ,EAAAC,GACA4+E,EAAA/uF,SAAAC,KAAA,SAAAjD,GACAhC,EAAAkJ,QAAAlH,EAAA,SAAAk2B,GACA,GAAAA,EAAAxxB,IAAAjC,EAEA,OADAyQ,EAAAgjB,GACAA,EAKAl4B,EAAAkJ,QAAAgvB,EAAAo9D,gBAAA,SAAAnyF,GACA,GAAAA,EAAAuD,IAAAjC,EAGA,OAFAyQ,EAAA/R,GAEAA,OASA,SAAAoD,GACA4O,EAAA5O,QAIA+3D,SAAA,cAGAm3B,GAAA,EAEAC,EAAA,IAAAz/C,WAAAj0C,KAAAq5C,WAAA,CACAG,KAAA,SAAA4iB,GACA,OAAAtyD,EAAA,SAAAoJ,EAAAC,GACA0wC,EAAA8vC,YAAAF,GAAAxwF,KACA,SAAAjD,GACAyzF,GAAA,EACAvgF,EAAAlT,IAEA,SAAAuE,GACAkvF,GAAA,EACAtgF,EAAA5O,QAIA83D,MAAA,SAAA55D,GACA,OAAAqH,EAAA,SAAAoJ,EAAAC,GACA0wC,EAAA8vC,YAAAF,GAAAxwF,KACA,SAAAjD,GACAyzF,GAAA,EACAvgF,EAAAlV,EAAAsK,KAAAtI,EAAA,CAAA0E,GAAAjC,EAAA,OAEA,SAAA8B,GACAkvF,GAAA,EACAtgF,EAAA5O,QAIA+3D,SAAA,QAGAs3B,EAAA,KACAC,GAAA,EACAC,EAAA,IAAA7/C,WAAAj0C,KAAAq5C,WAAA,CACAG,KAAA,SAAA4iB,GACA,OAAAtyD,EAAA,SAAAoJ,EAAAC,GACAygF,EACA1+B,EAAA2I,oBAAA+1B,EAAAC,GAAA7wF,SAAAC,KAAA,SAAAjD,GACAkT,EAAAlT,IACA,SAAAuE,GACA4O,EAAA5O,KAGA2O,EAAA,OAIAmpD,MAAA,SAAA55D,GACA,OAAA,QAIAsxF,EAAA,KAEAC,EAAA,IAAA//C,WAAAj0C,KAAAq5C,WAAA,CACAC,MAAA,IAAArF,WAAAj0C,KAAAm8D,YAAA,CACA3iB,KAAA,SAAA4iB,GACA,OAAAtyD,EAAA,SAAAoJ,EAAAC,GAIA,GAFAu/E,EAAA,GAEAuB,IAAA,CAKA,GAAAf,EAIA,OAFAhgF,EAAA+/E,QACAC,GAAA,GAIA,IAAAgB,EAAA,GAEA3hF,EAAA5U,OAAAw2F,EAAAC,oBAAA5hF,QAAA,OAAA1U,SACA8hC,EAAAjiC,OAAAw2F,EAAAE,kBAAA7hF,QAAA,OAAA1U,SAEA00F,EAAArjD,EAAAokD,eAAAhhF,EAAAqtB,GACA,IAAA00D,EAAAjC,EAAAkC,QAAA3yF,EAAAgxF,kBAAArgF,GACAiiF,EAAAlC,EAAAmC,sBAAA7yF,EAAAgxF,kBAAArgF,EAAAqtB,GAEA91B,EAAAiD,IAAA,CAAAylF,EAAA8B,EAAAE,EAAAzC,EAAA/uF,WAAAC,KACA,SAAAjD,GACA,IAAAgzF,EAAAh1F,EAAAqT,OAAArT,EAAAkoB,OAAAlmB,EAAA,GAAA,SAAAyC,GACA,OAAA,EAAAA,EAAAiyF,aAAArzF,QAAA,EAAAoB,EAAA0lB,SAAA9mB,SACA,CAAA,UAAA,SAEA+tC,EAAApxC,EAAAiW,MAAA++E,EAAA,MACAD,EAAA/yF,EAAA,GAEAhC,EAAAkJ,QAAA6rF,EAAA4B,QAAA,SAAAtsF,GAGA,IAFA,IAAAusF,EAAAj3F,OAAA0K,EAAAusF,OACAC,EAAAl3F,OAAA0K,EAAAwsF,KACAD,EAAA5nE,SAAA6nE,IAAA,CACA,IAAAnwF,EAAA,aAAAkwF,EAAAv2F,OAAA,QACA7B,QAAAisC,QAAA,IAAA/jC,GAAA2G,SAAA,mBAEAupF,EAAAt5E,IAAA,GAAA,QAIAtd,EAAAkJ,QAAA8rF,EAAA,SAAAvwF,GACA,IACAkyF,EADA,EAAAlyF,EAAA0lB,SAAA9mB,SACAszF,EACA32F,EAAA+a,IAAAtW,EAAA0lB,SAAA,GAAAwsE,QAAA,SAAAxzF,GACA,MAAA,CACA2zF,WAAAryF,EAAAiC,GACAy8B,OAAA1+B,EAAA0+B,OACApa,SAAAtkB,EAAAskB,SACAxU,UAAApR,EAAAyzF,MACA3K,QAAA9oF,EAAA8oF,QACArqD,QAAAz+B,EAAA0zF,IACAhqF,KAAA,KAGAqpF,EAAAn0F,KAAAsf,MAAA60E,EAAAS,MAIAZ,EAAA,KAEA,IAAAgB,EAAA/2F,EAAAkoB,OAAAguE,EAAA,CAAAjK,QAAAroF,EAAAgxF,kBAAA,KAEAp0E,EAAAxgB,EAAA+a,IAAA/Y,EAAA,GAAA,SAAAwwB,GACA,MAAA,CACA9rB,GAAA8rB,EAAA9rB,GACAowF,WAAAtkE,EAAAskE,WACA3zD,OAAA3Q,EAAA2Q,OACA8oD,QAAAz5D,EAAAy5D,QACA13E,UAAAie,EAAAwkE,qBACAp1D,QAAApP,EAAAykE,mBACAvxF,SAAA,0BACAmH,KAAA,EACAqqF,YAAA1kE,EAAAs+B,WACA1/B,MAAAoB,EAAApB,MACApO,MAAAwP,EAAAxP,MACAoxE,UAAA5hE,EAAA2kE,sBAAA3kE,EAAAqhE,QAAAntF,GACA0wF,WAAAxzF,EAAAuxF,UAAA3iE,EAAAqhE,OAAAntF,IAAAgC,KACA2uF,yBAAA7kE,EAAA2kE,qBACAvzF,EAAAwxF,kBAAAxxF,EAAAuxF,UAAA3iE,EAAAqhE,OAAAntF,IAAA8rB,EAAA2kE,qBAAAzwF,IAAAgC,KACA,GACA6R,SAAAva,EAAA+a,IAAAyX,EAAAjY,SAAA,SAAApX,GACA,IAAAm0F,EAAAn0F,EAAAujC,SACA/mC,OAAAwD,EAAAujC,UACA,KACA6wD,EAAA,KAOA,OANAD,GAAAA,EAAAz3F,WACAF,SAAAujC,KAAAo0D,EAAA,SAAA,IACA,GAAA33F,SAAAujC,KAAAo0D,EAAA,YACAC,EAAAD,EAAA54B,OAAA,IAGA,CACA31C,SAAA3lB,OAAAb,UAAAwmB,SAAA5lB,EAAAuF,KAAAvF,EAAA65D,WAAA75D,EAAA45D,SACAw6B,IAAAA,KAGA1pF,OAAA2kB,EAAA5hB,QAAA/C,OACA2pF,UAAAhlE,EAAA5hB,QAAAlK,MAIAqwF,EAAAh1F,KAAAsf,MAAA01E,EAAAv2E,GAEAhiB,QAAA2H,OAAAvC,EAAAoxF,kBAAAA,KACAE,GAAA,EACAD,EAAA8B,EACAnzF,EAAAoxF,kBAAAA,GAEA9/E,EAAA6hF,IAEA,SAAAxwF,GAEAwuF,EADA3jD,EAAA,KAEA2kD,EAAAxvF,EAAAvE,KACAmT,EAAA5O,EAAAvE,KAAA/C,cAlHAiW,EAAA,OAuHAtO,OAAA,SAAA5E,GACA,OAAA8J,EAAA,SAAAoJ,EAAAC,GAEA,IACAsiF,EAwCAC,EACA7D,EA1CA,GAAA7xF,EAAA6K,MACA4qF,EAAArmD,EAAApvC,EAAA80F,cACAlzF,EAAAgxF,mBAIA,IAFA+C,EAAAn5F,QAAA2G,KAAAsyF,IAEAttE,SAAA9mB,OACAs0F,EAAAxtE,SAAApoB,KAAA,CACA+vB,IAAAnyB,OAAAqC,EAAAuS,WAAAC,QAAA,OAAA1U,SACA62F,QAAA,CAAA,CACA1K,QAAAroF,EAAAgxF,kBACAgC,MAAA50F,EAAAuS,UACAsiF,IAAA70F,EAAA4/B,YAIA+1D,EAAAxtE,SAAA,GAAAwsE,QAAA50F,KAAA,CACAkqF,QAAAroF,EAAAgxF,kBACAgC,MAAA50F,EAAAuS,UACAsiF,IAAA70F,EAAA4/B,UAIAuP,EAAAymD,mBACA51F,EAAA80F,WACAn3F,OAAAqC,EAAAuS,WAAAC,QAAA,OAAA1U,SACA63F,EAAAxtE,SAAA,IAAAnlB,SACAC,KACA,SAAAoB,GACA6O,KAEA,SAAA3O,GACAwvF,EAAAxvF,EAAAvE,KACAmT,EAAA5O,EAAAvE,KAAA/C,UAIAiW,IAGA,GAAAlT,EAAA6K,OACA6qF,EAAA,KACA7D,EAAA7zF,EAAAsK,KAAAypF,EAAA,SAAA77D,GACA,OAAAA,EAAAxxB,IAAA1E,EAAAoyF,aAGAsD,EAAA13F,EAAAsK,KAAA4tB,EAAAo9D,gBAAA,CAAA5uF,GAAA1E,EAAAoyF,cAOAE,EAAA1tF,OAAA,CACAkwF,WAAA90F,EAAA80F,WACA7K,QAAAjqF,EAAAiqF,QACA76D,MAAApvB,EAAAovB,MACA0/B,WAAA9uD,EAAAk1F,YACAznF,iBAAA,IAAAvP,KACA82F,qBAAAh1F,EAAAuS,UACA0iF,mBAAAj1F,EAAA4/B,QACAuB,OAAAnhC,EAAAmhC,OACAngB,MAAAhhB,EAAAghB,OAAA,GACA6wE,OAAA,CAAAntF,GAAAmtF,EAAAntF,IACAmxF,gCAAA71F,EAAA61F,gCACAV,qBAAAO,EAAA,CAAAhxF,GAAAgxF,EAAAhxF,IAAA,OACA1B,SACAC,KAAA,SAAAoB,GACA6O,KACA,SAAA3O,GACA4O,EAAA5O,EAAAvE,KAAA/C,aAKA0H,OAAA,SAAAmxF,EAAAl0B,GACA,OAAA93D,EAAA,SAAAoJ,EAAAC,GACA,GAAA,GAAAyuD,EAAA/2D,KAAA,CACA,IAGA8qF,EAHAF,EAAArmD,EAAA0mD,EAAAhB,YACAW,GAAA7zF,EAAAgxF,mBAAA,GAAA6C,EAAAttE,SAAA9mB,QAEAs0F,EAAAn5F,QAAA2G,KAAAsyF,IAEAM,EAAA/3F,EAAAsK,KAAAqtF,EAAAxtE,SAAA,GAAAwsE,QAAA,SAAAtsF,GACA,IAAA2tF,EAAAr4F,OAAA0K,EAAAusF,OACAqB,EAAAt4F,OAAA0K,EAAAwsF,KAEA,OAAAmB,EAAA91E,OAAA41E,EAAAvjF,YACA0jF,EAAA/1E,OAAA41E,EAAAl2D,aAGAm2D,EAAAnB,MAAAhzB,EAAArvD,UACAwjF,EAAAlB,IAAAjzB,EAAAhiC,QAEAuP,EAAAymD,mBACAE,EAAAhB,WACAn3F,OAAAikE,EAAArvD,WAAAC,QAAA,OAAA1U,SACA63F,EAAAxtE,SAAA,IAAAnlB,SACAC,KACA,SAAAoB,GACA6O,KAGA,SAAA3O,GACAwvF,EAAAxvF,EAAAvE,KACAmT,EAAA5O,EAAAvE,KAAA/C,UAKAiW,KAIAA,SAEA,GAAA,GAAA0uD,EAAA/2D,KAAA,CAEA,IAAA6qF,EAAA,KACA7D,EAAA7zF,EAAAsK,KAAAypF,EAAA,SAAA77D,GACA,OAAAA,EAAAxxB,IAAAk9D,EAAAwwB,aAGAsD,EAAA13F,EAAAsK,KAAA4tB,EAAAo9D,gBAAA,CAAA5uF,GAAAk9D,EAAAwwB,cAOA,GAAAxwB,EAAAs0B,aAAA,EAAAt0B,EAAAs0B,YAAA70F,OAAA,CACA,IAAAuT,EAAA,GACAgtD,EAAAs0B,YAAAhvF,QAAA,SAAA4tF,GACAlgF,EAAA7U,KACAuyF,EAAA1tF,OAAA,CACAkwF,WAAAA,EACA7K,QAAAroB,EAAAqoB,QACA76D,MAAAwyC,EAAAxyC,MACA0/B,WAAA8S,EAAAszB,YACAznF,iBAAA,IAAAvP,KACA82F,qBAAApzB,EAAArvD,UACA0iF,mBAAArzB,EAAAhiC,QACAuB,OAAAygC,EAAAzgC,OACAngB,MAAA4gD,EAAA5gD,OAAA,GACA6wE,OAAA,CAAAntF,GAAAmtF,EAAAntF,IACAmxF,gCAAAj0B,EAAAi0B,gCACAV,qBAAAO,EAAA,CAAAhxF,GAAAgxF,EAAAhxF,IAAA,OACA1B,YAGA8G,EAAAiD,IAAA6H,GAAA3R,KAAA,SAAAoB,GACA6O,KACA,SAAA3O,GACA4O,EAAA5O,EAAAvE,KAAA/C,cAIAq1F,EAAA3tF,OAAA,CACAD,GAAAk9D,EAAAl9D,GACAowF,WAAAlzB,EAAAkzB,WACA7K,QAAAroB,EAAAqoB,QACA76D,MAAAwyC,EAAAxyC,MACA0/B,WAAA8S,EAAAszB,YACAznF,iBAAA,IAAAvP,KACA82F,qBAAApzB,EAAArvD,UACA0iF,mBAAArzB,EAAAhiC,QACAuB,OAAAygC,EAAAzgC,OACAngB,MAAA4gD,EAAA5gD,OAAA,GACA6wE,OAAA,CAAAntF,GAAAmtF,EAAAntF,IACAywF,qBAAAO,EAAA,CAAAhxF,GAAAgxF,EAAAhxF,IAAA,OACA1B,SACAC,KAAA,SAAAoB,GACA6O,KACA,SAAA3O,GACA4O,EAAA5O,EAAAvE,KAAA/C,aAMAuG,OAAA,SAAAxD,GACA,OAAA8J,EAAA,SAAAoJ,EAAAC,GACA,IACAsiF,EADA,GAAAz1F,EAAA6K,MACA4qF,EAAArmD,EAAApvC,EAAA80F,cACAlzF,EAAAgxF,mBAAA,GAAA6C,EAAAttE,SAAA9mB,QACArD,EAAAwF,OAAAiyF,EAAAttE,SAAA,GAAAwsE,QAAA,SAAAtsF,GACA,IAAA2tF,EAAAr4F,OAAA0K,EAAAusF,OACAqB,EAAAt4F,OAAA0K,EAAAwsF,KAEA,OAAAmB,EAAA91E,OAAAlgB,EAAAuS,YACA0jF,EAAA/1E,OAAAlgB,EAAA4/B,WAGA,GAAA61D,EAAAttE,SAAA,GAAAwsE,QAAAtzF,OAEA8tC,EAAAgnD,mBACAn2F,EAAA80F,WACAn3F,OAAAqC,EAAAuS,WAAAC,QAAA,OAAA1U,UACAkF,SACAC,KACA,SAAAoB,GACA6O,KAGA,SAAA3O,GACAwvF,EAAAxvF,EAAAvE,KACAmT,EAAA5O,EAAAvE,KAAA/C,SAMAkyC,EAAAymD,mBACA51F,EAAA80F,WACAn3F,OAAAqC,EAAAuS,WAAAC,QAAA,OAAA1U,SACA23F,EAAAttE,SAAA,IAAAnlB,SACAC,KACA,SAAAoB,GACA6O,KAGA,SAAA3O,GACAwvF,EAAAxvF,EAAAvE,KACAmT,EAAA5O,EAAAvE,KAAA/C,UAMAiW,IAEA,GAAAlT,EAAA6K,KACAynF,EAAA9uF,OAAAxD,EAAA0E,IAAA1B,SAAAC,KACA,SAAAjD,GACAkT,KAEA,SAAA3O,GACA4O,EAAA5O,EAAAvE,KAAA/C,SAIAiW,OAIAkjF,aAAA,SAAA7xF,GACA0I,EAAA6B,eAAA,CACA7R,MAAA,oCACA8R,QAAAxK,EAAAwK,QACAC,QAAA,CAAA,CACAlI,KAAA,kBAIAw1D,SAAA,gBAIA,SAAA23B,IACA,OAAAryF,EAAAgxF,kBAgMA,SAAAyD,EAAAr2F,GAEA,IAAAs2F,EAAAt2F,EAAAu2F,gBAAAD,WAAA,SACAt2F,EAAAu2F,gBAAA,SAEA,IAMAC,EAAAC,EANA9+B,EAAA33D,EAAA23D,KACA++B,EAAA/+B,EAAA50C,OAAA,YAEA2zE,EAAAnkF,UACA68B,EAAAsnD,EAAA5B,YAMA,SAAA6B,EAAAzgE,GAEA,IA9sBA0gE,EACAnpE,EA6sBAopE,GA9sBAD,EA8sBA1gE,EAAAk8D,SA7sBA3kE,EAAA,CACA2kE,SAAA,KACA0E,uBAAA,MAGA94F,EAAAsK,KAAAypF,EAAA,SAAA77D,GACA,OAAAA,EAAAxxB,KAAAkyF,GACAnpE,EAAA,CACA2kE,SAAAwE,EACAE,uBAAA,OAEA,KAEA94F,EAAAsK,KAAA4tB,EAAAo9D,gBAAA,CAAA5uF,GAAAkyF,MAEAnpE,EAAA,CACA2kE,SAAAl8D,EAAAxxB,GACAoyF,uBAAAF,IAEA,KAKAnpE,GAurBAyI,EAAAg/D,aAAAh/D,EAAAg/D,YAAA7zF,QAAAw1F,EAAAzE,UAKAG,EAAAwE,0BAAA,CACA51D,OAAAjL,EAAAiL,OACA8oD,QAAA/zD,EAAA+zD,QACAiL,YAAAh/D,EAAAg/D,YACAJ,WAAA5+D,EAAA4+D,WACAE,qBAAA9+D,EAAA3jB,UACA0iF,mBAAA/+D,EAAA0J,QACAwyD,SAAAyE,EAAAzE,SACA0E,uBAAAD,EAAAC,yBACA,GAAA9zF,SAAAC,KACA,SAAAjD,GACAk2B,EAAA9G,MAAApvB,EAAAovB,OAEA,SAAA7qB,MAxBAqvF,EAAA8C,EAAAv1D,OA6BA,MAAA61D,EAAAh3F,EAAAyoC,QAAAngC,KAAA,mCAAA2uF,QAAA,YAEAD,EAAAj0E,OAAA,QAAAnmB,EAAAM,QAAA,2BAEA85F,EAAAj0E,OAAA,gBACA,GAAArJ,QAAA,CACA87B,QAAA,WAEAmiB,EAAAlsC,WACAurE,EAAA/hF,OACA8+E,GACA/zF,EAAAgL,UAAAorC,YAKA,IAAA8gD,EAAA,KACAC,EAAA,KAEAx/B,EAAA50C,OAAA,WAAA,GACA40C,EAAA50C,OAAA,mBAAA,CAAAq0E,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,IACA5/B,EAAA50C,OAAA,gBAAA,QACA40C,EAAA50C,OAAA,QAAA,CACA,CACA5lB,MAAA,CACA2J,KAAAlK,EAAAM,QAAA,iBAEAkF,UAAA,SACAo1F,WAAA,cACA3gC,cAAA,CACA9xC,WAAA2uE,EACA1lE,YAAA,WACAypE,WAAA,CAAA,YACAxpE,UAAA,KACAypE,eAAA,EACApzE,WAAAoyE,EAAAhyF,GACA2pB,cAAA,SAAA5rB,GACAy0F,EAAAz0F,EAAAuI,WAEAgE,QAAA,CAAA,WAAA,CACAo7B,SAAA,QACA1jC,KAAA,aACAgT,QAAA,CACA67B,KAAA,OACAC,QAAA,WA0hBA1rC,EAAA,SAAAoJ,EAAAC,GACA,IAAA0nD,EAAAhX,EAAAvgD,YAEA83D,EAAAp4D,SAAAC,KAAA,WACAm4D,EAAAx5D,OAAAi5D,WAAAr+D,QAAA2G,KAAA03D,GACAO,EAAAx5D,OAAAy5D,WAAA,EACAD,EAAAx5D,OAAA05D,UAAA,SAAAp4D,GACAgQ,EAAAhQ,IAEAk4D,EAAAh4D,WAliBAH,KAAA,SAAAC,GACAuwF,GAAA,EACAC,EAAAl0D,SAAAv8B,KAAA,WACAi0F,EAAAn0E,OAAA,QAAA7f,EAAAwB,GAAA,KACAkvF,EAAA1wF,EAAAwB,KACAyyF,GACAA,EAAAp0E,OAAA,YAAA,GAEA2zE,EAAAxB,YAAA,GACApB,EAAAt6C,eAMAr0B,eAAA,SAAArkB,GACAA,EAAA62F,eAAA72F,EAAAvD,SACAq2F,EAAA9yF,EAAAvD,QACA45F,GACAA,EAAAp0E,OAAA,YAAA,GAEA2zE,EAAAxB,YAAA,GACApB,EAAAt6C,UAIAo+C,gBAAA,CAAA,CACA/sF,KAAA,WACAkE,QAAAnS,EAAAM,QAAA,iCAAAs0B,EAAA50B,EAAAM,QAAA,mBAEA26F,SAAA,mBAEA,CACA16F,MAAA,CACA2J,KAAAlK,EAAAM,QAAA,qBAEAkF,UAAA,cACAo1F,WAAA,WACA3gC,cAAA,CACA9xC,WAAA+uE,EACA9lE,YAAA,WACAC,UAAA,KACAC,uBAAA,EACA4pE,eAAA,aACApzE,WAAA,EACAJ,SAAAgyE,EACAtnF,QAAA,CAAA,CACAo7B,SAAA,QACA1jC,KAAA,gBACAgT,QAAA,CACA67B,KAAA,OACAxnC,UAAA,EACAynC,QAAA,WAofA1rC,EAAA,SAAAoJ,EAAAC,GAEA,IAKA8G,EALA25E,IAKA35E,EAAAi7C,EAAA5xD,aACAihD,OAAAqvC,EAEAj4B,EAAA34D,SAAAC,KAAA,WACA04D,EAAA/5D,OAAA2F,WAAA,GACAo0D,EAAA/5D,OAAAsB,MAAA+W,EACA0hD,EAAA/5D,OAAAy5D,WAAA,EACAM,EAAA/5D,OAAAg6D,cAAA,SAAA14D,GACAgQ,EAAAhQ,IAEAy4D,EAAAv4D,UAdA+P,MArfAlQ,KAAA,SAAAC,GACA2wF,GAAA,EACAC,EAAAt0D,SAAAv8B,KAAA,WACAyzF,EAAAxB,YAAAn1F,KAAAmD,EAAAwB,GAAA,SAIA2pB,cAAA,SAAA5rB,GACA00F,EAAA10F,EAAAuI,cAIAma,eAAA,SAAArkB,GACA61F,EAAAD,KAGAkB,gBAAA,CAAA,CACA/sF,KAAA,WACAkE,QAAAnS,EAAAM,QAAA,iCAAAs0B,EAAA50B,EAAAM,QAAA,wBAEA,CACAC,MAAA,CACA2J,KAAAlK,EAAAM,QAAA,eAEAkF,UAAA,WACAo1F,WAAA,gBACA3gC,cAAA,CACA9xC,WAAAyuE,EACAvlE,UAAA,KACAD,YAAA,OACA1J,SAAAgyE,EACAz9C,gBAAA,CACAz0B,OAAA,QACA2zE,eAAA,GAEAC,gBAAA,SAAAv1F,GAkBA,OAjBAsO,EAAA,SAAAknF,WACA,CACAlzE,WAAAtiB,EAAAuI,UAAA+X,OAAA,cACAm1E,cAAA,OACAtxE,QAAA,KACAuxE,UAAA,kBACAnqE,YAAA,OACAoqE,eAAA,EACAC,sBAAA,EACAve,cAAA,SACAwe,uBAAA,SAAAC,GACAA,EAAAzkD,SAAAt2B,WACA/a,EAAAuI,UAAA+X,OAAA,QAAAw1E,EAAAzkD,SAAApvC,IACAjC,EAAAuI,UAAAowC,aAMAj2B,eAAA,SAAArkB,GACA61F,EAAAD,KAGAkB,gBAAA,CAAA,CACA/sF,KAAA,WACAkE,QAAAnS,EAAAM,QAAA,iCAAAs0B,EAAA50B,EAAAM,QAAA,kBAEA,CACAC,MAAA,CACA2J,KAAAlK,EAAAM,QAAA,iBAEAkF,UAAA,QACAo1F,WAAA,aACA3gC,cAAA,CACAzyC,OAAA,SAEA,CACAjnB,MAAA,CACA2J,KAAAlK,EAAAM,QAAA,kBAEAkF,UAAA,QACAo1F,WAAA,cACA3gC,cAAA,CACAvyC,SAAAgyE,EACAj4F,OAAA,WAn/BA,SAAAsC,GACA,OAAAA,EAAA63F,UACA,IAAA,MACA,MAAA,MACA,IAAA,MACA,MAAA,KACA,QACA,MAAA,OA4+BAC,CAAA93F,IAEAi3F,gBAAA,CAAA,CACA/sF,KAAA,WACAkE,QAAAnS,EAAAM,QAAA,iCAAAs0B,EAAA50B,EAAAM,QAAA,wBAIAo5F,EAAA,GAAA,CACA,CACAn5F,MAAA,CACA2J,KAAAlK,EAAAM,QAAA,iBAEAwJ,KAAA,WACAtE,UAAA,aACAo1F,WAAA,cACA3gC,cAAA,CACA9xC,WAAAnjB,EAAAoxF,kBACAhlE,YAAA,WACAypE,WAAA,CAAA,YACAxpE,UAAA,KACAypE,eAAA,EACAvyE,eAAA,SAAArkB,GACA61F,EAAAD,KAGAkB,gBAAA,CAAA,CACA/sF,KAAA,WACAkE,QAAAnS,EAAAM,QAAA,iCAAAs0B,EAAA50B,EAAAM,QAAA,mBAEA26F,SAAA,uBAGAvB,EAAA,CACA,CACAn5F,MAAA,CACA2J,KAAAlK,EAAAM,QAAA,iBAEAkF,UAAA,cACAo1F,WAAA,WACA3gC,cAAA,CACA9xC,WAAAnjB,EAAAoxF,kBACAhlE,YAAA,WACAC,UAAA,KACAC,uBAAA,EACA4pE,eAAA,aACApzE,WAAA,GAEAkzE,gBAAA,CAAA,CACA/sF,KAAA,WACAkE,QAAAnS,EAAAM,QAAA,iCAAAs0B,EAAA50B,EAAAM,QAAA,qBAEA,GAEA,CACAC,MAAA,CACA2J,KAAAlK,EAAAM,QAAA,2CACAktC,SAAA,OAEA1jC,KAAA,kCACAtE,UAAA,kCACAo1F,WAAA,aACAK,SAAA,oBACA,CACA16F,MAAA,CACA2J,KAAAlK,EAAAM,QAAA,uBAEAkF,UAAA,YACAo1F,WAAA,YACA3gC,cAAA,CACAt0D,MAAA,OACAsI,KAAA,WACAwjB,cAAA,SAAA5rB,GACA+zF,EAAA/zF,EAAAgmC,SAEAtjB,eAAA,SAAA1iB,GACAg0F,GACAA,EAAAiC,YAAA,YAAAjtE,WAEAkrE,EAAAD,KAGAkB,gBAAA,CAAA,CACA/sF,KAAA,WACAkE,QAAAnS,EAAAM,QAAA,iCAAAs0B,EAAA50B,EAAAM,QAAA,wBACA,CACA2N,KAAA,SACA8tF,mBAAA,SAAAl2F,GACA,OAAA9E,OAAA8E,EAAAlF,OAAAyvB,SAAA0pE,EAAA92D,UAEAg5D,YAAA,EACA7pF,QAAAnS,EAAAM,QAAA,wCAAAs0B,EACA50B,EAAAM,QAAA,sBACAN,EAAAM,QAAA,wBAGA,CACAC,MAAA,CACA2J,KAAAlK,EAAAM,QAAA,qBAEAwJ,KAAA,UACAtE,UAAA,UACAo1F,WAAA,YACA3gC,cAAA,CACAt0D,MAAA,OACAsI,KAAA,WACAwjB,cAAA,SAAA5rB,GACAg0F,EAAAh0F,EAAAgmC,SAEAtjB,eAAA,SAAA1iB,GACA+zF,GACAA,EAAAkC,YAAA,YAAAjtE,WAEAkrE,EAAAD,KAGAkB,gBAAA,CAAA,CACA/sF,KAAA,WACAkE,QAAAnS,EAAAM,QAAA,iCAAAs0B,EAAA50B,EAAAM,QAAA,sBACA,CACA2N,KAAA,SACA8tF,mBAAA,SAAAl2F,GACA,OAAA9E,OAAA8E,EAAAlF,OAAAiwE,QAAAkpB,EAAAnkF,YAEAqmF,YAAA,EACA7pF,QAAAnS,EAAAM,QAAA,sCAAAs0B,EACA50B,EAAAM,QAAA,oBACAN,EAAAM,QAAA,0BAGA,CACAC,MAAA,CACA2J,KAAAlK,EAAAM,QAAA,cAEAwJ,KAAA,QACAtE,UAAA,UACAo1F,WAAA,cACA3gC,cAAA,CACA9xC,WAAA+lE,EACA98D,YAAA,OACAC,UAAA,KACA9I,eAAA,SAAA1iB,GACAk0F,EAAAD,KAGAkB,gBAAA,CAAA,CACA/sF,KAAA,WACAkE,QAAAnS,EAAAM,QAAA,iCAAAs0B,EAAA50B,EAAAM,QAAA,mBA7iBA0E,EAAAi3F,uBAAA,CACA9zE,WAAA+lE,EACA7lE,eAAA,CACA1nB,MAAA,qBAEA0wB,UAAA,KACAD,YAAA,OACA7I,eAAA,SAAArkB,GACAA,EAAA62F,eAAA72F,EAAAvD,QACA02F,KACAE,EAAA/9C,UAEAt1C,EAAAvD,OAAA2P,EAAA+B,aACA/B,EAAAqC,IAAA,0CAAAzO,EAAAvD,UAMAqE,EAAAk3F,sBAAA,CACA/zE,WAAAnjB,EAAAoxF,kBACA/tE,eAAA,CACA1nB,MAAA,qBAEA0wB,UAAA,KACAD,YAAA,WACAE,uBAAA,EACA4pE,eAAA,aACApzE,WAAA,EACAS,eAAA,SAAArkB,GACAA,EAAA62F,eAAA72F,EAAAvD,QACA02F,KACAE,EAAA/9C,UAEAt1C,EAAAvD,OAAA2P,EAAA+B,aACA/B,EAAAqC,IAAA,0CAAAzO,EAAAvD,UAuBAqE,EAAAm3F,qBAAA,CACA,CAAAjyF,KAAAlK,EAAAM,QAAA,oCAAAm3C,YAlBA,SAAA5xC,GACA,IAAA8zF,EAAA/5F,QAAA2G,KAAAvB,EAAAo3F,yBACAzC,EAAA1rF,KAAA,EAEAspF,EAAA8E,qBAAA1C,GAAA,EAAA,MAeA,CAAAzvF,KAAAlK,EAAAM,QAAA,0BAAAm3C,YAZA,SAAA5xC,GACA,IAAA8zF,EAAA/5F,QAAA2G,KAAAvB,EAAAo3F,yBACAzC,EAAA1rF,KAAA,EAEA0rF,EAAArB,YAAA,GACAqB,EAAAp1D,OAAA,KAEAgzD,EAAA8E,qBAAA1C,GAAA,EAAA,OAQA30F,EAAAs3F,4BAAA,CACAn0E,WAAAnjB,EAAAm3F,qBACApsD,OAAA,gCACA0H,YAAA,SAAA5xC,GACAA,EAAAqxC,SAAAO,YAAA5xC,EAAAqxC,YA+eA,IAAAqgD,EAAA,KAEAvyF,EAAAu3F,iBAAA,CACAp0E,WAAAivE,EACAoF,MAAA,CAAA,CACAvuF,KAAA,cACAwuF,iBAAA,SAAAvlD,EAAAgjB,EAAAC,GACA,MAAA,sBAAAp5D,OAAAm2C,EAAAt2C,MAAAa,OAAA,QAAA,KAAAy1C,EAAAhtC,KAAA,UAEAwyF,qBAAA,yBAEAC,YAAA,cACAC,uBAAA,YACAC,eAAA,EACAC,aAAA,EACAC,WAAA,GACAC,aAAA,GACA/zE,OAAA,CAAA,cACAg0E,uBAAA,EACAC,YAAAnH,EACAjhD,QAAA,CACAqoD,eAAA,GAEAh7E,UAAA,CAAA,CACAi7E,UAAA,aACA/rE,UAAA,KACAD,YAAA,WACAisE,eAAA,EACA98F,MAAA,WACA+8F,mBAAA,IAEAj1E,eAAA,CACAk1E,0BAAA,sBAEA/1E,OAAA,OACAg2E,iBAAA,SAAAp6F,GACA,OAAA4B,EAAAy4F,cAAAr6F,GACA,yCACA,IAEAs6F,2BAAA,UACAC,kBAAA,SAAA93F,GAGA,GAFAb,EAAAo3F,wBAAAv2F,EAAA+3F,SAEAzpF,EAAAtO,EAAA+I,aAAA0vC,GAAA,iCAAA,CACA,IAAAl7C,EAAA,CACAiqF,QAAAroF,EAAAgxF,kBACAkC,WAAAryF,EAAA+3F,SAAA30E,OAAAivE,WACAviF,UAAA9P,EAAA+3F,SAAAjoF,UACAqtB,QAAAn9B,EAAA+3F,SAAA56D,SAGA66D,EAAAh4F,EAAAuI,UAAA+X,OAAA,oBAEA,IAAA,IAAA5H,EAAA,EAAAA,EAAAs/E,EAAAp5F,OAAA8Z,IAAA,CACA,IAAAq/E,EAAAC,EAAAt/E,GACAq/E,IACAx6F,EAAAuS,YAAA5U,OAAAqC,EAAAuS,WAAAi7D,QAAAgtB,EAAAjoF,aACAvS,EAAAuS,UAAAioF,EAAAjoF,WAEAvS,EAAA4/B,UAAAjiC,OAAAqC,EAAA4/B,SAAA5S,SAAAwtE,EAAA56D,WACA5/B,EAAA4/B,QAAA46D,EAAA56D,UAIAh+B,EAAAo3F,wBAAAh5F,IAGAquB,cAAA,SAAA5rB,GACA0xF,EAAA1xF,EAAAuI,WAEA0vF,YAAA,SAAAj4F,GACAA,EAAAivD,QAAA,GAEAipC,yBAAA,SAAA36F,GAEA,GAAAA,EAAAu2F,gBAAA1rF,KAvjBA,SAAA7K,GAEA,IAKAw2F,EAAAC,EALA9+B,EAAA33D,EAAA23D,KACA++B,EAAA/+B,EAAA50C,OAAA,YAEA0yE,GADAz1F,EAAAu2F,gBAAAhkF,UACA68B,EAAApvC,EAAAu2F,gBAAAzB,aAIA,MAAAkC,EAAAh3F,EAAAyoC,QAAAngC,KAAA,mCAAA2uF,QAAA,YAEAD,EAAAj0E,OAAA,QAAAnmB,EAAAM,QAAA,qCAEA85F,EAAAj0E,OAAA,gBACA,GAAArJ,QAAA,CACA87B,QAAA,WACAwhD,EAAA/hF,OACA8+E,GACA/zF,EAAAgL,UAAAorC,YAKAuhB,EAAA50C,OAAA,WAAA,GACA40C,EAAA50C,OAAA,QAAA,CAAA,CACA5lB,MAAA,CACA2J,KAAAlK,EAAAM,QAAA,iBAEAwJ,KAAA,WACA8wF,WAAA,YACA3gC,cAAA,CACAt5D,MAAAk4F,EAAA1uE,SACAzC,UAAA,GAEAuzE,SAAA,mBACA,CACA16F,MAAA,CACA2J,KAAAlK,EAAAM,QAAA,uBAEAkF,UAAA,YACAo1F,WAAA,YACA3gC,cAAA,CACAt0D,MAAA,OACAsI,KAAA,WACAwjB,cAAA,SAAA5rB,GACA+zF,EAAA/zF,EAAAgmC,SAEAtjB,eAAA,SAAA1iB,GACAg0F,GACAA,EAAAiC,YAAA,YAAAjtE,aAIAmsE,gBAAA,CAAA,CACA/sF,KAAA,WACAkE,QAAAnS,EAAAM,QAAA,iCAAAs0B,EAAA50B,EAAAM,QAAA,wBACA,CACA2N,KAAA,SACA8tF,mBAAA,SAAAl2F,GACA,OAAA9E,OAAA8E,EAAAlF,OAAAyvB,SAAA0pE,EAAA92D,UAEAg5D,YAAA,EACA7pF,QAAAnS,EAAAM,QAAA,wCAAAs0B,EACA50B,EAAAM,QAAA,sBACAN,EAAAM,QAAA,wBAGA,CACAC,MAAA,CACA2J,KAAAlK,EAAAM,QAAA,qBAEAwJ,KAAA,UACAtE,UAAA,UACAo1F,WAAA,YACA3gC,cAAA,CACAt0D,MAAA,OACAsI,KAAA,WACAwjB,cAAA,SAAA5rB,GACAg0F,EAAAh0F,EAAAgmC,SAEAtjB,eAAA,SAAA1iB,GACA+zF,GACAA,EAAAkC,YAAA,YAAAjtE,aAIAmsE,gBAAA,CAAA,CACA/sF,KAAA,WACAkE,QAAAnS,EAAAM,QAAA,iCAAAs0B,EAAA50B,EAAAM,QAAA,sBACA,CACA2N,KAAA,SACA8tF,mBAAA,SAAAl2F,GACA,OAAA9E,OAAA8E,EAAAlF,OAAAiwE,QAAAkpB,EAAAnkF,YAEAqmF,YAAA,EACA7pF,QAAAnS,EAAAM,QAAA,sCAAAs0B,EACA50B,EAAAM,QAAA,oBACAN,EAAAM,QAAA,0BAGA,CACAC,MAAA,CACA2J,KAAAlK,EAAAM,QAAA,cAEAwJ,KAAA,QACAtE,UAAA,UACAo1F,WAAA,cACA3gC,cAAA,CACA9xC,WAAA+lE,EACA98D,YAAA,OACAzrB,MAAA,OACA0rB,UAAA,KACA3J,UAAA,MAwcAs2E,CAAA56F,GAEA,GAAAA,EAAAu2F,gBAAA1rF,OACA7K,EAAAg3F,MAAAj0E,OAAA,WAAA,KACAszE,EAAAr2F,KAGAklB,eAAA,SAAAziB,GACA,IAAAo4F,EAAAp4F,EAAAuI,UAAA8vF,aAEAr4F,EAAAuI,UAAA8vF,aAAA,WACA,IAAAC,EAAAF,EAAAx7E,MAAA5c,EAAAuI,UAAAy3C,WAEA,OAAA1xC,EAAArS,OAAAq8F,EAAA,CACA32E,OAAA,UAIA4vE,EAAAx6C,QAEAwhD,gBAAA,SAAAv4F,GACA,eAAAA,EAAAiE,MAAAwG,EAAA+B,aACA/B,EAAAqC,IAAA,qCAAAw1D,KAAAC,UAAAviE,EAAAlF,SAGA09F,sBAAA,SAAAx4F,GACA,IAAAy4F,EAAAz4F,EAAA04F,mBAAA/2E,SAEA,OAAA3hB,EAAA8zF,gBAAA1rF,MACA,KAAA,EACApI,EAAA04F,mBAAA/2E,OAAA,IACA3hB,EAAA04F,mBAAA9vF,SAAA,4BACA,MACA,KAAA,EACA5I,EAAA04F,mBAAA9vF,SAAA,2BACA5I,EAAA04F,mBAAA/2E,OAAA82E,EAAAA,EAAA,IACAz4F,EAAA04F,mBAAAvuD,IAAA,aAAA,GAAAsuD,GACAz4F,EAAA04F,mBAAA,GAAA74C,MAAA84C,gBAAA,aAOAx5F,EAAAy5F,mBAAA,SAAAb,KAIA54F,EAAAy4F,cAAA,SAAAG,GACA,GAAAprD,GAAAorD,EAAA30E,OAAA,CACA,IAAA4vE,EAAArmD,EAAAorD,EAAA30E,OAAAivE,YACA,GAAAW,GAAA,EAAAA,EAAAf,aAAArzF,OAAA,CACA,IAAA/D,EAAAk9F,EAAA30E,OAAAivE,WAAA,IAAA0F,EAAAjoF,UAAA+oF,WAAA,IAAAd,EAAAjoF,UAAAgpF,aACA,QAAAn2E,IAAAstE,EAAAp1F,GACA,OAAAo1F,EAAAp1F,GAGA,IAAAiV,EAAA5U,OAAA68F,EAAAjoF,WACAqtB,EAAAjiC,OAAA68F,EAAA56D,SAEA9P,EAAAnyB,OAAA4U,GAAAC,QAAA,OAAA1U,SAEA09F,EAAAx9F,EAAAsK,KAAAmtF,EAAAf,aAAA,CAAA5kE,IAAAA,IACA,GAAA0rE,EAAA,CAWA,GAVAx9F,EAAAsK,KAAAkzF,EAAA7G,QAAA,SAAAtsF,GACA,IAAAozF,EAAA99F,OAAA0K,EAAAusF,OACA8G,EAAA/9F,OAAA0K,EAAAwsF,KAEA,IAAA8G,EAAAF,EAAApqC,eAAA9+C,GACAqpF,EAAAF,EAAApqC,cAAA1xB,GAEA,OAAA+7D,GAAAC,IAKA,OADAlJ,EAAAp1F,IAAA,EAGAo1F,EAAAp1F,IAAA,IAKA,OAAA,GAGAsE,EAAAi6F,uBAAA,SAAA77F,GACAiN,EAAA6B,eAAA,CACA7R,MAAA,2BACA8R,QAAA,0BACAC,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WACAmtF,EAAA2H,kBAAA97F,EAAAu2F,sBAIApC,EAAA4H,0BAGAn6F,EAAAo6F,qBAAA,SAAAh8F,GACAm0F,EAAA8E,qBAAAj5F,EAAAu2F,iBACApC,EAAA4H,0BAGAn6F,EAAAq6F,kBAAA,SAAAj8F,GACAiN,EAAA6B,eAAA,CACA7R,MAAA,2BACA8R,QAAA,0BACAC,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WACAmtF,EAAA2H,kBAAA97F,EAAAu2F,sBAIApC,EAAA4H,0BAGAn6F,EAAAs6F,gBAAA,SAAAl8F,GACAm0F,EAAA8E,qBAAAj5F,EAAAu2F,iBACApC,EAAA4H,0BAGAn6F,EAAAu6F,gBAAA,SAAAn8F,GACAA,EAAAu2F,gBAAAD,UAAA,EACAnC,EAAA8E,qBAAAj5F,EAAAu2F,iBACApC,EAAA4H,0BAQA,IAAAjwF,EAAAjK,EAAA,CACAL,YAAA,wCACA4B,OAPAxB,EAAAw6F,yBAAA,SAAAp8F,GAWAA,EAVAA,EAAAu2F,gBAWAzqF,EAAAlK,OAAAmK,iBAAA,EACAD,EAAAlK,OAAAoK,cAAA,CACAC,UAAA,EACAC,eAAA,EACAC,UAAAnM,EAAAw1F,UACAppF,OAAApM,EAAA6L,OACAQ,aAAA1O,SAAAG,UAGAgO,EAAA9I,SAAAC,KAAA,WACA6I,EAAAlK,OAAA4C,YAAA,KACAsH,EAAAlK,OAAAuH,OAAA,WACAgrF,EAAA/9C,WAGAtqC,EAAA1I,SAzBA+wF,EAAA4H,2BAMAn4F,MAAAhC,EAAAiC,SAuBAjC,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAg0F,EAAAx6C,OAEA26C,GACAA,EAAA/9C,YA0CA,IAAAglB,EAAAv5D,EAAA,CACAL,YAAA,0BACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGA83D,EAAA95D,EAAA,CACAL,YAAA,sCACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YC17CAtH,MAAA8gC,QAAA,4BAAA,CAAA,YAAA,KAAA,gBACA,SAAAC,EAAAxzB,EAAA0zB,GACA,IAAA6+D,EAAA/+D,EAAA,uBAAA,GAAA,CACAztB,IAAA,CAAAwuB,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,8CACA15B,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,8CACA35B,OAAA,CAAA05B,OAAA,MAAAC,IAAA,kDACA0B,OAAA,CAAA3B,OAAA,SAAAC,IAAA,oDA0DA,MAAA,CACA/X,OAtDA,SAAA6rE,GACA,OAAA50D,EAAAkC,UACA,MACA28D,EACA,CACAjK,SAAAA,KAkDA9uF,UA9CA,WACA,MAAA,CACAoD,KAAA,GACAuzC,YAAA,OA4CAr1C,OAxCA,SAAAwtF,EAAAsD,EAAArxF,EAAAE,GACA,OAAAi5B,EAAAkE,oBACA,SACA26D,EACA,CACAjK,SAAAA,GAEAsD,EACArxF,EACAE,IAgCAI,OA7BA,SAAAytF,EAAAsD,EAAArxF,EAAAE,GACA,OAAAi5B,EAAAkE,oBACA,SACA26D,EACA,CACAjK,SAAAA,EACA1tF,GAAAgxF,EAAAhxF,IAEAgxF,EACArxF,EACAE,IAoBAf,OAjBA,SAAA4uF,EAAAsD,EAAArxF,EAAAE,GACA,OAAAi5B,EAAAiE,aACA,SACA46D,EACA,CACAjK,SAAAA,EACA1tF,GAAAgxF,EAAAhxF,IAEAL,EACAE,QC7DAhI,MAAAkF,WAAA,oBAAA,CAAA,SAAA,SAAA,UAAA,aAAA,UAAA,KAAA,gBAAA,eAAA,cAAA,WAAA,cAAA,mBACA,SAAAG,EAAAC,EAAAkI,EAAAnN,EAAAoN,EAAAF,EAAAmD,EAAAqvF,EAAAv3F,EAAA2gB,EAAAzb,EAAAnG,GASA,SAAA6hB,IACA7b,EAAAiD,IAAA,CAAAnL,EAAA26F,iBAAAv5F,SAAApB,EAAAikB,OAAA7iB,WAAAC,KAAA,WAEArB,EAAA46F,4BAAAx+F,EAAAsK,KAAA1G,EAAA26F,iBACA,SAAAroF,GACA,QAAAA,EAAA2R,QAAA3R,EAAA2R,OAAAxkB,QAAA6S,EAAAssB,aAIA,IAAA1a,EAAA9nB,EAAA+nB,OAAAnkB,EAAAokB,aAAAH,QACAjkB,EAAA66F,cAAAp7F,OAAA,EACAO,EAAA66F,cAAA18F,KAAAsf,MAAAzd,EAAA66F,cACAz+F,EAAAkoB,OAAAtkB,EAAA26F,iBAAA,SAAAroF,GACA,QAAA,EAAA4R,EAAAzkB,SACA,EAAArD,EAAAmyF,aAAAj8E,EAAA2R,OAAAC,GAAAzkB,YArBAO,EAAAikB,OAAAH,EAAA5c,cACAlH,EAAA26F,iBAAA,GACA36F,EAAA66F,cAAA,GACA76F,EAAA46F,2BAAA,EAEA56F,EAAAokB,aAAA,CAAAH,OAAA,IAwBAjkB,EAAA6F,OAAA,eAAA,SAAAC,EAAAC,GACAge,MACA,GAEA,IAAA+2E,EAAA33F,EAAAU,SAAA,sBACAk3F,EAAA53F,EAAAU,SAAA,sBACAm3F,EAAA73F,EAAAU,SAAA,sBACAo3F,EAAA93F,EAAAU,SAAA,WAuOA,SAAAuN,EAAA0F,EAAA5a,GACA,IAAAg/F,EAAAn/F,OAAA+a,GACAqkF,EAAAp/F,OAAAG,GAEAg/F,EAAAj/F,WAAAk/F,EAAAl/F,WAAAi/F,EAAA9vE,SAAA+vE,GACAn7F,EAAA26F,iBAAAD,EAAAU,gBAAAtkF,EAAA5a,GAEA8D,EAAA26F,iBAAA,GAEA52E,IAqDA,SAAAs3E,EAAAC,GACAC,EAAAn6F,SAAAC,KAAA,WACAk6F,EAAAv7F,OAAA8W,SAAA9W,EAAA8W,SACAykF,EAAAv7F,OAAA9D,OAAA8D,EAAA9D,OACAq/F,EAAAv7F,OAAAs7F,UAAAA,EACAC,EAAAv7F,OAAAw7F,gBAAA,SAAAp9F,GACA+Q,EAAA,uBAAAvN,SACAuN,EAAA,QAAAq2B,OAAA,wEAAApnC,EAAAk4C,SAAA,sCAEAilD,EAAA/5F,SAWA,SAAAi6F,EAAAC,GAEAC,EAAAv6F,SAAAC,KAAA,WACAs6F,EAAA37F,OAAA07F,cAAAA,EACAC,EAAA37F,OAAAuH,OAAA,WACA6J,EAAApR,EAAA8W,SAAA9W,EAAA9D,SAEAy/F,EAAAn6F,SA7TAxB,EAAA47F,gBAAAb,EAEA/6F,EAAA8W,SAAA/a,SAAA6U,QAAA,SAAA1U,SACA8D,EAAA9D,OAAAH,SAAAqrB,MAAA,SAAAlrB,SAoBA8D,EAAAM,aAAA,CACAwE,KAAA,gBACAvE,QAAA,CACA,CAAAC,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CACA1kB,UAAA,YACAC,QAAAzF,EAAAM,QAAA,sBACAsF,UAAA,OACAF,SAAA,OACAjE,OAAA,CACAo/F,SAAA,WAEAl7F,MAAA,SAEA,CACAH,UAAA,yBACAC,QAAA,GACAC,SAAA,SACAklB,gBAAA,EACAC,sBAAA,EACAF,YAAA,EACA7c,mBAAA,SAAAC,GACA,OAAAX,EAAA,iBAAAA,CAAAW,EAAA+yF,yBAEAn7F,MAAA,QAEA,CACAH,UAAA,cACAC,QAAAzF,EAAAM,QAAA,YACAoF,SAAA,SACAklB,gBAAA,EACAC,sBAAA,EACAF,YAAA,EACA7c,mBAAA,SAAAC,GACA,OAAAX,EAAA,gBAAAA,CAAAW,EAAAsvC,cAEA13C,MAAA,QAGA,CACAH,UAAA,aACAC,QAAAzF,EAAAM,QAAA,gBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAAgzF,aAEAp7F,MAAA,QAEA,CACAH,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,SAAAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,qBAEA,CACAoC,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SACAkI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,sBAEA,CACAoC,UAAA,qBACAC,QAAAzF,EAAAM,QAAA,gCACAoF,SAAA,SACAC,MAAA,OACAqmD,UAAA,SAcA,CACAxmD,UAAA,SACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAilB,YAAA,EACAC,gBAAA,EACAC,sBAAA,EACA/c,mBAAA,SAAAC,GACA,OAAAX,EAAA,eAAAA,CAAAW,EAAAkb,SAEAtjB,MAAA,QAEA,CACAH,UAAA,aACAC,QAAAzF,EAAAM,QAAA,uBACAoF,SAAA,OACAjE,OAAA,CAAA20D,SAAA,SACAzwD,MAAA,QACAukB,QAAA61E,GAEA,CAAAv6F,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,UAAAC,MAAA,IAEAuI,cAAA,SAAArI,GACA,IACAzC,EADA,QAAAyC,EAAAsI,WACA/K,EAAAyC,EAAAuI,UAAAC,iBAAAxI,EAAAyI,WACAs1B,UACA/9B,EAAA2I,WAAAC,SAAA,eAEAqxF,GAAA18F,EAAA49F,WACAn7F,EAAA2I,WAAAC,SAAA,gBAEAqxF,GAAA18F,EAAA69F,0BACAp7F,EAAA2I,WAAAC,SAAA,kBAKAspC,cAAA,WAAA,OAAAgoD,GACA9nD,eAAA,SAAAjpC,GACA,QAAAA,EAAA40B,YAAAp/B,OAAAb,UAAA+3B,mBAAA1sB,EAAAquC,gBACAyiD,IAAAt7F,OAAAb,UAAA+3B,mBAAA1sB,EAAAquC,eAEAhH,kBAAA,SAAArnC,GACA,OAAAA,EAAA40B,WAAAp/B,OAAAb,UAAA+3B,mBAAA1sB,EAAAquC,eACAyiD,GAAAt7F,OAAAb,UAAA+3B,mBAAA1sB,EAAAquC,cAEAlF,iBAAA,SAAAnpC,GACA,OAAAA,EAAA40B,WAAAo8D,GAKA5mD,2BAAA,EACAnvC,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,4BACA6J,UAAA,SAAA6E,GAAA,OAAAA,EAAAkyF,uBAAApB,GACA11F,SAAA,SAAA4E,GArJA,IAAAA,EAAAA,EAsJAA,EApJAqB,EAAA6B,eAAA,CACA7R,MAAA,sCACA8R,QAAA,qCACAC,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WACAs1F,EAAA5lB,MAAA9qE,EAAAhK,EAAA26F,iBAAA,WACA52E,KACA,aA4IA,CACA7e,KAAAlK,EAAAM,QAAA,kCACA8J,SAAA,SAAA4E,GACAqxF,GAAA,IAEAl2F,UAAA,SAAA6E,GAAA,OAAA9H,EAAAE,SAAA+5F,uBAEA,CACAj3F,KAAAlK,EAAAM,QAAA,0CACA8J,SAAA,SAAA4E,GACAqxF,GAAA,IAEAl2F,UAAA,SAAA6E,GAAA,OAAA9H,EAAAE,SAAAg6F,sBAEA,CACAl3F,KAAAhD,EAAAE,SAAAi6F,wBACArhG,EAAAM,QAAA,0CACAN,EAAAM,QAAA,qCACA8J,SAAA,SAAA4E,GAoJAsyF,EAAAl7F,SAAAC,KAAA,WACAi7F,EAAAt8F,OAAA8W,SAAA9W,EAAA8W,SACAwlF,EAAAt8F,OAAA9D,OAAA8D,EAAA9D,OACAogG,EAAAt8F,OAAAq8F,wBAAAn6F,EAAAE,SAAAi6F,wBACAC,EAAAt8F,OAAAw7F,gBAAA,SAAA1kF,EAAA5a,EAAAya,EAAA4lF,EAAAC,EAAAC,GAEAC,EAAAtgG,EAAAyzB,OAAAlZ,EAAA,SAAAkV,EAAAlwB,EAAAD,GAEA,OADAmwB,EAAAlwB,EAAAghG,sBAAA9wE,EAAAlwB,EAAAghG,oBAAA,KAAAx+F,KAAAxC,EAAAoM,WACA8jB,GACA,IAEA+wE,EAAAxgG,EAAA+a,IAAAulF,EAAA,SAAA/gG,EAAAD,GACA,MAAA,CAAA44B,EAAA54B,EAAA6D,EAAA5D,KAGAkhG,EAAAjiG,QAAAkiG,OAAAF,GAEA16F,EAAAE,SAAAi6F,wBACAl0F,EAAAuC,KACA,mDACAoM,EAAAuQ,SACA,YAAAnrB,EAAAmrB,SACA,gBAAA01E,UAAAR,GACA,8BAAAQ,UAAAP,GACA,kBAAAO,UAAAN,GACA,aAAAM,UAAAF,GACA,SAAA,iHAEA10F,EAAAuC,KACA,+CACAoM,EAAAuQ,SACA,YAAAnrB,EAAAmrB,SACA,SAAA01E,UAAAR,GACA,iBAAAQ,UAAAN,GACA,aAAAM,UAAAF,GACA,SAAA,kHAIAP,EAAA96F,UAxLA2D,UAAA,SAAA6E,GAAA,OAAA9H,EAAAE,SAAA+5F,sBACAj6F,EAAAE,SAAAg6F,sBAEA,CACAl3F,KAAA,IAAAlK,EAAAM,QAAA,mBAAA,KAAAN,EAAAM,QAAA,wBACA8J,SAAA,SAAA4E,GA0HAgzF,EAAA57F,SAAAC,KAAA,WACA27F,EAAAx7F,UAxHA2D,UAAA,SAAA6E,GACA,OAAAixF,IAEA,CACA/1F,KAAA,IAAAlK,EAAAM,QAAA,mBAAA,KAAAN,EAAAM,QAAA,iCACA8J,SAAA,SAAA4E,GACAyxF,EAAA,wBAEAt2F,UAAA,SAAA6E,GACA,OAAAixF,IAEA,CACA/1F,KAAA,IAAAlK,EAAAM,QAAA,mBAAA,KAAAN,EAAAM,QAAA,kCACA8J,SAAA,SAAA4E,GACAyxF,EAAA,yBAEAt2F,UAAA,SAAA6E,GACA,OAAAixF,IAEA,CACA/1F,KAAA,IAAAlK,EAAAM,QAAA,mBAAA,KAAAN,EAAAM,QAAA,mCACA8J,SAAA,SAAA4E,GACAyxF,EAAA,0BAEAt2F,UAAA,SAAA6E,GACA,OAAAixF,IAEA,CACA/1F,KAAA,IAAAlK,EAAAM,QAAA,mBAAA,KAAAN,EAAAM,QAAA,iCACA8J,SAAA,SAAA4E,GACAyxF,EAAA,wBAEAt2F,UAAA,SAAA6E,GACA,OAAAixF,MAKAj7F,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,EAAApR,EAAA8W,SAAA9W,EAAA9D,UAeAkV,EAAApR,EAAA8W,SAAA9W,EAAA9D,QAEA8D,EAAAuhE,iBAAA,SAAAzqD,GACAA,GACA1F,EAAA0F,EAAA9W,EAAA9D,SAIA8D,EAAAwhE,eAAA,SAAAtlE,GACAA,GACAkV,EAAApR,EAAA8W,SAAA5a,IAIA8D,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAA2F,WAAA3F,EAAA26F,iBACAx5F,EAAAnB,OAAAuH,OAAA,WACAwc,KAEA5iB,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAAo5F,EAAAh5F,YACAP,EAAAnB,OAAA2F,WAAA3F,EAAA26F,iBACAx5F,EAAAnB,OAAAuH,OAAA,WACAwc,KAEA5iB,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACA6+F,EAAA77F,SAAAC,KAAA,WACA47F,EAAAj9F,OAAAsB,MAAA,CAAA+2C,YAAA,IACA4kD,EAAAj9F,OAAAwC,aAAA,SAAAlB,GACA,IAAA47F,EAAAtiG,QAAA2G,KAAAnD,GACA8+F,EAAA7kD,YAAA/2C,EAAA+2C,YACAqiD,EAAA94F,OAAAs7F,EAAAl9F,EAAA26F,iBAAA,WACA52E,OAGAk5E,EAAAz7F,UAsFA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,uDACA4B,OARAxB,EAAAm9F,iBAAA,WACAC,EAAAh8F,SAAAC,KAAA,WACA+7F,EAAA57F,WAOAQ,MAAAhC,EAAAiC,SAGAs5F,EAAAt7F,EAAA,CACAL,YAAA,uEACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGAq6F,EAAAr8F,EAAA,CACAL,YAAA,+EACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGAg7F,EAAAh9F,EAAA,CACAL,YAAA,oEACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGA+6F,EAAA/8F,EAAA,CACAL,YAAA,0DACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGA05F,EAAA17F,EAAA,CACAL,YAAA,gEACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGAm7F,EAAAn9F,EAAA,CACAL,YAAA,yDACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YCrcAtH,MAAAkF,WAAA,0BAAA,CAAA,SAAA,eAAA,cACA,SAAAG,EAAA06F,EAAAv3F,GAEAnD,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAA86F,aAAA33F,EAAAU,SAAA,sBACA7D,EAAA+6F,aAAA53F,EAAAU,SAAA,sBACA7D,EAAAuzC,WAAAvzC,EAAAsB,MAAAs9B,aACA5+B,EAAAqC,UAAAg7F,gBAAAr9F,EAAA86F,eACA96F,EAAAqC,UAAAg7F,gBAAAr9F,EAAA+6F,aAEA/6F,EAAA6C,UAAA,EAEA7C,EAAAs9F,iBAAA,SAAAh8F,GACAA,EAAAqhD,OAAA,MAGA3iD,EAAAwC,aAAA,SAAAlB,GAcA,SAAAmB,IACAzC,EAAA6C,UAAA,EACA7C,EAAA0C,QACA1C,EAAAuH,SAGA,SAAA5E,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EApBA4B,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEAvB,EAAA+7F,cAGA3C,EAAA33F,OAAAzB,EAAAtB,EAAA2F,WAAAlD,EAAAE,GAFA+3F,EAAA13F,OAAA1B,EAAAtB,EAAA2F,WAAAlD,EAAAE,QC9BAhI,MAAAkF,WAAA,oCAAA,CAAA,SAAA,KAAA,eAAA,aAAA,WACA,SAAAG,EAAAkI,EAAAwyF,EAAA1/F,EAAA8oB,GAWA,SAAArN,EAAAK,EAAA5a,GAEA4a,GAAA5a,IAIA8D,EAAAu9F,eAAA,EACAv9F,EAAAw9F,mBAAA,EACAx9F,EAAAy9F,oBAAA,EACAz9F,EAAA2W,SAAA+jF,EAAAgD,oCAAA5mF,EAAA5a,GACA8D,EAAAwtC,UAAAktD,EAAAiD,qCAAA7mF,EAAA5a,GAEAgM,EAAAiD,IAAA,CAAAnL,EAAA2W,SAAAvV,SAAApB,EAAAwtC,UAAApsC,WAAAC,KAAA,WACArB,EAAAu9F,eAAA,KAIA,SAAAK,EAAAC,EAAAC,GACAD,EAEA79F,EAAA4C,aACA5C,EAAA4C,YAAAqoB,QACA,EAAAjrB,EAAA4C,YAAAqoB,OAAAxrB,UAEA,KADA8uB,EAAAnyB,EAAAwuD,UAAA5qD,EAAA4C,YAAAqoB,OAAA,CAAA9d,QAAA2wF,MAEA99F,EAAA4C,YAAAqoB,OAAAlX,OAAAwa,EAAA,GAEA,IAAAvuB,EAAA4C,YAAAqoB,OAAAxrB,SACAO,EAAA4C,YAAA,OAKA5C,EAAA4C,YAGA5C,EAAA4C,YAAAqoB,OAGA7uB,EAAAsK,KAAA1G,EAAA4C,YAAAqoB,OAAA,CAAA9d,QAAA2wF,KACA99F,EAAA4C,YAAAqoB,OAAA9sB,KAAA,CAAAgP,QAAA2wF,IAHA99F,EAAA4C,YAAAqoB,OAAA,CAAA,CAAA9d,QAAA2wF,IAHA99F,EAAA4C,YAAA,CAAAqoB,OAAA,CAAA,CAAA9d,QAAA2wF,KA3CA99F,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAw9F,mBAAA,EACAx9F,EAAAy9F,oBAAA,EAEAz9F,EAAAsC,kBAAA,SAAAlE,GACA,OAAA4B,EAAAw9F,oBAAAx9F,EAAAy9F,sBAAAz9F,EAAAu9F,eAkDAv9F,EAAA4C,YAAA,CACAqoB,OAAA,CACA,CAAA9d,QAAAnS,EAAAM,QAAA,iDACA,CAAA6R,QAAAnS,EAAAM,QAAA,oDAIA0E,EAAA+9F,6BAAA,WAEA/9F,EAAAw9F,oBAAAphG,EAAAsK,KAAA1G,EAAA2W,SAAA,CAAA6C,YAAA,IACA,IAAAskF,EAAA9iG,EAAAM,QAAA,gDAEAsiG,EAAA59F,EAAAw9F,kBAAAM,IAGA99F,EAAAg+F,8BAAA,WACAh+F,EAAAy9F,qBAAArhG,EAAAsK,KAAA1G,EAAAwtC,UAAA,CAAAh0B,YAAA,IACA,IAAAskF,EAAA9iG,EAAAM,QAAA,iDAEAsiG,EAAA59F,EAAAy9F,mBAAAK,IAGArnF,EAAAzW,EAAA8W,SAAA9W,EAAA9D,QAEA8D,EAAAiG,WAAA,CACA,CACA5K,MAAA,mBACAyG,SAAA,qFAEA,CACAzG,MAAA,oBACAyG,SAAA,uFAGA9B,EAAA8Z,aAAA,SAAAhD,EAAA5a,GACAua,EAAAK,EAAA5a,IAGA8D,EAAAikB,OAAAH,EAAA5c,cAEAlH,EAAAi+F,0BAAA,CACAh6E,OAAA,GACAvR,WAAA,GACAwrF,eAAA,SAAAviG,EAAAwS,GACA,OAAAnO,EAAAi+F,0BAAAh6E,OAAAxkB,QAIA,EAAArD,EAAAmyF,aAAA5yF,EAAAsoB,OAAAjkB,EAAAi+F,0BAAAh6E,QAAAxkB,SAIAO,EAAAm+F,2BAAA,CACAzrF,WAAA,IAGA1S,EAAAo+F,oBAAA,CACApoF,SAAA,CAAAC,OAAA,CAAA,YAAAC,WAAA,CAAA,QACAC,WAAA,CACA,CAAAC,MAAA,qBAAAE,YAAA,+BAAA3V,MAAA,QACA,CAAAyV,MAAA,WAAAE,YAAA,iBAAA2E,KAAA,aACA,CAAA7E,MAAA,iBAAAE,YAAA,kBACA,CAAAF,MAAA,QAAAE,YAAA,gBAAA3V,MAAA,SACA,CAAAyV,MAAA,QAAAE,YAAA,gBAAAD,WAAA,QAAA1V,MAAA,SACA,CAAAyV,MAAA,SAAAE,YAAA,iBAAA+nF,QAAA,IAEA9nF,iBAAA,EACAiC,aAAA,EACA8lF,eAAA,GAGAt+F,EAAAu+F,qBAAA,CACAvoF,SAAA,CAAAC,OAAA,CAAA,YAAAC,WAAA,CAAA,QACAC,WAAA,CACA,CAAAC,MAAA,qBAAAE,YAAA,+BAAA3V,MAAA,QACA,CAAAyV,MAAA,WAAAE,YAAA,iBAAA2E,KAAA,aACA,CAAA7E,MAAA,SAAAE,YAAA,iBAAA+nF,QAAA,IACA9nF,iBAAA,EACAiC,aAAA,EACA8lF,eAAA,GAGAt+F,EAAAw+F,aAAA,EACAx+F,EAAAy+F,cAAA,EAEAz+F,EAAAwC,aAAA,SAAAlB,EAAAo9F,GAEAA,EACA1+F,EAAAw+F,aAAA,EAEAx+F,EAAAy+F,cAAA,EAgBA,IAAA9nF,EAAAva,EAAA+a,IAAA/a,EAAAkoB,OAAAtkB,EAAA2W,SAAA,CAAA6C,YAAA,IACA,SAAAja,GAAA,MAAA,CAAAwI,UAAAxI,EAAAwI,UAAA40F,mBAAAp9F,EAAAo9F,sBACAnvD,EAAApxC,EAAA+a,IAAA/a,EAAAkoB,OAAAtkB,EAAAwtC,UAAA,CAAAh0B,YAAA,IACA,SAAA3Y,GAAA,MAAA,CAAA8T,WAAA9T,EAAA8T,WAAAgoF,mBAAA97F,EAAA87F,sBAEAgC,EAAA3+F,EAAAi+F,0BAAAh6E,QAAA,IAAAjkB,EAAAi+F,0BAAAh6E,OAAAxkB,OACAO,EAAAi+F,0BAAAh6E,OAAA,GACA,MAIAjkB,EAAAs7F,UACAZ,EAAAkE,oCACAjoF,EACA62B,EACAxtC,EAAA8W,SACA9W,EAAA9D,OACAwiG,EACAC,GAGAjE,EAAAmE,6BACAloF,EACA62B,EACAxtC,EAAA8W,SACA9W,EAAA9D,OACAwiG,EACAC,IAGAv9F,SAAAC,KA3CA,SAAAjD,GACA4B,EAAAw+F,aAAA,EACAx+F,EAAAy+F,cAAA,EACAz+F,EAAA0C,QACA1C,EAAAw7F,gBAAAp9F,IAGA,SAAAA,GACA4B,EAAAw+F,aAAA,EACAx+F,EAAAy+F,cAAA,EACAz+F,EAAA4C,YAAAxE,QClKAzD,MAAAkF,WAAA,2CAAA,CAAA,SAAA,eAAA,aAAA,sBAAA,WACA,SAAAG,EAAA06F,EAAA1/F,EAAAsQ,EAAAwY,GA8BA,SAAArN,EAAAK,EAAA5a,GAEA4a,GAAA5a,IAIA8D,EAAAu9F,eAAA,EACAv9F,EAAAw9F,mBAAA,EACAx9F,EAAA2W,SAAA+jF,EAAAgD,oCAAA5mF,EAAA5a,GAEA8D,EAAA2W,SAAAvV,SAAAC,KAAA,WACArB,EAAAu9F,eAAA,KAvCAv9F,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAA8+F,UAAA,GAGAxzF,EAAA+B,cACArN,EAAA8+F,UAAAvC,YAAAjxF,EAAA2C,IAAA,oBACAjO,EAAA8+F,UAAAtC,0BAAAlxF,EAAA2C,IAAA,kCACAjO,EAAA8+F,UAAArC,cAAAnxF,EAAA2C,IAAA,uBAcAjO,EAAAw9F,mBAAA,EAEAx9F,EAAAsC,kBAAA,SAAAlE,GACA,OAAA4B,EAAAw9F,qBAAAx9F,EAAAu9F,eAgDAv9F,EAAA4C,YAAA,CACAqoB,OAAA,CACA,CAAA9d,QAAAnS,EAAAM,QAAA,mDAIA0E,EAAA+9F,6BAAA,WAEA/9F,EAAAw9F,oBAAAphG,EAAAsK,KAAA1G,EAAA2W,SAAA,CAAA6C,YAAA,IACA,IAvCAqkF,EAuCAC,EAAA9iG,EAAAM,QAAA,gDAvCAuiG,EAyCA79F,EAAAw9F,kBAzCAM,EAyCAA,EAxCAD,EAEA79F,EAAA4C,aACA5C,EAAA4C,YAAAqoB,QACA,EAAAjrB,EAAA4C,YAAAqoB,OAAAxrB,UAEA,KADA8uB,EAAAnyB,EAAAwuD,UAAA5qD,EAAA4C,YAAAqoB,OAAA,CAAA9d,QAAA2wF,MAEA99F,EAAA4C,YAAAqoB,OAAAlX,OAAAwa,EAAA,GAEA,IAAAvuB,EAAA4C,YAAAqoB,OAAAxrB,SACAO,EAAA4C,YAAA,OAKA5C,EAAA4C,YAGA5C,EAAA4C,YAAAqoB,OAGA7uB,EAAAsK,KAAA1G,EAAA4C,YAAAqoB,OAAA,CAAA9d,QAAA2wF,KACA99F,EAAA4C,YAAAqoB,OAAA9sB,KAAA,CAAAgP,QAAA2wF,IAHA99F,EAAA4C,YAAAqoB,OAAA,CAAA,CAAA9d,QAAA2wF,IAHA99F,EAAA4C,YAAA,CAAAqoB,OAAA,CAAA,CAAA9d,QAAA2wF,MA2BArnF,EAAAzW,EAAA8W,SAAA9W,EAAA9D,QAEA8D,EAAAiG,WAAA,CAAA,CACA5K,MAAA,WACAyG,SAAA,yFACA,CACAzG,MAAA,mBACAyG,SAAA,8FAGA9B,EAAA8Z,aAAA,SAAAhD,EAAA5a,GACAua,EAAAK,EAAA5a,IAGA8D,EAAAikB,OAAAH,EAAA5c,cAEAlH,EAAAi+F,0BAAA,CACAh6E,OAAA,GACAvR,WAAA,GACAwrF,eAAA,SAAAviG,EAAAwS,GACA,OAAAnO,EAAAi+F,0BAAAh6E,OAAAxkB,QAIA,EAAArD,EAAAmyF,aAAA5yF,EAAAsoB,OAAAjkB,EAAAi+F,0BAAAh6E,QAAAxkB,SAIAO,EAAA6F,OAAA,mCAAA,SAAAC,EAAAC,GACAD,GAAA,IAAAA,EAAArG,QACAO,EAAAikB,OAAA7iB,SAAAC,KAAA,SAAA09F,GACAJ,EAAAviG,EAAAsK,KAAAq4F,EAAA,CAAAzmD,QAAAxyC,EAAA,KACA64F,IACAA,EAAApC,cACAv8F,EAAA8+F,UAAAvC,YAAAoC,EAAApC,aAEAoC,EAAAnC,4BACAx8F,EAAA8+F,UAAAtC,0BAAAmC,EAAAnC,2BAEAmC,EAAAK,qBACAh/F,EAAA8+F,UAAArC,cAAAkC,EAAAK,yBAOAh/F,EAAAo+F,oBAAA,CACApoF,SAAA,CAAAC,OAAA,CAAA,YAAAC,WAAA,CAAA,QACAC,WAAA,CACA,CAAAC,MAAA,qBAAAE,YAAA,+BAAA3V,MAAA,QACA,CAAAyV,MAAA,WAAAE,YAAA,iBAAA2E,KAAA,aACA,CAAA7E,MAAA,iBAAAE,YAAA,kBACA,CAAAF,MAAA,QAAAE,YAAA,gBAAA3V,MAAA,SACA,CAAAyV,MAAA,QAAAE,YAAA,gBAAAD,WAAA,QAAA1V,MAAA,SACA,CAAAyV,MAAA,SAAAE,YAAA,iBAAA+nF,QAAA,IAEA9nF,iBAAA,EACAiC,aAAA,EACA8lF,eAAA,GAGAt+F,EAAA6C,UAAA,EAEA7C,EAAAwC,aAAA,SAAAlB,GAEAtB,EAAA6C,UAAA,EAEA,IAAA8T,EAAAva,EAAA+a,IAAA/a,EAAAkoB,OAAAtkB,EAAA2W,SAAA,CAAA6C,YAAA,IACA,SAAAja,GAAA,MAAA,CAAAwI,UAAAxI,EAAAwI,UAAA40F,mBAAAp9F,EAAAo9F,sBA/IArxF,EAAA+B,cACA/B,EAAAqC,IAAA,mBAAA3N,EAAA8+F,UAAAvC,aACAjxF,EAAAqC,IAAA,iCAAA3N,EAAA8+F,UAAAtC,2BACAlxF,EAAAqC,IAAA,qBAAA3N,EAAA8+F,UAAArC,gBAgJAz8F,EAAA0C,QAEA1C,EAAAw7F,gBACAx7F,EAAA8W,SACA9W,EAAA9D,OACAya,EACA3W,EAAA8+F,UAAAvC,YACAv8F,EAAA8+F,UAAAtC,0BACAx8F,EAAA8+F,UAAArC,mBC3KA9hG,MAAAkF,WAAA,iCAAA,CAAA,SAAA,QAAA,aAAA,sBAAA,eACA,SAAAG,EAAA27B,EAAA3gC,EAAAsQ,EAAAovF,GAwCA,OAtCA16F,EAAA3E,MAAA,GACA2E,EAAA6C,UAAA,EAEA7C,EAAAi/F,oBAAA,KAEAj/F,EAAAsB,MAAA,CACAwV,SAAA,IAAAxa,KACAJ,OAAA,IAAAI,KACA4iG,WAAA,EACAC,UAAA,KACAC,UAAA,KACA7/D,OAAA,KACA8/D,mBAAA,EACA1C,mBAAA,MAGArxF,EAAA+B,cACArN,EAAAsB,MAAAq7F,mBAAArxF,EAAA2C,IAAA,mCAGAjO,EAAA6F,OAAA,QAAA,SAAAvE,GACAgK,EAAA+B,aACA/B,EAAAqC,IAAA,iCAAArM,EAAAq7F,sBAEA,GAEA38F,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAAs9F,iBAAA,SAAAh8F,GACAA,EAAA69F,UAAA,KACA79F,EAAA89F,UAAA,KACA99F,EAAAi+B,OAAA,MAGAv/B,EAAA07F,eAEA,IAAA,sBACA17F,EAAA3E,MAAAL,EAAAM,QAAA,iCACA,MACA,IAAA,uBACA0E,EAAA3E,MAAAL,EAAAM,QAAA,kCACA,MACA,IAAA,wBACA0E,EAAA3E,MAAAL,EAAAM,QAAA,mCACA,MACA,IAAA,sBACA0E,EAAA3E,MAAAL,EAAAM,QAAA,iCAIA0E,EAAAwC,aAAA,SAAAlB,GAEA,IAAAtB,EAAA6C,SAAA,CAIA7C,EAAA6C,UAAA,EAEA7C,EAAAi/F,oBAAA,KAEA,IAAA39D,EAAA,CACA6B,YAAApnC,OAAAuF,EAAAwV,UAAAta,MAAAC,SACA2mC,UAAArnC,OAAAuF,EAAApF,QAAAM,MAAAC,UAGA,OAAAuD,EAAA07F,eACA,IAAA,sBACAp6D,EAAAgG,OAAA,GACAhG,EAAAg+D,eAAA,GACA5E,EAAA6E,oBAAAj+D,GAAAlgC,SAAAC,KAAAoB,EAAAE,GACA,MACA,IAAA,uBACA2+B,EAAA/B,OAAAj+B,EAAAi+B,OACA+B,EAAA49D,WAAA59F,EAAA49F,WACAxE,EAAA8E,yBAAAl+D,GAAAlgC,SAAAC,KAAAo+F,EAAA98F,GACA,MACA,IAAA,wBACA2+B,EAAA69D,UAAA79F,EAAA69F,UACA79D,EAAA89D,UAAA99F,EAAA89F,UACA99D,EAAA49D,WAAA59F,EAAA49F,WACAxE,EAAAgF,0BAAAp+D,GAAAlgC,SAAAC,KAAAo+F,EAAA98F,GACA,MACA,IAAA,sBAEA,IAAAmnD,EAAA/tD,OAAA+tD,SAAAxoD,EAAA+9F,mBAAA,WACA/9F,EAAA+9F,mBAAA,EACA/9D,EAAAq+D,UAAA,IAAAtsE,KAAAusE,IAAA91C,EAAAx1C,QAAA,KAAA,IAAA+e,KAAAusE,IAAA91C,EAAAh2B,UAAArV,OAAA,GAAA,KAAA,IAAA4U,KAAAusE,IAAA91C,EAAA/1B,YAAAtV,OAAA,GAAA,KAAA,IAAA4U,KAAAusE,IAAA91C,EAAA+1C,YAAAphF,OAAA,GAEA6iB,EAAAq+D,UAAA71C,EAAAx1C,OAAA,KAAA,IAAAw1C,EAAAh2B,SAAArV,OAAA,GAAA,KAAA,IAAAqrC,EAAA/1B,WAAAtV,OAAA,GAAA,KAAA,IAAAqrC,EAAA+1C,WAAAphF,OAAA,GAEA6iB,EAAAq7D,mBAAAr7F,EAAAq7F,mBACAjC,EAAAoF,+BAAAx+D,GAAAlgC,SAAAC,KAAAoB,EAAAE,IAWA,SAAA88F,EAAA5zE,GACA,GAAAA,EAAApsB,QACAO,EAAA6C,UAAA,EACA7C,EAAA0C,QACA1C,EAAAuH,QACAvH,EAAAuH,UAGA5E,EAAAkpB,GAIA,SAAAppB,IACAzC,EAAA6C,UAAA,EACA7C,EAAA0C,QACA1C,EAAAuH,QACAvH,EAAAuH,SAIA,SAAA5E,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAAi/F,oBAAA7gG,OCnIAzD,MAAAkF,WAAA,yBAAA,CAAA,SAAA,SAAA,aAAA,WAAA,gBAAA,4BACA,SAAAG,EAAAC,EAAAjF,EAAAwT,EAAAnD,EAAA00F,GAmBA,SAAA3uF,IACA,IAAAI,EAAA,KACAxR,EAAAM,cAAAN,EAAAM,aAAAmD,eACA+N,EAAAxR,EAAAM,aAAAmD,aAAAgO,sBAGAzR,EAAAggG,oBAAAD,EAAA74F,cAEAlH,EAAAggG,oBAAA5+F,SAAAC,KAAA,WACAmQ,GAAAxR,EAAAM,cAAAN,EAAAM,aAAAmD,cACA+K,EAAA,WACAxO,EAAAM,aAAAmD,aAAAa,WAAAkN,GAAA,IACA,OA7BAxR,EAAAM,aAAA,CACAwE,KAAA,sBACAkgB,QAAA,KACAzkB,QAAA,CACA,CAAAC,UAAA,KAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,qBAAAC,QAAAzF,EAAAM,QAAA,gCAAAoF,SAAA,UACA,CAAAF,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,UAAAC,MAAA,QACA,CAAAH,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,sBAAAtI,MAAA,SACA,CAAAH,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,sBAAAtI,MAAA,QAAAC,UAAA,QACA,CAAAJ,UAAA,oBAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,SAAAC,MAAA,WAIAX,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,MAoBAA,IAYA,IAAAjQ,EAAAlB,EAAA,CACAL,YAAA,iEACA4B,OAZAxB,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAAuH,OAAA,WACA6J,KAEAjQ,EAAAK,WAOAQ,MAAAhC,EAAAiC,YCpDAtH,MAAAkF,WAAA,+BAAA,CAAA,SAAA,4BACA,SAAAG,EAAA+/F,GAEA//F,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAA6C,UAAA,EAEA7C,EAAAwC,aAAA,SAAAlB,GAEAtB,EAAA6C,UAAA,EAEAk9F,EAAAh9F,OAAAzB,GAAAF,SAAAC,KAEA,WACArB,EAAA6C,UAAA,EACA7C,EAAA0C,QACA1C,EAAAuH,QACAvH,EAAAuH,UAIA,SAAAnJ,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,QC3BAzD,MAAAkF,WAAA,2BAAA,CAAA,SACA,SAAAG,OCDArF,MAAAkF,WAAA,4BAAA,CAAA,SAAA,sBACA,SAAAG,EAAAsL,GAEAtL,EAAA6zE,UAAA,2FACA7zE,EAAA8zE,eAAA,EACA9zE,EAAA+zE,mBAAA,EACA/zE,EAAAg0E,aAAA,EAEA,IAAAJ,EAAA,KAEA5zE,EAAAsB,MAAA,CACAq7F,mBAAA,GACAsD,QAAA,GAGA30F,EAAA+B,cACArN,EAAAsB,MAAAq7F,mBAAArxF,EAAA2C,IAAA,mCAGAjO,EAAA6F,OAAA,QAAA,SAAAvE,GACAtB,EAAA6zE,UAAA,uEAAAkpB,UAAAz7F,EAAAq7F,oBAAA,WAAAr7F,EAAA2+F,OACA30F,EAAA+B,aACA/B,EAAAqC,IAAA,iCAAArM,EAAAq7F,oBAEA/oB,EAAAkB,QACA90E,EAAAkgG,iBAAA,KACAlgG,EAAA8zE,eAAA,EACA9zE,EAAA+zE,mBAAA,EACA/zE,EAAAg0E,aAAA,IACA,GAEAh0E,EAAAo0E,oBAAA,CACAC,OAAA,6FACAC,WAAA,YACAI,YAAA,SACApxD,eAAA,SAAAziB,GACA+yE,EAAA/yE,EAAAuI,WAEAurE,cAAA,SAAA9zE,GACAb,EAAAkgG,iBAAA/8B,KAAA8R,MAAAp0E,EAAA+zE,QAAAC,cACA70E,EAAA8zE,eAAA,EACA9zE,EAAA+zE,mBAAA,EACA/zE,EAAAg0E,aAAA,EACAJ,EAAAkB,SAEAC,gBAAA,SAAAl0E,GACAb,EAAAkgG,iBAAA,KACAlgG,EAAA8zE,eAAA,EACA9zE,EAAA+zE,mBAAA,EACA/zE,EAAAg0E,aAAA,GAEAgB,WAAA,SAAAn0E,GACAb,EAAAkgG,iBAAA/8B,KAAA8R,MAAAp0E,EAAA+zE,QAAAC,cACA70E,EAAA8zE,eAAA,EACA9zE,EAAA+zE,mBAAA/zE,EAAAsB,MAAA2+F,OACAjgG,EAAAg0E,aAAA,GAEA3wD,eAAA,CACAwwD,UAAA,YACA1nE,SAAA,qBC3DAxR,MAAAkF,WAAA,uBAAA,CAAA,SAAA,SAAA,eACA,SAAAG,EAAAC,EAAAy6F,GAwBA,SAAAtpF,EAAA0F,EAAA5a,GACA8D,EAAAs/F,eAAA5E,EAAAyF,qBAAArpF,EAAA5a,GAvBA8D,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAA8W,SAAA/a,SAAA6U,QAAA,SAAA1U,SACA8D,EAAA9D,OAAAH,SAAAqrB,MAAA,SAAAlrB,SAGA8D,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,aAAAC,WAAA,CAAA,QACAC,WAAA,CAAA,CAAAC,MAAA,qBAAAE,YAAA,gCACA,CAAAF,MAAA,yBAAAE,YAAA,qCAAA4E,MAAA,QAAAva,MAAA,SACA,CAAAyV,MAAA,oBAAAE,YAAA,gCAAA2E,KAAA,SAAAC,MAAA,QAAAva,MAAA,SACA,CAAAyV,MAAA,YAAAE,YAAA,sBAAAD,WAAA,iCAAA1V,MAAA,UAEA4V,iBAAA,GAGAvW,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,EAAApR,EAAA8W,SAAA9W,EAAA9D,UAOAkV,EAAApR,EAAA8W,SAAA9W,EAAA9D,QAEA8D,EAAAuhE,iBAAA,SAAAzqD,GACAA,GACA1F,EAAA0F,EAAA9W,EAAA9D,SAIA8D,EAAAwhE,eAAA,SAAAtlE,GACAA,GACAkV,EAAApR,EAAA8W,SAAA5a,OCvCAvB,MAAA4T,UAAA,wBAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAA0e,GACA,GAAAA,EACA,OAAAnyB,EAAAM,QAAA6xB,EAAAjoB,MAGA,SAAAwJ,EAAAye,GACA,OAAAnyB,EAAAM,QAAA6xB,EAAAjoB,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,mBACA,CAAApC,GAAA,EAAAoC,KAAA,uBAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QCnEAzU,MAAA2pB,OAAA,mBAAA,CAAA,aAAA,SAAAtpB,GACA,OAAA,SAAAS,GACA,OAAAA,GACA,KAAA,EACA,OAAAT,EAAAM,QAAA,mBACA,KAAA,EACA,OAAAN,EAAAM,QAAA,oBACA,QACA,MAAA,QCNAX,MAAA8gC,QAAA,eAAA,CAAA,YAAA,KAAA,gBAAA,cAAA,sBACA,SAAAC,EAAAxzB,EAAA0zB,EAAAz4B,EAAAmI,GACA,IAAA80F,EAAA1kE,EAAA,oBAAA,GAAA,CACA2kE,WAAA,CAAA5jE,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,4BACAyjE,qBAAA,CAAA1jE,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,sCACA15B,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,wBACA35B,OAAA,CAAA05B,OAAA,OAAAC,IAAA,wBACA0B,OAAA,CAAA3B,OAAA,OAAAC,IAAA,wBACA4jE,+BAAA,CAAA7jE,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,gDACA6jE,gCAAA,CAAA9jE,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,iDACA8jE,wBAAA,CAAA/jE,OAAA,OAAAC,IAAA,yCACA+jE,+BAAA,CAAAhkE,OAAA,OAAAC,IAAA,gDACA6iE,oBAAA,CAAA9iE,OAAA,OAAAC,IAAA,iDACA8iE,yBAAA,CAAA/iE,OAAA,OAAAhN,SAAA,EAAAiN,IAAA,wDACAgjE,0BAAA,CAAAjjE,OAAA,OAAAhN,SAAA,EAAAiN,IAAA,yDACAojE,+BAAA,CAAArjE,OAAA,OAAAC,IAAA,iEAuNA,MAAA,CACA0+D,gBArNA,SAAAtkF,EAAA5a,GACA,IAAAugB,EAAA,GAqBA,OApBAA,EAAArb,SAAA8G,EAAA,SAAAoJ,EAAAC,GACAqqB,EAAAkC,UAAA,aAAAsiE,EAAA,CACAtpF,SAAAA,EACA5a,OAAAA,IACAkF,SAAAC,KAAA,SAAAigC,GACAn+B,EAAAU,SAAA,uBACA4Y,EAAAte,KAAAsf,MAAAhB,EAAA6kB,GACAhwB,EAAAgwB,KAEAo/D,EAAAtkG,EAAAkoB,OAAAgd,EAAA,SAAAt3B,GACA,OAAAA,EAAA40B,WAAA50B,EAAA40B,YAAAp/B,OAAAb,UAAA+3B,mBAAA1sB,EAAAquC,eAEA57B,EAAAte,KAAAsf,MAAAhB,EAAAikF,GACApvF,EAAAovF,KAEA,SAAAC,GACApvF,EAAAovF,OAIAlkF,GAgMA0jF,qBA7LA,SAAArpF,EAAA5a,GACA,OAAA0/B,EAAAkC,UAAA,uBAAAsiE,EAAA,CACAtpF,SAAAA,EACA5a,OAAAA,KA2LA8G,OA1JA,SAAA5E,EAAAuH,EAAA04B,EAAAC,GAEAlgC,EAAA89F,wBACA99F,EAAA89F,sBAAA,GAIA5wF,EAAA+B,cACA/B,EAAAqC,IAAA,qBAAAvP,EAAAukD,QACAr3C,EAAAqC,IAAA,yBAAAvP,EAAA29F,YACAzwF,EAAAqC,IAAA,iCAAAvP,EAAAu+F,qBAGA/gE,EAAA54B,OACAo9F,EACAz6F,EACAvH,EACAigC,EACAC,EACA,kBAwIAv7B,OArIA,SAAA3E,EAAAuH,EAAA04B,EAAAC,GAEAlgC,EAAA89F,wBACA99F,EAAA89F,sBAAA,GAGAtgE,EAAA74B,OACAq9F,EACAz6F,EACAvH,EACAigC,EACAC,EACA,kBA0HA18B,OAvHA,SAAAxD,EAAAuH,EAAA04B,EAAAC,GAEA,IAAAx7B,EAAA1E,EAAAi/F,cAiBAzhE,EAAAh6B,OACAw+F,EACA,KACAhiG,EAlBA,SAAAytB,GAEAA,EAAAwxE,cAEAzhE,EAAAmD,cAAAp5B,EAAAkmB,EAAA,iBAGA+P,EAAAoD,cAAAr5B,EAAA7C,EAAA,iBAGAu7B,GACAA,EAAAxS,IASAyS,EACA,CACAx7B,GAAA1E,EAAAi/F,cACAhlD,YAAAj6C,EAAAi6C,aAEA,kBA2FAy8B,MAxFA,SAAA12E,EAAAuH,EAAA04B,EAAAC,GAEA,IAAAsiE,GAAAxiG,EAAAyiG,2BACAziG,EAAA89F,sBAAA,KAEA,IAAAp5F,EAAA1E,EAAAi/F,cAeAzhE,EAAA74B,OACAq9F,EACA,KACAhiG,EAhBA,SAAAytB,GACA+0E,EAEAhlE,EAAAoD,cAAAr5B,EAAA7C,EAAA,iBAEA84B,EAAAmD,cAAAp5B,EAAAkmB,EAAA,iBAGAwS,GACAA,EAAAxS,IASAyS,EACA,kBA+DA58B,UA3LA,WACA,IAAAJ,EAAA,CACA+7F,cAAA,EACAwD,2BAAA,KACA3E,sBAAA,KACAS,mBAAA,KACAh6C,OAAA,KACAo5C,WAAA,EACA+E,UAAA,GACAC,SAAA,GACAC,UAAAjlG,SAAAG,SACA+kG,iBAAA,KACAC,gBAAA,KACAC,cAAA,KACA9R,cAAA,KACA73E,gBAAA,KACA4pF,WAAA,KACAxiE,WAAA,GASA,OANAtzB,EAAA+B,cACA/L,EAAAqhD,OAAAr3C,EAAA2C,IAAA,sBACA3M,EAAAy6F,WAAAzwF,EAAA2C,IAAA,2BAAA,EACA3M,EAAAq7F,mBAAArxF,EAAA2C,IAAA,mCAGA3M,GAkKAo8F,oCA7DA,SAAA5mF,EAAA5a,GACA,OAAA0/B,EAAAkC,UAAA,iCAAAsiE,EAAA,CACAtpF,SAAAA,EACA5a,OAAAA,KA2DAyhG,qCAvDA,SAAA7mF,EAAA5a,GACA,OAAA0/B,EAAAkC,UAAA,kCAAAsiE,EAAA,CACAtpF,SAAAA,EACA5a,OAAAA,KAqDA2iG,6BAjDA,SAAAloF,EAAA62B,EAAA12B,EAAA5a,EAAAwiG,EAAAC,GACA,OAAA/iE,EAAA+D,WAAA,0BAAAygE,EAAA,CACAzpF,SAAAA,EACA62B,UAAAA,EACA12B,SAAAA,EACA5a,OAAAA,EACAwiG,cAAAA,EACAC,MAAAA,KA2CAC,oCAtBA,SAAAjoF,EAAA62B,EAAA12B,EAAA5a,EAAAwiG,EAAAC,GACA,OAAA/iE,EAAA+D,WAAA,iCAAAygE,EAAA,CACAzpF,SAAAA,EACA62B,UAAAA,EACA12B,SAAAA,EACA5a,OAAAA,EACAwiG,cAAAA,EACAC,MAAAA,KAgBAY,oBAxCA,SAAAj+F,GACA,OAAAs6B,EAAA+D,WAAA,sBAAAygE,EAAA9+F,IAwCAk+F,yBArCA,SAAAl+F,GACA,OAAAs6B,EAAA+D,WAAA,2BAAAygE,EAAA9+F,IAqCAo+F,0BAlCA,SAAAp+F,GACA,OAAAs6B,EAAA+D,WAAA,4BAAAygE,EAAA9+F,IAkCAw+F,+BA/BA,SAAAx+F,GACA,OAAAs6B,EAAA+D,WAAA,iCAAAygE,EAAA9+F,QCzNA3G,MAAA8gC,QAAA,4BAAA,CAAA,YAAA,KAAA,gBACA,SAAAC,EAAAxzB,EAAA0zB,GACA,IAAAylE,EAAA3lE,EAAA,2BAAA,GAAA,CACA/W,OAAA,CAAA8X,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,yBACA35B,OAAA,CAAA05B,OAAA,MAAAC,IAAA,8BAeA,MAAA,CACAx1B,YAbA,WACA,OAAA00B,EAAAkC,UAAA,SAAAujE,IAaAt+F,OAVA,SAAAzB,GACA,OAAAs6B,EAAAkE,oBACA,SACAuhE,EACA,CAAAv+F,GAAAxB,EAAAwB,IACAxB,QChBA3G,MAAAkF,WAAA,2BAAA,CAAA,SAAA,aAAA,UAAA,oBAAA,YAAA,gBACA,aAAA,gBAAA,wBACA,SAAAG,EAAAhF,EAAAoN,EAAAzB,EAAAzD,EAAAmI,EAAAtM,EAAA6I,EAAAxE,GAKA,SAAAqT,IAEAzW,EAAAsB,MAAA+qC,mBAAArsC,EAAA6pD,eACA7pD,EAAA2pD,iBAAA/hD,EAAA05F,oBAAAthG,EAAAsB,MAAA+qC,kBAEArsC,EAAA2pD,iBAAAvmD,EAAAm+F,iCAAAvhG,EAAAsB,MAAA+C,UATArE,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAwhG,mBAAA,EAWA/qF,IAEAzW,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,cAAArC,EAAAsB,MAAA+qC,kBAGArsC,EAAAuqD,mBAAA,SAAA55C,GACA3Q,EAAA6pD,gBACAljD,EAAA6jD,uBAAAxqD,EAAAsB,MAAAqP,IAIA,IAAA81C,EAEAzmD,EAAAyhG,eAAA,SAAAp9F,GACA,IAAAq9F,EAAAr9F,GAGAq9F,EADA,iBAAAr9F,GAAAA,aAAA7E,OACA6Q,SAAAhM,GAGAq9F,IACAx+F,EAAAk6E,eAAAp9E,EAAAsB,MAAA2C,WAAAy9F,GAAArgG,KAAA,SAAA4mC,GACAjoC,EAAAsB,MAAAqT,WAAAszB,EAAAtzB,WACA8xC,EAAAxe,EACAjoC,EAAAsB,MAAA6mC,SAAAF,EAAAE,SAEAnoC,EAAA2pD,iBAAAvmD,EAAAm+F,iCAAA96C,EAAApiD,WACA,SAAAkR,GACAyU,MAAAzU,MAKAvV,EAAAwC,aAAA,SAAApE,GASA,SAAAqE,IACAzC,EAAA0C,QACA1C,EAAAuH,QACAvH,EAAAuH,SAIA,SAAA5E,EAAAvE,GACA4B,EAAA4C,YAAAxE,EACA4B,EAAA6C,UAAA,EAhBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,EAeAzE,EAAAiuC,iBAGArsC,EAAA6pD,eAcAljD,EAAA5D,OAAA3E,EAJA,CACAqJ,uBAAA,EACAC,qBAAA,GAEAjF,EAAAE,GAbA0I,EAAAsB,8BAAA,CACAC,YAAA,CAAA,8BAAA,kCACAC,yBAAA,EACAzH,SAAA,SAAA0H,GACAnG,EAAA5D,OAAA3E,EAAA0O,EAAArK,EAAAE,MAPAgE,EAAA3D,OAAA5E,EAAAqE,EAAAE,KAqBA3C,EAAA2hG,eAAA,WACA3hG,EAAAwhG,mBAAAxhG,EAAAuH,QACAvH,EAAAuH,SAEAvH,EAAA0C,SAGA1C,EAAA6F,OAAA,QAAA,SAAAvE,GACA,IAAAg+B,EAAAvjC,OAAA+tD,SAAA/tD,OAAAuF,EAAA08B,SAAAsB,KAAAvjC,OAAAuF,EAAAqP,aAEAo5C,EAAAzqB,EAAAhrB,OAAAgrB,EAAAhrB,OAAA,KAAA,GACA01C,EAAA1qB,EAAAxL,QAAAwL,EAAAxL,QAAA,KAAA,GACAm2B,EAAA3qB,EAAAvL,UAAAuL,EAAAvL,UAAA,KAAA,GACAm2B,EAAA5qB,EAAA6qB,SAAA7qB,EAAA6qB,SAAA,KAAA,GACAC,EAAA9qB,EAAA+qB,QAAA/qB,EAAA+qB,QAAA,KAAA,GAEArqD,EAAAsqD,aAAAF,EAAAF,EAAAH,EAAAC,EAAAC,IACA,GAEAjqD,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,2DAGA9B,EAAA6pD,gBACA7pD,EAAAiG,WAAA9H,KAAA,CACA9C,MAAA,qBACAyG,SAAA,iEAIA9B,EAAAiG,WAAA9H,KAAA,CACA9C,MAAA,mBACAyG,SAAA,+DAGA9B,EAAAsB,MAAA+qC,mBAAArsC,EAAA6pD,gBACA7pD,EAAAiG,WAAA9H,KAAA,CACA9C,MAAA,qBACAyG,SAAA,iEAKA9B,EAAAiG,WAAAlE,UAAA,EAEA/B,EAAA6F,OAAA,uBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,EAAAC,SAAAA,MAGA/F,EAAAqpD,qBAAA,CACAvkD,KAAA,WACAvE,QAAA,CACA,CAAAC,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UACA,CACAF,UAAA,mBACAC,QAAAzF,EAAAM,QAAA,6BACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAAk+C,mBAEAtmD,MAAA,SAEA,CACAH,UAAA,iBACAC,QAAAzF,EAAAM,QAAA,2BACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,iBAAAA,CAAAW,EAAA6+C,iBAEAjnD,MAAA,SAEA,CAAAH,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAC,MAAA,QACA,CACAH,UAAA,YACAC,QAAAzF,EAAAM,QAAA,sBACAoF,SAAA,OACAjE,OAAA,qBACAkE,MAAA,QACAukB,SAAAllB,EAAA6pD,gBAEA,CAAArpD,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,SAAAC,MAAA,OAAAukB,SAAAllB,EAAA6pD,iBAEA5gC,oBAAA,SAAAjf,GACA,OAAA,IAAAA,EAAA49C,iBAIA5nD,EAAA2B,YAAA,SAAAvD,GACAwJ,EAAAhG,OAAAxD,EAAA,KAAA,WACA4B,EAAAwhG,mBAAA,EACA/qF,OAMAzW,EAAA4hG,sBAAA,CACA98F,KAAA,YACAvE,QAAA,CACA,CAAAC,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,UACA,CAAAF,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAC,MAAA,SACA,CACAH,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAAo5C,QAEAxhD,MAAA,SAEA,CAAAH,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAjE,OAAA,qBAAAkE,MAAA,QAAAC,UAAA,YC7MAjG,MAAAkF,WAAA,eAAA,CAAA,SAAA,SAAA,UAAA,aAAA,KACA,eAAA,cAAA,mBAAA,cACA,gBAAA,oBAAA,cACA,SAAAG,EAAAC,EAAAmI,EAAApN,EAAAkN,EACA+I,EAAAhO,EAAAf,EAAAiB,EACAkI,EAAA1E,EAAA4mC,GAEA,IAAAs0D,EAAA9lG,SAAA6U,QAAA,WAAA1U,SACA4lG,EAAA/lG,OAAA8lG,GAAAnoF,IAAA,EAAA,OAAA9I,QAAA,OAAA1U,SAEAsxC,EAAA,GA8BA,SAAAu0D,EAAA99F,EAAA0M,EAAAqtB,GACA1hC,KAAAqC,UAAAqjG,YAAArxF,IAAArU,KAAAqC,UAAAqjG,YAAAhkE,KAIA6jE,EAAAlxF,EACAmxF,EAAA9jE,EAEAh+B,EAAA6H,QAAA,EAEAlB,EAAAs7F,0BACAh+F,EACA,KACA,KACA0M,EACAqtB,GACA58B,SAAAC,KAAA,SAAAjD,GACA2W,EAAAtV,OAAA,EACAsV,EAAA5W,KAAAsf,MAAA1I,EAAA3W,GACA4B,EAAA6H,QAAA,GACA,WACA7H,EAAA6H,QAAA,KAlDA0lC,EAAArmC,cAAA9F,SAAAC,KAAA,SAAAR,GACA2sC,EAAA3sC,IAGAoC,EAAAc,kBACA1C,KAAA,SAAA2C,GACAhE,EAAAiE,WAAAD,EAAAlB,GACAi/F,EAAA/hG,EAAAiE,WAAA49F,EAAAC,KAGA9hG,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAiE,YACA89F,EAAA/hG,EAAAiE,WAAA49F,EAAAC,KAIA9hG,EAAA6E,iBAAA,SAAAZ,GACAA,IACAjE,EAAAiE,WAAAA,EACA89F,EAAA/hG,EAAAiE,WAAA49F,EAAAC,KAIA9hG,EAAAkiG,cAAA,SAAAvxF,EAAAqtB,GACA1hC,KAAAqC,UAAAqjG,YAAArxF,IAAArU,KAAAqC,UAAAqjG,YAAAhkE,IACA+jE,EAAA/hG,EAAAiE,WAAA0M,EAAAqtB,IA6BA,IAAA7gB,EAAAlM,EAAAw8B,kBAAA,MAAA,GAAA,GACA14B,EAAA,GAuIA,SAAA45C,EAAAzzD,GACA,IAAAA,EAAAutD,eACAp9C,EAAA6B,eAAA,CACA7R,MAAA,2BACA8R,QAAA,0BACAC,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WApDAuB,EAAA/E,OAqDA1G,EApDAinG,WACA,CACA16F,uBAAA,EACAC,qBAAA,GAEA,WACAq6F,EAAA/hG,EAAAiE,WAAA49F,EAAAC,UAoDAz2F,EAAA6B,eAAA,CACA7R,MAAA,sCACA8R,QAAAnS,EAAAM,QAAA,sCAAAs0B,EAAA10B,EAAA4J,MACAsI,QAAA,CAAA,CACAlI,KAAA,kBACA,CACAA,KAAA,iBACAE,SAAA,WAvCAuB,EAAAkoD,WAwCA3zD,EAvCAinG,WAAA99F,SAuCAnJ,EAvCAinG,WAAA91D,kBACAjrC,SAAAC,KAAA,SAAAytD,GACAnoD,EAAA/E,OACAktD,EACA,CACArnD,uBAAA,EACAC,qBAAA,GAEA,WACAq6F,EAAA/hG,EAAAiE,WAAA49F,EAAAC,SAgCA,CACA58F,KAAA,sBACAE,SAAA,WA1DAuB,EAAA/E,OA2DA1G,EA1DAinG,WACA,CACA16F,uBAAA,EACAC,qBAAA,GAEA,WACAq6F,EAAA/hG,EAAAiE,WAAA49F,EAAAC,UAgKA,IAAAz6F,EAAApH,EAAA,CACAL,YAAA,sCACA4B,OAvGAxB,EAAAoiG,kBAAA,CACAC,UAAA,EACAC,eAAA,EACAC,UAAA,EACA5hG,MAAA,OACA6hG,iBAAA,EACAC,gBAAA,EAEAC,UAAAxgG,EAAAE,SAAAugG,yBACAC,QAAA1gG,EAAAE,SAAAygG,uBACAC,MAAA5gG,EAAAE,SAAA2gG,kBACApyF,UAAAkxF,EACA1kF,UAAAA,EACA6lF,iBAAA,CAAAnsE,WAAA,MACA3yB,QAAA6Q,EACAkuF,eAAA,CACApsE,WAAA,cACA/xB,KAAA,UACAonC,QAAA,cACAhE,OAAA,kBAEAg7D,SAAA,CAAA,CACAh+F,KAAA,qBACAC,UAAA,SAAAjK,EAAAyV,EAAAqtB,GACA,OAAA9iC,GAAAiI,EAAAU,SAAA,0BAEAuB,SAAA,SAAAlK,EAAAyV,EAAAqtB,GAnMA,IAAArtB,EAAAqtB,EAAArtB,EAoMAA,EApMAqtB,EAoMAA,EAnMAuwB,EAAAntD,SAAAC,KAAA,WACAktD,EAAAvuD,OAAA6pD,gBAAA,EACA0E,EAAAvuD,OAAAsB,MAAAqF,EAAAw8F,gBACAxyF,EACAqtB,EACAh+B,EAAAoiG,kBAAAgB,mBACApjG,EAAAiE,YACAsqD,EAAAvuD,OAAAuH,OAAA,WACAw6F,EAAA/hG,EAAAiE,WAAA49F,EAAAC,IAEAvzC,EAAA/sD,WA2LA,CACA0D,KAAA,yBACAC,UAAA,SAAAjK,EAAAyV,EAAAqtB,GACA,OAAA9iC,GAAAiI,EAAAU,SAAA,0BAEAuB,SAAA,SAAAlK,EAAAyV,EAAAqtB,GA5LA,IAAArtB,EAAAqtB,EAAArtB,EA6LAA,EA7LAqtB,EA6LAA,EA5LAuwB,EAAAntD,SAAAC,KAAA,WACAktD,EAAAvuD,OAAA6pD,gBAAA,EACA0E,EAAAvuD,OAAAsB,MAAAqF,EAAAw8F,gBACAxyF,EACAqtB,EACAh+B,EAAAoiG,kBAAAgB,mBACApjG,EAAAiE,YACA,GACAsqD,EAAAvuD,OAAAuH,OAAA,WACAw6F,EAAA/hG,EAAAiE,WAAA49F,EAAAC,IAEAvzC,EAAA/sD,WAmLA,CACA0D,KAAA,oBACAC,UAAA,SAAAjK,EAAAyV,EAAAqtB,GACA,OAAA9iC,GAAAiI,EAAAU,SAAA,0BAEAuB,SAAA,SAAAlK,EAAAyV,EAAAqtB,GApLA,IAAArtB,EAAAqtB,EAAArtB,EAqLAA,EArLAqtB,EAqLAA,EApLA32B,EAAAjG,SAAAC,KAAA,WACAgG,EAAArH,OAAAsB,MAAAqF,EAAA08F,eACA1yF,EACAqtB,EACAh+B,EAAAoiG,kBAAAgB,mBACApjG,EAAAiE,YACAoD,EAAArH,OAAAsH,kBAAA,EACAD,EAAArH,OAAAuH,OAAA,WACAw6F,EAAA/hG,EAAAiE,WAAA49F,EAAAC,IAEAz6F,EAAA7F,WA4KA,CACA0D,KAAA,gBACAC,UAAA,SAAAjK,EAAAyV,EAAAqtB,GACA,IAAA9iC,EACA,OAAA,EAGA,GAAAiI,EAAAU,SAAA,yBACA,OAAA,EAGA,GAAAV,EAAAU,SAAA,4BAAA,CACAo4B,EAAA7/B,EAAAsK,KAAA8mC,EAAA,CAAA74B,WAAAzZ,EAAAinG,WAAAxtF,aACA,OAAA,MAAAsnB,GAAAA,EAAA0mB,SAAAx/C,EAAAuqD,eAAA/K,OAGA,OAAA,GAEAv9C,SAAA,SAAAlK,EAAAyV,EAAAqtB,GA1LA,IACAg+C,EAcAA,EA4KA,IAAA9gF,EAAA+N,MA5KA+yE,EAAAr1E,EAAA28F,UA6KApoG,EA7KAinG,WAAA91D,kBAEAnkC,EAAAiD,IAAA,CAAA6wE,EAAA56E,SAAAmtD,EAAAntD,WAAAC,KACA,WACAktD,EAAAvuD,OAAA6pD,gBAAA,EACA0E,EAAAvuD,OAAAsB,MAAA1G,QAAA2G,KAAAy6E,GACAztB,EAAAvuD,OAAAuH,OAAA,WACAw6F,EAAA/hG,EAAAiE,WAAA49F,EAAAC,IAEAvzC,EAAA/sD,WAvBAw6E,EAAAr1E,EAAA28F,UA6LApoG,EA7LAinG,WAAA91D,kBAEAnkC,EAAAiD,IAAA,CAAA6wE,EAAA56E,SAAAmtD,EAAAntD,WAAAC,KACA,WACAgG,EAAArH,OAAAsB,MAAA1G,QAAA2G,KAAAy6E,GACA30E,EAAArH,OAAAsH,kBAAA,EACAD,EAAArH,OAAAuH,OAAA,WACAw6F,EAAA/hG,EAAAiE,WAAA49F,EAAAC,IAEAz6F,EAAA7F,YAuLA,CACA0D,KAAA,4BACAC,UAAA,SAAAjK,EAAAyV,EAAAqtB,GACA,QAAA9iC,GAAA,IAAAA,EAAAutD,gBAAAtlD,EAAAU,SAAA,0BAEAuB,SAAA,SAAAlK,EAAAyV,EAAAqtB,GA1KA,IACA8wB,EAAAA,EAAAnoD,EAAAkoD,WA0KA3zD,EAzKAinG,WAAA99F,SAyKAnJ,EAzKAinG,WAAA91D,kBAEAnkC,EAAAiD,IAAA,CAAA2jD,EAAA1tD,SAAAmtD,EAAAntD,WAAAC,KACA,WACAktD,EAAAvuD,OAAA6pD,gBAAA,EACA0E,EAAAvuD,OAAAsB,MAAA1G,QAAA2G,KAAAutD,GACAP,EAAAvuD,OAAAuH,OAAA,WACAw6F,EAAA/hG,EAAAiE,WAAA49F,EAAAC,IAEAvzC,EAAA/sD,WAkKA,CACA0D,KAAA,kBACAC,UAAA,SAAAjK,EAAAyV,EAAAqtB,GACA,IAAA9iC,EACA,OAAA,EAGA,GAAAiI,EAAAU,SAAA,yBACA,OAAA,EAEA,GAAAV,EAAAU,SAAA,4BAAA,CACAo4B,EAAA7/B,EAAAsK,KAAA8mC,EAAA,CAAA74B,WAAAzZ,EAAAinG,WAAAxtF,aACA,OAAA,MAAAsnB,GAAAA,EAAA0mB,SAAAx/C,EAAAuqD,eAAA/K,OAGA,OAAA,GAEAv9C,SAAA,SAAAlK,EAAAyV,EAAAqtB,GACA2wB,EAAAzzD,QAQA8G,MAAAhC,EAAAiC,SAGAssD,EAAAtuD,EAAA,CACAL,YAAA,uCACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YC3VAtH,MAAAkF,WAAA,0BAAA,CAAA,SAAA,aAAA,UAAA,oBAAA,YAAA,gBACA,aAAA,gBAAA,wBACA,SAAAG,EAAAhF,EAAAoN,EAAAzB,EAAAzD,EAAAmI,EAAAtM,EAAA6I,EAAAxE,GACApD,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,cAAArC,EAAAsB,MAAA+qC,kBAIArsC,EAAAsB,MAAA+qC,iBACArsC,EAAA2pD,iBAAA/hD,EAAA05F,oBAAAthG,EAAAsB,MAAA+qC,kBAGArsC,EAAA2pD,iBAAAvmD,EAAAm+F,iCAAAvhG,EAAAsB,MAAA+C,UAQArE,EAAAyhG,eAAA,SAAAp9F,GACA,IAAAq9F,EAAAr9F,GAGAq9F,EADA,iBAAAr9F,GAAAA,aAAA7E,OACA6Q,SAAAhM,GAGAq9F,IACAx+F,EAAAs6E,eAAAx9E,EAAAsB,MAAA2C,WAAAy9F,GAAArgG,KAAA,SAAA4mC,GACAjoC,EAAAsB,MAAAqT,WAAAszB,EAAAtzB,WACA3U,EAAAsB,MAAA6mC,SAAAF,EAAAE,SAGAnoC,EAAA2pD,iBAAAvmD,EAAAm+F,iCAFAt5D,EAEA5jC,WACA,SAAAkR,GACAyU,MAAAzU,MAKAvV,EAAAwC,aAAA,SAAApE,GASA,SAAAqE,IACAzC,EAAA0C,QACA1C,EAAAuH,QACAvH,EAAAuH,SAIA,SAAA5E,EAAAvE,GACA4B,EAAA4C,YAAAxE,EACA4B,EAAA6C,UAAA,EAhBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,EAeAzE,EAAAiuC,iBAGAhhC,EAAAsB,8BAAA,CACAC,YAAA,CAAA,8BAAA,kCACAC,yBAAA,EACAzH,SAAA,SAAA0H,GACAnG,EAAA5D,OAAA3E,EAAA0O,EAAArK,EAAAE,MANAgE,EAAA3D,OAAA5E,EAAAqE,EAAAE,KAYA3C,EAAA6F,OAAA,QAAA,SAAAvE,GACA,IAAAg+B,EAAAvjC,OAAA+tD,SAAA/tD,OAAAuF,EAAA08B,SAAAsB,KAAAvjC,OAAAuF,EAAAqP,aAEAo5C,EAAAzqB,EAAAhrB,OAAAgrB,EAAAhrB,OAAA,KAAA,GACA01C,EAAA1qB,EAAAxL,QAAAwL,EAAAxL,QAAA,KAAA,GACAm2B,EAAA3qB,EAAAvL,UAAAuL,EAAAvL,UAAA,KAAA,GACAm2B,EAAA5qB,EAAA6qB,SAAA7qB,EAAA6qB,SAAA,KAAA,GACAC,EAAA9qB,EAAA+qB,QAAA/qB,EAAA+qB,QAAA,KAAA,GAEArqD,EAAAsqD,aAAAF,EAAAF,EAAAH,EAAAC,EAAAC,IACA,GAEAjqD,EAAAqpD,qBAAA,CACAvkD,KAAA,WACAvE,QAAA,CACA,CAAAC,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UACA,CACAF,UAAA,mBACAC,QAAAzF,EAAAM,QAAA,6BACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,mBAAAA,CAAAW,EAAAk+C,mBAEAtmD,MAAA,SAEA,CACAH,UAAA,iBACAC,QAAAzF,EAAAM,QAAA,2BACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,iBAAAA,CAAAW,EAAA6+C,iBAEAjnD,MAAA,SAEA,CAAAH,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAC,MAAA,UAIAX,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,yDACA,CACAzG,MAAA,mBACAyG,SAAA,8DAGA9B,EAAAiG,WAAAlE,UAAA,EAEA/B,EAAA6F,OAAA,uBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,EAAAC,SAAAA,SC5HApL,MAAAkF,WAAA,gBAAA,CAAA,SAAA,SAAA,aAAA,cACA,SAAAG,EAAAC,EAAAjF,EAAA8uC,GAEA9pC,EAAAujG,UAAAz5D,EAAA5iC,aAAA,GAEAlH,EAAAM,aAAA,CACAC,QAAA,CACA,CAAAC,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAE,UAAA,OACA,CAAAJ,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UAAAC,MAAA,SAEAuI,cAAA,SAAArI,GACA,QAAAA,EAAAsI,SACAtI,EAAAuI,UAAAC,iBAAAxI,EAAAyI,UACAk9C,SACA3lD,EAAA2I,WAAAC,SAAA,gBAMAzJ,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAujG,UAAAz5D,EAAA5iC,aAAA,KAGAlH,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAAwoC,EAAApoC,YACAP,EAAAK,UASA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,4CACA4B,OAPAxB,EAAA2B,YAAA,SAAAvD,GACA0rC,EAAAloC,OAAAxD,KAOA4D,MAAAhC,EAAAiC,YClDAtH,MAAAkF,WAAA,sBAAA,CAAA,SAAA,cACA,SAAAG,EAAA8pC,GAEA9pC,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAA6C,UAAA,EAEA7C,EAAAwC,aAAA,SAAAlB,GAUA,SAAAmB,EAAAnB,GACAtB,EAAA6C,UAAA,EACA7C,EAAA0C,QACA1C,EAAAiqC,aACAjqC,EAAAiqC,YAAA3oC,GAIA,SAAAqB,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EAlBA4B,EAAA6C,UAAA,EAEAvB,EAAA4oC,WAGAJ,EAAA/mC,OAAAzB,EAAAmB,EAAAE,GAFAmnC,EAAA9mC,OAAA1B,EAAAmB,EAAAE,OChBAhI,MAAAkF,WAAA,qCAAA,CAAA,SAAA,SAAA,oCAAA,gBACA,SAAAG,EAAAC,EAAAwwF,EAAAplF,GAEA,IAAAzE,GAAA,EACAC,GAAA,EACA28F,EAAAznG,SAAA6U,QAAA,WACAogF,EAAA,KAEAhxF,EAAAsB,MAAA,GACA,IAAAe,EAAA,GAKA,SAAAohG,EAAAC,EAAAC,EAAAC,GACA5jG,EAAAsC,oBAoBAmU,EAAAktF,EAAAC,GAnBAv4F,EAAA6B,eAAA,CACA7R,MAAA,mBACA8R,QAAA,kCACAC,QAAA,CAAA,CACAlI,KAAA,aACAE,SAAA,WACAqR,EAAAktF,EAAAC,KAEA,CACA1+F,KAAA,eACAE,SAAA,WACAy+F,EAAA7jG,EAAAsB,MAAAoiG,EAAA,WACAjtF,EAAAktF,EAAAC,UAWA,SAAAntF,EAAA6mE,EAAA1hF,GACA0hF,GAAA1hF,IACAoE,EAAA6H,QAAA,EACA4oF,EAAAqT,SAAAxmB,EAAAx6E,GAAAlH,GAAAyF,KACA,SAAAjD,GACA4B,EAAA6H,QAAA,EACAmpF,EAAA1T,EACAkmB,EAAAznG,OAAAH,GAAAgV,QAAA,WACA5Q,EAAAsB,MAAA7B,OAAA,EACAO,EAAAsB,MAAAnD,KAAAsf,MAAAzd,EAAAsB,MAAAlD,GACAiE,EAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAuF,GAAA,GACA,SAAAlE,GACA3C,EAAA6H,QAAA,EACAmpF,EAAA,KACAwS,EAAAznG,OAAAH,GAAAgV,QAAA,WACA5Q,EAAAsB,MAAA7B,OAAA,EAGAoH,IADAxE,EAAA,OAkCA,SAAAwhG,EAAAviG,EAAAg8E,EAAAl4E,GACApF,EAAAsC,qBAAAtC,EAAA6H,QAAA7H,EAAA6C,WAAAmuF,IAEAhxF,EAAA6C,UAAA,EAEA4tF,EAAAsT,SAAAzmB,EAAAx6E,GAAA0gG,EAAAliG,GAAAD,KACA,SAAAjD,GAEAiE,EAAAzH,QAAA2G,KAAAvB,EAAAsB,OACAtB,EAAA6C,UAAA,EACAuC,GACAA,KAGA,SAAAzC,GACA3C,EAAA6C,UAAA,EACAuC,GACAA,OAlGApF,EAAA6H,QAAA,EACA7H,EAAA6C,UAAA,EAoDA7C,EAAA/E,IAAA,4BAAA,SAAA4F,EAAAmjG,GACAA,EACAp9F,GACAoqF,GAAAgT,GACAP,EAAAzS,EAAAgT,EAAAR,GAKAxjG,EAAAsB,MAAA7B,OAAA,EAGAuxF,EAAAgT,IAGAhkG,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAAmqF,GACAv6E,EAAAu6E,EAAAwS,IAIA58F,GAAA,IA4BA5G,EAAAikG,iBAAA,CACA1gF,eAAA,SAAA5nB,GACAuoG,EAAAnoG,OAAAJ,EAAAA,OAAAiV,QAAA,WAEAszF,EAAA5lF,OAAAklF,IACAC,EAAAzS,EAAAA,EAAAkT,KAKAlkG,EAAAsC,kBAAA,WACA,OAAA1H,QAAA2H,OAAAvC,EAAAsB,MAAAe,IAGArC,EAAAmkG,YAAA,SAAA7iG,GACAuiG,EAAAviG,EAAA0vF,IAGAhxF,EAAAokG,cAAA,WACA3tF,EAAAu6E,EAAAwS,IAGAxjG,EAAAqkG,mBAAA,WACA,QAAArkG,EAAA6H,QAAA7H,EAAA6C,WAAAmuF,IAAAwS,IAkCA,IAAAc,EAAArkG,EAAA,CACAL,YAAA,4CACA4B,OAjCAxB,EAAAukG,iBAAA,SAAAjjG,GAEAtB,EAAA6C,UAAA,EACAyhG,EAAAljG,SAAAC,KAAA,WACAijG,EAAAtkG,OAAAsB,MAAA,CACAyY,KAAAhe,SAAA6U,QAAA,QAAA1U,SACA8d,GAAAje,SAAAqrB,MAAA,QAAAxW,QAAA,OAAA1U,UAEAooG,EAAAtkG,OAAAwkG,WAAA,WACAxkG,EAAA6C,UAAA,GAEAyhG,EAAAtkG,OAAAykG,QAAA,SAAAC,GACAjU,EAAAkU,0BACA3T,EAAAluF,GACA4hG,EAAA3qF,KACA2qF,EAAA1qF,GACA1Y,GAAAD,KACA,SAAAjD,GACAiE,EAAAzH,QAAA2G,KAAAvB,EAAAsB,OACAtB,EAAA6C,UAAA,GAEA,SAAAF,GACA3C,EAAA6C,UAAA,KAIAyhG,EAAA9iG,WAQAQ,MAAAhC,EAAAiC,YChLAtH,MAAAkF,WAAA,iBAAA,CAAA,SAAA,SAAA,aAAA,eAAA,mBACA,SAAAG,EAAAC,EAAAjF,EAAAiW,EAAA/O,GAOAlC,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAA4pF,WAAA34E,EAAAmP,uBAAA,GACAwkF,oBAAA,QAGA5kG,EAAA4pF,WAAA34E,EAAAmP,uBAAA,GAEApgB,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,+CAIA9B,EAAA0+E,yBAAAx8E,EAAAE,SAAAs8E,yBACA1+E,EAAA4+E,kBAAA18E,EAAAE,SAAAw8E,mBAEA5+E,EAAA0+E,0BAAA1+E,EAAA4+E,oBACA5+E,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,4BACAyG,SAAA,8DAIA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,EAAAC,SAAAA,MAGA/F,EAAAM,aAAA,CACAwE,KAAA,aACAvE,QAAA,CACA,CAAAC,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UAAAC,MAAA,QACA,CAAAH,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,QAAAC,UAAA,OACA,CAAAJ,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,UACA,CAAAF,UAAA,gBAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,UAAAC,MAAA,QACA,CAAAH,UAAA,qBAAAC,QAAAzF,EAAAM,QAAA,wBAAAoF,SAAA,UAAAC,MAAA,OAAAukB,QAAAllB,EAAA0+E,0BACA,CAAAl+E,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UAAAC,MAAA,OAAAukB,QAAAllB,EAAA4+E,mBACA,CACAp+E,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,UAAAC,MAAA,OACAmI,mBAAA,SAAAC,GACA,QAAAA,EAAA87F,cAMA7kG,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA2P,EAAAvP,YACAP,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACA6S,EAAArP,OAAAxD,IAQA,IAAA+C,EAAAlB,EAAA,CACAL,YAAA,4CACA4B,OAPAxB,EAAAiB,cAAA,SAAA7C,GAtEA4B,EAAAgxF,kBAuEA5yF,EAtEA4B,EAAA2D,WAAA,4BAAA3D,EAAAgxF,qBA6EAhvF,MAAAhC,EAAAiC,YClFAtH,MAAAkF,WAAA,uBAAA,CAAA,SAAA,eAAA,cAAA,mBAAA,aAAA,UACA,SAAAG,EAAAiR,EAAA6zF,EAAA5iG,EAAAlH,EAAAoN,GAUApI,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,qDACAmH,KAAA,QAEA,CACA5N,MAAA,kBACAyG,SAAA,wDACAmH,KAAA,YAIA/G,EAAAE,SAAAs8E,2BACA1+E,EAAAiG,WAAA9H,KAAA,CACA9C,MAAA,sBACAyG,SAAA,wDACAmH,KAAA,YAEAjJ,EAAAiG,WAAA9H,KAAA,CACA9C,MAAA,4BACAyG,SAAA,sEACAmH,KAAA,2BAIAjJ,EAAAiG,WAAAlE,UAAA,EAEA,IAAAgjG,GAAA,EAIAC,EAFAhlG,EAAAilG,iBAAA,KAGAjlG,EAAAklG,eAAA,CACA7hF,eAAA,CACAF,WAAA,oBAEAX,OAAA,IACAwC,QAAA,KACAhQ,UAAA,CACA66B,KAAA,WACAs1D,WAAA,GAEAr1D,QAAA,CACAC,cAAA,SAAAj4B,GACA,QAAAA,EAAA9N,KACA8N,EAAA9N,IAAAwP,YAIAq2B,KAAA,QAEAb,cAAA,EACAkB,qBAAA,EACAk1D,eAAA,EACA7kG,QAAA,CAAA,CACAE,QAAAzF,EAAAM,QAAA,gBACAkF,UAAA,OACAE,SAAA,SACAC,MAAA,QACAC,UAAA,MACAykG,cAAA,GACA,CACA5kG,QAAAzF,EAAAM,QAAA,uBACAkF,UAAA,cACAE,SAAA,SACA2kG,cAAA,GACA,CACA5kG,QAAAzF,EAAAM,QAAA,4CACAkF,UAAA,2CACAE,SAAA,SACAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GACAqgG,cAAA,EACA1kG,MAAA,QACAmI,mBAAA,SAAAjI,GACA,OAAAzE,EAAAkpG,MAAAzkG,EAAA0kG,0CACA1kG,EAAA2kG,iCAGA3kG,EAAA0kG,2CAEA,CACA9kG,QAAAzF,EAAAM,QAAA,+CACAkF,UAAA,6CACAE,SAAA,SACAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GACAqgG,cAAA,EACA1kG,MAAA,QACAmI,mBAAA,SAAAjI,GACA,OAAAzE,EAAAkpG,MAAAzkG,EAAA4kG,4CACA5kG,EAAA6kG,mCAGA7kG,EAAA4kG,6CAEA,CACAhlG,QAAAzF,EAAAM,QAAA,+CACAkF,UAAA,6CACAE,SAAA,SACAjE,OAAA,CAAAwM,KAAA,WAAAjE,UAAA,GACAqgG,cAAA,EACA1kG,MAAA,QACAmI,mBAAA,SAAAjI,GACA,OAAAzE,EAAAkpG,MAAAzkG,EAAA8kG,4CACA9kG,EAAA+kG,mCAGA/kG,EAAA8kG,8CAGAriF,eAAA,SAAAziB,GACAmkG,EAAAnkG,EAAAuI,UACAy8F,GACAb,EAAA1gG,WAAAuhG,GAAA,IAGAn8F,eAAA,SAAA7I,GACA,IAAAA,EAAA8I,aACA9I,EAAA+I,YAAAC,UAAA,WACAhJ,EAAA+I,YAAAG,KAAA,QACA/O,EAAAM,QAAA,iDACA,KACAN,EAAAM,QAAA,2BACA,IACA8M,EAAA,gBAAAA,CAAAlG,EAAAE,SAAAojG,qCAIA,IAAA3kG,EAAA8I,aACA9I,EAAA+I,YAAAC,UAAA,WACAhJ,EAAA+I,YAAAG,KAAA,QACA/O,EAAAM,QAAA,oDACA,KACAN,EAAAM,QAAA,2BACA,IACA8M,EAAA,gBAAAA,CAAAlG,EAAAE,SAAAsjG,uCAGA,IAAA7kG,EAAA8I,aACA9I,EAAA+I,YAAAC,UAAA,WACAhJ,EAAA+I,YAAAG,KAAA,QAAA/O,EAAAM,QAAA,oDACA,KACAN,EAAAM,QAAA,2BACA,IACA8M,EAAA,gBAAAA,CAAAlG,EAAAE,SAAAwjG,uCAIA,SAAA/kG,EAAAsI,SAAA,IAAAtI,EAAA8I,aACAvN,EAAAkpG,MAAAzkG,EAAAzC,KAAAmnG,4CAAAnpG,EAAAkpG,MAAAzkG,EAAAzC,KAAAonG,mCACA3kG,EAAA+I,YAAAH,SAAA,cAGA,SAAA5I,EAAAsI,SAAA,IAAAtI,EAAA8I,aACAvN,EAAAkpG,MAAAzkG,EAAAzC,KAAAqnG,8CAAArpG,EAAAkpG,MAAAzkG,EAAAzC,KAAAsnG,qCACA7kG,EAAA+I,YAAAH,SAAA,cAGA,SAAA5I,EAAAsI,SAAA,IAAAtI,EAAA8I,aACAvN,EAAAkpG,MAAAzkG,EAAAzC,KAAAunG,8CAAAvpG,EAAAkpG,MAAAzkG,EAAAzC,KAAAwnG,qCACA/kG,EAAA+I,YAAAH,SAAA,eAIA2Q,mBAAA,SAAAvZ,GACA,IACAilG,EADA,IAAAjlG,EAAAklG,uBAAAtmG,QACAqmG,EAAA1pG,EAAAsK,KAAA7F,EAAAyvC,iBAAA,CAAAxtC,GAAAjC,EAAAklG,uBAAA,OACAD,EAAAE,UACAhB,EAAA1gG,WAAAwhG,EAAAE,UAAA,GAEA,IAAAnlG,EAAAolG,yBAAAxmG,QACArD,EAAAsK,KAAA7F,EAAAyvC,iBAAA,CAAA01D,SAAAnlG,EAAAolG,yBAAA,MAEAjB,EAAA1gG,WAAAzD,EAAAolG,yBAAA,IAAA,KAMA,IAAAJ,EAAA,GACAK,EAAA,GA2BA,SAAAC,IACA,OAAApB,IACAC,GACA5oG,EAAAgqG,QAAAP,EAAA5qF,OAAA+pF,EAAAvzF,qBAAAwJ,SACA7e,EAAAgqG,QAAAF,EAAAlmG,EAAAilG,kBAIA,SAAA3iG,EAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,WArBArC,EAAA6F,OAAA,uBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,IAEA,GAAAA,GAAAA,EAAA9F,EAAAiG,WAAAxG,SAGA,WAFAO,EAAAiG,WAAAH,GAEAmD,MAAA87F,GAjBA9zF,EAAAo1F,gBAAArmG,EAAAsB,MAAAwB,IAAAzB,KAAA,SAAAjD,GACA4B,EAAAilG,iBAAA7mG,EAAA+xF,QACA+V,EAAA9pG,EAAAkqG,UAAAloG,EAAA+xF,SACA0V,EAAAznG,EAAA4W,UACAgwF,GACAA,EAAA1gG,WAAAuhG,GAAA,GAEAd,GAAA,OA4BA/kG,EAAAsC,kBAAA,SAAAlE,GACA,OAAAkE,EAAAlE,IAAA+nG,KAGAnmG,EAAA6C,UAAA,EAEA7C,EAAAumG,sBAAA,SAAAjlG,GAQA,SAAAmB,IACAzC,EAAA6C,UAAA,EACA7C,EAAA0C,QAGA,SAAAC,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EAbA4B,EAAA6C,WAIA7C,EAAA6C,UAAA,EAYAP,EAAAtC,EAAAsB,OAgCA6kG,IASA1jG,IARAwO,EAAAu1F,gBACAxmG,EAAAsB,MAAAwB,GACA9C,EAAAilG,iBACAY,EACAb,EAAAvzF,qBACAhP,EACAE,GApCArB,EAAAwB,GAeAmO,EAAAlO,OAAAzB,EAAA,WACA6kG,IASA1jG,IARAwO,EAAAu1F,gBACAxmG,EAAAsB,MAAAwB,GACA9C,EAAAilG,iBACAY,EACAb,EAAAvzF,qBACAhP,EACAE,IAIAA,EAAA3C,EAAA2F,YA1BAsL,EAAAjO,OAAA1B,EAAA,SAAAlD,GACA+nG,IASA1jG,IARAwO,EAAAu1F,gBACApoG,EAAA0E,GACA9C,EAAAilG,iBACAY,EACAb,EAAAvzF,qBACAhP,EACAE,IAIAA,EAAA3C,EAAA2F,cA+BA3F,EAAAymG,WAAA,SAAA33E,GAEA,OADAg2E,EAAA4B,QAAA53E,OChTAn0B,MAAAkF,WAAA,yBAAA,CAAA,SAAA,SAAA,uBACA,SAAAG,EAAAC,EAAAsrC,GAEAvrC,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAyyD,mBAAAlnB,EAAArkC,cAEAlH,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,QAAAC,WAAA,CAAA,QACAC,WAAA,CAAA,CAAAC,MAAA,SAAAE,YAAA,iBAAAD,WAAA,YAAA1V,MAAA,QACA,CAAAyV,MAAA,OAAAE,YAAA,eAAA2E,KAAA,SAAAta,MAAA,SACA,CAAAyV,MAAA,cAAAE,YAAA,sBAAA2E,KAAA,UACA,CAAA7E,MAAA,YAAAE,YAAA,kBAAAD,WAAA,YAAA1V,MAAA,UAIAX,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAAiqC,EAAA7pC,YACAP,EAAAK,UAQA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,8DACA4B,OANAxB,EAAA2B,YAAA,SAAAvD,GACAmtC,EAAA3pC,OAAAxD,KAMA4D,MAAAhC,EAAAiC,SAGAjC,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAyyD,mBAAAlnB,EAAArkC,mBC3CAvM,MAAAkF,WAAA,+BAAA,CAAA,SAAA,uBACA,SAAAG,EAAAurC,GAEAvrC,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAA6C,UAAA,EAEA7C,EAAAwC,aAAA,SAAAlB,GAEA,SAAAmB,IACAzC,EAAA6C,UAAA,EACA7C,EAAA0C,QAGA,SAAAC,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EAGA4B,EAAA6C,UAAA,EAEAvB,EAAAgqD,oBAGA/f,EAAAxoC,OAAAzB,EAAAmB,EAAAE,GAFA4oC,EAAAvoC,OAAA1B,EAAAmB,EAAAE,OC1BAhI,MAAAkF,WAAA,iCAAA,CAAA,SAAA,SAAA,0BACA,SAAAG,EAAAC,EAAA0mG,GAEA3mG,EAAA87C,aAAA,EACA97C,EAAAsB,MAAAqlG,EAAAC,iBAAA5mG,EAAA6mG,kBAEAF,EAAAG,oBAAA9mG,EAAAsB,OACAD,KAAA,SAAAC,GACAtB,EAAA87C,aAAA,EACAx6C,EAAAuR,QACA7S,EAAAsB,MAAAylG,qBAAAC,sBAAA,QAIAhnG,EAAAinG,4BAAA,SAAAD,GACAL,EAAAG,oBAAA9mG,EAAAsB,MAAA0lG,GACA3lG,KAAA,SAAAC,GACAtB,EAAA87C,aAAA,KAIA97C,EAAAknG,4BAAA,SAAAC,GACAR,EAAAS,0BAAApnG,EAAAsB,MAAA6lG,IAGAnnG,EAAAqnG,iCAAA,SAAAC,GACAX,EAAAY,+BAAAvnG,EAAAsB,MAAAgmG,IAGAtnG,EAAAwnG,mCAAA,SAAAC,GACAd,EAAAe,iCAAA1nG,EAAAsB,MAAAmmG,IAGAznG,EAAA2nG,yCAAA,SAAAC,GACAjB,EAAAkB,uCAAA7nG,EAAAsB,MAAAsmG,IAGA5nG,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,gEAEA,CACAzG,MAAA,yCACAyG,SAAA,qEAIA9B,EAAAiG,WAAAlE,UAAA,EAEA/B,EAAA8nG,eAAA,WACA9nG,EAAAiG,WAAAlE,UAAA,GAGA/B,EAAA+nG,eAAA,WACA/nG,EAAAiG,WAAAlE,UAAA,GAGA/B,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,mBAAAC,WAAA,CAAA,QACAC,WAAA,CAAA,CAAAC,MAAA,kBAAAE,YAAA,kBAAA2E,KAAA,UACA,CAAA7E,MAAA,uBAAAE,YAAA,wBAAA2E,KAAA,SAAAta,MAAA,SACA,CAAAyV,MAAA,eAAAE,YAAA,GAAA3V,MAAA,OAAAua,MAAA,SACA,CAAA9E,MAAA,4BAAAE,YAAA,6BAAA2E,KAAA,SAAAta,MAAA,SACA,CAAAyV,MAAA,kBAAAE,YAAA,MAAA3V,MAAA,OAAAua,MAAA,SACA,CAAA9E,MAAA,uBAAAE,YAAA,MAAA3V,MAAA,OAAAua,MAAA,SACA,CAAA9E,MAAA,6BAAAE,YAAA,MAAA3V,MAAA,OAAAua,MAAA,UAEA1E,cAAA,aACA6E,uBAAA,GAGArb,EAAAgoG,iBAAA,CACAhyF,SAAA,CAAAC,OAAA,CAAA,mBAAAC,WAAA,CAAA,QACAC,WAAA,CAAA,CAAAC,MAAA,kBAAAE,YAAA,kBAAA2E,KAAA,SAAAta,MAAA,SACA,CAAAyV,MAAA,uBAAAE,YAAA,wBAAA2E,KAAA,SAAAta,MAAA,SACA,CAAAyV,MAAA,4BAAAE,YAAA,6BAAA2E,KAAA,SAAAta,MAAA,SACA,CAAAyV,MAAA,QAAAE,YAAA,UAEAC,iBAAA,GAGAvW,EAAA6C,UAAA,EAEA7C,EAAAioG,iCAAA,SAAA3mG,GAEAtB,EAAA6C,UAAA,EAEA7C,EAAA4C,YAAA,KAEA+jG,EAAA5jG,OAAAzB,EAEA,WACAtB,EAAA6C,UAAA,EACA7C,EAAA0C,SAGA,SAAAtE,GACA4B,EAAA6C,UAAA,EACAzE,EAAA6sB,QAAA7sB,EAAA6sB,OAAAxrB,OACAyoG,EAAA9mG,SAAAC,KAAA,WACA6mG,EAAAloG,OAAAirB,OAAA7sB,EAAA6sB,OACAi9E,EAAA1mG,SAGAxB,EAAA4C,YAAAxE,KAYA,IAAA+pG,EAAAloG,EAAA,CACAL,YAAA,sEACA4B,OATAxB,EAAAkB,UAAA,SAAA8I,GACAm+F,EAAA/mG,SAAAC,KAAA,WACA8mG,EAAAnoG,OAAAsB,MAAA0I,EACAm+F,EAAA3mG,WAOAQ,MAAAhC,EAAAiC,SAGAimG,EAAAjoG,EAAA,CACAL,YAAA,2DACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YClIAtH,MAAAkF,WAAA,+CAAA,CAAA,SACA,SAAAG,GAEAA,EAAAooG,UAAAxtG,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAsB,QAGAtB,EAAAqoG,qBAAA,SAAA/mG,GACA1G,QAAAkC,OAAAkD,EAAAsB,MAAAA,GACAtB,EAAAsB,MAAAgnG,YAAA,EACAtoG,EAAA0C,SAGA1C,EAAAuoG,0BAAA,SAAAC,GACArnF,EAAA/kB,EAAAsK,KAAA1G,EAAAooG,UAAAtwF,QAAA,CAAA0wF,gCAAAA,IAEAxoG,EAAAooG,UAAAK,0BAAAtnF,EAAAsnF,8BChBA9tG,MAAAkF,WAAA,kBAAA,CAAA,SAAA,SAAA,gBACA,SAAAG,EAAAC,EAAA+iD,GAEAhjD,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAyrD,YAAAzI,EAAA97C,aAAA,GAEAlH,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,QAAAC,WAAA,CAAA,QACAC,WAAA,CAAA,CAAAC,MAAA,OAAAE,YAAA,eAAA2E,KAAA,SAAAta,MAAA,SACA,CAAAyV,MAAA,cAAAE,YAAA,sBAAA2E,KAAA,YAIAjb,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA0hD,EAAAthD,YACAP,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACA4kD,EAAAphD,OAAAxD,IAOA,IAAA+C,EAAAlB,EAAA,CACAL,YAAA,gDACA4B,OANAxB,EAAAiB,cAAA,SAAA7C,GACA4B,EAAA0oG,mBAAAtqG,IAMA4D,MAAAhC,EAAAiC,YC3CAtH,MAAAkF,WAAA,wBAAA,CAAA,SAAA,gBACA,SAAAG,EAAAgjD,GAEAhjD,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAA6C,UAAA,EAEA7C,EAAAwC,aAAA,SAAAlB,GAUA,SAAAmB,IACAzC,EAAA6C,UAAA,EACA7C,EAAA0C,QAGA,SAAAC,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EAfA4B,EAAA6C,UAAA,EAEAvB,EAAA2hD,aAGAD,EAAAjgD,OAAAzB,EAAAmB,EAAAE,GAFAqgD,EAAAhgD,OAAA1B,EAAAmB,EAAAE,OCdAhI,MAAAkF,WAAA,uBAAA,CAAA,SAAA,SAAA,aAAA,qBACA,SAAAG,EAAAC,EAAAjF,EAAA8sD,GAUA,SAAAnyC,IACA3V,EAAA2oG,iBAAA7gD,EAAAnjC,QAAA,GATA3kB,EAAA2oG,iBAAA7gD,EAAAnjC,QAAA,GAEA3kB,EAAAM,aAAA,CACAC,QAAA,CACA,CAAAC,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAE,UAAA,SAQAZ,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAuX,MAGA3V,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAA4oG,WAAA,WACAjzF,KAEAxU,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAAwmD,EAAApmD,YACAP,EAAAnB,OAAA4oG,WAAA,WACAjzF,KAEAxU,EAAAK,UAWA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,0DACA4B,OATAxB,EAAA2B,YAAA,SAAAvD,GACA0pD,EAAAlmD,OAAAxD,EAAA0E,IAAA1B,SAAAC,KAAA,WACAsU,QAQA3T,MAAAhC,EAAAiC,YCnDAtH,MAAAkF,WAAA,6BAAA,CAAA,SAAA,qBACA,SAAAG,EAAA8nD,GAEA9nD,EAAAsB,MAAAgT,OACAtU,EAAAsB,MAAAgT,KAAA,IAGAtU,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OACAtB,EAAAmmE,aAAApqE,SAAAy8B,OAEAx4B,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAA6C,UAAA,EAEA7C,EAAA6oG,YAAA,SAAA76E,GACA7f,EAAAnO,EAAAsB,MAAAgT,KAAAvE,QAAAie,IACA,IAAA7f,GAAAnO,EAAAsB,MAAAgT,KAAAP,OAAA5F,EAAA,IAGAnO,EAAA8oG,SAAA,SAAA96E,GACAA,GAAAjyB,OAAAiyB,GAAA/xB,YACAG,EAAAsK,KAAA1G,EAAAsB,MAAAgT,KAAA,SAAAggB,GACA,OAAAv4B,OAAAu4B,GAAAhW,OAAA0P,OAIAhuB,EAAAsB,MAAAgT,KAAAnW,KAAA6vB,GAEAhuB,EAAAsB,MAAAgT,KAAA2G,KAAA,SAAAvL,EAAAq5F,GACA,OAAAhtG,OAAA2T,GAAA0b,SAAA29E,IACA,EAGAhtG,OAAA2T,GAAAk8D,QAAAm9B,GACA,EAGA,OAMA/oG,EAAAgpG,iBAAA,SAAAxwE,GACAsvB,EAAAmhD,eAAA,MAAAzwE,GACAp3B,SAAAC,KAAA,SAAAjD,GACAhC,EAAAkJ,QAAAlH,EAAAkW,KAAA,SAAA4Z,GACAluB,EAAA8oG,SAAA56E,QAKAluB,EAAAwC,aAAA,SAAAlB,GAEAtB,EAAA6C,UAAA,GAGAvB,EAAAwB,GAGAglD,EAAA/kD,OAAAzB,GAFAwmD,EAAA9kD,OAAA1B,IAEAF,SAgBAC,KAbA,SAAAjD,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4oG,YACA5oG,EAAA4oG,WAAAxqG,GAEA4B,EAAA0C,SAGA,SAAAtE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,QCzEAzD,MAAAkF,WAAA,WAAA,CAAA,SAAA,SAAA,aAAA,UACA,SAAAG,EAAAC,EAAAjF,EAAAkuG,GAEAlpG,EAAAmpG,KAAAD,EAAAvkF,QAAA,GAEA3kB,EAAAM,aAAA,CACAC,QAAA,CACA,CAAAC,UAAA,KAAAC,QAAAzF,EAAAM,QAAA,cAAAoF,SAAA,SAAAwkB,SAAA,GACA,CAAA1kB,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,qBAAAoF,SAAA,UACA,CAAAF,UAAA,iBAAAC,QAAAzF,EAAAM,QAAA,wBAAAoF,SAAA,OAAAjE,OAAA,CAAAwM,KAAA,sBAAAtI,MAAA,QAAAC,UAAA,QACA,CAAAJ,UAAA,qBAAAC,QAAAzF,EAAAM,QAAA,8BAAAoF,SAAA,UAAAC,MAAA,UAIAX,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAmpG,KAAAD,EAAAvkF,QAAA,KAGA3kB,EAAAkB,UAAA,SAAA9C,GACA8qG,EAAA3nF,QAAAnjB,EAAA0E,IAAA1B,SAAAC,KAAA,SAAAC,GACAH,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAD,GACAH,EAAAnB,OAAAwC,aAAA,WACAxC,EAAAmpG,KAAAD,EAAAvkF,QAAA,IAEAxjB,EAAAK,YAKAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA4nG,EAAAxnG,YACAP,EAAAnB,OAAAwC,aAAA,WACAxC,EAAAmpG,KAAAD,EAAAvkF,QAAA,IAEAxjB,EAAAK,UAWA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,gCACA4B,OATAxB,EAAA2B,YAAA,SAAAvD,GACA8qG,EAAAtnG,OAAAxD,EAAA0E,IAAA1B,SAAAC,KAAA,WACArB,EAAAmpG,KAAAD,EAAAvkF,QAAA,OAQA3iB,MAAAhC,EAAAiC,YCrDAtH,MAAAkF,WAAA,iBAAA,CAAA,SAAA,SAAA,UACA,SAAAG,EAAAC,EAAAipG,GACAlpG,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,0CAEA,CACAzG,MAAA,eACAyG,SAAA,0CAEA,CACAzG,MAAA,mBACAyG,SAAA,+CAIA9B,EAAAopG,4BAAA,CACAngG,KAAA,WACAtI,MAAA,QAGAX,EAAAiG,WAAAlE,UAAA,EAEA/B,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAA6C,UAAA,EAEA7C,EAAAqpG,iBAAA,SAAA/nG,GAUA,SAAAmB,IACAzC,EAAA6C,UAAA,EACA7C,EAAAwC,eACAxC,EAAA0C,QAGA,SAAAC,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EAhBA4B,EAAA6C,UAAA,GAEAvB,EAAAwB,GAGAomG,EAAAnmG,OAAAzB,GAFA4nG,EAAAlmG,OAAA1B,IAEAF,SAAAC,KAAAoB,EAAAE,IAeA3C,EAAAkG,wBAAA,SAAAC,GACA/J,EAAA46D,KAAAh3D,EAAAsB,MAAA21D,aAAA,GAAA9wD,IAqBA,IAAAG,EAAArG,EAAA,CACAL,YAAA,4CACA4B,OApBAxB,EAAAuG,kBAAA,WACAD,EAAAlF,SAAAC,KAAA,WACAiF,EAAAtG,OAAAwG,mBAAA,SAAAJ,GAEApG,EAAAsB,MAAA21D,cACAj3D,EAAAsB,MAAA21D,YAAA,IAGAr8D,QAAA0K,QAAAc,EAAA,SAAAK,GACArK,EAAAsK,KAAA1G,EAAAsB,MAAA21D,YAAAxwD,EAAAywD,WACAl3D,EAAAsB,MAAA21D,YAAA94D,KAAAsI,EAAAywD,aAIA5wD,EAAA9E,WAOAQ,MAAAhC,EAAAiC,YC/EAtH,MAAAkF,WAAA,qDAAA,CAAA,SACA,SAAAG,GAEAA,EAAAooG,UAAAxtG,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAsB,QAGAtB,EAAAspG,+BAAA,SAAAhoG,GACA1G,QAAAkC,OAAAkD,EAAAsB,MAAAA,GACAtB,EAAAsB,MAAAgnG,YAAA,EACAtoG,EAAA0C,YCZA/H,MAAAkF,WAAA,6BAAA,CAAA,SAAA,SAAA,aAAA,WAAA,UAAA,sBAAA,uBACA,SAAAG,EAAAC,EAAAjF,EAAAwT,EAAApG,EAAAmhG,EAAAh+D,GAEAvrC,EAAAugB,WAAA,EAEAvgB,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,4DAEA,CACAzG,MAAA,mBACAyG,SAAA,6EAGA9B,EAAAiG,WAAAlE,UAAA,EAEA/B,EAAA6F,OAAA,uBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,EAAAC,SAAAA,MAGA/F,EAAAsB,MAAA,GACAiqC,EAAAsX,YAAAzhD,SAAAC,KAAA,WACArB,EAAAsB,MAAAioG,EAAAC,gBAAAxpG,EAAAiE,YACAjE,EAAAsB,MAAAF,SAAAC,KAAA,WACArB,EAAAugB,WAAA,MAIAvgB,EAAAypG,aAAA,SAAAnoG,GACA,QAAAA,EAAAooG,sBAAApoG,EAAAooG,mBAAAjqG,QAGAO,EAAA2pG,uBAAA,SAAAroG,GACAA,EAAAooG,oBAAA,IAAApoG,EAAAooG,mBAAAjqG,OAGA8pG,EAAAK,sBAAAtoG,GAAAF,SAAAC,KAAA,SAAAjD,GACAkD,EAAAlD,KAAAqB,OAAA,EACA6B,EAAAlD,KAAAD,KAAAsf,MAAAnc,EAAAlD,KAAAA,EAAAA,QAJAkD,EAAAlD,KAAAqB,OAAA,GASAO,EAAA6C,UAAA,EAEA7C,EAAAmvD,gCAAA,CACA5uD,QAAA,CACA,CAAAC,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,QAAAC,UAAA,OACA,CACAJ,UAAA,cACAC,QAAAzF,EAAAM,QAAA,qBACAoF,SAAA,OACAjE,OAAA,CAAAsI,IAAA,aACA6D,mBAAA,SAAAG,GACA,IAAA6iD,EAAA7vD,OAAAgN,EAAAR,aACA,OAAAqjD,EAAA3vD,UACA,IAAA2vD,EAAA19B,MAAA,IAAA09B,EAAAp3B,OAAAo3B,EAAAn3B,SACA1rB,EAAAR,aAEA5H,MAAA,QAEA,CAAAH,UAAA,iBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UACA,CACAF,UAAA,yCACAC,QAAAzF,EAAAM,QAAA,mCACAoF,SAAA,UACAoI,mBAAA,SAAAC,GACA,QAAAA,EAAA8gG,wCAAA,GAAA9gG,EAAA8gG,uCAAApqG,QAEAkB,MAAA,QAEA,CACAH,UAAA,wBACAC,QAAAzF,EAAAM,QAAA,gCACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,qBAAAA,CAAAW,EAAA+gG,wBAEAnpG,MAAA,UAGA+I,eAAA,SAAA7I,GACA,SAAAA,EAAAsI,SAAA,GAAAtI,EAAA8I,aACA9I,EAAA+I,YAAAC,UAAA,WACAhJ,EAAAzC,KAAAyrG,wCACAhpG,EAAA+I,YAAAG,KAAA,QAAAlJ,EAAAzC,KAAAyrG,uCAAAn6E,KAAA,WAOA1vB,EAAA+pG,4BAAA,SAAAz1E,GACA01E,EAAA5oG,SAAAC,KAAA,WACA2oG,EAAAhqG,OAAAsB,MAAAgzB,EACA01E,EAAAxoG,UAiCA,IAAAwoG,EAAA/pG,EAAA,CACAL,YAAA,sEACA4B,OA/BAxB,EAAAiqG,uBAAA,SAAA3oG,GAcA,SAAAmB,IACAzC,EAAA6C,UAAA,EAEA7C,EAAAkqG,qCACAlqG,EAAAkqG,oCAAA5oG,GAEAtB,EAAA0C,QAGA,SAAAC,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EAxBA4B,EAAA6C,WAIA7C,EAAA6C,UAAA,EACA7C,EAAA4C,YAAA,KAEAtB,EAAA6oG,mBACAZ,EAAAxmG,OAAAzB,EAAAmB,EAAAE,GAEA4mG,EAAAvmG,OAAA1B,EAAAmB,EAAAE,MAqBAX,MAAAhC,EAAAiC,YClIAtH,MAAAkF,WAAA,gBAAA,CAAA,SAAA,SAAA,aAAA,UAAA,cAAA,cAAA,mBACA,SAAAG,EAAAC,EAAAjF,EAAAoN,EAAAnF,EAAAE,EAAAjB,GA4BA,SAAA6hB,IACA/jB,EAAAoqG,aAAAhpG,UAIApB,EAAAoqG,aAAAhpG,SAAAC,KAAA,WACArB,EAAAokB,aAAAimF,cACArqG,EAAA27C,UAAAl8C,OAAA,EACAO,EAAA27C,UAAAx9C,KAAAsf,MAAAzd,EAAA27C,UAAA37C,EAAAoqG,gBAEApqG,EAAA27C,UAAAl8C,OAAA,EACAO,EAAA27C,UAAAx9C,KAAAsf,MAAAzd,EAAA27C,UACAv/C,EAAAkoB,OAAAtkB,EAAAoqG,aAAA,CAAA3jF,QAAA,QAkEA,SAAArV,IACApR,EAAAoqG,aAAAnnG,EAAAiE,aAAA,GACA6c,IA1GA/jB,EAAAsqG,4BAAApoG,EAAAE,SAAAmoG,wBACAroG,EAAAE,SAAAooG,gCAAAtoG,EAAAE,SAAAqoG,+BAoBAzqG,EAAAoqG,aAAA,GACApqG,EAAA27C,UAAA14C,EAAAiE,cAEAlH,EAAAokB,aAAA,CAAAimF,cAAA,GAmBArqG,EAAA6F,OAAA,4BAAA,SAAAC,EAAAC,GACAge,MACA,GAIA/jB,EAAAM,aAAA,CACAC,QAAA,CACA,CAAAC,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,YAAAoF,SAAA,UAAAC,MAAA,QACA,CAAAH,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,QAAAC,UAAA,OACA,CAAAJ,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAC,MAAA,QACA,CAAAH,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,OAAAC,MAAA,QACA,CAAAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,SAAAE,UAAA,OACA,CAAAJ,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,8BAAAoF,SAAA,UAAAC,MAAA,QACA,CAAAH,UAAA,sBAAAC,QAAAzF,EAAAM,QAAA,iCAAAoF,SAAA,UAAAC,MAAA,QACA,CACAH,UAAA,4BACAC,QAAAzF,EAAAM,QAAA,8BACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAA,EAAA2hG,0BACAtiG,EAAA,OAAAA,CAAAW,EAAA2hG,0BAAA,aAAA,MAAAtiG,EAAA,OAAAA,CAAAW,EAAA4hG,wBAAA,aACA,IAEAhqG,MAAA,QACAukB,QAAAllB,EAAAsqG,4BAGA5gG,eAAA,SAAA7I,GACA,SAAAA,EAAAsI,SAAA,GAAAtI,EAAA8I,cACA9I,EAAAzC,KAAAssG,4BAAA7pG,EAAAzC,KAAAwsG,0BACA/pG,EAAA+I,YAAAohC,IAAA,kBAAA,gBAEAnqC,EAAAzC,KAAAysG,mCACAhqG,EAAA+I,YAAAH,SAAA,kBAIAP,cAAA,SAAArI,GACA,QAAAA,EAAAsI,UAEA,IADAtI,EAAAuI,UAAAC,iBAAAxI,EAAAyI,UACAmd,QACA5lB,EAAA2I,WAAAC,SAAA,eAIAxE,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,mCACA6J,UAAA,SAAA6E,GACA,OAAA7G,EAAAU,SAAA,kCAEAuB,SAAA,SAAA4E,GA1FA,IAAAA,EAAAA,EA0FAA,EAzFA8gG,EAAA1pG,SAAAC,KAAA,WACAypG,EAAA9qG,OAAA6mG,iBAAA78F,EAAAlH,GACAgoG,EAAAtpG,WAwFA,CACA0D,KAAAlK,EAAAM,QAAA,8BACA6J,UAAA,SAAA6E,GACA,OAAAhK,EAAAsqG,2BAAAnnG,EAAAU,SAAA,8BAEAuB,SAAA,SAAA4E,GAzFA,IAAAA,EAAAA,EAyFAA,EAxFA+gG,EAAA3pG,SAAAC,KAAA,WACA0pG,EAAA/qG,OAAAiE,WAAA+F,EAAAlH,GACAioG,EAAA/qG,OAAAkqG,oCAAA,SAAA5oG,GACAtB,EAAA27C,UAAA14C,EAAAiE,aAAA,IAEA6jG,EAAAvpG,aA4FAxB,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,MAGAA,IAGApR,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAAykG,QAAA,WACA1gF,KAEA5iB,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA2B,EAAAkR,WACAhT,EAAAnB,OAAAykG,QAAA,WACA1gF,KAEA5iB,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACA6E,EAAArB,OAAAxD,GAAAgD,SAAAC,KAAA,WACA0iB,OAkBA,IAAA5iB,EAAAlB,EAAA,CACAL,YAAA,0CACA4B,OAhBAxB,EAAAiB,cAAA,SAAA7C,GACA4B,EAAAgrG,iBAAA5sG,IAgBA4D,MAAAhC,EAAAiC,SAGA6oG,EAAA7qG,EAAA,CACAL,YAAA,sDACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,SAGA8oG,EAAA9qG,EAAA,CACAL,YAAA,kDACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YChLAtH,MAAAkF,WAAA,qBAAA,CAAA,SAAA,cACA,SAAAG,EAAAiD,GACAjD,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,oDAEA,CACAzG,MAAA,kBACAyG,SAAA,wDAIA9B,EAAAiG,WAAAlE,UAAA,EAEA/B,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAA6C,UAAA,EAEA7C,EAAAqoG,qBAAA,SAAA/mG,GAUA,SAAAmB,IACAzC,EAAA6C,UAAA,EACA7C,EAAA0C,QACA1C,EAAAykG,SACAzkG,EAAAykG,UAIA,SAAA9hG,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EAlBA4B,EAAA6C,UAAA,EAEAvB,EAAAwB,GAGAG,EAAAF,OAAAzB,EAAAmB,EAAAE,GAFAM,EAAAD,OAAA1B,EAAAmB,EAAAE,OC1BAhI,MAAAkF,WAAA,gBAAA,CAAA,SAAA,SAAA,aAAA,cACA,SAAAG,EAAAC,EAAAjF,EAAAmxE,GAEAnsE,EAAAqsE,UAAAF,EAAAjlE,aAAA,GAEAlH,EAAAM,aAAA,CACAC,QAAA,CACA,CAAAC,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAE,UAAA,OACA,CAAAJ,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,WAEAwI,cAAA,SAAArI,GACA,QAAAA,EAAAsI,SACAtI,EAAAuI,UAAAC,iBAAAxI,EAAAyI,UACAk9C,SACA3lD,EAAA2I,WAAAC,SAAA,gBAMAzJ,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAqsE,UAAAF,EAAAjlE,aAAA,KAGAlH,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA6qE,EAAAzqE,YACAP,EAAAK,UAQA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,0CACA4B,OANAxB,EAAA2B,YAAA,SAAAvD,GACA+tE,EAAAvqE,OAAAxD,KAMA4D,MAAAhC,EAAAiC,YC/CAtH,MAAAkF,WAAA,sBAAA,CAAA,SAAA,cACA,SAAAG,EAAAmsE,GAEAnsE,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAA6C,UAAA,EAEA7C,EAAAwC,aAAA,SAAAlB,GAUA,SAAAmB,IACAzC,EAAA6C,UAAA,EACA7C,EAAA0C,QAGA,SAAAC,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EAfA4B,EAAA6C,UAAA,EAEAvB,EAAAipE,WAGA4B,EAAAppE,OAAAzB,EAAAmB,EAAAE,GAFAwpE,EAAAnpE,OAAA1B,EAAAmB,EAAAE,OCdAhI,MAAA4T,UAAA,mBAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAA0e,GACA,GAAAA,EACA,OAAAnyB,EAAAM,QAAA6xB,EAAAjoB,MAGA,SAAAwJ,EAAAye,GACA,OAAAnyB,EAAAM,QAAA6xB,EAAAjoB,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,gCACA,CAAApC,GAAA,EAAAoC,KAAA,oCAIArF,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAkE,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGAlB,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QCnEAzU,MAAA4T,UAAA,yBAAA,CAAA,WAAA,aAAA,qBACA,SAAAC,EAAAxT,EAAAiwG,GACA,SAAAx8F,EAAAnN,GACA,GAAAA,EAEA,MAAA,oEAAAA,EAAA41D,SAAA,OAGA,SAAAxoD,EAAApN,GACA,MAAA,oEAAAA,EAAA41D,SAAA,OAGA,MAAA,CACAvoD,SAAA,IACAC,QAAA,UACAC,SAAA,EACA6e,SAAA,EACA5e,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAAC,EAAA+7F,EAAA/jG,cAEAsH,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,4CACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACA1M,GAAA,SAAAooG,GAAA,OAAAA,EAAA7kG,UACAjI,KAAA8Q,IAGAD,EAAAe,QAAA,WACAd,EAAA9N,SAAAC,KAAA,WACA8N,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,eAIAlB,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAsT,EAAAe,WAEA,QCnDArV,MAAA4T,UAAA,2BAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAAnN,GACA,GAAAA,EACA,OAAAA,EAAAmnG,0BAGA,SAAA/5F,EAAApN,GACA,OAAAA,EAAAmnG,0BAGA,MAAA,CACA95F,SAAA,IACAC,QAAA,UACA5M,MAAA,CACAomC,QAAA,KAEAt5B,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACA1M,GAAA,SAAAqe,GAAA,OAAAA,EAAAqnF,iCACApqG,KAAA4D,EAAAomC,UAGAvoC,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAkE,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGAlB,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QClEAzU,MAAA4T,UAAA,yBAAA,CAAA,WAAA,aAAA,qBACA,SAAAC,EAAAxT,EAAA8sD,GACA,SAAAr5C,EAAAnN,GACA,GAAAA,EAEA,OAAAA,EAAAwD,KAGA,SAAA4J,EAAApN,GACA,OAAAA,EAAAwD,KAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,UACAC,SAAA,EACA6e,SAAA,EACA5e,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAAC,EAAA44C,EAAAnjC,SAEAnW,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,2CACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,wBAAA,EACApR,KAAA8Q,IAGAD,EAAAe,QAAA,WACAd,EAAA9N,SAAAC,KAAA,WACA8N,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,eAIAlB,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAsT,EAAAe,WAEA,QClDArV,MAAA4T,UAAA,gCAAA,CACA,WAEA,MAAA,CACAI,SAAA,IACAE,SAAA,EACA7M,MAAA,CACAyrB,QAAA,KAEA3rB,SACA,0UAMAjC,WAAA,CAAA,SAAA,SAAA,cAAA,qBACA,SAAAG,EAAAC,EAAAkD,EAAA2kD,GAEA9nD,EAAA+pC,eAAA5mC,EAAAU,SAAA,0BAeA,IAAA1C,EAAAlB,EAAA,CACAL,YAAA,0DACA4B,OAfAxB,EAAAgqC,WAAA,WACA7oC,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAAwmD,EAAApmD,YAEAP,EAAAnB,OAAA4oG,WAAA,SAAAxqG,GACAA,IACA4B,EAAAytB,QAAArvB,EAAA0E,KAGA3B,EAAAK,WAOAQ,MAAAhC,EAAAiC,eCnCAtH,MAAA8gC,QAAA,0BAAA,CAAA,YAAA,KAAA,aAAA,kBAAA,gBACA,SAAAC,EAAAxzB,EAAAlN,EAAA6gC,EAAAD,GAEA,IAAAuvE,EAAAzvE,EAAA,gCAAA,GAAA,CACA4H,MAAA,CAAA7G,OAAA,MAAAhN,SAAA,GACA1sB,OAAA,CAAA05B,OAAA,OAAAC,IAAA,sCAIA,SAAAmB,EAAAgpE,EAAAG,GACA,OAAAprE,EAAA3tB,IAAAk9F,EAAA,CACAtE,iBAAAA,EACAG,sBAAAA,IAuBA,SAAAO,EAAAjmG,EAAAgmG,GACA,IAAAxhG,EAAA,EACA1J,EAAAkJ,QAAAhE,EAAAshB,MAAA,SAAAvL,GACA,IAAA/V,EAAAylG,qBAAAI,qBAEArhG,EAAAutB,KAAAkC,IAAA+xE,EAAAjwF,EAAA+zF,iBACA/zF,EAAAg0F,uBAAAvlG,IACAuR,EAAAg0F,qBAAAvlG,EACAuR,EAAAixF,YAAA,KAIAxiG,EAAAutB,KAAAkC,IAAA+xE,EAAAjwF,EAAA+zF,iBACA/zF,EAAAi0F,6BAAAxlG,IACAuR,EAAAi0F,2BAAAxlG,EACAuR,EAAAixF,YAAA,MA4CA,SAAAiD,EAAAjqG,GACAlF,EAAAkJ,QAAAhE,EAAAshB,MAAA,SAAAvL,GACAA,EAAA+zF,gBAAA/zF,EAAAm0F,gBACAlqG,EAAAylG,qBAAAU,6BACApwF,EAAA+zF,gBAAA/zF,EAAA+zF,gBAAA/zF,EAAAo0F,oBAEAnqG,EAAAylG,qBAAAa,mCACAvwF,EAAA+zF,gBAAA/zF,EAAA+zF,gBAAA/zF,EAAAq0F,4BAyBA,MAAA,CACA9E,iBA7DA,SAAAC,GACA,MAAA,CACAh0F,OAAA,EACAk0F,qBAAA,CACAF,iBAAAA,EACAG,sBAAA,KAyDAnpE,SAAAA,EACAupE,0BAjHA,SAAA9lG,EAAA6lG,GACA/qG,EAAAkJ,QAAAhE,EAAAshB,MAAA,SAAAvL,GACA,IAAA8vF,EAEA9vF,EAAAi0F,6BACAj0F,EAAAg0F,qBAAAh0F,EAAAg0F,qBAAAh0F,EAAAi0F,2BACAj0F,EAAAi0F,2BAAA,GAIAj0F,EAAAg0F,uBACAh0F,EAAAi0F,2BAAAj0F,EAAAg0F,qBAAAh0F,EAAAi0F,2BACAj0F,EAAAg0F,qBAAA,GAGAh0F,EAAAixF,YAAA,KAmGAf,+BAAAA,EACAT,oBAvDA,SAAAxlG,EAAA0lG,GACA,IAAA1qE,EAAAp0B,EAAAq0B,QAcA,OAZAsB,EAAAv8B,EAAAylG,qBAAAF,iBAAAG,GACA5lG,SAAAC,KAAA,SAAAjD,GACAkD,EAAAshB,MAAA,GACAhoB,QAAAkC,OAAAwE,EAAAlD,UACAkD,EAAAF,gBACAE,EAAAyuB,UAEAw7E,EAAAjqG,GAEAg7B,EAAAhrB,QAAAhQ,KAGAg7B,EAAAE,SAyCAz5B,OA1BA,SAAA3E,EAAAigC,EAAAC,GAYA,OAAA1C,EAAA74B,OACAooG,EACA,KACA/sG,EACAigC,EAdA,SAAAjgC,GACAA,EAAA6sB,QAAA7sB,EAAA6sB,OAAAxrB,QACAo8B,EAAAiB,YAAA9hC,EAAAM,QAAA,sCAGAgjC,GACAA,EAAAlgC,MAmBAspG,iCA7EA,SAAApmG,EAAAmmG,GACA8D,EAAAjqG,GACAimG,EAAAjmG,EAAAA,EAAAylG,qBAAAO,2BA4EAO,uCAzEA,SAAAvmG,EAAAsmG,GACA2D,EAAAjqG,GACAimG,EAAAjmG,EAAAA,EAAAylG,qBAAAO,+BC/DA3sG,MAAA8gC,QAAA,qBAAA,CAAA,YAAA,gBAAA,gBACA,SAAAC,EAAAw1C,EAAAt1C,GAEA,IAAA+vE,EAAAjwE,EAAA,iBAAA,GAAA,CACA/W,OAAA,CAAA8X,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,oBAGA40C,EAAAJ,EAAA,2BAkBA,MAAA,CACAhqE,YAjBA,SAAA3D,GAEA,IAAA2L,EAAAoiE,EAAArjE,IAAA,oBAWA,OATA1K,GAAA2L,IACAA,GACAoiE,EAAA1vE,OAAA,oBAGAsN,EAAA0sB,EAAAkC,UAAA,SAAA6tE,GACAr6B,EAAAC,IAAA,mBAAAriE,IAGAA,OCxBAvU,MAAA8gC,QAAA,qBAAA,CAAA,YAAA,KAAA,gBACA,SAAAC,EAAAxzB,EAAA0zB,GAEA,IASA+sE,EATAiD,EAAAlwE,EAAA,iCAAA,GAAA,CACAna,QAAA,CAAAkb,OAAA,MAAAC,IAAA,kCACAusE,eAAA,CAAAxsE,OAAA,MAAAC,IAAA,4EACA/X,OAAA,CAAA8X,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,8BACA15B,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,8BACA35B,OAAA,CAAA05B,OAAA,MAAAC,IAAA,kCACA0B,OAAA,CAAA3B,OAAA,SAAAC,IAAA,oCAsEA,MAAA,CACAh7B,UAlEA,WAKA,MAJA,CACAmR,OAAA,IAiEA0O,QAjBA,SAAA8mC,GACA,OAAAzsB,EAAAkC,UAAA,UAAA8tE,EAAA,CAAA9oG,GAAAulD,KAiBA4gD,eAdA,SAAA4C,EAAArzE,GACA,OAAAoD,EAAAkC,UAAA,iBAAA8tE,EAAA,CAAAC,YAAAA,EAAArzE,KAAAA,KAcA7T,OAXA,SAAAphB,GAIA,OAFAolG,GADAA,GAAAplG,EACAq4B,EAAAkC,UAAA,SAAA8tE,EAAA,IAEAjD,GAQA3lG,OA9DA,SAAA1B,GAUA,OATAuqB,EAAA+P,EAAA+D,WACA,SACAisE,EACAtqG,IAEAF,SAAAC,KAAA,SAAAw9B,GACAjD,EAAAkD,eAAA6pE,EAAA9pE,KAGAhT,GAqDAjqB,OAlDA,SAAAymD,GAEA,IAAAx8B,EAAA+P,EAAAiE,aACA,SACA+rE,EACA,CAAA9oG,GAAAulD,IAMA,OAJAx8B,EAAAzqB,SAAAC,KAAA,WACAu6B,EAAAoD,cAAA2pE,EAAAtgD,KAGAx8B,GAwCA9oB,OArCA,SAAAzB,GAEA,IAAAuqB,EAAA+P,EAAAkE,oBACA,SACA8rE,EACA,CAAA9oG,GAAAxB,EAAAwB,IACA3G,yBAAAmF,IAMA,OAJAuqB,EAAAzqB,SAAAC,KAAA,WACAu6B,EAAAmD,cAAA4pE,EAAArnG,KAGAuqB,OC3DAlxB,MAAA8gC,QAAA,UAAA,CAAA,YAAA,KAAA,gBACA,SAAAC,EAAAxzB,EAAA0zB,GAEA,MAAAkwE,EAAApwE,EAAA,oBAAA,GAAA,CACAna,QAAA,CAAAkb,OAAA,MAAAC,IAAA,qBACA/X,OAAA,CAAA8X,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,sBACA15B,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,iBACA35B,OAAA,CAAA05B,OAAA,MAAAC,IAAA,qBACA0B,OAAA,CAAA3B,OAAA,SAAAC,IAAA,uBAGA,IAAAysE,EAkDA,MAAA,CACAznG,UAjDA,WAEA,MAAA,CACAoB,GAAA,KACAzH,MAAA,KACA0wG,SAAA,KACAC,eAAA,IAAA1vG,KACA2vG,oBAAA,EACAC,KAAA,KACAj1C,YAAA,OAyCA11C,QAbA,SAAAze,GACA,OAAA84B,EAAAkC,UAAA,UAAAguE,EAAA,CAAAhpG,GAAAA,KAaA6hB,OAVA,SAAAphB,GAIA,OAHA4lG,IAAA5lG,IACA4lG,EAAAvtE,EAAAkC,UAAA,SAAAguE,EAAA,KAEA3C,GAOAnmG,OAvCA,SAAA1B,GACA,OAAAs6B,EAAA+D,WACA,SACAmsE,EACAxqG,IAoCAM,OAjCA,SAAAkB,GAEA,OADAqmG,EAAA,KACAvtE,EAAAiE,aACA,SACAisE,EACA,CAAAhpG,GAAAA,KA6BAC,OA1BA,SAAAzB,GAEA,OADA6nG,EAAA,KACAvtE,EAAAkE,oBACA,SACAgsE,EACA,CAAAhpG,GAAAxB,EAAAwB,IACA3G,yBAAAmF,SCjDA3G,MAAA8gC,QAAA,sBAAA,CAAA,YAAA,KAAA,aAAA,kBAAA,gBACA,SAAAC,EAAAxzB,EAAAlN,EAAA6gC,EAAAD,GAEA,IAAAuwE,EAAAzwE,EAAA,4BAAA,GAAA,CACA8tE,gBAAA,CAAA/sE,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,yCACAktE,sBAAA,CAAAntE,OAAA,OAAAhN,SAAA,EAAAiN,IAAA,+CACA35B,OAAA,CAAA05B,OAAA,OAAAC,IAAA,gCACA15B,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,kCA+CA,MAAA,CACAh7B,UA7CA,SAAAuC,GACA,MAAA,CACAkmG,mBAAA,EACAlmG,WAAAA,EACAylG,mBAAA,GACAtrG,KAAA,KAyCA4E,OArBA,SAAA5E,EAAAigC,EAAAC,GACA1C,EAAA54B,OACAmpG,EACA,KACA/tG,EACAigC,EACAC,IAgBAv7B,OAbA,SAAA3E,EAAAigC,EAAAC,GACA1C,EAAA74B,OACAopG,EACA,KACA/tG,EACAigC,EACAC,EACA,uBAOAkrE,gBAvCA,SAAAvlG,GACA,OAAA23B,EAAAkC,UACA,kBACAquE,EACA,CACAloG,WAAAA,KAmCA2lG,sBA/BA,SAAAtoG,GACA,OAAA6qG,EAAA,sBACA,CACA7qE,IAAAhgC,SC7BA3G,MAAAkF,WAAA,eAAA,CAAA,SAAA,SAAA,cAAA,sBAAA,gBACA,SAAAG,EAAAC,EAAAmsG,EAAA9gG,EAAAD,GAEAC,EAAAiF,KAAAvQ,EAAA,OAAA,SAAA,gCAEAA,EAAAqsG,YAAA,SAAAlmG,GACAnG,EAAA4b,SAAAzV,GAGAnG,EAAAoG,SAAAgmG,EAAAllG,cAeA,IAAA/F,EAAAlB,EAAA,CACAL,YAAA,wCACA4B,OAfAxB,EAAAssG,iBAAA,SAAAnmG,GACAkF,EAAA6B,eAAA,CACA7R,MAAA,2BACA8R,QAAAhH,EAAAomG,OAAA,wCAAA,iCACAn/F,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WAAAgnG,EAAAxqG,OAAAuE,UAQAnE,MAAAhC,IAGAA,EAAAwsG,mBAAA,WACArrG,EAAAC,SAAAC,KAAA,WACAF,EAAAK,aChCA7G,MAAAkF,WAAA,qBAAA,CAAA,SAAA,WAAA,aAAA,kBAAA,cACA,SAAAG,EAAAwO,EAAAxT,EAAA6gC,EAAAuwE,GAEApsG,EAAAysG,MAAA,GACAzsG,EAAA0sG,aAAA,igHAEA1sG,EAAA2sG,cAAA,EACA3sG,EAAA8mE,aAAA9mE,EAAA8mE,cAAA,IACA9mE,EAAA+mE,cAAA/mE,EAAA+mE,eAAA,IAEA/mE,EAAA4sG,eAAA,EAAA5sG,EAAA+mE,eAAA/mE,EAAA8mE,aAAA,IAEA9mE,EAAA6sG,iBAAA7sG,EAAA8mE,gBAAA9mE,EAAA+mE,gBACA/mE,EAAA8sG,kBAAA9sG,EAAA8mE,aAGA9mE,EAAA+sG,mBAAA,WACA/sG,EAAA2sG,cAAA,GAGA3sG,EAAAgtG,iBAAA,WACAhtG,EAAA2sG,cAAA,EACA9wE,EAAAiB,YACA9hC,EAAAM,QAAA,iCACAN,EAAAM,QAAA,sCAGA,SAAA2xG,EAAAC,GACA,IAAAC,EAAAD,EAAAE,cAAAz5F,MAAA,IACA05F,EAAA,IAAAC,YACAC,OAAA,SAAAL,GACAltG,EAAAqtB,OAAA,SAAArtB,GACAA,EAAAysG,MAAAS,EAAAniE,OAAAlf,UAGAwhF,EAAAG,cAAAL,GAGAntG,EAAAytG,cAAA,WAEA,SAAAhrG,EAAArE,GACA4B,EAAA0C,QACA1C,EAAAknE,aACAlnE,EAAAknE,YAAA9oE,EAAA84D,UAIA,SAAAv0D,IACA3C,EAAA6C,UAAA,EAGA,IAWA6qG,GAXA1tG,EAAA6C,UAAA7C,EAAA2sG,eAIA3sG,EAAA6C,UAAA,EAGA7C,EAAAgnE,eACA5oE,EAAAguG,EAAAuB,iBAAA3tG,EAAA0sG,aAAAjqG,EAAAE,GACA3C,EAAAgnE,cAAA5oE,EAAAqE,EAAAE,KAEA+qG,EAAAtB,EAAAwB,wBAAA5tG,EAAAysG,OACAL,EAAAppG,OAAAhD,EAAA0sG,aAAAgB,EAAAjrG,EAAAE,MAIA6L,EAAA,WACA5T,QAAAisC,QAAAqX,SAAA2vD,cAAA,eAAAzgF,GAAA,SAAA6/E,IACA,QCvEAtyG,MAAAkF,WAAA,wBAAA,CAAA,SAAA,WAAA,SAAA,aAAA,cACA,SAAAG,EAAAwO,EAAAvO,EAAAjF,EAAAoxG,GAEApsG,EAAAoG,SAAAgmG,EAAAllG,aAAA,GAEAlH,EAAA8tG,eAAA,SAAA3nG,GACAA,EAAAqT,YAAArT,EAAAqT,YAGAxZ,EAAAsC,kBAAA,SAAA8D,GACA,OAAAhK,EAAAwlE,KAAAx7D,EAAA,CAAAoT,YAAA,KAGAxZ,EAAA+tG,cAAA,SAAA3nG,GAEApG,EAAAwG,oBACAxG,EAAAwG,mBAAApK,EAAAkoB,OAAAle,EAAA,CAAAoT,YAAA,KAGAxZ,EAAA0C,SAmBA,IAAAvB,EAAAlB,EAAA,CACAL,YAAA,wCACA4B,OAlBAxB,EAAAguG,cAAA,WACA7sG,EAAAC,SAAAC,KAAA,WACAF,EAAAK,OACAL,EAAAnB,OAAAknE,YAAA,SAAAhQ,GAEAl3D,EAAAoG,SAAAgmG,EAAAllG,aAAA,GAEAlH,EAAAoG,SAAAhF,SAAAC,KAAA,WACAjF,EAAAkJ,QAAAlJ,EAAAkoB,OAAAtkB,EAAAoG,SAAA,CAAA8wD,SAAAA,IAAA,SAAAzwD,GACAA,EAAA+S,YAAA,WAUAxX,MAAAhC,OCvCArF,MAAAkF,WAAA,uBAAA,CAAA,SAAA,SAAA,KAAA,QAAA,aAAA,gBAAA,sBACA,SAAAG,EAAAC,EAAAiI,EAAAyzB,EAAA3gC,EAAAqQ,EAAA8F,GAEAnR,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA6vG,GACAA,EAAA1qG,YAcA,IA0DA0qG,EAxDAC,EAAA,CACA,SACA,CACAppG,KAAA,cACAI,KAAAlK,EAAAM,QAAA,4BACAq4C,KAAA,UACAztB,YAAA,GAEA,CACAphB,KAAA,eACAI,KAAAlK,EAAAM,QAAA,6BACAq4C,KAAA,MACAztB,YAAA,GAEA,CACAphB,KAAA,mBACAI,KAAAlK,EAAAM,QAAA,2BACAq4C,KAAA,QAEA,UACA,YAqCA3zC,EAAA21E,mBAAA,CACAC,mBAAA,IAAAvjC,WAAAwjC,eAAAC,yBAAA,CACAC,SAAA,SAAAC,GACA,OAAA7kE,EAAAg9F,aAAAn4B,EAAApS,MAAAxiE,UAEAg1E,cAAA,SAAAxzD,GACAzR,EAAAma,eAAA1I,EAAA,GAAAghD,MAAAxiE,SAAAC,KAAA,SAAA+sG,GA3EA,IAAAtpG,EAAAupG,EAAAvpG,EA4EA8d,EAAA,GAAA9d,KA5EAupG,EA4EAD,EAAA1xE,KA3EA5tB,EAAAovC,SAAAowD,cAAA,MACAvjE,OAAA,SACAj8B,EAAAy/F,aAAA,WAAAzpG,GACAgK,EAAAs2D,KAAAipC,EACAnwD,SAAAguD,KAAAsC,YAAA1/F,GACAA,EAAAR,QACA4vC,SAAAguD,KAAAuC,YAAA3/F,MAwEA4/F,gBAAA,SAAAC,EAAA7pG,GACA,OAAAqM,EAAAu9F,gBAAAC,EAAA/qC,KAAA+qC,EAAA/qC,KAAA,IAAA9+D,EAAAA,GAAA1D,UAEAi1E,WAAA,SAAAh/D,GACA,OAAAA,EAAAu3F,YAEAz9F,EAAA09F,gBAAAx3F,EAAAusD,MAIAzyD,EAAAmlE,WAAAj/D,EAAAusD,OAJAxiE,UAOAm1E,gBAAA,SAAAC,EAAAC,EAAAC,GAEA,IAAAC,EAAAH,EAAAl3E,KACAktD,EAAAgqB,EAAAvtE,KAGA2tE,GAFAH,EAAAI,WAEA3uE,EAAA,SAAAoJ,EAAAC,GACA,IACAulE,EADA,IAAAL,EAAAM,YACAD,EAAAJ,EAAA9S,KAAA8S,EAAA9S,KAAA,IAAA4S,EAAA1xE,KAAA0xE,EAAA1xE,KACAqM,EAAA6lE,aAAAF,EAAAtqB,GAAAprD,SAAAC,KAAA,SAAAwyE,GACA4C,EAAAQ,WAAAC,UAAArD,EAAAn3C,IACAprB,OAIAA,OAIA,OAAApJ,EAAA,SAAAoJ,EAAAC,GACAqlE,EAAAv1E,KAAA,WAEAo1E,EAAAU,UAAA73E,KAAA,IACA83E,EAAAX,EAAAY,cACAC,EAAAb,EAAAY,cAAAZ,EAAAU,UAAA73E,KAAA,EAGA6P,EAAAizC,KAAA,CACA1lB,IAAA+5C,EAAAQ,WAAAC,UACAjuE,KAAA,MACAujD,YAAAA,EACA+qB,cAAAd,EAAAU,UAAA73E,KACAs9B,QAAA,CACA46C,gBAAA,SAAAJ,EAAA,IAAAE,EAAA,IAAAX,GAEAv4E,KAAAq4E,EAAAU,UACAM,aAAA,EACAC,aAAA,EACAj1E,QAAA,SAAAga,GACAnL,KAEA3O,MAAA,SAAAke,GACA,KAAAA,EAAA8b,OACArrB,IAEAC,EAAAsP,WAOAiuF,YAAA,cACAj3B,iBAAA,iBAEAC,YAAA,CACAC,UAAA,EACAC,QAAA,EACA55C,QAAA,EACA65C,QAAA,GAEAC,cAAA,SACAD,OAAA,CACAvD,YAAA,cACAyD,UAlJA,SAoJA70D,eAAA,SAAAziB,GACAotG,EAAAptG,EAAAuI,WAEAgR,mBAAA,SAAAvZ,GACA,IACA+tG,EACAG,EAFAluG,EAAAmuG,eAAA,EAAAnuG,EAAAmuG,cAAAvvG,QACAmvG,EAAA/tG,EAAAmuG,cAAA,GAAAC,SAAAL,YACAG,EAAAluG,EAAAmuG,cAAA,GAAAC,SAAAF,SAEAH,EACA/tG,EAAAuI,UAAA+X,OAAA,oBAAA+sF,EAAA5pF,OAAAjN,IACA,GAAA,WAAAA,GAAA,YAAAA,EACA,OAAAA,KAGA03F,EACAluG,EAAAuI,UAAA+X,OAAA,oBAAA+sF,EAAA5pF,OAAAjN,IACA,GAAA,WAAAA,GAAA,YAAAA,GAAA,aAAAA,GACA,iBAAAA,EAAAvS,MAAA,qBAAAuS,EAAAvS,KACA,OAAAuS,KAIAxW,EAAAuI,UAAA+X,OAAA,oBAAA+sF,EAAA5pF,OAAAjN,IACA,GAAA,WAAAA,GAAA,YAAAA,GAAA,aAAAA,GAAA,gBAAAA,EAAAvS,KACA,OAAAuS,MAKAxW,EAAAuI,UAAA+X,OAAA,oBAAA+sF,EAAA5pF,OAAAjN,IACA,GAAA,YAAAA,EACA,OAAAA,MAKA+6B,YAAA,CACAxvB,MAAAsrF,GAEAgB,uBAxJA,SAAAzlE,GAEA,IAAAulE,EAAAf,EAAAkB,mBACAH,GAAA,EAAAA,EAAAvvG,SAEA,gBAAAgqC,EAAAyI,SAAAptC,MACAqM,EAAAi+F,gBAAAJ,EAAA,GAAAprC,MAAA,GAAAxiE,SAAAC,KAAA,WACA4sG,EAAA1qG,YAGA,iBAAAkmC,EAAAyI,SAAAptC,MACAqM,EAAAi+F,gBAAAJ,EAAA,GAAAprC,MAAA,GAAAxiE,SAAAC,KAAA,WACA4sG,EAAA1qG,YAGA,qBAAAkmC,EAAAyI,SAAAptC,MACAqM,EAAAma,eAAA0jF,EAAA,GAAAprC,MAAAxiE,SAAAC,KAAA,SAAA+sG,GA1BAA,EA2BAA,EAAA1xE,IA1BArxB,EAAA6B,eAAA,CACA7R,MAAA,iBACA8R,QAAA,wCAAAyiB,EAAAmtE,UAAAqR,IACAhhG,QAAA,CAAA,CACAlI,KAAA,qBA8JAkzE,SAAA,CACAi3B,QAAA,CACA9uG,QAAA,CACA,YACA,OACA,CACAC,UAAA,WACAC,QAAAzF,EAAAM,QAAA,kBACAoF,SAAA,UACAC,MAAA,IAEA,eACA,cC7NAhG,MAAAkF,WAAA,gCAAA,CAAA,SAAA,WAAA,SAAA,aAAA,sBACA,SAAAG,EAAAwO,EAAAvO,EAAAjF,EAAAmW,GAmCA,IAAA88F,EAjCAjuG,EAAAsvG,KAAA,WAEA,IAMAC,EANAvvG,EAAA0T,iBACAu6F,IACAe,EAAAf,EAAAkB,mBACAH,EAAA5yG,EAAAkoB,OAAA0qF,EAAA,CAAAJ,cAAA5uG,EAAAyT,oBAGA87F,EAAAnzG,EAAA+a,IAAA63F,EAAA,SAAArzG,EAAAwS,EAAAxI,GACA,MAAA,CACAiO,UAAAjY,EAAAD,IACAoJ,KAAAnJ,EAAAmJ,KACA0nD,YAAA7wD,EAAAszG,SAAAziD,eAIAxsD,EAAA0T,gBAAA67F,IAIAvvG,EAAA0C,SAGA1C,EAAAwvG,kBAAA,WACA,GAAAvB,EAAA,CACA,IAAAe,EAAAf,EAAAkB,mBAEA,OAAA,OADAH,EAAA5yG,EAAAkoB,OAAA0qF,EAAA,CAAAJ,cAAA5uG,EAAAyT,sBACA,GAAAu7F,EAAAvvG,OAEA,OAAA,GAKAO,EAAA21E,mBAAA,CACAC,mBAAA,IAAAvjC,WAAAwjC,eAAAC,yBAAA,CACAC,SAAA,SAAAC,GACA,OAAA7kE,EAAAg9F,aAAAn4B,EAAApS,MAAAxiE,UAEA0tG,YAAA,cACAj3B,iBAAA,iBAEAK,cAAA,WACA50D,eAAA,SAAAziB,GACAotG,EAAAptG,EAAAuI,WAEAgR,mBAAA,SAAAvZ,GAEA,IAGA0uG,EAGAE,EANAzvG,EAAAyT,oBACAu7F,EAAAf,EAAAkB,mBAIA,OAFAI,EAAAnzG,EAAAkoB,OAAA0qF,EAAA,CAAAJ,aAAA,MAEA,EAAAW,EAAA9vG,SACAgwG,EAAArzG,EAAA+a,IAAA/a,EAAAkoB,OAAA0qF,EAAA,CAAAJ,aAAA,IAAA,OACAX,EAAA9sF,OAAA,mBAAAsuF,UCxDA90G,MAAA8gC,QAAA,cAAA,CAAA,YAAA,aAAA,kBAAA,gBACA,SAAAC,EAAA1gC,EAAA6gC,EAAAD,GAEA,IAWAx1B,EAXAspG,EAAA,0BACAC,EAAA,yBAEAC,EAAAl0E,EAAA,kBAAA,GAAA,CACA4H,MAAA,CAAA7G,OAAA,MAAAhN,SAAA,GAEAzsB,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,mBACA0B,OAAA,CAAA3B,OAAA,SAAAC,IAAA,mBACAmzE,UAAA,CAAApzE,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,+BAIAozE,GAAA,EAcA,SAAAnC,EAAAoC,EAAArC,EAAApvE,EAAA0xE,GAEA,IAAA5xG,EAAA,CACA6xG,YAAA,GACAD,UAAAA,GAAA,EACAE,gBAAAtC,EAAAmC,GACAI,yBAAAzC,GAGA,OAAAtvG,EAAA8xG,iBACA,KAAA,EACA9xG,EAAA6xG,YAAAF,EAAAvuE,UAAAmuE,EAAAlwG,QACA,MACA,KAAA,EACArB,EAAA6xG,YAAAF,EAAAvuE,UAAAkuE,EAAAjwG,QACA,MACA,QACA,IAAA2wG,EAAAp1G,EAAAM,QAAA,oCAMA,OALAugC,EAAAiB,YAAA9hC,EAAAM,QAAA,qCAAA80G,GAEA9xE,GACAA,EAAA8xE,GAEA,KAGA,OAAAhyG,EA2CA,SAAAwvG,EAAAmC,GACA,OAAA,IAAAA,EAAAM,YAAAX,EAAA,GAEA,EACA,IAAAK,EAAAM,YAAAV,EAAA,GAEA,GAEA,EAIA,MAAA,CACAzoG,YA9FA,SAAA3D,EAAA+sG,GAKA,QAJAlqG,GAAA7C,GAAA6C,GAAA0pG,GAAAQ,KACAR,EAAAQ,EACAlqG,EAAAw1B,EAAA3tB,IAAA2hG,EAAA,CAAAU,cAAAA,IAAA,KAEAlqG,GA0FApD,OAzCA,SAAA+sG,EAAArC,EAAArvE,EAAAC,GAGA,GADAlgC,EAAAuvG,EAAAoC,EAAArC,EAAApvE,GAKA,OAAA1C,EAAA54B,OACA4sG,EACAxpG,EACAhI,EACAigC,EACAC,IA8BA18B,OA3BA,SAAAxD,EAAAigC,EAAAC,GACA1C,EAAAh6B,OACAguG,EACAxpG,EACAhI,EACAigC,EACAC,EACA,CAAA44B,SAAA94D,EAAA84D,UACA,aAoBA02C,wBAAAA,EACAD,iBAAAA,EACA4C,mBA3FA,WACA,OAAA30E,EAAAkC,UAAA,YAAA8xE,EAAA,CAAAU,eAAA,KA2FAE,gBA3DA,SAAAT,EAAA1xE,EAAAC,GAEA,GADAlgC,EAAAuvG,EAAAoC,EAAA,EAAAzxE,EAAA,GAIA,OAAA1C,EAAA54B,OACA4sG,EACAxpG,EACAhI,EACAigC,EACAC,QCpEA3jC,MAAA8gC,QAAA,sBAAA,CAAA,YAAA,aAAA,kBAAA,gBACA,SAAAC,EAAA1gC,EAAA6gC,EAAAD,GAEA,IAAA60E,EAAA/0E,EAAA,iCAAA,GAAA,CACAyyE,aAAA,CAAA1xE,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,8BACApR,eAAA,CAAAmR,OAAA,OAAAC,IAAA,kDACA0yE,gBAAA,CAAA3yE,OAAA,OAAAC,IAAA,gDACAs6C,aAAA,CAAAv6C,OAAA,OAAAC,IAAA,gDACAgyE,gBAAA,CAAAjyE,OAAA,OAAAC,IAAA,+CACA45C,WAAA,CAAA75C,OAAA,SAAAC,IAAA,0CACAmyE,gBAAA,CAAApyE,OAAA,SAAAC,IAAA,+CACAvqB,uBAAA,CAAAsqB,OAAA,OAAAhN,SAAA,EAAAiN,IAAA,oDACAxP,kBAAA,CAAAuP,OAAA,MAAAC,IAAA,8CA4GA,MAAA,CACAyxE,aA1GA,SAAAvqC,GACA,OAAAhoC,EAAAkC,UAAA,eAAA2yE,EAAA,CAAA7sC,KAAAA,KA0GAt4C,eAzEA,SAAAs4C,GACA,OAAAhoC,EAAAuE,qBACA,iBACAswE,EACA,CAAA78F,UAAAgwD,GACA,KACA,KACA,MACA,IAkEAwrC,gBA/DA,SAAAxrC,EAAAmrC,GACA,OAAAnzE,EAAAuE,qBACA,kBACAswE,EACA,CACA78F,UAAAgwD,EACAmrC,SAAAA,GAEA,KACA,KACA,MACA,IAqDA/3B,aAlDA,SAAApT,EAAApX,GACA,OAAA5wB,EAAA+D,WACA,eACA8wE,EACA,CACA78F,UAAAgwD,EACApX,YAAAA,GAEA,KACA,MACA,IAyCAkiD,gBAtCA,SAAA9qC,GACA,OAAAhoC,EAAAuE,qBACA,kBACAswE,EACA,CAAA78F,UAAAgwD,GACA,KACA,KACA,MACA,IA+BA0S,WA5BA,SAAA1S,GACA,OAAAhoC,EAAAuE,qBACA,aACAswE,EACA,CAAA78F,UAAAgwD,GACA,KACA,KACA,MACA,IAqBAirC,gBAlBA,SAAAjrC,GACA,OAAAhoC,EAAAuE,qBACA,kBACAswE,EACA,CAAA78F,UAAAgwD,GACA,KACA,KACA,MACA,IAWAzxD,uBA7FA,SAAAu+F,EAAAC,GACA,OAAA/0E,EAAAuE,qBACA,yBACAswE,EACA,GACA,CACAE,gBAAAA,EACAD,MAAAA,GAEA,KACA,MACA,IAmFAxjF,kBA9GA,SAAA5rB,EAAAsiE,GACA,OAAAhoC,EAAAkE,oBACA,oBACA2wE,EACA,CACA7sC,KAAAA,GAEAtiE,EACA,KACA,MACA,QC/BA3G,MAAAkF,WAAA,yBAAA,CAAA,SAAA,oBACA,SAAAG,EAAA4wG,GAIA5wG,EAAA0jD,SAAAktD,EAAAC,oBAAA7wG,EAAA8wG,kBAEA9wG,EAAA0jD,SAAAtiD,SAAAC,KAAA,SAAAqiD,GACA1jD,EAAAsB,MAAAsvG,EAAAG,4BACA/wG,EAAAgxG,OAAAC,gBACAvtD,EAAAwtD,sBCRAv2G,MAAAkF,WAAA,oBAAA,CAAA,SAAA,SAAA,oBACA,SAAAG,EAAAC,EAAA2wG,GAEA5wG,EAAA/E,IAAA,yBAAA,SAAA4F,EAAAswG,GACAnxG,EAAAgxG,OAAAI,WAAAD,EAAAC,WACApxG,EAAAqxG,cAAAT,EAAAU,sBAAAH,EAAAC,UACApxG,EAAAgxG,OAAAG,KAIAnxG,EAAAuxG,2BAAA,CACA7+F,WAAA,IAGA1S,EAAAwxG,cAAA,SAAApzG,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAgxG,OAAAp2G,QAAA2G,KAAAvB,EAAAgxG,QACA7vG,EAAAnB,OAAA8wG,iBAAA1yG,EAAA0yG,iBACA3vG,EAAAK,UAIAxB,EAAAyxG,iBAAA,WAaAb,EAAAc,yBAAA1xG,EAAAgxG,OAAAI,UACAhwG,SAAAC,KAZA,SAAAjD,GAEA+Q,EAAA,uBAAAvN,SACAuN,EAAA,QAAAq2B,OAAA,+EAAApnC,EAAAk4C,SAAA,sCAGA,SAAAl4C,OASA4B,EAAAqxG,cAAA,GACArxG,EAAAgxG,OAAA,GAwBA,IAAA7vG,EAAAlB,EAAA,CACAL,YAAA,+CACA4B,OAxBAxB,EAAA2xG,mBAAA,CACA37F,SAAA,CAAAC,OAAA,CAAA,YAAAC,WAAA,CAAA,QACAC,WAAA,CACA,CAAAC,MAAA,kBAAAE,YAAA,kBAAA2E,KAAA,YAAAta,MAAA,SACA,CAAAyV,MAAA,eAAAE,YAAA,mBAAA3V,MAAA,SACA,CAAAyV,MAAA,YAAAE,YAAA,0BAAAD,WAAA,iBAAA1V,MAAA,QACA,CAAAyV,MAAA,cAAAE,YAAA,kBAAA3V,MAAA,SACA,CAAAyV,MAAA,iBAAAE,YAAA,uBACA,CAAAF,MAAA,kBAAAE,YAAA,mBAAA3V,MAAA,SACA,CAAAyV,MAAA,WAAAE,YAAA,qBAAAD,WAAA,eAAA1V,MAAA,SACA,CAAAyV,MAAA,YAAAE,YAAA,iBAAAD,WAAA,WAAA1V,MAAA,SAEAwa,WAAA,CACA,CACAjW,KAAA,uBACAkW,QAAA,SAAApR,GAAAhK,EAAAwxG,cAAAxnG,KACA,CACA9E,KAAA,qCACAkW,QAAA,WAAApb,EAAAyxG,wBAOAzvG,MAAAhC,EAAAiC,YCrEAtH,MAAAkF,WAAA,mBAAA,CAAA,SAAA,YACA,SAAAG,EAAA4xG,GAEA5xG,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,sCAEA,CACAzG,MAAA,oBACAyG,SAAA,0CACA+vG,gBAAA,IAIA7xG,EAAAiG,WAAAlE,UAAA,EAEA/B,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAAs2D,cAAA,WACAt2D,EAAAsB,MAAA2vG,gBAAA9yG,KAAAyzG,EAAAE,gBAGA9xG,EAAAw2D,iBAAA,SAAAC,GACAtoD,EAAAnO,EAAAsB,MAAA2vG,gBAAAlhG,QAAA0mD,IACA,EAAAtoD,GACAnO,EAAAsB,MAAA2vG,gBAAAl9F,OAAA5F,EAAA,IAIAnO,EAAA+xG,oBAAA,SAAAt7C,EAAAu7C,GAEAv7C,EAAAw7C,gBADA,IAAAD,GAOAhyG,EAAA6C,UAAA,EAEA7C,EAAAkyG,mBAAA,SAAA5wG,GAUA,SAAAmB,IACAzC,EAAA6C,UAAA,EACA7C,EAAAuH,SACAvH,EAAA0C,QAGA,SAAAC,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EAhBA4B,EAAA6C,UAAA,EAEAvB,EAAA8vG,SAGAQ,EAAA7uG,OAAAzB,EAAAmB,EAAAE,GAFAivG,EAAA5uG,OAAA1B,EAAAmB,EAAAE,OCjDAhI,MAAAkF,WAAA,cAAA,CAAA,SAAA,SAAA,YACA,SAAAG,EAAAC,EAAA2xG,GAoBA,SAAAxgG,IACApR,EAAAmyG,QAAAP,EAAAQ,kBAAA,GAnBApyG,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,QAAAC,WAAA,CAAA,QACAC,WAAA,CAAA,CAAAC,MAAA,SAAAE,YAAA,iBAAAD,WAAA,YAAA1V,MAAA,QACA,CAAAyV,MAAA,OAAAE,YAAA,eAAA2E,KAAA,SAAAta,MAAA,SACA,CAAAyV,MAAA,QAAAE,YAAA,sBAAA2E,KAAA,UACA,CAAA7E,MAAA,YAAAE,YAAA,qBAAAD,WAAA,YAAA1V,MAAA,UAKAX,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAgT,MAOAA,IAEApR,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAAuH,OAAA,WACA6J,KAEAjQ,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAAswG,EAAAz9F,WACAhT,EAAAnB,OAAAuH,OAAA,WACA6J,KAEAjQ,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACAwzG,EAAAhwG,OAAAxD,GAAAgD,SAAAC,KAAA,WACA+P,OAIApR,EAAAiB,cAAA,SAAA7C,GACA4B,EAAAqyG,eAAAj0G,EACA4B,EAAA2D,WAAA,yBAAA3D,EAAAqyG,iBAGAryG,EAAA6B,KAAA,CACA,CACAxG,MAAA,2BACAyG,SAAA,2CAGA9B,EAAA6B,KAAAE,UAAA,EAEA,IAAAZ,EAAAlB,EAAA,CACAL,YAAA,4BACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YCrEAtH,MAAA4T,UAAA,gBAAA,CAAA,WAAA,aAAA,YACA,SAAAC,EAAAxT,EAAA42G,GAEA,SAAAnjG,EAAAnN,GACA,OAAAA,EAEAA,EAAAymC,UACA,WAAAzmC,EAAAwD,KAAA,YAEAxD,EAAAwD,KALA,GAWA,SAAA4J,EAAApN,GACA,OAAAA,EAAAwD,KAGA,MAAA,CACA6J,SAAA,IACAC,QAAA,UACAC,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAAC,EAAA0iG,EAAAnkE,kBAAAx+B,EAAAw8B,aAEAj9B,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,iCACAkU,yBAAA,EACAf,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAnR,KAAA8Q,EACApM,GAAA,SAAAkuG,GAAA,OAAAA,EAAAI,YAGAniG,EAAAe,YAGAf,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,OAMAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,KAMAsT,EAAAe,QAAA,WACAd,EAAA9N,SAAAC,KAAA,WAEA,IAEAqqC,EAFAtvC,EAAAsK,KAAAwI,EAAA,CAAAkiG,SAAAniG,EAAAw8B,cAUAt8B,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,aARAy7B,EAAAkmE,EAAAnkE,kBAAAx+B,EAAAw8B,cACArqC,SAAAC,KAAA,WACA6N,EAAAzP,OAAA,EACAyP,EAAA/Q,KAAAsf,MAAAvO,EAAAw8B,GAEAv8B,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,iBAQAlB,EAAAqe,GAAA,SAAA,SAAAvsB,GACAmB,EAAAqrB,OAAA,WACApe,EAAAqe,cAAAzsB,EAAAiuB,SAIA/f,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,UCrFAhB,MAAA4T,UAAA,4BAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GAEA,SAAAyT,EAAA4I,GACA,GAAAA,EAEA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,SAAAwJ,EAAA2I,GACA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACA8e,SAAA,EACA7e,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEAA,EAAAiB,SAAAC,QAAA,SAAAC,GACA,MAAA,MAAAA,EACA,EAEA,MAAAA,EACA,EAEA,IAGAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAAA,KAGA6S,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAI,yBAAA,EACAf,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAnR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,gCACA,CAAApC,GAAA,EAAAoC,KAAA,iCACA,CAAApC,GAAA,EAAAoC,KAAA,6BAIA6J,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,MAGA,QCxDAhB,MAAA8gC,QAAA,oBAAA,CAAA,YAAA,gBACA,SAAAC,EAAAE,GAEA,IAAA02E,EAAA52E,EAAA,8BAAA,GAAA,CACA62E,gBAAA,CAAA91E,OAAA,MAAAC,IAAA,2BAAAjN,SAAA,GACA6T,MAAA,CAAA7G,OAAA,MAAAC,IAAA,2CAAAjN,SAAA,GACAiiF,yBAAA,CAAAj1E,OAAA,OAAAC,IAAA,mDAqCA,MAAA,CACA40E,sBA9BA,SAAAF,GACA,OAAAx1E,EAAA3tB,IAAAqkG,EAAA,CAAAlB,SAAAA,KA8BAP,oBAnCA,SAAAC,GACA,OAAAl1E,EAAAkC,UAAA,kBAAAw0E,EAAA,CAAAxB,iBAAAA,KAmCAC,4BA5BA,SAAAr6C,EAAA87C,GACA,IAAA/1F,EAAA,GAeA,OAbArgB,EAAAkJ,QAAAoxD,EAAA,SAAA+7C,GACA,IAAA/iG,EAAAtT,EAAAsK,KAAA8rG,EAAA,CAAAE,iBAAAD,EAAAC,mBAEAj2F,EAAAte,KAAA,CACAw0G,qBAAAF,EAAAE,qBACAl8C,SAAAg8C,EAAAh8C,SACAw7C,gBAAAQ,EAAAR,gBACAW,WAAAljG,GAAAA,EAAAkjG,UACAC,UAAAnjG,EAAAA,EAAAmjG,UAAA,EACAC,WAAApjG,EAAAA,EAAAojG,WAAA,OAIAr2F,GAaAi1F,yBAVA,SAAAN,GACA,OAAAx1E,EAAA+D,WAAA,2BAAA2yE,EAAA,CACAlB,SAAAA,SCzCAz2G,MAAAkF,WAAA,yBAAA,CAAA,SAAA,KAAA,aAAA,wBAAA,mBAAA,kBACA,SAAAG,EAAAkI,EAAAlN,EAAA+3G,EAAA7wG,EAAA25B,GAEA,IAAAj1B,GAAA,EACAC,GAAA,EAEA,SAAA4P,IACAzW,EAAA6H,QAAA,EACA7H,EAAAgzG,kBAAAD,EAAAl1E,WACA79B,EAAAg2D,cAAA,GACAh2D,EAAAizG,iBAAA/wG,EAAA27B,WACA31B,EAAAiD,IAAA,CAAAnL,EAAAgzG,kBAAA5xG,SAAApB,EAAAizG,iBAAA7xG,WAAAC,KAAA,WACArB,EAAAkzG,sBAAAt4G,QAAA2G,KAAAvB,EAAAgzG,mBACAhzG,EAAAg2D,cAAAp7D,QAAA2G,KAAAvB,EAAAizG,kBACAjzG,EAAAmzG,kBAAAv4G,QAAA2G,KAAAvB,EAAAizG,kBAEAjzG,EAAA6H,QAAA,IAIA7H,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAwI,GACA6P,MAIAzW,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,EAEAC,IACA4P,IACA5P,GAAA,IAIAD,GAAA,IAIA5G,EAAAozG,SAAA,WACA38F,KAGAzW,EAAAmkG,YAAA,SAAAkP,EAAAC,GAEA,IAMAC,EANAvzG,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEA0wG,EAAA,EAEAvzG,EAAAwzG,6BAAAH,KACAE,IAEAR,EAAAhwG,OAAAswG,EAAA,SAAA/xG,GACAtB,EAAAgzG,kBAAA1xG,EACAtB,EAAAkzG,sBAAAt4G,QAAA2G,KAAAvB,EAAAgzG,qBAEAO,IAEAvzG,EAAA6C,UAAA,IAEA,SAAAmJ,KACAunG,IAEAvzG,EAAA6C,UAAA,GAGAg5B,EAAAiB,YACA9hC,EAAAM,QAAA,qCACAugC,EAAAkB,eAAA/wB,OAIAhM,EAAAyzG,yBAAAH,KACAC,IAEArxG,EAAA27B,WAAAz8B,SAAAC,KAAA,SAAAqyG,GAEA13B,EAAAphF,QAAA2G,KAAAmyG,GAGA13B,EAAA23B,mBAAAL,EAAAK,mBACA33B,EAAA43B,sBAAAN,EAAAM,sBACA53B,EAAA63B,mBAAAP,EAAAO,mBACA73B,EAAA83B,gBAAAR,EAAAQ,gBACA93B,EAAA+3B,eAAAT,EAAAS,eACA/3B,EAAAg4B,6BAAAV,EAAAU,6BACAh4B,EAAAi4B,4BAAAX,EAAAW,4BACAj4B,EAAAjO,4CAAAulC,EAAAvlC,4CACAiO,EAAAk4B,6BAAAZ,EAAAY,6BACAl4B,EAAAm4B,8CAAAb,EAAAa,8CACAn4B,EAAAo4B,yCAAAd,EAAAc,yCACAp4B,EAAAq4B,2BAAAf,EAAAe,2BACAr4B,EAAA7O,mBAAAmmC,EAAAnmC,mBACA6O,EAAArxB,4BAAA2oD,EAAA3oD,4BACAqxB,EAAAs4B,0BAAAhB,EAAAgB,0BACAt4B,EAAAu4B,uBAAAjB,EAAAiB,uBAEAryG,EAAAa,OAAAi5E,EAAA,SAAA16E,GACAtB,EAAAg2D,cAAAp7D,QAAA2G,KAAAD,GACAtB,EAAAmzG,kBAAAv4G,QAAA2G,KAAAD,KAEAiyG,IAEAvzG,EAAA6C,UAAA,IAEA,SAAAmJ,KACAunG,IAEAvzG,EAAA6C,UAAA,GAGAg5B,EAAAiB,YACA9hC,EAAAM,QAAA,qCACAugC,EAAAkB,eAAA/wB,WAMAhM,EAAAwzG,6BAAA,SAAAp1G,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAkzG,wBAGAlzG,EAAAyzG,yBAAA,SAAAr1G,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAmzG,oBAGAnzG,EAAAsC,kBAAA,SAAA+wG,EAAAC,GACA,OAAAtzG,EAAAwzG,6BAAAH,IACArzG,EAAAyzG,yBAAAH,OCvIA34G,MAAAkF,WAAA,qBAAA,CAAA,SAAA,KAAA,aAAA,mBAAA,kBAAA,cAAA,WAAA,gBACA,SAAAG,EAAAkI,EAAAlN,EAAAkH,EAAA25B,EAAAuwE,EAAA59F,EAAAnD,GAIA,IAAAzE,GAAA,EACAC,GAAA,EAiEA,SAAA4P,IACAzW,EAAA6H,QAAA,EACA7H,EAAAg2D,cAAA,GACAh2D,EAAAizG,iBAAA/wG,EAAA27B,WACA79B,EAAAgtB,OAAAo/E,EAAAmE,qBACAroG,EAAAiD,IAAA,CAAAnL,EAAAizG,iBAAA7xG,SAAApB,EAAAgtB,OAAA5rB,WAAAC,KAAA,WAGA,IACAmzG,EAHAx0G,EAAAg2D,cAAAp7D,QAAA2G,KAAAvB,EAAAizG,kBACAjzG,EAAAy0G,yBAAA,GACA,KAAAz0G,EAAAizG,iBAAAwB,2BACAD,EAAArxC,KAAA8R,MAAAj1E,EAAAizG,iBAAAwB,0BACAz0G,EAAAy0G,yBAlBA,SAAAD,GACA,IAAA3oF,EAAA,GACA,IAAA,MAAAyyB,KAAAk2D,EACA3oF,EAAAyyB,GAAAk2D,EAAAl2D,GAAA5wB,QAAA,2BAAA,QAEA,OAAA7B,EAaA6oF,CAAAF,IAEAx0G,EAAAy0G,yBAAAE,YA3DA30G,EAAAy0G,yBAAAE,UAAA,UAEA30G,EAAAy0G,yBAAAG,QAAA,UACA50G,EAAAy0G,yBAAAI,UAAA,UACA70G,EAAAy0G,yBAAAK,iBAAA,UACA90G,EAAAy0G,yBAAAM,mBAAA,UAEA/0G,EAAAy0G,yBAAAO,UAAA,UACAh1G,EAAAy0G,yBAAAQ,YAAA,UACAj1G,EAAAy0G,yBAAAS,mBAAA,UACAl1G,EAAAy0G,yBAAAU,qBAAA,UAEAn1G,EAAAy0G,yBAAAW,SAAA,UACAp1G,EAAAy0G,yBAAAY,WAAA,UACAr1G,EAAAy0G,yBAAAa,kBAAA,UACAt1G,EAAAy0G,yBAAAc,oBAAA,UAEAv1G,EAAAy0G,yBAAA9xG,MAAA,UACA3C,EAAAy0G,yBAAAe,QAAA,UACAx1G,EAAAy0G,yBAAAgB,eAAA,UACAz1G,EAAAy0G,yBAAAiB,iBAAA,UAEA11G,EAAAy0G,yBAAAkB,QAAA,UACA31G,EAAAy0G,yBAAAmB,UAAA,UACA51G,EAAAy0G,yBAAAoB,YAAA,UACA71G,EAAAy0G,yBAAAqB,eAAA,UACA91G,EAAAy0G,yBAAAsB,QAAA,UAEA/1G,EAAAg2G,qBAmCAh2G,EAAAmzG,kBAAAv4G,QAAA2G,KAAAvB,EAAAg2D,eAEAh2D,EAAA6H,QAAA,EAEA,IAAA,IAAA0R,EAAA,EAAAA,EAAAvZ,EAAAgtB,OAAAvtB,OAAA8Z,IACAvZ,EAAAgtB,OAAAzT,GAAA08F,QAAAj2G,EAAAgtB,OAAAzT,GAAA29C,WAAAl3D,EAAAg2D,cAAAkgD,wBApFAl2G,EAAAm2G,gBAAA,SAAAhoG,GACA,IAAA,IAAAoL,EAAA,EAAAA,EAAAvZ,EAAAgtB,OAAAvtB,OAAA8Z,IACAvZ,EAAAgtB,OAAAzT,GAAA08F,QAAA18F,IAAApL,EAGAnO,EAAAg2D,cAAAkgD,sBAAAl2G,EAAAgtB,OAAA7e,GAAA+oD,UAGAl3D,EAAAy0G,yBAAA,GAEAz0G,EAAAg2G,kBAAA,WACA,IAAA53G,EAoCA,SAAAo2G,GACA,IAAA3oF,EAAA,GACA,IAAA,MAAAyyB,KAAAk2D,EACA3oF,EAAAyyB,GAAAk2D,EAAAl2D,GAAA5wB,QAAA,qBAAA,UAEA,OAAA7B,EAzCAuqF,CAAAp2G,EAAAy0G,0BACAz0G,EAAAg2D,cAAAy+C,yBAAAtxC,KAAAC,UAAAhlE,IA6EA4B,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAwI,GACA6P,MAIAzW,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GApGA,KAqGAA,EAAA2D,UACA6E,IACAA,GAAA,EAEAC,IACA4P,IACA5P,GAAA,IAIAD,GAAA,IAIA5G,EAAAozG,SAAA,WACA38F,KAGAzW,EAAAmkG,YAAA,SAAAmP,GAEA,IAAAtzG,EAAA6C,WAIA7C,EAAAsC,kBAAAgxG,GAAA,CAEAtzG,EAAA6C,UAAA,EAEA,IAAAwzG,EAAAn0G,EAAA27B,WACAw4E,EAAAj1G,SAAAC,KAAA,SAAA26E,GAGAA,EAAAk6B,sBAAA5C,EAAA4C,sBACAl6B,EAAAs6B,yBAAAhD,EAAAgD,yBACA,IAAAt6B,EAAAs6B,yBACAt6B,EAAAy4B,yBAAAnB,EAAAmB,yBAEAz4B,EAAAy4B,yBAAA,GAGAvyG,EAAAa,OAAAi5E,EAAA,SAAA16E,GACAtB,EAAAg2D,cAAAp7D,QAAA2G,KAAAD,GACAtB,EAAAmzG,kBAAAv4G,QAAA2G,KAAAD,GAEAtB,EAAA6C,UAAA,GACA,SAAAmJ,GACAhM,EAAA6C,UAAA,EAEAg5B,EAAAiB,YACA9hC,EAAAM,QAAA,qCACAugC,EAAAkB,eAAA/wB,UAMAhM,EAAAsC,kBAAA,SAAAgxG,GACA,OAAA14G,QAAA2H,OAAA+wG,EAAAtzG,EAAAmzG,oBAGAnzG,EAAAu2G,YAAA,KACAv2G,EAAAw2G,iBAAA,KAEA,SAAAvJ,EAAAC,GACAltG,EAAAu2G,YAAA,KACAv2G,EAAAw2G,iBAAA,KACA,IAAArJ,EAAAD,EAAAE,cAAAz5F,MAAA,GACA,GAAA,MAAAu5F,EAAAE,cAAAz5F,MAAA,GAAArU,KACAU,EAAAqtB,OAAA,SAAArtB,GACAA,EAAAw2G,iBAAAx7G,EAAAM,QAAA,yCAFA,CAMA,IAAA+xG,EAAA,IAAAC,WACAD,EAAAE,OAAA,SAAAL,GACA,IAAA3tB,EAAA,IAAAk3B,MACAl3B,EAAAm3B,IAAAxJ,EAAAniE,OAAAlf,OACA0zD,EAAAguB,OAAA,WACA,OAAAhuB,EAAA5+E,OAAA,MAAA4+E,EAAA/8D,OAQAxiB,EAAAqtB,OAAA,SAAArtB,GACAA,EAAAu2G,YAAArJ,EAAAniE,OAAAlf,SARA7rB,EAAAqtB,OAAA,SAAArtB,GACAA,EAAAw2G,iBAAAx7G,EAAAM,QAAA,8CAWA+xG,EAAAG,cAAAL,IAGAntG,EAAAytG,cAAA,WACAztG,EAAA22G,kBAAA,EAEAvK,EAAAoE,gBAAAxwG,EAAAu2G,YAAA,WACAv2G,EAAA22G,kBAAA,EACA32G,EAAAu2G,YAAA,KACAv2G,EAAAw2G,iBAAA,KAEA//F,KACA,SAAAoK,GACA7gB,EAAA22G,kBAAA,EACA32G,EAAAw2G,iBAAA31F,KAIA7gB,EAAAkG,wBAAA,SAAAC,GACAkF,EAAA6B,eAAA,CACA7R,MAAA,2BACA8R,QAAA,iCACAC,QAAA,CAAA,CACAlI,KAAA,cACA,CACAA,KAAA,cACAE,SAAA,WAAAgnG,EAAAxqG,OAAAuE,EAAA,WACAsQ,YAMAjI,EAAA,WACA5T,QAAAisC,QAAAqX,SAAA2vD,cAAA,eAAAzgF,GAAA,SAAA6/E,IACA,QCtOAtyG,MAAAkF,WAAA,wBAAA,CAAA,SAAA,aAAA,UAAA,uBACA,SAAAG,EAAAhF,EAAAoN,EAAAwuG,GAEA52G,EAAAM,aAAA,CACAu2G,SAAA,CACAzR,eAAA,GAEA7kG,QAAA,CACA,CAAAC,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAo2G,WAAA,GACA,CACAt2G,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBACAoF,SAAA,OAAAjE,OAAA,qBACAmE,UAAA,OACAD,MAAA,SAEA,CAAAH,UAAA,iBAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,qBAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,qBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,WAEAu/D,QAAA,CACA82C,WAAA,CAAA,CACAhsG,OAAA,sBACAisG,YAAA,QACAC,cAAA,MACAC,eAAA,GACA,CACAnsG,OAAA,YACAisG,YAAA,MACAC,cAAA,IACAC,eAAA,EACAC,aAAA,eAGAC,uBAAA,CACA,CACAC,YAAA,EACAz2G,UAAA,UAKAZ,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAs3G,kBAAAV,EAAAjyF,QAAA,KAGA3kB,EAAAs3G,kBAAAV,EAAAjyF,YC/CAhqB,MAAAkF,WAAA,kBAAA,CAAA,SAAA,KAAA,aAAA,WAAA,aAAA,kBAAA,mBACA,SAAAG,EAAAkI,EAAAlN,EAAAwT,EAAA+oG,EAAA17E,EAAA35B,GAEAlC,EAAAmC,sBAAAD,EAAAE,SAAAD,sBAEAnC,EAAAw3G,gBAAA,EACAx3G,EAAAy3G,SAAA,EAQA,IAAA7wG,IANA5G,EAAAivB,KAAA,SAAAuoF,EAAAC,GAEAz3G,EAAAw3G,gBAAAA,EACAx3G,EAAAy3G,SAAAA,IAIA5wG,GAAA,EAEA,SAAA4P,IACAzW,EAAA6H,QAAA,EACA7H,EAAAsB,MAAAi2G,EAAAh2F,QAAAvhB,EAAAw3G,iBACAx3G,EAAAsB,MAAAF,SAAAC,KAAA,WACArB,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAA6H,QAAA,GACA,SAAAlF,GACAA,GAAA,KAAAA,EAAAg6B,SACA38B,EAAAsB,MAAA,CACAwB,GAAA9C,EAAAw3G,gBAAA,GACA3kG,OAAA,EACA6kG,SAAA,MAEA13G,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,UAKAtB,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAwI,GACA6P,MAIAzW,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACAA,EAAA2D,YAAA/B,EAAAy3G,SACA7wG,IACAA,GAAA,EAEAC,IACA4P,IACA5P,GAAA,GAGA2H,EAAA,WACA5T,QAAAisC,QAAA,gCAAAuX,QAAA,WACA,MAGAx3C,GAAA,IAIA5G,EAAAozG,SAAA,WACA38F,KAGAzW,EAAAmkG,YAAA,SAAA/lG,GAEA4B,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEAzE,EAAAs5G,SAqBAH,EAAAx0G,OAAA3E,GAAAgD,SAAAC,KAAA,WACArB,EAAAsB,MAAAlD,EACA4B,EAAAsB,MAAAuR,OAAA,EACA7S,EAAAqC,UAAAzH,QAAA2G,KAAAnD,GAEA4B,EAAA6C,UAAA,GACA,SAAAmJ,GACAhM,EAAA6C,UAAA,EAEAg5B,EAAAiB,YACA9hC,EAAAM,QAAA,qCACAugC,EAAAkB,eAAA/wB,MA/BA5N,EAAAyU,MAeA7S,EAAA6C,UAAA,EAdA00G,EAAA31G,OAAAxD,EAAA0E,IAAA1B,SAAAC,KAAA,WACAjD,EAAA0E,GAAA9C,EAAAw3G,gBAAA,GACAp5G,EAAAyU,OAAA,EACA7S,EAAAsB,MAAAlD,EACA4B,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OACAtB,EAAA6C,UAAA,GACA,SAAAmJ,GACAhM,EAAA6C,UAAA,EAEAg5B,EAAAiB,YACA9hC,EAAAM,QAAA,qCACAugC,EAAAkB,eAAA/wB,QAwBAhM,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,eC/GA1H,MAAAkF,WAAA,mBAAA,CAAA,SAAA,KAAA,aAAA,kBAAA,mBAAA,kBAAA,aACA,SAAAG,EAAAkI,EAAAlN,EAAA28G,EAAAz1G,EAAA25B,EAAA98B,GAEA,IAAA6H,GAAA,EACAC,GAAA,EAEA,SAAA4P,IACAzW,EAAA6H,QAAA,EACA7H,EAAAjB,WAAAA,EACAiB,EAAA43G,YAAAD,EAAA95E,WACA79B,EAAAg2D,cAAA,GACAh2D,EAAAizG,iBAAA/wG,EAAA27B,WACA31B,EAAAiD,IAAA,CAAAnL,EAAA43G,YAAAx2G,SAAApB,EAAAizG,iBAAA7xG,WAAAC,KAAA,WACArB,EAAA63G,gBAAAj9G,QAAA2G,KAAAvB,EAAA43G,aACA53G,EAAAg2D,cAAAp7D,QAAA2G,KAAAvB,EAAAizG,kBACAjzG,EAAAmzG,kBAAAv4G,QAAA2G,KAAAvB,EAAAizG,kBAEAjzG,EAAA6H,QAAA,IAIA7H,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAwI,GACA6P,MAIAzW,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,EAEAC,IACA4P,IACA5P,GAAA,IAIAD,GAAA,IAIA5G,EAAAozG,SAAA,WACA38F,KAGAzW,EAAAmkG,YAAA,SAAA2T,EAAAxE,GAEA,IAMAC,EANAvzG,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEA0wG,EAAA,EAEAvzG,EAAA+3G,uBAAAD,KACAvE,IAEAoE,EAAA50G,OAAA+0G,EAAA,SAAAx2G,GACAtB,EAAA43G,YAAAt2G,EACAtB,EAAA63G,gBAAAj9G,QAAA2G,KAAAvB,EAAA43G,eAEArE,IAEAvzG,EAAA6C,UAAA,IAEA,SAAAmJ,KACAunG,IAEAvzG,EAAA6C,UAAA,GAGAg5B,EAAAiB,YACA9hC,EAAAM,QAAA,qCACAugC,EAAAkB,eAAA/wB,OAIAhM,EAAAyzG,yBAAAH,KACAC,IAEArxG,EAAA27B,WAAAz8B,SAAAC,KAAA,SAAAqyG,GAEA13B,EAAAphF,QAAA2G,KAAAmyG,GAGA13B,EAAAg8B,wBAAA1E,EAAA0E,wBACAh8B,EAAAi8B,gBAAA3E,EAAA2E,gBACAj8B,EAAAk8B,cAAA5E,EAAA4E,cACAl8B,EAAAm8B,aAAA7E,EAAA6E,aACAn8B,EAAAo8B,WAAA9E,EAAA8E,WAEAl2G,EAAAa,OAAAi5E,EAAA,SAAA16E,GACAtB,EAAAg2D,cAAAp7D,QAAA2G,KAAAD,GACAtB,EAAAmzG,kBAAAv4G,QAAA2G,KAAAD,KAEAiyG,IAEAvzG,EAAA6C,UAAA,IAEA,SAAAmJ,KACAunG,IAEAvzG,EAAA6C,UAAA,GAGAg5B,EAAAiB,YACA9hC,EAAAM,QAAA,qCACAugC,EAAAkB,eAAA/wB,WAMAhM,EAAA+3G,uBAAA,SAAA35G,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAA63G,kBAGA73G,EAAAyzG,yBAAA,SAAAr1G,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAmzG,oBAGAnzG,EAAAsC,kBAAA,SAAAw1G,EAAAxE,GACA,OAAAtzG,EAAA+3G,uBAAAD,IACA93G,EAAAyzG,yBAAAH,IAGA78F,OChIA9b,MAAAkF,WAAA,2BAAA,CAAA,SAAA,KAAA,aAAA,iBAAA,mBAAA,kBACA,SAAAG,EAAAkI,EAAAlN,EAAAq9G,EAAAn2G,EAAA25B,GAEA,IAAAj1B,GAAA,EACAC,GAAA,EAEA,SAAA4P,IACAzW,EAAA6H,QAAA,EACA7H,EAAAs4G,eAAAD,EAAAx6E,WACA79B,EAAAg2D,cAAA,GACAh2D,EAAAizG,iBAAA/wG,EAAA27B,WACA31B,EAAAiD,IAAA,CAAAnL,EAAAs4G,eAAAl3G,SAAApB,EAAAizG,iBAAA7xG,WAAAC,KAAA,WACArB,EAAA4M,YAAAhS,QAAA2G,KAAAvB,EAAAs4G,gBACAt4G,EAAAu4G,gBAAA39G,QAAA2G,KAAAvB,EAAAs4G,gBACAt4G,EAAAg2D,cAAAp7D,QAAA2G,KAAAvB,EAAAizG,kBACAjzG,EAAAmzG,kBAAAv4G,QAAA2G,KAAAvB,EAAAizG,kBAEAjzG,EAAA6H,QAAA,IAIA7H,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAwI,GACA6P,MAIAzW,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,EAEAC,IACA4P,IACA5P,GAAA,IAIAD,GAAA,IAIA5G,EAAAozG,SAAA,WACA38F,KAGAzW,EAAAmkG,YAAA,SAAAqU,EAAAlF,GAEA,IAMAC,EANAvzG,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEA0wG,EAAA,EAEAvzG,EAAAy4G,uBAAAD,KACAjF,IAEA8E,EAAAhjG,UAAAmjG,EAAA,SAAAl3G,GACAtB,EAAA4M,YAAAhS,QAAA2G,KAAAD,GACAtB,EAAAu4G,gBAAA39G,QAAA2G,KAAAD,KAEAiyG,IAEAvzG,EAAA6C,UAAA,IAEA,SAAAmJ,KACAunG,IAEAvzG,EAAA6C,UAAA,GAGAg5B,EAAAiB,YACA9hC,EAAAM,QAAA,qCACAugC,EAAAkB,eAAA/wB,OAIAhM,EAAAyzG,yBAAAH,KACAC,IAEArxG,EAAA27B,WACAz8B,SAAAC,KAAA,SAAA26E,GAGAA,EAAA08B,oBAAApF,EAAAoF,oBACA18B,EAAA28B,sBAAArF,EAAAqF,sBACA38B,EAAAT,iBAAA+3B,EAAA/3B,iBACAS,EAAA48B,sCAAAtF,EAAAsF,sCACA58B,EAAA68B,iBAAAvF,EAAAuF,iBACA78B,EAAA88B,uCAAAxF,EAAAwF,uCACA98B,EAAA+8B,iCAAAzF,EAAAyF,iCACA/8B,EAAAg9B,8BAAA1F,EAAA0F,8BACAh9B,EAAAi9B,wCAAA3F,EAAA2F,wCACAj9B,EAAAk9B,6CAAA5F,EAAA4F,6CACAl9B,EAAAm9B,4CAAA7F,EAAA6F,4CACAn9B,EAAAo9B,kDAAA9F,EAAA8F,kDACAp9B,EAAAq9B,uDAAA/F,EAAA+F,uDACAr9B,EAAAs9B,mDAAAhG,EAAAgG,mDACAt9B,EAAAu9B,0CAAAjG,EAAAiG,0CACAv9B,EAAAw9B,oDAAAlG,EAAAkG,oDACAx9B,EAAAy9B,4CAAAnG,EAAAmG,4CACAz9B,EAAA09B,sCAAApG,EAAAoG,sCACA19B,EAAA29B,oCAAArG,EAAAqG,oCACA39B,EAAA49B,sCAAAtG,EAAAsG,sCACA59B,EAAA69B,+CAAAvG,EAAAuG,+CACA79B,EAAA89B,wCAAAxG,EAAAwG,wCACA99B,EAAA+9B,0CAAAzG,EAAAyG,0CACA/9B,EAAAg+B,oDAAA1G,EAAA0G,oDACAh+B,EAAAi+B,8CAAA3G,EAAA2G,8CACAj+B,EAAAk+B,6BAAA5G,EAAA4G,6BACAl+B,EAAAm+B,2CAAA7G,EAAA6G,2CACAn+B,EAAAo+B,4CAAA9G,EAAA8G,4CACAp+B,EAAAq+B,kDAAA/G,EAAA+G,kDACAr+B,EAAAs+B,qCAAAhH,EAAAgH,qCACAt+B,EAAAu+B,4CAAAjH,EAAAiH,4CACAv+B,EAAAw+B,4CAAAlH,EAAAkH,4CACAx+B,EAAAy+B,wDAAAnH,EAAAmH,wDACAz+B,EAAA0+B,wCAAApH,EAAAoH,wCACA1+B,EAAA2+B,gDAAArH,EAAAqH,gDACA3+B,EAAA4+B,oCAAAtH,EAAAsH,oCACA5+B,EAAA6+B,+BAAAvH,EAAAuH,+BAGA7+B,EAAA8+B,2CAAAxH,EAAAwH,2CACA9+B,EAAA++B,gDAAAzH,EAAAyH,gDACA/+B,EAAAg/B,wDAAA1H,EAAA0H,wDACAh/B,EAAAi/B,8CAAA3H,EAAA2H,8CACAj/B,EAAAk/B,oCAAA5H,EAAA4H,oCACAl/B,EAAAm/B,2CAAA7H,EAAA6H,2CACAn/B,EAAAo/B,gCAAA9H,EAAA8H,gCACAp/B,EAAAq/B,6CAAA/H,EAAA+H,6CACAr/B,EAAAs/B,uCAAAhI,EAAAgI,uCACAt/B,EAAAu/B,sCAAAjI,EAAAiI,sCACAv/B,EAAAw/B,yCAAAlI,EAAAkI,yCACAx/B,EAAAy/B,6CAAAnI,EAAAmI,6CACAz/B,EAAA0/B,qCAAApI,EAAAoI,qCACA1/B,EAAA2/B,qCAAArI,EAAAqI,qCACA3/B,EAAA4/B,8CAAAtI,EAAAsI,8CAEA5/B,EAAA6/B,sCAAAvI,EAAAuI,sCACA7/B,EAAA8/B,qCAAAxI,EAAAwI,qCACA9/B,EAAA+/B,sDAAAzI,EAAAyI,sDACA//B,EAAAggC,kDAAA1I,EAAA2I,kDAEAjgC,EAAAkgC,6CAAA5I,EAAA4I,6CAEAh6G,EAAAa,OAAAi5E,EAAA,SAAA16E,GACAtB,EAAAg2D,cAAAp7D,QAAA2G,KAAAD,GACAtB,EAAAmzG,kBAAAv4G,QAAA2G,KAAAD,KAEAiyG,IAEAvzG,EAAA6C,UAAA,IAEA,SAAAmJ,KACAunG,IAEAvzG,EAAA6C,UAAA,GAGAg5B,EAAAiB,YACA9hC,EAAAM,QAAA,qCACAugC,EAAAkB,eAAA/wB,WAMAhM,EAAAy4G,uBAAA,SAAAr6G,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAu4G,kBAGAv4G,EAAAyzG,yBAAA,SAAAr1G,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAmzG,oBAGAnzG,EAAAsC,kBAAA,SAAAk2G,EAAAlF,GACA,OAAAtzG,EAAAy4G,uBAAAD,IACAx4G,EAAAyzG,yBAAAH,OCpLA34G,MAAAkF,WAAA,uBAAA,CAAA,SAAA,KAAA,aAAA,mBAAA,uBAAA,kBAAA,aACA,SAAAG,EAAAkI,EAAAlN,EAAAkH,EAAAi6G,EAAAtgF,EAAA98B,GAEA,IAAA6H,GAAA,EACAC,GAAA,EAKA,SAAA4P,IACAzW,EAAA6H,QAAA,EACA7H,EAAAg2D,cAAA,GACAh2D,EAAAizG,iBAAA/wG,EAAA27B,WACA79B,EAAAo8G,kBAAAD,EAAAt+E,WACA31B,EAAAiD,IAAA,CAAAnL,EAAAo8G,kBAAAh7G,SAAApB,EAAAizG,iBAAA7xG,WAAAC,KAAA,WACArB,EAAAg2D,cAAAp7D,QAAA2G,KAAAvB,EAAAizG,kBACAjzG,EAAAmzG,kBAAAv4G,QAAA2G,KAAAvB,EAAAizG,kBACAjzG,EAAAq8G,sBAAAzhH,QAAA2G,KAAAvB,EAAAo8G,mBAEAp8G,EAAA6H,QAAA,IAbA7H,EAAA2xD,mBAAA5yD,EAAA4yD,mBACA3xD,EAAAo+E,4CAAAr/E,EAAA4yD,oBAAA5yD,EAAAs/E,yBAAA3sB,uBAgBA1xD,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAwI,GACA6P,MAIAzW,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,EAEAC,IACA4P,IACA5P,GAAA,IAIAD,GAAA,IAIA5G,EAAAozG,SAAA,WACA38F,KAGAzW,EAAAmkG,YAAA,SAAAmY,EAAAl+G,GAEA,IAMAm1G,EANAvzG,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEA0wG,EAAA,EAEAvzG,EAAAu8G,6BAAAD,KACA/I,IAEA4I,EAAAp5G,OAAAu5G,EAAA,SAAAh7G,GACAtB,EAAAo8G,kBAAA96G,EACAtB,EAAAq8G,sBAAAzhH,QAAA2G,KAAAvB,EAAAo8G,qBAEA7I,IAEAvzG,EAAA6C,UAAA,IAEA,SAAAmJ,KACAunG,IAEAvzG,EAAA6C,UAAA,GAGAg5B,EAAAiB,YACA9hC,EAAAM,QAAA,qCACAugC,EAAAkB,eAAA/wB,OAIAhM,EAAAyzG,yBAAAr1G,KACAm1G,IAEArxG,EAAA27B,WAAAz8B,SAAAC,KAAA,SAAAqyG,GAEA13B,EAAAphF,QAAA2G,KAAAmyG,GAGA13B,EAAAwgC,uBAAAp+G,EAAAo+G,uBACAxgC,EAAAygC,mBAAAr+G,EAAAq+G,mBACAzgC,EAAA0gC,0BAAAt+G,EAAAs+G,0BACA1gC,EAAAuuB,uBAAAnsG,EAAAmsG,uBACAvuB,EAAA2gC,8BAAAv+G,EAAAu+G,8BACA3gC,EAAAwuB,8BAAApsG,EAAAosG,8BACAxuB,EAAA4gC,mBAAAx+G,EAAAw+G,mBACA5gC,EAAAlxE,4BAAA1M,EAAA0M,4BACAkxE,EAAA6gC,sBAAAz+G,EAAAy+G,sBACA7gC,EAAAtxB,sBAAAtsD,EAAAssD,sBACAsxB,EAAA8gC,iCAAA1+G,EAAA0+G,iCACA9gC,EAAAyuB,8BAAArsG,EAAAqsG,8BACAzuB,EAAA+gC,yBAAA3+G,EAAA2+G,yBACA/gC,EAAAghC,yBAAA5+G,EAAA4+G,yBACAhhC,EAAAihC,gCAAA7+G,EAAA6+G,gCACAjhC,EAAAkhC,uBAAA9+G,EAAA8+G,uBACAlhC,EAAAmhC,yBAAA/+G,EAAA++G,yBACAnhC,EAAAohC,4BAAAh/G,EAAAg/G,4BACAphC,EAAAqhC,qBAAAj/G,EAAAi/G,qBACArhC,EAAAshC,+BAAAl/G,EAAAk/G,+BACAthC,EAAAuhC,wCAAAn/G,EAAAm/G,wCACAvhC,EAAAwhC,oBAAAp/G,EAAAo/G,oBACAxhC,EAAAyhC,6BAAAr/G,EAAAq/G,6BACAzhC,EAAA0hC,qBAAAt/G,EAAAs/G,qBACA1hC,EAAA2hC,2BAAAv/G,EAAAu/G,2BACA3hC,EAAA4hC,8BAAAx/G,EAAAw/G,8BACA5hC,EAAA6hC,wBAAAz/G,EAAAy/G,wBACA7hC,EAAA8hC,oCAAA1/G,EAAA0/G,oCACA9hC,EAAA+hC,8BAAA3/G,EAAA2/G,8BACA/hC,EAAAgiC,mBAAA5/G,EAAA4/G,mBACAhiC,EAAAiiC,6BAAA7/G,EAAA6/G,6BACAjiC,EAAAkiC,kBAAA9/G,EAAA8/G,kBACAliC,EAAA2mB,yBAAAvkG,EAAAukG,yBACA3mB,EAAAmiC,uBAAA//G,EAAA+/G,uBACAniC,EAAAoiC,4BAAAhgH,EAAAggH,4BACApiC,EAAAqiC,sBAAAjgH,EAAAigH,sBACAriC,EAAA6mB,uBAAAzkG,EAAAykG,uBACA7mB,EAAAsiC,gCAAAlgH,EAAAkgH,gCACAtiC,EAAA+mB,kBAAA3kG,EAAA2kG,kBACA/mB,EAAAuiC,+BAAAngH,EAAAmgH,+BACAviC,EAAAwiC,0BAAApgH,EAAAogH,0BACAxiC,EAAAyiC,sBAAArgH,EAAAqgH,sBACAziC,EAAA0iC,6BAAAtgH,EAAAsgH,6BACA1iC,EAAA2iC,gCAAAvgH,EAAAugH,gCACA3iC,EAAA4iC,6BAAAxgH,EAAAwgH,6BACA5iC,EAAA6iC,2BAAAzgH,EAAAygH,2BACA7iC,EAAA8iC,0BAAA1gH,EAAA0gH,0BACA9iC,EAAA+iC,sBAAA3gH,EAAA2gH,sBACA/iC,EAAAgjC,2BAAA5gH,EAAA4gH,2BACAhjC,EAAAijC,4BAAA7gH,EAAA6gH,4BACAjjC,EAAAkjC,iBAAA9gH,EAAA8gH,iBACAljC,EAAAmjC,uCAAA/gH,EAAA+gH,uCACAnjC,EAAAojC,mCAAAhhH,EAAAghH,mCACApjC,EAAAqjC,yBAAAjhH,EAAAihH,yBACArjC,EAAAsjC,4BAAAlhH,EAAAkhH,4BACAtjC,EAAAujC,wBAAAnhH,EAAAmhH,wBACAvjC,EAAA/lB,0BAAA73D,EAAA63D,0BACA+lB,EAAArwE,eAAAvN,EAAAuN,eACAqwE,EAAAmC,sBAAA//E,EAAA+/E,sBACAnC,EAAAtxB,sBAAAtsD,EAAAssD,sBACAsxB,EAAAuC,iBAAAngF,EAAAmgF,iBACAvC,EAAAwjC,uBAAAphH,EAAAohH,uBACAxjC,EAAAyjC,mCAAArhH,EAAAqhH,mCACAzjC,EAAA0jC,qBAAAthH,EAAAshH,qBACA1jC,EAAA2jC,mCAAAvhH,EAAAuhH,mCACA3jC,EAAA4jC,0BAAAxhH,EAAAwhH,0BACA5jC,EAAA6jC,mCAAAzhH,EAAAyhH,mCACA7jC,EAAA8jC,gBAAA1hH,EAAA0hH,gBACA9jC,EAAA5L,gCAAAhyE,EAAAgyE,gCACA4L,EAAA+jC,uBAAA3hH,EAAA2hH,uBACA/jC,EAAAgkC,sBAAA5hH,EAAA4hH,sBACAhkC,EAAAikC,uBAAA7hH,EAAA6hH,uBACAjkC,EAAAyC,sBAAArgF,EAAAqgF,sBACAzC,EAAAkkC,0BAAA9hH,EAAA8hH,0BACAlkC,EAAAmkC,oCAAA/hH,EAAA+hH,oCACAnkC,EAAAokC,wBAAAhiH,EAAAgiH,wBACApkC,EAAAqkC,oCAAAjiH,EAAAiiH,oCACArkC,EAAAskC,yCAAAliH,EAAAkiH,yCACAtkC,EAAAukC,uCAAAniH,EAAAmiH,uCAEAvkC,EAAAwkC,qBAAApiH,EAAAoiH,qBACAxkC,EAAAykC,yBAAAriH,EAAAqiH,yBACAzkC,EAAA0kC,4BAAAtiH,EAAAsiH,4BACA1kC,EAAA2kC,qBAAAviH,EAAAuiH,qBACA3kC,EAAA4kC,yBAAAxiH,EAAAwiH,yBACA5kC,EAAA6kC,qBAAAziH,EAAAyiH,qBACA7kC,EAAA8kC,gBAAA1iH,EAAA0iH,gBACA9kC,EAAA+kC,gBAAA3iH,EAAA2iH,gBACA/kC,EAAAglC,uBAAA5iH,EAAA4iH,uBACAhlC,EAAAilC,kCAAA7iH,EAAA6iH,kCACAjlC,EAAA0C,yBAAAtgF,EAAAsgF,yBAEA1C,EAAAklC,iCAAA9iH,EAAA8iH,iCACAllC,EAAAmlC,+BAAA/iH,EAAA+iH,+BACAnlC,EAAAolC,2BAAAhjH,EAAAgjH,2BACAplC,EAAAwpB,iCAAApnG,EAAAonG,iCACAxpB,EAAA0pB,mCAAAtnG,EAAAsnG,mCACA1pB,EAAAqlC,mCAAAjjH,EAAAijH,mCACArlC,EAAAslC,iCAAAljH,EAAAkjH,iCACAtlC,EAAA4pB,mCAAAxnG,EAAAwnG,mCACA5pB,EAAAulC,mCAAAnjH,EAAAmjH,mCACAvlC,EAAAwlC,iCAAApjH,EAAAojH,iCACAxlC,EAAAylC,+BAAArjH,EAAAqjH,+BACAzlC,EAAA0lC,2BAAAtjH,EAAAsjH,2BACA1lC,EAAA2lC,yBAAAvjH,EAAAujH,yBAEA3lC,EAAAogB,oBAAAh+F,EAAAg+F,oBACApgB,EAAAmgB,qBAAA/9F,EAAA+9F,qBAEAngB,EAAA4lC,oBAAAxjH,EAAAwjH,oBACA5lC,EAAA6lC,qBAAAzjH,EAAAyjH,qBACA7lC,EAAA8lC,8BAAA1jH,EAAA0jH,8BAEA9lC,EAAA+lC,iCAAA3jH,EAAA2jH,iCACA/lC,EAAAgmC,4BAAA5jH,EAAA4jH,4BACAhmC,EAAA4C,kBAAAxgF,EAAAwgF,kBACA5C,EAAAimC,mCAAA7jH,EAAA6jH,mCACAjmC,EAAAkmC,2BAAA9jH,EAAA8jH,2BACAlmC,EAAAmmC,kBAAA/jH,EAAA+jH,kBACAnmC,EAAAomC,+CAAAhkH,EAAAgkH,+CAEApmC,EAAAqmC,gCAAAjkH,EAAAikH,gCACArmC,EAAAsmC,wBAAAlkH,EAAAkkH,wBACAtmC,EAAAumC,0BAAAnkH,EAAAmkH,0BACAvmC,EAAAwmC,6BAAApkH,EAAAokH,6BAEAxmC,EAAAymC,gCAAArkH,EAAAqkH,gCACAzmC,EAAA0mC,8BAAAtkH,EAAAskH,8BACA1mC,EAAA2mC,0BAAAvkH,EAAAukH,0BACA3mC,EAAA4mC,mBAAAxkH,EAAAwkH,mBACA5mC,EAAA6mC,sBAAAzkH,EAAAykH,sBACA7mC,EAAA8mC,yBAAA1kH,EAAA0kH,yBACA9mC,EAAA+mC,sBAAA3kH,EAAA2kH,sBACA/mC,EAAAgnC,iCAAA5kH,EAAA4kH,iCACAhnC,EAAAinC,+BAAA7kH,EAAA6kH,+BACAjnC,EAAAknC,sBAAA9kH,EAAA8kH,sBACAlnC,EAAAmnC,uBAAA/kH,EAAA+kH,uBACAnnC,EAAAqgB,wBAAAj+F,EAAAi+F,wBACArgB,EAAAonC,oBAAAhlH,EAAAglH,oBACApnC,EAAAqnC,sBAAAjlH,EAAAilH,sBACArnC,EAAAsnC,4BAAAllH,EAAAklH,4BACAtnC,EAAAunC,0BAAAnlH,EAAAmlH,0BACAvnC,EAAA75E,sBAAA/D,EAAA+D,sBACA65E,EAAAwnC,aAAAplH,EAAAolH,aACAxnC,EAAAynC,kCAAArlH,EAAAqlH,kCAEAznC,EAAA0nC,4BAAAtlH,EAAAslH,4BACA1nC,EAAA2nC,mBAAAvlH,EAAAulH,mBACA3nC,EAAA4nC,6BAAAxlH,EAAAwlH,6BACA5nC,EAAA6nC,mCAAAzlH,EAAAylH,mCACA7nC,EAAA8nC,8BAAA1lH,EAAA0lH,8BAEA5hH,EAAAa,OAAAi5E,EAAA,SAAA16E,GACAtB,EAAAg2D,cAAAp7D,QAAA2G,KAAAD,GACAtB,EAAAmzG,kBAAAv4G,QAAA2G,KAAAD,KAEAiyG,IAEAvzG,EAAA6C,UAAA,IAEA,SAAAmJ,KACAunG,IAEAvzG,EAAA6C,UAAA,GAGAg5B,EAAAiB,YACA9hC,EAAAM,QAAA,qCACAugC,EAAAkB,eAAA/wB,WAMAhM,EAAAyzG,yBAAA,SAAAr1G,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAmzG,oBAGAnzG,EAAAu8G,6BAAA,SAAAn+G,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAq8G,wBAGAr8G,EAAAsC,kBAAA,SAAA85G,EAAA9I,GACA,OAAAtzG,EAAAu8G,6BAAAH,IACAp8G,EAAAyzG,yBAAAH,IAGAtzG,EAAA+jH,sBAAA,WACA7hH,EAAA8hH,0BCrRArpH,MAAAkF,WAAA,eAAA,CAAA,SAAA,cAAA,aAAA,mBACA,SAAAG,EAAAmD,EAAApE,EAAAmD,GAEAlC,EAAA6B,KAAA,CACA,CACAxG,MAAA,WACAyG,SAAA,2CAGAqB,EAAAU,SAAA,kBACA7D,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,kBACAyG,SAAA,+CAGA/C,EAAA4yD,qBAEA3xD,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,qBACAyG,SAAA,iDAGA9B,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,uBACAyG,SAAA,mDAGA9B,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,+BACAyG,SAAA,2DAGA9B,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,uBACAyG,SAAA,mDAGA9B,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,sBACAyG,SAAA,kDAGA9B,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,sCACAyG,SAAA,+DAGA9B,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,8BACAyG,SAAA,0DAGA9B,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,gBACAyG,SAAA,8CAKAI,EAAA27B,WAAAz8B,SAAAC,KAAA,SAAA4iH,GACAA,EAAA9hH,wBAAApD,EAAA4yD,oBACA3xD,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,0BACAyG,SAAA,wDAKA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,EAAAC,SAAAA,SCvEApL,MAAAkF,WAAA,iBAAA,CAAA,SAAA,aAAA,UAAA,gBACA,SAAAG,EAAAhF,EAAAoN,EAAA87G,GAEAlkH,EAAAM,aAAA,CACAu2G,SAAA,CACAzR,eAAA,GAEA7kG,QAAA,CACA,CAAAC,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAo2G,WAAA,GACA,CACAt2G,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBACAoF,SAAA,OAAAjE,OAAA,qBACAmE,UAAA,OACAD,MAAA,SACA,CACAH,UAAA,YACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAAkpE,YAEAtxE,MAAA,SAEA,CAAAH,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,qBAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,UACA,CAAAF,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,UAEAs/D,QAAA,CACA82C,WAAA,CAAA,CACAhsG,OAAA,UACAisG,YAAA,MACAC,cAAA,MACAC,eAAA,GACA,CACAnsG,OAAA,YACAisG,YAAA,MACAC,cAAA,IACAC,eAAA,EACAC,aAAA,UAGAC,uBAAA,CACA,CACAC,YAAA,EACAz2G,UAAA,UAKAZ,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAmkH,WAAAD,EAAAv/F,QAAA,KAGA3kB,EAAAmkH,WAAAD,EAAAv/F,YCrDAhqB,MAAAkF,WAAA,oBAAA,CAAA,SAAA,KAAA,aAAA,mBAAA,kBAAA,aACA,SAAAG,EAAAkI,EAAAlN,EAAAkH,EAAA25B,EAAA98B,GAEA,IAAA6H,GAAA,EACAC,GAAA,EAIA,SAAA4P,IACAzW,EAAA6H,QAAA,EACA7H,EAAAg2D,cAAA,GACAh2D,EAAAizG,iBAAA/wG,EAAA27B,WACA31B,EAAAiD,IAAA,CAAAnL,EAAAizG,iBAAA7xG,WAAAC,KAAA,WACArB,EAAAg2D,cAAAp7D,QAAA2G,KAAAvB,EAAAizG,kBACAjzG,EAAAmzG,kBAAAv4G,QAAA2G,KAAAvB,EAAAizG,kBAEAjzG,EAAA6H,QAAA,IAVA7H,EAAA2xD,mBAAA5yD,EAAA4yD,mBAcA3xD,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAwI,GACA6P,MAIAzW,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,EAEAC,IACA4P,IACA5P,GAAA,IAIAD,GAAA,IAIA5G,EAAAozG,SAAA,WACA38F,KAGAzW,EAAAmkG,YAAA,SAAA/lG,GAEA,IAMAm1G,EANAvzG,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEA0wG,EAAA,EAEAvzG,EAAAyzG,yBAAAr1G,KACAm1G,IAEArxG,EAAA27B,WAAAz8B,SAAAC,KAAA,SAAAqyG,GAEA13B,EAAAphF,QAAA2G,KAAAmyG,GAGA13B,EAAAooC,sBAAAhmH,EAAAgmH,sBACApoC,EAAAqoC,oBAAAjmH,EAAAimH,oBACAroC,EAAAsoC,4BAAAlmH,EAAAkmH,4BACAtoC,EAAAuoC,0BAAAnmH,EAAAmmH,0BACAvoC,EAAAwoC,2BAAApmH,EAAAomH,2BACAxoC,EAAAyoC,oBAAArmH,EAAAqmH,oBACAzoC,EAAA0oC,oBAAAtmH,EAAAsmH,oBACA1oC,EAAA2oC,yBAAAvmH,EAAAumH,yBAEA3oC,EAAA4oC,gBAAAxmH,EAAAwmH,gBACA5oC,EAAA6oC,eAAAzmH,EAAAymH,eACA7oC,EAAA8oC,sBAAA1mH,EAAA0mH,sBACA9oC,EAAA+oC,oBAAA3mH,EAAA2mH,oBACA/oC,EAAAgpC,sBAAA5mH,EAAA4mH,sBACAhpC,EAAAipC,sBAAA7mH,EAAA6mH,sBACAjpC,EAAAkpC,mBAAA9mH,EAAA8mH,mBAEAhjH,EAAAa,OAAAi5E,EAAA,SAAA16E,GACAtB,EAAAg2D,cAAAp7D,QAAA2G,KAAAD,GACAtB,EAAAmzG,kBAAAv4G,QAAA2G,KAAAD,KAEAiyG,IAEAvzG,EAAA6C,UAAA,IAEA,SAAAmJ,KACAunG,IAEAvzG,EAAA6C,UAAA,GAGAg5B,EAAAiB,YACA9hC,EAAAM,QAAA,qCACAugC,EAAAkB,eAAA/wB,WAMAhM,EAAAyzG,yBAAA,SAAAr1G,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAmzG,oBAGAnzG,EAAAsC,kBAAA,SAAAgxG,GACA,OAAAtzG,EAAAyzG,yBAAAH,IAGAtzG,EAAA+jH,sBAAA,WACA7hH,EAAA8hH,0BC/GArpH,MAAA4T,UAAA,qBAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAArQ,GACA,GAAAA,EACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,SAAAwJ,EAAAtQ,GACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EAEApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,wBACA,CAAApC,GAAA,EAAAoC,KAAA,2BACA,CAAApC,GAAA,EAAAoC,KAAA,sBACA,CAAApC,GAAA,EAAAoC,KAAA,uBACA,CAAApC,GAAA,EAAAoC,KAAA,4BACA,CAAApC,GAAA,EAAAoC,KAAA,sBACA,CAAApC,GAAA,EAAAoC,KAAA,uBACA,CAAApC,GAAA,EAAAoC,KAAA,2BAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAvP,EAAAmQ,WAEA,QC5EArV,MAAA4T,UAAA,qBAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAArQ,GACA,GAAAA,EACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,SAAAwJ,EAAAtQ,GACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,wCACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAAP,EAAAisC,SACAzrC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,uCACA,CAAApC,GAAA,EAAAoC,KAAA,+BAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAA5Q,OAAAb,UAAA+3B,mBAAAtmB,GACA,KAEAC,SAAAD,KAIAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAA,OAAAA,EACAA,EAEAA,EAAA,KAIAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,cAGA,QClEAzU,MAAA4T,UAAA,uBAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GAEA,SAAAyT,EAAA4I,GACA,GAAAA,EAEA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,SAAAwJ,EAAA2I,GACA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAIA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACA8e,SAAA,EACA7e,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GACA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAI,yBAAA,EACAf,aAAAA,EACAC,gBAAAA,EACAtQ,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,eACA,CAAApC,GAAA,GAAAoC,KAAA,eACA,CAAApC,GAAA,EAAAoC,KAAA,eACA,CAAApC,GAAA,EAAAoC,KAAA,kBAIA6J,EAAAqe,GAAA,SAAA,SAAAlyB,GACA8G,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAApyB,EAAA4zB,SAIA9sB,EAAA6D,OAAAmJ,EAAAye,QAAA,SAAAuuD,EAAAC,GACA9sE,EAAAJ,GAAAK,QAAA,MAAA4sE,GAAA,KACA,GAEAjtE,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAqT,EAAAorC,UACAp4C,EAAA6D,OAAAmJ,EAAAorC,SAAA,SAAA/T,GACAt3B,EAAAK,QAAA,WAAAi3B,MAGA,QC9DA1rC,MAAA4T,UAAA,uBAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAArQ,GACA,GAAAA,EACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,SAAAwJ,EAAAtQ,GACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EAEApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,qCACA,CAAApC,GAAA,EAAAoC,KAAA,qBACA,CAAApC,GAAA,EAAAoC,KAAA,uBACA,CAAApC,GAAA,EAAAoC,KAAA,mCAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAvP,EAAAmQ,WAEA,QCxEArV,MAAA4T,UAAA,0BAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAArQ,GACA,GAAAA,EACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,SAAAwJ,EAAAtQ,GACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EAEApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,gCACA,CAAApC,GAAA,EAAAoC,KAAA,iCACA,CAAApC,GAAA,EAAAoC,KAAA,gCAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAA,GAAAA,EACA,OACA,GAAAA,EACA,QAEA,OAIAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,MAAA,SAAAA,EACA,IACA,UAAAA,EACA,IAEA,MAIAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAvP,EAAAmQ,WAEA,QC3EArV,MAAA4T,UAAA,sBAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAArQ,GACA,GAAAA,EACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,SAAAwJ,EAAAtQ,GACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EAEApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,QACA,CAAApC,GAAA,EAAAoC,KAAA,WAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAvP,EAAAmQ,WAEA,QCtEArV,MAAA4T,UAAA,sBAAA,CAAA,WAAA,aAAA,cACA,SAAAC,EAAAxT,EAAAoxG,GACA,SAAA39F,EAAAnN,GACA,GAAAA,EAEA,MAAA,oEAAAA,EAAA41D,SAAA,OAGA,SAAAxoD,EAAApN,GACA,MAAA,oEAAAA,EAAA41D,SAAA,OAGA,MAAA,CACAvoD,SAAA,IACAC,QAAA,UACAC,SAAA,EACA6e,SAAA,EACA5e,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEA,IAAAC,EAAAk9F,EAAAllG,aAAA,GAAA,GAEAsH,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CAEA+1G,kBAAA,yBACA12G,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACA1M,GAAA,SAAAxB,GACA,OAAA0N,EAAAo2G,WACA9jH,EAAA41D,SAEA51D,EAAA+E,UAEAjI,KAAA8Q,IAGAD,EAAAe,YAGAf,EAAAe,QAAA,WACAd,EAAA9N,SAAAC,KAAA,WACA8N,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,eAIAlB,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,UCrDAhB,MAAA8gC,QAAA,wBAAA,CAAA,YAAA,gBACA,SAAAC,EAAAE,GACA,IAAAypF,EAAA3pF,EAAA,8BAAA,GAAA,CACAztB,IAAA,CAAAwuB,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,+BACA35B,OAAA,CAAA05B,OAAA,OAAAC,IAAA,oCAgBA,MAAA,CACAmB,SAdA,WACA,OAAAjC,EAAAkC,UAAA,MAAAunF,EAAA,KAcAtiH,OAXA,SAAA3E,EAAAigC,EAAAC,GACA1C,EAAA74B,OACAsiH,EACA,KACAjnH,EACAigC,EACAC,QCjBA3jC,MAAA8gC,QAAA,aAAA,CAAA,YAAA,gBACA,SAAAC,EAAAE,GACA,IAAA0pF,EAAA5pF,EAAA,wBAAA,GAAA,CACAztB,IAAA,CAAAwuB,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,6BACA35B,OAAA,CAAA05B,OAAA,MAAAC,IAAA,6BACA0B,OAAA,CAAA3B,OAAA,SAAAC,IAAA,+BAsBA,MAAA,CACAnb,QApBA,SAAAze,GACA,OAAAwiH,EAAA,IAAA,CAAAxiH,GAAAA,KAoBAC,OAjBA,SAAAzB,GACA,OAAAs6B,EAAAkE,oBACA,SACAwlF,EACA,CAAAxiH,GAAAxB,EAAAwB,IACAxB,IAaAM,OAVA,SAAAkB,GACA,OAAA84B,EAAAiE,aACA,SACAylF,EACA,CAAAxiH,GAAAA,SCtBAnI,MAAA8gC,QAAA,uBAAA,CAAA,YAAA,aAAA,KAAA,kBAAA,gBACA,SAAAC,EAAA1gC,EAAAkN,EAAA2zB,EAAAD,GAEA,IAAA2pF,EAAA7pF,EAAA,yBAAA,GAAA,CACA4H,MAAA,CAAA7G,OAAA,MAAAhN,SAAA,GACA9K,OAAA,CAAA8X,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,mCAGA46E,EAAA,KASA,MAAA,CACA3yF,OARA,SAAAphB,GAIA,OAFA+zG,GADAA,GAAA/zG,EACAq4B,EAAAkC,UAAA,SAAAynF,GAEAjO,OChBA38G,MAAA8gC,QAAA,uBAAA,CAAA,YAAA,gBACA,SAAAC,EAAAE,GACA,IAAA4pF,EAAA9pF,EAAA,6BAAA,GAAA,CACAztB,IAAA,CAAAwuB,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,8BACA35B,OAAA,CAAA05B,OAAA,OAAAC,IAAA,mCAgBA,MAAA,CACAmB,SAdA,WACA,OAAAjC,EAAAkC,UAAA,MAAA0nF,EAAA,KAcAziH,OAXA,SAAA3E,EAAAigC,EAAAC,GACA1C,EAAA74B,OACAyiH,EACA,KACApnH,EACAigC,EACAC,QCjBA3jC,MAAA8gC,QAAA,kBAAA,CAAA,YAAA,gBACA,SAAAC,EAAAE,GACA,IAAA6pF,EAAA/pF,EAAA,wBAAA,GAAA,CACAztB,IAAA,CAAAwuB,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,yBACA35B,OAAA,CAAA05B,OAAA,OAAAC,IAAA,8BAgBA,MAAA,CACAmB,SAdA,WACA,OAAAjC,EAAAkC,UAAA,MAAA2nF,EAAA,KAcA1iH,OAXA,SAAA3E,EAAAigC,EAAAC,GACA1C,EAAA74B,OACA0iH,EACA,KACArnH,EACAigC,EACAC,QCfA3jC,MAAA8gC,QAAA,gBAAA,CAAA,YAAA,aAAA,KAAA,kBAAA,gBACA,SAAAC,EAAA1gC,EAAAkN,EAAA2zB,EAAAD,GAEA,IAAA6gD,EAAA/gD,EAAA,kBAAA,GAAA,CACA4H,MAAA,CAAA7G,OAAA,MAAAhN,SAAA,GACA9K,OAAA,CAAA8X,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,4BAGAynF,EAAA,KASA,MAAA,CACAx/F,OARA,SAAAphB,GAIA,OAFA4gH,GADAA,GAAA5gH,EACAq4B,EAAAkC,UAAA,SAAA2+C,GAEA0nC,OChBAxpH,MAAAkF,WAAA,qCAAA,CAAA,SAAA,UACA,SAAAG,EAAAmI,GAEAnI,EAAAsB,MAAA,CACAqT,WAAA3U,EAAA2U,WACAoF,KAAAhe,SAAA6U,QAAA,SAAAC,SAAA,EAAA,UAAAD,QAAA,SAAA1U,SACA8d,GAAAje,SAAA6U,QAAA,SAAAC,SAAA,EAAA,OAAAuW,MAAA,SAAAlrB,UAIA8D,EAAA0lH,cAAA,SAAApkH,GAEAtB,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEA7C,EAAA0C,QAEA1C,EAAA2lH,aACAx9G,EAAAuC,KAAA,kDAAApJ,EAAAqT,WAAA,cAAArT,EAAAyY,KAAAsN,SAAA,YAAA/lB,EAAA0Y,GAAAqN,SACA,SAAA,iHACArnB,EAAA4lH,cACAz9G,EAAAuC,KAAA,2DAAApJ,EAAAqT,WAAA,cAAArT,EAAAyY,KAAAsN,SAAA,YAAA/lB,EAAA0Y,GAAAqN,SACA,SAAA,iHAEAlf,EAAAuC,KAAA,8CAAApJ,EAAAqT,WAAA,cAAArT,EAAAyY,KAAAsN,SAAA,YAAA/lB,EAAA0Y,GAAAqN,SACA,SAAA,mHAIArnB,EAAA6lH,oBAAA,SAAAvkH,GAEAtB,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEA7C,EAAA0C,QAEA1C,EAAA2lH,cACAx2G,EAAA,uBAAAvN,SACAuN,EAAA,QAAAq2B,OAAA,uFAAAlkC,EAAAqT,WAAA,cAAArT,EAAAyY,KAAAsN,SAAA,YAAA/lB,EAAA0Y,GAAAqN,SAAA,iDACArnB,EAAA4lH,eACAz2G,EAAA,uBAAAvN,SACAuN,EAAA,QAAAq2B,OAAA,gGAAAlkC,EAAAqT,WAAA,cAAArT,EAAAyY,KAAAsN,SAAA,YAAA/lB,EAAA0Y,GAAAqN,SAAA,kDAEAlY,EAAA,uBAAAvN,SACAuN,EAAA,QAAAq2B,OAAA,mFAAAlkC,EAAAqT,WAAA,cAAArT,EAAAyY,KAAAsN,SAAA,YAAA/lB,EAAA0Y,GAAAqN,SAAA,sDChDA1sB,MAAAkF,WAAA,0BAAA,CAAA,SAAA,QAAA,KAAA,SAAA,aAAA,UAAA,gBACA,uBAAA,cACA,SAAAG,EAAA27B,EAAAzzB,EAAAjI,EAAAjF,EAAAoN,EAAAiD,EACAy6G,EAAAz9G,GAEArI,EAAAM,aAAA,CACAwE,KAAA,sBACAvE,QAAA,CACA,CACAC,UAAA,gBACAC,QAAAzF,EAAAM,QAAA,oBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,gBAAAA,CAAAW,EAAAg9G,gBAEAplH,MAAA,QAEA,CAAAH,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,YAAAoF,SAAA,SAAAE,UAAA,OACA,CAAAJ,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAjE,OAAA,CAAAb,KAAA,SAAA+E,MAAA,QACA,CAAAH,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,OAAAjE,OAAA,CAAAb,KAAA,SAAA+E,MAAA,QACA,CAAAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,0BAAAoF,SAAA,SAAAC,MAAA,QACA,CAAAH,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UAAAC,MAAA,UAKAX,EAAAgmH,oBAAAF,EAAA5+G,aAGA,GAEAlH,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAAwkH,EAAApkH,YACAP,EAAAK,UAQA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,wDACA4B,OANAxB,EAAA2B,YAAA,SAAAvD,GACA0nH,EAAAlkH,OAAAxD,KAMA4D,MAAAhC,EAAAiC,YCtDAtH,MAAAkF,WAAA,gCAAA,CAAA,SAAA,QAAA,KAAA,SAAA,aAAA,UAAA,gBACA,uBACA,SAAAG,EAAA27B,EAAAzzB,EAAAjI,EAAAjF,EAAAoN,EAAAiD,EAAAy6G,GAEA9lH,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAA6C,UAAA,EAEA7C,EAAAwC,aAAA,SAAAlB,GAUA,SAAAmB,IACAzC,EAAA6C,UAAA,EACA7C,EAAA0C,QAGA,SAAAC,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EAfA4B,EAAA6C,UAAA,EAEAvB,EAAA2kH,oBAGAH,EAAA/iH,OAAAzB,EAAAmB,EAAAE,GAFAmjH,EAAA9iH,OAAA1B,EAAAmB,EAAAE,OCjBAhI,MAAAkF,WAAA,oCAAA,CAAA,SAAA,SAAA,mCAAA,gBACA,SAAAG,EAAAC,EAAAimH,EAAA76G,GAEA,IAAAzE,GAAA,EACAC,GAAA,EACA28F,EAAAznG,SAAA6U,QAAA,WACAu1G,EAAA,KAEAnmH,EAAAsB,MAAA,GACA,IAAAe,EAAA,GAKA,SAAAohG,EAAA2iB,EAAAC,EAAAziB,GACA5jG,EAAAsC,oBAoBAmU,EAAA4vG,EAAAziB,GAnBAv4F,EAAA6B,eAAA,CACA7R,MAAA,mBACA8R,QAAA,kCACAC,QAAA,CAAA,CACAlI,KAAA,aACAE,SAAA,WACAqR,EAAA4vG,EAAAziB,KAEA,CACA1+F,KAAA,eACAE,SAAA,WACAy+F,EAAA7jG,EAAAsB,MAAA8kH,EAAA,WACA3vG,EAAA4vG,EAAAziB,UAWA,SAAAntF,EAAAwlB,EAAArgC,GACAqgC,GAAArgC,IACAoE,EAAA6H,QAAA,EACAq+G,EAAApiB,SAAA7nE,EAAAtnB,WAAA/Y,GAAAyF,KACA,SAAAjD,GACA4B,EAAA6H,QAAA,EACAs+G,EAAAlqF,EACAunE,EAAAznG,OAAAH,GAAAgV,QAAA,WACA5Q,EAAAsB,MAAA7B,OAAA,EACAO,EAAAsB,MAAAnD,KAAAsf,MAAAzd,EAAAsB,MAAAlD,GACAiE,EAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAuF,GAAA,GACA,SAAAlE,GACA3C,EAAA6H,QAAA,EACAs+G,EAAA,KACA3iB,EAAAznG,OAAAH,GAAAgV,QAAA,WACA5Q,EAAAsB,MAAA7B,OAAA,EAGAoH,IADAxE,EAAA,OAkCA,SAAAwhG,EAAAviG,EAAA26B,EAAA72B,GACApF,EAAAsC,qBAAAtC,EAAA6H,QAAA7H,EAAA6C,WAAAsjH,IAEAnmH,EAAA6C,UAAA,EAEAqjH,EAAAniB,SAAA9nE,EAAAtnB,WAAA6uF,EAAAliG,GAAAD,KACA,SAAAjD,GAEAiE,EAAAzH,QAAA2G,KAAAvB,EAAAsB,OACAtB,EAAA6C,UAAA,EACAuC,GACAA,KAGA,SAAAzC,GACA3C,EAAA6C,UAAA,EACAwI,EAAA6B,eAAA,CACA7R,MAAA,oCACA8R,QAAAxK,EAAAwK,QACAC,QAAA,CAAA,CACAlI,KAAA,aACAE,SAAA,WACAA,GACAA,YAxGApF,EAAA6H,QAAA,EACA7H,EAAA6C,UAAA,EAoDA7C,EAAA/E,IAAA,2BAAA,SAAA4F,EAAAylH,GACAA,EACA1/G,GACAu/G,GAAAG,GACA7iB,EAAA0iB,EAAAG,EAAA9iB,GAKAxjG,EAAAsB,MAAA7B,OAAA,EAGA0mH,EAAAG,IAGAtmH,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAAs/G,GACA1vG,EAAA0vG,EAAA3iB,IAIA58F,GAAA,IAsCA5G,EAAAikG,iBAAA,CACA1gF,eAAA,SAAA5nB,GACAuoG,EAAAnoG,OAAAJ,EAAAA,OAAAiV,QAAA,WAEAszF,EAAA5lF,OAAAklF,IACAC,EAAA0iB,EAAAA,EAAAjiB,KAKAlkG,EAAAsC,kBAAA,WACA,OAAA1H,QAAA2H,OAAAvC,EAAAsB,MAAAe,IAGArC,EAAAmkG,YAAA,SAAA7iG,GACAuiG,EAAAviG,EAAA6kH,IAGAnmH,EAAAokG,cAAA,WACA3tF,EAAA0vG,EAAA3iB,IAGAxjG,EAAAqkG,mBAAA,WACA,QAAArkG,EAAA6H,QAAA7H,EAAA6C,WAAAsjH,IAAA3iB,IA0CA,IAAAc,EAAArkG,EAAA,CACAL,YAAA,4CACA4B,OAzCAxB,EAAAukG,iBAAA,SAAAjjG,GAEAtB,EAAA6C,UAAA,EACAyhG,EAAAljG,SAAAC,KAAA,WACAijG,EAAAtkG,OAAAsB,MAAA,CACAyY,KAAAhe,SAAA6U,QAAA,QAAA1U,SACA8d,GAAAje,SAAAqrB,MAAA,QAAAxW,QAAA,OAAA1U,UAEAooG,EAAAtkG,OAAAwkG,WAAA,WACAxkG,EAAA6C,UAAA,GAEAyhG,EAAAtkG,OAAAykG,QAAA,SAAAC,GACAwhB,EAAAvhB,0BACAwhB,EAAAxxG,WACA+vF,EAAA3qF,KACA2qF,EAAA1qF,GACA1Y,GAAAD,KACA,SAAAjD,GACAiE,EAAAzH,QAAA2G,KAAAvB,EAAAsB,OACAtB,EAAA6C,UAAA,GAEA,SAAAF,GACA3C,EAAA6C,UAAA,EACAwI,EAAA6B,eAAA,CACA7R,MAAA,oCACA8R,QAAAxK,EAAAwK,QACAC,QAAA,CAAA,CACAlI,KAAA,oBAOAo/F,EAAA9iG,WAQAQ,MAAAhC,EAAAiC,YClMAtH,MAAAkF,WAAA,gBAAA,CAAA,SAAA,SAAA,aAAA,UAAA,KAAA,cAAA,cAAA,mBAAA,cAAA,WACA,SAAAG,EAAAC,EAAAjF,EAAAoN,EAAAF,EAAAqlC,EAAApqC,EAAAjB,EAAAmG,EAAAyb,GAOA,SAAAC,IACA7b,EAAAiD,IAAA,CAAAnL,EAAAikB,OAAA7iB,SAAApB,EAAAumH,aAAAnlH,WAAAC,KAAA,WACA,IAIAgtF,EAJAruF,EAAAokB,aAAAoiG,eAAA/mH,QAIA4uF,GAAA,IAAAruF,EAAAokB,aAAAoiG,eAAAz2G,SAAA,GAEA/P,EAAAwtC,UAAA/tC,OAAA,EACAO,EAAAwtC,UAAArvC,KAAAsf,MAAAzd,EAAAwtC,UACApxC,EAAAkoB,OAAAtkB,EAAAumH,aAAA,SAAAj0G,GACA,OAAA+7E,GACA/7E,EAAA2R,OAAAxkB,OAGA,EAAArD,EAAAmyF,aAAAj8E,EAAA2R,OAAAjkB,EAAAokB,aAAAoiG,gBAAA/mH,YAZAO,EAAAwtC,UAAA/tC,OAAA,EACAO,EAAAwtC,UAAArvC,KAAAsf,MAAAzd,EAAAwtC,UAAAxtC,EAAAumH,iBAqBA,SAAAE,EAAAroH,EAAAunH,EAAAC,GACAc,EAAAtlH,SAAAC,KAAA,WACAqlH,EAAA1mH,OAAA2U,WAAAvW,EAAAuW,WACA+xG,EAAA1mH,OAAA4lH,cAAAA,EACAc,EAAA1mH,OAAA2lH,aAAAA,EACAe,EAAAllH,SAIA,SAAAojG,EAAAxmG,GACA4B,EAAAmmH,iBAAA/nH,EACA4B,EAAA2D,WAAA,2BAAA3D,EAAAmmH,kBAzCAnmH,EAAAikB,OAAAH,EAAA5c,aAAA,GACAlH,EAAAokB,aAAA,CAAAoiG,eAAA,IACAxmH,EAAAumH,aAAA,GACAvmH,EAAAwtC,UAAA,GAuBAxtC,EAAA6F,OAAA,8BAAA,SAAAC,EAAAC,GACAge,MACA,GAgBA/jB,EAAA0qD,sBAAAxoD,EAAAE,SAAAsoD,sBACA1qD,EAAAmC,sBAAAD,EAAAE,SAAAD,sBAEAnC,EAAAM,aAAA,CACAwE,KAAA,YACAvE,QAAA,CACA,CAAAC,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UAAAC,MAAA,QACA,CACAH,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,QAAAC,UAAA,MACAgI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAQ,kBAAAzK,EAAA,OAAA,UAAA,gBAEA,CAAAoC,UAAA,iBAAAC,QAAAzF,EAAAM,QAAA,2BAAAoF,SAAA,UACA,CAAAF,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAC,MAAA,SACA,CACAH,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAAo5C,QAEAxhD,MAAA,SAEA,CAAAH,UAAA,kBAAAC,QAAAzF,EAAAM,QAAA,0BAAAoF,SAAA,UAAAC,MAAA,OAAAukB,QAAAllB,EAAAmC,uBACA,CAAA3B,UAAA,wBAAAC,QAAAzF,EAAAM,QAAA,mCAAAoF,SAAA,UAAAC,MAAA,OAAAukB,QAAAllB,EAAA0qD,uBACA,CAAAlqD,UAAA,aAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,UAAAC,MAAA,SAEAsE,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,sCACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,uBAAAV,EAAAU,SAAA,YACAuB,SAAA,SAAAhH,GAAAqoH,EAAAroH,GAAA,GAAA,KACA,CACA8G,KAAAlK,EAAAM,QAAA,sDACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,uBAAAV,EAAAU,SAAA,YACAuB,SAAA,SAAAhH,GAAAqoH,EAAAroH,GAAA,GAAA,KACA,CACA8G,KAAAlK,EAAAM,QAAA,2CACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,uBAAAV,EAAAU,SAAA,YAAA3B,EAAAE,SAAA+7E,uBACA/4E,SAAA,SAAAhH,GAAAqoH,EAAAroH,GAAA,GAAA,OAIA4B,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAumH,aAAAh5E,EAAA6kE,kBAAA,GACAxN,EAAA,QAGA5kG,EAAAumH,aAAAh5E,EAAA6kE,kBAAA,GAEAruF,IAEA/jB,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,4CAIAI,EAAAE,SAAAs8E,0BAEA1+E,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,4BACAyG,SAAA,2DAIA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,EAAAC,SAAAA,MAGA/F,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAA2F,WAAA3F,EAAAumH,aACAplH,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAAuH,OAAA,WACAwc,KAEA5iB,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAA2F,WAAA3F,EAAAumH,aACAplH,EAAAnB,OAAAsB,MAAAisC,EAAA7rC,YACAP,EAAAnB,OAAAuH,OAAA,WACAwc,KAEA5iB,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACAmvC,EAAA3rC,OAAAxD,EAAA,WACA2lB,KACA,KAAA/jB,EAAAumH,eAOA,IAAAplH,EAAAlB,EAAA,CACAL,YAAA,wCACA4B,OANAxB,EAAAiB,cAAA,SAAA7C,GACAwmG,EAAAxmG,KAMA4D,MAAAhC,EAAAiC,SAGAykH,EAAAzmH,EAAA,CACAL,YAAA,0DACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YC/JAtH,MAAAkF,WAAA,sBAAA,CAAA,SAAA,WAAA,aAAA,cAAA,kBAAA,cAAA,aAAA,mBACA,SAAAG,EAAAwO,EAAAxT,EAAAuyC,EAAA1R,EAAAuwE,EAAArtG,EAAAmD,GAEAlC,EAAAyxD,YAAA,EAAA1yD,EAAA+uC,kBAAAruC,OACAO,EAAAmC,sBAAAD,EAAAE,SAAAD,sBAEA,IAAAwkH,EAAA,igHACA3mH,EAAA4mH,WAAA,kGAEA5mH,EAAAu/E,IAAA,CACAktB,MAAA,GACAC,aAAAia,GAGA3mH,EAAA0qD,sBAAAxoD,EAAAE,SAAAsoD,sBAEA1qD,EAAA+sG,mBAAA,WACA/sG,EAAA2sG,cAAA,GAGA3sG,EAAAgtG,iBAAA,WACAhtG,EAAA2sG,cAAA,EACA9wE,EAAAiB,YACA9hC,EAAAM,QAAA,iCACAN,EAAAM,QAAA,sCAGA0E,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,iDACAmH,KAAA,QAEA,CACA5N,MAAA,oBACAyG,SAAA,sDACAmH,KAAA,aAEA,CACA5N,MAAA,iBACAyG,SAAA,mDACAmH,KAAA,UAEA,CACA5N,MAAA,kBACAyG,SAAA,oDACAmH,KAAA,YAIAjJ,EAAAyxD,aACAzxD,EAAAiG,WAAA9H,KAAA,CACA9C,MAAA,6BACAyG,SAAA,+DACAmH,KAAA,cAIA/G,EAAAE,SAAAs8E,0BAEA1+E,EAAAiG,WAAA9H,KAAA,CACA9C,MAAA,sBACAyG,SAAA,oDACAmH,KAAA,YAIAjJ,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAiG,WAAAlE,UAAA,EAEA,IAAAgjG,GAAA,EAIAC,EAFAhlG,EAAA6mH,gBAAA,KAGA7mH,EAAAklG,eAAA,CACA7hF,eAAA,CACAF,WAAA,mBAEAX,OAAA,IACA8zE,cAAA,OACAtxE,QAAA,KACAuxE,UAAA,kBACAvhF,UAAA,CACA66B,KAAA,WACAs1D,WAAA,GAEAn2D,cAAA,EACAkB,qBAAA,EACAk1D,eAAA,EACA7kG,QAAA,CAAA,CACAE,QAAA,OACAD,UAAA,OACAE,SAAA,SACAC,MAAA,SACA,CACAF,QAAA,QACAD,UAAA,cACAE,SAAA,WAEA4iB,eAAA,SAAAziB,GACAmkG,EAAAnkG,EAAAuI,UACAy8F,GACAb,EAAA1gG,WAAAuhG,GAAA,IAGAzrF,mBAAA,SAAAvZ,GACA,IAMAilG,EANA,GAAAjlG,EAAAklG,uBAAAtmG,QACAqmG,EAAA1pG,EAAAsK,KAAA7F,EAAAyvC,iBAAA,CAAAxtC,GAAAjC,EAAAklG,uBAAA,OACAD,EAAAE,UACAhB,EAAA1gG,WAAAwhG,EAAAE,UAAA,GAEA,GAAAnlG,EAAAolG,yBAAAxmG,SACAqmG,EAAA1pG,EAAAsK,KAAA7F,EAAAyvC,iBAAA,CAAA01D,SAAAnlG,EAAAolG,yBAAA,OAEAjB,EAAA1gG,WAAAzD,EAAAolG,yBAAA,IAAA,KAMA,IAAAJ,EAAA,GAwBA,SAAAM,IACA,OAAApB,IAAAC,KACAD,GAAA3oG,EAAAgqG,QAAAP,EAAA5qF,OAAA+pF,EAAAvzF,qBAAAwJ,QAGA,SAAA3Y,EAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,WAhBArC,EAAA6F,OAAA,uBAAA,SAAAC,EAAAC,GACA,GAAAD,GAAAA,EAAA9F,EAAAiG,WAAAxG,SAGA,WAFAO,EAAAiG,WAAAH,GAEAmD,MAAA87F,GAdAx3D,EAAA84D,gBAAArmG,EAAAsB,MAAAqT,YAAAtT,KAAA,SAAAjD,GACA4B,EAAA6mH,gBAAAzoH,EAAA+xF,QACA0V,EAAAznG,EAAA4W,UACAgwF,GACAA,EAAA1gG,WAAAuhG,GAAA,GAEAd,GAAA,OAuBA/kG,EAAAsC,kBAAA,SAAAlE,GACA,OAAAkE,EAAAlE,KAAA4B,EAAA2sG,cAAAxG,KAGAnmG,EAAA8mH,wBAAA,WACA,OAAA9mH,EAAA4mH,aAAA5mH,EAAAsB,MAAAylH,eAGA/mH,EAAAgnH,gBAAA,WACAhnH,EAAA2sG,cAAA,EACA3sG,EAAAu/E,IAAAktB,MAAA,KACAzsG,EAAAu/E,IAAAmtB,aAAAia,EACA3mH,EAAAsB,MAAA2lH,iBACAjnH,EAAAsB,MAAA2lH,eAAA,IAEAjnH,EAAAsB,MAAA2lH,eAAA7oF,QAAA,EACAp+B,EAAAsB,MAAAylH,cAAA/mH,EAAA4mH,YAGA5mH,EAAA6C,UAAA,EAGA7C,EAAAwC,aAAA,SAAAlB,GAEA,IAAAtB,EAAA6C,SAgBA,GAZA7C,EAAA6C,UAAA,EAYAP,EAAAtC,EAAAsB,OAuCA6kG,IASA1jG,IARA8qC,EAAAi5D,gBACAxmG,EAAAsB,MAAAqT,WACA3U,EAAA6mH,gBACAhhB,EACAb,EAAAvzF,qBACAhP,EACAE,OA9CA,CAEA,GAAA3C,EAAA2sG,aAAA,CACA,IAAAe,EAAAtB,EAAAwB,wBAAA5tG,EAAAu/E,IAAAktB,OAEA,GADAnrG,EAAA2lH,eAAA7a,EAAAuB,iBAAA3tG,EAAAu/E,IAAAmtB,aAAAgB,EAAA/qG,IACArB,EAAA2lH,eACA,OAIA3lH,EAAAqT,WAeA44B,EAAAxqC,OAAAzB,EAAA,WACA6kG,IASA1jG,IARA8qC,EAAAi5D,gBACAxmG,EAAAsB,MAAAqT,WACA3U,EAAA6mH,gBACAhhB,EACAb,EAAAvzF,qBACAhP,EACAE,IAIAA,EAAA3C,EAAA2F,YA1BA4nC,EAAAvqC,OAAA1B,EAAA,SAAAlD,GACA+nG,IASA1jG,IARA8qC,EAAAi5D,gBACApoG,EAAAuW,WACA3U,EAAA6mH,gBACAhhB,EACAb,EAAAvzF,qBACAhP,EACAE,IAIAA,EAAA3C,EAAA2F,YAjCA,SAAAlD,IACAzC,EAAA0C,QACA1C,EAAAuH,SAGA,SAAA5E,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,IAuDA,SAAA6uG,EAAAC,GACA,IAAAC,EAAAD,EAAAE,cAAAz5F,MAAA,IACA05F,EAAA,IAAAC,YACAC,OAAA,SAAAL,GACAltG,EAAAqtB,OAAA,SAAArtB,GACAA,EAAAu/E,IAAAktB,MAAAS,EAAAniE,OAAAlf,OACA7rB,EAAAsB,MAAAylH,cAAA,KACA/mH,EAAAsB,MAAA2lH,iBACAjnH,EAAAsB,MAAA2lH,eAAA7oF,QAAA,MAKAivE,EAAAG,cAAAL,GAGA3+F,EAAA,WACA5T,QAAAisC,QAAAqX,SAAA2vD,cAAA,eAAAzgF,GAAA,SAAA6/E,IACA,KAEAjtG,EAAAknH,eAAA,WACA35E,EAAA45E,yBAAAnnH,EAAAsB,QAGAtB,EAAAonH,kBAAA,SAAAC,GACAjrH,EAAAwF,OAAA5B,EAAAsB,MAAA+uE,WAAA,SAAA1gD,GACA,OAAAA,IAAA03F,QCjRA1sH,MAAAkF,WAAA,aAAA,CAAA,SAAA,SAAA,WACA,SAAAG,EAAAC,EAAA6jB,GAEA9jB,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAikB,OAAAH,EAAA5c,gBAGAlH,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAikB,OAAAH,EAAA5c,cAEAlH,EAAAsY,YAAA,CACAnC,WAAA,CAAA,CAAAC,MAAA,OAAAE,YAAA,eAAA2E,KAAA,SAAAta,MAAA,SACA,CAAAyV,MAAA,cAAAE,YAAA,sBAAA2E,KAAA,UACA,CAAA7E,MAAA,QAAAE,YAAA,gBAAAD,WAAA,UAAA1V,MAAA,OAAA/C,MAAA,KAIAoC,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAA2F,WAAA3F,EAAAikB,OACA9iB,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAA2F,WAAA3F,EAAAikB,OACA9iB,EAAAnB,OAAAsB,MAAAwiB,EAAApiB,YACAP,EAAAK,UAQA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,kCACA4B,OANAxB,EAAA2B,YAAA,SAAAvD,GACA0lB,EAAAliB,OAAAxD,EAAA,KAAA,KAAA4B,EAAAikB,UAMAjiB,MAAAhC,EAAAiC,YC3CAtH,MAAAkF,WAAA,mBAAA,CAAA,SAAA,WAAA,mBAAA,gBACA,SAAAG,EAAA8jB,EAAA5hB,EAAAmJ,GAEArL,EAAAsnH,mBAAA,CACAn/E,SAAA,GAAAnoC,EAAAsB,MAAAy7E,UAAA/8E,EAAAsB,MAAA6mC,SAAA,KACAo0D,YAAA,GAAAv8F,EAAAsB,MAAAy7E,UAAA/8E,EAAAsB,MAAAi7F,YAAA,KACAC,0BAAA,GAAAx8F,EAAAsB,MAAAy7E,UAAA/8E,EAAAsB,MAAAk7F,0BAAA,KACAwC,mBAAA,GAAAh/F,EAAAsB,MAAAy7E,UAAA/8E,EAAAsB,MAAA09F,mBAAA,MAKAh/F,EAAAunH,kBAAA,CACAp/E,SAAA,KACAo0D,YAAA,GAAAv8F,EAAAsB,MAAAy7E,UAAA/8E,EAAAsB,MAAAi7F,YAAA,KACAC,0BAAA,GAAAx8F,EAAAsB,MAAAy7E,UAAA/8E,EAAAsB,MAAAk7F,0BAAA,KACAwC,mBAAA,GAAAh/F,EAAAsB,MAAAy7E,UAAA/8E,EAAAsB,MAAA09F,mBAAA,MAGAh/F,EAAAsC,kBAAA,WACA,OAAA1H,QAAA2H,OAAAvC,EAAAsB,MAAAtB,EAAAqC,YACAzH,QAAA2H,OAAAvC,EAAAunH,kBAAAvnH,EAAAwnH,wBACA5sH,QAAA2H,OAAAvC,EAAAsnH,mBAAAtnH,EAAAynH,yBAGAznH,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,4CAGAI,EAAAE,SAAA+5F,qBACAn8F,EAAAiG,WAAA9H,KAAA,CACA9C,MAAA,yBACAyG,SAAA,mDAGA9B,EAAAsnH,mBAAAn/E,SAAA,KACAnoC,EAAAsnH,mBAAA/qB,YAAA,KACAv8F,EAAAsnH,mBAAA9qB,0BAAA,KACAx8F,EAAAsnH,mBAAAtoB,mBAAA,MAGA98F,EAAAE,SAAAg6F,oBACAp8F,EAAAiG,WAAA9H,KAAA,CACA9C,MAAA,wBACAyG,SAAA,4CAGA9B,EAAAunH,kBAAAp/E,SAAA,KACAnoC,EAAAunH,kBAAAhrB,YAAA,KACAv8F,EAAAunH,kBAAA/qB,0BAAA,KACAx8F,EAAAunH,kBAAAvoB,mBAAA,MAGAh/F,EAAAwnH,sBAAA5sH,QAAA2G,KAAAvB,EAAAunH,mBACAvnH,EAAAynH,uBAAA7sH,QAAA2G,KAAAvB,EAAAsnH,oBACAtnH,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAA6C,UAAA,EAEA7C,EAAAwC,aAAA,SAAAlB,GAEA,IAAAomH,KAAA1nH,EAAAsnH,mBAAA,UAAA,IAAAtnH,EAAAsnH,mBAAAn/E,UACAnoC,EAAAsnH,mBAAA,aACAtnH,EAAAsnH,mBAAA,2BACAtnH,EAAAsnH,mBAAA,oBAEAK,IAAAvrH,EAAAkpG,MAAAtlG,EAAAunH,kBAAAp/E,YACAnoC,EAAAunH,kBAAA,cACAvnH,EAAAunH,kBAAA,4BACAvnH,EAAAunH,kBAAA,oBA2CA,SAAA9kH,IACAzC,EAAA6C,UAAA,EACA7C,EAAA0C,QAGA,SAAAC,EAAAvE,GACA4B,EAAA6C,UAAA,EACA7C,EAAA4C,YAAAxE,EAhDAspH,GAAAC,EACAt8G,EAAA6B,eAAA,CACA7R,MAAA,wBACA8R,QAAA,gCACAC,QAAA,CAAA,CACAlI,KAAA,kBAMAu3D,EAAA7hE,QAAA2G,KAAAD,GAEAomH,GACAjrD,EAAAsgB,UAAA,EACAtgB,EAAAt0B,SAAAnoC,EAAAsnH,mBAAAn/E,SACAs0B,EAAA8/B,YAAAv8F,EAAAsnH,mBAAA/qB,YACA9/B,EAAA+/B,0BAAAx8F,EAAAsnH,mBAAA9qB,0BACA//B,EAAAuiC,mBAAAh/F,EAAAsnH,mBAAAtoB,oBACA2oB,GACAlrD,EAAAsgB,UAAA,EACAtgB,EAAAt0B,SAAA,KACAs0B,EAAA8/B,YAAAv8F,EAAAunH,kBAAAhrB,YACA9/B,EAAA+/B,0BAAAx8F,EAAAunH,kBAAA/qB,0BACA//B,EAAAuiC,mBAAAh/F,EAAAunH,kBAAAvoB,qBAEAviC,EAAAsgB,UAAA,EACAtgB,EAAAt0B,SAAA,KACAs0B,EAAA8/B,YAAA,KACA9/B,EAAA+/B,0BAAA,KACA//B,EAAAuiC,mBAAA,MAGAh/F,EAAA6C,UAAA,EAEA45D,EAAAnkB,QAGAx0B,EAAA/gB,OAAA05D,EAAAh6D,EAAAE,EAAA3C,EAAA2F,YAFAme,EAAA9gB,OAAAy5D,EAAAh6D,EAAAE,EAAA3C,EAAA2F,iBC3GAhL,MAAAkF,WAAA,sBAAA,CAAA,SAAA,SAAA,qBACA,SAAAG,EAAAC,EAAA66C,GAEA96C,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,QAAAC,WAAA,CAAA,QACAC,WAAA,CAAA,CAAAC,MAAA,OAAAE,YAAA,eAAA2E,KAAA,YAGAjb,EAAA4nH,gBAAA9sE,EAAA5zC,aAAA,GAEAlH,EAAA6nH,sBAAA,CAAA/iH,KAAA,IACA9E,EAAA8nH,0BAEA9nH,EAAAkB,UAAA,SAAA9C,GACA4B,EAAA6nH,sBAAA/kH,GAAA1E,EAAA0E,GACA9C,EAAA6nH,sBAAA/iH,KAAA1G,EAAA0G,KACA9E,EAAA6nH,sBAAAh1G,OAAA,EAEA7S,EAAA8nH,0BAAAltH,QAAA2G,KAAAvB,EAAA6nH,uBAEA1mH,EAAAC,SAAAC,KAAA,WACArB,EAAA4C,YAAA,KACAzB,EAAAK,UAIAxB,EAAA4C,YAAA,KAEA5C,EAAAyB,SAAA,WACAzB,EAAA6nH,sBAAA/kH,IAAA,EACA9C,EAAA6nH,sBAAA/iH,KAAA,GACA9E,EAAA6nH,sBAAAh1G,OAAA,EAEA7S,EAAA8nH,0BAAAltH,QAAA2G,KAAAvB,EAAA6nH,uBAEA1mH,EAAAC,SAAAC,KAAA,WACArB,EAAA4C,YAAA,KACAzB,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACA08C,EAAAl5C,OAAAxD,IAGA4B,EAAA+nH,4BAAA,SAAA3pH,GACAA,EAAAyU,MACAioC,EAAA93C,OAAA5E,EAAA,SAAAmmD,GACApjD,EAAAkS,QACA,SAAArH,GACAhM,EAAA4C,YAAAoJ,IAGA8uC,EAAA/3C,OAAA3E,EAAA,SAAAmmD,GACApjD,EAAAkS,QACA,SAAArH,GACAhM,EAAA4C,YAAAoJ,KAKAhM,EAAA6B,KAAA,CACA,CACAxG,MAAA,wCACAyG,SAAA,sDAGA9B,EAAA6B,KAAAE,UAAA,EAMA,IAAAZ,EAAAlB,EAAA,CACAL,YAAA,qCACA4B,MAAA,EACAQ,MAAAhC,OChFArF,MAAAkF,WAAA,qCAAA,CAAA,SAAA,aAAA,WAAA,qBACA,SAAAG,EAAAhF,EAAAwT,EAAAssC,GAqBA,SAAArkC,IACAzW,EAAA8W,UAAA9W,EAAA9D,QACA4+C,EAAAktE,kCAAAhoH,EAAA8W,SAAA9W,EAAA9D,QACAmF,KAAA,SAAAjD,GACA4B,EAAAioH,+BAAA7pH,KAAAA,IAvBA4B,EAAA8W,SAAA/a,SAAA8U,SAAA,EAAA,UAAA3U,SACA8D,EAAA9D,OAAAH,SAAA2d,IAAA,EAAA,OAAAxd,SAEA8D,EAAAioH,+BAAA,CACAh/G,KAAA,YACA7K,KAAA,CAAA,IACA0Z,QAAA,CACA0nD,oBAAA,EACAC,WAAA,EACAC,UAAA,CAAA7f,IAAA,GAAAO,KAAA,GAAAz/C,MAAA,MAAA6hB,OAAA,OACAm9C,OAAA,CACAjtB,SAAA,SAEAkoC,MAAA,GACAC,MAAA,GACAC,YAAA,eAcA96E,EAAAmrB,mBAAA,WACA1U,KAGAA,OCtCA9b,MAAAkF,WAAA,4BAAA,CAAA,SAAA,QAAA,KAAA,SAAA,aAAA,UAAA,gBACA,uBAAA,aACA,SAAAG,EAAA27B,EAAAzzB,EAAAjI,EAAAjF,EAAAoN,EAAAiD,EAAAy6G,EAAAoC,GAEAloH,EAAA6C,UAAA,EACA7C,EAAAmoH,mBAAA,GAEArC,EAAA5+G,aAAA,GACA9F,SAAAC,KAAA,SAAAwtB,GACAzyB,EAAAkJ,QAAAupB,EAAA,SAAAu5F,GACAA,EAAA3hG,QACAzmB,EAAAmoH,mBAAAhqH,KAAA,CACAyd,UAAA,EACAwsG,QAAAA,QAMApoH,EAAAsC,kBAAA,WACA,OAAAlG,EAAAkoB,OAAAtkB,EAAAmoH,mBAAA,CAAAvsG,UAAA,IAAAnc,QAGAO,EAAAqoH,eAAA,SAAAD,GACAA,EAAAxsG,UAAAwsG,EAAAxsG,UAGA5b,EAAAg0D,YAAA,SAAAm0D,EAAAG,GACA,IAKAC,EALAvoH,EAAA6C,WAIA7C,EAAA6C,UAAA,EACA0lH,EAAAnsH,EAAA+a,IAAA/a,EAAAkoB,OAAA6jG,EAAA,CAAAvsG,UAAA,IAAA,+BACA4sG,EAAApsH,EAAA+a,IAAAnX,EAAAyoH,cAAA,UAEAF,EAAA9oH,QAAA+oH,EAAA/oH,OACAyoH,EAAAQ,gBAAA,CACAJ,YAAAA,EACAK,WAAAJ,EACAC,QAAAA,GACA,WACAxoH,EAAA6C,UAAA,EACA7C,EAAA0C,SACA,WACA1C,EAAA6C,UAAA,EACA7C,EAAA0C,WAGA1C,EAAA6C,UAAA,EACA7C,EAAA0C,cClDA/H,MAAAkF,WAAA,yBAAA,CAAA,SACA,SAAAG,EAAA8jB,GAEA9jB,EAAAozG,SAAA,WACApzG,EAAA0C,QACA1C,EAAAwkG,cAGAxkG,EAAAwC,aAAA,SAAAlB,GAEAtB,EAAA0C,QACA1C,EAAAykG,QAAAzkG,EAAAsB,WCXA3G,MAAAkF,WAAA,sBAAA,CAAA,SAAA,wBAAA,mBACA,SAAAG,EAAAoD,EAAAlB,GAEAlC,EAAAsI,eAAApG,EAAAE,SAEA,IAAAsU,EAAA,KACA9P,GAAA,EACAC,GAAA,EACA7G,EAAAkE,QAAA,GAEAlE,EAAA/E,IAAA,0BAAA,SAAA4F,EAAAzC,GACAA,EAAAia,QAKAxR,IAJAD,IACA8P,IAAAtY,EAAAia,UAAAja,EAAAmF,UACAvD,EAAAkE,QAAAd,EAAAwlH,uBAAAxqH,EAAAia,QAAAvV,MAEA,GAKA9C,EAAAkE,QAAAzE,OAAA,EAEAiX,EAAAtY,EAAAia,UAGArY,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAA6P,IACA1W,EAAAkE,QAAAd,EAAAwlH,uBAAAlyG,EAAA5T,IACA+D,GAAA,IAIAD,GAAA,IAIA5G,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,gBAAAC,WAAA,CAAA,QACAC,WAAA,CACA,CAAAC,MAAA,eAAAE,YAAA,mBAAA3V,MAAA,SACA,CAAAyV,MAAA,iBAAAE,YAAA,kBAAA3V,MAAA,SACA,CAAAyV,MAAA,YAAAE,YAAA,oBAAAD,WAAA,0BAAA1V,MAAA,SACA,CAAAyV,MAAA,QAAAE,YAAA,gBACA,CAAAF,MAAA,QAAAE,YAAA,gBAAAD,WAAA,gBAAA1V,MAAA,QAAAua,MAAA,QAAAH,QAAA,EAAAC,QAAA,GACA,CAAA5E,MAAA,cAAAE,YAAA,mBAAAD,WAAA,gBAAA6E,MAAA,QAAAva,MAAA,QAAAoa,QAAA,GACA,CAAA3E,MAAA,mBAAAE,YAAA,4BAAAD,WAAA,iBAAA1V,MAAA,OAAAoa,QAAA,IAEAxE,iBAAA,GAGAvW,EAAAsI,eAAAwC,8BACA9K,EAAAsY,YAAAnC,WAAA,GAAAC,MAAA,SACApW,EAAAsY,YAAAnC,WAAA,GAAAG,YAAA,qBC5DA3b,MAAAkF,WAAA,+BAAA,CAAA,SAAA,gBACA,SAAAG,EAAA4H,GAEA,IAAA8O,EAAA,KACA9P,GAAA,EACAC,GAAA,EACA7G,EAAA6oH,iBAAA,GAEA7oH,EAAA/E,IAAA,0BAAA,SAAA4F,EAAAzC,GACAA,EAAAia,QAMAxR,IALAD,IACA8P,IAAAtY,EAAAia,UAAAja,EAAAmF,UACAvD,EAAA6oH,iBAAAjhH,EAAAkhH,sBACAlhH,EAAAmhH,2BAAA3qH,EAAAia,QAAAvV,OAEA,GAKA9C,EAAA6oH,iBAAAppH,OAAA,EAEAiX,EAAAtY,EAAAia,UAGArY,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAA6P,IACA1W,EAAA6oH,iBAAAjhH,EAAAkhH,sBACAlhH,EAAAmhH,2BAAAryG,EAAA5T,KACA+D,GAAA,IAIAD,GAAA,IAIA5G,EAAAgpH,8BAAA,CACAt2G,WAAA,IAGA1S,EAAAsY,YAAA,CACAnC,WAAA,CACA,CAAAC,MAAA,SAAAE,YAAA,iBAAA2E,KAAA,UACA,CAAA7E,MAAA,kBAAAE,YAAA,gBAAA3V,MAAA,QACA,CAAAyV,MAAA,YAAAE,YAAA,qBAAAD,WAAA,4BAAA1V,MAAA,SACA,CAAAyV,MAAA,UAAAE,YAAA,mBAAAD,WAAA,aAAA1V,MAAA,QACA,CAAAyV,MAAA,yBAAAE,YAAA,4BAAAD,WAAA,mBAAA1V,MAAA,SACA,CAAAyV,MAAA,uBAAAE,YAAA,0BAAAD,WAAA,iBAAA1V,MAAA,SACA,CAAAyV,MAAA,0BAAAE,YAAA,qBAAAD,WAAA,oBAAA1V,MAAA,QACA,CAAAyV,MAAA,kBAAAE,YAAA,mBAAA3V,MAAA,QAAAsa,KAAA,UACA,CAAA7E,MAAA,wBAAAE,YAAA,gBAAA3V,MAAA,QAAAsa,KAAA,WAEA1E,iBAAA,EACA+4B,SAAA,GACA25E,qBAAA,EACApS,SAAA,CACA7zF,SAAA,EACAkmG,uBAAA,aACAC,qBAAA,aC9DAxuH,MAAAkF,WAAA,gCAAA,CAAA,SAAA,WAAA,WAAA,aAAA,gBACA,SAAAG,EAAAopH,EAAA56G,EAAAxT,EAAA4M,GAEA,IAAA8O,EAAA,KACA9P,GAAA,EACAC,GAAA,EACA7G,EAAA27C,UAAA,GAEA37C,EAAA/E,IAAA,0BAAA,SAAA4F,EAAAzC,GACAA,EAAAia,QAKAxR,IAJAD,IACA8P,IAAAtY,EAAAia,UAAAja,EAAAmF,UACAvD,EAAA27C,UAAA/zC,EAAAwpE,qBAAAhzE,EAAAia,QAAAvV,MAEA,GAKA9C,EAAA27C,UAAAl8C,OAAA,EAEAiX,EAAAtY,EAAAia,UAGArY,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAA6P,IACA1W,EAAA27C,UAAA/zC,EAAAwpE,qBAAA16D,EAAA5T,IACA+D,GAAA,IAIAD,GAAA,IAKA5G,EAAAqpH,eAAA,SAAArlH,EAAA9I,GACA,IAAA2rC,EAAAjsC,QAAAisC,QAAAqX,SAAA2vD,cAAA,mBAAA7pG,EAAAC,aAEAqlH,EAAAF,EAAAviF,EAAA,CACAxrC,MAAAL,EAAAM,QAAA,oBACAqvC,QAAA,4DAEA3vC,EAAAM,QAAA,2BAAA,oBACA0I,EAAAulH,eAAA,qCAGAvuH,EAAAM,QAAA,uBAAA,oBACA0I,EAAAwnG,gBAAA,qCAGAxwG,EAAAM,QAAA,8BAAA,oBACA0I,EAAAwlH,kBAAA,qCAGAxuH,EAAAM,QAAA,2BAAA,oBACA0I,EAAAynG,mBAAA,qCAGAzwG,EAAAM,QAAA,gCAAA,oBACA0I,EAAAylH,wBAAA,qCAGAzuH,EAAAM,QAAA,6BAAA,oBACA0I,EAAA0nG,yBAAA,yBAGAjuG,UAAA,MACAisH,WAAA,EACA9rH,MAAA,EACAwgD,QAAA,SACAlhD,UAAA,OACA6tC,OAAAlE,EACA8iF,SAAA,SAIAL,EAAAloH,SAAAC,KAAA,WACAmN,EAAA,WACA86G,EAAAM,kBACAN,EAAA9nH,QACA,WCpFA7G,MAAAkF,WAAA,sBAAA,CAAA,SAAA,wBAAA,mBACA,SAAAG,EAAAoD,EAAAlB,GAEAlC,EAAAsI,eAAApG,EAAAE,SAEA,IAAAsU,EAAA,KACA9P,GAAA,EACAC,GAAA,EACA7G,EAAAooC,QAAA,GAEApoC,EAAA/E,IAAA,0BAAA,SAAA4F,EAAAzC,GACAA,EAAAia,QAKAxR,IAJAD,IACA8P,IAAAtY,EAAAia,UAAAja,EAAAmF,UACAvD,EAAAooC,QAAAhlC,EAAAg1D,uBAAAh6D,EAAAia,QAAAvV,MAEA,GAKA9C,EAAAooC,QAAA3oC,OAAA,EAEAiX,EAAAtY,EAAAia,UAGArY,EAAA/E,IAAA,mBAAA,SAAA4F,EAAAzC,GACA,IAAAA,EAAA2D,UACA6E,IACAA,GAAA,GACAC,GAAA6P,IACA1W,EAAAooC,QAAAhlC,EAAAg1D,uBAAA1hD,EAAA5T,IACA+D,GAAA,IAIAD,GAAA,IAIA5G,EAAAyS,cAAA,CACAC,WAAA,IAGA1S,EAAAsY,YAAA,CACAtC,SAAA,CAAAC,OAAA,CAAA,gBAAAC,WAAA,CAAA,QACAC,WAAA,CACA,CAAAC,MAAA,eAAAE,YAAA,mBAAA3V,MAAA,SACA,CAAAyV,MAAA,iBAAAE,YAAA,iBAAA3V,MAAA,SACA,CAAAyV,MAAA,YAAAE,YAAA,oBAAAD,WAAA,iBAAA1V,MAAA,QACA,CAAAyV,MAAA,QAAAE,YAAA,gBACA,CAAAF,MAAA,QAAAE,YAAA,gBAAAD,WAAA,gBAAA1V,MAAA,QAAAua,MAAA,QAAAH,QAAA,EAAAC,QAAA,GACA,CAAA5E,MAAA,cAAAE,YAAA,mBAAAD,WAAA,gBAAA6E,MAAA,QAAAva,MAAA,QAAAoa,QAAA,GACA,CAAA3E,MAAA,mBAAAE,YAAA,4BAAAD,WAAA,iBAAA1V,MAAA,OAAAoa,QAAA,IAEAxE,iBAAA,GAGAvW,EAAAsI,eAAAwC,8BACA9K,EAAAsY,YAAAnC,WAAA,GAAAC,MAAA,SACApW,EAAAsY,YAAAnC,WAAA,GAAAG,YAAA,qBC5DA3b,MAAAkF,WAAA,eAAA,CAAA,SAAA,KAAA,SAAA,UAAA,aAAA,UAAA,aAAA,cAAA,WAAA,mBAAA,cACA,SAAAG,EAAAkI,EAAAjI,EAAAkI,EAAAnN,EAAAoN,EAAAkrD,EAAAnwD,EAAA2gB,EAAA5hB,EAAAmG,GAEArI,EAAAg2D,cAAA9zD,EAAAE,SAEA,IAAAynH,EAAA1mH,EAAAU,SAAA,UACAimH,EAAA3mH,EAAAU,SAAA,UACAkmH,EAAA5mH,EAAAU,SAAA,cASA,SAAAkgB,IACA7b,EAAAiD,IAAA,CAAAnL,EAAAikB,OAAA7iB,SAAApB,EAAAgqH,YAAA5oH,WAAAC,KAAA,WACA,IAKAgtF,EALAruF,EAAAokB,aAAAoiG,eAAA/mH,QAKA4uF,GAAA,IAAAruF,EAAAokB,aAAAoiG,eAAAz2G,SAAA,GAEA/P,EAAA2W,SAAAlX,OAAA,EACAO,EAAA2W,SAAAxY,KAAAsf,MAAAzd,EAAA2W,SACAva,EAAAkoB,OAAAtkB,EAAAgqH,YAAA,SAAA13G,GACA,OAAA+7E,GACA/7E,EAAA2R,OAAAxkB,OAGA,EAAArD,EAAAmyF,aAAAj8E,EAAA2R,OAAAjkB,EAAAokB,aAAAoiG,gBAAA/mH,YAbAO,EAAA2W,SAAAlX,OAAA,EACAO,EAAA2W,SAAAxY,KAAAsf,MAAAzd,EAAA2W,SAAA3W,EAAAgqH,gBA2IA,SAAAthG,EAAArQ,EAAA9U,GACAvD,EAAA0W,gBAAA2B,EACArY,EAAA2D,WAAA,0BAAA,CAAA0U,QAAArY,EAAA0W,gBAAAnT,UAAAA,IAzJAvD,EAAAiqH,sBAAA9mH,EAAAU,SAAA,yBAEA7D,EAAAikB,OAAAH,EAAA5c,aAAA,GACAlH,EAAAokB,aAAA,CAAAoiG,eAAA,IACAxmH,EAAAgqH,YAAA,GACAhqH,EAAA2W,SAAA,GACA3W,EAAAkqH,iBAAA,GAwBAlqH,EAAAmvF,YAAA,CACAvsE,MAAA5iB,EAAAikB,OACAmI,YAAA,OACAC,UAAA,UACAC,uBAAA,EACAC,iBAAA,EACAzJ,WAAA,EACA0J,aAAA,aACAnJ,eAAA,CACA1nB,MAAA,gCAIAqE,EAAA6F,OAAA,8BAAA,SAAAC,EAAAC,GACAge,MACA,GAGA/jB,EAAAM,aAAA,CACAwE,KAAA,WACAvE,QAAA,CACA,CACAC,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,QAAAC,UAAA,MACAgI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAQ,kBAAAzK,EAAA,OAAA,UAAA,gBAEA,CACAoC,UAAA,SACAC,QAAAzF,EAAAM,QAAA,kBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,SAAAA,CAAAW,EAAAi6B,SAEAriC,MAAA,OACAukB,QAAAllB,EAAAg2D,cAAAgrD,uBAAA,GAEA,CACAxgH,UAAA,WACAC,QAAAzF,EAAAM,QAAA,oBACAoF,SAAA,OACAjE,OAAA,CAAAb,KAAA,SACA+E,MAAA,OACAukB,QAAAllB,EAAAg2D,cAAAyqD,yBAAA,GAEA,CACAjgH,UAAA,iBAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,QACAiI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,oBAEA,CACAoC,UAAA,UACAC,QAAAzF,EAAAM,QAAA,mBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAA,EAAAohH,gBAGAphH,EAAAswD,UAIA,CAAA74D,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAC,MAAA,SACA,CACAH,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAAo5C,QAEAxhD,MAAA,SAEA,CAAAH,UAAA,SAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UAAAC,MAAA,QACA,CAAAH,UAAA,aAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAwkB,SAAA,IAEA2tB,wBAAA,WACA,OAAA1vC,EAAAU,SAAA,mBAEAoB,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,qDACA6J,UAAA,WACA,OAAAhC,EAAAU,SAAA,YACAV,EAAAU,SAAA,oCACA7D,EAAAg2D,cAAAC,2BAEA7wD,SAAA,SAAAhH,GAkHA,IAAA2J,EAAAA,EAlHA3J,EAAA0E,GAoHAsnH,EAAAhpH,SAAAC,KAAA,WACA+oH,EAAApqH,OAAA+H,UAAAA,EACAqiH,EAAA5oH,aAlHAxB,EAAA6B,KAAA,CAAA,CACAxG,MAAA,aACAyG,SAAA,2CAGA+nH,GACA7pH,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,kBACAyG,SAAA,4CAIAgoH,GACA9pH,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,kBACAyG,SAAA,4CAIAioH,IACA/pH,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,6BACAyG,SAAA,uDAGA9B,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,4BACAyG,SAAA,uDAIA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA0W,gBAAA,KAOA1W,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,MAGA9F,EAAAgqH,YAAA12D,EAAA3uC,SAEAZ,IAEA/jB,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAgqH,YAAA12D,EAAA3uC,SACA+D,EAAA,QAGA1oB,EAAAiB,cAAA,SAAA7C,GACAsqB,EAAAtqB,IAGA4B,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAA2F,WAAA3F,EAAA2W,SACAxV,EAAAnB,OAAAsB,MAAAgyD,EAAA5xD,YACAP,EAAAnB,OAAAg6D,cAAA,SAAA14D,GACAonB,EAAApnB,GAAA,IAEAH,EAAAK,UAIAxB,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAA2F,WAAA3F,EAAA2W,SACAxV,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAK,UAIAxB,EAAA2B,YAAA,SAAAvD,GACAk1D,EAAA1xD,OAAAxD,EAAA,KAAA4B,EAAA2W,WAGA3W,EAAA2E,gBAAA,SAAAC,GACA5E,EAAAkqH,iBAAAtlH,GAGA5E,EAAAqqH,kBAAA,WACA,OAAArqH,EAAAkqH,kBACA9tH,EAAAkuH,QAAAtqH,EAAAkqH,iBAAA,UAAA,MAGA,GAGAlqH,EAAAuqH,iBAAA,WACA,OAAAvqH,EAAAkqH,iBACAlqH,EAAAkqH,iBAAAzqH,OAGA,GAOA,IAAA0B,EAAAlB,EAAA,CACAL,YAAA,sCACA4B,OANAxB,EAAAwqH,yBAAA,WACA,OAAAxqH,EAAAqqH,oBAAArqH,EAAAuqH,mBAAA,MAMAvoH,MAAAhC,EAAAiC,SAWA,IAAAmoH,EAAAnqH,EAAA,CACAL,YAAA,2DACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YCrPAtH,MAAAkF,WAAA,qBAAA,CAAA,SAAA,aAAA,cAAA,mBAAA,QACA,SAAAG,EAAAszD,EAAAnwD,EAAAjB,EAAAy5B,GAEA37B,EAAAg2D,cAAA9zD,EAAAE,SAEApC,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OACAtB,EAAAyqH,gBAAAtnH,EAAAU,SAAA,WACA7D,EAAAiqH,sBAAA9mH,EAAAU,SAAA,yBAEA7D,EAAAwC,aAAA,SAAApE,GAcA,SAAAqE,EAAAioH,GACA1qH,EAAAg6D,eACAh6D,EAAAg6D,cAAA0wD,GAEA1qH,EAAA0C,QAGA,SAAAC,EAAAqJ,GACAhM,EAAA4C,YAAAoJ,EACAhM,EAAA6C,UAAA,EArBA7C,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEAzE,EAAAyU,MACAygD,EAAAtwD,OAAA5E,EAAAqE,EAAAE,EAAA3C,EAAA2F,YAEA2tD,EAAAvwD,OAAA3E,EAAAqE,EAAAE,EAAA3C,EAAA2F,cAgBA3F,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,aAAArC,EAAAy5D,WAGAz5D,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,gDAEA,CACAzG,MAAA,oBACAyG,SAAA,qDAEA,CACAzG,MAAA,iBACAyG,SAAA,mDAIA9B,EAAAg2D,cAAAqtD,sBAAA,GACArjH,EAAAiG,WAAA9H,KACA,CACA9C,MAAA,eACAyG,SAAA,kDAIA9B,EAAAiG,WAAAlE,UAAA,EAEA/B,EAAA2qH,iBAAA,GAEA3qH,EAAA4qH,SAAA,WACA,OAAA,GAGA5qH,EAAAymG,WAAA,SAAAr2F,GACA,GAAAA,EAQA,OAAAurB,EAAA1tB,IAAA,oDAAA,CAAAy0C,OAPA,CACA2W,QAAAjpD,EACAi3B,SAAA,KACAwjF,OAAA,KACAC,OAAA,0CACApvH,IAAA,6CAGA2F,KAAA,SAAAob,GACAzc,EAAA2qH,iBAAAlrH,OAAA,EACAO,EAAA2qH,iBAAAxsH,KAAAsf,MAAAzd,EAAA2qH,iBAAAluG,EAAAre,KAAAmkD,eCnFA5nD,MAAAkF,WAAA,uCAAA,CAAA,SAAA,UACA,SAAAG,EAAAmI,GAEAnI,EAAAsB,MAAA,CACA6kE,aAAA,KACAsJ,QAAA1zE,SAAAy8B,QAGA,IAAAuyF,EAAAhvH,SAAA6U,QAAA,QAAA8I,IAAA,EAAA,KAAA0N,MAAA,SACArrB,SAAAqvB,SAAA2/F,GACA/qH,EAAAsB,MAAA6kE,aAAApqE,SAAA6U,QAAA,QAAAC,SAAA,EAAA,QAAA2nB,OAEAx4B,EAAAsB,MAAA6kE,aAAApqE,SAAA6U,QAAA,QAAA4nB,OAGAx4B,EAAA0lH,cAAA,SAAApkH,GAEA,IAQAwV,EACA5a,EATA8D,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEA7C,EAAA0C,QAEAoU,EAAA/a,SAAAy8B,KAAAx4B,EAAAsB,MAAA6kE,cAAAv1D,QAAA,QAAA1U,SACAA,EAAAH,SAAAy8B,KAAAx4B,EAAAsB,MAAA6kE,cAAA/+C,MAAA,QAAAlrB,SAEAiM,EAAAuC,KAAA,2DACA1K,EAAA+H,UACA,cAAA+O,EAAAuQ,SACA,YAAAnrB,EAAAmrB,SACA,SAAA,mHAGArnB,EAAA6lH,oBAAA,SAAAvkH,GAEA,IAQAwV,EACA5a,EATA8D,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEA7C,EAAA0C,QAEAoU,EAAA/a,SAAAy8B,KAAAx4B,EAAAsB,MAAA6kE,cAAAv1D,QAAA,QAAA1U,SACAA,EAAAH,SAAAy8B,KAAAx4B,EAAAsB,MAAA6kE,cAAA/+C,MAAA,QAAAlrB,SAEAiT,EAAA,uBAAAvN,SACAuN,EAAA,QAAAq2B,OAAA,gGAAAxlC,EAAA+H,UAAA,cAAA+O,EAAAuQ,SAAA,YAAAnrB,EAAAmrB,SAAA,qDC/CA1sB,MAAAkF,WAAA,gBAAA,CAAA,SAAA,SAAA,aAAA,eACA,SAAAG,EAAAC,EAAAjF,EAAAmgD,GAEAn7C,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA4B,EAAAulD,UAAApK,EAAAj0C,aAAA,KAGAlH,EAAAM,aAAA,CACAwE,KAAA,YACAvE,QAAA,CACA,CAAAC,UAAA,OAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAC,MAAA,SACA,CAAAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,UACA,CAAAF,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,UAAAC,MAAA,UAIAX,EAAAulD,UAAApK,EAAAj0C,cAEAlH,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAsB,MAAA65C,EAAAz5C,YACAP,EAAAK,UAQA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,+BACA4B,OANAxB,EAAA2B,YAAA,SAAAvD,GACA+8C,EAAAv5C,OAAAxD,KAMA4D,MAAAhC,OCzCArF,MAAAkF,WAAA,sBAAA,CAAA,SAAA,eAAA,mBACA,SAAAG,EAAAm7C,EAAAj5C,GAEAi5C,EAAA0K,uBAAA7lD,EAAAsB,OAEAtB,EAAAqC,UAAAzH,QAAA2G,KAAAvB,EAAAsB,OAEAtB,EAAAwC,aAAA,SAAApE,GAEA4B,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEAs4C,EAAAxd,KAAAv/B,EAEA,WACA4B,EAAA0C,SAGA,SAAAsJ,GACAhM,EAAA4C,YAAAoJ,EACAhM,EAAA6C,UAAA,MAIA7C,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAqC,YAGArC,EAAA0sD,WAAA,KAAA1sD,EAAAsB,MAAAwkD,gBAAAC,kBACA/lD,EAAAsB,MAAAwkD,gBAAAC,kBACA,EAEA/lD,EAAAgrH,mBAAA,SAAAt+D,GACA,KAAAA,EACA1sD,EAAAsB,MAAAwkD,gBAAAC,kBAAA2G,EAEA1sD,EAAAqC,UAAAyjD,gBAAAC,kBAAA,IACA/lD,EAAAsB,MAAAwkD,gBAAAC,kBAAA/lD,EAAAqC,UAAAyjD,gBAAAC,kBAEA/lD,EAAAsB,MAAAwkD,gBAAAC,kBAAA,GAKA/lD,EAAAiG,WAAA,CACA,CACA5K,MAAA,WACAyG,SAAA,yCACA,CACAzG,MAAA,qBACAyG,SAAA,kDACA+vG,gBAAA,GACA,CACAx2G,MAAA,sBACAyG,SAAA,mDACA+vG,gBAAA,IAIA3vG,EAAAE,SAAAo9G,wBACAx/G,EAAAiG,WAAA9H,KAAA,CACA9C,MAAA,8BACAyG,SAAA,uDAIA9B,EAAAiG,WAAAlE,UAAA,KCnEApH,MAAAkF,WAAA,oBAAA,CAAA,SAAA,QAAA,KAAA,SAAA,aAAA,UAAA,gBACA,aAAA,cAAA,cAAA,UAAA,uBACA,SAAAG,EAAA27B,EAAAzzB,EAAAjI,EAAAjF,EAAAoN,EAAAiD,EACA68G,EAAA7/G,EAAAlF,EAAA8+C,EAAA6jE,GAyGA,SAAAmF,EAAA7sH,GACA4B,EAAAkrH,aAAA9sH,EACA4B,EAAA2D,WAAA,8BAAAvF,GAGA,SAAAqY,EAAAlT,GACAvD,EAAAmrH,cAAAjD,EAAAkD,qBAAA7nH,GA7GAvD,EAAAqrH,cAAA,GACArrH,EAAAkrH,aAAA,KACAlrH,EAAAmrH,cAAA,GAEAnrH,EAAAsrH,cAAA,CAAArF,oBAAA,MAGAjmH,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,gEAIA9B,EAAAM,aAAA,CACAwE,KAAA,gBACAvE,QAAA,CACA,CACAC,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAE,UAAA,MACAgI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAQ,kBAAAzK,EAAA,OAAA,UAAA,gBAEA,CAAAoC,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAC,MAAA,SACA,CACAH,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAAo5C,QAEAxhD,MAAA,SAEA,CAAAH,UAAA,gBAAAC,QAAAzF,EAAAM,QAAA,uBAAAoF,SAAA,WAAAjE,OAAA,CAAAb,KAAA,SAAA+E,MAAA,OAAAukB,SAAA,GACA,CAAA1kB,UAAA,oBAAAC,QAAAzF,EAAAM,QAAA,0BAAAoF,SAAA,UAAAC,MAAA,QACA,CAAAH,UAAA,aAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,UAAAC,MAAA,SAEA8rB,cAAA,SAAA5rB,GACAb,EAAAurH,iBAAA1qH,EAAAuI,WAEAF,cAAA,SAAArI,GACA,QAAAA,EAAAsI,UACAtI,EAAAuI,UAAAC,iBAAAxI,EAAAyI,UACAkiH,kBACA3qH,EAAA2I,WAAAC,SAAA,iBAIAxE,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,gCACA6J,UAAA,SAAA6E,GAAA,OAAA7G,EAAAU,SAAA,sBACAuB,SAAA,SAAA4E,GACAhK,EAAAyrH,kCAEA,CACAvmH,KAAAlK,EAAAM,QAAA,2BACA6J,UAAA,SAAA6E,GAAA,OAAA7G,EAAAU,SAAA,wBAAA7D,EAAAkrH,cACA9lH,SAAA,SAAA4E,GACAhK,EAAA0rH,uBAAA,CAAA1rH,EAAAkrH,iBAEA,CACAhmH,KAAAlK,EAAAM,QAAA,oCACA6J,UAAA,SAAA6E,GAAA,OAAA7G,EAAAU,SAAA,sBACAuB,SAAA,SAAA4E,GACAhK,EAAA0rH,uBAAA1rH,EAAAqrH,iBAEA,CACAnmH,KAAAlK,EAAAM,QAAA,0BACA6J,UAAA,SAAA6E,GAAA,OAAA7G,EAAAU,SAAA,mBACAuB,SAAA,SAAA4E,GACAhK,EAAA2rH,qBAAA3rH,EAAAkrH,kBAMAlrH,EAAA6F,OAAA,mCAAA,SAAAC,EAAAC,GACAD,GACA1J,EAAAkJ,QAAAtF,EAAAmrH,cAAA,SAAA9zG,GACA,IAAAkX,EAAAnyB,EAAAwuD,UAAAvzC,EAAAu0G,SAAA,CAAA3F,oBAAAngH,IAEAuR,EAAAw0G,eADA,IAAAt9F,EACAlX,EAAAu0G,SAAAr9F,GAAAu9F,kBAEA,OAIA9rH,EAAAurH,mBACAvrH,EAAAurH,iBAAA9iH,aAAA,gBAAA,WAAA,GAEAq9G,EAAAiG,wBAAAjmH,GAAAzE,KAAA,SAAA+mH,GACApoH,EAAAurH,iBAAA9iH,aAAA,gBAAA,UAAA2/G,EAAAtjH,WAIA9E,EAAAurH,kBACAvrH,EAAAurH,iBAAA9iH,aAAA,gBAAA,WAAA,GAGArM,EAAAkJ,QAAAtF,EAAAmrH,cAAA,SAAA9zG,GACAA,EAAAw0G,cAAA,UAGA,GAWAp1G,GAAA,GAEAzW,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACAqY,GAAA,GAEAw0G,EAAA,QAGAjrH,EAAA2E,gBAAA,SAAAC,GACA5E,EAAAqrH,cAAAzmH,GAGA5E,EAAAiB,cAAA,SAAA7C,GACA6sH,EAAA7sH,IAGA4B,EAAA0rH,uBAAA,SAAAjD,GACAuD,EAAA5qH,SAAAC,KAAA,WACA2qH,EAAAhsH,OAAAyoH,cAAAA,EACAuD,EAAAxqH,UAKAxB,EAAAyrH,8BAAA,WACAzF,EAAA5kH,SAAAC,KAAA,WACA2kH,EAAAxkH,UAoCA,IAAAwkH,EAAA/lH,EAAA,CACAL,YAAA,iDACA4B,OAlCAxB,EAAA2rH,qBAAA,SAAAl+D,GAcApiD,EAAA6B,eAAA,CACA7R,MAAA,8BACA8R,QAAAnS,EAAAM,QAAA,8BAAAs0B,EAAA69B,EAAAtoC,UACA/X,QAAA,CAAA,CACAlI,KAAA,cACAE,SAjBA,WACA68C,EAAAgqE,UAAAx+D,EAAA9K,QAAA,EAAA,WACAlsC,EAAAlT,YAgBA2oH,QAAA,GACA,CACAhnH,KAAA,iCACAE,SAfA,WACA68C,EAAAgqE,UAAAx+D,EAAA9K,QAAA,EAAA,WACAlsC,EAAAlT,YAcA2oH,QAAA,GACA,CACAhnH,KAAA,aACA0vG,SAAA,QAQA5yG,MAAAhC,EAAAiC,SAGA+pH,EAAA/rH,EAAA,CACAL,YAAA,qDACA4B,MAAA,EACAQ,MAAAhC,EAAAiC,YC9LAtH,MAAAkF,WAAA,0BAAA,CAAA,SAAA,SAAA,aAAA,aACA,SAAAG,EAAAC,EAAAjF,EAAAktH,GAEAloH,EAAAmsH,oBAAA,GAEAnsH,EAAA/E,IAAA,8BAAA,SAAA4F,EAAAurH,GACApsH,EAAAmsH,oBAAA1sH,OAAA,EACA2sH,GACAlE,EAAAmE,uBAAAD,EAAAzpE,QAAAvhD,SAAAC,KACA,SAAAjD,GACA4B,EAAAmsH,oBAAAhuH,KAAAsf,MAAAzd,EAAAmsH,oBAAA/tH,EAAAwtH,cAKA5rH,EAAAssH,+BAAA,CACAxnH,KAAA,qBACAvE,QAAA,CACA,CAAAC,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,SAAAE,UAAA,MAAAD,MAAA,SACA,CAAAH,UAAA,cAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,UAEA,CAAAF,UAAA,oBAAAC,QAAAzF,EAAAM,QAAA,mBAAAoF,SAAA,OAAAC,MAAA,QACA,CAAAH,UAAA,mBAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,OAAAC,MAAA,QAEA,CAAAH,UAAA,YAAAC,QAAAzF,EAAAM,QAAA,sBAAAoF,SAAA,OAAAC,MAAA,QACA,CAAAH,UAAA,UAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,OAAAC,MAAA,SAEAuI,cAAA,SAAArI,GACA,IACAzC,EADA,QAAAyC,EAAAsI,WACA/K,EAAAyC,EAAAuI,UAAAC,iBAAAxI,EAAAyI,WACAijH,iBACA1rH,EAAA2I,WAAAC,SAAA,eAEArL,EAAAouH,mBACA3rH,EAAA2I,WAAAC,SAAA,sBChCA9O,MAAAkF,WAAA,YAAA,CAAA,SAAA,QAAA,KAAA,SAAA,aAAA,UAAA,UAAA,eACA,qBAAA,cAAA,cAAA,gBAAA,WAAA,mBACA,SAAAG,EAAA27B,EAAAzzB,EAAAjI,EAAAjF,EAAAoN,EAAA65C,EAAA9G,EACAL,EAAAzyC,EAAAlF,EAAAkI,EAAAmD,EAAAtM,GAEAlC,EAAAokB,aAAA,CAAAqoG,yBAAA,GACAzsH,EAAA0sH,MAAA,GAEA1sH,EAAAg2D,cAAA9zD,EAAAE,SACAuqH,EACA3sH,EAAAg2D,cAAA8qD,gBAAA,GACA9gH,EAAAg2D,cAAA+qD,gBAAA,GACA/gH,EAAAg2D,cAAA2sD,0BAAA,GACA3iH,EAAAg2D,cAAA4sD,mBAAA,GACA5iH,EAAAg2D,cAAA6sD,sBAAA,GACA7iH,EAAAg2D,cAAA8sD,yBAAA,GACA9iH,EAAAg2D,cAAA+sD,sBAAA,GACA/iH,EAAAg2D,cAAAgtD,iCAAA,GACAhjH,EAAAg2D,cAAAitD,+BAAA,GACAjjH,EAAAg2D,cAAAmtD,uBAAA,EA2CA,SAAAyJ,EAAAC,GAEA,SAAAC,EAAAC,GACA,EAAAA,EAAAttH,SAvCA,SAAAutH,EAAAD,EAAAx+F,EAAA0+F,GAEA,IACAx/D,EADAs/D,EAAAttH,QAAA8uB,EAAA,IACAk/B,EAAA7yD,QAAA2G,KAAAwrH,EAAAx+F,KACA2+F,kBAAA,EACAjrE,EAAAl/C,OAAA0qD,EACA,WACAw/D,EAAA,CACAE,aAAA5+F,EAAA,GAAAw+F,EAAAttH,OAAA,IAAA,IACA2tH,YAAA,QAAA3/D,EAAAtoC,SAAA,KAAAsoC,EAAAvL,MAAA,IACAvlB,OAAA,IAEAnuB,EAAA,WACAw+G,EAAAD,EAAAx+F,EAAA,EAAA0+F,IACA,MAEA,SAAAtqH,GACA0qH,EAAAjxH,EAAAszB,KAAAtzB,EAAA+a,IAAAxU,EAAAsoB,QAAA,GAAA,WAAA,KACAgiG,EAAA,CACAE,aAAA5+F,EAAA,GAAAw+F,EAAAttH,OAAA,IAAA,IACA2tH,YAAA,WAAA3/D,EAAAtoC,SAAA,KAAAsoC,EAAAvL,MAAA,OAAAmrE,EACA1wF,OAAA,IAEAnuB,EAAA,WACAw+G,EAAAD,EAAAx+F,EAAA,EAAA0+F,IACA,OACA,IAEAA,EAAA,CACAE,YAAA,IACAC,YAAApyH,EAAAM,QAAA,cACAqhC,OAAA,IAYAqwF,CAAAD,EAAA,EAHA1hH,EAAAiiH,gBACAtyH,EAAAM,QAAA,sCACAN,EAAAM,QAAA,uCAKA,IACAiyH,EAgBAC,EAjBAX,GACAU,EAAAnxH,EAAAkoB,OAAAtkB,EAAA0sH,MAAA,SAAAj/D,GACA,OAAAA,EAAAggE,eAAAhgE,EAAAla,aAAAka,EAAAigE,mBAAAjgE,EAAAkgE,YAAAlgE,EAAAmgE,oBAGAviH,EAAA6B,eAAA,CACA7R,MAAA,uCACA8R,QAAAnS,EAAAM,QAAA,uCAAAs0B,EAAA29F,EAAA9tH,QACA2N,QAAA,CAAA,CACAlI,KAAA,eACAE,SAAA,WAAA0nH,EAAAS,KACA,CACAroH,KAAA,iBACA0vG,SAAA,QAIA4Y,EAAApxH,EAAAkoB,OAAAtkB,EAAA0sH,MAAA,SAAAj/D,GACA,OAAAA,EAAAggE,eAAAhgE,EAAAla,aAAAka,EAAAigE,oBAAAjgE,EAAAkgE,YAAAlgE,EAAAmgE,oBAGAviH,EAAA6B,eAAA,CACA7R,MAAA,oCACA8R,QAAAnS,EAAAM,QAAA,oCAAAs0B,EAAA49F,EAAA/tH,QACA2N,QAAA,CAAA,CACAlI,KAAA,eACAE,SAAA,WAAA0nH,EAAAU,KACA,CACAtoH,KAAA,iBACA0vG,SAAA,OA6GA,SAAAqW,EAAA7sH,GACA4B,EAAAkrH,aAAA9sH,EACA4B,EAAA2D,WAAA,uBAAA3D,EAAAkrH,cA/LAlrH,EAAA6F,OAAA,uCAAA,SAAAC,EAAAC,GACA/F,EAAA0sH,MAAAzqE,EAAA/6C,aAAA,GAAApB,KACA,GAoFA9F,EAAAM,aAAA,CACAwE,KAAA,QACAkgB,QAAA,KACAzkB,QAAA,CACA,CACAC,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAE,UAAA,MACAgI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAQ,kBAAAzK,EAAA,OAAA,UAAA,gBAEA,CACAoC,UAAA,iBACAC,QAAAzF,EAAAM,QAAA,gBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,WAAAA,CAAAW,EAAA8kH,iBAEAltH,MAAA,SAEA,CAAAH,UAAA,QAAAC,QAAAzF,EAAAM,QAAA,iBAAAoF,SAAA,SAAAC,MAAA,SACA,CACAH,UAAA,QACAC,QAAAzF,EAAAM,QAAA,iBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,QAAAA,CAAAW,EAAAo5C,QAEAxhD,MAAA,SAEA,CAAAH,UAAA,eAAAC,QAAAzF,EAAAM,QAAA,yBAAAoF,SAAA,WAAAjE,OAAA,CAAA20D,SAAA,SAAAzwD,MAAA,SACA,CACAH,UAAA,oBACAC,QAAAzF,EAAAM,QAAA,qBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,kBAAAA,CAAAW,EAAAuwD,oBAEA34D,MAAA,SAEA,CAAAH,UAAA,oBAAAC,QAAAzF,EAAAM,QAAA,+BAAAoF,SAAA,UAAAC,MAAA,QACA,CAAAH,UAAA,oBAAAC,QAAAzF,EAAAM,QAAA,0BAAAoF,SAAA,UAAAC,MAAA,SAEAkyC,wBAAA,WACA,OAAA1vC,EAAAU,SAAA,gBAEAqF,cAAA,SAAArI,GACA,QAAAA,EAAAsI,SACAtI,EAAAuI,UAAAC,iBAAAxI,EAAAyI,UACAiqC,YACA1yC,EAAA2I,WAAAC,SAAA,gBAIAxE,eAAA,CAAA,CACAC,KAAAlK,EAAAM,QAAA,wCACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,gBACAuB,SAAA,SAAAhH,GAAAwuH,GAAA,KACA,CACA1nH,KAAAlK,EAAAM,QAAA,qCACA6J,UAAA,WAAA,OAAAhC,EAAAU,SAAA,gBACAuB,SAAA,SAAAhH,GAAAwuH,GAAA,OAIA1kH,EAAAiD,IAAA,CAAAgwC,EAAAj0C,cAAA9F,SAAA05C,EAAA5zC,cAAA9F,WACAC,KAAA,WACArB,EAAA0sH,MAAAzqE,EAAA/6C,aAAA,GAAAlH,EAAAokB,aAAAqoG,2BAGAzsH,EAAA/E,IAAA,cAAA,SAAA4F,EAAAzC,GACA8J,EAAAiD,IAAA,CAAAgwC,EAAAj0C,cAAA9F,SAAA05C,EAAA5zC,cAAA9F,WACAC,KAAA,WACArB,EAAA0sH,MAAAzqE,EAAA/6C,aAAA,GAAAlH,EAAAokB,aAAAqoG,yBACAzsH,EAAAM,cAAAN,EAAAM,aAAAmD,cACAzD,EAAAM,aAAAmD,aAAAa,WAAA,IAAA,GAGA2mH,EAAA,UAIAjrH,EAAA6B,KAAA,CACA,CACAxG,MAAA,aACAyG,SAAA,uCAEA,CACAzG,MAAA,mBACAyG,SAAA,0CAIA6qH,GACA3sH,EAAA6B,KAAA1D,KAAA,CACA9C,MAAA,4BACAyG,SAAA,gDAIA9B,EAAA6B,KAAAE,UAAA,EAEA/B,EAAA6F,OAAA,iBAAA,SAAAC,EAAAC,GACA/F,EAAA2D,WAAA,mBAAA,CAAA5B,UAAA+D,MAQA9F,EAAAkrH,aAAA,GAEAlrH,EAAAiB,cAAA,SAAA7C,GACA6sH,EAAA7sH,IAGA4B,EAAAyB,SAAA,WACA,IAAAw3D,EAAAhX,EAAAvgD,YAEAP,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAi5D,WAAAr+D,QAAA2G,KAAA03D,GACA93D,EAAAnB,OAAA05D,UAAA,SAAAp4D,GACAtB,EAAAM,cAAAN,EAAAM,aAAAmD,eACAzD,EAAAM,aAAAmD,aAAAF,SAAA,GACAvD,EAAAM,aAAAmD,aAAAa,WAAA,CAAAhD,EAAAwB,KAAA,GACA9C,EAAAM,aAAAmD,aAAAqqH,cAAAxsH,EAAAwB,MAGA3B,EAAAK,UAIAxB,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAAi5D,WAAAr+D,QAAA2G,KAAAnD,GACA+C,EAAAnB,OAAA05D,UAAA,SAAAp4D,KAGAH,EAAAK,UASA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,0BACA4B,OAPAxB,EAAA2B,YAAA,SAAAvD,GACA6jD,EAAArgD,OAAAxD,KAOA4D,MAAAhC,OClQArF,MAAAkF,WAAA,kBAAA,CAAA,SAAA,UAAA,cAAA,mBAAA,QAAA,gBACA,SAAAG,EAAAiiD,EAAA9+C,EAAAjB,EAAAy5B,EAAAtwB,GAEArL,EAAA+tH,eAAA5qH,EAAAU,SAAA,eAEA7D,EAAAg2D,cAAA9zD,EAAAE,SACAuqH,EACA3sH,EAAAg2D,cAAA8qD,gBAAA,GACA9gH,EAAAg2D,cAAA+qD,gBAAA,GACA/gH,EAAAg2D,cAAA2sD,0BAAA,GACA3iH,EAAAg2D,cAAA4sD,mBAAA,GACA5iH,EAAAg2D,cAAA6sD,sBAAA,GACA7iH,EAAAg2D,cAAA8sD,yBAAA,GACA9iH,EAAAg2D,cAAA+sD,sBAAA,GACA/iH,EAAAg2D,cAAAgtD,iCAAA,GACAhjH,EAAAg2D,cAAAitD,+BAAA,GACAjjH,EAAAg2D,cAAAmtD,uBAAA,EAEAnjH,EAAAguH,qBAAAhuH,EAAAi5D,WAAAy0D,mBAAA1tH,EAAAi5D,WAAA00D,WACA3tH,EAAAiuH,eAAArzH,QAAA2G,KAAAvB,EAAAi5D,YACAj5D,EAAA6C,UAAA,EAEA7C,EAAAkuH,eAAA,WACAluH,EAAAguH,qBACA3iH,EAAA6B,eAAA,CACA7R,MAAA,wBACA8R,QAAA,sBACAC,QAAA,CAAA,CACAlI,KAAA,kBACA,CACAA,KAAA,aACAE,SAAA,WACApF,EAAAguH,sBAAAhuH,EAAAguH,0BAKAhuH,EAAAguH,sBAAAhuH,EAAAguH,sBAIAhuH,EAAAmuH,iBAAA,SAAA/vH,GAeA,SAAAqE,EAAA2rH,GACApuH,EAAA6C,UAAA,EACA7C,EAAA05D,WACA15D,EAAA05D,UAAA00D,GAEApuH,EAAA0C,QAGA,SAAAC,EAAAqJ,GACAhM,EAAA6C,UAAA,EACA7C,EAAAquH,gBAAAriH,EAxBAhM,EAAA6C,WAIA7C,EAAA6C,UAAA,EAEAzE,EAAAyU,MACAovC,EAAAj/C,OAAA5E,EAAAqE,EAAAE,IAEAvE,EAAAkwH,uBAAAtuH,EAAAguH,qBACA/rE,EAAAl/C,OAAA3E,EAAAqE,EAAAE,MAkBA3C,EAAAuuH,+BAAA,SAAAnwH,GACAA,EAAA8uH,kBAAA,EACAltH,EAAAmuH,iBAAA/vH,IAGA4B,EAAAsC,kBAAA,SAAAlE,GACA,OAAAxD,QAAA2H,OAAAnE,EAAA4B,EAAAiuH,kBAAAjuH,EAAAy5D,WAIAz5D,EAAA2qH,iBAAA,GAEA3qH,EAAA4qH,SAAA,WACA,OAAA,GAGA5qH,EAAAymG,WAAA,SAAAr2F,GACA,GAAAA,EAQA,OAAAurB,EAAA1tB,IAAA,oDAAA,CAAAy0C,OAPA,CACA2W,QAAAjpD,EACAi3B,SAAA,KACAwjF,OAAA,KACAC,OAAA,0CACApvH,IAAA,6CAGA2F,KAAA,SAAAob,GACAzc,EAAA2qH,iBAAAlrH,OAAA,EACAO,EAAA2qH,iBAAAxsH,KAAAsf,MAAAzd,EAAA2qH,iBAAAluG,EAAAre,KAAAmkD,YAKAviD,EAAAiG,WAAA,CACA,CACA5K,MAAA,mBACAyG,SAAA,oCAEA,CACAzG,MAAA,0BACAyG,SAAA,wCAGA6qH,GACA3sH,EAAAiG,WAAA9H,KAAA,CACA9C,MAAA,4BACAyG,SAAA,+CAIA9B,EAAAiG,WAAA9H,KAAA,CACA9C,MAAA,oBACAyG,SAAA,0CAGA9B,EAAAiG,WAAAlE,UAAA,KC7HApH,MAAAkF,WAAA,oBAAA,CAAA,SAAA,SAAA,aAAA,UAAA,aAAA,cACA,SAAAG,EAAAC,EAAAjF,EAAAoN,EAAAkrD,EAAAjrD,GAEArI,EAAA/E,IAAA,uBAAA,SAAA4F,EAAAurH,GACAA,EACApsH,EAAAytD,MAAAztD,EAAAytD,KAAA3qD,KAAAspH,EAAAtpH,KACA9C,EAAAwuH,qBAAAl7D,EAAA2I,oBAAAmwD,EAAAtpH,KAKA9C,EAAAwuH,qBAAA,GAGAxuH,EAAAytD,KAAA2+D,IAGApsH,EAAAwuH,qBAAA,GACAxuH,EAAAytD,KAAA,GAEAztD,EAAAqpD,qBAAA,CACAvkD,KAAA,WACAvE,QAAA,CACA,CACAC,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,kBAAAoF,SAAA,SAAAC,MAAA,MAAAC,UAAA,MACAgI,mBAAA,SAAAxK,GAAA,OAAAiK,EAAAwW,mBAAAzgB,EAAA,cAEA,CAAAoC,UAAA,aAAAC,QAAAzF,EAAAM,QAAA,gBAAAoF,SAAA,UACA,CAAAF,UAAA,MAAAC,QAAAzF,EAAAM,QAAA,eAAAoF,SAAA,SAAAC,MAAA,QACA,CACAH,UAAA,SACAC,QAAAzF,EAAAM,QAAA,kBACAoF,SAAA,SACAoI,mBAAA,SAAAC,GACA,OAAAX,EAAA,SAAAA,CAAAW,EAAAi6B,SAEAriC,MAAA,QAEA,CAAAH,UAAA,WAAAC,QAAAzF,EAAAM,QAAA,oBAAAoF,SAAA,OAAAjE,OAAA,CAAAb,KAAA,SAAA+E,MAAA,UAEAwG,iBAAA,WAAA,OAAAnH,EAAAytD,OAGAztD,EAAAkB,UAAA,SAAA9C,GACA+C,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAA2F,WAAA3F,EAAAwuH,qBACArtH,EAAAnB,OAAAsB,MAAA1G,QAAA2G,KAAAnD,GACA+C,EAAAK,UAIAxB,EAAAyB,SAAA,WACAN,EAAAC,SAAAC,KAAA,WACAF,EAAAnB,OAAA2F,WAAA3F,EAAAwuH,qBACArtH,EAAAnB,OAAAsB,MAAAgyD,EAAA5xD,UAAA1B,EAAAytD,MACAtsD,EAAAK,UAQA,IAAAL,EAAAlB,EAAA,CACAL,YAAA,sCACA4B,OANAxB,EAAA2B,YAAA,SAAAvD,GACAk1D,EAAA1xD,OAAAxD,EAAA,KAAA4B,EAAAwuH,wBAMAxsH,MAAAhC,EAAAiC,YClEAtH,MAAA4T,UAAA,+BAAA,CACA,WAEA,MAAA,CACAI,SAAA,IACAE,SAAA,EACA7M,MAAA,CACAyrB,QAAA,KAEA7tB,YAAA,qDACAkP,KAAA,SAAA9M,EAAA+rB,EAAA/e,GAEAhN,EAAA2iD,KAAA,GACA,IAAA,IAAAprC,EAAA,EAAAA,EAAA,GAAAA,IAAA,CACA,IAAAwa,EAAA,GAAAxa,EAAA,EACAk1G,EAAA1yH,OAAAiG,EAAAyrB,QAAAS,KAAAxU,IAAAqa,EAAA,KAEAxF,EAAAnyB,EAAAsK,KAAA1E,EAAAyrB,QAAAslE,QAAA,SAAAtsF,GACA,OAAAA,EAAAusF,OAAAy7B,GAAAhoH,EAAAwsF,IAAAw7B,IAMAzsH,EAAA2iD,KAAAxmD,KAAA,CACAowB,IAAAhV,EACAqC,cALA4H,IAAA+K,EAMAmgG,SALAngG,EAAA,IASAvsB,EAAA8xB,MAAA,GACA,IAAAva,EAAA,EAAAA,EAAA,GAAAA,IACAvX,EAAA8xB,MAAA31B,KAAAob,GA0CA,SAAAo1G,EAAA54E,EAAAx2C,EAAAsB,GAPA0tB,EAQAwnB,EAAA24E,WAPA1sH,EAAAyrB,QAAAslE,SAAA/wF,EAAAyrB,QAAAslE,QAAAtzF,OAAA8uB,IACAvsB,EAAAyrB,QAAAslE,QAAA50F,KAAA,IAMAywH,EAJA5sH,EAAAyrB,QAAAslE,QAAAxkE,EAAA,GAMAqgG,EAAA57B,MAAAj3F,OAAAiG,EAAAyrB,QAAAS,KAAAxU,IAAA,GAAAna,EAAA,EAAA,KACAqvH,EAAA37B,IAAAl3F,OAAAiG,EAAAyrB,QAAAS,KAAAxU,IAAA,IAAA7Y,EAAA,GAAA,EAAA,KAEA+tH,EAAA57B,MAAA5nE,SAAAwjG,EAAA37B,IAAA,QACA27B,EAAA37B,IAAApiF,SAAA,EAAA,UAQA,SAAAg+G,EAAAtgG,GAIA,GAPAvsB,EAAAyrB,QAAAslE,QAAA,GAOA/wF,EAAA8sH,aAAA9sH,EAAA+sH,cASA,IARA,IAAAxvH,EAAAyC,EAAAgtH,UAAAzgG,EAAAvsB,EAAAgtH,SAAAzgG,EACA1tB,EAAAmB,EAAAgtH,UAAAzgG,EAAAA,EAAAvsB,EAAAgtH,SAIAC,GAAA,EACAC,EAHAltH,EAAA0sH,SAAA,EAKAn1G,EAAA,EAAAA,EAAA,GAAAA,IAAA,CACA,IAAAw8B,EAAA/zC,EAAA2iD,KAAAprC,GACAha,GAAAga,GAAAA,GAAA1Y,EACAmB,EAAA8sH,aACA/4E,EAAAn6B,UAAA,EACAm6B,EAAAo5E,SAAA,GACAntH,EAAA+sH,gBACAh5E,EAAAn6B,UAAA,EACAm6B,EAAAo5E,SAAA,GAGAp5E,EAAAo5E,UACAp5E,EAAAo5E,SAAA,EACAp5E,EAAAn6B,UAAAm6B,EAAAn6B,UAIAm6B,EAAAn6B,UACAm6B,EAAAxnB,IAAA0gG,GAAA,GACAl5E,EAAA24E,SAAA1sH,EAAA0sH,SACAC,EAAA54E,EAAAm5E,EAAAn5E,EAAAxnB,OAEAvsB,EAAA0sH,SAAA1sH,EAAA0sH,SAAA,EACA34E,EAAA24E,SAAA1sH,EAAA0sH,SAEAC,EAAA54E,EADAm5E,EAAAn5E,EAAAxnB,IACAwnB,EAAAxnB,MAEA0gG,EAAAl5E,EAAAxnB,KAEAwnB,EAAA24E,SAAA,MA/FA1sH,EAAA8sH,aAAA,EACA9sH,EAAA+sH,eAAA,EACA/sH,EAAAgtH,SAAA,KACAhtH,EAAAotH,iBAAA,KACAptH,EAAA0sH,SAAA,EAEA1sH,EAAAqtH,YAAA,SAAAt5E,GACAA,EAAAn6B,UACA5Z,EAAA8sH,aAAA,EACA9sH,EAAA+sH,eAAA,IAEA/sH,EAAA8sH,aAAA,EACA9sH,EAAA+sH,eAAA,GAEA/sH,EAAAgtH,SAAAj5E,EAAAxnB,IACAvsB,EAAAotH,iBAAAr5E,EAEA84E,EAAA94E,EAAAxnB,MAGAvsB,EAAAstH,UAAA,SAAAv5E,GACA/zC,EAAA8sH,aAAA,EACA9sH,EAAA+sH,eAAA,EACA/sH,EAAAgtH,SAAA,KACAhtH,EAAAotH,iBAAA,KAEA,IAAA,IAAA71G,EAAA,EAAAA,EAAA,GAAAA,IACAvX,EAAA2iD,KAAAprC,GAAA41G,SAAA,GA6EAntH,EAAAutH,YAAA,SAAAx5E,IACA/zC,EAAA8sH,aAAA9sH,EAAA+sH,iBACA/sH,EAAAotH,mBAAAr5E,GACA84E,EAAA94E,EAAAxnB,KAGAvsB,EAAAotH,iBAAAr5E,SCnJAp7C,MAAA4T,UAAA,2BAAA,CAAA,WAAA,aAAA,uBACA,SAAAC,EAAAxT,EAAA8qH,GACA,SAAAr3G,EAAAnN,GACA,GAAAA,EAAA,CAMAwD,EAHAxD,EAAAmlB,OAGAnlB,EAAAwD,KAFAxD,EAAAwD,KAAA,KAAA9J,EAAAM,QAAA,sBAAA,IAKA,OAAAwJ,GAGA,SAAA4J,EAAApN,GACA,OAAAA,EAAAmlB,OAGAnlB,EAAAwD,KAFAxD,EAAAwD,KAAA,KAAA9J,EAAAM,QAAA,sBAAA,IAMA,MAAA,CACAqT,SAAA,IACAC,QAAA,UACAC,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEAT,EAAA,WAEA,IAAAU,EAAA42G,EAAAr4E,mBAAA,EAAAx+B,EAAAw8B,aAEAt8B,EAAAJ,GAAAK,QAAA,CACAC,YAAArU,EAAAM,QAAA,6CACAmT,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,wBAAA,EACApR,KAAA8Q,EACApM,GAAA,SAAA0sH,GAAA,OAAAA,EAAAvJ,qBACAr2G,QAAA,SAAAC,EAAA3K,EAAA9G,GACA,OAAA,GAAAA,EAAA0G,KAAAgL,cAAAC,QAAAF,EAAAC,kBAIAb,EAAAe,QAAA,WACAd,EAAA9N,SAAAC,KAAA,WACAmN,EAAA,WACAW,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,iBAKAhB,EAAAe,YAGAf,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,KAMAoT,EAAAqe,GAAA,SAAA,SAAAvsB,GACAmB,EAAAqrB,OAAA,WACApe,EAAAqe,cAAAzsB,EAAAiuB,SAIA/f,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,UCrFAhB,MAAA4T,UAAA,qBAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GAEA,SAAAyT,EAAA4I,GACA,GAAAA,EAEA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,SAAAwJ,EAAA2I,GACA,OAAArc,EAAAM,QAAA+b,EAAAnS,MAGA,MAAA,CACAyJ,SAAA,IACAC,QAAA,UACA8e,SAAA,EACA7e,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAC,GAEAA,EAAAiB,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAnB,EAAAqB,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMA6S,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAI,yBAAA,EACAf,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAnR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,4BACA,CAAApC,GAAA,EAAAoC,KAAA,iCAGA6J,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAsT,EAAAe,QAAA,WACAb,EAAAJ,GAAAK,QAAA,MAAAH,EAAAgB,aAGAhB,EAAAe,WACA,QC7DArV,MAAA4T,UAAA,yCAAA,CACA,WAEA,MAAA,CACAI,SAAA,IACAE,SAAA,EACA7M,MAAA,CACAyrB,QAAA,KAEA7tB,YAAA,mEACAkP,KAAA,SAAA9M,EAAA+rB,EAAA/e,GAEAhN,EAAA2iD,KAAA,GACA,IAAA,IAAAprC,EAAA,EAAAA,EAAA,GAAAA,IAAA,CACA,IAAAwa,EAAA,GAAAxa,EAAA,EAEAqC,EAAA5Z,EAAAyrB,QAAAu4B,QAAAt/B,WAAAqN,GAAA/xB,EAAAyrB,QAAAu4B,QAAAr/B,QAAAoN,GACA/xB,EAAAyrB,QAAAw4B,QAAAv/B,WAAAqN,GAAA/xB,EAAAyrB,QAAAw4B,QAAAt/B,QAAAoN,GACA/xB,EAAAyrB,QAAAy4B,QAAAx/B,WAAAqN,GAAA/xB,EAAAyrB,QAAAy4B,QAAAv/B,QAAAoN,GACA/xB,EAAAyrB,QAAA04B,QAAAz/B,WAAAqN,GAAA/xB,EAAAyrB,QAAA04B,QAAAx/B,QAAAoN,GACA/xB,EAAAyrB,QAAA24B,QAAA1/B,WAAAqN,GAAA/xB,EAAAyrB,QAAA24B,QAAAz/B,QAAAoN,EAEA07F,EAAA,EACAA,EAAAztH,EAAAyrB,QAAAu4B,QAAAt/B,WAAAqN,GAAA/xB,EAAAyrB,QAAAu4B,QAAAr/B,QAAAoN,EAAA,EAAA07F,EACAA,EAAAztH,EAAAyrB,QAAAw4B,QAAAv/B,WAAAqN,GAAA/xB,EAAAyrB,QAAAw4B,QAAAt/B,QAAAoN,EAAA,EAAA07F,EACAA,EAAAztH,EAAAyrB,QAAAy4B,QAAAx/B,WAAAqN,GAAA/xB,EAAAyrB,QAAAy4B,QAAAv/B,QAAAoN,EAAA,EAAA07F,EACAA,EAAAztH,EAAAyrB,QAAA04B,QAAAz/B,WAAAqN,GAAA/xB,EAAAyrB,QAAA04B,QAAAx/B,QAAAoN,EAAA,EAAA07F,EACAA,EAAAztH,EAAAyrB,QAAA24B,QAAA1/B,WAAAqN,GAAA/xB,EAAAyrB,QAAA24B,QAAAz/B,QAAAoN,EAAA,EAAA07F,EAEAztH,EAAA2iD,KAAAxmD,KAAA,CACAowB,IAAAhV,EACAqC,SAAAA,EACA8yG,SAAAe,IAIAztH,EAAA8xB,MAAA,GACA,IAAAva,EAAA,EAAAA,EAAA,GAAAA,IACAvX,EAAA8xB,MAAA31B,KAAAob,GAuCA,SAAAo1G,EAAA54E,EAAAx2C,EAAAsB,GACAk1C,EAAA24E,UAAA,IALAngG,EAMAwnB,EAAA24E,UAAAE,EALA5sH,EAAAyrB,QAAA,UAAA,EAAA,KAOA/G,UAAA,GAAAnnB,EAAA,EACAqvH,EAAAjoG,QAAA,IAAA9lB,EAAA,GAAA,GAiBA,SAAAguH,EAAAtgG,GAIA,GAhBAvsB,EAAAyrB,QAAAu4B,QAAAt/B,UAAA,EACA1kB,EAAAyrB,QAAAu4B,QAAAr/B,QAAA,EACA3kB,EAAAyrB,QAAAw4B,QAAAv/B,UAAA,EACA1kB,EAAAyrB,QAAAw4B,QAAAt/B,QAAA,EACA3kB,EAAAyrB,QAAAy4B,QAAAx/B,UAAA,EACA1kB,EAAAyrB,QAAAy4B,QAAAv/B,QAAA,EACA3kB,EAAAyrB,QAAA04B,QAAAz/B,UAAA,EACA1kB,EAAAyrB,QAAA04B,QAAAx/B,QAAA,EACA3kB,EAAAyrB,QAAA24B,QAAA1/B,UAAA,EACA1kB,EAAAyrB,QAAA24B,QAAAz/B,QAAA,EAOA3kB,EAAA8sH,aAAA9sH,EAAA+sH,cASA,IARA,IAAAxvH,EAAAyC,EAAAgtH,UAAAzgG,EAAAvsB,EAAAgtH,SAAAzgG,EACA1tB,EAAAmB,EAAAgtH,UAAAzgG,EAAAA,EAAAvsB,EAAAgtH,SAIAC,GAAA,EACAC,EAHAltH,EAAA0sH,SAAA,EAKAn1G,EAAA,EAAAA,EAAA,GAAAA,IAAA,CACA,IAAAw8B,EAAA/zC,EAAA2iD,KAAAprC,GACAha,GAAAga,GAAAA,GAAA1Y,EACAmB,EAAA8sH,aACA/4E,EAAAn6B,UAAA,EACAm6B,EAAAo5E,SAAA,GACAntH,EAAA+sH,gBACAh5E,EAAAn6B,UAAA,EACAm6B,EAAAo5E,SAAA,GAGAp5E,EAAAo5E,UACAp5E,EAAAo5E,SAAA,EACAp5E,EAAAn6B,UAAAm6B,EAAAn6B,UAIAm6B,EAAAn6B,UACAm6B,EAAAxnB,IAAA0gG,GAAA,GACAl5E,EAAA24E,SAAA1sH,EAAA0sH,SACAC,EAAA54E,EAAAm5E,EAAAn5E,EAAAxnB,OAEAvsB,EAAA0sH,SAAA1sH,EAAA0sH,SAAA,EACA34E,EAAA24E,SAAA1sH,EAAA0sH,SAEAC,EAAA54E,EADAm5E,EAAAn5E,EAAAxnB,IACAwnB,EAAAxnB,MAEA0gG,EAAAl5E,EAAAxnB,KAEAwnB,EAAA24E,SAAA,KAMAxqF,QAAAC,IAAAg/B,KAAAC,UAAAphE,EAAAyrB,UAzGAzrB,EAAA8sH,aAAA,EACA9sH,EAAA+sH,eAAA,EACA/sH,EAAAgtH,SAAA,KACAhtH,EAAAotH,iBAAA,KACAptH,EAAA0sH,SAAA,EAEA1sH,EAAAqtH,YAAA,SAAAt5E,GACAA,EAAAn6B,UACA5Z,EAAA8sH,aAAA,EACA9sH,EAAA+sH,eAAA,IAEA/sH,EAAA8sH,aAAA,EACA9sH,EAAA+sH,eAAA,GAEA/sH,EAAAgtH,SAAAj5E,EAAAxnB,IACAvsB,EAAAotH,iBAAAr5E,EAEA84E,EAAA94E,EAAAxnB,MAGAvsB,EAAAstH,UAAA,SAAAv5E,GACA/zC,EAAA8sH,aAAA,EACA9sH,EAAA+sH,eAAA,EACA/sH,EAAAgtH,SAAA,KACAhtH,EAAAotH,iBAAA,KAEA,IAAA,IAAA71G,EAAA,EAAAA,EAAA,GAAAA,IACAvX,EAAA2iD,KAAAprC,GAAA41G,SAAA,GAiFAntH,EAAAutH,YAAA,SAAAx5E,IACA/zC,EAAA8sH,aAAA9sH,EAAA+sH,iBACA/sH,EAAAotH,mBAAAr5E,GACA84E,EAAA94E,EAAAxnB,KAGAvsB,EAAAotH,iBAAAr5E,SC5JAp7C,MAAA4T,UAAA,wBAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAArQ,GACA,OAAAA,EAEA,MAAAA,EAAA0E,GACA,yFAAA9H,EAAAM,QAAA8C,EAAA8G,MAEA,MAAA9G,EAAA0E,GACA,sFAAA9H,EAAAM,QAAA8C,EAAA8G,MAEA,IAAA9G,EAAA0E,GACA,0DAAA9H,EAAAM,QAAA8C,EAAA8G,WADA,EARA,GAaA,SAAAwJ,EAAAtQ,GACA,OAAAqQ,EAAArQ,GAGA,MAAA,CACAuQ,SAAA,IACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,IAAAoC,KAAA,uBACA,CAAApC,GAAA,IAAAoC,KAAA,qBACA,CAAApC,GAAA,EAAAoC,KAAA,4BAIArF,EAAAmQ,YAGAnQ,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,kBC7EAzU,MAAA2pB,OAAA,+BAAA,CAAA,WAEA,SAAAorG,EAAAd,GACA,OAAA7yH,OAAA6yH,EAAA57B,OAAAv2F,OAAA,SAAA,IAAAV,OAAA6yH,EAAA37B,KAAAx2F,OAAA,SAGA,OAAA,SAAAhB,GAEA,IAAAo8B,EAAA,GAWA,OATAz7B,EAAAkJ,QAAA7J,EAAAs3F,QAAA,SAAAtsF,GACAoxB,EACAA,EAAAA,EAAA,KAAA63F,EAAAjpH,GAEAoxB,GAAA63F,EAAAjpH,KAKA,KAAAoxB,EACA,IAAAA,EAAA,IAGAA,MCvBAl9B,MAAA2pB,OAAA,gBAAA,CAAA,aAAA,SAAAtpB,GACA,OAAA,SAAAS,GACA,OAAAA,GACA,KAAA,EACA,OAAAT,EAAAM,QAAA,4BACA,KAAA,EACA,OAAAN,EAAAM,QAAA,8BACA,QACA,MAAA,QCRAX,MAAA2pB,OAAA,yCAAA,CAAA,WAEA,SAAAorG,EAAAliH,EAAAohH,GACA,IAQAlsB,EACAitB,EATA93F,EAAA,GAiBA,OAfA+2F,GAAA,EAAAA,EAAAjoG,QAAAioG,EAAAloG,YAEA,KAAAlZ,IACAqqB,GAAA,MAGA6qE,EAAArvE,KAAAu8F,MAAAhB,EAAAloG,UAAA,IACAipG,EAAAt8F,KAAAu8F,MAAAhB,EAAAloG,UAAA,IACAk8E,EAAAvvE,KAAAu8F,MAAAhB,EAAAjoG,QAAA,IACAkpG,EAAAx8F,KAAAu8F,MAAAhB,EAAAjoG,QAAA,IAGAkR,GADAA,EAAAA,EAAA,IAAA,IAAA6qE,GAAAjkF,OAAA,GAAA,KAAA,IAAAkxG,GAAAlxG,OAAA,IACA,OAAA,IAAAmkF,GAAAnkF,OAAA,GAAA,KAAA,IAAAoxG,GAAApxG,OAAA,IAGAoZ,EAGA,OAAA,SAAAp8B,GAEA,IAAAo8B,EAAA,GAEAA,EAFA,GAEA63F,EAFA,GAEAj0H,EAAAuqD,SAMA,OALAnuB,GAAA63F,EAAA73F,EAAAp8B,EAAAwqD,SACApuB,GAAA63F,EAAA73F,EAAAp8B,EAAAyqD,SACAruB,GAAA63F,EAAA73F,EAAAp8B,EAAA0qD,UACAtuB,GAAA63F,EAAA73F,EAAAp8B,EAAA2qD,UAGA,IAAAvuB,EAAA,IAGAA,MCrCAl9B,MAAA8gC,QAAA,uBAAA,CAAA,YAAA,KAAA,gBACA,SAAAC,EAAAxzB,EAAA0zB,GAEA,IAOAk0F,EAPAC,EAAAr0F,EAAA,+BAAA,GAAA,CACA/W,OAAA,CAAA8X,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,mCACA35B,OAAA,CAAA05B,OAAA,OAAAC,IAAA,mCACA15B,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,mCACA0B,OAAA,CAAA3B,OAAA,OAAAC,IAAA,qCAKA,SAAAx1B,EAAA3D,GAMA,OAHAusH,GADAA,GAAAvsH,EACAq4B,EAAAkC,UAAA,SAAAiyF,GAGAD,EAmFA,MAAA,CACA5oH,YAAAA,EACAlE,OAzDA,SAAA5E,EAAAigC,EAAAC,GACA1C,EAAA54B,OACA+sH,EACAD,EACA1xH,EACAigC,EACAC,EACA,wBAmDAv7B,OA/CA,SAAA3E,EAAAigC,EAAAC,GACA1C,EAAA74B,OACAgtH,EACAD,EACA1xH,EACAigC,EACAC,EACA,wBAyCA18B,OAtCA,SAAAxD,EAAAigC,EAAAC,GACA1C,EAAAh6B,OACAmuH,EACAD,EACA,CAAA7J,oBAAA7nH,EAAA6nH,qBACA5nF,EACAC,EACA,CACA2nF,oBAAA7nH,EAAA6nH,qBAEA,wBA6BAvkH,UA1BA,WACA,MAAA,CACAukH,oBAAA,EACAF,cAAA,EACAt/F,QAAA,EACA+8D,UAAA,KACAC,QAAA,KACAusC,YAAA,MAoBAviF,kBAtFA,SAAAlqC,EAAA0sH,GAEA,IAAAC,EAAAD,GAAA,EAEAr5C,EAAA1uE,EAAAq0B,QACA4zF,EAAA,GAiBA,OAhBAA,EAAA/uH,SAAAw1E,EAAAp6C,QAEAt1B,EAAA3D,GACAnC,SAAAC,KAAA,SAAAjD,GAEAsiG,EAAAtkG,EAAAkoB,OAAAlmB,EAAA,SAAAiZ,GACA,OAAAA,EAAAoP,QAAApP,EAAA4uG,qBAAAiK,IAGAC,EAAAhyH,KAAAsf,MAAA0yG,EAAAzvB,GACA9pB,EAAAtlE,QAAA6+G,IAEA,SAAAxtH,GACAi0E,EAAArlE,OAAA5O,KAGAwtH,GAiEApE,wBAjBA,SAAA9F,GACA,OAAA/9G,EAAA,SAAAoJ,EAAAC,GACArK,IAAA9F,SAAAC,KAAA,SAAAjD,GACAkT,EAAAlV,EAAAsK,KAAAtI,EAAA,CAAA6nH,oBAAAA,MACA,SAAAtjH,GACA4O,EAAA5O,YChGAhI,MAAA8gC,QAAA,mCAAA,CAAA,YAAA,KAAA,gBACA,SAAAC,EAAAxzB,EAAA0zB,GACA,IAAAw0F,EAAA10F,EAAA,4DAAA,GAAA,CACA20F,SAAA,CAAA5zF,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,+DACA4zF,YAAA,CAAA7zF,OAAA,MAAAC,IAAA,iEA+GA,MAAA,CACAonE,SA7GA,SAAA5Q,EAAAt3F,GACA,OAAAsM,EAAA,SAAAoJ,EAAAC,GAEA,IAAAqyF,EAAA7nG,OAAAH,GAAAgV,QAAA,WACA2/G,EAAAx0H,OAAAH,GAAAwrB,MAAA,WAAAxW,QAAA,OAEAgrB,EAAAkC,UAAA,WAAAsyF,EAAA,CACAl9B,WAAAA,EACAn5E,KAAA6pF,EAAA1nG,SACA8d,GAAAu2G,EAAAr0H,UACA,SAAAkC,GAEA,IADA,IAAAytB,EAAA,GACAtS,EAAA,EAAAA,EAAA,EAAAA,IAAA,CACA,IAAAi3G,EAAAp0H,EAAAsK,KAAAtI,EAAA,SAAAk2B,GACA,OAAAv4B,OAAAu4B,EAAApG,KAAA5P,OAAAslF,KAEA4sB,EACA3kG,EAAA1tB,KAAAqyH,GAEA3kG,EAAA1tB,KAAA,CAAA+vB,IAAA01E,EAAA1nG,SAAA62F,QAAA,KAEA6Q,EAAAlqF,IAAA,EAAA,OAEApI,EAAAua,IAEA,SAAAlpB,GACA4O,EAAA5O,QAoFAohG,SA9EA,SAAA7Q,EAAAt3F,EAAA0F,GACA,OAAA4G,EAAA,SAAAoJ,EAAAC,GAEA,IAAAqyF,EAAA7nG,OAAAH,GAAAgV,QAAA,WACA2/G,EAAAx0H,OAAAH,GAAAwrB,MAAA,WAAAxW,QAAA,OAEA8vF,EAAAtkG,EAAAkoB,OAAAhjB,EAAA,SAAAgzB,GAAA,QAAAA,EAAAy+D,SAAA,EAAAz+D,EAAAy+D,QAAAtzF,SAEAm8B,EAAAkE,oBACA,cACAswF,EACA,CACAl9B,WAAAA,EACAn5E,KAAA6pF,EAAA1nG,SACA8d,GAAAu2G,EAAAr0H,UAEAwkG,EACA,SAAAtiG,GACAkT,EAAAlT,IAEA,SAAAuE,GACA4O,EAAAqqB,EAAA60F,iBAAA9tH,SA0DAgiG,0BApDA,SAAAzR,EAAA2G,EAAAC,EAAA42B,GAEA,OAAAxoH,EAAA,SAAAoJ,EAAAC,GAQA,IAPA,IAUAo/G,EACAC,EAXAC,EAAA90H,OAAA89F,GAAAjpF,QAAA,WACAkgH,EAAA/0H,OAAA+9F,GAAA1yE,MAAA,WAAAxW,QAAA,OAEA8vF,EAAAtkG,EAAAkoB,OAAAosG,EAAA,SAAAp8F,GAAA,QAAAA,EAAAy+D,SAAA,EAAAz+D,EAAAy+D,QAAAtzF,SAEAsxH,EAAAh1H,OAAA80H,GACAG,EAAA,GACAD,EAAA3lG,SAAA0lG,IAEA,EAAApwB,EAAAjhG,SACAkxH,EAAA/1H,QAAA2G,KAAAm/F,GACAkwB,EAAA70H,OAAA+tD,SAAAinE,EAAAzxF,KAAAvjC,OAAA40H,EAAA,GAAAziG,KAAAtd,QAAA,UAEAxU,EAAAkJ,QAAAqrH,EAAA,SAAAr8F,GACAA,EAAApG,IAAAnyB,OAAAu4B,EAAApG,KAAAxU,IAAAk3G,GAAA10H,SACAE,EAAAkJ,QAAAgvB,EAAAy+D,QAAA,SAAAtsF,GACAA,EAAAusF,MAAAj3F,OAAA0K,EAAAusF,OAAAt5E,IAAAk3G,GAAA10H,SACAuK,EAAAwsF,IAAAl3F,OAAA0K,EAAAwsF,KAAAv5E,IAAAk3G,GAAA10H,WAGA80H,EAAA7yH,KAAAm2B,MAIAy8F,EAAAr3G,IAAA,EAAA,QAGAkiB,EAAAkE,oBACA,cACAswF,EACA,CACAl9B,WAAAA,EACAn5E,KAAA82G,EAAA30H,SACA8d,GAAA82G,EAAA50H,UAEA80H,EACA,SAAA5yH,GACAkT,EAAAlT,IAEA,SAAAuE,GACA4O,EAAAqqB,EAAA60F,iBAAA9tH,aC7GAhI,MAAA8gC,QAAA,WAAA,CAAA,YAAA,KAAA,OAAA,aAAA,gBACA,SAAAC,EAAAxzB,EAAA+oH,EAAAj2H,EAAA4gC,GACA,IAAAs1F,EAAAx1F,EAAA,kBAAA,GAAA,CACA/W,OAAA,CAAA8X,OAAA,MAAAhN,SAAA,EAAAiN,IAAA,sBACA35B,OAAA,CAAA05B,OAAA,OAAAC,IAAA,sBACA15B,OAAA,CAAAy5B,OAAA,OAAAC,IAAA,sBACA0B,OAAA,CAAA3B,OAAA,OAAAC,IAAA,wBA0EA,MAAA,CACAx1B,YAlEA,SAAAiqH,GACA,IAAAtlG,EAAA,GACAyQ,EAAAp0B,EAAAq0B,QACA1Q,EAAAzqB,SAAAk7B,EAAAE,QACA3Q,EAAAkE,WAAA,EAEA,IAAAqb,EAAA,IAAAH,eAAAC,WA0BA,OAxBAtP,EAAAkC,UAAA,SAAAozF,GAAA9vH,SAAAC,KAAA,SAAAjD,GACAxD,QAAA0K,QAAAlH,EAAA,SAAAiZ,GACAA,EAAA+5G,SAAAhmF,EAAAC,SAAAh0B,EAAAyzB,OACAzzB,EAAAg6G,YAAAJ,EAAAK,YAAA,4DACAlmF,EAAAC,SAAAh0B,EAAAyzB,OACA,UAAAzzB,EAAAvS,MACA+mB,EAAA1tB,KAAAkZ,KAGA,EAAAwU,EAAApsB,QAAA0xH,GACAtlG,EAAA1tB,KAAA,CACAm6C,SAAA,EACA84E,SAAA,MACAtsH,KAAA9J,EAAAM,QAAA,qBACA+1H,YAAA,kEAAAr2H,EAAAM,QAAA,uBAGAghC,EAAAhrB,QAAAua,GACAA,EAAAkE,WAAA,GACA,SAAA/jB,GACAswB,EAAA/qB,OAAAvF,GACA6f,EAAAkE,WAAA,IAGAlE,GAmCA7oB,OAhCA,SAAA5E,EAAAigC,EAAAC,EAAA34B,GACAi2B,EAAA54B,OACAkuH,EACAvrH,EACAvH,EACAigC,EACAC,IA2BAv7B,OAxBA,SAAA3E,EAAAigC,EAAAC,EAAA34B,GACAi2B,EAAA74B,OACAmuH,EACAvrH,EACAvH,EACAigC,EACAC,EACA,YAkBA18B,OAfA,SAAAxD,EAAAigC,EAAAC,EAAA34B,GACAi2B,EAAAh6B,OACAsvH,EACAvrH,EACAvH,EACAigC,EACAC,EACA,KACA,YAQA58B,UA5EA,WACA,MAAA,CACAopC,MAAA,eCTA,SAAA7a,GAGAA,EAAAiM,SAAA,SAAAlG,GACAn3B,KAAAk3B,WAAAC,IAMA/F,EAAAiM,SAAAv9B,UAAA,IAAAsxB,EAAA6F,qBACA7F,EAAAiM,SAAAv9B,UAAA44B,YAAAtH,EAAA6F,qBACA7F,EAAAiM,SAAAv9B,UAAA64B,OAAAvH,EAAA6F,qBAAAn3B,UAZA,CAFA4f,wBAAAA,yBAAA,ICEA,SAAA0R,GAGAA,EAAA+M,eAAA,SAAAloB,EAAAC,EAAAJ,EAAAxB,GACAtU,KAAAiW,YAAAA,EACAjW,KAAAk3B,WAAAjhB,EAAAC,EAAAJ,EAAAxB,IAOA8c,EAAA+M,eAAAr+B,UAAA,IAAAsxB,EAAA2G,2BACA3G,EAAA+M,eAAAr+B,UAAA44B,YAAAtH,EAAA+M,eACA/M,EAAA+M,eAAAr+B,UAAA64B,OAAAvH,EAAA2G,2BAAAj4B,UAMAsxB,EAAA+M,eAAAr+B,UAAAm4B,eAAA,SAAAla,EAAA7H,EAAA+f,EAAAiC,EAAAF,EAAA1jB,GACA,OAAA,IAAA8c,EAAAshG,kBAAA30G,EAAA7H,EAAA+f,EAAAiC,EAAAF,EAAA1jB,IArBA,CAFAoL,wBAAAA,yBAAA,ICEA,SAAA0R,GAGAA,EAAAshG,kBAAA,SAAA30G,EAAA7H,EAAA+f,EAAAiC,EAAApiB,EAAAxB,GACAtU,KAAAk3B,WAAAnZ,EAAA7H,EAAA+f,EAAAiC,EAAApiB,EAAAxB,IAMA8c,EAAAshG,kBAAA5yH,UAAA,IAAAsxB,EAAAqH,8BACArH,EAAAshG,kBAAA5yH,UAAA44B,YAAAtH,EAAAshG,kBACAthG,EAAAshG,kBAAA5yH,UAAA64B,OAAAvH,EAAAqH,8BAAA34B,UAKAsxB,EAAAshG,kBAAA5yH,UAAAy6B,kBAAA,SAAAtB,GACA,MAAA,CACA05F,qBAAA,EACAr+G,WAAAtU,KAAAsU,WACAwB,WAAA9V,KAAAg4B,WACAiB,mBAAAA,EACA9C,qBAAA,KACAC,mBAAA,KACAC,sBAAA,KACAC,oBAAA,KACA/V,MAAA,OA3BA,CAFAb,wBAAAA,yBAAA,ICEA,SAAA0R,GAGAA,EAAAwhG,eAAA,SAAAz2H,EAAAqkH,GACAxgH,KAAA6W,WAAA,GACA7W,KAAAwgH,yBAAAA,EAEAxgH,KAAAob,cACAjf,GACA6D,KAAA4xB,iBAAAz1B,IAOAi1B,EAAAwhG,eAAA9yH,UAAA,IAAAsxB,EAAAC,YACAD,EAAAwhG,eAAA9yH,UAAA44B,YAAAtH,EAAAC,YACAD,EAAAwhG,eAAA9yH,UAAA64B,OAAAvH,EAAAC,YAAAvxB,UAMAsxB,EAAAwhG,eAAA9yH,UAAA+yH,2BAAA,SAAA12H,GACA,IAAAyhB,EAAA,CAAA5D,eAAA,GAAAnD,WAAA,GAAA1I,QAAA,CAAAwkB,UAAA,KAEA/U,EAAA5D,eAAAE,yBAAAla,KAAAka,yBACA0D,EAAA5D,eAAA9Q,UAAAlJ,KAAAkJ,UACA0U,EAAA5D,eAAA1F,WAAAtU,KAAAsU,WACAsJ,EAAA5D,eAAA/T,KAAAjG,KAAAiG,KACA2X,EAAA5D,eAAAuG,MAAAvgB,KAAAugB,MACA3C,EAAA5D,eAAA84G,aAAA9yH,KAAA8yH,cAAA,IAAAr1H,KACAmgB,EAAA5D,eAAA+4G,mBAAA/yH,KAAA+yH,mBAEAn1G,EAAAzP,QAAAnO,KAAA4zB,cAAAz3B,GAEA,IAAA,IAAA0U,EAAA,EAAAA,EAAA7Q,KAAA6W,WAAAjW,OAAAiQ,IAAA,CACA,IAAAmiH,EAAAhzH,KAAA6W,WAAAhG,GACAmiH,EAAAr4G,YACAiD,EAAA/G,WAAAvX,KAAA0zH,EAAAC,+BAAA38G,KAAA08G,IAIA,OAAAp1G,GAGAwT,EAAAwhG,eAAA9yH,UAAAglC,SAAA,SAAAouF,GAGAlzH,KAAAkJ,UAAAgqH,EAAAl5G,eAAA9Q,UACAlJ,KAAAsU,WAAA4+G,EAAAl5G,eAAA1F,WACAtU,KAAAka,yBAAAg5G,EAAAl5G,eAAAE,yBACAla,KAAAiG,KAAAitH,EAAAl5G,eAAA/T,KACAjG,KAAAugB,MAAA2yG,EAAAl5G,eAAAuG,MACAvgB,KAAA8yH,aAAAI,EAAAl5G,eAAA84G,aACA9yH,KAAA+yH,mBAAAG,EAAAl5G,eAAA+4G,mBACA/yH,KAAAgT,SAAAkgH,EAAAlgH,SACAhT,KAAAua,uBAAA24G,EAAA34G,uBAEAva,KAAAmzH,mBAAAD,GAEAlzH,KAAAua,wBAAAva,KAAAua,uBAAAE,cACAza,KAAAuzB,oCAAAvzB,KAAAua,uBAAAE,YACAza,KAAAszB,8BAAA,GAGAtzB,KAAAoyB,qBAAA8gG,EAAA/kH,SAEAnO,KAAAozH,iBAAAF,IAIA9hG,EAAAwhG,eAAA9yH,UAAAszH,iBAAA,SAAAF,GACAA,EAAA/kH,SAAA+kH,EAAA/kH,QAAAzC,WAAA,KAAAwnH,EAAA/kH,QAAAzC,YACA1L,KAAAmzB,sCAAA+/F,EAAAlgH,SAAAmyB,mBAAA,EACAnlC,KAAAgzB,sCAAAkgG,EAAAlgH,SAAAkyB,mBAAA,EACAllC,KAAAqzB,2CAAA6/F,EAAAlgH,SAAAqgH,wBAAA,IAIAjiG,EAAAwhG,eAAA9yH,UAAAqzH,mBAAA,SAAAD,GAEA,IADA,IAAAF,EAAA,GACAt4G,EAAA,EAAAA,EAAAw4G,EAAAr8G,WAAAjW,OAAA8Z,IAAA,CACA,IAAA44G,EAAA,IAAA5zG,wBAAA6zG,yBAAAL,EAAAr8G,WAAA6D,GAAA1a,KAAAka,yBAAAla,KAAAwgH,0BACAwS,EAAA1zH,KAAAg0H,GACAtzH,KAAAka,0BAAAla,KAAAka,2BAAAo5G,EAAAz8G,WAAAqD,yBACAo5G,EAAA34G,YAAA,EAEA24G,EAAA34G,YAAA,EAGA3a,KAAA6W,WAAAvX,KAAAsf,MAAA5e,KAAA6W,WAAAm8G,IAMArjG,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,cAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,YAAA,MAAA9J,EAAA2iH,OACAz0C,IAGA,OAAAA,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,gBAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,YAAA,MAAA9J,EAAA4iH,YACA10C,IAGA,OAAAA,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,iBAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,YAAA,MAAA9J,EAAA6iH,aACA30C,IAGA,OAAAA,KAKApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,8BAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,YACA9J,EAAAgG,WAAA88G,uBAAA9iH,EAAAgG,WAAA+8G,wBACA70C,IAGA,OAAAA,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,+BAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,YACA9J,EAAAgG,WAAA88G,uBACA9iH,EAAAgG,WAAA+8G,wBACA/iH,EAAAgG,WAAAg9G,iCACA90C,IAGA,OAAAA,KAKApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,sCAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,YACA9J,EAAAgG,WAAA88G,wBACA9iH,EAAAgG,WAAA+8G,wBACA70C,IAGA,OAAAA,KAKApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,uCAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,aACA9J,EAAAgG,WAAA88G,uBACA9iH,EAAAgG,WAAA+8G,wBACA70C,IAGA,OAAAA,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,mCAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,eACA,GAAA9J,EAAAgG,WAAAi9G,6BACAjjH,EAAAgG,WAAA88G,uBAAA,GAAA9iH,EAAAgG,WAAAi9G,8BACA,GAAAjjH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAk9G,iCACA,GAAAljH,EAAAgG,WAAAm9G,8BACAnjH,EAAAgG,WAAA+8G,wBAAA,GAAA/iH,EAAAgG,WAAAm9G,+BACA,GAAAnjH,EAAAgG,WAAAo9G,gCACA,GAAApjH,EAAAgG,WAAAo9G,gCACA,GAAApjH,EAAAgG,WAAAo9G,gCACAl1C,KAIA,OAAAA,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,oCAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,eACA,GAAA9J,EAAAgG,WAAAi9G,6BACAjjH,EAAAgG,WAAA88G,uBAAA,GAAA9iH,EAAAgG,WAAAi9G,8BACA,GAAAjjH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAk9G,iCACA,GAAAljH,EAAAgG,WAAAm9G,8BACAnjH,EAAAgG,WAAA+8G,wBAAA,GAAA/iH,EAAAgG,WAAAm9G,+BACA,GAAAnjH,EAAAgG,WAAAo9G,gCACA,GAAApjH,EAAAgG,WAAAo9G,gCACA,GAAApjH,EAAAgG,WAAAo9G,iCACApjH,EAAAgG,WAAAg9G,iCACA90C,KAIA,OAAAA,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,2CAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,eACA,GAAA9J,EAAAgG,WAAAi9G,6BACAjjH,EAAAgG,WAAA88G,uBAAA,GAAA9iH,EAAAgG,WAAAi9G,8BACA,GAAAjjH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAk9G,gCACA,GAAAljH,EAAAgG,WAAAm9G,8BACAnjH,EAAAgG,WAAA+8G,wBAAA,GAAA/iH,EAAAgG,WAAAm9G,gCACA,GAAAnjH,EAAAgG,WAAAo9G,gCACA,GAAApjH,EAAAgG,WAAAo9G,gCACA,GAAApjH,EAAAgG,WAAAo9G,iCACAl1C,KAIA,OAAAA,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,4CAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,cACA,GAAA9J,EAAAgG,WAAAi9G,6BACAjjH,EAAAgG,WAAA88G,uBAAA,GAAA9iH,EAAAgG,WAAAi9G,+BACA,GAAAjjH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAk9G,kCACA,GAAAljH,EAAAgG,WAAAm9G,8BACAnjH,EAAAgG,WAAA+8G,wBAAA,GAAA/iH,EAAAgG,WAAAm9G,+BACA,GAAAnjH,EAAAgG,WAAAo9G,gCACA,GAAApjH,EAAAgG,WAAAo9G,gCACA,GAAApjH,EAAAgG,WAAAo9G,gCACAl1C,KAIA,OAAAA,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,iBAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,aACA,GAAA9J,EAAAgG,WAAAi9G,6BACA,GAAAjjH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAm9G,8BACA,GAAAnjH,EAAAgG,WAAAo9G,gCACA,GAAApjH,EAAAgG,WAAAo9G,gCACA,GAAApjH,EAAAgG,WAAAo9G,gCACAl1C,KAIA,OAAAA,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,kBAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,aACA,GAAA9J,EAAAgG,WAAAi9G,6BACA,GAAAjjH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAm9G,8BACA,GAAAnjH,EAAAgG,WAAAo9G,gCACA,GAAApjH,EAAAgG,WAAAo9G,gCACA,GAAApjH,EAAAgG,WAAAo9G,iCACApjH,EAAAgG,WAAAg9G,iCACA90C,KAIA,OAAAA,KAKApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,yBAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,aACA,GAAA9J,EAAAgG,WAAAi9G,6BACA,GAAAjjH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAm9G,+BACA,GAAAnjH,EAAAgG,WAAAo9G,gCACA,GAAApjH,EAAAgG,WAAAo9G,gCACA,GAAApjH,EAAAgG,WAAAo9G,iCACAl1C,KAKA,OAAAA,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,0BAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,aACA,GAAA9J,EAAAgG,WAAAi9G,8BACA,GAAAjjH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAk9G,+BACA,GAAAljH,EAAAgG,WAAAk9G,gCACA,GAAAljH,EAAAgG,WAAAm9G,8BACA,GAAAnjH,EAAAgG,WAAAo9G,gCACA,GAAApjH,EAAAgG,WAAAo9G,gCACA,GAAApjH,EAAAgG,WAAAo9G,gCACAl1C,KAKA,OAAAA,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,6BAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,aACAokE,GAAAluE,EAAAgG,WAAAq9G,4BAIA,OAAAn1C,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,8BAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,aACAokE,GAAAluE,EAAAgG,WAAAs9G,6BAIA,OAAAp1C,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,qBAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,aACAokE,GAAAluE,EAAAgG,WAAAq9G,2BACAn1C,GAAAluE,EAAAgG,WAAAs9G,6BAIA,OAAAp1C,KAKApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,qBAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,YACA,GAAA9J,EAAAgG,WAAAk9G,+BACAh1C,IAGA,OAAAA,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,sBAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,YACA,GAAA9J,EAAAgG,WAAAo9G,gCACAl1C,IAGA,OAAAA,KAKApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,gCAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,YACA,GAAA9J,EAAAgG,WAAAk9G,+BACAh1C,IAGA,OAAAA,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,iCAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,YACA,GAAA9J,EAAAgG,WAAAo9G,gCACAl1C,IAGA,OAAAA,KAKApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,2BAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,YACA,GAAA9J,EAAAgG,WAAAk9G,+BACAh1C,IAGA,OAAAA,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,4BAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,YACA,GAAA9J,EAAAgG,WAAAo9G,gCACAl1C,IAGA,OAAAA,KAKApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,wBAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,YAAA,GAAA9J,EAAAgG,WAAAk9G,gCACA,GAAAljH,EAAAgG,WAAAi9G,6BAAAjjH,EAAAgG,WAAA88G,wBACA50C,IAGA,OAAAA,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,yBAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,YAAA,GAAA9J,EAAAgG,WAAAo9G,iCACA,GAAApjH,EAAAgG,WAAAm9G,8BAAAnjH,EAAAgG,WAAA+8G,yBACA70C,IAGA,OAAAA,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,cAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IADA,IAAA2vE,EAAA,EACArkE,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAAA,CACA,IAAA7J,EAAA7Q,KAAA6W,WAAA6D,GAEA7J,EAAA8J,aACAokE,GAAAluE,EAAAujH,aAGA,OAAAr1C,KAIApvD,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,iBAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,IAAAilH,EAAAr0H,KAAAo0H,YAEAn/F,EAAAT,KAAAu8F,MAAAsD,EAAA,IACAn/F,EAAAV,KAAAu8F,MAAAsD,EAAA,GAAAp/F,GAEA,OAAA,IAAAC,EACAD,EAGAC,EAAA,GACAD,EAAA,KAAAC,EAGAD,EAAA,IAAAC,KASAvF,OAAAC,eAAAwB,EAAAwhG,eAAA9yH,UAAA,qBAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IAAA,IAAAsL,EAAA,EAAAA,EAAA1a,KAAA6W,WAAAjW,OAAA8Z,IAEA,GADA1a,KAAA6W,WAAA6D,GACAC,WACA,OAAA,EAIA,OAAA,KA3oBA,CAFA+E,wBAAAA,yBAAA,ICEA,SAAA0R,GAGAA,EAAAmiG,yBAAA,SAAA18G,EAAAqD,EAAAsmG,GACAxgH,KAAA6W,WAAAA,EACA7W,KAAAwgH,yBAAAA,EACAxgH,KAAAka,yBAAAA,GAAA,KACAla,KAAAs6B,oBAAAzjB,EAAA7W,KAAAka,2BAMAkX,EAAAmiG,yBAAAzzH,UAAAmzH,+BAAA,WACA,OAAAjzH,KAAA6W,YAGAua,EAAAmiG,yBAAAzzH,UAAAw6B,oBAAA,SAAAzjB,EAAAqD,GACAla,KAAAsU,WAAAuC,EAAAvC,WACAtU,KAAAkJ,UAAA2N,EAAA3N,UACAlJ,KAAAi5B,mBAAApiB,EAAAoiB,mBACAj5B,KAAA2Y,gBAAA9B,EAAA8B,gBACA3Y,KAAAjD,KAAA8Z,EAAA9Z,KACAiD,KAAAo0H,YAAAv9G,EAAAu9G,YAEAzzH,OAAAb,UAAA+3B,mBAAAhhB,EAAA0J,OAGAvgB,KAAAugB,MAAA,GAFAvgB,KAAAugB,MAAA1J,EAAA0J,MAKAvgB,KAAAs0H,aAAAz9G,EAAAqD,0BACArD,EAAAqD,0BAAAA,EAEAvZ,OAAAb,UAAA+3B,mBAAAhhB,EAAA09G,oBACA5zH,OAAAb,UAAA+3B,mBAAA73B,KAAAugB,SACAvgB,KAAAugB,OAAA,KAGAvgB,KAAAugB,OAAA1J,EAAA09G,kBAGA5zH,OAAAb,UAAA+3B,mBAAAhhB,EAAA29G,iBACA7zH,OAAAb,UAAA+3B,mBAAA73B,KAAAugB,SACAvgB,KAAAugB,OAAA,KAEAvgB,KAAAugB,OAAA1J,EAAA29G,eAIAx0H,KAAAy0H,YAAA59G,EAAAsf,qBACAj5B,OAAA2Z,EAAAsf,sBAAAv4B,OAAA,SAAA,MAAAV,OAAA2Z,EAAAuf,oBAAAx4B,OAAA,SACA,GAEAoC,KAAA00H,aAAA79G,EAAAwf,sBACAn5B,OAAA2Z,EAAAwf,uBAAAz4B,OAAA,SAAA,MAAAV,OAAA2Z,EAAAyf,qBAAA14B,OAAA,SACA,GAEAiZ,EAAA88G,uBAAA,GAAA98G,EAAAk9G,+BAAA,GAAAl9G,EAAAi9G,6BAQA9zH,KAAAwgH,yBACAxgH,KAAAyzH,WAAA,IAAA58G,EAAAk9G,+BAAAl9G,EAAA89G,mBACA,IACA,IAEA30H,KAAAyzH,WAAA58G,EAAA48G,WAAA,IAAA,IAEAzzH,KAAAwzH,MAAA38G,EAAA28G,MAAA,IAAA,IACAxzH,KAAA40H,4BAAA50H,KAAA60H,yBAAAh+G,EAAAk9G,+BACA/zH,KAAA80H,0BAAA90H,KAAA+0H,uBAAAl+G,EAAAi9G,+BAdA9zH,KAAAyzH,WAAA,GACAzzH,KAAAwzH,MAAA,GACAxzH,KAAA40H,4BAAA,GACA50H,KAAA80H,0BAAA,IAcAj+G,EAAA+8G,wBAAA,GAAA/8G,EAAAo9G,gCAAA,GAAAp9G,EAAAm9G,8BAMAh0H,KAAAwgH,yBACAxgH,KAAA0zH,YAAA,IAAA78G,EAAAo9G,gCAAAp9G,EAAAm+G,oBACA,IACA,IAEAh1H,KAAA0zH,YAAA78G,EAAA68G,YAAA,IAAA,IAEA1zH,KAAAi1H,6BAAAj1H,KAAA60H,yBAAAh+G,EAAAo9G,gCACAj0H,KAAAk1H,2BAAAl1H,KAAA+0H,uBAAAl+G,EAAAm9G,gCAZAh0H,KAAA0zH,YAAA,GACA1zH,KAAAi1H,6BAAA,GACAj1H,KAAAk1H,2BAAA,KAcA9jG,EAAAmiG,yBAAAzzH,UAAA+0H,yBAAA,SAAAj4H,GACA,OAAAA,GACA,KAAA,EACA,MAAA,qBACA,KAAA,EACA,MAAA,qCACA,KAAA,EACA,MAAA,iCACA,KAAA,EACA,MAAA,iDACA,KAAA,EACA,MAAA,2CAIAw0B,EAAAmiG,yBAAAzzH,UAAAi1H,uBAAA,SAAAn4H,GACA,OAAAA,GACA,KAAA,EACA,MAAA,qBACA,KAAA,EACA,MAAA,iBACA,KAAA,EACA,MAAA,gBACA,KAAA,EACA,MAAA,oBAxHA,CAFA8iB,wBAAAA,yBAAA,ICEA,SAAA0R,GAIAA,EAAA+jG,iBAAA,SAAAh5H,GAGA6D,KAAAob,cACAjf,GACA6D,KAAA4xB,iBAAAz1B,GAGA6D,KAAAkzB,gCAAA,EACAlzB,KAAA8yB,gCAAA,GAOA1B,EAAA+jG,iBAAAr1H,UAAA,IAAAsxB,EAAAC,aAAA,GACAD,EAAA+jG,iBAAAr1H,UAAA44B,YAAAtH,EAAAC,YACAD,EAAA+jG,iBAAAr1H,UAAA64B,OAAAvH,EAAAC,YAAAvxB,UAMAsxB,EAAA+jG,iBAAAr1H,UAAAslC,OAAA,SAAAjpC,GAEAyhB,EAAA5d,KAAA4zB,cAAAz3B,GAKA,OAHAyhB,EAAAw3G,kBAAAp1H,KAAAo1H,kBACAx3G,EAAAy3G,uBAAAr1H,KAAAq1H,uBAEAz3G,GAGAwT,EAAA+jG,iBAAAr1H,UAAAglC,SAAA,SAAArC,GAEAziC,KAAAoyB,qBAAAqQ,GAEAziC,KAAAo1H,kBAAA3yF,EAAA2yF,kBACAp1H,KAAAq1H,uBAAA5yF,EAAA4yF,uBACAr1H,KAAAkJ,UAAAu5B,EAAA1O,mBA5CA,CAFArU,wBAAAA,yBAAA,ICEA,SAAA0R,GAIAA,EAAAyT,kBAAA,SAAA1oC,GAEA6D,KAAAmO,QAAA,IAAAijB,EAAA+jG,iBAAAh5H,GACA6D,KAAAs1H,eAAA,IAOAlkG,EAAAyT,kBAAA/kC,UAAAslC,OAAA,SAAAjpC,GAiBA,MAhBA,CACA+V,4BAAAlS,KAAAkS,4BACAjM,KAAAjG,KAAAiG,KACA2hB,OAAA5nB,KAAA4nB,OACAtT,WAAAtU,KAAAsU,WACApL,UAAAlJ,KAAAkJ,UACA9D,WAAApF,KAAAoF,WACAs/B,qBAAA1kC,KAAA0kC,qBACAC,qBAAA3kC,KAAA2kC,qBACAC,mBAAA5kC,KAAA4kC,mBACAI,kBAAAhlC,KAAAglC,kBACAlzB,UAAA9R,KAAA8R,UACAqtB,QAAAn/B,KAAAm/B,QACAhxB,QAAAnO,KAAAmO,QAAAi3B,OAAAjpC,KAMAi1B,EAAAyT,kBAAA/kC,UAAAglC,SAAA,SAAArC,GAEAziC,KAAAkS,4BAAAuwB,EAAAvwB,4BACAlS,KAAAiG,KAAAw8B,EAAAx8B,KACAjG,KAAA4nB,OAAA6a,EAAA7a,OACA5nB,KAAAsU,WAAAmuB,EAAAnuB,WACAtU,KAAAkJ,UAAAu5B,EAAAv5B,UACAlJ,KAAAoF,WAAAq9B,EAAAr9B,WACApF,KAAA0kC,qBAAAjC,EAAAiC,qBACA1kC,KAAA2kC,qBAAAlC,EAAAkC,qBACA3kC,KAAAilC,eAAAxC,EAAAuC,kBAAA,EAAA,EACAhlC,KAAA4kC,mBAAAnC,EAAAmC,mBACA5kC,KAAAglC,kBAAAvC,EAAAuC,kBACAhlC,KAAA8R,UAAA2wB,EAAA3wB,UAEA9R,KAAAs1H,eAAA7yF,EAAA6yF,gBAAA,GAEAt1H,KAAAmO,QAAA22B,SAAArC,EAAAt0B,SACAnO,KAAAu1H,MAAAr4H,SAAAG,UAOAsyB,OAAAC,eAAAwB,EAAAyT,kBAAA/kC,UAAA,YAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,OAAApP,KAAA4nB,UAIA+H,OAAAC,eAAAwB,EAAAyT,kBAAA/kC,UAAA,iBAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,OAAApP,KAAAw1H,iBAEA1mH,IAAA,SAAAmhB,GAEA,KADAjwB,KAAAw1H,gBAAAvlG,IAEAjwB,KAAAy1H,wBAAAz1H,KAAA4kC,mBACA5kC,KAAA4kC,mBAAA,KACA5kC,KAAAglC,kBAAAhlC,KAAA01H,wBAAA11H,KAAAglC,mBAAA9nC,OAAA8C,KAAA8R,WAAA+I,IAAA,EAAA,KAAAxd,WAEA2C,KAAA01H,uBAAA11H,KAAAglC,kBACAhlC,KAAAglC,kBAAA,KACAhlC,KAAA4kC,mBAAA5kC,KAAAy1H,yBAAAz1H,KAAA4kC,oBAAA,OAKAjV,OAAAC,eAAAwB,EAAAyT,kBAAA/kC,UAAA,iBAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,IAAAg1B,EAAA7mC,EAAA6mC,KAAA7mC,EAAAqT,OAAA5Q,KAAAs1H,eAAA,aACA,OAAAlxF,EACAA,EAAAuxF,SACA,QAIAhmG,OAAAC,eAAAwB,EAAAyT,kBAAA/kC,UAAA,UAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,GAAA,IAAApP,KAAAilC,eACA,OAAAjlC,KAAA0kC,sBACA,KAAA,EACA,OAAAxnC,OAAA8C,KAAA8R,WAAA+I,IAAA7a,KAAA2kC,qBAAAnQ,KAAAysB,IAAA,EAAAjhD,KAAA4kC,mBAAA,GAAA,KAAAvnC,SACA,KAAA,EACA,OAAAH,OAAA8C,KAAA8R,WAAA+I,IAAA7a,KAAA2kC,qBAAAnQ,KAAAysB,IAAA,EAAAjhD,KAAA4kC,mBAAA,GAAA,KAAAvnC,SACA,KAAA,EACA,OAAAH,OAAA8C,KAAA8R,WAAA+I,IAAA7a,KAAA2kC,qBAAAnQ,KAAAysB,IAAA,EAAAjhD,KAAA4kC,mBAAA,GAAA,KAAAvnC,SAKA,OAAA2C,KAAAglC,qBAIArV,OAAAC,eAAAwB,EAAAyT,kBAAA/kC,UAAA,cAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IAgDAwmH,EACAC,EAjDAC,EAAA91H,KAAA81H,eACAC,EAAAD,GAAA91H,KAAA8R,UACAkkH,EAAA94H,OAAA8C,KAAA8R,WAAAya,SAAAvsB,KAAAu1H,OAEA,IAAAv1H,KAAA2kC,qBACA,OAAA,KAGA,IAAAmxF,EAAA,CACA,GAAA54H,OAAA8C,KAAA8R,WAAAi7D,QAAA/sE,KAAAm/B,SACA,OAAA,KAGA,IAAA62F,GAAA94H,OAAA8C,KAAA8R,WAAA8+C,eAAA5wD,KAAAm/B,SACA,OAAAn/B,KAAA8R,UAGAgkH,EAAA91H,KAAA8R,UAGA,GAAA9R,KAAA0kC,sBAEAxnC,OAAA44H,GAAA/4H,QAAAG,OAAA8C,KAAA8R,WAAA/U,SAEA64H,EAAA14H,OAAA44H,GAAAvtG,MAAA,SAAAxrB,OACA84H,EAAArhG,KAAAkC,IAAAx5B,OAAA8C,KAAA8R,WAAA/U,OAAA64H,GAEAE,EAAA54H,OAAA,CACAy8B,KAAAz8B,OAAA44H,GAAAn8F,OACAC,MAAA18B,OAAA44H,GAAAl8F,QACAvK,IAAAwmG,KAKA,GAEA,OAAA71H,KAAA0kC,sBACA,KAAA,EACAqxF,EAAA74H,OAAA44H,GAAAj7G,IAAA7a,KAAA2kC,qBAAA,KACA,MACA,KAAA,EACAoxF,EAAA74H,OAAA44H,GAAAj7G,IAAA7a,KAAA2kC,qBAAA,KACA,MACA,KAAA,GACAoxF,EAAA74H,OAAA44H,GAAAj7G,IAAA7a,KAAA2kC,qBAAA,MACA5nC,OAAAG,OAAA8C,KAAA8R,WAAA/U,SAEA64H,EAAA14H,OAAA64H,GAAAxtG,MAAA,SAAAxrB,OACA84H,EAAArhG,KAAAkC,IAAAx5B,OAAA8C,KAAA8R,WAAA/U,OAAA64H,GAEAG,EAAA74H,OAAA,CAAAy8B,KAAAo8F,EAAAp8F,OAAAC,MAAAm8F,EAAAn8F,QAAAvK,IAAAwmG,YAKAC,EAAAC,EAEA74H,OAAA64H,GAAAxpG,SAAAvsB,KAAAu1H,QAAAr4H,OAAA8C,KAAAu1H,OAAA3kE,eAAA5wD,KAAAm/B,UAEA,OAAAjiC,OAAA64H,GAAAhpD,QAAA/sE,KAAAm/B,UACAjiC,OAAA64H,GAAAxpG,SAAAvsB,KAAAu1H,QACAr4H,OAAA8C,KAAAu1H,OAAAxoD,QAAA/sE,KAAAm/B,SACA,KAGA42F,EAAA14H,YAIAsyB,OAAAC,eAAAwB,EAAAyT,kBAAA/kC,UAAA,eAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WACA,OAAApP,KAAAmO,QAAA2lB,mBA/LA,CAFApU,wBAAAA,yBAAA,ICEA,SAAA0R,GAGAA,EAAA5B,SAAA,SAAAymG,EAAAC,EAAAhgH,GACAlW,KAAA+e,MAAA,GAEA,IAAAjN,EAAAmkH,EACA92F,EAAA+2F,EAEAhgH,GAAA,EAAAA,EAAAtV,SACAkgB,EAAA5K,EAAA,GACAkuB,EAAAluB,EAAAA,EAAAtV,OAAA,GAUAkR,EAAAA,GARAqkH,EAAAr1G,EAAAqV,sBAEArV,EAAAuV,uBAOAvkB,EACAqkH,EAEAh3F,GARAi3F,EAAAhyF,EAAAjO,sBAEAiO,EAAA/N,uBAMA8I,EACAA,EACAi3F,GAMA,IAHA,IAAAC,EAAAn5H,OAAA4U,GAAAC,QAAA,QACAukH,EAAAp5H,OAAAiiC,GAAAptB,QAAA,QAEAskH,EAAA9pG,SAAA+pG,IAAA,CACA,IAAAC,EAAA,IAAAnlG,EAAAolG,aACAH,EACAr2H,KAAAy2H,iBAAAvgH,EAAAmgH,IAEAr2H,KAAA+e,MAAAzf,KAAAi3H,GAEAF,EAAAx7G,IAAA,QAAA,KAMAuW,EAAA5B,SAAA1vB,UAAA22H,iBAAA,SAAAvgH,EAAAmgH,GAGA,IAFA,IAAA3mG,EAAA,EACAsG,EAAA,GACA9f,GAAAwZ,EAAAxZ,EAAAtV,QAAA,CAEA,IAAA81H,EAAAxgH,EAAAwZ,GAEAinG,EAAA,KAQA,IALAA,GADAD,EAAAvgG,qBACAj5B,OAAAw5H,EAAAvgG,sBAEAj5B,OAAAw5H,EAAArgG,wBAFAtkB,QAAA,SAKAg7D,QAAAspD,GACA,MAGAM,EAAAl3G,OAAA42G,IACArgG,EAAA12B,KAAAo3H,GAGAhnG,IAGA,OAAAsG,GAxEA,CAFAtW,wBAAAA,yBAAA,ICEA,SAAA0R,GAGAA,EAAAolG,aAAA,SAAAH,EAAAO,GACA52H,KAAAuf,OAAA82G,EAAA/2G,OACAtf,KAAA8R,UAAA5U,OAAAm5H,GAAAtkH,QAAA,QAAA1U,SACA2C,KAAAm/B,QAAAjiC,OAAAm5H,GAAA9tG,MAAA,QAAAlrB,SAEA2C,KAAAkW,UAAA,GACA0gH,GAAAA,EAAAh2H,QACAZ,KAAAkW,UAAA5W,KAAAsf,MAAA5e,KAAAkW,UAAA0gH,GAEA52H,KAAA8f,yBAAA,GAKAsR,EAAAolG,aAAA12H,UAAA+2H,iBAAA,SAAA5gG,GACA,GAAAj2B,KAAAkW,UACA,IAAA,IAAAxV,EAAA,EAAAA,EAAAV,KAAAkW,UAAAtV,OAAAF,IAAA,CACA,IAAAgnB,EAAA1nB,KAAAkW,UAAAxV,GACAw1B,EAAAxO,EAAAyO,sBACAzO,EAAA0O,oBACA1O,EAAA2O,uBACA3O,EAAA4O,oBAEA,GAAAJ,EAGA,GAFAh5B,OAAAg5B,GAAAK,eAEAN,EACA,OAAAvO,EAMA,OAAA,MAGA0J,EAAAolG,aAAA12H,UAAAg3H,oBAAA,SAAA7gG,GACA,GAAAj2B,KAAAkW,UAAA,CAIA,IAFA,IAAAilB,GAAA,EAEAz6B,EAAA,EAAAA,EAAAV,KAAAkW,UAAAtV,OAAAF,IAAA,CACA,IAAAgnB,EAAA1nB,KAAAkW,UAAAxV,GACAw1B,EAAAxO,EAAAyO,sBACAzO,EAAA0O,oBACA1O,EAAA2O,uBACA3O,EAAA4O,oBAEA,GAAAJ,EAGA,GAFAh5B,OAAAg5B,GAAAK,eAEAN,EAAA,CACAkF,EAAAz6B,EACA,QAKA,IAAAy6B,GACAn7B,KAAAkW,UAAAhB,OAAAimB,EAAA,KAKA/J,EAAAolG,aAAA12H,UAAA23B,yBAAA,SAAAxB,GACA,IAAAvO,EAAA1nB,KAAA62H,iBAAA5gG,GACA,GAAAvO,EAAA,CACAqvG,EAAArvG,EAAAyO,sBAAAzO,EAAA0O,mBACA4gG,EAAAtvG,EAAA2O,uBAAA3O,EAAA4O,oBACA,GAAAygG,GAAAC,EAAA,MAAA,OACA,GAAAD,GAAA/2H,KAAA8f,wBAAA,MAAA,OACA,GAAAi3G,EAAA,MAAA,KACA,GAAAC,EAAA,MAAA,KAGA,MAAA,IAKArnG,OAAAC,eAAAwB,EAAAolG,aAAA12H,UAAA,SAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAAA,OAAApP,KAAAy3B,yBAAA,MAGA9H,OAAAC,eAAAwB,EAAAolG,aAAA12H,UAAA,UAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAAA,OAAApP,KAAAy3B,yBAAA,MAGA9H,OAAAC,eAAAwB,EAAAolG,aAAA12H,UAAA,YAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAAA,OAAApP,KAAAy3B,yBAAA,MAGA9H,OAAAC,eAAAwB,EAAAolG,aAAA12H,UAAA,WAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAAA,OAAApP,KAAAy3B,yBAAA,MAGA9H,OAAAC,eAAAwB,EAAAolG,aAAA12H,UAAA,SAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAAA,OAAApP,KAAAy3B,yBAAA,MAGA9H,OAAAC,eAAAwB,EAAAolG,aAAA12H,UAAA,WAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAAA,OAAApP,KAAAy3B,yBAAA,MAGA9H,OAAAC,eAAAwB,EAAAolG,aAAA12H,UAAA,SAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAAA,OAAApP,KAAAy3B,yBAAA,MAGA9H,OAAAC,eAAAwB,EAAAolG,aAAA12H,UAAA,QAAA,CACA+vB,YAAA,EAAAC,cAAA,EACA1gB,IAAA,WAEA,IAAAqG,EAAA,IAAAkb,MAAA,GAEA,GAAA3wB,KAAAkW,UACA,IAAA,IAAAxV,EAAA,EAAAA,EAAAV,KAAAkW,UAAAtV,OAAAF,IAAA,CACA,IAAAgnB,EAAA1nB,KAAAkW,UAAAxV,GACAw1B,EAAAxO,EAAAyO,sBACAzO,EAAA0O,oBACA1O,EAAA2O,uBACA3O,EAAA4O,oBAEAJ,IACAzgB,EAAAvY,OAAAg5B,GAAAK,aAAA,GAAA7O,GAOA,IAFA,IAAAsF,EAAA,GAEAyI,EAAA,EAAAA,EAAAhgB,EAAA7U,OAAA60B,IAAA,CACA,IAAApG,EAAA5Z,EAAAggB,GACApG,IAAA1uB,OAAAb,UAAA+3B,mBAAAxI,EAAA9O,SACA5f,OAAAb,UAAA+3B,mBAAA7K,GACAA,GAAA,IAAAyI,EAAA,MAAApG,EAAA9O,MAEAyM,GAAA,MAAAyI,EAAA,MAAApG,EAAA9O,OAKA,OAAAyM,KAvJA,CAFAtN,wBAAAA,yBAAA,ICEA,SAAA0R,GAEA,IAAA0G,EAAA,CAAA,aAAA,cAAA,gBAAA,eAAA,aAAA,eAAA,cAGA1G,EAAAzR,eAAA,SAAAhB,GACA3e,KAAA2e,cAAAA,EACA3e,KAAAyV,KAAA,GACA,IAAA,IAAA4Z,EAAA,EAAAA,GAAA,EAAAA,IACArvB,KAAAyV,KAAAnW,KAAA,IAAA8xB,EAAA6lG,kBACAn/F,EAAAzI,EAAA,GACA1Q,EACA0Q,EACArvB,QAOAoxB,EAAAzR,eAAA7f,UAAAo3H,mBAAA,SAAA7nG,GAIA,IAHA,IAAAkH,EAAAlH,EAAA4G,UAGAR,EAAAc,EAAA,EAAA,GAAAd,EAAAA,IAAA,CACA,IAAAkkB,EAAA35C,KAAAyV,KAAAggB,GAEA,GAAA,OAAAkkB,EAAAxjB,sBACA,OAAAwjB,EAAAtjB,sBACA,OAAAsjB,EAKA,IAAAlkB,EAAAc,EAAA,EAAAd,EAAAz1B,KAAAyV,KAAA7U,OAAA60B,IAAA,CACA,IAAA0hG,EAAAn3H,KAAAyV,KAAAggB,GAEA,GAAA,OAAA0hG,EAAAhhG,sBACA,OAAAghG,EAAA9gG,sBACA,OAAA8gG,EAIA,OAAA,MAGA/lG,EAAAzR,eAAA7f,UAAA4V,mBAAA,WACA,IAAA,IAAA+f,EAAA,EAAAA,EAAAz1B,KAAAyV,KAAA7U,OAAA60B,IACAz1B,KAAAyV,KAAAggB,GAAA/f,mBAAAY,KAAAtW,KAAAyV,KAAAggB,KAIArE,EAAAzR,eAAA7f,UAAA6V,aAAA,WACA,IAAA,IAAA8f,EAAA,EAAAA,EAAAz1B,KAAAyV,KAAA7U,OAAA60B,IACAz1B,KAAAyV,KAAAggB,GAAA9f,aAAAW,KAAAtW,KAAAyV,KAAAggB,KAMA9F,OAAAC,eAAAwB,EAAAzR,eAAA7f,UAAA,SAAA,CACAsP,IAAA,WAGA,IAFA,IAAAyB,GAAA,EACAynB,EAAA,EACA5d,EAAA,EAAAA,EAAA1a,KAAAyV,KAAA7U,OAAA8Z,IAEA7J,GADA7Q,KAAAyV,KAAAiF,GACAkN,OACA0Q,IAEA,OAAAznB,GAAA,EAAAynB,GAEAxpB,IAAA,SAAAhS,GACA,IAAA,IAAA4d,EAAA,EAAAA,EAAA1a,KAAAyV,KAAA7U,OAAA8Z,IACA1a,KAAAyV,KAAAiF,GACAkN,OAAA9qB,GAGA+yB,YAAA,EACAC,cAAA,IA9EA,CAFApQ,wBAAAA,yBAAA,ICEA,SAAA0R,GAGAA,EAAA6lG,kBAAA,SAAA5nG,EAAA1Q,EAAA4X,EAAA6gG,GACAp3H,KAAAq3H,aAAAD,EACAp3H,KAAAqvB,IAAAA,EACArvB,KAAAi2B,UAAAM,EACAv2B,KAAA2e,cAAAA,EAEA3e,KAAA0V,sBAMA0b,EAAA6lG,kBAAAn3H,UAAA,IAAAsxB,EAAA0D,gBACA1D,EAAA6lG,kBAAAn3H,UAAA44B,YAAAtH,EAAA6lG,kBACA7lG,EAAA6lG,kBAAAn3H,UAAA64B,OAAAvH,EAAA0D,gBAAAh1B,UAKAsxB,EAAA6lG,kBAAAn3H,UAAAw6B,oBAAA,WAEAt6B,KAAAy2B,aAAAz2B,KAAA+1B,kBAAA/1B,KAAA2e,cAAA3e,KAAAi2B,WAEAj2B,KAAAo7B,sBAAAp7B,KAAA44B,aAAA54B,KAAAy2B,aAAA,wBAAA,GACAz2B,KAAAq7B,oBAAAr7B,KAAA44B,aAAA54B,KAAAy2B,aAAA,sBAAA,GACAz2B,KAAAs7B,uBAAAt7B,KAAA44B,aAAA54B,KAAAy2B,aAAA,yBAAA,GACAz2B,KAAAu7B,qBAAAv7B,KAAA44B,aAAA54B,KAAAy2B,aAAA,uBAAA,GACAz2B,KAAAs3H,OAAAt3H,KAAAg6B,aAAAh6B,KAAAy2B,aAAA,SACAz2B,KAAAu3H,YAAAv3H,KAAAg6B,aAAAh6B,KAAAy2B,aAAA,cACAz2B,KAAAw3H,aAAAx3H,KAAAg6B,aAAAh6B,KAAAy2B,aAAA,eACAz2B,KAAAw7B,OAAAx7B,KAAAi6B,eAAAj6B,KAAAy2B,aAAA,SACAz2B,KAAAy3H,qBAAAz3H,KAAA03H,eAAA13H,KAAAy2B,aAAA,uBACAz2B,KAAA23H,sBAAA33H,KAAA03H,eAAA13H,KAAAy2B,aAAA,wBAEAz2B,KAAA67B,kCAAA77B,KAAA65B,oBAAA75B,KAAA2e,cAAA,wBACA3e,KAAA87B,gCAAA97B,KAAA65B,oBAAA75B,KAAA2e,cAAA,sBACA3e,KAAA+7B,mCAAA/7B,KAAA65B,oBAAA75B,KAAA2e,cAAA,yBACA3e,KAAAg8B,iCAAAh8B,KAAA65B,oBAAA75B,KAAA2e,cAAA,uBACA3e,KAAA43H,mBAAA53H,KAAAk6B,oBAAAl6B,KAAA2e,cAAA,SACA3e,KAAA63H,wBAAA73H,KAAAk6B,oBAAAl6B,KAAA2e,cAAA,cACA3e,KAAA83H,yBAAA93H,KAAAk6B,oBAAAl6B,KAAA2e,cAAA,eACA3e,KAAAi8B,mBAAAj8B,KAAAm6B,sBAAAn6B,KAAA2e,cAAA,SACA3e,KAAA+3H,iCAAA/3H,KAAAg4H,sBAAAh4H,KAAA2e,cAAA,uBACA3e,KAAAi4H,kCAAAj4H,KAAAg4H,sBAAAh4H,KAAA2e,cAAA,wBAEA3e,KAAAy7B,wBAAAz7B,KAAAm1B,2BAAA93B,SACA2C,KAAA07B,sBAAA17B,KAAAo1B,2BAAA/3B,SACA2C,KAAA27B,yBAAA37B,KAAAm1B,2BAAA93B,SACA2C,KAAA47B,uBAAA57B,KAAAo1B,2BAAA/3B,SAEA2C,KAAAk4H,UAAAl4H,KAAAm2B,wBAAAn2B,KAAAo2B,sBACAp2B,KAAAq2B,yBAAAr2B,KAAAs2B,qBAGAlF,EAAA6lG,kBAAAn3H,UAAA84B,aAAA,SAAAnC,EAAAnB,EAAAoB,GACA,OAAAD,GAAAA,EAAA71B,OAIA81B,EACA12B,KAAAq1B,gBAAAoB,EAAAnB,GAAA,GAEAt1B,KAAA61B,gBAAAY,EAAAnB,GAAA,GANA,MAYAlE,EAAA6lG,kBAAAn3H,UAAAk6B,aAAA,SAAAvD,EAAAnB,GACA,IAAAmB,IAAAA,EAAA71B,OACA,OAAA,KAGA,IAAA,IAAA60B,EAAA,EAAAA,EAAAgB,EAAA71B,OAAA60B,IAEA,GADAgB,EAAAhB,GAAAH,GAEA,OAAA,EAIA,OAAA,GAGAlE,EAAA6lG,kBAAAn3H,UAAAm6B,eAAA,SAAAxD,EAAAnB,GACA,IAAAmB,IAAAA,EAAA71B,OACA,OAAA,KAMA,IAHA,IAAAqvB,EAAA,KACAnP,GAAA,EAEA2U,EAAA,EAAAA,EAAAgB,EAAA71B,OAAA60B,IAAA,CACA,IAAAC,EAAAe,EAAAhB,GAAAH,GACA,GAAAxU,EACAA,GAAA,EACAmP,EAAAyF,OAEA,GAAAzF,IAAAyF,EACA,OAAA,KAKA,OAAAzF,GAGAmB,EAAA6lG,kBAAAn3H,UAAA43H,eAAA,SAAAjhG,EAAAnB,GACA,IAAAmB,IAAAA,EAAA71B,OACA,OAAA,KAMA,IAHA,IAAAqvB,EAAA,KACAnP,GAAA,EAEA2U,EAAA,EAAAA,EAAAgB,EAAA71B,OAAA60B,IAAA,CACA,IAAAC,EAAAe,EAAAhB,GAAAH,GACAxU,GACAA,GAAA,EACAmP,EAAAyF,GAEAA,EAAAzF,IACAA,EAAAyF,GAKA,OAAAzF,GAGAmB,EAAA6lG,kBAAAn3H,UAAA+5B,oBAAA,SAAAlb,EAAA2W,GAEA,IAAA3W,IACAA,EAAA/d,OACA,OAAA,EAQA,IALA,IAAAkgB,GAAA,EACAmP,EAAA,KACA6J,EAAA,KAGAp5B,EAAA,EAAAA,EAAAie,EAAA/d,OAAAF,IAAA,CACA,IAEAgnB,EAFA/I,EAAAje,GAEAm2H,iBAAA72H,KAAAi2B,WACA,GAAAvO,EAAA,CAWAqS,EAAArS,EAAA4N,GAEA,GAAAxU,EACAiZ,IAGA9J,EADA,IADA6J,EAAA58B,OAAA68B,IACA9E,QAAA6E,EAAA5E,WAGApU,GAAA,OAEA,GAAAiZ,GAGA,GAAA9J,IADA,IADA6J,EAAA58B,OAAA68B,IACA9E,QAAA6E,EAAA5E,UAEA,OAAA,OAGA,GAAA,OAAAjF,GAAA8J,EACA,OAAA,MA7BA,CACA,IAAAjZ,GACAmP,EACA,OAAA,EAIAnP,GAAA,GA4BA,OAAA,GAGAsQ,EAAA6lG,kBAAAn3H,UAAAo6B,oBAAA,SAAAvb,EAAA2W,GACA,IAAA3W,IACAA,EAAA/d,OACA,OAAA,EAMA,IAHA,IAAAkgB,GAAA,EACAmP,EAAA,KAEAvvB,EAAA,EAAAA,EAAAie,EAAA/d,OAAAF,IAAA,CACA,IAEAgnB,EAFA/I,EAAAje,GAEAm2H,iBAAA72H,KAAAi2B,WAEA,GAAAvO,EAAA,CAYAqS,EAAArS,EAAA4N,GAEA,GAAAxU,EACAmP,EAAA8J,EACAjZ,GAAA,OAEA,GAAAiZ,IAAA9J,EACA,OAAA,MAnBA,CACA,IAAAnP,GACAmP,EACA,OAAA,EAKAA,EADAnP,GAAA,GAiBA,OAAA,GAGAsQ,EAAA6lG,kBAAAn3H,UAAAq6B,sBAAA,SAAAxb,EAAA2W,GACA,IAAA3W,IACAA,EAAA/d,OACA,OAAA,EAMA,IAHA,IAAAkgB,GAAA,EACAmP,EAAA,KAEAvvB,EAAA,EAAAA,EAAAie,EAAA/d,OAAAF,IAAA,CACA,IAEAgnB,EAFA/I,EAAAje,GAEAm2H,iBAAA72H,KAAAi2B,WACA,GAAAvO,EAAA,CAWAqS,EAAArS,EAAA4N,GACA,GAAAxU,EACAmP,EAAA8J,EACAjZ,GAAA,OAIA,IAFAngB,OAAAb,UAAA+3B,mBAAAkC,KAAAp5B,OAAAb,UAAA+3B,mBAAA5H,IAAA8J,IAAA9J,GACAtvB,OAAAb,UAAA+3B,mBAAAkC,KAAAp5B,OAAAb,UAAA+3B,mBAAA5H,GAEA,OAAA,MAnBA,CACA,IAAAnP,IACAngB,OAAAb,UAAA+3B,mBAAA5H,GACA,OAAA,EAIAnP,GAAA,GAgBA,OAAA,GAGAsQ,EAAA6lG,kBAAAn3H,UAAAk4H,sBAAA,SAAAr5G,EAAA2W,GACA,IAAA3W,IACAA,EAAA/d,OACA,OAAA,EAMA,IAHA,IAAAkgB,GAAA,EACAmP,EAAA,KAEAvvB,EAAA,EAAAA,EAAAie,EAAA/d,OAAAF,IAAA,CACA,IAEAgnB,EAFA/I,EAAAje,GAEAm2H,iBAAA72H,KAAAi2B,WACA,GAAAvO,EAAA,CAWAqS,EAAArS,EAAA4N,GACA,GAAAxU,EACAmP,EAAA8J,EACAjZ,GAAA,OAEA,GAAAiZ,IAAA9J,EACA,OAAA,MAjBA,CACA,IAAAnP,GACAmP,EACA,OAAA,EAIAnP,GAAA,GAcA,OAAA,GAGAsQ,EAAA6lG,kBAAAn3H,UAAA4V,mBAAA,WACA1V,KAAAs6B,uBAGAlJ,EAAA6lG,kBAAAn3H,UAAA6V,aAAA,WACA,GAAA3V,KAAA2e,cAAA,CAEA,IAAAic,IAAA56B,KAAAm2B,wBAAAn2B,KAAAo2B,mBACAyE,IAAA76B,KAAAq2B,yBAAAr2B,KAAAs2B,oBAEAhX,EAAA,KAEA,IAHAsb,IAAAC,EAGA,CACA76B,KAAA86B,6BAAA,EACA96B,KAAA+6B,2BAAA,EACA/6B,KAAAg7B,8BAAA,EACAh7B,KAAAi7B,4BAAA,EACAj7B,KAAAm4H,cAAA,EACAn4H,KAAAo4H,mBAAA,EACAp4H,KAAAq4H,oBAAA,EACAr4H,KAAAk7B,cAAA,EACAl7B,KAAAs4H,4BAAA,EACAt4H,KAAAu4H,6BAAA,EAEA,IAAA,IAAAl5G,EAAA,EAAAA,EAAArf,KAAA2e,cAAA/d,OAAAye,KACAC,EAAAtf,KAAA2e,cAAAU,IACAy3G,oBAAA92H,KAAAi2B,eAEA,CAEA,IAAA5W,EAAA,EAAAA,EAAArf,KAAA2e,cAAA/d,OAAAye,IAAA,CAEA,IAGAqI,GAHAA,GADApI,EAAAtf,KAAA2e,cAAAU,IACAw3G,iBAAA72H,KAAAi2B,aAGA,GAIAuiG,GAAA,EAEA59F,GACA56B,KAAA86B,8BACA96B,KAAAw6B,2BAAAlb,EAAAxN,UAAA4V,EAAA1nB,KAAAm2B,qBAAA,wBACAqiG,GAAA,GAEAx4H,KAAA+6B,4BACA/6B,KAAAw6B,2BAAAlb,EAAAxN,UAAA4V,EAAA1nB,KAAAo2B,mBAAA,sBACAoiG,GAAA,KAGAx4H,KAAAw6B,2BAAAlb,EAAAxN,UAAA4V,EAAA,KAAA,wBACA1nB,KAAAw6B,2BAAAlb,EAAAxN,UAAA4V,EAAA,KAAA,uBAGAmT,GACA76B,KAAAg7B,+BACAh7B,KAAAw6B,2BAAAlb,EAAAxN,UAAA4V,EAAA1nB,KAAAq2B,sBAAA,yBACAmiG,GAAA,GAEAx4H,KAAAi7B,6BACAj7B,KAAAw6B,2BAAAlb,EAAAxN,UAAA4V,EAAA1nB,KAAAs2B,oBAAA,uBACAkiG,GAAA,KAGAx4H,KAAAw6B,2BAAAlb,EAAAxN,UAAA4V,EAAA,KAAA,yBACA1nB,KAAAw6B,2BAAAlb,EAAAxN,UAAA4V,EAAA,KAAA,wBAGA1nB,KAAAm4H,cACAn4H,KAAAy6B,2BAAA/S,EAAA1nB,KAAAwzH,MAAA,SAGAxzH,KAAAo4H,mBACAp4H,KAAAy6B,2BAAA/S,EAAA1nB,KAAAyzH,WAAA,cAEAzzH,KAAAq4H,oBACAr4H,KAAAy6B,2BAAA/S,EAAA1nB,KAAA0zH,YAAA,eAEA1zH,KAAAk7B,cACAl7B,KAAA06B,6BAAAhT,EAAA1nB,KAAAugB,MAAA,SAEAvgB,KAAAs4H,4BACAt4H,KAAAy4H,6BAAA/wG,EAAA1nB,KAAA04H,oBAAA,uBAEA14H,KAAAu4H,6BACAv4H,KAAAy4H,6BAAA/wG,EAAA1nB,KAAA24H,qBAAA,wBAGAH,IAAA9wG,EAAAuR,oBACA3Z,EAAApJ,UAAA5W,KAAAooB,GAIA1nB,KAAA86B,6BAAA,EACA96B,KAAA+6B,2BAAA,EACA/6B,KAAAg7B,8BAAA,EACAh7B,KAAAi7B,4BAAA,EACAj7B,KAAAm4H,cAAA,EACAn4H,KAAAo4H,mBAAA,EACAp4H,KAAAq4H,oBAAA,EACAr4H,KAAAk7B,cAAA,EACAl7B,KAAAs4H,4BAAA,EACAt4H,KAAAu4H,6BAAA,KAKAnnG,EAAA6lG,kBAAAn3H,UAAA06B,2BAAA,SAAA1oB,EAAA4V,EAAA5qB,EAAAw4B,GACAx4B,GACAk4B,EAAA93B,OAAAJ,GACA87H,EAAA17H,OAAA4U,GACA+I,IAAA,OAAA7a,KAAAi2B,UAAA,GACApb,IAAA,QAAAma,EAAAW,QACA9a,IAAA,UAAAma,EAAAY,UACAv4B,SACAqqB,EAAA4N,GAAAsjG,GAEAlxG,EAAA4N,GAAA,MAIAlE,EAAA6lG,kBAAAn3H,UAAA26B,2BAAA,SAAA/S,EAAA5qB,EAAAw4B,GACA5N,EAAA4N,GAAAx4B,IAAA,GAGAs0B,EAAA6lG,kBAAAn3H,UAAA46B,6BAAA,SAAAhT,EAAA5qB,EAAAw4B,GACA5N,EAAA4N,GAAAx4B,GAGAs0B,EAAA6lG,kBAAAn3H,UAAA24H,6BAAA,SAAA/wG,EAAA5qB,EAAAw4B,GACA5N,EAAA4N,GAAAx4B,GAGAs0B,EAAA6lG,kBAAAn3H,UAAA+4H,uBAAA,SAAA/mH,EAAA4V,EAAA4N,GACA,IAuBAwjG,EAvBAh8H,EAAAkD,KAAAqvB,IAAAiG,GAEA,kBAAAx4B,KACAu6B,EAAA3P,EAAA4N,aAAA73B,MACAX,aAAAW,OAEAX,IACAA,EAAAI,OAAA4U,GACA+I,IAAA,OAAA7a,KAAAi2B,UAAA,GACApb,IAAA,QAAA3d,OAAAJ,GAAA64B,QACA9a,IAAA,UAAA3d,OAAAJ,GAAA84B,UACAv4B,UAGAg6B,EACA3P,EAAA4N,IACAx4B,GACA4qB,EAAA4N,GAAAgzC,YAAAxrE,EAAAwrE,YACA5gD,EAAA4N,GAAAx4B,EACA4qB,EAAAqxG,OAAA,GAGArxG,EAAA4N,IAAAx4B,IACAg8H,OAAA,IAAApxG,EAAA4N,GACA5N,EAAA4N,GAAAx4B,EACAg8H,IAAAh8H,IACA4qB,EAAAqxG,OAAA,MAOA3nG,EAAA6lG,kBAAAn3H,UAAAk5H,uBAAA,SAAAr6G,EAAA2W,EAAA+B,GACA,IAAA4hG,EAAA,KACAC,GAAA,EAEA,GAAAv6G,EACA,IAAA,IAAAU,EAAA,EAAAA,EAAAV,EAAA/d,OAAAye,IAAA,CACA,IAEAqI,EAFA/I,EAAAU,GAEAw3G,iBAAA72H,KAAAi2B,WACA,GAAAvO,EAAA,CAaA,IAIAyxG,EAJAC,EAAA1xG,EAAA4N,GAaA,KAVA+B,GAAA4hG,GAAAG,GACAD,EAAAj8H,OAAA+7H,GACAI,EAAAn8H,OAAAk8H,GAEAD,EAAAxjG,SAAA0jG,EAAA1jG,QACAwjG,EAAAvjG,WAAAyjG,EAAAzjG,UAEAqjG,IAAAG,GAGA,CACA,IAAAF,EAQA,MAAA,gBANAD,EADA5hG,EACA,IAAA55B,KAAA27H,EAAAE,WAEAF,EAEAF,GAAA,OAjCA,CACA,IAAAA,EACA,OAAAD,EAIA,gBAHA,KAMAC,GAAA,GAgCA,OAAAD,GAKAtpG,OAAAC,eAAAwB,EAAA6lG,kBAAAn3H,UAAA,SAAA,CACAsP,IAAA,WACA,OAAApP,KAAAk4H,SAEAppH,IAAA,SAAAhS,IAEAkD,KAAAk4H,QAAAp7H,IAcAusC,EAAArpC,KAAAq3H,aAAAH,mBAAAl3H,SAEAA,KAAAm2B,qBAAAkT,EAAAlT,qBACAn2B,KAAAo2B,mBAAAiT,EAAAjT,mBACAp2B,KAAAq2B,sBAAAgT,EAAAhT,sBACAr2B,KAAAs2B,oBAAA+S,EAAA/S,oBACAt2B,KAAAwzH,MAAAnqF,EAAAmqF,MACAxzH,KAAAyzH,WAAApqF,EAAAoqF,WACAzzH,KAAA0zH,YAAArqF,EAAAqqF,YACA1zH,KAAAugB,MAAA8oB,EAAA9oB,MACAvgB,KAAA04H,oBAAArvF,EAAAqvF,oBACA14H,KAAA24H,qBAAAtvF,EAAAsvF,uBAtBA34H,KAAAm2B,qBAAA,KACAn2B,KAAAo2B,mBAAA,KACAp2B,KAAAq2B,sBAAA,KACAr2B,KAAAs2B,oBAAA,KACAt2B,KAAAwzH,OAAA,EACAxzH,KAAAyzH,YAAA,EACAzzH,KAAA0zH,aAAA,EACA1zH,KAAAugB,MAAA,KACAvgB,KAAA04H,oBAAA,EACA14H,KAAA24H,qBAAA,IAiBA9oG,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAA6lG,kBAAAn3H,UAAA,uBAAA,CACAsP,IAAA,WACA,OAAApP,KAAAo7B,uBAEAtsB,IAAA,SAAAhS,GACAkD,KAAAo7B,sBAAAt+B,EACAkD,KAAA86B,6BAAA,OACAnW,IAAA7nB,IACAkD,KAAA67B,mCAAA,IAGAhM,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAA6lG,kBAAAn3H,UAAA,qBAAA,CACAsP,IAAA,WACA,OAAApP,KAAAq7B,qBAEAvsB,IAAA,SAAAhS,GACAkD,KAAAq7B,oBAAAv+B,EACAkD,KAAA+6B,2BAAA,OACApW,IAAA7nB,IACAkD,KAAA87B,iCAAA,IAGAjM,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAA6lG,kBAAAn3H,UAAA,wBAAA,CACAsP,IAAA,WACA,OAAApP,KAAAs7B,wBAEAxsB,IAAA,SAAAhS,GACAkD,KAAAs7B,uBAAAx+B,EACAkD,KAAAg7B,8BAAA,OACArW,IAAA7nB,IACAkD,KAAA+7B,oCAAA,IAGAlM,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAA6lG,kBAAAn3H,UAAA,sBAAA,CACAsP,IAAA,WACA,OAAApP,KAAAu7B,sBAEAzsB,IAAA,SAAAhS,GACAkD,KAAAu7B,qBAAAz+B,EACAkD,KAAAi7B,4BAAA,OACAtW,IAAA7nB,IACAkD,KAAAg8B,kCAAA,IAGAnM,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAA6lG,kBAAAn3H,UAAA,QAAA,CACAsP,IAAA,WACA,OAAApP,KAAAs3H,QAEAxoH,IAAA,SAAAhS,GACAkD,KAAAs3H,OAAAx6H,EACAkD,KAAAm4H,cAAA,OACAxzG,IAAA7nB,IACAkD,KAAA43H,oBAAA,IAGA/nG,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAA6lG,kBAAAn3H,UAAA,aAAA,CACAsP,IAAA,WACA,OAAApP,KAAAu3H,aAEAzoH,IAAA,SAAAhS,GACAkD,KAAAu3H,YAAAz6H,EACAkD,KAAAo4H,mBAAA,OACAzzG,IAAA7nB,IACAkD,KAAA63H,yBAAA,IAGAhoG,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAA6lG,kBAAAn3H,UAAA,cAAA,CACAsP,IAAA,WACA,OAAApP,KAAAw3H,cAEA1oH,IAAA,SAAAhS,GACAkD,KAAAw3H,aAAA16H,EACAkD,KAAAq4H,oBAAA,OACA1zG,IAAA7nB,IACAkD,KAAA83H,0BAAA,IAGAjoG,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAA6lG,kBAAAn3H,UAAA,QAAA,CACAsP,IAAA,WACA,OAAApP,KAAAw7B,QAEA1sB,IAAA,SAAAhS,GACAkD,KAAAw7B,OAAA1+B,EACAkD,KAAAk7B,cAAA,OACAvW,IAAA7nB,IACAkD,KAAAi8B,oBAAA,IAGApM,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAA6lG,kBAAAn3H,UAAA,sBAAA,CACAsP,IAAA,WACA,OAAApP,KAAAy3H,sBAEA3oH,IAAA,SAAAhS,GAIAkD,KAAAy3H,qBAFA36H,EADAA,GACA,EAGAkD,KAAAs4H,4BAAA,OACA3zG,IAAA7nB,IACAkD,KAAA+3H,kCAAA,IAGAloG,YAAA,EACAC,cAAA,IAIAH,OAAAC,eAAAwB,EAAA6lG,kBAAAn3H,UAAA,uBAAA,CACAsP,IAAA,WACA,OAAApP,KAAA23H,uBAEA7oH,IAAA,SAAAhS,GAIAkD,KAAA23H,sBAFA76H,EADAA,GACA,EAGAkD,KAAAu4H,6BAAA,OACA5zG,IAAA7nB,IACAkD,KAAAi4H,mCAAA,IAGApoG,YAAA,EACAC,cAAA,IA/sBA,CAFApQ,wBAAAA,yBAAA,ICEA,SAAA0R,GAGAA,EAAAmN,QAAA,SAAApH,GACAn3B,KAAAk3B,WAAAC,IAMA/F,EAAAmN,QAAAz+B,UAAA,IAAAsxB,EAAA6F,qBACA7F,EAAAmN,QAAAz+B,UAAA44B,YAAAtH,EAAAmN,QACAnN,EAAAmN,QAAAz+B,UAAA64B,OAAAvH,EAAA6F,qBAAAn3B,UAZA,CAFA4f,wBAAAA,yBAAA,ICEA,SAAA0R,GAGAA,EAAAoN,cAAA,SAAAzgB,EAAA7H,EAAAhN,EAAAoL,EAAA+J,GACAre,KAAA+d,aAAAA,EACA/d,KAAAk3B,WAAAnZ,EAAA7H,EAAAhN,EAAAoL,GACAtU,KAAAqe,gBAAAA,GAOA+S,EAAAoN,cAAA1+B,UAAA,IAAAsxB,EAAA2G,2BACA3G,EAAAoN,cAAA1+B,UAAA44B,YAAAtH,EAAAoN,cACApN,EAAAoN,cAAA1+B,UAAA64B,OAAAvH,EAAA2G,2BAAAj4B,UAMAsxB,EAAAoN,cAAA1+B,UAAAm4B,eAAA,SAAAla,EAAA7H,EAAA+f,EAAAiC,EAAAF,EAAA1jB,GACA,OAAA,IAAA8c,EAAAmoG,iBAAAx7G,EAAA7H,EAAA+f,EAAAiC,EAAAF,EAAA1jB,IAtBA,CAFAoL,wBAAAA,yBAAA,ICEA,SAAA0R,GAGAA,EAAAmoG,iBAAA,SAAAx7G,EAAA7H,EAAA+f,EAAAiC,EAAAhvB,EAAAoL,GACAtU,KAAAk3B,WAAAnZ,EAAA7H,EAAA+f,EAAAiC,EAAAhvB,EAAAoL,IAMA8c,EAAAmoG,iBAAAz5H,UAAA,IAAAsxB,EAAAqH,8BACArH,EAAAmoG,iBAAAz5H,UAAA44B,YAAAtH,EAAAmoG,iBACAnoG,EAAAmoG,iBAAAz5H,UAAA64B,OAAAvH,EAAAqH,8BAAA34B,UAMAsxB,EAAAmoG,iBAAAz5H,UAAAy6B,kBAAA,SAAAtB,GACA,MAAA,CACAugG,sBAAA,EACAllH,WAAAtU,KAAAsU,WACApL,UAAAlJ,KAAAg4B,WACAiB,mBAAAA,EACA9C,qBAAA,KACAC,mBAAA,KACAC,sBAAA,KACAC,oBAAA,KACAk9F,OAAA,EACAiG,WAAA,EACA/F,aAAA,EACAnzG,MAAA,OAIA6Q,EAAAmoG,iBAAAz5H,UAAA6V,aAAA,WAEA,IAAAilB,IAAA56B,KAAAm2B,wBAAAn2B,KAAAo2B,mBACAyE,IAAA76B,KAAAq2B,yBAAAr2B,KAAAs2B,oBAEAt2B,KAAA24B,OAAAhjB,aAAAW,KAAAtW,MAEA46B,GAAAC,GAKA76B,KAAAm4H,eACAn4H,KAAAy6B,2BAAAz6B,KAAAy2B,aAAAz2B,KAAA+d,aAAA,QAAA/d,KAAAwzH,OACAxzH,KAAAm4H,cAAA,GAEAn4H,KAAAo4H,oBACAp4H,KAAAy6B,2BAAAz6B,KAAAy2B,aAAAz2B,KAAA+d,aAAA,aAAA/d,KAAAyzH,YACAzzH,KAAAo4H,mBAAA,GAEAp4H,KAAAq4H,qBACAr4H,KAAAy6B,2BAAAz6B,KAAAy2B,aAAAz2B,KAAA+d,aAAA,cAAA/d,KAAA0zH,aACA1zH,KAAAq4H,oBAAA,KAdAr4H,KAAAm4H,cAAA,EACAn4H,KAAAo4H,mBAAA,EACAp4H,KAAAq4H,oBAAA,IAiBAjnG,EAAAmoG,iBAAAz5H,UAAAw6B,oBAAA,SAAApkB,EAAA6H,EAAAkY,GAEAj2B,KAAA24B,OAAA2B,oBAAAhkB,KAAAtW,KAAAkW,EAAA6H,EAAAkY,GAEAj2B,KAAAs3H,OAAAt3H,KAAAg6B,aAAAh6B,KAAAy2B,aAAAz2B,KAAA64B,gBAAA,SACA74B,KAAAu3H,YAAAv3H,KAAAg6B,aAAAh6B,KAAAy2B,aAAAz2B,KAAA64B,gBAAA,cACA74B,KAAAw3H,aAAAx3H,KAAAg6B,aAAAh6B,KAAAy2B,aAAAz2B,KAAA64B,gBAAA,eAEA74B,KAAA43H,mBAAA53H,KAAAk6B,oBAAAl6B,KAAAy2B,aAAAz2B,KAAA64B,gBAAA,SACA74B,KAAA63H,wBAAA73H,KAAAk6B,oBAAAl6B,KAAAy2B,aAAAz2B,KAAA64B,gBAAA,cACA74B,KAAA83H,yBAAA93H,KAAAk6B,oBAAAl6B,KAAAy2B,aAAAz2B,KAAA64B,gBAAA,eAEA74B,KAAA05H,kBAAA15H,KAAAo5B,qBAAAp5B,KAAAy2B,aAAA,SACAz2B,KAAA25H,uBAAA35H,KAAAo5B,qBAAAp5B,KAAAy2B,aAAA,cACAz2B,KAAA45H,wBAAA55H,KAAAo5B,qBAAAp5B,KAAAy2B,aAAA,gBAOA9G,OAAAC,eAAAwB,EAAAmoG,iBAAAz5H,UAAA,SAAA,CACAsP,IAAA,WAAA,OAAApP,KAAA24B,OAAA2D,UAAAhmB,KAAAtW,OACA8O,IAAA,SAAAhS,GACAkD,KAAA24B,OAAA4D,UAAAjmB,KAAAtW,KAAAlD,GACAA,GACAkD,KAAA05H,oBACA15H,KAAAwzH,OAAA,GAEAxzH,KAAA25H,yBACA35H,KAAAyzH,YAAA,GAEAzzH,KAAA45H,0BACA55H,KAAA0zH,aAAA,KAGA1zH,KAAAwzH,OAAA,EACAxzH,KAAAyzH,YAAA,EACAzzH,KAAA0zH,aAAA,IAGA7jG,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAAmoG,iBAAAz5H,UAAA,WAAA,CACAsP,IAAA,WAAA,OAAApP,KAAA24B,OAAA6D,YAAAlmB,KAAAtW,OAEA8O,IAAA,SAAAhS,GACAkD,KAAA24B,OAAA8D,YAAAnmB,KAAAtW,KAAAlD,GACAA,GACAkD,KAAA05H,oBACA15H,KAAAwzH,OAAA,GAEAxzH,KAAA25H,yBACA35H,KAAAyzH,YAAA,KAGAzzH,KAAAwzH,OAAA,EACAxzH,KAAAyzH,YAAA,IAGA5jG,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAAmoG,iBAAAz5H,UAAA,WAAA,CACAsP,IAAA,WAAA,OAAApP,KAAA24B,OAAA+D,YAAApmB,KAAAtW,OAEA8O,IAAA,SAAAhS,GACAkD,KAAA24B,OAAAgE,YAAArmB,KAAAtW,KAAAlD,GACAA,EACAkD,KAAA45H,0BACA55H,KAAA0zH,aAAA,GAGA1zH,KAAA0zH,aAAA,GAGA7jG,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAAmoG,iBAAAz5H,UAAA,QAAA,CACAsP,IAAA,WACA,OAAApP,KAAAs3H,QAEAxoH,IAAA,SAAAhS,GACAkD,KAAAs3H,OAAAx6H,EACAkD,KAAAm4H,cAAA,OACAxzG,IAAA7nB,IACAkD,KAAA43H,mBAAA53H,KAAAg3B,qBAAAh3B,KAAAy2B,aAAA,QAAA35B,GAAA,KAGA+yB,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAAmoG,iBAAAz5H,UAAA,aAAA,CACAsP,IAAA,WACA,OAAApP,KAAAu3H,aAEAzoH,IAAA,SAAAhS,GACAkD,KAAAu3H,YAAAz6H,EACAkD,KAAAo4H,mBAAA,OACAzzG,IAAA7nB,IACAkD,KAAA63H,wBAAA73H,KAAAg3B,qBAAAh3B,KAAAy2B,aAAA,aAAA35B,GAAA,KAGA+yB,YAAA,EACAC,cAAA,IAGAH,OAAAC,eAAAwB,EAAAmoG,iBAAAz5H,UAAA,cAAA,CACAsP,IAAA,WACA,OAAApP,KAAAw3H,cAEA1oH,IAAA,SAAAhS,GACAkD,KAAAw3H,aAAA16H,EACAkD,KAAAq4H,oBAAA,OACA1zG,IAAA7nB,IACAkD,KAAA83H,yBAAA93H,KAAAg3B,qBAAAh3B,KAAAy2B,aAAA,cAAA35B,GAAA,KAGA+yB,YAAA,EACAC,cAAA,IA3LA,CAFApQ,wBAAAA,yBAAA,ICAA,SAAA2/B,gBAGAtjD,QAAAC,OAAA,gBAAA,CAAA,iBAAA,2BAGAD,QAAAC,OAAA,iBAEA0T,UAAA,kBAAA,CAAA,WAAA,SAAAmqH,GACA,MAAA,CACA/pH,SAAA,IACAE,SAAA,IACA7M,OAAA,EACA8M,KAAA,SAAA9O,EAAA6mC,EAAAwU,GACA,IAAAs9E,EAAA9xF,EAAAjpC,OACAuxH,GAAA,EACAyJ,GAAA,EACAC,EAAA,KACA74H,EAAA84H,WAAA,IACA94H,EAAA6F,OAAAw1C,EAAA09E,gBAAA,SAAAjqG,GACA,IAGA+yB,EAHA/yB,GACAusB,EAAA29E,wBAEAn3E,EAAAxuB,KAAAkC,IAAA,IAAAsR,EAAArkB,SAAA,GAGAo2G,GAAA,GAOAC,EAAAH,EAAA7xF,EANA,CACAuX,QAAA,SACA3gD,UAAA,aACAqE,SAAA,wDAIAV,SAAAC,KAAA,WACAw3H,EAAAr3H,OACAqlC,EAAAmvF,OAAAhrF,IAAA,CAAAiuF,aAAAp3E,EAAA,WAGA82E,EAAA9xF,EAAAjpC,OACAipC,EAAAjpC,KAAA,gDAEAuxH,GAAA,GAEAA,IACAyJ,EACAC,EAAAz3H,SAAAC,KAAA,WACAw3H,EAAAxlH,SAGAwzB,EAAAjpC,KAAA+6H,MAIA,QAOA/9H,QAAAC,OAAA,iBACA0T,UAAA,wBACA,WACA,MAAA,CACAI,SAAA,KACAC,QAAA,UACAC,SAAA,EACA7M,MAAA,CACAyrB,QAAA,WACA9xB,MAAA,KAEA+xB,SAAA,EACA9tB,YAAA,uDACAkP,KAAA,SAAA9M,EAAA6kC,EAAA98B,EAAAkF,GAEAjN,EAAAk3H,YAAA,EAEAl3H,EAAAm3H,UAAA,SAAAC,GACAnqH,EAAAqe,cAAAtrB,EAAAk3H,YACAjqH,EAAAgB,YAAAjO,EAAArG,MACAsT,EAAAgB,WAAAjO,EAAArG,MAAAy9H,EAAAnwH,MACAjH,EAAAk3H,YAAA,GAAAjqH,EAAAgB,WAAAjO,EAAArG,OACAy9H,EAAAh8E,iBACAjuC,EAAA03B,GAAAwyF,SAGApqH,EAAAe,QAAA,WACAhO,EAAAk3H,YAAA,GAAAjqH,EAAAgB,WAAAjO,EAAArG,YAOAf,QAAAC,OAAA,iBACA0T,UAAA,iBACA,WACA,MAAA,CACAI,SAAA,IACAC,QAAA,UACAC,SAAA,EACA7M,MAAA,CACAyrB,QAAA,WACA6rG,cAAA,KAEA5rG,SAAA,EACA9tB,YAAA,+CACAkP,KAAA,SAAA9M,EAAA6kC,EAAA98B,EAAAkF,GAiCA,SAAAsqH,EAAA59H,GACA,OAAA,IAAAA,GAAA,SAAAA,EACA,GACA,IAAAA,GAAA,UAAAA,GAEA,kBAAAA,EACAA,EAFA,EAnCAqG,EAAAm3H,UAAA,SAAAC,GAWA,IAQAhpH,EAlBApO,EAAAk3H,YAWA,IAXAl3H,EAAAk3H,YAcA,EAFA,EAXAjqH,EAAAqe,cAkBA,KADAld,EAjBApO,EAAAk3H,cAoBA,IAAA9oH,IAEA,kBAAAA,GACAA,GAvBAgpH,EAAAnwH,MACAmwH,EAAAh8E,iBACAjuC,EAAA03B,GAAAwyF,SAGApqH,EAAAe,QAAA,WACAhO,EAAAk3H,YAAAK,EAAAtqH,EAAAgB,aAmCAjO,EAAAk3H,YAAAK,EAAAtqH,EAAAgB,YACAhB,EAAAe,cAMApV,QAAAC,OAAA,iBACA0T,UAAA,cACA,WACA,MAAA,CACAI,SAAA,IACAC,QAAA,UACAC,SAAA,EACA7M,MAAA,CACAyrB,QAAA,WACA9xB,MAAA,KAEA+xB,SAAA,EACA9tB,YAAA,4CACAkP,KAAA,SAAA9M,EAAA6kC,EAAA98B,EAAAkF,GAEAjN,EAAAk3H,YAAA,EAEAl3H,EAAAm3H,UAAA,SAAAC,GACAnqH,EAAAqe,cAAAtrB,EAAArG,MAAAy9H,EAAAnwH,MACAjH,EAAAk3H,aAAA,EACAE,EAAAh8E,iBACAjuC,EAAA03B,GAAAwyF,SAGApqH,EAAAe,QAAA,WACAhO,EAAAk3H,YAAAjqH,EAAAgB,YAAAjO,EAAArG,WAOAf,QAAAC,OAAA,iBACA6B,OAAA,CAAA,qBACA,SAAA8B,GACAA,EAAAg7H,aAAA,KAAA,CACAC,UAAA,OACAC,SAAA,iBACAC,mBAAA,UACAC,iBAAA,QACAC,iBAAA,SACAC,aAAA,QACAC,eAAA,WACAC,SAAA,WACAC,0BAAA,QACAC,2BAAA,QACAC,4BAAA,UACAC,2BAAA,QACAC,gCAAA,KACAC,gCAAA,KACAC,iCAAA,KACAC,mCAAA,KACAC,kCAAA,KACAC,gCAAA,KACAC,kCAAA,KACAC,4BAAA,mBACAC,4BAAA,mBACAC,4BAAA,qBACAC,sBAAA,QACAC,sBAAA,QACAC,sBAAA,QACAC,qBAAA,MACAC,qBAAA,MACAC,qBAAA,MACAC,4BAAA,eACAC,6BAAA,QACAC,6BAAA,QACAC,6BAAA,UACAC,gCAAA,UACAC,2BAAA,SACAC,mCAAA,QACAC,oCAAA,QACAC,mCAAA,QACAC,oCAAA,SACAC,kCAAA,WACAC,6BAAA,QACAC,8BAAA,OACAC,2BAAA,SACAC,2BAAA,QACAC,yBAAA,SACAC,0BAAA,SACAC,0BAAA,WACAC,4BAAA,QACAC,+BAAA,OACAC,6BAAA,QACAC,8BAAA,WACAC,8BAAA,WACAC,kBAAA,IACAC,0BAAA,WACAC,uBAAA,YACAC,2BAAA,iBAOAniI,QAAAC,OAAA,iBACA6B,OAAA,CAAA,qBACA,SAAA8B,GACAA,EAAAg7H,aAAA,KAAA,CACAC,UAAA,QACAC,SAAA,eACAC,mBAAA,SACAC,iBAAA,OACAC,iBAAA,SACAC,aAAA,OACAC,eAAA,SACAC,SAAA,QACAC,0BAAA,UACAC,2BAAA,cACAC,4BAAA,YACAC,2BAAA,WACAC,gCAAA,KACAC,gCAAA,KACAC,iCAAA,KACAC,mCAAA,KACAC,kCAAA,KACAC,gCAAA,KACAC,kCAAA,KACAC,4BAAA,uBACAC,4BAAA,uBACAC,4BAAA,uBACAC,sBAAA,QACAC,sBAAA,SACAC,sBAAA,SACAC,qBAAA,MACAC,qBAAA,OACAC,qBAAA,OACAC,4BAAA,aACAC,6BAAA,QACAC,6BAAA,QACAC,6BAAA,OACAC,gCAAA,QACAC,2BAAA,QACAC,mCAAA,QACAC,oCAAA,SACAC,mCAAA,SACAC,oCAAA,SACAC,kCAAA,SACAC,6BAAA,SACAC,8BAAA,UACAC,2BAAA,OACAC,2BAAA,QACAC,yBAAA,MACAC,0BAAA,OACAC,0BAAA,OACAC,4BAAA,SACAC,+BAAA,YACAC,6BAAA,UACAC,8BAAA,WACAC,8BAAA,WACAC,kBAAA,KACAC,0BAAA,aACAC,uBAAA,WACAC,2BAAA,iBAOAniI,QAAAC,OAAA,iBACA6B,OAAA,CAAA,qBACA,SAAA8B,GACAA,EAAAg7H,aAAA,KAAA,CACAC,UAAA,QACAC,SAAA,cACAC,mBAAA,QACAC,iBAAA,MACAC,iBAAA,UACAC,aAAA,OACAC,eAAA,SACAC,SAAA,OACAC,0BAAA,QACAC,2BAAA,SACAC,4BAAA,UACAC,2BAAA,SACAC,gCAAA,KACAC,gCAAA,KACAC,iCAAA,KACAC,mCAAA,KACAC,kCAAA,KACAC,gCAAA,KACAC,kCAAA,KACAC,4BAAA,gBACAC,4BAAA,gBACAC,4BAAA,gBACAC,sBAAA,OACAC,sBAAA,QACAC,sBAAA,QACAC,qBAAA,MACAC,qBAAA,OACAC,qBAAA,OACAC,4BAAA,WACAC,6BAAA,QACAC,6BAAA,QACAC,6BAAA,QACAC,gCAAA,WACAC,2BAAA,QACAC,mCAAA,QACAC,oCAAA,SACAC,mCAAA,QACAC,oCAAA,SACAC,kCAAA,OACAC,6BAAA,UACAC,8BAAA,WACAC,2BAAA,QACAC,2BAAA,QACAC,yBAAA,MACAC,0BAAA,OACAC,0BAAA,OACAC,4BAAA,SACAC,+BAAA,YACAC,6BAAA,UACAC,8BAAA,WACAC,8BAAA,WACAC,kBAAA,KACAC,0BAAA,aACAC,uBAAA,UACAC,2BAAA,mBAOAniI,QAAAC,OAAA,iBACA6B,OAAA,CAAA,qBACA,SAAA8B,GACAA,EAAAg7H,aAAA,KAAA,CACAC,UAAA,OACAC,SAAA,iBACAC,mBAAA,WACAC,iBAAA,SACAC,iBAAA,SACAC,aAAA,QACAC,eAAA,WACAC,SAAA,WACAC,0BAAA,QACAC,2BAAA,WACAC,4BAAA,UACAC,2BAAA,QACAC,gCAAA,KACAC,gCAAA,KACAC,iCAAA,KACAC,mCAAA,KACAC,kCAAA,KACAC,gCAAA,KACAC,kCAAA,KACAC,4BAAA,mBACAC,4BAAA,mBACAC,4BAAA,qBACAC,sBAAA,SACAC,sBAAA,SACAC,sBAAA,UACAC,qBAAA,MACAC,qBAAA,MACAC,qBAAA,MACAC,4BAAA,eACAC,6BAAA,QACAC,6BAAA,QACAC,6BAAA,UACAC,gCAAA,UACAC,2BAAA,SACAC,mCAAA,OACAC,oCAAA,QACAC,mCAAA,QACAC,oCAAA,SACAC,kCAAA,WACAC,6BAAA,SACAC,8BAAA,UACAC,2BAAA,QACAC,2BAAA,QACAC,yBAAA,MACAC,0BAAA,MACAC,0BAAA,MACAC,4BAAA,SACAC,+BAAA,YACAC,6BAAA,UACAC,8BAAA,WACAC,8BAAA,WACAC,kBAAA,IACAC,0BAAA,WACAC,uBAAA,YACAC,2BAAA,iBAOAniI,QAAAC,OAAA,iBACA0T,UAAA,eAAA,CAAA,SAAA,SAAAyuH,GACA,OAAA,SAAAh7H,EAAA6kC,EAAA73B,GACA,IAAAgqC,EAAAgkF,EAAAhuH,EAAAiuH,cACAp2F,EAAAt2B,KAAA,cAAA,SAAArV,GACA8G,EAAAqrB,OAAA,WACAnyB,EAAAkiD,iBACApE,EAAAh3C,EAAA,CAAAo3H,OAAAl+H,YAOAN,QAAAC,OAAA,iBAEA0T,UAAA,cAAA,CAAA,WAAA,YAAA,aAAA,aAAA,iBACA,SAAAC,EAAA0uH,EAAAliI,EAAAD,EAAAoiI,GAGA,IAAAC,EAAA,CACA/6B,UAAA,EACAC,eAAA,EACAI,UAAA,EACAE,QAAA,GACAE,MAAA,GACAniG,MAAA,SACA4hG,UAAA,EACA86B,aAAA,EACAC,aAAA,IACAC,mBAAA,oDACAC,eAAA,QACA/6B,gBAAA,EACAW,mBAAA,EACAzyF,UAAA,IAAArU,KACAiE,QAAA,GACA4c,UAAA,GACAvY,KAAA,GACA0iC,OAAA,GACA47D,SAAA,GACAu6B,eAAA,EACAC,uBAAA,EACAC,eAAA,GAGA,MAAA,CACAhvH,SAAA,IACA3M,MAAA,CACA47H,eAAA,YACAC,cAAA,mBACAC,iBAAA,uBAEAl+H,YAAA,4CACA8tB,SAAA,EACA7tB,WAAA,CAAA,SAAA,SAAAG,GAEA,IAAA+9H,EAAA,KAEA/9H,EAAA6F,OAAA,iBAAA,SAAAC,GACA9F,EAAAmhB,OAAAvmB,QAAAkC,OAAA,GAAAlC,QAAA2G,KAAA67H,GAAAt3H,GAEAq3H,EAAAa,iBAAAh+H,EAAAmhB,QACAg8G,EAAAc,cAAAj+H,EAAAmhB,QACAg8G,EAAAe,eAAAl+H,EAAAmhB,QACAg8G,EAAAgB,gBAAAn+H,EAAAmhB,QACAg8G,EAAAiB,sBAAAp+H,EAAAmhB,QAEAnhB,EAAAq+H,gBAAA,IACA,GAEAr+H,EAAAs+H,eAAA,SAAAh1H,GACA,OAAA6zH,EAAAmB,eAAAh1H,EAAAtJ,EAAAmhB,SAGAnhB,EAAAgV,UAAA,GAEA,IAAAupH,IAAAv+H,EAAA49H,eAAA16B,YAAAljG,EAAA49H,eAAA16B,SAAAzjG,OAEA++H,EAAA,KACAC,EAAA,KACAC,GAAA,EAEA,SAAAh7H,IAGAg7H,GAAA,EACAC,EAHAH,EAAA,KACAC,EAAA,MAKA,SAAAE,EAAAH,EAAAC,GACA,GAAAD,GACAC,GACAF,GACAv+H,EAAA49H,eAAAv7B,SAHA,CAuCA,IA9BA,IAGAu8B,EACAC,EACAC,EAiDAC,EAtDAC,EAAA,GAYAC,EAJAT,EAAAU,SAAAT,EAAAS,UACAN,EAAAJ,EAAAU,SACAL,EAAAJ,EAAAS,SACAJ,EAAAN,EAAAl1H,SACAm1H,EAAAn1H,UACAk1H,EAAAU,WAAAT,EAAAS,UACAN,EAAAJ,EAAAU,SACAL,EAAAL,EAAAU,SACAV,EAAAl1H,SAAAm1H,EAAAn1H,UACAw1H,EAAAN,EAAAl1H,SACAm1H,EAAAn1H,WAEAw1H,EAAAL,EAAAn1H,SACAk1H,EAAAl1H,YAGAs1H,EAAAH,EAAAS,SACAL,EAAAL,EAAAU,SACAJ,EAAAL,EAAAn1H,SACAk1H,EAAAl1H,UAGAysC,EAAA6oF,EAAA7oF,GAAA8oF,EAAA9oF,IAQA,IAPA,IAGAopF,EAAAppF,IAAA8oF,EACAI,EACAj/H,EAAAmhB,OAAAvc,KAAAnF,OAEAuK,EAPA+rC,IAAA6oF,EACAE,EACA,EAKA90H,GAAAm1H,EAAAn1H,IACAg1H,EAAAh1H,EAAA,IAAA+rC,IAAA,EAIAvnB,OAAAkX,KAAA1lC,EAAAgV,WAAA1P,QAAA,SAAA5J,GACAsjI,EAAAtjI,WACAsE,EAAAgV,UAAAtZ,KAIA8yB,OAAAkX,KAAAs5F,GAAA15H,QAAA,SAAA5J,GACAsE,EAAAgV,UAAAtZ,IAAA,IAGAsE,EAAA89H,mBACAiB,EAAA5B,EAAAiC,2BACAp/H,EAAAmhB,OAAAq9G,EAAAC,GACAjwH,EAAA,WACAxO,EAAA89H,iBAAA,CAAA9oH,UAAA+pH,YA7DAvwG,OAAAkX,KAAA1lC,EAAAgV,WAAA1P,QAAA,SAAA5J,UAAAsE,EAAAgV,UAAAtZ,KAkEA,SAAA2jI,IACAtB,GACAA,EAAAuB,SACAvB,EAAAuB,UAIAvB,EAAA,KAIA,SAAAwB,EAAAnG,EAAAl+H,EAAAyV,EAAAqtB,GACAqhG,IAEA,IAAAG,EAAA,GAEA5kI,QAAA0K,QAAAtF,EAAA49H,eAAA16B,SAAA,SAAAr0E,GAEA,IAIA1pB,EAJAnF,EAAA49H,eAAA16B,UAAAljG,EAAA49H,eAAA16B,SAAAzjG,SAIA0F,GAAA,GAEAA,EADA0pB,EAAA1pB,UACA0pB,EAAA1pB,UAAAjK,EAAAyV,EAAAqtB,GAGA74B,IACAq6H,EAAArhI,KAAA,CACA+G,KAAAlK,EAAAM,QAAAuzB,EAAA3pB,MACAoJ,MACA1T,QAAA2V,KAAA1R,KAAA,SAAA3D,EAAAyV,EAAAqtB,GACAqhG,IACAxwG,EAAAzpB,SAAAlK,EAAAyV,EAAAqtB,IACA9iC,EAAAyV,EAAAqtB,QAKA,IAAAz+B,EAAAxE,EAAAkH,MAAA,GACA1C,EAAAorC,QAAA60F,GACAzB,EAAAb,EACAtiI,QAAAisC,QAAAuyF,EAAAruF,QACA,CACA/oC,MAAAzC,EACA9B,UAAA,cACAP,UAAA,OACA07D,OAAA,WACAymE,QAKAj+H,SAAAC,KAAA,WACAmN,EAAA,WACAuvH,EAAAv8H,WAKAxB,EAAAy/H,gBAAA,SAAAn2H,EAAA41H,GACAG,IAEAb,EAAA,CAAAl1H,SAAAA,EAAA41H,SAAAA,GACAT,EAAA,CACAn1H,SAAAA,GAAAtJ,EAAAmhB,OAAAs8G,eAAA,GACAyB,SAAAA,GAGA/B,EAAAuC,gBACA1/H,EAAAmhB,OAAAq9G,EAAAC,IAEAC,GAAA,EACAC,EAAAH,EAAAC,IAIA/6H,KAIA1D,EAAA2/H,gBAAA,SAAAr2H,EAAA41H,GACAR,GACA,EAAArrG,KAAAusE,IAAA4+B,EAAAl1H,SAAAA,KACA+pB,KAAAusE,IAAA4+B,EAAAl1H,SAAAA,GAAA,GAAAtJ,EAAAmhB,OAAAs8G,gBAAA,KAEA,IAAAz9H,EAAAmhB,OAAAu8G,uBAEAc,EAAAU,WAAAA,GACA7rG,KAAAusE,IAAA4+B,EAAAl1H,SAAAA,GAAAtJ,EAAAmhB,OAAAu8G,yBAaAe,EAAA,CAAAn1H,SAAAA,EAAA41H,SAAAA,GACA/B,EAAAuC,gBACA1/H,EAAAmhB,OAAAq9G,EAAAC,IAEAE,EAAAH,EAAAC,KAsBA,IAAAmB,IAfA5/H,EAAA6/H,cAAA,SAAAzG,GACAsF,GAAA,EAEAF,GAAAC,GASAc,EAAAnG,EAFA,MAHA2F,EAAA5B,EAAAiC,2BACAp/H,EAAAmhB,OAAAq9G,EAAAC,IAIA9tH,UAAAouH,EAAA/gG,WAIA8hG,EAAA,KAEA9/H,EAAA+/H,cAAA,SAAA3G,EAAAl+H,GAMA,GALAwI,IACA27H,IAEAr/H,EAAAmhB,OAAA3d,eAAAtI,EAAAinG,WAEAy9B,GACAE,IAAA5kI,EAQA,OAPA0kI,GAAA,EACAE,EAAA,KACA9/H,EAAAq+H,gBAAA,EACA7vH,EAAA,WACAxO,EAAAq+H,gBAAA,GACA,UACAkB,EAAAnG,EAAAl+H,EAAAA,EAAAwrB,UAAAxrB,EAAAyrB,SAKAi5G,GAAA,EACAE,EAAA5kI,EAEAsT,EAAA,WACAoxH,GAAA,GACA,KAEA5/H,EAAA69H,gBACA79H,EAAAq+H,gBAAA,EAEA7vH,EAAA,WACAxO,EAAA69H,cAAA,CAAAv6H,OAAAtD,EAAAmhB,OAAA3d,mBAGAgL,EAAA,WACAxO,EAAAq+H,gBAAA,GACA,aAUAzjI,QAAAC,OAAA,iBAEA0T,UAAA,wBAAA,CAAA,iBAAA,SAAA4uH,GACA,MAAA,CACAxuH,SAAA,IACA3M,MAAA,CACA47H,eAAA,YACAoC,YAAA,kBAEApgI,YAAA,wDACAC,WAAA,CAAA,SAAA,SAAAG,GAEAA,EAAAigI,eAAA,WACA,IAAAC,EAAA/C,EAAAgD,eAAAngI,EAAA49H,gBACA59H,EAAAggI,aACAhgI,EAAAggI,YAAAE,IAIAlgI,EAAA8nG,eAAA,WACA,IAAAo4B,EAAA/C,EAAAiD,eAAApgI,EAAA49H,gBACA59H,EAAAggI,aACAhgI,EAAAggI,YAAAE,IAIAlgI,EAAAqgI,gBAAA,WACA,IAAAH,EAAA/C,EAAAmD,YAAAtgI,EAAA49H,gBACA59H,EAAAggI,aACAhgI,EAAAggI,YAAAE,IAIAlgI,EAAAugI,mBAAA,WACA,IAAAL,EAAA/C,EAAAqD,gBAAAxgI,EAAA49H,gBACA59H,EAAAggI,aACAhgI,EAAAggI,YAAAE,UAQAtlI,QAAAC,OAAA,iBAEA0T,UAAA,wBAAA,CAAA,iBAAA,SAAA4uH,GACA,MAAA,CACAxuH,SAAA,KACAC,QAAA,UACA5M,MAAA,CACAyrB,QAAA,YAEA7tB,YAAA,uDACAkP,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEAmC,EAAAV,MAAA,GAEAzB,EAAAmQ,QAAA,WACAhO,EAAAV,MAAA67H,EAAAsD,wBAAAz+H,EAAAV,MAAAzB,EAAAoQ,aAGAjO,EAAA6D,OAAA,UAAA,SAAAC,GACA9D,EAAAV,MAAA67H,EAAAsD,wBAAAz+H,EAAAV,MAAAzB,EAAAoQ,cACA,GAEAjO,EAAA6D,OAAA,QAAA,SAAAC,GACAjG,EAAAytB,cAAA6vG,EAAAuD,wBAAA7gI,EAAAoQ,WAAAnK,MACA,QAOAlL,QAAAC,OAAA,iBAEA0T,UAAA,sCAAA,CAAA,WACA,MAAA,CACAI,SAAA,KACAC,QAAA,UACA5M,MAAA,CACAyrB,QAAA,YAEA7tB,YAAA,uEACAkP,KAAA,SAAA9M,EAAA6kC,EAAA98B,EAAA0jB,SAOA7yB,QAAAC,OAAA,iBAEA0T,UAAA,mCAAA,CAAA,WACA,MAAA,CACAI,SAAA,KACAC,QAAA,UACA5M,MAAA,CACAyrB,QAAA,YAEA7tB,YAAA,qEACAkP,KAAA,SAAA9M,EAAA6kC,EAAA98B,EAAA0jB,SAOA7yB,QAAAC,OAAA,iBACA0T,UAAA,kCAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAArQ,GACA,GAAAA,EACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,SAAAwJ,EAAAtQ,GACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,MAAA,CACAyJ,SAAA,KACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,gCACA,CAAApC,GAAA,EAAAoC,KAAA,iCACA,CAAApC,GAAA,EAAAoC,KAAA,8BACA,CAAApC,GAAA,EAAAoC,KAAA,8BACA,CAAApC,GAAA,EAAAoC,KAAA,4BACA,CAAApC,GAAA,EAAAoC,KAAA,6BACA,CAAApC,GAAA,EAAAoC,KAAA,6BACA,CAAApC,GAAA,EAAAoC,KAAA,+BACA,CAAApC,GAAA,EAAAoC,KAAA,kCACA,CAAApC,GAAA,GAAAoC,KAAA,gCACA,CAAApC,GAAA,GAAAoC,KAAA,iCACA,CAAApC,GAAA,GAAAoC,KAAA,oCAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAvP,EAAAmQ,WAEA,QAMApV,QAAAC,OAAA,iBAEA0T,UAAA,wCAAA,CAAA,WACA,MAAA,CACAI,SAAA,KACAC,QAAA,UACA5M,MAAA,CACAyrB,QAAA,YAEA7tB,YAAA,yEACAkP,KAAA,SAAA9M,EAAA6kC,EAAA98B,EAAA0jB,SAOA7yB,QAAAC,OAAA,iBAEA0T,UAAA,qCAAA,CAAA,WACA,MAAA,CACAI,SAAA,KACAC,QAAA,UACA5M,MAAA,CACAyrB,QAAA,YAEA7tB,YAAA,uEACAkP,KAAA,SAAA9M,EAAA6kC,EAAA98B,EAAA0jB,SAOA7yB,QAAAC,OAAA,iBACA0T,UAAA,qCAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAArQ,GACA,GAAAA,EACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,SAAAwJ,EAAAtQ,GACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,MAAA,CACAyJ,SAAA,KACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,mCACA,CAAApC,GAAA,EAAAoC,KAAA,mCACA,CAAApC,GAAA,EAAAoC,KAAA,oCACA,CAAApC,GAAA,EAAAoC,KAAA,sCACA,CAAApC,GAAA,GAAAoC,KAAA,qCACA,CAAApC,GAAA,GAAAoC,KAAA,mCACA,CAAApC,GAAA,GAAAoC,KAAA,wCAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAvP,EAAAmQ,WAEA,QAMApV,QAAAC,OAAA,iBACA0T,UAAA,wCAAA,CAAA,WAAA,aACA,SAAAC,EAAAxT,GACA,SAAAyT,EAAArQ,GACA,GAAAA,EACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,SAAAwJ,EAAAtQ,GACA,OAAApD,EAAAM,QAAA8C,EAAA8G,MAGA,MAAA,CACAyJ,SAAA,KACAC,QAAA,UACAE,KAAA,SAAA9M,EAAA+M,EAAAC,EAAAnP,GAEA2O,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAX,aAAAA,EACAC,gBAAAA,EACAY,mBAAA,EACAC,YAAA,EACAC,yBAAA,EACApR,KAAA,CACA,CAAA0E,GAAA,EAAAoC,KAAA,sCACA,CAAApC,GAAA,EAAAoC,KAAA,uCACA,CAAApC,GAAA,EAAAoC,KAAA,sCACA,CAAApC,GAAA,EAAAoC,KAAA,uCACA,CAAApC,GAAA,EAAAoC,KAAA,wCAIArF,EAAAmQ,QAAA,WACAjB,EAAAK,QAAA,MAAAvP,EAAAoQ,aAGApQ,EAAAqQ,SAAAC,QAAA,SAAAC,GACA,OAAAA,EAGAC,SAAAD,GAFA,IAMAvQ,EAAAyQ,YAAAH,QAAA,SAAAxU,GACA,OAAAA,EAGAA,EAAA,GAFA,MAMAoT,EAAAqe,GAAA,SAAA,WACAprB,EAAAqrB,OAAA,WACAxtB,EAAAytB,cAAAve,EAAAK,QAAA,YAIAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAGAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,KAGAoT,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAvP,EAAAmQ,WAEA,QAMApV,QAAAC,OAAA,iBAEA0T,UAAA,uCAAA,CAAA,WACA,MAAA,CACAI,SAAA,KACAC,QAAA,UACA5M,MAAA,CACAyrB,QAAA,YAEA7tB,YAAA,wEACAkP,KAAA,SAAA9M,EAAA6kC,EAAA98B,EAAA0jB,SAOA7yB,QAAAC,OAAA,iBAEA0T,UAAA,oCAAA,CAAA,WACA,MAAA,CACAI,SAAA,KACAC,QAAA,UACA5M,MAAA,CACAyrB,QAAA,YAEA7tB,YAAA,sEACAkP,KAAA,SAAA9M,EAAA6kC,EAAA98B,EAAA0jB,SAOA7yB,QAAAC,OAAA,iBAEA0T,UAAA,uCAAA,CAAA,WACA,MAAA,CACAI,SAAA,KACAC,QAAA,UACA5M,MAAA,CACAyrB,QAAA,YAEA7tB,YAAA,wEACAkP,KAAA,SAAA9M,EAAA6kC,EAAA98B,EAAA0jB,SAOA7yB,QAAAC,OAAA,iBAEA0T,UAAA,oCAAA,CAAA,WACA,MAAA,CACAI,SAAA,KACAC,QAAA,UACA5M,MAAA,CACAyrB,QAAA,YAEA7tB,YAAA,sEACAkP,KAAA,SAAA9M,EAAA6kC,EAAA98B,EAAA0jB,SAOA7yB,QAAAC,OAAA,iBAEA0T,UAAA,2BAAA,CAAA,WAAA,iBAAA,SAAAC,EAAA2uH,GAEA,SAAA1uH,EAAA4I,GACA,GAAAA,EACA,OAAAA,EAAAvS,KAIA,MAAA,CACA6J,SAAA,IACA3M,MAAA,CACA47H,eAAA,aAEAlwG,SAAA,EACA7e,SAAA,EACAC,KAAA,SAAA9M,EAAA+M,EAAAC,GAEA,IAAA2xH,EAAA3+H,EAAA47H,eAAAv7B,SACAu+B,EAAA5+H,EAAA47H,eAAAp7B,iBAEA,SAAA9zF,EAAA2I,GAEA,IAAAA,EACA,MAAA,GAGA,IAAAwpH,EAAA1D,EAAA2D,qBACA9+H,EAAA47H,eACAT,EAAA4D,oBAAA/+H,EAAA47H,eAAA56B,iBAAA3rF,IACA5W,EAAA,KAUA,OARA7F,QAAA0K,QAAAu7H,EAAA,SAAAxpH,GACA,OAAA5W,EACAA,EAAA4W,EAAAvS,KAEArE,GAAA,KAAA4W,EAAAvS,OAIArE,GAAA,GAGA+N,EAAA,WACAW,EAAAJ,GAAAK,QAAA,CACAI,yBAAA,EACAf,aAAAA,EACAC,gBAAAA,EACA5L,GAAA,SAAAurC,GAAA,OAAA8uF,EAAA4D,oBAAA/+H,EAAA47H,eAAA56B,iBAAA30D,IACAjwC,KAAA4D,EAAA47H,eAAAzgH,YAGApO,EAAAqe,GAAA,SAAA,SAAAlyB,GACA8G,EAAAqrB,OAAA,WACArrB,EAAA47H,eAAAx6B,mBAAA/yF,SAAAnV,EAAA4zB,KAAA,SAIA9sB,EAAA6D,OAAA,iBAAA,SAAAC,GACA,IAAAk7H,EAAA3wH,SAAAlB,EAAAJ,GAAAK,QAAA,QAAA,KAEA6xH,EAAA9D,EAAA+D,2BAAAp7H,EAAAA,EAAAs9F,oBAEA69B,IAAAD,GACAL,IAAA3+H,EAAA47H,eAAAv7B,UACAu+B,IAAA5+H,EAAA47H,eAAAp7B,mBAEAm+B,EAAA3+H,EAAA47H,eAAAv7B,SACAu+B,EAAA5+H,EAAA47H,eAAAp7B,iBAEAxgG,EAAA47H,eAAAx6B,mBACA69B,GAAA,EAEA9xH,EAAAJ,GAAAK,QAAA,MACA6xH,EAAAA,EAAA,GAAA,QAEA,GAEAlyH,EAAAwB,KAAA,WAAA,WACAxB,EAAAK,QAAA,aAGAJ,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,UAAAzT,KAIAqT,EAAAwB,SAAA,WAAA,SAAA7U,GACAoT,EAAAK,QAAA,aAAAzT,YASAf,QAAAC,OAAA,iBAEA4gC,QAAA,iBAAA,CAAA,UACA,SAAArzB,GAmDA,SAAA+4H,EAAA/+H,EAAAlH,EAAAosC,GACA,IAQAo7D,EACAitB,EAEA/sB,EACAitB,EAZA9kH,EAnDA,SAAA3I,EAAAlH,GAEA,IADA,IAAAmjB,EAAAtiB,OAAAb,EAAAyV,WAAAC,QAAA,OACAie,EAAA,EAAAA,EAAAzsB,EAAA7B,QAAAd,OAAAovB,IAAA,CACA,IAAA9jB,EAAA3I,EAAA7B,QAAAsuB,GACA,GAAA9yB,OAAAgP,EAAAnP,MAAA0iB,OAAAD,IACAnjB,EAAA27B,YAAA9rB,EAAA8rB,WACA,OAAAhI,EAKA,OAAA,EAwCAuyG,CAAAh/H,EAAAlH,IACA,IAAA6P,IAIAmqH,EAAAn5H,OAAAb,EAAAyV,WACAwkH,EAAAp5H,OAAAb,EAAA8iC,SAEA0kE,EAAAwyB,EAAA1gG,OAAApyB,EAAAsgG,UACAitB,EAAAuF,EAAAzgG,SAEAmuE,EAAAuyB,EAAA3gG,OAAApyB,EAAAsgG,UACAmtB,EAAAsF,EAAA1gG,SAGAmuE,EAAA,GAAA,GAAAA,GAAA,IAAAitB,GAKAntB,GAAAtgG,EAAAwgG,QAAAxgG,EAAAsgG,YAIAxnG,EAAAwnG,UAAAA,EACAxnG,EAAAy0H,YAAAA,EACAz0H,EAAA0nG,QAAAA,EACA1nG,EAAA20H,UAAAA,EACA30H,EAAA6P,OAAAA,EAEAu8B,EAAAnpC,KAAAjD,KA+FA,SAAAmmI,EAAAj/H,EAAA8B,GAEA,IA5FA9B,EACAypB,EA2FA/nB,GA5FA1B,EA4FAA,EA3FAypB,EAAA,GAEAjxB,QAAA0K,QAyFApB,EAzFA,SAAAZ,GACA,IAAA4xH,EAAAn5H,OAAAuH,EAAAqN,WACAwkH,EAAAp5H,OAAAuH,EAAA06B,SAEA,IAAAk3F,EAAAtpD,QAAAupD,GAUA,IANA,IAAAmM,EAAAvlI,OAAAuH,EAAAqN,WAAAC,QAAA,OACA2wH,EAAAxlI,OAAAuH,EAAA06B,SAAAptB,QAAA,OAEA4wH,EAAAzlI,OAAAuH,EAAAqN,WACA8wH,EAAA1lI,OAAAuH,EAAA06B,WAEA,CAEA,IAAA0jG,EAAA3lI,OAAAylI,GAAA5wH,QAAA,OAEA8wH,EAAA91D,QAAA01D,KACAE,EAAAE,GAGAA,EAAAt2G,SAAAm2G,GACAE,EAAA1lI,OAAAylI,GAAAp6G,MAAA,SAEAq6G,EAAA1lI,OAAA2lI,IACA/zH,IAAA,OAAAwnH,EAAAlnH,IAAA,SACAwzH,EAAA9zH,IAAA,SAAAwnH,EAAAlnH,IAAA,WACAwzH,EAAA9zH,IAAA,SAAAwnH,EAAAlnH,IAAA,YAGA,IAAA4oB,EAAAvzB,EAAAq+H,EAAAv/H,EAAA6gG,iBAEA/nG,EAAA,CACAyV,UAAA6wH,EAAAtlI,SACA8hC,QAAAyjG,EAAAvlI,SACA26B,WAAAA,EACAsrE,WAAA7+F,GAKA,GAFA69H,EAAA/+H,EAAAlH,EAAA2wB,GAEA01G,EAAAjjH,OAAAojH,GACA,MAGAF,EAAA9nH,IAAA,EAAA,QAAA9I,QAAA,UAIAxU,EAAAqT,OAAAoc,EAAA,SAAAvoB,GAAA,OAAA,IAAAA,EAAAyH,OAAA,GAAAzH,EAAAo/F,UAAAp/F,EAAAqsH,eAyCA/0H,QAAA0K,QAAAxB,EAAA,SAAAR,GACA,IArJAlB,EAAAwgG,EAAAitB,EAAA7xF,EAAA4jG,EACA9hF,EAoJA+hF,GAvKAz/H,EAuKAA,EAvKAsgG,EAuKAp/F,EAAAo/F,UAvKAitB,EAuKArsH,EAAAqsH,YAvKAh/G,EAwKArN,EAAA6+F,WAAAxxF,UAxKAixH,EAwKAx/H,EAAA7B,QAAA+C,EAAAyH,QAAAnP,MAtKA6gB,EAAAimF,GAAA,GAAAtgG,EAAA0gG,OAAA6sB,EAAAvtH,EAAA0gG,OADA,EAGA,CACAp8E,UAJA,EAKAo7G,eAAA,EACAC,iBAAAhmI,OAAA4U,GAAAC,QAAA,OAAAwa,SAAArvB,OAAA6lI,GAAAhxH,QAAA,SAGA,CACA8V,UAAAjK,EACAqlH,eAAA,EACAC,kBAAA,IA4JAC,GAvJA5/H,EAuJAA,EAvJAwgG,EAuJAt/F,EAAAs/F,QAvJAitB,EAuJAvsH,EAAAusH,UAvJA7xF,EAwJA16B,EAAA6+F,WAAAnkE,QAxJA4jG,EAwJAx/H,EAAA7B,QAAA+C,EAAAyH,QAAAnP,KAvJAkkD,EAAA,GAAA19C,EAAA0gG,OAAA1gG,EAAAwgG,QAAAxgG,EAAAsgG,WACAjmF,EAAAmmF,GAAA,GAAAxgG,EAAA0gG,OAAA+sB,EAAAztH,EAAA0gG,MACAhjD,EAAArjC,EACA,CACAkK,QAAAm5B,EACAmiF,aAAA,EACAC,eAAAnmI,OAAAiiC,GAAAptB,QAAA,OAAAg7D,QAAA7vE,OAAA6lI,GAAAhxH,QAAA,SAGA,CACA+V,QAAAlK,EACAwlH,aAAA,EACAC,gBAAA,IA6IAhnI,EAAA,CACA6P,OAAAzH,EAAAyH,OACAo3H,eAAA,EACAC,UAAA,EACApvC,MAAA6uC,EAAAn7G,UACAo7G,cAAAD,EAAAC,cACAC,iBAAAF,EAAAE,iBACA9uC,IAAA+uC,EAAAr7G,QACAs7G,YAAAD,EAAAC,YACAC,eAAAF,EAAAE,eACAp9H,KAAAxB,EAAA6+F,WAAAkgC,EAAAjgI,EAAA6gG,eAAA,SACAtmE,OAAAr5B,EAAA6+F,WAAAxlE,QAAA,EACA1zB,KAAA3F,EAAA6+F,WAAAl5F,MAAA,EACAyd,UAAApjB,EAAA6+F,WAAAxxF,UACAgW,QAAArjB,EAAA6+F,WAAAnkE,QACAkO,QAAA5oC,EAAA6+F,WAAAkgC,EAAAjgI,EAAA6gG,eAAA,YACA/6D,OAAA5kC,EAAA6+F,WAAAkgC,EAAAjgI,EAAA6gG,eAAA,WACAq/B,cAAAh/H,EAAA6+F,WAAAmgC,cACAC,eAAAj/H,EAAA6+F,WAAAogC,eACApgC,WAAA7+F,EAAA6+F,WACA/iF,MAAA9b,EAAA6+F,WAAAkgC,EAAAjgI,EAAA6gG,eAAA,UACAx6C,eAAAnlD,EAAA6+F,WAAAkgC,EAAAjgI,EAAA6gG,eAAA,oBAEA7gG,EAAAklC,OAAAnpC,KAAAjD,KAnEA,SAAAkH,GACA,IAAAu8F,EAAA,GACA,GAAA,EAAAv8F,EAAAklC,OAAA7nC,OACA,IAAA,IAAAoB,EAAA,EAAAA,EAAAuB,EAAAklC,OAAA7nC,OAAAoB,IAAA,CACA,IAAA2hI,EAAApgI,EAAAklC,OAAAzmC,EAAA,GACA3F,EAAAkH,EAAAklC,OAAAzmC,GACA,GAAA3F,EAAA83F,MAAAwvC,EAAAvvC,KAAA/3F,EAAA6P,SAAAy3H,EAAAz3H,OACA,IAAA4zF,EAAAl/F,QACAk/F,EAAAxgG,KAAAqkI,GACA7jC,EAAAxgG,KAAAjD,QAKA,GAAA,EAAAyjG,EAAAl/F,OAAA,CACA,IAAA,IAAAs/F,EAAA,EAAAA,EAAAJ,EAAAl/F,OAAAs/F,IAAA,CACA,IAAAl4D,EAAA83D,EAAAI,GACAl4D,EAAAs7F,eAAAxjC,EAAAl/F,OACAonC,EAAAu7F,UAAArjC,EAEAJ,EAAA,IAMA,EAAAA,EAAAl/F,QACA7E,QAAA0K,QAAAq5F,EAAA,SAAA93D,EAAA14B,GACA04B,EAAAs7F,eAAAxjC,EAAAl/F,OACAonC,EAAAu7F,UAAAj0H,IAyCAs0H,CAAArgI,GAmIA,SAAAigI,EAAAK,EAAAC,GACA,OAAAD,GAAAA,EAAAC,GACAD,EAAAC,GAEAA,EAGA,SAAAhB,EAAA3+B,GACA,OAAAq/B,EAAAr/B,EAAA,cAUA,SAAA4/B,EAAAxgI,EAAAghG,GACA,IAAAy/B,EAAA,GAEAC,GADAD,EAAAlB,EAAAv/H,EAAA4gG,mBAAAI,GAEAhnG,EAAAwuD,UAAAxoD,EAAA+a,UAAA0lH,GACA,EAKA,OAHAC,EADAA,EAAA,EACA,EAGAA,EAYA,SAAAhC,EAAA1+H,EAAAghG,GAaA,IAZA,IAsBA2/B,EAtBA5lH,EAAA,GAIA2lH,EAAAF,EAAAxgI,EAAAghG,GAGA4/B,GADA5gI,EAAAigG,UAGAhvE,KAAAkC,IAAAnzB,EAAAogG,iBAAApgG,EAAA+a,UAAA1d,SAFA,EAKAmvB,EAAA,EAAAA,EAAAo0G,EAAAp0G,IAEA,IAAAxsB,EAAA+a,UAAA1d,QACAgd,EAAAra,EAAA+a,WAFA2lH,EAAAl0G,GAEAxsB,EAAA+a,UAAA1d,QACA0d,EAAAhf,KAAA,CACA2G,KAAA2X,EAAA3X,KACA+xB,WAAApa,EAAAklH,EAAAv/H,EAAA4gG,mBACAigC,aAAAxmH,OAGAsmH,EAAA,CAAAj+H,KAAA,GAAAm+H,aAAA,OACAtB,EAAAv/H,EAAA4gG,mBAAA,EACA7lF,EAAAhf,KAAA4kI,IAIA,OAAA5lH,EAgNA,SAAA+lH,EAAA9gI,EAAA88H,EAAA51H,EAAA65H,GACAvnI,EAAAwG,EAnBA7B,QAmBA2+H,GAnBAtjI,KAGA0N,EAiBAA,EAhBAU,GADA5H,EAiBAA,GAhBAwC,KAAA0E,GAgBAkrB,EAAA2uG,EAdA,CACA3uG,KAAAxqB,EAAAwqB,KACAC,OAAAzqB,EAAAo5H,UAAA,GAAAhhI,EAAAihI,cAGA,CACA7uG,KAAAxqB,EAAAwqB,KACAC,QAAAzqB,EAAAo5H,SAAA,IAAA,GAAAhhI,EAAAihI,cASA,OAAAtnI,OAAAH,GAAAgV,QAAA,OAAA8I,IAAA8a,EAAAA,KAAA,KAAA9a,IAAA8a,EAAAC,OAAA,KAAAv4B,SAmLA,SAAAonI,EAAA1nI,GACA,OAAAG,OAAAH,GAAAsyB,OACA,KAAA,EACA,OAAA,EACA,KAAA,EACA,OAAA,EACA,KAAA,EACA,OAAA,EACA,KAAA,EACA,OAAA,EACA,KAAA,EACA,OAAA,GACA,KAAA,EACA,OAAA,GACA,KAAA,EACA,OAAA,GAGA,OAAA,EAiHA,MAAA,CACAiwG,gBAhtBA,SAAA/7H,GACAi/H,EAAAj/H,EAAAA,EAAA8B,UAgtBAi8H,eA7sBA,SAAA/9H,GACA,IAAAy1B,EAAA,CACAlnB,UAAAvO,EAAAuO,UACAqtB,QAAA57B,EAAAuO,WAoBA,OAjBAvO,EAAAigG,UACAjgG,EAAAuO,UAAA5U,OAAAqG,EAAAuO,WACAC,QAAA,WACA8I,KAAA,EAAA,KACAxd,SAEA27B,EAAAlnB,UAAAvO,EAAAuO,UACAknB,EAAAmG,QAAAjiC,OAAAqG,EAAAuO,WAAA+I,IAAA,EAAA,KAAAxd,WAEAkG,EAAAuO,UAAA5U,OAAAqG,EAAAuO,WACAC,QAAA,OACA8I,KAAA,EAAA,KACAxd,SACA27B,EAAAlnB,UAAAvO,EAAAuO,UACAknB,EAAAmG,QAAAjiC,OAAAqG,EAAAuO,WAAA+I,IAAA,EAAA,KAAAxd,UAGA27B,GAurBAuoG,eAprBA,SAAAh+H,GACA,IAAAy1B,EAAA,CACAlnB,UAAAvO,EAAAuO,UACAqtB,QAAA57B,EAAAuO,WAoBA,OAjBAvO,EAAAigG,UACAjgG,EAAAuO,UAAA5U,OAAAqG,EAAAuO,WACAC,QAAA,WACA8I,IAAA,EAAA,KACAxd,SAEA27B,EAAAlnB,UAAAvO,EAAAuO,UACAknB,EAAAmG,QAAAjiC,OAAAqG,EAAAuO,WAAA+I,IAAA,EAAA,KAAAxd,WAEAkG,EAAAuO,UAAA5U,OAAAqG,EAAAuO,WACAC,QAAA,OACA8I,IAAA,EAAA,KACAxd,SACA27B,EAAAlnB,UAAAvO,EAAAuO,UACAknB,EAAAmG,QAAAjiC,OAAAqG,EAAAuO,WAAA+I,IAAA,EAAA,KAAAxd,UAGA27B,GA8pBAyoG,YA3pBA,SAAAl+H,GACA,IAAAy1B,EAAA,CACAlnB,UAAAvO,EAAAuO,UACAqtB,QAAA57B,EAAAuO,WAgBA,OAbAvO,EAAAigG,UACAjgG,EAAAuO,UAAA5U,SACA6U,QAAA,WACA1U,SAEA27B,EAAAlnB,UAAAvO,EAAAuO,UACAknB,EAAAmG,QAAAjiC,OAAAqG,EAAAuO,WAAA+I,IAAA,EAAA,KAAAxd,WAEAkG,EAAAuO,UAAA5U,SAAA6U,QAAA,OAAA1U,SACA27B,EAAAlnB,UAAAvO,EAAAuO,UACAknB,EAAAmG,QAAAjiC,OAAAqG,EAAAuO,WAAA+I,IAAA,EAAA,KAAAxd,UAGA27B,GAyoBA2oG,gBAtoBA,SAAAp+H,GACA,IAMAmhI,EACA/pH,EAPAqe,EAAA,CACAlnB,UAAAvO,EAAAuO,UACAqtB,QAAA57B,EAAAuO,WAiBA,OAdAvO,EAAAigG,UACAkhC,EAAAxnI,OAAAqG,EAAAuO,WAAAC,QAAA,WACA4I,EAAAzd,OAAAqG,EAAAuO,WAEA4yH,EAAAjlH,OAAA9E,KACApX,EAAAuO,UAAA4yH,EAAArnI,UAGA27B,EAAAlnB,UAAAvO,EAAAuO,UACAknB,EAAAmG,QAAAjiC,OAAAqG,EAAAuO,WAAA+I,IAAA,EAAA,KAAAxd,UAEA27B,EAAAmG,QAAAjiC,OAAAqG,EAAAuO,WAAA+I,IAAA,EAAA,KAAAxd,SAGA27B,GAmnBAmmG,iBA7gBA,SAAA57H,GAEA,IAGAohI,EAAA7yH,EAHAyjH,EAAAr4H,SAAA6U,QAAA,OACAxO,EAAAqhI,YAAA,EAIA,IAAA5C,EAAAC,EAAA1+H,EAAAA,EAAAghG,oBAEAhhG,EAAAigG,UACA1xF,EAAA5U,OAAAqG,EAAAuO,WAAAC,QAAA,WACA4yH,EAAAphI,EAAAi7H,aA9GA,SAAAj7H,EAAAy+H,EAAAlwH,GAKA,IAHA,IAAA+yH,EAAA/yH,EAAAgzH,QAAAvuG,WAAA,GAAAxkB,QAAA,OACAgzH,EAAAjzH,EAAAgzH,QAAAvuG,WAAA,GAAAhO,MAAA,OAEA1X,EAAA,EAAAA,EAAAtN,EAAA8B,QAAAzE,OAAAiQ,IAAA,CACA,IAAApM,EAAAlB,EAAA8B,QAAAwL,GAEAm0H,EAAA9nI,OAAAuH,EAAAqN,WACAmzH,EAAA/nI,OAAAuH,EAAA06B,SAEA,GAAA6lG,EAAAz4G,SAAAw4G,IAAAE,EAAAl4D,QAAA83D,IAEAtnI,EAAAsK,KAAAm6H,EAAA,SAAAxyF,GAGA,OAFA/qC,EAAA++H,EAAAjgI,EAAA6gG,eAAA,gBACA50D,EAAAg0F,EAAAjgI,EAAA2hI,iBAAA,iBAIA,OAAA,GA2FAC,CAAA5hI,EAAAy+H,EAAAlwH,GAAA,EAAA,IAEA6yH,EAAA,EACA7yH,EAAA5U,OAAAqG,EAAAuO,WAAAC,QAAA,QAGA,IAAA,IAAA0jB,EAAA,EAAAA,EAAAkvG,EAAAlvG,IAAA,CACA8/F,EAAA91G,OAAA3N,KACAvO,EAAAqhI,WAAAnvG,GAIA,IAFA,IAAA2vG,EAAAtzH,EAAAgzH,QAAAznI,SAEA0yB,EAAA,EAAAA,EAAAiyG,EAAAphI,OAAAmvB,IAAA,CACA,IAAAyf,EAAAwyF,EAAAjyG,GAEAxsB,EAAA7B,QAAApC,KAAA,CACAvC,KAAAqoI,EACAptG,WAAAwX,EAAAxX,WACAqtG,aAAA71F,EAAAvpC,KACArE,QAAA2B,EAAAigG,SACAj6F,EAAA,OAAAA,CAAA67H,EAAA,cACA51F,EAAAvpC,OAGA6L,EAAA+I,IAAA,EAAA,UA2eAonH,qBAAAA,EACA7C,cAnMA,SAAA77H,GACA,IAAAihI,EAAAhwG,KAAA8wG,KAAA,GAAA/hI,EAAA0gG,OAEA1gG,EAAAihI,YAAAA,EAEA,IAAAe,EAvGA,SAAAhiI,GAOA,IALA,IAuCAiiI,EACAC,EAmBAC,EA3DAC,EAAA,GACAC,EAAA,GACA/hC,EAAAtgG,EAAAsgG,WAAA,EACAE,EAAAxgG,EAAAwgG,SAAA,GAEAlzF,EAAA,EAAAA,EAAAtN,EAAA8B,QAAAzE,OAAAiQ,IAUA,IATA,IAAApM,EAAAlB,EAAA8B,QAAAwL,GAEAm0H,EAAA9nI,OAAAuH,EAAAqN,WACAmzH,EAAA/nI,OAAAuH,EAAA06B,SAEA0mG,EAAAb,EAAAF,QAAA/yH,QAAA,OACA+zH,EAAAb,EAAAH,QAAA/yH,QAAA,OAGAie,EAAA,EAAAA,EAAAzsB,EAAA7B,QAAAd,OAAAovB,IAAA,CACA,IAAA9jB,EAAA3I,EAAA7B,QAAAsuB,GAEA+yG,EAAA7lI,OAAAgP,EAAAnP,MAEA0H,EAAA++H,EAAAjgI,EAAA6gG,eAAA,gBAEAl4F,EAAA8rB,aACA+qG,EAAAtjH,OAAAomH,IACAF,EAAArmI,KAAAmF,GAEAs+H,EAAAtjH,OAAAqmH,IACAF,EAAAtmI,KAAAmF,IA+DA,OArDA,EAAAkhI,EAAA/kI,SACAmlI,EAAAxoI,EAAAqT,OAAA+0H,EAAA,SAAAlhI,GAAA,OAAA,GAAAvH,OAAAuH,EAAAqN,WAAA6jB,OAAAz4B,OAAAuH,EAAAqN,WAAA8jB,WACA4vG,EAAAtoI,OAAA6oI,EAAA,GAAAj0H,WACA2zH,EAAAvoI,OAAA6oI,EAAAA,EAAAnlI,OAAA,GAAAkR,WAEAvO,EAAAkgG,cACAI,EAAA2hC,EAAA7vG,QAEAkuE,EAAA2hC,EAAA7vG,SACAkuE,EAAA2hC,EAAA7vG,QAGAouE,EAAA0hC,EAAA9vG,SACAouE,EAAA0hC,EAAA9vG,OACA,EAAA8vG,EAAA7vG,WACAmuE,GAAA,MAMA,EAAA6hC,EAAAhlI,SACA8kI,EAAAnoI,EAAAqT,OAAAg1H,EAAA,SAAAnhI,GAAA,OAAA,GAAAvH,OAAAuH,EAAA06B,SAAAxJ,OAAAz4B,OAAAuH,EAAA06B,SAAAvJ,WACA4vG,EAAAtoI,OAAAwoI,EAAA,GAAAvmG,SACAsmG,EAAAvoI,OAAAwoI,EAAAA,EAAA9kI,OAAA,GAAAu+B,SAEA57B,EAAAkgG,eACAM,EAAA0hC,EAAA9vG,OACA,EAAA8vG,EAAA7vG,WACAmuE,GAAA,KAGAA,EAAA0hC,EAAA9vG,SACAouE,EAAA0hC,EAAA9vG,OACA,EAAA8vG,EAAA7vG,WACAmuE,GAAA,IAIAF,EAAA2hC,EAAA7vG,SACAkuE,EAAA2hC,EAAA7vG,UAKApyB,EAAAkgG,eAAAM,EAAAF,EAAA,IACAE,EAAAF,EAAA,GAOA,CACAA,UAAAA,EACAE,QALAA,EADAxgG,EAAAkgG,gBAAAkiC,EAAA/kI,SAAAglI,EAAAhlI,OACAijG,EAAA,EAKAE,GASAiiC,CAAAziI,GACAA,EAAAsgG,UAAA0hC,EAAA1hC,UACAtgG,EAAAwgG,QAAAwhC,EAAAxhC,QAEA,IAAA,IAAA/5C,EAAAzmD,EAAAsgG,UAAA75C,EAAAzmD,EAAAwgG,QAAA/5C,IACA,IAAA,IAAAtpD,EAAA,EAAAA,EAAA8jI,EAAA9jI,IACA6C,EAAAwC,KAAAzG,KAAA,CACA2mI,SAAA,IAAAvlI,EACAwlI,QAAAxlI,IAAA8jI,EAAA,EACAD,SAAA7jI,EACAi1B,KAAAq0B,KAqLAq1E,eA/KA,SAAA97H,GACAA,EAAA4iI,YAAA,IAAA5iI,EAAA7B,QAAAd,OACA2C,EAAA6iI,SAAA,IAAA7iI,EAAAwC,KAAAnF,QA8KAshI,oBA9kBA,SAAA/9B,EAAA1hG,GACA,OAAA0hG,GAAAA,EAAAnsE,WACAv1B,EAAA0hG,EAAAnsE,YAEAv1B,EAAAu1B,YA2kBAqqG,2BA3jBA,SAAA9+H,EAAAghG,GACA,GAAAhhG,EAAA+a,UAAA1d,OAAA,CACA,IAAAqjI,EAAAF,EAAAxgI,EAAAghG,GACA,OAAAhhG,EAAA+a,UAAA2lH,GAAAnB,EAAAv/H,EAAA4gG,mBAEA,OAAAI,GAujBAq9B,wBA1HA,SAAAn/H,EAAAggC,GAqDA,OAnDAhgC,EAAAmnD,eAAAnnB,EAAAr4B,KACA3H,EAAAm5C,MAAAnZ,EAAAmZ,MACAn5C,EAAA4jI,gBAAA5jG,EAAA4jG,iBAAA,GACA5jI,EAAA0xF,MAAA1xD,EAAA0xD,OAAAj3F,SAAAG,SACAoF,EAAA2xF,IAAA3xD,EAAA2xD,KAAAl3F,OAAAuF,EAAA0xF,OAAAt5E,IAAA,EAAA,SAAAxd,SAIA,IAAAoF,EAAAmnD,gBACAnnD,EAAA6jI,YAAA,KAAA7jG,EAAA8jG,SAAA,GAAA,EACA9jI,EAAA+jI,eAAA/jG,EAAAgkG,aAAA,IAEAhkI,EAAA6jI,YAAA,EACA7jI,EAAA+jI,eAAA,GAIA/jI,EAAAikI,gBAAAjkG,EAAAgkG,aAAA,EACA,IAAAhkI,EAAAmnD,eACAnnD,EAAAkkI,aAAAlkG,EAAA8jG,UAAA9B,EAAAhiI,EAAA0xF,OAEA1xF,EAAAkkI,aAAAlC,EAAAhiI,EAAA0xF,OAIA1xF,EAAAmkI,oBAAAnkG,EAAAokG,YAAA,EAAA,EACApkI,EAAAqkI,eAAArkG,EAAAskG,WAAA,EACAtkI,EAAAukI,iBAAAvkG,EAAAokG,aAAA,EACA,IAAApkI,EAAAmnD,gBACAnnD,EAAAwkI,kBAAAxkG,EAAAgkG,aAAA,EACAhkI,EAAAykI,kBAAAzkG,EAAAgkG,aAAA,EACAhkI,EAAA0kI,cAAA1kG,EAAA8jG,UAAA9B,EAAAhiI,EAAA0xF,SAEA1xF,EAAAwkI,kBAAA,EACAxkI,EAAAykI,kBAAA,EACAzkI,EAAA0kI,cAAA1C,EAAAhiI,EAAA0xF,QAIA1xF,EAAA2kI,mBAAA3kG,EAAAokG,YAAA,EAAA,EACApkI,EAAA4kI,gBAAA5kG,EAAAokG,aAAA,EACApkI,EAAA6kI,WAAA7kG,EAAA7I,OAAA,EACAn3B,EAAA8kI,WAAA9kG,EAAA7I,OAAA,EACA,IAAAn3B,EAAAmnD,gBACAnnD,EAAA+kI,aAAA/kG,EAAA8jG,UAAA9B,EAAAhiI,EAAA0xF,OACA1xF,EAAAglI,cAAAhlG,EAAAskG,WAAA,IAEAtkI,EAAA+kI,aAAA/C,EAAAhiI,EAAA0xF,OACA1xF,EAAAglI,cAAA,GAGAhlI,GAsEAo/H,wBAlEA,SAAAp/F,EAAAhgC,GAkDA,OAhDAktB,OAAAkX,KAAApE,GAAAh8B,QAAA,SAAA5J,UAAA4lC,EAAA5lC,KAEA4lC,EAAAr4B,KAAA3H,EAAAmnD,eACAnnB,EAAAmZ,MAAAn5C,EAAAm5C,MACAnZ,EAAA0xD,MAAA1xF,EAAA0xF,MACA,GAAA1xF,EAAAm5C,MACAnZ,EAAA4jG,gBAAA5jI,EAAA4jI,gBAEA5jG,EAAA2xD,IAAA3xF,EAAA2xF,IAGA,IAAA3xF,EAAAmnD,gBACA,IAAAnnD,EAAA+jI,iBACA/jG,EAAAgkG,YAAAhkI,EAAA+jI,gBAEA/jI,EAAA6jI,cACA7jG,EAAA8jG,SAAA9jI,EAAA6jI,cAEA,IAAA7jI,EAAAmnD,gBACAnnB,EAAAgkG,YAAAhkI,EAAAikI,gBACAjkG,EAAA8jG,SAAA9jI,EAAAkkI,cACA,IAAAlkI,EAAAmnD,eACA,IAAAnnD,EAAAmkI,qBACAnkG,EAAAokG,YAAA,EACApkG,EAAAskG,UAAAtkI,EAAAqkI,eACA,IAAArkI,EAAAwkI,oBACAxkG,EAAAgkG,YAAAhkI,EAAAwkI,qBAGAxkG,EAAAokG,YAAApkI,EAAAukI,iBACAvkG,EAAA8jG,SAAA9jI,EAAA0kI,cACA,IAAA1kI,EAAAykI,oBACAzkG,EAAAgkG,YAAAhkI,EAAAykI,oBAGA,IAAAzkI,EAAAmnD,iBACA,IAAAnnD,EAAA2kI,oBACA3kG,EAAAokG,YAAA,EACApkG,EAAA7I,MAAAn3B,EAAA6kI,WACA7kG,EAAAskG,UAAAtkI,EAAAglI,gBAEAhlG,EAAA8jG,SAAA9jI,EAAA+kI,aACA/kG,EAAAokG,YAAApkI,EAAA4kI,gBACA5kG,EAAA7I,MAAAn3B,EAAA8kI,YAEA9kG,EAAAgkG,YAAA,GAGAhkG,GAiBA89F,2BAjUA,SAAAh9H,EAAAo8H,EAAAC,GAEA,OAAAD,EAAAU,SAAAT,EAAAS,UACAV,EAAAU,WAAAT,EAAAS,UACAV,EAAAl1H,SAAAm1H,EAAAn1H,SAEA,CACAqH,UAAAuyH,EACA9gI,EAAAo8H,EAAAU,SAAAV,EAAAl1H,UAAA,GACA00B,QAAAklG,EACA9gI,EAAAq8H,EAAAS,SAAAT,EAAAn1H,UAAA,IAGA,CACAqH,UAAAuyH,EACA9gI,EAAAq8H,EAAAS,SAAAT,EAAAn1H,UAAA,GACA00B,QAAAklG,EACA9gI,EAAAo8H,EAAAU,SAAAV,EAAAl1H,UAAA,KAiTA80H,sBA7XA,SAAAh8H,GAGA,IAAAuO,EADAvO,EAAAmkI,gBAAA,GAIA51H,EADAvO,EAAAigG,SACAtmG,OAAAqG,EAAAuO,WAAAC,QAAA,WAEA7U,OAAAqG,EAAAuO,WAAAC,QAAA,OAGAxU,EAAAkJ,QAAAlD,EAAA0wF,cAAA,GAAA,SAAApjF,GAeA,IAdA,IAAA82H,EAAAzqI,OAAA2T,EAAAsjF,OACAyzC,EAAA1qI,OAAA2T,EAAAujF,KACAisC,EAAAsH,EAAAlnG,KAAA3uB,EAAA,QAEA+1H,EAAA3qI,OAAAyqI,GAAA31H,SAAAzO,EAAAsgG,UAAA,SACAikC,EACAD,EAAAlyG,OAAApyB,EAAAihI,YACAqD,EAAAjyG,SAAAryB,EAAA0gG,MAEA8jC,EAAA7qI,OAAA0qI,GAAA51H,SAAAzO,EAAAsgG,UAAA,SACAmkC,EACAD,EAAApyG,OAAApyB,EAAAihI,YACAuD,EAAAnyG,SAAAryB,EAAA0gG,MAEAvpF,EAAAotH,EAAAptH,EAAAstH,EAAAttH,IAEAnX,EAAAmkI,gBAAAhtH,EAAA,IAAA2lH,IAAA,KAkWAQ,gBAhfA,SAAAt9H,EAAAo8H,EAAAC,GAEA,IAAAr8H,EAAA0wF,aACA,OAAA,EAwBA,IArBA,IAWAg0C,EAXAh7D,EAAA0yD,EAAAU,SAAAT,EAAAS,UACAV,EAAAU,UAAAT,EAAAS,UACAV,EAAAl1H,SAAAm1H,EAAAn1H,SAEAy9H,GAAAj7D,EACA2yD,EACAD,GADAl1H,SAEA09H,GAAAl7D,EACA2yD,EACAD,GADAU,SAOA+H,IAJAn7D,EACA0yD,EACAC,GADAn1H,UAGAwiE,EACA0yD,EACAC,GADAS,UAGAgI,EAAAH,EAEAC,GAAAC,KAEAD,GAAA5kI,EAAA7B,QAAAd,SADA,CASA,IAJAqnI,EAAAE,EAAAC,EACA7kI,EAAAwC,KAAAnF,OACAg/H,EAAAn1H,SAEAy9H,GAAAD,GACA,CACA,IAAA1kI,EAAAmkI,gBAAAQ,EAAA,IAAAC,GACA,OAAA,EAGAD,GAAA,EAGAC,GAAA,EACAD,EAAA,EAGA,IAAA7pF,EAAA,GACA,OAAA96C,EAAA0gG,OAEA,KAAA,GACA5lD,EAAA,EACA,MACA,KAAA,GACAA,EAAA,EAIA,OAAA96C,EAAAu7H,eACA,KAAA,EACA,GAAAuJ,EAAAhqF,GAAA,EACA,OAAA,EAEA,MACA,KAAA,EACA,GAAAgqF,GAAA,EAAAhqF,IAAA,EACA,OAAA,EAEA,MACA,KAAA,EACA,GAAAgqF,GAAA,EAAAhqF,KAAAA,EACA,OAAA,EAEA,MACA,KAAA,EACA,GAAAgqF,EAAA9kI,EAAAq7H,gBAAA,EACA,OAAA,EAKA,OAAA,GA6ZAa,eA1ZA,SAAAh1H,EAAAlH,GACA,IAAA86C,EAAA,GACA,OAAA96C,EAAA0gG,OAEA,KAAA,GACA5lD,EAAA,EACA,MACA,KAAA,GACAA,EAAA,EAIA,OAAA96C,EAAAu7H,eAEA,KAAA,EACA,SAAAr0H,EAAA4zC,GAAA,EACA,KAAA,EACA,SAAA5zC,GAAA,EAAA4zC,IAAA,EACA,KAAA,EACA,UAAA5zC,EAAA4zC,IAAA,EAAAA,IAAA,EACA,KAAA,EACA,SAAA5zC,EAAAlH,EAAAq7H,gBAAA,EACA,QACA,OAAA,QAwYA7iI,QAAAC,OAAA,iBAEA0T,UAAA,aAAA,CAAA,WAAA,SAAA44H,GACA,MAAA,CACAx4H,SAAA,KACA+e,SAAA,EACAszB,YAAA,EACAh/C,MAAA,CACA84E,YAAA,KAEAh5E,SAAA,kDACAjC,WAAA,CAAA,SAAA,SAAAG,GACAA,EAAAonI,MAAA,GAEAvoI,KAAAwoI,QAAA,SAAAC,GACA,GAAA,EAAAtnI,EAAAonI,MAAA3nI,OACA,KAAA,oCAEA,OADAO,EAAAonI,MAAAjpI,KAAAmpI,GACAtnI,EAAAonI,MAAA3nI,UAGAqP,KAAA,SAAA9M,EAAA6kC,EAAA73B,EAAAC,EAAA+xC,GACA,IAAAumF,EAAA3sI,QAAAisC,QACA,6SAKAma,EAAAh/C,EAAAwlI,QAAA,SAAA7D,EAAA3hI,GACA6kC,EAAArB,OAAAm+F,KAGA,IAOA8D,EAPAC,EAAA1lI,EAAAolI,MAAA,GACAO,EAAA3lI,EAAAolI,MAAA,GACAQ,EAAA,YAAA5lI,EAAA84E,YACA+sD,EAAAH,EAAAI,SAAA,EACAC,EAAAJ,EAAAG,SAAA,EACAE,EAAAL,EAAAM,UAAA,IACAC,GAAA,EAEAC,EAAA,EACAnmI,EAAAomI,UAAA,EAIAV,EAAA35G,KAAAs6G,MAAAlB,EAAAI,EAAAJ,CAAAnlI,IAEA6mD,EAAAhiB,EAAA,GAAAyhG,wBAAA9lH,OAmEA,SAAA+lH,EAAAC,EAAAhmH,GAEA+kH,EAAAv8F,IAAA,MAAAw9F,EAAA,MACAd,EAAA35G,KAAAid,IAAA,SAAAw9F,EAAA,MACAb,EAAA55G,KAAAid,IAAA,MAAAw9F,EAAA,MAEAf,IAAAe,IACAf,EAAAe,EACAr5H,EAAA03B,GAAAk4C,SAEA/8E,EAAAwlI,QAAA7jI,WAAA,0BAMAwkI,EAHAK,GAAAhmH,EAAA+kH,EAAA/kH,SAAA,IACAxgB,EAAAomI,UAAA,EACAD,GACA3lH,EAAA,MAGAxgB,EAAAomI,UAAA,EACA,GAtFAG,EAAA1/E,EAAAm/E,EAAAn/E,GAEAhiB,EAAAt2B,KAAA,YAAA,SAAAk4H,GACA,IAEA3d,EAMA0d,EASA7nI,EAjBAunI,IAEApd,EAAAjkF,EAAA,GAAAyhG,wBACAE,EAAA,EAEAZ,GAEAplH,EAAAsoG,EAAA9qE,OAAA8qE,EAAAjrE,KACA2oF,EAAAC,EAAAC,QAAA5d,EAAAjrE,KAEAgoF,GACArlH,EAAAgmH,EAAAT,GAEAQ,EAAAC,EAAAhmH,KAIA7hB,EAAAmqH,EAAAxqE,MAAAwqE,EAAA1qE,MACAooF,EAAAC,EAAAE,QAAA7d,EAAA1qE,MAEAynF,GACAlnI,EAAA6nI,EAAAT,IAEAR,EAAAv8F,IAAA,OAAAw9F,EAAA,MACAd,EAAA35G,KAAAid,IAAA,QAAAw9F,EAAA,MACAb,EAAA55G,KAAAid,IAAA,OAAAw9F,EAAA,WAIAjB,EAAAh3H,KAAA,YAAA,SAAAk4H,GACAA,EAAArrF,iBACA8qF,GAAA,IAGAttI,QAAAisC,QAAAqX,GAAA3tC,KAAA,UAAA,SAAAk4H,GACAP,GAAA,IAGAlmI,EAAA4mI,aAAA,WACA,IAAA9d,EAAAjkF,EAAA,GAAAyhG,wBAEAV,GAIAW,EAHAJ,EACArd,EAAA9qE,OAAA8qE,EAAAjrE,MAMA79C,EAAA6mI,eAAA,WACA,IAAA/d,EAAAjkF,EAAA,GAAAyhG,wBACAE,EAAA,EAEAZ,IAEAY,GADAhmH,EAAAsoG,EAAA9qE,OAAA8qE,EAAAjrE,KACA0nF,EAAA/kH,SAEA2lH,EAAAT,EAAA35G,KAAAvL,SAEA+lH,EAAAC,EAAAhmH,UA8BAjU,UAAA,SAAA,WACA,MAAA,CACAI,SAAA,KACAC,QAAA,cACA8e,SAAA,EACAszB,YAAA,EACAh/C,MAAA,CACA8lI,QAAA,IACAG,SAAA,KAEAnmI,SACA,0CACAgN,KAAA,SAAA9M,EAAA6kC,EAAA73B,EAAA85H,EAAA9nF,GACAh/C,EAAA+rB,KAAA8Y,EACA7kC,EAAAmM,MAAA26H,EAAAzB,QAAArlI,GAEAg/C,EAAAh/C,EAAAwlI,QAAA,SAAA7D,EAAA3hI,GACA6kC,EAAArB,OAAAm+F,SA75EA,EAm6EArhH,OAAA47B,WCn6EA,wBAIAtjD,QAAAC,OAAA,iBAAAC,IAAA,CAAA,iBAAA,SAAAiuI,GAEAA,EAAAx3D,IAAA,qDAAA,8JAKA32E,QAAAC,OAAA,iBAAAC,IAAA,CAAA,iBAAA,SAAAiuI,GAEAA,EAAAx3D,IAAA,uDAAA,2LAKA32E,QAAAC,OAAA,iBAAAC,IAAA,CAAA,iBAAA,SAAAiuI,GAEAA,EAAAx3D,IAAA,+CAAA,kRAKA32E,QAAAC,OAAA,iBAAAC,IAAA,CAAA,iBAAA,SAAAiuI,GAEAA,EAAAx3D,IAAA,4CAAA,2LAKA32E,QAAAC,OAAA,iBAAAC,IAAA,CAAA,iBAAA,SAAAiuI,GAEAA,EAAAx3D,IAAA,wDAAA,0nBAKA32E,QAAAC,OAAA,iBAAAC,IAAA,CAAA,iBAAA,SAAAiuI,GAEAA,EAAAx3D,IAAA,uEAAA,2lCAKA32E,QAAAC,OAAA,iBAAAC,IAAA,CAAA,iBAAA,SAAAiuI,GAEAA,EAAAx3D,IAAA,qEAAA,8RAKA32E,QAAAC,OAAA,iBAAAC,IAAA,CAAA,iBAAA,SAAAiuI,GAEAA,EAAAx3D,IAAA,yEAAA,2iDAKA32E,QAAAC,OAAA,iBAAAC,IAAA,CAAA,iBAAA,SAAAiuI,GAEAA,EAAAx3D,IAAA,uEAAA,isCAKA32E,QAAAC,OAAA,iBAAAC,IAAA,CAAA,iBAAA,SAAAiuI,GAEAA,EAAAx3D,IAAA,wEAAA,42BAKA32E,QAAAC,OAAA,iBAAAC,IAAA,CAAA,iBAAA,SAAAiuI,GAEAA,EAAAx3D,IAAA,sEAAA,0xCAKA32E,QAAAC,OAAA,iBAAAC,IAAA,CAAA,iBAAA,SAAAiuI,GAEAA,EAAAx3D,IAAA,wEAAA,4hBAKA32E,QAAAC,OAAA,iBAAAC,IAAA,CAAA,iBAAA,SAAAiuI,GAEAA,EAAAx3D,IAAA,sEAAA,gtBAKA32E,QAAAC,OAAA,iBAAAC,IAAA,CAAA,iBAAA,SAAAiuI,GAEAA,EAAAx3D,IAAA,uDAAA,s1EAKA32E,QAAAC,OAAA,iBAAAC,IAAA,CAAA,iBAAA,SAAAiuI,GAEAA,EAAAx3D,IAAA,oDAAA,u4CAKA32E,QAAAC,OAAA,iBAAAC,IAAA,CAAA,iBAAA,SAAAiuI,GAEAA,EAAAx3D,IAAA,4CAAA,47JA/GA,EA+HAjvD,OAAA47B","file":"../admin-admin-app.min.js","sourcesContent":["//'use strict';\n\n//$(document).bind('touchmove', false);\n\n\nvar wbApp = angular.module('wbApp', [\n 'ngAnimate',\n 'mgcrea.ngStrap',\n 'pascalprecht.translate',\n 'ngRoute',\n 'ngResource', \n 'ngSanitize',\n 'wb.directives', \n //'http-auth-interceptor',\n 'services.breadcrumbs',\n 'textAngular',\n //'authDirectives',\n 'angulartics',\n 'angulartics.google.analytics',\n 'googlechart',\n 'LocalStorageModule',\n 'WBGrid',\n 'ngImgCrop',\n 'angular-loading-bar',\n 'uiGmapgoogle-maps',\n 'jkuri.gallery',\n 'dx'\n]).run(['$rootScope', '$translate', function ($rootScope, $translate) {\n $rootScope.$on(\"$routeChangeSuccess\", function (event, currentRoute, previousRoute) {\n $rootScope.title = $translate.instant(currentRoute.label);\n });\n}]);\n\nwbApp.config(['$logProvider',\n function ($logProvider) {\n $logProvider.debugEnabled(true);\n}]);\n\nwbApp.config(['$datepickerProvider', function ($datepickerProvider) {\n angular.extend($datepickerProvider.defaults, {\n startWeek: 1,\n autoclose: true,\n container: 'body',\n useNative: true,\n dateFormat: 'd.M.yyyy'\n });\n}]);\n\n\nwbApp.config(['$timepickerProvider', function ($timepicketProvider) {\n angular.extend($timepicketProvider.defaults, {\n autoclose: true,\n //container: 'body',\n useNative: true, \n timeFormat: 'H:mm'\n });\n}]);\n\nwbApp.config(['$modalProvider', function ($modalProvider) {\n angular.extend($modalProvider.defaults, {\n animation: 'am-fade-and-slide-top',\n placement: 'center',\n backdrop: 'static',\n });\n}]);\n\nwbApp.config(['$popoverProvider', function($popoverProvider) {\n angular.extend($popoverProvider.defaults, {\n container: 'body',\n html: true\n });\n}]);\n\nwbApp.config(['localStorageServiceProvider', function (localStorageServiceProvider) {\n localStorageServiceProvider.setPrefix('wbAppNgAdmin');\n localStorageServiceProvider.setStorageType('localStorage');\n localStorageServiceProvider.setNotify(true, true);\n}]);\n\n\n//var regexIso8601 = /^(\\d{4}|\\+\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2}):(\\d{2})(Z|([\\-+])(\\d{2}):(\\d{2}))?)?)?)?$/;\n//var regexIso8601 = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(Z|([\\-+])(\\d{2}):(\\d{2}))?$/;\n\nfunction convertDateStringsToDates(input) {\n // Ignore things that aren't objects.\n if (typeof input !== \"object\") return input;\n\n for (var key in input) {\n if (!input.hasOwnProperty(key)) continue;\n\n var value = input[key];\n // var match;\n // Check for string properties which look like dates.\n if (typeof value === \"string\" && isNaN(value)) {\n var date = moment(value, moment.ISO_8601);\n if (date.isValid()) {\n input[key] = date.toDate();\n }\n } else if (typeof value === \"object\") {\n // Recurse into object\n convertDateStringsToDates(value);\n }\n }\n}\n\n// If the property is Date and property name ends with Utc than it converts from local to Utc and appends Z to resulting string\nfunction convertDatesToDateString(input) {\n\n return _.cloneDeepWith(input, function (value, key) {\n if (value instanceof Date) {\n var date = moment(value);\n if (date.isValid()) {\n if (isNaN(key) && key.endsWith('Utc')) {\n return date.utc().format();\n } else {\n return date.format('YYYY-MM-DDTHH:mm:ss');\n }\n }\n }\n });\n}\n\nwbApp.config([\"$httpProvider\", function ($httpProvider) {\n $httpProvider.defaults.transformResponse.push(function (data, headerGetter) {\n convertDateStringsToDates(data);\n return data;\n });\n\n $httpProvider.defaults.transformRequest.push(function (data, header) {\n return data;\n });\n}]);\n\n\nwbApp.config(['$translateProvider', function ($translateProvider) {\n $translateProvider\n .useSanitizeValueStrategy(null);\n $translateProvider\n .preferredLanguage('en');\n}]);\n\n\n// Strip the timezone\nDate.prototype.toISOString = function () {\n return moment(this).format('YYYY-MM-DDTHH:mm:ss');\n};\n\nwbApp.constant('tenantInfo', tenantInfo);\nwbApp.constant('preferredLanguage', preferredLanguage);\n\nwbApp.config(['uiGmapGoogleMapApiProvider', function (uiGmapGoogleMapApiProvider) {\n uiGmapGoogleMapApiProvider.configure({\n key: 'AIzaSyDgac1ahn5_WNYnb1b0TgRf7Q_JhM3ZRQc',\n v: '3.20', //defaults to latest 3.X anyhow\n libraries: 'weather,geometry,visualization'\n });\n}]);\n\n\nNumber.prototype.pad = function (size) {\n var s = String(this);\n while (s.length < (size || 2)) { s = \"0\" + s; }\n return s;\n}\n\n\n","'use strict';\r\n\r\nwbApp.config(['$routeProvider',\r\n function ($routeProvider) {\r\n $routeProvider.\r\n when('/dashboard', {\r\n templateUrl: 'dashboard/dashboard.html',\r\n controller: 'DashboardCtrl',\r\n label: 'TXT_MENU_DASHBOARD'\r\n })\r\n .when('/preview-hours/state-codes', {\r\n templateUrl: 'preview-hours/state-codes.html',\r\n controller: 'StateCodesCtrl',\r\n label: 'TXT_MENU_PREVIEW_HOURS_STATE_CODES'\r\n })\r\n .when('/preview-hours/preview-hours', {\r\n templateUrl: 'preview-hours/preview-hours.html',\r\n controller: 'PreviewHoursCtrl',\r\n label: 'TXT_MENU_PREVIEW_HOURS_PREVIEW_HOURS'\r\n })\r\n .when('/preview-hours/preview-interest', {\r\n templateUrl: 'preview-hours/preview-interest.html',\r\n controller: 'PreviewInterestCtrl',\r\n label: 'TXT_MENU_PREVIEW_HOURS_PREVIEW_INTEREST'\r\n })\r\n .when('/reservations/domains', {\r\n templateUrl: 'reservations/domains.html',\r\n controller: 'DomainsCtrl',\r\n label: 'TXT_MENU_RESERVATIONS_DOMAINS'\r\n })\r\n .when('/reservations/schedule', {\r\n templateUrl: 'reservations/reservations-schedule.html',\r\n controller: 'ReservationSchedulesCtrl',\r\n label: 'TXT_MENU_RESERVATIONS_RESERVATIONS_SCHEDULE'\r\n })\r\n .when('/rents/item-types', {\r\n templateUrl: 'rents/item-type/item-type.html',\r\n controller: 'ItemTypesCtrl',\r\n label: 'TXT_MENU_RENTS_ITEM_TYPES'\r\n })\r\n .when('/rents/rent-category-groups', {\r\n templateUrl: 'rents/rent-category-group/rent-category-group.html',\r\n controller: 'RentCategoryGroupsCtrl',\r\n label: 'TXT_MENU_RENTS_RENT_CATEGORY_GROUPS'\r\n })\r\n .when('/rents/rent-categories', {\r\n templateUrl: 'rents/rent-category/rent-category.html',\r\n controller: 'RentCategoriesCtrl',\r\n label: 'TXT_MENU_RENTS_RENT_CATEGORIES'\r\n })\r\n .when('/rents/rent-items', {\r\n templateUrl: 'rents/rent-item/rent-item.html',\r\n controller: 'RentItemsCtrl',\r\n label: 'TXT_MENU_RENTS_RENT_ITEMS'\r\n })\r\n .when('/rents/rents', {\r\n templateUrl: 'rents/rent/rent.html',\r\n controller: 'RentsCtrl',\r\n label: 'TXT_MENU_RENTS_RENTS'\r\n })\r\n .when('/crm/forms', {\r\n templateUrl: 'forms/forms.html',\r\n controller: 'FormsCtrl',\r\n label: 'TXT_MENU_CRM_FORMS'\r\n })\r\n .when('/crm/leads', {\r\n templateUrl: 'leads/leads.html',\r\n controller: 'LeadsCtrl',\r\n label: 'TXT_MENU_CRM_LEADS'\r\n })\r\n .when('/crm/levels', {\r\n templateUrl: 'levels/levels.html',\r\n controller: 'LevelsCtrl',\r\n label: 'TXT_MENU_CRM_LEVELS'\r\n })\r\n .when('/crm/phases', {\r\n templateUrl: 'phases/phases.html',\r\n controller: 'PhasesCtrl',\r\n label: 'TXT_MENU_CRM_PHASES'\r\n })\r\n .when('/users/users', {\r\n templateUrl: 'users/users.html',\r\n controller: 'UsersCtrl',\r\n label: 'TXT_MENU_USERS'\r\n })\r\n .when('/users/user-roles', {\r\n templateUrl: 'users/user-roles.html',\r\n controller: 'UserRolesCtrl',\r\n label: 'TXT_MENU_USERS_USER_ROLES'\r\n })\r\n .when('/users/reference-source', {\r\n templateUrl: 'users/reference-source.html',\r\n controller: 'ReferenceSourceCtrl',\r\n label: 'TXT_MENU_USERS_REFERENCE_SOURCE'\r\n })\r\n .when('/users/employees', {\r\n templateUrl: 'users/employees/employees.html',\r\n controller: 'EmployeesCtrl',\r\n label: 'TXT_MENU_USERS_EMPLOYEES'\r\n })\r\n .when('/users/students', {\r\n templateUrl: 'users/students/students.html',\r\n controller: 'StudentsCtrl',\r\n label: 'TXT_MENU_USERS_STUDENTS'\r\n })\r\n .when('/users/users-consents', {\r\n templateUrl: 'users/users-consents/users-consents.html',\r\n controller: 'UsersConsentsCtrl',\r\n label: 'TXT_MENU_USERS_USERS_CONSENTS'\r\n })\r\n .when('/promo/membership', {\r\n templateUrl: 'promo/membership.html',\r\n controller: 'MembershipCtrl',\r\n label: 'TXT_MENU_PROMO_MEMBERSHIP'\r\n })\r\n .when('/activities/activities', {\r\n templateUrl: 'activities/activities.html',\r\n controller: 'ActivitiesCtrl',\r\n label: 'TXT_MENU_ACTIVITIES_ACTIVITIES'\r\n })\r\n .when('/activities/activity-schedules', {\r\n templateUrl: 'activities/activity-schedule.html',\r\n controller: 'ActivitySchedulesCtrl',\r\n label: 'TXT_MENU_ACTIVITIES_ACTIVITY_SCHEDULES'\r\n })\r\n .when('/activities/activity-reconciliation', {\r\n templateUrl: 'activities/activity-reconciliation.html',\r\n controller: 'ActivityReconciliationCtrl',\r\n label: 'TXT_MENU_ACTIVITIES_ACTIVITY_RECONCILIATION'\r\n })\r\n .when('/activities/activity-tariffs', {\r\n templateUrl: 'activities/activity-tariffs/activity-tariffs.html',\r\n controller: 'ActivityTariffCtrl',\r\n label: 'TXT_MENU_ACTIVITIES_ACTIVITY_TARIFFS'\r\n })\r\n .when('/activities/cz-ms-mt-registry', {\r\n templateUrl: 'cz-ms-mt-registry/cz-ms-mt-registry.html',\r\n controller: 'CzMsMtRegistryCtrl',\r\n label: 'TXT_MENU_ACTIVITIES_CZ_MS_MT_REGISTRY'\r\n }) \r\n .when('/activities/contracts', {\r\n templateUrl: 'activities/contracts/contract.html',\r\n controller: 'ContractsCtrl',\r\n label: 'TXT_MENU_ACTIVITIES_CONTRACTS'\r\n })\r\n .when('/activities/contract-templates', {\r\n templateUrl: 'activities/contract-templates/contract-template.html',\r\n controller: 'ContractTemplatesCtrl',\r\n label: 'TXT_MENU_ACTIVITIES_CONTRACT_TEMPLATES'\r\n })\r\n .when('/messages/email', {\r\n templateUrl: 'messages/email.html',\r\n controller: 'EmailCtrl',\r\n label: 'TXT_MENU_MESSAGES_EMAIL'\r\n })\r\n .when('/messages/sent-emails', {\r\n templateUrl: 'messages/sent-emails.html',\r\n controller: 'SentEmailsCtrl',\r\n label: 'TXT_MENU_SENT_EMAILS'\r\n })\r\n .when('/messages/email-templates', {\r\n templateUrl: 'messages/email-templates.html',\r\n controller: 'EmailTemplatesCtrl',\r\n label: 'TXT_MENU_MESSAGES_EMAIL_TEMPLATES'\r\n })\r\n .when('/messages/sms', {\r\n templateUrl: 'messages/sms.html',\r\n controller: 'SmsCtrl',\r\n label: 'TXT_MENU_MESSAGES_SMS'\r\n })\r\n .when('/courses/subjects', {\r\n templateUrl: 'courses/subjects.html',\r\n controller: 'SubjectsCtrl',\r\n label: 'TXT_MENU_COURSES_SUBJECTS'\r\n })\r\n .when('/courses/courses', {\r\n templateUrl: 'courses/courses/courses.html',\r\n controller: 'CoursesCtrl',\r\n label: 'TXT_MENU_COURSES_COURSES'\r\n })\r\n .when('/courses/online-meetings', {\r\n templateUrl: 'courses/online-meetings/online-meetings.html',\r\n controller: 'OnlineMeetingsCtrl',\r\n label: 'TXT_MENU_COURSES_ONLINE_MEETINGS'\r\n })\r\n .when('/finance/payments', {\r\n templateUrl: 'finance/payments/payments.html',\r\n controller: 'PaymentsCtrl',\r\n label: 'TXT_MENU_FINANCE_PAYMENTS'\r\n })\r\n .when('/finance/due-payments', {\r\n templateUrl: 'finance/due-payments/due-payments.html',\r\n controller: 'DuePaymentsCtrl',\r\n label: 'TXT_MENU_FINANCE_DUE_PAYMENTS'\r\n })\r\n .when('/finance/invoices', {\r\n templateUrl: 'finance/invoices/invoices.html',\r\n controller: 'InvoicesCtrl',\r\n label: 'TXT_MENU_FINANCE_INVOICES'\r\n })\r\n .when('/finance/bank', {\r\n templateUrl: 'finance/bank/bank.html',\r\n controller: 'BankCtrl',\r\n label: 'TXT_MENU_FINANCE_BANK'\r\n })\r\n .when('/finance/accounting-books', {\r\n templateUrl: 'finance/accounting-books/accounting-books.html',\r\n controller: 'AccountingBookCtrl',\r\n label: 'TXT_MENU_FINANCE_ACCOUNTING_BOOKS'\r\n })\r\n .when('/finance/accounting-books/:id', {\r\n templateUrl: 'finance/accounting-books/accounting-books.html',\r\n controller: 'AccountingBookCtrl',\r\n // label: 'TXT_MENU_FINANCE_ACCOUNTING_BOOKS'\r\n }) \r\n .when('/finance/accounting-books/:id/tab/:tabId', {\r\n templateUrl: 'finance/accounting-books/accounting-books.html',\r\n controller: 'AccountingBookCtrl',\r\n // label: 'TXT_MENU_FINANCE_ACCOUNTING_BOOKS'\r\n })\r\n .when('/finance/compensations', {\r\n templateUrl: 'finance/compensations/compensations.html',\r\n controller: 'CompensationsCtrl',\r\n label: 'TXT_MENU_FINANCE_COMPENSATIONS'\r\n })\r\n .when('/finance/online-payment-configurations', {\r\n templateUrl: 'finance/online-payment-configurations/online-payment-configurations.html',\r\n controller: 'OnlinePaymentConfigurationCtrl',\r\n label: 'TXT_MENU_FINANCE_ONLINE_PAYMENT_CONFIGURATION'\r\n })\r\n .when('/finance/online-payments', {\r\n templateUrl: 'finance/online-payments/online-payments.html',\r\n controller: 'OnlinePaymentsCtrl',\r\n label: 'TXT_MENU_FINANCE_ONLINE_PAYMENTS'\r\n })\r\n .when('/finance/tax-documents', {\r\n templateUrl: 'finance/tax-documents/tax-documents.html',\r\n controller: 'TaxDocumentsCtrl',\r\n label: 'TXT_MENU_FINANCE_TAX_DOCUMENTS'\r\n })\r\n .when('/storage/protected-storage', {\r\n templateUrl: 'storage/protected-storage/protected-storage.html',\r\n controller: 'ProtectedStorageCtrl',\r\n label: 'TXT_MENU_STORAGE_PROTECTED_STORAGE'\r\n })\r\n .when('/storage/pictures', {\r\n templateUrl: 'storage/pictures/pictures.html',\r\n controller: 'PicturesCtrl',\r\n label: 'TXT_MENU_STORAGE_PICTURES'\r\n })\r\n .when('/survey/surveys', {\r\n templateUrl: 'survey/surveys.html',\r\n controller: 'SurveysCtrl',\r\n label: 'TXT_MENU_SURVEYS_SURVEY'\r\n })\r\n .when('/reports/registeredAttendance', {\r\n templateUrl: 'reports/registered-attendance.html',\r\n controller: 'RegisteredAttendanceCtrl',\r\n label: 'TXT_MENU_DASHBOARD_REGISTERED_ATTENDANCE'\r\n })\r\n .when('/reports/franchise-attendance-summary', {\r\n templateUrl: 'reports/franchise-attendance-summary.html',\r\n controller: 'FranchiseAttendanceSummaryCtrl',\r\n label: 'TXT_MENU_REPORTS_FRANCHISE_ATTENDANCE_SUMMARY'\r\n })\r\n .when('/reports/registrations-summary', {\r\n templateUrl: 'reports/registrations-summary.html',\r\n controller: 'RegistrationsSummaryCtrl',\r\n label: 'TXT_MENU_REPORTS_REGISTRATIONS_SUMMARY'\r\n })\r\n .when('/reports/one-offs-summary', {\r\n templateUrl: 'reports/one-offs-summary.html',\r\n controller: 'OneOffsSummaryCtrl',\r\n label: 'TXT_MENU_REPORTS_ONE_OFFS_SUMMARY'\r\n })\r\n .when('/reports/course-student-fluctuation', {\r\n templateUrl: 'reports/course-student-fluctuation.html',\r\n controller: 'CourseStudentFluctuationCtrl',\r\n label: 'TXT_MENU_REPORTS_COURSE_STUDENT_FLUCTUATION'\r\n })\r\n .when('/reports/courses-attendance-summary', {\r\n templateUrl: 'reports/courses-attendance-summary.html',\r\n controller: 'CoursesAttendanceSummaryCtrl',\r\n label: 'TXT_MENU_REPORTS_COURSES_ATTENDANCE_SUMMARY'\r\n })\r\n .when('/setting/semesters', {\r\n templateUrl: 'setting/semesters/semesters.html',\r\n controller: 'SemestersCtrl',\r\n label: 'TXT_MENU_SETTING_SEMESTERS'\r\n })\r\n .when('/setting/classrooms', {\r\n templateUrl: 'setting/classrooms/classrooms.html',\r\n controller: 'ClassroomsCtrl',\r\n label: 'TXT_MENU_SETTING_CLASSROOMS'\r\n })\r\n .when('/setting/courseTypes', {\r\n templateUrl: 'setting/course-types/course-types.html',\r\n controller: 'CourseTypesCtrl',\r\n label: 'TXT_MENU_SETTING_COURSE_TYPES'\r\n })\r\n .when('/setting/compensation-groups', {\r\n templateUrl: 'setting/compensation-groups/compensation-groups.html',\r\n controller: 'CompensationGroupsCtrl',\r\n label: 'TXT_MENU_SETTING_COMPENSATION_GROUPS'\r\n })\r\n .when('/users/groups', {\r\n templateUrl: 'users/groups/groups.html',\r\n controller: 'GroupsCtrl',\r\n label: 'TXT_MENU_SETTING_GROUPS'\r\n })\r\n .when('/setting/age-ranges', {\r\n templateUrl: 'setting/age-ranges/age-ranges.html',\r\n controller: 'AgeRangesCtrl',\r\n label: 'TXT_MENU_SETTING_AGE_RANGES'\r\n })\r\n .when('/setting/holiday-calendars', {\r\n templateUrl: 'setting/holiday-calendars/holiday-calendars.html',\r\n controller: 'HolidayCalendarsCtrl',\r\n label: 'TXT_MENU_SETTING_HOLIDAY_CALENDARS'\r\n })\r\n .when('/setting/terminals', {\r\n templateUrl: 'setting/terminals/terminals.html',\r\n controller: 'TerminalsCtrl',\r\n label: 'TXT_MENU_SETTING_TERMINALS'\r\n })\r\n .when('/setting/news', {\r\n templateUrl: 'setting/news/news.html',\r\n controller: 'NewsCtrl',\r\n label: 'TXT_MENU_SETTING_NEWS'\r\n }) \r\n .when('/franchise/franchises', {\r\n templateUrl: 'franchise/franchises/franchises.html',\r\n controller: 'FranchisesCtrl',\r\n label: 'TXT_MENU_FRANCHISE_FRANCHISES'\r\n })\r\n .when('/franchise/franchises-attendance-summary', {\r\n templateUrl: 'franchise/franchises/franchises-attendance-summary.html',\r\n controller: 'FranchisesAttendanceSummaryCtrl',\r\n label: 'TXT_MENU_FRANCHISE_FRANCHISES_ATTENDANCE_SUMMARY'\r\n })\r\n .when('/rfid-cards/rfid-card-log', {\r\n templateUrl: 'rfid-cards/attendance-log/attendance-log.html',\r\n controller: 'AttendanceLogCtrl',\r\n label: 'TXT_MENU_RFID_CARD_LOG_RFID_CARD_LOG'\r\n })\r\n .when('/rfid-cards/rfid-card-log-upload-contact', {\r\n templateUrl: 'rfid-cards/log-upload-contact/log-upload-contact.html',\r\n controller: 'LogUploadContactCtrl',\r\n label: 'TXT_MENU_RFID_CARD_LOG_RFID_CARD_LOG_UPLOAD_CONTACT'\r\n })\r\n .when('/rfid-cards/device-registration', {\r\n templateUrl: 'rfid-cards/device-registration/device-registration.html',\r\n controller: 'DeviceRegistrationCtrl',\r\n label: 'TXT_MENU_RFID_CARD_LOG_TXT_MENU_RFID_CARD_LOG_DEVICE_REGISTRATION'\r\n })\r\n .when('/system/settings', {\r\n templateUrl: 'system/settings/settings.html',\r\n controller: 'SettingsCtrl',\r\n label: 'TXT_MENU_SYSTEM_SETTINGS'\r\n })\r\n .when('/system/sms-history', {\r\n templateUrl: 'system/sms-history/sms-history.html',\r\n controller: 'SmsHistoryCtrl',\r\n label: 'TXT_MENU_SYSTEM_SMS_HISTORY'\r\n })\r\n .when('/system/data-export-history', {\r\n templateUrl: 'system/data-export-history/data-export-history.html',\r\n controller: 'DataExportHistoryCtrl',\r\n label: 'TXT_MENU_SYSTEM_DATA_EXPORT_HISTORY'\r\n })\r\n .when('/actions/action-categories', {\r\n templateUrl: 'actions/action-categories.html',\r\n controller: 'ActionCategoriesCtrl',\r\n label: 'TXT_MENU_ACTIONS_ACTION_CATEGORIES'\r\n })\r\n .when('/actions/actions', {\r\n templateUrl: 'actions/actions/actions.html',\r\n controller: 'ActionsCtrl',\r\n label: 'TXT_MENU_ACTIONS_ACTIONS'\r\n })\r\n .when('/schedule/schedule', {\r\n templateUrl: 'schedule/schedule.html',\r\n controller: 'ScheduleCtrl',\r\n label: 'TXT_MENU_SCHEDULE_SCHEDULE'\r\n })\r\n .otherwise({\r\n redirectTo: '/dashboard'\r\n });\r\n }]);\r\n\r\n","wbApp.controller('ActionCategoriesCtrl', ['$scope', '$modal', '$translate', 'subjectsSvc', 'tenantInfo',\nfunction ($scope, $modal, $translate, subjectsSvc, tenantInfo) {\n\n $scope.gridSettings = {\n columns: [\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '270px', sortOrder: 'asc' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string' },\n ]\n }\n\n function setSelectedActionCategory(actionCategory) {\n $scope.selectedActionCategory = actionCategory;\n }\n\n $scope.$on('refreshData', function (e, data) {\n $scope.actionCategories = subjectsSvc.getAllForActionsAsync(true);\n setSelectedActionCategory(null);\n });\n\n $scope.actionCategories = subjectsSvc.getAllForActionsAsync(true);\n\n $scope.ActionCategory = {};\n\n $scope.onRowSelected = function (data) {\n setSelectedActionCategory(data);\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = subjectsSvc.createNew(2);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n subjectsSvc.remove(data);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"actions/action-categories-detail-tabs/detail.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'actions/action-categories-detail.html',\n show: false, \n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('ActionCategoriesDetailCtrl', ['$scope', 'subjectsSvc', 'tenantInfo', 'tenantSettingSvc',\nfunction ($scope, subjectsSvc, tenantInfo, tenantSettingSvc) {\n\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\n \n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (!data.id) {\n subjectsSvc.insert(data, success, error);\n } else {\n subjectsSvc.update(data, success, error);\n }\n\n function success() {\n $scope.$hide();\n }\n\n function error(data) {\n $scope.detailError = data;\n $scope.isSaving = false;\n }\n }\n}]);\n","wbApp.controller('ActionsCtrl', ['$scope', '$modal', '$translate', 'semesterSvc', 'courseSvc', 'securitySvc', 'tenantSettingSvc', 'courseRegistrationSvc',\nfunction ($scope, $modal, $translate, semesterSvc, courseSvc, securitySvc, tenantSettingSvc, courseRegistrationSvc) {\n\n $scope.isInAccountingBookRole = securitySvc.isInRole('AccountingBook');\n $scope.filteredActions = [];\n\n function setSelectedAction(action, refresh) {\n $scope.selectedAction = action;\n\n if (!action && !!$scope.gridSettings.gridInstance) {\r\n $scope.gridSettings.gridInstance.clearSelection();\r\n }\n\n $scope.$broadcast('selectedActionChanged', { action: action, refresh: !!refresh });\n\n }\n\n semesterSvc.getDefaultAsync()\n .then(function (semester) {\n $scope.semesterID = semester.id;\n\n $scope.actions = courseSvc.getAllActionsAsync($scope.semesterID, true);\n $scope.filteredActions = $scope.actions;\n setSelectedAction(null);\n });\n\n $scope.$on('refreshData', function (e, data) {\n if ($scope.semesterID) {\n $scope.actions = courseSvc.getAllActionsAsync($scope.semesterID, true);\n $scope.filteredActions = $scope.actions;\n setSelectedAction(null);\n }\n });\n\n $scope.$on('onActionShouldRefresh', function (e, data) {\n courseSvc.refreshActionRecord($scope.semesterID, data.action.courseID, $scope.actions, function () {\n if ($scope.selectedAction.courseID === data.action.courseID) {\n setSelectedAction(data.action, true);\n if ($scope.gridSettings.gridInstance) {\r\n $scope.gridSettings.gridInstance.selectRows(data.action, false);\r\n }\n }\n });\n });\n\n $scope.getSemesterPercentFilled = function () {\n return ($scope.getSemesterFilled() / $scope.getSemesterCapacity()) * 100;\n }\n\n $scope.getSemesterFilled = function () {\n if (!!$scope.filteredActions) {\n return _.sumBy($scope.filteredActions, 'filled');\n }\n return 0;\n }\n\n $scope.getSemesterCapacity = function () {\n if (!!$scope.filteredActions) {\n return _.sumBy($scope.filteredActions, 'capacity');\n }\n return 100;\n }\n\n $scope.onFilterApplied = function (rows) {\n $scope.filteredActions = rows;\n }\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n $scope.actions = courseSvc.getAllActionsAsync($scope.semesterID, true);\n }\n setSelectedAction(null);\n }\n\n $scope.gridSettings = {\n name: 'actions',\n columns: [\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '170px' },\n { dataField: 'abbreviation', caption: $translate.instant(\"TXT_LBL_ABBREVIATION\"), dataType: 'string', width: '130px' },\n { dataField: 'subjectName', caption: $translate.instant('TXT_LBL_ACTION_CATEGORY'), dataType: 'string', sortOrder: 'asc' },\n { dataField: 'firstLesson', caption: $translate.instant('TXT_MENU_SCHEDULE'), dataType: 'date', format: { raw: \"EEE - dd.MM. HH:mm\" }, width: '140px' },\n { dataField: 'teacher', caption: $translate.instant('TXT_LBL_EMPLOYEE'), dataType: 'string', width: '170px' },\n { dataField: 'capacity', caption: $translate.instant('TXT_LBL_CAPACITY'), dataType: 'number', width: '70px' },\n { dataField: 'filled', caption: $translate.instant('TXT_LBL_FILLED'), dataType: 'number', width: '80px' },\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format:'currency', precision: 2, width: '100px' },\n { dataField: 'allowRegistration', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\n ],\r\n customCommands: [{\r\n text: $translate.instant('TXT_MENU_RESEND_COURSE_REGISTRATION_NOTIFICATION'),\r\n isVisible: function () { return securitySvc.isInRole('CourseRegistration'); },\r\n callback: function (data) { onResendCourseRegistrationNotification(data.courseID); }\r\n }]\n }\n\n function onResendCourseRegistrationNotification(courseID) {\r\n var courseRegistrations = courseRegistrationSvc.getAllForCourse(courseID);\r\n courseRegistrations.$promise.then(function (data) {\r\n _.forEach(data, function (courseRegistration) {\r\n courseRegistrationSvc.sendRegistrationNotification(courseRegistration.courseRegistrationID);\r\n });\r\n });\r\n }\n \n $scope.selectedAction = {};\n\n $scope.onRowSelected = function (data) {\n $scope.selectedAction = data;\n setSelectedAction($scope.selectedAction);\n }\n\n $scope.onRowCopy = function (data) {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.collection = $scope.actions;\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.model.courseID = 0; \n detailDialogPromise.show();\r\n });\r\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.collection = $scope.actions;\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onActionSave = function (model) {\n setSelectedAction(model, true);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.collection = $scope.actions;\n detailDialogPromise.$scope.model = courseSvc.createNew($scope.semesterID, true); \n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n courseSvc.remove(data, $scope.actions, function () {\n $scope.selectedAction = null;\n setSelectedAction(null);\n });\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"actions/actions/actions-detail-tabs/detail.html\"\n }, {\n title: 'TXT_LBL_STUDENTS',\n template: 'actions/actions/actions-detail-tabs/students.html'\n }, {\n title: 'TXT_MENU_SCHEDULE',\n template: 'actions/actions/actions-detail-tabs/schedule.html'\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n\n var detailDialogPromise = $modal({\n templateUrl: 'actions/actions/detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('ActionsDetailCtrl', ['$scope', '$modal', 'courseSvc', 'tenantSettingSvc',\nfunction ($scope, $modal, courseSvc, tenantSettingSvc) {\n\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\n \n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (!data.courseID) {\n courseSvc.insert(data, $scope.collection, success, error);\n } else {\n courseSvc.update(data, $scope.collection, success, error);\n }\n\n function success(model) {\n $scope.$hide();\n if (!!$scope.onCourseSave) {\n $scope.onCourseSave(model);\n }\n }\n\n function error(data) {\n $scope.detailError = data;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"actions/actions/detail-main-tab.html\"\n }, {\n title: 'TXT_PRICE_TAB',\n template: \"actions/actions/detail-price-tab.html\"\n }, {\n title: 'TXT_LBL_SETTING',\n template: \"actions/actions/detail-settings-tab.html\"\n }, {\n title: 'TXT_LBL_DESCRIPTION',\n template: \"actions/actions/detail-description-tab.html\"\n }, {\n title: 'TXT_LBL_PICTURES',\n template: \"actions/actions/detail-pictures-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.onDeletePictureBtnClick = function (picture) {\n _.remove($scope.model.pictures || [], { imageUri: picture.imageUri });\n }\n\n $scope.showPictureSelect = function () {\n picturesSelectDlgPromise.$promise.then(function () {\n picturesSelectDlgPromise.$scope.onPicturesSelected = function (pictures) {\n\n if (!$scope.model.pictures) {\n $scope.model.pictures = [];\n }\n\n angular.forEach(pictures, function (p) {\n if (!_.find($scope.model.pictures, { imageUri: p.imageUri })) {\n $scope.model.pictures.push(p);\n }\n });\n };\n picturesSelectDlgPromise.show();\n });\n }\n\n var picturesSelectDlgPromise = $modal({\n templateUrl: 'storage/pictures/pictures-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","'use strict';\n\nwbApp.controller('ActionsScheduleCtrl', ['$scope', '$modal', '$translate','courseScheduleSvc',\nfunction ($scope, $modal, $translate, courseScheduleSvc) {\n\n var selectedAction = null;\n var isActive = false;\n var loaded = false;\n $scope.canAddNewRow = false;\n $scope.actionSchedules = [];\n\n function setCanAddNewRow() {\n if ($scope.actionSchedules.$promise) {\n $scope.actionSchedules.$promise.then(function () {\n if ($scope.actionSchedules.length === 0) {\n $scope.canAddNewRow = true;\n } else {\n $scope.canAddNewRow = false;\n }\n });\n } else {\n $scope.canAddNewRow = false;\n }\n }\n\n $scope.$on('selectedActionChanged', function (e, actionInd) {\n if (actionInd.action) {\n if (isActive) {\n if (selectedAction !== actionInd.action || actionInd.refresh) {\n $scope.actionSchedules = courseScheduleSvc.getAllAsync(actionInd.action.courseID, true /*actionInd.refresh*/);\n setCanAddNewRow();\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else {\n $scope.actionSchedules.length = 0;\n }\n selectedAction = actionInd.action;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 2) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedAction) {\n $scope.actionSchedules = courseScheduleSvc.getAllAsync(selectedAction.courseID, true);\n setCanAddNewRow();\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.gridSettings = {\n columns: [\n { dataField: 'startDate', caption: $translate.instant('TXT_LBL_START_DATE'), dataType: 'date', format: { raw: \"dd.MM.yy EEE HH:mm\" }, width: '150px', sortOrder: 'asc' },\n { dataField: 'endDate', caption: $translate.instant('TXT_LBL_END_DATE'), dataType: 'date', format: { raw: \"HH:mm\" }, width: '60px' },\n { dataField: 'classroomName', caption: $translate.instant('TXT_LBL_CLASSROOM'), dataType: 'string', width: '180px' },\n { dataField: 'teacher', caption: $translate.instant('TXT_LBL_EMPLOYEE'), dataType: 'string', width: '180px' },\n { dataField: 'filled', caption: $translate.instant('TXT_LBL_FILLED'), dataType: 'number', width: '70px' },\n { dataField: 'notes', caption: $translate.instant('TXT_NOTE'), dataType: 'string' }\n ],\n shouldDisableAdd: function () { return !$scope.selectedAction || !$scope.canAddNewRow }\n }\n \n $scope.selectedSchedule = {};\n\n $scope.onRowSelected = function (data) {\n $scope.selectedSchedule = data;\n }\n\n $scope.onRowEdit = function (data) {\n eventDetailDialogPromise.$promise.then(function () {\n eventDetailDialogPromise.$scope.model = angular.copy(data);\n eventDetailDialogPromise.$scope.hideActionChange = true;\n eventDetailDialogPromise.$scope.onSave = $scope.onActionScheduleChanged;\n eventDetailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n if ($scope.canAddNewRow) {\n eventDetailDialogPromise.$promise.then(function () {\n eventDetailDialogPromise.$scope.model = courseScheduleSvc.createNew(selectedAction);\n eventDetailDialogPromise.$scope.hideActionChange = true;\n eventDetailDialogPromise.$scope.onSave = $scope.onActionScheduleChanged;\n eventDetailDialogPromise.show();\n });\n }\n }\n\n $scope.onRowDelete = function (data) {\n courseScheduleSvc.remove(data, { sendEmailNotification: true, sendSmsNotification: false }, function () {\n $scope.onActionScheduleChanged(data);\n });\n setCanAddNewRow();\n }\n\n $scope.onActionScheduleChanged = function (model) {\n $scope.$emit('onActionShouldRefresh', { action: $scope.selectedAction });\n }\n\n //var detailDialogPromise = $modal({\n // templateUrl: 'actions/actions/actions-detail-tabs/schedule-detail.html',\n // show: false,\n // scope: $scope.$new()\n //});\n\n var eventDetailDialogPromise = $modal({\n templateUrl: 'schedule/schedule-event-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","'use strict';\n\nwbApp.controller('ActionsStudentsAttendanceDetailCtrl', ['$scope', 'attendanceSvc',\nfunction ($scope, attendanceSvc) {\n\n $scope.isSaving = false;\n $scope.isBusy = true;\n\n var model = null;\n\n var attendance = attendanceSvc.getStudentCourseAttendance($scope.courseID, $scope.studentID)\n .$promise.then(function (atts) {\n $scope.isBusy = false;\n\n if (atts.length > 0) {\n $scope.model = atts[0];\n $scope.modelOrig = angular.copy($scope.model);\n }\n });\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n function success() {\n $scope.onAfterSuccessSave();\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n function cancel() {\n $scope.isSaving = false;\n }\n\n attendanceSvc.update(model, null, success, error);\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n}]);\n","'use strict';\n\nwbApp.controller('ActionsStudentsCtrl', ['$scope', '$q', '$modal', '$window', '$translate', '$filter', 'securitySvc', 'tenantSettingSvc', 'courseRegistrationSvc', 'gridSortSvc',\nfunction ($scope, $q, $modal, $window, $translate, $filter, securitySvc, tenantSettingSvc, courseRegistrationSvc, gridSortSvc) {\n\n $scope.tenantSettings = tenantSettingSvc.settings;\n\n $scope.selectedAction = null;\n var isActive = false;\n var loaded = false;\n $scope.canAddNewRow = false;\n $scope.actionRegistrations = [];\n\n function setCanAddNewRow() {\n if (loaded && !!$scope.selectedAction && !!$scope.selectedAction.firstLesson) {\n $scope.canAddNewRow = true;\n } else {\n $scope.canAddNewRow = false;\n }\n }\n\n $scope.$on('selectedActionChanged', function (e, actionInd) {\n if (actionInd.action) {\n if (isActive) {\n if ($scope.selectedAction !== actionInd.action || actionInd.refresh) {\n $scope.actionRegistrations = courseRegistrationSvc.getAllForCourse(actionInd.action.courseID);\n $scope.actionRegistrations.$promise.then(function () {\n setUpGrid();\n setCanAddNewRow();\n });\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else {\n $scope.actionRegistrations.length = 0;\n }\n $scope.selectedAction = actionInd.action;\n setCanAddNewRow();\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 1) {\n if (!isActive) {\n isActive = true;\n if (!loaded && $scope.selectedAction) {\n $scope.actionRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedAction.courseID);\n $scope.actionRegistrations.$promise.then(function () {\n setUpGrid();\n setCanAddNewRow();\n });\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n setCanAddNewRow();\n });\n\n $scope.gridSettings = {\n columns: [\n {\n dataField: 'studentFullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', width: '190px', sortOrder: 'asc',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName(data, 'studentName', 'studentSurname', 'studentMiddleName') },\n },\n { dataField: 'studentAge', caption: $translate.instant('TXT_LBL_AGE'), dataType: 'string', width: '70px' },\n {\n dataField: 'contactPhone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.contactPhone);\n },\n width: '140px'\n },\n { dataField: 'contactEmail', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '190px' },\n { dataField: 'notes', caption: $translate.instant('TXT_NOTE'), dataType: 'string' },\n { dataField: 'attendanceStatusText', caption: $translate.instant('TXT_LBL_ATTENDANCE'), dataType: 'string', width: '100px' },\n { dataField: 'paymentsSum', caption: $translate.instant('TXT_LBL_PAYMENTS'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'reservedPlaces', caption: $translate.instant('TXT_LAB_RESERVED_PALCES'), dataType: 'number', width: '40px' },\n { dataField: 'registrationDate', caption: $translate.instant('TXT_SEC_CLIENT_COURSE_REGISTRATION'), dataType: 'date', format: { date: 'short' }, width: '110px' },\n ],\n shouldDisableAdd: function () { return !$scope.selectedAction || !$scope.canAddNewRow },\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex); \n if (data.attendanceStatusNotPresent) {\n e.rowElement.addClass('text-muted');\n }\n }\n },\n onCellPrepared: function (e) {\n if (e.rowType === \"data\" && e.columnIndex == 2) {\n e.cellElement.mousemove(function () {\n if (!!e.data.studentBirthday) {\n e.cellElement.attr('title', $translate.instant(\"TXT_LAB_BIRTHDAY\") + \": \" + $filter('date')(e.data.studentBirthday, 'shortDate'));\n }\n });\n }\n },\n customCommands: [{\n text: $translate.instant('TXT_MENU_CREATE_PAYMENT'),\n isVisible: function (row) { return (row.arrear > 0) && securitySvc.isInRole('Payment.Insert'); },\n callback: function (row) { addPayment(row); }\n }, {\n text: $translate.instant('TXT_MENU_PRINT_INVOICE'),\n isVisible: function () { return securitySvc.isInRole('Reports'); },\n callback: function (data) { onPrintInvoice(data.courseRegistrationID); }\n }, {\n text: $translate.instant('TXT_MENU_PRINT_APPLICATION_FORM'),\n isVisible: function () { return securitySvc.isInRole('Reports') && securitySvc.isInRole('CourseRegistration.PrintApplicationForm'); },\n callback: function (data) { onPrintApplicationForm(data.courseRegistrationID); }\n }, {\n text: $translate.instant('TXT_MENU_EDIT_ATTENDANCE'),\n isVisible: function () { return securitySvc.isInRole('Attendance.Update'); },\n callback: function (data) { onAttendanceUpdate(data.courseID, data.studentID); }\n }, {\n text: $translate.instant('TXT_MENU_RESEND_COURSE_REGISTRATION_NOTIFICATION'),\n isVisible: function () { return securitySvc.isInRole('CourseRegistration'); },\n callback: function (data) {\n courseRegistrationSvc.sendRegistrationNotification(data.courseRegistrationID)\n .then(function () {\n data.notificationSent = true;\n });\n }\n }]\n }\n\n\n function setUpGrid() {\n if ($scope.selectedAction && $scope.gridSettings.gridInstance) {\n $scope.gridSettings.gridInstance.columnOption('reservedPlaces', 'visible', $scope.selectedAction.allowMultiAttendance);\n }\n }\n\n function onPrintInvoice(courseRegistrationID) {\n $window.open('/Admin/Report/Invoice?ReportID=' + courseRegistrationID + '&ReportIDType=0',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n function onPrintApplicationForm(courseRegistrationID) {\n $window.open('/Admin/Report/ApplicationFormAction?CourseRegistrationID=' + courseRegistrationID,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n function onAttendanceUpdate(courseID, studentID) {\n attendanceDetailDialogPromise.$promise.then(function () {\n attendanceDetailDialogPromise.$scope.courseID = courseID;\n attendanceDetailDialogPromise.$scope.studentID = studentID;\n attendanceDetailDialogPromise.$scope.onAfterSuccessSave = function () {\n $scope.onActionRegistrationChanged($scope.selectedAction);\n }\n attendanceDetailDialogPromise.show();\n });\n }\n\n if ($scope.tenantSettings.showArrearInsteadOfPayments) {\n var column = _.find($scope.gridSettings.columns, { dataField: 'paymentsSum' });\n if (column) {\n column.dataField = 'arrear';\n column.caption = $translate.instant('TXT_LBL_ARREAR')\n }\n }\n \n $scope.selectedRegistration = {};\n\n $scope.onRowSelected = function (data) {\n $scope.selectedRegistration = data;\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.action = $scope.selectedAction;\n detailDialogPromise.$scope.model = new webooker_courses_models.CourseRegistration(data);\n detailDialogPromise.$scope.onAfterSuccessSave = function () {\n $scope.actionRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedAction.courseID);\n $scope.onActionRegistrationChanged($scope.selectedAction);\n }\n detailDialogPromise.show();\n });\n }\n\n $scope.onActionRegistrationChanged = function (model) {\n $scope.$emit('onActionShouldRefresh', { action: $scope.selectedAction });\n }\n\n $scope.onRowAdd = function () {\n\n $q.all([detailDialogPromise.$promise, courseRegistrationSvc.createNew($scope.selectedAction, true)])\n .then(function (data) {\n var actionRegistration = data[1];\n detailDialogPromise.$scope.action = $scope.selectedAction;\n detailDialogPromise.$scope.model = actionRegistration;\n detailDialogPromise.$scope.onAfterSuccessSave = function () {\n $scope.actionRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedAction.courseID);\n $scope.onActionRegistrationChanged($scope.selectedAction);\n }\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n courseRegistrationSvc.remove(\n data,\n 2, /* SubjectCategory.OneOffActions */\n function () {\n $scope.actionRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedAction.courseID);\n $scope.onActionRegistrationChanged($scope.selectedAction);\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'actions/actions/actions-detail-tabs/students-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var attendanceDetailDialogPromise = $modal({\n templateUrl: 'actions/actions/actions-detail-tabs/actions-attendance-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var addPaymentPromise = $modal({\n templateUrl: 'finance/payments/payments-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n function addPayment(data) {\n addPaymentPromise.$scope.isAddDuePayment = true;\n addPaymentPromise.$scope.paymentDetail = {\n paymentID: 0,\n invoiceForType: 2,\n invoiceID: data.invoiceID,\n amount: data.arrear,\n selectedDate: moment().toDate(),\n };\n\n addPaymentPromise.$promise.then(function () {\n addPaymentPromise.$scope.detailError = null;\n addPaymentPromise.$scope.onSave = function () {\n $scope.actionRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedAction.courseID);\n }\n\n addPaymentPromise.show();\n });\n }\n}]);\n","'use strict';\n\nwbApp.controller('ActionsStudentsDetailCtrl', ['$scope', 'securitySvc', 'messageBoxSvc', 'courseRegistrationSvc', 'tenantSettingSvc',\n 'localStorageService', '$translate',\nfunction ($scope, securitySvc, messageBoxSvc, courseRegistrationSvc, tenantSettingSvc, localStorageService, $translate) {\n\n $scope.allowDiscounts = tenantSettingSvc.settings.allowDiscounts;\n $scope.calculatedDueDate = { dueDate: null };\n $scope.modelOrig = angular.copy($scope.model);\n $scope.registeredAttendance = [];\n\n $scope.isReady = false;\n $scope.isBusy = false;\n\n $scope.onRegistrationDateChange = function(registrationDate) {\n if ($scope.allowDiscounts) {\n courseRegistrationSvc.calcExpectedDueDate($scope.action.courseID, registrationDate).$promise.then( function(data) {\n $scope.calculatedDueDate.dueDate = data.dueDate;\n });\n }\n }\n \n function extendModel(action) {\n\n setIsBusy(true);\n\n courseRegistrationSvc.initializeModel($scope.model, action, true, true)\n .then(function () {\n $scope.modelOrig = angular.copy($scope.model);\n $scope.registeredAttendance = $scope.model.registeredAttendance;\n\n if ($scope.allowDiscounts) {\n courseRegistrationSvc.calcExpectedDueDate($scope.action.courseID, $scope.model.registrationDate).$promise.then( function(data) {\n $scope.calculatedDueDate.dueDate = data.dueDate;\n });\n } \n \n setIsBusy(false);\n },\n function (errorResult) {\n $scope.registeredAttendance = [];\n $scope.detailError = errorResult;\n\n setIsBusy(false);\n });\n }\n\n function setIsBusy(isBusy) {\n $scope.isBusy = isBusy;\n $scope.isReady = !isBusy;\n angular.forEach($scope.detailTabs, function (tab) {\n tab.disabled = isBusy;\n });\n }\n\n\n extendModel($scope.action);\n\n $scope.onStudentChange = function (studentID) {\n extendModel($scope.action);\n }\n\n $scope.onAttendanceCountChange = function (model) {\n courseRegistrationSvc.updateReservedPlaces(model, model.reservedPlaces);\n }\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n $scope.saveManualAdjustmentTextToLocalStorage(model.invoice);\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n function success() {\n $scope.onAfterSuccessSave();\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n function cancel() {\n $scope.isSaving = false;\n }\n\n function confirmUpdate(updateInvoice) {\n messageBoxSvc.showConfirmClientNotification({\n userSetting: ['confirmNotificationEventStudent'],\n showSendSmsNotification: false,\n callback: function (notificationConfig) {\n courseRegistrationSvc.update(\n model,\n notificationConfig,\n 2, /* SubjectCategory.OneOffActions */\n updateInvoice,\n success,\n error);\n }\n });\n }\n\n if (!model.courseRegistrationID) {\n messageBoxSvc.showConfirmClientNotification({\n userSetting: ['confirmNotificationEventStudent'],\n showSendSmsNotification: false,\n callback: function (notificationConfig) {\n courseRegistrationSvc.insert(\n model,\n notificationConfig,\n 2, /* SubjectCategory.OneOffActions */\n success,\n error);\n }\n });\n } else {\n if (model.invoice.isModified) {\n // Invoice has changed, ask user for confirmation\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: 'TXT_TEXT_INVOICE_HAS_CHANGED',\n buttons: [{\n text: 'TXT_BTN_CANCEL',\n callback: cancel\n }, {\n text: 'TXT_BTN_NO_INVOICE_CHANGES',\n callback: function () { confirmUpdate(false); }\n }, {\n text: 'TXT_BTN_CREATE_NEW_INVOICE',\n callback: function () { confirmUpdate(true); }\n }]\n });\n } else {\n courseRegistrationSvc.update(\n model,\n {\n sendEmailNotification: false,\n sendSmsNotification: false \n },\n 2, /* SubjectCategory.OneOffActions */\n false,\n success,\n error);\n }\n\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig) &&\n (!!$scope.model.invoice && !$scope.model.invoice.isModified) &&\n !!$scope.model.courseRegistrationID;\n };\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: 'actions/actions/actions-detail-tabs/students-detail-main-tab.html',\n disabled: true,\n }, {\n title: 'TXT_PRICE_TAB',\n template: 'actions/actions/actions-detail-tabs/students-detail-price-tab.html',\n disabled: true,\n }, {\n title: 'TXT_LBL_PARENT',\n template: 'actions/actions/actions-detail-tabs/students-detail-parent-tab.html',\n disabled: true,\n }];\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.saveManualAdjustmentTextToLocalStorage = function (invoice) {\n if (localStorageService.isSupported) {\n var manualAdjustmentLine = _.find(invoice.lines, function (line) {\n return line.lineType == \"ManualAdjustment\" && line.runtimeManualAdjustmentType == 1;\n });\n\n if (!!manualAdjustmentLine) {\n localStorageService.set('manualAdjustmentDiscountLineName', manualAdjustmentLine.name);\n localStorageService.set('manualAdjustmentDiscountLinePercent', manualAdjustmentLine.percent);\n }\n }\n }\n\n $scope.addInvoiceLine = function (manualAdjustmentLineType) {\n var newLine = $scope.model.invoice.addManualAdjustmentLine(manualAdjustmentLineType);\n if (manualAdjustmentLineType == 1) {\n\n if (localStorageService.isSupported) {\n newLine.name = localStorageService.get('manualAdjustmentDiscountLineName') || $translate.instant('TXT_DISCOUNT');\n newLine.percent = localStorageService.get('manualAdjustmentDiscountLinePercent') || 0;\n } else {\n newLine.name = $translate.instant('TXT_DISCOUNT');\n }\n }\n }\n\n $scope.removeInvoiceLine = function (invoice, index) {\n invoice.removeManualAdjustmentLine(index);\n }\n\n $scope.addManualAdjustmentLineDropdown = [\n {\n text: $translate.instant('TXT_ADD_LINE_DISCOUNT_IN_PERCENT'),\n click: 'addInvoiceLine(1)'\n },\n {\n text: $translate.instant('TXT_ADD_LINE_EMPTY'),\n click: 'addInvoiceLine(0)'\n }\n ];\n\n}]);\n","wbApp.directive('wbActionCategoryCombo', ['$timeout', '$translate', '$filter', 'subjectsSvc', 'gridSortSvc',\n function ($timeout, $translate, $filter, subjectsSvc, gridSortSvc) {\n function formatResult(actionCategory) {\n if (!actionCategory) { return; }\n\n return actionCategory.name;\n }\n\n function formatSelection(actionCategory) {\n return actionCategory.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n\n let models = subjectsSvc.getAllForActionsAsync(true);\n\n models.$promise.then(function () {\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_CATEGORY'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: 5,\n id: function (model) {\n return model.id;\n },\n data: _.sortBy(models, function (a) {\n return gridSortSvc.localeSort(a, 'name');\n }),\n matcher: function (term, text, data) {\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n }\n });\n\n ctrl.$render = function () {\n $(elm).select2('val', ctrl.$viewValue);\n }\n\n ctrl.$render();\n }, 1);\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n return value + \"\";\n }\n });\n\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n ctrl.$render();\n });\n }\n }\n }]);\n ","'use strict';\n\nwbApp.controller('ActivityReconciliationRecurringInvoiceDetailCtrl', ['$scope', '$filter', 'messageBoxSvc', 'invoiceRecurrenceScheduleSvc',\nfunction ($scope, $filter, messageBoxSvc, invoiceRecurrenceScheduleSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"activities/activity-reconciliation/recurring-invoice-detail-main-tab.html\"\n },\n {\n title: 'TXT_LAB_INVOICE',\n template: \"activities/activity-reconciliation/recurring-invoice-detail-invoice-tab.html\"\n }\n ];\n\n $scope.minDate = moment($scope.model.startDate).startOf('day').subtract(1, 'day');\n\n $scope.detailTabs.activeTab = 0;\n\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n\n if (!data.invoiceRecurrenceScheduleID) {\n invoiceRecurrenceScheduleSvc.insert(data, success, error);\n } else {\n invoiceRecurrenceScheduleSvc.update(data, success, error);\n }\n\n function success(model) {\n $scope.$hide();\n if (!!$scope.onScheduleSave) {\n $scope.onScheduleSave(model);\n }\n }\n\n function error(data) {\n $scope.detailError = data;\n $scope.isSaving = false;\n }\n }\n\n}]);","'use strict';\n\nwbApp.controller('ActivitiesCtrl', ['$scope', '$modal', '$timeout', '$q', '$translate', '$filter', 'activitySvc', 'semesterSvc', \n 'classroomSvc', 'accountingBookSvc', 'protectedStorageSvc', 'securitySvc',\n function ($scope, $modal, $timeout, $q, $translate, $filter, activitySvc, semesterSvc, \n classroomSvc, accountingBookSvc, protectedStorageSvc, securitySvc) {\n\n $scope.isSaving = false;\n $scope.protectedStorageEdit = securitySvc.isInRole('ProtectedStorage.Insert');\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $q.all([semesterSvc.getDefaultAsync(),\n accountingBookSvc.getDefaultAsync(),\n classroomSvc.getAllAsync().$promise,\n accountingBookSvc.getAllAsync().$promise])\n .then(function (data) {\n if (data[0]) {\n $scope.semesterID = data[0].id;\n }\n\n if (data[1]) {\n $scope.defaultAccountingBookID = data[1].id;\n }\n\n $scope.activities = activitySvc.getAllBySemesterIDAsync(\n $scope.semesterID != null ? $scope.semesterID : null);\n });\n\n $scope.onSemesterChange = function (semesterID) {\n refreshData(false);\n }\n\n function refreshData(reselect) {\n return $q(function (resolve, reject) {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n var all = activitySvc.getAllBySemesterIDAsync($scope.semesterID, true);\n all.$promise.then(function (data) {\n $scope.activities = data;\n\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedActivity(null);\n }\n })\n }, 100);\n } else {\n setSelectedActivity(null);\n }\n\n resolve();\n\n }, function (error) {\n $scope.activities = [];\n setSelectedActivity(null);\n\n reject();\n });\n });\n }\n\n function setSelectedActivity(activity, refresh) {\n $scope.selectedActivity = activity;\n $scope.$broadcast('activitySelectionChanged', $scope.selectedActivity);\n }\n\n $scope.$on('refreshData', function (e, data) {\n refreshData(true);\n });\n\n $scope.gridSettings = {\n name: 'activities',\n columns: [\n {\n dataField: 'name',\n caption: $translate.instant('TXT_LBL_NAME'),\n dataType: 'string',\n width: '170px',\n sortOrder: 'asc'\n },\n {dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string'},\n {\n dataField: 'classroomID',\n caption: $translate.instant('TXT_LBL_CLASSROOM'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('classroom')(rowData.classroomID);\n },\n width: '250px'\n },\n ]\n }\n\n $scope.onRowSelected = function (data) {\n setSelectedActivity(data);\n }\n\n $scope.onRowAdd = function () {\n\n $scope.activityDetail = {\n semesterID: $scope.semesterID,\n isNew: true,\n accountingBookID: $scope.defaultAccountingBookID,\n };\n $scope.activityDetailOrig = angular.copy($scope.activityDetail);\n\n detailDialogPromise.$promise.then(function () {\n $scope.detailError = null;\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n\n var promises = [];\n var modelPromise = activitySvc.getByActivityID(data.activityID, true);\n promises.push(modelPromise.$promise);\n\n promises.push(detailDialogPromise.$promise);\n\n $q.all(promises).then(function () {\n $scope.activityDetail = modelPromise;\n $scope.activityDetailOrig = angular.copy($scope.activityDetail);\n\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n activitySvc.remove(data).$promise.then(function () {\n refreshData(false);\n });\n }\n\n $scope.onActivityDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n activitySvc.insert(data, success, error);\n } else {\n activitySvc.update(data, success, error);\n }\n\n function success() {\n detailDialogPromise.hide();\n $scope.isSaving = false;\n refreshData(true);\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.activityDetailOrig);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"activities/detail-tabs/home.html\",\n }\n ];\n\n $scope.tabs.activeTab = 0;\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"activities/activities-detail-main-tab.html\"\n }, {\n title: 'TXT_PRICE_TAB',\n template: \"activities/activities-detail-price-tab.html\"\n }, {\n title: 'TXT_LBL_COMPENSATIONS',\n template: \"activities/activities-detail-compensation-tab.html\"\n }, {\n title: \"TXT_LBL_DESCRIPTION\",\n template: \"activities/activities-detail-description-tab.html\"\n }, {\n title: 'TXT_LBL_PHOTO_ALBUM',\n template: \"activities/activities-detail-storage-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.$watch('detailTabs.activeTab', function (newValue, oldValue) {\n switch (newValue) {\n case 4:\n loadGalleryInfo();\n break;\n }\n });\n \n $scope.galleryInfoBusy = false;\n $scope.galleryInfoData = [];\n function loadGalleryInfo() {\n if (!$scope.activityDetail.picturesFolders || $scope.activityDetail.picturesFolders.length === 0) {\n return;\n }\n \n $scope.galleryInfoBusy = true;\n protectedStorageSvc.findGalleryInfoByPaths($scope.activityDetail.picturesFolders, false)\n .$promise.then(function(data) {\n $scope.galleryInfoBusy = false;\n \n $scope.galleryInfoData = _.keyBy(data, function(o) {\n return o.galleryDirectoryPath;\n });\n }, \n function (error) {\n $scope.galleryInfoBusy = false;\n }\n );\n \n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'activities/activities-detail.html',\n show: false,\n scope: $scope\n });\n\n var protectedStorageSelectDlgPromise = $modal({\n templateUrl: 'storage/protected-storage/protected-storage-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n var galleryInfoEditDlgPromise = $modal({\n templateUrl: 'activities/gallery-info-edit-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.showProtectedStorageSelect = function () {\n protectedStorageSelectDlgPromise.$promise.then(function () {\n\n protectedStorageSelectDlgPromise.$scope.selectFoldersOnly = true;\n\n protectedStorageSelectDlgPromise.$scope.onFilesSelected = function (files) {\n\n if (!$scope.activityDetail.picturesFolders) {\n $scope.activityDetail.picturesFolders = [];\n }\n\n angular.forEach(files, function (p) {\n if (!$scope.activityDetail.picturesFolders.find(e => e == p.objectUri)) {\n $scope.activityDetail.picturesFolders.push(p.objectUri);\n loadGalleryInfo();\n }\n });\n };\n protectedStorageSelectDlgPromise.show();\n });\n }\n\n $scope.removePicture = function (pictureUrl) {\n const index = $scope.activityDetail.picturesFolders.indexOf(pictureUrl);\n if (index > -1) {\n $scope.activityDetail.picturesFolders.splice(index, 1);\n }\n }\n \n $scope.startEditInfo = function(galleryDirectory) {\n let model = $scope.galleryInfoData[galleryDirectory];\n galleryInfoEditDlgPromise.$promise.then(function () {\n galleryInfoEditDlgPromise.$scope.model = angular.copy(model);\n galleryInfoEditDlgPromise.$scope.galleryDirectory = galleryDirectory;\n galleryInfoEditDlgPromise.$scope.onGalleryInfoSave = function (newModel) {\n $scope.galleryInfoData[galleryDirectory] = newModel;\n }\n galleryInfoEditDlgPromise.show();\n });\n }\n\n }]);","'use strict';\n\nwbApp.controller('ActivityInstructorDetailCtrl', ['$scope', 'activityInstructorSvc',\nfunction ($scope, activityInstructorSvc) {\n\n $scope.employeeDetailModel = { days: [], onDataSourceChange: function () { }, applyChanges: function () { }};\n $scope.instructorsOrig = [];\n\n\n function reloadData(instructors, schedules, employeeID, activityID) {\n // todo: Check changes\n\n var model = activityInstructorSvc.createEmployeeDetailModel(instructors, schedules, employeeID, activityID);\n $scope.instructorsOrig = angular.copy(instructors);\n $scope.employeeDetailModel = model;\n }\n\n $scope.onEmployeeChange = function (employeeID) {\n activityInstructorSvc.getAllByEmployeeAndActivity(\n employeeID, $scope.instructorDetailModel.activityID)\n .$promise\n .then(function (instructors) {\n reloadData(instructors, $scope.instructorDetailModel.selection, employeeID, $scope.instructorDetailModel.activityID);\n }); \n }\n\n $scope.onWeekSelectionChange = function (selection) {\n $scope.employeeDetailModel.applyChanges.call($scope.employeeDetailModel);\n $scope.employeeDetailModel.onDataSourceChange.call($scope.employeeDetailModel);\n }\n\n $scope.saveActivityInstructorDetailChanges = function () {\n $scope.employeeDetailModel.applyChanges.call($scope.employeeDetailModel);\n if (!angular.equals($scope.employeeDetailModel.instructors, $scope.instructorsOrig)) {\n activityInstructorSvc.saveAsync(\n $scope.employeeDetailModel.instructors,\n $scope.instructorDetailModel.employeeID,\n $scope.instructorDetailModel.activityID)\n .then(function (data) {\n $scope.onActivityInstructorSave(data);\n }, function (reason) {\n $scope.activityInstructorDetailError = reason;\n });\n\n }\n }\n\n if (!$scope.instructorDetailModel.isNew) {\n $scope.onEmployeeChange($scope.instructorDetailModel.employeeID);\n }\n\n}]);","'use strict';\n\nwbApp.controller('ActivityReconciliationAttendanceCtrl', ['$scope', '$modal', 'activityReconciliationSvc',\nfunction ($scope, $modal, activityReconciliationSvc) {\n\n $scope.attendance = [];\n\n $scope.semesterID = null;\n $scope.activityID = null;\n $scope.studentID = null;\n\n var isActive = false;\n var loaded = false;\n\n function reloadData() {\n if ($scope.activityID && $scope.studentID) {\n $scope.attendance = activityReconciliationSvc.getStudentsAttendanceByActivity(\n $scope.semesterID,\n $scope.activityID,\n $scope.studentID);\n loaded = true;\n } else {\n $scope.attendance = [];\n }\n }\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 1) {\n if (!isActive) {\n isActive = true;\n if (!loaded) {\n reloadData();\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.$on('activityStudentSelectionChanged', function (e, data) {\n if (data.studentID != $scope.studentID ||\n data.activityID != $scope.activityID ||\n data.reasonCode == 'activityReconciliationChanged') {\n $scope.semesterID = data.semesterID;\n $scope.activityID = data.activityID;\n $scope.studentID = data.studentID;\n\n if (isActive) {\n reloadData();\n } else {\n loaded = false;\n }\n } else {\n $scope.attendance.length = 0;\n }\n });\n\n $scope.acivityReconciliationAttendanceFilterOptions = {\n filterText: \"\"\n };\n\n $scope.acivityReconciliationAttendanceGridOptions = {\n sortInfo: { fields: ['date'], directions: ['asc'] },\n columnDefs: [\n { field: 'date', cellFilter: \"date:'EEE d. M. yy'\", displayName: \"TXT_DAY\", width: '100px' },\n { field: 'firstPeriod', displayName: \"TXT_AM\", width: '100px' },\n { field: 'firstSnack', displayName: \"TXT_SNACK\", width: '70px' },\n { field: 'lunch', displayName: \"TXT_LUNCH\", width: '70px' },\n { field: 'firstPeriodAttendanceStatus', cellFilter: 'translate', displayName: \"TXT_COL_ATTENDANCE_STATUS\", width: '120px' },\n { field: 'firstPeriodAttendanceType', cellFilter: 'translate', displayName: \"TXT_COL_ATTENDANCE_TYPE\", width: '120px' },\n { field: 'secondPeriod', displayName: \"TXT_PM\", width: '100px' },\n { field: 'secondSnack', displayName: \"TXT_SNACK\", width: '70px' },\n { field: 'secondPeriodAttendanceStatus', cellFilter: 'translate', displayName: \"TXT_COL_ATTENDANCE_STATUS\", width: '120px' },\n { field: 'secondPeriodAttendanceType', cellFilter: 'translate', displayName: \"TXT_COL_ATTENDANCE_TYPE\", width: '120px' },\n { field: 'notes', displayName: \"TXT_LBL_NOTE\" }\n ],\n noCommandColumn: true,\n disabledField: 'reconciled'\n };\n\n\n}]);","'use strict';\n\nwbApp.controller('ActivityReconciliationCtrl', ['$scope', '$modal', '$translate', '$filter', 'messageBoxSvc', 'activitySvc', 'semesterSvc', 'activityReconciliationSvc',\nfunction ($scope, $modal, $translate, $filter, messageBoxSvc, activitySvc, semesterSvc, activityReconciliationSvc) {\n\n $scope.reconciliationDataRange = 1; // 1 - since last reconciliation, 2 - from last reconciliation\n $scope.fromDate = moment().subtract(1, 'M').startOf('day').toDate();\n $scope.toDate = moment().startOf('day').toDate();\n\n $scope.$on('refreshData', function (e, data) {\n if ($scope.semesterID && $scope.activityID) {\n loadData();\n }\n });\n\n $scope.onDataRangeChanged = function () {\n if ($scope.semesterID && $scope.activityID) {\n loadData();\n }\n }\n\n function loadData() {\n $scope.selectedStudent = {};\n\n if ($scope.activityID) {\n $scope.students = activityReconciliationSvc.getStudentsByActivity(\n $scope.semesterID,\n $scope.activityID,\n $scope.reconciliationDataRange,\n $scope.fromDate,\n $scope.toDate);\n } else {\n $scope.students.length = 0;\n }\n \n $scope.onStudentSelected(null);\n\n setUpRemainingExcuses($scope.activityID, null);\n }\n\n $scope.gridSettings = {\r\n name: 'students',\r\n columns: [\r\n { dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', sortOrder: 'asc', },\r\n\r\n { dataField: 'fullDayRegisteredAttendance', caption: $translate.instant('TXT_FULL_DAYS') + ' ' + $translate.instant('TXT_REGISTERED_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n { dataField: 'firstPeriodOnlyRegisteredAttendance', caption: $translate.instant('TXT_FIRST_PERIOD_ONLY') + ' ' + $translate.instant('TXT_REGISTERED_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n { dataField: 'secondPeriodOnlyRegisteredAttendance', caption: $translate.instant('TXT_SECOND_PERIOD_ONLY') + ' ' + $translate.instant('TXT_REGISTERED_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n\r\n { dataField: 'fullDayActualAttendanceNoOneOffs', caption: $translate.instant('TXT_FULL_DAYS') + ' ' + $translate.instant('TXT_REAL_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n { dataField: 'firstPeriodOnlyActualAttendanceNoOneOffs', caption: $translate.instant('TXT_FIRST_PERIOD_ONLY') + ' ' + $translate.instant('TXT_REAL_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n { dataField: 'secondPeriodOnlyActualAttendanceNoOneOffs', caption: $translate.instant('TXT_SECOND_PERIOD_ONLY') + ' ' + $translate.instant('TXT_REAL_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n\r\n { dataField: 'fullDayOneOffs', caption: $translate.instant('TXT_FULL_DAYS') + ' ' + $translate.instant('TXT_ONE_OFF_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n { dataField: 'firstPeriodOnlyOneOffs', caption: $translate.instant('TXT_FIRST_PERIOD_ONLY') + ' ' + $translate.instant('TXT_ONE_OFF_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n { dataField: 'secondPeriodOnlyOneOffs', caption: $translate.instant('TXT_SECOND_PERIOD_ONLY') + ' ' + $translate.instant('TXT_ONE_OFF_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n\r\n //{ dataField: 'firstPeriodExcuses', caption: $translate.instant('TXT_LBL_FIRST_PERIOD_EXCUSED_SHORT'), dataType: 'number', width: '70px' },\r\n // { dataField: 'firstPeriodExcusesWithoutFood', caption: $translate.instant('TXT_LBL_FIRST_PERIOD_EXCUSED_WITHOUT_FOOD_SHORT'), dataType: 'number', width: '70px' },\r\n // { dataField: 'firstPeriodExcusesWithoutComp', caption: $translate.instant('TXT_LBL_FIRST_PERIOD_EXCUSED_NO_COMP_SHORT'), dataType: 'number', width: '70px' },\r\n // { dataField: 'firstPeriodNonExcuses', caption: $translate.instant('TXT_LBL_FIRST_PERIOD_NOT_EXCUSED_SHORT'), dataType: 'number', width: '70px' },\r\n\r\n //{ dataField: 'secondPeriodRegisteredPresent', caption: $translate.instant('TXT_LBL_SECOND_PERIOD_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n //{ dataField: 'secondPeriodOneOffs', caption: $translate.instant('TXT_SECOND_PERIOD_ONLY_ONE_OFF_SHORT'), dataType: 'number', width: '70px' },\r\n // { dataField: 'secondPeriodExcuses', caption: $translate.instant('TXT_LBL_SECOND_PERIOD_EXCUSED_SHORT'), dataType: 'number', width: '70px' },\r\n // { dataField: 'secondPeriodExcusesWithoutFood', caption: $translate.instant('TXT_LBL_SECOND_PERIOD_EXCUSED_WITHOUT_FOOD_SHORT'), dataType: 'number', width: '70px' },\r\n // { dataField: 'secondPeriodExcusesWithoutComp', caption: $translate.instant('TXT_LBL_SECOND_PERIOD_EXCUSED_NO_COMP_SHORT'), dataType: 'number', width: '70px' },\r\n // { dataField: 'secondPeriodNonExcuses', caption: $translate.instant('TXT_LBL_SECOND_PERIOD_NOT_EXCUSED_SHORT'), dataType: 'number', width: '70px' },\r\n\r\n { dataField: 'lunches', caption: $translate.instant('TXT_LBL_ACTIVITY_LUNCH'), dataType: 'number', width: '70px' },\r\n { dataField: 'firstSnacks', caption: $translate.instant('TXT_FIRST_SNACK'), dataType: 'number', width: '70px' },\r\n { dataField: 'secondSnacks', caption: $translate.instant('TXT_SECOND_SNACK'), dataType: 'number', width: '70px' },\r\n { dataField: 'lastReconciliationDate', caption: $translate.instant('TXT_LBL_RECONCILIATIONS'), dataType: 'date', width: '100px' }\r\n ],\r\n onRowPrepared: function (e) {\r\n if (e.rowType == \"data\") {\r\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (!data.hasAttendance) {\r\n e.rowElement.addClass('text-muted');\r\n }\r\n }\r\n }\r\n }\n\n //$scope.gridOptions = {\n // sortInfo: { fields: ['studentFullName'], directions: ['asc'] },\n // // > 992\n // columnDefs: [\n // { field: 'studentFullName', displayName: \"TXT_LBL_STUDENT\", sort: 'humanName' },\n // { field: 'firstPeriodRegisteredPresent', displayName: \"TXT_LBL_FIRST_PERIOD_ATTENDANCE\", width: '70px', smHide: true },\n // { field: 'firstPeriodExcuses', displayName: \"TXT_LBL_FIRST_PERIOD_EXCUSED_SHORT\", width: '70px', smHide: true },\n // { field: 'firstPeriodExcusesWithoutFood', displayName: \"TXT_LBL_FIRST_PERIOD_EXCUSED_WITHOUT_FOOD_SHORT\", width: '70px', mdHide: true, smHide: true },\n // { field: 'firstPeriodExcusesWithoutComp', displayName: \"TXT_LBL_FIRST_PERIOD_EXCUSED_NO_COMP_SHORT\", width: '70px', mdHide: true, smHide: true },\n // { field: 'firstPeriodNonExcuses', displayName: \"TXT_LBL_FIRST_PERIOD_NOT_EXCUSED_SHORT\", width: '70px', mdHide: true, smHide: true },\n\n // { field: 'secondPeriodRegisteredPresent', displayName: \"TXT_LBL_SECOND_PERIOD_ATTENDANCE\", width: '70px', smHide: true },\n // { field: 'secondPeriodExcuses', displayName: \"TXT_LBL_SECOND_PERIOD_EXCUSED_SHORT\", width: '70px', smHide: true },\n // { field: 'secondPeriodExcusesWithoutFood', displayName: \"TXT_LBL_SECOND_PERIOD_EXCUSED_WITHOUT_FOOD_SHORT\", width: '70px', mdHide: true, smHide: true },\n // { field: 'secondPeriodExcusesWithoutComp', displayName: \"TXT_LBL_SECOND_PERIOD_EXCUSED_NO_COMP_SHORT\", width: '70px', mdHide: true, smHide: true },\n // { field: 'secondPeriodNonExcuses', displayName: \"TXT_LBL_SECOND_PERIOD_NOT_EXCUSED_SHORT\", width: '70px', mdHide: true, smHide: true },\n\n // { field: 'lunches', displayName: \"TXT_LBL_ACTIVITY_LUNCH\", width: '70px' },\n // { field: 'firstSnacks', displayName: \"TXT_FIRST_SNACK\", width: '70px', mdHide: true, smHide: true },\n // { field: 'secondSnacks', displayName: \"TXT_SECOND_SNACK\", width: '70px', mdHide: true, smHide: true },\n // { field: 'lastReconciliationDate', displayName: \"TXT_LBL_RECONCILIATIONS\", cellFilter: \"date:'shortDate'\", width: '100px' }\n // ],\n // disabledField: 'hasAttendance',\n // noCommandColumn: true\n //};\n\n $scope.sparklineOpts = {\n width: '100%',\n tooltipFormatter: function (sparkline, options, fields) {\n return $filter('date')(fields.x, 'EEE') + ' ' + $filter('date')(fields.x, 'shortDate') + ' - ' + fields.y;\n //return ' {{prefix}}{{x.1}}{{y}}{{suffix}}';\n }\n };\n $scope.remainingExcusesSparklineData = [];\n\n function setUpRemainingExcuses(activityID, studentID) {\n if (!activityID || !studentID) {\n $scope.remainingExcusesSparklineData = [];\n } else {\n var remaininigExcusesPromise = activityReconciliationSvc.getAvailableExuses($scope.activityID, $scope.selectedStudent.studentID);\n remaininigExcusesPromise.$promise.then(function (data) {\n $scope.remainingExcusesSparklineData = _.map(data.excusesByDate, function (item) {\n return [item.date, item.noOfExcuses];\n }\n );\n }, function (error) {\n $scope.remainingExcusesSparklineData = [];\n });\n }\n }\n\n\n $scope.semesterID;\n $scope.activityID;\n $scope.students = [];\n $scope.selectedStudent = {};\n\n $scope.$on('activityReconciliationChanged', function (e, data) {\n // Refresh data\n activityReconciliationSvc.refreshByStudentAndActivity(\n $scope.students,\n data.studentID,\n $scope.semesterID,\n $scope.activityID,\n $scope.reconciliationDataRange,\n $scope.fromDate,\n $scope.toDate);\n\n broadcastStudentSelectionChanged('activityReconciliationChanged');\n });\n\n semesterSvc.getDefaultAsync().then(function (activeSemester) {\n if (activeSemester) {\n $scope.semesterID = activeSemester.id;\n $scope.onSemesterChange($scope.semesterID);\n } else {\n $scope.semesterID = null;\n }\n });\n\n $scope.onSemesterChange = function (semesterId) {\n activitySvc.getAllBySemesterIDAsync(semesterId);\n }\n\n $scope.onActivityChange = function (activityID) {\n loadData();\n }\n\n function broadcastStudentSelectionChanged(reasonCode) {\n $scope.$broadcast('activityStudentSelectionChanged', {\n semesterID: $scope.semesterID,\n activityID: $scope.activityID,\n studentID: !!$scope.selectedStudent ? $scope.selectedStudent.studentID : null, \n studentFullName: !!$scope.selectedStudent ? $scope.selectedStudent.studentFullName : null,\n reasonCode: reasonCode\n });\n }\n\n $scope.onStudentSelected = function (student) {\n $scope.selectedStudent = student;\n setUpRemainingExcuses($scope.activityID, !!student ? student.studentID : null)\n broadcastStudentSelectionChanged('studentSelectionChanged');\n }\n \n $scope.onRowEdit = function (student) {\n\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"activities/activity-reconciliation-tabs/detail.html\"\n },\n {\n title: 'TXT_SEC_ATTENDANCE',\n template: \"activities/activity-reconciliation-tabs/attendance.html\"\n },\n {\n title: 'TXT_LBL_RECONCILIATIONS',\n template: \"activities/activity-reconciliation-tabs/reconciliations.html\"\n },\n {\n title: 'TXT_LBL_RECURRING_INVOICES',\n template: \"activities/activity-reconciliation-tabs/recurring-invoices.html\"\n },\n {\n title: 'TXT_LBL_ISSUED_INVOICES',\n template: \"activities/activity-reconciliation-tabs/issued-invoices.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue });\n });\n\n}]);\n","'use strict';\n\nwbApp.controller('ActivityReconciliationDetailCtrl', ['$scope', '$filter', 'messageBoxSvc', 'activityReconciliationSvc',\nfunction ($scope, $filter, messageBoxSvc, activityReconciliationSvc) {\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"activities/activity-reconciliation-detail-main-tab.html\"\n },\n {\n title: 'TXT_LBL_EXCUSES',\n template: \"activities/activity-reconciliation-detail-excuse-tab.html\"\n },\n {\n title: 'TXT_LBL_ATTENDANCE',\n template: \"activities/activity-reconciliation-detail-attendance-tab.html\"\n },\n {\n title: 'TXT_LBL_NOTE',\n template: \"activities/activity-reconciliation-detail-notes-tab.html\"\n },\n {\n title: 'TXT_PRICE_TAB',\n template: \"activities/activity-reconciliation-detail-invoice-tab.html\"\n }\n ];\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.gridOptions = {\n sortInfo: { fields: ['date'], directions: ['asc'] },\n columnDefs: [\n { field: 'date', cellFilter: \"date:'EEE d. M. '\", displayName: \"Den\" },\n { field: 'firstPeriod', displayName: \"Dopoledne\", width: '95px' },\n { field: 'lunch', displayName: \"Oběd\", width: '55px' },\n { field: 'firstPeriodAttendanceStatus', cellFilter: 'translate', displayName: \"TXT_COL_ATTENDANCE_STATUS\", width: '80px' },\n { field: 'firstPeriodAttendanceType', cellFilter: 'translate', displayName: \"TXT_COL_ATTENDANCE_TYPE\", width: '90px' },\n { field: 'secondPeriod', displayName: \"Odpoledne\", width: '95px' },\n { field: 'secondPeriodAttendanceStatus', cellFilter: 'translate', displayName: \"TXT_COL_ATTENDANCE_STATUS\", width: '80px' },\n { field: 'secondPeriodAttendanceType', cellFilter: 'translate', displayName: \"TXT_COL_ATTENDANCE_TYPE\", width: '90px' }\n ],\n noCommandColumn: true,\n hideFooter: false,\n multiSelect: true,\n disabledField: 'reconciled'\n };\n\n $scope.reconcileMinDate = new Date();\n $scope.reconcileMaxDate = new Date();\n $scope.reconcileFrom = $scope.reconcileMinDate;\n $scope.reconcileTo = $scope.reconcileMaxDate;\n $scope.reconciliation = activityReconciliationSvc.getReconciliationDetail($scope.activityID, $scope.studentID, $scope.activityReconciliationID);\n $scope.reconciliationNameChanged = false;\n $scope.tariffFullName = '';\n\n $scope.reconciliation.$promise.then(function () {\n $scope.reconcileMinDate = activityReconciliationSvc.getMinDateRange($scope.reconciliation.attendance);\n $scope.reconcileMaxDate = activityReconciliationSvc.getMaxDateRange($scope.reconciliation.attendance);\n $scope.tariffFullName = $scope.reconciliation.activityStudentSetting\n ? $scope.reconciliation.activityStudentSetting.tariffName + ' (' + $filter('wbCurrencyFlt')($scope.reconciliation.activityStudentSetting.tariffPrice) + ')'\n : '';\n if (!$scope.reconciliation.activityReconciliationID) {\n // New reconciliation\n $scope.reconciliationOrig = angular.copy($scope.reconciliation);\n\n $scope.reconcileFrom = moment($scope.reconcileMinDate).add(1, \"days\").startOf('day').toDate();\n $scope.reconcileTo = activityReconciliationSvc.getToDateRange(\n $scope.reconciliation.attendance, $scope.reconcileFrom, $scope.reconcileMaxDate);\n\n activityReconciliationSvc.selectDateRange($scope.reconciliation.attendance, $scope.reconcileFrom, $scope.reconcileTo);\n $scope.reconciliation.name = activityReconciliationSvc.getReconciliationName($scope.reconcileFrom, $scope.reconcileTo);\n } else {\n $scope.reconcileFrom = null;\n for (var i = 0; i < $scope.reconciliation.attendance.length; i++) {\n var attendance = $scope.reconciliation.attendance[i];\n if (attendance.isSelected) {\n $scope.reconcileTo = moment(attendance.date).startOf('day').toDate();\n\n if (!$scope.reconcileFrom) {\n $scope.reconcileFrom = moment(attendance.date).startOf('day').toDate();\n }\n }\n }\n $scope.reconciliationOrig = angular.copy($scope.reconciliation);\n }\n });\n\n $scope.rangeChanged = function (from, to) {\n activityReconciliationSvc.selectDateRange($scope.reconciliation.attendance, from, to);\n $scope.reconciliation.resetFields.call($scope.reconciliation);\n\n if (!$scope.reconciliationNameChanged) {\n $scope.reconciliation.name = activityReconciliationSvc.getReconciliationName(from, to);\n }\n }\n\n $scope.onReconciliationNameChange = function(newName) {\n $scope.reconciliationNameChanged = true;\n }\n\n $scope.onSelectionChanged = function (data) {\n $scope.reconciliation.resetFields.call($scope.reconciliation);\n }\n\n $scope.isSaveDisabled = function () {\n return $scope.reconciliation.isInvoiceEmpty ||\n angular.equals($scope.reconciliation, $scope.reconciliationOrig);\n }\n\n $scope.saveChanges = function () {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_CLIENT_NOTIFICATION',\n message: 'TXT_TEXT_CONFIRM_CLIENT_NOTIFICATION',\n buttons: [{\n text: 'TXT_BTN_NO',\n callback: onNoClicked \n }, {\n text: 'TXT_BTN_YES',\n callback: onYesClicked \n }]\n });\n\n function onYesClicked() {\n if ($scope.reconciliation.activityReconciliationID) {\n activityReconciliationSvc.updateReconciliationDetail(\n $scope.reconciliation,\n true,\n success,\n error);\n } else {\n activityReconciliationSvc.insertReconciliationDetail(\n $scope.reconciliation,\n true,\n success,\n error);\n }\n }\n\n function onNoClicked() {\n if ($scope.reconciliation.activityReconciliationID) {\n activityReconciliationSvc.updateReconciliationDetail(\n $scope.reconciliation,\n false,\n success,\n error);\n } else {\n activityReconciliationSvc.insertReconciliationDetail(\n $scope.reconciliation,\n false,\n success,\n error);\n }\n }\n\n function success() {\n $scope.$emit('activityReconciliationDetailSaved', {});\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n}]);","wbApp.controller('ActivityReconciliationIssuedInvoicesCtrl', ['$scope', '$modal', '$window', 'invoiceSvc',\nfunction ($scope, $modal, $window, invoiceSvc) {\n\n $scope.semesterID = null;\n $scope.activityID = null;\n $scope.studentID = null; \n\n var isActive = false;\n var loaded = false;\n\n $scope.relatedInvoices = null;\n\n function loadData(semesterID, activityID, studentID) {\n if (!!activityID && !!studentID) {\n $scope.relatedInvoices = invoiceSvc.getInvoiceEvidenceByActivityAndStudent(activityID, studentID);\n } else {\n $scope.relatedInvoices = null;\n }\n }\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 4) {\n if (!isActive) {\n isActive = true;\n if (!loaded && $scope.activityID && $scope.studentID) {\n loadData($scope.semesterID, $scope.activityID, $scope.studentID);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.$on('activityStudentSelectionChanged', function (e, data) {\n if (data.studentID != $scope.studentID ||\n data.activityID != $scope.activityID ||\n data.reasonCode == 'activityReconciliationChanged') {\n $scope.semesterID = data.semesterID;\n $scope.activityID = data.activityID;\n $scope.studentID = data.studentID;\n\n if (isActive) {\n loadData($scope.semesterID, $scope.activityID, $scope.studentID);\n loaded = true;\n } else {\n loaded = false;\n }\n }\n });\n\n\n $scope.relatedGridFilterOptions = {\n filterText: \"\"\n };\n\n $scope.relatedGridOptions = {\n sortInfo: { fields: ['recordNumber'], directions: ['dsc'] },\n columnDefs: [\n { field: 'isRecurring', displayName: \"TXT_LBL_RECURRING\", width: '90px', cellFilter: 'checkmark', smHide: true, mdHide: true },\n { field: 'recordNumber', displayName: \"TXT_LBL_INVOICE_NO\", width: '100px', smHide: true, mdHide: true },\n { field: 'typeID', displayName: \"TXT_LBL_TYPE\", cellFilter: 'invoiceForType', width: '55px', smHide: true, mdHide: true },\n { field: 'subject', displayName: \"TXT_LBL_SUBJECT\", sort: 'locale' },\n { field: 'invoiceDate', displayName: \"TXT_LBL_INVOICE_DATE\", cellFilter: \"date:'shortDate'\", width: '80px', smHide: true, mdHide: true },\n { field: 'dueDate', displayName: \"TXT_LBL_DUE_DATE\", cellFilter: \"date:'shortDate'\", width: '70px' },\n { field: 'total', displayName: \"TXT_LBL_AMOUNT\", cellFilter: 'wbCurrencyFlt', width: '130px', align: 'right' },\n { field: 'paymentSum', displayName: \"TXT_LBL_PAYMENTS_SUM\", cellFilter: 'wbCurrencyFlt', width: '130px', align: 'right', smHide: true },\n { field: 'latest', displayName: \"TXT_LBL_VALID\", cellFilter: 'invoiceValid', width: '90px' }\n ],\n customCmds: [\n {\n text: 'TXT_MENU_PRINT_INVOICE',\n // hide: function () { return true; },\n command: function (row) { onPrintInvoice(row.invoiceID); }\n }],\n disabledField: 'notLatest',\n disabledAreSelectable: true,\n hideDelete: function (row) { return !row.isRecurring; }\n };\n\n function onPrintInvoice(invoiceID) {\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n\n $scope.onRowDelete = function (row) {\n if (row.isRecurring) {\n invoiceSvc.remove(row, function () {\n loadData($scope.semesterID, $scope.activityID, $scope.studentID);\n });\n }\n }\n\n}]);","'use strict';\n\nwbApp.controller('ActivityReconciliationReconciliationCtrl', ['$scope', '$modal', '$q', '$window', 'activityReconciliationSvc',\nfunction ($scope, $modal, $q, $window, activityReconciliationSvc) {\n\n $scope.reconciliation = [];\n\n $scope.semesterID = null;\n $scope.activityID = null;\n $scope.studentID = null;\n $scope.studentFullName = null;\n\n var isActivite = false;\n var loaded = false;\n\n function reloadData() {\n if (isActivite) {\n if ($scope.activityID && $scope.studentID) {\n $scope.reconciliation = activityReconciliationSvc.getByStudentAndActivity(\n $scope.semesterID,\n $scope.activityID,\n $scope.studentID);\n loaded = true;\n } else {\n loaded = false;\n $scope.reconciliation = [];\n }\n }\n }\n\n $scope.$on('activityReconciliationDetailSaved', function (e, data) {\n reloadData();\n $scope.$emit('activityReconciliationChanged', { studentID: $scope.studentID });\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 2) {\n if (!isActivite) {\n isActivite = true;\n if (!loaded) {\n reloadData();\n }\n }\n } else {\n isActivite = false;\n }\n });\n\n $scope.$on('activityStudentSelectionChanged', function (e, data) {\n if (data.studentID != $scope.studentID ||\n data.activityID != $scope.activityID) {\n $scope.semesterID = data.semesterID;\n $scope.activityID = data.activityID;\n $scope.studentID = data.studentID;\n $scope.studentFullName = data.studentFullName;\n\n if (isActivite) {\n reloadData();\n } else {\n loaded = false;\n }\n } else {\n $scope.reconciliation.length = 0;\n }\n });\n\n $scope.acivityReconciliationReconciliationFilterOptions = {\n filterText: \"\"\n };\n\n $scope.acivityReconciliationReconciliationGridOptions = {\n sortInfo: { fields: ['reconciledAt'], directions: ['asc'] },\n columnDefs: [\n { field: 'reconciledAt', cellFilter: \"date:'shortDate'\", displayName: \"TXT_LBL_DATE\", width: '90px' },\n { field: 'name', width: '250px', displayName: \"TXT_LBL_NAME\" },\n { field: 'notes', displayName: \"TXT_LBL_NOTE\" },\n { field: 'debit', displayName: \"TXT_LBL_PRICE\", width: '90px', cellFilter: 'wbCurrencyFlt', align: 'right' },\n { field: 'credit', displayName: \"TXT_LBL_PAYMENTS\", width: '90px', cellFilter: 'wbCurrencyFlt', align: 'right' },\n { field: 'notificationSentAt', displayName: \"Oznámení\", width: '110px', cellFilter: \"date:'short'\" },\n ],\n customCmds: [\n {\n text: 'TXT_MENU_PRINT_INVOICE',\n hide: function (selected) { return !selected || !selected.invoiceID; },\n command: function (row) { $scope.onPrintInvoice(row); }\n }, {\n text: 'TXT_MENU_SEND_RECONCILIATION_INFO',\n hide: function (selected) { return !selected || !selected.invoiceID; },\n command: function (row) { $scope.onSendReconciliationInfo(row); }\n }]\n };\n\n $scope.onRowDelete = function (row) {\n activityReconciliationSvc.deleteReconciliationDetail(\n $scope.activityID,\n $scope.studentID,\n row.activityReconciliationID,\n success);\n\n function success() {\n reloadData();\n }\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.activityReconciliationID = null;\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (row) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.activityReconciliationID = row.activityReconciliationID;\n detailDialogPromise.show();\n });\n }\n\n $scope.onPrintInvoice = function (row) {\n $window.open('/Admin/Report/Invoice?ReportID=' + row.invoiceID + '&ReportIDType=1',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n\n }\n\n $scope.onSendReconciliationInfo = function (row) {\n activityReconciliationSvc.sendReconciliationNotification(\n $scope.activityID,\n $scope.studentID,\n row.activityReconciliationID,\n row.invoiceID,\n success);\n\n function success() {\n reloadData();\n }\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'activities/activity-reconciliation-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);","wbApp.controller('ActivityReconciliationRecurringInvoicesCtrl', ['$q', '$scope', '$modal', 'invoiceRecurrenceScheduleSvc',\nfunction ($q, $scope, $modal, invoiceRecurrenceScheduleSvc) {\n\n $scope.semesterID = null;\n $scope.activityID = null;\n $scope.studentID = null;\n\n var isActive = false;\n var loaded = false;\n\n function loadData(semesterID, activityID, studentID) {\n if ($scope.activityID && $scope.studentID) {\n $scope.recurringInvoices = invoiceRecurrenceScheduleSvc.getAllForStudentAndActivity(semesterID, studentID, activityID);\n loaded = true;\n } else {\n loaded = false;\n $scope.recurringInvoices = null;\n }\n }\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 3) {\n if (!isActive) {\n isActive = true;\n if (!loaded) {\n loadData($scope.semesterID, $scope.activityID, $scope.studentID);\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.$on('activityStudentSelectionChanged', function (e, data) {\n if (data.studentID != $scope.studentID ||\n data.activityID != $scope.activityID ||\n data.reasonCode == 'activityReconciliationChanged') {\n $scope.semesterID = data.semesterID;\n $scope.activityID = data.activityID;\n $scope.studentID = data.studentID;\n $scope.studentFullName = data.studentFullName;\n\n if (isActive) {\n loadData($scope.semesterID, $scope.activityID, $scope.studentID);\n } else {\n loaded = false;\n }\n }\n });\n\n\n $scope.acivityReconciliationRecurringInvoiceFilterOptions = {\n filterText: \"\"\n };\n\n $scope.acivityReconciliationRecurringInvoicesGridOptions = {\n sortInfo: { fields: ['reconciledAt'], directions: ['asc'] },\n columnDefs: [\n { field: 'active', displayName: \"TXT_LBL_ACTIVE\", cellFilter: 'checkmark', width: '70px' },\n { field: 'name', displayName: \"TXT_LBL_NAME\" },\n { field: 'repeatEveryNoOfUnits', displayName: \"TXT_LBL_REPEAT_EVERY\", width: '110px' },\n { field: 'reccurenceUnitTypeID', displayName: \"\", cellFilter: 'wbRecurrenceUnitTypeFlt', width: '130px' },\n { field: 'startDate', cellFilter: \"date:'shortDate'\", displayName: \"TXT_LBL_START_DATE\", width: '90px' },\n { field: 'endDate', cellFilter: \"date:'shortDate'\", displayName: \"TXT_LBL_END_DATE\", width: '90px' },\n { field: 'nextInvoice', cellFilter: \"date:'shortDate'\", displayName: \"TXT_LBL_NEXT_ISSUE\", width: '110px' },\n { field: 'invoiceTotal', cellFilter: \"wbCurrencyFlt\", displayName: \"TXT_LBL_SUMMARY\", align: 'right', width: '110px' }\n ],\n disabledField: 'notActive',\n disabledAreSelectable: true,\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onScheduleSave = function () {\n loadData($scope.semesterID, $scope.activityID, $scope.studentID);\n }\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n\n var model = invoiceRecurrenceScheduleSvc.createNew(\n $scope.semesterID, $scope.studentID, $scope.activityID);\n\n $q.all([detailDialogPromise.$promise, model.$promise]).then(function () {\n detailDialogPromise.$scope.model = model;\n detailDialogPromise.$scope.onScheduleSave = function () {\n loadData($scope.semesterID, $scope.activityID, $scope.studentID);\n }\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n invoiceRecurrenceScheduleSvc.remove(data, function () {\n loadData($scope.semesterID, $scope.activityID, $scope.studentID);\n });\n }\n\n $scope.recurringInvoices = [];\n\n var detailDialogPromise = $modal({\n templateUrl: 'activities/activity-reconciliation/recurring-invoice-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);","'use strict';\n\nwbApp.controller('ActivityReservationDetailCtrl', ['$scope', '$q', 'activityReservationSvc', 'activityStudentSettingSvc',\nfunction ($scope, $q, activityReservationSvc, activityStudentSettingSvc) {\n\n $scope.studentDetailModel = { days: [], onDataSourceChange: function () { }, applyChanges: function () { }};\n $scope.reservationsOrig = [];\n\n\n function reloadData(reservations, schedules, studentID, activityID, setting) {\n // todo: Check changes\n\n var model = activityReservationSvc.createStudentDetailModel(reservations, schedules, studentID, activityID, setting);\n $scope.reservationsOrig = angular.copy(reservations);\n $scope.activityTarifOrig = angular.copy(setting);\n $scope.studentDetailModel = model;\n }\n\n $scope.onStudentChange = function (studentID) {\n var res = activityReservationSvc.getAllByStudentAndActivity(\n studentID, $scope.reservationDetailModel.activityID);\n var set = activityStudentSettingSvc.getByStudentAndActivity(studentID, $scope.reservationDetailModel.activityID);\n\n $q.all([res.$promise, set])\n .then(function (data) {\n\n var reservations = data[0];\n var setting = data[1];\n\n setting.activityID = $scope.reservationDetailModel.activityID;\n setting.studentID = studentID;\n\n reloadData(reservations, $scope.reservationDetailModel.selection, studentID, $scope.reservationDetailModel.activityID, setting);\n }); \n }\n\n $scope.onWeekSelectionChange = function (selection) {\n $scope.studentDetailModel.applyChanges.call($scope.studentDetailModel);\n $scope.studentDetailModel.onDataSourceChange.call($scope.studentDetailModel);\n }\n\n $scope.saveActivityReservationDetailChanges = function () {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.studentDetailModel.applyChanges.call($scope.studentDetailModel);\n\n $scope.isSaving = true;\n\n var res = activityReservationSvc.saveAsync(\n $scope.studentDetailModel.reservations,\n $scope.reservationDetailModel.studentID,\n $scope.reservationDetailModel.activityID,\n $scope.reservationsOrig);\n\n var tar = activityStudentSettingSvc.saveAsync(\n $scope.studentDetailModel.activitySetting,\n $scope.activityTarifOrig);\n\n $q.all([res, tar])\n .then(function (data) {\n var resources = data[0];\n $scope.onActivityReservationSave(resources);\n }, function (reason) {\n $scope.activityReservationDetailError = reason;\n $scope.isSaving = false; \n });\n }\n\n if (!$scope.reservationDetailModel.isNew) {\n $scope.onStudentChange($scope.reservationDetailModel.studentID);\n }\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"activities/activity-reservation/detail-main-tab.html\"\n },\n {\n title: 'TXT_MENU_SETTING',\n template: \"activities/activity-reservation/detail-settings-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n\n}]);","'use strict';\n\nwbApp.controller('ActivityScheduleDetailCtrl', ['$scope', 'activityScheduleSvc', \nfunction ($scope, activityScheduleSvc) {\n\n // $scope.singlePeriodProgramOnly from caller\n\n function reloadData() {\n $scope.weeks = angular.copy($scope.activityWeeks);\n $scope.selection = [];\n for (var sw = 0; sw < $scope.selectedWeeks.length; sw++) {\n var sweek = $scope.selectedWeeks[sw];\n\n for (var w = 0; w < $scope.weeks.length; w++) {\n var week = $scope.weeks[w];\n if (week.weekNo === sweek.weekNo) {\n if (moment(week.startDay).isSame(moment(sweek.startDay))) {\n $scope.selection.push(week);\n }\n }\n }\n }\n\n $scope.scheduleDetailModel = new webooker_acivity_models.ScheduleDetail($scope.selection.slice(0));\n }\n\n $scope.onWeekSelectionChange = function (selection) {\n $scope.scheduleDetailModel.applyChanges.call($scope.scheduleDetailModel);\n $scope.scheduleDetailModel.scheduleWeeks.length = 0;\n $scope.scheduleDetailModel.scheduleWeeks.push.apply(\n $scope.scheduleDetailModel.scheduleWeeks,\n selection);\n $scope.scheduleDetailModel.onDataSourceChange.call($scope.scheduleDetailModel);\n }\n\n $scope.saveActivityDetailChanges = function (scheduleDetailModel) {\n $scope.activityScheduleDetailError = null;\n $scope.scheduleDetailModel.applyChanges.call($scope.scheduleDetailModel);\n\n activityScheduleSvc.saveAsync(\n $scope.weeks,\n $scope.semesterID,\n $scope.activityID)\n .then(function(data) {\n $scope.onScheduleDetailSave(data);\n }, function (reason) {\n $scope.activityScheduleDetailError = reason.data;\n });\n }\n\n reloadData();\n\n}]);","'use strict';\n\nwbApp.controller('ActivityScheduleInstructorsCtrl', ['$scope', '$modal', '$translate', '$filter', 'gridSortSvc','activityInstructorSvc',\nfunction ($scope, $modal, $translate, $filter, gridSortSvc, activityInstructorSvc) {\n\n $scope.activityWeeks = null;\n $scope.selection = null;\n $scope.activityID = null;\n $scope.semesterID = null;\n\n var selectedActivity = null;\n\n $scope.$on('activityScheduleSelectionChanged', function (e, data) {\n if (data.selection && data.selection.length > 0) {\n if (!angular.equals(data.selection, $scope.selection)) {\n $scope.semesterID = data.semesterID;\n $scope.instructors = activityInstructorSvc.getWeekModelByIntervals(data.semesterID, data.activityID, data.selection);\n\n $scope.instructors.$promise.then(function () {\n _.forEach($scope.instructors, function (w) {\n w.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n });\n });\n\n $scope.activityWeeks = data.activityWeeks;\n $scope.selection = data.selection;\n $scope.activityID = data.activityID;\n }\n } else {\n if (!!$scope.instructors) {\n $scope.instructors.length = 0;\n }\n\n $scope.semesterID = null;\n $scope.activityWeeks = data.activityWeeks;\n $scope.selection = null;\n $scope.activityID = null;\n }\n });\n\n\n $scope.$on('activitySelectionChanged', function (e, data) {\n if (data.activityID) {\n $scope.activityID = data.activityID;\n }\n\n selectedActivity = data.activity;\n });\n\n $scope.acivityScheduleInstructorsGridOptions = {\n name: 'selectedActivityScheduleInstructors',\n columns: [\n {\n dataField: 'fullName',\n dataType: 'string',\n caption: $translate.instant(\"TXT_HUMAN_NAME\"),\n width: '180px',\n sortOrder: 'asc',\n calculateSortValue: function (data) {\n return gridSortSvc.sortHumanFullName2(data, 'fullName')\n }\n },\n {\n dataField: 'monday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_MONDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.monday);\n },\n width: '70px',\n },\n {\n dataField: 'tuesday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_TUESDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.tuesday);\n },\n width: '70px'\n },\n {\n dataField: 'wednesday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_WEDNESDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.wednesday);\n },\n width: '70px'\n },\n {\n dataField: 'thursday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_THURSDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.thursday);\n },\n width: '70px'\n },\n {\n dataField: 'friday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_FRIDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.friday);\n },\n width: '70px'\n },\n {\n dataField: 'saturday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_SATURDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.saturday);\n },\n width: '70px'\n },\n {\n dataField: 'sunday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_SUNDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.saturday);\n },\n width: '70px'\n },\n {\n dataField: 'notes',\n dataType: 'string',\n caption: $translate.instant(\"TXT_LBL_NOTE\"),\n calculateCellValue: function (rowData) {\n return $filter('aggregateNotes')(rowData.notes);\n }\n }\n ],\n shouldDisableAdd: function () { return !$scope.selection; },\n }\n\n $scope.instructorDetailModel = null;\n\n $scope.onRowAdd = function () {\n $scope.instructorDetailModel = {\n isNew: true,\n employeeID: null,\n activityID: $scope.activityID,\n selection: $scope.selection.slice(0),\n activityWeeks: $scope.activityWeeks\n };\n\n detailDialogPromise.$promise.then(function () {\n $scope.activityInstructorsDetailError = null;\n detailDialogPromise.$scope.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (instructor) {\n\n $scope.instructorDetailModel = {\n isNew: false,\n employeeID: instructor.employeeID,\n activityID: $scope.activityID,\n selection: $scope.selection.slice(0),\n activityWeeks: $scope.activityWeeks\n };\n\n detailDialogPromise.$promise.then(function () {\n $scope.activityInstructorsnDetailError = null;\n detailDialogPromise.$scope.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n detailDialogPromise.show();\n });\n }\n\n $scope.onActivityInstructorSave = function () {\n detailDialogPromise.hide();\n // Reload data \n $scope.instructors = activityInstructorSvc.getWeekModelByIntervals(\n $scope.semesterID,\n $scope.activityID,\n $scope.selection);\n\n $scope.instructors.$promise.then(function () {\n _.forEach($scope.instructors, function (w) {\n w.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n });\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'activities/activity-instructor/detail.html',\n show: false,\n scope: $scope\n });\n\n\n}]);","'use strict';\n\nwbApp.controller('ActivityScheduleStudentsCtrl', ['$scope', '$modal', '$translate', '$filter', 'gridSortSvc', 'activityReservationSvc',\nfunction ($scope, $modal, $translate, $filter, gridSortSvc, activityReservationSvc) {\n\n $scope.activityWeeks = null;\n $scope.selection = null;\n $scope.activityID = null;\n $scope.semesterID = null;\n\n var selectedActivity = null;\n\n $scope.$on('activityScheduleSelectionChanged', function (e, data) {\n if (data.selection && data.selection.length > 0) {\n if (!angular.equals(data.selection, $scope.selection)) {\n $scope.semesterID = data.semesterID;\n $scope.students = activityReservationSvc.getWeekModelByIntervals(data.semesterID, data.activityID, data.selection);\n\n $scope.students.$promise.then(function () {\n _.forEach($scope.students, function (w) {\n w.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n });\n });\n\n $scope.activityWeeks = data.activityWeeks;\n $scope.selection = data.selection.slice(0);\n $scope.activityID = data.activityID;\n }\n } else {\n if (!!$scope.students) {\n $scope.students.length = 0;\n }\n\n $scope.semesterID = null;\n $scope.activityWeeks = data.activityWeeks;\n $scope.selection = null;\n $scope.activityID = null;\n }\n });\n\n $scope.$on('activitySelectionChanged', function (e, data) {\n if (data.activityID) {\n $scope.activityID = data.activityID;\n }\n\n selectedActivity = data.activity;\n });\n\n $scope.acivityScheduleStudentsGridOptions = {\n name: 'selectedActivityScheduleStudents',\n columns: [\n { \n dataField: 'fullName',\n dataType: 'string',\n caption: $translate.instant(\"TXT_HUMAN_NAME\"), \n width: '180px',\n sortOrder: 'asc',\n calculateSortValue: function (data) { \n return gridSortSvc.sortHumanFullName2(data, 'fullName') \n }\n },\n { \n dataField: 'monday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_MONDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.monday);\n },\n width: '70px', \n },\n { \n dataField: 'tuesday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_TUESDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.tuesday);\n },\n width: '70px'\n },\n { \n dataField: 'wednesday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_WEDNESDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.wednesday);\n },\n width: '70px'\n },\n { \n dataField: 'thursday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_THURSDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.thursday);\n },\n width: '70px' \n },\n { \n dataField: 'friday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_FRIDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.friday);\n },\n width: '70px'\n },\n { \n dataField: 'saturday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_SATURDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.saturday);\n },\n width: '70px'\n },\n { \n dataField: 'sunday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_SUNDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.saturday);\n },\n width: '70px'\n },\n { \n dataField: 'notes',\n dataType: 'string',\n caption: $translate.instant(\"TXT_LBL_NOTE\"),\n calculateCellValue: function (rowData) {\n return $filter('aggregateNotes')(rowData.notes);\n }\n }\n ],\n shouldDisableAdd: function () { return !$scope.selection; },\n }\n\n $scope.reservationDetailModel = null;\n\n $scope.onRowAdd = function () {\n $scope.reservationDetailModel = {\n isNew: true,\n studentID: null,\n activityID: $scope.activityID,\n selection: $scope.selection.slice(0),\n activityWeeks: $scope.activityWeeks\n };\n\n detailDialogPromise.$promise.then(function () {\n $scope.activityReservationDetailError = null;\n detailDialogPromise.$scope.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (student) {\n\n $scope.reservationDetailModel = {\n isNew: false,\n studentID: student.studentID,\n activityID: $scope.activityID,\n selection: $scope.selection.slice(0),\n activityWeeks: $scope.activityWeeks\n };\n\n detailDialogPromise.$promise.then(function () {\n $scope.activityReservationDetailError = null;\n detailDialogPromise.$scope.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n detailDialogPromise.show();\n });\n }\n\n $scope.onActivityReservationSave = function () {\n detailDialogPromise.hide();\n // Reload data \n $scope.students = activityReservationSvc.getWeekModelByIntervals(\n $scope.semesterID,\n $scope.activityID,\n $scope.selection);\n\n $scope.students.$promise.then(function () {\n _.forEach($scope.students, function (w) {\n w.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n });\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'activities/activity-reservation/detail.html',\n show: false,\n scope: $scope\n });\n\n\n}]);","'use strict';\n\nwbApp.controller('ActivitySchedulesCtrl', ['$scope', '$modal', '$timeout', 'messageBoxSvc', 'activitySvc', \n 'semesterSvc', 'activityScheduleSvc', 'securitySvc',\nfunction ($scope, $modal, $timeout, messageBoxSvc, activitySvc, semesterSvc, activityScheduleSvc, securitySvc) {\n\n $scope.gridOptions = {\n sortInfo: { fields: ['startDate'], directions: ['asc'] },\n // > 992\n columnDefs: [{ field: 'weekNo', displayName: \"TXT_LBL_WEEK_NO\", width: '70px', sortable: false },\n { field: 'startDate', displayName: \"TXT_LBL_FROM\", cellFilter: \"date:'shortDate'\", width: '80px', sortable: false },\n { field: 'endDate', displayName: \"TXT_LBL_TO\", cellFilter: \"date:'shortDate'\", width: '80px', sortable: false },\n { field: 'monday', displayName: \"TXT_MONDAY\", cellFilter: \"datePartOccupied\", width: '70px', sortable: false },\n { field: 'tuesday', displayName: \"TXT_TUESDAY\", cellFilter: \"datePartOccupied\", width: '70px', sortable: false },\n { field: 'wednesday', displayName: \"TXT_WEDNESDAY\", cellFilter: \"datePartOccupied\", width: '70px', sortable: false },\n { field: 'thursday', displayName: \"TXT_THURSDAY\", cellFilter: \"datePartOccupied\", width: '70px', sortable: false },\n { field: 'friday', displayName: \"TXT_FRIDAY\", cellFilter: \"datePartOccupied\", width: '70px', sortable: false },\n { field: 'saturday', displayName: \"TXT_SATURDAY\", cellFilter: \"datePartOccupied\", width: '70px', sortable: false },\n { field: 'sunday', displayName: \"TXT_SUNDAY\", cellFilter: \"datePartOccupied\", width: '70px', sortable: false },\n { field: 'notes', displayName: \"TXT_LBL_NOTE\", cellFilter: \"aggregateNotes\", sortable: false }\n ],\n noCommandColumn: false\n };\n\n var activitiesForSemester = [];\n var selectedActivity;\n\n $scope.semesterID;\n $scope.activityID;\n $scope.activityWeeks = [];\n var first = true;\n\n function selectFirst() {\n $scope.activityWeeks.$promise.then(function () { \n $timeout(function () {\n if ($scope.activityWeeks.length > 0) {\n var week = $scope.activityWeeks[0];\n week.isSelected = true;\n\n $scope.onWeekSelected(week);\n }\n })\n });\n }\n\n function changeActivity(activityId, realod) {\n\n selectedActivity = _.find(activitiesForSemester, { 'activityID': activityId });\n\n if (activityId) {\n $scope.activityWeeks = activityScheduleSvc.getWeeksAsync(\n $scope.semesterID, activityId, realod);\n\n $scope.activityWeeks.$promise.then(function () {\n _.forEach($scope.activityWeeks, function (w) {\n w.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n });\n });\n\n if (first) {\n first = false;\n selectFirst();\n }\n } else {\n $scope.activityWeeks.length = 0;\n }\n $scope.$broadcast('activityScheduleSelectionChanged', { selection: null });\n }\n\n $scope.onSemesterChange = function (semesterId) {\n activitySvc.getAllBySemesterIDAsync(semesterId).$promise.then(function (activities) {\n\n activitiesForSemester = activities;\n\n changeActivity(activities.length > 0 ? activities[0].activityID : null, true);\n\n $scope.$broadcast('activityScheduleSelectionChanged', { selection: null });\n });\n }\n\n $scope.onActivityChange = function (activity) {\n changeActivity(activity);\n\n $scope.$broadcast('activityScheduleSelectionChanged', { selection: null });\n $scope.$broadcast('activitySelectionChanged', {\n activityID: activity,\n activity: selectedActivity\n });\n }\n\n semesterSvc.getDefaultAsync().then(function (activeSemester) {\n if (activeSemester) {\n $scope.semesterID = activeSemester.id;\n $scope.onSemesterChange($scope.semesterID);\n } else {\n $scope.semesterID = null;\n }\n });\n\n $scope.scheduleDetailModel;\n $scope.scheduleDetailModelOrig;\n\n $scope.onRowEdit = function (activityWeeks) {\n\n var selection = [];\n if (activityWeeks) {\n selection.push(activityWeeks);\n }\n\n $scope.selectedWeeks = selection;\n\n detailDialogPromise.$promise.then(function () {\n $scope.activityScheduleDetailError = null;\n detailDialogPromise.$scope.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n detailDialogPromise.show();\n });\n }\n\n $scope.onScheduleDetailSave = function (data) {\n $scope.activityWeeks = data;\n $scope.selectedWeeks.length = 0;\n detailDialogPromise.hide();\n\n $scope.$broadcast('activityScheduleSelectionChanged', {\n semesterID: $scope.semesterID,\n activityID: $scope.activityID,\n selection: $scope.selectedWeeks,\n activityWeeks: $scope.activityWeeks\n });\n\n _.forEach($scope.activityWeeks, function (w) {\n w.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n });\n }\n\n $scope.onWeekSelected = function (data) {\n\n var selection = [];\n if (data) {\n selection.push(data);\n }\n $scope.selectedWeeks = selection;\n\n $scope.$broadcast('activityScheduleSelectionChanged', {\n semesterID: $scope.semesterID,\n activityID: $scope.activityID,\n selection: selection,\n activityWeeks: $scope.activityWeeks\n });\n }\n\n $scope.tabs = [];\n \n if (securitySvc.isInRole('ActivityReservation')) {\n $scope.tabs.push({\n title: 'TXT_LBL_STUDENTS',\n template: \"activities/activity-schedule-tabs/students.html\"\n });\n }\n\n if (securitySvc.isInRole('ActivityInstructor')) {\n $scope.tabs.push({\n title: 'TXT_LBL_INSTRUCTORS',\n template: \"activities/activity-schedule-tabs/instructors.html\"\n });\n }\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue });\n });\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'activities/activity-schedule-detail.html',\n show: false,\n scope: $scope\n });\n\n}]);","wbApp.controller('ActivityTariffCtrl', ['$scope', '$modal', 'activityTariffSvc',\nfunction ($scope, $modal, activityTariffSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['name'], directions: ['dsc'] },\n columnDefs: [{ field: 'name', displayName: \"TXT_LBL_NAME\", sort: 'locale' },\n { field: 'price', displayName: \"TXT_LBL_PRICE\", align: 'right', cellFilter: 'wbCurrencyFlt', width: '110px' }\n ]\n };\n\n $scope.$on('refreshData', function (e, data) {\n $scope.activityTariffs = activityTariffSvc.getAllNonDeletedAsync(true);\n });\n\n $scope.activityTariffs = activityTariffSvc.getAllNonDeletedAsync(true);\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = activityTariffSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n activityTariffSvc.remove(data);\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'activities/activity-tariffs/activity-tariffs-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('ActivityTariffDetailCtrl', ['$scope', 'activityTariffSvc',\nfunction ($scope, activityTariffSvc) {\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n function success() {\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n if (!model.activityTariffID) {\n activityTariffSvc.insert(model, success, error);\n } else {\n activityTariffSvc.update(model, success, error);\n }\n }\n\n}]);\n","wbApp.controller('ContractTemplateDetailDialogCtrl', ['$scope', 'contractTemplateSvc',\nfunction ($scope, contractTemplateSvc) {\n\n $scope.model = $scope.model ?? contractTemplateSvc.createNew();\n $scope.modelOrig = angular.copy($scope.model);\n \n $scope.isSaving = false;\n $scope.isLoading = false;\n \n $scope.onContractTemplateTypeChange = function(typeId)\n {\n $scope.isLoading = true;\n contractTemplateSvc.getSampleByType(typeId).$promise.then(function(templateSample) {\n $scope.model.templateData = templateSample.templateData;\n $scope.isLoading = false;\n }, function(err) {\n $scope.isLoading = false;\n })\n }\n\n if (!$scope.model.id) {\n $scope.onContractTemplateTypeChange(0);\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving || $scope.isLoading) {\n return;\n }\n\n $scope.isSaving = true;\n\n function success(data) {\n if (!!$scope.onSaveSuccessful) {\n $scope.onSaveSuccessful(data);\n }\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n if (!model.id) {\n contractTemplateSvc.insert(model).$promise.then(success, error);\n } else {\n contractTemplateSvc.update(model).$promise.then(success, error);\n } \n }\n\n}]);\n","wbApp.controller('ContractTemplatesCtrl', ['$scope', '$modal', '$translate', '$filter', '$timeout', '$q', 'contractTemplateSvc',\n'messageBoxSvc',\nfunction ($scope, $modal, $translate, $filter, $timeout, $q, contractTemplateSvc, messageBoxSvc) {\n\n $scope.model = {\n templateData: null\n };\n \n $scope.modelOrig = null;\n \n var htmlEditorComponent = null;\n $scope.contractTemplateId = null;\n \n function setContractTemplateId(newId) {\n if ($scope.contractTemplateId !== newId) {\n $scope.contractTemplateId = newId;\n }\n if (!!htmlEditorComponent) {\n htmlEditorComponent.option(\"readOnly\", !$scope.contractTemplateId);\n }\n }\n\n\n var modelWasModified = false;\n $scope.modelIsUnchanged = function () {\n \n return !modelWasModified;\n\n };\n \n function setVariables(variables) {\n if (!!htmlEditorComponent) {\n htmlEditorComponent.option(\"variables.dataSource\", variables);\n } \n }\n\n function loadData() {\n if (!$scope.contractTemplateId) {\n $scope.modelOrig = {\n templateData: null\n };\n $scope.model = {\n templateData: null\n };\n modelWasModified = false;\n setVariables([]);\n } else {\n let model = contractTemplateSvc.getById($scope.contractTemplateId);\n model.$promise.then(function () {\n let variables = contractTemplateSvc.getVariablesByType(model.contractTemplateType);\n variables.$promise.then(function() {\n $scope.model = model;\n $scope.modelOrig = angular.copy($scope.model);\n modelWasModified = false;\n setVariables(variables);\n htmlEditorComponent.endUpdate();\n });\n });\n }\n\n if (!!htmlEditorComponent) {\n htmlEditorComponent.option(\"readOnly\", !$scope.contractTemplateId);\n }\n }\n\n $scope.$on('refreshData', function (e, data) {\n $scope.onReloadTemplate();\n });\n \n $scope.onReloadTemplate = function() {\n if (!$scope.modelIsUnchanged()) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: $translate.instant('TXT_CONFIRM_CONTRACT_TEMPLATE_RELOAD_DATA'),\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: loadData\n }]\n });\n } else {\n loadData();\n }\n }\n \n $scope.onTemplateSelected = function() {\n if (!$scope.modelIsUnchanged() && !!$scope.modelOrig) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: $translate.instant('TXT_CONFIRM_LOAD_TEMPLATE_MODIFIED'),\n buttons: [{\n text: 'TXT_BTN_NO',\n callback: function() {\n setContractTemplateId($scope.modelOrig.id);\n }\n }, {\n text: 'TXT_BTN_YES',\n callback: loadData\n }]\n }); \n } else {\n loadData();\n }\n }\n \n $scope.onNewTemplate = function() {\n\n function showNewDialog() {\n dialogPromise.$promise.then(function () {\n dialogPromise.$scope.model = null;\n dialogPromise.$scope.onSaveSuccessful = function(model) {\n $scope.$broadcast('refreshContractTemplateCombo', { id: model.id });\n setContractTemplateId(model.id);\n loadData();\n };\n dialogPromise.show();\n });\n }\n \n if (!$scope.modelIsUnchanged() && !!$scope.modelOrig) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: $translate.instant('TXT_CONFIRM_NEW_TEMPLATE_MODIFIED'),\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: showNewDialog\n }]\n });\n } else {\n showNewDialog();\n }\n }\n \n $scope.onRenameTemplate = function() {\n dialogPromise.$promise.then(function () {\n dialogPromise.$scope.model = angular.copy($scope.model);\n dialogPromise.$scope.onSaveSuccessful = function(model) {\n $scope.$broadcast('refreshContractTemplateCombo', { id: model.id });\n setContractTemplateId(model.id);\n loadData();\n };\n dialogPromise.show();\n }); \n }\n\n $scope.onSaveTemplate = function() {\n contractTemplateSvc.update($scope.model).$promise.then(function(model) {\n $scope.model = model;\n $scope.modelOrig = angular.copy($scope.model);\n modelWasModified = false;\n\n });\n }\n\n $scope.onDeleteTemplate = function() {\n \n function deleteTemplate() {\n contractTemplateSvc.remove($scope.model.id).$promise.then(function() {\n $scope.$broadcast('refreshContractTemplateCombo', { });\n $scope.contractTemplateId = null;\n loadData();\n });\n }\n \n if (!$scope.modelIsUnchanged() && !!$scope.modelOrig) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: $translate.instant('TXT_CONFIRM_DELETE_TEMPLATE_MODIFIED'),\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: deleteTemplate\n }]\n });\n } else {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: $translate.instant('TXT_CONFIRM_DELETE_TEMPLATE_UNMODIFIED'),\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: deleteTemplate\n }]\n });\n } \n }\n \n $scope.onGeneratePreview = function(id) {\n contractTemplateSvc.update($scope.model).$promise.then(function(model) {\n $scope.model = model;\n $scope.modelOrig = angular.copy($scope.model);\n modelWasModified = false;\n window.open(\"restapi/contract-templates/\" + id + \"/preview\", '_blank');\n });\n \n // $(\"#dataDownloadIFrame\").remove();\n // $(\"body\").append(\"\"); \n }\n \n $scope.htmlEditorOptions = {\n width: \"100%\",\n height: \"100%\",\n valueType: \"html\",\n readOnly: true,\n toolbar: {\n items: [\n \"undo\",\n \"redo\",\n \"separator\",\n {\n name: \"size\",\n acceptedValues: [\"8pt\", \"10pt\", \"12pt\", \"14pt\", \"18pt\", \"24pt\", \"36pt\"]\n },\n {\n name: \"font\",\n acceptedValues: [\"Arial\", \"Georgia\", \"Tahoma\", \"Times New Roman\", \"Verdana\"]\n },\n \"separator\",\n \"bold\",\n \"italic\",\n \"strike\",\n \"underline\",\n \"separator\",\n \"alignLeft\",\n \"alignCenter\",\n \"alignRight\",\n \"alignJustify\",\n \"separator\",\n \"orderedList\",\n \"bulletList\",\n \"separator\",\n {\n name: \"header\",\n acceptedValues: [false, 1, 2, 3, 4, 5]\n },\n \"separator\",\n \"color\",\n \"background\",\n \"separator\",\n \"link\",\n \"image\",\n \"separator\",\n \"clear\",\n \"codeBlock\",\n \"blockquote\",\n \"separator\",\n \"insertTable\",\n \"deleteTable\",\n \"insertRowAbove\",\n \"insertRowBelow\",\n \"deleteRow\",\n \"insertColumnLeft\",\n \"insertColumnRight\",\n \"deleteColumn\",\n \"cellProperties\",\n \"tableProperties\",\n \"variable\"\n ],\n multiline: true\n },\n tableContextMenu: {\n enabled: true\n },\n mediaResizing: {\n enabled: true\n },\n allowSoftLineBreak: true,\n // Template reload or show preview generates an error and break the editor. Probably DevExpress issue\n // tableResizing: {\n // enabled: true \n // },\n variables: {\n dataSource: [],\n escapeChar: [\"\", \"\"]\n },\n bindingOptions: {\n value: \"model.templateData\"\n },\n onContentReady: function (e) {\n htmlEditorComponent = e.component;\n },\n onValueChanged: function (e) {\n if (e.event !== undefined) {\n modelWasModified = true;\n }\n },\n customizeModules: function (config) {\n config.history = {\n delay: 0,\n maxStack: 5000\n };\n }\n }\n\n var dialogPromise = $modal({\n templateUrl: 'activities/contract-templates/contract-template-detail-dialog.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('ContractsCtrl', ['$scope', '$modal', '$translate', '$filter', '$timeout', '$q', 'contractSvc', 'groupSvc', 'securitySvc',\nfunction ($scope, $modal, $translate, $filter, $timeout, $q, contractSvc, groupSvc, securitySvc) {\n\n $scope.contractsRaw = [];\n $scope.contracts = [];\n $scope.groups = groupSvc.getAllAsync();\n $scope.customFilter = { groups: [] };\n \n function preFilter() {\n return $q(function (resolve, reject) {\n $q.all([$scope.contractsRaw.$promise, $scope.groups.$promise]).then(function () {\n var groupIDs = _.values($scope.customFilter.groups);\n $scope.contracts.length = 0;\n $scope.contracts.push.apply($scope.contracts,\n _.filter($scope.contractsRaw, function (o) {\n if (groupIDs.length > 0) {\n return _.intersectionWith(o.studentGroupsIds, groupIDs, function(g1, g2) {\n return g1 == g2;\n }).length > 0;\n }\n return true;\n })\n );\n resolve();\n });\n });\n } \n \n function refreshData(reselect)\n {\n return $q(function (resolve, reject) {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n let all = contractSvc.getAll(true);\n all.$promise.then(function (data) {\n $scope.contractsRaw = data;\n preFilter().then(function() {\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedContract(null);\n }\n })\n }, 100);\n }\n else {\n setSelectedContract(null);\n }\n\n resolve();\n });\n }, function (error) {\n $scope.contracts = [];\n setSelectedContract(null);\n\n reject();\n });\n });\n }\n\n refreshData();\n\n $scope.$on('refreshData', function (e, data) {\n refreshData(true);\n });\n\n $scope.$watch('customFilter', function (newValue, oldValue) {\n preFilter();\n }, true);\n\n $scope.onRowSelected = function (data) {\n setSelectedContract(data);\n }\n\n let onPrintContractByType = function (model, contractTemplateType) {\n window.open(\"restapi/contracts/\" + model.id + \"/report/\" + contractTemplateType, '_blank');\n }\n\n $scope.gridSettings = {\n name: 'contracts',\n keyExpr: 'id',\n shouldShowColumnChooser: true,\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n { dataField: 'isActive', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\n { dataField: 'fromDate', caption: $translate.instant('TXT_LAB_VALID_FROM'), dataType: 'date', format: { type: 'shortDate' }, width: '80px' },\n { dataField: 'toDate', caption: $translate.instant('TXT_LAB_VALID_TO'), dataType: 'date', format: { type: 'shortDate' }, width: '80px' },\n {\n dataField: 'studentSurname',\n caption: $translate.instant('TXT_LBL_STUDENT'),\n dataType: 'string',\n width: '140px',\n calculateCellValue: function (rowData) {\n return String.prototype.fullName(rowData.studentName, rowData.studentMiddleName, rowData.studentSurname);\n }\n },\n {\n dataField: 'userSurname',\n caption: $translate.instant('TXT_LBL_PARENT'),\n dataType: 'string',\n width: '140px',\n calculateCellValue: function (rowData) {\n return String.prototype.fullName(rowData.userName, rowData.userMiddlename, rowData.userSurname);\n }\n }, \n {\n dataField: 'contractSchedules',\n caption: $translate.instant('TXT_SCHEDULE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('contractScheduleShort')(rowData.contractSchedules);\n }\n },\n {\n dataField: 'studentGroupsIds',\n caption: $translate.instant('TXT_MENU_GROUPS'),\n dataType: 'string',\n encodeHtml: false,\n allowFiltering: false,\n allowHeaderFiltering: false,\n calculateCellValue: function (rowData) {\n return $filter('groupsColors')(rowData.studentGroupsIds);\n },\n width: '80px'\n }, \n {\n dataField: 'accountingBookId',\n caption: $translate.instant('TXT_LBL_ACCOUNTING_BOOK'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('accountingBook')(+rowData.accountingBookId);\n },\n width: '180px',\n visible: false\n }, \n ],\n customCommands: [{\n text: $translate.instant('TXT_MENU_PRINT_CONTRACT'),\n isVisible: function (data) { return securitySvc.isInRole('Reports') && !!contractSvc.getContractTemplateIdByType(data, 0); },\n callback: function (data) { onPrintContractByType(data, 0); } \n },{\n text: $translate.instant('TXT_MENU_PRINT_DOCTORS_ASSESSMENT'),\n isVisible: function (data) { return securitySvc.isInRole('Reports') && !!contractSvc.getContractTemplateIdByType(data, 1); },\n callback: function (data) { onPrintContractByType(data, 1); }\n },{\n text: $translate.instant('TXT_MENU_PRINT_REGISTRATION_SHEET'),\n isVisible: function (data) { return securitySvc.isInRole('Reports') && !!contractSvc.getContractTemplateIdByType(data, 2); },\n callback: function (data) { onPrintContractByType(data, 2); }\n },{\n text: $translate.instant('TXT_MENU_PRINT_LABOR_MARKET_POSITION'),\n isVisible: function (data) { return securitySvc.isInRole('Reports') && !!contractSvc.getContractTemplateIdByType(data, 3); },\n callback: function (data) { onPrintContractByType(data, 3); }\n },{\n text: $translate.instant('TXT_MENU_PRINT_GDPR'),\n isVisible: function (data) { return securitySvc.isInRole('Reports') && !!contractSvc.getContractTemplateIdByType(data, 4); },\n callback: function (data) { onPrintContractByType(data, 4); }\n },{\n text: $translate.instant('TXT_MENU_PRINT_CUSTOM_1'),\n isVisible: function (data) { return securitySvc.isInRole('Reports') && !!contractSvc.getContractTemplateIdByType(data, 6); },\n callback: function (data) { onPrintContractByType(data, 6); }\n },{\n text: $translate.instant('TXT_MENU_PRINT_CUSTOM_2'),\n isVisible: function (data) { return securitySvc.isInRole('Reports') && !!contractSvc.getContractTemplateIdByType(data, 7); },\n callback: function (data) { onPrintContractByType(data, 7); }\n },{\n text: $translate.instant('TXT_SEND_CONTRACTS'),\n isVisible: function (data) { return !!data.contractTemplatesInfos }, \n callback: function (data) { onShowSendContractsParamsDialog(data); },\n beginGroup: true\n },{\n text: $translate.instant('TXT_OPZ_PLUS'),\n isVisible: function (data) { return securitySvc.isInRole('Reports') },\n callback: function (data) { onShowOpzPlusParamsDialog(); },\n beginGroup: true\n }]\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n contractSvc.createNew().then(function(newModel) {\n detailDialogPromise.$scope.model = newModel;\n detailDialogPromise.$scope.onContractSave = function (model) {\n refreshData().then(function () {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedContract(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n });\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onContractSave = function () {\n refreshData(true);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n contractSvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n } \n\n $scope.onRowCopy = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.model.isNew = true;\n detailDialogPromise.$scope.model.id = null;\n detailDialogPromise.$scope.onContractSave = function (model) {\n refreshData().then(function () {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedContract(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n \n function onShowSendContractsParamsDialog(contract) {\n sendContractsParamsDialogPromise.$promise.then(function () {\n sendContractsParamsDialogPromise.$scope.contract = angular.copy(contract);\n // sendContractsParamsDialogPromise.$scope.onContractsSend = function () {\n // };\n sendContractsParamsDialogPromise.show();\n }); \n }\n \n function onShowOpzPlusParamsDialog() {\n opzPlusParamsDialogPromise.$promise.then(function() {\n opzPlusParamsDialogPromise.show();\n });\n }\n \n function setSelectedContract(contract, refresh) {\n $scope.selectedContract = contract;\n $scope.$broadcast('contractSelectionChanged', $scope.selectedContract);\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'activities/contracts/contract-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var sendContractsParamsDialogPromise = $modal({\n templateUrl: 'activities/contracts/send-contracts-params-dialog.html',\n show: false,\n scope: $scope.$new()\n });\n\n var opzPlusParamsDialogPromise = $modal({\n templateUrl: 'activities/contracts/opz-plus-params-dialog.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('ContractsDetailCtrl', ['$scope', '$modal', 'contractSvc',\nfunction ($scope, $modal, contractSvc) {\n\n $scope.model = contractSvc.transformModelForEdit($scope.model);\n \n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onDeleteSchedule = function(schedule) {\n const index = $scope.model.contractSchedules.indexOf(schedule);\n if (index > -1) {\n $scope.model.contractSchedules.splice(index, 1);\n }\n if ($scope.model.contractSchedules.length === 0) {\n $scope.onAddSchedule();\n }\n }\n \n $scope.onAddSchedule = function() {\n $scope.model.contractSchedules.push({\n monday: { active: false, startTime: null, endTime: null, food: false },\n tuesday: { active: false, startTime: null, endTime: null, food: false },\n wednesday: { active: false, startTime: null, endTime: null, food: false },\n thursday: { active: false, startTime: null, endTime: null, food: false },\n friday: { active: false, startTime: null, endTime: null, food: false },\n saturday: { active: false, startTime: null, endTime: null, food: false },\n sunday: { active: false, startTime: null, endTime: null, food: false },\n });\n }\n \n $scope.onActiveClick = function(daySchedule, active) {\n if (!active) {\n daySchedule.startTime = null;\n daySchedule.endTime = null;\n daySchedule.food = false;\n }\n }\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n let modelForSave = contractSvc.transformModelForSave(angular.copy(data));\n \n $scope.isSaving = true;\n\n if (!data.id) {\n contractSvc.insert(modelForSave)\n .$promise.then(success, error);\n } else {\n contractSvc.update(modelForSave)\n .$promise.then(success, error);\n }\n\n function success(newModel) {\n $scope.onContractSave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function() {\n return true;\n }\n \n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"activities/contracts/contract-detail-main-tab.html\"\n },{\n title: 'TXT_SCHEDULE',\n template: \"activities/contracts/contract-detail-schedule-tab.html\"\n },{\n title: 'TXT_TEMPLATES',\n template: \"activities/contracts/contract-detail-templates-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n}]);\n","wbApp.controller('ContractsOpzPlusParamsCtrl', ['$scope', '$q', '$translate', 'groupSvc',\n function ($scope, $q, $translate, groupSvc) {\n $scope.isSaving = false;\n \n $scope.model = {\n fromDate: moment().toDate(),\n toDate: moment().toDate(),\n groupId: null\n };\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.groups = groupSvc.getAllAsync();\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onDetailSave = function (model) {\n $scope.$hide();\n let fromDate = moment(model.fromDate).startOf('day').toDate();\n let toDate = moment(model.toDate).endOf('day').toDate();\n window.open(\"restapi/contracts/exports/opzplus?fromDate=\" + fromDate.toJSON() + \"&toDate=\" + toDate.toJSON() + \"&groupId=\" + model.groupId, '_blank');\n };\n\n }]);\n\n","wbApp.controller('ContractsSendContractsParamsCtrl', ['$scope', '$modal', 'contractSvc',\nfunction ($scope, $modal, contractSvc) {\n\n let editContractModel = contractSvc.transformModelForEdit($scope.contract);\n \n $scope.model = {\n contractTemplateType0Enabled: !!editContractModel.contractTemplateType0,\n contractTemplateType1Enabled: !!editContractModel.contractTemplateType1,\n contractTemplateType2Enabled: !!editContractModel.contractTemplateType2,\n contractTemplateType3Enabled: !!editContractModel.contractTemplateType3,\n contractTemplateType4Enabled: !!editContractModel.contractTemplateType4,\n contractTemplateType6Enabled: !!editContractModel.contractTemplateType6,\n contractTemplateType7Enabled: !!editContractModel.contractTemplateType7,\n\n contractTemplateType0: false,\n contractTemplateType1: false,\n contractTemplateType2: false,\n contractTemplateType3: false,\n contractTemplateType4: false,\n contractTemplateType6: false,\n contractTemplateType7: false,\n }\n\n $scope.isFormValid = function() {\n return !!$scope.model.contractTemplateType0 ||\n !!$scope.model.contractTemplateType1 ||\n !!$scope.model.contractTemplateType2 ||\n !!$scope.model.contractTemplateType3 ||\n !!$scope.model.contractTemplateType4 ||\n !!$scope.model.contractTemplateType6 ||\n !!$scope.model.contractTemplateType7;\n }\n\n $scope.onDetailSave = function (model) {\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n \n let typesToSend = [];\n if (!!$scope.model.contractTemplateType0) {\n typesToSend.push(0);\n }\n if (!!$scope.model.contractTemplateType1) {\n typesToSend.push(1);\n }\n if (!!$scope.model.contractTemplateType2) {\n typesToSend.push(2);\n }\n if (!!$scope.model.contractTemplateType3) {\n typesToSend.push(3);\n }\n if (!!$scope.model.contractTemplateType4) {\n typesToSend.push(4);\n }\n if (!!$scope.model.contractTemplateType6) {\n typesToSend.push(6);\n }\n if (!!$scope.model.contractTemplateType7) {\n typesToSend.push(7);\n }\n\n contractSvc.sendContracts($scope.contract.id, typesToSend).$promise.then(function() {\n $scope.isSaving = false;\n $scope.$hide();\n }, function(error) {\n $scope.detailError = error;\n $scope.isSaving = false;\n })\n \n }\n}]);\n","'use strict';\n\nwbApp.controller('CzMsMtRegistryCtrl', ['$scope', '$modal', '$timeout', '$q', '$translate', '$filter', 'czMsMtRegistrySvc', 'semesterSvc', 'activitySvc',\n function ($scope, $modal, $timeout, $q, $translate, $filter, czMsMtRegistrySvc, semesterSvc, activitySvc) {\n\n $scope.isSaving = false;\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.semesterID = null;\n $scope.activityID = null;\n $scope.czMsMtRegistry = [];\n\n $q.all([semesterSvc.getDefaultAsync()])\n .then(function (data) {\n if (data[0]) {\n $scope.semesterID = data[0].id;\n }\n\n // $scope.activities = activitySvc.getAllBySemesterIDAsync(\n // $scope.semesterID != null ? $scope.semesterID : null);\n });\n\n $scope.onSemesterChange = function (semesterId) {\n $scope.activityID = null;\n $scope.czMsMtRegistry = [];\n setSelectedStudent({});\n }\n\n $scope.onActivityChange = function (activityId) {\n refreshData();\n setSelectedStudent({});\n }\n \n function refreshData() {\n if (!!$scope.activityID) {\n czMsMtRegistrySvc.findLatestByActivity($scope.activityID).$promise.then(function (data) {\n $scope.czMsMtRegistry = data;\n });\n }\n }\n\n function setSelectedStudent(record, refresh) {\n $scope.selectedRecord = record;\n $scope.studentFullName = String.prototype.fullName(record.studentName, record.studentMiddleName, record.studentSurname);\n $scope.parentFullName = String.prototype.fullName(record.userName, record.userMiddleName, record.userSurname);\n \n if (!!record) {\n $scope.$broadcast('selectedStudentChanged', {\n studentId: record.studentId,\n refresh: !!refresh,\n recordId: record.id\n });\n } else {\n $scope.$broadcast('selectedStudentChanged', {\n studentId: null,\n refresh: !!refresh,\n recordId: null\n }); \n }\n }\n\n $scope.$on('refreshData', function (e, data) {\n refreshData();\n });\n\n $scope.gridSettings = {\n name: 'czMsMtRegistry',\n columns: [\n {\n dataField: 'studentSurname',\n caption: $translate.instant('TXT_LBL_STUDENT'),\n dataType: 'string',\n \n calculateCellValue: function (rowData) {\n return String.prototype.fullName(rowData.studentName, rowData.studentMiddleName, rowData.studentSurname);\n }\n },\n {\n dataField: 'userSurname',\n caption: $translate.instant('TXT_LBL_PARENT'),\n dataType: 'string',\n width: '140px',\n calculateCellValue: function (rowData) {\n return String.prototype.fullName(rowData.userName, rowData.userMiddlename, rowData.userSurname);\n }\n },\n { dataField: 'provoz', caption: 'Provoz', dataType: 'string', width: '80px',},\n { dataField: 'validFromUtc', caption: $translate.instant('TXT_LAB_VALID_FROM'), dataType: 'date', format: { type: 'shortDate' }, width: '80px' },\n { dataField: 'isValid', caption: 'Validní', dataType: 'boolean', width: '60px' },\n { dataField: 'requireSpecialEducation', caption: 'Spec', dataType: 'boolean', width: '60px' },\n ],\n shouldDisableDelete: function () { return !$scope.selectedRecord || !$scope.selectedRecord.isLast; },\n customCommands: [{\n text: 'Předávání dat (Export XML)',\n callback: function (data) { onShowExportDetailDialog(); },\n }]\n }\n\n $scope.onRowSelected = function (data) {\n setSelectedStudent(data);\n }\n\n $scope.onRowAdd = function () {\n if (!!$scope.semesterID && !!$scope.activityID) {\n $q.all([\n detailDialogPromise.$promise,\n czMsMtRegistrySvc.createNew($scope.semesterID, $scope.activityID)\n ]).then(function(dataP) {\n detailDialogPromise.$scope.model = dataP[1];\n detailDialogPromise.$scope.onRegistryDetailSave = function (data) {\n refreshData(true);\n $scope.$broadcast('selectedStudentChanged', { studentId: data.studentId, refresh: true, recordId: data.id });\n };\n detailDialogPromise.show();\n })\n }\n }\n\n \n $scope.onRowEdit = function (data) {\n\n let modelPromise = czMsMtRegistrySvc.getById(data.id);\n $q.all([modelPromise, detailDialogPromise.$promise]).then(function(model) {\n detailDialogPromise.$scope.model = model[0];\n detailDialogPromise.$scope.onRegistryDetailSave = function (data) {\n refreshData(true);\n $scope.$broadcast('selectedStudentChanged', { studentId: data.studentId, refresh: true, recordId: data.id });\n };\n detailDialogPromise.show();\n \n });\n }\n\n $scope.onRowDelete = function (data) {\n czMsMtRegistrySvc.remove(data.id).$promise.then(function () {\n refreshData(true);\n setSelectedStudent(null);\n });\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"cz-ms-mt-registry/detail-tabs/home.html\",\n },\n {\n title: 'Všechny věty studenta',\n template: \"cz-ms-mt-registry/cz-ms-mt-registry-detail-tabs-student-records.html\",\n }\n ];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n \n let detailDialogPromise = $modal({\n templateUrl: 'cz-ms-mt-registry/cz-ms-mt-registry-detail.html',\n show: false,\n scope: $scope.$new(true)\n });\n \n function onShowExportDetailDialog() {\n exportDialogPromise.$promise.then(function() {\n exportDialogPromise.show();\n });\n }\n\n let exportDialogPromise = $modal({\n templateUrl: 'cz-ms-mt-registry/cz-ms-mt-registry-export-detail.html',\n show: false,\n scope: $scope.$new(true)\n });\n }]);","wbApp.controller('CzMsMtRegistryDetailCtrl', ['$scope', '$modal', 'czMsMtRegistrySvc', 'messageBoxSvc',\nfunction ($scope, $modal, czMsMtRegistrySvc, messageBoxSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n $scope.lastValidatedModel = angular.copy($scope.model);\n\n $scope.onStudentChange = function(studentId) {\n czMsMtRegistrySvc.changeStudentId($scope.model, studentId);\n }\n \n $scope.onActivityChange = function () {\n czMsMtRegistrySvc.changeActivityId($scope.model, $scope.model.activityId);\n }\n \n $scope.onSaveAsANewRecord = function(data) {\n czMsMtRegistrySvc.validate(data).$promise.then(function(success) {\n if (success.length === 0) {\n detailSaveAsNewImpl(data);\n }\n else {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: 'Záznam není validní! Opravdu chcete vytvořit novou větu k tomuto studentovi?',\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n detailSaveAsNewImpl(data);\n }\n }]\n });\n }\n });\n }\n \n $scope.onDetailSave = function (data) {\n if ($scope.modelOrig.isValid) {\n // Record was valid before, let's try to validate it again \n let dataCopy = angular.copy(data);\n czMsMtRegistrySvc.validate(dataCopy).$promise.then(function(success) {\n if (success.length === 0) {\n detailSaveImpl(data);\n } else {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: 'Záznam není validní! Před Vaší poslední úpravou byl záznam validní. Opravdu chcete tuto změnu uložit?',\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n detailSaveImpl(data);\n }\n }]\n });\n }\n });\n } else {\n detailSaveImpl(data);\n }\n }\n \n function detailSaveAsNewImpl(data) {\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n let dataCopy = angular.copy(data);\n dataCopy.id = null;\n \n czMsMtRegistrySvc.insert(dataCopy)\n .$promise.then(success, error);\n\n function success(newModel) {\n $scope.onRegistryDetailSave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n } \n }\n \n function detailSaveImpl(data) {\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n let dataCopy = angular.copy(data);\n \n if (!data.id) {\n czMsMtRegistrySvc.insert(dataCopy)\n .$promise.then(success, error);\n } else {\n czMsMtRegistrySvc.update(dataCopy)\n .$promise.then(success, error);\n }\n\n function success(newModel) {\n $scope.onRegistryDetailSave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n \n $scope.onValidate = function (data) {\n if ($scope.isValidating) {\n return;\n }\n \n $scope.isValidating = true;\n let dataCopy = angular.copy(data);\n \n czMsMtRegistrySvc.validate(dataCopy).$promise.then(function(success) {\n $scope.isValidating = false;\n if (success.length === 0) {\n data.isValid = true;\n $scope.lastValidatedModel = angular.copy(data);\n } else {\n data.isValid = false;\n $scope.lastValidatedModel = angular.copy(data);\n\n let message = '';\n _.forEach(success, function (s) {\n message += '
' + s + '
';\n });\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_INFORMATION',\n message: message,\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n }\n }, function(error) {\n $scope.isValidating = false;\n alert(error);\n });\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function(data) {\n return angular.equals(data, $scope.lastValidatedModel) && $scope.lastValidatedModel.isValid;\n }\n \n $scope.requireSpecialEducationChanged = function(requireSpecialEducation) {\n czMsMtRegistrySvc.setRequireSpecialEducation($scope.model, requireSpecialEducation);\n }\n \n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"cz-ms-mt-registry/cz-ms-mt-registry-detail-main-tab.html\"\n },{\n title: 'TXT_LBL_ATTENDANCE',\n template: \"cz-ms-mt-registry/cz-ms-mt-registry-detail-attendance-tab.html\"\n },{\n title: 'Platnost věty',\n template: \"cz-ms-mt-registry/cz-ms-mt-registry-detail-changes-tab.html\"\n },{\n title: 'Speciální potřeby',\n template: \"cz-ms-mt-registry/cz-ms-mt-registry-detail-special-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n \n $scope.validFromUtc_help = \"

\\\"Začátek platnosti věty\\\" se uvádí datum, od kterého platí kombinace hodnot položek uvedená v datové větě. U téhož\\n\" +\n \" žáka/studenta musí jednotlivé předávané věty na sebe přesně časově navazovat. Se začátkem platnosti nové věty\\n\" +\n \" s aktualizovaným obsahem položek se zároveň ukončuje platnost předchozí věty, a to dnem předcházejícím. Položka\\n\" +\n \" \\\"Začátek platnosti věty\\\" musí být vyplněna u každé věty

\\n\" +\n \"

U žáků/studentů se vytváří nová věta vždy minimálně k 1. 9., kdy žáci postupují do vyšších ročníků, mění se název\\n\" +\n \" třídy, příp. opakují ročník. U individuálního vzdělávacího plánu, který stanovuje organizaci vzdělávání odlišně\\n\" +\n \" od standardního období školního roku, se rovněž vždy k 1. 9. vytváří nová věta.

\"\n \n $scope.kodVety_help = \"Kód věty (podle číselníku RAKV) rozlišuje, za koho se příslušná věta předává, a umožňuje kontrolovat správnost\\n\" +\n \"vyplnění ostatních položek. Jiné vyplnění položek je požadováno ve větě o žákovi/studentovi, jiné ve větě\\n\" +\n \"o absolventovi, o osobě s přerušeným vzděláváním nebo ukončeným vzděláváním bez absolvování (předepsaná\\n\" +\n \"zkouška nesložena), apod.\";\n \n $scope.zmendat_help = \"\\n\" +\n \"

\\n\" +\n \" Za každého žáka se předává tolik vět, kolikrát se změnil obsah předávaných údajů za vykazované období (nezahrnuje\\n\" +\n \" opravy chybně zadaných údajů!!!). Předávají se vždy úplné věty, obsahující všechny povinné položky, přičemž tyto\\n\" +\n \" věty na sebe časově plynule navazují.\\n\" +\n \"

\" +\n \"

\\n\" +\n \" Položka KOD_ZMEN v sobě obsahuje informaci o registrované změně, jež je už promítnuta v položkách této aktuální\\n\" +\n \" věty. Kód změny uvedený podle číselníku RAKZ se tedy objevuje ve větě s „novými“ údaji. Pokud došlo k několika\\n\" +\n \" změnám ve stejném termínu, uvádí se kód odpovídající hlavnímu důvodu vzniku nové věty\\\". Zjednodušeně by se dalo\\n\" +\n \" říci, že \\\"vyšší\\\" hodnota kódu má přednost před \\\"nižší\\\" (výjimkou je kód 8). Nejvyšší prioritu však má KOD_ZMEN=7\\n\" +\n \" změna osobního identifikátoru – v takovém případě se v komentáři uvede doposud uváděný identifikátor.\\n\" +\n \" Standardní postoupení do vyššího ročníku sice vytváří vždy novou větu, ale tato očekávaná změna se nepromítá\\n\" +\n \" do změnových položek.\\n\" +\n \"

\";\n \n $scope.validToUtc_help = \"

\\n\" +\n \" V položce PLAT_KON se uvádí datum, do kterého platila kombinace hodnot položek uvedená v datové větě.\\n\" +\n \"

\\n\" +\n \"

\\n\" +\n \" V aktuálně platné větě zůstává položka PLAT_KON prázdná, neboť konec platnosti této věty ještě nenastal.\\n\" +\n \" Jinými slovy u vět, které jsou aktuální a tudíž platné, je položka PLAT_KON nevyplněna, neuvádí se předpokládané\\n\" +\n \" budoucí datum ukončení platnosti věty.\\n\" +\n \"

\";\n \n $scope.zahdat_help = \"

\\n\" +\n \" Zahájení školního vzdělávání se vztahuje k aktuální škole, případně druhu studia (přechod do nástavbového nebo\\\\n\\\" +\\n\" +\n \" \\\"zkráceného studia pro získání středního vzdělání). Pokud žák přestupuje z jiné školy podle §§ 45, 66 nebo 97\\\\n\\\" +\\n\" +\n \" \\\"školského zákona, uvede se kód pro přestup z jiné školy.\\n\" +\n \"

\";\n \n $scope.izo_help = \"

\\n\" +\n \" Resortní identifikátor školy (IZO), se objevuje v názvu souboru, v záhlaví souboru a v každé větě souboru v položce\\n\" +\n \" IZO. V názvu souboru i uvnitř souboru musí být ve všech větách uvedeno stejné IZO.\\n\" +\n \" Je třeba rozlišovat resortní identifikátor právnické osoby vykonávající činnost školy (RED_IZO), uváděný od roku\\n\" +\n \" 2011 na vysvědčeních o maturitní zkoušce, a resortní identifikátor školy (IZO), který se uvádí na dalších dokladech\\n\" +\n \" o vzdělání (vyhláška č. 3/2015 Sb. o některých dokladech o vzdělání, ve znění pozdějších předpisů).\\n\" +\n \"

\";\n \n $scope.cast_help = \"

\\n\" +\n \" Číslo části je uvedeno (podobně jako IZO) v názvu souboru, v záhlaví souboru a v každé větě za každou vykazovanou\\n\" +\n \" osobu v položce CAST a v souboru za jednu část musí být všude stejné. Jde o rozlišení jednotlivých míst\\n\" +\n \" poskytovaného vzdělávání v rámci jednoho druhu školy (jednoho platného IZO) pomocí znaků 01, 02, atd.\\n\" +\n \"

\\n\" +\n \"

\\n\" +\n \" Číslo části v předávaných souborech musí odpovídat stavu v nabídce „Nastavení částí“ v aplikaci pro předání dat ze\\n\" +\n \" školních matrik. Čísla částí u jednotlivých míst by měla škola zkontrolovat a podle potřeby upravit před každým\\n\" +\n \" novým sběrem dat tak, aby odpovídala počtu předávaných souborů a jejich označení.\\n\" +\n \"

\";\n \n \n}]);\n","wbApp.controller('CzMsMtRegistryExportDetailCtrl', ['$scope', '$modal', 'czMsMtRegistrySvc', '$q', 'activitySvc',\nfunction ($scope, $modal, czMsMtRegistrySvc, $q, activitySvc) {\n\n $scope.model = czMsMtRegistrySvc.newExportModel();\n $scope.activities = activitySvc.getInfoByRange($scope.model.fromDate, $scope.model.toDate);\n $scope.activities.$promise.then(function() {\n if (activitiesComboInstance != null) {\n $scope.model.activityIds = _.map($scope.activities, 'id');\n }\n });\n \n let activitiesComboInstance = null;\n \n function initExportResponse() {\n $scope.exportResponse = {\n errors: [],\n filesToDownload: []\n };\n }\n \n $scope.onDateRangeChanged = function() {\n if ($scope.model.fromDate && $scope.model.toDate &&\n moment($scope.model.fromDate).isBefore(moment($scope.model.toDate))) {\n $scope.activities = activitySvc.getInfoByRange($scope.model.fromDate, $scope.model.toDate);\n $scope.activities.$promise.then(function() {\n if (activitiesComboInstance != null) {\n $scope.model.activityIds = _.map($scope.activities, 'id');\n } \n });\n } else {\n $scope.activities = [];\n }\n }\n \n $scope.isGenerating = false;\n\n initExportResponse();\n \n $scope.getDownloadUrl = function(downloadUri) {\n return `/restapi/cz-ms-mt-registry/registry-export/${downloadUri}`\n }\n \n $scope.getFileName = function(downloadUri) {\n return downloadUri.split('-').pop();\n }\n \n $scope.onGenerateExport = function() {\n \n if ($scope.isGenerating) {\n return;\n }\n\n $scope.isGenerating = true;\n\n initExportResponse(); \n \n czMsMtRegistrySvc.exportToXml($scope.model).$promise.then(function(result) {\n $scope.exportResponse = result;\n $scope.isGenerating = false;\n }, function (error) {\n $scope.isGenerating = false;\n });\n }\n \n $scope.onErrorClick = function(id) {\n let modelPromise = czMsMtRegistrySvc.getById(id);\n $q.all([modelPromise.$promise, detailDialogPromise.$promise]).then(function() {\n detailDialogPromise.$scope.model = modelPromise;\n detailDialogPromise.$scope.onRegistryDetailSave = function () {\n };\n detailDialogPromise.show();\n });\n }\n \n $scope.onDruhProvozuChanged = function() {\n $scope.model.prumDobaCelodenniProvoz = 0;\n $scope.model.prumDobaPolodenniProvoz = 0;\n $scope.model.prumDobaInternatniProvoz = 0;\n }\n\n let detailDialogPromise = $modal({\n templateUrl: 'cz-ms-mt-registry/cz-ms-mt-registry-detail.html',\n show: false,\n scope: $scope.$new(true)\n });\n \n $scope.activitiesCombo = {\n //items: $scope.activities,\n displayExpr: 'name',\n valueExpr: 'id',\n showSelectionControls: true,\n maxDisplayedTags: 6,\n multiline: false,\n\n itemTemplate: 'customItem',\n bindingOptions: {\n items: 'activities',\n value: 'model.activityIds'\n },\n onInitialized: function (e) {\n activitiesComboInstance = e.component;\n }\n }\n \n}]);\n","'use strict';\r\n\r\nwbApp.controller('CzMsMtRegistryStudentRecordsCtrl', ['$scope', '$q', '$modal', '$window', '$translate', '$filter', 'securitySvc', 'tenantSettingSvc', 'czMsMtRegistrySvc', 'gridSortSvc',\r\nfunction ($scope, $q, $modal, $window, $translate, $filter, securitySvc, tenantSettingSvc, czMsMtRegistrySvc, gridSortSvc) {\r\n\r\n $scope.tenantSettings = tenantSettingSvc.settings;\r\n\r\n $scope.selectedStudentInd = {};\r\n let isActive = false;\r\n let loaded = false;\r\n $scope.studentRecords = [];\r\n\r\n function refreshData(studentId) {\r\n $scope.studentRecords = czMsMtRegistrySvc.findByStudent(studentId);\r\n }\r\n \r\n \r\n $scope.$on('selectedStudentChanged', function (e, studentInd) {\r\n if (studentInd.studentId) {\r\n if (isActive) {\r\n if ($scope.selectedStudentInd.studentId !== studentInd.studentId || studentInd.refresh) {\r\n refreshData(studentInd.studentId);\r\n }\r\n loaded = true;\r\n } else {\r\n loaded = false;\r\n }\r\n } else {\r\n $scope.studentRecords = [];\r\n }\r\n $scope.selectedStudentInd = studentInd;\r\n });\r\n\r\n $scope.$on('activeTabChanged', function (e, data) {\r\n if (data.activeTab === 1) {\r\n if (!isActive) {\r\n isActive = true;\r\n if (!loaded && $scope.selectedStudentInd && $scope.selectedStudentInd.studentId) {\r\n refreshData($scope.selectedStudentInd.studentId);\r\n loaded = true;\r\n }\r\n }\r\n } else {\r\n isActive = false;\r\n }\r\n });\r\n\r\n $scope.studentRecordsGridSettings = {\r\n name: 'studentRecords',\r\n columns: [\r\n {\r\n dataField: 'studentSurname',\r\n caption: $translate.instant('TXT_LBL_STUDENT'),\r\n dataType: 'string',\r\n\r\n calculateCellValue: function (rowData) {\r\n return String.prototype.fullName(rowData.studentName, rowData.studentMiddleName, rowData.studentSurname);\r\n }\r\n },\r\n { dataField: 'semesterName', caption: $translate.instant('TXT_LBL_SEMESTER'), dataType: 'string', width: '110px',},\r\n { dataField: 'activityName', caption: $translate.instant('TXT_LBL_ACTIVITY'), dataType: 'string', width: '110px',},\r\n { dataField: 'validFromUtc', caption: $translate.instant('TXT_LAB_VALID_FROM'), dataType: 'date', format: { type: 'shortDate' }, width: '90px', sortOrder: 'desc' },\r\n { dataField: 'validToUtc', caption: $translate.instant('TXT_LAB_VALID_TO'), dataType: 'date', format: { type: 'shortDate' }, width: '90px' },\r\n { dataField: 'isValid', caption: 'Validní', dataType: 'boolean', width: '60px' },\r\n { dataField: 'requireSpecialEducation', caption: 'Spec', dataType: 'boolean', width: '60px' },\r\n ],\r\n shouldDisableDelete: function () { return !$scope.selectedRecord1 || !$scope.selectedRecord1.isLast; },\r\n onRowPrepared: function (e) {\r\n if (e.rowType === \"data\" && $scope.selectedStudentInd) {\r\n let data = e.component.getKeyByRowIndex(e.rowIndex);\r\n if (data.id === $scope.selectedStudentInd.recordId) {\r\n e.rowElement.addClass('text-success');\r\n }\r\n }\r\n },\r\n // onCellPrepared: function (e) {\r\n // if (e.rowType === \"data\" && e.columnIndex == 2) {\r\n // e.cellElement.mousemove(function () {\r\n // if (!!e.data.studentBirthday) {\r\n // e.cellElement.attr('title', $translate.instant(\"TXT_LAB_BIRTHDAY\") + \": \" + $filter('date')(e.data.studentBirthday, 'shortDate'));\r\n // }\r\n // });\r\n // }\r\n // },\r\n // customCommands: [{\r\n // text: $translate.instant('TXT_MENU_CREATE_PAYMENT'),\r\n // isVisible: function (row) { return (row.arrear > 0) && securitySvc.isInRole('Payment.Insert'); },\r\n // callback: function (row) { addPayment(row); }\r\n // },{\r\n // text: $translate.instant('TXT_MENU_PRINT_INVOICE'),\r\n // isVisible: function () { return securitySvc.isInRole('Reports') && securitySvc.isInRole('CourseRegistration.PrintInvoice'); },\r\n // callback: function (data) { onPrintInvoice(data.courseRegistrationID); }\r\n // }, {\r\n // text: $translate.instant('TXT_MENU_PRINT_APPLICATION_FORM'),\r\n // isVisible: function () { return securitySvc.isInRole('Reports') && securitySvc.isInRole('CourseRegistration.PrintApplicationForm'); },\r\n // callback: function (data) { onPrintApplicationForm(data.courseRegistrationID); }\r\n // }, {\r\n // text: $translate.instant('TXT_MENU_PRINT_INFO_CARD'),\r\n // isVisible: function () { return securitySvc.isInRole('Course.InfoCard') && securitySvc.isInRole('Reports'); },\r\n // callback: function (data) { onPrintInfoCard(data.courseID, data.studentID); }\r\n // }, {\r\n // text: $translate.instant('TXT_MENU_RESEND_COURSE_REGISTRATION_NOTIFICATION'),\r\n // isVisible: function () { return securitySvc.isInRole('CourseRegistration'); },\r\n // callback: function (data) {\r\n // courseRegistrationSvc.sendRegistrationNotification(data.courseRegistrationID)\r\n // .then(function () {\r\n // data.notificationSent = true;\r\n // });\r\n // }\r\n // }]\r\n }\r\n\r\n $scope.onRowSelected = function (data) {\r\n $scope.selectedRecord1 = data;\r\n }\r\n \r\n // $scope.onRowEdit = function (data) {\r\n // detailDialogPromise.$promise.then(function () {\r\n // detailDialogPromise.$scope.course = $scope.selectedCourse;\r\n // detailDialogPromise.$scope.model = new webooker_courses_models.CourseRegistration(data);\r\n // detailDialogPromise.$scope.onAfterSuccessSave = function () {\r\n // $scope.courseRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedCourse.courseID);\r\n // onCourseScheduleChanged();\r\n // }\r\n // detailDialogPromise.show();\r\n // });\r\n // }\r\n //\r\n // $scope.onRowAdd = function () {\r\n //\r\n // $q.all([detailDialogPromise.$promise, courseRegistrationSvc.createNew($scope.selectedCourse, false)])\r\n // .then(function (data) {\r\n // var courseRegistration = data[1];\r\n // detailDialogPromise.$scope.course = $scope.selectedCourse;\r\n // detailDialogPromise.$scope.model = courseRegistration;\r\n // detailDialogPromise.$scope.onAfterSuccessSave = function () {\r\n // $scope.courseRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedCourse.courseID);\r\n // onCourseScheduleChanged();\r\n // }\r\n // detailDialogPromise.show();\r\n // });\r\n // }\r\n //\r\n $scope.onRowDelete = function (data) {\r\n czMsMtRegistrySvc.remove(data.id).$promise.then(function () {\r\n refreshData($scope.selectedStudentInd.studentId);\r\n $scope.$emit('refreshData', null);\r\n $scope.selectedRecord1 = null;\r\n });\r\n }\r\n\r\n $scope.onRowEdit = function (data) {\r\n\r\n let modelPromise = czMsMtRegistrySvc.getById(data.id);\r\n $q.all([modelPromise.$promise, detailDialogPromise.$promise]).then(function() {\r\n detailDialogPromise.$scope.model = modelPromise;\r\n detailDialogPromise.$scope.onRegistryDetailSave = function () {\r\n refreshData($scope.selectedStudentInd.studentId);\r\n $scope.$emit('refreshData', null);\r\n };\r\n detailDialogPromise.show();\r\n\r\n });\r\n }\r\n\r\n let detailDialogPromise = $modal({\r\n templateUrl: 'cz-ms-mt-registry/cz-ms-mt-registry-detail.html',\r\n show: false,\r\n scope: $scope\r\n });\r\n\r\n}]);\r\n","wbApp.controller('GalleryInfoEditDialogCtrl', ['$scope', 'protectedStorageSvc', 'securitySvc',\nfunction ($scope, protectedStorageSvc, securitySvc) {\n\n $scope.isSaving = false;\n $scope.galleryDirectory = $scope.galleryDirectory || \"\";\n $scope.modelOrig = angular.copy($scope.model);\n $scope.images = [];\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.detailGalleryEditTabs = [{\n title: 'TXT_MAIN',\n template: \"activities/gallery-info-edit-dlg-main-tab.html\"\n }];\n if (securitySvc.isInRole('ProtectedStorage')) {\n $scope.detailGalleryEditTabs.push({\n title: 'TXT_LBL_PICTURES',\n template: \"activities/gallery-info-edit-dlg-pictures-tab.html\"\n });\n }\n\n $scope.detailGalleryEditTabs.activeTab = 0;\n\n $scope.$watch('detailGalleryEditTabs.activeTab', function (newValue, oldValue) {\n switch (newValue) {\n case 1:\n loadPictures();\n break;\n }\n });\n \n function loadPictures() {\n protectedStorageSvc.findGalleryInfoByPaths([$scope.galleryDirectory], true)\n .$promise.then(function(data) {\n $scope.images.length = 0;\n $scope.images.push.apply($scope.images,data[0].images);\n }, function error() {\n \n });\n }\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n\n protectedStorageSvc.updateGalleryInfo(model, $scope.galleryDirectory)\n .$promise.then(function () {\n $scope.isSaving = false;\n $scope.$hide();\n if ($scope.onGalleryInfoSave) {\n $scope.onGalleryInfoSave(model);\n }\n }, function (data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n });\n }\n\n}]);\n","wbApp.directive('wbActivityCompensationTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(paymentType) {\n if (!paymentType) { return; }\n return $translate.instant(paymentType.text);\n }\n\n function formatSelection(paymentType) {\n return $translate.instant(paymentType.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_VAL_ACTIVITY_COMPENSATION_TYPE_ONE_FOR_ONE' },\n { id: 1, text: 'TXT_VAL_ACTIVITY_COMPENSATION_TYPE_TWO_FOR_ONE' },\n { id: 2, text: 'TXT_VAL_ACTIVITY_COMPENSATION_TYPE_DISABLED' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbActivityTariffsCombo', ['$timeout', '$translate', '$filter', 'activityTariffSvc',\n function ($timeout, $translate, $filter, activityTariffSvc) {\n function formatResult(tariff) {\n if (!tariff) { return; }\n\n // return tariff.name;\n\n return \"
\" +\n \"
\" + tariff.name + \"
\" +\n \"
\" + $filter('wbCurrencyFlt')(tariff.price) + \"
\" +\n \"
\";\n }\n\n function formatSelection(tariff) {\n return tariff.name + ' (' + $filter('wbCurrencyFlt')(tariff.price) + ')';\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n var models = activityTariffSvc.getAllNonDeletedAsync(false, scope.ngModel);\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_ACTIVITY_TARIFF'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: -1,\n id: function (model) { return model.activityTariffID; },\n data: models\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n ctrl.$render = function () {\n if (models.$promise) {\n models.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n }\n }\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbActivityWeekEditor', [\n function () {\n\n return {\n restrict: 'A',\n priority: 1,\n replace: true,\n scope: {\n ngModel: '=',\n inLineNote: '=',\n scheduleOnly: '=',\n foodSupport: '=',\n singlePeriod: '='\n },\n templateUrl: 'activities/directives/activity-week-editor.html',\n link: function (scope, elem, attrs) {\n\n scope.selectedDay = {};\n\n scope.onNoteClick = function (day) {\n scope.selectedDay = day;\n }\n }\n }\n }]);","wbApp.directive('wbActivityWeekSelector', [\n function () {\n\n function createScheduleModel(weeks, selection, restrictToSchedules) {\n\n function isSelected(selection, week) {\n for (var i = 0; i < selection.length; i++) {\n var s = selection[i];\n if (s.weekNo === week.weekNo &&\n moment(s.startDate).isSame(moment(week.startDate))) {\n return true;\n }\n }\n return false;\n }\n\n function Schedule(weeks, selection, restrictToSchedules) {\n this.rows = [];\n this.restrictToSchedules = restrictToSchedules;\n\n var newRow = [];\n this.rows.push(newRow);\n\n for (var idx = 0; idx < weeks.length; idx++) {\n if (idx % 6 === 0 && idx > 0) {\n newRow = [];\n this.rows.push(newRow);\n }\n newRow.push({\n selected: isSelected(selection, weeks[idx]) &&\n ((weeks[idx].schedules && weeks[idx].schedules.length > 0) || !this.restrictToSchedules),\n week: weeks[idx]\n });\n }\n }\n\n Object.defineProperty(Schedule.prototype, 'allSelected', {\n enumerable: true, configurable: true,\n get: function () {\n var selected = true;\n for (var r = 0; r < this.rows.length; r++) {\n var row = this.rows[r];\n for (var c = 0; c < row.length; c++) {\n var column = row[c];\n if ((column.week.schedules && column.week.schedules.length > 0) || !this.restrictToSchedules) {\n selected &= column.selected;\n }\n }\n }\n return selected !== 0;\n },\n set: function (val) {\n for (var r = 0; r < this.rows.length; r++) {\n var row = this.rows[r];\n for (var c = 0; c < row.length; c++) {\n var column = row[c];\n if ((column.week.schedules && column.week.schedules.length > 0) || !this.restrictToSchedules) {\n column.selected = val;\n }\n }\n }\n }\n });\n\n return new Schedule(weeks, selection, restrictToSchedules);\n }\n\n return {\n restrict: 'A',\n priority: 1,\n replace: true,\n scope: {\n ngModel: '=',\n selection: '=',\n restrictToSchedules: '=',\n ngChange: '&'\n },\n templateUrl: 'activities/directives/activity-week-selector.html',\n link: function (scope, elem, attrs) {\n\n scope.schedule = [];\n\n scope.$watch('ngModel', function (newValue, oldValue) {\n if (scope.selection) {\n scope.schedule = createScheduleModel(newValue, scope.selection, scope.restrictToSchedules);\n }\n });\n\n scope.$watch('schedule', function (model) {\n scope.selection.length = 0;\n for (var r = 0; r < model.rows.length; r++) {\n var row = model.rows[r];\n for (var c = 0; c < row.length; c++) {\n var column = row[c];\n if (column.selected) {\n scope.selection.push(column.week);\n }\n }\n }\n if (scope.ngChange()) {\n scope.ngChange()(scope.selection);\n }\n }, true);\n }\n }\n }]);","wbApp.directive('wbContractTemplateCombo', ['$timeout', '$translate', '$filter', 'contractTemplateSvc',\n function ($timeout, $translate, $filter, contractTemplateSvc) {\n \n function formatResult(model) {\n if (!model) { return; }\n \n return \"
\" +\n \"
\" + $filter('contractTemplateType')(model.contractTemplateType) + \"
\" +\n \"
\" + model.name + \"
\" +\n \"
\";\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n scope: {\n ngModel: '=',\n showClearButton: '=',\n contractTemplateType: '=?'\n },\n link: function (scope, elm, attrs, controller) {\n\n function init() {\n models.$promise.then(function () {\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_CONTRACT_TEMPLATE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: !!scope.showClearButton,\n minimumResultsForSearch: 5,\n id: function (model) {\n return model.id;\n },\n data: models,\n matcher: function (term, text, data) {\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n }\n });\n\n controller.$render();\n }, 1);\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n\n });\n }\n\n var models = contractTemplateSvc.getAllWithFilter(false, scope.contractTemplateType);\n models.$promise.then(function() {\n $timeout(function () {\n if (!scope.showClearButton && models.length === 1) {\n controller.$setViewValue(models[0].id);\n }\n });\n })\n\n scope.$on('refreshContractTemplateCombo', function (e, data) {\n models = contractTemplateSvc.getAllWithFilter(true, scope.contractTemplateType);\n models.$promise.then(function () {\n $timeout(function () {\n var selection = (!data || !data.id) \n ? elm.select2('val')\n : data.id;\n elm.select2('destroy');\n init();\n controller.$setViewValue(selection);\n });\n });\n });\n\n init(); \n }\n }\n }]);","wbApp.directive('wbContractTemplateTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(model) {\n if (!model) { return; }\n return $translate.instant(model.text);\n }\n\n function formatSelection(model) {\n return $translate.instant(model.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_LBL_CONTRACT_KINDERGARTEN' },\n { id: 1, text: 'TXT_LBL_DOCTORS_ASSESSMENT' },\n { id: 2, text: 'TXT_LBL_REGISTRATION_SHEET' },\n { id: 3, text: 'TXT_LBL_LABOR_MARKET_POSITION' },\n { id: 4, text: 'TXT_LBL_GDPR' },\n { id: 5, text: 'TXT_FROM_TYPE_KINDERGARTEN_ENROLLMENT' },\n { id: 6, text: 'TXT_FROM_TYPE_KINDERGARTEN_CUSTOM1' },\n { id: 7, text: 'TXT_FROM_TYPE_KINDERGARTEN_CUSTOM2' },\n { id: 8, text: 'TXT_ADMISSION_ACCEPTANCE' },\n { id: 9, text: 'TXT_ADMISSION_REJECTION' } \n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbCzMsMtListUniversalCombo', ['$timeout', '$translate', 'czMsMtRegistrySvc',\n function ($timeout, $translate, czMsMtRegistrySvc) {\n function format(item) {\n if (item.id) return item.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n scope: {\n ngModel: '=',\n listName: '=',\n multiSelect: '=' \n },\n link: function (scope, elm, attrs, controller) {\n \n let allLists = czMsMtRegistrySvc.lists();\n allLists.$promise.then(function() {\n $timeout(function () {\n $(elm).select2({\n placeholder: 'Nevyplněno',\n formatResult: format,\n formatSelection: format,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: 5,\n id: function (model) {\n return model.id;\n },\n data: allLists[scope.listName],\n matcher: function (term, text, data) {\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n },\n multiple: scope.multiSelect || false,\n maximumSelectionSize: 5\n });\n\n controller.$render = function () {\n if (allLists.$promise) {\n allLists.$promise.then(function() {\n elm.select2('val', controller.$viewValue);\n });\n }\n };\n\n if (scope.multiSelect) {\n controller.$parsers.unshift(function (viewValue) {\n if (Array.isArray(viewValue)) {\n if (viewValue.length === 0) {\n return null;\n } \n return viewValue.join(\",\");\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return null;\n }\n return _.map(value.split(','), function (n) {\n return n + '';\n }).join(\",\");\n });\n }\n \n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n \n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n \n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n \n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n }, 1);\n });\n }\n }\n }]);","wbApp.directive('wbEndIssueTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(paymentType) {\n if (!paymentType) { return; }\n return $translate.instant(paymentType.text);\n }\n\n function formatSelection(paymentType) {\n return $translate.instant(paymentType.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_LBL_AT_DATE' },\n { id: 2, text: 'TXT_LBL_AFTER_NO_OF_ISSUES' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbReconciliationDataRangeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_LBL_FROM_LAST_RECONCILIATION' },\n { id: 2, text: 'TXT_LBL_FROM_DATE_TO_DATE' } \n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbRecurrenceUnitTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(paymentType) {\n if (!paymentType) { return; }\n return $translate.instant(paymentType.text);\n }\n\n function formatSelection(paymentType) {\n return $translate.instant(paymentType.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_LBL_DAY' },\n { id: 2, text: 'TXT_LBL_WEEK' },\n { id: 3, text: 'TXT_LBL_MONTH' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.filter('aggregateNotes', ['$translate', function ($translate) {\n return function (input) {\n if (input) {\n return input.f(\n $translate.instant('TXT_MONDAY_SHORT'),\n $translate.instant('TXT_TUESDAY_SHORT'),\n $translate.instant('TXT_WEDNESDAY_SHORT'),\n $translate.instant('TXT_THURSDAY_SHORT'),\n $translate.instant('TXT_FRIDAY_SHORT'),\n $translate.instant('TXT_SATURDAY_SHORT'),\n $translate.instant('TXT_SUNDAY_SHORT'));\n }\n return '';\n };\n}]);","wbApp.filter('contractScheduleShort', ['$translate', function ($translate) {\n\n /*\n \"contractSchedules\": [\n {\n \"id\": \"e845febe-9e2f-4dd3-93eb-6d055f81c476\",\n \"fromDate\": \"2022-01-01T00:00:00\",\n \"toDate\": \"2022-04-01T00:00:00\",\n \"monday\": {\n \"startTime\": 480,\n \"endTime\": 960,\n \"food\": true\n },\n \"tuesday\": {\n \"startTime\": 480,\n \"endTime\": 960,\n \"food\": true\n },\n \"wednesday\": {\n \"startTime\": 480,\n \"endTime\": 840,\n \"food\": true\n }\n }\n ] \n */\n \n return function (input) {\n if (input) {\n \n return _.reduce(input, function(result, schedule) {\n if (!!result) {\n result += \" | \";\n }\n result += moment(schedule.fromDate).format('DD.MM.YY') + ' - ' + moment(schedule.toDate).format('DD.MM.YY') + ' [';\n \n let days = [];\n if (!!schedule.monday) {\n days.push($translate.instant('TXT_MONDAY_SHORT'));\n }\n if (!!schedule.tuesday) {\n days.push($translate.instant('TXT_TUESDAY_SHORT'));\n }\n if (!!schedule.wednesday) {\n days.push($translate.instant('TXT_WEDNESDAY_SHORT'));\n }\n if (!!schedule.thursday) {\n days.push($translate.instant('TXT_THURSDAY_SHORT'));\n }\n if (!!schedule.friday) {\n days.push($translate.instant('TXT_FRIDAY_SHORT'));\n }\n if (!!schedule.saturday) {\n days.push($translate.instant('TXT_SATURDAY_SHORT'));\n }\n if (!!schedule.sunday) {\n days.push($translate.instant('TXT_SUNDAY_SHORT'));\n }\n \n return result + days.join(',') + ']';\n }, '');\n }\n };\n}]);","wbApp.filter('contractTemplateType', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 0:\n return $translate.instant('TXT_LBL_CONTRACT_KINDERGARTEN');\n case 1:\n return $translate.instant('TXT_LBL_DOCTORS_ASSESSMENT');\n case 2:\n return $translate.instant('TXT_LBL_REGISTRATION_SHEET');\n case 3:\n return $translate.instant('TXT_LBL_LABOR_MARKET_POSITION');\n case 4:\n return $translate.instant('TXT_LBL_GDPR');\n case 5:\n return $translate.instant('TXT_FROM_TYPE_KINDERGARTEN_ENROLLMENT');\n case 6:\n return $translate.instant('TXT_FROM_TYPE_KINDERGARTEN_CUSTOM1');\n case 7:\n return $translate.instant('TXT_FROM_TYPE_KINDERGARTEN_CUSTOM2');\n case 8:\n return $translate.instant('TXT_ADMISSION_ACCEPTANCE');\n case 9:\n return $translate.instant('TXT_ADMISSION_REJECTION');\n default:\n return '';\n }\n };\n}]);","wbApp.filter('datePartOccupied', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 'am':\n return $translate.instant('TXT_DATE_PART_AM');\n case 'pm':\n return $translate.instant('TXT_DATE_PART_PM');\n case 'both':\n return $translate.instant('TXT_DATE_PART_FULL_DAY');\n case 'indeterminate':\n return $translate.instant('TXT_DATE_PART_INDETERMINATE');\n }\n return '';\n };\n}]);","wbApp.filter('wbCzMsMtListUniversalFlt', ['$translate', 'czMsMtRegistrySvc', function ($translate, czMsMtRegistrySvc) {\n let allLists = czMsMtRegistrySvc.lists();\n\n function asyncResult(input, listName) {\n if (allLists.$resolved) {\n let model = _.find(allLists[listName], { id: input });\n if (model) {\n return model.name;\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n }\n\n asyncResult.$stateful = true;\n\n return asyncResult;\n}]);","wbApp.filter('wbRecurrenceUnitTypeFlt', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 1:\n return $translate.instant('TXT_LBL_DAY');\n case 2:\n return $translate.instant('TXT_LBL_WEEK');\n case 3:\n return $translate.instant('TXT_LBL_MONTH');\n }\n return '';\n };\n}]);","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region InvoiceBase - Ctor \n ns.InvoiceBase = function InvoiceBase(isReccuring) {\n this.isReccuring = isReccuring;\n }\n // #endregion\n\n // #region InvoiceBase - Methods\n\n ns.InvoiceBase.prototype.resetFields = function () {\n this.invoiceLineKindergartenCustomUnitPrice = 0;\n this.invoiceLineKindergartenOneOffUnitPrice = 0;\n\n if (this._invoiceLineKindergartenLunchQty) {\n delete (this._invoiceLineKindergartenLunchQty);\n }\n\n if (this._invoiceLineKindergartenSnackQty) {\n delete (this._invoiceLineKindergartenSnackQty);\n }\n\n if (this._invoiceLineKindergartenLatePickupQty) {\n delete (this._invoiceLineKindergartenLatePickupQty);\n }\n }\n\n ns.InvoiceBase.prototype.initLocalization = function ($translate) {\n this.invoiceLineKindergartenFeeName = $translate.instant('TXT_LBL_ACTIVITY_FEE');\n this.invoiceLineKindergartenFeeReccuringName = $translate.instant('TXT_LBL_ACTIVITY_FEE');\n this.invoiceLineKindergartenOneOffName = $translate.instant('TXT_LBL_ACTIVITY_ONE_OFF_FEE');\n this.invoiceLineKindergartenLunchName = $translate.instant('TXT_LBL_ACTIVITY_LUNCH');\n this.invoiceLineKindergartenSnackName = $translate.instant('TXT_LBL_ACTIVITY_SNACK');\n this.invoiceLineKindergartenLatePickupName = $translate.instant('TXT_LBL_ACTIVITY_LATE_PICKUP');\n this.invoiceLineKindergartenCustomName = $translate.instant('TXT_LBL_ACTIVITY_OTHER');\n }\n\n ns.InvoiceBase.prototype.initDataByInvoiceDTO = function (invoiceDTO) {\n if (invoiceDTO) {\n this.invoiceID = invoiceDTO.invoiceID;\n this.invoiceDate = invoiceDTO.invoiceDate;\n this.operatorID = invoiceDTO.customerOperatorID;\n this.accountingBookID = invoiceDTO.accountingBookID;\n this.taxDate = invoiceDTO.taxDate;\n this.isVATPayer = invoiceDTO.isVATPayer;\n\n if (invoiceDTO.lineItems) {\n for (var i = 0; i < invoiceDTO.lineItems.length; i++) {\n var li = invoiceDTO.lineItems[i];\n switch (li.invoiceLineType) {\n case 'ActivitySnack':\n this.invoiceLineKindergartenSnackName = li.name;\n this.invoiceLineKindergartenSnackQty = li.quantity;\n this.invoiceLineKindergartenSnackUnitPrice = li.unitPrice || 0;\n break;\n case 'ActivityLunch':\n this.invoiceLineKindergartenLunchName = li.name;\n this.invoiceLineKindergartenLunchQty = li.quantity;\n this.invoiceLineKindergartenLunchUnitPrice = li.unitPrice || 0;\n break;\n case 'ActivityLatePickup':\n this.invoiceLineKindergartenLatePickupName = li.name;\n this.invoiceLineKindergartenLatePickupQty = li.quantity;\n this.invoiceLineKindergartenLatePickupUnitPrice = li.unitPrice || 0;\n break;\n case 'ActivityFee':\n this.invoiceLineKindergartenFeeName = li.name;\n this.invoiceLineKindergartenFeeQty = (li.quantity == null)\n ? 1\n : li.quantity;\n this.invoiceLineKindergartenFeeUnitPrice = li.unitPrice || li.price;\n break;\n case 'ActivityFeeReccuring':\n this.invoiceLineKindergartenFeeReccuringName = li.name;\n this.invoiceLineKindergartenFeeReccuringQty = (li.quantity == null)\n ? 1\n : li.quantity;\n this.invoiceLineKindergartenFeeReccuringUnitPrice = li.unitPrice || li.price;\n break;\n case 'ActivityOneOffFee':\n this.invoiceLineKindergartenOneOffName = li.name;\n this.invoiceLineKindergartenOneOffQty = (li.quantity == null)\n ? ((!li.price) ? 0 : 1)\n : li.quantity;\n this.invoiceLineKindergartenOneOffUnitPrice = li.unitPrice || li.price;\n break;\n case 'ManualAdjustment':\n this.invoiceLineKindergartenCustomName = li.name;\n this.invoiceLineKindergartenCustomQty = (li.quantity == null)\n ? ((!li.price) ? 0 : 1)\n : li.quantity;\n this.invoiceLineKindergartenCustomUnitPrice = li.unitPrice || li.price;\n break;\n default:\n alert('Unknown invoice line type: ' + li.invoiceLineType);\n break;\n }\n }\n }\n }\n this.invoiceLineKindergartenSnackUnitPrice = this.invoiceLineKindergartenSnackUnitPrice || 0;\n if (!!this.invoiceLineKindergartenSnackUnitPrice) {\n this.invoiceLineKindergartenSnackQty = this.invoiceLineKindergartenSnackQty || 1;\n }\n\n this.invoiceLineKindergartenLunchUnitPrice = this.invoiceLineKindergartenLunchUnitPrice || 0;\n if (!!this.invoiceLineKindergartenLunchUnitPrice) {\n this.invoiceLineKindergartenLunchQty = this.invoiceLineKindergartenLunchQty || 1;\n }\n\n this.invoiceLineKindergartenLatePickupUnitPrice = this.invoiceLineKindergartenLatePickupUnitPrice || 0;\n if (!!this.invoiceLineKindergartenLatePickupUnitPrice) {\n this.invoiceLineKindergartenLatePickupQty = this.invoiceLineKindergartenLatePickupQty || 1;\n }\n\n this.invoiceLineKindergartenFeeUnitPrice = this.invoiceLineKindergartenFeeUnitPrice || 0;\n this.invoiceLineKindergartenFeeQty = this.invoiceLineKindergartenFeeQty || 0;\n\n this.invoiceLineKindergartenFeeReccuringUnitPrice = this.invoiceLineKindergartenFeeReccuringUnitPrice || 0;\n this.invoiceLineKindergartenFeeReccuringQty = this.invoiceLineKindergartenFeeReccuringQty || 0;\n\n this.invoiceLineKindergartenOneOffUnitPrice = this.invoiceLineKindergartenOneOffUnitPrice || 0;\n this.invoiceLineKindergartenOneOffQty = this.invoiceLineKindergartenOneOffQty || 0;\n\n this.invoiceLineKindergartenCustomUnitPrice = this.invoiceLineKindergartenCustomUnitPrice || 0;\n this.invoiceLineKindergartenCustomQty = this.invoiceLineKindergartenCustomQty || 0;\n\n\n }\n\n ns.InvoiceBase.prototype.getInvoiceDTO = function ($translate) {\n var res = { lineItems: [] } ;\n\n res.invoiceID = this.invoiceID;\n res.total = this.invoiceSumPrice;\n res.customerStudentID = this.studentID;\n res.customerOperatorID = this.operatorID;\n res.accountingBookID = this.accountingBookID;\n res.invoiceDate = this.invoiceDate || new Date();\n res.taxDate = this.taxDate;\n\n if (this.invoiceLineKindergartenSnackPrice) {\n res.lineItems.push({\n invoiceLineType: 'ActivitySnack',\n name: this.invoiceLineKindergartenSnackName,\n price: this.invoiceLineKindergartenSnackPrice,\n quantity: this.invoiceLineKindergartenSnackQty,\n unitPrice: this.invoiceLineKindergartenSnackUnitPrice\n });\n }\n\n if (this.invoiceLineKindergartenLunchPrice) {\n res.lineItems.push({\n invoiceLineType: 'ActivityLunch',\n name: this.invoiceLineKindergartenLunchName,\n price: this.invoiceLineKindergartenLunchPrice,\n quantity: this.invoiceLineKindergartenLunchQty,\n unitPrice: this.invoiceLineKindergartenLunchUnitPrice\n });\n }\n\n if (this.invoiceLineKindergartenLatePickupPrice) {\n res.lineItems.push({\n invoiceLineType: 'ActivityLatePickup',\n name: this.invoiceLineKindergartenLatePickupName,\n price: this.invoiceLineKindergartenLatePickupPrice,\n quantity: this.invoiceLineKindergartenLatePickupQty,\n unitPrice: this.invoiceLineKindergartenLatePickupUnitPrice\n });\n }\n\n // Always add activity fee line, even if 0\n if (!this.isReccuring) {\n res.lineItems.push({\n invoiceLineType: 'ActivityFee',\n name: this.invoiceLineKindergartenFeeName || $translate.instant('TXT_LBL_ACTIVITY_FEE'),\n price: this.invoiceLineKindergartenFeePrice || 0,\n quantity: this.invoiceLineKindergartenFeeQty || 0,\n unitPrice: this.invoiceLineKindergartenFeeUnitPrice || 0\n });\n } else {\n res.lineItems.push({\n invoiceLineType: 'ActivityFeeReccuring',\n name: this.invoiceLineKindergartenFeeReccuringName || $translate.instant('TXT_LBL_ACTIVITY_FEE'),\n price: this.invoiceLineKindergartenFeeReccuringPrice || 0,\n quantity: this.invoiceLineKindergartenFeeReccuringQty || 0,\n unitPrice: this.invoiceLineKindergartenFeeReccuringUnitPrice || 0\n });\n }\n\n if (this.invoiceLineKindergartenOneOffPrice) {\n res.lineItems.push({\n invoiceLineType: 'ActivityOneOffFee',\n name: this.invoiceLineKindergartenOneOffName,\n price: this.invoiceLineKindergartenOneOffPrice || 0,\n quantity: this.invoiceLineKindergartenOneOffQty || 0,\n unitPrice: this.invoiceLineKindergartenOneOffUnitPrice || 0\n });\n }\n\n if (this.invoiceLineKindergartenCustomPrice) {\n res.lineItems.push({\n invoiceLineType: 'ManualAdjustment',\n name: this.invoiceLineKindergartenCustomName,\n price: this.invoiceLineKindergartenCustomPrice || 0,\n quantity: this.invoiceLineKindergartenCustomQty || 0,\n unitPrice: this.invoiceLineKindergartenCustomUnitPrice || 0\n });\n }\n\n return res;\n }\n\n // #endregion\n\n // #region InvoiceBase - Properties\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenFeePrice', {\n enumerable: true, configurable: true,\n get: function () {\n var notRounded = this.invoiceLineKindergartenFeeQty * this.invoiceLineKindergartenFeeUnitPrice;\n return Math.round(notRounded * 100) / 100;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenFeeReccuringPrice', {\n enumerable: true, configurable: true,\n get: function () {\n var notRounded = this.invoiceLineKindergartenFeeReccuringQty * this.invoiceLineKindergartenFeeReccuringUnitPrice;\n return Math.round(notRounded * 100) / 100;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenOneOffPrice', {\n enumerable: true, configurable: true,\n get: function () {\n var notRounded = this.invoiceLineKindergartenOneOffQty * this.invoiceLineKindergartenOneOffUnitPrice;\n return Math.round(notRounded * 100) / 100;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenCustomPrice', {\n enumerable: true, configurable: true,\n get: function () {\n var notRounded = this.invoiceLineKindergartenCustomQty * this.invoiceLineKindergartenCustomUnitPrice;\n return Math.round(notRounded * 100) / 100;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenLunchQty', {\n enumerable: true, configurable: true,\n get: function () {\n if (this._invoiceLineKindergartenLunchQty === undefined) {\n return this.noOfLunches;\n } else {\n return this._invoiceLineKindergartenLunchQty;\n }\n },\n set: function (value) {\n this._invoiceLineKindergartenLunchQty = value;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenLunchPrice', {\n enumerable: true, configurable: true,\n get: function () {\n var notRounded = this.invoiceLineKindergartenLunchQty * this.invoiceLineKindergartenLunchUnitPrice;\n return Math.round(notRounded * 100) / 100;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenSnackQty', {\n enumerable: true, configurable: true,\n get: function () {\n if (this._invoiceLineKindergartenSnackQty === undefined) {\n return this.noFirstSnacks + this.noSecondSnacks;\n } else {\n return this._invoiceLineKindergartenSnackQty;\n }\n },\n set: function (value) {\n this._invoiceLineKindergartenSnackQty = value;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenSnackPrice', {\n enumerable: true, configurable: true,\n get: function () {\n var notRounded = this.invoiceLineKindergartenSnackQty * this.invoiceLineKindergartenSnackUnitPrice;\n return Math.round(notRounded * 100) / 100;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenLatePickupQty', {\n enumerable: true, configurable: true,\n get: function () {\n if (this._invoiceLineKindergartenLatePickupQty === undefined) {\n return this.sumLatePickupHours;\n } else {\n return this._invoiceLineKindergartenLatePickupQty;\n }\n },\n set: function (value) {\n this._invoiceLineKindergartenLatePickupQty = value;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenLatePickupPrice', {\n enumerable: true, configurable: true,\n get: function () {\n var notRounded = this.invoiceLineKindergartenLatePickupQty * this.invoiceLineKindergartenLatePickupUnitPrice;\n return Math.round(notRounded * 100) / 100;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceSumPrice', {\n enumerable: true, configurable: true,\n get: function () {\n var res = Number(this.invoiceLineKindergartenSnackPrice || 0) +\n Number(this.invoiceLineKindergartenLunchPrice || 0) +\n Number(this.invoiceLineKindergartenOneOffPrice || 0) +\n Number(this.invoiceLineKindergartenFeePrice || 0) +\n Number(this.invoiceLineKindergartenFeeReccuringPrice || 0) +\n Number(this.invoiceLineKindergartenCustomPrice || 0) +\n Number(this.invoiceLineKindergartenLatePickupPrice || 0);\n\n return res;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'isInvoiceEmpty', {\n enumerable: true, configurable: true,\n get: function () {\n\n return !(this.invoiceLineKindergartenSnackPrice || 0) &&\n !(this.invoiceLineKindergartenLunchPrice || 0) &&\n !(this.invoiceLineKindergartenOneOffPrice || 0) &&\n !(this.invoiceLineKindergartenFeePrice || 0) &&\n !(this.invoiceLineKindergartenFeeReccuringPrice || 0) &&\n !(this.invoiceLineKindergartenCustomPrice || 0) &&\n !(this.invoiceLineKindergartenLatePickupPrice || 0);\n }\n });\n\n // #endregion\n\n}(webooker_acivity_models));","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region ScheduleDayBase - Ctor \n ns.ScheduleDayBase = function ScheduleDetail() {\n }\n // #endregion\n\n // #region ScheduleDayBase - Methods\n\n ns.ScheduleDayBase.prototype.normalizeDate = function (mvalue) { \n return new Date(1970, 0, 1, mvalue.hours(), mvalue.minutes());\n }\n\n ns.ScheduleDayBase.prototype.getUnboundedMinTimeValue = function () {\n return moment(new Date(1970, 0, 1, 0));\n }\n\n ns.ScheduleDayBase.prototype.getUnboundedMaxTimeValue = function () {\n // Date(year, month, day, hour, minute, second, millisecond)\n return moment(new Date(2200, 0, 1, 23, 59, 59, 99));\n }\n \n ns.ScheduleDayBase.prototype.getMinTimeValue = function (schedules, propertyName, nullIfNoValue) {\n var minDate = this.getUnboundedMinTimeValue();\n var valueSet = false;\n\n if (schedules) {\n for (var d = 0; d < schedules.length; d++) {\n var prop = schedules[d][propertyName];\n if (prop) {\n var date = moment(prop);\n var minutes = date.hour() * 60 + date.minute();\n var minMinutes = minDate.hour() * 60 + minDate.minute();\n\n if (minutes <= minMinutes || !valueSet) {\n minDate = date;\n valueSet = true;\n }\n }\n }\n }\n\n if (!valueSet && nullIfNoValue) {\n return null;\n }\n\n return this.normalizeDate(minDate);\n }\n\n ns.ScheduleDayBase.prototype.getMaxTimeValue = function (schedules, propertyName, nullIfNoValue) {\n var maxDate = this.getUnboundedMaxTimeValue();\n var valueSet = false;\n\n if (schedules) {\n for (var d = 0; d < schedules.length; d++) {\n var prop = schedules[d][propertyName];\n if (prop) {\n var date = moment(prop);\n var minutes = date.hour() * 60 + date.minute();\n var maxMinutes = maxDate.hour() * 60 + maxDate.minute();\n\n if (minutes >= maxMinutes || !valueSet) {\n maxDate = date;\n valueSet = true;\n }\n }\n }\n }\n\n if (!valueSet && nullIfNoValue) {\n return null;\n }\n\n return this.normalizeDate(maxDate);\n }\n\n ns.ScheduleDayBase.prototype.getSchedulesByDay = function (sch, dayOfWeek) {\n var all = [];\n\n if (sch) {\n for (var w = 0; w < sch.length; w++) {\n var week = sch[w];\n\n // TODO: call getReservationsByDay\n for (var s = 0; s < week.schedules.length; s++) {\n var schedule = week.schedules[s];\n var dateIndicia = schedule.firstPeriodStartDate ||\n schedule.firstPeriodEndDate ||\n schedule.secondPeriodStartDate ||\n schedule.secondPeriodEndDate;\n\n if (!!dateIndicia) {\n var scheduleDayOfWeek = moment(dateIndicia).isoWeekday();\n\n if (scheduleDayOfWeek === dayOfWeek) {\n all.push(schedule);\n }\n }\n }\n }\n }\n\n return all;\n }\n\n ns.ScheduleDayBase.prototype.isTimeIndeterminate2 = function (daySchedules, propertyName, value, min) {\n if (!daySchedules || !daySchedules.length || !value) {\n return false;\n }\n\n var valueDate = moment(value);\n var valueMin = valueDate.hours() * 60 + valueDate.minutes();\n\n for (var s = 0; s < daySchedules.length; s++) {\n var daySchedule = daySchedules[s];\n var scheduleValue = daySchedule[propertyName];\n if (!scheduleValue) {\n return true;\n }\n\n var schDate = moment(scheduleValue);\n var schMin = schDate.hours() * 60 + schDate.minutes();\n\n if (min) {\n if (schMin > valueMin) {\n return true;\n }\n } else {\n if (schMin < valueMin) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n ns.ScheduleDayBase.prototype.isBoolIndeterminate2 = function (daySchedules, propertyName, value) {\n if (!daySchedules || !daySchedules.length || value === undefined || value === null) {\n return false;\n }\n\n for (var s = 0; s < daySchedules.length; s++) {\n var daySchedule = daySchedules[s];\n var scheduleValue = daySchedule[propertyName];\n if (value && !scheduleValue) {\n return true;\n }\n }\n\n return false;\n }\n\n\n\n // #endregion\n\n}(webooker_acivity_models));","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region ScheduleResourceBase - Ctor\n ns.ScheduleResourceBase = function ScheduleResourceBase() {\n this.singlePeriodProgramOnly = false;\n\n };\n // #endregion\n\n // #region ScheduleResourceBase - Methods\n ns.ScheduleResourceBase.prototype.initialize = function (selectedSchedules) {\n this.schedules = [];\n this.selectedSchedules = selectedSchedules;\n }\n\n ns.ScheduleResourceBase.prototype.getSchedulesByDayImpl = function (sch, dayOfWeek) {\n var all = [];\n\n if (sch) {\n for (var s = 0; s < sch.length; s++) {\n var schedule = sch[s];\n var dateIndicia = schedule.firstPeriodStartDate ||\n schedule.firstPeriodEndDate ||\n schedule.secondPeriodStartDate ||\n schedule.secondPeriodEndDate;\n\n if (!!dateIndicia) {\n var scheduleDayOfWeek = moment(dateIndicia).isoWeekday();\n\n if (scheduleDayOfWeek === dayOfWeek) {\n all.push(schedule);\n }\n }\n }\n }\n\n return all;\n };\n\n ns.ScheduleResourceBase.prototype.getSchedulesByDay = function (sch, dayOfWeek) {\n return this.getSchedulesByDayImpl(sch, dayOfWeek);\n }\n\n ns.ScheduleResourceBase.prototype.timeCompare = function (vr, s, propertyName) {\n if (typeof vr === \"undefined\") {\n return s[propertyName];\n } else {\n if (s[propertyName] && vr) {\n var p1 = moment(s[propertyName]);\n var p2 = moment(vr);\n\n if (p1.hour() !== p2.hour() ||\n p1.minute() !== p2.minute()) {\n return \"indeterminate\";\n } else {\n return vr;\n }\n } else {\n return vr;\n }\n }\n }\n\n ns.ScheduleResourceBase.prototype.getScheduleIndiciesByDay = function (dayOfWeek) {\n var sch = this.getSchedulesByDay(this.schedules, dayOfWeek);\n var selectedSch = this.getSchedulesByDay(this.selectedSchedules, dayOfWeek);\n\n if (sch.length === 0) {\n return '';\n }\n\n if (sch.length !== selectedSch.length) {\n return \"indeterminate\";\n }\n\n var fpsd, spsd;\n\n angular.forEach(sch, function (s, idx) {\n fpsd = this.timeCompare(fpsd, s, 'firstPeriodStartDate');\n spsd = this.timeCompare(spsd, s, 'secondPeriodStartDate');\n }, this);\n\n if (fpsd && fpsd === \"indeterminate\") {\n return \"indeterminate\";\n }\n\n if (spsd && spsd === \"indeterminate\") {\n return \"indeterminate\";\n }\n\n if (fpsd && spsd) { return 'both'; }\n if (fpsd && this.singlePeriodProgramOnly) { return 'both'; }\n if (fpsd) { return 'am'; }\n if (spsd) { return 'pm'; }\n\n return '';\n }\n // #endregion\n\n // #region ScheduleResourceBase - Properties\n\n Object.defineProperty(ns.ScheduleResourceBase.prototype, 'monday', {\n enumerable: true, configurable: true,\n get: function () {\n return this.getScheduleIndiciesByDay(1);\n }\n });\n\n Object.defineProperty(ns.ScheduleResourceBase.prototype, 'tuesday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(2); }\n });\n\n Object.defineProperty(ns.ScheduleResourceBase.prototype, 'wednesday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(3); }\n });\n\n Object.defineProperty(ns.ScheduleResourceBase.prototype, 'thursday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(4); }\n });\n\n Object.defineProperty(ns.ScheduleResourceBase.prototype, 'friday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(5); }\n });\n\n Object.defineProperty(ns.ScheduleResourceBase.prototype, 'saturday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(6); }\n });\n\n Object.defineProperty(ns.ScheduleResourceBase.prototype, 'sunday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(7); }\n });\n\n Object.defineProperty(ns.ScheduleResourceBase.prototype, 'notes', {\n enumerable: true, configurable: true,\n get: function () {\n\n var days = new Array(7);\n\n if (this.schedules) {\n for (var s = 0; s < this.schedules.length; s++) {\n var schedule = this.schedules[s];\n var dateIndicia = schedule.firstPeriodStartDate ||\n schedule.firstPeriodEndDate ||\n schedule.secondPeriodStartDate ||\n schedule.secondPeriodEndDate;\n\n if (!!dateIndicia) {\n days[moment(dateIndicia).isoWeekday() - 1] = schedule;\n }\n }\n }\n\n var result = '';\n\n for (var d = 0; d < days.length; d++) {\n var day = days[d];\n if (day && !String.prototype.isNullOrWhitespace(day.notes)) {\n if (String.prototype.isNullOrWhitespace(result)) {\n result += '{' + d + '}: ' + day.notes;\n } else {\n result += ', {' + d + '}: ' + day.notes;\n }\n }\n }\n\n return result;\n }\n });\n\n // #endregion\n\n\n})(webooker_acivity_models);","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n var daysEnum = ['TXT_MONDAY', 'TXT_TUESDAY', 'TXT_WEDNESDAY', 'TXT_THURSDAY', 'TXT_FRIDAY', 'TXT_SATURDAY', 'TXT_SUNDAY'];\n\n // #region ScheduleResourceDetailBase - Ctor\n ns.ScheduleResourceDetailBase = function ScheduleResourceDetailBase() {\n }\n // #endregion\n\n // #region ScheduleResourceDetailBase - Methods\n ns.ScheduleResourceDetailBase.prototype.initialize = function (reservations, schedules, resourceID, activityID) {\n //this.reservations = reservations;\n this.schedules = schedules;\n\n this.days = [];\n for (var day = 1; day <= 7; day++) {\n this.days.push(this.createDayModel(reservations, schedules, day, daysEnum[day - 1], resourceID, activityID));\n }\n }\n\n ns.ScheduleResourceDetailBase.prototype.createDayModel = function (reservations, schedules, dayOfWeek, dayName, resourceID, activityID) {\n return null; // new ns.scheduleResourceDetailDayBase(reservations, schedules, dayOfWeek, dayName, resourceID, activityID);\n }\n\n ns.ScheduleResourceDetailBase.prototype.onDataSourceChange = function () {\n for (var d = 0; d < this.days.length; d++) {\n this.days[d].onDataSourceChange.call(this.days[d]);\n }\n }\n\n ns.ScheduleResourceDetailBase.prototype.applyChanges = function () {\n for (var d = 0; d < this.days.length; d++) {\n this.days[d].applyChanges.call(this.days[d]);\n }\n }\n // #endregion\n\n // #region ScheduleResourceDetailBase - Properties\n Object.defineProperty(ns.ScheduleResourceDetailBase.prototype, \"notScheduled\", {\n get: function () {\n var notScheduled = true;\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n notScheduled &= d.notScheduled;\n }\n return notScheduled\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailBase.prototype, \"notScheduledAM\", {\n get: function () {\n var notScheduled = true;\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n notScheduled &= d.notScheduledAM;\n }\n return notScheduled\n },\n enumerable: true,\n configurable: true\n });\n\n\n Object.defineProperty(ns.ScheduleResourceDetailBase.prototype, \"notScheduledPM\", {\n get: function () {\n var notScheduled = true;\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n notScheduled &= d.notScheduledPM;\n }\n return notScheduled\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailBase.prototype, \"active\", {\n get: function () {\n var a = true;\n var cnt = 0;\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n if (!d.notScheduled) {\n a &= d.active;\n cnt++;\n }\n }\n return a && cnt > 0;\n },\n set: function (value) {\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n if (!d.notScheduled) {\n d.active = value;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailBase.prototype, \"amActive\", {\n get: function () {\n var a = true;\n var cnt = 0;\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n if (!d.notScheduledAM) {\n a &= d.amActive;\n cnt++;\n }\n }\n return a && cnt > 0;\n },\n set: function (value) {\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n if (!d.notScheduledAM) {\n d.amActive = value;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailBase.prototype, \"pmActive\", {\n get: function () {\n var a = true;\n var cnt = 0;\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n if (!d.notScheduledPM) {\n a &= d.pmActive;\n cnt++;\n }\n }\n return a && cnt > 0;\n },\n set: function (value) {\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n if (!d.notScheduledPM) {\n d.pmActive = value;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n // #endregion\n\n}(webooker_acivity_models));\n","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region ScheduleResourceDetailDayBase - Ctor\n ns.ScheduleResourceDetailDayBase = function ScheduleResourceDetailDayBase() {\n\n }\n // #endregion\n\n // #region ScheduleResourceDetailDayBase - Inheritance\n\n ns.ScheduleResourceDetailDayBase.prototype = new ns.ScheduleDayBase();\n ns.ScheduleResourceDetailDayBase.prototype.constructor = ns.ScheduleResourceDetailDayBase;\n ns.ScheduleResourceDetailDayBase.prototype.parent = ns.ScheduleDayBase.prototype;\n\n // #endregion\n\n // #region ScheduleResourceDetailDayBase - Methods\n ns.ScheduleResourceDetailDayBase.prototype.initialize = function (reservations, schedules, dayOfWeek, dayName, resourceID, activityID) {\n this.reservations = reservations;\n this.schedules = schedules;\n this.dayOfWeek = dayOfWeek;\n this.day = dayName;\n this.resourceID = resourceID;\n this.activityID = activityID;\n\n this.onDataSourceChange();\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getTimeValue = function (daySchedules, dayReservations, propertyName, min) {\n if (!daySchedules || !daySchedules.length || !dayReservations || !dayReservations.length) {\n return null;\n }\n\n var relevantReservations = this.getRelevantReservations(daySchedules, dayReservations);\n if (min) {\n return this.getMinTimeValue(relevantReservations, propertyName, true);\n } else {\n return this.getMaxTimeValue(relevantReservations, propertyName, true);\n }\n\n return null;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getRelevantReservations = function (daySchedules, dayReservations) {\n if (!daySchedules || !daySchedules.length || !dayReservations || !dayReservations.length) {\n return [];\n }\n\n var ret = [];\n\n for (var s = 0; s < daySchedules.length; s++) {\n var activityScheduleID = daySchedules[s].activityScheduleID;\n for (var r = 0; r < dayReservations.length; r++) {\n var reservation = dayReservations[r];\n if (reservation.activityScheduleID === activityScheduleID) {\n ret.push(reservation);\n }\n }\n }\n\n return ret;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getReservationsByDay = function (sch, dayOfWeek) {\n var all = [];\n\n if (sch) {\n for (var s = 0; s < sch.length; s++) {\n var schedule = sch[s];\n var dateIndicia = schedule.firstPeriodStartDate ||\n schedule.firstPeriodEndDate ||\n schedule.secondPeriodStartDate ||\n schedule.secondPeriodEndDate;\n\n if (!!dateIndicia) {\n var scheduleDayOfWeek = moment(dateIndicia).isoWeekday();\n\n if (scheduleDayOfWeek === dayOfWeek) {\n all.push(schedule);\n }\n }\n }\n }\n\n return all;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.notScheduledProperty = function (daySchedules, propertyName) {\n if (!daySchedules || !daySchedules.length) {\n return true;\n }\n\n for (var d = 0; d < daySchedules.length; d++) {\n var schedule = daySchedules[d];\n if (schedule[propertyName]) {\n return false;\n }\n }\n\n return true;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getRelevantReservations = function (daySchedules, dayReservations) {\n if (!daySchedules || !daySchedules.length || !dayReservations || !dayReservations.length) {\n return [];\n }\n\n var ret = [];\n\n for (var s = 0; s < daySchedules.length; s++) {\n var activityScheduleID = daySchedules[s].activityScheduleID;\n for (var r = 0; r < dayReservations.length; r++) {\n var reservation = dayReservations[r];\n if (reservation.activityScheduleID === activityScheduleID) {\n ret.push(reservation);\n }\n }\n }\n\n return ret;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getReservationByScheduleID = function (reservations, activityScheduleID) {\n if (!reservations || !reservations.length) {\n return null;\n }\n\n for (var r = 0; r < reservations.length; r++) {\n var res = reservations[r];\n if (res.activityScheduleID === activityScheduleID) {\n return res;\n }\n }\n\n return null;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.normalizeTimeValue = function (scheduleValue, value, min) {\n var normalizedValue = null;\n\n if (value) {\n var scheduleDate = moment(scheduleValue);\n var valueDate = moment(value);\n var scheduleMinutes = scheduleDate.hour() * 60 + scheduleDate.minute();\n var valueMinutes = valueDate.hour() * 60 + valueDate.minute();\n\n if (min) {\n if (scheduleMinutes <= valueMinutes) {\n normalizedValue = new Date(scheduleDate.year(), scheduleDate.month(), scheduleDate.date(), valueDate.hour(), valueDate.minute(), 0 , 0);\n } else {\n normalizedValue = scheduleValue;\n }\n } else {\n if (scheduleMinutes <= valueMinutes) {\n normalizedValue = scheduleValue;\n } else {\n normalizedValue = new Date(scheduleDate.year(), scheduleDate.month(), scheduleDate.date(), valueDate.hour(), valueDate.minute(), 0, 0);\n }\n }\n }\n\n return normalizedValue;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.isTimeIndeterminate = function (daySchedules, dayReservations, propertyName) {\n\n if (!daySchedules ||\n !daySchedules.length) {\n return false;\n }\n\n var first = true;\n var val = null;\n var rDate = null;\n var rMin = null;\n\n for (var s = 0; s < daySchedules.length; s++) {\n var schedule = daySchedules[s];\n if (schedule[propertyName]) {\n \n var res = this.getReservationByScheduleID(dayReservations, schedule.activityScheduleID);\n if (!res) {\n if (!first && val) {\n return true;\n }\n first = false;\n } else {\n var rvalue = res[propertyName];\n if (first) {\n if (rvalue) {\n rDate = moment(rvalue);\n rMin = rDate.hours() * 60 + rDate.minutes();\n val = rMin;\n }\n first = false;\n } else {\n if (rvalue) {\n rDate = moment(rvalue);\n rMin = rDate.hours() * 60 + rDate.minutes();\n if (val !== rMin) {\n return true;\n }\n } else {\n if (val === null) {\n return true;\n }\n }\n }\n }\n }\n }\n\n return false;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getBoolValue = function (daySchedules, dayReservations, propertyName) {\n if (!daySchedules || !daySchedules.length || !dayReservations || !dayReservations.length) {\n return null;\n }\n\n var relevantReservations = this.getRelevantReservations(daySchedules, dayReservations);\n\n for (var d = 0; d < relevantReservations.length; d++) {\n var prop = relevantReservations[d][propertyName];\n if (prop) {\n return true;\n }\n }\n\n return false;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getStringValue = function (daySchedules, dayReservations, propertyName) {\n if (!daySchedules || !daySchedules.length || !dayReservations || !dayReservations.length) {\n return null;\n }\n\n var relevantReservations = this.getRelevantReservations(daySchedules, dayReservations);\n\n var val = null;\n var first = true;\n\n for (var d = 0; d < relevantReservations.length; d++) {\n var prop = relevantReservations[d][propertyName];\n if (first) {\n first = false;\n val = prop;\n } else {\n if (val !== prop) {\n return null;\n }\n }\n }\n\n return val;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.isBoolIndeterminate = function (daySchedules, dayReservations, propertyName) {\n if (!daySchedules ||\n !daySchedules.length) {\n return false;\n }\n\n var first = true;\n var val = null;\n\n for (var s = 0; s < daySchedules.length; s++) {\n var schedule = daySchedules[s];\n if (schedule[propertyName]) {\n\n var res = this.getReservationByScheduleID(dayReservations, schedule.activityScheduleID);\n if (!res) {\n if (!first && val) {\n return true;\n }\n first = false;\n } else {\n var rvalue = res[propertyName];\n if (first) {\n val = rvalue;\n first = false;\n } else {\n if (rvalue !== val) {\n return true;\n }\n }\n }\n\n }\n }\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.isStringIndeterminate = function (daySchedules, dayReservations, propertyName) {\n if (!daySchedules ||\n !daySchedules.length) {\n return false;\n }\n\n var first = true;\n var val = null;\n\n for (var s = 0; s < daySchedules.length; s++) {\n var schedule = daySchedules[s];\n\n var res = this.getReservationByScheduleID(dayReservations, schedule.activityScheduleID);\n if (!res) {\n if (!first && val) {\n return true;\n }\n first = false;\n } else {\n var rvalue = res[propertyName];\n if (first) {\n val = rvalue;\n first = false;\n } else {\n if (!String.prototype.isNullOrWhitespace(rvalue) && !String.prototype.isNullOrWhitespace(val) && (rvalue !== val)) {\n return true;\n }\n }\n }\n }\n return false;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getAMNotScheduled = function (daySchedules) {\n if (!daySchedules || !daySchedules.length) {\n return true;\n }\n\n for (var s = 0; s < daySchedules.length; s++) {\n var daySchedule = daySchedules[s];\n \n if (!daySchedule['firstPeriodStartDate'] || \n !daySchedule['firstPeriodEndDate']) {\n return true;\n }\n }\n\n return false;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getPMNotScheduled = function (daySchedules) {\n if (!daySchedules || !daySchedules.length) {\n return true;\n }\n\n for (var s = 0; s < daySchedules.length; s++) {\n var daySchedule = daySchedules[s];\n\n if (!daySchedule['secondPeriodStartDate'] ||\n !daySchedule['secondPeriodEndDate']) {\n return true;\n }\n }\n\n return false;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.onDataSourceChange = function () {\n this.calculateProperties(this.schedules, this.reservations, this.dayOfWeek);\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.createReservation = function (activityScheduleID) {\n return null;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.applyChangesToTimeProperty = function (daySchedules, reservations, propertyName, value, min) {\n\n for (var s = 0; s < daySchedules.length; s++) {\n var daySchedule = daySchedules[s];\n var scheduleValue = daySchedule[propertyName];\n if (!scheduleValue) {\n continue;\n }\n\n var normalizedValue = this.normalizeTimeValue(scheduleValue, value, min);\n\n var reservation = this.getReservationByScheduleID(reservations, daySchedule.activityScheduleID);\n if (!reservation) {\n if (normalizedValue) {\n \n reservation = this.createReservation(daySchedule.activityScheduleID);\n reservation[propertyName] = normalizedValue;\n reservations.push(reservation);\n }\n } else {\n reservation[propertyName] = normalizedValue;\n }\n }\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.applyChangesToBoolProperty = function (daySchedules, reservations, propertyName, value) {\n for (var s = 0; s < daySchedules.length; s++) {\n var daySchedule = daySchedules[s];\n var scheduleValue = daySchedule[propertyName];\n\n var reservation = this.getReservationByScheduleID(reservations, daySchedule.activityScheduleID);\n if (reservation) {\n reservation[propertyName] = value && scheduleValue;\n } \n }\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.applyChangesToStringProperty = function (daySchedules, reservations, propertyName, value) {\n for (var s = 0; s < daySchedules.length; s++) {\n var daySchedule = daySchedules[s];\n var reservation = this.getReservationByScheduleID(reservations, daySchedule.activityScheduleID);\n if (reservation) {\n reservation[propertyName] = value;\n }\n }\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getReservationIndexByScheduleID = function (reservations, activityScheduleID) {\n for (var i = 0; i < reservations.length; i++) {\n var reservation = reservations[i];\n if (reservation.activityScheduleID === activityScheduleID) {\n return i;\n }\n }\n\n return -1;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.applyChanges = function () {\n\n var hasFirstPeriod = (!!this.firstPeriodStartDate && !!this.firstPeriodEndDate);\n var hasSecondPeriod = (!!this.secondPeriodStartDate && !!this.secondPeriodEndDate);\n \n\n if (!(hasFirstPeriod || hasSecondPeriod)) {\n\n for (var s = 0; s < this.daySchedules.length; s++) {\n var schedule = this.daySchedules[s];\n var rindex = this.getReservationIndexByScheduleID(this.reservations, schedule.activityScheduleID);\n if (rindex !== -1) {\n this.reservations.splice(rindex, 1);\n }\n }\n\n this.firstPeriodStartDateChanged = false;\n this.firstPeriodEndDateChanged = false;\n this.secondPeriodStartDateChanged = false;\n this.secondPeriodEndDateChanged = false;\n this.notesChanged = false;\n } else {\n if (hasFirstPeriod) {\n if (this.firstPeriodStartDateChanged) {\n this.applyChangesToTimeProperty(this.daySchedules, this.reservations, 'firstPeriodStartDate', this.firstPeriodStartDate, true);\n this.firstPeriodStartDateChanged = false;\n }\n if (this.firstPeriodEndDateChanged) {\n this.applyChangesToTimeProperty(this.daySchedules, this.reservations, 'firstPeriodEndDate', this.firstPeriodEndDate, false);\n this.firstPeriodEndDateChanged = false;\n }\n } else {\n if (this.firstPeriodStartDateChanged || this.firstPeriodEndDateChanged) {\n this.applyChangesToTimeProperty(this.daySchedules, this.reservations, 'firstPeriodStartDate', null, true);\n this.applyChangesToTimeProperty(this.daySchedules, this.reservations, 'firstPeriodEndDate', null, false);\n this.firstPeriodStartDateChanged = false;\n this.firstPeriodEndDateChanged = false;\n }\n }\n\n if (hasSecondPeriod) {\n if (this.secondPeriodStartDateChanged) {\n this.applyChangesToTimeProperty(this.daySchedules, this.reservations, 'secondPeriodStartDate', this.secondPeriodStartDate, true);\n this.secondPeriodStartDateChanged = false;\n }\n if (this.secondPeriodEndDateChanged) {\n this.applyChangesToTimeProperty(this.daySchedules, this.reservations, 'secondPeriodEndDate', this.secondPeriodEndDate, false);\n this.secondPeriodEndDateChanged = false;\n }\n } else {\n if (this.secondPeriodStartDateChanged || this.secondPeriodEndDateChanged) {\n this.applyChangesToTimeProperty(this.daySchedules, this.reservations, 'secondPeriodStartDate', null, true);\n this.applyChangesToTimeProperty(this.daySchedules, this.reservations, 'secondPeriodEndDate', null, false);\n this.secondPeriodStartDateChanged = false;\n this.secondPeriodEndDateChanged = false;\n }\n\n }\n\n if (this.notesChanged) {\n this.applyChangesToStringProperty(this.daySchedules, this.reservations, 'notes', this.notes);\n this.notesChanged = false;\n }\n }\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.calculateProperties = function (schedules, reservations, dayOfWeek) {\n\n this.daySchedules = this.getSchedulesByDay(schedules, dayOfWeek);\n this.dayReservations = this.getReservationsByDay(reservations, dayOfWeek);\n\n this._firstPeriodStartDate = this.getTimeValue(this.daySchedules, this.dayReservations, 'firstPeriodStartDate', true);\n this._firstPeriodEndDate = this.getTimeValue(this.daySchedules, this.dayReservations, 'firstPeriodEndDate', false);\n this._secondPeriodStartDate = this.getTimeValue(this.daySchedules, this.dayReservations, 'secondPeriodStartDate', true);\n this._secondPeriodEndDate = this.getTimeValue(this.daySchedules, this.dayReservations, 'secondPeriodEndDate', false);\n this._notes = this.getStringValue(this.daySchedules, this.dayReservations, 'notes');\n\n\n this.notScheduled = !(this.daySchedules && this.daySchedules.length);\n this.notScheduledAM = this.getAMNotScheduled(this.daySchedules);\n this.notScheduledPM = this.getPMNotScheduled(this.daySchedules);\n\n this.firstPeriodStartDateMin = this.getMinTimeValue(this.daySchedules, 'firstPeriodStartDate');\n this.firstPeriodEndDateMax = this.getMaxTimeValue(this.daySchedules, 'firstPeriodEndDate');\n this.secondPeriodStartDateMin = this.getMinTimeValue(this.daySchedules, 'secondPeriodStartDate');\n this.secondPeriodEndDateMax = this.getMaxTimeValue(this.daySchedules, 'secondPeriodEndDate');\n\n\n this.firstPeriodStartDateIndeterminate = this.isTimeIndeterminate(this.daySchedules, this.dayReservations, 'firstPeriodStartDate');\n this.firstPeriodEndDateIndeterminate = this.isTimeIndeterminate(this.daySchedules, this.dayReservations, 'firstPeriodEndDate');\n this.secondPeriodStartDateIndeterminate = this.isTimeIndeterminate(this.daySchedules, this.dayReservations, 'secondPeriodStartDate');\n this.secondPeriodEndDateIndeterminate = this.isTimeIndeterminate(this.daySchedules, this.dayReservations, 'secondPeriodEndDate');\n this.notesIndeterminate = this.isStringIndeterminate(this.daySchedules, this.dayReservations, 'notes');\n\n\n this.firstPeriodStartDateNotScheduled = this.notScheduledProperty(this.daySchedules, 'firstPeriodStartDate');\n this.firstPeriodEndDateNotScheduled = this.notScheduledProperty(this.daySchedules, 'firstPeriodEndDate');\n this.secondPeriodStartDateNotScheduled = this.notScheduledProperty(this.daySchedules, 'secondPeriodStartDate');\n this.secondPeriodEndDateNotScheduled = this.notScheduledProperty(this.daySchedules, 'secondPeriodEndDate');\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getActive = function () {\n if (this.notScheduled) {\n return false;\n }\n\n return (!!this.firstPeriodStartDate && !!this.firstPeriodEndDate) ||\n (!!this.secondPeriodStartDate && !!this.secondPeriodEndDate);\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.setActive = function (value) {\n if (value) {\n if (!this.firstPeriodStartDateNotScheduled) {\n this.firstPeriodStartDate = this.firstPeriodStartDateMin;\n this.firstPeriodEndDate = this.firstPeriodEndDateMax;\n }\n if (!this.secondPeriodStartDateNotScheduled) {\n this.secondPeriodStartDate = this.secondPeriodStartDateMin;\n this.secondPeriodEndDate = this.secondPeriodEndDateMax;\n }\n } else {\n this.firstPeriodStartDate = null;\n this.firstPeriodEndDate = null;\n this.secondPeriodStartDate = null;\n this.secondPeriodEndDate = null;\n this.notes = null;\n }\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getAmActive = function () {\n if (this.notScheduled) {\n return false;\n }\n\n return (!!this.firstPeriodStartDate && !!this.firstPeriodEndDate);\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.setAmActive = function (value) {\n if (value) {\n if (!this.firstPeriodStartDateNotScheduled) {\n this.firstPeriodStartDate = this.firstPeriodStartDateMin;\n this.firstPeriodEndDate = this.firstPeriodEndDateMax;\n }\n } else {\n this.firstPeriodStartDate = null;\n this.firstPeriodEndDate = null;\n }\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getPmActive = function () {\n if (this.notScheduled) {\n return false;\n }\n\n return (!!this.secondPeriodStartDate && !!this.secondPeriodEndDate);\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.setPmActive = function (value) {\n if (value) {\n if (!this.secondPeriodStartDateNotScheduled) {\n this.secondPeriodStartDate = this.secondPeriodStartDateMin;\n this.secondPeriodEndDate = this.secondPeriodEndDateMax;\n }\n } else {\n this.secondPeriodStartDate = null;\n this.secondPeriodEndDate = null;\n }\n }\n\n // #endregion\n\n // #region ScheduleResourceDetailDayBase - Properties\n Object.defineProperty(ns.ScheduleResourceDetailDayBase.prototype, \"active\", {\n get: function () { return this.getActive(); },\n set: function (value) { this.setActive(value); },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailDayBase.prototype, \"amActive\", {\n get: function () { return this.getAmActive(); },\n set: function (value) { this.setAmActive(value); },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailDayBase.prototype, \"pmActive\", {\n get: function () { return this.getPmActive(); },\n set: function (value) { this.setPmActive(value); },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailDayBase.prototype, \"firstPeriodStartDate\", {\n get: function () {\n return this._firstPeriodStartDate;\n },\n set: function (value) {\n this._firstPeriodStartDate = value !== null ? moment(value).toDate() : null;\n this.firstPeriodStartDateChanged = true;\n if (value !== undefined) {\n this.firstPeriodStartDateIndeterminate = this.isTimeIndeterminate2(this.daySchedules, 'firstPeriodStartDate', value, true);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailDayBase.prototype, \"firstPeriodEndDate\", {\n get: function () {\n return this._firstPeriodEndDate;\n },\n set: function (value) {\n this._firstPeriodEndDate = value !== null ? moment(value).toDate() : null;\n this.firstPeriodEndDateChanged = true;\n if (value !== undefined) {\n this.firstPeriodEndDateIndeterminate = this.isTimeIndeterminate2(this.daySchedules, 'firstPeriodEndDate', value, false);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailDayBase.prototype, \"secondPeriodStartDate\", {\n get: function () {\n return this._secondPeriodStartDate;\n },\n set: function (value) {\n this._secondPeriodStartDate = value !== null ? moment(value).toDate() : null;\n this.secondPeriodStartDateChanged = true;\n if (value !== undefined) {\n this.secondPeriodStartDateIndeterminate = this.isTimeIndeterminate2(this.daySchedules, 'secondPeriodStartDate', value, true);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailDayBase.prototype, \"secondPeriodEndDate\", {\n get: function () {\n return this._secondPeriodEndDate;\n },\n set: function (value) {\n this._secondPeriodEndDate = value !== null ? moment(value).toDate() : null;\n this.secondPeriodEndDateChanged = true;\n if (value !== undefined) {\n this.secondPeriodEndDateIndeterminate = this.isTimeIndeterminate2(this.daySchedules, 'secondPeriodEndDate', value, false);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n\n Object.defineProperty(ns.ScheduleResourceDetailDayBase.prototype, \"notes\", {\n get: function () {\n return this._notes;\n },\n set: function (value) {\n this._notes = value;\n this.notesChanged = true;\n if (value !== undefined) {\n this.notesIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n // #endregion\n\n}(webooker_acivity_models));\n","'use strict';\n\nwbApp.factory('activityInstructorSvc', ['$resource', '$q', '$translate', '$http', 'repositorySvc', 'notificationSvc',\nfunction ($resource, $q, $translate, $http, repositorySvc, notificationSvc) {\n\n function createEmployeeModel(selectedSchedules) {\n return new webooker_acivity_models.Employee(selectedSchedules);\n } \n\n function BuildWeekModel(activityinstructors, schedules) {\n var employeeHash = {};\n\n angular.forEach(activityinstructors, function (instructor, idx) {\n var employee = employeeHash[instructor.employeeID];\n if (!employee) {\n employee = createEmployeeModel(schedules);\n employeeHash[instructor.employeeID] = employee;\n employee.fullName = instructor.employeeFullName;\n employee.employeeID = instructor.employeeID;\n employee.activityID = instructor.activityID;\n }\n\n employee.schedules.push(instructor);\n });\n\n var ret = [];\n\n for (var employeeID in employeeHash) {\n ret.push(employeeHash[employeeID]);\n }\n\n return ret;\n }\n\n function getWeekModelByIntervals(semesterId, activityId, weeks) {\n var scheduleIDs = [];\n var schedules = [];\n\n angular.forEach(weeks, function (week, idx) {\n angular.forEach(week.schedules, function (schedule, sidx) {\n scheduleIDs.push(schedule.activityScheduleID);\n schedules.push(schedule);\n })\n \n });\n\n var deferred = $q.defer();\n var result = [];\n\n result.$promise = deferred.promise;\n\n if (scheduleIDs.length > 0) {\n $http({\n method: 'POST',\n url: '/Api/ActivityInstructors/GetAllBySchedules',\n data: {\n semesterID: semesterId,\n activityID: activityId,\n schedules: scheduleIDs\n }\n })\n .success(function (data, status, headers, config) {\n\n var model = BuildWeekModel(data, schedules);\n\n result.push.apply(result, model);\n deferred.resolve(model);\n })\n .error(function (errorResult, status, headers, config) {\n deferred.reject(errorResult);\n if (errorResult.status === 403) {\n notificationSvc.fatalNotify(\n $translate.instant('TXT_ALERT_TITLE_FORBIDEN'));\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_GET_ERROR'),\n notificationSvc.translateError(errorResult.data));\n }\n });\n } else {\n deferred.resolve([]);\n }\n\n return result;\n }\n\n function getAllByEmployeeAndActivity(employeeID, activityID) {\n var deferred = $q.defer();\n var result = [];\n result.$promise = deferred.promise;\n\n $http({\n method: 'POST',\n url: '/Api/ActivityInstructors/GetAllByEmployeeAndActivity',\n data: {\n employeeID: employeeID,\n activityID: activityID\n }\n })\n .success(function (data, status, headers, config) {\n result.push.apply(result, data);\n deferred.resolve(result);\n })\n .error(function (errorResult, status, headers, config) {\n deferred.reject(errorResult);\n if (errorResult.status === 403) {\n notificationSvc.fatalNotify(\n $translate.instant('TXT_ALERT_TITLE_FORBIDEN'));\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_GET_ERROR'),\n notificationSvc.translateError(errorResult.data));\n }\n });\n\n return result;\n }\n\n function createEmployeeDetailModel(instructors, schedules, employeeID, activityID)\n {\n return new webooker_acivity_models.EmployeeDetail(instructors, schedules, employeeID, activityID);\n }\n\n function saveAsync(instructors, employeeID, activityID) {\n var deferred = $q.defer();\n\n $http({\n method: 'POST',\n url: '/Api/ActivityInstructors/Save',\n data: {\n employeeID: employeeID,\n activityID: activityID,\n instructors: instructors || []\n }\n })\n .success(function (data, status, headers, config) {\n deferred.resolve(data);\n notificationSvc.notifyInfo(\n $translate.instant('TXT_ALERT_TITLE_ACTION_REGISTRATION_SUCCESS'));\n })\n .error(function (errorResult, status, headers, config) {\n deferred.reject(errorResult);\n if (errorResult.status === 403) {\n notificationSvc.fatalNotify(\n $translate.instant('TXT_ALERT_TITLE_FORBIDEN'));\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_GET_ERROR'),\n notificationSvc.translateError(errorResult.data));\n }\n });\n\n return deferred.promise;\n }\n\n return {\n getWeekModelByIntervals: getWeekModelByIntervals,\n getAllByEmployeeAndActivity: getAllByEmployeeAndActivity,\n createEmployeeDetailModel: createEmployeeDetailModel,\n saveAsync: saveAsync\n }\n\n}]);\n","'use strict';\n\nwbApp.factory('activityReservationSvc', ['$resource', '$q', '$translate', '$http', 'repositorySvc', 'notificationSvc',\nfunction ($resource, $q, $translate, $http, repositorySvc, notificationSvc) {\n\n function createStudentModel(selectedSchedules) {\n return new webooker_acivity_models.Student(selectedSchedules);\n } \n\n function BuildWeekModel(activityReservations, schedules) {\n var studentHash = {};\n\n angular.forEach(activityReservations, function (reservation, idx) {\n var student = studentHash[reservation.studentID];\n if (!student) {\n student = createStudentModel(schedules);\n studentHash[reservation.studentID] = student;\n student.fullName = reservation.studentFullName;\n student.studentID = reservation.studentID;\n student.activityID = reservation.activityID;\n }\n\n student.schedules.push(reservation);\n });\n\n var ret = [];\n\n for (var studentID in studentHash) {\n ret.push(studentHash[studentID]);\n }\n\n return ret;\n }\n\n function getWeekModelByIntervals(semesterId, activityId, weeks) {\n var scheduleIDs = [];\n var schedules = [];\n\n angular.forEach(weeks, function (week, idx) {\n angular.forEach(week.schedules, function (schedule, sidx) {\n scheduleIDs.push(schedule.activityScheduleID);\n schedules.push(schedule);\n })\n \n });\n\n var deferred = $q.defer();\n var result = [];\n\n result.$promise = deferred.promise;\n\n if (scheduleIDs.length > 0) {\n $http({\n method: 'POST',\n url: '/Api/ActivityReservations/GetAllBySchedules',\n data: {\n semesterID: semesterId,\n activityID: activityId,\n schedules: scheduleIDs\n }\n })\n .success(function (data, status, headers, config) {\n\n var model = BuildWeekModel(data, schedules);\n\n result.push.apply(result, model);\n deferred.resolve(model);\n })\n .error(function (errorResult, status, headers, config) {\n deferred.reject(errorResult);\n if (errorResult.status === 403) {\n notificationSvc.fatalNotify(\n $translate.instant('TXT_ALERT_TITLE_FORBIDEN'));\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_GET_ERROR'),\n notificationSvc.translateError(errorResult.data));\n }\n });\n } else {\n deferred.resolve([]);\n }\n\n return result;\n }\n\n function getAllByStudentAndActivity(studentID, activityID) {\n var deferred = $q.defer();\n var result = [];\n result.$promise = deferred.promise;\n\n $http({\n method: 'POST',\n url: '/Api/ActivityReservations/GetAllByStudentAndActivity',\n data: {\n studentID: studentID,\n activityID: activityID\n }\n })\n .success(function (data, status, headers, config) {\n result.push.apply(result, data);\n deferred.resolve(result);\n })\n .error(function (errorResult, status, headers, config) {\n deferred.reject(errorResult);\n if (errorResult.status === 403) {\n notificationSvc.fatalNotify(\n $translate.instant('TXT_ALERT_TITLE_FORBIDEN'));\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_GET_ERROR'),\n notificationSvc.translateError(errorResult.data));\n }\n });\n\n return result;\n }\n\n function createStudentDetailModel(reservations, schedules, studentID, activityID, activitySetting)\n {\n return new webooker_acivity_models.StudentDetail(reservations, schedules, studentID, activityID, activitySetting);\n }\n\n function saveAsync(reservations, studentID, activityID, reservationsOrig) {\n var deferred = $q.defer();\n\n if (angular.equals(reservations, reservationsOrig)) {\n deferred.resolve(reservations);\n } else {\n $http({\n method: 'POST',\n url: '/Api/ActivityReservations/Save',\n data: {\n studentID: studentID,\n activityID: activityID,\n reservations: reservations || []\n }\n })\n .success(function (data, status, headers, config) {\n deferred.resolve(data);\n notificationSvc.notifyInfo(\n $translate.instant('TXT_ALERT_TITLE_ACTION_REGISTRATION_SUCCESS'));\n })\n .error(function (errorResult, status, headers, config) {\n deferred.reject(errorResult);\n if (errorResult.status === 403) {\n notificationSvc.fatalNotify(\n $translate.instant('TXT_ALERT_TITLE_FORBIDEN'));\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_GET_ERROR'),\n notificationSvc.translateError(errorResult.data));\n }\n });\n }\n\n return deferred.promise;\n }\n\n return {\n getWeekModelByIntervals: getWeekModelByIntervals,\n getAllByStudentAndActivity: getAllByStudentAndActivity,\n createStudentDetailModel: createStudentDetailModel,\n saveAsync: saveAsync\n }\n\n}]);\n","'use strict';\n\nwbApp.factory('activityScheduleSvc', ['$resource', '$q', '$translate', 'repositorySvc', 'semesterSvc', 'notificationSvc',\nfunction ($resource, $q, $translate, repositorySvc, semesterSvc, notificationSvc) {\n var ActivitySchedules = $resource('/Api/ActivitySchedules/:id', {}, {\n 'getAllBySemesterAndActivityID': { method: 'GET', isArray: true, url: '/Api/ActivitySchedules/GetAllBySemesterAndActivityID' },\n 'save': { method: 'POST', url: '/Api/ActivitySchedules/Save', isArray: true },\n });\n\n var bySemesterAndActivity;\n var lastSemesterID;\n var lastActivityID;\n\n function getAllBySemesterAndActivityIDAsync(semesterID, activityID, reload) {\n if (!bySemesterAndActivity || lastSemesterID !== semesterID || lastActivityID !== activityID || reload) {\n bySemesterAndActivity = repositorySvc.customGet('getAllBySemesterAndActivityID', ActivitySchedules, {\n semesterID: semesterID,\n activityID: activityID\n });\n lastSemesterID = semesterID;\n lastActivityID = activityID;\n }\n\n return bySemesterAndActivity;\n }\n\n function getWeeksAsync(semesterID, activityID, reload) {\n var result = [];\n var deferred = $q.defer();\n\n $q.all([\n semesterSvc.getAsync(semesterID),\n getAllBySemesterAndActivityIDAsync(semesterID, activityID, reload).$promise\n ]).then(function (data) {\n var semester = data[0];\n var schedules = data[1];\n var scheduleModel = new webooker_acivity_models.Schedule(semester.startDate, semester.endDate, schedules);\n result.push.apply(result, scheduleModel.weeks);\n deferred.resolve(result);\n });\n\n result.$promise = deferred.promise;\n return result;\n }\n\n function getToBeSendToServer(selectedWeeks, semesterId, activityId) {\n var toBeSendToServer = [];\n for (var w = 0; w < selectedWeeks.length; w++) {\n var week = selectedWeeks[w];\n\n for (var s = 0; s < week.schedules.length; s++) {\n var schedule = week.schedules[s];\n\n schedule.semesterID = semesterId;\n schedule.activityID = activityId;\n toBeSendToServer.push(schedule);\n \n }\n }\n\n return toBeSendToServer;\n }\n\n function saveAsync(weeks, semesterId, activityId) {\n\n var toBeSendToServer = getToBeSendToServer(weeks, semesterId, activityId);\n\n var result = [];\n var deferred = $q.defer();\n\n var res = ActivitySchedules.save({\n semesterID: semesterId,\n activityID: activityId,\n model: toBeSendToServer\n });\n\n $q.all([ \n semesterSvc.getAsync(semesterId),\n res.$promise\n ]).then(function (data) {\n var semester = data[0];\n var schedules = data[1];\n var scheduleModel = new webooker_acivity_models.Schedule(semester.startDate, semester.endDate, schedules);\n result.push.apply(result, scheduleModel.weeks);\n\n bySemesterAndActivity = result;\n lastSemesterID = semesterId;\n lastActivityID = activityId;\n\n deferred.resolve(result);\n notificationSvc.notifyInfo($translate.instant('TXT_ALERT_TITLE_ACTIVITY_SCHEDULE_SAVED'));\n }, function (errorResult) {\n if (errorResult.status === 403) {\n notificationSvc.fatalNotify($translate.instant('TXT_ALERT_TITLE_FORBIDEN'));\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ACTIVIT_SCHEDULE_SAVE_ERROR'),\n notificationSvc.translateError(errorResult.data));\n }\n deferred.reject(errorResult);\n });\n\n return deferred.promise;\n }\n\n return {\n getWeeksAsync: getWeeksAsync,\n saveAsync: saveAsync\n }\n}]);\n","'use strict';\n\nwbApp.factory('activityStudentSettingSvc', ['$resource', '$q', 'repositorySvc',\n function ($resource, $q, repositorySvc) {\n\n var ActivityStudentSetting = $resource('/Api/ActivityStudentSetting/:id', {}, {\n 'getByStudentAndActivity': { method: 'GET', url: '/Api/ActivityStudentSetting/GetByStudentAndActivity' },\n 'update': { method: 'POST', url: '/Api/ActivityStudentSetting/Update' },\n 'insert': { method: 'POST', url: '/Api/ActivityStudentSetting/Insert' },\n 'delete': { method: 'POST', url: '/Api/ActivityStudentSetting/Delete' }\n });\n\n function createNew() {\n return {\n };\n }\n\n function getByStudentAndActivity(studentID, activityID) {\n return repositorySvc.customGet('getByStudentAndActivity', ActivityStudentSetting, {\n studentID: studentID,\n activityID: activityID\n });\n }\n\n function saveAsync(data, origData) {\n var deferred = $q.defer();\n\n function success(d) {\n deferred.resolve(d);\n }\n\n function error(e) {\n deferred.reject(e);\n }\n\n if (angular.equals(data, origData)) {\n deferred.resolve(data);\n } else {\n if (data.activityStudentSettingID) {\n update(data, success, error);\n } else {\n insert(data, success, error);\n }\n }\n\n return deferred.promise;\n }\n\n function insert(data, successCallback, errorCallback) {\n repositorySvc.insert(\n ActivityStudentSetting, // $resource\n null, // collection\n data, // entity\n successCallback,\n errorCallback,\n 'activityStudentSettingID');\n }\n\n function update(data, successCallback, errorCallback) {\n repositorySvc.update(\n ActivityStudentSetting, // $resource\n null, // collection\n data, // entity\n successCallback,\n errorCallback,\n 'activityStudentSettingID');\n }\n\n function remove(data, successCallback, errorCallback) {\n repositorySvc.remove(\n ActivityStudentSetting, // $resource\n null, // collection\n data, // entity\n successCallback,\n errorCallback,\n { activityStudentSettingID: data.activityStudentSettingID },\n 'activityStudentSettingID');\n }\n\n return {\n createNew: createNew,\n getByStudentAndActivity: getByStudentAndActivity,\n insert: insert,\n update: update,\n remove: remove,\n saveAsync: saveAsync\n }\n }]);","'use strict';\n\nwbApp.factory('activityTariffSvc', ['$resource', '$q', 'repositorySvc',\n function ($resource, $q, repositorySvc) {\n\n var ActivityTariffs = $resource('/Api/ActivityTariffs/:id', {}, {\n 'getAll': { method: 'GET', isArray: true, url: '/Api/ActivityTariffs/GetAll' },\n 'update': { method: 'POST', url: '/Api/ActivityTariffs/Update' },\n 'insert': { method: 'POST', url: '/Api/ActivityTariffs/Insert' },\n 'delete': { method: 'POST', url: '/Api/ActivityTariffs/Delete' }\n });\n\n var activityTariffs;\n var nonDeleted;\n\n function createNew() {\n return {\n price: 0\n };\n }\n\n function getAllAsync(reload) {\n if (!activityTariffs || reload) {\n activityTariffs = repositorySvc.customGet('getAll', ActivityTariffs);\n nonDeleted = null;\n }\n\n return activityTariffs;\n }\n\n\n function getAllNonDeletedAsync(reload, activityTariffID) {\n if (nonDeleted && !reload) {\n return nonDeleted;\n }\n\n var allActivityTariffs = getAllAsync(reload);\n nonDeleted = [];\n var deferred = $q.defer();\n nonDeleted.$promise = deferred.promise;\n\n allActivityTariffs.$promise.then(function (data) {\n angular.forEach(data, function (value, key) {\n if (!value.isDeleted || value.activityTariffID === activityTariffID) {\n nonDeleted.push(value);\n }\n });\n deferred.resolve(nonDeleted);\n }, function (reason) {\n deferred.reject(reason);\n });\n\n return nonDeleted;\n }\n\n function insert(data, successCallback, errorCallback) {\n repositorySvc.insert(\n ActivityTariffs, // $resource\n activityTariffs, // collection\n data, // entity\n success,\n errorCallback,\n 'activityTariffID');\n\n function success(entity) {\n repositorySvc.entityInserted(nonDeleted, entity);\n\n if (successCallback) {\n successCallback(entity);\n }\n }\n }\n\n function update(data, successCallback, errorCallback) {\n repositorySvc.update(\n ActivityTariffs, // $resource\n activityTariffs, // collection\n data, // entity\n success,\n errorCallback,\n 'activityTariffID');\n\n function success(entity) {\n repositorySvc.entityUpdated(nonDeleted, entity, 'activityTariffID');\n\n if (successCallback) {\n successCallback(entity);\n }\n }\n }\n\n function remove(data, successCallback, errorCallback) {\n repositorySvc.remove(\n ActivityTariffs, // $resource\n activityTariffs, // collection\n data, // entity\n success,\n errorCallback,\n { activityTariffID: data.activityTariffID },\n 'activityTariffID');\n\n function success() {\n repositorySvc.entityRemoved(nonDeleted, data.id, 'activityTariffID');\n\n if (successCallback) {\n successCallback();\n }\n }\n }\n\n return {\n createNew: createNew,\n getAllAsync: getAllAsync,\n getAllNonDeletedAsync: getAllNonDeletedAsync,\n insert: insert,\n update: update,\n remove: remove\n }\n }]);","'use strict';\n\nwbApp.factory('contractSvc', ['$resource', '$q', 'repositorySvc', 'accountingBookSvc',\n function ($resource, $q, repositorySvc, accountingBookSvc) {\n\n const Contract = $resource('/restapi/contracts/:id', {}, {\n 'getById': {method: 'GET', url: '/restapi/contracts/:id'},\n 'getAll': {method: 'GET', isArray: true, url: '/restapi/contracts'},\n 'insert': {method: 'POST', url: '/restapi/contracts'},\n 'update': {method: 'PUT', url: '/restapi/contracts/:id'},\n 'delete': {method: 'DELETE', url: '/restapi/contracts/:id'},\n 'sendContracts': {method: 'POST', url: '/restapi/contracts/:id/send-contracts-notification'}\n });\n\n let contracts;\n\n function createNew()\n {\n return $q(function (resolve, reject) {\n var model = {\n id: null,\n isActive: true,\n contractSchedules: [{}],\n userId: null,\n studentId: null\n };\n\n let dfAccountingBookPromise = accountingBookSvc.getDefaultAsync();\n dfAccountingBookPromise.then(function (acc) {\n model.accountingBookId = acc.id;\n resolve(model);\n }, function (err) {\n reject(err);\n });\n })\n }\n \n function transformModelForSave(model) {\n model.userFullName = null;\n\n if (!model.contractSchedules || model.contractSchedules.length === 0) {\n model.contractSchedules = [];\n }\n\n _.forEach(model.contractSchedules, function(schedule) {\n schedule.monday = transformDayModelForSave(schedule.monday);\n schedule.tuesday = transformDayModelForSave(schedule.tuesday);\n schedule.wednesday = transformDayModelForSave(schedule.wednesday);\n schedule.thursday = transformDayModelForSave(schedule.thursday);\n schedule.friday = transformDayModelForSave(schedule.friday);\n schedule.saturday = transformDayModelForSave(schedule.saturday);\n schedule.sunday = transformDayModelForSave(schedule.sunday);\n });\n \n model.contractTemplatesIds = [];\n if (!!model.contractTemplateType0) model.contractTemplatesIds.push(model.contractTemplateType0);\n if (!!model.contractTemplateType1) model.contractTemplatesIds.push(model.contractTemplateType1);\n if (!!model.contractTemplateType2) model.contractTemplatesIds.push(model.contractTemplateType2);\n if (!!model.contractTemplateType3) model.contractTemplatesIds.push(model.contractTemplateType3);\n if (!!model.contractTemplateType4) model.contractTemplatesIds.push(model.contractTemplateType4);\n if (!!model.contractTemplateType6) model.contractTemplatesIds.push(model.contractTemplateType6);\n if (!!model.contractTemplateType7) model.contractTemplatesIds.push(model.contractTemplateType7);\n\n return model;\n }\n \n function getContractTemplateIdByType(model, contractTemplateType)\n {\n return _.find(model.contractTemplatesInfos, { 'contractTemplateType' : contractTemplateType })?.id;\n }\n \n function transformModelForEdit(model) {\n model.userFullName = '';\n \n if (!model.contractSchedules || model.contractSchedules.length === 0) {\n model.contractSchedules = [];\n }\n \n _.forEach(model.contractSchedules, function(schedule) {\n schedule.monday = transformDayModelForEdit(schedule.monday);\n schedule.tuesday = transformDayModelForEdit(schedule.tuesday);\n schedule.wednesday = transformDayModelForEdit(schedule.wednesday);\n schedule.thursday = transformDayModelForEdit(schedule.thursday);\n schedule.friday = transformDayModelForEdit(schedule.friday);\n schedule.saturday = transformDayModelForEdit(schedule.saturday);\n schedule.sunday = transformDayModelForEdit(schedule.sunday);\n });\n \n if (!model.contractTemplatesInfos) {\n model.contractTemplatesInfos = [];\n }\n model.contractTemplateType0 = _.find(model.contractTemplatesInfos, { 'contractTemplateType' : 0 })?.id;\n model.contractTemplateType1 = _.find(model.contractTemplatesInfos, { 'contractTemplateType' : 1 })?.id;\n model.contractTemplateType2 = _.find(model.contractTemplatesInfos, { 'contractTemplateType' : 2 })?.id;\n model.contractTemplateType3 = _.find(model.contractTemplatesInfos, { 'contractTemplateType' : 3 })?.id;\n model.contractTemplateType4 = _.find(model.contractTemplatesInfos, { 'contractTemplateType' : 4 })?.id;\n model.contractTemplateType6 = _.find(model.contractTemplatesInfos, { 'contractTemplateType' : 6 })?.id;\n model.contractTemplateType7 = _.find(model.contractTemplatesInfos, { 'contractTemplateType' : 7 })?.id;\n \n return model;\n }\n \n function transformDayModelForEdit(dayModel) {\n if (!dayModel) {\n return {\n active: false,\n startTime: null,\n endTime: null,\n food: false\n };\n } else {\n dayModel.active = true;\n if (!isNaN(dayModel.startTime)) {\n dayModel.startTime = moment().startOf('day').add(dayModel.startTime, 'minutes').toDate();\n }\n if (!isNaN(dayModel.endTime)) {\n dayModel.endTime = moment().startOf('day').add(dayModel.endTime, 'minutes').toDate();\n }\n }\n \n return dayModel;\n }\n\n function transformDayModelForSave(dayModel) {\n if (!dayModel.active) {\n return null;\n } else {\n if (moment(dayModel.startTime).isValid()) {\n let midnight = moment(dayModel.startTime).startOf('day');\n dayModel.startTime = moment(dayModel.startTime).diff(midnight, 'minutes')\n } else {\n dayModel.startTime = null;\n }\n if (moment(dayModel.endTime).isValid()) {\n let midnight = moment(dayModel.endTime).startOf('day');\n dayModel.endTime = moment(dayModel.endTime).diff(midnight, 'minutes')\n } else {\n dayModel.endTime = null;\n }\n }\n\n return dayModel;\n } \n \n function sendContracts(contractId, contractTemplateTypes) {\n return repositorySvc.customPostWithParams(\n 'sendContracts',\n Contract,\n { id: contractId },\n {\n contractTemplateTypes: contractTemplateTypes\n }); \n }\n\n function insert(model) {\n return repositorySvc.customPost(\n 'insert',\n Contract,\n model);\n }\n\n function remove(rentCategoryId) {\n contracts = null;\n return repositorySvc.customDelete(\n 'delete',\n Contract,\n { id: rentCategoryId });\n }\n\n function update(model) {\n contracts = null;\n return repositorySvc.customPutWithParams(\n 'update',\n Contract,\n { id: model.id },\n convertDatesToDateString(model));\n }\n\n function getById(id) {\n return repositorySvc.customGet('getById', Contract, { id: id });\n }\n\n function getAll(refresh) {\n if (!contracts || refresh) {\n contracts = repositorySvc.customGet('getAll', Contract, { \n expanded: 'SimplePersonalInfo,ContractTemplatesInfo'\n });\n }\n return contracts;\n }\n \n return {\n createNew: createNew,\n getById: getById,\n getAll: getAll,\n insert: insert,\n remove: remove,\n update: update,\n transformModelForEdit: transformModelForEdit,\n transformModelForSave: transformModelForSave,\n getContractTemplateIdByType: getContractTemplateIdByType,\n sendContracts: sendContracts\n }\n }]);","'use strict';\n\nwbApp.factory('contractTemplateSvc', ['$resource', '$q', 'repositorySvc', \n function ($resource, $q, repositorySvc) {\n\n const ContractTemplate = $resource('/restapi/contract-templates/:id', {}, {\n 'getById': {method: 'GET', url: '/restapi/contract-templates/:id'},\n 'getAll': {method: 'GET', isArray: true, url: '/restapi/contract-templates'},\n 'insert': {method: 'POST', url: '/restapi/contract-templates'},\n 'update': {method: 'PUT', url: '/restapi/contract-templates/:id'},\n 'delete': {method: 'DELETE', url: '/restapi/contract-templates/:id'},\n 'getVariablesByType': {method: 'GET', isArray: true, url: '/restapi/contract-templates/template-types/:id/variables'},\n 'getSampleByType': {method: 'GET', url: '/restapi/contract-templates/template-types/:id/sample-template'},\n });\n\n let contractTemplates;\n\n function createNew()\n {\n return {\n id: null,\n name: \"\",\n contractTemplateType: 0,\n templateData: \"\"\n };\n }\n\n function insert(model) {\n return repositorySvc.customPost(\n 'insert',\n ContractTemplate,\n model);\n }\n\n function remove(id) {\n contractTemplates = null;\n return repositorySvc.customDelete(\n 'delete',\n ContractTemplate,\n { id: id });\n }\n\n function update(model) {\n contractTemplates = null;\n return repositorySvc.customPutWithParams(\n 'update',\n ContractTemplate,\n { id: model.id },\n convertDatesToDateString(model));\n }\n\n function getById(id) {\n return repositorySvc.customGet('getById', ContractTemplate, { id: id });\n }\n\n function getSampleByType(typeId) {\n return repositorySvc.customGet('getSampleByType', ContractTemplate, { id: typeId });\n } \n\n function getAll(refresh) {\n if (!contractTemplates || refresh) {\n contractTemplates = repositorySvc.customGet('getAll', ContractTemplate, {});\n }\n return contractTemplates;\n }\n \n function getAllWithFilter(refresh, contractTemplateType) {\n if (typeof contractTemplateType === 'undefined' || contractTemplateType === null)\n {\n return getAll(refresh);\n }\n else\n {\n var deferred = $q.defer();\n var m = [];\n m.$promise = deferred.promise;\n\n let models = getAll(refresh);\n models.$promise.then(function() {\n m.push.apply(m, _.filter(models, {'contractTemplateType': contractTemplateType}));\n deferred.resolve(m);\n });\n \n return m;\n }\n }\n\n function getVariablesByType(typeId) {\n return repositorySvc.customGet('getVariablesByType', ContractTemplate, { id: typeId });\n } \n \n return {\n createNew: createNew,\n getById: getById,\n getAll: getAll,\n insert: insert,\n remove: remove,\n update: update,\n getVariablesByType: getVariablesByType,\n getAllWithFilter: getAllWithFilter,\n getSampleByType: getSampleByType\n }\n }]);","'use strict';\n\nwbApp.factory('czMsMtRegistrySvc', ['$q', '$resource', 'repositorySvc', 'localStorageService',\n function ($q, $resource, repositorySvc, localStorageService) {\n const CzMsMtRegistry = $resource('/restapi/cz-ms-mt-registry/:id', {}, {\n 'getById': {method: 'GET', url: '/restapi/cz-ms-mt-registry/:id'},\n 'findByStudent': {method: 'GET', isArray: true, url: '/restapi/cz-ms-mt-registry/find-by-student'},\n 'findLatestByActivity': {method: 'GET', isArray: true, url: '/restapi/cz-ms-mt-registry/find-latest-by-activity'},\n 'insert': {method: 'POST', url: '/restapi/cz-ms-mt-registry'},\n 'update': {method: 'PUT', url: '/restapi/cz-ms-mt-registry/:id'},\n 'delete': {method: 'DELETE', url: '/restapi/cz-ms-mt-registry/:id'},\n 'lists': {method: 'GET', url: '/restapi/cz-ms-mt-registry/registry-lists' },\n 'validate': {method: 'POST', isArray: true, url: '/restapi/cz-ms-mt-registry/registry-validate'},\n 'getStudent': {method: 'GET', url: '/restapi/students/:id' },\n 'getActivity': {method: 'GET', url: '/restapi/activities/:id'},\n 'export': {method: 'POST', url: '/restapi/cz-ms-mt-registry/registry-export'},\n });\n \n function newExportModel() {\n let model = {\n fromDate: new Date(moment().year() - 1, 9, 1),\n toDate: new Date(moment().year(), 8, 30),\n izo: '',\n cast: '',\n druhProvozu: '1',\n rozliseni: '0',\n prumDobaCelodenniProvoz: 0,\n prumDobaPolodenniProvoz: 0,\n prumDobaInternatniProvoz: 0,\n activityIds: []\n };\n\n if (localStorageService.isSupported) {\n let izo = localStorageService.get('CzMsMtRegistry-izo');\n if (izo) {\n model.izo = izo;\n }\n let cast = localStorageService.get('CzMsMtRegistry-cast');\n if (cast) {\n model.cast = cast;\n }\n let druhProvozu = localStorageService.get('CzMsMtRegistry-druhProvozu');\n if (druhProvozu) {\n model.druhProvozu = druhProvozu;\n }\n let rozliseni = localStorageService.get('CzMsMtRegistry-rozliseni');\n if (rozliseni) {\n model.rozliseni = rozliseni;\n } \n }\n \n return model;\n }\n\n function fromExportModelToDTO(model) {\n let dto = {\n fromDateUtc: moment(model.fromDate).startOf('day').toDate(),\n toDateUtc: moment(model.toDate).startOf('day').toDate(),\n izo: model.izo,\n cast: model.cast,\n druhProvozu: model.druhProvozu,\n rozliseni: model.rozliseni,\n prumDobaCelodenniProvoz: model.prumDobaCelodenniProvoz,\n prumDobaPolodenniProvoz: model.prumDobaPolodenniProvoz,\n prumDobaInternatniProvoz: model.prumDobaInternatniProvoz,\n activityIds: model.activityIds\n };\n return convertDatesToDateString(dto);\n }\n\n function saveExportToLocalStorage(model) {\n if (localStorageService.isSupported) {\n localStorageService.set('CzMsMtRegistry-izo', model.izo);\n localStorageService.set('CzMsMtRegistry-cast', model.cast);\n localStorageService.set('CzMsMtRegistry-druhProvozu', model.druhProvozu);\n localStorageService.set('CzMsMtRegistry-rozliseni', model.rozliseni);\n }\n }\n \n function exportToXml(model) {\n let dto = fromExportModelToDTO(model);\n saveExportToLocalStorage(model);\n return repositorySvc.customPostWithParams(\n 'export',\n CzMsMtRegistry,\n { },\n dto,\n null,\n null,\n true); \n }\n \n function saveToLocalStorage(model) {\n if (localStorageService.isSupported) {\n localStorageService.set('CzMsMtRegistry-izo', model.izo);\n localStorageService.set('CzMsMtRegistry-cast', model.cast);\n if (model.activityId) {\n localStorageService.set(`CzMsMtRegistry-cast-${model.activityId}-provoz`, model.provoz);\n localStorageService.set(`CzMsMtRegistry-cast-${model.activityId}-jazyK_O`, model.jazyK_O);\n }\n }\n }\n \n function loadFromLocalStorage(model) {\n if (localStorageService.isSupported) {\n let izo = localStorageService.get('CzMsMtRegistry-izo');\n if (izo) {\n model.izo = izo;\n }\n let cast = localStorageService.get('CzMsMtRegistry-cast');\n if (cast) {\n model.cast = cast;\n }\n let provoz = localStorageService.get(`CzMsMtRegistry-cast-${model.activityId}-provoz`);\n if (provoz) {\n model.provoz = provoz;\n }\n let jazyK_O = localStorageService.get(`CzMsMtRegistry-cast-${model.activityId}-jazyK_O`);\n if (jazyK_O) {\n model.jazyK_O = jazyK_O;\n }\n }\n }\n \n function changeActivityId(model, activityId) {\n return $q(function (resolve, reject) {\n repositorySvc.customGet('getActivity', CzMsMtRegistry, { id: activityId }).$promise.then(\n function(activity) {\n model.activityId = activityId;\n model.trida = activity.name;\n resolve(model);\n }, reject);\n });\n }\n \n function createNew(semesterId, activityId) {\n return $q(function (resolve, reject) {\n repositorySvc.customGet('getActivity', CzMsMtRegistry, { id: activityId }).$promise.then(\n function(activity) {\n let model = {\n id: null,\n studentId: null,\n semesterId: semesterId,\n activityId: activityId,\n trida: activity.name,\n requireSpecialEducation: false,\n validFromUtc: new Date(),\n kstpr: \"3\",\n stpr: \"203\",\n sP_OBVOD: \"1\",\n // obecb\n koD_ZAH: \"1\",\n // prizN_ST: \"C\"\n // provoz: \"C\"\n jazyK_O: \"10\",\n zpusob: \"1\",\n koD_VETY: \"1\",\n koD_ZMEN: \"0\",\n };\n loadFromLocalStorage(model);\n resolve(model);\n },\n reject\n );\n });\n }\n \n function changeStudentId(model, studentId) {\n return $q(function (resolve, reject) {\n model.studentId = studentId;\n if (!!studentId) {\n $q.all([\n findByStudent(model.studentId).$promise,\n repositorySvc.customGet('getStudent', CzMsMtRegistry, { id: studentId })\n ]).then(function (data) {\n let studentRecords = data[0];\n let student = data[1];\n if (!!student) {\n model.rodc = student.personalIDNumber;\n model.birthday = student.birthday;\n model.pohlavi = student.gender === 'F' ? '2' : '1';\n }\n if (!!studentRecords) {\n let last = _.find(studentRecords, {isLast: true});\n if (!!last) {\n let semesterId = model.semesterId;\n let activityId = model.activityId;\n\n _.assign(model, last);\n\n model.semesterId = semesterId;\n model.activityId = activityId;\n model.validFromUtc = new Date();\n } \n }\n resolve(model);\n }, reject);\n } else {\n resolve(model);\n }\n });\n }\n\n function getById(id) {\n return $q(function(resolve, reject) {\n repositorySvc.customGet('getById', CzMsMtRegistry, { id: id }).$promise.then(\n function(data) {\n resolve(fromDTOToModel(data));\n }, reject);\n });\n }\n \n function findByStudent(studentId) {\n let deferred = $q.defer();\n let result = [];\n result.$promise = deferred.promise;\n \n repositorySvc.customGet('findByStudent', CzMsMtRegistry, { studentId: studentId }).$promise.then(\n function(data) {\n deferred.resolve(_.map(data, fromDTOToModel));\n }, deferred.reject);\n\n return result;\n }\n\n function findLatestByActivity(activityId) {\n let deferred = $q.defer();\n let result = [];\n result.$promise = deferred.promise;\n\n repositorySvc.customGet('findLatestByActivity', CzMsMtRegistry, { activityId: activityId }).$promise.then(\n function(data) {\n deferred.resolve(_.map(data, fromDTOToModel));\n }, deferred.reject);\n \n return result;\n }\n\n function insert(model, successCallback, errorCallback) {\n saveToLocalStorage(model);\n let dto = fromModelToDTO(model);\n return repositorySvc.insert(\n CzMsMtRegistry, // $resource\n null, // collection\n dto, // entity\n successCallback,\n errorCallback);\n }\n\n function update(model) {\n saveToLocalStorage(model);\n let dto = fromModelToDTO(model);\n return repositorySvc.customPutWithParams(\n 'update',\n CzMsMtRegistry, \n { id: dto.id },\n dto);\n }\n\n function validate(model) {\n let dto = fromModelToDTO(model);\n return repositorySvc.customPostWithParams(\n 'validate',\n CzMsMtRegistry,\n { },\n dto,\n null,\n null,\n true);\n }\n\n function remove(id) {\n return repositorySvc.customDelete(\n 'delete',\n CzMsMtRegistry,\n { id: id });\n }\n\n let listsCache = null;\n \n function lists() {\n if (!listsCache) {\n listsCache = repositorySvc.customGet('lists', CzMsMtRegistry, {});\n }\n \n return listsCache;\n }\n \n function setRequireSpecialEducation(model, requireSpecialEducation) {\n if (!requireSpecialEducation) {\n model.koD_ZAKA = null;\n model.tyP_TR = null;\n model.tyP_TR2 = null;\n model.zvj = null;\n model.nadani = null;\n model.sz = null;\n model.zz = null;\n model.pspo = null;\n model.iD_ZNEV = null;\n }\n else {\n model.koD_ZAKA = model.studentId;\n }\n }\n \n function fromModelToDTO(model) {\n model.validFromUtc = moment(model.validFromUtc).startOf('day').toDate();\n if (model.okresb === '999xxx' && model.okresb2 != null) {\n model.okresb = '999' + model.okresb2;\n }\n \n delete model.okresb2;\n \n return convertDatesToDateString(model);\n // let dto = _.clone(model, true);\n // if (!!dto.iD_ZNEV && Array.isArray(dto.iD_ZNEV) && dto.iD_ZNEV.length > 0) {\n // dto.iD_ZNEV = dto.iD_ZNEV.join(\",\");\n // } else {\n // dto.iD_ZNEV = null;\n // }\n // return dto;\n }\n \n function fromDTOToModel(dto) {\n if (dto.okresb != null && dto.okresb.startsWith('999'))\n {\n dto.okresb2 = dto.okresb.substring(3);\n dto.okresb = '999xxx';\n }\n return dto;\n }\n\n return {\n createNew: createNew,\n newExportModel: newExportModel,\n findByStudent: findByStudent,\n findLatestByActivity: findLatestByActivity,\n getById: getById,\n insert: insert,\n update: update,\n remove: remove,\n lists: lists,\n setRequireSpecialEducation: setRequireSpecialEducation,\n validate: validate,\n changeStudentId: changeStudentId,\n changeActivityId: changeActivityId,\n exportToXml: exportToXml\n }\n }]);","wbApp.factory('invoiceRecurrenceScheduleSvc', ['$resource', '$q', '$translate', '$filter', 'repositorySvc', 'notificationSvc', 'tenantSettingSvc', 'semesterSvc', 'activityStudentSettingSvc', 'activitySvc',\nfunction ($resource, $q, $translate, $filter, repositorySvc, notificationSvc, tenantSettingSvc, semesterSvc, activityStudentSettingSvc, activitySvc) {\n\n //var ActivityReconciliations = $resource('/Api/ActivityReconciliations/:id', {}, {\n // 'getStudentsByActivity': { method: 'GET', isArray: true, url: '/Api/ActivityReconciliations/GetStudentsByActivity' },\n // 'getStudentsAttendanceByActivity': { method: 'GET', isArray: true, url: '/Api/ActivityReconciliations/GetStudentsAttendanceByActivity' },\n // 'getByStudentAndActivity': { method: 'GET', isArray: true, url: '/Api/ActivityReconciliations/GetByStudentAndActivity' },\n // 'getReconciliationDetail': { method: 'GET', isArray: false, url: '/Api/ActivityReconciliations/GetReconciliationDetail' },\n // 'insertReconciliationDetail': { method: 'POST', url: '/Api/ActivityReconciliations/InsertReconciliationDetail' },\n // 'updateReconciliationDetail': { method: 'POST', url: '/Api/ActivityReconciliations/UpdateReconciliationDetail' },\n // 'deleteReconciliationDetail': { method: 'POST', url: '/Api/ActivityReconciliations/DeleteReconciliationDetail' },\n // 'sendReconciliationNotification': { method: 'POST', url: '/Api/ActivityReconciliations/SendReconciliationNotification' },\n // 'getAvailableExuses': { method: 'GET', url: '/Api/ActivityReconciliations/GetAvailableExuses' }\n //});\n\n // var invoiceRecurrenceSchedules = [];\n\n var InvoiceRecurrenceSchedule = $resource('/Api/InvoiceRecurrenceSchedule/:id', {}, {\n 'query': { method: 'GET', isArray: true },\n 'update': { method: 'POST', url: '/Api/InvoiceRecurrenceSchedule/Update' },\n 'insert': { method: 'POST', url: '/Api/InvoiceRecurrenceSchedule/Insert' },\n 'delete': { method: 'POST', url: '/Api/InvoiceRecurrenceSchedule/Delete' },\n 'getAllForStudentAndActivity': { method: 'GET', isArray: true, url: '/Api/InvoiceRecurrenceSchedule/GetAllForStudentAndActivity' }\n });\n\n function getAllForStudentAndActivity(semesterID, studentID, activityID) {\n var deferred = $q.defer();\n var result = [];\n\n $q.all([\n repositorySvc.customGet('getAllForStudentAndActivity', InvoiceRecurrenceSchedule, {\n studentID: studentID,\n activityID: activityID\n }).$promise,\n // semesterSvc.getAsync(semesterID),\n activityStudentSettingSvc.getByStudentAndActivity(studentID, activityID).$promise,\n activitySvc.getBySemesterIDAndActivityID(semesterID, activityID)\n ]).then(function (data) {\n\n angular.forEach(data[0], function (m) {\n var model = new webooker_acivity_models.RecurringSchedule($translate);\n model.initData(m);\n model.tariffFullName = data[1].tariffName + ' (' + $filter('wbCurrencyFlt')(data[1].tariffPrice) + ')';\n // This does not look right! Why to update price on existing invoices: https://aperus.atlassian.net/browse/WEB-409\n //model.invoice.invoiceLineKindergartenSnackUnitPrice = data[2].defaultSnackPrice;\n //model.invoice.invoiceLineKindergartenLunchUnitPrice = data[2].defaultLunchPrice;\n result.push(model);\n });\n\n deferred.resolve(result);\n }, function (errorResult) {\n deferred.reject(errorResult);\n });\n\n result.$promise = deferred.promise;\n return result;\n }\n\n function createNew(semesterID, studentID, activityID) {\n var m = {\n invoiceRecurrenceScheduleID: 0,\n reccurenceUnitTypeID: 3,\n repeatEveryNoOfUnits: 1,\n endAfterNoOfIssues: null,\n studentID: studentID,\n activityID: activityID,\n semesterID: semesterID,\n startDate: moment().startOf('day').toDate(),\n active: true,\n invoice: {\n customerStudentID: studentID\n }\n };\n\n var model = new webooker_acivity_models.RecurringSchedule($translate);\n model.initData(m);\n\n var deferred = $q.defer();\n model.$promise = deferred.promise;\n\n $q.all([\n semesterSvc.getAsync(semesterID),\n activityStudentSettingSvc.getByStudentAndActivity(studentID, activityID).$promise,\n activitySvc.getBySemesterIDAndActivityID(semesterID, activityID)]\n ).then(function (data) {\n model.endAtSpecificDate = data[0].endDate;\n model.endIssueTypeID = 1;\n model.invoice.invoiceLineKindergartenFeeReccuringUnitPrice = data[1].tariffPrice;\n model.invoice.invoiceLineKindergartenFeeReccuringQty = 1;\n model.tariffFullName = data[1].tariffName + ' (' + $filter('wbCurrencyFlt')(data[1].tariffPrice) + ')';\n model.invoice.invoiceLineKindergartenSnackUnitPrice = data[2].defaultSnackPrice;\n model.invoice.invoiceLineKindergartenLunchUnitPrice = data[2].defaultLunchPrice;\n\n deferred.resolve(model);\n }, function (errorResult) {\n deferred.reject(errorResult);\n });\n\n return model;\n }\n\n function insert(data, successCallback, errorCallback) {\n\n var dto = data.getDTO($translate);\n\n repositorySvc.insert(\n InvoiceRecurrenceSchedule, // $resource\n null, // collection\n dto, // entity\n successCallback,\n errorCallback);\n }\n\n\n function update(data, successCallback, errorCallback) {\n\n var dto = data.getDTO($translate);\n\n repositorySvc.update(\n InvoiceRecurrenceSchedule, // $resource\n null, // collection\n dto, // entity\n successCallback,\n errorCallback,\n 'invoiceRecurrenceScheduleID');\n }\n\n function remove(data, successCallback, errorCallback) {\n\n var dto = data.getDTO($translate);\n\n repositorySvc.remove(\n InvoiceRecurrenceSchedule, // $resource\n null, // collection\n dto, // entity\n successCallback, \n errorCallback,\n null,\n 'invoiceRecurrenceScheduleID');\n }\n\n return {\n createNew: createNew,\n insert: insert,\n update: update,\n remove: remove,\n getAllForStudentAndActivity: getAllForStudentAndActivity\n }\n\n}]);\n","'use strict';\nangular.module('authDirectives', []).directive('authDirective', function ($modal) {\n return {\n restrict: 'C',\n link: function (scope, elem, attrs) {\n scope.$on('event:auth-loginRequired', function () {\n console.log('auth-loginRequired');\n\n\n\n });\n }\n };\n});","wbApp.constant('uiCodemirrorConfig', {})\n .directive('uiCodemirror', ['$timeout', 'uiCodemirrorConfig',\nfunction uiCodemirrorDirective($timeout, uiCodemirrorConfig) {\n\n return {\n restrict: 'EA',\n require: '?ngModel',\n compile: function compile() {\n\n // Require CodeMirror\n if (angular.isUndefined(window.CodeMirror)) {\n throw new Error('ui-codemirror needs CodeMirror to work... (o rly?)');\n }\n\n return postLink;\n }\n };\n\n function postLink(scope, iElement, iAttrs, ngModel) {\n\n var codemirrorOptions = angular.extend(\n { value: iElement.text() },\n uiCodemirrorConfig.codemirror || {},\n scope.$eval(iAttrs.uiCodemirror),\n scope.$eval(iAttrs.uiCodemirrorOpts)\n );\n\n var codemirror = newCodemirrorEditor(iElement, codemirrorOptions);\n\n configOptionsWatcher(\n codemirror,\n iAttrs.uiCodemirror || iAttrs.uiCodemirrorOpts,\n scope\n );\n\n configNgModelLink(codemirror, ngModel, scope);\n\n configUiRefreshAttribute(codemirror, iAttrs.uiRefresh, scope);\n\n // Allow access to the CodeMirror instance through a broadcasted event\n // eg: $broadcast('CodeMirror', function(cm){...});\n scope.$on('CodeMirror', function (event, callback) {\n if (angular.isFunction(callback)) {\n callback(codemirror);\n } else {\n throw new Error('the CodeMirror event requires a callback function');\n }\n });\n\n // onLoad callback\n if (angular.isFunction(codemirrorOptions.onLoad)) {\n codemirrorOptions.onLoad(codemirror);\n }\n }\n\n function newCodemirrorEditor(iElement, codemirrorOptions) {\n var codemirrot;\n\n if (iElement[0].tagName === 'TEXTAREA') {\n // Might bug but still ...\n codemirrot = window.CodeMirror.fromTextArea(iElement[0], codemirrorOptions);\n } else {\n iElement.html('');\n codemirrot = new window.CodeMirror(function (cm_el) {\n iElement.append(cm_el);\n }, codemirrorOptions);\n }\n\n return codemirrot;\n }\n\n function configOptionsWatcher(codemirrot, uiCodemirrorAttr, scope) {\n if (!uiCodemirrorAttr) { return; }\n\n var codemirrorDefaultsKeys = Object.keys(window.CodeMirror.defaults);\n scope.$watch(uiCodemirrorAttr, updateOptions, true);\n function updateOptions(newValues, oldValue) {\n if (!angular.isObject(newValues)) { return; }\n codemirrorDefaultsKeys.forEach(function (key) {\n if (newValues.hasOwnProperty(key)) {\n\n if (oldValue && newValues[key] === oldValue[key]) {\n return;\n }\n\n codemirrot.setOption(key, newValues[key]);\n }\n });\n }\n }\n\n function configNgModelLink(codemirror, ngModel, scope) {\n if (!ngModel) { return; }\n // CodeMirror expects a string, so make sure it gets one.\n // This does not change the model.\n ngModel.$formatters.push(function (value) {\n if (angular.isUndefined(value) || value === null) {\n return '';\n } else if (angular.isObject(value) || angular.isArray(value)) {\n throw new Error('ui-codemirror cannot use an object or an array as a model');\n }\n return value;\n });\n\n\n // Override the ngModelController $render method, which is what gets called when the model is updated.\n // This takes care of the synchronizing the codeMirror element with the underlying model, in the case that it is changed by something else.\n ngModel.$render = function () {\n //Code mirror expects a string so make sure it gets one\n //Although the formatter have already done this, it can be possible that another formatter returns undefined (for example the required directive)\n var safeViewValue = ngModel.$viewValue || '';\n codemirror.setValue(safeViewValue);\n };\n\n\n // Keep the ngModel in sync with changes from CodeMirror\n codemirror.on('change', function (instance) {\n var newValue = instance.getValue();\n if (newValue !== ngModel.$viewValue) {\n scope.$evalAsync(function () {\n ngModel.$setViewValue(newValue);\n });\n }\n });\n }\n\n function configUiRefreshAttribute(codeMirror, uiRefreshAttr, scope) {\n if (!uiRefreshAttr) { return; }\n\n scope.$watch(uiRefreshAttr, function (newVal, oldVal) {\n // Skip the initial watch firing\n if (newVal !== oldVal) {\n $timeout(function () {\n codeMirror.refresh();\n });\n }\n });\n }\n}]);","'use strict';\n\nwbApp.directive('wbErrorAlert',\n function () {\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n scope: { serverError: '=ngModel' },\n replace: true,\n template:\n \"
\" +\n \"{{'TXT_TITLE_FIX_ERRORS' | translate}}\" +\n \"\" +\n \"\" +\n \"\" +\n \"
\"\n }\n });","wbApp.directive('wbToastUiEditor', ['$window', '$timeout', 'languageService',\n function ($window, $timeout, languageService) {\n let currentLangKey = languageService.currentLangKey();\n \n\n function isHtml(input) {\n //console.error(input);\n return /<[a-z]+\\d?(\\s+[\\w-]+=(\"[^\"]*\"|'[^']*'))*\\s*\\/?>|&#?\\w+;/i.test(input);\n }\n\n // issue: https://github.com/nhn/tui.editor/issues/485\n //
to \\\n function transformMarkdownOut(input) {\n return input.replace(/
/g, \"\\\\\"); //.replace(/
/g, \"\\\\\\n\");\n }\n\n // issue: https://github.com/nhn/tui.editor/issues/485\n // \\ to
\n function transformMarkdownIn(input) {\n return input.replace(/\\\\\\n/g, \"
\\n\");\n }\n \n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n status: '=ngModel',\n height: '=ngHeight',\n },\n replace: true,\n template: '
',\n link: function (scope, element, attrs, ctrl) {\n $timeout(function () {\n const editor = new toastui.Editor({\n el: element[0], \n height: scope.height || '300px',\n initialValue: transformMarkdownIn(ctrl.$viewValue || ''),\n hideModeSwitch: false,\n initialEditType: 'wysiwyg',\n language: currentLangKey,\n events: {\n change: function(data) {\n let markDown = transformMarkdownOut(editor.getMarkdown());\n //console.error(markDown);\n ctrl.$setViewValue(markDown);\n }\n },\n // hooks: {\n // addImageBlobHook(imgeBlob, callback) {\n // }\n // }, \n toolbarItems: [\n ['heading', 'bold', 'italic', 'strike'],\n ['hr', 'quote'],\n ['ul', 'ol', 'task', 'indent', 'outdent'],\n ['table', 'link'],\n ['code', 'codeblock'],\n ['scrollSync'],\n ], \n });\n editor.removeHook('addImageBlobHook');\n\n ctrl.$render = function () {\n if (isHtml(ctrl.$viewValue)) {\n editor.setHTML(ctrl.$viewValue);\n } else {\n editor.setMarkdown(transformMarkdownIn(ctrl.$viewValue));\n }\n }\n });\n }\n }\n }]);","wbApp.directive('wbAccountingBookCombo', ['$timeout', '$translate', 'accountingBookSvc',\n function ($timeout, $translate, accountingBookSvc) {\n function formatResult(model) {\n if (!model) { return; }\n\n if (model.isDefault) {\n return \"
\" +\n \"
\" + model.name + \"
\" +\n \"
\" + (model.subjectName || '') + \"
\" +\n \"
\";\n } else {\n return \"
\" +\n \"
\" + model.name + \"
\" +\n \"
\" + (model.subjectName || '') + \"
\" +\n \"
\";\n }\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n\n var models = accountingBookSvc.getAllAsync();\n\n $timeout(function () {\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_ACCOUNTING_BOOK'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: models\n });\n\n ctrl.$render();\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n return value + \"\";\n }\n });\n\n ctrl.$render = function () {\n models.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n }\n\n elm.on('change', function (e) {\n scope.$apply(function () {\n ctrl.$setViewValue(e.val);\n });\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]); ","wbApp.directive('wbActionCombo', ['$timeout', '$translate', '$filter', 'courseSvc',\n function ($timeout, $translate, $filter, courseSvc) {\n function formatResult(course) {\n if (!course) { return; }\n\n return \"
\" +\n \"
\" + $filter('courseFullName')(course) + \"
\" +\n \"
\" + (!!course.firstLesson ? $filter('date')(course.firstLesson, 'EEE HH:mm').toUpperCase() : '') + \"
\" +\n \"
\" + course.filled + \"/\" + course.capacity + \"
\" +\n \"
\";\n }\n\n function formatSelection(course) {\n return $filter('courseFullName')(course);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n scope: {\n semesterId: '=',\n },\n link: function (scope, elm, attrs, ctrl) {\r\n\n var courses = courseSvc.getAllActionsAsync(scope.semesterId, true);\n\n $timeout(function () {\r\n $(elm).select2({\r\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_COURSE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n id: function (course) { return course.courseID; },\n data: courses\r\n });\r\n\r\n ctrl.$render();\r\n });\n\n ctrl.$render = function () {\r\n courses.$promise.then(function () {\r\n $(elm).select2('val', ctrl.$viewValue);\r\n });\r\n }\n\n scope.$watch('semesterId', function (newValue) {\r\n var newCourses = courseSvc.getAllActionsAsync(newValue);\n newCourses.$promise.then(function () {\r\n if (newCourses !== courses) {\r\n courses.length = 0;\n courses.push.apply(courses, newCourses);\r\n }\n\n for (var i = 0; i < courses.length; i++) {\r\n if (courses[i].courseID == ctrl.$viewValue) {\r\n return;\r\n }\r\n }\n\n $(elm).select2('val', null);\n ctrl.$setViewValue(null);\r\n });\r\n });\n\n elm.bind(\"$destroy\", function () {\r\n elm.select2(\"destroy\");\r\n });\n\n attrs.$observe('readonly', function (value) {\r\n elm.select2('readonly', !!value);\r\n });\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbActivityCombo', ['$timeout', '$translate', 'activitySvc', '$q',\n function ($timeout, $translate, activitySvc, $q) {\n function formatResult(model) {\n if (!model) { return; }\n\n return model.name;\n }\n\n function formatSelection(model) {\n if (model) {\n return model.name;\n }\n\n return \"\";\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n scope: {\n semesterId: '='\n },\n link: function (scope, elm, attrs, ctrl) {\n\n let linkSemesterId = scope.semesterId;\n let activities;\n if (scope.semesterId) {\n activities = activitySvc.getAllBySemesterIDAsync(scope.semesterId);\n } else {\n let deferred = $q.defer();\n activities = [];\n activities.$promise = deferred.promise;\n deferred.resolve(activities);\n }\n\n activities.$promise.then(function() {\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_ACTIVITY'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n id: function (activity) { return activity.activityID; },\n data: activities\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n ctrl.$render = function () {\n if (activities.$promise) {\n activities.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n } else {\n $(elm).select2('val', ctrl.$viewValue);\n }\n }\n\n scope.$watch('semesterId', function (newValue) {\n if (!newValue) {\n $(elm).select2('val', null);\n ctrl.$setViewValue(null);\n return;\n }\n\n if (newValue == linkSemesterId) {\n return;\n }\n linkSemesterId = null;\n\n activitySvc.getAllBySemesterIDAsync(newValue)\n .$promise.then(function (newActivities) {\n activities.length = 0;\n activities.push.apply(activities, newActivities);\n\n for (var i = 0; i < activities.length; i++) {\n if (activities[i].activityID == ctrl.$viewValue) {\n return;\n }\n }\n\n if (activities.length > 0) {\n $(elm).select2('val', activities[0].activityID);\n ctrl.$setViewValue(activities[0].activityID);\n } else {\n $(elm).select2('val', null);\n ctrl.$setViewValue(null);\n }\n });\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n });\n }\n }\n }]);","wbApp.directive('wbAddressEdit', ['$timeout',\n function ($timeout) {\n\n return {\n restrict: 'A',\n scope: {\n location: '='\n },\n template: '' +\n '' +\n '',\n link: function (scope, iElem, attr, controller) {\n\n var defaultLocation = {\n longitude: 15.47296200000005200000,\n latitude: 49.81749199999999000000\n };\n\n scope.mapZoom = 16;\n\n scope.markerOptions = {\n draggable: true,\n labelContent: \"\",\n labelAnchor: \"0 0\",\n labelClass: \"marker-labels\"\n }\n\n scope.control = {};\n\n scope.$on('activeTabChanged', function (e, data) {\n $timeout(function () {\n scope.control.refresh(scope.mapCenter);\n },100);\n });\n\n scope.markerEvents = {\n dragend: function (marker, eventName, args) {\n if (marker) {\n var markerPos = marker.getPosition();\n if (markerPos) {\n var lat = markerPos.lat();\n var lng = markerPos.lng();\n }\n }\n if (!scope.location) {\n scope.location = {};\n }\n\n scope.location.latitude = lat;\n scope.location.longitude = lng;\n }\n }\n\n scope.$watch('location', function (val) {\n // console.log(val);\n if (!val || (!val.longitude && !val.latitude)) {\n val = defaultLocation;\n scope.mapZoom = 6;\n } else {\n scope.mapZoom = 16;\n }\n\n scope.mapCenter = angular.copy(val);\n scope.markerPos = angular.copy(val);\n }, true);\n }\n }\n }]);","wbApp.directive('wbAgeRangeWithAddCombo', [\r\n function () {\r\n \r\n return {\r\n restrict: 'A', \r\n priority: 1,\r\n scope: {\r\n ngModel: '='\r\n },\r\n template:\r\n '
' +\r\n ' ' +\r\n ' ' +\r\n ' ' +\r\n ' ' + \r\n '
',\r\n controller: ['$scope', '$modal', 'securitySvc', 'ageRangeSvc',\r\n function ($scope, $modal, securitySvc, ageRangeSvc) {\r\n\r\n $scope.disableAddBtn = !securitySvc.isInRole('AgeRange.Insert')\r\n\r\n $scope.onAddClick = function () {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.model = ageRangeSvc.createNew();\r\n detailDialogPromise.$scope.onDataSaved = function(model) {\r\n if (!!model) {\r\n $scope.ngModel = model.ageRangeID; \r\n } \r\n };\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n var detailDialogPromise = $modal({\r\n templateUrl: 'setting/age-ranges/age-ranges-detail.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n }]\r\n }\r\n }]);","'use strict';\n\nwbApp.directive('wbAlert', ['$timeout', '$alert', 'notificationSvc',\n function ($timeout, $alert, notificationSvc) {\n return {\n restrict: 'A',\n priority: 1,\n replace: true,\n scope: {},\n link: function (scope, elm, attrs, controller) {\n },\n controller: ['$scope', function ( $scope ) {\n $scope.queue = notificationSvc.getQueue();\n\n $scope.$watchCollection('queue', function (newCollection, oldCollection, scope)\n {\n if (newCollection.length) {\n var newMessage = newCollection[0];\n newCollection.splice(0, 1);\n\n var myAlert = $alert(\n {\n title: newMessage.title,\n content: newMessage.content,\n placement: 'top-right',\n animation: 'am-fade-and-scale',\n container: '#alertContainer',\n type: newMessage.type,\n show: true\n });\n\n $timeout(function () {\n myAlert.hide();\n }, 5000)\n }\n });\n\n }]\n }\n }]);","wbApp.directive('wbAmortizationScheduleModeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(amortizationScheduleMode) {\n if (!amortizationScheduleMode) { return; }\n return $translate.instant(amortizationScheduleMode.text);\n }\n\n function formatSelection(amortizationScheduleMode) {\n return $translate.instant(amortizationScheduleMode.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_VAL_DO_NOT_OFFER_TO_CLIENTS' },\n { id: 1, text: 'TXT_VAL_OFFER_TO_CLIENTS_AS_AN_OPTION' },\n { id: 2, text: 'TXT_VAL_FORCED_TO_ALL_CLIENTS' },\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbColorPicker', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n scope: { ngModel: '=' },\n template: '
',\n link: function (scope, elm, attrs, ctrl) {\n scope.onColorClick = function (e) {\n var color = $(e.target).css(\"background-color\");\n if (color) {\n ctrl.$setViewValue(color, e);\n ctrl.$render();\n }\n }\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n var colorUtils = new webooker_utils.ColorUtils();\n\n return colorUtils.rgbToInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n var colorUtils = new webooker_utils.ColorUtils();\n\n if (!value) {\n return colorUtils.intToRgb(0);\n } else {\n return colorUtils.intToRgb(value);\n }\n });\n\n ctrl.$render = function () {\n elm.children().css('background-color', ctrl.$viewValue);\n };\n }\n }\n }]);\n","wbApp.directive('wbCompensationGroupCombo', ['$timeout', '$translate', 'compensationGroupSvc',\n function ($timeout, $translate, compensationGroupSvc) {\n function formatResult(model) {\n if (!model) { return; }\n\n var name;\n if (model.isDeleted) {\n name = model.name + ' (' + $translate.instant('TXT_VAL_DELETED') + ')';\n } else if (!model.active) {\n name = model.name + ' (' + $translate.instant('TXT_VAL_NOT_ACTIVE') + ')';\n } else {\n name = model.name;\n }\n\n if (model.isDefault) {\n return \"\" + name + \"\";\n } else {\n return name;\n }\n }\n\n function formatSelection(model) {\n if (model.isDeleted) {\n return model.name + ' (' + $translate.instant('TXT_VAL_DELETED') + ')';\n } else if (!model.active) {\n return model.name + ' (' + $translate.instant('TXT_VAL_NOT_ACTIVE') + ')';\n } else {\n return model.name;\n }\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1, \n link: function (scope, elm, attrs, ctrl) {\n\n var models = compensationGroupSvc.getLookupActiveAsync(!!ctrl.$modelValue ? [ctrl.$modelValue] : null);\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_COMPENSATION_GROUP'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: 5,\n data: models,\n matcher: function (term, text, data) {\r\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\r\n }\n });\n\n ctrl.$render();\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (String.prototype.isNullOrWhitespace(viewValue)) {\r\n return null;\r\n } else {\r\n return parseInt(viewValue);\r\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!typeof value === 'undefined' || value === null) {\r\n return value;\r\n } else {\r\n return value + \"\";\r\n }\n });\n\n ctrl.$render = function () {\n models.$promise.then(function () {\n if (!_.find(models, { id: ctrl.$modelValue })) {\n // employee is not in the list, reload!\n var newModels = compensationGroupSvc.getLookupActiveAsync(!!ctrl.$modelValue ? [ctrl.$modelValue] : null);\n newModels.$promise.then(function () {\n models.length = 0;\n models.push.apply(models, newModels);\n\n $(elm).select2('val', ctrl.$viewValue);\n });\n } else {\n $(elm).select2('val', ctrl.$viewValue);\n }\n });\n }\n\n elm.on('change', function (e) {\n scope.$apply(function () {\n ctrl.$setViewValue(e.val);\n });\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]); ","'use strict';\n\nwbApp.directive('wbCompensationGroupMultiSelect', ['$timeout', '$translate', 'compensationGroupSvc',\n function ($timeout, $translate, compensationGroupSvc) {\n function formatResult(model) {\n if (!model) { return; }\n\n var name;\n if (model.isDeleted) {\n name = model.name + ' (' + $translate.instant('TXT_VAL_DELETED') + ')';\n } else if (!model.active) {\n name = model.name + ' (' + $translate.instant('TXT_VAL_NOT_ACTIVE') + ')';\n } else {\n name = model.name;\n }\n\n if (model.isDefault) {\n return \"\" + name + \"\";\n } else {\n return name;\n }\n }\n\n function formatSelection(model) {\n if (model.isDeleted) {\n return model.name + ' (' + $translate.instant('TXT_VAL_DELETED') + ')';\n } else if (!model.active) {\n return model.name + ' (' + $translate.instant('TXT_VAL_NOT_ACTIVE') + ')';\n } else {\n return model.name;\n }\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n scope: true,\n link: function (scope, elm, attrs, ctrl) {\n\n var models = compensationGroupSvc.getLookupActiveAsync(!!ctrl.$modelValue ? ctrl.$modelValue : null);\n\n models.$promise.then(function () {\n $timeout(function () {\n\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: 5, \n data: models,\n multiple: true,\n matcher: function (term, text, data) {\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n }\n });\n\n ctrl.$render();\n });\n });\n\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return [];\n } else {\n if (Array.isArray(viewValue)) {\n return _.map(viewValue, function (n) { return parseInt(n); });\n } else {\n return _.map(viewValue.split(','), function (n) { return parseInt(n); });\n }\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n if (Array.isArray(value)) {\n return _.map(value, function (n) { return n + ''; }).join();\n } else {\n return _.map(value.split(','), function (n) { return n + ''; }).join();\n }\n }\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]);","wbApp.directive('wbCourseCategoryCombo', ['$timeout', '$translate', '$filter', 'courseCategorySvc',\n function ($timeout, $translate, $filter, courseCategorySvc) {\n function formatResult(model) {\r\n if (!model) { return; }\n\n return model.text;\r\n }\n\n function formatSelection(model) {\r\n if (model) {\r\n return model.text;\r\n }\n\n return \"\";\r\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n link: function (scope, elm, attrs, ctrl) {\r\n\n var courseCategories = _.orderBy(courseCategorySvc.getAll(), 'text');\n\n $timeout(function () {\r\n $(elm).select2({\r\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n // minimumResultsForSearch: -1,\n id: function (courseCategory) { return courseCategory.courseCategoryID; },\n data: courseCategories\r\n });\r\n\r\n ctrl.$render();\r\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\r\n if (!viewValue) {\r\n return 0;\r\n } else {\r\n return parseInt(viewValue);\r\n }\r\n });\n\n ctrl.$formatters.unshift(function (value) {\r\n if (!value) {\r\n return \"\";\r\n } else {\r\n return value + \"\";\r\n }\r\n });\n\n ctrl.$render = function () {\r\n $(elm).select2('val', ctrl.$viewValue);\r\n }\n\n elm.bind(\"$destroy\", function () {\r\n elm.select2(\"destroy\");\r\n });\n\n attrs.$observe('readonly', function (value) {\r\n elm.select2('readonly', !!value);\r\n });\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbCourseCombo', ['$timeout', '$translate', '$filter', 'courseSvc',\n function ($timeout, $translate, $filter, courseSvc) {\n function formatResult(course) {\n if (!course) { return; }\n\n return \"
\" +\n \"
\" + $filter('courseFullName')(course) + \"
\" +\n \"
\" + (!!course.firstLesson ? $filter('date')(course.firstLesson, 'EEE HH:mm').toUpperCase() : '') + \"
\" +\n \"
\" + course.filled + \"/\" + course.capacity + \"
\" +\n \"
\";\n }\n\n function formatSelection(course) {\n return $filter('courseFullName')(course);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n scope: {\n semesterId: '=',\n },\n link: function (scope, elm, attrs, ctrl) {\r\n\n var courses = courseSvc.getAllAsync(scope.semesterId, true);\n\n $timeout(function () {\r\n $(elm).select2({\r\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_COURSE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: 5,\n id: function (course) { return course.courseID; },\n data: courses,\r\n matcher: function (term, text, course) {\r\n var courseFullName = $filter('courseFullName')(course);\r\n var firstLesson = !!course.firstLesson ? $filter('date')(course.firstLesson, 'EEE HH:mm').toUpperCase() : '';\r\n return courseFullName.toUpperCase().indexOf(term.toUpperCase()) >= 0 ||\r\n firstLesson.toUpperCase().indexOf(term.toUpperCase()) >= 0;\r\n }\r\n });\n\n ctrl.$render();\r\n });\n\n ctrl.$render = function () {\r\n courses.$promise.then(function () {\r\n $(elm).select2('val', ctrl.$viewValue);\r\n });\r\n }\n\n scope.$watch('semesterId', function (newValue) {\r\n var newCourses = courseSvc.getAllAsync(newValue);\n newCourses.$promise.then(function () {\r\n if (newCourses !== courses) {\r\n courses.length = 0;\n courses.push.apply(courses, newCourses);\r\n }\n\n for (var i = 0; i < courses.length; i++) {\r\n if (courses[i].courseID == ctrl.$viewValue) {\r\n return;\r\n }\r\n }\n\n $(elm).select2('val', null);\n ctrl.$setViewValue(null);\r\n });\r\n });\n\n elm.bind(\"$destroy\", function () {\r\n elm.select2(\"destroy\");\r\n });\n\n attrs.$observe('readonly', function (value) {\r\n elm.select2('readonly', !!value);\r\n });\r\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbCourseScheduleCombo', ['$timeout', '$translate', '$filter', 'courseScheduleSvc',\n function ($timeout, $translate, $filter, courseScheduleSvc) {\n function formatResult(courseSchedule) {\n if (!courseSchedule) { return; }\n\n return \"
\" +\n \"
\" + $filter('date')(courseSchedule.startDate, 'dd.MM.yy') + \"
\" +\n \"
\" +\n $filter('date')(courseSchedule.startDate, 'EEE HH:mm').toUpperCase() +\n ' - ' +\n $filter('date')(courseSchedule.endDate, 'HH:mm').toUpperCase() +\n \"
\" +\n \"
\" + courseSchedule.teacher + \"
\" +\n \"
\" + courseSchedule.filled + '/' + courseSchedule.capacity + \"
\" +\n \"
\";\n }\n\n function formatSelection(courseSchedule) {\n return $filter('date')(courseSchedule.startDate, 'dd. MM. yyyy - (EEE HH:mm').toUpperCase() +\n ' - ' +\n $filter('date')(courseSchedule.endDate, 'HH:mm)').toUpperCase();\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n scope: {\n courseId: '=',\n ngModel: '='\n },\n link: function (scope, elm, attrs, ctrl) {\n\n var schedules = !!scope.courseId\n ? courseScheduleSvc.getAllSortedAsync(scope.courseId)\n : [];\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_COURSE_SCHEDULE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n id: function (schedule) { return schedule.courseScheduleID; },\n data: schedules\n });\n\n ctrl.$render = function () {\n if(ctrl.$viewValue) {\n if (!schedules.$promise) {\n schedules = courseScheduleSvc.getAllSortedAsync(ctrl.$viewValue)\n }\n\n schedules.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n }\n }\n\n scope.$watch('courseId', function (newValue) {\n if (!!newValue) {\n var newSchedules = courseScheduleSvc.getAllSortedAsync(newValue);\n newSchedules.$promise.then(function () {\n if (newSchedules !== schedules) {\n schedules.length = 0;\n schedules.push.apply(schedules, newSchedules);\n }\n\n for (var i = 0; i < schedules.length; i++) {\n if (schedules[i].courseScheduleID == ctrl.$viewValue) {\n return;\n }\n }\n\n $(elm).select2('val', null);\n ctrl.$setViewValue(null);\n })\n } else {\n $(elm).select2('val', null);\n ctrl.$setViewValue(null);\n }\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n ctrl.$render();\n\n }, 1);\n }\n }\n }]);","'use strict';\n\n// http://eonasdan.github.io/bootstrap-datetimepicker/\n\nwbApp.directive('wbDateTimePicker', ['$timeout',\n function ($timeout) {\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n ngModel: '=',\n placeholder: '@'\n },\n template: \n '
' +\n '' +\n '' +\n '' +\n '
',\n replace: true,\n link: function (scope, elm, attrs, controller) {\n $timeout(function () {\n $(elm).datetimepicker({\n pickDate: true, //en/disables the date picker\n pickTime: true, //en/disables the time picker\n useMinutes: true, //en/disables the minutes picker\n useSeconds: false, //en/disables the seconds picker\n minuteStepping: 15, //set the minute stepping\n // startDate: 1 / 1 / 1970, //set a minimum date\n //endDate: (today +50 years), //set a maximum date\n language: 'cs', //sets language locale\n defaultDate: \"\", //sets a default date, accepts js dates, strings and moment objects\n disabledDates: [], //an array of dates that cannot be selected\n //enabledDates:1/1/1970, //an array of dates that can be selected\n icons: {\n time: \"fa fa-clock-o\",\n date: \"fa fa-calendar\",\n up: \"fa fa-arrow-up\",\n down: \"fa fa-arrow-down\"\n }\n });\n\n scope.$watch('ngModel', function (newValue) {\n var picker = $(elm).data(\"DateTimePicker\");\n if (picker) {\n var date = picker.getDate();\n if (newValue !== date) {\n picker.setDate(newValue);\n }\n }\n });\n\n $(elm).on(\"change.dp\", function (e) {\n\n var inputVal = $(elm).find('input').val();\n\n if (e.date !== undefined) {\n if (!inputVal) {\n scope.ngModel = null;\n } else {\n if (scope.ngModel !== e.date) {\n scope.ngModel = e.date;\n }\n }\n scope.$apply();\n }\n });\n\n }, 1);\n }\n }\n }\n]);\n","'use strict';\n\nwbApp.directive('wbEmailCategoryCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(paymentType) {\n if (!paymentType) { return; }\n return $translate.instant(paymentType.text);\n }\n\n function formatSelection(paymentType) {\n return $translate.instant(paymentType.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_VAL_EMAIL_CATEGORY_DEFAULT' },\n { id: 2, text: 'TXT_VAL_EMAIL_CATEGORY_SEASON_TICKET' },\n { id: 3, text: 'TXT_VAL_EMAIL_CATEGORY_MULTI_ATTEND' },\n { id: 4, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_1' },\n { id: 5, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_2' },\n { id: 6, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_3' },\n { id: 7, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_4' },\n { id: 8, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_5' },\n { id: 9, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_6' },\n { id: 10, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_7' },\n { id: 11, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_8' },\n { id: 12, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_9' },\n { id: 13, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_10' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbEmployeeCombo', ['$timeout', '$translate', 'employeeSvc',\n function ($timeout, $translate, employeeSvc) {\n function formatResult(employee) {\n if (!employee) { return; }\n if (employee.isDeleted) {\n return employee.fullName + ' (' + $translate.instant('TXT_VAL_DELETED') + ')';\n } else if (!employee.active) {\n return employee.fullName + ' (' + $translate.instant('TXT_VAL_NOT_ACTIVE') + ')';\n } else {\n return employee.fullName;\n }\n }\n\n function formatSelection(employee) {\n if (employee.isDeleted) {\n return employee.fullName + ' (' + $translate.instant('TXT_VAL_DELETED') + ')';\n } else if (!employee.active) {\n return employee.fullName + ' (' + $translate.instant('TXT_VAL_NOT_ACTIVE') + ')';\n } else {\n return employee.fullName;\n }\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n var employees = employeeSvc.getAllActiveAsync(ctrl.$modelValue); \n\n $timeout(function () {\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_EMPLOYEE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: 5,\n data: employees,\n id: function (employee) { return employee.employeeID; },\n matcher: function (term, text, employee) {\n return employee.fullName.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n }\n });\n\n ctrl.$render();\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n return value + \"\";\n }\n });\n\n ctrl.$render = function () {\n employees.$promise.then(function () {\n if (!_.find(employees, { employeeID: ctrl.$modelValue })) {\n // employee is not in the list, reload!\n var newEmployees = employeeSvc.getAllActiveAsync(ctrl.$modelValue);\n newEmployees.$promise.then(function () {\n employees.length = 0;\n employees.push.apply(employees, newEmployees);\n\n $(elm).select2('val', ctrl.$viewValue);\n });\n } else {\n $(elm).select2('val', ctrl.$viewValue);\n }\n });\n }\n\n elm.on('change', function (e) {\n scope.$apply(function () {\n ctrl.$setViewValue(e.val);\n });\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]);","wbApp.directive('wbExcuseThresholdTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_VAL_NO_OF_HOURS_BEFORE_START' },\n { id: 1, text: 'TXT_VAL_AT_SPECIFIC_TIME_ON_START_DATE' },\n { id: 2, text: 'TXT_VAL_AT_SPECIFIC_TIME_ON_DATE_BEFORE_START_DATE' },\n { id: 3, text: 'TXT_VAL_AT_SPECIFIC_TIME_ON_PREV_BUSINESS_DAY' },\n { id: 4, text: 'TXT_VAL_AT_SPECIFIC_TIME_ON_PREV_PREV_BUSINESS_DAY' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbFranchiseCentralsCombo', ['$timeout', '$translate', 'tenantInfo',\n function ($timeout, $translate, tenantInfo) {\n function formatResult(franchiseCentral) { \n return franchiseCentral.alias;\n }\n\n function formatSelection(franchiseCentral) {\n return franchiseCentral.alias;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_FRANCHISE_CENTRAL'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: -1,\n id: function(n) { return n.tenantID },\n data: _.map(tenantInfo.franchiseCentrals, function (fc) {\n return {\n tenantID: fc.tenantID,\n alias: fc.alias,\n disabled: !fc.isActive\n };\n })\n });\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbGrid3', ['$window', '$translate', '$filter', '$timeout', 'messageBoxSvc', 'securitySvc', 'gridSortSvc',\n function ($window, $translate, $filter, $timeout, messageBoxSvc, securitySvc, gridSortSvc) {\n\n return {\n restrict: 'A',\n scope: {\n gridSettings: '=',\n gridDataSource: '=',\n onDelete: '&',\n onEdit: '&',\n onAdd: '&',\n onCopy: '&',\n onSelectionChanged: '&',\n onFilterApplied: '&',\n resource: '@',\n idPrefix: '@'\n },\n template:\n '
' +\n '
' +\n '
' +\n '' +\n '' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '' +\n '' +\n '
' +\n '
' +\n '
' + \n '
' +\n '
',\n replace: true,\n compile: function (tElem, tAttrs) {\n return {\n pre: function (scope, iElem, iAttrs) {\n\n scope.idPrefixFixed = scope.idPrefix;\n\n var clickTimer, lastRowCLickedId;\n\n function onRowClick(e){ \n var rows = scope.gridInstance.getSelectedRowsData();\n\n if (clickTimer && lastRowCLickedId === e.rowIndex) {\n clearTimeout(clickTimer);\n clickTimer = null;\n lastRowCLickedId = e.rowIndex;\n\n raiseOnEdit(e.data);\n\n } else {\n clickTimer = setTimeout(function () {\n lastRowCLickedId = null;\n }, 250);\n }\n\n lastRowCLickedId = e.rowIndex;\n }\n\n var savedColumnVisibility = [];\n\n var defaultOptions = {\n width: '100%',\n height: '100%',\n cacheEnabled: false,\n rowAlternationEnabled: true,\n showRowLines: true,\n focusStateEnabled: false,\n hoverStateEnabled: true,\n bindingOptions: {\n dataSource: 'gridDataSource',\n filterRow: 'gridSettings.filterRow',\n searchPanel: 'gridSettings.searchPanel'\n },\n paging: {\n pageSize: 30\n },\n pager: {\n showInfo: true,\n showPageSizeSelector: true,\n showNavigationButtons: true,\n visible: \"true\"\n },\n filterRow: { \n showOperationChooser: true\n },\n groupPanel: {\n visible: false\n },\n selection: {\n mode: 'single'\n },\n editing: {\n allowUpdating: false,\n allowDeleting: false,\n allowAdding: false\n },\n allowColumnResizing: true,\n remoteOperations: false,\n onSelectionChanged: function (selectedRowsInfo) {\n scope.prepareToolButtons();\n\n if (iAttrs.onSelectionChanged) {\n if (selectedRowsInfo.selectedRowsData.length > 0) {\n scope.onSelectionChanged({ model: selectedRowsInfo.selectedRowsData[0] });\n }\n }\n },\n onRowClick: onRowClick,\n customCommands: [],\n masterDetail: {\n enabled: false,\n settings: {\n selection: {\n mode: 'single'\n },\n }\n },\n columnChooser: {\n enabled: false,\n mode: 'select',\n title: $translate.instant('TXT_COLUMN_CHOOSER')\n },\n stateStoring: {\n enabled: false,\n storageKey: scope.idPrefixFixed + '-grid-setting',\n type: 'localStorage',\n ignoreColumnOptionNames: []\n }\n };\n\n if (!scope.gridSettings.filterRow) {\n scope.gridSettings.filterRow = {};\n }\n\n scope.settings = angular.extend({}, defaultOptions, scope.gridSettings);\n\n scope.settings.stateStoring.enabled = scope.gridSettings.shouldShowColumnChooser;\n\n // scope.settings.columns = scope.gridSettings.columns;\n\n for(let i = 0; i < scope.settings.columns.length; i++) {\n let column = scope.settings.columns[i];\n if (column.calculateSortValue != null && column.dataField != null) {\n column.calculateFilterExpression = (filterValue, selectedFilterOperation, target) =>\n gridSortSvc.filterExpressionWithoutAccents(filterValue, selectedFilterOperation, target, column.dataField)\n }\n }\n\n scope.detailSetting = !!scope.gridSettings.masterDetail\n ? scope.gridSettings.masterDetail.settings\n : {};\n if (scope.detailSetting.bindingOptions) {\n scope.detailSetting.bindingOptions.onSelectionChanged = '$parent.detailOnSelectionChanged';\n scope.detailSetting.bindingOptions.onRowPrepared = '$parent.detailonRowPrepared';\n }\n\n scope.detailOnSelectionChanged = function (e) {\n if (scope.detailSetting.onSelectionChanged) {\n scope.detailSetting.onSelectionChanged(e);\n }\n }\n\n scope.detailonRowPrepared = function (e) {\n if (scope.detailSetting.onRowPrepared) {\n scope.detailSetting.onRowPrepared(e);\n }\n }\n\n if (scope.settings.masterDetail.settings.columns) {\n scope.settings.masterDetail.settings.columns.unshift(\n {\n dataField: 'siteKeyGroupID',\n cellTemplate: 'detailCommandBtnCellTemplate',\n allowFiltering: false,\n allowGrouping: false,\n allowHiding: false,\n allowReordering: false,\n allowResizing: false,\n allowSorting: false,\n caption: '',\n width: '38px'\n });\n }\n\n scope.commandMenuDS = [];\n scope.detailCommandMenuDS = [];\n\n function raiseOnEdit(data) {\n if (!scope.shouldDisableEdit(data)) {\n scope.onEdit({ model: data });\n }\n }\n\n function raiseOnCopy(data) {\n scope.onCopy({ model: data });\n }\n\n scope.menuItemClicked = function (val) {\n switch (val.itemData.id) {\n case 'add':\n if (iAttrs.onAdd) {\n scope.onAdd();\n }\n break;\n case 'edit':\n raiseOnEdit(val.itemData.data);\n break;\n case 'copy':\n if (iAttrs.onAdd) {\n raiseOnCopy(val.itemData.data);\n }\n break;\n case 'delete':\n if (iAttrs.onDelete) {\n scope.showDeleteMsg(val.itemData.data);\n }\n break;\n default:\n if (val.itemData.callback) {\n val.itemData.callback(val.itemData.data);\n }\n break;\n }\n }\n\n var contextMenu = new DevExpress.ui.dxContextMenu($(\"
\").appendTo(\"body\"), {\n target: $(),\n dataSource: scope.commandMenuDS,\n onItemClick: scope.menuItemClicked,\n position: { offset: '25 20' },\n alternativeInvocationMode: { enabled: true },\n width: function (w) {\n return w + 150 + 'px';\n }\n });\n\n scope.shouldDisableAdd = function () {\n var enabled = true;\n enabled = enabled && !!iAttrs.onAdd;\n enabled = enabled && securitySvc.isInRole((scope.resource || '') + '.Insert');\n if (!!scope.gridSettings.shouldDisableAdd) {\n enabled = enabled && !scope.gridSettings.shouldDisableAdd();\n }\n\n return !enabled;\n }\n\n scope.shouldDisableExportMenu = function () {\n var disable = false;\n\n if (!!scope.gridSettings.shouldDisableExportMenu) {\n disable = disable || scope.gridSettings.shouldDisableExportMenu();\n }\n\n return disable;\n }\n\n scope.shouldShowAdd = function () {\n var show = true;\n\n if (!!scope.gridSettings.shouldShowAdd) {\n show = show && scope.gridSettings.shouldShowAdd();\n }\n\n return show;\n }\n\n scope.shouldDisableEdit = function (row) {\n var enabled = true;\n enabled = enabled && !!iAttrs.onEdit; \n if (!!scope.gridSettings.shouldDisableEdit) {\n enabled = enabled && !scope.gridSettings.shouldDisableEdit(row);\n } else {\n enabled = enabled && securitySvc.isInRole((scope.resource || '') + '.Update');\n }\n\n return !enabled;\n }\n\n scope.shouldDisableCopy = function (row) {\n var enabled = true;\n enabled = enabled && !!iAttrs.onCopy;\n if (!!scope.gridSettings.shouldDisableCopy) {\n enabled = enabled && !scope.gridSettings.shouldDisableCopy(row);\n } else {\n enabled = enabled && securitySvc.isInRole((scope.resource || '') + '.Insert');\n }\n\n return !enabled;\n }\n\n scope.shouldShowEdit = function (row) {\n var show = true;\n\n if (!!scope.gridSettings.shouldShowEdit) {\n show = show && scope.gridSettings.shouldShowEdit(row);\n }\n\n return show;\n }\n\n scope.shouldShowCopy = function (row) {\n var show = true;\n show = show && !!iAttrs.onCopy;\n if (!!scope.gridSettings.shouldShowCopy) {\n show = show && scope.gridSettings.shouldShowCopy(row);\n }\n\n return show;\n }\n\n scope.shouldDisableDelete = function (row) {\n var enabled = true;\n enabled = enabled && !!iAttrs.onDelete;\n if (!!scope.gridSettings.shouldDisableDelete) {\n enabled = enabled && !scope.gridSettings.shouldDisableDelete(row);\n } else {\n enabled = enabled && securitySvc.isInRole((scope.resource || '') + '.Delete');\n }\n\n return !enabled;\n }\n\n scope.shouldShowDelete = function (row) {\n var show = true;\n\n if (!!scope.gridSettings.shouldShowDelete) {\n show = show && scope.gridSettings.shouldShowDelete(row);\n }\n\n return show;\n }\n\n scope.menuItemCanBeginGroup = function (menu, item) {\n if (!menu || !item) {\n return false;\n }\n\n var atLeastOneVisible = false;\n for (var i = 0; i < menu.length; i++) {\n if (menu[i] !== item) {\n atLeastOneVisible = atLeastOneVisible || menu[i].visible;\n } else {\n break;\n }\n }\n\n return atLeastOneVisible;\n }\n\n if (iAttrs.onAdd) {\n scope.commandMenuDS.push({\n text: $translate.instant('TXT_MENU_NEW'),\n id: \"add\",\n isDisabled: scope.shouldDisableAdd,\n isVisible: scope.shouldShowAdd\n });\n }\n\n if (iAttrs.onEdit) {\n scope.commandMenuDS.push({\n text: $translate.instant('TXT_MENU_EDIT'),\n id: \"edit\",\n isDisabled: function (val) {\n return scope.shouldDisableEdit(val);\n },\n isVisible: function (val) {\n return scope.shouldShowEdit(val);\n }\n });\n }\n\n if (iAttrs.onCopy) {\n scope.commandMenuDS.push({\n text: $translate.instant('TXT_COPY'),\n id: \"copy\",\n isDisabled: function (val) {\n scope.shouldDisableCopy(val);\n },\n isVisible: function (val) {\n scope.shouldShowCopy(val);\n }\n });\n }\n\n if (iAttrs.onDelete) {\n scope.commandMenuDS.push({\n text: $translate.instant('TXT_MENU_DELETE'),\n id: \"delete\",\n beginGroup: scope.commandMenuDS.length > 0,\n isDisabled: scope.shouldDisableDelete,\n isVisible: function (val) {\n return scope.shouldShowDelete(val);\n },\n isBeginGroup: function (menu, item) {\n return scope.menuItemCanBeginGroup(menu, item);\n }\n });\n }\n\n var beginGroup = true;\n\n angular.forEach(scope.settings.customCommands, function (item) {\n scope.commandMenuDS.push({\n text: item.text,\n id: \"custom-\" + (!!item.id ? item.id : item.text.toLowerCase()),\n beginGroup: beginGroup || !!item.beginGroup,\n callback: item.callback,\n isDisabled: !!item.isDisabled ? item.isDisabled : function () { return false; },\n isVisible: !!item.isVisible ? item.isVisible : function () { return true; },\n isBeginGroup: beginGroup || !!item.beginGroup \n ? function (menu, item) { return scope.menuItemCanBeginGroup(menu, item); }\n : function () { return false; }\n });\n beginGroup = false;\n });\n\n angular.forEach(scope.settings.masterDetail.settings.customCommands, function (item) {\n scope.detailCommandMenuDS.push({\n text: item.text,\n id: \"custom-detail-\" + (!!item.id ? item.id : item.text.toLowerCase()),\n callback: item.callback,\n isDisabled: !!item.isDisabled ? item.isDisabled : function () { return false; },\n isVisible: !!item.isVisible ? item.isVisible : function () { return true; }\n });\n });\n\n\n scope.commandColHeaderBtn = {\n bindingOptions: {\n disabled: '$parent.shouldDisableAdd()'\n },\n icon: 'fa fa-lg fa-edit',\n width: '20px',\n height: '14px',\n onClick: function () {\n if (iAttrs.onAdd) {\n scope.onAdd();\n }\n }\n }\n\n scope.submenuShowing = function (data) {\n\n var id = scope.idPrefixFixed + 'list-row-context-menu';\n var ds = contextMenu.option('dataSource');\n for (var i = 0; i < ds.length; i++) {\n var menuItem = ds[i];\n menuItem.beginGroup = !!menuItem.isBeginGroup ? menuItem.isBeginGroup(ds, menuItem) : menuItem.beginGroup;\n menuItem.disabled = menuItem.isDisabled(data.data);\n menuItem.visible = menuItem.isVisible(data.data);\n menuItem.data = data.data;\n }\n contextMenu.option('dataSource', ds);\n contextMenu.option('target', data.cellElement);\n contextMenu.show();\n }\n\n scope.detailSubmenuShowing = function (data) {\n // TODO\n //var id = scope.idPrefixFixed + 'list-row-' + (data.$parent.dxTemplateModel.rowIndex + 1) + '-detail-command-button-' + (data.dxTemplateModel.rowIndex + 1);\n //var instance = $('#' + id).dxDropDownMenu('instance');\n //var ds = instance.option('dataSource');\n //for (var i = 0; i < ds.length; i++) {\n // var menuItem = ds[i];\n // menuItem.disabled = menuItem.isDisabled(data.data);\n //}\n //instance.option('dataSource', ds);\n }\n\n scope.detailMenuItemClicked = function (val) {\n if (val.itemData.callback) {\n val.itemData.callback(val.component._options.parentData, val.itemData.data);\n }\n }\n\n scope.showDeleteMsg = function (model) {\n if (!!scope.gridSettings.disableDeleteConfirmation) {\n scope.onDelete({ model: model });\n } else {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_DELETE',\n message: 'TXT_TEXT_CONFIRM_DELETE',\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () { scope.onDelete({ model: model }); }\n }]\n });\n }\n }\n\n if (scope.commandMenuDS.length || iAttrs.onAdd) {\n scope.settings.columns.unshift(\n {\n dataField: 'siteKeyGroupID',\n cellTemplate: 'commandBtnCellTemplate',\n headerCellTemplate: !!iAttrs.onAdd ? 'commandBtnHeaderTemplate' : null,\n allowFiltering: false,\n allowGrouping: false,\n allowHiding: false,\n allowReordering: false,\n allowResizing: false,\n allowSorting: false,\n showInColumnChooser: false,\n caption: '',\n width: '38px'\n });\n }\n\n scope.autoSizeGrid = function (repaint) {\n if (scope.gridInstance) {\n if (repaint) {\n scope.gridInstance.repaint();\n }\n\n var significantParent = iElem.closest('div.dx-grid-resize-pivot');\n\n var newHeight = significantParent.length > 0\n ? significantParent.outerHeight() - iElem.prevAll().outerHeight() - iElem.nextAll().outerHeight()\n : iElem.parent().outerHeight() - iElem.prevAll().outerHeight() - iElem.nextAll().outerHeight();\n var currentHeight = scope.gridInstance.option('height');\n if (newHeight !== currentHeight) {\n scope.gridInstance.option('height', newHeight);\n }\n }\n }\n\n // scope.contextExportMenu = null;\n\n scope.removeToolButtons = function () {\n var exportMenuElementId = scope.idPrefixFixed + \"-context-export-menu\";\n var elm = $(\"#\" + exportMenuElementId);\n if (elm.length > 0) {\n elm.remove();\n }\n }\n\n scope.prepareToolButtons = function () {\n if (!scope.gridInstance) {\n return;\n }\n \n var exportMenuElementId = scope.idPrefixFixed + \"-context-export-menu\";\n if ($(\"#\" + exportMenuElementId).length === 0) {\n scope.contextExportMenu = new DevExpress.ui.dxContextMenu($(\"
\").appendTo(\"body\"), {\n target: $(),\n items: [{\n id: 'exportSelected',\n text: Globalize.formatMessage('dxDataGrid-exportToExcel'),\n disabled: scope.shouldDisableExportMenu()\n }],\n onItemClick: function (val) {\n switch (val.itemData.id) {\n case 'exportSelected': {\n const workbook = new ExcelJS.Workbook();\n const worksheet = workbook.addWorksheet('Main sheet');\n\n let notVisibleColumns = [];\n scope.gridInstance.beginUpdate();\n scope.settings.columns.forEach(function (col) {\n if (col.visible !== undefined && !col.visible) {\n notVisibleColumns.push(col);\n scope.gridInstance.columnOption(col.dataField, \"visible\", true);\n }\n });\n\n DevExpress.excelExporter.exportDataGrid({\n worksheet: worksheet,\n component: scope.gridInstance,\n autoFilterEnabled: true\n }).then(function() {\n workbook.xlsx.writeBuffer().then(function(buffer) {\n let fileName = 'data-' + $filter('date')(new Date(), 'yyyy-MM-dd_HH-mm-ss-sss') + '.xlsx';\n saveAs(new Blob([buffer], { type: 'application/octet-stream' }), fileName);\n });\n }).then(function() {\n notVisibleColumns.forEach(function (col) {\n scope.gridInstance.columnOption(col.dataField, \"visible\", false);\n });\n scope.gridInstance.endUpdate();\n }, function(error) {\n notVisibleColumns.forEach(function (col) {\n scope.gridInstance.columnOption(col.dataField, \"visible\", false);\n });\n scope.gridInstance.endUpdate(); \n });\n break;\n }\n }\n },\n position: { offset: '25 20' },\n alternativeInvocationMode: { enabled: true },\n width: function (w) {\n return w + 150 + 'px';\n }\n });\n }\n \n var pagerDiv = $(scope.gridInstance.element()).find('div.dx-page-sizes');\n var filterRowSwithElementId = scope.idPrefixFixed + \"-filter-row-switch\";\n\n if ($(\"#\" + filterRowSwithElementId).length === 0) {\n var filterRowSwitchDiv = $(\"
\").prependTo(pagerDiv);\n filterRowSwitchDiv.dxButton({\n icon: 'fa fa-search',\n onClick: function () {\n scope.gridInstance.option('filterRow.visible', !scope.gridInstance.option('filterRow.visible'));\n }\n });\n }\n\n if (!!scope.gridSettings.shouldShowColumnChooser) {\n //var columnChooserButtonElementId = scope.idPrefixFixed + \"-column-chooser-button\";\n //if ($(\"#\" + columnChooserButtonElementId).length === 0) {\n // var columnChooserDiv = $(\"
\").prependTo(pagerDiv);\n // columnChooserDiv.dxButton({\n // icon: 'fa fa-table',\n // onClick: function () {\n // scope.gridInstance.showColumnChooser();\n // }\n // });\n //}\n\n var stateResetButtonElementId = scope.idPrefixFixed + \"-state-reset-button\";\n if ($(\"#\" + stateResetButtonElementId).length === 0) {\n var stateResetDiv = $(\"
\").prependTo(pagerDiv);\n stateResetDiv.dxDropDownButton({\n icon: 'fa fa-table',\n useSelectMode: false,\n splitButton: true,\n stylingMode: 'outlined',\n keyExpr: 'id',\n displayExpr: 'text',\n hint: $translate.instant('TXT_COLUMN_CHOOSER'),\n items: [\n { id: 0, text: $translate.instant('TXT_COLUMN_CHOOSER') },\n { id: 1, text: $translate.instant('TXT_RESET_GRID_STATE') }],\n dropDownOptions: {\n minWidth: 150\n },\n onItemClick: function(e) {\n if (e.itemData.id == 0) {\n scope.gridInstance.showColumnChooser();\n } else if (e.itemData.id == 1) {\n $timeout(function () {\n scope.gridInstance.state({});\n scope.gridInstance.refresh();\n scope.gridInstance.repaint();\n });\n }\n },\n onButtonClick: function () {\n scope.gridInstance.showColumnChooser();\n }\n });\n }\n }\n\n var exportButtonElementId = scope.idPrefixFixed + \"-export-button\";\n if ($(\"#\" + exportButtonElementId).length === 0) {\n var exportDiv = $(\"
\").prependTo(pagerDiv);\n exportDiv.dxButton({\n icon: 'fa fa-download',\n onClick: function () {\n scope.contextExportMenu.option('target', exportDiv);\n scope.contextExportMenu.show();\n }\n });\n }\n }\n\n scope.settings.onContentReady = function (e) {\n\n scope.gridInstance = e.component;\n scope.autoSizeGrid();\n\n scope.gridSettings.gridInstance = e.component;\n\n if (scope.gridSettings.onContentReady) { \n scope.gridSettings.onContentReady(e);\n }\n\n if (iAttrs.onFilterApplied) {\n var filterExpr = scope.gridInstance.getCombinedFilter();\n if (filterExpr) {\n var gridData = new DevExpress.data.DataSource({\n store: scope.gridDataSource,\n paginate: false\n });\n\n gridData.filter(filterExpr);\n gridData.load().done(function (result) {\n scope.onFilterApplied()(result);\n });\n } else {\n scope.onFilterApplied()(scope.gridDataSource);\n }\n }\n\n scope.prepareToolButtons();\n }\n\n var origOnCellPrepared = scope.settings.onCellPrepared;\n\n scope.settings.onCellPrepared = function (e) {\n if (e.rowType === 'filter') {\n if (e.column['index'] === 0 &&\n (scope.commandMenuDS.length || iAttrs.onAdd)) {\n angular.element('
')\n .dxButton({\n icon: 'clear',\n width: '17px',\n height: '14px',\n onClick: function () {\n if (scope.gridInstance) {\n var columns = scope.gridInstance.option(\"columns\");\n for (var i = 0; i < columns.length; i++) {\n scope.gridInstance.columnOption(i, \"filterValue\", undefined);\n }\n }\n }\n })\n .appendTo(e.cellElement);\n }\n }\n\n if (!!origOnCellPrepared) {\n origOnCellPrepared(e);\n }\n }\n\n scope.settings.onDisposing = function (e) {\n\n scope.removeToolButtons();\n e.component.off('contentReady');\n scope.settings.onContentReady = null;\n\n if (scope.onSplitterPaneResized) {\n scope.onSplitterPaneResized();\n }\n\n if (scope.onActiveTabChanged) {\n scope.onActiveTabChanged();\n }\n }\n },\n post: function (scope, iElem, iAttrs) {\n scope.onSplitterPaneResized = scope.$on('splitter-pane-resized', function () {\n if (scope.autoSizeGrid) {\n scope.autoSizeGrid();\n }\n });\n\n scope.onActiveTabChanged = scope.$on('activeTabChanged', function (event, data) {\n\n if (data && data.activeTab !== undefined) {\n var parentTab = iElem.closest('.dummy-tab-pane-class');\n if (parentTab.length === 1) {\n var ownTabIndex = parentTab.attr('tab-index');\n if (ownTabIndex == data.activeTab) {\n $timeout(function () {\n scope.autoSizeGrid(true);\n }, 10);\n $timeout(function () {\n scope.autoSizeGrid(true);\n }, 200);\n }\n }\n }\n });\n\n angular.element($window).bind('resize', function () {\n if (scope.autoSizeGrid) {\n scope.autoSizeGrid();\n }\n });\n }\n }\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbGroupSelect', ['$timeout', '$translate', 'groupSvc',\n function ($timeout, $translate, groupSvc) {\n function formatResult(model) {\n var colorUtils = new webooker_utils.ColorUtils();\n\n return \"
\" +\n \"
\" + model.name + \"
\" + \n \"
\" + (model.description || \"\") + \"
\" +\n \"
\" +\n \"
\";\n }\n\n function formatSelection(model) {\n var colorUtils = new webooker_utils.ColorUtils();\n\n return \"
\" + model.name + \"
\";\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n scope: true,\n link: function (scope, elm, attrs, ctrl) {\n\n var models = groupSvc.getAllAsync(); \n\n models.$promise.then(function () {\n $timeout(function () {\n\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n id: function (model) { return model.groupID; },\n data: models,\n multiple: true\n });\n\n ctrl.$render();\n });\n });\n\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return [];\n } else {\n if (Array.isArray(viewValue)) {\n return _.map(viewValue, function (n) { return parseInt(n); });\n } else {\n return _.map(viewValue.split(','), function (n) { return parseInt(n); });\n }\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n if (Array.isArray(value)) {\n return _.map(value, function (n) { return n + ''; }).join();\n } else {\n return _.map(value.split(','), function (n) { return n + ''; }).join();\n }\n }\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]);","'use strict';\n\n//wbApp.config(function ($provide) {\n// $provide.decorator('taOptions', ['taRegisterTool', '$delegate', function (taRegisterTool, taOptions) {\n// // $delegate is the taOptions we are decorating\n// // register the tool with textAngular\n \n// taRegisterTool('colourRed', {\n// display: '',\n// // iconclass: \"fa fa-square red\",\n// action: function (deffered) {\n// var btn = angular.element('#text-angular-font-color').scope();\n// var me = this;\n// if (me.wbExt) {\n// me.wbExt.deffered = deffered;\n// }\n// else {\n// me.wbExt = { fontColor: '', deffered: deffered };\n// btn.$watch('wbExt.fontColor', function (newVal) {\n// if (newVal !== '') {\n// me.$editor().wrapSelection('forecolor', 'red');\n// }\n// me.wbExt.deffered.resolve();\n// });\n// }\n \n// return false;\n// }\n// });\n// // add the button to the default toolbar definition\n// taOptions.toolbar[1].push('colourRed');\n// return taOptions;\n// }]);\n//});\n\nwbApp.directive('wbHtmlEditor', ['$window', '$timeout',\n function ($window, $timeout) {\n return {\n restrict: 'A',\n require: '^ngModel',\n replace: true,\n template: '
',\n link: function (scope, element, attrs, ngModel) {\n\n function resizeEditor() {\n var parent = element.parent();\n var prev = element.prev();\n var scrollWindow = element.find('.ta-scroll-window');\n var taBind = element.find('.ta-bind');\n var toolbar = element.find('.ta-toolbar');\n\n var newHeight = parent.height() - prev.outerHeight() - toolbar.outerHeight() - 1;\n scrollWindow.height(newHeight);\n taBind.css(\"min-height\", newHeight + 'px');\n }\n\n angular.element($window).bind('resize', resizeEditor);\n\n $timeout(function () { resizeEditor(); });\n }\n }\n }]);","wbApp.directive('wbInfoCardBackTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_INFO_CARD_BACK_TYPE_SMS_CODE' },\n { id: 1, text: 'TXT_INFO_CARD_BACK_TYPE_LOGO' },\n { id: 2, text: 'TXT_INFO_CARD_BACK_TYPE_BAR_CODE' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbJarvisMenu', ['$timeout',\n function ($timeout) {\n return {\n restrict: 'A',\n priority: 1,\n link: function (scope, elm, attrs, controller) {\n $timeout(function () {\n $(elm).jarvismenu({\n accordion: true,\n speed: 235,\n closedSign: '',\n openedSign: ''\n });\n }, 1);\n }\n }\n }]);\n\n\n\n\n$.fn.extend({\n //pass the options variable to the function\n jarvismenu: function (options) {\n\n var defaults = {\n accordion: 'true',\n speed: 200,\n closedSign: '[+]',\n openedSign: '[-]'\n };\n\n // Extend our default options with those provided.\n var opts = $.extend(defaults, options);\n //Assign current element to variable, in this case is UL element\n var $this = $(this);\n\n //add a mark [+] to a multilevel menu\n $this.find(\"li\")\n .each(function () {\n if ($(this)\n .find(\"ul\")\n .size() != 0) {\n //add the multilevel sign next to the link\n $(this)\n .find(\"a:first\")\n .append(\"\" + opts.closedSign + \"\");\n\n //avoid jumping to the top of the page when the href is an #\n if ($(this)\n .find(\"a:first\")\n .attr('href') == \"#\") {\n $(this)\n .find(\"a:first\")\n .click(function () {\n return false;\n });\n }\n }\n });\n\n //open active level\n $this.find(\"li.active\")\n .each(function () {\n $(this)\n .parents(\"ul\")\n .slideDown(opts.speed);\n $(this)\n .parents(\"ul\")\n .parent(\"li\")\n .find(\"b:first\")\n .html(opts.openedSign);\n $(this)\n .parents(\"ul\")\n .parent(\"li\")\n .addClass(\"open\")\n });\n\n $this.find(\"li a\")\n .click(function () {\n\n if ($(this)\n .parent()\n .find(\"ul\")\n .size() != 0) {\n\n if (opts.accordion) {\n //Do nothing when the list is open\n if (!$(this)\n .parent()\n .find(\"ul\")\n .is(':visible')) {\n var parents = $(this)\n .parent()\n .parents(\"ul\");\n var visible = $this.find(\"ul:visible\");\n visible.each(function (visibleIndex) {\n var close = true;\n parents.each(function (parentIndex) {\n if (parents[parentIndex] == visible[visibleIndex]) {\n close = false;\n return false;\n }\n });\n if (close) {\n if ($(this)\n .parent()\n .find(\"ul\") != visible[visibleIndex]) {\n $(visible[visibleIndex])\n .slideUp(opts.speed, function () {\n $(this)\n .parent(\"li\")\n .find(\"b:first\")\n .html(opts.closedSign);\n $(this)\n .parent(\"li\")\n .removeClass(\"open\");\n });\n\n }\n }\n });\n }\n } // end if\n if ($(this)\n .parent()\n .find(\"ul:first\")\n .is(\":visible\") && !$(this)\n .parent()\n .find(\"ul:first\")\n .hasClass(\"active\")) {\n $(this)\n .parent()\n .find(\"ul:first\")\n .slideUp(opts.speed, function () {\n $(this)\n .parent(\"li\")\n .removeClass(\"open\");\n $(this)\n .parent(\"li\")\n .find(\"b:first\")\n .delay(opts.speed)\n .html(opts.closedSign);\n });\n\n } else {\n $(this)\n .parent()\n .find(\"ul:first\")\n .slideDown(opts.speed, function () {\n /*$(this).effect(\"highlight\", {color : '#616161'}, 500); - disabled due to CPU clocking on phones*/\n $(this)\n .parent(\"li\")\n .addClass(\"open\");\n $(this)\n .parent(\"li\")\n .find(\"b:first\")\n .delay(opts.speed)\n .html(opts.openedSign);\n });\n } // end else\n } // end if\n });\n } // end function\n});\n","wbApp.directive('wbOnlinePaymentConfigurationCombo', ['$timeout', '$translate', '$filter', 'onlinePaymentConfigurationSvc',\n function ($timeout, $translate, $filter, onlinePaymentConfigurationSvc) {\n\n function getProviderTypeStr(providerType) {\n switch (providerType) {\n // case 0:\n // return 'Payeezy (Fio)';\n case 1:\n return 'Comgate';\n case 2:\n return 'GP webpay';\n default:\n return 'UNKNOWN';\n }\n }\n\n function formatResult(config) {\n if (!config) { return; }\n\n return \"
\" +\n \"
\" + config.name + \"
\" +\n \"
\" + getProviderTypeStr(config.providerType) + \"
\" +\n \"
\";\n }\n\n\n function formatSelection(config) {\n return config.name + ' [' + getProviderTypeStr(config.providerType) + ']';\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n\n var configs = onlinePaymentConfigurationSvc.getAllAsync();\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_ONLINE_PAYMENT_CONFIGURATION'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: -1,\n data: configs,\n id: function (config) { return config.id; }\n });\n\n ctrl.$render();\n });\n\n ctrl.$render = function () {\n configs.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n }\n\n elm.on('change', function (e) {\n scope.$apply(function () {\n ctrl.$setViewValue(e.val); \n });\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbPreviewStateCodeCombo', ['$timeout', '$translate', 'stateCodesSvc',\n function ($timeout, $translate, stateCodesSvc) {\n function formatResult(stateCode) {\n if (!stateCode) { return; }\n\n return \"
\" +\n \"
\" + stateCode.name + \"
\" +\n \"
\" + (stateCode.description != null ? stateCode.description : \"\") + \"
\" +\n \"
\";\n }\n\n function formatSelection(item) {\n return item.name;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n scope: { ngModel: '=' },\n template: \"\",\n link: function (scope, elm, attrs, controller) {\n\n var stateCodes = stateCodesSvc.getAllAsync();\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_STATE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: stateCodes\n });\n controller.$render();\n\n scope.$watch('ngModel', function (newValue) {\n if (newValue) {\n stateCodes.$promise.then(function () {\n $(elm).select2('val', newValue);\n });\n }\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n if (attrs.ngEnable) {\n scope.$watch(attrs.ngEnable, function (newVal) {\n elm.select2('enable', !!newVal);\n });\n }\n\n }, 1);\n }\n }\n }]);\n\n\n","wbApp.directive('wbRecurrenceEditor',\n function () {\n return {\n restrict: 'A',\n require: '^ngModel',\n priority: 1,\n scope: {\n recurrence: '=ngModel',\n startDate: '='\n },\n replace: true,\n templateUrl: 'recurrence-editor-template.html',\n controller: ['$scope', function ($scope) {\n\n var defaultRecurrence = {\n type: 2,\n repeatByWeeks: 1,\n endByType: 1,\n range: 2,\n rangeDays: 1,\n endByOccurenceCount: 10,\n repeatEveryWeekday: [false, false, false, false, false, false, false]\n }\n\n if (!$scope.recurrence) {\n $scope.recurrence = angular.extend({}, defaultRecurrence);\n } else {\n $scope.recurrence = angular.extend({}, defaultRecurrence, $scope.recurrence);\n }\n\n $scope.$watch('startDate', function (newValue) {\n if (!!newValue) {\n var weekDayIdx = moment(newValue).isoWeekday() - 1;\n\n for (var i = 0; i < 7; i++) {\n $scope.recurrence.repeatEveryWeekday[i] = i === weekDayIdx;\n }\n }\n });\n }]\n }\n });","'use strict';\n\nwbApp.directive('wbReferenceSourceCombo', ['$timeout', '$translate', 'referenceSourceSvc',\n function ($timeout, $translate, referenceSourceSvc) {\n function formatResult(model) {\n if (!model) { return; }\n\n return model.name;\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n scope: {\n ngModel: '=',\n ngChange: '&'\n },\n template: \"\",\n link: function (scope, elm, attrs, controller) {\n\n\n var models = referenceSourceSvc.getAllAsync();\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_REFERENCE_SOURCE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: models\n });\n controller.$render();\n\n scope.$watch('ngModel', function (newValue) {\n if (newValue) {\n models.$promise.then(function () {\n $(elm).select2('val', newValue);\n });\n }\n });\n\n $(elm).on(\"change\", function (e) {\n if (scope.ngChange()) {\n scope.ngChange()(e.added);\n }\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n if (attrs.ngEnable) {\n scope.$watch(attrs.ngEnable, function (newVal) {\n elm.select2('enable', !!newVal);\n });\n }\n\n }, 1);\n }\n }\n }]); ","wbApp.directive('wbReservationStartTimeType', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(reservationStartTimeType) {\n if (!reservationStartTimeType) { return; }\n return $translate.instant(reservationStartTimeType.text);\n }\n\n function formatSelection(reservationStartTimeType) {\n return $translate.instant(reservationStartTimeType.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: !attrs.required,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_VAL_CAN_START_AT_WHOLE_OR_HALF_HOUR' },\n { id: 2, text: 'TXT_VAL_CAN_START_AT_WHOLE_HOUR_ONLY' },\n { id: 3, text: 'TXT_VAL_CAN_START_AT_HALF_HOUR_ONLY' },\n { id: 4, text: 'TXT_CAN_START_AT_SELECT_BY_BLOCKS_CONSECUTIVE' },\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return null;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return null;\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbSchedulerScaleTypeCombo', ['$timeout', \n function ($timeout) {\n function formatResult(schedulerScaleType) {\n return schedulerScaleType;\n }\n\n function formatSelection(schedulerScaleType) {\n return schedulerScaleType;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n // formatResult: formatResult,\n // formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 15, text: '15' },\n { id: 30, text: '30' },\n { id: 60, text: '60' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbSearchFilter', [\n function () {\n return {\n restrict: 'A',\n scope: {\n filterOptions: '='\n },\n template: '
' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n '
'\n }\n }\n]);\n\nwbApp.directive('wbSearchFilter2', [\n function () {\n return {\n restrict: 'A',\n scope: {\n filterOptions: '=',\n searchText: '='\n },\n template: '
' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n '
'\n }\n }\n]);","'use strict';\n\nwbApp.directive('wbSecurityRoleCombo', ['$timeout', 'userRolesSvc',\n function ($timeout, userRolesSvc) {\n function formatResult(data) {\n if (!data) { return; }\n\n return \"
\" +\n \"
\" + data.name + \"
\" +\n \"
\" + (data.description || '') + \"
\" +\n \"
\";\n }\n\n function formatSelection(data) {\n return data.name;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n scope: {\n ngModel: '=',\n ngChange: '&'\n },\n template: \"\",\n link: function (scope, elm, attrs, controller) {\n\n var roles = userRolesSvc.getAllAsync();\n\n $timeout(function () {\n $(elm).select2({\n //placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_SEMESTER'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: roles\n });\n controller.$render();\n\n scope.$watch('ngModel', function (newValue) {\n if (newValue) {\n roles.$promise.then(function () {\n $(elm).select2('val', newValue);\n });\n }\n });\n\n $(elm).on(\"change\", function (e) {\n if (scope.ngChange()) {\n scope.ngChange()(e.added);\n }\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n if (attrs.ngEnable) {\n scope.$watch(attrs.ngEnable, function (newVal) {\n elm.select2('enable', !!newVal);\n });\n }\n\n }, 1);\n }\n }\n }]); ","'use strict';\n\nwbApp.directive('wbSecurityShow', ['securitySvc', '$translate',\n function (securitySvc, $translate) {\n return {\n restrict: 'A',\n priority: 100000,\n link: function link($scope, element, attributes) {\n var roles = attributes.wbSecurityShow;\n var shouldReplaceContent = attributes.wbSecurityUnauthorizedContent;\n var r = $scope.$eval(roles);\n if (!securitySvc.isInRole(r)) {\n if (shouldReplaceContent) {\n element.html(\"

\"+ $translate.instant('TXT_MESSAGE_FORBIDEN_VIEW') + \"

\");\n } else {\n element.hide();\n }\n }\n }\n }\n }]);","wbApp.directive('wbSemesterCombo', ['$timeout', '$translate', '$filter', 'semesterSvc',\n function ($timeout, $translate, $filter, semesterSvc) {\n function formatResult(semester) {\n if (!semester) { return; }\n\n let dateFilter = $filter('date');\n\n if (semester.isMain) {\n return \"
\" +\n \"
\" + semester.name + \"
\" +\n \"
\" + dateFilter(semester.startDate, 'shortDate') + ' - ' + dateFilter(semester.endDate, 'shortDate') + \"
\" +\n \"
\";\n } else {\n return \"
\" +\n \"
\" + semester.name + \"
\" +\n \"
\" + dateFilter(semester.startDate, 'shortDate') + ' - ' + dateFilter(semester.endDate, 'shortDate') + \"
\" +\n \"
\";\n }\n }\n\n function formatSelection(semester) {\n return semester.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n scope: {\n ngModel: '=', \n showClearButton: '='\n },\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n\n let semesters = semesterSvc.getAllActiveAsync();\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_SEMESTER'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: !!scope.showClearButton,\n minimumResultsForSearch: 5,\n data: semesters,\n matcher: function (term, text, data) {\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n }\n });\n\n ctrl.$render();\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return null;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n return value + \"\";\n }\n });\n\n ctrl.$render = function () {\n semesters.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n }\n\n elm.on('change', function (e) {\n scope.$apply(function () {\n ctrl.$setViewValue(e.val);\n semesterSvc.setDefault(e.val);\n });\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }\n }\n }]);","wbApp.directive('wbSemesterDateRangeFilterTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_LBL_FOR_SEMESTER' },\n { id: 2, text: 'TXT_LBL_FROM_DATE_TO_DATE' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbSemesterMultiSelect', ['$timeout', '$translate', 'semesterSvc',\n function ($timeout, $translate, semesterSvc) {\n function formatResult(model) {\n return model.name;\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n scope: true,\n link: function (scope, elm, attrs, ctrl) {\n\n var models = semesterSvc.getAllAsync();\n\n models.$promise.then(function () {\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n id: function (model) { return model.id; },\n data: models,\n multiple: true\n });\n\n ctrl.$render();\n });\n });\n\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return [];\n } else {\n if (Array.isArray(viewValue)) {\n return _.map(viewValue, function (n) { return parseInt(n); });\n } else {\n return _.map(viewValue.split(','), function (n) { return parseInt(n); });\n }\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n if (Array.isArray(value)) {\n return _.map(value, function (n) { return n + ''; }).join();\n } else {\n return _.map(value.split(','), function (n) { return n + ''; }).join();\n }\n }\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]);","wbApp.directive('wbSequenceEdit', ['$timeout',\nfunction ($timeout) {\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 10000,\n link: function (scope, element, attr, ngModel) {\n var destroyed = false;\n var initialized = false;\n\n $timeout(function () {\n element.autoNumeric('init',\n {\n aSign: '',\n aDec: ',',\n aSep: '',\n altDec: '',\n pSign: 's',\n vMin: '0',\n vMax: '99999'\n });\n\n initialized = true;\n });\n\n ngModel.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n if (typeof viewValue === 'string' || viewValue instanceof String) {\n return parseFloat(viewValue.replace(/,/g, '.'));\n }\n\n return viewValue;\n }\n });\n\n ngModel.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n ngModel.$render = function () {\n if (!destroyed) {\n\n if (initialized) {\n element.autoNumeric('set', ngModel.$viewValue || '0');\n } else {\n $timeout(function () {\n element.autoNumeric('set', ngModel.$viewValue || '0');\n });\n }\n }\n };\n\n element.on('blur keyup change', function () {\n scope.$evalAsync(read);\n });\n\n function read() {\n var amt = element.autoNumeric('get');\n ngModel.$setViewValue(amt);\n }\n\n $(element).on(\"remove\", function () {\n destroyed = true;\n element.autoNumeric(\"destroy\");\n })\n }\n };\n}]);","wbApp.directive('wbSparkline', [function () {\n 'use strict';\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n opts: '='\n },\n link: function (scope, elem, attrs, ctrl) {\n\n var opts = { type: 'line' };\n\n var render = function () {\n var model;\n //if (attrs.opts) angular.extend(opts, angular.fromJson(attrs.opts));\n angular.extend(opts, scope.opts);\n //console.log(opts);\n // Trim trailing comma if we are a string\n angular.isString(ctrl.$viewValue) ? model = ctrl.$viewValue.replace(/(^,)|(,$)/g, \"\") : model = ctrl.$viewValue;\n var data;\n // Make sure we have an array of numbers\n angular.isArray(model) ? data = model : data = model.split(',');\n $(elem).sparkline(data, opts);\n };\n\n ctrl.$render = function () {\n render();\n }\n\n scope.$watch(opts, function () {\n render();\n });\n }\n }\n}]);\n","/*!\n\nSplit Pane v0.9.4\n\nCopyright (c) 2014 - 2016 Simon Hagström\n\nReleased under the MIT license\nhttps://raw.github.com/shagstrom/split-pane/master/LICENSE\n\n*/\n\n(function ($) {\n\n 'use strict';\n\n var methods = {};\n\n methods.init = function () {\n var $splitPanes = this;\n $splitPanes.each(setMinHeightAndMinWidth);\n $splitPanes.children('.split-pane-divider').html('
');\n $splitPanes.children('.split-pane-divider').on('touchstart mousedown', mousedownHandler);\n setTimeout(function () {\n // Doing this later because of an issue with Chrome (v23.0.1271.64) returning split-pane width = 0\n // and triggering multiple resize events when page is being opened from an .\n $splitPanes.each(attachResizeHandler);\n $(window).trigger('resize');\n }, 100);\n };\n\n methods.firstComponentSize = function (value) {\n this.each(function () {\n var $splitPane = $(this),\n\t\t\t\tcomponents = getComponents($splitPane);\n if ($splitPane.is('.fixed-top')) {\n fixedTopHandler(components, components.divider.offsetTop)({ pageY: value });\n } else if ($splitPane.is('.fixed-bottom')) {\n value = components.splitPane.offsetHeight - components.divider.offsetHeight - value;\n fixedBottomHandler(components, -components.last.offsetHeight)({ pageY: -value });\n } else if ($splitPane.is('.horizontal-percent')) {\n value = components.splitPane.offsetHeight - components.divider.offsetHeight - value;\n horizontalPercentHandler(components, -components.last.offsetHeight)({ pageY: -value });\n } else if ($splitPane.is('.fixed-left')) {\n fixedLeftHandler(components, components.divider.offsetLeft)({ pageX: value });\n } else if ($splitPane.is('.fixed-right')) {\n value = components.splitPane.offsetWidth - components.divider.offsetWidth - value;\n fixedRightHandler(components, -components.last.offsetWidth)({ pageX: -value });\n } else if ($splitPane.is('.vertical-percent')) {\n value = components.splitPane.offsetWidth - components.divider.offsetWidth - value;\n verticalPercentHandler(components, -components.last.offsetWidth)({ pageX: -value });\n }\n });\n };\n\n methods.lastComponentSize = function (value) {\n this.each(function () {\n var $splitPane = $(this),\n\t\t\t\tcomponents = getComponents($splitPane);\n if ($splitPane.is('.fixed-top')) {\n value = components.splitPane.offsetHeight - components.divider.offsetHeight - value;\n fixedTopHandler(components, components.divider.offsetTop)({ pageY: value });\n } else if ($splitPane.is('.fixed-bottom')) {\n fixedBottomHandler(components, -components.last.offsetHeight)({ pageY: -value });\n } else if ($splitPane.is('.horizontal-percent')) {\n horizontalPercentHandler(components, -components.last.offsetHeight)({ pageY: -value });\n } else if ($splitPane.is('.fixed-left')) {\n value = components.splitPane.offsetWidth - components.divider.offsetWidth - value;\n fixedLeftHandler(components, components.divider.offsetLeft)({ pageX: value });\n } else if ($splitPane.is('.fixed-right')) {\n fixedRightHandler(components, -components.last.offsetWidth)({ pageX: -value });\n } else if ($splitPane.is('.vertical-percent')) {\n verticalPercentHandler(components, -components.last.offsetWidth)({ pageX: -value });\n }\n });\n };\n\n $.fn.splitPane = function (method) {\n methods[method || 'init'].apply(this, $.grep(arguments, function (it, i) { return i > 0; }));\n };\n\n function setMinHeightAndMinWidth() {\n var $splitPane = $(this),\n\t\t\tcomponents = getComponents($splitPane);\n if ($splitPane.is('.fixed-top, .fixed-bottom, .horizontal-percent')) {\n $splitPane.css('min-height', (minHeight(components.first) + minHeight(components.last) + $(components.divider).height()) + 'px');\n } else {\n $splitPane.css('min-width', (minWidth(components.first) + minWidth(components.last) + $(components.divider).width()) + 'px');\n }\n }\n\n function mousedownHandler(event) {\n event.preventDefault();\n var $divider = $(this),\n\t\t\t$splitPane = $divider.parent();\n $divider.addClass('dragged');\n if (event.type.match(/^touch/)) {\n $divider.addClass('touch');\n }\n var moveEventHandler = createMousemove($splitPane, pageXof(event), pageYof(event));\n $(document).on('touchmove mousemove', moveEventHandler);\n $(document).one('touchend mouseup', function (event) {\n $(document).off('touchmove mousemove', moveEventHandler);\n $divider.removeClass('dragged touch');\n $splitPane.trigger('dividerdragend', [getComponentsSizes($splitPane)]);\n });\n $splitPane.trigger('dividerdragstart', [getComponentsSizes($splitPane)]);\n }\n\n function getComponentsSizes($splitPane) {\n var property = $splitPane.is('.fixed-top, .fixed-bottom, .horizontal-percent') ?\n\t\t\t'height' : 'width';\n return {\n firstComponentSize: parseInt($splitPane.find('.split-pane-component:first').css(property), 10),\n lastComponentSize: parseInt($splitPane.find('.split-pane-component:last').css(property), 10)\n };\n }\n\n function attachResizeHandler() {\n var $splitPane = $(this),\n\t\t\tinternalHandler = createParentresizeHandler($splitPane),\n\t\t\tparent = $splitPane.parent().closest('.split-pane')[0] || window;\n $(parent).on(parent === window ? 'resize' : 'splitpaneresize', function (event) {\n var target = event.target === document ? window : event.target;\n if (target === parent) {\n internalHandler(event);\n }\n });\n }\n\n function createParentresizeHandler($splitPane) {\n var components = getComponents($splitPane);\n if ($splitPane.is('.fixed-top')) {\n return function (event) {\n var lastComponentMinHeight = minHeight(components.last),\n\t\t\t\t\tmaxfirstComponentHeight = components.splitPane.offsetHeight - lastComponentMinHeight - components.divider.offsetHeight;\n if (components.first.offsetHeight > maxfirstComponentHeight) {\n setTop(components, maxfirstComponentHeight + 'px');\n }\n $splitPane.trigger('splitpaneresize', [getComponentsSizes($splitPane)]);\n };\n } else if ($splitPane.is('.fixed-bottom')) {\n return function (event) {\n var firstComponentMinHeight = minHeight(components.first),\n\t\t\t\t\tmaxLastComponentHeight = components.splitPane.offsetHeight - firstComponentMinHeight - components.divider.offsetHeight;\n if (components.last.offsetHeight > maxLastComponentHeight) {\n setBottom(components, maxLastComponentHeight + 'px');\n }\n $splitPane.trigger('splitpaneresize', [getComponentsSizes($splitPane)]);\n };\n } else if ($splitPane.is('.horizontal-percent')) {\n return function (event) {\n var lastComponentMinHeight = minHeight(components.last),\n\t\t\t\t\tfirstComponentMinHeight = minHeight(components.first),\n\t\t\t\t\tmaxLastComponentHeight = components.splitPane.offsetHeight - firstComponentMinHeight - components.divider.offsetHeight;\n if (components.last.offsetHeight > maxLastComponentHeight) {\n setBottom(components, (maxLastComponentHeight / components.splitPane.offsetHeight * 100) + '%');\n } else {\n if (components.splitPane.offsetHeight - components.first.offsetHeight - components.divider.offsetHeight < lastComponentMinHeight) {\n setBottom(components, (lastComponentMinHeight / components.splitPane.offsetHeight * 100) + '%');\n }\n }\n $splitPane.trigger('splitpaneresize', [getComponentsSizes($splitPane)]);\n };\n } else if ($splitPane.is('.fixed-left')) {\n return function (event) {\n var lastComponentMinWidth = minWidth(components.last),\n\t\t\t\t\tmaxFirstComponentWidth = components.splitPane.offsetWidth - lastComponentMinWidth - components.divider.offsetWidth;\n if (components.first.offsetWidth > maxFirstComponentWidth) {\n setLeft(components, maxFirstComponentWidth + 'px');\n }\n $splitPane.trigger('splitpaneresize', [getComponentsSizes($splitPane)]);\n };\n } else if ($splitPane.is('.fixed-right')) {\n return function (event) {\n var firstComponentMinWidth = minWidth(components.first),\n\t\t\t\t\tmaxLastComponentWidth = components.splitPane.offsetWidth - firstComponentMinWidth - components.divider.offsetWidth;\n if (components.last.offsetWidth > maxLastComponentWidth) {\n setRight(components, maxLastComponentWidth + 'px');\n }\n $splitPane.trigger('splitpaneresize', [getComponentsSizes($splitPane)]);\n };\n } else if ($splitPane.is('.vertical-percent')) {\n return function (event) {\n var lastComponentMinWidth = minWidth(components.last),\n\t\t\t\t\tfirstComponentMinWidth = minWidth(components.first),\n\t\t\t\t\tmaxLastComponentWidth = components.splitPane.offsetWidth - firstComponentMinWidth - components.divider.offsetWidth;\n if (components.last.offsetWidth > maxLastComponentWidth) {\n setRight(components, (maxLastComponentWidth / components.splitPane.offsetWidth * 100) + '%');\n } else {\n if (components.splitPane.offsetWidth - components.first.offsetWidth - components.divider.offsetWidth < lastComponentMinWidth) {\n setRight(components, (lastComponentMinWidth / components.splitPane.offsetWidth * 100) + '%');\n }\n }\n $splitPane.trigger('splitpaneresize', [getComponentsSizes($splitPane)]);\n };\n }\n }\n\n function createMousemove($splitPane, pageX, pageY) {\n var components = getComponents($splitPane);\n if ($splitPane.is('.fixed-top')) {\n return fixedTopHandler(components, pageY);\n } else if ($splitPane.is('.fixed-bottom')) {\n return fixedBottomHandler(components, pageY);\n } else if ($splitPane.is('.horizontal-percent')) {\n return horizontalPercentHandler(components, pageY);\n } else if ($splitPane.is('.fixed-left')) {\n return fixedLeftHandler(components, pageX);\n } else if ($splitPane.is('.fixed-right')) {\n return fixedRightHandler(components, pageX);\n } else if ($splitPane.is('.vertical-percent')) {\n return verticalPercentHandler(components, pageX);\n }\n }\n\n function fixedTopHandler(components, pageY) {\n var firstComponentMinHeight = minHeight(components.first),\n\t\t\tmaxFirstComponentHeight = components.splitPane.offsetHeight - minHeight(components.last) - components.divider.offsetHeight,\n\t\t\ttopOffset = components.divider.offsetTop - pageY;\n return function (event) {\n event.preventDefault && event.preventDefault();\n var top = newTop(firstComponentMinHeight, maxFirstComponentHeight, topOffset + pageYof(event));\n setTop(components, top + 'px');\n $(components.splitPane).trigger('splitpaneresize', [getComponentsSizes($(components.splitPane))]);\n };\n }\n\n function fixedBottomHandler(components, pageY) {\n var lastComponentMinHeight = minHeight(components.last),\n\t\t\tmaxLastComponentHeight = components.splitPane.offsetHeight - minHeight(components.first) - components.divider.offsetHeight,\n\t\t\tbottomOffset = components.last.offsetHeight + pageY;\n return function (event) {\n event.preventDefault && event.preventDefault();\n var bottom = Math.min(Math.max(lastComponentMinHeight, bottomOffset - pageYof(event)), maxLastComponentHeight);\n setBottom(components, bottom + 'px');\n $(components.splitPane).trigger('splitpaneresize', [getComponentsSizes($(components.splitPane))]);\n };\n }\n\n function horizontalPercentHandler(components, pageY) {\n var splitPaneHeight = components.splitPane.offsetHeight,\n\t\t\tlastComponentMinHeight = minHeight(components.last),\n\t\t\tmaxLastComponentHeight = splitPaneHeight - minHeight(components.first) - components.divider.offsetHeight,\n\t\t\tbottomOffset = components.last.offsetHeight + pageY;\n return function (event) {\n event.preventDefault && event.preventDefault();\n var bottom = Math.min(Math.max(lastComponentMinHeight, bottomOffset - pageYof(event)), maxLastComponentHeight);\n setBottom(components, (bottom / splitPaneHeight * 100) + '%');\n $(components.splitPane).trigger('splitpaneresize', [getComponentsSizes($(components.splitPane))]);\n };\n }\n\n function fixedLeftHandler(components, pageX) {\n var firstComponentMinWidth = minWidth(components.first),\n\t\t\tmaxFirstComponentWidth = components.splitPane.offsetWidth - minWidth(components.last) - components.divider.offsetWidth,\n\t\t\tleftOffset = components.divider.offsetLeft - pageX;\n return function (event) {\n event.preventDefault && event.preventDefault();\n var left = newLeft(firstComponentMinWidth, maxFirstComponentWidth, leftOffset + pageXof(event));\n setLeft(components, left + 'px');\n $(components.splitPane).trigger('splitpaneresize', [getComponentsSizes($(components.splitPane))]);\n };\n }\n\n function fixedRightHandler(components, pageX) {\n var lastComponentMinWidth = minWidth(components.last),\n\t\t\tmaxLastComponentWidth = components.splitPane.offsetWidth - minWidth(components.first) - components.divider.offsetWidth,\n\t\t\trightOffset = components.last.offsetWidth + pageX;\n return function (event) {\n event.preventDefault && event.preventDefault();\n var right = Math.min(Math.max(lastComponentMinWidth, rightOffset - pageXof(event)), maxLastComponentWidth);\n setRight(components, right + 'px');\n $(components.splitPane).trigger('splitpaneresize', [getComponentsSizes($(components.splitPane))]);\n };\n }\n\n function verticalPercentHandler(components, pageX) {\n var splitPaneWidth = components.splitPane.offsetWidth,\n\t\t\tlastComponentMinWidth = minWidth(components.last),\n\t\t\tmaxLastComponentWidth = splitPaneWidth - minWidth(components.first) - components.divider.offsetWidth,\n\t\t\trightOffset = components.last.offsetWidth + pageX;\n return function (event) {\n event.preventDefault && event.preventDefault();\n var right = Math.min(Math.max(lastComponentMinWidth, rightOffset - pageXof(event)), maxLastComponentWidth);\n setRight(components, (right / splitPaneWidth * 100) + '%');\n $(components.splitPane).trigger('splitpaneresize', [getComponentsSizes($(components.splitPane))]);\n };\n }\n\n function getComponents($splitPane) {\n return {\n splitPane: $splitPane[0],\n first: $splitPane.children('.split-pane-component:first')[0],\n divider: $splitPane.children('.split-pane-divider')[0],\n last: $splitPane.children('.split-pane-component:last')[0]\n };\n }\n\n function pageXof(event) {\n if (event.pageX !== undefined) {\n return event.pageX;\n } else if (event.originalEvent.pageX !== undefined) {\n return event.originalEvent.pageX;\n } else if (event.originalEvent.touches) {\n return event.originalEvent.touches[0].pageX;\n }\n }\n\n function pageYof(event) {\n if (event.pageY !== undefined) {\n return event.pageY;\n } else if (event.originalEvent.pageY !== undefined) {\n return event.originalEvent.pageY;\n } else if (event.originalEvent.touches) {\n return event.originalEvent.touches[0].pageY;\n }\n }\n\n function minHeight(element) {\n return parseInt($(element).css('min-height'), 10) || 0;\n }\n\n function minWidth(element) {\n return parseInt($(element).css('min-width'), 10) || 0;\n }\n\n function maxHeight(element) {\n return parseInt($(element).css('max-height'), 10);\n }\n\n function maxWidth(element) {\n return parseInt($(element).css('max-width'), 10);\n }\n\n function newTop(firstComponentMinHeight, maxFirstComponentHeight, value) {\n return Math.min(Math.max(firstComponentMinHeight, value), maxFirstComponentHeight);\n }\n\n function newLeft(firstComponentMinWidth, maxFirstComponentWidth, value) {\n return Math.min(Math.max(firstComponentMinWidth, value), maxFirstComponentWidth);\n }\n function setTop(components, top) {\n components.first.style.height = top;\n components.divider.style.top = top;\n components.last.style.top = top;\n }\n\n function setBottom(components, bottom) {\n components.first.style.bottom = bottom;\n components.divider.style.bottom = bottom;\n components.last.style.height = bottom;\n }\n\n function setLeft(components, left) {\n components.first.style.width = left;\n components.divider.style.left = left;\n components.last.style.left = left;\n }\n\n function setRight(components, right) {\n components.first.style.right = right;\n components.divider.style.right = right;\n components.last.style.width = right;\n }\n\n})(jQuery);\n\nwbApp.directive('splitPane', function () {\n return {\n restrict: 'EA',\n replace: true,\n transclude: true,\n scope: {\n splitPaneProperties: '='\n },\n controller: ['$scope', function ($scope) {\n $scope.components = [];\n this.addComponent = function (attributes) {\n $scope.components.push(attributes);\n };\n this.addDivider = function (attributes) {\n $scope.divider = attributes;\n };\n }],\n link: function ($scope, element, attrs) {\n var $firstComponent = element.children('.split-pane-component:first'),\n\t\t\t\t$divider = element.children('.split-pane-divider'),\n\t\t\t\t$lastComponent = element.children('.split-pane-component:last');\n if ($scope.components[0].width && $scope.components[0].width.match(/%$/)) {\n element.addClass('vertical-percent');\n var rightPercent = (100 - parseFloat($scope.components[0].width.match(/(\\d+)%$/)[1])) + \"%\";\n $firstComponent.css({ right: rightPercent, marginRight: $scope.divider.width });\n $divider.css({ right: rightPercent, width: $scope.divider.width });\n $lastComponent.css({ width: rightPercent });\n } else if ($scope.components[0].width) {\n element.addClass('fixed-left');\n $firstComponent.css({ width: $scope.components[0].width });\n $divider.css({ left: $scope.components[0].width, width: $scope.divider.width });\n $lastComponent.css({ left: $scope.components[0].width, marginLeft: $scope.divider.width });\n } else if ($scope.components[1].width && $scope.components[1].width.match(/%$/)) {\n element.addClass('vertical-percent');\n $firstComponent.css({ right: $scope.components[1].width, marginRight: $scope.divider.width });\n $divider.css({ right: $scope.components[1].width, width: $scope.divider.width });\n $lastComponent.css({ width: $scope.components[1].width });\n } else if ($scope.components[1].width) {\n element.addClass('fixed-right');\n $firstComponent.css({ right: $scope.components[1].width, marginRight: $scope.divider.width });\n $divider.css({ right: $scope.components[1].width, width: $scope.divider.width });\n $lastComponent.css({ width: $scope.components[1].width });\n } else if ($scope.components[0].height && $scope.components[0].height.match(/%$/)) {\n element.addClass('horizontal-percent');\n var bottomPercent = (100 - parseFloat($scope.components[0].height.match(/(\\d+)%$/)[1])) + \"%\";\n $firstComponent.css({ bottom: bottomPercent, marginBottom: $scope.divider.height });\n $divider.css({ bottom: bottomPercent, height: $scope.divider.height });\n $lastComponent.css({ height: bottomPercent });\n } else if ($scope.components[0].height) {\n element.addClass('fixed-top');\n $firstComponent.css({ height: $scope.components[0].height });\n $divider.css({ top: $scope.components[0].height, height: $scope.divider.height });\n $lastComponent.css({ top: $scope.components[0].height, marginTop: $scope.divider.height });\n } if ($scope.components[1].height && $scope.components[1].height.match(/%$/)) {\n element.addClass('horizontal-percent');\n $firstComponent.css({ bottom: $scope.components[1].height, marginBottom: $scope.divider.height });\n $divider.css({ bottom: $scope.components[1].height, height: $scope.divider.height });\n $lastComponent.css({ height: $scope.components[1].height });\n } else if ($scope.components[1].height) {\n element.addClass('fixed-bottom');\n $firstComponent.css({ bottom: $scope.components[1].height, marginBottom: $scope.divider.height });\n $divider.css({ bottom: $scope.components[1].height, height: $scope.divider.height });\n $lastComponent.css({ height: $scope.components[1].height });\n }\n element.splitPane();\n var localFirstComponentSize, localLastComponentSize;\n element.on('splitpaneresize', function (event, splitPaneProperties) {\n if ($scope.splitPaneProperties && event.target === element[0] &&\n\t\t\t\t\t\tlocalFirstComponentSize !== splitPaneProperties.firstComponentSize &&\n\t\t\t\t\t\tlocalLastComponentSize !== splitPaneProperties.lastComponentSize) {\n $scope.$apply(function () {\n localFirstComponentSize = splitPaneProperties.firstComponentSize;\n $scope.splitPaneProperties.firstComponentSize = splitPaneProperties.firstComponentSize;\n localLastComponentSize = splitPaneProperties.lastComponentSize;\n $scope.splitPaneProperties.lastComponentSize = splitPaneProperties.lastComponentSize;\n });\n }\n });\n $scope.$watch('splitPaneProperties.firstComponentSize', function (firstComponentSize) {\n if ((firstComponentSize || firstComponentSize === 0) && firstComponentSize !== localFirstComponentSize) {\n localFirstComponentSize = firstComponentSize;\n element.splitPane('firstComponentSize', firstComponentSize);\n }\n });\n $scope.$watch('splitPaneProperties.lastComponentSize', function (lastComponentSize) {\n if ((lastComponentSize || lastComponentSize === 0) && lastComponentSize !== localLastComponentSize) {\n localLastComponentSize = lastComponentSize;\n element.splitPane('lastComponentSize', lastComponentSize);\n }\n });\n },\n template: '
'\n };\n})\n.directive('splitPaneComponent', function () {\n return {\n restrict: 'EA',\n replace: true,\n transclude: true,\n require: '^splitPane',\n link: function ($scope, element, attrs, paneCtrl) {\n paneCtrl.addComponent({ width: attrs.width, height: attrs.height });\n },\n template: '
'\n };\n})\n.directive('splitPaneDivider', function () {\n return {\n restrict: 'EA',\n replace: true,\n transclude: true,\n require: '^splitPane',\n link: function ($scope, element, attrs, paneCtrl) {\n paneCtrl.addDivider({ width: attrs.width, height: attrs.height });\n },\n template: '
'\n };\n});","wbApp.directive('wbSubjectCombo', ['$timeout', '$translate', '$filter', 'subjectsSvc', 'gridSortSvc',\n function ($timeout, $translate, $filter, subjectsSvc, gridSortSvc) {\n function formatResult(subject) {\n if (!subject) { return; }\n\n return subject.name;\n }\n\n function formatSelection(subject) {\n return subject.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n\n let models = subjectsSvc.getAllWithActiveFranchiesesAsync(false, ctrl.$modelValue);\n\n models.$promise.then(function () {\n $timeout(function () {\n \n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_SUBJECT'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: 5,\n id: function (model) {\n return model.id;\n },\n data: _.sortBy(models, function (a) {\n return gridSortSvc.localeSort(a, 'name');\n }),\n matcher: function (term, text, data) {\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n }\n });\n\n\n ctrl.$render = function () {\n $(elm).select2('val', ctrl.$viewValue);\n }\n\n ctrl.$render();\n }, 1);\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n return value + \"\";\n }\n });\n\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n ctrl.$render();\n });\n }\n }\n }]);\n ","'use strict';\n\nwbApp.directive('wbUserLookup', ['$http', '$translate', '$timeout', '$filter', 'userSvc',\n function ($http, $translate, $timeout, $filter, userSvc) {\n function formatResult(model) {\n if (!model) { return; }\n\n return \"
\" +\n \"
\" + model.fullName + \"
\" +\n \"
\" + model.email + \"
\" +\n \"
\" + $filter('phone')(model.phone) + \"
\" +\n \"
\";\n }\n\n function formatSelection(model) {\n return model.fullName;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_USER'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: !attrs.required,\n ajax: {\n url: \"Api/Users/GetLookupQuery\",\n data: function (term, page) {\n return {\n query: term,\n pageSize: 10,\n pageNo: page,\n };\n },\n results: function (data, page) {\n var more = data.length > 0;\n return { results: data, more: more };\n }\n },\n initSelection: function (element, callback) {\n var id = $(element).val();\n if (!!id && id != \"undefined\") {\n $http({\n method: 'GET',\n url: \"Api/Users/GetLookupID\",\n params: { userID: id }\n })\n .success(function (data, status, headers, config) {\n controller.$setViewValue(data.id);\n callback(data);\n });\n }\n }\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n //elm.on('change', function () {\n // scope.$apply(function () {\n // controller.$setViewValue(elm.select2('val'));\n // });\n //});\n\n //attrs.$observe('disabled', function (value) {\n // elm.select2('enable', !value);\n //});\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n\n }\n }\n}]);\n","wbApp.filter('accountingBook', ['$translate', 'accountingBookSvc', 'securitySvc',\n function ($translate, accountingBookSvc, securitySvc) {\n\n var isInAccountingBookRole = securitySvc.isInRole('AccountingBook');\n var models = [];\n\n if (isInAccountingBookRole) {\n models = accountingBookSvc.getAllAsync();\n }\n\n function asyncResult(input) {\n if (!isInAccountingBookRole) {\n return $translate.instant('TXT_ALERT_TITLE_FORBIDEN');\n }\n\n if (models.$resolved) {\n var model = _.find(models, { id: input });\n if (model) {\n return model.name;\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n }\n\n asyncResult.$stateful = true;\n\n return asyncResult;\n }]\n);","wbApp.filter('activityScheduleFullName', ['activityScheduleSvc', function (activityScheduleSvc) {\n return function (input) {\n if (input) {\n return activityScheduleSvc.getActivityScheduleFullName(input);\n }\n\n return input;\n };\n}]);","wbApp.filter('compensationGroup', ['$translate', 'compensationGroupSvc', function ($translate, compensationGroupSvc) {\n var models = compensationGroupSvc.getLookup();\n\n function asyncResult(input) {\n if (models.$resolved) {\n var model = _.find(models, function (item) { return item.id == input; });\n if (model) {\n return model.name;\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n }\n\n asyncResult.$stateful = true;\n\n return asyncResult;\n}]);","wbApp.filter('compensationGroups', ['$translate', 'compensationGroupSvc', function ($translate, compensationGroupSvc) {\n var models = compensationGroupSvc.getLookup();\n\n function asyncResult(input) {\n if (models.$resolved) {\n var selected = _.flatten(_.map(input, function (item) {\n return _.filter(models, { id: item });\n }));\n\n if (selected.length > 0) {\n return _.map(selected, 'name').join(', ')\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n }\n\n asyncResult.$stateful = true;\n\n return asyncResult;\n}]);","wbApp.filter('courseFullName', ['courseSvc', function (courseSvc) {\n return function (input) {\n if (input) {\n return courseSvc.getCourseFullName(input);\n }\n\n return input;\n };\n}]);","wbApp.filter('courseType', ['$translate', 'courseTypeSvc', function ($translate, courseTypeSvc) {\n function asyncResult(input) {\n let models = courseTypeSvc.getAllAsync();\n \n if (models.$resolved) {\n let model = _.find(models, { courseTypeID: input });\n if (model) {\n return model.name;\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n }\n\n asyncResult.$stateful = true;\n\n return asyncResult;\n }\n]);","wbApp.filter('emailCategory', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 1:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_DEFAULT');\n case 2:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_SEASON_TICKET');\n case 3:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_MULTI_ATTEND');\n case 4:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_1');\n case 5:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_2');\n case 6:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_3');\n case 7:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_4');\n case 8:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_5');\n case 9:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_6');\n case 10:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_7');\n case 11:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_8');\n case 12:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_9');\n case 13:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_10');\n \n default:\n return '';\n }\n };\n}]);","wbApp.filter('errorIndicator', [function () {\r\n return function (input) {\r\n if (!!input) {\r\n return \"\"\r\n }\r\n\r\n return \"\";\r\n };\r\n}]);\r\n\r\n\r\nwbApp.filter('noteIndicator', [function () {\r\n return function (input) {\r\n if (!!input) {\r\n return \"\"\r\n }\r\n\r\n return \"\";\r\n };\r\n}]);","wbApp.filter('franchiseCentralFlt', ['tenantInfo', function (tenantInfo) {\n return function (input) {\n if (input) { \n var franchiseCentral = _.find(tenantInfo.franchiseCentrals, { tenantID: input });\n if (franchiseCentral) {\n return franchiseCentral.alias;\n }\n }\n \n return '';\n };\n}]);","wbApp.filter('groups', ['$translate', 'groupSvc',\r\n function ($translate, groupSvc) {\r\n\r\n var models = groupSvc.getAllAsync();\r\n\r\n function asyncResult(input) {\r\n if (models.$resolved) {\r\n var selected = _.flatten(_.map(input, function (item) {\r\n return _.filter(models, { groupID: item });\r\n }));\r\n\r\n if (selected.length > 0) {\r\n return _.map(selected, 'name').join(', ')\r\n } else {\r\n return '';\r\n }\r\n } else {\r\n return $translate.instant('TXT_LOADING_DATA');\r\n }\r\n }\r\n\r\n asyncResult.$stateful = true;\r\n\r\n return asyncResult;\r\n }]\r\n);","wbApp.filter('groupsColors', ['$translate', 'groupSvc',\r\n function ($translate, groupSvc) {\r\n\r\n var models = groupSvc.getAllAsync();\r\n\r\n function asyncResult(input) {\r\n if (models.$resolved) {\r\n var selected = _.flatten(_.map(input, function (item) {\r\n return _.filter(models, function(m) { return m.groupID == item; });\r\n }));\r\n\r\n if (selected.length > 0) {\r\n var colorUtils = new webooker_utils.ColorUtils();\r\n return _.map(selected, function (s) {\r\n var title = selected.length > 1\r\n ? \"POZOR! Tento záznam má přiřazeno více skupin, reporty pro MPSV se nemusí generovat správně!\"\r\n : s.name;\r\n\r\n return \" \";\r\n }).join(' ')\r\n } else {\r\n return '';\r\n }\r\n } else {\r\n return $translate.instant('TXT_LOADING_DATA');\r\n }\r\n }\r\n\r\n asyncResult.$stateful = true;\r\n\r\n return asyncResult;\r\n }]\r\n);","wbApp.filter('level', ['$translate', 'levelSvc', function ($translate, levelSvc) {\n var models = levelSvc.getAll();\n\n function asyncResult(input) {\n if (models.$resolved) {\n var model = _.find(models, { id: input });\n if (model) {\n return model.name;\n } else if (!!input) {\n // the value is non 0 and should have been found, reload the data\n models = levelSvc.getAll();\n if (models.$resolved) {\n var model = _.find(models, { id: input });\n if (model) {\n return model.name;\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n }\n\n asyncResult.$stateful = true;\n\n return asyncResult;\n}\n]);","wbApp.filter('phase', ['$translate', 'phaseSvc', function ($translate, phaseSvc) {\n var models = phaseSvc.getAll();\n\n function asyncResult(input) {\n if (models.$resolved) {\n var model = _.find(models, { id: input });\n if (model) {\n return model.name;\n } else if (!!input) {\n // the value is non 0 and should have been found, reload the data\n models = phaseSvc.getAll();\n if (models.$resolved) {\n var model = _.find(models, { id: input });\n if (model) {\n return model.name;\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n } else {\n return '';\n } \n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n }\n\n asyncResult.$stateful = true;\n\n return asyncResult;\n }\n]);","wbApp.filter('previewStateCode', ['stateCodesSvc', function (stateCodesSvc) {\n return function (input) {\n if (input) {\n var res = stateCodesSvc.get(input);\n if (res) {\n return res.name;\n }\n }\n\n return input;\n };\n}]);","wbApp.filter('referenceSource', ['referenceSourceSvc', function (referenceSourceSvc) {\n return function (input) {\n if (input) {\n var res = referenceSourceSvc.get(input);\n if (res) {\n return res.name;\n }\n }\n\n return input;\n };\n}]);","wbApp.filter('reservationStartTimeType', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 1:\n return $translate.instant('TXT_VAL_CAN_START_AT_WHOLE_OR_HALF_HOUR');\n case 2:\n return $translate.instant('TXT_VAL_CAN_START_AT_WHOLE_HOUR_ONLY');\n case 3:\n return $translate.instant('TXT_VAL_CAN_START_AT_HALF_HOUR_ONLY');\n default:\n return '';\n }\n };\n}]);","wbApp.filter('semester', ['semesterSvc', function (semesterSvc) {\n return function (input) {\n if (input) {\n var res = semesterSvc.get(input);\n if (res) {\n return res.name;\n }\n }\n\n return \"\";\n };\n}]);","wbApp.filter('subjectCategory', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 1:\n return $translate.instant('TXT_LBL_COURSE');\n case 2:\n return $translate.instant('TXT_LBL_ACTION');\n default:\n return '';\n }\n };\n}]);\n","wbApp.filter('userRole', ['userRolesSvc', function (userRolesSvc) {\n return function (input) {\n if (input) {\n var res = userRolesSvc.get(input);\n if (res) {\n return res.name;\n }\n }\n\n return input;\n };\n}]);","/*global angular:true, browser:true */\n\n/**\n * @license HTTP Auth Interceptor Module for AngularJS\n * (c) 2012 Witold Szczerba\n * License: MIT\n */\n//(function () {\n 'use strict';\n\n angular.module('http-auth-interceptor', ['http-auth-interceptor-buffer'])\n\n .factory('authService', ['$rootScope','httpBuffer', function($rootScope, httpBuffer) {\n return {\n /**\n * call this function to indicate that authentication was successfull and trigger a\n * retry of all deferred requests.\n * @param data an optional argument to pass on to $broadcast which may be useful for\n * example if you need to pass through details of the user that was logged in\n */\n loginConfirmed: function(data, configUpdater) {\n var updater = configUpdater || function(config) {return config;};\n $rootScope.$broadcast('event:auth-loginConfirmed', data);\n httpBuffer.retryAll(updater);\n }\n };\n }])\n\n /**\n * $http interceptor.\n * On 401 response (without 'ignoreAuthModule' option) stores the request\n * and broadcasts 'event:angular-auth-loginRequired'.\n */\n .config(['$httpProvider', function($httpProvider) {\n\n var interceptor = ['$rootScope', '$q', 'httpBuffer', function($rootScope, $q, httpBuffer) {\n function success(response) {\n return response;\n }\n\n function error(response) {\n if (response.status === 403 && !response.config.ignoreAuthModule) {\n var deferred = $q.defer();\n httpBuffer.append(response.config, deferred);\n $rootScope.$broadcast('event:auth-loginRequired');\n return deferred.promise;\n }\n // otherwise, default behaviour\n return $q.reject(response);\n }\n\n return function(promise) {\n return promise.then(success, error);\n };\n\n }];\n $httpProvider.responseInterceptors.push(interceptor);\n }]);\n\n /**\n * Private module, a utility, required internally by 'http-auth-interceptor'.\n */\n angular.module('http-auth-interceptor-buffer', [])\n\n .factory('httpBuffer', ['$injector', function($injector) {\n /** Holds all the requests, so they can be re-requested in future. */\n var buffer = [];\n\n /** Service initialized later because of circular dependency problem. */\n var $http;\n\n function retryHttpRequest(config, deferred) {\n function successCallback(response) {\n deferred.resolve(response);\n }\n function errorCallback(response) {\n deferred.reject(response);\n }\n $http = $http || $injector.get('$http');\n $http(config).then(successCallback, errorCallback);\n }\n\n return {\n /**\n * Appends HTTP request configuration object with deferred response attached to buffer.\n */\n append: function(config, deferred) {\n buffer.push({\n config: config,\n deferred: deferred\n });\n },\n\n /**\n * Retries all the buffered requests clears the buffer.\n */\n retryAll: function(updater) {\n for (var i = 0; i < buffer.length; ++i) {\n retryHttpRequest(updater(buffer[i].config), buffer[i].deferred);\n }\n buffer = [];\n }\n };\n }]);\n//})();\n","wbApp.factory('courseCategorySvc', ['$resource', '$translate',\n function ($resource, $translate) {\n\n function getAll() {\n return [\n { courseCategoryID: 1, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_OTHERS') },\n { courseCategoryID: 2, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_SWIMMING') },\n { courseCategoryID: 3, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_LANGUAGES') },\n { courseCategoryID: 4, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_MOTIONAL') },\n { courseCategoryID: 5, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_PREGNANCY') },\n { courseCategoryID: 6, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_SUBURBAN') },\n { courseCategoryID: 7, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_CREATIVE') },\n { courseCategoryID: 8, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_MUSIC') },\n { courseCategoryID: 9, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_DANCING') },\n { courseCategoryID: 10, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_LOGIC') },\n { courseCategoryID: 11, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_ACROBATICS') },\n { courseCategoryID: 12, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_SPORTS') },\n { courseCategoryID: 13, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_FREE_TIME') },\n { courseCategoryID: 14, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_FIGHTING') },\n { courseCategoryID: 15, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_THEATRE') },\n { courseCategoryID: 16, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_SERVICES') },\n { courseCategoryID: 17, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_EDUCATION') },\n { courseCategoryID: 18, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_COGNITIVE') },\n { courseCategoryID: 19, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_ART') },\n { courseCategoryID: 20, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_HEALTH') },\n { courseCategoryID: 21, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_PARENTS_WITH_CHILDREN') }\n ];\n }\n\n return {\n getAll: getAll,\n }\n\n }]);","'use strict';\n\nwbApp.factory('previewHoursSvc', ['$resource', '$translate', '$q', 'notificationSvc', 'repositorySvc',\n function ($resource, $translate, $q, notificationSvc, repositorySvc) {\n\n var PreviewHour = $resource('/Api/PreviewHours/Get', {}, {\n 'query': { method: 'GET', isArray: true },\n 'insert': { method: 'POST', url: '/Api/PreviewHours/Insert' },\n 'update': { method: 'POST', url: '/Api/PreviewHours/Update' },\n 'delete': { method: 'POST', url: '/Api/PreviewHours/Delete' },\n 'register': { method: 'POST', url: '/Api/PreviewHours/Register' },\n 'excuse': { method: 'POST', url: '/Api/PreviewHours/Excuse' },\n 'rebook': { method: 'POST', url: '/Api/PreviewHours/ReBook' },\n 'getPreviewHoursSuccessStats': { method: 'GET', isArray: true, url: '/Api/PreviewHours/GetPreviewHoursSuccessStats' },\n });\n\n var previewHours;\n var forSemesterID;\n\n function getPreviewHoursSuccessStats(fromDate, toDate)\n {\n return repositorySvc.customGet(\n 'getPreviewHoursSuccessStats',\n PreviewHour,\n {\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function getPreviewHoursSuccessGraph(data)\n {\n var cols = [\n { id: 'r', label: $translate.instant(\"TXT_LBL_REFERENCE\"), type: 'string' },\n { id: 'p', label: $translate.instant('TXT_PREVIEW_HOURS'), type: 'number' },\n { id: 's', label: $translate.instant('TXT_SAME_SEMESTER'), type: 'number' },\n { id: 'a', label: $translate.instant('TXT_ANY_TIME'), type: 'number' }\n ];\n var rows = [];\n\n _.forEach(data, function (d) {\n rows.push({\n c: [\n { v: d.reference },\n { v: d.noOfPreviewHours },\n { v: d.noOfRegistrationsInTheSameSemester },\n { v: d.noOfRegistrationsInAnySemester }\n ]\n })\n });\n\n return {\n cols: cols,\n rows: rows\n };\n\n }\n\n function getAll(semesterID, refresh) {\n if (!previewHours || forSemesterID != semesterID || refresh) {\n previewHours = repositorySvc.get(PreviewHour, { semesterID: semesterID });\n forSemesterID = semesterID;\n }\n return previewHours;\n }\n\n function getAllForClassroomAsync(semesterID, classroomID, refresh) {\n if (!classroomID) {\n return getAll(semesterID, refresh);\n }\n\n var deferred = $q.defer();\n var m = [];\n m.$promise = deferred.promise;\n\n getAll(semesterID, refresh).$promise\n .then(function (data) {\n for (var i = 0; i < data.length; i++) {\n var d = data[i];\n if (d.classroomID === classroomID) {\n m.push(d);\n }\n }\n\n deferred.resolve(m);\n });\n\n return m;\n }\n\n function insert(data, successCallback, errorCallback) {\n var p;\n if (forSemesterID != data.semesterID) {\n p = [];\n } else {\n if (!previewHours) {\n previewHours = [];\n }\n p = previewHours;\n }\n\n repositorySvc.insert(\n PreviewHour, // $resource\n p, // collection\n data, // entity\n successCallback,\n errorCallback);\n }\n\n function update(data, successCallback, errorCallback) {\n repositorySvc.update(\n PreviewHour, // $resource\n previewHours, // collection\n data, // entity\n successCallback,\n errorCallback);\n }\n\n function remove(data, errorCallback) {\n repositorySvc.remove(\n PreviewHour, // $resource\n previewHours, // collection\n data, // entity\n null, // successCallback\n errorCallback,\n { studentID: data.studentID, courseScheduleID: data.courseScheduleID });\n }\n\n function registerOnCourse(data, successCallback, errorCallback) {\n PreviewHour.register(data, function (successResult) {\n if (!!successCallback) {\n repositorySvc.entityUpdated(previewHours, successResult);\n successCallback(successResult);\n notificationSvc.notifyInfo(\n $translate.instant('TXT_ALERT_TITLE_COURSE_REGISTRATION_SUCCESS'));\n }\n },\n function (errorResult) {\n if (!!errorCallback) {\n errorCallback(errorResult.data);\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_COURSE_REGISTRATION_FAILURE'),\n notificationSvc.translateError(errorResult.data));\n }\n });\n }\n\n function excuseFromLesson(data, successCallback, errorCallback) {\n\n PreviewHour.excuse(data, success, error);\n\n function success(successResult) {\n repositorySvc.entityUpdated(previewHours, successResult);\n if (!!successCallback) {\n successCallback(successResult);\n }\n notificationSvc.notifyInfo(\n $translate.instant('TXT_ALERT_TITLE_ATTENDANCE_EXCUSE_SUCCESS'));\n }\n\n function error(errorResult) {\n if (!!errorCallback) {\n errorCallback(errorResult.data);\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ATTENDANCE_EXCUSE_FAILURE'),\n notificationSvc.translateError(errorResult.data));\n }\n }\n }\n\n function bookOnLessonAgain(data, successCallback, errorCallback) {\n\n PreviewHour.rebook(data, success, error);\n\n function success(successResult) {\n repositorySvc.entityUpdated(previewHours, successResult);\n if (!!successCallback) {\n successCallback(successResult);\n }\n notificationSvc.notifyInfo(\n $translate.instant('TXT_ALERT_TITLE_ATTENDANCE_BOOK_AGAIN_SUCCESS'));\n }\n\n function error(errorResult) {\n if (!!errorCallback) {\n errorCallback(errorResult.data);\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ATTENDANCE_BOOK_AGAIN_FAILURE'),\n notificationSvc.translateError(errorResult.data));\n }\n }\n }\n\n return {\n getAll: getAll,\n getAllForClassroomAsync: getAllForClassroomAsync,\n insert: insert,\n update: update,\n remove: remove,\n registerOnCourse: registerOnCourse,\n excuseFromLesson: excuseFromLesson,\n bookOnLessonAgain: bookOnLessonAgain,\n getPreviewHoursSuccessStats: getPreviewHoursSuccessStats,\n getPreviewHoursSuccessGraph: getPreviewHoursSuccessGraph\n }\n }]);","'use strict';\n\nwbApp.factory('previewInterestSvc', ['$resource', '$translate', 'notificationSvc', 'repositorySvc',\n function ($resource, $translate, notificationSvc, repositorySvc) {\n\n var PreviewInterest = $resource('/Api/PreviewInterests/Get', {}, {\n 'query': { method: 'GET', isArray: true },\n 'book': { method: 'POST', url: '/Api/PreviewInterests/Book' },\n });\n\n var previewInterests;\n var forSemesterID;\n\n function getAll(semesterID) {\n if (!previewInterests || forSemesterID != semesterID) {\n previewInterests = repositorySvc.get(PreviewInterest, { semesterID: semesterID });\n forSemesterID = semesterID;\n }\n return previewInterests;\n }\n\n function bookLesson(data, successCallback, errorCallback) {\n PreviewInterest.book({ interestID: data.interestID, courseScheduleID: data.courseScheduleID },\n function (successResult) {\n if (data.semesterID == forSemesterID) {\n repositorySvc.entityRemoved(previewInterests, data.interestID);\n }\n successCallback(successResult);\n notificationSvc.notifyInfo(\n $translate.instant('TXT_ALERT_TITLE_LESSON_BOOKING_SUCCESS'));\n },\n function (errorResult) {\n if (!!errorCallback) {\n errorCallback(errorResult.data);\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_LESSON_BOOKING_FAILURE'),\n notificationSvc.translateError(errorResult.data));\n }\n })\n };\n\n return {\n getAll: getAll,\n bookLesson: bookLesson\n }\n\n }]);","'use strict';\n\nwbApp.factory('stateCodesSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n\n var StateCode = $resource('/Api/PreviewStateCodes/Get', {}, {\n 'query': { method: 'GET', isArray: true },\n 'save': { method: 'POST', url: '/Api/PreviewStateCodes/Save' },\n 'delete': { method: 'POST', url: '/Api/PreviewStateCodes/Delete' }\n });\n\n var stateCodes;\n\n function getAllAsync() {\n if (!stateCodes) {\n stateCodes = repositorySvc.get(StateCode, {});\n }\n return stateCodes;\n }\n\n function get(id) {\n if (stateCodes) {\n for (var i = 0; i < stateCodes.length; i++) {\n var sc = stateCodes[i];\n if (sc.id === id) {\n return sc;\n }\n }\n }\n return null;\n }\n\n function save(data, successCallback, errorCallback) {\n repositorySvc.save(\n StateCode, // $resource\n stateCodes, // collection\n data, // entity\n successCallback,\n errorCallback);\n }\n\n function remove(data, errorCallback) {\n repositorySvc.remove(\n StateCode, // $resource\n stateCodes, // collection\n data, // entity\n null, // successCallback\n errorCallback);\n }\n\n return {\n getAllAsync: getAllAsync,\n save: save,\n remove: remove,\n get: get,\n }\n\n }]);","'use strict';\n\nwbApp.factory('userRolesSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n var UserRole = $resource('/Api/UserRoles/Get', {}, {\n 'query': { method: 'GET', isArray: true },\n 'save': { method: 'POST', url: '/Api/UserRoles/Save' },\n 'delete': { method: 'POST', url: '/Api/UserRoles/Delete' }\n });\n\n var userRoles;\n var userRolesDict = {};\n\n function getAllAsync(refresh) {\n if (!userRoles || !!refresh) {\n userRolesDict = {};\n userRoles = repositorySvc.get(UserRole, '', function (result) {\n for (var r = 0; r < result.length; r++) {\n var role = result[r];\n role.sf = ConvertArrayToProperties(role.securityFeatures);\n userRolesDict[role.id] = role;\n }\n });\n }\n return userRoles;\n }\n\n function ConvertArrayToProperties(array) {\n var sf = {};\n if (array) {\n for (var f = 0; f < array.length; f++) {\n sf[array[f]] = true;\n }\n }\n\n return sf;\n }\n\n function ConvertPropertiesToArray(sf) {\n var array = [];\n if (sf) {\n for (var propertyName in sf) {\n if (sf[propertyName]) {\n array.push(propertyName);\n }\n }\n }\n\n return array;\n }\n\n function get(id) {\n return userRolesDict[id];\n }\n\n function save(data, successCallback, errorCallback) {\n\n data.securityFeatures = ConvertPropertiesToArray(data.sf);\n // data.sf = undefined;\n repositorySvc.save(\n UserRole, // $resource\n userRoles, // collection\n data, // entity\n function (data) {\n data.sf = ConvertArrayToProperties(data.securityFeatures);\n if (successCallback) {\n successCallback(data);\n }\n },\n errorCallback);\n }\n\n function remove(data, errorCallback) {\n repositorySvc.remove(\n UserRole, // $resource\n userRoles, // collection\n data, // entity\n null, // successCallback\n errorCallback);\n }\n\n function createNew() {\r\n return extendWithRfidSchedule({\r\n id: -1,\n name: \"\",\n description: \"\",\n buildIn: false,\n sf: {},\r\n rfidAccessGroup: {\r\n rfidAccessGroupID: 255\r\n }\r\n });\r\n }\n\n function extendWithRfidSchedule(model) {\r\n\r\n if (model.rfidAccessGroup.rfidAccessGroupID == 255 ||\r\n model.rfidAccessGroup.rfidAccessGroupID == 254 ||\r\n model.rfidAccessGroup.rfidAccessGroupID == 253) {\r\n\r\n model.rfidAccessGroup.schedule = {\r\n sunday: { period0: { startTime: 0, endTime: 0 }, period1: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period3: { startTime: 0, endTime: 0 }, period4: { startTime: 0, endTime: 0 } },\r\n monday: { period0: { startTime: 0, endTime: 0 }, period1: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period3: { startTime: 0, endTime: 0 }, period4: { startTime: 0, endTime: 0 } },\r\n tuesday: { period0: { startTime: 0, endTime: 0 }, period1: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period3: { startTime: 0, endTime: 0 }, period4: { startTime: 0, endTime: 0 } },\r\n wednesday: { period0: { startTime: 0, endTime: 0 }, period1: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period3: { startTime: 0, endTime: 0 }, period4: { startTime: 0, endTime: 0 } },\r\n thursday: { period0: { startTime: 0, endTime: 0 }, period1: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period3: { startTime: 0, endTime: 0 }, period4: { startTime: 0, endTime: 0 } },\r\n friday: { period0: { startTime: 0, endTime: 0 }, period1: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period3: { startTime: 0, endTime: 0 }, period4: { startTime: 0, endTime: 0 } },\r\n saturday: { period0: { startTime: 0, endTime: 0 }, period1: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period3: { startTime: 0, endTime: 0 }, period4: { startTime: 0, endTime: 0 } },\r\n };\r\n }\r\n\r\n return model;\r\n }\n\n return {\n getAllAsync: getAllAsync,\n get: get,\n save: save,\n remove: remove,\n createNew: createNew,\n extendWithRfidSchedule: extendWithRfidSchedule\n }\n }\n]);\n","wbApp.controller('CoursesAttendanceCtrl', ['$scope', '$translate', '$q', '$filter', 'courseScheduleSvc', 'attendanceSvc', 'gridSortSvc',\nfunction ($scope, $translate, $q, $filter, courseScheduleSvc, attendanceSvc, gridSortSvc) {\n\n var selectedCourse = null;\n var isActive = false;\n var loaded = false;\n $scope.courseAttendance = [];\n\n function reloadData(refresh) {\r\n if (selectedCourse) {\r\n var schedules = courseScheduleSvc.getAllAsync(selectedCourse.courseID, refresh);\r\n var attendance = attendanceSvc.getAllForCourse(selectedCourse.courseID);\r\n $q.all([schedules.$promise, attendance.$promise]).then(function (res) {\r\n $scope.courseAttendance = attendanceSvc.prepareFullCourseAttendanceTable(attendance, schedules);\r\n\r\n setGridColumns($scope.courseAttendanceGridSettings, schedules);\r\n loaded = true;\r\n });\r\n \r\n }\r\n }\n\n function onCourseScheduleChanged(refresh) {\n reloadData(refresh);\n $scope.$emit('onCourseShouldRefresh', { course: $scope.selectedCourse });\r\n }\n\n $scope.$on('selectedCourseChanged', function (e, courseInd) {\n if (courseInd.course) {\n if (isActive) {\n if (selectedCourse !== courseInd.course || courseInd.refresh) {\n selectedCourse = courseInd.course;\n reloadData(courseInd.refresh);\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else { \n $scope.courseAttendance = [];\n }\n selectedCourse = courseInd.course;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 3) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedCourse) {\n reloadData();\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.courseAttendanceGridSettings = {\r\n name: 'courseAttendance',\n columnFixing: { \n enabled: true\n },\n columns: [{\r\n dataField: 'fullName',\r\n caption: $translate.instant('TXT_LBL_STUDENT'),\r\n dataType: 'string',\r\n sortOrder: 'asc',\r\n sortIndex: 1,\r\n fixed: true,\r\n width: '190px',\r\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'fullName') }\r\n }, {\r\n dataField: 'isRegistered',\r\n caption: $translate.instant('TXT_LBL_REGISTERED'),\r\n sortOrder: 'desc',\r\n sortIndex: 0,\r\n visible: false\r\n }],\r\n showColumnLines: true,\r\n showRowLines: true,\r\n onCellPrepared: function (e) {\r\n var visibleColumnIndex = e.columnIndex + 1; // TODO\r\n\r\n if (e.rowType === \"data\" && visibleColumnIndex > 1) {\r\n e.cellElement.mousemove(function () {\r\n var dataField = $scope.courseAttendanceGridSettings.gridInstance.columnOption(visibleColumnIndex, 'dataField'); // $scope.courseAttendanceGridSettings.columns[visibleColumnIndex].dataField;\r\n var attendanceStatusStr = $filter('attendanceStatus')(e.data[dataField].attendanceStatus);\r\n var attendanceTypeStr = $filter('attendanceType')(e.data[dataField].attendanceType);\r\n var msg = !!attendanceTypeStr ? attendanceTypeStr + \"\\n\" + attendanceStatusStr : '';\r\n e.cellElement.attr('title', msg);\r\n });\r\n }\r\n\r\n if (e.rowType === \"data\" && e.columnIndex === 0) { \r\n if (e.data.isRegistered) {\r\n e.cellElement.addClass('bold');\r\n }\r\n }\r\n }\r\n }\n\n function setGridColumns(gridSettings, schedules) {\r\n if (gridSettings.gridInstance) {\r\n\r\n gridSettings.gridInstance.beginUpdate();\r\n\r\n var colCount = gridSettings.gridInstance.columnCount();\r\n for (var i = colCount - 1; i >= 2; i--) {\r\n gridSettings.gridInstance.deleteColumn(i);\r\n }\r\n\r\n var sortedSchedules = _.orderBy(schedules, 'startDate');\r\n _.forEach(sortedSchedules, function (schedule) {\r\n gridSettings.gridInstance.addColumn({\r\n dataField: schedule.courseScheduleID,\r\n caption: $filter('date')(schedule.startDate, 'shortDate'),\r\n width: '65px',\r\n alignment: 'center',\r\n calculateCellValue: function (rowData) {\r\n //Present = 0,\r\n //NotPresentNotExcused = 1,\r\n //NotPresentExcused = 2,\r\n //NotPresentExcusedNoCompensation = 3\r\n var model = rowData[schedule.courseScheduleID] || { attendanceStatus: null };\r\n\r\n switch (model.attendanceStatus) {\r\n case null:\r\n return '';\r\n case 0:\r\n return '|';\r\n case 1:\r\n return 'X';\r\n case 2:\r\n return 'O';\r\n case 3:\r\n return 'PO'\r\n }\r\n }\r\n });\r\n });\r\n\r\n gridSettings.gridInstance.addColumn({\r\n dataField: null,\r\n caption: ' '\r\n });\r\n\r\n gridSettings.gridInstance.endUpdate();\r\n }\r\n }\n}]);\n","wbApp.controller('CoursesCopyDetailCtrl', ['$scope', '$modal', 'courseSvc', 'tenantSettingSvc', 'courseScheduleSvc', 'courseRegistrationSvc',\n '$translate', '$timeout', 'messageBoxSvc', 'semesterSvc', 'holidayCalendarSvc', 'gridSortSvc',\nfunction ($scope, $modal, courseSvc, tenantSettingSvc, courseScheduleSvc, courseRegistrationSvc,\n $translate, $timeout, messageBoxSvc, semesterSvc, holidayCalendarSvc, gridSortSvc) {\n\n // force refresh semesters\n semesterSvc.getAllAsync(true);\n \n var origCourseID = $scope.model.courseID;\n\n $scope.model.courseID = 0;\n $scope.lessons = [];\n $scope.courseCopyMode = true;\n\n var lastExpanded = {\n recurrenceInfo: {},\n };\n\n\n $scope.onSemesterChange = function (semesterID) {\n expandRecurrence($scope.model);\n }\n\n $scope.isBusy = true;\n\n $scope.studentsLoaded = false;\n $scope.recurrenceExpanded = false;\n\n function expandRecurrence(model) {\n var semester = semesterSvc.get(model.semesterID);\n\n if (!!semester && !!semester.holidayCalendarId) {\n holidayCalendarSvc.getById(semester.holidayCalendarId).$promise.then(function (holidayCalendar) {\n expandRecurrenceImpl(model, holidayCalendar.days || []);\n });\n }\n else {\n expandRecurrenceImpl(model, []);\n }\n }\n\n function expandRecurrenceImpl(model, holidays) {\n lastExpanded = {\n startDate: model.startDate,\n endDate: model.endDate,\n semesterID: model.semesterID,\n recurrenceInfo: angular.copy(model.recurrenceInfo),\n recurrenceType: model.recurrenceType\n };\n\n courseScheduleSvc.expandRecurrencePattern(\n lastExpanded).$promise.then(function (data) {\n $scope.lessons = data;\n\n if ($scope.lessonsGridSettings.gridInstance) {\n $timeout(function () {\n $scope.lessonsGridSettings.gridInstance.selectAll();\n\n _.forEach(holidays, function (h) {\n var lesson = _.find($scope.lessons, function (l) {\n return moment(l.startDate).startOf('day').isSame(h);\n });\n if (!!lesson) {\n $scope.lessonsGridSettings.gridInstance.deselectRows([lesson.courseScheduleID]);\n }\n });\n\n $scope.recurrenceExpanded = true;\n $scope.isBusy = false;\n }, 300);\n } else {\n $scope.recurrenceExpanded = true;\n $scope.isBusy = false;\n }\n }, function (error) {\n //$scope.isBusy = false;\n });\n }\n\n courseRegistrationSvc.getAllForCourse(origCourseID).$promise.then(\n function (students) {\n $scope.lessonAttendance = students; \n\n var newRecurrenceModel = courseScheduleSvc.createNew($scope.model, true, function () {\n $scope.model.startDate = newRecurrenceModel.startDate;\n $scope.model.endDate = newRecurrenceModel.endDate;\n $scope.model.recurrenceInfo = newRecurrenceModel.recurrenceInfo;\n $scope.model.recurrenceType = newRecurrenceModel.recurrenceType;\n $scope.editRecurrence = true;\n });\n\n if ($scope.studentsGridSettings.gridInstance) {\n $timeout(function () {\n $scope.studentsGridSettings.gridInstance.selectAll();\n\n expandRecurrence($scope.model);\n\n $scope.$watch('model', function (model) {\n var diff = moment.duration(moment(model.endDate).diff(moment(model.startDate)));\n\n var fdays = diff.days() ? diff.days() + 'd ' : '';\n var fhours = diff.hours() ? diff.hours() + 'h ' : '';\n var fminutes = diff.minutes() ? diff.minutes() + 'm ' : '';\n var fmonths = diff.months() ? diff.months() + 'm ' : '';\n var fyears = diff.years() ? diff.years() + 'r ' : '';\n\n $scope.lessonLength = fyears + fmonths + fdays + fhours + fminutes;\n\n if (!angular.equals(model.recurrenceInfo, lastExpanded.recurrenceInfo) ||\n !moment(model.startDate).isSame(lastExpanded.startDate) ||\n !moment(model.endDate).isSame(lastExpanded.endDate) ||\n model.recurrenceType != lastExpanded.recurrenceType) {\n\n if (model.startDate && model.endDate &&\n moment(model.startDate).isBefore(model.endDate)) {\n $scope.isBusy = true;\n expandRecurrence(model);\n }\n }\n\n }, true);\n\n $scope.studentsLoaded = true;\n\n $scope.isBusy = false;\n }, 300);\n } else {\n $scope.studentsLoaded = true;\n $scope.isBusy = false;\n }\n },\n function (error) {\n $scope.isBusy = false;\n });\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onStartDateChanged = function (startDate) {\n courseScheduleSvc.updateEventByStartDate($scope.model, startDate);\n }\n\n // $scope.model.pictures = [];\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n function saveImpl(data) {\n $scope.isSaving = true;\n\n var dataToSave = angular.copy(data);\n var selectedStudents = $scope.studentsGridSettings.gridInstance.getSelectedRowsData();\n var studentIDs = _.map(selectedStudents, 'studentID');\n dataToSave.studentIDs = studentIDs;\n\n var selectedLessons = $scope.lessonsGridSettings.gridInstance.getSelectedRowsData();\n var lessons = _.map(selectedLessons, 'startDate');\n dataToSave.lessons = lessons;\n\n courseSvc.courseCopySave(dataToSave, success, error);\n\n function success() {\n $scope.$hide();\n if (!!$scope.onCourseCopySave) {\n $scope.onCourseCopySave();\n }\n }\n\n function error(data) {\n $scope.detailError = data;\n $scope.isSaving = false;\n }\n }\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: $translate.instant('TXT_CONFIRM_COURSE_COPY'),\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_SAVE',\n callback: function () { saveImpl(data); }\n }]\n });\n }\n\n $scope.teacherFromNowOnShouldShow = function () {\n return false;\n }\n\n $scope.recurrence = {\n type: 1\n };\n\n $scope.enableZoomIntegration = tenantSettingSvc.settings.enableZoomIntegration;\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"courses/courses/detail-main-tab.html\"\n }, {\n title: 'TXT_PRICE_TAB',\n template: \"courses/courses/detail-price-tab.html\"\n }, {\n title: 'TXT_COMPENSATION',\n template: \"courses/courses/detail-compensation-tab.html\"\n }, {\n title: 'TXT_COMPENSATION_GROUPS',\n template: \"courses/courses/detail-compensation-groups-tab.html\"\n }, {\n title: 'TXT_LBL_SETTING',\n template: \"courses/courses/detail-settings-tab.html\"\n }, {\n title: 'TXT_LBL_DESCRIPTION',\n template: \"courses/courses/detail-description-tab.html\"\n }, {\n title: 'TXT_LBL_PICTURES',\n template: \"courses/courses/detail-pictures-tab.html\"\n }, {\n title: 'TXT_LBL_FILES',\n template: \"courses/courses/detail-protected-storage-tab.html\"\n }, {\n title: 'TXT_LBL_RECURRENCE',\n template: \"schedule/schedule/schedule-course-detail-recurrence-tab.html\"\n }, {\n title: 'TXT_LBL_COURSE_SCHEDULE',\n template: \"courses/courses/copy-detail-lessons-tab.html\"\n }, {\n title: 'TXT_LBL_STUDENTS',\n template: 'courses/courses/copy-detail-students-tab.html'\n }];\n\n if (tenantSettingSvc.settings.enableAmortizationSchedules) {\n var index = _.findIndex($scope.detailTabs, { 'title': 'TXT_COMPENSATION' });\n\n $scope.detailTabs.splice(index, 0, {\n title: 'TXT_TAB_AMORTIZATION_SCHEDULE',\n template: \"courses/courses/detail-amortization-schedule-tab.html\"\n }); \n }\n\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.onDeletePictureBtnClick = function (picture) {\n _.remove($scope.model.pictures || [], { imageUri: picture.imageUri });\n }\n\n $scope.showPictureSelect = function () {\n picturesSelectDlgPromise.$promise.then(function () {\n picturesSelectDlgPromise.$scope.onPicturesSelected = function (pictures) {\n\n if (!$scope.model.pictures) {\n $scope.model.pictures = [];\n }\n\n angular.forEach(pictures, function (p) {\n if (!_.find($scope.model.pictures, { imageUri: p.imageUri }))\n {\n $scope.model.pictures.push(p);\n }\n });\n };\n picturesSelectDlgPromise.show();\n });\n }\n\n var picturesSelectDlgPromise = $modal({\n templateUrl: 'storage/pictures/pictures-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.addAmortizationSchedule = function() {\n $scope.model.amortizationSchedules.push({\n amount: null,\n percentageAmount: null,\n issueAt: null,\n issueDaysAfterRegistration: $scope.model.amortizationSchedules.length == 0 ? 0 : null\n });\n }\n\n $scope.removeAmortizationSchedule = function (schedule) {\n var index = _.indexOf($scope.model.amortizationSchedules, schedule);\n if (index > -1) {\n $scope.model.amortizationSchedules.splice(index, 1);\n }\n }\n\n $scope.lessonsGridSettings = {\n name: 'lessons',\n keyExpr: 'courseScheduleID',\n columns: [\n { dataFiled: 'courseScheduleID', dataType: 'number', visible: false },\n { dataField: 'startDate', caption: $translate.instant('TXT_LBL_START_DATE'), dataType: 'date', format: { raw: \"dd.MM.yy EEE HH:mm\" }, width: '130px', sortOrder: 'asc' },\n { dataField: 'endDate', caption: $translate.instant(\"TXT_LBL_END_DATE\"), dataType: 'date', format: { raw: \"HH:mm\" } },\n ],\n selection: {\n mode: 'multiple'\n },\n onContentReady: function() {\n // $scope.lessonsGridSettings.gridInstance.selectAll();\n }\n };\n\n $scope.studentsGridSettings = {\n name: 'students',\n columns: [\n { dataFiled: 'studentID', dataType: 'number', visible: false },\n { dataField: 'studentFullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', \n sortOrder: 'asc',\n calculateSortValue: function (data) {\n return gridSortSvc.sortHumanFullName2(data, 'studentFullName')\n } }\n ],\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.noFurtherRegisteredAttendance) {\n e.rowElement.addClass('text-muted');\n }\n }\n },\n selection: {\n mode: 'multiple'\n },\n onContentReady: function () {\n $scope.studentsGridSettings.gridInstance.selectAll();\n }\n }\n\n}]);\n","'use strict';\n\nwbApp.controller('CoursesCtrl', ['$scope', '$modal', '$window', '$translate', '$filter', 'semesterSvc',\n 'courseSvc', 'securitySvc', 'tenantSettingSvc', 'courseTypeSvc', 'courseRegistrationSvc',\nfunction ($scope, $modal, $window, $translate, $filter, semesterSvc, courseSvc, securitySvc, tenantSettingSvc, courseTypeSvc,\n courseRegistrationSvc) {\n\n $scope.isInAccountingBookRole = securitySvc.isInRole('AccountingBook');\n $scope.filteredCourses = [];\n $scope.rawCourses = [];\n $scope.courses = [];\n $scope.customFilter = { compensationGroupID: null };\n $scope.courseTypes = courseTypeSvc.getAllForLookup();\n \n function preFilter() {\n if (!$scope.rawCourses.$promise) {\n return;\n }\n\n $scope.rawCourses.$promise.then(function () {\n if (!$scope.customFilter.compensationGroupID) {\n $scope.courses.length = 0;\n $scope.courses.push.apply($scope.courses, $scope.rawCourses);\n } else {\n $scope.courses.length = 0;\n $scope.courses.push.apply($scope.courses,\n _.filter($scope.rawCourses, function (o) {\n return o.compensationGroupID == $scope.customFilter.compensationGroupID;\n }));\n }\n\n $scope.filteredCourses = $scope.courses;\n });\n }\n\n $scope.$watch('customFilter.compensationGroupID', function (newValue, oldValue) {\n preFilter();\n }, true);\n\n function setSelectedCourse(course, refresh) {\n $scope.selectedCourse = course;\n\n if (!course && !!$scope.gridSettings.gridInstance) {\n $scope.gridSettings.gridInstance.clearSelection();\n }\n\n $scope.$broadcast('selectedCourseChanged', { course: course, refresh: !!refresh });\n }\n\n $scope.enableZoomIntegration = tenantSettingSvc.settings.enableZoomIntegration;\n\n semesterSvc.getDefaultAsync()\n .then(function (semester) {\n $scope.semesterID = semester.id;\n\n $scope.rawCourses = courseSvc.getAllAsync($scope.semesterID, true);\n // $scope.filteredCourses = $scope.rawCourses;\n preFilter();\n setSelectedCourse(null);\n });\n\n function refreshData() {\n if ($scope.semesterID) {\n $scope.rawCourses = courseSvc.getAllAsync($scope.semesterID, true);\n preFilter();\n //$scope.filteredCourses = $scope.rawCourses;\n setSelectedCourse(null);\n }\n }\n\n $scope.$on('refreshData', function (e, data) {\n refreshData();\n });\n\n $scope.$on('onCourseShouldRefresh', function (e, data) {\n courseSvc.refreshCourseRecord($scope.semesterID, data.course.courseID, $scope.courses, function () {\n if ($scope.selectedCourse.courseID === data.course.courseID) {\n setSelectedCourse(data.course, true);\n if ($scope.gridSettings.gridInstance) {\n $scope.gridSettings.gridInstance.selectRows(data.course, false);\n }\n }\n });\n });\n\n $scope.getSemesterPercentFilled = function () {\n return ($scope.getSemesterFilled() / $scope.getSemesterCapacity()) * 100;\n }\n\n $scope.getSemesterFilled = function () {\n if (!!$scope.filteredCourses) {\n return _.reduce($scope.filteredCourses, function (total, n) {\n return total + n.filled;\n }, 0);\n }\n return 0;\n }\n\n $scope.getSemesterCapacity = function () {\n if (!!$scope.filteredCourses) {\n return _.reduce($scope.filteredCourses, function (total, n) {\n return total + n.capacity;\n }, 0);\n }\n return 100;\n }\n\n $scope.onFilterApplied = function (rows) {\n $scope.filteredCourses = rows;\n }\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n $scope.rawCourses = courseSvc.getAllAsync($scope.semesterID, true);\n preFilter();\n }\n setSelectedCourse(null);\n }\n\n $scope.gridSettings = {\n name: 'courses',\n columns: [\n { dataField: 'courseID', caption: $translate.instant('TXT_LBL_ID'), dataType: 'number', visible: false },\n { dataField: 'abbreviation', caption: $translate.instant(\"TXT_LBL_ABBREVIATION\"), dataType: 'string', width: '130px' },\n {\n dataField: 'courseTypeID',\n caption: $translate.instant(\"TXT_LBL_COURSE_TYPE\"),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('courseType')(rowData.courseTypeID);\n },\n width: '110px'\n },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string' }, \n { dataField: 'subjectName', caption: $translate.instant('TXT_LBL_SUBJECT'), dataType: 'string', sortOrder: 'asc' },\n {\n dataField: 'firstLesson',\n caption: $translate.instant('TXT_MENU_SCHEDULE'),\n dataType: 'date',\n format: { raw: \"EEE HH:mm\" },\n calculateSortValue: function (rowData) {\n var mfirstLesson = moment(rowData.firstLesson);\n return mfirstLesson.isValid()\n ? mfirstLesson.day() * 10000 + mfirstLesson.hour() * 100 + mfirstLesson.minute()\n : rowData.firstLesson;\n },\n width: '90px'\n },\n { dataField: 'teacher', caption: $translate.instant('TXT_LBL_EMPLOYEE'), dataType: 'string', width: '170px' },\n { dataField: 'filled', caption: $translate.instant('TXT_LBL_FILLED'), dataType: 'number', width: '80px' },\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'fixedPrice', caption: $translate.instant('TXT_LBL_FIXED_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'allowRegistration', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\n { dataField: 'isOnlineMeeting', caption: $translate.instant('TXT_LBL_ONLINE'), dataType: 'boolean', width: '60px', visible: $scope.enableZoomIntegration },\n { dataField: 'lessonLengthInMinutes', caption: $translate.instant('TXT_LBL_LESSON_LENGTH'), dataType: 'number', width: '120px', visible: false },\n ],\n onRowPrepared: function (e) {\n if (e.rowType === \"data\") {\n let data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.filled >= data.capacity) {\n e.rowElement.addClass('text-muted');\n }\n }\n },\n customCommands: [{\n text: $translate.instant('TXT_MENU_PRINT_INFO_CARD'),\n isVisible: function () { return securitySvc.isInRole('Course.InfoCard') && securitySvc.isInRole('Reports'); },\n callback: function (data) { onPrintInfoCard(data.courseID); }\n }, {\n text: $translate.instant('TXT_MENU_RESEND_COURSE_REGISTRATION_NOTIFICATION'),\n isVisible: function () { return securitySvc.isInRole('CourseRegistration'); },\n callback: function (data) { onResendCourseRegistrationNotification(data.courseID); }\n }, {\n text: $translate.instant('TXT_COPY'),\n isVisible: function () {\n return securitySvc.isInRole('Course.Copy') &&\n securitySvc.isInRole('CourseRegistration.Insert') &&\n securitySvc.isInRole('CourseSchedule.Insert') &&\n securitySvc.isInRole('Course.Insert');\n },\n callback: function (data) { onCourseCopy(data.courseID); }\n }]\n }\n\n function onResendCourseRegistrationNotification(courseID) {\n var courseRegistrations = courseRegistrationSvc.getAllForCourse(courseID);\n courseRegistrations.$promise.then(function (data) {\n _.forEach(data, function (courseRegistration) {\n courseRegistrationSvc.sendRegistrationNotification(courseRegistration.courseRegistrationID);\n });\n });\n }\n\n\n function onPrintInfoCard(courseID) {\n $window.open('/Admin/Report/InfoCard?CourseID=' + courseID,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n function onCourseCopy(courseID) {\n courseSvc.getByCourseID(courseID).$promise.then(function (course) {\n detailCopyDialogPromise.$promise.then(function () {\n detailCopyDialogPromise.$scope.model = angular.copy(course);\n detailCopyDialogPromise.$scope.onCourseCopySave = function () {\n refreshData();\n };\n detailCopyDialogPromise.show();\n });\n });\n }\n\n $scope.selectedCourse = {};\n\n $scope.onRowSelected = function (data) {\n $scope.selectedCourse = data;\n setSelectedCourse($scope.selectedCourse);\n }\n\n $scope.onRowEdit = function (data) {\n courseSvc.getByCourseID(data.courseID).$promise.then(function (course) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.collection = $scope.courses;\n detailDialogPromise.$scope.model = angular.copy(course);\n detailDialogPromise.$scope.onCourseSave = function (model) {\n setSelectedCourse(model, true);\n };\n detailDialogPromise.show();\n });\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.collection = $scope.courses;\n detailDialogPromise.$scope.model = courseSvc.createNew($scope.semesterID, false);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n courseSvc.remove(data, $scope.courses, function () {\n $scope.selectedCourse = null;\n setSelectedCourse(null);\n });\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"courses/courses/courses-detail-tabs/detail.html\"\n }, {\n title: 'TXT_LBL_STUDENTS',\n template: 'courses/courses/courses-detail-tabs/students.html'\n }, {\n title: 'TXT_MENU_SCHEDULE',\n template: 'courses/courses/courses-detail-tabs/schedule.html'\n }, {\n title: 'TXT_LBL_ATTENDANCE',\n template: 'courses/courses/courses-detail-tabs/attendance.html'\n }];\n\n if (securitySvc.isInRole('Leads'))\n {\n $scope.tabs.push({\n title: 'TXT_ENABLE_FULL_COURSE_INTEREST',\n template: 'courses/courses/courses-detail-tabs/leads.html'\n });\n }\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n\n var detailDialogPromise = $modal({\n templateUrl: 'courses/courses/detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n var detailCopyDialogPromise = $modal({\n templateUrl: 'courses/courses/copy-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('CoursesDetailCtrl', ['$scope', '$modal', 'courseSvc', 'tenantSettingSvc', 'localStorageService',\nfunction ($scope, $modal, courseSvc, tenantSettingSvc, localStorageService) {\n\n if (localStorageService.isSupported) {\n if (!$scope.model.courseID) {\n $scope.model.lessonLengthInMinutes = localStorageService.get('lessonLengthInMinutes') || 45;\n }\n }\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (localStorageService.isSupported) {\n if ($scope.modelOrig.lessonLengthInMinutes != data.lessonLengthInMinutes) {\n localStorageService.set('lessonLengthInMinutes', data.lessonLengthInMinutes);\n }\n }\n\n if (!data.courseID) {\n courseSvc.insert(data, $scope.collection, success, error);\n } else {\n courseSvc.update(data, $scope.collection, success, error);\n }\n\n function success(model) {\n $scope.$hide();\n if (!!$scope.onCourseSave) {\n $scope.onCourseSave(model);\n }\n }\n\n function error(data) {\n $scope.detailError = data;\n $scope.isSaving = false;\n }\n }\n\n $scope.onSemesterChange = function (semesterID) {\n\n }\n\n $scope.teacherFromNowOnShouldShow = function () {\n return !!$scope.model.courseID && $scope.modelOrig.employeeID !== $scope.model.employeeID;\n }\n\n $scope.recurrence = {\n type: 1\n };\n\n $scope.enableZoomIntegration = tenantSettingSvc.settings.enableZoomIntegration;\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"courses/courses/detail-main-tab.html\"\n }, {\n title: 'TXT_PRICE_TAB',\n template: \"courses/courses/detail-price-tab.html\"\n }, {\n title: 'TXT_COMPENSATION',\n template: \"courses/courses/detail-compensation-tab.html\"\n }, {\n title: 'TXT_COMPENSATION_GROUPS',\n template: \"courses/courses/detail-compensation-groups-tab.html\"\n }, {\n title: 'TXT_LBL_SETTING',\n template: \"courses/courses/detail-settings-tab.html\"\n }, {\n title: 'TXT_LBL_DESCRIPTION',\n template: \"courses/courses/detail-description-tab.html\"\n }, {\n title: 'TXT_LBL_PICTURES',\n template: \"courses/courses/detail-pictures-tab.html\"\n }, {\n title: 'TXT_LBL_FILES',\n template: \"courses/courses/detail-protected-storage-tab.html\"\n }];\n\n if (tenantSettingSvc.settings.enableAmortizationSchedules) {\n var index = _.findIndex($scope.detailTabs, { 'title': 'TXT_COMPENSATION' });\n\n $scope.detailTabs.splice(index, 0, {\n title: 'TXT_TAB_AMORTIZATION_SCHEDULE',\n template: \"courses/courses/detail-amortization-schedule-tab.html\"\n }); \n }\n\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.onDeletePictureBtnClick = function (picture) {\n _.remove($scope.model.pictures || [], { imageUri: picture.imageUri });\n }\n\n $scope.onContentInfoAccessTimeChanged = function (contentInfoAccessTime) {\n switch (contentInfoAccessTime.accessTimeType) {\n case 0: // NoRestrictions\n contentInfoAccessTime.noOfDays = null;\n contentInfoAccessTime.accessAtUtc = null;\n break;\n case 1: // DaysFromBaseline\n contentInfoAccessTime.noOfDays = 0;\n contentInfoAccessTime.accessAtUtc = null;\n break;\n case 2: // AtSpecificDate\n contentInfoAccessTime.noOfDays = null;\n contentInfoAccessTime.accessAtUtc = new Date();\n break;\n }\n }\n\n $scope.onContentInfoDeleteBtnClick = function (contentInfo) {\n _.remove($scope.model.contentInfos || [], { objectUri: contentInfo.objectUri });\n }\n\n $scope.showProtectedStorageSelect = function () {\n protectedStorageSelectDlgPromise.$promise.then(function () {\n protectedStorageSelectDlgPromise.$scope.onFilesSelected = function (files) {\n\n if (!$scope.model.contentInfos) {\n $scope.model.contentInfos = [];\n }\n\n angular.forEach(files, function (p) {\n if (!_.find($scope.model.contentInfos, { objectUri: p.objectUri })) {\n $scope.model.contentInfos.push({\n objectUri: p.objectUri,\n name: p.name,\n description: null,\n contentType: p.contentType,\n accessTimeBaseline: 0, // AfterPayment\n accessType: 1, // AccessToDownload\n allowAccessFrom: {\n accessTimeType: 1, // DaysFromBaseline\n noOfDays: 0\n },\n allowAccessTo: {\n accessTimeType: 0 // NoRestrictions\n }\n });\n }\n });\n };\n protectedStorageSelectDlgPromise.show();\n });\n }\n\n var protectedStorageSelectDlgPromise = $modal({\n templateUrl: 'storage/protected-storage/protected-storage-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.showPictureSelect = function () {\n picturesSelectDlgPromise.$promise.then(function () {\n picturesSelectDlgPromise.$scope.onPicturesSelected = function (pictures) {\n\n if (!$scope.model.pictures) {\n $scope.model.pictures = [];\n }\n\n angular.forEach(pictures, function (p) {\n if (!_.find($scope.model.pictures, { imageUri: p.imageUri }))\n {\n $scope.model.pictures.push(p);\n }\n });\n };\n picturesSelectDlgPromise.show();\n });\n }\n\n var picturesSelectDlgPromise = $modal({\n templateUrl: 'storage/pictures/pictures-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.addAmortizationSchedule = function() {\n $scope.model.amortizationSchedules.push({\n amount: null,\n percentageAmount: null,\n issueAt: null,\n issueDaysAfterRegistration: $scope.model.amortizationSchedules.length == 0 ? 0 : null\n });\n }\n\n $scope.removeAmortizationSchedule = function (schedule) {\n var index = _.indexOf($scope.model.amortizationSchedules, schedule);\n if (index > -1) {\n $scope.model.amortizationSchedules.splice(index, 1);\n }\n }\n\n}]);\n","'use strict';\n\nwbApp.controller('CoursesLeadsCtrl', ['$scope', '$modal', '$q', '$translate', '$filter', 'leadSvc', 'courseSvc', 'gridSortSvc',\n 'securitySvc', 'courseRegistrationSvc',\nfunction ($scope, $modal, $q, $translate, $filter, leadSvc, courseSvc, gridSortSvc, securitySvc, courseRegistrationSvc) {\n\n $scope.selectedCourse = null;\n var isActive = false;\n var loaded = false;\n $scope.courseLeads = [];\n \n $scope.$on('selectedCourseChanged', function (e, courseInd) {\n if (courseInd.course) {\n if (isActive) {\n if ($scope.selectedCourse !== courseInd.course || courseInd.refresh) {\n $scope.courseLeads = leadSvc.getAllByStatusAndCourse(0 /* Open */, courseInd.course.courseID);\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else {\n $scope.courseLeads = [];\n }\n $scope.selectedCourse = courseInd.course;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 4) {\n if (!isActive) {\n isActive = true;\n if (!loaded && $scope.selectedCourse) {\n $scope.courseLeads = leadSvc.getAllByStatusAndCourse(0 /* Open */, $scope.selectedCourse.courseID);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.courseLeadsGridSettings = {\n name: 'courseLeads',\n columns: [\n {\n dataField: 'id',\n caption: $translate.instant('TXT_LBL_ID'),\n dataType: 'string',\n visible: false,\n showInColumnChooser: false\n },\n {\n dataField: 'userFullName',\n caption: $translate.instant('TXT_LBL_USER'),\n dataType: 'string',\n width: '160px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'userFullName') }\n },\n {\n dataField: 'studentsFullName',\n caption: $translate.instant('TXT_LBL_STUDENT'),\n dataType: 'string', \n sortOrder: 'asc',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentsFullName') }\n },\n {\n dataField: 'studentBirthday',\n caption: $translate.instant(\"TXT_LAB_BIRTHDAY\"),\n dataType: 'date',\n format: { date: 'short' },\n width: '90px',\n },\n {\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.phone);\n },\n width: '120px'\n },\n { dataField: 'email', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '190px' },\n\n {\n dataField: 'createdAtUtc',\n caption: $translate.instant('TXT_LBL_CREATED_AT'),\n dataType: 'date',\n format: { date: 'short' },\n width: '80px'\n },\n ],\n customCommands: [{\n text: $translate.instant('TXT_MENU_REGISTER_ON_COURSE'),\n isVisible: function (row) { return securitySvc.isInRole('Leads.Update') && securitySvc.isInRole('CourseRegistration.Insert'); },\n callback: function (row) { createCourseRegistrations(row); }\n },{\n text: $translate.instant('TXT_CHANGE_STATE'),\n isVisible: function (data) { return securitySvc.isInRole('Leads.Update'); },\n callback: function (data) { $scope.onChangeStatus(data); }\n }]\n }\n\n function createCourseRegistrations(model) {\n leadSvc.getById(model.id).$promise.then(function (lead) {\n\n var course = $scope.selectedCourse;\n\n if (lead.status == 1) {\n $scope.detailError = { errors: [{ message: $translate.instant('TXT_ERROR_LEAD_ALREADY_CONVERTED') }] };\n }\n else {\n $q.all([detailDialogPromise.$promise, courseRegistrationSvc.createNew(course, false)])\n .then(function (data) {\n var courseRegistration = data[1];\n if (!!lead.studentIds && lead.studentIds.length > 0) {\n courseRegistration.studentID = lead.studentIds[0];\n }\n\n detailDialogPromise.$scope.course = course;\n detailDialogPromise.$scope.model = courseRegistration;\n // Do not search for leads during course registration save\n detailDialogPromise.$scope.ignoreLeadAssignment = true; \n detailDialogPromise.$scope.onAfterSuccessSave = function (cr) {\n\n lead.conversionType = 1; // CourseRegistraction\n lead.conversionReferenceId = cr.courseRegistrationID;\n lead.conversionDateUtc = moment().toDate();\n\n var courseFullName = $filter('courseFullName')(course);\n var firstLesson = !!course.firstLesson\n ? ' (' + $filter('date')(course.firstLesson, 'EEE HH:mm').toUpperCase() + ')'\n : '';\n lead.conversionText = courseFullName + firstLesson;\n lead.status = 1; // Converted\n\n if (!lead.notes || lead.notes.length == 0) {\n lead.notes = [];\n }\n\n var user = securitySvc.loggedInUser();\n\n lead.notes.push({\n text: $translate.instant('TXT_TITLE_REGISTER_ON_COURSE') + ': ' + lead.conversionText,\n updatedAtUtc: moment().toDate(),\n updatedByUserId: user.userID + \"\",\n updatedByName: user.fullName\n });\n\n leadSvc.update(lead).$promise.then(function () {\n $scope.courseLeads = leadSvc.getAllByStatusAndCourse(0 /* Open */, $scope.selectedCourse.courseID);\n });\n };\n detailDialogPromise.show();\n })\n }\n })\n }\n\n $scope.onChangeStatus = function (lead) {\n leadsNoteDetailPromise.$promise.then(function () {\n leadsNoteDetailPromise.$scope.leadId = lead.id;\n leadsNoteDetailPromise.$scope.noteId = null;\n leadsNoteDetailPromise.$scope.onLeadSave = function (model) {\n $scope.courseLeads = leadSvc.getAllByStatusAndCourse(0 /* Open */, $scope.selectedCourse.courseID);\n };\n leadsNoteDetailPromise.show();\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'courses/courses/courses-detail-tabs/students-detail.html',\n show: false, \n scope: $scope.$new()\n });\n\n var leadsNoteDetailPromise = $modal({\n templateUrl: 'leads/leads-detail-tabs/crm-notes-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","'use strict';\n\nwbApp.controller('CoursesScheduleCtrl', ['$scope', '$modal', '$translate', '$q', 'messageBoxSvc', 'courseScheduleSvc', 'securitySvc', 'courseSvc',\nfunction ($scope, $modal, $translate, $q, messageBoxSvc, courseScheduleSvc, securitySvc, courseSvc) {\n\n var selectedCourse = null;\n var isActive = false;\n var loaded = false;\n $scope.courseSchedules = [];\n\n function reloadData(refresh) {\r\n if (selectedCourse) {\r\n $scope.courseSchedules = courseScheduleSvc.getAllAsync(selectedCourse.courseID, refresh, true);\r\n $scope.courseSchedules.$promise.then(function (data) {\r\n\r\n var acc = 1;\r\n _.forEach(_.orderBy(data, ['startDate'], ['asc'] ), function (schedule) {\r\n if (schedule.recurrenceType !== 4) {\r\n schedule.orderIdx = acc;\r\n acc++;\r\n } \r\n });\r\n });\r\n loaded = true;\r\n }\r\n }\n\n function onCourseScheduleChanged(refresh) {\n reloadData(refresh);\n $scope.$emit('onCourseShouldRefresh', { course: $scope.selectedCourse });\r\n }\n\n $scope.$on('selectedCourseChanged', function (e, courseInd) {\n if (courseInd.course) {\n if (isActive) {\n if (selectedCourse !== courseInd.course || courseInd.refresh) {\n selectedCourse = courseInd.course;\n reloadData(courseInd.refresh);\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else { \n $scope.courseSchedules = [];\n }\n selectedCourse = courseInd.course;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 2) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedCourse) {\n reloadData();\n }\n }\n } else {\n isActive = false;\n }\n });\n\n function newLesson() {\r\n courseDetailDialogPromise.$promise.then(function () {\r\n courseDetailDialogPromise.$scope.editRecurrence = false;\n courseDetailDialogPromise.$scope.model = courseScheduleSvc.createNew(selectedCourse);\n courseDetailDialogPromise.$scope.onSave = function () {\r\n onCourseScheduleChanged(true);\r\n };\n courseDetailDialogPromise.show();\r\n });\r\n }\n\n function newRecurrence() {\r\n courseDetailDialogPromise.$promise.then(function () {\r\n courseDetailDialogPromise.$scope.editRecurrence = true;\r\n courseDetailDialogPromise.$scope.model = courseScheduleSvc.createNew(selectedCourse, true);\n courseDetailDialogPromise.$scope.onSave = function () {\r\n onCourseScheduleChanged(true);\r\n };\n courseDetailDialogPromise.show();\r\n });\r\n }\n\n function changeRecurrence(lesson) {\r\n var pattern = courseScheduleSvc.getPattern(\r\n lesson.courseID, lesson.courseScheduleID);\r\n $q.all([pattern.$promise, courseDetailDialogPromise.$promise]).then(\r\n function () {\r\n courseDetailDialogPromise.$scope.editRecurrence = true;\r\n courseDetailDialogPromise.$scope.model = angular.copy(pattern);\n courseDetailDialogPromise.$scope.onSave = function () {\r\n onCourseScheduleChanged(true);\r\n };\n courseDetailDialogPromise.show();\r\n });\r\n }\n\n\n function changeLesson(data) {\r\n courseDetailDialogPromise.$promise.then(function () {\r\n courseDetailDialogPromise.$scope.editRecurrence = false;\n courseDetailDialogPromise.$scope.model = angular.copy(data);\n courseDetailDialogPromise.$scope.onSave = function () {\r\n onCourseScheduleChanged(true);\r\n };\n courseDetailDialogPromise.show();\r\n });\r\n }\n\n function deleteSingleLessonNoRecurrence(event) {\r\n courseScheduleSvc.remove(\r\n event,\r\n {\r\n sendEmailNotification: true,\r\n sendSmsNotification: false\r\n },\r\n function () {\r\n onCourseScheduleChanged(true);\r\n }\r\n );\r\n }\n\n function deleteSingleLessonRecurrence(event) {\r\n courseScheduleSvc.remove(\r\n event,\r\n {\r\n sendEmailNotification: true,\r\n sendSmsNotification: false\r\n },\r\n function () {\r\n onCourseScheduleChanged(true);\r\n }\r\n );\r\n }\n\n function deleteRecurrence(event) {\r\n\r\n var pattern = courseScheduleSvc.getPattern(\r\n event.courseID, event.courseScheduleID)\r\n .$promise.then(function (pattern) {\r\n courseScheduleSvc.remove(\r\n pattern,\r\n {\r\n sendEmailNotification: true,\r\n sendSmsNotification: false\r\n },\r\n function () {\r\n onCourseScheduleChanged(true);\r\n }\r\n );\r\n });\r\n }\n\n function getSelectedCourseName() {\r\n return courseSvc.getCourseFullName(selectedCourse);\r\n }\n\n function restoreEvent(event) {\r\n messageBoxSvc.showMessageDlg({\r\n title: 'TXT_TITLE_CONFIRM_RESTORE',\n message: $translate.instant('TXT_TEXT_CONFIRM_RESTORE'),\n buttons: [{\r\n text: 'TXT_BTN_CANCEL'\r\n }, {\r\n text: 'TXT_RESTORE',\n callback: function () {\r\n deleteSingleLessonRecurrence(event);\r\n }\r\n }]\r\n });\r\n }\n\n function deleteEvent(event) {\r\n if (event.recurrenceType === 0) {\r\n messageBoxSvc.showMessageDlg({\r\n title: 'TXT_TITLE_CONFIRM_DELETE',\n message: 'TXT_TEXT_CONFIRM_DELETE',\n buttons: [{\r\n text: 'TXT_BTN_NO'\r\n }, {\r\n text: 'TXT_BTN_YES',\n callback: function () {\r\n deleteSingleLessonNoRecurrence(event);\r\n }\r\n }]\r\n });\r\n } else {\r\n // Recurrence\r\n var courseName = getSelectedCourseName();\r\n\r\n messageBoxSvc.showMessageDlg({\r\n title: 'TXT_TITLE_CONFIRM_DELETE_RECURRENCE',\n message: $translate.instant('TXT_TEXT_CONFIRM_DELETE_RECURRENCE').f(courseName),\n buttons: [{\r\n text: 'TXT_BTN_CANCEL'\r\n }, {\r\n text: 'TXT_BTN_SERIES',\n callback: function () {\r\n deleteRecurrence(event);\r\n }\r\n }, {\r\n text: 'TXT_BTN_THIS_LESSON',\n callback: function () {\r\n deleteSingleLessonRecurrence(event);\r\n }\r\n }]\r\n });\r\n }\n }\n\n\n $scope.courseSchedulesGridSettings = {\r\n name: 'courseSchedules',\n columns: [\n {\r\n dataField: 'courseScheduleID',\n caption: '#', \n dataType: 'number',\r\n allowFiltering: false,\r\n cellTemplate: function (cellElement, cellInfo) {\r\n $('
' + (cellInfo.data.orderIdx || '') + '
').appendTo(cellElement);\r\n },\r\n width: '35px'\r\n },\n {\r\n dataField: 'recurrenceId',\n caption: '',\n dataType: 'string',\r\n allowFiltering: false,\r\n cellTemplate: function (cellElement, cellInfo) {\r\n if (cellInfo.data.recurrenceType === -1) {\r\n $('').appendTo(cellElement);\r\n } else if (!!cellInfo.data.recurrenceType) {\r\n $('').appendTo(cellElement);\r\n } \r\n },\r\n width: '20px'\r\n },\n { dataField: 'startDate', caption: $translate.instant('TXT_LBL_START_DATE'), dataType: 'date', format: { raw: \"dd.MM.yy EEE HH:mm\" }, width: '130px', sortOrder: 'asc' },\n { dataField: 'endDate', caption: $translate.instant(\"TXT_LBL_END_DATE\"), dataType: 'date', format: { raw: \"HH:mm\" }, width: '60px' },\n { dataField: 'classroomName', caption: $translate.instant('TXT_LBL_CLASSROOM'), dataType: 'string', width: '180px' },\n { dataField: 'teacher', caption: $translate.instant('TXT_LBL_EMPLOYEE'), dataType: 'string', width: '180px' },\n { dataField: 'filled', caption: $translate.instant('TXT_LBL_FILLED'), dataType: 'number', width: '70px' },\n { dataField: 'capacity', caption: $translate.instant('TXT_LBL_CAPACITY'), dataType: 'number', width: '70px' },\n {\r\n dataField: 'waitQueue',\n caption: $translate.instant('TXT_LBL_WAIT_QUEUE'),\n dataType: 'number',\r\n calculateCellValue: function (rowData) {\r\n return rowData.waitQueue.length;\r\n },\r\n width: '70px'\r\n },\n { dataField: 'notes', caption: $translate.instant('TXT_NOTE'), dataType: 'string' }\n ],\r\n shouldDisableAdd: function () { return !$scope.selectedCourse; },\r\n onRowPrepared: function (e) {\r\n if (e.rowType == \"data\") {\r\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.recurrenceType === 4) {\r\n e.rowElement.addClass('text-muted');\r\n }\r\n }\r\n },\r\n customCommands: [{\r\n text: $translate.instant('TXT_LBL_NEW_LESSON'),\r\n isVisible: function () {\r\n return securitySvc.isInRole('CourseSchedule.Insert');\r\n },\r\n callback: function () {\r\n newLesson();\r\n }\r\n }, {\r\n text: $translate.instant('TXT_LBL_NEW_RECURRENCE'),\r\n isVisible: function () {\r\n return securitySvc.isInRole('CourseSchedule.Insert');\r\n },\r\n callback: function () {\r\n newRecurrence();\r\n }\r\n }, {\r\n text: $translate.instant('TXT_MENU_EDIT'),\r\n isVisible: function (event) {\r\n return !!event && event.recurrenceType !== 4 && securitySvc.isInRole('CourseSchedule.Update');\r\n },\r\n callback: function (event) {\r\n changeLesson(event);\r\n }\r\n }, {\r\n text: $translate.instant('TXT_LBL_CHANGE_RECURRENCE'),\r\n isVisible: function (event) {\r\n return !!event && event.recurrenceType !== 0 && event.recurrenceType !== 4 && securitySvc.isInRole('CourseSchedule.Update');\r\n },\r\n callback: function (event) {\r\n changeRecurrence(event);\r\n }\r\n }, {\r\n text: $translate.instant('TXT_MENU_DELETE'),\r\n isVisible: function (event) {\r\n return !!event && event.recurrenceType !== 4 && securitySvc.isInRole('CourseSchedule.Delete');\r\n },\r\n callback: function (event) {\r\n deleteEvent(event);\r\n }\r\n }, {\r\n text: $translate.instant('TXT_RESTORE'),\r\n isVisible: function (event) {\r\n return !!event && event.recurrenceType === 4 && securitySvc.isInRole('CourseSchedule.Delete');\r\n },\r\n callback: function (event) {\r\n restoreEvent(event);\r\n }\r\n }]\r\n }\n\n \n $scope.selectedSchedule = {};\n\n $scope.onRowSelected = function (data) {\n $scope.selectedSchedule = data;\n }\n\n $scope.onRowAdd = function () {\n var courseName = getSelectedCourseName();\r\n\n messageBoxSvc.showMessageDlg({\r\n title: 'TXT_TITLE_QUESTION',\n message: $translate.instant('TXT_TEXT_CREATE_LESSON_OR_RECURRENCE').f(courseName),\n buttons: [{\r\n text: 'TXT_BTN_CANCEL'\r\n }, {\r\n text: 'TXT_BTN_CREATE_SERIES',\n callback: function () {\r\n newRecurrence();\r\n }\r\n }, {\r\n text: 'TXT_BTN_SINGLE_LESSON',\n callback: function () {\r\n newLesson();\r\n }\r\n }]\r\n });\n }\n\n var courseDetailDialogPromise = $modal({\r\n templateUrl: 'schedule/schedule-course-detail.html',\n show: false,\n scope: $scope.$new()\r\n });\n}]);\n","'use strict';\r\n\r\nwbApp.controller('CoursesStudentsCtrl', ['$scope', '$q', '$modal', '$window', '$translate', '$filter', 'securitySvc', 'tenantSettingSvc', 'courseRegistrationSvc', 'gridSortSvc',\r\nfunction ($scope, $q, $modal, $window, $translate, $filter, securitySvc, tenantSettingSvc, courseRegistrationSvc, gridSortSvc) {\r\n\r\n $scope.tenantSettings = tenantSettingSvc.settings;\r\n\r\n $scope.selectedCourse = null;\r\n var isActive = false;\r\n var loaded = false;\r\n $scope.courseRegistrations = [];\r\n\r\n function onCourseScheduleChanged() {\r\n $scope.$emit('onCourseShouldRefresh', { course: $scope.selectedCourse });\r\n }\r\n\r\n $scope.$on('selectedCourseChanged', function (e, courseInd) {\r\n if (courseInd.course) {\r\n if (isActive) {\r\n if ($scope.selectedCourse !== courseInd.course || courseInd.refresh) {\r\n $scope.courseRegistrations = courseRegistrationSvc.getAllForCourse(courseInd.course.courseID);\r\n }\r\n loaded = true;\r\n } else {\r\n loaded = false;\r\n }\r\n } else {\r\n $scope.courseRegistrations = [];\r\n }\r\n $scope.selectedCourse = courseInd.course;\r\n });\r\n\r\n $scope.$on('activeTabChanged', function (e, data) {\r\n if (data.activeTab === 1) {\r\n if (!isActive) {\r\n isActive = true;\r\n if (!loaded && $scope.selectedCourse) {\r\n $scope.courseRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedCourse.courseID);\r\n loaded = true;\r\n }\r\n }\r\n } else {\r\n isActive = false;\r\n }\r\n });\r\n\r\n $scope.courseRegistrationsGridSettings = {\r\n name: 'courseRegistrations',\r\n columns: [\r\n {\r\n dataField: 'studentFullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', width: '190px', sortOrder: 'asc',\r\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName(data, 'studentName', 'studentSurname', 'studentMiddleName') }\r\n },\r\n { dataField: 'studentAge', caption: $translate.instant(\"TXT_LBL_AGE\"), dataType: 'string', width: '70px' },\r\n { dataField: 'studentBirthday', caption: $translate.instant(\"TXT_LAB_BIRTHDAY\"), dataType: 'date', format: { date: 'short' }, width: '70px', visible: false },\r\n {\r\n dataField: 'contactPhone',\r\n caption: $translate.instant('TXT_LBL_PHONE'),\r\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('phone')(rowData.contactPhone);\r\n },\r\n width: '120px'\r\n },\r\n { dataField: 'contactEmail', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '190px' },\r\n { dataField: 'notes', caption: $translate.instant('TXT_NOTE'), dataType: 'string' },\r\n { dataField: 'paymentsSum', caption: $translate.instant('TXT_LBL_PAYMENTS'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\r\n { dataField: 'registrationDate', caption: $translate.instant('TXT_SEC_CLIENT_COURSE_REGISTRATION'), dataType: 'date', format: { date: 'short' }, width: '80px' },\r\n { dataField: 'notificationSent', caption: $translate.instant('TXT_LBL_NOTIFICATION_SENT'), dataType: 'boolean', width: '40px' },\r\n ],\r\n shouldDisableAdd: function () { return !$scope.selectedCourse; },\r\n onRowPrepared: function (e) {\r\n if (e.rowType == \"data\") {\r\n var data = e.component.getKeyByRowIndex(e.rowIndex);\r\n if (data.noFurtherRegisteredAttendance) {\r\n e.rowElement.addClass('text-muted');\r\n }\r\n }\r\n },\r\n onCellPrepared: function (e) {\r\n if (e.rowType === \"data\" && e.columnIndex == 2) {\r\n e.cellElement.mousemove(function () {\r\n if (!!e.data.studentBirthday) {\r\n e.cellElement.attr('title', $translate.instant(\"TXT_LAB_BIRTHDAY\") + \": \" + $filter('date')(e.data.studentBirthday, 'shortDate'));\r\n }\r\n });\r\n }\r\n },\r\n customCommands: [{\r\n text: $translate.instant('TXT_MENU_CREATE_PAYMENT'),\n isVisible: function (row) { return (row.arrear > 0) && securitySvc.isInRole('Payment.Insert'); },\n callback: function (row) { addPayment(row); }\r\n },{\r\n text: $translate.instant('TXT_MENU_PRINT_INVOICE'),\r\n isVisible: function () { return securitySvc.isInRole('Reports') && securitySvc.isInRole('CourseRegistration.PrintInvoice'); },\r\n callback: function (data) { onPrintInvoice(data.courseRegistrationID); }\r\n }, {\r\n text: $translate.instant('TXT_MENU_PRINT_APPLICATION_FORM'),\r\n isVisible: function () { return securitySvc.isInRole('Reports') && securitySvc.isInRole('CourseRegistration.PrintApplicationForm'); },\r\n callback: function (data) { onPrintApplicationForm(data.courseRegistrationID); }\r\n }, {\r\n text: $translate.instant('TXT_MENU_PRINT_INFO_CARD'),\r\n isVisible: function () { return securitySvc.isInRole('Course.InfoCard') && securitySvc.isInRole('Reports'); },\r\n callback: function (data) { onPrintInfoCard(data.courseID, data.studentID); }\r\n }, {\r\n text: $translate.instant('TXT_MENU_RESEND_COURSE_REGISTRATION_NOTIFICATION'),\r\n isVisible: function () { return securitySvc.isInRole('CourseRegistration'); },\r\n callback: function (data) {\r\n courseRegistrationSvc.sendRegistrationNotification(data.courseRegistrationID)\r\n .then(function () {\r\n data.notificationSent = true;\r\n });\r\n }\r\n }]\r\n }\r\n\r\n function onPrintInfoCard(courseID, studentID) {\r\n $window.open('/Admin/Report/InfoCard?CourseID=' + courseID + '&studentID=' + studentID,\r\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\r\n }\r\n\r\n function onPrintInvoice(courseRegistrationID) {\r\n $window.open('/Admin/Report/Invoice?ReportID=' + courseRegistrationID + '&ReportIDType=0',\r\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\r\n }\r\n\r\n function onPrintApplicationForm(courseRegistrationID) {\r\n $window.open('/Admin/Report/ApplicationForm?CourseRegistrationID=' + courseRegistrationID,\r\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\r\n }\r\n\r\n\r\n if ($scope.tenantSettings.showArrearInsteadOfPayments) {\r\n var column = _.find($scope.courseRegistrationsGridSettings.columns, { dataField: 'paymentsSum' });\r\n if (column) {\r\n column.dataField = 'arrear';\r\n column.caption = $translate.instant('TXT_LBL_ARREAR')\r\n }\r\n }\r\n \r\n $scope.selectedRegistration = {};\r\n\r\n $scope.onRowSelected = function (data) {\r\n $scope.selectedRegistration = data;\r\n }\r\n\r\n $scope.onRowEdit = function (data) {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.course = $scope.selectedCourse;\r\n detailDialogPromise.$scope.model = new webooker_courses_models.CourseRegistration(data);\r\n detailDialogPromise.$scope.onAfterSuccessSave = function () {\r\n $scope.courseRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedCourse.courseID);\r\n onCourseScheduleChanged();\r\n }\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowAdd = function () {\r\n\r\n $q.all([detailDialogPromise.$promise, courseRegistrationSvc.createNew($scope.selectedCourse, false)])\r\n .then(function (data) {\r\n var courseRegistration = data[1];\r\n detailDialogPromise.$scope.course = $scope.selectedCourse;\r\n detailDialogPromise.$scope.model = courseRegistration;\r\n detailDialogPromise.$scope.onAfterSuccessSave = function () {\r\n $scope.courseRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedCourse.courseID);\r\n onCourseScheduleChanged();\r\n }\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowDelete = function (data) {\r\n courseRegistrationSvc.remove(\r\n data,\r\n 1, /* SubjectCategory.RegularCourses */\r\n function () {\r\n $scope.courseRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedCourse.courseID);\r\n onCourseScheduleChanged();\r\n });\r\n }\r\n\r\n var detailDialogPromise = $modal({\r\n templateUrl: 'courses/courses/courses-detail-tabs/students-detail.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n\r\n var addPaymentPromise = $modal({\r\n templateUrl: 'finance/payments/payments-detail.html',\n show: false,\n scope: $scope.$new()\r\n });\n\n function addPayment(data) {\r\n addPaymentPromise.$scope.isAddDuePayment = true;\n addPaymentPromise.$scope.paymentDetail = {\r\n paymentID: 0,\n invoiceForType: 1,\n invoiceID: data.invoiceID,\n amount: data.arrear,\n selectedDate: moment().toDate(),\r\n };\n\n addPaymentPromise.$promise.then(function () {\r\n addPaymentPromise.$scope.detailError = null;\n addPaymentPromise.$scope.onSave = function () {\r\n $scope.courseRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedCourse.courseID); \r\n }\n\n addPaymentPromise.show();\r\n });\r\n }\r\n}]);\r\n","'use strict';\n\nwbApp.controller('CoursesStudentsDetailCtrl', ['$scope', '$modal', 'securitySvc', 'messageBoxSvc', 'courseRegistrationSvc', 'tenantSettingSvc', 'leadSvc',\n '$translate', 'courseSvc', '$filter', 'localStorageService',\nfunction ($scope, $modal, securitySvc, messageBoxSvc, courseRegistrationSvc, tenantSettingSvc, leadSvc, $translate, courseSvc, $filter, localStorageService) {\n\n $scope.allowDiscounts = tenantSettingSvc.settings.allowDiscounts;\n $scope.calculatedDueDate = { dueDate: null };\n $scope.modelOrig = angular.copy($scope.model);\n $scope.registeredAttendance = [];\n\n $scope.isReady = false;\n $scope.isBusy = false;\n\n $scope.popover = {\n fromDate: null,\n toDate: null,\n okClick: function () {\n var fromDateM = moment($scope.popover.fromDate).startOf('day');\n var toDateM = moment($scope.popover.toDate).endOf('day');\n\n angular.forEach($scope.registeredAttendance, function (key, value) {\n var lessonStartDate = moment(key.startDate);\n if (fromDateM.isSameOrBefore(lessonStartDate) &&\n toDateM.isSameOrAfter(lessonStartDate)) {\n // in range\n if (!key.isDisabled) {\n key.isRegistered = true;\n }\n } else {\n // out of range\n if (!key.isDisabled) {\n key.isRegistered = false;\n }\n }\n }); \n }\n }\n \n $scope.onRegistrationDateChange = function(registrationDate) {\n if ($scope.allowDiscounts) {\n courseRegistrationSvc.calcExpectedDueDate($scope.course.courseID, registrationDate).$promise.then( function(data) {\n $scope.calculatedDueDate.dueDate = data.dueDate;\n });\n } \n }\n\n function extendModel(course) {\n\n setIsBusy(true);\n\n courseRegistrationSvc.initializeModel($scope.model, course, false, true)\n .then(function () {\n $scope.modelOrig = angular.copy($scope.model);\n $scope.registeredAttendance = $scope.model.registeredAttendance;\n\n if ($scope.allowDiscounts) {\n courseRegistrationSvc.calcExpectedDueDate($scope.course.courseID, $scope.model.registrationDate).$promise.then( function(data) {\n $scope.calculatedDueDate.dueDate = data.dueDate;\n });\n }\n\n setIsBusy(false);\n },\n function (errorResult) {\n $scope.registeredAttendance = [];\n $scope.detailError = errorResult;\n\n setIsBusy(false);\n });\n }\n\n function setIsBusy(isBusy) {\n $scope.isBusy = isBusy;\n $scope.isReady = !isBusy;\n angular.forEach($scope.detailTabs, function (tab) {\n tab.disabled = isBusy;\n });\n }\n\n\n extendModel($scope.course);\n\n $scope.onStudentChange = function (studentID) {\n extendModel($scope.course);\n }\n\n $scope.isSaving = false;\n\n $scope.onDataRangeChanged = function () {\n\n }\n\n $scope.onDetailCanceled = function () {\n $scope.$hide();\n if ($scope.onAfterDialogCancel) {\n $scope.onAfterDialogCancel();\n } \n }\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n function saveLead(cr) {\n if (!!selectedLead) {\n if (securitySvc.isInRole('Leads') && securitySvc.isInRole('Leads.Update')) {\n\n selectedLead.conversionType = 1; // CourseRegistraction\n selectedLead.conversionReferenceId = cr.courseRegistrationID;\n selectedLead.conversionDateUtc = moment().toDate();\n\n var courseFullName = courseSvc.getCourseFullName($scope.course);\n var firstLesson = !!$scope.course.firstLesson\n ? ' (' + $filter('date')($scope.course.firstLesson, 'EEE HH:mm').toUpperCase() + ')'\n : '';\n selectedLead.conversionText = courseFullName + firstLesson;\n selectedLead.status = 1; // Converted\n\n if (!selectedLead.notes || selectedLead.notes.length == 0) {\n selectedLead.notes = [];\n }\n\n var user = securitySvc.loggedInUser();\n\n selectedLead.notes.push({\n text: $translate.instant('TXT_TITLE_REGISTER_ON_COURSE') + ': ' + selectedLead.conversionText,\n updatedAtUtc: moment().toDate(),\n updatedByUserId: user.userID + \"\",\n updatedByName: user.fullName\n });\n\n leadSvc.update(selectedLead);\n }\n }\n }\n\n function success(cr) {\n saveLead(cr);\n $scope.onAfterSuccessSave(cr);\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n function cancel() {\n $scope.isSaving = false;\n }\n\n var selectedLead = null;\n\n function confirmUpdate(updateInvoice) {\n messageBoxSvc.showConfirmClientNotification({\n userSetting: ['confimNotificationCourseStudent'],\n showSendSmsNotification: false,\n callback: function (notificationConfig) {\n courseRegistrationSvc.update(\n model,\n notificationConfig,\n 1, /* SubjectCategory.RegularCourses */\n updateInvoice,\n success,\n error);\n }\n });\n }\n\n if (!$scope.ignoreLeadAssignment && // Do not search for leads during course registration save\n !model.courseRegistrationID &&\n securitySvc.isInRole('Leads') &&\n securitySvc.isInRole('Leads.Update')) {\n leadSvc.getAllByStatusAndStudent(0, model.studentID).$promise.then(function (leads) {\n if (!!leads && leads.length != 0) {\n // Leads selection dialog\n leadSelectionDlg.$promise.then(function () {\n leadSelectionDlg.$scope.leads = leads;\n leadSelectionDlg.$scope.onLeadSelected = function (lead) {\n selectedLead = lead;\n saveImpl();\n };\n leadSelectionDlg.show();\n });\n } else {\n selectedLead = null;\n saveImpl();\n }\n });\n } else {\n saveImpl();\n }\n\n function saveImpl()\n {\n $scope.saveManualAdjustmentTextToLocalStorage(model.invoice);\n\n if (!model.courseRegistrationID) {\n messageBoxSvc.showConfirmClientNotification({\n userSetting: ['confimNotificationCourseStudent'],\n showSendSmsNotification: false,\n callback: function (notificationConfig) {\n courseRegistrationSvc.insert(\n model,\n notificationConfig,\n 1, /* SubjectCategory.RegularCourses */\n success,\n error);\n }\n });\n } else {\n if (model.invoice.isModified) {\n // Invoice has changed, ask user for confirmation\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: 'TXT_TEXT_INVOICE_HAS_CHANGED',\n buttons: [{\n text: 'TXT_BTN_CANCEL',\n callback: cancel\n }, {\n text: 'TXT_BTN_NO_INVOICE_CHANGES',\n callback: function () { confirmUpdate(false); }\n }, {\n text: 'TXT_BTN_CREATE_NEW_INVOICE',\n callback: function () { confirmUpdate(true); }\n }]\n });\n } else {\n courseRegistrationSvc.update(\n model,\n {\n sendEmailNotification: false,\n sendSmsNotification: false\n },\n 1, /* SubjectCategory.RegularCourses */\n false,\n success,\n error);\n }\n }\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig) && !!$scope.modelOrig.courseRegistrationID &&\n (!!$scope.model.invoice && !$scope.model.invoice.isModified);\n };\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: 'courses/courses/courses-detail-tabs/students-detail-main-tab.html',\n disabled: true,\n }, {\n title: 'TXT_SEC_COMPENSATION_SUMMARY',\n template: 'courses/courses/courses-detail-tabs/students-detail-compensations-tab.html',\n disabled: true,\n }, {\n title: 'TXT_LBL_ATTENDANCE',\n template: 'courses/courses/courses-detail-tabs/students-detail-attendance-tab.html',\n disabled: true,\n }, {\n title: 'TXT_PRICE_TAB',\n template: 'courses/courses/courses-detail-tabs/students-detail-price-tab.html',\n disabled: true,\n }, {\n title: 'TXT_LAB_HEALTH',\n template: 'courses/courses/courses-detail-tabs/students-detail-health-tab.html',\n disabled: true,\n }, {\n title: 'TXT_LBL_PARENT',\n template: 'courses/courses/courses-detail-tabs/students-detail-parent-tab.html',\n disabled: true,\n }];\n\n if (!securitySvc.isInRole('CourseRegistration.Compensations')) {\n $scope.detailTabs.splice(1, 1);\n }\n\n $scope.detailTabs.activeTab = 0;\n\n\n $scope.attendanceFilterOptions = {\n filterText: \"\"\n };\n\n $scope.attendanceGridOptions = {\n sortInfo: { fields: ['startDate'], directions: ['asc'] },\n columnDefs: [{ field: 'startDate', displayName: \"TXT_LBL_START_DATE\", cellFilter: 'date:dd.MM.yy EEE HH:mm', width: '130px' },\n { field: 'endDate', displayName: \"TXT_LBL_END_DATE\", cellFilter: 'date:HH:mm', width: '60px' },\n { field: 'courseAttendanceType', displayName: \"TXT_COL_ATTENDANCE_TYPE\", cellFilter: 'attendanceType', width: '110px' },\n { field: 'courseAttendanceStatus', displayName: \"TXT_COL_ATTENDANCE_STATUS\", cellFilter: 'attendanceStatus', width: '110px' },\n { field: 'attendanceNotes', displayName: \"TXT_NOTE\" }\n ],\n noCommandColumn: true,\n multiSelect: true,\n selectedField: 'isRegistered',\n disabledField: 'isDisabled',\n pageSize: 50\n };\n\n var amortizationScheduleDlg = $modal({\n templateUrl: 'courses/courses/courses-detail-tabs/students-amortization-schedule.html',\n show: false,\n backdrop: true,\n scope: $scope.$new()\n });\n\n var leadSelectionDlg = $modal({\n templateUrl: 'leads/leads/lead-select-open-leads-dialog.html',\n show: false,\n backdrop: true,\n scope: $scope.$new()\n });\n\n\n $scope.showAmortizationSchedule = function (studentRegistration) {\n amortizationScheduleDlg.$promise.then(function () {\n amortizationScheduleDlg.$scope.model = studentRegistration;\n amortizationScheduleDlg.$scope.amortizationScheduleTemplates = studentRegistration.invoice.course.amortizationSchedules;\n amortizationScheduleDlg.show();\n });\n }\n\n $scope.saveManualAdjustmentTextToLocalStorage = function (invoice) {\n if (localStorageService.isSupported) {\n var manualAdjustmentLine = _.find(invoice.lines, function (line) {\n return line.lineType == \"ManualAdjustment\" && line.runtimeManualAdjustmentType == 1;\n });\n\n if (!!manualAdjustmentLine) {\n localStorageService.set('manualAdjustmentDiscountLineName', manualAdjustmentLine.name);\n localStorageService.set('manualAdjustmentDiscountLinePercent', manualAdjustmentLine.percent);\n }\n }\n }\n\n $scope.addInvoiceLine = function (manualAdjustmentLineType) {\n var newLine = $scope.model.invoice.addManualAdjustmentLine(manualAdjustmentLineType);\n if (manualAdjustmentLineType == 1) {\n\n if (localStorageService.isSupported) {\n newLine.name = localStorageService.get('manualAdjustmentDiscountLineName') || $translate.instant('TXT_DISCOUNT');\n newLine.percent = localStorageService.get('manualAdjustmentDiscountLinePercent') || 0;\n } else {\n newLine.name = $translate.instant('TXT_DISCOUNT');\n }\n }\n }\n\n $scope.removeInvoiceLine = function (invoice, index) {\n invoice.removeManualAdjustmentLine(index);\n }\n\n $scope.addManualAdjustmentLineDropdown = [\n {\n text: $translate.instant('TXT_ADD_LINE_DISCOUNT_IN_PERCENT'),\n click: 'addInvoiceLine(1)'\n },\n {\n text: $translate.instant('TXT_ADD_LINE_EMPTY'),\n click: 'addInvoiceLine(0)'\n }\n ];\n\n\n}]);\n","'use strict';\n\nwbApp.controller('OnlineMeetingsCtrl', ['$scope', '$modal', '$translate', 'onlineMeetingsSvc', 'tenantInfo', 'messageBoxSvc', 'securitySvc',\nfunction ($scope, $modal, $translate, onlineMeetingsSvc, tenantInfo, messageBoxSvc, securitySvc) {\n\n $scope.fromDate = moment().subtract(5, 'day').startOf('day');\n $scope.toDate = moment().add(1, 'day').startOf('day');\n $scope.onlineMeetings = [];\n\n $scope.$on('refreshData', function (e, data) {\n refreshData();\n });\n\n $scope.onDataRangeChanged = function () {\n refreshData();\n }\n\n function refreshData()\n {\n $scope.onlineMeetings = onlineMeetingsSvc.getInfoByDateRange($scope.fromDate, $scope.toDate);\n }\n\n refreshData();\n\n $scope.gridSettings = {\n name: 'onlineMeetings',\n keyExpr: 'id',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n {\n dataField: 'scheduledStartTime',\n caption: $translate.instant('TXT_MENU_SCHEDULE'),\n dataType: 'date',\n format: { type: 'shortDateShortTime' },\n width: '120px',\n sortOrder: 'desc'\n },\n { dataField: 'employeeFullName', caption: $translate.instant('TXT_LBL_EMPLOYEE'), dataType: 'string', width: '160px' },\n { dataField: 'topic', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string' },\n { dataField: 'hasRecordings', caption: $translate.instant('TXT_LBL_RECORDINGS'), dataType: 'boolean', width: '90px' },\n { dataField: 'lengthInMinutes', caption: $translate.instant('TXT_LBL_LESSON_LENGTH'), dataType: 'number', width: '90px' },\n {\n dataField: 'status',\n caption: $translate.instant(\"TXT_LBL_STATE\"),\n dataType: 'number',\n width: '140px',\n calculateCellValue: function (rowData) {\n switch (rowData.status)\n {\n case 0:\n return $translate.instant('TXT_ONLINE_MEETING_STATE_NOT_STARTED');\n case 1:\n return $translate.instant('TXT_ONLINE_MEETING_STATE_IN_PROGRESS');\n case 2:\n return $translate.instant('TXT_ONLINE_MEETING_STATE_FINISHED');\n }\n return $translate.instant('TXT_ONLINE_MEETING_STATE_NOT_STARTED');\n },\n width: '110px'\n },\n ],\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.isDeleted) {\n e.rowElement.addClass('text-muted');\n }\n }\n },\n customCommands: [{\n text: $translate.instant('TXT_DIRECT_JOIN_LINK'),\n isVisible: function (data) { return securitySvc.isInRole('OnlineLessons'); },\n callback: function (data) { onShowDirectJoinLink(data.joinUrl); }\n }]\n }\n\n $scope.onRowSelected = function (data) { \n $scope.$broadcast('selectedOnlineMeetingChanged', { meeting: data });\n }\n\n function onShowDirectJoinLink(joinUrl) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_DIRECT_JOIN_LINK',\n message: '
{0}'.f(joinUrl),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n }\n\n $scope.tabs = [\n {\n title: 'TXT_LBL_RECORDINGS',\n template: \"courses/online-meetings/online-meetings-tabs/recordings.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n \n\n\n\n}]);\n","'use strict';\n\nwbApp.controller('OnlineMeetingsRecordingsCtrl', ['$scope', '$q', '$modal', '$window', '$translate', 'onlineMeetingsSvc',\nfunction ($scope, $q, $modal, $window, $translate, onlineMeetingsSvc) {\n\n $scope.onlineMeetingsRecordings = [];\n\n $scope.$on('selectedOnlineMeetingChanged', function (e, onlineMeetingInd) {\n if (!!onlineMeetingInd) {\n onlineMeetingsSvc.getById(onlineMeetingInd.meeting.id).$promise.then(function (onlineMeetingDetail) {\n $scope.onlineMeetingsRecordings = onlineMeetingDetail.recordings;\n })\n } else {\n $scope.onlineMeetingsRecordings = [];\n }\n });\n\n $scope.onlineMeetingsRecordingsGridSettings = {\n name: 'onlineMeetingsRecordings',\n columns: [\n {\n dataField: 'url',\n caption: $translate.instant('TXT_HUMAN_NAME'),\n dataType: 'string',\n cellTemplate: function (cellElement, cellInfo) {\n $('' + cellInfo.data.url + '').appendTo(cellElement);\n },\n },\n { dataField: 'startedAtUtc', caption: $translate.instant('TXT_LBL_START_DATE'), dataType: 'datetime', format: { datetime: 'short' }, width: '120px', sortOrder: 'asc' },\n { dataField: 'endedAteUtc', caption: $translate.instant(\"TXT_LBL_END_DATE\"), dataType: 'datetime', format: { datetime: 'short' }, width: '120px' },\n\n ],\n }\n\n}]);\n","wbApp.controller('StudentAmortizationScheduleCtrl', ['$scope', 'coursePriceSvc',\n function ($scope, coursePriceSvc) {\n\n $scope.amortizationSchedules = coursePriceSvc.calculateAmortizationSchedules(\n $scope.model.invoice.total,\n $scope.model.registrationDate || moment().toDate(),\n $scope.amortizationScheduleTemplates);\n }]);\n","'use strict';\n\nwbApp.controller('SubjectsCtrl', ['$scope', '$modal', 'subjectsSvc', 'tenantInfo',\nfunction ($scope, $modal, subjectsSvc, tenantInfo) {\n\n $scope.isFranchise = !!_.find(tenantInfo.franchiseCentrals, { isActive: true, supportSubjectLicenses: true });\n $scope.isFranchiseCentral = tenantInfo.isFranchiseCentral;\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n if ($scope.isFranchise) {\n $scope.gridOptions = {\n sortInfo: { fields: ['name'], directions: ['dsc'] },\n columnDefs: [{ field: 'franchiseCentralTenantID', displayName: \"TXT_LBL_FRANCHISE\", cellFilter: 'franchiseCentralFlt', width: '90px' },\n { field: 'name', displayName: \"TXT_LBL_NAME\", sort: 'locale', width: '270px' }, \n { field: 'description', displayName: \"TXT_LBL_DESCRIPTION\", sort: 'locale' }\n ],\n disabledField: 'franchiseCentralTenantID',\n disabledAreSelectable: true\n };\n } else {\n $scope.gridOptions = {\n sortInfo: { fields: ['name'], directions: ['dsc'] },\n columnDefs: [{ field: 'name', displayName: \"TXT_LBL_NAME\", sort: 'locale', width: '270px' },\n { field: 'description', displayName: \"TXT_LBL_DESCRIPTION\", sort: 'locale' }\n ],\n disabledField: 'franchiseCentralTenantID',\n disabledAreSelectable: true\n };\n }\n\n function setSelectedSubject(subject) {\n $scope.selectedSubject = subject;\n }\n\n $scope.$on('refreshData', function (e, data) {\n $scope.subjects = subjectsSvc.getAllForCoursesAsync(true);\n setSelectedSubject(null);\n });\n\n $scope.subjects = subjectsSvc.getAllForCoursesAsync(true);\n\n $scope.selectedSubject = {};\n\n $scope.onRowSelected = function (data) {\n setSelectedSubject(data);\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = subjectsSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n subjectsSvc.remove(data);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"courses/subjects-detail-tabs/detail.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'courses/subjects-detail.html',\n show: false, \n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('SubjectsDetailCtrl', ['$scope', 'subjectsSvc', 'tenantInfo', 'tenantSettingSvc',\nfunction ($scope, subjectsSvc, tenantInfo, tenantSettingSvc) {\n\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\n \n $scope.modelOrig = angular.copy($scope.model);\n\n \n $scope.isFranchiseSubject = function () {\n return (!!$scope.model.franchiseSubjectID || !!$scope.model.franchiseCentralTenantID) && !tenantInfo.isFranchiseCentral;\n }\n\n $scope.isAnyFranchiesActive = !!_.find(tenantInfo.franchiseCentrals, { isActive: true, supportSubjectLicenses: true });\n\n $scope.isFranchiseCentral = tenantInfo.isFranchiseCentral;\n\n $scope.isFranchiesActive = function () {\n return !!_.find(tenantInfo.franchiseCentrals, { tenantID: $scope.model.franchiseCentralTenantID, isActive: true });\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onSubjectDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (!data.id) {\n subjectsSvc.insert(data, success, error);\n } else {\n subjectsSvc.update(data, success, error);\n }\n\n function success() {\n $scope.$hide();\n }\n\n function error(data) {\n $scope.detailError = data;\n $scope.isSaving = false;\n }\n }\n\n $scope.onFranchiseCentralChange = function (franchiseCentralID) {\n if (!franchiseCentralID) {\n $scope.model.franchiseCentralTenantID = null;\n $scope.model.franchiseSubjectID = null;\n }\n }\n\n $scope.onFranchiseSubjectChange = function (franchiseSubjectID) {\n if (franchiseSubjectID) {\n subjectsSvc.getFranchiseCentralSubject(\n $scope.model.franchiseCentralTenantID,\n franchiseSubjectID)\n .then(function (subject) {\n if (subject) {\n $scope.model.name = subject.name;\n $scope.model.description = subject.description;\n } else {\n $scope.model.name = '';\n $scope.model.description = null;\n }\n });\n } else {\n $scope.model.name = '';\n $scope.model.description = null;\n }\n }\n\n}]);\n","wbApp.directive('wbAcceptCompensationsFromEdit', ['compensationGroupSvc',\n function (compensationGroupSvc) {\n\n return {\n restrict: 'A',\n require: 'ngModel',\n template: '
' +\n '
' +\n ' ' +\n ' ' +\n '
' +\n '
',\n replace: true,\n link: function (scope, elm, attrs, ctrl) {\n var compensationGroupsRaw = compensationGroupSvc.getLookupActiveAsync(ctrl.$viewValue);\n var initialized = false;\n\n scope.compensationGroups = [];\n\n ctrl.$render = function () {\n\n if (!initialized) {\n compensationGroupsRaw = compensationGroupSvc.getLookupActiveAsync(ctrl.$viewValue);\n }\n\n compensationGroupsRaw.$promise.then(function () {\n\n var lookup = ctrl.$viewValue;\n\n var models = _.map(compensationGroupsRaw, function (cg) {\n return {\n id: cg.id,\n name: cg.name,\n active: cg.active,\n isDeleted: cg.isDeleted,\n included: _.indexOf(lookup, cg.id) !== -1\n };\n });\n\n initialized = true;\n scope.compensationGroups.length = 0;\n scope.compensationGroups.push.apply(scope.compensationGroups, models);\n\n });\n };\n\n scope.$watch('compensationGroups', function (newValue) {\n if (!initialized) {\n return;\n }\n\n var included = _.filter(newValue, { included: true });\n var newViewValue = _.map(included, function (i) {\n return i.id;\n })\n\n ctrl.$setViewValue(newViewValue);\n }, true);\n }\n }\n }]);\n\n\n//
\n//
\n \n// \n// \n \n//
\n//
","'use strict';\n\nwbApp.directive('wbContentInfoAccessTimeBaselineCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n ctrl.$parsers.unshift(function (viewValue) {\n return Number(viewValue);\n });\n\n ctrl.$formatters.unshift(function (value) {\n return value + '';\n });\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n data: [\n { id: 0, text: 'TXT_ACCESS_TIME_BASELINE_AFTER_PAYMENT' },\n { id: 1, text: 'TXT_ACCESS_TIME_BASELINE_AFTER_REGISTRACTION' },\n { id: 2, text: 'TXT_ACCESS_TIME_BASELINE_AFTER_COURSE_STARTS' }\n ]\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);\n","'use strict';\n\nwbApp.directive('wbContentInfoAccessTimeTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n ctrl.$parsers.unshift(function (viewValue) {\n return Number(viewValue);\n });\n\n ctrl.$formatters.unshift(function (value) {\n return value + '';\n });\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n data: [\n { id: 0, text: 'TXT_ACCESS_TIME_TYPE_NO_RESTRICTIONS' },\n { id: 1, text: 'TXT_ACCESS_TIME_TYPE_DAYS_FROM_BASELINE' },\n { id: 2, text: 'TXT_ACCESS_TIME_TYPE_AT_SPECIFIC_DATE' }\n ]\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);\n","'use strict';\n\nwbApp.directive('wbContentInfoAccessTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n ctrl.$parsers.unshift(function (viewValue) {\n return Number(viewValue);\n });\n\n ctrl.$formatters.unshift(function (value) {\n return value + '';\n });\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n data: [\n { id: 0, text: 'TXT_ACCESS_TYPE_ACCESS_TO_VIEW' },\n { id: 1, text: 'TXT_ACCESS_TYPE_ACCESS_TO_DOWNLOAD' }\n ]\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);\n","wbApp.directive('wbFranchiseCentralSubjectsCombo', ['$timeout', '$translate', 'subjectsSvc',\n function ($timeout, $translate, subjectsSvc) {\n function formatResult(subject) {\n if (!subject) { return; }\n\n return subject.name;\n\n //return \"
\" +\n // \"
\" + subject.name + \"
\" +\n // \"
\" + subject.description || '' + \"
\" +\n // \"
\";\n }\n\n function formatSelection(subject) {\n return subject.name;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n scope: {\n franchiseCentralTenantId: '=',\n },\n link: function (scope, elm, attrs, ctrl) {\n\n \n var subjects = !!scope.franchiseCentralTenantId\n ? subjectsSvc.getAllFranchiseCentralCourseSubjects(scope.franchiseCentralTenantId, true)\n : [];\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_FRANCHISE_CENTRAL_SUBJECT'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: -1,\n id: function (subject) { return subject.id; },\n data: subjects\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n ctrl.$render = function () {\n if (subjects.$promise) {\n subjects.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n }\n }\n\n scope.$watch('franchiseCentralTenantId', function (newValue) {\n if (!newValue) {\n subjects.length = 0;\n return;\n }\n var newSubjects = subjectsSvc.getAllFranchiseCentralCourseSubjects(newValue);\n newSubjects.$promise.then(function () {\n if (newSubjects !== subjects) {\n subjects.length = 0;\n subjects.push.apply(subjects, newSubjects);\n }\n\n for (var i = 0; i < subjects.length; i++) {\n if (subjects[i].id == ctrl.$viewValue) {\n $(elm).select2('val', subjects[i].id);\n return;\n }\n }\n\n $(elm).select2('val', null);\n ctrl.$setViewValue(null);\n });\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);","wbApp.factory('onlineMeetingsSvc', ['$resource', '$q', 'repositorySvc', 'tenantInfoSvc',\n function ($resource, $q, repositorySvc, tenantInfoSvc) {\n var ZoomMeetings = $resource('/restapi/zoom-meetings', {}, {\n 'getInfoByDateRange': { method: 'GET', url: '/restapi/zoom-meetings/info/range', isArray: true },\n 'getById': { method: 'GET', url: '/restapi/zoom-meetings/:id' },\n });\n\n function getInfoByDateRange(fromDateUtc, toDateUtc) {\n return repositorySvc.customGet('getInfoByDateRange', ZoomMeetings, {\n from: moment(fromDateUtc).startOf('day').toDate(),\n to: moment(toDateUtc).endOf('day').toDate(),\n expanded: 'EmployeePersonalInformation'\n });\n }\n\n function getById(meetingId) {\n return repositorySvc.customGet('getById', ZoomMeetings, { id: meetingId });\n }\n\n return {\n getById: getById,\n getInfoByDateRange: getInfoByDateRange\n }\n }\n]);\n","wbApp.controller('FormResponsePreviewDetailCtrl', ['$scope', '$q', 'formSvc', 'formResponseSvc', 'userSvc', 'studentSvc',\nfunction ($scope, $q, formSvc, formResponseSvc, userSvc, studentSvc) {\n\n // $scope.formId\n \n $scope.adminEdit = !$scope.formResponseId;\n $scope.isSaving = false;\n\n $scope.shouldEnableSaveButton = function () {\n return !!$scope.formResponse.isValid && !$scope.isSaving && !!$scope.enableSave;\n }\n\n $scope.formResponse = {\n id: $scope.formResponseId\n };\n\n function saveResponse(response) {\n\n let responseDto = angular.copy(response);\n responseDto.user = null;\n responseDto.student = null;\n responseDto.showFullEditableUserDetail = null;\n\n formResponseSvc.insert(responseDto).$promise.then(function (success) {\n if (!!$scope.formSaved) {\n $scope.formSaved(success);\n } \n $scope.isSaving = false;\n $scope.$hide();\n },\n function (error) {\n $scope.isSaving = false;\n })\n }\n\n $scope.onSaveClick = function () {\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (($scope.formResponse.showFullEditableUserDetail || $scope.formResponse.showFullEditableStudentDetail) &&\n !$scope.formResponse.isNotRegisteredUser) {\n\n let promises = [];\n\n if (!!$scope.formResponse.user && $scope.formResponse.showFullEditableUserDetail) {\n promises.push(userSvc.update($scope.formResponse.user, null, null, true));\n }\n\n if (!!$scope.formResponse.student && $scope.formResponse.showFullEditableStudentDetail) {\n promises.push(studentSvc.update($scope.formResponse.student, null, null, null, true));\n }\n\n $q.all(promises).then(function() {\n saveResponse($scope.formResponse);\n }, function (error) {\n $scope.isSaving = false;\n $scope.respondedSuccesfully = false;\n $scope.errorDetail = error;\n });\n }\n else{\n saveResponse($scope.formResponse);\n } \n }\n\n}]);\n","wbApp.controller('FormResponsesCtrl', ['$scope', '$modal', '$translate', '$filter', 'formResponseSvc', 'securitySvc', 'gridSortSvc',\nfunction ($scope, $modal, $translate, $filter, formResponseSvc, securitySvc, gridSortSvc) {\n\n $scope.formsResponses = [];\n var selectedForm = null;\n\n var formId = null;\n\n function loadData(formId)\n {\n $scope.formsResponses = [];\n var all = formResponseSvc.getAllByFormId(formId);\n all.then(function (data) {\n $scope.formsResponses = data;\n }, function (error) {\n $scope.formsResponses = [];\n });\n }\n\n $scope.$on('formSelectionChanged', function (e, newlySelectedForm) {\n if (newlySelectedForm) {\n \n if ($scope.formsResponsesGridSettings.gridInstance) {\n $scope.formsResponsesGridSettings.gridInstance.columnOption('referenceNumber', 'visible', newlySelectedForm.formType === 1);\n }\n \n if (!selectedForm || (selectedForm.id !== newlySelectedForm.id)) {\n formId = newlySelectedForm.id;\n loadData(formId);\n }\n }\n else {\n $scope.formsResponses = [];\n }\n\n selectedForm = newlySelectedForm;\n });\n\n $scope.formsResponsesGridSettings = {\n name: 'formsResponses',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'number', visible: false },\n {\n showInColumnChooser: false,\n caption: '',\n dataField: 'isNotRegisteredUser',\n width: '42px',\n alignment: 'center',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: true, name: $translate.instant('TXT_ANONYMOUS_USER') },\n { id: false, name: $translate.instant('TXT_REGISTERED_USER') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n encodeHtml: false,\n calculateSortValue: function (rowData) { return rowData.marker; },\n calculateDisplayValue: function (rowData) {\n if (typeof rowData.isNotRegisteredUser === 'undefined' || rowData.isNotRegisteredUser === null) {\n return \"\";\n } else {\n var icon = !!rowData.isNotRegisteredUser ? 'fa-user-o' : 'fa-user';\n var res = \"\";\n\n return res;\n }\n },\n },\n {\n dataField: 'referenceNumber',\n name: 'referenceNumber',\n caption: $translate.instant('TXT_REFERENCE_NUMBER'), \n dataType: 'string', \n width: '50px',\n visible: false\n }, \n {\n dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', width: '190px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentFullName') }\n },\n {\n dataField: 'userPhone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.userPhone);\n },\n width: '120px'\n },\n { dataField: 'userEmail', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '190px' },\n { dataField: 'studentBirthday', caption: $translate.instant(\"TXT_LBL_BIRTHDAY\"), dataType: 'date', format: { date: 'short' }, width: '80px' },\n {\n dataField: 'userFullName', caption: $translate.instant('TXT_VAL_RCPG_USER'), dataType: 'string', width: '190px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'userFullName') }\n },\n { dataField: 'primaryAnswer', caption: $translate.instant('TXT_LBL_YOUR_ANSWER'), dataType: 'string' },\n { dataField: 'createdAt', caption: $translate.instant(\"TXT_LBL_CREATED_AT\"), dataType: 'date', sortOrder: 'desc', format: { type: 'shortDateShortTime' }, width: '120px' },\n ],\n onEditorPreparing: function (e) {\n if (e.parentType == 'filterRow' && e.dataField == 'isNotRegisteredUser') {\n e.editorOptions.itemTemplate = function (itemData, itemIndex, itemElement) {\n if (itemIndex == 0) {\n return $(\"\");\n } else {\n var icon = itemIndex == 1 ? 'fa-user-o' : 'fa-user';\n var res = \"\";\n\n return res;\n }\n }\n }\n },\n shouldDisableAdd: function () { return !$scope.selectedForm },\n customCommands: [{\n text: $translate.instant('TXT_SHOW_PREVIEW'),\n isVisible: function () { return securitySvc.isInRole('FormsDefinitions') && !!selectedForm; },\n callback: function (data) { $scope.onShowFormPreview(data); }\n }, {\n text: $translate.instant('TXT_PRINT_CONTRACT_TEMPLATE'),\n isVisible: function () { return !!selectedForm && !String.prototype.isNullOrWhitespace(selectedForm.contractTemplateId); },\n callback: function (data) { $scope.onShowContractTemplate(data); }\n }]\n }\n\n $scope.onShowContractTemplate = function(responseInfo) {\n window.open(\"restapi/forms-responses/\" + responseInfo.id + \"/report\", '_blank');\n }\n\n $scope.onShowFormPreview = function (responseInfo) {\n formPreviewPromise.$promise.then(function () {\n formPreviewPromise.$scope.formId = selectedForm.id;\n formPreviewPromise.$scope.formDefinitionRevision = selectedForm.auditEvent.revision !== responseInfo.formDefinitionRevision\n ? responseInfo.formDefinitionRevision\n : null;\n formPreviewPromise.$scope.formResponseId = responseInfo.id;\n formPreviewPromise.$scope.enableSave = true;\n formPreviewPromise.show();\n });\n }\n\n $scope.onAddResponse = function() {\n formPreviewPromise.$promise.then(function () {\n formPreviewPromise.$scope.formId = selectedForm.id;\n formPreviewPromise.$scope.formDefinitionRevision = null;\n formPreviewPromise.$scope.formResponseId = null;\n formPreviewPromise.$scope.enableSave = true;\n formPreviewPromise.$scope.formSaved = function () {\n loadData(formId);\n },\n formPreviewPromise.show();\n });\n }\n\n $scope.onDeleteResponse = function (data) {\n formResponseSvc.remove(data.id).$promise.then(function () {\n loadData(selectedForm.id);\n });\n }\n\n var formPreviewPromise = $modal({\n templateUrl: 'forms/forms-response-preview.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('FormsCtrl', ['$scope', '$q', '$modal', '$translate', 'formSvc', 'securitySvc', 'tenantSettingSvc',\nfunction ($scope, $q, $modal, $translate, formSvc, securitySvc, tenantSettingSvc) {\n\n $scope.tenantSetting = tenantSettingSvc.settings;\n \n function refreshData()\n {\n return $q(function (resolve, reject) {\n let all = formSvc.getAll();\n all.then(function (data) {\n $scope.forms = data;\n setSelectedForm(null);\n resolve();\n }, function (error) {\n $scope.forms = [];\n setSelectedForm(null);\n reject();\n });\n });\n \n }\n\n refreshData();\n\n $scope.$on('refreshData', function (e, data) {\n refreshData();\n });\n\n $scope.gridSettings = {\n name: 'forms',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', sortOrder: 'asc' },\n { dataField: 'isActive', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\n {\n dataField: 'formType',\n caption: $translate.instant('TXT_LBL_FORM_TYPE'),\n dataType: 'string',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_FROM_TYPE_GENERIC') },\n { id: 1, name: $translate.instant('TXT_FROM_TYPE_KINDERGARTEN_ENROLLMENT') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', \n displayExpr: 'name'\n },\n width: '140px',\n visible: $scope.tenantSetting.enableKindergartenSupport\n },\n {dataField: 'auditEvent.eventTimeUtc', caption: $translate.instant('TXT_LBL_UPDATED_AT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px' },\n { dataField: 'auditEvent.userFullName', caption: $translate.instant('TXT_LBL_UPDATED_BY'), dataType: 'string', width: '160px' },\n { dataField: 'displayOrder', caption: $translate.instant('TXT_ORDER'), dataType: 'number', width: '60px' },\n { dataField: 'auditEvent.revision', caption: $translate.instant('TXT_LBL_REVISION'), dataType: 'number', width: '60px' },\n ],\n customCommands: [{\n text: $translate.instant('TXT_SHOW_PREVIEW'),\n isVisible: function () { return securitySvc.isInRole('FormsDefinitions'); },\n callback: function (data) { $scope.onShowFormPreview(data.id); }\n }]\n }\n\n $scope.onShowFormPreview = function (formId) {\n formPreviewPromise.$promise.then(function () {\n formPreviewPromise.$scope.formId = formId;\n formPreviewPromise.$scope.enableSave = false;\n formPreviewPromise.show();\n });\n }\n\n $scope.onRowSelected = function (data) {\n setSelectedForm(data);\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = formSvc.createNew();\n detailDialogPromise.$scope.onFormSave = function (model) {\n refreshData();\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onFormSave = function () {\n refreshData();\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowCopy = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.model.isNew = true;\n detailDialogPromise.$scope.model.id = null;\n detailDialogPromise.$scope.onFormSave = function (model) {\n refreshData().then(function() {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedForm(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n formSvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n }\n\n function setSelectedForm(form, refresh) {\n $scope.selectedForm = form;\n $scope.$broadcast('formSelectionChanged', $scope.selectedForm);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_LBL_FORM_RESPONSES',\n template: \"form/form-detail-tabs/responses.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n var detailDialogPromise = $modal({\n templateUrl: 'forms/forms-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var formPreviewPromise = $modal({\n templateUrl: 'forms/forms-response-preview.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('FormsDetailCtrl', ['$scope', '$modal', 'formSvc', 'tenantSettingSvc',\nfunction ($scope, $modal, formSvc, tenantSettingSvc) {\n\n $scope.tenantSetting = tenantSettingSvc.settings;\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\n \n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n formSvc.insert(data)\n .$promise.then(success, error);\n } else {\n formSvc.update(data)\n .$promise.then(success, error);\n }\n\n function success() {\n $scope.onFormSave();\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.primaryQuestionIndexPlusOne = $scope.model.primaryQuestionIndex + 1;\n $scope.onPrimaryQuestionIndexPlusOneChange = function(newValue)\n {\n $scope.model.primaryQuestionIndex = newValue - 1;\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onQuestionAdd = function () {\n formSvc.addNewQuestion($scope.model);\n }\n\n $scope.onQuestionRemove = function (question) {\n var index = $scope.model.questions.indexOf(question);\n if (index > -1) {\n $scope.model.questions.splice(index, 1);\n }\n }\n\n $scope.onOptionAdd = function (question) {\n formSvc.addNewOption(question);\n }\n\n $scope.onOptionRemove = function (question, option) {\n var index = question.options.indexOf(option);\n if (index > -1) {\n question.options.splice(index, 1);\n }\n }\n\n $scope.isFormValid = function() {\n return formSvc.isFormValid($scope.model);\n }\n\n $scope.onQuestionTypeChanged = function(question, questionType) \n {\n if (questionType != 4)\n {\n if (!question.options || question.options.length == 0)\n {\n formSvc.addNewOption(question);\n }\n }\n else \n {\n question.options = null;\n }\n }\n\n $scope.onDeletePictureBtnClick = function (pictureUrl) {\n _.pull($scope.model.pictureUrls || [], pictureUrl);\n }\n\n $scope.showPictureSelect = function () {\n picturesSelectDlgPromise.$promise.then(function () {\n picturesSelectDlgPromise.$scope.onPicturesSelected = function (pictures) {\n\n if (!$scope.model.pictureUrls) {\n $scope.model.pictureUrls = [];\n }\n\n angular.forEach(pictures, function (p) {\n if (!_.find($scope.model.pictureUrls, p.imageUrl)) {\n $scope.model.pictureUrls.push(p.imageUrl);\n }\n });\n };\n picturesSelectDlgPromise.show();\n });\n }\n \n $scope.onAccessPermissionChange = function() {\n if ($scope.model.accessPermissions != 0) {\n $scope.model.showFullEditableStudentDetail = false;\n\n if ($scope.model.accessPermissions != 3) {\n $scope.model.showFullEditableUserDetail = false;\n \n $scope.model.contractTemplateId = null;\n $scope.model.formType = 0;\n }\n }\n }\n\n var picturesSelectDlgPromise = $modal({\n templateUrl: 'storage/pictures/pictures-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"forms/forms-detail-main-tab.html\"\n },\n {\n title: 'TXT_LBL_SETTING',\n template: \"forms/forms-detail-settings-tab.html\"\n },\n {\n title: 'TXT_LBL_QUESTIONS',\n template: \"forms/forms-detail-questions-tab.html\"\n },\n {\n title: 'TXT_LBL_PICTURES',\n template: \"forms/forms-detail-pictures-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n\n}]);\n","wbApp.controller('LeadsAdmissionDetailCtrl', ['$scope', '$modal', '$translate', '$timeout', 'leadSvc', 'localStorageService',\nfunction ($scope, $modal, $translate, $timeout, leadSvc, localStorageService) {\n\n// $scope.lead = ...; // Full lead object\n// $scope.dialogType = ['sendAdmissionAcceptance', 'sendAdmissionRejection', 'printAdmissionAcceptance', 'printAdmissionRejection']\n \n $scope.isSaving = false;\n $scope.model = {\n contractTemplateTypeId: null\n };\n \n switch($scope.dialogType) {\n case 'sendAdmissionAcceptance':\n $scope.contractTemplateTypeFilter = 8; // AdmissionAcceptance\n $scope.savebuttonText = $translate.instant('TXT_BTN_SEND');\n $scope.title = $translate.instant('TXT_SEND_ADMISSION_ACCEPTANCE');\n $scope.model.contractTemplateTypeId = localStorageService.get('admissionAcceptanceContractTemplateId');\n break;\n case 'printAdmissionAcceptance':\n $scope.contractTemplateTypeFilter = 8; // AdmissionAcceptance\n $scope.savebuttonText = $translate.instant('TXT_BTN_PRINT');\n $scope.title = $translate.instant('TXT_PRINT_ADMISSION_ACCEPTANCE');\n $scope.model.contractTemplateTypeId = localStorageService.get('admissionAcceptanceContractTemplateId');\n break;\n case 'sendAdmissionRejection':\n $scope.contractTemplateTypeFilter = 9; // AdmissionRejection\n $scope.savebuttonText = $translate.instant('TXT_BTN_SEND');\n $scope.title = $translate.instant('TXT_SEND_ADMISSION_REJECTION');\n $scope.model.contractTemplateTypeId = localStorageService.get('admissionRejectionContractTemplateId');\n break;\n case 'printAdmissionRejection':\n $scope.contractTemplateTypeFilter = 9; // AdmissionRejection\n $scope.savebuttonText = $translate.instant('TXT_BTN_PRINT');\n $scope.title = $translate.instant('TXT_PRINT_ADMISSION_REJECTION');\n $scope.model.contractTemplateTypeId = localStorageService.get('admissionRejectionContractTemplateId');\n break;\n }\n\n $scope.onDetailSave = function () {\n\n $scope.isSaving = true;\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n if (!!$scope.onSaveChanges) {\n $timeout(function() {\n $scope.onSaveChanges();\n }, 2000);\n }\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n } \n \n switch($scope.dialogType) {\n case 'sendAdmissionAcceptance':\n localStorageService.set('admissionAcceptanceContractTemplateId', $scope.model.contractTemplateTypeId);\n leadSvc.admissionAcceptanceNotification($scope.lead.id, $scope.model.contractTemplateTypeId, success, error);\n break; \n case 'printAdmissionAcceptance':\n localStorageService.set('admissionAcceptanceContractTemplateId', $scope.model.contractTemplateTypeId);\n window.open(\"restapi/leads/\" + $scope.lead.id + \"/admission/acceptance-report?contractTemplateId=\" + $scope.model.contractTemplateTypeId, '_blank');\n success();\n break;\n case 'sendAdmissionRejection':\n localStorageService.set('admissionRejectionContractTemplateId', $scope.model.contractTemplateTypeId);\n leadSvc.admissionRejectionNotification($scope.lead.id, $scope.model.contractTemplateTypeId, success, error);\n break;\n case 'printAdmissionRejection':\n localStorageService.set('admissionRejectionContractTemplateId', $scope.model.contractTemplateTypeId);\n window.open(\"restapi/leads/\" + $scope.lead.id + \"/admission/rejection-report?contractTemplateId=\" + $scope.model.contractTemplateTypeId, '_blank');\n success();\n break;\n }\n }\n\n}]);\n","wbApp.controller('LeadsAssignCourseDetailCtrl', ['$scope', '$modal', '$translate', '$q', '$filter', 'leadSvc',\n 'courseRegistrationSvc', 'courseSvc', 'semesterSvc', 'securitySvc',\nfunction ($scope, $modal, $translate, $q, $filter, leadSvc, courseRegistrationSvc, courseSvc, semesterSvc, securitySvc) {\n\n $scope.model = {\n semesterID: null,\n courseID: null,\n notes: null\n };\n \n if ($scope.leadSourceType === 5) { // CourseInterest\n courseRegistrationSvc.getCourseInterestById($scope.leadSourceReferenceId).$promise.then(function (data) {\n if (!!data) {\n $scope.model.courseID = data.courseId;\n $scope.model.notes = data.notes;\n } \n });\n }\n \n \n $scope.assignExistingRegistration = false;\n $scope.studentRegistrations = [];\n $scope.existingRegistration = null;\n\n $scope.canBeSaved = function () {\n if ($scope.assignExistingRegistration) {\n return !!$scope.existingRegistration;\n }\n\n return true;\n }\n\n $scope.onAssignExistingCourseBtnClick = function () {\n $scope.assignExistingRegistration = true;\n $scope.existingRegistration = false;\n $scope.studentRegistrations = courseRegistrationSvc.getAllCoursesByStudent($scope.studentId);\n }\n\n $scope.onCreateNewRegistrationBtnClick = function () {\n $scope.assignExistingRegistration = false;\n }\n\n $scope.onExistingRegistrationRowSelected = function (row) {\n $scope.existingRegistration = row;\n }\n\n $scope.isSaving = false;\n var isSaving2 = false;\n\n semesterSvc.getDefaultAsync().then(function (data) {\n if (!!data) {\n $scope.model.semesterID = data.id;\n }\n });\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if ($scope.assignExistingRegistration && $scope.existingRegistration) {\n leadSvc.getById($scope.leadId).$promise.then(function (lead) {\n\n isSaving2 = true;\n\n lead.conversionType = 1; // CourseRegistration\n lead.conversionReferenceId = $scope.existingRegistration.courseRegistrationID;\n lead.conversionDateUtc = moment().toDate();\n var courseFullName = $scope.existingRegistration.courseFullName;\n var firstLesson = !!$scope.existingRegistration.firstDate\n ? ' (' + $filter('date')($scope.existingRegistration.firstDate, 'EEE HH:mm').toUpperCase() + ')'\n : '';\n lead.conversionText = courseFullName + firstLesson;\n lead.status = 1; // Converted\n\n if (!lead.notes || lead.notes.length == 0) {\n lead.notes = [];\n }\n\n var user = securitySvc.loggedInUser();\n\n lead.notes.push({\n text: $translate.instant('TXT_TITLE_REGISTER_ON_COURSE') + ': ' + lead.conversionText,\n updatedAtUtc: moment().toDate(),\n updatedByUserId: user.userID + \"\",\n updatedByName: user.fullName\n });\n\n leadSvc.update(lead).$promise.then(function () {\n $scope.isSaving = false;\n isSaving2 = false;\n $scope.$hide();\n $scope.onLeadSave(lead);\n }, function (error) {\n $scope.detailError = error;\n $scope.isSaving = false;\n isSaving2 = false;\n });\n }, function (error) {\n $scope.detailError = error;\n $scope.isSaving = false;\n });\n\n } else {\n\n $q.all([\n leadSvc.getById($scope.leadId).$promise,\n courseSvc.getByCourseID(model.courseID).$promise]).then(function (lead_and_course) {\n\n var lead = lead_and_course[0];\n var course = lead_and_course[1];\n\n if (lead.status == 1) {\n $scope.detailError = { errors: [{ message: $translate.instant('TXT_ERROR_LEAD_ALREADY_CONVERTED') }] };\n $scope.isSaving = false;\n }\n else {\n $q.all([detailDialogPromise.$promise, courseRegistrationSvc.createNew(course, false)])\n .then(function (data) {\n var courseRegistration = data[1];\n courseRegistration.parentID = lead.userId;\n if (!!lead.studentIds && lead.studentIds.length > 0) {\n courseRegistration.studentID = lead.studentIds[0];\n }\n courseRegistration.notes = model.notes;\n detailDialogPromise.$scope.course = course;\n detailDialogPromise.$scope.model = courseRegistration;\n // Do not search for leads during course registration save\n detailDialogPromise.$scope.ignoreLeadAssignment = true; \n detailDialogPromise.$scope.onAfterSuccessSave = function (cr) {\n\n isSaving2 = true;\n\n lead.conversionType = 1; // CourseRegistraction\n lead.conversionReferenceId = cr.courseRegistrationID;\n lead.conversionDateUtc = moment().toDate();\n\n var courseFullName = $filter('courseFullName')(course);\n var firstLesson = !!course.firstLesson\n ? ' (' + $filter('date')(course.firstLesson, 'EEE HH:mm').toUpperCase() + ')'\n : '';\n lead.conversionText = courseFullName + firstLesson;\n lead.status = 1; // Converted\n\n if (!lead.notes || lead.notes.length == 0) {\n lead.notes = [];\n }\n\n var user = securitySvc.loggedInUser();\n\n lead.notes.push({\n text: $translate.instant('TXT_TITLE_REGISTER_ON_COURSE') + ': ' + lead.conversionText,\n updatedAtUtc: moment().toDate(),\n updatedByUserId: user.userID + \"\",\n updatedByName: user.fullName\n });\n\n leadSvc.update(lead).$promise.then(function () {\n $scope.isSaving = false;\n isSaving2 = false;\n $scope.$hide();\n $scope.onLeadSave(lead);\n }, function (error) {\n $scope.detailError = error;\n $scope.isSaving = false;\n isSaving2 = false;\n });\n };\n detailDialogPromise.$scope.onAfterDialogCancel = function () {\n $scope.isSaving = false;\n };\n detailDialogPromise.show();\n }, function (error) {\n $scope.detailError = error;\n $scope.isSaving = false;\n });\n }\n }, function (error) {\n $scope.detailError = error;\n $scope.isSaving = false;\n })\n }\n }\n\n $scope.studentRegistrationsGridSettings = {\n name: 'studentRegistrationsAssing',\n keyExpr: 'courseRegistrationID',\n columns: [\n {\n dataField: 'courseRegistrationID',\n caption: $translate.instant('TXT_LBL_ID'),\n dataType: 'string',\n visible: false,\n showInColumnChooser: false\n },\n {\n dataField: 'registrationDate', caption: $translate.instant('TXT_SEC_CLIENT_COURSE_REGISTRATION'),\n dataType: 'date',\n format: { date: 'short' },\n width: '80px',\n sortOrder: 'desc'\n },\n {\n dataField: 'semesterName', caption: $translate.instant('TXT_LBL_SEMESTER'),\n dataType: 'string',\n width: '120px'\n },\n {\n dataField: 'firstDate',\n caption: $translate.instant('TXT_MENU_SCHEDULE'),\n dataType: 'date',\n format: { raw: \"EEE HH:mm\" },\n calculateSortValue: function (rowData) {\n var mfirstLesson = moment(rowData.firstLesson);\n return mfirstLesson.isValid()\n ? mfirstLesson.day() * 10000 + mfirstLesson.hour() * 100 + mfirstLesson.minute()\n : rowData.firstLesson;\n },\n width: '90px'\n },\n { dataField: 'courseFullName', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string' },\n ]\n };\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'courses/courses/courses-detail-tabs/students-detail.html',\n show: false,\n onHide: function () { if (!isSaving2) { $scope.isSaving = false; } },\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('LeadsBindUserAndStudentDetailCtrl', ['$scope', '$translate', '$q', '$modal', 'userSvc', 'studentSvc',\nfunction ($scope, $translate, $q, $modal, userSvc, studentSvc) {\n\n $scope.model = $scope.inputModel || {};\n\n $scope.isSaving = false;\n\n $scope.isInvalid = function (model) {\n return !model || !model.userID || !model.studentID;\n }\n\n $scope.disableStudentAdd = function (model) {\n return !model || !model.userID;\n }\n\n $scope.onAddUserClick = function () {\n var userDetail = userSvc.createNew();\n if (!!$scope.notRegisteredUserInfo) {\n userDetail.surname = $scope.notRegisteredUserInfo.surname;\n userDetail.name = $scope.notRegisteredUserInfo.name;\n userDetail.middlename = $scope.notRegisteredUserInfo.middlename;\n userDetail.phone = $scope.notRegisteredUserInfo.phone;\n userDetail.email = $scope.notRegisteredUserInfo.email;\n userDetail.address = $scope.notRegisteredUserInfo.address;\n userDetail.referenceSourceID = $scope.notRegisteredUserInfo.referenceSourceId;\n }\n\n userDetailDialogPromise.$promise.then(function () {\n userDetailDialogPromise.$scope.userDetail = angular.copy(userDetail);\n userDetailDialogPromise.$scope.preFilled = true;\n userDetailDialogPromise.$scope.userSaved = function (model) {\n $scope.model.userID = model.id;\n },\n userDetailDialogPromise.show();\n });\n }\n\n $scope.onAddStudentclick = function () {\n var student = studentSvc.createNew();\n student.userID = $scope.model.userID;\n if (!!$scope.notRegisteredUserInfo &&\n !!$scope.notRegisteredUserInfo.students &&\n $scope.notRegisteredUserInfo.students.length > 0) {\n\n student.name = $scope.notRegisteredUserInfo.students[0].name;\n student.middlename = $scope.notRegisteredUserInfo.students[0].middlename;\n student.surname = $scope.notRegisteredUserInfo.students[0].surname;\n student.birthday = $scope.notRegisteredUserInfo.students[0].birthday;\n student.nationality = $scope.notRegisteredUserInfo.students[0].nationality;\n student.adminNotes = $scope.notRegisteredUserInfo.students[0].health;\n }\n\n studentDialogPromise.$promise.then(function () {\n studentDialogPromise.$scope.collection = [];\n studentDialogPromise.$scope.model = student;\n studentDialogPromise.$scope.preFilled = true;\n studentDialogPromise.$scope.onStudentSave = function (model) {\n $scope.model.studentID = model.id; \n };\n studentDialogPromise.show();\n });\n }\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n $scope.onUserAndStudentAssigned($scope.model);\n $scope.$hide();\n\n $scope.isSaving = false;\n }\n\n var userDetailDialogPromise = $modal({\n templateUrl: 'users/users-detail.html',\n show: false,\n scope: $scope\n });\n\n var studentDialogPromise = $modal({\n templateUrl: 'users/students/students-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('LeadsCtrl', ['$scope', '$modal', '$translate', '$filter', '$timeout', 'leadSvc', 'localStorageService', \n 'semesterSvc', 'securitySvc', 'gridSortSvc', 'levelSvc', 'phaseSvc', 'contractSvc',\nfunction ($scope, $modal, $translate, $filter, $timeout, leadSvc, localStorageService, \n semesterSvc, securitySvc, gridSortSvc, levelSvc, phaseSvc, contractSvc) {\n\n $scope.semesterDataRange = 2; // 1 - semester, 2 - from to\n $scope.fromDate = moment().subtract(3, 'M').startOf('day').toDate();\n $scope.toDate = moment().startOf('day').toDate();\n $scope.status = 0;\n\n semesterSvc.getDefaultAsync().then(function (data) { \n if (!!data) {\n $scope.semesterID = data.id;\n if ($scope.semesterDataRange === 1) {\n refreshData();\n }\n }\n });\n\n if (localStorageService.isSupported) {\n $scope.semesterDataRange = localStorageService.get('semesterDataRange') || 2;\n $scope.status = localStorageService.get('leadStatus') || 0;\n }\n\n $scope.leads = [];\n\n function refreshData()\n {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n // status, fromDateUtc, toDateUtc\n if ($scope.semesterDataRange === 2) {\n $scope.leads = leadSvc.getAllByStatusAndDateRange($scope.status, $scope.fromDate, $scope.toDate);\n $scope.leads.$promise.then(function () {\n\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedLead(null);\n }\n })\n }, 100); \n }\n else {\n setSelectedLead(null);\n }\n },\n function (error) {\n setSelectedLead(null);\n })\n \n } else if ($scope.semesterDataRange === 1 && $scope.semesterID) {\n $scope.leads = leadSvc.getAllByStatusAndSemester($scope.status, $scope.semesterID);\n setSelectedLead(null);\n } \n }\n\n function setSelectedLead(lead) {\n $scope.selectedLead = lead;\n $scope.$broadcast('leadSelectionChanged', $scope.selectedLead);\n }\n\n refreshData();\n\n var semestersDataSource = new DevExpress.data.CustomStore({\n load: function (loadOptions) {\n return semesterSvc.getAllAsync().$promise;\n },\n byKey: function (e) {\n return semesterSvc.getAsync(e);\n },\n loadMode: 'processed'\n });\n \n var phaseDataSource = new DevExpress.data.CustomStore({\n load: function (loadOptions) {\n return phaseSvc.getAll().$promise;\n },\n byKey: function (e) {\n return phaseSvc.getById(e);\n },\n loadMode: 'processed'\n });\n\n $scope.gridSettings = {\n name: 'leads',\n keyExpr: 'id',\n shouldShowColumnChooser: true,\n columns: [\n {\n dataField: 'id',\n caption: $translate.instant('TXT_LBL_ID'),\n dataType: 'string',\n visible: false,\n showInColumnChooser: false\n },\n {\n showInColumnChooser: false,\n caption: '',\n dataField: 'marker', \n width: '42px',\n alignment: 'center',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n loadMode: 'raw',\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_FLAG_RED') },\n { id: 1, name: $translate.instant('TXT_FLAG_ORANGE') },\n { id: 2, name: $translate.instant('TXT_FLAG_YELLOW') },\n { id: 3, name: $translate.instant('TXT_FLAG_GREEN') },\n { id: 4, name: $translate.instant('TXT_FLAG_BLUE') },\n { id: 5, name: $translate.instant('TXT_FLAG_PURPLE') },\n { id: 6, name: $translate.instant('TXT_FLAG_GRAY') },\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n encodeHtml: false,\n calculateSortValue: function(rowData) { return rowData.marker; },\n calculateDisplayValue: function (rowData) {\n if (typeof rowData.marker === 'undefined' || rowData.marker === null) {\n return \"\";\n } else {\n return \"\";\n }\n },\n },\n {\n showInColumnChooser: false,\n caption: '',\n dataField: 'isNotRegisteredUser',\n width: '42px',\n alignment: 'center',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: true, name: $translate.instant('TXT_ANONYMOUS_USER') },\n { id: false, name: $translate.instant('TXT_REGISTERED_USER') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n encodeHtml: false,\n calculateSortValue: function (rowData) { return rowData.marker; },\n calculateDisplayValue: function (rowData) {\n if (typeof rowData.isNotRegisteredUser === 'undefined' || rowData.isNotRegisteredUser === null) {\n return \"\";\n } else {\n var icon = !!rowData.isNotRegisteredUser ? 'fa-user-o' : 'fa-user';\n var res = \"\";\n\n return res;\n }\n },\n },\n { dataField: 'leadSourceReferenceId', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false, showInColumnChooser: false },\n {\n dataField: 'referenceNumber',\n name: 'referenceNumber',\n caption: $translate.instant('TXT_REFERENCE_NUMBER'),\n dataType: 'string',\n width: '50px',\n visible: false\n },\n {\n dataField: 'studentsFullName',\n caption: $translate.instant('TXT_LBL_STUDENT'),\n dataType: 'string',\n width: '140px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentsFullName') }\n },\n \n {\n dataField: 'phaseId',\n caption: $translate.instant('TXT_PHASE'),\n dataType: 'string',\n width: '140px',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: phaseDataSource,\n pageSize: 20,\n paginate: true\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n }\n },\n {\n dataField: 'levelId',\n caption: $translate.instant('TXT_LEVEL'),\n dataType: 'string',\n width: '100px',\n calculateCellValue: function (rowData) {\n return $filter('level')(rowData.levelId);\n }\n },\n {\n dataField: 'semesterId',\n caption: $translate.instant('TXT_LBL_SEMESTER'),\n dataType: 'string',\n width: '150px',\n visible: false,\n lookup: {\n allowClearing: true,\n dataSource: {\n store: semestersDataSource,\n pageSize: 20,\n paginate: true\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n },\n { dataField: 'studentBirthday', caption: $translate.instant(\"TXT_LBL_BIRTHDAY\"), dataType: 'date', format: { date: 'short' }, width: '70px' },\n { \n dataField: 'studentBirthday', \n caption: $translate.instant(\"TXT_LBL_AGE\"), \n dataType: 'string',\n visible: false,\n calculateCellValue: function (rowData) {\n return rowData.studentBirthday \n ? moment(rowData.studentBirthday).toNow(true) \n : '';\n },\n width: '70px' },\n {\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.phone);\n },\n width: '130px'\n },\n {\n dataField: 'email',\n caption: $translate.instant('TXT_LBL_EMAIL'),\n dataType: 'string',\n visible: false,\n width: '190px'\n },\n {\n dataField: 'leadSourceType',\n caption: $translate.instant('TXT_CONSENT_TYPE'),\n dataType: 'string',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_LEAD_SOURCE_FORM_RESPONSE') },\n { id: 1, name: $translate.instant('TXT_LEAD_SOURCE_FULL_COURSE_INTEREST') },\n { id: 2, name: $translate.instant('TXT_LEAD_SOURCE_PHONE') },\n { id: 3, name: $translate.instant('TXT_LEAD_SOURCE_EMAIL') },\n { id: 4, name: $translate.instant('TXT_LEAD_SOURCE_PERSONAL_CONTACT') },\n { id: 5, name: $translate.instant('TXT_LEAD_SOURCE_COURSE_INTEREST') },\n { id: 6, name: $translate.instant('TXT_LEAD_SOURCE_FORM_RESPONSE_KINDERGARTEN_ENROLLMENT') },\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n width: '70px'\n },\n {\n dataField: 'userFullName',\n caption: $translate.instant('TXT_VAL_RCPG_USER'),\n width: '140px',\n dataType: 'string',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'userFullName') }\n },\n {\n dataField: 'leadSourceName',\n caption: $translate.instant('TXT_NAME'),\n dataType: 'string',\n width: '120px'\n },\n {\n dataField: 'leadSourceText',\n caption: $translate.instant('TXT_LBL_TEXT'),\n dataType: 'string',\n width: '160px'\n },\n {\n dataField: 'lastNoteText',\n caption: $translate.instant('TXT_LBL_NOTE'),\n dataType: 'string'\n },\n { dataField: 'createdAtUtc', caption: $translate.instant('TXT_LBL_CREATED_AT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px' },\n { dataField: 'nextContactAtUtc', caption: $translate.instant('TXT_LBL_NEXT_CONTACT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px' },\n { dataField: 'decisionDateUtc', caption: $translate.instant('TXT_LBL_LAST_ACTIVITY'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px', sortOrder: 'desc' },\n ],\n onEditorPreparing: function(e) { \n if (e.parentType == 'filterRow' && e.dataField == 'marker') {\n e.editorOptions.itemTemplate = function (itemData, itemIndex, itemElement) {\n if (itemIndex == 0) {\n return $(\"\");\n } else {\n return $(\"\");\n }\n }\n }\n else {\n if (e.parentType == 'filterRow' && e.dataField == 'isNotRegisteredUser') {\n e.editorOptions.itemTemplate = function (itemData, itemIndex, itemElement) {\n if (itemIndex == 0) {\n return $(\"\");\n } else {\n var icon = itemIndex == 1 ? 'fa-user-o' : 'fa-user';\n var res = \"\";\n\n return res;\n }\n }\n }\n else {\n if (e.parentType == 'filterRow' && e.dataField == 'levelId') {\n e.editorName = \"dxTextBox\";\n }\n }\n }\n },\n customCommands: [{\n text: $translate.instant('TXT_SHOW_PREVIEW'),\n isVisible: function (data) { return (data.leadSourceType == 0 || data.leadSourceType == 6) && securitySvc.isInRole('FormsDefinitions'); },\n callback: function (data) { $scope.onShowFormPreview(data.leadSourceReferenceId); }\n }, {\n text: $translate.instant('TXT_CHANGE_STATE'),\n isVisible: function (data) { return !!data && data.status != 1 && securitySvc.isInRole('FormsResponse.Update'); },\n callback: function (data) { $scope.onChangeStatus(data); }\n }, {\n text: $translate.instant('TXT_MENU_REGISTER_ON_COURSE'),\n isVisible: function (data) {\n return !!data &&\n data.leadSourceType != 6 &&\n data.status != 1 &&\n !data.isNotRegisteredUser &&\n securitySvc.isInRole('FormsResponse.Update') &&\n securitySvc.isInRole('CourseRegistration.Insert');\n },\n callback: function (data) { $scope.onAssignCourse(data); }\n }, {\n text: $translate.instant('TXT_MENU_CREATE_CONTRACT'),\n isVisible: function (data) {\n return !!data &&\n data.leadSourceType == 6 &&\n data.status != 1 &&\n !data.isNotRegisteredUser &&\n securitySvc.isInRole('Leads.Update') &&\n securitySvc.isInRole('Contract.Insert');\n },\n callback: function (data) { $scope.onCreateContract(data); }\n }, {\n text: $translate.instant('TXT_SEND_ADMISSION_ACCEPTANCE'),\n isVisible: function (data) { return !!data && data.leadSourceType == 6 && securitySvc.isInRole('Leads.Update'); },\n callback: function (data) { $scope.onSendAdmissionAcceptance(data); },\n beginGroup: true\n },{\n text: $translate.instant('TXT_PRINT_ADMISSION_ACCEPTANCE'),\n isVisible: function (data) { return !!data && data.leadSourceType == 6 && securitySvc.isInRole('Leads.Update'); },\n callback: function (data) { $scope.onPrintAdmissionAcceptance(data); }\n }, {\n text: $translate.instant('TXT_SEND_ADMISSION_REJECTION'),\n isVisible: function (data) { return !!data && data.leadSourceType == 6 && securitySvc.isInRole('Leads.Update'); },\n callback: function (data) { $scope.onSendAdmissionRejection(data); },\n beginGroup: true\n }, {\n text: $translate.instant('TXT_PRINT_ADMISSION_REJECTION'),\n isVisible: function (data) { return !!data && data.leadSourceType == 6 && securitySvc.isInRole('Leads.Update'); },\n callback: function (data) { $scope.onPrintAdmissionRejection(data); }\n }]\n }\n \n $scope.onSendAdmissionAcceptance = function(lead) {\n leadsAdmissionDialogPromise.$promise.then(function () {\n leadsAdmissionDialogPromise.$scope.lead = lead;\n leadsAdmissionDialogPromise.$scope.dialogType = 'sendAdmissionAcceptance';\n leadsAdmissionDialogPromise.onSaveChanges = function () {\n refreshData();\n };\n leadsAdmissionDialogPromise.show();\n });\n }\n\n $scope.onSendAdmissionRejection = function(lead) {\n leadsAdmissionDialogPromise.$promise.then(function () {\n leadsAdmissionDialogPromise.$scope.lead = lead;\n leadsAdmissionDialogPromise.$scope.dialogType = 'sendAdmissionRejection';\n leadsAdmissionDialogPromise.onSaveChanges = function () {\n refreshData();\n };\n leadsAdmissionDialogPromise.show();\n });\n }\n\n $scope.onPrintAdmissionAcceptance = function(lead) {\n leadsAdmissionDialogPromise.$promise.then(function () {\n leadsAdmissionDialogPromise.$scope.lead = lead;\n leadsAdmissionDialogPromise.$scope.dialogType = 'printAdmissionAcceptance';\n leadsAdmissionDialogPromise.onSaveChanges = function () {\n refreshData();\n };\n leadsAdmissionDialogPromise.show();\n });\n }\n\n $scope.onPrintAdmissionRejection = function(lead) {\n leadsAdmissionDialogPromise.$promise.then(function () {\n leadsAdmissionDialogPromise.$scope.lead = lead;\n leadsAdmissionDialogPromise.$scope.dialogType = 'printAdmissionRejection';\n leadsAdmissionDialogPromise.onSaveChanges = function () {\n refreshData();\n };\n leadsAdmissionDialogPromise.show();\n });\n } \n\n \n $scope.onShowFormPreview = function (formResponseId) {\n formPreviewPromise.$promise.then(function () {\n formPreviewPromise.$scope.formId = null;\n formPreviewPromise.$scope.formDefinitionRevision = null;\n formPreviewPromise.$scope.formResponseId = formResponseId;\n formPreviewPromise.show();\n });\n }\n\n\n $scope.$on('refreshData', function (e, data) {\n refreshData();\n });\n\n $scope.$on('leadChanged', function (e, data) {\n refreshData();\n });\n\n $scope.onRowSelected = function (data) {\n setSelectedLead(data);\n }\n\n $scope.onRowAdd = function () {\n leadsDetailPromise.$promise.then(function () {\n leadsDetailPromise.$scope.model = leadSvc.createNew();\n leadsDetailPromise.$scope.onLeadSave = function (model) {\n refreshData();\n };\n leadsDetailPromise.show();\n });\n }\n\n $scope.onRowEdit = function (lead) {\n leadsDetailPromise.$promise.then(function () {\n leadsDetailPromise.$scope.leadId = lead.id;\n leadsDetailPromise.$scope.model = null;\n leadsDetailPromise.$scope.onLeadSave = function () {\n refreshData();\n };\n leadsDetailPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n leadSvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n }\n\n $scope.onDataRangeChanged = function () {\n if (!!$scope.fromDate && moment($scope.fromDate).isValid() && !!$scope.toDate && moment($scope.toDate).isValid()) {\n if (localStorageService.isSupported) {\n localStorageService.set('semesterDataRange', $scope.semesterDataRange);\n }\n refreshData();\n }\n }\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n // get invoices\n refreshData(); \n }\n }\n\n $scope.onChangeStatus = function (lead) {\n leadsNoteDetailPromise.$promise.then(function () {\n leadsNoteDetailPromise.$scope.leadId = lead.id;\n leadsNoteDetailPromise.$scope.noteId = null;\n leadsNoteDetailPromise.$scope.onLeadSave = function (model) {\n refreshData();\n };\n leadsNoteDetailPromise.show();\n });\n }\n\n $scope.onLeadStatusChange = function (status) {\n if (localStorageService.isSupported) {\n localStorageService.set('leadStatus', status);\n }\n refreshData();\n }\n\n $scope.onAssignCourse = function (lead) {\n leadsAssingCourseDetailPromise.$promise.then(function () {\n leadsAssingCourseDetailPromise.$scope.leadSourceType = lead.leadSourceType;\n leadsAssingCourseDetailPromise.$scope.leadSourceReferenceId = lead.leadSourceReferenceId;\n leadsAssingCourseDetailPromise.$scope.leadId = lead.id;\n leadsAssingCourseDetailPromise.$scope.studentId = lead.studentIds[0];\n leadsAssingCourseDetailPromise.$scope.onLeadSave = function (model) {\n refreshData();\n };\n leadsAssingCourseDetailPromise.show();\n });\n }\n\n $scope.onCreateContract = function (lead) {\n contractDetailDialogPromise.$promise.then(function () {\n contractSvc.createNew().then(function(newModel) {\n \n newModel.userId = lead.userId;\n newModel.studentId = lead.studentIds[0];\n \n contractDetailDialogPromise.$scope.model = newModel;\n contractDetailDialogPromise.$scope.disableUserStudentSelection = true;\n contractDetailDialogPromise.$scope.onContractSave = function (model) {\n\n leadSvc.getById(lead.id).$promise.then(function (freshLead) {\n freshLead.conversionType = 2; // Contract\n freshLead.conversionReferenceId = model.id;\n freshLead.conversionDateUtc = moment().toDate();\n\n \n if (moment(model.toDate).isValid()) {\n freshLead.conversionText = $translate.instant('TXT_MENU_CONTRACT_CREATED').f($filter('date')(model.fromDate, 'dd.MM.yy'), $filter('date')(model.toDate, 'dd.MM.yy'));\n } else {\n freshLead.conversionText = $translate.instant('TXT_MENU_CONTRACT_CREATED').f($filter('date')(model.fromDate, 'dd.MM.yy'), \"\");\n }\n \n freshLead.status = 1; // Converted\n if (!freshLead.notes || freshLead.notes.length == 0) {\n freshLead.notes = [];\n }\n\n let user = securitySvc.loggedInUser();\n freshLead.notes.push({\n text: freshLead.conversionText,\n updatedAtUtc: moment().toDate(),\n updatedByUserId: user.userID + \"\",\n updatedByName: user.fullName\n });\n\n leadSvc.update(freshLead).$promise.then(function () {\n refreshData();\n }); \n });\n }; \n contractDetailDialogPromise.show();\n });\n });\n }\n \n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"leads/leads-detail-tabs/detail.html\"\n }, {\n title: 'TXT_LBL_COURSES',\n template: \"leads/leads-detail-tabs/user-history-courses.html\"\n }, {\n title: 'TXT_LBL_ACTIONS',\n template: \"leads/leads-detail-tabs/user-history-actions.html\"\n }, {\n title: 'TXT_LBL_NOTES',\n template: \"leads/leads-detail-tabs/crm-notes.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n\n\n var formPreviewPromise = $modal({\n templateUrl: 'forms/forms-response-preview.html',\n show: false,\n scope: $scope.$new()\n });\n\n var leadsNoteDetailPromise = $modal({\n templateUrl: 'leads/leads-detail-tabs/crm-notes-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var leadsAssingCourseDetailPromise = $modal({\n templateUrl: 'leads/leads/leads-assing-course-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var leadsDetailPromise = $modal({\n templateUrl: 'leads/leads-detail.html',\n show: false,\n scope: $scope.$new()\n });\n \n var leadsAdmissionDialogPromise = $modal({\n templateUrl: 'leads/leads/leads-admission-dialog.html',\n show: false,\n scope: $scope.$new()\n });\n\n var contractDetailDialogPromise = $modal({\n templateUrl: 'activities/contracts/contract-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('LeadsDetailCtrl', ['$scope', '$modal', '$translate', '$q', 'leadSvc', 'notRegisteredUserSvc', 'studentSvc', 'userSvc', \nfunction ($scope, $modal, $translate, $q, leadSvc, notRegisteredUserSvc, studentSvc, userSvc) {\n\n $scope.model = $scope.model || {}; // Full lead object\n $scope.modelOrig = {};\n $scope.isDisabled = true;\n\n $scope.user = {};\n $scope.students = [];\n\n $scope.notRegisteredUserInfo = null;\n $scope.notRegisteredUserInfoOrig = null;\n\n function loadUser() {\n return $q(function (success, reject) {\n\n var promisses = [];\n promisses.push(userSvc.getByIDFull($scope.model.userId).$promise);\n if (!!$scope.model.studentIds && $scope.model.studentIds.length > 0) {\n promisses.push(studentSvc.getAllByUserIDAsync($scope.model.userId).$promise);\n }\n\n $q.all(promisses).then(function (data) {\n $scope.user = data[0];\n if (data.length > 1) {\n var students = data[1];\n $scope.students = _.intersectionWith(students, $scope.model.studentIds, function (arrVal, othVal) {\n return arrVal.id == othVal;\n });\n\n _.forEach($scope.students, function (e) {\n e.fullName = String.prototype.fullName(e.name, e.middlename, e.surname);\n });\n }\n\n success();\n }, function (error) {\n reject(error);\n });\n });\n }\n\n function loadData(leadId) {\n $scope.isLoading = true;\n\n function finalizeLoading()\n {\n if ($scope.model.status == 1) {\n $scope.detailError = { errors: [{ message: $translate.instant('TXT_ERROR_LEAD_ALREADY_CONVERTED') }] };\n $scope.isSaving = false;\n $scope.isDisabled = true;\n } else {\n $scope.isDisabled = false;\n }\n $scope.isLoading = false;\n }\n\n leadSvc.getById(leadId).$promise.then(function (data) {\n\n $scope.model = data;\n $scope.modelOrig = angular.copy($scope.model);\n\n if ($scope.model.isNotRegisteredUser)\n { \n notRegisteredUserSvc.getById($scope.model.userId).$promise.then(function (user) {\n\n $scope.notRegisteredUserInfo = user;\n $scope.notRegisteredUserInfoOrig = angular.copy($scope.notRegisteredUserInfo);\n\n finalizeLoading();\n }, function (error) {\n $scope.isLoading = false;\n });\n }\n else\n {\n loadUser().then(function () {\n finalizeLoading();\n }, function (error) {\n $scope.model = {};\n $scope.isLoading = false;\n });\n }\n }, function (error) {\n $scope.model = {};\n $scope.isLoading = false;\n });\n }\n\n $scope.onAnonymousBtnClick = function () {\n if (!$scope.notRegisteredUserInfo) {\n $scope.notRegisteredUserInfo = notRegisteredUserSvc.createNew();\n }\n $scope.model.isNotRegisteredUser = true;\n $scope.model.userID = null;\n $scope.model.studentIds = [];\n }\n\n $scope.onExistingBtnClick = function () {\n $scope.model.isNotRegisteredUser = false;\n $scope.model.userID = null;\n $scope.model.studentIds = [\"\"];\n\n }\n\n $scope.isFormValid = function () {\n return true;\n }\n\n $scope.detailIsUnchanged = function () {\n var modelEquals = angular.equals($scope.model, $scope.modelOrig);\n var userEquals = angular.equals($scope.notRegisteredUserInfo, $scope.notRegisteredUserInfoOrig);\n\n return modelEquals && userEquals;\n };\n\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function () {\n\n $scope.isSaving = true;\n\n var modelToSave = angular.copy($scope.model);\n\n var promisses = [];\n\n var modelEquals = angular.equals(modelToSave, $scope.modelOrig);\n var userEquals = angular.equals($scope.notRegisteredUserInfo, $scope.notRegisteredUserInfoOrig);\n\n if (modelToSave.isNew)\n {\n if (!!modelToSave.studentIds && !!modelToSave.studentIds.length && modelToSave.studentIds[0] == \"\") {\n modelToSave.studentIds = [];\n }\n\n if (!!modelToSave.notes && !!modelToSave.notes.length) {\n if (!modelToSave.notes[0].text && !modelToSave.notes[0].nextContactAtUtc) {\n modelToSave.notes = null;\n }\n }\n\n if (!userEquals && !!$scope.notRegisteredUserInfo && modelToSave.isNotRegisteredUser) {\n notRegisteredUserSvc.insert($scope.notRegisteredUserInfo).$promise.then(function s(d) {\n\n modelToSave.userId = d.id;\n if (!!d.students && !!d.students.length) {\n modelToSave.studentIds = [d.students[0].id];\n }\n\n leadSvc.insert(modelToSave).$promise.then(success, error);\n\n }, error);\n } else {\n leadSvc.insert(modelToSave).$promise.then(success, error);\n }\n }\n else \n {\n if (!userEquals && !!$scope.notRegisteredUserInfo && modelToSave.isNotRegisteredUser) {\n if (!$scope.notRegisteredUserInfo.students || !$scope.notRegisteredUserInfo.students.length) {\n\n if (!!modelToSave.studentIds && !!modelToSave.studentIds.length) {\n modelToSave.studentIds = [];\n modelEquals = false;\n } \n } \n }\n\n if (!userEquals && modelToSave.isNotRegisteredUser) {\n notRegisteredUserSvc.update($scope.notRegisteredUserInfo).$promise.then(function s() {\n\n if (!!$scope.notRegisteredUserInfo.students && !!$scope.notRegisteredUserInfo.students.length) {\n if (!modelToSave.studentIds || !modelToSave.studentIds.length) {\n\n // Fetch the id\n notRegisteredUserSvc.getById($scope.notRegisteredUserInfo.id).$promise.then(function (d) {\n\n if (!!d.students && !!d.students.length) {\n modelToSave.studentIds = [d.students[0].id];\n modelEquals = false;\n }\n\n if (!modelEquals) {\n leadSvc.update(modelToSave).$promise.then(success, error);\n }\n\n }, error);\n }\n else \n {\n if (!modelEquals) {\n leadSvc.update(modelToSave).$promise.then(success, error);\n } else {\n success();\n }\n }\n }\n else {\n if (!modelEquals) {\n leadSvc.update(modelToSave).$promise.then(success, error);\n } else {\n success();\n }\n }\n\n }, error);\n } else {\n if (!modelEquals) {\n leadSvc.update(modelToSave).$promise.then(function s() {\n if (!modelToSave.isNotRegisteredUser &&\n $scope.modelOrig.isNotRegisteredUser &&\n (modelToSave.leadSourceType == 2 || modelToSave.leadSourceType == 3 || modelToSave.leadSourceType == 4) &&\n !!$scope.modelOrig.userId) {\n notRegisteredUserSvc.remove($scope.modelOrig.userId).$promise.then(success, error);\n } else {\n success();\n }\n }, error);\n }\n }\n }\n\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n if (!!$scope.onLeadSave) {\n $scope.onLeadSave(modelToSave);\n }\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n\n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"leads/leads-detail-main-tab.html\"\n }, {\n title: 'TXT_LBL_USER',\n template: \"leads/leads-detail-user-tab.html\"\n }];\n\n if ($scope.model.isNew) {\n $scope.detailTabs.push({\n title: 'TXT_LBL_NOTES',\n template: \"leads/leads-detail-notes-tab.html\"\n });\n }\n\n $scope.detailTabs.activeTab = 0;\n\n\n $scope.onBindUserAndStudentClick = function() \n {\n bindUserAndStudentDialogPromise.$promise.then(function () {\n bindUserAndStudentDialogPromise.$scope.notRegisteredUserInfo = $scope.notRegisteredUserInfo;\n bindUserAndStudentDialogPromise.$scope.onUserAndStudentAssigned = function (model) {\n $scope.model.userId = model.userID;\n $scope.model.studentIds = [model.studentID];\n $scope.model.isNotRegisteredUser = false;\n $scope.notRegisteredUserInfo = null;\n\n loadUser();\n };\n bindUserAndStudentDialogPromise.show();\n });\n }\n\n $scope.onChangeUserAndOrStudentClick = function()\n {\n bindUserAndStudentDialogPromise.$promise.then(function () {\n bindUserAndStudentDialogPromise.$scope.notRegisteredUserInfo = null;\n bindUserAndStudentDialogPromise.$scope.inputModel = {\n userID: $scope.model.userId,\n studentID: $scope.model.studentIds != null && $scope.model.studentIds.length > 0\n ? $scope.model.studentIds[0]\n : null\n };\n bindUserAndStudentDialogPromise.$scope.onUserAndStudentAssigned = function (model) {\n $scope.model.userId = model.userID;\n $scope.model.studentIds = [model.studentID];\n $scope.model.isNotRegisteredUser = false;\n $scope.notRegisteredUserInfo = null;\n\n loadUser();\n };\n bindUserAndStudentDialogPromise.show();\n });\n }\n\n var bindUserAndStudentDialogPromise = $modal({\n templateUrl: 'leads/leads/leads-bind-user-and-student-detail.html',\n show: false, \n scope: $scope.$new()\n });\n\n if (!$scope.model.isNew) {\n loadData($scope.leadId);\n } else {\n $scope.isDisabled = false;\n $scope.onAnonymousBtnClick();\n }\n\n}]);\n","wbApp.controller('LeadsSelectOpenLeadsDialogCtrl', ['$scope', '$modal', '$translate', '$q', '$filter', \nfunction ($scope, $modal, $translate, $q, $filter) {\n\n\n $scope.onLeadSelectionDetailSave = function (model) {\n $scope.onLeadSelected($scope.selectedLead);\n $scope.$hide();\n }\n\n $scope.onLeadSelectionDetailCancel = function () {\n $scope.onLeadSelected(null);\n $scope.$hide();\n }\n\n $scope.onLeadSelectionRowSelected = function (row) {\n $scope.selectedLead = row;\n }\n\n $scope.canBeSaved = function () {\n return !!$scope.selectedLead;\n }\n\n $scope.leadSelectionGridSettings = {\n name: 'leadSelection',\n keyExpr: 'id',\n columns: [\n {\n dataField: 'id',\n caption: $translate.instant('TXT_LBL_ID'),\n dataType: 'string',\n visible: false,\n showInColumnChooser: false\n },\n {\n dataField: 'createdAtUtc',\n caption: $translate.instant('TXT_LBL_CREATED_AT'),\n dataType: 'date',\n format: { type: 'shortDateShortTime' },\n width: '140px',\n sortOrder: 'desc',\n calculateCellValue: function (rowData) {\n if (rowData.auditEvents && rowData.auditEvents.length != 0) {\n return rowData.auditEvents[0].eventTimeUtc;\n }\n return '';\n },\n },\n {\n dataField: 'leadSourceType',\n caption: $translate.instant('TXT_CONSENT_TYPE'),\n dataType: 'string',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_LEAD_SOURCE_FORM_RESPONSE') },\n { id: 1, name: $translate.instant('TXT_LEAD_SOURCE_FULL_COURSE_INTEREST') },\n { id: 2, name: $translate.instant('TXT_LEAD_SOURCE_PHONE') },\n { id: 3, name: $translate.instant('TXT_LEAD_SOURCE_EMAIL') },\n { id: 4, name: $translate.instant('TXT_LEAD_SOURCE_PERSONAL_CONTACT') },\n { id: 5, name: $translate.instant('TXT_LEAD_SOURCE_COURSE_INTEREST') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n width: '70px'\n },\n {\n dataField: 'leadSourceName', caption: $translate.instant('TXT_NAME'),\n dataType: 'string',\n width: '120px'\n },\n {\n dataField: 'leadSourceText', caption: $translate.instant('TXT_LBL_TEXT'),\n dataType: 'string'\n }\n ]\n };\n}]);\n","wbApp.controller('LeadsTabsCrmNotesCtrl', ['$scope', '$modal', '$translate', 'leadSvc', 'notificationSvc',\nfunction ($scope, $modal, $translate, leadSvc, notificationSvc) {\n\n $scope.leadNotes = [];\n var selectedLead = null;\n var fullLead = null;\n\n var isActive = false;\n var loaded = false;\n\n $scope.$on('leadSelectionChanged', function (e, newlySelectedLead) {\n if (newlySelectedLead) {\n if (isActive) {\n loadData(newlySelectedLead.id);\n } else {\n loaded = false;\n }\n }\n else {\n $scope.leadNotes = [];\n fullLead = null;\n }\n\n selectedLead = newlySelectedLead;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 3) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedLead) {\n loadData(selectedLead.id);\n }\n }\n } else {\n isActive = false;\n }\n });\n\n function loadData(id) {\n $scope.leadNotes = [];\n leadSvc.getById(id).$promise.then(function (data) {\n fullLead = data;\n $scope.leadNotes = fullLead.notes;\n loaded = true;\n }, function (error) {\n fullLead = null;\n $scope.leadNotes = [];\n loaded = false;\n });\n }\n\n $scope.onRowAdd = function () {\n leadsNoteDetailPromise.$promise.then(function () {\n leadsNoteDetailPromise.$scope.leadId = selectedLead.id;\n leadsNoteDetailPromise.$scope.noteId = null;\n leadsNoteDetailPromise.$scope.onLeadSave = function (model) {\n $scope.$emit('leadChanged', { id: selectedLead.id });\n };\n leadsNoteDetailPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n leadsNoteDetailPromise.$promise.then(function () {\n leadsNoteDetailPromise.$scope.leadId = selectedLead.id;\n leadsNoteDetailPromise.$scope.noteId = data.id;\n leadsNoteDetailPromise.$scope.onLeadSave = function () {\n $scope.$emit('leadChanged', { id: selectedLead.id });\n };\n leadsNoteDetailPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n leadSvc.getById(fullLead.id).$promise.then(function (lead) {\n if (lead.status == 1) {\n notificationSvc.notifyError($translate.instant('TXT_ERROR_LEAD_ALREADY_CONVERTED'));\n }\n else {\n\n if (!!lead.notes && typeof data.id !== 'undefined' || data.id !== null) {\n var idx = _.findIndex(lead.notes, { 'id': data.id });\n if (idx != -1) {\n lead.notes.splice(idx, 1);\n leadSvc.update(lead).$promise.then(function () {\n $scope.$emit('leadChanged', { id: selectedLead.id });\n });\n }\n }\n }\n });\n }\n\n $scope.leadNotesGridSettings = {\n name: 'leadNotes',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'number', visible: false },\n {\n dataField: 'text', caption: $translate.instant('TXT_LBL_NOTE'), dataType: 'string'\n\n },\n { dataField: 'nextContactAtUtc', caption: $translate.instant('TXT_LBL_NEXT_CONTACT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px' },\n { dataField: 'updatedAtUtc', caption: $translate.instant('TXT_LBL_UPDATED_AT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px', sortOrder: 'desc' },\n { dataField: 'updatedByName', caption: $translate.instant('TXT_LBL_UPDATED_BY'), dataType: 'string', width: '160px' },\n ],\n shouldDisableAdd: function () { return !selectedLead || selectedLead.status == 1; },\n shouldDisableEdit: function () { return !selectedLead || selectedLead.status == 1; },\n shouldDisableDelete: function () { return !selectedLead || selectedLead.status == 1; },\n\n }\n\n var leadsNoteDetailPromise = $modal({\n templateUrl: 'leads/leads-detail-tabs/crm-notes-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('LeadsTabsCrmNotesDetailCtrl', ['$scope', '$modal', '$translate', 'leadSvc', 'securitySvc',\nfunction ($scope, $modal, $translate, leadSvc, securitySvc) {\n\n $scope.model = {}; // Single note\n $scope.lead = null; // Full lead object\n $scope.isDisabled = true;\n\n function loadData(leadId, noteId) {\n $scope.isLoading = true;\n\n leadSvc.getById(leadId).$promise.then(function (data) {\n\n $scope.lead = data;\n\n if ($scope.lead.status == 1) {\n $scope.detailError = { errors: [{ message: $translate.instant('TXT_ERROR_LEAD_ALREADY_CONVERTED') }] };\n $scope.isSaving = false;\n $scope.isDisabled = true;\n } else {\n $scope.isDisabled = false;\n }\n\n if (!data.notes || typeof noteId === 'undefined' || noteId === null) {\n data.notes = data.notes || [];\n $scope.model = {};\n data.notes.push($scope.model);\n } else {\n var idx = _.findIndex(data.notes, { 'id': noteId });\n if (idx != -1) {\n $scope.model = data.notes[idx];\n if ($scope.model) {\n $scope.model.updatedAtUtc = moment().toDate();\n var user = securitySvc.loggedInUser();\n\n $scope.model.updatedByUserId = user.userID + \"\";\n $scope.model.updatedByName = user.fullName;\n }\n } else {\n $scope.model = {};\n data.notes.push($scope.model);\n }\n }\n \n $scope.leadOrig = angular.copy($scope.lead);\n\n $scope.isLoading = false;\n }, function (error) {\n $scope.model = {};\n $scope.isLoading = false;\n });\n }\n\n loadData($scope.leadId, $scope.noteId);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.leadOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function () {\n\n $scope.isSaving = true;\n\n leadSvc.update($scope.lead).$promise.then(success, error);\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n if (!!$scope.onLeadSave) {\n $scope.onLeadSave($scope.lead);\n }\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n\n}]);\n","wbApp.controller('LeadsTabsDetailCtrl', ['$scope', '$modal', '$translate', 'userSvc', 'notRegisteredUserSvc',\nfunction ($scope, $modal, $translate, userSvc, notRegisteredUserSvc) {\n\n $scope.selectedLead = null;\n $scope.userEmailAddress = ''\n\n $scope.$on('leadSelectionChanged', function (e, newlySelectedLead) {\n $scope.selectedLead = newlySelectedLead;\n });\n\n}]);\n","wbApp.controller('LeadsTabsUserHistoryActionsCtrl', ['$scope', '$modal', '$translate', 'courseRegistrationSvc', 'gridSortSvc',\nfunction ($scope, $modal, $translate, courseRegistrationSvc, gridSortSvc) {\n\n var selectedLead = null;\n var isActive = false;\n var loaded = false;\n\n $scope.$on('leadSelectionChanged', function (e, newlySelectedLead) {\n if (newlySelectedLead) {\n if (isActive) {\n loadData(newlySelectedLead);\n } else {\n loaded = false;\n }\n }\n else {\n $scope.leadNotes = [];\n fullLead = null;\n }\n\n selectedLead = newlySelectedLead;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 2) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedLead) {\n loadData(selectedLead);\n }\n }\n } else {\n isActive = false;\n }\n });\n\n function loadData(lead) {\n if (lead.isNotRegisteredUser) {\n $scope.courseRegistrations = [];\n loaded = true;\n }\n else {\n $scope.leadNotes = [];\n courseRegistrationSvc.getAllActionsByUser(lead.userId).$promise.then(function (data) {\n $scope.courseRegistrations = data;\n loaded = true;\n }, function (error) {\n $scope.courseRegistrations = [];\n loaded = false;\n });\n }\n }\n\n function getFullName(name, middleName, surName) {\n var fullName = name;\n if (!!middleName) {\n if (!!fullName) {\n fullName = fullName + \" \" + middleName;\n }\n else {\n fullName = middleName;\n }\n }\n\n if (!!surName) {\n if (!!fullName)\n fullName = fullName + \" \" + surName;\n else\n fullName = surName;\n }\n\n return fullName;\n }\n\n $scope.courseRegistrationsGridSettings = {\n name: 'courseRegistrations',\n columns: [\n { dataField: 'courseRegistrationID', caption: $translate.instant('TXT_LBL_ID'), dataType: 'number', visible: false },\n {\n dataField: 'studentSurname',\n caption: $translate.instant('TXT_LBL_STUDENT'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return getFullName(rowData.studentName, rowData.studentMiddleName, rowData.studentSurname);\n },\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName(data, 'studentName', 'studentSurname', 'studentMiddleName') }, \n width: '140px'\n },\n { dataField: 'semesterName', caption: $translate.instant('TXT_LBL_SEMESTER'), dataType: 'string', width: '140px' },\n { dataField: 'courseFullName', caption: $translate.instant('TXT_LBL_ACTIONS'), dataType: 'string', width: '300px' },\n {\n dataField: 'firstDate',\n caption: $translate.instant('TXT_MENU_SCHEDULE'),\n dataType: 'date',\n format: { raw: \"dd.MM.yy EEE HH:mm\" },\n calculateSortValue: function (rowData) {\n var mfirstLesson = moment(rowData.firstLesson);\n return mfirstLesson.isValid()\n ? mfirstLesson.day() * 10000 + mfirstLesson.hour() * 100 + mfirstLesson.minute()\n : rowData.firstLesson;\n },\n width: '120px'\n },\n { dataField: 'notes', caption: $translate.instant('TXT_LBL_NOTE'), dataType: 'string' },\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'paymentsSum', caption: $translate.instant('TXT_LBL_PAYMENTS'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'registrationDate', caption: $translate.instant('TXT_LBL_REGISTRATION_DATE'), dataType: 'date', format: { type: 'shortDate' }, width: '100px', sortOrder: 'desc' },\n ],\n onRowPrepared: function (e) {\n if (!!selectedLead && selectedLead.conversionType == 2 && !!selectedLead.conversionReferenceId) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.courseRegistrationID == selectedLead.conversionReferenceId) {\n e.rowElement.addClass('text-danger');\n }\n }\n }\n },\n\n }\n\n}]);\n","wbApp.controller('LeadsTabsUserHistoryCoursesCtrl', ['$scope', '$modal', '$translate', 'courseRegistrationSvc', 'gridSortSvc',\nfunction ($scope, $modal, $translate, courseRegistrationSvc, gridSortSvc) {\n\n var selectedLead = null;\n var isActive = false;\n var loaded = false;\n\n $scope.$on('leadSelectionChanged', function (e, newlySelectedLead) {\n if (newlySelectedLead) {\n if (isActive) {\n loadData(newlySelectedLead);\n } else {\n loaded = false;\n }\n }\n else {\n $scope.leadNotes = [];\n fullLead = null;\n }\n\n selectedLead = newlySelectedLead;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 1) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedLead) {\n loadData(selectedLead);\n }\n }\n } else {\n isActive = false;\n }\n });\n\n function loadData(lead) {\n if (lead.isNotRegisteredUser) {\n $scope.courseRegistrations = [];\n loaded = true;\n }\n else {\n $scope.leadNotes = [];\n courseRegistrationSvc.getAllCoursesByUser(lead.userId).$promise.then(function (data) {\n $scope.courseRegistrations = data;\n loaded = true;\n }, function (error) {\n $scope.courseRegistrations = [];\n loaded = false;\n });\n }\n }\n\n function getFullName(name, middleName, surName) {\n var fullName = name;\n if (!!middleName) {\n if (!!fullName) {\n fullName = fullName + \" \" + middleName;\n }\n else {\n fullName = middleName;\n }\n }\n\n if (!!surName) {\n if (!!fullName)\n fullName = fullName + \" \" + surName;\n else\n fullName = surName;\n }\n\n return fullName;\n }\n\n $scope.courseRegistrationsGridSettings = {\n name: 'courseRegistrations',\n columns: [\n { dataField: 'courseRegistrationID', caption: $translate.instant('TXT_LBL_ID'), dataType: 'number', visible: false },\n {\n dataField: 'studentSurname',\n caption: $translate.instant('TXT_LBL_STUDENT'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return getFullName(rowData.studentName, rowData.studentMiddleName, rowData.studentSurname);\n },\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName(data, 'studentName', 'studentSurname', 'studentMiddleName') }, \n width: '140px'\n },\n { dataField: 'semesterName', caption: $translate.instant('TXT_LBL_SEMESTER'), dataType: 'string', width: '140px' },\n { dataField: 'courseFullName', caption: $translate.instant('TXT_LBL_COURSE'), dataType: 'string', width: '300px' },\n {\n dataField: 'firstDate',\n caption: $translate.instant('TXT_MENU_SCHEDULE'),\n dataType: 'date',\n format: { raw: \"EEE HH:mm\" },\n calculateSortValue: function (rowData) {\n var mfirstLesson = moment(rowData.firstLesson);\n return mfirstLesson.isValid()\n ? mfirstLesson.day() * 10000 + mfirstLesson.hour() * 100 + mfirstLesson.minute()\n : rowData.firstLesson;\n },\n width: '90px'\n },\n { dataField: 'notes', caption: $translate.instant('TXT_LBL_NOTE'), dataType: 'string' },\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'paymentsSum', caption: $translate.instant('TXT_LBL_PAYMENTS'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'registrationDate', caption: $translate.instant('TXT_LBL_REGISTRATION_DATE'), dataType: 'date', format: { type: 'shortDate' }, width: '100px', sortOrder: 'desc' },\n ],\n onRowPrepared: function (e) {\n if (!!selectedLead && selectedLead.conversionType == 1 && !!selectedLead.conversionReferenceId) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.courseRegistrationID == selectedLead.conversionReferenceId) {\n e.rowElement.addClass('text-danger');\n }\n }\n }\n },\n\n }\n\n}]);\n","wbApp.controller('LevelsCtrl', ['$scope', '$modal', '$translate', '$timeout', '$q', 'levelSvc',\nfunction ($scope, $modal, $translate, $timeout, $q, levelSvc) {\n\n function refreshData(reselect)\n {\n return $q(function (resolve, reject) {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n var all = levelSvc.getAll(true);\n all.$promise.then(function (data) {\n $scope.levels = data;\n\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedLevel(null);\n }\n })\n }, 100);\n }\n else {\n setSelectedLevel(null);\n }\n\n resolve();\n\n }, function (error) {\n $scope.levels = [];\n setSelectedLevel(null);\n\n reject();\n });\n });\n }\n\n refreshData();\n\n $scope.$on('refreshData', function (e, data) {\n refreshData(true);\n });\n\n $scope.gridSettings = {\n name: 'levels',\n keyExpr: 'id',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '160px', sortOrder: 'asc' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string', width: '60px' },\n ]\n }\n\n\n $scope.onRowSelected = function (data) {\n setSelectedLevel(data);\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = levelSvc.createNew();\n detailDialogPromise.$scope.onLevelSave = function (model) {\n refreshData().then(function() {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedLevel(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onLevelSave = function () {\n refreshData(true);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n levelSvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n }\n\n function setSelectedLevel(level, refresh) {\n $scope.selectedLevel = level;\n $scope.$broadcast('levelSelectionChanged', $scope.selectedLevel);\n }\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'levels/levels-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);\n","wbApp.controller('LevelsDetailCtrl', ['$scope', '$modal', 'levelSvc',\nfunction ($scope, $modal, levelSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n levelSvc.insert(data)\n .$promise.then(success, error);\n } else {\n levelSvc.update(data)\n .$promise.then(success, error);\n }\n\n function success(newModel) {\n $scope.onLevelSave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function() {\n return true;\n }\n}]);\n","wbApp.controller('PhasesCtrl', ['$scope', '$modal', '$translate', '$timeout', '$q', 'phaseSvc',\nfunction ($scope, $modal, $translate, $timeout, $q, phaseSvc) {\n\n function refreshData(reselect)\n {\n return $q(function (resolve, reject) {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n var all = phaseSvc.getAll(true);\n all.$promise.then(function (data) {\n $scope.phases = data;\n\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedPhase(null);\n }\n })\n }, 100);\n }\n else {\n setSelectedPhase(null);\n }\n\n resolve();\n\n }, function (error) {\n $scope.phases = [];\n setSelectedPhase(null);\n\n reject();\n });\n });\n }\n\n refreshData();\n\n $scope.$on('refreshData', function (e, data) {\n refreshData(true);\n });\n\n $scope.gridSettings = {\n name: 'phases',\n keyExpr: 'id',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '160px', sortOrder: 'asc' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string', width: '60px' },\n ]\n }\n\n\n $scope.onRowSelected = function (data) {\n setSelectedPhase(data);\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = phaseSvc.createNew();\n detailDialogPromise.$scope.onPhaseSave = function (model) {\n refreshData().then(function() {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedPhase(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onPhaseSave = function () {\n refreshData(true);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n phaseSvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n }\n\n function setSelectedPhase(phase, refresh) {\n $scope.selectedPhase = phase;\n $scope.$broadcast('phaseSelectionChanged', $scope.selectedPhase);\n }\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'phases/phases-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);\n","wbApp.controller('PhasesDetailCtrl', ['$scope', '$modal', 'phaseSvc',\nfunction ($scope, $modal, phaseSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n phaseSvc.insert(data)\n .$promise.then(success, error);\n } else {\n phaseSvc.update(data)\n .$promise.then(success, error);\n }\n\n function success(newModel) {\n $scope.onPhaseSave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function() {\n return true;\n }\n}]);\n","'use strict';\n\nwbApp.directive('wbFlagCombo', ['$timeout', '$translate', 'leadSvc',\n function ($timeout, $translate, leadSvc) {\n function formatResult(model) {\n return \"  \" + $translate.instant(model.text);\n }\n\n function formatSelection(model) {\n return \"  \" + $translate.instant(model.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_LBL_FLAG'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: -1,\n id: function (model) { return model.id; },\n data: [\n { id: 0, text: 'TXT_FLAG_RED' },\n { id: 1, text: 'TXT_FLAG_ORANGE' },\n { id: 2, text: 'TXT_FLAG_YELLOW' },\n { id: 3, text: 'TXT_FLAG_GREEN' },\n { id: 4, text: 'TXT_FLAG_BLUE' },\n { id: 5, text: 'TXT_FLAG_PURPLE' },\n { id: 6, text: 'TXT_FLAG_GRAY' },\n ] \n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (String.prototype.isNullOrWhitespace(viewValue)) {\n return null;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!typeof value === 'undefined' || value === null) {\n return value;\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbFormAccessPermissionsTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n ctrl.$parsers.unshift(function (viewValue) {\n return Number(viewValue);\n });\n\n ctrl.$formatters.unshift(function (value) {\n return value + '';\n });\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n data: [\n { id: 0, text: 'TXT_FROM_ACCESS_PERMISSION_TYPE_LOGGED_IN_USERS_ONLY_STUDENT_REQUIRED' },\n { id: 3, text: 'TXT_FROM_ACCESS_PERMISSION_TYPE_LOGGED_IN_USERS_ONLY_NO_STUDENT' },\n { id: 2, text: 'TXT_FROM_ACCESS_PERMISSION_TYPE_ALLOW_ANONYMOUS_STUDENT_REQUIRED' },\n { id: 1, text: 'TXT_FROM_ACCESS_PERMISSION_TYPE_ALLOW_ANONYMOUS_NO_STUDENT' },\n ]\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);\n","'use strict';\n\nwbApp.directive('wbFormQuestionTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n ctrl.$parsers.unshift(function (viewValue) {\n return Number(viewValue);\n });\n\n ctrl.$formatters.unshift(function (value) {\n return value + '';\n });\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n data: [\n { id: 0, text: 'TXT_FROM_QUESTION_TYPE_SINGLE_SELECT' },\n { id: 1, text: 'TXT_FROM_QUESTION_TYPE_MULTI_SELECT' },\n { id: 2, text: 'TXT_FROM_QUESTION_TYPE_SINGLE_SELECT_PLUS' },\n { id: 3, text: 'TXT_FROM_QUESTION_TYPE_MULTI_SELECT_PLUS' },\n { id: 4, text: 'TXT_FROM_QUESTION_TYPE_TEXT' }\n ]\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);\n","'use strict';\n\nwbApp.directive('wbFormTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n ctrl.$parsers.unshift(function (viewValue) {\n return Number(viewValue);\n });\n\n ctrl.$formatters.unshift(function (value) {\n return value + '';\n });\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n data: [\n { id: 0, text: 'TXT_FROM_TYPE_GENERIC' },\n { id: 1, text: 'TXT_FROM_TYPE_KINDERGARTEN_ENROLLMENT' }\n ]\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);\n","'use strict';\n\nwbApp.directive('wbLeadSourceTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(paymentType) {\n if (!paymentType) { return; }\n return $translate.instant(paymentType.text);\n }\n\n function formatSelection(paymentType) {\n return $translate.instant(paymentType.text);\n }\n\n function shouldBeVisible(visibleSelection, id) {\n if (visibleSelection) {\n return visibleSelection.includes(id + '');\n }\n\n return true;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n model: '=ngModel',\n visibleSelection: '=',\n },\n link: function (scope, elm, attrs, controller) {\n\n var data = [];\n if (shouldBeVisible(scope.visibleSelection, 0)) {\n data.push({ id: 0, text: 'TXT_LEAD_SOURCE_FORM_RESPONSE' });\n }\n if (shouldBeVisible(scope.visibleSelection, 1)) {\n data.push({ id: 1, text: 'TXT_LEAD_SOURCE_FULL_COURSE_INTEREST' });\n }\n if (shouldBeVisible(scope.visibleSelection, 2)) {\n data.push({ id: 2, text: 'TXT_LEAD_SOURCE_PHONE' });\n }\n if (shouldBeVisible(scope.visibleSelection, 3)) {\n data.push({ id: 3, text: 'TXT_LEAD_SOURCE_EMAIL' });\n }\n if (shouldBeVisible(scope.visibleSelection, 4)) {\n data.push({ id: 4, text: 'TXT_LEAD_SOURCE_PERSONAL_CONTACT' });\n }\n if (shouldBeVisible(scope.visibleSelection, 5)) {\n data.push({ id: 5, text: 'TXT_LEAD_SOURCE_COURSE_INTEREST' });\n }\n if (shouldBeVisible(scope.visibleSelection, 6)) {\n data.push({ id: 6, text: 'TXT_LEAD_SOURCE_FORM_RESPONSE_KINDERGARTEN_ENROLLMENT' });\n } \n\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: data\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbLeadStatusCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(paymentType) {\n if (!paymentType) { return; }\n return $translate.instant(paymentType.text);\n }\n\n function formatSelection(paymentType) {\n return $translate.instant(paymentType.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n model: '=ngModel',\n disabledSelection: '=',\n },\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_LEAD_STATUS_OPEN', disabled: scope.disabledSelection === 0 },\n { id: 1, text: 'TXT_LEAD_STATUS_CONVERTED', disabled: scope.disabledSelection === 1 },\n { id: 2, text: 'TXT_LEAD_STATUS_CANNOT_CONTACT', disabled: scope.disabledSelection === 2 },\n { id: 3, text: 'TXT_LEAD_STATUS_NO_LONGER_INTERESTED', disabled: scope.disabledSelection === 3 },\n { id: 4, text: 'TXT_LEAD_STATUS_CANCELED', disabled: scope.disabledSelection === 4 }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbPhaseCombo', ['$timeout', '$translate', 'phaseSvc', 'gridSortSvc',\n function ($timeout, $translate, phaseSvc, gridSortSvc) {\n function formatResult(model) {\n if (!model) {\n return \"\";\n }\n\n return model.name;\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n link: function (scope, elm, attrs, controller) {\n\n var models = phaseSvc.getAll();\n\n models.$promise.then(function () {\n $timeout(function () {\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_PHASE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: 5,\n id: function (model) { return model.id; },\n data: _.sortBy(models, function (a) { return gridSortSvc.localeSort(a, 'name'); }),\n matcher: function (term, text, data) {\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n }\n });\n\n controller.$render();\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n }, 1);\n }\n }\n }]);","wbApp.filter('wbFlag', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 0:\n return $translate.instant('TXT_FLAG_RED');\n case 1:\n return $translate.instant('TXT_FLAG_ORANGE');\n case 2:\n return $translate.instant('TXT_FLAG_YELLOW');\n case 3:\n return $translate.instant('TXT_FLAG_GREEN');\n case 4:\n return $translate.instant('TXT_FLAG_BLUE');\n case 5:\n return $translate.instant('TXT_FLAG_PURPLE');\n case 6:\n return $translate.instant('TXT_FLAG_GRAY');\n default:\n return '';\n }\n };\n}]);","wbApp.filter('formAccessPermissionsType', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 0:\n return $translate.instant('TXT_FROM_ACCESS_PERMISSION_TYPE_LOGGED_IN_USERS_ONLY_STUDENT_REQUIRED');\n case 1:\n return $translate.instant('TXT_FROM_ACCESS_PERMISSION_TYPE_ALLOW_ANONYMOUS_NO_STUDENT');\n case 2:\n return $translate.instant('TXT_FROM_ACCESS_PERMISSION_TYPE_ALLOW_ANONYMOUS_STUDENT_REQUIRED');\n case 3:\n return $translate.instant('TXT_FROM_ACCESS_PERMISSION_TYPE_LOGGED_IN_USERS_ONLY_NO_STUDENT');\n default:\n return '';\n }\n };\n}]);","wbApp.filter('leadConversionType', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 0:\n return $translate.instant('TXT_LEAD_CONVERSION_TYPE_NONE');\n case 1:\n return $translate.instant('TXT_LEAD_CONVERSION_TYPE_COURSE_REGISTRACTION');\n default:\n return '';\n }\n };\n}]);","wbApp.filter('leadSourceType', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 0:\n return $translate.instant('TXT_LEAD_SOURCE_FORM_RESPONSE');\n case 1:\n return $translate.instant('TXT_LEAD_SOURCE_FULL_COURSE_INTEREST');\n case 2:\n return $translate.instant('TXT_LEAD_SOURCE_PHONE');\n case 3:\n return $translate.instant('TXT_LEAD_SOURCE_EMAIL');\n case 4:\n return $translate.instant('TXT_LEAD_SOURCE_PERSONAL_CONTACT');\n case 5:\n return $translate.instant('TXT_LEAD_SOURCE_COURSE_INTEREST');\n case 6:\n return $translate.instant('TXT_LEAD_SOURCE_FORM_RESPONSE_KINDERGARTEN_ENROLLMENT'); \n default:\n return '';\n }\n };\n}]);","wbApp.filter('leadStatus', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 0:\n return $translate.instant('TXT_LEAD_STATUS_OPEN');\n case 1:\n return $translate.instant('TXT_LEAD_STATUS_CONVERTED');\n case 2:\n return $translate.instant('TXT_LEAD_STATUS_CANNOT_CONTACT');\n case 3:\n return $translate.instant('TXT_LEAD_STATUS_NO_LONGER_INTERESTED');\n case 4:\n return $translate.instant('TXT_LEAD_STATUS_CANCELED');\n default:\n return '';\n }\n };\n}]);","wbApp.filter('wbLevel', ['$translate', 'levelSvc', function ($translate, levelSvc) {\n var models = levelSvc.getAll();\n\n function asyncResult(input) {\n if (models.$resolved) {\n var model = _.find(models, { id: input });\n if (model) {\n return model.name;\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n }\n\n asyncResult.$stateful = true;\n\n return asyncResult;\n}]);","wbApp.filter('wbPhase', ['$translate', 'phaseSvc', function ($translate, phaseSvc) {\n var models = phaseSvc.getAll();\n\n function asyncResult(input) {\n if (models.$resolved) {\n var model = _.find(models, { id: input });\n if (model) {\n return model.name;\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n }\n\n asyncResult.$stateful = true;\n\n return asyncResult;\n}]);","wbApp.factory('leadSvc', ['$resource', '$q','repositorySvc',\n function ($resource, $q, repositorySvc) {\n\n var Lead = $resource('/restapi/leads/:id', {}, {\n 'getById': { method: 'GET', url: '/restapi/leads/:id' },\n 'getAllByStatusAndDateRange': { method: 'GET', isArray: true, url: 'restapi/leads/info/range/find-by-status' },\n 'getAllByStatusAndSemester': { method: 'GET', isArray: true, url: 'restapi/leads/info/find-by-status-and-semester' },\n 'getAllByStatusAndStudent': { method: 'GET', isArray: true, url: 'restapi/leads/find-by-status-and-student' },\n 'getAllByStatusAndCourse': { method: 'GET', isArray: true, url: 'restapi/leads/info/find-by-status-and-course' },\n 'insert': { method: 'POST', url: '/restapi/leads' },\n 'update': { method: 'PUT', url: '/restapi/leads/:id' },\n 'delete': { method: 'DELETE', url: '/restapi/leads/:id' },\n 'admissionAcceptanceNotification': { method: 'POST', url: '/restapi/leads/:id/admission/acceptance-notification' },\n 'admissionRejectionNotification': { method: 'POST', url: '/restapi/leads/:id/admission/rejection-notification' },\n });\n\n function createNew()\n {\n var lead = {\n userId: null,\n studentIds: [],\n semesterId: null,\n leadSourceType: 3,\n leadSourceName: null,\n leadSourceText: null,\n leadSourceReferenceId: null,\n status: 0,\n conversionType: 0,\n notes: [{\n }],\n auditEvents: [],\n marker: null,\n levelId: null,\n phaseId: null,\n isNotRegisteredUser: false,\n isNew: true\n };\n\n return lead;\n }\n\n function admissionAcceptanceNotification(id, contractTemplateId, success, error) {\n return repositorySvc.customPostWithParams(\n 'admissionAcceptanceNotification',\n Lead,\n { id: id, contractTemplateId: contractTemplateId },\n null,\n success,\n error\n );\n }\n\n function admissionRejectionNotification(id, contractTemplateId, success, error) {\n return repositorySvc.customPostWithParams(\n 'admissionRejectionNotification',\n Lead,\n { id: id, contractTemplateId: contractTemplateId },\n null,\n success,\n error\n );\n } \n\n function insert(model) {\n return repositorySvc.customPost(\n 'insert',\n Lead,\n convertDatesToDateString(model));\n }\n\n function remove(leadId) {\n return repositorySvc.customDelete(\n 'delete',\n Lead,\n { id: leadId });\n }\n\n function update(model) {\n return repositorySvc.customPutWithParams(\n 'update',\n Lead,\n { id: model.id },\n convertDatesToDateString(model));\n }\n\n function getById(leadId) {\n return repositorySvc.customGet('getById', Lead, { id: leadId });\n }\n\n\n function getAllByStatusAndDateRange(status, fromDateUtc, toDateUtc) {\n return repositorySvc.customGet('getAllByStatusAndDateRange', Lead, {\n status: status,\n fromDateUtc: fromDateUtc,\n toDateUtc: moment(toDateUtc).endOf('day').toDate(),\n expanded: 'PersonalInformation'\n });\n }\n\n function getAllByStatusAndSemester(status, semesterId) {\n return repositorySvc.customGet('getAllByStatusAndSemester', Lead, {\n status: status,\n semesterId: semesterId,\n expanded: 'PersonalInformation'\n });\n }\n\n function getAllByStatusAndStudent(status, studentId) {\n return repositorySvc.customGet('getAllByStatusAndStudent', Lead, {\n status: status,\n studentId: studentId\n });\n }\n\n function getAllByStatusAndCourse(status, courseId) {\n return repositorySvc.customGet('getAllByStatusAndCourse', Lead, {\n status: status,\n courseId: courseId,\n expanded: 'PersonalInformation'\n });\n }\n\n function markerIdToColor(markerId) {\n switch (markerId) {\n case 0: return \"#f23430\"; // red\n case 1: return \"#f38b24\"; // orange\n case 2: return \"#f4c12c\"; // yellow\n case 3: return \"#2cc141\"; // green\n case 4: return \"#1374f1\"; // blue\n case 5: return \"#9e50c6\"; // purple\n case 6: return \"#848489\"; // gray\n default: return 'white';\n }\n }\n\n return {\n createNew: createNew,\n getById: getById,\n getAllByStatusAndDateRange: getAllByStatusAndDateRange,\n getAllByStatusAndSemester: getAllByStatusAndSemester,\n getAllByStatusAndStudent: getAllByStatusAndStudent,\n getAllByStatusAndCourse: getAllByStatusAndCourse,\n insert: insert,\n remove: remove,\n update: update,\n markerIdToColor: markerIdToColor,\n admissionAcceptanceNotification: admissionAcceptanceNotification,\n admissionRejectionNotification: admissionRejectionNotification\n }\n }\n]);","wbApp.factory('notRegisteredUserSvc', ['$resource', '$q', 'repositorySvc',\n function ($resource, $q, repositorySvc) {\n\n var NotRegistredUser = $resource('/restapi/not-registered-users/:id', {}, {\n 'getById': { method: 'GET', url: '/restapi/not-registered-users/:id' },\n 'getAll': { method: 'GET', isArray: true, url: 'restapi/not-registered-users' },\n 'insert': { method: 'POST', url: '/restapi/not-registered-users' },\n 'update': { method: 'PUT', url: '/restapi/not-registered-users/:id' },\n 'delete': { method: 'DELETE', url: '/restapi/not-registered-users/:id' },\n });\n\n var notRegisteredUsers;\n\n function createNew()\n {\n var notRegisteredUsers = {\n isNew: true,\n students: [{\n }]\n };\n\n return notRegisteredUsers;\n }\n\n function insert(model) {\n return repositorySvc.customPost(\n 'insert',\n NotRegistredUser,\n model);\n }\n\n function remove(userId) {\n notRegisteredUsers = null;\n return repositorySvc.customDelete(\n 'delete',\n NotRegistredUser,\n { id: userId });\n }\n\n function update(model) {\n notRegisteredUsers = null;\n return repositorySvc.customPutWithParams(\n 'update',\n NotRegistredUser,\n { id: model.id },\n model);\n }\n\n function getById(userId) {\n return repositorySvc.customGet('getById', NotRegistredUser, { id: userId });\n }\n\n function getAll(refresh) {\n if (!notRegisteredUsers || refresh) {\n notRegisteredUsers = repositorySvc.customGet('getAll', NotRegistredUser, {});\n }\n return notRegisteredUsers;\n }\n\n return {\n createNew: createNew,\n getById: getById,\n getAll: getAll,\n insert: insert,\n remove: remove,\n update: update,\n }\n }\n]);","wbApp.factory('phaseSvc', ['$resource', '$q','repositorySvc',\n function ($resource, $q, repositorySvc) {\n\n var Phase = $resource('/restapi/phase/:id', {}, {\n 'getById': { method: 'GET', url: '/restapi/phases/:id' },\n 'getAll': { method: 'GET', isArray: true, url: 'restapi/phases' },\n 'insert': { method: 'POST', url: '/restapi/phases' },\n 'update': { method: 'PUT', url: '/restapi/phases/:id' },\n 'delete': { method: 'DELETE', url: '/restapi/phases/:id' },\n });\n\n var phases;\n\n function createNew()\n {\n var phase = {\n isNew: true\n };\n\n return phase;\n }\n\n function insert(model) {\n return repositorySvc.customPost(\n 'insert',\n Phase,\n model);\n }\n\n function remove(phaseId) {\n phases = null;\n return repositorySvc.customDelete(\n 'delete',\n Phase,\n { id: phaseId });\n }\n\n function update(model) {\n phases = null;\n return repositorySvc.customPutWithParams(\n 'update',\n Phase,\n { id: model.id },\n convertDatesToDateString(model));\n }\n\n function getById(phaseId) {\n return repositorySvc.customGet('getById', Phase, { id: phaseId });\n }\n\n function getAll(refresh) {\n if (!phases || refresh) {\n phases = repositorySvc.customGet('getAll', Phase, {});\n }\n return phases;\n }\n\n return {\n createNew: createNew,\n getById: getById,\n getAll: getAll,\n insert: insert,\n remove: remove,\n update: update,\n }\n }\n]);","'use strict';\n\nwbApp.controller('DashboardCtrl', ['$scope',\nfunction ($scope) {\n}]);","'use strict';\n\nwbApp.controller('FinanceSummaryCtrl', ['$scope', '$timeout', '$translate', 'invoiceSvc', 'semesterSvc', 'securitySvc',\nfunction ($scope, $timeout, $translate, invoiceSvc, semesterSvc, securitySvc) {\n \n if (!securitySvc.isInRole('Dashboard.FinanceSummary')) {\n return;\n }\n\n var activeSemesterPromise = semesterSvc.getDefaultAsync();\n\n // Wait for active semester\n activeSemesterPromise.then(function (activeSemester) {\n if (activeSemester) {\n $scope.semesterID = activeSemester.id;\n } else {\n $scope.semesterID = null;\n }\n\n $scope.onSemesterChange($scope.semesterID);\n });\n\n $scope.chart = {\n type: 'ComboChart',\n data: [\n [$translate.instant('TXT_LBL_SEMESTER'), $translate.instant('TXT_LBL_COURSES'), $translate.instant('TXT_LBL_ACTIONS'), $translate.instant('TXT_VAL_ONEOFF'), $translate.instant('TXT_LBL_PAYMENTS')],\n [\"\",0,0,0,0]\n ],\n options: {\n displayExactValues: true,\n isStacked: true,\n chartArea: { width: '70%', height: '60%' },\n legend: { position: 'bottom' },\n seriesType: \"bars\",\n series: { 3: { type: \"line\" }}\n }\n };\n\n $scope.semesterData = {};\n\n function selectSemesterData(data, semesterID) {\n for (var i = 0; i < data.length; i++) {\n var d = data[i];\n if (d.semesterID == semesterID) {\n $scope.semesterData = d;\n break;\n }\n }\n }\n\n $scope.onSemesterChange = function (semesterID) {\n if (!$scope.data) {\n $scope.data = invoiceSvc.getFinanceSummary();\n\n $scope.data.$promise.then(function (data) {\n $timeout(function () {\n\n var newData = [\n [$translate.instant('TXT_LBL_SEMESTER'), $translate.instant('TXT_LBL_COURSES'), $translate.instant('TXT_LBL_ACTIONS'), $translate.instant('TXT_VAL_ONEOFF'), $translate.instant('TXT_LBL_PAYMENTS')]\n ];\n\n for (var i = 0; i < data.length; i++) {\n var d = data[i];\n\n newData.push([\n d['semesterName'],\n d['courseRegistrationsInvoiced'],\n d['actionsInvoiced'],\n d['oneOffsAmount'],\n d['cashPayments'] + d['bankTransferPayments'] + d['creditCardPayments'] + d['benefitPlusPayments'] + d['onlinePayments']\n ]);\n }\n\n\n $scope.chart.data.length = 0;\n $scope.chart.data.push.apply($scope.chart.data, newData);\n\n selectSemesterData(data, semesterID);\n });\n });\n } else {\n selectSemesterData($scope.data, semesterID);\n }\n }\n}]);","'use strict';\n\nwbApp.controller('SemesterCourseSummaryCtrl', ['$scope', '$timeout', '$translate', 'semesterSvc', 'securitySvc',\nfunction ($scope, $timeout, $translate, semesterSvc, securitySvc) {\n\n if (!securitySvc.isInRole('Dashboard.SemesterCourse')) {\n return;\n }\n\n $scope.summary;\n var activeSemesterPromise = semesterSvc.getDefaultAsync();\n\n // Wait for active semester\n activeSemesterPromise.then(function (activeSemester) {\n if (activeSemester) {\n $scope.semesterID = activeSemester.id;\n } else {\n $scope.semesterID = null;\n }\n\n $scope.onSemesterChange($scope.semesterID);\n });\n\n $scope.chart = {\n type: 'PieChart', data: [\n ['Component', 'Value'],\n [$translate.instant('TXT_COL_ATTENDANCE_STATUS'), 0],\n [$translate.instant('TXT_STATUS_NOT_PRESENT_NOT_EXCUSED'), 0],\n [$translate.instant('TXT_STATUS_NOT_PRESENT_EXCUSED'), 0],\n [$translate.instant('TXT_STATUS_NOT_PRESENT_EXCUSED_NO_COMPENSATION'), 0]\n ], options: {\n displayExactValues: true,\n chartArea: { width: '100%', height: '70%' },\n legend: { position: 'bottom' },\n }\n };\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n $scope.summary = semesterSvc.getCourseSummaryAsync(semesterID);\n $scope.summary.$promise.then(function (data) {\n $timeout(function () {\n $scope.chart.data[1][1] = data.statusPresent;\n $scope.chart.data[2][1] = data.statusNotPresentNotExcused;\n $scope.chart.data[3][1] = data.statusNotPresentExcused;\n $scope.chart.data[4][1] = data.statusNotPresentExcusedNoCompensation;\n });\n });\n }\n }\n\n\n $scope.title = 'ABC';\n}]);","'use strict';\n\nwbApp.controller('BankCtrl', ['$scope', '$modal', '$q', '$timeout', '$translate', 'messageBoxSvc', 'accountingBookSvc', 'bankSvc', 'notificationSvc',\nfunction ($scope, $modal, $q, $timeout, $translate, messageBoxSvc, accountingBookSvc, bankSvc, notificationSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.fromDate = moment().startOf('month').toDate();\n $scope.toDate = moment().endOf('month').toDate();\n $scope.records = null;\n\n $scope.$on('refreshData', function (e, data) {\n if ($scope.accountingBookID) {\n refreshData($scope.accountingBookID, $scope.fromDate, $scope.toDate);\n }\n });\n\n $q.all([accountingBookSvc.getDefaultAsync()])\n .then(function (data) {\n if (data && data.length === 1) {\n $scope.accountingBookID = data[0].id;\n $scope.onAccountingBookChange($scope.accountingBookID, $scope.fromDate, $scope.toDate);\n }\n });\n\n var unimportantRecoveryDetailDlgPromise = $modal({\n templateUrl: 'finance/bank/unimportant-recovery-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n function restoreIrrelevantTransactions() {\n unimportantRecoveryDetailDlgPromise.$promise.then(function () {\n unimportantRecoveryDetailDlgPromise.$scope.fromDate = $scope.fromDate;\n unimportantRecoveryDetailDlgPromise.$scope.toDate = $scope.toDate;\n unimportantRecoveryDetailDlgPromise.$scope.accountingBookID = $scope.accountingBookID;\n unimportantRecoveryDetailDlgPromise.$scope.onSave = function () {\n refreshData($scope.accountingBookID, $scope.fromDate, $scope.toDate);\n }\n\n unimportantRecoveryDetailDlgPromise.show();\n });\n }\n\n var addPaymentPromise = $modal({\n templateUrl: 'finance/payments/payments-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n function addPayment(data) {\n addPaymentPromise.$scope.isAddBankPayment = true;\n addPaymentPromise.$scope.bankTransactionDetail = {\n invoiceNo: data.invoiceNo,\n externalAccountNo: data.externalAccountNo,\n text: data.text,\n transactionID: data.transactionID,\n accountingBookID: $scope.accountingBookID\n };\n addPaymentPromise.$scope.paymentDetail = {\n paymentID: 0,\n paymentTypeID: 1,\n amount: data.value,\n selectedDate: data.date,\n };\n\n addPaymentPromise.$promise.then(function () {\n addPaymentPromise.$scope.detailError = null;\n addPaymentPromise.$scope.onPaymentSuccessSave = function () {\n refreshData($scope.accountingBookID, $scope.fromDate, $scope.toDate);\n }\n\n addPaymentPromise.show();\n });\n }\n\n $scope.gridOptions = {\n sortInfo: { fields: ['date'], directions: ['dsc'] },\n columnDefs: [{ field: 'date', displayName: \"TXT_LBL_DATE\", cellFilter: 'date:shortDate', width: '75px' },\n { field: 'transactionNumber', displayName: \"TXT_LBL_TRANSACTION_NUMBER\", align: 'right', width: '100px', smHide: true },\n { field: 'invoiceNo', displayName: \"TXT_LBL_VARIABLE_SYMBOL\", width: '120px', align: 'right' },\n { field: 'externalAccountNo', displayName: \"TXT_LBL_EXTERNAL_ACCOUNT\", width: '190px', align: 'right', smHide: true, mdHide: true },\n { field: 'text', displayName: \"TXT_LBL_TEXT\", sort: 'locale' },\n { field: 'paymentID', displayName: \"TXT_LBL_PAYMENT\", cellFilter: 'checkmark', width: '60px', smHide: true },\n { field: 'value', displayName: \"TXT_LBL_VALUE\", cellFilter: 'wbCurrencyFlt', width: '100px', align: 'right' }\n ],\n disabledField: 'paymentID',\n disabledAreSelectable: true,\n customCmds: [{\n text: 'TXT_MENU_CREATE_PAYMENT',\n hide: function (row) { return !!row.paymentID; },\n command: function (row) {\n addPayment(row);\n }\n }, {\n text: 'TXT_MENU_MARK_AS_IRRELEVANT',\n hide: function (row) { return !!row.paymentID; },\n command: function (row) { \n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: 'TXT_CONFIRM_MARK_AS_IRRELEVANT_MESSAGE',\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_NO',\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n bankSvc.markAsUnimportant($scope.accountingBookID, row.transactionID)\n .then(function () {\n refreshData($scope.accountingBookID, $scope.fromDate, $scope.toDate);\n },\n function (errorResult) {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_DATA_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n }\n }]\n });\n }\n }, {\n text: 'TXT_MENU_REMOVE_PAIRING',\n hide: function (row) { return !row.paymentID; },\n command: function (row) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: 'TXT_CONFIRM_REMOVE_PAIRING_MESSAGE',\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_NO',\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n bankSvc.removePairing($scope.accountingBookID, row.transactionID, false)\n .then(function () {\n refreshData($scope.accountingBookID, $scope.fromDate, $scope.toDate);\n },\n function (errorResult) {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_DATA_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n }\n }]\n });\n }\n }, {\n text: 'TXT_MENU_REMOVE_PAIRING_AND_DELETE_PAYMENT',\n hide: function (row) { return !row.paymentID; },\n command: function (row) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: 'TXT_CONFIRM_REMOVE_PAIRING_WITH_DELETE_MESSAGE',\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_NO',\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n bankSvc.removePairing($scope.accountingBookID, row.transactionID, true)\n .then(function () {\n refreshData($scope.accountingBookID, $scope.fromDate, $scope.toDate);\n },\n function (errorResult) {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_DATA_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n }\n }]\n });\n }\n }, {\n text: 'TXT_MENU_RESTORE_IRRELEVANT_TRANSACTIONS',\n command: function (row) {\n restoreIrrelevantTransactions(row);\n }\n }, {\n text: 'TXT_MENU_REQUEST_AUTOMATIC_PAIRING',\n command: function (row) {\n bankSvc.requestPairing($scope.accountingBookID)\n .then(function () {\n $timeout(function () {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_INFORMATION',\n message: 'TXT_PAIRING_IN_PROGRESS',\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n });\n });\n }\n }]\n };\n\n\n function setSelectedRecord(selectedRecord) {\n if ($scope.selectedRecord !== selectedRecord) {\n $scope.selectedRecord = selectedRecord;\n $scope.$broadcast('selectedAccountingBookTransactionChanged', selectedRecord);\n }\n }\n\n function refreshData(accountingBookID, fromDate, toDate) {\n var records = bankSvc.getAllByAccountingBookID(accountingBookID, fromDate, toDate);\n\n if ($scope.records && $scope.records.length) {\n records.$promise.then(function (data) {\n $scope.records.length = 0;\n $scope.records.push.apply($scope.records, data);\n\n if ($scope.selectedRecord) {\n setSelectedRecord(\n _.find($scope.records, { transactionID: $scope.selectedRecord.transactionID }));\n if ($scope.selectedRecord) {\n $scope.selectedRecord.isSelected = true;\n }\n }\n });\n } else {\n $scope.records = records;\n setSelectedRecord(null);\n }\n }\n\n $scope.onAccountingBookChange = function (accountingBookID) {\n if (accountingBookID) {\n refreshData(accountingBookID, $scope.fromDate, $scope.toDate);\n }\n }\n\n $scope.onFromDateChange = function (fromDate) {\n if (fromDate) {\n refreshData($scope.accountingBookID, fromDate, $scope.toDate);\n }\n }\n\n $scope.onToDateChange = function (toDate) {\n if (toDate) {\n refreshData($scope.accountingBookID, $scope.fromDate, toDate);\n }\n }\n\n $scope.onRowSelected = function (data) {\n setSelectedRecord(data);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"finance/bank/bank-tabs/paired-invoice.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n}]);\n","'use strict';\n\nwbApp.controller('BankUnimportantRecoveryDetailCtrl', ['$scope', 'bankSvc',\nfunction ($scope, bankSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.transactions = bankSvc.getUnimportantByAccountingBookID($scope.accountingBookID,\n $scope.fromDate, $scope.toDate);\n\n $scope.gridOptions = {\n sortInfo: { fields: ['date'], directions: ['dsc'] },\n columnDefs: [{ field: 'date', displayName: \"TXT_LBL_DATE\", cellFilter: 'date:shortDate', width: '75px' },\n { field: 'invoiceNo', displayName: \"TXT_LBL_VARIABLE_SYMBOL\", width: '120px', align: 'right' },\n { field: 'externalAccountNo', displayName: \"TXT_LBL_EXTERNAL_ACCOUNT\", width: '190px', align: 'right', smHide: true, mdHide: true },\n { field: 'text', displayName: \"TXT_LBL_TEXT\", sort: 'locale' },\n { field: 'value', displayName: \"TXT_LBL_VALUE\", cellFilter: 'wbCurrencyFlt', width: '100px', align: 'right' }\n ],\n noCommandColumn: true,\n hideFooter: false,\n multiSelect: true\n };\n\n var isSaving = false;\n\n $scope.isReadyToSave = function () {\n return _.some($scope.transactions, 'isSelected') && !isSaving;\n }\n\n $scope.onDetailSave = function () {\n\n isSaving = true;\n\n let selected = _.map(_.filter($scope.transactions, { 'isSelected' : true }), 'transactionID');\n bankSvc.restoreUnimportant($scope.accountingBookID, selected)\n .then(function () {\n isSaving = false;\n $scope.$hide();\n $scope.onSave();\n }, function () { isSaving = false; });\n }\n\n}]);\n","'use strict';\n\nwbApp.controller('InvoicesCtrl', ['$scope', '$modal', '$q', '$window', '$translate', '$timeout', '$filter', 'semesterSvc',\n 'invoiceSvc', 'messageBoxSvc', 'notificationSvc', 'accountingBookSvc', 'securitySvc', 'gridSortSvc', 'localStorageService',\nfunction ($scope, $modal, $q, $window, $translate, $timeout, $filter, semesterSvc,\n invoiceSvc, messageBoxSvc, notificationSvc, accountingBookSvc, securitySvc, gridSortSvc, localStorageService) {\n\n $scope.semesterDataRange = 1; // 1 - semester, 2 - from to\n $scope.fromDate = moment().subtract(3, 'M').startOf('day').toDate();\n $scope.toDate = moment().startOf('day').toDate();\n\n if (localStorageService.isSupported)\n {\n $scope.semesterDataRange = localStorageService.get('semesterDataRange') || 1;\n }\n\n $scope.customFilter = { accountingBooks: [] };\n $scope.rawInvoices = [];\n $scope.invoices = [];\n $scope.filteredRows = [];\n\n $scope.accountingBooks = accountingBookSvc.getAllAsync();\n\n function preFilter() {\n $q.all([$scope.rawInvoices.$promise, $scope.accountingBooks.$promise]).then(function () {\n var accountingBookIDs = _.values($scope.customFilter.accountingBooks);\n $scope.invoices.length = 0;\n $scope.invoices.push.apply($scope.invoices,\n _.filter($scope.rawInvoices, function (o) {\n \n if (accountingBookIDs.length > 0) {\n return _.includes(accountingBookIDs, o.accountingBookID);\n }\n\n return true;\n })\n );\n });\n }\n\n $scope.onDataRangeChanged = function () {\n if (localStorageService.isSupported) {\n localStorageService.set('semesterDataRange', $scope.semesterDataRange);\n }\n\n if ($scope.semesterID != null) {\n loadData();\n }\n\n if ($scope.gridSettings.gridInstance) {\n if ($scope.semesterDataRange === 1) {\n $scope.gridSettings.gridInstance.columnOption(\"semesterColumn\", \"visible\", false);\n } else {\n $scope.gridSettings.gridInstance.columnOption(\"semesterColumn\", \"visible\", true);\n }\n }\n }\n\n function loadData() {\n if ($scope.semesterDataRange === 1) {\n $scope.rawInvoices = invoiceSvc.getInvoiceEvidenceBySemester($scope.semesterID);\n } else {\n $scope.rawInvoices = invoiceSvc.getInvoiceEvidenceByDateRange(\n $scope.fromDate, $scope.toDate, true);\n }\n preFilter();\n }\n\n $scope.$watch('customFilter', function (newValue, oldValue) {\n preFilter();\n }, true);\n\n $scope.gridSettings = {\n name: 'invoices',\n columns: [\n {\n name: 'semesterColumn',\n dataField: 'semesterID',\n caption: $translate.instant('TXT_LBL_SEMESTER'),\n dataType: 'string',\n width: '120px',\n calculateCellValue: function (rowData) {\n return $filter('semester')(rowData.semesterID);\n },\n visible: $scope.semesterDataRange === 2\n },\n { dataField: 'recordNumber', caption: $translate.instant('TXT_LBL_INVOICE_NO'), dataType: 'number', width: '100px', sortOrder: 'desc' },\n {\n dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', width: '160px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentFullName') }\n },\n {\n dataField: 'customerOperatorID',\n caption: $translate.instant('TXT_LBL_PARENT') + ' ID',\n dataType: 'number',\n width: '100px',\n visible: false\n },\n {\n dataField: 'operatorFullName', caption: $translate.instant(\"TXT_LBL_PARENT\"), dataType: 'string', width: '160px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'operatorFullName') }\n },\n {\n dataField: 'typeID',\n caption: $translate.instant(\"TXT_LBL_TYPE\"),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('invoiceForType')(rowData.typeID);\n },\n width: '55px'\n },\n { dataField: 'subject', caption: $translate.instant('TXT_LBL_SUBJECT'), dataType: 'string' },\n { dataField: 'invoiceDate', caption: $translate.instant('TXT_LBL_INVOICE_DATE'), dataType: 'date', width: '90px' },\n { dataField: 'total', caption: $translate.instant('TXT_LBL_AMOUNT'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'paymentSum', caption: $translate.instant('TXT_LBL_PAYMENTS_SUM'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n {\n dataField: 'latest',\n caption: $translate.instant('TXT_LBL_VALID'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('invoiceValid')(rowData.latest);\n },\n width: '80px'\n },\n { dataField: 'accountingBookID', caption: $translate.instant('TXT_LBL_ACCOUNTING_BOOK'), dataType: 'number', visible: false },\n ],\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.notLatest) {\n e.rowElement.addClass('text-muted');\n }\n }\n }, \n customCommands: [{\n text: $translate.instant('TXT_MENU_PRINT_INVOICE'),\n isVisible: function (row) {\n return securitySvc.isInRole('CourseRegistration.PrintInvoice') && securitySvc.isInRole('Reports');\n },\n callback: function (row) { onPrintInvoice(row.invoiceID, 'pdf'); }\n },\n {\n text: $translate.instant('TXT_MENU_PRINT_INVOICE_ALL'),\n isVisible: function (row) {\n return securitySvc.isInRole('CourseRegistration.PrintInvoice') && securitySvc.isInRole('Reports');\n },\n callback: function (row, allRows) { onPrintInvoiceAll(row, allRows); }\n },\n {\n text: $translate.instant('TXT_MENU_STORMWARE_EXPORT'), \n callback: function (row, allRows) { onStormwareExportRequested(row, allRows); }\n },\n {\n text: $translate.instant('TXT_MENU_MONEYS3_PURCHASE_ORDER_EXPORT'),\n callback: function (row, allRows) { onMoneyS3ExportRequested(row, false); }\n },\n {\n text: $translate.instant('TXT_MENU_MONEYS3_INVOICE_EXPORT'),\n callback: function (row, allRows) { onMoneyS3ExportRequested(row, true); }\n },\n {\n text: $translate.instant('TXT_MENU_CSV_EXPORT'),\n callback: function (row, allRows) { onCsvExportRequested(row, allRows); }\n },\n {\n text: $translate.instant('TXT_EXPORT_INVOICE_TO_EXCEL'),\n isVisible: function (row) {\n return securitySvc.isInRole('CourseRegistration.PrintInvoice') && securitySvc.isInRole('Reports');\n },\n callback: function (row) { onPrintInvoice(row.invoiceID, 'xls'); }\n }]\n }\n\n\n $scope.onFilterApplied = function (filteredRows) {\n $scope.filteredRows = filteredRows;\n }\n\n function onPrintInvoiceAll(row) {\n var uniqueByAccountingBooks = _.uniqBy($scope.filteredRows, 'accountingBookID');\n if (uniqueByAccountingBooks.length > 1) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_ERROR_INVOICES_PRINT_GENERATION',\n message: $translate.instant('TXT_TEXT_TOO_MANY_ACCOUNTING_BOOKS_IN_PRINT').f(uniqueByAccountingBooks.length),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n return;\n }\n\n var invoiceIDs = encodeURIComponent(JSON.stringify(_.map($scope.filteredRows, 'invoiceID')));\n\n $window.open('/Admin/Report/InvoiceAll?InvoiceIDs=' + invoiceIDs,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n function onStormwareExportRequested(row) {\n\n var uniqueByAccountingBooks = _.uniqBy($scope.filteredRows, 'accountingBookID');\n if (uniqueByAccountingBooks.length > 1) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_ERROR_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_TOO_MANY_ACCOUNTING_BOOKS_IN_EXPORT').f(uniqueByAccountingBooks.length),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n return;\n }\n\n function onYesClicked() {\n invoiceSvc.getStormwareInvoiceExport(row.accountingBookID, _.map($scope.filteredRows, 'invoiceID'),\n onStormwareExportGenerated,\n function (error) {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_SERVER_ERROR'),\n notificationSvc.translateError(error));\n });\n }\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_CONFIRM_INVOICE_EXPORT_GENERATION').f($scope.filteredRows.length),\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: onYesClicked\n }]\n });\n }\n\n function onMoneyS3ExportRequested(row, exportAsInvoices) {\n\n var uniqueByAccountingBooks = _.uniqBy($scope.filteredRows, 'accountingBookID');\n if (uniqueByAccountingBooks.length > 1) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_ERROR_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_TOO_MANY_ACCOUNTING_BOOKS_IN_EXPORT').f(uniqueByAccountingBooks.length),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n return;\n }\n\n function onYesClicked() {\n invoiceSvc.getMoneyS3InvoiceExport(\n row.accountingBookID, \n _.map($scope.filteredRows, 'invoiceID'),\n exportAsInvoices,\n onMoneyS3ExportGenerated,\n function (error) {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_SERVER_ERROR'),\n notificationSvc.translateError(error));\n });\n }\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_CONFIRM_INVOICE_EXPORT_GENERATION').f($scope.filteredRows.length),\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: onYesClicked\n }]\n });\n }\n\n function onCsvExportRequested(row) {\n\n var uniqueByAccountingBooks = _.uniqBy($scope.filteredRows, 'accountingBookID');\n if (uniqueByAccountingBooks.length > 1) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_ERROR_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_TOO_MANY_ACCOUNTING_BOOKS_IN_EXPORT').f(uniqueByAccountingBooks.length),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n return;\n }\n\n function onYesClicked() {\n invoiceSvc.getCsvInvoiceExport(row.accountingBookID, _.map($scope.filteredRows, 'invoiceID'),\n onCsvExportGenerated,\n function (error) {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_SERVER_ERROR'),\n notificationSvc.translateError(error));\n });\n }\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_CONFIRM_INVOICE_EXPORT_GENERATION').f($scope.filteredRows.length),\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: onYesClicked\n }]\n });\n }\n\n function onStormwareExportGenerated(data) {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n }\n \n function onMoneyS3ExportGenerated(data) {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n }\n\n function onCsvExportGenerated(data) {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n }\n function onPrintInvoice(invoiceID, format) {\n\n if (format == 'xls') {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n } else {\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n }\n\n $scope.$on('refreshData', function (e, data) {\n if ($scope.semesterID) {\n loadData();\n $scope.selectedInvoice = null;\n preFilter();\n }\n });\n\n $q.all([semesterSvc.getDefaultAsync()])\n .then(function (data) {\n if (data[0]) {\n $scope.semesterID = data[0].id;\n }\n\n if ($scope.semesterID) {\n // get invoices\n loadData();\n } \n });\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n // get invoices\n loadData();\n $scope.selectedInvoice = null; \n }\n }\n\n $scope.onRowSelected = function (data) {\n $scope.selectedInvoice = data;\n }\n\n}]);\n","'use strict';\n\nwbApp.controller('InvoicesDetailCtrl', ['$scope', 'invoiceSvc',\nfunction ($scope, invoiceSvc) {\n $scope.model = invoiceSvc.getByID($scope.invoiceID);\n}]);\n","wbApp.controller('AccountingBookCtrl', ['$scope', '$modal', 'accountingBookSvc', '$routeParams', '$location', '$timeout',\nfunction ($scope, $modal, accountingBookSvc, $routeParams, $location, $timeout) {\n \n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['name'], directions: ['dsc'] },\n columnDefs: [{ field: 'name', displayName: \"TXT_LBL_NAME\", sort: 'locale', width: '250px' },\n { field: 'subjectName', displayName: \"TXT_LBL_SUBJECT_NAME\", sort: 'locale', width: '250px' },\n { field: 'subjectAddress', displayName: \"TXT_LBL_ADDRESS\", sort: 'locale' },\n { field: 'organisationIdentifier', displayName: \"TXT_LBL_ORGANISATION_IDENTIFIER\", align: 'right', width: '110px' },\n { field: 'accountNo', displayName: \"TXT_LBL_ACCOUNT_NO\", align: 'right', width: '160px' }\n ]\n };\n\n $scope.accountingBooks = accountingBookSvc.getAllAsync(true);\n\n // Open Detail if we have query parameter\n let editDetailAccountingBookId = Number($routeParams.id);\n if (editDetailAccountingBookId) {\n $scope.accountingBooks.$promise.then(function (result) {\n let data = _.find($scope.accountingBooks, { id: editDetailAccountingBookId });\n if (!data) {\n $location.path('/finance/accounting-books');\n } else {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n }); \n }\n })\n }\n\n $scope.$on('refreshData', function (e, data) {\n $scope.accountingBooks = accountingBookSvc.getAllAsync(true);\n });\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = accountingBookSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n accountingBookSvc.remove(data);\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'finance/accounting-books/accounting-books-detail.html',\n show: false,\n scope: $scope.$new(),\n tag: 'accountingBookDetail'\n });\n\n $scope.$on('modal.hide', function(e, target) {\n if (target.$options.tag === 'accountingBookDetail') {\n if ($routeParams.id) {\n $timeout(function () {\n $location.path('/finance/accounting-books');\n }, 1);\n }\n }\n })\n}]);\n","wbApp.controller('AccountingBookDetailCtrl', ['$scope', 'accountingBookSvc', '$timeout', '$modal', 'messageBoxSvc', '$routeParams', '$translate', '$location',\nfunction ($scope, accountingBookSvc, $timeout, $modal, messageBoxSvc, $routeParams, $translate, $location) {\n\n $scope.modelOrig = angular.copy($scope.model);\n $scope.isBussy = false;\n\n $scope.bankImportCredentials = {\n shopName: null,\n password: null\n };\n\n $scope.minFromDate = moment().subtract(90, 'days').toDate();\n $scope.goCardlessData = {\n id: $scope.model.bankTransactionImportType === 3 ? $scope.model.securityAccessToken : null,\n institutionId: null,\n statusStr: null\n }\n \n $scope.accountingStampUrl = `restapi/accounting-books/${$scope.model.id}/accounting-stamp`;\n\n if ($scope.model.securityAccessToken && $scope.model.bankTransactionImportType == 2) {\n var split = $scope.model.securityAccessToken.split('#');\n if (split.length == 2) {\n $scope.bankImportCredentials.shopName = split[0];\n $scope.bankImportCredentials.password = split[1];\n }\n }\n\n // 0 - TXT_VAL_BANK_CONNECTION_STATUS_CREATED\n // 1 - TXT_VAL_BANK_CONNECTION_STATUS_GIVING_CONSENT\n // 2 - TXT_VAL_BANK_CONNECTION_STATUS_UNDERGOING_AUTHENTICATION\n // 3 - TXT_VAL_BANK_CONNECTION_STATUS_REJECTED\n // 4 - TXT_VAL_BANK_CONNECTION_STATUS_SELECTING_ACCOUNTS\n // 5 - TXT_VAL_BANK_CONNECTION_STATUS_GRANTING_ACCESS\n // 6 - TXT_VAL_BANK_CONNECTION_STATUS_LINKED\n // 7 - TXT_VAL_BANK_CONNECTION_STATUS_EXPIRED\n // 8 - TXT_VAL_BANK_CONNECTION_STATUS_UNKNOWN\n \n if ($scope.model.bankTransactionImportType === 3) {\n accountingBookSvc.getConnection($scope.model.securityAccessToken).$promise.then(function (data) {\n $scope.goCardlessData = angular.extend({}, data, $scope.goCardlessData);\n switch(data.status) {\n case 0:\n $scope.goCardlessData.statusStr = $translate.instant('TXT_VAL_BANK_CONNECTION_STATUS_CREATED');\n break;\n case 1:\n $scope.goCardlessData.statusStr = $translate.instant('TXT_VAL_BANK_CONNECTION_STATUS_GIVING_CONSENT');\n break;\n case 2:\n $scope.goCardlessData.statusStr = $translate.instant('TXT_VAL_BANK_CONNECTION_STATUS_UNDERGOING_AUTHENTICATION');\n break;\n case 3:\n $scope.goCardlessData.statusStr = $translate.instant('TXT_VAL_BANK_CONNECTION_STATUS_REJECTED');\n break;\n case 4:\n $scope.goCardlessData.statusStr = $translate.instant('TXT_VAL_BANK_CONNECTION_STATUS_SELECTING_ACCOUNTS');\n break;\n case 5:\n $scope.goCardlessData.statusStr = $translate.instant('TXT_VAL_BANK_CONNECTION_STATUS_GRANTING_ACCESS');\n break;\n case 6:\n $scope.goCardlessData.statusStr = $translate.instant('TXT_VAL_BANK_CONNECTION_STATUS_LINKED');\n break;\n case 7:\n $scope.goCardlessData.statusStr = $translate.instant('TXT_VAL_BANK_CONNECTION_STATUS_EXPIRED');\n break;\n case 8:\n $scope.goCardlessData.statusStr = $translate.instant('TXT_VAL_BANK_CONNECTION_STATUS_UNKNOWN');\n break;\n }\n });\n }\n\n $scope.onBankImportCredentialsChange = function (shopName, password) {\n if ($scope.model.bankTransactionImportType == 2) {\n $scope.model.securityAccessToken = shopName + '#' + password;\n }\n }\n\n $scope.onImportTypeChange = function (val) {\n $scope.model.securityAccessToken = null;\n $scope.bankImportCredentials.shopName = null;\n $scope.bankImportCredentials.password = null;\n\n if ($scope.model.bankTransactionImportType == 0) {\n $scope.model.bankTransactionImportAmountLimit = null;\n $scope.model.bankTransactionImportStartDate = null;\n }\n }\n \n $scope.onSelectBankClick = function () {\n bankSelectionDialogPromise.$promise.then(function () {\n bankSelectionDialogPromise.$scope.model = $scope.model;\n bankSelectionDialogPromise.$scope.onInstitutionSelected = function (institution) {\n $scope.isBussy = true;\n accountingBookSvc.createBankConnection(\n institution.id,\n `${location.href}/${$scope.model.id}/tab/bank`,\n $scope.model.id).$promise.then(function (data) {\n $scope.model.securityAccessToken = data.id;\n accountingBookSvc.update($scope.model, function () {\n $scope.isBussy = false;\n window.location.href = data.authorizationLinkUrl;\n }, \n function(error) {\n $scope.isBussy = false;\n });\n }, function (error) {$scope.isBussy = false});\n }\n bankSelectionDialogPromise.show();\n });\n }\n \n $scope.onSelectBankAccount = function () {\n bankAccountSelectionDialogPromise.$promise.then(function () {\n bankAccountSelectionDialogPromise.$scope.model = $scope.goCardlessData;\n bankAccountSelectionDialogPromise.$scope.onBankAccountSelected = function (account) {\n $scope.isBussy = true;\n accountingBookSvc.selectBankAccount($scope.goCardlessData.id, account.id).$promise.then(function (data) {\n $scope.goCardlessData.selectedAccountIndex = data.selectedAccountIndex;\n $scope.isBussy = false;\n },\n function (reason) {\n $scope.isBussy = false;\n });\n }\n bankAccountSelectionDialogPromise.show();\n });\n }\n \n $scope.onDeleteBankConnection = function () {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_DELETE_BANK_CONNECTION',\n message: 'TXT_TEXT_CONFIRM_DELETE_BANK_CONNECTION',\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n $scope.isBussy = true;\n accountingBookSvc.deleteConnection($scope.model.securityAccessToken).$promise.then(function () {\n $scope.model.securityAccessToken = null;\n $scope.model.bankTransactionImportType = 0;\n accountingBookSvc.update($scope.model, function () {\n $scope.isBussy = false;\n $scope.goCardlessData = {\n id: null,\n institutionId: null,\n statusStr: null\n };\n }, function (error) {\n $scope.isBussy = false;\n });\n }, function (error) {\n $scope.isBussy = false;\n });\n }\n }]\n });\n }\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"finance/accounting-books/accounting-books-detail-main-tab.html\",\n tabId: 'main'\n },\n {\n title: \"TXT_LBL_ACCOUNTING\",\n template: \"finance/accounting-books/accounting-books-detail-accounting-tab.html\",\n tabId: 'accounting'\n },\n {\n title: \"TXT_LBL_BANK\",\n template: \"finance/accounting-books/accounting-books-detail-bank-tab.html\",\n tabId: 'bank'\n }\n ];\n\n if (!!$scope.model.id) {\n $scope.detailTabs.push({\n title: \"TXT_LBL_SEQUENCES\",\n template: \"finance/accounting-books/accounting-books-detail-sequences-tab.html\",\n tabId: 'sequences'\n });\n $scope.detailTabs.push({\n title: \"TXT_LBL_ACCOUNTING_STAMP\",\n template: \"finance/accounting-books/accounting-books-detail-accounting-stamp-tab.html\",\n tabId: 'accounting-stamp'\n });\n }\n\n $scope.detailTabs.activeTab = 0;\n\n let selectedTabId = $routeParams.tabId;\n if (selectedTabId) {\n let selectedTabIndex = _.findIndex($scope.detailTabs, { tabId: selectedTabId });\n if (selectedTabIndex !== -1) {\n $scope.detailTabs.activeTab = selectedTabIndex; \n }\n }\n \n $scope.isTdSequenceSaving = false;\n $scope.tdSeq = {\n selectedYear: moment().year(),\n accountingBookId: $scope.model.id,\n nextSequenceNo: 1\n };\n \n if (!!$scope.model.id) {\n accountingBookSvc.peekNextSequenceNoRaw(\n 3, /* TaxDocument */\n $scope.tdSeq.accountingBookId,\n $scope.tdSeq.selectedYear, function (data) {\n $scope.tdSeq.nextSequenceNo = data.value;\n });\n }\n\n $scope.onTaxDocumentYearChange = function (year) {\n accountingBookSvc.peekNextSequenceNoRaw(3, $scope.tdSeq.accountingBookId, $scope.tdSeq.selectedYear, function (nextSeq) {\n $scope.tdSeq.nextSequenceNo = nextSeq.value;\n });\n }\n\n $scope.onTaxDocumentSequnceSave = function (m) {\n if ($scope.isTdSequenceSaving) {\n return;\n }\n\n $scope.isTdSequenceSaving = true;\n accountingBookSvc.setNextSequenceNoRaw(3, $scope.tdSeq.accountingBookId, $scope.tdSeq.selectedYear, m,\n function () {\n $scope.tdSeq.nextSequenceNo = m;\n $scope.isTdSequenceSaving = false;\n }, function (error) {\n $scope.isTdSequenceSaving = false;\n });\n }\n\n $scope.getSequenceNoPadded = function(number) {\n return (number % 100000).pad(5);\n }\n\n $scope.getAccountingBookIdPadded = function (number) {\n return (number % 1000).pad(3);\n }\n \n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n if (!model.id) {\n accountingBookSvc.insert(model, success, error);\n } else {\n accountingBookSvc.update(model, success, error);\n }\n }\n\n $scope.onAddStampBtnClick = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.pictureWidth = 558;\n detailDialogPromise.$scope.pictureHeight = 206;\n detailDialogPromise.$scope.onUploadImage = function(data, success, error) {\n accountingBookSvc.uploadAccountingStamp($scope.model.id, data).$promise.then(function(result) {\n success({'imageUrl': `restapi/accounting-books/${$scope.model.id}/accounting-stamp`});\n }, error);\n };\n detailDialogPromise.$scope.onImageSave = function (imageUrl) {\n $scope.accountingStampUrl = `restapi/accounting-books/${$scope.model.id}/accounting-stamp?${new Date().getTime()}`;\n }\n detailDialogPromise.show();\n });\n }\n \n $scope.onDeleteStampBtnClick = function() {\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_DELETE',\n message: 'TXT_TEXT_CONFIRM_DELETE_STAMP',\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n accountingBookSvc.deleteAccountingStamp($scope.model.id).$promise.then(function() {\n $scope.accountingStampUrl = `restapi/accounting-books/${$scope.model.id}/accounting-stamp?${new Date().getTime()}`;\n });\n }\n }]\n }); \n }\n\n\n let detailDialogPromise = $modal({\n templateUrl: 'storage/pictures/pictures-detail.html',\n show: false,\n scope: $scope\n });\n\n let bankSelectionDialogPromise = $modal({\n templateUrl: 'finance/accounting-books/bank-selection-dialog.html',\n show: false,\n scope: $scope.$new()\n });\n\n let bankAccountSelectionDialogPromise = $modal({\n templateUrl: 'finance/accounting-books/bank-account-selection-dialog.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('BankAccountSelectionDialogCtrl', ['$scope',\nfunction ($scope) {\n \n \n $scope.selectedBankAccount = {\n id: null\n };\n \n \n $scope.onBankAccountSelect = function () {\n $scope.$hide();\n $scope.onBankAccountSelected($scope.selectedBankAccount);\n }\n \n $scope.selectBankAccount = function (account) {\n $scope.selectedBankAccount = account;\n }\n \n $scope.isBankAccountSelected = function () {\n return !!$scope.selectedBankAccount.id;\n }\n}]);\n","wbApp.controller('BankPairedInvoiceCtrl', ['$scope', '$window', 'invoiceSvc',\nfunction ($scope, $window, invoiceSvc) {\n\n $scope.selectedInvoiceID = null;\n $scope.model = null;\n\n $scope.$on('selectedAccountingBookTransactionChanged', function (e, data) {\n if (!data) {\n $scope.model = null;\n $scope.selectedInvoiceNo = null;\n } else if ($scope.selectedInvoiceID !== data.invoiceID) {\n $scope.selectedInvoiceID = data.invoiceID;\n if (!!$scope.selectedInvoiceID) {\n $scope.model = invoiceSvc.getInvoiceEvidenceByInvoiceID($scope.selectedInvoiceID);\n } else {\n $scope.model = null;\n }\n }\n });\n\n\n $scope.onPrintInvoice = function (invoiceID) {\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n}]);\n","wbApp.controller('BankSelectionDialogCtrl', ['$scope', '$modal', 'accountingBookSvc',\nfunction ($scope, $modal, accountingBookSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n \n $scope.institutions = accountingBookSvc.getInstitutions();\n $scope.selectedInstitution = {\n id: null\n };\n \n \n $scope.onInstitutionConnect = function () {\n $scope.onInstitutionSelected($scope.selectedInstitution);\n $scope.$hide();\n }\n \n $scope.selectInstitution = function (institution) {\n $scope.selectedInstitution = institution;\n }\n \n $scope.isInstitutionSelected = function () {\n return !!$scope.selectedInstitution.id;\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function() {\n return true;\n }\n}]);\n","wbApp.controller('CompensationsCoursesCtrl', ['$scope', 'compensationsSvc',\nfunction ($scope, compensationsSvc) {\n\n\n $scope.compensationCoursesGridFilterOptions = {\n filterText: \"\"\n };\n\n $scope.compensationCoursesGridOptions = {\n sortInfo: { fields: ['courseFullName'], directions: ['dsc'] },\n columnDefs: [\n { field: 'courseFullName', displayName: \"TXT_LAB_COURSE\", sort: 'locale' },\n { field: 'eligiblePreAmends', displayName: \"TXT_LBL_PRE_AMENDS_GRANTED\", width: '90px', align: 'right' },\n { field: 'remainingPreAmends', displayName: \"TXT_LBL_PRE_AMENDS_LEFT\", width: '90px', align: 'right' },\n { field: 'preAmendsTaken', displayName: \"TXT_LBL_PRE_AMENDS_TAKEN\", width: '90px', align: 'right' },\n { field: 'eligibleAmends', displayName: \"TXT_LBL_ELIGIBLE_AMENDS\", width: '90px', align: 'right' },\n { field: 'remainingAmends', displayName: \"TXT_LBL_AMENDS_LEFT\", width: '90px', align: 'right' },\n { field: 'eligibleTimeBoundAmends', displayName: \"TXT_LBL_ELIGIBLE_TIME_BOUNDS\", width: '90px', align: 'right' },\n { field: 'remainingTimeBoundAmends', displayName: \"TXT_LBL_TIME_BOUNDS_AMEND\", width: '90px', align: 'right' },\n ],\n noCommandColumn: true\n };\n\n $scope.compensationCourses = [];\n\n $scope.$on('selectedCompensationChanged', function (e, data) {\n if (!!data && !!data.semesterID && !!data.compensation) {\n $scope.compensationCourses = compensationsSvc.getDetailAsync(data.semesterID, data.compensation.studentID);\n } else {\n $scope.compensationCourses.length = 0;\n }\n });\n}]);","wbApp.controller('CompensationsCtrl', ['$scope', '$filter', 'semesterSvc', 'compensationsSvc',\nfunction ($scope, $filter, semesterSvc, compensationsSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n function setSelectedCompensation(semesterID, compensation) {\n $scope.selectedCompensation = compensation;\n $scope.$broadcast('selectedCompensationChanged', { semesterID: semesterID, compensation: compensation });\n }\n\n function refreshData(semesterID) {\n setSelectedCompensation(null, null);\n $scope.comensationSummary = compensationsSvc.getAllAsync(semesterID || null);\n }\n\n semesterSvc.getDefaultAsync()\n .then(function (data) {\n if (data) {\n $scope.semesterID = data.id;\n }\n\n refreshData($scope.semesterID);\n });\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n refreshData($scope.semesterID);\n }\n }\n\n $scope.gridOptions = {\n sortInfo: { fields: ['studentFullName'], directions: ['asc'] },\n columnDefs: [{ field: 'studentFullName', displayName: \"TXT_LBL_STUDENT\", sort: 'humanName', width: '170px' },\n { field: 'parentFullName', displayName: \"TXT_LBL_PARENT\", sort: 'humanName', width: '170px', smHide: true, mdHide: true },\n { field: 'address', displayName: \"TXT_LBL_ADDRESS\", sort: 'locale', smHide: true },\n { field: 'email', displayName: \"TXT_LBL_EMAIL\", smHide: true, mdHide: true, width: '190px' },\n { field: 'preAmendsGranted', displayName: \"TXT_LBL_PRE_AMENDS_GRANTED\", width: '90px', align: 'right' },\n { field: 'preAmendsLeft', displayName: \"TXT_LBL_PRE_AMENDS_LEFT\", width: '90px', align: 'right' },\n { field: 'preAmendsTaken', displayName: \"TXT_LBL_PRE_AMENDS_TAKEN\", width: '90px', align: 'right' },\n { field: 'amends', displayName: \"TXT_LBL_AMENDS_LEFT\", width: '90px', align: 'right' },\n { field: 'timeBoundAmendCount', displayName: \"TXT_LBL_TIME_BOUNDS_AMEND\", width: '90px', align: 'right' },\n\n ],\n noCommandColumn: true\n };\n\n $scope.onRowSelected = function (data) {\n setSelectedCompensation($scope.semesterID, data);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_LBL_COURSES',\n template: \"finance/compensations/compensations-tabs/courses.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$on('refreshData', function (e, data) {\n refreshData($scope.semesterID);\n });\n}]);","'use strict';\n\nwbApp.controller('DuePaymentAmortizationScheduleCtrl', ['$scope', '$window', '$translate', '$filter', 'paymentsSvc', 'securitySvc',\nfunction ($scope, $window, $translate, $filter, paymentsSvc, securitySvc) {\n\n\n var isActive = false;\n var loaded = false;\n $scope.invoiceID = null;\n $scope.amortizationSchedules = [];\n\n $scope.$on('selectedDuePaymentChanged', function (e, data) {\n\n if (data) {\n if (data.invoiceID !== $scope.invoiceID || !loaded) {\n $scope.invoiceID = data.invoiceID;\n if (isActive) {\n $scope.amortizationSchedules = paymentsSvc.getAmortizationScheduleDuePayments(data.invoiceID);\n loaded = true;\n } else {\n loaded = false;\n }\n }\n } else {\n $scope.amortizationSchedules.length = 0;\n loaded = false;\n }\n });\n\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 5) {\n if (!isActive) {\n isActive = true;\n if (!loaded && $scope.invoiceID) {\n $scope.amortizationSchedules = paymentsSvc.getAmortizationScheduleDuePayments($scope.invoiceID);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.amortizationSchedulesGridSettings = {\n name: 'amortizationSchedules',\n columns: [\n {\n dataField: 'amortizationScheduleNo',\n caption: $translate.instant(\"TXT_ORDER\"),\n dataType: 'number',\n width: '90px',\n sortOrder: 'asc'\n },\n { dataField: 'issueAt', caption: $translate.instant('TXT_LBL_DATE'), dataType: 'date', width: '90px' },\n { dataField: 'amount', caption: $translate.instant('TXT_LBL_AMOUNT'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'arrear', caption: $translate.instant('TXT_LBL_ARREAR'), dataType: 'number', format: { type: 'currency', precision: 2 } }\n ]\n }\n \n}]);","'use strict';\n\nwbApp.controller('DuePaymentsCtrl', ['$scope', '$modal', '$q', '$window', '$translate', '$timeout',\n '$filter', 'semesterSvc', 'duePaymentsSvc', 'securitySvc', 'messageBoxSvc', 'courseRegistrationSvc', 'tenantSettingSvc',\n 'localStorageService', 'accountingBookSvc', 'gridSortSvc',\n function ($scope, $modal, $q, $window, $translate, $timeout, $filter, semesterSvc,\n duePaymentsSvc, securitySvc, messageBoxSvc, courseRegistrationSvc, tenantSettingSvc, localStorageService, accountingBookSvc, gridSortSvc) {\n\n $scope.semesterDataRange = 1; // 1 - semester, 2 - from to\n $scope.fromDate = moment().subtract(3, 'M').startOf('day').toDate();\n $scope.toDate = moment().startOf('day').toDate();\n\n if (localStorageService.isSupported)\n {\n $scope.semesterDataRange = localStorageService.get('semesterDataRange') || 1;\n }\n\n $scope.customFilter = { invoiceForType: [], showAfterDueDateOnly: false };\n $scope.rawDuePayments = [];\n $scope.duePayments = [];\n\n $scope.accountingBooks = accountingBookSvc.getAllAsync();\n\n $scope.$watch('customFilter', function (newValue, oldValue) {\n preFilter();\n }, true);\n\n function preFilter() {\n var now = moment();\n\n $q.all([$scope.rawDuePayments.$promise, $scope.accountingBooks.$promise]).then(function () {\n var typeIDs = _.values($scope.customFilter.invoiceForType);\n var accountingBookIDs = _.values($scope.customFilter.accountingBooks);\n var showAfterDueDateOnly = $scope.customFilter.showAfterDueDateOnly;\n $scope.duePayments.length = 0;\n $scope.duePayments.push.apply($scope.duePayments,\n _.filter($scope.rawDuePayments, function (o) {\n var result = true;\n if (typeIDs.length > 0) {\n result = _.includes(typeIDs, o.typeID);\n }\n\n if (accountingBookIDs.length > 0) {\n result = result && _.includes(accountingBookIDs, o.accountingBookID);\n }\n\n if (showAfterDueDateOnly) {\n \n result = result && o.claimOverdue;\n // hasAmortizationSchedule\n // ? result && o.priceByAmortizationSchedule != o.payments \n // : result && moment(o.dueDate).isBefore(now);\n }\n\n return result;\n })\n );\n });\n }\n\n $scope.onDataRangeChanged = function () {\n if (localStorageService.isSupported) {\n localStorageService.set('semesterDataRange', $scope.semesterDataRange);\n }\n\n if ($scope.semesterID != null) {\n loadData();\n }\n\n if ($scope.gridSettings.gridInstance) {\n if ($scope.semesterDataRange === 1) {\n $scope.gridSettings.gridInstance.columnOption(\"semesterColumn\", \"visible\", false);\n } else {\n $scope.gridSettings.gridInstance.columnOption(\"semesterColumn\", \"visible\", true);\n }\n }\n }\n\n function loadData() {\n if ($scope.semesterDataRange === 1) {\n $scope.rawDuePayments = duePaymentsSvc.getAllBySemesterIDAsync(\n $scope.semesterID != null ? $scope.semesterID : null, true);\n } else {\n $scope.rawDuePayments = duePaymentsSvc.getAllByDateRangeAsync(\n $scope.fromDate, $scope.toDate, true);\n }\n preFilter();\n }\n\n $q.all([semesterSvc.getDefaultAsync()])\n .then(function (data) {\n if (data[0]) {\n $scope.semesterID = data[0].id;\n }\n\n loadData();\n });\n\n $scope.$on('refreshData', function (e, data) {\n if ($scope.semesterID) {\n loadData();\n setSelectedDuePayment(null);\n }\n });\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n loadData(); \n setSelectedDuePayment(null);\n }\n }\n\n var addPaymentPromise = $modal({\n templateUrl: 'finance/payments/payments-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n function addPayment(data) {\n addPaymentPromise.$scope.isAddDuePayment = true;\n addPaymentPromise.$scope.paymentDetail = {\n paymentID: 0,\n invoiceForType: data.typeID,\n invoiceID: data.invoiceID,\n amount: data.value,\n selectedDate: data.date,\n };\n\n addPaymentPromise.$promise.then(function () {\n addPaymentPromise.$scope.detailError = null;\n addPaymentPromise.$scope.onSave = function () {\n loadData();\n setSelectedDuePayment(null);\n }\n\n addPaymentPromise.show();\n });\n }\n\n\n\n function setSelectedDuePayment(duePayment) {\n if ($scope.selectedDuePayment !== duePayment) {\n $scope.selectedDuePayment = duePayment;\n $scope.$broadcast('selectedDuePaymentChanged', duePayment);\n }\n }\n\n $scope.icons = [{\n value: 1,\n label: $translate.instant('TXT_LAB_COURSE')\n }, {\n value: 2,\n label: $translate.instant('TXT_LAB_ACTION_SINGULAR')\n }, {\n value: 3,\n label: $translate.instant('TXT_LAB_KINDERGARTEN')\n }, {\n value: 4,\n label: $translate.instant('TXT_LAB_RESERVATION')\n }];\n\n $scope.gridSettings = {\n name: 'duePayments',\n columns: [\n {\n name: 'semesterColumn',\n dataField: 'semesterID',\n caption: $translate.instant('TXT_LBL_SEMESTER'),\n dataType: 'string',\n width: '120px',\n calculateCellValue: function (rowData) {\n return $filter('semester')(rowData.semesterID);\n },\n visible: $scope.semesterDataRange === 2\n },\n {\n dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', width: '160px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentFullName') }\n },\n { dataField: 'invoiceNo', caption: $translate.instant('TXT_LBL_INVOICE_NO'), dataType: 'string', width: '90px' },\n {\n dataField: 'typeID',\n caption: $translate.instant(\"TXT_LBL_TYPE\"),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('invoiceForType')(rowData.typeID);\n },\n width: '55px'\n },\n { dataField: 'subject', caption: $translate.instant('TXT_LBL_SUBJECT'), dataType: 'string', sortOrder: 'asc' },\n { dataField: 'notes', caption: $translate.instant('TXT_NOTE'), dataType: 'string' },\n {\n dataField: 'hasAmortizationSchedule',\n caption: $translate.instant('TXT_TAB_AMORTIZATION_SCHEDULE'),\n dataType: 'boolean',\n trueText: '',\n falseText: ' ',\n encodeHtml: false,\n showEditorAlways: false,\n width: '40px',\n visible: tenantSettingSvc.settings.enableAmortizationSchedules,\n },\n { dataField: 'dueDate', caption: $translate.instant('TXT_LBL_DUE_DATE'), dataType: 'date', width: '90px' },\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'payments', caption: $translate.instant('TXT_LBL_PAYMENTS'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'arrear', caption: $translate.instant('TXT_LBL_ARREAR'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' }\n ], \n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.invoiceNotInSync) {\n e.rowElement.addClass('text-danger');\n }\n }\n },\n customCommands: [{\n text: $translate.instant('TXT_MENU_CREATE_PAYMENT'),\n isVisible: function (row) { return securitySvc.isInRole('Payment.Insert'); },\n callback: function (row) { addPayment(row); }\n },{\n text: $translate.instant('TXT_MENU_PRINT_INVOICE'),\n isVisible: function (row) {\n return securitySvc.isInRole('CourseRegistration.PrintInvoice') && securitySvc.isInRole('Reports');\n },\n callback: function (row) { $scope.onPrintInvoice(row.invoiceID); }\n },\n {\n text: $translate.instant('TXT_MENU_SEND_DUE_PAYMENT_NOTIF'),\n callback: function (row) { $scope.onDuePaymentNotification(row); }\n },\n {\n text: $translate.instant('TXT_MENU_REMOVE_FROM_COURSE'),\n isVisible: function (row) {\n return securitySvc.isInRole('CourseRegistration.Delete') && row.typeID === 1;\n },\n callback: function (row) { $scope.removeFromCourse(row); }\n }]\n }\n\n\n $scope.onRowSelected = function (data) {\n setSelectedDuePayment(data);\n }\n\n $scope.expectedPricePop = {\n title: 'Očekávaná cena',\n content: $translate.instant('TXT_LBL_EXPECTED_PRICE_MISMATCH')\n }\n\n function removeFromCourseImpl(data) {\n courseRegistrationSvc.remove(\n { courseRegistrationID: data.typeReferenceID },\n 1 /* Courses */,\n function () {\n loadData();\n });\n }\n\n $scope.removeFromCourse = function (data) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_DELETE',\n message: $translate.instant('TXT_CONFIRM_REMOVE_FROM_COURSE').f(data.studentFullName, data.subject),\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () { return removeFromCourseImpl(data); }\n }]\n });\n }\n \n $scope.onPrintInvoice = function(invoiceID) {\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n $scope.onUpdateInvoice = function (invoiceID) {\n invoiceDetailDialogPromise.$promise.then(function() {\n invoiceDetailDialogPromise.$scope.invoiceID = invoiceID;\n invoiceDetailDialogPromise.show();\n });\n }\n\n $scope.onDuePaymentNotification = function (row) {\n duePaymentsSvc.sendRequestForPayment(\n row.invoiceID,\n row.typeID,\n row.typeReferenceID,\n row.typeReference2ID,\n row.parentID,\n row.isReccuring);\n }\n\n $scope.onFilterApplied = function (filteredRows) {\n $scope.$broadcast('filterApplied', filteredRows);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"finance/due-payments/due-payments-tabs/detail.html\"\n }, {\n title: 'TXT_FILTER_SUMMARY',\n template: \"finance/due-payments/due-payments-tabs/summary.html\"\n }, {\n title: 'TXT_USER_PAYMENTS',\n template: \"finance/due-payments/due-payments-tabs/user-payments.html\"\n }, {\n title: 'TXT_USER_INVOICES',\n template: \"finance/due-payments/due-payments-tabs/user-invoices.html\"\n }, {\n title: 'TXT_LBL_PAYMENTS',\n template: \"finance/due-payments/due-payments-tabs/payments.html\"\n }];\n\n if (tenantSettingSvc.settings.enableAmortizationSchedules) {\n $scope.tabs.push({\n title: 'TXT_TAB_AMORTIZATION_SCHEDULE',\n template: \"finance/due-payments/due-payments-tabs/amortization-schedule.html\"\n });\n }\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n\n\n var invoiceDetailDialogPromise = $modal({\n templateUrl: 'finance/invoices/invoices-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);","'use strict';\n\nwbApp.controller('DuePaymentPaymentsCtrl', ['$scope', '$window', '$translate', '$filter', 'paymentsSvc', 'securitySvc',\nfunction ($scope, $window, $translate, $filter, paymentsSvc, securitySvc) {\n\n\n\n var isActive = false;\n var loaded = false;\n $scope.invoiceID = null;\n $scope.payments = [];\n\n $scope.$on('selectedDuePaymentChanged', function (e, data) {\n\n if (data) {\n if (data.invoiceID !== $scope.invoiceID || !loaded) {\n $scope.invoiceID = data.invoiceID;\n if (isActive) {\n $scope.payments = paymentsSvc.getAllRelatedPaymentsByInvoiceID(data.invoiceID);\n loaded = true;\n } else {\n loaded = false;\n }\n }\n } else {\n $scope.payments.length = 0;\n loaded = false;\n }\n });\n\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 4) {\n if (!isActive) {\n isActive = true;\n if (!loaded && $scope.invoiceID) {\n $scope.payments = paymentsSvc.getAllRelatedPaymentsByInvoiceID($scope.invoiceID);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n\n $scope.paymentsGridSettings = {\n name: 'payments',\n columns: [\n {\n dataField: 'typeID',\n caption: $translate.instant(\"TXT_LBL_TYPE\"),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('invoiceForType')(rowData.typeID);\n },\n width: '55px'\n },\n { dataField: 'subject', caption: $translate.instant('TXT_LBL_SUBJECT'), dataType: 'string', sortOrder: 'dsc' },\n { dataField: 'notes', caption: $translate.instant('TXT_NOTE'), dataType: 'string' },\n { dataField: 'value', caption: $translate.instant('TXT_LBL_AMOUNT'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n {\n dataField: 'paymentTypeID',\n caption: $translate.instant(\"TXT_LBL_PAYMENT\"),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('paymentType')(rowData.paymentTypeID);\n },\n width: '70px'\n },\n { dataField: 'paymentDate', caption: $translate.instant('TXT_LBL_DATE'), dataType: 'date', width: '90px', sortOrder: 'asc' },\n { dataField: 'invoiceNo', caption: $translate.instant('TXT_LBL_INVOICE_NO'), dataType: 'string', width: '90px', visible: false },\n {\n dataField: 'terminalID',\n caption: $translate.instant('TXT_LBL_TERMINAL'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('terminal')(rowData.terminalID);\n },\n width: '150px',\n visible: false\n }\n ]\n }\n \n}]);","'use strict';\n\nwbApp.controller('DuePaymentSummaryCtrl', ['$scope', '$translate', '$timeout', 'duePaymentsSvc',\nfunction ($scope, $translate, $timeout, duePaymentsSvc) {\n\n $scope.filterSummaryDuePaymentsTypes = {\n type: 'PieChart', data: [\n ['Component', 'Value'],\n [$translate.instant('TXT_LAB_COURSE'), 0],\n [$translate.instant('TXT_LAB_ACTION_SINGULAR'), 0],\n [$translate.instant('TXT_LAB_KINDERGARTEN'), 0],\n [$translate.instant('TXT_LAB_RESERVATION'), 0]\n ], options: {\n displayExactValues: true,\n chartArea: { top: '0px', left: '0px', width: '85%', height: '85%' },\n //pieSliceText: 'label',\n legend: { position: 'right' },\n }\n };\n\n $scope.summaryDuePaymentsTypes = {\n type: 'PieChart', data: [\n ['Component', 'Value'],\n [$translate.instant('TXT_LAB_COURSE'), 0],\n [$translate.instant('TXT_LAB_ACTION_SINGULAR'), 0],\n [$translate.instant('TXT_LAB_KINDERGARTEN'), 0],\n [$translate.instant('TXT_LAB_RESERVATION'), 0]\n ], options: {\n displayExactValues: true,\n chartArea: { top: '0px', left: '0px', width: '85%', height: '85%' },\n //pieSliceText: 'label',\n legend: { position: 'right' },\n }\n };\n\n var filteredRows = null;\n var isActive = false;\n var loaded = false;\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 1) {\n if (!isActive) {\n isActive = true;\n onFilterApplied(filteredRows);\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.$on('filterApplied', function (e, data) {\n // TODO: only when tab is shown \n filteredRows = data;\n loaded = false;\n\n if (isActive) {\n onFilterApplied(data);\n }\n });\n\n var onFilterApplied = function (filteredRows) {\n if (loaded || !filteredRows) {\n return;\n }\n loaded = true;\n $scope.summary = duePaymentsSvc.calculateSummary(filteredRows);\n $timeout(function () {\n $scope.filterSummaryDuePaymentsTypes.data[1][1] = $scope.summary.types[0].value;\n $scope.filterSummaryDuePaymentsTypes.data[2][1] = $scope.summary.types[1].value;\n $scope.filterSummaryDuePaymentsTypes.data[3][1] = $scope.summary.types[2].value;\n $scope.filterSummaryDuePaymentsTypes.data[4][1] = $scope.summary.types[3].value;\n });\n\n $scope.summaryAll = duePaymentsSvc.calculateSummaryAll();\n $scope.summaryAll.$promise.then(function (data) {\n $timeout(function () {\n $scope.summaryDuePaymentsTypes.data[1][1] = data.types[0].value;\n $scope.summaryDuePaymentsTypes.data[2][1] = data.types[1].value;\n $scope.summaryDuePaymentsTypes.data[3][1] = data.types[2].value;\n $scope.summaryDuePaymentsTypes.data[4][1] = data.types[3].value;\n });\n });\n }\n\n}]);","'use strict';\n\nwbApp.controller('DuePaymentUserInvoicesCtrl', ['$scope', '$window', 'invoiceSvc',\nfunction ($scope, $window, invoiceSvc) {\n\n\n $scope.relatedGridFilterOptions = {\n filterText: \"\"\n };\n\n $scope.relatedGridOptions = {\n sortInfo: { fields: ['recordNumber'], directions: ['dsc'] },\n columnDefs: [\n { field: 'semesterID', displayName: \"TXT_LBL_SEMESTER\", cellFilter: 'semester', width: '160px' },\n { field: 'recordNumber', displayName: \"TXT_LBL_INVOICE_NO\", width: '100px', smHide: true, mdHide: true },\n { field: 'studentFullName', displayName: \"TXT_LBL_STUDENT\", sort: 'humanName', width: '160px' },\n { field: 'typeID', displayName: \"TXT_LBL_TYPE\", cellFilter: 'invoiceForType', width: '55px', smHide: true, mdHide: true },\n { field: 'subject', displayName: \"TXT_LBL_SUBJECT\", sort: 'locale' },\n { field: 'total', displayName: \"TXT_LBL_AMOUNT\", cellFilter: 'wbCurrencyFlt', width: '130px', align: 'right' },\n { field: 'paymentSum', displayName: \"TXT_LBL_PAYMENTS_SUM\", cellFilter: 'wbCurrencyFlt', width: '130px', align: 'right', smHide: true },\n { field: 'latest', displayName: \"TXT_LBL_VALID\", cellFilter: 'invoiceValid', width: '90px' }\n ],\n customCmds: [\n {\n text: 'TXT_MENU_PRINT_INVOICE',\n // hide: function () { return true; },\n command: function (row) { onPrintInvoice(row.invoiceID); }\n }],\n disabledField: 'notLatest',\n disabledAreSelectable: true\n };\n\n function onPrintInvoice(invoiceID) {\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n var isActive = false;\n var loaded = false;\n $scope.parentID = null;\n $scope.relatedInvoices = [];\n\n $scope.$on('selectedDuePaymentChanged', function (e, data) {\n\n if (data) {\n if (data.parentID !== $scope.parentID || !loaded) {\n $scope.parentID = data.parentID;\n if (isActive) {\n $scope.relatedInvoices = invoiceSvc.getInvoiceEvidenceByUserAsync(data.parentID);\n loaded = true;\n } else {\n loaded = false;\n }\n }\n } else {\n $scope.relatedInvoices.length = 0;\n loaded = false;\n }\n });\n\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 3) {\n if (!isActive) {\n isActive = true;\n if (!loaded && $scope.parentID) {\n $scope.relatedInvoices = invoiceSvc.getInvoiceEvidenceByUserAsync($scope.parentID);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n\n}]);","'use strict';\n\nwbApp.controller('DuePaymentUserPaymentsCtrl', ['$scope', '$window', 'paymentsSvc', 'securitySvc',\nfunction ($scope, $window, paymentsSvc, securitySvc) {\n\n\n\n $scope.relatedGridFilterOptions = {\n filterText: \"\"\n };\n\n $scope.relatedGridOptions = {\n sortInfo: { fields: ['paymentDate'], directions: ['asc'] },\n columnDefs: [\n { field: 'semesterID', displayName: \"TXT_LBL_SEMESTER\", cellFilter: 'semester', width: '160px' },\n { field: 'studentFullName', displayName: \"TXT_LBL_STUDENT\", sort: 'humanName', width: '160px' },\n { field: 'typeID', displayName: \"TXT_LBL_TYPE\", cellFilter: 'invoiceForType', width: '55px' },\n { field: 'subject', displayName: \"TXT_LBL_SUBJECT\", sort: 'locale' },\n { field: 'notes', displayName: \"TXT_NOTE\", sort: 'locale', smHide: true, mdHide: true },\n { field: 'value', displayName: \"TXT_LBL_AMOUNT\", cellFilter: 'wbCurrencyFlt', width: '100px', align: 'right' },\n { field: 'paymentTypeID', displayName: \"TXT_LBL_PAYMENT\", cellFilter: 'paymentType', width: '80px' },\n { field: 'paymentDate', displayName: \"TXT_LBL_DATE\", cellFilter: \"date:'shortDate'\", width: '70px' }\n ],\n dangerFn: function (row) { return row.value < 0; },\n customCmds: [\n {\n text: 'TXT_MENU_PRINT_RECEIPT',\n hide: function (row) {\n return row.paymentTypeID !== 1 || !securitySvc.isInRole('Payment.CashReceipt') || !securitySvc.isInRole('Reports');\n },\n command: function (row) { onPrintReceipt(row.paymentID); }\n },\n {\n text: 'TXT_MENU_PRINT_INVOICE',\n hide: function () { return !securitySvc.isInRole('Reports'); },\n command: function (row) { onPrintInvoice(row.invoiceID); }\n }]\n };\n\n\n function onPrintReceipt(paymentID) {\n if (securitySvc.isInRole('Payment.CashReceipt') && securitySvc.isInRole('Reports')) {\n $window.open('/Admin/Report/CashReceipt?PaymentID=' + paymentID,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n }\n\n function onPrintInvoice(invoiceID) {\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n var isActive = false;\n var loaded = false;\n $scope.parentID = null;\n $scope.relatedPayments = [];\n\n $scope.$on('selectedDuePaymentChanged', function (e, data) {\n\n if (data) {\n if (data.parentID !== $scope.parentID || !loaded) {\n $scope.parentID = data.parentID;\n if (isActive) {\n $scope.relatedPayments = paymentsSvc.getAllForUserAsync(data.parentID);\n loaded = true;\n } else {\n loaded = false;\n }\n }\n } else {\n $scope.relatedPayments.length = 0;\n loaded = false;\n }\n });\n\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 2) {\n if (!isActive) {\n isActive = true;\n if (!loaded && $scope.parentID) {\n $scope.relatedPayments = paymentsSvc.getAllForUserAsync($scope.parentID);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n \n}]);","wbApp.controller('OnlinePaymentConfigurationCtrl', ['$scope', '$modal', '$q', '$translate', 'onlinePaymentConfigurationSvc',\nfunction ($scope, $modal, $q, $translate, onlinePaymentConfigurationSvc) {\n\n $scope.onlinePaymentConfigurations = onlinePaymentConfigurationSvc.getAllAsync(true);\n\n $scope.gridSettings = {\n columns: [\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', sortOrder: 'asc' },\n {\n dataField: 'providerType',\n caption: $translate.instant('TXT_LBL_PROVIDER_TYPE'),\n dataType: 'number',\n width: '140px',\n lookup: {\n dataSource: {\n store: {\n type: 'array',\n data: [\n // { id: 0, name: 'Payeezy (Fio)' },\n { id: 1, name: 'Comgate' },\n { id: 2, name: 'GP webpay' }\n ],\n key: \"id\"\n }\n },\n valueExpr: 'id', \n displayExpr: 'name'\n }\n },\n { dataField: 'isTestConfig', caption: $translate.instant('TXT_LBL_IS_TESTING'), dataType: 'boolean', width: '80px' },\n ]\n }\n\n $scope.$on('refreshData', function (e, data) {\n $scope.onlinePaymentConfigurations = onlinePaymentConfigurationSvc.getAllAsync(true);\n });\n\n $scope.onRowEdit = function (data) {\n $q.all([detailDialogPromise.$promise,\n onlinePaymentConfigurationSvc.getAsync(data.id).$promise]).then(function (d) {\n detailDialogPromise.$scope.model = angular.copy(d[1]);\n detailDialogPromise.$scope.onSave = function () {\n $scope.onlinePaymentConfigurations = onlinePaymentConfigurationSvc.getAllAsync(true);\n }\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = onlinePaymentConfigurationSvc.createNew();\n detailDialogPromise.$scope.onSave = function () {\n $scope.onlinePaymentConfigurations = onlinePaymentConfigurationSvc.getAllAsync(true);\n }\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n onlinePaymentConfigurationSvc.remove(data.id).$promise.then(function () {\n $scope.onlinePaymentConfigurations = onlinePaymentConfigurationSvc.getAllAsync(true);\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'finance/online-payment-configurations/online-payment-configurations-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('OnlinePaymentConfigurationDetailCtrl', ['$scope', 'onlinePaymentConfigurationSvc',\nfunction ($scope, onlinePaymentConfigurationSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n switch (model.providerType) {\n case 0:\n model.secret.merchantId = null;\n model.secret.merchantPassword = null;\n break;\n case 1:\n model.secret.clientCertificateBase64 = null;\n break;\n case 2:\n model.secret.merchantPassword = null;\n break;\n }\n\n if (!model.id) {\n onlinePaymentConfigurationSvc.insert(model).$promise.then(success, error);\n } else {\n onlinePaymentConfigurationSvc.update(model).$promise.then(success, error);\n }\n\n function success() {\n $scope.isSaving = false;\n if ($scope.onSave) {\n $scope.onSave();\n }\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n}]);\n","wbApp.controller('OnlinePaymentsCtrl', ['$scope', '$modal', '$q', '$translate', '$filter', '$window',\r\n 'onlinePaymentsSvc', 'securitySvc', 'messageBoxSvc', 'gridSortSvc',\r\nfunction ($scope, $modal, $q, $translate, $filter, $window,\r\n onlinePaymentsSvc, securitySvc, messageBoxSvc, gridSortSvc) {\r\n\r\n $scope.gridSettings = {\r\n columns: [\r\n {\r\n dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', width: '160px',\r\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentFullName') }\r\n },\r\n {\r\n dataField: 'parentFullName', caption: $translate.instant(\"TXT_LBL_PARENT\"), dataType: 'string', width: '160px',\r\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'operatorFullName') }\r\n },\r\n { dataField: 'productName', caption: $translate.instant('TXT_LBL_TYPE'), dataType: 'string', width: '55px' },\r\n { dataField: 'description', caption: $translate.instant('TXT_LBL_SUBJECT'), dataType: 'string' },\r\n {\r\n dataField: 'state',\r\n caption: $translate.instant('TXT_LBL_STATE'),\r\n dataType: 'number',\r\n width: '80px',\r\n lookup: {\r\n dataSource: {\r\n store: {\r\n type: 'array',\r\n data: [\r\n { id: 0, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_NONE') },\r\n { id: 1, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_CREATED') },\r\n { id: 2, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_PENDING') },\r\n { id: 3, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_PAID') },\r\n { id: 4, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_REVERSED') },\r\n { id: 5, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_AUTOREVERSED') },\r\n { id: 6, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_CANCELLED') },\r\n { id: 7, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_DECLAINED') },\r\n { id: 8, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_ERROR') },\r\n { id: 9, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_MANUALLY_REVERSED') }\r\n ],\r\n key: \"id\"\r\n }\r\n },\r\n valueExpr: 'id', \r\n displayExpr: 'name'\r\n }\r\n },\r\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\r\n {\r\n dataField: 'createdAt',\r\n caption: $translate.instant('TXT_LBL_DATE'),\r\n sortOrder: 'desc',\r\n dataType: 'date',\r\n format: 'shortDateShortTime',\r\n width: '130px'\r\n },\r\n { dataField: 'isTesting', caption: $translate.instant('TXT_LBL_IS_TESTING'), dataType: 'boolean', width: '80px' },\r\n ],\r\n shouldDisableDelete: function(row) { return !row.isTesting && row.state === 3 /* Paid */; },\r\n customCommands: [{\r\n text: $translate.instant('TXT_MENU_PRINT_INVOICE'),\r\n isVisible: function (row) { \r\n return !!row.invoiceID && securitySvc.isInRole('CourseRegistration.PrintInvoice') && securitySvc.isInRole('Reports'); \r\n },\r\n callback: function (row) { onPrintInvoice(row.invoiceID); }\r\n }, {\r\n text: $translate.instant('TXT_LBL_REVERSE_PAYMENT'),\r\n isVisible: function (row) {\r\n return securitySvc.isInRole('OnlinePayment.Update') &&\r\n moment(row.createdAt).isAfter(moment().subtract(90, 'days')) &&\r\n row.state === 3 && \r\n row.providerType === 0; // Payeezy\r\n },\r\n callback: function (row) { onReverseOnlinePayment(row.onlinePaymentID); }\r\n }, {\r\n text: $translate.instant('TXT_LBL_MANUALLY_REVERSE_PAYMENT_DELETE_PAYMENTS'),\r\n isVisible: function (row) {\r\n return securitySvc.isInRole('OnlinePayment.Update') &&\r\n moment(row.createdAt).isBefore(moment().subtract(2, 'hour')) &&\r\n (row.state === 2 || row.state === 3); // Pending || Paid\r\n },\r\n callback: function (row) { onManuallyReverseOnlinePayment(row.onlinePaymentID); }\r\n }, {\r\n text: $translate.instant('TXT_MENU_CREATE_PAYMENT'),\r\n isVisible: function (row) {\r\n return securitySvc.isInRole('OnlinePayment.Update') &&\r\n !row.invoiceID && \r\n (row.state === 9); // ManuallyReversed\r\n },\r\n callback: function (row) { addPayment(row); }\r\n }, ]\r\n }\r\n\r\n function onPrintInvoice(invoiceID) {\r\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\r\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\r\n }\r\n\r\n function onReverseOnlinePayment(onlinePaymentID) {\r\n\r\n messageBoxSvc.showMessageDlg({\r\n title: 'TXT_TITLE_CONFIRM_REVERSE',\r\n message: 'TXT_TEXT_CONFIRM_REVERSE',\r\n buttons: [{\r\n text: 'TXT_BTN_NO'\r\n }, {\r\n text: 'TXT_BTN_YES',\r\n callback: function () {\r\n onlinePaymentsSvc.reverse(onlinePaymentID);\r\n }\r\n }]\r\n });\r\n }\r\n\r\n function onManuallyReverseOnlinePayment(onlinePaymentID) {\r\n\r\n messageBoxSvc.showMessageDlg({\r\n title: 'TXT_TITLE_CONFIRM_MANUAL_REVERSE',\r\n message: 'TXT_TEXT_CONFIRM_MANUAL_REVERSE_DELETE_PAYMENTS',\r\n buttons: [{\r\n text: 'TXT_BTN_NO'\r\n }, {\r\n text: 'TXT_BTN_YES',\r\n callback: function () {\r\n onlinePaymentsSvc.manualReverse(onlinePaymentID);\r\n }\r\n }]\r\n });\r\n } \r\n\r\n $scope.fromDate = moment().startOf('month').toDate();\r\n $scope.toDate = moment().endOf('month').toDate();\r\n\r\n $scope.$on('refreshData', function (e, data) {\r\n refreshData($scope.fromDate, $scope.toDate, true);\r\n });\r\n\r\n function refreshData(fromDate, toDate, refresh) {\r\n $scope.onlinePayments = onlinePaymentsSvc.getAllByDateRange(fromDate, toDate, refresh);\r\n }\r\n\r\n refreshData($scope.fromDate, $scope.toDate, false);\r\n\r\n $scope.onFromDateChange = function (fromDate) {\r\n if (fromDate) {\r\n refreshData(fromDate, $scope.toDate);\r\n }\r\n }\r\n\r\n $scope.onToDateChange = function (toDate) {\r\n if (toDate) {\r\n refreshData($scope.fromDate, toDate);\r\n }\r\n }\r\n\r\n $scope.onRowSelected = function (data) {\r\n $scope.selectedOnlinePayment = data; \r\n }\r\n\r\n $scope.onRowEdit = function (data) {\r\n }\r\n\r\n $scope.onRowDelete = function (data) {\r\n onlinePaymentsSvc.remove(data);\r\n }\r\n\r\n var addPaymentPromise = $modal({\r\n templateUrl: 'finance/payments/payments-detail.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n\r\n function addPayment(data) {\r\n \r\n // var parsingRegExp = new RegExp(\".*\\[(.*)\\s-\\s(.*)\\s-\\s(.*)]\", \"g\");\r\n // var match = parsingRegExp.exec(data.description);\r\n \r\n addPaymentPromise.$scope.isOnlinePayment = true;\r\n addPaymentPromise.$scope.onlineTransactionDetail = {\r\n text: data.description,\r\n transactionID: data.onlinePaymentID\r\n };\r\n addPaymentPromise.$scope.paymentDetail = {\r\n paymentID: 0,\r\n paymentTypeID: 4,\r\n amount: data.price,\r\n selectedDate: data.createdAt,\r\n };\r\n\r\n addPaymentPromise.$promise.then(function () {\r\n addPaymentPromise.$scope.detailError = null;\r\n addPaymentPromise.$scope.onSave = function () {\r\n refreshData($scope.fromDate, $scope.toDate, true);\r\n }\r\n\r\n addPaymentPromise.show();\r\n });\r\n } \r\n \r\n $scope.tabs = [\r\n {\r\n title: 'TXT_DETAIL',\r\n template: \"finance/online-payments/online-payments-tabs/detail.html\"\r\n }];\r\n}]);\r\n","'use strict';\n\nwbApp.controller('PaymentsCtrl', ['$scope', '$modal', '$q', '$window', '$translate', '$timeout', '$filter', 'semesterSvc',\n 'paymentsSvc', 'securitySvc', 'gridSortSvc', 'terminalSvc', 'accountingBookSvc', 'localStorageService', 'tenantSettingSvc',\n function ($scope, $modal, $q, $window, $translate, $timeout, $filter, semesterSvc,\n paymentsSvc, securitySvc, gridSortSvc, terminalSvc, accountingBookSvc, localStorageService, tenantSettingSvc) {\n\n $scope.semesterDataRange = 1; // 1 - semester, 2 - from to\n $scope.fromDate = moment().subtract(3, 'M').startOf('day').toDate();\n $scope.toDate = moment().startOf('day').toDate();\n\n if (localStorageService.isSupported) {\n $scope.semesterDataRange = localStorageService.get('semesterDataRange') || 1;\n }\n\n $scope.customFilter = { invoiceForType: [], terminal: [] };\n $scope.rawPayments = [];\n $scope.payments = [];\n\n $scope.accountingBooks = accountingBookSvc.getAllAsync();\n\n function preFilter() {\n $q.all([$scope.rawPayments.$promise, $scope.terminals.$promise, $scope.accountingBooks.$promise]).then(function () {\n var typeIDs = _.values($scope.customFilter.invoiceForType);\n var accountingBookIDs = _.values($scope.customFilter.accountingBooks);\n $scope.payments.length = 0;\n $scope.payments.push.apply($scope.payments,\n _.filter($scope.rawPayments, function (o) {\n var includesTypeID = true;\n if (typeIDs.length > 0) {\n includesTypeID = _.includes(typeIDs, o.typeID);\n }\n\n var includesTerminalID = true;\n if ($scope.customFilter.terminal.length > 0) {\n includesTerminalID = _.includes($scope.customFilter.terminal, o.terminalID);\n }\n\n var includesAccountBookID = true;\n if (accountingBookIDs.length > 0) {\n includesAccountBookID = _.includes(accountingBookIDs, o.accountingBookID);\n }\n\n return includesTypeID && includesTerminalID && includesAccountBookID;\n })\n );\n });\n }\n\n $scope.onDataRangeChanged = function () {\n if (localStorageService.isSupported) {\n localStorageService.set('semesterDataRange', $scope.semesterDataRange);\n }\n\n if ($scope.semesterID != null) {\n loadData();\n }\n\n if ($scope.gridSettings.gridInstance) {\n if ($scope.semesterDataRange === 1) {\n $scope.gridSettings.gridInstance.columnOption(\"semesterColumn\", \"visible\", false);\n } else {\n $scope.gridSettings.gridInstance.columnOption(\"semesterColumn\", \"visible\", true);\n }\n }\n }\n\n function loadData() {\n if ($scope.semesterDataRange === 1) {\n $scope.rawPayments = paymentsSvc.getAllForSemester($scope.semesterID, true);\n } else {\n $scope.rawPayments = paymentsSvc.getAllForDateRange(\n $scope.fromDate, $scope.toDate, true);\n }\n preFilter();\n }\n\n $scope.terminals = terminalSvc.getAllAsync();\n\n $scope.icons = [{\n value: 1,\n label: $translate.instant('TXT_LAB_COURSE')\n }, {\n value: 2,\n label: $translate.instant('TXT_LAB_ACTION_SINGULAR')\n }, {\n value: 3,\n label: $translate.instant('TXT_LAB_KINDERGARTEN')\n }, {\n value: 4,\n label: $translate.instant('TXT_LAB_RESERVATION')\n }];\n\n $scope.$on('refreshData', function (e, data) {\n if ($scope.semesterID) {\n loadData();\n $scope.selectedPayment = null;\n }\n });\n\n $scope.$watch('customFilter', function (newValue, oldValue) {\n preFilter();\n }, true);\n\n $scope.gridSettings = {\n name: 'payments',\n keyExpr: 'paymentID',\n shouldShowColumnChooser: true,\n exportVisibleColumnsOnly: true,\n allowColumnReordering: true,\n columns: [\n {\n name: 'semesterColumn',\n dataField: 'semesterID',\n caption: $translate.instant('TXT_LBL_SEMESTER'),\n dataType: 'string',\n width: '120px',\n calculateCellValue: function (rowData) {\n return $filter('semester')(rowData.semesterID);\n },\n visible: $scope.semesterDataRange === 2\n },\n {\n dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', width: '160px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentFullName') }\n },\n {\n dataField: 'operatorFullName', caption: $translate.instant(\"TXT_LBL_PARENT\"), dataType: 'string', width: '160px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'operatorFullName') }\n },\n {\n dataField: 'typeID',\n caption: $translate.instant(\"TXT_LBL_TYPE\"),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('invoiceForType')(rowData.typeID);\n },\n width: '55px'\n },\n { dataField: 'subject', caption: $translate.instant('TXT_LBL_SUBJECT'), dataType: 'string' },\n { dataField: 'notes', caption: $translate.instant('TXT_NOTE'), dataType: 'string' },\n { dataField: 'value', caption: $translate.instant('TXT_LBL_AMOUNT'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n {\n dataField: 'paymentTypeID',\n caption: $translate.instant(\"TXT_LBL_PAYMENT\"),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('paymentType')(rowData.paymentTypeID);\n },\n width: '70px'\n },\n { dataField: 'paymentDate', caption: $translate.instant('TXT_LBL_DATE'), dataType: 'date', width: '90px', sortOrder: 'desc' },\n { dataField: 'invoiceNo', caption: $translate.instant('TXT_LBL_INVOICE_NO'), dataType: 'string', width: '90px', visible: false },\n {\n dataField: 'terminalID',\n caption: $translate.instant('TXT_LBL_TERMINAL'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('terminal')(rowData.terminalID);\n },\n width: '150px',\n visible: false\n },\n {\n dataField: 'email',\n caption: $translate.instant('TXT_LBL_EMAIL'),\n dataType: 'string',\n width: '180px',\n visible: false\n },\n {\n dataField: 'accountingBookID',\n caption: $translate.instant('TXT_LBL_ACCOUNTING_BOOK'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('accountingBook')(rowData.accountingBookID);\n },\n width: '180px',\n visible: false\n },\n ],\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.accountingBookTransactionID || data.paymentTypeID === 4) {\n e.rowElement.addClass('text-muted');\n }\n if (data.value < 0 && !data.accountingBookTransactionID) {\n e.rowElement.addClass('text-danger');\n }\n }\n },\n shouldDisableEdit: function (row) { return !!row.accountingBookTransactionID || (row.paymentTypeID === 4); },\n customCommands: [{\n text: $translate.instant('TXT_MENU_PRINT_RECEIPT'),\n isVisible: function (row) {\n return row.paymentTypeID === 1 && securitySvc.isInRole('Payment.CashReceipt') && securitySvc.isInRole('Reports');\n },\n callback: function (row) { onPrintReceipt(row.paymentID, 'pdf'); }\n },\n {\n text: $translate.instant('TXT_MENU_PRINT_INVOICE'),\n isVisible: function () { return securitySvc.isInRole('CourseRegistration.PrintInvoice') && securitySvc.isInRole('Reports'); },\n callback: function (row) { onPrintInvoice(row.invoiceID); }\n },\n {\n text: $translate.instant('TXT_MENU_PRINT_SALES_REPORT'),\n isVisible: function () { return securitySvc.isInRole('Payment.SalesReport') && securitySvc.isInRole('Reports'); },\n callback: function (row) { onPrintSalesReport(); }\n },\n {\n text: $translate.instant('TXT_MENU_PRINT_PAYMENT_CONFIRMATION_REPORT'),\n isVisible: function () { return securitySvc.isInRole('Payment.ConfirmationReport') && securitySvc.isInRole('Reports'); },\n callback: function (row) { onPrintConfirmationReport(row.paymentID, 'pdf'); }\n },\n {\n text: $translate.instant('TXT_MENU_EXPORT_RECEIPT_XLS'),\n isVisible: function (row) {\n return row.paymentTypeID === 1 && securitySvc.isInRole('Payment.CashReceipt') && securitySvc.isInRole('Reports');\n },\n callback: function (row) { onPrintReceipt(row.paymentID, 'xls'); }\n },\n {\n text: $translate.instant('TXT_MENU_EXPORT_PAYMENT_CONFIRMATION_REPORT_XLS'),\n isVisible: function () { return securitySvc.isInRole('Payment.ConfirmationReport') && securitySvc.isInRole('Reports'); },\n callback: function (row) { onPrintConfirmationReport(row.paymentID, 'xls'); }\n },\n {\n text: \"(\" + $translate.instant('TXT_LBL_SUPPORT') + \") \" + $translate.instant('TXT_ISSUE_TAX_DOCUMENT_IF_NEEDED'),\n isVisible: function () { return tenantSettingSvc.settings.createTaxDocuments && securitySvc.isInRole('Support'); },\n callback: function (row) { onIssueTaxDocumentIfNeeded(row.paymentID); }\n }]\n }\n\n function onPrintReceipt(paymentID, format) {\n if (securitySvc.isInRole('Payment.CashReceipt') && securitySvc.isInRole('Reports')) {\n\n if (format == 'xls') {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n }\n else {\n $window.open('/Admin/Report/CashReceipt?PaymentID=' + paymentID,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n }\n }\n\n function onPrintInvoice(invoiceID) {\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n function onPrintConfirmationReport(paymentID, format) {\n if (securitySvc.isInRole('Payment.ConfirmationReport') && securitySvc.isInRole('Reports')) {\n\n if (format == 'xls') {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n }\n else {\n $window.open('/Admin/Report/PaymentConfirmation?PaymentID=' + paymentID,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n }\n }\n \n function onIssueTaxDocumentIfNeeded(paymentID) {\n paymentsSvc.issueTaxDocumentIfNeeded(paymentID);\n }\n\n function onPrintSalesReport() {\n salesReportParamsPromise.$promise.then(function () { \n salesReportParamsPromise.show();\n });\n }\n\n\n $q.all([semesterSvc.getDefaultAsync()])\n .then(function (data) {\n if (data[0]) {\n $scope.semesterID = data[0].id;\n }\n\n if ($scope.semesterID) {\n // get invoices\n loadData();\n }\n\n });\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n loadData();\n $scope.selectedPayment = null;\n }\n }\n\n $scope.filterSummaryPaymentTypes = {\n type: 'PieChart', data: [\n ['Component', 'Value'],\n [$translate.instant('TXT_VAL_PAYMENT_TYPE_BANK_TRANSFER'), 0],\n [$translate.instant('TXT_VAL_PAYMENT_TYPE_CASH'), 0],\n [$translate.instant('TXT_VAL_PAYMENT_TYPE_CREDIT_CARD'), 0],\n [$translate.instant('TXT_VAL_PAYMENT_TYPE_BENEFIT_PLUS'), 0],\n [$translate.instant('TXT_VAL_PAYMENT_TYPE_ONLINE'), 0]\n ], options: {\n displayExactValues: true,\n chartArea: { top: '0px', left: '0px', width: '75%', height: '75%' },\n //pieSliceText: 'label',\n legend: { position: 'right' },\n }\n };\n\n $scope.onFilterApplied = function (filteredRows) {\n $scope.summary = paymentsSvc.calculateSummary(filteredRows);\n $timeout(function () {\n $scope.filterSummaryPaymentTypes.data[1][1] = $scope.summary.paymentTypes[0].value;\n $scope.filterSummaryPaymentTypes.data[2][1] = $scope.summary.paymentTypes[1].value;\n $scope.filterSummaryPaymentTypes.data[3][1] = $scope.summary.paymentTypes[2].value;\n $scope.filterSummaryPaymentTypes.data[4][1] = $scope.summary.paymentTypes[3].value;\n $scope.filterSummaryPaymentTypes.data[5][1] = $scope.summary.paymentTypes[4].value;\n });\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"finance/payments/payments-tabs/detail.html\"\n }, {\n title: 'TXT_FILTER_SUMMARY',\n template: \"finance/payments/payments-tabs/filter-summary.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n if (newValue !== oldValue && newValue === 1) {\n // Reset google chart to fix wrong positioning\n var orig = $scope.filterSummaryPaymentTypes.data[1][1];\n $scope.filterSummaryPaymentTypes.data[1][1] = 1;\n $timeout(function () {\n $scope.filterSummaryPaymentTypes.data[1][1] = orig;\n });\n }\n // $scope.$broadcast('activeTabChanged', { activeTab: newValue });\n });\n\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$scope.paymentDetail = {\n paymentID: 0\n };\n\n detailDialogPromise.$promise.then(function () {\n $scope.detailError = null;\n detailDialogPromise.$scope.onSave = function (payment) {\n loadData();\n $q.all([$scope.rawPayments.$promise, $scope.terminals.$promise, $scope.accountingBooks.$promise]).then(function () {\n if (!!payment && !!$scope.gridSettings.gridInstance) {\n $scope.gridSettings.gridInstance.selectRows([payment.paymentID], false);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowSelected = function (data) {\n $scope.selectedPayment = data;\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$scope.paymentDetail = {\n paymentID: data.paymentID,\n invoiceForType: data.typeID,\n invoiceID: data.invoiceID,\n studentID: data.studentID,\n semesterID: data.semesterID,\n // This is wrong!! typeReferenceID for Courses And Actions should contain CourseRegistrationID\n // The same wrong code is in PaymentService.UpdateAsync\n // The problem is in wbPaymentEdit\n courseID: data.typeID !== 3 ? data.typeReferenceID : null,\n activityID: null,\n activityReconciliationID: data.typeID === 3 ? data.typeReferenceID : null,\n paymentTypeID: data.paymentTypeID,\n amount: data.value,\n selectedDate: data.paymentDate,\n notes: data.notes,\n cashReceiptNo: data.cashReceiptNo\n };\n\n detailDialogPromise.$promise.then(function () {\n $scope.detailError = null;\n detailDialogPromise.$scope.onSave = function (payment) {\n loadData();\n $q.all([$scope.rawPayments.$promise, $scope.terminals.$promise, $scope.accountingBooks.$promise]).then(function () {\n if (!!payment && !!$scope.gridSettings.gridInstance) {\n $scope.gridSettings.gridInstance.selectRows([payment.paymentID], false);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n paymentsSvc.remove(data, function () {\n preFilter();\n });\n }\n\n $scope.onPaymentDetailSave = function (paymentDetail) {\n\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'finance/payments/payments-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var salesReportParamsPromise = $modal({\n templateUrl: 'finance/payments/sales-report-params.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","'use strict';\n\nwbApp.controller('PaymentsDetailCtrl', ['$scope', '$window', 'paymentsSvc', 'messageBoxSvc', 'securitySvc', 'terminalSvc', 'tenantSettingSvc',\nfunction ($scope, $window, paymentsSvc, messageBoxSvc, securitySvc, terminalSvc, tenantSettingSvc) {\n $scope.payment = paymentsSvc.initializePaymentEditModel($scope.paymentDetail, $scope.isAddBankPayment, $scope.isAddDuePayment, $scope.isOnlinePayment);\n\n $scope.onClearBtnClick = function (payment) {\n paymentsSvc.clearPaymentEditModel(payment, $scope.isAddBankPayment, $scope.isAddDuePayment, $scope.isOnlinePayment);\n }\n\n $scope.terminal = terminalSvc.getTerminalSetting();\n\n $scope.terminalChanged = function (terminal) {\n terminalSvc.setTerminalSetting(terminal);\n }\n\n $scope.isSaving = false;\n\n $scope.onSaveBtnClick = function (payment) {\n\n if ($scope.isSaving)\n {\n return;\n }\n\n $scope.isSaving = true;\n\n if (!payment.paymentID) {\n messageBoxSvc.showConfirmClientNotification({\n userSetting: ['confimNotificationCourseRegistrationPayment'],\n showSendSmsNotification: false,\n callback: function (notificationConfig) {\n savePayment(notificationConfig.sendEmailNotification);\n }\n });\n } else {\n savePayment(false);\n }\n }\n\n function savePayment(sendNotification) {\n var model = $scope.payment;\n\n if ($scope.isAddBankPayment) {\n paymentsSvc.savePaymentEditModel(model, sendNotification, success, error,\n $scope.bankTransactionDetail.transactionID, $scope.bankTransactionDetail.accountingBookID, false);\n } else if ($scope.isOnlinePayment) {\n paymentsSvc.savePaymentEditModel(model, sendNotification, success, error,\n $scope.onlineTransactionDetail.transactionID, 0,true); \n } else {\n paymentsSvc.savePaymentEditModel(model, sendNotification, success, error);\n }\n\n function success(data) {\n if (model.paymentTypeID === 1 && securitySvc.isInRole('Payment.CashReceipt') && securitySvc.isInRole('Reports')) { // Cash\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_PRINT',\n message: 'TXT_CONFIRM_PRINT_CASH_RECEIPT_MESSAGE',\n buttons: [{\n text: 'TXT_BTN_NO',\n callback: function () { finalizePayment(data); }\n }, {\n text: 'TXT_BTN_PRINT',\n callback: function () { finalizePayment(data); onPrintReceipt(data.paymentID); }\n }]\n });\n } else if (model.paymentTypeID === 2 && securitySvc.isInRole('Payment.ConfirmationReport') && securitySvc.isInRole('Reports') &&\n tenantSettingSvc.settings.autoPaymentConfirmationPrintForCardPayments) { // Card\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_PRINT',\n message: 'TXT_CONFIRM_PRINT_PAYMENT_EVIDENCE_MESSAGE',\n buttons: [{\n text: 'TXT_BTN_NO',\n callback: function () { finalizePayment(data); }\n }, {\n text: 'TXT_BTN_PRINT',\n callback: function () { finalizePayment(data); onPrintPaymentEvidence(data.paymentID); }\n }]\n });\n } else { \n finalizePayment(data);\n }\n }\n\n function error(data) {\n $scope.detailError = data;\n $scope.isSaving = false;\n }\n }\n\n function onPrintReceipt(paymentID) {\n $window.open('/Admin/Report/CashReceipt?PaymentID=' + paymentID,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n function onPrintPaymentEvidence(paymentID) {\n $window.open('/Admin/Report/PaymentConfirmation?PaymentID=' + paymentID,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n function finalizePayment(payment) {\n $scope.onClearBtnClick($scope.payment);\n $scope.$hide();\n $scope.isSaving = false;\n if ($scope.onSave) {\n $scope.onSave(payment);\n }\n }\n\n\n\n $scope.isPaymentValid = function (payment) {\n if ($scope.terminal.isRequired && !$scope.terminal.terminalID) {\n return false;\n }\n\n return paymentsSvc.isPaymentEditModelValid(payment);\n }\n\n}]);","wbApp.controller('PaymentsSalesRepotParamsCtrl', ['$scope', '$window', 'terminalSvc',\nfunction ($scope, $window, terminalSvc) {\n\n $scope.terminalSetting = terminalSvc.getTerminalSetting();\n\n $scope.model = {\r\n startDate: moment().toDate(),\r\n endDate: moment().toDate(),\r\n paymentTypeID: 1, // Cash\r\n terminalID: null\r\n };\n\n $scope.terminalSetting.$promise.then(function (s) {\r\n $scope.model.terminalID = s.terminalID;\r\n });\n\n\n $scope.onDetailSave = function () {\r\n\r\n if ($scope.isSaving) {\r\n return;\r\n }\r\n\r\n $scope.isSaving = true;\r\n\r\n var fromDate = moment($scope.model.startDate).startOf('day').toDate();\r\n var toDate = moment($scope.model.endDate).endOf('day').toDate();\r\n\r\n $scope.$hide();\r\n\r\n var terminalIDparam = !!$scope.model.terminalID ? '&terminalID=' + $scope.model.terminalID : '';\r\n\r\n $window.open('/Admin/Report/Sales' + \n '?startDate=' + fromDate.toJSON() + \n '&endDate=' + toDate.toJSON() + \n terminalIDparam +\n '&paymentTypeID=' + $scope.model.paymentTypeID,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\r\n }\n\n}]);\n","'use strict';\n\nwbApp.controller('TaxDocumentsCtrl', ['$scope', '$q', '$window', '$translate', '$filter', 'semesterSvc',\n 'taxDocumentsSvc', 'accountingBookSvc', 'securitySvc', 'gridSortSvc', 'messageBoxSvc', 'notificationSvc',\nfunction ($scope, $q, $window, $translate, $filter, semesterSvc,\n taxDocumentsSvc, accountingBookSvc, securitySvc, gridSortSvc, messageBoxSvc, notificationSvc) {\n\n $scope.customFilter = { accountingBooks: [] };\n $scope.rawTaxDocuments = [];\n $scope.taxDocuments = [];\n $scope.filteredRows = [];\n\n $scope.accountingBooks = accountingBookSvc.getAllAsync();\n\n function preFilter() {\n $q.all([$scope.rawTaxDocuments.$promise, $scope.accountingBooks.$promise]).then(function () {\n var accountingBookIDs = _.values($scope.customFilter.accountingBooks);\n $scope.taxDocuments.length = 0;\n $scope.taxDocuments.push.apply($scope.taxDocuments,\n _.filter($scope.rawTaxDocuments, function (o) {\n \n if (accountingBookIDs.length > 0) {\n return _.includes(accountingBookIDs, o.accountingBookID);\n }\n\n return true;\n })\n );\n });\n }\n\n $scope.$watch('customFilter', function (newValue, oldValue) {\n preFilter();\n }, true);\n\n $scope.gridSettings = {\n name: 'taxDocuments',\n columns: [\n { dataField: 'taxDocumentNo', caption: $translate.instant('TXT_LBL_TAX_DOCUMENT_NO'), dataType: 'number', width: '100px', sortOrder: 'dsc' },\n { dataField: 'invoiceNo', caption: $translate.instant('TXT_LBL_INVOICE_NO'), dataType: 'number', width: '100px' },\n {\n dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', width: '160px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentFullName') }\n },\n {\n dataField: 'operatorFullName', caption: $translate.instant(\"TXT_LBL_PARENT\"), dataType: 'string', width: '160px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'operatorFullName') }\n },\n { dataField: 'subject', caption: $translate.instant('TXT_LBL_SUBJECT'), dataType: 'string' },\n { dataField: 'issueDate', caption: $translate.instant('TXT_LBL_INVOICE_DATE'), dataType: 'date', width: '90px' },\n { dataField: 'total', caption: $translate.instant('TXT_LBL_AMOUNT'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'accountingBookID', caption: $translate.instant('TXT_LBL_ACCOUNTING_BOOK'), dataType: 'number', visible: false },\n ],\n //onRowPrepared: function (e) {\n // if (e.rowType == \"data\") {\n // var data = e.component.getKeyByRowIndex(e.rowIndex);\n // if (data.notLatest) {\n // e.rowElement.addClass('text-muted');\n // }\n // }\n //}, \n customCommands: [{\n text: $translate.instant('TXT_MENU_PRINT_TAX_DOCUMENT'),\n isVisible: function (row) {\n return securitySvc.isInRole('TaxDocument.Print') && securitySvc.isInRole('Reports');\n },\n callback: function (row) { onPrintTaxDocument(row.taxDocumentID, 'pdf'); }\n },\n {\n text: $translate.instant('TXT_MENU_PRINT_TAX_DOCUMENT_ALL'),\n isVisible: function (row) {\n return securitySvc.isInRole('TaxDocument.Print') && securitySvc.isInRole('Reports');\n },\n callback: function (row, allRows) { onPrintTaxDocumentAll(row, allRows); }\n },\n {\n text: $translate.instant('TXT_MENU_PRINT_INVOICE'),\n isVisible: function (row) {\n return securitySvc.isInRole('CourseRegistration.PrintInvoice') && securitySvc.isInRole('Reports');\n },\n callback: function (row) { onPrintInvoice(row.invoiceID); }\n }, {\n text: $translate.instant('TXT_MENU_STORMWARE_EXPORT'),\n callback: function (row, allRows) { onStormwareExportRequested(row, allRows); }\n }, {\n text: $translate.instant('TXT_MENU_MONEYS3_EXPORT'),\n callback: function (row, allRows) { onMoneyS3ExportRequested(row, allRows); }\n }, {\n text: $translate.instant('TXT_MENU_CSV_EXPORT'),\n callback: function (row, allRows) { onCsvExportRequested(row, allRows); }\n }, {\n text: $translate.instant('TXT_EXPORT_TAX_DOCUMENT_TO_EXCEL'),\n isVisible: function (row) {\n return securitySvc.isInRole('TaxDocument.Print') && securitySvc.isInRole('Reports');\n },\n callback: function (row) { onPrintTaxDocument(row.taxDocumentID, 'xls'); }\n }]\n }\n\n function onPrintTaxDocumentAll(row) {\n var uniqueByAccountingBooks = _.uniqBy($scope.filteredRows, 'accountingBookID');\n if (uniqueByAccountingBooks.length > 1) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_ERROR_INVOICES_PRINT_GENERATION',\n message: $translate.instant('TXT_TEXT_TOO_MANY_ACCOUNTING_BOOKS_IN_PRINT').f(uniqueByAccountingBooks.length),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n return;\n }\n\n var taxDocumentsIDs = encodeURIComponent(JSON.stringify(_.map($scope.filteredRows, 'taxDocumentID')));\n\n $window.open('/Admin/Report/TaxDocumentAll?taxDocumentsIDs=' + taxDocumentsIDs,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n\n $scope.onFilterApplied = function (filteredRows) {\n $scope.filteredRows = filteredRows;\n }\n\n function onPrintInvoice(invoiceID) {\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n function onPrintTaxDocument(taxDocumentID, format) {\n\n if (format == 'xls') {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n\n }\n else {\n $window.open('/Admin/Report/TaxDocument?TaxDocumentID=' + taxDocumentID,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n }\n\n $scope.$on('refreshData', function (e, data) {\n if ($scope.semesterID) {\n $scope.rawTaxDocuments = taxDocumentsSvc.GetBriefBySemester($scope.semesterID);\n $scope.selectedTaxDocument = null;\n preFilter();\n }\n });\n\n $q.all([semesterSvc.getDefaultAsync()])\n .then(function (data) {\n if (data[0]) {\n $scope.semesterID = data[0].id;\n }\n\n // get taxDocuemnts\n $scope.rawTaxDocuments = taxDocumentsSvc.GetBriefBySemester($scope.semesterID);\n preFilter(); \n });\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n // get taxDocuemnts\n $scope.rawTaxDocuments = taxDocumentsSvc.GetBriefBySemester(semesterID);\n $scope.selectedTaxDocument = null;\n preFilter();\n }\n }\n\n $scope.onRowSelected = function (data) {\n $scope.selectedTaxDocument = data;\n }\n\n function onStormwareExportRequested(row) {\n\n var uniqueByAccountingBooks = _.uniqBy($scope.filteredRows, 'accountingBookID');\n if (uniqueByAccountingBooks.length > 1) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_ERROR_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_TOO_MANY_ACCOUNTING_BOOKS_IN_EXPORT_TD').f(uniqueByAccountingBooks.length),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n return;\n }\n\n function onYesClicked() {\n taxDocumentsSvc.getStormwareTaxDocumentExport(row.accountingBookID, _.map($scope.filteredRows, 'taxDocumentID'),\n onStormwareExportGenerated,\n function (error) {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_SERVER_ERROR'),\n notificationSvc.translateError(error));\n });\n }\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_CONFIRM_TAX_DOCUMENT_EXPORT_GENERATION').f($scope.filteredRows.length),\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: onYesClicked\n }]\n });\n }\n\n\n function onMoneyS3ExportRequested(row)\n {\n var uniqueByAccountingBooks = _.uniqBy($scope.filteredRows, 'accountingBookID');\n if (uniqueByAccountingBooks.length > 1) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_ERROR_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_TOO_MANY_ACCOUNTING_BOOKS_IN_EXPORT_TD').f(uniqueByAccountingBooks.length),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n return;\n }\n\n function onYesClicked() {\n taxDocumentsSvc.getMoneyS3TaxDocumentExport(row.accountingBookID, _.map($scope.filteredRows, 'taxDocumentID'),\n onStormwareExportGenerated,\n function (error) {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_SERVER_ERROR'),\n notificationSvc.translateError(error));\n });\n }\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_CONFIRM_TAX_DOCUMENT_EXPORT_GENERATION').f($scope.filteredRows.length),\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: onYesClicked\n }]\n });\n }\n\n function onCsvExportRequested(row)\n {\n var uniqueByAccountingBooks = _.uniqBy($scope.filteredRows, 'accountingBookID');\n if (uniqueByAccountingBooks.length > 1) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_ERROR_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_TOO_MANY_ACCOUNTING_BOOKS_IN_EXPORT_TD').f(uniqueByAccountingBooks.length),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n return;\n }\n\n function onYesClicked() {\n taxDocumentsSvc.getCsvTaxDocumentExport(row.accountingBookID, _.map($scope.filteredRows, 'taxDocumentID'),\n onStormwareExportGenerated,\n function (error) {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_SERVER_ERROR'),\n notificationSvc.translateError(error));\n });\n }\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_CONFIRM_TAX_DOCUMENT_EXPORT_GENERATION').f($scope.filteredRows.length),\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: onYesClicked\n }]\n });\n }\n\n function onStormwareExportGenerated(data) {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n }\n\n}]);\n","'use strict';\n\nwbApp.directive('wbBankImportTypeCombo', ['$timeout', '$translate', '$window',\n function ($timeout, $translate, $window) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n console.log($window.location.origin);\n \n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_VAL_IMPORT_TYPE_NONE' },\n { id: 1, text: 'TXT_VAL_IMPORT_TYPE_FIO_AUTOMATIC' },\n { id: 2, text: 'TXT_VAL_IMPORT_TYPE_RAIFFEISENBANK_AUTOMATIC' },\n { id: 3, text: 'TXT_VAL_IMPORT_TYPE_PSD2' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbOnlinePaymentTypeCombo', ['$timeout',\n function ($timeout) {\n function formatResult(data) {\n if (!data) { return; }\n return data.text;\n }\n\n function formatSelection(data) {\n return data.text;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n // { id: 0, text: 'Payeezy (Fio)' },\n { id: 1, text: 'Comgate' },\n { id: 2, text: 'GP webpay' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbYearCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(paymentType) {\n if (!paymentType) { return; }\n return $translate.instant(paymentType.text);\n }\n\n function formatSelection(paymentType) {\n return $translate.instant(paymentType.text);\n }\n\n return {\n restrict: 'A',\n require: '^ngModel',\n scope: {\n model: '=ngModel',\n maxYear: '='\n },\n link: function (scope, elm, attrs, controller) {\n\n var data = [{ id: 2017, text: '2017' },\n { id: 2018, text: '2018' },\n { id: 2019, text: '2019' },\n { id: 2020, text: '2020' },\n { id: 2021, text: '2021' },\n { id: 2022, text: '2022' },\n { id: 2023, text: '2023' },\n { id: 2024, text: '2024' },\n { id: 2025, text: '2025' },\n { id: 2026, text: '2026' },\n { id: 2027, text: '2027' },\n { id: 2028, text: '2028' }];\n\n if (!!scope.maxYear) {\n data = _.filter(data, function (y) { return y.id <= scope.maxYear });\n }\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: data\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"2018\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.filter('invoiceValid', ['$translate', function ($translate) {\n return function (input) {\n\n if (input === null || input === undefined) {\n return '';\n }\n\n return input\n ? $translate.instant('TXT_INVOICE_VALID')\n : $translate.instant('TXT_INVOICE_CANCEL');\n }\n}]);","wbApp.factory('bankSvc', ['$resource', 'repositorySvc', '$q',\n function ($resource, repositorySvc, $q) {\n\n var Bank = $resource('/Api/Bank/GetAll', {}, {\n 'query': { method: 'GET', isArray: true },\n 'getAllByAccountingBookID': { method: 'GET', isArray: true, url: '/Api/Bank/GetAllByAccountingBookID' },\n 'getUnimportantByAccountingBookID': { method: 'GET', isArray: true, url: '/Api/Bank/GetUnimportantByAccountingBookID' },\n 'requestPairing': { method: 'POST', isArray: false, url: '/Api/Bank/RequestPairing' },\n 'removePairing': { method: 'POST', isArray: false, url: '/Api/Bank/RemovePairing' },\n 'markAsUnimportant': { method: 'POST', isArray: false, url: '/Api/Bank/MarkAsUnimportant' },\n 'restoreUnimportant': { method: 'POST', isArray: false, url: '/Api/Bank/RestoreUnimportant' },\n\n });\n\n function getAllByAccountingBookID(accountingBookID, fromDate, toDate) {\n return repositorySvc.customGet('getAllByAccountingBookID', Bank, {\n accountingBookID: accountingBookID,\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function getUnimportantByAccountingBookID(accountingBookID, fromDate, toDate) {\n return repositorySvc.customGet('getUnimportantByAccountingBookID', Bank, {\n accountingBookID: accountingBookID,\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function requestPairing(accountingBookID) {\n return $q(function (resolve, reject) {\n repositorySvc.customPostWithParams(\n 'requestPairing',\n Bank, {\n accountingBookID: accountingBookID \n },\n null,\n resolve,\n reject\n )\n });\n }\n\n function removePairing(accountingBookID, transactionID, removePayment) {\n return $q(function (resolve, reject) {\n repositorySvc.customPost(\n 'removePairing',\n Bank, {\n accountingBookID: accountingBookID,\n transactionID: transactionID,\n removePayment: removePayment\n },\n resolve,\n reject\n )\n });\n }\n\n function markAsUnimportant(accountingBookID, transactionID) {\n return $q(function (resolve, reject) {\n repositorySvc.customPost(\n 'markAsUnimportant',\n Bank, {\n accountingBookID: accountingBookID,\n transactionID: transactionID\n },\n resolve,\n reject\n )\n });\n }\n\n function restoreUnimportant(accountingBookID, accountingBookTransactionIDs) {\n return $q(function (resolve, reject) {\n repositorySvc.customPost(\n 'restoreUnimportant',\n Bank, {\n accountingBookID: accountingBookID,\n accountingBookTransactionIDs: accountingBookTransactionIDs\n },\n resolve,\n reject\n )\n });\n }\n\n return {\n getAllByAccountingBookID: getAllByAccountingBookID,\n getUnimportantByAccountingBookID: getUnimportantByAccountingBookID,\n requestPairing: requestPairing,\n removePairing: removePairing,\n markAsUnimportant: markAsUnimportant,\n restoreUnimportant: restoreUnimportant\n }\n }]);","wbApp.factory('compensationsSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n\n var Compensations = $resource('/Api/CompensationSummary/GetAll', {}, {\n 'query': { method: 'GET', isArray: true },\n 'getDetail': { method: 'GET', isArray: true, url: '/Api/CompensationSummary/GetDetail' },\n });\n\n function getAllAsync(semesterID) {\n return repositorySvc.get(Compensations, { semesterID: semesterID });\n }\n\n function getDetailAsync(semesterID, studentID) {\n return repositorySvc.customGet('getDetail', Compensations, {\n semesterID: semesterID,\n studentID: studentID\n });\n }\n\n return {\n getAllAsync: getAllAsync,\n getDetailAsync: getDetailAsync\n }\n }]);","wbApp.factory('taxDocumentsSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n\n var TaxDocuments = $resource('/Api/TaxDocuments/GetBriefBySemester', {}, {\n 'query': { method: 'GET', isArray: true },\n 'getStormwareTaxDocumentExport': { method: 'POST', url: '/Api/TaxDocuments/GetStormwareTaxDocumentExport' },\n 'getMoneyS3TaxDocumentExport': { method: 'POST', url: '/Api/TaxDocuments/GetMoneyS3TaxDocumentExport' },\n 'getCsvTaxDocumentExport': { method: 'POST', url: '/Api/TaxDocuments/GetCsvTaxDocumentExport' },\n });\n\n function GetBriefBySemester(semesterID) {\n return repositorySvc.get(TaxDocuments, { semesterID: semesterID });\n }\n\n function getStormwareTaxDocumentExport(accountingBookID, taxDocumentIDs, success, error) {\n return repositorySvc.customPost('getStormwareTaxDocumentExport', TaxDocuments, {\n accountingBookID: accountingBookID,\n taxDocumentIDs: taxDocumentIDs\n },\n success,\n error);\n }\n\n function getMoneyS3TaxDocumentExport(accountingBookID, taxDocumentIDs, success, error) {\n return repositorySvc.customPost('getMoneyS3TaxDocumentExport', TaxDocuments, {\n accountingBookID: accountingBookID,\n taxDocumentIDs: taxDocumentIDs\n },\n success,\n error);\n }\n\n function getCsvTaxDocumentExport(accountingBookID, taxDocumentIDs, success, error) {\n return repositorySvc.customPost('getCsvTaxDocumentExport', TaxDocuments, {\n accountingBookID: accountingBookID,\n taxDocumentIDs: taxDocumentIDs\n },\n success,\n error);\n }\n\n return {\n GetBriefBySemester: GetBriefBySemester,\n getStormwareTaxDocumentExport: getStormwareTaxDocumentExport,\n getMoneyS3TaxDocumentExport: getMoneyS3TaxDocumentExport,\n getCsvTaxDocumentExport: getCsvTaxDocumentExport\n }\n }]);","'use strict';\n\nwbApp.controller('FranchisesAttendanceSummaryCtrl', ['$scope', 'franchiseSvc',\nfunction ($scope, franchiseSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.fromDate = moment().startOf('month').toDate();\n $scope.toDate = moment().endOf('month').toDate();\n\n $scope.onDateRangeChanged = function () {\n $scope.attendanceSummary = franchiseSvc.getAttendanceSummaryAsync($scope.fromDate, $scope.toDate);\n }\n\n $scope.attendanceSummary = franchiseSvc.getAttendanceSummaryAsync($scope.fromDate, $scope.toDate);\n\n $scope.gridOptions = {\n sortInfo: { fields: ['tenantName'], directions: ['dsc'] },\n noCommandColumn: true,\n columnDefs: [\n { field: 'franchiseSubjectName', displayName: \"TXT_LBL_SUBJECT\", sort: 'locale' },\n { field: 'tenantName', displayName: \"TXT_LBL_PARTNER\", sort: 'locale', width: \"200px\" },\n { field: 'employeeFullName', displayName: \"TXT_LBL_EMPLOYEE\", sort: 'locale', width: \"200px\" },\n { field: 'noOFCredits', displayName: \"TXT_LBL_NO_OF_CREDITS\", width: \"120px\", align: 'right' }\n ]\n };\n\n //$scope.franchises = franchiseSvc.getAllAsync(true);\n}]);","'use strict';\n\nwbApp.controller('FranchisesCtrl', ['$scope', 'franchiseSvc', 'tenantSettingSvc',\nfunction ($scope, franchiseSvc, tenantSettingSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.requireTeacherFranchiseLicenses = tenantSettingSvc.settings.requireTeacherFranchiseLicenses;\n\n if ($scope.requireTeacherFranchiseLicenses) {\n $scope.gridOptions = {\r\n sortInfo: { fields: ['franchiseName'], directions: ['dsc'] },\n noCommandColumn: true,\n columnDefs: [\n { field: 'franchiseName', displayName: \"TXT_LBL_FRANCHISE\", sort: 'locale' },\n { field: 'noOfTeachers', displayName: \"TXT_LBL_NO_OF_TEACHERS\", width: \"90px\" },\n { field: 'noOfInActiveTeachers', displayName: \"TXT_LBL_NO_OF_INACTIVE_TEACHERS\", width: \"90px\" },\n { field: 'noOfTeachersWithoutLicense', displayName: \"TXT_LBL_NO_OF_TEACHERS_WITHOUT_LICENSE\", width: \"90px\" }\n ]\r\n };\r\n } else {\r\n $scope.gridOptions = {\r\n sortInfo: { fields: ['franchiseName'], directions: ['dsc'] },\n noCommandColumn: true,\n columnDefs: [\n { field: 'franchiseName', displayName: \"TXT_LBL_FRANCHISE\", sort: 'locale' },\n { field: 'noOfTeachers', displayName: \"TXT_LBL_NO_OF_TEACHERS\", width: \"90px\" },\n { field: 'noOfInActiveTeachers', displayName: \"TXT_LBL_NO_OF_INACTIVE_TEACHERS\", width: \"90px\" } \n ]\r\n };\r\n }\n\n $scope.franchises = franchiseSvc.getAllAsync(true);\n\n $scope.tabs = [\n {\n title: 'TXT_FRANCHISES_EMPLOYEES',\n template: \"franchise/franchises-tabs/employees.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.onRowSelected = function (data) {\n $scope.selectedFranchise = data;\n $scope.$broadcast('franchiseSelectionChanged', $scope.selectedFranchise);\n }\n\n $scope.$on('franchiseEmployeeUpdated', function (e, employee) {\n var newData = franchiseSvc.getAllAsync(true);\n newData.$promise.then(function (data) {\n var newFranchise = _.find(data, { franchiseTenantAlias: $scope.selectedFranchise.franchiseTenantAlias });\n if (newFranchise) {\n angular.extend($scope.selectedFranchise, newFranchise);\n } else {\n $scope.franchises = data;\n }\n });\n });\n\n //$scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n // $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n //});\n}]);","wbApp.controller('FranchisesEmployeesCtrl', ['$scope', '$modal', 'franchiseSvc', 'tenantSettingSvc',\nfunction ($scope, $modal, franchiseSvc, tenantSettingSvc) {\n\n $scope.employees = [];\n\n var selectedFranchise;\n\n $scope.requireTeacherFranchiseLicenses = tenantSettingSvc.settings.requireTeacherFranchiseLicenses;\n\n $scope.$on('franchiseSelectionChanged', function (e, newFranchise) {\n if (newFranchise) {\n selectedFranchise = newFranchise;\n $scope.employees = franchiseSvc.getEmployeesByTenant(selectedFranchise.franchiseTenantAlias);\n } else {\n $scope.employees = [];\n }\n });\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['fullName'], directions: ['dsc'] }, \n columnDefs: [\n { field: 'fullName', displayName: \"TXT_HUMAN_NAME\", sort: 'locale' },\n { field: 'franchiseActive', displayName: \"TXT_LBL_ACTIVE\", cellFilter: 'checkmark', width: '70px' }\n ]\n };\n\n\n $scope.onRowEdit = function (employee) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(employee);\n detailDialogPromise.$scope.selectedFranchise = selectedFranchise;\n detailDialogPromise.$scope.onSaveSuccess = function (newData) {\n employee.employeeDTO = newData.employeeDTO;\n $scope.$emit('franchiseEmployeeUpdated', employee);\n }\n detailDialogPromise.show();\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'franchise/franchises-tabs/employee-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);","wbApp.controller('FranchisesEmployeesDetailCtrl', ['$scope', '$modal', 'franchiseSvc', 'tenantInfo',\nfunction ($scope, $modal, franchiseSvc, tenantInfo) {\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['franchiseSubjectName'], directions: ['dsc'] },\n columnDefs: [\n { field: 'franchiseSubjectName', displayName: \"TXT_LBL_SUBJECT\", sort: 'locale' },\n { field: 'validFrom', displayName: \"TXT_LAB_VALID_FROM\", cellFilter: 'date:shortDate', width: '100px' },\n { field: 'validTo', displayName: \"TXT_LAB_VALID_TO\", cellFilter: 'date:shortDate', width: '100px' }\n ]\n };\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.licenses = $scope.model.licenses;\n detailDialogPromise.$scope.modelOrig = { isNew: true };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (license) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.licenses = $scope.model.licenses;\n detailDialogPromise.$scope.modelOrig = license;\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (license) {\n _.pull($scope.model.licenses, license);\n }\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n franchiseSvc.updateEmployeeByTenant($scope.selectedFranchise.franchiseTenantAlias, data, success, error);\n\n function success(newData) {\n $scope.$hide();\n $scope.onSaveSuccess(newData);\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'franchise/franchises-tabs/employee-license-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);","wbApp.controller('FranchisesEmployeesLicenseDetailCtrl', ['$scope', 'tenantInfo', 'subjectsSvc',\nfunction ($scope, tenantInfo, subjectsSvc) {\n $scope.model = angular.copy($scope.modelOrig);\n $scope.franchiseCentralTenantID = tenantInfo.tenantID;\n \n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) { \n angular.extend($scope.modelOrig, data);\n delete $scope.modelOrig.isNew;\n $scope.licenses.push($scope.modelOrig);\n } else {\n angular.extend($scope.modelOrig, data);\n }\n\n subjectsSvc.getFranchiseCentralSubject($scope.franchiseCentralTenantID, $scope.modelOrig.franchiseSubjectID)\n .then(function (subject) {\n $scope.modelOrig.franchiseSubjectName = subject.name;\n $scope.$hide();\n }, function (error) {\n $scope.detailError = error;\n $scope.isSaving = false;\n });\n \n }\n\n\n}]);","var webooker_franchise_models = webooker_franchise_models || {};\n\n(function (ns) {\n\n ns.FranchiseEmployee = function (employeeDTO) {\n this.employeeDTO = employeeDTO;\n\n this.fullName = employeeDTO.fullName;\n }\n\n Object.defineProperty(ns.FranchiseEmployee.prototype, 'franchiseActive', {\n enumerable: true, configurable: true,\n get: function () {\n return this.employeeDTO.franchises[0].active;\n },\n set: function (value) {\n this.employeeDTO.franchises[0].active = value;\n }\n });\n\n Object.defineProperty(ns.FranchiseEmployee.prototype, 'licenses', {\n enumerable: true, configurable: true,\n get: function () {\n return this.employeeDTO.franchises[0].licenses;\n },\n set: function (value) {\n this.employeeDTO.franchises[0].licenses = value;\n }\n });\n\n})(webooker_franchise_models);","'use strict';\n\nwbApp.factory('franchiseSvc', ['$resource', '$cacheFactory', '$q', 'repositorySvc', \n function ($resource, $cacheFactory, $q, repositorySvc) {\n\n var Franchise = $resource('/Api/Franchise/Get', {}, {\n 'getAll': { method: 'GET', isArray: true, url: '/Api/Franchise/GetAll' },\n 'getEmployeesByTenant': { method: 'GET', isArray: true, url: '/Api/Franchise/GetEmployeesByTenant' },\n 'updateEmployeeByTenant': { method: 'POST', isArray: false, url: '/Api/Franchise/UpdateEmployeeByTenant' },\n 'getAttendanceSummary': { method: 'GET', isArray: true, url: '/Api/Franchise/GetAttendanceSummary' },\n 'getAttendanceSummaryForFranchiseCentral': { method: 'GET', isArray: true, url: '/Api/Franchise/GetAttendanceSummaryForFranchiseCentral' },\n });\n\n var cache = $cacheFactory('franchiseSvcCache');\n\n function getAllAsync(refresh) {\n\n var models = cache.get('franchises');\n\n if (refresh || !models) {\n if (models) {\n cache.remove('franchises');\n }\n\n models = repositorySvc.customGet('getAll', Franchise);\n cache.put('franchises', models);\n }\n\n return models;\n }\n\n function getAttendanceSummaryAsync(fromDate, toDate) {\n return repositorySvc.customGet('getAttendanceSummary', Franchise, {\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function getAttendanceSummaryForFranchiseCentral(franchiseCentralTenantID, fromDate, toDate) {\n return repositorySvc.customGet('getAttendanceSummaryForFranchiseCentral', Franchise, {\n franchiseCentralTenantID: franchiseCentralTenantID,\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function getEmployeesByTenant(tenant) {\n var deferred = $q.defer();\n var result = [];\n result.$promise = deferred.promise;\n\n repositorySvc.customGet('getEmployeesByTenant', Franchise, {\n employeesForTenantAlias: tenant\n }).$promise.then(\n function (data) {\n angular.forEach(data, function (value) {\n result.push(new webooker_franchise_models.FranchiseEmployee(value));\n });\n deferred.resolve(result);\n },\n function (reason) { deferred.reject(reason); });\n\n return result;\n }\n\n function updateEmployeeByTenant(tenant, employee, success, error) {\n repositorySvc.customPost(\n 'updateEmployeeByTenant',\n Franchise,\n {\n employeesForTenantAlias: tenant,\n employee: employee.employeeDTO\n },\n function (data) {\n if (success) {\n success(new webooker_franchise_models.FranchiseEmployee(data));\n }\n },\n error\n );\n }\n\n return {\n getAllAsync: getAllAsync,\n getEmployeesByTenant: getEmployeesByTenant,\n updateEmployeeByTenant: updateEmployeeByTenant,\n getAttendanceSummaryAsync: getAttendanceSummaryAsync,\n getAttendanceSummaryForFranchiseCentral: getAttendanceSummaryForFranchiseCentral\n }\n }\n]);\n","'use strict';\n\nwbApp.controller('MainCtrl', ['$scope', 'breadcrumbs',\nfunction ($scope, breadcrumbs) {\n $scope.breadcrumbs = breadcrumbs;\n\n $scope.onRefreshButtonClick = function () {\n $scope.$broadcast('refreshData', null);\n }\n}]);","'use strict';\n\nwbApp.controller('AddressListCtrl', ['$scope', 'recipientSvc',\nfunction ($scope, recipientSvc) {\n\n $scope.addressList = '';\n\n recipientSvc.getAddressList($scope.recipientList)\n .then(function (data) {\n $scope.addressList = data;\n });\n\n}]);\n","'use strict';\n\nwbApp.controller('AddressSelectorCtrl', ['$scope', \nfunction ($scope) {\n\n $scope.onAdd = function () {\n $scope.onAddAddress($scope.recipient);\n }\n\n $scope.isAddDisabled = function () {\n\n if (!$scope.recipient) {\n return true;\n }\n\n var groupType = parseInt($scope.recipient.recipientGroupType);\n\n switch (groupType) {\n case 1:\n return !$scope.recipient.userId;\n case 2:\n return !$scope.recipient.semesterId || !$scope.recipient.courseId;\n case 3:\n return !$scope.recipient.semesterId || !$scope.recipient.courseId || !$scope.recipient.courseScheduleId;\n case 4:\n return !$scope.recipient.semesterId || !$scope.recipient.classroomId;\n case 5:\n return !$scope.recipient.classroomId || !$scope.recipient.toDate;\n case 6:\n return !$scope.recipient.semesterId || !$scope.recipient.compensationGroupId;\n case 7:\n case 8:\n case 9:\n case 10:\n case 11:\n return !$scope.recipient.semesterId;\n case 12:\n return !$scope.recipient.semesterId || !$scope.recipient.semester2Id;\n\n case 13:\n case 14:\n return !$scope.recipient.semesterId;\n case 15:\n return !$scope.recipient.toDate;\n case 16:\n return !$scope.recipient.studentId;\n case 17:\n return !$scope.recipient.semesterId || !$scope.recipient.courseId;\n }\n }\n}]);\n","'use strict';\n\nwbApp.controller('EmailCtrl', ['$scope', '$modal', '$translate', 'recipientSvc', 'messagesSvc', 'messageTemplateSvc',\nfunction ($scope, $modal, $translate, recipientSvc, messagesSvc, messageTemplateSvc) {\n\n $scope.addAddress = function () {\n addressSelectorPromise.$promise.then(function () {\n $scope.recipient = recipientSvc.createRecipientModel();\n addressSelectorPromise.show();\n });\n }\n\n $scope.templateModel = messageTemplateSvc.createNew();\n\n $scope.onAddAddress = function (recipient)\n {\n $scope.recipientList.push(recipient);\n }\n\n $scope.clearAll = function () {\n $scope.recipientList.length = 0;\n $scope.subject = '';\n $scope.messageBody = '';\n $scope.attachments = [];\n\n $scope.templateModel = messageTemplateSvc.createNew();\n }\n\n $scope.sendMessage = function (recipientList, subject, messageBody, attachments) {\n messagesSvc.sendEmail(recipientList, subject, messageBody, attachments)\n .then($scope.clearAll);\n }\n\n $scope.recipientList = [];\n\n var addressSelectorPromise = $modal({\n templateUrl: 'messages/address-selector.html',\n show: false,\n scope: $scope\n });\n\n\n $scope.getRecipients = function (recipientList) {\n addressListPromise.$promise.then(function () {\n addressListPromise.show();\n });\n }\n\n $scope.onSaveTemplate = function () {\n\n $scope.templateModel.subject = $scope.subject;\n $scope.templateModel.messageBody = $scope.messageBody;\n $scope.templateModel.recipients = $scope.recipientList;\n if (!$scope.templateModel.name) {\n $scope.templateModel.name = $scope.templateModel.subject;\n }\n\n saveTemplateDialogPromise.$promise.then(function () {\n saveTemplateDialogPromise.$scope.model = angular.copy($scope.templateModel);\n saveTemplateDialogPromise.$scope.onSave = function (savedData) {\n $scope.templateModel.name = savedData.name;\n $scope.templateModel.id = savedData.id;\n };\n saveTemplateDialogPromise.show();\n });\n }\n\n $scope.onLoadTemplate = function () {\n loadTemplateDialogPromise.$promise.then(function () {\n loadTemplateDialogPromise.$scope.onLoad = function (loadedData) {\n $scope.templateModel = loadedData;\n\n $scope.subject = loadedData.subject;\n\n\n $scope.recipientList = _.map(loadedData.recipients, function (recipientInfo) {\n var recipient = recipientSvc.createRecipientModel();\n angular.extend(recipient, recipientInfo);\n return recipient;\n });\n\n $scope.messageBody = loadedData.messageBody;\n $scope.attachments = [];\n };\n loadTemplateDialogPromise.show(); \n });\n }\n\n var uploadComponent = null;\n $scope.uploadUrl = \"restapi/emails/attachment\";\n $scope.uploadSuccess = false;\n $scope.uploadFullSuccess = false;\n $scope.uploadError = false;\n $scope.uploadInProgress = false;\n $scope.attachments = [];\n\n $scope.removeAttachment = function (attachment) {\n if (!$scope.attachments || !attachment) {\n return;\n }\n\n var idx = $scope.attachments.indexOf(attachment);\n if (idx !== -1) {\n $scope.attachments.splice(idx, 1);\n }\n }\n\n $scope.fileUploaderOptions = {\n accept: \"*\",\n uploadMode: \"instantly\",\n showFileList: false,\n labelText: \"\",\n selectButtonText: $translate.instant('TXT_ATTACHMENT_ADD'),\n maxFileSize: 1024 * 1024 * 10, // 20 MB\n onContentReady: function (e) {\n uploadComponent = e.component;\n },\n onUploadError: function (e) {\n alert(e.request.responseText);\n $scope.uploadSuccess = false;\n $scope.uploadError = true;\n $scope.uploadInProgress = false;\n uploadComponent.reset();\n },\n onUploadStarted: function (e) {\n $scope.uploadSuccess = false;\n $scope.uploadError = false;\n $scope.uploadInProgress = true;\n },\n onUploaded: function (e) {\n $scope.attachments.push(JSON.parse(e.request.responseText));\n $scope.uploadSuccess = true;\n $scope.uploadError = false;\n $scope.uploadInProgress = false;\n uploadComponent.reset();\n },\n bindingOptions: {\n uploadUrl: \"uploadUrl\",\n disabled: \"form.$invalid\"\n }\n };\n\n var addressListPromise = $modal({\n templateUrl: 'messages/address-list.html',\n show: false,\n scope: $scope\n });\n\n var saveTemplateDialogPromise = $modal({\n templateUrl: 'messages/email-template-save-dialog.html',\n show: false,\n scope: $scope.$new()\n });\n\n var loadTemplateDialogPromise = $modal({\n templateUrl: 'messages/email-template-load-dialog.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('EmailTemplateLoadDialogCtrl', ['$scope', '$translate', '$filter', 'messageTemplateSvc',\n function ($scope, $translate, $filter, messageTemplateSvc) {\n\n $scope.templates = messageTemplateSvc.getAllInfo();\n $scope.selectedTemplate = null;\n\n $scope.onRowSelected = function (model) {\n $scope.selectedTemplate = model;\n }\n\n $scope.gridSettings = {\n name: 'templates',\n keyExpr: 'id',\n shouldDisableDelete: function(row) {return false; },\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string' },\n {\n dataField: 'updatedAtUtc',\n caption: $translate.instant('TXT_LBL_UPDATED_AT'),\n dataType: 'date',\n format: { type: 'shortDateShortTime' },\n width: '140px',\n sortOrder: 'desc'\n },\n ]\n }\n\n $scope.onRowDelete = function (model) {\n messageTemplateSvc.remove(model.id).$promise.then(function () {\n $scope.selectedTemplate = null;\n $scope.templates = messageTemplateSvc.getAllInfo();\n });\n }\n\n $scope.loadTemplate = function () {\n messageTemplateSvc.getById($scope.selectedTemplate.id).$promise.then(function (model) {\n $scope.onLoad(model);\n });\n }\n}]);\n","wbApp.controller('EmailTemplateSaveDialogCtrl', ['$scope', '$translate', '$filter', 'messageTemplateSvc',\n function ($scope, $translate, $filter, messageTemplateSvc) {\n\n $scope.isSaving = false;\n\n $scope.onSaveAsNew = function () {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n $scope.model.id = null;\n\n messageTemplateSvc.insert($scope.model).$promise.then(\n function (data) {\n $scope.isSaving = false;\n\n $scope.onSave(data);\n },\n function (error) {\n $scope.isSaving = false;\n }\n );\n }\n\n $scope.onSaveExisting = function () {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n messageTemplateSvc.update($scope.model).$promise.then(\n function () {\n $scope.isSaving = false;\n\n $scope.onSave($scope.model);\n },\n function (error) {\n $scope.isSaving = false;\n }\n );\n }\n}]);\n","wbApp.controller('EmailTemplatesAttachmentsDetailCtrl', ['$scope', '$translate', '$filter', '$q', 'emailAttachmentsSvc', 'tenantInfo',\nfunction ($scope, $translate, $filter, $q, emailAttachmentsSvc, tenantInfo) {\n\n var fileManagerInstance;\n var chunkSize = 1024 * 1024 * 8; // 8 MB\n\n $scope.localeAlias = tenantInfo.languageAlias || 'cs';\n\n\n $scope.fileManagerOptions = {\n fileSystemProvider: new DevExpress.fileManagement.CustomFileSystemProvider({\n getItems: function(pathInfo) {\n return emailAttachmentsSvc.getFiles($scope.model.documentTemplateType, $scope.model.emailCategory, $scope.localeAlias).$promise;\n },\n downloadItems: function (items) {\n },\n deleteItem: function (item) {\n return emailAttachmentsSvc.deleteFile($scope.model.documentTemplateType, $scope.model.emailCategory, item.path, $scope.localeAlias).$promise;\n },\n uploadFileChunk: function (fileData, uploadInfo, destinationDirectory) {\n var fileSize = fileData.size;\n var contentType = fileData.type;\n var chunkCount = uploadInfo.chunkCount;\n\n var deffered = $q(function (resolve, reject) {\n if (uploadInfo.chunkIndex === 0) {\n var filePath = destinationDirectory.path ? destinationDirectory.path + \"/\" + fileData.name : fileData.name;\n emailAttachmentsSvc.getUploadUrl($scope.model.documentTemplateType, $scope.model.emailCategory, filePath, $scope.localeAlias).$promise.then(function (uploadUrl) {\n uploadInfo.customData.accessUrl = uploadUrl.url;\n resolve();\n });\n }\n else {\n resolve();\n }\n });\n\n return $q(function (resolve, reject) {\n deffered.then(function () {\n\n var chunkSize = uploadInfo.chunkBlob.size;\n var chunkFirstByte = uploadInfo.bytesUploaded;\n var chunkLastByte = uploadInfo.bytesUploaded + uploadInfo.chunkBlob.size - 1;\n var totalObjectSize = fileSize;\n\n $.ajax({\n url: uploadInfo.customData.accessUrl,\n type: 'PUT',\n contentType: contentType,\n contentLength: uploadInfo.chunkBlob.size,\n headers: {\n 'Content-Range': \"bytes \" + chunkFirstByte + \"-\" + chunkLastByte + \"/\" + fileSize\n },\n data: uploadInfo.chunkBlob,\n crossDomain: true,\n processData: false,\n success: function (res) {\n resolve();\n },\n error: function (err) {\n if (err.status == 308) { // Continue with next chunk \n resolve();\n } else {\n reject(err);\n }\n }\n });\n });\n });\n },\n nameExpr: 'fileName',\n sizeExpr: 'fileSize',\n keyExpr: 'fileName',\n dateModifiedExpr: \"createdAtUtc\"\n }),\n permissions: {\n download: false,\n create: false,\n delete: true,\n upload: true\n },\n selectionMode: \"single\",\n upload: {\n maxFileSize: (1024 * 1024) * 20, // 20 MB object limit\n chunkSize: chunkSize\n },\n onContentReady: function (e) {\n fileManagerInstance = e.component;\n },\n itemView: {\n mode: \"details\",\n showFolders: false,\n showParentFolder: false\n }\n }\n}]);\n","wbApp.controller('EmailTemplatesCtrl', ['$scope', '$translate', '$filter', '$timeout', '$modal', 'messageBoxSvc', \n 'emailTemplatesSvc', 'tenantInfo',\nfunction ($scope, $translate, $filter, $timeout, $modal, messageBoxSvc, emailTemplatesSvc, tenantInfo) {\n \n $scope.emailTemplateId = null;\n $scope.oldEmailTemplateId = null;\n $scope.localeAlias = tenantInfo.languageAlias || 'cs';\n $scope.model = null;\n $scope.modelOrig = null;\n $scope.docIsClean = true;\n $scope.numberOfAttachments = 0;\n\n var codeEditorInstance;\n\n $scope.$on('refreshData', function (e, data) {\n $scope.onTemplateSelected();\n $scope.$broadcast('refreshEmailTemplateData', {});\n });\n\n $scope.onRefreshTemplate = function () {\n $scope.onTemplateSelected();\n }\n\n $scope.saveDisabled = function () {\n return $scope.docIsClean ||\n !$scope.model ||\n !$scope.emailTemplateId;\n }\n\n $scope.onSaveTemplate = function () {\n if (!$scope.saveDisabled()) {\n\n emailTemplatesSvc.update($scope.model).$promise.then(\n function (success) {\n\n $scope.$broadcast('refreshEmailTemplateData', {});\n loadData($scope.model.documentTemplateType, $scope.model.emailCategory);\n });\n }\n }\n\n $scope.onDeleteTemplate = function () {\n if (!!$scope.emailTemplateId && !!$scope.model) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_QUESTION',\n message: $translate.instant('TXT_CONFIRM_DELETE_EMAIL_TEMPLATE'),\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n emailTemplatesSvc.remove($scope.model.documentTemplateType, $scope.model.emailCategory, $scope.localeAlias).$promise.then(\n function (success) {\n $scope.$broadcast('refreshEmailTemplateData', {});\n loadData($scope.model.documentTemplateType, $scope.model.emailCategory);\n },\n function (error) {\n alert(error);\n });\n }\n }]\n });\n }\n }\n\n $scope.onValidateTemplate = function () {\n\n previewDialogPromise.$promise.then(function () {\n previewDialogPromise.$scope.detail = emailTemplatesSvc.preview($scope.model);\n previewDialogPromise.show();\n });\n }\n\n $scope.onAttachments = function () {\n attachmentsDialogPromise.$promise.then(function () {\n attachmentsDialogPromise.$scope.model = $scope.model;\n attachmentsDialogPromise.show();\n });\n }\n\n $scope.codemirrorLoaded = function (_editor) {\n codeEditorInstance = _editor.getDoc();\n $scope.docIsClean = codeEditorInstance.isClean();\n codeEditorInstance.on(\"change\", function () {\n $scope.docIsClean = codeEditorInstance.isClean();\n });\n };\n\n $scope.editorOptions = {\n lineNumbers: true, \n theme: 'default',\n mode: { name: \"handlebars\", base: \"text/html\" },\n };\n\n $scope.sampleDataEditorOptions = {\n lineNumbers: true,\n theme: 'default',\n mode: {\n name: \"javascript\",\n json: true,\n statementIndent: 2\n }\n };\n\n function loadData(documentTemplateType, emailCategory) {\n emailTemplatesSvc.getById(documentTemplateType, emailCategory, $scope.localeAlias).$promise.then(\n function (data) {\n $scope.model = data;\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.oldEmailTemplateId = $scope.emailTemplateId;\n\n if (!!codeEditorInstance) {\n $timeout(function () {\n codeEditorInstance.markClean();\n $scope.docIsClean = codeEditorInstance.isClean();\n })\n }\n }, function (err) {\n $scope.model = null;\n $scope.modelOrig = null;\n });\n }\n\n $scope.onTemplateSelected = function () {\n\n function loadWithIsCleanCheck(documentTemplateType, emailCategory) {\n if (!$scope.docIsClean) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_QUESTION',\n message: $translate.instant('TXT_CONFIRM_DISCARD_MODIFIED_DATA'),\n buttons: [{\n text: 'TXT_BTN_NO',\n callback: function () {\n $scope.emailTemplateId = $scope.oldemailTemplateId;\n }\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n loadData(documentTemplateType, emailCategory);\n }\n }]\n });\n } else {\n loadData(documentTemplateType, emailCategory);\n }\n }\n\n if (!!$scope.emailTemplateId) {\n var split = $scope.emailTemplateId.split('_');\n var documentTemplateType = parseInt(split[0]);\n var emailCategory = parseInt(split[1]);\n\n var info = emailTemplatesSvc.getInfoById(documentTemplateType, emailCategory, $scope.localeAlias);\n info.then(function (infoData) {\n \n $scope.numberOfAttachments = infoData.attachments.length;\n\n if (infoData.isCompatibleOverride || !infoData.isOverridden) {\n loadWithIsCleanCheck(documentTemplateType, emailCategory);\n } else {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_ERROR',\n message: $translate.instant('TXT_INCOMPATIBLE_TEMPLATE'),\n buttons: [{\n text: 'TXT_BTN_OK',\n callback: function () {\n loadWithIsCleanCheck(documentTemplateType, emailCategory);\n }\n }]\n });\n }\n });\n }\n }\n\n var previewDialogPromise = $modal({\n templateUrl: 'messages/email-templates-preview-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n var attachmentsDialogPromise = $modal({\n templateUrl: 'messages/email-templates-attachments-detail.html',\n show: false, \n scope: $scope.$new(),\n });\n\n attachmentsDialogPromise.$scope.$on('modal.hide.before', function () {\n $scope.$broadcast('refreshEmailTemplateData', {});\n })\n}]);\n","wbApp.controller('EmailTemplatesDetailCtrl', ['$scope', '$translate', '$filter', \nfunction ($scope, $translate, $filter) {\n\n $scope.detailTabs = [\n {\n title: 'TXT_LBL_EMAIL',\n template: \"messages/email-templates-preview-detail-email-tab.html\"\n }, {\n title: 'TXT_SEC_VALIDATE',\n template: \"messages/email-templates-preview-detail-errors-tab.html\"\n }];\n\n $scope.detail.$promise.then(function (model) {\n $scope.validationErrors = model.validationErrors;\n $scope.isValid = model.isValid;\n if (!$scope.isValid) {\n $scope.detailTabs.activeTab = 1;\n }\n $(\"#email-content-iframe\").contents().find('html').html(model.htmlBody);\n });\n\n\n}]);\n","'use strict';\n\nwbApp.controller('SentEmailStatisticsCtrl', ['$scope', '$translate', '$timeout', 'sentEmailsSvc',\nfunction ($scope, $translate, $timeout, sentEmailsSvc) {\n\n $scope.fromDate = moment().subtract(6, 'months').toDate();\n $scope.toDate = moment().add(1, 'day').toDate();\n\n $scope.sentEmailStatistics = {\n type: 'AreaChart',\n data: [[]],\n options: {\n displayExactValues: true,\n isStacked: false,\n chartArea: { top: 20, left: 70, right: 20, height: '85%' },\n legend: {\n position: 'none'\n },\n vAxis: {},\n hAxis: {},\n orientation: 'horizontal'\n }\n };\n\n function loadData() {\n if ($scope.fromDate && $scope.toDate) {\n sentEmailsSvc.getStatistics($scope.fromDate, $scope.toDate)\n .then(function (data) {\n $scope.sentEmailStatistics.data = data;\n });\n }\n loaded = true;\n }\n\n\n $scope.onDateRangeChanged = function () {\n loadData();\n }\n\n var isActive = false;\n var loaded = false;\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 1) {\n if (!isActive) {\n isActive = true;\n if (!loaded) {\n loadData();\n }\n }\n } else {\n isActive = false;\n }\n });\n\n}]);","wbApp.controller('SentEmailsCtrl', ['$scope', '$translate', '$filter', 'sentEmailsSvc',\nfunction ($scope, $translate, $filter, sentEmailsSvc) {\n\n $scope.selectedGroup = [];\n\n $scope.gridSettings = {\n columns: [\n {\n dataField: 'recipients',\n caption: $translate.instant('TXT_LBL_RECIPIENTS'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return _.map(_.filter(rowData.emails, 'name'), 'name').join(', ');\n },\n width: '240px'\n },\n { dataField: 'subject', caption: $translate.instant('TXT_EMAIL_SUBJECT'), dataType: 'string' }, \n {\n dataField: 'status',\n caption: $translate.instant('TXT_LBL_STATE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('emailGroupStatus')(rowData.status);\n },\n width: '120px'\n },\n {\n dataField: 'updatedAt',\n caption: $translate.instant('TXT_LBL_UPDATED_AT'),\n dataType: 'date',\n format: 'shortDateShortTime',\n width: '130px',\n sortOrder: 'desc'\n }\n ]\n }\n\n $scope.onRowSelected = function (data) {\n $scope.selectedGroup = data.emails; \n }\n\n $scope.$on('refreshData', function (e, data) {\n $scope.emails = sentEmailsSvc.getSummary();\n $scope.selectedGroup = [];\n });\n\n $scope.emails = sentEmailsSvc.getSummary();\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"messages/sent-emails-tabs-group-detail.html\"\n },{\n title: 'TXT_STATISTICS',\n template: \"messages/sent-emails-tabs-statistics.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n}]);\n","wbApp.controller('SentEmailsEmailDetailCtrl', ['$scope', '$translate', '$filter', 'sentEmailsSvc',\nfunction ($scope, $translate, $filter, sentEmailsSvc) {\n\n $scope.detailTabs = [\n {\n title: 'TXT_LBL_EMAIL',\n template: \"messages/sent-emails-email-detail-content-tab.html\"\n }, {\n title: 'TXT_ATTACHMENTS',\n template: \"messages/sent-emails-email-detail-attachment-tab.html\"\n }, {\n title: 'TXT_COMMUNICATION_HISTORY',\n template: \"messages/sent-emails-email-detail-events-tab.html\"\n }];\n\n $scope.subjectHtmlEncoded = \"\";\n\n $scope.detail.$promise.then(function (model) {\n $scope.toAddressEmailHtmlEncoded =\n model.toAddress.name + '<' + model.toAddress.email + '>';\n $scope.subjectHtmlEncoded = 'Re: ' + jQuery('
').text(model.subject).html(); \n $(\"#email-content-iframe\").contents().find('html').html(model.htmlBody);\n });\n\n\n}]);\n","wbApp.controller('SentEmailsGroupDetailCtrl', ['$scope', '$translate', '$filter', '$modal', 'sentEmailsSvc',\nfunction ($scope, $translate, $filter, $modal, sentEmailsSvc) {\n\n $scope.sentEmailsGroupGridSettings = {\n columns: [\n {\n dataField: 'name',\n caption: $translate.instant('TXT_HUMAN_NAME'),\n dataType: 'string',\n width: '160px'\n },\n {\n dataField: 'email',\n caption: $translate.instant('TXT_LBL_EMAIL'),\n dataType: 'string',\n width: '160px'\n },\n {\n dataField: 'status',\n caption: $translate.instant('TXT_LBL_STATE'),\n dataType: 'number',\n calculateCellValue: function (rowData) {\n return $filter('emailStatus')(rowData.status);\n },\n width: '250px'\n },\n { dataField: 'response', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string' },\n {\n dataField: 'updatedAt',\n caption: $translate.instant('TXT_LBL_UPDATED_AT'),\n dataType: 'date',\n format: 'shortDateShortTime',\n width: '130px',\n sortOrder: 'desc'\n }\n ],\n customCommands: [{\n text: $translate.instant('TXT_DETAIL'),\n callback: function (row) { onShowDetail(row.id); }\n }]\n }\n \n function onShowDetail(id) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.detail = sentEmailsSvc.getDetail(id);\n detailDialogPromise.show();\n });\n }\n\n $scope.onEmailSelected = function (model) {\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'messages/sent-emails-email-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","'use strict';\n\nwbApp.controller('SmsCtrl', ['$scope', '$modal', '$translate', '$filter', 'recipientSvc', 'messagesSvc', 'tenantSettingSvc',\nfunction ($scope, $modal, $translate, $filter, recipientSvc, messagesSvc, tenantSettingSvc) {\n\n $scope.fromDate = moment().startOf('month').toDate();\n $scope.toDate = moment().endOf('month').toDate();\n\n $scope.enableSMSSupport = tenantSettingSvc.settings.enableSMSSupport;\n $scope.smsMessages = messagesSvc.getSmsHistoryByDateRage($scope.fromDate, $scope.toDate);\n\n $scope.gridSettings = {\r\n columns: [\n { dataField: 'createdAt', caption: $translate.instant('TXT_LBL_CREATED_AT'), dataType: 'date', format: 'shortDateShortTime', width: '140px', sortOrder: 'desc' },\n {\r\n dataField: 'recipient',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\r\n return $filter('phone')(rowData.recipient);\r\n },\n width: '130px'\r\n },\n { dataField: 'noOfSms', caption: $translate.instant('TXT_LBL_NO_OF_SMS'), dataType: 'number', width: '90px' },\n { dataField: 'text', caption: $translate.instant('TXT_LBL_TEXT'), dataType: 'string' },\n { dataField: 'errorText', caption: $translate.instant('TXT_LBL_ERROR_CODE'), dataType: 'string', width: '130px' }\n ]\r\n }\n\n //$scope.gridOptions = {\n // sortInfo: { fields: ['createdAt'], directions: ['dsc'] },\n // // > 992\n // largeColumnDefs: [{ field: 'createdAt', displayName: \"TXT_LBL_CREATED_AT\", width: '120px', cellFilter: \"date:'short'\" }, \n // { field: 'recipient', displayName: \"TXT_LBL_PHONE\", width: '120px', cellFilter: 'phone' },\n // { field: 'noOfSms', displayName: \"TXT_LBL_NO_OF_SMS\", width: '90px' },\n // { field: 'text', displayName: \"TXT_LBL_TEXT\" },\n // { field: 'errorText', displayName: \"TXT_LBL_ERROR_CODE\", width: '130px' }\n // ]\n //};\n\n $scope.onFromDateChange = function (fromDate) {\n if (fromDate) {\n $scope.smsMessages = messagesSvc.getSmsHistoryByDateRage(fromDate, $scope.toDate);\n }\n }\n\n $scope.onToDateChange = function (toDate) {\n if (toDate) {\n $scope.smsMessages = messagesSvc.getSmsHistoryByDateRage($scope.fromDate, toDate);\n }\n }\n\n $scope.selectedRow = {};\n\n $scope.onRowSelected = function (data) {\n if (!angular.equals($scope.selectedRow, data)) {\n $scope.selectedRow = data;\n }\n }\n\n $scope.onNewSms = function () {\n detailDialogPromise.$promise.then(function () {\n $scope.clearAll();\n detailDialogPromise.show();\n });\n }\n\n $scope.detailError = null;\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"messages/sms-detail-tabs/home.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n var detailDialogPromise = $modal({\n templateUrl: 'messages/sms-detai.html',\n show: false,\n scope: $scope\n });\n\n $scope.addAddress = function () {\n addressSelectorPromise.$promise.then(function () {\n $scope.recipient = recipientSvc.createRecipientModel();\n addressSelectorPromise.show();\n });\n }\n\n $scope.onAddAddress = function (recipient)\n {\n $scope.recipientList.push(recipient);\n }\n\n $scope.smsText = '';\n $scope.recipientList = [];\n\n var addressSelectorPromise = $modal({\n templateUrl: 'messages/address-selector.html',\n show: false,\n scope: $scope\n });\n\n $scope.clearAll = function () {\n $scope.recipientList.length = 0;\n $scope.smsText = '';\n }\n\n $scope.sendMessage = function (recipientList, smsText) {\n messagesSvc.sendSms(recipientList, smsText)\n .then(function () {\n $scope.clearAll();\n detailDialogPromise.hide();\n });\n }\n\n}]);\n","'use strict';\n\nwbApp.directive('wbEmailTemplateCombo', ['$timeout', '$translate', 'emailTemplatesSvc', 'gridSortSvc', 'tenantInfo',\n function ($timeout, $translate, emailTemplatesSvc, gridSortSvc, tenantInfo) {\n function formatResult(model) {\n if (!model) {\n return \"\";\n }\n\n var attachmentsCnt = model.attachments.length || '';\n\n if (model.isOverridden)\n {\n if (model.isCompatibleOverride) {\n return \"
\" +\n \"
\" + model.emailTemplateName + \"
\" +\n \"
\" + attachmentsCnt + \"
\" +\n \"
\";\n\n } else {\n return \"
\" +\n \"
\" + model.emailTemplateName + \"
\" +\n \"
\" + attachmentsCnt + \"
\" +\n \"
\";\n }\n } else {\n return \"
\" +\n \"
\" + model.emailTemplateName + \"
\" +\n \"
\" + attachmentsCnt + \"
\" +\n \"
\";\n }\n }\n\n function formatSelection(model) {\n if (!model) {\n return \"\";\n }\n\n var attachmentsCnt = !!model.attachments.length\n ? ' (' + model.attachments.length + ')'\n : '';\n\n if (model.isOverridden) {\n if (model.isCompatibleOverride) {\n return \"\" + model.emailTemplateName + attachmentsCnt + \"\";\n } else {\n return \"\" + model.emailTemplateName + attachmentsCnt + \"\";\n }\n } else {\n return model.emailTemplateName + attachmentsCnt;\n }\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n link: function (scope, elm, attrs, controller) {\n\n function init() {\n models.$promise.then(function () {\n $timeout(function () {\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_SELECT_EMAIL_TEMPLATE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: 5,\n id: function (model) { return model.documentTemplateType + '_' + model.emailCategory; },\n data: _.sortBy(models, function (a) { return gridSortSvc.localeSort(a, 'emailTemplateName'); }),\n matcher: function (term, text, data) {\n return data.emailTemplateName.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n }\n });\n\n controller.$render();\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n }, 1);\n }\n\n var models = emailTemplatesSvc.getAllInfo(tenantInfo.languageAlias || 'cs', true);\n\n scope.$on('refreshEmailTemplateData', function (e, data) {\n models = emailTemplatesSvc.getAllInfo(tenantInfo.languageAlias || 'cs', true);\n models.$promise.then(function () {\n $timeout(function () {\n var selection = elm.select2('val');\n elm.select2('destroy');\n init();\n controller.$setViewValue(selection);\n });\n });\n });\n\n init();\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbRecipientGroupCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return \"
\" +\n \"
\" + $translate.instant(item.text) + \"
\" +\n \"
\" + $translate.instant(item.description) + \"
\" +\n \"
\";\n\n }\n\n function formatSelection(item) {\n return '{0} ({1})'.f(\n $translate.instant(item.text),\n $translate.instant(item.description));\n }\n\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, controller) {\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n data: [\n { id: 1, text: 'TXT_VAL_RCPG_USER', description: 'TXT_DESC_RCPG_USER' },\n { id: 17, text: 'TXT_VAL_RCPG_ACTION', description: 'TXT_DESC_RCPG_ACTION' },\n { id: 2, text: 'TXT_VAL_RCPG_COURSE', description: 'TXT_DESC_RCPG_COURSE' },\n { id: 3, text: 'TXT_VAL_RCPG_COURSE_LESSON', description: 'TXT_DESC_RCPG_COURSE_LESSON' },\n { id: 4, text: 'TXT_VAL_RCPG_CLASSROOM', description: 'TXT_DESC_RCPG_CLASSROOM' },\n { id: 5, text: 'TXT_VAL_RCPG_CLASSROOM_AT_DATE', description: 'TXT_DESC_RCPG_CLASSROOM_AT_DATE' },\n { id: 6, text: 'TXT_VAL_RCPG_COMPENSATION_GROUP', description: 'TXT_DESC_RCPG_COMPENSATION_GROUP' },\n { id: 7, text: 'TXT_VAL_RCPG_ALL_COURSES', description: 'TXT_DESC_RCPG_ALL_COURSES' },\n { id: 8, text: 'TXT_VAL_RCPG_ALL_ACTIONS', description: 'TXT_DESC_RCPG_ALL_ACTIONS' },\n { id: 9, text: 'TXT_VAL_RCPG_ALL_ACTIONS_WITHOUT_COURSES', description: 'TXT_DESC_RCPG_ALL_ACTIONS_WITHOUT_COURSES' },\n { id: 10, text: 'TXT_VAL_RCPG_SEMESTER', description: 'TXT_DESC_RCPG_SEMESTER' },\n { id: 11, text: 'TXT_VAL_RCPG_NOT_IN_SEMESTER', description: 'TXT_DESC_RCPG_NOT_IN_SEMESTER' },\n { id: 12, text: 'TXT_VAL_RCPG_NOT_IN_SEMESTER_ATTENDING_LAST_ONE', description: 'TXT_DESC_RCPG_NOT_IN_SEMESTER_ATTENDING_LAST_ONE' },\n { id: 13, text: 'TXT_VAL_RCPG_NOT_IN_SEMESTR_NO_ACTIONS', description: 'TXT_DESC_RCPG_NOT_IN_SEMESTR_NO_ACTIONS' },\n { id: 14, text: 'TXT_VAL_RCPG_NOT_IN_SEMESTR_NO_ACTIONS_ATTENDING_LAST_ONE', description: 'TXT_DESC_RCPG_NOT_IN_SEMESTR_NO_ACTIONS_ATTENDING_LAST_ONE' },\n { id: 15, text: 'TXT_VAL_RCPG_ALL_AT_DATE', description: 'TXT_DESC_RCPG_ALL_AT_DATE' },\n { id: 16, text: 'TXT_VAL_RCPG_STUDENT', description: 'TXT_DESC_RCPG_STUDENT' },\n { id: 18, text: 'TXT_VAL_RCPG_ALL', description: 'TXT_DESC_RCPG_ALL' },\n ]\n });\n\n elm.on('change', function (event) {\n scope.$apply(function () {\n controller.$setViewValue(event.val);\n });\n });\n\n scope.$watch(attrs.ngModel, function (current, old) {\n $(elm).select2('val', current);\n }, true);\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n if (attrs.ngEnable) {\n scope.$watch(attrs.ngEnable, function (newVal) {\n elm.select2('enable', !!newVal);\n });\n }\n }, 1);\n }\n }\n }]);\n","'use strict';\n\nwbApp.directive('wbRecipientList', function () {\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n scope: {\n ngModel: '=',\n wbAutoSize: '='\n },\n template:\n '
' +\n '
' +\n '' +\n '' +\n '
' +\n '
',\n link: function (scope, element, attr, ctrl) {\n scope.removeItem = function (item) {\n if (!scope.ngModel || !item) {\n return;\n }\n\n var idx = scope.ngModel.indexOf(item);\n if (idx !== -1) {\n scope.ngModel.splice(idx, 1);\n }\n }\n }\n }\n});","wbApp.filter('emailGroupStatus', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 0:\n return $translate.instant('TXT_EMAIL_GROUP_PROCESSING');\n case 1:\n return $translate.instant('TXT_EMAIL_GROUP_ALL_DELIVERED');\n case 2:\n return $translate.instant('TXT_EMAIL_GROUP_PARTIALLY_DELIVERED');\n case 3:\n return $translate.instant('TXT_EMAIL_GROUP_NOT_DELIVERED');\n default:\n return '';\n }\n };\n}]);\n\nwbApp.filter('emailStatus', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 0: // NotSentToSendgridWillRetry\n return $translate.instant('TXT_EMAIL_NOT_SENT_TO_GW_WILL_RETRY');\n case 1: // NotSentToSendgridWillNotRetry\n return $translate.instant('TXT_EMAIL_NOT_SENT_TO_GW_WILL_NOT_RETRY');\n case 2: // SentToSendGrid\n return $translate.instant('TXT_EMAIL_NOT_SENT_TO_GW');\n case 3: // Processed\n return $translate.instant('TXT_EMAIL_PROCESSED');\n case 4: // Dropped\n return $translate.instant('TXT_EMAIL_DROPPED');\n case 5: // Delivered\n return $translate.instant('TXT_EMAIL_DELIVERED');\n case 6: // Deferred\n return $translate.instant('TXT_EMAIL_DEFERRED');\n case 7: // Bounce\n return $translate.instant('TXT_EMAIL_BOUNCE');\n default:\n return 'Unknown';\n }\n };\n}]);\n\n\n","'use strict';\n\nwbApp.factory('emailAttachmentsSvc', ['$resource', '$translate', '$q', 'notificationSvc', 'repositorySvc',\n function ($resource, $translate, $q, notificationSvc, repositorySvc) {\n\n var EamilAttachments = $resource('/restapi/email-attachments/:id', {}, {\n 'getFiles': { method: 'GET', isArray: true, url: '/restapi/email-attachments/:id' },\n 'deleteFile': { method: 'DELETE', url: '/restapi/email-attachments/:id' },\n 'getUploadUrl': { method: 'POST', url: '/restapi/email-attachments/create-upload-url/:id' },\n });\n\n function getFiles(documentTemplateType, emailCategory, localeAlias) {\n return repositorySvc.customGet(\n 'getFiles',\n EamilAttachments,\n {\n id: documentTemplateType,\n emailCategory: emailCategory,\n localeAlias: localeAlias || 'CS'\n });\n }\n\n function deleteFile(documentTemplateType, emailCategory, fileName, localeAlias) {\n return repositorySvc.customPostWithParams(\n 'deleteFile',\n EamilAttachments,\n {\n id: documentTemplateType,\n fileName: fileName,\n emailCategory: emailCategory,\n localeAlias: localeAlias || 'CS'\n },\n null,\n null,\n null,\n true);\n }\n\n function getUploadUrl(documentTemplateType, emailCategory, fileName, localeAlias) {\n return repositorySvc.customPostWithParams(\n 'getUploadUrl',\n EamilAttachments,\n {\n id: documentTemplateType,\n fileName: fileName,\n emailCategory: emailCategory,\n localeAlias: localeAlias || 'CS'\n },\n null,\n null,\n null,\n true);\n }\n\n return {\n getFiles: getFiles,\n deleteFile: deleteFile,\n getUploadUrl: getUploadUrl\n }\n }]);","'use strict';\n\nwbApp.factory('emailTemplatesSvc', ['$resource', '$translate', '$q', 'notificationSvc', 'repositorySvc',\n function ($resource, $translate, $q, notificationSvc, repositorySvc) {\n\n var EmailTemplates = $resource('/restapi/email-templates', {}, {\n 'getAllInfo': { method: 'GET', url: '/restapi/email-templates/info', isArray: true },\n 'getById': { method: 'GET', url: '/restapi/email-templates/:id' },\n 'update': { method: 'PUT', url: '/restapi/email-templates/:id' },\n 'delete': { method: 'DELETE', url: '/restapi/email-templates/:id' },\n 'preview': { method: 'POST', url: '/restapi/email-templates/preview' },\n });\n\n var allInfos;\n\n function getAllInfo(localeAlias, reload) {\n if (!allInfos || reload) {\n allInfos = repositorySvc.customGet('getAllInfo', EmailTemplates, {\n localeAlias: localeAlias || 'CS'\n });\n }\n\n return allInfos;\n\n }\n\n function getInfoById(documentTemplateType, emailCategory, localeAlias) {\n\n return $q(function (resolve, reject) {\n var infos = getAllInfo(localeAlias);\n infos.$promise.then(function (data) {\n resolve(_.find(data, { 'documentTemplateType': documentTemplateType, 'emailCategory': emailCategory }));\n }, reject);\n });\n }\n\n function getById(documentTemplateType, emailCategory, localeAlias) {\n return repositorySvc.customGet('getById', EmailTemplates, {\n id: documentTemplateType,\n emailCategory: emailCategory,\n localeAlias: localeAlias || 'CS'\n });\n }\n\n function update(model) {\n return repositorySvc.customPutWithParams(\n 'update',\n EmailTemplates,\n {\n id: model.documentTemplateType,\n emailCategory: model.emailCategory,\n localeAlias: model.localeAlias\n },\n model);\n }\n\n function preview(model) {\n return repositorySvc.customPost(\n 'preview',\n EmailTemplates,\n model,\n null /* successCallback */,\n null /* errorCallback */,\n true /* doNotShowSuccessNotification */);\n }\n\n\n function remove(documentTemplateType, emailCategory, localeAlias) {\n return repositorySvc.customDelete(\n 'delete',\n EmailTemplates,\n {\n id: documentTemplateType,\n emailCategory: emailCategory,\n localeAlias: localeAlias || 'CS'\n });\n }\n\n return {\n getAllInfo: getAllInfo,\n getById: getById,\n update: update,\n remove: remove,\n preview: preview,\n getInfoById: getInfoById\n }\n }]);","'use strict';\n\nwbApp.factory('messageTemplateSvc', ['$resource', '$http', '$q', '$translate', 'notificationSvc', 'repositorySvc',\n function ($resource, $http, $q, $translate, notificationSvc, repositorySvc) {\n\n var MessageTemplate = $resource('/restapi/custom-email-message-templates/:id', {}, {\n 'getById': { method: 'GET', url: '/restapi/custom-email-message-templates/:id' },\n 'getAllInfo': { method: 'GET', isArray: true, url: '/restapi/custom-email-message-templates/info' },\n 'insert': { method: 'POST', url: '/restapi/custom-email-message-templates' },\n 'update': { method: 'PUT', url: '/restapi/custom-email-message-templates/:id' },\n 'delete': { method: 'DELETE', url: '/restapi/custom-email-message-templates/:id' },\n });\n\n function createNew() {\n var model = {\n id: null,\n recipients: [],\n name: null,\n subject: null,\n messageBody: null\n };\n\n return model;\n }\n\n function insert(model) {\n return repositorySvc.customPost(\n 'insert',\n MessageTemplate,\n model);\n }\n\n function remove(templateId) {\n return repositorySvc.customDelete(\n 'delete',\n MessageTemplate,\n { id: templateId });\n }\n\n function update(model) {\n return repositorySvc.customPutWithParams(\n 'update',\n MessageTemplate,\n { id: model.id },\n model);\n }\n\n function getById(templateId) {\n return repositorySvc.customGet('getById', MessageTemplate, { id: templateId });\n }\n\n function getAllInfo() {\n return repositorySvc.customGet('getAllInfo', MessageTemplate, {});\n }\n\n return {\n createNew: createNew,\n getById: getById,\n getAllInfo: getAllInfo,\n insert: insert,\n remove: remove,\n update: update,\n };\n }\n]);","'use strict';\n\nwbApp.factory('messagesSvc', ['$resource', '$http', '$q', '$translate', 'notificationSvc', 'repositorySvc',\n function ($resource, $http, $q, $translate, notificationSvc, repositorySvc) {\n\n var SmsHistory = $resource('/Api/Messages/:id', {}, {\n 'getSmsHistoryByDateRange': { method: 'GET', isArray: true, url: '/Api/Messages/GetSmsHistoryByDateRange' },\n });\n\n function sendEmail(recipientList, subject, messageBody, attachments) {\n var deferred = $q.defer();\n\n $http({\n method: 'POST',\n url: 'Api/Messages/SendEmail',\n data: {\n recipients: recipientList,\n subject: subject,\n messageBody: messageBody,\n attachments: attachments\n }\n })\n .success(function (data, status, headers, config) {\n deferred.resolve(data);\n notificationSvc.notifyInfo(\n $translate.instant('TXT_ALERT_TITLE_EMAIL_SEND_SUCCESS'));\n })\n .error(function (data, status, headers, config) {\n deferred.reject(data);\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_EMAIL_SEND_FAILURE'),\n notificationSvc.translateError(data));\n });\n\n return deferred.promise;\n }\n\n function sendSms(recipientList, smsText) {\n var deferred = $q.defer();\n\n $http({\n method: 'POST',\n url: 'Api/Messages/SendSms',\n data: {\n recipients: recipientList,\n messageBody: smsText\n }\n })\n .success(function (data, status, headers, config) {\n deferred.resolve(data);\n notificationSvc.notifyInfo(\n $translate.instant('TXT_ALERT_TITLE_SEND_SEND_SUCCESS'));\n })\n .error(function (data, status, headers, config) {\n deferred.reject(data);\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_SMS_SEND_FAILURE'),\n notificationSvc.translateError(data));\n });\n\n return deferred.promise;\n }\n\n function getSmsHistoryByDateRage(fromDate, toDate) {\n return repositorySvc.customGet(\n 'getSmsHistoryByDateRange',\n SmsHistory,\n {\n fromDate: moment(fromDate).toJSON(),\n toDate: moment(toDate).toJSON()\n });\n }\n\n return {\n sendEmail: sendEmail,\n sendSms: sendSms,\n getSmsHistoryByDateRage: getSmsHistoryByDateRage\n };\n }\n]);","'use strict';\n\nwbApp.factory('recipientSvc', ['$translate', '$filter', '$http', '$q', 'notificationSvc', 'semesterSvc', 'courseSvc', 'classroomSvc', 'compensationGroupSvc', 'studentSvc', 'userSvc',\n function ($translate, $filter, $http, $q, notificationSvc, semesterSvc, courseSvc, classroomSvc, compensationGroupSvc, studentSvc, userSvc) {\n\n function createRecipientModel() {\n function Recipient() {\n this.recipientGroupType = 1;\n this.activeOnly = true;\n this._name = null;\n }\n\n Recipient.prototype.getName = function () {\n\n if (this._name) {\n return this._name;\n }\n\n var groupType = parseInt(this.recipientGroupType);\n var str = \"{0} ({1})\";\n var str2 = \"{0} ({1} - {2})\";\n var me = this;\n\n switch (groupType) {\n case 1:\n me._name = $translate.instant('TXT_VAL_RCPG_USER');\n userSvc.getByIDAsync(me.userId).$promise.then(function (user) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_USER'), user.fullName);\n });\n break;\n case 2:\n me._name = $translate.instant('TXT_LOADING_DATA');\n courseSvc.getCourseAsync(parseInt(me.semesterId), parseInt(me.courseId)).then(function (course) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_COURSE'), $filter('courseFullName')(course));\n }); \n break;\n case 3:\n me._name = $translate.instant('TXT_LOADING_DATA');\n courseSvc.getCourseAsync(parseInt(me.semesterId), parseInt(me.courseId)).then(function (course) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_COURSE_LESSON'), $filter('courseFullName')(course));\n }); \n break;\n case 4:\n me._name = $translate.instant('TXT_LOADING_DATA');\n $q.all([\n classroomSvc.getAsync(parseInt(me.classroomId)),\n semesterSvc.getAsync(parseInt(me.semesterId))]\n ).then(function (allData) {\n me._name = str2.f($translate.instant('TXT_VAL_RCPG_CLASSROOM'), allData[0].name, allData[1].name);\n });\n break;\n case 5:\n me._name = $translate.instant('TXT_LOADING_DATA');\n classroomSvc.getAsync(parseInt(me.classroomId)).then(function (classroom) {\n me._name = str2.f($translate.instant('TXT_VAL_RCPG_CLASSROOM_AT_DATE'), classroom.name, $filter('date')(me.toDate, 'dd.MM.yy'));\n });\n break;\n case 6:\n me._name = $translate.instant('TXT_LOADING_DATA');\n compensationGroupSvc.getAsync(parseInt(me.compensationGroupId)).then(function (compensationGroup) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_COMPENSATION_GROUP'), compensationGroup.name);\n });\n break;\n case 7:\n me._name = $translate.instant('TXT_LOADING_DATA');\n semesterSvc.getAsync(parseInt(me.semesterId)).then(function (semester) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_ALL_COURSES'), semester.name);\n });\n break;\n case 8:\n me._name = $translate.instant('TXT_LOADING_DATA');\n semesterSvc.getAsync(parseInt(me.semesterId)).then(function (semester) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_ALL_ACTIONS'), semester.name);\n }); \n break;\n case 9:\n me._name = $translate.instant('TXT_LOADING_DATA');\n semesterSvc.getAsync(parseInt(me.semesterId)).then(function (semester) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_ALL_ACTIONS_WITHOUT_COURSES'), semester.name);\n });\n \n break;\n case 10:\n me._name = $translate.instant('TXT_LOADING_DATA');\n semesterSvc.getAsync(parseInt(me.semesterId)).then(function (semester) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_SEMESTER'), semester.name);\n }); \n break;\n case 11:\n me._name = $translate.instant('TXT_LOADING_DATA');\n semesterSvc.getAsync(parseInt(me.semesterId)).then(function (semester) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_NOT_IN_SEMESTER'), semester.name);\n });\n break;\n case 12:\n me._name = $translate.instant('TXT_LOADING_DATA');\n semesterSvc.getAsync(parseInt(me.semesterId)).then(function (semester) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_NOT_IN_SEMESTER_ATTENDING_LAST_ONE'), semester.name);\n });\n \n break;\n case 13:\n me._name = $translate.instant('TXT_LOADING_DATA');\n semesterSvc.getAsync(parseInt(me.semesterId)).then(function (semester) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_NOT_IN_SEMESTR_NO_ACTIONS'), semester.name);\n });\n break;\n case 14:\n me._name = $translate.instant('TXT_LOADING_DATA');\n semesterSvc.getAsync(parseInt(me.semesterId)).then(function (semester) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_NOT_IN_SEMESTR_NO_ACTIONS_ATTENDING_LAST_ONE'), semester.name);\n }); \n break;\n case 15:\n me._name = str.f($translate.instant('TXT_VAL_RCPG_ALL_AT_DATE'), $filter('date')(me.toDate, 'dd.MM.yy'));\n break;\n case 16:\n me._name = $translate.instant('TXT_VAL_RCPG_STUDENT');\n studentSvc.getByIDAsync(parseInt(me.studentId)).$promise.then(function (student) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_STUDENT'), student.fullName);\n });\n break;\n case 17:\n me._name = $translate.instant('TXT_VAL_RCPG_STUDENT');\n courseSvc.getActionAsync(parseInt(me.semesterId), parseInt(me.courseId)).then(function (course) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_ACTION'), $filter('courseFullName')(course));\n });\n break;\n case 18:\n me._name = $translate.instant('TXT_VAL_RCPG_ALL');\n break;\n default:\n me._name = '== error ==';\n break;\n }\n\n return this._name;\n }\n\n Object.defineProperty(Recipient.prototype, 'name', {\n enumerable: true, configurable: true,\n get: function () { return this.getName(); }\n });\n\n return new Recipient();\n }\n\n function getAddressList(recipientList) {\n var deferred = $q.defer();\n\n $http({\n method: 'POST',\n url: 'Api/Messages/ResolveRecipients',\n data: recipientList\n })\n .success(function (data, status, headers, config) {\n\n var list = '';\n for (var i = 0; i < data.length; i++) {\n list += data[i].fullName + ' <' + data[i].emailAddress + '>';\n if (i < data.length - 1) {\n list += ';';\n }\n }\n\n deferred.resolve(list);\n })\n .error(function (data, status, headers, config) {\n deferred.reject(data);\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_GET_ERROR'),\n notificationSvc.translateError(data));\n });\n\n return deferred.promise;\n }\n\n return {\n createRecipientModel: createRecipientModel,\n getAddressList: getAddressList\n }\n}]);","'use strict';\n\nwbApp.factory('sentEmailsSvc', ['$resource', '$translate', '$q', 'notificationSvc', 'repositorySvc',\n function ($resource, $translate, $q, notificationSvc, repositorySvc) {\n\n var Emails = $resource('/restapi/emails', {}, {\n 'query': { method: 'GET', isArray: true },\n 'getSummary': { method: 'GET', isArray: false, url: '/restapi/emails' },\n 'getDetail': { method: 'GET', isArray: false, url: '/restapi/emails/:id' },\n 'getStatistics': { method: 'GET', isArray: true, url: '/restapi/emails/statistics/range' }\n });\n\n function getSummary() {\n var deferred = $q.defer();\n var result = [];\n result.$promise = deferred.promise;\n\n repositorySvc.customGet('getSummary', Emails)\n .$promise.then(function (data) {\n result.push.apply(result, data.emails);\n deferred.resolve(result);\n },\n function (error) {\n deferred.reject(errorResult);\n });\n\n return result;\n }\n\n function getDetail(id) {\n return repositorySvc.customGet('getDetail', Emails, { id: id });\n }\n\n function getStatistics(fromDate, toDate) {\n\n var deffered = $q.defer();\n\n var td = repositorySvc.customGet(\n 'getStatistics',\n Emails,\n {\n fromDateUtc: fromDate,\n toDateUtc: toDate\n });\n\n td.$promise.then(function (data) {\n\n var cols = [];\n cols.push({\n id: 'date',\n label: 'Date',\n type: 'date',\n p: {}\n });\n\n cols.push({\n id: 'c_count',\n label: $translate.instant('TXT_DAILY_SUM'),\n type: 'number',\n p: {}\n });\n\n cols.push({\n id: 'c_runningSum',\n label: $translate.instant('TXT_MONTH_RUNNING_SUM'),\n type: 'number',\n p: {}\n });\n\n cols.push({\n id: 'c_freeLimit',\n label: $translate.instant('TXT_FREE_LIMIT'),\n type: 'number',\n p: {}\n });\n\n var rows = [];\n for (var d = 0; d < data.length; d++) {\n var day = data[d];\n var o = {\n c: [\n { v: moment(day.day).toDate() },\n { v: day.count },\n { v: day.runningSum },\n { v: 2000 }\n ]\n };\n\n rows.push(o);\n }\n\n deffered.resolve({\n cols: cols,\n rows: rows\n });\n\n }, function (reason) {\n deffered.reject(reason);\n });\n\n return deffered.promise;\n }\n\n return {\n getSummary: getSummary,\n getDetail: getDetail,\n getStatistics: getStatistics\n }\n }]);","wbApp.controller('AsideCtrl', ['$scope', '$timeout', 'securitySvc', 'previewInterestSvc', 'semesterSvc', 'tenantSettingSvc', 'tenantInfo', 'uiUtilsSvc',\n function ($scope, $timeout, securitySvc, previewInterestSvc, semesterSvc, tenantSettingSvc, tenantInfo, uiUtilsSvc) {\n\n $scope.roles = securitySvc.roles;\n\n $scope.user = securitySvc.loggedInUser();\n $scope.scrollbarWidth = uiUtilsSvc.getScrollbarWidth()\n\n var activeSemesterPromise = semesterSvc.getActiveAsync();\n activeSemesterPromise.then(function (activeSemester) {\n if (activeSemester) {\n if (securitySvc.isInRole('PreviewHours')) {\n $scope.previewInterests = previewInterestSvc.getAll(activeSemester.id);\n }\n }\n });\n \n $scope.allowDiscounts = tenantSettingSvc.settings.allowDiscounts;\n $scope.enableKindergartenSupport = tenantSettingSvc.settings.enableKindergartenSupport;\n $scope.enableRfidCardSupport = tenantSettingSvc.settings.enableRfidCardSupport;\n $scope.isFranchiseCentral = tenantInfo.isFranchiseCentral;\n $scope.isFranchiseCentralAndSupportSubjectLicenses = tenantInfo.isFranchiseCentral && tenantInfo.franchiseCentralSettings.supportSubjectLicenses;\n\n $scope.isFranchise = !!_.find(tenantInfo.franchiseCentrals, { isActive: true });\n $scope.enableDataExportHistory = tenantSettingSvc.settings.enableDataExport;\n $scope.enableOnlinePayments = tenantSettingSvc.settings.enablePaymentGateways;\n $scope.createTaxDocuments = tenantSettingSvc.settings.createTaxDocuments;\n $scope.enableReservationSupport = tenantSettingSvc.settings.enableReservationSupport;\n $scope.enableOnlineMeetings = tenantSettingSvc.settings.enableZoomIntegration;\n $scope.enableRentSupport = tenantSettingSvc.settings.enableRentSupport;\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\n\n $scope.minifyAsideClick = function () {\n $('body').toggleClass(\"minified\");\n $timeout(function () {\n $('body').resize();\n }, 100);\n }\n\n }]);","wbApp.controller('HeaderCtrl', ['$scope', '$timeout', '$translate', 'languageService', 'messageBoxSvc', 'securitySvc', '$modal',\n function ($scope, $timeout, $translate, languageService, messageBoxSvc, securitySvc, $modal) {\n\n $scope.currentLanguage = languageService.currentLanguage();\n $scope.isAuthenticated = securitySvc.isAuthenticated();\n\n $scope.changeLanguage = function (langKey) {\n languageService.currentLangKey(langKey);\n location.reload();\n //$scope.currentLanguage = languageService.currentLanguage();\n //$scope.supportedLanguagesDropdown.length = 0;\n //fillLanguagesDropdown(languageService.supportedLanguages);\n };\n\n $scope.supportedLanguagesDropdown = [];\n fillLanguagesDropdown(languageService.supportedLanguages)\n\n $scope.toggleAssideNavigation = function () {\n $('body').toggleClass(\"hidden-menu\");\n $timeout(function () {\n $('body').resize();\n }, 100);\n }\n\n $scope.signOut = function () {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: 'TXT_SIGN_OUT_CONFIRMATION',\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_CMD_SIGN_OUT',\n callback: function () { securitySvc.adminLogout(); }\n }]\n });\n }\n\n\n function fillLanguagesDropdown(supportedLanguages) {\n angular.forEach(supportedLanguages, function (lang, key) {\n var item = {\n \"text\": \"  \" + $translate.instant(lang.nameResID),\n \"click\": 'changeLanguage(\"' + lang.key + '\")'\n }\n this.push(item);\n }, $scope.supportedLanguagesDropdown);\n }\n\n var signInDialogPromise = $modal({\n templateUrl: 'sign-in/sign-in-dialog.html',\n show: false,\n scope: $scope.$new()\n });\n \n $scope.signIn = function() {\n signInDialogPromise.$promise.then(function () {\n signInDialogPromise.$scope.isAdmin = true;\n signInDialogPromise.show();\n }); \n }\n \n if (!$scope.isAuthenticated) {\n signInDialogPromise.$promise.then(function () {\n signInDialogPromise.$scope.isAdmin = true;\n signInDialogPromise.show();\n });\n }\n\n\n\n }]);","'use strict';\n\nwbApp.controller('PreviewHoursCtrl', ['$q', '$scope', '$modal', '$translate', '$filter', 'previewHoursSvc', 'semesterSvc', 'stateCodesSvc', 'gridSortSvc',\nfunction ($q, $scope, $modal, $translate, $filter, previewHoursSvc, semesterSvc, stateCodesSvc, gridSortSvc) {\n\n var activeSemesterPromise = semesterSvc.getDefaultAsync();\n var stateCodes = stateCodesSvc.getAllAsync();\n\n $q.all([activeSemesterPromise, stateCodes.$promise]).then(function (data) {\r\n var activeSemester = data[0];\r\n if (activeSemester) {\r\n $scope.semesterID = activeSemester.id;\r\n } else {\r\n $scope.semesterID = null;\r\n }\r\n\r\n $scope.previewHours = previewHoursSvc.getAllForClassroomAsync(\n activeSemester != null ? activeSemester.id : null,\n $scope.classroomID);\r\n\r\n $scope.selectedRow = null;\r\n });\n\n $scope.$on('refreshData', function (e, data) {\r\n if ($scope.semesterID) {\r\n $scope.previewHours = previewHoursSvc.getAllForClassroomAsync($scope.semesterID, $scope.classroomID, true);\n $scope.selectedRow = null;\r\n }\r\n });\n\n $scope.onSemesterChange = function (semesterId) {\n if (semesterId) {\n $scope.previewHours = previewHoursSvc.getAllForClassroomAsync(semesterId, $scope.classroomID);\n $scope.selectedRow = null;\n }\n }\n\n $scope.onClassroomChange = function (classroomID) {\n if ($scope.semesterID) {\n $scope.previewHours = previewHoursSvc.getAllForClassroomAsync($scope.semesterID, classroomID);\n $scope.selectedRow = null;\n }\n }\n\n $scope.gridSettings = {\r\n name: 'previewHours',\n columns: [\n {\r\n dataField: 'student', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', width: '140px',\r\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'student') },\r\n sortOrder: 'desc'\r\n },\n {\r\n dataField: 'parent', caption: $translate.instant('TXT_LBL_PARENT'), dataType: 'string', width: '140px',\r\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'parent') }\r\n },\n {\r\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\r\n return $filter('phone')(rowData.phone);\r\n },\n width: '120px'\r\n },\n { dataField: 'course', caption: $translate.instant(\"TXT_LBL_COURSE\"), dataType: 'string' }, \n { dataField: 'lesson', caption: $translate.instant('TXT_LBL_LESSON'), dataType: 'date', format: { raw: \"dd.MM.yy HH:mm\" }, width: '110px' },\n {\r\n dataField: 'status',\n caption: $translate.instant('TXT_LBL_PRESENT'),\n dataType: 'string',\r\n alignment: 'left',\r\n calculateCellValue: function (rowData) {\r\n return $filter('attendanceStatus')(rowData.status);\r\n },\r\n width: '100px'\r\n },\n { dataField: 'nextContact', caption: $translate.instant('TXT_LBL_NEXT_CONTACT'), dataType: 'date', format: { raw: \"dd.MM.yy HH:mm\" }, width: '110px' },\n { dataField: 'note', caption: $translate.instant('TXT_NOTE'), dataType: 'string' },\n {\r\n dataField: 'regCourseID',\n caption: $translate.instant('TXT_LBL_REG'),\r\n dataType: 'boolean',\r\n calculateCellValue: function (rowData) {\r\n return !!rowData.regCourseID;\r\n },\r\n width: '60px'\r\n },\n {\r\n dataField: 'state',\n caption: $translate.instant('TXT_LBL_STATE'),\n dataType: 'string',\r\n alignment: 'left',\r\n calculateCellValue: function (rowData) {\r\n return $filter('previewStateCode')(rowData.state);\r\n },\r\n width: '100px'\r\n },\n { dataField: 'referenceSource', caption: $translate.instant('TXT_LAB_REFERENCE_SOURCE'), dataType: 'string', width: '130px', visible: true },\n ],\r\n customCommands: [{\r\n text: $translate.instant('TXT_MENU_REGISTER_ON_COURSE'),\r\n isVisible: function (selected) { return !!selected && !selected.regCourseID },\r\n callback: function (row) { $scope.onRegisterOnCourse(row); }\r\n }, {\r\n text: $translate.instant('TXT_MENU_ATTENDANCE_EXCUSE'),\r\n isVisible: function (selected) { return !!selected && selected.status === 0 },\r\n callback: function (row) { $scope.onAttendanceExcuse(row); }\r\n }, {\r\n text: $translate.instant('TXT_MENU_ATTENDANCE_BOOK_AGAIN'),\r\n isVisible: function (selected) { return !!selected && selected.status !== 0 },\r\n callback: function (row) { $scope.onAttendanceBookAgain(row); }\r\n }],\r\n onExporting: function (e) {\r\n e.component.beginUpdate();\r\n prepareGridForExport(e.component);\r\n },\r\n onExported: function (e) {\r\n cleanGridAfterExport(e.component);\r\n e.component.endUpdate();\r\n },\r\n }\n\n var origColLength = -1;\n\n function prepareGridForExport(grid) {\n for (var i = origColLength + 1; i < grid.columnCount(); i++) {\r\n grid.columnOption(i, \"visible\", true);\r\n }\n }\n\n function cleanGridAfterExport(grid) {\r\n for (var i = origColLength + 1; i < grid.columnCount(); i++) {\r\n grid.columnOption(i, \"visible\", false);\r\n }\r\n }\n\n function extendGrid() {\r\n origColLength = $scope.gridSettings.columns.length;\r\n stateCodes.$promise.then(function (result) {\r\n for (var idx = 0; idx < stateCodes.length; idx++) {\r\n var stateCodeName = stateCodes[idx].name;\n $scope.gridSettings.columns.push({\r\n dataField: 'state',\n caption: stateCodeName,\n dataType: 'boolean',\r\n alignment: 'left',\r\n calculateCellValue: function (rowData) {\r\n var stateModel = stateCodesSvc.get(rowData.state);\r\n return !!stateModel && stateModel.name == this.caption;\r\n },\r\n width: '50px',\r\n visible: false\r\n });\r\n }\r\n });\r\n }\n\n extendGrid();\n\n //#region Detail\n\n $scope.previewHoursDetail = { state: 0, nextContact: new Date(), note: \"\" };\n\n $scope.onRowEdit = function (data) {\n $scope.previewHoursDetail = angular.copy(data);\n\n // TODO: remove me when datepicker is fixed\n $scope.previewHoursDetail.nextContact = !!data.nextContact ? data.nextContact : new Date();\n\n $scope.previewHoursDetailOrig = angular.copy($scope.previewHoursDetail);\n \n detailDialogPromise.$promise.then(function () {\n $scope.detailError = null;\n detailDialogPromise.show();\n });\n }\n\n $scope.detailError = null;\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.previewHoursDetailOrig);\n }\n\n $scope.onPreviewHoursDetailSave = function (data) {\n previewHoursSvc.update(data, function (successResult) {\n detailDialogPromise.hide();\n }, function (errorResult) {\n $scope.detailError = errorResult;\n });\n }\n\n $scope.onRowDelete = function (data) {\n previewHoursSvc.remove(data);\n }\n\n //#endregion\n\n //#region Register on course\n\n $scope.previewHoursRegOnCourse = {};\n $scope.previewHoursRegOnCourseOrig;\n\n $scope.onRegisterOnCourse = function (data) {\n $scope.previewHoursRegOnCourse.regCourseSemesterID = data.regCourseSemesterID != null\n ? data.regCourseSemesterID\n : $scope.semesterID;\n $scope.previewHoursRegOnCourse.regCourseID = data.regCourseID != null \n ? data.regCourseID\n : $scope.selectedRow.courseID;\n\n $scope.previewHoursRegOnCourseOrig = angular.copy($scope.previewHoursRegOnCourse);\n\n detailRegisterOncoursePromise.$promise.then(function () {\n $scope.registerOnCourseError = null;\n detailRegisterOncoursePromise.show();\n });\n }\n\n $scope.onRegisterOnCourseSave = function (data) {\n var payload = angular.copy(data);\n\n payload.studentID = $scope.selectedRow.studentID;\n payload.courseScheduleID = $scope.selectedRow.courseScheduleID;\n $scope.registerOnCourseError = null;\n\n previewHoursSvc.registerOnCourse(payload, function (successResult) {\n detailRegisterOncoursePromise.hide();\n }, function (errorResult) {\n $scope.registerOnCourseError = errorResult;\n });\n }\n\n //#endregion\n\n //#region Book preview\n\n $scope.previewHoursBookPreview = {};\n $scope.previewHoursBookPreviewOrig;\n\n $scope.onBookPreview = function (data) {\n\n $scope.previewHoursBookPreview.studentID = null;\n $scope.previewHoursBookPreview.courseID = null;\n $scope.previewHoursBookPreview.courseScheduleID = null;\n $scope.previewHoursBookPreview.semesterID = $scope.semesterID;\n\n $scope.previewHoursBookPreviewOrig = angular.copy($scope.previewHoursBookPreview);\n\n detailBookPreviewPromise.$promise.then(function () {\n $scope.bookPreviewError = null;\n detailBookPreviewPromise.show();\n });\n }\n\n $scope.bookPreviewIsUnchanged = function (data) {\n return angular.equals(data, $scope.previewHoursBookPreviewOrig);\n }\n\n $scope.onBookPreviewSave = function (data) {\n previewHoursSvc.insert(data, function (successResult) {\n detailBookPreviewPromise.hide();\n }, function (errorResult) {\n $scope.bookPreviewError = errorResult;\n });\n }\n\n //#endregion\n\n //#region Attendance Excuse\n\n $scope.onAttendanceExcuse = function (data) {\n $scope.attendanceExcuseData = angular.copy(data);\n\n dlgExcuseConfirmationPromise.$promise.then(function () {\n dlgExcuseConfirmationPromise.show();\n });\n }\n\n var dlgExcuseConfirmationPromise = $modal({\n templateUrl: 'preview-hours/preview-hours-confirm-excuse-dlg.html',\n show: false,\n scope: $scope\n });\n\n $scope.onConfirmExcuse = function (data) {\n previewHoursSvc.excuseFromLesson(data);\n }\n\n //#endregion\n\n //#region Attendance Book Again\n\n $scope.onAttendanceBookAgain = function (data) {\n $scope.attendanceBookAgainData = angular.copy(data);\n\n dlgReBookConfirmationPromise.$promise.then(function () {\n dlgReBookConfirmationPromise.show();\n });\n }\n\n $scope.onConfirmBookAgain = function (data) {\n previewHoursSvc.bookOnLessonAgain(data);\n }\n\n var dlgReBookConfirmationPromise = $modal({\n templateUrl: 'preview-hours/preview-hours-confirm-rebook-dlg.html',\n show: false,\n scope: $scope\n });\n\n //#endregion\n\n $scope.selectedRow = {};\n\n $scope.onRowSelected = function (data) {\n $scope.selectedRow = data;\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"preview-hours/detail-tabs/home.html\"\n },\n {\n title: \"TXT_NOTE\",\n template: \"preview-hours/detail-tabs/note.html\"\n },\n {\r\n title: \"TXT_SUCCESS_STATS\",\n template: \"preview-hours/detail-tabs/success-stats.html\"\r\n }\n ];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\r\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\r\n });\n\n var detailBookPreviewPromise = $modal({\n templateUrl: 'preview-hours/preview-hours-book-preview.html',\n show: false,\n scope: $scope\n });\n\n var detailRegisterOncoursePromise = $modal({\n templateUrl: 'preview-hours/preview-hours-register-on-course.html',\n show: false,\n scope: $scope\n });\n\n var detailDialogPromise = $modal({\n templateUrl: 'preview-hours/preview-hours-detail.html',\n show: false,\n scope: $scope\n });\n\n function getStateCodesNames(stateCodes) {\n var ret = [];\n stateCodes.$promise.then(function (result) {\n for (var idx = 0; idx < stateCodes.length; idx++) {\n var stateCode = stateCodes[idx];\n ret.push(stateCode.name);\n }\n });\n return ret;\n }\n}]);","wbApp.controller('PreviewHoursSucessSummaryCtrl', ['$scope', '$translate', '$timeout', 'previewHoursSvc',\nfunction ($scope, $translate, $timeout, previewHoursSvc) {\n\n $scope.fromDate = moment().subtract(6, 'months').toDate();\n $scope.toDate = moment().add(1, 'day').toDate();\n\n $scope.stats = [];\n var isActive = false;\n var loaded = false;\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 2) {\n if (!isActive) {\n isActive = true;\n if (!loaded) {\n loadData();\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n function loadData() {\n if ($scope.fromDate && $scope.toDate) {\n $scope.stats = previewHoursSvc.getPreviewHoursSuccessStats($scope.fromDate, $scope.toDate);\n $scope.stats.$promise.then(function(data)\n {\n $scope.previewHoursSuccessGraph.data = \n previewHoursSvc.getPreviewHoursSuccessGraph(data);\n })\n } else \n {\n $scope.stats = [];\n $scope.previewHoursSuccessGraph.data = \n previewHoursSvc.getPreviewHoursSuccessGraph([]);\n }\n }\n\n\n $scope.onDateRangeChanged = function () {\n loadData();\n }\n \n $scope.previewHoursSuccessGraph = {\n type: 'BarChart',\n data: previewHoursSvc.getPreviewHoursSuccessGraph([]),\n options: {\n displayExactValues: true, \n chartArea: { width: '90%', height: '70%' },\n legend: {\n position: 'top'\n },\n vAxis: {},\n hAxis: {},\n orientation: 'horizontal'\n }\n };\n\n\n $scope.previewHoursSuccessStatsGridSettings = {\n name: 'previewHoursSuccessStat',\n columns: [\n { dataField: 'reference', caption: $translate.instant(\"TXT_LBL_REFERENCE\"), dataType: 'string' },\n { dataField: 'noOfPreviewHours', caption: $translate.instant('TXT_PREVIEW_HOURS'), dataType: 'number', width: '70px' },\n { dataField: 'noOfRegistrationsInTheSameSemester', caption: $translate.instant('TXT_SAME_SEMESTER'), dataType: 'number', width: '70px' },\n { dataField: 'noOfRegistrationsInAnySemester', caption: $translate.instant('TXT_ANY_TIME'), dataType: 'number', width: '70px' },\n ]\n };\n\n}]);","'use strict';\n\nwbApp.controller('PreviewInterestCtrl', ['$scope', '$modal', '$q', 'semesterSvc', 'previewInterestSvc',\nfunction ($scope, $modal, $q, semesterSvc, previewInterestSvc) {\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n var activeSemesterPromise = semesterSvc.getDefaultAsync();\n // Wait for active semester\n activeSemesterPromise.then(function (activeSemester) {\n if (activeSemester) {\n $scope.semesterID = activeSemester.id;\n } else {\n $scope.semesterID = null;\n }\n\n $scope.previewInterests = previewInterestSvc.getAll(\n activeSemester != null ? activeSemester.id : null);\n });\n\n $scope.onSemesterChange = function (semesterId) {\n if (semesterId) {\n $scope.previewInterests = previewInterestSvc.getAll(semesterId);\n $scope.selectedRow = null;\n }\n }\n\n $scope.onRowSelected = function (data) {\n $scope.selectedRow = data;\n }\n\n $scope.gridOptions = {\n sortInfo: { fields: ['student'], directions: ['dsc'] },\n columnDefs: [{ field: 'student', displayName: \"TXT_LBL_STUDENT\", width: '140px' },\n { field: 'course', displayName: \"TXT_LBL_COURSE\" },\n { field: 'lesson', displayName: \"TXT_LBL_LESSON\", width: '110px', cellFilter: \"date:'short'\" },\n { field: 'createdAt', displayName: \"TXT_LBL_CREATED_AT\", width: '110px', cellFilter: \"date:'short'\" }\n ]\n };\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"preview-interest/detail-tabs/home.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.onRowSelected = function (data) {\n $scope.selectedRow = data;\n }\n\n $scope.onRowEdit = function (data) {\n $scope.previewInterestDetail = angular.copy(data);\n\n $scope.previewInterestDetail.semesterID = $scope.semesterID;\n $scope.previewInterestDetail.courseID = data.courseID;\n $scope.previewInterestDetail.courseScheduleID = data.courseScheduleID;\n $scope.previewInterestDetail.interestID = data.id;\n\n $scope.previewInterestDetailOrig = angular.copy($scope.previewInterestDetail);\n\n detailDialogPromise.$promise.then(function () {\n $scope.detailError = null;\n detailDialogPromise.show();\n });\n }\n\n $scope.onPreviewInterestDetailSave = function (data) {\n \n $scope.detailError = null;\n\n previewInterestSvc.bookLesson(data,\n function (successResult) {\n detailDialogPromise.hide();\n }, function (errorResult) {\n $scope.detailError = errorResult;\n });\n }\n\n $scope.detailError = null;\n\n var detailDialogPromise = $modal({\n templateUrl: 'preview-hours/preview-interest-detail.html',\n show: false,\n scope: $scope\n });\n\n}]);","'use strict';\n\nwbApp.controller('StateCodesCtrl', ['$scope', '$modal', 'stateCodesSvc',\nfunction ($scope, $modal, stateCodesSvc) {\n \n $scope.stateCodes = stateCodesSvc.getAllAsync();\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['name'], directions: ['dsc'] },\n columnDefs: [{ field: 'name', displayName: \"TXT_LBL_NAME\", width: '140px' },\n { field: 'description', displayName: \"TXT_LBL_DESCRIPTION\" }]\n };\n\n $scope.stateCodeDetail = { name: \"\", description: \"\" };\n $scope.stateCodeDetailOrig;\n\n $scope.onRowEdit = function (data) {\n $scope.stateCodeDetail.id = data.id;\n $scope.stateCodeDetail.name = data.name;\n $scope.stateCodeDetail.description = data.description;\n\n $scope.stateCodeDetailOrig = angular.copy($scope.stateCodeDetail);\n\n detailDialogPromise.$promise.then(function () {\n $scope.detailError = null;\n detailDialogPromise.show();\n });\n }\n\n $scope.detailError = null;\n\n $scope.onRowAdd = function () {\n $scope.stateCodeDetail.id = -1;\n $scope.stateCodeDetail.name = \"\";\n $scope.stateCodeDetail.description = \"\";\n\n $scope.stateCodeDetailOrig = angular.copy($scope.stateCodeDetail);\n\n detailDialogPromise.$promise.then(function () {\n $scope.detailError = null;\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n stateCodesSvc.remove(data);\n }\n\n $scope.onStateCodeDetailSave = function (data) {\n stateCodesSvc.save(data, function (successResult) {\n detailDialogPromise.hide();\n }, function (errorResult) {\n $scope.detailError = errorResult;\n });\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.stateCodeDetailOrig);\n };\n\n var detailDialogPromise = $modal({\n templateUrl: 'preview-hours/state-codes-detail.html',\n show: false,\n scope: $scope\n });\n}]);","'use strict';\r\n\r\nwbApp.controller('MembershipCtrl', ['$scope', '$modal', '$translate', '$filter', '$window', 'membershipSvc', 'membershipStudentSvc', 'securitySvc',\r\n function ($scope, $modal, $translate, $filter, $window, membershipSvc, membershipStudentSvc, securitySvc) {\r\n\r\n $scope.memberships = membershipSvc.getAllAsync();\r\n\r\n $scope.$on('refreshData', function (e, data) {\n $scope.memberships = membershipSvc.getAllAsync(true);\n setSelectedMembership(null);\n });\r\n\r\n $scope.gridSettings = {\r\n name: 'memberships',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'number', visible: false },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', sortOrder: 'asc', width: '220px' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string'},\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n {\r\n dataField: 'discountPct', caption: $translate.instant('TXT_LBL_DISCOUNT_PCT'), dataType: 'number',\n format: function (value) {\n return $filter('wbPercent')(value);\n }, width: '70px'\r\n },\n { dataField: 'isMandatory', caption: $translate.instant('TXT_LBL_IS_MANDATORY'), dataType: 'boolean', width: '60px' },\n {\n dataField: 'validityPeriodInDays',\r\n caption: $translate.instant('TXT_LBL_ACTIVE'),\r\n dataType: 'boolean',\r\n calculateCellValue: function (rowData) {\r\n if (rowData.validityPeriodInDays) {\r\n return true;\r\n }\r\n\r\n var validFrom = moment(rowData.validFrom);\r\n var validTo = moment(rowData.validTo);\r\n\r\n return moment().isBetween(validFrom, validTo);\r\n },\r\n width: '60px'\r\n },\n ]\r\n }\r\n\r\n $scope.studentsGridSettings = {\r\n name: 'selectedMembershipStudents',\n shouldShowColumnChooser: true,\n columns: [\n { dataField: 'membershipStudentID', caption: $translate.instant('TXT_LBL_ID'), dataType: 'number', visible: false },\n { dataField: 'student', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', sortOrder: 'desc' },\n { dataField: 'notes', caption: $translate.instant('TXT_LBL_NOTES'), dataType: 'string', visible: false },\n { dataField: 'birthday', caption: $translate.instant(\"TXT_LAB_BIRTHDAY\"), dataType: 'date', format: { date: 'short' }, width: '100px'},\n { dataField: 'parent', caption: $translate.instant('TXT_LBL_PARENT'), dataType: 'string', width: '140px' },\n { dataField: 'email', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '240px' },\n {\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.phone);\n },\n width: '120px'\n },\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '90px' },\n {\r\n dataField: 'discountPct', caption: $translate.instant('TXT_LBL_DISCOUNT_PCT'), dataType: 'number',\n format: function (value) {\n return $filter('wbPercent')(value);\n }, width: '60px'\r\n },\n { dataField: 'createdAt', caption: $translate.instant(\"TXT_LBL_CREATED_AT\"), dataType: 'date', format: 'shortDateShortTime', width: '110px' },\n {\r\n dataField: 'invoiceID',\n caption: $translate.instant('TXT_LAB_INVOICE'),\r\n dataType: 'boolean',\r\n calculateCellValue: function (rowData) {\r\n return !!rowData.invoiceID;\r\n },\r\n width: '60px',\r\n visible: false\r\n },\n { dataField: 'isValid', caption: $translate.instant('TXT_LAB_VALID'), dataType: 'boolean', width: '60px' },\n ],\r\n shouldDisableAdd: function () { return !$scope.selectedRow.id; },\r\n customCommands: [{\r\n text: $translate.instant('TXT_MENU_PRINT_INVOICE'),\r\n isVisible: function (row) { return securitySvc.isInRole('Reports') && securitySvc.isInRole('CourseRegistration.PrintInvoice') && !!row.invoiceID; },\r\n callback: function (data) { onPrintInvoice(data.invoiceID); }\r\n }]\r\n }\r\n\r\n function onPrintInvoice(invoiceID) {\r\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\r\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\r\n }\r\n\r\n //#region Membership Detail\r\n\r\n $scope.membershipDetail = {};\r\n $scope.membershipDetailOrig;\r\n\r\n $scope.onRowEdit = function (data) {\r\n $scope.membershipDetail = angular.copy(data);\r\n $scope.membershipDetailOrig = angular.copy(data);\r\n\r\n detailDialogPromise.$promise.then(function () {\r\n $scope.detailError = null;\r\n $scope.detailTabs.activeTab = 0;\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.detailError = null;\r\n\r\n $scope.onRowAdd = function () {\r\n\r\n $scope.membershipDetail.id = -1;\r\n $scope.membershipDetail.name = \"\";\r\n $scope.membershipDetail.description = \"\";\r\n $scope.membershipDetail.isMandatory = true;\r\n $scope.membershipDetail.isClientAssignable = true;\r\n $scope.membershipDetail.price = 0;\r\n $scope.membershipDetail.discountPct = 0;\r\n $scope.membershipDetail.validityPeriodInDays = null;\r\n $scope.membershipDetail.validFrom = undefined;\r\n $scope.membershipDetail.validTo = undefined;\r\n $scope.membershipDetail.applyToActions = false;\r\n $scope.membershipDetail.applyToCourses = true;\r\n\r\n $scope.membershipDetailOrig = angular.copy($scope.membershipDetail);\r\n\r\n detailDialogPromise.$promise.then(function () {\r\n $scope.detailError = null;\r\n $scope.detailTabs.activeTab = 0;\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowDelete = function (data) {\r\n membershipSvc.remove(data, success);\r\n\r\n function success() {\r\n $scope.selectedRow = {};\r\n lastSelectedMembershipId = 0;\r\n }\r\n }\r\n\r\n $scope.selectedRow = {};\r\n $scope.selectedMembershipStudents = [];\r\n\r\n var lastSelectedMembershipId;\r\n\r\n function setSelectedMembership(data) {\r\n $scope.selectedRow = data || {};\r\n if (!data) {\r\n $scope.selectedMembershipStudents = [];\r\n } else {\r\n if (lastSelectedMembershipId !== data.id) {\r\n lastSelectedMembershipId = data.id;\r\n $scope.selectedMembershipStudents = membershipStudentSvc.GetAllByMembershipAsync(data.id);\r\n }\r\n }\r\n }\r\n\r\n $scope.onRowSelected = function (data) {\r\n setSelectedMembership(data);\r\n }\r\n\r\n $scope.onMembershipDetailSave = function (data) {\r\n membershipSvc.save(data, function (successResult) {\r\n detailDialogPromise.hide();\r\n }, function (errorResult) {\r\n $scope.detailError = errorResult;\r\n });\r\n }\r\n\r\n $scope.detailIsUnchanged = function (data) {\r\n return angular.equals(data, $scope.membershipDetailOrig);\r\n };\r\n\r\n $scope.detailTabs = [\r\n {\r\n title: 'TXT_MAIN',\r\n template: \"promo/membership-detail-main-tab.html\"\r\n },\r\n {\r\n title: \"TXT_PRICE_TAB\",\r\n template: \"promo/membership-detail-price-tab.html\"\r\n },\r\n {\r\n title: \"TXT_VALIDITY_TAB\",\r\n template: \"promo/membership-detail-validity-tab.html\"\r\n }\r\n ];\r\n\r\n $scope.detailTabs.activeTab = 0;\r\n\r\n var detailDialogPromise = $modal({\r\n templateUrl: 'promo/membership-detail.html',\r\n show: false,\r\n scope: $scope\r\n });\r\n\r\n //#endregion\r\n\r\n //#region Membership student detail\r\n\r\n $scope.membershipStudentDetail = {};\r\n $scope.membershipStudentDetailOrig;\r\n $scope.membershipStudentDetailError = null;\r\n\r\n $scope.onMSRowEdit = function (data) {\r\n $scope.membershipStudentDetail = angular.copy(data);\r\n $scope.membershipStudentDetailOrig = angular.copy(data);\r\n\r\n membershipStudentDetailDialogPromise.$promise.then(function () {\r\n $scope.membershipStudentDetailError = null;\r\n membershipStudentDetailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onMSRowAdd = function () {\r\n $scope.membershipStudentDetail.membershipStudentID = null;\r\n $scope.membershipStudentDetail.studentID = null;\r\n $scope.membershipStudentDetail.notes = null;\r\n $scope.membershipStudentDetail.membershipID = $scope.selectedRow.id;\r\n if ($scope.selectedRow.validityPeriodInDays) {\r\n $scope.membershipStudentDetail.validFrom = new Date();\r\n $scope.membershipStudentDetail.validTo = moment($scope.membershipStudentDetail.validFrom)\r\n .add('d', $scope.selectedRow.validityPeriodInDays)\r\n .toDate();\r\n } else {\r\n $scope.membershipStudentDetail.validFrom = $scope.selectedRow.validFrom;\r\n $scope.membershipStudentDetail.validTo = $scope.selectedRow.validTo;\r\n }\r\n $scope.membershipStudentDetail.price = 0;\r\n $scope.membershipStudentDetail.discountPct = $scope.selectedRow.discountPct;\r\n $scope.membershipStudentDetail.applyToCourses = $scope.selectedRow.applyToCourses;\r\n $scope.membershipStudentDetail.applyToActions = $scope.selectedRow.applyToActions;\r\n $scope.membershipStudentDetail.isNew = true;\r\n\r\n $scope.membershipStudentDetailOrig = angular.copy($scope.membershipStudentDetail);\r\n\r\n membershipStudentDetailDialogPromise.$promise.then(function () {\r\n $scope.membershipStudentDetailError = null;\r\n membershipStudentDetailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onMSRowDelete = function (data) {\r\n membershipStudentSvc.remove(data);\r\n }\r\n\r\n $scope.membershipStudentDetailIsUnchanged = function (data) {\r\n return angular.equals(data, $scope.membershipStudentDetailOrig);\r\n };\r\n\r\n $scope.onMembershipStudentDetailSave = function (data) {\r\n if (data.isNew) {\r\n membershipStudentSvc.insert(data, success, error);\r\n } else {\r\n membershipStudentSvc.update(data, success, error);\r\n }\r\n\r\n function success() {\r\n membershipStudentDetailDialogPromise.hide();\r\n }\r\n\r\n function error(errorResult) {\r\n $scope.membershipStudentDetailError = errorResult;\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n var membershipStudentDetailDialogPromise = $modal({\r\n templateUrl: 'promo/membership-student-detail.html',\r\n show: false,\r\n scope: $scope\r\n });\r\n\r\n //#endregion\r\n\r\n $scope.tabs = [\r\n {\r\n title: 'TXT_DETAIL',\r\n template: \"membership/detail-tabs/home.html\"\r\n },\r\n {\r\n title: 'TXT_LBL_STUDENTS',\r\n template: \"membership/detail-tabs/students.html\"\r\n }\r\n ];\r\n\r\n $scope.tabs.activeTab = 0;\r\n\r\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\r\n $scope.$broadcast('activeTabChanged', { activeTab: newValue });\r\n });\r\n\r\n}]);","'use strict';\n\nwbApp.filter('wbMembershipAppliesTo', ['$translate', function ($translate) {\n return function (input) {\n var result = '';\n if (input.applyToCourses) {\n result = $translate.instant('TXT_LBL_COURSES')\n }\n if (input.applyToActions) {\n if (result) {\n result += ', ' + $translate.instant('TXT_LBL_ACTIONS');\n } else {\n result = $translate.instant('TXT_LBL_ACTIONS');\n }\n }\n\n return result;\n }\n}]);","wbApp.controller('ItemTypesCtrl', ['$scope', '$modal', '$translate', '$timeout', '$q', 'itemTypeSvc',\nfunction ($scope, $modal, $translate, $timeout, $q, itemTypeSvc) {\n\n function refreshData(reselect)\n {\n return $q(function (resolve, reject) {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n var all = itemTypeSvc.getAll(true);\n all.$promise.then(function (data) {\n $scope.itemTypes = data;\n\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedItemType(null);\n }\n })\n }, 100);\n }\n else {\n setSelectedItemType(null);\n }\n\n resolve();\n\n }, function (error) {\n $scope.itemTypes = [];\n setSelectedItemType(null);\n\n reject();\n });\n });\n }\n\n refreshData();\n\n $scope.$on('refreshData', function (e, data) {\n refreshData(true);\n });\n\n $scope.gridSettings = {\n name: 'itemTypes',\n keyExpr: 'id',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '160px', sortOrder: 'asc' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string', width: '60px' },\n ]\n }\n\n\n $scope.onRowSelected = function (data) {\n setSelectedItemType(data);\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = itemTypeSvc.createNew();\n detailDialogPromise.$scope.onItemTypeSave = function (model) {\n refreshData().then(function() {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedItemType(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onItemTypeSave = function () {\n refreshData(true);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n itemTypeSvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n }\n\n function setSelectedItemType(itemType, refresh) {\n $scope.selectedItemType = itemType;\n $scope.$broadcast('itemTypeSelectionChanged', $scope.selectedItemType);\n }\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'rents/item-type/item-type-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);\n","wbApp.controller('ItemTypesDetailCtrl', ['$scope', '$modal', 'itemTypeSvc',\nfunction ($scope, $modal, itemTypeSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n itemTypeSvc.insert(data)\n .$promise.then(success, error);\n } else {\n itemTypeSvc.update(data)\n .$promise.then(success, error);\n }\n\n function success(newModel) {\n $scope.onItemTypeSave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function() {\n return true;\n }\n}]);\n","wbApp.controller('RentCategoriesCtrl', ['$scope', '$modal', '$translate', '$timeout', '$q', 'rentCategorySvc', 'rentCategoryGroupSvc',\nfunction ($scope, $modal, $translate, $timeout, $q, rentCategorySvc, rentCategoryGroupSvc) {\n\n function refreshData(reselect)\n {\n return $q(function (resolve, reject) {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n var all = rentCategorySvc.getAll(true);\n all.$promise.then(function (data) {\n $scope.rentCategories = data;\n\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRentCategory(null);\n }\n })\n }, 100);\n }\n else {\n setSelectedRentCategory(null);\n }\n\n resolve();\n\n }, function (error) {\n $scope.rentCategories = [];\n setSelectedRentCategory(null);\n\n reject();\n });\n });\n }\n\n refreshData();\n\n var rentCategoryGroupDataSource = new DevExpress.data.CustomStore({\n load: function (loadOptions) {\n return rentCategoryGroupSvc.getAll().$promise;\n },\n byKey: function (e) {\n return rentCategoryGroupSvc.getById(e);\n },\n loadMode: 'processed'\n });\n\n $scope.$on('refreshData', function (e, data) {\n refreshData(true);\n });\n\n $scope.gridSettings = {\n name: 'rentCategories',\n keyExpr: 'id',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n { dataField: 'isActive', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '160px', sortOrder: 'asc' },\n { dataField: 'shortDescription', caption: $translate.instant('TXT_LBL_SHORT_DESCRIPTION'), dataType: 'string' },\n {\n dataField: 'rentCategoryGroupId',\n caption: $translate.instant('TXT_MENU_RENT_CATEGORY_GROUP'),\n dataType: 'string',\n width: '150px',\n visible: true,\n lookup: {\n allowClearing: true,\n dataSource: {\n store: rentCategoryGroupDataSource,\n pageSize: 20,\n paginate: true\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n },\n {\n dataField: 'itemSelectionType',\n caption: $translate.instant('TXT_LBL_ITEM_SELECTION_TYPE'),\n dataType: 'string',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_ITEM_SELECTION_TYPE_MANUAL') },\n { id: 1, name: $translate.instant('TXT_ITEM_SELECTION_TYPE_AUTOMATIC') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n width: '150px'\n },\n {\n dataField: 'rentingPeriodType',\n caption: $translate.instant('TXT_RENTING_PERIOD_TYPE'),\n dataType: 'string',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_RENTING_PERIOD_TYPE_MINUTES') },\n { id: 1, name: $translate.instant('TXT_RENTING_PERIOD_TYPE_WHOLE_CALLENDAR_DAYS') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n width: '150px'\n },\n ]\n }\n\n\n $scope.onRowSelected = function (data) {\n setSelectedRentCategory(data);\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = rentCategorySvc.createNew();\n detailDialogPromise.$scope.onRentCategorySave = function (model) {\n refreshData().then(function() {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRentCategory(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onRentCategorySave = function () {\n refreshData(true);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowCopy = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.model.isNew = true;\n detailDialogPromise.$scope.model.id = null;\n detailDialogPromise.$scope.onRentCategorySave = function (model) {\n refreshData().then(function () {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRentCategory(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n rentCategorySvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n }\n\n function setSelectedRentCategory(rentCategory, refresh) {\n $scope.selectedRentCategory = rentCategory;\n $scope.$broadcast('rentCategorySelectionChanged', $scope.selectedRentCategory);\n }\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'rents/rent-category/rent-category-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);\n","wbApp.controller('RentCategoriesDetailCtrl', ['$scope', '$modal', 'rentCategorySvc',\nfunction ($scope, $modal, rentCategorySvc) {\n\n function extendModel(model) {\n\n if (!(model.pickupTimeFrom == null)) {\n model.date_pickupTimeFrom = moment().startOf('day').add(model.pickupTimeFrom, 'm').toDate();\n }\n if (!(model.pickupTimeTo == null)) {\n model.date_pickupTimeTo = moment().startOf('day').add(model.pickupTimeTo, 'm').toDate();\n }\n if (!(model.returnTimeFrom == null)) {\n model.date_returnTimeFrom = moment().startOf('day').add(model.returnTimeFrom, 'm').toDate();\n }\n if (!(model.returnTimeTo == null)) {\n model.date_returnTimeTo = moment().startOf('day').add(model.returnTimeTo, 'm').toDate();\n }\n }\n\n extendModel($scope.model);\n\n $scope.modelOrig = angular.copy($scope.model);\n\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n rentCategorySvc.insert(data)\n .$promise.then(success, error);\n } else {\n rentCategorySvc.update(data)\n .$promise.then(success, error);\n }\n\n function success(newModel) {\n $scope.onRentCategorySave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function() {\n return true;\n }\n\n $scope.onDeletePictureBtnClick = function (pictureUrl) {\n _.pull($scope.model.pictureUrls || [], pictureUrl);\n }\n\n $scope.showPictureSelect = function () {\n picturesSelectDlgPromise.$promise.then(function () {\n picturesSelectDlgPromise.$scope.onPicturesSelected = function (pictures) {\n\n if (!$scope.model.pictureUrls) {\n $scope.model.pictureUrls = [];\n }\n\n angular.forEach(pictures, function (p) {\n if (!_.find($scope.model.pictureUrls, p.imageUrl)) {\n $scope.model.pictureUrls.push(p.imageUrl);\n }\n });\n };\n picturesSelectDlgPromise.show();\n });\n }\n\n var picturesSelectDlgPromise = $modal({\n templateUrl: 'storage/pictures/pictures-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.ondate_pickupTimeFromChange = function (date_pickupTimeFrom) {\n var m = moment(date_pickupTimeFrom);\n if (m.isValid()) {\n $scope.model.pickupTimeFrom = m.hour() * 60 + m.minute();\n } else {\n $scope.model.pickupTimeFrom = 12 * 60; // Default\n }\n }\n\n $scope.ondate_pickupTimeToChange = function (date_pickupTimeTo) {\n var m = moment(date_pickupTimeTo);\n if (m.isValid()) {\n $scope.model.pickupTimeTo = m.hour() * 60 + m.minute();\n } else {\n $scope.model.pickupTimeTo = 23 * 60 + 59; // Default\n }\n }\n\n $scope.ondate_returnTimeFromChange = function (date_returnTimeFrom) {\n var m = moment(date_returnTimeFrom);\n if (m.isValid()) {\n $scope.model.returnTimeFrom = m.hour() * 60 + m.minute();\n } else {\n $scope.model.returnTimeFrom = 0; // Default\n }\n }\n\n $scope.ondate_returnTimeToChange = function (date_returnTimeTo) {\n var m = moment(date_returnTimeTo);\n if (m.isValid()) {\n $scope.model.returnTimeTo = m.hour() * 60 + m.minute();\n } else {\n $scope.model.returnTimeTo = 12 * 60; // Default\n }\n }\n\n $scope.onrentingPeriodTypeChange = function (rentingPeriodType) {\n if (rentingPeriodType == 0) { // minutes\n\n $scope.model.pickupTimeFrom = null; // Default\n $scope.model.pickupTimeTo = null; // Default\n $scope.model.returnTimeFrom = null; // Default\n $scope.model.returnTimeTo = null; // Default\n\n $scope.model.rentingPeriodStepSize = 60;\n $scope.model.minimumRentingPeriods = 60;\n $scope.model.maximumRentingPeriods = 120;\n\n $scope.model.rentHourStartType = 1;\n \n } else { // days\n $scope.model.pickupTimeFrom = 12 * 60; // Default\n $scope.model.pickupTimeTo = 23 * 60 + 59; // Default\n $scope.model.returnTimeFrom = 0; // Default\n $scope.model.returnTimeTo = 12 * 60; // Default\n\n $scope.model.rentingPeriodStepSize = 1;\n $scope.model.minimumRentingPeriods = 1;\n $scope.model.maximumRentingPeriods = 14;\n\n $scope.model.rentHourStartType = 0;\n }\n extendModel($scope.model);\n }\n\n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"rents/rent-category/rent-category-detail-main-tab.html\"\n },\n {\n title: 'TXT_TIME_SETTING',\n template: \"rents/rent-category/rent-category-detail-time-setting-tab.html\"\n },\n {\n title: 'TXT_LBL_DESCRIPTION',\n template: \"rents/rent-category/rent-category-detail-description-tab.html\"\n },\n {\n title: 'TXT_LBL_PICTURES',\n template: \"rents/rent-category/rent-category-detail-pictures-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n}]);\n","wbApp.controller('RentCategoryGroupsCtrl', ['$scope', '$modal', '$translate', '$timeout', '$q', 'rentCategoryGroupSvc',\nfunction ($scope, $modal, $translate, $timeout, $q, rentCategoryGroupSvc) {\n\n function refreshData(reselect)\n {\n return $q(function (resolve, reject) {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n var all = rentCategoryGroupSvc.getAll(true);\n all.$promise.then(function (data) {\n $scope.rentCategories = data;\n\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRentCategoryGroup(null);\n }\n })\n }, 100);\n }\n else {\n setSelectedRentCategoryGroup(null);\n }\n\n resolve();\n\n }, function (error) {\n $scope.rentCategories = [];\n setSelectedRentCategoryGroup(null);\n\n reject();\n });\n });\n }\n\n refreshData();\n\n $scope.$on('refreshData', function (e, data) {\n refreshData(true);\n });\n\n $scope.gridSettings = {\n name: 'rentCategories',\n keyExpr: 'id',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n { dataField: 'isActive', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '160px', sortOrder: 'asc' },\n { dataField: 'shortDescription', caption: $translate.instant('TXT_LBL_SHORT_DESCRIPTION'), dataType: 'string' },\n ]\n }\n\n\n $scope.onRowSelected = function (data) {\n setSelectedRentCategoryGroup(data);\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = rentCategoryGroupSvc.createNew();\n detailDialogPromise.$scope.onRentCategoryGroupSave = function (model) {\n refreshData().then(function() {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRentCategoryGroup(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onRentCategoryGroupSave = function () {\n refreshData(true);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowCopy = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.model.isNew = true;\n detailDialogPromise.$scope.model.id = null;\n detailDialogPromise.$scope.onRentCategoryGroupSave = function (model) {\n refreshData().then(function () {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRentCategoryGroup(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n rentCategoryGroupSvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n }\n\n function setSelectedRentCategoryGroup(rentCategoryGroup, refresh) {\n $scope.selectedRentCategoryGroup = rentCategoryGroup;\n $scope.$broadcast('rentCategoryGroupSelectionChanged', $scope.selectedRentCategoryGroup);\n }\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'rents/rent-category-group/rent-category-group-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);\n","wbApp.controller('RentCategoryGroupDetailCtrl', ['$scope', '$modal', 'rentCategoryGroupSvc',\nfunction ($scope, $modal, rentCategoryGroupSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n rentCategoryGroupSvc.insert(data)\n .$promise.then(success, error);\n } else {\n rentCategoryGroupSvc.update(data)\n .$promise.then(success, error);\n }\n\n function success(newModel) {\n $scope.onRentCategoryGroupSave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function() {\n return true;\n }\n\n $scope.onDeletePictureBtnClick = function (pictureUrl) {\n _.pull($scope.model.pictureUrls || [], pictureUrl);\n }\n\n $scope.showPictureSelect = function () {\n picturesSelectDlgPromise.$promise.then(function () {\n picturesSelectDlgPromise.$scope.onPicturesSelected = function (pictures) {\n\n if (!$scope.model.pictureUrls) {\n $scope.model.pictureUrls = [];\n }\n\n angular.forEach(pictures, function (p) {\n if (!_.find($scope.model.pictureUrls, p.imageUrl)) {\n $scope.model.pictureUrls.push(p.imageUrl);\n }\n });\n };\n picturesSelectDlgPromise.show();\n });\n }\n\n var picturesSelectDlgPromise = $modal({\n templateUrl: 'storage/pictures/pictures-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"rents/rent-category-group/rent-category-group-detail-main-tab.html\"\n },\n {\n title: 'TXT_LBL_DESCRIPTION',\n template: \"rents/rent-category-group/rent-category-group-detail-description-tab.html\"\n },\n {\n title: 'TXT_LBL_PICTURES',\n template: \"rents/rent-category-group/rent-category-group-detail-pictures-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n}]);\n","wbApp.controller('RentDetailAddItemDetailCtrl', ['$scope', 'rentCategorySvc', 'rentItemSvc',\nfunction ($scope, rentCategorySvc, rentItemSvc) {\n\n var allCategories = rentCategorySvc.getAll();\n $scope.selectedCategory = {\n itemSelectionType: 0,\n minimumNumberOfRentedItem: 1,\n maximumNumberOfRentedItems: 1\n };\n\n $scope.model = {\n id: null,\n externalId: null,\n numberOfItemsToAdd: 1,\n rentCategoryId: null,\n itemTypeId: null\n };\n \n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n var models;\n if ($scope.selectedCategory.itemSelectionType == 1) { // Automatic\n models = _.times($scope.model.numberOfItemsToAdd, function(idx) {\n return {\n //_id: idx + _.random(100, 9999999999),\n id: null,\n externalId: null,\n rentCategoryId: $scope.model.rentCategoryId,\n itemTypeId: $scope.model.itemTypeId\n }\n });\n } else {\n models = _.times(1, _.constant({\n // _id: $scope.model.id,\n id: $scope.model.id,\n externalId: null,\n rentCategoryId: $scope.model.rentCategoryId,\n itemTypeId: $scope.model.itemTypeId\n }));\n\n rentItemSvc.getAll().$promise.then(function (allItems) {\n var item = _.find(allItems, { id: models[0].id });\n models[0].itemTypeId = item.itemTypeId;\n });\n }\n\n\n $scope.isSaving = true;\n $scope.onAddItemDetailSave(models);\n $scope.$hide();\n\n }\n\n $scope.onCategoryChange = function () {\n allCategories.$promise.then(function () {\n $scope.selectedCategory = _.find(allCategories, { 'id': $scope.model.rentCategoryId });\n if (!!$scope.selectedCategory) {\n $scope.model.numberOfItemsToAdd = $scope.selectedCategory.minimumNumberOfRentedItem;\n }\n });\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function() {\n return true;\n }\n\n\n}]);\n","wbApp.controller('RentItemTabsRentsCtrl', ['$scope', '$modal', '$translate', '$filter', 'rentSvc',\nfunction ($scope, $modal, $translate, $filter, rentSvc) {\n\n var selectedRentItem = null;\n\n $scope.rents = [];\n\n var isActive = true;\n var loaded = false;\n\n $scope.$on('rentItemSelectionChanged', function (e, newlySelectedRentItem) {\n if (newlySelectedRentItem) {\n if (isActive) {\n loadData(newlySelectedRentItem);\n } else {\n loaded = false;\n }\n }\n else {\n $scope.leadNotes = [];\n fullLead = null;\n }\n\n selectedRentItem = newlySelectedRentItem;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 0) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedRentItem) {\n loadData(selectedRentItem);\n }\n }\n } else {\n isActive = false;\n }\n });\n\n function loadData(rentItem) {\n $scope.rents = [];\n\n if (!!rentItem) {\n\n var fromDateUtc = moment().subtract(3, 'month').startOf('day').toDate();\n var totoDateUtc = moment().add(1, 'month').startOf('day').toDate();\n\n rentSvc.getAllByPlaceAndItemAndDateRange(rentItem.placeId, rentItem.id, fromDateUtc, totoDateUtc)\n .$promise.then(function (data) {\n fullLead = data;\n $scope.rents = data;\n loaded = true;\n }, function (error) {\n fullLead = null;\n $scope.rents = [];\n loaded = false;\n });\n }\n }\n\n\n $scope.rentsGridSettings = {\n name: 'rents',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n {\n dataField: 'condition',\n caption: '',\n dataType: 'string',\n encodeHtml: false,\n width: '42px',\n alignment: 'center',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_READY_FOR_RENTING') },\n { id: 1, name: $translate.instant('TXT_ITEM_CONDITION_NOT_READY') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n calculateCellValue: function (rowData) {\n var isOverallConditionGreen = _.reduce(rowData.rentedItems, function (sum, rentedItem) {\n return sum && rentedItem.itemCondition == 0;\n }, true);\n return isOverallConditionGreen ? 0 : 1;\n },\n calculateDisplayValue: function (rowData) {\n\n // ReadyForRenting,\n // Broken,\n // Maintenance,\n // Decommissioned\n\n // Only for future rents\n var momentNow = moment();\n var isOverallConditionGreen = moment(rowData.toUtc).isBefore(momentNow)\n ? true\n : _.reduce(rowData.rentedItems, function (sum, rentedItem) {\n return sum && rentedItem.itemCondition == 0;\n }, true);\n\n if (isOverallConditionGreen) {\n return \"\";\n } else {\n return \"\";\n }\n },\n },\n {\n dataField: 'rentedItems',\n caption: $translate.instant('TXT_MENU_RENT_ITEMS'),\n dataType: 'string',\n calculateDisplayValue: function (rowData) {\n return _.join(_.map(rowData.rentedItems, function (rentedItem) {\n if (!!rentedItem.externalId) {\n return rentedItem.rentItemName + ' (' + rentedItem.externalId + ')' + ' - ' + rentedItem.rentCategoryName;\n } else {\n return rentedItem.rentItemName + ' - ' + rentedItem.rentCategoryName;\n }\n }), ', ');\n },\n },\n {\n showInColumnChooser: false,\n caption: '',\n dataField: 'isNotRegisteredUser',\n width: '42px',\n alignment: 'center',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: true, name: $translate.instant('TXT_ANONYMOUS_USER') },\n { id: false, name: $translate.instant('TXT_REGISTERED_USER') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n encodeHtml: false,\n calculateSortValue: function (rowData) { return rowData.marker; },\n calculateDisplayValue: function (rowData) {\n if (typeof rowData.isNotRegisteredUser === 'undefined' || rowData.isNotRegisteredUser === null) {\n return \"\";\n } else {\n var icon = !!rowData.isNotRegisteredUser ? 'fa-user-o' : 'fa-user';\n var res = \"\";\n\n return res;\n }\n },\n },\n {\n dataField: 'userFullName',\n caption: $translate.instant('TXT_VAL_RCPG_USER'),\n width: '140px',\n dataType: 'string',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'userFullName') }\n },\n {\n dataField: 'studentsFullName',\n caption: $translate.instant('TXT_LBL_STUDENT'),\n dataType: 'string',\n width: '140px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentsFullName') }\n },\n { dataField: 'studentBirthday', caption: $translate.instant(\"TXT_LBL_BIRTHDAY\"), dataType: 'date', format: { date: 'short' }, width: '70px' },\n {\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.phone);\n },\n width: '130px'\n },\n {\n dataField: 'email',\n caption: $translate.instant('TXT_LBL_EMAIL'),\n dataType: 'string',\n visible: true,\n width: '190px'\n },\n { dataField: 'fromUtc', caption: $translate.instant('TXT_LBL_FROM'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px', sortOrder: 'desc' },\n { dataField: 'toUtc', caption: $translate.instant('TXT_LBL_TO'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px' },\n {\n dataField: 'status',\n caption: $translate.instant('TXT_RENT_STATUS'),\n dataType: 'string',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_RENT_STATUS_RESERVED') },\n { id: 1, name: $translate.instant('TXT_RENT_STATUS_CANCELED') },\n { id: 2, name: $translate.instant('TXT_RENT_STATUS_RENTED') },\n { id: 3, name: $translate.instant('TXT_RENT_STATUS_RETURNED') },\n { id: 4, name: $translate.instant('TXT_RENT_STATUS_NOT_RETURNED') },\n { id: 5, name: $translate.instant('TXT_RENT_STATUS_RETURNED_WITH_ISSUES') },\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n width: '100px'\n },\n { dataField: 'updatedAtUtc', caption: $translate.instant('TXT_LBL_UPDATED_AT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px' },\n ],\n onEditorPreparing: function (e) {\n if (e.parentType == 'filterRow' && e.dataField == 'isNotRegisteredUser') {\n e.editorOptions.itemTemplate = function (itemData, itemIndex, itemElement) {\n if (itemIndex == 0) {\n return $(\"\");\n } else {\n var icon = itemIndex == 1 ? 'fa-user-o' : 'fa-user';\n var res = \"\";\n\n return res;\n }\n }\n }\n if (e.parentType == 'filterRow' && e.dataField == 'condition') {\n e.editorOptions.itemTemplate = function (itemData, itemIndex, itemElement) {\n if (itemIndex == 0) {\n return $(\"\");\n } else {\n if (itemIndex == 1) {\n return \"\";\n }\n else {\n return \"\";\n }\n }\n }\n }\n }\n }\n\n}]);\n","wbApp.controller('RentItemsCtrl', ['$scope', '$modal', '$translate', '$timeout', '$q', 'rentItemSvc', 'classroomSvc', 'rentCategorySvc', 'itemTypeSvc',\nfunction ($scope, $modal, $translate, $timeout, $q, rentItemSvc, classroomSvc, rentCategorySvc, itemTypeSvc) {\n\n function refreshData(reselect)\n {\n return $q(function (resolve, reject) {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n var all = rentItemSvc.getAll(true);\n all.$promise.then(function (data) {\n $scope.rentItems = data;\n\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRentItem(null);\n }\n })\n }, 100);\n }\n else {\n setSelectedRentItem(null);\n }\n\n resolve();\n\n }, function (error) {\n $scope.rentItems = [];\n setSelectedRentItem(null);\n\n reject();\n });\n });\n }\n\n refreshData();\n\n $scope.$on('refreshData', function (e, data) {\n refreshData(true);\n });\n\n var classroomDataSource = new DevExpress.data.CustomStore({\n load: function (loadOptions) {\n return classroomSvc.getAllAsync().$promise;\n },\n byKey: function (e) {\n return classroomSvc.getAsync(e);\n },\n loadMode: 'processed'\n });\n\n var rentCategoryDataSource = new DevExpress.data.CustomStore({\n load: function (loadOptions) {\n return rentCategorySvc.getAll().$promise;\n },\n byKey: function (e) {\n return rentCategorySvc.getById(e);\n },\n loadMode: 'processed'\n });\n\n var itemTypeDataSource = new DevExpress.data.CustomStore({\n load: function (loadOptions) {\n return itemTypeSvc.getAll().$promise;\n },\n byKey: function (e) {\n return itemTypeSvc.getById(e);\n },\n loadMode: 'processed'\n });\n\n $scope.gridSettings = {\n name: 'rentItems',\n keyExpr: 'id',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n {\n dataField: 'rentCategoryId',\n caption: $translate.instant('TXT_MENU_RENT_CATEGORY'),\n dataType: 'string',\n width: '150px',\n visible: true,\n lookup: {\n allowClearing: true,\n dataSource: {\n store: rentCategoryDataSource,\n pageSize: 20,\n paginate: true\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '160px', sortOrder: 'asc' },\n {\n dataField: 'itemTypeId',\n caption: $translate.instant('TXT_MENU_ITEM_TYPE'),\n dataType: 'string',\n width: '150px',\n visible: true,\n lookup: {\n allowClearing: true,\n dataSource: {\n store: itemTypeDataSource,\n pageSize: 20,\n paginate: true\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n },\n { dataField: 'externalId', caption: $translate.instant('TXT_EXTERNAL_ID'), dataType: 'string', width: '160px' },\n { dataField: 'shortDescription', caption: $translate.instant('TXT_LBL_SHORT_DESCRIPTION'), dataType: 'string' },\n {\n dataField: 'placeId',\n caption: $translate.instant('TXT_PLACE'),\n dataType: 'string',\n width: '150px',\n visible: true,\n lookup: {\n allowClearing: true,\n dataSource: {\n store: classroomDataSource,\n pageSize: 20,\n paginate: true\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n },\n {\n dataField: 'itemCondition',\n caption: $translate.instant('TXT_MENU_ITEM_CONDITION'),\n dataType: 'string',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_READY_FOR_RENTING') },\n { id: 1, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_BROKEN') },\n { id: 2, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_MAINTENANCE') },\n { id: 3, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_DECOMMISSIONED') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n width: '150px'\n },\n ]\n }\n\n\n $scope.onRowSelected = function (data) {\n setSelectedRentItem(data);\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = rentItemSvc.createNew();\n detailDialogPromise.$scope.onRentItemSave = function (model) {\n refreshData().then(function() {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRentItem(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onRentItemSave = function () {\n refreshData(true);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowCopy = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.model.id = null;\n detailDialogPromise.$scope.model.isNew = true,\n detailDialogPromise.$scope.onRentItemSave = function (model) {\n refreshData().then(function () {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRentItem(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n rentItemSvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n }\n\n function setSelectedRentItem(rentItem, refresh) {\n $scope.selectedRentItem = rentItem;\n $scope.$broadcast('rentItemSelectionChanged', $scope.selectedRentItem);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_MENU_RENTS',\n template: \"rents/rent-item/rent-item-detail-tabs/rents.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'rents/rent-item/rent-item-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);\n","wbApp.controller('RentItemsDetailCtrl', ['$scope', '$modal', 'rentItemSvc',\nfunction ($scope, $modal, rentItemSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n rentItemSvc.insert(data)\n .$promise.then(success, error);\n } else {\n rentItemSvc.update(data)\n .$promise.then(success, error);\n }\n\n function success(newModel) {\n $scope.onRentItemSave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function() {\n return true;\n }\n\n $scope.onDeletePictureBtnClick = function (pictureUrl) {\n _.pull($scope.model.pictureUrls || [], pictureUrl);\n }\n\n $scope.showPictureSelect = function () {\n picturesSelectDlgPromise.$promise.then(function () {\n picturesSelectDlgPromise.$scope.onPicturesSelected = function (pictures) {\n\n if (!$scope.model.pictureUrls) {\n $scope.model.pictureUrls = [];\n }\n\n angular.forEach(pictures, function (p) {\n if (!_.find($scope.model.pictureUrls, p.imageUrl)) {\n $scope.model.pictureUrls.push(p.imageUrl);\n }\n });\n };\n picturesSelectDlgPromise.show();\n });\n }\n\n var picturesSelectDlgPromise = $modal({\n templateUrl: 'storage/pictures/pictures-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"rents/rent-item/rent-item-detail-main-tab.html\"\n },\n {\n title: 'TXT_MENU_SETTING',\n template: \"rents/rent-item/rent-item-detail-settings-tab.html\"\n },\n {\n title: 'TXT_LBL_DESCRIPTION',\n template: \"rents/rent-item/rent-item-detail-description-tab.html\"\n },\n {\n title: 'TXT_LBL_PICTURES',\n template: \"rents/rent-item/rent-item-detail-pictures-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n}]);\n","wbApp.controller('RentTabsItemsCtrl', ['$scope', '$modal', '$translate',\nfunction ($scope, $modal, $translate) {\n\n var selectedRent = null;\n\n $scope.rentItems = [];\n\n $scope.$on('rentSelectionChanged', function (e, newlySelectedRent) {\n selectedRent = newlySelectedRent;\n\n $scope.rentItems.length = 0;\n if (!!selectedRent) {\n $scope.rentItems.push.apply($scope.rentItems, selectedRent.rentedItems);\n }\n });\n\n\n $scope.rentItemsGridSettings = {\n name: 'rentItems',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'number', visible: false },\n {\n dataField: 'externalId',\n caption: $translate.instant('TXT_EXTERNAL_ID'),\n dataType: 'string',\n width: '140px',\n sortOrder: 'asc'\n },\n {\n dataField: 'rentItemName',\n caption: $translate.instant('TXT_NAME'),\n dataType: 'string'\n },\n {\n dataField: 'rentCategoryName',\n caption: $translate.instant('TXT_MENU_RENT_CATEGORIES'),\n dataType: 'date',\n dataType: 'string',\n width: '160px'\n },\n {\n dataField: 'itemTypeName',\n caption: $translate.instant('TXT_MENU_ITEM_TYPE'),\n dataType: 'date',\n dataType: 'string',\n width: '160px'\n },\n {\n dataField: 'itemCondition',\n caption: $translate.instant('TXT_MENU_ITEM_CONDITION'),\n dataType: 'string',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_READY_FOR_RENTING') },\n { id: 1, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_BROKEN') },\n { id: 2, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_MAINTENANCE') },\n { id: 3, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_DECOMMISSIONED') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n width: '200px'\n }\n ]\n }\n\n}]);\n","wbApp.controller('RentsCtrl', ['$scope', '$modal', '$translate', '$timeout', '$q', '$filter', 'rentSvc', 'classroomSvc', 'localStorageService', 'notRegisteredUserSvc',\nfunction ($scope, $modal, $translate, $timeout, $q, $filter, rentSvc, classroomSvc, localStorageService, notRegisteredUserSvc) {\n\n $scope.placeId = null;\n $scope.fromDate = moment().subtract(1, 'week').startOf('day').toDate();\n $scope.toDate = moment().add(3, 'week').startOf('day').toDate();\n\n classroomSvc.getAllNonDeletedAsync().$promise.then(function (classrooms) {\n var selectedPlace = null;\n if (localStorageService.isSupported) {\n var placeId = localStorageService.get('rentsPlaceId');\n if (!!placeId) {\n selectedPlace = _.find(classrooms, { 'id': placeId });\n }\n }\n if (!selectedPlace) {\n selectedPlace = _.head(classrooms);\n }\n if (!!selectedPlace) {\n $scope.placeId = selectedPlace.id;\n if (localStorageService.isSupported) {\n localStorageService.set('rentsPlaceId', $scope.placeId);\n }\n\n $scope.onPlaceChange($scope.placeId);\n }\n });\n\n function refreshData(reselect)\n {\n return $q(function (resolve, reject) {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n var all = rentSvc.getAllByPlaceAndDateRange($scope.placeId, $scope.fromDate, $scope.toDate);\n all.$promise.then(function (data) {\n $scope.rents = data;\n\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRent(null);\n }\n })\n }, 100);\n }\n else {\n setSelectedRent(null);\n }\n\n resolve();\n\n }, function (error) {\n $scope.rents = [];\n setSelectedRent(null);\n\n reject();\n });\n });\n }\n\n \n\n $scope.onDataRangeChanged = function () {\n refreshData(true);\n }\n\n $scope.onPlaceChange = function()\n {\n if (localStorageService.isSupported) {\n localStorageService.set('rentsPlaceId', $scope.placeId);\n }\n refreshData(false);\n }\n\n $scope.$on('refreshData', function (e, data) {\n refreshData(true);\n });\n\n $scope.gridSettings = {\n name: 'rents',\n keyExpr: 'id',\n shouldShowColumnChooser: true,\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n {\n dataField: 'condition',\n caption: '',\n dataType: 'string',\n encodeHtml: false,\n width: '42px',\n alignment: 'center',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_READY_FOR_RENTING') },\n { id: 1, name: $translate.instant('TXT_ITEM_CONDITION_NOT_READY') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n calculateCellValue: function (rowData) {\n var isOverallConditionGreen = _.reduce(rowData.rentedItems, function (sum, rentedItem) {\n return sum && rentedItem.itemCondition == 0;\n }, true);\n return isOverallConditionGreen ? 0 : 1;\n },\n calculateDisplayValue: function (rowData) {\n\n // ReadyForRenting,\n // Broken,\n // Maintenance,\n // Decommissioned\n\n // Only for future rents\n var momentNow = moment();\n var isOverallConditionGreen = moment(rowData.toUtc).isBefore(momentNow)\n ? true\n : _.reduce(rowData.rentedItems, function (sum, rentedItem) {\n return sum && rentedItem.itemCondition == 0;\n }, true);\n\n if (isOverallConditionGreen) {\n return \"\";\n } else {\n return \"\";\n }\n },\n },\n {\n dataField: 'rentedItems',\n caption: $translate.instant('TXT_MENU_RENT_ITEMS'),\n dataType: 'string',\n calculateDisplayValue: function (rowData) {\n return _.join(_.map(rowData.rentedItems, function (rentedItem) {\n if (!!rentedItem.externalId) {\n return rentedItem.rentItemName + ' (' + rentedItem.externalId + ')' + ' - ' + rentedItem.rentCategoryName;\n } else {\n return rentedItem.rentItemName + ' - ' + rentedItem.rentCategoryName;\n }\n }), ', ');\n },\n },\n {\n showInColumnChooser: false,\n caption: '',\n dataField: 'isNotRegisteredUser',\n width: '42px',\n alignment: 'center',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: true, name: $translate.instant('TXT_ANONYMOUS_USER') },\n { id: false, name: $translate.instant('TXT_REGISTERED_USER') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n encodeHtml: false,\n calculateSortValue: function (rowData) { return rowData.marker; },\n calculateDisplayValue: function (rowData) {\n if (typeof rowData.isNotRegisteredUser === 'undefined' || rowData.isNotRegisteredUser === null) {\n return \"\";\n } else {\n var icon = !!rowData.isNotRegisteredUser ? 'fa-user-o' : 'fa-user';\n var res = \"\";\n\n return res;\n }\n },\n },\n {\n dataField: 'userFullName',\n caption: $translate.instant('TXT_VAL_RCPG_USER'),\n width: '140px',\n dataType: 'string',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'userFullName') }\n },\n {\n dataField: 'studentsFullName',\n caption: $translate.instant('TXT_LBL_STUDENT'),\n dataType: 'string',\n width: '140px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentsFullName') }\n },\n { dataField: 'studentBirthday', caption: $translate.instant(\"TXT_LBL_BIRTHDAY\"), dataType: 'date', format: { date: 'short' }, width: '70px' },\n {\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.phone);\n },\n width: '130px'\n },\n {\n dataField: 'email',\n caption: $translate.instant('TXT_LBL_EMAIL'),\n dataType: 'string',\n visible: true,\n width: '190px'\n },\n { dataField: 'fromUtc', caption: $translate.instant('TXT_LBL_FROM'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px', sortOrder: 'desc' },\n { dataField: 'toUtc', caption: $translate.instant('TXT_LBL_TO'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px' },\n {\n dataField: 'status',\n caption: $translate.instant('TXT_RENT_STATUS'),\n dataType: 'string',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_RENT_STATUS_RESERVED') },\n { id: 1, name: $translate.instant('TXT_RENT_STATUS_CANCELED') },\n { id: 2, name: $translate.instant('TXT_RENT_STATUS_RENTED') },\n { id: 3, name: $translate.instant('TXT_RENT_STATUS_RETURNED') },\n { id: 4, name: $translate.instant('TXT_RENT_STATUS_NOT_RETURNED') },\n { id: 5, name: $translate.instant('TXT_RENT_STATUS_RETURNED_WITH_ISSUES') },\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n width: '100px'\n },\n { dataField: 'updatedAtUtc', caption: $translate.instant('TXT_LBL_UPDATED_AT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px' },\n ],\n onEditorPreparing: function (e) {\n if (e.parentType == 'filterRow' && e.dataField == 'isNotRegisteredUser') {\n e.editorOptions.itemTemplate = function (itemData, itemIndex, itemElement) {\n if (itemIndex == 0) {\n return $(\"\");\n } else {\n var icon = itemIndex == 1 ? 'fa-user-o' : 'fa-user';\n var res = \"\";\n\n return res;\n }\n }\n }\n if (e.parentType == 'filterRow' && e.dataField == 'condition') {\n e.editorOptions.itemTemplate = function (itemData, itemIndex, itemElement) {\n if (itemIndex == 0) {\n return $(\"\");\n } else {\n if (itemIndex == 1) {\n return \"\";\n }\n else {\n return \"\";\n }\n }\n }\n }\n }\n }\n\n\n $scope.onRowSelected = function (data) {\n setSelectedRent(data);\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = rentSvc.createNew($scope.placeId);\n detailDialogPromise.$scope.onRentSave = function (model) {\n refreshData().then(function() {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRent(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n\n var promises = [];\n\n var modelPromise = rentSvc.getById(data.id);\n promises.push(modelPromise.$promise);\n\n promises.push(detailDialogPromise.$promise);\n\n var notRegisteredUserPromise = null;\n if (data.isNotRegisteredUser)\n {\n notRegisteredUserPromise = notRegisteredUserSvc.getById(data.userId);\n promises.push(notRegisteredUserPromise.$promise);\n }\n\n $q.all(promises).then(function () {\n\n detailDialogPromise.$scope.model = angular.copy(modelPromise);\n if (data.isNotRegisteredUser)\n {\n detailDialogPromise.$scope.model.notRegisteredUserInfo = notRegisteredUserPromise;\n detailDialogPromise.$scope.model.userId = null;\n detailDialogPromise.$scope.model.studentId = null;\n }\n \n detailDialogPromise.$scope.onRentSave = function () {\n refreshData(true);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n rentSvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n }\n\n function setSelectedRent(rent, refresh) {\n $scope.selectedRent = rent;\n $scope.$broadcast('rentSelectionChanged', $scope.selectedRent);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_MENU_RENT_ITEMS',\n template: \"rents/rent-detail-tabs/items.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'rents/rent/rent-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);\n","wbApp.controller('RentsDetailCtrl', ['$scope', '$modal', 'rentSvc', 'notRegisteredUserSvc',\nfunction ($scope, $modal, rentSvc, notRegisteredUserSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n if ($scope.model.isNew) {\n $scope.statusDisabledSelection = [1, 3, 4, 5];\n } else {\n $scope.statusDisabledSelection = [];\n }\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n rentSvc.insert(data)\n .$promise.then(success, error);\n } else {\n rentSvc.update(data)\n .$promise.then(success, error);\n }\n\n function success(newModel) {\n $scope.onRentSave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n //$scope.detailIsUnchanged = function (data) {\n // return angular.equals(data, $scope.modelOrig);\n //};\n\n\n $scope.isFormValid = function() {\n return true;\n }\n\n $scope.removeItem = function ($index) {\n $scope.model.rentedItems.splice($index, 1);\n }\n\n\n $scope.addItem = function () {\n addItemDialogPromise.$promise.then(function () {\n addItemDialogPromise.$scope.placeId = $scope.model.placeId;\n addItemDialogPromise.$scope.onAddItemDetailSave = function (items) {\n\n var union = _.unionWith($scope.model.rentedItems, items, function (arrVal, othVal) {\n return (arrVal.id == othVal.id) && !!arrVal.id && !!othVal.id;\n });\n\n $scope.model.rentedItems.length = 0;\n $scope.model.rentedItems.push.apply($scope.model.rentedItems, union);\n };\n addItemDialogPromise.show();\n });\n }\n\n var addItemDialogPromise = $modal({\n templateUrl: 'rents/rent/rent-detail-add-item-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.fromUtcPickerOptions = {\n type: \"datetime\",\n width: '100%'\n };\n\n $scope.toUtcPickerOptions = {\n type: \"datetime\",\n width: '100%'\n };\n\n $scope.onAnonymousBtnClick = function () {\n \n if (!$scope.model.notRegisteredUserInfo) {\n $scope.model.notRegisteredUserInfo = notRegisteredUserSvc.createNew();\n }\n $scope.model.isNotRegisteredUser = true;\n $scope.model.userID = null;\n $scope.model.studentId = null;\n }\n\n $scope.onExistingBtnClick = function () {\n $scope.model.userID = null;\n $scope.model.studentId = null;\n $scope.model.isNotRegisteredUser = false;\n }\n\n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"rents/rent/rent-detail-main-tab.html\"\n },\n {\n title: 'TXT_LBL_USER',\n template: \"rents/rent/rent-detail-user-tab.html\"\n },\n {\n title: 'TXT_LBL_NOTES',\n template: \"rents/rent/rent-detail-notes-tab.html\"\n },\n {\n title: 'TXT_RENT_STATUS',\n template: \"rents/rent/rent-detail-status-history-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n}]);\n","'use strict';\n\nwbApp.directive('wbItemConditionTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(itemSelectionType) {\n if (!itemSelectionType) { return; }\n return $translate.instant(itemSelectionType.text);\n }\n\n function formatSelection(itemSelectionType) {\n return $translate.instant(itemSelectionType.text);\n }\n\n function shouldBeVisible(visibleSelection, id) {\n if (visibleSelection) {\n return visibleSelection.includes(id + '');\n }\n\n return true;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n model: '=ngModel',\n visibleSelection: '=',\n },\n link: function (scope, elm, attrs, controller) {\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_ITEM_CONDITION_TYPE_READY_FOR_RENTING', disabled: scope.disabledSelection === 0 },\n { id: 1, text: 'TXT_ITEM_CONDITION_TYPE_BROKEN', disabled: scope.disabledSelection === 1 },\n { id: 2, text: 'TXT_ITEM_CONDITION_TYPE_MAINTENANCE', disabled: scope.disabledSelection === 2 },\n { id: 3, text: 'TXT_ITEM_CONDITION_TYPE_DECOMMISSIONED', disabled: scope.disabledSelection === 3 }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbItemSelectionTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(itemSelectionType) {\n if (!itemSelectionType) { return; }\n return $translate.instant(itemSelectionType.text);\n }\n\n function formatSelection(itemSelectionType) {\n return $translate.instant(itemSelectionType.text);\n }\n\n function shouldBeVisible(visibleSelection, id) {\n if (visibleSelection) {\n return visibleSelection.includes(id + '');\n }\n\n return true;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n model: '=ngModel',\n visibleSelection: '=',\n },\n link: function (scope, elm, attrs, controller) {\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_ITEM_SELECTION_TYPE_MANUAL', disabled: scope.disabledSelection === 0 },\n { id: 1, text: 'TXT_ITEM_SELECTION_TYPE_AUTOMATIC', disabled: scope.disabledSelection === 1 }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbRentCategoryCombo', ['$timeout', '$translate', 'rentCategorySvc',\n function ($timeout, $translate, rentCategorySvc) {\n function formatResult(model) {\n if (!model) {\n return \"\";\n }\n\n return model.name;\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n scope: {\n allowClear: '='\n },\n link: function (scope, elm, attrs, controller) {\n\n var models = rentCategorySvc.getAll();\n models.$promise.then(function () {\n if (models.length == 1) {\n $(elm).select2('val', models[0].id);\n controller.$setViewValue(models[0].id);\n }\n });\n\n models.$promise.then(function () {\n $timeout(function () {\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_MENU_RENT_CATEGORY'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: (typeof scope.allowClear !== 'undefined') ? scope.allowClear : true,\n minimumResultsForSearch: -1,\n id: function (model) { return model.id; },\n data: models\n });\n\n controller.$render();\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbRentCategoryGroupCombo', ['$timeout', '$translate', 'rentCategoryGroupSvc',\n function ($timeout, $translate, rentCategoryGroupSvc) {\n function formatResult(model) {\n if (!model) {\n return \"\";\n }\n\n return model.name;\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n scope: {\n allowClear: '='\n },\n link: function (scope, elm, attrs, controller) {\n\n var models = rentCategoryGroupSvc.getAll();\n models.$promise.then(function () {\n if (models.length == 1) {\n $(elm).select2('val', models[0].id);\n controller.$setViewValue(models[0].id);\n }\n });\n\n models.$promise.then(function () {\n $timeout(function () {\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_MENU_RENT_CATEGORY_GROUP'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: (typeof scope.allowClear !== 'undefined') ? scope.allowClear : true,\n minimumResultsForSearch: -1,\n id: function (model) { return model.id; },\n data: models\n });\n\n controller.$render();\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbRentHourStartTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(itemSelectionType) {\n if (!itemSelectionType) { return; }\n return $translate.instant(itemSelectionType.text);\n }\n\n function formatSelection(itemSelectionType) {\n return $translate.instant(itemSelectionType.text);\n }\n\n function shouldBeVisible(visibleSelection, id) {\n if (visibleSelection) {\n return visibleSelection.includes(id + '');\n }\n\n return true;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n model: '=ngModel',\n visibleSelection: '=',\n },\n link: function (scope, elm, attrs, controller) {\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_RENT_HOUR_START_TYPE_AT_ANY_TIME', disabled: scope.disabledSelection === 0 },\n { id: 1, text: 'TXT_RENT_HOUR_START_TYPE_AT_WHOLE_HOUR_ONLY', disabled: scope.disabledSelection === 1 },\n { id: 2, text: 'TXT_RENT_HOUR_START_TYPE_AT_HALF_HOUR_ONLY', disabled: scope.disabledSelection === 2 },\n { id: 3, text: 'TXT_RENT_HOUR_START_TYPE_AT_HALF_OR_FULL_HOUR', disabled: scope.disabledSelection === 3 },\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbRentItemCombo', ['$timeout', '$translate', 'rentItemSvc',\n function ($timeout, $translate, rentItemSvc) {\n function formatResult(model) {\n if (!model) {\n return \"\";\n }\n\n return \"
\" +\n \"
\" + model.name + \"
\" +\n \"
\" + (!!model.externalId ? model.externalId : '') + \"
\" +\n \"
\" + (!!model.notes ? model.notes : '') + \"
\" +\n \"
\";\n }\n\n function formatSelection(model) {\n if (!!model.externalId) {\n return model.name + ' (' + model.externalId + ')';\n } else {\n return model.name;\n }\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n scope: {\n placeId: '=',\n rentCategoryId: '=',\n allowClear: '='\n },\n link: function (scope, elm, attrs, controller) {\n\n var oldRentCategoryId = scope.rentCategoryId;\n\n var models = rentItemSvc.getAllByPlaceAndRentCategory(scope.placeId, scope.rentCategoryId);\n models.$promise.then(function () {\n if (models.length == 1) {\n $(elm).select2('val', models[0].id);\n controller.$setViewValue(models[0].id);\n }\n });\n\n models.$promise.then(function () {\n $timeout(function () {\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_MENU_RENT_ITEM'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: (typeof scope.allowClear !== 'undefined') ? scope.allowClear : true,\n minimumResultsForSearch: -1,\n id: function (model) { return model.id; },\n data: models\n });\n\n controller.$render();\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n scope.$watch('rentCategoryId', function (newValue) {\n if (oldRentCategoryId != newValue) {\n oldRentCategoryId = newValue;\n var newModels = rentItemSvc.getAllByPlaceAndRentCategory(scope.placeId, newValue);\n newModels.$promise.then(function () {\n models.length = 0;\n models.push.apply(models, newModels);\n\n if (models.length == 1) {\n $(elm).select2('val', models[0].id);\n controller.$setViewValue(models[0].id);\n } else {\n $(elm).select2('val', null);\n controller.$setViewValue(null);\n }\n });\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbRentItemMultiSelect', ['$timeout', '$translate', 'rentItemSvc', 'gridSortSvc',\n function ($timeout, $translate, rentItemSvc, gridSortSvc) {\n function formatResult(model) {\n if (!!model.externalId) {\n return model.name + ' (' + model.externalId + ')';\n } else {\n return model.name;\n }\n }\n\n function formatSelection(model) {\n if (!!model.externalId) {\n return model.name + ' (' + model.externalId + ')';\n } else {\n return model.name;\n }\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n scope: true,\n link: function (scope, elm, attrs, ctrl) {\n\n var models = rentItemSvc.getAll();\n\n models.$promise.then(function () {\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: 5,\n id: function (model) { return model.id; },\n data: _.sortBy(models, function (a) { return gridSortSvc.localeSort(a, 'name'); }),\n multiple: true,\n matcher: function (term, text, data) {\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n },\n maximumSelectionSize: 5\n });\n\n ctrl.$render();\n });\n });\n\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return [];\n } else {\n if (Array.isArray(viewValue)) {\n return viewValue;\n } else {\n return viewValue.split(',');\n }\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n if (Array.isArray(value)) {\n return _.map(value, function (n) { return n + ''; }).join();\n } else {\n return _.map(value.split(','), function (n) { return n + ''; }).join();\n }\n }\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbRentItemTypeCombo', ['$timeout', '$translate', 'rentItemSvc',\n function ($timeout, $translate, rentItemSvc) {\n function formatResult(model) {\n if (!model) {\n return \"\";\n }\n\n return model.name;\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n scope: {\n rentCategoryId: '=',\n allowClear: '='\n },\n link: function (scope, elm, attrs, controller) {\n\n var oldRentCategoryId = scope.rentCategoryId;\n\n var models = rentItemSvc.getAllByCategoryGroupedByItemType(scope.placeId, scope.rentCategoryId);\n models.$promise.then(function () {\n if (models.length == 1) {\n $(elm).select2('val', models[0].id);\n controller.$setViewValue(models[0].id);\n }\n });\n\n models.$promise.then(function () {\n $timeout(function () {\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_MENU_RENT_ITEM'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: (typeof scope.allowClear !== 'undefined') ? scope.allowClear : true,\n minimumResultsForSearch: -1,\n id: function (model) { return model.id; },\n data: models\n });\n\n controller.$render();\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n scope.$watch('rentCategoryId', function (newValue) {\n if (oldRentCategoryId != newValue) {\n oldRentCategoryId = newValue;\n var newModels = rentItemSvc.getAllByCategoryGroupedByItemType(scope.placeId, newValue);\n newModels.$promise.then(function () {\n models.length = 0;\n models.push.apply(models, newModels);\n\n if (models.length == 1) {\n $(elm).select2('val', models[0].id);\n controller.$setViewValue(models[0].id);\n } else {\n $(elm).select2('val', null);\n controller.$setViewValue(null);\n }\n });\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbRentStatusTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(itemSelectionType) {\n if (!itemSelectionType) { return; }\n return $translate.instant(itemSelectionType.text);\n }\n\n function formatSelection(itemSelectionType) {\n return $translate.instant(itemSelectionType.text);\n }\n\n function shouldBeVisible(visibleSelection, id) {\n if (visibleSelection) {\n return visibleSelection.includes(id + '');\n }\n\n return true;\n }\n\n function shouldBeDisbled(disabledSelection, id) {\n if (disabledSelection) {\n return disabledSelection.includes(id);\n }\n\n return false;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n model: '=ngModel',\n disabledSelection: '=',\n },\n link: function (scope, elm, attrs, controller) {\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_RENT_STATUS_RESERVED', disabled: shouldBeDisbled(scope.disabledSelection, 0) },\n { id: 1, text: 'TXT_RENT_STATUS_CANCELED', disabled: shouldBeDisbled(scope.disabledSelection, 1) },\n { id: 2, text: 'TXT_RENT_STATUS_RENTED', disabled: shouldBeDisbled(scope.disabledSelection, 2) },\n { id: 3, text: 'TXT_RENT_STATUS_RETURNED', disabled: shouldBeDisbled(scope.disabledSelection, 3) },\n { id: 4, text: 'TXT_RENT_STATUS_NOT_RETURNED', disabled: shouldBeDisbled(scope.disabledSelection, 4) },\n { id: 5, text: 'TXT_RENT_STATUS_RETURNED_WITH_ISSUES', disabled: shouldBeDisbled(scope.disabledSelection, 5) },\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbRentingPeriodTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(itemSelectionType) {\n if (!itemSelectionType) { return; }\n return $translate.instant(itemSelectionType.text);\n }\n\n function formatSelection(itemSelectionType) {\n return $translate.instant(itemSelectionType.text);\n }\n\n function shouldBeVisible(visibleSelection, id) {\n if (visibleSelection) {\n return visibleSelection.includes(id + '');\n }\n\n return true;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n model: '=ngModel',\n visibleSelection: '=',\n },\n link: function (scope, elm, attrs, controller) {\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_RENTING_PERIOD_TYPE_MINUTES', disabled: scope.disabledSelection === 0 },\n { id: 1, text: 'TXT_RENTING_PERIOD_TYPE_WHOLE_CALLENDAR_DAYS', disabled: scope.disabledSelection === 1 }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.controller('CourseStudentFluctuationCtrl', ['$scope', '$translate', 'reportsSvc', 'localStorageService', 'semesterSvc',\nfunction ($scope, $translate, reportsSvc, localStorageService, semesterSvc) {\n\n $scope.fromSemesterID = null;\n $scope.toSemesterID = null;\n $scope.include = {\n includeNew: true,\n includeLeaving: true\n };\n $scope.fluctuationType = 0;\n $scope.data = [];\n\n var sankeyInstance = null;\n\n var dataSource = new DevExpress.data.DataSource({\n load: function (loadOptions) {\n return $scope.data.$promise;\n },\n byKey: function (e) {\n },\n loadMode: 'processed'\n });\n\n $scope.resizableOptions = {\n handles: 'bottom',\n onResizeEnd: function (e) {\n if (sankeyInstance) {\n sankeyInstance.render();\n }\n }\n }\n\n $scope.sankeyOptions = {\n dataSource: dataSource,\n sourceField: \"from\",\n targetField: \"to\",\n weightField: \"studentCount\",\n title: \"\",\n //export: {\n // enabled: true\n //},\n node: {\n width: 10,\n padding: 15\n },\n label: {\n customizeText: function (info) {\n\n var weightOut = _.sumBy(info.linksOut, 'weight');\n var weightIn = _.sumBy(info.linksIn, 'weight');\n\n if (weightOut != 0) {\n return '(' + weightOut + ') ' + info.title;\n }\n\n return info.title + ' (' + weightIn + ')';\n }\n },\n margin: {\n left: 10,\n right: 0\n },\n link: {\n colorMode: \"source\"\n },\n tooltip: {\n enabled: true,\n zIndex: 2000,\n customizeLinkTooltip: function (info) {\n\n var allLeftCounts = _.sumBy(_.filter($scope.data, { 'from': info.source }), 'studentCount');\n var percent = Math.round((100 / allLeftCounts * info.weight) * 100) / 100;\n\n if ($scope.fluctuationType == 1) {\n // Teachers\n\n return {\n html:\n \"\" + $translate.instant('TXT_TEACHER_FROM') + \": \" +\n info.source +\n \"
\" + $translate.instant('TXT_TEACHER_TO') + \": \" +\n info.target +\n \"
\" +\n \"\" + $translate.instant('TXT_NO_OF_STUDENTS') + \": \" +\n info.weight + ' (' + percent + '%)'\n };\n } else {\n // Others\n\n return {\n html:\n \"\" + $translate.instant('TXT_CLASSROOM_FROM') + \": \" +\n info.source +\n \"
\" + $translate.instant('TXT_CLASSROOM_TO') + \": \" +\n info.target +\n \"
\" +\n \"\" + $translate.instant('TXT_NO_OF_STUDENTS') + \": \" +\n info.weight + ' (' + percent + '%)'\n };\n }\n\n\n },\n customizeNodeTooltip: function (info) {\n return {\n html:\n \"\" + info.title + \" \" + \n \"
\" + $translate.instant('TXT_NO_OF_STUDENTS') + \": \" +\n (info.weightIn != 0\n ? info.weightIn \n : info.weightOut)\n };\n }\n },\n onInitialized: function (e) {\n sankeyInstance = e.component;\n setTitle();\n }\n };\n\n if (localStorageService.isSupported) {\n $scope.fromSemesterID = localStorageService.get('courseStudentFluctuationFromSemesterID');\n $scope.toSemesterID = localStorageService.get('courseStudentFluctuationToSemesterID');\n $scope.fluctuationType = localStorageService.get('courseStudentFluctuationType') || 0;\n $scope.include.includeNew = localStorageService.get('courseStudentFluctuationIncludeNew') || true;\n $scope.include.includeLeaving = localStorageService.get('courseStudentFluctuationIncludeLeaving') || true;\n\n loadData();\n }\n\n if (!$scope.fromSemesterID) {\n semesterSvc.getDefaultAsync().then(function (data) {\n if (!!data) {\n $scope.fromSemesterID = data.id;\n $scope.toSemesterID = data.id;\n loadData();\n }\n });\n }\n\n $scope.onFromSemesterChange = function(semesterID) {\n if (localStorageService.isSupported) {\n localStorageService.set('courseStudentFluctuationFromSemesterID', semesterID);\n }\n loadData();\n }\n\n $scope.onToSemesterChange = function (semesterID) {\n if (localStorageService.isSupported) {\n localStorageService.set('courseStudentFluctuationToSemesterID', semesterID);\n }\n loadData();\n }\n\n $scope.onFluctuationTypeChange = function (type) {\n if (localStorageService.isSupported) {\n localStorageService.set('courseStudentFluctuationType', type);\n }\n setTitle();\n loadData();\n }\n\n $scope.onIncludeNewChange = function (value) {\n if (localStorageService.isSupported) {\n localStorageService.set('courseStudentFluctuationIncludeNew', value);\n }\n loadData();\n }\n\n $scope.onIncludeLeavingChange = function (value) {\n if (localStorageService.isSupported) {\n localStorageService.set('courseStudentFluctuationIncludeLeaving', value);\n }\n loadData();\n }\n\n function loadData() {\n if (!!$scope.fromSemesterID && \n !!$scope.toSemesterID &&\n $scope.fromSemesterID != $scope.toSemesterID) {\n\n var newData = [];\n\n switch ($scope.fluctuationType) {\n case 0:\n newData =\n reportsSvc.courseStudentFluctuationOverall($scope.fromSemesterID, $scope.toSemesterID);\n break;\n case 1:\n newData =\n reportsSvc.courseStudentFluctuationByTeacher($scope.fromSemesterID, $scope.toSemesterID, $scope.include.includeNew, $scope.include.includeLeaving);\n break;\n case 2:\n newData =\n reportsSvc.courseStudentFluctuationByClassroom($scope.fromSemesterID, $scope.toSemesterID, $scope.include.includeNew, $scope.include.includeLeaving);\n break;\n case 3:\n newData =\n reportsSvc.courseStudentFluctuationBySubject($scope.fromSemesterID, $scope.toSemesterID, $scope.include.includeNew, $scope.include.includeLeaving);\n break;\n }\n\n $scope.data = newData;\n $scope.data.$promise.then(function (d) {\n setHeight(d);\n });\n dataSource.reload();\n }\n }\n\n function setTitle() {\n var newTitle = '';\n switch ($scope.fluctuationType) {\n case 0:\n newTitle = $translate.instant('TXT_COURSE_STUDENT_FLUCTUATION_OVERALL');\n break;\n case 1:\n newTitle = $translate.instant('TXT_COURSE_STUDENT_FLUCTUATION_BY_TEACHER');\n break;\n case 2:\n newTitle = $translate.instant('TXT_COURSE_STUDENT_FLUCTUATION_BY_CLASSROOM');\n break;\n case 3:\n newTitle = $translate.instant('TXT_COURSE_STUDENT_FLUCTUATION_BY_SUBJECT');\n break;\n }\n if (sankeyInstance) {\n sankeyInstance.option('title', $translate.instant('TXT_MENU_COURSE_STUDENT_FLUCTUATION') + ' - ' + newTitle);\n }\n if ($scope.gridSettings.gridInstance) {\n\n $scope.gridSettings.gridInstance.columnOption(0, { caption: ($scope.fluctuationType == 1\n ? $translate.instant('TXT_TEACHER_FROM')\n : $translate.instant('TXT_CLASSROOM_FROM')) });\n $scope.gridSettings.gridInstance.columnOption(1, { caption: ($scope.fluctuationType == 1\n ? $translate.instant('TXT_TEACHER_TO')\n : $translate.instant('TXT_CLASSROOM_TO')) });\n }\n }\n\n function setHeight(data) {\n var leftCount = _.uniq(_.map(data, 'from')).length;\n var rightCount = _.uniq(_.map(data, 'to')).length;\n\n var m = Math.max(leftCount, rightCount);\n\n if (sankeyInstance) {\n sankeyInstance.option('size.height', Math.max(350, 70 * m) + 50);\n }\n }\n\n\n $scope.gridSettings = {\n name: 'courseStudentFluctuation',\n pager: {\n showPageSizeSelector: true,\n visible: \"false\"\n },\n paging: { pageSize: 100 },\n columns: [\n {\n dataField: 'from',\n caption: $scope.fluctuationType == 1\n ? $translate.instant('TXT_TEACHER_FROM')\n : $translate.instant('TXT_CLASSROOM_FROM'),\n dataType: 'string'\n },\n {\n dataField: 'to',\n caption: $scope.fluctuationType == 1\n ? $translate.instant('TXT_TEACHER_TO')\n : $translate.instant('TXT_CLASSROOM_TO'),\n dataType: 'string'\n },\n { dataField: 'studentCount', caption: $translate.instant('TXT_NO_OF_STUDENTS'), dataType: 'number', width: '60px' },\n ],\n };\n}]);\n","'use strict';\n\nwbApp.controller('CoursesAttendanceSummaryCtrl', ['$scope', '$filter', '$translate', 'reportsSvc',\nfunction ($scope, $filter, $translate, reportsSvc) {\n\n $scope.fromDate = moment().startOf('day').toDate();\n $scope.toDate = moment().startOf('day').add(3, 'days').toDate();\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.onDataRangeChanged = function () {\n\n var mFromDate = moment($scope.fromDate);\n var mToDate = moment($scope.toDate);\n\n if (!!$scope.fromDate && mFromDate.isValid() && !!$scope.toDate && mToDate.isValid()) {\n\n if (mFromDate.isAfter(mToDate)) {\n $scope.toDate = mFromDate.toDate();\n }\n\n if (mToDate.diff(mFromDate, 'days') > 32) {\n $scope.toDate = mFromDate.add(31, 'days').toDate();\n }\n\n refreshData($scope.fromDate, $scope.toDate);\n }\n }\n\n $scope.gridSettings = {\n name: 'attendanceSummary',\n shouldShowColumnChooser: true,\n exportVisibleColumnsOnly: true,\n allowColumnReordering: true,\n columns: [\n {\n dataField: 'studentID',\n caption: 'studentID',\n dataType: 'string',\n visible: false,\n width: '70px'\n },\n {\n dataField: 'lessonStartDate',\n caption: $translate.instant('TXT_LBL_START_DATE'),\n dataType: 'date',\n format: { raw: \"dd.MM.yy EEE HH:mm\" },\n width: '130px',\n sortOrder: 'asc'\n },\n { dataField: 'lessonEndDate', caption: $translate.instant(\"TXT_LBL_END_DATE\"), dataType: 'date', format: { raw: \"HH:mm\" }, width: '60px' },\n { dataField: 'classroomName', caption: $translate.instant('TXT_LBL_CLASSROOM'), dataType: 'string', width: '180px', visible: false },\n { dataField: 'courseFullName', caption: $translate.instant('TXT_LBL_COURSE'), dataType: 'string', width: '180px' },\n { dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', width: '140px' },\n { dataField: 'courseTeacherFullName', caption: $translate.instant('TXT_LBL_EMPLOYEE') + ' - ' + $translate.instant('TXT_LBL_COURSE'), dataType: 'string', width: '160px' },\n { dataField: 'scheduleTeacherFullName', caption: $translate.instant('TXT_LBL_EMPLOYEE') + ' - ' + $translate.instant('TXT_LBL_LESSON'), dataType: 'string', width: '160px' },\n { dataField: 'registrationNotes', caption: $translate.instant('TXT_NOTE') + ' - ' + $translate.instant('TXT_SEC_REGISTRATION'), dataType: 'string' },\n { dataField: 'scheduleNotes', caption: $translate.instant('TXT_NOTE') + ' - ' + $translate.instant('TXT_LBL_LESSON'), dataType: 'string', visible: false },\n { dataField: 'attendanceNotes', caption: $translate.instant('TXT_NOTE') + ' - ' + $translate.instant('TXT_LBL_ATTENDANCE'), dataType: 'string', visible: false },\n { dataField: 'semesterName', caption: $translate.instant('TXT_LBL_SEMESTER'), width: '180px', visible: false },\n {\n dataField: 'courseAttendanceStatusID',\n caption: $translate.instant('TXT_COL_ATTENDANCE_STATUS'),\n dataType: 'string',\n width: '100px',\n calculateCellValue: function (rowData) {\n return $filter('attendanceStatus')(rowData.courseAttendanceStatusID);\n }\n },\n {\n dataField: 'courseAttendanceTypeID',\n caption: $translate.instant('TXT_COL_ATTENDANCE_TYPE'),\n dataType: 'string',\n width: '100px',\n calculateCellValue: function (rowData) {\n return $filter('attendanceType')(rowData.courseAttendanceTypeID);\n }\n }, {\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.phone);\n },\n width: '120px',\n visible: false\n },\n { dataField: 'email', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '190px', visible: false },\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px', visible: false },\n { dataField: 'paymentsSum', caption: $translate.instant('TXT_LBL_PAYMENTS'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px', visible: false },\n { dataField: 'arrear', caption: $translate.instant('TXT_LBL_ARREAR'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px', visible: false },\n { dataField: 'userFullName', caption: $translate.instant('TXT_LBL_PARENT'), dataType: 'string', visible: false },\n {\n dataField: 'studentBirthday',\n caption: $translate.instant('TXT_LBL_BIRTHDAY'),\n dataType: 'date',\n format: { date: 'short' },\n width: '70px',\n alignment: 'right',\n visible: false\n },\n {\n dataField: 'studentGroups',\n caption: $translate.instant('TXT_MENU_GROUPS'),\n dataType: 'object',\n calculateCellValue: function (rowData) {\n return $filter('groups')(rowData.studentGroups);\n },\n visible: false\n },\n ]\n }\n\n function refreshData(fromDate, toDate) {\n\n var mFromDate = moment($scope.fromDate);\n var mToDate = moment($scope.toDate);\n\n if (mFromDate.isValid() && mToDate.isValid()) {\n $scope.cousesAttendaceSummary = reportsSvc.getCoursesAttendanceSummaryForDateRange(fromDate, toDate);\n } else {\n $scope.cousesAttendaceSummary = [];\n }\n }\n\n refreshData($scope.fromDate, $scope.toDate);\n\n $scope.$on('refreshData', function (e, data) {\n refreshData($scope.fromDate, $scope.toDate);\n });\n\n}]);\n","'use strict';\n\nwbApp.controller('FranchiseAttendanceSummaryCtrl', ['$scope', 'franchiseSvc', 'tenantInfo',\nfunction ($scope, franchiseSvc, tenantInfo) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.fromDate = moment().startOf('month').toDate();\n $scope.toDate = moment().endOf('month').toDate();\n $scope.franchiseCentralID = tenantInfo.franchiseCentrals.length\n ? tenantInfo.franchiseCentrals[0].tenantID\n : null;\n\n $scope.onSeachCriteriaChanged = function () {\n $scope.attendanceSummary = franchiseSvc.getAttendanceSummaryForFranchiseCentral($scope.franchiseCentralID, $scope.fromDate, $scope.toDate);\n }\n\n $scope.attendanceSummary = franchiseSvc.getAttendanceSummaryForFranchiseCentral($scope.franchiseCentralID, $scope.fromDate, $scope.toDate);\n\n $scope.gridOptions = {\n sortInfo: { fields: ['tenantName'], directions: ['dsc'] },\n noCommandColumn: true,\n columnDefs: [\n { field: 'franchiseSubjectName', displayName: \"TXT_LBL_SUBJECT\", sort: 'locale' },\n { field: 'employeeFullName', displayName: \"TXT_LBL_EMPLOYEE\", sort: 'locale', width: \"200px\" },\n { field: 'noOFCredits', displayName: \"TXT_LBL_NO_OF_CREDITS\", width: \"120px\", align: 'right' }\n ]\n };\n}]);","'use strict';\n\nwbApp.controller('OneOffsSummaryCtrl', ['$scope', '$filter', '$translate', '$q', 'reportsSvc', 'semesterSvc', 'accountingBookSvc', 'groupSvc',\nfunction ($scope, $filter, $translate, $q, reportsSvc, semesterSvc, accountingBookSvc, groupSvc) {\n\n $scope.groups = groupSvc.getAllAsync(true);\n $scope.customFilter = { groups: [], accountingBooks: [] };\n\n $scope.accountingBooks = accountingBookSvc.getAllAsync();\n $scope.rawOneOffsSummary = [];\n $scope.oneOffsSummary = [];\n\n\n function preFilter() {\n $q.all([$scope.rawOneOffsSummary.$promise, $scope.accountingBooks.$promise, $scope.groups.$promise]).then(function () {\n var groupIDs = _.values($scope.customFilter.groups);\n var accountingBookIDs = _.values($scope.customFilter.accountingBooks);\n var noGroupSelected = $scope.customFilter.groups.indexOf(-1) !== -1;\n $scope.oneOffsSummary.length = 0;\n $scope.oneOffsSummary.push.apply($scope.oneOffsSummary,\n _.filter($scope.rawOneOffsSummary, function (o) {\n var ret = true;\n if (noGroupSelected) {\n ret = ret && !o.groups.length;\n } else {\n if (groupIDs.length > 0) {\n ret = ret && _.intersection(o.groups, groupIDs).length > 0;\n }\n }\n if (accountingBookIDs.length > 0) {\n ret = ret && _.includes(accountingBookIDs, o.accountingBookID);\n }\n return ret;\n })\n );\n });\n }\n\n $scope.$watch('customFilter', function (newValue, oldValue) {\n preFilter();\n }, true);\n\n semesterSvc.getDefaultAsync()\n .then(function (semester) {\n $scope.semesterID = semester.id;\n $scope.rawOneOffsSummary = reportsSvc.getOneOffAttendanceSummary($scope.semesterID);\n preFilter();\n });\n\n $scope.$on('refreshData', function (e, data) {\n if ($scope.semesterID) {\n $scope.rawOneOffsSummary = reportsSvc.getOneOffAttendanceSummary($scope.semesterID);\n preFilter();\n }\n });\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n $scope.rawOneOffsSummary = reportsSvc.getOneOffAttendanceSummary($scope.semesterID);\n preFilter();\n }\n }\n\n $scope.gridSettings = {\n name: 'oneOffsSummary',\n shouldShowColumnChooser: true,\n columns: [\n { dataField: 'studentSurname', caption: $translate.instant('TXT_HUMAN_SURNAME'), dataType: 'string', width: '110px' },\n { dataField: 'studentName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', width: '110px' },\n { dataField: 'studentMiddlename', caption: $translate.instant('TXT_LBL_MIDDLENAME'), dataType: 'string', width: '110px' },\n {\n dataField: 'courseName',\n caption: $translate.instant('TXT_LBL_COURSE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n var ret = rowData.subjectName;\n if (!!rowData.courseAbbreviation) {\n ret += \" (\" + rowData.courseAbbreviation + \")\";\n }\n\n if (!!rowData.courseName) {\n ret += \" - \" + rowData.courseName;\n }\n\n return ret;\n }\n },\n { dataField: 'lessonStartTime', caption: $translate.instant('TXT_LBL_START_DATE'), dataType: 'date', format: { raw: \"dd.MM.yy EEE HH:mm\" }, width: '130px', sortOrder: 'asc' },\n { dataField: 'lessonEndTime', caption: $translate.instant(\"TXT_LBL_END_DATE\"), dataType: 'date', format: { raw: \"HH:mm\" }, width: '60px' },\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '90px' },\n {\n dataField: 'courseAttendanceStatusID',\n caption: $translate.instant('TXT_COL_ATTENDANCE_STATUS'),\n dataType: 'string',\n width: '90px',\n calculateCellValue: function (rowData) {\n return $filter('attendanceStatus')(rowData.courseAttendanceStatusID);\n }\n },\n {\n dataField: 'studentBirthday',\n caption: $translate.instant('TXT_LBL_BIRTHDAY'),\n dataType: 'date',\n format: { date: 'short' },\n width: '70px',\n alignment: 'right'\n },\n {\n dataField: 'parentSurname',\n caption: $translate.instant('TXT_LBL_PARENT'),\n dataType: 'string',\n width: '140px',\n calculateCellValue: function (rowData) {\n return String.prototype.fullName(rowData.parentName, rowData.parentMiddlename, rowData.parentSurname);\n }\n },\n {\n dataField: 'parentPhone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n width: '120px',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.parentPhone);\n }\n },\n { dataField: 'parentEmail', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '160px' },\n { dataField: 'parentAddress', caption: $translate.instant('TXT_LBL_ADDRESS'), dataType: 'string', visible: false },\n {\n dataField: 'groups',\n caption: $translate.instant('TXT_MENU_GROUPS'),\n dataType: 'object',\n calculateCellValue: function (rowData) {\n return $filter('groups')(rowData.groups);\n },\n visible: false\n },\n ]\n }\n}]);\n","'use strict';\n\nwbApp.controller('RegisteredAttendanceCtrl', ['$scope', 'reportsSvc',\nfunction ($scope, reportsSvc) {\n\n var startDate = moment().startOf('month').subtract(1, 'days').startOf('month');\n\n $scope.fromDate = startDate.toDate();\n $scope.toDate = moment(startDate).endOf('month').toDate();\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.onFromDateChange = function (fromDate) {\n if (fromDate) {\n refreshData(fromDate, $scope.toDate);\n }\n }\n\n $scope.onToDateChange = function (toDate) {\n if (toDate) {\n refreshData($scope.fromDate, toDate);\n }\n }\n\n $scope.gridOptions = {\n sortInfo: { fields: ['ClassroomName'], directions: ['dsc'] },\n columnDefs: [{ field: 'ClassroomName', displayName: \"TXT_LBL_CLASSROOM\", sort: 'locale' }\n ]\n };\n\n function refreshData(fromDate, toDate) {\n $scope.registeredAttendance = reportsSvc.getRegisteredAttendanceAsync(fromDate, toDate);\n\n $scope.registeredAttendance.$promise.then(function (data) {\n $scope.gridOptions.columnDefs = [{ field: 'ClassroomName', displayName: \"TXT_LBL_CLASSROOM\", sort: 'locale' }];\n var newColumnDefs = [];\n if (data.length > 0) {\n for (var prop in data[0]) { \n if (data[0].hasOwnProperty(prop) && prop !== \"classroomID\" && prop !== \"ClassroomName\") {\n newColumnDefs.push({ field: prop, displayName: prop, width: '60px' });\n }\n }\n }\n var sortedDefs = _.sortBy(newColumnDefs, 'displayName');\n $scope.gridOptions.columnDefs.push.apply($scope.gridOptions.columnDefs, sortedDefs);\n });\n }\n\n refreshData($scope.fromDate, $scope.toDate);\n\n\n}]);\n","'use strict';\r\n\r\nwbApp.controller('RegistrationsSummaryCtrl', ['$scope', '$filter', '$translate', '$q', 'reportsSvc', 'semesterSvc', 'groupSvc',\r\n 'accountingBookSvc', 'localStorageService', 'securitySvc',\r\nfunction ($scope, $filter, $translate, $q, reportsSvc, semesterSvc, groupSvc, accountingBookSvc,\r\n localStorageService, securitySvc) {\r\n\r\n $scope.semesterDataRange = 1; // 1 - semester, 2 - from to\r\n $scope.fromDate = moment().subtract(3, 'M').startOf('day').toDate();\r\n $scope.toDate = moment().startOf('day').toDate();\r\n\r\n if (localStorageService.isSupported) {\r\n $scope.semesterDataRange = localStorageService.get('semesterDataRange') || 1;\r\n }\r\n\r\n $scope.customFilter = { groups: [], accountingBooks: [] };\r\n\r\n $scope.groups = groupSvc.getAllAsync();\r\n $scope.accountingBooks = accountingBookSvc.getAllAsync();\r\n $scope.rawCourses = [];\r\n $scope.courses = [];\r\n\r\n function preFilter() {\r\n $q.all([$scope.rawCourses.$promise, $scope.groups.$promise, $scope.accountingBooks.$promise]).then(function () {\r\n var groupIDs = _.values($scope.customFilter.groups);\r\n var accountingBookIDs = _.values($scope.customFilter.accountingBooks);\r\n $scope.courses.length = 0;\r\n $scope.courses.push.apply($scope.courses,\r\n _.filter($scope.rawCourses, function (o) {\r\n var ret = true;\r\n if (groupIDs.length > 0) {\r\n ret = ret && _.intersection(o.studentGroups, groupIDs).length > 0;\r\n }\r\n if (accountingBookIDs.length > 0) {\r\n ret = ret && _.includes(accountingBookIDs, o.accountingBookID);\r\n }\r\n return ret;\r\n })\r\n );\r\n });\r\n }\r\n\r\n $scope.groupsCombo = {\r\n items: $scope.groups,\r\n displayExpr: 'name',\r\n valueExpr: 'groupID',\r\n showSelectionControls: true,\r\n maxDisplayedTags: 3,\r\n multiline: false,\r\n itemTemplate: 'customItem',\r\n placeholder: $translate.instant('TXT_LBL_SELECT_GROUPS'),\r\n bindingOptions: {\r\n value: 'customFilter.groups'\r\n },\r\n }\r\n\r\n $scope.onDataRangeChanged = function () {\r\n if (localStorageService.isSupported) {\r\n localStorageService.set('semesterDataRange', $scope.semesterDataRange);\r\n }\r\n\r\n if ($scope.semesterID != null) {\r\n loadData();\r\n }\r\n\r\n if ($scope.gridSettings.gridInstance) {\r\n if ($scope.semesterDataRange === 1) {\r\n $scope.gridSettings.gridInstance.columnOption(\"semesterColumn\", \"visible\", false);\r\n } else {\r\n $scope.gridSettings.gridInstance.columnOption(\"semesterColumn\", \"visible\", true);\r\n }\r\n }\r\n }\r\n\r\n function loadData() {\r\n if ($scope.semesterDataRange === 1) {\r\n $scope.rawCourses = reportsSvc.getCourseRegistrationSummaryForSemester($scope.semesterID);\r\n } else {\r\n $scope.rawCourses = reportsSvc.getCourseRegistrationSummaryForDateRange($scope.fromDate, $scope.toDate);\r\n }\r\n preFilter();\r\n }\r\n\r\n $scope.$watch('customFilter', function (newValue, oldValue) {\r\n preFilter();\r\n }, true);\r\n\r\n semesterSvc.getDefaultAsync()\r\n .then(function (semester) {\r\n $scope.semesterID = semester.id;\r\n loadData();\r\n });\r\n\r\n $scope.$on('refreshData', function (e, data) {\r\n if ($scope.semesterID) {\r\n loadData();\r\n }\r\n });\r\n\r\n $scope.onSemesterChange = function (semesterID) {\r\n if (semesterID) {\r\n loadData();\r\n }\r\n }\r\n\r\n $scope.gridSettings = {\r\n name: 'registrationsSummary',\r\n shouldShowColumnChooser: true,\r\n columns: [\r\n {\r\n name: 'semesterColumn',\r\n dataField: 'semesterID',\r\n caption: $translate.instant('TXT_LBL_SEMESTER'),\r\n dataType: 'string',\r\n width: '120px',\r\n calculateCellValue: function (rowData) {\r\n return $filter('semester')(rowData.semesterID);\r\n },\r\n visible: $scope.semesterDataRange === 2\r\n },\r\n {\r\n dataField: 'studentID',\r\n caption: 'studentID',\r\n dataType: 'string',\r\n visible: false,\r\n width: '70px'\r\n },\r\n {\r\n dataField: 'subjectCategoryID',\r\n caption: $translate.instant('TXT_LBL_COURSE_TYPE'),\r\n dataType: 'string',\r\n encodeHtml: false,\r\n calculateCellValue: function (rowData) {\r\n return $filter('subjectCategory')(rowData.subjectCategoryID);\r\n },\r\n width: '70px'\r\n },\r\n { dataField: 'studentSurname', caption: $translate.instant('TXT_HUMAN_SURNAME'), dataType: 'string', width: '110px' },\r\n { dataField: 'studentName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', width: '110px' },\r\n { dataField: 'courseFullName', caption: $translate.instant('TXT_LBL_COURSE'), dataType: 'string', sortOrder: 'desc', },\r\n { dataField: 'payments', caption: $translate.instant('TXT_LBL_PAYMENT'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '90px' },\r\n {\r\n dataField: 'studentBirthday',\r\n caption: $translate.instant('TXT_LBL_BIRTHDAY'),\r\n dataType: 'date',\r\n format: { date: 'short' },\r\n width: '70px',\r\n alignment: 'right'\r\n },\r\n {\r\n dataField: 'studentPersonalIDNumber',\r\n caption: $translate.instant('TXT_LAB_PERSONAL_ID_NUMBER'),\r\n dataType: 'string',\r\n width: '90px',\r\n visible: securitySvc.isInRole('Student.ProtectedView')\r\n },\r\n { dataField: 'nationality', caption: $translate.instant('TXT_LBL_NATIONALITY'), dataType: 'string', width: '40px' },\r\n {\r\n dataField: 'gender',\r\n caption: $translate.instant('TXT_LBL_GENDER'),\r\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('gender')(rowData.gender);\r\n },\r\n width: '80px'\r\n },\r\n { dataField: 'operatorAddressCity', caption: $translate.instant('TXT_LBL_CITY'), dataType: 'string', width: '90px' },\r\n { dataField: 'operatorAddressStreet', caption: $translate.instant('TXT_LBL_STREET'), dataType: 'string', width: '140px' },\r\n { dataField: 'operatorAddressPostalCode', caption: $translate.instant('TXT_LBL_POSTAL_CODE'), dataType: 'string', width: '60px' },\r\n {\r\n dataField: 'firstAttendedLesson',\r\n caption: $translate.instant('TXT_LBL_FIRST_LESSON'),\r\n dataType: 'date',\r\n format: { date: 'short' },\r\n width: '70px',\r\n alignment: 'right'\r\n },\r\n {\r\n dataField: 'lastAttendedLesson',\r\n caption: $translate.instant('TXT_LBL_LAST_LESSON'),\r\n dataType: 'date',\r\n format: { date: 'short' },\r\n width: '70px',\r\n alignment: 'right'\r\n },\r\n { dataField: 'studentHealth', caption: $translate.instant('TXT_LAB_HEALTH'), dataType: 'string', width: '80px' }, \r\n { dataField: 'studentAllergies', caption: $translate.instant('TXT_LBL_ALLERGIES'), dataType: 'string', width: '80px', visible: false },\r\n { dataField: 'registrationNote', caption: $translate.instant('TXT_NOTE'), dataType: 'string' },\r\n { dataField: 'operatorFullName', caption: $translate.instant('TXT_LBL_PARENT'), dataType: 'string' },\r\n {\r\n dataField: 'operatorPhone',\r\n caption: $translate.instant('TXT_LBL_PHONE'),\r\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('phone')(rowData.operatorPhone);\r\n }\r\n },\r\n { dataField: 'operatorEmail', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string' },\r\n {\r\n dataField: 'registrationDate',\r\n caption: $translate.instant('TXT_SEC_CLIENT_COURSE_REGISTRATION'),\r\n dataType: 'date',\r\n format: { date: 'short' },\r\n width: '70px',\r\n visible: false,\r\n alignment: 'right'\r\n },\r\n {\r\n dataField: 'studentGroups',\r\n caption: $translate.instant('TXT_MENU_GROUPS'),\r\n dataType: 'object',\r\n calculateCellValue: function (rowData) {\r\n return $filter('groups')(rowData.studentGroups);\r\n },\r\n visible: false\r\n },\r\n {\r\n dataField: 'accountingBookID',\r\n caption: $translate.instant('TXT_LBL_ACCOUNTING_BOOK'),\r\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('accountingBook')(rowData.accountingBookID);\r\n },\r\n visible: false\r\n },\r\n { dataField: 'courseTypeName', caption: $translate.instant('TXT_LBL_TYPE'), dataType: 'string', visible: false },\r\n { dataField: 'fromAge', caption: $translate.instant('TXT_LBL_FROM_AGE'), dataType: 'number', visible: false },\r\n { dataField: 'toAge', caption: $translate.instant('TXT_LBL_TO_AGE'), dataType: 'number', visible: false },\r\n { dataField: 'ageRangeName', caption: $translate.instant('TXT_LBL_AGE_RANGE'), dataType: 'string', visible: false },\r\n {\r\n dataField: 'idmConsentIssued',\r\n caption: $translate.instant('TXT_LBL_IDM_CONSENT'),\r\n dataType: 'date',\r\n format: { date: 'short' },\r\n width: '70px',\r\n alignment: 'right',\r\n visible: false\r\n },{\r\n dataField: 'studentCreatedAt',\r\n caption: $translate.instant('TXT_STUDENT_CREATED_AT'),\r\n dataType: 'date',\r\n format: { date: 'short' },\r\n width: '70px',\r\n visible: false,\r\n alignment: 'right'\r\n }, \r\n { \r\n dataField: 'operatorFullName2', \r\n caption: $translate.instant('TXT_LBL_SECONDARY_CONTACT'), \r\n dataType: 'string',\r\n visible: false, \r\n },\r\n {\r\n dataField: 'operatorPhone2',\r\n caption: $translate.instant('TXT_LBL_PHONE2'),\r\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('phone')(rowData.operatorPhone2);\r\n },\r\n visible: false,\r\n },\r\n { \r\n dataField: 'operatorEmail2', \r\n caption: $translate.instant('TXT_LBL_EMAIL2'), \r\n dataType: 'string',\r\n visible: false,\r\n },\r\n ]\r\n }\r\n}]);\r\n","'use strict';\n\nwbApp.directive('wbCourseStudentFluctuationTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n ctrl.$parsers.unshift(function (viewValue) {\n return Number(viewValue);\n });\n\n ctrl.$formatters.unshift(function (value) {\n return value + '';\n });\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n data: [\n { id: 0, text: 'TXT_COURSE_STUDENT_FLUCTUATION_OVERALL' },\n { id: 1, text: 'TXT_COURSE_STUDENT_FLUCTUATION_BY_TEACHER' },\n { id: 2, text: 'TXT_COURSE_STUDENT_FLUCTUATION_BY_CLASSROOM' },\n { id: 3, text: 'TXT_COURSE_STUDENT_FLUCTUATION_BY_SUBJECT' },\n ]\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);\n","wbApp.factory('reportsSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n var Reports = $resource('/Api/Reports/GetAll', {}, {\n 'getRegisteredAttendance': { method: 'GET', isArray: true, url: '/Api/Reports/GetRegisteredAttendance' },\n 'getCourseRegistrationSummaryForSemester': { method: 'GET', isArray: true, url: '/Api/Reports/GetCourseRegistrationSummaryForSemester' },\n 'getCourseRegistrationSummaryForDateRange': { method: 'GET', isArray: true, url: '/Api/Reports/GetCourseRegistrationSummaryForDateRange' },\n 'getOneOffAttendanceSummary': { method: 'GET', isArray: true, url: '/Api/Reports/GetOneOffAttendanceSummary' },\n\n 'getCourseStudentFluctuationOverall': { method: 'GET', isArray: true, url: '/Api/CourseStudentFluctuation/GetOverall' },\n 'getCourseStudentFluctuationByTeacher': { method: 'GET', isArray: true, url: '/Api/CourseStudentFluctuation/GetByTeacher' },\n 'getCourseStudentFluctuationBySubject': { method: 'GET', isArray: true, url: '/Api/CourseStudentFluctuation/GetBySubject' },\n 'getCourseStudentFluctuationByClassroom': { method: 'GET', isArray: true, url: '/Api/CourseStudentFluctuation/GetByClassroom' },\n\n 'getCoursesAttendanceSummaryForDateRange': { method: 'GET', isArray: true, url: '/Api/Reports/GetCoursesAttendanceSummaryForDateRange' },\n });\n\n function getRegisteredAttendanceAsync(fromDate, toDate) {\n return repositorySvc.customGet('getRegisteredAttendance', Reports, {\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function getCourseRegistrationSummaryForSemester(semesterID) {\n return repositorySvc.customGet('getCourseRegistrationSummaryForSemester', Reports, {\n semesterID: semesterID\n });\n }\n\n function getCourseRegistrationSummaryForDateRange(fromDate, toDate) {\n return repositorySvc.customGet('getCourseRegistrationSummaryForDateRange', Reports, {\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function getCoursesAttendanceSummaryForDateRange(fromDate, toDate) {\n return repositorySvc.customGet('getCoursesAttendanceSummaryForDateRange', Reports, {\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function getOneOffAttendanceSummary(semesterID) {\n return repositorySvc.customGet('getOneOffAttendanceSummary', Reports, {\n semesterID: semesterID\n });\n }\n\n function courseStudentFluctuationOverall(fromSemesterID, toSemesterID) {\n return repositorySvc.customGet('getCourseStudentFluctuationOverall', Reports, {\n fromSemesterID: fromSemesterID,\n toSemesterID: toSemesterID\n });\n }\n\n function courseStudentFluctuationByTeacher(fromSemesterID, toSemesterID, includeNewClients, includeLeavingClients) {\n return repositorySvc.customGet('getCourseStudentFluctuationByTeacher', Reports, {\n fromSemesterID: fromSemesterID,\n toSemesterID: toSemesterID,\n includeNewClients: includeNewClients,\n includeLeavingClients: includeLeavingClients\n });\n }\n\n function courseStudentFluctuationBySubject(fromSemesterID, toSemesterID, includeNewClients, includeLeavingClients) {\n return repositorySvc.customGet('getCourseStudentFluctuationBySubject', Reports, {\n fromSemesterID: fromSemesterID,\n toSemesterID: toSemesterID,\n includeNewClients: includeNewClients,\n includeLeavingClients: includeLeavingClients\n });\n }\n\n function courseStudentFluctuationByClassroom(fromSemesterID, toSemesterID, includeNewClients, includeLeavingClients) {\n return repositorySvc.customGet('getCourseStudentFluctuationByClassroom', Reports, {\n fromSemesterID: fromSemesterID,\n toSemesterID: toSemesterID,\n includeNewClients: includeNewClients,\n includeLeavingClients: includeLeavingClients\n });\n }\n\n return {\n getRegisteredAttendanceAsync: getRegisteredAttendanceAsync,\n getCourseRegistrationSummaryForSemester: getCourseRegistrationSummaryForSemester,\n getCourseRegistrationSummaryForDateRange: getCourseRegistrationSummaryForDateRange,\n getOneOffAttendanceSummary: getOneOffAttendanceSummary,\n courseStudentFluctuationOverall: courseStudentFluctuationOverall,\n courseStudentFluctuationByTeacher: courseStudentFluctuationByTeacher,\n courseStudentFluctuationBySubject: courseStudentFluctuationBySubject,\n courseStudentFluctuationByClassroom: courseStudentFluctuationByClassroom,\n getCoursesAttendanceSummaryForDateRange: getCoursesAttendanceSummaryForDateRange\n }\n }\n]);\n","wbApp.controller('DomainsCtrl', ['$scope', '$modal', '$translate', 'domainsSvc',\nfunction ($scope, $modal, $translate, domainsSvc) {\n\n function setSelectedDomain(domain, refresh) {\n $scope.selectedDomain = domain;\n $scope.$broadcast('selectedDomainChanged', { domain: domain, refresh: !!refresh });\n }\n\n $scope.$on('refreshData', function (e, data) {\n $scope.domains = domainsSvc.getAll(true); \n setSelectedDomain(null);\n });\n\n $scope.domains = domainsSvc.getAll(true);\n\n $scope.gridSettings = {\n name: 'domains',\n columns: [\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '270px', sortOrder: 'asc' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string'},\n { dataField: 'reservationTeacherHourSingleRate', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '80px' },\n { dataField: 'reservationTeacherHourGroupOneRate', caption: $translate.instant('TXT_LBL_GRP_ONE_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '80px' },\n { dataField: 'reservationTeacherHourGroupTwoRate', caption: $translate.instant('TXT_LBL_GRP_TWO_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '80px' },\n { dataField: 'disabledForClients', caption: $translate.instant('TXT_DISABLED_FOR_CLIENTS'), dataType: 'boolean', width: '60px' },\n ]\n }\n\n $scope.onRowSelected = function (data) {\n setSelectedDomain(data);\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = domainsSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n domainsSvc.remove(data);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"reservations/domains/domains-detail-tabs/detail.html\"\n }, {\n title: 'TXT_SPECIALIZATIONS',\n template: \"reservations/domains/domains-detail-tabs/specializations.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n\n var detailDialogPromise = $modal({\n templateUrl: 'reservations/domains/detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('DomainsDetailCtrl', ['$scope', 'domainsSvc', 'tenantSettingSvc',\nfunction ($scope, domainsSvc, tenantSettingSvc) {\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n \n $scope.tenantSetting = tenantSettingSvc.settings;\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (!data.id) {\n domainsSvc.insert(data, success, error);\n } else {\n domainsSvc.update(data, success, error);\n }\n\n function success() {\n $scope.$hide();\n }\n\n function error(data) {\n $scope.detailError = data;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"reservations/domains/domain-detail-main-tab.html\"\n },\n {\n title: 'TXT_PRICE_TAB',\n template: \"reservations/domains/domain-detail-price-tab.html\"\n },\n {\n title: 'TXT_RESERVATIONS_SETTINGS',\n template: \"reservations/domains/domain-detail-reservations-settings-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0; \n\n}]);\n","wbApp.controller('DomainsSpecializationsCtrl', ['$scope', '$modal', '$translate', 'domainsSpecializationsSvc',\nfunction ($scope, $modal, $translate, domainsSpecializationsSvc) {\n\n function setSelectedDomain(domain, refresh) {\n $scope.selectedDomain = domain;\n $scope.$broadcast('selectedDomainChanged', { domain: domain, refresh: !!refresh });\n }\n\n $scope.selectedDomain = null;\n var isActive = false;\n var loaded = false;\n $scope.domainsSpecializations = [];\n\n $scope.$on('selectedDomainChanged', function (e, domainInd) {\n if (domainInd.domain) {\n if (isActive) {\n if ($scope.selectedDomain !== domainInd.domain || domainInd.refresh) {\n $scope.domainsSpecializations = domainsSpecializationsSvc.getAll(domainInd.domain.id);\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else {\n $scope.domainsSpecializations = [];\n }\n $scope.selectedDomain = domainInd.domain;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 1) {\n if (!isActive) {\n isActive = true;\n if (!loaded && $scope.selectedDomain) {\n $scope.domainsSpecializations = domainsSpecializationsSvc.getAll($scope.selectedDomain.id);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.domainsSpecializationsGridSettings = {\n name: 'domainsSpecializations',\n columns: [\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '270px', sortOrder: 'asc' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string' },\n { dataField: 'reservationTeacherHourSingleRate', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '80px' },\n { dataField: 'reservationTeacherHourGroupOneRate', caption: $translate.instant('TXT_LBL_GRP_ONE_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '80px' },\n { dataField: 'reservationTeacherHourGroupTwoRate', caption: $translate.instant('TXT_LBL_GRP_TWO_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '80px' },\n { dataField: 'disabledForClients', caption: $translate.instant('TXT_DISABLED_FOR_CLIENTS'), dataType: 'boolean', width: '60px' },\n ]\n }\n\n $scope.onRowSelected = function (data) {\n setSelectedDomain(data);\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.domainId = $scope.selectedDomain.id;\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onSave = function () {\n $scope.domainsSpecializations = domainsSpecializationsSvc.getAll($scope.selectedDomain.id);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.domainId = $scope.selectedDomain.id;\n detailDialogPromise.$scope.model = domainsSpecializationsSvc.createNew();\n detailDialogPromise.$scope.onSave = function () {\n $scope.domainsSpecializations = domainsSpecializationsSvc.getAll($scope.selectedDomain.id);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n domainsSpecializationsSvc.remove(\n $scope.selectedDomain.id,\n data,\n function () {\n $scope.domainsSpecializations = domainsSpecializationsSvc.getAll($scope.selectedDomain.id);\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'reservations/domains/domains-specializations-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('DomainsSpecializationsDetailCtrl', ['$scope', 'domainsSpecializationsSvc', 'tenantSettingSvc',\nfunction ($scope, domainsSpecializationsSvc, tenantSettingSvc) {\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.tenantSetting = tenantSettingSvc.settings;\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (!data.id) {\n domainsSpecializationsSvc.insert($scope.domainId, data, success, error);\n } else {\n domainsSpecializationsSvc.update($scope.domainId, data, success, error);\n }\n\n function success() {\n $scope.$hide();\n $scope.onSave();\n }\n\n function error(data) {\n $scope.detailError = data;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"reservations/domains/domains-specializations-detail-main-tab.html\"\n },\n {\n title: 'TXT_PRICE_TAB',\n template: \"reservations/domains/domains-specializations-detail-price-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n\n}]);\n","wbApp.controller('ReservationSchedulesCtrl', ['$scope', '$modal', '$translate', '$q', '$timeout',\n 'classroomSvc', 'employeeSvc', 'classroomAvailabilitySchedulesSvc', 'messageBoxSvc', 'reservationsSvc',\n 'localStorageService', 'userSvc', 'studentSvc', 'tenantInfo', 'pricingSvc', 'domainsSvc',\nfunction ($scope, $modal, $translate, $q, $timeout, classroomSvc, employeeSvc, classroomAvailabilitySchedulesSvc,\n messageBoxSvc, reservationsSvc, localStorageService, userSvc, studentSvc, tenantInfo, pricingSvc, domainsSvc) {\n\n function getCurrencySymbol(tenantInfo) {\n switch (tenantInfo.currency) {\n case 'CZK':\n return ' Kč';\n case 'EUR':\n return ' €';\n default:\n return ' Kč';\n }\n }\n\n var model = {};\n var data = [];\n var availableCache = {};\n\n var employeesForDateRangePromise = null;\n \n var now = null;\n if (localStorageService.isSupported) {\n var nowStr = localStorageService.get('reservation-schedule-selected-date');\n if (!!nowStr) {\n now = new Date(JSON.parse(nowStr));\n }\n else {\n now = moment().startOf('day').toDate();\n }\n } else {\n now = moment().startOf('day').toDate();\n }\n\n\n $scope.selectedClassroom = null;\n var activeClassrooms = classroomSvc.getAllActiveAsync( /* classroomIDtoInclude */ null, /* filterForReservations */ true, /* filterForCourses */ false).$promise;\n\n var classrooms = $q(function (resolve, reject) { activeClassrooms.then(\n function (data) {\n resolve(_.map(data, function (c) {\n return {\n id: c.id + \"\",\n name: c.name\n }\n }));\n },\n function (error) {\n reject(error);\n });\n });\n\n var classroomDataSource = new DevExpress.data.DataSource({\n key:[\"id\"],\n load: function (loadOptions) { \n return classrooms;\n },\n byKey: function (e) {\n return $q(function (resolve, reject) {\n classrooms.then(\n function (data) {\n var place = _.find(data, { id: e });\n resolve(place);\n },\n function (error) {\n reject(error);\n });\n });\n },\n loadMode: 'raw'\n });\n\n classrooms.then(function (data) {\n if (localStorageService.isSupported) {\n $scope.selectedClassroom = localStorageService.get('reservation-schedule-selected-classroom'); \n }\n });\n\n var employees = null;\n var classroomAvailiability = null;\n var employeesShallow = employeeSvc.getAll();\n $scope.selectedEmployees = [];\n var lastFilteredEmployeeSchedules = [];\n var relaodDueToResources = false;\n\n $scope.getDomain = function (domainId) {\n return _.find(domains, { 'id': domainId });\n }\n\n $scope.getSpecialization = function (domain, specializationId) {\n return _.find(domain.specializations, { 'id': specializationId });\n }\n \n function resolveDomainAndSpecialization(domainOrSpecializationId) {\n var result = {\n domainId: null,\n domainSpecializationId: null\n };\n \n _.find(domains, function (d) {\n if (d.id === domainOrSpecializationId) {\n result = {\n domainId: domainOrSpecializationId,\n domainSpecializationId: null\n };\n return true;\n }\n let specialization = _.find(d.specializations, { id: domainOrSpecializationId });\n if (!!specialization) {\n result = {\n domainId: d.id,\n domainSpecializationId: domainOrSpecializationId\n };\n return true;\n }\n return false;\n });\n \n return result;\n }\n\n var domains = domainsSvc.getAllExpanded();\n var domainsDataSource = new DevExpress.data.DataSource({\n load: function (loadOptions) {\n return domains.$promise;\n },\n byKey: function (e) {\n return $q(function (resolve, reject) {\n domains.$promise.then(function (data) {\n _.forEach(data, function (d) {\n if (d.id == e) {\n resolve(d);\n return d;\n }\n\n var found = false;\n\n _.forEach(d.specializations, function (s) {\n if (s.id == e) {\n resolve(s);\n found = true;\n return s;\n }\n })\n\n if (found) {\n return;\n }\n });\n },\n function (error) {\n reject(error);\n })\n })\n },\n loadMode: 'processed'\n });\n\n var refreshUsersDataSource = false;\n\n var userDataSource = new DevExpress.data.DataSource({\n load: function (loadOptions) {\n return $q(function (resolve, reject) {\n userSvc.getAllBrief(refreshUsersDataSource).then(\n function (data) {\n refreshUsersDataSource = false;\n resolve(data);\n },\n function (error) {\n refreshUsersDataSource = false;\n reject(error);\n })\n });\n },\n byKey: function(e) {\n return $q(function (resolve, reject) {\n userSvc.getAllBrief(refreshUsersDataSource).then(\n function (data) {\n refreshUsersDataSource = false;\n resolve(_.find(data, { id: e + \"\" }));\n },\n function (error) {\n refreshUsersDataSource = false;\n reject(error);\n });\n });\n },\n loadMode: 'raw'\n });\n\n var selectedUserId = null;\n var refreshStudentsDataSource = false;\n var studentsDataSource = new DevExpress.data.DataSource({\n load: function (loadOptions) {\n return $q(function (resolve, reject) {\n if (!!selectedUserId) {\n studentSvc.getAllByUserIDAsync(selectedUserId, refreshStudentsDataSource).$promise.then(function (data) {\n resolve(data);\n }, function (error) {\n reject(error);\n });\n } else {\n resolve([]);\n }\n });\n },\n byKey: function (e) {\n return null;\n }\n });\n\n var lastError = null;\n\n var scheduleDataSource = new DevExpress.data.DataSource({\n store: new DevExpress.data.CustomStore({\n load: function (loadOptions) {\n return $q(function (resolve, reject) {\n\n availableCache = {};\n\n if (!canLoadData()) {\n resolve([]);\n return;\n }\n\n if (relaodDueToResources)\n {\n resolve(lastFilteredEmployeeSchedules);\n relaodDueToResources = false;\n return;\n }\n\n var employeeSchedules = [];\n\n var startDate = moment(/*loadOptions.dxScheduler.startDate*/schedulerInstance.getStartViewDate()).startOf('day').toDate();\n var endDate = moment(/*loadOptions.dxScheduler.endDate*/schedulerInstance.getEndViewDate()).startOf('day').toDate();\n \n employeesForDateRangePromise = employeeSvc.getAllExpanded(startDate, endDate);\n var classroomAvailabilityPromise = classroomAvailabilitySchedulesSvc.loadDay($scope.selectedClassroom, startDate);\n var reservationsPromise = reservationsSvc.getAllByRangeAndPlace($scope.selectedClassroom, startDate, endDate);\n\n $q.all([employeesForDateRangePromise, classroomAvailabilityPromise, reservationsPromise, domains.$promise]).then(\n function (data) {\n var selectedEmployees = _.sortBy(_.filter(data[0], function (e) {\n return e.availability.length > 0 || e.schedule.length > 0;\n }), ['surname', 'name']);\n\n employees = _.keyBy(selectedEmployees, 'id');\n classroomAvailiability = data[1];\n\n _.forEach(classroomAvailiability.periods, function (p) {\n var start = moment(p.start);\n var end = moment(p.end);\n while (start.isBefore(end)) {\n var id = \"time-cell-\" + start.format('HHmm');\n angular.element('#' + id).addClass('place-available');\n\n start.add(30, 'm');\n }\n });\n\n _.forEach(selectedEmployees, function (e) {\n if (e.schedule.length > 0) {\n var periods = \n _.map(e.schedule[0].periods, function (s) {\n return {\n employeeId: e.id,\n userId: e.userId,\n fullName: e.fullName,\n startDate: s.start,\n placeId: s.placeId, \n endDate: s.end,\n type: 0\n };\n });\n employeeSchedules.push.apply(employeeSchedules, periods);\n }\n });\n\n lastError = null;\n\n var filteredEmployeeSchedules = _.filter(employeeSchedules, { placeId: $scope.selectedClassroom + \"\" });\n\n var reservations = _.map(data[2], function (r) {\n return {\n id: r.id,\n employeeId: r.employeeId,\n userId: r.userId,\n placeId: r.placeId,\n startDate: r.reservationStartDate,\n endDate: r.reservationEndDate,\n template: 'reservationCellTemplate',\n type: 1,\n studentsIds: r.studentIds,\n price: r.price,\n notes: r.notes,\n domainId: !!r.domainSpecialization ? r.domainSpecialization.id: r.domain.id,\n domainName: $scope.getDomain(r.domain.id).name,\n domainSpecializationName: !!r.domainSpecialization\n ? $scope.getSpecialization($scope.getDomain(r.domain.id), r.domainSpecialization.id).name\n : '',\n students: _.map(r.students, function (s) {\n var mbirthday = !!s.birthday\n ? moment(s.birthday)\n : null;\n var age = null;\n if (!!mbirthday && mbirthday.isValid()) {\n if ((moment().diff(mbirthday, 'years') < 16) &&\n (moment().diff(mbirthday, 'months') >= 1)) {\n age = mbirthday.toNow(true);\n }\n }\n return {\n fullName: String.prototype.fullName(s.name, s.middlename, s.surname),\n age: age\n }\n }),\n arrear: r.invoice.arrear,\n invoiceId: r.invoice.id\n }\n });\n\n filteredEmployeeSchedules.push.apply(filteredEmployeeSchedules, reservations);\n\n if (!angular.equals($scope.selectedEmployees, selectedEmployees)) {\n relaodDueToResources = true;\n lastFilteredEmployeeSchedules = filteredEmployeeSchedules;\n $scope.selectedEmployees = selectedEmployees;\n }\n resolve(filteredEmployeeSchedules);\n },\n function (error) {\n employees = null;\n classroomAvailiability = null;\n lastError = error.data;\n reject(error.data.title);\n }\n ); \n })\n },\n insert: function (data) {\n return $q(function (resolve, reject) {\n\n if (data.type == 0) {\n var employeeData = employees[data.employeeId];\n if (employeeData && $scope.selectedClassroom) {\n\n var employeeDataCopy = angular.copy(employeeData);\n\n if (employeeDataCopy.schedule.length == 0) {\n employeeDataCopy.schedule.push({\n day: moment(data.startDate).startOf('day').toDate(),\n periods: [{\n placeId: $scope.selectedClassroom,\n start: data.startDate,\n end: data.endDate\n }]\n });\n } else {\n employeeDataCopy.schedule[0].periods.push({\n placeId: $scope.selectedClassroom,\n start: data.startDate,\n end: data.endDate\n });\n }\n\n employeeSvc.schedulesUpdateDay(\n data.employeeId,\n moment(data.startDate).startOf('day').toDate(),\n employeeDataCopy.schedule[0]).$promise\n .then(\n function (success) {\n resolve();\n },\n function (error) {\n lastError = error.data;\n reject(error.data.title);\n });\n }\n else {\n resolve();\n }\n }\n else if (data.type == 1) {\n var specialization = null;\n var domain = _.find(domains, function (d) {\n if (d.id == data.domainId) {\n return true;\n }\n specialization = _.find(d.specializations, { id: data.domainId });\n if (!!specialization) {\n return true;\n }\n return false;\n });\n\n reservationsSvc.insert({\n employeeId: data.employeeId,\n placeId: data.placeId,\n price: data.price,\n studentIds: data.studentsIds,\n registrationDate: new Date(),\n reservationStartDate: data.startDate,\n reservationEndDate: data.endDate,\n userId: data.userId,\n notes: data.notes || '',\n domain: { id: domain.id },\n createEmployeeScheduleIfMissing: data.createEmployeeScheduleIfMissing,\n domainSpecialization: !!specialization ? { id: specialization.id } : null\n }).$promise\n .then(function (success) {\n resolve();\n }, function (error) {\n reject(error.data.title);\n }); \n }\n });\n },\n update: function(oldData, newData) { \n return $q(function (resolve, reject) {\n if (newData.type == 0) {\n var employeeData = employees[oldData.employeeId];\n if (employeeData && $scope.selectedClassroom && employeeData.schedule.length == 1) {\n\n var employeeDataCopy = angular.copy(employeeData);\n\n var affectedPeriod = _.find(employeeDataCopy.schedule[0].periods, function (p) {\n var periodStartDate = moment(p.start);\n var periodEndDate = moment(p.end);\n\n return periodStartDate.isSame(oldData.startDate) &&\n periodEndDate.isSame(oldData.endDate);\n });\n if (affectedPeriod) {\n affectedPeriod.start = newData.startDate;\n affectedPeriod.end = newData.endDate;\n\n employeeSvc.schedulesUpdateDay(\n oldData.employeeId,\n moment(newData.startDate).startOf('day').toDate(),\n employeeDataCopy.schedule[0]).$promise\n .then(\n function (success) {\n resolve();\n return;\n },\n function (error) {\n lastError = error.data;\n reject(error.data.title);\n return;\n });\n }\n else {\n resolve();\n }\n }\n else {\n resolve();\n }\n } else if (newData.type == 1) {\n\n var specialization = null;\n var domain = _.find(domains, function (d) {\n if (d.id == newData.domainId) {\n return true;\n }\n specialization = _.find(d.specializations, { id: newData.domainId });\n if (!!specialization) {\n return true;\n }\n return false;\n });\n \n if (newData.employeeIds && newData.employeeIds.length > 0) {\n let promises = [];\n newData.employeeIds.forEach(function (employeeId) {\n promises.push(\n reservationsSvc.insert({\n employeeId: employeeId,\n placeId: newData.placeId,\n price: newData.price,\n studentIds: newData.studentsIds,\n registrationDate: new Date(),\n reservationStartDate: newData.startDate,\n reservationEndDate: newData.endDate,\n userId: newData.userId,\n notes: newData.notes || '',\n domain: { id: domain.id },\n createEmployeeScheduleIfMissing: newData.createEmployeeScheduleIfMissing,\n domainSpecialization: !!specialization ? { id: specialization.id } : null\n }).$promise\n );\n });\n $q.all(promises).then(function (success) {\n resolve();\n }, function (error) {\n reject(error.data.title);\n });\n }\n else {\n reservationsSvc.update({\n id: newData.id,\n employeeId: newData.employeeId,\n placeId: newData.placeId,\n price: newData.price,\n studentIds: newData.studentsIds,\n registrationDate: new Date(),\n reservationStartDate: newData.startDate,\n reservationEndDate: newData.endDate,\n userId: newData.userId,\n notes: newData.notes || '',\n domain: {id: domain.id},\n domainSpecialization: !!specialization ? {id: specialization.id} : null\n }).$promise\n .then(function (success) {\n resolve();\n }, function (error) {\n reject(error.data.title);\n });\n }\n }\n });\n },\n remove: function (data) {\n return $q(function (resolve, reject) {\n if (data.type == 0) {\n var employeeData = employees[data.employeeId];\n if (employeeData && $scope.selectedClassroom && employeeData.schedule.length == 1) {\n var newPeriods = _.remove(employeeData.schedule[0].periods, function (p) {\n var periodStartDate = moment(p.start);\n var periodEndDate = moment(p.end);\n\n return periodStartDate.isSame(data.startDate) &&\n periodEndDate.isSame(data.endDate);\n });\n\n if (employeeData.schedule[0].periods.length == 0) {\n // Delete day\n employeeSvc.schedulesDeleteDay(\n data.employeeId,\n moment(data.startDate).startOf('day').toDate()\n ).$promise\n .then(\n function (success) {\n resolve();\n return;\n },\n function (error) {\n lastError = error.data;\n reject(error.data.title);\n return;\n });\n }\n else {\n // Update day\n employeeSvc.schedulesUpdateDay(\n data.employeeId,\n moment(data.startDate).startOf('day').toDate(),\n employeeData.schedule[0]).$promise\n .then(\n function (success) {\n resolve();\n return;\n },\n function (error) {\n lastError = error.data;\n reject(error.data.title);\n return;\n });\n }\n }\n else {\n resolve();\n }\n } else if (data.type == 1) {\n reservationsSvc.remove(data.id).$promise.then(\n function (data) {\n resolve();\n },\n function (error) {\n reject(error.data.title);\n })\n } else\n {\n resolve();\n }\n });\n },\n errorHandler: function (error) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_ALERT_TITLE_ENTITY_SAVE_ERROR',\n message: error.message,\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n },\n loadMode: 'processed'\n })\n });\n\n function canLoadData() {\n return !!$scope.selectedClassroom;\n }\n\n $scope.classroomSelectOptions = {\n dataSource: classroomDataSource,\n bindingOptions: { \n value: 'selectedClassroom'\n },\n valueExpr: 'id',\n displayExpr: 'name',\n onValueChanged: function (v) {\n if (v.previousValue != v.value) {\n if (canLoadData()) {\n schedulerInstance.repaint();\n }\n if (!!v.value && localStorageService.isSupported) {\n localStorageService.set('reservation-schedule-selected-classroom', v.value);\n }\n }\n }\n };\n\n $scope.employeeSelectOptions = {\n dataSource: $scope.selectedEmployees,\n bindingOptions: {\n value: 'selectedEmployees'\n },\n valueExpr: 'id',\n displayExpr: 'fullName',\n showSelectionControls: true,\n applyValueMode: \"useButtons\",\n multiline: false,\n onValueChanged: function (v) {\n if (v.previousValue != v.value ) {\n if (canLoadData()) {\n schedulerInstance.repaint();\n }\n if (!!v.value && localStorageService.isSupported) {\n localStorageService.set('reservation-schedule-selected-employees', v.value);\n }\n }\n }\n };\n\n function createEmployeeReservation(e) {\n var appointmentData = angular.copy($scope.cellContextMenuCellData);\n appointmentData.type = 0; // employee-reservation\n\n schedulerInstance.showAppointmentPopup(appointmentData, true, {});\n }\n\n function createStudentsBooking(e) {\n var appointmentData = angular.copy($scope.cellContextMenuCellData);\n appointmentData.type = 1; // student-booking\n\n appointmentData.studentsIds = [];\n appointmentData.userId = null;\n\n schedulerInstance.showAppointmentPopup(appointmentData, true, {});\n }\n\n $scope.cellContextMenuItems = [\n { text: $translate.instant('TXT_TEACHER_SCHEDULE_RESERVATION'), onItemClick: createEmployeeReservation },\n { text: $translate.instant('TXT_CREATE_RESERVATION'), onItemClick: createStudentsBooking }\n ];\n\n $scope.emptyCellContextMenuOptions = {\n dataSource: $scope.cellContextMenuItems,\n target: '.dx-scheduler-date-table-cell',\n onItemClick: function(e) {\n e.itemData.onItemClick(e.itemData);\n }\n }\n\n function setUpEmployeeReservationForm(data) \n {\n var form = data.form;\n var formData = form.option('formData');\n var startDate = data.appointmentData.startDate;\n var employeeData = employees[data.appointmentData.employeeId];\n\n var tbStartDate, tbEndDate;\n\n const popup = data.element.find(\".dx-scheduler-appointment-popup\").dxPopup(\"instance\");\n\n popup.option('title', $translate.instant('TXT_TEACHER_SCHEDULE_RESERVATION'));\n\n var buttons = popup.option('toolbarItems');\n buttons[1].options = {\n onClick: function () {\n popup.hide();\n if (lastError) {\n data.component.repaint();\n }\n }\n };\n\n form.option(\"colCount\", 1);\n form.option(\"items\", [{\n label: {\n text: $translate.instant('TXT_EMPLOYEE')\n },\n name: \"employee\",\n editorType: \"dxTextBox\",\n editorOptions: {\n value: employeeData.fullName,\n readOnly: true\n },\n cssClass: 'first-form-item'\n }, {\n label: {\n text: $translate.instant('TXT_LBL_START_DATE')\n },\n dataField: \"startDate\",\n editorType: \"dxDateBox\",\n editorOptions: {\n width: \"100%\",\n type: \"datetime\",\n onInitialized: function (e) {\n tbStartDate = e.element;\n },\n onValueChanged: function (e) {\n if (tbEndDate) {\n tbEndDate.dxValidator(\"instance\").validate();\n }\n }\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_LBL_START_DATE'))\n }, {\n type: \"custom\",\n validationCallback: function (e) {\n return moment(e.value).isBefore(formData.endDate);\n },\n reevaluate: true,\n message: $translate.instant('TXT_ERROR_MUST_BE_EARLIER_THEN_PARAM').f(\n $translate.instant('TXT_LBL_START_DATE'),\n $translate.instant('TXT_LBL_END_DATE')\n )\n }],\n }, {\n label: {\n text: $translate.instant('TXT_LBL_END_DATE')\n },\n name: \"endDate\",\n dataField: \"endDate\",\n editorType: \"dxDateBox\",\n editorOptions: {\n width: \"100%\",\n type: \"datetime\",\n onInitialized: function (e) {\n tbEndDate = e.element;\n },\n onValueChanged: function (e) {\n if (tbStartDate) {\n tbStartDate.dxValidator(\"instance\").validate();\n }\n }\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_LBL_END_DATE'))\n }, {\n type: \"custom\",\n validationCallback: function (e) {\n return moment(e.value).isAfter(formData.startDate);\n },\n reevaluate: true,\n message: $translate.instant('TXT_ERROR_MUST_BE_LATER_THEN_PARAM').f(\n $translate.instant('TXT_LBL_END_DATE'),\n $translate.instant('TXT_LBL_START_DATE')\n )\n }],\n }, {\n label: {\n text: $translate.instant('TXT_PLACE')\n },\n name: \"place\",\n dataField: \"placeId\",\n editorType: \"dxSelectBox\",\n editorOptions: {\n dataSource: classroomDataSource,\n displayExpr: 'name',\n width: \"100%\",\n valueExpr: 'id',\n readOnly: true\n }\n }]);\n\n }\n\n function setUpStudentBookingForm(data)\n {\n let copyMode = data.appointmentData.copyMode || false;\n delete(data.appointmentData.copyMode);\n \n var form = data.form;\n var formData = form.option('formData');\n\n var startDate = formData.startDate;\n var employeeData = employees[formData.employeeId];\n\n var tbStartDate, tbEndDate;\n\n selectedUserId = formData.userId;\n\n function calculatePrice(d) {\n\n let domainAndSpecializationIds = resolveDomainAndSpecialization(d.domainId);\n \n if (!d.studentsIds || !d.studentsIds.length || !domainAndSpecializationIds.domainId)\n {\n return;\n }\n \n pricingSvc.calculateReservationPrice({\n userId: d.userId,\n placeId: d.placeId,\n studentsIds: d.studentsIds,\n employeeId: d.employeeId,\n reservationStartDate: d.startDate,\n reservationEndDate: d.endDate,\n domainId: domainAndSpecializationIds.domainId,\n domainSpecializationId: domainAndSpecializationIds.domainSpecializationId\n }, true).$promise.then(\n function (data) {\n d.price = data.price;\n },\n function (error) {\n \n });\n }\n\n const popup = data.element.find(\".dx-scheduler-appointment-popup\").dxPopup(\"instance\");\n\n popup.option('title', $translate.instant('TXT_CREATE_RESERVATION'));\n\n var buttons = popup.option('toolbarItems');\n buttons[1].options = {\n onClick: function () {\n\n var result = form.validate();\n popup.hide();\n if (lastError) {\n data.component.repaint();\n }\n }\n };\n\n var userSelectBox = null;\n var studentAddButtonInstance = null;\n \n form.option(\"colCount\", 1);\n form.option(\"colCountByScreen\", { xs: 1, sm: 1, md: 1, lg: 1 });\n form.option(\"labelLocation\", \"left\");\n form.option(\"items\", [\n {\n label: {\n text: $translate.instant('TXT_LBL_USER')\n },\n dataField: \"userId\",\n editorType: \"dxSelectBox\",\n editorOptions: { \n dataSource: userDataSource, \n displayExpr: 'fullName',\n searchExpr: ['fullName'],\n valueExpr: 'id',\n searchEnabled: true,\n readOnly: !!formData.id,\n onInitialized: function (e) {\n userSelectBox = e.component;\n },\n buttons: [\"dropDown\", {\n location: \"after\",\n name: \"addNewUser\",\n options: {\n icon: \"plus\",\n onClick: function() {\n onAddUserClick().then(function (model) {\n refreshUsersDataSource = true; \n userDataSource.reload().then(function () {\n userSelectBox.option('value', model.id + \"\");\n selectedUserId = model.id;\n if (!!selectedUserId && !!studentAddButtonInstance) {\n studentAddButtonInstance.option('disabled', false);\n }\n formData.studentsIds = [];\n studentsDataSource.load();\n });\n });\n }\n }\n }],\n onValueChanged: function (v) {\n if (v.previousValue != v.value) {\n selectedUserId = v.value;\n if (!!selectedUserId && !!studentAddButtonInstance) {\n studentAddButtonInstance.option('disabled', false);\n }\n formData.studentsIds = [];\n studentsDataSource.load();\n }\n }\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_LBL_USER'))\n }],\n cssClass: 'first-form-item'\n }, \n {\n label: {\n text: $translate.instant('TXT_LBL_STUDENTS')\n },\n dataField: \"studentsIds\",\n editorType: \"dxTagBox\",\n editorOptions: {\n dataSource: studentsDataSource,\n displayExpr: 'fullName',\n valueExpr: 'id',\n showSelectionControls: true,\n applyValueMode: \"useButtons\",\n multiline: true,\n readOnly: copyMode,\n buttons: [{\n location: \"after\",\n name: \"addNewStudent\",\n options: {\n icon: \"plus\",\n disabled: true,\n onClick: function () {\n var prom = onAddStudentClick();\n prom.then(function (model) {\n refreshStudentsDataSource = true;\n studentsDataSource.reload().then(function () {\n formData.studentsIds.push(model.id + \"\");\n });\n });\n },\n onInitialized: function (e) {\n studentAddButtonInstance = e.component;\n },\n }\n }],\n onValueChanged: function (v) {\n calculatePrice(formData);\n }\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_LBL_STUDENTS'))\n }],\n }, {\n label: {\n text: $translate.instant('TXT_DOMAIN')\n },\n dataField: \"domainId\",\n editorType: \"dxDropDownBox\",\n editorOptions: {\n dataSource: domainsDataSource,\n valueExpr: \"id\",\n displayExpr: \"name\",\n readOnly: copyMode,\n dropDownOptions: {\n height: '300px',\n resizeEnabled: true\n },\n contentTemplate: function(e) {\n var $tree = $(\"
\").dxTreeView(\n {\n dataSource: e.component.option(\"dataSource\"),\n dataStructure: \"tree\",\n keyExpr: 'id',\n itemsExpr: 'specializations',\n displayExpr: \"name\",\n selectByClick: true,\n selectNodesRecursive: false,\n selectionMode : \"single\",\n onItemSelectionChanged: function (arg) {\n if (arg.itemData.selected) {\n e.component.option(\"value\", arg.itemData.id);\n e.component.close();\n }\n } \n });\n return $tree;\n },\n onValueChanged: function (v) {\n calculatePrice(formData);\n }\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_DOMAIN'))\n }]\n }, {\n label: {\n text: $translate.instant('TXT_LBL_NOTE')\n },\n dataField: \"notes\",\n editorType: \"dxTextArea\",\n editorOptions: {\n height: '54px',\n }\n }, {\n label: {\n text: $translate.instant('TXT_LBL_PRICE')\n },\n dataField: \"price\",\n editorType: \"dxNumberBox\",\n editorOptions: {\n readOnly: copyMode,\n format: \"#,##0.##\" + getCurrencySymbol(tenantInfo),\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_LBL_PRICE'))\n }],\n }, \n \n ... copyMode ? [] : [ \n {\n label: {\n text: $translate.instant('TXT_EMPLOYEE')\n },\n name: \"employee\",\n dataField: 'employeeId',\n editorType: \"dxSelectBox\",\n editorOptions: {\n dataSource: $scope.selectedEmployees,\n displayExpr: 'fullName',\n searchExpr: ['fullName'],\n valueExpr: 'id',\n searchEnabled: true,\n onValueChanged: function (v) {\n calculatePrice(formData);\n }\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_EMPLOYEE'))\n }],\n cssClass: 'first-form-item'\n }],\n\n ... copyMode ? [\n {\n label: {\n text: $translate.instant('TXT_EMPLOYEE')\n },\n dataField: \"employeeIds\",\n editorType: \"dxTagBox\",\n editorOptions: {\n dataSource: $scope.selectedEmployees,\n displayExpr: 'fullName',\n valueExpr: 'id',\n showSelectionControls: true,\n applyValueMode: \"useButtons\",\n multiline: true,\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_EMPLOYEE'))\n }],\n }] : [], \n \n {\n label: {\n text: $translate.instant('TXT_CREATE_EMPLOYEE_SCHEDULE_IF_MISSING'),\n location: 'top',\n },\n name: \"CreateEmployeeScheduleIfMissing\",\n dataField: 'createEmployeeScheduleIfMissing',\n editorType: \"dxCheckBox\",\n cssClass: 'text-align-right'\n }, {\n label: {\n text: $translate.instant('TXT_LBL_START_DATE')\n },\n dataField: \"startDate\",\n editorType: \"dxDateBox\",\n editorOptions: {\n width: \"100%\",\n type: \"datetime\",\n onInitialized: function (e) {\n tbStartDate = e.element; \n },\n onValueChanged: function (e) {\n if (tbEndDate) {\n tbEndDate.dxValidator(\"instance\").validate();\n }\n calculatePrice(formData);\n }\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_LBL_START_DATE'))\n }, {\n type: \"custom\",\n validationCallback: function (e) {\n return moment(e.value).isBefore(formData.endDate);\n },\n reevaluate: true,\n message: $translate.instant('TXT_ERROR_MUST_BE_EARLIER_THEN_PARAM').f(\n $translate.instant('TXT_LBL_START_DATE'),\n $translate.instant('TXT_LBL_END_DATE')\n )\n }],\n }, {\n label: {\n text: $translate.instant('TXT_LBL_END_DATE')\n },\n name: \"endDate\",\n dataField: \"endDate\",\n editorType: \"dxDateBox\",\n editorOptions: {\n width: \"100%\",\n type: \"datetime\",\n onInitialized: function (e) {\n tbEndDate = e.element;\n },\n onValueChanged: function (e) {\n if (tbStartDate) {\n tbStartDate.dxValidator(\"instance\").validate();\n }\n calculatePrice(formData);\n }\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_LBL_END_DATE'))\n }, {\n type: \"custom\",\n validationCallback: function (e) {\n return moment(e.value).isAfter(formData.startDate);\n },\n reevaluate: true,\n message: $translate.instant('TXT_ERROR_MUST_BE_LATER_THEN_PARAM').f(\n $translate.instant('TXT_LBL_END_DATE'),\n $translate.instant('TXT_LBL_START_DATE')\n )\n }],\n }, {\n label: {\n text: $translate.instant('TXT_PLACE')\n },\n name: \"place\",\n dataField: \"placeId\",\n editorType: \"dxSelectBox\",\n editorOptions: {\n dataSource: classroomDataSource,\n displayExpr: 'name',\n valueExpr: 'id',\n onValueChanged: function (e) {\n calculatePrice(formData);\n }\n },\n validationRules: [{\n type : \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_PLACE'))\n }],\n }]); \n }\n\n var schedulerInstance = null;\n\n $scope.schedulerOptions = {\n dataSource: scheduleDataSource,\n views: [{\n type: \"timelineDay\",\n timeCellTemplate: function (itemData, itemIndex, itemElement) {\n return \"
\" + itemData.text + \"
\";\n },\n resourceCellTemplate: 'resourceCellTemplate'\n }],\n currentView: \"timelineDay\",\n maxAppointmentsPerCell: \"unlimited\",\n firstDayOfWeek: 0,\n startDayHour: 7,\n endDayHour: 20,\n cellDuration: 30,\n groups: [\"employeeId\"],\n crossScrollingEnabled: true,\n currentDate: now,\n editing: {\n allowDragging: false, \n },\n resources: [{\n fieldExpr: \"employeeId\",\n valueExpr: \"id\",\n displayExpr: \"fullName\",\n allowMultiple: false, \n label: \"Employee\",\n useColorAsDefault: true\n }],\n bindingOptions: {\n \"resources[0].dataSource\": \"selectedEmployees \"\n },\n height: \"100%\",\n dataCellTemplate: function(data) {\n return $scope.markAvailable(data) \n ? \"
\"\n : \"\";\n },\n appointmentTooltipTemplate: 'tooltip',\n onCellContextMenu: function(e) {\n $scope.cellContextMenuCellData = e.cellData;\n \n if ($(e.cellElement).is(\".dx-scheduler-date-table-cell\")) {\n var data = {\n placeId: $scope.selectedClassroom,\n employeeId: e.cellData.groups.employeeId,\n startDate: e.cellData.startDate,\n endDate: e.cellData.endDate\n };\n \n let selectedCellData = e.component.option(\"selectedCellData\");\n \n for (let i = 0; i < selectedCellData.length; i++) { \n let cellData = selectedCellData[i];\n if (cellData) {\n if (!data.startDate || moment(data.startDate).isAfter(cellData.startDate)) {\n data.startDate = cellData.startDate;\n }\n if (!data.endDate || moment(data.endDate).isBefore(cellData.endDate)) {\n data.endDate = cellData.endDate;\n }\n }\n }\n $scope.cellContextMenuCellData = data;\n }\n },\n onInitialized: function (e) {\n schedulerInstance = e.component; \n },\n onCellClick: function (e) {\n e.cancel = true;\n },\n onAppointmentFormOpening: function (data) {\n\n if (data.appointmentData.type == 0) {\n setUpEmployeeReservationForm(data);\n }\n else if (data.appointmentData.type == 1) {\n data.popup.option(\"minWidth\", 700);\n setUpStudentBookingForm(data); \n }\n },\n onContentReady: function (e) {\n var popupConfig = e.component._popupConfig;\n\n e.component._popupConfig = function () {\n var popupOptions = popupConfig.apply(e.component, arguments) \n\n return $.extend(popupOptions, {\n height: 'auto',\n });\n }\n\n scheduleDataSource.load();\n },\n onOptionChanged: function (e) {\n if (e.name == \"currentDate\" && localStorageService.isSupported) {\n localStorageService.set('reservation-schedule-selected-date', JSON.stringify(e.value));\n }\n },\n onAppointmentRendered: function (e) {\n var origHeight = e.appointmentElement.height();\n // var offset = (origHeight - 4) / 2;\n switch (e.appointmentData.type) {\n case 0: \n e.appointmentElement.height(18); \n e.appointmentElement.addClass('availability-appointment');\n break;\n case 1:\n e.appointmentElement.addClass('reservation-appointment');\n e.appointmentElement.height(origHeight + origHeight - 20);\n e.appointmentElement.css('margin-top', -origHeight + 19);\n e.appointmentElement[0].style.backgroundColor = '#FF676D';\n break;\n }\n \n }\n };\n\n $scope.markPlaceAvailable = function (cellData) {\n\n }\n \n $scope.markAvailable = function (cellData) {\n if (!!employees && !!cellData.groups) {\n let employeeData = employees[cellData.groups.employeeId];\n if (employeeData && employeeData.availability.length > 0) {\n let key = cellData.groups.employeeId + '_' + cellData.startDate.getHours() + '_' + cellData.startDate.getMinutes();\n if (availableCache[key] !== undefined) {\n return availableCache[key];\n }\n \n let startDate = moment(cellData.startDate);\n let endDate = moment(cellData.endDate);\n\n let day = moment(startDate).startOf('day').toDate();\n\n let dayAvailability = _.find(employeeData.availability, { 'day': day });\n if (dayAvailability) {\n let coveringPeriod = _.find(dayAvailability.periods, function (p) {\n let periodStart = moment(p.start);\n let periodEnd = moment(p.end);\n\n let startIndication = periodStart.isSameOrBefore(startDate);\n let endIndication = periodEnd.isSameOrAfter(endDate);\n\n return startIndication && endIndication;\n });\n\n if (coveringPeriod) {\n availableCache[key] = true;\n return true;\n } else {\n availableCache[key] = false;\n }\n }\n }\n }\n return false; \n };\n\n $scope.employeeScheduleDelete = function (data) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_DELETE',\n message: 'TXT_TEXT_CONFIRM_DELETE',\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n schedulerInstance.deleteAppointment(data.appointmentData);\n }\n }]\n });\n schedulerInstance.hideAppointmentTooltip();\n };\n\n $scope.employeeScheduleEdit = function (data) {\n schedulerInstance.showAppointmentPopup(data.appointmentData);\n schedulerInstance.hideAppointmentTooltip();\n }\n\n $scope.reservationDelete = function (data) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_DELETE',\n message: 'TXT_TEXT_CONFIRM_DELETE',\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n schedulerInstance.deleteAppointment(data.appointmentData);\n }\n }]\n }); \n schedulerInstance.hideAppointmentTooltip();\n };\n\n $scope.reservationEdit = function (data) {\n schedulerInstance.showAppointmentPopup(data.appointmentData);\n schedulerInstance.hideAppointmentTooltip();\n }\n\n $scope.reservationCopy = function (data) {\n data.appointmentData.copyMode = true;\n schedulerInstance.showAppointmentPopup(data.appointmentData);\n schedulerInstance.hideAppointmentTooltip();\n }\n\n $scope.reservationCreatePayment = function (data) {\n addPayment(data.appointmentData);\n schedulerInstance.hideAppointmentTooltip();\n }\n\n var addPaymentPromise = $modal({\n templateUrl: 'finance/payments/payments-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n function addPayment(data) {\n addPaymentPromise.$scope.isAddDuePayment = true;\n addPaymentPromise.$scope.paymentDetail = {\n paymentID: 0,\n invoiceForType: 4,\n invoiceID: data.invoiceId,\n amount: data.arrear,\n selectedDate: moment().toDate(),\n };\n\n addPaymentPromise.$promise.then(function () {\n addPaymentPromise.$scope.detailError = null;\n addPaymentPromise.$scope.onSave = function () {\n schedulerInstance.repaint();\n }\n\n addPaymentPromise.show();\n });\n }\n\n $scope.$on('refreshData', function (e, data) {\n scheduleDataSource.load();\n\n if (schedulerInstance) {\n schedulerInstance.repaint();\n }\n });\n\n function onAddUserClick() {\n return $q(function (resolve, reject) {\n var userDetail = userSvc.createNew();\n\n userDetailDialogPromise.$promise.then(function () {\n userDetailDialogPromise.$scope.userDetail = angular.copy(userDetail);\n userDetailDialogPromise.$scope.preFilled = true;\n userDetailDialogPromise.$scope.userSaved = function (model) {\n resolve(model);\n }\n userDetailDialogPromise.show();\n });\n });\n }\n\n function onAddStudentClick() { \n return $q(function (resolve, reject) {\n\n if (!selectedUserId) {\n reject();\n return;\n }\n\n var student = studentSvc.createNew();\n student.userID = selectedUserId;\n\n studentDialogPromise.$promise.then(function () {\n studentDialogPromise.$scope.collection = [];\n studentDialogPromise.$scope.model = student;\n studentDialogPromise.$scope.preFilled = true;\n studentDialogPromise.$scope.onStudentSave = function (model) {\n resolve(model);\n };\n studentDialogPromise.show();\n });\n });\n }\n\n var userDetailDialogPromise = $modal({\n templateUrl: 'users/users-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var studentDialogPromise = $modal({\n templateUrl: 'users/students/students-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.factory('domainsSpecializationsSvc', ['$resource', '$q', 'repositorySvc',\n function ($resource, $q, repositorySvc) {\n var Specializations = $resource('/restapi/domains/:id', {}, {\n 'get': { method: 'GET', isArray: true, url: '/restapi/domains/:domainId/specializations' },\n 'insert': { method: 'POST', url: '/restapi/domains/:domainId/specializations' },\n 'update': { method: 'PUT', url: '/restapi/domains/:domainId/specializations/:id' },\n 'delete': { method: 'DELETE', url: '/restapi/domains/:domainId/specializations/:id' },\n });\n\n var domains;\n\n function getAll(domainId) { \n return repositorySvc.customGet(\n 'get',\n Specializations,\n {\n domainId: domainId\n });\n }\n\n function createNew() {\n return {\n name: '',\n description: null\n };\n }\n\n function insert(domainId, specialization, success, error) {\n return repositorySvc.customPutWithParams(\n 'insert',\n Specializations,\n {\n domainId: domainId\n },\n specialization,\n success,\n error);\n }\n\n function update(domainId, specialization, success, error) {\n return repositorySvc.customPutWithParams(\n 'update',\n Specializations,\n {\n domainId: domainId,\n id: specialization.id\n },\n specialization,\n success,\n error);\n }\n\n function remove(domainId, specialization, success, error) {\n return repositorySvc.customDelete(\n 'delete',\n Specializations,\n {\n domainId: domainId,\n id: specialization.id\n },\n success,\n error);\n }\n\n return {\n getAll: getAll,\n createNew: createNew,\n insert: insert,\n update: update,\n remove: remove\n }\n }]);","wbApp.controller('AttendanceLogCtrl', ['$scope', '$modal', '$window', '$translate', '$filter', '$q', 'messageBoxSvc', 'rfidCardsSvc', 'securitySvc', 'groupSvc', 'gridSortSvc', 'tenantSettingSvc',\nfunction ($scope, $modal, $window, $translate, $filter, $q, messageBoxSvc, rfidCardsSvc, securitySvc, groupSvc, gridSortSvc, tenantSettingSvc) {\n\n $scope.groups = groupSvc.getAllAsync();\n $scope.rawAttendanceLog = [];\n $scope.attendanceLog = [];\n $scope.hasAttendanceWithoutGroup = false;\n\n $scope.customFilter = { groups: [] };\n\n function preFilter() {\n $q.all([$scope.rawAttendanceLog.$promise, $scope.groups.$promise]).then(function () {\n\n $scope.hasAttendanceWithoutGroup = !!_.find($scope.rawAttendanceLog,\n function (o) {\n return (!o.groups || !o.groups.length) && !o.isDeleted;\n }\n );\n\n var groupIDs = _.values($scope.customFilter.groups);\n $scope.attendanceLog.length = 0;\n $scope.attendanceLog.push.apply($scope.attendanceLog,\n _.filter($scope.rawAttendanceLog, function (o) {\n if (groupIDs.length > 0) {\n return _.intersection(o.groups, groupIDs).length > 0;\n }\n return true;\n })\n );\n });\n }\n\n $scope.$watch('customFilter', function (newValue, oldValue) {\n preFilter();\n }, true);\n\n var inUpdateRole = securitySvc.isInRole('RfidCardLog.Update');\n var inInsertRole = securitySvc.isInRole('RfidCardLog.Insert');\n var inDeleteRole = securitySvc.isInRole('RfidCardLog.Delete');\n var inSupportRole = securitySvc.isInRole('Support');\n\n\n $scope.rowAddDisabled = !inInsertRole;\n\n $scope.fromDate = moment().startOf('month').toDate();\n $scope.toDate = moment().endOf('month').toDate();\n\n function resetOriginalState(row) {\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_RESET_TO_DEFAULTS',\n message: 'TXT_TEXT_CONFIRM_RESET_TO_DEFAULTS',\n buttons: [{\n text: 'TXT_BTN_NO',\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n rfidCardsSvc.reset(row, $scope.rawAttendanceLog, function () {\n preFilter();\n }, null);\n }\n }]\n });\n }\n\n $scope.gridSettings = {\n name: 'attendanceLog',\n columns: [\n { dataField: 'userID', caption: $translate.instant('TXT_LBL_ID'), dataType: 'number', visible: false },\n {\n dataField: 'eventTime',\n caption: $translate.instant('TXT_LBL_EVENT_TIME'),\n sortOrder: 'desc',\n dataType: 'date',\n format: {\n skeleton: 'yMEdHms'\n },\n width: '160px'\n },\n {\n dataField: 'validationErrorMessage',\n caption: \"\",\n dataType: 'string',\n allowFiltering: false,\n allowHeaderFiltering: false,\n encodeHtml: false,\n calculateCellValue: function (rowData) {\n return $filter('errorIndicator')(rowData.validationErrorMessage);\n },\n width: '25px'\n },\n {\n dataField: 'description',\n caption: $translate.instant('TXT_NOTE'),\n dataType: 'string',\n allowFiltering: false,\n allowHeaderFiltering: false,\n encodeHtml: false,\n calculateCellValue: function (rowData) {\n return $filter('noteIndicator')(rowData.description);\n },\n width: '25px'\n },\n\n {\n dataField: 'userIDType',\n caption: $translate.instant('TXT_LBL_TYPE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('rfidCardUserType')(rowData.userIDType);\n },\n width: '80px'\n },\n {\n dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', width: '180px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentFullName') }\n },\n {\n dataField: 'operatorFullName', caption: $translate.instant('TXT_LBL_USER'), dataType: 'string', \n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'operatorFullName') }\n },\n {\n dataField: 'deviceSerialNumber',\n caption: $translate.instant('TXT_LBL_DEVICE_SERIAL_NUMBER'),\n dataType: 'string',\n width: '90px',\n alignment: 'right'\n\n },\n //{ dataField: 'operatorAddress', caption: $translate.instant('TXT_LBL_ADDRESS'), dataType: 'string' },\n //{ dataField: 'operatorEmail', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '190px' },\n //{\n // dataField: 'operatorPhone',\n // caption: $translate.instant('TXT_LBL_PHONE'),\n // dataType: 'string',\n // calculateCellValue: function (rowData) {\n // return $filter('phone')(rowData.operatorPhone);\n // },\n // width: '130px'\n //},\n {\n dataField: 'groups',\n caption: $translate.instant('TXT_MENU_GROUPS'),\n dataType: 'string',\n encodeHtml: false,\n allowFiltering: false,\n allowHeaderFiltering: false,\n calculateCellValue: function (rowData) {\n return $filter('groupsColors')(rowData.groups);\n },\n width: '70px'\n },\n {\n dataField: 'uploadedAt',\n caption: $translate.instant('TXT_LBL_UPLOADED_AT'),\n dataType: 'date',\n format: { datetime: 'short' },\n width: '110px',\n visible: inInsertRole\n }, \n { dataField: 'isDeleted', caption: $translate.instant('TXT_VAL_DELETED'), dataType: 'boolean', width: 0 }\n ],\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.isDeleted) {\n e.rowElement.addClass('text-muted');\n } else {\n if (inUpdateRole && data.overriden) {\n e.rowElement.addClass('text-danger');\n }\n if (!inUpdateRole && data.overridenWithDescription) {\n e.rowElement.addClass('text-danger');\n }\n }\n }\n },\n shouldShowAdd: function () { return inInsertRole; },\n shouldShowEdit: function (row) {\n return ((!row.isDeleted || !String.prototype.isNullOrWhitespace(row.description)) &&\n (inUpdateRole || !String.prototype.isNullOrWhitespace(row.description)));\n },\n shouldDisableEdit: function (row) {\n return ((row.isDeleted && String.prototype.isNullOrWhitespace(row.description)) ||\n (!inUpdateRole && String.prototype.isNullOrWhitespace(row.description)));\n },\n shouldShowDelete: function (row) {\n return (!row.isDeleted && inDeleteRole);\n },\n //shouldDisableDelete: function (row) {\n // return (row.isDeleted || !inDeleteRole);\n //},\n disableDeleteConfirmation: true,\n customCommands: [{\n text: $translate.instant('TXT_LBL_RESET_TO_DEFAULT'),\n isVisible: function (row) { return row.rfidCardLogOverrideID && inUpdateRole; },\n callback: function (row) {\n resetOriginalState(row);\n }\n }, {\n text: $translate.instant('TXT_LBL_MPSV_ATTENDANCE_REPORT'),\n callback: function (row) {\n showMPSVReportParamsDialog(false);\n },\n isVisible: function (row) { return tenantSettingSvc.settings.childrenGroupSupport; }\n\n }, {\n text: $translate.instant('TXT_LBL_MPSV_NURSERY_ATTENDANCE_REPORT'),\n callback: function (row) {\n showMPSVReportParamsDialog(true);\n },\n isVisible: function (row) { return tenantSettingSvc.settings.smallNurserySupport; }\n\n }, {\n text: tenantSettingSvc.settings.rfidAttendanceEUSupport\n ? $translate.instant('TXT_LBL_MPSV_STUDENT_ATTENDANCE_REPORT')\n : $translate.instant('TXT_LBL_STUDENT_ATTENDANCE_REPORT'),\n callback: function (row) {\n showMPSVStudentReportParamsDialog(false);\n },\n isVisible: function (row) { return tenantSettingSvc.settings.childrenGroupSupport ||\n tenantSettingSvc.settings.smallNurserySupport;\n }\n }, {\n text: \"(\" + $translate.instant('TXT_LBL_SUPPORT') + \") \" + $translate.instant('TXT_TITLE_EFS_IMPORT'),\n callback: function (row) {\n showEfsReportImportDetail();\n },\n isVisible: function (row) {\n return inSupportRole;\n }\n }, {\n text: \"(\" + $translate.instant('TXT_LBL_SUPPORT') + \") \" + $translate.instant('TXT_TITLE_DELETE_ALL_IN_RANGE'),\n callback: function (row) {\n showAttendanceLogSupportDetail('delete-all-in-range');\n },\n isVisible: function (row) {\n return inSupportRole;\n }\n }, {\n text: \"(\" + $translate.instant('TXT_LBL_SUPPORT') + \") \" + $translate.instant('TXT_TITLE_DELETE_USER_IN_RANGE'),\n callback: function (row) {\n showAttendanceLogSupportDetail('delete-user-in-range');\n },\n isVisible: function (row) {\n return inSupportRole;\n }\n }, {\n text: \"(\" + $translate.instant('TXT_LBL_SUPPORT') + \") \" + $translate.instant('TXT_TITLE_REPLACE_USER_IN_RANGE'),\n callback: function (row) {\n showAttendanceLogSupportDetail('replace-user-in-range');\n },\n isVisible: function (row) {\n return inSupportRole;\n }\n }, {\n text: \"(\" + $translate.instant('TXT_LBL_SUPPORT') + \") \" + $translate.instant('TXT_TITLE_SHIFT_TIME_IN_RANGE'),\n callback: function (row) {\n showAttendanceLogSupportDetail('shift-time-in-range');\n },\n isVisible: function (row) {\n return inSupportRole;\n }\n }]\n }\n\n $scope.$on('refreshData', function (e, data) {\n refreshData($scope.fromDate, $scope.toDate);\n });\n\n function refreshData(fromDate, toDate) {\n var mfromDate = moment(fromDate);\n var mtoDate = moment(toDate);\n\n if (mfromDate.isValid() && mtoDate.isValid() && mfromDate.isBefore(mtoDate)) {\n $scope.rawAttendanceLog = rfidCardsSvc.getAllLogsAsync(fromDate, toDate);\n } else {\n $scope.rawAttendanceLog = [];\n }\n preFilter();\n }\n\n refreshData($scope.fromDate, $scope.toDate);\n\n $scope.onFromDateChange = function (fromDate) {\n if (fromDate) {\n refreshData(fromDate, $scope.toDate);\n }\n }\n\n $scope.onToDateChange = function (toDate) {\n if (toDate) {\n refreshData($scope.fromDate, toDate);\n }\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.collection = $scope.rawAttendanceLog;\n detailDialogPromise.$scope.onSave = function () {\n preFilter();\n }\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = rfidCardsSvc.createNew();\n detailDialogPromise.$scope.collection = $scope.rawAttendanceLog;\n detailDialogPromise.$scope.onSave = function () {\n preFilter();\n }\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n deleteConfirmationPromise.$promise.then(function () {\n deleteConfirmationPromise.$scope.model = { description: \"\" }\n deleteConfirmationPromise.$scope.onDetailSave = function (model) {\n var dataToDelete = angular.copy(data);\n dataToDelete.description = model.description;\n rfidCardsSvc.remove(dataToDelete, $scope.rawAttendanceLog, function () {\n preFilter();\n });\n }\n deleteConfirmationPromise.show();\n });\n }\n\n function showMPSVReportParamsDialog(isNursery) {\n mpsvDialogPromise.$promise.then(function () {\n mpsvDialogPromise.$scope.fromDate = $scope.fromDate;\n mpsvDialogPromise.$scope.toDate = $scope.toDate;\n mpsvDialogPromise.$scope.isNursery = isNursery;\n mpsvDialogPromise.$scope.reportGenerated = function (data) {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n }\n mpsvDialogPromise.show();\n });\n }\n\n function showEfsReportImportDetail()\n {\n efsReportImportDetailPromise.$promise.then(function () {\n efsReportImportDetailPromise.show();\n });\n }\n\n function showAttendanceLogSupportDetail(operationMode)\n {\n attendanceLogSupportDetailPromise.$promise.then(function () {\n attendanceLogSupportDetailPromise.$scope.operationMode = operationMode;\n attendanceLogSupportDetailPromise.$scope.onSave = function () {\n refreshData($scope.fromDate, $scope.toDate);\n }\n attendanceLogSupportDetailPromise.show();\n });\n }\n \n\n function showMPSVStudentReportParamsDialog() {\n mpsvStudentDialogPromise.$promise.then(function () {\n mpsvStudentDialogPromise.$scope.fromDate = $scope.fromDate;\n mpsvStudentDialogPromise.$scope.toDate = $scope.toDate;\n mpsvStudentDialogPromise.$scope.rfidAttendanceEUSupport = tenantSettingSvc.settings.rfidAttendanceEUSupport;\n mpsvStudentDialogPromise.$scope.reportGenerated = function (fromDate, toDate, students, projectName, projectRegistrationNumber, recipientName) {\n\n var rr = _.reduce(students, function (result, value, key) {\n (result[value.deviceSerialNumber] || (result[value.deviceSerialNumber] = [])).push(value.studentID);\n return result;\n }, {});\n\n var rrr = _.map(rr, function (value, key) {\n return {d: key, s: value}\n });\n\n var shortened = angular.toJson(rrr);\n\n if (tenantSettingSvc.settings.rfidAttendanceEUSupport) {\n $window.open(\n '/Admin/Report/MPSVAttendanceByStudent' +\n '?StartDate=' + fromDate.toJSON() +\n '&EndDate=' + toDate.toJSON() +\n '&projectName=' + encodeURI(projectName) +\n '&projectRegistrationNumber=' + encodeURI(projectRegistrationNumber) +\n '&recipientName=' + encodeURI(recipientName) +\n '&students=' + encodeURI(shortened),\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n } else {\n $window.open(\n '/Admin/Report/AttendanceByStudent' +\n '?StartDate=' + fromDate.toJSON() +\n '&EndDate=' + toDate.toJSON() +\n '&name=' + encodeURI(projectName) +\n '&providerName=' + encodeURI(recipientName) +\n '&students=' + encodeURI(shortened),\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n }\n\n mpsvStudentDialogPromise.show();\n });\n }\n\n $scope.downloadBtnClick = function () {\n driverDownloadDetailPromise.$promise.then(function () {\n driverDownloadDetailPromise.show();\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'rfid-cards/attendance-log/attendance-log-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var mpsvDialogPromise = $modal({\n templateUrl: 'rfid-cards/attendance-log/attendance-log-mpsv-attendance-report.html',\n show: false,\n scope: $scope.$new()\n });\n\n var mpsvStudentDialogPromise = $modal({\n templateUrl: 'rfid-cards/attendance-log/attendance-log-mpsv-student-attendance-report.html',\n show: false,\n scope: $scope.$new()\n });\n\n var deleteConfirmationPromise = $modal({\n templateUrl: 'rfid-cards/attendance-log/attendance-log-delete-confirmation.html',\n show: false,\n scope: $scope.$new()\n });\n\n var efsReportImportDetailPromise = $modal({\n templateUrl: 'rfid-cards/attendance-log/efs-report-import-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var attendanceLogSupportDetailPromise = $modal({\n templateUrl: 'rfid-cards/attendance-log/attendance-log-support-detaill.html',\n show: false,\n scope: $scope.$new()\n });\n\n var driverDownloadDetailPromise = $modal({\n templateUrl: 'rfid-cards/attendance-log/driver-download-detaill.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('AttendanceLogDetailCtrl', ['$scope', 'rfidCardsSvc', 'securitySvc',\nfunction ($scope, rfidCardsSvc, securitySvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.inUpdateRole = securitySvc.isInRole('RfidCardLog.Update');\n $scope.inInsertRole = securitySvc.isInRole('RfidCardLog.Insert');\n $scope.isDisabled = $scope.model.isDeleted ||\n (!!$scope.modelOrig.rfidCardLogID && !$scope.inUpdateRole) ||\n (!$scope.modelOrig.rfidCardLogID && !$scope.inInsertRole);\n\n $scope.isSaving = false;\n\n $scope.onUserTypeChange = function (model) {\r\n model.userID = null;\r\n }\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\r\n return;\r\n }\n\n $scope.isSaving = true;\n\n if (!model.rfidCardLogID) {\n rfidCardsSvc.insert(model, $scope.collection, success, error);\n } else {\n rfidCardsSvc.update(model, $scope.collection, success, error);\n }\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n $scope.onSave();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n}]);\n","wbApp.controller('AttendanceLogMpsvReportParamsCtrl', ['$scope', '$q', 'rfidCardsSvc', '$translate', 'groupSvc',\nfunction ($scope, $q, rfidCardsSvc, $translate, groupSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.studentIsSelected = false;\n $scope.employeeIsSelected = false;\n\n $scope.detailIsUnchanged = function (data) {\n return !$scope.studentIsSelected || !$scope.employeeIsSelected || !!$scope.isLoadingData;\n };\n\n function loadData(fromDate, toDate) {\n\n if (!fromDate || !toDate) {\n return;\n }\n\n $scope.isLoadingData = true;\n $scope.studentIsSelected = false;\n $scope.employeeIsSelected = false;\n $scope.students = rfidCardsSvc.getRegisteredStudentsForPeriodAsync(fromDate, toDate);\n $scope.employees = rfidCardsSvc.getRegisteredEmployeesForPeriodAsync(fromDate, toDate);\n\n $q.all([$scope.students.$promise, $scope.employees.$promise]).then(function () {\n $scope.isLoadingData = false;\n });\n }\n\n function updateDetailError(shouldMessageBePresent, msg) {\n if (shouldMessageBePresent) {\n // remove msg\n if (!!$scope.detailError &&\n !!$scope.detailError.errors &&\n $scope.detailError.errors.length > 0) {\n var idx = _.findIndex($scope.detailError.errors, { message: msg });\n if (idx !== -1) {\n $scope.detailError.errors.splice(idx, 1);\n }\n if ($scope.detailError.errors.length === 0) {\n $scope.detailError = null;\n }\n }\n } else {\n // add msg\n if (!$scope.detailError) {\n $scope.detailError = { errors: [{ message: msg }] };\n } else {\n if (!$scope.detailError.errors) {\n $scope.detailError.errors = [{ message: msg }];\n } else {\n if (!_.find($scope.detailError.errors, { message: msg })) {\n $scope.detailError.errors.push({ message: msg });\n }\n }\n }\n }\n }\n\n $scope.detailError = {\n errors: [\n { message: $translate.instant('TXT_MSG_SELECT_STUDENTS_TO_INCLUDE_IN_REPORT') },\n { message: $translate.instant('TXT_MSG_SELECT_EMPLOYEES_TO_INCLUDE_IN_REPORT') }\n ]\n }\n\n $scope.studentsGridSelectionChanged = function () {\n\n $scope.studentIsSelected = !!_.find($scope.students, { isSelected: true });\n var msg = $translate.instant('TXT_MSG_SELECT_STUDENTS_TO_INCLUDE_IN_REPORT');\n\n updateDetailError($scope.studentIsSelected, msg);\n };\n\n $scope.employeesGridSelectionChanged = function () {\n $scope.employeeIsSelected = !!_.find($scope.employees, { isSelected: true });\n var msg = $translate.instant('TXT_MSG_SELECT_EMPLOYEES_TO_INCLUDE_IN_REPORT');\n\n updateDetailError($scope.employeeIsSelected, msg);\n }\n\n loadData($scope.fromDate, $scope.toDate);\n\n $scope.detailTabs = [\n {\n title: 'TXT_LBL_STUDENTS',\n template: \"rfid-cards/attendance-log/attendance-log-mpsv-attendance-report-students-tab.html\"\n },\n {\n title: \"TXT_LBL_EMPLOYEES\",\n template: \"rfid-cards/attendance-log/attendance-log-mpsv-attendance-report-employees-tab.html\"\n }];\n\n $scope.rangeChanged = function (fromDate, toDate) {\n loadData(fromDate, toDate);\n }\n\n $scope.groups = groupSvc.getAllAsync();\n\n $scope.studentsGridFilterOptions = {\n groups: [],\n filterText: \"\",\n filterFunction: function (value, index) {\n if (!$scope.studentsGridFilterOptions.groups.length) {\n return true;\n }\n\n return _.intersection(value.groups, $scope.studentsGridFilterOptions.groups).length > 0;\n }\n };\n\n $scope.employeesGridFilterOptions = {\n filterText: \"\"\n };\n\n $scope.studentsGridOptions = {\n sortInfo: { fields: ['fullName'], directions: ['asc'] },\n columnDefs: [\n { field: 'deviceSerialNumber', displayName: \"TXT_LBL_DEVICE_SERIAL_NUMBER\", width: '90px' },\n { field: 'fullName', displayName: \"TXT_HUMAN_NAME\", sort: 'humanName' },\n { field: 'parentFullName', displayName: \"TXT_LBL_PARENT\"},\n { field: 'email', displayName: \"TXT_LBL_EMAIL\", width: '180px' },\n { field: 'phone', displayName: \"TXT_LBL_PHONE\", cellFilter: \"phone\", width: '130px' },\n { field: 'groups', displayName: \"TXT_LBL_GROUPS\", hidden: true },\n ],\n noCommandColumn: true,\n multiSelect: true,\n disableExport: true\n };\n\n $scope.employeesGridOptions = {\n sortInfo: { fields: ['fullName'], directions: ['asc'] },\n columnDefs: [\n { field: 'deviceSerialNumber', displayName: \"TXT_LBL_DEVICE_SERIAL_NUMBER\", width: '90px' },\n { field: 'fullName', displayName: \"TXT_HUMAN_NAME\", sort: 'humanName' },\n { field: 'groups', displayName: \"TXT_LBL_GROUPS\", hidden: true }],\n noCommandColumn: true,\n multiSelect: true,\n disableExport: true\n };\n\n $scope.isSavingXls = false;\n $scope.isSavingXlsx = false;\n\n $scope.onDetailSave = function (model, compatibility) {\n\n if (compatibility) {\n $scope.isSavingXls = true;\n } else {\n $scope.isSavingXlsx = true;\n }\n\n function success(data) {\n $scope.isSavingXls = false;\n $scope.isSavingXlsx = false;\n $scope.$hide();\n $scope.reportGenerated(data);\n }\n\n function error(data) {\n $scope.isSavingXls = false;\n $scope.isSavingXlsx = false;\n $scope.detailError = data;\n }\n\n var students = _.map(_.filter($scope.students, { isSelected: true }),\n function (s) { return { studentID: s.studentID, deviceSerialNumber: s.deviceSerialNumber }; });\n var employees = _.map(_.filter($scope.employees, { isSelected: true }),\n function (e) { return { employeeID: e.employeeID, deviceSerialNumber: e.deviceSerialNumber }; });\n\n var group = (!!$scope.studentsGridFilterOptions.groups && $scope.studentsGridFilterOptions.groups.length === 1)\n ? $scope.studentsGridFilterOptions.groups[0]\n : null;\n\n var res = null;\n \n if ($scope.isNursery) {\n res = rfidCardsSvc.getMPSVNurseryAttendanceReportAsync(\n students,\n employees,\n $scope.fromDate,\n $scope.toDate,\n compatibility,\n group);\n\n } else {\n res = rfidCardsSvc.getMPSVAttendanceReportAsync(\n students,\n employees,\n $scope.fromDate,\n $scope.toDate,\n compatibility,\n group);\n }\n\n res.$promise.then(success, error);\n }\n}]);\n","wbApp.controller('AttendanceLogMpsvStudentReportParamsCtrl', ['$scope', 'rfidCardsSvc', '$translate', 'localStorageService', 'groupSvc',\n function ($scope, rfidCardsSvc, $translate, localStorageService, groupSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.repParams = {};\n\n function loadDefaultData() {\n if (localStorageService.isSupported) {\n $scope.repParams.projectName = localStorageService.get('mpsv_projectName');\n $scope.repParams.projectRegistrationNumber = localStorageService.get('mpsv_projectRegistrationNumber');\n $scope.repParams.recipientName = localStorageService.get('mpsv_recipientName');\n }\n }\n\n function saveDefaultData() {\n if (localStorageService.isSupported) {\n localStorageService.set('mpsv_projectName', $scope.repParams.projectName);\n localStorageService.set('mpsv_projectRegistrationNumber', $scope.repParams.projectRegistrationNumber);\n localStorageService.set('mpsv_recipientName', $scope.repParams.recipientName);\n }\n }\n\n loadDefaultData();\n\n $scope.studentIsSelected = false; \n\n $scope.detailIsUnchanged = function (data) {\n return !$scope.studentIsSelected || !!$scope.isLoadingData;\n };\n\n function loadData(fromDate, toDate) {\n\n if (!fromDate || !toDate) {\r\n return;\r\n }\n\n $scope.isLoadingData = true;\n $scope.studentIsSelected = false;\n $scope.students = rfidCardsSvc.getRegisteredStudentsForPeriodAsync(fromDate, toDate);\n\n $scope.students.$promise.then(function () {\n $scope.isLoadingData = false;\n });\n }\n\n function updateDetailError(shouldMessageBePresent, msg) {\n if (shouldMessageBePresent) {\n // remove msg\n if (!!$scope.detailError &&\n !!$scope.detailError.errors &&\n $scope.detailError.errors.length > 0) {\n var idx = _.findIndex($scope.detailError.errors, { message: msg });\n if (idx !== -1) {\n $scope.detailError.errors.splice(idx, 1);\n }\n if ($scope.detailError.errors.length === 0) {\n $scope.detailError = null;\n }\n }\n } else {\n // add msg\n if (!$scope.detailError) {\n $scope.detailError = { errors: [{ message: msg }] };\n } else {\n if (!$scope.detailError.errors) {\n $scope.detailError.errors = [{ message: msg }];\n } else {\n if (!_.find($scope.detailError.errors, { message: msg })) {\n $scope.detailError.errors.push({ message: msg });\n }\n }\n }\n }\n }\n\n $scope.detailError = {\n errors: [\n { message: $translate.instant('TXT_MSG_SELECT_STUDENTS_TO_INCLUDE_IN_REPORT') }\n ]\n }\n\n $scope.studentsGridSelectionChanged = function () {\n\n $scope.studentIsSelected = !!_.find($scope.students, { isSelected: true });\n var msg = $translate.instant('TXT_MSG_SELECT_STUDENTS_TO_INCLUDE_IN_REPORT');\n\n updateDetailError($scope.studentIsSelected, msg);\n };\n\n loadData($scope.fromDate, $scope.toDate);\n\n $scope.detailTabs = [{\n title: \"TXT_MAIN\",\n template: \"rfid-cards/attendance-log/attendance-log-mpsv-student-attendance-report-main-tab.html\"\n },{\n title: 'TXT_LBL_STUDENTS',\n template: \"rfid-cards/attendance-log/attendance-log-mpsv-student-attendance-report-students-tab.html\"\n }];\n\n $scope.rangeChanged = function (fromDate, toDate) {\n loadData(fromDate, toDate);\n }\n\n $scope.groups = groupSvc.getAllAsync();\n\n $scope.studentsGridFilterOptions = {\n groups: [],\n filterText: \"\",\n filterFunction: function (value, index) {\n if (!$scope.studentsGridFilterOptions.groups.length) {\n return true;\n }\n\n return _.intersection(value.groups, $scope.studentsGridFilterOptions.groups).length > 0;\n }\n };\n\n $scope.$watch('studentsGridFilterOptions.groups', function (newValue, oldValue) {\n if (!!newValue && newValue.length === 1) {\r\n $scope.groups.$promise.then(function (g) {\r\n var group = _.find(g, { 'groupID': newValue[0] });\r\n if (group) {\r\n if (group.projectName) {\r\n $scope.repParams.projectName = group.projectName;\r\n }\r\n if (group.projectRegistrationNumber) {\r\n $scope.repParams.projectRegistrationNumber = group.projectRegistrationNumber;\r\n }\r\n if (group.projectBeneficiary) {\r\n $scope.repParams.recipientName = group.projectBeneficiary;\r\n }\r\n }\r\n });\r\n }\r\n });\n\n $scope.studentsGridOptions = {\n sortInfo: { fields: ['fullName'], directions: ['asc'] },\n columnDefs: [\n { field: 'deviceSerialNumber', displayName: \"TXT_LBL_DEVICE_SERIAL_NUMBER\", width: '90px' },\n { field: 'fullName', displayName: \"TXT_HUMAN_NAME\", sort: 'humanName' },\n { field: 'parentFullName', displayName: \"TXT_LBL_PARENT\"},\n { field: 'email', displayName: \"TXT_LBL_EMAIL\", width: '180px' },\n { field: 'phone', displayName: \"TXT_LBL_PHONE\", cellFilter: \"phone\", width: '130px' },\n { field: 'groups', displayName: \"TXT_LBL_GROUPS\", hidden: true },\n ],\n noCommandColumn: true,\n multiSelect: true,\r\n disableExport: true\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n var students = _.map(_.filter($scope.students, { isSelected: true }), \n function (s) { return { studentID: s.studentID, deviceSerialNumber: s.deviceSerialNumber }; });\n\n saveDefaultData();\n\n $scope.$hide();\n\n $scope.reportGenerated(\n $scope.fromDate,\n $scope.toDate,\n students,\n $scope.repParams.projectName,\n $scope.repParams.projectRegistrationNumber,\n $scope.repParams.recipientName);\n }\n}]);\n","wbApp.controller('AttendanceLogSupportDetailCtrl', ['$scope', '$http', '$translate', 'localStorageService', 'rfidCardsSvc',\nfunction ($scope, $http, $translate,localStorageService, rfidCardsSvc) {\n\n $scope.title = '';\n $scope.isSaving = false;\n\n $scope.operationResultText = null;\n\n $scope.model = {\n fromDate: new Date(),\n toDate: new Date(),\n userIdType: 0,\n oldUserId: null,\n newUserId: null,\n userId: null,\n timeShiftInMinutes: 0,\n deviceSerialNumber: null\n };\n\n if (localStorageService.isSupported) {\n $scope.model.deviceSerialNumber = localStorageService.get('lastRfidCardDeviceSerialNumber');\n }\n\n $scope.$watch('model', function (model) { \n if (localStorageService.isSupported) {\n localStorageService.set('lastRfidCardDeviceSerialNumber', model.deviceSerialNumber);\n }\n }, true);\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onUserTypeChange = function (model) {\n model.oldUserId = null;\n model.newUserId = null;\n model.userId = null;\n }\n\n switch ($scope.operationMode)\n {\n case 'delete-all-in-range':\n $scope.title = $translate.instant('TXT_TITLE_DELETE_ALL_IN_RANGE');\n break;\n case 'delete-user-in-range':\n $scope.title = $translate.instant('TXT_TITLE_DELETE_USER_IN_RANGE');\n break;\n case 'replace-user-in-range':\n $scope.title = $translate.instant('TXT_TITLE_REPLACE_USER_IN_RANGE');\n break;\n case 'shift-time-in-range':\n $scope.title = $translate.instant('TXT_TITLE_SHIFT_TIME_IN_RANGE');\n break;\n }\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n $scope.operationResultText = null;\n\n var dto = {\n fromDateUtc: moment(model.fromDate).utc().format(),\n toDateUtc: moment(model.toDate).utc().format()\n }\n\n switch ($scope.operationMode) {\n case 'delete-all-in-range':\n dto.events = [];\n dto.uploadContacts = [];\n rfidCardsSvc.supportReplaceRange(dto).$promise.then(success, error);\n break;\n case 'delete-user-in-range':\n dto.userId = model.userId;\n dto.userIdType = model.userIdType;\n rfidCardsSvc.supportDeleteUserInRange(dto).$promise.then(successWithTextDecode, error);\n break;\n case 'replace-user-in-range':\n dto.oldUserId = model.oldUserId;\n dto.newUserId = model.newUserId;\n dto.userIdType = model.userIdType;\n rfidCardsSvc.supportReplaceUserInRange(dto).$promise.then(successWithTextDecode, error);\n break;\n case 'shift-time-in-range':\n {\n var duration = moment.duration(model.timeShiftInMinutes, 'minutes');\n if (model.timeShiftInMinutes < 0) {\n dto.timeShift = '-' + Math.abs(duration.days()) + '.' + (\"0\" + Math.abs(duration.hours())).slice(-2) + ':' + (\"0\" + Math.abs(duration.minutes())).slice(-2) + ':' + (\"0\" + Math.abs(duration.seconds())).slice(-2);\n } else {\n dto.timeShift = duration.days() + '.' + (\"0\" + duration.hours()).slice(-2) + ':' + (\"0\" + duration.minutes()).slice(-2) + ':' + (\"0\" + duration.seconds()).slice(-2);\n }\n dto.deviceSerialNumber = model.deviceSerialNumber;\n rfidCardsSvc.supportShiftOriginEventInRange(dto).$promise.then(success, error);\n }\n break;\n }\n\n //if (!model.rfidCardLogID) {\n // rfidCardsSvc.insert(model, $scope.collection, success, error);\n //} else {\n // rfidCardsSvc.update(model, $scope.collection, success, error);\n //}\n\n function successWithTextDecode(result) {\n if (result.length == 0) {\n $scope.isSaving = false;\n $scope.$hide();\n if (!!$scope.onSave) {\n $scope.onSave();\n }\n } else {\n error(result);\n }\n }\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n if (!!$scope.onSave) {\n $scope.onSave();\n }\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.operationResultText = data;\n }\n }\n}]);\n","wbApp.controller('DeviceRegistrationCtrl', ['$scope', '$modal', '$translate', '$timeout', 'messageBoxSvc', 'rfidDeviceRegistrationSvc',\nfunction ($scope, $modal, $translate, $timeout, messageBoxSvc, rfidDeviceRegistrationSvc) {\n\n $scope.gridSettings = {\n name: 'deviceRegistrations',\n keyExpr: 'id',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n { dataField: 'deviceSerialNumber', caption: $translate.instant('TXT_LBL_DEVICE_SERIAL_NUMBER'), dataType: 'string' },\n { dataField: 'isAllowed', caption: $translate.instant('TXT_LBL_ALLOWED'), dataType: 'boolean', width: '70px' },\n { dataField: 'createdAt', caption: $translate.instant('TXT_LBL_CREATED_AT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px' },\n { dataField: 'updatedAt', caption: $translate.instant('TXT_LBL_UPDATED_AT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px', sortOrder: 'desc' },\n { dataField: 'updatedByFullName', caption: $translate.instant('TXT_LBL_UPDATED_BY'), dataType: 'string', width: '180px' },\n ]\n }\n\n $scope.$on('refreshData', function (e, data) {\n refreshData();\n });\n\n function refreshData() {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n $scope.deviceRegistrations = rfidDeviceRegistrationSvc.getAllAsync();\n\n $scope.deviceRegistrations.$promise.then(function () {\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false);\n }, 100);\n }\n });\n }\n\n refreshData();\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onSave = function () {\n refreshData();\n };\n detailDialogPromise.show();\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'rfid-cards/device-registration/device-registration-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('DeviceRegistrationDetailCtrl', ['$scope', 'rfidDeviceRegistrationSvc',\nfunction ($scope, rfidDeviceRegistrationSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n rfidDeviceRegistrationSvc.update(model).$promise.then(success, error);\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n if ($scope.onSave) {\n $scope.onSave();\n }\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n}]);\n","wbApp.controller('DriverDownloadDetailCtrl', ['$scope', \nfunction ($scope) {\n\n}]);\n","wbApp.controller('EfsReportImportDetailCtrl', ['$scope', 'localStorageService',\nfunction ($scope, localStorageService) {\n\n $scope.uploadUrl = \"restapi/rfid-card-logs/support/import-efs-report?deviceSerialNumber='ABC123'&dryRun=true\";\n $scope.uploadSuccess = false;\n $scope.uploadFullSuccess = false;\n $scope.uploadError = false;\n\n var uploadComponent = null;\n\n $scope.model = {\n deviceSerialNumber: '',\n dryRun: true\n }\n\n if (localStorageService.isSupported) {\n $scope.model.deviceSerialNumber = localStorageService.get('lastRfidCardDeviceSerialNumber');\n }\n\n $scope.$watch('model', function (model) {\n $scope.uploadUrl = \"restapi/rfid-card-logs/support/import-efs-report?deviceSerialNumber=\" + encodeURI(model.deviceSerialNumber) + \"&dryRun=\" + model.dryRun;\n if (localStorageService.isSupported) {\n localStorageService.set('lastRfidCardDeviceSerialNumber', model.deviceSerialNumber);\n }\n uploadComponent.reset();\n $scope.uploadResultText = null;\n $scope.uploadSuccess = false;\n $scope.uploadFullSuccess = false;\n $scope.uploadError = false;\n }, true);\n\n $scope.fileUploaderOptions = {\n accept: \"application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n uploadMode: \"instantly\",\n maxFileSize: 1024 * 1024 * 20, // 20 MB\n onContentReady: function (e) {\n uploadComponent = e.component;\n },\n onUploadError: function (e) {\n $scope.uploadResultText = JSON.parse(e.request.responseText);\n $scope.uploadSuccess = false;\n $scope.uploadFullSuccess = false;\n $scope.uploadError = true;\n uploadComponent.reset();\n },\n onUploadStarted: function (e) {\n $scope.uploadResultText = null;\n $scope.uploadSuccess = false;\n $scope.uploadFullSuccess = false;\n $scope.uploadError = false;\n },\n onUploaded: function (e) {\n $scope.uploadResultText = JSON.parse(e.request.responseText);\n $scope.uploadSuccess = true;\n $scope.uploadFullSuccess = !$scope.model.dryRun;\n $scope.uploadError = false;\n },\n bindingOptions: {\n uploadUrl: \"uploadUrl\",\n disabled: \"form.$invalid\"\n }\n };\n\n}]);\n","wbApp.controller('LogUploadContactCtrl', ['$scope', '$modal', 'rfidCardsSvc',\nfunction ($scope, $modal, rfidCardsSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.fromDate = moment().startOf('month').toDate();\n $scope.toDate = moment().endOf('month').toDate();\n\n\n $scope.gridOptions = {\n sortInfo: { fields: ['createdAt'], directions: ['dsc'] },\n columnDefs: [{ field: 'deviceSerialNumber', displayName: \"TXT_LBL_DEVICE_SERIAL_NUMBER\" },\n { field: 'noOfLogEntriesUploaded', displayName: \"TXT_LBL_NO_OF_LOG_ENTRIES_UPLOADED\", align: 'right', width: '150px' },\n { field: 'noOfNewLogEntries', displayName: \"TXT_LBL_NO_OF_NEW_LOG_ENTRIES\", sort: 'locale', align: 'right', width: '150px' },\n { field: 'createdAt', displayName: \"TXT_LBL_UPLOADED_AT\", cellFilter: \"date:'EEE (dd.MM.yy) HH:mm:ss'\", width: '160px' },\n ],\n noCommandColumn: true\n };\n\n $scope.$on('refreshData', function (e, data) {\n refreshData($scope.fromDate, $scope.toDate);\n });\n\n function refreshData(fromDate, toDate) {\n $scope.uploadContacts = rfidCardsSvc.getAllUploadContacts(fromDate, toDate);\n }\n\n refreshData($scope.fromDate, $scope.toDate);\n\n $scope.onFromDateChange = function (fromDate) {\n if (fromDate) {\n refreshData(fromDate, $scope.toDate);\n }\n }\n\n $scope.onToDateChange = function (toDate) {\n if (toDate) {\n refreshData($scope.fromDate, toDate);\n }\n }\n}]);\n","wbApp.directive('rfidCardUserTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(paymentType) {\n if (!paymentType) { return; }\n return $translate.instant(paymentType.text);\n }\n\n function formatSelection(paymentType) {\n return $translate.instant(paymentType.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_LBL_STUDENT' },\n { id: 1, text: 'TXT_LBL_EMPLOYEE' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.filter('rfidCardUserType', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 0:\n return $translate.instant('TXT_LBL_STUDENT');\n case 1:\n return $translate.instant('TXT_LBL_EMPLOYEE');\n default:\n return '';\n }\n };\n}]);","'use strict';\n\nwbApp.factory('rfidCardsSvc', ['$resource', '$q', 'repositorySvc', 'securitySvc', 'localStorageService',\n function ($resource, $q, repositorySvc, securitySvc, localStorageService) {\n var RfidCards = $resource('/Api/RfidCard/:id', {}, {\n 'getAllLogs': { method: 'GET', isArray: true, url: '/Api/RfidCard/GetAllLogs' },\n 'getAllUploadContacts': { method: 'GET', isArray: true, url: '/Api/RfidCard/GetAllUploadContacts' },\n 'insert': { method: 'POST', url: '/Api/RfidCard/Insert' },\n 'update': { method: 'POST', url: '/Api/RfidCard/Update' },\n 'delete': { method: 'POST', url: '/Api/RfidCard/Delete' },\n 'getRegisteredStudentsForPeriod': { method: 'GET', isArray: true, url: '/Api/RfidCard/GetRegisteredStudentsForPeriod' },\n 'getRegisteredEmployeesForPeriod': { method: 'GET', isArray: true, url: '/Api/RfidCard/GetRegisteredEmployeesForPeriod' },\n 'getMPSVAttendanceReport': { method: 'POST', url: '/Api/RfidCard/GetMPSVAttendanceReport' },\n 'getMPSVNurseryAttendanceReport': { method: 'POST', url: '/Api/RfidCard/GetMPSVNurseryAttendanceReport' },\n 'supportReplaceRange': { method: 'POST', url: '/restapi/rfid-card-logs/support/replace-range' },\n 'supportDeleteUserInRange': { method: 'POST', isArray: true, url: '/restapi/rfid-card-logs/support/delete-user-in-range' },\n 'supportReplaceUserInRange': { method: 'POST', isArray: true, url: '/restapi/rfid-card-logs/support/replace-user-in-range' },\n 'supportShiftOriginEventInRange': { method: 'POST', url: '/restapi/rfid-card-logs/support/shift-origin-event-in-range' },\n });\n\n function getAllLogsAsync(fromDate, toDate) {\n var res = [];\n res.$promise = $q(function (resolve, reject) {\n repositorySvc.customGet('getAllLogs', RfidCards, {\n fromDate: fromDate,\n toDate: toDate\n }).$promise.then(function (dto) {\n if (securitySvc.isInRole('RfidCardLog.Update')) {\n res.push.apply(res, dto);\n resolve(dto);\n } else {\n var filtered = _.filter(dto, function(row) {\n return !row.isDeleted || (row.isDeleted && !String.prototype.isNullOrWhitespace(row.description));\n });\n res.push.apply(res, filtered);\n resolve(filtered);\n }\n }, function (rejectReason) {\n reject(rejectReason);\n });\n });\n\n return res;\n }\n\n function getAllUploadContacts(fromDate, toDate) {\n return repositorySvc.customGet('getAllUploadContacts', RfidCards, {\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function createNew() {\n var model = {\n rfidCardLogID: 0,\n rfidCardLogUploadContactID: null,\n rfidCardLogOverrideID: null,\n deviceSerialNumber: null,\n userID: null,\n userIDType: 0,\n eventType: 39,\n subEvent: 47,\n eventTime: moment().toDate(),\n operatorFullName: null,\n operatorAddress: null,\n operatorEmail: null,\n operatorPhone: null,\n studentFullName: null,\n uploadedAt: null,\n isDeleted: false\n };\n\n if (localStorageService.isSupported) {\n model.userID = localStorageService.get('lastRfidCardUserID');\n model.userIDType = localStorageService.get('lastRfidCardUserIDType') || 0;\n model.deviceSerialNumber = localStorageService.get('lastRfidCardDeviceSerialNumber');\n }\n\n return model;\n }\n\n function insert(data, collection, successCallback, errorCallback) {\n\n if (!data.rfidCardLogOverrideID) {\n data.rfidCardLogOverrideID = 0;\n }\n\n // Save for later\n if (localStorageService.isSupported) {\n localStorageService.set('lastRfidCardUserID', data.userID);\n localStorageService.set('lastRfidCardUserIDType', data.userIDType);\n localStorageService.set('lastRfidCardDeviceSerialNumber', data.deviceSerialNumber);\n }\n\n repositorySvc.insert(\n RfidCards, // $resource\n collection, // collection\n data, // entity\n successCallback,\n errorCallback,\n 'rfidCardLogID');\n }\n\n function update(data, collection, successCallback, errorCallback) {\n\n if (!data.rfidCardLogOverrideID) {\n data.rfidCardLogOverrideID = 0;\n }\n\n repositorySvc.update(\n RfidCards, // $resource\n collection, // collection\n data, // entity\n successCallback,\n errorCallback,\n 'rfidCardLogID');\n }\n\n function remove(data, collection, successCallback, errorCallback) {\n\n var id = data.rfidCardLogID;\n\n function success(result) {\n\n if (!!result.rfidCardLogID) {\n // Update soft deleted record in the collection\n repositorySvc.entityUpdated(collection, result, 'rfidCardLogID');\n } else {\n // This is a real delete \n repositorySvc.entityRemoved(collection, id, 'rfidCardLogID');\n }\n\n if (successCallback) {\n successCallback(result);\n }\n }\n\n repositorySvc.remove(\n RfidCards, // $resource\n null, // collection\n data, // entity\n success, // successCallback\n errorCallback,\n {\r\n id: data.rfidCardLogID,\r\n description: data.description\r\n },\n 'rfidCardLogID');\n }\n\n function reset(data, collection, successCallback, errorCallback) {\n\n var isRemove = !data.rfidCardLogUploadContactID;\n data.rfidCardLogOverrideID = null;\n\n var id = data.rfidCardLogID;\n\n function success(result) {\n if (isRemove) {\n // This is a real delete \n repositorySvc.entityRemoved(collection, id, 'rfidCardLogID');\n } else {\n repositorySvc.entityUpdated(collection, result, 'rfidCardLogID');\n }\n\n if (successCallback) {\n successCallback(result);\n }\n }\n\n repositorySvc.update(\n RfidCards, // $resource\n null, // collection\n data, // entity\n success,\n errorCallback,\n 'rfidCardLogID');\n }\n\n function getRegisteredStudentsForPeriodAsync(fromDate, toDate) {\n return repositorySvc.customGet('getRegisteredStudentsForPeriod', RfidCards, {\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function getRegisteredEmployeesForPeriodAsync(fromDate, toDate) {\n return repositorySvc.customGet('getRegisteredEmployeesForPeriod', RfidCards, {\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function getMPSVAttendanceReportAsync(students, employees, fromDate, toDate, compatibility, group) {\n return repositorySvc.customPost('getMPSVAttendanceReport', RfidCards, {\r\n students: students,\r\n employees: employees,\r\n fromDate: fromDate,\r\n toDate: toDate,\r\n compatibility: compatibility,\r\n group: group\r\n });\n }\n\n function supportReplaceRange(model) {\r\n return repositorySvc.customPost('supportReplaceRange', RfidCards, model);\r\n }\n\n function supportDeleteUserInRange(model) {\r\n return repositorySvc.customPost('supportDeleteUserInRange', RfidCards, model);\r\n }\n\n function supportReplaceUserInRange(model) {\r\n return repositorySvc.customPost('supportReplaceUserInRange', RfidCards, model);\r\n }\n\n function supportShiftOriginEventInRange(model) {\r\n return repositorySvc.customPost('supportShiftOriginEventInRange', RfidCards, model);\r\n }\n\n\n function getMPSVNurseryAttendanceReportAsync(students, employees, fromDate, toDate, compatibility, group) {\r\n return repositorySvc.customPost('getMPSVNurseryAttendanceReport', RfidCards, {\r\n students: students,\r\n employees: employees,\r\n fromDate: fromDate,\r\n toDate: toDate,\r\n compatibility: compatibility,\r\n group: group\r\n });\r\n }\n\n return {\n getAllLogsAsync: getAllLogsAsync,\n getAllUploadContacts: getAllUploadContacts,\n insert: insert,\n update: update,\n remove: remove,\n reset: reset,\n createNew: createNew,\n getRegisteredStudentsForPeriodAsync: getRegisteredStudentsForPeriodAsync,\n getRegisteredEmployeesForPeriodAsync: getRegisteredEmployeesForPeriodAsync,\n getMPSVAttendanceReportAsync: getMPSVAttendanceReportAsync,\n getMPSVNurseryAttendanceReportAsync: getMPSVNurseryAttendanceReportAsync,\n supportReplaceRange: supportReplaceRange,\n supportDeleteUserInRange: supportDeleteUserInRange,\n supportReplaceUserInRange: supportReplaceUserInRange,\n supportShiftOriginEventInRange: supportShiftOriginEventInRange\n }\n }]);","wbApp.factory('rfidDeviceRegistrationSvc', ['$resource', '$q', 'repositorySvc',\n function ($resource, $q, repositorySvc) {\n var RfidDevices = $resource('restapi/rfid-devices/:id', {}, {\n 'getAll': { method: 'GET', isArray: true, url: '/restapi/rfid-devices' },\n 'update': { method: 'PUT', url: 'restapi/rfid-devices/:id' },\n });\n\n function getAllAsync() {\n return repositorySvc.customGet('getAll', RfidDevices);\n }\n\n function update(model) {\n return repositorySvc.customPutWithParams(\n 'update',\n RfidDevices,\n { id: model.id },\n model);\n }\n\n return {\n getAllAsync: getAllAsync,\n update: update\n }\n }]);","wbApp.controller('ScheduleCourseDetailCtrl', ['$scope', '$translate', '$filter', 'courseScheduleSvc', 'courseSvc', 'messageBoxSvc',\n 'tenantInfo', 'attendanceSvc', 'courseRegistrationSvc',\nfunction ($scope, $translate, $filter, courseScheduleSvc, courseSvc, messageBoxSvc, tenantInfo, attendanceSvc, courseRegistrationSvc) {\r\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.attendanceChanged = false;\n\n function loadData() {\n // $scope.editRecurrence\n if ($scope.model.courseScheduleID && !$scope.editRecurrence) {\r\n $scope.lessonAttendance = attendanceSvc.getLessonAttendance($scope.model.courseScheduleID);\r\n } else {\n $scope.lessonAttendance = courseRegistrationSvc.getRegisteredAttendanceForCourse($scope.model.courseID);\r\n }\n }\n\n loadData();\n\n $scope.detailIsUnchanged = function (data) {\r\n return angular.equals(data, $scope.modelOrig) && !!$scope.model.courseScheduleID;\r\n };\n\n $scope.onStartDateChanged = function (startDate) {\r\n if (!!$scope.editRecurrence) {\r\n courseScheduleSvc.updateEventByStartDate($scope.model, startDate);\r\n }\r\n }\n\n var selectedCourse = null;\n\n $scope.onCourseChange = function (courseID) {\r\n var cID = courseID;\r\n\r\n if (typeof courseID === 'string' || courseID instanceof String) {\r\n cID = parseInt(courseID);\r\n }\r\n\r\n if (!!cID) {\r\n courseSvc.getCourseAsync($scope.model.semesterID, cID).then(function (course) {\r\n $scope.model.employeeID = course.employeeID;\r\n selectedCourse = course;\r\n $scope.model.capacity = course.capacity;\r\n\r\n $scope.lessonAttendance = courseRegistrationSvc.getRegisteredAttendanceForCourse(selectedCourse.courseID);\r\n }, function (reason) {\r\n alert(reason);\r\n });\r\n }\r\n }\n\n $scope.onDetailSave = function (data) {\r\n\n if ($scope.isSaving) {\r\n return;\r\n }\n\n $scope.isSaving = true;\n\n\n function success() {\r\n $scope.$hide();\r\n if ($scope.onSave) {\r\n $scope.onSave();\r\n }\r\n }\n\n function error(data) {\r\n $scope.detailError = data;\n $scope.isSaving = false;\r\n }\n\n if (!data.courseScheduleID) {\r\n courseScheduleSvc.insert(data, success, error);\r\n } else {\r\n if (!$scope.editRecurrence) {\r\n messageBoxSvc.showConfirmClientNotification({\r\n userSetting: ['ConfirmNotificationSchedule', 'ConfirmNotificationSmsSchedule'],\n showSendSmsNotification: true,\n callback: function (notificationConfig) {\r\n courseScheduleSvc.update(data, notificationConfig, success, error);\r\n }\r\n });\r\n } else {\r\n // We are changing the series, so do not ask for notifications, there are no emails send anyways\r\n var notificationConfig = {\r\n sendEmailNotification: false,\n sendSmsNotification: false\r\n };\r\n courseScheduleSvc.update(data, notificationConfig, success, error);\r\n }\r\n }\r\n }\n\n $scope.onDetailCancel = function () {\r\n if ($scope.attendanceChanged && $scope.onSave) {\r\n $scope.onSave();\r\n }\r\n $scope.$hide();\r\n }\n\n $scope.$watch('model', function (model) {\r\n var diff = moment.duration(moment(model.endDate).diff(moment(model.startDate)));\n\n var fdays = diff.days() ? diff.days() + 'd ' : '';\n var fhours = diff.hours() ? diff.hours() + 'h ' : '';\n var fminutes = diff.minutes() ? diff.minutes() + 'm ' : '';\n var fmonths = diff.months() ? diff.months() + 'm ' : '';\n var fyears = diff.years() ? diff.years() + 'r ' : '';\n\n $scope.lessonLength = fyears + fmonths + fdays + fhours + fminutes;\r\n }, true);\n\n $scope.detailTabs = [\n {\r\n title: 'TXT_MAIN',\n template: \"schedule/schedule/schedule-course-detail-main-tab.html\"\r\n }];\n\n if (!!$scope.editRecurrence) {\n $scope.detailTabs.push({\r\n title: 'TXT_LBL_RECURRENCE',\n template: \"schedule/schedule/schedule-course-detail-recurrence-tab.html\"\r\n });\r\n }\n\n $scope.detailTabs.push({\r\n title: 'TXT_LBL_STUDENTS',\n template: 'schedule/schedule/schedule-course-detail-students-tab.html'\r\n });\n\n if ($scope.model.courseScheduleID && !$scope.editRecurrence) {\r\n $scope.detailTabs.push({\r\n title: 'TXT_LBL_WAIT_QUEUE',\r\n template: 'schedule/schedule/schedule-course-detail-wait-queue-tab.html'\r\n });\r\n }\n\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.$watch('detailTabs.activeTab', function (newValue, oldValue) {\r\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\r\n });\n\n $scope.studentsGridSettings = {\r\n name: 'students',\n columns: [\n { dataField: 'fullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string' },\n {\r\n dataField: 'attendanceStatus',\n caption: $translate.instant('TXT_COL_ATTENDANCE_STATUS'),\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('attendanceStatus')(rowData.attendanceStatus);\r\n },\r\n width: '100px'\r\n },\n {\r\n dataField: 'attendanceType',\n caption: $translate.instant('TXT_COL_ATTENDANCE_TYPE'),\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('attendanceType')(rowData.attendanceType);\r\n },\r\n width: '100px'\r\n },\n { dataField: 'attendanceCount', caption: $translate.instant('TXT_LBL_COUNT'), dataType: 'number', width: '50px' },\n {\r\n dataField: 'updatedAt',\r\n caption: $translate.instant('TXT_LBL_UPDATED_AT'),\r\n dataType: 'date',\r\n format: 'shortDateShortTime',\r\n width: '130px',\r\n visible: !$scope.editRecurrence\r\n },\n { dataField: 'updatedBy', caption: $translate.instant('TXT_LBL_UPDATED_BY'), dataType: 'string', width: '80px', visible: !$scope.editRecurrence },\n ],\r\n shouldDisableDelete: function (row) {\r\n return row.attendanceType === 0;\r\n }\r\n }\n\n $scope.onRowDelete = function (data) {\n attendanceSvc.remove(data, null, function () {\r\n $scope.attendanceChanged = true;\r\n loadData();\r\n });\r\n \r\n }\n\n\n $scope.waitQeueuGridSettings = {\r\n name: 'waitQueue',\n columns: [\n { dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string' },\n { dataField: 'email', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '190px' },\n {\r\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\r\n return $filter('phone')(rowData.phone);\r\n },\n width: '130px'\r\n },\n { dataField: 'createdAt', caption: $translate.instant('TXT_LBL_CREATED_AT'), dataType: 'date', format: 'shortDateShortTime', width: '130px', sortOrder: 'asc' },\n ]\r\n }\n\n}]);\n","wbApp.controller('ScheduleCtrl', ['$scope', '$modal', '$filter', '$translate', '$q',\r\n 'classroomSvc', 'semesterSvc', 'tenantSettingSvc', 'securitySvc',\r\n 'messageBoxSvc', 'courseScheduleSvc', 'employeeSvc',\r\nfunction ($scope, $modal, $filter, $translate, $q,\r\n classroomSvc, semesterSvc, tenantSettingSvc, securitySvc,\r\n messageBoxSvc, courseScheduleSvc, employeeSvc) {\r\n\r\n var lastStartDate = moment().startOf('isoWeek').toDate();\r\n var lastEndDate = moment(lastStartDate).add(7, 'day').startOf('day').toDate();\r\n \r\n var employees = [] \r\n employeeSvc.getAllAsync().$promise.then(function(e) {\r\n employees = e;\r\n });\r\n\r\n semesterSvc.getDefaultAsync()\r\n .then(function (semester) {\r\n $scope.semesterID = semester.id;\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n });\r\n\r\n $scope.$on('refreshData', function (e, data) {\r\n if ($scope.semesterID) {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n }\r\n });\r\n\r\n $scope.onSemesterChange = function (semesterID) {\r\n if (semesterID) { \r\n $scope.semesterID = semesterID;\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n }\r\n };\r\n\r\n $scope.onDateChanged = function (startDate, endDate) {\r\n if (Date.prototype.isValidDate(startDate) && Date.prototype.isValidDate(endDate)) {\r\n loadSemesterSchedule($scope.semesterID, startDate, endDate);\r\n }\r\n }\r\n\r\n function loadSemesterSchedule(semesterID, startDate, endDate) {\r\n if (!Date.prototype.isValidDate(startDate) || !Date.prototype.isValidDate(endDate)) {\r\n return;\r\n }\r\n\r\n lastStartDate = startDate;\r\n lastEndDate = endDate;\r\n\r\n $scope.isBusy = true;\r\n\r\n courseScheduleSvc.getAllForSemesterAllAsync(\r\n semesterID,\r\n null, // compensationGroupID\r\n null, // userID\r\n startDate,\r\n endDate)\r\n .$promise.then(function (data) {\r\n schedules.length = 0;\r\n schedules.push.apply(schedules, data);\r\n $scope.isBusy = false;\r\n }, function () {\r\n $scope.isBusy = false;\r\n });\r\n }\r\n\r\n var resources = classroomSvc.getAllActiveAsync( /* classroomIDtoInclude */ null, /* filterForReservations */ false, /* filterForCourses */ true);\r\n var schedules = [];\r\n\r\n function newLesson(startDate, endDate) {\r\n courseDetailDialogPromise.$promise.then(function () {\r\n courseDetailDialogPromise.$scope.editRecurrence = false;\r\n courseDetailDialogPromise.$scope.model = courseScheduleSvc.createNewCourse(\r\n startDate,\r\n endDate,\r\n $scope.schedulerSettings.selectedResourceID,\r\n $scope.semesterID);\r\n courseDetailDialogPromise.$scope.onSave = function () {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n };\r\n courseDetailDialogPromise.show();\r\n });\r\n }\r\n\r\n function newRecurrence(startDate, endDate) {\r\n courseDetailDialogPromise.$promise.then(function () {\r\n courseDetailDialogPromise.$scope.editRecurrence = true;\r\n courseDetailDialogPromise.$scope.model = courseScheduleSvc.createNewCourse(\r\n startDate,\r\n endDate,\r\n $scope.schedulerSettings.selectedResourceID,\r\n $scope.semesterID,\r\n true);\r\n courseDetailDialogPromise.$scope.onSave = function () {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n };\r\n courseDetailDialogPromise.show();\r\n });\r\n }\r\n\r\n function newEvent(startDate, endDate) {\r\n eventDetailDialogPromise.$promise.then(function () {\r\n eventDetailDialogPromise.$scope.model = courseScheduleSvc.createNewEvent(\r\n startDate,\r\n endDate,\r\n $scope.schedulerSettings.selectedResourceID,\r\n $scope.semesterID);\r\n eventDetailDialogPromise.$scope.hideActionChange = false;\r\n eventDetailDialogPromise.$scope.onSave = function () {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n };\r\n eventDetailDialogPromise.show();\r\n });\r\n }\r\n\r\n function changeEvent(event) {\r\n var current = courseScheduleSvc.getSingle(event.origAction.courseScheduleID);\r\n\r\n $q.all([current.$promise, courseDetailDialogPromise.$promise]).then(\r\n function () {\r\n eventDetailDialogPromise.$scope.model = angular.copy(current);\r\n eventDetailDialogPromise.$scope.hideActionChange = false;\r\n eventDetailDialogPromise.$scope.onSave = function () {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n };\r\n eventDetailDialogPromise.show();\r\n });\r\n }\r\n\r\n function changeLesson(lesson) {\r\n var current = courseScheduleSvc.getSingle(lesson.origAction.courseScheduleID);\r\n\r\n $q.all([current.$promise, courseDetailDialogPromise.$promise]).then(\r\n function () {\r\n courseDetailDialogPromise.$scope.editRecurrence = false;\r\n courseDetailDialogPromise.$scope.model = angular.copy(current);\r\n courseDetailDialogPromise.$scope.onSave = function () {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n };\r\n courseDetailDialogPromise.show();\r\n });\r\n }\r\n\r\n function changeRecurrence(lesson) {\r\n var pattern = courseScheduleSvc.getPattern(\r\n lesson.origAction.courseID, lesson.origAction.courseScheduleID);\r\n\r\n $q.all([pattern.$promise, courseDetailDialogPromise.$promise]).then(\r\n function () {\r\n courseDetailDialogPromise.$scope.editRecurrence = true;\r\n courseDetailDialogPromise.$scope.model = angular.copy(pattern);\r\n courseDetailDialogPromise.$scope.onSave = function () {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n };\r\n courseDetailDialogPromise.show();\r\n });\r\n }\r\n\r\n function deleteSingleLessonNoRecurrence(event) {\r\n courseScheduleSvc.remove(\r\n event.origAction,\r\n {\r\n sendEmailNotification: true,\r\n sendSmsNotification: false\r\n },\r\n function () {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n }\r\n );\r\n }\r\n\r\n function deleteSingleLessonRecurrence(event) {\r\n courseScheduleSvc.remove(\r\n event.origAction,\r\n {\r\n sendEmailNotification: true,\r\n sendSmsNotification: false\r\n },\r\n function () {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n }\r\n );\r\n }\r\n\r\n function deleteRecurrence(event) {\r\n \r\n var pattern = courseScheduleSvc.getPattern(\r\n event.origAction.courseID, event.origAction.courseScheduleID)\r\n .$promise.then(function (pattern) {\r\n courseScheduleSvc.remove(\r\n pattern,\r\n {\r\n sendEmailNotification: true,\r\n sendSmsNotification: false\r\n },\r\n function () {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n }\r\n );\r\n });\r\n }\r\n\r\n function deleteEvent(event) {\r\n if (event.recurrenceType === 0) {\r\n messageBoxSvc.showMessageDlg({\r\n title: 'TXT_TITLE_CONFIRM_DELETE',\r\n message: 'TXT_TEXT_CONFIRM_DELETE',\r\n buttons: [{\r\n text: 'TXT_BTN_NO'\r\n }, {\r\n text: 'TXT_BTN_YES',\r\n callback: function () {\r\n deleteSingleLessonNoRecurrence(event);\r\n }\r\n }]\r\n });\r\n } else {\r\n // Recurrence\r\n messageBoxSvc.showMessageDlg({\r\n title: 'TXT_TITLE_CONFIRM_DELETE_RECURRENCE',\r\n message: $translate.instant('TXT_TEXT_CONFIRM_DELETE_RECURRENCE').f(event.name),\r\n buttons: [{\r\n text: 'TXT_BTN_CANCEL'\r\n }, {\r\n text: 'TXT_BTN_SERIES',\r\n callback: function () {\r\n deleteRecurrence(event);\r\n }\r\n }, {\r\n text: 'TXT_BTN_THIS_LESSON',\r\n callback: function () {\r\n deleteSingleLessonRecurrence(event);\r\n }\r\n }]\r\n });\r\n }\r\n }\r\n\r\n $scope.schedulerSettings = {\r\n weekView: true,\r\n autoHourRange: false,\r\n noHeader: true,\r\n width: '100%',\r\n visibleResources: 1,\r\n showRecurrence: true,\r\n // selectedResourceID: 1,\r\n startHour: tenantSettingSvc.settings.scheduleVisibleTimeStart,\r\n endHour: tenantSettingSvc.settings.scheduleVisibleTimeEnd,\r\n scale: tenantSettingSvc.settings.scheduleTimeScale,\r\n startDate: lastStartDate,\r\n resources: resources,\r\n resourcesMapping: { resourceID: 'id' },\r\n actions: schedules,\r\n actionsMapping: {\r\n resourceID: 'classroomID',\r\n name: 'subject',\r\n teacher: 'teacherName',\r\n filled: 'filledCapacity'\r\n },\r\n commands: [{\r\n text: 'TXT_LBL_NEW_LESSON',\r\n isVisible: function (event, startDate, endDate) { \r\n return !event && securitySvc.isInRole('CourseSchedule.Insert');\r\n },\r\n callback: function (event, startDate, endDate) {\r\n newLesson(startDate, endDate);\r\n }\r\n }, {\r\n text: 'TXT_LBL_NEW_RECURRENCE',\r\n isVisible: function (event, startDate, endDate) { \r\n return !event && securitySvc.isInRole('CourseSchedule.Insert');\r\n },\r\n callback: function (event, startDate, endDate) {\r\n newRecurrence(startDate, endDate);\r\n }\r\n }, {\r\n text: 'TXT_LBL_NEW_EVENT',\r\n isVisible: function (event, startDate, endDate) {\r\n return !event && securitySvc.isInRole('CourseSchedule.Insert');\r\n },\r\n callback: function (event, startDate, endDate) {\r\n newEvent(startDate, endDate);\r\n }\r\n }, {\r\n text: 'TXT_MENU_EDIT',\r\n isVisible: function (event, startDate, endDate) {\r\n if (!event) {\r\n return false;\r\n }\r\n \r\n if (securitySvc.isInRole('CourseSchedule.Update')) {\r\n return true;\r\n }\r\n\r\n if (securitySvc.isInRole('CourseSchedule.UpdateOwn')) {\r\n let employee = _.find(employees, {employeeID: event.origAction.employeeID});\r\n return employee != null && employee.userID === securitySvc.loggedInUser().userID;\r\n }\r\n \r\n return false;\r\n },\r\n callback: function (event, startDate, endDate) {\r\n if (event.type === 1) {\r\n changeLesson(event);\r\n } else {\r\n changeEvent(event);\r\n }\r\n }\r\n }, {\r\n text: 'TXT_LBL_CHANGE_RECURRENCE',\r\n isVisible: function (event, startDate, endDate) {\r\n return !!event && event.recurrenceType !== 0 && securitySvc.isInRole('CourseSchedule.Update');\r\n },\r\n callback: function (event, startDate, endDate) {\r\n changeRecurrence(event);\r\n }\r\n }, {\r\n text: 'TXT_MENU_DELETE',\r\n isVisible: function (event, startDate, endDate) {\r\n if (!event) {\r\n return false;\r\n }\r\n \r\n if (securitySvc.isInRole('CourseSchedule.Delete')) {\r\n return true;\r\n }\r\n if (securitySvc.isInRole('CourseSchedule.DeleteOwn')) {\r\n let employee = _.find(employees, {employeeID: event.origAction.employeeID});\r\n return employee != null && employee.userID === securitySvc.loggedInUser().userID;\r\n }\r\n \r\n return false;\r\n },\r\n callback: function (event, startDate, endDate) {\r\n deleteEvent(event);\r\n }\r\n }]\r\n }\r\n\r\n var eventDetailDialogPromise = $modal({\r\n templateUrl: 'schedule/schedule-event-detail.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n\r\n var courseDetailDialogPromise = $modal({\r\n templateUrl: 'schedule/schedule-course-detail.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n\r\n}]);\r\n","wbApp.controller('ScheduleEventDetailCtrl', ['$scope', '$translate', '$filter', 'courseScheduleSvc', 'courseSvc', 'messageBoxSvc',\n 'tenantInfo', 'attendanceSvc', 'courseRegistrationSvc',\nfunction ($scope, $translate, $filter, courseScheduleSvc, courseSvc, messageBoxSvc, tenantInfo, attendanceSvc, courseRegistrationSvc) {\r\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\r\n return angular.equals(data, $scope.modelOrig) && !!$scope.model.courseScheduleID;\r\n };\n\n function loadData() {\n if ($scope.model.courseScheduleID) {\r\n $scope.lessonAttendance = attendanceSvc.getLessonAttendance($scope.model.courseScheduleID);\r\n } else {\n // TODO\n $scope.lessonAttendance = courseRegistrationSvc.getRegisteredAttendanceForCourse($scope.model.courseID);\r\n }\n }\n\n loadData();\n\n var selectedCourse = null;\n\n $scope.onCourseChange = function (courseID) {\r\n var cID = courseID;\r\n\r\n if (typeof courseID === 'string' || courseID instanceof String) {\r\n cID = parseInt(courseID);\r\n }\r\n\r\n if (!!cID) {\r\n courseSvc.getActionAsync($scope.model.semesterID, cID).then(function (course) {\r\n $scope.model.employeeID = course.employeeID;\r\n $scope.model.capacity = course.capacity;\r\n selectedCourse = course;\r\n\r\n $scope.lessonAttendance = courseRegistrationSvc.getRegisteredAttendanceForCourse(selectedCourse.courseID);\r\n }, function (reason) {\r\n alert(reason);\r\n });\r\n }\r\n }\n\n $scope.onDetailSave = function (data) {\r\n\n if ($scope.isSaving) {\r\n return;\r\n }\n\n $scope.isSaving = true;\n\n\n function success() {\r\n $scope.$hide();\r\n if ($scope.onSave) {\r\n $scope.onSave();\r\n }\r\n }\n\n function error(data) {\r\n $scope.detailError = data;\n $scope.isSaving = false;\r\n }\n\n if (!data.courseScheduleID) {\r\n courseScheduleSvc.insert(data, success, error);\r\n } else {\r\n messageBoxSvc.showConfirmClientNotification({\r\n userSetting: ['ConfirmNotificationSchedule', 'ConfirmNotificationSmsSchedule'],\n showSendSmsNotification: true,\n callback: function (notificationConfig) {\r\n courseScheduleSvc.update(data, notificationConfig, success, error);\r\n }\r\n });\r\n }\r\n }\n\n $scope.$watch('model', function (model) {\r\n var diff = moment.duration(moment(model.endDate).diff(moment(model.startDate)));\n\n var fdays = diff.days() ? diff.days() + 'd ' : '';\n var fhours = diff.hours() ? diff.hours() + 'h ' : '';\n var fminutes = diff.minutes() ? diff.minutes() + 'm ' : '';\n var fmonths = diff.months() ? diff.months() + 'm ' : '';\n var fyears = diff.years() ? diff.years() + 'r ' : '';\n\n $scope.lessonLength = fyears + fmonths + fdays + fhours + fminutes;\r\n }, true);\n\n $scope.studentsGridSettings = {\r\n name: 'students',\n columns: [\n { dataField: 'fullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string' },\n {\r\n dataField: 'attendanceStatus',\n caption: $translate.instant('TXT_COL_ATTENDANCE_STATUS'),\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('attendanceStatus')(rowData.attendanceStatus);\r\n },\r\n width: '120px'\r\n },\n {\r\n dataField: 'attendanceType',\n caption: $translate.instant('TXT_COL_ATTENDANCE_TYPE'),\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('attendanceType')(rowData.attendanceType);\r\n },\r\n width: '120px'\r\n },\n { dataField: 'attendanceCount', caption: $translate.instant('TXT_LBL_COUNT'), dataType: 'number', width: '50px' },\n ]\r\n }\n\n $scope.detailTabs = [\n {\r\n title: 'TXT_MAIN',\n template: \"schedule/schedule/schedule-event-detail-main-tab.html\"\r\n }, {\r\n title: 'TXT_LBL_STUDENTS',\n template: \"schedule/schedule/schedule-event-detail-students-tab.html\"\r\n }];\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.$watch('detailTabs.activeTab', function (newValue, oldValue) {\r\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\r\n });\n\n}]);\n","'use strict';\r\n\r\nwbApp.controller('AgeRangesCtrl', ['$scope', '$modal', '$translate', 'ageRangeSvc',\r\nfunction ($scope, $modal, $translate, ageRangeSvc) {\r\n\r\n $scope.ageRanges = ageRangeSvc.getAllAsync(true);\r\n\r\n $scope.gridSettings = {\r\n columns: [\r\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', sortOrder: 'asc' },\r\n { dataField: 'fromAge', caption: $translate.instant('TXT_LBL_FROM'), dataType: 'number', width: '70px' },\r\n { dataField: 'toAge', caption: $translate.instant('TXT_LBL_TO'), dataType: 'number', width: '70px' },\r\n { dataField: 'buildIn', caption: $translate.instant('TXT_LBL_SYSTEM'), dataType: 'boolean', width: '70px' },\r\n ],\r\n onRowPrepared: function (e) {\r\n if (e.rowType == \"data\") {\r\n var data = e.component.getKeyByRowIndex(e.rowIndex);\r\n if (data.buildIn) {\r\n e.rowElement.addClass('text-muted');\r\n }\r\n }\r\n }\r\n }\r\n\r\n $scope.$on('refreshData', function (e, data) {\r\n $scope.ageRanges = ageRangeSvc.getAllAsync(true);\r\n });\r\n\r\n $scope.onRowEdit = function (data) {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.model = angular.copy(data);\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowAdd = function () {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.model = ageRangeSvc.createNew();\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowDelete = function (data) {\r\n ageRangeSvc.remove(data);\r\n }\r\n\r\n \r\n var detailDialogPromise = $modal({\r\n templateUrl: 'setting/age-ranges/age-ranges-detail.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n}]);\r\n","wbApp.controller('AgeRangesDetailCtrl', ['$scope', 'ageRangeSvc',\nfunction ($scope, ageRangeSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n if (!model.ageRangeID) {\n ageRangeSvc.insert(model, success, error);\n } else {\n ageRangeSvc.update(model, success, error);\n }\n\n function success(model) {\n $scope.isSaving = false;\n $scope.$hide();\n if (!!$scope.onDataSaved) {\n $scope.onDataSaved(model);\n }\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n}]);\n","wbApp.controller('ClassroomAvailabilitySchedulesCtrl', ['$scope', '$modal', 'classroomAvailabilitySchedulesSvc', 'messageBoxSvc',\nfunction ($scope, $modal, classroomAvailabilitySchedulesSvc, messageBoxSvc) {\n\n var isActive = false; \n var loaded = false;\n var selectedWeek = moment().startOf('isoWeek');\n var selectedClassroom = null;\n\n $scope.model = [];\n var modelOrig = [];\n\n $scope.isBusy = false;\n $scope.isSaving = false;\n\n function reloadDataWithModificationAsk(saveClassroom, newClassroom, startOfWeek) {\n if (!$scope.detailIsUnchanged()) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_LBL_QUESTION',\n message: 'TXT_MODEL_MODFIFIED_SHOULD_SAVE',\n buttons: [{\n text: 'TXT_BTN_NO',\n callback: function () {\n loadData(newClassroom, startOfWeek);\n }\n }, {\n text: 'TXT_BTN_SAVE',\n callback: function () {\n saveModel($scope.model, saveClassroom, function () {\n loadData(newClassroom, startOfWeek);\n });\n }\n }]\n });\n }\n else {\n loadData(newClassroom, startOfWeek);\n }\n }\n\n function loadData(classroom, date) {\n if (classroom && date) {\n $scope.isBusy = true;\n classroomAvailabilitySchedulesSvc.loadWeek(classroom.id, date).then(\n function (data) {\n $scope.isBusy = false;\n selectedClassroom = classroom;\n selectedWeek = moment(date).startOf('isoWeek');\n $scope.model.length = 0;\n $scope.model.push.apply($scope.model, data);\n modelOrig = angular.copy($scope.model);\n\n loaded = true;\n }, function (error) {\n $scope.isBusy = false;\n selectedClassroom = null;\n selectedWeek = moment(date).startOf('isoWeek');\n $scope.model.length = 0;\n\n modelOrig = [];\n loaded = false;\n });\n }\n }\n\n $scope.$on('classroomSelectionChanged', function (e, newlySelectedClassroom) {\n if (newlySelectedClassroom) {\n if (isActive) {\n if (selectedClassroom != newlySelectedClassroom) {\n reloadDataWithModificationAsk(selectedClassroom, newlySelectedClassroom, selectedWeek)\n }\n }\n }\n else {\n $scope.model.length = 0;\n }\n\n selectedClassroom = newlySelectedClassroom;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 1) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedClassroom) {\n loadData(selectedClassroom, selectedWeek);\n }\n }\n } else {\n isActive = false;\n }\n });\n\n function saveModel(model, classroom, callback) {\n if (!$scope.detailIsUnchanged() && !$scope.isBusy && !$scope.isSaving && !!selectedClassroom) {\n\n $scope.isSaving = true;\n\n classroomAvailabilitySchedulesSvc.saveWeek(classroom.id, selectedWeek, model).then(\n function (data) {\n\n modelOrig = angular.copy($scope.model);\n $scope.isSaving = false;\n if (!!callback) {\n callback();\n }\n },\n function (error) {\n $scope.isSaving = false;\n if (!!callback) {\n callback();\n }\n }\n );\n }\n }\n\n $scope.calendarSettings = {\n onValueChanged: function (value) {\n var newStartOfWeek = moment(value.value).startOf('isoWeek');\n\n if (!newStartOfWeek.isSame(selectedWeek)) {\n reloadDataWithModificationAsk(selectedClassroom, selectedClassroom, newStartOfWeek);\n }\n }\n }\n\n $scope.detailIsUnchanged = function () {\n return angular.equals($scope.model, modelOrig);\n };\n\n $scope.onModelSave = function (model) {\n saveModel(model, selectedClassroom);\n }\n\n $scope.onModelCancel = function () {\n loadData(selectedClassroom, selectedWeek);\n }\n\n $scope.isSaveRangeEnabled = function () {\n return !$scope.isBusy && !$scope.isSaving && !!selectedClassroom && !!selectedWeek;\n }\n\n $scope.onModelRangeSave = function (model) {\n\n $scope.isSaving = true;\n dateRangeSelectionDlg.$promise.then(function () {\n dateRangeSelectionDlg.$scope.model = {\n from: moment().startOf('week').toDate(),\n to: moment().endOf('week').startOf('day').toDate(),\n };\n dateRangeSelectionDlg.$scope.onCanceled = function () {\n $scope.isSaving = false;\n },\n dateRangeSelectionDlg.$scope.onSaved = function (rangeModel) {\n classroomAvailabilitySchedulesSvc.saveWeekAsPaternForPeriod(\n selectedClassroom.id,\n rangeModel.from,\n rangeModel.to,\n model).then(\n function (data) {\n modelOrig = angular.copy($scope.model);\n $scope.isSaving = false;\n },\n function (error) {\n $scope.isSaving = false;\n }\n );\n },\n dateRangeSelectionDlg.show();\n });\n\n }\n\n var dateRangeSelectionDlg = $modal({\n templateUrl: 'users/dialogs/select-week-date-range.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('ClassroomsCtrl', ['$scope', '$modal', '$translate', 'classroomSvc', 'tenantSettingSvc',\nfunction ($scope, $modal, $translate, classroomSvc, tenantSettingSvc) {\n\n function setSelectedClassroom(data) {\n $scope.selectedClassroom = data;\n $scope.$broadcast('classroomSelectionChanged', $scope.selectedClassroom);\n }\n\n $scope.$on('refreshData', function (e, data) {\n $scope.classrooms = classroomSvc.getAllNonDeletedAsync(true);\n setSelectedEmployee(null);\n });\n\n $scope.classrooms = classroomSvc.getAllNonDeletedAsync(true);\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"setting/classrooms/detail-tabs/detail.html\"\n }\n ];\n\n $scope.enableReservationSupport = tenantSettingSvc.settings.enableReservationSupport;\n $scope.enableRentSupport = tenantSettingSvc.settings.enableRentSupport;\n\n if ($scope.enableReservationSupport || $scope.enableRentSupport) {\n $scope.tabs.push({\n title: 'TXT_AVAILABILITY_SCHEDULE',\n template: 'setting/classrooms/detail-tabs/availability-schedule.html'\n })\n }\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n\n $scope.gridSettings = {\n name: 'classrooms',\n columns: [\n { dataField: 'active', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '250px', sortOrder: 'asc' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string' },\n { dataField: 'showInCourses', caption: $translate.instant('TXT_LBL_COURSES'), dataType: 'boolean', width: '60px' },\n { dataField: 'showInReservations', caption: $translate.instant('TXT_LBL_RESERVATIONS'), dataType: 'boolean', width: '60px', visible: $scope.enableReservationSupport },\n { dataField: 'showInRents', caption: $translate.instant('TXT_MENU_RENTS'), dataType: 'boolean', width: '60px', visible: $scope.enableRentSupport },\n {\n dataField: 'addressID', caption: $translate.instant('TXT_LBL_ADDRESS'), dataType: 'boolean', width: '60px',\n calculateCellValue: function (rowData) {\n return !!rowData.addressID;\n },\n }\n ]\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = classroomSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n classroomSvc.remove(data);\n }\n\n $scope.onRowSelected = function (data) {\n setSelectedClassroom(data);\n }\n\n \n var detailDialogPromise = $modal({\n templateUrl: 'setting/classrooms/classrooms-detail.html',\n show: false,\n scope: $scope.$new()\n });\n \n\n}]);\n","wbApp.controller('ClassroomsDetailCtrl', ['$scope', 'classroomSvc', 'geoCoderSvc', 'tenantSettingSvc', '$translate', '$filter',\nfunction ($scope, classroomSvc, geoCoderSvc, tenantSettingSvc, $translate, $filter) {\n //var $hideImpl = $scope.$hide;\n\n //$scope.$hide = function () {\n // $hideImpl();\n // $scope.$destroy();\n // console.log('scope destroyed');\n //}\n\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"setting/classrooms/classrooms-detail-main-tab.html\",\n type: 'main'\n },\n {\n title: \"TXT_LBL_ADDRESS\",\n template: \"setting/classrooms/classrooms-detail-address-tab.html\",\n type: 'address'\n }\n ];\n\n if (tenantSettingSvc.settings.enableReservationSupport) {\n $scope.detailTabs.push({\n title: \"TXT_SPECIALIZATIONS\",\n template: \"setting/classrooms/classrooms-detail-domains-tab.html\",\n type: 'domains'\n });\n $scope.detailTabs.push({\n title: \"TXT_RESERVATIONS_SETTINGS\",\n template: \"setting/classrooms/classrooms-detail-reservations-settings-tab.html\",\n type: 'reservations-settings'\n }); \n }\n\n $scope.detailTabs.activeTab = 0;\n\n var domainsInitialized = false;\n\n $scope.classroomDomains = null;\n\n var treeListInstance = null;\n $scope.domainsOptions = {\n bindingOptions: {\n dataSource: 'classroomDomains',\n },\n height: 400,\n keyExpr: 'id',\n selection: {\n mode: 'multiple',\n recursive: false\n },\n editing: {\n allowUpdating: function(options) {\n if (!!options.row) {\n return options.row.isSelected;\n } \n return false;\n },\n mode: \"cell\"\n },\n showRowLines: true,\n allowColumnResizing: true,\n autoExpandAll: true,\n columns: [{\n caption: $translate.instant('TXT_LBL_NAME'),\n dataField: 'name',\n dataType: 'string',\n width: '220px',\n sortOrder: 'asc',\n allowEditing: false\n }, {\n caption: $translate.instant('TXT_LBL_DESCRIPTION'),\n dataField: 'description',\n dataType: 'string',\n allowEditing: false\n }, {\n caption: $translate.instant('TXT_RESERVATION_TEACHER_HOUR_SINGLE_RATE'),\n dataField: 'reservationTeacherHourSingleRateOverride',\n dataType: 'number', \n format: { type: 'currency', precision: 2 },\n allowEditing: true,\n width: '100px',\n calculateCellValue: function(e) {\n if (_.isNil(e.reservationTeacherHourSingleRateOverride)) {\n return e.reservationTeacherHourSingleRate;\n }\n\n return e.reservationTeacherHourSingleRateOverride;\n }\n }, {\n caption: $translate.instant('TXT_RESERVATION_TEACHER_HOUR_GROUP_ONE_RATE'),\n dataField: 'reservationTeacherHourGroupOneRateOverride',\n dataType: 'number',\n format: {type: 'currency', precision: 2},\n allowEditing: true,\n width: '100px',\n calculateCellValue: function (e) {\n if (_.isNil(e.reservationTeacherHourGroupOneRateOverride)) {\n return e.reservationTeacherHourGroupOneRate;\n }\n\n return e.reservationTeacherHourGroupOneRateOverride;\n }\n }, {\n caption: $translate.instant('TXT_RESERVATION_TEACHER_HOUR_GROUP_TWO_RATE'),\n dataField: 'reservationTeacherHourGroupTwoRateOverride',\n dataType: 'number',\n format: {type: 'currency', precision: 2},\n allowEditing: true,\n width: '100px',\n calculateCellValue: function (e) {\n if (_.isNil(e.reservationTeacherHourGroupTwoRateOverride)) {\n return e.reservationTeacherHourGroupTwoRate;\n }\n\n return e.reservationTeacherHourGroupTwoRateOverride;\n }\n }],\n onContentReady: function (e) {\n treeListInstance = e.component;\n if (!!origDomainsSelected) {\n treeListInstance.selectRows(origDomainsSelected, false);\n }\n },\n onCellPrepared: function(e) {\n if (e.columnIndex === 2) {\n e.cellElement.mousemove(function () {\n e.cellElement.attr('title', \n $translate.instant('TXT_RESERVATION_TEACHER_HOUR_SINGLE_RATE_DESC') + \n \"\\n\" + \n $translate.instant('TXT_PRICE_FROM_SETTINGS') +\n \" \" +\n $filter('wbCurrencyFlt')(tenantSettingSvc.settings.reservationTeacherHourSingleRate)\n );\n });\n }\n if (e.columnIndex === 3) {\n e.cellElement.mousemove(function () {\n e.cellElement.attr('title', \n $translate.instant('TXT_RESERVATION_TEACHER_HOUR_GROUP_ONE_RATE_DESC') +\n \"\\n\" +\n $translate.instant('TXT_PRICE_FROM_SETTINGS') +\n \" \" +\n $filter('wbCurrencyFlt')(tenantSettingSvc.settings.reservationTeacherHourGroupOneRate));\n });\n }\n if (e.columnIndex === 4) {\n e.cellElement.mousemove(function () {\n e.cellElement.attr('title', $translate.instant('TXT_RESERVATION_TEACHER_HOUR_GROUP_TWO_RATE_DESC') +\n \"\\n\" +\n $translate.instant('TXT_PRICE_FROM_SETTINGS') +\n \" \" +\n $filter('wbCurrencyFlt')(tenantSettingSvc.settings.reservationTeacherHourGroupTwoRate));\n });\n }\n \n if (e.rowType === \"data\" && e.columnIndex === 2) {\n if (_.isNil(e.data.reservationTeacherHourSingleRateOverride) && (!_.isNil(e.data.reservationTeacherHourSingleRate))) {\n e.cellElement.addClass('text-muted');\n }\n }\n if (e.rowType === \"data\" && e.columnIndex === 3) {\n if (_.isNil(e.data.reservationTeacherHourGroupOneRateOverride) && !_.isNil(e.data.reservationTeacherHourGroupOneRate)) {\n e.cellElement.addClass('text-muted');\n }\n }\n if (e.rowType === \"data\" && e.columnIndex === 4) {\n if (_.isNil(e.data.reservationTeacherHourGroupTwoRateOverride) && !_.isNil(e.data.reservationTeacherHourGroupTwoRate)) {\n e.cellElement.addClass('text-muted');\n }\n } \n },\n onSelectionChanged: function (e) {\n if (e.currentSelectedRowKeys.length === 1) {\n let obj = _.find(e.selectedRowsData, { id: e.currentSelectedRowKeys[0] });\n if (obj && obj.parentId) {\n treeListInstance.selectRows(obj.parentId, true);\n }\n } else if (e.currentDeselectedRowKeys.length === 1) {\n let obj = _.find(e.selectedRowsData, { parentId: e.currentDeselectedRowKeys[0] });\n if (obj) {\n treeListInstance.selectRows(e.currentDeselectedRowKeys[0], true);\n }\n }\n }\n };\n\n var origDomainsSelected = [];\n var originDomains = [];\n\n function loadDomainsData() {\n\n classroomSvc.loadDomainsData($scope.model.id).then(function (data) {\n $scope.classroomDomains = data.domains;\n originDomains = _.cloneDeep(data.domains);\n origDomainsSelected = data.selection;\n if (!!treeListInstance) {\n treeListInstance.selectRows(origDomainsSelected, false);\n }\n domainsInitialized = true;\n });\n }\n\n $scope.$watch('detailTabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue });\n\n if (newValue >= 0 && newValue < $scope.detailTabs.length) {\n var selectedTab = $scope.detailTabs[newValue];\n\n if (selectedTab.type == 'domains' && !domainsInitialized) {\n loadDomainsData();\n }\n }\n });\n\n function domainsAreUnchanged() {\n return !domainsInitialized || \n !treeListInstance ||\n (_.isEqual(origDomainsSelected.sort(), treeListInstance.getSelectedRowKeys().sort()) &&\n _.isEqual(originDomains, $scope.classroomDomains));\n \n }\n\n function detailIsUnchanged(data) {\n return angular.equals(data, $scope.modelOrig);\n }\n\n $scope.detailIsUnchanged = function (data) {\n return detailIsUnchanged(data) && domainsAreUnchanged();\n };\n\n $scope.isSaving = false;\n\n $scope.onClassroomDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n if (!detailIsUnchanged($scope.model)) {\n\n \n if (!model.id) {\n classroomSvc.insert(model, function (data) {\n if (!domainsAreUnchanged()) {\n classroomSvc.saveDomainsData(\n data.id,\n $scope.classroomDomains,\n origDomainsSelected,\n treeListInstance.getSelectedRowKeys(),\n success,\n error);\n } else {\n success();\n }\n }, error, $scope.collection);\n } else {\n classroomSvc.update(model, function () {\n if (!domainsAreUnchanged()) {\n classroomSvc.saveDomainsData(\n $scope.model.id,\n $scope.classroomDomains,\n origDomainsSelected,\n treeListInstance.getSelectedRowKeys(),\n success,\n error);\n } else {\n success();\n }\n }, error, $scope.collection);\n }\n } else if (!domainsAreUnchanged()) {\n classroomSvc.saveDomainsData(\n $scope.model.id,\n $scope.classroomDomains,\n origDomainsSelected,\n treeListInstance.getSelectedRowKeys(),\n success,\n error);\n } else {\n success();\n }\n\n\n }\n\n $scope.getAddress = function (val) {\n var res = geoCoderSvc.geocode(val);\n return res;\n }\n\n\n}]);\n","wbApp.controller('CompensationGroupsCtrl', ['$scope', '$modal', 'compensationGroupSvc',\nfunction ($scope, $modal, compensationGroupSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.compensationGroups = compensationGroupSvc.getAllAsync();\n\n $scope.gridOptions = {\n sortInfo: { fields: ['name'], directions: ['dsc'] },\n columnDefs: [{ field: 'active', displayName: \"TXT_LBL_ACTIVE\", cellFilter: 'checkmark', width: '70px' },\n { field: 'name', displayName: \"TXT_LBL_NAME\", sort: 'locale', width: '250px' },\n { field: 'description', displayName: \"TXT_LBL_DESCRIPTION\", sort: 'locale' },\n { field: 'isDefault', displayName: \"TXT_LBL_DEFAULT\", cellFilter: 'checkmark', width: '70px' },\n ]\n };\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = compensationGroupSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n compensationGroupSvc.remove(data);\n }\n \n var detailDialogPromise = $modal({\n templateUrl: 'setting/compensation-groups/compensation-groups-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.$on('refreshData', function (e, data) {\n $scope.compensationGroups = compensationGroupSvc.getAllAsync();\n });\n\n}]);\n","wbApp.controller('CompensationGroupsDetailCtrl', ['$scope', 'compensationGroupSvc',\nfunction ($scope, compensationGroupSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n $scope.isSaving = true;\n\n if (!model.compensationGroupID) {\n compensationGroupSvc.insert(model, success, error);\n } else {\n compensationGroupSvc.update(model, success, error);\n }\n }\n}]);\n","wbApp.controller('CompensationTransferDetailCtrl', ['$scope', '$modal', 'compensationTransferSvc',\nfunction ($scope, $modal, compensationTransferSvc) {\n\n $scope.initialized = false;\n $scope.model = compensationTransferSvc.createEmptyModel($scope.sourceSemesterID);\n\n compensationTransferSvc.initilizeModelAsync($scope.model)\n .then(function (model) {\n $scope.initialized = true;\n if (model.isNew) {\n $scope.model.compensationTransfer.destinationSemesterID = null;\n }\n });\n\n $scope.onDestinationSemesterChange = function (destinationSemesterID) {\n compensationTransferSvc.initilizeModelAsync($scope.model, destinationSemesterID)\n .then(function (model) {\n $scope.initialized = true; \n });\n };\n\n $scope.onTransferToAmendTypeChange = function (transferToAmendType) {\n compensationTransferSvc.changeTransferToAmendType($scope.model, transferToAmendType);\n }\n\n $scope.onMaximumTransferredAmendsChange = function (maximumTransferredAmends) {\n compensationTransferSvc.changeMaximumTransferredAmends($scope.model, maximumTransferredAmends);\n }\n\n $scope.onTransferRemainingPreAmendsChange = function (transferRemainingPreAmends) {\n compensationTransferSvc.changeTransferRemainingPreAmends($scope.model, transferRemainingPreAmends);\n }\n\n $scope.onTransferRemainingTimeBoundAmendsChange = function (transferRemainingTimeBoundAmends) {\n compensationTransferSvc.changeTransferRemainingTimeBoundAmends($scope.model, transferRemainingTimeBoundAmends);\n }\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"setting/semesters/compensation-transfer-detail-main-tab.html\"\n },\n {\n title: \"TXT_TITLE_COMPENSATION_TRANSFER_DETAIL\",\n template: \"setting/semesters/compensation-transfer-detail-transfer-tab.html\"\n }\n ];\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.onNextBtnClick = function () {\n $scope.detailTabs.activeTab = 1;\n }\n\n $scope.onBackBtnClick = function () {\n $scope.detailTabs.activeTab = 0;\n }\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['studentFullName'], directions: ['asc'] },\n columnDefs: [{ field: 'studentFullName', displayName: \"TXT_LBL_STUDENT\", sort: 'locale' },\n { field: 'sourceCourseFullName', displayName: \"TXT_LBL_SOURCE_COURSE\", sort: 'locale', width: '230px' },\n { field: 'optionsCount', displayName: '', width: '25px', align: 'right' },\n { field: 'destinationCourseFullName', displayName: \"TXT_LBL_DESTINATION_COURSE\", sort: 'locale', width: '230px' },\n { field: 'availableAmends', displayName: \"Náh\", width: '40px', align: 'right' },\n { field: 'transferredPreAmends', displayName: \"Pře\", width: '40px', align: 'right' },\n { field: 'transferredTimeBoundAmends', displayName: \"Čas\", width: '40px', align: 'right' }\n ],\n disabledField: 'isPristine',\n disabledAreSelectable: true\n };\n\n $scope.errorGridOptions = {\n sortInfo: { fields: ['studentFullName'], directions: ['asc'] },\n columnDefs: [{ field: 'studentFullName', displayName: \"TXT_LBL_STUDENT\", sort: 'locale', width: '130px' },\n { field: 'sourceCourseFullName', displayName: \"TXT_LBL_SOURCE_COURSE\", sort: 'locale', width: '200px' },\n { field: 'destinationCourseFullName', displayName: \"TXT_LBL_DESTINATION_COURSE\", sort: 'locale', width: '200px' },\n { field: 'error', displayName: \"Chyba\" }\n ],\n noCommandColumn: true\n };\n\n $scope.isSaving = false;\n\n $scope.onCompensationTransferDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n $scope.detailError = null;\n\n compensationTransferSvc.update(model, success, error);\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n if (data.errors && data.errors.length) {\n compensationTransferErrorModalPromise.$promise.then(function () {\n compensationTransferErrorModalPromise.$scope.errors = data.errors;\n compensationTransferErrorModalPromise.show();\n });\n } else {\n $scope.detailError = data;\n }\n }\n }\n\n $scope.onRowEdit = function (row) {\n compensationTransferDetailDialogPromise.$promise.then(function () {\n compensationTransferDetailDialogPromise.$scope.model = row\n compensationTransferDetailDialogPromise.show();\n });\n };\n\n var compensationTransferDetailDialogPromise = $modal({\n templateUrl: 'setting/semesters/compensation-transfer-detail-transfer-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var compensationTransferErrorModalPromise = $modal({\n templateUrl: 'setting/semesters/compensation-transfer-error-modal.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('CompensationTransferDetailTransferDetailCtrl', ['$scope',\nfunction ($scope) {\n\n $scope.modelCopy = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.model);\n };\n\n $scope.onSemesterDetailSave = function (model) {\n angular.extend($scope.model, model);\n $scope.model.isPristine = false;\n $scope.$hide();\n }\n\n $scope.onDestinationCourseChange = function (destinationCourseRegistrationID) {\n var option = _.find($scope.modelCopy.options, { destinationCourseRegistrationID: destinationCourseRegistrationID });\n\n $scope.modelCopy.destinationCourseFullName = option.destinationCourseFullName;\n }\n\n}]);\n","'use strict';\n\nwbApp.controller('CourseTypesCtrl', ['$scope', '$modal', 'courseTypeSvc',\nfunction ($scope, $modal, courseTypeSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.courseTypes = courseTypeSvc.getAllAsync(true);\n\n $scope.gridOptions = {\n sortInfo: { fields: ['name'], directions: ['dsc'] },\n columnDefs: [{ field: 'name', displayName: \"TXT_LBL_NAME\", sort: 'locale', width: '250px' },\n { field: 'description', displayName: \"TXT_LBL_DESCRIPTION\", sort: 'locale' }\n ]\n };\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = courseTypeSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n courseTypeSvc.remove(data);\n }\n\n $scope.onRowSelected = function (data) {\n $scope.selectedCourseType = data;\n }\n \n var detailDialogPromise = $modal({\n templateUrl: 'setting/course-types/course-types-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('CourseTypesDetailCtrl', ['$scope', 'courseTypeSvc',\nfunction ($scope, courseTypeSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n if (!model.courseTypeID) {\n courseTypeSvc.insert(model, success, error);\n } else {\n courseTypeSvc.update(model, success, error);\n }\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n}]);\n","'use strict';\n\nwbApp.controller('HolidayCalendarsCtrl', ['$scope', '$modal', '$translate', 'holidayCalendarSvc',\nfunction ($scope, $modal, $translate, holidayCalendarSvc) {\n\n $scope.holidayCalendars = holidayCalendarSvc.getAll(true);\n\n $scope.gridSettings = {\n columns: [\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', sortOrder: 'asc' },\n ],\n }\n\n function reloadData() {\n $scope.holidayCalendars = holidayCalendarSvc.getAll(true);\n }\n\n $scope.$on('refreshData', function (e, data) {\n reloadData();\n });\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onDataSave = function () {\n reloadData();\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = holidayCalendarSvc.createNew();\n detailDialogPromise.$scope.onDataSave = function () {\n reloadData();\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n holidayCalendarSvc.remove(data.id).$promise.then(function () {\n reloadData();\n });\n }\n\n \n var detailDialogPromise = $modal({\n templateUrl: 'setting/holiday-calendars/holiday-calendars-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('HolidayCalendarsDetailCtrl', ['$scope', 'holidayCalendarSvc',\nfunction ($scope, holidayCalendarSvc) {\n\n if (!$scope.model.days) {\n $scope.model.days = [];\n }\n\n $scope.modelOrig = angular.copy($scope.model);\n $scope.selectedYear = moment().year();\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDeleteDay = function(selectedDay) {\n var index = $scope.model.days.indexOf(selectedDay);\n if (index !== -1) $scope.model.days.splice(index, 1);\n }\n\n $scope.onAddDay = function (selectedDay) {\n if (!!selectedDay && moment(selectedDay).isValid()) {\n var alreadyExist = _.find($scope.model.days, function (d) {\n return moment(d).isSame(selectedDay);\n });\n\n if (!alreadyExist) {\n $scope.model.days.push(selectedDay);\n\n $scope.model.days.sort(function (a, b) {\n if (moment(a).isBefore(b)) {\n return -1;\n }\n\n if (moment(a).isAfter(b)) {\n return 1;\n }\n\n return 0;\n });\n }\n }\n }\n\n $scope.onAddBankHoliday = function(year) {\n var bankHoliday = holidayCalendarSvc.getBankHoliday('CZK', year);\n bankHoliday.$promise.then(function (data) {\n _.forEach(data.days, function (day) {\n $scope.onAddDay(day);\n });\n });\n }\n\n $scope.onDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n var promise;\n if (!model.id) {\n promise = holidayCalendarSvc.insert(model).$promise;\n } else {\n promise = holidayCalendarSvc.update(model).$promise;\n }\n\n function success(data) {\n $scope.isSaving = false;\n if (!!$scope.onDataSave) {\n $scope.onDataSave(data);\n }\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n promise.then(success, error);\n }\n}]);\n","'use strict';\r\n\r\nwbApp.controller('NewsCtrl', ['$scope', '$modal', '$translate', 'newsSvc',\r\nfunction ($scope, $modal, $translate, newsSvc) {\r\n\r\n $scope.news = newsSvc.getAll(true);\r\n\r\n $scope.gridSettings = {\r\n columns: [\r\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\r\n { dataField: 'title', caption: $translate.instant('TXT_LBL_TITLE'), dataType: 'string', width: '200px' },\r\n { dataField: 'subTitle', caption: $translate.instant('TXT_LBL_SUB_TITLE'), dataType: 'string' },\r\n { dataField: 'publishedAtUtc', caption: $translate.instant('TXT_LBL_PUBLISHED_AT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px', sortOrder: 'desc' },\r\n { dataField: 'isVisibleToClients', caption: $translate.instant('TXT_LBL_VISIBLE_TO_CLIENTS'), dataType: 'boolean', width: '60px' },\r\n ],\r\n }\r\n\r\n $scope.$on('refreshData', function (e, data) {\r\n $scope.news = newsSvc.getAll(true);\r\n });\r\n\r\n $scope.onRowEdit = function (data) {\r\n newsSvc.getById(data.id).$promise.then(function(model) {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.model = angular.copy(model);\r\n detailDialogPromise.$scope.onDetailSave = function() {\r\n $scope.news = newsSvc.getAll(true);\r\n };\r\n detailDialogPromise.show();\r\n });\r\n });\r\n }\r\n\r\n $scope.onRowAdd = function () {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.model = newsSvc.createNew();\r\n detailDialogPromise.$scope.onDetailSave = function() {\r\n $scope.news = newsSvc.getAll(true);\r\n };\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowDelete = function (data) {\r\n newsSvc.remove(data.id).$promise.then(function() {\r\n $scope.news = newsSvc.getAll(true);\r\n });\r\n }\r\n\r\n \r\n var detailDialogPromise = $modal({\r\n templateUrl: 'setting/news/news-detail.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n}]);\r\n","wbApp.controller('NewsDetailCtrl', ['$scope', '$modal', 'newsSvc',\nfunction ($scope, $modal, newsSvc) {\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"setting/news/news-detail-main-tab.html\"\n },\n {\n title: \"TXT_LBL_TEXT\",\n template: \"setting/news/news-detail-body-tab.html\"\n },\n {\n title: 'TXT_LBL_PICTURES',\n template: \"setting/news/news-detail-pictures-tab.html\"\n }\n ];\n\n $scope.publishedAtUtcPickerOptions = {\n type: \"datetime\",\n width: '100%'\n };\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onNewsDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n if (!model.id) {\n newsSvc.insert(model).$promise.then(success, error);\n } else {\n newsSvc.update(model).$promise.then(success, error);\n }\n\n function success() {\n $scope.isSaving = false;\n $scope.onDetailSave();\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n\n $scope.onDeletePictureBtnClick = function (picture) {\n _.pull($scope.model.pictureUrls || [], picture);\n }\n\n $scope.showPictureSelect = function () {\n picturesSelectDlgPromise.$promise.then(function () {\n picturesSelectDlgPromise.$scope.onPicturesSelected = function (pictures) {\n\n if (!$scope.model.pictureUrls) {\n $scope.model.pictureUrls = [];\n }\n\n angular.forEach(pictures, function (p) {\n if (!_.find($scope.model.pictureUrls, p.imageUrl)) {\n $scope.model.pictureUrls.push(p.imageUrl);\n }\n });\n };\n picturesSelectDlgPromise.show();\n });\n }\n\n var picturesSelectDlgPromise = $modal({\n templateUrl: 'storage/pictures/pictures-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('PreferredBookingDetailCourseRegistrationDetailCtrl', ['$scope',\nfunction ($scope) {\n\n $scope.modelCopy = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.model);\n };\n\n $scope.onCourseRegistrationDetailSave = function (model) {\n angular.extend($scope.model, model);\n $scope.model.isPristine = false;\n $scope.$hide();\n }\n\n}]);\n","wbApp.controller('PreferredBookingDetailCtrl', ['$scope', '$modal', '$translate', '$timeout', '$filter', 'preferredBookingSvc', 'compensationGroupSvc',\nfunction ($scope, $modal, $translate, $timeout, $filter, preferredBookingSvc, compensationGroupSvc) {\n\n $scope.isLoading = true;\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"setting/semesters/preferred-booking-detail-main-tab.html\"\n },\n {\n title: \"TXT_LBL_STUDENTS\",\n template: \"setting/semesters/preferred-booking-detail-course-registrations-tab.html\"\n }\n ];\n $scope.detailTabs.activeTab = 0;\n\n $scope.$watch('detailTabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n\n $scope.model = [];\n compensationGroupSvc.getLookup().$promise.then(function () {\n $scope.model = preferredBookingSvc.getBySemesterID($scope.semesterID);\n $scope.model.$promise.then(function () {\n $scope.isLoading = false;\n });\n })\n\n $scope.isModelValid = function (model) {\n return !!model.sourceSemestersIDs && !!model.sourceSemestersIDs.length;\n }\n\n $scope.onFromSemestersChanged = function (model) {\n if (!model.sourceSemestersIDs || model.sourceSemestersIDs.length === 0) {\n model.data.length = 0; \n } else {\n preferredBookingSvc.getByPreferredBooking(model).$promise.then(function (data) {\n model.data.length = 0;\n model.data.push.apply(model.data, data.data); \n });\n }\n }\n\n $scope.isSaving = false;\n\n $scope.courseRegistrationsGridSettings = {\n columns: [\n { dataField: 'studentFullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', width: '190px', sortOrder: 'asc' },\n {\n dataField: 'firstLesson',\n caption: $translate.instant('TXT_MENU_SCHEDULE'),\n dataType: 'date',\n format: { raw: \"EEE HH:mm\" },\n calculateSortValue: function (rowData) {\n var mfirstLesson = moment(rowData.firstLesson);\n return mfirstLesson.isValid()\n ? mfirstLesson.day() * 10000 + mfirstLesson.hour() * 100 + mfirstLesson.minute()\n : rowData.firstLesson;\n },\n width: '80px'\n },\n { dataField: 'courseFullName', caption: $translate.instant('TXT_LBL_COURSE'), dataType: 'string' },\n {\n dataField: 'destinationSemesterCourseRegistrations',\n caption: $translate.instant('TXT_MENU_BOOKED_IN_DST_SEMESTER'),\n dataType: 'boolean',\n calculateCellValue: function (rowData) {\n return !!rowData.destinationSemesterCourseRegistrations && rowData.destinationSemesterCourseRegistrations.length != 0;\n },\n width: '40px'\n }, \n {\n dataField: 'compensationGroupsIDs',\n caption: $translate.instant(\"TXT_MENU_COMPENSATION_GROUPS\"),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('compensationGroups')(rowData.compensationGroupsIDs);\n },\n width: '240px'\n },\n ],\n onCellPrepared: function (e) {\n if (e.rowType === \"data\" && e.columnIndex == 4) {\n e.cellElement.mousemove(function () {\n if (!!e.data.destinationSemesterCourseRegistrations) {\n e.cellElement.attr('title', e.data.destinationSemesterCourseRegistrations.join('\\n'));\n }\n });\n }\n },\n }\n\n $scope.onCourseRegistrationRowEdit = function (d) {\n courseRegistrationDetailPromise.$promise.then(function () {\n courseRegistrationDetailPromise.$scope.model = d\n courseRegistrationDetailPromise.show();\n });\n }\n\n $scope.onPreferredBookingSave = function (model) {\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n $scope.detailError = null;\n\n if (model.preferredBookingID) {\n preferredBookingSvc.update(model, success, error);\n } else {\n preferredBookingSvc.insert(model, success, error);\n }\n\n function success() {\n $scope.isSaving = false;\n\n if (!!$scope.onPreferredBookingSavedSuccessfully) {\n $scope.onPreferredBookingSavedSuccessfully(model);\n }\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n\n var courseRegistrationDetailPromise = $modal({\n templateUrl: 'setting/semesters/preferred-booking-course-registration-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);\n","'use strict';\n\nwbApp.controller('SemestersCtrl', ['$scope', '$modal', '$translate', '$filter', 'semesterSvc', 'securitySvc', 'tenantSettingSvc',\nfunction ($scope, $modal, $translate, $filter, semesterSvc, securitySvc, tenantSettingSvc) {\n\n $scope.preferredBookingSupported = !tenantSettingSvc.settings.courseInterestsSupport &&\n !(tenantSettingSvc.settings.coursePreviewOnlyRegistration && !tenantSettingSvc.settings.allowClientCourseRegistration);\n\n\n function showCompensationTransferDetail(row) {\n compensationTransferDialogPromise.$promise.then(function () {\n compensationTransferDialogPromise.$scope.sourceSemesterID = row.id;\n compensationTransferDialogPromise.show();\n });\n }\n\n function showPreferredBookingDetail(row) {\n preferredBookingDialogPromise.$promise.then(function () {\n preferredBookingDialogPromise.$scope.semesterID = row.id;\n preferredBookingDialogPromise.$scope.onPreferredBookingSavedSuccessfully = function (model) {\n $scope.semesters = semesterSvc.getAllAsync(true);\n }\n preferredBookingDialogPromise.show();\n });\n }\n\n $scope.rawSemesters = [];\n $scope.semesters = semesterSvc.getAllAsync();\n\n $scope.customFilter = { showInactive: false };\n\n function preFilter() {\n if (!$scope.rawSemesters.$promise) {\n return;\n }\n\n $scope.rawSemesters.$promise.then(function () {\n if ($scope.customFilter.showInactive) {\n $scope.semesters.length = 0;\n $scope.semesters.push.apply($scope.semesters, $scope.rawSemesters);\n } else {\n $scope.semesters.length = 0;\n $scope.semesters.push.apply($scope.semesters,\n _.filter($scope.rawSemesters, { active: true }));\n }\n });\n }\n \n $scope.$watch('customFilter.showInactive', function (newValue, oldValue) {\n preFilter();\n }, true);\n\n\n\n $scope.gridSettings = {\n columns: [\n { dataField: 'isMain', caption: $translate.instant('TXT_MAIN'), dataType: 'boolean', width: '70px' },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '180px', sortOrder: 'asc' },\n { dataField: 'startDate', caption: $translate.instant('TXT_LBL_START_DATE'), dataType: 'date', width: '90px' },\n { dataField: 'endDate', caption: $translate.instant('TXT_LBL_END_DATE'), dataType: 'date', width: '90px' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string', sortOrder: 'asc' },\n { dataField: 'showInAttendance', caption: $translate.instant('TXT_LBL_SHOW_IN_ATTENDANCE'), dataType: 'boolean', width: '70px' },\n { dataField: 'openForRegistration', caption: $translate.instant('TXT_LBL_OPEN_FOR_REGISTRATION'), dataType: 'boolean', width: '70px' },\n {\n dataField: 'preferredBookingStartDate',\n caption: $translate.instant('TXT_MENU_PREFERRED_BOOKING'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return !!rowData.preferredBookingStartDate\n ? ($filter('date')(rowData.preferredBookingStartDate, 'shortDate') + ' - ' + $filter('date')(rowData.preferredBookingEndDate, 'shortDate'))\n : '';\n },\n width: '140px',\n visible: $scope.preferredBookingSupported\n },\n ],\n onCellPrepared: function (e) {\n if (e.rowType === \"data\" && e.columnIndex == 8) { \n if (!!e.data.preferredBookingStartDate && !e.data.preferredBookingIsActive) {\n e.cellElement.css('text-decoration', 'line-through');\n }\n if (!!e.data.preferredBookingEffectiveIsActive) {\n e.cellElement.addClass('text-success');\n }\n }\n },\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n let data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.active === false) {\n e.rowElement.addClass('text-muted');\n }\n }\n },\n customCommands: [{\n text: $translate.instant('TXT_MENU_TRANSFER_COMPENSATIONS'),\n isVisible: function (row) {\n return securitySvc.isInRole('Semester.CompensationTransfer');\n },\n callback: function (row) { showCompensationTransferDetail(row); }\n }, {\n text: $translate.instant('TXT_MENU_PREFERRED_BOOKING'),\n isVisible: function (row) {\n return $scope.preferredBookingSupported && securitySvc.isInRole('Semester.PreferredBooking');\n },\n callback: function (row) { showPreferredBookingDetail(row); }\n }]\n }\n \n function refreshData() {\n $scope.rawSemesters = semesterSvc.getAllAsync(true);\n preFilter();\n }\n\n $scope.$on('refreshData', function (e, data) {\n refreshData();\n });\n\n refreshData();\n\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onSaved = function () {\n preFilter();\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = semesterSvc.newModel();\n detailDialogPromise.$scope.onSaved = function () {\n preFilter();\n }; \n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n semesterSvc.remove(data).$promise.then(function () {\n preFilter();\n });\n }\n\n $scope.onRowSelected = function (data) {\n $scope.selectedSemester = data;\n }\n\n\n //$scope.tabs = [\n //{\n // title: 'TXT_DETAIL',\n // template: \"finance/invoices/invoices-tabs/detail.html\"\n //}];\n\n //$scope.tabs.activeTab = 0;\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'setting/semesters/semesters-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var compensationTransferDialogPromise = $modal({\n templateUrl: 'setting/semesters/compensation-transfer-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var preferredBookingDialogPromise = $modal({\n templateUrl: 'setting/semesters/preferred-booking-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('SemesterDetailCtrl', ['$scope', 'semesterSvc',\nfunction ($scope, semesterSvc) {\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"setting/semesters/semesters-detail-main-tab.html\"\n },\n {\n title: \"TXT_LBL_SETTING\",\n template: \"setting/semesters/semesters-detail-setting-tab.html\"\n }\n ];\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onSemesterDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n if (!model.id) {\n semesterSvc.insert(model, success, error);\n } else {\n semesterSvc.update(model, success, error);\n }\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n if (!!$scope.onSaved) {\n $scope.onSaved();\n }\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n\n}]);\n","'use strict';\n\nwbApp.controller('TerminalsCtrl', ['$scope', '$modal', '$translate', 'terminalSvc',\nfunction ($scope, $modal, $translate, terminalSvc) {\n\n $scope.terminals = terminalSvc.getAllAsync(true);\n\n $scope.gridSettings = {\r\n columns: [\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', sortOrder: 'asc' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string' },\n ],\r\n onRowPrepared: function (e) {\r\n if (e.rowType == \"data\") {\r\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.buildIn) {\r\n e.rowElement.addClass('text-muted');\r\n }\r\n }\r\n }\r\n }\n\n $scope.$on('refreshData', function (e, data) {\r\n $scope.terminals = terminalSvc.getAllAsync(true);\n });\n\n $scope.onRowEdit = function (data) {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\r\n });\r\n }\n\n $scope.onRowAdd = function () {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.model = terminalSvc.createNew();\n detailDialogPromise.show();\r\n });\r\n }\n\n $scope.onRowDelete = function (data) {\r\n terminalSvc.remove(data);\r\n }\n \n var detailDialogPromise = $modal({\n templateUrl: 'setting/terminals/terminals-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('TerminalsDetailCtrl', ['$scope', 'terminalSvc',\nfunction ($scope, terminalSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n if (!model.terminalID) {\n terminalSvc.insert(model, success, error);\n } else {\n terminalSvc.update(model, success, error);\n }\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n}]);\n","'use strict';\n\nwbApp.directive('wbAmendTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(paymentType) {\n if (!paymentType) { return; }\n return $translate.instant(paymentType.text);\n }\n\n function formatSelection(paymentType) {\n return $translate.instant(paymentType.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_LBL_AMEND_TYPE_PRE_AMEND' },\n { id: 2, text: 'TXT_LBL_AMEND_TYPE_TIME_BOUND' }\n ]\n });\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbCourseTypeImageCombo', ['$timeout', '$translate', 'courseTypeImageSvc',\n function ($timeout, $translate, courseTypeImageSvc) {\n function formatResult(model) {\n if (!model) { return; }\n\n return \" \";\n }\n\n function formatSelection(model) {\n return \" \";\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n link: function (scope, elm, attrs, ctrl) {\n\n var models = courseTypeImageSvc.getAllAsync();\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_COURSE_TYPE_IMAGE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n id: function (courseTypeImage) { return courseTypeImage.imageUri; },\n data: models\n });\n\n ctrl.$render = function () {\n models.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n }\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n ctrl.$render();\n\n }, 1);\n }\n }\n }]); ","wbApp.directive('wbDestinationCourseCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(model) {\n if (!model) { return; }\n return model.destinationCourseFullName;\n }\n\n function formatSelection(model) {\n return model.destinationCourseFullName;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n courses: '='\n },\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n id: function(option) {return option.destinationCourseRegistrationID; },\n data: scope.courses\n });\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbHolidayCalendarCombo', ['$timeout', '$translate', 'holidayCalendarSvc',\n function ($timeout, $translate, holidayCalendarSvc) {\n function formatResult(model) {\n if (!model) { return; }\n\n return model.name;\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n link: function (scope, elm, attrs, ctrl) {\n\n var models = holidayCalendarSvc.getAll();\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_HOLIDAY_CALENDAR'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: 5, \n data: models\n });\n\n ctrl.$render = function () {\n models.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n }\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n ctrl.$render();\n\n }, 1);\n }\n }\n }]); ","wbApp.directive('wbHolidayCalendarWithAddCombo', [\n function () {\n\n return {\n restrict: 'A',\n priority: 1,\n scope: {\n ngModel: '='\n },\n template:\n '
' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n '
',\n controller: ['$scope', '$modal', 'securitySvc', 'holidayCalendarSvc',\n function ($scope, $modal, securitySvc, holidayCalendarSvc) {\n\n $scope.disableAddBtn = !securitySvc.isInRole('HolidayCalendar.Insert')\n\n $scope.onAddClick = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = holidayCalendarSvc.createNew();\n\n detailDialogPromise.$scope.onDataSave = function (data) {\n if (!!data) {\n $scope.ngModel = data.id;\n }\n };\n detailDialogPromise.show();\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'setting/holiday-calendars/holiday-calendars-detail.html',\n show: false,\n scope: $scope.$new()\n });\n }]\n }\n }]);","'use strict';\n\nwbApp.factory('compensationTransferSvc', ['$resource', '$q', '$translate', 'notificationSvc', 'repositorySvc',\n function ($resource, $q, $translate, notificationSvc, repositorySvc) {\n\n var CompensationTransfer = $resource('/Api/CompensationTransfer/Get', {}, {\n 'query': { method: 'GET', isArray: false },\n 'update': { method: 'POST', url: '/Api/CompensationTransfer/Update' }//,\n });\n\n\n function getAsync(sourceSemesterID, destinationSemesterID) {\n return repositorySvc.get(CompensationTransfer, {\n sourceSemesterID: sourceSemesterID,\n destinationSemesterID: destinationSemesterID\n });\n }\n\n function changeTransferToAmendType(model, transferToAmendType) {\n _.forEach(model.items, function (item) {\n if (transferToAmendType === 1) {\n // Pre - amends\n if (item.transferredTimeBoundAmends) {\n item.transferredPreAmends = item.transferredPreAmends + item.transferredTimeBoundAmends;\n item.transferredTimeBoundAmends = 0;\n }\n } else {\n // Time bound amends\n if (item.transferredPreAmends) {\n item.transferredTimeBoundAmends = item.transferredPreAmends + item.transferredTimeBoundAmends;\n item.transferredPreAmends = 0;\n }\n }\n item.isPristine = false;\n }); \n }\n\n function changeMaximumTransferredAmends(model, maximumTransferredAmends) {\n var newValue = 0;\n _.forEach(model.items, function (item) {\n if (model.compensationTransfer.transferToAmendType === 1) {\n // Pre - amends\n newValue = Math.min(maximumTransferredAmends, item.availableAmends);\n if (item.transferredPreAmends !== newValue) {\n item.transferredPreAmends = newValue;\n item.isPristine = false;\n }\n } else {\n // Time bound amends\n newValue = Math.min(maximumTransferredAmends, item.availableAmends);\n if (item.transferredTimeBoundAmends !== newValue) {\n item.transferredTimeBoundAmends = newValue;\n item.isPristine = false;\n }\n }\n });\n }\n\n function changeTransferRemainingPreAmends(model, transferRemainingPreAmends) {\n initializeAmends(model);\n changeMaximumTransferredAmends(model, model.compensationTransfer.maximumTransferredAmends);\n }\n\n function changeTransferRemainingTimeBoundAmends(model, transferRemainingTimeBoundAmends) {\n initializeAmends(model);\n changeMaximumTransferredAmends(model, model.compensationTransfer.maximumTransferredAmends);\n }\n\n function createEmptyModel(sourceSemesterID) {\n return {\n isNew: true,\n compensationTransfer: {\n sourceSemesterID: sourceSemesterID,\n destinationSemesterID: 2\n }\n };\n }\n\n function initilizeModelAsync(model, destinationSemesterID) {\n var deferred = $q.defer();\n\n var serverData = getAsync(model.compensationTransfer.sourceSemesterID, destinationSemesterID);\n serverData.$promise.then(function (data) {\n model.items = [];\n angular.extend(model, data);\n delete model.$promise;\n delete model.$resolved;\n\n initializeAmends(model);\n\n deferred.resolve(model);\n });\n\n return deferred.promise;\n }\n\n function initializeAmends(model) {\n _.forEach(model.items, function (item) {\n item.availableAmends = item.remainingAmends;\n if (model.compensationTransfer.transferRemainingPreAmends) {\n item.availableAmends = item.availableAmends + item.remainingPreAmends;\n }\n if (model.compensationTransfer.transferRemainingTimeBoundAmends) {\n item.availableAmends = item.availableAmends + item.remainingTimeBoundAmends;\n }\n });\n }\n\n function update(data, successCallback, errorCallback) {\n\n function error(data) {\n if (data.errors && data.errors.length) {\n notificationSvc.notifyError($translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'));\n }\n\n if (errorCallback) {\n errorCallback(data);\n }\n }\n\n return repositorySvc.update(\n CompensationTransfer, // $resource\n null, // collection\n data, // entity\n successCallback,\n error);\n }\n\n return {\n createEmptyModel: createEmptyModel,\n getAsync: getAsync,\n changeTransferToAmendType: changeTransferToAmendType,\n changeMaximumTransferredAmends: changeMaximumTransferredAmends,\n initilizeModelAsync: initilizeModelAsync,\n update: update,\n changeTransferRemainingPreAmends: changeTransferRemainingPreAmends,\n changeTransferRemainingTimeBoundAmends: changeTransferRemainingTimeBoundAmends\n }\n }\n]);\n","'use strict';\n\nwbApp.factory('courseTypeImageSvc', ['$resource', '$cacheFactory', 'repositorySvc', \n function ($resource, $cacheFactory, repositorySvc) {\n\n var CourseTypeImage = $resource('/restapi/icons', {}, {\n 'getAll': { method: 'GET', isArray: true, url: '/restapi/icons' }\n });\n\n var cache = $cacheFactory('courseTypeImageSvcCache');\n\n function getAllAsync(refresh) {\n\n var models = cache.get('courseTypeImages');\n\n if (refresh || !models) {\n if (models) {\n cache.remove('courseTypeImages');\n }\n\n models = repositorySvc.customGet('getAll', CourseTypeImage);\n cache.put('courseTypeImages', models);\n }\n\n return models;\n }\n\n return {\n getAllAsync: getAllAsync\n }\n }\n]);\n","wbApp.factory('holidayCalendarSvc', ['$resource', '$q', 'repositorySvc',\n function ($resource, $q, repositorySvc) {\n\n var HolidayCalendar = $resource('/restapi/holiday-calendars/:id', {}, {\n 'getById': { method: 'GET', url: '/restapi/holiday-calendars/:id' },\n 'getBankHoliday': { method: 'GET', url: '/restapi/holiday-calendars/bank-holidays/country/:countryCode/year/:year' },\n 'getAll': { method: 'GET', isArray: true, url: '/restapi/holiday-calendars' },\n 'insert': { method: 'POST', url: '/restapi/holiday-calendars' },\n 'update': { method: 'PUT', url: '/restapi/holiday-calendars/:id' },\n 'delete': { method: 'DELETE', url: '/restapi/holiday-calendars/:id' } \n });\n\n var holidayCalendars;\n\n function createNew() {\n var holidayCalendar = {\n isNew: true\n };\n\n return holidayCalendar;\n }\n\n function insert(model) {\n var result = repositorySvc.customPost(\n 'insert',\n HolidayCalendar,\n model);\n\n result.$promise.then(function (entity) {\n repositorySvc.entityInserted(holidayCalendars, entity);\n });\n\n return result;\n }\n\n function remove(holidayCalendarId) {\n \n var result = repositorySvc.customDelete(\n 'delete',\n HolidayCalendar,\n { id: holidayCalendarId });\n\n result.$promise.then(function () {\n repositorySvc.entityRemoved(holidayCalendars, holidayCalendarId);\n });\n\n return result;\n }\n\n function update(model) {\n \n var result = repositorySvc.customPutWithParams(\n 'update',\n HolidayCalendar,\n { id: model.id },\n convertDatesToDateString(model));\n\n result.$promise.then(function () {\n repositorySvc.entityUpdated(holidayCalendars, model);\n });\n\n return result;\n }\n\n function getById(holidayCalendarId) {\n return repositorySvc.customGet('getById', HolidayCalendar, { id: holidayCalendarId });\n }\n\n function getBankHoliday(countryCode, year) {\n return repositorySvc.customGet('getBankHoliday', HolidayCalendar, { countryCode: countryCode, year: year });\n }\n\n function getAll(refresh) {\n if (!holidayCalendars || refresh) {\n holidayCalendars = repositorySvc.customGet('getAll', HolidayCalendar, {});\n }\n return holidayCalendars;\n }\n\n return {\n createNew: createNew,\n getById: getById,\n getBankHoliday: getBankHoliday,\n getAll: getAll,\n insert: insert,\n remove: remove,\n update: update,\n }\n }\n]);","'use strict';\n\nwbApp.factory('newsSvc', ['$resource', '$q', 'repositorySvc',\n function ($resource, $q, repositorySvc) {\n\n const News = $resource('/restapi/news/:id', {}, {\n 'getById': {method: 'GET', url: '/restapi/news/:id'},\n 'getAll': {method: 'GET', isArray: true, url: '/restapi/news/info'},\n 'insert': {method: 'POST', url: '/restapi/news'},\n 'update': {method: 'PUT', url: '/restapi/news/:id'},\n 'delete': {method: 'DELETE', url: '/restapi/news/:id'}\n });\n\n let news;\n\n function createNew()\n {\n return {\n id: null,\n title: null,\n subTitle: null,\n publishedAtUtc: new Date(),\n isVisibleToClients: false,\n body: null,\n pictureUrls: null\n };\n }\n\n function insert(model) {\n return repositorySvc.customPost(\n 'insert',\n News,\n model);\n }\n\n function remove(id) {\n news = null;\n return repositorySvc.customDelete(\n 'delete',\n News,\n { id: id });\n }\n\n function update(model) {\n news = null;\n return repositorySvc.customPutWithParams(\n 'update',\n News,\n { id: model.id },\n convertDatesToDateString(model));\n }\n\n function getById(id) {\n return repositorySvc.customGet('getById', News, { id: id });\n }\n\n function getAll(refresh) {\n if (!news || refresh) {\n news = repositorySvc.customGet('getAll', News, {});\n }\n return news;\n }\n\n return {\n createNew: createNew,\n getById: getById,\n getAll: getAll,\n insert: insert,\n remove: remove,\n update: update\n }\n }]);","wbApp.factory('preferredBookingSvc', ['$resource', '$q', '$translate', 'notificationSvc', 'repositorySvc',\n function ($resource, $q, $translate, notificationSvc, repositorySvc) {\n\n var PreferredBooking = $resource('/Api/PreferredBooking/Get', {}, {\n 'getBySemesterID': { method: 'GET', isArray: false, url: '/Api/PreferredBooking/GetBySemesterID' },\n 'getByPreferredBooking': { method: 'POST', isArray: false, url: '/Api/PreferredBooking/GetByPreferredBooking' },\n 'update': { method: 'POST', url: '/Api/PreferredBooking/Update' },\n 'insert': { method: 'POST', url: '/Api/PreferredBooking/Insert' },\n });\n\n function createNew(semesterID) {\n return {\n preferredBookingID: 0,\n semesterID: semesterID,\n sourceSemestersIDs: [],\n data: []\n };\n }\n\n function getBySemesterID(semesterID) {\n return repositorySvc.customGet(\n 'getBySemesterID',\n PreferredBooking,\n {\n semesterID: semesterID\n });\n }\n\n function getByPreferredBooking(model) {\n return PreferredBooking['getByPreferredBooking'](\n {\n dto: model\n });\n }\n\n function insert(data, successCallback, errorCallback) {\n repositorySvc.insert(\n PreferredBooking, // $resource\n null, // collection\n data, // entity\n successCallback,\n errorCallback);\n }\n\n function update(data, successCallback, errorCallback) {\n repositorySvc.update(\n PreferredBooking, // $resource\n null, // collection\n data, // entity\n successCallback,\n errorCallback,\n 'preferredBookingID');\n }\n\n return {\n createNew: createNew,\n insert: insert,\n update: update,\n getBySemesterID: getBySemesterID,\n getByPreferredBooking: getByPreferredBooking\n }\n }\n]);\n","'use strict';\n\nwbApp.controller('PicturesCtrl', ['$scope', '$modal', 'picturesSvc', 'localStorageService', 'messageBoxSvc',\nfunction ($scope, $modal, picturesSvc, localStorageService, messageBoxSvc) {\n\n localStorageService.bind($scope, 'size', 'medium', 'picture-gallery-picture-size');\n\n $scope.setSelected = function (picture) {\n $scope.selected = picture;\n }\n\n $scope.pictures = picturesSvc.getAllAsync();\n\n $scope.onDeleteBtnClick = function (picture) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_DELETE',\n message: picture.isUsed ? 'TXT_TEXT_CONFIRM_DELETE_PICURE_IN_USE' : 'TXT_TEXT_CONFIRM_DELETE_PICURE',\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () { picturesSvc.remove(picture); }\n }]\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'storage/pictures/pictures-detail.html',\n show: false,\n scope: $scope\n });\n\n $scope.onUploadImageClick = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.show();\n });\n }\n\n}]);\n","'use strict';\n\nwbApp.controller('PicturesDetailCtrl', ['$scope', '$timeout', '$translate', 'notificationSvc', 'picturesSvc',\nfunction ($scope, $timeout, $translate, notificationSvc, picturesSvc) {\n\n $scope.image = '';\n $scope.croppedImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYEAAAEyCAYAAAAcB2z/AAAKNElEQVR4Xu3VAQkAMAwDwc2/6Axm468OcinkbttxBAgQIJAUuEYg2bvQBAgQ+AJGwCMQIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQIPqGDEp71BlCAAAAAASUVORK5CYII=';\n\n $scope.imageIsValid = false;\n $scope.pictureWidth = $scope.pictureWidth || 770;\n $scope.pictureHeight = $scope.pictureHeight || 612;\n \n $scope.previewHeight = (0.0 + $scope.pictureHeight) / $scope.pictureWidth * 385;\n \n $scope.pictureAspect = `${$scope.pictureWidth}x${$scope.pictureHeight}`;\n $scope.resultPictureSize = $scope.pictureWidth;\n \n\n $scope.onImageLoadSuccess = function () {\n $scope.imageIsValid = true;\n }\n\n $scope.onImageLoadError = function () {\n $scope.imageIsValid = false;\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_ERROR_LOADING_IMAGE'),\n $translate.instant('TXT_ALERT_UNSUPPORTED_IMAGE_TYPE'));\n }\n\n var handleFileSelect = function (evt) {\n var file = evt.currentTarget.files[0];\n var reader = new FileReader();\n reader.onload = function (evt) {\n $scope.$apply(function ($scope) {\n $scope.image = evt.target.result;\n });\n };\n reader.readAsDataURL(file);\n };\n\n $scope.onUploadClick = function () {\n\n function success(data) {\n $scope.$hide();\n if (!!$scope.onImageSave) {\n $scope.onImageSave(data.imageUrl);\n }\n }\n\n function error() {\n $scope.isSaving = false;\n }\n\n if ($scope.isSaving || !$scope.imageIsValid) {\n return;\n }\n\n $scope.isSaving = true;\n\n \n if ($scope.onUploadImage) {\n let data = picturesSvc.prepareImageData($scope.croppedImage, success, error)\n $scope.onUploadImage(data, success, error);\n } else {\n var originalFormat = picturesSvc.decodeImageTypeFromData($scope.image);\n picturesSvc.insert($scope.croppedImage, originalFormat, success, error);\n }\n }\n\n $timeout(function () {\n angular.element(document.querySelector('#fileInput')).on('change', handleFileSelect);\n }, 1000);\n\n}]);\n","wbApp.controller('PicturesSelectDlgCtrl', ['$scope', '$timeout', '$modal', '$translate', 'picturesSvc',\nfunction ($scope, $timeout, $modal, $translate, picturesSvc) {\n\n $scope.pictures = picturesSvc.getAllAsync(true);\n\n $scope.toggleSelected = function (picture) {\n picture.isSelected = !picture.isSelected;\n }\n\n $scope.detailIsUnchanged = function (pictures) {\n return !_.some(pictures, { isSelected: true });\n }\n\n $scope.onPicturesAdd = function (pictures) {\n\n if (!!$scope.onPicturesSelected) {\n $scope.onPicturesSelected(_.filter(pictures, { isSelected: true })); \n }\n\n $scope.$hide();\n }\n\n $scope.onAddBtnClick = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.show();\n detailDialogPromise.$scope.onImageSave = function (imageUrl) {\n\n $scope.pictures = picturesSvc.getAllAsync(true);\n\n $scope.pictures.$promise.then(function() {\n _.forEach(_.filter($scope.pictures, { imageUrl: imageUrl }), function (p) {\n p.isSelected = true;\n });\n });\n }\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'storage/pictures/pictures-detail.html',\n show: false,\n scope: $scope\n });\n}]);\n","'use strict';\n\nwbApp.controller('ProtectedStorageCtrl', ['$scope', '$modal', '$q', '$http', '$translate', 'messageBoxSvc', 'protectedStorageSvc',\n function ($scope, $modal, $q, $http, $translate, messageBoxSvc, protectedStorageSvc) {\n\n $scope.$on('refreshData', function (e, data) {\n if (fileManagerInstance) {\n fileManagerInstance.refresh();\n }\n });\n\n function downloadDataUrlFromJavascript(name, dataUrl) {\n var link = document.createElement(\"a\"); \n link.target = \"_blank\";\n link.setAttribute(\"download\", name);\n link.href = dataUrl;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n\n var chunkSize = 1024 * 1024 * 8; // 8 MB\n\n var contextMenuItems = [\n \"delete\",\n {\n name: \"make-public\",\n text: $translate.instant('TXT_LBL_CHANGE_TO_PUBLIC'),\n icon: \"warning\",\n beginGroup: true\n },\n {\n name: \"make-private\",\n text: $translate.instant('TXT_LBL_CHANGE_TO_PRIVATE'),\n icon: \"key\",\n beginGroup: true\n },\n {\n name: \"get-download-url\",\n text: $translate.instant('TXT_LBL_SHOW_PUBLIC_URL'),\n icon: \"link\",\n },\n \"refresh\",\n \"download\"\n ];\n\n function onShowDirectJoinLink(downloadUrl) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_PUBLIC_URL',\n message: '{0}'.f(encodeURI(downloadUrl)),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n }\n\n function onItemClick(args) {\n\n var selectedItems = fileManagerInstance.getSelectedItems();\n if (!!selectedItems && selectedItems.length > 0) {\n\n if (args.itemData.name === \"make-public\") {\n protectedStorageSvc.setPublicAccess(selectedItems[0].path, true).$promise.then(function () {\n fileManagerInstance.refresh();\n });\n }\n if (args.itemData.name === \"make-private\") {\n protectedStorageSvc.setPublicAccess(selectedItems[0].path, false).$promise.then(function () {\n fileManagerInstance.refresh();\n });\n }\n if (args.itemData.name === \"get-download-url\") {\n protectedStorageSvc.getDownloadUrl(selectedItems[0].path).$promise.then(function (downloadUrl) {\n onShowDirectJoinLink(downloadUrl.url);\n }); \n }\n }\n }\n\n var fileManagerInstance;\n $scope.fileManagerOptions = {\n fileSystemProvider: new DevExpress.fileManagement.CustomFileSystemProvider({\n getItems: function(pathInfo) {\n return protectedStorageSvc.getDirectory(pathInfo.path).$promise;\n },\n downloadItems: function (items) {\n protectedStorageSvc.getDownloadUrl(items[0].path).$promise.then(function (downloadUrl) {\n downloadDataUrlFromJavascript(items[0].name, downloadUrl.url);\n });\n },\n createDirectory: function (parentDir, name) { \n return protectedStorageSvc.createDirectory(!!parentDir.path ? parentDir.path + \"/\" + name : name).$promise;\n },\n deleteItem: function(item) {\n if (item.isDirectory)\n {\n return protectedStorageSvc.deleteDirectory(item.path).$promise;\n }\n else\n {\n return protectedStorageSvc.deleteFile(item.path).$promise;\n }\n },\n uploadFileChunk: function (fileData, uploadInfo, destinationDirectory) {\n\n var fileSize = fileData.size;\n var contentType = fileData.type;\n var chunkCount = uploadInfo.chunkCount;\n\n var deffered = $q(function (resolve, reject) {\n if (uploadInfo.chunkIndex === 0) {\n var filePath = destinationDirectory.path ? destinationDirectory.path + \"/\" + fileData.name : fileData.name;\n protectedStorageSvc.getUploadUrl(filePath, contentType).$promise.then(function (uploadUrl) {\n uploadInfo.customData.accessUrl = uploadUrl.url;\n resolve();\n });\n }\n else {\n resolve();\n }\n });\n\n return $q(function (resolve, reject) {\n deffered.then(function () {\n\n var chunkSize = uploadInfo.chunkBlob.size;\n var chunkFirstByte = uploadInfo.bytesUploaded;\n var chunkLastByte = uploadInfo.bytesUploaded + uploadInfo.chunkBlob.size - 1;\n var totalObjectSize = fileSize;\n\n $.ajax({\n url: uploadInfo.customData.accessUrl,\n type: 'PUT',\n contentType: contentType,\n contentLength: uploadInfo.chunkBlob.size,\n headers: {\n 'Content-Range': \"bytes \" + chunkFirstByte + \"-\" + chunkLastByte + \"/\" + fileSize\n },\n data: uploadInfo.chunkBlob,\n crossDomain: true,\n processData: false,\n success: function (res) {\n resolve();\n },\n error: function (err) {\n if (err.status == 308) { // Continue with next chunk \n resolve();\n } else {\n reject(err);\n }\n }\n });\n });\n });\n },\n contentExpr: \"contentType\",\n dateModifiedExpr: \"createdAtUtc\"\n }),\n permissions: {\n download: true,\n create: true,\n delete: true,\n upload: true\n },\n selectionMode: \"single\",\n upload: {\n maxFileSize: (1024 * 1024) * 1024 * 1204 * 5, // 5 TB GCS object limit\n chunkSize: chunkSize \n },\n onContentReady: function (e) {\n fileManagerInstance = e.component;\n },\n onSelectionChanged: function (e) {\n if (!!e.selectedItems && e.selectedItems.length > 0) {\n var isDirectory = e.selectedItems[0].dataItem.isDirectory;\n var isPublic = e.selectedItems[0].dataItem.isPublic;\n\n if (isDirectory) {\n e.component.option('contextMenu.items', contextMenuItems.filter(item => {\n if (item === 'delete' || item === 'refresh') {\n return item;\n }\n }));\n } else if (isPublic) {\n e.component.option('contextMenu.items', contextMenuItems.filter(item => {\n if (item === 'delete' || item === 'refresh' || item === \"download\" ||\n item.name === \"make-private\" || item.name === \"get-download-url\") {\n return item;\n }\n }));\n } else {\n e.component.option('contextMenu.items', contextMenuItems.filter(item => {\n if (item === 'delete' || item === 'refresh' || item === \"download\" || item.name === \"make-public\") {\n return item;\n }\n }));\n }\n } else {\n e.component.option('contextMenu.items', contextMenuItems.filter(item => {\n if (item === 'refresh') {\n return item;\n }\n }));\n }\n },\n contextMenu: {\n items: contextMenuItems\n },\n onContextMenuItemClick: onItemClick,\n itemView: {\n details: {\n columns: [\n \"thumbnail\",\n \"name\",\n {\n dataField: \"isPublic\",\n caption: $translate.instant('TXT_LBL_PUBLIC'),\n dataType: \"boolean\",\n width: 75\n },\n \"dateModified\",\n \"size\"\n ]\n }\n }\n };\n}]);\n","wbApp.controller('ProtectedStorageSelectDlgCtrl', ['$scope', '$timeout', '$modal', '$translate', 'protectedStorageSvc',\nfunction ($scope, $timeout, $modal, $translate, protectedStorageSvc) {\n\n $scope.onOk = function () {\n\n if (!!$scope.onFilesSelected) {\n if (!!fileManagerInstance) {\n var selectedItems = fileManagerInstance.getSelectedItems();\n selectedItems = _.filter(selectedItems, { isDirectory: !!$scope.selectFoldersOnly });\n\n\n var selectedFiles = _.map(selectedItems, function (value, index, collection) {\n return {\n objectUri: value.key,\n name: value.name,\n contentType: value.dataItem.contentType,\n };\n });\n\n $scope.onFilesSelected(selectedFiles);\n } \n }\n\n $scope.$hide();\n }\n\n $scope.isNothingSelected = function () {\n if (!!fileManagerInstance) {\n var selectedItems = fileManagerInstance.getSelectedItems();\n selectedItems = _.filter(selectedItems, { isDirectory: !!$scope.selectFoldersOnly });\n return selectedItems == null || selectedItems.length == 0;\n } else {\n return true;\n }\n }\n\n var fileManagerInstance;\n $scope.fileManagerOptions = {\n fileSystemProvider: new DevExpress.fileManagement.CustomFileSystemProvider({\n getItems: function (pathInfo) {\n return protectedStorageSvc.getDirectory(pathInfo.path).$promise;\n },\n contentExpr: \"contentType\",\n dateModifiedExpr: \"createdAtUtc\",\n }),\n selectionMode: \"multiple\", \n onContentReady: function (e) {\n fileManagerInstance = e.component;\n },\n onSelectionChanged: function (e) {\n\n if (!!$scope.selectFoldersOnly) {\n var selectedItems = fileManagerInstance.getSelectedItems();\n\n var selectedFiles = _.filter(selectedItems, { isDirectory: false });\n\n if (selectedFiles != null && selectedFiles.length > 0) {\n var selectedItemKeys = _.map(_.filter(selectedItems, { isDirectory: true }), 'key');\n fileManagerInstance.option(\"selectedItemKeys\", selectedItemKeys);\n }\n }\n }\n }\n}]);\n","'use strict';\n\nwbApp.factory('picturesSvc', ['$resource', '$translate', 'notificationSvc', 'repositorySvc',\n function ($resource, $translate, notificationSvc, repositorySvc) {\n\n var jpgstr = 'data:image/jpeg;base64,';\n var pngstr = 'data:image/png;base64,';\n\n var Picture = $resource('/restapi/images', {}, {\n 'query': { method: 'GET', isArray: true },\n // 'update': { method: 'POST', url: '/Api/Subjects/Update' },\n 'insert': { method: 'POST', url: '/restapi/images' },\n 'delete': { method: 'DELETE', url: '/restapi/images' },\n 'dashboard': { method: 'GET', isArray: true, url: '/restapi/images/dashboard' }\n });\n\n var pictures;\n var includesGlobal = false;\n\n function getAllAsync(refresh, includeGlobal) {\n if (!pictures || refresh || (!!pictures && includesGlobal != includeGlobal)) {\n includesGlobal = includeGlobal;\n pictures = repositorySvc.get(Picture, { includeGlobal: includeGlobal || false });\n }\n return pictures;\n }\n \n function getDashboardImages() {\n return repositorySvc.customGet('dashboard', Picture, { includeGlobal: true });\n }\n\n function prepareImageData(imageData, originalFormat, errorCallback, imageType) {\n\n var data = {\n imageBase64: '',\n imageType: imageType || 0, // 0 - Generic, 1 - Profile, 3 - Dashboard\n imageFormatType: decodeImageTypeFromData(imageData),\n convertToImageFormatType: originalFormat\n }\n\n switch (data.imageFormatType) {\n case 0:\n data.imageBase64 = imageData.substring(pngstr.length);\n break;\n case 1:\n data.imageBase64 = imageData.substring(jpgstr.length);\n break;\n default:\n var errorReason = $translate.instant('TXT_ALERT_UNSUPPORTED_IMAGE_TYPE');\n notificationSvc.notifyError($translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'), errorReason);\n\n if (!!errorCallback) {\n errorCallback(errorReason);\n }\n return null;\n }\n\n return data;\n }\n \n function insertDashboard(imageData, successCallback, errorCallback) {\n let data = prepareImageData(imageData, 1, errorCallback, 3);\n if (!data) {\n return;\n }\n return repositorySvc.insert(\n Picture, // $resource\n pictures, // collection\n data, // entity\n successCallback,\n errorCallback); \n }\n\n function insert(imageData, originalFormat, successCallback, errorCallback) {\n\n var data = prepareImageData(imageData, originalFormat, errorCallback);\n if (!data) {\n return;\n }\n\n return repositorySvc.insert(\n Picture, // $resource\n pictures, // collection\n data, // entity\n successCallback,\n errorCallback);\n }\n\n function remove(data, successCallback, errorCallback) {\n repositorySvc.remove(\n Picture, // $resource\n pictures, // collection\n data, // entity\n successCallback, // successCallback\n errorCallback,\n { imageUrl: data.imageUrl },\n 'imageUrl');\n }\n\n // -1 unknown, 0 - png, 1 - jpeg\n function decodeImageTypeFromData(imageData) {\n if (imageData.lastIndexOf(jpgstr, 0) === 0) {\n // jpeg\n return 1;\n } else if (imageData.lastIndexOf(pngstr, 0) === 0) {\n // png\n return 0;\n } else {\n return -1;\n }\n }\n\n return {\n getAllAsync: getAllAsync,\n insert: insert,\n remove: remove,\n decodeImageTypeFromData: decodeImageTypeFromData,\n prepareImageData: prepareImageData,\n getDashboardImages: getDashboardImages,\n insertDashboard: insertDashboard\n }\n }\n]);\n","'use strict';\n\nwbApp.factory('protectedStorageSvc', ['$resource', '$translate', 'notificationSvc', 'repositorySvc',\n function ($resource, $translate, notificationSvc, repositorySvc) {\n\n var ProtectedStorage = $resource('/restapi/protected-content/:id', {}, { \n 'getDirectory': { method: 'GET', isArray: true, url: '/restapi/protected-content' },\n 'getDownloadUrl': { method: 'POST', url: '/restapi/protected-content/create-download-url' },\n 'setPublicAccess': { method: 'POST', url: '/restapi/protected-content/set-public-access' },\n 'getUploadUrl': { method: 'POST', url: '/restapi/protected-content/create-upload-url' },\n 'createDirectory': { method: 'POST', url: '/restapi/protected-content/create-directory' },\n 'deleteFile': { method: 'DELETE', url: '/restapi/protected-content/delete-file' },\n 'deleteDirectory': { method: 'DELETE', url: '/restapi/protected-content/delete-directory' },\n 'findGalleryInfoByPaths': { method: 'POST', isArray: true, url: '/restapi/protected-content/gallery/find-by-paths' },\n 'updateGalleryInfo': { method: 'PUT', url: '/restapi/protected-content/gallery/:path' },\n });\n\n function getDirectory(path) {\n return repositorySvc.customGet('getDirectory', ProtectedStorage, { path: path });\n }\n \n function updateGalleryInfo(model, path) {\n return repositorySvc.customPutWithParams(\n 'updateGalleryInfo',\n ProtectedStorage,\n {\n path: path\n },\n model,\n null,\n null,\n false\n );\n }\n \n // paths: [\"PhotoAlbum\", \"PhotoAlbum2\"]\n // includeImages: true|false\n function findGalleryInfoByPaths(paths, includeImages) {\n return repositorySvc.customPostWithParams(\n 'findGalleryInfoByPaths',\n ProtectedStorage,\n {},\n {\n includeImages: !!includeImages,\n paths: paths\n },\n null,\n null,\n true);\n }\n\n function getDownloadUrl(path) {\n return repositorySvc.customPostWithParams(\n 'getDownloadUrl',\n ProtectedStorage,\n { objectUri: path },\n null,\n null,\n null,\n true);\n }\n\n function setPublicAccess(path, isPublic) {\n return repositorySvc.customPostWithParams(\n 'setPublicAccess',\n ProtectedStorage,\n {\n objectUri: path,\n isPublic: isPublic\n },\n null,\n null,\n null,\n true);\n }\n\n function getUploadUrl(path, contentType) {\n return repositorySvc.customPost(\n 'getUploadUrl',\n ProtectedStorage,\n {\n objectUri: path,\n contentType: contentType\n },\n null,\n null,\n true);\n }\n\n function createDirectory(path) {\n return repositorySvc.customPostWithParams(\n 'createDirectory',\n ProtectedStorage,\n { objectUri: path },\n null,\n null,\n null,\n true);\n }\n\n function deleteFile(path) {\n return repositorySvc.customPostWithParams(\n 'deleteFile',\n ProtectedStorage,\n { objectUri: path },\n null,\n null,\n null,\n true);\n }\n\n function deleteDirectory(path) {\n return repositorySvc.customPostWithParams(\n 'deleteDirectory',\n ProtectedStorage,\n { objectUri: path },\n null,\n null,\n null,\n true);\n }\n\n return {\n getDirectory: getDirectory,\n getDownloadUrl: getDownloadUrl,\n setPublicAccess: setPublicAccess,\n getUploadUrl: getUploadUrl,\n createDirectory: createDirectory,\n deleteFile: deleteFile,\n deleteDirectory: deleteDirectory,\n findGalleryInfoByPaths: findGalleryInfoByPaths,\n updateGalleryInfo: updateGalleryInfo\n }\n }\n]);\n","wbApp.controller('SurveyAnswerDetailCtrl', ['$scope', 'surveyResponseSvc',\nfunction ($scope, surveyResponseSvc) {\n // $scope.survey\n // $scope.surveyResponseID\n\n $scope.response = surveyResponseSvc.getByResponseIDAyns($scope.surveyResponseID);\n\n $scope.response.$promise.then(function (response) {\n $scope.model = surveyResponseSvc.getQuestionWithAnswersModel(\n $scope.survey.surveyQuestions,\n response.responseAnswers);\n });\n\n}]);\n","'use strict';\n\nwbApp.controller('SurveyAnswersCtrl', ['$scope', '$modal', 'surveyResponseSvc',\nfunction ($scope, $modal, surveyResponseSvc) {\n\n $scope.$on('surveySelectionChanged', function (e, newlySelectedSurvey) {\n if ($scope.survey.surveyID !== newlySelectedSurvey.surveyID) {\n $scope.surveyAnswers = surveyResponseSvc.getAllBySurveyIDAsync(newlySelectedSurvey.surveyID);\n $scope.survey = newlySelectedSurvey;\n }\n });\n\n $scope.surveyAnswersFilterOptions = {\n filterText: \"\"\n };\n\n $scope.onShowAnswers = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.survey = angular.copy($scope.survey);\n detailDialogPromise.$scope.surveyResponseID = data.surveyResponseID;\n detailDialogPromise.show();\n });\n }\n\n $scope.onGetExcelExport = function () {\n\n function success(data)\n {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n }\n\n function error(data)\n {\n\n }\n\n var res = surveyResponseSvc.getExcelExportBySurveyID($scope.survey.surveyID);\n res.$promise.then(success, error);\n }\n\n $scope.surveyAnswers = [];\n $scope.survey = {};\n\n $scope.answersGridOptions = {\n sortInfo: { fields: ['filledAt'], directions: ['dsc'] },\n columnDefs: [\n { field: 'studentFullName', displayName: \"TXT_LBL_STUDENT\", sort: 'humanName', width: '180px' },\n { field: 'semesterName', displayName: \"TXT_LBL_SEMESTER\", width: '120px' },\n { field: 'firstDate', displayName: \"TXT_SEC_COURSE_SCHEDULE\", cellFilter: 'date:EEE HH:mm', width: '80px' },\n { field: 'subjectName', displayName: \"TXT_LBL_SUBJECT\", width: '190px' },\n { field: 'courseFullName', displayName: \"TXT_VAL_RCPG_COURSE\", },\n { field: 'teacherFullName', displayName: \"TXT_LBL_EMPLOYEE\", width: '180px' },\n { field: 'filledAt', displayName: \"TXT_LBL_CREATED_AT\", cellFilter: \"date:'short'\", width: '110px' },\n { field: 'pctRating', displayName: \"TXT_LBL_RATING\", cellFilter: \"number:2\", width: '80px' },\n ],\n customCmds: [\n {\n text: 'TXT_MENU_VIEW_ANSWER',\n command: function (row) { $scope.onShowAnswers(row); }\n }, {\n text: 'TXT_EXPORT_SURVEY_ANSWERS_TO_EXCEL',\n command: function () { $scope.onGetExcelExport(); }\n }]\n };\n\n var detailDialogPromise = $modal({\n templateUrl: 'survey/survey-detail-tabs/answer-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);\n","wbApp.controller('SurveyDetailCtrl', ['$scope', 'surveySvc',\nfunction ($scope, surveySvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"survey/survey-detail-main-tab.html\"\n },\n {\n title: \"TXT_LBL_QUESTIONS\",\n template: \"survey/survey-detail-questions-tab.html\",\n paneScrollable: true\n }\n ];\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onQuestionAdd = function () {\n $scope.model.surveyQuestions.push(surveySvc.newQuestion());\n }\n\n $scope.onQuestionRemove = function (question) {\n var index = $scope.model.surveyQuestions.indexOf(question);\n if (index > -1) {\n $scope.model.surveyQuestions.splice(index, 1);\n }\n }\n\n $scope.onSurveyTypeChanged = function (question, surveyTypeID) {\n if (surveyTypeID === 3) {\n question.allowCustomNote = false;\n } else {\n question.allowCustomNote = true;\n }\n }\n\n $scope.isSaving = false;\n\n $scope.onSurveyDetailSave = function (model) {\n \n $scope.isSaving = true;\n\n if (!model.surveyID) {\n surveySvc.insert(model, success, error);\n } else {\n surveySvc.update(model, success, error);\n }\n\n function success() {\n $scope.isSaving = false;\n $scope.onSave();\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n\n}]);\n","wbApp.controller('SurveysCtrl', ['$scope', '$modal', 'surveySvc',\nfunction ($scope, $modal, surveySvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['name'], directions: ['dsc'] },\n columnDefs: [{ field: 'active', displayName: \"TXT_LBL_ACTIVE\", cellFilter: 'checkmark', width: '70px' },\n { field: 'name', displayName: \"TXT_LBL_NAME\", sort: 'locale', width: '180px' },\n { field: 'notes', displayName: \"TXT_LBL_DESCRIPTION\", sort: 'locale' },\n { field: 'isDefault', displayName: \"TXT_LBL_IS_DEFAULT\", cellFilter: 'checkmark', width: '70px' }\n ]\n };\n\n\n $scope.$on('refreshData', function (e, data) {\n refreshData();\n });\n\n function refreshData() {\n $scope.surveys = surveySvc.getAllNonDeleted(true);\n }\n\n refreshData();\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onSave = function () {\n refreshData();\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = surveySvc.newModel();\n detailDialogPromise.$scope.onSave = function () {\n refreshData();\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n surveySvc.remove(data).$promise.then(function () {\n refreshData();\n });\n }\n\n $scope.onRowSelected = function (data) {\n $scope.selectedSurvey = data;\n $scope.$broadcast('surveySelectionChanged', $scope.selectedSurvey);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_LBL_SURVEY_RESPONSES',\n template: \"survey/survey-detail-tabs/answers.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n var detailDialogPromise = $modal({\n templateUrl: 'survey/survey-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.directive('wbSurveyCombo', ['$timeout', '$translate', 'surveySvc',\n function ($timeout, $translate, surveySvc) {\n\n function formatResult(model) {\n if (!model) { return ''; }\n\n if (model.isDefault) {\n return \"\" + model.name + \"\";\n } else {\n return model.name;\n }\n\n return model.name;\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n var models = surveySvc.getAllActiveAsync(ctrl.$modelValue);\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_SURVEY'),\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n data: models,\n id: function (survey) { return survey.surveyID; }\n });\n \n ctrl.$render();\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return null;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n return value + \"\";\n }\n });\n\n ctrl.$render = function () {\n models.$promise.then(function () {\n\n if (!_.find(models, { surveyID: ctrl.$modelValue })) {\n // survey is not in the list, reload!\n var newModels = surveySvc.getAllActiveAsync(ctrl.$modelValue);\n newModels.$promise.then(function () {\n models.length = 0;\n models.push.apply(models, newModels);\n\n $(elm).select2('val', ctrl.$viewValue);\n });\n } else {\n $(elm).select2('val', ctrl.$viewValue);\n }\n });\n }\n\n elm.on('change', function (e) {\n scope.$apply(function () {\n ctrl.$setViewValue(e.val);\n });\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]);\n","'use strict';\n\nwbApp.directive('wbSurveyQuestionTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n ctrl.$parsers.unshift(function (viewValue) {\n if (viewValue === '1') {\n return 1;\n }\n if (viewValue === '2') {\n return 2;\n }\n return 3;\n });\n\n ctrl.$formatters.unshift(function (value) {\n return value + '';\n });\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n data: [\n { id: 1, text: 'TXT_QUESTION_TYPE_TRUE_FALSE' },\n { id: 2, text: 'TXT_QUESTION_TYPE_ONE_TO_FIVE' },\n { id: 3, text: 'TXT_QUESTION_TYPE_TEXT' }\n ]\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);\n","'use strict';\n\nwbApp.factory('surveyResponseSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n\n var SurveyResponse = $resource('/Api/SurveyResponses/GetAll', {}, {\n 'getByResponseID' : { method: 'GET', url: '/Api/SurveyResponses/Get', isArray: false },\n 'query': { method: 'GET', url: '/Api/SurveyResponses/GetDetailBySurveyID', isArray: true },\n 'getExcelExportBySurveyID': { method: 'POST', url: '/Api/SurveyResponses/GetExcelExportBySurveyID' }\n\n });\n\n function getByResponseIDAyns(surveyResponseID) {\n return repositorySvc.customGet('getByResponseID', SurveyResponse, { surveyResponseID: surveyResponseID });\n }\n\n function getAllBySurveyIDAsync(surveyID) {\n return repositorySvc.get(SurveyResponse, { surveyID: surveyID });\n }\n\n function getQuestionWithAnswersModel(questions, answers) {\n var res = [];\n\n _.forEach(questions, function (q) {\n var a = _.find(answers, { 'surveyQuestionID': q.surveyQuestionID });\n\n res.push({\n surveyQuestionTypeID: q.surveyQuestionTypeID,\n question: q.question,\n allowCustomNote: q.allowCustomNote,\n bitAnswer: !a ? true : a.bitAnswer,\n intAnswer: !a ? 3 : a.intAnswer,\n textAnswer: !a ? '' : a.textAnswer\n });\n });\n\n return res;\n }\n\n function getExcelExportBySurveyID(surveyID) {\n return repositorySvc.customPost('getExcelExportBySurveyID', SurveyResponse, {\n surveyID: surveyID\n });\n }\n\n return {\n getAllBySurveyIDAsync: getAllBySurveyIDAsync,\n getByResponseIDAyns: getByResponseIDAyns,\n getQuestionWithAnswersModel: getQuestionWithAnswersModel,\n getExcelExportBySurveyID: getExcelExportBySurveyID\n }\n }\n]);","wbApp.controller('AccountingSettingsCtrl', ['$scope', '$q', '$translate', 'accountingSettingsSvc', 'tenantSettingSvc', 'notificationSvc',\nfunction ($scope, $q, $translate, accountingSettingsSvc, tenantSettingSvc, notificationSvc) {\n\n var isActive = false;\n var loaded = false;\n\n function loadData() {\n $scope.isBusy = true;\n $scope.accountingSetting = accountingSettingsSvc.getAsync();\n $scope.tenantSetting = {};\n $scope.tenantSettingSrc = tenantSettingSvc.getAsync();\n $q.all([$scope.accountingSetting.$promise, $scope.tenantSettingSrc.$promise]).then(function () {\n $scope.accountingSettingOrig = angular.copy($scope.accountingSetting);\n $scope.tenantSetting = angular.copy($scope.tenantSettingSrc);\n $scope.tenantSettingOrig = angular.copy($scope.tenantSettingSrc);\n\n $scope.isBusy = false;\n });\n }\n\n $scope.$on('refreshData', function (e, data) {\n if (isActive) {\n loadData();\n }\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 2) {\n if (!isActive) {\n isActive = true;\n\n if (!loaded) {\n loadData();\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.onCancel = function () {\n loadData();\n }\n\n $scope.onModelSave = function (accountingSettingData, tenantSettingData) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n var updates = 0;\n\n if (!$scope.accountingSettingIsUnchanged(accountingSettingData)) {\n updates++;\n\n accountingSettingsSvc.update(accountingSettingData, function (model) {\n $scope.accountingSetting = model;\n $scope.accountingSettingOrig = angular.copy($scope.accountingSetting);\n\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n }, function (errorResult) {\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n }\n\n if (!$scope.tenantSettingIsUnchanged(tenantSettingData)) {\n updates++;\n\n tenantSettingSvc.getAsync().$promise.then(function (currentSetting) {\n\n var current = angular.copy(currentSetting);\n\n // Set only fields which we do set on this tab\n current.printedInvoiceName = tenantSettingData.printedInvoiceName;\n current.sendInvoicesToClients = tenantSettingData.sendInvoicesToClients;\n current.invoiceDueDateType = tenantSettingData.invoiceDueDateType;\n current.invoiceDueDates = tenantSettingData.invoiceDueDates;\n current.invoiceDueDate = tenantSettingData.invoiceDueDate;\n current.cashReceiptPurposeForCourses = tenantSettingData.cashReceiptPurposeForCourses;\n current.disableCashReceiptNumbering = tenantSettingData.disableCashReceiptNumbering;\n current.autoPaymentConfirmationPrintForCardPayments = tenantSettingData.autoPaymentConfirmationPrintForCardPayments;\n current.cashReceiptPurposeForActions = tenantSettingData.cashReceiptPurposeForActions;\n current.cashReceiptPurposeForActivitiesReconciliation = tenantSettingData.cashReceiptPurposeForActivitiesReconciliation;\n current.cashReceiptPurposeForActivitiesReccuring = tenantSettingData.cashReceiptPurposeForActivitiesReccuring;\n current.showInvoiceNoInCashReceipt = tenantSettingData.showInvoiceNoInCashReceipt;\n current.createTaxDocuments = tenantSettingData.createTaxDocuments;\n current.enableAmortizationSchedules = tenantSettingData.enableAmortizationSchedules;\n current.putStudentAgeIntoInvoices = tenantSettingData.putStudentAgeIntoInvoices;\n current.enableQrCodeOnInvoices = tenantSettingData.enableQrCodeOnInvoices;\n\n tenantSettingSvc.update(current, function (model) {\n $scope.tenantSetting = angular.copy(model);\n $scope.tenantSettingOrig = angular.copy(model);\n\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n }, function (errorResult) {\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n });\n }\n }\n\n $scope.accountingSettingIsUnchanged = function (data) {\n return angular.equals(data, $scope.accountingSettingOrig);\n }\n\n $scope.tenantSettingIsUnchanged = function (data) {\n return angular.equals(data, $scope.tenantSettingOrig);\n }\n\n $scope.detailIsUnchanged = function (accountingSettingData, tenantSettingData) {\n return $scope.accountingSettingIsUnchanged(accountingSettingData) &&\n $scope.tenantSettingIsUnchanged(tenantSettingData);\n }\n}]);\n","wbApp.controller('clientSettingsCtrl', ['$scope', '$q', '$translate', 'tenantSettingSvc', 'notificationSvc', 'picturesSvc', '$timeout', 'messageBoxSvc',\nfunction ($scope, $q, $translate, tenantSettingSvc, notificationSvc, picturesSvc, $timeout, messageBoxSvc) {\n\n const tabId = 10;\n \n var isActive = false;\n var loaded = false;\n \n $scope.onCheckboxClick = function(index) {\n for(let i = 0; i < $scope.images.length; i++) {\n $scope.images[i].checked = i === index;\n }\n\n $scope.tenantSetting.clientTitlePictureUrl = $scope.images[index].imageUrl;\n }\n \n $scope.newClientDesignThemeData = {};\n \n $scope.onUpdateThemeData = function() {\n let data = transformThemeDataOut($scope.newClientDesignThemeData);\n $scope.tenantSetting.newClientDesignThemeData = JSON.stringify(data);\n }\n \n function resetThemeData() {\n $scope.newClientDesignThemeData.seedColor = \"#561581\";\n // Primary\n $scope.newClientDesignThemeData.primary = \"#561581\";\n $scope.newClientDesignThemeData.onPrimary = \"#FBF8FE\";\n $scope.newClientDesignThemeData.primaryContainer = \"#E8DAFC\";\n $scope.newClientDesignThemeData.onPrimaryContainer = \"#240539\";\n // Secondary\n $scope.newClientDesignThemeData.secondary = \"#F85830\";\n $scope.newClientDesignThemeData.onSecondary = \"#F9E9E8\";\n $scope.newClientDesignThemeData.secondaryContainer = \"#FAAB95\";\n $scope.newClientDesignThemeData.onSecondaryContainer = \"#B73A1C\";\n // Tertiary\n $scope.newClientDesignThemeData.tertiary = \"#33C236\";\n $scope.newClientDesignThemeData.onTertiary = \"#E8F8E8\";\n $scope.newClientDesignThemeData.tertiaryContainer = \"#A3E1A0\";\n $scope.newClientDesignThemeData.onTertiaryContainer = \"#006F00\";\n // Error\n $scope.newClientDesignThemeData.error = \"#D23031\";\n $scope.newClientDesignThemeData.onError = \"#FFEBEE\";\n $scope.newClientDesignThemeData.errorContainer = \"#EE9A9A\";\n $scope.newClientDesignThemeData.onErrorContainer = \"#B61E1D\";\n // Surface\n $scope.newClientDesignThemeData.surface = \"#FFFFFF\";\n $scope.newClientDesignThemeData.onSurface = \"#240539\";\n $scope.newClientDesignThemeData.surfaceTint = \"#FFFFFF\";\n $scope.newClientDesignThemeData.surfaceVariant = \"#FAFAFA\";\n $scope.newClientDesignThemeData.outline = \"#E0E0E0\";\n\n $scope.onUpdateThemeData();\n }\n \n function transformThemeDataOut(themeData) {\n let result = {};\n for (const property in themeData) {\n result[property] = themeData[property].replace(/(#)(\\w\\w\\w\\w\\w\\w)$/, \"$1FF$2\");\n }\n return result;\n }\n\n function transformThemeDataIn(themeData) {\n let result = {};\n for (const property in themeData) {\n result[property] = themeData[property].replace(/(#)(\\w\\w)(\\w\\w\\w\\w\\w\\w)$/, \"$1$3\");\n }\n return result;\n }\n \n function loadData() {\n $scope.isBusy = true;\n $scope.tenantSetting = {};\n $scope.tenantSettingSrc = tenantSettingSvc.getAsync();\n $scope.images = picturesSvc.getDashboardImages();\n $q.all([$scope.tenantSettingSrc.$promise, $scope.images.$promise]).then(function () {\n $scope.tenantSetting = angular.copy($scope.tenantSettingSrc);\n $scope.newClientDesignThemeData = {};\n if ($scope.tenantSettingSrc.newClientDesignThemeData !== \"\") {\n let themeData = JSON.parse($scope.tenantSettingSrc.newClientDesignThemeData);\n $scope.newClientDesignThemeData = transformThemeDataIn(themeData);\n }\n if (!$scope.newClientDesignThemeData.seedColor) {\n resetThemeData();\n }\n\n $scope.tenantSettingOrig = angular.copy($scope.tenantSetting);\n \n $scope.isBusy = false;\n\n for(let i = 0; i < $scope.images.length; i++) {\n $scope.images[i].checked = $scope.images[i].imageUrl === $scope.tenantSetting.clientTitlePictureUrl;\n }\n });\n }\n\n $scope.$on('refreshData', function (e, data) {\n if (isActive) {\n loadData();\n }\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === tabId) {\n if (!isActive) {\n isActive = true;\n\n if (!loaded) {\n loadData();\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.onCancel = function () {\n loadData();\n }\n\n $scope.onModelSave = function (tenantSettingData) {\n\n if ($scope.isSaving) {\n return;\n }\n\n if (!$scope.detailIsUnchanged(tenantSettingData)) {\n\n $scope.isSaving = true;\n \n let tenantSettingCurrent = tenantSettingSvc.getAsync();\n tenantSettingCurrent.$promise.then(function (current) {\n\n // Set only fields which we do set on this tab\n current.clientTitlePictureUrl = tenantSettingData.clientTitlePictureUrl;\n current.newClientDesignThemeCode = tenantSettingData.newClientDesignThemeCode;\n if (current.newClientDesignThemeCode === 0) {\n current.newClientDesignThemeData = tenantSettingData.newClientDesignThemeData;\n } else {\n current.newClientDesignThemeData = \"\";\n }\n\n tenantSettingSvc.update(current, function (model) {\n $scope.tenantSetting = angular.copy(model);\n $scope.tenantSettingOrig = angular.copy(model);\n\n $scope.isSaving = false;\n }, function (errorResult) {\n $scope.isSaving = false;\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n });\n } \n }\n\n $scope.detailIsUnchanged = function (tenantSettingData) {\n return angular.equals(tenantSettingData, $scope.tenantSettingOrig);\n }\n\n $scope.imageUpload = null;\n $scope.imageUploadError = null;\n \n let handleFileSelect = function (evt) {\n $scope.imageUpload = null;\n $scope.imageUploadError = null;\n let file = evt.currentTarget.files[0];\n if (evt.currentTarget.files[0].size > 250 * 1024) {\n $scope.$apply(function ($scope) {\n $scope.imageUploadError = $translate.instant('TXT_LBL_DASHBOARD_IMAGE_TOO_BIG');\n });\n return;\n }\n let reader = new FileReader();\n reader.onload = function (evt) {\n let img = new Image();\n img.src = evt.target.result;\n img.onload = function() {\n if (img.width !== 1920 || img.height !== 264) {\n $scope.$apply(function ($scope) {\n $scope.imageUploadError = $translate.instant('TXT_LBL_DASHBOARD_IMAGE_INCORRECT_SIZE');\n });\n \n return;\n }\n \n $scope.$apply(function ($scope) {\n $scope.imageUpload = evt.target.result;\n });\n };\n };\n reader.readAsDataURL(file);\n };\n \n $scope.onUploadClick = function () {\n $scope.isImageUploading = true;\n \n picturesSvc.insertDashboard($scope.imageUpload, function() {\n $scope.isImageUploading = false;\n $scope.imageUpload = null;\n $scope.imageUploadError = null;\n \n loadData();\n }, function (err) {\n $scope.isImageUploading = false;\n $scope.imageUploadError = err;\n });\n }\n \n $scope.onDeletePictureBtnClick = function(picture) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_DELETE',\n message: 'TXT_TEXT_CONFIRM_DELETE_PICURE',\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () { picturesSvc.remove(picture, function() {\n loadData();\n }); }\n }]\n });\n }\n\n $timeout(function () {\n angular.element(document.querySelector('#fileInput')).on('change', handleFileSelect);\n }, 1000);\n}]);\n","wbApp.controller('DataExportHistoryCtrl', ['$scope', '$translate', '$filter', 'dataExportHistorySvc',\nfunction ($scope, $translate, $filter, dataExportHistorySvc) {\n\n $scope.gridSettings = {\r\n grouping: {\r\n autoExpandAll: false\r\n },\r\n columns: [\n { dataField: 'month', caption: $translate.instant('TXT_LBL_MONTH'), dataType: 'string', groupIndex: 1},\n {\r\n dataField: 'createdAt', caption: $translate.instant('TXT_LBL_CREATED_AT'),\n dataType: 'date', format: 'shortDateShortTime',\r\n sortOrder: 'desc',\r\n width: '130px'\r\n },\n { dataField: 'dataExportType', caption: $translate.instant('TXT_LBL_EXPORT_TYPE'), dataType: 'string', width: '130px' },\n { dataField: 'exportedObjectType', caption: $translate.instant('TXT_LBL_OBJECT_TYPE'), dataType: 'string', width: '90px' },\n { dataField: 'exportedObjectID', caption: $translate.instant('TXT_LBL_OBJECT_ID'), dataType: 'number', width: '80px' },\n { dataField: 'errorCodeStr', caption: $translate.instant('TXT_LBL_CODE'), dataType: 'string', width: '80px' },\n { dataField: 'errorText', caption: $translate.instant('TXT_LBL_TEXT'), dataType: 'string' },\n ],\r\n summary: {\r\n groupItems: [{\r\n column: \"dataExportHistoryID\",\r\n summaryType: \"count\",\r\n displayFormat: \"{0}\",\r\n alignByColumn: false\r\n }, {\r\n column: \"createdAt\",\r\n summaryType: \"min\",\r\n displayFormat: \" \",\r\n alignByColumn: true,\r\n showInColumn: 'errorText'\r\n }],\r\n },\r\n sortByGroupSummaryInfo: [\r\n {\r\n summaryItem: 1,\r\n sortOrder: 'desc'\r\n }\r\n ]\r\n }\n\n $scope.$on('refreshData', function (e, data) {\r\n $scope.dataExportHistory = dataExportHistorySvc.getAll(true);\n });\n\n $scope.dataExportHistory = dataExportHistorySvc.getAll();\n}]);\n","wbApp.controller('HtmlContentCtrl', ['$scope', '$q', '$translate', '$timeout', 'contentSvc', 'notificationSvc', 'tenantSettingSvc',\nfunction ($scope, $q, $translate, $timeout, contentSvc, notificationSvc, tenantSettingSvc) {\n\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\n \n $scope.htmlContentType = 0;\n $scope.tabIndex = 4;\n\n $scope.init = function(htmlContentType, tabIndex)\n {\n $scope.htmlContentType = htmlContentType;\n $scope.tabIndex = tabIndex;\n }\n\n var isActive = false;\n var loaded = false;\n\n function loadData() {\n $scope.isBusy = true;\n $scope.model = contentSvc.getById($scope.htmlContentType);\n $scope.model.$promise.then(function () {\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.isBusy = false;\n }, function (error) {\n if (!!error && error.status == 404) {\n $scope.model = {\n id: $scope.htmlContentType + '',\n isNew: true,\n htmlData: null,\n };\n $scope.modelOrig = angular.copy($scope.model);\n }\n });\n }\n\n $scope.$on('refreshData', function (e, data) {\n if (isActive) {\n loadData();\n }\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === $scope.tabIndex) {\n if (!isActive) {\n isActive = true;\n\n if (!loaded) {\n loadData();\n loaded = true;\n }\n\n $timeout(function () {\n angular.element('#terms-and-conditions-editor').trigger(\"resize\");\n }, 100);\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.onCancel = function () {\n loadData();\n }\n\n $scope.onModelSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (!data.htmlData) {\n if (!data.isNew) {\n contentSvc.remove(data.id).$promise.then(function () {\n data.id = $scope.htmlContentType + '';\n data.isNew = true;\n $scope.model = data;\n $scope.modelOrig = angular.copy($scope.model);\n $scope.isSaving = false;\n }, function (errorResult) {\n $scope.isSaving = false;\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n } else {\n $scope.isSaving = false;\n }\n }\n else {\n\n contentSvc.update(data).$promise.then(function () {\n $scope.model = data;\n $scope.model.isNew = false;\n $scope.modelOrig = angular.copy(data);\n\n $scope.isSaving = false;\n }, function (errorResult) {\n $scope.isSaving = false;\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n }\n}]);\n","wbApp.controller('MainSettingsCtrl', ['$scope', '$q', '$translate', 'mainSettingsSvc', 'tenantSettingSvc', 'notificationSvc', 'tenantInfo',\nfunction ($scope, $q, $translate, mainSettingsSvc, tenantSettingSvc, notificationSvc, tenantInfo) {\n\n var isActive = true;\n var loaded = true;\n\n function loadData() {\n $scope.isBusy = true;\n $scope.tenantInfo = tenantInfo;\n $scope.mainSetting = mainSettingsSvc.getAsync();\n $scope.tenantSetting = {};\n $scope.tenantSettingSrc = tenantSettingSvc.getAsync();\n $q.all([$scope.mainSetting.$promise, $scope.tenantSettingSrc.$promise]).then(function () {\n $scope.mainSettingOrig = angular.copy($scope.mainSetting);\n $scope.tenantSetting = angular.copy($scope.tenantSettingSrc);\n $scope.tenantSettingOrig = angular.copy($scope.tenantSettingSrc);\n\n $scope.isBusy = false;\n });\n }\n\n $scope.$on('refreshData', function (e, data) {\n if (isActive) {\n loadData();\n }\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 0) {\n if (!isActive) {\n isActive = true;\n\n if (!loaded) {\n loadData();\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.onCancel = function () {\n loadData();\n }\n\n $scope.onModelSave = function (mainSettingData, tenantSettingData) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n var updates = 0;\n\n if (!$scope.mainSettingIsUnchanged(mainSettingData)) {\n updates++;\n\n mainSettingsSvc.update(mainSettingData, function (model) {\n $scope.mainSetting = model;\n $scope.mainSettingOrig = angular.copy($scope.mainSetting);\n\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n }, function (errorResult) {\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n }\n\n if (!$scope.tenantSettingIsUnchanged(tenantSettingData)) {\n updates++;\n\n tenantSettingSvc.getAsync().$promise.then(function (currentSetting) {\n\n var current = angular.copy(currentSetting);\n\n // Set only fields which we do set on this tab\n current.registrationOpenPicture = tenantSettingData.registrationOpenPicture;\n current.facebookPageUrl = tenantSettingData.facebookPageUrl;\n current.customerLogos = tenantSettingData.customerLogos;\n current.instagramUrl = tenantSettingData.instagramUrl;\n current.twitterUrl = tenantSettingData.twitterUrl;\n\n tenantSettingSvc.update(current, function (model) {\n $scope.tenantSetting = angular.copy(model);\n $scope.tenantSettingOrig = angular.copy(model);\n\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n }, function (errorResult) {\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n });\n }\n }\n\n $scope.mainSettingIsUnchanged = function (data) {\n return angular.equals(data, $scope.mainSettingOrig);\n }\n\n $scope.tenantSettingIsUnchanged = function (data) {\n return angular.equals(data, $scope.tenantSettingOrig);\n }\n\n $scope.detailIsUnchanged = function (mainSettingData, tenantSettingData) {\n return $scope.mainSettingIsUnchanged(mainSettingData) &&\n $scope.tenantSettingIsUnchanged(tenantSettingData);\n }\n\n loadData();\n}]);\n","wbApp.controller('NotificationSettingsCtrl', ['$scope', '$q', '$translate', 'userSettingSvc', 'tenantSettingSvc', 'notificationSvc',\nfunction ($scope, $q, $translate, userSettingSvc, tenantSettingSvc, notificationSvc) {\n\n var isActive = false;\n var loaded = false;\n\n function loadData() {\n $scope.isBusy = true;\n $scope.userSettingSrc = userSettingSvc.getAsync();\n $scope.tenantSetting = {};\n $scope.tenantSettingSrc = tenantSettingSvc.getAsync();\n $q.all([$scope.userSettingSrc.$promise, $scope.tenantSettingSrc.$promise]).then(function () {\n $scope.userSetting = angular.copy($scope.userSettingSrc);\n $scope.userSettingOrig = angular.copy($scope.userSettingSrc);\n $scope.tenantSetting = angular.copy($scope.tenantSettingSrc);\n $scope.tenantSettingOrig = angular.copy($scope.tenantSettingSrc);\n\n $scope.isBusy = false;\n });\n }\n\n $scope.$on('refreshData', function (e, data) {\n if (isActive) {\n loadData();\n }\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 3) {\n if (!isActive) {\n isActive = true;\n\n if (!loaded) {\n loadData();\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.onCancel = function () {\n loadData();\n }\n\n $scope.onModelSave = function (userSettingData, tenantSettingData) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n var updates = 0;\n\n if (!$scope.userSettingIsUnchanged(userSettingData)) {\n updates++;\n\n userSettingSvc.saveAsync(userSettingData, function (model) {\n $scope.userSetting = angular.copy(model);\n $scope.userSettingOrig = angular.copy(model);\n\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n }, function (errorResult) {\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n }\n\n if (!$scope.tenantSettingIsUnchanged(tenantSettingData)) {\n updates++;\n\n var tenantSettingCurrent = tenantSettingSvc.getAsync();\n tenantSettingCurrent.$promise.then(function (current) {\n\n // Set only fields which we do set on this tab\n current.sendEmailsToClients = tenantSettingData.sendEmailsToClients;\n current.disableInformTeachers = tenantSettingData.disableInformTeachers;\n current.enableSMSSupport = tenantSettingData.enableSMSSupport;\n current.courseRegistrationQuestionCCToTeacher = tenantSettingData.courseRegistrationQuestionCCToTeacher;\n current.disableAllEmails = tenantSettingData.disableAllEmails;\n current.disableAllEmailsExceptUserRegistration = tenantSettingData.disableAllEmailsExceptUserRegistration;\n current.allowTeacherEmailInClientSection = tenantSettingData.allowTeacherEmailInClientSection;\n current.enableUserCreatedNotification = tenantSettingData.enableUserCreatedNotification;\n current.enableCoursePaymentEvidenceNotification = tenantSettingData.enableCoursePaymentEvidenceNotification;\n current.enableAttendanceExcusedCancelledNotification = tenantSettingData.enableAttendanceExcusedCancelledNotification;\n current.enableCourseScheduleDateChangedNotification = tenantSettingData.enableCourseScheduleDateChangedNotification;\n current.enableStudentActionRegistrationDeleteNotification = tenantSettingData.enableStudentActionRegistrationDeleteNotification;\n current.enableStudentCourseRegistrationPriceChangeNotification = tenantSettingData.enableStudentCourseRegistrationPriceChangeNotification;\n current.enableAttendanceActionExcusedCancelledNotification = tenantSettingData.enableAttendanceActionExcusedCancelledNotification;\n current.enableStudentAddedToWaitQueueNotification = tenantSettingData.enableStudentAddedToWaitQueueNotification;\n current.enableStudentRemovedFromActionWaitQueueNotification = tenantSettingData.enableStudentRemovedFromActionWaitQueueNotification;\n current.enableAttendancePreviewInterestNotification = tenantSettingData.enableAttendancePreviewInterestNotification;\n current.enableUserPasswordChangedNotification = tenantSettingData.enableUserPasswordChangedNotification;\n current.enableAttendanceExcusedNotification = tenantSettingData.enableAttendanceExcusedNotification;\n current.enableAttendanceNewOneOffNotification = tenantSettingData.enableAttendanceNewOneOffNotification;\n current.enableCourseScheduleTeacherChangedNotification = tenantSettingData.enableCourseScheduleTeacherChangedNotification;\n current.enableSendRequestForPaymentNotification = tenantSettingData.enableSendRequestForPaymentNotification;\n current.enableAttendanceActionExcusedNotification = tenantSettingData.enableAttendanceActionExcusedNotification;\n current.enableStudentCourseInterestRegistrationNotification = tenantSettingData.enableStudentCourseInterestRegistrationNotification;\n current.enableStudentRemovedFromWaitQueueNotification = tenantSettingData.enableStudentRemovedFromWaitQueueNotification;\n current.enableNotExcusedNotification = tenantSettingData.enableNotExcusedNotification;\n current.enableStudentActionRegistrationPriceChange = tenantSettingData.enableStudentActionRegistrationPriceChange;\n current.enableStudentCourseRegistrationNotification = tenantSettingData.enableStudentCourseRegistrationNotification;\n current.enableAttendanceExcusedNoCompensationNotification = tenantSettingData.enableAttendanceExcusedNoCompensationNotification;\n current.enableAttendanceNewAmendNotification = tenantSettingData.enableAttendanceNewAmendNotification;\n current.enableStudentActionRegistrationNotification = tenantSettingData.enableStudentActionRegistrationNotification;\n current.enableCourseScheduleNoteChangedNotification = tenantSettingData.enableCourseScheduleNoteChangedNotification;\n current.enableAttendanceActionExcusedNoCompensationNotification = tenantSettingData.enableAttendanceActionExcusedNoCompensationNotification;\n current.enableAttendanceNoteChangedNotification = tenantSettingData.enableAttendanceNoteChangedNotification;\n current.enableStudentAddedToActionWaitQueueNotification = tenantSettingData.enableStudentAddedToActionWaitQueueNotification;\n current.enableAttendancePreviewNotification = tenantSettingData.enableAttendancePreviewNotification;\n current.coursePaymentEvidenceCCTeacher = tenantSettingData.coursePaymentEvidenceCCTeacher;\n\n\n current.enableActivityAttendanceChangeNotification = tenantSettingData.enableActivityAttendanceChangeNotification;\n current.enableActivityReconciliationCreatedNotification = tenantSettingData.enableActivityReconciliationCreatedNotification;\n current.enableActivityReconciliationPaymentEvidenceNotification = tenantSettingData.enableActivityReconciliationPaymentEvidenceNotification;\n current.enableActivityAttendanceFoodTakenNotification = tenantSettingData.enableActivityAttendanceFoodTakenNotification;\n current.enableActivityFoodOrderNotification = tenantSettingData.enableActivityFoodOrderNotification;\n current.enableRegisterActivityInterestNotification = tenantSettingData.enableRegisterActivityInterestNotification;\n current.enableSurveyRequestNotification = tenantSettingData.enableSurveyRequestNotification;\n current.enableCourseRegistrationQuestionNotification = tenantSettingData.enableCourseRegistrationQuestionNotification;\n current.enableOnlineLessonReminderNotification = tenantSettingData.enableOnlineLessonReminderNotification;\n current.enableOnlineLessonStartedNotification = tenantSettingData.enableOnlineLessonStartedNotification;\n current.enableScheduledInvoiceIssuedNotification = tenantSettingData.enableScheduledInvoiceIssuedNotification;\n current.enableActivityScheduleNoteChangeNotification = tenantSettingData.enableActivityScheduleNoteChangeNotification; \n current.enableTaxDocumentCreatedNotification = tenantSettingData.enableTaxDocumentCreatedNotification;\n current.enableNewConsentAssignedNotification = tenantSettingData.enableNewConsentAssignedNotification;\n current.enableAmortizationSchedulePaymentNotification = tenantSettingData.enableAmortizationSchedulePaymentNotification;\n\n current.enableFormResponseCreatedNotification = tenantSettingData.enableFormResponseCreatedNotification;\n current.enableFullCourseInterestNotification = tenantSettingData.enableFullCourseInterestNotification;\n current.enableStudentActionRegistrationAutoDeleteNotification = tenantSettingData.enableStudentActionRegistrationAutoDeleteNotification;\n current.EnableOnlineMeetingRecordingCompletedNotification = tenantSettingData.enableOnlineMeetingRecordingCompletedNotification;\n\n current.enableReservationPaymentEvidenceNotification = tenantSettingData.enableReservationPaymentEvidenceNotification;\n\n tenantSettingSvc.update(current, function (model) {\n $scope.tenantSetting = angular.copy(model);\n $scope.tenantSettingOrig = angular.copy(model);\n\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n }, function (errorResult) {\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n });\n }\n }\n\n $scope.userSettingIsUnchanged = function (data) {\n return angular.equals(data, $scope.userSettingOrig);\n }\n\n $scope.tenantSettingIsUnchanged = function (data) {\n return angular.equals(data, $scope.tenantSettingOrig);\n }\n\n $scope.detailIsUnchanged = function (userSettingData, tenantSettingData) {\n return $scope.userSettingIsUnchanged(userSettingData) &&\n $scope.tenantSettingIsUnchanged(tenantSettingData);\n }\n}]);\n","wbApp.controller('SettingsSettingsCtrl', ['$scope', '$q', '$translate', 'tenantSettingSvc', 'dataExportSettingSvc', 'notificationSvc', 'tenantInfo',\r\nfunction ($scope, $q, $translate, tenantSettingSvc, dataExportSettingSvc, notificationSvc, tenantInfo) {\r\n\r\n var isActive = false;\r\n var loaded = false;\r\n\r\n $scope.isFranchiseCentral = tenantInfo.isFranchiseCentral;\r\n $scope.isFranchiseCentralAndSupportSubjectLicenses = tenantInfo.isFranchiseCentral && tenantInfo.franchiseCentralSettings.supportSubjectLicenses;\r\n\r\n function loadData() {\r\n $scope.isBusy = true;\r\n $scope.tenantSetting = {};\r\n $scope.tenantSettingSrc = tenantSettingSvc.getAsync();\r\n $scope.dataExportSetting = dataExportSettingSvc.getAsync();\r\n $q.all([$scope.dataExportSetting.$promise, $scope.tenantSettingSrc.$promise]).then(function () {\r\n $scope.tenantSetting = angular.copy($scope.tenantSettingSrc);\r\n $scope.tenantSettingOrig = angular.copy($scope.tenantSettingSrc);\r\n $scope.dataExportSettingOrig = angular.copy($scope.dataExportSetting);\r\n\r\n $scope.isBusy = false;\r\n });\r\n }\r\n\r\n $scope.$on('refreshData', function (e, data) {\r\n if (isActive) {\r\n loadData();\r\n }\r\n });\r\n\r\n $scope.$on('activeTabChanged', function (e, data) {\r\n if (data.activeTab === 1) {\r\n if (!isActive) {\r\n isActive = true;\r\n\r\n if (!loaded) {\r\n loadData();\r\n loaded = true;\r\n }\r\n }\r\n } else {\r\n isActive = false;\r\n }\r\n });\r\n\r\n $scope.onCancel = function () {\r\n loadData();\r\n }\r\n\r\n $scope.onModelSave = function (dataExportSettingData, data) {\r\n\r\n if ($scope.isSaving) {\r\n return;\r\n }\r\n\r\n $scope.isSaving = true;\r\n\r\n var updates = 0;\r\n\r\n if (!$scope.dataExportSettingIsUnchanged(dataExportSettingData)) {\r\n updates++;\r\n\r\n dataExportSettingSvc.update(dataExportSettingData, function (model) {\r\n $scope.dataExportSetting = model;\r\n $scope.dataExportSettingOrig = angular.copy($scope.dataExportSetting);\r\n\r\n updates--;\r\n if (!updates) {\r\n $scope.isSaving = false;\r\n }\r\n }, function (errorResult) {\r\n updates--;\r\n if (!updates) {\r\n $scope.isSaving = false;\r\n }\r\n\r\n notificationSvc.notifyError(\r\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\r\n notificationSvc.translateError(errorResult));\r\n });\r\n }\r\n\r\n if (!$scope.tenantSettingIsUnchanged(data)) {\r\n updates++;\r\n\r\n tenantSettingSvc.getAsync().$promise.then(function (currentSetting) {\r\n\r\n var current = angular.copy(currentSetting);\r\n\r\n // Apply only data we are setting in on this tab\r\n current.enableUserRegistration = data.enableUserRegistration;\r\n current.defaultNationality = data.defaultNationality;\r\n current.quickUserRegistrationMode = data.quickUserRegistrationMode;\r\n current.courseInterestsSupport = data.courseInterestsSupport;\r\n current.allowClientActionRegistration = data.allowClientActionRegistration;\r\n current.coursePreviewOnlyRegistration = data.coursePreviewOnlyRegistration;\r\n current.sortNamesBySurname = data.sortNamesBySurname;\r\n current.showArrearInsteadOfPayments = data.showArrearInsteadOfPayments;\r\n current.showArrearInMyCourses = data.showArrearInMyCourses;\r\n current.enableZoomIntegration = data.enableZoomIntegration;\r\n current.readOnlyClientCourseRegistration = data.readOnlyClientCourseRegistration;\r\n current.allowClientCourseRegistration = data.allowClientCourseRegistration;\r\n current.allowShareOnFBForCourses = data.allowShareOnFBForCourses;\r\n current.allowShareOnFBForActions = data.allowShareOnFBForActions;\r\n current.enableSMSInWaitQueueAutoBooking = data.enableSMSInWaitQueueAutoBooking;\r\n current.showQuickNavOnHomePage = data.showQuickNavOnHomePage;\r\n current.disableExcuseInMyCourses = data.disableExcuseInMyCourses;\r\n current.courseRegistrationAgreement = data.courseRegistrationAgreement;\r\n current.noOfDaysToShowAction = data.noOfDaysToShowAction;\r\n current.showHealthInCourseRegistration = data.showHealthInCourseRegistration;\r\n current.showAttendantHealthInCourseRegistration = data.showAttendantHealthInCourseRegistration;\r\n current.sendApplicationForm = data.sendApplicationForm;\r\n current.showClassroomFilterInCourses = data.showClassroomFilterInCourses;\r\n current.showLessonsRemaining = data.showLessonsRemaining; \r\n current.showNearestLessonInCourses = data.showNearestLessonInCourses;\r\n current.showPriceInCourseRegistration = data.showPriceInCourseRegistration;\r\n current.useTotalPriceForCourses = data.useTotalPriceForCourses;\r\n current.noteDescriptionInCourseRegistration = data.noteDescriptionInCourseRegistration;\r\n current.showCourseTypeFilterInCourses = data.showCourseTypeFilterInCourses;\r\n current.noOfAllowedOneOffs = data.noOfAllowedOneOffs;\r\n current.showNoteInCourseRegistration = data.showNoteInCourseRegistration;\r\n current.coursesSortByDate = data.coursesSortByDate;\r\n current.scheduleVisibleTimeStart = data.scheduleVisibleTimeStart;\r\n current.clientScheduleWeekView = data.clientScheduleWeekView;\r\n current.scheduleEnableAutoHourRange = data.scheduleEnableAutoHourRange;\r\n current.disableClientCalendar = data.disableClientCalendar;\r\n current.scheduleVisibleTimeEnd = data.scheduleVisibleTimeEnd;\r\n current.scheduleDayViewResourcesPerPage = data.scheduleDayViewResourcesPerPage;\r\n current.scheduleTimeScale = data.scheduleTimeScale;\r\n current.showAllCoursesInClientSchedule = data.showAllCoursesInClientSchedule;\r\n current.courseExcuseThresholdType = data.courseExcuseThresholdType;\r\n current.courseExcuseThreshold = data.courseExcuseThreshold;\r\n current.showContatInClientAttendance = data.showContatInClientAttendance;\r\n current.clientAttendanceShowStudentNote = data.clientAttendanceShowStudentNote;\r\n current.showArrearInClientAttendance = data.showArrearInClientAttendance;\r\n current.showNoteInClientAttendance = data.showNoteInClientAttendance;\r\n current.actionExcuseThresholdType = data.actionExcuseThresholdType;\r\n current.actionExcuseThreshold = data.actionExcuseThreshold;\r\n current.showAgeInClientAttenandace = data.showAgeInClientAttenandace;\r\n current.noOfHoursToUpdateAttendance = data.noOfHoursToUpdateAttendance;\r\n current.allowMultiAmends = data.allowMultiAmends;\r\n current.activityExcuseWithoutFoodThresholdType = data.activityExcuseWithoutFoodThresholdType;\r\n current.activityExcuseWithoutFoodThreshold = data.activityExcuseWithoutFoodThreshold;\r\n current.calcSnacksOnlyForPresent = data.calcSnacksOnlyForPresent;\r\n current.activityExcuseThresholdType = data.activityExcuseThresholdType;\r\n current.activityExcuseThreshold = data.activityExcuseThreshold;\r\n current.enableKindergartenSupport = data.enableKindergartenSupport;\r\n current.allowDiscounts = data.allowDiscounts;\r\n current.enableRfidCardSupport = data.enableRfidCardSupport;\r\n current.enableZoomIntegration = data.enableZoomIntegration;\r\n current.enableDataExport = data.enableDataExport;\r\n current.enableRfidAccessGroups = data.enableRfidAccessGroups;\r\n current.rfidBreakTresholdIntervalInMinutes = data.rfidBreakTresholdIntervalInMinutes;\r\n current.rfidValidateESFByLaw = data.rfidValidateESFByLaw;\r\n current.sendInfoCardWithCourseRegistration = data.sendInfoCardWithCourseRegistration;\r\n current.sendApplicationFormAction = data.sendApplicationFormAction;\r\n current.showExcusesAndAmendsInMyActivities = data.showExcusesAndAmendsInMyActivities;\r\n current.facebookPixelID = data.facebookPixelID;\r\n current.requireTeacherFranchiseLicenses = data.requireTeacherFranchiseLicenses;\r\n current.showAgeFilterInCourses = data.showAgeFilterInCourses;\r\n current.showScheduleInCourses = data.showScheduleInCourses;\r\n current.showAgeRangesInCourses = data.showAgeRangesInCourses;\r\n current.enablePaymentGateways = data.enablePaymentGateways;\r\n current.enableDuePaymentsInClient = data.enableDuePaymentsInClient;\r\n current.showOverpaymentsInClientDuePayments = data.showOverpaymentsInClientDuePayments;\r\n current.showDateInClientCourses = data.showDateInClientCourses;\r\n current.showAskQuestionInCourseRegistration = data.showAskQuestionInCourseRegistration;\r\n current.maxNumberOfActivityWaitQueueReservations = data.maxNumberOfActivityWaitQueueReservations;\r\n current.maxNumberOfCourseWaitQueueReservations = data.maxNumberOfCourseWaitQueueReservations;\r\n\r\n current.allowReferenceSource = data.allowReferenceSource;\r\n current.mandatoryStudentBirthday = data.mandatoryStudentBirthday;\r\n current.mandatoryStudentNationality = data.mandatoryStudentNationality;\r\n current.mandatoryUserAddress = data.mandatoryUserAddress;\r\n current.mandatoryUserNationality = data.mandatoryUserNationality;\r\n current.mandatoryStudentName = data.mandatoryStudentName;\r\n current.mandatoryEmail2 = data.mandatoryEmail2;\r\n current.mandatoryPhone2 = data.mandatoryPhone2;\r\n current.mandatoryStudentGender = data.mandatoryStudentGender;\r\n current.maxNoOfPreviewStudentsOnOneLesson = data.maxNoOfPreviewStudentsOnOneLesson;\r\n current.enableReservationSupport = data.enableReservationSupport;\r\n\r\n current.showCourseWaitQueueIndexInClient = data.showCourseWaitQueueIndexInClient;\r\n current.reservationExcuseThresholdType = data.reservationExcuseThresholdType;\r\n current.reservationExcuseThreshold = data.reservationExcuseThreshold;\r\n current.reservationTeacherHourSingleRate = data.reservationTeacherHourSingleRate;\r\n current.reservationTeacherHourGroupOneRate = data.reservationTeacherHourGroupOneRate;\r\n current.reservationTeacherGroupOneSizeFrom = data.reservationTeacherGroupOneSizeFrom;\r\n current.reservationTeacherGroupOneSizeTo = data.reservationTeacherGroupOneSizeTo;\r\n current.reservationTeacherHourGroupTwoRate = data.reservationTeacherHourGroupTwoRate;\r\n current.reservationTeacherGroupTwoSizeFrom = data.reservationTeacherGroupTwoSizeFrom;\r\n current.reservationTeacherGroupTwoSizeTo = data.reservationTeacherGroupTwoSizeTo;\r\n current.reservationCreateThresholdType = data.reservationCreateThresholdType;\r\n current.reservationCreateThreshold = data.reservationCreateThreshold;\r\n current.enableFullCourseInterest = data.enableFullCourseInterest;\r\n\r\n current.smallNurserySupport = data.smallNurserySupport;\r\n current.childrenGroupSupport = data.childrenGroupSupport;\r\n\r\n current.enableWalletSupport = data.enableWalletSupport;\r\n current.walletAccountingBook = data.walletAccountingBook;\r\n current.walletDepositExpirationInDays = data.walletDepositExpirationInDays;\r\n\r\n current.mandatoryStudentPersonalIDNumber = data.mandatoryStudentPersonalIDNumber;\r\n current.sendPaymentConfirmationForm = data.sendPaymentConfirmationForm;\r\n current.enableRentSupport = data.enableRentSupport;\r\n current.requireTermsAndConditionsAgreement = data.requireTermsAndConditionsAgreement;\r\n current.requireTradeTermsAgreement = data.requireTradeTermsAgreement;\r\n current.googleAnalyticsId = data.googleAnalyticsId;\r\n current.allowClientActionUnRegistrationInsteadOfExcuse = data.allowClientActionUnRegistrationInsteadOfExcuse;\r\n \r\n current.mandatoryStudentHealthInsurance = data.mandatoryStudentHealthInsurance;\r\n current.mandatoryStudentAddress = data.mandatoryStudentAddress;\r\n current.mandatoryStudentAllergies = data.mandatoryStudentAllergies;\r\n current.mandatoryStudentPlaceOfBirth = data.mandatoryStudentPlaceOfBirth;\r\n \r\n current.mandatoryUserIdentityCardNumber = data.mandatoryUserIdentityCardNumber;\r\n current.mandatoryUserPersonalIDNumber = data.mandatoryUserPersonalIDNumber;\r\n current.mandatoryUserNationality2 = data.mandatoryUserNationality2;\r\n current.mandatoryUserName2 = data.mandatoryUserName2;\r\n current.mandatoryUserSurname2 = data.mandatoryUserSurname2;\r\n current.mandatoryUserMiddleName2 = data.mandatoryUserMiddleName2;\r\n current.mandatoryUserAddress2 = data.mandatoryUserAddress2;\r\n current.mandatoryUserIdentityCardNumber2 = data.mandatoryUserIdentityCardNumber2;\r\n current.mandatoryUserPersonalIDNumber2 = data.mandatoryUserPersonalIDNumber2;\r\n current.mandatoryUserBirthday = data.mandatoryUserBirthday;\r\n current.mandatoryUserBirthday2 = data.mandatoryUserBirthday2;\r\n current.rfidAttendanceEUSupport = data.rfidAttendanceEUSupport;\r\n current.infoCardBackUseLogo = data.infoCardBackUseLogo;\r\n current.mandatoryStudentNotes = data.mandatoryStudentNotes;\r\n current.showNoteInEventRegistration = data.showNoteInEventRegistration;\r\n current.enableClientUserSchedules = data.enableClientUserSchedules;\r\n current.enableNewClientDesign = data.enableNewClientDesign;\r\n current.rfidLogoType = data.rfidLogoType;\r\n current.showCapacityInClientUserSchedules = data.showCapacityInClientUserSchedules;\r\n \r\n current.showEmailInClientAttendance = data.showEmailInClientAttendance;\r\n current.enableCashPayments = data.enableCashPayments;\r\n current.showFreePlacesInCourseDetail = data.showFreePlacesInCourseDetail;\r\n current.showRemainingLessonsInCourseDetail = data.showRemainingLessonsInCourseDetail;\r\n current.noteDescriptionInReservations = data.noteDescriptionInReservations;\r\n\r\n tenantSettingSvc.update(current, function (model) {\r\n $scope.tenantSetting = angular.copy(model);\r\n $scope.tenantSettingOrig = angular.copy(model);\r\n\r\n updates--;\r\n if (!updates) {\r\n $scope.isSaving = false;\r\n }\r\n }, function (errorResult) {\r\n updates--;\r\n if (!updates) {\r\n $scope.isSaving = false;\r\n }\r\n\r\n notificationSvc.notifyError(\r\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\r\n notificationSvc.translateError(errorResult));\r\n });\r\n });\r\n }\r\n }\r\n\r\n $scope.tenantSettingIsUnchanged = function (data) {\r\n return angular.equals(data, $scope.tenantSettingOrig);\r\n }\r\n\r\n $scope.dataExportSettingIsUnchanged = function (data) {\r\n return angular.equals(data, $scope.dataExportSettingOrig);\r\n }\r\n\r\n $scope.detailIsUnchanged = function (dataExportSetting, tenantSettingData) {\r\n return $scope.dataExportSettingIsUnchanged(dataExportSetting) &&\r\n $scope.tenantSettingIsUnchanged(tenantSettingData);\r\n }\r\n\r\n $scope.onTriggerPortalUpdate = function () {\r\n tenantSettingSvc.triggerPortalUpdate();\r\n }\r\n}]);\r\n","wbApp.controller('SettingsCtrl', ['$scope', 'securitySvc', 'tenantInfo', 'tenantSettingSvc',\r\nfunction ($scope, securitySvc, tenantInfo, tenantSettingSvc) {\r\n\r\n $scope.tabs = [\r\n {\r\n title: 'TXT_MAIN',\r\n template: \"system/settings/settings-main-tab.html\"\r\n }];\r\n\r\n if (securitySvc.isInRole('MainSettings')) {\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_SETTING',\r\n template: \"system/settings/settings-settings-tab.html\"\r\n });\r\n\r\n if (!tenantInfo.isFranchiseCentral) {\r\n\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_ACCOUNTING',\r\n template: \"system/settings/settings-accounting-tab.html\"\r\n });\r\n\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_NOTIFICATION',\r\n template: \"system/settings/settings-notification-tab.html\"\r\n });\r\n\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_TERMS_AND_CONDITIONS',\r\n template: \"system/settings/settings-terms-and-conditions-tab.html\"\r\n });\r\n\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_INSTRUCTIONS',\r\n template: \"system/settings/settings-instructions-tab.html\"\r\n });\r\n\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_TRADE_TERMS',\r\n template: \"system/settings/settings-trade-terms-tab.html\"\r\n });\r\n\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_PROTECTION_OF_PERSONAL_DATA',\r\n template: \"system/settings/settings-personal-data-protection-tab.html\"\r\n });\r\n\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_HTML_CUSTOM_CONTENT',\r\n template: \"system/settings/settings-html-custom-content-tab.html\"\r\n });\r\n\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_TEXTS',\r\n template: \"system/settings/settings-texts-tab.html\"\r\n });\r\n }\r\n }\r\n\r\n tenantSettingSvc.getAsync().$promise.then(function(ts) {\r\n if (ts.enableNewClientDesign && !tenantInfo.isFranchiseCentral) {\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_CLIENT_SETTINGS',\r\n template: \"system/settings/settings-client-settings-tab.html\"\r\n });\r\n }\r\n });\r\n\r\n $scope.tabs.activeTab = 0;\r\n\r\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\r\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\r\n });\r\n\r\n}]);\r\n","wbApp.controller('SmsHistoryCtrl', ['$scope', '$translate', '$filter', 'smsHistorySvc',\nfunction ($scope, $translate, $filter, smsHistorySvc) {\n\n $scope.gridSettings = {\r\n grouping: {\r\n autoExpandAll: false\r\n },\r\n columns: [\n { dataField: 'month', caption: $translate.instant('TXT_LBL_MONTH'), dataType: 'string', groupIndex: 1},\n {\r\n dataField: 'createdAt', caption: $translate.instant('TXT_LBL_CREATED_AT'),\n dataType: 'date', format: 'shortDateShortTime',\r\n sortOrder: 'desc',\r\n width: '130px'\r\n }, {\r\n dataField: 'recipient',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\r\n return $filter('phone')(rowData.recipient);\r\n },\n width: '120px'\r\n },\n { dataField: 'noOfSms', caption: $translate.instant('TXT_LBL_NO_OF_SMS'), dataType: 'number', width: '80px' },\n { dataField: 'text', caption: $translate.instant('TXT_LBL_TEXT'), dataType: 'string' },\n { dataField: 'errorText', caption: $translate.instant('TXT_LBL_CODE'), dataType: 'string', width: '130px' },\n ],\r\n summary: {\r\n groupItems: [{\r\n column: \"noOfSms\",\r\n summaryType: \"sum\",\r\n displayFormat: \"{0}\",\r\n alignByColumn: true\r\n }, {\r\n column: \"createdAt\",\r\n summaryType: \"min\",\r\n displayFormat: \" \",\r\n alignByColumn: true,\r\n showInColumn: 'text'\r\n }],\r\n },\r\n sortByGroupSummaryInfo: [\r\n {\r\n summaryItem: 1,\r\n sortOrder: 'desc'\r\n }\r\n ]\r\n }\n\n $scope.$on('refreshData', function (e, data) {\r\n $scope.smsHistory = smsHistorySvc.getAll(true);\n });\n\n $scope.smsHistory = smsHistorySvc.getAll();\n}]);\n","wbApp.controller('TextsSettingsCtrl', ['$scope', '$q', '$translate', 'tenantSettingSvc', 'notificationSvc','tenantInfo',\nfunction ($scope, $q, $translate, tenantSettingSvc, notificationSvc, tenantInfo) {\n\n var isActive = false;\n var loaded = false;\n\n $scope.isFranchiseCentral = tenantInfo.isFranchiseCentral;\n\n function loadData() {\n $scope.isBusy = true;\n $scope.tenantSetting = {};\n $scope.tenantSettingSrc = tenantSettingSvc.getAsync();\n $q.all([$scope.tenantSettingSrc.$promise]).then(function () {\n $scope.tenantSetting = angular.copy($scope.tenantSettingSrc);\n $scope.tenantSettingOrig = angular.copy($scope.tenantSettingSrc);\n\n $scope.isBusy = false;\n });\n }\n\n $scope.$on('refreshData', function (e, data) {\n if (isActive) {\n loadData();\n }\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 9) {\n if (!isActive) {\n isActive = true;\n\n if (!loaded) {\n loadData();\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.onCancel = function () {\n loadData();\n }\n\n $scope.onModelSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n var updates = 0;\n\n if (!$scope.tenantSettingIsUnchanged(data)) {\n updates++;\n\n tenantSettingSvc.getAsync().$promise.then(function (currentSetting) {\n\n var current = angular.copy(currentSetting);\n\n // Apply only data we are setting in on this tab\n current.coursesMainPageButton = data.coursesMainPageButton;\n current.eventMainPageButton = data.eventMainPageButton;\n current.compensationsMainPageButton = data.compensationsMainPageButton;\n current.kidergartenMainPageButton = data.kidergartenMainPageButton;\n current.reservationsMainPageButton = data.reservationsMainPageButton;\n current.formsMainPageButton = data.formsMainPageButton;\n current.rentsMainPageButton = data.rentsMainPageButton;\n current.attendanceMainPageButton = data.attendanceMainPageButton;\n\n current.coursesMenuName = data.coursesMenuName;\n current.eventsMenuName = data.eventsMenuName;\n current.compensationsMenuName = data.compensationsMenuName;\n current.kidergartenMenuName = data.kidergartenMenuName;\n current.customContentTypeText = data.customContentTypeText;\n current.myKidergartenMenuName = data.myKidergartenMenuName;\n current.attendanceMenuName = data.attendanceMenuName;\n\n tenantSettingSvc.update(current, function (model) {\n $scope.tenantSetting = angular.copy(model);\n $scope.tenantSettingOrig = angular.copy(model);\n\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n }, function (errorResult) {\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n });\n }\n }\n\n $scope.tenantSettingIsUnchanged = function (data) {\n return angular.equals(data, $scope.tenantSettingOrig);\n }\n\n $scope.detailIsUnchanged = function (tenantSettingData) {\n return $scope.tenantSettingIsUnchanged(tenantSettingData);\n }\n\n $scope.onTriggerPortalUpdate = function () {\n tenantSettingSvc.triggerPortalUpdate();\n }\n}]);\n","wbApp.directive('wbClientThemeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n\n data: [\n { id: 0, text: 'TXT_VAL_THEME_CUSTOM' },\n { id: 1, text: 'TXT_VAL_THEME_DARK_BLUE' },\n { id: 2, text: 'TXT_VAL_THEME_TEAL' },\n { id: 3, text: 'TXT_VAL_THEME_BROWN' },\n { id: 4, text: 'TXT_VAL_THEME_LIGHT_BLUE' },\n { id: 5, text: 'TXT_VAL_THEME_PINK' },\n { id: 6, text: 'TXT_VAL_THEME_GREEN' },\n { id: 7, text: 'TXT_VAL_THEME_YELLOW' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbDueDateTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_LBL_DEFAULT_FROM_CENTRAL_SETTING'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: !attrs.required,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_VAL_NO_OF_DAYS_AFTER_ISSUE_DATE' },\n { id: 1, text: 'TXT_VAL_ON_SPECIFIC_DATE' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (String.prototype.isNullOrWhitespace(viewValue)) {\n return null;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!typeof value === 'undefined' || value === null) {\n return value;\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbLanguageAliasCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, controller) {\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n data: [\n { id: 5, text: 'TXT_LANG_CS' },\n { id: 27, text: 'TXT_LANG_SK' },\n { id: 9, text: 'TXT_LANG_EN' },\n { id: 7, text: 'TXT_LANG_DE' }\n ]\n });\n\n elm.on('change', function (event) {\n scope.$apply(function () {\n controller.$setViewValue(event.val);\n });\n });\n\n scope.$watch(attrs.ngModel, function (current, old) {\n $(elm).select2('val', current || 5);\n }, true);\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n if (attrs.ngEnable) {\n scope.$watch(attrs.ngEnable, function (newVal) {\n elm.select2('enable', !!newVal);\n });\n }\n }, 1);\n }\n }\n }]);\n","wbApp.directive('wbMandatoryTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n\n data: [\n { id: 0, text: 'TXT_VAL_NOT_MANDATORY_BUT_VISIBLE' },\n { id: 1, text: 'TXT_VAL_MANDATORY' },\n { id: 2, text: 'TXT_VAL_NOT_VISIBLE' },\n { id: 3, text: 'TXT_VAL_NOT_VISIBLE_IN_ADMIN' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbNotificationTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n\n data: [\n { id: 0, text: 'TXT_VAL_ASK_FOR_CONFIRMATION' },\n { id: 1, text: 'TXT_VAL_NOT_SEND_NOTIFICATION' },\n { id: 2, text: 'TXT_VAL_SEND_NOTIFICATION' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (viewValue == 1) {\n return \"true\";\n } else if (viewValue == 2) {\n return \"false\";\n } else {\n return null;\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (value === \"true\") {\n return \"1\";\n } else if (value === \"false\") {\n return \"2\";\n } else {\n return \"0\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbRfidLogoTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n\n data: [\n { id: 1, text: 'MPSV' },\n { id: 2, text: 'OPZ+' },\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbStorageImageCombo', ['$timeout', '$translate', 'picturesSvc',\n function ($timeout, $translate, picturesSvc) {\n function formatResult(model) {\n if (!model) { return; }\n\n return \" \";\n }\n\n function formatSelection(model) {\n return \" \";\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n link: function (scope, elm, attrs, ctrl) {\n\n var models = picturesSvc.getAllAsync(false, true);\n\n $timeout(function () {\n $(elm).select2({\n //placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_COURSE_TYPE_IMAGE'),\n containerCssClass: 'wb-storage-image-combo',\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n id: function (model) {\n if (attrs.useFullUrl) {\n return model.imageUrl;\n }\n return model.imageUri;\n },\n data: models\n });\n\n ctrl.$render();\n });\n\n ctrl.$render = function () {\n models.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n }\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]); ","wbApp.factory('accountingSettingsSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n var AccountingSettings = $resource('/Api/AccountingSettings/:id', {}, {\n 'get': { method: 'GET', isArray: false, url: '/Api/AccountingSettings/Get' },\n 'update': { method: 'POST', url: '/Api/AccountingSettings/Update' },\n });\n\n function getAsync() {\n return repositorySvc.customGet('get', AccountingSettings, {});\n }\n\n function update(data, successCallback, errorCallback) {\n repositorySvc.update(\n AccountingSettings, // $resource\n null, // collection\n data, // entity\n successCallback,\n errorCallback);\n }\n\n return {\n getAsync: getAsync,\n update: update\n }\n }]);","wbApp.factory('contentSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n var Content = $resource('/restapi/html-content', {}, {\n 'get': { method: 'GET', isArray: false, url: '/restapi/html-content/:id' },\n 'update': { method: 'PUT', url: '/restapi/html-content/:id' },\n 'delete': { method: 'DELETE', url: '/restapi/html-content/:id' },\n });\n\n function getById(id) {\n return Content['get']({ id: id });\n }\n\n function update(model) {\n return repositorySvc.customPutWithParams(\n 'update',\n Content,\n { id: model.id },\n model);\n }\n\n function remove(id) {\n return repositorySvc.customDelete(\n 'delete',\n Content,\n { id: id });\n }\n\n return {\n getById: getById,\n update: update,\n remove: remove\n }\n }]);","'use strict';\n\nwbApp.factory('dataExportHistorySvc', ['$resource', '$translate', '$q', 'notificationSvc', 'repositorySvc',\n function ($resource, $translate, $q, notificationSvc, repositorySvc) {\n\n var DataExportHistory = $resource('/Api/DataExportHistory', {}, {\n 'query': { method: 'GET', isArray: true },\n 'getAll': { method: 'GET', isArray: true, url: '/Api/DataExportHistory/GetAll' },\n });\n\n var dataExportHistory = null;\n\n function getAll(refresh) {\n if (!dataExportHistory || refresh) {\n dataExportHistory = repositorySvc.customGet('getAll', DataExportHistory);\n }\n return dataExportHistory;\n }\n\n return {\n getAll: getAll\n }\n }]);","wbApp.factory('dataExportSettingSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n var DataExportSetting = $resource('/Api/DataExportSetting/:id', {}, {\n 'get': { method: 'GET', isArray: false, url: '/Api/DataExportSetting/Get' },\n 'update': { method: 'POST', url: '/Api/DataExportSetting/Update' },\n });\n\n function getAsync() {\n return repositorySvc.customGet('get', DataExportSetting, {});\n }\n\n function update(data, successCallback, errorCallback) {\n repositorySvc.update(\n DataExportSetting, // $resource\n null, // collection\n data, // entity\n successCallback,\n errorCallback);\n }\n\n return {\n getAsync: getAsync,\n update: update\n }\n }]);","wbApp.factory('mainSettingsSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n var MainSetting = $resource('/Api/MainSettings/:id', {}, {\n 'get': { method: 'GET', isArray: false, url: '/Api/MainSettings/Get' },\n 'update': { method: 'POST', url: '/Api/MainSettings/Update' },\n });\n\n function getAsync() {\n return repositorySvc.customGet('get', MainSetting, {});\n }\n\n function update(data, successCallback, errorCallback) {\n repositorySvc.update(\n MainSetting, // $resource\n null, // collection\n data, // entity\n successCallback,\n errorCallback);\n }\n\n return {\n getAsync: getAsync,\n update: update\n }\n }]);","'use strict';\n\nwbApp.factory('smsHistorySvc', ['$resource', '$translate', '$q', 'notificationSvc', 'repositorySvc',\n function ($resource, $translate, $q, notificationSvc, repositorySvc) {\n\n var SmsHistory = $resource('/Api/SmsHistory', {}, {\n 'query': { method: 'GET', isArray: true },\n 'getAll': { method: 'GET', isArray: true, url: '/Api/SmsHistory/GetAll' },\n });\n\n var smsHistory = null;\n\n function getAll(refresh) {\n if (!smsHistory || refresh) {\n smsHistory = repositorySvc.customGet('getAll', SmsHistory);\n }\n return smsHistory;\n }\n\n return {\n getAll: getAll\n }\n }]);","wbApp.controller('EmployeesTimeSheetReportParamsCtrl', ['$scope', '$window',\nfunction ($scope, $window) {\n\n $scope.model = {\n employeeID: $scope.employeeID,\n from: moment().startOf('month').subtract(1, 'months').startOf('month').toDate(),\n to: moment().startOf('month').subtract(1, 'day').endOf('month').toDate()\n };\n\n\n $scope.onReportPrint = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n $scope.$hide();\n\n if ($scope.isRfidReport) {\r\n $window.open('/Admin/Report/EmployeeTimeSheetRfid?EmployeeID=' + model.employeeID + '&StartDate=' + model.from.toJSON() + '&EndDate=' + model.to.toJSON(),\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\r\n } else if ($scope.withCarryOver) {\n $window.open('/Admin/Report/EmployeeTimeSheetWithCarryOver?EmployeeID=' + model.employeeID + '&StartDate=' + model.from.toJSON() + '&EndDate=' + model.to.toJSON(),\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\r\n } else {\r\n $window.open('/Admin/Report/EmployeeTimeSheet?EmployeeID=' + model.employeeID + '&StartDate=' + model.from.toJSON() + '&EndDate=' + model.to.toJSON(),\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\r\n }\n }\n\n $scope.onExportReportToXls = function (model) {\r\n\n if ($scope.isSaving) {\r\n return;\r\n }\n\n $scope.isSaving = true;\n\n $scope.$hide();\n\n if ($scope.isRfidReport) {\r\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\r\n } else if ($scope.withCarryOver) {\r\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\r\n } else {\r\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\r\n }\r\n }\n\n\n}]);\n","'use strict';\n\nwbApp.controller('ConsentsDefinitionsCtrl', ['$scope', '$http', '$q', '$modal', '$translate', '$filter', 'messageBoxSvc',\n 'consentDefinitionSvc', 'gridSortSvc',\nfunction ($scope, $http, $q, $modal, $translate, $filter, messageBoxSvc,\n consentDefinitionSvc, gridSortSvc) {\n\n $scope.gridSettings = {\n name: 'consentsDefinitions',\n columns: [\n {\n dataField: 'consentTypeID',\n caption: $translate.instant(\"TXT_CONSENT_TYPE\"),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('wbConsentType')(rowData.consentTypeID);\n },\n width: '90px'\n },\n { dataField: 'name', caption: $translate.instant('TXT_NAME'), dataType: 'string', sortOrder: 'asc' },\n { dataField: 'validFrom', caption: $translate.instant('TXT_LAB_VALID_FROM'), dataType: 'date', format: { date: 'short' }, width: '90px' },\n { dataField: 'validTo', caption: $translate.instant('TXT_LAB_VALID_TO'), dataType: 'date', format: { date: 'short' }, width: '90px' },\n { dataField: 'validToDays', caption: $translate.instant('TXT_LBL_VALID_FOR_DAYS'), dataType: 'number', width: '90px' },\n { dataField: 'active', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\n ]\n }\n\n function loadData(refresh) {\n $scope.consentsDefinitions = consentDefinitionSvc.getAllAsync(refresh);\n }\n\n loadData(true);\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = consentDefinitionSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n consentDefinitionSvc.remove(data);\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'users/users-consents/consents-definitions-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n\n\n","wbApp.controller('ConsentsDefinitionsDetailCtrl', ['$scope', '$http', '$q', '$modal', '$translate', '$filter', 'messageBoxSvc',\n 'consentDefinitionSvc',\nfunction ($scope, $http, $q, $modal, $translate, $filter, messageBoxSvc, consentDefinitionSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n if (!model.consentDefinitionID) {\n consentDefinitionSvc.insert(model, success, error);\n } else {\n consentDefinitionSvc.update(model, success, error);\n }\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n\n}]);\n\n\n","wbApp.controller('EmployeeAvailabilitySchedulesCtrl', ['$scope', '$modal', 'employeeAvailabilitySchedulesSvc', 'messageBoxSvc',\nfunction ($scope, $modal, employeeAvailabilitySchedulesSvc, messageBoxSvc) {\n\n var isActive = false; \n var loaded = false;\n var selectedWeek = moment().startOf('isoWeek');\n var selectedEmployee = null;\n\n $scope.model = [];\n var modelOrig = [];\n\n $scope.isBusy = false;\n $scope.isSaving = false;\n\n function reloadDataWithModificationAsk(saveEmployee, newEmployee, startOfWeek) {\n if (!$scope.detailIsUnchanged()) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_LBL_QUESTION',\n message: 'TXT_MODEL_MODFIFIED_SHOULD_SAVE',\n buttons: [{\n text: 'TXT_BTN_NO',\n callback: function () {\n loadData(newEmployee, startOfWeek);\n }\n }, {\n text: 'TXT_BTN_SAVE',\n callback: function () {\n saveModel($scope.model, saveEmployee, function () {\n loadData(newEmployee, startOfWeek);\n });\n }\n }]\n });\n }\n else {\n loadData(newEmployee, startOfWeek);\n }\n }\n\n function loadData(employee, date) {\n if (employee && date) {\n $scope.isBusy = true;\n employeeAvailabilitySchedulesSvc.loadWeek(employee.employeeID, date).then(\n function (data) {\n $scope.isBusy = false;\n selectedEmployee = employee;\n selectedWeek = moment(date).startOf('isoWeek');\n $scope.model.length = 0;\n $scope.model.push.apply($scope.model, data);\n modelOrig = angular.copy($scope.model);\n\n loaded = true;\n }, function (error) {\n $scope.isBusy = false;\n selectedEmployee = null;\n selectedWeek = moment(date).startOf('isoWeek');\n $scope.model.length = 0;\n\n modelOrig = [];\n loaded = false;\n });\n }\n }\n\n $scope.$on('employeeSelectionChanged', function (e, newlySelectedEmployee) {\n if (newlySelectedEmployee) {\n if (isActive) {\n if (selectedEmployee != newlySelectedEmployee) {\n reloadDataWithModificationAsk(selectedEmployee, newlySelectedEmployee, selectedWeek)\n }\n }\n }\n else {\n $scope.model.length = 0;\n }\n\n selectedEmployee = newlySelectedEmployee;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 1) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedEmployee) {\n loadData(selectedEmployee, selectedWeek);\n }\n }\n } else {\n isActive = false;\n }\n });\n\n function saveModel(model, employee, callback) {\n if (!$scope.detailIsUnchanged() && !$scope.isBusy && !$scope.isSaving && !!selectedEmployee) {\n\n $scope.isSaving = true;\n\n employeeAvailabilitySchedulesSvc.saveWeek(employee.employeeID, selectedWeek, model).then(\n function (data) {\n\n modelOrig = angular.copy($scope.model);\n $scope.isSaving = false;\n if (!!callback) {\n callback();\n }\n },\n function (error) {\n $scope.isSaving = false;\n messageBoxSvc.showMessageDlg({\n title: 'TXT_ALERT_TITLE_ENTITY_SAVE_ERROR',\n message: error.message,\n buttons: [{\n text: 'TXT_BTN_OK',\n callback: function () {\n if (!!callback) {\n callback();\n }\n }\n }]\n });\n\n }\n );\n }\n }\n\n $scope.calendarSettings = {\n onValueChanged: function (value) {\n var newStartOfWeek = moment(value.value).startOf('isoWeek');\n\n if (!newStartOfWeek.isSame(selectedWeek)) {\n reloadDataWithModificationAsk(selectedEmployee, selectedEmployee, newStartOfWeek);\n }\n }\n }\n\n $scope.detailIsUnchanged = function () {\n return angular.equals($scope.model, modelOrig);\n };\n\n $scope.onModelSave = function (model) {\n saveModel(model, selectedEmployee);\n }\n\n $scope.onModelCancel = function () {\n loadData(selectedEmployee, selectedWeek);\n }\n\n $scope.isSaveRangeEnabled = function () {\n return !$scope.isBusy && !$scope.isSaving && !!selectedEmployee && !!selectedWeek;\n }\n\n $scope.onModelRangeSave = function (model) {\n\n $scope.isSaving = true;\n dateRangeSelectionDlg.$promise.then(function () {\n dateRangeSelectionDlg.$scope.model = {\n from: moment().startOf('week').toDate(),\n to: moment().endOf('week').startOf('day').toDate(),\n };\n dateRangeSelectionDlg.$scope.onCanceled = function () {\n $scope.isSaving = false;\n },\n dateRangeSelectionDlg.$scope.onSaved = function (rangeModel) {\n employeeAvailabilitySchedulesSvc.saveWeekAsPaternForPeriod(\n selectedEmployee.employeeID,\n rangeModel.from,\n rangeModel.to,\n model).then(\n function (data) {\n modelOrig = angular.copy($scope.model);\n $scope.isSaving = false;\n },\n function (error) {\n $scope.isSaving = false;\n messageBoxSvc.showMessageDlg({\n title: 'TXT_ALERT_TITLE_ENTITY_SAVE_ERROR',\n message: error.message,\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n }); \n }\n );\n }\n \n dateRangeSelectionDlg.show();\n });\n\n }\n\n var dateRangeSelectionDlg = $modal({\n templateUrl: 'users/dialogs/select-week-date-range.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('EmployeesCtrl', ['$scope', '$modal', '$translate', '$filter', '$q','employeeSvc', 'securitySvc', 'tenantSettingSvc', 'gridSortSvc', 'groupSvc',\r\nfunction ($scope, $modal, $translate, $filter, $q, employeeSvc, securitySvc, tenantSettingSvc, gridSortSvc, groupSvc) {\r\n\r\n $scope.groups = groupSvc.getAllAsync(true);\r\n $scope.customFilter = { selectedGroups: [] };\r\n $scope.rawEmployees = [];\r\n $scope.employees = [];\r\n\r\n function preFilter() {\r\n $q.all([$scope.groups.$promise, $scope.rawEmployees.$promise]).then(function () {\r\n if (!$scope.customFilter.selectedGroups.length) {\r\n $scope.employees.length = 0;\r\n $scope.employees.push.apply($scope.employees, $scope.rawEmployees);\r\n } else {\r\n var noGroupSelected = $scope.customFilter.selectedGroups.indexOf(-1) !== -1;\r\n\r\n $scope.employees.length = 0;\r\n $scope.employees.push.apply($scope.employees,\r\n _.filter($scope.rawEmployees, function (o) {\r\n if (noGroupSelected) {\r\n return !o.groups.length;\r\n }\r\n\r\n return _.intersection(o.groups, $scope.customFilter.selectedGroups).length > 0\r\n }));\r\n }\r\n });\r\n }\r\n\r\n $scope.$watch('customFilter.selectedGroups', function (newValue, oldValue) {\r\n preFilter();\r\n }, true);\r\n\r\n function onPrintEmployeeTimeSheet(data, isRfidReport, withCarryOver) {\r\n employeeTimeSheetParamsDialog.$promise.then(function () {\r\n employeeTimeSheetParamsDialog.$scope.employeeID = data.employeeID;\r\n employeeTimeSheetParamsDialog.$scope.withCarryOver = withCarryOver;\r\n employeeTimeSheetParamsDialog.$scope.isRfidReport = isRfidReport;\r\n employeeTimeSheetParamsDialog.show();\r\n });\r\n }\r\n\r\n function setSelectedEmployee(data) {\r\n $scope.selectedEmployee = data;\r\n $scope.$broadcast('employeeSelectionChanged', $scope.selectedEmployee);\r\n }\r\n\r\n $scope.enableZoomIntegration = tenantSettingSvc.settings.enableZoomIntegration;\r\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\r\n\r\n $scope.gridSettings = {\r\n name: 'employees',\r\n columns: [\r\n { dataField: 'active', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\r\n {\r\n dataField: 'fullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', width: '190px', sortOrder: 'asc',\r\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName(data, 'name', 'surname', 'middleName') }\r\n },\r\n { dataField: 'jobDescription', caption: $translate.instant('TXT_LBL_JOB_DESCRIPTION'), dataType: 'string' },\r\n { dataField: 'email', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '180px' },\r\n {\r\n dataField: 'phone',\r\n caption: $translate.instant('TXT_LBL_PHONE'),\r\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('phone')(rowData.phone);\r\n },\r\n width: '140px'\r\n },\r\n { dataField: 'isPublicProfile', caption: $translate.instant('TXT_LBL_PUBLIC_PROFILE'), dataType: 'boolean', width: '60px', visible: $scope.enableNewClientDesign },\r\n { dataField: 'teachingOnlineCourses', caption: $translate.instant('TXT_LBL_TEACHING_ONLINE_COURSES'), dataType: 'boolean', width: '60px', visible: $scope.enableZoomIntegration },\r\n { dataField: 'smallImage', caption: $translate.instant('TXT_LBL_PICTURE'), dataType: 'boolean', width: '60px' },\r\n ],\r\n customCommands: [{\r\n text: $translate.instant('TXT_MENU_PRINT_EMPLOYEE_TIME_SHEET'),\r\n isVisible: function () { return securitySvc.isInRole('Employee.TimeSheet') && securitySvc.isInRole('Reports'); },\r\n callback: function (data) { onPrintEmployeeTimeSheet(data, false, false); }\r\n }, {\r\n text: $translate.instant('TXT_MENU_PRINT_EMPLOYEE_TIME_SHEET_WITH_CARRY_OVER'),\r\n isVisible: function () { return securitySvc.isInRole('Employee.TimeSheet') && securitySvc.isInRole('Reports'); },\r\n callback: function (data) { onPrintEmployeeTimeSheet(data, false, true); }\r\n }, {\r\n text: $translate.instant('TXT_MENU_PRINT_EMPLOYEE_TIME_SHEET_RFID'),\r\n isVisible: function () { return securitySvc.isInRole('Employee.TimeSheet') && securitySvc.isInRole('Reports') && tenantSettingSvc.settings.enableRfidCardSupport; },\r\n callback: function (data) { onPrintEmployeeTimeSheet(data, true, false); }\r\n }]\r\n }\r\n\r\n $scope.$on('refreshData', function (e, data) {\r\n $scope.rawEmployees = employeeSvc.getAllNonDeleted(true);\r\n setSelectedEmployee(null);\r\n });\r\n\r\n $scope.rawEmployees = employeeSvc.getAllNonDeleted(true);\r\n\r\n preFilter();\r\n\r\n $scope.tabs = [\r\n {\r\n title: 'TXT_DETAIL',\r\n template: \"users/employees/detail-tabs/detail.html\"\r\n }\r\n ];\r\n\r\n if (tenantSettingSvc.settings.enableReservationSupport)\r\n {\r\n $scope.tabs.push({\r\n title: 'TXT_AVAILABILITY_SCHEDULE',\r\n template: 'users/employees/detail-tabs/availability-schedule.html'\r\n })\r\n }\r\n\r\n $scope.tabs.activeTab = 0;\r\n\r\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\r\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\r\n });\r\n\r\n $scope.onRowEdit = function (data) {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.collection = $scope.rawEmployees;\r\n detailDialogPromise.$scope.model = angular.copy(data);\r\n detailDialogPromise.$scope.onSave = function () {\r\n preFilter();\r\n };\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowAdd = function () {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.collection = $scope.rawEmployees;\r\n detailDialogPromise.$scope.model = employeeSvc.createNew();\r\n detailDialogPromise.$scope.onSave = function () {\r\n preFilter();\r\n };\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowDelete = function (data) {\r\n employeeSvc.remove(data, function () {\r\n preFilter();\r\n }, null, $scope.rawEmployees);\r\n }\r\n\r\n $scope.onRowSelected = function (data) {\r\n setSelectedEmployee(data);\r\n }\r\n\r\n var detailDialogPromise = $modal({\r\n templateUrl: 'users/employees/employees-detail.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n\r\n var employeeTimeSheetParamsDialog = $modal({\r\n templateUrl: 'users/employees/employees-time-sheet-report-params.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n\r\n}]);\r\n","wbApp.controller('EmployeesDetailCtrl', ['$scope', '$timeout', '$translate', 'employeeSvc', 'notificationSvc', 'picturesSvc', 'tenantInfo', 'tenantSettingSvc',\nfunction ($scope, $timeout, $translate, employeeSvc, notificationSvc, picturesSvc, tenantInfo, tenantSettingSvc) {\n\n $scope.isFranchise = tenantInfo.franchiseCentrals.length > 0;\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\n\n var defaultCroppedImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYEAAAEyCAYAAAAcB2z/AAAKNElEQVR4Xu3VAQkAMAwDwc2/6Axm468OcinkbttxBAgQIJAUuEYg2bvQBAgQ+AJGwCMQIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQIPqGDEp71BlCAAAAAASUVORK5CYII=';\n $scope.emptyImage = 'https://gaxb7o2ddx-images.storage.googleapis.com/Profile/0/cf2830ffb3df4d72a4cbbc8f88fa3c8a.png';\n\n $scope.img = {\n image: '',\n croppedImage: defaultCroppedImage\n }\n\n $scope.enableZoomIntegration = tenantSettingSvc.settings.enableZoomIntegration;\n\n $scope.onImageLoadSuccess = function () {\n $scope.imageIsValid = true;\n }\n\n $scope.onImageLoadError = function () {\n $scope.imageIsValid = false;\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_ERROR_LOADING_IMAGE'),\n $translate.instant('TXT_ALERT_UNSUPPORTED_IMAGE_TYPE'));\n }\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"users/employees/employees-detail-main-tab.html\",\n type: 'main'\n },\n {\n title: \"TXT_LBL_ADITIONAL\",\n template: \"users/employees/employees-detail-aditional-tab.html\",\n type: 'aditional'\n },\n {\n title: \"TXT_LBL_PUBLIC\",\n template: \"users/employees/employees-detail-public-tab.html\",\n type: 'public'\n },\n {\n title: \"TXT_LBL_PICTURE\",\n template: \"users/employees/employees-detail-picture-tab.html\",\n type: 'picture'\n } \n ];\n\n if ($scope.isFranchise) {\n $scope.detailTabs.push({\n title: \"TXT_LBL_FRANCHISE_LICENSES\",\n template: \"users/employees/employees-detail-franchise-licenses-tab.html\",\n type: 'franchise'\n });\n }\n\n if (tenantSettingSvc.settings.enableReservationSupport)\n {\n $scope.detailTabs.push({\n title: \"TXT_SPECIALIZATIONS\",\n template: \"users/employees/employees-detail-domains-tab.html\",\n type: 'domains'\n });\n }\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailTabs.activeTab = 0;\n\n var domainsInitialized = false;\n\n $scope.employeeDomains = null;\n\n var treeListInstance = null;\n $scope.domainsOptions = {\n bindingOptions: {\n dataSource: 'employeeDomains',\n },\n height: 400,\n dataStructure: 'tree',\n keyExpr: 'id',\n itemsExpr: 'specializations',\n selection: {\n mode: 'multiple', \n recursive: false\n },\n showRowLines: true,\n allowColumnResizing: true,\n autoExpandAll: true,\n columns: [{\n caption: 'Name',\n dataField: 'name',\n dataType: 'string',\n width: '220px'\n }, {\n caption: 'Popis',\n dataField: 'description',\n dataType: 'string'\n }],\n onContentReady: function (e) {\n treeListInstance = e.component;\n if (!!origDomainsSelected) {\n treeListInstance.selectRows(origDomainsSelected, false);\n }\n },\n onSelectionChanged: function (e) {\n if (e.currentSelectedRowKeys.length == 1) {\n var obj = _.find(e.selectedRowsData, { id: e.currentSelectedRowKeys[0] });\n if (obj && obj.parentId) {\n treeListInstance.selectRows(obj.parentId, true);\n }\n } else if (e.currentDeselectedRowKeys.length == 1) {\n var obj = _.find(e.selectedRowsData, { parentId: e.currentDeselectedRowKeys[0] });\n if (obj) {\n treeListInstance.selectRows(e.currentDeselectedRowKeys[0], true);\n }\n }\n }\n };\n\n var origDomainsSelected = [];\n\n function loadDomainsData() {\n\n employeeSvc.loadDomainsData($scope.model.employeeID).then(function (data) {\n $scope.employeeDomains = data.domains;\n origDomainsSelected = data.selection;\n if (!!treeListInstance) {\n treeListInstance.selectRows(origDomainsSelected, false);\n }\n domainsInitialized = true;\n });\n }\n\n $scope.$watch('detailTabs.activeTab', function (newValue, oldValue) {\n if (newValue >= 0 && newValue < $scope.detailTabs.length) {\n var selectedTab = $scope.detailTabs[newValue];\n\n if (selectedTab.type == 'domains' && !domainsInitialized) {\n loadDomainsData();\n }\n }\n });\n\n function domainsAreUnchanged() {\n return !domainsInitialized || !treeListInstance ||\n (!!domainsInitialized && (_.isEqual(origDomainsSelected.sort(), treeListInstance.getSelectedRowKeys().sort())));\n }\n\n function detailIsUnchanged(data) {\n return angular.equals(data, $scope.modelOrig);\n }\n\n $scope.detailIsUnchanged = function (data) {\n return detailIsUnchanged(data) && !$scope.imageIsValid && domainsAreUnchanged();\n };\n\n $scope.isDeletePictureDisabled = function () {\n return ($scope.emptyImage === $scope.model.smallImageUrl);\n }\n\n $scope.onDeletePicture = function () {\n $scope.imageIsValid = false;\n $scope.img.image = null;\n $scope.img.croppedImage = defaultCroppedImage;\n if (!$scope.model.smallImageData) {\n $scope.model.smallImageData = {};\n }\n $scope.model.smallImageData.delete = true;\n $scope.model.smallImageUrl = $scope.emptyImage;\n }\n\n $scope.isSaving = false;\n\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n function success() {\n $scope.$hide();\n $scope.onSave();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n if (!detailIsUnchanged($scope.model)) {\n\n if ($scope.imageIsValid) {\n var originalFormat = picturesSvc.decodeImageTypeFromData($scope.img.image);\n model.smallImageData = picturesSvc.prepareImageData($scope.img.croppedImage, originalFormat, error);\n if (!model.smallImageData) {\n return;\n }\n }\n\n if (!model.employeeID) {\n employeeSvc.insert(model, function (data) {\n if (!domainsAreUnchanged()) {\n employeeSvc.saveDomainsData(\n data.employeeID,\n $scope.employeeDomains,\n origDomainsSelected,\n treeListInstance.getSelectedRowKeys(),\n success,\n error);\n } else {\n success();\n }\n }, error, $scope.collection);\n } else {\n employeeSvc.update(model, function () {\n if (!domainsAreUnchanged()) {\n employeeSvc.saveDomainsData(\n $scope.model.employeeID,\n $scope.employeeDomains,\n origDomainsSelected,\n treeListInstance.getSelectedRowKeys(),\n success,\n error);\n } else {\n success();\n }\n }, error, $scope.collection);\n }\n } else if (!domainsAreUnchanged()) {\n employeeSvc.saveDomainsData(\n $scope.model.employeeID,\n $scope.employeeDomains,\n origDomainsSelected,\n treeListInstance.getSelectedRowKeys(),\n success,\n error);\n } else {\n success();\n }\n }\n\n var handleFileSelect = function (evt) {\n var file = evt.currentTarget.files[0];\n var reader = new FileReader();\n reader.onload = function (evt) {\n $scope.$apply(function ($scope) {\n $scope.img.image = evt.target.result;\n $scope.model.smallImageUrl = null;\n if ($scope.model.smallImageData) {\n $scope.model.smallImageData.delete = false;\n }\n \n });\n };\n reader.readAsDataURL(file);\n };\n\n $timeout(function () {\n angular.element(document.querySelector('#fileInput')).on('change', handleFileSelect);\n }, 1000);\n\n $scope.onFranchiseAdd = function () {\n employeeSvc.initNewFranchisesLicense($scope.model);\n }\n\n $scope.onFranchiseRemove = function (franchise) {\n _.remove($scope.model.franchises, function (n) {\n return n === franchise;\n });\n }\n\n}]);\n","wbApp.controller('GroupsCtrl', ['$scope', '$modal', 'groupSvc',\nfunction ($scope, $modal, groupSvc) {\n\n $scope.$on('refreshData', function (e, data) {\n $scope.groups = groupSvc.getAllAsync();\n });\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.groups = groupSvc.getAllAsync();\n\n $scope.gridOptions = {\n columnDefs: [{ field: 'name', displayName: \"TXT_LBL_NAME\", sort: 'locale', width: '250px' },\n { field: 'description', displayName: \"TXT_LBL_DESCRIPTION\", sort: 'locale' },\n { field: 'color', displayName: \"TXT_LBL_COLOR\", cellFilter: 'wbColor', width: '70px', html: true },\n ]\n };\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.collection = $scope.groups;\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.collection = $scope.groups;\n detailDialogPromise.$scope.model = groupSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n groupSvc.remove(data, null, null, $scope.groups);\n }\n \n var detailDialogPromise = $modal({\n templateUrl: 'users/groups/groups-detail.html',\n show: false,\n scope: $scope.$new()\n });\n \n\n}]);\n","wbApp.controller('GroupsDetailCtrl', ['$scope', 'groupSvc', 'tenantSettingSvc', 'messageBoxSvc',\nfunction ($scope, groupSvc, tenantSettingSvc, messageBoxSvc) {\n\n $scope.childrenGroupModel = {\n capacity: $scope.model.groupType == 1 ? $scope.model.capacity : null,\n projectName: $scope.model.groupType == 1 ? $scope.model.projectName : null,\n projectRegistrationNumber: $scope.model.groupType == 1 ? $scope.model.projectRegistrationNumber : null,\n projectBeneficiary: $scope.model.groupType == 1 ? $scope.model.projectBeneficiary : null\n };\n\n \n\n $scope.nurseryGroupModel = {\n capacity: null,\n projectName: $scope.model.groupType == 2 ? $scope.model.projectName : null,\n projectRegistrationNumber: $scope.model.groupType == 2 ? $scope.model.projectRegistrationNumber : null,\n projectBeneficiary: $scope.model.groupType == 2 ? $scope.model.projectBeneficiary : null\n }\n\n $scope.detailIsUnchanged = function () {\n return angular.equals($scope.model, $scope.modelOrig) &&\n angular.equals($scope.nurseryGroupModel, $scope.nurseryGroupModelOrig) &&\n angular.equals($scope.childrenGroupModel, $scope.childrenGroupModelOrig);\n };\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"users/groups/group-detail-main-tab.html\"\n }];\n\n if (tenantSettingSvc.settings.childrenGroupSupport) {\n $scope.detailTabs.push({\n title: \"TXT_LBL_CHILDREN_GROUP\",\n template: \"users/groups/group-detail-children-group.html\"\n });\n } else {\n $scope.childrenGroupModel.capacity = null;\n $scope.childrenGroupModel.projectName = null;\n $scope.childrenGroupModel.projectRegistrationNumber = null;\n $scope.childrenGroupModel.projectBeneficiary = null;\n }\n\n if (tenantSettingSvc.settings.smallNurserySupport) {\n $scope.detailTabs.push({\n title: \"TXT_LBL_SMALL_NURSERY\",\n template: \"users/groups/group-detail-nursery.html\"\n });\n } else {\n $scope.nurseryGroupModel.capacity = null;\n $scope.nurseryGroupModel.projectName = null;\n $scope.nurseryGroupModel.projectRegistrationNumber = null;\n $scope.nurseryGroupModel.projectBeneficiary = null;\n }\n\n $scope.nurseryGroupModelOrig = angular.copy($scope.nurseryGroupModel);\n $scope.childrenGroupModelOrig = angular.copy($scope.childrenGroupModel);\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n var isChildrenGroupModelSet = (!!($scope.childrenGroupModel.capacity) || ($scope.childrenGroupModel.capacity === 0)) ||\n !!($scope.childrenGroupModel.projectName) ||\n !!($scope.childrenGroupModel.projectRegistrationNumber) ||\n !!($scope.childrenGroupModel.projectBeneficiary);\n\n var isNurseryGroupModelSet = !_.isNil($scope.nurseryGroupModel.capacity) ||\n !!($scope.nurseryGroupModel.projectName) ||\n !!($scope.nurseryGroupModel.projectRegistrationNumber) ||\n !!($scope.nurseryGroupModel.projectBeneficiary);\n\n if (isChildrenGroupModelSet && isNurseryGroupModelSet) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_INFORMATION',\n message: 'TXT_NURSERY_OR_CHILDREN_GROUP',\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n return;\n }\n\n var modelToSave = angular.copy(model);\n\n if (isChildrenGroupModelSet) {\n modelToSave.groupType = 1;\n modelToSave.capacity = $scope.childrenGroupModel.capacity;\n modelToSave.projectName = $scope.childrenGroupModel.projectName;\n modelToSave.projectRegistrationNumber = $scope.childrenGroupModel.projectRegistrationNumber;\n modelToSave.projectBeneficiary = $scope.childrenGroupModel.projectBeneficiary;\n } else if (isNurseryGroupModelSet) {\n modelToSave.groupType = 2;\n modelToSave.capacity = null;\n modelToSave.projectName = $scope.nurseryGroupModel.projectName;\n modelToSave.projectRegistrationNumber = $scope.nurseryGroupModel.projectRegistrationNumber;\n modelToSave.projectBeneficiary = $scope.nurseryGroupModel.projectBeneficiary;\n } else {\n modelToSave.groupType = 0;\n modelToSave.capacity = null;\n modelToSave.projectName = null;\n modelToSave.projectRegistrationNumber = null;\n modelToSave.projectBeneficiary = null;\n }\n\n $scope.isSaving = true;\n\n if (!modelToSave.groupID) {\n groupSvc.insert(modelToSave, success, error, $scope.collection);\n } else {\n groupSvc.update(modelToSave, success, error, $scope.collection);\n }\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n}]);\n","'use strict';\n\nwbApp.controller('ReferenceSourceCtrl', ['$scope', '$modal', 'referenceSourceSvc',\nfunction ($scope, $modal, referenceSourceSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['name'], directions: ['dsc'] },\n columnDefs: [{ field: 'name', displayName: \"TXT_LBL_NAME\", sort: 'locale' }]\n };\n\n $scope.rederenceSource = referenceSourceSvc.getAllAsync(true);\n\n $scope.referenceSourceDetail = { name: '' };\n $scope.referenceSourceDetailOrig;\n\n $scope.onRowEdit = function (data) {\n $scope.referenceSourceDetail.id = data.id;\n $scope.referenceSourceDetail.name = data.name;\n $scope.referenceSourceDetail.isNew = false;\n\n $scope.referenceSourceDetailOrig = angular.copy($scope.referenceSourceDetail);\n\n detailDialogPromise.$promise.then(function () {\n $scope.detailError = null;\n detailDialogPromise.show();\n });\n }\n\n $scope.detailError = null;\n\n $scope.onRowAdd = function () {\n $scope.referenceSourceDetail.id = -1;\n $scope.referenceSourceDetail.name = \"\";\n $scope.referenceSourceDetail.isNew = true;\n\n $scope.referenceSourceDetailOrig = angular.copy($scope.referenceSourceDetail);\n\n detailDialogPromise.$promise.then(function () {\n $scope.detailError = null;\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n referenceSourceSvc.remove(data);\n }\n\n $scope.onReferenceSourceDetailSave = function (data) {\n if (data.isNew) {\n referenceSourceSvc.insert(data, function (successResult) {\n detailDialogPromise.hide();\n }, function (errorResult) {\n $scope.detailError = errorResult;\n });\n } else {\n referenceSourceSvc.update(data, function (successResult) {\n detailDialogPromise.hide();\n }, function (errorResult) {\n $scope.detailError = errorResult;\n });\n }\n }\n\n $scope.tabs = [\n {\n title: 'TXT_REFERENCE_SOURCE_TIME_DEVELOPMENT',\n template: \"users/reference-source-tabs/time-development.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n //$scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n // $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n //});\n\n var detailDialogPromise = $modal({\n templateUrl: 'users/reference-source-detail.html',\n show: false,\n scope: $scope\n });\n}]);","'use strict';\n\nwbApp.controller('ReferenceSourceTimeDevelopmentCtrl', ['$scope', '$translate', '$timeout', 'referenceSourceSvc',\nfunction ($scope, $translate, $timeout, referenceSourceSvc) {\n\n $scope.fromDate = moment().subtract(6, 'months').toDate();\n $scope.toDate = moment().add(1, 'day').toDate();\n\n $scope.referenceSourceTimeDevelopment = {\n type: 'AreaChart',\n data: [[]],\n options: {\n displayExactValues: true,\n isStacked: true,\n chartArea: { top: 20, left: 30, width: '80%', height: '75%' },\n legend: {\n position: 'right'\n },\n vAxis: {},\n hAxis: {},\n orientation: 'horizontal'\n }\n };\n\n function loadData() {\n if ($scope.fromDate && $scope.toDate) {\n referenceSourceSvc.getReferenceSourceTimeDevelopment($scope.fromDate, $scope.toDate)\n .then(function (data) {\n $scope.referenceSourceTimeDevelopment.data = data;\n });\n }\n }\n\n\n $scope.onDateRangeChanged = function () {\n loadData();\n }\n\n loadData();\n\n}]);","wbApp.controller('RequestConsentFromAllCtrl', ['$scope', '$http', '$q', '$modal', '$translate', '$filter', 'messageBoxSvc',\n 'consentDefinitionSvc', 'consentSvc',\nfunction ($scope, $http, $q, $modal, $translate, $filter, messageBoxSvc, consentDefinitionSvc, consentSvc) {\n\n $scope.isSaving = false;\n $scope.selectableConsents = [];\n\n var allConsents = consentDefinitionSvc.getAllAsync(false);\n allConsents.$promise.then(function (c) {\n _.forEach(c, function (consent) {\n if (consent.active) {\n $scope.selectableConsents.push({\n selected: false,\n consent: consent\n });\n }\n }) ;\n });\n\n $scope.detailIsUnchanged = function () {\n return !(_.filter($scope.selectableConsents, { 'selected': true })).length;\n }\n\n $scope.onConsentClick = function (consent) {\n consent.selected = !consent.selected;\n };\n\n $scope.onSaveClick = function (selectableConsents, informUsers) {\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n var selectedConsentIDs = _.map(_.filter(selectableConsents, { 'selected': true }), 'consent.consentDefinitionID');\n var userIDs = _.map($scope.selectedUsers, 'userID');\n\n if (selectedConsentIDs.length && userIDs.length) {\n consentSvc.assignConsensts({\n informUsers: informUsers,\n consnetIDs: selectedConsentIDs,\n userIDs: userIDs\n }, function () {\n $scope.isSaving = false;\n $scope.$hide();\n }, function () {\n $scope.isSaving = false;\n $scope.$hide();\n });\n } else {\n $scope.isSaving = false;\n $scope.$hide();\n }\n }\n \n}]);\n\n\n","wbApp.controller('SelectWeekDateRangeDlg', ['$scope',\nfunction ($scope, groupSvc) {\n\n $scope.onCancel = function () {\n $scope.$hide();\n $scope.onCanceled();\n }\n\n $scope.onDetailSave = function (model) {\n\n $scope.$hide();\n $scope.onSaved($scope.model);\n }\n}]);\n","wbApp.controller('StudentsActionsCtrl', ['$scope', 'courseRegistrationSvc', 'tenantSettingSvc',\nfunction ($scope, courseRegistrationSvc, tenantSettingSvc) {\n\n $scope.tenantSettings = tenantSettingSvc.settings;\n\n var selectedStudent = null;\n var isActive = false;\n var loaded = false;\n $scope.actions = [];\n\n $scope.$on('studentSelectionChanged', function (e, data) {\n if (data.student) {\n if (isActive) {\n if (selectedStudent !== data.student || data.refresh) {\n $scope.actions = courseRegistrationSvc.getAllActionsByStudent(data.student.id);\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else {\n $scope.actions.length = 0;\n }\n selectedStudent = data.student;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 2) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedStudent) {\n $scope.actions = courseRegistrationSvc.getAllActionsByStudent(selectedStudent.id);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['semesterName'], directions: ['asc'] },\n columnDefs: [\n { field: 'semesterName', displayName: \"TXT_LBL_SEMESTER\", width: '140px' },\n { field: 'courseFullName', displayName: \"TXT_LBL_ACTIONS\", width: '300px' },\n { field: 'firstDate', displayName: \"TXT_MENU_SCHEDULE\", cellFilter: 'date:dd.MM.yy EEE HH:mm', width: '120px' },\n { field: 'notes', displayName: \"TXT_LBL_NOTE\" },\n { field: 'price', displayName: \"TXT_LBL_PRICE\", cellFilter: 'wbCurrencyFlt', width: '100px', align: 'right', smHide: true, mdHide: true },\n { field: 'paymentsSum', displayName: \"TXT_LBL_PAYMENTS\", cellFilter: 'wbCurrencyFlt', align: 'right', width: '100px', smHide: true },\n { field: 'registrationDate', displayName: \"TXT_LBL_REGISTRATION_DATE\", cellFilter: 'date:shortDate', width: '75px', smHide: true }\n ],\n noCommandColumn: true\n };\n\n if ($scope.tenantSettings.showArrearInsteadOfPayments) {\n $scope.gridOptions.columnDefs[4].field = 'arrear';\n $scope.gridOptions.columnDefs[4].displayName = 'TXT_LBL_ARREAR';\n }\n\n}]);\n\n\n","wbApp.controller('StudentsAttendanceDetailCtrl', ['$scope', 'attendanceSvc',\nfunction ($scope, attendanceSvc) {\n\n var selectedStudent = null;\n var isActive = false;\n var loaded = false;\n $scope.attendanceDetail = [];\n\n $scope.$on('studentSelectionChanged', function (e, data) {\n if (data.student) {\n if (isActive) {\n if (selectedStudent !== data.student || data.refresh) {\n $scope.attendanceDetail = attendanceSvc.groupAttendanceDetail(\n attendanceSvc.getStudentAttendanceDetail(data.student.id));\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else {\n $scope.attendanceDetail.length = 0;\n }\n selectedStudent = data.student;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 4) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedStudent) {\n $scope.attendanceDetail = attendanceSvc.groupAttendanceDetail(\n attendanceSvc.getStudentAttendanceDetail(selectedStudent.id));\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.attendanceDetailFilterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n columnDefs: [\n { field: 'course', displayName: \"TXT_LBL_COURSE\", sort: 'locale' },\n { field: 'attendanceCount', displayName: \"TXT_LBL_COUNT\", width: '55px' },\n { field: 'startDate', displayName: \"TXT_LBL_START_DATE\", cellFilter: 'date:dd.MM.yy - EEE HH:mm', width: '140px' },\n { field: 'endDate', displayName: \"TXT_LBL_END_DATE\", cellFilter: 'date:HH:mm', width: '55px' },\n { field: 'courseAttendanceStatus', displayName: \"TXT_COL_ATTENDANCE_STATUS\", cellFilter: 'attendanceStatus', width: '100px' },\n { field: 'courseAttendanceType', displayName: \"TXT_COL_ATTENDANCE_TYPE\", cellFilter: 'attendanceType', width: '100px' },\n { field: 'courseAttendanceFeeType', displayName: \"TXT_LBL_COURSE_FEE\", cellFilter: 'attendanceFeeType', width: '70px' },\n { field: 'teacherFullName', displayName: \"TXT_LBL_EMPLOYEE\", width: '140px', sort: 'locale' },\n { field: 'studentAttendanceNote', displayName: \"TXT_LBL_NOTES\",width: '180px', sort: 'locale' },\n ],\n noCommandColumn: true,\n pageSize: 20,\n disableRowSelection: true,\n grouping: {\n enabled: true,\n isGroupRowPropertyName: 'isGroupRow',\n subItemsPropertyName: 'items'\n }\n };\n\n}]);\n\n\n","wbApp.controller('StudentsAttendanceSummaryCtrl', ['$scope', '$popover', '$timeout', '$translate' ,'attendanceSvc',\nfunction ($scope, $popover, $timeout, $translate, attendanceSvc) {\n\n var selectedStudent = null;\n var isActive = false;\n var loaded = false;\n $scope.semesters = [];\n\n $scope.$on('studentSelectionChanged', function (e, data) {\n if (data.student) {\n if (isActive) {\n if (selectedStudent !== data.student || data.refresh) {\n $scope.semesters = attendanceSvc.getAttendanceSummary(data.student.id);\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else {\n $scope.semesters.length = 0;\n }\n selectedStudent = data.student;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 3) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedStudent) {\n $scope.semesters = attendanceSvc.getAttendanceSummary(selectedStudent.id);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n\n $scope.onExcusesClick = function (semester, event) {\n var element = angular.element(document.querySelector('#popover-detail-' + semester.semesterID));\n\n var myPopover = $popover(element, {\n title: $translate.instant('TXT_COMPENSATION'),\n content: '' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n '
' + $translate.instant('TXT_LBL_ELIGIBLE_AMENDS') + '' + semester.eligibleAmends + '
' + $translate.instant('TXT_LBL_AMENDS_LEFT') + '' + semester.remainingAmends + '
' + $translate.instant('TXT_LBL_PRE_AMENDS_GRANTED') + '' + semester.eligiblePreAmends + '
' + $translate.instant('TXT_LBL_PRE_AMENDS_LEFT') + '' + semester.remainingPreAmends + '
' + $translate.instant('TXT_LBL_ELIGIBLE_TIME_BOUNDS') + '' + semester.eligibleTimeBoundAmends + '
' + $translate.instant('TXT_LBL_TIME_BOUNDS_AMEND') + '' + semester.remainingTimeBoundAmends + '
',\n placement: 'top',\n autoClose: true,\n html: true,\n trigger: 'manual',\n container: 'body',\n target: element,\n viewport: 'body',\n\n });\n\n myPopover.$promise.then(function () {\n $timeout(function () {\n myPopover.$applyPlacement();\n myPopover.show();\n }, 100);\n });\n }\n\n}]);\n\n\n","wbApp.controller('StudentsCoursesCtrl', ['$scope', 'courseRegistrationSvc', 'tenantSettingSvc',\nfunction ($scope, courseRegistrationSvc, tenantSettingSvc) {\n\n $scope.tenantSettings = tenantSettingSvc.settings;\n\n var selectedStudent = null;\n var isActive = true;\n var loaded = false;\n $scope.courses = [];\n\n $scope.$on('studentSelectionChanged', function (e, data) {\n if (data.student) {\n if (isActive) {\n if (selectedStudent !== data.student || data.refresh) {\n $scope.courses = courseRegistrationSvc.getAllCoursesByStudent(data.student.id);\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else {\n $scope.courses.length = 0;\n }\n selectedStudent = data.student;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 1) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedStudent) {\n $scope.courses = courseRegistrationSvc.getAllCoursesByStudent(selectedStudent.id);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['semesterName'], directions: ['asc'] },\n columnDefs: [\n { field: 'semesterName', displayName: \"TXT_LBL_SEMESTER\", width: '140px' },\n { field: 'courseFullName', displayName: \"TXT_LBL_COURSE\", width: '300px' },\n { field: 'firstDate', displayName: \"TXT_MENU_SCHEDULE\", cellFilter: 'date:EEE HH:mm', width: '80px' },\n { field: 'notes', displayName: \"TXT_LBL_NOTE\" },\n { field: 'price', displayName: \"TXT_LBL_PRICE\", cellFilter: 'wbCurrencyFlt', width: '100px', align: 'right', smHide: true, mdHide: true },\n { field: 'paymentsSum', displayName: \"TXT_LBL_PAYMENTS\", cellFilter: 'wbCurrencyFlt', align: 'right', width: '100px', smHide: true },\n { field: 'registrationDate', displayName: \"TXT_LBL_REGISTRATION_DATE\", cellFilter: 'date:shortDate', width: '75px', smHide: true }\n ],\n noCommandColumn: true\n };\n\n if ($scope.tenantSettings.showArrearInsteadOfPayments) {\n $scope.gridOptions.columnDefs[4].field = 'arrear';\n $scope.gridOptions.columnDefs[4].displayName = 'TXT_LBL_ARREAR';\n }\n\n}]);\n\n\n","wbApp.controller('StudentsCtrl', ['$scope', '$q', '$modal', '$window', '$translate', '$filter', 'studentSvc', 'securitySvc', 'groupSvc', 'tenantSettingSvc', 'gridSortSvc',\r\nfunction ($scope, $q, $modal, $window, $translate, $filter, studentSvc, securitySvc, groupSvc, tenantSettingSvc, gridSortSvc) {\r\n\r\n $scope.tenantSetting = tenantSettingSvc.settings;\r\n \r\n var isInCourseRole = securitySvc.isInRole('Course');\r\n var isInActionRole = securitySvc.isInRole('Action');\r\n var isInAttendanceRole = securitySvc.isInRole('Attendance');\r\n $scope.isInProtectedViewRole = securitySvc.isInRole('Student.ProtectedView');\r\n\r\n $scope.groups = groupSvc.getAllAsync(true);\r\n $scope.customFilter = { selectedGroups: [] };\r\n $scope.rawStudents = [];\r\n $scope.students = [];\r\n $scope.filteredStudents = [];\r\n\r\n function preFilter() {\r\n $q.all([$scope.groups.$promise, $scope.rawStudents.$promise]).then(function () {\r\n if (!$scope.customFilter.selectedGroups.length) {\r\n $scope.students.length = 0;\r\n $scope.students.push.apply($scope.students, $scope.rawStudents);\r\n } else {\r\n\r\n var noGroupSelected = $scope.customFilter.selectedGroups.indexOf(-1) !== -1;\r\n\r\n $scope.students.length = 0;\r\n $scope.students.push.apply($scope.students,\r\n _.filter($scope.rawStudents, function (o) {\r\n if (noGroupSelected) {\r\n return !o.groups.length;\r\n }\r\n\r\n return _.intersection(o.groups, $scope.customFilter.selectedGroups).length > 0\r\n }));\r\n }\r\n });\r\n }\r\n \r\n $scope.groupsCombo = {\r\n items: $scope.groups,\r\n displayExpr: 'name',\r\n valueExpr: 'groupID',\r\n showSelectionControls: true,\r\n maxDisplayedTags: 3,\r\n multiline: false,\r\n itemTemplate: 'customItem',\r\n bindingOptions: {\r\n value: 'customFilter.selectedGroups'\r\n },\r\n }\r\n\r\n $scope.$watch('customFilter.selectedGroups', function (newValue, oldValue) {\r\n preFilter();\r\n }, true);\r\n\r\n\r\n $scope.gridSettings = {\r\n name: 'students',\r\n columns: [\r\n {\r\n dataField: 'fullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', width: '180px', sortOrder: 'asc',\r\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName(data, 'name', 'surname', 'middleName') },\r\n },\r\n {\r\n dataField: 'gender',\r\n caption: $translate.instant('TXT_LBL_GENDER'),\r\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('gender')(rowData.gender);\r\n },\r\n width: '80px',\r\n visible: $scope.tenantSetting.mandatoryStudentGender < 3\r\n },\r\n { \r\n dataField: 'birthday', \r\n caption: $translate.instant(\"TXT_LBL_BIRTHDAY\"), \r\n dataType: 'date', \r\n format: { date: 'short' }, \r\n width: '70px',\r\n visible: $scope.tenantSetting.mandatoryStudentBirthday < 3\r\n },\r\n {\r\n dataField: 'parentFullName', caption: $translate.instant('TXT_LBL_PARENT'), dataType: 'string', width: '180px',\r\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'parentFullName') }\r\n },\r\n { \r\n dataField: 'address', \r\n caption: $translate.instant('TXT_LBL_ADDRESS'), \r\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n if (!!rowData.studentAddress ) {\r\n return rowData.studentAddress;\r\n }\r\n return rowData.address;\r\n },\r\n \r\n },\r\n { dataField: 'email', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '180px' },\r\n {\r\n dataField: 'phone',\r\n caption: $translate.instant('TXT_LBL_PHONE'),\r\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('phone')(rowData.phone);\r\n },\r\n width: '130px'\r\n },\r\n { dataField: 'active', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\r\n { dataField: 'adminNotes', caption: $translate.instant('TXT_LBL_NOTE'), dataType: 'string', visible: false },\r\n ],\r\n shouldDisableExportMenu: function () {\r\n return !securitySvc.isInRole('Student.Export');\r\n },\r\n customCommands: [{\r\n text: $translate.instant('TXT_LBL_ACTIVITY_YEAR_PAYMENT_CONFIRMATION_REPORT'),\r\n isVisible: function () {\r\n return securitySvc.isInRole('Reports') &&\r\n securitySvc.isInRole('ActivityYearPaymentConfirmation') &&\r\n $scope.tenantSetting.enableKindergartenSupport;\r\n },\r\n callback: function (data) { showActivityYearPaymentConfirmationDialog(data.id); }\r\n }]\r\n }\r\n\r\n $scope.tabs = [{\r\n title: 'TXT_DETAIL',\r\n template: \"users/students/detail-tabs/detail.html\"\r\n }];\r\n\r\n if (isInCourseRole) {\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_COURSES',\r\n template: \"users/students/detail-tabs/courses.html\"\r\n });\r\n }\r\n\r\n if (isInActionRole) {\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_ACTIONS',\r\n template: \"users/students/detail-tabs/actions.html\"\r\n });\r\n }\r\n\r\n if (isInAttendanceRole) {\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_ATTENDANCE_SUMMARY',\r\n template: \"users/students/detail-tabs/attendance-summary.html\"\r\n });\r\n\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_ATTENDANCE_DETAIL',\r\n template: \"users/students/detail-tabs/attendance-detail.html\"\r\n });\r\n }\r\n\r\n $scope.tabs.activeTab = 0;\r\n\r\n $scope.selectedStudent = null;\r\n\r\n function setSelectedStudent(student, refresh) {\r\n $scope.selectedStudent = student;\r\n $scope.$broadcast('studentSelectionChanged', { student: $scope.selectedStudent, refresh: !!refresh });\r\n }\r\n\r\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\r\n $scope.$broadcast('activeTabChanged', { activeTab: newValue });\r\n });\r\n\r\n $scope.rawStudents = studentSvc.getAll();\r\n\r\n preFilter();\r\n\r\n $scope.$on('refreshData', function (e, data) {\r\n $scope.rawStudents = studentSvc.getAll();\r\n setSelectedStudent(null);\r\n });\r\n\r\n $scope.onRowSelected = function (data) {\r\n setSelectedStudent(data);\r\n }\r\n\r\n $scope.onRowAdd = function () {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.collection = $scope.students;\r\n detailDialogPromise.$scope.model = studentSvc.createNew();\r\n detailDialogPromise.$scope.onStudentSave = function (model) {\r\n setSelectedStudent(model, true);\r\n };\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowEdit = function (data) {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.collection = $scope.students;\r\n detailDialogPromise.$scope.model = angular.copy(data);\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowDelete = function (data) {\r\n studentSvc.remove(data, null, $scope.students);\r\n }\r\n\r\n $scope.onFilterApplied = function (rows) {\r\n $scope.filteredStudents = rows;\r\n }\r\n\r\n $scope.getStudentsActive = function () {\r\n if (!!$scope.filteredStudents) {\r\n return _.countBy($scope.filteredStudents, 'active')['true'] || 0;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n $scope.getStudentsCount = function () {\r\n if (!!$scope.filteredStudents) {\r\n return $scope.filteredStudents.length;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n $scope.getStudentsActivePercent = function () {\r\n return ($scope.getStudentsActive() / $scope.getStudentsCount()) * 100;\r\n }\r\n\r\n var detailDialogPromise = $modal({\r\n templateUrl: 'users/students/students-detail.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n\r\n function showActivityYearPaymentConfirmationDialog(studentID) {\r\n\r\n activityTaxDeductionReportParamsDialog.$promise.then(function () {\r\n activityTaxDeductionReportParamsDialog.$scope.studentID = studentID;\r\n activityTaxDeductionReportParamsDialog.show();\r\n });\r\n }\r\n\r\n var activityTaxDeductionReportParamsDialog = $modal({\r\n templateUrl: 'users/students/students-tax-deduction-report-params.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n}]);\r\n\r\n\r\n","wbApp.controller('StudentsDetailCtrl', ['$scope', 'studentSvc', 'securitySvc', 'tenantSettingSvc', '$http',\nfunction ($scope, studentSvc, securitySvc, tenantSettingSvc, $http) {\n\n $scope.tenantSetting = tenantSettingSvc.settings;\n \n $scope.modelOrig = angular.copy($scope.model);\n $scope.isInSupportRole = securitySvc.isInRole('Support');\n $scope.isInProtectedViewRole = securitySvc.isInRole('Student.ProtectedView');\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n studentSvc.insert(data, success, error, $scope.collection);\n } else {\n studentSvc.update(data, success, error, $scope.collection);\n }\n\n function success(newStudent) {\n if (!!$scope.onStudentSave) {\n $scope.onStudentSave(newStudent);\n }\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig) && !$scope.preFilled;\n };\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"users/students/students-detail-main-tab.html\"\n },\n {\n title: 'TXT_LBL_ADITIONAL',\n template: \"users/students/students-detail-aditional-tab.html\"\n },\n {\n title: 'TXT_LAB_HEALTH',\n template: \"users/students/students-detail-health-tab.html\"\n }\n ];\n \n if ($scope.tenantSetting.mandatoryStudentNotes < 3) {\n $scope.detailTabs.push(\n {\n title: 'TXT_LBL_NOTE',\n template: \"users/students/students-detail-notes-tab.html\"\n });\n }\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.typeAheadAddress = [];\n\n $scope.allMatch = function () {\n return true;\n };\n\n $scope.getAddress = function (viewValue) {\n if (viewValue) {\n let params = {\n address: viewValue,\n language: 'cs',\n region: 'cz',\n bounds: '48.270777,12.172380|51.246709,19.922157', // Czech republic bounds\n key: 'AIzaSyDdpRFWJaEcASaUgQxTdi8i42aaCaKfS0A'\n };\n return $http.get('https://maps.googleapis.com/maps/api/geocode/json', { params: params })\n .then(function (res) {\n $scope.typeAheadAddress.length = 0;\n $scope.typeAheadAddress.push.apply($scope.typeAheadAddress, res.data.results);\n });\n }\n }; \n\n}]);\n","wbApp.controller('StudentsTaxDeductionReportParamsCtrl', ['$scope', '$window',\nfunction ($scope, $window) {\n\n $scope.model = {\n selectedYear: 2018,\n maxYear: moment().year()\n };\n\n var endOfApril = moment().startOf('year').add(4, 'M').endOf('month');\n if (moment().isBefore(endOfApril)) {\n $scope.model.selectedYear = moment().startOf('year').subtract(1, 'year').year();\n } else {\n $scope.model.selectedYear = moment().startOf('year').year();\n }\n\n $scope.onReportPrint = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n $scope.$hide();\n\n var fromDate = moment().year($scope.model.selectedYear).startOf('year').toDate();\n var toDate = moment().year($scope.model.selectedYear).endOf('year').toDate();\n\n $window.open('/Admin/Report/ActivityYearPaymentConfirmation' +\n '?StudentID=' + $scope.studentID +\n '&StartDate=' + fromDate.toJSON() +\n '&EndDate=' + toDate.toJSON(),\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n $scope.onExportReportToXls = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n $scope.$hide();\n\n var fromDate = moment().year($scope.model.selectedYear).startOf('year').toDate();\n var toDate = moment().year($scope.model.selectedYear).endOf('year').toDate();\n\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n }\n\n\n}]);\n","'use strict';\n\nwbApp.controller('UserRolesCtrl', ['$scope', '$modal', '$translate', 'userRolesSvc',\nfunction ($scope, $modal, $translate, userRolesSvc) {\n\n $scope.$on('refreshData', function (e, data) {\r\n $scope.userRoles = userRolesSvc.getAllAsync(true);\r\n });\n\n $scope.gridSettings = {\r\n name: 'userRoles',\r\n columns: [\r\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '180px' },\r\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string' },\r\n { dataField: 'buildIn', caption: $translate.instant('TXT_LBL_SYSTEM'), dataType: 'boolean', width: '70px' }\r\n ]\r\n };\n\n $scope.userRoles = userRolesSvc.getAllAsync();\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = userRolesSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n userRolesSvc.remove(data);\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'users/user-roles-detail.html',\n show: false,\n scope: $scope\n });\n\n}]);\n","wbApp.controller('UserRolesDetailCtrl', ['$scope', 'userRolesSvc', 'tenantSettingSvc',\nfunction ($scope, userRolesSvc, tenantSettingSvc) {\n\n userRolesSvc.extendWithRfidSchedule($scope.model);\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n userRolesSvc.save(data, success, error);\n\n function success() {\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.accessType = $scope.model.rfidAccessGroup.rfidAccessGroupID >= 253\n ? $scope.model.rfidAccessGroup.rfidAccessGroupID\n : 0;\n\n $scope.onAccessTypeChange = function (accessType) {\r\n if (accessType >= 253) {\r\n $scope.model.rfidAccessGroup.rfidAccessGroupID = accessType;\r\n } else {\r\n if ($scope.modelOrig.rfidAccessGroup.rfidAccessGroupID < 253) {\r\n $scope.model.rfidAccessGroup.rfidAccessGroupID = $scope.modelOrig.rfidAccessGroup.rfidAccessGroupID;\r\n } else {\r\n $scope.model.rfidAccessGroup.rfidAccessGroupID = 0;\r\n }\r\n }\r\n }\n\n $scope.detailTabs = [\n {\r\n title: 'TXT_MAIN',\n template: \"users/user-roles-detail-main-tab.html\"\r\n },{\r\n title: \"TXT_ADMIN_SECURITY\",\n template: \"users/user-roles-detail-admin-security-tab.html\",\n paneScrollable: true\r\n },{\r\n title: \"TXT_CLIENT_SECURITY\",\n template: \"users/user-roles-detail-client-security-tab.html\",\n paneScrollable: true\r\n }\n ];\n\n if (tenantSettingSvc.settings.enableRfidAccessGroups) {\r\n $scope.detailTabs.push({\r\n title: 'TXT_RFID_ACCESS_GROUP_TITLE',\r\n template: \"users/user-roles-detail-rfid-access-group-tab.html\"\r\n });\r\n }\n\n $scope.detailTabs.activeTab = 0;\n\n}]);\n","'use strict';\n\nwbApp.controller('UsersConsentsCtrl', ['$scope', '$http', '$q', '$modal', '$translate', '$filter', 'messageBoxSvc',\n 'consentSvc', 'gridSortSvc', 'securitySvc', 'userSvc', 'consentDefinitionSvc',\nfunction ($scope, $http, $q, $modal, $translate, $filter, messageBoxSvc,\n consentSvc, gridSortSvc, securitySvc, userSvc, consentDefinitionSvc) {\n\n $scope.filteredUsers = [];\n $scope.selectedUser = null;\n $scope.usersConsents = [];\n\n $scope.customFileter = { consentDefinitionID: null };\n\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"users/users-consents/detail-tabs/users-consents-detail.html\"\n }\n ];\n\n $scope.gridSettings = {\n name: 'usersConsents',\n columns: [\n {\n dataField: 'fullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', sortOrder: 'asc',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName(data, 'name', 'surname', 'middleName') }\n },\n { dataField: 'email', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '180px' },\n {\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.phone);\n },\n width: '140px'\n },\n { dataField: 'customConsent', caption: $translate.instant(\"TXT_LBL_IDM_CONSENT\"), dataType: 'datetime', format: { date: 'short' }, width: '90px', visible: false },\n { dataField: 'idmEmailConfirmed', caption: $translate.instant('TXT_IDENTITY_CONFIRMED'), dataType: 'boolean', width: '90px' },\n { dataField: 'isDisabled', caption: $translate.instant('TXT_DISABLED'), dataType: 'boolean', width: '60px' },\n ],\n onInitialized: function (e) {\n $scope.dataGridInstance = e.component; \n },\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (!data.idmConsentIssued) {\n e.rowElement.addClass('text-danger');\n }\n }\n },\n customCommands: [{\n text: $translate.instant('TXT_LBL_CONSENTS_DEFINITIONS'),\n isVisible: function (row) { return securitySvc.isInRole('ConsentDefinition'); },\n callback: function (row) {\n $scope.showConsentsDefinitionsDetail();\n }\n }, {\n text: $translate.instant('TXT_LBL_REQUEST_CONSENT'),\n isVisible: function (row) { return securitySvc.isInRole('ConsentDefinition') && !!$scope.selectedUser; },\n callback: function (row) {\n $scope.requestConsentsFromAll([$scope.selectedUser]);\n }\n }, {\n text: $translate.instant('TXT_LBL_REQUEST_CONSENT_FROM_ALL'),\n isVisible: function (row) { return securitySvc.isInRole('ConsentDefinition'); },\n callback: function (row) {\n $scope.requestConsentsFromAll($scope.filteredUsers);\n }\n }, {\n text: $translate.instant('TXT_LBL_ANONYMIZE_DATA'),\n isVisible: function (row) { return securitySvc.isInRole('User.Anonymize'); },\n callback: function (row) {\n $scope.requestAnonimizeData($scope.selectedUser);\n }\n }]\n\n }\n\n $scope.$watch('customFilter.consentDefinitionID', function (newValue, oldValue) {\n if (newValue) {\n _.forEach($scope.usersConsents, function (item) {\n var idx = _.findIndex(item.consents, { 'consentDefinitionID': newValue });\n if (idx !== -1) {\n item.customConsent = item.consents[idx].consentRatifiedTo;\n } else {\n item.customConsent = null;\n }\n });\n\n if ($scope.dataGridInstance) {\n $scope.dataGridInstance.columnOption(\"customConsent\", \"visible\", true);\n\n consentDefinitionSvc.getConsentNameByIDAsync(newValue).then(function (consent) {\n $scope.dataGridInstance.columnOption(\"customConsent\", \"caption\", consent.name);\n });\n }\n } else {\n if ($scope.dataGridInstance) {\n $scope.dataGridInstance.columnOption(\"customConsent\", \"visible\", false);\n }\n\n _.forEach($scope.usersConsents, function (item) {\n item.customConsent = null;\n });\n }\n }, true);\n\n function setSelectedUser(data) {\n $scope.selectedUser = data;\n $scope.$broadcast('userConsentSelectionChanged', data);\n }\n\n function loadData(refresh) {\n $scope.usersConsents = consentSvc.getConsentsInfoBrief(refresh); \n }\n\n loadData(true);\n\n $scope.$on('refreshData', function (e, data) {\n loadData(true);\n\n setSelectedUser(null);\n });\n\n $scope.onFilterApplied = function (rows) {\n $scope.filteredUsers = rows;\n }\n\n $scope.onRowSelected = function (data) {\n setSelectedUser(data);\n }\n\n $scope.requestConsentsFromAll = function (selectedUsers) {\n requestConsentFromAllDialog.$promise.then(function () {\n requestConsentFromAllDialog.$scope.selectedUsers = selectedUsers;\n requestConsentFromAllDialog.show();\n });\n }\n\n\n $scope.showConsentsDefinitionsDetail = function () {\n consentsDefinitions.$promise.then(function () {\n consentsDefinitions.show();\n });\n }\n\n $scope.requestAnonimizeData = function (user) {\n\n function onYesClicked() {\n userSvc.anonymize(user.userID, false, function () {\n loadData(refresh);\n });\n }\n\n function onYesWithTaxDocumentClicked() {\n userSvc.anonymize(user.userID, true, function () {\n loadData(refresh);\n });\n }\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_ANONYMIZE_CONFIRM_TITLE',\n message: $translate.instant('TXT_ANONYMIZE_CONFIRM_DESC').f(user.fullName),\n buttons: [{\n text: 'TXT_BTN_YES',\n callback: onYesClicked,\n danger: true\n }, {\n text: 'TXT_BTN_YES_WITH_TAX_DOCUMENTS',\n callback: onYesWithTaxDocumentClicked,\n danger: true\n }, {\n text: 'TXT_BTN_NO',\n primary: true\n }]\n });\n }\n\n var consentsDefinitions = $modal({\n templateUrl: 'users/users-consents/consents-definitions.html',\n show: false,\n scope: $scope.$new()\n });\n\n var requestConsentFromAllDialog = $modal({\n templateUrl: 'users/users-consents/request-consent-from-all.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n\n\n","wbApp.controller('UsersConsentsDetailCtrl', ['$scope', '$modal', '$translate', 'consentSvc',\nfunction ($scope, $modal, $translate, consentSvc) {\n\n $scope.userConsentsDetails = [];\n\n $scope.$on('userConsentSelectionChanged', function (e, newlySelectedUser) {\n $scope.userConsentsDetails.length = 0;\n if (newlySelectedUser) {\n consentSvc.getConsentsInfoForUser(newlySelectedUser.userID).$promise.then(\n function (data) {\n $scope.userConsentsDetails.push.apply($scope.userConsentsDetails, data.consents);\n });\n }\n });\n\n $scope.userConsentsDetailGridSettings = {\n name: 'userConsentsDetail',\n columns: [\n { dataField: 'consentName', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', sortOrder: 'asc', width: '130px' },\n { dataField: 'consentText', caption: $translate.instant('TXT_LBL_TEXT'), dataType: 'string' },\n\n { dataField: 'consentRatifiedAt', caption: $translate.instant('TXT_APPROVED_AT'), dataType: 'date', width: '90px' },\n { dataField: 'consentRevokedAt', caption: $translate.instant('TXT_DENIED_AT'), dataType: 'date', width: '90px' },\n\n { dataField: 'validFrom', caption: $translate.instant('TXT_LAB_VALID_FROM'), dataType: 'date', width: '90px' },\n { dataField: 'validTo', caption: $translate.instant('TXT_LAB_VALID_TO'), dataType: 'date', width: '90px' },\n ],\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (!!data.consentRevokedAt) {\n e.rowElement.addClass('text-danger');\n }\n else if (!!data.consentRatifiedAt) {\n e.rowElement.addClass('text-success');\n }\n }\n }\n }\n\n}]);\n","'use strict';\n\nwbApp.controller('UsersCtrl', ['$scope', '$http', '$q', '$modal', '$translate', '$filter', 'userSvc', 'userRolesSvc', \n 'referenceSourceSvc', 'gridSortSvc', 'securitySvc', 'messageBoxSvc', '$timeout', 'tenantSettingSvc',\nfunction ($scope, $http, $q, $modal, $translate, $filter, userSvc, userRolesSvc, \n referenceSourceSvc, gridSortSvc, securitySvc, messageBoxSvc, $timeout, tenantSettingSvc) {\n\n $scope.customFilter = { unfinishedRegistrations: false };\n $scope.users = [];\n \n $scope.tenantSetting = tenantSettingSvc.settings;\n let hasSecondContact =\n ($scope.tenantSetting.mandatoryEmail2 < 3) ||\n ($scope.tenantSetting.mandatoryPhone2 < 3) ||\n ($scope.tenantSetting.mandatoryUserNationality2 < 3) ||\n ($scope.tenantSetting.mandatoryUserName2 < 3) ||\n ($scope.tenantSetting.mandatoryUserSurname2 < 3) ||\n ($scope.tenantSetting.mandatoryUserMiddleName2 < 3) ||\n ($scope.tenantSetting.mandatoryUserAddress2 < 3) ||\n ($scope.tenantSetting.mandatoryUserIdentityCardNumber2 < 3) ||\n ($scope.tenantSetting.mandatoryUserPersonalIDNumber2 < 3) ||\n ($scope.tenantSetting.mandatoryUserBirthday2 < 3);\n \n \n $scope.$watch('customFilter.unfinishedRegistrations', function (newValue, oldValue) {\n $scope.users = userSvc.getAllAsync(true, !newValue);\n }, true); \n \n function sendInvitationToUser(usersToInvite, idx, progressCallback)\n {\n if (usersToInvite.length >= (idx + 1)) {\n var user = angular.copy(usersToInvite[idx]);\n user.requestBindToIDM = true;\n userSvc.update(user,\n function () {\n progressCallback({\n pctProgress: (((idx + 1) / usersToInvite.length) * 100) % 101,\n progressMsg: 'OK - ' + user.fullName + ' (' + user.email + ')',\n status: 0\n }); \n $timeout(function () {\n sendInvitationToUser(usersToInvite, idx + 1, progressCallback);\n }, 600);\n },\n function (error) {\n let errorMsg = _.join(_.map(error.errors || [], 'message'), ',');\n progressCallback({\n pctProgress: (((idx + 1) / usersToInvite.length) * 100) % 101,\n progressMsg: 'ERROR - ' + user.fullName + ' (' + user.email + ') : ' + errorMsg,\n status: 1\n });\n $timeout(function () {\n sendInvitationToUser(usersToInvite, idx + 1, progressCallback);\n }, 600);\n }, true);\n } else {\n progressCallback({\n pctProgress: 100,\n progressMsg: $translate.instant('TXT_FINISH'),\n status: 2\n });\n }\n }\n\n function sendInvitationToAll(reSendOnly) {\n\n function sendInvitationToAllImpl(usersToInvite) {\n if (usersToInvite.length > 0) {\n var callback = messageBoxSvc.showPctProgress(\n $translate.instant('TXT_SEND_INVITATION_PROGRESS_TITLE'),\n $translate.instant('TXT_SEND_INVITATION_PROGRESS_DESC'));\n sendInvitationToUser(usersToInvite, 0, callback);\n }\n }\n \n if (reSendOnly) {\n var boundUsersToReInvite = _.filter($scope.users, function (user) {\n return !user.isAnonymized && !user.isDisabled && !user.idmEmailConfirmed && user.boundToIDM && user.allowEmailContact;\n });\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_RE_SEND_INVITATION_CONFIRM_TITLE',\n message: $translate.instant('TXT_RE_SEND_INVITATION_CONFIRM_DESC').f(boundUsersToReInvite.length),\n buttons: [{\n text: 'TXT_BTN_SEND',\n callback: function () { sendInvitationToAllImpl(boundUsersToReInvite); }\n }, {\n text: 'TXT_BTN_CANCEL',\n primary: true\n }]\n });\n } else {\n var notBoundUsersToInvite = _.filter($scope.users, function (user) {\n return !user.isAnonymized && !user.isDisabled && !user.idmEmailConfirmed && !user.boundToIDM && user.allowEmailContact;\n });\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_SEND_INVITATION_CONFIRM_TITLE',\n message: $translate.instant('TXT_SEND_INVITATION_CONFIRM_DESC').f(notBoundUsersToInvite.length),\n buttons: [{\n text: 'TXT_BTN_SEND',\n callback: function () { sendInvitationToAllImpl(notBoundUsersToInvite); }\n }, {\n text: 'TXT_BTN_CANCEL',\n primary: true\n }]\n });\n }\n }\n\n $scope.gridSettings = {\n name: 'users',\n keyExpr: 'id',\n columns: [\n {\n dataField: 'fullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', sortOrder: 'asc',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName(data, 'name', 'surname', 'middleName') }\n },\n {\n dataField: 'securityRoleID',\n caption: $translate.instant('TXT_LBL_ROLE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('userRole')(rowData.securityRoleID);\n },\n width: '100px'\n },\n { dataField: 'email', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '180px' },\n {\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.phone);\n },\n width: '140px'\n },\n { dataField: 'lastActivity', caption: $translate.instant(\"TXT_LBL_LAST_ACTIVITY\"), dataType: 'datetime', format: { datetime: 'short' }, width: '110px' },\n {\n dataField: 'referenceSourceID',\n caption: $translate.instant('TXT_LBL_REFERENCE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('referenceSource')(rowData.referenceSourceID);\n },\n width: '100px'\n },\n { dataField: 'allowEmailContact', caption: $translate.instant('TXT_LBL_ALLOW_EMAIL_CONTACT'), dataType: 'boolean', width: '60px' },\n { dataField: 'idmEmailConfirmed', caption: $translate.instant('TXT_IDENTITY_CONFIRMED'), dataType: 'boolean', width: '60px' },\n ],\n shouldDisableExportMenu: function () {\n return !securitySvc.isInRole('User.Export');\n },\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.isDisabled) {\n e.rowElement.addClass('text-danger');\n }\n }\n },\n customCommands: [{\n text: $translate.instant('TXT_RE_SEND_INVITATION_CONFIRM_TITLE'),\n isVisible: function () { return securitySvc.isInRole('User.Update'); },\n callback: function (data) { sendInvitationToAll(true); }\n }, {\n text: $translate.instant('TXT_SEND_INVITATION_CONFIRM_TITLE'),\n isVisible: function () { return securitySvc.isInRole('User.Update'); },\n callback: function (data) { sendInvitationToAll(false); }\n }]\n }\n\n $q.all([userRolesSvc.getAllAsync().$promise, referenceSourceSvc.getAllAsync().$promise])\n .then(function () {\n $scope.users = userSvc.getAllAsync(true, !$scope.customFilter.unfinishedRegistrations);\n });\n\n $scope.$on('refreshData', function (e, data) {\n $q.all([userRolesSvc.getAllAsync().$promise, referenceSourceSvc.getAllAsync().$promise])\n .then(function () {\n $scope.users = userSvc.getAllAsync(true, !$scope.customFilter.unfinishedRegistrations);\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $scope.gridSettings.gridInstance.selectRows([], false);\n }\n\n setSelectedUser(null); \n });\n });\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"users/users-detail-tabs/detail.html\"\n },\n {\n title: 'TXT_LBL_STUDENTS',\n template: \"users/users-detail-tabs/students.html\"\n }\n ];\n \n if (hasSecondContact) {\n $scope.tabs.push({\n title: 'TXT_LBL_SECONDARY_CONTACT',\n template: \"users/users-detail-tabs/second-contact.html\"\n }); \n }\n \n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue });\n });\n\n function setSelectedUser(data) {\n $scope.selectedUser = data;\n $scope.$broadcast('userSelectionChanged', $scope.selectedUser);\n }\n\n $scope.selectedUser = {};\n\n $scope.onRowSelected = function (data) {\n setSelectedUser(data);\n }\n\n $scope.onRowAdd = function () {\n var userDetail = userSvc.createNew();\n\n detailDialogPromise.$promise.then(function () { \n detailDialogPromise.$scope.userDetail = angular.copy(userDetail);\n detailDialogPromise.$scope.userSaved = function (model) {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $scope.gridSettings.gridInstance.refresh(true);\n $scope.gridSettings.gridInstance.selectRows([model.id], false);\n $scope.gridSettings.gridInstance.navigateToRow(model.id);\n }\n }\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.userDetail = angular.copy(data);\n detailDialogPromise.$scope.userSaved = function (model) {\n\n },\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n userSvc.remove(data);\n }\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'users/users-detail.html',\n show: false,\n scope: $scope\n });\n\n}]);\n\n\n","wbApp.controller('UsersDetailCtrl', ['$scope', 'userSvc', 'securitySvc', 'tenantSettingSvc', '$http', 'messageBoxSvc',\nfunction ($scope, userSvc, securitySvc, tenantSettingSvc, $http, messageBoxSvc) {\n\n $scope.userUpdateRole = securitySvc.isInRole('User.Update');\n \n $scope.tenantSetting = tenantSettingSvc.settings;\n let hasSecondContact =\n ($scope.tenantSetting.mandatoryEmail2 < 3) ||\n ($scope.tenantSetting.mandatoryPhone2 < 3) ||\n ($scope.tenantSetting.mandatoryUserNationality2 < 3) ||\n ($scope.tenantSetting.mandatoryUserName2 < 3) ||\n ($scope.tenantSetting.mandatoryUserSurname2 < 3) ||\n ($scope.tenantSetting.mandatoryUserMiddleName2 < 3) ||\n ($scope.tenantSetting.mandatoryUserAddress2 < 3) ||\n ($scope.tenantSetting.mandatoryUserIdentityCardNumber2 < 3) ||\n ($scope.tenantSetting.mandatoryUserPersonalIDNumber2 < 3) ||\n ($scope.tenantSetting.mandatoryUserBirthday2 < 3);\n \n $scope.IDMInfoLockedForEdit = $scope.userDetail.idmEmailConfirmed && $scope.userDetail.boundToIDM;\n $scope.userDetailOrig = angular.copy($scope.userDetail);\n $scope.isSaving = false;\n \n $scope.onIDMLockClick = function() {\n if ($scope.IDMInfoLockedForEdit) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_INFORMATION',\n message: 'TXT_ENABLE_IDM_EDIT',\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_OK',\n callback: function () {\n $scope.IDMInfoLockedForEdit = !$scope.IDMInfoLockedForEdit;\n }\n }]\n });\n } else {\n $scope.IDMInfoLockedForEdit = !$scope.IDMInfoLockedForEdit;\n }\n }\n\n $scope.onUserDetailSave = function (data) {\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n userSvc.insert(data, success, error);\n } else {\n data.overrideIDMProperties = !$scope.IDMInfoLockedForEdit; // && securitySvc.isInRole('User.Update');\n userSvc.update(data, success, error);\n //data.overrideIDMProperties = false;\n }\n\n function success(newUser) {\n $scope.isSaving = false;\n if (!!$scope.userSaved) {\n $scope.userSaved(newUser);\n }\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.isSaving = false;\n $scope.userDetailError = errorResult;\n }\n }\n\n $scope.onUserDetailSaveWithIDMRequest = function (data) {\n data.requestBindToIDM = true;\n $scope.onUserDetailSave(data);\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.userDetailOrig) && !$scope.preFilled;\n }\n\n\n $scope.typeAheadAddress = [];\n\n $scope.allMatch = function () {\n return true;\n };\n\n $scope.getAddress = function (viewValue) {\n if (viewValue) {\n let params = {\n address: viewValue,\n language: 'cs',\n region: 'cz',\n bounds: '48.270777,12.172380|51.246709,19.922157', // Czech republic bounds\n key: 'AIzaSyDdpRFWJaEcASaUgQxTdi8i42aaCaKfS0A'\n };\n return $http.get('https://maps.googleapis.com/maps/api/geocode/json', { params: params })\n .then(function (res) {\n $scope.typeAheadAddress.length = 0;\n $scope.typeAheadAddress.push.apply($scope.typeAheadAddress, res.data.results);\n });\n }\n };\n\n $scope.detailTabs = [\n {\n title: 'TXT_USER_ACCOUNT',\n template: \"users/users-detail-main-tab.html\"\n },\n {\n title: \"TXT_LBL_CONTACT_DETAILS\",\n template: \"users/users-detail-contact-tab.html\"\n }];\n \n if (hasSecondContact) {\n $scope.detailTabs.push({\n title: \"TXT_LBL_SECONDARY_CONTACT\",\n template: \"users/users-detail-second-contact-tab.html\"\n })\n }\n \n $scope.detailTabs.push({\n title: \"TXT_LBL_ADITIONAL\",\n template: \"users/users-detail-aditional-tab.html\"\n });\n\n $scope.detailTabs.activeTab = 0;\n\n}]);\n","wbApp.controller('UsersStudentsCtrl', ['$scope', '$modal', '$translate', '$filter', 'studentSvc', 'gridSortSvc',\nfunction ($scope, $modal, $translate, $filter, studentSvc, gridSortSvc) {\n\n $scope.$on('userSelectionChanged', function (e, newlySelectedUser) {\n if (newlySelectedUser) {\n if (!$scope.user || ($scope.user.id !== newlySelectedUser.id)) {\n $scope.selectedUserStudents = studentSvc.getAllByUserIDAsync(newlySelectedUser.id);\n \n }\n }\n else {\n $scope.selectedUserStudents = [];\n }\n\n $scope.user = newlySelectedUser;\n });\n\n $scope.selectedUserStudents = [];\n $scope.user = {};\n\n $scope.studentsGridSettings = {\n name: 'students',\n columns: [\n {\n dataField: 'fullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', width: '180', sortOrder: 'asc',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'fullName') }\n },\n { dataField: 'adminNotes', caption: $translate.instant('TXT_LBL_NOTE'), dataType: 'string' },\n { dataField: 'age', caption: $translate.instant(\"TXT_LBL_AGE\"), dataType: 'string', width: '70px' },\n {\n dataField: 'gender',\n caption: $translate.instant('TXT_LBL_GENDER'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('gender')(rowData.gender);\n },\n width: '70px'\n },\n { dataField: 'birthday', caption: $translate.instant(\"TXT_LAB_BIRTHDAY\"), dataType: 'date', format: { date: 'short' }, width: '100px' },\n ],\n shouldDisableAdd: function () { return !$scope.user; },\n };\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.collection = $scope.selectedUserStudents;\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.collection = $scope.selectedUserStudents;\n detailDialogPromise.$scope.model = studentSvc.createNew($scope.user);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n studentSvc.remove(data, null, $scope.selectedUserStudents);\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'users/students/students-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.directive('wbAvailabilityScheduleEditor', [\n function () {\n\n return {\n restrict: 'A',\n priority: 1,\n scope: {\n ngModel: '='\n },\n templateUrl: 'users/directives/availability-schedule-editor.html',\n link: function (scope, elem, attrs) {\n\n scope.cols = [];\n for (var i = 0; i < 24 * 2; i++) {\n var minutes = (i * 60 / 2);\n var mday = moment(scope.ngModel.day).add(minutes, 'm');\n\n var idx = _.find(scope.ngModel.periods, function (p) {\n return p.start <= mday && p.end > mday;\n });\n\n var selected = idx !== undefined;\n var grpIdx = idx + 1;\n\n scope.cols.push({\n idx: i,\n selected: selected,\n grpIndex: grpIdx\n });\n }\n\n scope.hours = [];\n for (var i = 0; i < 24; i++) {\n scope.hours.push(i);\n }\n\n\n scope.isSelecting = false;\n scope.isDeselecting = false;\n scope.startIdx = null;\n scope.lastSelectedCell = null;\n scope.grpIndex = 0;\n\n scope.onMouseDown = function (col) {\n if (col.selected) {\n scope.isSelecting = false;\n scope.isDeselecting = true;\n } else {\n scope.isSelecting = true;\n scope.isDeselecting = false;\n }\n scope.startIdx = col.idx;\n scope.lastSelectedCell = col; \n\n markAllToIndex(col.idx);\n }\n\n scope.onMouseUp = function (col) {\n scope.isSelecting = false;\n scope.isDeselecting = false;\n scope.startIdx = null;\n scope.lastSelectedCell = null;\n\n for (var i = 0; i < 24 * 2; i++) {\n scope.cols[i].changed = false;\n }\n }\n\n function getPeriodByIndex(idx) {\n if (!scope.ngModel.periods || scope.ngModel.periods.length < idx) {\n scope.ngModel.periods.push({});\n }\n return scope.ngModel.periods[idx - 1];\n }\n\n function colAssignPeriod(col, s, e) { \n var period = getPeriodByIndex(col.grpIndex);\n \n period.start = moment(scope.ngModel.day).add((s * 60 / 2), 'm');\n period.end = moment(scope.ngModel.day).add(((e + 1) * 60 / 2), 'm');\n\n if (period.start.isBefore(period.end, 'day')) {\n period.end.subtract(1, 'second');\n }\n }\n\n function resetPeriods() {\n scope.ngModel.periods = [];\n }\n\n function markAllToIndex(idx) {\n\n resetPeriods();\n\n if (scope.isSelecting || scope.isDeselecting) {\n var s = scope.startIdx <= idx ? scope.startIdx : idx;\n var e = scope.startIdx <= idx ? idx : scope.startIdx;\n\n scope.grpIndex = 0;\n\n var lastSelectedIdx = -2;\n var grpStart = 0;\n\n for (var i = 0; i < 24 * 2; i++) {\n var col = scope.cols[i];\n if (i >= s && i <= e) { \n if (scope.isSelecting) {\n col.selected = true;\n col.changed = true;\n } else if (scope.isDeselecting) {\n col.selected = false;\n col.changed = true;\n }\n } else {\n if (col.changed) {\n col.changed = false;\n col.selected = !col.selected;\n }\n }\n\n if (col.selected) {\n if ((col.idx - lastSelectedIdx) <= 1) {\n col.grpIndex = scope.grpIndex;\n colAssignPeriod(col, grpStart, col.idx);\n } else {\n scope.grpIndex = scope.grpIndex + 1;\n col.grpIndex = scope.grpIndex;\n grpStart = col.idx;\n colAssignPeriod(col, grpStart, col.idx);\n }\n lastSelectedIdx = col.idx;\n } else {\n col.grpIndex = null;\n }\n\n }\n }\n\n //console.log(JSON.stringify(scope.ngModel));\n }\n\n scope.onMouseMove = function (col) {\n if (scope.isSelecting || scope.isDeselecting) {\n if (scope.lastSelectedCell !== col) {\n markAllToIndex(col.idx);\n }\n\n scope.lastSelectedCell = col;\n }\n }\n\n\n }\n }\n }]);","wbApp.directive('wbConsentDefinitionCombo', ['$timeout', '$translate', 'consentDefinitionSvc',\n function ($timeout, $translate, consentDefinitionSvc) {\n function formatResult(model) {\n if (!model) { return; }\n\n var name;\n if (!model.active) {\n name = model.name + ' (' + $translate.instant('TXT_VAL_NOT_ACTIVE') + ')';\n } else {\n name = model.name;\n }\n\n return name;\n }\n\n function formatSelection(model) {\n if (!model.active) {\n return model.name + ' (' + $translate.instant('TXT_VAL_NOT_ACTIVE') + ')';\n } else {\n return model.name;\n }\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1, \n link: function (scope, elm, attrs, ctrl) {\n \n $timeout(function () {\n\n var models = consentDefinitionSvc.getAllActiveAsync(false, ctrl.$modelValue);\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_CONSENT_DEFINITION'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: 5,\n data: models,\n id: function (consentDefinition) { return consentDefinition.consentDefinitionID; },\n matcher: function (term, text, data) {\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n }\n });\n\n ctrl.$render = function () {\n models.$promise.then(function () {\n $timeout(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n });\n }\n\n ctrl.$render();\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function (e) {\n scope.$apply(function () {\n ctrl.$setViewValue(e.val);\n });\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]); ","wbApp.directive('wbConsentTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n data: [\n { id: 1, text: 'TXT_CONSENT_TYPE_GENERIC' },\n { id: 2, text: 'TXT_CONSENT_TYPE_MARKETING' }]\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n ctrl.$render = function () {\n $(elm).select2('val', ctrl.$viewValue);\n }\n\n ctrl.$render();\n }, 1);\n }\n }\n }]);\n","wbApp.directive('wbRfidAccessGroupTimeScheduleDayEditor', [\n function () {\n\n return {\n restrict: 'A',\n priority: 1,\n scope: {\n ngModel: '='\n },\n templateUrl: 'users/directives/rfid-access-group-time-schedule-day-editor.html',\n link: function (scope, elem, attrs) {\n\n scope.cols = [];\n for (var i = 0; i < 24 * 4; i++) {\r\n var minutes = (i * 60 / 4);\r\n\r\n var selected = (scope.ngModel.period0.startTime <= minutes && scope.ngModel.period0.endTime > minutes) ||\r\n (scope.ngModel.period1.startTime <= minutes && scope.ngModel.period1.endTime > minutes) ||\r\n (scope.ngModel.period2.startTime <= minutes && scope.ngModel.period2.endTime > minutes) ||\r\n (scope.ngModel.period3.startTime <= minutes && scope.ngModel.period3.endTime > minutes) ||\r\n (scope.ngModel.period4.startTime <= minutes && scope.ngModel.period4.endTime > minutes);\r\n\r\n var grpIdx = 0;\r\n grpIdx = (scope.ngModel.period0.startTime <= minutes && scope.ngModel.period0.endTime > minutes) ? 1 : grpIdx;\r\n grpIdx = (scope.ngModel.period1.startTime <= minutes && scope.ngModel.period1.endTime > minutes) ? 2 : grpIdx;\r\n grpIdx = (scope.ngModel.period2.startTime <= minutes && scope.ngModel.period2.endTime > minutes) ? 3 : grpIdx;\r\n grpIdx = (scope.ngModel.period3.startTime <= minutes && scope.ngModel.period3.endTime > minutes) ? 4 : grpIdx;\r\n grpIdx = (scope.ngModel.period4.startTime <= minutes && scope.ngModel.period4.endTime > minutes) ? 5 : grpIdx;\r\n\r\n scope.cols.push({\r\n idx: i,\r\n selected: selected,\r\n grpIndex: grpIdx\r\n });\r\n }\n\n scope.hours = [];\n for (var i = 0; i < 24; i++) {\r\n scope.hours.push(i);\r\n }\n\n\n scope.isSelecting = false;\n scope.isDeselecting = false;\n scope.startIdx = null;\n scope.lastSelectedCell = null;\n scope.grpIndex = 0;\n\n scope.onMouseDown = function (col) {\r\n if (col.selected) {\r\n scope.isSelecting = false;\r\n scope.isDeselecting = true;\r\n } else {\r\n scope.isSelecting = true;\r\n scope.isDeselecting = false;\r\n }\r\n scope.startIdx = col.idx;\r\n scope.lastSelectedCell = col; \r\n\r\n markAllToIndex(col.idx);\r\n }\n\n scope.onMouseUp = function (col) {\r\n scope.isSelecting = false;\r\n scope.isDeselecting = false;\r\n scope.startIdx = null;\n scope.lastSelectedCell = null;\r\n\r\n for (var i = 0; i < 24 * 4; i++) {\r\n scope.cols[i].changed = false;\r\n }\r\n }\n\n function getPeriodByIndex(idx) {\r\n return scope.ngModel[\"period\" + ((idx) - 1)];\r\n }\n\n function colAssignPeriod(col, s, e) {\r\n if (col.grpIndex <= 5) {\r\n var period = getPeriodByIndex(col.grpIndex);\r\n \r\n period.startTime = (s * 60 / 4);\r\n period.endTime = ((e + 1) * 60 / 4);\r\n }\r\n }\n\n function resetPeriods() {\r\n scope.ngModel.period0.startTime = 0;\r\n scope.ngModel.period0.endTime = 0;\r\n scope.ngModel.period1.startTime = 0;\r\n scope.ngModel.period1.endTime = 0;\r\n scope.ngModel.period2.startTime = 0;\r\n scope.ngModel.period2.endTime = 0;\r\n scope.ngModel.period3.startTime = 0;\r\n scope.ngModel.period3.endTime = 0;\r\n scope.ngModel.period4.startTime = 0;\r\n scope.ngModel.period4.endTime = 0;\r\n }\n\n function markAllToIndex(idx) {\r\n\r\n resetPeriods();\r\n\r\n if (scope.isSelecting || scope.isDeselecting) {\r\n var s = scope.startIdx <= idx ? scope.startIdx : idx;\r\n var e = scope.startIdx <= idx ? idx : scope.startIdx;\r\n\r\n scope.grpIndex = 0;\r\n\r\n var lastSelectedIdx = -2;\r\n var grpStart = 0;\r\n\r\n for (var i = 0; i < 24 * 4; i++) {\r\n var col = scope.cols[i];\r\n if (i >= s && i <= e) { \r\n if (scope.isSelecting) {\r\n col.selected = true;\r\n col.changed = true;\r\n } else if (scope.isDeselecting) {\r\n col.selected = false;\r\n col.changed = true;\r\n }\r\n } else {\r\n if (col.changed) {\r\n col.changed = false;\r\n col.selected = !col.selected;\r\n }\r\n }\r\n\r\n if (col.selected) {\r\n if ((col.idx - lastSelectedIdx) <= 1) {\r\n col.grpIndex = scope.grpIndex;\r\n colAssignPeriod(col, grpStart, col.idx);\r\n } else {\r\n scope.grpIndex = scope.grpIndex + 1;\r\n col.grpIndex = scope.grpIndex;\r\n grpStart = col.idx;\r\n colAssignPeriod(col, grpStart, col.idx);\r\n }\r\n lastSelectedIdx = col.idx;\r\n } else {\r\n col.grpIndex = null;\r\n }\r\n\r\n }\r\n }\r\n\r\n console.log(JSON.stringify(scope.ngModel));\r\n }\n\n scope.onMouseMove = function (col) {\r\n if (scope.isSelecting || scope.isDeselecting) {\r\n if (scope.lastSelectedCell !== col) {\r\n markAllToIndex(col.idx);\r\n }\r\n\r\n scope.lastSelectedCell = col;\r\n }\r\n }\n\n\n }\n }\n }]);","wbApp.directive('wbRfidAccessTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return \"\"; }\n\n if (data.id === 255) {\r\n return ' ' + $translate.instant(data.text);\r\n }\n if (data.id === 253) {\r\n return ' ' + $translate.instant(data.text);\r\n }\n if (data.id === 0) {\r\n return ' ' + $translate.instant(data.text);\r\n }\n }\n\n function formatSelection(data) {\n return formatResult(data);\n }\n\n return {\r\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\r\n\n $timeout(function () {\r\n $(elm).select2({\r\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 255, text: 'TXT_VAL_FULL_ACCESS' },\n { id: 253, text: 'TXT_VAL_NO_ACCESS' },\n { id: 0, text: 'TXT_VAL_CUSTOM_ACCESS' }\n ]\r\n });\n\n controller.$render();\r\n });\n\n controller.$render = function () {\r\n elm.select2('val', controller.$viewValue);\r\n };\n\n controller.$parsers.unshift(function (viewValue) {\r\n if (!viewValue) {\r\n return 0;\r\n } else {\r\n return parseInt(viewValue);\r\n }\r\n });\n\n controller.$formatters.unshift(function (value) {\r\n if (!value) {\r\n return \"0\";\r\n } else {\r\n return value + \"\";\r\n }\r\n });\n\n elm.on('change', function () {\r\n scope.$apply(function () {\r\n controller.$setViewValue(elm.select2('val'));\r\n });\r\n });\n\n attrs.$observe('disabled', function (value) {\r\n elm.select2('enable', !value);\r\n });\n\n attrs.$observe('readonly', function (value) {\r\n elm.select2('readonly', !!value);\r\n });\n\n elm.bind(\"$destroy\", function () {\r\n elm.select2(\"destroy\");\r\n });\r\n\n }\r\n }\n }]);","wbApp.filter('wbAvailabilityScheduleFilter', [function () {\n\n function printPeriod(period) {\n return moment(period.start).format('HH:mm') + \"-\" + moment(period.end).format('HH:mm');\n }\n\n return function (input) {\n\n var ret = \"\";\n\n _.forEach(input.periods, function (p) {\n if (ret) {\n ret = ret + \", \" + printPeriod(p);\n } else {\n ret = ret + printPeriod(p);\n }\n \n });\n\n if (ret !== \"\") {\n return \"(\" + ret + \")\"\n }\n\n return ret;\n };\n}]);","wbApp.filter('wbConsentType', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 1:\n return $translate.instant('TXT_CONSENT_TYPE_GENERIC');\n case 2:\n return $translate.instant('TXT_CONSENT_TYPE_MARKETING'); \n default:\n return '';\n }\n };\n}]);","wbApp.filter('wbRfidAccessGroupTimeScheduleDayFilter', [function () {\n\n function printPeriod(line, period) {\r\n var ret = \"\";\r\n\r\n if (!!period && (period.endTime - period.startTime) > 0) {\r\n\r\n if (line !== \"\") {\r\n ret = ret + \", \";\r\n }\r\n\r\n var startHour = Math.floor(period.startTime / 60);\r\n var startMinute = Math.floor(period.startTime % 60);\r\n var endHour = Math.floor(period.endTime / 60);\r\n var endMinute = Math.floor(period.endTime % 60);\r\n\r\n ret = ret + \"\" + (\"0\" + startHour).slice(-2) + \":\" + (\"0\" + startMinute).slice(-2);\r\n ret = ret + \" - \" + (\"0\" + endHour).slice(-2) + \":\" + (\"0\" + endMinute).slice(-2);\r\n }\r\n\r\n return ret;\r\n }\n\n return function (input) {\n\n var ret = \"\";\n\n ret = ret + printPeriod(ret, input.period0);\n ret = ret + printPeriod(ret, input.period1);\n ret = ret + printPeriod(ret, input.period2);\n ret = ret + printPeriod(ret, input.period3);\n ret = ret + printPeriod(ret, input.period4);\n\n if (ret !== \"\") {\r\n return \"(\" + ret + \")\"\r\n }\n\n return ret;\n };\n}]);","wbApp.factory('consentDefinitionSvc', ['$resource', '$q', 'repositorySvc',\n function ($resource, $q, repositorySvc) {\n\n var ConsentDefinition = $resource('/Api/ConsentsDefinitions/:id', {}, {\n 'getAll': { method: 'GET', isArray: true, url: '/Api/ConsentsDefinitions/GetAll' },\n 'update': { method: 'POST', url: '/Api/ConsentsDefinitions/Update' },\n 'insert': { method: 'POST', url: '/Api/ConsentsDefinitions/Insert' },\n 'delete': { method: 'POST', url: '/Api/ConsentsDefinitions/Delete' }\n });\n\n var consentDefinitions;\n\n function getAllAsync(refresh) {\n\n if (!consentDefinitions || refresh) {\n consentDefinitions = repositorySvc.customGet('getAll', ConsentDefinition);\n }\n\n return consentDefinitions;\n }\n\n function getAllActiveAsync(refresh, consentDefinitionIDToInclude) {\n\n var sIDs = consentDefinitionIDToInclude || 0;\n\n var deffered = $q.defer();\n var filteredConsentDefinitions = [];\n filteredConsentDefinitions.$promise = deffered.promise;\n\n var all = getAllAsync(refresh);\n all.$promise.then(function (data) {\n\n var filtered = _.filter(data, function (item) {\n return item.active || item.consentDefinitionID == sIDs;\n });\n\n filteredConsentDefinitions.push.apply(filteredConsentDefinitions, filtered);\n deffered.resolve(filteredConsentDefinitions);\n\n }, function (error) {\n deffered.reject(error);\n });\n\n return filteredConsentDefinitions;\n }\n\n function insert(data, successCallback, errorCallback) {\n repositorySvc.insert(\n ConsentDefinition, // $resource\n consentDefinitions, // collection\n data, // entity\n successCallback,\n errorCallback,\n 'consentDefinitionID');\n }\n\n\n function update(data, successCallback, errorCallback) {\n repositorySvc.update(\n ConsentDefinition, // $resource\n consentDefinitions, // collection\n data, // entity\n successCallback,\n errorCallback,\n 'consentDefinitionID');\n }\n\n function remove(data, successCallback, errorCallback) {\n repositorySvc.remove(\n ConsentDefinition, // $resource\n consentDefinitions, // collection\n { consentDefinitionID: data.consentDefinitionID }, // entity\n successCallback,\n errorCallback,\n {\n consentDefinitionID: data.consentDefinitionID\n },\n 'consentDefinitionID');\n }\n\n function createNew() {\n return {\n consentDefinitionID: 0,\n consentTypeID: 1,\n active: true,\n validFrom: null,\n validTo: null,\n validToDays: 365\n };\n }\n\n function getConsentNameByIDAsync(consentDefinitionID) {\n return $q(function (resolve, reject) {\n getAllAsync().$promise.then(function (data) {\n resolve(_.find(data, { consentDefinitionID: consentDefinitionID }));\n }, function (error) {\n reject(error);\n });\n });\n }\n\n return {\n getAllAsync: getAllAsync,\n insert: insert,\n update: update,\n remove: remove,\n createNew: createNew,\n getAllActiveAsync: getAllActiveAsync,\n getConsentNameByIDAsync: getConsentNameByIDAsync\n }\n\n }]);","wbApp.factory('employeeAvailabilitySchedulesSvc', ['$resource', '$q', 'repositorySvc',\n function ($resource, $q, repositorySvc) {\n var AvailabilitySchedule = $resource('/restapi/employees/:employeeId/availability-schedules/:id', {}, {\n 'getRange': { method: 'GET', isArray: true, url: '/restapi/employees/:employeeId/availability-schedules/range' },\n 'updateRange': { method: 'PUT', url: '/restapi/employees/:employeeId/availability-schedules/range' }\n });\n\n function loadWeek(employeeId, date) {\n return $q(function (resolve, reject) {\n\n var startOfWeek = moment(date).startOf('isoWeek');\n var endOfWeek = moment(date).endOf('isoWeek').startOf('day');\n\n repositorySvc.customGet('getRange', AvailabilitySchedule, {\n employeeId: employeeId,\n from: startOfWeek.toDate(),\n to: endOfWeek.toDate(),\n }, function (data) {\n var result = [];\n for (var i = 0; i < 7; i++) {\n var dayData = _.find(data, function (d) {\n return moment(d.day).isSame(startOfWeek);\n });\n if (dayData) {\n result.push(dayData);\n } else {\n result.push({ day: startOfWeek.toDate(), periods: [] });\n }\n startOfWeek.add(1, 'day');\n }\n resolve(result);\n },\n function (error) {\n reject(error);\n }\n );\n });\n }\n\n function saveWeek(employeeId, date, model) {\n return $q(function (resolve, reject) {\n\n var startOfWeek = moment(date).startOf('isoWeek');\n var endOfWeek = moment(date).endOf('isoWeek').startOf('day');\n\n var filtered = _.filter(model, function (d) { return !!d.periods && d.periods.length > 0; });\n\n repositorySvc.customPutWithParams(\n 'updateRange', \n AvailabilitySchedule,\n {\n employeeId: employeeId,\n from: startOfWeek.toDate(),\n to: endOfWeek.toDate()\n },\n filtered,\n function (data) {\n resolve(data);\n },\n function (error) {\n reject(repositorySvc.extractErrorData(error));\n }\n );\n });\n }\n\n function saveWeekAsPaternForPeriod(employeeId, periodStart, periodEnd, weekModelTemplate) \n {\n return $q(function (resolve, reject) {\n var startOfWeekPeriod = moment(periodStart).startOf('isoWeek');\n var endOfWeekPeriod = moment(periodEnd).endOf('isoWeek').startOf('day');\n\n var filtered = _.filter(weekModelTemplate, function (d) { return !!d.periods && d.periods.length > 0; });\n\n var currentPeriod = moment(startOfWeekPeriod);\n var toSave = [];\n while (currentPeriod.isBefore(endOfWeekPeriod)) {\n\n if (filtered.length > 0) {\n var templateCopy = angular.copy(filtered);\n var timeDifference = moment.duration(currentPeriod.diff(moment(templateCopy[0].day).startOf('week')));\n\n _.forEach(templateCopy, function (d) {\n d.day = moment(d.day).add(timeDifference).toDate();\n _.forEach(d.periods, function (p) {\n p.start = moment(p.start).add(timeDifference).toDate();\n p.end = moment(p.end).add(timeDifference).toDate();\n });\n\n toSave.push(d);\n });\n }\n\n currentPeriod.add(1, 'week'); \n }\n\n repositorySvc.customPutWithParams(\n 'updateRange',\n AvailabilitySchedule,\n {\n employeeId: employeeId,\n from: startOfWeekPeriod.toDate(),\n to: endOfWeekPeriod.toDate()\n },\n toSave,\n function (data) {\n resolve(data);\n },\n function (error) {\n reject(repositorySvc.extractErrorData(error));\n }\n );\n });\n }\n\n return {\n loadWeek: loadWeek,\n saveWeek: saveWeek,\n saveWeekAsPaternForPeriod: saveWeekAsPaternForPeriod\n }\n }]);","wbApp.factory('groupSvc', ['$resource', '$q', '$sce', '$translate', 'repositorySvc',\n function ($resource, $q, $sce, $translate, repositorySvc) {\n var Label = $resource('/Api/Groups/:id', {}, {\n 'getAll': { method: 'GET', isArray: true, url: '/Api/Groups/GetAll' },\n 'update': { method: 'POST', url: '/Api/Groups/Update' },\n 'insert': { method: 'POST', url: '/Api/Groups/Insert' },\n 'delete': { method: 'POST', url: '/Api/Groups/Delete' }\n });\n\n function createNew() {\n return {\n color: 16711680\n };\n }\n\n function getAllAsync(addNoLabel) {\n var result = [];\n var deferred = $q.defer();\n result.$promise = deferred.promise;\n result.$resolved = false;\n\n var colorUtils = new webooker_utils.ColorUtils();\n\n repositorySvc.customGet('getAll', Label).$promise.then(function (data) {\n angular.forEach(data, function (item) {\n item.rgbColor = colorUtils.intToRgb(item.color);\n item.htmlCaption = $sce.trustAsHtml(' ' + item.name);\n result.push(item);\n });\n\n if (result.length > 0 && addNoLabel) {\n result.push({\n groupID: -1,\n rgbColor:'red',\n name: $translate.instant('TXT_WITHOUT_GROUP'),\n htmlCaption: ' ' + $translate.instant('TXT_WITHOUT_GROUP')\n });\n }\n deferred.resolve(result);\n result.$resolved = true;\n }, function (errorResult) {\n deferred.reject(errorResult);\n result.$resolved = true;\n });\n\n return result;\n }\n\n function insert(data, successCallback, errorCallback, collection) {\n repositorySvc.insert(\n Label, // $resource\n collection, // collection\n data, // entity\n successCallback,\n errorCallback);\n }\n\n function update(data, successCallback, errorCallback, collection) {\n repositorySvc.update(\n Label, // $resource\n collection, // collection\n data, // entity\n successCallback,\n errorCallback,\n 'groupID');\n }\n\n function remove(data, successCallback, errorCallback, collection) {\n repositorySvc.remove(\n Label, // $resource\n collection, // collection\n data, // entity\n successCallback,\n errorCallback, \n null,\n 'groupID');\n }\n\n return {\n getAllAsync: getAllAsync,\n insert: insert,\n update: update,\n remove: remove,\n createNew: createNew\n }\n }]);","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region Employee - Ctor\n ns.Employee = function Employee(selectedSchedules) {\n this.initialize(selectedSchedules);\n };\n // #endregion\n\n // #region Employee - Inheritance\n\n ns.Employee.prototype = new ns.ScheduleResourceBase();\n ns.Employee.prototype.constructor = ns.ScheduleResourceBase;\n ns.Employee.prototype.parent = ns.ScheduleResourceBase.prototype;\n\n // #endregion\n\n})(webooker_acivity_models);","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region EmployeeDetail - Ctor\n ns.EmployeeDetail = function EmployeeDetail(instructors, schedules, employeeID, activityID) {\n this.instructors = instructors;\n this.initialize(instructors, schedules, employeeID, activityID);\n }\n // #endregion\n\n\n // #region EmployeeDetail - Inheritance\n\n ns.EmployeeDetail.prototype = new ns.ScheduleResourceDetailBase();\n ns.EmployeeDetail.prototype.constructor = ns.EmployeeDetail;\n ns.EmployeeDetail.prototype.parent = ns.ScheduleResourceDetailBase.prototype;\n\n // #endregion\n\n // #region EmployeeDetail - Methods\n\n ns.EmployeeDetail.prototype.createDayModel = function (reservations, schedules, dayOfWeek, dayName, resourceID, activityID) {\n return new ns.EmployeeDetailDay(reservations, schedules, dayOfWeek, dayName, resourceID, activityID);\n }\n\n // #endregion\n\n}(webooker_acivity_models));\n","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region EmployeeDetailDay - Ctor\n ns.EmployeeDetailDay = function EmployeeDetailDay(reservations, schedules, dayOfWeek, dayName, employeeID, activityID) {\n this.initialize(reservations, schedules, dayOfWeek, dayName, employeeID, activityID);\n }\n // #endregion\n\n // #region EmployeeDetailDay - Inheritance\n\n ns.EmployeeDetailDay.prototype = new ns.ScheduleResourceDetailDayBase();\n ns.EmployeeDetailDay.prototype.constructor = ns.EmployeeDetailDay;\n ns.EmployeeDetailDay.prototype.parent = ns.ScheduleResourceDetailDayBase.prototype;\n\n // #endregion\n\n // #region EmployeeDetailDay - Methods\n ns.EmployeeDetailDay.prototype.createReservation = function (activityScheduleID) {\n return {\n activityInstructorID: 0,\n activityID: this.activityID,\n employeeID: this.resourceID,\n activityScheduleID: activityScheduleID,\n firstPeriodStartDate: null,\n firstPeriodEndDate: null,\n secondPeriodStartDate: null,\n secondPeriodEndDate: null,\n notes: null\n };\n }\n\n}(webooker_acivity_models));\n","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region Reconciliation - Ctor \n ns.Reconciliation = function Reconciliation($translate, calcSnacksOnlyForPresent) {\n this.attendance = [];\n this.calcSnacksOnlyForPresent = calcSnacksOnlyForPresent;\n // from InvoiceBase\n this.resetFields();\n if ($translate) {\n this.initLocalization($translate);\n }\n }\n // #endregion\n\n // #region InvoiceBase - Inheritance\n\n ns.Reconciliation.prototype = new ns.InvoiceBase();\n ns.Reconciliation.prototype.constructor = ns.InvoiceBase;\n ns.Reconciliation.prototype.parent = ns.InvoiceBase.prototype;\n\n // #endregion\n\n // #region Reconciliation - Methods\n\n ns.Reconciliation.prototype.getReconciliationDetailDTO = function ($translate) {\n var res = { reconciliation: {}, attendance: [], invoice: { lineItems: [] } };\n\n res.reconciliation.activityReconciliationID = this.activityReconciliationID;\n res.reconciliation.studentID = this.studentID;\n res.reconciliation.activityID = this.activityID;\n res.reconciliation.name = this.name;\n res.reconciliation.notes = this.notes;\n res.reconciliation.reconciledAt = this.reconciledAt || new Date();\n res.reconciliation.notificationSentAt = this.notificationSentAt;\n\n res.invoice = this.getInvoiceDTO($translate);\n\n for (var a = 0; a < this.attendance.length; a++) {\n var att = this.attendance[a];\n if (att.isSelected) {\n res.attendance.push(att.getReconciliationAttendanceDTO.call(att));\n }\n }\n\n return res;\n }\n\n ns.Reconciliation.prototype.initData = function (reconciliationDetailDTO) {\n\n // reconciliation\n this.studentID = reconciliationDetailDTO.reconciliation.studentID;\n this.activityID = reconciliationDetailDTO.reconciliation.activityID;\n this.activityReconciliationID = reconciliationDetailDTO.reconciliation.activityReconciliationID;\n this.name = reconciliationDetailDTO.reconciliation.name;\n this.notes = reconciliationDetailDTO.reconciliation.notes;\n this.reconciledAt = reconciliationDetailDTO.reconciliation.reconciledAt;\n this.notificationSentAt = reconciliationDetailDTO.reconciliation.notificationSentAt;\n this.activity = reconciliationDetailDTO.activity;\n this.activityStudentSetting = reconciliationDetailDTO.activityStudentSetting;\n\n this.initDataAttendance(reconciliationDetailDTO);\n\n if (this.activityStudentSetting && this.activityStudentSetting.tariffPrice) {\n this.invoiceLineKindergartenFeeUnitPrice = this.activityStudentSetting.tariffPrice;\n this.invoiceLineKindergartenFeeQty = 1;\n }\n\n this.initDataByInvoiceDTO(reconciliationDetailDTO.invoice);\n\n this.initDataActivity(reconciliationDetailDTO);\n\n }\n\n ns.Reconciliation.prototype.initDataActivity = function (reconciliationDetailDTO) {\n if (!reconciliationDetailDTO.invoice || !reconciliationDetailDTO.invoice.invoiceID || reconciliationDetailDTO.invoice.invoiceID == \"0\") {\n this.invoiceLineKindergartenLunchUnitPrice = reconciliationDetailDTO.activity.defaultLunchPrice || 0;\n this.invoiceLineKindergartenSnackUnitPrice = reconciliationDetailDTO.activity.defaultSnackPrice || 0;\n this.invoiceLineKindergartenLatePickupUnitPrice = reconciliationDetailDTO.activity.defaultLatePickupPrice || 0;\n }\n }\n\n ns.Reconciliation.prototype.initDataAttendance = function (reconciliationDetailDTO) {\n var att = [];\n for (var i = 0; i < reconciliationDetailDTO.attendance.length; i++) {\n var amodel = new webooker_acivity_models.ReconciliationAttendance(reconciliationDetailDTO.attendance[i], this.activityReconciliationID, this.calcSnacksOnlyForPresent);\n att.push(amodel);\n if (this.activityReconciliationID && this.activityReconciliationID === amodel.attendance.activityReconciliationID) {\n amodel.isSelected = true;\n } else {\n amodel.isSelected = false;\n }\n }\n this.attendance.push.apply(this.attendance, att);\n }\n\n\n // #region Reconciliation - Properties\n\n Object.defineProperty(ns.Reconciliation.prototype, 'noOfLunches', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected && a.lunch === '\\u2713') {\n count++;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'noFirstSnacks', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected && a.firstSnack === '\\u2713') {\n count++;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'noSecondSnacks', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected && a.secondSnack === '\\u2713') {\n count++;\n }\n }\n return count;\n }\n });\n\n\n Object.defineProperty(ns.Reconciliation.prototype, 'fullDayRegisteredAttendance', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected &&\n a.attendance.firstPeriodRegistered && a.attendance.secondPeriodRegistered) {\n count++;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'shortDayRegisteredAttendance', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected &&\n a.attendance.firstPeriodRegistered &&\n a.attendance.secondPeriodRegistered &&\n a.attendance.secondPeriodAttendanceShortened) {\n count++;\n }\n }\n return count;\n }\n });\n\n\n Object.defineProperty(ns.Reconciliation.prototype, 'firstPeriodOnlyRegisteredAttendance', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected &&\n a.attendance.firstPeriodRegistered &&\n !a.attendance.secondPeriodRegistered) {\n count++;\n }\n }\n return count;\n }\n });\n\n\n Object.defineProperty(ns.Reconciliation.prototype, 'secondPeriodOnlyRegisteredAttendance', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected &&\n !a.attendance.firstPeriodRegistered &&\n a.attendance.secondPeriodRegistered) {\n count++;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'fullDayActualAttendanceNoOneOffs', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n if (((a.attendance.firstPeriodAttendanceTypeID == 0 &&\n a.attendance.firstPeriodRegistered) || (a.attendance.firstPeriodAttendanceTypeID == 2)) &&\n (a.attendance.firstPeriodAttendanceStatusID == 0 ||\n a.attendance.firstPeriodAttendanceStatusID == 1 ||\n a.attendance.firstPeriodAttendanceStatusID == 3) &&\n ((a.attendance.secondPeriodAttendanceTypeID == 0 && \n a.attendance.secondPeriodRegistered) || (a.attendance.secondPeriodAttendanceTypeID == 2)) &&\n (a.attendance.secondPeriodAttendanceStatusID == 0 ||\n a.attendance.secondPeriodAttendanceStatusID == 1 ||\n a.attendance.secondPeriodAttendanceStatusID == 3)) {\n count++;\n }\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'shortDayActualAttendanceNoOneOffs', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n if (((a.attendance.firstPeriodAttendanceTypeID == 0 &&\n a.attendance.firstPeriodRegistered) || (a.attendance.firstPeriodAttendanceTypeID == 2)) &&\n (a.attendance.firstPeriodAttendanceStatusID == 0 ||\n a.attendance.firstPeriodAttendanceStatusID == 1 ||\n a.attendance.firstPeriodAttendanceStatusID == 3) &&\n ((a.attendance.secondPeriodAttendanceTypeID == 0 &&\n a.attendance.secondPeriodRegistered) || (a.attendance.secondPeriodAttendanceTypeID == 2)) &&\n (a.attendance.secondPeriodAttendanceStatusID == 0 ||\n a.attendance.secondPeriodAttendanceStatusID == 1 ||\n a.attendance.secondPeriodAttendanceStatusID == 3) &&\n a.attendance.secondPeriodAttendanceShortened) {\n count++;\n }\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'firstPeriodOnlyActualAttendanceNoOneOffs', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n if ((((a.attendance.firstPeriodAttendanceTypeID == 0 &&\n a.attendance.firstPeriodRegistered) || (a.attendance.firstPeriodAttendanceTypeID == 2)) &&\n (a.attendance.firstPeriodAttendanceStatusID == 0 ||\n a.attendance.firstPeriodAttendanceStatusID == 1 ||\n a.attendance.firstPeriodAttendanceStatusID == 3)) &&\n !(((a.attendance.secondPeriodAttendanceTypeID == 0 &&\n a.attendance.secondPeriodRegistered) || (a.attendance.secondPeriodAttendanceTypeID == 2)) &&\n (a.attendance.secondPeriodAttendanceStatusID == 0 ||\n a.attendance.secondPeriodAttendanceStatusID == 1 ||\n a.attendance.secondPeriodAttendanceStatusID == 3))) {\n count++;\n }\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'secondPeriodOnlyActualAttendanceNoOneOffs', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n if (!(((a.attendance.firstPeriodAttendanceTypeID == 0 &&\n a.attendance.firstPeriodRegistered) || (a.attendance.firstPeriodAttendanceTypeID == 2)) &&\n (a.attendance.firstPeriodAttendanceStatusID == 0 ||\n a.attendance.firstPeriodAttendanceStatusID == 1 ||\n a.attendance.firstPeriodAttendanceStatusID == 3)) &&\n (((a.attendance.secondPeriodAttendanceTypeID == 0 &&\n a.attendance.secondPeriodRegistered) || (a.attendance.secondPeriodAttendanceTypeID == 2)) &&\n (a.attendance.secondPeriodAttendanceStatusID == 0 ||\n a.attendance.secondPeriodAttendanceStatusID == 1 ||\n a.attendance.secondPeriodAttendanceStatusID == 3))) {\n count++;\n }\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'fullDayOneOffs', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n if (a.attendance.firstPeriodAttendanceTypeID == 1 &&\n (a.attendance.firstPeriodAttendanceStatusID == 0 ||\n a.attendance.firstPeriodAttendanceStatusID == 1 ||\n a.attendance.firstPeriodAttendanceStatusID == 3) &&\n a.attendance.secondPeriodAttendanceTypeID == 1 &&\n (a.attendance.secondPeriodAttendanceStatusID == 0 ||\n a.attendance.secondPeriodAttendanceStatusID == 1 ||\n a.attendance.secondPeriodAttendanceStatusID == 3)) {\n count++;\n }\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'shortDayOneOffs', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n if (a.attendance.firstPeriodAttendanceTypeID == 1 &&\n (a.attendance.firstPeriodAttendanceStatusID == 0 ||\n a.attendance.firstPeriodAttendanceStatusID == 1 ||\n a.attendance.firstPeriodAttendanceStatusID == 3) &&\n a.attendance.secondPeriodAttendanceTypeID == 1 &&\n (a.attendance.secondPeriodAttendanceStatusID == 0 ||\n a.attendance.secondPeriodAttendanceStatusID == 1 ||\n a.attendance.secondPeriodAttendanceStatusID == 3) &&\n a.attendance.secondPeriodAttendanceShortened) {\n count++;\n }\n }\n }\n return count;\n }\n });\n\n\n Object.defineProperty(ns.Reconciliation.prototype, 'firstPeriodOnlyOneOffs', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n if (a.attendance.firstPeriodAttendanceTypeID == 1 &&\n (a.attendance.firstPeriodAttendanceStatusID == 0 ||\n a.attendance.firstPeriodAttendanceStatusID == 1 ||\n a.attendance.firstPeriodAttendanceStatusID == 3) &&\n !(a.attendance.secondPeriodAttendanceTypeID == 1 &&\n (a.attendance.secondPeriodAttendanceStatusID == 0 ||\n a.attendance.secondPeriodAttendanceStatusID == 1 ||\n a.attendance.secondPeriodAttendanceStatusID == 3))) {\n count++;\n }\n }\n\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'secondPeriodOnlyOneOffs', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n if (!(a.attendance.firstPeriodAttendanceTypeID == 1 &&\n (a.attendance.firstPeriodAttendanceStatusID == 0 ||\n a.attendance.firstPeriodAttendanceStatusID == 1 ||\n a.attendance.firstPeriodAttendanceStatusID == 3)) &&\n (a.attendance.secondPeriodAttendanceTypeID == 1 &&\n (a.attendance.secondPeriodAttendanceStatusID == 0 ||\n a.attendance.secondPeriodAttendanceStatusID == 1 ||\n a.attendance.secondPeriodAttendanceStatusID == 3))) {\n count++;\n }\n }\n\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'firstPeriodLatePickupHours', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n count += a.attendance.firstPeriodLatePickupHours;\n }\n\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'secondPeriodLatePickupHours', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n count += a.attendance.secondPeriodLatePickupHours;\n }\n\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'sumLatePickupHours', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n count += a.attendance.firstPeriodLatePickupHours;\n count += a.attendance.secondPeriodLatePickupHours;\n }\n\n }\n return count;\n }\n });\n\n\n Object.defineProperty(ns.Reconciliation.prototype, 'firstPeriodExcuses', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected && \n a.attendance.firstPeriodAttendanceStatusID == 2) {\n count++;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'secondPeriodExcuses', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected &&\n a.attendance.secondPeriodAttendanceStatusID == 2) {\n count++;\n }\n }\n return count;\n }\n });\n\n\n Object.defineProperty(ns.Reconciliation.prototype, 'firstPeriodExcusesWithoutFood', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected &&\n a.attendance.firstPeriodAttendanceStatusID == 4) {\n count++;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'secondPeriodExcusesWithoutFood', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected &&\n a.attendance.secondPeriodAttendanceStatusID == 4) {\n count++;\n }\n }\n return count;\n }\n });\n\n\n Object.defineProperty(ns.Reconciliation.prototype, 'firstPeriodExcusesNoComp', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected &&\n a.attendance.firstPeriodAttendanceStatusID == 3) {\n count++;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'secondPeriodExcusesNoComp', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected &&\n a.attendance.secondPeriodAttendanceStatusID == 3) {\n count++;\n }\n }\n return count;\n }\n });\n\n\n Object.defineProperty(ns.Reconciliation.prototype, 'firstPeriodNotExcused', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if ((a.isSelected && a.attendance.firstPeriodAttendanceStatusID == 1) &&\n !(a.attendance.firstPeriodAttendanceTypeID == 0 && !a.attendance.firstPeriodRegistered)) {\n count++;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'secondPeriodNotExcused', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if ((a.isSelected && a.attendance.secondPeriodAttendanceStatusID == 1) &&\n !(a.attendance.secondPeriodAttendanceTypeID == 0 && !a.attendance.secondPeriodRegistered)) {\n count++;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'noOfMinutes', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n count = count + a.noOfMinutes;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'noOfMinutesStr', {\n enumerable: true, configurable: true,\n get: function () {\n var minutesOrig = this.noOfMinutes;\n\n var hours = Math.floor(minutesOrig / 60);\n var minutes = Math.floor(minutesOrig - (hours * 60));\n\n if (minutes === 0) {\n return hours;\n }\n\n if (minutes < 10) {\n return hours + ':0' + minutes;\n }\n\n return hours + ':' + minutes;\n }\n });\n\n // #endregion\n\n // #region Utility properties\n\n\n Object.defineProperty(ns.Reconciliation.prototype, 'isAnythingSelected', {\n enumerable: true, configurable: true,\n get: function () {\n\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n if (a.isSelected) {\n return true;\n }\n }\n\n return false;\n }\n });\n\n // #endregion\n\n}(webooker_acivity_models));","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region ReconciliationAttendance - Ctor \n ns.ReconciliationAttendance = function ReconciliationAttendance(attendance, activityReconciliationID, calcSnacksOnlyForPresent) {\n this.attendance = attendance;\n this.calcSnacksOnlyForPresent = calcSnacksOnlyForPresent;\n this.activityReconciliationID = activityReconciliationID || null;\n this.calculateProperties(attendance, this.activityReconciliationID);\n }\n // #endregion\n\n // #region ReconciliationAttendance - Methods\n\n ns.ReconciliationAttendance.prototype.getReconciliationAttendanceDTO = function () {\n return this.attendance;\n }\n\n ns.ReconciliationAttendance.prototype.calculateProperties = function (attendance, activityReconciliationID) {\n this.activityID = attendance.activityID;\n this.studentID = attendance.studentID;\n this.activityScheduleID = attendance.activityScheduleID;\n this.studentFullName = attendance.studentFullName;\n this.date = attendance.date;\n this.noOfMinutes = attendance.noOfMinutes;\n\n if (!String.prototype.isNullOrWhitespace(attendance.notes)) {\n this.notes = attendance.notes;\n } else {\n this.notes = '';\n }\n\n this.reconciled = !!attendance.activityReconciliationID &&\n attendance.activityReconciliationID != activityReconciliationID;\n\n if (!String.prototype.isNullOrWhitespace(attendance.reservationNotes)) {\n if (!String.prototype.isNullOrWhitespace(this.notes)) {\n this.notes += ' ';\n }\n\n this.notes += attendance.reservationNotes;\n }\n\n if (!String.prototype.isNullOrWhitespace(attendance.scheduleNotes)) {\n if (!String.prototype.isNullOrWhitespace(this.notes)) {\n this.notes += ' ';\n }\n this.notes += attendance.scheduleNotes;\n }\n\n\n this.firstPeriod = !!attendance.firstPeriodStartDate\n ? moment(attendance.firstPeriodStartDate).format('HH:mm') + ' - ' + moment(attendance.firstPeriodEndDate).format('HH:mm')\n : '';\n\n this.secondPeriod = !!attendance.secondPeriodStartDate\n ? moment(attendance.secondPeriodStartDate).format('HH:mm') + ' - ' + moment(attendance.secondPeriodEndDate).format('HH:mm')\n : '';\n\n if (!attendance.firstPeriodRegistered && attendance.firstPeriodAttendanceStatusID == 1 && attendance.firstPeriodAttendanceTypeID == 0)\n {\n // Do not show first period\n this.firstSnack = '';\n this.lunch = '';\n this.firstPeriodAttendanceStatus = '';\n this.firstPeriodAttendanceType = '';\n } else {\n if (this.calcSnacksOnlyForPresent) {\n this.firstSnack = attendance.firstPeriodAttendanceStatusID === 0 && attendance.firstSnackReserved\n ? '\\u2713'\n : '\\u2718';\n } else {\n this.firstSnack = attendance.firstSnack ? '\\u2713' : '\\u2718';\n }\n this.lunch = attendance.lunch ? '\\u2713' : '\\u2718';\n this.firstPeriodAttendanceStatus = this.attendanceStatusToString(attendance.firstPeriodAttendanceStatusID);\n this.firstPeriodAttendanceType = this.attendanceTypeToString(attendance.firstPeriodAttendanceTypeID);\n }\n\n if (!attendance.secondPeriodRegistered && attendance.secondPeriodAttendanceStatusID == 1 && attendance.secondPeriodAttendanceTypeID == 0)\n {\n this.secondSnack = '';\n this.secondPeriodAttendanceStatus = '';\n this.secondPeriodAttendanceType = '';\n } else {\n if (this.calcSnacksOnlyForPresent) {\n this.secondSnack = attendance.secondPeriodAttendanceStatusID === 0 && attendance.secondSnackReserved\n ? '\\u2713'\n : '\\u2718';\n } else {\n this.secondSnack = attendance.secondSnack ? '\\u2713' : '\\u2718';\n }\n this.secondPeriodAttendanceStatus = this.attendanceStatusToString(attendance.secondPeriodAttendanceStatusID);\n this.secondPeriodAttendanceType = this.attendanceTypeToString(attendance.secondPeriodAttendanceTypeID);\n }\n }\n\n ns.ReconciliationAttendance.prototype.attendanceStatusToString = function (input) {\n switch (input) {\n case 0:\n return 'TXT_STATUS_PRESENT';\n case 1:\n return 'TXT_STATUS_NOT_PRESENT_NOT_EXCUSED';\n case 2:\n return 'TXT_STATUS_NOT_PRESENT_EXCUSED';\n case 3:\n return 'TXT_STATUS_NOT_PRESENT_EXCUSED_NO_COMPENSATION';\n case 4:\n return 'TXT_STATUS_NOT_PRESENT_EXCUSED_NO_FOOD';\n }\n }\n\n ns.ReconciliationAttendance.prototype.attendanceTypeToString = function (input) {\n switch (input) {\n case 0:\n return 'TXT_VAL_REGISTERED';\n case 1:\n return 'TXT_VAL_ONEOFF';\n case 2:\n return 'TXT_VAL_AMEND';\n case 3:\n return 'TAX_VAL_PREVIEW';\n }\n }\n // #endregion\n\n}(webooker_acivity_models));","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region RecurringInvoice - Ctor \n\n ns.RecurringInvoice = function RecurringInvoice($translate) {\n\n // from InvoiceBase\n this.resetFields();\n if ($translate) {\n this.initLocalization($translate);\n }\n\n this.invoiceLineKindergartenLunchQty = 0;\n this.invoiceLineKindergartenSnackQty = 0;\n }\n\n // #endregion\n\n // #region InvoiceBase - Inheritance\n\n ns.RecurringInvoice.prototype = new ns.InvoiceBase(true);\n ns.RecurringInvoice.prototype.constructor = ns.InvoiceBase;\n ns.RecurringInvoice.prototype.parent = ns.InvoiceBase.prototype;\n\n // #endregion\n\n // #region RecurringInvoice - Methods\n\n ns.RecurringInvoice.prototype.getDTO = function ($translate) {\n\n var res = this.getInvoiceDTO($translate);\n\n res.invoiceTemplateID = this.invoiceTemplateID;\n res.paymentReferenceNumber = this.paymentReferenceNumber;\n\n return res;\n }\n\n ns.RecurringInvoice.prototype.initData = function (dto) {\n\n this.initDataByInvoiceDTO(dto);\n\n this.invoiceTemplateID = dto.invoiceTemplateID;\n this.paymentReferenceNumber = dto.paymentReferenceNumber; \n this.studentID = dto.customerStudentID;\n }\n\n // #endregion\n\n}(webooker_acivity_models));","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region RecurringInvoice - Ctor \n\n ns.RecurringSchedule = function RecurringSchedule($translate) {\n\n this.invoice = new ns.RecurringInvoice($translate);\n this.issuedInvoices = [];\n }\n\n // #endregion\n\n // #region Reconciliation - Methods\n\n ns.RecurringSchedule.prototype.getDTO = function ($translate) {\n var res = {\n invoiceRecurrenceScheduleID: this.invoiceRecurrenceScheduleID,\n name: this.name,\n active: this.active,\n activityID: this.activityID,\n studentID: this.studentID,\n semesterID: this.semesterID,\n reccurenceUnitTypeID: this.reccurenceUnitTypeID,\n repeatEveryNoOfUnits: this.repeatEveryNoOfUnits,\n endAfterNoOfIssues: this.endAfterNoOfIssues,\n endAtSpecificDate: this.endAtSpecificDate,\n startDate: this.startDate,\n endDate: this.endDate,\n invoice: this.invoice.getDTO($translate)\n };\n\n return res;\n }\n\n ns.RecurringSchedule.prototype.initData = function (dto) {\n\n this.invoiceRecurrenceScheduleID = dto.invoiceRecurrenceScheduleID;\n this.name = dto.name;\n this.active = dto.active;\n this.activityID = dto.activityID,\n this.studentID = dto.studentID,\n this.semesterID = dto.semesterID,\n this.reccurenceUnitTypeID = dto.reccurenceUnitTypeID;\n this.repeatEveryNoOfUnits = dto.repeatEveryNoOfUnits;\n this.endIssueTypeID = !!dto.endAtSpecificDate ? 1 : 2;\n this.endAfterNoOfIssues = dto.endAfterNoOfIssues;\n this.endAtSpecificDate = dto.endAtSpecificDate;\n this.startDate = dto.startDate;\n\n this.issuedInvoices = dto.issuedInvoices || [];\n \n this.invoice.initData(dto.invoice);\n this.today = moment().toDate();\n }\n\n // #endregion\n\n // #region InvoiceBase - Properties\n\n Object.defineProperty(ns.RecurringSchedule.prototype, 'notActive', {\n enumerable: true, configurable: true,\n get: function () {\n return !this.active;\n }\n });\n\n Object.defineProperty(ns.RecurringSchedule.prototype, 'endIssueTypeID', {\n enumerable: true, configurable: true,\n get: function () {\n return this._endIssueTypeID;\n },\n set: function (val) {\n this._endIssueTypeID = val;\n if (val === 1) {\n this._lastEndAfterNoOfIssues = this.endAfterNoOfIssues;\n this.endAfterNoOfIssues = null;\n this.endAtSpecificDate = this._lastEndAtSpecificDate || this.endAtSpecificDate || moment(this.startDate).add(1, 'M').toDate();\n } else {\n this._lastEndAtSpecificDate = this.endAtSpecificDate;\n this.endAtSpecificDate = null;\n this.endAfterNoOfIssues = this._lastEndAfterNoOfIssues || this.endAfterNoOfIssues || 10;\n }\n }\n });\n\n Object.defineProperty(ns.RecurringSchedule.prototype, 'lastIssuedDate', {\n enumerable: true, configurable: true,\n get: function () {\n var last = _.last(_.sortBy(this.issuedInvoices, 'issuedAt'));\n return !!last\n ? last.issuedAt\n : null;\n }\n });\n\n Object.defineProperty(ns.RecurringSchedule.prototype, 'endDate', {\n enumerable: true, configurable: true,\n get: function () {\n if (this.endIssueTypeID === 2) { // endAfterNoOfIssues\n switch (this.reccurenceUnitTypeID) {\n case 1: // day\n return moment(this.startDate).add(this.repeatEveryNoOfUnits * Math.max(0, this.endAfterNoOfIssues - 1), 'd').toDate();\n case 2: // week\n return moment(this.startDate).add(this.repeatEveryNoOfUnits * Math.max(0, this.endAfterNoOfIssues - 1), 'w').toDate();\n case 3: // month\n return moment(this.startDate).add(this.repeatEveryNoOfUnits * Math.max(0, this.endAfterNoOfIssues - 1), 'M').toDate();\n }\n }\n\n // endAtSpecificDate\n return this.endAtSpecificDate;\n }\n });\n\n Object.defineProperty(ns.RecurringSchedule.prototype, 'nextInvoice', {\n enumerable: true, configurable: true,\n get: function () {\n\n var lastIssuedDate = this.lastIssuedDate;\n var nextIssueDate = lastIssuedDate || this.startDate;\n var todayIsImportant = moment(this.startDate).isBefore(this.today);\n \n if (!this.repeatEveryNoOfUnits) {\n return null;\n }\n\n if (!lastIssuedDate) {\n if (moment(this.startDate).isAfter(this.endDate)) {\n return null;\n }\n\n if (!todayIsImportant && moment(this.startDate).isSameOrBefore(this.endDate)) {\n return this.startDate;\n }\n\n lastIssuedDate = this.startDate;\n }\n\n if (this.reccurenceUnitTypeID == 3)\n {\n if (moment(lastIssuedDate).date() != moment(this.startDate).date())\n {\n var lastDayOfMonth = moment(lastIssuedDate).endOf('month').date();\n var maxDay = Math.min(moment(this.startDate).date(), lastDayOfMonth);\n\n lastIssuedDate = moment({\n year: moment(lastIssuedDate).year(),\n month: moment(lastIssuedDate).month(),\n day: maxDay\n });\n }\n }\n\n do\n {\n switch (this.reccurenceUnitTypeID) {\n case 1: // day\n nextIssueDate = moment(lastIssuedDate).add(this.repeatEveryNoOfUnits, 'd');\n break;\n case 2: // week\n nextIssueDate = moment(lastIssuedDate).add(this.repeatEveryNoOfUnits, 'w');\n break;\n case 3: // month\n nextIssueDate = moment(lastIssuedDate).add(this.repeatEveryNoOfUnits, 'M');\n if (nextIssueDate.date() < moment(this.startDate).date())\n {\n var lastDayOfMonth = moment(nextIssueDate).endOf('month').date();\n var maxDay = Math.min(moment(this.startDate).date(), lastDayOfMonth);\n\n nextIssueDate = moment({ year: nextIssueDate.year(), month: nextIssueDate.month(), day: maxDay });\n }\n break;\n }\n\n lastIssuedDate = nextIssueDate;\n }\n while ((moment(nextIssueDate).isBefore(this.today)) && (moment(this.today).isSameOrBefore(this.endDate)));\n\n if (moment(nextIssueDate).isAfter(this.endDate) ||\n moment(nextIssueDate).isBefore(this.today) ||\n moment(this.today).isAfter(this.endDate)) {\n return null;\n }\n\n return nextIssueDate.toDate();\n }\n });\n\n Object.defineProperty(ns.RecurringSchedule.prototype, 'invoiceTotal', {\n enumerable: true, configurable: true,\n get: function () { \n return this.invoice.invoiceSumPrice;\n }\n });\n\n // #endregion\n\n}(webooker_acivity_models));","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region Schedule - Ctor\n ns.Schedule = function Schedule(semesterStartDate, semesterEndDate, schedules) {\n this.weeks = [];\n\n var startDate = semesterStartDate;\n var endDate = semesterEndDate;\n\n if (schedules && schedules.length > 0) {\n var first = schedules[0];\n var last = schedules[schedules.length - 1];\n\n var firstStart = first.firstPeriodStartDate\n ? first.firstPeriodStartDate\n : first.secondPeriodStartDate;\n\n var lastStart = last.firstPeriodStartDate\n ? last.firstPeriodStartDate\n : last.secondPeriodStartDate;\n\n startDate = startDate < firstStart\n ? startDate\n : firstStart;\n\n endDate = endDate > lastStart\n ? endDate\n : lastStart;\n }\n\n var mStartDate = moment(startDate).startOf('week');\n var mEndDate = moment(endDate).startOf('week');\n\n while (mStartDate.isBefore(mEndDate)) {\n var weekModel = new ns.ScheduleWeek(\n mStartDate,\n this.findWeekSchedule(schedules, mStartDate));\n\n this.weeks.push(weekModel);\n\n mStartDate.add('weeks', 1);\n }\n }\n // #endregion\n\n // #region Schedule - Methods\n ns.Schedule.prototype.findWeekSchedule = function (schedules, mStartDate) {\n var idx = 0;\n var sch = [];\n while (!!schedules && (idx < schedules.length)) {\n\n var currentSchedule = schedules[idx];\n\n var currentStart = null;\n\n if (currentSchedule.firstPeriodStartDate) {\n currentStart = moment(currentSchedule.firstPeriodStartDate).startOf('week');\n } else {\n currentStart = moment(currentSchedule.secondPeriodStartDate).startOf('week');\n }\n\n if (currentStart.isAfter(mStartDate)) {\n break;\n }\n\n if (currentStart.isSame(mStartDate)) {\n sch.push(currentSchedule);\n }\n\n idx++;\n }\n\n return sch;\n }\n // #endregion\n\n})(webooker_acivity_models);","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region ScheduleWeek - Ctor\n ns.ScheduleWeek = function ScheduleWeek(mStartDate, weekSchedules) {\n this.weekNo = mStartDate.week();\n this.startDate = moment(mStartDate).startOf('week').toDate();\n this.endDate = moment(mStartDate).endOf('week').toDate();\n\n this.schedules = [];\n if (weekSchedules && weekSchedules.length) {\n this.schedules.push.apply(this.schedules, weekSchedules);\n }\n this.singlePeriodProgramOnly = false;\n }\n // #endregion\n\n // #region ScheduleWeek - Methods\n ns.ScheduleWeek.prototype.getScheduleByDay = function (dayOfWeek) {\n if (this.schedules) {\n for (var s = 0; s < this.schedules.length; s++) {\n var schedule = this.schedules[s];\n var dateIndicia = schedule.firstPeriodStartDate ||\n schedule.firstPeriodEndDate ||\n schedule.secondPeriodStartDate ||\n schedule.secondPeriodEndDate;\n\n if (!!dateIndicia) {\n var scheduleDayOfWeek = moment(dateIndicia).isoWeekday();\n\n if (scheduleDayOfWeek === dayOfWeek) {\n return schedule;\n }\n }\n }\n }\n\n return null;\n }\n\n ns.ScheduleWeek.prototype.removeScheduleByDay = function (dayOfWeek) {\n if (this.schedules) {\n\n var rindex = -1;\n\n for (var s = 0; s < this.schedules.length; s++) {\n var schedule = this.schedules[s];\n var dateIndicia = schedule.firstPeriodStartDate ||\n schedule.firstPeriodEndDate ||\n schedule.secondPeriodStartDate ||\n schedule.secondPeriodEndDate;\n\n if (!!dateIndicia) {\n var scheduleDayOfWeek = moment(dateIndicia).isoWeekday();\n\n if (scheduleDayOfWeek === dayOfWeek) {\n rindex = s;\n break;\n }\n }\n }\n\n if (rindex !== -1) {\n this.schedules.splice(rindex, 1);\n }\n }\n }\n\n ns.ScheduleWeek.prototype.getScheduleIndiciesByDay = function (dayOfWeek) {\n var schedule = this.getScheduleByDay(dayOfWeek);\n if (schedule) {\n var am = schedule.firstPeriodStartDate || schedule.firstPeriodEndDate;\n var pm = schedule.secondPeriodStartDate || schedule.secondPeriodEndDate\n if (am && pm) { return 'both'; }\n if (am && this.singlePeriodProgramOnly) { return 'both'; }\n if (am) { return 'am'; }\n if (pm) { return 'pm'; }\n }\n\n return '';\n }\n //#endregion\n\n // #region ScheduleWeek - Properties\n Object.defineProperty(ns.ScheduleWeek.prototype, 'monday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(1); }\n });\n\n Object.defineProperty(ns.ScheduleWeek.prototype, 'tuesday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(2); }\n });\n\n Object.defineProperty(ns.ScheduleWeek.prototype, 'wednesday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(3); }\n });\n\n Object.defineProperty(ns.ScheduleWeek.prototype, 'thursday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(4); }\n });\n\n Object.defineProperty(ns.ScheduleWeek.prototype, 'friday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(5); }\n });\n\n Object.defineProperty(ns.ScheduleWeek.prototype, 'saturday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(6); }\n });\n\n Object.defineProperty(ns.ScheduleWeek.prototype, 'sunday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(7); }\n });\n\n Object.defineProperty(ns.ScheduleWeek.prototype, 'notes', {\n enumerable: true, configurable: true,\n get: function () {\n\n var days = new Array(7);\n\n if (this.schedules) {\n for (var s = 0; s < this.schedules.length; s++) {\n var schedule = this.schedules[s];\n var dateIndicia = schedule.firstPeriodStartDate ||\n schedule.firstPeriodEndDate ||\n schedule.secondPeriodStartDate ||\n schedule.secondPeriodEndDate;\n\n if (!!dateIndicia) {\n days[moment(dateIndicia).isoWeekday() - 1] = schedule;\n }\n }\n }\n\n var result = '';\n\n for (var d = 0; d < days.length; d++) {\n var day = days[d];\n if (day && !String.prototype.isNullOrWhitespace(day.notes)) {\n if (String.prototype.isNullOrWhitespace(result)) {\n result += '{' + d + '}: ' + day.notes;\n } else {\n result += ', {' + d + '}: ' + day.notes;\n }\n }\n }\n\n return result;\n }\n });\n // #endregion\n\n})(webooker_acivity_models);","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n var daysEnum = ['TXT_MONDAY', 'TXT_TUESDAY', 'TXT_WEDNESDAY', 'TXT_THURSDAY', 'TXT_FRIDAY', 'TXT_SATURDAY', 'TXT_SUNDAY'];\n\n // #region ScheduleDetail - Ctor\n ns.ScheduleDetail = function ScheduleDetail(scheduleWeeks) {\n this.scheduleWeeks = scheduleWeeks;\n this.days = [];\n for (var day = 1; day <= 7; day++) {\n this.days.push(new ns.ScheduleDetailDay(\n daysEnum[day - 1],\n scheduleWeeks,\n day, // isoWeekday\n this\n ));\n }\n }\n // #endregion \n\n // #region ScheduleDetail - Methods\n ns.ScheduleDetail.prototype.getPrevFilledInDay = function (day) {\n var isoWeekday = day.dayOfWeek;\n\n // Find previous one\n for (var d = isoWeekday - 1; d >= 0; d--) { \n var prev = this.days[d];\n\n if (prev.firstPeriodStartDate !== null ||\n prev.secondPeriodStartDate !== null) {\n return prev;\n }\n }\n\n // try nex one\n for (var d = isoWeekday + 1; d < this.days.length; d++) {\n var next = this.days[d];\n\n if (next.firstPeriodStartDate !== null ||\n next.secondPeriodStartDate !== null) {\n return next;\n }\n }\n\n return null;\n }\n\n ns.ScheduleDetail.prototype.onDataSourceChange = function () {\n for (var d = 0; d < this.days.length; d++) {\n this.days[d].onDataSourceChange.call(this.days[d]);\n }\n }\n\n ns.ScheduleDetail.prototype.applyChanges = function () {\n for (var d = 0; d < this.days.length; d++) {\n this.days[d].applyChanges.call(this.days[d]);\n }\n }\n // #endregion\n\n // #region ScheduleDetail - Properties\n Object.defineProperty(ns.ScheduleDetail.prototype, \"active\", {\n get: function () {\n var a = true;\n var cnt = 0;\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n a &= d.active;\n cnt++;\n }\n return a && cnt > 0;\n },\n set: function (value) {\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n d.active = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n // #endregion\n\n\n}(webooker_acivity_models));","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region ScheduleDetailDay - Ctor\n ns.ScheduleDetailDay = function ScheduleDetail(day, scheduleWeeks, isoWeekday, scheduleDetail) {\n this.parentDetail = scheduleDetail;\n this.day = day;\n this.dayOfWeek = isoWeekday;\n this.scheduleWeeks = scheduleWeeks;\n\n this.onDataSourceChange();\n }\n // #endregion\n\n // #region StudentDetailDay - Inheritance\n\n ns.ScheduleDetailDay.prototype = new ns.ScheduleDayBase();\n ns.ScheduleDetailDay.prototype.constructor = ns.ScheduleDetailDay;\n ns.ScheduleDetailDay.prototype.parent = ns.ScheduleDayBase.prototype;\n\n // #endregion\n\n // #region ScheduleDetailDay - Methods\n ns.ScheduleDetailDay.prototype.calculateProperties = function () {\n\n this.daySchedules = this.getSchedulesByDay(this.scheduleWeeks, this.dayOfWeek);\n\n this._firstPeriodStartDate = this.getTimeValue(this.daySchedules, 'firstPeriodStartDate', true);\n this._firstPeriodEndDate = this.getTimeValue(this.daySchedules, 'firstPeriodEndDate', false);\n this._secondPeriodStartDate = this.getTimeValue(this.daySchedules, 'secondPeriodStartDate', true);\n this._secondPeriodEndDate = this.getTimeValue(this.daySchedules, 'secondPeriodEndDate', false);\n this._lunch = this.getBoolValue(this.daySchedules, 'lunch');\n this._firstSnack = this.getBoolValue(this.daySchedules, 'firstSnack');\n this._secondSnack = this.getBoolValue(this.daySchedules, 'secondSnack');\n this._notes = this.getStringValue(this.daySchedules, 'notes');\n this._firstPeriodCapacity = this.getNumberValue(this.daySchedules, 'firstPeriodCapacity');\n this._secondPeriodCapacity = this.getNumberValue(this.daySchedules, 'secondPeriodCapacity');\n\n this.firstPeriodStartDateIndeterminate = this.isTimeIndeterminate(this.scheduleWeeks, 'firstPeriodStartDate');\n this.firstPeriodEndDateIndeterminate = this.isTimeIndeterminate(this.scheduleWeeks, 'firstPeriodEndDate');\n this.secondPeriodStartDateIndeterminate = this.isTimeIndeterminate(this.scheduleWeeks, 'secondPeriodStartDate');\n this.secondPeriodEndDateIndeterminate = this.isTimeIndeterminate(this.scheduleWeeks, 'secondPeriodEndDate');\n this.lunchIndeterminate = this.isBoolIndeterminate(this.scheduleWeeks, 'lunch');\n this.firstSnackIndeterminate = this.isBoolIndeterminate(this.scheduleWeeks, 'firstSnack');\n this.secondSnackIndeterminate = this.isBoolIndeterminate(this.scheduleWeeks, 'secondSnack');\n this.notesIndeterminate = this.isStringIndeterminate(this.scheduleWeeks, 'notes');\n this.firstPeriodCapacityIndeterminate = this.isNumberIndeterminate(this.scheduleWeeks, 'firstPeriodCapacity');\n this.secondPeriodCapacityIndeterminate = this.isNumberIndeterminate(this.scheduleWeeks, 'secondPeriodCapacity');\n\n this.firstPeriodStartDateMin = this.getUnboundedMinTimeValue().toDate();\n this.firstPeriodEndDateMax = this.getUnboundedMaxTimeValue().toDate();\n this.secondPeriodStartDateMin = this.getUnboundedMinTimeValue().toDate();\n this.secondPeriodEndDateMax = this.getUnboundedMaxTimeValue().toDate();\n\n this._active = (!!this.firstPeriodStartDate && !!this.firstPeriodEndDate) ||\n (!!this.secondPeriodStartDate && !!this.secondPeriodEndDate);\n }\n\n ns.ScheduleDetailDay.prototype.getTimeValue = function (daySchedules, propertyName, min) {\n if (!daySchedules || !daySchedules.length) {\n return null;\n }\n\n if (min) {\n return this.getMinTimeValue(daySchedules, propertyName, true);\n } else {\n return this.getMaxTimeValue(daySchedules, propertyName, true);\n }\n\n return null;\n }\n\n ns.ScheduleDetailDay.prototype.getBoolValue = function (daySchedules, propertyName) {\n if (!daySchedules || !daySchedules.length) {\n return null;\n }\n\n for (var d = 0; d < daySchedules.length; d++) {\n var prop = daySchedules[d][propertyName];\n if (prop) {\n return true;\n }\n }\n\n return false;\n }\n\n ns.ScheduleDetailDay.prototype.getStringValue = function (daySchedules, propertyName) {\n if (!daySchedules || !daySchedules.length) {\n return null;\n }\n\n var val = null;\n var first = true;\n\n for (var d = 0; d < daySchedules.length; d++) {\n var prop = daySchedules[d][propertyName];\n if (first) {\n first = false;\n val = prop;\n } else {\n if (val !== prop) {\n return null;\n }\n }\n }\n\n return val;\n }\n\n ns.ScheduleDetailDay.prototype.getNumberValue = function (daySchedules, propertyName) {\n if (!daySchedules || !daySchedules.length) {\n return null;\n }\n\n var val = null;\n var first = true;\n\n for (var d = 0; d < daySchedules.length; d++) {\n var prop = daySchedules[d][propertyName];\n if (first) {\n first = false;\n val = prop;\n } else {\n if (val > prop) {\n val = prop;\n }\n }\n }\n\n return val;\n }\n\n ns.ScheduleDetailDay.prototype.isTimeIndeterminate = function (scheduleWeeks, propertyName) {\n\n if (!scheduleWeeks ||\n !scheduleWeeks.length) {\n return false;\n }\n\n var first = true;\n var val = null;\n var rDate = null;\n var rMin = null;\n\n for (var s = 0; s < scheduleWeeks.length; s++) {\n var activityWeek = scheduleWeeks[s];\n\n var schedule = activityWeek.getScheduleByDay(this.dayOfWeek);\n if (!schedule) {\n if (!first) {\n if (!!val) {\n return true;\n }\n }\n\n first = false;\n continue;\n }\n\n var rvalue = schedule[propertyName];\n\n if (first) {\n if (rvalue) {\n rDate = moment(rvalue);\n rMin = rDate.hours() * 60 + rDate.minutes();\n val = rMin;\n }\n first = false;\n } else {\n if (rvalue) {\n rDate = moment(rvalue);\n rMin = rDate.hours() * 60 + rDate.minutes();\n if (val !== rMin) {\n return true;\n }\n } else {\n if (val === null && !!rvalue) {\n return true;\n }\n }\n }\n }\n\n return false;\n }\n\n ns.ScheduleDetailDay.prototype.isBoolIndeterminate = function (scheduleWeeks, propertyName) {\n if (!scheduleWeeks ||\n !scheduleWeeks.length) {\n return false;\n }\n\n var first = true;\n var val = null;\n\n for (var s = 0; s < scheduleWeeks.length; s++) {\n var activityWeek = scheduleWeeks[s];\n\n var schedule = activityWeek.getScheduleByDay(this.dayOfWeek);\n\n if (!schedule) {\n if (!first) {\n if (val) {\n return true;\n }\n }\n\n first = false;\n val = false;\n continue;\n }\n\n var rvalue = schedule[propertyName];\n\n if (first) {\n val = rvalue;\n first = false;\n } else {\n if (rvalue !== val) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n ns.ScheduleDetailDay.prototype.isStringIndeterminate = function (scheduleWeeks, propertyName) {\n if (!scheduleWeeks ||\n !scheduleWeeks.length) {\n return false;\n }\n\n var first = true;\n var val = null;\n\n for (var s = 0; s < scheduleWeeks.length; s++) {\n var activityWeek = scheduleWeeks[s];\n\n var schedule = activityWeek.getScheduleByDay(this.dayOfWeek);\n if (!schedule) {\n if (!first) {\n if (!String.prototype.isNullOrWhitespace(val)) {\n return true;\n }\n }\n\n first = false;\n continue;\n }\n\n var rvalue = schedule[propertyName];\n if (first) {\n val = rvalue;\n first = false;\n } else {\n var differ = (!String.prototype.isNullOrWhitespace(rvalue) && !String.prototype.isNullOrWhitespace(val) && (rvalue !== val)) ||\n (String.prototype.isNullOrWhitespace(rvalue) !== String.prototype.isNullOrWhitespace(val));\n if (differ) {\n return true;\n }\n }\n }\n return false;\n }\n\n ns.ScheduleDetailDay.prototype.isNumberIndeterminate = function (scheduleWeeks, propertyName) {\n if (!scheduleWeeks ||\n !scheduleWeeks.length) {\n return false;\n }\n\n var first = true;\n var val = null;\n\n for (var s = 0; s < scheduleWeeks.length; s++) {\n var activityWeek = scheduleWeeks[s];\n\n var schedule = activityWeek.getScheduleByDay(this.dayOfWeek);\n if (!schedule) {\n if (!first) {\n if (val) {\n return true;\n }\n }\n\n first = false;\n continue;\n }\n\n var rvalue = schedule[propertyName];\n if (first) {\n val = rvalue;\n first = false;\n } else {\n if (rvalue !== val) {\n return true;\n }\n }\n }\n return false;\n }\n\n ns.ScheduleDetailDay.prototype.onDataSourceChange = function () {\n this.calculateProperties();\n }\n\n ns.ScheduleDetailDay.prototype.applyChanges = function () {\n if (this.scheduleWeeks) {\n\n var hasFirstPeriod = (!!this.firstPeriodStartDate && !!this.firstPeriodEndDate);\n var hasSecondPeriod = (!!this.secondPeriodStartDate && !!this.secondPeriodEndDate);\n var shouldRemove = !hasFirstPeriod && !hasSecondPeriod;\n var week = null;\n\n if (shouldRemove) {\n this.firstPeriodStartDateChanged = false;\n this.firstPeriodEndDateChanged = false;\n this.secondPeriodStartDateChanged = false;\n this.secondPeriodEndDateChanged = false;\n this.lunchChanged = false;\n this.firstSnackChanged = false;\n this.secondSnackChanged = false;\n this.notesChanged = false;\n this.firstPeriodCapacityChanged = false;\n this.secondPeriodCapacityChanged = false;\n\n for (var w = 0; w < this.scheduleWeeks.length; w++) {\n week = this.scheduleWeeks[w];\n week.removeScheduleByDay(this.dayOfWeek);\n }\n } else {\n\n for (var w = 0; w < this.scheduleWeeks.length; w++) {\n week = this.scheduleWeeks[w];\n var schedule = week.getScheduleByDay(this.dayOfWeek);\n\n if (!schedule) {\n schedule = {\n };\n }\n\n var isDirty = false;\n\n if (hasFirstPeriod) {\n if (this.firstPeriodStartDateChanged) {\n this.applyChangesToTimeProperty(week.startDate, schedule, this.firstPeriodStartDate, 'firstPeriodStartDate');\n isDirty = true;\n }\n if (this.firstPeriodEndDateChanged) {\n this.applyChangesToTimeProperty(week.startDate, schedule, this.firstPeriodEndDate, 'firstPeriodEndDate');\n isDirty = true;\n }\n } else {\n this.applyChangesToTimeProperty(week.startDate, schedule, null, 'firstPeriodStartDate');\n this.applyChangesToTimeProperty(week.startDate, schedule, null, 'firstPeriodEndDate');\n }\n\n if (hasSecondPeriod) {\n if (this.secondPeriodStartDateChanged) {\n this.applyChangesToTimeProperty(week.startDate, schedule, this.secondPeriodStartDate, 'secondPeriodStartDate');\n isDirty = true;\n }\n if (this.secondPeriodEndDateChanged) {\n this.applyChangesToTimeProperty(week.startDate, schedule, this.secondPeriodEndDate, 'secondPeriodEndDate');\n isDirty = true;\n }\n } else {\n this.applyChangesToTimeProperty(week.startDate, schedule, null, 'secondPeriodStartDate');\n this.applyChangesToTimeProperty(week.startDate, schedule, null, 'secondPeriodEndDate');\n }\n\n if (this.lunchChanged) {\n this.applyChangesToBoolProperty(schedule, this.lunch, 'lunch');\n }\n\n if (this.firstSnackChanged) {\n this.applyChangesToBoolProperty(schedule, this.firstSnack, 'firstSnack');\n }\n if (this.secondSnackChanged) {\n this.applyChangesToBoolProperty(schedule, this.secondSnack, 'secondSnack');\n }\n if (this.notesChanged) {\n this.applyChangesToStringProperty(schedule, this.notes, 'notes');\n }\n if (this.firstPeriodCapacityChanged) {\n this.applyChangesToNumberProperty(schedule, this.firstPeriodCapacity, 'firstPeriodCapacity');\n }\n if (this.secondPeriodCapacityChanged) {\n this.applyChangesToNumberProperty(schedule, this.secondPeriodCapacity, 'secondPeriodCapacity');\n }\n\n if (isDirty && !schedule.activityScheduleID) {\n week.schedules.push(schedule);\n }\n }\n\n this.firstPeriodStartDateChanged = false;\n this.firstPeriodEndDateChanged = false;\n this.secondPeriodStartDateChanged = false;\n this.secondPeriodEndDateChanged = false;\n this.lunchChanged = false;\n this.firstSnackChanged = false;\n this.secondSnackChanged = false;\n this.notesChanged = false;\n this.firstPeriodCapacityChanged = false;\n this.secondPeriodCapacityChanged = false;\n }\n }\n }\n\n ns.ScheduleDetailDay.prototype.applyChangesToTimeProperty = function (startDate, schedule, value, propertyName) {\n if (value) {\n var mvalue = moment(value);\n var nvalue = moment(startDate)\n .add('days', this.dayOfWeek - 1)\n .add('hours', mvalue.hour())\n .add('minutes', mvalue.minute())\n .toDate();\n schedule[propertyName] = nvalue;\n } else {\n schedule[propertyName] = null;\n }\n }\n\n ns.ScheduleDetailDay.prototype.applyChangesToBoolProperty = function (schedule, value, propertyName) {\n schedule[propertyName] = value || false;\n }\n\n ns.ScheduleDetailDay.prototype.applyChangesToStringProperty = function (schedule, value, propertyName) {\n schedule[propertyName] = value;\n }\n\n ns.ScheduleDetailDay.prototype.applyChangesToNumberProperty = function (schedule, value, propertyName) {\n schedule[propertyName] = value;\n }\n\n ns.ScheduleDetailDay.prototype.setCommonPropertyValue = function (startDate, schedule, propertyName) {\n var value = this.day[propertyName];\n\n if (value !== \"indeterminate\") {\n var timeCompare = schedule[propertyName] instanceof Date ||\n value instanceof Date;\n\n if (timeCompare && !!value) {\n value = moment(startDate)\n .add('days', this.dayOfWeek - 1)\n .add('hours', moment(value).hour())\n .add('minutes', moment(value).minute())\n .toDate();\n }\n\n if (timeCompare) {\n if (!schedule[propertyName] ||\n !value ||\n schedule[propertyName].getTime() !== value.getTime()) {\n schedule[propertyName] = value;\n schedule.dirty = true;\n }\n } else {\n if (schedule[propertyName] != value) {\n var wasUndef = (typeof schedule[propertyName] === 'undefined');\n schedule[propertyName] = value;\n if (!wasUndef || (wasUndef && value)) {\n schedule.dirty = true;\n }\n }\n }\n }\n }\n\n ns.ScheduleDetailDay.prototype.getCommonPropertyValue = function (scheduleWeeks, propertyName, timeCompare) {\n var propertyValue = null;\n var firstRun = true;\n\n if (scheduleWeeks) {\n for (var w = 0; w < scheduleWeeks.length; w++) {\n var activityWeek = scheduleWeeks[w];\n\n var schedule = activityWeek.getScheduleByDay(this.dayOfWeek);\n if (!schedule) {\n if (!firstRun) {\n if (!propertyValue) {\n return null;\n }\n\n return \"indeterminate\";\n }\n\n firstRun = false;\n continue;\n }\n\n var schedulePropertyValue = schedule[propertyName];\n var same = null;\n\n if (timeCompare && propertyValue && schedulePropertyValue) {\n var mPropertValue = moment(propertyValue);\n var mSchedulePropertyValue = moment(schedulePropertyValue);\n\n same = mPropertValue.hour() === mSchedulePropertyValue.hour() &&\n mPropertValue.minute() === mSchedulePropertyValue.minute();\n } else {\n same = propertyValue === schedulePropertyValue\n }\n\n if (!same) {\n if (firstRun) {\n if (timeCompare) {\n propertyValue = new Date(schedulePropertyValue.valueOf())\n } else {\n propertyValue = schedulePropertyValue;\n }\n firstRun = false;\n } else {\n return \"indeterminate\";\n }\n }\n }\n }\n\n return propertyValue;\n }\n // #endregion \n\n // #region ScheduleDetailDay - Properties\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"active\", {\n get: function () {\n return this._active;\n },\n set: function (value) {\n\n this._active = value;\n\n if (!value) {\n this.firstPeriodStartDate = null;\n this.firstPeriodEndDate = null;\n this.secondPeriodStartDate = null;\n this.secondPeriodEndDate = null;\n this.lunch = false;\n this.firstSnack = false;\n this.secondSnack = false;\n this.notes = null;\n this.firstPeriodCapacity = 0;\n this.secondPeriodCapacity = 0;\n } else {\n var filled = this.parentDetail.getPrevFilledInDay(this);\n if (filled) {\n this.firstPeriodStartDate = filled.firstPeriodStartDate;\n this.firstPeriodEndDate = filled.firstPeriodEndDate;\n this.secondPeriodStartDate = filled.secondPeriodStartDate;\n this.secondPeriodEndDate = filled.secondPeriodEndDate;\n this.lunch = filled.lunch;\n this.firstSnack = filled.firstSnack;\n this.secondSnack = filled.secondSnack;\n this.notes = filled.notes;\n this.firstPeriodCapacity = filled.firstPeriodCapacity;\n this.secondPeriodCapacity = filled.secondPeriodCapacity;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"firstPeriodStartDate\", {\n get: function () {\n return this._firstPeriodStartDate;\n },\n set: function (value) {\n this._firstPeriodStartDate = value;\n this.firstPeriodStartDateChanged = true;\n if (value !== undefined) {\n this.firstPeriodStartDateIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"firstPeriodEndDate\", {\n get: function () {\n return this._firstPeriodEndDate;\n },\n set: function (value) {\n this._firstPeriodEndDate = value;\n this.firstPeriodEndDateChanged = true;\n if (value !== undefined) {\n this.firstPeriodEndDateIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"secondPeriodStartDate\", {\n get: function () {\n return this._secondPeriodStartDate;\n },\n set: function (value) {\n this._secondPeriodStartDate = value;\n this.secondPeriodStartDateChanged = true;\n if (value !== undefined) {\n this.secondPeriodStartDateIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"secondPeriodEndDate\", {\n get: function () {\n return this._secondPeriodEndDate;\n },\n set: function (value) {\n this._secondPeriodEndDate = value;\n this.secondPeriodEndDateChanged = true;\n if (value !== undefined) {\n this.secondPeriodEndDateIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"lunch\", {\n get: function () {\n return this._lunch;\n },\n set: function (value) {\n this._lunch = value;\n this.lunchChanged = true;\n if (value !== undefined) {\n this.lunchIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"firstSnack\", {\n get: function () {\n return this._firstSnack;\n },\n set: function (value) {\n this._firstSnack = value;\n this.firstSnackChanged = true;\n if (value !== undefined) {\n this.firstSnackIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"secondSnack\", {\n get: function () {\n return this._secondSnack;\n },\n set: function (value) {\n this._secondSnack = value;\n this.secondSnackChanged = true;\n if (value !== undefined) {\n this.secondSnackIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"notes\", {\n get: function () {\n return this._notes;\n },\n set: function (value) {\n this._notes = value;\n this.notesChanged = true;\n if (value !== undefined) {\n this.notesIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"firstPeriodCapacity\", {\n get: function () {\n return this._firstPeriodCapacity;\n },\n set: function (value) {\n if (!value) {\n value = 0;\n }\n this._firstPeriodCapacity = value;\n this.firstPeriodCapacityChanged = true;\n if (value !== undefined) {\n this.firstPeriodCapacityIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"secondPeriodCapacity\", {\n get: function () {\n return this._secondPeriodCapacity;\n },\n set: function (value) {\n if (!value) {\n value = 0;\n }\n this._secondPeriodCapacity = value;\n this.secondPeriodCapacityChanged = true;\n if (value !== undefined) {\n this.secondPeriodCapacityIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n // #endregion\n\n\n}(webooker_acivity_models));","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region Student - Ctor\n ns.Student = function Student(selectedSchedules) {\n this.initialize(selectedSchedules);\n };\n // #endregion\n\n // #region Student - Inheritance\n\n ns.Student.prototype = new ns.ScheduleResourceBase();\n ns.Student.prototype.constructor = ns.Student;\n ns.Student.prototype.parent = ns.ScheduleResourceBase.prototype;\n\n // #endregion\n\n})(webooker_acivity_models);","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region StudentDetail - Ctor\n ns.StudentDetail = function StudentDetail(reservations, schedules, studentID, activityID, activitySetting) {\n this.reservations = reservations;\n this.initialize(reservations, schedules, studentID, activityID);\n this.activitySetting = activitySetting;\n }\n // #endregion\n\n\n // #region StudentDetail - Inheritance\n\n ns.StudentDetail.prototype = new ns.ScheduleResourceDetailBase();\n ns.StudentDetail.prototype.constructor = ns.StudentDetail;\n ns.StudentDetail.prototype.parent = ns.ScheduleResourceDetailBase.prototype;\n\n // #endregion\n\n // #region StudentDetail - Methods\n\n ns.StudentDetail.prototype.createDayModel = function (reservations, schedules, dayOfWeek, dayName, resourceID, activityID) {\n return new ns.StudentDetailDay(reservations, schedules, dayOfWeek, dayName, resourceID, activityID);\n }\n\n // #endregion\n\n}(webooker_acivity_models));\n","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region StudentDetailDay - Ctor\n ns.StudentDetailDay = function StudentDetailDay(reservations, schedules, dayOfWeek, dayName, studentID, activityID) {\n this.initialize(reservations, schedules, dayOfWeek, dayName, studentID, activityID);\n }\n // #endregion\n\n // #region StudentDetailDay - Inheritance\n\n ns.StudentDetailDay.prototype = new ns.ScheduleResourceDetailDayBase();\n ns.StudentDetailDay.prototype.constructor = ns.StudentDetailDay;\n ns.StudentDetailDay.prototype.parent = ns.ScheduleResourceDetailDayBase.prototype;\n\n // #endregion\n\n\n // #region StudentDetailDay - Methods\n ns.StudentDetailDay.prototype.createReservation = function (activityScheduleID) {\n return {\n activityReservationID: 0,\n activityID: this.activityID,\n studentID: this.resourceID,\n activityScheduleID: activityScheduleID,\n firstPeriodStartDate: null,\n firstPeriodEndDate: null,\n secondPeriodStartDate: null,\n secondPeriodEndDate: null,\n lunch: false,\n fistSnack: false,\n secondSnack: false,\n notes: null\n };\n }\n\n ns.StudentDetailDay.prototype.applyChanges = function () {\n\n var hasFirstPeriod = (!!this.firstPeriodStartDate && !!this.firstPeriodEndDate);\n var hasSecondPeriod = (!!this.secondPeriodStartDate && !!this.secondPeriodEndDate);\n\n this.parent.applyChanges.call(this);\n\n if (!(hasFirstPeriod || hasSecondPeriod)) {\n this.lunchChanged = false;\n this.firstSnackChanged = false;\n this.secondSnackChanged = false;\n } else {\n if (this.lunchChanged) {\n this.applyChangesToBoolProperty(this.daySchedules, this.reservations, 'lunch', this.lunch);\n this.lunchChanged = false;\n }\n if (this.firstSnackChanged) {\n this.applyChangesToBoolProperty(this.daySchedules, this.reservations, 'firstSnack', this.firstSnack);\n this.firstSnackChanged = false;\n }\n if (this.secondSnackChanged) {\n this.applyChangesToBoolProperty(this.daySchedules, this.reservations, 'secondSnack', this.secondSnack);\n this.secondSnackChanged = false;\n }\n }\n }\n\n ns.StudentDetailDay.prototype.calculateProperties = function (schedules, reservations, dayOfWeek) {\n\n this.parent.calculateProperties.call(this, schedules, reservations, dayOfWeek);\n\n this._lunch = this.getBoolValue(this.daySchedules, this.dayReservations, 'lunch');\n this._firstSnack = this.getBoolValue(this.daySchedules, this.dayReservations, 'firstSnack');\n this._secondSnack = this.getBoolValue(this.daySchedules, this.dayReservations, 'secondSnack');\n\n this.lunchIndeterminate = this.isBoolIndeterminate(this.daySchedules, this.dayReservations, 'lunch');\n this.firstSnackIndeterminate = this.isBoolIndeterminate(this.daySchedules, this.dayReservations, 'firstSnack');\n this.secondSnackIndeterminate = this.isBoolIndeterminate(this.daySchedules, this.dayReservations, 'secondSnack');\n\n this.lunchNotScheduled = this.notScheduledProperty(this.daySchedules, 'lunch');\n this.firstSnackNotScheduled = this.notScheduledProperty(this.daySchedules, 'firstSnack');\n this.secondSnackNotScheduled = this.notScheduledProperty(this.daySchedules, 'secondSnack');\n }\n\n // #endregion\n\n // #region StudentDetailDay - Properties\n\n Object.defineProperty(ns.StudentDetailDay.prototype, \"active\", {\n get: function () { return this.parent.getActive.call(this); },\n set: function (value) {\n this.parent.setActive.call(this, value);\n if (value) {\n if (!this.lunchNotScheduled) {\n this.lunch = true;\n }\n if (!this.firstSnackNotScheduled) {\n this.firstSnack = true;\n }\n if (!this.secondSnackNotScheduled) {\n this.secondSnack = true;\n }\n } else {\n this.lunch = false;\n this.firstSnack = false;\n this.secondSnack = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.StudentDetailDay.prototype, \"amActive\", {\n get: function () { return this.parent.getAmActive.call(this); },\n\n set: function (value) {\n this.parent.setAmActive.call(this, value);\n if (value) {\n if (!this.lunchNotScheduled) {\n this.lunch = true;\n }\n if (!this.firstSnackNotScheduled) {\n this.firstSnack = true;\n }\n } else {\n this.lunch = false;\n this.firstSnack = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.StudentDetailDay.prototype, \"pmActive\", {\n get: function () { return this.parent.getPmActive.call(this); },\n\n set: function (value) {\n this.parent.setPmActive.call(this, value);\n if (value) {\n if (!this.secondSnackNotScheduled) {\n this.secondSnack = true;\n }\n } else {\n this.secondSnack = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.StudentDetailDay.prototype, \"lunch\", {\n get: function () {\n return this._lunch;\n },\n set: function (value) {\n this._lunch = value;\n this.lunchChanged = true;\n if (value !== undefined) {\n this.lunchIndeterminate = this.isBoolIndeterminate2(this.daySchedules, 'lunch', value, false);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.StudentDetailDay.prototype, \"firstSnack\", {\n get: function () {\n return this._firstSnack;\n },\n set: function (value) {\n this._firstSnack = value;\n this.firstSnackChanged = true;\n if (value !== undefined) {\n this.firstSnackIndeterminate = this.isBoolIndeterminate2(this.daySchedules, 'firstSnack', value, false);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.StudentDetailDay.prototype, \"secondSnack\", {\n get: function () {\n return this._secondSnack;\n },\n set: function (value) {\n this._secondSnack = value;\n this.secondSnackChanged = true;\n if (value !== undefined) {\n this.secondSnackIndeterminate = this.isBoolIndeterminate2(this.daySchedules, 'secondSnack', value, false);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n // #endregion\n\n\n\n}(webooker_acivity_models));\n","(function(window, document, undefined) {\n'use strict';\n// Source: wb.directives.js\nangular.module('wb.directives', ['mgcrea.ngStrap', 'pascalprecht.translate']);\n\n// Source: wbBusyIndicator.js\nangular.module('wb.directives')\n\n .directive('wbBusyIndicator', ['$tooltip', function ($tooltip) {\n return {\n restrict: 'A',\n priority: 100000,\n scope: true,\n link: function link($scope, element, attributes) {\n var oldHtml = element.html();\n var changed = false;\n var tooltipMode = false;\n var busyTooltip = null;\n $scope.tooltipTop = 100;\n $scope.$watch(attributes.wbBusyIndicator, function (val) {\n if (val) {\n if (attributes.wbBusyIndicatorOverlay) {\n\n var marginTop = Math.min(350, element.height() / 3);\n\n\n tooltipMode = true;\n var tooltipCfg = {\n trigger: 'manual',\n placement: 'top center',\n template: 'busyIndicator/templates/wb-busy-indicator.tpl.html'//,\n // target: 'body'\n };\n busyTooltip = $tooltip(element, tooltipCfg);\n busyTooltip.$promise.then(function() {\n busyTooltip.show();\n element.next().css({ 'margin-top': marginTop + 'px'});\n });\n } else {\n oldHtml = element.html();\n element.html(\"\");\n }\n changed = true;\n } else {\n if (changed) {\n if (tooltipMode) {\n busyTooltip.$promise.then(function() {\n busyTooltip.hide();\n });\n } else {\n element.html(oldHtml);\n }\n }\n }\n }, true);\n\n }\n }\n }]);\n\n// Source: wbCheckboxBitmaskEdit.js\nangular.module('wb.directives')\n .directive('wbCheckboxBitmaskEdit',\n function () {\n return {\n restrict: 'AE',\n require: 'ngModel',\n priority: 1,\n scope: {\n ngModel: '=ngModel',\n value: '='\n },\n replace: true,\n templateUrl: 'checkbox/templates/wb-checkbox-bitmask-edit.tpl.html',\n link: function (scope, element, attr, ctrl) {\n\n scope.spanChecked = 0;\n\n scope.spanClick = function ($event) {\n ctrl.$setViewValue(scope.spanChecked\n ? ctrl.$viewValue & ~scope.value\n : ctrl.$viewValue | scope.value, $event.type);\n scope.spanChecked = (ctrl.$viewValue & scope.value) > 0;\n $event.preventDefault();\n $(element).focus();\n };\n\n ctrl.$render = function () {\n scope.spanChecked = (ctrl.$viewValue & scope.value) > 0;\n };\n }\n }\n });\n\n// Source: wbCheckboxEdit.js\nangular.module('wb.directives')\n .directive('wbCheckboxEdit', \n function () {\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n scope: {\n ngModel: '=ngModel',\n indeterminate: '='\n },\n replace: true,\n templateUrl: 'checkbox/templates/wb-checkbox-edit.tpl.html',\n link: function (scope, element, attr, ctrl) {\n\n scope.spanClick = function ($event) {\n scope.spanChecked = negateValue(scope.spanChecked);\n ctrl.$setViewValue(toViewValue(scope.spanChecked), $event.type);\n $event.preventDefault();\n $(element).focus();\n }\n\n ctrl.$render = function () {\n scope.spanChecked = fromViewValue(ctrl.$viewValue);\n };\n\n function negateValue(value) {\n if (value === 0) {\n return 1;\n }\n return 0;\n\n }\n\n function toViewValue(viewValue) {\n if (viewValue === 1) {\n return true;\n } else if (viewValue === 0) {\n return false;\n } else if (viewValue === 'indeterminate') {\n return viewValue;\n } else {\n return false;\n }\n }\n\n function fromViewValue(value) {\n if (value === true || value === 'true') {\n return 1;\n } else if (value === false || value === 'false') {\n return 0;\n } else if (value === 'indeterminate') {\n return value;\n } else {\n return 0;\n }\n }\n\n scope.spanChecked = fromViewValue(ctrl.$viewValue);\n ctrl.$render(); \n }\n }\n });\n\n// Source: wbRadioEdit.js\nangular.module('wb.directives')\n .directive('wbRadioEdit',\n function () {\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n scope: {\n ngModel: '=ngModel',\n value: '='\n },\n replace: true,\n templateUrl: 'checkbox/templates/wb-radio-edit.tpl.html',\n link: function (scope, element, attr, ctrl) {\n\n scope.spanChecked = 0;\n\n scope.spanClick = function ($event) {\n ctrl.$setViewValue(scope.value, $event.type);\n scope.spanChecked = true;\n $event.preventDefault();\n $(element).focus();\n }\n\n ctrl.$render = function () {\n scope.spanChecked = ctrl.$viewValue == scope.value;\n };\n }\n }\n });\n\n// Source: l10n-cs.js\nangular.module('wb.directives')\n .config(['$translateProvider',\n function ($translateProvider) {\n $translateProvider.translations('cs', {\n TXT_TODAY: 'Dnes',\n TXT_BUSY: 'Prosím čekejte',\n TXT_LBL_START_DATE: 'Začátek',\n TXT_LBL_END_DATE: 'Konec',\n TXT_LBL_EMPLOYEE: 'Učitel',\n TXT_LBL_NAME: 'Název',\n TXT_LBL_FILLED: 'Obsazeno',\n TXT_NOTE: 'Poznámka',\n TXT_RECURRENCE_TYPE_DAILY: 'Denně',\n TXT_RECURRENCE_TYPE_WEEKLY: 'Týdně',\n TXT_RECURRENCE_TYPE_MONTHLY: 'Měsíčně',\n TXT_RECURRENCE_TYPE_YEARLY: 'Ročně',\n TXT_RECURRENCE_WEEK_DAYS_SUNDAY: 'Ne',\n TXT_RECURRENCE_WEEK_DAYS_MONDAY: 'Po',\n TXT_RECURRENCE_WEEK_DAYS_TUESDAY: 'Út',\n TXT_RECURRENCE_WEEK_DAYS_WEDNESDAY: 'St',\n TXT_RECURRENCE_WEEK_DAYS_THURSDAY: 'Čt',\n TXT_RECURRENCE_WEEK_DAYS_FRIDAY: 'Pá',\n TXT_RECURRENCE_WEEK_DAYS_SATURDAY: 'So',\n TXT_RECURRENCE_WEEK_EVERY_1: 'Opakuje se každý',\n TXT_RECURRENCE_WEEK_EVERY_2: 'Opakuje se každé',\n TXT_RECURRENCE_WEEK_EVERY_3: 'Opakuje se každých',\n TXT_RECURRENCE_WEEK_1: 'týden',\n TXT_RECURRENCE_WEEK_2: 'týdny',\n TXT_RECURRENCE_WEEK_3: 'týdnů',\n TXT_RECURRENCE_DAY_1: 'den',\n TXT_RECURRENCE_DAY_2: 'dny',\n TXT_RECURRENCE_DAY_3: 'dnů',\n TXT_RECURRENCE_WEEK_WORKDAY: 'pracovní den',\n TXT_RECURRENCE_MONTH_EVERY_1: 'Každý',\n TXT_RECURRENCE_MONTH_EVERY_2: 'Každé',\n TXT_RECURRENCE_MONTH_EVERY_3: 'Každých',\n TXT_RECURRENCE_MONTH_FROM_EVERY: 'každého',\n TXT_RECURRENCE_MONTH_MONTH: 'měsíce',\n TXT_RECURRENCE_WEEK_OF_MONTH_FIRST: 'první',\n TXT_RECURRENCE_WEEK_OF_MONTH_SECOND: 'druhý',\n TXT_RECURRENCE_WEEK_OF_MONTH_THIRD: 'třetí',\n TXT_RECURRENCE_WEEK_OF_MONTH_FOURTH: 'čtvrtý',\n TXT_RECURRENCE_WEEK_OF_MONTH_LAST: 'poslední',\n TXT_RECURRENCE_MONTH_JANUARY: 'leden',\n TXT_RECURRENCE_MONTH_FEBRUARY: 'únor',\n TXT_RECURRENCE_MONTH_MARCH: 'březen',\n TXT_RECURRENCE_MONTH_APRIL: 'duben',\n TXT_RECURRENCE_MONTH_MAY: 'květen',\n TXT_RECURRENCE_MONTH_JUNE: 'červen',\n TXT_RECURRENCE_MONTH_JULY: 'červenec',\n TXT_RECURRENCE_MONTH_AUGUST: 'srpen',\n TXT_RECURRENCE_MONTH_SEPTEMBER: 'září',\n TXT_RECURRENCE_MONTH_OCTOBER: 'říjen',\n TXT_RECURRENCE_MONTH_NOVEMBER: 'listopad',\n TXT_RECURRENCE_MONTH_DECEMBER: 'prosinec',\n TXT_RECURRENCE_IN: 'v',\n TXT_RECURRENCE_ENDS_AFTER: 'Končí po',\n TXT_RECURRENCE_ENDS_AT: 'Končí dne',\n TXT_RECURRENCE_OCCURRENCES: 'výskytech'\n }\n );\n }\n ]);\n\n// Source: l10n-de.js\nangular.module('wb.directives')\n .config(['$translateProvider',\n function ($translateProvider) {\n $translateProvider.translations('de', {\n TXT_TODAY: 'Heute',\n TXT_BUSY: 'Bitte warten',\n TXT_LBL_START_DATE: 'Anfang',\n TXT_LBL_END_DATE: 'Ende',\n TXT_LBL_EMPLOYEE: 'Lehrer',\n TXT_LBL_NAME: 'Name',\n TXT_LBL_FILLED: 'Belegt',\n TXT_NOTE: 'Notiz',\n TXT_RECURRENCE_TYPE_DAILY: 'Täglich',\n TXT_RECURRENCE_TYPE_WEEKLY: 'Wöchentlich',\n TXT_RECURRENCE_TYPE_MONTHLY: 'Monatlich',\n TXT_RECURRENCE_TYPE_YEARLY: 'Jährlich',\n TXT_RECURRENCE_WEEK_DAYS_SUNDAY: 'So',\n TXT_RECURRENCE_WEEK_DAYS_MONDAY: 'Mo',\n TXT_RECURRENCE_WEEK_DAYS_TUESDAY: 'Di',\n TXT_RECURRENCE_WEEK_DAYS_WEDNESDAY: 'Mi',\n TXT_RECURRENCE_WEEK_DAYS_THURSDAY: 'Do',\n TXT_RECURRENCE_WEEK_DAYS_FRIDAY: 'Fr',\n TXT_RECURRENCE_WEEK_DAYS_SATURDAY: 'Sa',\n TXT_RECURRENCE_WEEK_EVERY_1: 'Wiederholt sich jede',\n TXT_RECURRENCE_WEEK_EVERY_2: 'Wiederholt sich jede',\n TXT_RECURRENCE_WEEK_EVERY_3: 'Wiederholt sich jede',\n TXT_RECURRENCE_WEEK_1: 'Woche',\n TXT_RECURRENCE_WEEK_2: 'Wochen',\n TXT_RECURRENCE_WEEK_3: 'Wochen',\n TXT_RECURRENCE_DAY_1: 'Tag',\n TXT_RECURRENCE_DAY_2: 'Tage',\n TXT_RECURRENCE_DAY_3: 'Tage',\n TXT_RECURRENCE_WEEK_WORKDAY: 'Arbeitstag',\n TXT_RECURRENCE_MONTH_EVERY_1: 'Jeden',\n TXT_RECURRENCE_MONTH_EVERY_2: 'Jedes',\n TXT_RECURRENCE_MONTH_EVERY_3: 'Jede',\n TXT_RECURRENCE_MONTH_FROM_EVERY: 'jeden',\n TXT_RECURRENCE_MONTH_MONTH: 'Monat',\n TXT_RECURRENCE_WEEK_OF_MONTH_FIRST: 'erste',\n TXT_RECURRENCE_WEEK_OF_MONTH_SECOND: 'zweite',\n TXT_RECURRENCE_WEEK_OF_MONTH_THIRD: 'dritte',\n TXT_RECURRENCE_WEEK_OF_MONTH_FOURTH: 'vierte',\n TXT_RECURRENCE_WEEK_OF_MONTH_LAST: 'letzte',\n TXT_RECURRENCE_MONTH_JANUARY: 'Januar',\n TXT_RECURRENCE_MONTH_FEBRUARY: 'Februar',\n TXT_RECURRENCE_MONTH_MARCH: 'März',\n TXT_RECURRENCE_MONTH_APRIL: 'April',\n TXT_RECURRENCE_MONTH_MAY: 'Mai',\n TXT_RECURRENCE_MONTH_JUNE: 'Juni',\n TXT_RECURRENCE_MONTH_JULY: 'Juli',\n TXT_RECURRENCE_MONTH_AUGUST: 'August',\n TXT_RECURRENCE_MONTH_SEPTEMBER: 'September',\n TXT_RECURRENCE_MONTH_OCTOBER: 'Oktober',\n TXT_RECURRENCE_MONTH_NOVEMBER: 'November',\n TXT_RECURRENCE_MONTH_DECEMBER: 'Dezember',\n TXT_RECURRENCE_IN: 'in',\n TXT_RECURRENCE_ENDS_AFTER: 'Endet nach',\n TXT_RECURRENCE_ENDS_AT: 'Endet am',\n TXT_RECURRENCE_OCCURRENCES: 'Vorkommen'\n }\n );\n }\n ]);\n\n// Source: l10n-en.js\nangular.module('wb.directives')\n .config(['$translateProvider',\n function ($translateProvider) {\n $translateProvider.translations('en', {\n TXT_TODAY: 'Today',\n TXT_BUSY: 'Please wait',\n TXT_LBL_START_DATE: 'Start',\n TXT_LBL_END_DATE: 'End',\n TXT_LBL_EMPLOYEE: 'Teacher',\n TXT_LBL_NAME: 'Name',\n TXT_LBL_FILLED: 'Filled',\n TXT_NOTE: 'Note',\n TXT_RECURRENCE_TYPE_DAILY: 'Daily',\n TXT_RECURRENCE_TYPE_WEEKLY: 'Weekly',\n TXT_RECURRENCE_TYPE_MONTHLY: 'Monthly',\n TXT_RECURRENCE_TYPE_YEARLY: 'Yearly',\n TXT_RECURRENCE_WEEK_DAYS_SUNDAY: 'Su',\n TXT_RECURRENCE_WEEK_DAYS_MONDAY: 'Mo',\n TXT_RECURRENCE_WEEK_DAYS_TUESDAY: 'Tu',\n TXT_RECURRENCE_WEEK_DAYS_WEDNESDAY: 'We',\n TXT_RECURRENCE_WEEK_DAYS_THURSDAY: 'Th',\n TXT_RECURRENCE_WEEK_DAYS_FRIDAY: 'Fr',\n TXT_RECURRENCE_WEEK_DAYS_SATURDAY: 'Sa',\n TXT_RECURRENCE_WEEK_EVERY_1: 'Repeats every',\n TXT_RECURRENCE_WEEK_EVERY_2: 'Repeats every',\n TXT_RECURRENCE_WEEK_EVERY_3: 'Repeats every',\n TXT_RECURRENCE_WEEK_1: 'week',\n TXT_RECURRENCE_WEEK_2: 'weeks',\n TXT_RECURRENCE_WEEK_3: 'weeks',\n TXT_RECURRENCE_DAY_1: 'day',\n TXT_RECURRENCE_DAY_2: 'days',\n TXT_RECURRENCE_DAY_3: 'days',\n TXT_RECURRENCE_WEEK_WORKDAY: 'work day',\n TXT_RECURRENCE_MONTH_EVERY_1: 'Every',\n TXT_RECURRENCE_MONTH_EVERY_2: 'Every',\n TXT_RECURRENCE_MONTH_EVERY_3: 'Every',\n TXT_RECURRENCE_MONTH_FROM_EVERY: 'on every',\n TXT_RECURRENCE_MONTH_MONTH: 'month',\n TXT_RECURRENCE_WEEK_OF_MONTH_FIRST: 'first',\n TXT_RECURRENCE_WEEK_OF_MONTH_SECOND: 'second',\n TXT_RECURRENCE_WEEK_OF_MONTH_THIRD: 'third',\n TXT_RECURRENCE_WEEK_OF_MONTH_FOURTH: 'fourth',\n TXT_RECURRENCE_WEEK_OF_MONTH_LAST: 'last',\n TXT_RECURRENCE_MONTH_JANUARY: 'january',\n TXT_RECURRENCE_MONTH_FEBRUARY: 'february',\n TXT_RECURRENCE_MONTH_MARCH: 'march',\n TXT_RECURRENCE_MONTH_APRIL: 'april',\n TXT_RECURRENCE_MONTH_MAY: 'may',\n TXT_RECURRENCE_MONTH_JUNE: 'june',\n TXT_RECURRENCE_MONTH_JULY: 'july',\n TXT_RECURRENCE_MONTH_AUGUST: 'august',\n TXT_RECURRENCE_MONTH_SEPTEMBER: 'september',\n TXT_RECURRENCE_MONTH_OCTOBER: 'october',\n TXT_RECURRENCE_MONTH_NOVEMBER: 'november',\n TXT_RECURRENCE_MONTH_DECEMBER: 'december',\n TXT_RECURRENCE_IN: 'in',\n TXT_RECURRENCE_ENDS_AFTER: 'Ends after',\n TXT_RECURRENCE_ENDS_AT: 'Ends at',\n TXT_RECURRENCE_OCCURRENCES: 'occurrences'\n }\n );\n }\n ]);\n\n// Source: l10n-sk.js\nangular.module('wb.directives')\n .config(['$translateProvider',\n function ($translateProvider) {\n $translateProvider.translations('sk', {\n TXT_TODAY: 'Dnes',\n TXT_BUSY: 'Prosím čakajte',\n TXT_LBL_START_DATE: 'Začiatok',\n TXT_LBL_END_DATE: 'Koniec',\n TXT_LBL_EMPLOYEE: 'Učiteľ',\n TXT_LBL_NAME: 'Názov',\n TXT_LBL_FILLED: 'Obsadené',\n TXT_NOTE: 'Poznámka',\n TXT_RECURRENCE_TYPE_DAILY: 'Denne',\n TXT_RECURRENCE_TYPE_WEEKLY: 'Týždenne',\n TXT_RECURRENCE_TYPE_MONTHLY: 'Mesačne',\n TXT_RECURRENCE_TYPE_YEARLY: 'Ročne',\n TXT_RECURRENCE_WEEK_DAYS_SUNDAY: 'Ne',\n TXT_RECURRENCE_WEEK_DAYS_MONDAY: 'Po',\n TXT_RECURRENCE_WEEK_DAYS_TUESDAY: 'Ut',\n TXT_RECURRENCE_WEEK_DAYS_WEDNESDAY: 'St',\n TXT_RECURRENCE_WEEK_DAYS_THURSDAY: 'Št',\n TXT_RECURRENCE_WEEK_DAYS_FRIDAY: 'Pi',\n TXT_RECURRENCE_WEEK_DAYS_SATURDAY: 'So',\n TXT_RECURRENCE_WEEK_EVERY_1: 'Opakuje sa každý',\n TXT_RECURRENCE_WEEK_EVERY_2: 'Opakuje sa každé',\n TXT_RECURRENCE_WEEK_EVERY_3: 'Opakuje sa každých',\n TXT_RECURRENCE_WEEK_1: 'týždeň',\n TXT_RECURRENCE_WEEK_2: 'týždne',\n TXT_RECURRENCE_WEEK_3: 'týždňov',\n TXT_RECURRENCE_DAY_1: 'deň',\n TXT_RECURRENCE_DAY_2: 'dni',\n TXT_RECURRENCE_DAY_3: 'dní',\n TXT_RECURRENCE_WEEK_WORKDAY: 'pracovný deň',\n TXT_RECURRENCE_MONTH_EVERY_1: 'Každý',\n TXT_RECURRENCE_MONTH_EVERY_2: 'Každé',\n TXT_RECURRENCE_MONTH_EVERY_3: 'Každých',\n TXT_RECURRENCE_MONTH_FROM_EVERY: 'každého',\n TXT_RECURRENCE_MONTH_MONTH: 'mesiac',\n TXT_RECURRENCE_WEEK_OF_MONTH_FIRST: 'prvý',\n TXT_RECURRENCE_WEEK_OF_MONTH_SECOND: 'druhý',\n TXT_RECURRENCE_WEEK_OF_MONTH_THIRD: 'tretí',\n TXT_RECURRENCE_WEEK_OF_MONTH_FOURTH: 'štvrtý',\n TXT_RECURRENCE_WEEK_OF_MONTH_LAST: 'posledný',\n TXT_RECURRENCE_MONTH_JANUARY: 'január',\n TXT_RECURRENCE_MONTH_FEBRUARY: 'február',\n TXT_RECURRENCE_MONTH_MARCH: 'marec',\n TXT_RECURRENCE_MONTH_APRIL: 'apríl',\n TXT_RECURRENCE_MONTH_MAY: 'máj',\n TXT_RECURRENCE_MONTH_JUNE: 'jún',\n TXT_RECURRENCE_MONTH_JULY: 'júl',\n TXT_RECURRENCE_MONTH_AUGUST: 'august',\n TXT_RECURRENCE_MONTH_SEPTEMBER: 'september',\n TXT_RECURRENCE_MONTH_OCTOBER: 'október',\n TXT_RECURRENCE_MONTH_NOVEMBER: 'november',\n TXT_RECURRENCE_MONTH_DECEMBER: 'december',\n TXT_RECURRENCE_IN: 'v',\n TXT_RECURRENCE_ENDS_AFTER: 'Končí po',\n TXT_RECURRENCE_ENDS_AT: 'Končí dňa',\n TXT_RECURRENCE_OCCURRENCES: 'výskytoch'\n }\n );\n }\n ]);\n\n// Source: wbRightClick.js\nangular.module('wb.directives')\n .directive('wbRightClick', [\"$parse\", function($parse) {\n return function(scope, element, attrs) {\n var fn = $parse(attrs.wbRightClick);\n element.bind('contextmenu', function(event) {\n scope.$apply(function() {\n event.preventDefault();\n fn(scope, {$event:event});\n });\n });\n };\n }]);\n\n// Source: wbScheduler.js\nangular.module('wb.directives')\n\n .directive('wbScheduler', ['$timeout', '$dropdown', '$translate', '$rootScope', 'wbSchedulerSvc',\n function($timeout, $dropdown, $translate, $rootScope, wbSchedulerSvc) {\n// TODO: Display hourglass when there is a wait queue\n\n var defaultSettings = {\n weekView: true,\n autoHourRange: false,\n startHour: 8,\n endHour: 20,\n scale: 15,\n width: '1000px',\n noHeader: false,\n showWeekend: false,\n toolTipDelay: 800,\n toolTipTemplateUrl: 'scheduler/templates/wb-scheduler-tooltip.tpl.html',\n toolTipTrigger: 'hover',\n showRecurrence: false,\n selectedResourceID: 0,\n startDate: new Date(),\n columns: [],\n resources: [],\n rows: [],\n events: [],\n commands: [],\n selectByBlocks: 1,\n maximumSelectedBlocks: -1,\n startTimeType: -1, // 1 - CanStartAtWholeOrHalfHour, 2 - CanStartAtWholeHourOnly, 3 - CanStartAtHalfHourOnly, -1 ignore\n };\n\n return {\n restrict: 'E',\n scope: {\n sourceSettings: '=settings',\n actionClicked: '&onActionClicked',\n selectionChanged: '&onSelectionChanged'\n },\n templateUrl: 'scheduler/templates/wb-scheduler.tpl.html',\n replace: true,\n controller: [\"$scope\", function ($scope) {\n\n var commandDropdown = null; \n\n $scope.$watch('sourceSettings', function(newValue) {\n $scope.option = angular.extend({}, angular.copy(defaultSettings), newValue);\n\n wbSchedulerSvc.calculateColumns($scope.option);\n wbSchedulerSvc.calculateRows($scope.option);\n wbSchedulerSvc.calculateSizes($scope.option);\n wbSchedulerSvc.calculateEvents($scope.option);\n wbSchedulerSvc.calculateAvailability($scope.option);\n\n $scope.toolTipEnabled = true;\n }, true);\n \n $scope.isAlternateRow = function(rowIndex) {\n return wbSchedulerSvc.isAlternateRow(rowIndex, $scope.option);\n }\n \n $scope.selection = {};\n\n var isSelectable = !!$scope.sourceSettings.commands && !!$scope.sourceSettings.commands.length;\n\n var selectionStart = null;\n var selectionEnd = null;\n var inSelection = false;\n\n function clearSelection() {\n selectionStart = null;\n selectionEnd = null;\n inSelection = false;\n setSelection(selectionStart, selectionEnd);\n }\n\n function setSelection(selectionStart, selectionEnd) {\n if (!selectionStart ||\n !selectionEnd ||\n !isSelectable ||\n !$scope.sourceSettings.weekView\n ) {\n Object.keys($scope.selection).forEach(function(key) { delete $scope.selection[key]; });\n return;\n }\n\n var newSelection = {};\n\n\n var colStart;\n var colEnd;\n var rowStart;\n var rowEnd;\n\n if (selectionStart.colIndex < selectionEnd.colIndex) {\n colStart = selectionStart.colIndex;\n colEnd = selectionEnd.colIndex;\n rowStart = selectionStart.rowIndex;\n rowEnd = selectionEnd.rowIndex;\n } else if (selectionStart.colIndex === selectionEnd.colIndex) {\n colStart = selectionStart.colIndex;\n colEnd = selectionStart.colIndex;\n if (selectionStart.rowIndex < selectionEnd.rowIndex) {\n rowStart = selectionStart.rowIndex;\n rowEnd = selectionEnd.rowIndex;\n } else {\n rowStart = selectionEnd.rowIndex;\n rowEnd = selectionStart.rowIndex;\n }\n } else {\n colStart = selectionEnd.colIndex;\n colEnd = selectionStart.colIndex;\n rowStart = selectionEnd.rowIndex;\n rowEnd = selectionStart.rowIndex;\n }\n\n for (var col = colStart; col <= colEnd; col++) {\n var startRow = col === colStart\n ? rowStart\n : 0;\n var endRow = col === colEnd\n ? rowEnd\n : $scope.option.rows.length;\n\n for(var row = startRow; row <= endRow; row++) {\n newSelection[row + '-' + col] = true;\n }\n }\n\n Object.keys($scope.selection).forEach(function(key) {\n if (!newSelection[key]) {\n delete $scope.selection[key];\n }\n });\n\n Object.keys(newSelection).forEach(function(key) {\n $scope.selection[key] = true;\n });\n\n if ($scope.selectionChanged) {\n var startEndDates = wbSchedulerSvc.getStartEndDateBySelection(\n $scope.option, selectionStart, selectionEnd); \n $timeout(function() {\n $scope.selectionChanged({ selection: startEndDates });\n });\n } \n }\n\n function disposeCommandDropdown() {\n if (!!commandDropdown) {\n if (!!commandDropdown.destroy) {\n commandDropdown.destroy();\n }\n }\n\n commandDropdown = null;\n }\n\n\n function showCommandMenu($event, event, startDate, endDate) {\n disposeCommandDropdown();\n\n var commandMenu = [];\n\n angular.forEach($scope.sourceSettings.commands, function(c) {\n\n if (!$scope.sourceSettings.commands || !$scope.sourceSettings.commands.length) {\n return;\n }\n\n var isVisible = true;\n if (!!c.isVisible) {\n isVisible = c.isVisible(event, startDate, endDate);\n }\n\n if (isVisible) {\n commandMenu.push({\n text: $translate.instant(c.text),\n click:\n angular.bind(this, function(event, startDate, endDate) {\n disposeCommandDropdown();\n c.callback(event, startDate, endDate);\n }, event, startDate, endDate)\n });\n }\n });\n\n var s = $rootScope.$new(true);\n s.content = commandMenu;\n commandDropdown = $dropdown(\n angular.element($event.target),\n {\n scope: s,\n placement: 'auto bottom',\n container: 'body',\n onHide: function() {\n disposeCommandDropdown();\n }\n }\n );\n\n commandDropdown.$promise.then(function () {\n $timeout(function() {\n commandDropdown.show();\n });\n });\n }\n\n $scope.onCellMouseDown = function(rowIndex, colIndex) {\n disposeCommandDropdown();\n\n selectionStart = {rowIndex: rowIndex, colIndex: colIndex};\n selectionEnd = {\n rowIndex: rowIndex + ($scope.option.selectByBlocks - 1), \n colIndex: colIndex\n };\n\n if (wbSchedulerSvc.canSelectRegion(\n $scope.option, selectionStart, selectionEnd))\n {\n inSelection = true;\n setSelection(selectionStart, selectionEnd);\n }\n else\n {\n clearSelection();\n }\n };\n\n $scope.onCellMouseMove = function(rowIndex, colIndex) {\n if (inSelection) {\n if (Math.abs(selectionStart.rowIndex - rowIndex) > 0 &&\n ((Math.abs(selectionStart.rowIndex - rowIndex) + 1) % $scope.option.selectByBlocks) === 0)\n {\n if ($scope.option.maximumSelectedBlocks !== -1)\n {\n if (selectionStart.colIndex === colIndex &&\n Math.abs(selectionStart.rowIndex - rowIndex ) < $scope.option.maximumSelectedBlocks)\n {\n selectionEnd = { rowIndex: rowIndex, colIndex: colIndex };\n\n if (wbSchedulerSvc.canSelectRegion(\n $scope.option, selectionStart, selectionEnd))\n {\n setSelection(selectionStart, selectionEnd); \n }\n }\n }\n else\n {\n selectionEnd = {rowIndex: rowIndex, colIndex: colIndex};\n if (wbSchedulerSvc.canSelectRegion(\n $scope.option, selectionStart, selectionEnd))\n {\n setSelection(selectionStart, selectionEnd); \n }\n }\n }\n }\n };\n\n $scope.onCellMouseUp = function($event) {\n inSelection = false;\n\n if (!selectionStart || !selectionEnd) {\n return;\n }\n\n var startEndDates = wbSchedulerSvc.getStartEndDateBySelection(\n $scope.option, selectionStart, selectionEnd);\n\n var event = null;\n\n showCommandMenu($event, event, startEndDates.startDate, startEndDates.endDate);\n };\n\n var secondClickCheck = false;\n var lastClickEvent = null;\n\n $scope.onSelectEvent = function ($event, event) {\n clearSelection();\n disposeCommandDropdown();\n\n $scope.option.selectedAction = event.origAction;\n\n if (secondClickCheck) {\n if (lastClickEvent === event) {\n secondClickCheck = false;\n lastClickEvent = null;\n $scope.toolTipEnabled = false;\n $timeout(function () {\n $scope.toolTipEnabled = true;\n }, 5000);\n showCommandMenu($event, event, event.startTime, event.endTime);\n return;\n }\n }\n\n secondClickCheck = true;\n lastClickEvent = event;\n\n $timeout(function() {\n secondClickCheck = false;\n }, 800);\n\n if ($scope.actionClicked) {\n $scope.toolTipEnabled = false;\n\n $timeout(function() {\n $scope.actionClicked({ action: $scope.option.selectedAction });\n });\n\n $timeout(function() {\n $scope.toolTipEnabled = true;\n }, 5000);\n }\n\n\n };\n }]\n };\n }]);\n\n// Source: wbSchedulerDatePicker.js\nangular.module('wb.directives')\n\n.directive('wbSchedulerDatePicker', ['wbSchedulerSvc', function(wbSchedulerSvc) {\n return {\n restrict: 'E',\n scope: {\n sourceSettings: '=settings',\n dateChanged: '&onDateChanged'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-date-picker.tpl.html',\n controller: [\"$scope\", function ($scope) {\n\n $scope.onPrevBtnClick = function() {\n var interval = wbSchedulerSvc.selectPrevDate($scope.sourceSettings);\n if ($scope.dateChanged) {\n $scope.dateChanged(interval);\n }\n };\n\n $scope.onNextBtnClick = function() {\n var interval = wbSchedulerSvc.selectNextDate($scope.sourceSettings);\n if ($scope.dateChanged) {\n $scope.dateChanged(interval);\n }\n };\n\n $scope.onTodayBtnClick = function() {\n var interval = wbSchedulerSvc.selectToday($scope.sourceSettings);\n if ($scope.dateChanged) {\n $scope.dateChanged(interval);\n }\n };\n\n $scope.onDatePickerChange = function() {\n var interval = wbSchedulerSvc.fixSelectedDate($scope.sourceSettings);\n if ($scope.dateChanged) {\n $scope.dateChanged(interval);\n }\n }\n }]\n }\n}]);\n\n// Source: wbSchedulerRecurrence.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerRecurrence', ['wbSchedulerSvc', function(wbSchedulerSvc) {\n return {\n restrict: 'AE',\n require: 'ngModel',\n scope: {\n ngModel: '=ngModel'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-recurrence.tpl.html',\n link: function (scope, elm, attrs, controller) {\n\n scope.model = {};\n\n controller.$render = function () {\n scope.model = wbSchedulerSvc.mapRecurrenceDtoToModel(scope.model, controller.$viewValue);\n };\n\n scope.$watch('ngModel', function(newValue) {\n scope.model = wbSchedulerSvc.mapRecurrenceDtoToModel(scope.model, controller.$viewValue);\n }, true);\n\n scope.$watch('model', function(newValue) {\n controller.$setViewValue(wbSchedulerSvc.mapRecurrenceModelToDto(controller.$viewValue, newValue));\n }, true);\n\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceDayPeriodicity.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerRecurrenceDayPeriodicity', [function() {\n return {\n restrict: 'AE',\n require: 'ngModel',\n scope: {\n ngModel: '=ngModel'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-recurrence-day-periodicity.tpl.html',\n link: function (scope, element, attr, ngModel) {\n\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceDayWeekDays.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerRecurrenceDayWeekDays', [function() {\n return {\n restrict: 'AE',\n require: 'ngModel',\n scope: {\n ngModel: '=ngModel'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-recurrence-day-week-days.tpl.html',\n link: function (scope, element, attr, ngModel) {\n\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceMonthCombo.js\nangular.module('wb.directives')\n .directive('wbSchedulerRecurrenceMonthCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'AE',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_RECURRENCE_MONTH_JANUARY' },\n { id: 2, text: 'TXT_RECURRENCE_MONTH_FEBRUARY' },\n { id: 3, text: 'TXT_RECURRENCE_MONTH_MARCH' },\n { id: 4, text: 'TXT_RECURRENCE_MONTH_APRIL' },\n { id: 5, text: 'TXT_RECURRENCE_MONTH_MAY' },\n { id: 6, text: 'TXT_RECURRENCE_MONTH_JUNE' },\n { id: 7, text: 'TXT_RECURRENCE_MONTH_JULY' },\n { id: 8, text: 'TXT_RECURRENCE_MONTH_AUGUST' },\n { id: 9, text: 'TXT_RECURRENCE_MONTH_SEPTEMBER' },\n { id: 10, text: 'TXT_RECURRENCE_MONTH_OCTOBER' },\n { id: 11, text: 'TXT_RECURRENCE_MONTH_NOVEMBER' },\n { id: 12, text: 'TXT_RECURRENCE_MONTH_DECEMBER' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n\n }, 1);\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceMonthPeriodicity.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerRecurrenceMonthPeriodicity', [function() {\n return {\n restrict: 'AE',\n require: 'ngModel',\n scope: {\n ngModel: '=ngModel'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-recurrence-month-periodicity.tpl.html',\n link: function (scope, element, attr, ngModel) {\n\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceMonthWeekDays.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerRecurrenceMonthWeekDays', [function() {\n return {\n restrict: 'AE',\n require: 'ngModel',\n scope: {\n ngModel: '=ngModel'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-recurrence-month-week-days.tpl.html',\n link: function (scope, element, attr, ngModel) {\n\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceWeekDaysCombo.js\nangular.module('wb.directives')\n .directive('wbSchedulerRecurrenceWeekDaysCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'AE',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_RECURRENCE_WEEK_DAYS_SUNDAY' },\n { id: 2, text: 'TXT_RECURRENCE_WEEK_DAYS_MONDAY' },\n { id: 4, text: 'TXT_RECURRENCE_WEEK_DAYS_TUESDAY' },\n { id: 8, text: 'TXT_RECURRENCE_WEEK_DAYS_WEDNESDAY' },\n { id: 16, text: 'TXT_RECURRENCE_WEEK_DAYS_THURSDAY' },\n { id: 32, text: 'TXT_RECURRENCE_WEEK_DAYS_FRIDAY' },\n { id: 64, text: 'TXT_RECURRENCE_WEEK_DAYS_SATURDAY' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n\n }, 1);\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceWeekOfMonthCombo.js\nangular.module('wb.directives')\n .directive('wbSchedulerRecurrenceWeekOfMonthCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'AE',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_RECURRENCE_WEEK_OF_MONTH_FIRST' },\n { id: 2, text: 'TXT_RECURRENCE_WEEK_OF_MONTH_SECOND' },\n { id: 3, text: 'TXT_RECURRENCE_WEEK_OF_MONTH_THIRD' },\n { id: 4, text: 'TXT_RECURRENCE_WEEK_OF_MONTH_FOURTH' },\n { id: 5, text: 'TXT_RECURRENCE_WEEK_OF_MONTH_LAST' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n\n }, 1);\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceWeekPeriodicity.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerRecurrenceWeekPeriodicity', [function() {\n return {\n restrict: 'AE',\n require: 'ngModel',\n scope: {\n ngModel: '=ngModel'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-recurrence-week-periodicity.tpl.html',\n link: function (scope, element, attr, ngModel) {\n\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceWeekWeekDays.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerRecurrenceWeekWeekDays', [function() {\n return {\n restrict: 'AE',\n require: 'ngModel',\n scope: {\n ngModel: '=ngModel'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-recurrence-week-week-days.tpl.html',\n link: function (scope, element, attr, ngModel) {\n\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceYearPeriodicity.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerRecurrenceYearPeriodicity', [function() {\n return {\n restrict: 'AE',\n require: 'ngModel',\n scope: {\n ngModel: '=ngModel'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-recurrence-year-periodicity.tpl.html',\n link: function (scope, element, attr, ngModel) {\n\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceYearWeekDays.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerRecurrenceYearWeekDays', [function() {\n return {\n restrict: 'AE',\n require: 'ngModel',\n scope: {\n ngModel: '=ngModel'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-recurrence-year-week-days.tpl.html',\n link: function (scope, element, attr, ngModel) {\n\n }\n }\n }]);\n\n// Source: wbSchedulerResourceCombo.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerResourceCombo', ['$timeout', 'wbSchedulerSvc', function($timeout, wbSchedulerSvc) {\n\n function formatResult(item) {\n if (!item) { return; }\n return item.name;\n }\n\n\n return {\n restrict: 'E',\n scope: {\n sourceSettings: '=settings'\n },\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs) {\n\n var lastWeekViewValue = scope.sourceSettings.weekView;\n var lastVisibleResources = scope.sourceSettings.visibleResources;\n\n function formatSelection(item) {\n\n if (!item) {\n return '';\n }\n\n var selectedResources = wbSchedulerSvc.getSelectedResources(\n scope.sourceSettings,\n wbSchedulerSvc.getMappedResourceID(scope.sourceSettings.resourcesMapping, item));\n var caption = null;\n\n angular.forEach(selectedResources, function(item) {\n if (caption === null) {\n caption = item.name;\n } else {\n caption += ', ' + item.name;\n }\n });\n\n return caption || '';\n }\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n id: function(resource) { return wbSchedulerSvc.getMappedResourceID(scope.sourceSettings.resourcesMapping, resource); },\n data: scope.sourceSettings.resources\n });\n\n elm.on('change', function (event) {\n scope.$apply(function () {\n scope.sourceSettings.selectedResourceID = parseInt(event.val || '0');\n });\n });\n\n scope.$watch('sourceSettings', function(newValue) {\n var currentVal = parseInt($(elm).select2('val') || '0');\n\n var validResourceID = wbSchedulerSvc.getValidSelectedResourceID(newValue, newValue.selectedResourceID);\n\n if (validResourceID !== currentVal ||\n lastWeekViewValue !== scope.sourceSettings.weekView ||\n lastVisibleResources !== scope.sourceSettings.visibleResources) {\n\n lastWeekViewValue = scope.sourceSettings.weekView;\n lastVisibleResources = scope.sourceSettings.visibleResources;\n\n scope.sourceSettings.selectedResourceID =\n !validResourceID ? 0 : validResourceID;\n\n $(elm).select2('val',\n !validResourceID ? '0' : validResourceID + '');\n }\n }, true);\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n });\n\n }\n }\n }]);\n\n// Source: wbSchedulerSvc.js\nangular.module('wb.directives')\n\n.factory('wbSchedulerSvc', ['$filter',\n function($filter) {\nfunction findColumn(settings, event) {\n var startDay = moment(event.startDate).startOf('day');\n for (var c = 0; c < settings.columns.length; c++) {\n var column = settings.columns[c];\n if (moment(column.date).isSame(startDay)) {\n if (event.resourceID == column.resourceID) {\n return c;\n }\n }\n }\n\n return -1;\n }\n\n function calcStartTime(settings, startHour, startMinute, startDate, columnDate) {\n var min = 0;\n var res = (startHour * (60 / settings.scale)) + (startMinute / settings.scale);\n if (min > res) {\n return {\n startTime: min,\n startOverflow: true,\n startOverflowDay: moment(startDate).startOf('day').isBefore(moment(columnDate).startOf('day'))\n };\n } else {\n return {\n startTime: res,\n startOverflow: false,\n startOverflowDay: false\n };\n }\n }\n\n function calcEndTime(settings, endHour, endMinute, endDate, columnDate) {\n var max = (60 / settings.scale) * (settings.endHour - settings.startHour);\n var res = (endHour * (60 / settings.scale)) + (endMinute / settings.scale);\n if (max < res) {\n return {\n endTime: max,\n endOverflow: true,\n endOverflowDay: moment(endDate).startOf('day').isAfter(moment(columnDate).startOf('day'))\n };\n } else {\n return {\n endTime: res,\n endOverflow: false,\n endOverflowDay: false\n };\n }\n }\n\n function limitEvents(settings, event, events) {\n var column = findColumn(settings, event);\n if (column === -1) {\n return;\n }\n\n var mStartDate = moment(event.startDate);\n var mEndDate = moment(event.endDate);\n\n var startHour = mStartDate.hour() - settings.startHour;\n var startMinute = mStartDate.minute();\n\n var endHour = mEndDate.hour() - settings.startHour;\n var endMinute = mEndDate.minute();\n\n // Event ends earlier that the displayed min time\n if (endHour < 0 || (endHour === 0 && endMinute === 0)) {\n return;\n }\n\n // Event starts later than the displayed max time\n if (startHour >= (settings.endHour - settings.startHour)) {\n return;\n }\n\n event.startHour = startHour;\n event.startMinute = startMinute;\n event.endHour = endHour;\n event.endMinute = endMinute;\n event.column = column;\n\n events.push(event);\n }\n\n // removes actions which are outside of boundaries and should not influence layout\n // also breaks longer events by day\n function preFilterActions(settings, actions) {\n var result = [];\n\n angular.forEach(actions, function(action) {\n var mStartDate = moment(action.startDate);\n var mEndDate = moment(action.endDate);\n\n if (mStartDate.isAfter(mEndDate)) {\n return; // Invalid event\n }\n\n var mStartDateStartOfDay = moment(action.startDate).startOf('day');\n var mEndDateStartOfDay = moment(action.endDate).startOf('day');\n\n var mCurrentStartDate = moment(action.startDate);\n var mCurrentEndDate = moment(action.endDate);\n\n while(true) {\n\n var mCurrentStartDateStartOfDay = moment(mCurrentStartDate).startOf('day');\n\n if (mCurrentStartDateStartOfDay.isAfter(mStartDateStartOfDay)) {\n mCurrentStartDate = mCurrentStartDateStartOfDay;\n }\n\n if (mCurrentStartDateStartOfDay.isBefore(mEndDateStartOfDay)) {\n mCurrentEndDate = moment(mCurrentStartDate).endOf('day');\n } else {\n mCurrentEndDate = moment(mCurrentStartDateStartOfDay);\n mCurrentEndDate.set('hour', mEndDate.get('hour'));\n mCurrentEndDate.set('minute', mEndDate.get('minute'));\n mCurrentEndDate.set('second', mEndDate.get('second'));\n }\n\n var resourceID = action[getResourceIDPropertyName(settings.actionsMapping)];\n\n var event = {\n startDate: mCurrentStartDate.toDate(),\n endDate: mCurrentEndDate.toDate(),\n resourceID: resourceID,\n origAction: action\n };\n\n limitEvents(settings, event, result);\n\n if (mEndDateStartOfDay.isSame(mCurrentStartDateStartOfDay)) {\n break;\n }\n\n mCurrentStartDate.add(1, 'days').startOf('day');\n }\n });\n\n return _.sortBy(result, function(action) { return (action.column * 1000) + (action.startHour * 60) + action.startMinute; } );\n }\n\n function detectOverlaps(settings) {\n var group = [];\n if (settings.events.length > 1) {\n for (var e = 1; e < settings.events.length; e++) {\n var lastEvent = settings.events[e - 1];\n var event = settings.events[e];\n if (event.start < lastEvent.end && event.column === lastEvent.column) {\n if (group.length === 0) {\n group.push(lastEvent);\n group.push(event);\n } else {\n group.push(event);\n }\n } else {\n if (group.length > 1) {\n for(var g = 0; g < group.length; g++) {\n var element = group[g];\n element.noOfSubColumns = group.length;\n element.subColumn = g;\n }\n group = [];\n }\n }\n }\n }\n\n if (group.length > 1) {\n angular.forEach(group, function(element, index) {\n element.noOfSubColumns = group.length;\n element.subColumn = index;\n });\n }\n }\n\n function calculateEventsImpl(settings, actions) {\n\n var filteredActions = preFilterActions(settings, actions);\n\n angular.forEach(filteredActions, function(action) {\n var startFix = calcStartTime(settings, action.startHour, action.startMinute,\n action.origAction.startDate, settings.columns[action.column].date);\n var endFix = calcEndTime(settings, action.endHour, action.endMinute,\n action.origAction.endDate, settings.columns[action.column].date);\n\n var event = {\n column: action.column,\n noOfSubColumns: 1,\n subColumn: 0,\n start: startFix.startTime,\n startOverflow: startFix.startOverflow,\n startOverflowDay: startFix.startOverflowDay,\n end: endFix.endTime,\n endOverflow: endFix.endOverflow,\n endOverflowDay: endFix.endOverflowDay,\n name: action.origAction[getMappedPropertyName(settings.actionsMapping, 'name')],\n status: action.origAction.status || 1,\n type: action.origAction.type || 1,\n startTime: action.origAction.startDate,\n endTime: action.origAction.endDate,\n teacher: action.origAction[getMappedPropertyName(settings.actionsMapping, 'teacher')],\n filled: action.origAction[getMappedPropertyName(settings.actionsMapping, 'filled')],\n showWaitQueue: action.origAction.showWaitQueue,\n showActionNote: action.origAction.showActionNote,\n origAction: action.origAction,\n notes: action.origAction[getMappedPropertyName(settings.actionsMapping, 'notes')],\n recurrenceType: action.origAction[getMappedPropertyName(settings.actionsMapping, 'recurrenceType')]\n };\n settings.events.push(event);\n });\n\n detectOverlaps(settings);\n }\n\n function calculateEvents(settings) {\n calculateEventsImpl(settings, settings.actions);\n }\n\n function selectPrevDate(settings) {\n var ret = {\n startDate: settings.startDate,\n endDate: settings.startDate\n };\n\n if (settings.weekView) {\n settings.startDate = moment(settings.startDate)\n .startOf('isoWeek')\n .add(-7, 'd')\n .toDate();\n\n ret.startDate = settings.startDate;\n ret.endDate = moment(settings.startDate).add(7, 'd').toDate();\n } else {\n settings.startDate = moment(settings.startDate)\n .startOf('day')\n .add(-1, 'd')\n .toDate();\n ret.startDate = settings.startDate;\n ret.endDate = moment(settings.startDate).add(1, 'd').toDate();\n }\n\n return ret;\n }\n\n function selectNextDate(settings) {\n var ret = {\n startDate: settings.startDate,\n endDate: settings.startDate\n };\n\n if (settings.weekView) {\n settings.startDate = moment(settings.startDate)\n .startOf('isoWeek')\n .add(7, 'd')\n .toDate();\n\n ret.startDate = settings.startDate;\n ret.endDate = moment(settings.startDate).add(7, 'd').toDate();\n } else {\n settings.startDate = moment(settings.startDate)\n .startOf('day')\n .add(1, 'd')\n .toDate();\n ret.startDate = settings.startDate;\n ret.endDate = moment(settings.startDate).add(1, 'd').toDate();\n }\n\n return ret;\n }\n\n function selectToday(settings) {\n var ret = {\n startDate: settings.startDate,\n endDate: settings.startDate\n };\n\n if (settings.weekView) {\n settings.startDate = moment()\n .startOf('isoWeek')\n .toDate();\n\n ret.startDate = settings.startDate;\n ret.endDate = moment(settings.startDate).add(7, 'd').toDate();\n } else {\n settings.startDate = moment().startOf('day').toDate();\n ret.startDate = settings.startDate;\n ret.endDate = moment(settings.startDate).add(1, 'd').toDate();\n }\n\n return ret;\n }\n\n function fixSelectedDate(settings) {\n var ret = {\n startDate: settings.startDate,\n endDate: settings.startDate\n };\n\n if (settings.weekView) {\n var shouldBeSelected = moment(settings.startDate).startOf('isoweek');\n var isSelected = moment(settings.startDate);\n\n if (!shouldBeSelected.isSame(isSelected)) {\n settings.startDate = shouldBeSelected.toDate();\n }\n\n ret.startDate = settings.startDate;\n ret.endDate = moment(settings.startDate).add(7, 'd').toDate();\n } else {\n ret.endDate = moment(settings.startDate).add(1, 'd').toDate();\n }\n\n return ret;\n }\n\n function shouldShowWeekend(settings, selectedResources, startDate) {\n\n var saturdayStartDay = startDate.clone().isoWeekday(6).startOf('day');\n var sundayEndDay = startDate.clone().isoWeekday(7).endOf('day');\n\n for (var a = 0; a < settings.actions.length; a++) {\n var action = settings.actions[a];\n\n var actionStartDate = moment(action.startDate);\n var actionEndDate = moment(action.endDate);\n\n if (actionStartDate.isBefore(sundayEndDay) && actionEndDate.isAfter(saturdayStartDay)) {\n\n if (_.find(selectedResources, function(resource) {\n var actionResourceID = action[getMappedPropertyName(settings.actionsMapping, 'resourceID')];\n var resourceResourceID = resource[getMappedPropertyName(settings.recourcesMapping, 'resourceID')];\n return actionResourceID == resourceResourceID;\n } ))\n {\n return true;\n }\n }\n }\n\n return false;\n }\n\n function getMappedPropertyName(mapping, defaultPropertyName) {\n if (mapping && mapping[defaultPropertyName]) {\n return mapping[defaultPropertyName];\n }\n return defaultPropertyName;\n }\n\n function getResourceIDPropertyName(resourcesMapping) {\n return getMappedPropertyName(resourcesMapping, 'resourceID');\n }\n\n function getMappedResourceID(resourcesMapping, model) {\n if (resourcesMapping && resourcesMapping.resourceID) {\n return model[resourcesMapping.resourceID];\n }\n return model.resourceID;\n }\n\n function getSelectedResourceIDStartIndex(settings, selectedResourceID) {\n var findSettings = {};\n findSettings[getResourceIDPropertyName(settings.resourcesMapping)] = selectedResourceID;\n var resourceStartIdx = selectedResourceID\n ? _.findIndex(settings.resources, findSettings)\n : 0;\n if (resourceStartIdx < 0) {\n resourceStartIdx = 0;\n }\n\n return resourceStartIdx;\n }\n\n function getValidSelectedResourceID(settings, selectedResourceID) {\n if (settings.resources.length) {\n var resourceStartIdx = getSelectedResourceIDStartIndex(settings, selectedResourceID);\n return settings.resources[resourceStartIdx][getResourceIDPropertyName(settings.resourcesMapping)];\n } else {\n return selectedResourceID;\n }\n }\n\n function getSelectedResources(settings, selectedResourceID) {\n var resources = [];\n\n var resourcesLimit;\n\n var resourceStartIdx = getSelectedResourceIDStartIndex(settings, selectedResourceID);\n\n if (settings.weekView) {\n resourcesLimit = 1;\n } else {\n resourcesLimit = Math.min(settings.visibleResources, settings.resources.length) || 1;\n }\n\n for (var r = 0; r < resourcesLimit; r++) {\n var idx = resourceStartIdx + r;\n if (settings.resources.length !== 0) {\n var res = settings.resources[idx % settings.resources.length];\n resources.push({\n name: res.name,\n resourceID: res[getResourceIDPropertyName(settings.resourcesMapping)],\n origResource: res\n });\n } else {\n var emptyResource = { name: '', origResource: null };\n emptyResource[getResourceIDPropertyName(settings.resourcesMapping)] = 0;\n resources.push(emptyResource);\n }\n }\n\n return resources;\n }\n\n function calculateColumns(settings) {\n\n var today = moment().startOf('day');\n settings.todayIndex = -1;\n\n var daysLimit, startDate;\n\n var selectedResources = getSelectedResources(settings, settings.selectedResourceID);\n\n if (settings.weekView) {\n startDate = moment(settings.startDate).startOf('isoWeek');\n daysLimit = settings.showWeekend || shouldShowWeekend(settings, selectedResources, startDate) ? 7 : 5;\n } else {\n daysLimit = 1;\n startDate = moment(settings.startDate).startOf('day');\n }\n\n for (var d = 0; d < daysLimit; d++) {\n if (today.isSame(startDate)) {\n settings.todayIndex = d;\n }\n var clonedDate = startDate.clone().toDate();\n\n for (var r = 0; r < selectedResources.length; r++) {\n var resource = selectedResources[r];\n\n settings.columns.push({\n date: clonedDate,\n resourceID: resource.resourceID,\n resourceName: resource.name,\n caption: settings.weekView\n ? $filter('date')(clonedDate, 'EEE d. MMM')\n : resource.name\n });\n }\n startDate.add(1, 'days');\n }\n }\n\n function canSelectRegion(settings, selectionStart, selectionEnd)\n {\n if (!settings.availability) {\n return true;\n }\n\n var reverse = (selectionStart.colIndex > selectionEnd.colIndex) ||\n (selectionStart.colIndex == selectionEnd.colIndex &&\n selectionStart.rowIndex > selectionEnd.rowIndex);\n\n var startRowIdx = reverse\n ? selectionEnd.rowIndex\n : selectionStart.rowIndex;\n var startCol = reverse\n ? selectionEnd.colIndex\n : selectionStart.colIndex;\n\n var endRowIdx = reverse\n ? selectionStart.rowIndex\n : selectionEnd.rowIndex;\n\n var endCol = reverse\n ? selectionStart.colIndex\n : selectionEnd.colIndex; \n \n var origStartRowIdx = startRowIdx;\n\n while(startCol <= endCol)\n {\n if (startCol >= settings.columns.length) {\n break;\n }\n\n endRowIdx = startCol < endCol\n ? settings.rows.length\n : selectionEnd.rowIndex;\n\n while(startRowIdx <= endRowIdx) \n {\n if (!settings.availabilityObj[startRowIdx + '-' + startCol]) {\n return false;\n }\n\n startRowIdx = startRowIdx + 1;\n }\n\n startCol = startCol + 1;\n startRowIdx = 0;\n }\n\n var divider = 15;\n switch(settings.scale)\n {\n case 15:\n divider = 2;\n break;\n case 30:\n divider = 1;\n break;\n }\n \n switch(settings.startTimeType) {\n case 1: // CanStartAtWholeOrHalfHour\n if ((origStartRowIdx % divider) !== 0) {\n return false;\n }\n break;\n case 2: // CanStartAtWholeHourOnly\n if (origStartRowIdx % (2 * divider) !== 0) {\n return false;\n }\n break;\n case 3: // CanStartAtHalfHourOnly\n if (origStartRowIdx % (2 * divider) !== divider) {\n return false;\n }\n break;\n case 4: // CanStartAtSelectByBlocksConsecutive \n if ((origStartRowIdx % settings.selectByBlocks) !== 0) {\n return false;\n }\n break;\n }\n\n return true;\n }\n \n function isAlternateRow(rowIndex, settings) {\n var divider = 15;\n switch(settings.scale)\n {\n case 15:\n divider = 2;\n break;\n case 30:\n divider = 1;\n break;\n }\n\n switch(settings.startTimeType)\n {\n case 1: // CanStartAtWholeOrHalfHour\n return ~~(rowIndex/divider) % 2;\n case 2: // CanStartAtWholeHourOnly\n return ~~(rowIndex/(2 * divider)) % 2;\n case 3: // CanStartAtHalfHourOnly\n return ~~((rowIndex + divider)/(2 * divider)) % 2;\n case 4: // CanStartAtSelectByBlocksConsecutive\n return ~~(rowIndex/settings.selectByBlocks) % 2;\n default:\n return false;\n } \n }\n\n function calculateAvailability(settings) {\n \n settings.availabilityObj = {};\n var startDate;\n\n if (settings.weekView) {\n startDate = moment(settings.startDate).startOf('isoWeek');\n } else {\n startDate = moment(settings.startDate).startOf('day');\n }\n\n _.forEach(settings.availability || [], function(a) {\n var a_startDate = moment(a.start);\n var a_endDate = moment(a.end);\n var colIndex = a_startDate.diff(startDate, 'days');\n\n var startDateOffset = moment(a_startDate).subtract(settings.startHour, 'hours');\n var startIndex = \n (startDateOffset.hour() * settings.noOfSubRows) +\n (startDateOffset.minute() / settings.scale);\n\n var endDateOffset = moment(a_endDate).subtract(settings.startHour, 'hours');\n var endIndex = \n (endDateOffset.hour() * settings.noOfSubRows) +\n (endDateOffset.minute() / settings.scale); \n\n for(var i = startIndex; i < endIndex; i++) \n {\n settings.availabilityObj[i + '-' + colIndex] = true;\n }\n }); \n }\n\n function colIndexToDate(settings, colIndex) {\n return settings.columns[colIndex].date;\n }\n\n function rowIndexToTime(settings, rowIndex, isStartTime) {\n var row = settings.rows[rowIndex];\n if (isStartTime) {\n return {\n hour: row.hour,\n minute: row.subIndex * (60 / settings.noOfSubRows)\n }\n } else {\n return {\n hour: row.hour,\n minute: (row.subIndex + 1) * (60 / settings.noOfSubRows)\n }\n }\n }\n\n function getDateByRowAndColIndex(settings, colIndex, rowIndex, isStartTime) {\n var date = colIndexToDate(settings, colIndex);\n var hour = rowIndexToTime(settings, rowIndex, isStartTime);\n\n return moment(date).startOf('day').add(hour.hour, 'h').add(hour.minute, 'm').toDate();\n }\n\n function getStartEndDateBySelection(settings, selectionStart, selectionEnd) {\n\n if (selectionStart.colIndex < selectionEnd.colIndex ||\n (selectionStart.colIndex === selectionEnd.colIndex &&\n selectionStart.rowIndex < selectionEnd.rowIndex)) {\n\n return {\n startDate: getDateByRowAndColIndex(\n settings, selectionStart.colIndex, selectionStart.rowIndex, true),\n endDate: getDateByRowAndColIndex(\n settings, selectionEnd.colIndex, selectionEnd.rowIndex, false)\n };\n } else {\n return {\n startDate: getDateByRowAndColIndex(\n settings, selectionEnd.colIndex, selectionEnd.rowIndex, true),\n endDate: getDateByRowAndColIndex(\n settings, selectionStart.colIndex, selectionStart.rowIndex, false)\n };\n }\n }\n\n function calcStartEndHours(settings) {\n\n var visibleStartDateActions = [];\n var visibleEndDateActions = [];\n var startHour = settings.startHour || 8;\n var endHour = settings.endHour || 20;\n\n for (var a = 0; a < settings.actions.length; a++) {\n var action = settings.actions[a];\n\n var actionStartDate = moment(action.startDate);\n var actionEndDate = moment(action.endDate);\n\n var actionStartDateDay = actionStartDate.clone().startOf('day');\n var actionEndDateDay = actionEndDate.clone().startOf('day');\n\n // Find if this action should be displayed\n for(var c = 0; c < settings.columns.length; c++) {\n var column = settings.columns[c];\n\n var columnDate = moment(column.date);\n\n var actionResourceID = action[getMappedPropertyName(settings.actionsMapping, 'resourceID')];\n\n if (actionResourceID == column.resourceID) {\n if (columnDate.isSame(actionStartDateDay)) {\n visibleStartDateActions.push(action);\n }\n if (columnDate.isSame(actionEndDateDay)) {\n visibleEndDateActions.push(action);\n }\n }\n\n }\n }\n\n var lowerBound;\n var upperBound;\n\n if (visibleStartDateActions.length > 0) {\n var startDateSorted = _.sortBy(visibleStartDateActions, function(action) { return moment(action.startDate).hour() * 60 + moment(action.startDate).minute(); } );\n lowerBound = moment(startDateSorted[0].startDate);\n upperBound = moment(startDateSorted[startDateSorted.length - 1].startDate);\n\n if (settings.autoHourRange) {\n startHour = lowerBound.hour();\n } else {\n if (startHour > lowerBound.hour()) {\n startHour = lowerBound.hour();\n }\n\n if (endHour < upperBound.hour()) {\n endHour = upperBound.hour();\n if (upperBound.minute() > 0) {\n endHour += 1;\n }\n }\n }\n }\n\n if (visibleEndDateActions.length > 0) {\n var endDateSorted = _.sortBy(visibleEndDateActions, function(action) { return moment(action.endDate).hour() * 60 + moment(action.endDate).minute(); } );\n lowerBound = moment(endDateSorted[0].endDate);\n upperBound = moment(endDateSorted[endDateSorted.length - 1].endDate);\n\n if (settings.autoHourRange) {\n endHour = upperBound.hour();\n if (upperBound.minute() > 0) {\n endHour += 1;\n }\n } else {\n if (endHour < upperBound.hour()) {\n endHour = upperBound.hour();\n if (upperBound.minute() > 0) {\n endHour += 1;\n }\n }\n\n if (startHour > lowerBound.hour()) {\n startHour = lowerBound.hour();\n }\n }\n }\n\n if (settings.autoHourRange && (endHour - startHour) < 3) {\n endHour = startHour + 3;\n }\n\n if (settings.autoHourRange && !visibleStartDateActions.length && !visibleEndDateActions.length) {\n endHour = startHour + 3;\n }\n\n return {\n startHour: startHour,\n endHour: endHour\n }\n }\n\n function calculateRows(settings) {\n var noOfSubRows = Math.ceil(60.0 / settings.scale);\n\n settings.noOfSubRows = noOfSubRows;\n\n var startEndHours = calcStartEndHours(settings);\n settings.startHour = startEndHours.startHour;\n settings.endHour = startEndHours.endHour;\n\n for(var h = settings.startHour; h < settings.endHour; h++) {\n for (var s = 0; s < noOfSubRows; s++) {\n settings.rows.push({\n firstRow: s === 0,\n lastRow: s === (noOfSubRows - 1),\n subIndex: s,\n hour: h\n });\n }\n }\n }\n\n function calculateSizes(settings) {\n settings.columnWidth = 100 / settings.columns.length;\n settings.rowHeigh = 100 / settings.rows.length;\n }\n\n //scope.model = {\n // recurrenceType: 1,\n // weekPeriodicity: 1,\n // weekWeekDays: 0,\n // dayPeriodicity: 1,\n // dayWeekDays: 0,\n // monthRecurrenceType: 0,\n // monthDayNumber: 1,\n // monthPeriodicity0: 1,\n // monthPeriodicity1: 1,\n // monthWeekDays: 1,\n // monthWeekOfMonth: 1,\n // yearRecurrenceType: 0,\n // yearDayNumber: 1,\n // yearMonth0: 1,\n // yearMonth1: 1,\n // yearWeekOfMonth: 1,\n // yearWeekDays: 1\n //};\n\n //enum WeekOfMonth\n //{\n // None = 0,\n // First = 1,\n // Second = 2,\n // Third = 3,\n // Fourth = 4,\n // Last = 5\n //}\n\n function dateToWeekDays(date) {\n switch(moment(date).day()) {\n case 0:\n return 1;\n case 1:\n return 2;\n case 2:\n return 4;\n case 3:\n return 8;\n case 4:\n return 16;\n case 5:\n return 32;\n case 6:\n return 64;\n }\n\n return 0;\n }\n\n function mapRecurrenceDtoToModel(model, dto) {\n\n model.recurrenceType = dto.type;\n model.range = dto.range;\n model.occurrenceCount = dto.occurrenceCount || 10;\n model.start = dto.start || moment().toDate();\n model.end = dto.end || moment(model.start).add(3, 'month').toDate();\n\n // RecurrenceType.Daily === 0\n\n if (model.recurrenceType === 0) {\n model.dayWeekDays = dto.weekDays === 62 ? 62 : 0;\n model.dayPeriodicity = dto.periodicity || 1;\n } else {\n model.dayWeekDays = 0;\n model.dayPeriodicity = 1;\n }\n\n // RecurrenceType.Weekly === 1\n model.weekPeriodicity = dto.periodicity || 1;\n if (model.recurrenceType === 1) {\n model.weekWeekDays = dto.weekDays || dateToWeekDays(model.start);\n } else {\n model.weekWeekDays = dateToWeekDays(model.start);\n }\n\n // RecurrenceType.Monthly === 2\n model.monthRecurrenceType = !dto.weekOfMonth ? 0 : 1;\n model.monthDayNumber = dto.dayNumber || 1;\n model.monthWeekOfMonth = dto.weekOfMonth || 1;\n if (model.recurrenceType === 2) {\n model.monthPeriodicity0 = dto.periodicity || 1;\n model.monthPeriodicity1 = dto.periodicity || 1;\n model.monthWeekDays = dto.weekDays || dateToWeekDays(model.start);\n } else {\n model.monthPeriodicity0 = 1;\n model.monthPeriodicity1 = 1;\n model.monthWeekDays = dateToWeekDays(model.start);\n }\n\n // RecurrenceType.Yearly === 3\n model.yearRecurrenceType = !dto.weekOfMonth ? 0 : 1;\n model.yearWeekOfMonth = dto.weekOfMonth || 1;\n model.yearMonth0 = dto.month || 1;\n model.yearMonth1 = dto.month || 1;\n if (model.recurrenceType === 3) {\n model.yearWeekDays = dto.weekDays || dateToWeekDays(model.start);\n model.yearDayNumber = dto.dayNumber || 1;\n } else {\n model.yearWeekDays = dateToWeekDays(model.start);\n model.yearDayNumber = 1;\n }\n\n return model;\n }\n\n\n function mapRecurrenceModelToDto(dto, model) {\n // Clean up\n Object.keys(dto).forEach(function(key) { delete dto[key]; });\n\n dto.type = model.recurrenceType;\n dto.range = model.range;\n dto.start = model.start;\n if (model.range == 1) {\n dto.occurrenceCount = model.occurrenceCount;\n } else {\n dto.end = model.end;\n }\n\n if (model.recurrenceType === 0) {\n if (model.dayPeriodicity !== 1) {\n dto.periodicity = model.dayPeriodicity;\n }\n if (model.dayWeekDays) {\n dto.weekDays = model.dayWeekDays;\n }\n } else if (model.recurrenceType === 1) {\n dto.periodicity = model.weekPeriodicity;\n dto.weekDays = model.weekWeekDays;\n } else if (model.recurrenceType === 2) {\n if (model.monthRecurrenceType === 0) {\n dto.weekOfMonth = 0;\n dto.dayNumber = model.monthDayNumber;\n if (model.monthPeriodicity0 !== 1) {\n dto.periodicity = model.monthPeriodicity0;\n }\n } else {\n dto.weekOfMonth = model.monthWeekOfMonth;\n dto.weekDays = model.monthWeekDays;\n if (model.monthPeriodicity1 !== 1) {\n dto.periodicity = model.monthPeriodicity1;\n }\n }\n } else if (model.recurrenceType === 3) {\n if (model.yearRecurrenceType === 0) {\n dto.weekOfMonth = 0;\n dto.month = model.yearMonth0;\n dto.dayNumber = model.yearDayNumber;\n } else {\n dto.weekDays = model.yearWeekDays;\n dto.weekOfMonth = model.yearWeekOfMonth;\n dto.month = model.yearMonth1;\n }\n dto.periodicity = 1;\n }\n\n return dto;\n }\n\n return {\n calculateEvents: calculateEvents,\n selectPrevDate: selectPrevDate,\n selectNextDate: selectNextDate,\n selectToday: selectToday,\n fixSelectedDate: fixSelectedDate,\n calculateColumns: calculateColumns,\n getSelectedResources: getSelectedResources,\n calculateRows: calculateRows,\n calculateSizes: calculateSizes,\n getMappedResourceID: getMappedResourceID,\n getValidSelectedResourceID: getValidSelectedResourceID,\n mapRecurrenceDtoToModel: mapRecurrenceDtoToModel,\n mapRecurrenceModelToDto: mapRecurrenceModelToDto,\n getStartEndDateBySelection: getStartEndDateBySelection,\n calculateAvailability: calculateAvailability,\n canSelectRegion: canSelectRegion,\n isAlternateRow: isAlternateRow\n };\n}]);\n\n// Source: wbSplitter.js\nangular.module('wb.directives')\r\n\r\n .directive('wbSplitter', ['$compile', function ($compile) {\r\n return {\r\n restrict: 'EA',\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n orientation: '@'\r\n },\r\n template: '
',\r\n controller: ['$scope', function ($scope) {\r\n $scope.panes = [];\r\n\r\n this.addPane = function (pane) {\r\n if ($scope.panes.length > 1)\r\n throw 'splitters can only have two panes';\r\n $scope.panes.push(pane);\r\n return $scope.panes.length;\r\n };\r\n }],\r\n link: function (scope, element, attrs, ctrl, transclude) {\r\n var handler = angular.element(\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
');\r\n\r\n transclude(scope.$parent, function (clone, scope) {\r\n element.append(clone);\r\n });\r\n\r\n var pane1 = scope.panes[0];\r\n var pane2 = scope.panes[1];\r\n var vertical = scope.orientation == 'vertical';\r\n var pane1Min = pane1.minSize || 0;\r\n var pane2Min = pane2.minSize || 8;\r\n var pane2Size = pane2.initSize || 100;\r\n var drag = false;\r\n var topHeight;\r\n var lastSize = 0;\r\n scope.minified = false;\r\n\r\n //scope.style1 = { height: '100px', width: '100px'};\r\n\r\n pane1.elem.after($compile(handler)(scope));\r\n\r\n var h = element[0].getBoundingClientRect().height;\r\n setPosition(h - pane2Size, h);\r\n\r\n element.bind('mousemove', function (ev) {\r\n if (!drag) return;\r\n\r\n var bounds = element[0].getBoundingClientRect();\r\n var pos = 0;\r\n\r\n if (vertical) {\r\n\r\n var height = bounds.bottom - bounds.top;\r\n pos = ev.clientY - bounds.top;\r\n\r\n if (pos < pane1Min) return;\r\n if (height - pos < pane2Min) return;\r\n\r\n setPosition(pos, height);\r\n\r\n } else {\r\n\r\n var width = bounds.right - bounds.left;\r\n pos = ev.clientX - bounds.left;\r\n\r\n if (pos < pane1Min) return;\r\n if (width - pos < pane2Min) return;\r\n\r\n handler.css('left', pos + 'px');\r\n pane1.elem.css('width', pos + 'px');\r\n pane2.elem.css('left', pos + 'px');\r\n }\r\n });\r\n\r\n handler.bind('mousedown', function (ev) {\r\n ev.preventDefault();\r\n drag = true;\r\n });\r\n\r\n angular.element(document).bind('mouseup', function (ev) {\r\n drag = false;\r\n });\r\n\r\n scope.onMinimizeUp = function () {\r\n var bounds = element[0].getBoundingClientRect();\r\n\r\n if (vertical) {\r\n var pos = lastSize;\r\n var height = bounds.bottom - bounds.top;\r\n\r\n setPosition(pos, height);\r\n }\r\n }\r\n\r\n scope.onMinimizeDown = function () {\r\n var bounds = element[0].getBoundingClientRect();\r\n var pos = 0;\r\n\r\n if (vertical) {\r\n var height = bounds.bottom - bounds.top;\r\n pos = height - handler.height();\r\n\r\n lastSize = pane1.elem.height();\r\n\r\n setPosition(pos, height);\r\n }\r\n }\r\n\r\n function setPosition(pos, height) {\r\n\r\n handler.css('top', pos + 'px');\r\n pane1.elem.css('height', pos + 'px');\r\n pane2.elem.css('top', pos + 'px');\r\n\r\n if (topHeight !== pos) {\r\n topHeight = pos;\r\n $(element).resize();\r\n\r\n scope.$parent.$broadcast('splitter-pane-resized');\r\n }\r\n\r\n if (pos >= (height - handler.height() - 10)) {\r\n scope.minified = true;\r\n if (!lastSize) {\r\n lastSize = height - 100;\r\n }\r\n } else {\r\n scope.minified = false;\r\n lastSize = 0;\r\n }\r\n }\r\n }\r\n };\r\n }])\r\n .directive('wbPane', function () {\r\n return {\r\n restrict: 'EA',\r\n require: '^wbSplitter',\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n minSize: '=',\r\n initSize: '='\r\n },\r\n template:\r\n '
',\r\n link: function (scope, element, attrs, wbSplitterCtrl, transclude) {\r\n scope.elem = element;\r\n scope.index = wbSplitterCtrl.addPane(scope);\r\n\r\n transclude(scope.$parent, function (clone, scope) {\r\n element.append(clone);\r\n });\r\n }\r\n };\r\n });\n\n})(window, document);\n","(function(window, document, undefined) {\n'use strict';\n\n// Source: wb-busy-indicator.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('busyIndicator/templates/wb-busy-indicator.tpl.html', '

{{\\'TXT_BUSY\\' | translate}}

');\n\n}]);\n\n// Source: wb-checkbox-bitmask-edit.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('checkbox/templates/wb-checkbox-bitmask-edit.tpl.html', '');\n\n}]);\n\n// Source: wb-checkbox-edit.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('checkbox/templates/wb-checkbox-edit.tpl.html', '');\n\n}]);\n\n// Source: wb-radio-edit.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('checkbox/templates/wb-radio-edit.tpl.html', '');\n\n}]);\n\n// Source: wb-scheduler-date-picker.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-date-picker.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-recurrence-day-periodicity.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-recurrence-day-periodicity.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-recurrence-day-week-days.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-recurrence-day-week-days.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-recurrence-month-periodicity.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-recurrence-month-periodicity.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-recurrence-month-week-days.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-recurrence-month-week-days.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-recurrence-week-periodicity.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-recurrence-week-periodicity.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-recurrence-week-week-days.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-recurrence-week-week-days.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-recurrence-year-periodicity.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-recurrence-year-periodicity.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-recurrence-year-week-days.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-recurrence-year-week-days.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-recurrence.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-recurrence.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-tooltip.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-tooltip.tpl.html', '

{{startTime | date:\\'shortTime\\'}} - {{endTime | date:\\'shortTime\\'}}

{{startTime | date:\\'short\\'}}

{{endTime | date:\\'short\\'}}

{{teacher}}

{{name}}

{{notes}}

{{filled}}

');\n\n}]);\n\n// Source: wb-scheduler.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler.tpl.html', '
{{option.columns[0].date | date:\\'EEEE d. MMMM\\'}} {{option.columns[0].resourceName }}
{{::column.caption}}
{{::row.hour}} 00
{{::event.startTime | date:\\'short\\'}} {{::event.startTime | date:\\'shortTime\\'}} - {{::event.endTime | date:\\'short\\'}} {{::event.endTime | date:\\'shortTime\\'}}
3, \\'scheduler-cell-event-name-xs\\': option.columns.length > 5}\">{{::event.name}}
{{::event.teacher}}
{{::event.filled}}
');\n\n}]);\n\n\n})(window, document);\n"]}