{"version":3,"sources":["app.js","templates.js","cores/app.configs.js","cores/app.constants.js","cores/app.directives.js","controllers/core/LayoutController.js","controllers/core/analytics.js","controllers/core/documentController.js","controllers/core/followUpController.js","controllers/core/introductionController.js","controllers/core/landingController.js","controllers/core/modalPopupController.js","controllers/core/navigationController.js","controllers/core/questionController.js","controllers/dashboard/feedbackStaffMemberLandingController.js","controllers/dashboard/manageComplaintsController.js","controllers/dashboard/manageFeedbacksController.js","controllers/dashboard/staffMemberLandingController.js","controllers/dashboard/toolsController.js","controllers/form/caseNotesHistoryController.js","controllers/form/complaintFormController.js","controllers/form/complaintRegisteredFormController.js","controllers/form/complaintsHistoryController.js","controllers/form/feedbackAdditionalInfoController.js","controllers/form/feedbackAssessmentFormController.js","controllers/form/feedbackAssignmentHistoryController.js","controllers/form/feedbackCoordinationFormController.js","controllers/form/feedbackInvestigateFormController.js","controllers/form/feedbackPracticeImprovementFormController.js","controllers/form/feedbackRespondFormController.js","controllers/form/incidentCoordinationFormController.js","controllers/form/incidentFormController.js","controllers/form/investigationFormController.js","controllers/form/notificationFormController.js","controllers/form/practiceImprovementFormController.js","controllers/form/riskAssessmentFormController.js","services/core/dataService.js","services/core/utilityService.js","services/core/validationService.js"],"names":["__env","window","Object","assign","defineProperty","value","target","varArgs","TypeError","to","index","arguments","length","nextSource","nextKey","prototype","hasOwnProperty","call","writable","configurable","angular","module","err","provider","$provide","this","enable","$get","run","$rootScope","appJustLoaded","$templateCache","put","feedbackCheckLoggedIn","$location","DataServices","Constants","UtilityServices","isAuthenticated","getUserProfileInfoUsingCache","then","userInfo","isDFFH","isSuperAdmin","path","indexOf","isRegisteredPrivacyUser","roles","isRegisteredComplaintsUser","invalidUserLogout","isDH","data","privacyCheckLoggedIn","Url","manageFeedbacks","privacyStaffMemberLanding","privacyCheckAccess","complaintCheckAccess","manageComplaints","logout","adalAuthenticationService","sessionStorage","clear","logOut","navigateToLandingPage","$route","isPartiallyRegisteredUser","current","$$route","feedbackType","feedbackStaffMemberLanding","privacy","internal","landing","checkOutOfPlaceFormSubmissions","params","pageUrl","allowFormNavigation","appInUse","checkDirectNavigation","config","$routeProvider","$locationProvider","$httpProvider","$compileProvider","digestHudProvider","vcRecaptchaServiceProvider","adalAuthenticationServiceProvider","debugInfoEnabled","init","anonymousEndpoints","AzureADSettings","instance","tenant","clientId","redirectUri","popUp","scope","endpoints","cacheLocation","IsTestRecaptcha","setSiteKey","GoogleRecaptchaTestKey","GoogleRecaptchaKey","when","resolve","templateUrl","controller","appStart","requireADLogin","otherwise","redirectTo","html5Mode","hashPrefix","isDHVisible","location","hash","isDFFHVisible","$inject","baseUrl","split","constant","ausDateFormat","responseDateFormat","minimumDate","defaultDateOption","defaultFeedbackStatus","clientPageId","clientPageSectionCode","accessSectionCode","summaryNavTabNum","systemNavTabNum","tools","introduction","firstIncidentFormPage","firstFollowUpFormPage","firstRiskAssessmentFormPage","firstNotificationFormPage","firstInvestigationFormPage","firstPracticeImprovementFormPage","firstComplaintFormPage","firstComplaintRegisteredFormPage","firstFeedbackCoordinationFormPage","secondFeedbackCoordinationFormPage","firstFeedbackAssessmentFormPage","firstFeedbackInvestigateFormPage","firstFeedbackRespondFormPage","firstFeedbackPracticeImprovementFormPage","firstFeedbackAdditionalInfoFormPage","nonMajorSummary","saveDraft","managerReturn","withdrawIncident","getResponseByEmailURL","apiUrl","getConfigDataURL","getConfigDataPublicURL","getApplicationLastUpdateDateURL","getUserProfileData","getFeedbackAssigneesURL","feedbackId","IsDHVisible","getSubmitIncidentURL","getSubmitIncidentRegisteredUserURL","getSaveIncidentRegisteredUserURL","getFeedbacksURL","getFeedbackByIdURL","id","assignFeedbackURL","getLinkableFeedbacksURL","saveFeedbackLinkURL","removeFeedbackLinkURL","getPublicSaveDocumentURL","getSaveDocumentURL","getPublicGetDocumentURL","getGetDocumentURL","getPublicDeleteDocumentURL","getDeleteDocumentURL","getSaveIncidentForDocumentUploadURL","getPublicSaveIncidentForDocumentUploadURL","getSaveFeedbackCaseNotesURL","getWithdrawFeedbackURL","getApproveNonMajorIncidentCEOURL","getFollowUpSummaryResponseAndConfigURL","getFollowUpResponseAndConfigURL","securedHealthCheckUrl","getSubmitSubmitFollowUpURL","getSaveFollowUpURL","geUpdateFeedbackStatusUpURL","getFeedbackPdf","getAllFormsPdf","getComplaintsRegisteredPdf","getComplaintsUnRegisteredPdf","getComplaintsAllFormsPdf","getComplaintsFeedbackUnRegistered","getFeedbackHistoryURL","getGetDocumentTemplatesURL","getReOpenFeedbackURL","deleteFeedbackURL","getCsvExtractUrl","toggleFeedbackSensitivityURL","getGetDocumentTemplateFileURL","documentTemplateId","NotifyType","notification","css","icon","error","SubmitType","toMgr","toCEO","toDHHS","toDHHSMgr","nonMajorCEO","adhocDHHS","RepeatingItemState","adding","editing","viewing","ManageIncidentState","view","bulkEdit","ImpactType","major","code","text","nonMajor","unknown","Role","spReadOnly","Requestor","StaffMember","PrivacyOfficer","PrivacyManager","IncidentManager","Investigator","ComplaintsManager","ActionOfficer","FMS_Admin","FMS_ComplaintsAdmin","FMS_Level3User","FeedbackType","Privacy","Complaint","ConfigTemplate","incident","incidentCoordination","riskAssessment","investigation","practiceImprovement","complaint","user","organisation","complaintRegistered","feedbackCoordination","feedbackAssessment","feedbackInvestigate","feedbackRespond","feedbackPracticeImprovement","feedbackAdditionalInfo","FollowUpStatus","draft","submitted","Status","Draft","Submitted","InProgress","Withdrawn","Closed","Approved","RetrieveHistoryType","Assignment","Recategorisation","ExternalOversightDueDate","RevisedDueDate","LinkingUnLinking","EditHistory","EditFollowup","OverdueNotification","AppConfig","googlePlacesAPIKey","GooglePlacesAPIKey","isTestRecaptcha","googleRecaptchaTestSecret","GoogleRecaptchaTestSecret","googleRecaptchaTestKey","ComplaintsFormType","registered","unRegistered","Popup","savedElsewhere","severity","title","type","okButtonText","reviewComplaintErrors","reopenIncident","cancelButtonText","linkPrivacyIncident","questions","question","controlType","options","showAsRequired","validations","level","rule","summaryMessage","inlineMessage","incidentNotAccessible","confirmDeleteComplaint","confirmToMakeRecordSensitive","confirmToMakeRecordInsensitive","Notification","reopenIncidentSuccessful","message","reopenIncidentFailed","incidentUpdatedSinceReadTime","complaintHasValidationErrors","deleteComplaintSuccessful","Messages","manageReportsPageTitle","linkPrivacyProgress","directive","$compile","element","attrs","$watch","$eval","compile","html","contents","$timeout","$parse","link","model","focusMe","focus","bind","event","which","setTimeout","$apply","validationClick","require","callbackFn","ngModel","types","componentRestrictions","country","gPlace","google","maps","places","Autocomplete","pIndex","sCode","sIndex","qCode","on","addressElementArray","currentTarget","$parent","navTab","page","number","responseId","responses","utility","removeFromValidationErrors","setAttribute","updatePlace","addressArray","getPlace","address_components","$setViewValue","val","arg1","addListener","elem","triggerHandler","focusOutCallback","$","focusout","newFocus","attr","focusOutId","preventDefault","modelCtrl","filterInputType","$parsers","push","inputValue","isNaN","parseFloat","isFinite","resetAddressErrors","getAttribute","manualAddress","JSON","parse","replace","suburb","state","streetNumberName","postCode","$scope","$element","onTouchEnd","method","$event","restrict","transclude","cntrller","transcludeFn","expression","fastOptions","parts","map","part","trim","Error","valueParts","subPart","valueExpression","labelParts","defaultValueExpression","labelExpression","defaultValueParts","lastIndexOf","substring","collectionKey","$watchCollection","collection","clone","append","selectedValue","allOptions","showDefaultOption","undefined","_","forEach","collectionItem","label","selectedHtml","optionHtml","possibleBlankEntry","children","first","remove","departmentTheme","bodyTag","document","querySelector","addClass","href","adalRequest","getItem","formApp","$interval","$on","handleSessionTimeOut","openFmsAdminSite","navigateToAdminFmsSite","navs","exitFms","setMenuVisibility","userFullName","salutation","showExitButton","WOVGprofileNumber","DEPTprofileNumber","SITEprofileNumber","dept","site","siteOnSubFolder","subFolder","cookiePath","i","s","o","g","r","a","m","q","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga","name","jQuery","click","eventCategory","eventAction","eventLabel","transport","filter","input","k","roundTo","Math","pow","toFixed","$window","$http","ValidationService","FileUploader","$log","$routeParams","$filter","$anchorScroll","fileSizeFilter","createFileUploaderForAttachment","fileUploader","uploader","headers","Authorization","withCredentials","documents","docsAlreadyUploaded","documentId","objectToInsert","file","size","isFocus","uploadDateTime","isUploaded","isReady","isDeletedDisabled","isDeleteDisabled","queue","onBeforeUploadItem","fileItem","currentProgressMessage","filters","fn","item","max_file_limit","openPopup","getElementById","onAfterAddingFile","isValidExtensions","parseInt","max_file_size","cancel","validateAndUpload","onCompleteItem","response","status","onProgressItem","progress","currentUploadingFile","onSuccessItem","documentOperationStatus","isDocUploaded","responseInfo","incidentId","parentId","trackEventsWithGA","onErrorSave","onErrorItem","max_file_total_size","currentPageIndex","currentFileAttached","attachment","isViewing","isRemoving","initPageAttachments","removeFileItem","result","deleteDocument","queueItem","uniqWith","isEqual","lastUpdatedTime","lastUpdatedBy","LastUpdatedBy","viewDocument","userAgent","navigator","standalone","toLowerCase","test","Blob","saveAs","e","upload","trigger","acceptedFileTypes","allowedFileTypes","join","ios","fileType","fileName","totalFileSize","uploadDateTimeString","toLocaleString","day","month","year","hour","minute","hour12","newDocumentToUpload","url","formData","saveIncidentForDocumentUpload","popupCode","sourceEvent","$q","$controller","coordinationTemplate","firstCoordinationPageUrl","pageId","originalResponse","copy","returnToCoordinationPage","resetResponseInfo","incidentRef","getConfigurationUsingCache","showNotification","callSaveFollowUp","isSaving","saveFollowUp","callSubmitFollowUp","submitFollowUp","callCancelFollowUp","isPageEditable","confirmUserCancel","incidentSubmitted","isLoading","IsDFFHVisible","getConfigDataForIncidentAndRedirect","createIncident","setDefaultValues","reportedDate","submittedDate","department","getConfigDataAndRedirect","templateId","destinationPath","validationErrors","createFeedback","$uibModalInstance","popupParams","configData","popup","errorMessages","thirdButtonText","setItem","popups","ok","validatePopUp","outParams","close","popupThirdButton","dismiss","validateQuestion","removeError","setQuestionErrorState","errorQuestion","find","errorValidation","v","clearResponses","typeAheadStartsWithFilter","option","viewValue","matchingText","substr","vs","curPageNumber","pageList","Array","each","navigationTabs","includeInProgress","pages","goToPage","tabNo","curPath","$$path","dhordffhPath","exitCondition","successFunction","failureFunction","exitConditionPopup","nextPageUrl","goToNavigationTab","isDHReadOnlyComplaint","gaConfigData","template","versionNumber","role","sessionId","validatedPages","navTabNum","p","isCurrentIncidentEditable","isEditable","shadowResponse","pageWatches","isButtonLoading","toggleClass","trackPageVisitWithGA","setQuestionParams","valueOfQuestion","questionContains","qValue","notEmpty","setupWatchesForPageItem","sections","section","condition","cond","stringify","setupWatchForSectionCondition","setupWatchesForSectionItem","setupWatchForQuestionCondition","watch","newValue","oldValue","isRepeating","repeatingItemRequired","addSectionItem","match","sWatch","sItems","deregisterPageItemWatches","watches","si","deregisterSectionItemWatches","obj","splice","setupTriggersAndDynamicValues","setupChangeFromFalseToTrueWatchForThisTrigger","whenThisExpressionChangesFromFalseToTrue","doThis","setupValueChangeWatchForThisTrigger","whenThisExpressionValueChanges","triggers","initialisePageResponse","scrollTo","old","setSummaryErrorFocus","summaryValMsgs","pageNo","buildDateString","clearDateModel","dateParam","selectRadioAlignment","displayStyle","getAnswerFromCodes","n","getAnswer","getQuestionOptions","ops","optionDependsOnQuestion","pQuestions","optionSetName","valOfPQuestion","optionSets","feedbackIndex","findIndex","aos29rIndex","getIncidentDate","moment","incidentDate","format","checkValueChangeForCoordinationPage","equals","checkAtleastOneValueOnPage","nextPage","slice","checkPageItemsAreSaved","currentScope","navigateWithoutValidation","validatePage","isPrerequisitePageValidationMet","alertFirstError","route","destPage","prerequisitePageValidation","pagesToCheck","setAddressParts","address","streetAddress","addressType","long_name","short_name","dontClearPreviousErrors","noMandatoryChecksForSave","isValid","getPage","_level","pageIdentifier","pi","p$","validatePageQuestions","hasValue","access","addValidationError","popupMessageCode","shortQuestion","validateQuestionInline","pageIndex","sectionCode","sectionIndex","questionCode","onValueChange","onChangeAction","setErrorState","getQuestionId","moveToFirstError","validNumeric","maxNumericLength","minNumericLength","validAlphabetic","validEmailAddress","validDate","isDateSameOrAfter","minYear","dateDifferenceInDays","sourceDate","targetDate","validDateRange","isAdult","goToNextPageConditional","conditionNavNo","conditionPageUrl","callingPage","getCurTemplatePath","goToNextPage","transferToNextPage","goToPreviousPage","transferToPreviousPage","returnToCallingPage","displayOnQuestion","getToolTipText","tooltip","tooltipText","filterButtons","position","include","buttons","goToElement","pageScrollTo","getPageItemCount","getPageItemState","editPageItem","validation","navigateFromSummaryFocusItem","editSectionItem","$state","setPageItemState","isAddingPageItem","matches","addPageItem","newResponse","generateGuid","focusFirstElement","saveNewPageItem","cancelNewPageItem","saveExistingPageItem","cancelExistingPageItem","deletePageItem","popupConfirmCode","getSectionItemState","setSectionItemState","isAddingSectionItem","noFocusRequired","saveNewSectionItem","cancelNewSectionItem","saveExistingSectionItem","cancelExistingSectionItem","deleteSectionItem","getSectionItemCount","resetTheResponse","isReadOnly","readOnly","readOnlyCondition","isRequired","isNextPageSummary","curNavNo","curTab","maxPagesInTab","getMaxPageCountForTab","curPageNo","getPageIndex","nextTab","returnToLanding","padValue","totalDigits","resp","count","pageItem","repeatingNavigatePopupCode","IsValid","repeatingReadOnly","sectionItem","sec","checkSectionItemsAreSaved","sectionToFocus","s4","floor","random","toString","navNo","maxPageInTab","curPageIndex","isDHHSComplaint","prevTab","sectionContainingRepeatingItemRequired","resetValueOnLoad","baseurl","urldffh","urldh","dffhURL","dhURL","isSessionActive","login","uiGridConstants","getOptions","optionset","getOptionSetFromConfiguration","totalRecords","filteredRecords","maxRecords","hasMoreRecords","isTotalCountLoading","mcoFilters","selectedFeedbackStatus","selectedCategory","selectedProgram","selectedDateRange","searchPhrase","showAllFeedbacks","feedbackStatusList","categoryList","programList","dateRangeList","iosOrMobile","rowHeight","getSubGridRowHeight","row","entity","subGridOptions","isRunningInExtraSmallScreen","width","getColumnDefs","field","displayName","enableHiding","enableColumnMenu","cellTemplate","cellFilter","hideInSmallScreen","cellClass","headerCellClass","sort","direction","DESC","resizable","visible","gridOptions","enableSorting","enableFiltering","enableHorizontalScrollbar","scrollbars","NEVER","enableVerticalScrollbar","ALWAYS","enableRowSelection","enableFullRowSelection","enableRowHeaderSelection","enableSelectAll","multiSelect","enableExpandableRowHeader","expandableRowTemplate","columnDefs","rowTemplate","onRegisterApi","gridApi","rowsRendered","core","getVisibleRows","grid","expandable","rowExpandedStateChanged","expandedRowHeight","clientExpand","clientNames","sortedClientNameArray","ref","childNames","sortedChildNameArray","onClientExpandTouchend","onClientExpandClick","selectRow","selection","assignLabel","isAlreadyAssignedToCurrentUserRole","viewOrEditFeedback","isViewOrEditLoaded","statusId","statusText","statusDisplayName","programText","programDescription","lodgementDate","setCurrentIncidentAsEditable","canEdit","action","getFeedbackById","templateVersion","determineValidatedPages","isDHComplaint","isDFFHComplaint","isDHHS","getConfiguration","pushConfigData","getCachedConfigData","onViewOrEditTouchend","onViewOrEditClick","withdrawFeedback","isWithdrawLoaded","currentLoadMessage","withdrawalReason","getOptionSetText","getFeedbacks","onWithdrawTouchend","onWithdrawClick","followUpFeedback","isFollowUpLoaded","feedbackAssignments","assigneeArray","datas","onFollowUpTouchend","onFollowUpClick","printFeedback","downloadPdf","onPrintTouchend","onPrintClick","assignFeedback","loadAssignmentData","feedback","getFeedbackAssignees","assignmentData","assignerRoleId","assignableUsers","au","fullName","roleId","chooseFeedbackAssignee","assigneeUserId","complaintAssignee","assigneeRoleId","feedbackAssignee","saveFeedbackAssignee","feedbackTypeId","userId","isAssignLoaded","onAssignTouchend","onAssignClick","linkFeedback","loadFeedbackLinkingData","getLinkableFeedbacks","feedbackLinkingData","linkableFeedbacks","linkableFeedback","formattedRef","chooseFeedbackLink","linkedFeedbackId","linkedComplaint","linkReason","feedbackLink","saveFeedbackLink","feedbackId1","feedbackId2","isLinkLoaded","onDeleteTouchend","deleteFeedback","onDeleteClick","isDeleteLoaded","onSensitveTouch","toggleFeedbackSensitivity","onSensitiveClick","isSensitiveLoaded","actionLabel","isSensitive","onLinkTouchend","onLinkClick","goToLinkedFeedback","tryViewOrEditFeedback","canView","feedbackFromDashboard","setElementVisibility","searchTerm","feedbackFromDatabase","feedbacks","onGoToLinkedFeedbackTouchend","onGoToLinkedFeedbackClick","removeFeedbackLink","isRemoveFeedbackLinkLoaded","parentRow","onRemoveFeedbackLinkTouchend","onRemoveFeedbackLinkClick","refresh","filterRecords","clearAllFilters","canCreateFeedback","canExtractCsv","extractCsv","isDOH","dateRangeId","overdueVirtualStatus","activeVirtualStatus","getRequestData","isStatusFilterShowAll","isStatusFilterOverdue","isStatusFilterActive","isActive","isOverdue","category","programId","isPrintLoaded","viewComplaintsAllFormsPdf","showSpinner","toggleLoadingSpinner","loadGridData","filteredProgramList5","filteredProgramList6","programOriginalResponse","j","categoryDecodeMap","getOptionSetDecodeMap","isCloseLoaded","clientCount","categoryDescription","linkArray","subRow","ASC","closedDateGridColumn","dueDateGridColumn","miFilters","selectedFinalRiskRating","selectedArea","finalRiskRatingList","areaList","linkablePrivacyIncidents","reOpenIncident","isReOpenLoaded","reOpenFeedback","onReOpenTouchend","onReOpenIncidentClick","incidentAssignee","names","canAccess","finalRiskRating","areaId","viewAllFormsPdf","riskRatingDecodeMap","clientName","initialRiskRatingDescription","initialRiskRating","finalRiskRatingDescription","documentTemplates","getDocumentTemplates","allDocumentTemplatesByCategory","downloadDocumentTemplate","documentTemplate","getDocumentTemplateFile","onDocumentTemplateTouchend","onDocumentTemplateClick","getHistory","feedbackCaseNotes","prepareOptionSet","optionSet","cutoffDate","isAfterCutOffDate","validateComplaintsForm","previousPageId","tab","isPageValid","ExpandErroredSections","sectionName","errorSectionIndexList","getPageTitle","canSaveFile","canViewFile","canDeleteFile","onAnonymousCheckChange","complainantDetails","complainantdetails","rDAnonymous","setAnonymousDetails","isAnonymousSelected","getLocalCouncilFromAddressForClient","clientdetails","details","localCouncilDetails","getLocalCouncilFromAddress","submitFeedback","currentLoadSubmitMessage","captchaResponse","submitIncident","updateStatusBarInformation","tabNum","pageNum","IsOtherOrgSelected","viewComplaintsUnRegisteredPdf","allocatedLastUpdatedTime","incidentStatus","incidentStatusText","formConfig","saveIncidentRegisteredUser","oldStatusText","closed","returnToComplaints","isFullyRegisteredUser","populateFormFields","filteredProgramList1","filteredProgramList","filteredOrgName1","filteredOrgName3","b","filteredProgramList2","filteredProgramList3","filteredProgramList4","programRegisteredOriginalResponse","orgNameOriginalResponse","navigationTabsOriginalResponse","navigationTabsResponse","saveFeedback","btnId","currentLoadSaveMessage","saveFeedbackRegisteredUser","IsOtherProgramSelected","doesDivisionHaveValue","serviceDetails","sPDHSecondaryProgram","doesBranchHaveValue","sPServiceType_DH","haveAnyUnits","unitList","haveAnyBranches","viewComplaintsRegisteredPdf","feedbackStatusId","getFeedbackEditHistory","getFeedbackHistory","feedbackEditHistory","getFeedbackFollowupHistory","feedbackFollowupHistory","getAssignmentHistory","assignmentHistory","getRecategorisationHistory","recategorisationHistory","getExternalOversightDueDateHistory","externalOversightDueDateHistory","getRevisedDueDateHistory","revisedDueDateHistory","getLinkingHistory","linkingHistory","getOverdueHistory","overdueHistory","initComplainHistory","filteredAddProgramList1","filteredAddProgramList","ComplaintsFormData","rDAuthorisedOfficer","filteredAddProgramList4","filteredAddProgramList2","filteredAddProgramList3","validateForm","loadClientDetails","rDclientdetails","clientDetailsLoaded","isFollowUpEditable","saveAdditionalInfo","submitAdditionalInfo","getValueDateFromResponse","formateDate","getValueFromResponse","charAt","toUpperCase","additionalinfo","sPServiceType","getClientDetailsFromResponse","getValueFromResponseLookUp","IsProgram","program","requireRecategorisationReason","hasBeenRecategorised","onCategoryChanged","saveAssessment","submitAssessment","getFeedbackAssignmentHistory","getComplainsFeedbackUnRegistered","assessmentCode","investigateCode","respondCode","practiceImprovementCode","additioanInfoCode","discardCancelVerification","getFollowUpSummary","getFollowUpSummaryResponseAndConfig","followUpVersionNumber","versionNo","responseData","responseDueDate","isFeedbackComplete","feedbackDocuments","doc","uploadedDoc","createdTime","addFollowUpAction","buttonText","isLoadingAssessment","isLoadingAdditionalInfo","isLoadingInvestigate","isLoadingRespond","isLoadingPracticeImprovement","followUpId","spStatus","spStatusText","frStatus","frStatusText","incidentFRStatus","openFollowUpAction","getFollowUpResponseAndConfig","includes","saveFeedbackCaseNotes","saveAndReturnToLanding","getComplaintType","saveInvestigation","enableAfterParent","parent","submitInvestigation","savePracticeImprovement","submitPracticeImprovement","getResponseDueDate","dateFormat","saveResponse","submitResponse","riskAssessmentCode","notificationCode","investigationCode","isLoadingRiskAssessment","isLoadingNotification","isLoadingInvestigation","returnToPrivacy","updateUserRoleAndConfig","area","serviceType","saveIncident","viewIncidentPdf","checkDuplicates","isPageCheck","noDuplicates","objClients","surName","cDSurnameFamilyname","givenName","cDGivenName","dob","cDDOB","oTSurnameFamilyName","oTGivenName","goToCancelIncident","returnToManagePrivacy","saveNotification","submitNotification","saveRiskAssessment","submitRiskAssessment","dataService","getLocalCouncilDetails","localCouncil","cacheConfigData","matchedLga","localgovernmentarea","previousPage","orgNameResponse","cutOffDate","reload","profile","userName","upn","isValidSession","adalError","adalErrorDescription","startsWith","isAdhocSubmissionUser","adhocId","isIncidentEditable","manageIncidentState","selectedBulkIncidents","mFFilters","mcpFilters","adhocSubmissionId","caseNotes","hasRole","roleToFind","some","isNonBusinessUser","isBusinessUser","isPublicUser","every","isFmsAdminUser","isRegisteredFmsAdminUser","userRoles","isRegisteredFmsLevel3User","saveQueueDeferred","defer","promise","pageName","pathname","search","useSecured","requestData","directSubmission","directSubmissionId","toJson","Content-Type","logMessagePrefix","console","log","deferred","that","reject","getUserInfoData","getUserInfoDataFromCache","pushUserInfoDataToCache","getApplicationLastUpdateDate","responseType","feedBackid","Response","Template","TemplateVersion","Ref","Id","ModifiedDate","updateFeedbackStatus","FeedbackId","FollowUpVersionNo","httpPromise","coordinationType","FormConfigurationTemplateOptions","withdrawReason","WithdrawalReason","LastUpdatedTime","historyType","RetrieveType","createdBy","responseJsonObj","fromJson","key","fmsAdminAppBaseUrl","isAnonymous","getLocalCouncilDetailsFromAddress","stateCode","lga","Accept","IsSensitive","locationData","documentTypes","canAccessConfirmation","canAccessConsent","factory","$uibModal","$interpolate","featureNotImplemented","alert","className","removeClass","show","hideMenu","isPrivacyUser","isComplaintsUser","isAdminUser","notifcationCode","returnAsPromise","notifications","notifyType","next","input2","input3","fieldset","describeByValue","removeAttr","responseCode","getOptionSetData","setAriaDescribedByAttribute","attrValue","isArray","output","getAge","birthYear","birthMonth","birthDay","curDate","curYear","curMonth","curDay","date","age","getSystemDate","getMinimumDate","minDate","tabIncludedInProgress","docTitle","open","animation","backdrop","ariaLabelledBy","ariaDescribedBy","windowTemplateUrl","matchEmailRegx","email","regx","toRemove","isValidResponse","propCount","prop","optionsetName","Promise","decodeMap","setCurrentIncidentCanSaveFile","canSaveFileToCurrentIncident","validationService","responseKey","RegExp","isValidDate","dateMoment","isSameOrAfter","sDate","tDate","daysDifference","diff","isBefore","isSame","isAfter","service"],"mappings":"CACA,WACA,YAGA,IAAAA,KAGAC,UACA,kBAAAC,QAAAC,QAEAD,OAAAE,eAAAF,OACA,UAEAG,MAAA,SAAAC,EAAAC,GAEA,GAAA,MAAAD,EACA,KAAA,IAAAE,WAAA,6CAKA,KAAA,GAFAC,GAAAP,OAAAI,GAEAI,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAA,CACA,GAAAG,GAAAF,UAAAD,EAEA,IAAA,MAAAG,EACA,IAAA,GAAAC,KAAAD,GAEAX,OAAAa,UAAAC,eAAAC,KAAAJ,EAAAC,KACAL,EAAAK,GAAAD,EAAAC,IAKA,MAAAL,IAEAS,UAAA,EACAC,cAAA,IAGAjB,OAAAC,OAAAH,EAAAC,OAAAD,QAGAoB,QAAAC,OAAA,eAEA,KAEAD,QAAAC,OAAA,aAEA,MAAAC,GAEAF,QAAAC,OAAA,gBACAE,SAAA,aAAA,WAAA,SAAAC,GAEAC,KAAAC,OAAA,aACAD,KAAAE,KAAA,gBAKAP,QAAAC,OAAA,WAEA,UACA,aACA,kBACA,eACA,oBACA,YACA,YACA,cACA,UACA,oBACA,qBACA,qBACA,gBAGAO,KAAA,aAAA,SAAAC,GACAA,EAAAC,eAAA,QC9EAV,QAAAC,OAAA,aAAAO,KAAA,iBAAA,SAAAG,GAAAA,EAAAC,IAAA,qCAAA,2XACAD,EAAAC,IAAA,0CAAA,mlBACAD,EAAAC,IAAA,2CAAA,srJACAD,EAAAC,IAAA,kCAAA,gxEACAD,EAAAC,IAAA,+CAAA,uKACAD,EAAAC,IAAA,mDAAA,ujBACAD,EAAAC,IAAA,iDAAA,8/IACAD,EAAAC,IAAA,yCAAA,45HACAD,EAAAC,IAAA,sCAAA,s0DACAD,EAAAC,IAAA,iCAAA,opBACAD,EAAAC,IAAA,oCAAA,ivHACAD,EAAAC,IAAA,0CAAA,iUACAD,EAAAC,IAAA,2CAAA,65FACAD,EAAAC,IAAA,8BAAA,6EACAD,EAAAC,IAAA,uCAAA,8GACAD,EAAAC,IAAA,uCAAA,syFACAD,EAAAC,IAAA,kCAAA;AACAD,EAAAC,IAAA,mCAAA,mOACAD,EAAAC,IAAA,iCAAA,+ukBACAD,EAAAC,IAAA,2CAAA,kHACAD,EAAAC,IAAA,yDAAA,8lIACAD,EAAAC,IAAA,+CAAA,qgNACAD,EAAAC,IAAA,8CAAA;AACAD,EAAAC,IAAA,iDAAA,6hHACAD,EAAAC,IAAA,oCAAA,4zBACAD,EAAAC,IAAA,+BAAA,suEACAD,EAAAC,IAAA,iCAAA,qrEACAD,EAAAC,IAAA,2BAAA,6/XC3BA,WACA,YAojBA,SAAAC,GAAAC,EAAAC,EAAAC,EAAAC,GACAF,EAAAG,mBACAH,EAAAI,+BACAC,KAAA,SAAAC,GAEAA,EAAAC,QAAAD,EAAAE,aACAT,EAAAU,OAAAC,QAAA,QAAA,GACAV,EAAAW,wBAAAL,EAAAM,OACAb,EAAAU,KAAA,yBAGAT,EAAAa,2BAAAP,EAAAM,OACAb,EAAAU,KAAA,0BAIAV,EAAAU,KAAA,oCAIAV,EAAAU,OAAAC,QAAA,MAAA,IACAJ,EAAAE,aACAR,EAAAW,wBAAAL,EAAAM,OACAb,EAAAU,KAAA,uBAGAT,EAAAa,2BAAAP,EAAAM,OACAb,EAAAU,KAAA,wBAIAV,EAAAU,KAAA,kCASAP,EAAAY,oBAGAR,EAAAS,MAAAT,EAAAE,aACAT,EAAAU,OAAAC,QAAA,MAAA,GACAV,EAAAW,wBAAAL,EAAAM,OACAb,EAAAU,KAAA,uBAGAT,EAAAa,2BAAAP,EAAAM,OACAb,EAAAU,KAAA,wBAIAV,EAAAU,KAAA,kCAIAV,EAAAU,OAAAC,QAAA,QAAA,IACAJ,EAAAE,aACAR,EAAAW,wBAAAL,EAAAM,OACAb,EAAAU,KAAA,yBAGAT,EAAAa,2BAAAP,EAAAM,OACAb,EAAAU,KAAA,0BAIAV,EAAAU,KAAA,oCASAP,EAAAY,oBAIAZ,EAAAY,qBAEA,SAAAE,GACAjB,EAAAU,OAAAC,QAAA,QAAA,GACAX,EAAAU,KAAA,oCAIAV,EAAAU,KAAA,oCAUA,QAAAQ,GAAAlB,EAAAC,EAAAC,EAAAC,GACAF,EAAAG,mBACAH,EAAAI,+BACAC,KAAA,SAAAC,GACAA,EAAAC,QAAAD,EAAAE,aACAR,EAAAW,wBAAAL,EAAAM,OACAb,EAAAU,KAAAR,EAAAiB,IAAAC,iBAGApB,EAAAU,KAAAR,EAAAiB,IAAAE,2BAGAd,EAAAS,MAAAT,EAAAE,aACAT,EAAAU,OAAAC,QAAA,MAAA,GACAV,EAAAW,wBAAAL,EAAAM,QACAb,EAAAU,KAAAR,EAAAiB,IAAAC,iBAGApB,EAAAU,OAAAC,QAAA,QAAA,IACAJ,EAAAE,aACAR,EAAAW,wBAAAL,EAAAM,OACAb,EAAAU,KAAAR,EAAAiB,IAAAC,iBAGApB,EAAAU,KAAAR,EAAAiB,IAAAE,2BAQAlB,EAAAY,oBAIAZ,EAAAY,qBAEA,SAAAE,GACAjB,EAAAU,OAAAC,QAAA,QAAA,IACAX,EAAAU,KAAAR,EAAAiB,IAAAE,6BAQA,QAAAC,GAAAtB,EAAAC,EAAAC,EAAAC,GACAF,EAAAG,mBACAH,EAAAI,+BACAC,KAAA,SAAAC,GACAN,EAAAW,wBAAAL,EAAAM,OAWAN,EAAAC,QAAAD,EAAAE,aACAT,EAAAU,OAAAC,QAAA,QAAA,GACAX,EAAAU,KAAAR,EAAAiB,IAAAC,iBAEApB,EAAAU,OAAAC,QAAA,MAAA,IACAJ,EAAAE,aACAT,EAAAU,KAAAR,EAAAiB,IAAAC,iBAOAjB,EAAAY,oBAGAR,EAAAS,MAAAT,EAAAE,aACAT,EAAAU,OAAAC,QAAA,MAAA,GACAX,EAAAU,KAAAR,EAAAiB,IAAAC,iBAEApB,EAAAU,OAAAC,QAAA,QAAA,IACAJ,EAAAE,aACAT,EAAAU,KAAAR,EAAAiB,IAAAC,iBAOAjB,EAAAY,oBAIAZ,EAAAY,oBA3CAf,EAAAU,OAAAC,QAAA,QAAA,GACAX,EAAAU,KAAA,mCAIAV,EAAAU,KAAA,yBAyCA,SAAAO,GACAjB,EAAAU,OAAAC,QAAA,QAAA,IACAX,EAAAU,KAAA,qCAQA,QAAAa,GAAAvB,EAAAC,EAAAC,EAAAC,GACAF,EAAAG,mBACAH,EAAAI,+BACAC,KAAA,SAAAC,GACAN,EAAAa,2BAAAP,EAAAM,OAWAN,EAAAC,QAAAD,EAAAE,aACAT,EAAAU,OAAAC,QAAA,QAAA,GACAX,EAAAU,KAAAR,EAAAiB,IAAAK,kBAEAxB,EAAAU,OAAAC,QAAA,MAAA,IACAJ,EAAAE,aACAT,EAAAU,KAAAR,EAAAiB,IAAAK,kBAOArB,EAAAY,oBAGAR,EAAAS,MAAAT,EAAAE,aACAT,EAAAU,OAAAC,QAAA,MAAA,GACAX,EAAAU,KAAAR,EAAAiB,IAAAK,kBAEAxB,EAAAU,OAAAC,QAAA,QAAA,IACAJ,EAAAE,aACAT,EAAAU,KAAAR,EAAAiB,IAAAK,kBAOArB,EAAAY,oBAIAZ,EAAAY,oBA3CAf,EAAAU,OAAAC,QAAA,QAAA,GACAX,EAAAU,KAAA,oCAIAV,EAAAU,KAAA,mCA2CA,SAAAO,GACAjB,EAAAU,OAAAC,QAAA,QAAA,GACAX,EAAAU,KAAA,oCAIAV,EAAAU,KAAA,oCAQA,QAAAe,GAAAC,GACAA,EAAAnB,UAAAmB,EAAAnB,SAAAH,kBACAuB,eAAAC,QACAF,EAAAG,UAKA,QAAAC,GAAA7B,EAAA8B,EAAA/B,EAAAE,GAEAD,EAAAG,kBAWAH,EAAA+B,4BACA,GAAAD,EAAAE,QAAAC,QAAAC,aACAnC,EAAAU,KAAAR,EAAAiB,IAAAE,2BAGArB,EAAAU,KAAAR,EAAAiB,IAAAiB,4BAIA,GAAAL,EAAAE,QAAAC,QAAAC,aACAnC,EAAAU,KAAAR,EAAAiB,IAAAC,iBAGApB,EAAAU,KAAAR,EAAAiB,IAAAK,kBAvBA,GAAAO,EAAAE,QAAAC,QAAAC,aACAnC,EAAAU,KAAAR,EAAAiB,IAAAkB,SAEA,GAAAN,EAAAE,QAAAC,QAAAC,aACAnC,EAAAU,KAAAR,EAAAiB,IAAAmB,UAGAtC,EAAAU,KAAAR,EAAAiB,IAAAoB,SAuBA,QAAAC,GAAAT,EAAA/B,EAAAC,EAAAN,EAAAO,GAEA,oBAAA6B,EAAAE,QAAAQ,OAAAC,QACA/C,EAAAgD,qBAAA,EAGAhD,EAAAgD,qBACAb,EAAA7B,EAAA8B,EAAA/B,EAAAE,GAOA,QAAA0C,GAAAjD,GACAA,EAAAC,eAAA,EAOA,QAAAiD,GAAAd,EAAApC,EAAAK,EAAAC,EAAAC,GACAP,EAAAC,gBACAD,EAAAC,eAAA,EAEAkC,EAAA7B,EAAA8B,EAAA/B,EAAAE,IAz4BAhB,QAAAC,OAAA,WACA2D,QACA,iBAAA,oBAAA,gBAAA,mBAAA,oBAAA,6BAAA,oCACA,SAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAIAH,EAAAI,kBAAA,GAEAD,EAAAE,MAEAC,mBAAA1F,MAAA2F,gBAAAD,mBACAE,SAAA5F,MAAA2F,gBAAAC,SACAC,OAAA7F,MAAA2F,gBAAAE,OACAC,SAAA9F,MAAA2F,gBAAAG,SACAC,YAAA/F,MAAA2F,gBAAAI,YACAC,OAAA,EACAC,MAAA,SACAC,UAAAlG,MAAA2F,gBAAAO,UACAC,cACA,kBAEAhB,GAGAnF,MAAAoG,gBACAd,EAAAe,WAAArG,MAAAsG,wBAEAhB,EAAAe,WAAArG,MAAAuG,oBAKAtB,EACAuB,KAAA,WAEAC,SACAhB,KAAA9B,KAGA6C,KAAA,KAEAE,YAAA,qCACAC,WAAA,sBAEAH,KAAA,SAEAE,YAAA,iCACAC,WAAA,oBACAF,SACAG,SAAA9B,EACAW,KAAAxD,KAGAuE,KAAA,OAEAE,YAAA,iCACAC,WAAA,oBACAF,SACAG,SAAA9B,EACAW,KAAAxD,KAGAuE,KAAA,kBAEAE,YAAA,iCACAC,WAAA,oBACAE,gBAAA,EACAJ,SACAG,SAAA9B,EACAW,KAAAxD,KAGAuE,KAAA,gBAEAE,YAAA,iCACAC,WAAA,oBACAE,gBAAA,EACAJ,SACAG,SAAA9B,EACAW,KAAAxD,KAGAuE,KAAA,iBAEAE,YAAA,sCACAC,WAAA,yBACAF,SACAG,SAAA9B,EACAW,KAAArC,KAYAoD,KAAA,yBAEAE,YAAA,8CACAC,WAAA,4BACAE,gBAAA,EACAJ,SACAG,SAAA9B,EACAW,KAAAjC,KAGAgD,KAAA,0BAEAE,YAAA,+CACAC,WAAA,6BACAE,gBAAA,EACAJ,SACAG,SAAA9B,EACAW,KAAAhC,KAGA+C,KAAA,uBAEAE,YAAA,8CACAC,WAAA,4BACAE,gBAAA,EACAJ,SACAG,SAAA9B,EACAW,KAAAjC,KAGAgD,KAAA,wBAEAE,YAAA,+CACAC,WAAA,6BACAE,gBAAA,EACAJ,SACAG,SAAA9B,EACAW,KAAAhC,KAGA+C,KAAA,mCAEAE,YAAA,iDACAC,WAAA,+BACAE,gBAAA,EACAJ,SACAhB,KAAAX,KAGA0B,KAAA,oCAEAE,YAAA,yDACAC,WAAA,uCACAE,gBAAA,EACAJ,SACAhB,KAAAX,KAGA0B,KAAA,kCAEAE,YAAA,yDACAC,WAAA,uCACAE,gBAAA,EACAJ,SACAhB,KAAAX,KAGA0B,KAAA,eAEAE,YAAA,oCACAC,WAAA,kBACAE,gBAAA,EACAJ,SACAhB,KAAAV,KAGAyB,KAAA,aAEAE,YAAA,oCACAC,WAAA,kBACAE,gBAAA,EACAJ,SACAhB,KAAAV,KAGAyB,KAAA,6BAEAE,YAAA,8BACAC,WAAA,yBACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,2BAEAE,YAAA,8BACAC,WAAA,yBACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,sCAEAE,YAAA,8BACAC,WAAA,yBACAtC,aAAA,EACAoC,SACAhB,KAAAf,KAGA8B,KAAA,oCAEAE,YAAA,8BACAC,WAAA,yBACAtC,aAAA,EACAoC,SACAhB,KAAAf,KAGA8B,KAAA,yCAEAE,YAAA,8BACAC,WAAA,qCACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,uCAEAE,YAAA,8BACAC,WAAA,qCACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,kDAEAE,YAAA,8BACAC,WAAA,qCACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,gDAEAE,YAAA,8BACAC,WAAA,qCACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,mCAEAE,YAAA,8BACAC,WAAA,+BACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,iCAEAE,YAAA,8BACAC,WAAA,+BACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,4CAEAE,YAAA,8BACAC,WAAA,+BACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,0CAEAE,YAAA,8BACAC,WAAA,+BACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,iCAEAE,YAAA,8BACAC,WAAA,6BACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,+BAEAE,YAAA,8BACAC,WAAA,6BACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,0CAEAE,YAAA,8BACAC,WAAA,6BACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,wCAEAE,YAAA,8BACAC,WAAA,6BACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,kCAEAE,YAAA,8BACAC,WAAA,8BACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,gCAEAE,YAAA,8BACAC,WAAA,8BACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,2CAEAE,YAAA,8BACAC,WAAA,8BACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,yCAEAE,YAAA,8BACAC,WAAA,8BACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,wCAEAE,YAAA,8BACAC,WAAA,oCACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,sCAEAE,YAAA,8BACAC,WAAA,oCACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA;AAEAE,YAAA,8BACAC,WAAA,oCACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,+CAEAE,YAAA,8BACAC,WAAA,oCACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,uCAEAE,YAAA,8BACAC,WAAA,0BACAtC,aAAA,EACAoC,SACAhB,KAAAf,KAGA8B,KAAA,qCAEAE,YAAA,uCACAC,WAAA,0BACAtC,aAAA,EACAoC,SACAhB,KAAAf,KAGA8B,KAAA,iDAEAE,YAAA,8BACAC,WAAA,oCACAtC,aAAA,EACAoC,SACAhB,KAAAf,KAGA8B,KAAA,+CAEAE,YAAA,uCACAC,WAAA,oCACAtC,aAAA,EACAoC,SACAhB,KAAAf,KAGA8B,KAAA,kDAEAE,YAAA,8BACAC,WAAA,qCACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,gDAEAE,YAAA,8BACAC,WAAA,qCACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,gDAEAE,YAAA,8BACAC,WAAA,mCACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,8CAEAE,YAAA,8BACAC,WAAA,mCACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,iDAEAE,YAAA,8BACAC,WAAA,oCACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,+CAEAE,YAAA,8BACAC,WAAA,oCACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,6CAEAE,YAAA,8BACAC,WAAA,gCACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,2CAEAE,YAAA,8BACAC,WAAA,gCACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,yDAEAE,YAAA,8BACAC,WAAA,4CACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,uDAEAE,YAAA,8BACAC,WAAA,4CACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,oDAEAE,YAAA,8BACAC,WAAA,mCACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGAyB,KAAA,kDAEAE,YAAA,8BACAC,WAAA,mCACAtC,aAAA,EACAoC,SACAhB,KAAAV,KAGA+B,WACAC,WAAA,MAGA7B,EAAA8B,WAAA,GAAAC,WAAA,OAGA5G,MAAA,mBAEA6G,YAAAjH,OAAAkH,SAAAC,KAAAvE,QAAA,MAAA,GACAwE,cAAApH,OAAAkH,SAAAC,KAAAvE,QAAA,QAAA,KAKAZ,EAAAqF,SAAA,YAAA,eAAA,YAAA,mBAoGAlE,EAAAkE,SAAA,YAAA,eAAA,YAAA,mBAgDA9D,EAAA8D,SAAA,YAAA,eAAA,YAAA,mBA6DA7D,EAAA6D,SAAA,YAAA,eAAA,YAAA,mBAmEA3D,EAAA2D,SAAA,6BAwCA5C,EAAA4C,SAAA,SAAA,YAAA,eAAA,aAAA,aAeAxC,EAAAwC,SAAA,cAQAvC,EAAAuC,SAAA,SAAA,aAAA,YAAA,eAAA,gBCv4BA,WACA,YAGA,IAAAC,GAAAtH,OAAAkH,SAAAC,KAAAI,MAAA,KAAA,IAAA,EAGApG,SAAAC,OAAA,WAGAoG,SAAA,aAGAC,cAAA,aACAC,mBAAA,aACAC,YAAA,aACAC,kBAAA,IACAC,sBAAA,IACAC,aAAA,MACAC,sBAAA,UACAC,kBAAA,eACAC,iBAAA,GACAC,gBAAA,IACA9E,KACAoB,QAAA,IACAd,OAAA,UACAc,QAAA8C,EACAhD,QAAAgD,EAAA,WACAa,MAAAb,EAAA,SACA/C,SAAA+C,EAAA,YACAc,aAAAd,EAAA,gBACAjE,gBAAAiE,EAAA,mBACA7D,iBAAA6D,EAAA,oBACAhE,0BAAAgE,EAAA,6BACAjD,2BAAAiD,EAAA,8BACAe,sBAAAf,EAAA,6BACAgB,sBAAAhB,EAAA,mCACAiB,4BAAAjB,EAAA,mCACAkB,0BAAAlB,EAAA,+BACAmB,2BAAAnB,EAAA,iCACAoB,iCAAApB,EAAA,6CACAqB,uBAAArB,EAAA,2BACAsB,iCAAAtB,EAAA,4CACAuB,kCAAAvB,EAAA,+CACAwB,mCAAAxB,EAAA,2CACAyB,gCAAAzB,EAAA,mCACA0B,iCAAA1B,EAAA,qCACA2B,6BAAA3B,EAAA,6BACA4B,yCAAA5B,EAAA,qDACA6B,oCAAA7B,EAAA,qCACA8B,gBAAA9B,EAAA,gCACA+B,UAAA/B,EAAA,0BACAgC,cAAAhC,EAAA,8BACAiC,iBAAAjC,EAAA,iCACAkC,sBAAAzJ,MAAA0J,OAAA,2BACAC,iBAAA3J,MAAA0J,OAAA,sBACAE,uBAAA5J,MAAA0J,OAAA,4BACAG,gCAAA7J,MAAA0J,OAAA,qCACAI,mBAAA9J,MAAA0J,OAAA,2BACAK,wBAAA,SAAAC,EAAAC,GACA,MAAAjK,OAAA0J,OAAA,2BAAAM,EAAA,IAAAC,GACAC,qBAAAlK,MAAA0J,OAAA,iCACAS,mCAAAnK,MAAA0J,OAAA,2BACAU,iCAAApK,MAAA0J,OAAA,yBACAW,gBAAArK,MAAA0J,OAAA,yBACAY,mBAAA,SAAAC,GAAA,MAAAvK,OAAA0J,OAAA,aAAAa,GACAC,kBAAAxK,MAAA0J,OAAA,2BACAe,wBAAA,SAAAT,GAAA,MAAAhK,OAAA0J,OAAA,+BAAAM,GACAU,oBAAA1K,MAAA0J,OAAA,6BACAiB,sBAAA3K,MAAA0J,OAAA,+BACAkB,yBAAA5K,MAAA0J,OAAA,+BACAmB,mBAAA7K,MAAA0J,OAAA,yBACAoB,wBAAA9K,MAAA0J,OAAA,8BACAqB,kBAAA/K,MAAA0J,OAAA,wBACAsB,2BAAAhL,MAAA0J,OAAA,iCACAuB,qBAAAjL,MAAA0J,OAAA,2BACAwB,oCAAAlL,MAAA0J,OAAA,0CACAyB,0CAAAnL,MAAA0J,OAAA,gDACA0B,4BAAApL,MAAA0J,OAAA,kCACA2B,uBAAArL,MAAA0J,OAAA,6BACA4B,iCAAAtL,MAAA0J,OAAA,mCACA6B,uCAAAvL,MAAA0J,OAAA,gDACA8B,gCAAAxL,MAAA0J,OAAA,qDACA+B,sBAAAzL,MAAA0J,OAAA,sBACAgC,2BAAA1L,MAAA0J,OAAA,2BACAiC,mBAAA3L,MAAA0J,OAAA,yBACAkC,4BAAA5L,MAAA0J,OAAA,iCACAmC,eAAA,SAAAtB,GAAA,MAAAvK,OAAA0J,OAAA,uBAAAa,GACAuB,eAAA,SAAAvB,GAAA,MAAAvK,OAAA0J,OAAA,uBAAAa,GACAwB,2BAAA,SAAAxB,GAAA,MAAAvK,OAAA0J,OAAA,mCAAAa,GACAyB,6BAAA,SAAAzB,GAAA,MAAAvK,OAAA0J,OAAA,qCAAAa,GACA0B,yBAAA,SAAA1B,GAAA,MAAAvK,OAAA0J,OAAA,iCAAAa,GACA2B,kCAAA,SAAA3B,GAAA,MAAAvK,OAAA0J,OAAA,+CAAAa,GACA4B,sBAAAnM,MAAA0J,OAAA,sBACA0C,2BAAApM,MAAA0J,OAAA,yCACA2C,qBAAArM,MAAA0J,OAAA,2BACA4C,kBAAAtM,MAAA0J,OAAA,2BACA6C,iBAAAvM,MAAA0J,OAAA,0BACA8C,6BAAAxM,MAAA0J,OAAA,sCACA+C,8BAAA,SAAAC,GAAA,MAAA1M,OAAA0J,OAAA,6CAAAgD,IAEAC,YACAC,cAAAC,IAAA,eAAAC,KAAA,cACAC,OAAAF,IAAA,cAAAC,KAAA,kBAEAE,YACAC,MAAA,QACAC,MAAA,QACAC,OAAA,SACAC,UAAA,YACAC,YAAA,cACAC,UAAA,aAEAC,oBACAC,OAAA,SACAC,QAAA,UACAC,QAAA,WAEAC,qBACAC,KAAA,OACAC,SAAA,YAEAC,YACAC,OAAAC,KAAA,EAAAC,KAAA,SACAC,UAAAF,KAAA,EAAAC,KAAA,aACAE,SAAAH,KAAA,EAAAC,KAAA,YAEAG,MACAC,WAAA,eACAC,UAAA,YACAC,YAAA,cACAC,eAAA,iBACAC,eAAA,iBACAC,gBAAA,kBACAC,aAAA,eACAC,kBAAA,oBACAC,cAAA,gBACAC,UAAA,YACAC,oBAAA,sBACAC,eAAA,kBAEAC,cACAC,QAAA,EACAC,UAAA,GAEAC,gBACAC,SAAA,EACAC,qBAAA,EACAC,eAAA,EACA3C,aAAA,EACA4C,cAAA,EACAC,oBAAA,EACAC,UAAA,EACAC,KAAA,EACAC,aAAA,EACAC,oBAAA,GACAC,qBAAA,GACAC,mBAAA,GACAC,oBAAA,GACAC,gBAAA,GACAC,4BAAA,GACAC,uBAAA,IAEAC,gBACAC,MAAA,EACAC,UAAA,GAEAC,QACAC,MAAA,EACAC,UAAA,EACAC,WAAA,EACAC,UAAA,EACAC,OAAA,EACAC,SAAA,GAEAC,qBACAC,WAAA,EACAC,iBAAA,EACAC,yBAAA,EACAC,eAAA,EACAC,iBAAA,EACAC,YAAA,EACAC,aAAA,EACAC,oBAAA,GAEAC,WACAC,mBAAAxR,MAAAyR,mBACAC,gBAAA1R,MAAAoG,gBACAuL,0BAAA3R,MAAA4R,0BACAC,uBAAA7R,MAAAsG,wBAEAwL,oBACAC,WAAA,GACAC,aAAA,GAEAC,OACAC,gBACAC,SAAA,GACAC,MAAA,iBACAnE,KAAA,2PACAoE,KAAA,OACAC,aAAA,SAEAC,uBACAJ,SAAA,GACAC,MAAA,QACAnE,KAAA,oCACAoE,KAAA,OACAC,aAAA,MAEAE,gBACAL,SAAA,GACAC,MAAA,yBACAnE,KAAA,uEACAoE,KAAA,UACAC,aAAA,MACAG,iBAAA,MAEAC,qBACAP,SAAA,sBACAC,MAAA,8BACAnE,KAAA,kOACAoE,KAAA,UACAC,aAAA,kBACAG,iBAAA,SACAE,YAEAC,SAAA,iBACA5E,KAAA,2BACA6E,YAAA,YACAC,QAAA,2BACAC,eAAA,OACAC,cAEAC,MAAA,SACAC,KAAA,oDACAC,eAAA,GACAC,cAAA,sCAKAR,SAAA,qBACA5E,KAAA,aACA6E,YAAA,SACAE,eAAA,OACAD,QAAA,qBACAE,cAEAC,MAAA,SACAC,KAAA,sCACAC,eAAA,GACAC,cAAA,qCAMAC,uBACAlB,SAAA,GACAC,MAAA,8BACAnE,KAAA,iHACAoE,KAAA,OACAC,aAAA,SAEAgB,wBACAnB,SAAA,GACAC,MAAA,kBACAnE,KAAA,gDACAoE,KAAA,UACAC,aAAA,SACAG,iBAAA,UAEAc,8BACApB,SAAA,GACAC,MAAA,gBACAnE,KAAA,wDACAoE,KAAA,UACAC,aAAA,MACAG,iBAAA,UAEAe,gCACArB,SAAA,GACAC,MAAA,kBACAnE,KAAA,0DACAoE,KAAA,UACAC,aAAA,MACAG,iBAAA,WAGAgB,cACAC,0BACArB,KAAA,eACAsB,QAAA,sDAEAC,sBAAAD,QAAA,mCAAAtB,KAAA,SACAwB,8BAAAF,QAAA,+FAAAtB,KAAA,SACAyB,8BACAH,QAAA,6GACAtB,KAAA,SAEA0B,2BACA1B,KAAA,eACAsB,QAAA,qDAGAK,UACAC,uBAAA,iDACAC,oBAAA,kCCnTA,WACA,YAEA9S,SAAAC,OAAA,WAGA8S,UAAA,WAEA,WAAA,SAAAC,GACA,MAAA,UAAAnO,EAAAoO,EAAAC,GACArO,EAAAsO,OACA,SAAAtO,GACA,MAAAA,GAAAuO,MAAAF,EAAAG,UAEA,SAAApU,GACAgU,EAAAK,KAAArU,GACA+T,EAAAC,EAAAM,YAAA1O,SAMAkO,UAAA,WAEA,WAAA,SAAA,SAAAS,EAAAC,GACA,OACAC,KAAA,SAAA7O,EAAAoO,EAAAC,GACA,GAAAS,GAAAF,EAAAP,EAAAU,QACA/O,GAAAsO,OAAAQ,EACA,SAAA1U,GACAA,KAAA,GACAuU,EAAA,WACAP,EAAA,GAAAY,iBASAd,UAAA,mBAEA,WAAA,SAAAS,GACA,MAAA,UAAA3O,EAAAoO,EAAAC,GACAD,EAAAa,KAAA,2BACA,SAAAC,IACA,KAAAA,EAAAC,OAAA,YAAAD,EAAA9C,MACA,YAAA8C,EAAA9C,MAAA,IAAA8C,EAAAC,OACA,UAAAD,EAAA9C,OAEAgD,WAAA,WACApP,EAAAqP,OAAA,WAAArP,EAAAuO,MAAAF,EAAAiB,oBAEA,UAOApB,UAAA,WAEA,WACA,OACAqB,QAAA,UACAvP,OACAwP,WAAA,IACAC,QAAA,KAEAZ,KAAA,SAAA7O,EAAAoO,EAAAC,EAAAS,GAEA,GAAAjC,IACA6C,OAAA,WACAC,uBAAAC,QAAA,MAEA5P,GAAA6P,OAAA,GAAAC,QAAAC,KAAAC,OAAAC,aAAA7B,EAAA,GAAAvB,EACA,IACAqD,GAAAC,EAAAC,EAAAC,CACAjC,GAAAkC,GAAA,SACA,SAAAlC,EAAAC,GACA,GAAAkC,GAAAnC,EAAAoC,cAAAlM,GAAA/C,MAAA,IACA,IAAAvB,EAAAyQ,QAAAC,QACA1Q,EAAAyQ,QAAAE,MACA3Q,EAAAyQ,QAAAC,OAAAE,QACA5Q,EAAAyQ,QAAAE,KAAAC,OAAA,CAEA,GAAAC,GAAA7Q,EAAAyQ,QAAAC,OAAAE,OAAA,IAAA5Q,EAAAyQ,QAAAE,KAAAC,MACA,IAAA,IAAAL,EAAA5V,OAAA,CACAuV,EAAAK,EAAA,GACAJ,EAAAI,EAAA,GACAH,EAAAG,EAAA,GACAF,EAAAE,EAAA,EAEAvQ,GAAAyQ,QAAAK,UAAAD,GAAAX,GAAAC,GAAAC,GAAAC,EAAA,WACA,EACArQ,EAAAyQ,QAAAM,QAAAC,2BAAA,KACAH,EACAX,EACAC,EACAC,EACAC,GACAjC,EAAAoC,cAAAS,aAAA,eAAA,WAIA,IAAAC,GAAA,WACA,GACAhB,GAAAC,EAAAC,EAAAC,EADAc,EAAA,IAGA,IAAAnR,EAAA6P,QACA7P,EAAA6P,OAAAuB,YACApR,EAAA6P,OAAAuB,WAAAC,mBAAA,CAEA,GAAArR,EAAAyQ,QAAAC,QAAA1Q,EAAAyQ,QAAAE,KACA,GAAAE,GAAA7Q,EAAAyQ,QAAAC,OAAAE,OAAA,IAAA5Q,EAAAyQ,QAAAE,KAAAC,MAEA,IAAAL,GAAAnC,EAAA,GAAA9J,GAAA/C,MAAA,IACA,IAAA,IAAAgP,EAAA5V,OAAA,CACAuV,EAAAK,EAAA,GACAJ,EAAAI,EAAA,GACAH,EAAAG,EAAA,GACAF,EAAAE,EAAA,GACAvQ,EAAAyQ,QAAAK,UAAAD,GAAAX,GAAAC,GAAAC,GAAAC,EAAA,WACA,CAGArQ,GAAAyQ,QAAAM,QAAAC,2BAAA,KACAH,EACAX,EACAC,EACAC,EACAC,GACAjC,EAAA,GAAA6C,aAAA,eAAA,SAEAE,EAAAnR,EAAA6P,OAAAuB,WAAAC,mBAEArR,EAAAqP,OAAA,WACAP,EAAAwC,cAAAlD,EAAAmD,OACAvR,EAAAwP,YACAgC,KAAAL,MAIArB,QAAAC,KAAAb,MAAAuC,YAAAzR,EAAA6P,OAAA,gBAAAqB,QAKAhD,UAAA,iBAEA,WACA,MAAA,UAAAlO,EAAA0R,GACAA,EAAApB,GAAA,QAAAoB,EAAAC,eAAA1C,KAAAyC,EAAA,eAKAxD,UAAA,cAEA,WACA,OACAlO,OACA4R,iBAAA,KAEA/C,KAAA,SAAA7O,EAAA0R,EAAArD,GACAwD,EAAAH,GAAAI,SAAA,WACA1C,WAAA,WACA,GAAA2C,GAAAF,EAAA,WAAAG,KAAA,QACAD,GAAAA,EAAAnV,QAAAyR,EAAA4D,YAAA,IACAjS,EAAAqP,OAAA,WACArP,EAAA4R,sBAIA,WAMA1D,UAAA,UACA,WACA,OACAlO,OACAwP,WAAA,KAEAX,KAAA,SAAA7O,EAAAoO,EAAAC,GACAD,EAAAa,KAAA,WACA,SAAAC,GACA,KAAAA,EAAAC,QACAnP,EAAAqP,OAAA,WACArP,EAAAwP,eAEAN,EAAAgD,wBAOAhE,UAAA,kBACA,WACA,OACAqB,QAAA,UACAV,KAAA,SAAA7O,EAAAoO,EAAAC,EAAA8D,GACA,UAAA9D,EAAA+D,iBACAD,EAAAE,SAAAC,KAAA,SAAAC,GACA,OAAAC,MAAAC,WAAAF,KAAAG,SAAAH,GACAE,WAAAF,GAEAA,QAQArE,UAAA,qBACA,WACA,OACAqB,QAAA,UACAV,KAAA,SAAA7O,EAAAoO,EAAAC,EAAA8D,GACA9D,EAAAsE,oBACAvE,EAAAkC,GAAA,SACA,SAAAlC,EAAAC,GACA,GAAAD,EAAAoC,eACApC,EAAAoC,cAAAoC,aAAA,wBAAA,CACA,GAAAC,GACAC,KAAAC,MAAA3E,EAAAoC,cAAAoC,aAAA,wBACAI,QAAA,KAAA,MACAzC,EAAAnC,EAAAoC,cAAAlM,GAAA/C,MAAA,IACA,IAAAvB,EAAAyQ,QAAAC,QACA1Q,EAAAyQ,QAAAE,MACA3Q,EAAAyQ,QAAAC,OAAAE,QACA5Q,EAAAyQ,QAAAE,KAAAC,OAAA,CACA,GAAAV,GAAAC,EAAAC,CACA,IAAA,IAAAG,EAAA5V,OAAA,CACAuV,EAAAK,EAAA,GACAJ,EAAAI,EAAA,GACAH,EAAAG,EAAA,EAEA,IAAAM,GACA7Q,EAAAyQ,QAAAC,OAAAE,OAAA,IAAA5Q,EAAAyQ,QAAAE,KAAAC,MACA,KAAAL,EAAA5V,SACAkY,EAAAI,QACAjT,EAAAyQ,QAAAM,QAAAC,2BAAA,KACAH,EACAX,EACAC,EACAC,EACAyC,EAAAI,QAEAJ,EAAAK,OACAlT,EAAAyQ,QAAAM,QAAAC,2BAAA,KACAH,EACAX,EACAC,EACAC,EACAyC,EAAAK,OAEAL,EAAAM,kBACAnT,EAAAyQ,QAAAM,QAAAC,2BAAA,KACAH,EACAX,EACAC,EACAC,EACAyC,EAAAM,kBAEAN,EAAAO,UACApT,EAAAyQ,QAAAM,QAAAC,2BAAA,KACAH,EACAX,EACAC,EACAC,EACAyC,EAAAO,oBAYAlF,UAAA,aACA,WACA,OACAxN,YACA,SAAA,WAAA,SAAA2S,EAAAC,GAIA,QAAAC,GAAArE,GACA,GAAAsE,GAAAF,EAAAtB,KAAA,cACAqB,GAAAI,OAAAvE,EACAmE,EAAAhE,OAAAmE,GALAF,EAAArE,KAAA,WAAAsE,QAWArF,UAAA,cACA,WACA,OACAwF,SAAA,IACAnE,QAAA,UACAoE,YAAA,EACA9E,KAAA,SAAA7O,EAAAoO,EAAAC,EAAAuF,EAAAC,GACA,GAAAC,GAAAzF,EAAA0F,YAEAC,EAAAF,EAAAvS,MAAA,KAAA0S,IAAA,SAAAC,GAAA,MAAAA,GAAAC,QAGA,IAAAH,EAAArZ,OAAA,EACA,KAAA,IAAAyZ,OACA,kGACAN,EAIA,IAAAO,GAAAL,EAAA,GAAAzS,MAAA,KAAA0S,IAAA,SAAAK,GAAA,MAAAA,GAAAH,QACA,IAAA,IAAAE,EAAA1Z,OACA,KAAA,IAAAyZ,OAAA,sEACAJ,EAAA,GAEA,IAAAO,GAAAF,EAAA,GAGAG,EAAAR,EAAA,GAAAzS,MAAA,KAAA0S,IAAA,SAAAK,GAAA,MAAAA,GAAAH,QACA,IAAA,IAAAK,EAAA7Z,OACA,KAAA,IAAAyZ,OAAA,wEACAJ,EAAA,GAEA,IAGAS,GAHAC,EAAAF,EAAA,EAIA,IAAAR,EAAArZ,OAAA,EAAA,CACA,GAAAga,GAAAX,EAAA,GAAAzS,MAAA,KACA0S,IAAA,SAAAK,GAAA,MAAAA,GAAAH,QACA,IAAA,IAAAQ,EAAAha,QACA,GAAAga,EAAA,GAAA/X,QAAA,MACA+X,EAAA,GAAAC,YAAA,MAAAD,EAAA,GAAAha,OAAA,EACA,KAAA,IAAAyZ,OACA,wFACAJ,EAAA,GAEAS,GAAAE,EAAA,GAAAE,UAAA,EAAAF,EAAA,GAAAha,OAAA,GAGA,GAAAma,GAAAd,EAAA,EAEAhU,GAAA+U,iBAAAD,EACA,SAAAE,GAEAnB,EAAA,SAAAoB,GACA7G,EAAA8G,OAAAD,IAGA,IAAAE,GAAAnV,EAAAuO,MAAAF,EAAAoB,UAAA,GAEA2F,EAAA,GACAC,EAAAC,QAAAb,CACAc,GAAAC,QAAAR,EACA,SAAAS,GAEA,GAAArb,GAAAqb,EAAAlB,GACAmB,EAAAD,EAAAf,GAEAiB,EAAA,EACAvb,IAAA+a,IACAQ,EAAA,sBACAN,GAAA,EAEA,IAAAO,GAAA,kBACAxb,EACA,YACAsb,EACA,KACAC,EACA,IACAD,EACA,WAEAN,IAAAQ,IAEAP,IACAD,EAAA,2BACAX,EACA,KACAA,EACA,YACAW,EAKA,IAAAS,GAAAzH,EAAA0H,WAAAC,QACA3b,EAAAyb,EAAAtE,KACA,IAAAnX,EAAAwC,QAAA,MAAAxC,EAAAwa,YAAA,MAAAxa,EAAAO,OAAA,GACAkb,EAAAG,SAEA5H,EAAA8G,OAAAE,SAKAlH,UAAA,eAAA,kBAAA,SAAA+H,GACA,OACApH,KAAA,SAAA7O,EAAAoO,EAAAC,GAEA,GAAA6H,GAAA/a,QAAAiT,QAAA+H,SAAAC,cAAA,QAEA,IAAAH,EAAAhV,YACAiV,EAAAG,SAAA,eAEA,IAAAJ,EAAA7U,cACA8U,EAAAG,SAAA,iBAEA,IAAArc,OAAAkH,SAAAoV,KAAA1Z,QAAA,YAAA,GAAA,CACA,GAAA2Z,GAAA3Y,eAAA4Y,QAAA,qBACAD,IAAAA,EAAA3Z,QAAA,MAAA,GACAsZ,EAAAG,SAAA,WAEAE,GAAAA,EAAA3Z,QAAA,QAAA,GACAsZ,EAAAG,SAAA,aAGAH,EAAAG,SAAA,qBAIAH,GAAAG,SAAA,yBCrbA,WAEA,GAAAI,GAAAtb,QAAAC,OAAA,UAEAqb,GAAA/V,WAAA,oBAEA,SAAA,WAAA,YAAA,eAAA,kBAAA,aAAA,YACA,SAAA2S,EAAA1E,EAAA+H,EAAAxa,EAAAE,EAAAR,EAAAO,GACAkX,EAAAtC,QAAA3U,EAEAR,EAAA+a,IAAA,2BACA,WACAtD,EAAAtC,QAAA6F,yBAGAvD,EAAAwD,iBAAA,WACA3a,EAAA4a,0BAGAzD,EAAA0D,MACA1Z,gBAAAlB,EAAAiB,IAAAC,gBACAI,iBAAAtB,EAAAiB,IAAAK,iBACA0E,MAAAhG,EAAAiB,IAAA+E,OAGAkR,EAAA2D,QAAA,WACAhd,OAAAkH,SAAA8R,QAAA,0BAEArE,EAAA,WACA0E,EAAAtC,QAAAkG,oBACA5D,EAAA6D,aAAAhb,EAAAgb,eACA7D,EAAA8D,WAAA9D,EAAA6D,aAAA,UAAA7D,EAAA6D,aAAA,IAAA,GACA7D,EAAA+D,eAAA,IAAA/D,EAAA8D,YACA,QCjCA,IAAAE,mBAAA,eACAC,kBAAA,gBACAC,kBAAA,iBAGAC,KAAA,OACAC,KAAA,2BACAC,gBAAA,MACAC,UAAA,mEACAC,WAAAD,WAGA,SAAAE,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GACAN,EAAA,sBAAAI,EAAAJ,EAAAI,GAAAJ,EAAAI,IAAA,YACAJ,EAAAI,GAAAG,EAAAP,EAAAI,GAAAG,OAAA9F,KAAA5X,YACAmd,EAAAI,GAAAI,EAAA,EAAA,GAAAC,MAAAJ,EAAAJ,EAAAS,cAAAR,GACAI,EAAAL,EAAAU,qBAAAT,GAAA,GAAAG,EAAAO,MAAA,EAAAP,EAAAQ,IAAAV,EAAAG,EAAAQ,WAAAC,aAAAV,EAAAC,IACAne,OAAAmc,SAAA,SAAA,gDAAA,MACA0C,GAAA,SAAAxB,mBAAAyB,KAAA,sBACAD,GAAA,SAAAvB,mBAAAwB,KAAA,sBACAD,GAAA,SAAAtB,mBAAAuB,KAAA,sBAGAC,OAAA,sBAAAC,MAAA,WACA,GAAAF,GAAAjH,EAAArW,MAAAwM,OACAsO,EAAAzE,EAAArW,MAAA,GAAA8a,IACAuC,IAAA,yBAAA,QAAA,QAAAC,GAEAG,cAAA,yBAAA3C,EACA4C,YAAA,QACAC,WAAA7C,EACA8C,UAAA,aC/BA,WAEA,GAAA3C,GAAAtb,QAAAC,OAAA,WACAie,OAAA,WAAA,WACA,MAAA,UAAAC,GACA,KAAAC,GAAA,KACAC,EAAA,CAEA,OADAF,GAAAA,GAAA,GACA7G,YAAA6G,EAAAG,KAAAC,IAAAH,EAAA,IAAAI,QAAAH,MAIA/C,GAAA/V,WAAA,sBAAA,SAAA,UAAA,QAAA,eAAA,kBAAA,oBAAA,eAAA,OAAA,YAAA,eAAA,UAAA,gBAAA,WAAA,aAAA,YAAA,iBAAA,SAAA2S,EAAAuG,EAAAC,EAAA3d,EAAAE,EAAA0d,EAAAC,EAAAC,EAAA/d,EAAAge,EAAAC,EAAAC,EAAAxL,EAAA/S,EAAAO,EAAAie,GA2BA,QAAAC,KAEA,GAAAne,EAAAG,kBACA,GAAAie,GAAAjH,EAAAkH,SAAA,GAAAR,IAAAS,SAAAC,cAAA,UAAAb,EAAAhc,eAAA4Y,QAAA,wBAAAoD,EAAA7f,MAAA2F,gBAAAO,UAAA2Z,EAAA7f,MAAA0J,UAAAiX,iBAAA,QAEA,IAAAJ,GAAAjH,EAAAkH,SAAA,GAAAR,MAwHA,OArHA1G,GAAAvC,UAAA6J,YACAtH,EAAAvC,UAAA6J,cAEAtH,EAAAvC,UAAA6J,WAAAtH,EAAAvC,UAAA6J,UAAAhgB,OAAA,GACA4a,EAAAlC,EAAAvC,UAAA6J,WAAAnF,QAAA,SAAAoF,GACA,GAAAA,EAAAC,WAAA,CACA,GAAAC,IACAC,MACAjC,KAAA8B,EAAA9B,KACAkC,KAAAJ,EAAAI,KACA5O,KAAAwO,EAAAxO,KACA6O,QAAAL,EAAAK,SAEAJ,WAAAD,EAAAC,WACAK,eAAAN,EAAAM,eACAC,YAAA,EACAC,SAAA,EACAC,kBAAAT,EAAAU,iBAEAhB,GAAAiB,MAAAjJ,KAAAwI,MAMAR,EAAAkB,mBAAA,SAAAC,GACAA,EAAAR,SAAA,EACA5H,EAAAqI,uBAAA,aAAAD,EAAAV,KAAAjC,KAAA,SAEAwB,EAAAqB,QAAArJ,MACAwG,KAAA,eACA8C,GAAA,SAAAC,EAAAhP,GAMA,MAJArR,MAAA+f,MAAA5gB,QAAAmhB,IACAzI,EAAAtC,QAAAgL,UAAA,gCACA5F,SAAA6F,eAAA,cAAA5hB,MAAA,IAEAoB,KAAA+f,MAAA5gB,OAAAmhB,KAKAxB,EAAA2B,kBAAA,SAAAR,GAEA,GADAtF,SAAA6F,eAAA,cAAA5hB,MAAA,GACAqhB,EAAAV,KACA,GAAAmB,EAAAT,EAAAV,KAAA3O,KAAAqP,EAAAV,KAAAjC,MAAA,CACA,GAAAqD,SAAAV,EAAAV,KAAAC,MAAAoB,EAIA,MAHA/I,GAAAtC,QAAAgL,UAAA,qBACAN,EAAAY,aACAZ,GAAAzF,QAGAsG,GAAAb,OAGAA,GAAAY,SACAZ,EAAAzF,SACA3C,EAAAtC,QAAAgL,UAAA,wBAOAzB,EAAAiC,eAAA,SAAAd,EAAAe,EAAAC,EAAAjC,GACAnH,EAAAqI,uBAAA,YAAAD,EAAAV,KAAAjC,KAAA,QACA2C,EAAAR,SAAA,GAIAX,EAAAoC,eAAA,SAAAjB,EAAAkB,GACAlB,IACApI,EAAAuJ,qBAAAnB,IAKAnB,EAAAuC,cAAA,SAAApB,EAAAe,EAAAC,EAAAjC,GACArE,SAAA6F,eAAA,cAAA5hB,MAAA,GACAoiB,EAAA3B,YAAA,GAAA2B,EAAAM,yBACArB,EAAAZ,WAAA2B,EAAA3B,WAEAtF,EAAAlC,EAAAvC,UAAA6J,WAAAnF,QAAA,SAAApb,GAEAA,EAAAygB,YAAAY,EAAAV,KAAAjC,MAAA1e,EAAA0e,OACA1e,EAAAygB,WAAA2B,EAAA3B,WACAzgB,EAAA2iB,eAAA,EACA3iB,EAAAihB,mBAAA,KAGAnf,EAAA8gB,aAAAlM,UAAA6J,UAAAtH,EAAAvC,UAAA6J,UACAze,EAAA8gB,aAAAC,WAAAT,EAAAU,SACAhhB,EAAAihB,kBAAA,mBAAA9J,EAAA1U,QAAA,eAAA,gCAEA,GAAA6d,EAAAM,yBACArB,EAAAN,YAAA,EACAM,EAAAzF,SACAoH,EAAA,4BAAA,sBAEAZ,EAAA3B,YAMAY,EAAAN,YAAA,EACAM,EAAAzF,SACAoH,EAAA,iBAAA,uBAPA3B,EAAAN,YAAA,EACAM,EAAAzF,SACAoH,EAAA,iBAAA,uBASA9C,EAAA+C,YAAA,SAAA5B,EAAAe,EAAAC,EAAAjC,GACArE,SAAA6F,eAAA,cAAA5hB,MAAA,GACAqhB,EAAAN,YAAA,EACAM,EAAAzF,SACAoH,EAAA,iBAAA,sBAEA9C,EAvJA,KAAAwB,GAAA,GACAM,EAAA,SACAkB,EAAA,SAEAjK,GAAAkK,iBAAA,EACAlK,EAAAuJ,qBAAA,KACAvJ,EAAAmK,oBAAA,GACAnK,EAAAoK,cACApK,EAAAqK,aACArK,EAAAsK,cAGAtK,EAAAtC,QAAA3U,EAEAiX,EAAApW,KAAA,WACA,MAAAhB,GAAAU,OAAAC,QAAA,MAAA,IACAyW,EAAArP,aAAA,GACA,IAGAqP,EAAArP,aAAA,GACA,IAqIAqP,EAAAuK,oBAAA,WAEAvK,EAAAoK,WAAAnD,aAAAD,KAIAhH,EAAAwK,eAAA,SAAApC,GACA,GAAAA,EAAAZ,WAAA,CACA,GAAAnc,GAAA+c,EAAAV,IACA1H,GAAAtC,QAAAgL,UAAA,oBAAArd,GAAAof,OAAAvhB,KACA,SAAAuhB,GACArC,EAAAZ,YAIAxH,EAAAsK,WAAAlC,EAAAZ,aAAA,EACA3e,EAAA6hB,eAAAtC,EAAAZ,YACAte,KAAA,SAAAigB,GACA,GAAAtf,GAAAsf,GAAAA,EAAAtf,IACAA,IAAA,KAAAA,EAAA4f,yBAGAvH,EAAAS,OAAA3C,EAAAoK,WAAAnD,aAAAiB,MAAA,SAAAyC,GACA,MAAAA,GAAAnD,aAAAY,EAAAZ,aAGAtF,EAAAS,OAAA3C,EAAAvC,UAAA6J,UAAA,SAAAkB,GACA,MAAAA,GAAAhB,aAAAY,EAAAZ,aAGAxH,EAAAvC,UAAA6J,UAAApF,EAAA0I,SAAA5K,EAAAvC,UAAA6J,UAAApF,EAAA2I,SACAhiB,EAAA8gB,aAAAlM,UAAA6J,UAAAtH,EAAAvC,UAAA6J,UACAze,EAAA8gB,aAAAmB,gBAAAjhB,EAAAihB,gBAEAjiB,EAAAihB,kBAAA,mBAAA9J,EAAA1U,QAAA,0BAAA,gCAEAzB,GAAA,KAAAA,EAAA4f,yBACArB,EAAAJ,mBAAA,EACAhI,EAAAtC,QAAAgL,UAAA,6BAAAqC,cAAAlhB,EAAAmhB,kBAGA5C,EAAAJ,mBAAA,EACA+B,EAAA,iBAAA,sBAEA/J,EAAAsK,WAAAlC,EAAAZ,aAAA,GACA,SAAA3d,GACAA,GACAmW,EAAAsK,WAAAlC,EAAAZ,aAAA,EACAY,EAAAJ,mBAAA,EACA+B,EAAA,qBAAA,uBAEA/J,EAAAsK,WAAAlC,EAAAZ,aAAA,EACAY,EAAAJ,mBAAA,EACA+B,EAAA,iBAAA,yBAzCA3B,EAAAzF,eAgDAyF,GAAAJ,mBAAA,EACA+B,EAAA,iBAAA,oBAEA3B,GAAAJ,mBAAA,GAIAhI,EAAAiL,aAAA,SAAA7C,GACA,GACA8C,IADAvkB,OAAAwkB,UAAAC,WACAzkB,OAAAwkB,UAAAD,UAAAG,cACA,UAAAC,KAAAJ,GACA,mBAAAI,KAAAJ,EAEAlL,GAAAqK,UAAAjC,EAAAZ,aAAA,EACA3e,EAAAoiB,aAAA7C,EAAAZ,YACAte,KAAA,SAAAigB,GACA,GAAAtf,GAAAsf,GAAAA,EAAAtf,IACA,KACA,GAAA6d,GAAA,GAAA6D,OAAA1hB,IAAAkP,KAAAqP,EAAAV,KAAA3O,OAAA0M,KAAA2C,EAAAV,KAAAjC,MACA+F,QAAA9D,EAAAU,EAAAV,KAAAjC,MAEA,MAAAgG,GACAzL,EAAAtC,QAAAgL,UAAA,oBAEA1I,EAAAqK,UAAAjC,EAAAZ,aAAA,GACA,WACAxH,EAAAtC,QAAAgL,UAAA,oBACA1I,EAAAqK,UAAAjC,EAAAZ,aAAA,KAKAxH,EAAA0L,OAAA,SAAAza,GACAqK,EAAA,WACAxT,QAAAiT,QAAA,IAAA9J,GAAA0a,QAAA,UACA,MAIA3L,EAAA4L,kBAAA,WACA,GAAAC,IACA,0EACA,oEACA,YACA,aACA,YACA,aACA,YACA,kBACA,aACA,qBACA,2BACA,2BACA,gCACAC,OACAZ,EAAAvkB,OAAAwkB,UAAAD,UAAAG,cACAU,EAAA,mBAAAT,KAAAJ,EAIA,OAHAa,KACAF,EAAA,IAEAA,IAIA,IAAAhD,GAAA,SAAAmD,EAAAC,GACA,OAAAD,GACA,IAAA,0EACA,IAAA,oEACA,IAAA,YACA,IAAA,aACA,IAAA,YACA,IAAA,aACA,IAAA,YACA,IAAA,kBACA,IAAA,aACA,IAAA,qBACA,IAAA,2BACA,IAAA,kBACA,OAAA,CACA,KAAA,2BACA,IAAA,+BACA,MAAA,SAAAC,EAAAzK,UAAAyK,EAAA3kB,OAAA,EACA,SACA,OAAA,EAEA,OAAA,GAIA2hB,EAAA,SAAAb,GAEA,IAAA,GADA8D,GAAA,EACA1H,EAAA,EAAAA,EAAA4D,EAAAlB,SAAAgB,MAAA5gB,OAAAkd,IACA0H,EAAApD,SAAAoD,GAAApD,SAAAV,EAAAV,KAAAC,KAEA,IAAAuE,EAAAjC,EAIA,MAHA7B,GAAAY,SACAZ,EAAAzF,aACA3C,GAAAtC,QAAAgL,UAAA,gBAIA,IAAAyD,IAAA,GAAAlH,OAAAmH,eAAA,SAAAC,IAAA,UAAAC,MAAA,UAAAC,KAAA,UAAAC,KAAA,UAAAC,OAAA,UAAAC,QAAA,IAEAC,GACAnF,WAAAvF,OACA4F,eAAAsE,EACA1G,KAAA2C,EAAAV,KAAAjC,KACAkC,KAAAS,EAAAV,KAAAC,KACA5O,KAAAqP,EAAAV,KAAA3O,KACA6O,QAAAQ,EAAAV,KAAAE,QACAgC,WAAA/gB,EAAA8gB,aAAAC,WACAF,eAAA,EAEAtB,GAAAP,eAAAsE,EACAnM,EAAAvC,UAAA6J,UAAArI,KAAA0N,GAEA9jB,EAAAG,mBACAof,EAAAwE,IAAA9jB,EAAAiB,IAAAwH,mBACA6W,EAAAjB,SAAAC,cAAA,UAAAb,EAAAhc,eAAA4Y,QAAA,wBAAAoD,EAAA7f,MAAA2F,gBAAAO,UAAA2Z,EAAA7f,MAAA0J,WAEAgY,EAAAwE,IAAA9jB,EAAAiB,IAAAuH,yBAGA,OAAAzI,EAAA8gB,aAAAC,YAEAxB,EAAAyE,SAAA5N,MAAA4K,SAAAhhB,EAAA8gB,aAAAC,aACAxB,EAAAsD,WAGA1L,EAAApW,OACAf,EAAAikB,8BAAA9M,EAAArP,aAAAzH,KAEA,SAAAuhB,GAEArC,EAAAyE,SAAA5N,MAAA4K,SAAAhhB,EAAA8gB,aAAAC,aACAxB,EAAAsD,aAQA3B,EAAA,SAAAgD,EAAAC,GACAhN,EAAAtC,QAAAgL,UAAAqE,GACAlkB,EAAAihB,kBAAA,yCAAAkD,EAAA,WAAAhN,EAAA1U,QAAA,kBAAA,2BAIA0U,GAAAuK,4BCxXA,WAEA,GAAAnH,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WAAA,sBACA,SAAA,QAAA,KAAA,cAAA,eAAA,kBAAA,oBAAA,YAAA,eAAA,aAAA,YAAA,eAAA,aACA,SAAA2S,EAAAwG,EAAAyG,EAAAC,EAAArkB,EAAAE,EAAA0d,EAAA7d,EAAAge,EAAAre,EAAAO,EAAAiC,EAAA6e,GAOA,OAJA5J,EAAAjV,aAAAA,EACAiV,EAAA4J,WAAAA,EAGA7e,GACA,IAAAjC,GAAA6M,aAAAC,QACAoK,EAAAmN,qBAAArkB,EAAAgN,eAAAE,qBACAgK,EAAAoN,yBAAAtkB,EAAAiB,IAAAkF,qBACA,MAEA,KAAAnG,GAAA6M,aAAAE,UACAmK,EAAAmN,qBAAArkB,EAAAgN,eAAAU,qBACAwJ,EAAAoN,yBAAAtkB,EAAAiB,IAAAyF,kCAKA,OAAAwQ,EAAAqN,SACArN,EAAAsN,iBAAAxlB,QAAAylB,KAAAvN,EAAAvC,YAIAuC,EAAAwN,yBAAA,WAGA3kB,EAAAykB,oBACAzkB,EAAA4kB,oBACA5kB,EAAA8gB,aAAAlM,aACA5U,EAAA8gB,aAAAP,OAAA,EACAvgB,EAAA8gB,aAAAC,WAAA5J,EAAA4J,WACA/gB,EAAA8gB,aAAA+D,YAAA1N,EAAA0N,YAEA7kB,EAAA8kB,2BAAA3N,EAAAmN,qBAAA,KAAA,KAAAtkB,EAAAG,mBACAE,KAAA,SAAAW,GACAjB,EAAAU,KAAA0W,EAAAoN,2BACA,SAAAvjB,GACAmW,EAAAtC,QAAAkQ,kBAAA,EAAA,oBAIA5N,EAAA6N,iBAAA,WAGA,MAFA7N,GAAA8N,UAAA,EAEAjlB,EAAAklB,aAAA/N,EAAAjV,cACA7B,KAAA,SAAAigB,GACA,MAAAA,GAAAtf,MAAA,IAAAsf,EAAAtf,KAAAuf,OACApJ,EAAAtC,QAAAgL,UAAA,kBAAAqC,cAAA5B,EAAAtf,KAAAkhB,gBAAAN,OAEAtB,EAAAtf,MAAAsf,EAAAtf,KAAAoH,IACApI,EAAAihB,kBAAA,kBAAA9J,EAAA1U,QAAA,sBAAA,+BACA0U,EAAAtC,QAAAgL,UAAA,qBAAA+B,QAEAzK,EAAAtC,QAAAkQ,kBAAA,EAAA,gBAAA,MAAA,IAGA,SAAAzE,GAEA,MADAtgB,GAAAihB,kBAAA,kCAAA9J,EAAA1U,QAAA,sBAAA,8BACA0U,EAAAtC,QAAAgL,UAAA,aAAA+B,SAdA5hB,WAgBA,WACAmX,EAAA8N,UAAA,KAIA9N,EAAAgO,mBAAA,WAGA,MAFAhO,GAAA8N,UAAA,EAEAjlB,EAAAolB,eAAAjO,EAAAjV,cACA7B,KAAA,SAAAigB,GACA,MAAAA,GAAAtf,MAAA,IAAAsf,EAAAtf,KAAAuf,OACApJ,EAAAtC,QAAAgL,UAAA,kBAAAqC,cAAA5B,EAAAtf,KAAAkhB,gBAAAN,OAGAtB,EAAAtf,MAAAsf,EAAAtf,KAAAoH,IACApI,EAAAihB,kBAAA,oBAAA9J,EAAA1U,QAAA,wBAAA,mCACA0U,EAAAsN,iBAAAxlB,QAAAylB,KAAAvN,EAAAvC,WACAuC,EAAAtC,QAAAgL,UAAA,uBAAA+B,QAGAzK,EAAAtC,QAAAkQ,kBAAA,EAAA,gBAAA,MAAA,IAGA,SAAAzE,GAEA,MADAtgB,GAAAihB,kBAAA,sCAAA9J,EAAA1U,QAAA,wBAAA,mCACA0U,EAAAtC,QAAAgL,UAAA,eAAA+B,SAjBA5hB,WAmBA,WACAmX,EAAA8N,UAAA,KAKA9N,EAAAkO,mBAAA,WAEAlO,EAAAmO,gBAAAnO,EAAAoO,oBACApO,EAAAtC,QAAAgL,UAAA,wBAAA+B,OAAAvhB,KACA,SAAAW,GACA,oBAAAA,EAAA4gB,OACAzK,EAAAoJ,SAAAtgB,EAAAgO,eAAAE,UAEAgJ,EAAAgO,qBAAA9kB,KAAA,WACA8W,EAAAwN,6BAKAxN,EAAA6N,mBAAA3kB,KAAA,WACA8W,EAAAwN,6BAKAxN,EAAAwN,6BAKAxN,EAAAwN,kCC/HA,WAEA,GAAApK,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WAAA,0BACA,SAAA,aAAA,YAAA,WAAA,kBAAA,eAAA,YACA,SAAA2S,EAAAzX,EAAAK,EAAA0S,EAAAvS,EAAAF,EAAAC,GAGAga,SAAAhK,MAAA,+CAEAjQ,EAAAwlB,mBAAA,EAEArO,EAAAsO,WAAA,EACA1lB,EAAAU,OAAAC,QAAA,MAAA,GACAyW,EAAArP,aAAA,EAIAqP,EAAArP,aAAA,EAEA/H,EAAAU,OAAAC,QAAA,QAAA,GACAyW,EAAAuO,eAAA,EAIAvO,EAAAuO,eAAA,CAKA,IAAAC,GAAA,WACAxO,EAAAsO,WAAA,EACAzlB,EAAA8kB,2BAAA7kB,EAAAgN,eAAAC,SAAA,KAAA,KAAAlN,EAAAG,mBACAE,KAAA,SAAAW,GACAjB,EAAAU,KAAAR,EAAAiB,IAAAiF,yBAFAnG,WAIA,WACAmX,EAAAsO,WAAA,IAIAtO,GAAAtC,QAAA3U,EAEAiX,EAAAyO,eAAA,WACAC,IACAF,IACAjmB,EAAAgD,qBAAA,EAGA,IAAAmjB,GAAA;AACA7lB,EAAA8gB,aAAAlM,aACA5U,EAAA8gB,aAAAmB,gBAAA,KACAjiB,EAAA8gB,aAAAC,WAAA,KACA/gB,EAAA8gB,aAAA+D,YAAA,KACA7kB,EAAA8gB,aAAAgF,aAAA,KACA9lB,EAAA8gB,aAAAP,OAAA,KACAvgB,EAAA8gB,aAAAiF,cAAA,YC1DA,WAEA,GAAAxL,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WAAA,qBAAA,SAAA,aAAA,YAAA,WAAA,kBAAA,eAAA,YACA,SAAA2S,EAAAzX,EAAAK,EAAA0S,EAAAvS,EAAAF,EAAAC,GAGAga,SAAAhK,MAAA,6BAEAjQ,EAAAwlB,mBAAA,EAEArO,EAAAsO,WAAA,EACAtO,EAAAtC,QAAA3U,EAEAiX,EAAA6O,WAAA/lB,EAAAiB,IAAAoB,OAIA,IAAA2jB,GAAA,SAAAC,EAAAC,GAEAhP,EAAAsO,WAAA,EAGAI,IACA7lB,EAAAomB,oBAEApmB,EAAA8kB,2BAAAoB,EAAA,KAAA,KAAAlmB,EAAAG,mBACAE,KAAA,SAAAW,GACAjB,EAAAU,KAAA0lB,KAFAnmB,WAIA,WACAmX,EAAAsO,WAAA,IAGA/lB,EAAAgD,qBAAA,EAGAyU,GAAAkP,eAAA,WACAJ,EAAAhmB,EAAAgN,eAAAM,UAAAtN,EAAAiB,IAAAuF,wBAGA,IAAAof,GAAA,WACA7lB,EAAA8gB,aAAAlM,aACA5U,EAAA8gB,aAAAmB,gBAAA,KACAjiB,EAAA8gB,aAAAC,WAAA,KACA/gB,EAAA8gB,aAAA+D,YAAA,KACA7kB,EAAA8gB,aAAAgF,aAAA,KACA9lB,EAAA8gB,aAAAP,OAAA,KACAvgB,EAAA8gB,aAAAiF,cAAA,YClDA,WAEA,GAAAxL,GAAAtb,QAAAC,OAAA,UAEAqb,GAAA/V,WAAA,wBAAA,SAAA,oBAAA,UAAA,eAAA,kBAAA,YAAA,cAAA,YAAA,SAAA2S,EAAAmP,EAAAtI,EAAAhe,EAAAE,EAAAgkB,EAAAqC,EAAAtmB,GAEAkX,EAAAtC,QAAA3U,EACAiX,EAAAqP,WAAAxmB,EAAAwmB,WACArP,EAAAsP,SACAtP,EAAA3U,UACA2U,EAAAuP,iBACAvP,EAAAmJ,YAEAxiB,OAAAkH,SAAAoV,KAAA1Z,QAAA,MAAA,GACAyW,EAAArP,aAAA,EAIAqP,EAAArP,aAAA,EAEAhK,OAAAkH,SAAAoV,KAAA1Z,QAAA,QAAA,GACAyW,EAAAuO,eAAA,EAIAvO,EAAAuO,eAAA,EAGAvO,EAAAsP,MAAAxmB,EAAA6P,MAAAoU,GACA,iBAAAA,GACA,SAAAxiB,eAAA4Y,QAAA,sBAEAnD,EAAAsP,OACA5a,KAAA,gBACAoE,MAAA,iBACAnE,KAAA,kpBACAoE,KAAA,UACAC,aAAA,QACAG,iBAAA,WACAqW,gBAAA,IAEAjlB,eAAAklB,QAAA,mBAAA,UAKA,eAAA1C,IAGA/M,EAAAsP,OACA5a,KAAA,mBACAoE,MAAA,oBACAnE,KAAA,4GAMA,OAAAqL,EAAAsP,OAAArN,SAAAjC,EAAAsP,QACAA,MAAAzI,EAAA,UAAA7G,EAAAqP,YAAArP,EAAAqP,WAAAK,QAAAhb,KAAAqY,IAAA,GACA/M,EAAAsP,MAAAA,OAAAA,MAAA,KAGAtP,EAAAsP,OAAAtP,EAAAqP,aAEArP,EAAAsP,OACAzW,SAAA,QACAC,MAAA,gBACAnE,KAAA,oEACAoE,KAAA,OACAC,aAAA,UAIAgH,EAAAsP,MAAAjW,YACA2G,EAAA3G,UAAA2G,EAAAsP,MAAAjW,WAGA+V,IACApP,EAAA3U,OAAA+jB,GAIApP,EAAA2P,GAAA,WACA,GAAA,GAAA3P,EAAA4P,gBAAAtoB,OAAA,CACA,iBAAA0Y,EAAAsP,MAAA5a,MACAnK,eAAAklB,QAAA,oBAAA,QAGA,IAAAhF,IAAAA,OAAA,KAAAoF,UAAA7P,EAAAmJ,SACAgG,GAAAW,MAAArF,KAKAzK,EAAA+P,iBAAA,WACA,GAAA,GAAA/P,EAAA4P,gBAAAtoB,OAAA,CAEA,GAAAmjB,IAAAA,OAAA,mBAAAoF,UAAA7P,EAAAmJ,SACAgG,GAAAW,MAAArF,KAMAzK,EAAAgJ,OAAA,WACA,iBAAAhJ,EAAAsP,MAAA5a,KACA9L,UAAAU,KAAA,WAGA6lB,EAAAa,QAAA,WAKAhQ,EAAA4P,cAAA,WAKA,MAJA5P,GAAAuP,iBACAznB,QAAAqa,QAAAnC,EAAA3G,UAAA,SAAAtS,GACAiZ,EAAAiQ,iBAAAlpB,EAAA2N,QAEAsL,EAAAuP,eAIAvP,EAAAiQ,iBAAA,SAAAvb,GAEA,GADAsL,EAAAkQ,YAAAxb,GACAsL,EAAAmJ,SAAAzU,GAQAsL,EAAAtC,QAAAyS,sBAAAzb,GAAA,OARA,CACA,GAAA0b,GAAAlO,EAAAmO,KAAArQ,EAAA3G,UAAA,SAAA0L,GAAA,MAAAA,GAAArQ,MAAAA,IACA4b,EAAApO,EAAAmO,KAAAD,EAAA1W,YAAA,SAAA6W,GAAA,MAAA,UAAAA,EAAA5W,OACA2W,KACAtQ,EAAAuP,cAAAtQ,MAAAvK,KAAAA,EAAA6E,YAAA6W,EAAA7W,YAAAO,cAAAwW,EAAAxW,gBACAkG,EAAAtC,QAAAyS,sBAAAzb,GAAA,MAQAsL,EAAAkQ,YAAA,SAAAxb,GACAwN,EAAAS,OAAA3C,EAAAuP,cAAA,SAAA9D,GAAA,MAAAA,GAAA/W,OAAAA,IAIA,IAAA8b,GAAA,WACA1oB,QAAAqa,QAAAnC,EAAA3G,UAAA,SAAAtS,GACAiZ,EAAAmJ,SAAApiB,EAAA2N,MAAA,OAKAsL,GAAAyQ,0BAAA,SAAAC,EAAAC,GAEA,MAAAD,GAAAE,aACAF,EAAAE,aAAAC,OAAA,EAAAF,EAAArpB,QAAA+jB,eAAAsF,EAAAtF,cACAqF,EAAA/b,MAAA+b,EAAA/b,KAAAkc,OAAA,EAAAF,EAAArpB,QAAA+jB,eAAAsF,EAAAtF,eAGAmF,UC9JA,WAEA,GAAApN,GAAAtb,QAAAC,OAAA,UAEAqb,GAAA/V,WAAA,wBAAA,SAAA,eAAA,kBAAA,oBAAA,UAAA,YAAA,SAAA2S,EAAAnX,EAAAE,EAAA0d,EAAAI,EAAAje,GACAoX,EAAAtC,QAAA3U,EACAiX,EAAA8Q,GAAArK,EACAzG,EAAA+Q,cAAA,EAEA/Q,EAAA7T,KAAA,SAAAkjB,EAAA0B,GACA/Q,EAAAqP,WAAAA,EACArP,EAAA+Q,cAAAA,EAIA,IAAA3pB,GAAA,CACA4Y,GAAAgR,SAAA,GAAAC,OACAzS,EAAA0S,KAAArK,EAAA,UAAA7G,EAAAqP,WAAA8B,gBAAAC,mBAAA,IAAA,GAAA,WACApR,EAAAgR,SAAA/R,MAAA7X,MAAAA,EAAAmW,OAAApV,KAAAoV,OAAAzE,MAAA3Q,KAAA2Q,MAAAuY,MAAAlpB,KAAAkpB,QACAjqB,MAIA4Y,EAAAsR,SAAA,SAAAC,EAAAjmB,GACAkmB,QAAA5oB,EAAA6oB,OAAAjQ,UAAA,EAAA5Y,EAAA6oB,OAAAloB,QAAA,IAAA,GACA,IAAAmoB,GAAA9oB,EAAA6oB,OAAAvjB,MAAA,KAAA,EACA,IAAA8R,EAAA1C,KAAAqU,cAWA,CACA,GAAAC,GAAA,WACAhpB,EAAAU,OAAAC,QAAA,QAAA,GACAX,EAAAU,KAAA,QAAAooB,EAAA,IAAAH,EAAA,IAAAjmB,GAEA1C,EAAAU,OAAAC,QAAA,MAAA,GACAX,EAAAU,KAAA,MAAAooB,EAAA,IAAAH,EAAA,IAAAjmB,GAGA1C,EAAAU,KAAAkoB,QAAA,IAAAD,EAAA,IAAAjmB,IAGAumB,EAAA,WAAA7R,EAAAtC,QAAAgL,UAAA1I,EAAA1C,KAAAwU,oBACA9R,GAAA9E,MAAA8E,EAAA1C,KAAAqU,eAAAC,gBAAAA,EAAAC,gBAAAA,EAAAE,YAAAzmB,QAvBA1C,GAAAU,OAAAC,QAAA,QAAA,GACAX,EAAAU,KAAA,QAAAooB,EAAA,IAAAH,EAAA,IAAAjmB,GAEA1C,EAAAU,OAAAC,QAAA,MAAA,GACAX,EAAAU,KAAA,MAAAooB,EAAA,IAAAH,EAAA,IAAAjmB,GAGA1C,EAAAU,KAAAkoB,QAAA,IAAAD,EAAA,IAAAjmB,IAqBA0U,EAAAgS,kBAAA,SAAAT,GAEA,GAAAlU,GAAA6E,EAAAmO,KAAArQ,EAAAqP,WAAA8B,eAAA,SAAAzM,GAAA,MAAAA,GAAAnH,QAAAgU,IACAjmB,EAAA+R,EAAAgU,MAAA,GAAAzE,GAEA5M,GAAAsR,SAAAC,EAAAjmB,IAGA0U,EAAAiS,sBAAA,WACA,UAAArpB,EAAAU,OAAAC,QAAA,gBAAA,IAAAX,EAAAU,OAAAC,QAAA,0BAAA,MACAyW,EAAArP,aAAAqP,EAAAmO,kBAAA,UC/DA,WAEA,GAAA/K,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WAAA,sBAAA,SAAA,QAAA,eAAA,kBAAA,oBAAA,OAAA,YAAA,eAAA,UAAA,gBAAA,WAAA,aAAA,YAAA,SAAA2S,EAAAwG,EAAA3d,EAAAE,EAAA0d,EAAAE,EAAA/d,EAAAge,EAAAC,EAAAC,EAAAxL,EAAA/S,EAAAO,GAEAkX,EAAAlX,UAAAA,EAKAkX,EAAAqP,WAAAxmB,EAAAwmB,WAIArP,EAAAkS,aAAArpB,EAAAqpB,aAEAlS,EAAAmS,SAAAtpB,EAAA8gB,aAAAwI,SACAnS,EAAAoS,cAAAvpB,EAAA8gB,aAAAyI,cACApS,EAAAqS,KAAAxpB,EAAA8gB,aAAA0I,KACArS,EAAAvC,UAAA5U,EAAA8gB,aAAAlM,UAEAuC,EAAAsS,UAAAzpB,EAAAypB,UACAtS,EAAAuS,eAAA1pB,EAAA0pB,eACAvS,EAAAiP,iBAAApmB,EAAAomB,iBACAjP,EAAAhX,gBAAAH,EAAAG,kBAGAgX,EAAAtC,QAAA3U,EACAiX,EAAA8Q,GAAArK,EAGAzG,EAAAwS,UAAA1J,SAAAlC,EAAA4L,WACAxS,EAAA1U,QAAAsb,EAAAtb,QACA0U,EAAA1C,KAAA4E,EAAAmO,KAAAnO,EAAAmO,KAAArQ,EAAAqP,WAAA8B,eAAA,SAAAzM,GAAA,MAAAA,GAAAnH,QAAAyC,EAAAwS,YAAAnB,MAAA,SAAAoB,GAAA,MAAAA,GAAA7F,KAAA5M,EAAA1U,UACA0U,EAAAqN,OAAArN,EAAAwS,UAAA,IAAAxS,EAAA1C,KAAAC,OACAyC,EAAAmO,eAAAnO,EAAAtC,QAAAgV,+BAAA,GAAA1S,EAAA1C,KAAAqV,cAAA,EAGA3S,EAAAsN,iBAAAzkB,EAAAykB,iBACAtN,EAAA4S,eAAA/pB,EAAA+pB,eACA5S,EAAA6S,eACA7S,EAAA8S,mBAGA9S,EAAAtC,QAAAqV,YAAAvU,EAAA,WAAA,EAAA,mBAGA3V,EAAAmqB,qBAAA,cAAAhT,EAAA1U,SAEA0U,EAAApW,KAAA,WACA,MAAAhB,GAAAU,OAAAC,QAAA,MAAA,IAQAyW,EAAA5W,OAAA,WACA,MAAAR,GAAAU,OAAAC,QAAA,QAAA,IAUAyW,EAAAiT,kBAAA,SAAApW,EAAAE,EAAAD,GACA,OAAAD,OAAAA,EAAAE,OAAAA,EAAAD,MAAAA,IAIAkD,EAAAkT,gBAAA,SAAA7nB,EAAA2R,EAAAF,EAAAC,EAAAF,EAAAwQ,GACA,MAAA5G,GAAAvI,IAAA7S,EAAA2U,EAAAvC,UAAAT,EAAAF,EAAAC,EAAAF,EAAAwQ,GAAArN,EAAAqN,SAIArN,EAAAmT,iBAAA,SAAA9nB,EAAA2R,EAAAoW,EAAAtW,EAAAC,EAAAF,EAAAwQ,GACA,MAAA5G,GAAA0M,iBAAA9nB,EAAA2U,EAAAvC,UAAAT,EAAAoW,EAAAtW,EAAAC,EAAAF,EAAAwQ,GAAArN,EAAAqN,SAIArN,EAAAqT,SAAA,SAAAhoB,EAAA2R,EAAAF,EAAAC,EAAAF,EAAAwQ,GACA,MAAA5G,GAAA4M,SAAAhoB,EAAA2U,EAAAvC,UAAAT,EAAAF,EAAAC,EAAAF,EAAAwQ,GAAArN,EAAAqN,SAIArN,EAAAsT,wBAAA,SAAAhW,EAAAT,GAEA,GAAAS,EAAAiW,SAGA,IAAA,GAAA9O,GAAA,EAAAA,EAAAnH,EAAAiW,SAAAjsB,OAAAmd,IAAA,CACA,GAAA+O,GAAAlW,EAAAiW,SAAA9O,EAGA,IAAA+O,EAAAC,UAAA,CACA,GAAAC,GAAAF,EAAAC,UAAA9T,QAAA,OAAAF,KAAAkU,UAAA3T,EAAAiT,kBAAApW,EAAA,EAAA2W,EAAA9e,OACAsL,GAAA4T,8BAAA/W,EAAA2W,EAAAE,GAIA,GAAA1T,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAA2W,EAAA9e,MACA,IAAA,GAAAqI,GAAA,EAAAA,EAAAiD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAA2W,EAAA9e,MAAApN,OAAAyV,IAEAiD,EAAA6T,2BAAAL,EAAA3W,EAAAE,KAQAiD,EAAA6T,2BAAA,SAAAL,EAAA3W,EAAAE,GACA,IAAA,GAAAgI,GAAA,EAAAA,EAAAyO,EAAAna,UAAA/R,OAAAyd,IAAA,CACA,GAAAzL,GAAAka,EAAAna,UAAA0L,EAIA,IAAAzL,EAAAma,UAAA,CAEA,GAAAC,GAAApa,EAAAma,UAAA9T,QAAA,OAAAF,KAAAkU,UAAA3T,EAAAiT,kBAAApW,EAAAE,EAAAyW,EAAA9e,OACAsL,GAAA8T,+BAAAjX,EAAA2W,EAAA9e,KAAAqI,EAAAzD,EAAA5E,KAAAgf,MAMA1T,EAAA4T,8BAAA,SAAA/W,EAAA2W,EAAAC,GAEA,GAAAM,GAAA/T,EAAA/E,OACAwY,EAEA,SAAAO,EAAAC,GACAD,EAEAhU,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAA2W,EAAA9e,QACA8e,EAAAU,YACAV,EAAAW,uBAEAnU,EAAAoU,eAAA,EAAAZ,EAAA9e,MAAA,GAIAsL,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAA2W,EAAA9e,aAMAsL,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAA2W,EAAA9e,MAAAuN,OACAjC,EAAAtC,QAAAC,2BAAA,KAAAqC,EAAAqN,OAAAxQ,EAAA2W,EAAA9e,KAAA,KAAA,SAMA2f,EAAAxN,EAAA,UAAA7G,EAAA6S,aAAAhW,OAAAA,EAAAC,MAAA0W,EAAA9e,OAAA,GAAA,EACA2f,GACAA,EAAAC,OAAAP,EAGA/T,EAAA6S,YAAA5T,MACApC,OAAAA,EACAC,MAAA0W,EAAA9e,KACA4f,OAAAP,EACAQ,aAMAvU,EAAA8T,+BAAA,SAAAjX,EAAAC,EAAAC,EAAAC,EAAAyW,GAGA,GAAAM,GAAA/T,EAAA/E,OACAwY,EAEA,SAAAO,EAAAC,GAEAD,GAEAhU,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,IAAAkD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,KACAiD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,GAAAC,GAAAiF,OACAjC,EAAAtC,QAAAC,2BAAA,KAAAqC,EAAAqN,OAAAxQ,EAAAC,EAAAC,EAAAC,MAOAqX,EAAAxN,EAAA,UAAA7G,EAAA6S,aAAAhW,OAAAA,EAAAC,MAAAA,IAAA,GAAA,EACAuX,IACAA,EAAAE,OAAAxX,KACAsX,EAAAE,OAAAxX,OAEAsX,EAAAE,OAAAxX,GAAAkC,KAAA8U,IAGA/T,EAAA6S,YAAA5T,MACApC,OAAAA,EACAC,MAAAA,EACAwX,OAAA,KACAC,SAAAR,OAOA/T,EAAAwU,0BAAA,SAAA3X,GACA,GAAA4X,GAAA5N,EAAA,UAAA7G,EAAA6S,aAAAhW,OAAAA,IAAA,EACA,IAAA4X,EAAA,CACA,IAAA,GAAAhQ,GAAA,EAAAA,EAAAgQ,EAAAntB,OAAAmd,IAAA,CACAgQ,EAAAhQ,GAAA6P,QAEAG,EAAAhQ,GAAA6P,QAGA,KAAA,GAAAI,GAAA,EAAAA,EAAAD,EAAAhQ,GAAA8P,OAAAjtB,OAAAotB,IACA1U,EAAA2U,6BAAA9X,EAAA4X,EAAAhQ,GAAA3H,MAAA4X,GAKA1U,EAAA6S,YAAA7S,EAAA6S,YAAA7M,OAAA,SAAA4O,GACA,OAAAA,EAAA/X,QAAAA,MAMAmD,EAAA2U,6BAAA,SAAA9X,EAAAC,EAAAC,GACA,GAAAyW,GAAA3M,EAAA,UAAA7G,EAAA6S,aAAAhW,OAAAA,EAAAC,MAAAA,IAAA,GAAA,EACA,IAAA0W,GAAAA,EAAAe,OAAAxX,GAAA,CACA,IAAA,GAAAgI,GAAA,EAAAA,EAAAyO,EAAAe,OAAAxX,GAAAzV,OAAAyd,IACAyO,EAAAe,OAAAxX,GAAAgI,IACAyO,EAAAe,OAAAxX,GAAAgI,IAIAyO,GAAAe,OAAAM,OAAA9X,EAAA,KAKAiD,EAAA8U,8BAAA,WAcA,QAAAC,GAAApJ,GACA3L,EAAA/E,OACA0Q,EAAAqJ,yCAEA,SAAAhB,EAAAC,GAEAD,IAAAC,GACAjU,EAAA9E,MAAAyQ,EAAAsJ,UAMA,QAAAC,GAAAvJ,GACA3L,EAAA/E,OACA0Q,EAAAwJ,+BAEA,SAAAnB,EAAAC,GAEAD,GAAAC,GACAjU,EAAA9E,MAAAyQ,EAAAsJ,UAEA,GAjCA,IAAA,GADAG,GAAApV,EAAAqP,WAAA+F,SACA5Q,EAAA,EAAAA,EAAA4Q,EAAA9tB,OAAAkd,IAAA,CACA,GAAAmH,GAAAyJ,EAAA5Q,EAEAvC,SAAA0J,EAAAqJ,yCACAD,EAAApJ,GAEA1J,QAAA0J,EAAAwJ,gCACAD,EAAAvJ,GAiCA,GAHA3L,EAAAqV,yBAGArV,EAAAvC,UAAAuC,EAAAqN,QACA,IAAA,GAAAxQ,GAAA,EAAAA,EAAAmD,EAAAvC,UAAAuC,EAAAqN,QAAA/lB,OAAAuV,IACAmD,EAAAsT,wBAAAtT,EAAA1C,KAAAT,IAMAmD,EAAAsV,SAAA,SAAArkB,GACA,GAAAskB,GAAA3sB,EAAAkF,MACAlF,GAAAkF,KAAAmD,GACA6V,IACAle,EAAAkF,KAAAynB,GACAvV,EAAAtC,QAAA/B,MAAA1K,IAIA+O,EAAAwV,qBAAA,WACA,GAAAC,GAAA5O,EAAA,UAAA7G,EAAAiP,kBACAtV,MAAA,UAAA+b,OAAA1V,EAAAqN,SACA,EACAoI,IAAAA,EAAAnuB,OAAA,GACA0Y,EAAAsV,SAAA,mBAKAtV,EAAA2V,gBAAA,SAAA3Y,EAAAH,EAAAE,EAAAD,GACA,GAAAuP,GAAArM,EAAAkT,gBAAA,KAAAlW,EAAA,OAAAF,EAAAC,EAAAF,GACAyP,EAAAtM,EAAAkT,gBAAA,KAAAlW,EAAA,SAAAF,EAAAC,EAAAF,GACA0P,EAAAvM,EAAAkT,gBAAA,KAAAlW,EAAA,QAAAF,EAAAC,EAAAF,EAGAwP,IAAAC,GAAAC,EACAvM,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,GAAAC,GAAAuP,EAAA,IAAAD,EAAA,IAAAD,EAGArM,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,GAAAC,GAAAiF,QAKAjC,EAAA4V,eAAA,SAAA5Y,EAAAH,EAAAE,EAAAD,EAAA+Y,GACA7V,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,GAAAC,KAEAgD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,GAAAC,EAAA6Y,GAAA5T,SAKAjC,EAAA8V,qBAAA,SAAAxc,GACA,MAAAA,GAAAyc,aACAzc,EAAAyc,aAAA1K,cAEA,YAIArL,EAAAyQ,0BAAA,SAAAC,EAAAC,GAEA,MAAAD,GAAAE,aACAF,EAAAE,aAAAC,OAAA,EAAAF,EAAArpB,QAAA+jB,eAAAsF,EAAAtF,cACAqF,EAAA/b,MAAA+b,EAAA/b,KAAAkc,OAAA,EAAAF,EAAArpB,QAAA+jB,eAAAsF,EAAAtF,eAIArL,EAAAgW,mBAAA,SAAA3qB,EAAAkmB,EAAAmE,EAAA5Y,EAAAE,EAAAH,EAAAE,GAEA1R,IACAwR,GAAAoF,QAAA5W,EAAA,SAAAwR,EAAAxR,EAAA,QACA0R,GAAAkF,QAAA5W,EAAA,SAAA0R,EAAA1R,EAAA,SAEAwR,IAAAA,EAAA,GACAE,IAAAA,EAAA,EAGA,IAAAM,GAAA6E,EAAAmO,KAAArQ,EAAAqP,WAAA8B,eAAA,SAAA8E,GAAA,MAAAA,GAAA1Y,QAAAgU,IACAjU,EAAA4E,EAAAmO,KAAAhT,EAAAgU,MAAA,SAAAoB,GAAA,MAAAA,GAAAlV,QAAAmY,IACAlC,EAAAtR,EAAAmO,KAAA/S,EAAAiW,SAAA,SAAA9O,GAAA,MAAAA,GAAA/P,MAAAoI,IACAxD,EAAA4I,EAAAmO,KAAAmD,EAAAna,UAAA,SAAA0L,GAAA,MAAAA,GAAArQ,MAAAsI,IAGAmM,EAAAnJ,EAAAkT,gBAAA,KAAAlW,EAAAF,EAAAC,EAAAF,EAAA0U,EAAA,IAAAmE,EAEA,OAAA1V,GAAAtC,QAAAwY,UAAA5c,EAAA6P,IAIAnJ,EAAAmW,mBAAA,SAAA7c,EAAAuD,EAAAE,EAAAD,GAGA,GAAA,gBAAAxD,GAAAE,QAAA,CAGA,GAAA4c,GAAA,IAKA,IAJA,MAAAtZ,GAAAmF,QAAAnF,IACAA,EAAAkD,EAAA1U,SAGAgO,EAAA+c,wBAAA,CAIA,IAAA,GAHAC,GAAAhd,EAAA+c,wBAAAnoB,MAAA,KACAqoB,EAAAjd,EAAAE,QAAA,IAEAgL,EAAA,EAAAA,EAAA8R,EAAAhvB,OAAAkd,IAAA,CAEA,GAAAgS,GAAAxW,EAAAkT,gBAAA,KAAAoD,EAAA9R,GAAA1H,EAAAC,EAAAF,EAAAmD,EAAAqN,OACAmJ,KACAD,EAAAA,EAAAD,EAAA9R,GAAA,IAAAgS,GAIAJ,EAAApW,EAAAqP,WAAAoH,WAAAF,GAGA,GAAAH,EACA,MAAAA,EAGA,IAAAxtB,EAAAU,OAAAC,QAAA,4BAAA,IACA,YAAA+P,EAAAE,QAAA,CAEA,KAAAkd,GAAAxU,EAAAyU,UAAA3W,EAAAqP,WAAAoH,WAAAnd,EAAAE,SAAA,SAAAuL,GAAA,MAAA,YAAAA,EAAArQ,MACAgiB,GAAA,IACA1W,EAAAqP,WAAAoH,WAAAnd,EAAAE,SAAAqb,OAAA6B,EAAA,EAEA,MAAAE,GAAA1U,EAAAyU,UAAA3W,EAAAqP,WAAAoH,WAAAnd,EAAAE,SAAA,SAAAuL,GAAA,MAAA,oBAAAA,EAAArQ,MACAkiB,GAAA,IACA5W,EAAAqP,WAAAoH,WAAAnd,EAAAE,SAAAqb,OAAA+B,EAAA,GAKA,MAAA5W,GAAAqP,WAAAoH,WAAAnd,EAAAE,SAGA,MAAAF,GAAAE,SAIAwG,EAAA6W,gBAAA,WAEA,MAAAC,QAAAjuB,EAAA8gB,aAAAoN,cAAAC,OAAAhX,EAAAlX,UAAAuF,qBAGA2R,EAAAoO,kBAAA,WAEA,MAAA,wBAAApO,EAAA1U,SAAA,YAAA0U,EAAA1U,QACA0U,EAAAiX,sCAKAjX,EAAAsN,iBAAA,QAIAxlB,QAAAovB,OAAAlX,EAAAsN,iBAAAtN,EAAAvC,WAHAuC,EAAAmX,2BAAAnX,EAAAwS,UAAAxS,EAAA1U,UAOA0U,EAAAsD,IAAA,uBAAA,SAAAzH,GACA,GAAAub,GAAAxuB,EAAA6oB,OAAA4F,MAAA,EAGA,IAAAD,GAAAtuB,EAAAiB,IAAAkF,uBACAmoB,GAAAtuB,EAAAiB,IAAAiB,4BACAosB,GAAAtuB,EAAAiB,IAAAE,2BACAmtB,GAAAtuB,EAAAiB,IAAAkB,SACAmsB,GAAAtuB,EAAAiB,IAAAoB,SACAisB,GAAAtuB,EAAAiB,IAAAyF,mCACA4nB,GAAAtuB,EAAAiB,IAAA+F,qCACAsnB,GAAAtuB,EAAAiB,IAAAM,QAKA2V,EAAAmO,kBAAA,EAMA,GAAAiJ,GAAAtuB,EAAAiB,IAAAC,iBAAAotB,GAAAtuB,EAAAiB,IAAAK,kBAAAgtB,GAAAtuB,EAAAiB,IAAA+E,OACA,WAAAkR,EAAA1U,SAAA,aAAA0U,EAAA1U,SAAA,oBAAA0U,EAAA1U,SACA2W,SAAAjC,EAAAjV,cACA,cAAAiV,EAAA1U,SACA,wBAAA0U,EAAA1U,SACA,YAAA0U,EAAA1U,SACA,YAAA0U,EAAA1U,SACA,wBAAA0U,EAAA1U,QAOA,CAEA,IAAA0U,EAAAsX,yBAEA,WADAzb,GAAAgD,gBAKA,IAAAhD,EAAA0b,aAAAja,KAAAka,6BAAA,GACAxX,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAA,KAAA,KAAA,KAAA,WAKA,GAAA8rB,GAAAtuB,EAAAiB,IAAAC,iBAAAotB,GAAAtuB,EAAAiB,IAAAK,kBAAAgtB,GAAAtuB,EAAAiB,IAAA+E,MAAA,CACA,GAAAkR,EAAA0X,gCAAAN,GACA,MAGAvb,GAAAgD,iBACAmB,EAAAtC,QAAAgL,UAAA,mCAKA7M,GAAAgD,iBACAmB,EAAA2X,sBA9BA3X,GAAAoO,sBACAvS,EAAAgD,iBACAmB,EAAAkO,wBAmCAlO,EAAA0X,gCAAA,SAAAN,GACA,IAEA,GAAAQ,GAAAR,EAAAlpB,MAAA,IACA,IAAA,GAAA0pB,EAAAtwB,OAAA,CACA,GAAA+V,GAAA6E,EAAAmO,KAAArQ,EAAAqP,WAAA8B,eAAA,SAAAzM,GAAA,MAAAA,GAAAnH,QAAAuL,SAAA8O,EAAA,KACA,IAAAva,EAAA,CACA,GAAAwa,GAAA3V,EAAAmO,KAAAhT,EAAAgU,MAAA,SAAA3M,GAAA,MAAAA,GAAAkI,KAAAgL,EAAA,IACA,IAAAC,EAAA,CACA,GAAAA,EAAAC,2BAEA,IAAA,GADAC,GAAAF,EAAAC,2BAAA5pB,MAAA,KACAsW,EAAA,EAAAA,EAAAuT,EAAAzwB,OAAAkd,IACA,GAAAxE,EAAAuS,eAAAhpB,QAAAwuB,EAAAvT,IAAA,EACA,OAAA,CAIA,QAAA,QAIA,IAAA5b,EAAAU,OAAAC,QAAA,QAAA,GAAA,CACA,GAAA8T,GAAA6E,EAAAmO,KAAArQ,EAAAqP,WAAA8B,eAAA,SAAAzM,GAAA,MAAAA,GAAAnH,QAAAuL,SAAA8O,EAAA,KACA,IAAAva,EAAA,CACA,GAAAwa,GAAA3V,EAAAmO,KAAAhT,EAAAgU,MAAA,SAAA3M,GAAA,MAAAA,GAAAkI,KAAAgL,EAAA,IACA,IAAAC,EAAA,CACA,GAAAA,EAAAC,2BAEA,IAAA,GADAC,GAAAF,EAAAC,2BAAA5pB,MAAA,KACAsW,EAAA,EAAAA,EAAAuT,EAAAzwB,OAAAkd,IACA,GAAAxE,EAAAuS,eAAAhpB,QAAAwuB,EAAAvT,IAAA,EACA,OAAA,CAIA,QAAA,QAIA,IAAA5b,EAAAU,OAAAC,QAAA,MAAA,GAAA,CACA,GAAA8T,GAAA6E,EAAAmO,KAAArQ,EAAAqP,WAAA8B,eAAA,SAAAzM,GAAA,MAAAA,GAAAnH,QAAAuL,SAAA8O,EAAA,KACA,IAAAva,EAAA,CACA,GAAAwa,GAAA3V,EAAAmO,KAAAhT,EAAAgU,MAAA,SAAA3M,GAAA,MAAAA,GAAAkI,KAAAgL,EAAA,IACA,IAAAC,EAAA,CACA,GAAAA,EAAAC,2BAEA,IAAA,GADAC,GAAAF,EAAAC,2BAAA5pB,MAAA,KACAsW,EAAA,EAAAA,EAAAuT,EAAAzwB,OAAAkd,IACA,GAAAxE,EAAAuS,eAAAhpB,QAAAwuB,EAAAvT,IAAA,EACA,OAAA,CAIA,QAAA,IAIA,OAAA,EAEA,MAAAiH,GAEA,OAAA,IAKAzL,EAAAgY,gBAAA,SAAAC,EAAA9O,EAAAnM,GASA,GAPAmM,EAAAnM,EAAA,eAAAiF,OACAkH,EAAAnM,EAAA,cAAAiF,OACAkH,EAAAnM,EAAA,cAAAiF,OACAkH,EAAAnM,EAAA,iBAAAiF,OACAkH,EAAAnM,EAAA,QAAAiF,OACAkH,EAAAnM,EAAA,yBAAAiF,OAEAgW,EAAA,CAGA,IAAA,GAFAC,GAAA,GAEA1T,EAAA,EAAAA,EAAAyT,EAAA3wB,OAAAkd,IAAA,CACA,GAAA2T,GAAAF,EAAAzT,GAAAnI,MAAA,EACA,kBAAA8b,IACAD,GAAAD,EAAAzT,GAAA4T,UAAA,KAEA,SAAAH,EAAAzT,GAAAnI,MAAA,KACA6b,GAAAD,EAAAzT,GAAA4T,WAEA,YAAAD,IACAhP,EAAAnM,EAAA,eAAAib,EAAAzT,GAAA4T,WAEA,+BAAAD,IACAhP,EAAAnM,EAAA,cAAAib,EAAAzT,GAAA4T,UACAjP,EAAAnM,EAAA,cAAAib,EAAAzT,GAAA6T,YAEA,eAAAF,IACAhP,EAAAnM,EAAA,iBAAAib,EAAAzT,GAAA4T,WAEA,+BAAAD,IACAhP,EAAAnM,EAAA,QAAAib,EAAAzT,GAAA6T,YAIAlP,EAAAnM,EAAA,yBAAAkb,IAKAlY,EAAAyX,aAAA,SAAAjF,EAAAlnB,EAAAuR,EAAAC,EAAAC,EAAApD,EAAA2e,EAAAC,GACA,GAAAC,IAAA,EACAlb,EAAAmb,EAAAjG,EAAAlnB,EACA,IAAA0U,EAAA9E,MAAAoC,EAAAmW,UAAA,SAAA,EACA,OAAA,CAEA,IAAAF,GAAArR,EAAAmO,KAAAnO,EAAAmO,KAAArQ,EAAAqP,WAAA8B,eAAA,SAAAzM,GAAA,MAAAA,GAAAnH,QAAAiV,IAAAnB,MAAA,SAAAoB,GAAA,MAAAA,GAAA7F,KAAAthB,IAAAioB,QACA,IAAAA,EAAA,CAGA,OAAA+E,GAAArW,SAAAqW,IAEAtY,EAAAiP,iBAAA3nB,OAAA,EAGA,IAAAoxB,GAAA,IAEAA,GADA,MAAA/e,GAAAsI,QAAAtI,EACA,UAEAA,CAGA,IAAAgf,GAAA3Y,EAAAqN,MAEA,IAAArN,EAAAvC,UAAAkb,GACA,IAAA,GAAAC,GAAA,EAAAA,EAAA5Y,EAAAvC,UAAAkb,GAAArxB,OAAAsxB,IACA,GAAA,MAAA/b,GAAAA,GAAA+b,EACA,IAAA,GAAAnU,GAAA,EAAAA,EAAA8O,EAAAjsB,OAAAmd,IAAA,CACA,GAAA+O,GAAAD,EAAA9O,EACA,KAAA,MAAA3H,GAAA0W,EAAA9e,MAAAoI,IACAkD,EAAAvC,UAAAkb,GAAAC,GAAApF,EAAA9e,MACA,IAAA,GAAAggB,GAAA,EAAAA,EAAA1U,EAAAvC,UAAAkb,GAAAC,GAAApF,EAAA9e,MAAApN,OAAAotB,IACA,MAAA3X,GAAAA,GAAA2X,GACAlB,EAAAC,WAAAzT,EAAA9E,MAAAsY,EAAAC,WAAAoF,GAAA7Y,EAAAiT,kBAAA2F,EAAA,EAAApF,EAAA9e,WAAA,GACA8J,EAAA0S,KAAAsC,EAAAna,UAAA,WACAmf,EAAAxY,EAAA8Y,sBAAAJ,EAAAvwB,KAAAywB,EAAAlE,EAAAlB,EAAA9e,KAAA6jB,IAAAC,KAcA,GAAAA,EACA,KAAAxY,EAAAuS,eAAAhpB,QAAAovB,IACA3Y,EAAAuS,eAAAtT,KAAA0Z,OAGA,CACA,GAAAvxB,GAAA4Y,EAAAuS,eAAAhpB,QAAAovB,EACAvxB,GAAA,IACA4Y,EAAAuS,eAAAsC,OAAAztB,EAAA,GAGA,MAAAoxB,IAIAxY,EAAAmX,2BAAA,SAAA3E,EAAAlnB,GACA,GAAAytB,IAAA,EAEAxF,EAAArR,EAAAmO,KAAAnO,EAAAmO,KAAArQ,EAAAqP,WAAA8B,eAAA,SAAAzM,GAAA,MAAAA,GAAAnH,QAAAiV,IAAAnB,MAAA,SAAAoB,GAAA,MAAAA,GAAA7F,KAAAthB,IAAAioB,QACA,IAAAA,GACAvT,EAAAvC,UAAAuC,EAAAqN,QACA,IAAA,GAAAuL,GAAA,EAAAA,EAAA5Y,EAAAvC,UAAAuC,EAAAqN,QAAA/lB,OAAAsxB,IAEA,IAAA,GAAAnU,GAAA,EAAAA,EAAA8O,EAAAjsB,OAAAmd,IAAA,CACA,GAAA+O,GAAAD,EAAA9O,EAEA,IAAAzE,EAAAvC,UAAAuC,EAAAqN,QAAAuL,GAAApF,EAAA9e,MACA,IAAA,GAAAggB,GAAA,EAAAA,EAAA1U,EAAAvC,UAAAuC,EAAAqN,QAAAuL,GAAApF,EAAA9e,MAAApN,OAAAotB,IACAlW,EAAA0S,KAAAsC,EAAAna,UAAA,WAEA,GAAAC,GAAAnR,IACA,OAAA6X,GAAAqT,SAAArT,EAAAiT,kBAAA2F,EAAAlE,EAAAlB,EAAA9e,MAAA4E,EAAA5E,SAAA,GACAqkB,GAAA,GACA,GAFA,SAaA,MAAAA,IAKA/Y,EAAA8Y,sBAAA,SAAAnf,EAAAL,EAAAuD,EAAAE,EAAAD,EAAAyb,GACA,GAAAC,IAAA,CAqBA,OAnBAlf,GAAAma,WAAAzT,EAAA9E,MAAA5B,EAAAma,WAAAoF,GAAA7Y,EAAAiT,kBAAApW,EAAAE,EAAAD,QAAA,GACAxD,EAAAI,aAAA,MAAAJ,EAAA0f,QACAxa,EAAA0S,KAAA5X,EAAAI,YAAA,WAEA,MAAA6e,MAAA,GACApwB,KAAAyR,KAAArQ,QAAA,YAAA,GADA,OAKApB,KAAAwR,OAAAA,EAAA0R,eACA,GAAArL,EAAA9E,MAAA/S,KAAAyR,MAAAif,GAAA7Y,EAAAiT,kBAAApW,EAAAE,EAAAD,EAAAkD,EAAAqN,WACAmL,GAAA,EACAxY,EAAAiZ,mBAAA9wB,KAAAwR,MAAAqG,EAAAqN,OAAAxQ,EAAAE,EAAAD,EAAAxD,EAAA5E,KAAAvM,KAAA+wB,iBAAA5f,EAAA6f,cAAA7f,EAAA6f,cAAA7f,EAAAA,SAAAnR,KAAA0R,eAAA1R,KAAA2R,gBACA,GAJA,SAUA0e,GAIAxY,EAAAiQ,iBAAA,SAAAtW,EAAAL,EAAAuD,EAAAE,EAAAD,GACA,GAAA0b,IAAA,CAgBA,OAbAlf,GAAAma,WAAAzT,EAAA9E,MAAA5B,EAAAma,WAAAoF,GAAA7Y,EAAAiT,kBAAApW,EAAAE,EAAAD,QAAA,GACAxD,EAAAI,aAAA,MAAAJ,EAAA0f,QACAxa,EAAA0S,KAAA5X,EAAAI,YAAA,WACA,MAAAvR,MAAAwR,OAAAA,EAAA0R,eAAA,WAAA1R,EAAA0R,eACA,GAAArL,EAAA9E,MAAA/S,KAAAyR,MAAAif,GAAA7Y,EAAAiT,kBAAApW,EAAAE,EAAAD,KADA,QAEA0b,GAAA,EACAxY,EAAAiZ,mBAAA9wB,KAAAwR,MAAAqG,EAAAqN,OAAAxQ,EAAAE,EAAAD,EAAAxD,EAAA5E,KAAAvM,KAAA+wB,iBAAA5f,EAAA6f,cAAA7f,EAAA6f,cAAA7f,EAAAA,SAAAnR,KAAA0R,eAAA1R,KAAA2R,gBACA,KAMA0e,GAIAxY,EAAAoZ,uBAAA,SAAAzf,EAAAL,EAAAuD,EAAAE,EAAAD,GAEAkD,EAAAtC,QAAAC,2BAAA,KAAAqC,EAAAqN,OAAAxQ,EAAAC,EAAAC,EAAAzD,EAAA5E,MACAsL,EAAAiQ,iBAAAtW,EAAAL,EAAAuD,EAAAE,EAAAD,IAIAkD,EAAAiZ,mBAAA,SAAAtf,EAAA+b,EAAA7Y,EAAAE,EAAAD,EAAAE,EAAAkc,EAAAC,EAAAtf,EAAAC,GACAkG,EAAAiP,iBAAAhQ,MACAtF,MAAAA,EACA+b,OAAAA,EACA2D,UAAAxc,EACAyc,YAAAxc,EACAyc,aAAAxc,EACAyc,aAAAxc,EACAkc,iBAAAA,EACAC,cAAAA,EACAtf,eAAAA,EACAC,cAAAA,KAKAkG,EAAAyZ,cAAA,SAAA9f,EAAAL,EAAAuD,EAAAE,EAAAD,GAGAkD,EAAAtC,QAAAC,2BAAAhE,EAAAqG,EAAAqN,OAAAxQ,EAAAC,EAAAC,EAAAzD,EAAA5E,MAGA4E,EAAAogB,gBACA1Z,EAAA9E,MAAA5B,EAAAogB,iBAKA1Z,EAAA2Z,cAAA,SAAA3c,EAAAH,EAAAE,EAAAD,GACA,GAAArJ,GAAAoT,EAAA,UAAA7G,EAAAiP,kBACAuK,aAAAxc,EAAAqc,UAAAxc,EAAA0c,aAAAxc,EAAAuc,YAAAxc,IACA,EAEAkD,GAAAtC,QAAAyS,sBAAAnQ,EAAA4Z,cAAA5c,EAAAH,EAAAE,EAAAD,GAAArJ,EAAAnM,OAAA,IAIA0Y,EAAA2X,gBAAA,WACA,GAAA3X,EAAAiP,iBAAA3nB,OAAA,EAAA,CACA,GAAAU,GAAAgY,EAAAiP,iBAAA,EACAjnB,GAAAkxB,iBACAlZ,EAAAtC,QAAAgL,UAAA1I,EAAAiP,iBAAA,GAAAiK,kBAAAzO,OAAAvhB,KAAA,SAAAuhB,GACAzK,EAAA6Z,qBAIA7Z,EAAAwV,yBAMAxV,EAAA6Z,iBAAA,WACA,GAAA7Z,EAAAiP,iBAAA3nB,OAAA,EAAA,CACA,GAAAU,GAAAgY,EAAAiP,iBAAA,EACAjP,GAAAsV,SAAAtV,EAAA4Z,cAAA5xB,EAAAwxB,aAAAxxB,EAAAqxB,UAAArxB,EAAAuxB,aAAAvxB,EAAAsxB,gBAKAtZ,EAAA8Z,aAAA,SAAAzuB,EAAA2R,EAAA+c,EAAAC,EAAAld,EAAAC,EAAAF,GACA,MAAA4J,GAAAqT,aAAAzuB,EAAA2U,EAAAvC,UAAAT,EAAA+c,EAAAC,EAAAld,EAAAC,EAAAF,EAAAmD,EAAAqN,SAIArN,EAAAia,gBAAA,SAAA5uB,EAAA2R,EAAAF,EAAAC,EAAAF,GACA,MAAA4J,GAAAwT,gBAAA5uB,EAAA2U,EAAAvC,UAAAT,EAAAF,EAAAC,EAAAF,EAAAmD,EAAAqN,SAIArN,EAAAka,kBAAA,SAAA7uB,EAAA2R,EAAAF,EAAAC,EAAAF,GACA,MAAA4J,GAAAyT,kBAAA7uB,EAAA2U,EAAAvC,UAAAT,EAAAF,EAAAC,EAAAF,EAAAmD,EAAAqN,SAIArN,EAAAma,UAAA,SAAA9uB,EAAA2R,EAAAF,EAAAC,EAAAF,EAAAwQ,GACA,MAAA5G,GAAA0T,UAAA9uB,EAAA2U,EAAAvC,UAAAT,EAAAF,EAAAC,EAAAF,EAAAwQ,GAAArN,EAAAqN,SAIArN,EAAAoa,kBAAA,SAAA/uB,EAAA2R,EAAAqd,EAAAvd,EAAAC,EAAAF,EAAAwQ,GACA,MAAA5G,GAAA2T,kBAAA/uB,EAAA2U,EAAAvC,UAAAT,EAAAqd,EAAAvd,EAAAC,EAAAF,EAAAwQ,GAAArN,EAAAqN,SAIArN,EAAAsa,qBAAA,SAAAC,EAAAC,GACA,MAAA/T,GAAA6T,qBAAAC,EAAAC,IAIAxa,EAAAya,eAAA,SAAApvB,EAAA2R,EAAAF,EAAAC,EAAAF,GACA,MAAA4J,GAAAgU,eAAApvB,EAAA2U,EAAAvC,UAAAT,EAAAF,EAAAC,EAAAF,EAAAmD,EAAAqN,SAIArN,EAAA0a,QAAA,SAAArvB,EAAA2R,EAAAF,EAAAC,EAAAF,GACA,MAAA4J,GAAAiU,QAAArvB,EAAA2U,EAAAvC,UAAAT,EAAAF,EAAAC,EAAAF,EAAAmD,EAAAqN,SAKArN,EAAA2a,wBAAA,SAAAC,EAAAC,EAAApH,GACA,GAAAA,KAAA,EAIA,GAHA5qB,EAAAiyB,YAAAlyB,EAAA6oB,OAAA4F,MAAA,GAGArX,EAAA1C,KAAAqU,cAGA,CACA,GAAAC,GAAA,WAAAhpB,EAAAU,KAAAyxB,IAAA,IAAAH,EAAA,IAAAC,IACAhJ,EAAA,WAAA7R,EAAAtC,QAAAgL,UAAA1I,EAAA1C,KAAAwU,oBACA9R,GAAA9E,MAAA8E,EAAA1C,KAAAqU,eAAAC,gBAAAA,EAAAC,gBAAAA,EAAAE,YAAA8I,QALAjyB,GAAAU,KAAAyxB,IAAA,IAAAH,EAAA,IAAAC,OASA7a,GAAAgb,gBAKAhb,EAAAgb,aAAA,WAEA,GAAAhb,EAAA1C,KAAAqU,cAGA,CACA,GAAAC,GAAA,WAAAqJ,KACApJ,EAAA,WAAA7R,EAAAtC,QAAAgL,UAAA1I,EAAA1C,KAAAwU,oBACA9R,GAAA9E,MAAA8E,EAAA1C,KAAAqU,eAAAC,gBAAAA,EAAAC,gBAAAA,QALAoJ,MAUAjb,EAAAkb,iBAAA,WAEA,GAAAlb,EAAA1C,KAAAqU,cAGA,CACA,GAAAC,GAAA,WAAAuJ,KACAtJ,EAAA,WAAA7R,EAAAtC,QAAAgL,UAAA1I,EAAA1C,KAAAwU,oBACA9R,GAAA9E,MAAA8E,EAAA1C,KAAAqU,eAAAC,gBAAAA,EAAAC,gBAAAA,QALAsJ,MAUAnb,EAAAob,oBAAA,WACAxyB,EAAAU,KAAAT,EAAAiyB,aACAjyB,EAAAiyB,YAAA7Y,QAIAjC,EAAA4Z,cAAA,SAAA5c,EAAAH,EAAAE,EAAAD,GACA,MAAAE,GAGAH,EAAA,IAAAC,EAAA,IAAAC,EAAA,IAAAC,EAFA,IAMAgD,EAAAqb,kBAAA,SAAA/hB,GACA,QAAA1Q,EAAAU,OAAAC,QAAA,6BAAA,IACA,mCAAA+P,EAAA5E,OAOAsL,EAAAsb,eAAA,SAAAhiB,EAAAiiB,GAgCA,MA9BA3yB,GAAAU,OAAAC,QAAA,0BAAA,IACA,cAAA+P,EAAA5E,OACA6mB,EAAAC,YAAA,87BAaA5yB,EAAAU,OAAAC,QAAA,iBAAA,KACA,mCAAA+P,EAAA5E,OACA6mB,EAAAC,YAAA,sLAGA,wBAAAliB,EAAA5E,OACA6mB,EAAAC,YAAA,iFAEA,yBAAAliB,EAAA5E,OACA6mB,EAAAC,YAAA,iIAMAD,EAAAC,aAKAxb,EAAAyb,cAAA,SAAAC,EAAAC,GACA,MAAA3b,GAAA1C,KAAAse,QACA5b,EAAA1C,KAAAse,QAAA5V,OAAA,SAAAtB,GAAA,MAAAiX,GAAAjX,EAAAgX,UAAAA,EAAAhX,EAAAgX,UAAAA,IAEA,MAKA1b,EAAA6b,YAAA,SAAA5qB,GACA6R,SAAA6F,eAAA1X,GAAA0K,SAIAqE,EAAA8b,aAAA,SAAAxe,EAAA7J,GACA6J,EAAA4W,cACAlU,EAAA+b,iBAAA/b,EAAAqN,QAAA,GAAArN,EAAAgc,iBAAAvoB,EAAA4lB,YAAAvwB,EAAAmL,mBAAAG,SAEA4L,EAAAic,aAAAxoB,EAAA4lB,WAEA/b,EAAA4e,YAAA5e,EAAA6e,8BAEAnc,EAAAsV,SAAAhY,EAAA6e,8BAIA,IAAA3I,GAAA3M,EAAA,UAAAvJ,EAAAiW,UAAA7e,KAAAjB,EAAA6lB,cAAA,GAAA,EACA9F,IAAAA,EAAAU,aAEAlU,EAAAoc,gBAAA3oB,EAAA4lB,UAAA5lB,EAAA8lB,aAAA9lB,EAAA6lB,aAIA7lB,EAAA6lB,aACAtZ,EAAAsV,SAAAtV,EAAA4Z,cAAAnmB,EAAA+lB,aAAA/lB,EAAA4lB,UAAA5lB,EAAA8lB,aAAA9lB,EAAA6lB,eAKAtZ,EAAAgc,iBAAA,SAAAnf,GACA,GAAAmD,EAAAvC,UAAAuC,EAAAqN,QAAA,CACA,GAAA7E,GAAAxI,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,EACA,IAAA2L,EACA,MAAAA,GAAA6T,SAOArc,EAAAsc,iBAAA,SAAAzf,EAAAgD,GACAG,EAAAvC,UAAAuC,EAAAqN,SACArN,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,KACAmD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAwf,OAAAxc,IAMAG,EAAAuc,iBAAA,WACA,GAAAvc,EAAAvC,UAAAuC,EAAAqN,QAAA,CACA,GAAAmP,GAAA3V,EAAA,UAAA7G,EAAAvC,UAAAuC,EAAAqN,SAAAgP,OAAAvzB,EAAAmL,mBAAAC,SAAA,EACA,IAAAsoB,GAAAA,EAAAl1B,OAAA,EACA,OAAA,EAGA,OAAA,GAIA0Y,EAAAyc,YAAA,WAEA,GAAAC,IACAzrB,GAAA0rB,IAGA3c,GAAAvC,UAAAuC,EAAAqN,QAIArN,EAAAvC,UAAAuC,EAAAqN,QAAApO,KAAAyd,GAHA1c,EAAAvC,UAAAuC,EAAAqN,SAAAqP,EAMA,IAAApf,GAAAmb,EAAAzY,EAAAwS,UAAAxS,EAAA1U,SAEAuR,EAAAmD,EAAAvC,UAAAuC,EAAAqN,QAAA/lB,OAAA,CAGA,IAAA2a,QAAA3E,EAAAiW,SACA,IAAA,GAAA9O,GAAA,EAAAA,EAAAnH,EAAAiW,SAAAjsB,OAAAmd,IAAA,CACA,GAAA+O,GAAAlW,EAAAiW,SAAA9O,EACA+O,GAAAU,aACAjS,QAAAjC,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAA2W,EAAA9e,QACAsL,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAA2W,EAAA9e,YAOAsL,EAAAsT,wBAAAhW,EAAAT,GAGAmD,EAAAsc,iBAAAzf,EAAA/T,EAAAmL,mBAAAC,QAGA8L,EAAA4S,eAAA/V,GAAA/U,QAAAylB,KAAAvN,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,IAEAmD,EAAA4c,kBAAAtf,EAAAT,EAAA,KAAA,IAIAmD,EAAA6c,gBAAA,SAAAhgB,GACAmD,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAAuR,IACAmD,EAAAsc,iBAAAzf,EAAA/T,EAAAmL,mBAAAG,SAGA4L,EAAA4S,eAAA/V,GAAA/U,QAAAylB,KAAAvN,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,IAGAmD,EAAAtC,QAAA/B,MAAA,qBAGAqE,EAAA2X,mBAKA3X,EAAA8c,kBAAA,SAAAjgB,GAEAmD,EAAAtC,QAAAC,2BAAA,KAAAqC,EAAAqN,OAAAxQ,EAAA,KAAA,KAAA,MAGAmD,EAAAvC,UAAAuC,EAAAqN,QAAAwH,OAAAhY,EAAA,GACA,GAAAmD,EAAAvC,UAAAuC,EAAAqN,QAAA/lB,cACA0Y,GAAAvC,UAAAuC,EAAAqN,QAIArN,EAAA4S,eAAAiC,OAAAhY,EAAA,GAGAmD,EAAAwU,0BAAA3X,GAGAmD,EAAAtC,QAAA/B,MAAA,qBAIAqE,EAAA+c,qBAAA,SAAAlgB,GACAmD,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAAuR,IACAmD,EAAAsc,iBAAAzf,EAAA/T,EAAAmL,mBAAAG,SAGA4L,EAAA4S,eAAA/V,GAAA/U,QAAAylB,KAAAvN,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,IAGAmD,EAAAtC,QAAA/B,MAAA,YAAAkB,IAGAmD,EAAA2X,mBAKA3X,EAAAgd,uBAAA,SAAAngB,GAEAmD,EAAAtC,QAAAC,2BAAA,KAAAqC,EAAAqN,OAAAxQ,EAAA,KAAA,KAAA,MAEAmD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAA/U,QAAAylB,KAAAvN,EAAA4S,eAAA/V,IAEAmD,EAAAsc,iBAAAzf,EAAA/T,EAAAmL,mBAAAG,SAGA4L,EAAAtC,QAAA/B,MAAA,YAAAkB,IAIAmD,EAAAic,aAAA,SAAApf,GACAmD,EAAAsc,iBAAAzf,EAAA/T,EAAAmL,mBAAAE,SAGA6L,EAAA4S,eAAA/V,GAAA/U,QAAAylB,KAAAvN,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAEA,IAAAS,GAAAmb,EAAAzY,EAAAwS,UAAAxS,EAAA1U,QACA0U,GAAA4c,kBAAAtf,EAAAT,EAAA,KAAA,IAIAmD,EAAAid,eAAA,SAAApgB,EAAAqgB,GAGA,GAAA7xB,GAAA2U,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,EACAmD,GAAAtC,QAAAgL,UAAAwU,EAAA7xB,GAAAof,OAAAvhB,KAAA,SAAAuhB,GAGAzK,EAAAvC,UAAAuC,EAAAqN,QAAAwH,OAAAhY,EAAA,GACA,GAAAmD,EAAAvC,UAAAuC,EAAAqN,QAAA/lB,cACA0Y,GAAAvC,UAAAuC,EAAAqN,QAIArN,EAAA4S,eAAA/V,IACAmD,EAAA4S,eAAAiC,OAAAhY,EAAA,GAIAmD,EAAAwU,0BAAA3X,GAGAmD,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QACA,IAAAgS,GAAAmb,EAAAzY,EAAAwS,UAAAxS,EAAA1U,QAGAgS,GAAA6W,uBAAA,GAAAtX,GAAA,IAAAmD,EAAA+b,iBAAA/b,EAAAqN,QACArN,EAAAyc,cAEAzc,EAAAtC,QAAA/B,MAAA,uBASAqE,EAAAmd,oBAAA,SAAAtgB,EAAAE,EAAAD,GACA,GAAAkD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAA,CACA,GAAA0L,GAAAxI,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,EACA,IAAAyL,EACA,MAAAA,GAAA6T,SAOArc,EAAAod,oBAAA,SAAAvgB,EAAAE,EAAAD,EAAA+C,GACAG,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,IACAkD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,KACAiD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,GAAAsf,OAAAxc,IAMAG,EAAAqd,oBAAA,SAAAxgB,EAAAC,GACA,GAAAkD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAA,CACA,GAAA0f,GAAA3V,EAAA,UAAA7G,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,IAAAuf,OAAAvzB,EAAAmL,mBAAAC,SAAA,EACA,IAAAsoB,GAAAA,EAAAl1B,OAAA,EACA,OAAA,EAGA,OAAA,GAIA0Y,EAAAoU,eAAA,SAAAvX,EAAAC,EAAAwgB,GAEAtd,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAIAkD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAmC,SAHAe,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,OAOA,IAAAQ,GAAAmb,EAAAzY,EAAAwS,UAAAxS,EAAA1U,SACAkoB,EAAA3M,EAAA,UAAAvJ,EAAAiW,UACA7e,KAAAoI,IACA,GAAA,GACAC,EAAAiD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAxV,OAAA,CACA0Y,GAAA6T,2BAAAL,EAAA3W,EAAAE,GAGAiD,EAAAod,oBAAAvgB,EAAAmD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAxV,OAAA,EAAAwV,EAAAhU,EAAAmL,mBAAAC,QAGA8L,EAAA4S,eAAA/V,KACAmD,EAAA4S,eAAA/V,OAEAmD,EAAA4S,eAAA/V,GAAAC,KACAkD,EAAA4S,eAAA/V,GAAAC,OAEAkD,EAAA4S,eAAA/V,GAAAC,GAAAC,KACAiD,EAAA4S,eAAA/V,GAAAC,GAAAC,GAAAjV,QAAAylB,KAAAvN,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,KAGAugB,GACAtd,EAAA4c,kBAAA5c,EAAA1C,KAAAT,EAAA,KAAA,IAKAmD,EAAAud,mBAAA,SAAA1gB,EAAAE,EAAAD,GACAkD,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAAuR,EAAAC,EAAAC,IACAiD,EAAAod,oBAAAvgB,EAAAE,EAAAD,EAAAhU,EAAAmL,mBAAAG,SAGA4L,EAAA4S,eAAA/V,GAAAC,GAAAC,GAAAjV,QAAAylB,KAAAvN,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,IAEAiD,EAAAtC,QAAA/B,MAAA,uBAAAkB,EAAA,IAAAC,IAGAkD,EAAA2X,mBAKA3X,EAAAwd,qBAAA,SAAA3gB,EAAAE,EAAAD,GAGAkD,EAAAtC,QAAAC,2BAAA,KAAAqC,EAAAqN,OAAAxQ,EAAAC,EAAAC,EAAA,MAGAiD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAA+X,OAAA9X,EAAA,GACA,GAAAiD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAxV,cACA0Y,GAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAIAkD,EAAA4S,eAAA/V,GAAAC,GAAA+X,OAAA9X,EAAA,GAGAiD,EAAA2U,6BAAA9X,EAAAC,EAAAC,GAEAiD,EAAAtC,QAAA/B,MAAA,uBAAAkB,EAAA,IAAAC,IAIAkD,EAAAyd,wBAAA,SAAA5gB,EAAAE,EAAAD,GACAkD,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAAuR,EAAAC,EAAAC,EAAAkF,QAAA,EAAAA,SACAjC,EAAAod,oBAAAvgB,EAAAE,EAAAD,EAAAhU,EAAAmL,mBAAAG,SAGA4L,EAAA4S,eAAA/V,GAAAC,GAAAC,GAAAjV,QAAAylB,KAAAvN,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,IAEAiD,EAAAtC,QAAA/B,MAAA,eAAAkB,EAAA,IAAAC,EAAA,IAAAC,IAGAiD,EAAA2X,mBAKA3X,EAAA0d,0BAAA,SAAA7gB,EAAAE,EAAAD,GAGAkD,EAAAtC,QAAAC,2BAAA,KAAAqC,EAAAqN,OAAAxQ,EAAAC,EAAAC,EAAA,MAGAiD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,GAAAjV,QAAAylB,KAAAvN,EAAA4S,eAAA/V,GAAAC,GAAAC,IAEAiD,EAAAod,oBAAAvgB,EAAAE,EAAAD,EAAAhU,EAAAmL,mBAAAG,SAEA4L,EAAAtC,QAAA/B,MAAA,eAAAkB,EAAA,IAAAC,EAAA,IAAAC,IAIAiD,EAAAoc,gBAAA,SAAAvf,EAAAE,EAAAD,GACAkD,EAAAod,oBAAAvgB,EAAAE,EAAAD,EAAAhU,EAAAmL,mBAAAE,SAGA6L,EAAA4S,eAAA/V,KACAmD,EAAA4S,eAAA/V,OAEAmD,EAAA4S,eAAA/V,GAAAC,KACAkD,EAAA4S,eAAA/V,GAAAC,OAGAkD,EAAA4S,eAAA/V,GAAAC,GAAAC,GAAAjV,QAAAylB,KAAAvN,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,GAEA,IAAAO,GAAAmb,EAAAzY,EAAAwS,UAAAxS,EAAA1U,QACA0U,GAAA4c,kBAAAtf,EAAAT,EAAAC,EAAAC,IAIAiD,EAAA2d,kBAAA,SAAA9gB,EAAAE,EAAAD,EAAAogB,GACA,GAAA7xB,GAAA2U,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,EAGAiD,GAAAtC,QAAAgL,UAAAwU,EAAA7xB,GAAAof,OAAAvhB,KAAA,SAAAuhB,GAgBA,GAbAzK,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAA+X,OAAA9X,EAAA,GACA,GAAAiD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAxV,cACA0Y,GAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAIAkD,EAAA4S,eAAA/V,IAAAmD,EAAA4S,eAAA/V,GAAAC,IAAAkD,EAAA4S,eAAA/V,GAAAC,GAAAC,IACAiD,EAAA4S,eAAA/V,GAAAC,GAAA+X,OAAA9X,EAAA,GAIAiD,EAAA2U,6BAAA9X,EAAAC,EAAAC,GAEAiD,EAAA1C,KAAAiW,SAAA,CACA,GAAAC,GAAA3M,EAAA,UAAA7G,EAAA1C,KAAAiW,UAAA7e,KAAAoI,IAAA,EACA0W,GAAAlsB,QAAAksB,EAAA,GAAAW,uBACA,IAAAnU,EAAA4d,oBAAA5d,EAAAqN,OAAAvQ,EAAAD,IACAmD,EAAAoU,eAAAvX,EAAAC,GAAA,OAKAkD,GAAAtC,QAAA/B,MAAA,uBAAAkB,EAAA,IAAAC,MAOAkD,EAAA6d,iBAAA,SAAAhhB,EAAAC,EAAAC,EAAAC,GACAgD,EAAAvC,WAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,GAAAC,GAAAgD,EAAAvC,UAAAuC,EAAAqN,SAAArN,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,IAAAmD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,IAAAkD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,KACAiD,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,GAAAC,GAAAiF,OACAjC,EAAAsV,SAAAtV,EAAA4Z,cAAA5c,EAAAH,EAAAE,EAAAD,MAKAkD,EAAA8d,WAAA,SAAAxkB,GAGA,GAAA0G,EAAAmO,kBAAA,EACA,OAAA,CAGA,IAAA4P,GAAA,KAAAzkB,EAAA0f,MAMA,OAJA1f,GAAA0kB,oBACAD,EAAAA,GAAA,GAAA/d,EAAA9E,MAAA5B,EAAA0kB,oBAGAD,GAKA/d,EAAAie,WAAA,SAAA3kB,GAEA,GAAA2kB,IAAA,CAMA,OAJA3kB,GAAAG,iBACAwkB,EAAAje,EAAA9E,MAAA5B,EAAAG,iBAGAwkB,GAIAje,EAAAke,kBAAA,WACA,GAAAC,GAAAne,EAAAwS,UACA4L,EAAAlc,EAAAmO,KAAArQ,EAAAqP,WAAA8B,eAAA,SAAAzM,GAAA,MAAAA,GAAAnH,QAAA4gB,IACAE,EAAAC,EAAAH,GACAI,EAAAC,EAAAJ,EAAApe,EAAA1U,QAEA,IAAA+yB,EAAA,EAAAE,EACA,MAAA,KAAAJ,GAAAr1B,EAAA8F,kBAAAuvB,GAAAr1B,EAAA+F,gBAGA,IAAA4vB,GAAAze,EAAAqP,WAAA8B,eAAAnR,EAAAqP,WAAA8B,eAAA5nB,QAAA60B,GAAA,EACA,OAAA,KAAAK,EAAAlhB,QAAAzU,EAAA8F,kBAAA6vB,EAAAlhB,QAAAzU,EAAA+F,kBAKAmR,EAAA0e,gBAAA,WACA91B,EAAAU,KAAAR,EAAAiB,IAAAoB,UAIA6U,EAAA2e,SAAA,SAAA3hB,EAAAH,EAAAE,EAAAD,EAAA8hB,GACA,GAAAC,GAAA7e,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,GAAAC,EACA6hB,IAAAA,EAAAv3B,OAAA,GAAAu3B,EAAA,IACA7e,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAAC,GAAAC,GAAAC,GAAAiU,MAAA2N,EAAA,EAAAC,EAAAv3B,QAAAwkB,KAAA,KAAA+S,IAKA7e,EAAA+b,iBAAA,SAAA1O,GACA,GAAAyR,GAAA,CAIA,OAHA9e,GAAAvC,UAAA4P,KACAyR,EAAA9e,EAAAvC,UAAA4P,GAAA/lB,QAEAw3B,GAIA9e,EAAA4d,oBAAA,SAAAvQ,EAAAvQ,EAAAD,GACA,GAAAiiB,GAAA,CAIA,OAHA9e,GAAAvC,WAAAuC,EAAAvC,UAAA4P,IAAArN,EAAAvC,UAAA4P,GAAAxQ,IAAAmD,EAAAvC,UAAA4P,GAAAxQ,GAAAC,KACAgiB,EAAA9e,EAAAvC,UAAA4P,GAAAxQ,GAAAC,GAAAxV,QAEAw3B,GAIA9e,EAAAsX,uBAAA,WACA,GAAAtX,EAAA1C,KAAA4W,eAAA,EAAA,CACA,GAAAG,GAAAnS,EAAAmO,KAAArQ,EAAAvC,UAAAuC,EAAAqN,QAAA,SAAA0R,GACA,MAAAA,GAAA1C,QAAAvzB,EAAAmL,mBAAAG,SAEA,IAAAigB,EAEA,MADArU,GAAAtC,QAAAgL,UAAA1I,EAAA1C,KAAA0hB,6BACA,MAGA,CACA,GAAAC,IAAA,CAqBA,IApBA/c,EAAAmO,KAAArQ,EAAA1C,KAAAiW,SAAA,SAAAC,GACA,GAAAA,EAAAU,aAAAV,EAAA0L,qBAAA,EAAA,CACA,GAAA7K,GAAAnS,EAAAmO,KAAArQ,EAAAvC,UAAAuC,EAAAqN,QAAA,GAAAmG,EAAA9e,MAAA,SAAAyqB,GACA,MAAAld,UAAAkd,EAAA9C,OACA8C,EAAA9C,QAAAvzB,EAAAmL,mBAAAG,SAEA,GAGA,IAAAigB,EAAA,CACA,GAAAtH,GAAA/M,EAAA1C,KAAAiW,SACAlD,KAAA,SAAA+O,GACA,MAAAA,GAAA1qB,MAAA8e,EAAA9e,OACAsqB,0BAGA,OAFAhf,GAAAtC,QAAAgL,UAAAqE,GACAkS,GAAA,GACA,MAIAA,KAAA,EACA,OAAA,EAGA,OAAA,GAIAjf,EAAAqf,0BAAA,SAAAviB,GACA,GAAAuX,GAAAnS,EAAAmO,KAAArQ,EAAAvC,UAAAuC,EAAAqN,QAAA,GAAAvQ,GAAA,SAAAqiB,GACA,MAAAA,GAAA9C,QAAAvzB,EAAAmL,mBAAAG,SAEA,IAAAigB,EAAA,CACA,GAAAb,GAAAtR,EAAAmO,KAAArQ,EAAA1C,KAAAiW,SAAA,SAAA9O,GACA,MAAAA,GAAA/P,MAAAoI,GAGA,OADAkD,GAAAtC,QAAAgL,UAAA8K,EAAAwL,6BACA,EAEA,OAAA,GAIAhf,EAAAqV,uBAAA,WAEA,IAAArV,EAAA1C,KAAA4W,aAAAjS,QAAAjC,EAAAvC,UAAAuC,EAAAqN,UACArN,EAAAvC,UAAAuC,EAAAqN,aACApL,QAAAjC,EAAA1C,KAAAiW,UAEA,IAAA,GAAA9O,GAAA,EAAAA,EAAAzE,EAAA1C,KAAAiW,SAAAjsB,OAAAmd,IAAA,CACA,GAAA+O,GAAAxT,EAAA1C,KAAAiW,SAAA9O,EACA+O,GAAAU,aAAAjS,QAAAjC,EAAAvC,UAAAuC,EAAAqN,QAAA,GAAAmG,EAAA9e,QACAsL,EAAAvC,UAAAuC,EAAAqN,QAAA,GAAAmG,EAAA9e,cAOAsL,EAAA4c,kBAAA,SAAAtf,EAAAT,EAAAC,EAAAC,GAEA,GAAAuiB,GAAAhiB,EAAAiW,UAAAjW,EAAAiW,SAAAjsB,OAAA,EACAwV,EAAA+J,EAAA,UAAAvJ,EAAAiW,UAAA7e,KAAAoI,IAAA,GAAA,GAAAQ,EAAAiW,SAAA,GACA,IAEA,IAAA+L,EAAA,CACA,GAAAtiB,GAAAsiB,EAAAjmB,WAAAimB,EAAAjmB,UAAA/R,OAAA,EAAAg4B,EAAAjmB,UAAA,GAAA3E,KAAA,IACA,IAAAsI,EAAA,CACA,GAAA/L,GAAA+O,EAAA4Z,cAAA5c,EAAAH,EAAAE,EAAAuiB,EAAA5qB,KACAzD,IACA+O,EAAAtC,QAAA/B,MAAA1K,KAYA,IAAA8pB,GAAA,WACA,MAAAnyB,GAAA6oB,OAAAjQ,UAAA,EAAA5Y,EAAA6oB,OAAAloB,QAAA,IAAA,KAIAozB,EAAA,WAEA,QAAA4C,KACA,MAAAnZ,MAAAoZ,MAAA,OAAA,EAAApZ,KAAAqZ,WACAC,SAAA,IACAle,UAAA,GAEA,MAAA+d,KAAAA,IAAA,IAAAA,IAAA,IAAAA,IAAA,IAAAA,IAAA,IAAAA,IAAAA,IAAAA,KAIAjB,EAAA,SAAAqB,GAEA,GAAAC,GAAA,CAMA,OALA1d,GAAAmO,KAAArQ,EAAAqP,WAAA8B,eAAA,SAAAzM,GAAA,MAAAA,GAAAnH,QAAAoiB;GAAAtO,MAAAlP,QAAA,SAAApb,IACAA,EAAAqqB,mBAAAuO,GAAA72B,EAAA8F,kBAAA+wB,GAAA72B,EAAA+F,mBACA+wB,GAAA,KAGAA,GAIApB,EAAA,SAAAJ,EAAA9yB,GAEA,IAAA,GADAu0B,GAAA,GACArb,EAAA,EAAAA,EAAA8Z,EAAAF,EAAA7gB,QAAAiH,IACA,GAAA4Z,EAAA/M,MAAA7M,GAAAoI,KAAAthB,EAAA,CACAu0B,EAAArb,CACA,OAGA,MAAAqb,IAIApH,EAAA,SAAAjG,EAAAlnB,GACA,MAAA4W,GAAAmO,KAAAnO,EAAAmO,KAAArQ,EAAAqP,WAAA8B,eAAA,SAAAzM,GAAA,MAAAA,GAAAnH,QAAAiV,IAAAnB,MAAA,SAAAoB,GAAA,MAAAA,GAAA7F,KAAAthB,KAMA2vB,EAAA,WACA,GAAAkD,GAAAne,EAAAwS,UACA4L,EAAAlc,EAAAmO,KAAArQ,EAAAqP,WAAA8B,eAAA,SAAAzM,GAAA,MAAAA,GAAAnH,QAAA4gB,IACAE,EAAAC,EAAAH,GACAI,EAAAC,EAAAJ,EAAApe,EAAA1U,SACAomB,EAAA9oB,EAAA6oB,OAAAvjB,MAAA,KAAA,EAEA,IAAAiwB,EAAA,EAAA,CACA,GAAAE,EAAA,EAAAE,EAAA,CAEA,GAAA3R,GAAAwR,EAAA/M,MAAAkN,EAAA,GAAA3R,GACA,IAAA,GAAA5M,EAAA9E,MAAAkjB,EAAA/M,MAAAkN,EAAA,GAAA9K,UAAA,MACA,GAAA4K,EAAA,EAAAE,EAAA,EACA3R,EAAAwR,EAAA/M,MAAAkN,EAAA,GAAA3R,QAGA,IAAA2R,EAAA,GAAAF,EAAA,EAAA,CAEA,GAAAI,GAAAze,EAAAqP,WAAA8B,eAAAnR,EAAAqP,WAAA8B,eAAA5nB,QAAA60B,GAAA,EAGA,IAAA,MAAAK,EA4BA,YAxBA71B,EAAAU,OAAAC,QAAA,QAAA,GACAX,EAAAU,KAAA,QAAAooB,EAAA,IAAA+M,EAAAlhB,OAAA,IAAAkhB,EAAApN,MAAA,GAAAzE,KAEAhkB,EAAAU,OAAAC,QAAA,MAAA,IACAX,EAAAU,OAAAC,QAAA,0BAAA,GACA,WAAAk1B,EAAA3lB,QACAjQ,EAAAi3B,kBACArB,EAAApN,MAAA,GAAA1c,KAAA,iEAIA/L,EAAAU,OAAAC,QAAA,gBAAA,IACA,WAAAk1B,EAAA3lB,QACAjQ,EAAAi3B,kBACArB,EAAApN,MAAA,GAAA1c,KAAA,qJAIA/L,EAAAU,KAAA,MAAAooB,EAAA,IAAA+M,EAAAlhB,OAAA,IAAAkhB,EAAApN,MAAA,GAAAzE,MAIAhkB,EAAAU,KAAAyxB,IAAA,IAAA0D,EAAAlhB,OAAA,IAAAkhB,EAAApN,MAAA,GAAAzE,KAzBA5M,GAAA0e,kBAyCA,YATA91B,EAAAU,OAAAC,QAAA,QAAA,GACAX,EAAAU,KAAA,QAAAooB,EAAA,IAAAyM,EAAA,IAAAvR,GAEAhkB,EAAAU,OAAAC,QAAA,MAAA,GACAX,EAAAU,KAAA,MAAAooB,EAAA,IAAAyM,EAAA,IAAAvR,GAGAhkB,EAAAU,KAAAyxB,IAAA,IAAAoD,EAAA,IAAAvR,IAIA,GAAA2R,GAAAF,EAAA,EAAA,CAEA,GAAAI,GAAAze,EAAAqP,WAAA8B,eAAAnR,EAAAqP,WAAA8B,eAAA5nB,QAAA60B,GAAA,EAGA,IAAA,MAAAK,EA4BA,YAxBA71B,EAAAU,OAAAC,QAAA,QAAA,GACAX,EAAAU,KAAA,QAAAooB,EAAA,IAAA+M,EAAAlhB,OAAA,IAAAkhB,EAAApN,MAAA,GAAAzE,KAEAhkB,EAAAU,OAAAC,QAAA,MAAA,IACAX,EAAAU,OAAAC,QAAA,0BAAA,GACA,WAAAk1B,EAAA3lB,QACAjQ,EAAAi3B,kBACArB,EAAApN,MAAA,GAAA1c,KAAA,iEAIA/L,EAAAU,OAAAC,QAAA,gBAAA,IACA,WAAAk1B,EAAA3lB,QACAjQ,EAAAi3B,kBACArB,EAAApN,MAAA,GAAA1c,KAAA,qJAIA/L,EAAAU,KAAA,MAAAooB,EAAA,IAAA+M,EAAAlhB,OAAA,IAAAkhB,EAAApN,MAAA,GAAAzE,MAIAhkB,EAAAU,KAAAyxB,IAAA,IAAA0D,EAAAlhB,OAAA,IAAAkhB,EAAApN,MAAA,GAAAzE,KAzBA5M,GAAA0e,qBAkCAvD,EAAA,WACA,GAAAtyB,EAAAiyB,YACA9a,EAAAob,0BAEA,CACA,GAAA+C,GAAAne,EAAAwS,UACA4L,EAAAlc,EAAAmO,KAAArQ,EAAAqP,WAAA8B,eAAA,SAAAzM,GAAA,MAAAA,GAAAnH,QAAA4gB,IAEAI,GADAD,EAAAH,GACAK,EAAAJ,EAAApe,EAAA1U,UACAomB,EAAA9oB,EAAA6oB,OAAAvjB,MAAA,KAAA,EAEA,IAAA,GAAAqwB,EAAA,CAEA,GAAAwB,GAAA/f,EAAAqP,WAAA8B,eAAAnR,EAAAqP,WAAA8B,eAAA5nB,QAAA60B,GAAA,GAEA/E,EAAAiF,EAAAyB,EAAAxiB,QAAA,CACA,IAAAyC,EAAA9E,MAAA6kB,EAAA1O,MAAAiN,EAAAyB,EAAAxiB,QAAA,GAAAkW,UAAA,QACA4F,GAAA,GAGAzwB,EAAAU,OAAAC,QAAA,QAAA,GACAX,EAAAU,KAAA,QAAAooB,EAAA,IAAAqO,EAAAxiB,OAAA,IAAAwiB,EAAA1O,MAAAgI,GAAAzM,KAEAhkB,EAAAU,OAAAC,QAAA,MAAA,GACAX,EAAAU,KAAA,MAAAooB,EAAA,IAAAqO,EAAAxiB,OAAA,IAAAwiB,EAAA1O,MAAAgI,GAAAzM,KAIAhkB,EAAAU,KAAAyxB,IAAA,IAAAgF,EAAAxiB,OAAA,IAAAwiB,EAAA1O,MAAAgI,GAAAzM,SAGA,IAAA2R,EAAA,EAAA,CAEA,GAAA3R,GAAAwR,EAAA/M,MAAAkN,EAAA,GAAA3R,GAEAhkB,GAAAU,OAAAC,QAAA,QAAA,GACAX,EAAAU,KAAA,QAAAooB,EAAA,IAAAyM,EAAA,IAAAvR,GAEAhkB,EAAAU,OAAAC,QAAA,MAAA,GACAX,EAAAU,KAAA,MAAAooB,EAAA,IAAAyM,EAAA,IAAAvR,GAGAhkB,EAAAU,KAAAyxB,IAAA,IAAAoD,EAAA,IAAAvR,MAUAtP,EAAAmb,EAAAzY,EAAAwS,UAAAxS,EAAA1U,QASA,IAPAgS,EAAA6W,uBACA,IAAAnU,EAAA+b,iBAAA/b,EAAAqN,SACArN,EAAAyc,cAKAnf,EAAAiW,UAAAjW,EAAAiW,SAAAjsB,OAAA,EAAA,CAEA,GAAA04B,GAAA9d,EAAA8D,OAAA1I,EAAAiW,SAAA,SAAA7O,GAAA,MAAAA,GAAAyP,uBAEA6L,GAAA14B,OAAA,IAEA0Y,EAAAqV,yBAEAnT,EAAAC,QAAA6d,EAAA,SAAAxX,GACA,GAAA2V,GAAAne,EAAAwS,SACAtQ,GAAAmO,KAAArQ,EAAAqP,WAAA8B,eAAA,SAAAzM,GAAA,MAAAA,GAAAnH,QAAA4gB,GACA,KAAAne,EAAA4d,oBAAA5d,EAAAqN,OAAA7E,EAAA9T,KAAA,IAEAsL,EAAAoU,eAAA,EAAA5L,EAAA9T,MAAA,MAQA,GAAAsL,EAAA1C,KAAA2iB,kBAAAjgB,EAAAmO,iBACAnO,EAAAvC,UAAAuC,EAAAqN,QAAApL,cCtxDA,WAEA,GAAAmB,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WAAA,wCAAA,SAAA,aAAA,YAAA,4BAAA,kBAAA,eAAA,YACA,SAAA2S,EAAAzX,EAAAK,EAAA0B,EAAAvB,EAAAF,EAAAC,GAGAga,SAAAhK,MAAA,6BAEAjQ,EAAAwlB,mBAAA,EAEArO,EAAAsO,WAAA,EACAtO,EAAAtC,QAAA3U,CACA,IAAAm3B,GAAAv5B,OAAAkH,SACAsyB,EAAAD,EAAA,OACAE,EAAAF,EAAA,IACAlgB,GAAAqgB,QAAAF,EACAngB,EAAAsgB,MAAAF,EAEAx3B,EAAAU,OAAAC,QAAA,MAAA,GACAyW,EAAArP,aAAA,EAIAqP,EAAArP,aAAA,EAEA/H,EAAAU,OAAAC,QAAA,QAAA,GACAyW,EAAAuO,eAAA,EAIAvO,EAAAuO,eAAA,CAIA,IAAAO,GAAA,SAAAC,EAAAC,GAEAhP,EAAAsO,WAAA,EACAI,IACA7lB,EAAAomB,oBAEApmB,EAAA8kB,2BAAAoB,EAAA,KAAA,KAAAlmB,EAAAG,mBACAE,KAAA,SAAAW,GACAjB,EAAAU,KAAA0lB,KAFAnmB,WAIA,WACAmX,EAAAsO,WAAA,IAGA/lB,EAAAgD,qBAAA,EAGAyU,GAAAkP,eAAA,WACA,MAAArmB,GAAA03B,sBAIAzR,GAAAhmB,EAAAgN,eAAAM,UAAAtN,EAAAiB,IAAAuF,yBAHAhF,EAAAk2B,SACA,GAKA,IAAA9R,GAAA,WACA7lB,EAAA8gB,aAAAlM,aACA5U,EAAA8gB,aAAAmB,gBAAA,KACAjiB,EAAA8gB,aAAAC,WAAA,KACA/gB,EAAA8gB,aAAA+D,YAAA,KACA7kB,EAAA8gB,aAAAgF,aAAA,KACA9lB,EAAA8gB,aAAAP,OAAA,KACAvgB,EAAA8gB,aAAAiF,cAAA,YCrEA,WACA,GAAAxL,GAAAtb,QAAAC,OAAA,UACAqb,GAAA/V,WACA,8BACA,SAAA,aAAA,QAAA,YAAA,WAAA,kBAAA,YAAA,eAAA,kBAAA,4BACA,SAAA2S,EAAAzX,EAAAie,EAAA5d,EAAA0S,EAAAmlB,EAAA33B,EAAAD,EAAAE,EAAAuB,GA40CA,QAAAo2B,GAAAC,GACA,MAAA3gB,GAAAtC,QAAAkjB,8BAAAD,EAAA73B,EAAAgN,eAAAS,qBA30CAyJ,EAAAtC,QAAA3U,EACAiX,EAAAlX,UAAAA,EAEAD,EAAAomB,oBACApmB,EAAA4kB,0BACA5kB,GAAAiyB,YACAjyB,EAAAwlB,mBAAA,EAQArO,EAAApW,KAAA,WACA,MAAAhB,GAAAU,OAAAC,QAAA,MAAA,IAmBAyW,EAAA6gB,aAAA,EACA7gB,EAAA8gB,gBAAA,EACA9gB,EAAA+gB,WAAA,EACA/gB,EAAAghB,gBAAA,EACAhhB,EAAAihB,qBAAA,EAGAr4B,EAAAU,OAAAC,QAAA,MAAA,IACAyW,EAAArP,aAAA,EACAqP,EAAAuO,eAAA,IAGAvO,EAAArP,aAAA,EACAqP,EAAAuO,eAAA,GAIA1lB,EAAAq4B,aACAr4B,EAAAq4B,YACAC,uBAAAr4B,EAAA0F,sBACA4yB,iBAAA,GACAC,gBAAA,GACAC,kBAAAx4B,EAAAyF,kBACAgzB,aAAA,GACAC,kBAAA,EACAC,sBACAC,gBACAC,eACAC,mBAGA5hB,EAAAsI,QAAAzf,EAAAq4B,UAEA,IAAAW,GAAA,0BAAAvW,KAAA3kB,OAAAwkB,UAAAD,UAAAG,cAEAvI,UAAAhK,MAAA,oDAEAkH,EAAA8hB,UAAA,GACA9hB,EAAA+hB,oBAAA,SAAAC,GACA,MAAA5b,MAAAoZ,OAAAwC,EAAAC,OAAAC,eAAAr4B,KAAAvC,OAAA,GAAA0Y,EAAA8hB,YAKA9hB,EAAAmiB,4BAAA3jB,EAAAsE,UAAAsf,QAAA,GAEA,IAAAC,GAAA,WAEA,QAEAC,MAAA,oBACAC,YAAA,SACAC,cAAA,EACAJ,MAAApiB,EAAAmiB,4BAAA,MAAA,KACAM,kBAAA,IAGAH,MAAA,eACAC,YAAA,eACAC,cAAA,EACAJ,MAAApiB,EAAAmiB,4BAAA,MAAA,MACAM,kBAAA,EACAC,aAAA,4bAaAJ,MAAA,aACAC,YAAA,QACAC,cAAA,EACAJ,MAAApiB,EAAAmiB,4BAAA,KAAA,KACAM,kBAAA,EACAC,aAAA,kbASAJ,MAAA,gBACAC,YAAA,iBACAI,WAAA,oBACAH,cAAA,EACAI,mBAAA,EACAR,MAAApiB,EAAAmiB,4BAAA,KAAA,KACAM,kBAAA,EACAI,UAAA7iB,EAAAmiB,4BAAA,YAAA,GACAW,gBAAA9iB,EAAAmiB,4BAAA,YAAA,GACAY,MAAAC,UAAAvC,EAAAwC,QAGAX,MAAA,kBACAC,YAAA,eACAC,cAAA,EACAI,mBAAA,EACAR,MAAApiB,EAAAmiB,4BAAA,KAAA,MACAM,kBAAA,EACAS,WAAA,EACAL,UAAA7iB,EAAAmiB,4BAAA,YAAA,GACAW,gBAAA9iB,EAAAmiB,4BAAA,YAAA,GACAO,aAAA,qVAYAJ,MAAA,qBACAC,YAAAviB,EAAArP,YAAA,kBAAA,UACA6xB,cAAA,EACAJ,MAAApiB,EAAAmiB,4BAAA,KAAA,MACAM,kBAAA,IAGAH,MAAA,sBACAC,YAAA,WACAC,cAAA,EACAJ,MAAApiB,EAAAmiB,4BAAA,KAAA,MACAM,kBAAA,IAGAH,MAAA,aACAC,YAAA,cACAI,WAAA,oBACAH,cAAA,EACAI,mBAAA,EACAH,kBAAA,EACAL,MAAApiB,EAAAmiB,4BAAA,KAAA,KACAU,UAAA7iB,EAAAmiB,4BAAA,YAAA,GACAW,gBAAA9iB,EAAAmiB,4BAAA,YAAA,KAGAG,MAAA,UACAC,YAAA,WACAI,WAAA,oBACAH,cAAA,EACAI,mBAAA,EACAH,kBAAA,EACAL,MAAApiB,EAAAmiB,4BAAA,KAAA,KACAU,UAAA7iB,EAAAmiB,4BAAA,YAAA,GACAW,gBAAA9iB,EAAAmiB,4BAAA,YAAA,KAGAG,MAAA,aACAC,YAAA,cACAC,cAAA,EACAJ,MAAApiB,EAAAmiB,4BAAA,KAAA,MACAM,kBAAA,IAGAH,MAAA,UACAC,YAAA,UACAM,UAAA,gBACAC,gBAAA,uBACAJ,aAAA1iB,EAAArP,YAEA,2hMA2GA,2hMA0GAwyB,SAAA,EACAf,MAAApiB,EAAAmiB,4BAAA,MAAA,MACAe,WAAA,EACAT,kBAAA,IAIAziB,GAAAojB,aACAC,eAAA,EACAC,iBAAA,EACAC,0BAAA9C,EAAA+C,WAAAC,MACAC,wBAAAjD,EAAA+C,WAAAG,OACAC,oBAAA,EACAC,wBAAA,EACAC,0BAAA,EACAC,iBAAA,EACAC,aAAA,EACAlC,UAAA9hB,EAAA8hB,UACAmC,2BAAA,EACAC,sBAAA,+CACAC,WAAA9B,IACA+B,YACA,oXAWAC,cAAA,SAAAC,GACAtkB,EAAAskB,QAAAA,CAGA,IAAAC,GAAA,WACAvkB,EAAA8gB,gBAAA9gB,EAAAskB,QAAAE,KAAAC,eAAAzkB,EAAAskB,QAAAI,MAAAp9B,OAEA0Y,GAAAskB,QAAAE,KAAAvnB,GAAAsnB,aAAAvkB,EAAAukB,GAEAvkB,EAAAskB,QAAAK,WAAA1nB,GAAA2nB,wBAAA5kB,EAAA,SAAAgiB,GACA1mB,EAAA,WACA0mB,EAAA6C,kBAAA7kB,EAAA+hB,oBAAAC,IACA,MAKA,IAAA8C,GAAA,SAAA9C,GACAhiB,EAAAtC,QAAAgL,UAAA,uBACAqc,YAAA/C,EAAAC,OAAA+C,sBACApb,WAAAoY,EAAAC,OAAAgD,IACAC,WAAAlD,EAAAC,OAAAkD,uBAGAnlB,GAAAolB,uBAAA,SAAApD,GACA1mB,EAAA,WACAwpB,EAAA9C,IACA,MAEAhiB,EAAAqlB,oBAAA,SAAArD,GACAH,GACAiD,EAAA9C,IAIAhiB,EAAAslB,UAAA,SAAAtD,GACA1mB,EAAA,WACA0E,EAAAskB,QAAAiB,UAAAD,UAAAtD,EAAAC,SACA,KAGAjiB,EAAAwlB,YAAA,SAAAxD,GACA,MAAAA,GAAAC,OAAAwD,mCAAA,YAAA,SAGA,IAAAC,GAAA,SAAA1D,GAEAA,EAAAC,OAAA0D,oBAAA,EAGA98B,EAAA8gB,aAAAC,WAAAoY,EAAAC,OAAAvxB,WACA7H,EAAA8gB,aAAA+D,YAAAsU,EAAAC,OAAAgD,IACAp8B,EAAA8gB,aAAAP,OAAA4Y,EAAAC,OAAA2D,SACA/8B,EAAA8gB,aAAAkc,WAAA7D,EAAAC,OAAA6D,kBACAj9B,EAAA8gB,aAAAoc,YAAA/D,EAAAC,OAAA+D,mBACAn9B,EAAA8gB,aAAAsc,cAAAjE,EAAAC,OAAAgE,cAKAjmB,EAAAtC,QAAAwoB,6BAAAlE,EAAAC,OAAAkE,QAEA,IAAAC,GAAApE,EAAAC,OAAAkE,QAAA,OAAA,MACAt9B,GAAAihB,kBAAA,8BAAA,SAAAsc,EAAA,aAAAA,EAAA,cAEAv9B,EAAAw9B,gBAAArE,EAAAC,OAAAvxB,YACAxH,KAAA,SAAAW,GAGAhB,EAAAykB,iBAAA7N,KAAAC,MAAA7V,EAAAsf,UAGAtgB,EAAA8gB,aAAAlM,UAAAgC,KAAAC,MAAA7V,EAAAsf,UACAtgB,EAAA8gB,aAAAmB,gBAAAjhB,EAAAihB,gBACAjiB,EAAA8gB,aAAAwI,SAAAtoB,EAAAklB,WACAlmB,EAAA8gB,aAAAyI,cAAAvoB,EAAAy8B,gBACAz9B,EAAA0pB,eAAA1pB,EAAA09B,wBAAA18B,EAAAsf,UACAtgB,EAAA29B,cAAA38B,EAAAD,KACAf,EAAA49B,gBAAA58B,EAAAT,OACAP,EAAAi3B,gBAAAj2B,EAAA68B,OAEA79B,EAAA89B,iBAAA98B,EAAAklB,WAAAllB,EAAAy8B,gBAAAtE,EAAAC,OAAAvxB,WAAA7H,EAAAG,mBACAE,KAAA,SAAAW,GACAhB,EAAA+9B,eAAA/8B,EAAAwlB,WAAAxlB,EAAAsoB,SAAAtoB,EAAAuoB,cAAAvoB,EAAAwoB,KACAxpB,GAAAg+B,oBAAAh9B,EAAAsoB,SACA5pB,GAAAgD,qBAAA,EAEA1B,EAAAsoB,WAAArpB,EAAAgN,eAAAS,oBACA3N,EAAAU,KAAAR,EAAAiB,IAAAwF,kCAEA1F,EAAAsoB,WAAArpB,EAAAgN,eAAAM,WACAxN,EAAAU,KAAAR,EAAAiB,IAAAuF,yBAEA,SAAAzF,GACAmW,EAAAtC,QAAAkQ,kBAAA,EAAA,oBAGA,SAAA/jB,GACAmW,EAAAtC,QAAAkQ,kBAAA,EAAA,mBAGAoU,EAAAC,OAAA0D,oBAAA,EAEA3lB,GAAA8mB,qBAAA,SAAA9E,GACA1mB,EAAA,WACAoqB,EAAA1D,IACA,MAEAhiB,EAAA+mB,kBAAA,SAAA/E,GACAH,GACA6D,EAAA1D,GAIA,IAAAgF,GAAA,SAAAhF,GAEA,GAAA32B,GAAA22B,EAAAC,MACAjiB,GAAAtC,QAAAgL,UAAA,mBAAArd,GAAAof,OAAAvhB,KAAA,SAAAuhB,GAEAuX,EAAAC,OAAAgF,kBAAA,EACAjnB,EAAAknB,mBAAA,uBAEA,IAAAC,GAAAnnB,EAAAtC,QAAA0pB,iBAAA,oBAAA3c,EAAAoF,UAAAsX,iBACAt+B,GAAAm+B,iBAAAhF,EAAAC,OAAAvxB,WAAAy2B,EAAAnF,EAAAC,OAAAnX,iBACA5hB,KAAA,SAAAigB,GACA,OAAAA,GAAAA,EAAAtf,KAAAuf,QACA,GAAAD,EAAAtf,KAAAuf,QACApJ,EAAAtC,QAAAkQ,kBAAA,EAAA,0BAAAviB,GACAxC,EAAAihB,kBAAA,uCAAA,2BAAA,kCACA,GAAAX,EAAAtf,KAAAuf,OACApJ,EAAAtC,QAAAkQ,kBAAA,EAAA,yBAAAviB,GACA,GAAA8d,EAAAtf,KAAAuf,QACApJ,EAAAtC,QAAAkQ,kBAAA,EAAA,8BAAAviB,GAEAg8B,GAAA,GACAx+B,EAAAihB,kBAAA,uCAAA,2BAAA,mCAEA9J,EAAAtC,QAAAkQ,kBAAA,EAAA,kBAEA,WACA5N,EAAAtC,QAAAkQ,kBAAA,EAAA,0BAAAviB,GACAxC,EAAAihB,kBAAA,uCAAA,2BAAA,mCAlBAjhB,WAoBA,WACAm5B,EAAAC,OAAAgF,kBAAA,MAIAjnB,GAAAsnB,mBAAA,SAAAtF,GACA1mB,EAAA,WACA0rB,EAAAhF,IACA,MAEAhiB,EAAAunB,gBAAA,SAAAvF,GACAH,GACAmF,EAAAhF,GAIA,IAAAwF,GAAA,SAAAxF,GACAA,EAAAC,OAAAwF,kBAAA,EAGA5+B,EAAAykB,oBACAzkB,EAAA4kB,oBACA5kB,EAAA8gB,aAAAlM,aACA5U,EAAA8gB,aAAAP,OAAA,EAEAvgB,EAAA8gB,aAAAC,WAAAoY,EAAAC,OAAAvxB,WACA7H,EAAA8gB,aAAA+D,YAAAsU,EAAAC,OAAAgD,IACAp8B,EAAA8gB,aAAAkc,WAAA7D,EAAAC,OAAA6D,kBAEAj9B,EAAA8gB,aAAAqc,mBAAAhE,EAAAC,OAAA+D,mBAEAn9B,EAAA8gB,aAAAoN,aAAA,KACAluB,EAAA8gB,aAAA+d,oBAAA1F,EAAAC,OAAA0F,cAGA9+B,EAAA8gB,aAAAwI,SAAA6P,EAAAC,OAAAlT,WAEAlmB,EAAAihB,kBAAA,8BAAA,qBAAA,gBAEAjhB,EAAA89B,iBAAA79B,EAAAgN,eAAAU,qBAAA,KAAA,KAAA3N,EAAAG,mBACAE,KAAA,SAAAW,GACAhB,EAAA+9B,eAAA/8B,EAAAwlB,WAAAxlB,EAAAsoB,SAAAtoB,EAAAuoB,cAAAvoB,EAAAwoB,KACAxpB,GAAAg+B,oBAAAh9B,EAAAsoB,SACAtpB,GAAAw9B,gBAAArE,EAAAC,OAAAvxB,YACAxH,KAAA,SAAA0+B,GACA/+B,EAAA29B,cAAAoB,EAAAh+B,KACAf,EAAA49B,gBAAAmB,EAAAx+B,OACAP,EAAAi3B,gBAAA8H,EAAAlB,SAEA99B,EAAAU,KAAAR,EAAAiB,IAAAyF,oCACA,SAAA3F,GACAmW,EAAAtC,QAAAkQ,kBAAA,EAAA,mBAGA5N,GAAA6nB,mBAAA,SAAA7F,GACA1mB,EAAA,WACAksB,EAAAxF,IACA,MAEAhiB,EAAA8nB,gBAAA,SAAA9F,GACAH,GACA2F,EAAAxF,GAIA,IAAA+F,GAAA,SAAA/F,GACAgG,EAAAhG,GAEAhiB,GAAAioB,gBAAA,SAAAjG,GACA1mB,EAAA,WACAysB,EAAA/F,IACA,MAEAhiB,EAAAkoB,aAAA,SAAAlG,GACAH,GACAkG,EAAA/F,GAIA,IAAAmG,GAAA,SAAAnG,GAEA,GAAAoG,GAAA,SAAAC,GACA,MAAAx/B,GAAAy/B,qBAAAD,EAAA33B,WAAAsP,EAAArP,aACAzH,KAAA,SAAAW,GACA,GAAA0+B,IACAF,SAAAA,EACAG,eAAA3+B,EAAA2+B,eACAC,gBAAA5+B,EAAA4+B,gBACA7nB,IAAA,SAAA8nB,GACA,OACAh0B,KAAAg0B,EAAAryB,KAAApF,GACA0D,KAAA+zB,EAAAryB,KAAAsyB,SACAC,OAAAF,EAAAE,UAIA,OAAAL,IAEA,SAAA1+B,GAEA,KADAmW,GAAAtC,QAAAkQ,kBAAA,EAAA,iBACA,GAAA7M,OAAAlX,MAIAg/B,EAAA,SAAAN,GAEA,MADA1/B,GAAAwmB,WAAAoH,WAAA,mBAAA8R,EAAAE,gBACAzoB,EAAAtC,QAAAgL,UAAA,kBAAA6f,EAAAF,UAAA5d,OACAvhB,KAAA,SAAAW,GACAmW,EAAAknB,mBAAA,qBACA,IAAA4B,GAAAj/B,EAAAgmB,UAAAkZ,kBAAAr0B,KACAs0B,EAAAn/B,EAAAgmB,UAAAkZ,kBAAAH,OACAK,GACAZ,SAAAE,EAAAF,SACAG,eAAAD,EAAAC,eACAQ,eAAAA,EACAF,eAAAA,EAEA,OAAAG,MAIAC,EAAA,SAAAD,GACA,MAAApgC,GAAAs/B,gBACAz3B,WAAAu4B,EAAAZ,SAAA33B,WACAy4B,eAAArgC,EAAA6M,aAAAE,UACA2yB,eAAAS,EAAAT,eACAI,OAAAK,EAAAD,eACAI,OAAAH,EAAAH,iBAEA5/B,KAAA,WACAL,EAAAihB,kBAAA,8BAAA,oBAAA,UACA9J,EAAAtC,QAAAkQ,kBAAA,EAAA,gCAAAqb,EAAAZ,WACA,SAAAx+B,GAGA,KAFAhB,GAAAihB,kBAAA,8BAAA,gBAAA,UACA9J,EAAAtC,QAAAkQ,kBAAA,EAAA,4BAAAqb,EAAAZ,UACA,GAAAtnB,OAAAlX,KAIAhB,GAAAihB,kBAAA,8BAAA,eAAA,SACA,IAAAue,GAAArG,EAAAC,MACAoG,GAAAgB,gBAAA,EACAjB,EAAAC,GACAn/B,KAAA,SAAAq/B,GACA,MAAAM,GAAAN,KAEAr/B,KAAA,SAAA+/B,GACA,MAAAC,GAAAD,KAEA//B,KAAA,WACAm+B,GAAA,KARAe,WAUA,WACAC,EAAAgB,gBAAA,IAGArpB,GAAAspB,iBAAA,SAAAtH,GACA1mB,EAAA,WACA6sB,EAAAnG,IACA,MAEAhiB,EAAAupB,cAAA,SAAAvH,GACAH,GACAsG,EAAAnG,GAIA,IAAAwH,GAAA,SAAAxH,GAEA,GAAAyH,GAAA,SAAApB,GACA,MAAAx/B,GAAA6gC,qBAAArB,EAAA33B,YACAxH,KAAA,SAAAW,GACA,GAAA8/B,IACAtB,SAAAA,EACAuB,kBAAA//B,EAAA+/B,kBACAhpB,IAAA,SAAAipB,GACA,OACAn1B,KAAAm1B,EAAAn5B,WACAiE,KAAAk1B,EAAAC,aACAlZ,aAAAiZ,EAAA5E,IAAAvF,cAIA,OAAAiK,IAEA,SAAA9/B,GAEA,KADAmW,GAAAtC,QAAAkQ,kBAAA,EAAA,iBACA,GAAA7M,OAAAlX,MAIAkgC,EAAA,SAAAJ,GAEA,MADA9gC,GAAAwmB,WAAAoH,WAAA,mBAAAkT,EAAAC,kBACA5pB,EAAAtC,QAAAgL,UAAA,gBAAAihB,EAAAtB,UAAA5d,OACAvhB,KAAA,SAAAW,GACAmW,EAAAknB,mBAAA,mBACA,IAAA8C,GAAAngC,EAAAgmB,UAAAoa,gBAAAv1B,KACAw1B,EAAArgC,EAAAgmB,UAAAqa,WACAC,GACA9B,SAAAsB,EAAAtB,SACA2B,iBAAAA,EACAE,WAAAA,EAEA,OAAAC,MAIAC,EAAA,SAAAD,GACA,MAAAthC,GAAAuhC,kBACAC,YAAAF,EAAA9B,SAAA33B,WACA45B,YAAAH,EAAAH,iBACAE,WAAAC,EAAAD,aAEAhhC,KAAA,WACAL,EAAAihB,kBAAA,8BAAA,kBAAA,SACA,SAAAjgB,GAGA,KAFAhB,GAAAihB,kBAAA,8BAAA,cAAA,QACA9J,EAAAtC,QAAAkQ,kBAAA,EAAA,iBACA,GAAA7M,OAAAlX,KAIAhB,GAAAihB,kBAAA,4BAAA,aAAA,OACA,IAAAue,GAAArG,EAAAC,MACAoG,GAAAkC,cAAA,EACAd,EAAApB,GACAn/B,KAAA,SAAAygC,GACA,MAAAI,GAAAJ,KAEAzgC,KAAA,SAAAihC,GACA,MAAAC,GAAAD,KAEAjhC,KAAA,WACAm+B,GAAA,KARAoC,WAUA,WACApB,EAAAkC,cAAA,IAIAvqB,GAAAwqB,iBAAA,SAAAxI,GACA1mB,EAAA,WACAmvB,EAAAzI,IACA,MAEAhiB,EAAA0qB,cAAA,SAAA1I,GACAH,GACA4I,EAAAzI,GAGA,IAAAyI,GAAA,SAAAzI,GACAA,EAAA2I,gBAAA,EACA3qB,EAAAtC,QAAAgL,UAAA,0BAAA+B,OAAAvhB,KAAA,SAAAuhB,GACA5hB,EAAA4hC,eAAAzI,EAAAC,OAAAvxB,WAAAsxB,EAAAC,OAAAnX,iBACA5hB,KAAA,SAAAigB,GACAtgB,EAAAihB,kBAAA,8BAAA,8BAAA,oBACAud,GAAA,EACA,IAAAh8B,IAAA45B,IAAAjD,EAAAC,OAAAgD,IACAjlB,GAAAtC,QAAAkQ,kBAAA,EAAA,4BAAAviB,IACA,SAAAoI,GACAuM,EAAAtC,QAAAkQ,kBAAA,EAAA,mBAPA/kB,WASA,WACAm5B,EAAAC,OAAA0I,gBAAA,MAMA3qB,GAAA4qB,gBAAA,SAAA5I,GACA1mB,EAAA,WACAuvB,EAAA7I,IACA,MAEAhiB,EAAA8qB,iBAAA,SAAA9I,GACAH,GACAgJ,EAAA7I,GAGA,IAAA6I,GAAA,SAAA7I,GACAA,EAAAC,OAAA8I,mBAAA,CACA,IAAAC,GAAAhJ,EAAAC,OAAAgJ,YAAA,cAAA,WACAjrB,GAAAtC,QAAAgL,UAAAsZ,EAAAC,OAAAgJ,YAAA,iCAAA,gCAAAxgB,OAAAvhB,KAAA,SAAAuhB,GACA5hB,EAAAgiC,0BAAA7I,EAAAC,OAAAvxB,WAAAsxB,EAAAC,OAAAgJ,YAAAjJ,EAAAC,OAAAnX,iBACA5hB,KAAA,SAAAigB,GACAtgB,EAAAihB,kBAAA,8BAAA,kBAAAkhB,EAAA,cAAA,kBAAAA,GACA3D,GAAA,IACA,SAAA5zB,GACAuM,EAAAtC,QAAAkQ,kBAAA,EAAA,mBALA/kB,WAOA,WACAm5B,EAAAC,OAAA8I,mBAAA,MATA/qB,SAWA,WACAgiB,EAAAC,OAAA8I,mBAAA,IAKA/qB,GAAAkrB,eAAA,SAAAlJ,GACA1mB,EAAA,WACAkuB,EAAAxH,IACA,MAEAhiB,EAAAmrB,YAAA,SAAAnJ,GACAH,GACA2H,EAAAxH,GAIA,IAAAoJ,GAAA,SAAApJ,GACA,GAAAmI,GAAAnI,EAAAC,OACA5N,EAAA,SAAA7L,GACA,MAAAA,GAAA9X,WAAA2a,gBAAA8e,EAAAz5B,WAAA2a,eAEAggB,EAAA,SAAAhD,GACAA,IAAAA,EAAAlC,SAAAkC,EAAAiD,SACA1iC,EAAAU,OAAAC,QAAA,MAAA,KACA8+B,EAAAz+B,MAAAy+B,EAAA3B,SACAhB,GAAAzD,OAAAoG,IAEAA,EAAAj/B,QACA4W,EAAAtC,QAAAgL,UAAA,0BAAAohB,aAAAK,EAAAL,gBAIAlhC,EAAAU,OAAAC,QAAA,QAAA,MACA8+B,EAAAj/B,QAAAi/B,EAAA3B,SACAhB;AAAAzD,OAAAoG,IAEAA,EAAAz+B,MACAoW,EAAAtC,QAAAgL,UAAA,0BAAAohB,aAAAK,EAAAL,gBAKA9pB,EAAAtC,QAAAgL,UAAA,0BAAAohB,aAAAK,EAAAL,gBAGAyB,EAAAvrB,EAAAojB,YAAAv5B,KAAAmc,OAAAqO,GAAA,EACAkX,GACAF,EAAAE,IAEAvrB,EAAAtC,QAAA8tB,qBAAA,YAAA,GACA3iC,EAAAw+B,cACA8B,eAAAgB,EAAAhB,eACAsC,WAAAtB,EAAAL,aACAtI,kBAAA,IAEAt4B,KAAA,SAAAW,GACA,GAAA6hC,IAAA7hC,GAAAA,EAAA8hC,eAAA3lB,OAAAqO,GAAA,EACAgX,GAAAK,IAEA,SAAA7hC,GACAmW,EAAAtC,QAAAkQ,kBAAA,EAAA,mBAVA/kB,WAYA,WACAmX,EAAAtC,QAAA8tB,qBAAA,YAAA,MAIAxrB,GAAA4rB,6BAAA,SAAA5J,GACA1mB,EAAA,WACA8vB,EAAApJ,IACA,MAEAhiB,EAAA6rB,0BAAA,SAAA7J,GACAH,GACAuJ,EAAApJ,GAIA,IAAA8J,GAAA,SAAA9J,GAEA,MADAA,GAAAC,OAAA8J,4BAAA,EACAljC,EAAAijC,oBACAzB,YAAArI,EAAAC,OAAAvxB,WACA45B,YAAAtI,EAAA0C,KAAAsH,UAAA/J,OAAAvxB,aAEAxH,KAAA,WACAL,EAAAihB,kBAAA,8BAAA,kCAAA,wBACAud,GAAA,IACA,SAAAx9B,GACAhB,EAAAihB,kBAAA,8BAAA,8BAAA,wBACA9J,EAAAtC,QAAAkQ,kBAAA,EAAA,mBATA/kB,WAWA,WACAm5B,EAAAC,OAAA8J,4BAAA,IAGA/rB,GAAAisB,6BAAA,SAAAjK,GACA1mB,EAAA,WACAwwB,EAAA9J,IACA,MAEAhiB,EAAAksB,0BAAA,SAAAlK,GACAH,GACAiK,EAAA9J,IAIAhiB,EAAAmsB,QAAA,WACA9E,GAAA,IAGArnB,EAAAkP,eAAA,WAEA,MAAArmB,GAAA03B,mBAKA13B,EAAAykB,oBACAzkB,EAAA4kB,oBACA5kB,EAAA8gB,aAAAlM,aACA5U,EAAA8gB,aAAAP,OAAA,EAGApJ,EAAAtC,QAAAwoB,8BAAA,GAEAr9B,EAAAihB,kBAAA,8BAAA,6BAAA,4BAEAjhB,GAAA8kB,2BAAA7kB,EAAAgN,eAAAS,oBAAA,KAAA,KAAA1N,EAAAG,mBACAE,KAAA,SAAAW,GACAtB,EAAAgD,qBAAA,EACA3C,EAAAU,KAAAR,EAAAiB,IAAAwF,mCACA,SAAA1F,GACAmW,EAAAtC,QAAAkQ,kBAAA,EAAA,qBAnBAtjB,EAAAk2B,SACA,IAuBAxgB,EAAAosB,cAAA,WACApsB,EAAAojB,YAAAv5B,KAAAvC,OAAA,EACA+/B,GAAA,IAGArnB,EAAAqsB,gBAAA,WACArsB,EAAAojB,YAAAv5B,KAAAvC,OAAA,EACA0Y,EAAAsI,QAAA6Y,uBAAAr4B,EAAA0F,sBACAwR,EAAAsI,QAAA8Y,iBAAA,GACAphB,EAAAsI,QAAA+Y,gBAAA,GACArhB,EAAAsI,QAAAgZ,kBAAAx4B,EAAAyF,kBACAyR,EAAAsI,QAAAiZ,aAAA,GACAvhB,EAAAsI,QAAAkZ,kBAAA,EACA6F,GAAA,IAIArnB,EAAAssB,kBAAA,WACA,OAAA,GAGAtsB,EAAAusB,cAAA,WACA,OAAA,GAGAvsB,EAAAwsB,WAAA,WACA,GAAAzhC,GAAA,CACAiV,GAAAtC,QAAAkQ,kBAAA,EAAA,uBACA,IAAA6e,GAAAzsB,EAAArP,YACA+7B,EAAA,KAAA1sB,EAAAsI,QAAAgZ,kBAAA,KAAAthB,EAAAsI,QAAAgZ,iBACAz4B,GAAA2jC,WAAAE,EAAA3hC,EAAA0hC,GAAAvjC,KAAA,SAAAigB,GACA,GAAAzB,GAAA,GAAA6D,OAAApC,EAAAtf,OAAAkP,KAAA,YACAyS,QAAA9D,EAAA,4BACA1H,EAAAtC,QAAAkQ,kBAAA,EAAA,wBACA5N,EAAAtC,QAAAkQ,kBAAA,EAAA,oCACA,SAAAna,GACAuM,EAAAtC,QAAAkQ,kBAAA,EAAA,qBAIA,IAAA+e,IAAAj4B,KAAA,UAAAC,KAAA,WACAi4B,GAAAl4B,KAAA,SAAAC,KAAA,UAEAk4B,EAAA,WAGA,GAAAC,GAAA,KAAA9sB,EAAAsI,QAAA6Y,uBACA4L,EAAA/sB,EAAAsI,QAAA6Y,yBAAAwL,EAAAj4B,KACAs4B,EAAAhtB,EAAAsI,QAAA6Y,yBAAAyL,EAAAl4B,IAEA,QACAy0B,eAAArgC,EAAA6M,aAAAE,UACA41B,WAAA,KAAAzrB,EAAAsI,QAAAiZ,aAAA,KAAAvhB,EAAAsI,QAAAiZ,aACAC,iBAAAxhB,EAAAsI,QAAAkZ,iBACAoE,SAAAkH,GAAAE,GAAAD,EAAA,KAAA/sB,EAAAsI,QAAA6Y,uBACA8L,SAAAD,EACAP,MAAAzsB,EAAArP,YACAu8B,UAAAH,EACAI,SAAA,KAAAntB,EAAAsI,QAAA8Y,iBAAA,KAAAphB,EAAAsI,QAAA8Y,iBACAgM,UAAA,KAAAptB,EAAAsI,QAAA+Y,gBAAA,KAAArhB,EAAAsI,QAAA+Y,gBACAqL,YAAA,KAAA1sB,EAAAsI,QAAAgZ,kBAAA,KAAAthB,EAAAsI,QAAAgZ,oBAIA0G,EAAA,SAAAhG,GAKAA,EAAAC,OAAAoL,eAAA,EACAxkC,EAAAykC,0BAAAtL,EAAAC,OAAAvxB,YACAxH,KAAA,SAAAigB,GACA,GAAAtf,GAAAsf,GAAAA,EAAAtf,IACA,KACA,GAAA6d,GAAA,GAAA6D,OAAA1hB,IAAAkP,KAAA,oBAAA0M,KAAAuc,EAAAC,OAAA6H,cACAte,QAAA9D,EAAAsa,EAAAC,OAAA6H,aAAA,QACA9H,EAAAC,OAAAoL,eAAA,EAEA,MAAA5hB,GACAzL,EAAAtC,QAAAgL,UAAA,oBACAsZ,EAAAC,OAAAoL,eAAA,IAEA,WACArtB,EAAAtC,QAAAgL,UAAA,oBACAsZ,EAAAC,OAAAoL,eAAA,KAIAhG,EAAA,SAAAkG,GAEAA,IACAvtB,EAAAtC,QAAA8tB,qBAAA,YAAA,GACAxrB,EAAAtC,QAAA8vB,sBAAA,IAEA,SAAAjjC,eAAA4Y,QAAA,sBACAta,EAAAG,mBACAH,EAAAI,+BACAC,KAAA,SAAAC,GACAN,EAAAa,2BAAAP,EAAAM,QACAuW,EAAAtC,QAAAgL,UAAA,kBAMA,IAAA+kB,GAAA,SAAA5jC,GACA,GAAA8hC,GAAA9hC,GAAAA,EAAA8hC,aAEA3rB,GAAA6gB,aAAAh3B,GAAAA,EAAAg3B,cAAA,EACA7gB,EAAA8gB,gBAAA6K,EAAArkC,OACA0Y,EAAA+gB,WAAAl3B,GAAAA,EAAAk3B,YAAA,EACA/gB,EAAAghB,kBAAAn3B,IAAAA,EAAAm3B,gBAEAN,EAAA,4BAAAx3B,KAAA,SAAAuhB,GACAzK,EAAAsI,QAAAmZ,mBAAAhX,EAAA4M,QACArX,EAAAsI,QAAAmZ,mBAAAxiB,KAAA2tB,GACA5sB,EAAAsI,QAAAmZ,mBAAAxiB,KAAA0tB,KAGAjM,EAAA,YAAAx3B,KAAA,SAAAuhB,GACAzK,EAAAsI,QAAAoZ,aAAAjX,GAEA,IAAAijB,MACAC,MAEAhnC,OAAAkH,SAAAoV,KAAA1Z,QAAA,aAAA,IAAA5C,OAAAkH,SAAAoV,KAAA1Z,QAAA,qBAAA,MACAX,EAAAU,OAAAC,QAAA,MAAA,GACA,SAAAgB,eAAA4Y,QAAA,YAEAud,EAAA,eAAAx3B,KAAA,SAAAuhB,GAEA5hB,EAAA+kC,wBAAAnjB,EACAijB,EAAA7kC,EAAA+kC,wBAEA5tB,EAAAqP,WAAAxmB,EAAAwmB,UAEA,KAAA,GAAAwe,GAAA,EAAAA,EAAAH,EAAApmC,OAAAumC,IACA,oBAAAH,EAAAG,GAAAl5B,MAAA,YAAA+4B,EAAAG,GAAAl5B,MACAg5B,EAAA1uB,KAAAyuB,EAAAG,GAGA7tB,GAAAsI,QAAAqZ,YAAAgM,EACApjC,eAAAklB,QAAA,WAAA,WAIA,IAAA5mB,EAAA+kC,wBAAAtmC,QACA,IAAA0Y,EAAAsI,QAAAqZ,YAAAr6B,QACAo5B,EAAA,eAAAx3B,KAAA,SAAAuhB,GAEA5hB,EAAA+kC,wBAAAnjB,EACAijB,EAAA7kC,EAAA+kC,wBACA5tB,EAAAqP,WAAAxmB,EAAAwmB,UAEA,KAAA,GAAAwe,GAAA,EAAAA,EAAAH,EAAApmC,OAAAumC,IACA,oBAAAH,EAAAG,GAAAl5B,MAAA,YAAA+4B,EAAAG,GAAAl5B,MACAg5B,EAAA1uB,KAAAyuB,EAAAG,GAGA7tB,GAAAsI,QAAAqZ,YAAAgM,IAQA,SAAApjC,eAAA4Y,QAAA,YAEAud,EAAA,eAAAx3B,KAAA,SAAAuhB,GAEA5hB,EAAA+kC,wBAAAnjB,EACAijB,EAAA7kC,EAAA+kC,wBAEA5tB,EAAAqP,WAAAxmB,EAAAwmB,UAEA,KAAA,GAAAwe,GAAA,EAAAA,EAAAH,EAAApmC,OAAAumC,IACA,WAAAH,EAAAG,GAAAl5B,MACAg5B,EAAA1uB,KAAAyuB,EAAAG,GAGA7tB,GAAAsI,QAAAqZ,YAAAgM,EACApjC,eAAAklB,QAAA,WAAA,WAIA,IAAA5mB,EAAA+kC,wBAAAtmC,QACA,IAAA0Y,EAAAsI,QAAAqZ,YAAAr6B,QACAo5B,EAAA,eAAAx3B,KAAA,SAAAuhB,GAEA5hB,EAAA+kC,wBAAAnjB,EACAijB,EAAA7kC,EAAA+kC,wBACA5tB,EAAAqP,WAAAxmB,EAAAwmB,UAEA,KAAA,GAAAwe,GAAA,EAAAA,EAAAH,EAAApmC,OAAAumC,IACA,WAAAH,EAAAG,GAAAl5B,MACAg5B,EAAA1uB,KAAAyuB,EAAAG,GAGA7tB,GAAAsI,QAAAqZ,YAAAgM,KASAjN,EAAA,mBAAAx3B,KAAA,SAAAuhB,GACAzK,EAAAsI,QAAAsZ,cAAAnX,EACAzK,EAAAhE,UAGA,IAAA8xB,GAAA9tB,EAAAtC,QAAAqwB,sBAAA/tB,EAAAsI,QAAAoZ,aAEA55B,SAAAqa,QAAAwpB,EACA,SAAA3J,GACAA,EAAAgM,eAAA,EACAhM,EAAA2D,oBAAA,EACA3D,EAAAiF,kBAAA,EACAjF,EAAAyF,kBAAA,EACAzF,EAAAqL,eAAA,EACArL,EAAAqH,gBAAA,EACArH,EAAAuI,cAAA,EACAvI,EAAA2I,gBAAA,EACA3I,EAAA+I,mBAAA,EAEA/I,EAAAiM,YAAAjM,EAAAgD,sBAAA19B,OAAA06B,EAAAmD,qBAAA79B,OAEA06B,EAAAkM,oBAAAJ,EAAA9L,EAAAmL,UAEArlC,QAAAqa,QAAA6f,EAAAmM,UACA,SAAAC,GACAA,EAAArC,4BAAA,IAGA/J,EAAAE,gBACAmB,eAAA,EACAC,iBAAA,EACAC,0BAAA9C,EAAA+C,WAAAC,MACAC,wBAAAjD,EAAA+C,WAAAG,OACAC,oBAAA,EACAC,wBAAA,EACAC,0BAAA,EACAC,iBAAA,EACAC,aAAA,EACAlC,UAAA9hB,EAAA8hB,UACAqC,aAEA7B,MAAA,aACAC,YAAA,GACAC,cAAA,EACAC,kBAAA,EACAL,MAAApiB,EAAAmiB,4BAAA,MAAA,MACAO,aAAA,ipBAgBAJ,MAAA,eACAC,YAAA,eACAC,cAAA,EACAC,kBAAA,EACAM,MAAAC,UAAAvC,EAAA4N,KACAjM,MAAApiB,EAAAmiB,4BAAA,MAAA,MACAO,aAAA,6OAUAJ,MAAA,aACAC,YAAA,cACAC,cAAA,EACAC,kBAAA,EACAL,MAAApiB,EAAAmiB,4BAAA,MAAA,QAGAt4B,KAAAm4B,EAAAmM,aAIAnuB,EAAAojB,YAAAv5B,KAAA8hC,CAEA,IAAA2C,GAAAtuB,EAAAojB,YAAAe,WAAA,GACAoK,EAAAvuB,EAAAojB,YAAAe,WAAA,EAEAnkB,GAAAsI,QAAA6Y,yBAAAr4B,EAAAmO,OAAAK,OAAAooB,YACA4O,EAAAnL,SAAA,EACAoL,EAAApL,SAAA,IAGAmL,EAAAnL,SAAA,EACAoL,EAAApL,SAAA,GAEAnjB,EAAAskB,QAAAI,KAAAyH,UAIAtjC,GAAAw+B,aAAAwF,KACA3jC,KAAA,SAAAW,GACA4jC,EAAA5jC,IAEA,SAAAA,GACAmW,EAAAtC,QAAAkQ,kBAAA,EAAA,mBALA/kB,WAOA,WACA0kC,IACAvtB,EAAAtC,QAAA8tB,qBAAA,YAAA,GACAxrB,EAAAtC,QAAA8vB,sBAAA,MAUAxtB,GAAAtC,QAAA8tB,qBAAA,YAAA,GACAxrB,EAAAtC,QAAA8vB,sBAAA,GACA3kC,EAAA8kB,2BAAA7kB,EAAAgN,eAAAS,oBAAA,KAAA,KAAA1N,EAAAG,mBACAE,KAAA,SAAAW,GACAhB,EAAA8gB,aAAA0I,KAAAxoB,EAAAwoB,KACAgV,GAAA,IACA,SAAAx9B,GACAmW,EAAAtC,QAAAkQ,kBAAA,EAAA,mBALA/kB,WAOA,WACAmX,EAAAtC,QAAA8tB,qBAAA,YAAA,GACAxrB,EAAAtC,QAAA8vB,sBAAA,KAIA3kC,EAAAmqB,qBAAA,yCCr2CA,WACA,GAAA5P,GAAAtb,QAAAC,OAAA,UACAqb,GAAA/V,WACA,6BACA,SAAA,aAAA,QAAA,YAAA,WAAA,kBAAA,YAAA,eAAA,kBAAA,4BACA,SAAA2S,EAAAzX,EAAAie,EAAA5d,EAAA0S,EAAAmlB,EAAA33B,EAAAD,EAAAE,EAAAuB,GAwpCA,QAAAo2B,GAAAC,GACA,MAAA3gB,GAAAtC,QAAAkjB,8BAAAD,EAAA73B,EAAAgN,eAAAC,UAvpCAiK,EAAAtC,QAAA3U,EACAiX,EAAAlX,UAAAA,EAGAD,EAAAomB,oBACApmB,EAAA4kB,0BACA5kB,GAAAiyB,YACAjyB,EAAAwlB,mBAAA,EAOArO,EAAA6gB,aAAA,EACA7gB,EAAA8gB,gBAAA,EACA9gB,EAAA+gB,WAAA,EACA/gB,EAAAghB,gBAAA,EACAhhB,EAAAihB,qBAAA,EAEAr4B,EAAAU,OAAAC,QAAA,MAAA,IACAyW,EAAArP,aAAA,EACAqP,EAAAuO,eAAA,IAGAvO,EAAArP,aAAA,EACAqP,EAAAuO,eAAA,GAMA1lB,EAAA2lC,YACA3lC,EAAA2lC,WACArN,uBAAAr4B,EAAA0F,sBACAigC,wBAAA,GACAC,aAAA,GACArN,gBAAA,GACAC,kBAAAx4B,EAAAyF,kBACAgzB,aAAA,GACAE,sBACAkN,uBACAC,YACAjN,eACAC,mBAGA5hB,EAAAsI,QAAAzf,EAAA2lC,SAEA,IAAA3M,GAAA,0BAAAvW,KAAA3kB,OAAAwkB,UAAAD,UAAAG,cAEAvI,UAAAhK,MAAAhQ,EAAA4R,SAAAC,uBACAqF,EAAA8hB,UAAA,GACA9hB,EAAA+hB,oBAAA,SAAAC,GACA,MAAA5b,MAAAoZ,OAAAwC,EAAAC,OAAAC,eAAAr4B,KAAAvC,OAAA,GAAA0Y,EAAA8hB,WAEA,IAAAO,GAAA,WAIA,GAAAF,GAAA3jB,EAAAsE,UAAAsf,QAAA,GAEA,SAEAE,MAAA,oBACAC,YAAA,SACAC,cAAA,EACAJ,MAAAD,EAAA,MAAA,KACAM,kBAAA,IAGAH,MAAA,eACAC,YAAA,YACAC,cAAA,EACAJ,MAAAD,EAAA,MAAA,MACAM,kBAAA,EACAC,aAAA,6HAOAJ,MAAA,aACAC,YAAA,QACAC,cAAA,EACAJ,MAAApiB,EAAAmiB,4BAAA,KAAA,KACAM,kBAAA,EACAC,aAAA,kbASAJ,MAAA,gBACAC,YAAA,iBACAI,WAAA,oBACAH,cAAA,EACAI,mBAAA,EACAR,MAAAD,EAAA,KAAA,KACAM,kBAAA,EACAI,UAAAV,EAAA,YAAA,GACAW,gBAAAX,EAAA,YAAA,GACAY,MAAAC,UAAAvC,EAAAwC,QAGAX,MAAA,aACAC,YAAA,eACAC,cAAA,EACAI,mBAAA,EACAR,MAAAD,EAAA,KAAA,MACAM,kBAAA,EACAS,WAAA,EACAL,UAAAV,EAAA,YAAA,GACAW,gBAAAX,EAAA,YAAA,GACAO,aAAA,yVAYAJ,MAAA,kBACAC,YAAA,OACAC,cAAA,EACAJ,MAAAD,EAAA,KAAA,MACAM,kBAAA,IAGAH,MAAA,qBACAC,YAAA,UACAC,cAAA,EACAJ,MAAAD,EAAA,KAAA,MACAM,kBAAA,IAGAH,MAAA,6BACAC,YAAA,cACAC,cAAA,EACAJ,MAAAD,EAAA,KAAA,MACAM,kBAAA,EACAC,aAAA,iMAMAJ,MAAA,UACAC,YAAA,WACAI,WAAA,oBACAH,cAAA,EACAI,mBAAA,EACAH,kBAAA,EACAL,MAAAD,EAAA,KAAA,KACAU,UAAAV,EAAA,YAAA,GACAW,gBAAAX,EAAA,YAAA,KAGAG,MAAA,aACAC,YAAA,cACAC,cAAA,EACAJ,MAAAD,EAAA,KAAA,MACAM,kBAAA,IAGAH,MAAA,UACAC,YAAA,UACAM,UAAA,gBACAC,gBAAA,uBACAJ,aAAA1iB,EAAArP,YAEA,swKAiGA,swKA+FAwyB,SAAA,EACAf,MAAAD,EAAA,MAAA,MACAe,WAAA,EACAT,kBAAA,IAIAziB,GAAAojB,aACAC,eAAA,EACAC,iBAAA,EACAC,0BAAA9C,EAAA+C,WAAAC,MACAC,wBAAAjD,EAAA+C,WAAAG,OACAC,oBAAA,EACAC,wBAAA,EACAC,0BAAA,EACAC,iBAAA,EACAC,aAAA,EACAlC,UAAA9hB,EAAA8hB,UACAmC,2BAAA,EACAC,sBAAA,+CACAC,WAAA9B,IACA+B,YACA,sUAWAC,cAAA,SAAAC,GACAtkB,EAAAskB,QAAAA,CAGA,IAAAC,GAAA,WACAvkB,EAAA8gB,gBAAA9gB,EAAAskB,QAAAE,KAAAC,eAAAzkB,EAAAskB,QAAAI,MAAAp9B,OAEA0Y,GAAAskB,QAAAE,KAAAvnB,GAAAsnB,aAAAvkB,EAAAukB,GACAvkB,EAAAskB,QAAAK,WAAA1nB,GAAA2nB,wBAAA5kB,EAAA,SAAAgiB,GACA1mB,EAAA,WACA0mB,EAAA6C,kBAAA7kB,EAAA+hB,oBAAAC,IACA,OAKAhiB,EAAAslB,UAAA,SAAAtD,GACA1mB,EAAA,WACA0E,EAAAskB,QAAAiB,UAAAD,UAAAtD,EAAAC,SACA,KAGAjiB,EAAAwlB,YAAA,SAAAxD,GACA,MAAAA,GAAAC,OAAAwD,mCAAA,YAAA,UAGAzlB,EAAAkrB,eAAA,SAAAlJ,GACA1mB,EAAA,WACAkuB,EAAAxH,IACA,MAEAhiB,EAAAmrB,YAAA,SAAAnJ,GACAH,GACA2H,EAAAxH,GAIA,IAAAwH,GAAA,SAAAxH,GAEA,GAAAyH,GAAA,SAAApB,GACA,MAAAx/B,GAAA6gC,qBAAArB,EAAA33B,YACAxH,KAAA,SAAAW,GACA,GAAA8/B,IACAtB,SAAAA,EACAuB,kBAAA//B,EAAA+/B,kBACAhpB,IAAA,SAAAipB,GACA,OACAn1B,KAAAm1B,EAAAn5B,WACAiE,KAAAk1B,EAAAC,aACAlZ,aAAAiZ,EAAA5E,IAAAvF,cAIA,OAAAiK,IAEA,SAAA9/B,GAEA,KADAmW,GAAAtC,QAAAkQ,kBAAA,EAAA,iBACA,GAAA7M,OAAAlX,MAIAkgC,EAAA,SAAAJ,GAEA,MADA9gC,GAAAwmB,WAAAoH,WAAA,yBAAAkT,EAAAC,kBACA5pB,EAAAtC,QAAAgL,UAAA,sBAAAihB,EAAAtB,UAAA5d,OACAvhB,KAAA,SAAAW,GACAmW,EAAAknB,mBAAAp+B,EAAA4R,SAAAE,mBACA,IAAAovB,GAAAngC,EAAAgmB,UAAAgf,yBAAAn6B,KACAw1B,EAAAlqB,EAAAtC,QAAA0pB,iBAAA,qBAAAv9B,EAAAgmB,UAAAqa,YAEAC,GACA9B,SAAAsB,EAAAtB,SACA2B,iBAAAA,EACAE,WAAAA,EAEA,OAAAC,MAIAC,EAAA,SAAAD,GACA,MAAAthC,GAAAuhC,kBACAC,YAAAF,EAAA9B,SAAA33B,WACA45B,YAAAH,EAAAH,iBACAE,WAAAC,EAAAD,aAEAhhC,KAAA,WACAL,EAAAihB,kBAAA,8BAAA,kBAAA,SACA,SAAAjgB,GAGA,KAFAhB,GAAAihB,kBAAA,8BAAA,cAAA,QACA9J,EAAAtC,QAAAkQ,kBAAA,EAAA,iBACA,GAAA7M,OAAAlX,KAIAhB,GAAAihB,kBAAA,4BAAA,aAAA,OACA,IAAAue,GAAArG,EAAAC,MACAoG,GAAAkC,cAAA,EACAd,EAAApB,GACAn/B,KAAA,SAAAygC,GACA,MAAAI,GAAAJ,KAEAzgC,KAAA,SAAAihC,GACA,MAAAC,GAAAD,KAEAjhC,KAAA,WACAm+B,GAAA,KARAoC,WAUA,WACApB,EAAAkC,cAAA,KAIAuE,EAAA,SAAA9M,GAEAhiB,EAAAtC,QAAAgL,UAAA,iBAAA,MAAA+B,OAAAvhB,KAAA,SAAAuhB,GACAuX,EAAAC,OAAA8M,gBAAA,CACA,IAAA1jC,GAAA22B,EAAAC,MACAp5B,GACAmmC,eAAAhN,EAAAC,OAAAvxB,WAAAsxB,EAAAC,OAAAnX,iBACA5hB,KAAA,SAAAigB,GACA,OAAAA,GAAAA,EAAAtf,KAAAuf,SACA,GAAAD,EAAAtf,KAAAuf,QACApJ,EAAAtC,QAAAkQ,kBAAA,EAAA,2BAAAviB,GACAxC,EAAAihB,kBAAA,kCAAA,uBAAA,+BAEA,GAAAX,EAAAtf,KAAAuf,OACApJ,EAAAtC,QAAAkQ,kBAAA,EAAA,+BAAAviB,GAGA2U,EAAAtC,QAAAkQ,kBAAA,EAAA,wBAEAoU,EAAAC,OAAA8M,gBAAA,EAEA1H,GAAA,KAEA,SAAA5zB,GACAuM,EAAAtC,QAAAkQ,kBAAA,EAAA,iBACAoU,EAAAC,OAAA8M,gBAAA,MAKA/uB,GAAAivB,iBAAA,SAAAjN,GACA1mB,EAAA,WACAwzB,EAAA9M,IACA,MAGAhiB,EAAAkvB,sBAAA,SAAAlN,GACAH,GACAiN,EAAA9M,IAIAhiB,EAAAolB,uBAAA,SAAApD,GACA1mB,EAAA,WACAwpB,EAAA9C,IACA,KAGA,IAAA0D,GAAA,SAAA1D,GACAA,EAAAC,OAAA0D,oBAAA,EAGA98B,EAAA8gB,aAAAC,WAAAoY,EAAAC,OAAAvxB,WACA7H,EAAA8gB,aAAA+D,YAAAsU,EAAAC,OAAAgD,IACAp8B,EAAA8gB,aAAAP,OAAA4Y,EAAAC,OAAA2D,SACA/8B,EAAA8gB,aAAAkc,WAAA7D,EAAAC,OAAA6D,kBAGA9lB,EAAAtC,QAAAwoB,6BAAAlE,EAAAC,OAAAkE,QAEA,IAAAC,GAAApE,EAAAC,OAAAkE,QAAA,OAAA,MACAt9B,GAAAihB,kBAAA,2BAAA,SAAAsc,EAAA,UAAAA,EAAA,WAEAv9B,EAAAw9B,gBAAArE,EAAAC,OAAAvxB,YACAxH,KAAA,SAAAW,GAGAhB,EAAAykB,iBAAA7N,KAAAC,MAAA7V,EAAAsf,UAGAtgB,EAAA8gB,aAAAlM,UAAAgC,KAAAC,MAAA7V,EAAAsf,UACAtgB,EAAA8gB,aAAAmB,gBAAAjhB,EAAAihB,gBACAjiB,EAAA8gB,aAAAwI,SAAAtoB,EAAAklB,WACAlmB,EAAA8gB,aAAAyI,cAAAvoB,EAAAy8B,gBACAz9B,EAAA0pB,eAAA1pB,EAAA09B,wBAAA18B,EAAAsf,UAEAtgB,EAAA8kB,2BAAA9jB,EAAAklB,WAAAllB,EAAAy8B,gBAAAtE,EAAAC,OAAAvxB,WAAA7H,EAAAG,mBACAE,KAAA,SAAAW,GACAtB,EAAAgD,qBAAA,EACA3C,EAAAU,KAAAR,EAAAiB,IAAAiF,wBAEA,SAAAnF,GACAmW,EAAAtC,QAAAkQ,kBAAA,EAAA,oBAGA,SAAA/jB,GACAmW,EAAAtC,QAAAkQ,kBAAA,EAAA,mBAGAoU,EAAAC,OAAA0D,oBAAA,EAEA3lB,GAAA8mB,qBAAA,SAAA9E,GACA1mB,EAAA,WACAoqB,EAAA1D,IACA,MAEAhiB,EAAA+mB,kBAAA,SAAA/E,GACAH,GACA6D,EAAA1D,GAIA,IAAAgF,GAAA,SAAAhF,GAEA,GAAA32B,GAAA22B,EAAAC,MACAjiB,GAAAtC,QAAAgL,UAAA,mBAAArd,GAAAof,OAAAvhB,KAAA,SAAAuhB,GAEAuX,EAAAC,OAAAgF,kBAAA,EACAjnB,EAAAknB,mBAAA,oBAEA,IAAAC,GAAAnnB,EAAAtC,QAAA0pB,iBAAA,oBAAA3c,EAAAoF,UAAAsX,iBAEAt+B,GACAm+B,iBAAAhF,EAAAC,OAAAvxB,WAAAy2B,EAAAnF,EAAAC,OAAAnX,iBACA5hB,KAAA,SAAAigB,GAEA,OAAAA,GAAAA,EAAAtf,KAAAuf,QAEA,GAAAD,EAAAtf,KAAAuf,QACApJ,EAAAtC,QAAAkQ,kBAAA,EAAA,yBAAAviB,GACAxC,EAAAihB,kBAAA,oCACA,wBACA,+BACA,GAAAX,EAAAtf,KAAAuf,OACApJ,EAAAtC,QAAAkQ,kBAAA,EAAA,yBAAAviB,GACA,GAAA8d,EAAAtf,KAAAuf,QACApJ,EAAAtC,QAAAkQ,kBAAA,EAAA,8BAAAviB,GAIA22B,EAAAC,OAAAgF,kBAAA,EAGAI,GAAA,GAEAx+B,EAAAihB,kBAAA,mCACA,wBACA,iCAEA9J,EAAAtC,QAAAkQ,kBAAA,EAAA,iBAEAoU,EAAAC,OAAAgF,kBAAA,IAEA,WAEAjnB,EAAAtC,QAAAkQ,kBAAA,EAAA,yBAAAviB,GACAxC,EAAAihB,kBAAA,mCACA,wBACA,8BACAkY,EAAAC,OAAAgF,kBAAA,MAKAjnB,GAAAsnB,mBAAA,SAAAtF,GACA1mB,EAAA,WACA0rB,EAAAhF,IACA,MAEAhiB,EAAAunB,gBAAA,SAAAvF,GACAH,GACAmF,EAAAhF,GAIA,IAAAwF,GAAA,SAAAxF,GACAA,EAAAC,OAAAwF,kBAAA,EAGA5+B,EAAAykB,oBACAzkB,EAAA4kB,oBACA5kB,EAAA8gB,aAAAlM,aACA5U,EAAA8gB,aAAAP,OAAA,EAEAvgB,EAAA8gB,aAAAC,WAAAoY,EAAAC,OAAAvxB,WACA7H,EAAA8gB,aAAA+D,YAAAsU,EAAAC,OAAAgD,IACAp8B,EAAA8gB,aAAAkc,WAAA7D,EAAAC,OAAA6D,kBACAj9B,EAAA8gB,aAAAoN,aAAAiL,EAAAC,OAAAlL,aACAluB,EAAA8gB,aAAA+d,oBAAA1F,EAAAC,OAAA0F,cAGA9+B,EAAA8gB,aAAAwI,SAAA6P,EAAAC,OAAAlT,WAEAlmB,EAAAihB,kBAAA,2BAAA,qBAAA,gBAEAjhB,EAAA8kB,2BAAA7kB,EAAAgN,eAAAE,qBAAA,KAAA,KAAAnN,EAAAG,mBACAE,KAAA,SAAAW,GACAjB,EAAAU,KAAAR,EAAAiB,IAAAkF,wBACA,SAAApF,GACAmW,EAAAtC,QAAAkQ,kBAAA,EAAA,mBAIA5N,GAAA6nB,mBAAA,SAAA7F,GACA1mB,EAAA,WACAksB,EAAAxF,IACA,MAEAhiB,EAAA8nB,gBAAA,SAAA9F,GACAH,GACA2F,EAAAxF,GAIA,IAAA+F,GAAA,SAAA/F,GACAgG,EAAAhG,GAEAhiB,GAAAioB,gBAAA,SAAAjG,GACA1mB,EAAA,WACAysB,EAAA/F,IACA,MAEAhiB,EAAAkoB,aAAA,SAAAlG,GACAH,GACAkG,EAAA/F,GAIA,IAAAmG,GAAA,SAAAnG,GAEA,GAAAoG,GAAA,SAAAC,GACA,MAAAx/B,GAAAy/B,qBAAAD,EAAA33B,WAAAsP,EAAArP,aACAzH,KAAA,SAAAW,GACA,GAAA0+B,IACAF,SAAAA,EACAG,eAAA3+B,EAAA2+B,eACAC,gBAAA5+B,EAAA4+B,gBACA7nB,IAAA,SAAA8nB,GACA,OACAh0B,KAAAg0B,EAAAryB,KAAApF,GACA0D,KAAA+zB,EAAAryB,KAAAsyB,SACAC,OAAAF,EAAAE,UAIA,OAAAL,IAEA,SAAA1+B,GAEA,KADAmW,GAAAtC,QAAAkQ,kBAAA,EAAA,iBACA,GAAA7M,OAAAlX,MAIAg/B,EAAA,SAAAN,GAEA,MADA1/B,GAAAwmB,WAAAoH,WAAA,kBAAA8R,EAAAE,gBACAzoB,EAAAtC,QAAAgL,UAAA,iBAAA6f,EAAAF,UAAA5d,OACAvhB,KAAA,SAAAW,GACAmW,EAAAknB,mBAAA,kBACA,IAAA4B,GAAAj/B,EAAAgmB,UAAAsf,iBAAAz6B,KACAs0B,EAAAn/B,EAAAgmB,UAAAsf,iBAAAvG,OACAK,GACAZ,SAAAE,EAAAF,SACAG,eAAAD,EAAAC,eACAQ,eAAAA,EACAF,eAAAA,EAEA,OAAAG,MAIAC,EAAA,SAAAD,GACA,MAAApgC,GAAAs/B,gBACAz3B,WAAAu4B,EAAAZ,SAAA33B,WACAy4B,eAAArgC,EAAA6M,aAAAC,QACA4yB,eAAAS,EAAAT,eACAI,OAAAK,EAAAD,eACAI,OAAAH,EAAAH,iBAEA5/B,KAAA,WACAL,EAAAihB,kBAAA,2BAAA,oBAAA,UACA9J,EAAAtC,QAAAkQ,kBAAA,EAAA,+BAAAqb,EAAAZ,WACA,SAAAx+B,GAGA,KAFAhB,GAAAihB,kBAAA,2BAAA,gBAAA,UACA9J,EAAAtC,QAAAkQ,kBAAA,EAAA,2BAAAqb,EAAAZ,UACA,GAAAtnB,OAAAlX,KAIAhB,GAAAihB,kBAAA,2BAAA,eAAA;AACA,GAAAue,GAAArG,EAAAC,MACAoG,GAAAgB,gBAAA,EACAjB,EAAAC,GACAn/B,KAAA,SAAAq/B,GACA,MAAAM,GAAAN,KAEAr/B,KAAA,SAAA+/B,GACA,MAAAC,GAAAD,KAEA//B,KAAA,WACAm+B,GAAA,KARAe,WAUA,WACAC,EAAAgB,gBAAA,IAGArpB,GAAAspB,iBAAA,SAAAtH,GACA1mB,EAAA,WACA6sB,EAAAnG,IACA,MAEAhiB,EAAAupB,cAAA,SAAAvH,GACAH,GACAsG,EAAAnG,GAIA,IAAA8C,GAAA,SAAA9C,GACAhiB,EAAAtC,QAAAgL,UAAA,eAAA0mB,MAAApN,EAAAC,OAAA+C,sBAAApb,WAAAoY,EAAAC,OAAAgD,MAEAjlB,GAAAolB,uBAAA,SAAApD,GACA1mB,EAAA,WACAwpB,EAAA9C,IACA,MAEAhiB,EAAAqlB,oBAAA,SAAArD,GACAH,GACAiD,EAAA9C,GAIA,IAAAoJ,GAAA,SAAApJ,GACA,GAAAmI,GAAAnI,EAAAC,OACA5N,EAAA,SAAA7L,GACA,MAAAA,GAAA9X,WAAA2a,gBAAA8e,EAAAz5B,WAAA2a,eAEAggB,EAAA,SAAAhD,GACAA,IAAAA,EAAAlC,SAAAkC,EAAAgH,WACA3J,GAAAzD,OAAAoG,IAEAroB,EAAAtC,QAAAgL,UAAA,yBAAAohB,aAAAK,EAAAL,gBAGAyB,EAAAvrB,EAAAojB,YAAAv5B,KAAAmc,OAAAqO,GAAA,EACAkX,GACAF,EAAAE,IAEAvrB,EAAAtC,QAAA8tB,qBAAA,YAAA,GACA3iC,EAAAw+B,cACA8B,eAAAgB,EAAAhB,eACAsC,WAAAtB,EAAAL,aACAtI,kBAAA,IAEAt4B,KAAA,SAAAW,GACA,GAAA6hC,IAAA7hC,GAAAA,EAAA8hC,eAAA3lB,OAAAqO,GAAA,EACAgX,GAAAK,IAEA,SAAA7hC,GACAmW,EAAAtC,QAAAkQ,kBAAA,EAAA,mBAVA/kB,WAYA,WACAmX,EAAAtC,QAAA8tB,qBAAA,YAAA,MAKAxrB,GAAA4rB,6BAAA,SAAA5J,GACA1mB,EAAA,WACA8vB,EAAApJ,IACA,MAEAhiB,EAAA6rB,0BAAA,SAAA7J,GACAH,GACAuJ,EAAApJ,IAIAhiB,EAAAmsB,QAAA,WACA9E,GAAA,IAGArnB,EAAAkP,eAAA,WACA,MAAArmB,GAAA03B,mBAKA13B,EAAAykB,oBACAzkB,EAAA4kB,oBACA5kB,EAAA8gB,aAAAlM,aACA5U,EAAA8gB,aAAAP,OAAA,EAGApJ,EAAAtC,QAAAwoB,8BAAA,GAEAr9B,EAAAihB,kBAAA,2BAAA,0BAAA,yBAEAjhB,GAAA8kB,2BAAA7kB,EAAAgN,eAAAC,SAAA,KAAA,KAAAlN,EAAAG,mBACAE,KAAA,SAAAW,GACAtB,EAAAgD,qBAAA,EACA3C,EAAAU,KAAAR,EAAAiB,IAAAiF,wBACA,SAAAnF,GACAmW,EAAAtC,QAAAkQ,kBAAA,EAAA,qBAnBAtjB,EAAAk2B,SACA,IAuBAxgB,EAAAosB,cAAA,WACApsB,EAAAojB,YAAAv5B,KAAAvC,OAAA,EACA+/B,GAAA,IAGArnB,EAAAqsB,gBAAA,WACArsB,EAAAojB,YAAAv5B,KAAAvC,OAAA,EACA0Y,EAAAsI,QAAA6Y,uBAAAr4B,EAAA0F,sBACAwR,EAAAsI,QAAAmmB,wBAAA,GACAzuB,EAAAsI,QAAAomB,aAAA,GACA1uB,EAAAsI,QAAA+Y,gBAAA,GACArhB,EAAAsI,QAAAgZ,kBAAAx4B,EAAAyF,kBACAyR,EAAAsI,QAAAiZ,aAAA,GACA8F,GAAA,IAKArnB,EAAAssB,kBAAA,WACA,OAAA,EAGA,IAAAR,GAAA,SAAA9J,GAEA,MADAA,GAAAC,OAAA8J,4BAAA,EACAljC,EAAAijC,oBACAzB,YAAArI,EAAAC,OAAAvxB,WACA45B,YAAAtI,EAAA0C,KAAAsH,UAAA/J,OAAAvxB,aAEAxH,KAAA,WACAL,EAAAihB,kBAAA,2BAAA,kCAAA,wBACAud,GAAA,IACA,SAAAx9B,GACAhB,EAAAihB,kBAAA,2BAAA,8BAAA,wBACA9J,EAAAtC,QAAAkQ,kBAAA,EAAA,mBATA/kB,WAWA,WACAm5B,EAAAC,OAAA8J,4BAAA,IAIA/rB,GAAAisB,6BAAA,SAAAjK,GACA1mB,EAAA,WACAwwB,EAAA9J,IACA,MAGAhiB,EAAAksB,0BAAA,SAAAlK,GACAH,GACAiK,EAAA9J,IAIAhiB,EAAAusB,cAAA,WACA,OAAA,GAGAvsB,EAAAwsB,WAAA,WACA,GAAAzhC,GAAA,CACAiV,GAAAtC,QAAAkQ,kBAAA,EAAA,uBACA,IAAA6e,GAAAzsB,EAAArP,YACA+7B,EAAA,KAAA1sB,EAAAsI,QAAAgZ,kBAAA,KAAAthB,EAAAsI,QAAAgZ,iBACAz4B,GAAA2jC,WAAAE,EAAA3hC,EAAA0hC,GAAAvjC,KAAA,SAAAigB,GACA,GAAAzB,GAAA,GAAA6D,OAAApC,EAAAtf,OAAAkP,KAAA,YACAyS,QAAA9D,EAAA,yBACA1H,EAAAtC,QAAAkQ,kBAAA,EAAA,wBACA5N,EAAAtC,QAAAkQ,kBAAA,EAAA,oCACA,SAAAna,GACAuM,EAAAtC,QAAAkQ,kBAAA,EAAA,qBAKA,IAAA+e,IAAAj4B,KAAA,UAAAC,KAAA,WACAi4B,GAAAl4B,KAAA,SAAAC,KAAA,UAEAk4B,EAAA,WAGA,GAAAC,GAAA,KAAA9sB,EAAAsI,QAAA6Y,uBACA4L,EAAA/sB,EAAAsI,QAAA6Y,yBAAAwL,EAAAj4B,KACAs4B,EAAAhtB,EAAAsI,QAAA6Y,yBAAAyL,EAAAl4B,IAEA,QACAy0B,eAAArgC,EAAA6M,aAAAC,QACA61B,WAAA,KAAAzrB,EAAAsI,QAAAiZ,aAAA,KAAAvhB,EAAAsI,QAAAiZ,aACAqE,SAAAkH,GAAAE,GAAAD,EAAA,KAAA/sB,EAAAsI,QAAA6Y,uBACA8L,SAAAD,EACAP,MAAAzsB,EAAArP,YACAu8B,UAAAH,EACAuC,gBAAA,KAAAtvB,EAAAsI,QAAAmmB,wBAAA,KAAAzuB,EAAAsI,QAAAmmB,wBACAc,OAAA,KAAAvvB,EAAAsI,QAAAomB,aAAA,KAAA1uB,EAAAsI,QAAAomB,aACAtB,UAAA,KAAAptB,EAAAsI,QAAA+Y,gBAAA,KAAArhB,EAAAsI,QAAA+Y,gBACAqL,YAAA,KAAA1sB,EAAAsI,QAAAgZ,kBAAA,KAAAthB,EAAAsI,QAAAgZ,oBAIA0G,EAAA,SAAAhG,GAKAA,EAAAC,OAAAoL,eAAA,EACAxkC,EAAA2mC,gBAAAxN,EAAAC,OAAAvxB,YACAxH,KAAA,SAAAigB,GACA,GAAAtf,GAAAsf,GAAAA,EAAAtf,IACA,KACA,GAAA6d,GAAA,GAAA6D,OAAA1hB,IAAAkP,KAAA,oBAAA0M,KAAAuc,EAAAC,OAAA6H,cACAte,QAAA9D,EAAAsa,EAAAC,OAAA6H,aAAA,QACA9H,EAAAC,OAAAoL,eAAA,EAEA,MAAA5hB,GACAzL,EAAAtC,QAAAgL,UAAA,oBACAsZ,EAAAC,OAAAoL,eAAA,IAEA,WACArtB,EAAAtC,QAAAgL,UAAA,oBACAsZ,EAAAC,OAAAoL,eAAA,KAIAhG,EAAA,SAAAkG,GAEAA,IACAvtB,EAAAtC,QAAA8tB,qBAAA,YAAA,GACAxrB,EAAAtC,QAAA8vB,sBAAA,GAGA,IAAAC,GAAA,SAAA5jC,GACA,GAAA8hC,GAAA9hC,GAAAA,EAAA8hC,aAEA3rB,GAAA6gB,aAAAh3B,GAAAA,EAAAg3B,cAAA,EACA7gB,EAAA8gB,gBAAA6K,EAAArkC,OACA0Y,EAAA+gB,WAAAl3B,GAAAA,EAAAk3B,YAAA,EACA/gB,EAAAghB,kBAAAn3B,IAAAA,EAAAm3B,gBAEAN,EAAA,0BAAAx3B,KAAA,SAAAuhB,GACAzK,EAAAsI,QAAAmZ,mBAAAhX,EAAA4M,QACArX,EAAAsI,QAAAmZ,mBAAAxiB,KAAA2tB,GACA5sB,EAAAsI,QAAAmZ,mBAAAxiB,KAAA0tB,KAGAjM,EAAA,cAAAx3B,KAAA,SAAAuhB,GACAzK,EAAAsI,QAAAqmB,oBAAAlkB,IAEAiW,EAAA,mBAAAx3B,KAAA,SAAAuhB,GACAzK,EAAAsI,QAAAsmB,SAAAnkB,IAEAiW,EAAA,eAAAx3B,KAAA,SAAAuhB,GACAzK,EAAAsI,QAAAqZ,YAAAlX,IAEAiW,EAAA,mBAAAx3B,KAAA,SAAAuhB,GACAzK,EAAAsI,QAAAsZ,cAAAnX,EACAzK,EAAAhE,UAGA,IAAAyzB,GAAAzvB,EAAAtC,QAAAqwB,sBAAA/tB,EAAAsI,QAAAqmB,oBAEA7mC,SAAAqa,QAAAwpB,EACA,SAAA3J,GACAA,EAAAgM,eAAA,EACAhM,EAAA2D,oBAAA,EACA3D,EAAAiF,kBAAA,EACAjF,EAAAyF,kBAAA,EACAzF,EAAAqL,eAAA,EACArL,EAAAqH,gBAAA,EACArH,EAAA+M,gBAAA,EACA/M,EAAAuI,cAAA,EAEAvI,EAAA0N,WAAA1N,EAAAgD,sBAAA,GACAhD,EAAAiM,YAAAjM,EAAAgD,sBAAA19B,OACA06B,EAAA2N,6BAAAF,EAAAzN,EAAA4N,mBACA5N,EAAA6N,2BAAAJ,EAAAzN,EAAAsN,iBAEAxnC,QAAAqa,QAAA6f,EAAAmM,UACA,SAAAC,GACAA,EAAArC,4BAAA,IAEA/J,EAAAE,gBACAmB,eAAA,EACAC,iBAAA,EACAC,0BAAA9C,EAAA+C,WAAAC,MACAC,wBAAAjD,EAAA+C,WAAAG,OACAC,oBAAA,EACAC,wBAAA,EACAC,0BAAA,EACAC,iBAAA,EACAC,aAAA,EACAlC,UAAA9hB,EAAA8hB,UACAqC,aAEA7B,MAAA,aACAC,YAAA,GACAC,cAAA,EACAC,kBAAA,EACAL,MAAApiB,EAAAmiB,4BAAA,MAAA,MACAO,aAAA,ipBAgBAJ,MAAA,eACAC,YAAA,YACAC,cAAA,EACAC,kBAAA,EACAM,MAAAC,UAAAvC,EAAA4N,KACAjM,MAAApiB,EAAAmiB,4BAAA,MAAA,MACAO,aAAA,6OAUAJ,MAAA,aACAC,YAAA,cACAC,cAAA,EACAC,kBAAA,EACAL,MAAApiB,EAAAmiB,4BAAA,MAAA,QAGAt4B,KAAAm4B,EAAAmM,aAKAnuB,EAAAojB,YAAAv5B,KAAA8hC,EAGA4B,IACAvtB,EAAAtC,QAAA8tB,qBAAA,YAAA,GAEA3iC,EAAAw+B,aAAAwF,KACA3jC,KAAA,SAAAW,GACA4jC,EAAA5jC,IAEA,SAAAA,GACAmW,EAAAtC,QAAAkQ,kBAAA,EAAA,mBALA/kB,WAOA,WACA0kC,GACAvtB,EAAAtC,QAAA8tB,qBAAA,YAAA,GAEAxrB,EAAAtC,QAAA8vB,sBAAA,KAIAxtB,GAAAtC,QAAA8tB,qBAAA,YAAA,GACAxrB,EAAAtC,QAAA8vB,sBAAA,GAMA3kC,EAAA8kB,2BAAA7kB,EAAAgN,eAAAC,SAAA,KAAA,KAAAlN,EAAAG,mBACAE,KAAA,SAAAW,GACAhB,EAAA8gB,aAAA0I,KAAAxoB,EAAAwoB,KACAgV,GAAA,IACA,SAAAx9B,GACAmW,EAAAtC,QAAAkQ,kBAAA,EAAA,mBALA/kB,WAOA,WACAmX,EAAAtC,QAAA8tB,qBAAA,YAAA,GACAxrB,EAAAtC,QAAA8vB,sBAAA,KAIA3kC,EAAAmqB,qBAAA,sCC9qCA,WAEA,GAAA5P,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WAAA,gCACA,SAAA,aAAA,YAAA,4BAAA,kBAAA,eAAA,YACA,SAAA2S,EAAAzX,EAAAK,EAAA0B,EAAAvB,EAAAF,EAAAC,GAGAga,SAAAhK,MAAA,+CAEAjQ,EAAAwlB,mBAAA,EAEArO,EAAAsO,WAAA,EACA1lB,EAAAU,OAAAC,QAAA,MAAA,IACAyW,EAAArP,aAAA,EACAqP,EAAAuO,eAAA,IAGAvO,EAAArP,aAAA,EACAqP,EAAAuO,eAAA,EAIA,IAAAC,GAAA,WACAxO,EAAAsO,WAAA,EACAzlB,EAAA8kB,2BAAA7kB,EAAAgN,eAAAC,SAAA,KAAA,KAAAlN,EAAAG,mBACAE,KAAA,SAAAW,GACAjB,EAAAU,KAAAR,EAAAiB,IAAAiF,yBAFAnG,WAIA,WACAmX,EAAAsO,WAAA,IAIAtO,GAAAtC,QAAA3U,EAEAiX,EAAAyO,eAAA,WACA,MAAA5lB,GAAA03B,mBAIA7R,IACAF,SACAjmB,EAAAgD,qBAAA,KALAjB,EAAAk2B,SACA,GAOA,IAAA9R,GAAA,WACA7lB,EAAAykB,oBACAzkB,EAAA4kB,oBACA5kB,EAAA8gB,aAAAP,OAAA,EACAvgB,EAAA8gB,aAAAlM,aACA5U,EAAA8gB,aAAAmB,gBAAA,KACAjiB,EAAA8gB,aAAAC,WAAA,KACA/gB,EAAA8gB,aAAA+D,YAAA,KACA7kB,EAAA8gB,aAAAgF,aAAA,KACA9lB,EAAA8gB,aAAAP,OAAA,KACAvgB,EAAA8gB,aAAAiF,cAAA,YC1DA,WAEA,GAAAxL,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WAAA,mBACA,SAAA,WAAA,kBAAA,eACA,SAAA2S,EAAA1E,EAAAvS,EAAAF,GAGAia,SAAAhK,MAAA,uCAEA,IAAA+oB,GAAA,0BAAAvW,KAAA3kB,OAAAwkB,UAAAD,UAAAG,cAEArL,GAAA8vB,qBACAjnC,EAAAknC,uBACA7mC,KAAA,SAAAW,GACAmW,EAAAgwB,+BAAAnmC,GACA,SAAAA,GACAd,EAAA6kB,kBAAA,EAAA,kBAGA,IAAAqiB,GAAA,SAAAC,GACArnC,EAAAsnC,wBAAAD,EAAAj/B,IACA/H,KAAA,SAAAW,GACA,IACA,GAAA6d,GAAA,GAAA6D,OAAA1hB,GACA2hB,QAAA9D,EAAAwoB,EAAAjkB,UAEA,MAAAR,GACA1iB,EAAA6kB,kBAAA,EAAA,mBAEA,SAAA/jB,GACAd,EAAA6kB,kBAAA,EAAA,mBAGA5N,GAAAowB,2BAAA,SAAAF,GACA50B,EAAA,WACA20B,EAAAC,IACA,MAEAlwB,EAAAqwB,wBAAA,SAAAH,GACArO,GACAoO,EAAAC,UC3CA,WAEA,GAAA9sB,GAAAtb,QAAAC,OAAA,UAEAqb,GAAA/V,WAAA,8BAAA,SAAA,QAAA,eAAA,SAAA2S,EAAAwG,EAAA3d,GAEAmX,EAAAswB,WAAA,WACAtwB,EAAAuwB,kBAAA1nC,EAAA8gB,aAAA4mB,yBCPA,WAEA,GAAAntB,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WAAA,2BACA,SAAA,QAAA,cAAA,eAAA,kBAAA,oBAAA,OAAA,YAAA,eAAA,UAAA,gBAAA,WAAA,aAAA,YACA,SAAA2S,EAAAwG,EAAA0G,EAAArkB,EAAAE,EAAA0d,EAAAE,EAAA/d,EAAAge,EAAAC,EAAAC,EAAAxL,EAAA/S,EAAAO,GAcA,QAAA0nC,KACA,GAAA7pC,OAAAkH,SAAAoV,KAAA1Z,QAAA,gCAAA,GAAA,CACA,GAAA5C,OAAAkH,SAAAoV,KAAA1Z,QAAA,QAAA,GACA,GAAA,MAAAV,EAAA8gB,aAAAsc,eAAAp9B,EAAA49B,gBAAA,CACA,IAAA,GAAAoH,GAAAhlC,EAAAwmB,WAAAoH,WAAA,aAAAnvB,OAAA,EAAAumC,GAAA,EAAAA,IACA,wBAAAhlC,EAAAwmB,WAAAoH,WAAA,aAAAoX,GAAAl5B,MACA9L,EAAAwmB,WAAAoH,WAAA,aAAA5B,OAAAgZ,EAAA,EAGA,KAAA,GAAA7oB,GAAAnc,EAAAwmB,WAAAoH,WAAA,YAAAnvB,OAAA,EAAA0d,GAAA,EAAAA,IACA,WAAAyrB,EAAAzrB,GAAArQ,MAAA,UAAA87B,EAAAzrB,GAAArQ,MACA87B,EAAA5b,OAAA7P,EAAA,OAKA,KAAA,GAAAiR,GAAAptB,EAAAwmB,WAAAoH,WAAA,YAAAnvB,OAAA,EAAA2uB,GAAA,EAAAA,IACA,WAAAwa,EAAAxa,GAAAthB,MAAA,oBAAA87B,EAAAxa,GAAAthB,MAAA,YAAA87B,EAAAxa,GAAAthB,MACA87B,EAAA5b,OAAAoB,EAAA,OAOA,IAAA,MAAAptB,EAAA8gB,aAAAsc,eAAAp9B,EAAA29B,cAAA,CACA,IAAA,GAAAtgB,GAAArd,EAAAwmB,WAAAoH,WAAA,aAAAnvB,OAAA,EAAA4e,GAAA,EAAAA,IACA,gDAAArd,EAAAwmB,WAAAoH,WAAA,aAAAvQ,GAAAvR,MACA9L,EAAAwmB,WAAAoH,WAAA,aAAA5B,OAAA3O,EAAA,EAGA,KAAA,GAAApB,GAAAjc,EAAAwmB,WAAAoH,WAAA,YAAAnvB,OAAA,EAAAwd,GAAA,EAAAA,IACA,WAAA2rB,EAAA3rB,GAAAnQ,MAAA,UAAA87B,EAAA3rB,GAAAnQ,MAAA,+CAAA87B,EAAA3rB,GAAAnQ,MACA87B,EAAA5b,OAAA/P,EAAA,OAKA,KAAA,GAAA2N,GAAA5pB,EAAAwmB,WAAAoH,WAAA,YAAAnvB,OAAA,EAAAmrB,GAAA,EAAAA,IACA,WAAAge,EAAAhe,GAAA9d,MAAA,oBAAA87B,EAAAhe,GAAA9d,MAAA,YAAA87B,EAAAhe,GAAA9d,MACA87B,EAAA5b,OAAApC,EAAA,EAKAzS,GAAAqP,WAAAoH,WAAA,aAAA5tB,EAAAwmB,WAAAoH,WAAA,cAeA,QAAAia,KACA,MAAA7nC,EAAA8gB,aAAAsc,eAAAp9B,EAAA29B,eAAA39B,EAAA49B,gBACAzmB,EAAA2wB,mBAAA,EAGA3wB,EAAA2wB,mBAAA,EAuCA,QAAAjQ,GAAAC,GACA,MAAA3gB,GAAAtC,QAAAkjB,8BAAAD,EAAA73B,EAAAgN,eAAAM,WAIA,QAAAw6B,KACA,GAAApY,IAAA,EACAqY,EAAA7wB,EAAAqN,MAqBA,OAnBArN,GAAAqP,WAAA8B,eAAAhP,QAAA,SAAA2uB,GACAA,EAAAzf,MAAAlP,QAAA,SAAA7E,GACA,GAAA+P,GAAAyjB,EAAAvzB,OAAA,IAAAD,EAAAC,MAEA,IADAyC,EAAAqN,OAAAA,EACA,YAAA/P,EAAA6U,UAAAlQ,SAAAjC,EAAAvC,UAAA4P,IAAA,OAAArN,EAAAvC,UAAA4P,GACA,GAAArN,EAAA9E,MAAAoC,EAAAmW,UAAA,QACA+E,GAAA,OAGA,CACA,GAAAuY,GAAA/wB,EAAAyX,aAAAqZ,EAAAvzB,OAAAD,EAAAsP,IAAA,KAAA,KAAA,KAAA,UAAA,EACAmkB,MAAA,IACAvY,GAAA,QAMAxY,EAAAqN,OAAAwjB,EACArY,EAmHA,QAAAwY,GAAA3jB,EAAA4jB,GAEA,GAAAC,KACAlxB,GAAAiP,iBAAA9M,QAAA,SAAA1O,GACAA,EAAAiiB,SAAArI,GAAA,IAAA5Z,EAAA4lB,WAAA5lB,EAAA6lB,cAAA2X,GACA,KAAAC,EAAA3nC,QAAAkK,EAAA8lB,eACA2X,EAAAjyB,KAAAxL,EAAA8lB,gBAKA2X,EAAA5pC,OAAA,GACA4pC,EAAA/uB,QAAA,SAAAoX,GACAvZ,EAAAvC,UAAA4P,GAAA,GAAA4jB,GAAA1X,GAAA8C,OAAA,YA/QAnP,EAAA,sBAAAlN,OAAAA,IACAkN,EAAA,sBAAAlN,OAAAA,IACAkN,EAAA,wBAAAlN,OAAAA,GAOA,IAAAywB,EAmDAzwB,GAAApW,KAAA,WACA,MAAAhB,GAAAU,OAAAC,QAAA,MAAA,IACAyW,EAAArP,aAAA,GACA,IAGAqP,EAAArP,aAAA,GACA,IAeA9H,EAAA8kB,2BAAA7kB,EAAAgN,eAAAM,UAAA4J,EAAAoS,cAAA,KAAAvpB,EAAAG,mBACAE,KAAA,SAAAW,GACAmW,EAAA8U,gCACA9U,EAAAwV,uBAEA1S,SAAAhK,MAAAkH,EAAAtC,QAAAyzB,aAAAnxB,EAAAwS,UAAAxS,EAAA1U,WAIAzC,EAAA8gB,aAAAqP,QACAoY,YAAAroC,EAAA2pB,4BACA2e,aAAA,EACAC,cAAAvoC,EAAA2pB,6BAKA1S,EAAAgZ,OAAAnwB,EAAA8gB,aAAAqP,OACAhZ,EAAA4J,WAAA/gB,EAAA8gB,aAAAC,WACA5J,EAAA0N,YAAA7kB,EAAA8gB,aAAA+D,YACA1N,EAAAoJ,OAAAvgB,EAAA8gB,aAAAP,OACApJ,EAAA6lB,WAAAh9B,EAAA8gB,aAAAkc,WACA7lB,EAAA2O,aAAA9lB,EAAA8gB,aAAAgF,aAAAmI,OAAAjuB,EAAA8gB,aAAAgF,cAAAqI,OAAAhX,EAAAlX,UAAAsF,eAAA,KACA4R,EAAA4O,cAAA/lB,EAAA8gB,aAAAiF,cAAAkI,OAAAjuB,EAAA8gB,aAAAiF,eAAAoI,OAAAhX,EAAAlX,UAAAsF,eAAA,KACA4R,EAAAmS,SAAArpB,EAAAgN,eAAAM,UACA4J,EAAAqS,KAAAxpB,EAAA8gB,aAAA0I,KACArS,EAAAjV,aAAAjC,EAAA6M,aAAAE,UACA6qB,EAAA,eAAAx3B,KAAA,SAAAuhB,GACAzK,EAAA2hB,YAAAlX,EACAgmB,EAAAhmB,EACA+lB,MAkCAxwB,EAAAuxB,uBAAA,WACA,GAAAC,GAAAxxB,EAAAvC,UAAA,OAAA,GAAAg0B,mBAAA,EACA,SAAAD,EAAAE,aACA7oC,EAAA8oC,oBAAAH,GAAA,GACAxxB,EAAAtC,QAAAC,2BAAA,KAAAqC,EAAAqN,OAAA,KAAA,KAAA,KAAA,OAGAxkB,EAAA8oC,oBAAAH,GAAA,IAIAxxB,EAAA4xB,oBAAA,WACA,GAAAJ,GAAAxxB,EAAAvC,UAAA,OAAA,GAAAg0B,mBAAA,EACA,OAAA,QAAAD,EAAAE,aASA1xB,EAAA6xB,oCAAA,SAAAh1B,EAAAE,GACA,GAAA+0B,GAAA9xB,EAAAvC,UAAA,OAAA,GAAAq0B,cACAC,EAAAD,EAAA/0B,EAIA,IAHAkF,SAAA8vB,EAAA,mBACAA,EAAA,iBAAA,IAEA9vB,SAAA8vB,EAAA,CACA,GAAAC,GAAAnpC,EAAAopC,2BAAAF,EAAA,uBAAAA,EAAA,iBAGA,OAFAA,GAAA,mBAAAC,EAAAr9B,KACAo9B,EAAA,eAAAC,EAAAt9B,KACAs9B,EAAAr9B,OAKAqL,EAAAiyB,2BAAA,WACA,GAAAx0B,GAAAuC,EAAAvC,UAAA,OAAA,GACAg0B,EAAAh0B,EAAA,mBAAA,EAIA,IAHAwE,SAAAwvB,EAAA,mBACAA,EAAA,iBAAA,IAEAxvB,SAAAwvB,EAAA,CACA,GAAAO,GAAAnpC,EAAAopC,2BAAAR,EAAA,uBAAAA,EAAA,iBAGA,OAFAA,GAAA,eAAAO,EAAAt9B,KACA+8B,EAAA,mBAAAO,EAAAr9B,KACAq9B,EAAAr9B,OAKAqL,EAAAkyB,eAAA,WAIA,GAFAlyB,EAAAiP,iBAAA3nB,OAAA,EAEAspC,IACA5wB,EAAAmyB,yBAAA,uBAGAtpC,EAAA8gB,aAAAyoB,gBAAApyB,EAAAkT,gBAAA,KAAA,YAAA,UAAA,EAAA,GAEAlT,EAAA8N,UAAA,EACA4iB,IACA7nC,EAAAwpC,eAAAryB,EAAAjV,aAAAiV,EAAArP,YAAAqP,EAAA2wB,mBACAznC,KAAA,SAAAigB,GACAA,EAAAtf,MAAA,GAAAsf,EAAAtf,KAAAuf,OACApJ,EAAAtC,QAAAgL,UAAA,kBAAAqC,cAAA5B,EAAAtf,KAAAkhB,gBAGA5B,EAAAtf,MAAAsf,EAAAtf,KAAAoH,IACApI,EAAAihB,kBAAA,oBAAA9J,EAAA1U,QAAA,0BAAA,mCAEA0U,EAAAsyB,2BAAAnpB,EAAAtf,MAEAmW,EAAAgb,gBAGAhb,EAAAtC,QAAAkQ,kBAAA,EAAA,kBAGA,SAAAzE,GACAnJ,EAAAtC,QAAAgL,UAAA,eACA7f,EAAAihB,kBAAA,qCAAA9J,EAAA1U,QAAA,0BAAA,+BAnBAzC,WAqBA,WACAmX,EAAA8N,UAAA,QAIA,IAAA,OAAA9N,EAAAiP,kBAAAhN,SAAAjC,EAAAiP,iBACA,GAAAjP,EAAAiP,iBAAA3nB,OAAA,EAAA,CACA,GAAAmM,GAAAuM,EAAAiP,iBAAA,GACAsjB,EAAA9+B,EAAAiiB,OAAAxnB,MAAA,KAAA,GACAskC,EAAA/+B,EAAAiiB,OAAAxnB,MAAA,KAAA,EAEA8iC,GAAA,MAAA,gBACA,IAAA1zB,GAAA0C,EAAAqP,WAAA8B,eAAAohB,EAAA,GAAAlhB,MAAAmhB,EAAA,EACAxyB,GAAAtC,QACAgL,UAAA,yBAAA+B,OACAvhB,KAAA,SAAAW,GACAmW,EAAAsR,SAAAihB,EAAAj1B,EAAAsP,WAIA5M,GAAAtC,QACAgL,UAAA,0BAwBA1I,EAAAyyB,mBAAA,WACA,MAAA,QAAAzyB,EAAAvC,UAAA,OAAA,GAAA,eAAA,IACAwE,SAAAjC,EAAAvC,UAAA,OAAA,GAAA,eAAA,IACA,OAAAuC,EAAAvC,UAAA,OAAA,GAAA,eAAA,GAAA,WACAwE,SAAAjC,EAAAvC,UAAA,OAAA,GAAA,eAAA,GAAA,UACA,UAAAuC,EAAAvC,UAAA,OAAA,GAAA,eAAA,GAAA,UAAA,MAGA,GAKAuC,EAAAgoB,YAAA,SAAAhrB,GAEAnU,EAAAihB,kBAAA,0BAAA9J,EAAA1U,QAAA,qBAAA,yBACA0U,EAAA8S,gBAAA9V,IAAA,EAEAnU,EAAA6pC,8BAAA1yB,EAAA4J,YACA1gB,KAAA,SAAAigB,GACA,GAAAtf,GAAAsf,GAAAA,EAAAtf,IACA,KACA,GAAA6d,GAAA,GAAA6D,OAAA1hB,IAAAkP,KAAA,oBAAA0M,KAAA5c,EAAA8gB,aAAA+D,aAKAlC,QAAA9D,EAAA7e,EAAA8gB,aAAA+D,YAAA,QAEA,MAAAjC,GACAzL,EAAAtC,QAAAgL,UAAA,oBAEA1I,EAAA8S,gBAAA9V,IAAA,GACA,WACAgD,EAAAtC,QAAAgL,UAAA,oBACA1I,EAAA8S,gBAAA9V,IAAA,KAKAgD,EAAAsyB,2BAAA,SAAAnpB,GAEAtgB,EAAA8gB,aAAAC,WAAAT,EAAAlY,GACApI,EAAA8gB,aAAA+D,YAAAvE,EAAA8b,IACAp8B,EAAA8gB,aAAAmB,gBAAA3B,EAAAwpB,yBACA9pC,EAAA8gB,aAAAgF,aAAAxF,EAAAwF,aACA9lB,EAAA8gB,aAAAiF,cAAAzF,EAAAyF,cACA/lB,EAAA8gB,aAAAP,OAAAD,EAAAypB,eACA/pC,EAAA8gB,aAAAkc,WAAA1c,EAAA0pB,mBAGA7yB,EAAAsN,iBAAAxlB,QAAAylB,KAAAvN,EAAAvC,WAEAuC,EAAA4J,WAAA/gB,EAAA8gB,aAAAC,WACA5J,EAAA0N,YAAA7kB,EAAA8gB,aAAA+D,YACA1N,EAAA8K,gBAAAjiB,EAAA8gB,aAAAmB,gBACA9K,EAAA2O,aAAA9lB,EAAA8gB,aAAAgF,aAAAmI,OAAAjuB,EAAA8gB,aAAAgF,cAAAqI,OAAAhX,EAAAlX,UAAAsF,eAAA,KACA4R,EAAA4O,cAAA/lB,EAAA8gB,aAAAiF,cAAAkI,OAAAjuB,EAAA8gB,aAAAiF,eAAAoI,OAAAhX,EAAAlX,UAAAsF,eAAA,KACA4R,EAAAoJ,OAAAvgB,EAAA8gB,aAAAP,OACApJ,EAAA6lB,WAAAh9B,EAAA8gB,aAAAkc,WACA7lB,EAAAqS,KAAAxpB,EAAA8gB,aAAA0I,KAEAlJ,EAAA2pB,YAAA3pB,EAAA2pB,WAAAzjB,aAEAxmB,EAAAwmB,WAAAlG,EAAA2pB,WAAAzjB,WACArP,EAAAqP,WAAAlG,EAAA2pB,WAAAzjB,WAEAxmB,EAAA+9B,eAAAzd,EAAA2pB,WAAAzjB,WAAAvmB,EAAAgN,eAAAM,UAAA+S,EAAA2pB,WAAA1gB,cAAAjJ,EAAA2pB,WAAAzgB,OASA,IAAA0gB,GAAA,SAAAhoC,GAEAiV,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAA,KAAA,KAAA,KAAA,SAAA,MAAA,KAEA0U,EAAA8N,UAAA,EACAjlB,EAAAkqC,2BAAAhoC,GACA7B,KACA,SAAAigB,GACAnJ,EAAA8N,UAAA,EAEA3E,EAAAtf,MAAA,GAAAsf,EAAAtf,KAAAuf,OACApJ,EAAAtC,QAAAgL,UAAA,kBACAqC,cAAA5B,EAAAtf,KAAAkhB,gBAGA5B,EAAAtf,MAAAsf,EAAAtf,KAAAoH,IACApI,EAAAihB,kBAAA,kBAAA9J,EAAA1U,QAAA,sCAAA,+BAEA0U,EAAAsyB,2BAAAnpB,EAAAtf,MACAmW,EAAAtC,QAAAgL,UAAA,wBAEAgF,YAAAvE,EAAAtf,KAAAo7B,IACA+N,cAAAhzB,EAAA6lB,WACAA,WAAA,qBAEAoN,OAAA/pC,KAAA,WACAX,EAAAgD,qBAAA,EACAyU,EAAAkzB,wBAGAlzB,EAAAtC,QAAAkQ,kBAAA,EAAA,kBAIA,SAAAzE,GACAnJ,EAAA8N,UAAA,EACA9N,EAAAtC,QAAAgL,UAAA,aACA7f,EAAAihB,kBAAA,gCAAA9J,EAAA1U,QACA,sCACA,8BAMA0U,GAAAkO,mBAAA,WACAlO,EAAAgJ,UAOAhJ,EAAAgJ,OAAA,WAEAngB,EAAAsqC,wBAEAnzB,EAAAmO,kBAAA,EACAnO,EAAAkzB,qBAGAprC,QAAAovB,OAAAlX,EAAAsN,iBAAAtN,EAAAvC,WAgBAuC,EAAAkzB,qBAbAlzB,EAAAtC,QAAAgL,UAAA,sCAAA+B,OACAvhB,KAAA,SAAAW,GACA,oBAAAA,EAAA4gB,QAEAliB,EAAAgD,qBAAA,EACAwnC,EAAA/yB,EAAAjV,eAGAiV,EAAAkzB,uBAcAlzB,EAAAtC,QAAAgL,UAAA,wBAAA+B,OAAAvhB,KACA,SAAAuhB,GAEAliB,EAAAgD,qBAAA,EACAyU,EAAAkzB,wBAMAlzB,EAAAkzB,mBAAA,WACAtqC,EAAAU,KAAAR,EAAAiB,IAAAoB,gBC3cA,WAEA,GAAAiY,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WAAA,qCACA,SAAA,QAAA,cAAA,eAAA,kBAAA,oBAAA,OAAA,YAAA,eAAA,UAAA,gBAAA,WAAA,aAAA,YACA,SAAA2S,EAAAwG,EAAA0G,EAAArkB,EAAAE,EAAA0d,EAAAE,EAAA/d,EAAAge,EAAAC,EAAAC,EAAAxL,EAAA/S,EAAAO,GAuIA,QAAAsqC,KACA,GAAAxqC,EAAAU,OAAAC,QAAA,MAAA,GACA,GAAA,MAAAV,EAAA8gB,aAAAsc,eAAAp9B,EAAA29B,cAAA,CACA,IAAA,GAAAqH,GAAA,EAAAA,EAAAwF,EAAA/rC,OAAAumC,IACA,WAAAwF,EAAAxF,GAAAl5B,MAAA,UAAA0+B,EAAAxF,GAAAl5B,MAAA,+CAAA0+B,EAAAxF,GAAAl5B,MACA2+B,EAAAr0B,KAAAo0B,EAAAxF,GAGA,KAAA,GAAA3nB,GAAA,EAAAA,EAAAqtB,EAAAjsC,OAAA4e,IACA,gDAAAqtB,EAAArtB,GAAAvR,MAEA6+B,EAAAv0B,KAAAs0B,EAAArtB,QAIA,CACA,IAAA,GAAArB,GAAA,EAAAA,EAAAwuB,EAAA/rC,OAAAud,IACA,WAAAwuB,EAAAxuB,GAAAlQ,MAAA,oBAAA0+B,EAAAxuB,GAAAlQ,MAAA,YAAA0+B,EAAAxuB,GAAAlQ,MACA2+B,EAAAr0B,KAAAo0B,EAAAxuB,GAGA2uB,GAAAD,MAIA,IAAA,MAAA1qC,EAAA8gB,aAAAsc,eAAAp9B,EAAA49B,gBAAA,CACA,IAAA,GAAAzhB,GAAA,EAAAA,EAAAquB,EAAA/rC,OAAA0d,IACA,WAAAquB,EAAAruB,GAAArQ,MAAA,UAAA0+B,EAAAruB,GAAArQ,MACA2+B,EAAAr0B,KAAAo0B,EAAAruB,GAGA,KAAA,GAAAF,GAAA,EAAAA,EAAAyuB,EAAAjsC,OAAAwd,IACA,wBAAAyuB,EAAAzuB,GAAAnQ,MAEA6+B,EAAAv0B,KAAAs0B,EAAAzuB,QAIA,CACA,IAAA,GAAA2uB,GAAA,EAAAA,EAAAJ,EAAA/rC,OAAAmsC,IACA,WAAAJ,EAAAI,GAAA9+B,MAAA,oBAAA0+B,EAAAI,GAAA9+B,MAAA,YAAA0+B,EAAAI,GAAA9+B,MACA2+B,EAAAr0B,KAAAo0B,EAAAI,GAGAD,GAAAD,EAGA1qC,EAAAwmB,WAAAoH,WAAA,YAAA6c,EACAtzB,EAAAqP,WAAAoH,WAAA,aAAA+c,EAGA,QAAA9C,KACA,MAAA7nC,EAAA8gB,aAAAsc,eAAAp9B,EAAA29B,eAAA39B,EAAA49B,gBACAzmB,EAAA2wB,mBAAA,EAGA3wB,EAAA2wB,mBAAA,EAwKA,QAAAjQ,GAAAC,GACA,MAAA3gB,GAAAtC,QAAAkjB,8BAAAD,EAAA73B,EAAAgN,eAAAS,qBAYA,QAAAq6B,KACA,GAAApY,IAAA,EACAqY,EAAA7wB,EAAAqN,MAqBA,OAnBArN,GAAAqP,WAAA8B,eAAAhP,QAAA,SAAA2uB,GACAA,EAAAzf,MAAAlP,QAAA,SAAA7E,GACA,GAAA+P,GAAAyjB,EAAAvzB,OAAA,IAAAD,EAAAC,MAEA,IADAyC,EAAAqN,OAAAA,EACA,YAAA/P,EAAA6U,UAAAlQ,SAAAjC,EAAAvC,UAAA4P,IAAA,OAAArN,EAAAvC,UAAA4P,GACA,GAAArN,EAAA9E,MAAAoC,EAAAmW,UAAA,QACA+E,GAAA,OAGA,CACA,GAAAuY,GAAA/wB,EAAAyX,aAAAqZ,EAAAvzB,OAAAD,EAAAsP,IAAA,KAAA,KAAA,KAAA,UAAA,EACAmkB,MAAA,IACAvY,GAAA,QAMAxY,EAAAqN,OAAAwjB,EACArY,EAiEA,QAAAwY,GAAA3jB,EAAA4jB,GAEA,GAAAC,KACAlxB,GAAAiP,iBAAA9M,QAAA,SAAA1O,GACAA,EAAAiiB,SAAArI,GAAA,IAAA5Z,EAAA4lB,WAAA5lB,EAAA6lB,cAAA2X,GACA,KAAAC,EAAA3nC,QAAAkK,EAAA8lB,eACA2X,EAAAjyB,KAAAxL,EAAA8lB,gBAKA2X,EAAA5pC,OAAA,GACA4pC,EAAA/uB,QAAA,SAAAoX,GACAvZ,EAAAvC,UAAA4P,GAAA,GAAA4jB,GAAA1X,GAAA8C,OAAA,YAtdAnP,EAAA,sBAAAlN,OAAAA,IACAkN,EAAA,sBAAAlN,OAAAA,IACAkN,EAAA,wBAAAlN,OAAAA,GAEA,IAAAszB,MACAD,KACAK,KACAC,KACAC,KACAL,KAEAC,IAsCA,IA/BA5qC,EAAAU,OAAAC,QAAA,0CAAA,KACA,SAAAgB,eAAA4Y,QAAA,sBACAud,EAAA,eAAAx3B,KAAA,SAAAuhB,GACA5hB,EAAAgrC,kCAAAppB,EACA4oB,EAAAxqC,EAAAgrC,kCACAnT,EAAA,gBAAAx3B,KAAA,SAAAuhB,GACA5hB,EAAAirC,wBAAArpB,EAAA4M,QACAkc,EAAA1qC,EAAAirC,wBACAvpC,eAAAklB,QAAA,qBAAA,SACA2jB,QAKA,IAAAvqC,EAAAgrC,kCAAAvsC,OACAo5B,EAAA,eAAAx3B,KAAA,SAAAuhB,GACA4oB,EAAA5oB,EACAiW,EAAA,gBAAAx3B,KAAA,SAAAuhB,GACA8oB,EAAA9oB,EAAA4M,QACA+b,SAKAC,EAAAxqC,EAAAgrC,kCACAN,EAAA1qC,EAAAirC,0BAMAlrC,EAAAU,OAAAC,QAAA,4CAAA,GAUA,GATA,SAAAgB,eAAA4Y,QAAA,iBAEAywB,EAAA5zB,EAAAqP,WAAA8B,eAAA,GAAAE,MAAAgG,QAEAxuB,EAAAkrC,+BAAAH,EACA/qC,EAAAmrC,uBAAAh0B,EAAAqP,WAEA9kB,eAAAklB,QAAA,cAAA,UAEA9oB,OAAAkH,SAAAoV,KAAA1Z,QAAA,MAAA,GAAA,CACA,GAAA,MAAAV,EAAA8gB,aAAAsc,eACA,GAAA,YAAAjmB,EAAAqP,WAAA8B,eAAA,GAAArY,MAAA,CACA46B,EAAA1zB,EAAAqP,WAAA8B,eAAA,GAAAE,MAAAgG,OAEA,KAAA,GAAAwW,GAAA,EAAAA,EAAA6F,EAAApsC,OAAAumC,IACA,iBAAA6F,EAAA7F,GAAA/0B,OACA66B,EAAA10B,KAAAy0B,EAAA7F,SAOA,IAAA,MAAAhlC,EAAA8gB,aAAAsc,eAAAp9B,EAAAi3B,gBACA6T,EAAA3zB,EAAAqP,WAAA8B,eAAA,GAAAE,UAGA,IAAA,YAAArR,EAAAqP,WAAA8B,eAAA,GAAArY,MAAA,CACA46B,EAAA1zB,EAAAqP,WAAA8B,eAAA,GAAAE,MAAAgG,OAEA,KAAA,GAAAwW,GAAA,EAAAA,EAAA6F,EAAApsC,OAAAumC,IACA,iBAAA6F,EAAA7F,GAAA/0B,OACA66B,EAAA10B,KAAAy0B,EAAA7F,IAOA7tB,EAAAqP,WAAA8B,eAAA,GAAAE,MAAAsiB,MAGA3zB,GAAAqP,WAAA8B,eAAA,GAAAE,MAAArR,EAAAqP,WAAA8B,eAAA,GAAAE,KAKA,IAAA3lB,GAAA7C,EAAAg+B,oBAAA/9B,EAAAgN,eAAAS,oBACA7K,IACAsU,EAAA8U,gCACA9U,EAAAwV,uBACA1S,SAAAhK,MAAAkH,EAAAtC,QAAAyzB,aAAAnxB,EAAAwS,UAAAxS,EAAA1U,UAGAzC,EAAA89B,iBAAA79B,EAAAgN,eAAAS,oBAAAyJ,EAAAoS,eACAlpB,KAAA,SAAAW,GACAhB,EAAA+9B,eAAA/8B,EAAAwlB,WAAAvmB,EAAAgN,eAAAS,oBAAA1M,EAAAuoB,cAAAvoB,EAAAwoB,MAEArS,EAAA8U,gCACA9U,EAAAwV,uBACA1S,SAAAhK,MAAAkH,EAAAtC,QAAAyzB,aAAAnxB,EAAAwS,UAAAxS,EAAA1U,WAKAzC,EAAA8gB,aAAAqP,QACAoY,YAAAroC,EAAA2pB,4BACA2e,aAAA,EACAC,cAAAvoC,EAAA2pB,6BAGA1S,EAAApW,KAAA,WACA,MAAAhB,GAAAU,OAAAC,QAAA,MAAA,IACAyW,EAAArP,aAAA,GACA,IAGAqP,EAAArP,aAAA,GACA,IAoEAqP,EAAAgZ,OAAAnwB,EAAA8gB,aAAAqP,OACAhZ,EAAA4J,WAAA/gB,EAAA8gB,aAAAC,WACA5J,EAAA0N,YAAA7kB,EAAA8gB,aAAA+D,YACA1N,EAAAoJ,OAAAvgB,EAAA8gB,aAAAP,OACApJ,EAAA6lB,WAAAh9B,EAAA8gB,aAAAkc,WACA7lB,EAAA2O,aAAA9lB,EAAA8gB,aAAAgF,aAAAmI,OAAAjuB,EAAA8gB,aAAAgF,cAAAqI,OAAAhX,EAAAlX,UAAAsF,eAAA,KACA4R,EAAA4O,cAAA/lB,EAAA8gB,aAAAiF,cAAAkI,OAAAjuB,EAAA8gB,aAAAiF,eAAAoI,OAAAhX,EAAAlX,UAAAsF,eAAA,KACA4R,EAAAmS,SAAArpB,EAAAgN,eAAAS,oBACAyJ,EAAAqS,KAAAxpB,EAAA8gB,aAAA0I,KACArS,EAAAjV,aAAAjC,EAAA6M,aAAAE,UAGAmK,EAAAi0B,aAAA,SAAAC,GAEAl0B,EAAAm0B,uBAAA,kBACA,IAAA5b,IAAA,CAiBA,OAhBAvY,GAAAmO,kBAAA,GAAAnO,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAA,KAAA,KAAA,KAAA,SAAA,KAAAitB,GAEAzwB,QAAAovB,OAAAlX,EAAAsN,iBAAAtN,EAAAvC,WAMAuC,EAAAtC,QAAAgL,UAAA,4BAAAgF,YAAA1N,EAAA0N,cAJA0mB,EAAAp0B,EAAAjV,aAAAmpC,GAQAl0B,EAAA2X,kBAIA,MAIA3X,EAAA6xB,oCAAA,SAAAh1B,EAAAE,GACA,GAAA+0B,GAAA9xB,EAAAvC,UAAA,OAAA,GAAAq0B,cACAC,EAAAD,EAAA/0B,EAOA,IANAkF,SAAA8vB,EAAA,mBACAA,EAAA,iBAAA,IAEA9vB,SAAA8vB,EAAA,yBACAA,EAAA,uBAAA,iBAEA9vB,SAAA8vB,GAAA9vB,SAAA8vB,EAAA,wBAAA9vB,SAAA8vB,EAAA,iBAAA,CACA,GAAAC,GAAAnpC,EAAAopC,2BAAAF,EAAA,uBAAAA,EAAA,iBAGA,OAFAA,GAAA,eAAAC,EAAAt9B,KACAq9B,EAAA,mBAAAC,EAAAr9B,KACAq9B,EAAAr9B,OAIAqL,EAAAyyB,mBAAA,WACA,MAAA,QAAAzyB,EAAAvC,UAAA,OAAA,GAAA,eAAA,IAAAwE,SAAAjC,EAAAvC,UAAA,OAAA,GAAA,eAAA,IAAA,OAAAuC,EAAAvC,UAAA,OAAA,GAAA,eAAA,GAAA,WACAwE,SAAAjC,EAAAvC,UAAA,OAAA,GAAA,eAAA,GAAA,UACA,UAAAuC,EAAAvC,UAAA,OAAA,GAAA,eAAA,GAAA,UAAA,MAGA,GAKAuC,EAAAiyB,2BAAA,WACA,GAAAx0B,GAAAuC,EAAAvC,UAAA,OAAA,GACAg0B,EAAAh0B,EAAA,mBAAA,EAQA,IANAwE,SAAAwvB,EAAA,mBACAA,EAAA,iBAAA,IAEAxvB,SAAAwvB,EAAA,yBACAA,EAAA,uBAAA,iBAEAxvB,SAAAwvB,GAAAxvB,SAAAwvB,EAAA,wBAAAxvB,SAAAwvB,EAAA,iBAAA,CACA,GAAAO,GAAAnpC,EAAAopC,2BAAAR,EAAA,uBAAAA,EAAA,iBAGA,OAFAA,GAAA,eAAAO,EAAAt9B,KACA+8B,EAAA,mBAAAO,EAAAr9B,KACAq9B,EAAAr9B,OAIAqL,EAAAuxB,uBAAA,WACA,GAAAC,GAAAxxB,EAAAvC,UAAA,OAAA,GAAAg0B,mBAAA,EACA,SAAAD,EAAAE,aACA7oC,EAAA8oC,oBAAAH,GAAA,GACAxxB,EAAAtC,QAAAC,2BAAA,KAAAqC,EAAAqN,OAAA,KAAA,KAAA,KAAA,OAGAxkB,EAAA8oC,oBAAAH,GAAA,IAIAxxB,EAAA4xB,oBAAA,WACA,GAAAJ,GAAAxxB,EAAAvC,UAAA,OAAA,GAAAg0B,mBAAA,EACA,OAAA,QAAAD,EAAAE,aAQA1xB,EAAAq0B,uBAAA,WACA,MAAA,UAAAtrC,EAAAq+B,iBAAA,kBAAApnB,EAAAvC,UAAA,OAAA,GAAA,eAAA,GAAA,eAGA62B,sBAAA,WACA,GAAAC,GAAAv0B,EAAAvC,UAAA,OAAA,GAAA82B,eAAA,EAEA,OAAAtyB,UAAAsyB,EAAAC,sBAAA,OAAAD,EAAAC,sBAOAC,oBAAA,WACA,GAAAF,GAAAv0B,EAAAvC,UAAA,OAAA,GAAA82B,eAAA,EAEA,OAAAtyB,UAAAsyB,EAAAG,kBAAA,OAAAH,EAAAG,kBAQA10B,EAAA20B,aAAA,WAEA,IAAAF,uBAAA,OAAA3xB,SAAA6F,eAAA,uCACA,OAAA,CAGA,IAAAisB,GAAA9xB,SAAA6F,eAAA,uCAAAnP,OAEA,OAAA,OAAAo7B,GAAAA,EAAAttC,OAAA,GAQA0Y,EAAA60B,gBAAA,WAEA,IAAAP,yBAAA,OAAAxxB,SAAA6F,eAAA,uCACA,OAAA,CAGA,IAAAisB,GAAA9xB,SAAA6F,eAAA,uCAAAnP,OAEA,OAAA,OAAAo7B,GAAAA,EAAAttC,OAAA,GAgDA0Y,EAAAkyB,eAAA,WAGA,GADAlyB,EAAAiP,iBAAA3nB,OAAA,EACAspC,IACA5wB,EAAAmyB,yBAAA,uBAGAtpC,EAAA8gB,aAAAyoB,gBAAApyB,EAAAkT,gBAAA,KAAA,YAAA,UAAA,EAAA,GAEAlT,EAAA8N,UAAA,EACA4iB,IACA7nC,EAAAwpC,eAAAryB,EAAAjV,aAAAiV,EAAArP,YAAAqP,EAAA2wB,mBACAznC,KAAA,SAAAigB,GACAA,EAAAtf,MAAA,GAAAsf,EAAAtf,KAAAuf,OACApJ,EAAAtC,QAAAgL,UAAA,kBAAAqC,cAAA5B,EAAAtf,KAAAkhB,gBAGA5B,EAAAtf,MAAAsf,EAAAtf,KAAAoH,IACApI,EAAAihB,kBAAA,oBAAA9J,EAAA1U,QAAA,0BAAA,mCAEA0U,EAAAsyB,2BAAAnpB,EAAAtf,MAEAmW,EAAAgb,gBAGAhb,EAAAtC,QAAAkQ,kBAAA,EAAA,kBAGA,SAAAzE,GACAnJ,EAAAtC,QAAAgL,UAAA,eACA7f,EAAAihB,kBAAA,qCAAA9J,EAAA1U,QAAA,0BAAA,+BAnBAzC,WAqBA,WACAmX,EAAA8N,UAAA,QAIA,IAAA,OAAA9N,EAAAiP,kBAAAhN,SAAAjC,EAAAiP,iBACA,GAAAjP,EAAAiP,iBAAA3nB,OAAA,EAAA,CACA,GAAAmM,GAAAuM,EAAAiP,iBAAA,GACAsjB,EAAA9+B,EAAAiiB,OAAAxnB,MAAA,KAAA,GACAskC,EAAA/+B,EAAAiiB,OAAAxnB,MAAA,KAAA,GACAoP,EAAA0C,EAAAqP,WAAA8B,eAAAohB,EAAA,GAAAlhB,MAAAmhB,EAAA,EACAxB,GAAA,MAAA,iBACAA,EAAA,MAAA,gBAGAhxB,EAAAtC,QACAgL,UAAA,yBAAA+B,OACAvhB,KAAA,SAAAW,GACAmW,EAAAsR,SAAAihB,EAAAj1B,EAAAsP,WAIA5M,GAAAtC,QACAgL,UAAA,0BAyBA1I,EAAAgoB,YAAA,SAAAhrB,GAEAnU,EAAAihB,kBAAA,0BAAA9J,EAAA1U,QAAA,qBAAA,yBACA0U,EAAA8S,gBAAA9V,IAAA,EAEAnU,EAAAisC,4BAAA90B,EAAA4J,YACA1gB,KAAA,SAAAigB,GACA,GAAAtf,GAAAsf,GAAAA,EAAAtf,IACA,KACA,GAAA6d,GAAA,GAAA6D,OAAA1hB,IAAAkP,KAAA,oBAAA0M,KAAA5c,EAAA8gB,aAAA+D,aAIAlC,QAAA9D,EAAA7e,EAAA8gB,aAAA+D,YAAA,QAEA,MAAAjC,GACAzL,EAAAtC,QAAAgL,UAAA,oBAEA1I,EAAA8S,gBAAA9V,IAAA,GACA,WACAgD,EAAAtC,QAAAgL,UAAA,oBACA1I,EAAA8S,gBAAA9V,IAAA,KAMAgD,EAAAsyB,2BAAA,SAAAnpB,GAEAtgB,EAAA8gB,aAAAC,WAAAT,EAAAlY,GACApI,EAAA8gB,aAAA+D,YAAAvE,EAAA8b,IACAp8B,EAAA8gB,aAAAmB,gBAAA3B,EAAAwpB,yBACA9pC,EAAA8gB,aAAAgF,aAAAxF,EAAAwF,aACA9lB,EAAA8gB,aAAAiF,cAAAzF,EAAAyF,cACA/lB,EAAA8gB,aAAAP,OAAAD,EAAAypB,gBAAAzpB,EAAA4rB,iBACAlsC,EAAA8gB,aAAAkc,WAAA1c,EAAA0pB,mBAGA7yB,EAAAsN,iBAAAxlB,QAAAylB,KAAAvN,EAAAvC,WAEAuC,EAAA4J,WAAA/gB,EAAA8gB,aAAAC,WACA5J,EAAA0N,YAAA7kB,EAAA8gB,aAAA+D,YACA1N,EAAA8K,gBAAAjiB,EAAA8gB,aAAAmB,gBACA9K,EAAA2O,aAAA9lB,EAAA8gB,aAAAgF,aAAAmI,OAAAjuB,EAAA8gB,aAAAgF,cAAAqI,OAAAhX,EAAAlX,UAAAsF,eAAA,KACA4R,EAAA4O,cAAA/lB,EAAA8gB,aAAAiF,cAAAkI,OAAAjuB,EAAA8gB,aAAAiF,eAAAoI,OAAAhX,EAAAlX,UAAAsF,eAAA,KACA4R,EAAAoJ,OAAAvgB,EAAA8gB,aAAAP,OACApJ,EAAA6lB,WAAAh9B,EAAA8gB,aAAAkc,WACA7lB,EAAAqS,KAAAxpB,EAAA8gB,aAAA0I,KAEAlJ,EAAA2pB,YAAA3pB,EAAA2pB,WAAAzjB,aAEAxmB,EAAAwmB,WAAAlG,EAAA2pB,WAAAzjB,WACArP,EAAAqP,WAAAlG,EAAA2pB,WAAAzjB,WAEAxmB,EAAA+9B,eAAAzd,EAAA2pB,WAAAzjB,WAAAvmB,EAAAgN,eAAAM,UAAA+S,EAAA2pB,WAAA1gB,cAAAjJ,EAAA2pB,WAAAzgB,OASA,IAAA+hB,GAAA,SAAArpC,EAAAmpC,GAEAl0B,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAA,KAAA,KAAA,KAAA,SAAA,MAAA,KAEA0U,EAAA8N,UAAA,EACA4iB,IACA7nC,EAAAkqC,2BAAAhoC,EAAAiV,EAAArP,YAAAqP,EAAA2wB,mBACAznC,KACA,SAAAigB,GACAnJ,EAAA8N,UAAA,EAEA3E,EAAAtf,MAAA,GAAAsf,EAAAtf,KAAAuf,OACApJ,EAAAtC,QAAAgL,UAAA,kBACAqC,cAAA5B,EAAAtf,KAAAkhB,gBAGA5B,EAAAtf,MAAAsf,EAAAtf,KAAAoH,IACApI,EAAAihB,kBAAA,kBAAA9J,EAAA1U,QAAA,sCAAA,+BAEA0U,EAAAsyB,2BAAAnpB,EAAAtf,MACAmW,EAAAtC,QAAAgL,UAAA,wBAEAgF,YAAAvE,EAAAtf,KAAAo7B,IACA+N,cAAAhzB,EAAA6lB,WACAA,WAAA,qBAEAoN,OAAA/pC,KAAA,WACAX,EAAAgD,qBAAA,EACAyU,EAAAkzB,wBAGAlzB,EAAAtC,QAAAkQ,kBAAA,EAAA,kBAIA,SAAAzE,GACAnJ,EAAA8N,UAAA,EACA9N,EAAAtC,QAAAgL,UAAA,aACA7f,EAAAihB,kBAAA,gCAAA9J,EAAA1U,QACA,sCACA,8BAOA0U,GAAAkO,mBAAA,WACAlO,EAAAgJ,UAIAhJ,EAAAgJ,OAAA,WAEAngB,EAAAsqC,wBACAnzB,EAAAmO,gBAAAnO,EAAAoO,oBAGApO,EAAAtC,QAAAgL,UAAA,sCAAA+B,OACAvhB,KAAA,SAAAW,GACA,oBAAAA,EAAA4gB,QAEAliB,EAAAgD,qBAAA,EACA6oC,EAAAp0B,EAAAjV,eAKAnC,EAAAU,KAAAR,EAAAiB,IAAAoB,WAKA6U,EAAAkzB,qBAOAlzB,EAAAtC,QAAAgL,UAAA,wBAAA+B,OAAAvhB,KACA,SAAAuhB,GAEAliB,EAAAgD,qBAAA,EACAyU,EAAAkzB,wBAOAlzB,EAAAkzB,mBAAA,WACAtqC,EAAAU,KAAAR,EAAAiB,IAAAK,yBCjoBA,WACA,GAAAgZ,GAAAtb,QAAAC,OAAA,UACAqb,GAAA/V,WAAA,+BAAA,SAAA,QAAA,eAAA,YAAA,SAAA2S,EAAAwG,EAAA3d,EAAAC,GAGA,GAAAksC,GAAA,WACAnsC,EAAAosC,mBAAAnsC,EAAA0O,oBAAAM,aACA5O,KAAA,SAAAigB,GACAnJ,EAAAk1B,oBAAA/rB,EAAAtf,KAAA4gB,UAKA0qB,EAAA,WACAtsC,EAAAosC,mBAAAnsC,EAAA0O,oBAAAO,cACA7O,KAAA,SAAAigB,GACAnJ,EAAAo1B,wBAAAjsB,EAAAtf,KAAA4gB,UAIA4qB,EAAA,WACA,MAAAxsC,GAAAosC,mBAAAnsC,EAAA0O,oBAAAC,YACAvO,KAAA,SAAAigB,GACAnJ,EAAAs1B,kBAAAnsB,EAAAtf,KAAA4gB,UAIA8qB,EAAA,WACA,MAAA1sC,GAAAosC,mBAAAnsC,EAAA0O,oBAAAE,kBACAxO,KAAA,SAAAigB;AACAnJ,EAAAw1B,wBAAArsB,EAAAtf,KAAA4gB,UAIAgrB,EAAA,WACA,MAAA5sC,GAAAosC,mBAAAnsC,EAAA0O,oBAAAG,0BACAzO,KAAA,SAAAigB,GACAnJ,EAAA01B,gCAAAvsB,EAAAtf,KAAA4gB,UAIAkrB,EAAA,WACA,MAAA9sC,GAAAosC,mBAAAnsC,EAAA0O,oBAAAI,gBACA1O,KAAA,SAAAigB,GACAnJ,EAAA41B,sBAAAzsB,EAAAtf,KAAA4gB,UAIAorB,EAAA,WACAhtC,EAAAosC,mBAAAnsC,EAAA0O,oBAAAK,kBACA3O,KAAA,SAAAigB,GACAnJ,EAAA81B,eAAA3sB,EAAAtf,KAAA4gB,UAIAsrB,EAAA,WACAltC,EAAAosC,mBAAAnsC,EAAA0O,oBAAAQ,qBACA9O,KAAA,SAAAigB,GACAnJ,EAAAg2B,eAAA7sB,EAAAtf,KAAA4gB,SAIAzK,GAAAi2B,oBAAA,WACAjB,IACAG,IACAE,IACAE,IACAE,IACAE,IACAE,IACAE,WCtEA,WAEA,GAAA3yB,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WAAA,oCACA,SAAA,QAAA,cAAA,UAAA,eAAA,kBAAA,oBAAA,YAAA,eAAA,aAAA,YACA,SAAA2S,EAAAwG,EAAA0G,EAAArG,EAAAhe,EAAAE,EAAA0d,EAAA7d,EAAAge,EAAAre,EAAAO,GA6CA,QAAAsqC,KACA,GAAAxqC,EAAAU,OAAAC,QAAA,MAAA,GACA,GAAA,MAAAV,EAAA8gB,aAAAmB,iBAAAjiB,EAAA29B,cACA,IAAA,GAAAqH,GAAA,EAAAA,EAAAqI,EAAA5uC,OAAAumC,IACA,WAAAqI,EAAArI,GAAAl5B,MAAA,UAAAuhC,EAAArI,GAAAl5B,MAAA,+CAAAuhC,EAAArI,GAAAl5B,MACAwhC,EAAAl3B,KAAAi3B,EAAArI,QAKA,KAAA,GAAAhpB,GAAA,EAAAA,EAAAqxB,EAAA5uC,OAAAud,IACA,WAAAqxB,EAAArxB,GAAAlQ,MAAA,oBAAAuhC,EAAArxB,GAAAlQ,MAAA,YAAAuhC,EAAArxB,GAAAlQ,MACAwhC,EAAAl3B,KAAAi3B,EAAArxB,QAKA,CACA,GAAA,MAAAhc,EAAA8gB,aAAAmB,iBAAAjiB,EAAA49B,gBACA,IAAA,GAAAzhB,GAAA,EAAAA,EAAAkxB,EAAA5uC,OAAA0d,IACA,WAAAkxB,EAAAlxB,GAAArQ,MAAA,UAAAuhC,EAAAlxB,GAAArQ,MACAwhC,EAAAl3B,KAAAi3B,EAAAlxB,QAKA,KAAA,GAAAyuB,GAAA,EAAAA,EAAAyC,EAAA5uC,OAAAmsC,IACA,WAAAyC,EAAAzC,GAAA9+B,MAAA,oBAAAuhC,EAAAzC,GAAA9+B,MAAA,YAAAuhC,EAAAzC,GAAA9+B,MACAwhC,EAAAl3B,KAAAi3B,EAAAzC,GAKA,IAAAzzB,EAAApW,QACA,MAAAf,EAAA8gB,aAAAysB,oBAAA,MAAAvtC,EAAA8gB,aAAAysB,mBAAAC,2BACAxtC,GAAA8gB,aAAAysB,mBAAAC,oBAMA,GAFAxtC,EAAAwmB,WAAAoH,WAAA,YAAA0f,EAEAvtC,EAAAU,OAAAC,QAAA,qCAAA,GAUA,GATA,SAAAgB,eAAA4Y,QAAA,sCAEAmzB,EAAAt2B,EAAAqP,WAAA8B,eAAA,GAAAE,MAAAgG,QAEAxuB,EAAAkrC,+BAAAuC,EACAztC,EAAAmrC,uBAAAh0B,EAAAqP,WAEA9kB,eAAAklB,QAAA,mCAAA,UAEA9oB,OAAAkH,SAAAoV,KAAA1Z,QAAA,MAAA,GAAA,CACA,GAAA,MAAAV,EAAA8gB,aAAAmB,iBACA,GAAA,YAAA9K,EAAAqP,WAAA8B,eAAA,GAAArY,MAAA,CACAy9B,EAAAv2B,EAAAqP,WAAA8B,eAAA,GAAAE,MAAAgG,OAEA,KAAA,GAAAwW,GAAA,EAAAA,EAAA0I,EAAAjvC,OAAAumC,IACA,iBAAA0I,EAAA1I,GAAA/0B,OAEA09B,EAAAv3B,KAAAs3B,EAAA1I,SAOA,IAAA,MAAAhlC,EAAA8gB,aAAAmB,iBAAAjiB,EAAAi3B,gBACA0W,EAAAx2B,EAAAqP,WAAA8B,eAAA,GAAAE,UAGA,IAAA,YAAArR,EAAAqP,WAAA8B,eAAA,GAAArY,MAAA,CACAy9B,EAAAv2B,EAAAqP,WAAA8B,eAAA,GAAAE,MAAAgG,OAEA,KAAA,GAAAwW,GAAA,EAAAA,EAAA0I,EAAAjvC,OAAAumC,IACA,iBAAA0I,EAAA1I,GAAA/0B,OAEA09B,EAAAv3B,KAAAs3B,EAAA1I,IAOA7tB,EAAAqP,WAAA8B,eAAA,GAAAE,MAAAmlB,MAKAx2B,GAAAqP,WAAA8B,eAAA,GAAAE,MAAArR,EAAAqP,WAAA8B,eAAA,GAAAE,MAMA,QAAAqP,GAAAC,GACA,MAAA3gB,GAAAtC,QAAAkjB,8BAAAD,EAAA73B,EAAAgN,eAAAe,wBAsCA,QAAA4/B,KACA,GAAAje,IAAA,EACAqY,EAAA7wB,EAAAqN,MAoBA,OAlBArN,GAAAiP,iBAAA3nB,OAAA,EAEA0Y,EAAAqP,WAAA8B,eAAAhP,QAAA,SAAA2uB,GACAA,EAAAzf,MAAAlP,QAAA,SAAA7E,GACA,GAAA+P,GAAAyjB,EAAAvzB,OAAA,IAAAD,EAAAC,MAEA,IADAyC,EAAAqN,OAAAA,EACApL,SAAAjC,EAAAvC,UAAA4P,IAAA,OAAArN,EAAAvC,UAAA4P,GACAmL,GAAA,MACA,CACA,GAAAuY,GAAA/wB,EAAAyX,aAAAqZ,EAAAvzB,OAAAD,EAAAsP,IAAA,KAAA,KAAA,KAAA,UAAA,EACAmkB,MAAA,IACAvY,GAAA,QAMAxY,EAAAqN,OAAAwjB,EACArY,EAqCA,QAAAwY,GAAA3jB,EAAA4jB,GAEA,GAAAC,KACAlxB,GAAAiP,iBAAA9M,QAAA,SAAA1O,GACAA,EAAAiiB,SAAArI,GAAA,IAAA5Z,EAAA4lB,WAAA5lB,EAAA6lB,cAAA2X,GACA,KAAAC,EAAA3nC,QAAAkK,EAAA8lB,eACA2X,EAAAjyB,KAAAxL,EAAA8lB,gBAKA2X,EAAA5pC,OAAA,GACA4pC,EAAA/uB,QAAA,SAAAoX,GACAvZ,EAAAvC,UAAA4P,GAAA,GAAA4jB,GAAA1X,GAAA8C,OAAA,YAqHA,QAAAqa,KACA,GAAA5E,GAAAryB,KAAAC,MAAA7W,EAAA8gB,aAAAysB,mBAAAO,gBACA32B,GAAAvC,UAAA,OAAA,GAAA,cAAAq0B,EACA9xB,EAAA42B,qBAAA,EA/WA1pB,EAAA,sBAAAlN,OAAAA,IACAkN,EAAA,sBAAAlN,OAAAA,EAAAjV,aAAAjC,EAAA6M,aAAAE,UAAA+T,WAAA/gB,EAAA8gB,aAAAC,aACAsD,EAAA,wBAAAlN,OAAAA,GAEA,IAAAm2B,MACAD,KACAK,KACAC,KACAF,IAEAt2B,GAAApW,KAAA,WACA,MAAAhB,GAAAU,OAAAC,QAAA,MAAA,IAQA,SAAAgB,eAAA4Y,QAAA,0BACAud,EAAA,eAAAx3B,KAAA,SAAAuhB,GACA5hB,EAAAgrC,kCAAAppB,EACAyrB,EAAArtC,EAAAgrC,kCACAtpC,eAAAklB,QAAA,yBAAA,SACA2jB,MAIA,IAAAvqC,EAAAgrC,kCAAAvsC,OACAo5B,EAAA,eAAAx3B,KAAA,SAAAuhB,GACAyrB,EAAAzrB,EACA2oB,OAIA8C,EAAArtC,EAAAgrC,kCACAT,KAyGAvqC,EAAA8kB,2BAAA7kB,EAAAgN,eAAAe,uBAAAmJ,EAAAoS,cAAA,KAAAvpB,EAAAG,mBACAE,KAAA,WACA8W,EAAA8U,gCACA9U,EAAAwV,uBACAxV,EAAAmO,eAAAtlB,EAAAguC,sBAAA,GAAA72B,EAAA1C,KAAAqV,cAAA,EAEA7P,SAAAhK,MAAAkH,EAAAtC,QAAAyzB,aAAAnxB,EAAAwS,UAAAxS,EAAA1U,WAGA0U,EAAAoJ,OAAAvgB,EAAA8gB,aAAAP,OACApJ,EAAA0N,YAAA7kB,EAAA8gB,aAAA+D,YACA1N,EAAA6lB,WAAAh9B,EAAA8gB,aAAAkc,WACA7lB,EAAAmS,SAAArpB,EAAAgN,eAAAe,uBACAmJ,EAAAo2B,mBAAAvtC,EAAA8gB,aAAAysB,mBAEA,QAAAp2B,EAAAo2B,mBAAA,kCACAp2B,EAAAo2B,mBAAA,kBAAA32B,KAAAC,MAAA7W,EAAA8gB,aAAAysB,mBAAAO,kBAGA,GAAA32B,EAAApW,QACA,MAAAoW,EAAAo2B,mBAAAC,2BACAr2B,GAAAo2B,mBAAAC,oBAIAr2B,EAAA82B,mBAAA,WAEA92B,EAAAmyB,yBAAA,6BACAnyB,EAAA6N,iBAAA7N,EAAAjV,cAAA7B,KAAA,WAEA8W,EAAAwN,8BA6BAxN,EAAA+2B,qBAAA,WAEA,GAAAN,IACAz2B,EAAAmyB,yBAAA,iCACAnyB,EAAAgO,mBAAAhO,EAAAjV,cAAA7B,KAAA,WACA8W,EAAAwN,iCAIA,IAAA,OAAAxN,EAAAiP,kBAAAhN,SAAAjC,EAAAiP,iBACA,GAAAjP,EAAAiP,iBAAA3nB,OAAA,EAAA,CACA,GAAAmM,GAAAuM,EAAAiP,iBAAA,GACAsjB,EAAA9+B,EAAAiiB,OAAAxnB,MAAA,KAAA,GACAskC,EAAA/+B,EAAAiiB,OAAAxnB,MAAA,KAAA,GACAoP,EAAA0C,EAAAqP,WAAA8B,eAAAohB,EAAA,GAAAlhB,MAAAmhB,EAAA,EACAxB,GAAA,MAAA,gBAEAhxB,EAAAtC,QACAgL,UAAA,yBAAA+B,OACAvhB,KAAA,SAAAW,GACAmW,EAAAsR,SAAAihB,EAAAj1B,EAAAsP,WAIA5M,GAAAtC,QACAgL,UAAA,yBAAA+B,OACAvhB,KAAA,SAAAW,GACAmW,EAAAsR,SAAA,EAAA,qBAyBAtR,EAAAgJ,OAAA,WACAhJ,EAAAkO,sBAIAlO,EAAAg3B,yBAAA,SAAAh6B,GACA,GAAAjW,GAAAiZ,EAAAo2B,mBAAAp5B,EACA,OAAAiF,SAAAlb,EACA,GAGAgC,EAAAkuC,YAAAlwC,IAGAiZ,EAAA42B,qBAAA,EACA52B,EAAAk3B,qBAAA,SAAAl6B,GACA,GAAAjW,GAAAiZ,EAAAo2B,mBAAAp5B,EAEA,OAAAiF,SAAAlb,GAAA,uBAAAiW,EACA,MAGAiF,QAAAlb,EACA,IAEA,oCAAAiW,GAAA,QAAAjW,GAAAiZ,EAAA42B,uBAAA,EACAF,IAGA,mBAAA15B,EACA,OAAAgD,EAAAvC,UAAA,QAAAuC,EAAAvC,UAAA,OAAAnW,OAAA,GACA,OAAA0Y,EAAAvC,UAAA,OAAA,GAAA,gBAAAuC,EAAAvC,UAAA,OAAA,GAAA,eAAAnW,OAAA,IACA0Y,EAAAvC,UAAA,OAAA,GAAA,eAAA,GAAA,eAAA1W,GAGA,oCAAAiW,GAAA,KAAAA,EACAgD,EAAAvC,UAAA,OAAA,GAAA,WAAA,GAAA,gCAAA1W,EAEA,yBAAAiW,GAAA,0BAAAA,EACAgD,EAAAvC,UAAA,OAAA,GAAA,YAAA,GAAAT,GAAAjW,EAEA,qBAAAiW,IAEAjW,EAAAA,EAAAowC,OAAA,GAAAC,cAAArwC,EAAAswB,MAAA,IAIArX,EAAAvC,UAAA,OAAA,GAAA,iBAAA,GAAA,kBAAAuC,EAAAo2B,mBAAA,kBAEArvC,IAGAutC,sBAAA,WACA,GAAAC,GAAAv0B,EAAAvC,UAAA,OAAA,GAAA45B,eAAA,EAEA,OAAAp1B,UAAAsyB,EAAAC,sBAAA,OAAAD,EAAAC,sBAQAC,oBAAA,WACA,GAAAF,GAAAv0B,EAAAvC,UAAA,OAAA,GAAA45B,eAAA,EAEA,OAAAp1B,UAAAsyB,EAAA+C,eAAA,OAAA/C,EAAA+C,eAQAt3B,EAAA20B,aAAA,WAEA,IAAAF,uBAAA,OAAA3xB,SAAA6F,eAAA,uCACA,OAAA,CAGA,IAAAisB,GAAA9xB,SAAA6F,eAAA,uCAAAnP,OAEA,OAAA,OAAAo7B,GAAAA,EAAAttC,OAAA,GAQA0Y,EAAA60B,gBAAA,WAEA,IAAAP,yBAAA,OAAAxxB,SAAA6F,eAAA,oCACA,OAAA,CAGA,IAAAisB,GAAA9xB,SAAA6F,eAAA,oCAAAnP,OAEA,OAAA,OAAAo7B,GAAAA,EAAAttC,OAAA,GAQA0Y,EAAAu3B,6BAAA,SAAAv6B,EAAAD,GACA,MAAAkF,UAAAjC,EAAAo2B,mBAAA,kBACAp2B,EAAAo2B,mBAAA,kBAAAr5B,GAAAC,GADA,QAYAgD,EAAAw3B,2BAAA,SAAAx6B,GACA,GAAAjW,GAAAiZ,EAAAo2B,mBAAAp5B,EACA,OAAAiF,SAAAlb,EACA,GAGAA,SCnYA,WAEA,GAAAqc,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WACA,oCACA,SAAA,QAAA,cAAA,eAAA,kBAAA,oBAAA,YAAA,eAAA,aAAA,YACA,SAAA2S,EAAAwG,EAAA0G,EAAArkB,EAAAE,EAAA0d,EAAA7d,EAAAge,EAAAre,EAAAO,GAGAokB,EAAA,sBAAAlN,OAAAA,IACAkN,EAAA,sBAAAlN,OAAAA,EAAAjV,aAAAjC,EAAA6M,aAAAE,UAAA+T,WAAA/gB,EAAA8gB,aAAAC,aAGA/gB,EAAA8kB,2BAAA7kB,EAAAgN,eAAAW,mBAAAuJ,EAAAoS,cAAA,KAAAvpB,EAAAG,mBACAE,KAAA,SAAAW,GACAmW,EAAA8U,gCACA9U,EAAAwV,uBACAxV,EAAAmO,eAAAtlB,EAAAguC,sBAAA,GAAA72B,EAAA1C,KAAAqV,cAAA,EAEA7P,SAAAhK,MAAAkH,EAAAtC,QAAAyzB,aAAAnxB,EAAAwS,UAAAxS,EAAA1U,WAGA0U,EAAAoJ,OAAAvgB,EAAA8gB,aAAAP,OACApJ,EAAA0N,YAAA7kB,EAAA8gB,aAAA+D,YACA1N,EAAA6lB,WAAAh9B,EAAA8gB,aAAAkc,WACA7lB,EAAAmS,SAAArpB,EAAAgN,eAAAW,mBAGAuJ,EAAAk3B,qBAAA,SAAAl6B,GACA,MAAAnU,GAAA8gB,aAAAqc,oBAGAhmB,EAAAy3B,UAAA,SAAAC,GACA,MAAA7uC,GAAA8gB,aAAAqc,qBAAA0R,GAKA13B,EAAA23B,8BACA33B,EAAAoJ,SAAAtgB,EAAAgO,eAAAE,WACAgJ,EAAAqT,SAAA,KAAA,2BAAA,aAAA,EAAA,EAAA,OAEArT,EAAA43B,qBAAA,WACA,MAAA53B,GAAA23B,+BAGA33B,EAAA63B,kBAAA,WAGA73B,EAAA23B,8BAAA33B,EAAAoJ,SAAAtgB,EAAAgO,eAAAE,WAGAgJ,EAAA83B,eAAA,WAEA93B,EAAAmyB,yBAAA,6BAEAnyB,EAAA6N,iBAAA7N,EAAAjV,cAAA7B,KAAA,WAEA8W,EAAAwN,8BAIAxN,EAAA+3B,iBAAA,WAEA/3B,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAA,KAAA,KAAA,KAAA,WAEA0U,EAAAmyB,yBAAA,iCACAnyB,EAAAgO,mBAAAhO,EAAAjV,cAAA7B,KAAA,WACA8W,EAAAwN,8BAIAxN,EAAA6Z,oBAIA7Z,EAAAgJ,OAAA,WAEAhJ,EAAAkO,4BChFA,WACA,GAAA9K,GAAAtb,QAAAC,OAAA,UACAqb,GAAA/V,WAAA,uCAAA,SAAA,QAAA,eAAA,SAAA2S,EAAAwG,EAAA3d,GACAmX,EAAAg4B,6BAAA,WACAh4B,EAAA0nB,oBAAA7+B,EAAA8gB,aAAA+d,2BCJA,WAEA,GAAAtkB,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WACA,sCACA,SAAA,QAAA,cAAA,eAAA,kBAAA,oBAAA,YAAA,eAAA,aAAA,YACA,SAAA2S,EAAAwG,EAAA0G,EAAArkB,EAAAE,EAAA0d,EAAA7d,EAAAge,EAAAre,EAAAO,GAGAokB,EAAA,sBAAAlN,OAAAA,IACAkN,EAAA,sBAAAlN,OAAAA,IACAkN,EAAA,8BAAAlN,OAAAA,IACAkN,EAAA,+BAAAlN,OAAAA,IAEAnX,EAAAovC,iCAAApvC,EAAA8gB,aAAAC,YACA1gB,KAAA,SAAAigB,GACAtgB,EAAA8gB,aAAAysB,mBAAAjtB,EAAAtf,KAEAsf,EAAAtf,KAAAklB,aAAAjmB,EAAA0P,mBAAAE,aACA7P,EAAA8gB,aAAAnR,mBAAA1P,EAAA0P,mBAAAE,aAEA7P,EAAA8gB,aAAAnR,mBAAA1P,EAAA0P,mBAAAC,aAKA5P,EAAA8gB,aAAAqP,QACAoY,aAAA,EACAC,aAAA,EACAC,eAAA,GAIAtxB,EAAAsN,iBAAAxlB,QAAAylB,KAAAvN,EAAAvC,WAGAuC,EAAAmO,gBAAA,CAEA,IAAA+pB,GAAA,aACAC,EAAA,cACAC,EAAA,UACAC,EAAA,sBACAC,EAAA,gBAEAt4B,GAAAqP,WAAA,KACArP,EAAAsO,WAAA,EACAtO,EAAAu4B,2BAAA,EAEAv4B,EAAAgZ,OAAAnwB,EAAA8gB,aAAAqP,OAEAhZ,EAAAmN,qBAAArkB,EAAAgN,eAAAU,oBAGA,IAAAgiC,GAAA,WACA3vC,EAAA4vC,oCAAA3vC,EAAA6M,aAAAE,UAAAmK,EAAAmN,sBACAjkB,KAAA,SAAAigB,GACAnJ,EAAAsO,WAAA,CACA,IAAAzkB,GAAAsf,EAAAtf,IACAA,IACAhB,EAAAwmB,WAAAxlB,EAAAwlB,WAAAA,WACAxmB,EAAA8gB,aAAAwI,SAAAtoB,EAAAsoB,SACAtpB,EAAA8gB,aAAAyI,cAAA,KACAvpB,EAAA8gB,aAAA+uB,sBAAA7uC,EAAA8uC,UACA9vC,EAAA8gB,aAAA0I,KAAAxoB,EAAAwoB,KACAxpB,EAAA8gB,aAAAlM,UAAA5T,EAAA+uC,aACA/vC,EAAA8gB,aAAAjZ,WAAA7G,EAAA6G,WACA7H,EAAA8gB,aAAAC,WAAA/f,EAAA6G,WACA7H,EAAA8gB,aAAAsb,IAAAp7B,EAAAo7B,IACAp8B,EAAA8gB,aAAA4mB,kBAAA1mC,EAAA0mC,kBACA1nC,EAAA8gB,aAAAkvB,gBAAAhvC,EAAAgvC,gBAEAhwC,EAAA8gB,aAAA+D,YAAA7jB,EAAAo7B,IACAp8B,EAAA8gB,aAAAkc,WAAAh8B,EAAAi8B,kBAEA9lB,EAAAqP,WAAAxmB,EAAAwmB,WACArP,EAAAtP,WAAA7H,EAAA8gB,aAAAjZ,WACAsP,EAAA84B,mBAAA,IAAAjvC,EAAA+7B,UAAA,IAAA/7B,EAAA+7B,SACA5lB,EAAAilB,IAAAp8B,EAAA8gB,aAAAsb,IACAjlB,EAAAmS,SAAAtpB,EAAA8gB,aAAAwI,SACAnS,EAAAoS,cAAA,KACApS,EAAA04B,sBAAA7uC,EAAA8uC,UACA34B,EAAAqS,KAAAxpB,EAAA8gB,aAAA0I,KAEArS,EAAA0N,YAAA7kB,EAAA8gB,aAAA+D,YACA1N,EAAA6lB,WAAAh9B,EAAA8gB,aAAAkc,WAIAh9B,EAAA8gB,aAAAqP,OAAAoY,aAAApxB,EAAA84B,oBAAAjvC,EAAA+7B,WAAA98B,EAAAmO,OAAAK,OACAzO,EAAA8gB,aAAAqP,OAAAsY,eAAAtxB,EAAA84B,oBAAAjvC,EAAA+7B,WAAA98B,EAAAmO,OAAAK,OAGA0I,EAAAvC,UAAA6J,aAEAzd,EAAAkvC,kBAAA52B,QAAA,SAAA62B,GACA,GAAAC,IACAzxB,WAAAwxB,EAAA/nC,GACAwU,KAAAuzB,EAAAvzB,KACAmE,WAAA/gB,EAAA8gB,aAAAjZ,WACAuX,kBAAA+wB,EAAA1H,cACA5nB,eAAA,EACA/B,KAAAqxB,EAAArxB,KACAE,eAAA,GAAA5C,MAAA+zB,EAAAE,aAAA9sB,eAAA,SAAAC,IAAA,UAAAC,MAAA,UAAAC,KAAA,UAAAC,KAAA,UAAAC,OAAA,UAAAC,QAAA,IAEA1M,GAAAvC,UAAA6J,UAAArI,KAAAg6B,KAGApwC,EAAA8gB,aAAAlM,UAAA6J,UAAAtH,EAAAvC,UAAA6J,UACAtH,EAAAvC,UAAA6J,UAAAhgB,OAAA,GACA0Y,EAAAuK,sBAGAvK,EAAAvC,UAAA5T,EAAA+uC,aACA54B,EAAAswB,aAGA1nC,EAAA6oB,OAAA4F,MAAA,KAAAvuB,EAAAiB,IAAA0F,oCACAuQ,EAAAi2B,sBAGAj2B,EAAA8U,gCACAhS,SAAAhK,MAAAkH,EAAAtC,QAAAyzB,aAAAnxB,EAAAwS,UAAAxS,EAAA1U,UAGA0U,EAAAtC,QAAAkQ,kBAAA,EAAA,mBAKA5N,GAAAm5B,kBAAA,SAAA7f,EAAA8f,GAGA,IAAAp5B,EAAA84B,mBAAA,CAIA,GAAA3mB,GACAiF,CAEA,QAAAkC,GACA,IAAA4e,GACA/lB,EAAArpB,EAAAgN,eAAAW,mBACA2gB,EAAAtuB,EAAAiB,IAAA2F,gCACAsQ,EAAAq5B,qBAAA,CACA,MAEA,KAAAf,GACAnmB,EAAArpB,EAAAgN,eAAAe,uBACAugB,EAAAtuB,EAAAiB,IAAA+F,oCACAkQ,EAAAs5B,yBAAA,CACA,MAEA,KAAAnB,GACAhmB,EAAArpB,EAAAgN,eAAAY,oBACA0gB,EAAAtuB,EAAAiB,IAAA4F,iCACAqQ,EAAAu5B,sBAAA,CACA,MAEA,KAAAnB,GACAjmB,EAAArpB,EAAAgN,eAAAa,gBACAygB,EAAAtuB,EAAAiB,IAAA6F,6BACAoQ,EAAAw5B,kBAAA,CACA,MAEA,KAAAnB,GACAlmB,EAAArpB,EAAAgN,eAAAc,4BACAwgB,EAAAtuB,EAAAiB,IAAA8F,yCACAmQ,EAAAy5B,8BAAA,EAIA5wC,EAAAguC,oBAAA,EAEAhuC,EAAA8kB,2BAAAwE,EAAA,KAAA,KAAAtpB,EAAAG,mBACAE,KAAA,SAAAW,GAEAmW,EAAAq5B,qBAAA,EACAr5B,EAAAu5B,sBAAA,EACAv5B,EAAAw5B,kBAAA,EACAx5B,EAAAy5B,8BAAA,EACAz5B,EAAAs5B,yBAAA,EAEAzvC,GAEAhB,EAAA8gB,aAAA+vB,WAAA,KACA7wC,EAAA8gB,aAAAwI,SAAAtoB,EAAAsoB,SACAtpB,EAAA8gB,aAAAyI,cAAAvoB,EAAAuoB,cACAvpB,EAAA8gB,aAAA0I,KAAAxoB,EAAAwoB,KACAxpB,EAAA8gB,aAAAlM,aAEA5U,EAAA8gB,aAAAgwB,SAAA7wC,EAAAgO,eAAAC,MACAlO,EAAA8gB,aAAAiwB,aAAA,QACA/wC,EAAA8gB,aAAAkwB,SAAA,EACAhxC,EAAA8gB,aAAAmwB,aAAA,GACAjxC,EAAA8gB,aAAAowB,iBAAA,EACAlxC,EAAAomB,oBACApmB,EAAAwmB,WAAAxlB,EAAAwlB,WACArP,EAAAqP,WAAAxmB,EAAAwmB,WAEAxmB,EAAA+9B,eAAA/8B,EAAAwlB,WAAA8C,EAAAtoB,EAAAuoB,cAAAvoB,EAAAwoB,MACAxpB,EAAAihB,kBAAA,mCAAA,SAAAsvB,EAAAA,GACAxwC,EAAAU,KAAA8tB,IAGApX,EAAAtC,QAAAkQ,kBAAA,EAAA,kBAEA,SAAA/jB,GACAmW,EAAAtC,QAAAkQ,kBAAA,EAAA,qBAKA5N,EAAAg6B,mBAAA,SAAA7nB,EAAAunB,GACAvnB,GAAArpB,EAAAgN,eAAAW,mBACAuJ,EAAAq5B,qBAAA,EAEAlnB,GAAArpB,EAAAgN,eAAAY,oBACAsJ,EAAAu5B,sBAAA,EAEApnB,GAAArpB,EAAAgN,eAAAa,gBACAqJ,EAAAw5B,kBAAA,EAEArnB,GAAArpB,EAAAgN,eAAAc,4BACAoJ,EAAAy5B,8BAAA,EAEAtnB,GAAArpB,EAAAgN,eAAAe,yBACAmJ,EAAAs5B,yBAAA,GAGAzwC,EAAAoxC,6BAAAP,EAAA5wC,EAAA6M,aAAAE,WACA3M,KAAA,SAAAigB,GACAgJ,GAAArpB,EAAAgN,eAAAW,mBACAuJ,EAAAq5B,qBAAA,EAEAlnB,GAAArpB,EAAAgN,eAAAY,oBACAsJ,EAAAu5B,sBAAA,EAEApnB,GAAArpB,EAAAgN,eAAAa,gBACAqJ,EAAAw5B,kBAAA,EAEArnB,GAAArpB,EAAAgN,eAAAc,4BACAoJ,EAAAy5B,8BAAA,EAEAtnB,GAAArpB,EAAAgN,eAAAe,yBACAmJ,EAAAs5B,yBAAA,EAGA,IAAAzvC,GAAAsf,EAAAtf,IACA,IAAAA,EA+CA,OA7CAhB,EAAA8gB,aAAAqP,OAAAnvB,EAAAmvB,OAEAnwB,EAAA8gB,aAAAP,OAAAvf,EAAA+7B,SAEA/8B,EAAA8gB,aAAA+D,YAAA7jB,EAAAo7B,IACAp8B,EAAA8gB,aAAAkc,WAAAh8B,EAAAi8B,kBAEAj9B,EAAA8gB,aAAA+vB,WAAAA,EACA7wC,EAAA8gB,aAAAwI,SAAAtoB,EAAAsoB,SACAtpB,EAAA8gB,aAAAyI,cAAAvoB,EAAA8uC,UACA9vC,EAAA8gB,aAAA0I,KAAAxoB,EAAAwoB,KACAxpB,EAAA8gB,aAAAmB,gBAAAjhB,EAAAihB,gBACAjiB,EAAAomB,oBACApmB,EAAAwmB,WAAAxlB,EAAAwlB,WAAAA,WACArP,EAAAqP,WAAAxmB,EAAAwmB,WACAxmB,EAAA+9B,eAAA/8B,EAAAwlB,WAAAA,WAAA8C,EAAAtoB,EAAA8uC,UAAA9uC,EAAAwoB,MAEAF,GAAArpB,EAAAgN,eAAAW,oBACA0b,GAAArpB,EAAAgN,eAAAa,gBACA9M,EAAAwoB,KAAA6nB,SAAApxC,EAAAgM,KAAAU,YAAA3L,EAAAwoB,KAAA6nB,SAAApxC,EAAAgM,KAAAQ,mBACAzM,EAAAguC,oBAAA,EAEAhtC,EAAAwoB,KAAA6nB,SAAApxC,EAAAgM,KAAAW,qBAEA5M,EAAAguC,oBAAA,EAGAhuC,EAAAguC,mBAAA72B,EAAA84B,sBAAA,EAIAjvC,EAAAwoB,KAAA6nB,SAAApxC,EAAAgM,KAAAU,YAAA3L,EAAAwoB,KAAA6nB,SAAApxC,EAAAgM,KAAAQ,mBACAzM,EAAAguC,oBAAA,EAEAhtC,EAAAwoB,KAAA6nB,SAAApxC,EAAAgM,KAAAW,qBACA5M,EAAAguC,oBAAA,EAGAhuC,EAAAguC,mBAAAhtC,EAAA+7B,WAAA98B,EAAAgO,eAAAE,WAAAgJ,EAAA84B,sBAAA,EAIAjwC,EAAA8gB,aAAAlM,UAAA5T,EAAA+uC,aACA54B,EAAAvC,UAAA5U,EAAA8gB,aAAAlM,UAEA0U,GACA,IAAArpB,GAAAgN,eAAAe,uBACAhO,EAAAihB,kBAAA,kCAAA,sCAAA,6CACAlhB,EAAAU,KAAAR,EAAAiB,IAAA+F,oCACA,MACA,KAAAhH,GAAAgN,eAAAW,mBACA5N,EAAAihB,kBAAA,kCAAA,sCAAA,iCACAlhB,EAAAU,KAAAR,EAAAiB,IAAA2F,gCACA,MACA,KAAA5G,GAAAgN,eAAAY,oBACA7N,EAAAihB,kBAAA,kCAAA,uCAAA,kCACAlhB,EAAAU,KAAAR,EAAAiB,IAAA4F,iCACA,MACA,KAAA7G,GAAAgN,eAAAa,gBACA9N,EAAAihB,kBAAA,kCAAA,oCAAA,+BACAlhB,EAAAU,KAAAR,EAAAiB,IAAA6F,6BACA,MACA,KAAA9G,GAAAgN,eAAAc,4BACA/N,EAAAihB,kBAAA,kCAAA,gDAAA,2CACAlhB,EAAAU,KAAAR,EAAAiB,IAAA8F,8CAIAmQ,GAAAtC,QAAAkQ,kBAAA,EAAA,oBAKA5N,EAAAiX,oCAAA,WACA,MAAAjX,GAAAu4B,2BACA,EAEAv4B,EAAAqT,SAAA,KAAA,aAAA,WAAA,EAAA,EAAA,QAGArT,EAAAkO,mBAAA,WACAlO,EAAAgJ,UAGAhJ,EAAAgJ,OAAA,WACAhJ,EAAAqT,SAAA,KAAA,aAAA,WAAA,EAAA,EAAA,OAGArT,EAAAtC,QAAAgL,UAAA,wBAAA+B,OAAAvhB,KACA,SAAAW,GACA,oBAAAA,EAAA4gB,OACAzK,EAAAm6B,wBAAAjxC,KAAA,WACAN,EAAAU,KAAAR,EAAAiB,IAAAK,qBAIA4V,EAAAu4B,2BAAA,EACA3vC,EAAAU,KAAAR,EAAAiB,IAAAK,qBAXAxB,EAAAU,KAAAR,EAAAiB,IAAAK,mBAiBA4V,EAAAo6B,uBAAA,WACAp6B,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAA,KAAA,KAAA,KAAA,UAEA0U,EAAAqT,SAAA,KAAA,aAAA,WAAA,EAAA,EAAA,QAIArT,EAAA8N,UAAA,EACA9N,EAAAm6B,wBAAAjxC,KAAA,WACAN,EAAAU,KAAAR,EAAAiB,IAAAK,qBALAxB,EAAAU,KAAAR,EAAAiB,IAAAK,kBAUA4V,EAAA2X,mBAIA3X,EAAAm6B,sBAAA,WACA,MAAAtxC,GAAAsxC,wBACAjxC,KAAA,SAAAigB,GACA,MAAAA,GAAAtf,KACA,IAAAsf,EAAAtf,KAAAuf,QACAvgB,EAAAihB,kBAAA,kBAAA9J,EAAA1U,QAAA,+CAAA,wDACA0U,EAAAsN,iBAAAxlB,QAAAylB,KAAAvN,EAAAvC,WACAuC,EAAAu4B,2BAAA,EACAv4B,EAAAtC,QAAAgL,UAAA,4BAAA+B,SAEA5hB,EAAAihB,kBAAA,gCAAA9J,EAAA1U,QAAA,gDAAA,qDACA0U,EAAAtC,QAAAgL,UAAA,4BAAA+B,QAIAzK,EAAAtC,QAAAkQ,kBAAA,EAAA,gBAAA,MAAA,IAEA,SAAAzE,GAEA,MADAtgB,GAAAihB,kBAAA,gCAAA9J,EAAA1U,QAAA,gDAAA,qDACA0U,EAAAtC,QAAAgL,UAAA,4BAAA+B,SAlBA5hB,WAoBA,WACAmX,EAAA8N,UAAA,KAIA9N,EAAAq6B,iBAAA,WACA,MAAAxxC,GAAA8gB,aAAAnR,oBAIAggC,UCpZA,WAEA,GAAAp1B,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WACA,qCACA,SAAA,QAAA,cAAA,eAAA,kBAAA,oBAAA,YAAA,eAAA,aAAA,YACA,SAAA2S,EAAAwG,EAAA0G,EAAArkB,EAAAE,EAAA0d,EAAA7d,EAAAge,EAAAre,EAAAO,GAGAokB,EAAA,sBAAAlN,OAAAA,IACAkN,EAAA,sBAAAlN,OAAAA,EAAAjV,aAAAjC,EAAA6M,aAAAE,UAAA+T,WAAA/gB,EAAA8gB,aAAAC,aAGA/gB,EAAA8kB,2BAAA7kB,EAAAgN,eAAAY,oBAAAsJ,EAAAoS,cAAA,KAAAvpB,EAAAG,mBACAE,KAAA,SAAAW,GACAmW,EAAA8U,gCACA9U,EAAAwV,uBACAxV,EAAAmO,eAAAtlB,EAAAguC,sBAAA,GAAA72B,EAAA1C,KAAAqV,cAAA,EAEA7P,SAAAhK,MAAAkH,EAAAtC,QAAAyzB,aAAAnxB,EAAAwS,UAAAxS,EAAA1U,WAIA0U,EAAAoJ,OAAAvgB,EAAA8gB,aAAAP,OACApJ,EAAA0N,YAAA7kB,EAAA8gB,aAAA+D,YACA1N,EAAA6lB,WAAAh9B,EAAA8gB,aAAAkc,WACA7lB,EAAAmS,SAAArpB,EAAAgN,eAAAY,oBAEAsJ,EAAAs6B,kBAAA,WAGAt6B,EAAAmyB,yBAAA,gCAEAnyB,EAAA6N,iBAAA7N,EAAAjV,cAAA7B,KAAA,WAEA8W,EAAAwN,8BAIAxN,EAAAu6B,kBAAA,SAAAC,GACA,OAAAx6B,EAAAkT,gBAAA,KAAAsnB,EAAA,cAAA,EAAA,IAGAx6B,EAAAy6B,oBAAA,WAGAz6B,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAA,KAAA,KAAA,KAAA,WAEA0U,EAAAmyB,yBAAA,oCACAnyB,EAAAgO,mBAAAhO,EAAAjV,cAAA7B,KAAA,WACA8W,EAAAwN,8BAIAxN,EAAA6Z,oBAIA7Z,EAAAgJ,OAAA,WAEAhJ,EAAAkO,4BC9DA,WAEA,GAAA9K,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WACA,6CACA,SAAA,QAAA,cAAA,eAAA,kBAAA,oBAAA,YAAA,eAAA,aAAA,YACA,SAAA2S,EAAAwG,EAAA0G,EAAArkB,EAAAE,EAAA0d,EAAA7d,EAAAge,EAAAre,EAAAO,GAGAokB,EAAA,sBAAAlN,OAAAA,IACAkN,EAAA,sBAAAlN,OAAAA,EAAAjV,aAAAjC,EAAA6M,aAAAE,UAAA+T,WAAA/gB,EAAA8gB,aAAAC,aAGA/gB,EAAA8kB,2BAAA7kB,EAAAgN,eAAAc,4BAAAoJ,EAAAoS,cAAA,KAAAvpB,EAAAG,mBACAE,KAAA,SAAAW,GACAmW,EAAA8U,gCACA9U,EAAAwV,uBACAxV,EAAAmO,eAAAtlB,EAAAguC,sBAAA,GAAA72B,EAAA1C,KAAAqV,cAAA,EAEA7P,SAAAhK,MAAAkH,EAAAtC,QAAAyzB,aAAAnxB,EAAAwS,UAAAxS,EAAA1U,WAIA0U,EAAAoJ,OAAAvgB,EAAA8gB,aAAAP,OACApJ,EAAA0N,YAAA7kB,EAAA8gB,aAAA+D,YACA1N,EAAA6lB,WAAAh9B,EAAA8gB,aAAAkc,WACA7lB,EAAAmS,SAAArpB,EAAAgN,eAAAc,4BAEAoJ,EAAA06B,wBAAA,WAGA16B,EAAAmyB,yBAAA,uCAEAnyB,EAAA6N,iBAAA7N,EAAAjV,cAAA7B,KAAA,WAEA8W,EAAAwN,8BAIAxN,EAAA26B,0BAAA,WAGA36B,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAA,KAAA,KAAA,KAAA,WAEA0U,EAAAmyB,yBAAA,2CACAnyB,EAAAgO,mBAAAhO,EAAAjV,cAAA7B,KAAA,WACA8W,EAAAwN,8BAIAxN,EAAA6Z,oBAIA7Z,EAAAgJ,OAAA,WAEAhJ,EAAAkO,4BC1DA,WAEA,GAAA9K,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WACA,iCACA,SAAA,QAAA,cAAA,eAAA,kBAAA,oBAAA,YAAA,eAAA,aAAA,YACA,SAAA2S,EAAAwG,EAAA0G,EAAArkB,EAAAE,EAAA0d,EAAA7d,EAAAge,EAAAre,EAAAO,GAGAokB,EAAA,sBAAAlN,OAAAA,IACAkN,EAAA,sBAAAlN,OAAAA,EAAAjV,aAAAjC,EAAA6M,aAAAE,UAAA+T,WAAA/gB,EAAA8gB,aAAAC,aAGA/gB,EAAA8kB,2BAAA7kB,EAAAgN,eAAAa,gBAAAqJ,EAAAoS,cAAA,KAAAvpB,EAAAG,mBACAE,KAAA,SAAAW,GACAmW,EAAA8U,gCACA9U,EAAAwV,uBACAxV,EAAAmO,eAAAtlB,EAAAguC,sBAAA,GAAA72B,EAAA1C,KAAAqV,cAAA,EAEA7P,SAAAhK,MAAAkH,EAAAtC,QAAAyzB,aAAAnxB,EAAAwS,UAAAxS,EAAA1U,WAIA0U,EAAAoJ,OAAAvgB,EAAA8gB,aAAAP,OACApJ,EAAA0N,YAAA7kB,EAAA8gB,aAAA+D,YACA1N,EAAA6lB,WAAAh9B,EAAA8gB,aAAAkc,WACA7lB,EAAAmS,SAAArpB,EAAAgN,eAAAa,gBAEAqJ,EAAA46B,mBAAA,SAAAC,GAEAA,IACAA,EAAA,aAGA,IAAAhC,GAAAhwC,EAAA8gB,aAAAkvB,gBAAA/hB,OAAAjuB,EAAA8gB,aAAAkvB,iBAAA7hB,OAAA6jB,GAAA,IACA,OAAAhC,IAGA74B,EAAA86B,aAAA,WAGA96B,EAAAmyB,yBAAA,2BAEAnyB,EAAA6N,iBAAA7N,EAAAjV,cAAA7B,KAAA,WAEA8W,EAAAwN,8BAIAxN,EAAA+6B,eAAA,WAGA/6B,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAA,KAAA,KAAA,KAAA,WAEA0U,EAAAmyB,yBAAA,+BACAnyB,EAAAgO,mBAAAhO,EAAAjV,cAAA7B,KAAA,WACA8W,EAAAwN,8BAIAxN,EAAA6Z,oBAIA7Z,EAAAgJ,OAAA,WACAhJ,EAAAkO,4BCnEA,WAEA,GAAA9K,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WAAA,sCACA,SAAA,QAAA,cAAA,eAAA,kBAAA,oBAAA,OAAA,YAAA,eAAA,UAAA,gBAAA,WAAA,aAAA,YACA,SAAA2S,EAAAwG,EAAA0G,EAAArkB,EAAAE,EAAA0d,EAAAE,EAAA/d,EAAAge,EAAAC,EAAAC,EAAAxL,EAAA/S,EAAAO,GAGAokB,EAAA,sBAAAlN,OAAAA,IACAkN,EAAA,sBAAAlN,OAAAA,IACAkN,EAAA,8BAAAlN,OAAAA,IACAkN,EAAA,uCAAAlN,OAAAA,IAGAnX,EAAA8gB,aAAAqP,QACAoY,aAAA,EACAC,aAAA,EACAC,eAAA,GAIAtxB,EAAAmO,gBAAA,EACAnO,EAAAu4B,2BAAA,CAEA,IAAAyC,GAAA,iBACAC,EAAA,eACAC,EAAA,gBACA7C,EAAA,qBAEAr4B,GAAAqP,WAAA,KACArP,EAAAsO,WAAA,EACAtO,EAAAgZ,OAAAnwB,EAAA8gB,aAAAqP,OAEAhZ,EAAAmN,qBAAArkB,EAAAgN,eAAAE,qBAEAgK,EAAAsN,iBAAAxlB,QAAAylB,KAAAvN,EAAAvC,UAGA,IAAA+6B,GAAA,WACA3vC,EAAA4vC,oCAAA3vC,EAAA6M,aAAAC,QAAAoK,EAAAmN,sBACAjkB,KAAA,SAAAigB,GACAnJ,EAAAsO,WAAA,CACA,IAAAzkB,GAAAsf,EAAAtf,IACAA,IACAhB,EAAAwmB,WAAAxlB,EAAAwlB,WAAAA,WACAxmB,EAAA8gB,aAAAwI,SAAAtoB,EAAAsoB,SACAtpB,EAAA8gB,aAAAyI,cAAA,KACAvpB,EAAA8gB,aAAA+uB,sBAAA7uC,EAAA8uC,UACA9vC,EAAA8gB,aAAA0I,KAAAxoB,EAAAwoB,KACAxpB,EAAA8gB,aAAAlM,UAAA5T,EAAA+uC,aACA/vC,EAAA8gB,aAAAjZ,WAAA7G,EAAA6G,WACA7H,EAAA8gB,aAAAsb,IAAAp7B,EAAAo7B,IACAp8B,EAAA8gB,aAAA4mB,kBAAA1mC,EAAA0mC,kBAEA1nC,EAAA8gB,aAAA+D,YAAA7jB,EAAAo7B,IACAp8B,EAAA8gB,aAAAkc,WAAAh8B,EAAAi8B,kBAEA9lB,EAAAqP,WAAAxmB,EAAAwmB,WACArP,EAAAtP,WAAA7H,EAAA8gB,aAAAjZ,WACAsP,EAAA84B,mBAAAjvC,EAAA+7B,WAAA98B,EAAAmO,OAAAI,WAAAxN,EAAA+7B,WAAA98B,EAAAmO,OAAAK,OACA0I,EAAAilB,IAAAp8B,EAAA8gB,aAAAsb,IACAjlB,EAAAmS,SAAAtpB,EAAA8gB,aAAAwI,SACAnS,EAAAoS,cAAA,KACApS,EAAA04B,sBAAA7uC,EAAA8uC,UACA34B,EAAAqS,KAAAxpB,EAAA8gB,aAAA0I,KAEArS,EAAA0N,YAAA7kB,EAAA8gB,aAAA+D,YACA1N,EAAA6lB,WAAAh9B,EAAA8gB,aAAAkc,WAGAh9B,EAAA8gB,aAAAqP,OAAAoY,aAAApxB,EAAA84B,oBAAAjvC,EAAA+7B,WAAA98B,EAAAmO,OAAAK,OACAzO,EAAA8gB,aAAAqP,OAAAsY,eAAAtxB,EAAA84B,mBAEAjvC,EAAAkvC,kBAAA52B,QAAA,SAAA62B,GACA,GAAAC,IACAzxB,WAAAwxB,EAAA/nC,GACAwU,KAAAuzB,EAAAvzB,KACAmE,WAAA/gB,EAAA8gB,aAAAjZ,WACAuX,kBAAA+wB,EAAA1H,cACA5nB,eAAA,EACA/B,KAAAqxB,EAAArxB,KACAE,eAAA,GAAA5C,MAAA+zB,EAAAE,aAAA9sB,eAAA,SAAAC,IAAA,UAAAC,MAAA,UAAAC,KAAA,UAAAC,KAAA,UAAAC,OAAA,UAAAC,QAAA,IAEA1M,GAAAvC,UAAA6J,UAAArI,KAAAg6B,KAGApwC,EAAA8gB,aAAAlM,UAAA6J,UAAAtH,EAAAvC,UAAA6J,UACAtH,EAAAvC,UAAA6J,UAAAhgB,OAAA,GACA0Y,EAAAuK,sBAGAvK,EAAAvC,UAAA5T,EAAA+uC,aAEA54B,EAAAswB,aACAtwB,EAAAg4B,+BACAh4B,EAAA8U,gCACAhS,SAAAhK,MAAAkH,EAAAtC,QAAAyzB,aAAAnxB,EAAAwS,UAAAxS,EAAA1U,UAGA0U,EAAAtC,QAAAkQ,kBAAA,EAAA,mBAKA5N,GAAAm5B,kBAAA,SAAA7f,EAAA8f,GAGA,IAAAp5B,EAAA84B,mBAAA,CAIA,GAAA3mB,GACAiF,CAEA,QAAAkC,GACA,IAAA0hB,GACA7oB,EAAArpB,EAAAgN,eAAAG,eACAmhB,EAAAtuB,EAAAiB,IAAAmF,4BACA8Q,EAAAm7B,yBAAA,CACA,MAEA,KAAAF,GACA9oB,EAAArpB,EAAAgN,eAAAxC,aACA8jB,EAAAtuB,EAAAiB,IAAAoF,0BACA6Q,EAAAo7B,uBAAA,CACA,MAEA,KAAAF,GACA/oB,EAAArpB,EAAAgN,eAAAI,cACAkhB,EAAAtuB,EAAAiB,IAAAqF,2BACA4Q,EAAAq7B,wBAAA,CACA,MAEA,KAAAhD,GACAlmB,EAAArpB,EAAAgN,eAAAK,oBACAihB,EAAAtuB,EAAAiB,IAAAsF,iCACA2Q,EAAAy5B,8BAAA,EAIA5wC,EAAAguC,oBAAA,EAEAhuC,EAAA8kB,2BAAAwE,EAAA,KAAAnS,EAAAtP,WAAA7H,EAAAG,mBACAE,KAAA,SAAAW,GAEAmW,EAAAm7B,yBAAA,EACAn7B,EAAAo7B,uBAAA,EACAp7B,EAAAq7B,wBAAA,EACAr7B,EAAAy5B,8BAAA,EAEA5vC,GACAhB,EAAA8gB,aAAA+vB,WAAA,KACA7wC,EAAA8gB,aAAAwI,SAAAtoB,EAAAsoB,SACAtpB,EAAA8gB,aAAAyI,cAAAvoB,EAAAuoB,cACAvpB,EAAA8gB,aAAA0I,KAAAxoB,EAAAwoB,KACAxpB,EAAA8gB,aAAAlM,aACA5U,EAAA8gB,aAAAgwB,SAAA7wC,EAAAgO,eAAAC,MACAlO,EAAA8gB,aAAAiwB,aAAA,QACA/wC,EAAA8gB,aAAAkwB,SAAA,EACAhxC,EAAA8gB,aAAAmwB,aAAA,GACAjxC,EAAA8gB,aAAAowB,iBAAA,EACAlxC,EAAAomB,oBACApmB,EAAAwmB,WAAAxlB,EAAAwlB,WACArP,EAAAqP,WAAAxmB,EAAAwmB,WACAxmB,EAAA+9B,eAAA/8B,EAAAwlB,WAAA8C,EAAAtoB,EAAAuoB,cAAAvoB,EAAAwoB,MAEAxpB,EAAAihB,kBAAA,kCAAA,SAAAsvB,EAAAA,GACAxwC,EAAAU,KAAA8tB,IAEApX,EAAAtC,QAAAkQ,kBAAA,EAAA,kBAEA,SAAA/jB,GACAmW,EAAAtC,QAAAkQ,kBAAA,EAAA,qBAKA5N,EAAAg6B,mBAAA,SAAA7nB,EAAAunB,GACA,GAAAvnB,EACAnS,EAAAm7B,yBAAA,EAEA,GAAAhpB,EACAnS,EAAAo7B,uBAAA,EAEA,GAAAjpB,EACAnS,EAAAq7B,wBAAA,EAEA,GAAAlpB,IACAnS,EAAAy5B,8BAAA,GAGA5wC,EAAAoxC,6BAAAP,EAAA5wC,EAAA6M,aAAAC,SACA1M,KAAA,SAAAigB,GACA,GAAAgJ,EACAnS,EAAAm7B,yBAAA,EAEA,GAAAhpB,EACAnS,EAAAo7B,uBAAA,EAEA,GAAAjpB,EACAnS,EAAAq7B,wBAAA,EAEA,GAAAlpB,IACAnS,EAAAy5B,8BAAA,EAGA,IAAA5vC,GAAAsf,EAAAtf,IACA,IAAAA,EAwBA,OAtBAhB,EAAA8gB,aAAAqP,OAAAnvB,EAAAmvB,OAEAnwB,EAAA8gB,aAAAP,OAAAvf,EAAA+7B,SAEA/8B,EAAA8gB,aAAA+D,YAAA7jB,EAAAo7B,IACAp8B,EAAA8gB,aAAAkc,WAAAh8B,EAAAi8B,kBAEAj9B,EAAA8gB,aAAA+vB,WAAAA,EACA7wC,EAAA8gB,aAAAwI,SAAAtoB,EAAAsoB,SACAtpB,EAAA8gB,aAAAyI,cAAAvoB,EAAA8uC,UACA9vC,EAAA8gB,aAAA0I,KAAAxoB,EAAAwoB,KACAxpB,EAAA8gB,aAAAmB,gBAAAjhB,EAAAihB,gBACAjiB,EAAAomB,oBACApmB,EAAAwmB,WAAAxlB,EAAAwlB,WAAAA,WACArP,EAAAqP,WAAAxmB,EAAAwmB,WACAxmB,EAAA+9B,eAAA/8B,EAAAwlB,WAAAA,WAAA8C,EAAAtoB,EAAA8uC,UAAA9uC,EAAAwoB,MAEAxpB,EAAAguC,mBAAAhtC,EAAA+7B,WAAA98B,EAAAgO,eAAAE,WAAAgJ,EAAA84B,sBAAA,EAEAjwC,EAAA8gB,aAAAlM,UAAA5T,EAAA+uC,aACA54B,EAAAvC,UAAA5U,EAAA8gB,aAAAlM,UAEA0U,GACA,IAAArpB,GAAAgN,eAAAG,eACApN,EAAAihB,kBAAA,kCAAA,kCAAA,6BACAlhB,EAAAU,KAAAR,EAAAiB,IAAAmF,4BACA,MACA,KAAApG,GAAAgN,eAAAxC,aACAzK,EAAAihB,kBAAA,kCAAA,+BAAA,0BACAlhB,EAAAU,KAAAR,EAAAiB,IAAAoF,0BACA,MACA,KAAArG,GAAAgN,eAAAI,cACArN,EAAAihB,kBAAA,kCAAA,gCAAA,2BACAlhB,EAAAU,KAAAR,EAAAiB,IAAAqF,2BACA,MACA,KAAAtG,GAAAgN,eAAAK,oBACAtN,EAAAihB,kBAAA,kCAAA,uCAAA,kCACAlhB,EAAAU,KAAAR,EAAAiB,IAAAsF,sCAIA2Q,GAAAtC,QAAAkQ,kBAAA,EAAA,oBAKA5N,EAAAo6B,uBAAA,WACAp6B,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAA,KAAA,KAAA,KAAA,UAEA0U,EAAAqT,SAAA,KAAA,aAAA,YAAA,EAAA,EAAA,QAIArT,EAAA8N,UAAA,EACA9N,EAAAm6B,wBAAAjxC,KAAA,WACAN,EAAAU,KAAAR,EAAAiB,IAAAC,oBALAgW,EAAAs7B,kBAWAt7B,EAAA2X,mBAIA3X,EAAAm6B,sBAAA,WACA,MAAAtxC,GAAAsxC,wBACAjxC,KAAA,SAAAigB,GACA,MAAAA,GAAAtf,KACA,IAAAsf,EAAAtf,KAAAuf,QAEAvgB,EAAAihB,kBAAA,kBAAA9J,EAAA1U,QAAA,+CAAA,wDACA0U,EAAAsN,iBAAAxlB,QAAAylB,KAAAvN,EAAAvC,WACAuC,EAAAu4B,2BAAA,EACAv4B,EAAAtC,QAAAgL,UAAA,4BAAA+B,SAEA5hB,EAAAihB,kBAAA,gCAAA9J,EAAA1U,QAAA,gDAAA,qDACA0U,EAAAtC,QAAAgL,UAAA,4BAAA+B,QAIAzK,EAAAtC,QAAAkQ,kBAAA,EAAA,gBAAA,MAAA,IAEA,SAAAzE,GAEA,MADAtgB,GAAAihB,kBAAA,gCAAA9J,EAAA1U,QAAA,gDAAA,qDACA0U,EAAAtC,QAAAgL,UAAA,4BAAA+B,SAnBA5hB,WAqBA,WACAmX,EAAA8N,UAAA,KAOA9N,EAAAiX,oCAAA,WACA,MAAAjX,GAAAu4B,2BACA,EAGAv4B,EAAAqT,SAAA,KAAA,aAAA,YAAA,EAAA,EAAA,QAGArT,EAAAs7B,gBAAA,WAEAt7B,EAAAqT,SAAA,KAAA,aAAA,YAAA,EAAA,EAAA,OAGArT,EAAAtC,QAAAgL,UAAA,wBAAA+B,OAAAvhB,KACA,SAAAW,GACA,oBAAAA,EAAA4gB,OACAzK,EAAAm6B,wBAAAjxC,KAAA,WACAN,EAAAU,KAAAR,EAAAiB,IAAAC,oBAIAgW,EAAAu4B,2BAAA,EACA3vC,EAAAU,KAAAR,EAAAiB,IAAAC,oBAXApB,EAAAU,KAAAR,EAAAiB,IAAAC,kBAiBAgW,EAAAkO,mBAAA,WACAlO,EAAAs7B,mBAGA9C,UClVA,WAEA,GAAAp1B,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WAAA,0BAAA,SAAA,QAAA,cAAA,eAAA,kBAAA,oBAAA,OAAA,YAAA,eAAA,UAAA,gBAAA,WAAA,aAAA,YAAA,SAAA2S,EAAAwG,EAAA0G,EAAArkB,EAAAE,EAAA0d,EAAAE,EAAA/d,EAAAge,EAAAC,EAAAC,EAAAxL,EAAA/S,EAAAO,GAMA,GAHAokB,EAAA,sBAAAlN,OAAAA,IACAkN,EAAA,sBAAAlN,OAAAA,IAEArZ,OAAAkH,SAAAoV,KAAA1Z,QAAA,6BAAA,GAAA;AACA,GAAA5C,OAAAkH,SAAAoV,KAAA1Z,QAAA,QAAA,GAEA,IAAA,GAAAskC,GAAAhlC,EAAAwmB,WAAAoH,WAAA,aAAAnvB,OAAA,EAAAumC,GAAA,EAAAA,IACA,wBAAAhlC,EAAAwmB,WAAAoH,WAAA,aAAAoX,GAAAl5B,MACA9L,EAAAwmB,WAAAoH,WAAA,aAAA5B,OAAAgZ,EAAA,OAKA,KAAA,GAAA3nB,GAAArd,EAAAwmB,WAAAoH,WAAA,aAAAnvB,OAAA,EAAA4e,GAAA,EAAAA,IACA,gDAAArd,EAAAwmB,WAAAoH,WAAA,aAAAvQ,GAAAvR,MACA9L,EAAAwmB,WAAAoH,WAAA,aAAA5B,OAAA3O,EAAA,EAIAlG,GAAAqP,WAAAoH,WAAA,aAAA5tB,EAAAwmB,WAAAoH,WAAA,aAIA5tB,EAAA8kB,2BAAA7kB,EAAAgN,eAAAC,SAAAiK,EAAAoS,cAAA,KAAAvpB,EAAAG,mBACAE,KAAA,SAAAW,GACAmW,EAAA8U,gCACA9U,EAAAwV,uBACA1S,SAAAhK,MAAAkH,EAAAtC,QAAAyzB,aAAAnxB,EAAAwS,UAAAxS,EAAA1U,WAIAzC,EAAA8gB,aAAAqP,QACAoY,YAAAroC,EAAA2pB,4BACA2e,aAAA,EACAC,cAAAvoC,EAAA2pB,6BAIA1S,EAAAgZ,OAAAnwB,EAAA8gB,aAAAqP,OACAhZ,EAAA4J,WAAA/gB,EAAA8gB,aAAAC,WACA5J,EAAA0N,YAAA7kB,EAAA8gB,aAAA+D,YACA1N,EAAAoJ,OAAAvgB,EAAA8gB,aAAAP,OACApJ,EAAA6lB,WAAAh9B,EAAA8gB,aAAAkc,WACA7lB,EAAA2O,aAAA9lB,EAAA8gB,aAAAgF,aAAAmI,OAAAjuB,EAAA8gB,aAAAgF,cAAAqI,OAAAhX,EAAAlX,UAAAsF,eAAA,KACA4R,EAAA4O,cAAA/lB,EAAA8gB,aAAAiF,cAAAkI,OAAAjuB,EAAA8gB,aAAAiF,eAAAoI,OAAAhX,EAAAlX,UAAAsF,eAAA,KACA4R,EAAAmS,SAAArpB,EAAAgN,eAAAC,SACAiK,EAAAqS,KAAAxpB,EAAA8gB,aAAA0I,KAEArS,EAAAjV,aAAAjC,EAAA6M,aAAAC,QAIAoK,EAAAu7B,wBAAA,SAAA3pB,EAAAC,GAEA,GACA2pB,IADAx7B,EAAAkT,gBAAA,KAAA,YAAA,iBAAA,EAAA,EAAA,OACAlT,EAAAkT,gBAAA,KAAA,SAAA,iBAAA,EAAA,EAAA,QACAuoB,EAAAz7B,EAAAkT,gBAAA,KAAA,gBAAA,iBAAA,EAAA,EAAA,MAGArqB,GAAAsqC,yBAAAqI,GAAAC,KAEAz7B,EAAAsN,iBAAA,QACAtN,EAAAsN,iBAAA,SACAkuB,IAAAx7B,EAAAsN,iBAAA,OAAA,GAAA,eAAA,GAAA,QACAmuB,IAAAz7B,EAAAsN,iBAAA,OAAA,GAAA,eAAA,GAAA,gBAEAtN,EAAA9E,MAAA0W,GAKA5R,EAAA9E,MAAA0W,IAMA5R,EAAA07B,aAAA,SAAAxH,GAEA,MAAAl0B,GAAAsX,0BAIAtX,EAAAm0B,uBAAA,kBACAn0B,EAAAmO,kBAAA,GAAAnO,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAA,KAAA,KAAA,KAAA,UAEA0U,EAAAhX,gBACAlB,QAAAovB,OAAAlX,EAAAsN,iBAAAtN,EAAAvC,WAKAuC,EAAAtC,QAAAgL,UAAA,4BAAAgF,YAAA1N,EAAA0N,cAJAqlB,EAAA/yB,EAAAjV,eAQAlC,EAAAiyB,YAAAlyB,EAAA6oB,OAAA4F,MAAA,GACAzuB,EAAAU,KAAAR,EAAAiB,IAAAiG,YAIAgQ,EAAA2X,kBAIA,MA1BA,QA8BA3X,EAAAqyB,eAAA,WACAryB,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAA,KAAA,KAAA,KAAA,WACA0U,EAAAmyB,yBAAA,sBAGAtpC,EAAA8gB,aAAAyoB,gBAAApyB,EAAAkT,gBAAA,KAAA,YAAA,UAAA,EAAA,GAEAlT,EAAA8N,UAAA,EAEAjlB,EAAAwpC,eAAAryB,EAAAjV,cACA7B,KAAA,SAAAigB,GACAA,EAAAtf,MAAA,GAAAsf,EAAAtf,KAAAuf,OACApJ,EAAAtC,QAAAgL,UAAA,kBAAAqC,cAAA5B,EAAAtf,KAAAkhB,gBAEA5B,EAAAtf,MAAAsf,EAAAtf,KAAAoH,IACApI,EAAAihB,kBAAA,oBAAA9J,EAAA1U,QAAA,0BAAA,mCAEA0U,EAAAsyB,2BAAAnpB,EAAAtf,MAEAmW,EAAAgb,gBAEAhb,EAAAtC,QAAAkQ,kBAAA,EAAA,kBAGA,SAAAzE,GACAnJ,EAAAtC,QAAAgL,UAAA,eACA7f,EAAAihB,kBAAA,qCAAA9J,EAAA1U,QAAA,0BAAA,+BAjBAzC,WAmBA,WACAmX,EAAA8N,UAAA,KAGA9N,EAAA6Z,oBAKA7Z,EAAAgoB,YAAA,SAAAhrB,GACAnU,EAAAihB,kBAAA,0BAAA9J,EAAA1U,QAAA,qBAAA,yBAEA0U,EAAA8S,gBAAA9V,IAAA,EACAnU,EAAA8yC,gBAAA37B,EAAA4J,YACA1gB,KAAA,SAAAigB,GACA,GAAAtf,GAAAsf,GAAAA,EAAAtf,IACA,KACA,GAAA6d,GAAA,GAAA6D,OAAA1hB,IAAAkP,KAAA,oBAAA0M,KAAA5c,EAAA8gB,aAAA+D,aAIAlC,QAAA9D,EAAA7e,EAAA8gB,aAAA+D,YAAA,QAEA,MAAAjC,GACAzL,EAAAtC,QAAAgL,UAAA,oBAEA1I,EAAA8S,gBAAA9V,IAAA,GACA,WACAgD,EAAAtC,QAAAgL,UAAA,oBACA1I,EAAA8S,gBAAA9V,IAAA,KAKAgD,EAAAsyB,2BAAA,SAAAnpB,GAEAtgB,EAAA8gB,aAAAC,WAAAT,EAAAlY,GACApI,EAAA8gB,aAAA+D,YAAAvE,EAAA8b,IACAp8B,EAAA8gB,aAAAmB,gBAAA3B,EAAAwpB,yBACA9pC,EAAA8gB,aAAAgF,aAAAxF,EAAAwF,aACA9lB,EAAA8gB,aAAAiF,cAAAzF,EAAAyF,cACA/lB,EAAA8gB,aAAAP,OAAAD,EAAAypB,eACA/pC,EAAA8gB,aAAAkc,WAAA1c,EAAA0pB,mBAGA7yB,EAAAsN,iBAAAxlB,QAAAylB,KAAAvN,EAAAvC,WAEAuC,EAAA4J,WAAA/gB,EAAA8gB,aAAAC,WACA5J,EAAA0N,YAAA7kB,EAAA8gB,aAAA+D,YACA1N,EAAA8K,gBAAAjiB,EAAA8gB,aAAAmB,gBACA9K,EAAA2O,aAAA9lB,EAAA8gB,aAAAgF,aAAAmI,OAAAjuB,EAAA8gB,aAAAgF,cAAAqI,OAAAhX,EAAAlX,UAAAsF,eAAA,KACA4R,EAAA4O,cAAA/lB,EAAA8gB,aAAAiF,cAAAkI,OAAAjuB,EAAA8gB,aAAAiF,eAAAoI,OAAAhX,EAAAlX,UAAAsF,eAAA,KACA4R,EAAAoJ,OAAAvgB,EAAA8gB,aAAAP,OACApJ,EAAA6lB,WAAAh9B,EAAA8gB,aAAAkc,WACA7lB,EAAAqS,KAAAxpB,EAAA8gB,aAAA0I,KAEAlJ,EAAA2pB,YAAA3pB,EAAA2pB,WAAAzjB,aAEAxmB,EAAAwmB,WAAAlG,EAAA2pB,WAAAzjB,WACArP,EAAAqP,WAAAlG,EAAA2pB,WAAAzjB,WAEAxmB,EAAA+9B,eAAAzd,EAAA2pB,WAAAzjB,WAAAvmB,EAAAgN,eAAAC,SAAAoT,EAAA2pB,WAAA1gB,cAAAjJ,EAAA2pB,WAAAzgB,OASA,IAAA0gB,GAAA,SAAAhoC,GAEAiV,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAA,KAAA,KAAA,KAAA,YACA0U,EAAA8N,UAAA,EACAjlB,EAAAkqC,2BAAAhoC,GACA7B,KAAA,SAAAigB,GACAA,EAAAtf,MAAA,GAAAsf,EAAAtf,KAAAuf,OACApJ,EAAAtC,QAAAgL,UAAA,kBACAqC,cAAA5B,EAAAtf,KAAAkhB,gBAEA5B,EAAAtf,MAAAsf,EAAAtf,KAAAoH,IACApI,EAAAihB,kBAAA,kBAAA9J,EAAA1U,QAAA,sCAAA,+BAEA0U,EAAAsyB,2BAAAnpB,EAAAtf,MACAmW,EAAAtC,QAAAgL,UAAA,uBAEAgF,YAAAvE,EAAAtf,KAAAo7B,IACA+N,cAAAhzB,EAAA6lB,WACAA,WAAA,qBAEAoN,OAAA/pC,KAAA,WACAX,EAAAgD,qBAAA,EACAyU,EAAAs7B,qBAGAt7B,EAAAtC,QAAAkQ,kBAAA,EAAA,kBAGA,SAAAzE,GACAnJ,EAAAtC,QAAAgL,UAAA,aACA7f,EAAAihB,kBAAA,gCAAA9J,EAAA1U,QACA,sCACA,6BA5BAzC,WA8BA,WACAmX,EAAA8N,UAAA,KAaA9N,GAAA6c,gBAAA,SAAAhgB,GACAmD,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAAuR,EAAA,KAAA,KAAA,UACAmD,EAAA47B,gBAAA57B,EAAA1U,QAAAuR,KAEAmD,EAAAsc,iBAAAzf,EAAA/T,EAAAmL,mBAAAG,SAGA4L,EAAA4S,eAAA/V,GAAA/U,QAAAylB,KAAAvN,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,IAGAmD,EAAAtC,QAAA/B,MAAA,qBAIAqE,EAAA2X,mBAKA3X,EAAA+c,qBAAA,SAAAlgB,GACAmD,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAAuR,EAAA,KAAA,KAAA,UACAmD,EAAA47B,gBAAA57B,EAAA1U,QAAAuR,KACAmD,EAAAsc,iBAAAzf,EAAA/T,EAAAmL,mBAAAG,SAGA4L,EAAA4S,eAAA/V,GAAA/U,QAAAylB,KAAAvN,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,IAGAmD,EAAAtC,QAAA/B,MAAA,YAAAkB,IAIAmD,EAAA2X,mBAMA3X,EAAA47B,gBAAA,SAAAtwC,EAAAuR,GACA,GAAAg/B,GAAA,WAAAvwC,GAAA,kBAAAA,EACAwwC,GAAA,CACA,IAAAD,EAAA,CACA,GAAA,WAAAvwC,GAAA0U,EAAA+b,iBAAA/b,EAAAqN,QAAA,EAMA,IAAA,GAJA0uB,GAAA/7B,EAAAvC,UAAAuC,EAAAqN,QACA2uB,EAAAh8B,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAA,QAAA,GAAAo/B,oBAAAn7B,OACAo7B,EAAAl8B,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAA,QAAA,GAAAs/B,YAAAr7B,OACAs7B,EAAAp8B,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAA,QAAA,GAAAw/B,MAAAv7B,OACA0D,EAAA,EAAAA,EAAAu3B,EAAAz0C,OAAAkd,IACAA,IAAA3H,GACAm/B,EAAA3wB,eAAA0wB,EAAAv3B,GAAA,QAAA,GAAAy3B,oBAAA5wB,cAAAvK,QAAAo7B,EAAA7wB,eAAA0wB,EAAAv3B,GAAA,QAAA,GAAA23B,YAAA9wB,cAAAvK,QAAAs7B,GAAAL,EAAAv3B,GAAA,QAAA,GAAA63B,MAAAv7B,SACAd,EAAAtC,QAAAgL,UAAA,oBACAozB,GAAA,EAMA,IAAA,kBAAAxwC,GAAA0U,EAAA+b,iBAAA/b,EAAAqN,QAAA,EAIA,IAAA,GAHA0uB,GAAA/7B,EAAAvC,UAAAuC,EAAAqN,QACA2uB,EAAAh8B,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAA,eAAA,GAAAy/B,oBAAAx7B,OACAo7B,EAAAl8B,EAAAvC,UAAAuC,EAAAqN,QAAAxQ,GAAA,eAAA,GAAA0/B,YAAAz7B,OACA0D,EAAA,EAAAA,EAAAu3B,EAAAz0C,OAAA,EAAAkd,IACAA,IAAA3H,GACAm/B,EAAA3wB,eAAA0wB,EAAAv3B,GAAA,eAAA,GAAA83B,oBAAAjxB,cAAAvK,QAAAo7B,EAAA7wB,eAAA0wB,EAAAv3B,GAAA,eAAA,GAAA+3B,YAAAlxB,cAAAvK,SACAd,EAAAtC,QAAAgL,UAAA,kBACAozB,GAAA,GAOA,MAAAA,IAGA97B,EAAAkO,mBAAA,WACAlO,EAAAw8B,sBAGAx8B,EAAAw8B,mBAAA,WAEA3zC,EAAAsqC,wBAEAnzB,EAAAoJ,OAAA,EAEApJ,EAAAy8B,wBAGA30C,QAAAovB,OAAAlX,EAAAsN,iBAAAtN,EAAAvC,WAgBAuC,EAAAy8B,wBAbAz8B,EAAAtC,QAAAgL,UAAA,sCAAA+B,OACAvhB,KAAA,SAAAW,GACA,oBAAAA,EAAA4gB,QAEAliB,EAAAgD,qBAAA,EACAwnC,EAAA/yB,EAAAjV,eAGAiV,EAAAs7B,oBAaAt7B,EAAAtC,QAAAgL,UAAA,wBAAA+B,OAAAvhB,KACA,SAAAuhB,GAEAliB,EAAAgD,qBAAA,EACAyU,EAAAs7B,qBAKAt7B,EAAAs7B,gBAAA,WACA1yC,EAAAU,KAAAR,EAAAiB,IAAAkB,UAGA+U,EAAAy8B,sBAAA,WACA7zC,EAAAU,KAAAR,EAAAiB,IAAAC,wBCtYA,WAEA,GAAAoZ,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WAAA,+BACA,SAAA,QAAA,cAAA,eAAA,kBAAA,oBAAA,OAAA,YAAA,eAAA,UAAA,gBAAA,WAAA,aAAA,YACA,SAAA2S,EAAAwG,EAAA0G,EAAArkB,EAAAE,EAAA0d,EAAAE,EAAA/d,EAAAge,EAAAC,EAAAC,EAAAxL,EAAA/S,EAAAO,GAGAokB,EAAA,sBAAAlN,OAAAA,IACAkN,EAAA,sBAAAlN,OAAAA,EAAAjV,aAAAjC,EAAA6M,aAAAC,QAAAgU,WAAA/gB,EAAA8gB,aAAAC,aAIA/gB,EAAA8kB,2BAAA7kB,EAAAgN,eAAAI,cAAA8J,EAAAoS,cAAA,MAAA,GACAlpB,KAAA,SAAAW,GACAmW,EAAA8U,gCACA9U,EAAAwV,uBACAxV,EAAAmO,eAAAtlB,EAAAguC,sBAAA,GAAA72B,EAAA1C,KAAAqV,cAAA,EAEA7P,SAAAhK,MAAAkH,EAAAtC,QAAAyzB,aAAAnxB,EAAAwS,UAAAxS,EAAA1U,WAGA0U,EAAAoJ,OAAAvgB,EAAA8gB,aAAAP,OACApJ,EAAA4J,WAAA/gB,EAAA8gB,aAAAC,WACA5J,EAAA0N,YAAA7kB,EAAA8gB,aAAA+D,YACA1N,EAAA6lB,WAAAh9B,EAAA8gB,aAAAkc,WACA7lB,EAAAmS,SAAArpB,EAAAgN,eAAAI,cAEA8J,EAAAs6B,kBAAA,WAEAt6B,EAAAmyB,yBAAA,uBACAnyB,EAAA6N,iBAAA7N,EAAAjV,cAAA7B,KAAA,WAEA8W,EAAAwN,8BAKAxN,EAAAy6B,oBAAA,WAEAz6B,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAA,KAAA,KAAA,KAAA,WACA0U,EAAAmyB,yBAAA,2BACAnyB,EAAAgO,mBAAAhO,EAAAjV,cAAA7B,KAAA,WACA8W,EAAAwN,8BAIAxN,EAAA6Z,oBAIA7Z,EAAAgJ,OAAA,WAEAhJ,EAAAkO,4BCvDA,WAEA,GAAA9K,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WAAA,8BACA,SAAA,QAAA,cAAA,eAAA,kBAAA,oBAAA,OAAA,YAAA,eAAA,UAAA,gBAAA,WAAA,aAAA,YACA,SAAA2S,EAAAwG,EAAA0G,EAAArkB,EAAAE,EAAA0d,EAAAE,EAAA/d,EAAAge,EAAAC,EAAAC,EAAAxL,EAAA/S,EAAAO,GAGAokB,EAAA,sBAAAlN,OAAAA,IACAkN,EAAA,sBAAAlN,OAAAA,EAAAjV,aAAAjC,EAAA6M,aAAAC,QAAAgU,WAAA/gB,EAAA8gB,aAAAC,aAIA/gB,EAAA8kB,2BAAA7kB,EAAAgN,eAAAxC,aAAA0M,EAAAoS,cAAA,MAAA,GACAlpB,KAAA,SAAAW,GACAmW,EAAA8U,gCACA9U,EAAAwV,uBACAxV,EAAAmO,eAAAtlB,EAAAguC,sBAAA,GAAA72B,EAAA1C,KAAAqV,cAAA,EAEA7P,SAAAhK,MAAAkH,EAAAtC,QAAAyzB,aAAAnxB,EAAAwS,UAAAxS,EAAA1U,WAGA0U,EAAAoJ,OAAAvgB,EAAA8gB,aAAAP,OACApJ,EAAA4J,WAAA/gB,EAAA8gB,aAAAC,WACA5J,EAAA0N,YAAA7kB,EAAA8gB,aAAA+D,YACA1N,EAAA6lB,WAAAh9B,EAAA8gB,aAAAkc,WACA7lB,EAAAmS,SAAArpB,EAAAgN,eAAAxC,aAEA0M,EAAA08B,iBAAA,WAGA18B,EAAAmyB,yBAAA,sBACAnyB,EAAA6N,iBAAA7N,EAAAjV,cAAA7B,KAAA,WAEA8W,EAAAwN,8BAKAxN,EAAA28B,mBAAA,WAEA38B,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAA,KAAA,KAAA,KAAA,WACA0U,EAAAmyB,yBAAA,0BACAnyB,EAAAgO,mBAAAhO,EAAAjV,cAAA7B,KAAA,WACA8W,EAAAwN,8BAIAxN,EAAA6Z,oBAIA7Z,EAAAgJ,OAAA,WAEAhJ,EAAAkO,4BCxDA,WAEA,GAAA9K,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WAAA,qCACA,SAAA,QAAA,cAAA,eAAA,kBAAA,oBAAA,OAAA,YAAA,eAAA,UAAA,gBAAA,WAAA,aAAA,YACA,SAAA2S,EAAAwG,EAAA0G,EAAArkB,EAAAE,EAAA0d,EAAAE,EAAA/d,EAAAge,EAAAC,EAAAC,EAAAxL,EAAA/S,EAAAO,GAGAokB,EAAA,sBAAAlN,OAAAA,IACAkN,EAAA,sBAAAlN,OAAAA,EAAAjV,aAAAjC,EAAA6M,aAAAC,QAAAgU,WAAA/gB,EAAA8gB,aAAAC,aAIA/gB,EAAA8kB,2BAAA7kB,EAAAgN,eAAAK,oBAAA6J,EAAAoS,cAAA,MAAA,GACAlpB,KAAA,SAAAW,GACAmW,EAAA8U,gCACA9U,EAAAwV,uBACAxV,EAAAmO,eAAAtlB,EAAAguC,sBAAA,GAAA72B,EAAA1C,KAAAqV,cAAA,EAEA7P,SAAAhK,MAAAkH,EAAAtC,QAAAyzB,aAAAnxB,EAAAwS,UAAAxS,EAAA1U,WAGA0U,EAAAoJ,OAAAvgB,EAAA8gB,aAAAP,OACApJ,EAAA4J,WAAA/gB,EAAA8gB,aAAAC,WACA5J,EAAA0N,YAAA7kB,EAAA8gB,aAAA+D,YACA1N,EAAA6lB,WAAAh9B,EAAA8gB,aAAAkc,WACA7lB,EAAAmS,SAAArpB,EAAAgN,eAAAK,oBAEA6J,EAAA06B,wBAAA,WAEA16B,EAAAmyB,yBAAA,8BACAnyB,EAAA6N,iBAAA7N,EAAAjV,cAAA7B,KAAA,WAEA8W,EAAAwN,8BAKAxN,EAAA26B,0BAAA,WAEA36B,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAA,KAAA,KAAA,KAAA,WACA0U,EAAAmyB,yBAAA,kCACAnyB,EAAAgO,mBAAAhO,EAAAjV,cAAA7B,KAAA,WACA8W,EAAAwN,8BAIAxN,EAAA6Z,oBAIA7Z,EAAAgJ,OAAA,WAEAhJ,EAAAkO,4BCvDA,WAEA,GAAA9K,GAAAtb,QAAAC,OAAA,UAGAqb,GAAA/V,WAAA,gCACA,SAAA,QAAA,cAAA,eAAA,kBAAA,oBAAA,OAAA,YAAA,eAAA,UAAA,gBAAA,WAAA,aAAA,YACA,SAAA2S,EAAAwG,EAAA0G,EAAArkB,EAAAE,EAAA0d,EAAAE,EAAA/d,EAAAge,EAAAC,EAAAC,EAAAxL,EAAA/S,EAAAO,GAGAokB,EAAA,sBAAAlN,OAAAA,IACAkN,EAAA,sBAAAlN,OAAAA,EAAAjV,aAAAjC,EAAA6M,aAAAC,QAAAgU,WAAA/gB,EAAA8gB,aAAAC,aAIA/gB,EAAA8kB,2BAAA7kB,EAAAgN,eAAAG,eAAA+J,EAAAoS,cAAA,MAAA,GACAlpB,KAAA,SAAAW,GACAmW,EAAA8U,gCACA9U,EAAAwV,uBACAxV,EAAAmO,eAAAtlB,EAAAguC,sBAAA,GAAA72B,EAAA1C,KAAAqV,cAAA,EAEA7P,SAAAhK,MAAAkH,EAAAtC,QAAAyzB,aAAAnxB,EAAAwS,UAAAxS,EAAA1U,WAGA0U,EAAAoJ,OAAAvgB,EAAA8gB,aAAAP,OACApJ,EAAA4J,WAAA/gB,EAAA8gB,aAAAC,WACA5J,EAAA0N,YAAA7kB,EAAA8gB,aAAA+D,YACA1N,EAAA6lB,WAAAh9B,EAAA8gB,aAAAkc,WACA7lB,EAAAmS,SAAArpB,EAAAgN,eAAAG,eAEA+J,EAAA48B,mBAAA,WAGA58B,EAAAmyB,yBAAA,yBACAnyB,EAAA6N,iBAAA7N,EAAAjV,cAAA7B,KAAA,WAEA8W,EAAAwN,8BAIAxN,EAAA68B,qBAAA,WAEA78B,EAAAyX,aAAAzX,EAAAwS,UAAAxS,EAAA1U,QAAA,KAAA,KAAA,KAAA,WACA0U,EAAAmyB,yBAAA,6BACAnyB,EAAAgO,mBAAAhO,EAAAjV,cAAA7B,KAAA,WACA8W,EAAAwN,8BAIAxN,EAAA6Z,oBAIA7Z,EAAAgJ,OAAA,WAEAhJ,EAAAkO,4BCvDA,WAEA,GAAA4uB,aAAA,SAAAt2B,MAAAD,QAAAI,KAAAsG,GAAA3R,SAAA/S,WAAAO,UAAAwB,2BA+7BA,QAAAyyC,wBAAAC,GAEA,GAAAtxC,GAAAuxC,gBAAA,IAAAA,gBAAA,IACAC,EAAAxxC,EAAA2jB,WAAAoH,WACA0mB,oBACAn3B,OAAA,SAAAwC,GAAA,MAAAA,GAAA7T,OAAAqoC,GACA,OAAAE,GAAA51C,OAAA,EACA41C,EAAA,GADA,OAn8BA,GAAAD,oBACArqB,kBACAL,kBAEA6qB,aAAA,KACAxP,2BACAiG,qCACAG,0BACAD,kCACAsJ,mBACAvJ,2BACAwJ,WAAA,GAKAt0C,gBAAA,WACA,MAAA,IAAArC,OAAAkH,SAAAC,KAAA6R,QAAA,KAAA,KACA,GAEA,KAAA,QAAAu6B,SAAApxC,UAAAiB,IAAAoB,WACAb,0BAAAnB,UAAAmB,0BAAAnB,SAAAH,qBAEArC,OAAAkH,SAAAC,KAAAvE,QAAA,iBAAA,GAAA5C,OAAAkH,SAAA0vC,WAGA15B,aAAA,WACA,MAAAvZ,2BAAAnB,UACAmB,0BAAAnB,SAAAq0C,SACAlzC,0BAAAnB,SAAAq0C,QAAA/3B,MAGAg4B,SAAA,WACA,MAAAnzC,2BAAAnB,UACAmB,0BAAAnB,SAAAq0C,SACAlzC,0BAAAnB,SAAAq0C,QAAAE,IACApzC,0BAAAnB,SAAAq0C,QAAAE,IAGA,MAIAnd,gBAAA,WACA,GAAAod,IAAA,EACAC,EAAArzC,eAAA4Y,QAAA,cAEA06B,EAAAtzC,eAAA4Y,QAAA,yBAKA,QAJA06B,EAAAC,WAAA,gBAAA,IAAAF,KACAD,GAAA,GAGAA,GAGAI,sBAAA,KACAC,QAAA,KACAC,oBAAA,EACAC,oBAAAp1C,UAAAuL,oBAAAC,KACA6pC,yBACA3P,UAAA,KACA4P,UAAA,KACAld,WAAA,KACAmd,WAAA,KAGA10B,cACAqP,OAAA,KACApP,WAAA,KACA8D,YAAA,KACAjQ,aACA0U,SAAA,KACAC,cAAA,KACAtH,gBAAA,KACA1B,OAAA,KACAyc,WAAA,KACAE,YAAA,KACAE,cAAA,KACAtX,aAAA,KACAC,cAAA,KACAyD,KAAA,KACA+f,gBAAA,KACAkM,kBAAA,KACAC,UAAA,KAGAxnB,aAAA,KACAve,mBAAA,KACA49B,mBAAA,KACA3sC,MAAA,WACA,MAAAtB,MAAAkqB,MAAAlqB,KAAAkqB,KAAAnkB,MAAA,UAEAswC,QAAA,SAAAC,GACA,MAAAt2C,MAAAsB,QAAAi1C,KAAA,SAAA3jC,GACA,MAAAA,KAAA0jC,MAKA7zC,0BAAA,WACA,MAAA5B,oBAAA21C,qBAGAxL,sBAAA,WACA,MAAAnqC,oBAAA41C,kBAGAA,eAAA,WACA,GAAAn1C,GAAAkgB,aAAAlgB,OACA,OAAAA,GAAAnC,OAAA,GAAAmC,EAAAi1C,KAAA,SAAA3jC,GACA,MAAAA,KAAAjS,UAAAgM,KAAAU,WAAAuF,IAAAjS,UAAAgM,KAAAE,aAIA6pC,aAAA,WACA,GAAAp1C,GAAAkgB,aAAAlgB,OACA,OAAA,IAAAA,EAAAnC,QAAAmC,EAAA,IAAAX,UAAAgM,KAAAE,WAGA2pC,kBAAA,WACA,GAAAl1C,GAAAkgB,aAAAlgB,OACA,OAAAA,GAAAnC,OAAA,GAAAqiB,aAAAlgB,QAAAq1C,MAAA,SAAA/jC,GACA,MAAAA,KAAAjS,UAAAgM,KAAAU,WAAAuF,IAAAjS,UAAAgM,KAAAE,aAIA+pC,eAAA,WACA,MAAAp1B,cAAA60B,QAAA11C,UAAAgM,KAAAU,YAGAwpC,yBAAA,SAAAC,GACA,MAAAA,IACAA,EAAA33C,OAAA,GACA23C,EAAAP,KAAA,SAAA3jC,GACA,MAAAA,KAAAjS,UAAAgM,KAAAU,aAIA0pC,0BAAA,SAAAD,GACA,MAAAA,IACAA,EAAA33C,OAAA,GACA23C,EAAAP,KAAA,SAAA3jC,GACA,MAAAA,KAAAjS,UAAAgM,KAAAY,kBAIAlM,wBAAA,SAAAy1C,GACA,MAAAA,IACAA,EAAA33C,OAAA,GACA23C,EAAAP,KAAA,SAAA3jC,GACA,MAAAA,KAAAjS,UAAAgM,KAAAI,gBACA6F,IAAAjS,UAAAgM,KAAAK,gBACA4F,IAAAjS,UAAAgM,KAAAM,iBACA2F,IAAAjS,UAAAgM,KAAAO,gBAIA3L,2BAAA,SAAAu1C,GACA,MAAAA,IACAA,EAAA33C,OAAA,GACA23C,EAAAP,KAAA,SAAA3jC,GACA,MAAAA,KAAAjS,UAAAgM,KAAAQ,mBACAyF,IAAAjS,UAAAgM,KAAAS,eAAAwF,IAAAjS,UAAAgM,KAAAW,uBAKA0pC,kBAAAlyB,GAAAmyB,OACAD,mBAAAhyC,SACA,IAKA6lB,uBALAmsB,kBAAAE,QAKA,SAAAC,IACA,SAAA96B,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GACAN,EAAA,sBAAAI,EAAAJ,EAAAI,GAAAJ,EAAAI,IAAA,YACAJ,EAAAI,GAAAG,EAAAP,EAAAI,GAAAG,OAAA9F,KAAA5X,YACAmd,EAAAI,GAAAI,EAAA,EAAA,GAAAC,MAAAJ,EAAAJ,EAAAS,cAAAR,GACAI,EAAAL,EAAAU,qBAAAT,GAAA,GAAAG,EAAAO,MAAA,EAAAP,EAAAQ,IAAAV,EAAAG,EAAAQ,WAAAC,aAAAV,EAAAC,IACAne,OAAAmc,SAAA,SAAA,gDAAA,MACA0C,GAAA,yBAAA,YAAArB,KAAA,IAAAC,KAAAtB,SAAAjV,SAAA0xC,SAAAz8B,SAAAjV,SAAA2xC,QAAAn0B,eACA7F,GAAA,yBAAA,YAAApB,KAAAtB,SAAAjV,SAAA0xC,SAAAz8B,SAAAjV,SAAA2xC,QAAAn0B,eACA7F,GAAA,yBAAA,YAAA1C,SAAAjV,SAAA0xC,SAAAz8B,SAAAjV,SAAA2xC,OAAA18B,SAAAjV,SAAAC,MAAAud,iBAIAvB,kBAAA,SAAAqjB,EAAA/G,EAAA/jB,GACAmD,GAAA,yBAAA,SACAI,cAAAunB,EACAtnB,YAAAugB,EACAtgB,WAAAzD,KAKAskB,iBAAA,SAAAxU,EAAAC,EAAAxI,EAAA61B,GAEA,GAAAC,IAAAvtB,SAAAA,EAAAC,cAAAA,EAAAxI,WAAAA,EAAA+1B,iBAAAx3C,KAAA41C,sBAAA6B,mBAAAz3C,KAAA61C,SAIA/vC,EAAAnF,UAAAiB,IAAAsG,gBACAovC,KACAxxC,EAAAnF,UAAAiB,IAAAuG,uBAEA,IAAAsc,GAAA3e,CACA,OAAAuY,QACArG,OAAA,OACAyM,IAAAA,EACA/iB,KAAA/B,QAAA+3C,OAAAH,GACAv4B,SAAA24B,eAAA,sBACA52C,KAAA,SAAAigB,GAGA,MAFAhhB,MAAAknB,WAAAlG,EAAAtf,KAAAwlB,WACAlnB,KAAAknB,WAAAlG,EAAAtf,KAAAwlB,WAAA8C,UAAAhJ,EAAAtf,KAAAwlB,WACAlG,EAAAtf,QAIA8jB,2BAAA,SAAAwE,EAAAC,EAAAxI,EAAA61B,GACA,GAAAM,IAAA,GAAA96B,OAAAya,WACA,wDACAvN,EAAA,qBAAAC,EAAA,kBAAAxI,EAAA,kBAAA61B,EAAA,MACAO,SAAAC,IAAAF,EAAA,aACA,IAAAG,GAAAjzB,GAAAmyB,QACA1zC,EAAAvD,KAAA0+B,oBAAA1U,EACA,IAAAzmB,EACAs0C,QAAAC,IAAAF,EAAA,0CACAG,EAAA/yC,QAAAzB,OACA,CACAs0C,QAAAC,IAAAF,EAAA,wDACA,IAAAI,GAAAh4C,IACAA,MAAAw+B,iBAAAxU,EAAAC,EAAAxI,EAAA61B,GACAv2C,KAAA,SAAAigB,GACA62B,QAAAC,IAAAF,EAAA,6CACAI,EAAAvZ,eAAAzd,EAAAkG,WAAA8C,EAAAhJ,EAAAiJ,cAAAjJ,EAAAkJ,KACA,IAAA3mB,GAAAy0C,EAAAtZ,oBAAA1U,EACA+tB,GAAA/yC,QAAAzB,IACA,SAAA7B,GACAm2C,QAAAC,IAAAF,EAAA,oBAAAtgC,KAAAkU,UAAA9pB,GAAA,MACAq2C,EAAAE,OAAAv2C,KAGA,MAAAq2C,GAAAb,SAGAgB,gBAAA,WACA,GAAApyC,GAAAnF,UAAAiB,IAAAyG,mBAEAoc,EAAA3e,CACA,OAAAuY,QACArG,OAAA,OACAyM,IAAAA,EACAzF,SAAA24B,eAAA,uBAIA72C,6BAAA,WACA,GAAAi3C,GAAAjzB,GAAAmyB,QAEA1zC,EAAAvD,KAAAm4C,yBAAAn4C,KAAAs1C,WACA,IAAA/xC,EACAw0C,EAAA/yC,QAAAzB,OAEA,CACA,GAAAy0C,GAAAh4C,IACAA,MAAAk4C,kBACAn3C,KAAA,SAAAigB,GACAg3B,EAAAI,wBAAAp3B,EAAAtf,KACA,IAAA6B,GAAAy0C,EAAAG,0BACAJ,GAAA/yC,QAAAzB,IACA,SAAA7B,GACAq2C,EAAAE,OAAAv2C,KAIA,MAAAq2C,GAAAb,SAGAmB,6BAAA,WACA,GAAA5zB,GAAA9jB,UAAAiB,IAAAwG,+BACA,OAAAiW,QACArG,OAAA,OACAyM,IAAAA,IACA1jB,KAAA,SAAAigB,GACA,MAAA,IAAAlE,MAAAkE,EAAAtf,KAAA9C,UAIAuhC,qBAAA,SAAA53B,EAAAC,GACA,MAAA6V,QACArG,OAAA,OACAyM,IAAA9jB,UAAAiB,IAAA0G,wBAAAC,EAAAC,GACAwW,SAAA24B,eAAA,sBAEA52C,KAAA,SAAAigB,GACA,MAAAA,GAAAtf,QAIAw9B,aAAA,SAAAqY,GACA,MAAAl5B,QACArG,OAAA,OACAtW,KAAA/B,QAAA+3C,OAAAH,GACA9yB,IAAA9jB,UAAAiB,IAAAgH,gBACAoW,SAAA24B,eAAA,sBAEA52C,KAAA,SAAAigB,GACA,MAAAA,GAAAtf,QAIAw8B,gBAAA,SAAA31B,GACA,MAAA8V,QACArG,OAAA,OACAyM,IAAA9jB,UAAAiB,IAAAiH,mBAAAN,GACAyW,SAAA24B,eAAA,sBAEA52C,KAAA,SAAAigB,GACA,MAAAA,GAAAtf,QAIA6/B,qBAAA,SAAAh5B,GACA,MAAA8V,QACArG,OAAA,OACAyM,IAAA9jB,UAAAiB,IAAAoH,wBAAAT,GACAyW,SAAA24B,eAAA,sBAEA52C,KAAA,SAAAigB,GACA,MAAAA,GAAAtf,QAIAugC,iBAAA,SAAAsV,GACA,MAAAl5B,QACArG,OAAA,OACAtW,KAAA/B,QAAA+3C,OAAAH,GACA9yB,IAAA9jB,UAAAiB,IAAAqH,oBACA+V,SAAA24B,eAAA,sBAEA52C,KAAA,SAAAigB,GACA,MAAAA,GAAAtf,QAIAiiC,mBAAA,SAAA4T,GACA,MAAAl5B,QACArG,OAAA,OACAtW,KAAA/B,QAAA+3C,OAAAH,GACA9yB,IAAA9jB,UAAAiB,IAAAsH,sBACA8V,SAAA24B,eAAA,sBAEA52C,KAAA,SAAAigB,GACA,MAAAA,GAAAtf,QAIAs+B,eAAA,SAAAuX,GACA,MAAAl5B,QACArG,OAAA,OACAtW,KAAA/B,QAAA+3C,OAAAH,GACA9yB,IAAA9jB,UAAAiB,IAAAmH,kBACAiW,SAAA24B,eAAA,sBAEA52C,KAAA,SAAAigB,GACA,MAAAA,GAAAtf,QAKA6gB,eAAA,SAAAlD,GACA,GAAAoF,GAAA,EAOA,OALAA,GADA5jB,kBACAF,UAAAiB,IAAA4H,qBAEA7I,UAAAiB,IAAA2H,2BAGA8U,OACArG,OAAA,OACAyM,IAAAA,EACA/iB,KAAA/B,QAAA+3C,QAAAr4B,WAAAA,IACAL,SAAA24B,eAAA,uBAKA70B,aAAA,SAAAzD,GACA,GAAAoF,GAAA,EAOA,OALAA,GADA5jB,kBACAF,UAAAiB,IAAA0H,kBAEA3I,UAAAiB,IAAAyH,wBAGAgV,OACArG,OAAA,OACAyM,IAAAA,EACA/iB,KAAA/B,QAAA+3C,QAAAr4B,WAAAA,IACAL,SAAA24B,eAAA,oBACAW,aAAA,iBAIA9E,gBAAA,SAAA+E,GAEA,MAAAl6B,QACArG,OAAA,OACAyM,IAAA9jB,UAAAiB,IAAAwI,eAAAmuC,GACAv5B,SAAA24B,eAAA,oBACAW,aAAA,iBAIAjR,gBAAA,SAAAkR,GAEA,MAAAl6B,QACArG,OAAA,OACAyM,IAAA9jB,UAAAiB,IAAAyI,eAAAkuC,GACAv5B,SAAA24B,eAAA,oBACAW,aAAA,iBAKA3L,4BAAA,SAAA4L,GAEA,MAAAl6B,QACArG,OAAA,OACAyM,IAAA9jB,UAAAiB,IAAA0I,2BAAAiuC,GACAv5B,SAAA24B,eAAA,oBACAW,aAAA,iBAIA/N,8BAAA,SAAAgO,GACA,GAAAllC,GAAA1S,UAAAiB,IAAA2I,6BAAAguC,EAEA,OAAAl6B,QACArG,OAAA,OACAyM,IAAApR,EACA2L,SAAA24B,eAAA,oBACAW,aAAA,iBAKAnT,0BAAA,SAAAoT,GAEA,MAAAl6B,QACArG,OAAA,OACAyM,IAAA9jB,UAAAiB,IAAA4I,yBAAA+tC,GACAv5B,SAAA24B,eAAA,oBACAW,aAAA,iBAOA1N,2BAAA,SAAAhoC,aAAA6C,YAAA+iC,mBACA,GAAA/jB,KAAA9jB,UAAAiB,IAAA+G,iCAEA4uC,aACAiB,SAAA74C,QAAA+3C,OAAAl2B,aAAAlM,WACAmjC,SAAAj3B,aAAAwI,SACAxc,aAAA5K,aACA81C,gBAAAphC,KAAAkU,UAAAhK,aAAAyI,eACA0uB,IAAAn3B,aAAA+D,YACAqzB,GAAAp3B,aAAAC,WACAo3B,aAAAr3B,aAAAmB,gBACA+a,WAAAlc,aAAAkc,WACAj4B,YAAAA,YACA+iC,kBAAAA,kBAGA,OAAAnqB,QACArG,OAAA,OACAyM,IAAAA,IACA/iB,KAAA/B,QAAA+3C,OAAAH,aACAv4B,SAAA24B,eAAA,sBACA52C,KAAA,SAAAigB,UACA,GAAAA,UAAAA,SAAAtf,MAAAsf,SAAAtf,KAAAoH,GAAA,CACA,KAAA6rC,YACAnzB,aAAAC,WAAAT,SAAAtf,KAAAoH,GACA0Y,aAAA+D,YAAAvE,SAAAtf,KAAAo7B,IACAtb,aAAAmB,gBAAA3B,SAAAtf,KAAA8oC,wBAGA,OAAAxpB,cAMA2D,8BAAA,SAAAlf,GAEA,GAAAgf,GAAA,EAEAA,GADA5jB,kBACAF,UAAAiB,IAAA6H,oCAEA9I,UAAAiB,IAAA8H,yCAGA,IAAA6tC,IACAiB,SAAA74C,QAAA+3C,OAAAl2B,aAAAlM,WACAmjC,SAAAj3B,aAAAwI,SACA0uB,gBAAAphC,KAAAkU,UAAAhK,aAAAyI,eACA0uB,IAAAn3B,aAAA+D,YACAqzB,GAAAp3B,aAAAC,WACAo3B,aAAAr3B,aAAAmB,gBACA+a,WAAAlc,aAAAkc,WACAj4B,YAAAA,EAGA,OAAA4Y,QACArG,OAAA,OACAyM,IAAAA,EACA/iB,KAAA/B,QAAA+3C,OAAAH,GACAv4B,SAAA24B,eAAA,sBACA52C,KACA,SAAAigB,GAMA,MALAA,IAAAA,EAAAtf,MAAAsf,EAAAtf,KAAAoH,KACA0Y,aAAAC,WAAAT,EAAAtf,KAAAoH,GACA0Y,aAAA+D,YAAAvE,EAAAtf,KAAAo7B,IACAtb,aAAAmB,gBAAA3B,EAAAtf,KAAA8oC,0BAEAxpB,KAKAkpB,eAAA,SAAAtnC,aAAA6C,YAAA+iC,mBAGA3nC,kBACA4jB,IAAA9jB,UAAAiB,IAAA8G,mCAEA+b,IAAA9jB,UAAAiB,IAAA6G,oBAGA,IAAA8uC,cACAiB,SAAA74C,QAAA+3C,OAAAl2B,aAAAlM,WACA9H,aAAA5K,aACA61C,SAAAj3B,aAAAwI,SACA0uB,gBAAAphC,KAAAkU,UAAAhK,aAAAyI,eACA0uB,IAAAn3B,aAAA+D,YACAqzB,GAAAp3B,aAAAC,WACAo3B,aAAAr3B,aAAAmB,gBACA+a,WAAAlc,aAAAkc,WACAj4B,YAAAA,YACA+iC,kBAAAA,kBAGA,OAAAnqB,QACArG,OAAA,OACAyM,IAAAA,IACA/iB,KAAA/B,QAAA+3C,OAAAH,aACAv4B,SAAA24B,eAAA,sBACA52C,KACA,SAAAigB,UAGA,KAAA2zB,YACA3zB,UAAAA,SAAAtf,MAAAsf,SAAAtf,KAAAoH,KACA0Y,aAAAC,WAAAT,SAAAtf,KAAAoH,GACA0Y,aAAA+D,YAAAvE,SAAAtf,KAAAo7B,IACAtb,aAAAmB,gBAAA3B,SAAAtf,KAAA8oC,yBAGA,OAAAxpB,aAKA8wB,6BAAA,SAAAP,EAAAvQ,GACA,GAAAvc,GAAA9jB,UAAAiB,IAAAmI,gCACAwtC,GACAzuC,GAAAyoC,EACAvQ,eAAAA,EAEA,OAAA3iB,QACArG,OAAA,OACAyM,IAAAA,EACA/iB,KAAA/B,QAAA+3C,OAAAH,GACAv4B,SAAA24B,eAAA,uBAIAmB,qBAAA,SAAAl2C,GACA,GAAA6hB,GAAA9jB,UAAAiB,IAAAuI,4BACAotC,GACAoB,IAAAn3B,aAAA+D,YACAqzB,GAAAp3B,aAAAC,WACAjU,aAAA5K,EACAi2C,aAAAr3B,aAAAmB,gBAGA,OAAAtE,QACArG,OAAA,OACAyM,IAAAA,EACA/iB,KAAA61C,EACAv4B,SAAA24B,eAAA,uBAIA/xB,aAAA,SAAAhjB,GACA,GAAA6hB,GAAA9jB,UAAAiB,IAAAsI,mBACAqtC,GACAqB,GAAAp3B,aAAA+vB,WACAwH,WAAAv3B,aAAAC,WACAjU,aAAA5K,EACA41C,SAAA74C,QAAA+3C,OAAAl2B,aAAAlM,WACAmjC,SAAAj3B,aAAAwI,SACA0uB,gBAAAphC,KAAAkU,UAAAhK,aAAAyI,eACA+uB,kBAAA1hC,KAAAkU,UAAAhK,aAAA+uB,uBACAsI,aAAAr3B,aAAAmB,gBAGA,OAAAtE,QACArG,OAAA,OACAyM,IAAAA,EACA/iB,KAAA/B,QAAA+3C,OAAAH,GACAv4B,SAAA24B,eAAA,sBACA52C,KACA,SAAAigB,GACAQ,aAAA+vB,WAAAvwB,EAAAtf,KAAAoH,EAEA,IAAAivC,GAAAjzB,GAAAmyB,OAKA,OAJA6B,sBAAAl2C,GAAAk2C,WACA,WACAf,EAAA/yC,QAAAgc,KAEA+2B,EAAAb,WAKApxB,eAAA,SAAAljB,GACA,GAAA6hB,GAAA9jB,UAAAiB,IAAAqI,2BACAstC,GACAqB,GAAAp3B,aAAA+vB,WACAwH,WAAAv3B,aAAAC,WACAjU,aAAA5K,EACA41C,SAAA74C,QAAA+3C,OAAAl2B,aAAAlM,WACAmjC,SAAAj3B,aAAAwI,SACA0uB,gBAAAphC,KAAAkU,UAAAhK,aAAAyI,eACA+uB,kBAAA1hC,KAAAkU,UAAAhK,aAAA+uB,uBACAsI,aAAAr3B,aAAAmB,iBAGAs2B,EAAA56B,OACArG,OAAA,OACAyM,IAAAA,EACA/iB,KAAA/B,QAAA+3C,OAAAH,GACAv4B,SAAA24B,eAAA,qBAgBA,OAbAsB,GAAAl4C,KACA,SAAAigB,GACAQ,aAAA+vB,WAAAvwB,EAAAtf,KAAAoH,EAEA,IAAAivC,GAAAjzB,GAAAmyB,OAKA,OAJA6B,sBAAAl2C,GAAAk2C,WACA,WACAf,EAAA/yC,QAAAgc,KAEA+2B,EAAAb,UAIA+B,GAIA3I,oCAAA,SAAAtP,EAAAkY,GACA,GAAAz0B,GAAA9jB,UAAAiB,IAAAkI,uCAEAytC,GACAzuC,GAAA0Y,aAAAC,WACAuf,eAAAA,EACAmY,iCAAAD,EAEA,OAAA76B,QACArG,OAAA,OACAyM,IAAAA,EACA/iB,KAAA/B,QAAA+3C,OAAAH,GACAv4B,SAAA24B,eAAA,uBAIA3F,sBAAA,WACA,GAAAvtB,GAAA9jB,UAAAiB,IAAA+H,4BAEA4tC,GACAiB,SAAA74C,QAAA+3C,OAAAl2B,aAAAlM,WACAyjC,WAAAv3B,aAAAC,WAGA,OAAApD,QACArG,OAAA,OACAyM,IAAAA,EACA/iB,KAAA/B,QAAA+3C,OAAAH,GACAv4B,SAAA24B,eAAA,uBAKA9Y,iBAAA,SAAApd,EAAA23B,EAAAz2B,GACA,GAAA8B,GAAA9jB,UAAAiB,IAAAgI,uBACAlI,GACAq3C,WAAAt3B,EACA43B,iBAAAD,EACAE,gBAAA32B,EAAAA,EAAAnB,aAAAmB,gBAEA,OAAAtE,QACArG,OAAA,OACAyM,IAAAA,EACA/iB,KAAA4V,KAAAkU,UAAA9pB,GACAsd,SAAA24B,eAAA,uBAKA7K,mBAAA,SAAAyM,GAEA,GAAA90B,GAAA9jB,UAAAiB,IAAA8I,sBACAhJ,GACAq3C,WAAAv3B,aAAAjZ,WACAixC,aAAAD,EAGA,OAAAl7B,QACArG,OAAA,OACAyM,IAAAA,EACA/iB,KAAA4V,KAAAkU,UAAA9pB,GACAsd,SAAA24B,eAAA,uBAIA7H,iCAAA,SAAAyI,GACA,MAAAl6B,QACArG,OAAA,OACAyM,IAAA9jB,UAAAiB,IAAA6I,kCAAA8tC,GACAv5B,SAAA24B,eAAA,uBAWAryB,kBAAA,WACA9D,aAAAqP,OAAA,KACArP,aAAAC,WAAA,KACAD,aAAA+D,YAAA,KACA/D,aAAAjZ,WAAA,KACAiZ,aAAAsb,IAAA,KACAtb,aAAAoN,aAAA,KACApN,aAAAlM,UAAA,KACAkM,aAAAyI,cAAA,KACAzI,aAAAmB,gBAAA,KACAnB,aAAAP,OAAA,KACAO,aAAAkc,WAAA,KACAlc,aAAAoc,YAAA,KACApc,aAAAsc,cAAA,KACAtc,aAAAgF,aAAA,KACAhF,aAAAiF,cAAA,KACAjF,aAAA0I,KAAA,KACA1I,aAAAyoB,gBAAA,KACAzoB,aAAAyf,OAAA,KACAzf,aAAA20B,kBAAA,KACA30B,aAAAi4B,UAAA,MAKArb,wBAAA,SAAApd,GACA,GAAA04B,GAAA/5C,QAAAg6C,SAAA34B,GAEAoJ,IACA,KAAA,GAAAwvB,KAAAF,GACAtvB,EAAAtT,KAAA8iC,EAGA,OAAAxvB,IAIAsU,oBAAA,SAAA1U,GACA,GAAAzmB,GAAAvD,KAAA80C,gBAAA9qB,EACA,OAAAzmB,IACAvD,KAAAknB,WAAA3jB,EAAA2jB,WACAlnB,KAAAknB,WAAA8C,GAAAzmB,EAAA2jB,WACAlnB,KAAAwhB,aAAAwI,SAAAzmB,EAAAymB,SACAhqB,KAAAwhB,aAAAyI,cAAA1mB,EAAA0mB,cACAjqB,KAAAwhB,aAAA0I,KAAA3mB,EAAA2mB,KACAlqB,KAAA80C,gBAAA9qB,IAEA,MAIAyU,eAAA,SAAAvX,EAAA8C,EAAAC,EAAAC,GACAlqB,KAAAknB,WAAAA,EACAlnB,KAAAknB,WAAA8C,GAAA9C,EACAlnB,KAAAwhB,aAAAwI,SAAAA,EACAhqB,KAAAwhB,aAAAyI,cAAAA,EACAjqB,KAAAwhB,aAAA0I,KAAAA,EAGAlqB,KAAA80C,gBAAA9qB,IACA9C,WAAAA,EACA+C,cAAAA,EACAC,KAAAA,EACAF,SAAAA,IAIAmuB,yBAAA,WACA,GAAAn4C,KAAAs1C,WAAA,CACA,GAAA/xC,GAAAvD,KAAA80C,gBAAAQ,WACA,IAAA/xC,EACA,MAAAvD,MAAA80C,gBAAAQ,YAIA,MAAA,OAIA8C,wBAAA,SAAA12C,GACA1B,KAAAs1C,aACAt1C,KAAA80C,gBAAAQ,YAAA5zC,IAIA4Z,uBAAA,WACA9c,OAAAkH,SAAAoV,KAAA1Z,QAAA,MAAA,GACA5C,OAAAkH,SAAAoV,KAAAvc,MAAAs7C,mBAAA,OAGAr7C,OAAAkH,SAAAoV,KAAAvc,MAAAs7C,mBAAA,UAIAjS,qBAAA,WACA,MAAAvpB,QACArG,OAAA,OACAyM,IAAA9jB,UAAAiB,IAAA+I,2BACAqU,SAAA24B,eAAA,sBAEA52C,KAAA,SAAAigB,GACA,MAAAA,GAAAtf,QAIAsmC,wBAAA,SAAA/8B,GACA,MAAAoT,QACArG,OAAA,MACAyM,IAAA9jB,UAAAiB,IAAAoJ,8BAAAC,GACA+T,SAAA24B,eAAA,oBACAW,aAAA,gBAEAv3C,KAAA,SAAAigB,GACA,MAAAA,GAAAtf,QAKAmlC,eAAA,SAAAt+B,EAAAoa,GACA,GAAA8B,GAAA9jB,UAAAiB,IAAAgJ,qBACAlJ,GACAq3C,WAAAxwC,EACA+wC,gBAAA32B,EAAAA,EAAAnB,aAAAmB,gBAEA,OAAAtE,QACArG,OAAA,OACAyM,IAAAA,EACA/iB,KAAA4V,KAAAkU,UAAA9pB,GACAsd,SAAA24B,eAAA,uBAIArV,eAAA,SAAA/5B,EAAAoa,GACA,GAAA8B,GAAA9jB,UAAAiB,IAAAiJ,kBACAnJ,GACAq3C,WAAAxwC,EACA+wC,gBAAA32B,EAAAA,EAAAnB,aAAAmB,gBAEA,OAAAtE,QACArG,OAAA,SACAyM,IAAAA,EACA/iB,KAAA4V,KAAAkU,UAAA9pB,GACAsd,SAAA24B,eAAA,uBAIAnO,oBAAA,SAAAH,EAAAyQ,GAwBA,MAvBAhgC,UAAAuvB,GAAA,OAAAA,IAEAA,EAAA,YAAAyQ,EAAA,YAAA,GACAzQ,EAAA,WAAAyQ,EAAA,YAAA,GAGAzQ,EAAA,MAAAyQ,EAAA,aAAA,GACAzQ,EAAA,aAAAyQ,EAAA,KAAA,GACAzQ,EAAA,eAAAyQ,EAAA,KAAA,GACAzQ,EAAA,cAAAyQ,EAAA,OAAA,GAGAA,IACAzQ,EAAA,UAAA,+CACAA,EAAA,0BAAA,OACAA,EAAA,uBAAA,WACAA,EAAA,kCAAA,qBACAA,EAAA,wBAAA,YACAA,EAAA,iBAAA,gBACAA,EAAA,uBAAA,MACAA,EAAA,oBAAA,IAGAA,GAGA0Q,kCAAA,SAAAC,EAAAC,GACA,GAAAngC,SAAAkgC,EAAA,CACA,GAAAnQ,GAAA/vB,MACA,OAAA,QAAAkgC,GACAnQ,EAAA+K,uBAAAqF,GACAngC,SAAA+vB,GACAt9B,KAAAs9B,EAAAt9B,KAAAC,KAAAq9B,EAAAr9B,OAGAq9B,EAAA+K,uBAAA,kBACAroC,KAAAs9B,EAAAt9B,KAAAC,KAAAq9B,EAAAr9B,SAIAq9B,EAAA+K,uBADA,kBAAAoF,EACA,gBAIA,eAEAztC,KAAAs9B,EAAAt9B,KAAAC,KAAAq9B,EAAAr9B,OAIA,OAAAD,KAAAuN,OAAAtN,KAAA,KAeA63B,WAAA,SAAAE,EAAA3hC,EAAA0hC,GACA,MAAAjmB,QACArG,OAAA,OACAyM,IAAA9jB,UAAAiB,IAAAkJ,iBACApJ,KAAA4V,KAAAkU,WAAA+Y,YAAAA,EAAAvD,eAAAp+B,EAAA0hC,MAAAA,IACAtlB,SAAA24B,eAAA,mBAAAuC,OAAA,eAIAxX,0BAAA,SAAAn6B,EAAAu6B,EAAAngB,GACA,GAAA8B,GAAA9jB,UAAAiB,IAAAmJ,6BACArJ,GACAq3C,WAAAxwC,EACA4xC,YAAArX,EACAwW,gBAAA32B,EAAAA,EAAAnB,aAAAmB;CAEA,OAAAtE,QACArG,OAAA,OACAyM,IAAAA,EACA/iB,KAAA4V,KAAAkU,UAAA9pB,GACAsd,SAAA24B,eAAA,sBAIA,QACA7N,2BAAAiQ,kCACAvb,iBAAAA,iBACA0Z,gBAAAA,gBACAp3C,6BAAAA,6BACA0kB,2BAAAA,2BACA6yB,6BAAAA,6BACAnxB,WAAA,KACAkzB,aAAA,KACAjwB,UAAA,KACAkwB,cAAA,KACAla,qBAAAA,qBACAjB,aAAAA,aACAhB,gBAAAA,gBACA8B,eAAAA,eACAuB,qBAAAA,qBACAU,iBAAAA,iBACA0B,mBAAAA,mBACAphB,eAAAA,eACAO,aAAAA,aACAgE,oBACAsD,eAAAA,eACAzF,8BAAAA,8BACAulB,eAAAA,eACArf,qBAAAA,qBACAlJ,kBAAAA,kBACAH,aAAAA,aACA84B,uBAAA,EACAC,kBAAA,EACA9vB,eAAAA,eACAgb,wBAAAA,wBACAiG,kCAAAA,kCACAG,uBAAAA,uBACAD,+BAAAA,+BACAsJ,gBAAAA,gBACAvJ,wBAAAA,wBACAwJ,WAAAA,WACAL,gBAAAA,gBACA5uB,mBAAA,EACAkY,wBAAAA,wBACA6W,aAAAA,aACAvW,oBAAAA,oBACAD,eAAAA,eACA0Z,yBAAAA,yBACAC,wBAAAA,wBACAxN,2BAAAA,2BACA/pC,gBAAAA,gBACA6a,aAAAA,aACA45B,SAAAA,SACAld,gBAAAA,gBACA31B,0BAAAA,0BACAuoC,sBAAAA,sBACAyL,eAAAA,eACAC,aAAAA,aACAF,kBAAAA,kBACAI,eAAAA,eACAC,yBAAAA,yBACAE,0BAAAA,0BACA11C,wBAAAA,wBACAE,2BAAAA,2BACAs9B,iBAAAA,iBACA+W,sBAAAA,sBACAC,QAAAA,QACAC,mBAAAA,mBACAC,oBAAAA,oBACAC,sBAAAA,sBACA3P,UAAAA,UACA4P,UAAAA,UACAld,WAAAA,WACAmd,WAAAA,WACA5wB,kBAAAA,kBACAgrB,oCAAAA,oCACA0B,sBAAAA,sBACAF,6BAAAA,6BACAhsB,eAAAA,eACAF,aAAAA,aACA4tB,gBAAAA,gBACAnM,gBAAAA,gBACAsF,4BAAAA,4BACApC,8BAAAA,8BACApF,0BAAAA,0BACA7pB,uBAAAA,uBACAwxB,mBAAAA,mBACAgD,iCAAAA,iCACAlI,qBAAAA,qBACAI,wBAAAA,wBACAnB,eAAAA,eACAvE,eAAAA,eACAkH,oBAAAA,oBACAnF,WAAAA,WACA3B,0BAAAA,4BAKAznB,QAAAtb,QAAAC,OAAA,UAEAqb,SAAAu/B,QAAA,gBAAA,QAAA,UAAA,OAAA,KAAA,WAAA,aAAA,YAAA,4BAAA7F,iBCrkCA,WAIAh1C,QAAAC,OAAA,WAEA46C,QAAA,mBAAA,QAAA,OAAA,YAAA,UAAA,YAAA,WAAA,eAAA,aAAA,eAAA,YAAA,KAAA,4BAGA,SAAAn8B,EAAAG,EAAA/d,EAAAie,EAAA+7B,EAAAtnC,EAAAunC,EAAAt6C,EAAAM,EAAAC,EAAAmkB,EAAA3iB,GAEA,GAAAoT,KAqcA,OAncAA,GAAAolC,sBAAA,WAEA,KADAC,OAAA,+BACA,GAAAhiC,OAAA,gCAIArD,EAAAqV,YAAA,SAAA/rB,EAAA2b,EAAAqgC,GACAh8C,IACA2b,EACA3b,EAAAi8C,YAAAD,GAEAh8C,EAAAgc,SAAAggC,KAKAtlC,EAAA8tB,qBAAA,SAAAv6B,EAAAiyC,GACAxlC,EAAAqV,YAAAvU,EAAA,IAAAvN,GAAAiyC,EAAA,WAGAxlC,EAAAylC,SAAA,WACAzlC,EAAA8tB,qBAAA,mBAAA,GACA9tB,EAAA8tB,qBAAA,oBAAA,GACA9tB,EAAA8tB,qBAAA,SAAA,GACA9tB,EAAA8tB,qBAAA,gBAAA,IAGA9tB,EAAAkG,kBAAA,WACA/a,EAAAG,kBACAH,EAAAI,+BACAC,KAAA,SAAAC,GACA,GAAAi6C,GAAAv6C,EAAAW,wBAAAL,EAAAM,OACA45C,EAAAx6C,EAAAa,2BAAAP,EAAAM,OACA65C,EAAAz6C,EAAAm2C,yBAAA71C,EAAAM,MAEAiU,GAAA8tB,qBAAA,kBAAA4X,GACA1lC,EAAA8tB,qBAAA,mBAAA6X,GACA3lC,EAAA8tB,qBAAA,QAAA4X,GAAAC,GACA3lC,EAAA8tB,qBAAA,eAAA8X,IACA,SAAAz5C,GACA6T,EAAAylC,aAIAzlC,EAAAylC,YAMAzlC,EAAA6F,qBAAA,WACA7F,EAAAgL,UAAA,kBAAA+B,OAAAvhB,KAAA,WACAqB,eAAAC,QACAF,EAAAk2B,WAIA9iB,EAAAkQ,iBAAA,SAAAuV,EAAAogB,EAAAl4C,EAAAm4C,GACA,GAAAtD,GAAAjzB,EAAAmyB,QAEA9rC,EAAAuT,EAAA,UAAAhe,EAAAwmB,WAAAo0B,eAAA/uC,KAAA6uC,IAAA,EASA,IAPAthC,SAAA3O,GAAA,OAAAA,GAAA,GAAAA,EAAAhM,QACA,OAAAwB,EAAAqR,aAAAopC,IAAAthC,SAAAnZ,EAAAqR,aAAAopC,KACAjwC,EAAA,GAAA2d,OACA3d,EAAA2L,KAAAnW,EAAAqR,aAAAopC,KAIAjwC,GAAAA,EAAA,GAAA,CACA,GAAAowC,GAAA,IACA,WAAApwC,EAAA,GAAAyF,MACA2qC,EAAA56C,EAAAuK,WAAAI,MACAysC,EAAAE,UAEAF,EAAA/yC,UAGA,iBAAAmG,EAAA,GAAAyF,OACA2qC,EAAA56C,EAAAuK,WAAAC,aAEA,IAAA+G,GAAA,IAMA,IAJAA,EADAhP,EACAw3C,EAAAvvC,EAAA,GAAA+G,SAAAhP,GAEAiI,EAAA,GAAA+G,QAEAqpC,GAAArpC,EAAA,CACA,GAAArT,GAAAwX,EAAA,UACAxX,KACAm8B,GACAn8B,EAAAqpB,KAAA,QAAA4yB,cAAAjgC,SAAA0gC,EAAAnwC,KAAA8c,KAAA,iBAAA1R,KAAA,aAAA+kC,EAAAlwC,MAAAmwC,OAAAvoC,KAAAf,GACArT,EAAAi8C,YAAA,WAEAj8C,EAAAgc,SAAA,YAMA,MAAAwgC,GACAtD,EAAAb,QADA,QAMA3hC,EAAAyS,sBAAA,SAAAlf,EAAAmY,GACA,GACAw6B,GACAC,EAFA59B,EAAAzH,EAAA,IAAAvN,EAGAuN,GAAA,IAAAvN,EAAA,YACA2yC,EAAAplC,EAAA,IAAAvN,EAAA,UACA4yC,EAAArlC,EAAA,IAAAvN,EAAA,SAEA,IAAA6yC,GAAAtlC,EAAA,IAAAvN,EAAA,YACA,IAAAgV,GAAA69B,EACA,GAAA16B,KAAA,EACA06B,EAAA9gC,SAAA,aACAiD,EAAAtH,KAAA,eAAAyK,GACAnD,EAAAtH,KAAA,mBAAA1N,EAAA,UACA2yC,GAAAC,IACAD,EAAAjlC,KAAA,eAAAyK,GACAw6B,EAAAjlC,KAAA,mBAAA1N,EAAA,UACA4yC,EAAAllC,KAAA,eAAAyK,GACAy6B,EAAAllC,KAAA,mBAAA1N,EAAA,eAGA,CACA6yC,EAAAb,YAAA,YACA,IAAAc,GAAA99B,EAAAtH,KAAA,kBACAolC,IACA99B,EAAAtH,KAAA,mBAAAolC,GACA99B,EAAA+9B,WAAA,gBACAJ,GAAAC,IACAD,EAAAI,WAAA,oBACAJ,EAAAI,WAAA,gBACAH,EAAAG,WAAA,oBACAH,EAAAG,WAAA,mBAOAtmC,EAAA0pB,iBAAA,SAAAqJ,EAAAwT,GACA,IAAAxT,GAAA,GAAAA,EAAAnpC,SAAA28C,GAAA,GAAAA,EAAA38C,OACA,MAAA,EAEA,IAAAP,GAAA8f,EAAA,UAAAhe,EAAAwmB,WAAAoH,WAAAga,IAAA/7B,KAAAuvC,IAAA,EACA,OAAAl9C,IAAA,GAAAA,EAAAO,OAGAP,EAAA,GAAA4N,KAFA,IAMA+I,EAAAwmC,iBAAA,SAAAzT,EAAAwT,GACA,IAAAxT,GAAA,GAAAA,EAAAnpC,SAAA28C,GAAA,GAAAA,EAAA38C,OACA,MAAA,EAEA,IAAAP,GAAA8f,EAAA,UAAAhe,EAAAwmB,WAAAoH,WAAAga,IAAA/7B,KAAAuvC,IAAA,EACA,OAAAl9C,IAAA,GAAAA,EAAAO,OAGAP,EAAA,GAAA8C,KAFA,IAKA6T,EAAAymC,4BAAA,SAAA5qC,EAAAtI,GACA,GAAAmzC,GAAA,IACA,YAAA7qC,IACA6qC,EAAA,uBACA,aAAA7qC,IACA6qC,EAAA,yBACAA,GACA5lC,EAAA,IAAAvN,GAAA0N,KAAA,mBAAAylC,IAIA1mC,EAAAwY,UAAA,SAAA5c,EAAA6P,GAEA,IAAAA,GAAA3K,EAAA6lC,QAAAl7B,IAAA,GAAAA,EAAA7hB,OACA,MAAA,KAGA,QAAAgS,EAAAC,aACA,IAAA,OACA,IAAA,WACA,IAAA,UACA,MAAA4P,EAEA,KAAA,iBACA,MAAAA,GACA,GAAAA,EACA,MAGA,KAGA,IAEA,KAAA,QACA,IAAA,SACA,MAAA,gBAAA7P,GAAAE,QACAqN,EAAA,UAAAhe,EAAAwmB,WAAAoH,WAAAnd,EAAAE,UAAA9E,KAAAyU,IAAA,GAAAxU,KAGAkS,EAAA,UAAAvN,EAAAE,SAAA9E,KAAAyU,IAAA,GAAAxU,IAGA,KAAA,OACA,MAAAkS,GAAA,QAAAsC,EAAA,aAEA,KAAA,WAGA,IAAA,GADAm7B,MACA9/B,EAAA,EAAAA,EAAA2E,EAAA7hB,OAAAkd,IACA,gBAAAlL,GAAAE,QACA8qC,EAAArlC,KAAA4H,EAAA,UAAAhe,EAAAwmB,WAAAoH,WAAAnd,EAAAE,UAAA9E,KAAAyU,EAAA3E,KAAA,GAAA7P,MAGA2vC,EAAArlC,KAAA4H,EAAA,UAAAvN,EAAAE,SAAA9E,KAAAyU,EAAA3E,KAAA,GAAA7P,KAGA,OAAA2vC,EAEA,KAAA,YACA,MAAAn7B,GAAAxU,IACA,SACA,MAAA,QAMA+I,EAAA6mC,OAAA,SAAAC,EAAAC,EAAAC,GAeA,MAdAC,SAAA,GAAA7tB,QACA8tB,QAAAD,QAAAp4B,OACAs4B,SAAAF,QAAAr4B,QACAw4B,OAAAH,QAAAI,OAEAC,IAAAJ,QAAAJ,EAEAK,SAAAJ,EAAA,GACAO,MAGAP,EAAA,GAAAI,UAAAC,OAAAJ,GACAM,MAEAA,KAIAtnC,EAAAunC,cAAA,SAAAjuB,GAIA,MAHAA,KACAA,EAAA,cAEAF,OAAA,GAAA7R,OAAA+R,OAAAA,IAIAtZ,EAAAwnC,eAAA,WACA,GAAAC,GAAAruB,OAAAhuB,EAAAwF,aAAA0oB,OAAA,aACA,OAAAmuB,IAIAznC,EAAAgd,QAAA,SAAAnO,EAAAD,EAAAD,GACA,MAAAlkB,MAAAo8C,OAAAh4B,EAAAD,EAAAD,IAAA,IAOA3O,EAAAyzB,aAAA,SAAA3e,EAAAlnB,GACA,GAAAwN,GAAA,EACA,IAAA0Z,GAAAlnB,EAAA,CACA,GAAA85C,GAAAljC,EAAAmO,KAAAxnB,EAAAwmB,WAAA8B,eAAA,SAAAzM,GAAA,MAAAA,GAAAnH,QAAAiV,GAAA,GAAA9N,EAAA0M,mBAEAtY,GADAssC,EACAA,EAAAtsC,MAAA,YAAAoJ,EAAAmO,KAAAnO,EAAAmO,KAAAxnB,EAAAwmB,WAAA8B,eAAA,SAAAzM,GAAA,MAAAA,GAAAnH,QAAAiV,IAAAnB,MAAA,SAAAoB,GAAA,MAAAA,GAAA7F,KAAAthB,IAAA+5C,SAAA,QAEAnjC,EAAAmO,KAAAnO,EAAAmO,KAAAxnB,EAAAwmB,WAAA8B,eAAA,SAAAzM,GAAA,MAAAA,GAAAnH,QAAAiV,IAAAnB,MAAA,SAAAoB,GAAA,MAAAA,GAAA7F,KAAAthB,IAAA+5C,SAIA,MAAAvsC,IAIA4E,EAAAgL,UAAA,SAAAqE,EAAAqC,GACA,MAAAwzB,GAAA0C,MACAC,WAAA,EACAC,SAAA,SACAC,eAAA,cACAC,gBAAA,aACAt4C,YAAA,oCACAC,WAAA,uBACAs4C,kBAAA,0CACAx4C,SACA4f,UAAA,WACA,MAAAA,IAEAqC,YAAA,WACA,MAAAA,QAOA1R,EAAA/B,MAAA,SAAA1K,GAEAqK,EAAA,WACA,GAAAP,GAAA9J,EAAA6R,SAAA6F,eAAA1X,GAAA,IACA8J,IACAA,EAAAY,SAEA,MAIA+B,EAAAkoC,eAAA,SAAAC,GACA,GAAAC,GAAA,wcACAzxB,EAAAwxB,EAAAxxB,MAAAyxB,EACA,OAAAzxB,IAAAA,EAAA/sB,OAAA,EACAu+C,IAAAxxB,EAAA,IAGA,GAIA3W,EAAAC,2BAAA,SAAAhE,EAAA0T,EAAAgM,EAAAC,EAAAC,EAAAC,GAEA,IAAA,GADAusB,MACAvhC,EAAA,EAAAA,EAAA3b,EAAAomB,iBAAA3nB,OAAAkd,IACA7K,GAAA9Q,EAAAomB,iBAAAzK,GAAA7K,OAAAA,GACA0T,GAAAxkB,EAAAomB,iBAAAzK,GAAAkR,QAAArI,GACAgM,GAAAxwB,EAAAomB,iBAAAzK,GAAA6U,WAAAA,GACAC,GAAAzwB,EAAAomB,iBAAAzK,GAAA8U,aAAAA,GACAC,GAAA1wB,EAAAomB,iBAAAzK,GAAA+U,cAAAA,GACAC,GAAA3wB,EAAAomB,iBAAAzK,GAAAgV,cAAAA,GACAusB,EAAA9mC,KAAAuF,EAIA,KAAA,GAAAA,GAAAuhC,EAAAz+C,OAAAkd,EAAA,EAAAA,IACA3b,EAAAomB,iBAAA4F,OAAAkxB,EAAAvhC,EAAA,GAAA,IAKA9G,EAAAsoC,gBAAA,SAAA78B,GACA,GAAAqP,IAAA,EACAytB,EAAA,CACA,IAAA98B,GAAA,gBAAAA,GAAA,CACA,IAAA,GAAA+8B,KAAA/8B,GACAA,EAAAzhB,eAAAw+C,IAAAD,GAGAztB,GAAAytB,EAAA,EAEA,MAAAztB,IAIA9a,EAAAkjB,8BAAA,SAAAulB,EAAAh0B,GACA,GAAAse,EACA,QAAAte,GAAAg0B,GACAt9C,EAAAwmB,aACAohB,EAAA5nC,EAAAwmB,WAAAoH,WAAA0vB,IAEA1V,GAGA5nC,EAAAwmB,WAAA8C,IAOAA,GAAAtpB,EAAAwmB,WAAA8C,GACAse,EAAA5nC,EAAAwmB,WAAA8C,GAAAsE,WAAA0vB,GAEAt9C,EAAAwmB,aACAohB,EAAA5nC,EAAAwmB,WAAAoH,WAAA0vB,IAKAC,QAAAj5C,QAAAsjC,IAfA5nC,EAAA8kB,2BAAAwE,EAAA,KAAA,KAAAtpB,EAAAG,mBACAE,KAAA,SAAAW,GACA,MAAAA,GAAAwlB,WAAAoH,WAAA0vB,MAiBAzoC,EAAAqwB,sBAAA,SAAA0C,GAEA,IAAA,GADA4V,MACA7hC,EAAA,EAAAA,GAAAisB,GAAAA,EAAAnpC,QAAAkd,IAAA,CACA,GAAAgE,GAAAioB,EAAAjsB,EACA6hC,GAAA79B,EAAA9T,MAAA8T,EAAA7T,KAEA,MAAA0xC,IAIA3oC,EAAAwoB,6BAAA,SAAAvT,GACA9pB,EAAAo1C,qBAAAtrB,GAIAjV,EAAAgV,0BAAA,WACA,QAAA7pB,EAAAo1C,oBAGAvgC,EAAA4oC,8BAAA,SAAA3zB,GACA9pB,EAAA09C,6BAAA5zB,GAIAjV,EAAA6oC,6BAAA,WACA,MAAA19C,GAAA09C,8BAIA7oC,EAAA1U,gBAAA,WACA,MAAAH,GAAAG,mBAGA0U,EAAAu5B,YAAA,SAAA8N,GACA,MAAAl+B,GAAA,QAAAk+B,EAAA,eAGArnC,EAAA8vB,qBAAA,SAAA0V,GACAA,GACA1kC,EAAA,aAAAwE,SAAA,gBACAxE,EAAA,iBAAAwE,SAAA,oBAGAxE,EAAA,aAAAykC,YAAA,gBACAzkC,EAAA,iBAAAykC,YAAA,oBAIAvlC,EAAA/T,kBAAA,WACA+T,EAAAgL,UAAA,eACA+B,OAAAvhB,QAAA,WACAN,EAAAU,KAAA,cAIAoU,QChdA,SAAA5V,EAAAgvB,EAAA5U,GAEA,GAAAskC,GAAA,SAAAz9C,EAAAD,GAgBA,QAAAoqB,GAAA7nB,EAAAoS,EAAAT,EAAAF,EAAAC,EAAAF,EAAAwQ,GAWA,GARAhiB,IACAwR,GAAAoF,QAAA5W,EAAA,SAAAwR,EAAAxR,EAAA,QACA0R,GAAAkF,QAAA5W,EAAA,SAAA0R,EAAA1R,EAAA,QACAyR,GAAAmF,QAAA5W,EAAA,QAAAyR,EAAAzR,EAAA,OACAgiB,GAAApL,QAAA5W,EAAA,SAAAgiB,EAAAhiB,EAAA,SAIAoS,GACA4P,GACA5P,EAAA4P,IACA5P,EAAA4P,GAAAxQ,IACAY,EAAA4P,GAAAxQ,GAAAC,GAAA,CACA,GAAAqM,GAAA1L,EAAA4P,GAAAxQ,GAAAC,GAAAC,EACA,IAAAoM,EACA,IAAA,GAAAs9B,KAAAt9B,GACA,GAAAA,EAAAzhB,eAAA++C,IACAA,GAAAzpC,EACA,MAAAmM,GAAAs9B,IAUA,QAAAtzB,GAAA9nB,EAAAoS,EAAAT,EAAAoW,EAAAtW,EAAAC,EAAAF,EAAAwQ,GACA,GAAAnP,GAAAgV,EAAA7nB,EAAAoS,EAAAT,EAAAF,EAAAC,EAAAF,EAAAwQ,EACA,QAAAnP,GAAAM,EAAA6lC,QAAAnmC,IAAA,GAAAA,EAAA5W,QACA,EAEA4W,EAAA3U,QAAA6pB,GAAA,GAIA,QAAAC,GAAAhoB,EAAAoS,EAAAT,EAAAF,EAAAC,EAAAF,EAAAwQ,GACA,GAAAnP,GAAAgV,EAAA7nB,EAAAoS,EAAAT,EAAAF,EAAAC,EAAAF,EAAAwQ,EACA,OAAAnP,MAAAM,EAAA6lC,QAAAnmC,IAAA,GAAAA,EAAA5W,QAOA,QAAAwyB,GAAAzuB,EAAAoS,EAAAT,EAAA+c,EAAAC,EAAAld,EAAAC,EAAAF,EAAAwQ,GAIA,GAHA2M,IACAA,EAAA,IAEAhd,IAAA+c,GAAAC,EAAAD,EACA,OAAA,CAGA,IAAA/yB,GAAAksB,EAAA7nB,EAAAoS,EAAAT,EAAAF,EAAAC,EAAAF,EAAAwQ,EACA,KAAArmB,EACA,OAAA,CAEA,IAAA8+C,GAAA,GAAAY,QAAA,UAAA1sB,EAAA,IAAAD,EAAA,KACA,OAAA+rB,GAAAx6B,KAAAtkB,GAIA,QAAAizB,GAAA5uB,EAAAoS,EAAA/I,EAAAoI,EAAAC,EAAAF,EAAAwQ,GACA,IAAA3Y,EACA,OAAA,CAGA,IAAA1N,GAAAksB,EAAA7nB,EAAAoS,EAAA/I,EAAAoI,EAAAC,EAAAF,EAAAwQ,EACA,KAAArmB,EACA,OAAA,CAGA,IAAA8+C,GAAA,GAAAY,QAAA,cACA,OAAAZ,GAAAx6B,KAAAtkB,GAIA,QAAAkzB,GAAA7uB,EAAAoS,EAAAT,EAAAF,EAAAC,EAAAF,EAAAwQ,GACA,IAAArQ,EACA,OAAA,CAGA,IAAAhW,GAAAksB,EAAA7nB,EAAAoS,EAAAT,EAAAF,EAAAC,EAAAF,EAAAwQ,EACA,OAAArmB,GAIA+B,EAAA68C,eAAA5+C,IAHA,EAOA,QAAAmzB,GAAA9uB,EAAAoS,EAAAT,EAAAF,EAAAC,EAAAF,EAAAwQ,GACA,IAAArQ,EACA,OAAA,CAGA,IAGAhW,GAHAqlB,EAAAgH,EAAAhoB,EAAAoS,EAAAT,EAAA,OAAAF,EAAAC,EAAAF,EAAAwQ,GACAf,EAAA+G,EAAAhoB,EAAAoS,EAAAT,EAAA,SAAAF,EAAAC,EAAAF,EAAAwQ,GACAd,EAAA8G,EAAAhoB,EAAAoS,EAAAT,EAAA,QAAAF,EAAAC,EAAAF,EAAAwQ,EAEA,MAAAhB,GAAAC,GAAAC,GAIA,OAAA,CAHAvlB,GAAAksB,EAAA7nB,EAAAoS,EAAAT,EAAAF,EAAAC,EAAAF,EAAAwQ,EAMA,IAAAs5B,GAAA7vB,EAAA9vB,EAAA,cAAA,GAAAwxB,SAEA,IAAAmuB,EAAA,CACA,GAAAxB,GAAAruB,EAAAhuB,EAAAwF,aAAA0oB,OAAA,aACA,OAAA7uB,MAAAmyB,qBAAAtzB,EAAAm+C,IAAA,EAGA,MAAAwB,GAIA,QAAAvsB,GAAA/uB,EAAAoS,EAAAT,EAAAqd,EAAAvd,EAAAC,EAAAF,EAAAwQ,GACA,IAAArQ,GAAAmC,MAAAkb,GACA,OAAA,CAGA,IAAArzB,GAAAksB,EAAA7nB,EAAAoS,EAAAT,EAAAF,EAAAC,EAAAF,EAAAwQ,EACA,KAAArmB,EACA,OAAA,CAEA,IAAA4/C,GAAA9vB,EAAA9vB,EAAA,cAAA,EAEA,OAAA4/C,GAAApuB,WAAAouB,EAAAC,cAAAxsB,EAAA,UAIA,QAAAC,GAAAwsB,EAAAC,GACA,GAAAC,GAAA,KAEAzsB,EAAAzD,EAAAgwB,EAAA,cAAA,GACAtsB,EAAA1D,EAAAiwB,EAAA,cAAA,EAEA,OAAAxsB,GAAA/B,WAAAgC,EAAAhC,UACAwuB,EAAAzsB,EAAA0sB,KAAAzsB,EAAA,QAEA,KAOA,QAAAC,GAAApvB,EAAAoS,EAAAT,EAAAF,EAAAC,EAAAF,EAAAwQ,GACA,IAAA8M,EAAA9uB,EAAAoS,EAAAT,EAAAF,EAAAC,EAAAF,EAAAwQ,GACA,MAAA,SAGA,IAAArmB,GAAAksB,EAAA7nB,EAAAoS,EAAAT,EAAAF,EAAAC,EAAAF,EAAAwQ,GAEA03B,EAAAjuB,EAAA9vB,EAAA,cAAA,EAGA,OAAA8vB,KAAAowB,SAAAnC,EAAA,OACA,SAGAjuB,IAAAqwB,OAAApC,EAAA,OACA,QAGAjuB,IAAAswB,QAAArC,EAAA,OACA,OAGA,GAIA,QAAArqB,GAAArvB,EAAAoS,EAAAT,EAAAF,EAAAC,EAAAF,EAAAwQ,GACA,IAAArQ,EACA,OAAA,CAGA,IAAAhW,GAAAksB,EAAA7nB,EAAAoS,EAAAT,EAAAF,EAAAC,EAAAF,EAAAwQ,EACA,KAAArmB,EACA,OAAA,CAGA,IAAA+9C,GAAAjuB,EAAA9vB,EAAA,cAAA,EACA,OAAA+9C,GAAAvsB,UACAzvB,EAAA2xB,QAAAqqB,EAAAx4B,OAAAw4B,EAAAz4B,QAAA,EAAAy4B,EAAAA,SAEA,EA/MA,GAAAsC,IACAnpC,IAAAgV,EACAC,iBAAAA,EACAE,SAAAA,EACAyG,aAAAA,EACAK,UAAAA,EACAC,kBAAAA,EACAE,qBAAAA,EACAG,eAAAA,EACAR,gBAAAA,EACAC,kBAAAA,EACAQ,QAAAA,EAuMA,OAAA2sB,IAIAjkC,EAAAtb,EAAAC,OAAA,UAEAqb,GAAAu/B,QAAA,qBAAA,kBAAA,YAAA6D,KACA1+C,QAAAgvB,OAAA5U","file":"app-17058bd7f0.js","sourcesContent":["//Put everything in an IIFE (Immediately-Invoked function expression) to avoid global variables.\r\n(function () {\r\n \"use strict\"\r\n\r\n //Default Environment Variable.\r\n var __env = {};\r\n\r\n //Import Variables if present\r\n if (window) {\r\n if (typeof Object.assign != 'function') {\r\n // Must be writable: true, enumerable: false, configurable: true\r\n Object.defineProperty(Object,\r\n \"assign\",\r\n {\r\n value: function assign(target, varArgs) { // .length of function is 2\r\n 'use strict';\r\n if (target == null) { // TypeError if undefined or null\r\n throw new TypeError('Cannot convert undefined or null to object');\r\n }\r\n\r\n var to = Object(target);\r\n\r\n for (var index = 1; index < arguments.length; index++) {\r\n var nextSource = arguments[index];\r\n\r\n if (nextSource != null) { // Skip over if undefined or null\r\n for (var nextKey in nextSource) {\r\n // Avoid bugs when hasOwnProperty is shadowed\r\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\r\n to[nextKey] = nextSource[nextKey];\r\n }\r\n }\r\n }\r\n }\r\n return to;\r\n },\r\n writable: true,\r\n configurable: true\r\n });\r\n }\r\n Object.assign(__env, window.__env);\r\n }\r\n\r\n angular.module('templates', []);\r\n\r\n try {\r\n // Ask for a reference to the digestHud module. This will throw if the module hasn't been registered.\r\n angular.module('digestHud');\r\n }\r\n catch (err) {\r\n // digestHud provider is not registered. We'll register a lightweight fake.\r\n angular.module('digestHud', [])\r\n .provider('digestHud', ['$provide', function ($provide) {\r\n 'use strict';\r\n this.enable = function () { };\r\n this.$get = function () { };\r\n }]);\r\n }\r\n\r\n //Create the app module, with dependency to ngRoute\r\n var formApp = angular.module('formApp',\r\n [\r\n 'ngRoute', \r\n 'ngSanitize', \r\n 'checklist-model', \r\n 'ui.bootstrap', \r\n 'angularFileUpload', \r\n 'templates', \r\n 'digestHud', \r\n 'vcRecaptcha',\r\n 'ui.grid', \r\n 'ui.grid.selection', \r\n 'ui.grid.expandable', \r\n 'ui.grid.autoResize', \r\n 'AdalAngular'\r\n ])\r\n // Track when the application is first loaded\r\n .run(['$rootScope', function ($rootScope) {\r\n $rootScope.appJustLoaded = true;\r\n }]);\r\n\r\n}());\r\n","angular.module(\"templates\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"app/partials/core/baseLanding.html\",\"

Please select the following department to redirect to appropriate dashboard.

Department of Families, Fairness and Housing

Department of Health

\");\n$templateCache.put(\"app/partials/core/caseNotesHistory.html\",\"

Case Notes History

0\\\" class=\\\"table table-striped table-hover\\\" style=\\\"table-layout: fixed\\\">
Case NoteLogged ByLogged Time
{{caseNote.response}}{{caseNote.fullName}}{{caseNote.createdTime | date:\\\"dd/MM/yyyy hh:mm:ss a\\\"}}
\");\n$templateCache.put(\"app/partials/core/complaintsHistory.html\",\"
0\\\">

Edit History

Date ModifiedModified By
{{history.lastUpdatedTime | date:\\\"dd/MM/yyyy hh:mm:ss a\\\"}}{{history.lastUpdatedBy}}
0\\\">

Coordination History

Date ModifiedModified By
{{history.lastUpdatedTime | date:\\\"dd/MM/yyyy hh:mm:ss a\\\"}}{{history.lastUpdatedBy}}
0\\\">

Assignments

Date ModifiedAssigned ByAssigned To
{{history.lastUpdatedTime | date:\\\"dd/MM/yyyy hh:mm:ss a\\\"}}{{history.lastUpdatedBy}}{{history.value}}
0\\\">

Category (Response Due Date)

Date ModifiedModified ByCategory (Response Due Date)
{{history.lastUpdatedTime | date:\\\"dd/MM/yyyy hh:mm:ss a\\\"}}{{history.lastUpdatedBy}}{{history.value}}
0\\\">

External Oversight Due Date

Date ModifiedModified ByExternal Oversight Due Date
{{history.lastUpdatedTime | date:\\\"dd/MM/yyyy hh:mm:ss a\\\"}}{{history.lastUpdatedBy}}{{history.value}}
0\\\">

Revised/Divisional Due Date

Date ModifiedModified ByRevised/Divisional Due Date
{{history.lastUpdatedTime | date:\\\"dd/MM/yyyy hh:mm:ss a\\\"}}{{history.lastUpdatedBy}}{{history.value}}
0\\\">

Link De-Link

Date ModifiedModified ByAction
{{history.lastUpdatedTime | date:\\\"dd/MM/yyyy hh:mm:ss a\\\"}}{{history.lastUpdatedBy}}Linked - De-Linked - {{history.value}}
0\\\">

Reminder Emails

Date sentSent To
{{history.lastUpdatedTime | date:\\\"dd/MM/yyyy hh:mm:ss a\\\"}}{{history.lastUpdatedBy}}
\");\n$templateCache.put(\"app/partials/core/document.html\",\"

Upload documents

Please attach any supporting documents. Each file should be no larger than 25mb. The following formats are acceptable: .pdf, .doc, .docx, .xls, .xslx, .txt, .tif, .tiff, .png, .jpg, .jpeg, .zip.

0\\\">
File NameFile Size(Mb)DateAction
{{ item.file.name }}{{item.file.size | fileSize }}{{ item.uploadDateTime }}View Delete
Please wait Uploading {{item.file.name}} Cancel
Clicking the button will download the document
\");\n$templateCache.put(\"app/partials/core/expandableRowTemplate.html\",\"
\");\n$templateCache.put(\"app/partials/core/feedbackAssignmentHistory.html\",\"

Assignment History

0\\\" class=\\\"table table-striped table-hover\\\">
Assignee\\'s NameAssignee\\'s RoleAssignment Date
{{assignment.userFullName}}{{assignment.roleName}}{{assignment.startDate | date:\\\"dd/MM/yyyy hh:mm:ss a\\\"}}
\");\n$templateCache.put(\"app/partials/core/feedbackFollowUpActions.html\",\"

\");\n$templateCache.put(\"app/partials/core/followUpActions.html\",\"

\");\n$templateCache.put(\"app/partials/core/introduction.html\",\"

Report a privacy incident

Complete this online form to report a privacy incident to the Department of Families, Fairness and Housing.

Privacy incidents should always be taken seriously and reported to line management as soon as an incident is identified or suspected. The Department of Families, Fairness and Housing Privacy Policy outlines the department\\'s privacy obligations and legislative requirements.

To complete the online form you must know where, when and who was involved in the privacy incident. You also need to provide details of the information that was disclosed, the status of that information and what actions have been undertaken to manage this incident.

Once the online form is submitted you will have the option to download a copy of the privacy incident report. An acknowledgement email with the privacy incident report number will be sent to the reporter\\'s email address.

Note: You will not be able to submit this privacy incident report if all the mandatory fields are not completed.
\");\n$templateCache.put(\"app/partials/core/landing.html\",\"
\");\n$templateCache.put(\"app/partials/core/modalPopup.html\",\"Dialog startsDialog ends\");\n$templateCache.put(\"app/partials/core/modalPopupWindow.html\",\"\");\n$templateCache.put(\"app/partials/core/navigationButtons.html\",\"
\");\n$templateCache.put(\"app/partials/core/page.html\",\"
\");\n$templateCache.put(\"app/partials/core/pageComplaint.html\",\"
\");\n$templateCache.put(\"app/partials/core/progressMeter.html\",\"- Current page: {{ pageList[curPageNumber-1].title}}
\");\n$templateCache.put(\"app/partials/core/question.html\",\"

Please wait Loading ...

{{page.heading}}

0\\\">

Please correct the following issues.

0\\\">

0\\\">

{{section.heading}}

{{section.heading}}

{{section.heading}}

*
{{question.question}}*
{{question.question}}*
{{$eval(question.sourceValue, { p$: null })}}

{{currentLoadSaveMessage}}
Start typing, then use the up and down arrows to select an address from the list Start typing, then use the up and down arrows to select an item from the list Clicking will expand this section Clicking will expand this section
\");\n$templateCache.put(\"app/partials/core/statusBar.html\",\"
ID: {{incidentRef}} Status: {{statusText}}
\");\n$templateCache.put(\"app/partials/core/summary.html\",\"

{{page.heading}}

0\\\">
0\\\">

{{section.heading}}

{{question.question}}*
{{question.question}}*
{{question.question}}*

Screen reader users, please check the \\\"I am not a robot\\\" checkbox. If further checks are required, the checkbox will not stay checked and you will have to select the \\\"Get an audio challenge\\\" button. This button is placed towards the bottom of the page and you might have to navigate there manually.

{{currentLoadSubmitMessage}}
\");\n$templateCache.put(\"app/partials/core/typeaheadTemplate.html\",\"
\");\n$templateCache.put(\"app/partials/dashboard/feedbackStaffMemberLanding.html\",\"

Submit Your Complaint

We value your feedback as it gives us the opportunity to look at the way we do things and improve our services.

We would like to resolve your issue as quickly as possible, and will contact you within three working days to discuss your concern and resolve your complaint within ten working days. If your complaint is more complex and requires more time to investigate we will let you know what we need to do, and how long it will take.

Once your complaint is submitted, your reference number will be sent to the email address you entered on the form.

If you do not have an email address the reference number will appear on the screen for you to save or write down. You will have the option to save a copy of your complaint once the form has been submitted.

Note: If you are submitting a complaint on behalf of another person the department requires evidence that details your authority to do so (for example an engagement letter from a lawyer, a guardianship order or power of attorney).

Visit our website at https://dhhsvicgovau.sharepoint.com/sites/dffh/SitePages/Managing-feedback.aspx for more information about our Complaint policy and procedures or call our Complaints Team on 1300 884 706 from Monday to Friday between 8.30am and 4.30pm.

Submit Your Complaint

We value your feedback as it gives us the opportunity to look at the way we do things and improve our services.

We would like to resolve your issue as quickly as possible, and will contact you within three working days to discuss your concern and resolve your complaint within ten working days. If your complaint is more complex and requires more time to investigate we will let you know what we need to do, and how long it will take.

Once your complaint is submitted, your reference number will be sent to the email address you entered on the form.

If you do not have an email address the reference number will appear on the screen for you to save or write down. You will have the option to save a copy of your complaint once the form has been submitted.

Note: If you are submitting a complaint on behalf of another person the department requires evidence that details your authority to do so (for example an engagement letter from a lawyer, a guardianship order or power of attorney).

Visit our website at www.dhhs.vic.gov.au for more information about our Complaint policy and procedures or call our Complaints Team on 1300 884 706 from Monday to Friday between 8.30am and 4.30pm.

\");\n$templateCache.put(\"app/partials/dashboard/manageComplaints.html\",\"
The search results have exceeded the {{maxRecords}} record limit. Please refine your search criteria.
Reading count  {{maxRecords}}+ complaints  {{totalRecords}} complaints 
Click a column header to sort by that column. Click a row to reveal additional options at the end of the row.
{{currentLoadMessage}}
\");\n$templateCache.put(\"app/partials/dashboard/manageFeedbacks.html\",\"
The search results have exceeded the {{maxRecords}} record limit. Please refine your search criteria.
Reading count  {{maxRecords}}+ reports  {{totalRecords}} reports 
Click a column header to sort by that column. Click a row to reveal additional options at the end of the row.
{{currentLoadMessage}}
\");\n$templateCache.put(\"app/partials/dashboard/staffMemberLanding.html\",\"

Report a privacy incident

Complete this online form to report a privacy incident to the Department of Families, Fairness and Housing.

Privacy incidents should always be taken seriously and reported to line management as soon as an incident is identified or suspected. The Department of Families, Fairness and Housing Privacy Policy outlines the departments privacy obligations and legislative requirements.

To complete the online form you must know where, when and who was involved in the privacy incident. You also need to provide details of the information that was disclosed, the status of that information and what actions have been undertaken to manage this incident.

Once the online form is submitted you will have the option to download a copy of the privacy incident report. An acknowledgement email with the privacy incident report number will be sent to the reporters email address.

Note: You will not be able to submit this privacy incident report if all the mandatory fields are not completed.

Report a privacy incident

Complete this online form to report a privacy incident to the Department of Health.

Privacy incidents should always be taken seriously and reported to line management as soon as an incident is identified or suspected. The Department of Health Privacy Policy outlines the departments privacy obligations and legislative requirements.

To complete the online form you must know where, when and who was involved in the privacy incident. You also need to provide details of the information that was disclosed, the status of that information and what actions have been undertaken to manage this incident.

Once the online form is submitted you will have the option to download a copy of the privacy incident report. An acknowledgement email with the privacy incident report number will be sent to the reporters email address.

Note: You will not be able to submit this privacy incident report if all the mandatory fields are not completed.
\");\n$templateCache.put(\"app/partials/dashboard/tools.html\",\"

Document Templates



{{documentTemplatesByCategory.category}}

DocumentDescription
{{documentTemplate.name}}{{documentTemplate.description}}
\");\n$templateCache.put(\"app/partials/DH/landing.html\",\"

Submit Your Complaint

We value your feedback as it gives us the opportunity to look at the way we do things and improve our services.

We would like to resolve your issue as quickly as possible, and will contact you within three working days to discuss your concern and resolve your complaint in accordance with policy provisions. If your complaint is more complex and requires more time to investigate we will let you know what we need to do, and how long it will take.

Once your complaint is submitted, your reference number will be sent to the email address you entered on the form.

If you do not have an email address the reference number will appear on the screen for you to save or write down. You will have the option to save a copy of your complaint once the form has been submitted.

Privacy collection notice

The Department of Health (the department) recognises that your personal and health information should only be used or disclosed for the purpose for which we collect it, or for a related purpose that you would reasonably expect, or as otherwise permitted or required by law.

We will use the information you provide us to investigate and resolve your complaint, and in accordance with our Privacy Policy. The investigation of your complaint may involve sharing your personal or health information with other relevant areas within the department to achieve a resolution. If a third party was involved, we may also need to share your personal or health information with them to achieve a resolution.

We may seek further information from you in relation to your complaint. If you do not provide us with information regarding your complaint this may limit our ability to assist you. If you do not consent to us providing information regarding your complaint to an involved third party, then this may also limit our ability to assist you.

You may seek access to information we collect about you. For further details, please see our Freedom of Information page.

\");\n$templateCache.put(\"app/partials/DFFH/landing.html\",\"

Submit Your Complaint

We value your feedback as it gives us the opportunity to look at the way we do things and improve our services.

We would like to resolve your issue as quickly as possible, and will contact you within three working days to discuss your concern and resolve your complaint within ten working days. If your complaint is more complex and requires more time to investigate we will let you know what we need to do, and how long it will take.

Once your complaint is submitted, your reference number will be sent to the email address you entered on the form.

If you do not have an email address the reference number will appear on the screen for you to save or write down. You will have the option to save a copy of your complaint once the form has been submitted.

Collection notice for personal information

The Department of Families, Fairness and Housing (DFFH) recognises that your personal and health information should only be used, or disclosed for the purpose for which we collect it, or for a related purpose that you would reasonably expect, or as otherwise permitted or required by law.

We will use the information you provide us to investigate and resolve your complaint, and in accordance with our Privacy Policy (https://www.dhhs.vic.gov.au/department-health-and-human-services-privacy-policy). The investigation of your complaint may involve sharing your personal or health information with other relevant areas within DFFH to achieve a resolution. If a third party was involved, we may also need to discuss your complaint with them.

We may seek further information from you in relation to your complaint. If you do not provide us with information regarding your complaint this may limit our ability to assist you.

You may seek access to information we collect about you. For further details, please see our FOI page (https://www.dhhs.vic.gov.au/making-freedom-information-request ).

\");\n$templateCache.put(\"app/partials/layout.html\",\"Feedback Management System

Please wait Loading ...

\");}]);","(function () {\r\n \"use strict\"\r\n\r\n angular.module('formApp')\r\n .config([\r\n '$routeProvider', '$locationProvider', '$httpProvider', '$compileProvider', 'digestHudProvider', 'vcRecaptchaServiceProvider', 'adalAuthenticationServiceProvider',\r\n function ($routeProvider, $locationProvider, $httpProvider, $compileProvider, digestHudProvider, vcRecaptchaServiceProvider, adalAuthenticationServiceProvider) {\r\n\r\n // Re-enable if needed for debugging\r\n //digestHudProvider.enable();\r\n $compileProvider.debugInfoEnabled(false);\r\n\r\n adalAuthenticationServiceProvider.init(\r\n {\r\n anonymousEndpoints: __env.AzureADSettings.anonymousEndpoints,\r\n instance: __env.AzureADSettings.instance,\r\n tenant: __env.AzureADSettings.tenant,\r\n clientId: __env.AzureADSettings.clientId,\r\n redirectUri: __env.AzureADSettings.redirectUri,\r\n popUp: false,\r\n scope: 'openid',\r\n endpoints: __env.AzureADSettings.endpoints,\r\n cacheLocation:\r\n 'sessionStorage'\r\n },\r\n $httpProvider\r\n );\r\n\r\n if (__env.IsTestRecaptcha)\r\n vcRecaptchaServiceProvider.setSiteKey(__env.GoogleRecaptchaTestKey);\r\n else\r\n vcRecaptchaServiceProvider.setSiteKey(__env.GoogleRecaptchaKey);\r\n\r\n //TODO: Implement Data Service to Check User is Authenticated Or not\r\n //TODO: Based on Authentication Submit Incident URL will be change\r\n\r\n $routeProvider\r\n .when('/logout',\r\n {\r\n resolve: {\r\n init: logout\r\n }\r\n })\r\n .when('/',\r\n {\r\n templateUrl: 'app/partials/core/baseLanding.html',\r\n controller: 'landingController',\r\n })\r\n .when('/DFFH',\r\n {\r\n templateUrl: 'app/partials/core/landing.html',\r\n controller: 'landingController',\r\n resolve: {\r\n appStart: appInUse,\r\n init: feedbackCheckLoggedIn\r\n }\r\n })\r\n .when('/DH',\r\n {\r\n templateUrl: 'app/partials/core/landing.html',\r\n controller: 'landingController',\r\n resolve: {\r\n appStart: appInUse,\r\n init: feedbackCheckLoggedIn\r\n }\r\n })\r\n .when('/DFFH/internal',\r\n {\r\n templateUrl: 'app/partials/core/landing.html',\r\n controller: 'landingController',\r\n requireADLogin: true,\r\n resolve: {\r\n appStart: appInUse,\r\n init: feedbackCheckLoggedIn\r\n }\r\n })\r\n .when('/DH/internal',\r\n {\r\n templateUrl: 'app/partials/core/landing.html',\r\n controller: 'landingController',\r\n requireADLogin: true,\r\n resolve: {\r\n appStart: appInUse,\r\n init: feedbackCheckLoggedIn\r\n }\r\n })\r\n .when('/DFFH/privacy',\r\n {\r\n templateUrl: 'app/partials/core/introduction.html',\r\n controller: 'introductionController',\r\n resolve: {\r\n appStart: appInUse,\r\n init: privacyCheckLoggedIn\r\n }\r\n })\r\n //.when('/DH/privacy',\r\n // {\r\n // templateUrl: 'app/partials/core/introduction.html',\r\n // controller: 'introductionController',\r\n // resolve: {\r\n // appStart: appInUse,\r\n // init: privacyCheckLoggedIn\r\n // }\r\n // })\r\n .when('/DFFH/manageFeedbacks',\r\n {\r\n templateUrl: 'app/partials/dashboard/manageFeedbacks.html',\r\n controller: 'manageFeedbacksController',\r\n requireADLogin: true,\r\n resolve: {\r\n appStart: appInUse,\r\n init: privacyCheckAccess\r\n }\r\n })\r\n .when('/DFFH/manageComplaints',\r\n {\r\n templateUrl: 'app/partials/dashboard/manageComplaints.html',\r\n controller: 'manageComplaintsController',\r\n requireADLogin: true,\r\n resolve: {\r\n appStart: appInUse,\r\n init: complaintCheckAccess\r\n }\r\n })\r\n .when('/DH/manageFeedbacks',\r\n {\r\n templateUrl: 'app/partials/dashboard/manageFeedbacks.html',\r\n controller: 'manageFeedbacksController',\r\n requireADLogin: true,\r\n resolve: {\r\n appStart: appInUse,\r\n init: privacyCheckAccess\r\n }\r\n })\r\n .when('/DH/manageComplaints',\r\n {\r\n templateUrl: 'app/partials/dashboard/manageComplaints.html',\r\n controller: 'manageComplaintsController',\r\n requireADLogin: true,\r\n resolve: {\r\n appStart: appInUse,\r\n init: complaintCheckAccess\r\n }\r\n })\r\n .when('/DFFH/privacyStaffMemberLanding',\r\n {\r\n templateUrl: 'app/partials/dashboard/staffMemberLanding.html',\r\n controller: 'staffMemberLandingController',\r\n requireADLogin: true,\r\n resolve: {\r\n init: appInUse\r\n }\r\n })\r\n .when('/DFFH/feedbackStaffMemberLanding',\r\n {\r\n templateUrl: 'app/partials/dashboard/feedbackStaffMemberLanding.html',\r\n controller: 'feedbackStaffMemberLandingController',\r\n requireADLogin: true,\r\n resolve: {\r\n init: appInUse\r\n }\r\n })\r\n .when('/DH/feedbackStaffMemberLanding',\r\n {\r\n templateUrl: 'app/partials/dashboard/feedbackStaffMemberLanding.html',\r\n controller: 'feedbackStaffMemberLandingController',\r\n requireADLogin: true,\r\n resolve: {\r\n init: appInUse\r\n }\r\n })\r\n .when('/DFFH/tools',\r\n {\r\n templateUrl: 'app/partials/dashboard/tools.html',\r\n controller: 'toolsController',\r\n requireADLogin: true,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DH/tools',\r\n {\r\n templateUrl: 'app/partials/dashboard/tools.html',\r\n controller: 'toolsController',\r\n requireADLogin: true,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DFFH/incident/:navTabNum',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'incidentFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DH/incident/:navTabNum',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'incidentFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DFFH/incident/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'incidentFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkOutOfPlaceFormSubmissions\r\n }\r\n })\r\n .when('/DH/incident/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'incidentFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkOutOfPlaceFormSubmissions\r\n }\r\n })\r\n .when('/DFFH/incidentCoordination/:navTabNum',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'incidentCoordinationFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DH/incidentCoordination/:navTabNum',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'incidentCoordinationFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DFFH/incidentCoordination/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'incidentCoordinationFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DH/incidentCoordination/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'incidentCoordinationFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DFFH/riskAssessment/:navTabNum',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'riskAssessmentFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DH/riskAssessment/:navTabNum',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'riskAssessmentFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DFFH/riskAssessment/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'riskAssessmentFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DH/riskAssessment/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'riskAssessmentFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DFFH/notification/:navTabNum',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'notificationFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DH/notification/:navTabNum',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'notificationFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DFFH/notification/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'notificationFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DH/notification/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'notificationFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DFFH/investigation/:navTabNum',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'investigationFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DH/investigation/:navTabNum',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'investigationFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DFFH/investigation/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'investigationFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DH/investigation/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'investigationFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DFFH/practiceImprovement/:navTabNum',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'practiceImprovementFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DH/practiceImprovement/:navTabNum',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'practiceImprovementFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DFFH/practiceImprovement/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'practiceImprovementFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DH/practiceImprovement/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'practiceImprovementFormController',\r\n feedbackType: 1,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DFFH/complaint/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'complaintFormController',\r\n feedbackType: 2,\r\n resolve: {\r\n init: checkOutOfPlaceFormSubmissions\r\n }\r\n })\r\n .when('/DH/complaint/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/pageComplaint.html',\r\n controller: 'complaintFormController',\r\n feedbackType: 2,\r\n resolve: {\r\n init: checkOutOfPlaceFormSubmissions\r\n }\r\n })\r\n .when('/DFFH/complaintRegistered/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'complaintRegisteredFormController',\r\n feedbackType: 2,\r\n resolve: {\r\n init: checkOutOfPlaceFormSubmissions\r\n }\r\n })\r\n .when('/DH/complaintRegistered/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/pageComplaint.html',\r\n controller: 'complaintRegisteredFormController',\r\n feedbackType: 2,\r\n resolve: {\r\n init: checkOutOfPlaceFormSubmissions\r\n }\r\n })\r\n .when('/DFFH/feedbackCoordination/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'feedbackCoordinationFormController',\r\n feedbackType: 2,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DH/feedbackCoordination/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'feedbackCoordinationFormController',\r\n feedbackType: 2,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DFFH/feedbackAssessment/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'feedbackAssessmentFormController',\r\n feedbackType: 2,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DH/feedbackAssessment/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'feedbackAssessmentFormController',\r\n feedbackType: 2,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DFFH/feedbackInvestigate/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'feedbackInvestigateFormController',\r\n feedbackType: 2,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DH/feedbackInvestigate/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'feedbackInvestigateFormController',\r\n feedbackType: 2,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DFFH/feedbackRespond/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'feedbackRespondFormController',\r\n feedbackType: 2,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DH/feedbackRespond/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'feedbackRespondFormController',\r\n feedbackType: 2,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DFFH/feedbackPracticeImprovement/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'feedbackPracticeImprovementFormController',\r\n feedbackType: 2,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DH/feedbackPracticeImprovement/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'feedbackPracticeImprovementFormController',\r\n feedbackType: 2,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DFFH/feedbackAdditionalInfo/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'feedbackAdditionalInfoController',\r\n feedbackType: 2,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .when('/DH/feedbackAdditionalInfo/:navTabNum/:pageUrl',\r\n {\r\n templateUrl: 'app/partials/core/page.html',\r\n controller: 'feedbackAdditionalInfoController',\r\n feedbackType: 2,\r\n resolve: {\r\n init: checkDirectNavigation\r\n }\r\n })\r\n .otherwise({\r\n redirectTo: '/'\r\n });\r\n\r\n $locationProvider.html5Mode(false).hashPrefix('');\r\n }\r\n ])\r\n .value('departmentTheme',\r\n {\r\n isDHVisible: window.location.hash.indexOf(\"DH\") > -1,\r\n isDFFHVisible: window.location.hash.indexOf(\"DFFH\") > -1\r\n })\r\n\r\n\r\n // Push an authenticated user to the management screen for general feedback\r\n feedbackCheckLoggedIn.$inject = ['$location', 'DataServices', 'Constants', 'UtilityServices'];\r\n function feedbackCheckLoggedIn($location, DataServices, Constants, UtilityServices) {\r\n if (DataServices.isAuthenticated()) {\r\n DataServices.getUserProfileInfoUsingCache()\r\n .then(function (userInfo) {\r\n //$scope.utility = UtilityServices;\r\n if (userInfo.isDFFH || userInfo.isSuperAdmin) {\r\n if ($location.path().indexOf('DFFH') > -1) {\r\n if (DataServices.isRegisteredPrivacyUser(userInfo.roles)) {\r\n $location.path('/DFFH/manageFeedbacks');\r\n\r\n }\r\n else if (DataServices.isRegisteredComplaintsUser(userInfo.roles)) {\r\n $location.path('/DFFH/manageComplaints');\r\n\r\n }\r\n else {\r\n $location.path('/DFFH/feedbackStaffMemberLanding');\r\n\r\n }\r\n }\r\n else if ($location.path().indexOf('DH') > -1) {\r\n if (userInfo.isSuperAdmin) {\r\n if (DataServices.isRegisteredPrivacyUser(userInfo.roles)) {\r\n $location.path('/DH/manageFeedbacks');\r\n\r\n }\r\n else if (DataServices.isRegisteredComplaintsUser(userInfo.roles)) {\r\n $location.path('/DH/manageComplaints');\r\n\r\n }\r\n else {\r\n $location.path('/DH/feedbackStaffMemberLanding');\r\n\r\n }\r\n }\r\n else {\r\n UtilityServices.invalidUserLogout()\r\n }\r\n }\r\n else {\r\n UtilityServices.invalidUserLogout()\r\n }\r\n }\r\n else if (userInfo.isDH || userInfo.isSuperAdmin) {\r\n if ($location.path().indexOf('DH') > -1) {\r\n if (DataServices.isRegisteredPrivacyUser(userInfo.roles)) {\r\n $location.path('/DH/manageFeedbacks');\r\n\r\n }\r\n else if (DataServices.isRegisteredComplaintsUser(userInfo.roles)) {\r\n $location.path('/DH/manageComplaints');\r\n\r\n }\r\n else {\r\n $location.path('/DH/feedbackStaffMemberLanding');\r\n\r\n }\r\n }\r\n else if ($location.path().indexOf('DFFH') > -1) {\r\n if (userInfo.isSuperAdmin) {\r\n if (DataServices.isRegisteredPrivacyUser(userInfo.roles)) {\r\n $location.path('/DFFH/manageFeedbacks');\r\n\r\n }\r\n else if (DataServices.isRegisteredComplaintsUser(userInfo.roles)) {\r\n $location.path('/DFFH/manageComplaints');\r\n\r\n }\r\n else {\r\n $location.path('/DFFH/feedbackStaffMemberLanding');\r\n\r\n }\r\n }\r\n else {\r\n UtilityServices.invalidUserLogout()\r\n }\r\n }\r\n else {\r\n UtilityServices.invalidUserLogout()\r\n }\r\n }\r\n else {\r\n UtilityServices.invalidUserLogout()\r\n }\r\n }, function (data) {\r\n if ($location.path().indexOf('DFFH') > -1) {\r\n $location.path('/DFFH/feedbackStaffMemberLanding');\r\n\r\n }\r\n else {\r\n $location.path('/DH/feedbackStaffMemberLanding');\r\n\r\n }\r\n });\r\n }\r\n }\r\n\r\n\r\n // Push an authenticated user to the management screen for Privacy Incidents\r\n privacyCheckLoggedIn.$inject = ['$location', 'DataServices', 'Constants', 'UtilityServices'];\r\n function privacyCheckLoggedIn($location, DataServices, Constants, UtilityServices) {\r\n if (DataServices.isAuthenticated()) {\r\n DataServices.getUserProfileInfoUsingCache()\r\n .then(function (userInfo) {\r\n if (userInfo.isDFFH || userInfo.isSuperAdmin) {\r\n if (DataServices.isRegisteredPrivacyUser(userInfo.roles)) {\r\n $location.path(Constants.Url.manageFeedbacks);\r\n }\r\n else {\r\n $location.path(Constants.Url.privacyStaffMemberLanding);\r\n }\r\n }\r\n else if (userInfo.isDH || userInfo.isSuperAdmin) {\r\n if ($location.path().indexOf('DH') > -1) {//\r\n if (DataServices.isRegisteredPrivacyUser(userInfo.roles)) {\r\n $location.path(Constants.Url.manageFeedbacks);\r\n }\r\n }//\r\n else if ($location.path().indexOf('DFFH') > -1) {//\r\n if (userInfo.isSuperAdmin) {\r\n if (DataServices.isRegisteredPrivacyUser(userInfo.roles)) {\r\n $location.path(Constants.Url.manageFeedbacks);\r\n }\r\n else {\r\n $location.path(Constants.Url.privacyStaffMemberLanding);\r\n }\r\n }\r\n else {\r\n UtilityServices.invalidUserLogout()\r\n }\r\n }\r\n else {\r\n UtilityServices.invalidUserLogout()\r\n }\r\n }\r\n else {\r\n UtilityServices.invalidUserLogout()\r\n }\r\n }, function (data) {\r\n if ($location.path().indexOf('DFFH') > -1) {\r\n $location.path(Constants.Url.privacyStaffMemberLanding);\r\n }\r\n });\r\n }\r\n }\r\n\r\n\r\n privacyCheckAccess.$inject = ['$location', 'DataServices', 'Constants', 'UtilityServices'];\r\n function privacyCheckAccess($location, DataServices, Constants, UtilityServices) {\r\n if (DataServices.isAuthenticated()) {\r\n DataServices.getUserProfileInfoUsingCache()\r\n .then(function (userInfo) {\r\n if (!DataServices.isRegisteredPrivacyUser(userInfo.roles)) {\r\n if ($location.path().indexOf('DFFH') > -1) {\r\n $location.path('/DFFH/privacyStaffMemberLanding');\r\n\r\n }\r\n else {\r\n $location.path('/DH/manageComplaints');\r\n\r\n }\r\n }\r\n else {\r\n if (userInfo.isDFFH || userInfo.isSuperAdmin) {\r\n if ($location.path().indexOf('DFFH') > -1) {\r\n $location.path(Constants.Url.manageFeedbacks);\r\n }\r\n else if ($location.path().indexOf('DH') > -1) {\r\n if (userInfo.isSuperAdmin) {\r\n $location.path(Constants.Url.manageFeedbacks);\r\n }\r\n else {\r\n UtilityServices.invalidUserLogout()\r\n }\r\n }\r\n else {\r\n UtilityServices.invalidUserLogout()\r\n }\r\n }\r\n else if (userInfo.isDH || userInfo.isSuperAdmin) {\r\n if ($location.path().indexOf('DH') > -1) {\r\n $location.path(Constants.Url.manageFeedbacks);\r\n }\r\n else if ($location.path().indexOf('DFFH') > -1) {\r\n if (userInfo.isSuperAdmin) {\r\n $location.path(Constants.Url.manageFeedbacks);\r\n }\r\n else {\r\n UtilityServices.invalidUserLogout()\r\n }\r\n }\r\n else {\r\n UtilityServices.invalidUserLogout()\r\n }\r\n }\r\n else {\r\n UtilityServices.invalidUserLogout()\r\n }\r\n }\r\n }, function (data) {\r\n if ($location.path().indexOf('DFFH') > -1) {\r\n $location.path('/DFFH/privacyStaffMemberLanding');\r\n\r\n }\r\n });\r\n }\r\n }\r\n\r\n complaintCheckAccess.$inject = ['$location', 'DataServices', 'Constants', 'UtilityServices'];\r\n function complaintCheckAccess($location, DataServices, Constants, UtilityServices) {\r\n if (DataServices.isAuthenticated()) {\r\n DataServices.getUserProfileInfoUsingCache()\r\n .then(function (userInfo) {\r\n if (!DataServices.isRegisteredComplaintsUser(userInfo.roles)) {\r\n if ($location.path().indexOf('DFFH') > -1) {\r\n $location.path('/DFFH/feedbackStaffMemberLanding');\r\n\r\n }\r\n else {\r\n $location.path('/DH/feedbackStaffMemberLanding');\r\n\r\n }\r\n }\r\n else {\r\n if (userInfo.isDFFH || userInfo.isSuperAdmin) {\r\n if ($location.path().indexOf('DFFH') > -1) {\r\n $location.path(Constants.Url.manageComplaints);\r\n }\r\n else if ($location.path().indexOf('DH') > -1) {\r\n if (userInfo.isSuperAdmin) {\r\n $location.path(Constants.Url.manageComplaints);\r\n }\r\n else {\r\n UtilityServices.invalidUserLogout()\r\n }\r\n }\r\n else {\r\n UtilityServices.invalidUserLogout()\r\n }\r\n }\r\n else if (userInfo.isDH || userInfo.isSuperAdmin) {\r\n if ($location.path().indexOf('DH') > -1) {\r\n $location.path(Constants.Url.manageComplaints);\r\n }\r\n else if ($location.path().indexOf('DFFH') > -1) {\r\n if (userInfo.isSuperAdmin) {\r\n $location.path(Constants.Url.manageComplaints);\r\n }\r\n else {\r\n UtilityServices.invalidUserLogout()\r\n }\r\n }\r\n else {\r\n UtilityServices.invalidUserLogout()\r\n }\r\n }\r\n else {\r\n UtilityServices.invalidUserLogout()\r\n }\r\n\r\n\r\n }\r\n }, function (data) {\r\n if ($location.path().indexOf('DFFH') > -1) {\r\n $location.path('/DFFH/feedbackStaffMemberLanding');\r\n\r\n }\r\n else {\r\n $location.path('/DH/feedbackStaffMemberLanding');\r\n\r\n }\r\n });\r\n }\r\n }\r\n\r\n logout.$inject = ['adalAuthenticationService'];\r\n function logout(adalAuthenticationService) {\r\n if (adalAuthenticationService.userInfo && adalAuthenticationService.userInfo.isAuthenticated) {\r\n sessionStorage.clear();\r\n adalAuthenticationService.logOut();\r\n }\r\n }\r\n\r\n // Navigate to a landing page that the user has access to\r\n function navigateToLandingPage(DataServices, $route, $location, Constants) {\r\n\r\n if (!DataServices.isAuthenticated()) {\r\n if ($route.current.$$route.feedbackType == 1) {\r\n $location.path(Constants.Url.privacy);\r\n }\r\n else if ($route.current.$$route.feedbackType == 2) {\r\n $location.path(Constants.Url.internal);\r\n }\r\n else {\r\n $location.path(Constants.Url.landing);\r\n }\r\n }\r\n else if (DataServices.isPartiallyRegisteredUser()) {\r\n if ($route.current.$$route.feedbackType == 1) {\r\n $location.path(Constants.Url.privacyStaffMemberLanding);\r\n }\r\n else {\r\n $location.path(Constants.Url.feedbackStaffMemberLanding);\r\n }\r\n }\r\n else {\r\n if ($route.current.$$route.feedbackType == 1) {\r\n $location.path(Constants.Url.manageFeedbacks);\r\n }\r\n else {\r\n $location.path(Constants.Url.manageComplaints);\r\n }\r\n }\r\n }\r\n\r\n checkOutOfPlaceFormSubmissions.$inject = ['$route', '$location', 'DataServices', '$rootScope', 'Constants'];\r\n // this is resolved only on the form submission route\r\n function checkOutOfPlaceFormSubmissions($route, $location, DataServices, $rootScope, Constants) {\r\n // once the submissions is successful, we close the submission gateway.\r\n if ($route.current.params.pageUrl == \"submitsuccessful\") {\r\n $rootScope.allowFormNavigation = false;\r\n }\r\n else {\r\n if (!$rootScope.allowFormNavigation) {\r\n navigateToLandingPage(DataServices, $route, $location, Constants);\r\n }\r\n }\r\n }\r\n\r\n // Track that the app is already in use\r\n appInUse.$inject = ['$rootScope'];\r\n function appInUse($rootScope) {\r\n $rootScope.appJustLoaded = false;\r\n }\r\n\r\n // Use this resolver when it shouldn't be possible to directly navigate to a certain page.\r\n // Kick the user to a real landing page if this is the case. Currently prevents problems\r\n // when the user refreshes a page, e.g. the incident form\r\n checkDirectNavigation.$inject = ['$route', '$rootScope', '$location', 'DataServices', 'Constants'];\r\n function checkDirectNavigation($route, $rootScope, $location, DataServices, Constants) {\r\n if ($rootScope.appJustLoaded) {\r\n $rootScope.appJustLoaded = false;\r\n\r\n navigateToLandingPage(DataServices, $route, $location, Constants);\r\n }\r\n }\r\n}());\r\n","(function () {\r\n \"use strict\"\r\n\r\n // Calculate the base URL once\r\n var baseUrl = window.location.hash.split('/')[1] || '';\r\n\r\n //// this directive compiles an html string or dom into a template\r\n angular.module('formApp')\r\n\r\n //// this directive compiles an html string or dom into a template\r\n .constant('Constants',\r\n {\r\n // Defines constants that can used throughout the application by injecting 'Constants'\r\n ausDateFormat: 'DD/MM/YYYY',\r\n responseDateFormat: 'YYYY-MM-DD',\r\n minimumDate: \"1900-01-01\",\r\n defaultDateOption: '4',\r\n defaultFeedbackStatus: '2',\r\n clientPageId: '1-5',\r\n clientPageSectionCode: 'clients',\r\n accessSectionCode: 'accesstouser',\r\n summaryNavTabNum: 90,\r\n systemNavTabNum: 100,\r\n Url: {\r\n landing: \"/\",\r\n logout: \"/logout\",\r\n landing: baseUrl,\r\n privacy: baseUrl + \"/privacy\",\r\n tools: baseUrl + \"/tools\",\r\n internal: baseUrl + \"/internal\",\r\n introduction: baseUrl + \"/introduction\",\r\n manageFeedbacks: baseUrl + \"/manageFeedbacks\",\r\n manageComplaints: baseUrl + \"/manageComplaints\",\r\n privacyStaffMemberLanding: baseUrl + \"/privacyStaffMemberLanding\",\r\n feedbackStaffMemberLanding: baseUrl + \"/feedbackStaffMemberLanding\",\r\n firstIncidentFormPage: baseUrl + \"/incident/1/servicedetails\",\r\n firstFollowUpFormPage: baseUrl + \"/incidentCoordination/1/followup\",\r\n firstRiskAssessmentFormPage: baseUrl + \"/riskAssessment/1/riskassessment\",\r\n firstNotificationFormPage: baseUrl + \"/notification/1/notification\",\r\n firstInvestigationFormPage: baseUrl + \"/investigation/1/investigation\",\r\n firstPracticeImprovementFormPage: baseUrl + \"/practiceImprovement/1/practiceimprovement\",\r\n firstComplaintFormPage: baseUrl + \"/complaint/1/yourdetails\",\r\n firstComplaintRegisteredFormPage: baseUrl + \"/complaintRegistered/1/complainantdetails\",\r\n firstFeedbackCoordinationFormPage: baseUrl + \"/feedbackCoordination/1/feedbackcoordination\",\r\n secondFeedbackCoordinationFormPage: baseUrl + \"/feedbackCoordination/2/complainshistory\",\r\n firstFeedbackAssessmentFormPage: baseUrl + \"/feedbackAssessment/1/assessment\",\r\n firstFeedbackInvestigateFormPage: baseUrl + \"/feedbackInvestigate/1/investigate\",\r\n firstFeedbackRespondFormPage: baseUrl + \"/feedbackRespond/1/respond\",\r\n firstFeedbackPracticeImprovementFormPage: baseUrl + \"/feedbackPracticeImprovement/1/practiceimprovement\",\r\n firstFeedbackAdditionalInfoFormPage: baseUrl + \"/feedbackAdditionalInfo/1/feedback\",\r\n nonMajorSummary: baseUrl + \"/incident/4/incidentchecklist\",\r\n saveDraft: baseUrl + \"/incident/100/savedraft\",\r\n managerReturn: baseUrl + \"/incident/100/managerreturn\",\r\n withdrawIncident: baseUrl + \"/incident/100/withdrawincident\",\r\n getResponseByEmailURL: __env.apiUrl + \"/Home/GetResponseByEmail\",\r\n getConfigDataURL: __env.apiUrl + \"/Home/GetConfigData\",\r\n getConfigDataPublicURL: __env.apiUrl + \"/Home/GetPublicConfigData\",\r\n getApplicationLastUpdateDateURL: __env.apiUrl + \"/Home/GetApplicationLastUpdateDate\",\r\n getUserProfileData: __env.apiUrl + \"/Home/GetUserProfileData\",\r\n getFeedbackAssigneesURL: function (feedbackId, IsDHVisible) \r\n { return __env.apiUrl + \"/User/FeedbackAssignees/\" + feedbackId + \"/\" + IsDHVisible; },\r\n getSubmitIncidentURL: __env.apiUrl + \"/Feedback/PublicSubmitFeedback\",\r\n getSubmitIncidentRegisteredUserURL: __env.apiUrl + \"/Feedback/SubmitFeedback\",\r\n getSaveIncidentRegisteredUserURL: __env.apiUrl + \"/Feedback/SaveFeedback\",\r\n getFeedbacksURL: __env.apiUrl + \"/Feedback/GetFeedbacks\",\r\n getFeedbackByIdURL: function (id) { return __env.apiUrl + \"/Feedback/\" + id; },\r\n assignFeedbackURL: __env.apiUrl + \"/Feedback/AssignFeedback\",\r\n getLinkableFeedbacksURL: function (feedbackId) { return __env.apiUrl + \"/Feedback/LinkableFeedbacks/\" + feedbackId; },\r\n saveFeedbackLinkURL: __env.apiUrl + \"/Feedback/SaveFeedbackLink\",\r\n removeFeedbackLinkURL: __env.apiUrl + \"/Feedback/RemoveFeedbackLink\",\r\n getPublicSaveDocumentURL: __env.apiUrl + \"/Feedback/PublicSaveDocument\",\r\n getSaveDocumentURL: __env.apiUrl + \"/Feedback/SaveDocument\",\r\n getPublicGetDocumentURL: __env.apiUrl + \"/Feedback/PublicGetDocument\",\r\n getGetDocumentURL: __env.apiUrl + \"/Feedback/GetDocument\",\r\n getPublicDeleteDocumentURL: __env.apiUrl + \"/Feedback/PublicDeleteDocument\",\r\n getDeleteDocumentURL: __env.apiUrl + \"/Feedback/DeleteDocument\",\r\n getSaveIncidentForDocumentUploadURL: __env.apiUrl + \"/Feedback/SaveIncidentForDocumentUpload\",\r\n getPublicSaveIncidentForDocumentUploadURL: __env.apiUrl + \"/Feedback/PublicSaveIncidentForDocumentUpload\",\r\n getSaveFeedbackCaseNotesURL: __env.apiUrl + \"/Feedback/SaveFeedbackCaseNotes\",\r\n getWithdrawFeedbackURL: __env.apiUrl + \"/Feedback/WithdrawFeedback\",\r\n getApproveNonMajorIncidentCEOURL: __env.apiUrl + \"/Home/ApproveNonMajorIncidentCEO\",\r\n getFollowUpSummaryResponseAndConfigURL: __env.apiUrl + \"/FollowUp/GetFollowUpSummaryResponseAndConfig\",\r\n getFollowUpResponseAndConfigURL: __env.apiUrl + \"/FollowUp/GetFollowUpResponseAndConfigByFollowUpId\",\r\n securedHealthCheckUrl: __env.apiUrl + \"/HealthCheck/scheck\",\r\n getSubmitSubmitFollowUpURL: __env.apiUrl + \"/FollowUp/SubmitFollowUp\",\r\n getSaveFollowUpURL: __env.apiUrl + \"/FollowUp/SaveFollowUp\",\r\n geUpdateFeedbackStatusUpURL: __env.apiUrl + \"/Feedback/UpdateFeedbackStatus\",\r\n getFeedbackPdf: function (id) { return __env.apiUrl + \"/pdf/GetFeedbackPdf/\" + id; },\r\n getAllFormsPdf: function (id) { return __env.apiUrl + \"/pdf/GetAllFormsPdf/\" + id; },\r\n getComplaintsRegisteredPdf: function (id) { return __env.apiUrl + \"/pdf/GetComplaintsRegisteredPdf/\" + id; },\r\n getComplaintsUnRegisteredPdf: function (id) { return __env.apiUrl + \"/pdf/GetComplaintsUnRegisteredPdf/\" + id; },\r\n getComplaintsAllFormsPdf: function (id) { return __env.apiUrl + \"/pdf/GetComplaintsAllFormsPdf/\" + id; },\r\n getComplaintsFeedbackUnRegistered: function (id) { return __env.apiUrl + \"/Feedback/GetComplaintsFeedbackUnRegistered/\" + id; },\r\n getFeedbackHistoryURL: __env.apiUrl + \"/history/GetHistory\",\r\n getGetDocumentTemplatesURL: __env.apiUrl + \"/DocumentTemplate/GetDocumentTemplates\",\r\n getReOpenFeedbackURL: __env.apiUrl + \"/Feedback/ReOpenFeedback\",\r\n deleteFeedbackURL: __env.apiUrl + \"/Feedback/DeleteFeedback\",\r\n getCsvExtractUrl: __env.apiUrl + \"/Feedback/GetCsvExtract\",\r\n toggleFeedbackSensitivityURL: __env.apiUrl + \"/Feedback/ToggleFeedbackSensitivity\",\r\n getGetDocumentTemplateFileURL: function (documentTemplateId) { return __env.apiUrl + \"/DocumentTemplate/GetDocumentTemplateFile/\" + documentTemplateId; }\r\n },\r\n NotifyType: {\r\n notification: { css: 'text-success', icon: '#icon-info' },\r\n error: { css: 'text-danger', icon: '#icon-warning' }\r\n },\r\n SubmitType: {\r\n toMgr: 'ToMgr',\r\n toCEO: 'ToCEO',\r\n toDHHS: 'ToDHHS',\r\n toDHHSMgr: 'ToDHHSMgr',\r\n nonMajorCEO: 'NonMajorCEO',\r\n adhocDHHS: 'AdhocDHHS'\r\n },\r\n RepeatingItemState: {\r\n adding: 'Adding',\r\n editing: 'Editing',\r\n viewing: 'Viewing'\r\n },\r\n ManageIncidentState: {\r\n view: 'View',\r\n bulkEdit: 'BulkEdit'\r\n },\r\n ImpactType: {\r\n major: { code: 1, text: 'Major' },\r\n nonMajor: { code: 2, text: 'Non-Major' },\r\n unknown: { code: 3, text: 'Unknown' }\r\n },\r\n Role: {\r\n spReadOnly: 'ReadOnlyUser',\r\n Requestor: 'Requestor',\r\n StaffMember: 'StaffMember',\r\n PrivacyOfficer: 'PrivacyOfficer',\r\n PrivacyManager: 'PrivacyManager',\r\n IncidentManager: 'IncidentManager',\r\n Investigator: 'Investigator',\r\n ComplaintsManager: 'ComplaintsManager',\r\n ActionOfficer: 'ActionOfficer',\r\n FMS_Admin: 'FMS_Admin',\r\n FMS_ComplaintsAdmin: 'FMS_ComplaintsAdmin',\r\n FMS_Level3User: 'FMS_Level3User'\r\n },\r\n FeedbackType: {\r\n Privacy: 1,\r\n Complaint: 2\r\n },\r\n ConfigTemplate: {\r\n incident: 1,\r\n incidentCoordination: 2,\r\n riskAssessment: 3,\r\n notification: 4,\r\n investigation: 5,\r\n practiceImprovement: 6,\r\n complaint: 7,\r\n user: 8,\r\n organisation: 9,\r\n complaintRegistered: 11,\r\n feedbackCoordination: 12,\r\n feedbackAssessment: 13,\r\n feedbackInvestigate: 15,\r\n feedbackRespond: 16,\r\n feedbackPracticeImprovement: 17,\r\n feedbackAdditionalInfo: 20\r\n },\r\n FollowUpStatus: {\r\n draft: 1,\r\n submitted: 2\r\n },\r\n Status: {\r\n Draft: 1,\r\n Submitted: 2,\r\n InProgress: 3,\r\n Withdrawn: 4,\r\n Closed: 5,\r\n Approved: 6\r\n },\r\n RetrieveHistoryType: {\r\n Assignment: 1,\r\n Recategorisation: 2,\r\n ExternalOversightDueDate: 3,\r\n RevisedDueDate: 4,\r\n LinkingUnLinking: 5,\r\n EditHistory: 6,\r\n EditFollowup: 7,\r\n OverdueNotification: 8\r\n },\r\n AppConfig: {\r\n googlePlacesAPIKey: __env.GooglePlacesAPIKey,\r\n isTestRecaptcha: __env.IsTestRecaptcha,\r\n googleRecaptchaTestSecret: __env.GoogleRecaptchaTestSecret,\r\n googleRecaptchaTestKey: __env.GoogleRecaptchaTestKey\r\n },\r\n ComplaintsFormType: {\r\n registered: 11,\r\n unRegistered: 7\r\n },\r\n Popup: {\r\n savedElsewhere: {\r\n severity: '',\r\n title: 'Unable to save',\r\n text: '

You are unable to save this complaint as another user has updated this complaint while you were making changes.


You will need to close this complaint and re-open it in order to make your changes. Any changes made will not be saved.

',\r\n type: 'info',\r\n okButtonText: 'Close',\r\n },\r\n reviewComplaintErrors: {\r\n severity: '',\r\n title: 'Error',\r\n text: 'Mandatory information is required',\r\n type: 'info',\r\n okButtonText: 'Ok',\r\n },\r\n reopenIncident: {\r\n severity: '',\r\n title: 'Re-open this incident?',\r\n text: '

Do you want to re-open this incident ?

',\r\n type: 'confirm',\r\n okButtonText: 'Yes',\r\n cancelButtonText: 'No'\r\n },\r\n linkPrivacyIncident: {\r\n severity: 'linkPrivacyIncident',\r\n title: 'Link this privacy incident?',\r\n text: '

You have selected to link privacy incident {{params.formattedRef}} to another privacy incident.
Please choose the other privacy incident from the list below and enter a reason.

',\r\n type: 'confirm',\r\n okButtonText: 'Confirm Linking',\r\n cancelButtonText: 'Cancel',\r\n questions: [\r\n {\r\n question: 'Other Incident',\r\n code: 'linkablePrivacyIncidents',\r\n controlType: 'typeahead',\r\n options: 'linkableprivacyincidents',\r\n showAsRequired: 'true',\r\n validations: [\r\n {\r\n level: \"inline\",\r\n rule: \"notEmpty(p$, 'linkablePrivacyIncidents') === true\",\r\n summaryMessage: \"\",\r\n inlineMessage: \"Please enter a report reference\"\r\n }\r\n ]\r\n },\r\n {\r\n question: 'Reason for Linking',\r\n code: 'linkReason',\r\n controlType: 'select',\r\n showAsRequired: 'true',\r\n options: 'privacylinkreasons',\r\n validations: [\r\n {\r\n level: \"inline\",\r\n rule: \"notEmpty(p$, 'linkReason') === true\",\r\n summaryMessage: \"\",\r\n inlineMessage: \"Please enter a reason to link\"\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n incidentNotAccessible: {\r\n severity: '',\r\n title: 'Unable to view the incident',\r\n text: \"

You don't have sufficient permissions to view Incident ID {{ params.formattedRef }}.

\",\r\n type: 'info',\r\n okButtonText: 'Close'\r\n },\r\n confirmDeleteComplaint: {\r\n severity: '',\r\n title: 'Delete feedback',\r\n text: 'Are you sure you want to delete the feedback?',\r\n type: 'confirm',\r\n okButtonText: 'Delete',\r\n cancelButtonText: 'Cancel'\r\n },\r\n confirmToMakeRecordSensitive: {\r\n severity: '',\r\n title: 'Lock feedback',\r\n text: 'Are you sure you want to make the feedback sensitive?',\r\n type: 'confirm',\r\n okButtonText: 'Yes',\r\n cancelButtonText: 'Cancel'\r\n },\r\n confirmToMakeRecordInsensitive: {\r\n severity: '',\r\n title: 'Unlock feedback',\r\n text: 'Are you sure you want to make the feedback insensitive?',\r\n type: 'confirm',\r\n okButtonText: 'Yes',\r\n cancelButtonText: 'Cancel'\r\n }\r\n },\r\n Notification: {\r\n reopenIncidentSuccessful: {\r\n type: \"notification\",\r\n message: \"Incident: {{ref}} has been re-opened successfully.\"\r\n },\r\n reopenIncidentFailed: { message: 'Incident {{ref}} re-open failed.', type: \"error\" },\r\n incidentUpdatedSinceReadTime: { message: 'You are unable to re-open incident {{ref}} as another user has updated this incident report.', type: \"error\" },\r\n complaintHasValidationErrors: {\r\n message: 'Please click here to see the errors in the form',\r\n type: \"error\"\r\n },\r\n deleteComplaintSuccessful: {\r\n type: 'notification',\r\n message: 'Complaint {{ref}} has been deleted successfully.'\r\n }\r\n },\r\n Messages: {\r\n manageReportsPageTitle: 'Feedback Management System Manage Reports page',\r\n linkPrivacyProgress: 'Linking privacy incidents'\r\n }\r\n })\r\n\r\n}());","\r\n(function () {\r\n \"use strict\"\r\n\r\n angular.module('formApp')\r\n\r\n // directive to set the focus to the input field\r\n .directive('compile',\r\n [\r\n '$compile', function ($compile) {\r\n return function (scope, element, attrs) {\r\n scope.$watch(\r\n function (scope) {\r\n return scope.$eval(attrs.compile);\r\n },\r\n function (value) {\r\n element.html(value);\r\n $compile(element.contents())(scope);\r\n }\r\n )\r\n }\r\n }\r\n ])\r\n .directive('focusMe',\r\n [\r\n '$timeout', '$parse', function ($timeout, $parse) {\r\n return {\r\n link: function (scope, element, attrs) {\r\n var model = $parse(attrs.focusMe);\r\n scope.$watch(model,\r\n function (value) {\r\n if (value === true) {\r\n $timeout(function () {\r\n element[0].focus();\r\n });\r\n }\r\n });\r\n }\r\n };\r\n }\r\n ])\r\n // directive to ensure that onfocusout / onblur validation fires before the next event is triggered.\r\n .directive('validationClick',\r\n [\r\n '$timeout', function ($timeout) {\r\n return function (scope, element, attrs) {\r\n element.bind(\"keydown keypress mouseup\",\r\n function (event) {\r\n if ((event.which === 13 && event.type === \"keydown\") ||\r\n (event.type === \"mouseup\" && event.which !== 3) ||\r\n event.type === \"click\") {\r\n // Current onfocusout timeout is 50ms. This just needs to be more than that.\r\n setTimeout(function () {\r\n scope.$apply(function () { scope.$eval(attrs.validationClick); });\r\n },\r\n 60);\r\n }\r\n });\r\n };\r\n }\r\n ])\r\n //directive to call the google api for address and custom logic for address validation\r\n .directive('address',\r\n [\r\n function () {\r\n return {\r\n require: 'ngModel',\r\n scope: {\r\n callbackFn: '&',\r\n ngModel: '='\r\n },\r\n link: function (scope, element, attrs, model) {\r\n\r\n var options = {\r\n types: ['address'],\r\n componentRestrictions: { country: \"au\" },\r\n };\r\n scope.gPlace = new google.maps.places.Autocomplete(element[0], options);\r\n var addressElementArray = '';\r\n var pIndex, sCode, sIndex, qCode, pageId, navNum;\r\n element.on('change',\r\n function (element, attrs) {\r\n var addressElementArray = element.currentTarget.id.split('-');\r\n if (scope.$parent.navTab &&\r\n scope.$parent.page &&\r\n scope.$parent.navTab.number &&\r\n scope.$parent.page.number) {\r\n\r\n var responseId = scope.$parent.navTab.number + '-' + scope.$parent.page.number;\r\n if (addressElementArray.length === 4) {\r\n pIndex = addressElementArray[0];\r\n sCode = addressElementArray[1];\r\n sIndex = addressElementArray[2];\r\n qCode = addressElementArray[3];\r\n var question = { code: qCode };\r\n scope.$parent.responses[responseId][pIndex][sCode][sIndex][qCode + '-valid'\r\n ] = false;\r\n scope.$parent.utility.removeFromValidationErrors(null,\r\n responseId,\r\n pIndex,\r\n sCode,\r\n sIndex,\r\n qCode);\r\n element.currentTarget.setAttribute('aria-invalid', 'true');\r\n }\r\n }\r\n });\r\n var updatePlace = function () {\r\n var addressArray = null;\r\n var pIndex, sCode, sIndex, qCode, navNum;\r\n\r\n if (scope.gPlace &&\r\n scope.gPlace.getPlace() &&\r\n scope.gPlace.getPlace().address_components) {\r\n\r\n if (scope.$parent.navTab && scope.$parent.page) {\r\n var responseId = scope.$parent.navTab.number + '-' + scope.$parent.page.number;\r\n }\r\n var addressElementArray = element[0].id.split('-');\r\n if (addressElementArray.length === 4) {\r\n pIndex = addressElementArray[0];\r\n sCode = addressElementArray[1];\r\n sIndex = addressElementArray[2];\r\n qCode = addressElementArray[3];\r\n scope.$parent.responses[responseId][pIndex][sCode][sIndex][qCode + '-valid'] =\r\n true;\r\n var question = { code: qCode };\r\n\r\n scope.$parent.utility.removeFromValidationErrors(null,\r\n responseId,\r\n pIndex,\r\n sCode,\r\n sIndex,\r\n qCode);\r\n element[0].setAttribute('aria-invalid', 'false');\r\n }\r\n addressArray = scope.gPlace.getPlace().address_components;\r\n }\r\n scope.$apply(function () {\r\n model.$setViewValue(element.val());\r\n scope.callbackFn({\r\n arg1: addressArray\r\n });\r\n });\r\n }\r\n google.maps.event.addListener(scope.gPlace, 'place_changed', updatePlace);\r\n }\r\n };\r\n }\r\n ])\r\n .directive('changeOnKeyup',\r\n [\r\n function () {\r\n return function changeOnKeyupPostLink(scope, elem) {\r\n elem.on('keyup', elem.triggerHandler.bind(elem, 'change'));\r\n };\r\n }\r\n ])\r\n // directive to trigger enter key stroke on any element\r\n .directive('onFocusOut',\r\n [\r\n function () {\r\n return {\r\n scope: {\r\n focusOutCallback: '&'\r\n },\r\n link: function (scope, elem, attrs) {\r\n $(elem).focusout(function () {\r\n setTimeout(function () {\r\n var newFocus = $(\"*:focus\").attr(\"id\");\r\n if (!newFocus || newFocus.indexOf(attrs.focusOutId) < 0) {\r\n scope.$apply(function () {\r\n scope.focusOutCallback();\r\n });\r\n }\r\n },\r\n 50);\r\n });\r\n }\r\n }\r\n }\r\n ])\r\n .directive('ngEnter',\r\n function () {\r\n return {\r\n scope: {\r\n callbackFn: '&'\r\n },\r\n link: function (scope, element, attrs) {\r\n element.bind(\"keypress\",\r\n function (event) {\r\n if (event.which === 13) {\r\n scope.$apply(function () {\r\n scope.callbackFn();\r\n });\r\n event.preventDefault();\r\n }\r\n });\r\n }\r\n }\r\n })\r\n //this directive handles non numeric vales entered by the user for input types that expect a numric value\r\n .directive('filterInputType',\r\n function () {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, element, attrs, modelCtrl) {\r\n if (attrs.filterInputType == \"number\") {\r\n modelCtrl.$parsers.push(function (inputValue) {\r\n if (!isNaN(parseFloat(inputValue)) && (isFinite(inputValue))) {\r\n return parseFloat(inputValue);\r\n } else {\r\n return inputValue;\r\n }\r\n });\r\n }\r\n }\r\n };\r\n })\r\n //this directive handles address related validation error when address is entered manually\r\n .directive('resetAddressErrors',\r\n function () {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, element, attrs, modelCtrl) {\r\n if (attrs.resetAddressErrors) {\r\n element.on('change',\r\n function (element, attrs) {\r\n if (element.currentTarget &&\r\n element.currentTarget.getAttribute(\"reset-address-errors\")) {\r\n var manualAddress =\r\n JSON.parse(element.currentTarget.getAttribute(\"reset-address-errors\")\r\n .replace(/'/g, '\"'));\r\n var addressElementArray = element.currentTarget.id.split('-');\r\n if (scope.$parent.navTab &&\r\n scope.$parent.page &&\r\n scope.$parent.navTab.number &&\r\n scope.$parent.page.number) {\r\n var pIndex, sCode, sIndex, qCode, pageId, navNum;\r\n if (addressElementArray.length === 4) {\r\n pIndex = addressElementArray[0];\r\n sCode = addressElementArray[1];\r\n sIndex = addressElementArray[2];\r\n\r\n var responseId =\r\n scope.$parent.navTab.number + '-' + scope.$parent.page.number;\r\n if (addressElementArray.length === 4) {\r\n if (manualAddress.suburb) {\r\n scope.$parent.utility.removeFromValidationErrors(null,\r\n responseId,\r\n pIndex,\r\n sCode,\r\n sIndex,\r\n manualAddress.suburb);\r\n }\r\n if (manualAddress.state) {\r\n scope.$parent.utility.removeFromValidationErrors(null,\r\n responseId,\r\n pIndex,\r\n sCode,\r\n sIndex,\r\n manualAddress.state);\r\n }\r\n if (manualAddress.streetNumberName) {\r\n scope.$parent.utility.removeFromValidationErrors(null,\r\n responseId,\r\n pIndex,\r\n sCode,\r\n sIndex,\r\n manualAddress.streetNumberName);\r\n }\r\n if (manualAddress.postCode) {\r\n scope.$parent.utility.removeFromValidationErrors(null,\r\n responseId,\r\n pIndex,\r\n sCode,\r\n sIndex,\r\n manualAddress.postCode);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n };\r\n })\r\n //this directive caters to ng touch event for ipad and mobile devices for browsing the applications on manage apps screen\r\n .directive(\"ngTouchend\",\r\n function () {\r\n return {\r\n controller: [\r\n \"$scope\", \"$element\", function ($scope, $element) {\r\n\r\n $element.bind(\"touchend\", onTouchEnd);\r\n\r\n function onTouchEnd(event) {\r\n var method = $element.attr(\"ng-touchend\");\r\n $scope.$event = event;\r\n $scope.$apply(method);\r\n }\r\n }\r\n ]\r\n }\r\n })\r\n .directive('fastOptions',\r\n function () {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n transclude: true,\r\n link: function (scope, element, attrs, cntrller, transcludeFn) {\r\n var expression = attrs.fastOptions;\r\n\r\n var parts = expression.split(';').map(function (part) { return part.trim(); });\r\n\r\n // We must have at least the data, value and label to proceed\r\n if (parts.length < 3) {\r\n throw new Error(\r\n 'Expected expression of type: data; value = Id; label = Name; = \\'text\\'. But got: ' +\r\n expression);\r\n }\r\n\r\n // value\r\n var valueParts = parts[1].split('=').map(function (subPart) { return subPart.trim(); });\r\n if (valueParts.length !== 2) {\r\n throw new Error('Incorrect value. Expected expression of type: value = Id. But got: ' +\r\n parts[1]);\r\n }\r\n var valueExpression = valueParts[1];\r\n\r\n // label\r\n var labelParts = parts[2].split('=').map(function (subPart) { return subPart.trim(); });\r\n if (labelParts.length !== 2) {\r\n throw new Error('Incorrect label. Expected expression of type: label = Name. But got: ' +\r\n parts[2]);\r\n }\r\n var labelExpression = labelParts[1];\r\n\r\n // defaultValue\r\n var defaultValueExpression;\r\n if (parts.length > 3) {\r\n var defaultValueParts = parts[3].split('=')\r\n .map(function (subPart) { return subPart.trim(); });\r\n if (defaultValueParts.length !== 2 &&\r\n defaultValueParts[1].indexOf('\\'') == 0 &&\r\n defaultValueParts[1].lastIndexOf('\\'') == defaultValueParts[1].length - 1) {\r\n throw new Error(\r\n 'Incorrect defaultValue. Expected expression of type: defaultValue = \\'text\\'. But got: ' +\r\n parts[3]);\r\n }\r\n defaultValueExpression = defaultValueParts[1].substring(1, defaultValueParts[1].length - 1);\r\n }\r\n\r\n var collectionKey = parts[0];\r\n\r\n scope.$watchCollection(collectionKey,\r\n function (collection) {\r\n\r\n transcludeFn(function (clone) {\r\n element.append(clone);\r\n });\r\n\r\n var selectedValue = scope.$eval(attrs.ngModel) || '';\r\n\r\n var allOptions = '';\r\n var showDefaultOption = defaultValueExpression != undefined;\r\n _.forEach(collection,\r\n function (collectionItem) {\r\n\r\n var value = collectionItem[valueExpression];\r\n var label = collectionItem[labelExpression];\r\n\r\n var selectedHtml = '';\r\n if (value == selectedValue) {\r\n selectedHtml = 'selected=\"selected\"';\r\n showDefaultOption = false; // option is selected, hide default.\r\n }\r\n var optionHtml = '';\r\n\r\n allOptions += optionHtml;\r\n });\r\n if (showDefaultOption) {\r\n allOptions = '' +\r\n allOptions;\r\n }\r\n\r\n // as the options are added after the model may be already bound, \r\n // we need to remove the blank option that angular automatically adds\r\n var possibleBlankEntry = element.children().first();\r\n var value = possibleBlankEntry.val();\r\n if (value.indexOf('?') == 0 && value.lastIndexOf('?') == value.length - 1) {\r\n possibleBlankEntry.remove();\r\n }\r\n element.append(allOptions);\r\n });\r\n }\r\n };\r\n })\r\n .directive('themeLoader', ['departmentTheme', function (departmentTheme) {\r\n return {\r\n link: function (scope, element, attrs) {\r\n // Load the theme CSS dynamically based on the path\r\n var bodyTag = angular.element(document.querySelector('body'));\r\n\r\n if (departmentTheme.isDHVisible) {\r\n bodyTag.addClass(\"dhTheme\");\r\n }\r\n else if (departmentTheme.isDFFHVisible) {\r\n bodyTag.addClass(\"dffhTheme\");\r\n } else {\r\n if (window.location.href.indexOf(\"id_token\") > -1) {\r\n var adalRequest = sessionStorage.getItem(\"adal.login.request\");\r\n if (adalRequest && adalRequest.indexOf(\"DH\") > -1) {\r\n bodyTag.addClass(\"dhTheme\");\r\n }\r\n else if (adalRequest && adalRequest.indexOf(\"DFFH\") > -1) {\r\n bodyTag.addClass(\"dffhTheme\");\r\n }\r\n else\r\n bodyTag.addClass(\"standardTheme\");\r\n\r\n }\r\n else\r\n bodyTag.addClass(\"standardTheme\");\r\n }\r\n }\r\n };\r\n }])\r\n}\r\n ());\r\n","(function () {\r\n\r\n var formApp = angular.module(\"formApp\");\r\n\r\n formApp.controller('layoutController',\r\n [\r\n '$scope', '$timeout', '$interval', 'DataServices', 'UtilityServices', '$rootScope', 'Constants',\r\n function ($scope, $timeout, $interval, DataServices, UtilityServices, $rootScope, Constants) {\r\n $scope.utility = UtilityServices;\r\n\r\n $rootScope.$on(\"adal:acquireTokenFailure\",\r\n function () {\r\n $scope.utility.handleSessionTimeOut();\r\n });\r\n\r\n $scope.openFmsAdminSite = function () {\r\n DataServices.navigateToAdminFmsSite();\r\n }\r\n\r\n $scope.navs = {\r\n manageFeedbacks: Constants.Url.manageFeedbacks,\r\n manageComplaints: Constants.Url.manageComplaints,\r\n tools: Constants.Url.tools\r\n }; \r\n\r\n $scope.exitFms = function () {\r\n window.location.replace('https://google.com.au');\r\n };\r\n $timeout(function () {\r\n $scope.utility.setMenuVisibility();\r\n $scope.userFullName = DataServices.userFullName();\r\n $scope.salutation = $scope.userFullName ? ('Hello, ' + $scope.userFullName + '!') : '';\r\n $scope.showExitButton = $scope.salutation=='';\r\n }, 0);\r\n }]);\r\n}());\r\n\r\n","var WOVGprofileNumber = \"UA-2063136-9\"; /* DO NOT MODIFY */\r\nvar DEPTprofileNumber = \"UA-27023349-2\"; /* Set Department/Agency roll up profile number - if none exists, replace with \"UA-000000-0\". */\r\nvar SITEprofileNumber = \"UA-128387327-1\"; \r\n\r\n/* Set tracking code values */\r\nvar dept = \"dhhs\"; /* Set Department/Agency achronym/name. */\r\nvar site = \"feedback.dhhs.vic.gov.au\"; /* Set website's domain location - do NOT include \"www.\", unless the site is located ENTIRELY on \"www.\". Likewise, if the website is located ENTIRELY on a subdomain, insert it, e.g. \"subdomain.website.vic.gov.au\". */\r\nvar siteOnSubFolder = \"yes\"; /* Set this to \"yes\" if the website is located ENTIRELY on a dedicated subfolder, e.g \"website.vic.gov.au/subfolder\", otherwise, leave as \"no\". */\r\nvar subFolder = \"/uniquesigf43b46b996f751f8cef47f87dd4646fd/uniquesig0/ClientWeb/\"; /* Set the subfolder value only if the site is located ENTIRELY on a dedicated subfolder (include the leading forwardslash \"/\"). */\r\nvar cookiePath = subFolder;\r\n\r\n\r\n(function (i, s, o, g, r, a, m) {\r\n i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {\r\n (i[r].q = i[r].q || []).push(arguments)\r\n }, i[r].l = 1 * new Date(); a = s.createElement(o),\r\n m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)\r\n})(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\r\nga('create', WOVGprofileNumber, { 'name': 'WOVGprofileNumber' });\r\nga('create', DEPTprofileNumber, { 'name': 'DEPTprofileNumber' });\r\nga('create', SITEprofileNumber, { 'name': 'SITEprofileNumber' });\r\n\r\n//add ga to the footer links\r\njQuery('.footer__list_link').click(function () {\r\n var name = $(this).text();\r\n var href = $(this)[0].href;\r\n ga('SITEprofileNumber.send', 'event', 'click', name,\r\n {\r\n eventCategory: 'Footer: Outbound Link-' + href,\r\n eventAction: 'Click',\r\n eventLabel: href, \r\n transport: 'beacon'\r\n });\r\n});\r\n\r\n","(function () {\r\n\r\n var formApp = angular.module('formApp')\r\n .filter('fileSize', function () {\r\n return function (input) {\r\n const k = 1024;\r\n const roundTo = 2;\r\n input = input || '';\r\n return parseFloat((input / Math.pow(k, 2)).toFixed(roundTo));\r\n };\r\n })\r\n //set the controller to the code here - the controller uses DataServices.\r\n formApp.controller('documentController', ['$scope', '$window', '$http', 'DataServices', 'UtilityServices', 'ValidationService', 'FileUploader', '$log', '$location', '$routeParams', '$filter', '$anchorScroll', '$timeout', '$rootScope', 'Constants', 'fileSizeFilter', function ($scope, $window, $http, DataServices, UtilityServices, ValidationService, FileUploader, $log, $location, $routeParams, $filter, $anchorScroll, $timeout, $rootScope, Constants, fileSizeFilter) {\r\n const max_file_limit = 20;\r\n const max_file_size = 26214400;\r\n const max_file_total_size = 157286400;\r\n\r\n $scope.currentPageIndex = 0;\r\n $scope.currentUploadingFile = null;\r\n $scope.currentFileAttached = \"\";\r\n $scope.attachment = {};\r\n $scope.isViewing = [];\r\n $scope.isRemoving = [];\r\n\r\n //Utility Services\r\n $scope.utility = UtilityServices;\r\n\r\n $scope.isDH = function () {\r\n if ($location.path().indexOf('DH') > -1) {\r\n $scope.IsDHVisible = true;\r\n return true;\r\n }\r\n else {\r\n $scope.IsDHVisible = false;\r\n return false;\r\n }\r\n }\r\n\r\n //create the file upload for each attachment\r\n function createFileUploaderForAttachment() {\r\n\r\n if (DataServices.isAuthenticated()) {\r\n var fileUploader = $scope.uploader = new FileUploader({ headers: { 'Authorization': 'Bearer ' + $window.sessionStorage.getItem('adal.access.token.key' + $window.__env.AzureADSettings.endpoints[$window.__env.apiUrl]) }, withCredentials: true });\r\n } else {\r\n var fileUploader = $scope.uploader = new FileUploader({});\r\n }\r\n\r\n if (!$scope.responses.documents) {\r\n $scope.responses.documents = [];\r\n }\r\n if ($scope.responses.documents && $scope.responses.documents.length > 0) {\r\n _($scope.responses.documents).forEach(function (docsAlreadyUploaded) {\r\n if (docsAlreadyUploaded.documentId) {\r\n var objectToInsert = {\r\n file: {\r\n name: docsAlreadyUploaded.name,\r\n size: docsAlreadyUploaded.size,\r\n type: docsAlreadyUploaded.type,\r\n isFocus: docsAlreadyUploaded.isFocus\r\n },\r\n documentId: docsAlreadyUploaded.documentId,\r\n uploadDateTime: docsAlreadyUploaded.uploadDateTime,\r\n isUploaded: true,\r\n isReady: false,\r\n isDeletedDisabled: docsAlreadyUploaded.isDeleteDisabled\r\n };\r\n fileUploader.queue.push(objectToInsert);\r\n }\r\n });\r\n }\r\n\r\n //this method gets executed before the upload begins\r\n fileUploader.onBeforeUploadItem = function (fileItem) {\r\n fileItem.isFocus = false;\r\n $scope.currentProgressMessage = \"Uploading \" + fileItem.file.name + \" file\";\r\n }\r\n fileUploader.filters.push({\r\n name: 'customFilter',\r\n fn: function (item /*{File|FileLikeObject}*/, options) {\r\n //donot allow more then 10 files for one attachment\r\n if (this.queue.length >= max_file_limit) {\r\n $scope.utility.openPopup('totalFileNumberperAttachment');\r\n document.getElementById('file-input').value = \"\"\r\n }\r\n return this.queue.length < max_file_limit;\r\n }\r\n });\r\n\r\n //method executes after the file is chosen in file uploader\r\n fileUploader.onAfterAddingFile = function (fileItem) {\r\n document.getElementById('file-input').value = \"\"\r\n if (fileItem.file) {\r\n if (isValidExtensions(fileItem.file.type, fileItem.file.name)) {\r\n if (parseInt(fileItem.file.size) > max_file_size) {\r\n $scope.utility.openPopup('fileItemSizeLimit');\r\n fileItem.cancel();\r\n fileItem.remove();\r\n return;\r\n }\r\n validateAndUpload(fileItem);\r\n }\r\n else {\r\n fileItem.cancel();\r\n fileItem.remove();\r\n $scope.utility.openPopup('invalidDocumentType');\r\n }\r\n }\r\n };\r\n\r\n\r\n //method executes after file upload succeeds or fails\r\n fileUploader.onCompleteItem = function (fileItem, response, status, headers) {\r\n $scope.currentProgressMessage = \"Uploaded \" + fileItem.file.name + \" file\";\r\n fileItem.isFocus = true;\r\n };\r\n\r\n //method exceutes after file upload starts\r\n fileUploader.onProgressItem = function (fileItem, progress) {\r\n if (fileItem) {\r\n $scope.currentUploadingFile = fileItem;\r\n }\r\n };\r\n\r\n //method executes when file upload succeeds\r\n fileUploader.onSuccessItem = function (fileItem, response, status, headers) {\r\n document.getElementById('file-input').value = \"\"\r\n if (response.documentId && response.documentOperationStatus == 3) {\r\n fileItem.documentId = response.documentId;\r\n\r\n _($scope.responses.documents).forEach(function (value) {\r\n //check for file name aswell\r\n if (!value.documentId && fileItem.file.name == value.name) {\r\n value.documentId = response.documentId;\r\n value.isDocUploaded = true;\r\n value.isDeletedDisabled = false;\r\n }\r\n });\r\n DataServices.responseInfo.responses.documents = $scope.responses.documents;\r\n DataServices.responseInfo.incidentId = response.parentId;\r\n DataServices.trackEventsWithGA('Upload Document ' + $scope.pageUrl, 'Click Upload', 'Successful upload document.');\r\n }\r\n else if (response.documentOperationStatus == 2) {\r\n fileItem.isUploaded = false;\r\n fileItem.remove();\r\n onErrorSave('errorConcurrencyUploadDoc', 'Upload attachment');\r\n }\r\n else if (!response.documentId) {\r\n fileItem.isUploaded = false;\r\n fileItem.remove();\r\n onErrorSave('errorUploadDoc', 'Upload attachment');\r\n }\r\n else {\r\n fileItem.isUploaded = false;\r\n fileItem.remove();\r\n onErrorSave('errorUploadDoc', 'Upload attachment');\r\n }\r\n };\r\n\r\n fileUploader.onErrorItem = function (fileItem, response, status, headers) {\r\n document.getElementById('file-input').value = \"\"\r\n fileItem.isUploaded = false;\r\n fileItem.remove();\r\n onErrorSave('errorUploadDoc', 'Upload attachment');\r\n };\r\n return fileUploader;\r\n }\r\n\r\n $scope.initPageAttachments = function () {\r\n //create file uploaders for the attachments \r\n $scope.attachment.fileUploader = createFileUploaderForAttachment();\r\n }\r\n\r\n //deletes attachments for the users after confirmation\r\n $scope.removeFileItem = function (fileItem) {\r\n if (fileItem.documentId) {\r\n var params = fileItem.file;\r\n $scope.utility.openPopup('confirmDeleteFile', params).result.then(\r\n function (result) {\r\n if (!fileItem.documentId) {\r\n fileItem.remove();\r\n }\r\n else {\r\n $scope.isRemoving[fileItem.documentId] = true;\r\n DataServices.deleteDocument(fileItem.documentId)\r\n .then(function (response) {\r\n var data = response && response.data;\r\n if (data && data.documentOperationStatus == \"3\") {\r\n\r\n //below remove deletes the item from the queue, cannot use fileItem.remove();as fileitem would not be available\r\n _.remove($scope.attachment.fileUploader.queue, function (queueItem) {\r\n return queueItem.documentId === fileItem.documentId;\r\n });\r\n\r\n _.remove($scope.responses.documents, function (item) {\r\n return item.documentId === fileItem.documentId;\r\n });\r\n\r\n $scope.responses.documents = _.uniqWith($scope.responses.documents, _.isEqual);\r\n DataServices.responseInfo.responses.documents = $scope.responses.documents;\r\n DataServices.responseInfo.lastUpdatedTime = data.lastUpdatedTime;\r\n\r\n DataServices.trackEventsWithGA('Delete Document ' + $scope.pageUrl, 'Click Remove attachment', 'Successful delete document.');\r\n }\r\n else if (data && data.documentOperationStatus == \"2\") {\r\n fileItem.isDeletedDisabled = false;\r\n $scope.utility.openPopup('errorConcurrencyUploadDoc', { lastUpdatedBy: data.LastUpdatedBy });\r\n }\r\n else {\r\n fileItem.isDeletedDisabled = false;\r\n onErrorSave('errorDeleteDoc', 'Delete Attachment');\r\n }\r\n $scope.isRemoving[fileItem.documentId] = false;\r\n }, function (data) {\r\n if (data) {\r\n $scope.isRemoving[fileItem.documentId] = false;\r\n fileItem.isDeletedDisabled = false;\r\n onErrorSave('unAuthorisedAccess', 'Delete Attachment');\r\n } else {\r\n $scope.isRemoving[fileItem.documentId] = false;\r\n fileItem.isDeletedDisabled = false;\r\n onErrorSave('errorDeleteDoc', 'Delete Attachment');\r\n }\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n fileItem.isDeletedDisabled = false;\r\n onErrorSave('errorDeleteDoc', 'Delete Attachment');\r\n }\r\n fileItem.isDeletedDisabled = false;\r\n }\r\n\r\n //This method gets the uploaded file from the database and shows it to the user\r\n $scope.viewDocument = function (fileItem) {\r\n var standalone = window.navigator.standalone;\r\n var userAgent = window.navigator.userAgent.toLowerCase();\r\n var safari = /safari/.test(userAgent);\r\n var ios = /iphone|ipod|ipad/.test(userAgent);\r\n\r\n $scope.isViewing[fileItem.documentId] = true;\r\n DataServices.viewDocument(fileItem.documentId)\r\n .then(function (response) {\r\n var data = response && response.data;\r\n try {\r\n var file = new Blob([data], { type: fileItem.file.type }, { name: fileItem.file.name });\r\n saveAs(file, fileItem.file.name);\r\n }\r\n catch (e) {\r\n $scope.utility.openPopup('errorDownloadDoc');\r\n }\r\n $scope.isViewing[fileItem.documentId] = false;\r\n }, function () {\r\n $scope.utility.openPopup('errorDownloadDoc');\r\n $scope.isViewing[fileItem.documentId] = false;\r\n });\r\n }\r\n\r\n //This function enable the user to open a file dialog using enter key stroke\r\n $scope.upload = function (id) {\r\n $timeout(function () {\r\n angular.element('#' + id).trigger('click');\r\n }, 100);\r\n }\r\n\r\n //this method restricts the accepted file types to pdf and jpeg\r\n $scope.acceptedFileTypes = (function () {\r\n var allowedFileTypes = [\r\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n 'image/jpg',\r\n 'image/jpeg',\r\n 'image/png',\r\n 'image/tiff',\r\n 'image/tif',\r\n 'application/pdf',\r\n 'text/plain',\r\n 'application/msword',\r\n 'application/vnd.ms-excel',\r\n 'application/octet-stream',\r\n 'application/x-zip-compressed'\r\n ].join();\r\n var userAgent = window.navigator.userAgent.toLowerCase();\r\n var ios = /iphone|ipod|ipad/.test(userAgent);\r\n if (ios) {\r\n allowedFileTypes = ''; //iOS doesn't support this attribute. so don't restrict\r\n }\r\n return allowedFileTypes;\r\n })();\r\n\r\n //verify if a file extension is valid\r\n var isValidExtensions = function (fileType, fileName) {\r\n switch (fileType) {\r\n case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':\r\n case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\r\n case 'image/jpg':\r\n case 'image/jpeg':\r\n case 'image/png':\r\n case 'image/tiff':\r\n case 'image/tif':\r\n case 'application/pdf':\r\n case 'text/plain':\r\n case 'application/msword':\r\n case 'application/vnd.ms-excel':\r\n case 'application/zip':\r\n return true;\r\n case 'application/octet-stream':\r\n case 'application/x-zip-compressed':\r\n return fileName.substring(fileName.length - 4) === '.zip';\r\n default:\r\n return false;\r\n }\r\n return false;\r\n }\r\n\r\n //validate the document for custom business requirement and then upload and save the file\r\n var validateAndUpload = function (fileItem) {\r\n var totalFileSize = 0;\r\n for (var i = 0; i < fileItem.uploader.queue.length; i++) {\r\n totalFileSize = parseInt(totalFileSize) + parseInt(fileItem.file.size);\r\n }\r\n if (totalFileSize > max_file_total_size) {\r\n fileItem.cancel();\r\n fileItem.remove();\r\n $scope.utility.openPopup('totalFileSize');\r\n return;\r\n }\r\n else {\r\n var uploadDateTimeString = new Date().toLocaleString('en-AU', { day: 'numeric', month: 'numeric', year: 'numeric', hour: 'numeric', minute: 'numeric', hour12: false });\r\n //a brand new attachment for the question needs to be uploaded\r\n var newDocumentToUpload = {\r\n documentId: undefined,\r\n uploadDateTime: uploadDateTimeString,\r\n name: fileItem.file.name,\r\n size: fileItem.file.size,\r\n type: fileItem.file.type,\r\n isFocus: fileItem.file.isFocus,\r\n incidentId: DataServices.responseInfo.incidentId,\r\n isDocUploaded: false\r\n };\r\n fileItem.uploadDateTime = uploadDateTimeString;\r\n $scope.responses.documents.push(newDocumentToUpload);\r\n\r\n if (DataServices.isAuthenticated()) {\r\n fileItem.url = Constants.Url.getSaveDocumentURL;\r\n fileItem.headers = { 'Authorization': 'Bearer ' + $window.sessionStorage.getItem('adal.access.token.key' + $window.__env.AzureADSettings.endpoints[$window.__env.apiUrl]) };\r\n } else {\r\n fileItem.url = Constants.Url.getPublicSaveDocumentURL;\r\n }\r\n\r\n if (DataServices.responseInfo.incidentId !== null) {\r\n\r\n fileItem.formData.push({ parentId: DataServices.responseInfo.incidentId });\r\n fileItem.upload();\r\n } else {\r\n //call the save on function to create a incident Id\r\n $scope.isDH();\r\n DataServices.saveIncidentForDocumentUpload($scope.IsDHVisible).then(\r\n // sucess\r\n function (result) {\r\n\r\n fileItem.formData.push({ parentId: DataServices.responseInfo.incidentId });\r\n fileItem.upload();\r\n }\r\n );\r\n }\r\n }\r\n }\r\n\r\n //custom method that executes when server returns a error \r\n var onErrorSave = function (popupCode, sourceEvent) {\r\n $scope.utility.openPopup(popupCode);\r\n DataServices.trackEventsWithGA('Error occured during document action: ' + sourceEvent + 'on page:' + $scope.pageUrl, 'Document action', 'Document action failed.');\r\n };\r\n\r\n //method calls when page loads\r\n $scope.initPageAttachments();\r\n\r\n }]);\r\n}());","(function () {\r\n //get the formApp module\r\n var formApp = angular.module('formApp');\r\n\r\n //set the controller to the code here - the controller uses DataServices.\r\n formApp.controller('followUpController',\r\n ['$scope', '$http', '$q', '$controller', 'DataServices', 'UtilityServices', 'ValidationService', '$location', '$routeParams', '$rootScope', 'Constants', 'feedbackType', 'incidentId',\r\n function ($scope, $http, $q, $controller, DataServices, UtilityServices, ValidationService, $location, $routeParams, $rootScope, Constants, feedbackType, incidentId) {\r\n\r\n // Store the type of Feedback we are co-orindating for\r\n $scope.feedbackType = feedbackType;\r\n $scope.incidentId = incidentId;\r\n\r\n // Setup the appropriate template and URL\r\n switch (feedbackType) {\r\n case Constants.FeedbackType.Privacy:\r\n $scope.coordinationTemplate = Constants.ConfigTemplate.incidentCoordination;\r\n $scope.firstCoordinationPageUrl = Constants.Url.firstFollowUpFormPage;\r\n break;\r\n\r\n case Constants.FeedbackType.Complaint:\r\n $scope.coordinationTemplate = Constants.ConfigTemplate.feedbackCoordination;\r\n $scope.firstCoordinationPageUrl = Constants.Url.firstFeedbackCoordinationFormPage;\r\n break;\r\n }\r\n\r\n\r\n if ($scope.pageId == \"1-1\") {\r\n $scope.originalResponse = angular.copy($scope.responses);\r\n }\r\n\r\n // return the user to coordination page for the feedback type\r\n $scope.returnToCoordinationPage = function () {\r\n\r\n // Reset original response (used to compare on save)\r\n DataServices.originalResponse = {};\r\n DataServices.resetResponseInfo();\r\n DataServices.responseInfo.responses = {};\r\n DataServices.responseInfo.status = 1;\r\n DataServices.responseInfo.incidentId = $scope.incidentId;\r\n DataServices.responseInfo.incidentRef = $scope.incidentRef;\r\n\r\n DataServices.getConfigurationUsingCache($scope.coordinationTemplate, null, null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n $location.path($scope.firstCoordinationPageUrl);\r\n }, function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n });\r\n }\r\n\r\n $scope.callSaveFollowUp = function () {\r\n $scope.isSaving = true;\r\n\r\n return DataServices.saveFollowUp($scope.feedbackType)\r\n .then(function (response) {\r\n if (response.data && response.data.status === 2) {\r\n return $scope.utility.openPopup('savedElsewhere', { lastUpdatedBy: response.data.lastUpdatedBy }).result;\r\n } else {\r\n if (response.data && response.data.id) {\r\n DataServices.trackEventsWithGA('Save action in ' + $scope.pageUrl, 'Click Save followup', 'Successfully Saved followup');\r\n return $scope.utility.openPopup('successSaveReport').result;\r\n } else {\r\n return $scope.utility.showNotification(true, 'internalError', null, true);\r\n }\r\n }\r\n }, function (response) {\r\n DataServices.trackEventsWithGA('Error occured during Saving in ' + $scope.pageUrl, 'Click Save followup', 'Failed to Save on followup');\r\n return $scope.utility.openPopup('errorSave').result;\r\n })\r\n .finally(function () {\r\n $scope.isSaving = false;\r\n });\r\n };\r\n\r\n $scope.callSubmitFollowUp = function () {\r\n $scope.isSaving = true;\r\n\r\n return DataServices.submitFollowUp($scope.feedbackType)\r\n .then(function (response) {\r\n if (response.data && response.data.status === 2) {\r\n return $scope.utility.openPopup('savedElsewhere', { lastUpdatedBy: response.data.lastUpdatedBy }).result;\r\n }\r\n else {\r\n if (response.data && response.data.id) {\r\n DataServices.trackEventsWithGA('Submit action in ' + $scope.pageUrl, 'Click Submit Followup', 'Successfully Submitted Followup');\r\n $scope.originalResponse = angular.copy($scope.responses);\r\n return $scope.utility.openPopup('successSubmitReport').result;\r\n }\r\n else {\r\n return $scope.utility.showNotification(true, 'internalError',null, true);\r\n }\r\n }\r\n }, function (response) {\r\n DataServices.trackEventsWithGA('Error occured during Submitting in ' + $scope.pageUrl, 'Click Submit Followup', 'Successfully Submitted Followup');\r\n return $scope.utility.openPopup('errorSubmit').result;\r\n })\r\n .finally(function () {\r\n $scope.isSaving = false;\r\n });\r\n };\r\n \r\n \r\n $scope.callCancelFollowUp = function () {\r\n\r\n if ($scope.isPageEditable && $scope.confirmUserCancel()) {\r\n $scope.utility.openPopup('warnUserBeforeCancel').result.then(\r\n function (data) {\r\n if (data.result == \"thirdButtonClick\") {\r\n if ($scope.status === Constants.FollowUpStatus.submitted) {\r\n // submit the changes \r\n $scope.callSubmitFollowUp().then(function () {\r\n $scope.returnToCoordinationPage();\r\n });\r\n }\r\n else {\r\n // save changed\r\n $scope.callSaveFollowUp().then(function () {\r\n $scope.returnToCoordinationPage();\r\n });\r\n }\r\n }\r\n else {\r\n $scope.returnToCoordinationPage();\r\n }\r\n });\r\n }\r\n else {\r\n $scope.returnToCoordinationPage();\r\n }\r\n };\r\n }]);\r\n}());","(function () {\r\n\r\n var formApp = angular.module('formApp');\r\n\r\n // this controller is use executes the functionality in introduction page\r\n formApp.controller('introductionController',\r\n ['$scope','$rootScope', '$location', '$timeout', 'UtilityServices', 'DataServices', 'Constants',\r\n function ($scope, $rootScope, $location, $timeout, UtilityServices, DataServices, Constants) {\r\n\r\n // this sets the page title\r\n document.title = 'Feedback Management System Introduction page';\r\n\r\n DataServices.incidentSubmitted = false;\r\n\r\n $scope.isLoading = false;\r\n if ($location.path().indexOf('DH') > -1) {\r\n $scope.IsDHVisible = true;\r\n //return true;\r\n }\r\n else {\r\n $scope.IsDHVisible = false;\r\n }\r\n if ($location.path().indexOf('DFFH') > -1) {\r\n $scope.IsDFFHVisible = true;\r\n //return true;\r\n }\r\n else {\r\n $scope.IsDFFHVisible = false;\r\n }\r\n \r\n\r\n // this gets and set the incident config data \r\n var getConfigDataForIncidentAndRedirect = function () {\r\n $scope.isLoading = true;\r\n DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.incident, null, null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n $location.path(Constants.Url.firstIncidentFormPage);\r\n })\r\n .finally(function () {\r\n $scope.isLoading = false;\r\n });\r\n }\r\n\r\n $scope.utility = UtilityServices;\r\n\r\n $scope.createIncident = function () {\r\n setDefaultValues();\r\n getConfigDataForIncidentAndRedirect();\r\n $rootScope.allowFormNavigation = true;\r\n };\r\n\r\n var setDefaultValues = function () {\r\n DataServices.responseInfo.responses = {};\r\n DataServices.responseInfo.lastUpdatedTime = null;\r\n DataServices.responseInfo.incidentId = null;\r\n DataServices.responseInfo.incidentRef = null;\r\n DataServices.responseInfo.reportedDate = null;\r\n DataServices.responseInfo.status = null;\r\n DataServices.responseInfo.submittedDate = null;\r\n }\r\n }]);\r\n}());","(function () {\r\n\r\n var formApp = angular.module('formApp');\r\n\r\n // this controller is use executes the functionality in feedback landing page\r\n formApp.controller('landingController', ['$scope', '$rootScope', '$location', '$timeout', 'UtilityServices', 'DataServices', 'Constants',\r\n function ($scope, $rootScope, $location, $timeout, UtilityServices, DataServices, Constants) {\r\n\r\n // this sets the page title\r\n document.title = 'Feedback Management System';\r\n\r\n DataServices.incidentSubmitted = false;\r\n\r\n $scope.isLoading = false;\r\n $scope.utility = UtilityServices;\r\n \r\n $scope.department = Constants.Url.landing;\r\n \r\n\r\n // this gets and set the config data \r\n var getConfigDataAndRedirect = function (templateId, destinationPath) {\r\n\r\n $scope.isLoading = true;\r\n \r\n \r\n setDefaultValues();\r\n DataServices.validationErrors = [];\r\n\r\n DataServices.getConfigurationUsingCache(templateId, null, null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n $location.path(destinationPath);\r\n })\r\n .finally(function () {\r\n $scope.isLoading = false;\r\n });\r\n\r\n $rootScope.allowFormNavigation = true;\r\n }\r\n\r\n $scope.createFeedback = function () {\r\n getConfigDataAndRedirect(Constants.ConfigTemplate.complaint, Constants.Url.firstComplaintFormPage);\r\n }\r\n\r\n var setDefaultValues = function () {\r\n DataServices.responseInfo.responses = {};\r\n DataServices.responseInfo.lastUpdatedTime = null;\r\n DataServices.responseInfo.incidentId = null;\r\n DataServices.responseInfo.incidentRef = null;\r\n DataServices.responseInfo.reportedDate = null;\r\n DataServices.responseInfo.status = null;\r\n DataServices.responseInfo.submittedDate = null;\r\n }\r\n }]);\r\n}());","(function () {\r\n\r\n var formApp = angular.module('formApp');\r\n // this controller is used to invoke all the error messages, alerts and confirmation messages.\r\n formApp.controller(\"modalPopupController\", ['$scope', '$uibModalInstance', '$filter', 'DataServices', 'UtilityServices', 'popupCode', 'popupParams', 'Constants', function ($scope, $uibModalInstance, $filter, DataServices, UtilityServices, popupCode, popupParams, Constants) {\r\n\r\n $scope.utility = UtilityServices;\r\n $scope.configData = DataServices.configData;\r\n $scope.popup = {};\r\n $scope.params = {};\r\n $scope.errorMessages = [];\r\n $scope.response = {};\r\n\r\n if (window.location.href.indexOf('DH') > -1) {\r\n $scope.IsDHVisible = true;\r\n //return true;\r\n }\r\n else {\r\n $scope.IsDHVisible = false;\r\n }\r\n if (window.location.href.indexOf('DFFH') > -1) {\r\n $scope.IsDFFHVisible = true;\r\n //return true;\r\n }\r\n else {\r\n $scope.IsDFFHVisible = false;\r\n }\r\n\r\n $scope.popup = Constants.Popup[popupCode];\r\n if (popupCode == 'privacyNotice') {\r\n if (sessionStorage.getItem('popupNoticeState') != 'shown') {\r\n // Issuing a Privacy notice for Complaints users\r\n $scope.popup = {\r\n code: 'privacyNotice',\r\n title: 'Privacy Notice',\r\n text: 'You are about to access FMS Complaints and the records it contains. You must only search for and access records that you need to do your job. You must not access any record that is not needed for your job, and in particular you must not access records that are not relevant to your department. Unauthorised access to records may be a breach of privacy laws, your legal obligations as a staff member and the VPS Code of Conduct, and may result in disciplinary action and legal liability. To gain access to FMS Complaints you must click ‘AGREE’, acknowledging you have read and understood this notice; if you do not do this you will not be given access.',\r\n type: 'confirm',\r\n okButtonText: 'Agree',\r\n cancelButtonText: 'Disagree',\r\n thirdButtonText: ''\r\n };\r\n sessionStorage.setItem('popupNoticeState', 'shown')\r\n }\r\n }\r\n \r\n\r\n if (popupCode == 'invalidUser') {\r\n \r\n // Issuing an Unauthorised user notice to the users\r\n $scope.popup = {\r\n code: 'unauthorisedUser',\r\n title: 'Unauthorised User',\r\n text: 'You are not authorised to access this application. Please check your Url or contact your administrator.'\r\n };\r\n }\r\n\r\n // Get popup config from configData\r\n // (NOTE: popup might be falsy if DataServices.configData has not been loaded yet - for example, when the call to getConfigData fails and we try to display the error popup)\r\n if ($scope.popup === null || $scope.popup === undefined) {\r\n popup = $filter('filter')($scope.configData && $scope.configData.popups, { code: popupCode }, true);\r\n $scope.popup = popup && popup[0];\r\n }\r\n \r\n if (!$scope.popup && $scope.configData) {\r\n // Issuing a generic error message if DataServices.configData is not available or does not contain the requested popup\r\n $scope.popup = {\r\n severity: 'error',\r\n title: 'Unknown Error',\r\n text: 'An unknown error has occurred. Please reload the FMS application.',\r\n type: 'info',\r\n okButtonText: 'Close'\r\n };\r\n }\r\n\r\n if ($scope.popup.questions) {\r\n $scope.questions = $scope.popup.questions;\r\n }\r\n\r\n if (popupParams) {\r\n $scope.params = popupParams;\r\n }\r\n\r\n //this function is called to accept the message.\r\n $scope.ok = function () {\r\n if ($scope.validatePopUp().length == 0) {\r\n if ($scope.popup.code == 'privacyNotice') {\r\n sessionStorage.setItem('popupNoticeAgreed', 'shown')\r\n }\r\n //$uibModalInstance.close('ok');\r\n var result = { result: 'ok', outParams: $scope.response };\r\n $uibModalInstance.close(result);\r\n }\r\n };\r\n\r\n // this function is called on click of Third Button\r\n $scope.popupThirdButton = function () {\r\n if ($scope.validatePopUp().length == 0) {\r\n //$uibModalInstance.close('ok');\r\n var result = { result: 'thirdButtonClick', outParams: $scope.response };\r\n $uibModalInstance.close(result);\r\n }\r\n };\r\n\r\n\r\n // this function is called to cancel the operation\r\n $scope.cancel = function () {\r\n if ($scope.popup.code == 'privacyNotice') {\r\n $location.path('/logout');\r\n }\r\n else {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n };\r\n\r\n // validate popup questions\r\n $scope.validatePopUp = function () {\r\n $scope.errorMessages = [];\r\n angular.forEach($scope.questions, function (value) {\r\n $scope.validateQuestion(value.code);\r\n });\r\n return $scope.errorMessages;\r\n }\r\n\r\n // validate single question\r\n $scope.validateQuestion = function (code) {\r\n $scope.removeError(code);\r\n if (!$scope.response[code]) {\r\n var errorQuestion = _.find($scope.questions, function (q) { return q.code == code; });\r\n var errorValidation = _.find(errorQuestion.validations, function (v) { return v.level == \"inline\"; });\r\n if (errorValidation) {\r\n $scope.errorMessages.push({ \"code\": code, \"controlType\": errorQuestion.controlType, \"inlineMessage\": errorValidation.inlineMessage });\r\n $scope.utility.setQuestionErrorState(code, true);\r\n }\r\n } else {\r\n $scope.utility.setQuestionErrorState(code, false);\r\n }\r\n }\r\n\r\n // clears error from question\r\n $scope.removeError = function (code) {\r\n _.remove($scope.errorMessages, function (e) { return e.code === code; });\r\n }\r\n\r\n // resets response for each question\r\n var clearResponses = function () {\r\n angular.forEach($scope.questions, function (value) {\r\n $scope.response[value.code] = null;\r\n });\r\n }\r\n\r\n // Filter for typeahead to ensure it only searches from the beginning of the word and will consider spaces.\r\n $scope.typeAheadStartsWithFilter = function (option, viewValue) {\r\n // if option.matchingText is specified, use option.matchingText instead of option.text\r\n return option.matchingText ?\r\n (option.matchingText.substr(0, viewValue.length).toLowerCase() == viewValue.toLowerCase()) :\r\n (option.text && option.text.substr(0, viewValue.length).toLowerCase() == viewValue.toLowerCase());\r\n }\r\n\r\n clearResponses();\r\n }]);\r\n}());","(function () {\r\n //get the formApp module\r\n var formApp = angular.module('formApp');\r\n // this controller will take care of the navigation bar\r\n formApp.controller('navigationController', ['$scope', 'DataServices', 'UtilityServices', 'ValidationService', '$filter', '$location', function ($scope, DataServices, UtilityServices, ValidationService, $filter, $location) {\r\n $scope.utility = UtilityServices;\r\n $scope.vs = ValidationService; //required to be able to eval page.condition expressions from the survey JSON on this scope\r\n $scope.curPageNumber = 0;\r\n\r\n $scope.init = function (configData, curPageNumber) {\r\n $scope.configData = configData;\r\n $scope.curPageNumber = curPageNumber;\r\n }\r\n\r\n // Create a list of the page info so it can be displayed in the progress meter\r\n var index = 0;\r\n $scope.pageList = new Array();\r\n $.each($filter('filter')($scope.configData.navigationTabs, { includeInProgress: true }, false), function () {\r\n $scope.pageList.push({ index: index, number: this.number, title: this.title, pages: this.pages });\r\n index++;\r\n });\r\n\r\n // Navigates to a specific page from the progress bar\r\n $scope.goToPage = function (tabNo, pageUrl) {\r\n curPath = $location.$$path.substring(1, $location.$$path.indexOf('/', 1));\r\n var dhordffhPath = $location.$$path.split('/')[2];\r\n if (!$scope.page.exitCondition) {\r\n if ($location.path().indexOf('DFFH') > -1) {\r\n $location.path('DFFH/'+ dhordffhPath + '/' + tabNo + \"/\" + pageUrl);\r\n }\r\n else if ($location.path().indexOf('DH') > -1) {\r\n $location.path('DH/' + dhordffhPath + '/' + tabNo + \"/\" + pageUrl);\r\n }\r\n else {\r\n $location.path(curPath + '/' + tabNo + \"/\" + pageUrl);\r\n }\r\n }\r\n else {\r\n var successFunction = function () {\r\n if ($location.path().indexOf('DFFH') > -1) {\r\n $location.path('DFFH/' + dhordffhPath + '/' + tabNo + \"/\" + pageUrl);\r\n }\r\n else if ($location.path().indexOf('DH') > -1) {\r\n $location.path('DH/' + dhordffhPath + '/' + tabNo + \"/\" + pageUrl);\r\n }\r\n else {\r\n $location.path(curPath + '/' + tabNo + \"/\" + pageUrl);\r\n }\r\n };\r\n var failureFunction = function () { $scope.utility.openPopup($scope.page.exitConditionPopup); };\r\n $scope.$eval($scope.page.exitCondition, { successFunction: successFunction, failureFunction: failureFunction, nextPageUrl: pageUrl });\r\n }\r\n }\r\n\r\n // Navigate to a specific navigation tab from the progress bar\r\n $scope.goToNavigationTab = function (tabNo) {\r\n // go to the first page in the selected tab\r\n var navTab = _.find($scope.configData.navigationTabs, function (o) { return o.number == tabNo; });\r\n var pageUrl = navTab.pages[0].url;\r\n\r\n $scope.goToPage(tabNo, pageUrl);\r\n }\r\n\r\n $scope.isDHReadOnlyComplaint = function () {\r\n if (($location.path().indexOf('DH/complaint') > -1) || ($location.path().indexOf('DH/complaintRegistered') > -1)) {\r\n if ($scope.IsDHVisible && $scope.isPageEditable === false) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n }]);\r\n}());","/// \r\n\r\n(function () {\r\n //get the formApp module\r\n var formApp = angular.module('formApp');\r\n\r\n //set the controller to the code here - the controller uses DataServices.\r\n formApp.controller('questionController', ['$scope', '$http', 'DataServices', 'UtilityServices', 'ValidationService', '$log', '$location', '$routeParams', '$filter', '$anchorScroll', '$timeout', '$rootScope', 'Constants', function ($scope, $http, DataServices, UtilityServices, ValidationService, $log, $location, $routeParams, $filter, $anchorScroll, $timeout, $rootScope, Constants) {\r\n //Constants\r\n $scope.Constants = Constants;\r\n\r\n\r\n\r\n //DataServices\r\n $scope.configData = DataServices.configData;\r\n\r\n\r\n\r\n $scope.gaConfigData = DataServices.gaConfigData;\r\n\r\n $scope.template = DataServices.responseInfo.template;\r\n $scope.versionNumber = DataServices.responseInfo.versionNumber;\r\n $scope.role = DataServices.responseInfo.role;\r\n $scope.responses = DataServices.responseInfo.responses;\r\n\r\n $scope.sessionId = DataServices.sessionId;\r\n $scope.validatedPages = DataServices.validatedPages;\r\n $scope.validationErrors = DataServices.validationErrors;\r\n $scope.isAuthenticated = DataServices.isAuthenticated();\r\n\r\n //Utility Services\r\n $scope.utility = UtilityServices;\r\n $scope.vs = ValidationService; //required to be able to eval page.condition expressions from the survey JSON on this scope \r\n\r\n //Page navigation\r\n $scope.navTabNum = parseInt($routeParams.navTabNum);\r\n $scope.pageUrl = $routeParams.pageUrl;\r\n $scope.page = _.find(_.find($scope.configData.navigationTabs, function (o) { return o.number == $scope.navTabNum; }).pages, function (p) { return p.url == $scope.pageUrl; });\r\n $scope.pageId = $scope.navTabNum + '-' + $scope.page.number;\r\n $scope.isPageEditable = $scope.utility.isCurrentIncidentEditable() === true && $scope.page.isEditable === true;\r\n\r\n //Locals\r\n $scope.originalResponse = DataServices.originalResponse;\r\n $scope.shadowResponse = DataServices.shadowResponse;\r\n $scope.pageWatches = [];\r\n $scope.isButtonLoading = [];\r\n\r\n // TODO: verify this is functioning as intended as is in the correct controller.\r\n $scope.utility.toggleClass($('header'), false, 'header_with-nav');\r\n\r\n //Report the virtual page visit to Google Analytics.\r\n DataServices.trackPageVisitWithGA('PageVisit: ' + $scope.pageUrl);\r\n\r\n $scope.isDH = function () {\r\n if ($location.path().indexOf('DH') > -1) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n $scope.isDFFH = function () {\r\n if ($location.path().indexOf('DFFH') > -1) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n // Sets the question parameters that enable it to be easily located in the response JSON hierarchy\r\n // By abstracting it out here, we are easily able to add or modify params in the future without having to change (or add weight to) the surveydefinition.json.\r\n $scope.setQuestionParams = function (pIndex, sIndex, sCode) {\r\n return { 'pIndex': pIndex, 'sIndex': sIndex, 'sCode': sCode };\r\n }\r\n\r\n // Determines value of question. DO NOT change the order of the input paramaters as parameters may be defined in the surveydefinition.json\r\n $scope.valueOfQuestion = function (params, qCode, sCode, sIndex, pIndex, pageId) {\r\n return ValidationService.val(params, $scope.responses, qCode, sCode, sIndex, pIndex, pageId || $scope.pageId);\r\n };\r\n\r\n // Returns true if a question response contains the specified value. Used for multiselect questions (like checkboxes).\r\n $scope.questionContains = function (params, qCode, qValue, sCode, sIndex, pIndex, pageId) {\r\n return ValidationService.questionContains(params, $scope.responses, qCode, qValue, sCode, sIndex, pIndex, pageId || $scope.pageId);\r\n }\r\n\r\n // Returns true if a question response contains a value. Returns false if the response is undefined or empty string.\r\n $scope.notEmpty = function (params, qCode, sCode, sIndex, pIndex, pageId) {\r\n return ValidationService.notEmpty(params, $scope.responses, qCode, sCode, sIndex, pIndex, pageId || $scope.pageId);\r\n }\r\n\r\n // sets up watches for a page item\r\n $scope.setupWatchesForPageItem = function (page, pIndex) {\r\n // Set up watches for this page item\r\n if (page.sections) {\r\n\r\n // iterate through each section defined for the page\r\n for (var s = 0; s < page.sections.length; s++) {\r\n var section = page.sections[s];\r\n\r\n // if the section itself has a condition, add a watch for it\r\n if (section.condition) {\r\n var cond = section.condition.replace(/p\\$/g, JSON.stringify($scope.setQuestionParams(pIndex, 0, section.code)));\r\n $scope.setupWatchForSectionCondition(pIndex, section, cond);\r\n }\r\n\r\n // iterate through each section item for the section\r\n if ($scope.responses[$scope.pageId][pIndex][section.code]) {\r\n for (var sIndex = 0; sIndex < $scope.responses[$scope.pageId][pIndex][section.code].length; sIndex++) {\r\n // iterate through each question defined for the section\r\n $scope.setupWatchesForSectionItem(section, pIndex, sIndex);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // sets up all watches for a section item\r\n $scope.setupWatchesForSectionItem = function (section, pIndex, sIndex) {\r\n for (var q = 0; q < section.questions.length; q++) {\r\n var question = section.questions[q];\r\n\r\n // Find all the questions whose display is conditional. When the condition changes to a \r\n // false-y value, we remove any response for the question.\r\n if (question.condition) {\r\n // subtitute the params in to the condition so the correct question is evaluated.\r\n var cond = question.condition.replace(/p\\$/g, JSON.stringify($scope.setQuestionParams(pIndex, sIndex, section.code)));\r\n $scope.setupWatchForQuestionCondition(pIndex, section.code, sIndex, question.code, cond);\r\n }\r\n }\r\n }\r\n\r\n // Sets up a watch for a section condition\r\n $scope.setupWatchForSectionCondition = function (pIndex, section, condition) {\r\n // Ask angular to watch and notify us whenever the condition changes\r\n var watch = $scope.$watch(\r\n condition,\r\n // This function gets called when the condition changes\r\n function (newValue, oldValue) {\r\n if (newValue) {\r\n // If there is no response for the section, initialise one now\r\n if (!$scope.responses[$scope.pageId][pIndex][section.code]) {\r\n if (section.isRepeating) {\r\n if (section.repeatingItemRequired) {\r\n // Add an initial item to display the section\r\n $scope.addSectionItem(0, section.code, false);\r\n }\r\n }\r\n else {\r\n $scope.responses[$scope.pageId][pIndex][section.code] = [{}];\r\n }\r\n }\r\n }\r\n else {\r\n // Clear any response provided to date for the entire section as, the sections condition is now false.\r\n $scope.responses[$scope.pageId][pIndex][section.code] = undefined;\r\n $scope.utility.removeFromValidationErrors(null, $scope.pageId, pIndex, section.code, null, null);\r\n }\r\n }\r\n );\r\n\r\n // find matching page watch to store deregister event with\r\n var match = $filter('filter')($scope.pageWatches, { pIndex: pIndex, sCode: section.code }, true)[0];\r\n if (match) {\r\n match.sWatch = watch;\r\n }\r\n else {\r\n $scope.pageWatches.push({\r\n pIndex: pIndex,\r\n sCode: section.code,\r\n sWatch: watch,\r\n sItems: []\r\n });\r\n }\r\n }\r\n\r\n // Sets up a watch for a question condition\r\n $scope.setupWatchForQuestionCondition = function (pIndex, sCode, sIndex, qCode, condition) {\r\n // Ask angular to watch and notify us whenever the condition changes\r\n // Store the function which unbinds the watch in an array so we can remove it if required.\r\n var watch = $scope.$watch(\r\n condition,\r\n // This function gets called when the condition changes\r\n function (newValue, oldValue) {\r\n // If the condition's now false\r\n if (!newValue) {\r\n // Clear any response provided to date.\r\n if ($scope.responses[$scope.pageId][pIndex][sCode] && $scope.responses[$scope.pageId][pIndex][sCode][sIndex]) {\r\n $scope.responses[$scope.pageId][pIndex][sCode][sIndex][qCode] = undefined;\r\n $scope.utility.removeFromValidationErrors(null, $scope.pageId, pIndex, sCode, sIndex, qCode);\r\n }\r\n }\r\n }\r\n )\r\n\r\n // find matching page watch to store deregister event with\r\n var match = $filter('filter')($scope.pageWatches, { pIndex: pIndex, sCode: sCode }, true)[0];\r\n if (match) {\r\n if (!match.sItems[sIndex]) {\r\n match.sItems[sIndex] = [];\r\n }\r\n match.sItems[sIndex].push(watch);\r\n }\r\n else {\r\n $scope.pageWatches.push({\r\n pIndex: pIndex,\r\n sCode: sCode,\r\n sWatch: null,\r\n sItems: [[watch]]\r\n });\r\n }\r\n\r\n }\r\n\r\n // Removes all watches in a page item. This includes section and question conditions in that page item.\r\n $scope.deregisterPageItemWatches = function (pIndex) {\r\n var watches = $filter('filter')($scope.pageWatches, { pIndex: pIndex }, true);\r\n if (watches) {\r\n for (var s = 0; s < watches.length; s++) {\r\n if (watches[s].sWatch) {\r\n // deregister section watch\r\n watches[s].sWatch();\r\n }\r\n // deregister question watches in each section item\r\n for (var si = 0; si < watches[s].sItems.length; si++) {\r\n $scope.deregisterSectionItemWatches(pIndex, watches[s].sCode, si);\r\n }\r\n }\r\n\r\n // delete watches now that they are deregistered\r\n $scope.pageWatches = $scope.pageWatches.filter(function (obj) {\r\n return !obj.pIndex == pIndex;\r\n });\r\n }\r\n }\r\n\r\n // Removes all watches in a section item. This includes all question conditions in that section item.\r\n $scope.deregisterSectionItemWatches = function (pIndex, sCode, sIndex) {\r\n var section = $filter('filter')($scope.pageWatches, { pIndex: pIndex, sCode: sCode }, true)[0];\r\n if (section && section.sItems[sIndex]) {\r\n for (var q = 0; q < section.sItems[sIndex].length; q++) {\r\n if (section.sItems[sIndex][q]) {\r\n section.sItems[sIndex][q]();\r\n }\r\n }\r\n // delete watches now they have been deregistered.\r\n section.sItems.splice(sIndex, 1);\r\n }\r\n }\r\n\r\n //Sets up all trigger watches (e.g. showing and hiding questions dynamically based on the trigger rules defined in JSON schema)\r\n $scope.setupTriggersAndDynamicValues = function () {\r\n // Find all the triggers. When the condition changes to a truth-y value, fire the action\r\n var triggers = $scope.configData.triggers;\r\n for (var i = 0; i < triggers.length; i++) {\r\n var trigger = triggers[i];\r\n\r\n if (trigger.whenThisExpressionChangesFromFalseToTrue != undefined) {\r\n setupChangeFromFalseToTrueWatchForThisTrigger(trigger);\r\n }\r\n else if (trigger.whenThisExpressionValueChanges != undefined) {\r\n setupValueChangeWatchForThisTrigger(trigger);\r\n }\r\n }\r\n\r\n function setupChangeFromFalseToTrueWatchForThisTrigger(trigger) {\r\n $scope.$watch(\r\n trigger.whenThisExpressionChangesFromFalseToTrue,\r\n // This function gets called when the value of the watched expression changes\r\n function (newValue, oldValue) {\r\n // If the condition's changed to true\r\n if (newValue && !oldValue) {\r\n $scope.$eval(trigger.doThis);\r\n }\r\n }\r\n );\r\n }\r\n\r\n function setupValueChangeWatchForThisTrigger(trigger) {\r\n $scope.$watch(\r\n trigger.whenThisExpressionValueChanges,\r\n // This function gets called when the value of the watched expression changes\r\n function (newValue, oldValue) {\r\n // If the value has changed\r\n if (newValue != oldValue) {\r\n $scope.$eval(trigger.doThis);\r\n }\r\n }, true);\r\n }\r\n\r\n // Initialise response for this page if there isn't one already, skip repeating page items so we don't end up with ghost entries\r\n $scope.initialisePageResponse();\r\n\r\n // Set up watches for questions on the page.\r\n if ($scope.responses[$scope.pageId]) {\r\n for (var pIndex = 0; pIndex < $scope.responses[$scope.pageId].length; pIndex++) {\r\n $scope.setupWatchesForPageItem($scope.page, pIndex);\r\n }\r\n }\r\n }\r\n\r\n //Scroll to the appropriate anchor on the screen\r\n $scope.scrollTo = function (id) {\r\n var old = $location.hash();\r\n $location.hash(id);\r\n $anchorScroll();\r\n $location.hash(old); // this prevents angular from re-rendering the page\r\n $scope.utility.focus(id);\r\n };\r\n\r\n // Sets the focus to the heading of the Summary level validation messages\r\n $scope.setSummaryErrorFocus = function () {\r\n var summaryValMsgs = $filter('filter')($scope.validationErrors, {\r\n level: 'summary', pageNo: $scope.pageId\r\n }, true);\r\n if (summaryValMsgs && summaryValMsgs.length > 0) {\r\n $scope.scrollTo('validationInfo');\r\n }\r\n };\r\n\r\n // Each date will have date parts and a complete date stored in the response. \r\n $scope.buildDateString = function (qCode, pIndex, sIndex, sCode) {\r\n var day = $scope.valueOfQuestion(null, qCode + '-day', sCode, sIndex, pIndex);\r\n var month = $scope.valueOfQuestion(null, qCode + '-month', sCode, sIndex, pIndex);\r\n var year = $scope.valueOfQuestion(null, qCode + '-year', sCode, sIndex, pIndex);\r\n\r\n // Set the date field in the response if all three date parts are present.\r\n if (day && month && year) {\r\n $scope.responses[$scope.pageId][pIndex][sCode][sIndex][qCode] = year + '-' + month + '-' + day;\r\n }\r\n else {\r\n $scope.responses[$scope.pageId][pIndex][sCode][sIndex][qCode] = undefined;\r\n }\r\n }\r\n\r\n //this method deletes individual date parts values if the full date field is undefined\r\n $scope.clearDateModel = function (qCode, pIndex, sIndex, sCode, dateParam) {\r\n if (!$scope.responses[$scope.pageId][pIndex][sCode][sIndex][qCode]) {\r\n\r\n $scope.responses[$scope.pageId][pIndex][sCode][sIndex][qCode + dateParam] = undefined\r\n }\r\n }\r\n\r\n //Sets the display style for radio buttons for a question\r\n $scope.selectRadioAlignment = function (question) {\r\n if (question.displayStyle) {\r\n return question.displayStyle.toLowerCase();\r\n }\r\n return \"vertical\";\r\n }\r\n\r\n // Filter for typeahead to ensure it only searches from the beginning of the word and will consider spaces.\r\n $scope.typeAheadStartsWithFilter = function (option, viewValue) {\r\n // if option.matchingText is specified, use option.matchingText instead of option.text\r\n return option.matchingText ?\r\n (option.matchingText.substr(0, viewValue.length).toLowerCase() == viewValue.toLowerCase()) :\r\n (option.text && option.text.substr(0, viewValue.length).toLowerCase() == viewValue.toLowerCase());\r\n }\r\n\r\n // Gets the answer for a question from its properties.\r\n $scope.getAnswerFromCodes = function (params, tabNo, pageNo, sCode, qCode, pIndex, sIndex) {\r\n\r\n if (params) {\r\n if (!pIndex && params['pIndex'] != undefined) pIndex = params['pIndex'];\r\n if (!sIndex && params['sIndex'] != undefined) sIndex = params['sIndex'];\r\n }\r\n if (!pIndex) pIndex = 0;\r\n if (!sIndex) sIndex = 0;\r\n\r\n // Get question\r\n var navTab = _.find($scope.configData.navigationTabs, function (n) { return n.number == tabNo; });\r\n var page = _.find(navTab.pages, function (p) { return p.number == pageNo; });\r\n var section = _.find(page.sections, function (s) { return s.code == sCode; });\r\n var question = _.find(section.questions, function (q) { return q.code == qCode; });\r\n\r\n // Find matching response.\r\n var response = $scope.valueOfQuestion(null, qCode, sCode, sIndex, pIndex, tabNo + '-' + pageNo);\r\n\r\n return $scope.utility.getAnswer(question, response);\r\n }\r\n\r\n // Gets options from either an optionSet or options in the config\r\n $scope.getQuestionOptions = function (question, pIndex, sIndex, sCode) {\r\n // Options can be a string, in which case it is a reference to one of the named optionSets, or otherwise,\r\n // an array of objects, each with a code and value.\r\n if ((typeof question.options) === \"string\") {\r\n // If the question is dependant on another question or questions, the values for the dropdown are derived from a different option set.\r\n // This option set is configured in the spreadsheet as a dependancy and generated by the application at run time.\r\n var ops = null;\r\n if (sCode == null || sCode == undefined) {\r\n sCode = $scope.pageUrl;\r\n }\r\n\r\n if (question.optionDependsOnQuestion) {\r\n var pQuestions = question.optionDependsOnQuestion.split('|');\r\n var optionSetName = question.options + '-';\r\n // build the name\r\n for (var i = 0; i < pQuestions.length; i++) {\r\n // If the parent question has a value and its corresponding option set is available, use that optionset\r\n var valOfPQuestion = $scope.valueOfQuestion(null, pQuestions[i], sCode, sIndex, pIndex, $scope.pageId);\r\n if (valOfPQuestion) {\r\n optionSetName = optionSetName + pQuestions[i] + '-' + valOfPQuestion;\r\n }\r\n };\r\n\r\n ops = $scope.configData.optionSets[optionSetName];\r\n }\r\n\r\n if (ops) {\r\n return ops;\r\n }\r\n else {\r\n if (($location.path().indexOf('/DFFH/feedbackAssessment') > -1)) {\r\n if (question.options == \"category\") {\r\n\r\n const feedbackIndex = _.findIndex($scope.configData.optionSets[question.options], function (q) { return q.code == \"feedback\"; });\r\n if (feedbackIndex > -1) {\r\n $scope.configData.optionSets[question.options].splice(feedbackIndex, 1);\r\n }\r\n const aos29rIndex = _.findIndex($scope.configData.optionSets[question.options], function (q) { return q.code == \"complaint-aos29r\"; })\r\n if (aos29rIndex > -1) {\r\n $scope.configData.optionSets[question.options].splice(aos29rIndex, 1);\r\n }\r\n }\r\n }\r\n // fallback if there are no matches\r\n return $scope.configData.optionSets[question.options];\r\n }\r\n }\r\n return question.options;\r\n }\r\n\r\n //return the IncidentDate\r\n $scope.getIncidentDate = function () {\r\n\r\n return moment(DataServices.responseInfo.incidentDate).format($scope.Constants.responseDateFormat);\r\n };\r\n\r\n $scope.confirmUserCancel = function () {\r\n\r\n if ($scope.pageUrl == \"feedbackcoordination\" || $scope.pageUrl == \"followup\") {\r\n return $scope.checkValueChangeForCoordinationPage();\r\n }\r\n\r\n // new form $scope.originalResponse aswalys null\r\n // cant do comparison so we will just check if any value is added to the loaded page\r\n if (!$scope.originalResponse['1-1']) {\r\n return $scope.checkAtleastOneValueOnPage($scope.navTabNum, $scope.pageUrl);\r\n }\r\n\r\n return !(angular.equals($scope.originalResponse, $scope.responses));\r\n };\r\n\r\n // Whenever a route change occurs, this event is fired.\r\n $scope.$on('$locationChangeStart', function (event) {\r\n var nextPage = $location.$$path.slice(1);\r\n\r\n // Allow the user to return to key navigations. TODO: It would be great if this wasn't hard coded.\r\n if (nextPage == Constants.Url.firstFollowUpFormPage ||\r\n nextPage == Constants.Url.feedbackStaffMemberLanding ||\r\n nextPage == Constants.Url.privacyStaffMemberLanding ||\r\n nextPage == Constants.Url.privacy ||\r\n nextPage == Constants.Url.landing ||\r\n nextPage == Constants.Url.firstFeedbackCoordinationFormPage ||\r\n nextPage == Constants.Url.firstFeedbackAdditionalInfoFormPage ||\r\n nextPage == Constants.Url.logout) {\r\n return;\r\n }\r\n\r\n // Allow the user to navigate away if the page is read only\r\n if ($scope.isPageEditable === false) {\r\n return;\r\n }\r\n\r\n // The click of Complaints and Incident link on the button to behave like cancel button\r\n // if clicked from followup forms\r\n if ((nextPage == Constants.Url.manageFeedbacks || nextPage == Constants.Url.manageComplaints || nextPage == Constants.Url.tools) &&\r\n ($scope.pageUrl != \"consent\" && $scope.pageUrl != \"DHconsent\" && $scope.pageUrl != \"submitsuccessful\") &&\r\n ($scope.feedbackType !== undefined ||\r\n ($scope.pageUrl == \"complaints\" ||\r\n $scope.pageUrl == \"complaintsregistered\" ||\r\n $scope.pageUrl == \"incident\" ||\r\n $scope.pageUrl == \"followup\" ||\r\n $scope.pageUrl == \"feedbackcoordination\"))) {\r\n\r\n // check if values changed\r\n if ($scope.confirmUserCancel()) {\r\n event.preventDefault();\r\n $scope.callCancelFollowUp();\r\n }\r\n } else {\r\n // If the current page is repeating, ensure that the repeating items have been added / updated before allowing them to proceed\r\n if (!$scope.checkPageItemsAreSaved()) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n // Check the page is valid and meets prereqs before navigating. Some pages do not require the validation check.\r\n if (event.currentScope.page.navigateWithoutValidation === true ||\r\n $scope.validatePage($scope.navTabNum, $scope.pageUrl, null, null, null, 'inline')) {\r\n\r\n // Check we can navigate to the next page before doing so.\r\n // removing the logic for top button\r\n // is only required for navigating between forms\r\n if (!(nextPage == Constants.Url.manageFeedbacks || nextPage == Constants.Url.manageComplaints || nextPage == Constants.Url.tools)) {\r\n if ($scope.isPrerequisitePageValidationMet(nextPage)) {\r\n return;\r\n }\r\n else {\r\n event.preventDefault();\r\n $scope.utility.openPopup('prereqPageValidationFailed');\r\n }\r\n }\r\n }\r\n else {\r\n event.preventDefault();\r\n $scope.alertFirstError();\r\n }\r\n }\r\n });\r\n\r\n\r\n // Determines if the user can navigate to the page based on what they have currently entered in the form\r\n $scope.isPrerequisitePageValidationMet = function (nextPage) {\r\n try {\r\n // Determine prerequisite page validation has been completed before navigating to the destination page.\r\n var route = nextPage.split('/');\r\n if (route.length == 4) {\r\n var navTab = _.find($scope.configData.navigationTabs, function (o) { return o.number == parseInt(route[2]); });\r\n if (navTab) {\r\n var destPage = _.find(navTab.pages, function (o) { return o.url == route[3]; });\r\n if (destPage) {\r\n if (destPage.prerequisitePageValidation) {\r\n var pagesToCheck = destPage.prerequisitePageValidation.split('|');\r\n for (var i = 0; i < pagesToCheck.length; i++) {\r\n if ($scope.validatedPages.indexOf(pagesToCheck[i]) < 0) {\r\n return false;\r\n }\r\n };\r\n }\r\n return true;\r\n }\r\n }\r\n }\r\n else if ($location.path().indexOf('DFFH') > -1) {\r\n var navTab = _.find($scope.configData.navigationTabs, function (o) { return o.number == parseInt(route[3]); });\r\n if (navTab) {\r\n var destPage = _.find(navTab.pages, function (o) { return o.url == route[4]; });\r\n if (destPage) {\r\n if (destPage.prerequisitePageValidation) {\r\n var pagesToCheck = destPage.prerequisitePageValidation.split('|');\r\n for (var i = 0; i < pagesToCheck.length; i++) {\r\n if ($scope.validatedPages.indexOf(pagesToCheck[i]) < 0) {\r\n return false;\r\n }\r\n };\r\n }\r\n return true;\r\n }\r\n }\r\n }\r\n else if ($location.path().indexOf('DH') > -1) {\r\n var navTab = _.find($scope.configData.navigationTabs, function (o) { return o.number == parseInt(route[3]); });\r\n if (navTab) {\r\n var destPage = _.find(navTab.pages, function (o) { return o.url == route[4]; });\r\n if (destPage) {\r\n if (destPage.prerequisitePageValidation) {\r\n var pagesToCheck = destPage.prerequisitePageValidation.split('|');\r\n for (var i = 0; i < pagesToCheck.length; i++) {\r\n if ($scope.validatedPages.indexOf(pagesToCheck[i]) < 0) {\r\n return false;\r\n }\r\n };\r\n }\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n catch (e) {\r\n // if there is any error with parsing or determining the prerequisites for the page, return false.\r\n return false;\r\n }\r\n }\r\n\r\n // this function sets the street, suburb, postcode, locality when the user selects the address from google auto complete address\r\n $scope.setAddressParts = function (address, response, qCode) {\r\n //clearing the previous address field values before populating new ones\r\n response[qCode + '-autoSuburb'] = undefined;\r\n response[qCode + '-autoState'] = undefined;\r\n response[qCode + '-stateCode'] = undefined;\r\n response[qCode + '-autoPostCode'] = undefined;\r\n response[qCode + '-lga'] = undefined;\r\n response[qCode + '-autoStreetNumberName'] = undefined;\r\n\r\n if (address) {\r\n var streetAddress = '';\r\n\r\n for (var i = 0; i < address.length; i++) {\r\n var addressType = address[i].types[0];\r\n if (addressType == 'street_number') {\r\n streetAddress += address[i].long_name + ' ';\r\n }\r\n if (address[i].types[0] == 'route') {\r\n streetAddress += address[i].long_name;\r\n }\r\n if (addressType == 'locality') {\r\n response[qCode + '-autoSuburb'] = address[i].long_name;\r\n }\r\n if (addressType == 'administrative_area_level_1') {\r\n response[qCode + '-autoState'] = address[i].long_name;\r\n response[qCode + '-stateCode'] = address[i].short_name;\r\n }\r\n if (addressType == 'postal_code') {\r\n response[qCode + '-autoPostCode'] = address[i].long_name;\r\n }\r\n if (addressType == 'administrative_area_level_2') {\r\n response[qCode + '-lga'] = address[i].short_name;\r\n }\r\n }\r\n\r\n response[qCode + '-autoStreetNumberName'] = streetAddress;\r\n }\r\n }\r\n\r\n // Hard validates the questions for the supplied page. Page Index, Section Code and Section Index can be provided to reduce the scope of the hard validation\r\n $scope.validatePage = function (navTabNum, pageUrl, pIndex, sCode, sIndex, level, dontClearPreviousErrors, noMandatoryChecksForSave) {\r\n var isValid = true;\r\n var page = getPage(navTabNum, pageUrl);\r\n if ($scope.$eval(page.condition, null) === false) {\r\n return true;\r\n }\r\n var sections = _.find(_.find($scope.configData.navigationTabs, function (o) { return o.number == navTabNum; }).pages, function (p) { return p.url == pageUrl; }).sections;\r\n if (sections) {\r\n //Generally in most of places, each page is validated in the application when navigating away from page, the places where the whole form has to be validated at once, we would like to interate through all the pages\r\n //and call this function to validate page by page, In such case we would like to retain all the errors of previous pages we we iterate through.\r\n if (dontClearPreviousErrors === null || dontClearPreviousErrors === undefined) {\r\n // reset validationErrors array\r\n $scope.validationErrors.length = 0;\r\n }\r\n\r\n var _level = null;\r\n if (level == null || level == undefined) {\r\n _level = 'summary';\r\n } else {\r\n _level = level;\r\n }\r\n\r\n var pageIdentifier = $scope.pageId;\r\n\r\n if ($scope.responses[pageIdentifier]) {\r\n for (var pi = 0; pi < $scope.responses[pageIdentifier].length; pi++) {\r\n if (pIndex == null || pIndex == pi) {\r\n for (var s = 0; s < sections.length; s++) {\r\n var section = sections[s];\r\n if (sCode == null || section.code == sCode) {\r\n if ($scope.responses[pageIdentifier][pi][section.code]) {\r\n for (var si = 0; si < $scope.responses[pageIdentifier][pi][section.code].length; si++) {\r\n if (sIndex == null || sIndex == si) {\r\n if (!section.condition || $scope.$eval(section.condition, { p$: $scope.setQuestionParams(pi, 0, section.code) }) === true) {\r\n $.each(section.questions, function () {\r\n isValid = $scope.validatePageQuestions(_level, this, pi, si, section.code, noMandatoryChecksForSave) && isValid;\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Update the valid pages array with the outcome of this validation\r\n if (isValid) {\r\n if ($scope.validatedPages.indexOf(pageIdentifier) === -1) {\r\n $scope.validatedPages.push(pageIdentifier);\r\n }\r\n }\r\n else {\r\n var index = $scope.validatedPages.indexOf(pageIdentifier);\r\n if (index > -1) {\r\n $scope.validatedPages.splice(index, 1);\r\n }\r\n }\r\n return isValid;\r\n };\r\n\r\n // Check if any value is added to the forum\r\n $scope.checkAtleastOneValueOnPage = function (navTabNum, pageUrl) {\r\n var hasValue = false;\r\n\r\n var sections = _.find(_.find($scope.configData.navigationTabs, function (o) { return o.number == navTabNum; }).pages, function (p) { return p.url == pageUrl; }).sections;\r\n if (sections) {\r\n if ($scope.responses[$scope.pageId]) {\r\n for (var pi = 0; pi < $scope.responses[$scope.pageId].length; pi++) {\r\n\r\n for (var s = 0; s < sections.length; s++) {\r\n var section = sections[s];\r\n\r\n if ($scope.responses[$scope.pageId][pi][section.code]) {\r\n for (var si = 0; si < $scope.responses[$scope.pageId][pi][section.code].length; si++) {\r\n $.each(section.questions, function () {\r\n\r\n var question = this;\r\n if ($scope.notEmpty($scope.setQuestionParams(pi, si, section.code), question.code) === true) {\r\n hasValue = true;\r\n return false; // this will break the current .each() \r\n }\r\n\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return hasValue;\r\n };\r\n\r\n\r\n // Determines if a questions response is valid. Errors are populated in the validationErrors JSON\r\n $scope.validatePageQuestions = function (level, question, pIndex, sIndex, sCode, noMandatoryChecksForSave) {\r\n var isValid = true;\r\n // check if question is displayed first\r\n if (!question.condition || $scope.$eval(question.condition, { p$: $scope.setQuestionParams(pIndex, sIndex, sCode) }) === true) {\r\n if (question.validations && question.access !== 'R') {\r\n $.each(question.validations, function () {\r\n //This condition will be passed when form is saved, where we do not perform mandatory checks\r\n if (noMandatoryChecksForSave === true) {\r\n if (this.rule.indexOf('notEmpty') > -1) {\r\n return;\r\n }\r\n }\r\n if (this.level == level.toLowerCase()) {\r\n if ($scope.$eval(this.rule, { p$: $scope.setQuestionParams(pIndex, sIndex, sCode, $scope.pageId) }) != true) {\r\n isValid = false;\r\n $scope.addValidationError(this.level, $scope.pageId, pIndex, sIndex, sCode, question.code, this.popupMessageCode, question.shortQuestion ? question.shortQuestion : question.question, this.summaryMessage, this.inlineMessage);\r\n return false; // this will break the current .each() as we only want the first error per question\r\n }\r\n }\r\n });\r\n }\r\n }\r\n return isValid;\r\n }\r\n\r\n // Determines if a questions response is valid. Errors are populated in the validationErrors JSON\r\n $scope.validateQuestion = function (level, question, pIndex, sIndex, sCode) {\r\n var isValid = true;\r\n\r\n // check if question is displayed first\r\n if (!question.condition || $scope.$eval(question.condition, { p$: $scope.setQuestionParams(pIndex, sIndex, sCode) }) === true) {\r\n if (question.validations && question.access !== 'R') {\r\n $.each(question.validations, function () {\r\n if (this.level == level.toLowerCase() || level.toLowerCase() == 'summary') {\r\n if ($scope.$eval(this.rule, { p$: $scope.setQuestionParams(pIndex, sIndex, sCode) }) != true) {\r\n isValid = false;\r\n $scope.addValidationError(this.level, $scope.pageId, pIndex, sIndex, sCode, question.code, this.popupMessageCode, question.shortQuestion ? question.shortQuestion : question.question, this.summaryMessage, this.inlineMessage);\r\n return false; // this will break the current .each() as we only want the first error per question\r\n }\r\n }\r\n });\r\n }\r\n }\r\n return isValid;\r\n }\r\n\r\n // Validates the question for immediate inline validation\r\n $scope.validateQuestionInline = function (level, question, pIndex, sIndex, sCode) {\r\n // Remove any errors relating to this question before validating.\r\n $scope.utility.removeFromValidationErrors(null, $scope.pageId, pIndex, sCode, sIndex, question.code);\r\n $scope.validateQuestion(level, question, pIndex, sIndex, sCode);\r\n }\r\n\r\n // Add validation error to the array\r\n $scope.addValidationError = function (level, pageNo, pIndex, sIndex, sCode, qCode, popupMessageCode, shortQuestion, summaryMessage, inlineMessage) {\r\n $scope.validationErrors.push({\r\n 'level': level,\r\n 'pageNo': pageNo,\r\n 'pageIndex': pIndex,\r\n 'sectionCode': sCode,\r\n 'sectionIndex': sIndex,\r\n 'questionCode': qCode,\r\n 'popupMessageCode': popupMessageCode,\r\n 'shortQuestion': shortQuestion,\r\n 'summaryMessage': summaryMessage,\r\n 'inlineMessage': inlineMessage\r\n });\r\n }\r\n\r\n // Fires when a question value changes.\r\n $scope.onValueChange = function (level, question, pIndex, sIndex, sCode) {\r\n\r\n // Remove validation errors as question value is changing and therefore it will be re-evaluated.\r\n $scope.utility.removeFromValidationErrors(level, $scope.pageId, pIndex, sCode, sIndex, question.code);\r\n\r\n // If the question has an onChange action, fire it now.\r\n if (question.onChangeAction) {\r\n $scope.$eval(question.onChangeAction);\r\n }\r\n }\r\n\r\n // Sets error state for the question and its fieldset. Saves multiple watches per question.\r\n $scope.setErrorState = function (qCode, pIndex, sIndex, sCode) {\r\n var error = $filter('filter')($scope.validationErrors, {\r\n questionCode: qCode, pageIndex: pIndex, sectionIndex: sIndex, sectionCode: sCode\r\n }, true);\r\n // we must always call this, even when there is no error, to set the appropriate aria tags\r\n $scope.utility.setQuestionErrorState($scope.getQuestionId(qCode, pIndex, sIndex, sCode), error.length > 0);\r\n }\r\n\r\n // Displays a popup for the first error on the page.\r\n $scope.alertFirstError = function () {\r\n if ($scope.validationErrors.length > 0) {\r\n var err = $scope.validationErrors[0];\r\n if (err.popupMessageCode) {\r\n $scope.utility.openPopup($scope.validationErrors[0].popupMessageCode).result.then(function (result) {\r\n $scope.moveToFirstError();\r\n });\r\n }\r\n else {\r\n $scope.setSummaryErrorFocus();\r\n }\r\n }\r\n }\r\n\r\n // Moves to the first error on the page.\r\n $scope.moveToFirstError = function () {\r\n if ($scope.validationErrors.length > 0) {\r\n var err = $scope.validationErrors[0];\r\n $scope.scrollTo($scope.getQuestionId(err.questionCode, err.pageIndex, err.sectionIndex, err.sectionCode));\r\n }\r\n }\r\n\r\n // Numeric validation check. DO NOT change the order of the input paramaters as parameters may be defined in the surveydefinition.json\r\n $scope.validNumeric = function (params, qCode, maxNumericLength, minNumericLength, sCode, sIndex, pIndex) {\r\n return ValidationService.validNumeric(params, $scope.responses, qCode, maxNumericLength, minNumericLength, sCode, sIndex, pIndex, $scope.pageId);\r\n }\r\n\r\n // Alphabetic validation check.\r\n $scope.validAlphabetic = function (params, qCode, sCode, sIndex, pIndex) {\r\n return ValidationService.validAlphabetic(params, $scope.responses, qCode, sCode, sIndex, pIndex, $scope.pageId);\r\n }\r\n\r\n // Email validation logic. DO NOT change the order of the input paramaters as parameters may be defined in the surveydefinition.json\r\n $scope.validEmailAddress = function (params, qCode, sCode, sIndex, pIndex) {\r\n return ValidationService.validEmailAddress(params, $scope.responses, qCode, sCode, sIndex, pIndex, $scope.pageId);\r\n }\r\n\r\n // Determines if the date is valid. DO NOT change the order of the input paramaters as parameters may be defined in the surveydefinition.json\r\n $scope.validDate = function (params, qCode, sCode, sIndex, pIndex, pageId) {\r\n return ValidationService.validDate(params, $scope.responses, qCode, sCode, sIndex, pIndex, pageId || $scope.pageId);\r\n }\r\n\r\n // this validates the date is same or after the date\r\n $scope.isDateSameOrAfter = function (params, qCode, minYear, sCode, sIndex, pIndex, pageId) {\r\n return ValidationService.isDateSameOrAfter(params, $scope.responses, qCode, minYear, sCode, sIndex, pIndex, pageId || $scope.pageId);\r\n }\r\n\r\n // this retruns the no of days in difference between dates\r\n $scope.dateDifferenceInDays = function (sourceDate, targetDate) {\r\n return ValidationService.dateDifferenceInDays(sourceDate, targetDate);\r\n }\r\n\r\n // determine where a date is past, future or today\r\n $scope.validDateRange = function (params, qCode, sCode, sIndex, pIndex) {\r\n return ValidationService.validDateRange(params, $scope.responses, qCode, sCode, sIndex, pIndex, $scope.pageId);\r\n }\r\n\r\n // Returns true if a date has been entered and it is equal to or greater than 18 years. DO NOT change the order of the input paramaters as parameters may be defined in the surveydefinition.json\r\n $scope.isAdult = function (params, qCode, sCode, sIndex, pIndex) {\r\n return ValidationService.isAdult(params, $scope.responses, qCode, sCode, sIndex, pIndex, $scope.pageId);\r\n }\r\n\r\n\r\n //Takes the user to the specified page if the condition is met, otherwise they go to the next page in sequence\r\n $scope.goToNextPageConditional = function (conditionNavNo, conditionPageUrl, condition) {\r\n if (condition === true) {\r\n DataServices.callingPage = $location.$$path.slice(1);\r\n\r\n // check for exit conditions\r\n if (!$scope.page.exitCondition) {\r\n $location.path(getCurTemplatePath() + '/' + conditionNavNo + \"/\" + conditionPageUrl);\r\n }\r\n else {\r\n var successFunction = function () { $location.path(getCurTemplatePath() + '/' + conditionNavNo + \"/\" + conditionPageUrl); };\r\n var failureFunction = function () { $scope.utility.openPopup($scope.page.exitConditionPopup); };\r\n $scope.$eval($scope.page.exitCondition, { successFunction: successFunction, failureFunction: failureFunction, nextPageUrl: conditionPageUrl });\r\n }\r\n }\r\n else {\r\n $scope.goToNextPage();\r\n }\r\n }\r\n\r\n //Goes to the next page\r\n $scope.goToNextPage = function () {\r\n // check for exit conditions\r\n if (!$scope.page.exitCondition) {\r\n transferToNextPage();\r\n }\r\n else {\r\n var successFunction = function () { transferToNextPage(); };\r\n var failureFunction = function () { $scope.utility.openPopup($scope.page.exitConditionPopup); };\r\n $scope.$eval($scope.page.exitCondition, { successFunction: successFunction, failureFunction: failureFunction });\r\n }\r\n }\r\n\r\n //Goes to the previous page\r\n $scope.goToPreviousPage = function () {\r\n // check for exit conditions\r\n if (!$scope.page.exitCondition) {\r\n transferToPreviousPage();\r\n }\r\n else {\r\n var successFunction = function () { transferToPreviousPage(); };\r\n var failureFunction = function () { $scope.utility.openPopup($scope.page.exitConditionPopup); };\r\n $scope.$eval($scope.page.exitCondition, { successFunction: successFunction, failureFunction: failureFunction });\r\n }\r\n };\r\n\r\n // Returns the user to the calling page\r\n $scope.returnToCallingPage = function () {\r\n $location.path(DataServices.callingPage);\r\n DataServices.callingPage = undefined;\r\n }\r\n\r\n //Returns the unique question Id\r\n $scope.getQuestionId = function (qCode, pIndex, sIndex, sCode) {\r\n if (!qCode) {\r\n return '';\r\n }\r\n return pIndex + '-' + sCode + '-' + sIndex + '-' + qCode;\r\n }\r\n\r\n\r\n $scope.displayOnQuestion = function (question) {\r\n if (($location.path().indexOf('DFFH/complaintRegistered/') > -1)) {\r\n if (question.code == \"cDActingOnBehalfOfAnotherPerson\") {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n //Returns ToolTipText of question\r\n $scope.getToolTipText = function (question, tooltip) {\r\n\r\n if (($location.path().indexOf('/DH/feedbackAssessment') > -1)) {\r\n if (question.code == \"faCategory\") {\r\n tooltip.tooltipText = \"Select the relevant option. \" +\r\n \"\" +\r\n \"Please ensure that the categorisation is in line with the Compliment and Complaints Management Procedure.\"\r\n }\r\n }\r\n if (($location.path().indexOf('/DH/complaint') > -1)) {\r\n if (question.code == \"cDActingOnBehalfOfAnotherPerson\") {\r\n tooltip.tooltipText = \"Select if the feedback is on behalf of someone else.

\" +\r\n \"We may share the information you have submitted with the person/s on whose behalf you are making this submission.\"\r\n }\r\n if (question.code == \"cDRequireInterpreter\") {\r\n tooltip.tooltipText = \"Select whether the person you are acting on behalf of require an interpreter.\";\r\n }\r\n if (question.code == \"cDInterpreterLanguage\") {\r\n tooltip.tooltipText = \"Select the required interpreter language. If the language is not in the list, select Other and tell us which language needed\";\r\n }\r\n\r\n }\r\n\r\n\r\n return tooltip.tooltipText;\r\n\r\n }\r\n\r\n // Returns only the buttons for the page that satisfy or do not satisfy the position supplied.\r\n $scope.filterButtons = function (position, include) {\r\n if ($scope.page.buttons) {\r\n return $scope.page.buttons.filter(function (o) { return include ? o.position == position : o.position != position });\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n //Focuses on the element specified by id\r\n $scope.goToElement = function (id) {\r\n document.getElementById(id).focus();\r\n }\r\n\r\n // Scrolls to the appropriate anchor on the screen, taking in to account repeating page and section items.\r\n $scope.pageScrollTo = function (page, error) {\r\n if (page.isRepeating) {\r\n if ($scope.getPageItemCount($scope.pageId) > 0 && $scope.getPageItemState(error.pageIndex) == Constants.RepeatingItemState.viewing) {\r\n // page is repeating, and has atleast one item: so open it up before we navigate to it.\r\n $scope.editPageItem(error.pageIndex);\r\n }\r\n if (page.validation && page.navigateFromSummaryFocusItem) {\r\n // page is repeating, but has no items, but has page level validation\r\n $scope.scrollTo(page.navigateFromSummaryFocusItem);\r\n }\r\n }\r\n\r\n var section = $filter('filter')(page.sections, { 'code': error.sectionCode }, true)[0];\r\n if (section && section.isRepeating) {\r\n // section is repeating, so open it up before we navigate to it\r\n $scope.editSectionItem(error.pageIndex, error.sectionIndex, error.sectionCode);\r\n }\r\n\r\n // Now navigate to the error.\r\n if (error.sectionCode) {\r\n $scope.scrollTo($scope.getQuestionId(error.questionCode, error.pageIndex, error.sectionIndex, error.sectionCode));\r\n }\r\n }\r\n\r\n // Gets the page item state. Possible options are Adding, Editing, Viewing or undefined\r\n $scope.getPageItemState = function (pIndex) {\r\n if ($scope.responses[$scope.pageId]) {\r\n var item = $scope.responses[$scope.pageId][pIndex];\r\n if (item) {\r\n return item.$state;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n // Sets the current state of the page item. Possible options are Adding, Editing, Viewing\r\n $scope.setPageItemState = function (pIndex, state) {\r\n if ($scope.responses[$scope.pageId]) {\r\n if ($scope.responses[$scope.pageId][pIndex]) {\r\n $scope.responses[$scope.pageId][pIndex].$state = state;\r\n }\r\n }\r\n }\r\n\r\n // Determines if any page items are currently being added (state == Adding)\r\n $scope.isAddingPageItem = function () {\r\n if ($scope.responses[$scope.pageId]) {\r\n var matches = $filter('filter')($scope.responses[$scope.pageId], { $state: Constants.RepeatingItemState.adding }, true);\r\n if (matches && matches.length > 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n // Adds a page item to the response\r\n $scope.addPageItem = function () {\r\n // Push new response for new page item to bind to, as well as any of its sections that are not repeating items.\r\n var newResponse = {\r\n id: generateGuid()\r\n };\r\n\r\n if (!$scope.responses[$scope.pageId]) {\r\n $scope.responses[$scope.pageId] = [newResponse];\r\n }\r\n else {\r\n $scope.responses[$scope.pageId].push(newResponse);\r\n }\r\n\r\n var page = getPage($scope.navTabNum, $scope.pageUrl);\r\n\r\n var pIndex = $scope.responses[$scope.pageId].length - 1;\r\n\r\n // initialise response for each section if there isn't one already, except for repeating section items\r\n if (page.sections != undefined) {\r\n for (var s = 0; s < page.sections.length; s++) {\r\n var section = page.sections[s];\r\n if (!section.isRepeating) {\r\n if ($scope.responses[$scope.pageId][pIndex][section.code] == undefined) {\r\n $scope.responses[$scope.pageId][pIndex][section.code] = [{}];\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Set up watches for this page item\r\n $scope.setupWatchesForPageItem(page, pIndex);\r\n\r\n // Set state of page item to adding\r\n $scope.setPageItemState(pIndex, Constants.RepeatingItemState.adding);\r\n\r\n // Work with the live response, but store copy of page item in shadow response in the event the changes want to be cancelled.\r\n $scope.shadowResponse[pIndex] = angular.copy($scope.responses[$scope.pageId][pIndex]);\r\n\r\n $scope.focusFirstElement(page, pIndex, null, 0);\r\n }\r\n\r\n // Validates and saves a page item in the response\r\n $scope.saveNewPageItem = function (pIndex) {\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, pIndex)) {\r\n $scope.setPageItemState(pIndex, Constants.RepeatingItemState.viewing);\r\n\r\n // set the shadow response to equal the response as the change is being accepted\r\n $scope.shadowResponse[pIndex] = angular.copy($scope.responses[$scope.pageId][pIndex]);\r\n\r\n //focus the 'add' button\r\n $scope.utility.focus('pageAddNewButton');\r\n }\r\n else {\r\n $scope.alertFirstError();\r\n }\r\n }\r\n\r\n // Cancels and removes a page item from the response\r\n $scope.cancelNewPageItem = function (pIndex) {\r\n // Remove the page error if any errors \r\n $scope.utility.removeFromValidationErrors(null, $scope.pageId, pIndex, null, null, null);\r\n\r\n // Remove the new response for the page item, if no page items are left, delete the array.\r\n $scope.responses[$scope.pageId].splice(pIndex, 1);\r\n if ($scope.responses[$scope.pageId].length == 0) {\r\n delete $scope.responses[$scope.pageId];\r\n }\r\n\r\n // Remove the shadow response for this page item\r\n $scope.shadowResponse.splice(pIndex, 1);\r\n\r\n // deregister watches for this page item\r\n $scope.deregisterPageItemWatches(pIndex);\r\n\r\n //focus the 'add' button\r\n $scope.utility.focus('pageAddNewButton');\r\n }\r\n\r\n // Validates and saves an existing page item in the response\r\n $scope.saveExistingPageItem = function (pIndex) {\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, pIndex)) {\r\n $scope.setPageItemState(pIndex, Constants.RepeatingItemState.viewing);\r\n\r\n // set the shadow response to equal the response as the change is being accepted\r\n $scope.shadowResponse[pIndex] = angular.copy($scope.responses[$scope.pageId][pIndex]);\r\n\r\n //focus the 'edit' button\r\n $scope.utility.focus('pageEdit-' + pIndex);\r\n }\r\n else {\r\n $scope.alertFirstError();\r\n }\r\n }\r\n\r\n // Undo changes to an existing page item in the response using the shadow copy\r\n $scope.cancelExistingPageItem = function (pIndex) {\r\n // Remove the page error if any errors \r\n $scope.utility.removeFromValidationErrors(null, $scope.pageId, pIndex, null, null, null);\r\n // set the response to use the shadowresponse as the change is being cancelled.\r\n $scope.responses[$scope.pageId][pIndex] = angular.copy($scope.shadowResponse[pIndex]);\r\n\r\n $scope.setPageItemState(pIndex, Constants.RepeatingItemState.viewing);\r\n\r\n //focus the 'edit' button\r\n $scope.utility.focus('pageEdit-' + pIndex);\r\n }\r\n\r\n // Opens an existing page item for editing\r\n $scope.editPageItem = function (pIndex) {\r\n $scope.setPageItemState(pIndex, Constants.RepeatingItemState.editing);\r\n\r\n // Work with the live response, but store copy of page item in shadow response in the event the changes want to be cancelled.\r\n $scope.shadowResponse[pIndex] = angular.copy($scope.responses[$scope.pageId][pIndex]);\r\n\r\n var page = getPage($scope.navTabNum, $scope.pageUrl);\r\n $scope.focusFirstElement(page, pIndex, null, 0);\r\n }\r\n\r\n // Deletes an existing page item from the response\r\n $scope.deletePageItem = function (pIndex, popupConfirmCode) {\r\n\r\n // Confirm delete via popup\r\n var params = $scope.responses[$scope.pageId][pIndex];\r\n $scope.utility.openPopup(popupConfirmCode, params).result.then(function (result) {\r\n\r\n // Remove the response for the page item (and the array itself if no page items are left)\r\n $scope.responses[$scope.pageId].splice(pIndex, 1);\r\n if ($scope.responses[$scope.pageId].length == 0) {\r\n delete $scope.responses[$scope.pageId];\r\n }\r\n\r\n // Remove the shadow response for this page item\r\n if ($scope.shadowResponse[pIndex]) {\r\n $scope.shadowResponse.splice(pIndex, 1);\r\n }\r\n\r\n // deregister watches for this page item\r\n $scope.deregisterPageItemWatches(pIndex);\r\n\r\n //revalidate to ensure any validation errors shown are updated\r\n $scope.validatePage($scope.navTabNum, $scope.pageUrl);\r\n var page = getPage($scope.navTabNum, $scope.pageUrl);\r\n\r\n //If page item got repeating required make sure after deleting show page item\r\n if (page.repeatingItemRequired && pIndex == 0 && $scope.getPageItemCount($scope.pageId) === 0) {\r\n $scope.addPageItem();\r\n } else {\r\n $scope.utility.focus('pageAddNewButton');\r\n }\r\n //focus on add button\r\n\r\n });\r\n }\r\n\r\n\r\n // Gets the sectionItem state. Possible options are Adding, Editing, Viewing or undefined\r\n $scope.getSectionItemState = function (pIndex, sIndex, sCode) {\r\n if ($scope.responses[$scope.pageId][pIndex][sCode]) {\r\n var item = $scope.responses[$scope.pageId][pIndex][sCode][sIndex];\r\n if (item) {\r\n return item.$state;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n // Sets the current state of the section item. Possible options are Adding, Editing, Viewing\r\n $scope.setSectionItemState = function (pIndex, sIndex, sCode, state) {\r\n if ($scope.responses[$scope.pageId][pIndex][sCode]) {\r\n if ($scope.responses[$scope.pageId][pIndex][sCode][sIndex]) {\r\n $scope.responses[$scope.pageId][pIndex][sCode][sIndex].$state = state;\r\n }\r\n }\r\n }\r\n\r\n // Determines if any section items are currently being added (state == Adding)\r\n $scope.isAddingSectionItem = function (pIndex, sCode) {\r\n if ($scope.responses[$scope.pageId][pIndex][sCode]) {\r\n var matches = $filter('filter')($scope.responses[$scope.pageId][pIndex][sCode], { $state: Constants.RepeatingItemState.adding }, true);\r\n if (matches && matches.length > 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n // Adds a section item to the repsonse \r\n $scope.addSectionItem = function (pIndex, sCode, noFocusRequired) {\r\n // Push new response for new section item to bind to \r\n if (!$scope.responses[$scope.pageId][pIndex][sCode]) {\r\n $scope.responses[$scope.pageId][pIndex][sCode] = [{}];\r\n }\r\n else {\r\n $scope.responses[$scope.pageId][pIndex][sCode].push({});\r\n }\r\n\r\n // set up watches for this section item\r\n var page = getPage($scope.navTabNum, $scope.pageUrl);\r\n var section = $filter('filter')(page.sections, {\r\n code: sCode\r\n }, true)[0];\r\n var sIndex = $scope.responses[$scope.pageId][pIndex][sCode].length - 1;\r\n $scope.setupWatchesForSectionItem(section, pIndex, sIndex);\r\n\r\n // Set section item state to adding\r\n $scope.setSectionItemState(pIndex, ($scope.responses[$scope.pageId][pIndex][sCode].length - 1), sCode, Constants.RepeatingItemState.adding);\r\n\r\n // Work with the live response, but store copy of section item in shadow response in the event the changes want to be cancelled.\r\n if (!$scope.shadowResponse[pIndex]) {\r\n $scope.shadowResponse[pIndex] = [];\r\n }\r\n if (!$scope.shadowResponse[pIndex][sCode]) {\r\n $scope.shadowResponse[pIndex][sCode] = [];\r\n }\r\n if (!$scope.shadowResponse[pIndex][sCode][sIndex]) {\r\n $scope.shadowResponse[pIndex][sCode][sIndex] = angular.copy($scope.responses[$scope.pageId][pIndex][sCode][sIndex]);\r\n }\r\n\r\n if (noFocusRequired) {\r\n $scope.focusFirstElement($scope.page, pIndex, null, 0);\r\n }\r\n }\r\n\r\n // Validates and saves a section item to the response\r\n $scope.saveNewSectionItem = function (pIndex, sIndex, sCode) {\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, pIndex, sCode, sIndex)) {\r\n $scope.setSectionItemState(pIndex, sIndex, sCode, Constants.RepeatingItemState.viewing);\r\n\r\n // set the shadow response to equal the response as the change is being accepted\r\n $scope.shadowResponse[pIndex][sCode][sIndex] = angular.copy($scope.responses[$scope.pageId][pIndex][sCode][sIndex]);\r\n\r\n $scope.utility.focus('sectionAddNewButton-' + pIndex + '-' + sCode);\r\n }\r\n else {\r\n $scope.alertFirstError();\r\n }\r\n }\r\n\r\n // Cancels and removes a section item from the response\r\n $scope.cancelNewSectionItem = function (pIndex, sIndex, sCode) {\r\n\r\n // remove the errors from the section \r\n $scope.utility.removeFromValidationErrors(null, $scope.pageId, pIndex, sCode, sIndex, null);\r\n\r\n // Remove the new response for the section item, if no section items are left, delete the section.\r\n $scope.responses[$scope.pageId][pIndex][sCode].splice(sIndex, 1);\r\n if ($scope.responses[$scope.pageId][pIndex][sCode].length == 0) {\r\n delete $scope.responses[$scope.pageId][pIndex][sCode];\r\n }\r\n\r\n // Remove the shadow response for this section item\r\n $scope.shadowResponse[pIndex][sCode].splice(sIndex, 1);\r\n\r\n // deregister watches for this section item\r\n $scope.deregisterSectionItemWatches(pIndex, sCode, sIndex);\r\n\r\n $scope.utility.focus('sectionAddNewButton-' + pIndex + '-' + sCode);\r\n }\r\n\r\n // Validates and saves an existing section item in the response\r\n $scope.saveExistingSectionItem = function (pIndex, sIndex, sCode) {\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, pIndex, sCode, sIndex, undefined, true, undefined)) {\r\n $scope.setSectionItemState(pIndex, sIndex, sCode, Constants.RepeatingItemState.viewing);\r\n\r\n // set the shadow response to equal the response as the change is being accepted\r\n $scope.shadowResponse[pIndex][sCode][sIndex] = angular.copy($scope.responses[$scope.pageId][pIndex][sCode][sIndex]);\r\n\r\n $scope.utility.focus('sectionEdit-' + pIndex + '-' + sCode + '-' + sIndex);\r\n }\r\n else {\r\n $scope.alertFirstError();\r\n }\r\n }\r\n\r\n // Undo changes to an existing section item in the response using the shadow copy\r\n $scope.cancelExistingSectionItem = function (pIndex, sIndex, sCode) {\r\n\r\n // remove the errors from the section //pageNo // sectionIndex // sectionCode //pageIndex // pageNo \r\n $scope.utility.removeFromValidationErrors(null, $scope.pageId, pIndex, sCode, sIndex, null);\r\n\r\n // set the response to use the shadowresponse as the change is being cancelled.\r\n $scope.responses[$scope.pageId][pIndex][sCode][sIndex] = angular.copy($scope.shadowResponse[pIndex][sCode][sIndex]);\r\n\r\n $scope.setSectionItemState(pIndex, sIndex, sCode, Constants.RepeatingItemState.viewing);\r\n\r\n $scope.utility.focus('sectionEdit-' + pIndex + '-' + sCode + '-' + sIndex);\r\n }\r\n\r\n // Opens an existing section item for editing, creating a shadow copy for undo purposes.\r\n $scope.editSectionItem = function (pIndex, sIndex, sCode) {\r\n $scope.setSectionItemState(pIndex, sIndex, sCode, Constants.RepeatingItemState.editing);\r\n\r\n // Work with the live response, but store copy of section item in shadow response in the event the changes want to be cancelled.\r\n if (!$scope.shadowResponse[pIndex]) {\r\n $scope.shadowResponse[pIndex] = [];\r\n }\r\n if (!$scope.shadowResponse[pIndex][sCode]) {\r\n $scope.shadowResponse[pIndex][sCode] = [];\r\n }\r\n\r\n $scope.shadowResponse[pIndex][sCode][sIndex] = angular.copy($scope.responses[$scope.pageId][pIndex][sCode][sIndex]);\r\n\r\n var page = getPage($scope.navTabNum, $scope.pageUrl);\r\n $scope.focusFirstElement(page, pIndex, sCode, sIndex);\r\n }\r\n\r\n // Deletes an existing section item from the response\r\n $scope.deleteSectionItem = function (pIndex, sIndex, sCode, popupConfirmCode) {\r\n var params = $scope.responses[$scope.pageId][pIndex][sCode][sIndex];\r\n\r\n // confirm delete via popup before proceeding.\r\n $scope.utility.openPopup(popupConfirmCode, params).result.then(function (result) {\r\n\r\n // Remove the section item from the response (and the array itself if no page items are left)\r\n $scope.responses[$scope.pageId][pIndex][sCode].splice(sIndex, 1);\r\n if ($scope.responses[$scope.pageId][pIndex][sCode].length == 0) {\r\n delete $scope.responses[$scope.pageId][pIndex][sCode];\r\n }\r\n\r\n // Remove the shadow response for this section item\r\n if ($scope.shadowResponse[pIndex] && $scope.shadowResponse[pIndex][sCode] && $scope.shadowResponse[pIndex][sCode][sIndex]) {\r\n $scope.shadowResponse[pIndex][sCode].splice(sIndex, 1);\r\n }\r\n\r\n // deregister watches for this section item\r\n $scope.deregisterSectionItemWatches(pIndex, sCode, sIndex);\r\n\r\n if ($scope.page.sections) {\r\n var section = $filter('filter')($scope.page.sections, { code: sCode }, true)\r\n if (section.length && section[0].repeatingItemRequired) {\r\n if ($scope.getSectionItemCount($scope.pageId, sCode, pIndex) === 0) {\r\n $scope.addSectionItem(pIndex, sCode, true);\r\n }\r\n }\r\n }\r\n else {\r\n $scope.utility.focus('sectionAddNewButton-' + pIndex + '-' + sCode);\r\n }\r\n\r\n });\r\n }\r\n\r\n //this method implements the roll up functionality for a question, resets the reponse of a question and hence for all its children questions \r\n $scope.resetTheResponse = function (pIndex, sCode, sIndex, qCode) {\r\n if ($scope.responses && $scope.pageId && pIndex && sCode && sIndex && qCode && $scope.responses[$scope.pageId] && $scope.responses[$scope.pageId][pIndex] && $scope.responses[$scope.pageId][pIndex][sCode] && $scope.responses[$scope.pageId][pIndex][sCode][sIndex]) {\r\n $scope.responses[$scope.pageId][pIndex][sCode][sIndex][qCode] = undefined;\r\n $scope.scrollTo($scope.getQuestionId(qCode, pIndex, sIndex, sCode));\r\n }\r\n }\r\n\r\n // Returns if the question is read only or not\r\n $scope.isReadOnly = function (question) {\r\n\r\n // if the page is read only, return true straight away.\r\n if ($scope.isPageEditable === false) {\r\n return true;\r\n }\r\n else {\r\n var readOnly = question.access == 'R';\r\n\r\n if (question.readOnlyCondition) {\r\n readOnly = readOnly || ($scope.$eval(question.readOnlyCondition) == true);\r\n }\r\n\r\n return readOnly;\r\n }\r\n }\r\n\r\n // Returns if the question is required/mandatory or not\r\n $scope.isRequired = function (question) {\r\n\r\n var isRequired = false;\r\n\r\n if (question.showAsRequired) {\r\n isRequired = $scope.$eval(question.showAsRequired);\r\n }\r\n\r\n return isRequired;\r\n }\r\n\r\n // Determines if the next page is a summary page based on the current user. \r\n $scope.isNextPageSummary = function () {\r\n var curNavNo = $scope.navTabNum;\r\n var curTab = _.find($scope.configData.navigationTabs, function (o) { return o.number == curNavNo; });\r\n var maxPagesInTab = getMaxPageCountForTab(curNavNo);\r\n var curPageNo = getPageIndex(curTab, $scope.pageUrl);\r\n\r\n if (curPageNo < (maxPagesInTab - 1)) {\r\n return (curNavNo == Constants.summaryNavTabNum || curNavNo == Constants.systemNavTabNum) != false;\r\n }\r\n else {\r\n var nextTab = $scope.configData.navigationTabs[($scope.configData.navigationTabs.indexOf(curTab) + 1)];\r\n return (nextTab.number == Constants.summaryNavTabNum || nextTab.number == Constants.systemNavTabNum) != false;\r\n }\r\n }\r\n\r\n // Returns to the landing page.\r\n $scope.returnToLanding = function () {\r\n $location.path(Constants.Url.landing);\r\n }\r\n\r\n // Pads the value with zeroes\r\n $scope.padValue = function (qCode, pIndex, sIndex, sCode, totalDigits) {\r\n var resp = $scope.responses[$scope.pageId][pIndex][sCode][sIndex][qCode];\r\n if (resp && resp.length > 0 && resp > 0) {\r\n $scope.responses[$scope.pageId][pIndex][sCode][sIndex][qCode] = Array((totalDigits + 1) - resp.length).join('0') + resp;\r\n }\r\n }\r\n\r\n // Gets the number of repeating page items currently for this page.\r\n $scope.getPageItemCount = function (pageId) {\r\n var count = 0;\r\n if ($scope.responses[pageId]) {\r\n count = $scope.responses[pageId].length;\r\n }\r\n return count;\r\n }\r\n\r\n // Gets the number of repeating section items currently for this section.\r\n $scope.getSectionItemCount = function (pageId, sCode, pIndex) {\r\n var count = 0;\r\n if ($scope.responses && $scope.responses[pageId] && $scope.responses[pageId][pIndex] && $scope.responses[pageId][pIndex][sCode]) {\r\n count = $scope.responses[pageId][pIndex][sCode].length;\r\n }\r\n return count;\r\n }\r\n\r\n // Verifies all page items have been saved. Returns true if they are saved, false if one or more are not.\r\n $scope.checkPageItemsAreSaved = function () {\r\n if ($scope.page.isRepeating === true) {\r\n var match = _.find($scope.responses[$scope.pageId], function (pageItem) {\r\n return pageItem.$state != Constants.RepeatingItemState.viewing\r\n });\r\n if (match) {\r\n $scope.utility.openPopup($scope.page.repeatingNavigatePopupCode);\r\n return false;\r\n };\r\n }\r\n else {\r\n var IsValid = true;\r\n _.find($scope.page.sections, function (section) {\r\n if (section.isRepeating && section.repeatingReadOnly !== true) {\r\n var match = _.find($scope.responses[$scope.pageId][0][section.code], function (sectionItem) {\r\n if (sectionItem.$state !== undefined) {\r\n return sectionItem.$state != Constants.RepeatingItemState.viewing\r\n } else {\r\n return false;\r\n }\r\n });\r\n if (match) {\r\n var popupCode = $scope.page.sections\r\n .find(function (sec) {\r\n return sec.code == section.code;\r\n }).repeatingNavigatePopupCode;\r\n $scope.utility.openPopup(popupCode);\r\n IsValid = false;\r\n return false;\r\n };\r\n }\r\n });\r\n if (IsValid === false) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // Verifies all section items have been saved. Returns true if they are saved, false if one or more are not.\r\n $scope.checkSectionItemsAreSaved = function (sCode) {\r\n var match = _.find($scope.responses[$scope.pageId][0][sCode], function (sectionItem) {\r\n return sectionItem.$state != Constants.RepeatingItemState.viewing\r\n });\r\n if (match) {\r\n var section = _.find($scope.page.sections, function (s) {\r\n return s.code == sCode\r\n });\r\n $scope.utility.openPopup(section.repeatingNavigatePopupCode);\r\n return false;\r\n };\r\n return true;\r\n }\r\n\r\n // Initialise response for this page if there isn't one already\r\n $scope.initialisePageResponse = function () {\r\n // Initialise response for this page if there isn't one already, skip repeating page items so we don't end up with ghost entries\r\n if (!$scope.page.isRepeating && $scope.responses[$scope.pageId] == undefined) {\r\n $scope.responses[$scope.pageId] = [{}];\r\n if ($scope.page.sections != undefined) {\r\n // initialise response for each section if there isn't one already, skip repeating section items so we don't end up with ghost entries\r\n for (var s = 0; s < $scope.page.sections.length; s++) {\r\n var section = $scope.page.sections[s];\r\n if (!section.isRepeating && $scope.responses[$scope.pageId][0][section.code] == undefined) {\r\n $scope.responses[$scope.pageId][0][section.code] = [{}];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // this function set the focus to the first element\r\n $scope.focusFirstElement = function (page, pIndex, sCode, sIndex) {\r\n //If there are repeating sections: take the first section, and its first element\r\n var sectionToFocus = page.sections && page.sections.length > 0\r\n ? (sCode ? $filter('filter')(page.sections, { code: sCode }, true)[0] : page.sections[0])\r\n : null;\r\n\r\n if (sectionToFocus) {\r\n var qCode = sectionToFocus.questions && sectionToFocus.questions.length > 0 ? sectionToFocus.questions[0].code : null;\r\n if (qCode) {\r\n var id = $scope.getQuestionId(qCode, pIndex, sIndex, sectionToFocus.code);\r\n if (id) {\r\n $scope.utility.focus(id);\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n // ******************************************************************************************************\r\n // NOTE: All local functions below this line. At present, these are not visible to the child controllers.\r\n // ******************************************************************************************************\r\n\r\n // Returns the current template path. e.g if url is /incident/1/servicedetails this returns incident\r\n var getCurTemplatePath = function () {\r\n return $location.$$path.substring(1, $location.$$path.indexOf('/', 1));\r\n }\r\n\r\n // Generates a unique quid\r\n var generateGuid = function () {\r\n // Example of format: f422cb1a-fbc0-45d6-8000-0017b04b4375\r\n function s4() {\r\n return Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n }\r\n return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\r\n };\r\n\r\n // Returns the total number of pages for the tab\r\n var getMaxPageCountForTab = function (navNo) {\r\n // Ensure to consider includeInProgress when counting pages\r\n var maxPageInTab = 0;\r\n _.find($scope.configData.navigationTabs, function (o) { return o.number == navNo; }).pages.forEach(function (value) {\r\n if (value.includeInProgress || navNo == Constants.summaryNavTabNum || navNo == Constants.systemNavTabNum) {\r\n maxPageInTab = maxPageInTab + 1;\r\n }\r\n });\r\n return maxPageInTab;\r\n }\r\n\r\n // Returns the page index for the supplied navtab and pageUrl\r\n var getPageIndex = function (curTab, pageUrl) {\r\n var curPageIndex = -1;\r\n for (var i = 0; i < getMaxPageCountForTab(curTab.number); i++) {\r\n if (curTab.pages[i].url == pageUrl) {\r\n curPageIndex = i;\r\n break;\r\n }\r\n }\r\n return curPageIndex;\r\n }\r\n\r\n // this function returns the page\r\n var getPage = function (navTabNum, pageUrl) {\r\n return _.find(_.find($scope.configData.navigationTabs, function (o) { return o.number == navTabNum; }).pages, function (p) { return p.url == pageUrl; });\r\n }\r\n\r\n\r\n\r\n // This actually transfers user to next page. Seperated from GoToNextPage so exitConditions can work asynchronously.\r\n var transferToNextPage = function () {\r\n var curNavNo = $scope.navTabNum;\r\n var curTab = _.find($scope.configData.navigationTabs, function (o) { return o.number == curNavNo; });\r\n var maxPagesInTab = getMaxPageCountForTab(curNavNo);\r\n var curPageNo = getPageIndex(curTab, $scope.pageUrl);\r\n var dhordffhPath = $location.$$path.split('/')[2];\r\n\r\n if (curNavNo > 0) {\r\n if (curPageNo < (maxPagesInTab - 1)) {\r\n // navigate to next page in current tab\r\n var url = curTab.pages[(curPageNo + 1)].url\r\n if ($scope.$eval((curTab.pages[(curPageNo + 1)]).condition, null) != true) {\r\n if (curPageNo + 1 < (maxPagesInTab - 1)) {\r\n url = curTab.pages[(curPageNo + 2)].url;\r\n }\r\n else {\r\n if (curPageNo + 1 == (maxPagesInTab - 1)) {\r\n // navigate to first page in next tab\r\n var nextTab = $scope.configData.navigationTabs[($scope.configData.navigationTabs.indexOf(curTab) + 1)];\r\n\r\n // If no suitable page was found, redirect to landing\r\n if (nextTab == null) {\r\n $scope.returnToLanding();\r\n }\r\n else {\r\n if (($location.path().indexOf('DFFH') > -1)) {\r\n $location.path('DFFH/' + dhordffhPath + '/' + nextTab.number + \"/\" + nextTab.pages[0].url);\r\n }\r\n else if (($location.path().indexOf('DH') > -1)) {\r\n if (($location.path().indexOf('DH/complaintRegistered') > -1)) {\r\n if (nextTab.title == 'Summary') {\r\n if (!DataServices.isDHHSComplaint) {\r\n nextTab.pages[0].text = 'Do you consent to the Department of Health (the department):';\r\n }\r\n }\r\n }\r\n else if ($location.path().indexOf('DH/complaint') > -1) {\r\n if (nextTab.title == 'Summary') {\r\n if (!DataServices.isDHHSComplaint) {\r\n nextTab.pages[0].text = \"

Please complete this section if you are the person providing the feedback.

I consent to the Department of Health (the department):

\";\r\n }\r\n }\r\n }\r\n $location.path('DH/' + dhordffhPath + '/' + nextTab.number + \"/\" + nextTab.pages[0].url);\r\n }\r\n else {\r\n\r\n $location.path(getCurTemplatePath() + '/' + nextTab.number + \"/\" + nextTab.pages[0].url);\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n if ($location.path().indexOf('DFFH') > -1) {\r\n $location.path('DFFH/' + dhordffhPath + '/' + curNavNo + \"/\" + url);\r\n }\r\n else if ($location.path().indexOf('DH') > -1) {\r\n $location.path('DH/' + dhordffhPath + '/' + curNavNo + \"/\" + url);\r\n }\r\n else {\r\n $location.path(getCurTemplatePath() + '/' + curNavNo + \"/\" + url);\r\n }\r\n return;\r\n }\r\n if (curPageNo == (maxPagesInTab - 1)) {\r\n // navigate to first page in next tab\r\n var nextTab = $scope.configData.navigationTabs[($scope.configData.navigationTabs.indexOf(curTab) + 1)];\r\n\r\n // If no suitable page was found, redirect to landing\r\n if (nextTab == null) {\r\n $scope.returnToLanding();\r\n }\r\n else {\r\n if (($location.path().indexOf('DFFH') > -1)) {\r\n $location.path('DFFH/' + dhordffhPath + '/' + nextTab.number + \"/\" + nextTab.pages[0].url);\r\n }\r\n else if (($location.path().indexOf('DH') > -1)) {\r\n if (($location.path().indexOf('DH/complaintRegistered') > -1)) {\r\n if (nextTab.title == 'Summary') {\r\n if (!DataServices.isDHHSComplaint) {\r\n nextTab.pages[0].text = 'Do you consent to the Department of Health (the department):';\r\n }\r\n }\r\n }\r\n else if ($location.path().indexOf('DH/complaint') > -1) {\r\n if (nextTab.title == 'Summary') {\r\n if (!DataServices.isDHHSComplaint) {\r\n nextTab.pages[0].text = \"

Please complete this section if you are the person providing the feedback.

I consent to the Department of Health (the department):

\";\r\n }\r\n }\r\n }\r\n $location.path('DH/' + dhordffhPath + '/' + nextTab.number + \"/\" + nextTab.pages[0].url);\r\n }\r\n else {\r\n\r\n $location.path(getCurTemplatePath() + '/' + nextTab.number + \"/\" + nextTab.pages[0].url);\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // This actually transfers user to previous page. Seperated from GoToPreviousPage so exitConditions can work asynchronously.\r\n var transferToPreviousPage = function () {\r\n if (DataServices.callingPage) {\r\n $scope.returnToCallingPage();\r\n }\r\n else {\r\n var curNavNo = $scope.navTabNum;\r\n var curTab = _.find($scope.configData.navigationTabs, function (o) { return o.number == curNavNo; });\r\n var maxPagesInTab = getMaxPageCountForTab(curNavNo);\r\n var curPageNo = getPageIndex(curTab, $scope.pageUrl);\r\n var dhordffhPath = $location.$$path.split('/')[2];\r\n\r\n if (curPageNo == 0) {\r\n // navigate to last page in previous tab\r\n var prevTab = $scope.configData.navigationTabs[($scope.configData.navigationTabs.indexOf(curTab) - 1)];\r\n\r\n var pageIndex = (getMaxPageCountForTab(prevTab.number) - 1);\r\n if ($scope.$eval((prevTab.pages[(getMaxPageCountForTab(prevTab.number) - 1)]).condition, null) != true) {\r\n pageIndex = pageIndex - 1;\r\n }\r\n\r\n if ($location.path().indexOf('DFFH') > -1) {\r\n $location.path('DFFH/' + dhordffhPath + '/' + prevTab.number + \"/\" + prevTab.pages[pageIndex].url);\r\n }\r\n else if ($location.path().indexOf('DH') > -1) {\r\n $location.path('DH/' + dhordffhPath + '/' + prevTab.number + \"/\" + prevTab.pages[pageIndex].url);\r\n }\r\n else {\r\n\r\n $location.path(getCurTemplatePath() + '/' + prevTab.number + \"/\" + prevTab.pages[pageIndex].url);\r\n }\r\n }\r\n else if (curPageNo > 0) {\r\n // navigate to previous page in current tab\r\n var url = curTab.pages[(curPageNo - 1)].url\r\n\r\n if ($location.path().indexOf('DFFH') > -1) {\r\n $location.path('DFFH/' + dhordffhPath + '/' + curNavNo + \"/\" + url);\r\n }\r\n else if ($location.path().indexOf('DH') > -1) {\r\n $location.path('DH/' + dhordffhPath + '/' + curNavNo + \"/\" + url);\r\n }\r\n else {\r\n $location.path(getCurTemplatePath() + '/' + curNavNo + \"/\" + url);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // *************************************************************************************************************\r\n // NOTE: Only place code which needs to execute immediately after the controller is initialised below this line\r\n // *************************************************************************************************************\r\n\r\n var page = getPage($scope.navTabNum, $scope.pageUrl);\r\n // If the page must have at least one repeating item, add the page item (if not already there)\r\n if (page.repeatingItemRequired) {\r\n if ($scope.getPageItemCount($scope.pageId) === 0) {\r\n $scope.addPageItem();\r\n }\r\n }\r\n\r\n // If the section must have at least one repeating item, add the section item (if not already there)\r\n if (page.sections && page.sections.length > 0) {\r\n\r\n var sectionContainingRepeatingItemRequired = _.filter(page.sections, function (o) { return o.repeatingItemRequired; })\r\n\r\n if (sectionContainingRepeatingItemRequired.length > 0) {\r\n //initialize the response with the section object incase it is not present.\r\n $scope.initialisePageResponse();\r\n\r\n _.forEach(sectionContainingRepeatingItemRequired, function (item) {\r\n var curNavNo = $scope.navTabNum;\r\n var curTab = _.find($scope.configData.navigationTabs, function (o) { return o.number == curNavNo; });\r\n if ($scope.getSectionItemCount($scope.pageId, item.code, 0) === 0) {\r\n //this will not work when repeating page is true and repeating section is true and isRepeatingSectionRequires is true\r\n $scope.addSectionItem(0, item.code, true);\r\n }\r\n });\r\n\r\n }\r\n }\r\n\r\n // reset page value if page is flagged as such\r\n if ($scope.page.resetValueOnLoad == true && $scope.isPageEditable) {\r\n $scope.responses[$scope.pageId] = undefined;\r\n }\r\n\r\n }]);\r\n}());\r\n","(function () {\r\n\r\n var formApp = angular.module('formApp');\r\n\r\n // this controller is use executes the functionality in feedback landing page\r\n formApp.controller('feedbackStaffMemberLandingController', ['$scope', '$rootScope', '$location', 'adalAuthenticationService', 'UtilityServices', 'DataServices', 'Constants',\r\n function ($scope, $rootScope, $location, adalAuthenticationService, UtilityServices, DataServices, Constants) {\r\n\r\n // this sets the page title\r\n document.title = 'Feedback Management System';\r\n\r\n DataServices.incidentSubmitted = false;\r\n\r\n $scope.isLoading = false;\r\n $scope.utility = UtilityServices;\r\n var baseurl = window.location;\r\n var urldffh = baseurl + 'DFFH';\r\n var urldh = baseurl + 'DH';\r\n $scope.dffhURL = urldffh\r\n $scope.dhURL = urldh\r\n\r\n if ($location.path().indexOf('DH') > -1) {\r\n $scope.IsDHVisible = true;\r\n //return true;\r\n }\r\n else {\r\n $scope.IsDHVisible = false;\r\n }\r\n if ($location.path().indexOf('DFFH') > -1) {\r\n $scope.IsDFFHVisible = true;\r\n //return true;\r\n }\r\n else {\r\n $scope.IsDFFHVisible = false;\r\n }\r\n\r\n // this gets and set the config data \r\n var getConfigDataAndRedirect = function (templateId, destinationPath) {\r\n\r\n $scope.isLoading = true;\r\n setDefaultValues();\r\n DataServices.validationErrors = [];\r\n\r\n DataServices.getConfigurationUsingCache(templateId, null, null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n $location.path(destinationPath);\r\n })\r\n .finally(function () {\r\n $scope.isLoading = false;\r\n });\r\n\r\n $rootScope.allowFormNavigation = true;\r\n }\r\n\r\n $scope.createFeedback = function () {\r\n if (!DataServices.isSessionActive()) {\r\n adalAuthenticationService.login();\r\n return false;\r\n }\r\n getConfigDataAndRedirect(Constants.ConfigTemplate.complaint, Constants.Url.firstComplaintFormPage);\r\n }\r\n\r\n var setDefaultValues = function () {\r\n DataServices.responseInfo.responses = {};\r\n DataServices.responseInfo.lastUpdatedTime = null;\r\n DataServices.responseInfo.incidentId = null;\r\n DataServices.responseInfo.incidentRef = null;\r\n DataServices.responseInfo.reportedDate = null;\r\n DataServices.responseInfo.status = null;\r\n DataServices.responseInfo.submittedDate = null;\r\n }\r\n }]);\r\n}());","(function () {\r\n var formApp = angular.module('formApp');\r\n formApp.controller(\r\n 'manageComplaintsController',\r\n ['$scope', '$rootScope', '$http', '$location', '$timeout', 'uiGridConstants', 'Constants', 'DataServices', 'UtilityServices', 'adalAuthenticationService',\r\n function ($scope, $rootScope, $http, $location, $timeout, uiGridConstants, Constants, DataServices, UtilityServices, adalAuthenticationService) {\r\n\r\n $scope.utility = UtilityServices;\r\n $scope.Constants = Constants;\r\n // Reset values that are used while working with an incident so any new incident opened / edited has these values reset.\r\n DataServices.validationErrors = [];\r\n DataServices.resetResponseInfo();\r\n delete DataServices.callingPage;\r\n DataServices.incidentSubmitted = false;\r\n\r\n\r\n\r\n //$scope.manageCutOffDate = DataServices.getCutOffDatefromAppsettings().then(function (data) {\r\n // DataServices.cutOffDate = data;\r\n //});\r\n\r\n $scope.isDH = function () {\r\n if ($location.path().indexOf('DH') > -1) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n //$scope.isDHComplaint = function () {\r\n // if (DataServices.responseInfo.lodgementDate < $scope.cutOffDate ) {\r\n // return true;\r\n // }\r\n // else {\r\n // return false;\r\n // }\r\n //}\r\n\r\n // $scope.utility.toggleClass($('header'), true, 'header_with-nav');\r\n\r\n $scope.totalRecords = 0;\r\n $scope.filteredRecords = 0;\r\n $scope.maxRecords = 0;\r\n $scope.hasMoreRecords = false;\r\n $scope.isTotalCountLoading = false;\r\n\r\n\r\n if ($location.path().indexOf('DH') > -1) {\r\n $scope.IsDHVisible = true;\r\n $scope.IsDFFHVisible = false;\r\n }\r\n else {\r\n $scope.IsDHVisible = false;\r\n $scope.IsDFFHVisible = true;\r\n }\r\n\r\n // Define filters\r\n if (!DataServices.mcoFilters) {\r\n DataServices.mcoFilters = {\r\n selectedFeedbackStatus: Constants.defaultFeedbackStatus,\r\n selectedCategory: '',\r\n selectedProgram: '',\r\n selectedDateRange: Constants.defaultDateOption,\r\n searchPhrase: '',\r\n showAllFeedbacks: false,\r\n feedbackStatusList: [],\r\n categoryList: [],\r\n programList: [],\r\n dateRangeList: []\r\n };\r\n }\r\n $scope.filters = DataServices.mcoFilters;\r\n\r\n var iosOrMobile = /iphone|ipod|ipad|mobile/.test(window.navigator.userAgent.toLowerCase());\r\n\r\n document.title = 'Feedback Management System Manage Complaints page';\r\n\r\n $scope.rowHeight = 56;\r\n $scope.getSubGridRowHeight = function (row) {\r\n return Math.floor((row.entity.subGridOptions.data.length + 1) * $scope.rowHeight);\r\n }\r\n\r\n // Determine whether we are running in extra small screen size (mobile phones)\r\n // Angular UI grid uses JS to set width calculations, therefore it is not possible to hide the columns just using CSS.\r\n $scope.isRunningInExtraSmallScreen = $(document).width() < 768;\r\n\r\n var getColumnDefs = function () {\r\n\r\n return [\r\n {\r\n field: 'statusDisplayName',\r\n displayName: 'Status',\r\n enableHiding: false,\r\n width: $scope.isRunningInExtraSmallScreen ? '50%' : '8%',\r\n enableColumnMenu: false\r\n },\r\n {\r\n field: 'formattedRef',\r\n displayName: 'Complaint Id',\r\n enableHiding: false,\r\n width: $scope.isRunningInExtraSmallScreen ? '50%' : '10%',\r\n enableColumnMenu: false,\r\n cellTemplate: '
' +\r\n '
' +\r\n '{{COL_FIELD}}' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'C' +\r\n '
' +\r\n '
'\r\n },\r\n {\r\n field: 'linkReveal',\r\n displayName: 'Links',\r\n enableHiding: false,\r\n width: $scope.isRunningInExtraSmallScreen ? '0%' : '8%',\r\n enableColumnMenu: false,\r\n cellTemplate: '
' +\r\n ' 0 && !(row.groupHeader == true || row.entity.subGridOptions.disableRowExpandable)\" ' +\r\n 'ng-class=\"{ \\'ui-grid-icon-plus-squared\\' : !row.isExpanded, \\'ui-grid-icon-minus-squared\\' : row.isExpanded }\" ' +\r\n 'ng-click=\"grid.api.expandable.toggleRowExpansion(row.entity)\" class=\"ng-scope ui-grid-icon-plus-squared\" style=\"\" > ' +\r\n ' ' +\r\n '{{row.entity.linkDisplayString}}' +\r\n '
'\r\n },\r\n {\r\n field: 'lodgementDate',\r\n displayName: 'Lodgement Date',\r\n cellFilter: 'date:\\'dd/MM/yyyy\\'',\r\n enableHiding: false,\r\n hideInSmallScreen: true,\r\n width: $scope.isRunningInExtraSmallScreen ? '0%' : '8%',\r\n enableColumnMenu: false,\r\n cellClass: $scope.isRunningInExtraSmallScreen ? 'hidden-xs' : '',\r\n headerCellClass: $scope.isRunningInExtraSmallScreen ? 'hidden-xs' : '',\r\n sort: { direction: uiGridConstants.DESC }\r\n },\r\n {\r\n field: 'complainantName',\r\n displayName: 'Person Names',\r\n enableHiding: false,\r\n hideInSmallScreen: true,\r\n width: $scope.isRunningInExtraSmallScreen ? '0%' : '14%',\r\n enableColumnMenu: false,\r\n resizable: false,\r\n cellClass: $scope.isRunningInExtraSmallScreen ? 'hidden-xs' : '',\r\n headerCellClass: $scope.isRunningInExtraSmallScreen ? 'hidden-xs' : '',\r\n cellTemplate: ''\r\n },\r\n {\r\n field: 'programDescription',\r\n displayName: $scope.IsDHVisible? 'Type of Service' : 'Program',\r\n enableHiding: false,\r\n width: $scope.isRunningInExtraSmallScreen ? '0%' : '14%',\r\n enableColumnMenu: false\r\n },\r\n {\r\n field: 'categoryDescription',\r\n displayName: 'Category',\r\n enableHiding: false,\r\n width: $scope.isRunningInExtraSmallScreen ? '0%' : '14%',\r\n enableColumnMenu: false\r\n },\r\n {\r\n field: 'closedDate',\r\n displayName: 'Closed Date',\r\n cellFilter: 'date:\\'dd/MM/yyyy\\'',\r\n enableHiding: true,\r\n hideInSmallScreen: true,\r\n enableColumnMenu: false,\r\n width: $scope.isRunningInExtraSmallScreen ? '0%' : '8%',\r\n cellClass: $scope.isRunningInExtraSmallScreen ? 'hidden-xs' : '',\r\n headerCellClass: $scope.isRunningInExtraSmallScreen ? 'hidden-xs' : ''\r\n },\r\n {\r\n field: 'dueDate',\r\n displayName: 'Due Date',\r\n cellFilter: 'date:\\'dd/MM/yyyy\\'',\r\n enableHiding: true,\r\n hideInSmallScreen: true,\r\n enableColumnMenu: false,\r\n width: $scope.isRunningInExtraSmallScreen ? '0%' : '8%',\r\n cellClass: $scope.isRunningInExtraSmallScreen ? 'hidden-xs' : '',\r\n headerCellClass: $scope.isRunningInExtraSmallScreen ? 'hidden-xs' : ''\r\n },\r\n {\r\n field: 'assignedTo',\r\n displayName: 'Assigned To',\r\n enableHiding: false,\r\n width: $scope.isRunningInExtraSmallScreen ? '0%' : '16%',\r\n enableColumnMenu: false\r\n },\r\n {\r\n field: 'Toolbox',\r\n displayName: 'Toolbox',\r\n cellClass: 'manage__tools',\r\n headerCellClass: 'manage__tools-hidden',\r\n cellTemplate: $scope.IsDHVisible ?\r\n // View\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'View' +\r\n '' +\r\n '' +\r\n // Edit\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Edit' +\r\n '' +\r\n '' +\r\n // Withdraw\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Withdraw ' +\r\n '' +\r\n '' +\r\n // FollowUp \r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Coordination' +\r\n '' +\r\n '' +\r\n // Print\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Download ' +\r\n '' +\r\n '' +\r\n // Assign\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '{{grid.appScope.assignLabel(row)}} ' +\r\n '' +\r\n '' +\r\n // Link\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Link ' +\r\n '' +\r\n '' +\r\n // Sesitive\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Insensitive ' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Sensitive ' +\r\n '' +\r\n '' +\r\n // Delete\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Delete ' +\r\n '' +\r\n '' :\r\n //DFFH starts from here\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'View' +\r\n '' +\r\n '' +\r\n // Edit\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Edit' +\r\n '' +\r\n '' +\r\n // Withdraw\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Withdraw ' +\r\n '' +\r\n '' +\r\n // FollowUp \r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Coordination' +\r\n '' +\r\n '' +\r\n // Print\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Download ' +\r\n '' +\r\n '' +\r\n // Assign\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '{{grid.appScope.assignLabel(row)}} ' +\r\n '' +\r\n '' +\r\n // Link\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Link ' +\r\n '' +\r\n '' +\r\n // Sesitive\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Insensitive ' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Sensitive ' +\r\n '' +\r\n '' +\r\n // Delete\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Delete ' +\r\n '' +\r\n '',\r\n visible: true,\r\n width: $scope.isRunningInExtraSmallScreen ? '300' : '340',\r\n resizable: false,\r\n enableColumnMenu: false\r\n },\r\n ];\r\n };\r\n $scope.gridOptions = {\r\n enableSorting: true,\r\n enableFiltering: false,\r\n enableHorizontalScrollbar: uiGridConstants.scrollbars.NEVER,\r\n enableVerticalScrollbar: uiGridConstants.scrollbars.ALWAYS,\r\n enableRowSelection: true,\r\n enableFullRowSelection: true,\r\n enableRowHeaderSelection: false,\r\n enableSelectAll: false,\r\n multiSelect: false,\r\n rowHeight: $scope.rowHeight,\r\n enableExpandableRowHeader: false,\r\n expandableRowTemplate: 'app/partials/core/expandableRowTemplate.html',\r\n columnDefs: getColumnDefs(),\r\n rowTemplate:\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
',\r\n onRegisterApi: function (gridApi) {\r\n $scope.gridApi = gridApi;\r\n\r\n // Returns the number of rows currently in the grid\r\n var rowsRendered = function () {\r\n $scope.filteredRecords = $scope.gridApi.core.getVisibleRows($scope.gridApi.grid).length;\r\n }\r\n $scope.gridApi.core.on.rowsRendered($scope, rowsRendered);\r\n\r\n $scope.gridApi.expandable.on.rowExpandedStateChanged($scope, function (row) {\r\n $timeout(function () {\r\n row.expandedRowHeight = $scope.getSubGridRowHeight(row);\r\n }, 0);\r\n });\r\n }\r\n };\r\n\r\n var clientExpand = function (row) {\r\n $scope.utility.openPopup('clientAndChildNames', {\r\n clientNames: row.entity.sortedClientNameArray,\r\n incidentId: row.entity.ref,\r\n childNames: row.entity.sortedChildNameArray\r\n });\r\n }\r\n $scope.onClientExpandTouchend = function (row) {\r\n $timeout(function () {\r\n clientExpand(row);\r\n }, 100);\r\n };\r\n $scope.onClientExpandClick = function (row) {\r\n if (!iosOrMobile) {\r\n clientExpand(row);\r\n }\r\n };\r\n\r\n $scope.selectRow = function (row) {\r\n $timeout(function () {\r\n $scope.gridApi.selection.selectRow(row.entity);\r\n }, 50);\r\n }\r\n\r\n $scope.assignLabel = function (row) {\r\n return row.entity.isAlreadyAssignedToCurrentUserRole ? \"Re-assign\" : \"Assign\";\r\n }\r\n\r\n var viewOrEditFeedback = function (row) {\r\n\r\n row.entity.isViewOrEditLoaded = false;\r\n\r\n // Assign response info details (the ones available before retrieving the record from the server)\r\n DataServices.responseInfo.incidentId = row.entity.feedbackId;\r\n DataServices.responseInfo.incidentRef = row.entity.ref;\r\n DataServices.responseInfo.status = row.entity.statusId;\r\n DataServices.responseInfo.statusText = row.entity.statusDisplayName;\r\n DataServices.responseInfo.programText = row.entity.programDescription;\r\n DataServices.responseInfo.lodgementDate = row.entity.lodgementDate;\r\n\r\n\r\n\r\n // Set current incident as editable or not\r\n $scope.utility.setCurrentIncidentAsEditable(row.entity.canEdit);\r\n\r\n var action = row.entity.canEdit ? 'Edit' : 'View';\r\n DataServices.trackEventsWithGA('PageName: Manage Complaints', 'Click ' + action + ' Complaint', action + ' Complaint');\r\n\r\n DataServices.getFeedbackById(row.entity.feedbackId)\r\n .then(function (data) {\r\n\r\n // Set original response (used to compare on save)\r\n DataServices.originalResponse = JSON.parse(data.response);\r\n\r\n // Assign response info details (the ones available after retrieving the record from the server)\r\n DataServices.responseInfo.responses = JSON.parse(data.response);\r\n DataServices.responseInfo.lastUpdatedTime = data.lastUpdatedTime;\r\n DataServices.responseInfo.template = data.templateId;\r\n DataServices.responseInfo.versionNumber = data.templateVersion;\r\n DataServices.validatedPages = DataServices.determineValidatedPages(data.response);\r\n DataServices.isDHComplaint = data.isDH;\r\n DataServices.isDFFHComplaint = data.isDFFH;\r\n DataServices.isDHHSComplaint = data.isDHHS;\r\n\r\n DataServices.getConfiguration(data.templateId, data.templateVersion, row.entity.feedbackId, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n DataServices.pushConfigData(data.configData, data.template, data.versionNumber, data.role);\r\n var config = DataServices.getCachedConfigData(data.template);\r\n $rootScope.allowFormNavigation = true;\r\n\r\n if (data.template === Constants.ConfigTemplate.complaintRegistered) {\r\n $location.path(Constants.Url.firstComplaintRegisteredFormPage);\r\n }\r\n else if (data.template === Constants.ConfigTemplate.complaint) {\r\n $location.path(Constants.Url.firstComplaintFormPage);\r\n }\r\n }, function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n });\r\n\r\n }, function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n });\r\n\r\n row.entity.isViewOrEditLoaded = true;\r\n };\r\n $scope.onViewOrEditTouchend = function (row) {\r\n $timeout(function () {\r\n viewOrEditFeedback(row);\r\n }, 100);\r\n };\r\n $scope.onViewOrEditClick = function (row) {\r\n if (!iosOrMobile) {\r\n viewOrEditFeedback(row);\r\n }\r\n };\r\n\r\n var withdrawFeedback = function (row) {\r\n\r\n var params = row.entity;\r\n $scope.utility.openPopup('withdrawIncident', params).result.then(function (result) {\r\n\r\n row.entity.isWithdrawLoaded = false;\r\n $scope.currentLoadMessage = \"Withdrawing Complaint\";\r\n\r\n var withdrawalReason = $scope.utility.getOptionSetText('withdrawalreasons', result.outParams.withdrawalReason);\r\n DataServices.withdrawFeedback(row.entity.feedbackId, withdrawalReason, row.entity.lastUpdatedTime)\r\n .then(function (response) {\r\n if (response !== null && response.data.status) {\r\n if (response.data.status == 1) {\r\n $scope.utility.showNotification(true, 'withdrawnIncidentFailed', params);\r\n DataServices.trackEventsWithGA('Withdraw action in Manage Complaints', 'Click Withdraw Complaint', 'Failed to Withdraw Complaint.');\r\n } else if (response.data.status == 2) {\r\n $scope.utility.showNotification(true, 'withdrawnByAnotherUser', params);\r\n } else if (response.data.status == 3) {\r\n $scope.utility.showNotification(true, 'withdrawnIncidentSuccessful', params);\r\n }\r\n getFeedbacks(true);\r\n DataServices.trackEventsWithGA('Withdraw action in Manage Complaints', 'Click Withdraw Complaint', 'Successful Withdraw Complaint.');\r\n } else {\r\n $scope.utility.showNotification(true, 'internalError');\r\n }\r\n }, function () {\r\n $scope.utility.showNotification(true, 'withdrawnIncidentFailed', params);\r\n DataServices.trackEventsWithGA('Withdraw action in Manage Complaints', 'Click Withdraw Complaint', 'Failed to Withdraw Complaint.');\r\n })\r\n .finally(function () {\r\n row.entity.isWithdrawLoaded = true;\r\n });\r\n });\r\n };\r\n $scope.onWithdrawTouchend = function (row) {\r\n $timeout(function () {\r\n withdrawFeedback(row);\r\n }, 100);\r\n };\r\n $scope.onWithdrawClick = function (row) {\r\n if (!iosOrMobile) {\r\n withdrawFeedback(row);\r\n }\r\n };\r\n\r\n var followUpFeedback = function (row) {\r\n row.entity.isFollowUpLoaded = false;\r\n\r\n // Reset original response (used to compare on save)\r\n DataServices.originalResponse = {};\r\n DataServices.resetResponseInfo();\r\n DataServices.responseInfo.responses = {};\r\n DataServices.responseInfo.status = 1;\r\n\r\n DataServices.responseInfo.incidentId = row.entity.feedbackId;\r\n DataServices.responseInfo.incidentRef = row.entity.ref;\r\n DataServices.responseInfo.statusText = row.entity.statusDisplayName;\r\n //Setting the program description to be used for assessment form\r\n DataServices.responseInfo.programDescription = row.entity.programDescription;\r\n\r\n DataServices.responseInfo.incidentDate = null; // not relevant and not used for complaints\r\n DataServices.responseInfo.feedbackAssignments = row.entity.assigneeArray;\r\n\r\n // adding template information to use in next page submit\r\n DataServices.responseInfo.template = row.entity.templateId;\r\n\r\n DataServices.trackEventsWithGA('PageName: Manage Complaints', 'Click Coordination', 'Coordination');\r\n\r\n DataServices.getConfiguration(Constants.ConfigTemplate.feedbackCoordination, null, null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n DataServices.pushConfigData(data.configData, data.template, data.versionNumber, data.role);\r\n var config = DataServices.getCachedConfigData(data.template);\r\n DataServices.getFeedbackById(row.entity.feedbackId)\r\n .then(function (datas) {\r\n DataServices.isDHComplaint = datas.isDH;\r\n DataServices.isDFFHComplaint = datas.isDFFH;\r\n DataServices.isDHHSComplaint = datas.isDHHS;\r\n });\r\n $location.path(Constants.Url.firstFeedbackCoordinationFormPage);\r\n }, function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n });\r\n };\r\n $scope.onFollowUpTouchend = function (row) {\r\n $timeout(function () {\r\n followUpFeedback(row);\r\n }, 100);\r\n };\r\n $scope.onFollowUpClick = function (row) {\r\n if (!iosOrMobile) {\r\n followUpFeedback(row);\r\n }\r\n };\r\n\r\n var printFeedback = function (row) {\r\n downloadPdf(row);\r\n };\r\n $scope.onPrintTouchend = function (row) {\r\n $timeout(function () {\r\n printFeedback(row);\r\n }, 100);\r\n };\r\n $scope.onPrintClick = function (row) {\r\n if (!iosOrMobile) {\r\n printFeedback(row);\r\n }\r\n };\r\n\r\n var assignFeedback = function (row) {\r\n\r\n var loadAssignmentData = function (feedback) {\r\n return DataServices.getFeedbackAssignees(feedback.feedbackId, $scope.IsDHVisible)\r\n .then(function (data) {\r\n var assignmentData = {\r\n feedback: feedback,\r\n assignerRoleId: data.assignerRoleId,\r\n assignableUsers: data.assignableUsers\r\n .map(function (au) {\r\n return {\r\n code: au.user.id,\r\n text: au.user.fullName,\r\n roleId: au.roleId\r\n };\r\n })\r\n };\r\n return assignmentData;\r\n },\r\n function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n throw new Error(data);\r\n });\r\n };\r\n\r\n var chooseFeedbackAssignee = function (assignmentData) {\r\n DataServices.configData.optionSets['complaintassignees'] = assignmentData.assignableUsers;\r\n return $scope.utility.openPopup('assignComplaint', assignmentData.feedback).result\r\n .then(function (data) {\r\n $scope.currentLoadMessage = \"Assigning Complaint\";\r\n var assigneeUserId = data.outParams.complaintAssignee.code;\r\n var assigneeRoleId = data.outParams.complaintAssignee.roleId;\r\n var feedbackAssignee = {\r\n feedback: assignmentData.feedback,\r\n assignerRoleId: assignmentData.assignerRoleId,\r\n assigneeRoleId: assigneeRoleId,\r\n assigneeUserId: assigneeUserId\r\n };\r\n return feedbackAssignee;\r\n });\r\n };\r\n\r\n var saveFeedbackAssignee = function (feedbackAssignee) {\r\n return DataServices.assignFeedback({\r\n feedbackId: feedbackAssignee.feedback.feedbackId,\r\n feedbackTypeId: Constants.FeedbackType.Complaint,\r\n assignerRoleId: feedbackAssignee.assignerRoleId,\r\n roleId: feedbackAssignee.assigneeRoleId,\r\n userId: feedbackAssignee.assigneeUserId\r\n })\r\n .then(function () {\r\n DataServices.trackEventsWithGA('PageName: Manage Complaints', 'Assign Successful', 'Assign');\r\n $scope.utility.showNotification(true, 'complaintAssignmentSuccessful', feedbackAssignee.feedback);\r\n }, function (data) {\r\n DataServices.trackEventsWithGA('PageName: Manage Complaints', 'Assign Failed', 'Assign');\r\n $scope.utility.showNotification(true, 'complaintAssignmentFailed', feedbackAssignee.feedback);\r\n throw new Error(data);\r\n });\r\n };\r\n\r\n DataServices.trackEventsWithGA('PageName: Manage Complaints', 'Click Assign', 'Assign');\r\n var feedback = row.entity;\r\n feedback.isAssignLoaded = false;\r\n loadAssignmentData(feedback)\r\n .then(function (assignmentData) {\r\n return chooseFeedbackAssignee(assignmentData);\r\n })\r\n .then(function (feedbackAssignee) {\r\n return saveFeedbackAssignee(feedbackAssignee);\r\n })\r\n .then(function () {\r\n getFeedbacks(true);\r\n })\r\n .finally(function () {\r\n feedback.isAssignLoaded = true;\r\n });\r\n };\r\n $scope.onAssignTouchend = function (row) {\r\n $timeout(function () {\r\n assignFeedback(row);\r\n }, 100);\r\n };\r\n $scope.onAssignClick = function (row) {\r\n if (!iosOrMobile) {\r\n assignFeedback(row);\r\n }\r\n };\r\n\r\n var linkFeedback = function (row) {\r\n\r\n var loadFeedbackLinkingData = function (feedback) {\r\n return DataServices.getLinkableFeedbacks(feedback.feedbackId)\r\n .then(function (data) {\r\n var feedbackLinkingData = {\r\n feedback: feedback,\r\n linkableFeedbacks: data.linkableFeedbacks\r\n .map(function (linkableFeedback) {\r\n return {\r\n code: linkableFeedback.feedbackId,\r\n text: linkableFeedback.formattedRef,\r\n matchingText: linkableFeedback.ref.toString()\r\n };\r\n })\r\n };\r\n return feedbackLinkingData;\r\n },\r\n function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n throw new Error(data);\r\n });\r\n };\r\n\r\n var chooseFeedbackLink = function (feedbackLinkingData) {\r\n DataServices.configData.optionSets['linkablecomplaints'] = feedbackLinkingData.linkableFeedbacks;\r\n return $scope.utility.openPopup('linkComplaint', feedbackLinkingData.feedback).result\r\n .then(function (data) {\r\n $scope.currentLoadMessage = \"Linking Complaint\";\r\n var linkedFeedbackId = data.outParams.linkedComplaint.code;\r\n var linkReason = data.outParams.linkReason;\r\n var feedbackLink = {\r\n feedback: feedbackLinkingData.feedback,\r\n linkedFeedbackId: linkedFeedbackId,\r\n linkReason: linkReason\r\n };\r\n return feedbackLink;\r\n });\r\n };\r\n\r\n var saveFeedbackLink = function (feedbackLink) {\r\n return DataServices.saveFeedbackLink({\r\n feedbackId1: feedbackLink.feedback.feedbackId,\r\n feedbackId2: feedbackLink.linkedFeedbackId,\r\n linkReason: feedbackLink.linkReason\r\n })\r\n .then(function () {\r\n DataServices.trackEventsWithGA('PageName: Manage Complaints', 'Link Successful', 'Link');\r\n }, function (data) {\r\n DataServices.trackEventsWithGA('PageName: Manage Complaints', 'Link Failed', 'Link');\r\n $scope.utility.showNotification(true, 'internalError');\r\n throw new Error(data);\r\n });\r\n };\r\n\r\n DataServices.trackEventsWithGA('PageName: Link Complaints', 'Click Link', 'Link');\r\n var feedback = row.entity;\r\n feedback.isLinkLoaded = false;\r\n loadFeedbackLinkingData(feedback)\r\n .then(function (feedbackLinkingData) {\r\n return chooseFeedbackLink(feedbackLinkingData);\r\n })\r\n .then(function (feedbackLink) {\r\n return saveFeedbackLink(feedbackLink);\r\n })\r\n .then(function () {\r\n getFeedbacks(true);\r\n })\r\n .finally(function () {\r\n feedback.isLinkLoaded = true;\r\n });\r\n };\r\n\r\n $scope.onDeleteTouchend = function (row) {\r\n $timeout(function () {\r\n deleteFeedback(row);\r\n }, 100);\r\n };\r\n $scope.onDeleteClick = function (row) {\r\n if (!iosOrMobile) {\r\n deleteFeedback(row);\r\n }\r\n };\r\n var deleteFeedback = function (row) {\r\n row.isDeleteLoaded = false;\r\n $scope.utility.openPopup('confirmDeleteComplaint').result.then(function (result) {\r\n DataServices.deleteFeedback(row.entity.feedbackId, row.entity.lastUpdatedTime)\r\n .then(function (response) {\r\n DataServices.trackEventsWithGA('PageName: Manage Complaints', 'Delete complaint Successful', 'Delete complaint');\r\n getFeedbacks(true);\r\n var params = { ref: row.entity.ref };\r\n $scope.utility.showNotification(true, 'deleteComplaintSuccessful', params);\r\n }, function (error) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n })\r\n .finally(function () {\r\n row.entity.isDeleteLoaded = true;\r\n });\r\n });\r\n };\r\n\r\n\r\n $scope.onSensitveTouch = function (row) {\r\n $timeout(function () {\r\n toggleFeedbackSensitivity(row);\r\n }, 100);\r\n };\r\n $scope.onSensitiveClick = function (row) {\r\n if (!iosOrMobile) {\r\n toggleFeedbackSensitivity(row);\r\n }\r\n };\r\n var toggleFeedbackSensitivity = function (row) {\r\n row.entity.isSensitiveLoaded = false;\r\n var actionLabel = row.entity.isSensitive ? 'Insensitive' : 'Sensitive';\r\n $scope.utility.openPopup(row.entity.isSensitive ? 'confirmToMakeRecordInsensitive' : 'confirmToMakeRecordSensitive').result.then(function (result) {\r\n DataServices.toggleFeedbackSensitivity(row.entity.feedbackId, row.entity.isSensitive, row.entity.lastUpdatedTime)\r\n .then(function (response) {\r\n DataServices.trackEventsWithGA('PageName: Manage Complaints', 'Make complaint ' + actionLabel + ' Successful', 'Make complaint ' + actionLabel);\r\n getFeedbacks(true);\r\n }, function (error) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n })\r\n .finally(function () {\r\n row.entity.isSensitiveLoaded = true;\r\n });\r\n }).catch(function () {\r\n row.entity.isSensitiveLoaded = true;\r\n });\r\n };\r\n\r\n\r\n $scope.onLinkTouchend = function (row) {\r\n $timeout(function () {\r\n linkFeedback(row);\r\n }, 100);\r\n };\r\n $scope.onLinkClick = function (row) {\r\n if (!iosOrMobile) {\r\n linkFeedback(row);\r\n }\r\n };\r\n\r\n var goToLinkedFeedback = function (row) {\r\n var feedbackLink = row.entity;\r\n var match = function (item) {\r\n return item.feedbackId.toLowerCase() === feedbackLink.feedbackId.toLowerCase();\r\n };\r\n var tryViewOrEditFeedback = function (feedback) {\r\n if (feedback && (feedback.canEdit || feedback.canView)) {\r\n if ($location.path().indexOf('DH') > -1) {\r\n if (feedback.isDH || feedback.isDHHS) {\r\n viewOrEditFeedback({ entity: feedback });\r\n }\r\n if (feedback.isDFFH) {\r\n $scope.utility.openPopup('complaintNotAccessible', { formattedRef: feedbackLink.formattedRef });\r\n }\r\n }\r\n else {\r\n if ($location.path().indexOf('DFFH') > -1) {\r\n if (feedback.isDFFH || feedback.isDHHS) {\r\n viewOrEditFeedback({ entity: feedback });\r\n }\r\n if (feedback.isDH) {\r\n $scope.utility.openPopup('complaintNotAccessible', { formattedRef: feedbackLink.formattedRef });\r\n }\r\n }\r\n }\r\n } else {\r\n $scope.utility.openPopup('complaintNotAccessible', { formattedRef: feedbackLink.formattedRef });\r\n }\r\n }\r\n var feedbackFromDashboard = $scope.gridOptions.data.filter(match)[0];\r\n if (feedbackFromDashboard) {\r\n tryViewOrEditFeedback(feedbackFromDashboard);\r\n } else {\r\n $scope.utility.setElementVisibility('pageLoad', true);\r\n DataServices.getFeedbacks({\r\n feedbackTypeId: feedbackLink.feedbackTypeId,\r\n searchTerm: feedbackLink.formattedRef,\r\n showAllFeedbacks: true\r\n })\r\n .then(function (data) {\r\n var feedbackFromDatabase = ((data && data.feedbacks) || []).filter(match)[0];\r\n tryViewOrEditFeedback(feedbackFromDatabase);\r\n },\r\n function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n })\r\n .finally(function () {\r\n $scope.utility.setElementVisibility('pageLoad', false);\r\n })\r\n }\r\n };\r\n $scope.onGoToLinkedFeedbackTouchend = function (row) {\r\n $timeout(function () {\r\n goToLinkedFeedback(row);\r\n }, 100);\r\n };\r\n $scope.onGoToLinkedFeedbackClick = function (row) {\r\n if (!iosOrMobile) {\r\n goToLinkedFeedback(row);\r\n }\r\n };\r\n\r\n var removeFeedbackLink = function (row) {\r\n row.entity.isRemoveFeedbackLinkLoaded = false;\r\n return DataServices.removeFeedbackLink({\r\n feedbackId1: row.entity.feedbackId,\r\n feedbackId2: row.grid.parentRow.entity.feedbackId\r\n })\r\n .then(function () {\r\n DataServices.trackEventsWithGA('PageName: Manage Complaints', 'Remove Feedback Link Successful', 'Remove Feedback Link');\r\n getFeedbacks(true);\r\n }, function (data) {\r\n DataServices.trackEventsWithGA('PageName: Manage Complaints', 'Remove Feedback Link Failed', 'Remove Feedback Link');\r\n $scope.utility.showNotification(true, 'internalError');\r\n })\r\n .finally(function () {\r\n row.entity.isRemoveFeedbackLinkLoaded = true;\r\n });\r\n };\r\n $scope.onRemoveFeedbackLinkTouchend = function (row) {\r\n $timeout(function () {\r\n removeFeedbackLink(row);\r\n }, 100);\r\n };\r\n $scope.onRemoveFeedbackLinkClick = function (row) {\r\n if (!iosOrMobile) {\r\n removeFeedbackLink(row);\r\n }\r\n };\r\n\r\n $scope.refresh = function () {\r\n getFeedbacks(true);\r\n }\r\n\r\n $scope.createFeedback = function () {\r\n\r\n if (!DataServices.isSessionActive()) {\r\n adalAuthenticationService.login();\r\n return false;\r\n }\r\n // Reset original response (used to compare on save)\r\n DataServices.originalResponse = {};\r\n DataServices.resetResponseInfo();\r\n DataServices.responseInfo.responses = {};\r\n DataServices.responseInfo.status = 1;\r\n\r\n // Set current incident as editable or not\r\n $scope.utility.setCurrentIncidentAsEditable(true);\r\n\r\n DataServices.trackEventsWithGA('PageName: Manage Complaints', 'Click Create New Complaint', 'Create New Complaint');\r\n\r\n DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.complaintRegistered, null, null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n $rootScope.allowFormNavigation = true;\r\n $location.path(Constants.Url.firstComplaintRegisteredFormPage);\r\n }, function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n });\r\n }\r\n\r\n // Refresh the incident grid based on selected filter values\r\n $scope.filterRecords = function () {\r\n $scope.gridOptions.data.length = 0;\r\n getFeedbacks(true);\r\n }\r\n\r\n $scope.clearAllFilters = function () {\r\n $scope.gridOptions.data.length = 0;\r\n $scope.filters.selectedFeedbackStatus = Constants.defaultFeedbackStatus;\r\n $scope.filters.selectedCategory = '';\r\n $scope.filters.selectedProgram = '';\r\n $scope.filters.selectedDateRange = Constants.defaultDateOption;\r\n $scope.filters.searchPhrase = '';\r\n $scope.filters.showAllFeedbacks = false;\r\n getFeedbacks(true);\r\n }\r\n\r\n\r\n $scope.canCreateFeedback = function () {\r\n return true; // any user can create a new feedback\r\n }\r\n\r\n $scope.canExtractCsv = function () {\r\n return true;\r\n }\r\n\r\n $scope.extractCsv = function () {\r\n var feedbackType = 2;\r\n $scope.utility.showNotification(true, 'csvExtractInProgress');\r\n var isDOH = $scope.IsDHVisible;\r\n var dateRangeId = $scope.filters.selectedDateRange === '' ? null : $scope.filters.selectedDateRange;\r\n DataServices.extractCsv(dateRangeId, feedbackType, isDOH).then(function (response) {\r\n var file = new Blob([response.data], { type: 'text/csv' });\r\n saveAs(file, 'ComplaintsCsvExtract.csv');\r\n $scope.utility.showNotification(false, 'csvExtractInProgress');\r\n $scope.utility.showNotification(true, 'csvExtractCompletedSuccessfully');\r\n }, function (error) {\r\n $scope.utility.showNotification(true, 'csvExtractError');\r\n });\r\n }\r\n\r\n var overdueVirtualStatus = { code: 'overdue', text: 'Overdue' };\r\n var activeVirtualStatus = { code: 'active', text: 'Active' };\r\n\r\n var getRequestData = function () {\r\n // We should ONLY be requesting either an actual known status, records that are \"active\", records that\r\n // are \"overdue\" or not specifying a status to search by.\r\n var isStatusFilterShowAll = $scope.filters.selectedFeedbackStatus === '';\r\n var isStatusFilterOverdue = $scope.filters.selectedFeedbackStatus === overdueVirtualStatus.code;\r\n var isStatusFilterActive = $scope.filters.selectedFeedbackStatus === activeVirtualStatus.code;\r\n\r\n return {\r\n feedbackTypeId: Constants.FeedbackType.Complaint,\r\n searchTerm: $scope.filters.searchPhrase === '' ? null : $scope.filters.searchPhrase,\r\n showAllFeedbacks: $scope.filters.showAllFeedbacks,\r\n statusId: (isStatusFilterShowAll || isStatusFilterActive || isStatusFilterOverdue) ? null : $scope.filters.selectedFeedbackStatus,\r\n isActive: isStatusFilterActive,\r\n isDOH: $scope.IsDHVisible,\r\n isOverdue: isStatusFilterOverdue,\r\n category: $scope.filters.selectedCategory === '' ? null : $scope.filters.selectedCategory,\r\n programId: $scope.filters.selectedProgram === '' ? null : $scope.filters.selectedProgram,\r\n dateRangeId: $scope.filters.selectedDateRange === '' ? null : $scope.filters.selectedDateRange\r\n };\r\n }\r\n\r\n var downloadPdf = function (row) {\r\n //var standalone = window.navigator.standalone;\r\n //var userAgent = window.navigator.userAgent.toLowerCase();\r\n //var safari = /safari/.test(userAgent);\r\n //var ios = /iphone|ipod|ipad/.test(userAgent);\r\n row.entity.isPrintLoaded = false;\r\n DataServices.viewComplaintsAllFormsPdf(row.entity.feedbackId)\r\n .then(function (response) {\r\n var data = response && response.data;\r\n try {\r\n var file = new Blob([data], { type: \"application/pdf\" }, { name: row.entity.formattedRef });\r\n saveAs(file, row.entity.formattedRef + '.pdf');\r\n row.entity.isPrintLoaded = true;\r\n }\r\n catch (e) {\r\n $scope.utility.openPopup('errorDownloadDoc');\r\n row.entity.isPrintLoaded = true;\r\n }\r\n }, function () {\r\n $scope.utility.openPopup('errorDownloadDoc');\r\n row.entity.isPrintLoaded = true;\r\n });\r\n };\r\n\r\n var getFeedbacks = function (showSpinner) {\r\n\r\n if (showSpinner) {\r\n $scope.utility.setElementVisibility('pageLoad', true);\r\n $scope.utility.toggleLoadingSpinner(true);\r\n }\r\n if (sessionStorage.getItem('popupNoticeAgreed') != 'shown') {\r\n if (DataServices.isAuthenticated()) {\r\n DataServices.getUserProfileInfoUsingCache()\r\n .then(function (userInfo) {\r\n if (DataServices.isRegisteredComplaintsUser(userInfo.roles)) {\r\n $scope.utility.openPopup('privacyNotice');\r\n }\r\n });\r\n }\r\n }\r\n\r\n var loadGridData = function (data) {\r\n var feedbacks = (data && data.feedbacks) || [];\r\n\r\n $scope.totalRecords = (data && data.totalRecords) || 0;\r\n $scope.filteredRecords = feedbacks.length;\r\n $scope.maxRecords = (data && data.maxRecords) || 0;\r\n $scope.hasMoreRecords = !!(data && data.hasMoreRecords);\r\n\r\n getOptions('incidentstatus-complaint').then(function (result) {\r\n $scope.filters.feedbackStatusList = result.slice();\r\n $scope.filters.feedbackStatusList.push(activeVirtualStatus);\r\n $scope.filters.feedbackStatusList.push(overdueVirtualStatus);\r\n });\r\n \r\n getOptions('category').then(function (result) {\r\n $scope.filters.categoryList = result;\r\n });\r\n var filteredProgramList5 = [];\r\n var filteredProgramList6 = [];\r\n\r\n if ((window.location.href.indexOf('/internal') > -1) || (window.location.href.indexOf('/manageComplaints') > -1)) {\r\n if ($location.path().indexOf('DH') > -1) {\r\n if (sessionStorage.getItem('popState') != 'shown') {\r\n //var filteredProgramList = [];\r\n getOptions('dhhsprogram').then(function (result) {\r\n\r\n DataServices.programOriginalResponse = result;\r\n filteredProgramList5 = DataServices.programOriginalResponse\r\n //DataServices.navigationTabsOriginalResponse = DataServices.configData;\r\n $scope.configData = DataServices.configData;\r\n //$scope.filters.programList = DataServices.programOriginalResponse;\r\n for (var j = 0; j < filteredProgramList5.length; j++) {\r\n if (!(filteredProgramList5[j].text == 'Community Health' || filteredProgramList5[j].text == 'Fairness')) {\r\n filteredProgramList6.push(filteredProgramList5[j]);\r\n }\r\n }\r\n $scope.filters.programList = filteredProgramList6;\r\n sessionStorage.setItem('popState', 'shown')\r\n })\r\n }\r\n else {\r\n if (DataServices.programOriginalResponse.length === 0) {\r\n if ($scope.filters.programList.length === 0) {\r\n getOptions('dhhsprogram').then(function (result) {\r\n\r\n DataServices.programOriginalResponse = result;\r\n filteredProgramList5 = DataServices.programOriginalResponse\r\n $scope.configData = DataServices.configData;\r\n //$scope.filters.programList = DataServices.programOriginalResponse;\r\n for (var j = 0; j < filteredProgramList5.length; j++) {\r\n if (!(filteredProgramList5[j].text == 'Community Health' || filteredProgramList5[j].text == 'Fairness')) {\r\n filteredProgramList6.push(filteredProgramList5[j]);\r\n }\r\n }\r\n $scope.filters.programList = filteredProgramList6;\r\n });\r\n }\r\n }\r\n //DataServices.configData.navigationTabs[0].pages = DataServices.navigationTabsOriginalResponse;\r\n }\r\n }\r\n else {\r\n if (sessionStorage.getItem('popState') != 'shown') {\r\n //var filteredProgramList = [];\r\n getOptions('dhhsprogram').then(function (result) {\r\n\r\n DataServices.programOriginalResponse = result;\r\n filteredProgramList5 = DataServices.programOriginalResponse\r\n //DataServices.navigationTabsOriginalResponse = DataServices.configData;\r\n $scope.configData = DataServices.configData;\r\n //$scope.filters.programList = DataServices.programOriginalResponse;\r\n for (var j = 0; j < filteredProgramList5.length; j++) {\r\n if (!(filteredProgramList5[j].text == 'Covid19')) {\r\n filteredProgramList6.push(filteredProgramList5[j]);\r\n }\r\n }\r\n $scope.filters.programList = filteredProgramList6;\r\n sessionStorage.setItem('popState', 'shown')\r\n });\r\n }\r\n else {\r\n if (DataServices.programOriginalResponse.length === 0) {\r\n if ($scope.filters.programList.length === 0) {\r\n getOptions('dhhsprogram').then(function (result) {\r\n\r\n DataServices.programOriginalResponse = result;\r\n filteredProgramList5 = DataServices.programOriginalResponse\r\n $scope.configData = DataServices.configData;\r\n //$scope.filters.programList = DataServices.programOriginalResponse;\r\n for (var j = 0; j < filteredProgramList5.length; j++) {\r\n if (!(filteredProgramList5[j].text == 'Covid19')) {\r\n filteredProgramList6.push(filteredProgramList5[j]);\r\n }\r\n }\r\n $scope.filters.programList = filteredProgramList6;\r\n });\r\n }\r\n }\r\n //DataServices.configData.navigationTabs[0].pages = DataServices.navigationTabsOriginalResponse;\r\n }\r\n }\r\n }\r\n\r\n getOptions('daterangefilter').then(function (result) {\r\n $scope.filters.dateRangeList = result;\r\n $scope.$apply();\r\n });\r\n\r\n var categoryDecodeMap = $scope.utility.getOptionSetDecodeMap($scope.filters.categoryList);\r\n\r\n angular.forEach(feedbacks,\r\n function (row) {\r\n row.isCloseLoaded = true;\r\n row.isViewOrEditLoaded = true;\r\n row.isWithdrawLoaded = true;\r\n row.isFollowUpLoaded = true;\r\n row.isPrintLoaded = true;\r\n row.isAssignLoaded = true;\r\n row.isLinkLoaded = true;\r\n row.isDeleteLoaded = true;\r\n row.isSensitiveLoaded = true;\r\n\r\n row.clientCount = row.sortedClientNameArray.length + row.sortedChildNameArray.length;\r\n\r\n row.categoryDescription = categoryDecodeMap[row.category];\r\n\r\n angular.forEach(row.linkArray,\r\n function (subRow) {\r\n subRow.isRemoveFeedbackLinkLoaded = true;\r\n });\r\n\r\n row.subGridOptions = {\r\n enableSorting: true,\r\n enableFiltering: false,\r\n enableHorizontalScrollbar: uiGridConstants.scrollbars.NEVER,\r\n enableVerticalScrollbar: uiGridConstants.scrollbars.ALWAYS,\r\n enableRowSelection: true,\r\n enableFullRowSelection: true,\r\n enableRowHeaderSelection: false,\r\n enableSelectAll: false,\r\n multiSelect: false,\r\n rowHeight: $scope.rowHeight,\r\n columnDefs: [\r\n {\r\n field: 'removeLink',\r\n displayName: '',\r\n enableHiding: false,\r\n enableColumnMenu: false,\r\n width: $scope.isRunningInExtraSmallScreen ? '30%' : '10%',\r\n cellTemplate: ''\r\n },\r\n {\r\n field: 'formattedRef',\r\n displayName: 'Complaint Id',\r\n enableHiding: false,\r\n enableColumnMenu: false,\r\n sort: { direction: uiGridConstants.ASC },\r\n width: $scope.isRunningInExtraSmallScreen ? '30%' : '10%',\r\n cellTemplate: ''\r\n },\r\n {\r\n field: 'linkReason',\r\n displayName: 'Link Reason',\r\n enableHiding: false,\r\n enableColumnMenu: false,\r\n width: $scope.isRunningInExtraSmallScreen ? '40%' : '80%'\r\n }\r\n ],\r\n data: row.linkArray\r\n };\r\n });\r\n\r\n $scope.gridOptions.data = feedbacks;\r\n\r\n var closedDateGridColumn = $scope.gridOptions.columnDefs[7];\r\n var dueDateGridColumn = $scope.gridOptions.columnDefs[8];\r\n\r\n if ($scope.filters.selectedFeedbackStatus === Constants.Status.Closed.toString()) {\r\n closedDateGridColumn.visible = true;\r\n dueDateGridColumn.visible = false;\r\n }\r\n else {\r\n closedDateGridColumn.visible = false;\r\n dueDateGridColumn.visible = true;\r\n }\r\n $scope.gridApi.grid.refresh();\r\n };\r\n\r\n\r\n DataServices.getFeedbacks(getRequestData())\r\n .then(function (data) {\r\n loadGridData(data);\r\n },\r\n function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n })\r\n .finally(function () {\r\n if (showSpinner) {\r\n $scope.utility.setElementVisibility('pageLoad', false);\r\n $scope.utility.toggleLoadingSpinner(false);\r\n }\r\n });\r\n };\r\n\r\n function getOptions(optionset) {\r\n return $scope.utility.getOptionSetFromConfiguration(optionset, Constants.ConfigTemplate.complaintRegistered);\r\n }\r\n\r\n\r\n $scope.utility.setElementVisibility('pageLoad', true);\r\n $scope.utility.toggleLoadingSpinner(true);\r\n DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.complaintRegistered, null, null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n DataServices.responseInfo.role = data.role;\r\n getFeedbacks(false);\r\n }, function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n })\r\n .finally(function () {\r\n $scope.utility.setElementVisibility('pageLoad', false);\r\n $scope.utility.toggleLoadingSpinner(false);\r\n });\r\n\r\n // Report the virtual page visit to Google Analytics.\r\n DataServices.trackPageVisitWithGA('Landing Page: Manage Complaints');\r\n }]);\r\n}());","(function () {\r\n var formApp = angular.module('formApp');\r\n formApp.controller(\r\n 'manageFeedbacksController',\r\n ['$scope', '$rootScope', '$http', '$location', '$timeout', 'uiGridConstants', 'Constants', 'DataServices', 'UtilityServices', 'adalAuthenticationService',\r\n function ($scope, $rootScope, $http, $location, $timeout, uiGridConstants, Constants, DataServices, UtilityServices, adalAuthenticationService) {\r\n\r\n $scope.utility = UtilityServices;\r\n $scope.Constants = Constants;\r\n\r\n // Reset values that are used while working with an incident so any new incident opened / edited has these values reset.\r\n DataServices.validationErrors = [];\r\n DataServices.resetResponseInfo();\r\n delete DataServices.callingPage;\r\n DataServices.incidentSubmitted = false;\r\n\r\n\r\n\r\n\r\n // $scope.utility.toggleClass($('header'), true, 'header_with-nav');\r\n\r\n $scope.totalRecords = 0;\r\n $scope.filteredRecords = 0;\r\n $scope.maxRecords = 0;\r\n $scope.hasMoreRecords = false;\r\n $scope.isTotalCountLoading = false;\r\n\r\n if ($location.path().indexOf('DH') > -1) {\r\n $scope.IsDHVisible = true;\r\n $scope.IsDFFHVisible = false;\r\n }\r\n else {\r\n $scope.IsDHVisible = false;\r\n $scope.IsDFFHVisible = true;\r\n }\r\n\r\n\r\n\r\n // Define filters\r\n if (!DataServices.miFilters) {\r\n DataServices.miFilters = {\r\n selectedFeedbackStatus: Constants.defaultFeedbackStatus,\r\n selectedFinalRiskRating: '',\r\n selectedArea: '',\r\n selectedProgram: '',\r\n selectedDateRange: Constants.defaultDateOption,\r\n searchPhrase: '',\r\n feedbackStatusList: [],\r\n finalRiskRatingList: [],\r\n areaList: [],\r\n programList: [],\r\n dateRangeList: []\r\n };\r\n }\r\n $scope.filters = DataServices.miFilters;\r\n\r\n var iosOrMobile = /iphone|ipod|ipad|mobile/.test(window.navigator.userAgent.toLowerCase());\r\n\r\n document.title = Constants.Messages.manageReportsPageTitle;\r\n $scope.rowHeight = 56;\r\n $scope.getSubGridRowHeight = function (row) {\r\n return Math.floor((row.entity.subGridOptions.data.length + 1) * $scope.rowHeight);\r\n }\r\n var getColumnDefs = function () {\r\n\r\n // Determine whether we are running in extra small screen size (mobile phones)\r\n // Angular UI grid uses JS to set width calculations, therefore it is not possible to hide the columns just using CSS.\r\n var isRunningInExtraSmallScreen = $(document).width() < 768;\r\n\r\n return [\r\n {\r\n field: 'statusDisplayName',\r\n displayName: 'Status',\r\n enableHiding: false,\r\n width: isRunningInExtraSmallScreen ? '50%' : '8%',\r\n enableColumnMenu: false\r\n },\r\n {\r\n field: 'formattedRef',\r\n displayName: 'Report Id',\r\n enableHiding: false,\r\n width: isRunningInExtraSmallScreen ? '50%' : '10%',\r\n enableColumnMenu: false,\r\n cellTemplate: '
' +\r\n '
' +\r\n '{{COL_FIELD}}' +\r\n '
' +\r\n '
'\r\n },\r\n {\r\n field: 'linkReveal',\r\n displayName: 'Links',\r\n enableHiding: false,\r\n width: $scope.isRunningInExtraSmallScreen ? '0%' : '7%',\r\n enableColumnMenu: false,\r\n cellTemplate: '
' +\r\n ' 0 && !(row.groupHeader == true || row.entity.subGridOptions.disableRowExpandable)\" ' +\r\n 'ng-class=\"{ \\'ui-grid-icon-plus-squared\\' : !row.isExpanded, \\'ui-grid-icon-minus-squared\\' : row.isExpanded }\" ' +\r\n 'ng-click=\"grid.api.expandable.toggleRowExpansion(row.entity)\" class=\"ng-scope ui-grid-icon-plus-squared\" style=\"\" > ' +\r\n ' ' +\r\n '{{row.entity.linkDisplayString}}' +\r\n '
'\r\n },\r\n {\r\n field: 'disclosedDate',\r\n displayName: 'Disclosed Date',\r\n cellFilter: 'date:\\'dd/MM/yyyy\\'',\r\n enableHiding: false,\r\n hideInSmallScreen: true,\r\n width: isRunningInExtraSmallScreen ? '0%' : '8%',\r\n enableColumnMenu: false,\r\n cellClass: isRunningInExtraSmallScreen ? 'hidden-xs' : '',\r\n headerCellClass: isRunningInExtraSmallScreen ? 'hidden-xs' : '',\r\n sort: { direction: uiGridConstants.DESC }\r\n },\r\n {\r\n field: 'clientName',\r\n displayName: 'Person Names',\r\n enableHiding: false,\r\n hideInSmallScreen: true,\r\n width: isRunningInExtraSmallScreen ? '0%' : '10%',\r\n enableColumnMenu: false,\r\n resizable: false,\r\n cellClass: isRunningInExtraSmallScreen ? 'hidden-xs' : '',\r\n headerCellClass: isRunningInExtraSmallScreen ? 'hidden-xs' : '',\r\n cellTemplate: ''\r\n },\r\n {\r\n field: 'areaDescription',\r\n displayName: 'Area',\r\n enableHiding: false,\r\n width: isRunningInExtraSmallScreen ? '0%' : '12%',\r\n enableColumnMenu: false\r\n },\r\n {\r\n field: 'programDescription',\r\n displayName: 'Program',\r\n enableHiding: false,\r\n width: isRunningInExtraSmallScreen ? '0%' : '12%',\r\n enableColumnMenu: false\r\n },\r\n {\r\n field: 'finalRiskRatingDescription',\r\n displayName: 'Risk Rating',\r\n enableHiding: false,\r\n width: isRunningInExtraSmallScreen ? '0%' : '10%',\r\n enableColumnMenu: false,\r\n cellTemplate: '
' +\r\n '{{COL_FIELD}}' +\r\n ' ({{row.entity.initialRiskRatingDescription}})' +\r\n '
'\r\n },\r\n {\r\n field: 'dueDate',\r\n displayName: 'Due Date',\r\n cellFilter: 'date:\\'dd/MM/yyyy\\'',\r\n enableHiding: false,\r\n hideInSmallScreen: true,\r\n enableColumnMenu: false,\r\n width: isRunningInExtraSmallScreen ? '0%' : '7%',\r\n cellClass: isRunningInExtraSmallScreen ? 'hidden-xs' : '',\r\n headerCellClass: isRunningInExtraSmallScreen ? 'hidden-xs' : ''\r\n },\r\n {\r\n field: 'assignedTo',\r\n displayName: 'Assigned To',\r\n enableHiding: false,\r\n width: isRunningInExtraSmallScreen ? '0%' : '16%',\r\n enableColumnMenu: false\r\n },\r\n {\r\n field: 'Toolbox',\r\n displayName: 'Toolbox',\r\n cellClass: 'manage__tools',\r\n headerCellClass: 'manage__tools-hidden',\r\n cellTemplate: $scope.IsDHVisible ?\r\n // View\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'View' +\r\n 'Opens dialog' +\r\n '' +\r\n '' +\r\n // Edit\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Edit' +\r\n 'Opens dialog' +\r\n '' +\r\n '' +\r\n // Withdraw\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Withdraw ' +\r\n 'Opens dialog' +\r\n '' +\r\n '' +\r\n // FollowUp \r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Coordination' +\r\n 'Opens dialog' +\r\n '' +\r\n '' +\r\n // Print\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Download ' +\r\n '' +\r\n '' +\r\n // Assign\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '{{grid.appScope.assignLabel(row)}} ' +\r\n '' +\r\n '' +\r\n // Re-open\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Re-open ' +\r\n '' +\r\n '' +\r\n // Link\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Link ' +\r\n '' +\r\n '' :\r\n //DFFH starts from here\r\n //View\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'View' +\r\n 'Opens dialog' +\r\n '' +\r\n '' +\r\n // Edit\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Edit' +\r\n 'Opens dialog' +\r\n '' +\r\n '' +\r\n // Withdraw\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Withdraw ' +\r\n 'Opens dialog' +\r\n '' +\r\n '' +\r\n // FollowUp \r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Coordination' +\r\n 'Opens dialog' +\r\n '' +\r\n '' +\r\n // Print\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Download ' +\r\n '' +\r\n '' +\r\n // Assign\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '{{grid.appScope.assignLabel(row)}} ' +\r\n '' +\r\n '' +\r\n // Re-open\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Re-open ' +\r\n '' +\r\n '' +\r\n // Link\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n 'Link ' +\r\n '' +\r\n '',\r\n visible: true,\r\n width: isRunningInExtraSmallScreen ? '300' : '340',\r\n resizable: false,\r\n enableColumnMenu: false\r\n },\r\n ];\r\n };\r\n $scope.gridOptions = {\r\n enableSorting: true,\r\n enableFiltering: false,\r\n enableHorizontalScrollbar: uiGridConstants.scrollbars.NEVER,\r\n enableVerticalScrollbar: uiGridConstants.scrollbars.ALWAYS,\r\n enableRowSelection: true,\r\n enableFullRowSelection: true,\r\n enableRowHeaderSelection: false,\r\n enableSelectAll: false,\r\n multiSelect: false,\r\n rowHeight: $scope.rowHeight,\r\n enableExpandableRowHeader: false,\r\n expandableRowTemplate: 'app/partials/core/expandableRowTemplate.html',\r\n columnDefs: getColumnDefs(),\r\n rowTemplate:\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
',\r\n onRegisterApi: function (gridApi) {\r\n $scope.gridApi = gridApi;\r\n\r\n // Returns the number of rows currently in the grid\r\n var rowsRendered = function () {\r\n $scope.filteredRecords = $scope.gridApi.core.getVisibleRows($scope.gridApi.grid).length;\r\n }\r\n $scope.gridApi.core.on.rowsRendered($scope, rowsRendered);\r\n $scope.gridApi.expandable.on.rowExpandedStateChanged($scope, function (row) {\r\n $timeout(function () {\r\n row.expandedRowHeight = $scope.getSubGridRowHeight(row);\r\n }, 0);\r\n });\r\n }\r\n };\r\n\r\n $scope.selectRow = function (row) {\r\n $timeout(function () {\r\n $scope.gridApi.selection.selectRow(row.entity);\r\n }, 50);\r\n }\r\n\r\n $scope.assignLabel = function (row) {\r\n return row.entity.isAlreadyAssignedToCurrentUserRole ? \"Re-assign\" : \"Assign\";\r\n }\r\n\r\n $scope.onLinkTouchend = function (row) {\r\n $timeout(function () {\r\n linkFeedback(row);\r\n }, 100);\r\n };\r\n $scope.onLinkClick = function (row) {\r\n if (!iosOrMobile) {\r\n linkFeedback(row);\r\n }\r\n };\r\n\r\n var linkFeedback = function (row) {\r\n\r\n var loadFeedbackLinkingData = function (feedback) {\r\n return DataServices.getLinkableFeedbacks(feedback.feedbackId)\r\n .then(function (data) {\r\n var feedbackLinkingData = {\r\n feedback: feedback,\r\n linkableFeedbacks: data.linkableFeedbacks\r\n .map(function (linkableFeedback) {\r\n return {\r\n code: linkableFeedback.feedbackId,\r\n text: linkableFeedback.formattedRef,\r\n matchingText: linkableFeedback.ref.toString()\r\n };\r\n })\r\n };\r\n return feedbackLinkingData;\r\n },\r\n function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n throw new Error(data);\r\n });\r\n };\r\n\r\n var chooseFeedbackLink = function (feedbackLinkingData) {\r\n DataServices.configData.optionSets['linkableprivacyincidents'] = feedbackLinkingData.linkableFeedbacks;\r\n return $scope.utility.openPopup('linkPrivacyIncident', feedbackLinkingData.feedback).result\r\n .then(function (data) {\r\n $scope.currentLoadMessage = Constants.Messages.linkPrivacyProgress;\r\n var linkedFeedbackId = data.outParams.linkablePrivacyIncidents.code;\r\n var linkReason = $scope.utility.getOptionSetText('privacylinkreasons', data.outParams.linkReason);\r\n //var linkReason = data.outParams.linkReason;\r\n var feedbackLink = {\r\n feedback: feedbackLinkingData.feedback,\r\n linkedFeedbackId: linkedFeedbackId,\r\n linkReason: linkReason\r\n };\r\n return feedbackLink;\r\n });\r\n };\r\n\r\n var saveFeedbackLink = function (feedbackLink) {\r\n return DataServices.saveFeedbackLink({\r\n feedbackId1: feedbackLink.feedback.feedbackId,\r\n feedbackId2: feedbackLink.linkedFeedbackId,\r\n linkReason: feedbackLink.linkReason\r\n })\r\n .then(function () {\r\n DataServices.trackEventsWithGA('PageName: Manage Complaints', 'Link Successful', 'Link');\r\n }, function (data) {\r\n DataServices.trackEventsWithGA('PageName: Manage Complaints', 'Link Failed', 'Link');\r\n $scope.utility.showNotification(true, 'internalError');\r\n throw new Error(data);\r\n });\r\n };\r\n\r\n DataServices.trackEventsWithGA('PageName: Link Complaints', 'Click Link', 'Link');\r\n var feedback = row.entity;\r\n feedback.isLinkLoaded = false;\r\n loadFeedbackLinkingData(feedback)\r\n .then(function (feedbackLinkingData) {\r\n return chooseFeedbackLink(feedbackLinkingData);\r\n })\r\n .then(function (feedbackLink) {\r\n return saveFeedbackLink(feedbackLink);\r\n })\r\n .then(function () {\r\n getFeedbacks(true);\r\n })\r\n .finally(function () {\r\n feedback.isLinkLoaded = true;\r\n });\r\n };\r\n\r\n var reOpenIncident = function (row) {\r\n //TODO: display confirmation popup \r\n $scope.utility.openPopup('reopenIncident', null).result.then(function (result) {\r\n row.entity.isReOpenLoaded = false;\r\n var params = row.entity;\r\n DataServices\r\n .reOpenFeedback(row.entity.feedbackId, row.entity.lastUpdatedTime)\r\n .then(function (response) {\r\n if (response !== null && response.data.status) {\r\n if (response.data.status == 3) {\r\n $scope.utility.showNotification(true, 'reopenIncidentSuccessful', params);\r\n DataServices.trackEventsWithGA('Re-open action in Manage Report', 'Click Re-open Report', 'Successful Re-open Report.');\r\n }\r\n else if (response.data.status == 2) {\r\n $scope.utility.showNotification(true, 'incidentUpdatedSinceReadTime', params);\r\n }\r\n else {\r\n $scope.utility.showNotification(true, 'reopenIncidentFailed');\r\n }\r\n row.entity.isReOpenLoaded = true;\r\n //refreshes the grid\r\n getFeedbacks(true);\r\n }\r\n }, function (error) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n row.entity.isReOpenLoaded = true;\r\n });\r\n });\r\n }\r\n\r\n $scope.onReOpenTouchend = function (row) {\r\n $timeout(function () {\r\n reOpenIncident(row);\r\n }, 100);\r\n };\r\n\r\n $scope.onReOpenIncidentClick = function (row) {\r\n if (!iosOrMobile) {\r\n reOpenIncident(row);\r\n }\r\n }\r\n\r\n $scope.onClientExpandTouchend = function (row) {\r\n $timeout(function () {\r\n clientExpand(row);\r\n }, 100);\r\n };\r\n\r\n var viewOrEditFeedback = function (row) {\r\n row.entity.isViewOrEditLoaded = false;\r\n\r\n // Assign response info details (the ones available before retrieving the record from the server)\r\n DataServices.responseInfo.incidentId = row.entity.feedbackId;\r\n DataServices.responseInfo.incidentRef = row.entity.ref;\r\n DataServices.responseInfo.status = row.entity.statusId;\r\n DataServices.responseInfo.statusText = row.entity.statusDisplayName;\r\n\r\n // Set current incident as editable or not\r\n $scope.utility.setCurrentIncidentAsEditable(row.entity.canEdit);\r\n\r\n var action = row.entity.canEdit ? 'Edit' : 'View';\r\n DataServices.trackEventsWithGA('PageName: Manage Reports', 'Click ' + action + ' Report', action + ' Report');\r\n\r\n DataServices.getFeedbackById(row.entity.feedbackId)\r\n .then(function (data) {\r\n\r\n // Set original response (used to compare on save)\r\n DataServices.originalResponse = JSON.parse(data.response);\r\n\r\n // Assign response info details (the ones available after retrieving the record from the server)\r\n DataServices.responseInfo.responses = JSON.parse(data.response);\r\n DataServices.responseInfo.lastUpdatedTime = data.lastUpdatedTime;\r\n DataServices.responseInfo.template = data.templateId;\r\n DataServices.responseInfo.versionNumber = data.templateVersion;\r\n DataServices.validatedPages = DataServices.determineValidatedPages(data.response);\r\n\r\n DataServices.getConfigurationUsingCache(data.templateId, data.templateVersion, row.entity.feedbackId, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n $rootScope.allowFormNavigation = true;\r\n $location.path(Constants.Url.firstIncidentFormPage);\r\n\r\n }, function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n });\r\n\r\n }, function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n });\r\n\r\n row.entity.isViewOrEditLoaded = true;\r\n };\r\n $scope.onViewOrEditTouchend = function (row) {\r\n $timeout(function () {\r\n viewOrEditFeedback(row);\r\n }, 100);\r\n };\r\n $scope.onViewOrEditClick = function (row) {\r\n if (!iosOrMobile) {\r\n viewOrEditFeedback(row);\r\n }\r\n };\r\n\r\n var withdrawFeedback = function (row) {\r\n\r\n var params = row.entity;\r\n $scope.utility.openPopup('withdrawIncident', params).result.then(function (result) {\r\n\r\n row.entity.isWithdrawLoaded = false;\r\n $scope.currentLoadMessage = \"Withdrawing Report\";\r\n\r\n var withdrawalReason = $scope.utility.getOptionSetText('withdrawalreasons', result.outParams.withdrawalReason);\r\n\r\n DataServices\r\n .withdrawFeedback(row.entity.feedbackId, withdrawalReason, row.entity.lastUpdatedTime)\r\n .then(function (response) {\r\n\r\n if (response !== null && response.data.status) {\r\n\r\n if (response.data.status == 1) {\r\n $scope.utility.showNotification(true, 'withDrawIncidentFailed', params);\r\n DataServices.trackEventsWithGA('Withdraw action in Manage Reports',\r\n 'Click Withdraw Report',\r\n 'Failed to Withdraw Report.');\r\n } else if (response.data.status == 2) {\r\n $scope.utility.showNotification(true, 'withdrawnByAnotherUser', params);\r\n } else if (response.data.status == 3) {\r\n $scope.utility.showNotification(true, 'withdrawnIncidentSuccessful', params);\r\n }\r\n\r\n //stop showing the spinner\r\n row.entity.isWithdrawLoaded = true;\r\n\r\n //refreshes the grid\r\n getFeedbacks(true);\r\n\r\n DataServices.trackEventsWithGA('Withdraw action in Manage Report',\r\n 'Click Withdraw Report',\r\n 'Successful Withdraw Report.');\r\n } else {\r\n $scope.utility.showNotification(true, 'internalError');\r\n //stop showing the spinner\r\n row.entity.isWithdrawLoaded = true;\r\n }\r\n }, function () {\r\n //on error stop showing the spinner\r\n $scope.utility.showNotification(true, 'withDrawIncidentFailed', params);\r\n DataServices.trackEventsWithGA('Withdraw action in Manage Report',\r\n 'Click Withdraw Report',\r\n 'Failed to Withdraw Report.');\r\n row.entity.isWithdrawLoaded = true;\r\n });\r\n });\r\n };\r\n\r\n $scope.onWithdrawTouchend = function (row) {\r\n $timeout(function () {\r\n withdrawFeedback(row);\r\n }, 100);\r\n };\r\n $scope.onWithdrawClick = function (row) {\r\n if (!iosOrMobile) {\r\n withdrawFeedback(row);\r\n }\r\n };\r\n\r\n var followUpFeedback = function (row) {\r\n row.entity.isFollowUpLoaded = false;\r\n\r\n // Reset original response (used to compare on save)\r\n DataServices.originalResponse = {};\r\n DataServices.resetResponseInfo();\r\n DataServices.responseInfo.responses = {};\r\n DataServices.responseInfo.status = 1;\r\n\r\n DataServices.responseInfo.incidentId = row.entity.feedbackId;\r\n DataServices.responseInfo.incidentRef = row.entity.ref;\r\n DataServices.responseInfo.statusText = row.entity.statusDisplayName;\r\n DataServices.responseInfo.incidentDate = row.entity.incidentDate;\r\n DataServices.responseInfo.feedbackAssignments = row.entity.assigneeArray;\r\n\r\n // adding template information to use in next page submit\r\n DataServices.responseInfo.template = row.entity.templateId;\r\n\r\n DataServices.trackEventsWithGA('PageName: Manage Reports', 'Click Coordination', 'Coordination');\r\n\r\n DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.incidentCoordination, null, null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n $location.path(Constants.Url.firstFollowUpFormPage);\r\n }, function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n });\r\n\r\n };\r\n $scope.onFollowUpTouchend = function (row) {\r\n $timeout(function () {\r\n followUpFeedback(row);\r\n }, 100);\r\n };\r\n $scope.onFollowUpClick = function (row) {\r\n if (!iosOrMobile) {\r\n followUpFeedback(row);\r\n }\r\n };\r\n\r\n var printFeedback = function (row) {\r\n downloadPdf(row);\r\n };\r\n $scope.onPrintTouchend = function (row) {\r\n $timeout(function () {\r\n printFeedback(row);\r\n }, 100);\r\n };\r\n $scope.onPrintClick = function (row) {\r\n if (!iosOrMobile) {\r\n printFeedback(row);\r\n }\r\n };\r\n\r\n var assignFeedback = function (row) {\r\n\r\n var loadAssignmentData = function (feedback) {\r\n return DataServices.getFeedbackAssignees(feedback.feedbackId, $scope.IsDHVisible)\r\n .then(function (data) {\r\n var assignmentData = {\r\n feedback: feedback,\r\n assignerRoleId: data.assignerRoleId,\r\n assignableUsers: data.assignableUsers\r\n .map(function (au) {\r\n return {\r\n code: au.user.id,\r\n text: au.user.fullName,\r\n roleId: au.roleId\r\n };\r\n })\r\n };\r\n return assignmentData;\r\n },\r\n function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n throw new Error(data);\r\n });\r\n };\r\n\r\n var chooseFeedbackAssignee = function (assignmentData) {\r\n DataServices.configData.optionSets['incidentassignees'] = assignmentData.assignableUsers;\r\n return $scope.utility.openPopup('assignIncident', assignmentData.feedback).result\r\n .then(function (data) {\r\n $scope.currentLoadMessage = \"Assigning Report\";\r\n var assigneeUserId = data.outParams.incidentAssignee.code;\r\n var assigneeRoleId = data.outParams.incidentAssignee.roleId;\r\n var feedbackAssignee = {\r\n feedback: assignmentData.feedback,\r\n assignerRoleId: assignmentData.assignerRoleId,\r\n assigneeRoleId: assigneeRoleId,\r\n assigneeUserId: assigneeUserId\r\n };\r\n return feedbackAssignee;\r\n });\r\n };\r\n\r\n var saveFeedbackAssignee = function (feedbackAssignee) {\r\n return DataServices.assignFeedback({\r\n feedbackId: feedbackAssignee.feedback.feedbackId,\r\n feedbackTypeId: Constants.FeedbackType.Privacy,\r\n assignerRoleId: feedbackAssignee.assignerRoleId,\r\n roleId: feedbackAssignee.assigneeRoleId,\r\n userId: feedbackAssignee.assigneeUserId\r\n })\r\n .then(function () {\r\n DataServices.trackEventsWithGA('PageName: Manage Reports', 'Assign Successful', 'Assign');\r\n $scope.utility.showNotification(true, 'incidentAssignmentSuccessful', feedbackAssignee.feedback);\r\n }, function (data) {\r\n DataServices.trackEventsWithGA('PageName: Manage Reports', 'Assign Failed', 'Assign');\r\n $scope.utility.showNotification(true, 'incidentAssignmentFailed', feedbackAssignee.feedback);\r\n throw new Error(data);\r\n });\r\n };\r\n\r\n DataServices.trackEventsWithGA('PageName: Manage Reports', 'Click Assign', 'Assign');\r\n var feedback = row.entity;\r\n feedback.isAssignLoaded = false;\r\n loadAssignmentData(feedback)\r\n .then(function (assignmentData) {\r\n return chooseFeedbackAssignee(assignmentData);\r\n })\r\n .then(function (feedbackAssignee) {\r\n return saveFeedbackAssignee(feedbackAssignee);\r\n })\r\n .then(function () {\r\n getFeedbacks(true);\r\n })\r\n .finally(function () {\r\n feedback.isAssignLoaded = true;\r\n });\r\n };\r\n $scope.onAssignTouchend = function (row) {\r\n $timeout(function () {\r\n assignFeedback(row);\r\n }, 100);\r\n };\r\n $scope.onAssignClick = function (row) {\r\n if (!iosOrMobile) {\r\n assignFeedback(row);\r\n }\r\n };\r\n\r\n var clientExpand = function (row) {\r\n $scope.utility.openPopup('clientNames', { names: row.entity.sortedClientNameArray, incidentId: row.entity.ref });\r\n }\r\n $scope.onClientExpandTouchend = function (row) {\r\n $timeout(function () {\r\n clientExpand(row);\r\n }, 100);\r\n };\r\n $scope.onClientExpandClick = function (row) {\r\n if (!iosOrMobile) {\r\n clientExpand(row);\r\n }\r\n };\r\n\r\n var goToLinkedFeedback = function (row) {\r\n var feedbackLink = row.entity;\r\n var match = function (item) {\r\n return item.feedbackId.toLowerCase() === feedbackLink.feedbackId.toLowerCase();\r\n };\r\n var tryViewOrEditFeedback = function (feedback) {\r\n if (feedback && (feedback.canEdit || feedback.canAccess)) {\r\n viewOrEditFeedback({ entity: feedback });\r\n } else {\r\n $scope.utility.openPopup('incidentNotAccessible', { formattedRef: feedbackLink.formattedRef });\r\n }\r\n }\r\n var feedbackFromDashboard = $scope.gridOptions.data.filter(match)[0];\r\n if (feedbackFromDashboard) {\r\n tryViewOrEditFeedback(feedbackFromDashboard);\r\n } else {\r\n $scope.utility.setElementVisibility('pageLoad', true);\r\n DataServices.getFeedbacks({\r\n feedbackTypeId: feedbackLink.feedbackTypeId,\r\n searchTerm: feedbackLink.formattedRef,\r\n showAllFeedbacks: true\r\n })\r\n .then(function (data) {\r\n var feedbackFromDatabase = ((data && data.feedbacks) || []).filter(match)[0];\r\n tryViewOrEditFeedback(feedbackFromDatabase);\r\n },\r\n function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n })\r\n .finally(function () {\r\n $scope.utility.setElementVisibility('pageLoad', false);\r\n })\r\n }\r\n };\r\n\r\n $scope.onGoToLinkedFeedbackTouchend = function (row) {\r\n $timeout(function () {\r\n goToLinkedFeedback(row);\r\n }, 100);\r\n };\r\n $scope.onGoToLinkedFeedbackClick = function (row) {\r\n if (!iosOrMobile) {\r\n goToLinkedFeedback(row);\r\n }\r\n };\r\n\r\n $scope.refresh = function () {\r\n getFeedbacks(true);\r\n }\r\n\r\n $scope.createFeedback = function () {\r\n if (!DataServices.isSessionActive()) {\r\n adalAuthenticationService.login();\r\n return false;\r\n }\r\n // Reset original response (used to compare on save)\r\n DataServices.originalResponse = {};\r\n DataServices.resetResponseInfo();\r\n DataServices.responseInfo.responses = {};\r\n DataServices.responseInfo.status = 1;\r\n\r\n // Set current incident as editable or not\r\n $scope.utility.setCurrentIncidentAsEditable(true);\r\n\r\n DataServices.trackEventsWithGA('PageName: Manage Reports', 'Click Create New Report', 'Create New Report');\r\n\r\n DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.incident, null, null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n $rootScope.allowFormNavigation = true;\r\n $location.path(Constants.Url.firstIncidentFormPage);\r\n }, function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n });\r\n }\r\n\r\n // Refresh the incident grid based on selected filter values\r\n $scope.filterRecords = function () {\r\n $scope.gridOptions.data.length = 0;\r\n getFeedbacks(true);\r\n }\r\n\r\n $scope.clearAllFilters = function () {\r\n $scope.gridOptions.data.length = 0;\r\n $scope.filters.selectedFeedbackStatus = Constants.defaultFeedbackStatus;\r\n $scope.filters.selectedFinalRiskRating = '';\r\n $scope.filters.selectedArea = '';\r\n $scope.filters.selectedProgram = '';\r\n $scope.filters.selectedDateRange = Constants.defaultDateOption;\r\n $scope.filters.searchPhrase = '';\r\n getFeedbacks(true);\r\n }\r\n\r\n\r\n\r\n $scope.canCreateFeedback = function () {\r\n return true; // any user can create a new feedback\r\n }\r\n\r\n var removeFeedbackLink = function (row) {\r\n row.entity.isRemoveFeedbackLinkLoaded = false;\r\n return DataServices.removeFeedbackLink({\r\n feedbackId1: row.entity.feedbackId,\r\n feedbackId2: row.grid.parentRow.entity.feedbackId\r\n })\r\n .then(function () {\r\n DataServices.trackEventsWithGA('PageName: Manage Privacy', 'Remove Feedback Link Successful', 'Remove Feedback Link');\r\n getFeedbacks(true);\r\n }, function (data) {\r\n DataServices.trackEventsWithGA('PageName: Manage Privacy', 'Remove Feedback Link Failed', 'Remove Feedback Link');\r\n $scope.utility.showNotification(true, 'internalError');\r\n })\r\n .finally(function () {\r\n row.entity.isRemoveFeedbackLinkLoaded = true;\r\n });\r\n };\r\n\r\n $scope.onRemoveFeedbackLinkTouchend = function (row) {\r\n $timeout(function () {\r\n removeFeedbackLink(row);\r\n }, 100);\r\n };\r\n\r\n $scope.onRemoveFeedbackLinkClick = function (row) {\r\n if (!iosOrMobile) {\r\n removeFeedbackLink(row);\r\n }\r\n };\r\n\r\n $scope.canExtractCsv = function () {\r\n return true;\r\n }\r\n\r\n $scope.extractCsv = function () {\r\n var feedbackType = 1;\r\n $scope.utility.showNotification(true, 'csvExtractInProgress');\r\n var isDOH = $scope.IsDHVisible;\r\n var dateRangeId = $scope.filters.selectedDateRange === '' ? null : $scope.filters.selectedDateRange;\r\n DataServices.extractCsv(dateRangeId, feedbackType, isDOH).then(function (response) {\r\n var file = new Blob([response.data], { type: 'text/csv' });\r\n saveAs(file, 'PrivacyCsvExtract.csv');\r\n $scope.utility.showNotification(false, 'csvExtractInProgress');\r\n $scope.utility.showNotification(true, 'csvExtractCompletedSuccessfully');\r\n }, function (error) {\r\n $scope.utility.showNotification(true, 'csvExtractError');\r\n });\r\n }\r\n\r\n\r\n var overdueVirtualStatus = { code: 'overdue', text: 'Overdue' };\r\n var activeVirtualStatus = { code: 'active', text: 'Active' };\r\n\r\n var getRequestData = function () {\r\n // We should ONLY be requesting either an actual known status, records that are \"active\", records that\r\n // are \"overdue\" or not specifying a status to search by.\r\n var isStatusFilterShowAll = $scope.filters.selectedFeedbackStatus === '';\r\n var isStatusFilterOverdue = $scope.filters.selectedFeedbackStatus === overdueVirtualStatus.code;\r\n var isStatusFilterActive = $scope.filters.selectedFeedbackStatus === activeVirtualStatus.code;\r\n\r\n return {\r\n feedbackTypeId: Constants.FeedbackType.Privacy,\r\n searchTerm: $scope.filters.searchPhrase === '' ? null : $scope.filters.searchPhrase,\r\n statusId: (isStatusFilterShowAll || isStatusFilterActive || isStatusFilterOverdue) ? null : $scope.filters.selectedFeedbackStatus,\r\n isActive: isStatusFilterActive,\r\n isDOH: $scope.IsDHVisible,\r\n isOverdue: isStatusFilterOverdue,\r\n finalRiskRating: $scope.filters.selectedFinalRiskRating === '' ? null : $scope.filters.selectedFinalRiskRating,\r\n areaId: $scope.filters.selectedArea === '' ? null : $scope.filters.selectedArea,\r\n programId: $scope.filters.selectedProgram === '' ? null : $scope.filters.selectedProgram,\r\n dateRangeId: $scope.filters.selectedDateRange === '' ? null : $scope.filters.selectedDateRange\r\n };\r\n }\r\n\r\n var downloadPdf = function (row) {\r\n //var standalone = window.navigator.standalone;\r\n //var userAgent = window.navigator.userAgent.toLowerCase();\r\n //var safari = /safari/.test(userAgent);\r\n //var ios = /iphone|ipod|ipad/.test(userAgent);\r\n row.entity.isPrintLoaded = false;\r\n DataServices.viewAllFormsPdf(row.entity.feedbackId)\r\n .then(function (response) {\r\n var data = response && response.data;\r\n try {\r\n var file = new Blob([data], { type: \"application/pdf\" }, { name: row.entity.formattedRef });\r\n saveAs(file, row.entity.formattedRef + '.pdf');\r\n row.entity.isPrintLoaded = true;\r\n }\r\n catch (e) {\r\n $scope.utility.openPopup('errorDownloadDoc');\r\n row.entity.isPrintLoaded = true;\r\n }\r\n }, function () {\r\n $scope.utility.openPopup('errorDownloadDoc');\r\n row.entity.isPrintLoaded = true;\r\n });\r\n };\r\n\r\n var getFeedbacks = function (showSpinner) {\r\n\r\n if (showSpinner) {\r\n $scope.utility.setElementVisibility('pageLoad', true);\r\n $scope.utility.toggleLoadingSpinner(true);\r\n }\r\n\r\n var loadGridData = function (data) {\r\n var feedbacks = (data && data.feedbacks) || [];\r\n\r\n $scope.totalRecords = (data && data.totalRecords) || 0;\r\n $scope.filteredRecords = feedbacks.length;\r\n $scope.maxRecords = (data && data.maxRecords) || 0;\r\n $scope.hasMoreRecords = !!(data && data.hasMoreRecords);\r\n\r\n getOptions('incidentstatus-privacy').then(function (result) {\r\n $scope.filters.feedbackStatusList = result.slice();\r\n $scope.filters.feedbackStatusList.push(activeVirtualStatus);\r\n $scope.filters.feedbackStatusList.push(overdueVirtualStatus);\r\n })\r\n \r\n getOptions('riskrating').then(function (result) {\r\n $scope.filters.finalRiskRatingList = result;\r\n });\r\n getOptions('dhhsservicearea').then(function (result) {\r\n $scope.filters.areaList = result;\r\n });\r\n getOptions('dhhsprogram').then(function (result) {\r\n $scope.filters.programList = result;\r\n });\r\n getOptions('daterangefilter').then(function (result) {\r\n $scope.filters.dateRangeList = result;\r\n $scope.$apply();\r\n });\r\n\r\n var riskRatingDecodeMap = $scope.utility.getOptionSetDecodeMap($scope.filters.finalRiskRatingList);\r\n\r\n angular.forEach(feedbacks,\r\n function (row) {\r\n row.isCloseLoaded = true;\r\n row.isViewOrEditLoaded = true;\r\n row.isWithdrawLoaded = true;\r\n row.isFollowUpLoaded = true;\r\n row.isPrintLoaded = true;\r\n row.isAssignLoaded = true;\r\n row.isReOpenLoaded = true;\r\n row.isLinkLoaded = true;\r\n\r\n row.clientName = row.sortedClientNameArray[0];\r\n row.clientCount = row.sortedClientNameArray.length;\r\n row.initialRiskRatingDescription = riskRatingDecodeMap[row.initialRiskRating];\r\n row.finalRiskRatingDescription = riskRatingDecodeMap[row.finalRiskRating];\r\n\r\n angular.forEach(row.linkArray,\r\n function (subRow) {\r\n subRow.isRemoveFeedbackLinkLoaded = true;\r\n });\r\n row.subGridOptions = {\r\n enableSorting: true,\r\n enableFiltering: false,\r\n enableHorizontalScrollbar: uiGridConstants.scrollbars.NEVER,\r\n enableVerticalScrollbar: uiGridConstants.scrollbars.ALWAYS,\r\n enableRowSelection: true,\r\n enableFullRowSelection: true,\r\n enableRowHeaderSelection: false,\r\n enableSelectAll: false,\r\n multiSelect: false,\r\n rowHeight: $scope.rowHeight,\r\n columnDefs: [\r\n {\r\n field: 'removeLink',\r\n displayName: '',\r\n enableHiding: false,\r\n enableColumnMenu: false,\r\n width: $scope.isRunningInExtraSmallScreen ? '30%' : '10%',\r\n cellTemplate: ''\r\n },\r\n {\r\n field: 'formattedRef',\r\n displayName: 'Report Id',\r\n enableHiding: false,\r\n enableColumnMenu: false,\r\n sort: { direction: uiGridConstants.ASC },\r\n width: $scope.isRunningInExtraSmallScreen ? '30%' : '10%',\r\n cellTemplate: ''\r\n },\r\n {\r\n field: 'linkReason',\r\n displayName: 'Link Reason',\r\n enableHiding: false,\r\n enableColumnMenu: false,\r\n width: $scope.isRunningInExtraSmallScreen ? '40%' : '80%'\r\n }\r\n ],\r\n data: row.linkArray\r\n };\r\n\r\n });\r\n\r\n $scope.gridOptions.data = feedbacks;\r\n };\r\n\r\n if (showSpinner) {\r\n $scope.utility.setElementVisibility('pageLoad', true);\r\n }\r\n DataServices.getFeedbacks(getRequestData())\r\n .then(function (data) {\r\n loadGridData(data);\r\n },\r\n function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n })\r\n .finally(function () {\r\n if (showSpinner) {\r\n $scope.utility.setElementVisibility('pageLoad', false);\r\n }\r\n $scope.utility.toggleLoadingSpinner(false);\r\n });\r\n };\r\n\r\n $scope.utility.setElementVisibility('pageLoad', true);\r\n $scope.utility.toggleLoadingSpinner(true);\r\n\r\n function getOptions(optionset) {\r\n return ($scope.utility.getOptionSetFromConfiguration(optionset, Constants.ConfigTemplate.incident));\r\n }\r\n\r\n DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.incident, null, null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n DataServices.responseInfo.role = data.role;\r\n getFeedbacks(false);\r\n }, function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n })\r\n .finally(function () {\r\n $scope.utility.setElementVisibility('pageLoad', false);\r\n $scope.utility.toggleLoadingSpinner(false);\r\n });\r\n\r\n // Report the virtual page visit to Google Analytics.\r\n DataServices.trackPageVisitWithGA('Landing Page: Manage Reports');\r\n }]);\r\n}());","(function () {\r\n\r\n var formApp = angular.module('formApp');\r\n\r\n // this controller is use executes the functionality in introduction page\r\n formApp.controller('staffMemberLandingController',\r\n ['$scope', '$rootScope', '$location', 'adalAuthenticationService', 'UtilityServices', 'DataServices', 'Constants',\r\n function ($scope, $rootScope, $location, adalAuthenticationService, UtilityServices, DataServices, Constants) {\r\n\r\n // this sets the page title\r\n document.title = 'Feedback Management System Introduction page';\r\n\r\n DataServices.incidentSubmitted = false;\r\n\r\n $scope.isLoading = false;\r\n if ($location.path().indexOf('DH') > -1) {\r\n $scope.IsDHVisible = true;\r\n $scope.IsDFFHVisible = false;\r\n }\r\n else {\r\n $scope.IsDHVisible = false;\r\n $scope.IsDFFHVisible = true;\r\n }\r\n\r\n // this gets and set the incident config data \r\n var getConfigDataForIncidentAndRedirect = function () {\r\n $scope.isLoading = true;\r\n DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.incident, null, null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n $location.path(Constants.Url.firstIncidentFormPage);\r\n })\r\n .finally(function () {\r\n $scope.isLoading = false;\r\n });\r\n }\r\n\r\n $scope.utility = UtilityServices;\r\n\r\n $scope.createIncident = function () {\r\n if (!DataServices.isSessionActive()) {\r\n adalAuthenticationService.login();\r\n return false;\r\n }\r\n setDefaultValues();\r\n getConfigDataForIncidentAndRedirect();\r\n $rootScope.allowFormNavigation = true;\r\n };\r\n\r\n var setDefaultValues = function () {\r\n DataServices.originalResponse = {};\r\n DataServices.resetResponseInfo();\r\n DataServices.responseInfo.status = 1;\r\n DataServices.responseInfo.responses = {};\r\n DataServices.responseInfo.lastUpdatedTime = null;\r\n DataServices.responseInfo.incidentId = null;\r\n DataServices.responseInfo.incidentRef = null;\r\n DataServices.responseInfo.reportedDate = null;\r\n DataServices.responseInfo.status = null;\r\n DataServices.responseInfo.submittedDate = null;\r\n }\r\n }]);\r\n}());","(function () {\r\n\r\n var formApp = angular.module('formApp');\r\n\r\n // this controller is use executes the functionality in introduction page\r\n formApp.controller('toolsController',\r\n ['$scope', '$timeout', 'UtilityServices', 'DataServices',\r\n function ($scope, $timeout, UtilityServices, DataServices) {\r\n\r\n // this sets the page title\r\n document.title = 'Feedback Management System Tools page';\r\n\r\n var iosOrMobile = /iphone|ipod|ipad|mobile/.test(window.navigator.userAgent.toLowerCase());\r\n\r\n $scope.documentTemplates = [];\r\n DataServices.getDocumentTemplates()\r\n .then(function (data) {\r\n $scope.allDocumentTemplatesByCategory = data;\r\n }, function (data) {\r\n UtilityServices.showNotification(true, 'internalError');\r\n });\r\n\r\n var downloadDocumentTemplate = function (documentTemplate) {\r\n DataServices.getDocumentTemplateFile(documentTemplate.id)\r\n .then(function (data) {\r\n try {\r\n var file = new Blob([data]);\r\n saveAs(file, documentTemplate.fileName);\r\n }\r\n catch (e) {\r\n UtilityServices.showNotification(true, 'internalError');\r\n }\r\n }, function (data) {\r\n UtilityServices.showNotification(true, 'internalError');\r\n });\r\n };\r\n $scope.onDocumentTemplateTouchend = function (documentTemplate) {\r\n $timeout(function () {\r\n downloadDocumentTemplate(documentTemplate);\r\n }, 100);\r\n };\r\n $scope.onDocumentTemplateClick = function (documentTemplate) {\r\n if (!iosOrMobile) {\r\n downloadDocumentTemplate(documentTemplate);\r\n }\r\n };\r\n }]);\r\n}());","(function () {\r\n\r\n var formApp = angular.module('formApp');\r\n\r\n formApp.controller('caseNotesHistoryController', ['$scope', '$http', 'DataServices', function ($scope, $http, DataServices) {\r\n\r\n $scope.getHistory = function () {\r\n $scope.feedbackCaseNotes = DataServices.responseInfo.feedbackCaseNotes;\r\n };\r\n\r\n }]);\r\n}());","(function () {\r\n //get the formApp module\r\n var formApp = angular.module('formApp');\r\n\r\n //set the controller to the code here - the controller uses DataServices.\r\n formApp.controller('complaintFormController',\r\n ['$scope', '$http', '$controller', 'DataServices', 'UtilityServices', 'ValidationService', '$log', '$location', '$routeParams', '$filter', '$anchorScroll', '$timeout', '$rootScope', 'Constants',\r\n function ($scope, $http, $controller, DataServices, UtilityServices, ValidationService, $log, $location, $routeParams, $filter, $anchorScroll, $timeout, $rootScope, Constants) {\r\n\r\n // Inherit parent controller\r\n $controller('questionController', { $scope: $scope });\r\n $controller('documentController', { $scope: $scope });\r\n $controller('navigationController', { $scope: $scope });\r\n\r\n function process(date) {\r\n var parts = date.split(\"/\");\r\n return new Date(parts[2], parts[1] - 1, parts[0]);\r\n }\r\n\r\n var optionSet;\r\n\r\n function prepareOptionSet() {\r\n if (window.location.href.indexOf('complaint/1/complaintdetails') > -1) {\r\n if (window.location.href.indexOf('DFFH') > -1) {\r\n if (DataServices.responseInfo.lodgementDate == null || DataServices.isDFFHComplaint) {\r\n for (var j = DataServices.configData.optionSets[\"organisation\"].length - 1; j >= 0; j--) {\r\n if (DataServices.configData.optionSets[\"organisation\"][j].text == 'Department of Health') {\r\n DataServices.configData.optionSets[\"organisation\"].splice(j, 1);\r\n }\r\n }\r\n for (var l = DataServices.configData.optionSets[\"dhhsprogram\"].length - 1; l >= 0; l--) {\r\n if (optionSet[l].text == 'Covid19' || optionSet[l].text == 'Health') {\r\n optionSet.splice(l, 1);\r\n }\r\n }\r\n }\r\n else {\r\n for (var n = DataServices.configData.optionSets[\"dhhsprogram\"].length - 1; n >= 0; n--) {\r\n if (optionSet[n].text == 'Covid19' || optionSet[n].text == 'Community Health' || optionSet[n].text == 'Fairness') {\r\n optionSet.splice(n, 1);\r\n }\r\n }\r\n\r\n }\r\n }\r\n else {\r\n if (DataServices.responseInfo.lodgementDate == null || DataServices.isDHComplaint) {\r\n for (var k = DataServices.configData.optionSets[\"organisation\"].length - 1; k >= 0; k--) {\r\n if ((DataServices.configData.optionSets[\"organisation\"][k].text == 'Department of Families, Fairness and Housing')) {\r\n DataServices.configData.optionSets[\"organisation\"].splice(k, 1);\r\n }\r\n }\r\n for (var m = DataServices.configData.optionSets[\"dhhsprogram\"].length - 1; m >= 0; m--) {\r\n if (!(optionSet[m].text == 'Covid19' || optionSet[m].text == 'Health' || optionSet[m].text == 'Family Violence and Sexual Assault Services')) {\r\n optionSet.splice(m, 1);\r\n }\r\n }\r\n }\r\n else {\r\n for (var p = DataServices.configData.optionSets[\"dhhsprogram\"].length - 1; p >= 0; p--) {\r\n if (optionSet[p].text == 'Covid19' || optionSet[p].text == 'Community Health' || optionSet[p].text == 'Fairness') {\r\n optionSet.splice(p, 1);\r\n }\r\n }\r\n }\r\n }\r\n $scope.configData.optionSets[\"organisation\"] = DataServices.configData.optionSets[\"organisation\"];\r\n }\r\n }\r\n\r\n $scope.isDH = function () {\r\n if ($location.path().indexOf('DH') > -1) {\r\n $scope.IsDHVisible = true;\r\n return true;\r\n }\r\n else {\r\n $scope.IsDHVisible = false;\r\n return false;\r\n }\r\n }\r\n\r\n function cutoffDate() {\r\n if (DataServices.responseInfo.lodgementDate == null || DataServices.isDHComplaint || DataServices.isDFFHComplaint) {\r\n $scope.isAfterCutOffDate = true;\r\n }\r\n else {\r\n $scope.isAfterCutOffDate = false;\r\n }\r\n\r\n }\r\n\r\n // only get the config data if we don't have it\r\n DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.complaint, $scope.versionNumber, null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n $scope.setupTriggersAndDynamicValues();\r\n $scope.setSummaryErrorFocus();\r\n\r\n document.title = $scope.utility.getPageTitle($scope.navTabNum, $scope.pageUrl);\r\n });\r\n\r\n // default access for attaching documents (NOTE: this needs to come from the user role)\r\n DataServices.responseInfo.access = {\r\n canSaveFile: UtilityServices.isCurrentIncidentEditable(),\r\n canViewFile: true,\r\n canDeleteFile: UtilityServices.isCurrentIncidentEditable()\r\n };\r\n\r\n // TODO: We need to go through this to de-clutter!!\r\n // Complaint specific scope items\r\n $scope.access = DataServices.responseInfo.access;\r\n $scope.incidentId = DataServices.responseInfo.incidentId;\r\n $scope.incidentRef = DataServices.responseInfo.incidentRef;\r\n $scope.status = DataServices.responseInfo.status;\r\n $scope.statusText = DataServices.responseInfo.statusText;\r\n $scope.reportedDate = DataServices.responseInfo.reportedDate ? moment(DataServices.responseInfo.reportedDate).format($scope.Constants.ausDateFormat) : null;\r\n $scope.submittedDate = DataServices.responseInfo.submittedDate ? moment(DataServices.responseInfo.submittedDate).format($scope.Constants.ausDateFormat) : null;\r\n $scope.template = Constants.ConfigTemplate.complaint;\r\n $scope.role = DataServices.responseInfo.role;\r\n $scope.feedbackType = Constants.FeedbackType.Complaint;\r\n getOptions('dhhsprogram').then(function (result) {\r\n $scope.programList = result;\r\n optionSet = result\r\n prepareOptionSet();\r\n });\r\n\r\n function getOptions(optionset) {\r\n return $scope.utility.getOptionSetFromConfiguration(optionset, Constants.ConfigTemplate.complaint);\r\n }\r\n\r\n\r\n function validateComplaintsForm() {\r\n var isValid = true;\r\n var previousPageId = $scope.pageId;\r\n\r\n $scope.configData.navigationTabs.forEach(function (tab) {\r\n tab.pages.forEach(function (page) {\r\n var pageId = tab.number + '-' + page.number;\r\n $scope.pageId = pageId;\r\n if (page.template !== \"summary\" && $scope.responses[pageId] === undefined || $scope.responses[pageId] === null) {\r\n if ($scope.$eval(page.condition, null) == true) {\r\n isValid = false;\r\n }\r\n }\r\n else {\r\n var isPageValid = $scope.validatePage(tab.number, page.url, null, null, null, 'inline', true);\r\n if (isPageValid === false) {\r\n isValid = false;\r\n }\r\n }\r\n });\r\n });\r\n\r\n $scope.pageId = previousPageId;\r\n return isValid;\r\n }\r\n\r\n $scope.onAnonymousCheckChange = function () {\r\n var complainantDetails = $scope.responses[\"1-1\"][0].complainantdetails[0];\r\n if (complainantDetails.rDAnonymous === \"yes\") {\r\n DataServices.setAnonymousDetails(complainantDetails, true);\r\n $scope.utility.removeFromValidationErrors(null, $scope.pageId, null, null, null, null);\r\n }\r\n else {\r\n DataServices.setAnonymousDetails(complainantDetails, false);\r\n }\r\n }\r\n\r\n $scope.isAnonymousSelected = function () {\r\n var complainantDetails = $scope.responses[\"1-1\"][0].complainantdetails[0];\r\n if (complainantDetails.rDAnonymous === \"yes\") {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n //person details\r\n $scope.getLocalCouncilFromAddressForClient = function (pIndex, sIndex) {\r\n var clientdetails = $scope.responses[\"1-2\"][0].clientdetails;\r\n var details = clientdetails[sIndex];\r\n if (details[\"cDAddress-lga\"] === undefined) {\r\n details[\"cDAddress-lga\"] = \"\";\r\n }\r\n if (details !== undefined) {\r\n var localCouncilDetails = DataServices.getLocalCouncilFromAddress(details[\"cDAddress-stateCode\"], details[\"cDAddress-lga\"]);\r\n details[\"cDLocalCouncilText\"] = localCouncilDetails.text;\r\n details[\"cDLocalCouncil\"] = localCouncilDetails.code;\r\n return localCouncilDetails.text;\r\n }\r\n }\r\n\r\n //your details/Complainant details\r\n $scope.getLocalCouncilFromAddress = function () {\r\n var responses = $scope.responses[\"1-1\"][0];\r\n var complainantdetails = responses[\"complainantdetails\"][0];\r\n if (complainantdetails[\"rDAddress-lga\"] === undefined) {\r\n complainantdetails[\"rDAddress-lga\"] = \"\";\r\n }\r\n if (complainantdetails !== undefined) {\r\n var localCouncilDetails = DataServices.getLocalCouncilFromAddress(complainantdetails[\"rDAddress-stateCode\"], complainantdetails[\"rDAddress-lga\"]);\r\n complainantdetails[\"rDLocalCouncil\"] = localCouncilDetails.code;\r\n complainantdetails[\"rDLocalCouncilText\"] = localCouncilDetails.text;\r\n return localCouncilDetails.text;\r\n }\r\n }\r\n\r\n // Submits the feedback if there are no validation errors.\r\n $scope.submitFeedback = function () {\r\n //Clearing the validation errors\r\n $scope.validationErrors.length = 0;\r\n\r\n if (validateComplaintsForm()) {\r\n $scope.currentLoadSubmitMessage = \"Submitting Complaint\";\r\n\r\n // TODO: we need a cleaner way of injecting this captcha value. \r\n DataServices.responseInfo.captchaResponse = $scope.valueOfQuestion(null, 'cOCaptcha', 'consent', 0, 0);\r\n\r\n $scope.isSaving = true;\r\n cutoffDate();\r\n DataServices.submitIncident($scope.feedbackType, $scope.IsDHVisible, $scope.isAfterCutOffDate)\r\n .then(function (response) {\r\n if (response.data && response.data.status == 2) {\r\n $scope.utility.openPopup('savedElsewhere', { lastUpdatedBy: response.data.lastUpdatedBy });\r\n }\r\n else {\r\n if (response.data && response.data.id) {\r\n DataServices.trackEventsWithGA('Submit action in ' + $scope.pageUrl, 'Click Submit To Manager', 'Successfully Submitted Incident');\r\n\r\n $scope.updateStatusBarInformation(response.data);\r\n\r\n $scope.goToNextPage();\r\n }\r\n else {\r\n $scope.utility.showNotification(true, 'internalError');\r\n }\r\n }\r\n }, function (response) {\r\n $scope.utility.openPopup('errorSubmit');\r\n DataServices.trackEventsWithGA('Error occured during Submiting in ' + $scope.pageUrl, 'Click Submit To Manager', 'Failed to Submit Incident');\r\n })\r\n .finally(function () {\r\n $scope.isSaving = false;\r\n });\r\n }\r\n else {\r\n if ($scope.validationErrors !== null && $scope.validationErrors !== undefined) {\r\n if ($scope.validationErrors.length > 0) {\r\n var error = $scope.validationErrors[0];\r\n var tabNum = error.pageNo.split(\"-\")[0];\r\n var pageNum = error.pageNo.split(\"-\")[1];\r\n\r\n ExpandErroredSections(\"1-2\", \"clientdetails\");\r\n var page = $scope.configData.navigationTabs[tabNum - 1].pages[pageNum - 1];\r\n $scope.utility\r\n .openPopup('reviewComplaintErrors').result\r\n .then(function (data) {\r\n $scope.goToPage(tabNum, page.url);\r\n });\r\n }\r\n else {\r\n $scope.utility\r\n .openPopup('reviewComplaintErrors');\r\n }\r\n }\r\n }\r\n };\r\n\r\n function ExpandErroredSections(pageId, sectionName) {\r\n //Expanding the error sections\r\n var errorSectionIndexList = [];\r\n $scope.validationErrors.forEach(function (error) {\r\n if (error.pageNo === pageId && error.pageIndex === 0 && error.sectionCode === sectionName) {\r\n if (errorSectionIndexList.indexOf(error.sectionIndex) === -1) {\r\n errorSectionIndexList.push(error.sectionIndex);\r\n }\r\n }\r\n });\r\n\r\n if (errorSectionIndexList.length > 0) {\r\n errorSectionIndexList.forEach(function (sectionIndex) {\r\n $scope.responses[pageId][0][sectionName][sectionIndex].$state = \"Editing\";\r\n });\r\n }\r\n }\r\n\r\n $scope.IsOtherOrgSelected = function () {\r\n if ($scope.responses[\"1-3\"][0][\"serviceDetails\"][0] !== null\r\n && $scope.responses[\"1-3\"][0][\"serviceDetails\"][0] !== undefined\r\n && $scope.responses[\"1-3\"][0][\"serviceDetails\"][0][\"sPOrgName\"] !== null\r\n && $scope.responses[\"1-3\"][0][\"serviceDetails\"][0][\"sPOrgName\"] !== undefined) {\r\n return $scope.responses[\"1-3\"][0][\"serviceDetails\"][0][\"sPOrgName\"][\"text\"] === \"Other\";\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n // Downloads the PDF\r\n $scope.downloadPdf = function (qCode) {\r\n\r\n DataServices.trackEventsWithGA('Download PDF action in ' + $scope.pageUrl, 'Click Download PDF', 'Download Feedback PDF');\r\n $scope.isButtonLoading[qCode] = true;\r\n\r\n DataServices.viewComplaintsUnRegisteredPdf($scope.incidentId)\r\n .then(function (response) {\r\n var data = response && response.data;\r\n try {\r\n var file = new Blob([data], { type: \"application/pdf\" }, { name: DataServices.responseInfo.incidentRef });\r\n\r\n //if (window.Blob && window.navigator.msSaveOrOpenBlob) {\r\n // saveAs(file, DataServices.responseInfo.incidentRef + '.pdf');\r\n //}\r\n saveAs(file, DataServices.responseInfo.incidentRef + '.pdf');\r\n }\r\n catch (e) {\r\n $scope.utility.openPopup('errorDownloadPdf');\r\n }\r\n $scope.isButtonLoading[qCode] = false;\r\n }, function () {\r\n $scope.utility.openPopup('errorDownloadPdf');\r\n $scope.isButtonLoading[qCode] = false;\r\n });\r\n };\r\n\r\n // Updates information needed for the status bar\r\n $scope.updateStatusBarInformation = function (response) {\r\n\r\n DataServices.responseInfo.incidentId = response.id;\r\n DataServices.responseInfo.incidentRef = response.ref;\r\n DataServices.responseInfo.lastUpdatedTime = response.allocatedLastUpdatedTime;\r\n DataServices.responseInfo.reportedDate = response.reportedDate;\r\n DataServices.responseInfo.submittedDate = response.submittedDate;\r\n DataServices.responseInfo.status = response.incidentStatus;\r\n DataServices.responseInfo.statusText = response.incidentStatusText;\r\n\r\n // Set original response to current response as update has occurred.\r\n $scope.originalResponse = angular.copy($scope.responses);\r\n\r\n $scope.incidentId = DataServices.responseInfo.incidentId;\r\n $scope.incidentRef = DataServices.responseInfo.incidentRef;\r\n $scope.lastUpdatedTime = DataServices.responseInfo.lastUpdatedTime;\r\n $scope.reportedDate = DataServices.responseInfo.reportedDate ? moment(DataServices.responseInfo.reportedDate).format($scope.Constants.ausDateFormat) : null;\r\n $scope.submittedDate = DataServices.responseInfo.submittedDate ? moment(DataServices.responseInfo.submittedDate).format($scope.Constants.ausDateFormat) : null;\r\n $scope.status = DataServices.responseInfo.status;\r\n $scope.statusText = DataServices.responseInfo.statusText;\r\n $scope.role = DataServices.responseInfo.role;\r\n\r\n if (response.formConfig && response.formConfig.configData) {\r\n // Explicitly set config data\r\n DataServices.configData = response.formConfig.configData;\r\n $scope.configData = response.formConfig.configData;\r\n\r\n DataServices.pushConfigData(response.formConfig.configData, Constants.ConfigTemplate.complaint, response.formConfig.versionNumber, response.formConfig.role);\r\n }\r\n }\r\n\r\n // ******************************************\r\n // NOTE: All local functions below this line.\r\n // ******************************************\r\n\r\n // Performs the actual save for registered users\r\n var saveIncidentRegisteredUser = function (feedbackType) {\r\n\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, null, null, null, 'inline', null, true)) {\r\n\r\n $scope.isSaving = true;\r\n DataServices.saveIncidentRegisteredUser(feedbackType)\r\n .then(\r\n function (response) {\r\n $scope.isSaving = false;\r\n\r\n if (response.data && response.data.status == 2) {\r\n $scope.utility.openPopup('savedElsewhere',\r\n { lastUpdatedBy: response.data.lastUpdatedBy });\r\n }\r\n else {\r\n if (response.data && response.data.id) {\r\n DataServices.trackEventsWithGA('Save action in ' + $scope.pageUrl, 'Click Save Incident Registered User', 'Successfully Saved Incident');\r\n\r\n $scope.updateStatusBarInformation(response.data);\r\n $scope.utility.openPopup('successSaveComplaint',\r\n {\r\n incidentRef: response.data.ref,\r\n oldStatusText: $scope.statusText,\r\n statusText: \"Save Sucessfully\"\r\n //response.data.incidentStatusText\r\n }).closed.then(function () {\r\n $rootScope.allowFormNavigation = false;\r\n $scope.returnToComplaints();\r\n });\r\n } else {\r\n $scope.utility.showNotification(true, 'internalError');\r\n }\r\n }\r\n },\r\n function (response) {\r\n $scope.isSaving = false;\r\n $scope.utility.openPopup('errorSave');\r\n DataServices.trackEventsWithGA('Error occured during Save in ' + $scope.pageUrl,\r\n 'Click Save Incident Registered User',\r\n 'Failed to Save Incident');\r\n }\r\n );\r\n }\r\n }\r\n\r\n $scope.callCancelFollowUp = function () {\r\n $scope.cancel();\r\n };\r\n\r\n // ******************************************\r\n // NOTE: All local functions below this line.\r\n // ******************************************\r\n\r\n $scope.cancel = function () {\r\n // function to call on window close on Incident form\r\n if (DataServices.isFullyRegisteredUser()) {\r\n\r\n if ($scope.isPageEditable === false) {\r\n $scope.returnToComplaints();\r\n }\r\n else {\r\n if (!angular.equals($scope.originalResponse, $scope.responses)) {\r\n // for registered users\r\n // display a confirmation message\r\n $scope.utility.openPopup('warnUserBeforeCancelRegisteredUser').result\r\n .then(function (data) {\r\n if (data.result == \"thirdButtonClick\") {\r\n // On Yes, Save the changes\r\n $rootScope.allowFormNavigation = false;\r\n saveIncidentRegisteredUser($scope.feedbackType);\r\n }\r\n else {\r\n $scope.returnToComplaints();\r\n }\r\n });\r\n }\r\n else {\r\n $scope.returnToComplaints();\r\n }\r\n }\r\n\r\n }\r\n else {\r\n // for direct users \r\n // If user chose Yes, current page is closed and landing page is displayed.\r\n // If user selects 'No', system stays on the current page.\r\n $scope.utility.openPopup('warnUserBeforeCancel').result.then(\r\n function (result) {\r\n // On Yes go to landing page\r\n $rootScope.allowFormNavigation = false;\r\n $scope.returnToComplaints();\r\n });\r\n }\r\n }\r\n\r\n\r\n $scope.returnToComplaints = function () {\r\n $location.path(Constants.Url.landing);\r\n }\r\n }]);\r\n}());","(function () {\r\n //get the formApp module\r\n var formApp = angular.module('formApp');\r\n\r\n //set the controller to the code here - the controller uses DataServices.\r\n formApp.controller('complaintRegisteredFormController',\r\n ['$scope', '$http', '$controller', 'DataServices', 'UtilityServices', 'ValidationService', '$log', '$location', '$routeParams', '$filter', '$anchorScroll', '$timeout', '$rootScope', 'Constants',\r\n function ($scope, $http, $controller, DataServices, UtilityServices, ValidationService, $log, $location, $routeParams, $filter, $anchorScroll, $timeout, $rootScope, Constants) {\r\n\r\n // Inherit parent controller\r\n $controller('questionController', { $scope: $scope });\r\n $controller('documentController', { $scope: $scope });\r\n $controller('navigationController', { $scope: $scope });\r\n\r\n var filteredProgramList = [];\r\n var filteredProgramList1 = [];\r\n var filteredProgramList2 = [];\r\n var filteredProgramList3 = [];\r\n var filteredProgramList4 = [];\r\n var filteredOrgName1 = [];\r\n var filteredOrgName2 = [];\r\n var filteredOrgName3 = [];\r\n\r\n\r\n function process(date) {\r\n var parts = date.split(\"/\");\r\n return new Date(parts[2], parts[1] - 1, parts[0]);\r\n }\r\n if ($location.path().indexOf('complaintRegistered/1/complaintdetails') > -1) {\r\n if (sessionStorage.getItem('popRegisteredState') != 'shown') {\r\n getOptions('dhhsprogram').then(function (result) { // Since it's an SPA application ecentually these sets should be done on services once for whole application\r\n DataServices.programRegisteredOriginalResponse = result;\r\n filteredProgramList1 = DataServices.programRegisteredOriginalResponse;\r\n getOptions('organisation').then(function (result) {\r\n DataServices.orgNameOriginalResponse = result.slice();\r\n filteredOrgName1 = DataServices.orgNameOriginalResponse;\r\n sessionStorage.setItem('popRegisteredState', 'shown')\r\n populateFormFields();\r\n });\r\n });\r\n }\r\n else {\r\n if (DataServices.programRegisteredOriginalResponse.length === 0) {\r\n getOptions('dhhsprogram').then(function (result) {\r\n filteredProgramList1 = result;\r\n getOptions('organisation').then(function (result) {\r\n filteredOrgName1 = result.slice();\r\n populateFormFields();\r\n });\r\n });\r\n }\r\n else {\r\n filteredProgramList1 = DataServices.programRegisteredOriginalResponse;\r\n filteredOrgName1 = DataServices.orgNameOriginalResponse;\r\n }\r\n\r\n }\r\n }\r\n\r\n if ($location.path().indexOf('complaintRegistered/1/complainantdetails') > -1) {\r\n if (sessionStorage.getItem('popNavState') != 'shown') {\r\n\r\n filteredProgramList4 = $scope.configData.navigationTabs[0].pages.slice();\r\n\r\n DataServices.navigationTabsOriginalResponse = filteredProgramList4;\r\n DataServices.navigationTabsResponse = $scope.configData;\r\n\r\n sessionStorage.setItem('popNavState', 'shown')\r\n }\r\n if (window.location.href.indexOf('DH') > -1) {\r\n if (DataServices.responseInfo.lodgementDate == null) {\r\n if (($scope.configData.navigationTabs[0].title == 'Feedback')) {\r\n filteredProgramList2 = $scope.configData.navigationTabs[0].pages.slice();\r\n\r\n for (var j = 0; j < filteredProgramList2.length; j++) {\r\n if (!(filteredProgramList2[j].title == 'Child Details')) {\r\n filteredProgramList3.push(filteredProgramList2[j]);\r\n }\r\n }\r\n\r\n }\r\n }\r\n else {\r\n if ((DataServices.responseInfo.lodgementDate != null) && DataServices.isDHHSComplaint) {\r\n filteredProgramList3 = $scope.configData.navigationTabs[0].pages;\r\n }\r\n else {\r\n if (($scope.configData.navigationTabs[0].title == 'Feedback')) {\r\n filteredProgramList2 = $scope.configData.navigationTabs[0].pages.slice();\r\n\r\n for (var j = 0; j < filteredProgramList2.length; j++) {\r\n if (!(filteredProgramList2[j].title == 'Child Details')) {\r\n filteredProgramList3.push(filteredProgramList2[j]);\r\n }\r\n }\r\n\r\n }\r\n }\r\n }\r\n $scope.configData.navigationTabs[0].pages = filteredProgramList3;\r\n }\r\n else {\r\n $scope.configData.navigationTabs[0].pages = $scope.configData.navigationTabs[0].pages;\r\n }\r\n\r\n }\r\n\r\n var config = DataServices.getCachedConfigData(Constants.ConfigTemplate.complaintRegistered);\r\n if (config) {\r\n $scope.setupTriggersAndDynamicValues();\r\n $scope.setSummaryErrorFocus();\r\n document.title = $scope.utility.getPageTitle($scope.navTabNum, $scope.pageUrl);\r\n }\r\n else {\r\n DataServices.getConfiguration(Constants.ConfigTemplate.complaintRegistered, $scope.versionNumber)\r\n .then(function (data) {\r\n DataServices.pushConfigData(data.configData, Constants.ConfigTemplate.complaintRegistered, data.versionNumber, data.role);\r\n\r\n $scope.setupTriggersAndDynamicValues();\r\n $scope.setSummaryErrorFocus();\r\n document.title = $scope.utility.getPageTitle($scope.navTabNum, $scope.pageUrl);\r\n });\r\n }\r\n\r\n // default access for attaching documents (NOTE: this needs to come from the user role)\r\n DataServices.responseInfo.access = {\r\n canSaveFile: UtilityServices.isCurrentIncidentEditable(),\r\n canViewFile: true,\r\n canDeleteFile: UtilityServices.isCurrentIncidentEditable()\r\n };\r\n\r\n $scope.isDH = function () {\r\n if ($location.path().indexOf('DH') > -1) {\r\n $scope.IsDHVisible = true;\r\n return true;\r\n }\r\n else {\r\n $scope.IsDHVisible = false;\r\n return false;\r\n }\r\n }\r\n\r\n function populateFormFields() {\r\n if ($location.path().indexOf('DH') > -1) {\r\n if (DataServices.responseInfo.lodgementDate == null || DataServices.isDHComplaint) {\r\n for (var j = 0; j < filteredProgramList1.length; j++) {\r\n if (filteredProgramList1[j].text == 'Covid19' || filteredProgramList1[j].text == 'Health' || filteredProgramList1[j].text == 'Family Violence and Sexual Assault Services') {\r\n filteredProgramList.push(filteredProgramList1[j]);\r\n }\r\n }\r\n for (var k = 0; k < filteredOrgName1.length; k++) {\r\n if (!(filteredOrgName1[k].text == 'Department of Families, Fairness and Housing')) {\r\n //filteredProgramList2.navigationTabs[i].pages.splice(j, 1);\r\n filteredOrgName3.push(filteredOrgName1[k]);\r\n }\r\n }\r\n }\r\n else {\r\n for (var a = 0; a < filteredProgramList1.length; a++) {\r\n if (!(filteredProgramList1[a].text == 'Covid19' || filteredProgramList1[a].text == 'Community Health' || filteredProgramList1[a].text == 'Fairness')) {\r\n filteredProgramList.push(filteredProgramList1[a]);\r\n }\r\n }\r\n filteredOrgName3 = filteredOrgName1;\r\n }\r\n }\r\n else {\r\n if (DataServices.responseInfo.lodgementDate == null || DataServices.isDFFHComplaint) {\r\n for (var l = 0; l < filteredProgramList1.length; l++) {\r\n if (!(filteredProgramList1[l].text == 'Covid19' || filteredProgramList1[l].text == 'Health')) {\r\n filteredProgramList.push(filteredProgramList1[l]);\r\n }\r\n }\r\n for (var m = 0; m < filteredOrgName1.length; m++) {\r\n if (!(filteredOrgName1[m].text == 'Department of Health')) {\r\n //filteredProgramList2.navigationTabs[i].pages.splice(j, 1);\r\n filteredOrgName3.push(filteredOrgName1[m]);\r\n }\r\n }\r\n }\r\n else {\r\n for (var b = 0; b < filteredProgramList1.length; b++) {\r\n if (!(filteredProgramList1[b].text == 'Covid19' || filteredProgramList1[b].text == 'Community Health' || filteredProgramList1[b].text == 'Fairness')) {\r\n filteredProgramList.push(filteredProgramList1[b]);\r\n }\r\n }\r\n filteredOrgName3 = filteredOrgName1;\r\n }\r\n }\r\n DataServices.configData.optionSets[\"dhhsprogram\"] = filteredProgramList;\r\n $scope.configData.optionSets[\"organisation\"] = filteredOrgName3;\r\n }\r\n\r\n function cutoffDate() {\r\n if (DataServices.responseInfo.lodgementDate == null || DataServices.isDHComplaint || DataServices.isDFFHComplaint) {\r\n $scope.isAfterCutOffDate = true;\r\n }\r\n else {\r\n $scope.isAfterCutOffDate = false;\r\n }\r\n\r\n }\r\n\r\n\r\n // TODO: We need to go through this to de-clutter!!\r\n // Complaint specific scope items\r\n $scope.access = DataServices.responseInfo.access;\r\n $scope.incidentId = DataServices.responseInfo.incidentId;\r\n $scope.incidentRef = DataServices.responseInfo.incidentRef;\r\n $scope.status = DataServices.responseInfo.status;\r\n $scope.statusText = DataServices.responseInfo.statusText;\r\n $scope.reportedDate = DataServices.responseInfo.reportedDate ? moment(DataServices.responseInfo.reportedDate).format($scope.Constants.ausDateFormat) : null;\r\n $scope.submittedDate = DataServices.responseInfo.submittedDate ? moment(DataServices.responseInfo.submittedDate).format($scope.Constants.ausDateFormat) : null;\r\n $scope.template = Constants.ConfigTemplate.complaintRegistered;\r\n $scope.role = DataServices.responseInfo.role;\r\n $scope.feedbackType = Constants.FeedbackType.Complaint;\r\n\r\n // Saves the current feedback\r\n $scope.saveFeedback = function (btnId) {\r\n\r\n $scope.currentLoadSaveMessage = \"Saving complaint\";\r\n var noMandatoryChecksForSave = true;\r\n if ($scope.isPageEditable === true && $scope.validatePage($scope.navTabNum, $scope.pageUrl, null, null, null, 'inline', null, noMandatoryChecksForSave)) {\r\n // save Feedback for authenticated user\r\n if (!angular.equals($scope.originalResponse, $scope.responses)) {\r\n // Perform user access check first to determine if user is warned, then save Feedback.\r\n saveFeedbackRegisteredUser($scope.feedbackType, btnId);\r\n }\r\n else {\r\n // No changes have been made, alert user\r\n $scope.utility.openPopup('noChangesSaveNotRequired', { incidentRef: $scope.incidentRef });\r\n }\r\n }\r\n else {\r\n $scope.alertFirstError();\r\n }\r\n\r\n // save failed if we reach here.\r\n return null;\r\n }\r\n\r\n //person details\r\n $scope.getLocalCouncilFromAddressForClient = function (pIndex, sIndex) {\r\n var clientdetails = $scope.responses[\"1-2\"][0].clientdetails;\r\n var details = clientdetails[sIndex];\r\n if (details[\"cDAddress-lga\"] === undefined) {\r\n details[\"cDAddress-lga\"] = \"\";\r\n }\r\n if (details[\"cDAddress-stateCode\"] === undefined) {\r\n details[\"cDAddress-stateCode\"] = \"Local Council\";\r\n }\r\n if (details !== undefined && details[\"cDAddress-stateCode\"] !== undefined && details[\"cDAddress-lga\"] !== undefined) {\r\n var localCouncilDetails = DataServices.getLocalCouncilFromAddress(details[\"cDAddress-stateCode\"], details[\"cDAddress-lga\"]);\r\n details[\"cDLocalCouncil\"] = localCouncilDetails.code;\r\n details[\"cDLocalCouncilText\"] = localCouncilDetails.text;\r\n return localCouncilDetails.text;\r\n }\r\n }\r\n\r\n $scope.IsOtherOrgSelected = function () {\r\n if ($scope.responses[\"1-4\"][0][\"serviceDetails\"][0] !== null && $scope.responses[\"1-4\"][0][\"serviceDetails\"][0] !== undefined && $scope.responses[\"1-4\"][0][\"serviceDetails\"][0][\"sPOrgName\"] !== null\r\n && $scope.responses[\"1-4\"][0][\"serviceDetails\"][0][\"sPOrgName\"] !== undefined) {\r\n return $scope.responses[\"1-4\"][0][\"serviceDetails\"][0][\"sPOrgName\"][\"text\"] === \"Other\";\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n //your details/Complainant details\r\n $scope.getLocalCouncilFromAddress = function () {\r\n var responses = $scope.responses[\"1-1\"][0];\r\n var complainantdetails = responses[\"complainantdetails\"][0];\r\n\r\n if (complainantdetails[\"rDAddress-lga\"] === undefined) {\r\n complainantdetails[\"rDAddress-lga\"] = \"\";\r\n }\r\n if (complainantdetails[\"rDAddress-stateCode\"] === undefined) {\r\n complainantdetails[\"rDAddress-stateCode\"] = \"Local Council\";\r\n }\r\n if (complainantdetails !== undefined && complainantdetails[\"rDAddress-stateCode\"] !== undefined && complainantdetails[\"rDAddress-lga\"] !== undefined) {\r\n var localCouncilDetails = DataServices.getLocalCouncilFromAddress(complainantdetails[\"rDAddress-stateCode\"], complainantdetails[\"rDAddress-lga\"]);\r\n complainantdetails[\"rDLocalCouncil\"] = localCouncilDetails.code;\r\n complainantdetails[\"rDLocalCouncilText\"] = localCouncilDetails.text;\r\n return localCouncilDetails.text;\r\n }\r\n }\r\n\r\n $scope.onAnonymousCheckChange = function () {\r\n var complainantDetails = $scope.responses[\"1-1\"][0].complainantdetails[0];\r\n if (complainantDetails.rDAnonymous === \"yes\") {\r\n DataServices.setAnonymousDetails(complainantDetails, true);\r\n $scope.utility.removeFromValidationErrors(null, $scope.pageId, null, null, null, null);\r\n }\r\n else {\r\n DataServices.setAnonymousDetails(complainantDetails, false);\r\n }\r\n }\r\n\r\n $scope.isAnonymousSelected = function () {\r\n var complainantDetails = $scope.responses[\"1-1\"][0].complainantdetails[0];\r\n if (complainantDetails.rDAnonymous === \"yes\") {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n $scope.IsOtherProgramSelected = function () {\r\n return UtilityServices.getOptionSetText('dhtypeofservice',$scope.responses[\"1-4\"][0][\"serviceDetails\"][0][\"sPProgram_DH\"]) === \"Other\";\r\n } \r\n\r\n doesDivisionHaveValue = function () {\r\n var serviceDetails = $scope.responses[\"1-4\"][0].serviceDetails[0];\r\n\r\n if (serviceDetails.sPDHSecondaryProgram === undefined || serviceDetails.sPDHSecondaryProgram === null) {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n doesBranchHaveValue = function () {\r\n var serviceDetails = $scope.responses[\"1-4\"][0].serviceDetails[0];\r\n \r\n if (serviceDetails.sPServiceType_DH === undefined || serviceDetails.sPServiceType_DH === null) {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n\r\n $scope.haveAnyUnits = function () {\r\n \r\n if (!doesBranchHaveValue() || document.getElementById(\"0-serviceDetails-0-sPServiceArea_DH\") === null) {\r\n return false;\r\n }\r\n\r\n var unitList = document.getElementById(\"0-serviceDetails-0-sPServiceArea_DH\").options;\r\n \r\n if (unitList != null && unitList.length > 1) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n $scope.haveAnyBranches = function () {\r\n \r\n if (!doesDivisionHaveValue() || document.getElementById(\"0-serviceDetails-0-sPServiceType_DH\") === null) {\r\n return false;\r\n }\r\n\r\n var unitList = document.getElementById(\"0-serviceDetails-0-sPServiceType_DH\").options;\r\n\r\n if (unitList != null && unitList.length > 2) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n function getOptions(optionset) {\r\n return ($scope.utility.getOptionSetFromConfiguration(optionset, Constants.ConfigTemplate.complaintRegistered));\r\n }\r\n\r\n function getLocalCouncilDetails(localCouncil) {\r\n var matchedLga = $scope.configData.optionSets\r\n .localgovernmentarea\r\n .filter(function (item) { return item.text === localCouncil; });\r\n if (matchedLga.length > 0) {\r\n return matchedLga[0];\r\n }\r\n }\r\n\r\n function validateComplaintsForm() {\r\n var isValid = true;\r\n var previousPageId = $scope.pageId;\r\n\r\n $scope.configData.navigationTabs.forEach(function (tab) {\r\n tab.pages.forEach(function (page) {\r\n var pageId = tab.number + '-' + page.number;\r\n $scope.pageId = pageId;\r\n if (page.template !== \"summary\" && $scope.responses[pageId] === undefined || $scope.responses[pageId] === null) {\r\n if ($scope.$eval(page.condition, null) == true) {\r\n isValid = false\r\n }\r\n }\r\n else {\r\n var isPageValid = $scope.validatePage(tab.number, page.url, null, null, null, 'inline', true);\r\n if (isPageValid === false) {\r\n isValid = false;\r\n }\r\n }\r\n });\r\n });\r\n\r\n $scope.pageId = previousPageId;\r\n return isValid;\r\n }\r\n\r\n // Submits the feedback if there are no validation errors.\r\n $scope.submitFeedback = function () {\r\n //Clearing the validation errors\r\n $scope.validationErrors.length = 0;\r\n if (validateComplaintsForm()) {\r\n $scope.currentLoadSubmitMessage = \"Submitting Complaint\";\r\n\r\n // TODO: we need a cleaner way of injecting this captcha value.\r\n DataServices.responseInfo.captchaResponse = $scope.valueOfQuestion(null, 'cOCaptcha', 'consent', 0, 0);\r\n\r\n $scope.isSaving = true;\r\n cutoffDate();\r\n DataServices.submitIncident($scope.feedbackType, $scope.IsDHVisible, $scope.isAfterCutOffDate)\r\n .then(function (response) {\r\n if (response.data && response.data.status == 2) {\r\n $scope.utility.openPopup('savedElsewhere', { lastUpdatedBy: response.data.lastUpdatedBy });\r\n }\r\n else {\r\n if (response.data && response.data.id) {\r\n DataServices.trackEventsWithGA('Submit action in ' + $scope.pageUrl, 'Click Submit To Manager', 'Successfully Submitted Incident');\r\n\r\n $scope.updateStatusBarInformation(response.data);\r\n\r\n $scope.goToNextPage();\r\n }\r\n else {\r\n $scope.utility.showNotification(true, 'internalError');\r\n }\r\n }\r\n }, function (response) {\r\n $scope.utility.openPopup('errorSubmit');\r\n DataServices.trackEventsWithGA('Error occured during Submiting in ' + $scope.pageUrl, 'Click Submit To Manager', 'Failed to Submit Incident');\r\n })\r\n .finally(function () {\r\n $scope.isSaving = false;\r\n });\r\n }\r\n else {\r\n if ($scope.validationErrors !== null && $scope.validationErrors !== undefined) {\r\n if ($scope.validationErrors.length > 0) {\r\n var error = $scope.validationErrors[0];\r\n var tabNum = error.pageNo.split(\"-\")[0];\r\n var pageNum = error.pageNo.split(\"-\")[1];\r\n var page = $scope.configData.navigationTabs[tabNum - 1].pages[pageNum - 1];\r\n ExpandErroredSections(\"1-2\", \"clientdetails\");\r\n ExpandErroredSections(\"1-3\", \"childdetails\");\r\n\r\n\r\n $scope.utility\r\n .openPopup('reviewComplaintErrors').result\r\n .then(function (data) {\r\n $scope.goToPage(tabNum, page.url);\r\n });\r\n }\r\n else {\r\n $scope.utility\r\n .openPopup('reviewComplaintErrors');\r\n }\r\n }\r\n }\r\n };\r\n\r\n function ExpandErroredSections(pageId, sectionName) {\r\n //Expanding the error sections\r\n var errorSectionIndexList = [];\r\n $scope.validationErrors.forEach(function (error) {\r\n if (error.pageNo === pageId && error.pageIndex === 0 && error.sectionCode === sectionName) {\r\n if (errorSectionIndexList.indexOf(error.sectionIndex) === -1) {\r\n errorSectionIndexList.push(error.sectionIndex);\r\n }\r\n }\r\n });\r\n\r\n if (errorSectionIndexList.length > 0) {\r\n errorSectionIndexList.forEach(function (sectionIndex) {\r\n $scope.responses[pageId][0][sectionName][sectionIndex].$state = \"Editing\";\r\n });\r\n }\r\n }\r\n\r\n // Downloads the PDF\r\n $scope.downloadPdf = function (qCode) {\r\n\r\n DataServices.trackEventsWithGA('Download PDF action in ' + $scope.pageUrl, 'Click Download PDF', 'Download Feedback PDF');\r\n $scope.isButtonLoading[qCode] = true;\r\n\r\n DataServices.viewComplaintsRegisteredPdf($scope.incidentId)\r\n .then(function (response) {\r\n var data = response && response.data;\r\n try {\r\n var file = new Blob([data], { type: \"application/pdf\" }, { name: DataServices.responseInfo.incidentRef });\r\n //if (window.Blob && window.navigator.msSaveOrOpenBlob) {\r\n // saveAs(file, DataServices.responseInfo.incidentRef + '.pdf');\r\n //}\r\n saveAs(file, DataServices.responseInfo.incidentRef + '.pdf');\r\n }\r\n catch (e) {\r\n $scope.utility.openPopup('errorDownloadPdf');\r\n }\r\n $scope.isButtonLoading[qCode] = false;\r\n }, function () {\r\n $scope.utility.openPopup('errorDownloadPdf');\r\n $scope.isButtonLoading[qCode] = false;\r\n });\r\n };\r\n\r\n\r\n // Updates information needed for the status bar\r\n $scope.updateStatusBarInformation = function (response) {\r\n\r\n DataServices.responseInfo.incidentId = response.id;\r\n DataServices.responseInfo.incidentRef = response.ref;\r\n DataServices.responseInfo.lastUpdatedTime = response.allocatedLastUpdatedTime;\r\n DataServices.responseInfo.reportedDate = response.reportedDate;\r\n DataServices.responseInfo.submittedDate = response.submittedDate;\r\n DataServices.responseInfo.status = response.incidentStatus || response.feedbackStatusId;\r\n DataServices.responseInfo.statusText = response.incidentStatusText;\r\n\r\n // Set original response to current response as update has occurred.\r\n $scope.originalResponse = angular.copy($scope.responses);\r\n\r\n $scope.incidentId = DataServices.responseInfo.incidentId;\r\n $scope.incidentRef = DataServices.responseInfo.incidentRef;\r\n $scope.lastUpdatedTime = DataServices.responseInfo.lastUpdatedTime;\r\n $scope.reportedDate = DataServices.responseInfo.reportedDate ? moment(DataServices.responseInfo.reportedDate).format($scope.Constants.ausDateFormat) : null;\r\n $scope.submittedDate = DataServices.responseInfo.submittedDate ? moment(DataServices.responseInfo.submittedDate).format($scope.Constants.ausDateFormat) : null;\r\n $scope.status = DataServices.responseInfo.status;\r\n $scope.statusText = DataServices.responseInfo.statusText;\r\n $scope.role = DataServices.responseInfo.role;\r\n\r\n if (response.formConfig && response.formConfig.configData) {\r\n // Explicitly set config data\r\n DataServices.configData = response.formConfig.configData;\r\n $scope.configData = response.formConfig.configData;\r\n\r\n DataServices.pushConfigData(response.formConfig.configData, Constants.ConfigTemplate.complaint, response.formConfig.versionNumber, response.formConfig.role);\r\n }\r\n }\r\n\r\n // ******************************************\r\n // NOTE: All local functions below this line.\r\n // ******************************************\r\n\r\n // Performs the actual save for registered users\r\n var saveFeedbackRegisteredUser = function (feedbackType, btnId) {\r\n\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, null, null, null, 'inline', null, true)) {\r\n\r\n $scope.isSaving = true;\r\n cutoffDate();\r\n DataServices.saveIncidentRegisteredUser(feedbackType, $scope.IsDHVisible, $scope.isAfterCutOffDate)\r\n .then(\r\n function (response) {\r\n $scope.isSaving = false;\r\n\r\n if (response.data && response.data.status == 2) {\r\n $scope.utility.openPopup('savedElsewhere',\r\n { lastUpdatedBy: response.data.lastUpdatedBy });\r\n }\r\n else {\r\n if (response.data && response.data.id) {\r\n DataServices.trackEventsWithGA('Save action in ' + $scope.pageUrl, 'Click Save Incident Registered User', 'Successfully Saved Incident');\r\n\r\n $scope.updateStatusBarInformation(response.data);\r\n $scope.utility.openPopup('successSaveComplaint',\r\n {\r\n incidentRef: response.data.ref,\r\n oldStatusText: $scope.statusText,\r\n statusText: \"Save Sucessfully\"\r\n //response.data.incidentStatusText\r\n }).closed.then(function () {\r\n $rootScope.allowFormNavigation = false;\r\n $scope.returnToComplaints();\r\n });\r\n } else {\r\n $scope.utility.showNotification(true, 'internalError');\r\n }\r\n }\r\n },\r\n function (response) {\r\n $scope.isSaving = false;\r\n $scope.utility.openPopup('errorSave');\r\n DataServices.trackEventsWithGA('Error occured during Save in ' + $scope.pageUrl,\r\n 'Click Save Incident Registered User',\r\n 'Failed to Save Incident');\r\n }\r\n );\r\n }\r\n }\r\n\r\n\r\n $scope.callCancelFollowUp = function () {\r\n $scope.cancel();\r\n };\r\n\r\n\r\n $scope.cancel = function () {\r\n // function to call on window close on Incident form\r\n if (DataServices.isFullyRegisteredUser()) {\r\n if ($scope.isPageEditable && $scope.confirmUserCancel()) {\r\n // for registered users\r\n // display a confirmation message\r\n $scope.utility.openPopup('warnUserBeforeCancelRegisteredUser').result\r\n .then(function (data) {\r\n if (data.result == \"thirdButtonClick\") {\r\n // On Yes, Save the changes\r\n $rootScope.allowFormNavigation = false;\r\n saveFeedbackRegisteredUser($scope.feedbackType);\r\n }\r\n else {\r\n // TODO: Fix the question controller to be able to bypass the validation check when we\r\n // actually just want to leave, in the mean time this will get us to the right place\r\n $location.path(Constants.Url.landing);\r\n }\r\n });\r\n\r\n } else {\r\n $scope.returnToComplaints();\r\n }\r\n }\r\n else {\r\n // for direct users \r\n // If user chose Yes, current page is closed and landing page is displayed.\r\n // If user selects 'No', system stays on the current page.\r\n $scope.utility.openPopup('warnUserBeforeCancel').result.then(\r\n function (result) {\r\n // On Yes go to landing page\r\n $rootScope.allowFormNavigation = false;\r\n $scope.returnToComplaints();\r\n });\r\n }\r\n }\r\n\r\n\r\n\r\n $scope.returnToComplaints = function () {\r\n $location.path(Constants.Url.manageComplaints);\r\n }\r\n }]);\r\n}());","(function () {\r\n var formApp = angular.module('formApp');\r\n formApp.controller('complaintsHistoryController', ['$scope', '$http', 'DataServices', 'Constants', function ($scope, $http, DataServices, Constants) {\r\n\r\n //Fetch Edit History\r\n var getFeedbackEditHistory = function () {\r\n DataServices.getFeedbackHistory(Constants.RetrieveHistoryType.EditHistory)\r\n .then(function (response) {\r\n $scope.feedbackEditHistory = response.data.result;\r\n });\r\n };\r\n\r\n //Fetch Follow History\r\n var getFeedbackFollowupHistory = function () {\r\n DataServices.getFeedbackHistory(Constants.RetrieveHistoryType.EditFollowup)\r\n .then(function (response) {\r\n $scope.feedbackFollowupHistory = response.data.result;\r\n });\r\n };\r\n\r\n var getAssignmentHistory = function () {\r\n return DataServices.getFeedbackHistory(Constants.RetrieveHistoryType.Assignment)\r\n .then(function (response) {\r\n $scope.assignmentHistory = response.data.result;\r\n });\r\n };\r\n\r\n var getRecategorisationHistory = function () {\r\n return DataServices.getFeedbackHistory(Constants.RetrieveHistoryType.Recategorisation)\r\n .then(function (response) {\r\n $scope.recategorisationHistory = response.data.result;\r\n });\r\n };\r\n\r\n var getExternalOversightDueDateHistory = function () {\r\n return DataServices.getFeedbackHistory(Constants.RetrieveHistoryType.ExternalOversightDueDate)\r\n .then(function (response) {\r\n $scope.externalOversightDueDateHistory = response.data.result;\r\n });\r\n };\r\n\r\n var getRevisedDueDateHistory = function () {\r\n return DataServices.getFeedbackHistory(Constants.RetrieveHistoryType.RevisedDueDate)\r\n .then(function (response) {\r\n $scope.revisedDueDateHistory = response.data.result;\r\n });\r\n };\r\n\r\n var getLinkingHistory = function () {\r\n DataServices.getFeedbackHistory(Constants.RetrieveHistoryType.LinkingUnLinking)\r\n .then(function (response) {\r\n $scope.linkingHistory = response.data.result;\r\n });\r\n }; \r\n\r\n var getOverdueHistory = function () {\r\n DataServices.getFeedbackHistory(Constants.RetrieveHistoryType.OverdueNotification)\r\n .then(function (response) {\r\n $scope.overdueHistory = response.data.result;\r\n });\r\n }; \r\n\r\n $scope.initComplainHistory = function () {\r\n getFeedbackEditHistory();\r\n getFeedbackFollowupHistory();\r\n getAssignmentHistory();\r\n getRecategorisationHistory();\r\n getExternalOversightDueDateHistory();\r\n getRevisedDueDateHistory();\r\n getLinkingHistory();\r\n getOverdueHistory();\r\n }\r\n }]);\r\n}());","(function () {\r\n //get the formApp module\r\n var formApp = angular.module('formApp');\r\n\r\n //set the controller to the code here - the controller uses DataServices.\r\n formApp.controller('feedbackAdditionalInfoController',\r\n ['$scope', '$http', '$controller', '$filter', 'DataServices', 'UtilityServices', 'ValidationService', '$location', '$routeParams', '$rootScope', 'Constants',\r\n function ($scope, $http, $controller, $filter, DataServices, UtilityServices, ValidationService, $location, $routeParams, $rootScope, Constants) {\r\n\r\n // Inherit parent controller\r\n $controller('questionController', { $scope: $scope });\r\n $controller('followUpController', { $scope: $scope, feedbackType: Constants.FeedbackType.Complaint, incidentId: DataServices.responseInfo.incidentId });\r\n $controller('navigationController', { $scope: $scope });\r\n\r\n var filteredAddProgramList = [];\r\n var filteredAddProgramList1 = [];\r\n var filteredAddProgramList2 = [];\r\n var filteredAddProgramList3 = [];\r\n var filteredAddProgramList4 = [];\r\n\r\n $scope.isDH = function () {\r\n if ($location.path().indexOf('DH') > -1) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n if (sessionStorage.getItem('popAdditionalInfoState') != 'shown') {\r\n getOptions('dhhsprogram').then(function (result) {\r\n DataServices.programRegisteredOriginalResponse = result;\r\n filteredAddProgramList1 = DataServices.programRegisteredOriginalResponse;\r\n sessionStorage.setItem('popAdditionalInfoState', 'shown')\r\n populateFormFields();\r\n });\r\n }\r\n else {\r\n if (DataServices.programRegisteredOriginalResponse.length === 0) {\r\n getOptions('dhhsprogram').then(function (result) {\r\n filteredAddProgramList1 = result;\r\n populateFormFields();\r\n });\r\n }\r\n else {\r\n filteredAddProgramList1 = DataServices.programRegisteredOriginalResponse;\r\n populateFormFields();\r\n }\r\n\r\n }\r\n\r\n\r\n function populateFormFields() {\r\n if ($location.path().indexOf('DH') > -1) {\r\n if (DataServices.responseInfo.lastUpdatedTime == null || DataServices.isDHComplaint) {\r\n for (var j = 0; j < filteredAddProgramList1.length; j++) {\r\n if (filteredAddProgramList1[j].text == 'Covid19' || filteredAddProgramList1[j].text == 'Health' || filteredAddProgramList1[j].text == 'Family Violence and Sexual Assault Services') {\r\n filteredAddProgramList.push(filteredAddProgramList1[j]);\r\n }\r\n }\r\n }\r\n else {\r\n for (var a = 0; a < filteredAddProgramList1.length; a++) {\r\n if (!(filteredAddProgramList1[a].text == 'Covid19' || filteredAddProgramList1[a].text == 'Community Health' || filteredAddProgramList1[a].text == 'Fairness')) {\r\n filteredAddProgramList.push(filteredAddProgramList1[a]);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n if (DataServices.responseInfo.lastUpdatedTime == null || DataServices.isDFFHComplaint) {\r\n for (var l = 0; l < filteredAddProgramList1.length; l++) {\r\n if (!(filteredAddProgramList1[l].text == 'Covid19' || filteredAddProgramList1[l].text == 'Health')) {\r\n filteredAddProgramList.push(filteredAddProgramList1[l]);\r\n }\r\n }\r\n }\r\n else {\r\n for (var b = 0; b < filteredAddProgramList1.length; b++) {\r\n if (!(filteredAddProgramList1[b].text == 'Covid19' || filteredAddProgramList1[b].text == 'Community Health' || filteredAddProgramList1[b].text == 'Fairness')) {\r\n filteredAddProgramList.push(filteredAddProgramList1[b]);\r\n }\r\n }\r\n }\r\n\r\n if ($scope.isDH() == false) {\r\n if (DataServices.responseInfo.ComplaintsFormData != null && DataServices.responseInfo.ComplaintsFormData.rDAuthorisedOfficer == null) {\r\n delete DataServices.responseInfo.ComplaintsFormData.rDAuthorisedOfficer;\r\n }\r\n }\r\n }\r\n DataServices.configData.optionSets[\"dhhsprogram\"] = filteredAddProgramList;\r\n\r\n if ($location.path().indexOf('feedbackAdditionalInfo/1/feedback') > -1) {\r\n if (sessionStorage.getItem('popAdditionalInfoNavigationState') != 'shown') {\r\n\r\n filteredAddProgramList4 = $scope.configData.navigationTabs[0].pages.slice();\r\n\r\n DataServices.navigationTabsOriginalResponse = filteredAddProgramList4;\r\n DataServices.navigationTabsResponse = $scope.configData;\r\n\r\n sessionStorage.setItem('popAdditionalInfoNavigationState', 'shown');\r\n }\r\n if (window.location.href.indexOf('DH') > -1) {\r\n if (DataServices.responseInfo.lastUpdatedTime == null) {\r\n if (($scope.configData.navigationTabs[0].title == 'Feedback')) {\r\n filteredAddProgramList2 = $scope.configData.navigationTabs[0].pages.slice();\r\n\r\n for (var j = 0; j < filteredAddProgramList2.length; j++) {\r\n if (!(filteredAddProgramList2[j].title == 'Child Details')) {\r\n //filteredProgramList2.navigationTabs[i].pages.splice(j, 1);\r\n filteredAddProgramList3.push(filteredAddProgramList2[j]);\r\n }\r\n }\r\n\r\n }\r\n }\r\n else {\r\n if ((DataServices.responseInfo.lastUpdatedTime != null) && DataServices.isDHHSComplaint) {\r\n filteredAddProgramList3 = $scope.configData.navigationTabs[0].pages;\r\n }\r\n else {\r\n if (($scope.configData.navigationTabs[0].title == 'Feedback')) {\r\n filteredAddProgramList2 = $scope.configData.navigationTabs[0].pages.slice();\r\n\r\n for (var j = 0; j < filteredAddProgramList2.length; j++) {\r\n if (!(filteredAddProgramList2[j].title == 'Child Details')) {\r\n //filteredProgramList2.navigationTabs[i].pages.splice(j, 1);\r\n filteredAddProgramList3.push(filteredAddProgramList2[j]);\r\n }\r\n }\r\n\r\n }\r\n }\r\n }\r\n $scope.configData.navigationTabs[0].pages = filteredAddProgramList3;\r\n //DataServices.navigationTabsOriginalResponse = $scope.configData;\r\n // $scope.configData = DataServices.navigationTabsResponse;\r\n }\r\n else {\r\n $scope.configData.navigationTabs[0].pages = $scope.configData.navigationTabs[0].pages;\r\n }\r\n\r\n }\r\n }\r\n\r\n function getOptions(optionset) {\r\n return ($scope.utility.getOptionSetFromConfiguration(optionset, Constants.ConfigTemplate.feedbackAdditionalInfo));\r\n }\r\n\r\n // only get the config data if we don't have it\r\n DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.feedbackAdditionalInfo, $scope.versionNumber, null, DataServices.isAuthenticated())\r\n .then(function () {\r\n $scope.setupTriggersAndDynamicValues();\r\n $scope.setSummaryErrorFocus();\r\n $scope.isPageEditable = DataServices.isFollowUpEditable === true && $scope.page.isEditable === true;\r\n\r\n document.title = $scope.utility.getPageTitle($scope.navTabNum, $scope.pageUrl);\r\n });\r\n\r\n $scope.status = DataServices.responseInfo.status;\r\n $scope.incidentRef = DataServices.responseInfo.incidentRef;\r\n $scope.statusText = DataServices.responseInfo.statusText;\r\n $scope.template = Constants.ConfigTemplate.feedbackAdditionalInfo;\r\n $scope.ComplaintsFormData = DataServices.responseInfo.ComplaintsFormData;\r\n\r\n if ($scope.ComplaintsFormData[\"cDActingOnBehalfOfAnotherPerson\"] === \"yes\") {\r\n $scope.ComplaintsFormData[\"clientDetailsList\"] = JSON.parse(DataServices.responseInfo.ComplaintsFormData.rDclientdetails);\r\n }\r\n\r\n if ($scope.isDH() == false) {\r\n if ($scope.ComplaintsFormData.rDAuthorisedOfficer == null) {\r\n delete $scope.ComplaintsFormData.rDAuthorisedOfficer;\r\n }\r\n }\r\n\r\n $scope.saveAdditionalInfo = function () {\r\n //// no validation \r\n $scope.currentLoadSubmitMessage = \"Saving Feedback Assessment\";\r\n $scope.callSaveFollowUp($scope.feedbackType).then(function () {\r\n // go back to co-ordination page\r\n $scope.returnToCoordinationPage();\r\n });\r\n }\r\n\r\n function validateForm() {\r\n var isValid = true;\r\n var previousPageId = $scope.pageId;\r\n //Clearing the validation errors\r\n $scope.validationErrors.length = 0;\r\n\r\n $scope.configData.navigationTabs.forEach(function (tab) {\r\n tab.pages.forEach(function (page) {\r\n var pageId = tab.number + '-' + page.number;\r\n $scope.pageId = pageId;\r\n if ($scope.responses[pageId] === undefined || $scope.responses[pageId] === null) {\r\n isValid = false\r\n } else {\r\n var isPageValid = $scope.validatePage(tab.number, page.url, null, null, null, 'inline', true);\r\n if (isPageValid === false) {\r\n isValid = false;\r\n }\r\n }\r\n });\r\n });\r\n\r\n $scope.pageId = previousPageId;\r\n return isValid;\r\n }\r\n\r\n $scope.submitAdditionalInfo = function () {\r\n //// implement submit logic\r\n if (validateForm()) {\r\n $scope.currentLoadSubmitMessage = \"Submitting Feedback Assessment\";\r\n $scope.callSubmitFollowUp($scope.feedbackType).then(function () {\r\n $scope.returnToCoordinationPage();\r\n });\r\n }\r\n else {\r\n if ($scope.validationErrors !== null && $scope.validationErrors !== undefined) {\r\n if ($scope.validationErrors.length > 0) {\r\n var error = $scope.validationErrors[0];\r\n var tabNum = error.pageNo.split(\"-\")[0];\r\n var pageNum = error.pageNo.split(\"-\")[1];\r\n var page = $scope.configData.navigationTabs[tabNum - 1].pages[pageNum - 1];\r\n ExpandErroredSections(\"1-3\", \"childdetails\");\r\n\r\n $scope.utility\r\n .openPopup('reviewComplaintErrors').result\r\n .then(function (data) {\r\n $scope.goToPage(tabNum, page.url);\r\n });\r\n }\r\n else {\r\n $scope.utility\r\n .openPopup('reviewComplaintErrors').result\r\n .then(function (data) {\r\n $scope.goToPage(1, 'additionalinfo');\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n function ExpandErroredSections(pageId, sectionName) {\r\n //Expanding the error sections\r\n var errorSectionIndexList = [];\r\n $scope.validationErrors.forEach(function (error) {\r\n if (error.pageNo === pageId && error.pageIndex === 0 && error.sectionCode === sectionName) {\r\n if (errorSectionIndexList.indexOf(error.sectionIndex) === -1) {\r\n errorSectionIndexList.push(error.sectionIndex);\r\n }\r\n }\r\n });\r\n\r\n if (errorSectionIndexList.length > 0) {\r\n errorSectionIndexList.forEach(function (sectionIndex) {\r\n $scope.responses[pageId][0][sectionName][sectionIndex].$state = \"Editing\";\r\n });\r\n }\r\n }\r\n\r\n $scope.cancel = function () {\r\n $scope.callCancelFollowUp();\r\n }\r\n\r\n\r\n $scope.getValueDateFromResponse = function (qCode) {\r\n var value = $scope.ComplaintsFormData[qCode];\r\n if (value == undefined) {\r\n return \"\";\r\n }\r\n\r\n return UtilityServices.formateDate(value);\r\n }\r\n\r\n $scope.clientDetailsLoaded = false;\r\n $scope.getValueFromResponse = function (qCode) {\r\n var value = $scope.ComplaintsFormData[qCode];\r\n\r\n if (value == undefined && qCode == 'rDAuthorisedOfficer') {\r\n return \"N/A\";\r\n }\r\n\r\n if (value == undefined) {\r\n return \"\";\r\n }\r\n if (qCode === \"cDActingOnBehalfOfAnotherPerson\" && value === \"yes\" && $scope.clientDetailsLoaded === false) {\r\n loadClientDetails();\r\n }\r\n //Setting the date received(derived value) to the model so that we can use it for pdf generation\r\n else if (qCode === \"aDDateReceived\") {\r\n if ($scope.responses[\"1-2\"] !== null && $scope.responses[\"1-2\"].length > 0\r\n && $scope.responses[\"1-2\"][0][\"additionalinfo\"] !== null && $scope.responses[\"1-2\"][0][\"additionalinfo\"].length > 0) {\r\n $scope.responses[\"1-2\"][0][\"additionalinfo\"][0][\"aDDateReceived\"] = value;\r\n }\r\n }\r\n else if (qCode === \"cDActingOnBehalfOfAnotherPerson\" || qCode === \"\") {\r\n $scope.responses[\"1-1\"][0][\"onbehalfof\"][0][\"cDActingOnBehalfOfAnotherPerson\"] = value;\r\n }\r\n else if (qCode === \"rDRequireInterpreter\" || qCode === \"rDInterpreterLanguage\") {\r\n $scope.responses[\"1-1\"][0][\"yourdetails\"][0][qCode] = value;\r\n }\r\n else if (qCode === \"rDTypeOfFeedback\") {\r\n //Capitalize first letter of the word.\r\n value = value.charAt(0).toUpperCase() + value.slice(1);\r\n }\r\n\r\n //setting the feedbacksummary\r\n $scope.responses[\"1-1\"][0][\"complaintdetails\"][0][\"cOFeedbackSummary\"] = $scope.ComplaintsFormData[\"cOFeedbackSummary\"];\r\n\r\n return value;\r\n }\r\n\r\n doesDivisionHaveValue = function () {\r\n var serviceDetails = $scope.responses[\"1-2\"][0].additionalinfo[0];\r\n\r\n if (serviceDetails.sPDHSecondaryProgram === undefined || serviceDetails.sPDHSecondaryProgram === null) {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n\r\n doesBranchHaveValue = function () {\r\n var serviceDetails = $scope.responses[\"1-2\"][0].additionalinfo[0];\r\n\r\n if (serviceDetails.sPServiceType === undefined || serviceDetails.sPServiceType === null) {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n\r\n $scope.haveAnyUnits = function () {\r\n\r\n if (!doesBranchHaveValue() || document.getElementById(\"0-additionalinfo-0-sPServiceArea_DH\") === null) {\r\n return false;\r\n }\r\n\r\n var unitList = document.getElementById(\"0-additionalinfo-0-sPServiceArea_DH\").options;\r\n\r\n if (unitList != null && unitList.length > 1) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n $scope.haveAnyBranches = function () {\r\n\r\n if (!doesDivisionHaveValue() || document.getElementById(\"0-additionalinfo-0-sPServiceType\") === null) {\r\n return false;\r\n }\r\n\r\n var unitList = document.getElementById(\"0-additionalinfo-0-sPServiceType\").options;\r\n\r\n if (unitList != null && unitList.length > 2) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n $scope.getClientDetailsFromResponse = function (qCode, sIndex) {\r\n if ($scope.ComplaintsFormData[\"clientDetailsList\"] !== undefined) {\r\n return $scope.ComplaintsFormData[\"clientDetailsList\"][sIndex][qCode];\r\n }\r\n }\r\n\r\n function loadClientDetails() {\r\n var clientdetails = JSON.parse(DataServices.responseInfo.ComplaintsFormData.rDclientdetails);\r\n $scope.responses[\"1-1\"][0][\"clientdetails\"] = clientdetails;\r\n $scope.clientDetailsLoaded = true;\r\n\r\n }\r\n\r\n $scope.getValueFromResponseLookUp = function (qCode) {\r\n var value = $scope.ComplaintsFormData[qCode];\r\n if (value == undefined) {\r\n return \"\";\r\n }\r\n\r\n return value;\r\n }\r\n\r\n }]);\r\n}());","(function () {\r\n //get the formApp module\r\n var formApp = angular.module('formApp');\r\n\r\n //set the controller to the code here - the controller uses DataServices.\r\n formApp.controller(\r\n 'feedbackAssessmentFormController',\r\n ['$scope', '$http', '$controller', 'DataServices', 'UtilityServices', 'ValidationService', '$location', '$routeParams', '$rootScope', 'Constants',\r\n function ($scope, $http, $controller, DataServices, UtilityServices, ValidationService, $location, $routeParams, $rootScope, Constants) {\r\n\r\n // Inherit parent controller\r\n $controller('questionController', { $scope: $scope });\r\n $controller('followUpController', { $scope: $scope, feedbackType: Constants.FeedbackType.Complaint, incidentId: DataServices.responseInfo.incidentId });\r\n\r\n // only get the config data if we don't have it\r\n DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.feedbackAssessment, $scope.versionNumber, null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n $scope.setupTriggersAndDynamicValues();\r\n $scope.setSummaryErrorFocus();\r\n $scope.isPageEditable = DataServices.isFollowUpEditable === true && $scope.page.isEditable === true;\r\n\r\n document.title = $scope.utility.getPageTitle($scope.navTabNum, $scope.pageUrl);\r\n });\r\n\r\n $scope.status = DataServices.responseInfo.status;\r\n $scope.incidentRef = DataServices.responseInfo.incidentRef;\r\n $scope.statusText = DataServices.responseInfo.statusText;\r\n $scope.template = Constants.ConfigTemplate.feedbackAssessment;\r\n\r\n //gets the program description\r\n $scope.getValueFromResponse = function (qCode) {\r\n return DataServices.responseInfo.programDescription;\r\n }\r\n\r\n $scope.IsProgram = function (program) {\r\n return DataServices.responseInfo.programDescription === program;\r\n }\r\n\r\n\r\n // Determine if we require the reason\r\n $scope.requireRecategorisationReason =\r\n $scope.status === Constants.FollowUpStatus.submitted &&\r\n $scope.notEmpty(null, 'faRecategorisationReason', 'assessment', 0, 0, '1-1');\r\n\r\n $scope.hasBeenRecategorised = function () {\r\n return $scope.requireRecategorisationReason;\r\n }\r\n\r\n $scope.onCategoryChanged = function () {\r\n // As long as the follow-up has been submitted, any change to the category\r\n // requires the reason to be specified\r\n $scope.requireRecategorisationReason = $scope.status === Constants.FollowUpStatus.submitted;\r\n }\r\n\r\n $scope.saveAssessment = function () {\r\n\r\n $scope.currentLoadSubmitMessage = \"Saving Feedback Assessment\";\r\n\r\n $scope.callSaveFollowUp($scope.feedbackType).then(function () {\r\n // go back to co-ordination page\r\n $scope.returnToCoordinationPage();\r\n });\r\n }\r\n\r\n $scope.submitAssessment = function () {\r\n\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, null, null, null, 'inline')) {\r\n\r\n $scope.currentLoadSubmitMessage = \"Submitting Feedback Assessment\";\r\n $scope.callSubmitFollowUp($scope.feedbackType).then(function () {\r\n $scope.returnToCoordinationPage();\r\n });\r\n }\r\n else {\r\n $scope.moveToFirstError();\r\n }\r\n }\r\n\r\n $scope.cancel = function () {\r\n\r\n $scope.callCancelFollowUp();\r\n }\r\n }]);\r\n}());","(function () {\r\n var formApp = angular.module('formApp');\r\n formApp.controller('feedbackAssignmentHistoryController', ['$scope', '$http', 'DataServices', function ($scope, $http, DataServices) {\r\n $scope.getFeedbackAssignmentHistory = function () {\r\n $scope.feedbackAssignments = DataServices.responseInfo.feedbackAssignments;\r\n };\r\n }]);\r\n}());","(function () {\r\n //get the formApp module\r\n var formApp = angular.module('formApp');\r\n\r\n //set the controller to the code here - the controller uses DataServices.\r\n formApp.controller(\r\n 'feedbackCoordinationFormController',\r\n ['$scope', '$http', '$controller', 'DataServices', 'UtilityServices', 'ValidationService', '$location', '$routeParams', '$rootScope', 'Constants',\r\n function ($scope, $http, $controller, DataServices, UtilityServices, ValidationService, $location, $routeParams, $rootScope, Constants) {\r\n\r\n // Inherit parent controller\r\n $controller('questionController', { $scope: $scope });\r\n $controller('documentController', { $scope: $scope });\r\n $controller('caseNotesHistoryController', { $scope: $scope });\r\n $controller('complaintsHistoryController', { $scope: $scope });\r\n\r\n DataServices.getComplainsFeedbackUnRegistered(DataServices.responseInfo.incidentId)\r\n .then(function (response) {\r\n DataServices.responseInfo.ComplaintsFormData = response.data;\r\n // add complaint form type to hide/show additional information button in the follow up page\r\n if (response.data.templateId === Constants.ComplaintsFormType.unRegistered) {\r\n DataServices.responseInfo.ComplaintsFormType = Constants.ComplaintsFormType.unRegistered;\r\n } else {\r\n DataServices.responseInfo.ComplaintsFormType = Constants.ComplaintsFormType.registered;\r\n }\r\n });\r\n\r\n // Default access for attaching documents\r\n DataServices.responseInfo.access = {\r\n canSaveFile: true,\r\n canViewFile: true,\r\n canDeleteFile: true\r\n };\r\n\r\n // Set original response to current response as update has occurred.\r\n $scope.originalResponse = angular.copy($scope.responses);\r\n\r\n // This form is always editable, access around the other aspects on the page is governed by other conditions\r\n $scope.isPageEditable = true;\r\n\r\n var assessmentCode = 'assessment';\r\n var investigateCode = 'investigate';\r\n var respondCode = 'respond';\r\n var practiceImprovementCode = 'practiceimprovement';\r\n var additioanInfoCode = 'additionalinfo';\r\n\r\n $scope.configData = null;\r\n $scope.isLoading = true;\r\n $scope.discardCancelVerification = false;\r\n\r\n $scope.access = DataServices.responseInfo.access;\r\n\r\n $scope.coordinationTemplate = Constants.ConfigTemplate.feedbackCoordination;\r\n\r\n // Gets the followup summary details for each of the three possible followups for this incident.\r\n var getFollowUpSummary = function () {\r\n DataServices.getFollowUpSummaryResponseAndConfig(Constants.FeedbackType.Complaint, $scope.coordinationTemplate)\r\n .then(function (response) {\r\n $scope.isLoading = false;\r\n var data = response.data;\r\n if (data) {\r\n DataServices.configData = data.configData.configData;\r\n DataServices.responseInfo.template = data.template;\r\n DataServices.responseInfo.versionNumber = null; // reset version number to null.\r\n DataServices.responseInfo.followUpVersionNumber = data.versionNo; // followup version number gets set here for subsequent pages (investigation, Notification, RA, PI)\r\n DataServices.responseInfo.role = data.role;\r\n DataServices.responseInfo.responses = data.responseData;\r\n DataServices.responseInfo.feedbackId = data.feedbackId;\r\n DataServices.responseInfo.incidentId = data.feedbackId;\r\n DataServices.responseInfo.ref = data.ref;\r\n DataServices.responseInfo.feedbackCaseNotes = data.feedbackCaseNotes;\r\n DataServices.responseInfo.responseDueDate = data.responseDueDate;\r\n\r\n DataServices.responseInfo.incidentRef = data.ref;\r\n DataServices.responseInfo.statusText = data.statusDisplayName;\r\n\r\n $scope.configData = DataServices.configData;\r\n $scope.feedbackId = DataServices.responseInfo.feedbackId;\r\n $scope.isFeedbackComplete = (data.statusId === 4 || data.statusId === 5); // Withdrawn or Closed\r\n $scope.ref = DataServices.responseInfo.ref;\r\n $scope.template = DataServices.responseInfo.template;\r\n $scope.versionNumber = null; // reset version number to null.\r\n $scope.followUpVersionNumber = data.versionNo;\r\n $scope.role = DataServices.responseInfo.role;\r\n\r\n $scope.incidentRef = DataServices.responseInfo.incidentRef;\r\n $scope.statusText = DataServices.responseInfo.statusText;\r\n\r\n //Ability to upload and delete file even when the feedback goes to closed state\r\n // Specify file access\r\n DataServices.responseInfo.access.canSaveFile = !$scope.isFeedbackComplete || data.statusId === Constants.Status.Closed;\r\n DataServices.responseInfo.access.canDeleteFile = !$scope.isFeedbackComplete || data.statusId === Constants.Status.Closed;\r\n\r\n // Reset the document list before adding what we have retrieved\r\n $scope.responses.documents = [];\r\n\r\n data.feedbackDocuments.forEach(function (doc) {\r\n var uploadedDoc = {\r\n documentId: doc.id,\r\n name: doc.name,\r\n incidentId: DataServices.responseInfo.feedbackId,\r\n isDeleteDisabled: !doc.canDeleteFile,\r\n isDocUploaded: true,\r\n size: doc.size,\r\n uploadDateTime: new Date(doc.createdTime).toLocaleString('en-AU', { day: 'numeric', month: 'numeric', year: 'numeric', hour: 'numeric', minute: 'numeric', hour12: false })\r\n };\r\n $scope.responses.documents.push(uploadedDoc);\r\n });\r\n\r\n DataServices.responseInfo.responses.documents = $scope.responses.documents;\r\n if ($scope.responses.documents.length > 0) {\r\n $scope.initPageAttachments();\r\n }\r\n\r\n $scope.responses = data.responseData;\r\n $scope.getHistory();\r\n\r\n // Retrieve the history only when loading the history tab\r\n if ($location.$$path.slice(1) === Constants.Url.secondFeedbackCoordinationFormPage) {\r\n $scope.initComplainHistory();\r\n }\r\n\r\n $scope.setupTriggersAndDynamicValues();\r\n document.title = $scope.utility.getPageTitle($scope.navTabNum, $scope.pageUrl);\r\n }\r\n else {\r\n $scope.utility.showNotification(true, 'internalError');\r\n }\r\n });\r\n }\r\n\r\n $scope.addFollowUpAction = function (sectionCode, buttonText) {\r\n\r\n // Do nothing if the feedback is already in a final state\r\n if ($scope.isFeedbackComplete) {\r\n return;\r\n }\r\n\r\n var template;\r\n var nextPage;\r\n\r\n switch (sectionCode) {\r\n case assessmentCode:\r\n template = Constants.ConfigTemplate.feedbackAssessment;\r\n nextPage = Constants.Url.firstFeedbackAssessmentFormPage;\r\n $scope.isLoadingAssessment = true;\r\n break;\r\n\r\n case additioanInfoCode:\r\n template = Constants.ConfigTemplate.feedbackAdditionalInfo;\r\n nextPage = Constants.Url.firstFeedbackAdditionalInfoFormPage\r\n $scope.isLoadingAdditionalInfo = true;\r\n break;\r\n\r\n case investigateCode:\r\n template = Constants.ConfigTemplate.feedbackInvestigate;\r\n nextPage = Constants.Url.firstFeedbackInvestigateFormPage\r\n $scope.isLoadingInvestigate = true;\r\n break;\r\n\r\n case respondCode:\r\n template = Constants.ConfigTemplate.feedbackRespond;\r\n nextPage = Constants.Url.firstFeedbackRespondFormPage\r\n $scope.isLoadingRespond = true;\r\n break;\r\n\r\n case practiceImprovementCode:\r\n template = Constants.ConfigTemplate.feedbackPracticeImprovement;\r\n nextPage = Constants.Url.firstFeedbackPracticeImprovementFormPage\r\n $scope.isLoadingPracticeImprovement = true;\r\n break;\r\n }\r\n\r\n DataServices.isFollowUpEditable = true;\r\n\r\n DataServices.getConfigurationUsingCache(template, null, null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n\r\n $scope.isLoadingAssessment = false;\r\n $scope.isLoadingInvestigate = false;\r\n $scope.isLoadingRespond = false;\r\n $scope.isLoadingPracticeImprovement = false;\r\n $scope.isLoadingAdditionalInfo = false;\r\n\r\n if (data) {\r\n\r\n DataServices.responseInfo.followUpId = null; // reset followup id for add.\r\n DataServices.responseInfo.template = data.template;\r\n DataServices.responseInfo.versionNumber = data.versionNumber;\r\n DataServices.responseInfo.role = data.role;\r\n DataServices.responseInfo.responses = {};\r\n\r\n DataServices.responseInfo.spStatus = Constants.FollowUpStatus.draft;\r\n DataServices.responseInfo.spStatusText = 'Draft'; // default for new.\r\n DataServices.responseInfo.frStatus = 0; // reset\r\n DataServices.responseInfo.frStatusText = ''; // reset\r\n DataServices.responseInfo.incidentFRStatus = 0; // reset\r\n DataServices.validationErrors = [];\r\n DataServices.configData = data.configData;\r\n $scope.configData = DataServices.configData;\r\n\r\n DataServices.pushConfigData(data.configData, template, data.versionNumber, data.role);\r\n DataServices.trackEventsWithGA('PageName: Complaint Coordination', 'Click ' + buttonText, buttonText);\r\n $location.path(nextPage);\r\n\r\n } else {\r\n $scope.utility.showNotification(true, 'internalError');\r\n }\r\n }, function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n });\r\n }\r\n\r\n // Opens an existing followup action for Edit / View\r\n $scope.openFollowUpAction = function (template, followUpId) {\r\n if (template == Constants.ConfigTemplate.feedbackAssessment) {\r\n $scope.isLoadingAssessment = true;\r\n }\r\n else if (template == Constants.ConfigTemplate.feedbackInvestigate) {\r\n $scope.isLoadingInvestigate = true;\r\n }\r\n else if (template == Constants.ConfigTemplate.feedbackRespond) {\r\n $scope.isLoadingRespond = true;\r\n }\r\n else if (template == Constants.ConfigTemplate.feedbackPracticeImprovement) {\r\n $scope.isLoadingPracticeImprovement = true;\r\n }\r\n else if (template == Constants.ConfigTemplate.feedbackAdditionalInfo) {\r\n $scope.isLoadingAdditionalInfo = true;\r\n }\r\n\r\n DataServices.getFollowUpResponseAndConfig(followUpId, Constants.FeedbackType.Complaint)\r\n .then(function (response) {\r\n if (template == Constants.ConfigTemplate.feedbackAssessment) {\r\n $scope.isLoadingAssessment = false;\r\n }\r\n else if (template == Constants.ConfigTemplate.feedbackInvestigate) {\r\n $scope.isLoadingInvestigate = false;\r\n }\r\n else if (template == Constants.ConfigTemplate.feedbackRespond) {\r\n $scope.isLoadingRespond = false;\r\n }\r\n else if (template == Constants.ConfigTemplate.feedbackPracticeImprovement) {\r\n $scope.isLoadingPracticeImprovement = false;\r\n }\r\n else if (template == Constants.ConfigTemplate.feedbackAdditionalInfo) {\r\n $scope.isLoadingAdditionalInfo = false;\r\n }\r\n\r\n var data = response.data;\r\n if (data) {\r\n\r\n DataServices.responseInfo.access = data.access;\r\n\r\n DataServices.responseInfo.status = data.statusId;\r\n\r\n DataServices.responseInfo.incidentRef = data.ref;\r\n DataServices.responseInfo.statusText = data.statusDisplayName;\r\n\r\n DataServices.responseInfo.followUpId = followUpId;\r\n DataServices.responseInfo.template = data.template\r\n DataServices.responseInfo.versionNumber = data.versionNo;\r\n DataServices.responseInfo.role = data.role;\r\n DataServices.responseInfo.lastUpdatedTime = data.lastUpdatedTime;\r\n DataServices.validationErrors = [];\r\n DataServices.configData = data.configData.configData;\r\n $scope.configData = DataServices.configData;\r\n DataServices.pushConfigData(data.configData.configData, template, data.versionNo, data.role);\r\n\r\n if (template == Constants.ConfigTemplate.feedbackAssessment ||\r\n template == Constants.ConfigTemplate.feedbackRespond) {\r\n if (data.role.includes(Constants.Role.FMS_Admin) && data.role.includes(Constants.Role.ComplaintsManager)) {\r\n DataServices.isFollowUpEditable = true;\r\n }\r\n else if (data.role.includes(Constants.Role.FMS_ComplaintsAdmin))\r\n {\r\n DataServices.isFollowUpEditable = true;\r\n }\r\n else {\r\n DataServices.isFollowUpEditable = $scope.isFeedbackComplete === false;\r\n }\r\n }\r\n else {\r\n if (data.role.includes(Constants.Role.FMS_Admin) && data.role.includes(Constants.Role.ComplaintsManager)) {\r\n DataServices.isFollowUpEditable = true;\r\n }\r\n else if (data.role.includes(Constants.Role.FMS_ComplaintsAdmin)) {\r\n DataServices.isFollowUpEditable = true;\r\n }\r\n else {\r\n DataServices.isFollowUpEditable = (data.statusId !== Constants.FollowUpStatus.submitted && $scope.isFeedbackComplete === false);\r\n }\r\n }\r\n\r\n DataServices.responseInfo.responses = data.responseData;\r\n $scope.responses = DataServices.responseInfo.responses;\r\n\r\n switch (template) {\r\n case Constants.ConfigTemplate.feedbackAdditionalInfo:\r\n DataServices.trackEventsWithGA('PageName: ManageFollowUpActions', 'Click View/Edit Feedback Assessment', 'Edit/View Feedback Additional Information');\r\n $location.path(Constants.Url.firstFeedbackAdditionalInfoFormPage);\r\n break;\r\n case Constants.ConfigTemplate.feedbackAssessment:\r\n DataServices.trackEventsWithGA('PageName: ManageFollowUpActions', 'Click View/Edit Feedback Assessment', 'Edit/View Feedback Assessment');\r\n $location.path(Constants.Url.firstFeedbackAssessmentFormPage);\r\n break;\r\n case Constants.ConfigTemplate.feedbackInvestigate:\r\n DataServices.trackEventsWithGA('PageName: ManageFollowUpActions', 'Click View/Edit Feedback Investigate', 'Edit/View Feedback Investigate');\r\n $location.path(Constants.Url.firstFeedbackInvestigateFormPage);\r\n break;\r\n case Constants.ConfigTemplate.feedbackRespond:\r\n DataServices.trackEventsWithGA('PageName: ManageFollowUpActions', 'Click View/Edit Feedback Response', 'Edit/View Feedback Response');\r\n $location.path(Constants.Url.firstFeedbackRespondFormPage);\r\n break;\r\n case Constants.ConfigTemplate.feedbackPracticeImprovement:\r\n DataServices.trackEventsWithGA('PageName: ManageFollowUpActions', 'Click View/Edit Feedback Practice Improvement', 'Edit/View Feedback Practice Improvement');\r\n $location.path(Constants.Url.firstFeedbackPracticeImprovementFormPage);\r\n break;\r\n }\r\n } else {\r\n $scope.utility.showNotification(true, 'internalError');\r\n }\r\n });\r\n }\r\n\r\n $scope.checkValueChangeForCoordinationPage = function () {\r\n if ($scope.discardCancelVerification ) {\r\n return false;\r\n }\r\n return $scope.notEmpty(null, 'fcCaseNote', 'caseNote', 0, 0, '1-1');\r\n }\r\n\r\n $scope.callCancelFollowUp = function() {\r\n $scope.cancel();\r\n }\r\n\r\n $scope.cancel = function () {\r\n if (!$scope.notEmpty(null, 'fcCaseNote', 'caseNote', 0, 0, '1-1')) {\r\n $location.path(Constants.Url.manageComplaints);\r\n } else {\r\n $scope.utility.openPopup('warnUserBeforeCancel').result.then(\r\n function (data) {\r\n if (data.result == \"thirdButtonClick\") {\r\n $scope.saveFeedbackCaseNotes().then(function () {\r\n $location.path(Constants.Url.manageComplaints);\r\n });\r\n }\r\n else {\r\n $scope.discardCancelVerification = true;\r\n $location.path(Constants.Url.manageComplaints);\r\n }\r\n });\r\n }\r\n }\r\n\r\n $scope.saveAndReturnToLanding = function () {\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, null, null, null, 'inline')) {\r\n // Case Note is not mandatory, and therefore we need to ignore when they submit an empty text field \r\n if (!$scope.notEmpty(null, 'fcCaseNote', 'caseNote', 0, 0, '1-1')) {\r\n $location.path(Constants.Url.manageComplaints);\r\n }\r\n else {\r\n $scope.isSaving = true;\r\n $scope.saveFeedbackCaseNotes().then(function () {\r\n $location.path(Constants.Url.manageComplaints);\r\n });\r\n }\r\n }\r\n else {\r\n $scope.alertFirstError();\r\n }\r\n }\r\n\r\n $scope.saveFeedbackCaseNotes = function () {\r\n return DataServices.saveFeedbackCaseNotes()\r\n .then(function (response) {\r\n if (response.data) {\r\n if (response.data.status === 3) {\r\n DataServices.trackEventsWithGA('Save action in ' + $scope.pageUrl, 'Click Save Feedback Case Notes And Documents', 'Successfully Saved Feedback Case Notes And Documents');\r\n $scope.originalResponse = angular.copy($scope.responses);\r\n $scope.discardCancelVerification = true;\r\n return $scope.utility.openPopup('submissionSuccessMessage').result;\r\n } else {\r\n DataServices.trackEventsWithGA('Error occured during Save in ' + $scope.pageUrl, 'Click Save Feedback Case Notes And Documents', 'Failed to Save Feedback Case Notes And Documents');\r\n return $scope.utility.openPopup('submissionFailureMessage').result;\r\n }\r\n }\r\n else {\r\n return $scope.utility.showNotification(true, 'internalError', null, true);\r\n }\r\n }, function (response) {\r\n DataServices.trackEventsWithGA('Error occured during Save in ' + $scope.pageUrl, 'Click Save Feedback Case Notes And Documents', 'Failed to Save Feedback Case Notes And Documents');\r\n return $scope.utility.openPopup('submissionFailureMessage').result;\r\n })\r\n .finally(function () {\r\n $scope.isSaving = false;\r\n });\r\n }\r\n\r\n $scope.getComplaintType = function () {\r\n return DataServices.responseInfo.ComplaintsFormType;\r\n\r\n };\r\n\r\n getFollowUpSummary();\r\n }]);\r\n}());","(function () {\r\n //get the formApp module\r\n var formApp = angular.module('formApp');\r\n\r\n //set the controller to the code here - the controller uses DataServices.\r\n formApp.controller(\r\n 'feedbackInvestigateFormController',\r\n ['$scope', '$http', '$controller', 'DataServices', 'UtilityServices', 'ValidationService', '$location', '$routeParams', '$rootScope', 'Constants',\r\n function ($scope, $http, $controller, DataServices, UtilityServices, ValidationService, $location, $routeParams, $rootScope, Constants) {\r\n\r\n // Inherit parent controller\r\n $controller('questionController', { $scope: $scope });\r\n $controller('followUpController', { $scope: $scope, feedbackType: Constants.FeedbackType.Complaint, incidentId: DataServices.responseInfo.incidentId });\r\n\r\n // only get the config data if we don't have it\r\n DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.feedbackInvestigate, $scope.versionNumber, null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n $scope.setupTriggersAndDynamicValues();\r\n $scope.setSummaryErrorFocus();\r\n $scope.isPageEditable = DataServices.isFollowUpEditable === true && $scope.page.isEditable === true;\r\n\r\n document.title = $scope.utility.getPageTitle($scope.navTabNum, $scope.pageUrl);\r\n });\r\n\r\n // Incident specific scope items\r\n $scope.status = DataServices.responseInfo.status;\r\n $scope.incidentRef = DataServices.responseInfo.incidentRef;\r\n $scope.statusText = DataServices.responseInfo.statusText;\r\n $scope.template = Constants.ConfigTemplate.feedbackInvestigate;\r\n\r\n $scope.saveInvestigation = function () {\r\n\r\n // no validation \r\n $scope.currentLoadSubmitMessage = \"Saving Feedback Investigation\";\r\n\r\n $scope.callSaveFollowUp($scope.feedbackType).then(function () {\r\n // go back to co-ordination page\r\n $scope.returnToCoordinationPage();\r\n });\r\n }\r\n\r\n $scope.enableAfterParent = function(parent) {\r\n return !$scope.valueOfQuestion(null, parent, 'investigate', 0, 0);\r\n }\r\n\r\n $scope.submitInvestigation = function () {\r\n\r\n // implement submit logic\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, null, null, null, 'inline')) {\r\n\r\n $scope.currentLoadSubmitMessage = \"Submitting Feedback Investigation\";\r\n $scope.callSubmitFollowUp($scope.feedbackType).then(function () {\r\n $scope.returnToCoordinationPage();\r\n });\r\n }\r\n else {\r\n $scope.moveToFirstError();\r\n }\r\n }\r\n\r\n $scope.cancel = function () {\r\n\r\n $scope.callCancelFollowUp();\r\n }\r\n }]);\r\n}());","(function () {\r\n //get the formApp module\r\n var formApp = angular.module('formApp');\r\n\r\n //set the controller to the code here - the controller uses DataServices.\r\n formApp.controller(\r\n 'feedbackPracticeImprovementFormController',\r\n ['$scope', '$http', '$controller', 'DataServices', 'UtilityServices', 'ValidationService', '$location', '$routeParams', '$rootScope', 'Constants',\r\n function ($scope, $http, $controller, DataServices, UtilityServices, ValidationService, $location, $routeParams, $rootScope, Constants) {\r\n\r\n // Inherit parent controller\r\n $controller('questionController', { $scope: $scope });\r\n $controller('followUpController', { $scope: $scope, feedbackType: Constants.FeedbackType.Complaint, incidentId: DataServices.responseInfo.incidentId });\r\n\r\n // only get the config data if we don't have it\r\n DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.feedbackPracticeImprovement, $scope.versionNumber, null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n $scope.setupTriggersAndDynamicValues();\r\n $scope.setSummaryErrorFocus();\r\n $scope.isPageEditable = DataServices.isFollowUpEditable === true && $scope.page.isEditable === true;\r\n\r\n document.title = $scope.utility.getPageTitle($scope.navTabNum, $scope.pageUrl);\r\n });\r\n\r\n // Incident specific scope items\r\n $scope.status = DataServices.responseInfo.status;\r\n $scope.incidentRef = DataServices.responseInfo.incidentRef;\r\n $scope.statusText = DataServices.responseInfo.statusText;\r\n $scope.template = Constants.ConfigTemplate.feedbackPracticeImprovement;\r\n\r\n $scope.savePracticeImprovement = function () {\r\n\r\n // no validation \r\n $scope.currentLoadSubmitMessage = \"Saving Feedback Practice Improvement\";\r\n\r\n $scope.callSaveFollowUp($scope.feedbackType).then(function () {\r\n // go back to co-ordination page\r\n $scope.returnToCoordinationPage();\r\n });\r\n }\r\n\r\n $scope.submitPracticeImprovement = function () {\r\n\r\n // implement submit logic\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, null, null, null, 'inline')) {\r\n\r\n $scope.currentLoadSubmitMessage = \"Submitting Feedback Practice Improvement\";\r\n $scope.callSubmitFollowUp($scope.feedbackType).then(function () {\r\n $scope.returnToCoordinationPage();\r\n });\r\n }\r\n else {\r\n $scope.moveToFirstError();\r\n }\r\n }\r\n\r\n $scope.cancel = function () {\r\n\r\n $scope.callCancelFollowUp();\r\n }\r\n }]);\r\n}());","(function () {\r\n //get the formApp module\r\n var formApp = angular.module('formApp');\r\n\r\n //set the controller to the code here - the controller uses DataServices.\r\n formApp.controller(\r\n 'feedbackRespondFormController',\r\n ['$scope', '$http', '$controller', 'DataServices', 'UtilityServices', 'ValidationService', '$location', '$routeParams', '$rootScope', 'Constants',\r\n function ($scope, $http, $controller, DataServices, UtilityServices, ValidationService, $location, $routeParams, $rootScope, Constants) {\r\n\r\n // Inherit parent controller\r\n $controller('questionController', { $scope: $scope });\r\n $controller('followUpController', { $scope: $scope, feedbackType: Constants.FeedbackType.Complaint, incidentId: DataServices.responseInfo.incidentId });\r\n\r\n // only get the config data if we don't have it\r\n DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.feedbackRespond, $scope.versionNumber, null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n $scope.setupTriggersAndDynamicValues();\r\n $scope.setSummaryErrorFocus();\r\n $scope.isPageEditable = DataServices.isFollowUpEditable === true && $scope.page.isEditable === true;\r\n\r\n document.title = $scope.utility.getPageTitle($scope.navTabNum, $scope.pageUrl);\r\n });\r\n\r\n // Incident specific scope items\r\n $scope.status = DataServices.responseInfo.status;\r\n $scope.incidentRef = DataServices.responseInfo.incidentRef;\r\n $scope.statusText = DataServices.responseInfo.statusText;\r\n $scope.template = Constants.ConfigTemplate.feedbackRespond;\r\n\r\n $scope.getResponseDueDate = function (dateFormat) {\r\n\r\n if (!dateFormat) {\r\n dateFormat = 'DD/MM/YYYY';\r\n }\r\n\r\n var responseDueDate = DataServices.responseInfo.responseDueDate ? moment(DataServices.responseInfo.responseDueDate).format(dateFormat) : null;\r\n return responseDueDate;\r\n }\r\n\r\n $scope.saveResponse = function () {\r\n\r\n // no validation \r\n $scope.currentLoadSubmitMessage = \"Saving Feedback Response\";\r\n\r\n $scope.callSaveFollowUp($scope.feedbackType).then(function () {\r\n // go back to co-ordination page\r\n $scope.returnToCoordinationPage();\r\n });\r\n }\r\n\r\n $scope.submitResponse = function () {\r\n\r\n // implement submit logic\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, null, null, null, 'inline')) {\r\n\r\n $scope.currentLoadSubmitMessage = \"Submitting Feedback Response\";\r\n $scope.callSubmitFollowUp($scope.feedbackType).then(function () {\r\n $scope.returnToCoordinationPage();\r\n });\r\n }\r\n else {\r\n $scope.moveToFirstError();\r\n }\r\n }\r\n\r\n $scope.cancel = function () {\r\n $scope.callCancelFollowUp();\r\n \r\n }\r\n }]);\r\n}());","(function () {\r\n //get the formApp module\r\n var formApp = angular.module('formApp');\r\n\r\n //set the controller to the code here - the controller uses DataServices.\r\n formApp.controller('incidentCoordinationFormController',\r\n ['$scope', '$http', '$controller', 'DataServices', 'UtilityServices', 'ValidationService', '$log', '$location', '$routeParams', '$filter', '$anchorScroll', '$timeout', '$rootScope', 'Constants',\r\n function ($scope, $http, $controller, DataServices, UtilityServices, ValidationService, $log, $location, $routeParams, $filter, $anchorScroll, $timeout, $rootScope, Constants) {\r\n\r\n // Inherit parent controller\r\n $controller('questionController', { $scope: $scope });\r\n $controller('documentController', { $scope: $scope });\r\n $controller('caseNotesHistoryController', { $scope: $scope });\r\n $controller('feedbackAssignmentHistoryController', { $scope: $scope });\r\n\r\n // Default access for attaching documents\r\n DataServices.responseInfo.access = {\r\n canSaveFile: true,\r\n canViewFile: true,\r\n canDeleteFile: true\r\n };\r\n\r\n // This form is always editable, access around the other aspects on the page is governed by other conditions\r\n $scope.isPageEditable = true;\r\n $scope.discardCancelVerification = false;\r\n\r\n var riskAssessmentCode = 'riskassessment';\r\n var notificationCode = 'notification';\r\n var investigationCode = 'investigation';\r\n var practiceImprovementCode = 'practiceimprovement';\r\n\r\n $scope.configData = null;\r\n $scope.isLoading = true;\r\n $scope.access = DataServices.responseInfo.access;\r\n\r\n $scope.coordinationTemplate = Constants.ConfigTemplate.incidentCoordination;\r\n // Set original response to current response as update has occurred.\r\n $scope.originalResponse = angular.copy($scope.responses);\r\n\r\n // Gets the followup summary details for each of the three possible followups for this incident.\r\n var getFollowUpSummary = function () {\r\n DataServices.getFollowUpSummaryResponseAndConfig(Constants.FeedbackType.Privacy, $scope.coordinationTemplate)\r\n .then(function (response) {\r\n $scope.isLoading = false;\r\n var data = response.data;\r\n if (data) {\r\n DataServices.configData = data.configData.configData;\r\n DataServices.responseInfo.template = data.template;\r\n DataServices.responseInfo.versionNumber = null; // reset version number to null.\r\n DataServices.responseInfo.followUpVersionNumber = data.versionNo; // followup version number gets set here for subsequent pages (investigation, Notification, RA, PI)\r\n DataServices.responseInfo.role = data.role;\r\n DataServices.responseInfo.responses = data.responseData;\r\n DataServices.responseInfo.feedbackId = data.feedbackId;\r\n DataServices.responseInfo.ref = data.ref;\r\n DataServices.responseInfo.feedbackCaseNotes = data.feedbackCaseNotes;\r\n\r\n DataServices.responseInfo.incidentRef = data.ref;\r\n DataServices.responseInfo.statusText = data.statusDisplayName;\r\n\r\n $scope.configData = DataServices.configData;\r\n $scope.feedbackId = DataServices.responseInfo.feedbackId;\r\n $scope.isFeedbackComplete = (data.statusId === Constants.Status.Withdrawn || data.statusId === Constants.Status.Closed); \r\n $scope.ref = DataServices.responseInfo.ref;\r\n $scope.template = DataServices.responseInfo.template;\r\n $scope.versionNumber = null; // reset version number to null.\r\n $scope.followUpVersionNumber = data.versionNo;\r\n $scope.role = DataServices.responseInfo.role;\r\n\r\n $scope.incidentRef = DataServices.responseInfo.incidentRef;\r\n $scope.statusText = DataServices.responseInfo.statusText;\r\n\r\n // Specify file access\r\n DataServices.responseInfo.access.canSaveFile = !$scope.isFeedbackComplete || data.statusId === Constants.Status.Closed;\r\n DataServices.responseInfo.access.canDeleteFile = !$scope.isFeedbackComplete ;\r\n\r\n data.feedbackDocuments.forEach(function (doc) {\r\n var uploadedDoc = {\r\n documentId: doc.id,\r\n name: doc.name,\r\n incidentId: DataServices.responseInfo.feedbackId,\r\n isDeleteDisabled: !doc.canDeleteFile,\r\n isDocUploaded: true,\r\n size: doc.size,\r\n uploadDateTime: new Date(doc.createdTime).toLocaleString('en-AU', { day: 'numeric', month: 'numeric', year: 'numeric', hour: 'numeric', minute: 'numeric', hour12: false })\r\n };\r\n $scope.responses.documents.push(uploadedDoc);\r\n });\r\n\r\n DataServices.responseInfo.responses.documents = $scope.responses.documents;\r\n if ($scope.responses.documents.length > 0) {\r\n $scope.initPageAttachments();\r\n }\r\n\r\n $scope.responses = data.responseData;\r\n\r\n $scope.getHistory();\r\n $scope.getFeedbackAssignmentHistory();\r\n $scope.setupTriggersAndDynamicValues();\r\n document.title = $scope.utility.getPageTitle($scope.navTabNum, $scope.pageUrl);\r\n }\r\n else {\r\n $scope.utility.showNotification(true, 'internalError');\r\n }\r\n });\r\n }\r\n\r\n $scope.addFollowUpAction = function (sectionCode, buttonText) {\r\n\r\n // Do nothing if the feedback is already in a final state\r\n if ($scope.isFeedbackComplete) {\r\n return;\r\n }\r\n\r\n var template;\r\n var nextPage;\r\n\r\n switch (sectionCode) {\r\n case riskAssessmentCode:\r\n template = Constants.ConfigTemplate.riskAssessment;\r\n nextPage = Constants.Url.firstRiskAssessmentFormPage;\r\n $scope.isLoadingRiskAssessment = true;\r\n break;\r\n\r\n case notificationCode:\r\n template = Constants.ConfigTemplate.notification;\r\n nextPage = Constants.Url.firstNotificationFormPage;\r\n $scope.isLoadingNotification = true;\r\n break;\r\n\r\n case investigationCode:\r\n template = Constants.ConfigTemplate.investigation;\r\n nextPage = Constants.Url.firstInvestigationFormPage;\r\n $scope.isLoadingInvestigation = true;\r\n break;\r\n\r\n case practiceImprovementCode:\r\n template = Constants.ConfigTemplate.practiceImprovement;\r\n nextPage = Constants.Url.firstPracticeImprovementFormPage;\r\n $scope.isLoadingPracticeImprovement = true;\r\n break;\r\n }\r\n\r\n DataServices.isFollowUpEditable = true;\r\n\r\n DataServices.getConfigurationUsingCache(template, null, $scope.feedbackId, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n\r\n $scope.isLoadingRiskAssessment = false;\r\n $scope.isLoadingNotification = false;\r\n $scope.isLoadingInvestigation = false;\r\n $scope.isLoadingPracticeImprovement = false;\r\n\r\n if (data) {\r\n DataServices.responseInfo.followUpId = null; // reset followup id for add.\r\n DataServices.responseInfo.template = data.template\r\n DataServices.responseInfo.versionNumber = data.versionNumber;\r\n DataServices.responseInfo.role = data.role;\r\n DataServices.responseInfo.responses = {};\r\n DataServices.responseInfo.spStatus = Constants.FollowUpStatus.draft;\r\n DataServices.responseInfo.spStatusText = 'Draft'; // default for new.\r\n DataServices.responseInfo.frStatus = 0; // reset\r\n DataServices.responseInfo.frStatusText = ''; // reset\r\n DataServices.responseInfo.incidentFRStatus = 0; // reset\r\n DataServices.validationErrors = [];\r\n DataServices.configData = data.configData;\r\n $scope.configData = DataServices.configData;\r\n DataServices.pushConfigData(data.configData, template, data.versionNumber, data.role);\r\n\r\n DataServices.trackEventsWithGA('PageName: Incident Coordination', 'Click ' + buttonText, buttonText);\r\n $location.path(nextPage);\r\n } else {\r\n $scope.utility.showNotification(true, 'internalError');\r\n }\r\n }, function (data) {\r\n $scope.utility.showNotification(true, 'internalError');\r\n });\r\n }\r\n\r\n // Opens an existing followup action for Edit / View\r\n $scope.openFollowUpAction = function (template, followUpId) {\r\n if (template == 3) {\r\n $scope.isLoadingRiskAssessment = true;\r\n }\r\n else if (template == 4) {\r\n $scope.isLoadingNotification = true;\r\n }\r\n else if (template == 5) {\r\n $scope.isLoadingInvestigation = true;\r\n }\r\n else if (template == 6) {\r\n $scope.isLoadingPracticeImprovement = true;\r\n }\r\n\r\n DataServices.getFollowUpResponseAndConfig(followUpId, Constants.FeedbackType.Privacy)\r\n .then(function (response) {\r\n if (template == 3) {\r\n $scope.isLoadingRiskAssessment = false;\r\n }\r\n else if (template == 4) {\r\n $scope.isLoadingNotification = false;\r\n }\r\n else if (template == 5) {\r\n $scope.isLoadingInvestigation = false;\r\n }\r\n else if (template == 6) {\r\n $scope.isLoadingPracticeImprovement = false;\r\n }\r\n\r\n var data = response.data;\r\n if (data) {\r\n\r\n DataServices.responseInfo.access = data.access;\r\n\r\n DataServices.responseInfo.status = data.statusId;\r\n\r\n DataServices.responseInfo.incidentRef = data.ref;\r\n DataServices.responseInfo.statusText = data.statusDisplayName;\r\n\r\n DataServices.responseInfo.followUpId = followUpId;\r\n DataServices.responseInfo.template = data.template\r\n DataServices.responseInfo.versionNumber = data.versionNo;\r\n DataServices.responseInfo.role = data.role;\r\n DataServices.responseInfo.lastUpdatedTime = data.lastUpdatedTime;\r\n DataServices.validationErrors = [];\r\n DataServices.configData = data.configData.configData;\r\n $scope.configData = DataServices.configData;\r\n DataServices.pushConfigData(data.configData.configData, template, data.versionNo, data.role);\r\n\r\n DataServices.isFollowUpEditable = (data.statusId !== Constants.FollowUpStatus.submitted && $scope.isFeedbackComplete === false);\r\n\r\n DataServices.responseInfo.responses = data.responseData;\r\n $scope.responses = DataServices.responseInfo.responses;\r\n\r\n switch (template) {\r\n case Constants.ConfigTemplate.riskAssessment:\r\n DataServices.trackEventsWithGA('PageName: ManageFollowUpActions', 'Click View/Edit Risk Assessment', 'Edit/View Risk Assessment');\r\n $location.path(Constants.Url.firstRiskAssessmentFormPage);\r\n break;\r\n case Constants.ConfigTemplate.notification:\r\n DataServices.trackEventsWithGA('PageName: ManageFollowUpActions', 'Click View/Edit Notification', 'Edit/View Notification');\r\n $location.path(Constants.Url.firstNotificationFormPage);\r\n break;\r\n case Constants.ConfigTemplate.investigation:\r\n DataServices.trackEventsWithGA('PageName: ManageFollowUpActions', 'Click View/Edit Investigation', 'Edit/View Investigation');\r\n $location.path(Constants.Url.firstInvestigationFormPage);\r\n break;\r\n case Constants.ConfigTemplate.practiceImprovement:\r\n DataServices.trackEventsWithGA('PageName: ManageFollowUpActions', 'Click View/Edit Practice Improvement', 'Edit/View Practice Improvement');\r\n $location.path(Constants.Url.firstPracticeImprovementFormPage);\r\n break;\r\n }\r\n } else {\r\n $scope.utility.showNotification(true, 'internalError');\r\n }\r\n });\r\n }\r\n\r\n $scope.saveAndReturnToLanding = function () {\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, null, null, null, 'inline')) {\r\n // Case Note is not mandatory, and therefore we need to ignore when they submit an empty text field \r\n if (!$scope.notEmpty(null, 'cCaseNotes', 'casenotes', 0, 0, '1-1')) {\r\n $scope.returnToPrivacy();\r\n }\r\n else {\r\n $scope.isSaving = true;\r\n $scope.saveFeedbackCaseNotes().then(function () {\r\n $location.path(Constants.Url.manageFeedbacks);\r\n });\r\n \r\n }\r\n }\r\n else {\r\n $scope.alertFirstError();\r\n }\r\n }\r\n\r\n $scope.saveFeedbackCaseNotes = function () {\r\n return DataServices.saveFeedbackCaseNotes()\r\n .then(function (response) {\r\n if (response.data) {\r\n if (response.data.status === 3) {\r\n\r\n DataServices.trackEventsWithGA('Save action in ' + $scope.pageUrl, 'Click Save Feedback Case Notes And Documents', 'Successfully Saved Feedback Case Notes And Documents');\r\n $scope.originalResponse = angular.copy($scope.responses);\r\n $scope.discardCancelVerification = true;\r\n return $scope.utility.openPopup('submissionSuccessMessage').result;\r\n } else {\r\n DataServices.trackEventsWithGA('Error occured during Save in ' + $scope.pageUrl, 'Click Save Feedback Case Notes And Documents', 'Failed to Save Feedback Case Notes And Documents');\r\n return $scope.utility.openPopup('submissionFailureMessage').result;\r\n }\r\n }\r\n else {\r\n \t\t\t return $scope.utility.showNotification(true, 'internalError', null, true);\r\n }\r\n }, function (response) {\r\n DataServices.trackEventsWithGA('Error occured during Save in ' + $scope.pageUrl, 'Click Save Feedback Case Notes And Documents', 'Failed to Save Feedback Case Notes And Documents');\r\n return $scope.utility.openPopup('submissionFailureMessage').result;\r\n })\r\n .finally(function () {\r\n $scope.isSaving = false;\r\n });\r\n }\r\n\r\n\r\n \r\n\r\n $scope.checkValueChangeForCoordinationPage = function () {\r\n if ($scope.discardCancelVerification ) {\r\n return false;\r\n }\r\n\r\n return $scope.notEmpty(null, 'cCaseNotes', 'casenotes', 0, 0, '1-1');\r\n }\r\n\r\n $scope.returnToPrivacy = function () {\r\n\r\n if (!$scope.notEmpty(null, 'cCaseNotes', 'casenotes', 0, 0, '1-1')) {\r\n $location.path(Constants.Url.manageFeedbacks);\r\n } else {\r\n $scope.utility.openPopup('warnUserBeforeCancel').result.then(\r\n function (data) {\r\n if (data.result == \"thirdButtonClick\") {\r\n $scope.saveFeedbackCaseNotes().then(function () {\r\n $location.path(Constants.Url.manageFeedbacks);\r\n });\r\n }\r\n else {\r\n $scope.discardCancelVerification = true;\r\n $location.path(Constants.Url.manageFeedbacks);\r\n }\r\n });\r\n }\r\n }\r\n\r\n $scope.callCancelFollowUp = function () {\r\n $scope.returnToPrivacy();\r\n }\r\n\r\n getFollowUpSummary();\r\n }]);\r\n}());","(function () {\r\n //get the formApp module\r\n var formApp = angular.module('formApp');\r\n\r\n //set the controller to the code here - the controller uses DataServices.\r\n formApp.controller('incidentFormController', ['$scope', '$http', '$controller', 'DataServices', 'UtilityServices', 'ValidationService', '$log', '$location', '$routeParams', '$filter', '$anchorScroll', '$timeout', '$rootScope', 'Constants', function ($scope, $http, $controller, DataServices, UtilityServices, ValidationService, $log, $location, $routeParams, $filter, $anchorScroll, $timeout, $rootScope, Constants) {\r\n\r\n // Inherit parent controller\r\n $controller('questionController', { $scope: $scope });\r\n $controller('documentController', { $scope: $scope });\r\n\r\n if (window.location.href.indexOf('incident/1/servicedetails') > -1) {\r\n if (window.location.href.indexOf('DFFH') > -1) {\r\n\r\n for (var j = DataServices.configData.optionSets[\"organisation\"].length - 1; j >= 0; j--) {\r\n if (DataServices.configData.optionSets[\"organisation\"][j].text == 'Department of Health') {\r\n DataServices.configData.optionSets[\"organisation\"].splice(j, 1);\r\n }\r\n }\r\n }\r\n else {\r\n for (var k = DataServices.configData.optionSets[\"organisation\"].length - 1; k >= 0; k--) {\r\n if ((DataServices.configData.optionSets[\"organisation\"][k].text == 'Department of Families, Fairness and Housing')) {\r\n DataServices.configData.optionSets[\"organisation\"].splice(k, 1);\r\n }\r\n }\r\n }\r\n $scope.configData.optionSets[\"organisation\"] = DataServices.configData.optionSets[\"organisation\"];\r\n }\r\n\r\n // only get the config data if we don't have it\r\n DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.incident, $scope.versionNumber,null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n $scope.setupTriggersAndDynamicValues();\r\n $scope.setSummaryErrorFocus();\r\n document.title = $scope.utility.getPageTitle($scope.navTabNum, $scope.pageUrl);\r\n });\r\n\r\n // default access for attaching documents (NOTE: this needs to come from the user role)\r\n DataServices.responseInfo.access = {\r\n canSaveFile: UtilityServices.isCurrentIncidentEditable(),\r\n canViewFile: true,\r\n canDeleteFile: UtilityServices.isCurrentIncidentEditable()\r\n };\r\n\r\n // Incident specific scope items\r\n $scope.access = DataServices.responseInfo.access;\r\n $scope.incidentId = DataServices.responseInfo.incidentId;\r\n $scope.incidentRef = DataServices.responseInfo.incidentRef;\r\n $scope.status = DataServices.responseInfo.status;\r\n $scope.statusText = DataServices.responseInfo.statusText;\r\n $scope.reportedDate = DataServices.responseInfo.reportedDate ? moment(DataServices.responseInfo.reportedDate).format($scope.Constants.ausDateFormat) : null;\r\n $scope.submittedDate = DataServices.responseInfo.submittedDate ? moment(DataServices.responseInfo.submittedDate).format($scope.Constants.ausDateFormat) : null;\r\n $scope.template = Constants.ConfigTemplate.incident;\r\n $scope.role = DataServices.responseInfo.role;\r\n\r\n $scope.feedbackType = Constants.FeedbackType.Privacy;\r\n\r\n // Updates the users role and config based on the selected organisation, serviceType and area\r\n // This is invoked as an exit condition so it must exist in the base controller.\r\n $scope.updateUserRoleAndConfig = function (successFunction, failureFunction) {\r\n\r\n var organisation = $scope.valueOfQuestion(null, 'sPOrgName', 'servicedetails', 0, 0, '1-1');\r\n var area = $scope.valueOfQuestion(null, 'sPArea', 'servicedetails', 0, 0, '1-1');\r\n var serviceType = $scope.valueOfQuestion(null, 'sPServiceType', 'servicedetails', 0, 0, '1-1');\r\n\r\n // If user is authenticated and area or service type have been changed (or entered for the first time), check the user role.\r\n if (DataServices.isFullyRegisteredUser() && area && serviceType &&\r\n (\r\n !$scope.originalResponse['1-1'] ||\r\n ($scope.originalResponse['1-1'] &&\r\n (area !== $scope.originalResponse['1-1'][0]['servicedetails'][0]['sPArea'] ||\r\n serviceType !== $scope.originalResponse['1-1'][0]['servicedetails'][0]['sPServiceType'])\r\n ))) {\r\n $scope.$eval(successFunction);\r\n \r\n \r\n }\r\n else {\r\n $scope.$eval(successFunction);\r\n }\r\n }\r\n\r\n \r\n // Saves the current incident\r\n $scope.saveIncident = function (btnId) {\r\n // If the current page is repeating, ensure that the repeating items have been added / updated before allowing them to proceed\r\n if (!$scope.checkPageItemsAreSaved()) {\r\n return;\r\n }\r\n \r\n $scope.currentLoadSaveMessage = \"Saving incident\";\r\n if ($scope.isPageEditable === true && $scope.validatePage($scope.navTabNum, $scope.pageUrl, null, null, null, 'inline')) {\r\n // save incident for authenticated user\r\n if ($scope.isAuthenticated) {\r\n if (!angular.equals($scope.originalResponse, $scope.responses)) {\r\n saveIncidentRegisteredUser($scope.feedbackType);\r\n }\r\n else {\r\n // No changes have been made, alert user\r\n $scope.utility.openPopup('noChangesSaveNotRequired', { incidentRef: $scope.incidentRef });\r\n }\r\n } else {\r\n // Navigate to save draft page\r\n DataServices.callingPage = $location.$$path.slice(1);\r\n $location.path(Constants.Url.saveDraft);\r\n }\r\n }\r\n else {\r\n $scope.alertFirstError();\r\n }\r\n\r\n // save failed if we reach here.\r\n return null;\r\n }\r\n\r\n //Submits the incident if there are no validation errors.\r\n $scope.submitIncident = function () {\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, null, null, null, 'inline')) {\r\n $scope.currentLoadSubmitMessage = \"Submitting Incident\";\r\n\r\n // TODO: we need a cleaner way of injecting this captcha value.\r\n DataServices.responseInfo.captchaResponse = $scope.valueOfQuestion(null, 'cOCaptcha', 'consent', 0, 0);\r\n\r\n $scope.isSaving = true;\r\n\r\n DataServices.submitIncident($scope.feedbackType)\r\n .then(function (response) {\r\n if (response.data && response.data.status == 2) {\r\n $scope.utility.openPopup('savedElsewhere', { lastUpdatedBy: response.data.lastUpdatedBy });\r\n } else {\r\n if (response.data && response.data.id) {\r\n DataServices.trackEventsWithGA('Submit action in ' + $scope.pageUrl, 'Click Submit To Manager', 'Successfully Submitted Incident');\r\n\r\n $scope.updateStatusBarInformation(response.data);\r\n\r\n $scope.goToNextPage();\r\n } else {\r\n $scope.utility.showNotification(true, 'internalError');\r\n }\r\n }\r\n }, function (response) {\r\n $scope.utility.openPopup('errorSubmit');\r\n DataServices.trackEventsWithGA('Error occured during Submiting in ' + $scope.pageUrl, 'Click Submit To Manager', 'Failed to Submit Incident');\r\n })\r\n .finally(function () {\r\n $scope.isSaving = false;\r\n });\r\n } else {\r\n $scope.moveToFirstError();\r\n }\r\n };\r\n\r\n // Downloads the incident PDF\r\n $scope.downloadPdf = function (qCode) {\r\n DataServices.trackEventsWithGA('Download pdf action in ' + $scope.pageUrl, 'Click Download pdf', 'Download incident pdf');\r\n\r\n $scope.isButtonLoading[qCode] = true;\r\n DataServices.viewIncidentPdf($scope.incidentId) \r\n .then(function (response) {\r\n var data = response && response.data;\r\n try {\r\n var file = new Blob([data], { type: \"application/pdf\" }, { name: DataServices.responseInfo.incidentRef });\r\n //if (window.Blob && window.navigator.msSaveOrOpenBlob) {\r\n // saveAs(file, DataServices.responseInfo.incidentRef + '.pdf');\r\n //}\r\n saveAs(file, DataServices.responseInfo.incidentRef + '.pdf');\r\n }\r\n catch (e) {\r\n $scope.utility.openPopup('errorDownloadPdf');\r\n }\r\n $scope.isButtonLoading[qCode] = false;\r\n },function () {\r\n $scope.utility.openPopup('errorDownloadPdf');\r\n $scope.isButtonLoading[qCode] = false;\r\n });\r\n };\r\n\r\n // Updates information needed for the status bar\r\n $scope.updateStatusBarInformation = function (response) {\r\n\r\n DataServices.responseInfo.incidentId = response.id;\r\n DataServices.responseInfo.incidentRef = response.ref;\r\n DataServices.responseInfo.lastUpdatedTime = response.allocatedLastUpdatedTime;\r\n DataServices.responseInfo.reportedDate = response.reportedDate;\r\n DataServices.responseInfo.submittedDate = response.submittedDate;\r\n DataServices.responseInfo.status = response.incidentStatus;\r\n DataServices.responseInfo.statusText = response.incidentStatusText;\r\n\r\n // Set original response to current response as update has occurred.\r\n $scope.originalResponse = angular.copy($scope.responses);\r\n\r\n $scope.incidentId = DataServices.responseInfo.incidentId;\r\n $scope.incidentRef = DataServices.responseInfo.incidentRef;\r\n $scope.lastUpdatedTime = DataServices.responseInfo.lastUpdatedTime;\r\n $scope.reportedDate = DataServices.responseInfo.reportedDate ? moment(DataServices.responseInfo.reportedDate).format($scope.Constants.ausDateFormat) : null;\r\n $scope.submittedDate = DataServices.responseInfo.submittedDate ? moment(DataServices.responseInfo.submittedDate).format($scope.Constants.ausDateFormat) : null;\r\n $scope.status = DataServices.responseInfo.status;\r\n $scope.statusText = DataServices.responseInfo.statusText;\r\n $scope.role = DataServices.responseInfo.role;\r\n\r\n if (response.formConfig && response.formConfig.configData) {\r\n // Explicitly set config data\r\n DataServices.configData = response.formConfig.configData;\r\n $scope.configData = response.formConfig.configData;\r\n\r\n DataServices.pushConfigData(response.formConfig.configData, Constants.ConfigTemplate.incident, response.formConfig.versionNumber, response.formConfig.role);\r\n }\r\n }\r\n\r\n // ******************************************\r\n // NOTE: All local functions below this line.\r\n // ******************************************\r\n\r\n // Performs the actual save for registered users\r\n var saveIncidentRegisteredUser = function (feedbackType) {\r\n\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, null, null, null, 'inline')) {\r\n $scope.isSaving = true;\r\n DataServices.saveIncidentRegisteredUser(feedbackType)\r\n .then(function (response) {\r\n if (response.data && response.data.status == 2) {\r\n $scope.utility.openPopup('savedElsewhere',\r\n { lastUpdatedBy: response.data.lastUpdatedBy });\r\n } else {\r\n if (response.data && response.data.id) {\r\n DataServices.trackEventsWithGA('Save action in ' + $scope.pageUrl, 'Click Save Incident Registered User', 'Successfully Saved Incident');\r\n\r\n $scope.updateStatusBarInformation(response.data);\r\n $scope.utility.openPopup('successSaveIncident',\r\n {\r\n incidentRef: response.data.ref,\r\n oldStatusText: $scope.statusText,\r\n statusText: \"Save Sucessfully\"\r\n //response.data.incidentStatusText\r\n }).closed.then(function () {\r\n $rootScope.allowFormNavigation = false;\r\n $scope.returnToPrivacy();\r\n });\r\n } else {\r\n $scope.utility.showNotification(true, 'internalError');\r\n }\r\n }\r\n }, function (response) {\r\n $scope.utility.openPopup('errorSave');\r\n DataServices.trackEventsWithGA('Error occured during Save in ' + $scope.pageUrl,\r\n 'Click Save Incident Registered User',\r\n 'Failed to Save Incident');\r\n })\r\n .finally(function () {\r\n $scope.isSaving = false;\r\n });\r\n }\r\n }\r\n\r\n // Performs the actual save for registered users after prompting.\r\n var saveIncidentAfterWarningRegisteredUser = function () {\r\n $scope.utility.openPopup('warnUserBeforeSave').result.then(function (result) {\r\n saveIncidentRegisteredUser($scope.feedbackType);\r\n });\r\n }\r\n\r\n // Override question controller save page item to include duplicate check.\r\n $scope.saveNewPageItem = function (pIndex) {\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, pIndex, null, null, 'inline')) {\r\n if ($scope.checkDuplicates($scope.pageUrl, pIndex)) {\r\n\r\n $scope.setPageItemState(pIndex, Constants.RepeatingItemState.viewing);\r\n\r\n // set the shadow response to equal the response as the change is being accepted\r\n $scope.shadowResponse[pIndex] = angular.copy($scope.responses[$scope.pageId][pIndex]);\r\n\r\n //focus the 'add' button\r\n $scope.utility.focus('pageAddNewButton');\r\n }\r\n }\r\n else {\r\n $scope.alertFirstError();\r\n }\r\n }\r\n\r\n // Override question controller save existing page item to include duplicate check.\r\n $scope.saveExistingPageItem = function (pIndex) {\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, pIndex, null, null, 'inline')) {\r\n if ($scope.checkDuplicates($scope.pageUrl, pIndex)) {\r\n $scope.setPageItemState(pIndex, Constants.RepeatingItemState.viewing);\r\n\r\n // set the shadow response to equal the response as the change is being accepted\r\n $scope.shadowResponse[pIndex] = angular.copy($scope.responses[$scope.pageId][pIndex]);\r\n\r\n //focus the 'edit' button\r\n $scope.utility.focus('pageEdit-' + pIndex);\r\n }\r\n }\r\n else {\r\n $scope.alertFirstError();\r\n }\r\n }\r\n\r\n // Checks for duplicate entries in repeating page items\r\n // TODO: this needs to be fixed once we work out a generic system for invoking this function after save of a repeating page or section.\r\n $scope.checkDuplicates = function (pageUrl, pIndex) {\r\n var isPageCheck = (pageUrl == \"clients\") || pageUrl == \"othersinvolved\";\r\n var noDuplicates = true;\r\n if (isPageCheck) {\r\n if (pageUrl == \"clients\" && $scope.getPageItemCount($scope.pageId) > 1) {\r\n\r\n var objClients = $scope.responses[$scope.pageId];\r\n var surName = $scope.responses[$scope.pageId][pIndex][\"clients\"][0].cDSurnameFamilyname.trim();\r\n var givenName = $scope.responses[$scope.pageId][pIndex][\"clients\"][0].cDGivenName.trim();\r\n var dob = $scope.responses[$scope.pageId][pIndex][\"clients\"][0].cDDOB.trim();\r\n for (var i = 0; i < objClients.length; i++) {\r\n if (i !== pIndex) {\r\n if (surName.toLowerCase() == objClients[i]['clients'][0].cDSurnameFamilyname.toLowerCase().trim() && givenName.toLowerCase() == objClients[i]['clients'][0].cDGivenName.toLowerCase().trim() && dob == objClients[i]['clients'][0].cDDOB.trim()) {\r\n $scope.utility.openPopup('duplicateClients');\r\n noDuplicates = false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (pageUrl == \"othersinvolved\" && $scope.getPageItemCount($scope.pageId) > 1) {\r\n var objClients = $scope.responses[$scope.pageId];\r\n var surName = $scope.responses[$scope.pageId][pIndex][\"othersinvolved\"][0].oTSurnameFamilyName.trim();\r\n var givenName = $scope.responses[$scope.pageId][pIndex][\"othersinvolved\"][0].oTGivenName.trim();\r\n for (var i = 0; i < objClients.length - 1; i++) {\r\n if (i !== pIndex) {\r\n if (surName.toLowerCase() == objClients[i]['othersinvolved'][0].oTSurnameFamilyName.toLowerCase().trim() && givenName.toLowerCase() == objClients[i]['othersinvolved'][0].oTGivenName.toLowerCase().trim()) {\r\n $scope.utility.openPopup('duplicateStaff');\r\n noDuplicates = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return noDuplicates;\r\n }\r\n\r\n $scope.callCancelFollowUp = function() {\r\n $scope.goToCancelIncident();\r\n }\r\n\r\n $scope.goToCancelIncident = function () {\r\n // function to call on window close on Incident form\r\n if (DataServices.isFullyRegisteredUser()) {\r\n\r\n if ($scope.status > 1) {\r\n // this condition is to save only if the status is draft or nothing (not set yet)\r\n $scope.returnToManagePrivacy();\r\n }\r\n else {\r\n if (!angular.equals($scope.originalResponse, $scope.responses)) {\r\n // for registered users\r\n // display a confirmation message\r\n $scope.utility.openPopup('warnUserBeforeCancelRegisteredUser').result\r\n .then(function (data) {\r\n if (data.result == \"thirdButtonClick\") {\r\n // On Yes, Save the changes\r\n $rootScope.allowFormNavigation = false;\r\n saveIncidentRegisteredUser($scope.feedbackType);\r\n }\r\n else {\r\n $scope.returnToPrivacy();\r\n }\r\n });\r\n }\r\n else {\r\n $scope.returnToManagePrivacy();\r\n }\r\n }\r\n }\r\n else {\r\n // for direct users \r\n // If user chose Yes, current page is closed and landing page is displayed.\r\n // If user selects 'No', system stays on the current page.\r\n $scope.utility.openPopup('warnUserBeforeCancel').result.then(\r\n function (result) {\r\n // On Yes go to landing page\r\n $rootScope.allowFormNavigation = false;\r\n $scope.returnToPrivacy();\r\n });\r\n }\r\n }\r\n\r\n $scope.returnToPrivacy = function () {\r\n $location.path(Constants.Url.privacy);\r\n }\r\n\r\n $scope.returnToManagePrivacy = function () {\r\n $location.path(Constants.Url.manageFeedbacks);\r\n }\r\n }]);\r\n}());","(function () {\r\n //get the formApp module\r\n var formApp = angular.module('formApp');\r\n\r\n //set the controller to the code here - the controller uses DataServices.\r\n formApp.controller('investigationFormController',\r\n ['$scope', '$http', '$controller', 'DataServices', 'UtilityServices', 'ValidationService', '$log', '$location', '$routeParams', '$filter', '$anchorScroll', '$timeout', '$rootScope', 'Constants',\r\n function ($scope, $http, $controller, DataServices, UtilityServices, ValidationService, $log, $location, $routeParams, $filter, $anchorScroll, $timeout, $rootScope, Constants) {\r\n\r\n // Inherit parent controller\r\n $controller('questionController', { $scope: $scope });\r\n $controller('followUpController', { $scope: $scope, feedbackType: Constants.FeedbackType.Privacy, incidentId: DataServices.responseInfo.incidentId });\r\n\r\n // only get the config data if we don't have it\r\n //DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.investigation, $scope.versionNumber, DataServices.isAuthenticated())\r\n DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.investigation, $scope.versionNumber, null, true)\r\n .then(function (data) {\r\n $scope.setupTriggersAndDynamicValues();\r\n $scope.setSummaryErrorFocus();\r\n $scope.isPageEditable = DataServices.isFollowUpEditable === true && $scope.page.isEditable === true;\r\n\r\n document.title = $scope.utility.getPageTitle($scope.navTabNum, $scope.pageUrl);\r\n });\r\n\r\n $scope.status = DataServices.responseInfo.status;\r\n $scope.incidentId = DataServices.responseInfo.incidentId;\r\n $scope.incidentRef = DataServices.responseInfo.incidentRef;\r\n $scope.statusText = DataServices.responseInfo.statusText;\r\n $scope.template = Constants.ConfigTemplate.investigation;\r\n\r\n $scope.saveInvestigation = function () {\r\n // no validation \r\n $scope.currentLoadSubmitMessage = \"Saving Investigation\";\r\n $scope.callSaveFollowUp($scope.feedbackType).then(function () {\r\n // go back to co-ordination page\r\n $scope.returnToCoordinationPage();\r\n });\r\n\r\n };\r\n\r\n $scope.submitInvestigation = function () {\r\n // implement submit logic\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, null, null, null, 'inline')) {\r\n $scope.currentLoadSubmitMessage = \"Submitting Investigation\";\r\n $scope.callSubmitFollowUp($scope.feedbackType).then(function () {\r\n $scope.returnToCoordinationPage();\r\n });\r\n }\r\n else {\r\n $scope.moveToFirstError();\r\n }\r\n };\r\n\r\n $scope.cancel = function () {\r\n\r\n $scope.callCancelFollowUp();\r\n };\r\n\r\n }]);\r\n}());","(function () {\r\n //get the formApp module\r\n var formApp = angular.module('formApp');\r\n\r\n //set the controller to the code here - the controller uses DataServices.\r\n formApp.controller('notificationFormController',\r\n ['$scope', '$http', '$controller', 'DataServices', 'UtilityServices', 'ValidationService', '$log', '$location', '$routeParams', '$filter', '$anchorScroll', '$timeout', '$rootScope', 'Constants',\r\n function ($scope, $http, $controller, DataServices, UtilityServices, ValidationService, $log, $location, $routeParams, $filter, $anchorScroll, $timeout, $rootScope, Constants) {\r\n\r\n // Inherit parent controller\r\n $controller('questionController', { $scope: $scope });\r\n $controller('followUpController', { $scope: $scope, feedbackType: Constants.FeedbackType.Privacy, incidentId: DataServices.responseInfo.incidentId });\r\n\r\n // only get the config data if we don't have it\r\n //DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.notification, $scope.versionNumber, DataServices.isAuthenticated())\r\n DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.notification, $scope.versionNumber, null, true)\r\n .then(function (data) {\r\n $scope.setupTriggersAndDynamicValues();\r\n $scope.setSummaryErrorFocus();\r\n $scope.isPageEditable = DataServices.isFollowUpEditable === true && $scope.page.isEditable === true;\r\n\r\n document.title = $scope.utility.getPageTitle($scope.navTabNum, $scope.pageUrl);\r\n });\r\n \r\n $scope.status = DataServices.responseInfo.status;\r\n $scope.incidentId = DataServices.responseInfo.incidentId;\r\n $scope.incidentRef = DataServices.responseInfo.incidentRef;\r\n $scope.statusText = DataServices.responseInfo.statusText;\r\n $scope.template = Constants.ConfigTemplate.notification;\r\n\r\n $scope.saveNotification = function () {\r\n // implement save logic\r\n // no validation \r\n $scope.currentLoadSubmitMessage = \"Saving Notification\";\r\n $scope.callSaveFollowUp($scope.feedbackType).then(function () {\r\n // go back to co-ordination page\r\n $scope.returnToCoordinationPage();\r\n });\r\n\r\n };\r\n\r\n $scope.submitNotification = function () {\r\n // implement submit logic\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, null, null, null, 'inline')) {\r\n $scope.currentLoadSubmitMessage = \"Submitting Notification\";\r\n $scope.callSubmitFollowUp($scope.feedbackType).then(function () {\r\n $scope.returnToCoordinationPage();\r\n });\r\n }\r\n else {\r\n $scope.moveToFirstError();\r\n }\r\n };\r\n\r\n $scope.cancel = function () {\r\n \r\n $scope.callCancelFollowUp();\r\n };\r\n\r\n\r\n }]);\r\n}());","(function () {\r\n //get the formApp module\r\n var formApp = angular.module('formApp');\r\n\r\n //set the controller to the code here - the controller uses DataServices.\r\n formApp.controller('practiceImprovementFormController',\r\n ['$scope', '$http', '$controller', 'DataServices', 'UtilityServices', 'ValidationService', '$log', '$location', '$routeParams', '$filter', '$anchorScroll', '$timeout', '$rootScope', 'Constants',\r\n function ($scope, $http, $controller, DataServices, UtilityServices, ValidationService, $log, $location, $routeParams, $filter, $anchorScroll, $timeout, $rootScope, Constants) {\r\n\r\n // Inherit parent controller\r\n $controller('questionController', { $scope: $scope });\r\n $controller('followUpController', { $scope: $scope, feedbackType: Constants.FeedbackType.Privacy, incidentId: DataServices.responseInfo.incidentId });\r\n\r\n // only get the config data if we don't have it\r\n //DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.practiceImprovement, $scope.versionNumber, DataServices.isAuthenticated())\r\n DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.practiceImprovement, $scope.versionNumber, null, true)\r\n .then(function (data) {\r\n $scope.setupTriggersAndDynamicValues();\r\n $scope.setSummaryErrorFocus();\r\n $scope.isPageEditable = DataServices.isFollowUpEditable === true && $scope.page.isEditable === true;\r\n\r\n document.title = $scope.utility.getPageTitle($scope.navTabNum, $scope.pageUrl);\r\n });\r\n\r\n $scope.status = DataServices.responseInfo.status;\r\n $scope.incidentId = DataServices.responseInfo.incidentId;\r\n $scope.incidentRef = DataServices.responseInfo.incidentRef;\r\n $scope.statusText = DataServices.responseInfo.statusText;\r\n $scope.template = Constants.ConfigTemplate.practiceImprovement;\r\n\r\n $scope.savePracticeImprovement = function () {\r\n // no validation \r\n $scope.currentLoadSubmitMessage = \"Saving Practise Improvement\";\r\n $scope.callSaveFollowUp($scope.feedbackType).then(function () {\r\n // go back to co-ordination page\r\n $scope.returnToCoordinationPage();\r\n });\r\n\r\n };\r\n\r\n $scope.submitPracticeImprovement = function () {\r\n // implement submit logic\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, null, null, null, 'inline')) {\r\n $scope.currentLoadSubmitMessage = \"Submitting Practice Improvement\";\r\n $scope.callSubmitFollowUp($scope.feedbackType).then(function () {\r\n $scope.returnToCoordinationPage();\r\n });\r\n }\r\n else {\r\n $scope.moveToFirstError();\r\n }\r\n };\r\n\r\n $scope.cancel = function () {\r\n\r\n $scope.callCancelFollowUp();\r\n };\r\n\r\n }]);\r\n}());","(function () {\r\n //get the formApp module\r\n var formApp = angular.module('formApp');\r\n\r\n //set the controller to the code here - the controller uses DataServices.\r\n formApp.controller('riskAssessmentFormController',\r\n ['$scope', '$http', '$controller', 'DataServices', 'UtilityServices', 'ValidationService', '$log', '$location', '$routeParams', '$filter', '$anchorScroll', '$timeout', '$rootScope', 'Constants',\r\n function ($scope, $http, $controller, DataServices, UtilityServices, ValidationService, $log, $location, $routeParams, $filter, $anchorScroll, $timeout, $rootScope, Constants) {\r\n\r\n // Inherit parent controller\r\n $controller('questionController', { $scope: $scope });\r\n $controller('followUpController', { $scope: $scope, feedbackType: Constants.FeedbackType.Privacy, incidentId: DataServices.responseInfo.incidentId });\r\n\r\n // only get the config data if we don't have it\r\n //DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.riskAssessment, $scope.versionNumber, DataServices.isAuthenticated())\r\n DataServices.getConfigurationUsingCache(Constants.ConfigTemplate.riskAssessment, $scope.versionNumber, null, true)\r\n .then(function (data) {\r\n $scope.setupTriggersAndDynamicValues();\r\n $scope.setSummaryErrorFocus();\r\n $scope.isPageEditable = DataServices.isFollowUpEditable === true && $scope.page.isEditable === true;\r\n\r\n document.title = $scope.utility.getPageTitle($scope.navTabNum, $scope.pageUrl);\r\n });\r\n\r\n $scope.status = DataServices.responseInfo.status;\r\n $scope.incidentId = DataServices.responseInfo.incidentId;\r\n $scope.incidentRef = DataServices.responseInfo.incidentRef;\r\n $scope.statusText = DataServices.responseInfo.statusText;\r\n $scope.template = Constants.ConfigTemplate.riskAssessment;\r\n\r\n $scope.saveRiskAssessment = function () {\r\n\r\n // no validation \r\n $scope.currentLoadSubmitMessage = \"Saving Risk Assessment\";\r\n $scope.callSaveFollowUp($scope.feedbackType).then(function () {\r\n // go back to co-ordination page\r\n $scope.returnToCoordinationPage();\r\n });;\r\n };\r\n\r\n $scope.submitRiskAssessment = function () {\r\n // implement submit logic\r\n if ($scope.validatePage($scope.navTabNum, $scope.pageUrl, null, null, null, 'inline')) {\r\n $scope.currentLoadSubmitMessage = \"Submitting Risk Assessment\";\r\n $scope.callSubmitFollowUp($scope.feedbackType).then(function () {\r\n $scope.returnToCoordinationPage();\r\n });\r\n }\r\n else {\r\n $scope.moveToFirstError();\r\n }\r\n };\r\n\r\n $scope.cancel = function () {\r\n\r\n $scope.callCancelFollowUp();\r\n };\r\n\r\n }]);\r\n}());","(function () {\r\n //Service code here\r\n var dataService = function ($http, $window, $log, $q, $timeout, $rootScope, Constants, adalAuthenticationService) {\r\n\r\n var cacheConfigData = {};\r\n var shadowResponse = [];\r\n var validatedPages = [];\r\n var saveCounter = 0;\r\n var previousPage = null;\r\n var programOriginalResponse = [];\r\n var programRegisteredOriginalResponse = [];\r\n var navigationTabsResponse = [];\r\n var navigationTabsOriginalResponse = [];\r\n var orgNameResponse = [];\r\n var orgNameOriginalResponse = [];\r\n var cutOffDate = \"\";\r\n var isDHComplaint = false;\r\n var isDFFHComplaint = false;\r\n var isDHHSComplaint = false;\r\n\r\n var isAuthenticated = function () {\r\n if (window.location.hash.replace(\"#/\", \"\") == \"\")\r\n return false;\r\n // identify department \r\n if (['DH', 'DFFH'].includes(Constants.Url.landing))\r\n return !!adalAuthenticationService.userInfo && adalAuthenticationService.userInfo.isAuthenticated;\r\n else\r\n (window.location.hash.indexOf(\"access_token=\") < 0) && window.location.reload();\r\n }\r\n\r\n var userFullName = function () {\r\n return adalAuthenticationService.userInfo &&\r\n adalAuthenticationService.userInfo.profile &&\r\n adalAuthenticationService.userInfo.profile.name;\r\n }\r\n\r\n var userName = function () {\r\n if (adalAuthenticationService.userInfo &&\r\n adalAuthenticationService.userInfo.profile &&\r\n adalAuthenticationService.userInfo.profile.upn) {\r\n return adalAuthenticationService.userInfo.profile.upn;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n\r\n var isSessionActive = function () {\r\n var isValidSession = true;\r\n var adalError = sessionStorage.getItem(\"adal.error\");\r\n //check status AADSTS50058 which means that A silent sign -in request was sent but no user is signed in.\r\n var adalErrorDescription = sessionStorage.getItem(\"adal.error.description\");\r\n if (adalErrorDescription.startsWith('AADSTS50058') || adalError != '') {\r\n isValidSession = false;\r\n }\r\n\r\n return isValidSession;\r\n }\r\n\r\n var isAdhocSubmissionUser = null;\r\n var adhocId = null;\r\n var isIncidentEditable = true;\r\n var manageIncidentState = Constants.ManageIncidentState.view;\r\n var selectedBulkIncidents = [];\r\n var miFilters = null;\r\n var mFFilters = null;\r\n var mcoFilters = null;\r\n var mcpFilters = null;\r\n var isFollowUpEditable = false;\r\n\r\n var responseInfo = {\r\n access: null,\r\n incidentId: null,\r\n incidentRef: null,\r\n responses: {},\r\n template: null,\r\n versionNumber: null,\r\n lastUpdatedTime: null,\r\n status: null,\r\n statusText: null,\r\n programText: null,\r\n lodgementDate: null,\r\n reportedDate: null,\r\n submittedDate: null,\r\n role: null, // pipe-separated list of roles, e.g.: 'StaffMember|IncidentManager''\r\n captchaResponse: null,\r\n adhocSubmissionId: null,\r\n caseNotes: null,\r\n // adding more for fllowups\r\n //FollowUpType: null,\r\n incidentDate: null,\r\n ComplaintsFormType: null,\r\n ComplaintsFormData: null,\r\n roles: function () {\r\n return (this.role && this.role.split('|')) || [];\r\n },\r\n hasRole: function (roleToFind) {\r\n return this.roles().some(function (element) {\r\n return element === roleToFind;\r\n });\r\n }\r\n };\r\n\r\n var isPartiallyRegisteredUser = function () {\r\n return isAuthenticated() && isNonBusinessUser();\r\n }\r\n\r\n var isFullyRegisteredUser = function () {\r\n return isAuthenticated() && isBusinessUser();\r\n }\r\n\r\n var isBusinessUser = function () {\r\n var roles = responseInfo.roles();\r\n return roles.length > 0 && roles.some(function (element) {\r\n return (element !== Constants.Role.FMS_Admin && element !== Constants.Role.Requestor);\r\n });\r\n };\r\n\r\n var isPublicUser = function () {\r\n var roles = responseInfo.roles();\r\n return roles.length == 1 && roles[0] == Constants.Role.Requestor;\r\n };\r\n\r\n var isNonBusinessUser = function () {\r\n var roles = responseInfo.roles();\r\n return roles.length > 0 && responseInfo.roles().every(function (element) {\r\n return (element === Constants.Role.FMS_Admin || element === Constants.Role.Requestor);\r\n });\r\n };\r\n\r\n var isFmsAdminUser = function () {\r\n return responseInfo.hasRole(Constants.Role.FMS_Admin);\r\n }\r\n\r\n var isRegisteredFmsAdminUser = function (userRoles) {\r\n return userRoles &&\r\n userRoles.length > 0 &&\r\n userRoles.some(function (element) {\r\n return element === Constants.Role.FMS_Admin;\r\n });\r\n }\r\n\r\n var isRegisteredFmsLevel3User = function (userRoles) {\r\n return userRoles &&\r\n userRoles.length > 0 &&\r\n userRoles.some(function (element) {\r\n return element === Constants.Role.FMS_Level3User;\r\n });\r\n }\r\n\r\n var isRegisteredPrivacyUser = function (userRoles) {\r\n return userRoles &&\r\n userRoles.length > 0 &&\r\n userRoles.some(function (element) {\r\n return element === Constants.Role.PrivacyOfficer ||\r\n element === Constants.Role.PrivacyManager ||\r\n element === Constants.Role.IncidentManager ||\r\n element === Constants.Role.Investigator;\r\n });\r\n }\r\n\r\n var isRegisteredComplaintsUser = function (userRoles) {\r\n return userRoles &&\r\n userRoles.length > 0 &&\r\n userRoles.some(function (element) {\r\n return element === Constants.Role.ComplaintsManager ||\r\n element === Constants.Role.ActionOfficer || element === Constants.Role.FMS_ComplaintsAdmin;\r\n });\r\n }\r\n\r\n // Used for saving and concurrency\r\n var saveQueueDeferred = $q.defer();\r\n saveQueueDeferred.resolve();\r\n var endOfSavePromiseChain = saveQueueDeferred.promise;\r\n\r\n // TODO: Enable the tracking code for Google Analytics below once CIMS key is available\r\n\r\n // Google analytics page visit\r\n var trackPageVisitWithGA = function (pageName) {\r\n (function (i, s, o, g, r, a, m) {\r\n i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {\r\n (i[r].q = i[r].q || []).push(arguments)\r\n }, i[r].l = 1 * new Date(); a = s.createElement(o),\r\n m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)\r\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\r\n ga('WOVGprofileNumber.send', 'pageview', (dept + \"/\" + site + document.location.pathname + document.location.search).toLowerCase());\r\n ga('DEPTprofileNumber.send', 'pageview', (site + document.location.pathname + document.location.search).toLowerCase());\r\n ga('SITEprofileNumber.send', 'pageview', (document.location.pathname + document.location.search + document.location.hash).toLowerCase());\r\n };\r\n\r\n // Google analytics event\r\n var trackEventsWithGA = function (category, action, label) {\r\n ga('SITEprofileNumber.send', 'event', {\r\n eventCategory: category,\r\n eventAction: action,\r\n eventLabel: label\r\n });\r\n };\r\n\r\n // this function gets the config data from the server for the specified template\r\n var getConfiguration = function (template, versionNumber, incidentId, useSecured) {\r\n\r\n var requestData = { template: template, versionNumber: versionNumber, incidentId: incidentId, directSubmission: this.isAdhocSubmissionUser, directSubmissionId: this.adhocId };\r\n\r\n //get the request url from the getConfigDataURL div in _Layout file\r\n //var baseUrl = $('#getConfigDataURL').data('request-url');\r\n var baseUrl = Constants.Url.getConfigDataURL;\r\n if (!useSecured)\r\n baseUrl = Constants.Url.getConfigDataPublicURL;\r\n\r\n var url = baseUrl;\r\n return $http({\r\n method: 'POST',\r\n url: url,\r\n data: angular.toJson(requestData),\r\n headers: { 'Content-Type': 'application/json' }\r\n }).then(function (response) {\r\n this.configData = response.data.configData;\r\n this.configData[response.data.configData.template] = response.data.configData;\r\n return response.data;\r\n });\r\n }\r\n\r\n var getConfigurationUsingCache = function (template, versionNumber, incidentId, useSecured) {\r\n var logMessagePrefix = (new Date()).toString() +\r\n ': DataServices.getConfigurationUsingCache' +\r\n '(template = ' + template + ', versionNumber = ' + versionNumber + ', incidentId = ' + incidentId + ', useSecured = ' + useSecured + ') - ';\r\n console.log(logMessagePrefix + 'CALLING...');\r\n var deferred = $q.defer();\r\n var config = this.getCachedConfigData(template);\r\n if (config) {\r\n console.log(logMessagePrefix + 'SUCCESS (got result from client cache)');\r\n deferred.resolve(config);\r\n } else {\r\n console.log(logMessagePrefix + 'CACHE IS EMPTY: calling DataServices.getConfiguration');\r\n var that = this;\r\n this.getConfiguration(template, versionNumber, incidentId, useSecured)\r\n .then(function (response) {\r\n console.log(logMessagePrefix + 'SUCCESS (got result from server API call)');\r\n that.pushConfigData(response.configData, template, response.versionNumber, response.role);\r\n var config = that.getCachedConfigData(template);\r\n deferred.resolve(config);\r\n }, function (data) {\r\n console.log(logMessagePrefix + 'FAILURE (data = \"' + JSON.stringify(data) + '\")');\r\n deferred.reject(data);\r\n });\r\n }\r\n return deferred.promise;\r\n }\r\n\r\n var getUserInfoData = function () {\r\n var baseUrl = Constants.Url.getUserProfileData;\r\n\r\n var url = baseUrl;\r\n return $http({\r\n method: 'POST',\r\n url: url,\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n }\r\n\r\n var getUserProfileInfoUsingCache = function () {\r\n var deferred = $q.defer();\r\n\r\n var config = this.getUserInfoDataFromCache(this.userName());\r\n if (config) {\r\n deferred.resolve(config);\r\n }\r\n else {\r\n var that = this;\r\n this.getUserInfoData()\r\n .then(function (response) {\r\n that.pushUserInfoDataToCache(response.data);\r\n var config = that.getUserInfoDataFromCache();\r\n deferred.resolve(config);\r\n }, function (data) {\r\n deferred.reject(data);\r\n });\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n var getApplicationLastUpdateDate = function () {\r\n var url = Constants.Url.getApplicationLastUpdateDateURL;\r\n return $http({\r\n method: 'POST',\r\n url: url\r\n }).then(function (response) {\r\n return new Date(response.data.value);\r\n });\r\n }\r\n\r\n var getFeedbackAssignees = function (feedbackId, IsDHVisible) {\r\n return $http({\r\n method: 'POST',\r\n url: Constants.Url.getFeedbackAssigneesURL(feedbackId, IsDHVisible),\r\n headers: { 'Content-Type': 'application/json' }\r\n })\r\n .then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n var getFeedbacks = function (requestData) {\r\n return $http({\r\n method: 'POST',\r\n data: angular.toJson(requestData),\r\n url: Constants.Url.getFeedbacksURL,\r\n headers: { 'Content-Type': 'application/json' }\r\n })\r\n .then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n var getFeedbackById = function (feedbackId) {\r\n return $http({\r\n method: 'POST',\r\n url: Constants.Url.getFeedbackByIdURL(feedbackId),\r\n headers: { 'Content-Type': 'application/json' }\r\n })\r\n .then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n var getLinkableFeedbacks = function (feedbackId) {\r\n return $http({\r\n method: 'POST',\r\n url: Constants.Url.getLinkableFeedbacksURL(feedbackId),\r\n headers: { 'Content-Type': 'application/json' }\r\n })\r\n .then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n var saveFeedbackLink = function (requestData) {\r\n return $http({\r\n method: 'POST',\r\n data: angular.toJson(requestData),\r\n url: Constants.Url.saveFeedbackLinkURL,\r\n headers: { 'Content-Type': 'application/json' }\r\n })\r\n .then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n var removeFeedbackLink = function (requestData) {\r\n return $http({\r\n method: 'POST',\r\n data: angular.toJson(requestData),\r\n url: Constants.Url.removeFeedbackLinkURL,\r\n headers: { 'Content-Type': 'application/json' }\r\n })\r\n .then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n var assignFeedback = function (requestData) {\r\n return $http({\r\n method: 'POST',\r\n data: angular.toJson(requestData),\r\n url: Constants.Url.assignFeedbackURL,\r\n headers: { 'Content-Type': 'application/json' }\r\n })\r\n .then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n // this function deletes the document\r\n var deleteDocument = function (documentId) {\r\n var url = \"\";\r\n if (isAuthenticated()) {\r\n url = Constants.Url.getDeleteDocumentURL;\r\n } else {\r\n url = Constants.Url.getPublicDeleteDocumentURL;\r\n }\r\n\r\n return $http({\r\n method: 'POST',\r\n url: url,\r\n data: angular.toJson({ documentId: documentId }),\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n }\r\n\r\n // this function allows to view the uploaded document\r\n var viewDocument = function (documentId) {\r\n var url = \"\";\r\n if (isAuthenticated()) {\r\n url = Constants.Url.getGetDocumentURL;\r\n } else {\r\n url = Constants.Url.getPublicGetDocumentURL;\r\n }\r\n\r\n return $http({\r\n method: 'POST',\r\n url: url,\r\n data: angular.toJson({ documentId: documentId }),\r\n headers: { 'Content-Type': 'application/json' },\r\n responseType: 'arraybuffer'\r\n });\r\n }\r\n\r\n var viewIncidentPdf = function (feedBackid) {\r\n\r\n return $http({\r\n method: 'POST',\r\n url: Constants.Url.getFeedbackPdf(feedBackid),\r\n headers: { 'Content-Type': 'application/json' },\r\n responseType: 'arraybuffer'\r\n });\r\n }\r\n\r\n var viewAllFormsPdf = function (feedBackid) {\r\n\r\n return $http({\r\n method: 'POST',\r\n url: Constants.Url.getAllFormsPdf(feedBackid),\r\n headers: { 'Content-Type': 'application/json' },\r\n responseType: 'arraybuffer'\r\n });\r\n }\r\n\r\n\r\n var viewComplaintsRegisteredPdf = function (feedBackid) {\r\n\r\n return $http({\r\n method: 'POST',\r\n url: Constants.Url.getComplaintsRegisteredPdf(feedBackid),\r\n headers: { 'Content-Type': 'application/json' },\r\n responseType: 'arraybuffer'\r\n });\r\n }\r\n\r\n var viewComplaintsUnRegisteredPdf = function (feedBackid) {\r\n var link = Constants.Url.getComplaintsUnRegisteredPdf(feedBackid);\r\n\r\n return $http({\r\n method: 'POST',\r\n url: link,\r\n headers: { 'Content-Type': 'application/json' },\r\n responseType: 'arraybuffer'\r\n });\r\n }\r\n\r\n\r\n var viewComplaintsAllFormsPdf = function (feedBackid) {\r\n\r\n return $http({\r\n method: 'POST',\r\n url: Constants.Url.getComplaintsAllFormsPdf(feedBackid),\r\n headers: { 'Content-Type': 'application/json' },\r\n responseType: 'arraybuffer'\r\n });\r\n }\r\n\r\n\r\n\r\n // Saves the client incident for registered users\r\n var saveIncidentRegisteredUser = function (feedbackType, isDHVisible, isAfterCutOffDate) {\r\n var url = Constants.Url.getSaveIncidentRegisteredUserURL;\r\n\r\n var requestData = {\r\n \"Response\": angular.toJson(responseInfo.responses),\r\n \"Template\": responseInfo.template,\r\n \"FeedbackType\": feedbackType,\r\n \"TemplateVersion\": JSON.stringify(responseInfo.versionNumber),\r\n \"Ref\": responseInfo.incidentRef,\r\n \"Id\": responseInfo.incidentId,\r\n \"ModifiedDate\": responseInfo.lastUpdatedTime,\r\n \"statusText\": responseInfo.statusText,\r\n \"isDHVisible\": isDHVisible,\r\n \"isAfterCutOffDate\": isAfterCutOffDate\r\n };\r\n\r\n return $http({\r\n method: 'POST',\r\n url: url,\r\n data: angular.toJson(requestData),\r\n headers: { 'Content-Type': 'application/json' }\r\n }).then(function (response) {\r\n if (response && response.data && response.data.id) {\r\n with (dataService) {\r\n responseInfo.incidentId = response.data.id;\r\n responseInfo.incidentRef = response.data.ref;\r\n responseInfo.lastUpdatedTime = response.data.allocatedLastUpdatedTime\r\n }\r\n\r\n return response;\r\n }\r\n });\r\n }\r\n\r\n // Save incident in draft mode for document upload\r\n var saveIncidentForDocumentUpload = function (isDHVisible) {\r\n\r\n var url = \"\";\r\n if (isAuthenticated()) {\r\n url = Constants.Url.getSaveIncidentForDocumentUploadURL;\r\n } else {\r\n url = Constants.Url.getPublicSaveIncidentForDocumentUploadURL;\r\n }\r\n\r\n var requestData = {\r\n \"Response\": angular.toJson(responseInfo.responses),\r\n \"Template\": responseInfo.template,\r\n \"TemplateVersion\": JSON.stringify(responseInfo.versionNumber),\r\n \"Ref\": responseInfo.incidentRef,\r\n \"Id\": responseInfo.incidentId,\r\n \"ModifiedDate\": responseInfo.lastUpdatedTime,\r\n \"statusText\": responseInfo.statusText,\r\n \"isDHVisible\": isDHVisible\r\n }\r\n\r\n return $http({\r\n method: 'POST',\r\n url: url,\r\n data: angular.toJson(requestData),\r\n headers: { 'Content-Type': 'application/json' }\r\n }).then(\r\n function (response) {\r\n if (response && response.data && response.data.id) {\r\n responseInfo.incidentId = response.data.id;\r\n responseInfo.incidentRef = response.data.ref;\r\n responseInfo.lastUpdatedTime = response.data.allocatedLastUpdatedTime\r\n }\r\n return response;\r\n });\r\n }\r\n\r\n // Submit the client incident\r\n var submitIncident = function (feedbackType, isDHVisible, isAfterCutOffDate) {\r\n\r\n // different end points depending upon if requestred or not\r\n if (isAuthenticated()) {\r\n url = Constants.Url.getSubmitIncidentRegisteredUserURL;\r\n } else {\r\n url = Constants.Url.getSubmitIncidentURL;\r\n }\r\n\r\n var requestData = {\r\n \"Response\": angular.toJson(responseInfo.responses),\r\n \"FeedbackType\": feedbackType,\r\n \"Template\": responseInfo.template,\r\n \"TemplateVersion\": JSON.stringify(responseInfo.versionNumber),\r\n \"Ref\": responseInfo.incidentRef,\r\n \"Id\": responseInfo.incidentId,\r\n \"ModifiedDate\": responseInfo.lastUpdatedTime,\r\n \"statusText\": responseInfo.statusText,\r\n \"isDHVisible\": isDHVisible,\r\n \"isAfterCutOffDate\": isAfterCutOffDate\r\n }\r\n\r\n return $http({\r\n method: 'POST',\r\n url: url,\r\n data: angular.toJson(requestData),\r\n headers: { 'Content-Type': 'application/json' }\r\n }).then(\r\n function (response) {\r\n // Ensure that incidentIds allocated as the result of a save are\r\n // recorded correctly in client-side state.\r\n with (dataService) {\r\n if (response && response.data && response.data.id) {\r\n responseInfo.incidentId = response.data.id;\r\n responseInfo.incidentRef = response.data.ref;\r\n responseInfo.lastUpdatedTime = response.data.allocatedLastUpdatedTime;\r\n }\r\n }\r\n return response;\r\n });\r\n }\r\n\r\n // Returns the response and config for a specific follow up action.\r\n var getFollowUpResponseAndConfig = function (followUpId, feedbackTypeId) {\r\n var url = Constants.Url.getFollowUpResponseAndConfigURL;\r\n var requestData = {\r\n \"id\": followUpId,\r\n feedbackTypeId: feedbackTypeId\r\n };\r\n return $http({\r\n method: 'POST',\r\n url: url,\r\n data: angular.toJson(requestData),\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n }\r\n\r\n var updateFeedbackStatus = function (feedbackType) {\r\n var url = Constants.Url.geUpdateFeedbackStatusUpURL;\r\n var requestData = {\r\n \"Ref\": responseInfo.incidentRef,\r\n \"Id\": responseInfo.incidentId,\r\n \"FeedbackType\": feedbackType,\r\n \"ModifiedDate\": responseInfo.lastUpdatedTime\r\n };\r\n\r\n return $http({\r\n method: 'POST',\r\n url: url,\r\n data: requestData,\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n }\r\n\r\n var saveFollowUp = function (feedbackType) {\r\n var url = Constants.Url.getSaveFollowUpURL;\r\n var requestData = {\r\n \"Id\": responseInfo.followUpId,\r\n \"FeedbackId\": responseInfo.incidentId,\r\n \"FeedbackType\": feedbackType,\r\n \"Response\": angular.toJson(responseInfo.responses),\r\n \"Template\": responseInfo.template,\r\n \"TemplateVersion\": JSON.stringify(responseInfo.versionNumber),\r\n \"FollowUpVersionNo\": JSON.stringify(responseInfo.followUpVersionNumber),\r\n \"ModifiedDate\": responseInfo.lastUpdatedTime\r\n }\r\n\r\n return $http({\r\n method: 'POST',\r\n url: url,\r\n data: angular.toJson(requestData),\r\n headers: { 'Content-Type': 'application/json' }\r\n }).then(\r\n function (response) {\r\n responseInfo.followUpId = response.data.id;\r\n //update \r\n var deferred = $q.defer();\r\n updateFeedbackStatus(feedbackType)\r\n .finally(function () {\r\n deferred.resolve(response); // we need the original response to be returned by the promise!\r\n });\r\n return deferred.promise;\r\n }\r\n );\r\n }\r\n\r\n var submitFollowUp = function (feedbackType) {\r\n var url = Constants.Url.getSubmitSubmitFollowUpURL;\r\n var requestData = {\r\n \"Id\": responseInfo.followUpId,\r\n \"FeedbackId\": responseInfo.incidentId,\r\n \"FeedbackType\": feedbackType,\r\n \"Response\": angular.toJson(responseInfo.responses),\r\n \"Template\": responseInfo.template,\r\n \"TemplateVersion\": JSON.stringify(responseInfo.versionNumber),\r\n \"FollowUpVersionNo\": JSON.stringify(responseInfo.followUpVersionNumber),\r\n \"ModifiedDate\": responseInfo.lastUpdatedTime\r\n }\r\n\r\n var httpPromise = $http({\r\n method: 'POST',\r\n url: url,\r\n data: angular.toJson(requestData),\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n\r\n httpPromise.then(\r\n function (response) {\r\n responseInfo.followUpId = response.data.id;\r\n //update \r\n var deferred = $q.defer();\r\n updateFeedbackStatus(feedbackType)\r\n .finally(function () {\r\n deferred.resolve(response); // we need the original response to be returned by the promise!\r\n });\r\n return deferred.promise;\r\n }\r\n );\r\n\r\n return httpPromise;\r\n }\r\n\r\n // Returns a summary of all the followup actions for an incident.\r\n var getFollowUpSummaryResponseAndConfig = function (feedbackTypeId, coordinationType) {\r\n var url = Constants.Url.getFollowUpSummaryResponseAndConfigURL;\r\n\r\n var requestData = {\r\n \"id\": responseInfo.incidentId,\r\n feedbackTypeId: feedbackTypeId,\r\n \"FormConfigurationTemplateOptions\": coordinationType\r\n };\r\n return $http({\r\n method: 'POST',\r\n url: url,\r\n data: angular.toJson(requestData),\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n }\r\n\r\n var saveFeedbackCaseNotes = function () {\r\n var url = Constants.Url.getSaveFeedbackCaseNotesURL;\r\n\r\n var requestData = {\r\n \"Response\": angular.toJson(responseInfo.responses),\r\n \"FeedbackId\": responseInfo.incidentId\r\n };\r\n\r\n return $http({\r\n method: 'POST',\r\n url: url,\r\n data: angular.toJson(requestData),\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n }\r\n\r\n // Sets the incident status to withdrawn for the supplied incident Id\r\n var withdrawFeedback = function (incidentId, withdrawReason, lastUpdatedTime) {\r\n var url = Constants.Url.getWithdrawFeedbackURL;\r\n var data = {\r\n FeedbackId: incidentId,\r\n WithdrawalReason: withdrawReason,\r\n LastUpdatedTime: lastUpdatedTime ? lastUpdatedTime : responseInfo.lastUpdatedTime\r\n };\r\n return $http({\r\n method: 'POST',\r\n url: url,\r\n data: JSON.stringify(data),\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n }\r\n\r\n\r\n var getFeedbackHistory = function (historyType) {\r\n\r\n var url = Constants.Url.getFeedbackHistoryURL;\r\n var data = {\r\n FeedbackId: responseInfo.feedbackId,\r\n RetrieveType: historyType\r\n };\r\n\r\n return $http({\r\n method: 'POST',\r\n url: url,\r\n data: JSON.stringify(data),\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n }\r\n\r\n var getComplainsFeedbackUnRegistered = function (feedBackid) {\r\n return $http({\r\n method: 'POST',\r\n url: Constants.Url.getComplaintsFeedbackUnRegistered(feedBackid),\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n }\r\n\r\n // this function validates the date\r\n var validDateCheck = function (dateVal, minYear) {\r\n var dateMoment = moment(dateVal, 'YYYY-MM-DD', true);\r\n return (dateMoment.isValid() && dateMoment.isSameOrAfter(minYear + '-01-01'));\r\n }\r\n\r\n // resets the responseInfo object\r\n var resetResponseInfo = function () {\r\n responseInfo.access = null;\r\n responseInfo.incidentId = null;\r\n responseInfo.incidentRef = null;\r\n responseInfo.feedbackId = null;\r\n responseInfo.ref = null;\r\n responseInfo.incidentDate = null;\r\n responseInfo.responses = null;\r\n responseInfo.versionNumber = null;\r\n responseInfo.lastUpdatedTime = null;\r\n responseInfo.status = null;\r\n responseInfo.statusText = null;\r\n responseInfo.programText = null;\r\n responseInfo.lodgementDate = null;\r\n responseInfo.reportedDate = null;\r\n responseInfo.submittedDate = null;\r\n responseInfo.role = null;\r\n responseInfo.captchaResponse = null;\r\n responseInfo.userId = null;\r\n responseInfo.adhocSubmissionId = null;\r\n responseInfo.createdBy = null;\r\n\r\n }\r\n\r\n // Determines which pages are considered validated by looking at the pages in the response\r\n var determineValidatedPages = function (response) {\r\n var responseJsonObj = angular.fromJson(response);\r\n\r\n var validatedPages = [];\r\n for (var key in responseJsonObj) {\r\n validatedPages.push(key);\r\n }\r\n\r\n return validatedPages;\r\n }\r\n\r\n // retrieves config data from cache\r\n var getCachedConfigData = function (template) {\r\n var config = this.cacheConfigData[template];\r\n if (config) {\r\n this.configData = config.configData;\r\n this.configData[template] = config.configData;\r\n this.responseInfo.template = config.template;\r\n this.responseInfo.versionNumber = config.versionNumber;\r\n this.responseInfo.role = config.role;\r\n return this.cacheConfigData[template];\r\n }\r\n return null;\r\n }\r\n\r\n // Push config data in to cache\r\n var pushConfigData = function (configData, template, versionNumber, role) {\r\n this.configData = configData;\r\n this.configData[template] = configData;\r\n this.responseInfo.template = template;\r\n this.responseInfo.versionNumber = versionNumber;\r\n this.responseInfo.role = role;\r\n\r\n // Overwrite if config already exists, otherwise this will add.\r\n this.cacheConfigData[template] = {\r\n configData: configData,\r\n versionNumber: versionNumber,\r\n role: role,\r\n template: template\r\n }\r\n }\r\n\r\n var getUserInfoDataFromCache = function () {\r\n if (this.userName()) {\r\n var config = this.cacheConfigData[userName()];\r\n if (config) {\r\n return this.cacheConfigData[userName()];\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n // Push config data in to cache\r\n var pushUserInfoDataToCache = function (data) {\r\n if (this.userName()) {\r\n this.cacheConfigData[userName()] = data;\r\n }\r\n }\r\n\r\n var navigateToAdminFmsSite = function () {\r\n if (window.location.href.indexOf(\"DH\") > -1) {\r\n window.location.href = __env.fmsAdminAppBaseUrl + '#/DH';\r\n }\r\n else {\r\n window.location.href = __env.fmsAdminAppBaseUrl + '#/DFFH';\r\n }\r\n }\r\n\r\n var getDocumentTemplates = function () {\r\n return $http({\r\n method: 'POST',\r\n url: Constants.Url.getGetDocumentTemplatesURL,\r\n headers: { 'Content-Type': 'application/json' }\r\n })\r\n .then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n var getDocumentTemplateFile = function (documentTemplateId) {\r\n return $http({\r\n method: 'GET',\r\n url: Constants.Url.getGetDocumentTemplateFileURL(documentTemplateId),\r\n headers: { 'Content-Type': 'application/json' },\r\n responseType: 'arraybuffer'\r\n })\r\n .then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n\r\n var reOpenFeedback = function (feedbackId, lastUpdatedTime) {\r\n var url = Constants.Url.getReOpenFeedbackURL;\r\n var data = {\r\n FeedbackId: feedbackId,\r\n LastUpdatedTime: lastUpdatedTime ? lastUpdatedTime : responseInfo.lastUpdatedTime\r\n };\r\n return $http({\r\n method: 'POST',\r\n url: url,\r\n data: JSON.stringify(data),\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n }\r\n\r\n var deleteFeedback = function (feedbackId, lastUpdatedTime) {\r\n var url = Constants.Url.deleteFeedbackURL;\r\n var data = {\r\n FeedbackId: feedbackId,\r\n LastUpdatedTime: lastUpdatedTime ? lastUpdatedTime : responseInfo.lastUpdatedTime\r\n };\r\n return $http({\r\n method: 'DELETE',\r\n url: url,\r\n data: JSON.stringify(data),\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n }\r\n\r\n var setAnonymousDetails = function (complainantDetails,isAnonymous) {\r\n if (complainantDetails !== undefined && complainantDetails !== null) {\r\n //Firstname, Lastname\r\n complainantDetails[\"rDFirstName\"] = isAnonymous? \"Anonymous\":\"\";\r\n complainantDetails[\"rDLastName\"] = isAnonymous ? \"Anonymous\" : \"\";\r\n\r\n //DOB fields\r\n complainantDetails[\"rDDOB\"] = isAnonymous ? \"1900-01-01\" : \"\";\r\n complainantDetails[\"rDDOB-day\"] = isAnonymous ? \"01\" : \"\" ;\r\n complainantDetails[\"rDDOB-month\"] = isAnonymous ? \"01\" : \"\" ;\r\n complainantDetails[\"rDDOB-year\"] = isAnonymous ? \"1900\" : \"\" ;\r\n\r\n //address fields\r\n if (isAnonymous) {\r\n complainantDetails[\"rDAddress\"] = \"50 Lonsdale Street, Melbourne VIC, Australia\";\r\n complainantDetails[\"rDAddress-autoPostCode\"] = \"3000\";\r\n complainantDetails[\"rDAddress-autoState\"] = \"Victoria\";\r\n complainantDetails[\"rDAddress-autoStreetNumberName\"] = \"50 Lonsdale Street\";\r\n complainantDetails[\"rDAddress-autoSuburb\"] = \"Melbourne\";\r\n complainantDetails[\"rDAddress-lga\"] = \"Local Council\";\r\n complainantDetails[\"rDAddress-stateCode\"] = \"VIC\";\r\n complainantDetails[\"rDAddress-valid\"] = true;\r\n }\r\n }\r\n return complainantDetails;\r\n }\r\n\r\n var getLocalCouncilDetailsFromAddress = function (stateCode, lga) {\r\n if (stateCode !== undefined) {\r\n var localCouncilDetails = undefined;\r\n if (stateCode === \"VIC\") {\r\n localCouncilDetails = getLocalCouncilDetails(lga);\r\n if (localCouncilDetails !== undefined) {\r\n return { code: localCouncilDetails.code, text: localCouncilDetails.text };\r\n }\r\n else {\r\n localCouncilDetails = getLocalCouncilDetails(\"Local Council\");\r\n return { code: localCouncilDetails.code, text: localCouncilDetails.text };\r\n }\r\n } else {\r\n if (stateCode === \"Local Council\") {\r\n localCouncilDetails = getLocalCouncilDetails(\"Local Council\");\r\n }\r\n else {\r\n\r\n localCouncilDetails = getLocalCouncilDetails(\"Interstate\");\r\n }\r\n return { code: localCouncilDetails.code, text: localCouncilDetails.text };\r\n }\r\n }\r\n else {\r\n return { code: undefined, text: '' };\r\n }\r\n }\r\n\r\n function getLocalCouncilDetails(localCouncil) {\r\n //Getting the config data for templates 7(UnRegistered) and 11(Registered) \r\n var config = cacheConfigData[7] || cacheConfigData[11];\r\n var matchedLga = config.configData.optionSets\r\n .localgovernmentarea\r\n .filter(function (item) { return item.text === localCouncil; });\r\n if (matchedLga.length > 0) {\r\n return matchedLga[0];\r\n }\r\n }\r\n\r\n var extractCsv = function (dateRangeId, feedbackType, isDOH) {\r\n return $http({\r\n method: 'POST',\r\n url: Constants.Url.getCsvExtractUrl,\r\n data: JSON.stringify({ \"dateRangeId\": dateRangeId, 'feedbackTypeId': feedbackType, 'isDOH': isDOH }),\r\n headers: { 'Content-Type': 'application/json', 'Accept': 'text/csv' }\r\n });\r\n }\r\n\r\n var toggleFeedbackSensitivity = function (feedbackId,isSensitive , lastUpdatedTime) {\r\n var url = Constants.Url.toggleFeedbackSensitivityURL;\r\n var data = {\r\n FeedbackId: feedbackId,\r\n IsSensitive: isSensitive,\r\n LastUpdatedTime: lastUpdatedTime ? lastUpdatedTime : responseInfo.lastUpdatedTime\r\n };\r\n return $http({\r\n method: 'POST',\r\n url: url,\r\n data: JSON.stringify(data),\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n }\r\n\r\n return {\r\n getLocalCouncilFromAddress: getLocalCouncilDetailsFromAddress,\r\n getConfiguration: getConfiguration,\r\n getUserInfoData: getUserInfoData,\r\n getUserProfileInfoUsingCache: getUserProfileInfoUsingCache,\r\n getConfigurationUsingCache: getConfigurationUsingCache,\r\n getApplicationLastUpdateDate: getApplicationLastUpdateDate,\r\n configData: null,\r\n locationData: null,\r\n sessionId: null,\r\n documentTypes: null,\r\n getFeedbackAssignees: getFeedbackAssignees,\r\n getFeedbacks: getFeedbacks,\r\n getFeedbackById: getFeedbackById,\r\n assignFeedback: assignFeedback,\r\n getLinkableFeedbacks: getLinkableFeedbacks,\r\n saveFeedbackLink: saveFeedbackLink,\r\n removeFeedbackLink: removeFeedbackLink,\r\n deleteDocument: deleteDocument,\r\n viewDocument: viewDocument,\r\n validationErrors: [],\r\n validatedPages: validatedPages,\r\n saveIncidentForDocumentUpload: saveIncidentForDocumentUpload,\r\n submitIncident: submitIncident,\r\n trackPageVisitWithGA: trackPageVisitWithGA,\r\n trackEventsWithGA: trackEventsWithGA,\r\n responseInfo: responseInfo,\r\n canAccessConfirmation: false,\r\n canAccessConsent: false,\r\n shadowResponse: shadowResponse,\r\n programOriginalResponse: programOriginalResponse,\r\n programRegisteredOriginalResponse: programRegisteredOriginalResponse,\r\n navigationTabsResponse: navigationTabsResponse,\r\n navigationTabsOriginalResponse: navigationTabsOriginalResponse,\r\n orgNameResponse: orgNameResponse,\r\n orgNameOriginalResponse: orgNameOriginalResponse,\r\n cutOffDate: cutOffDate,\r\n cacheConfigData: cacheConfigData,\r\n incidentSubmitted: false,\r\n determineValidatedPages: determineValidatedPages,\r\n previousPage: previousPage,\r\n getCachedConfigData: getCachedConfigData,\r\n pushConfigData: pushConfigData,\r\n getUserInfoDataFromCache: getUserInfoDataFromCache,\r\n pushUserInfoDataToCache: pushUserInfoDataToCache,\r\n saveIncidentRegisteredUser: saveIncidentRegisteredUser,\r\n isAuthenticated: isAuthenticated,\r\n userFullName: userFullName,\r\n userName: userName,\r\n isSessionActive: isSessionActive,\r\n isPartiallyRegisteredUser: isPartiallyRegisteredUser,\r\n isFullyRegisteredUser: isFullyRegisteredUser,\r\n isBusinessUser: isBusinessUser,\r\n isPublicUser: isPublicUser,\r\n isNonBusinessUser: isNonBusinessUser,\r\n isFmsAdminUser: isFmsAdminUser,\r\n isRegisteredFmsAdminUser: isRegisteredFmsAdminUser,\r\n isRegisteredFmsLevel3User: isRegisteredFmsLevel3User,\r\n isRegisteredPrivacyUser: isRegisteredPrivacyUser,\r\n isRegisteredComplaintsUser: isRegisteredComplaintsUser,\r\n withdrawFeedback: withdrawFeedback,\r\n isAdhocSubmissionUser: isAdhocSubmissionUser,\r\n adhocId: adhocId,\r\n isIncidentEditable: isIncidentEditable,\r\n manageIncidentState: manageIncidentState,\r\n selectedBulkIncidents: selectedBulkIncidents,\r\n miFilters: miFilters,\r\n mFFilters: mFFilters,\r\n mcoFilters: mcoFilters,\r\n mcpFilters: mcpFilters,\r\n resetResponseInfo: resetResponseInfo,\r\n getFollowUpSummaryResponseAndConfig: getFollowUpSummaryResponseAndConfig,\r\n saveFeedbackCaseNotes: saveFeedbackCaseNotes,\r\n getFollowUpResponseAndConfig: getFollowUpResponseAndConfig,\r\n submitFollowUp: submitFollowUp,\r\n saveFollowUp: saveFollowUp,\r\n viewIncidentPdf: viewIncidentPdf,\r\n viewAllFormsPdf: viewAllFormsPdf,\r\n viewComplaintsRegisteredPdf: viewComplaintsRegisteredPdf,\r\n viewComplaintsUnRegisteredPdf: viewComplaintsUnRegisteredPdf,\r\n viewComplaintsAllFormsPdf: viewComplaintsAllFormsPdf,\r\n navigateToAdminFmsSite: navigateToAdminFmsSite,\r\n getFeedbackHistory: getFeedbackHistory,\r\n getComplainsFeedbackUnRegistered: getComplainsFeedbackUnRegistered,\r\n getDocumentTemplates: getDocumentTemplates,\r\n getDocumentTemplateFile: getDocumentTemplateFile,\r\n reOpenFeedback: reOpenFeedback,\r\n deleteFeedback: deleteFeedback,\r\n setAnonymousDetails: setAnonymousDetails,\r\n extractCsv: extractCsv,\r\n toggleFeedbackSensitivity: toggleFeedbackSensitivity\r\n };\r\n };\r\n\r\n //Get the formApp module\r\n var formApp = angular.module('formApp');\r\n //Register this service with the formApp module\r\n formApp.factory('DataServices', ['$http', '$window', '$log', '$q', '$timeout', '$rootScope', 'Constants', 'adalAuthenticationService', dataService]);\r\n}());","(function () {\r\n // \"use strict\" <-- basically, we should enable this option always as a best practice, but because of (such as LOC:390)\r\n //Service code here\r\n //Get the formApp module\r\n angular.module('formApp')\r\n //Register this service with the formApp module\r\n .factory('UtilityServices', ['$http', '$log', '$location', '$filter', '$uibModal', '$timeout', '$interpolate', '$rootScope', 'DataServices', 'Constants', '$q', 'adalAuthenticationService',\r\n\r\n // all the utility function in the project are resided in this service so that we can reuse them any where in the project\r\n function ($http, $log, $location, $filter, $uibModal, $timeout, $interpolate, $rootScope, DataServices, Constants, $q, adalAuthenticationService) {\r\n\r\n var utility = {};\r\n\r\n utility.featureNotImplemented = function () {\r\n alert('Feature not implemented yet');\r\n throw new Error('Feature not implemented yet');\r\n };\r\n\r\n //Sets visibility of an element. True = visible, False = hidden. Using Jquery here to support IE9.\r\n utility.toggleClass = function (target, remove, className) {\r\n if (target) {\r\n if (remove) {\r\n target.removeClass(className);\r\n } else {\r\n target.addClass(className);\r\n }\r\n }\r\n }\r\n\r\n utility.setElementVisibility = function (id, show) {\r\n utility.toggleClass($('#' + id), show, 'hidden');\r\n };\r\n\r\n utility.hideMenu = function () {\r\n utility.setElementVisibility('manageFeedbacks', false);\r\n utility.setElementVisibility('manageComplaints', false);\r\n utility.setElementVisibility('tools', false);\r\n utility.setElementVisibility('fmsAdminSite', false);\r\n };\r\n\r\n utility.setMenuVisibility = function () {\r\n if (DataServices.isAuthenticated()) {\r\n DataServices.getUserProfileInfoUsingCache()\r\n .then(function (userInfo) {\r\n var isPrivacyUser = DataServices.isRegisteredPrivacyUser(userInfo.roles);\r\n var isComplaintsUser = DataServices.isRegisteredComplaintsUser(userInfo.roles);\r\n var isAdminUser = DataServices.isRegisteredFmsAdminUser(userInfo.roles);\r\n\r\n utility.setElementVisibility('manageFeedbacks', isPrivacyUser);\r\n utility.setElementVisibility('manageComplaints', isComplaintsUser);\r\n utility.setElementVisibility('tools', isPrivacyUser || isComplaintsUser);\r\n utility.setElementVisibility('fmsAdminSite', isAdminUser);\r\n }, function (data) {\r\n utility.hideMenu();\r\n });\r\n }\r\n else {\r\n utility.hideMenu();\r\n }\r\n };\r\n\r\n //Sets visibility of an element. True = visible, False = hidden. Using Jquery here to support IE9.\r\n\r\n utility.handleSessionTimeOut = function () {\r\n utility.openPopup('sessionTimeout').result.then(function () {\r\n sessionStorage.clear();\r\n adalAuthenticationService.login();\r\n });\r\n };\r\n\r\n utility.showNotification = function (visible, notifcationCode, params, returnAsPromise) {\r\n var deferred = $q.defer();\r\n\r\n var notification = $filter('filter')(DataServices.configData.notifications, { code: notifcationCode }, true);\r\n //If notification message is not found, searching in angular constants \r\n if (notification === undefined || notification === null || notification.length == 0) {\r\n if (Constants.Notification[notifcationCode] !== null && Constants.Notification[notifcationCode] !== undefined) {\r\n notification = new Array();\r\n notification.push(Constants.Notification[notifcationCode]);\r\n }\r\n }\r\n\r\n if (notification && notification[0]) {\r\n var notifyType = null;\r\n if (notification[0].type === 'error') {\r\n notifyType = Constants.NotifyType.error;\r\n deferred.reject();\r\n } else {\r\n deferred.resolve();\r\n }\r\n\r\n if (notification[0].type === 'notification') {\r\n notifyType = Constants.NotifyType.notification;\r\n }\r\n var message = null;\r\n if (params) {\r\n message = $interpolate(notification[0].message)(params);\r\n } else {\r\n message = notification[0].message;\r\n }\r\n if (notifyType && message) {\r\n var target = $('#notify');\r\n if (target) {\r\n if (visible) {\r\n target.find('span').removeClass().addClass(notifyType.css).find(':nth-child(1)').attr('xlink:href', notifyType.icon).next().html(message);\r\n target.removeClass('hidden');\r\n } else {\r\n target.addClass('hidden');\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (returnAsPromise) {\r\n return deferred.promise;\r\n }\r\n };\r\n\r\n // Sets the tags necessary to indicate a question is in error. Using Jquery here to support IE9.\r\n utility.setQuestionErrorState = function (id, status) {\r\n var input = $('#' + id);\r\n var input2;\r\n var input3;\r\n if ($('#' + id + '-month')) {\r\n input2 = $('#' + id + '-month');\r\n input3 = $('#' + id + '-year');\r\n }\r\n var fieldset = $('#' + id + '-fieldset');\r\n if (input && fieldset) {\r\n if (status === true) {\r\n fieldset.addClass('has-error');\r\n input.attr('aria-invalid', status);\r\n input.attr('aria-describedby', id + '-error');\r\n if (input2 && input3) {\r\n input2.attr('aria-invalid', status);\r\n input2.attr('aria-describedby', id + '-error');\r\n input3.attr('aria-invalid', status);\r\n input3.attr('aria-describedby', id + '-error');\r\n }\r\n }\r\n else {\r\n fieldset.removeClass('has-error');\r\n var describeByValue = input.attr('data-describeBy');\r\n if (describeByValue)\r\n input.attr('aria-describedby', describeByValue);\r\n input.removeAttr('aria-invalid');\r\n if (input2 && input3) {\r\n input2.removeAttr('aria-describedby');\r\n input2.removeAttr('aria-invalid');\r\n input3.removeAttr('aria-describedby');\r\n input3.removeAttr('aria-invalid');\r\n }\r\n }\r\n }\r\n }\r\n\r\n //Returns the option set text for the response, using the response code\r\n utility.getOptionSetText = function (optionSet, responseCode) {\r\n if (!optionSet || optionSet.length == 0 || !responseCode || responseCode.length == 0) {\r\n return '';\r\n }\r\n var value = ($filter('filter')(DataServices.configData.optionSets[optionSet], { 'code': responseCode }, true));\r\n if (!value || value.length == 0) {\r\n return '';\r\n }\r\n return value[0].text;\r\n }\r\n\r\n //Returns the option set data for the response, using the response code\r\n utility.getOptionSetData = function (optionSet, responseCode) {\r\n if (!optionSet || optionSet.length == 0 || !responseCode || responseCode.length == 0) {\r\n return '';\r\n }\r\n var value = ($filter('filter')(DataServices.configData.optionSets[optionSet], { 'code': responseCode }, true));\r\n if (!value || value.length == 0) {\r\n return '';\r\n }\r\n return value[0].data;\r\n }\r\n\r\n utility.setAriaDescribedByAttribute = function (controlType, id) {\r\n var attrValue = null;\r\n if (controlType == 'address')\r\n attrValue = 'addressAutoComplete';\r\n if (controlType == 'typeahead')\r\n attrValue = 'typeAheadAutoComplete';\r\n if (attrValue)\r\n $('#' + id).attr('aria-describedby', attrValue);\r\n }\r\n\r\n //Gets the actual value entered by the user for the particular question (not just the code from the response)\r\n utility.getAnswer = function (question, response) {\r\n // As the response could be an array, we need to check length as well\r\n if (!response || ($.isArray(response) && response.length == 0)) {\r\n return null;\r\n }\r\n\r\n switch (question.controlType) {\r\n case \"text\":\r\n case \"textarea\":\r\n case \"address\":\r\n return response;\r\n break;\r\n case \"singleCheckbox\":\r\n if (response) {\r\n if (response == true) {\r\n return 'Yes';\r\n }\r\n else {\r\n return 'No';\r\n }\r\n }\r\n return null;\r\n break;\r\n case \"radio\":\r\n case \"select\":\r\n if ((typeof question.options) === \"string\") {\r\n return ($filter('filter')(DataServices.configData.optionSets[question.options], { 'code': response }))[0].text;\r\n }\r\n else {\r\n return ($filter('filter')(question.options, { 'code': response }))[0].text;\r\n }\r\n break;\r\n case \"date\":\r\n return $filter('date')(response, 'dd/MM/yyyy');\r\n break;\r\n case \"checkbox\":\r\n // this is a multi select, so we return an array of answers\r\n var output = [];\r\n for (var i = 0; i < response.length; i++) {\r\n if ((typeof question.options) === \"string\") {\r\n output.push(($filter('filter')(DataServices.configData.optionSets[question.options], { 'code': response[i] }))[0].text);\r\n }\r\n else {\r\n output.push(($filter('filter')(question.options, { 'code': response[i] }))[0].text);\r\n }\r\n }\r\n return output;\r\n break;\r\n case \"typeahead\":\r\n return response.text;\r\n default:\r\n return null;\r\n break;\r\n }\r\n }\r\n\r\n //Returns the age as an integer by comparing the incoming date with todays date.\r\n utility.getAge = function (birthYear, birthMonth, birthDay) {\r\n curDate = new moment();\r\n curYear = curDate.year();\r\n curMonth = curDate.month();\r\n curDay = curDate.date();\r\n\r\n age = curYear - birthYear;\r\n\r\n if (curMonth < (birthMonth - 1)) {\r\n age--;\r\n }\r\n\r\n if ((birthMonth - 1) == curMonth && curDay < birthDay) {\r\n age--;\r\n }\r\n return age;\r\n }\r\n\r\n // Return the System Date\r\n utility.getSystemDate = function (format) {\r\n if (!format) {\r\n format = 'YYYY-MM-DD';\r\n }\r\n return moment(new Date()).format(format);\r\n }\r\n\r\n // Returns the minimum date (typically 01-01-1900)\r\n utility.getMinimumDate = function () {\r\n var minDate = moment(Constants.minimumDate).format('YYYY-MM-DD');\r\n return minDate;\r\n }\r\n\r\n // Returns true if the age is greater than or equal to 18 and false if age is less than 18\r\n utility.isAdult = function (year, month, day) {\r\n if (this.getAge(year, month, day) >= 18) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // Returns the page title\r\n utility.getPageTitle = function (navTabNum, pageUrl) {\r\n var title = '';\r\n if (navTabNum && pageUrl) {\r\n var tabIncludedInProgress = _.find(DataServices.configData.navigationTabs, function (o) { return o.number == navTabNum && o.includeInProgress == true; });\r\n if (tabIncludedInProgress) {\r\n title = tabIncludedInProgress.title + ' tab and ' + _.find(_.find(DataServices.configData.navigationTabs, function (o) { return o.number == navTabNum; }).pages, function (p) { return p.url == pageUrl; }).docTitle + ' page';\r\n } else {\r\n title = _.find(_.find(DataServices.configData.navigationTabs, function (o) { return o.number == navTabNum; }).pages, function (p) { return p.url == pageUrl; }).docTitle;\r\n }\r\n\r\n }\r\n return title;\r\n }\r\n\r\n //Opens a modal popup. The popupCode determines the content to display and must match a code in the JSON.\r\n utility.openPopup = function (popupCode, popupParams) {\r\n return $uibModal.open({\r\n animation: false,\r\n backdrop: 'static',\r\n ariaLabelledBy: 'modal-title',\r\n ariaDescribedBy: 'modal-body',\r\n templateUrl: 'app/partials/core/modalPopup.html',\r\n controller: 'modalPopupController',\r\n windowTemplateUrl: 'app/partials/core/modalPopupWindow.html',\r\n resolve: {\r\n popupCode: function () {\r\n return popupCode;\r\n },\r\n popupParams: function () {\r\n return popupParams;\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Sets focus to the supplied element id\r\n utility.focus = function (id) {\r\n // delay is here to give old browsers time to traverse dom\r\n $timeout(function () {\r\n var element = id ? document.getElementById(id) : null;\r\n if (element) {\r\n element.focus();\r\n }\r\n }, 100);\r\n };\r\n\r\n // Returns true if supplied email address is a valid email address format\r\n utility.matchEmailRegx = function (email) {\r\n var regx = /(?:[\\w'\"!#$%&*+/=?^_`{|}~-]+(?:\\.[\\w'\"!#$%&*^\"\\\\+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9]){?|}|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[A-Za-z0-9-]*[A-Za-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])/;\r\n var match = email.match(regx);\r\n if (match && match.length > 0) {\r\n return (email === match[0]);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n // Removes errors from the validationErrors array without creating a new copy of the array.\r\n utility.removeFromValidationErrors = function (level, pageId, pageIndex, sectionCode, sectionIndex, questionCode) {\r\n var toRemove = [];\r\n for (var i = 0; i < DataServices.validationErrors.length; i++) {\r\n if ((!level || DataServices.validationErrors[i].level == level) &&\r\n (!pageId || DataServices.validationErrors[i].pageNo == pageId) &&\r\n (!pageIndex || DataServices.validationErrors[i].pageIndex == pageIndex) &&\r\n (!sectionCode || DataServices.validationErrors[i].sectionCode == sectionCode) &&\r\n (!sectionIndex || DataServices.validationErrors[i].sectionIndex == sectionIndex) &&\r\n (!questionCode || DataServices.validationErrors[i].questionCode == questionCode)) {\r\n toRemove.push(i);\r\n }\r\n }\r\n // iterate in reverse so we splice from the end of the array and don't mess up the order\r\n for (var i = toRemove.length; i > 0; i--) {\r\n DataServices.validationErrors.splice(toRemove[i - 1], 1);\r\n }\r\n }\r\n\r\n //Checks if we have a valid, non-null response with a JSON object with more than one property (our expected response contains properties like 1-1, 1-2 etc\r\n utility.isValidResponse = function (response) {\r\n var isValid = false;\r\n var propCount = 0;\r\n if (response && typeof response === 'object') {\r\n for (var prop in response) {\r\n if (response.hasOwnProperty(prop)) propCount++;\r\n }\r\n\r\n isValid = propCount > 1;\r\n }\r\n return isValid;\r\n };\r\n\r\n //Returns option set from configuration data\r\n utility.getOptionSetFromConfiguration = function (optionsetName, template) {\r\n var optionSet;\r\n if (!template && optionsetName) {\r\n if (DataServices.configData) {\r\n optionSet = DataServices.configData.optionSets[optionsetName];\r\n }\r\n return optionSet;\r\n }\r\n\r\n if (!DataServices.configData[template]) {\r\n return DataServices.getConfigurationUsingCache(template, null, null, DataServices.isAuthenticated())\r\n .then(function (data) {\r\n return data.configData.optionSets[optionsetName];\r\n });\r\n }\r\n else {\r\n if (template && DataServices.configData[template]) {\r\n optionSet = DataServices.configData[template].optionSets[optionsetName];\r\n } else {\r\n if (DataServices.configData) {\r\n optionSet = DataServices.configData.optionSets[optionsetName];\r\n }\r\n }\r\n }\r\n\r\n return Promise.resolve(optionSet);\r\n };\r\n\r\n // Create an object from an optionSet, which can be used to convert the \"code\" into the \"text\"\r\n utility.getOptionSetDecodeMap = function (optionSet) {\r\n var decodeMap = {};\r\n for (var i = 0; i < (optionSet && optionSet.length) || 0; i++) {\r\n var item = optionSet[i];\r\n decodeMap[item.code] = item.text;\r\n }\r\n return decodeMap;\r\n };\r\n\r\n // Sets the current incident as editable or not\r\n utility.setCurrentIncidentAsEditable = function (isEditable) {\r\n DataServices.isIncidentEditable = !!isEditable;\r\n }\r\n\r\n // Returns if the current incident is editable or not\r\n utility.isCurrentIncidentEditable = function () {\r\n return !!DataServices.isIncidentEditable;\r\n }\r\n\r\n utility.setCurrentIncidentCanSaveFile = function (isEditable) {\r\n DataServices.canSaveFileToCurrentIncident = isEditable;\r\n }\r\n\r\n // Returns if the current incident is editable or not\r\n utility.canSaveFileToCurrentIncident = function () {\r\n return DataServices.canSaveFileToCurrentIncident;\r\n }\r\n\r\n // Checks if the user is authenticated\r\n utility.isAuthenticated = function () {\r\n return DataServices.isAuthenticated();\r\n };\r\n\r\n utility.formateDate = function (date) {\r\n return $filter('date')(date, 'dd/MM/yyyy');\r\n };\r\n\r\n utility.toggleLoadingSpinner = function (show) {\r\n if (show) {\r\n $('#pageLoad').addClass('loading-data');\r\n $('#main_content').addClass('data-container');\r\n }\r\n else {\r\n $('#pageLoad').removeClass('loading-data');\r\n $('#main_content').removeClass('data-container');\r\n }\r\n };\r\n\r\n utility.invalidUserLogout = function () {\r\n utility.openPopup('invalidUser')\r\n .result.then({}, function () {\r\n $location.path('/logout');\r\n });\r\n };\r\n\r\n return utility;\r\n }\r\n\r\n ]);\r\n\r\n}());","(function (angular, moment, _) {\r\n // all the validation logic resided in this service so that we can reuse the service anywhere in client side code to validate page, individual questions and summary level validations\r\n var validationService = function (UtilityServices, Constants) {\r\n\r\n var service = {\r\n val: valueOfQuestion,\r\n questionContains: questionContains,\r\n notEmpty: notEmpty,\r\n validNumeric: validNumeric,\r\n validDate: validDate,\r\n isDateSameOrAfter: isDateSameOrAfter,\r\n dateDifferenceInDays: dateDifferenceInDays,\r\n validDateRange: validDateRange,\r\n validAlphabetic: validAlphabetic,\r\n validEmailAddress: validEmailAddress,\r\n isAdult: isAdult\r\n };\r\n\r\n function valueOfQuestion(params, responses, qCode, sCode, sIndex, pIndex, pageId) {\r\n // if the params parameter has been supplied, it replaces the value of undefined parameters\r\n // note the check for undefined is explicit here, because values could be 0 which is acceptable!\r\n if (params) {\r\n if (!pIndex && params['pIndex'] != undefined) pIndex = params['pIndex'];\r\n if (!sIndex && params['sIndex'] != undefined) sIndex = params['sIndex'];\r\n if (!sCode && params['sCode'] != undefined) sCode = params['sCode'];\r\n if (!pageId && params['pageId'] != undefined) pageId = params['pageId'];\r\n }\r\n\r\n // Find matching response.\r\n if (responses &&\r\n pageId &&\r\n responses[pageId] &&\r\n responses[pageId][pIndex] &&\r\n responses[pageId][pIndex][sCode]) {\r\n var response = responses[pageId][pIndex][sCode][sIndex];\r\n if (response) {\r\n for (var responseKey in response) {\r\n if (response.hasOwnProperty(responseKey)) {\r\n if (responseKey == qCode) {\r\n return response[responseKey];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n // this function returns whether the question contains the value or not\r\n function questionContains(params, responses, qCode, qValue, sCode, sIndex, pIndex, pageId) {\r\n var val = valueOfQuestion(params, responses, qCode, sCode, sIndex, pIndex, pageId);\r\n if (!val || ($.isArray(val) && val.length == 0)) {\r\n return false;\r\n }\r\n return val.indexOf(qValue) > -1;\r\n }\r\n\r\n // this function tells whether the value of question is not empty\r\n function notEmpty(params, responses, qCode, sCode, sIndex, pIndex, pageId) {\r\n var val = valueOfQuestion(params, responses, qCode, sCode, sIndex, pIndex, pageId);\r\n if (!val || ($.isArray(val) && val.length == 0)) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n // Numeric validation check. DO NOT change the order of the input paramaters as parameters may be defined in the surveydefinition.json\r\n function validNumeric(params, responses, qCode, maxNumericLength, minNumericLength, sCode, sIndex, pIndex, pageId) {\r\n if (!minNumericLength) {\r\n minNumericLength = 1;\r\n }\r\n if (!qCode || !maxNumericLength || maxNumericLength < minNumericLength) {\r\n return false;\r\n }\r\n\r\n var target = valueOfQuestion(params, responses, qCode, sCode, sIndex, pIndex, pageId);\r\n if (!target) {\r\n return true; //skip test for blank value\r\n }\r\n var regx = new RegExp(\"^[0-9]{\" + minNumericLength + \",\" + maxNumericLength + \"}$\");\r\n return regx.test(target);\r\n }\r\n\r\n // Alphabetic validation check.\r\n function validAlphabetic(params, responses, code, sCode, sIndex, pIndex, pageId) {\r\n if (!code) {\r\n return false;\r\n }\r\n\r\n var target = valueOfQuestion(params, responses, code, sCode, sIndex, pIndex, pageId);\r\n if (!target) {\r\n return true; //skip test for blank value\r\n }\r\n\r\n var regx = new RegExp(\"^[a-zA-Z]+$\");\r\n return regx.test(target);\r\n }\r\n\r\n // Email validation logic. DO NOT change the order of the input paramaters as parameters may be defined in the surveydefinition.json\r\n function validEmailAddress(params, responses, qCode, sCode, sIndex, pIndex, pageId) {\r\n if (!qCode) {\r\n return false;\r\n }\r\n\r\n var target = valueOfQuestion(params, responses, qCode, sCode, sIndex, pIndex, pageId);\r\n if (!target) {\r\n return true; //skip test for blank value\r\n }\r\n\r\n return UtilityServices.matchEmailRegx(target);\r\n }\r\n\r\n // Determines if the date is valid. DO NOT change the order of the input paramaters as parameters may be defined in the surveydefinition.json\r\n function validDate(params, responses, qCode, sCode, sIndex, pIndex, pageId) {\r\n if (!qCode) {\r\n return false;\r\n }\r\n\r\n var day = notEmpty(params, responses, qCode + '-day', sCode, sIndex, pIndex, pageId);\r\n var month = notEmpty(params, responses, qCode + '-month', sCode, sIndex, pIndex, pageId);\r\n var year = notEmpty(params, responses, qCode + '-year', sCode, sIndex, pIndex, pageId);\r\n var target;\r\n if (day || month || year) {\r\n target = valueOfQuestion(params, responses, qCode, sCode, sIndex, pIndex, pageId);\r\n }\r\n else {\r\n return true; //skip test if nothing has been entered for day or month or year\r\n }\r\n\r\n var isValidDate = moment(target, 'YYYY-MM-DD', true).isValid();\r\n\r\n if (isValidDate) {\r\n var minDate = moment(Constants.minimumDate).format('YYYY-MM-DD');\r\n return (this.dateDifferenceInDays(target, minDate) >= 0 ? true : false);\r\n }\r\n\r\n return isValidDate;\r\n }\r\n\r\n // Determines if the date is equal to or after the source date\r\n function isDateSameOrAfter(params, responses, qCode, minYear, sCode, sIndex, pIndex, pageId) {\r\n if (!qCode || isNaN(minYear)) {\r\n return false;\r\n }\r\n\r\n var target = valueOfQuestion(params, responses, qCode, sCode, sIndex, pIndex, pageId);\r\n if (!target) {\r\n return true;\r\n }\r\n var dateMoment = moment(target, 'YYYY-MM-DD', true);\r\n\r\n return (dateMoment.isValid() && dateMoment.isSameOrAfter(minYear + '-01-01'));\r\n }\r\n\r\n // Returns the date difference in days\r\n function dateDifferenceInDays(sDate, tDate) {\r\n var daysDifference = null;\r\n\r\n var sourceDate = moment(sDate, 'YYYY-MM-DD', true);\r\n var targetDate = moment(tDate, 'YYYY-MM-DD', true);\r\n\r\n if (sourceDate.isValid() && targetDate.isValid()) {\r\n daysDifference = sourceDate.diff(targetDate, 'days');\r\n } else {\r\n return null;\r\n }\r\n\r\n return daysDifference;\r\n }\r\n\r\n // determine where a date is past, future or today\r\n function validDateRange(params, responses, qCode, sCode, sIndex, pIndex, pageId) {\r\n if (!validDate(params, responses, qCode, sCode, sIndex, pIndex, pageId)) {\r\n return 'invalid';\r\n }\r\n\r\n var target = valueOfQuestion(params, responses, qCode, sCode, sIndex, pIndex, pageId);\r\n\r\n var date = moment(target, \"YYYY-MM-DD\", true);\r\n\r\n //future\r\n if (moment().isBefore(date, 'day')) {\r\n return 'future';\r\n }\r\n //same as today\r\n if (moment().isSame(date, 'day')) {\r\n return 'today';\r\n }\r\n //past\r\n if (moment().isAfter(date, 'day')) {\r\n return 'past';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n // Returns true if a date has been entered and it is equal to or greater than 18 years. DO NOT change the order of the input paramaters as parameters may be defined in the surveydefinition.json\r\n function isAdult(params, responses, qCode, sCode, sIndex, pIndex, pageId) {\r\n if (!qCode) {\r\n return false;\r\n }\r\n\r\n var target = valueOfQuestion(params, responses, qCode, sCode, sIndex, pIndex, pageId);\r\n if (!target) {\r\n return false; // should be false because we don't have a date.\r\n }\r\n\r\n var date = moment(target, \"YYYY-MM-DD\", true);\r\n if (date.isValid()) {\r\n return UtilityServices.isAdult(date.year(), (date.month() + 1), date.date());\r\n }\r\n return false;\r\n }\r\n\r\n return service;\r\n };\r\n\r\n //Get the formApp module\r\n var formApp = angular.module('formApp');\r\n //Register this service with the formApp module\r\n formApp.factory('ValidationService', ['UtilityServices', 'Constants', validationService]);\r\n}(angular, moment, _));"],"sourceRoot":"/source/"}