{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/util/department.js","webpack:///./src/util/numberUtil.js","webpack:///./src/api/v24/api.contact.js","webpack:///./src/components/auth/PasswordCreator.vue","webpack:///src/components/auth/PasswordCreator.vue","webpack:///./src/components/auth/PasswordCreator.vue?af04","webpack:///./src/components/auth/PasswordCreator.vue?6c8c","webpack:///./src/api/v24/api.group.js","webpack:///./src/api/v24/apiAlertTemplates.js","webpack:///./src/api/v24/api.js","webpack:///./src/util/storage.js","webpack:///./src/api/v24/api.event.js","webpack:///./src/config/eventLogConfig.js","webpack:///./src/util/eventLogger.js","webpack:///./src/store/index.js","webpack:///./src/locales sync [A-Za-z0-9-_,\\s]+\\.json$/","webpack:///./src/components/misc/LoadingSpinner.vue","webpack:///src/components/misc/LoadingSpinner.vue","webpack:///./src/components/misc/LoadingSpinner.vue?b94e","webpack:///./src/components/misc/LoadingSpinner.vue?4e56","webpack:///./src/App.vue","webpack:///./src/components/navigation/MainNavigation.vue","webpack:///./src/components/misc/LocaleSwitcher.vue","webpack:///./src/util/browser.js","webpack:///src/components/misc/LocaleSwitcher.vue","webpack:///./src/components/misc/LocaleSwitcher.vue?575a","webpack:///./src/components/misc/LocaleSwitcher.vue?85a4","webpack:///./src/components/misc/AppSnackbar.vue","webpack:///src/components/misc/AppSnackbar.vue","webpack:///./src/components/misc/AppSnackbar.vue?5a63","webpack:///./src/components/misc/AppSnackbar.vue?9207","webpack:///./src/components/departments/DepartmentsSelect.vue","webpack:///src/components/departments/DepartmentsSelect.vue","webpack:///./src/components/departments/DepartmentsSelect.vue?363e","webpack:///./src/components/departments/DepartmentsSelect.vue?86f9","webpack:///src/components/navigation/MainNavigation.vue","webpack:///./src/components/navigation/MainNavigation.vue?dcf0","webpack:///./src/components/navigation/MainNavigation.vue?4c8d","webpack:///src/App.vue","webpack:///./src/App.vue?8fa6","webpack:///./src/App.vue?3746","webpack:///./src/locales/custom-vuetify/da.js","webpack:///./src/plugins/vuetify.js","webpack:///./src/main.js","webpack:///./src/util/alertReceiverStatus.js","webpack:///./src/config/configVoice.js","webpack:///./src/assets/images/logo/logo-with-app-title.svg","webpack:///./src/util/userLocale.js","webpack:///./src/assets/images/picsum_865-1920x1080.jpg","webpack:///./src/components/auth/NewPasswordRequest.vue","webpack:///src/components/auth/NewPasswordRequest.vue","webpack:///./src/components/auth/NewPasswordRequest.vue?4989","webpack:///./src/components/auth/NewPasswordRequest.vue?d76c","webpack:///./src/i18n.js","webpack:///./src/util/stringUtil.js","webpack:///./src/components/misc/LoadingSpinner.vue?4393","webpack:///./src/api/v24/api.department.js","webpack:///./src/api/v24/api.admin.js","webpack:///./src/config/configServer.js","webpack:///./src/config/config.js","webpack:///./src/util/user.js","webpack:///./src/router/index.js","webpack:///./src/api/v24/api.session.js","webpack:///./src/util/appSnackbac.js","webpack:///./src/api/v24/api.alert.js","webpack:///./src/util/AlertTemplate.js","webpack:///./src/views/LandingPage.vue","webpack:///./src/components/auth/LoginForm.vue","webpack:///src/components/auth/LoginForm.vue","webpack:///./src/components/auth/LoginForm.vue?6a1e","webpack:///./src/components/auth/LoginForm.vue?5bce","webpack:///src/views/LandingPage.vue","webpack:///./src/views/LandingPage.vue?06d6","webpack:///./src/views/LandingPage.vue?f705","webpack:///./src/util/formValidationRules.js","webpack:///./src/api/v24/api.user.js","webpack:///./src/api/v24/api.voice.js","webpack:///./src/views/LandingPage.vue?67e6","webpack:///./src/util/Email.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","department","cacheLimit","lastUpdate","cachedDepartments","getAll","_this","now","Date","diff","apiDepartment","departments","customerUsesDepartments","_this2","allDepartments","numberUtil","periodToComma","input","output","toString","indexOf","split","addThousandSperators","delimiter","replace","isNumber","isNaN","parseFloat","isFinite","bytesToMegabytes","bytes","numOfDecimals","apiContact","id","api","execute","Id","res","catch","getMultiple","pageIndex","numberOfRows","sortField","arguments","sortDesc","abortSignal","params","Paging","RowCount","PageIdx","SorterFelt","SorterSynkende","Avdeling","user","getSelectedDepartment","pageSize","allContacts","fetchChunk","aborted","Kontakter","concat","search","searchString","contactsToIgnore","groupToIgnore","ignoreIds","map","contactToIgnore","searchStringWildcard","Tekst","StarterMed","Unntak","UnntakGruppe","contact","GruppeId","getAsApiObject","createContacts","createContactsAndAddToGroup","contacts","groupId","getAsApiFormat","change","Kontakt","delete","deleteMultiple","ids","silent","Ids","getContactsInGroup","getContactDeputies","contactsId","KontaktIds","serverErrs","filter","Status","errorMsg","alert","on","$event","sendRequest","model","callback","_vm","expression","_c","attrs","staticClass","submit","validateToken","_s","$t","token","$$v","newPassword","_v","staticRenderFns","props","initEmail","String","default","hideEmail","Boolean","email","emailField","tokenField","tokenValidField","requiredRules","formValidationRules","requiredRule","emailRules","requiredEmailRules","passwordRules","formSendCodeValid","created","methods","back","messageToReceiver","apiUser","requestNewPassword","confirmNewPassword","requestOk","response","status","statusText","$emit","password","component","apiGroup","groups","getMembers","searchMembers","searchStr","save","shortname","Gruppe","Navn","KodeNavn","forceFetchAll","addContact","contactId","KontaktId","removeContact","shortword","group","deleteContacts","SlettKontakter","deleteMembers","members","Medlemmer","deleteAll","getNumberOfMembers","apiAlertTemplates","selDep","templates","parsedTemplates","template","Melding","substr","alertTempl","AlertTemplate","setFromApiObject","Mal","createTemplateJson","MalId","update","obj","alertName","text","emailTitle","voiceSettings","responseOptions","JSON","stringify","methodName","returnField","logoutOnUnauth","formData","apiPath","url","config","urlV24AudioApi","urlV24Api","sessionId","getSessionId","axiosParams","method","headers","SessionId","axios","_err$response","_err$response2","_err$response2$data","_err$response2$data$E","logOutClient","Errors","checkAccessRights","addCustomHintFields","parseOutErrorMsg","handleNoResponse","parseInt","Code","_notFound","_forbidden","_dupe","_inUse","errors","accessRightsErrMsg","forEach","Details","i18n","location","errorObj","navigator","onLine","Title","storage","setLocalItem","item","localStorage","setItem","getLocalItem","getItem","setSessionItem","sessionStorage","getSessionItem","apiEvent","set","operation","Operation","Params","eventLogConfig","importReceiversFromAlertPage","extraReceiverUsed","receiversAddedFromDsf","voiceFileUsedInAlert","voiceFileRecordedOnAlertPage","voiceFileRecorded","voiceFileUploaded","voiceFileEdited","voiceUsedInAlert","emailFileUploaded","emailFileEdited","dsfExctraction","scenarioUsed","themeChange","ageFilter","eventLogger","fromYear","toYear","kommuneNum","sendEvent","theme","themeType","alertObj","createAudioParamObj","sendAudioEvent","sendEmailFileEvent","count","numberOfPersons","audioId","fileId","createEventParamFormat","_alertObj$voice$attem","_alertObj$voice$attem2","voiceProps","voice","simMode","audioFile","voiceName","Name","voiceLanguage","LanguageName","voiceGender","Gender","endOnState","maxAttempts","attempts","delayBetweenAttempts","strParam","Vue","use","Vuex","keyStorageRowsPerPage","Store","state","userProfile","contactsUpdate","voices","alertTemplates","alertList","selectedGroups","selectedContacts","settings","receivers","appSnackbar","visible","navButton","path","tagName","ssoMsLastUsedCode","roles","retryPageOnNoPermission","preferredNumTableRows","mutations","setPreferredNumTableRows","num","setAlertList","setAppSnackbar","options","setAlertTemplates","setUserProfile","setGroups","setDepartments","setAlertSimMode","setVoices","setSelectedAlertGroups","setSelectedAlertContacts","setAlertReceivers","setTagNameBasedOnLocale","getLocaleProperties","setSsoMsLastUsedCode","removeSelectedAlertGroup","selGroup","setAlertSettings","alertSettings","addAlertReceiver","receiver","updateState","newReceiver","unshift","Vikarer","Vikar1","Vikar2","addSelectedContact","removeAlertReceiver","_source","removeAlertReceiverByGroupId","filterReceivers","removeAlertReceiverByContactId","clearAlertReceivers","clearAlert","updateContacts","setRoles","setRetryPageOnNoPermission","page","getters","getUserHasSmsCodeword","Kodeord","some","codewordProps","KeywordType","getPreferredNumTableRows","defaultTblRowsPerPage","getUserFullName","Bruker","BrukerNavn","getCustomerHasDepartments","_state$userProfile","_adminDepartments","getUserCompany","Firmanavn","getUserIsAdmin","Admin","getUserHasADProvisioning","Tilgang","ADProvisioning","getDefaultCountryPhoneCode","Landskode","getShowDepartmentInfoInLists","Avdelinger","getSelectedDepartmentName","selectedId","find","dep","AvdelingId","actions","updateAlertList","context","apiAlert","getAlertList","alerts","commit","updateAlertTemplates","updateUserProfile","forceServerFetch","getProfile","getUserPermissions","dispatch","_permissions","updateGroups","slient","returnObject","updateVoices","apiVoice","getVoices","updateDepartments","sourceName","idToExclude","webpackContext","req","webpackContextResolve","keys","_self","smartDelay","show","render","selectedDepartment","_e","currentPathIndex","userIsAdmin","userHasUserManagementPermission","scopedSlots","proxy","navigate","toggleTheme","fn","_ref","click","browser","setTabTitle","title","switchTo","locale","setLocale","$vuetify","lang","current","getVuetifyLocale","store","computed","snackbar","router","selected","initValue","usrProfile","allDeps","structuredClone","log","components","DepartmentsSelect","AppSnackbar","LocaleSwitcher","drawer","isV24User","serverName","navItemIndex","customerHasDepartments","_store$state$userProf","manageUsers","userFullName","userCompany","customerUsesRoles","_store$state$userProf2","Rollestyring","userDepartments","_store$state$userProf3","usrData","AvdelingNavn","navDrawerItems","_store$state$userProf4","navItems","icon","dsfModule","files","len","currentPath","$route","index","getIsV24User","setDepartment","setSelectedDepartment","backToV24","urlV24MainMenu","logOut","dark","lastUsedTheme","setLasedUsedTheme","MainNavigation","LandingPage","navigationVisible","userIsLoggedIn","responseFeedbackVisitor","newUserVisitor","isLoggedIn","getLasedUsedTheme","validateSelectedDepartment","updated","selectedDep","getDepartments","usrDepInfo","isAdmin","isAvail","setNoDepartment","da","badge","close","dataIterator","noResultsText","loadingText","dataTable","itemsPerPageText","ariaLabel","sortDescending","sortAscending","sortNone","activateNone","activateDescending","activateAscending","sortBy","dataFooter","itemsPerPageAll","nextPage","prevPage","firstPage","lastPage","pageText","datePicker","itemsSelected","nextMonthAriaLabel","nextYearAriaLabel","prevMonthAriaLabel","prevYearAriaLabel","noDataText","carousel","prev","next","calendar","moreEvents","fileInput","counter","counterSize","timePicker","am","pm","pagination","wrapper","previous","currentPage","rating","Vuetify","locales","en","no","sv","appSetup","_appSetup","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","handleV24visitors","getElementById","style","display","stop","_handleV24visitors","_callee2","urlData","ticket","_context2","URL","searchParams","apiSession","exchangeTicketForSessionId","sent","setSession","t0","productionTip","vuetify","h","App","$mount","setIsV24User","mapAlertStatus","active","completed","planned","stopped","deleted","alertReceiverStatus","translate","alertStatus","receiverStatus","statusTranslation","Bekreftet","Mottatt","Ubesvart","Duplikat","Sendt","Active","Reservert","Avvist","translatedStatus","configVoice","defaultSetting","delay","deputy","number","getDefaultCallerId","getCallerId","getDefaultProps","defaultCountryCode","langCode","getLangCodeFrom","defaultVoice","LanguageCode","supportedVoiceLanguages","countryCode","responseOptText","press","for","repeat","responseConfirm","noUserInputMsg","noUserImputMsg","englishVoiceOptText","voiceLangCode","this","voiceLang","userLocale","LoadingSpinner","PasswordCreator","newUser","hideCancelBtn","loading","cancel","success","credentials","reload","loadLocaleMessages","require","messages","matched","match","VueI18n","dateTimeFormats","short","year","month","day","long","weekday","hour","minute","hour12","timeOfDay","nb","nn","se","getDefaultLanguage","fallbackLocale","process","stringUtil","fixUnsupportedWhitespace","truncate","string","limit","substring","capitalizeFirstLetter","charAt","toUpperCase","hasNorwegianLetters","hasLowerCase","hasUpperCase","toLowerCase","hasWhitespace","test","hasNumber","urlify","openUrlInNewTab","targetAttr","urlRegex","covertLineShiftToHtmlBreak","makeDownloadFriendlyName","fileName","createRandomString","Math","random","escapeRegExp","smsSender","SmsAvsender","edit","departmentExits","departmentId","apiAdmin","getUsers","users","filteredUsers","usrDep","getUser","BrukerId","setUserRoles","userId","Roller","role","RolleId","setUserDepartments","createUser","changeUser","changeFields","createUserFields","deactivateUser","setUserActiveState","reactivateUser","Verdi","Felt","Epost","Mobilnr","HovedAvdeling","AnsattId","toDbFormat","Administrator","Sperret","Maler","VarslingGruppe","Grupper","Felter","serverConfig","apiUrl","apiAudioUrl","apiSsoUrl","v24Url","callerId","appName","configServer","urlApp","urlV24ApiSso","urlV24Logout","defaultEmailSenderAddr","emailAttachmentMbimit","supportedEmailFileTypes","supportedAudioFileTypes","alertContactsPerGroupLimit","uploadContactsLimit","alertContactsLimit","alertVoiceContactsLimit","dynamicNameTags","phoneLengthLimit","min","max","dialogWith","small","medium","large","xLarge","chartColors","strongGreen","green","yellow","red","grey","white","blue","orange","massDeleteLimit","fixedTblItemsPerPageOptions","foundEmailContactInfo","getAudioPlaybackUrl","fileClass","sid","getDefaultSessionDuration","custNum","language","userLanguage","localeIdentifiers","nynorsk","bokmaal","norwegian","danish","swedish","csvSeparator","keySessionId","keyLocale","keyIsV24User","keyIsSsoMsUser","keySsoMsLastUsedCode","keyDepartment","keyTheme","keyAlertLogTab","profile","setSessionId","validateDepartment","targetDepartment","usrInfo","_departments","mainDepartment","_toConsumableArray","changeProfile","mobile","canEditGroups","_this3","manageContacts","goToStartPage","getSmsCodeword","_this4","keyword","kodewordProps","getDepartmentForItemSave","_this5","exists","fallbackDep","setAlertLogTab","tabId","getAlertLogTab","setIsSsoMsUser","getSsoMsLastUsedCode","getIsSsoMsUser","logIn","login","getSessionErrorMessage","logInPin","pin","loginPin","noRedirect","logout","clientLogout","customerNum","Kundenr","sessionDuration","setSessionDuration","isSsoMsUser","localStorageExceptions","_i","_Object$entries","entries","_Object$entries$_i","_slicedToArray","includes","removeItem","_i2","_Object$entries2","_Object$entries2$_i","VueRouter","adminPath","routes","base","originalPush","beforeEach","to","from","permissions","handleNoAuth","ssoCode","pass","UserId","Password","SmsSender","PinCode","Ticket","duration","TimeToLive","setMessage","register","alertParams","getApiParams","rowCount","pageIdx","VarslingType","getAlertDetails","alertId","dataParams","pageNumber","VarslingId","Adressenr","Data","receiversWithImprovedStatus","Mottakere","Varsling","VarslingStatus","Simulering","searchAlertReceivers","responseCode","ResponsKode","_objectSpread","cancelAlert","getStats","fromDate","toDate","FraDato","TilDato","_classCallCheck","sms","_createClass","apiObject","templData","parse","departmentName","resetPassSuccessMsg","staticStyle","twoFaDialog","preventDefault","NewPasswordRequest","forgotPasswordEmail","resetPassDialog","loginFail","accountDisabled","wrongLogin","uknownUser","twoFaRequried","show2FaDialog","userIsGoodToGo","showResetPassDialog","showResetSuccessMsg","closeResetDialog","cancelPin","validatePin","errMsg","mainDep","LoginForm","v","trim","groupShortnameRules","x","phoneRules","Email","isValid","urlRules","isHttp","isHttps","isDoubleSlash","ignoreWhitespace","alias","getAdminDepartments","rolePerm","Rettighet","legacyPerm","GruppeDSF","activeDirProvisioning","ADProvisjonering","GruppeVarsling","manageAccount","Konto","Filer","phoneNumTypes","TjenesteTelefon","Mobil","Alias","Avsender","Token","Hemmelighet","sessionDepartment","sort","findSupportedVoices","sendSingle","recipient","voicePerson","BatchId","Script","Voice","Content","Messages","CallerId","Recipient","suppLang","a","b","localeCompare","emailAddr","copyPasteFails"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAG/Be,GAAqBA,EAAoBhB,GAE5C,MAAMO,EAASC,OACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAGnBC,EAAqB,CACxB,IAAO,GAMJjB,EAAkB,CACrB,IAAO,GAGJK,EAAkB,GAGtB,SAASa,EAAe7B,GACvB,OAAOyB,EAAoBK,EAAI,OAAS,GAAG9B,IAAUA,GAAW,IAAM,CAAC,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,YAAYA,GAAW,MAIpvB,SAASyB,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAUgC,QAGnC,IAAIC,EAASL,EAAiB5B,GAAY,CACzCK,EAAGL,EACHkC,GAAG,EACHF,QAAS,IAUV,OANAlB,EAAQd,GAAUW,KAAKsB,EAAOD,QAASC,EAAQA,EAAOD,QAASN,GAG/DO,EAAOC,GAAI,EAGJD,EAAOD,QAKfN,EAAoBS,EAAI,SAAuBlC,GAC9C,IAAImC,EAAW,GAIXC,EAAY,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,GAC/UR,EAAmB5B,GAAUmC,EAASvB,KAAKgB,EAAmB5B,IACzB,IAAhC4B,EAAmB5B,IAAkBoC,EAAUpC,IACtDmC,EAASvB,KAAKgB,EAAmB5B,GAAW,IAAIqC,SAAQ,SAASC,EAASC,GAIzE,IAHA,IAAIC,EAAO,QAAU,GAAGxC,IAAUA,GAAW,IAAM,CAAC,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,YAAYA,GAAW,OAC5tByC,EAAWhB,EAAoBK,EAAIU,EACnCE,EAAmBC,SAASC,qBAAqB,QAC7CxC,EAAI,EAAGA,EAAIsC,EAAiBpC,OAAQF,IAAK,CAChD,IAAIyC,EAAMH,EAAiBtC,GACvB0C,EAAWD,EAAIE,aAAa,cAAgBF,EAAIE,aAAa,QACjE,GAAe,eAAZF,EAAIG,MAAyBF,IAAaN,GAAQM,IAAaL,GAAW,OAAOH,IAErF,IAAIW,EAAoBN,SAASC,qBAAqB,SACtD,IAAQxC,EAAI,EAAGA,EAAI6C,EAAkB3C,OAAQF,IAAK,CAC7CyC,EAAMI,EAAkB7C,GACxB0C,EAAWD,EAAIE,aAAa,aAChC,GAAGD,IAAaN,GAAQM,IAAaL,EAAU,OAAOH,IAEvD,IAAIY,EAAUP,SAASQ,cAAc,QACrCD,EAAQF,IAAM,aACdE,EAAQE,KAAO,WACfF,EAAQG,OAASf,EACjBY,EAAQI,QAAU,SAASC,GAC1B,IAAIC,EAAUD,GAASA,EAAME,QAAUF,EAAME,OAAOC,KAAOjB,EACvDkB,EAAM,IAAIC,MAAM,qBAAuB5D,EAAU,cAAgBwD,EAAU,KAC/EG,EAAIE,KAAO,wBACXF,EAAIH,QAAUA,SACP5B,EAAmB5B,GAC1BkD,EAAQY,WAAWC,YAAYb,GAC/BX,EAAOoB,IAERT,EAAQV,KAAOC,EAEf,IAAIuB,EAAOrB,SAASC,qBAAqB,QAAQ,GACjDoB,EAAKC,YAAYf,MACfgB,MAAK,WACPtC,EAAmB5B,GAAW,MAMhC,IAAImE,EAAqBxD,EAAgBX,GACzC,GAA0B,IAAvBmE,EAGF,GAAGA,EACFhC,EAASvB,KAAKuD,EAAmB,QAC3B,CAEN,IAAIC,EAAU,IAAI/B,SAAQ,SAASC,EAASC,GAC3C4B,EAAqBxD,EAAgBX,GAAW,CAACsC,EAASC,MAE3DJ,EAASvB,KAAKuD,EAAmB,GAAKC,GAGtC,IACIC,EADAC,EAAS3B,SAASQ,cAAc,UAGpCmB,EAAOC,QAAU,QACjBD,EAAOE,QAAU,IACb/C,EAAoBgD,IACvBH,EAAOI,aAAa,QAASjD,EAAoBgD,IAElDH,EAAOZ,IAAM7B,EAAe7B,GAG5B,IAAI2E,EAAQ,IAAIf,MAChBS,EAAmB,SAAUd,GAE5Be,EAAOhB,QAAUgB,EAAOjB,OAAS,KACjCuB,aAAaJ,GACb,IAAIK,EAAQlE,EAAgBX,GAC5B,GAAa,IAAV6E,EAAa,CACf,GAAGA,EAAO,CACT,IAAIC,EAAYvB,IAAyB,SAAfA,EAAMH,KAAkB,UAAYG,EAAMH,MAChE2B,EAAUxB,GAASA,EAAME,QAAUF,EAAME,OAAOC,IACpDiB,EAAMK,QAAU,iBAAmBhF,EAAU,cAAgB8E,EAAY,KAAOC,EAAU,IAC1FJ,EAAMM,KAAO,iBACbN,EAAMvB,KAAO0B,EACbH,EAAMnB,QAAUuB,EAChBF,EAAM,GAAGF,GAEVhE,EAAgBX,QAAWkF,IAG7B,IAAIV,EAAUW,YAAW,WACxBd,EAAiB,CAAEjB,KAAM,UAAWK,OAAQa,MAC1C,MACHA,EAAOhB,QAAUgB,EAAOjB,OAASgB,EACjC1B,SAASqB,KAAKC,YAAYK,GAG5B,OAAOjC,QAAQ+C,IAAIjD,IAIpBV,EAAoB4D,EAAIxE,EAGxBY,EAAoB6D,EAAI3D,EAGxBF,EAAoB8D,EAAI,SAASxD,EAASkD,EAAMO,GAC3C/D,EAAoBgE,EAAE1D,EAASkD,IAClC1E,OAAOmF,eAAe3D,EAASkD,EAAM,CAAEU,YAAY,EAAMC,IAAKJ,KAKhE/D,EAAoBoE,EAAI,SAAS9D,GACX,qBAAX+D,QAA0BA,OAAOC,aAC1CxF,OAAOmF,eAAe3D,EAAS+D,OAAOC,YAAa,CAAEC,MAAO,WAE7DzF,OAAOmF,eAAe3D,EAAS,aAAc,CAAEiE,OAAO,KAQvDvE,EAAoBwE,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQvE,EAAoBuE,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAK7F,OAAO8F,OAAO,MAGvB,GAFA5E,EAAoBoE,EAAEO,GACtB7F,OAAOmF,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOvE,EAAoB8D,EAAEa,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIR3E,EAAoB+E,EAAI,SAASxE,GAChC,IAAIwD,EAASxD,GAAUA,EAAOmE,WAC7B,WAAwB,OAAOnE,EAAO,YACtC,WAA8B,OAAOA,GAEtC,OADAP,EAAoB8D,EAAEC,EAAQ,IAAKA,GAC5BA,GAIR/D,EAAoBgE,EAAI,SAASgB,EAAQC,GAAY,OAAOnG,OAAOC,UAAUC,eAAeC,KAAK+F,EAAQC,IAGzGjF,EAAoBK,EAAI,IAGxBL,EAAoBkF,GAAK,SAAShD,GAA2B,MAApBiD,QAAQjC,MAAMhB,GAAYA,GAEnE,IAAIkD,EAAaC,OAAO,gBAAkBA,OAAO,iBAAmB,GAChEC,EAAmBF,EAAWjG,KAAK2F,KAAKM,GAC5CA,EAAWjG,KAAOf,EAClBgH,EAAaA,EAAWG,QACxB,IAAI,IAAI5G,EAAI,EAAGA,EAAIyG,EAAWvG,OAAQF,IAAKP,EAAqBgH,EAAWzG,IAC3E,IAAIU,EAAsBiG,EAI1B/F,EAAgBJ,KAAK,CAAC,EAAE,kBAEjBM,K,uGClQH+F,G,UAAa,CACjBC,WAAY,IACZC,WAAY,KACZC,kBAAmB,GAEnBC,OAAM,WAAG,IAAAC,EAAA,KACP,OAAO,IAAIjF,SAAQ,SAAAC,GACjB,GAAIgF,EAAKH,YAAcG,EAAKF,kBAAkB9G,OAAQ,CACpD,IAAMiH,EAAM,IAAIC,KACVC,EAAOF,EAAMD,EAAKH,WACxB,GAAIM,EAAOH,EAAKJ,WAEd,YADA5E,EAAQgF,EAAKF,mBAIjBM,OAAcL,SAASnD,MAAK,SAAAyD,GAC1BL,EAAKF,kBAAoBO,EACzBL,EAAKH,WAAa,IAAIK,KACtBlF,EAAQqF,UAKdC,wBAAuB,WAAG,IAAAC,EAAA,KACxB,OAAO,IAAIxF,SAAQ,SAAAC,GACjBuF,EAAKR,SAASnD,MAAK,SAAA4D,GACjBxF,EAAQwF,EAAexH,OAAS,YAMzB2G,U,gFCxCTc,EAAa,CACjBC,cAAa,SAACC,GACZ,IAAIC,EAASD,EAAME,WACnB,IAA6B,IAAzBD,EAAOE,QAAQ,KAAa,CAE9B,GADAF,EAASA,EAAOG,MAAM,KAClBH,EAAO5H,OAAS,EAClB,MAAM4H,EAAS,yBAEjBA,EAASA,EAAO,GAAK,IAAMA,EAAO,GAEpC,OAAOA,GAGTI,qBAAoB,SAACL,EAAOM,GAE1B,OAAON,EAAME,WAAWK,QAAQ,wBAAyBD,IAG3DE,SAAQ,SAACjC,GAEP,OAAQkC,MAAMC,WAAWnC,KAAOoC,SAASpC,IAG3CqC,iBAAgB,SAACC,EAAOC,GACtB,OAAOD,EAAQ,KAAO,OAIXf,U,kJCxBTiB,EAAa,CACjBpD,IAAG,SAACqD,GACF,OAAO,IAAI5G,SAAQ,SAACC,EAASC,GAC3B2G,OACGC,QAAQ,cAAe,CAAEC,GAAIH,GAAM,aACnC/E,MAAK,SAAAmF,GACJ/G,EAAQ+G,EAAI,OAEbC,OAAM,SAAA3F,GACLpB,EAAOoB,UAKf4F,YAAW,SACTC,EACAC,GAIA,IAHAC,EAASC,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,GACZC,EAAQD,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,IAAAA,UAAA,GACRE,EAAWF,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,KAEVG,EAAS,KAYb,OAXIN,GAAaC,IACfK,EAAS,CACPC,OAAQ,CACNC,SAAUP,EACVQ,QAAST,GAEXU,WAAYR,EACZS,eAAgBP,EAChBQ,SAAUC,OAAKC,0BAGZpB,OAAIC,QACT,gBACAW,EACA,MACA,EACA,KACA,GACAD,IAIJxC,OAAM,WAAqB,IAAAC,EAAA,KAApBuC,EAAWF,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,KACbY,EAAW,IACbf,EAAY,EACZgB,EAAc,GAEZC,EAAa,SAAbA,IACJ,GAAIZ,GAAeA,EAAYa,QAC7B,MAAM,IAAI9G,MAAM,uBAElB,OAAO0D,EAAKiC,YAAYC,EAAWe,EAAU,IAAI,EAAOV,GAAa3F,MACnE,SAAAmF,GACE,OAAIA,EAAIsB,WAAatB,EAAIsB,UAAUrK,OAAS,GAC1CkK,EAAcA,EAAYI,OAAOvB,EAAIsB,WACrCnB,IACOiB,KAEAD,MAMf,OAAO,IAAInI,SAAQ,SAACC,EAASC,GAC3BkI,IACGvG,KAAK5B,GACLgH,MAAM/G,OAiBbsI,OAAM,SACJC,EACAtB,EACAC,GAKA,IAJAC,EAASC,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,GACZC,EAAQD,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,IAAAA,UAAA,GACRoB,EAAgBpB,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,GACnBqB,EAAarB,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,KAEVsB,EAAYF,EAAiBG,KAAI,SAAAC,GACrC,OAAIpD,OAAWU,SAAS0C,GACfA,EAEFA,EAAgB/B,MAIrBgC,EAAuBN,EAAatC,QAAQ,IAAK,KAC/CsB,EAAS,CACbuB,MAAOD,EACPE,YAAY,EACZvB,OAAQ,CACNC,SAAUP,EACVQ,QAAST,GAEXU,WAAYR,EACZS,eAAgBP,EAChB2B,OAAQN,EACRO,aAAcR,EACdZ,SAAUC,OAAKC,yBAEjB,OAAOpB,OAAIC,QAAQ,eAAgBW,IAQrCzD,OAAM,SAACoF,GACL,OAAO,IAAIpJ,SAAQ,SAAAC,GACjB,IAAMwH,EAAS,CACb4B,SAAU,EACVf,UAAW,CAACc,EAAQE,kBACpBvB,SAAUC,OAAKC,yBAEjBsB,EAAe9B,GAAQ5F,MAAK,SAAAmF,GAC1B/G,EAAQ+G,EAAI,WAUlBwC,4BAA2B,SAACC,EAAUC,GACpC,IAAMjC,EAAS,CACb4B,SAAUK,EACVpB,UAAWmB,EAASE,kBAEtB,OAAOJ,EAAe9B,IAGxBmC,OAAM,SAACR,GACL,IAAM3B,EAAS,CACboC,QAAST,EAAQE,kBAEnB,OAAOzC,OAAIC,QAAQ,eAAgBW,IAGrCqC,OAAM,SAAClD,GACL,OAAOC,OAAIC,QAAQ,eAAgB,CAAEC,GAAIH,KAG3CmD,eAAc,SAACC,GAAqB,IAAhBC,EAAM3C,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,IAAAA,UAAA,GACxB,OAAO,IAAItH,SAAQ,SAACC,EAASC,GAC3B2G,OACGC,QAAQ,iBAAkB,CAAEoD,IAAKF,GAAO,MAAM,EAAMC,GACpDpI,MAAK,SAAAmF,GACJ/G,EAAQ+G,MAETC,OAAM,SAAA3F,GACLpB,EAAOoB,UAKf6I,mBAAkB,SAACT,GACjB,OAAO7C,OAAIC,QAAQ,gBAAiB,CAAEuC,SAAUK,GAAW,WAG7DU,mBAAkB,SAACC,GACjB,OAAOxD,OAAIC,QACT,qBACA,CAAEwD,WAAYD,GACd,oBAKAd,EAAiB,SAAA9B,GACrB,OAAO,IAAIzH,SAAQ,SAAAC,GACjB4G,OAAIC,QAAQ,YAAaW,EAAQ,aAAa5F,MAAK,SAAA4H,GACjD,IAAMc,EAAad,EAASe,QAAO,SAAApB,GAAO,MAAuB,OAAnBA,EAAQqB,UACtD,GAAIF,EAAWtM,OAAQ,CAGrB,IAAMyM,EACJ,mBACAH,EAAWtM,OADX,8DAIF0M,MAAMD,GAERzK,EAAQwJ,UAKC9C,U,0FCnNmG,W,IAAqB,OAACiE,EAAG,W,OAAC,QAAS,cAASC,EAAO,Q,MAACA,C,aAAmCC,OAAmC,GAAC,CAACC,OAAM,YAA+BC,OAA9BrH,EAAOsH,iBAA+B,EAAC,YAAAD,MAAa,KAAE,a,MAA4BE,CAA8B,0BAAIC,SAAQF,SAAO,GAA0DG,EAAM,qBAAyB,WAAW,sB,CAA2B,YAAe,mBAAK,eAAuN,OAAvN,U,MAAC,CAAc,QAAW,YAAG,mBAACL,UAAM,GAACpH,aAAiB,MAACqH,SAAS,G,SAAyB,I,MAAME,CAAkB,cAAG,SAAS,SAAU,GAACG,QAAY,GAAsCA,WAAY,WAAwB,QAAQ,C,YAAW,yB,CAAC,U,YAAkC,UAAmC,OAAIJ,KAAO,SAA0FG,MAAM,GAAC,YAAe,kBAAM,sC,CAAK,SAAS,KAAAE,KAAST,kBAAO,6C,MAACA,C,aAAmCU,OAAqC,IAAIJ,OAAQF,SAAeO,GAA6D,OAAPJ,EAAM,iBAASH,EAAIQ,cAAU,yB,CAA6B,SAAY,GAAE,iD,MAAC,CAA8B,mBAACV,SAAM,GAACpH,SAAW+H,GAAOV,UAAS,G,aAA0BW,gB,MAAKT,CAAkB,cAAIC,SAAG,SAAe,GAACC,EAAM,SAA+B,sBAAwD,SAAY,C,MAAK,CAAkB,QAAW,GAAE,eAAC,aAAW,eAAG,sBAACL,UAAM,KAACpH,KAAOsH,WAAiBD,SAAS,G,SAAoBY,I,MAAiBV,CAAwB,oBAAKD,SAAIP,SAAsB,GAAEU,EAAM,eAAe,4BAA8DC,WAAY,UAAwB,MAAK,CAASA,e,CAA0B,KAAM,IAAC,EAAQ,sC,YAAS,yBAAG,WAACT,YAAG,O,MAAC,C,KAA+B,S,MAAyBK,IAAgC,IAAIA,MAAO,SAAeQ,GAAqDL,OAAtBC,EAAW,iBAAiB,gC,CAA4B,SAAYJ,EAAIS,KAAK,GAAKT,SAAIW,iBAAW,sBAAE,MAAMC,CACxiE,cACGC,SAEJ,UAAiBA,UAAe,gB,mFC+EjB,GACflJ,KAAA,kBAEAmJ,MAAA,CACAC,UAAA,CACAjL,KAAAkL,OACAC,QAAA,IAEAC,UAAA,CACApL,KAAAqL,QACAF,SAAA,IAIAzO,KAAA,kBACA4O,MAAA,GACAC,YAAA,EACAC,YAAA,EACAC,iBAAA,EACAd,MAAA,GACAE,YAAA,GACAlB,SAAA,GACA+B,cAAAC,OAAAC,aACAC,WAAAF,OAAAG,mBACAC,cAAAJ,OAAAI,cACAC,mBAAA,IAGAC,QAAA,WACA,KAAAX,MAAA,KAAAL,WAGAiB,QAAA,CACAC,KAAA,WACA,KAAAX,YAAA,EACA,KAAAD,YAAA,GAEAxB,YAAA,eAAA7F,EAAA,KACAkI,EAAA,KAAA1B,GAAA,mBACA2B,OAAAC,mBAAA,KAAAhB,MAAAc,GAAAtL,MAAA,WACAoD,EAAAqH,YAAA,EACArH,EAAAsH,YAAA,MAGAhB,cAAA,eAAA/F,EAAA,KACA,KAAAkF,SAAA,GACA0C,OACAE,mBAAA,KAAAjB,MAAA,KAAAX,MAAA,KAAAE,aACA/J,MAAA,WACA2D,EAAA+H,eAEAtG,OAAA,SAAA3F,GACAA,EAAAkM,UAAAlM,EAAAkM,SAAAC,OACA,MAAAnM,EAAAkM,SAAAC,OACAjI,EAAAkF,SAAAlF,EAAAiG,GAAA,eACA,MAAAnK,EAAAkM,SAAAC,OACAjI,EAAAkF,SAAAlF,EAAAiG,GAAA,iBAEAd,MAAArJ,EAAAkM,SAAAE,YAGA/C,MAAAnF,EAAAiG,GAAA,0BAIA8B,UAAA,WACA,KAAAI,MAAA,WAAAtB,MAAA,KAAAA,MAAAuB,SAAA,KAAAhC,iBCrJwW,I,YCOpWiC,EAAY,eACd,EACA,EACA/B,GACA,EACA,KACA,KACA,MAIa,OAAA+B,E,ou5BCfTC,EAAW,CACfvK,IAAG,SAACqD,GACF,OAAO,IAAI5G,SAAQ,SAAAC,GACjB4G,OAAIC,QAAQ,aAAc,CAAEC,GAAIH,GAAM,WAAW/E,MAAK,SAAAkM,GACpD9N,EAAQ8N,EAAO,WAIrBC,WAAU,SACRtE,EACAvC,EACAC,GAGA,IAFAC,EAASC,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,GACZC,EAAQD,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,IAAAA,UAAA,GAEFG,EAAS,CACb4B,SAAUK,EACVhC,OAAQ,CACNC,SAAUP,EACVQ,QAAST,GAEXU,WAAYR,EACZS,eAAgBP,GAElB,OAAOV,OAAIC,QAAQ,gBAAiBW,IAEtCwG,cAAa,SACXvE,EACAwE,EACA/G,EACAC,GAGA,IAFAC,EAASC,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,GACZC,EAAQD,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,IAAAA,UAAA,GAEFG,EAAS,CACb4B,SAAUK,EACVhC,OAAQ,CACNC,SAAUP,EACVQ,QAAST,GAEXU,WAAYR,EACZS,eAAgBP,EAChByB,MAAOkF,EACPjF,YAAY,GAEd,OAAOpC,OAAIC,QAAQ,eAAgBW,IAErC0G,KAAI,SAACvH,EAAIhE,GAAuC,IAAjCgC,EAAU0C,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,GAAI8G,EAAS9G,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,GACpCG,EAAS,CACb4G,OAAQ,CACNtH,GAAIH,EACJ0H,KAAM1L,EACNmF,SAAUnD,EACV2J,SAAUH,IAGd,OAAOvH,OAAIC,QAAQ,cAAeW,IAEpCzC,OAAM,SAACiF,EAAQuE,GACb,IAAM5J,EAAa4J,EAAgB,GAAKxG,OAAKC,wBACvCR,EAAS,CAAEM,SAAUnD,GAC3B,OAAOiC,OAAIC,QAAQ,cAAeW,EAAQ,WAAW,EAAMwC,IAE7DwE,WAAU,SAAC/E,EAASgF,GAClB,IAAMjH,EAAS,CAAE4B,SAAUK,EAASiF,UAAWD,GAC/C,OAAO7H,OAAIC,QAAQ,aAAcW,IAEnCmH,cAAa,SAAClF,EAASgF,GACrB,IAAMjH,EAAS,CAAE4B,SAAUK,EAASiF,UAAWD,GAC/C,OAAO7H,OAAIC,QAAQ,cAAeW,IAEpCzD,OAAM,SAACpB,GAAuC,IAAjCgC,EAAU0C,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,GAAIuH,EAASvH,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,GACnC1C,IACHA,EAAaoD,OAAKC,yBAEpB,IAAMR,EAAS,CACb4G,OAAQ,CACNC,KAAM1L,EACNmF,SAAUnD,EACV2J,SAAUM,IAGd,OAAO,IAAI7O,SAAQ,SAACC,EAASC,GAC3B2G,OACGC,QAAQ,WAAYW,EAAQ,UAAU,GAAM,GAC5C5F,MAAK,SAAAiN,GACJ7O,EAAQ6O,MAET7H,OAAM,SAAA3F,GACLpB,EAAOoB,UAWfwI,OAAM,SAAClD,GAA2B,IAAvBmI,IAAczH,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,KAAAA,UAAA,GACjBG,EAAS,CACbV,GAAIH,EACJoI,eAAgBD,GAElB,OAAO,IAAI/O,SAAQ,SAACC,EAASC,GAC3B2G,OACGC,QAAQ,cAAeW,EAAQ,MAAM,GAAM,GAC3C5F,MAAK,WACJ5B,OAEDgH,OAAM,SAAA3F,GACLpB,EAAOoB,UAQf2N,cAAa,SAACC,GACZ,OAAO,IAAIlP,SAAQ,SAACC,EAASC,GAC3B,IAAMuH,EAAS,CAAE0H,UAAWD,GAC5BrI,OACGC,QAAQ,iBAAkBW,EAAQ,MAAM,GAAM,GAC9C5F,MAAK,WACJ5B,OAEDgH,OAAM,SAAA3F,GACLpB,EAAOoB,UAIf8N,UAAS,SAACpF,EAAK+E,GACb,IAAMtH,EAAS,CACbyC,IAAKF,EACLgF,eAAgBD,GAElB,OAAO,IAAI/O,SAAQ,SAACC,EAASC,GAC3B2G,OACGC,QAAQ,eAAgBW,EAAQ,MAAM,GAAM,GAC5C5F,MAAK,WACJ5B,OAEDgH,OAAM,SAAA3F,GACLpB,EAAOoB,UAIf+N,mBAAkB,SAAC3F,GACjB,OAAO7C,OAAIC,QACT,sBACA,CAAEuC,SAAUK,GACZ,kBAKSoE,U,4HC7JTwB,EAAoB,CACxBtK,OAAM,WACJ,IAAMuK,EAASvH,OAAKC,wBACdR,EAAS8H,EAAS,CAAExH,SAAUwH,GAAW,KAC/C,OAAO,IAAIvP,SAAQ,SAAAC,GACjB4G,OAAIC,QAAQ,YAAaW,EAAQ,SAAS5F,MAAK,SAAA2N,GAE7C,IAAMC,EAAkBD,EACrBhF,QAAO,SAAAkF,GACN,MAAyC,MAAlCA,EAASC,QAAQC,OAAO,EAAG,MAEnC/G,KAAI,SAAA6G,GACH,IAAMG,EAAa,IAAIC,OAEvB,OADAD,EAAWE,iBAAiBL,GACrBG,EAAWtM,SAEtBtD,EAAQwP,UAKdzL,OAAM,SAAC0L,EAAU9K,GACf,IAAM6C,EAAS,CACbuI,IAAK,CACH1B,KAAMoB,EAAS9M,KACf+M,QAASM,EAAmBP,GAC5B3H,SAAUnD,IAGd,OAAOiC,OAAIC,QAAQ,QAASW,IAG9BqC,OAAM,SAAC4F,GACL,IAAMjI,EAAS,CAAEyI,MAAOR,EAAS9I,IACjC,OAAOC,OAAIC,QAAQ,WAAYW,IAGjC0I,OAAM,SAACT,EAAU9K,GACf,IAAM6C,EAAS,CACbuI,IAAK,CACHE,MAAOR,EAAS9I,GAChB0H,KAAMoB,EAAS9M,KACf+M,QAASM,EAAmBP,GAC5B3H,SAAUnD,IAGd,OAAOiC,OAAIC,QAAQ,WAAYW,KAI7BwI,EAAqB,SAAAP,GACzB,IAAMU,EAAM,CACVC,UAAWX,EAASW,UACpBC,KAAMZ,EAASY,KACfC,WAAYb,EAASa,WACrBC,cAAed,EAASc,cACxBC,gBAAiBf,EAASe,iBAE5B,OAAOC,KAAKC,UAAUP,IAGTd,U,yIC5DTzI,EAAM,CACVC,QAAS,SACP8J,GAQG,IAPHnJ,EAAMH,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,KACTuJ,EAAWvJ,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,KACdwJ,IAAcxJ,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,KAAAA,UAAA,GACd2C,EAAM3C,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,IAAAA,UAAA,GACNyJ,EAAQzJ,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,KACX0J,EAAO1J,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,GACVE,EAAWF,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,KAEd,OAAO,IAAItH,SAAQ,SAACC,EAASC,GAC3B,IAAI+Q,EAAM,GAERA,EADc,UAAZD,EACIE,OAAOC,eAEPD,OAAOE,UAEfH,GAAOL,EACP,IAAMS,EAAYrJ,OAAKsJ,eACnBC,EAAc,CAChBC,OAAQ,OACRP,IAAKA,EACLQ,QAAS,CAEP,gBAAiB,MAEnBjK,YAAaA,GAEXC,EACF8J,EAAY9T,KAAOiT,KAAKC,UAAUlJ,GACzBsJ,IACTQ,EAAY9T,KAAOsT,EACnBQ,EAAYE,QAAQ,gBAAkB,uBAEpCJ,IACFE,EAAYE,QAAQC,UAAYL,GAGlCM,IAAMJ,GACH1P,MAAK,SAAAmF,GAEF/G,EADE4Q,EACM7J,EAAIvJ,KAAKoT,GAET7J,EAAIvJ,SAGfwJ,OAAM,SAAA3F,GAAO,IAAAsQ,EAAAC,EAAAC,EAAAC,EACiB,OAAb,QAAZH,EAAAtQ,EAAIkM,gBAAQ,IAAAoE,OAAA,EAAZA,EAAcnE,SAAkBqD,EAClC9I,OAAKgK,eAGS,QAAhBH,EAAIvQ,EAAIkM,gBAAQ,IAAAqE,GAAM,QAANC,EAAZD,EAAcpU,YAAI,IAAAqU,GAAQ,QAARC,EAAlBD,EAAoBG,cAAM,IAAAF,GAA1BA,EAA4B9T,QAC9BiU,EAAkB5Q,EAAIkM,SAAS/P,KAAKwU,QACpCE,EAAoB7Q,GACf2I,GACHU,MAAMyH,EAAiB9Q,IAEzBpB,EAAOoB,KAEF2I,GACHoI,EAAiB/Q,GAEnBpB,EAAOoB,YAOb6Q,EAAsB,SAAA7Q,GAE1B,IAAME,EAAO8Q,SAAShR,EAAIkM,SAAS/P,KAAKwU,OAAO,GAAGM,KAAM,IAC3C,MAAT/Q,EAEFF,EAAIkR,WAAY,EACE,MAAThR,EAETF,EAAImR,YAAa,EACC,MAATjR,EAETF,EAAIoR,OAAQ,EACM,MAATlR,IAETF,EAAIqR,QAAS,IAIXT,EAAoB,SAAAU,GACxB,IAAMC,EAAqB,6CAC3BD,EAAOE,SAAQ,SAAAxQ,GACTA,EAAMyQ,UAAYF,GAAqC,MAAfvQ,EAAMiQ,OAChD5H,MAAMqI,OAAKpP,EAAE,sBACba,OAAOwO,SAAS9S,KAAO,SAKvBkS,EAAmB,SAAAa,GAClBC,UAAUC,OAEJF,IAAaA,EAAS1F,SAC/B7C,MAAMuI,EAASpN,YAEf6E,MAAMqI,OAAKpP,EAAE,iBAJb+G,MAAMqI,OAAKpP,EAAE,0BAQXwO,EAAmB,SAAAc,GACvB,IAAM1P,EAAI0P,EAAS1F,SACflM,EAAM0R,OAAKpP,EAAE,mBAAqB,QAStC,OARIJ,EAAE/F,MAAQ+F,EAAE/F,KAAKwU,OAAOhU,OAC1BuF,EAAE/F,KAAKwU,OAAOa,SAAQ,SAAAxQ,GACpBhB,GAAOgB,EAAMiQ,KAAO,IAAMjQ,EAAM+Q,MAAQ,UAG1C/R,EAAMkC,EAAEkK,WAEVpM,GAAO,OAAS0R,OAAKpP,EAAE,yBAChBtC,GAGMuF,U,oCC5Hf,IAAMyM,EAAU,CACdC,aAAY,SAACtP,EAAKuP,GAChBC,aAAaC,QAAQzP,EAAKuP,IAE5BG,aAAY,SAAC1P,GAIX,OAAOQ,OAAOgP,aAAaG,QAAQ3P,IAErC4P,eAAc,SAAC5P,EAAKuP,GAClB/O,OAAOqP,eAAeJ,QAAQzP,EAAKuP,IAErCO,eAAc,SAAC9P,GACb,OAAOQ,OAAOqP,eAAeF,QAAQ3P,KAI1BqP,U,4DClBTU,EAAW,CACfC,IAAG,SAACC,EAAWzW,GACb,IAAMgK,EAAS,CACb0M,UAAWD,EACXE,OAAQ3W,GAEV,OAAOoJ,OAAIC,QAAQ,QAASW,EAAQ,MAAM,GAAO,KAItCuM,ICbTK,EAAiB,CAGrBH,UAAW,CACTI,6BAA8B,+BAC9BC,kBAAmB,oBACnBC,sBAAuB,wBACvBC,qBAAsB,uBACtBC,6BAA8B,+BAC9BC,kBAAmB,oBACnBC,kBAAmB,oBACnBC,gBAAiB,kBACjBC,iBAAkB,mBAClBC,kBAAmB,oBACnBC,gBAAiB,kBACjBC,eAAgB,iBAChBC,aAAc,eACdC,YAAa,cACbC,UAAW,cAIAf,ICjBTH,EAAYG,EAAeH,UAE3BmB,EAAc,CAClBD,UAAS,SAACE,EAAUC,EAAQC,GAC1BC,EAAUvB,EAAUkB,UAAW,CAC7BE,SAAUA,EACVC,OAAQA,EACRC,WAAYA,KAIhBL,YAAW,SAACO,GACVD,EAAUvB,EAAUiB,YAAa,CAAEQ,UAAWD,KAGhDpB,6BAA4B,WAC1BmB,EAAUvB,EAAUI,+BAGtBC,kBAAiB,WACfkB,EAAUvB,EAAUK,oBAGtBC,sBAAqB,WACnBiB,EAAUvB,EAAUM,wBAGtBM,iBAAgB,SAACc,GACfH,EAAUvB,EAAUY,iBAAkBe,EAAoBD,KAG5DnB,qBAAoB,SAACmB,GACnBH,EAAUvB,EAAUO,qBAAsBoB,EAAoBD,KAGhElB,6BAA4B,WAC1Be,EAAUvB,EAAUQ,+BAGtBC,kBAAiB,WACfmB,EAAe5B,EAAUS,oBAG3BC,kBAAiB,WACfa,EAAUvB,EAAUU,oBAGtBC,gBAAe,WACbiB,EAAe5B,EAAUW,kBAG3BE,kBAAiB,WACfgB,EAAmB7B,EAAUa,oBAG/BC,gBAAe,WACbe,EAAmB7B,EAAUc,kBAG/BC,eAAc,SAACe,GACbP,EAAUvB,EAAUe,eAAgB,CAAEgB,gBAAiBD,KAGzDd,aAAY,WACVO,EAAUvB,EAAUgB,gBAIlBY,EAAiB,SAAC5B,EAAWgC,GACjCT,EAAUvB,EAAW,CAAEgC,QAASA,KAG5BH,EAAqB,SAAC7B,EAAWiC,GACrCV,EAAUvB,EAAW,CAAEiC,OAAQA,KAG3BV,EAAY,SAACvB,EAAWzW,GAC5B,IAAMgK,EAAS2O,EAAuB3Y,GACtC,OAAOuW,EAASC,IAAIC,EAAWzM,IAG3BoO,EAAsB,SAAAD,GAAY,IAAAS,EAAAC,EAChCC,EAAaX,EAASY,MAAMD,WAClC,MAAO,CACLlG,UAAWuF,EAAShT,KACpB6T,QAASb,EAASa,QAClBC,UAAWd,EAASc,UACpBC,UAAWJ,EAAWK,KACtBC,cAAeN,EAAWO,aAC1BC,YAAaR,EAAWS,OACxBC,WAAYrB,EAASY,MAAMS,WAC3BC,aAAoC,QAAvBb,EAAAT,EAASY,MAAMW,gBAAQ,IAAAd,OAAA,EAAvBA,EAAyBa,cAAe,GACrDE,sBAA6C,QAAvBd,EAAAV,EAASY,MAAMW,gBAAQ,IAAAb,OAAA,EAAvBA,EAAyBc,uBAAwB,KAIrEhB,EAAyB,SAAA3Y,GAC7B,IAAI4Z,EAAW,GACf,IAAK,IAAMpT,KAAOxG,EACZ4Z,IACFA,GAAY,MAEdA,GAAYpT,EAAM,IAAMxG,EAAKwG,GAE/B,OAAOoT,GAGMhC,U,kPCnGfiC,OAAIC,IAAIC,QAER,IAAMC,EAAwB,cAEf,WAAID,OAAKE,MAAM,CAC5BC,MAAO,CACLC,YAAa,KACb7J,OAAQ,KACRzI,YAAa,KACbuS,eAAgB,KAChBC,OAAQ,GACRC,eAAgB,GAChBC,UAAW,KACXrN,MAAO,CACLsN,eAAgB,GAChBC,iBAAkB,GAClBC,SAAU,KACVC,UAAW,GACX3B,SAAS,GAEX4B,YAAa,CACX/H,KAAM,GACNgI,SAAS,EACTC,UAAW,CACTjI,KAAM,GACNkI,KAAM,KAGVC,QAAS,GACTC,kBAAmB,GACnBC,MAAO,GACPC,wBAAyB,GACzBC,sBAAuB,MAEzBC,UAAW,CACTC,yBAAwB,SAACpB,EAAOqB,GACzBtT,OAAWU,SAAS4S,KAGzBrB,EAAMkB,sBAAwBG,EAC9B1F,OAAQC,aAAakE,EAAuBuB,KAE9CC,aAAY,SAACtB,EAAOK,GAClBL,EAAMK,UAAYA,GAEpBkB,eAAc,SAACvB,EAAOwB,GACG,kBAAZA,GACTxB,EAAMU,YAAY/H,KAAO6I,EACzBxB,EAAMU,YAAYE,UAAY,OAE9BZ,EAAMU,YAAY/H,KAAO6I,EAAQ7I,KAC7B6I,EAAQZ,YACVZ,EAAMU,YAAYE,UAAYY,EAAQZ,YAG1CZ,EAAMU,YAAYC,SAAU,GAE9Bc,kBAAiB,SAACzB,EAAOI,GACvBJ,EAAMI,eAAiBA,GAEzBsB,eAAc,SAAC1B,EAAOC,GACpBD,EAAMC,YAAcA,GAEtB0B,UAAS,SAAC3B,EAAO5J,GACf4J,EAAM5J,OAASA,GAEjBwL,eAAc,SAAC5B,EAAOrS,GACpBqS,EAAMrS,YAAcA,GAEtBkU,gBAAe,SAAC7B,EAAOlB,GACrBkB,EAAMhN,MAAM8L,QAAUA,GAExBgD,UAAS,SAAC9B,EAAOG,GACfH,EAAMG,OAASA,GAEjB4B,uBAAsB,SAAC/B,EAAO5J,GAC5B4J,EAAMhN,MAAMsN,eAAiBlK,GAE/B4L,yBAAwB,SAAChC,EAAOlO,GAC9BkO,EAAMhN,MAAMuN,iBAAmBzO,GAEjCmQ,kBAAiB,SAACjC,EAAOS,GACvBT,EAAMhN,MAAMyN,UAAYA,GAE1ByB,wBAAuB,SAAClC,GACtB,IAAMc,EAAUvH,OAAO4I,sBAAsBrB,QAC7Cd,EAAMc,QAAUA,GAElBsB,qBAAoB,SAACpC,EAAOnW,GAC1BmW,EAAMe,kBAAoBlX,GAE5BwY,yBAAwB,SAACrC,EAAOjO,GAC9BiO,EAAMhN,MAAMsN,eAAiBN,EAAMhN,MAAMsN,eAAezN,QACtD,SAAAyP,GACE,OAAOA,EAASlT,KAAO2C,MAI7BwQ,iBAAgB,SAACvC,EAAOwC,GACtBxC,EAAMhN,MAAMwN,SAAWgC,GAEzBC,iBAAgB,SAACzC,EAAO0C,GACtB,IAAMC,EAAc,SAAAC,GAClB5C,EAAMhN,MAAMyN,UAAUoC,QAAQD,IAEhCF,EAASI,QAAU,GACfJ,EAASK,QAAUL,EAASM,OAW9BhU,OAAWyD,mBAAmB,CAACiQ,EAAStT,KAAKlF,MAAK,SAAAmF,GAC5CA,EAAI/I,SACNoc,EAASI,QAAUzT,EAAI,GAAGyT,SAE5BH,EAAYD,MAGdC,EAAYD,IAGhBO,mBAAkB,SAACjD,EAAOvO,GACxBuO,EAAMhN,MAAMuN,iBAAiB3Z,KAAK6K,IAEpCyR,oBAAmB,SAAClD,EAAOvO,GACzBuO,EAAMhN,MAAMyN,UAAYT,EAAMhN,MAAMyN,UAAU5N,QAAO,SAAA6P,GACnD,OAAIA,EAASS,QAAQlY,OAASwG,EAAQ0R,QAAQlY,OACd,UAA1ByX,EAASS,QAAQlY,KACZyX,EAASS,QAAQpM,YAActF,EAAQ0R,QAAQpM,WAC7C2L,EAASS,QAAQlY,KACnByX,EAASS,QAAQlU,KAAOwC,EAAQ0R,QAAQlU,SAOvDmU,6BAA4B,SAACpD,EAAOjO,GAClCiO,EAAMhN,MAAMyN,UAAY4C,EACtBrD,EAAMhN,MAAMyN,UACZ,QACA1O,GAEFiO,EAAMhN,MAAMyN,UAAY4C,EACtBrD,EAAMhN,MAAMyN,UACZ,aACA1O,IAGJuR,+BAA8B,SAACtD,EAAOjJ,GACpCiJ,EAAMhN,MAAMyN,UAAY4C,EACtBrD,EAAMhN,MAAMyN,UACZ,UACA1J,IAGJwM,oBAAmB,SAACvD,GAClBA,EAAMhN,MAAMyN,UAAY,GACxBT,EAAMhN,MAAMsN,eAAiB,GAC7BN,EAAMhN,MAAMuN,iBAAmB,IAEjCiD,WAAU,SAACxD,GACTA,EAAMhN,MAAMwN,SAAW,KACvBR,EAAMhN,MAAMyN,UAAY,GACxBT,EAAMhN,MAAMsN,eAAiB,GAC7BN,EAAMhN,MAAMuN,iBAAmB,IAEjCkD,eAAc,SAACzD,GAKbA,EAAME,eAAiB1S,KAAKD,OAE9BmW,SAAQ,SAAC1D,EAAOgB,GACdhB,EAAMgB,MAAQA,GAEhB2C,2BAA0B,SAAC3D,EAAO4D,GAChC5D,EAAMiB,wBAA0B2C,IAGpCC,QAAS,CACPC,sBAAqB,SAAC9D,GACpB,SAAIA,EAAMC,cAAeD,EAAMC,YAAY8D,QAAQzd,SAC1C0Z,EAAMC,YAAY8D,QAAQC,MAC/B,SAAAC,GAAa,OAAkC,IAA9BA,EAAcC,gBAKrCC,yBAAwB,SAACnE,GACvB,GAAoC,OAAhCA,EAAMkB,sBAAgC,CACxC,IAAIlV,EAAQ2P,OAAQK,aAAa8D,GAEjC,OADA9T,EAAQ2O,SAAS3O,EAAO,IACjBA,GAAgBuN,OAAO6K,sBAEhC,OAAOpE,EAAMkB,uBAGfmD,gBAAe,SAACrE,GACd,OAAIA,EAAMC,YACDD,EAAMC,YAAYqE,OAAOC,WAE3B,IAETC,0BAAyB,SAACxE,GAAO,IAAAyE,EAG/B,UAA2B,QAAjBA,EAAAzE,EAAMC,mBAAW,IAAAwE,OAAA,EAAjBA,EAAmBC,kBAAkBpe,QAAS,IAE1Dqe,eAAc,SAAC3E,GACb,OAAIA,EAAMC,YACDD,EAAMC,YAAY2E,UAEpB,IAETC,eAAc,SAAC7E,GACb,QAAIA,EAAMC,aACDD,EAAMC,YAAYqE,OAAOQ,OAIpCC,yBAAwB,SAAC/E,GACvB,QAAIA,EAAMC,aACDD,EAAMC,YAAYqE,OAAOU,QAAQC,gBAY5CC,2BAA0B,SAAClF,GACzB,OAAIA,EAAMC,YACD,IAAMD,EAAMC,YAAYkF,UAE1B,IAMTC,6BAA4B,SAACpF,GAC3B,IAAMC,EAAcD,EAAMC,YAC1B,QAAIA,IAIEA,EAAYqE,OAAOQ,MACd7E,EAAYyE,kBAAkBpe,OAAS,EAIzC2Z,EAAYqE,OAAOe,WAAW/e,OAAS,IAIlDgf,0BAAyB,SAACtF,GACxB,IAAMuF,EAAalV,OAAKC,wBACxB,IAAKiV,EACH,MAAO,GAET,IAAKvF,EAAMrS,YAAYrH,OACrB,MAAO,GAET,IAAM2G,EAAa+S,EAAMrS,YAAY6X,MACnC,SAAAC,GAAG,OAAIA,EAAIC,aAAeH,KAE5B,OAAOtY,EAAaA,EAAW0J,KAAO,KAG1CgP,QAAS,CASPC,gBAAe,SAACC,GACd,OAAO,IAAIxd,SAAQ,SAAAC,GACjBwd,OAASC,aAAa,KAAK7b,MAAK,SAAA8b,GAC9BH,EAAQI,OAAO,eAAgBD,GAC/B1d,WAIN4d,qBAAoB,SAACL,GACnBlO,OAAkBtK,SAASnD,MAAK,SAAA2N,GAC9BgO,EAAQI,OAAO,oBAAqBpO,OAGxCsO,kBAAiB,SAACN,EAASO,GACzB,OAAO,IAAI/d,SAAQ,SAAAC,GACjB+H,OAAKgW,WAAWD,GAAkBlc,MAAK,SAAA+V,GACrC4F,EAAQI,OAAO,iBAAkBhG,GACjC3X,EAAQ2X,UAIdqG,mBAAkB,SAACT,GACjB,OAAO,IAAIxd,SAAQ,SAAAC,GACjBud,EAAQU,SAAS,qBAAqBrc,MAAK,SAAA+V,GACzC3X,EAAQ2X,EAAYqE,OAAOkC,qBAIjCC,aAAY,SAACZ,EAASa,GACpB,OAAO,IAAIre,SAAQ,SAAAC,GACjB,IAAIqe,EAAe,CAAEvQ,OAAQ,MAC7BD,OAAS9I,OAAOqZ,GAAQxc,MAAK,SAAAkM,GAC3ByP,EAAQI,OAAO,YAAa7P,GAC5BuQ,EAAavQ,OAASA,EACtB9N,EAAQqe,UAIdC,aAAY,SAACf,GACX,OAAO,IAAIxd,SAAQ,SAAAC,GACbud,EAAQ7F,MAAMG,OAAO7Z,OAEvBgC,EAAQud,EAAQ7F,MAAMG,QAEtB0G,OAASC,YAAY5c,MAAK,SAAAiW,GACxB0F,EAAQI,OAAO,YAAa9F,GAC5B7X,EAAQ6X,UAKhB4G,kBAAiB,SAAClB,GAChB,OAAO,IAAIxd,SAAQ,SAAAC,GACjB2E,OAAWI,SAASnD,MAAK,SAAAyD,GACvBkY,EAAQI,OAAO,iBAAkBtY,GACjCrF,EAAQqF,WAKhB9G,QAAS,KAGX,IAAMwc,EAAkB,SAAC5C,EAAWuG,EAAYC,GAC9C,OAAOxG,EAAU5N,QAAO,SAAA6P,GACtB,QACEA,EAASS,QAAQlY,OAAS+b,GAC1BtE,EAASS,QAAQlU,KAAOgY,Q,uBClX9B,IAAI/V,EAAM,CACT,YAAa,OACb,YAAa,OACb,YAAa,OACb,YAAa,OACb,YAAa,QAId,SAASgW,EAAeC,GACvB,IAAIlY,EAAKmY,EAAsBD,GAC/B,OAAO1f,EAAoBwH,GAE5B,SAASmY,EAAsBD,GAC9B,IAAI1f,EAAoBgE,EAAEyF,EAAKiW,GAAM,CACpC,IAAIjf,EAAI,IAAI0B,MAAM,uBAAyBud,EAAM,KAEjD,MADAjf,EAAE2B,KAAO,mBACH3B,EAEP,OAAOgJ,EAAIiW,GAEZD,EAAeG,KAAO,WACrB,OAAO9gB,OAAO8gB,KAAKnW,IAEpBgW,EAAe5e,QAAU8e,EACzBpf,EAAOD,QAAUmf,EACjBA,EAAejY,GAAK,Q,oDC1BwBuE,EAAO8T,WAAS,MAAW,KAAiB5T,UAAY,GAAa,OAAM,OAAU,EAAG,MAAKJ,CAAkDG,YAAM,e,CAAC,WAAe,GAAC,IAAE,8B,MAAC,CAAiB,iBAAI,MAAO,cAE7OU,W,KCOW,GACflJ,KAAA,iBACAmJ,MAAA,CACAuE,KAAA,CACApE,QAAA,IAEAgT,WAAA,CACAne,KAAAqL,QACAF,SAAA,IAGAzO,KAAA,kBACA0hB,MAAA,IAEAnS,QAAA,eAAA/H,EAAA,KACA,KAAAia,WAEApc,YAAA,WACAmC,EAAAka,MAAA,IACA,KAEA,KAAAA,MAAA,IC9BuW,I,wBCQnWtR,EAAY,eACd,EACA,EACA/B,GACA,EACA,KACA,WACA,MAIa,OAAA+B,E,gNCnB6C,EAAU,WACrE,WACG/B,UAAe,GAEnB,OAASsT,SAAQtT,qBAAe,+D,qMCJ+QV,EAAM,W,IAAC,EAA6B,OAACR,EAAG,W,OAAC,QAAQ,UAASC,C,MAAQA,C,eAAuCI,GAAU,OAAC,eAAIE,KAAG,GAA2OC,IAAM,Y,CAAc,gBAAQ,C,MAAC,CAAU,kCAA4BL,EAAK,OAAC,C,MAAM,CAAcC,cAAS,gB,GAA+B,CAACE,eAAW,GAAQ,oBAAM,EAAC,QAAS,aAA2FG,SAAY,8KAAQ,MAAMQ,CAAkER,QAAY,GAASJ,IAAO,GAA+PI,QAAmBD,oBAAM,Q,MAA8B,CAA4B,QAAU,OAAI,SAAQ,SAAE,GAAC,SAAc,GAAyB,WAAC,WAA4B,WAACL,YAAM,S,CAACpH,SAAW0b,UAAmB,W,YAAU,S,GAAgBpU,GAAIoU,WAAkB,cAAI,iB,YAAC,Q,CAACnU,SAAW,+NAAoB,mBAAG,MAAKoU,CAAiIlU,MAAM,mBAAC,QAAY,gBAAwB,YAAoC,SAAG,cAAC,uBAA2B,IAAI,OAAO,EAAI,e,MAA8C,CAAU,2BAAID,SAAG,SAAoB,GAACC,EAAM,sBAA6B,WAAQ,wBAASL,EAAM,gG,MAAM,CAAwBC,aAAS,qB,cAAoBuU,uB,GAAsBrU,CAA6B,2BAAiD,IAAOC,GAAG,QAAa,GAAC,oB,MAAKpN,CAAEqN,MAAM,K,GAA4B,OAAO,C,MAAG,CAACR,cAAG,c,MAAQ,S,MAAgD,CAAC,yBAAE,SAAK,SAAsBO,GAAsIF,EAAIuU,iBAAmBC,GAA2D,WAAW,qB,CAAkB,uBAAc,cAAkB,OAAC,UAACC,MAAqBzb,MAAI,CAAc,cAAC,aAAW,KAAQkH,IAA2GwU,IAAa,MAAK,SAAgB,GAASF,6BAAoE,kGAAG,EAAC,yD,MAAC,C,YAAoCG,GAAmB,SAAC,kCAAgOxU,YAAM,OAAC,gBAAU,cAAI,8E,OAA0B,IAAyC,qBAAC,6CAAE,MAAK,CAA8OA,KAAM,I,GAAiC,CAAU,kBAAI,gC,CAA6D,sJAAC,OAAID,KAAG,I,GAA2M,CAAU,kBAAI,2C,CAA6D,uKAAC,OAAIA,cAAG,kBAAqMC,KAAM,IAAU,GAAC,CAAG,MAAC,YAAC,OAAQH,EAAI4U,4BAAsOzU,GAAK,OAAC,wH,MAAC,CAAU,S,GAAK,C,MAAgCH,SAAe,wCAAqMG,GAAK,OAAC,2H,MAAC,CAAmC,KAAO,IAAIR,GAAG,CAAC,MAAQ,gB,CAAoC,mJAAC,OAAIO,KAAG,IAEloJW,IAEJ,MAAe,SAAEA,G,ocCJ8F4T,a,IAAqBzb,EAAI,K,EAAc,EAAC,MAAA6b,G,OAAgB,EAALlV,OAAEmV,C,MAAI,C,MAAgC,G,OAAE,I,YAAiB5U,EAAG,KAAoC,gBAAG,eAAM,IAAC,EAAQ,EAAI,GAAsBC,MAAM,gBAAC,MAAQ,CAAS,UAAyB,4C,CAAmD,oBAAC,OAAID,MAAG,Y,CAAuE,SAAQ,C,GAAiB,CAAyB,kBAAC,2B,CAAmF,SAAQ6U,GAASnV,mBAAO,a,GAAC,CAAyB,kBAAC,2B,CAAoF,SAAQmV,GAASnV,wBAAO,a,GAAC,CAAyB,kBAAC,2B,CAA4E,SAAQmV,GAASnV,yBAAO,a,GAAC,CAAyB,kBAAC,2BAE55BiB,UAAoB,iCAExB,I,8GCJMmU,EAAU,CACdC,YAAW,SAACC,GACV7f,SAAS6f,MAAQA,IAINF,ICuCA,GACfrd,KAAA,iBACAqK,QAAA,CACAmT,SAAA,SAAAC,GACArN,OAAAqN,SACArY,OAAAsY,UAAAD,GACA,KAAAE,SAAAC,KAAAC,QAAAvP,OAAAwP,mBACAC,OAAA/C,OAAA,2BACAqC,EAAAC,YAAA,KAAAzU,GAAA,kBCrDuW,I,YCOnWoC,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,EAAAA,E,oBClB6C,EAAU,W,IAAczC,EAAM,K,EAAC,EAAM,MAAE,G,OAAC,SAAW,CAAE,MAAC,CAACsU,OAA8Czb,SAAI,I,YAA4B,EAAA8b,GAAA,CAAL3U,WAAK,W,IAAI,S,GAA2BA,SAAM,G,IAAC,IAAW,M,MAAG,gBAACR,MAAG,CAAC,SAAW,IAAW,GAAC,CAA4E,mBAA0B,kEAA8BI,MAAQ,MAAC,G,MAAmB,CAAmC,MAAC,mBAACE,SAAU,SAAC,GAAkB,gCAClf,gCAGD,GAASkU,OAAQtT,gBAAe,c,KCejB,GACflJ,KAAA,cAEAge,SAAA,CACAC,SAAA,WACA,OAAAF,OAAAhJ,MAAAU,cAIApL,QAAA,CACA2S,SAAA,WACAkB,OAAAviB,KAAAoiB,OAAAhJ,MAAAU,YAAAE,UAAAC,SC9BoW,ICOhW,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,I,QClB6BrN,G,UAAO8T,WAAS,MAAU,KAAkB7T,EAAK,EAAC,S,OAAC,SAAY9F,C,MAAY,CAAmB,QAAY,YAAc,YAAW2F,OAAgB,aAAa,aAAC,SAAU,cAAC,SAAW,GAAkB,SAAG,MAAC,oBAAoB,GAAC,CAACF,OAAM,U,MAAsBC,C,MAA6B+V,WAAY,SAAC,YAAC7V,WAAW,GAAa,2B,KCkB/V,G,0FAAA,CACftI,KAAA,oBAEAmJ,MAAA,CACAiV,UAAA,CACA9U,QAAA,OAIA0U,SAAA,CACAtb,YAAA,WACA,IAAAqb,OAAAhJ,MAAAC,YACA,YAEA,IAAAqJ,EAAAN,OAAAhJ,MAAAC,YACA,GAAAqJ,EAAAhF,OAAAQ,MAAA,CACA,IAAAyE,EAAAC,gBAAAF,EAAA5E,mBAKA,OAJA6E,EAAA1G,QAAA,CACAlM,KAAA,KAAA7C,GAAA,sBACA4R,WAAA,KAEA6D,EAEA,OAAAP,OAAAhJ,MAAArS,cAIA7H,KAAA,kBACAsjB,SAAA,OAGA/T,QAAA,WACAzI,QAAA6c,IAAA,KAAAJ,YACA,KAAAA,WAAA,UAAAA,aACA,KAAAD,SAAA,KAAAC,WAEAL,OAAAzC,SAAA,qBACAyC,OAAAzC,SAAA,sBAGAjR,QAAA,CACArD,OAAA,WACA,YAAAmX,UAIA,KAAApT,MAAA,cAAAoT,cChE0W,ICOtW,GAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,M,qBCsLA,IACfne,KAAA,iBACAye,WAAA,CAAAC,qBAAAC,cAAAC,kBAEA/jB,KAAA,kBACA+V,KAAA,KACAiO,OAAA,KACAC,WAAA,EACAC,WAAAzQ,OAAAyQ,WACAC,aAAA,KACAvC,mBAAArX,OAAAC,0BAGA2Y,SAAA,CACApB,YAAA,WACA,QAAAmB,OAAAhJ,MAAAC,aACA+I,OAAAhJ,MAAAC,YAAAqE,OAAAQ,OAIAoF,uBAAA,WACA,OAAAlB,OAAAnF,QAAAW,2BAEAsD,gCAAA,eAAAqC,EACA,eAAAA,EAAAnB,OAAAhJ,MAAAC,mBAAA,IAAAkK,OAAA,EAAAA,EAAA7F,OAAAkC,aAAA4D,aAEAC,aAAA,WACA,OAAArB,OAAAnF,QAAAQ,iBAEAiG,YAAA,WACA,OAAAtB,OAAAnF,QAAAc,gBAEA4F,kBAAA,eAAAC,EACA,eAAAA,EAAAxB,OAAAhJ,MAAAC,mBAAA,IAAAuK,OAAA,EAAAA,EAAAC,cAEAC,gBAAA,eAAAC,EACAhd,EAAA,GACAid,EAAA,QAAAD,EAAA3B,OAAAhJ,MAAAC,mBAAA,IAAA0K,OAAA,EAAAA,EAAArG,OACA,OAAAsG,GAGAjd,EAAA/G,KAAA,CACA+R,KAAA,KAAA7E,GAAA,sBACA9H,MAAA,KAEA4e,EAAAxa,UACAzC,EAAA/G,KAAA,CACA+R,KAAAiS,EAAAC,aACA7e,MAAA4e,EAAAxa,WAGAwa,EAAAvF,WAAAlK,SAAA,SAAAsK,GACA9X,EAAA/G,KAAA,CAAA+R,KAAA8M,EAAA9O,KAAA3K,MAAAyZ,EAAAC,gBAEA/X,GAfA,IAiBAmd,eAAA,eAAAC,EACAC,EAAA,CACA,CACArS,KAAA,KAAA7E,GAAA,SACAmX,KAAA,WACApK,KAAA,UAEA,CACAlI,KAAA,KAAA7E,GAAA,OACAmX,KAAA,cACApK,KAAA,SAuDA,OAnDAmI,OAAAhJ,MAAAC,aACA+I,OAAAhJ,MAAAC,YAAAqE,OAAAkC,aAAA0E,WAEAF,EAAApkB,KAAA,CACA+R,KAAA,KAAA7E,GAAA,qBACAmX,KAAA,kCACApK,KAAA,iBAGAmK,EAAApkB,KAAAK,MAAA+jB,EACA,CACA,CACArS,KAAA,KAAA7E,GAAA,oBACAmX,KAAA,oBACApK,KAAA,eAEA,CACAlI,KAAA,KAAA7E,GAAA,kBACAmX,KAAA,mBACApK,KAAA,sBAKA,QAAAkK,EAAA/B,OAAAhJ,MAAAC,mBAAA,IAAA8K,KAAAzG,OAAAkC,aAAA2E,OACAH,EAAApkB,KAAA,CACA+R,KAAA,KAAA7E,GAAA,SACAmX,KAAA,4BACApK,KAAA,WAIAmK,EAAApkB,KAAAK,MAAA+jB,EACA,CACA,CACArS,KAAA,KAAA7E,GAAA,YACAmX,KAAA,kBACApK,KAAA,aAEA,CACAlI,KAAA,KAAA7E,GAAA,aACAmX,KAAA,cACApK,KAAA,iBAEA,CACAlI,KAAA,KAAA7E,GAAA,QACAmX,KAAA,0BACApK,KAAA,eAIAmK,GAEApD,iBAAA,CACAhc,IAAA,WACA,QAAAqe,aACA,YAAAA,aAEA,IAAA7jB,EAAA,EACAglB,EAAA,KAAAN,eAAAxkB,OACA,IAAAF,IAAAglB,EAAAhlB,IAAA,CACA,IAAAilB,EAAA,KAAAC,OAAAzK,KACA,GAAAwK,IAAA,KAAAP,eAAA1kB,GAAAya,KACA,OAAAza,EAGA,aAEAkW,IAAA,SAAAiP,GACA,KAAAtB,aAAAsB,KAKAlW,QAAA,WACA,KAAA0U,UAAA1Z,OAAAmb,gBAGAlW,QAAA,CACAmW,cAAA,SAAAxe,GACA,OAAAA,GAIAoD,OAAAqb,sBAAAze,IAEAgb,SAAA,SAAApH,GACAsI,OAAAviB,KAAAia,IAEA8K,UAAA,WACA7e,OAAAwO,SAAA9S,KAAA+Q,OAAAqS,gBAEAC,OAAA,WACAxb,OAAAwb,UAEA3D,YAAA,WACA,KAAAU,SAAA7K,MAAA+N,MAAA,KAAAlD,SAAA7K,MAAA+N,KACA,IAAAC,EAAA,KAAAnD,SAAA7K,MAAA+N,KAAA,eACAzb,OAAA2b,kBAAAD,GACArO,QAAAF,YAAAuO,MCjXuW,MCOnW,GAAY,eACd,GACA,EACA,GACA,EACA,KACA,KACA,MAIa,M,qBCDA,IACf9gB,KAAA,MAEAye,WAAA,CACAuC,kBACAC,0BAGAjD,SAAA,CACAkD,kBAAA,WACA,OACA,KAAAC,iBACA7S,OAAA8S,0BACA9S,OAAA+S,iBAIAxmB,KAAA,kBACAsmB,gBAAA,IAEA/W,QAAA,WACA,KAAA+W,eAAA/b,OAAAkc,aACAjE,EAAAC,YAAA,KAAAzU,GAAA,eACA,IAAAiY,EAAA1b,OAAAmc,oBACAT,IACA,KAAAnD,SAAA7K,MAAA+N,KAAA,SAAAC,GAEA,KAAAK,gBACAK,MAGAC,QAAA,WACA,KAAAN,eAAA/b,OAAAkc,eAIAE,GAAA,WACA,IAAAE,EAAAtc,OAAAC,wBAEAD,OAAAuc,iBAAA1iB,MAAA,SAAA2iB,GACA,GAAAA,EAAAC,QAEA7f,QAAAI,SAAAnD,MAAA,SAAAyD,GACA,IAAAof,EAAApf,EAAAqW,MAAA,SAAAzY,GAAA,OAAAA,EAAAma,aAAAiH,KACAI,GACAC,YAGA,CACA,IAAAL,EAMA,YAHA,IAAAE,EAAAlf,YAAArH,QACA+J,OAAAqb,sBAAAmB,EAAAlf,YAAA,KAMA,IAAAkf,EAAAlf,YAAArH,OAQA,YADA0mB,KANA,IAAAD,EAAAF,EAAAlf,YAAAqW,MAAA,SAAAzY,GAAA,OAAAA,IAAAohB,KACAI,GACA1c,OAAAqb,sBAAAmB,EAAAlf,YAAA,SAWAqf,GAAA,WAGA3c,OAAAC,yBAGAD,OAAAqb,sBAAA,KChG8T,MCO1T,GAAY,eACd,GACA,EACAvX,GACA,EACA,KACA,KACA,MAIa,M,6FClBT8Y,GAAK,CACPC,MAAO,SACPC,MAAO,MACPC,aAAc,CACVC,cAAe,8BACfC,YAAa,qBAEjBC,UAAW,CACPC,iBAAkB,mBAClBC,UAAW,CACPC,eAAgB,qBAChBC,cAAe,qBACfC,SAAU,iBACVC,aAAc,mCACdC,mBAAoB,mCACpBC,kBAAmB,oCAEvBC,OAAQ,gBAEZC,WAAY,CACRT,iBAAkB,mBAClBU,gBAAiB,OACjBC,SAAU,aACVC,SAAU,eACVC,UAAW,cACXC,SAAU,cACVC,SAAU,kBAEdC,WAAY,CACRC,cAAe,YACfC,mBAAoB,cACpBC,kBAAmB,WACnBC,mBAAoB,gBACpBC,kBAAmB,cAEvBC,WAAY,yBACZC,SAAU,CACNC,KAAM,mBACNC,KAAM,iBACNxB,UAAW,CACPlf,UAAW,6BAGnB2gB,SAAU,CACNC,WAAY,YAEhBC,UAAW,CACPC,QAAS,YACTC,YAAa,yBAEjBC,WAAY,CACRC,GAAI,KACJC,GAAI,MAERC,WAAY,CACRjC,UAAW,CAEPkC,QAAS,wBACTV,KAAM,aACNW,SAAU,eACVhM,KAAM,kBACNiM,YAAa,6BAGrBC,OAAQ,CACJrC,UAAW,CACP5R,KAAM,2BAIHoR,MC9DftN,OAAIC,IAAImQ,SAEO,WAAIA,QAAQ,CACzBlH,KAAM,CACJmH,QAAS,CAAEC,QAAIC,QAAIjD,MAAIkD,SACvBrH,QAASvP,OAAOwP,sB,aCOjB,SAEYqH,KAAQ,OAAAC,GAAAppB,MAAC,KAAD0I,WASvB,SAAA0gB,KAFC,OAEDA,GAAAC,eAAAC,iBAAAC,MATA,SAAAC,IAAA,OAAAF,iBAAAG,MAAA,SAAAC,GAAA,eAAAA,EAAA3B,KAAA2B,EAAA1B,MAAA,cAAA0B,EAAA1B,KAAA,EACQ2B,KAAmB,OAKzBjoB,SAASkoB,eAAe,kBAAkBC,MAAMC,QAAU,OAAO,wBAAAJ,EAAAK,UAAAP,OAClEJ,GAAAppB,MAAA,KAAA0I,WAAA,SAGcihB,KAAiB,OAAAK,GAAAhqB,MAAC,KAAD0I,WAAA,SAAAshB,KAiB/B,OAjB+BA,GAAAX,eAAAC,iBAAAC,MAAhC,SAAAU,IAAA,IAAAC,EAAArS,EAAAsS,EAAA1X,EAAA,OAAA6W,iBAAAG,MAAA,SAAAW,GAAA,eAAAA,EAAArC,KAAAqC,EAAApC,MAAA,OAGmD,GAF3CkC,EAAU,IAAIG,IAAIhW,SAAS9S,MAC3BsW,IAAYqS,EAAQI,aAAa3lB,IAAI,OACrCwlB,EAASD,EAAQI,aAAa3lB,IAAI,WACpCwlB,EAAQ,CAAFC,EAAApC,KAAA,SAIgD,OADxDkC,EAAQI,aAAajV,IAAI,SAAU,IACnC1P,QAAQ6c,IAAI,iBAAD7Y,OAAkBwgB,EAAM,sBAAqBC,EAAArC,KAAA,EAAAqC,EAAApC,KAAA,EAE9BuC,QAAWC,2BAA2BL,GAAO,OAAtD,OAAT1X,EAAS2X,EAAAK,KAAAL,EAAApC,KAAG,GACZ0C,GAAWjY,EAAWoF,GAAQ,QAAAuS,EAAApC,KAAA,iBAAAoC,EAAArC,KAAA,GAAAqC,EAAAO,GAAAP,EAAA,YAEpCzkB,QAAQjC,MAAM,wCAAuC0mB,EAAAO,IACrD5e,MAAM,yCAAyC,yBAAAqe,EAAAL,UAAAE,EAAA,mBAGpDD,GAAAhqB,MAAA,KAAA0I,WAxCDgQ,OAAIpG,OAAOsY,eAAgB,EAE3BzB,KAAWlmB,MAAK,WACd,IAAIyV,OAAI,CACNwJ,cACA2I,WACAzW,YACAoM,OAAQ,SAAAsK,GAAC,OAAIA,EAAEC,OACdC,OAAO,QAEVjJ,OAAM/C,OAAO,8BAgCf,IAAM0L,GAAa,SAACjY,EAAWoF,GAC7B,OAAOzO,OAAK6hB,aAAaxY,EAAWoF,K,iCCpDtC,IAAMqT,EAAiB,CACrBC,OAAQ,IACRC,UAAW,IACXC,QAAS,IACTC,QAAS,IACTC,QAAS,KAGLC,EAAsB,CAY1BC,UAAS,SAACC,EAAa7T,EAAS8T,EAAgBvX,GAC9C,IAAMwX,EAAoB,CACxBC,UAAWzX,EAAKpP,EAAE,aAClB8mB,QAAS1X,EAAKpP,EAAE,YAChB+mB,SAAU3X,EAAKpP,EAAE,SACjBgnB,SAAU5X,EAAKpP,EAAE,QACjBinB,MAAO7X,EAAKpP,EAAE,QACd,aAAcoP,EAAKpP,EAAE,WACrBknB,OAAQ9X,EAAKpP,EAAE,UACfmnB,UAAW/X,EAAKpP,EAAE,YAClBonB,OAAQhY,EAAKpP,EAAE,aAEjB,GAAuB,eAAnB2mB,IAAoC9T,EAAS,CAC/C,GAAI6T,IAAgBR,EAAeC,OACjC,OAAO/W,EAAKpP,EAAE,WAEhB,GAAI0mB,IAAgBR,EAAeG,QACjC,OAAOjX,EAAKpP,EAAE,WAGlB,IAAMqnB,EAAmBT,EAAkBD,GAC3C,OAAKU,GACIV,IAOEH,U,oFCvCTc,EAAc,CAClBC,eAAgB,CACdhU,SAAU,EACViU,MAAO,EACPC,QAAQ,EAKRpU,WAAY,YACZxG,gBAAiB,CACf,CACE6a,OAAQ,EACRhb,KAAM,IAER,CACEgb,OAAQ,EACRhb,KAAM,IAER,CACEgb,OAAQ,EACRhb,KAAM,IAER,CACEgb,OAAQ,EACRhb,KAAM,IAER,CACEgb,OAAQ,EACRhb,KAAM,IAER,CACEgb,OAAQ,EACRhb,KAAM,IAER,CACEgb,OAAQ,EACRhb,KAAM,IAER,CACEgb,OAAQ,EACRhb,KAAM,MAIZib,mBAAkB,WAChB,OAAOra,OAAOsa,eAEhBC,gBAAe,WACb,OAAO,IAAIzrB,SAAQ,SAAAC,GACjB0gB,OAAMzC,SAAS,qBAAqBrc,MAAK,WACvC8e,OAAMzC,SAAS,gBAAgBrc,MAAK,SAAAiW,GAClC,IAAM4T,EAAqB/K,OAAMnF,QAAQqB,2BACnC8O,EAAWT,EAAYU,gBAAgBF,GACvCG,EAAe/T,EAAOqF,MAAK,SAAA3G,GAC/B,OAAOA,EAAMsV,eAAiBH,KAEhC1rB,EAAQ4rB,aAMhBE,wBAAyB,CACvB,CACEvqB,KAAM,QACNwqB,YAAa,MACbC,gBAAiB,CACfC,MAAO,OACPC,IAAK,MACLC,OAAQ,wBACRC,gBAAiB,gCACjBC,eAAgB,kCAGpB,CACE9qB,KAAM,QACNwqB,YAAa,MACbC,gBAAiB,CACfC,MAAO,QACPC,IAAK,MACLC,OAAQ,4BACRC,gBAAiB,iCACjBC,eAAgB,iCAGpB,CACE9qB,KAAM,QACNwqB,YAAa,MACbC,gBAAiB,CACfC,MAAO,OACPC,IAAK,MACLC,OAAQ,sCACRC,gBAAiB,+BACjBE,eAAgB,+CAGpB,CACE/qB,KAAM,QACNwqB,YAAa,OACbC,gBAAiB,CACfC,MAAO,QACPC,IAAK,eACLC,OAAQ,wCACRC,gBAAiB,sCACjBC,eAAgB,qCAGpB,CACE9qB,KAAM,QACNwqB,YAAa,KACb,sBACE,OAAOd,EAAYsB,sBAGvB,CACEhrB,KAAM,QACNwqB,YAAa,MACb,sBACE,OAAOd,EAAYsB,uBAIzBA,oBAAqB,CACnBN,MAAO,QACPC,IAAK,MACLC,OAAQ,wBACRC,gBAAiB,yCACjBC,eAAgB,oCAElBV,gBAAe,SAACI,GACd,IAAMS,EAAgBC,KAAKX,wBAAwB5O,MAAK,SAAAwP,GACtD,OAAOA,EAAUX,cAAgBA,KAEnC,OAAOS,EAAgBA,EAAcjrB,KAAO,UAIjC0pB,U,uBCpJfvrB,EAAOD,QAAU,IAA0B,wC,oCCA3C,gBAKMktB,EAAa,CACjBrpB,IAAG,WACD,OAAO+P,OAAQK,aAAa,WAAa,KAI9BiZ,U,k63BCXfjtB,EAAOD,QAAU,IAA0B,yC,sFCA2QkL,EAAG,W,IAAC,OAAqB,EAAC,W,OAAC8U,QAAYzU,CAAG,EAAI,QAAC,oJ,MAAK,CAAiB6U,aAAGA,EAAU,W,GAA6D,CAACH,QAAM,WAAS,YAAQ,OAAoE,IAAC,iBAAC,cAAkB,sDACpjB,eAGD,GAASP,SAAQtT,GAAe,wB,OAAA,U,iHCyBjB,GACflJ,KAAA,qBACAye,WAAA,CAAAwL,sBAAAC,wBACA/gB,MAAA,CACAC,UAAA,CACAjL,KAAAkL,OACAC,QAAA,IAEA6gB,QAAA,CACAhsB,KAAAqL,QACAF,SAAA,GAEA8gB,cAAA,CACAjsB,KAAAqL,QACAF,SAAA,IAIAzO,KAAA,kBACAwvB,SAAA,IAGAhgB,QAAA,CACAigB,OAAA,WACA,KAAAvf,MAAA,WAEAwf,QAAA,SAAAC,GACA,KAAAzf,MAAA,UAAAyf,KAIApgB,QAAA,WAIAhF,OAAAsJ,eACAtJ,OAAAwb,QAAA,GAAA3hB,MAAA,WACA4C,OAAAwO,SAAAoa,YAGA,KAAAJ,SAAA,ICrE2W,I,YCOvWpf,EAAY,eACd,EACA,EACA/B,GACA,EACA,KACA,KACA,MAIa,OAAA+B,E,qICZf,SAASyf,IACP,IAAM3F,EAAU4F,UAKVC,EAAW,GAQjB,OAPA7F,EAAQ3I,OAAOlM,SAAQ,SAAA7O,GACrB,IAAMwpB,EAAUxpB,EAAIypB,MAAM,uBAC1B,GAAID,GAAWA,EAAQxvB,OAAS,EAAG,CACjC,IAAMoiB,EAASoN,EAAQ,GACvBD,EAASnN,GAAUsH,EAAQ1jB,OAGxBupB,EAhBTlW,OAAIC,IAAIoW,QAmBR,IAAMC,EAAkB,CACtBhG,GAAI,CACFiG,MAAO,CACLC,KAAM,UACNC,MAAO,QACPC,IAAK,WAEPC,KAAM,CACJH,KAAM,UACNC,MAAO,QACPC,IAAK,UACLE,QAAS,QACTC,KAAM,UACNC,OAAQ,UACRC,QAAQ,GAEVC,UAAW,CACTH,KAAM,UACNC,OAAQ,UACRC,QAAQ,IAGZE,GAAI,CACFV,MAAO,CACLC,KAAM,UACNC,MAAO,QACPC,IAAK,WAEPC,KAAM,CACJH,KAAM,UACNC,MAAO,OACPC,IAAK,UACLE,QAAS,QACTC,KAAM,UACNC,OAAQ,WAEVE,UAAW,CACTH,KAAM,UACNC,OAAQ,UACRC,QAAQ,IAGZG,GAAI,CACFX,MAAO,CACLC,KAAM,UACNC,MAAO,QACPC,IAAK,WAEPC,KAAM,CACJH,KAAM,UACNC,MAAO,OACPC,IAAK,UACLE,QAAS,QACTC,KAAM,UACNC,OAAQ,WAEVE,UAAW,CACTH,KAAM,UACNC,OAAQ,UACRC,QAAQ,IAGZzJ,GAAI,CACFiJ,MAAO,CACLC,KAAM,UACNC,MAAO,QACPC,IAAK,WAEPC,KAAM,CACJH,KAAM,UACNC,MAAO,OACPC,IAAK,UACLE,QAAS,QACTC,KAAM,UACNC,OAAQ,WAEVE,UAAW,CACTH,KAAM,UACNC,OAAQ,UACRC,QAAQ,IAGZI,GAAI,CACFZ,MAAO,CACLC,KAAM,UACNC,MAAO,QACPC,IAAK,WAEPC,KAAM,CACJH,KAAM,UACNC,MAAO,OACPC,IAAK,UACLE,QAAS,QACTC,KAAM,UACNC,OAAQ,WAEVE,UAAW,CACTH,KAAM,UACNC,OAAQ,UACRC,QAAQ,KAKRrb,EAAO,IAAI2a,OAAQ,CACvBtN,OAAQnP,OAAOwd,sBAAwB,KACvCC,eAAgBC,KAChBpB,SAAUF,IACVM,gBAAiBA,IAGJ5a,U,gHCpIT6b,EAAa,CAOjBC,yBAAwB,SAACxe,GACvB,OAAOA,EAAKnK,QAAQ,IAAK,MAG3B4oB,SAAQ,SAACC,EAAQC,GAIf,OAHID,EAAO/wB,OAASgxB,IAClBD,EAASA,EAAOE,UAAU,EAAGD,IAExBD,GAGTG,sBAAqB,SAACH,GACpB,OAAOA,EAAOI,OAAO,GAAGC,cAAgBL,EAAOrqB,MAAM,IAGvD2qB,oBAAmB,SAACN,GAClB,OACEA,EAAOjpB,QAAQ,MAAQ,GACvBipB,EAAOjpB,QAAQ,MAAQ,GACvBipB,EAAOjpB,QAAQ,MAAQ,GACvBipB,EAAOjpB,QAAQ,MAAQ,GACvBipB,EAAOjpB,QAAQ,MAAQ,GACvBipB,EAAOjpB,QAAQ,MAAQ,GAI3BwpB,aAAY,SAACP,GACX,OAAOA,EAAOK,gBAAkBL,GAGlCQ,aAAY,SAACR,GACX,OAAOA,EAAOS,gBAAkBT,GAGlCU,cAAa,SAACV,GACZ,MAAO,KAAKW,KAAKX,IAGnBY,UAAS,SAACZ,GACR,IAAIjxB,EAAIixB,EAAO/wB,OACf,MAAOF,IACL,GAAI2H,OAAWU,SAAS4oB,EAAOI,OAAOrxB,IACpC,OAAO,EAGX,OAAO,GAST8xB,OAAM,SAACvf,GAA+B,IAAzBwf,EAAexoB,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,IAAAA,UAAA,GACpByoB,EAAaD,EAAkB,mBAAqB,GACpDE,EAAW,8EACjB,OAAO1f,EAAKnK,QAAQ6pB,GAAU,SAAS/e,GACrC,MAAO,YAAcA,EAAM,IAAM8e,EAAa,IAAM9e,EAAM,WAI9Dgf,2BAA0B,SAAC3f,GACzB,OAAOA,EAAKnK,QAAQ,MAAO,WAG7B+pB,yBAAwB,SAACC,GACvB,OAAOA,EAAShqB,QAAQ,kBAAmB,MAG7CiqB,mBAAkB,WAChB,OAAOC,KAAKC,SACTxqB,SAAS,IACTnB,OAAO,IAWZ4rB,aAAY,SAACvB,GAEX,OAAOA,EAAO7oB,QAAQ,sBAAuB,UAIlC0oB,U,oCCnGf,W,iu3BCEMxpB,EAAgB,CACpBL,OAAM,WACJ,OAAO6B,OAAIC,QAAQ,iBAAkB,KAAM,eAG7CvD,IAAG,SAACqD,GAAI,IAAA3B,EAAA,KAEN,OAAO,IAAIjF,SAAQ,SAAAC,GACjBgF,EAAKD,SAASnD,MAAK,SAAA4D,GACjBxF,EAAQwF,EAAe0X,MAAK,SAAAC,GAAG,OAAIA,EAAIC,aAAezW,aAK5DkD,OAAM,SAAClD,GACL,OAAO,IAAI5G,SAAQ,SAACC,EAASC,GAC3B,IAAMuH,EAAS,CAAE4V,WAAYzW,GAC7BC,OACGC,QAAQ,iBAAkBW,EAAQ,MAAM,GAAM,GAC9C5F,MAAK,WACJ5B,OAEDgH,OAAM,SAAA3F,GACLpB,EAAOoB,UAKf0C,OAAM,SAACpB,GAAsB,IAAhB4tB,EAASlpB,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,GACjBG,EAAS,CAAEM,SAAU,CAAEuG,KAAM1L,EAAM6tB,YAAaD,IACtD,OAAO3pB,OAAIC,QAAQ,aAAcW,IAGnCipB,KAAI,SAAC9pB,EAAIhE,GAAsB,IAAhB4tB,EAASlpB,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,GACnBG,EAAS,CACbM,SAAU,CACRsV,WAAYzW,EACZ0H,KAAM1L,EACN6tB,YAAaD,IAGjB,OAAO3pB,OAAIC,QAAQ,gBAAiBW,IAGtCkpB,gBAAe,SAACC,GAAc,IAAAprB,EAAA,KAC5B,OAAO,IAAIxF,SAAQ,SAAAC,GACjBuF,EAAKR,SAASnD,MAAK,SAAA4D,GACjBxF,EAAQwF,EAAekW,MAAK,SAAAyB,GAAG,OAAIA,EAAIC,aAAeuT,cAM/CvrB,U,4FCrDTwrB,EAAW,CAOfC,SAAQ,SAACF,GACP,OAAO,IAAI5wB,SAAQ,SAAAC,GACjB4G,OAAIC,QAAQ,cAAe,KAAM,WAAWjF,MAAK,SAAAkvB,GAC/C,IAAIC,EAAgB,GAIlBA,EAHGJ,EAGaG,EAAMvmB,QAAO,SAAAxC,GAC3B,OAAOA,EAAKgV,WAAWrB,MAAK,SAAAsV,GAC1B,OAAOA,EAAO5T,aAAeuT,QAJjBG,EAQlB9wB,EAAQ+wB,UAKdE,QAAO,SAACtqB,GACN,IAAMa,EAAS,CAAE0pB,SAAUvqB,GAC3B,OAAO,IAAI5G,SAAQ,SAAAC,GACjB4G,OAAIC,QAAQ,aAAcW,EAAQ,WAAW5F,MAAK,SAAAkvB,GAChD9wB,EAAQ8wB,EAAM,WAKpBK,aAAY,SAACC,EAAQ1Y,GACnB,IAAMlR,EAAS,CACb6pB,OAAQ,GACRH,SAAUE,GAKZ,OAHA1Y,EAAM7F,SAAQ,SAAAye,GACZ9pB,EAAO6pB,OAAO/yB,KAAK,CAAEizB,QAASD,OAEzB1qB,OAAIC,QAAQ,mBAAoBW,IAGzCgqB,mBAAkB,SAACJ,EAAQ/rB,GACzB,IAAMmC,EAAS,CACbuV,WAAY,GACZmU,SAAUE,GAKZ,OAHA/rB,EAAYwN,SAAQ,SAAAsK,GAClB3V,EAAOuV,WAAWze,KAAK,CAAE8e,WAAYD,OAEhCvW,OAAIC,QAAQ,uBAAwBW,IAG7CiqB,WAAU,SAAC1pB,GACT,IAAMP,EAAS,CACbwU,OAAQjU,GAEV,OAAOnB,OAAIC,QAAQ,WAAYW,EAAQ,MAAM,GAAM,IAgCrDkqB,WAAU,SAAC3pB,GACT,IAAM4pB,EAAeC,EAAiB7pB,GACtC,OAAO2pB,EAAW3pB,EAAKmpB,SAAUS,IAGnCE,eAAc,SAAC9pB,GACb,OAAO+pB,EAAmB/pB,GAAM,IAGlCgqB,eAAc,SAAChqB,GACb,OAAO+pB,EAAmB/pB,GAAM,KAI9B6pB,EAAmB,SAAA7pB,GACvB,MAAO,CACL,CACEiqB,MAAOjqB,EAAKsG,KACZ4jB,KAAM,QAER,CACED,MAAOjqB,EAAKmqB,MACZD,KAAM,SAER,CACED,MAAOjqB,EAAKoqB,QACZF,KAAM,WAER,CACED,MAAOjqB,EAAKqqB,cACZH,KAAM,YAER,CACED,MAAOjqB,EAAKsqB,SACZJ,KAAM,YAER,CACED,MAAOM,EAAWvqB,EAAKwqB,eACvBN,KAAM,iBAER,CACED,MAAOM,EAAWvqB,EAAKyqB,SACvBP,KAAM,WAER,CACED,MAAOM,EAAWvqB,EAAK2U,QAAQ+V,OAC/BR,KAAM,eAER,CACED,MAAOM,EAAWvqB,EAAK2U,QAAQgW,gBAC/BT,KAAM,2BAER,CACED,MAAOM,EAAWvqB,EAAK2U,QAAQiW,SAC/BV,KAAM,oBAKNH,EAAqB,SAAC/pB,EAAM2P,GAChC,IAAMia,EAAe,CAAC,CAAEK,MAAOM,EAAW5a,GAAQua,KAAM,YACxD,OAAOP,EAAW3pB,EAAKmpB,SAAUS,IAG7BW,EAAa,SAAA5a,GACjB,OAAOA,EAAQ,IAAM,KAGjBga,EAAa,SAACN,EAAQO,GAC1B,IAAMnqB,EAAS,CACb0pB,SAAUE,EACVwB,OAAQjB,GAEV,OAAO/qB,OAAIC,QAAQ,cAAeW,EAAQ,KAAM,MAAM,IAGzCopB,U,sECpKTiC,EAAe,CACnBlwB,KAAM,OACNqO,IAAK,8BACL8hB,OAAQ,0BACRC,YAAa,4BACbC,UAAW,0BACXC,OAAQ,0BACRC,SAAU,eAEGL,I,YCXT5hB,EAAS,CACbkiB,QAAS,aACTzR,WAAY0R,EAAazwB,KACzB0wB,OAAQD,EAAapiB,IACrBG,UAAWiiB,EAAaN,OACxB5hB,eAAgBkiB,EAAaL,YAC7BO,aAAcF,EAAaJ,UAC3B1P,eAAgB8P,EAAaH,OAAS,oBACtCM,aAAcH,EAAaH,OAAS,aACpCO,uBAAwB,yBACxBC,sBAAuB,GACvBC,wBACE,gGACFC,wBAAyB,sBACzBC,2BAA4B,KAC5BC,oBAAqB,KACrBC,mBAAoB,IACpBC,wBAAyB,IACzBC,gBAAiB,CAAC,OAAQ,OAAQ,QAClCC,iBAAkB,CAChBC,IAAK,EACLC,IAAK,IAEPC,WAAY,CACVC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,OAAQ,MAEVC,YAAa,CACXC,YAAa,iBACbC,MAAO,kBACPC,OAAQ,mBACRC,IAAK,iBACLC,KAAM,qBACNC,MAAO,qBACPC,KAAM,kBACNC,OAAQ,mBAEVC,gBAAiB,CACf1rB,SAAU,IACVyF,QAAS,IACTnB,OAAQ,KAEViW,yBAAyB,EACzBC,gBAAgB,EAChBlI,sBAAuB,GACvBqZ,4BAA6B,CAAC,GAAI,GAAI,GAAI,KAC1CC,sBACE,uPAIF,oBACE,OAAOhC,EAAapiB,IAAM,YAE5B,kBACE,OAAOoiB,EAAapiB,IAAM,gBAE5BqkB,oBAAmB,SAACnf,GAAyB,IAAjBof,EAASjuB,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,IAChCkuB,EAAMxtB,OAAKsJ,eACjB,OACE+hB,EAAaL,YACb7c,EACA,cACAqf,EACA,UACAD,GAGJ/J,YAAW,WACT,OAAO,IAAIxrB,SAAQ,SAAAC,GACjB+H,OAAKgW,aAAanc,MAAK,SAAAof,GACQ,KAAzBA,EAAWnE,UACb7c,EAAQ,eAERA,EAAQozB,EAAaF,iBAK7BsC,0BAAyB,SAACC,GACxB,OAAgB,QAAZA,GAEM,EAGH,OAEThH,mBAAkB,WAChB,IAAIrO,EAASuM,OAAWrpB,MACnB8c,IACHA,EAAS5b,OAAO0O,UAAUwiB,UAAYlxB,OAAO0O,UAAUyiB,cAOzD,IAAMC,EAAoBxV,EAAOra,MAAM,KACvC,OAAO6vB,EAAkB,IAE3BnV,iBAAgB,SAACL,GAKf,OAJAA,EAASA,GAAkBqM,KAAKgC,qBAIjB,OAAXrO,GAA8B,OAAXA,EACd,KACa,OAAXA,EACF,KAEFA,GAETvG,oBAAmB,WACjB,IAAMuG,EAASqM,KAAKgC,qBACdoH,EAAqB,OAAXzV,EACV0V,EAAqB,OAAX1V,EACV2V,EAAYF,GAAWC,EACvBE,EAAoB,OAAX5V,EACT6V,EAAqB,OAAX7V,EACZ5H,EAAU,SAMd,OALIsd,GAAWE,EACbxd,EAAU,UACDqd,GAAWI,KACpBzd,EAAU,UAEL,CACL0d,aAAcH,EAAY,IAAM,IAChCvd,QAASA,KAKAvH,U,oOCjITlJ,G,UAAO,CACXouB,aAAc,IACdC,UAAW,SACXC,aAAc,YACdC,eAAgB,cAChBC,qBAAsB,oBACtBC,cAAe,qBACfC,SAAU,QACVC,eAAgB,cAChBC,QAAS,KAETtlB,aAAY,WACV,OAAOA,KAGTulB,aAAY,SAACjwB,GACX,OAAOiwB,EAAajwB,IAGtBoX,WAAU,WAA2B,IAA1BD,EAAgBzW,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,IAAAA,UAAA,GACzB,OAAO,IAAItH,SAAQ,SAAAC,GACb+H,EAAK4uB,UAAY7Y,EACnB9d,EAAQ+H,EAAK4uB,SAEbxpB,OAAQ4Q,aAAanc,MAAK,SAAA+0B,GACxB5uB,EAAK4uB,QAAUA,EACf32B,EAAQ+H,EAAK4uB,gBAMrBE,mBAAkB,SAACC,GAAkB,IAAA9xB,EAAA,KACnC,OAAO,IAAIjF,SAAQ,SAAAC,GACjBgF,EAAK+Y,aAAanc,MAAK,SAAAof,GACjBA,EAAWhF,OAAOQ,MACpBxc,GAAQ,GAGVgF,EAAKsf,iBAAiB1iB,MAAK,SAAAm1B,GACzB,GAAKA,EAAQ1xB,YAAYrH,OAAzB,CAIA,IAAM+I,EAAMgwB,EAAQ1xB,YAAYqW,MAC9B,SAAAsV,GAAM,OAAIA,IAAW8F,KAEvB92B,EAAQ+G,QANN/G,GAAQ,aAYlBskB,eAAc,WAAG,IAAA/e,EAAA,KACf,OAAO,IAAIxF,SAAQ,SAAAC,GACjBuF,EAAKwY,aAAanc,MAAK,SAAA+0B,GAAW,IAAAK,EAC5B3xB,EAAc,GACZ4xB,EAAiBN,EAAQ3a,OAAOlU,SAClCmvB,GACF5xB,EAAY/G,KAAK24B,GAEnB5xB,GAAc2xB,EAAA3xB,GAAYiD,OAAM3J,MAAAq4B,EAAAE,eAC3BP,EAAQ3a,OAAOe,WAAWnU,KAAI,SAAAuU,GAAG,OAAIA,EAAIC,gBAE9Cpd,EAAQ,CACNwkB,QAASmS,EAAQ3a,OAAOQ,MACxBnX,YAAaA,WAMrB8xB,cAAa,SAACx0B,EAAMyJ,EAAOgrB,GACzB,OAAO,IAAIr3B,SAAQ,SAAAC,GACjBmN,OAAQgqB,cAAcx0B,EAAMyJ,EAAOgrB,GAAQx1B,MAAK,WAE9C8e,OAAMzC,SAAS,qBAAqB,GAAMrc,MAAK,WAC7C5B,cAMRq3B,cAAa,WAAG,IAAAC,EAAA,KACd,OAAO,IAAIv3B,SAAQ,SAAAC,GACjBs3B,EAAKvZ,aAAanc,MAAK,SAAA+0B,GACrB32B,EACE22B,EAAQ3a,OAAOkC,aAAaqZ,gBAAkBZ,EAAQ3a,OAAOQ,cAMrEgb,cAAa,WACX3W,OAAOviB,KAAK,CAAEia,KAAM,YAGtB6K,sBAAqB,SAACze,GAWpB0O,OAAQO,eAAe6Y,KAAK+J,cAAe7xB,GAC3CH,OAAOwO,SAASoa,UAGlBplB,sBAAqB,WACnB,OAAOqL,OAAQS,eAAe2Y,KAAK+J,gBAAkB,IAOvDiB,eAAc,WAAG,IAAAC,EAAA,KACf,OAAO,IAAI33B,SAAQ,SAAAC,GACjB03B,EAAK3Z,aAAanc,MAAK,SAAA+0B,GACrB,IAAMgB,EAAUhB,EAAQlb,QAAQyB,MAAK,SAAA0a,GACnC,OAAqC,IAA9BA,EAAchc,eAEvB5b,EAAQ23B,UAYdE,yBAAwB,WAAG,IAAAC,EAAA,KACzB,OAAO,IAAI/3B,SAAQ,SAAAC,GACjB,IAAMof,EAAqB0Y,EAAK9vB,wBAE5BoX,EAGFha,OAAcsrB,gBAAgBtR,GAAoBxd,MAAK,SAAAm2B,GACjDA,GAEFzzB,QAAQ6c,IAAI,6BACZnhB,EAAQof,IAER0Y,EAAK/Z,aAAanc,MAAK,SAAA+0B,GAErBryB,QAAQ6c,IACN,sEAEF,IAAM6W,EAAcrB,EAAQ3a,OAAOlU,SAGnCuL,OAAQO,eAAekkB,EAAKtB,cAAewB,GAG3Ch4B,EAAQg4B,SAMdF,EAAK/Z,aAAanc,MAAK,SAAA+0B,GACrB,GAAIA,EAAQ3a,OAAOQ,MAIjB,OAFAlY,QAAQ6c,IAAI,6CACZnhB,EAAQ,IAIVsE,QAAQ6c,IAAI,sCACZnhB,EAAQ22B,EAAQ3a,OAAOlU,iBAM/BmwB,eAAc,SAACC,GACb7kB,OAAQC,aAAamZ,KAAKiK,eAAgBwB,IAG5CC,eAAc,WAEZ,OAAO9lB,SAASgB,OAAQK,aAAa+Y,KAAKiK,gBAAiB,KAAO,GAGpE9M,aAAY,SAACxY,EAAWoF,GAGtB,OAFAhD,aAAaC,QAAQ1L,EAAKsuB,aAAc,OACxC3V,OAAM/C,OAAO,kBAAmBnH,GACzBogB,EAAaxlB,IAGtB8R,aAAY,WACV,OAAOA,KAGTQ,kBAAiB,SAACjO,GAChBjC,aAAaC,QAAQ1L,EAAK0uB,SAAUhhB,IAGtCyO,kBAAiB,WACf,OAAO1Q,aAAaG,QAAQ5L,EAAK0uB,WAInC2B,eAAc,SAAChnB,EAAW7P,GAGxB,OAFAiS,aAAaC,QAAQ1L,EAAKwuB,qBAAsBh1B,GAChDiS,aAAaC,QAAQ1L,EAAKuuB,eAAgB,OACnCM,EAAaxlB,IAGtBinB,qBAAoB,WAClB,OAAO7kB,aAAaG,QAAQ5L,EAAKwuB,uBAGnC+B,eAAc,WACZ,OAAOA,KAGTjY,UAAS,SAACD,GACR/M,OAAQC,aAAamZ,KAAK2J,UAAWhW,IAGvC6D,WAAU,WACR,IAAM7S,EAAYC,IAClB,OAAOD,GAAaA,EAAUpT,OAAS,GAGzCu6B,MAAK,SAACnsB,EAAOuB,EAAU3D,GACrB,OAAO,IAAIjK,SAAQ,SAACC,EAASC,GAC3B,IAAI8G,EAAMmiB,OAAWsP,MAAMpsB,EAAOuB,EAAU3D,GAC5CjD,EAAInF,MAAK,SAAAmF,GACe,KAAlBA,EAAI0K,UAENzR,GAAQ,GACE+G,EAAI0K,UAGdmlB,EAAa7vB,EAAI0K,WAAW7P,MAAK,WAC/B5B,GAAQ,MAHVC,EAAOw4B,QAOX1xB,EAAIC,OAAM,SAAA3F,GACRpB,EAAOoB,UAKbq3B,SAAQ,SAACtsB,EAAOuB,EAAUgrB,GACxB,OAAO,IAAI54B,SAAQ,SAACC,EAASC,GAC3BipB,OACG0P,SAASxsB,EAAOuB,EAAUgrB,GAC1B/2B,MAAK,SAAAmF,GACCA,EAAI0K,UAITmlB,EAAa7vB,EAAI0K,WAAW7P,MAAK,WAC/B5B,OAJAC,EAAOw4B,QAOVzxB,OAAM,SAAA3F,GACuB,MAAxBA,EAAIkM,SAASC,QACfvN,EAAO,wCAMjBsjB,OAAM,WAAqB,IAApBsV,EAAUxxB,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,IAAAA,UAAA,GACf,OAAO,IAAItH,SAAQ,SAAAC,GACjBkpB,OAAW4P,OAAOznB,KAAgBzP,MAAK,WACrCm3B,EAAaF,GACb74B,WAKN+R,aAAY,WACVgnB,OAIEN,EAAyB,WAC7B,MAAO,+BAGH7B,EAAe,SAAAjwB,GACnB,OAAO,IAAI5G,SAAQ,SAAAC,GACjBwT,aAAaC,QAAQ1L,EAAKouB,aAAcxvB,GAExC+Z,OAAMzC,SAAS,qBAAqBrc,MAAK,SAAA+V,GACvC,IAAMqhB,EAAcrhB,EAAYshB,QAC1BC,EAAkBjoB,OAAOukB,0BAA0BwD,GACzD9P,OAAWiQ,mBAAmBxyB,EAAIuyB,GAAiBt3B,MAAK,WACtD5B,cAMFqR,EAAe,WACnB,OAAO7M,OAAOgP,aAAaG,QAAQ5L,EAAKouB,eAGpCjT,EAAe,WACnB,IAAMzB,EAAYjd,OAAOgP,aAAaG,QAAQ5L,EAAKsuB,cACnD,OAAO5U,GAA2B,QAAdA,GAGhB6W,EAAiB,WACrB,IAAMc,EAAc50B,OAAOgP,aAAaG,QAAQ5L,EAAKuuB,gBACrD,OAAO8C,GAA+B,QAAhBA,GAGlBL,EAAe,WASnB,IAT2C,IAAvBF,EAAUxxB,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,IAAAA,UAAA,GACxBoa,EAAYyB,IACZkW,EAAcd,IAChBn3B,EAAS,IACPk4B,EAAyB,CAC7BtxB,EAAK2uB,eACL3uB,EAAKquB,UACLruB,EAAK0uB,UAEP6C,EAAA,EAAAC,EAAyBt7B,OAAOu7B,QAAQhmB,cAAa8lB,EAAAC,EAAAv7B,OAAAs7B,IAAE,CAAlD,IAAAG,EAAAC,eAAAH,EAAAD,GAAA,GAAKt1B,EAAGy1B,EAAA,GAAOA,EAAA,GAEdJ,EAAuBM,SAAS31B,IAGpCQ,OAAOgP,aAAaomB,WAAW51B,GAEjC,IAAK,IAAL61B,EAAA,EAAAC,EAAyB77B,OAAOu7B,QAAQ3lB,gBAAegmB,EAAAC,EAAA97B,OAAA67B,IAAE,CAApD,IAAAE,EAAAL,eAAAI,EAAAD,GAAA,GAAK71B,EAAG+1B,EAAA,GAAOA,EAAA,GAClBv1B,OAAOqP,eAAe+lB,WAAW51B,GAE/Byd,EACFtgB,EAAS8P,OAAOsiB,aACP6F,IACTj4B,EAAS,qBAEN03B,IAEHr0B,OAAOwO,SAAS9S,KAAOiB,IAIZ4G,U,4LClWfsP,OAAIC,IAAI0iB,QAER,IAAMC,EAAY,UAEZC,EAAS,CACb,CACE3hB,KAAM,IACN5V,KAAM,cAINiL,UAAW,kBAAM,8CAEnB,CACE2K,KAAM,SACN5V,KAAM,QACNiL,UAAW,kBAAM,yJAEnB,CACE2K,KAAM,cACN5V,KAAM,4BACNiL,UAAW,kBAAM,yJAEnB,CACE2K,KAAM,OACN5V,KAAM,MACNiL,UAAW,kBAAM,yJAEnB,CACE2K,KAAM,eACN5V,KAAM,aACNiL,UAAW,kBAAM,6GAEnB,CACE2K,KAAM,mBACN5V,KAAM,iBACNiL,UAAW,kBAAM,mIAEnB,CACE2K,KAAM,SACN5V,KAAM,QACNiL,UAAW,kBAAM,mIAEnB,CACE2K,KAAM,gBACN5V,KAAM,cACNiL,UAAW,kBAAM,uFAEnB,CACE2K,KAAM,YACN5V,KAAM,WACNiL,UAAW,kBAAM,kDAEnB,CACE2K,KAAM,UACN5V,KAAM,iBACNiL,UAAW,kBAAM,yJAEnB,CACE2K,KAAM0hB,EAAY,cAClBt3B,KAAM,cACNiL,UAAW,kBAAM,6GAEnB,CACE2K,KAAM0hB,EAAY,QAClBt3B,KAAM,QACNiL,UAAW,kBAAM,uFAEnB,CACE2K,KAAM0hB,EAAY,QAClBt3B,KAAM,QACNiL,UAAW,kBAAM,yJAEnB,CACE2K,KAAM,YACN5V,KAAM,WACNiL,UAAW,kBAAM,yJAEnB,CACE2K,KAAM,KACN5V,KAAM,mBACNiL,UAAW,kBAAM,kDAEnB,CACE2K,KAAM,WACN5V,KAAM,gBACNiL,UAAW,kBAAM,kDAEnB,CACE2K,KAAM,YACN5V,KAAM,UACNiL,UAAW,kBAAM,kDAEnB,CACE2K,KAAM,gBACN5V,KAAM,oBACNiL,UAAW,kBAAM,kDAEnB,CACE2K,KAAM,mBACN5V,KAAM,uBACNiL,UAAW,kBAAM,kDAEnB,CACE2K,KAAM,oBACN5V,KAAM,wBACNiL,UAAW,kBAAM,mDAIfiT,EAAS,IAAImZ,OAAU,CAC3Bp2B,KAAM,UACNu2B,KAAMxL,IACNuL,WAGIE,EAAeJ,OAAU97B,UAAUI,KACzC07B,OAAU97B,UAAUI,KAAO,SAAc0U,GACvC,OAAOonB,EAAah8B,KAAKquB,KAAMzZ,GAAUhM,OAAM,SAAA3F,GAG7C,GAAiB,yBAAbA,EAAIsB,KACN,MAAMtB,MAKZwf,EAAOwZ,YAAW,SAACC,EAAIC,EAAM5T,GAC3B1V,OAAO8S,wBAAsC,OAAZuW,EAAG/hB,KACpCtH,OAAO+S,eAA6B,cAAZsW,EAAG/hB,KAEvBxQ,OAAKkc,aACPvD,OAAMzC,SAAS,qBAAqBrc,MAAK,SAAAof,GACvC,IAAMwZ,EAAcxZ,EAAWhF,OAAOkC,aA6BtC,GA3BgB,MAAZoc,EAAG/hB,MACLsI,EAAO3a,QAAQ,CAAEqS,KAAM,UAGpByI,EAAWhF,OAAOQ,QACH,MAAd+d,EAAKhiB,MAAiBiiB,EAAY9vB,OAAqB,WAAZ4vB,EAAG/hB,MAEP,IAAhC+hB,EAAG/hB,KAAKzS,QAAQm0B,GACzBQ,EAAaH,IAEZE,EAAY9vB,OACA,MAAZ4vB,EAAG/hB,MAA4B,WAAZ+hB,EAAG/hB,QAGbiiB,EAAY9vB,OAAqB,cAAZ4vB,EAAG/hB,QAExBiiB,EAAY5X,WAAyB,iBAAZ0X,EAAG/hB,QAE5BiiB,EAAYjD,gBAA8B,gBAAZ+C,EAAG/hB,QAEjCiiB,EAAY/qB,UAAwB,qBAAZ6qB,EAAG/hB,QAE3BiiB,EAAY1Y,aAA2B,YAAZwY,EAAG/hB,OATxCkiB,EAAaH,GAPbzZ,EAAO3a,QAAQ,QAqBH,qBAAZo0B,EAAG/hB,KAA6B,CAClC,IAAMvH,EAAM,IAAIgY,IAAIhW,SAAS9S,MACvBw6B,EAAU1pB,EAAIiY,aAAa3lB,IAAI,QAGrC,GAFAgB,QAAQ6c,IAAIuZ,GACZp2B,QAAQ6c,IAAIpZ,OAAKswB,wBACbqC,GAAWA,IAAY3yB,OAAKswB,uBAO9B,YADA/zB,QAAQ6c,IAAI,0BAKhBwF,OAGFA,OAIJ,IAAM8T,EAAe,SAAAH,GACnB5Z,OAAM/C,OAAO,6BAA8B2c,EAAG/hB,MAC9CsI,EAAO3a,QAAQ,YAGF2a,U,kCCrMf,4BAGMqI,EAAa,CACjBsP,MAAO,SAACzwB,EAAM4yB,EAAM3wB,GAClB,IAAIxM,EAAO,CACTo9B,OAAQ7yB,EACR8yB,SAAUF,EACVG,UAAW7pB,OAAOkiB,SAEpB,OAAOvsB,OAAIC,QAAQ,QAASrJ,EAAM,MAAM,EAAOwM,IAGjD4uB,SAAQ,SAAC7wB,EAAM4yB,EAAMhC,GACnB,IAAMnxB,EAAS,CACbozB,OAAQ7yB,EACR8yB,SAAUF,EACVI,QAASpC,GAEX,OAAO/xB,OAAIC,QAAQ,gBAAiBW,EAAQ,OAG9C2hB,2BAA0B,SAACL,GACzB,IAAMthB,EAAS,CAAEwzB,OAAQlS,GACzB,OAAOliB,OAAIC,QAAQ,6BAA8BW,EAAQ,cAG3D2xB,mBAAkB,SAAC/nB,EAAW6pB,GAC5B,IAAMzzB,EAAS,CACbiK,UAAWL,EACX8pB,WAAYD,GAEd,OAAOr0B,OAAIC,QAAQ,aAAcW,IAGnCsxB,OAAM,SAAC1nB,GACL,OAAOxK,OAAIC,QAAQ,SAAU,CAAE4K,UAAWL,GAAa,MAAM,KAIlD8X,U,kCCxCf,gBAEM9Q,EAAc,CAClB+iB,WAAU,SAACz4B,GACTge,OAAM/C,OAAO,iBAAkBjb,KAIpB0V,U,m05BCJToF,EAAW,CACf4d,SAAQ,SAACC,GACP,OAAOz0B,OAAIC,QAAQ,sBAAuBw0B,EAAYC,iBAExD7d,aAAY,SAAC8d,EAAUC,GACrB,IAAMh0B,EAAS,CACbC,OAAQ,CACNC,SAAU6zB,GAAY,OACtB5zB,QAAS6zB,GAAW,GAEtBC,aAAc,IACd3zB,SAAUC,OAAKC,yBAEjB,OAAOpB,OAAIC,QAAQ,qBAAsBW,EAAQ,eAsBnDk0B,gBAAe,SACbC,EACAC,EACA7oB,EACA8oB,EACA10B,GAGA,IAFAC,EAASC,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,GACZC,EAAQD,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,IAAAA,UAAA,GAEFG,EAAS,CACbC,OAAQ,CACNC,SAAUP,EACVQ,QAASk0B,GAEXC,WAAYH,EACZI,UAAW,EACXC,KAAMJ,EACNh0B,WAAYR,EACZS,eAAgBP,GAElB,OAAO,IAAIvH,SAAQ,SAAAC,GACjB4G,OAAIC,QAAQ,mBAAoBW,GAAQ5F,MAAK,SAAA8I,GAC3C,IAAMuxB,EAA8B,GAChCvxB,EAAMwxB,YACRxxB,EAAMwxB,UAAUrpB,SAAQ,SAAAuH,GACtBA,EAAS5P,OAAS2f,OAAoBC,UACpC1f,EAAMyxB,SAASC,eACf1xB,EAAMyxB,SAASE,WACfjiB,EAAS5P,OACTuI,GAEFkpB,EAA4B39B,KAAK8b,MAEnC1P,EAAMwxB,UAAYD,GAEpBj8B,EAAQ0K,UAgBd4xB,qBAAoB,SAClBX,EACAnzB,EACAqzB,EACA10B,GAIA,IAHAC,EAASC,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,GACZC,EAAQD,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,IAAAA,UAAA,GACRk1B,EAAYl1B,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,IAAI,EAEVG,EAAS,CACbuB,MAAOP,EACPf,OAAQ,CACNC,SAAUP,EACVQ,QAASk0B,GAEXC,WAAYH,EACZ/zB,WAAYR,EACZS,eAAgBP,EAChB0B,YAAY,EACZwzB,YAAaD,GAEf,OAAO,IAAIx8B,SAAQ,SAAAC,GAGjB4G,OAAIC,QAAQ,uBAAwBW,GAAQ5F,MAAK,SAAAmF,GAC/CA,EAAIm1B,UAAYn1B,EAAIm1B,UAAUtzB,KAAI,SAAC2K,EAAM0P,GAAK,OAAAwZ,8BAAA,GACzClpB,GAAI,IACPzM,GAAImc,OAENjjB,EAAQ+G,UAKd21B,YAAW,SAACf,GACV,OAAO/0B,OAAIC,QAAQ,iBAAkB,CAAEi1B,WAAYH,KASrDgB,SAAQ,SAACC,EAAUC,GAAyB,IAAjBl4B,EAAU0C,UAAArJ,OAAA,QAAA4E,IAAAyE,UAAA,GAAAA,UAAA,GAAG,GAChCG,EAAS,CACbs1B,QAASF,EACTG,QAASF,EACT/0B,SAAUnD,GAEZ,OAAOiC,OAAIC,QAAQ,yBAA0BW,KAIlCgW,U,wHC9IM3N,EAAa,WAChC,SAAAA,IAAcmtB,eAAA,KAAAntB,GACZ4c,KAAK9lB,GAAK,EACV8lB,KAAK9pB,KAAO,GACZ8pB,KAAKrc,UAAY,GACjBqc,KAAKpc,KAAO,CACV4sB,IAAK,GACL7wB,MAAO,GACPmK,MAAO,IAETkW,KAAKjc,gBAAkB,KACvBic,KAAKnc,WAAa,GAClBmc,KAAKlc,cAAgB,CACnB+F,WAAY,CACVS,OAAQ,GACRjQ,GAAI,GACJ+kB,aAAc,GACdhV,aAAc,GACdF,KAAM,IAERO,SAAU+T,OAAYC,eAAehU,SACrCiU,MAAOF,OAAYC,eAAeC,MAClCnU,WAAYiU,OAAYC,eAAelU,WACvCoU,OAAQH,OAAYC,eAAeE,QAErCqB,KAAKjc,gBAAkBya,OAAYC,eAAe1a,gBAwCnD,OArCD0sB,eAAArtB,EAAA,EAAA7L,IAAA,mBAAAN,MAIA,SAAiBy5B,GACf,IAAMC,EAAY3sB,KAAK4sB,MAAMF,EAAUztB,SACvC+c,KAAK9lB,GAAKw2B,EAAUltB,MACpBwc,KAAK9pB,KAAOw6B,EAAU9uB,KACtBoe,KAAK9nB,WAAaw4B,EAAUr1B,SAC5B2kB,KAAK6Q,eAAiBH,EAAU5a,aAChCkK,KAAKpc,KAAO+sB,EAAU/sB,KACtBoc,KAAKjc,gBAAkB4sB,EAAU5sB,gBAG7B4sB,EAAUhtB,YACZqc,KAAKrc,UAAYgtB,EAAUhtB,WAEzBgtB,EAAU9sB,aACZmc,KAAKnc,WAAa8sB,EAAU9sB,YAE1B8sB,EAAU7sB,gBACZkc,KAAKlc,cAAgB6sB,EAAU7sB,iBAElC,CAAAvM,IAAA,MAAAN,MAED,WACE,MAAO,CACLiD,GAAI8lB,KAAK9lB,GACThE,KAAM8pB,KAAK9pB,KACXyN,UAAWqc,KAAKrc,UAChBzL,WAAY8nB,KAAK9nB,WACjB24B,eAAgB7Q,KAAK6Q,eACrBjtB,KAAMoc,KAAKpc,KACXC,WAAYmc,KAAKnc,WACjBC,cAAekc,KAAKlc,cACpBC,gBAAiBic,KAAKjc,qBAEzBX,EAjE+B,I,uHCF+F,W,IAAgB,OAAE,EAAK,QAAU,G,OAAO,EAAC,O,YAAC,c,CAAkB,UAAmB,OAAI3E,cAAY,K,CAAQ,SAAS,C,MAAM,CAAI,eAAM,GAAE,sBAAiBE,UAAW,CAAgBD,MAAM,CAAC,QAAiB,OAAID,IAAG,K,CAAqC,U,YAAkB,eAAmB,OAAIA,YAAW,QAAqBC,GAAK,OAAC,W,MAAM,CAA0D,eAAY,GAAK,sBAClhB,WACGU,oBAEJ,MAASsT,C,8JCJqM,W,IAA+B,O,EAAe,W,OAA0B,QAAY3T,GAAG,OAAQ,C,GAAC,CAAc,mBAAQ9H,OAAPoH,EAAM,iBAAQE,EAAIoB,W,CAA6C,EAAC,kB,MAACnB,CAAkB,+BAAI,UAAO,GAA6BE,aAAM,WAAC,QAAa,GAAC,SAAoB,SAAO,I,MAA6B,CAAuB,QAAU,MAAI,kBAAe,GAAmB,WAAQzH,WAAWiK,Y,GAAsC,EAACA,OAAQ,GAACjC,OAAG,C,MAAC,CAACT,cAAW,oBAAU,gBAAI,YAASsyB,IAAmCnyB,MAAW,EAAC,WAAOD,SAAM,GAAC,aAAO,oBAAQ,MAAMS,CAAyFT,MAAM,WAAC,SAAO,YAAS,cAA0FA,WAAM,eAAiB,mCAAE,YAAY,OAAkFA,MAAM,CAAC,KAAO,SAAU,CAACH,EAAIY,GAAG,IAAIZ,EAAIO,GAAGP,EAAIQ,GAAG,qBAAuB,OAAO,EAACR,KAAM,EAAGE,WAAY,UAACC,MAAM,CAAC,KAAO,YAAK,CAACD,EAAG,OAAQ,6DAACE,OAAsBD,KAAM,Y,CAAgC,KAAO,IAAG,mE,MAAC,CAAW,KAAO,UAAW,CAACH,EAAIY,GAAGZ,IAAM,EAAI,GAAG,EAAC,2BAA6B,wBAACI,OAA0BD,KAAM,KAAU,WAAE,YAAY,UAAEqyB,OAAa,cAAQ,iBAAQ,SAACryB,MAAM,GAAC,gB,CAAiD,KAAO,EAAG,mC,YAAW,cAAG,MAAC,CAAG,KAAC,KAAgC,WAAE,YAAY,CAAqFA,MAAM,S,MAAmB,CAAgB,uCAACL,KAAM,GAACpH,MAAOsH,GAAqBD,SAAS,I,GAAwC,CAACE,QAAW,sBAAoB,CAACC,EAAG,cAAoB,GAAC,6DAACC,MAAM,CAAC,YAAY,MAAW,e,MAAK,CAA8B,QAAUH,gBAAuB,qBAAM,EAAEA,gBAAY,GAAmB,WAAQ,oBAAsB,yBAACF,MAAM,CAACpH,aAAW+5B,S,GAAsCzyB,CAAmB,OAAC,mBAACC,QAAU,EAAC,wBAAiBC,GAAG,OAAS,UAACC,MAAM,CAAC,YAAqB,e,MAAK,C,MAA0BP,EAAO8yB,Y,SAAwB1yB,SAAiB,oBAAKE,WAAW,gBAA4CC,GAAK,OAAC,C,MAAC,CAAkB,oBAAuKA,IAAO,OAAQH,SAAa,GAAe,OAAd,mBAAc,EAAY,iB,CAAWtH,SAAU,CAACi1B,EAAI,Q,YAAU,W,MAAmB,CAAQ,gBAAC,KAAiB,kIAAG,MAAKtZ,CAA2D,MAAC,YAAC,SAAW,GAAU,cAA2DlU,MAAM,CAAC,MAAM,EAAC,IAAS,SAAQ,SAAS,GAAC,MAAW,GAAYH,WAAO,SAErzFa,WAAkB,EAAE,4BAExB,I,yMCqHe,G,UAAA,CACflJ,KAAA,YACAye,WAAA,CAAAuc,2BACAngC,KAAA,WACA,OACA4O,MAAA,GACAwxB,oBAAA,GACAL,oBAAA,GACA5vB,SAAA,GACA8vB,aAAA,EACAI,iBAAA,EACAlF,IAAA,GACAmF,WAAA,EACAC,iBAAA,EACAC,YAAA,IAGAhxB,QAAA,CACAwrB,MAAA,eAAAxzB,EAAA,KACA,KAAA84B,WAAA,EACA,KAAAC,iBAAA,EACA,KAAAE,YAAA,EACA,KAAAV,oBAAA,GACAx1B,OACAwwB,MAAA,KAAAnsB,MAAA,KAAAuB,UAAA,GACA/L,MAAA,SAAAs8B,GACAA,EACAl5B,EAAAm5B,gBAEAC,OAGAp3B,OAAA,SAAA3F,GACA,GAAAA,EAAAkM,UAAAlM,EAAAkM,SAAAC,OAAA,CACA,SAAAnM,EAAAkM,SAAAC,OAEA,YADAxI,EAAAg5B,YAAA,GAEA,SAAA38B,EAAAkM,SAAAC,OAEA,YADAxI,EAAA84B,WAAA,GAEA,SAAAz8B,EAAAkM,SAAAC,OAEA,YADAxI,EAAA+4B,iBAAA,GAIAz5B,QAAA6c,IAAA9f,GACAqJ,MAAA,sCAGAyzB,cAAA,WACA,KAAAxF,IAAA,GACA,KAAA8E,aAAA,GAEAY,oBAAA,WACA,KAAAP,WAAA,EACA,KAAAF,oBAAA,KAAAxxB,MACA,KAAAyxB,iBAAA,GAEAS,oBAAA,WACA,KAAAT,iBAAA,EACA,KAAAN,oBAAA,KAAA/xB,GAAA,qBAEA+yB,iBAAA,WACA,KAAAV,iBAAA,GAEAW,UAAA,WACA,KAAAf,aAAA,GAEAgB,YAAA,WACA12B,OACA2wB,SAAA,KAAAtsB,MAAA,KAAAuB,SAAA,KAAAgrB,KACA/2B,MAAA,WACAw8B,OAEAp3B,OAAA,SAAA03B,GACAh0B,MAAAg0B,UAMAN,EAAA,WACAjb,IACApb,OAAAyvB,iBAGArU,EAAA,WACA,IAAAwb,EAAAje,OAAAhJ,MAAAC,YAAAqE,OAAAlU,UAAA,GACAC,OAAAqb,sBAAAub,ICjNkW,I,YCO9V/wB,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,EAAAA,E,QCQA,GACfjL,KAAA,cACAye,WAAA,CAAAwd,cC5BqV,ICQjV,G,UAAY,eACd,EACA,EACA/yB,GACA,EACA,KACA,WACA,OAIa,e,6HCdTY,EAAsB,CAC1BC,aAAc,CAAC,SAAAmyB,GAAC,QAAOA,KAAOA,EAAEC,QAAW/rB,OAAKpP,EAAE,oBAClDo7B,oBAAqB,CACnB,SAAAF,GACE,IAAKA,EACH,OAAO,EAGT,GAAIjQ,OAAWa,cAAcoP,GAC3B,OAAO9rB,OAAKpP,EAAE,gBAGhB,IAAK,iBAAiB+rB,KAAKmP,GACzB,OAAO9rB,OAAKpP,EAAE,yBAGhB,IAAMwwB,EAAM,GACZ,QAAI0K,EAAE7gC,OAASm2B,IACNphB,OAAKpP,EAAE,iBAAkB,CAAEq7B,EAAG7K,MAK3C8K,WAAY,CACV,SAAAJ,GACE,OAAKA,IAGDA,EAAE7gC,OAASiT,OAAOgjB,iBAAiBC,IAC9BnhB,OAAKpP,EAAE,sBAEX,QAAQ+rB,KAAKmP,KAEPA,EAAE7gC,OAASiT,OAAOgjB,iBAAiBE,MACrCphB,OAAKpP,EAAE,iBAFPoP,OAAKpP,EAAE,uBAOpBiJ,mBAAoB,CAClB,SAAAiyB,GACE,IAAMzyB,EAAQ,IAAI8yB,OAAML,GACxB,OAAOzyB,EAAM+yB,WAAapsB,OAAKpP,EAAE,kBAGrCgJ,WAAY,CACV,SAAAkyB,GACE,IAAKA,EACH,OAAO,EAET,IAAMzyB,EAAQ,IAAI8yB,OAAML,GACxB,OAAOzyB,EAAM+yB,WAAapsB,OAAKpP,EAAE,kBAGrCkJ,cAAe,CACb,SAAAgyB,GACE,IAAKA,GAAKA,EAAE7gC,OAAS,EACnB,OAAO+U,OAAKpP,EAAE,eAEhB,GAAIk7B,EAAE7gC,OAAS,GACb,OAAO+U,OAAKpP,EAAE,eAEhB,IAAM2rB,EAAeV,OAAWU,aAAauP,GACvCtP,EAAeX,OAAWW,aAAasP,GACvClP,EAAYf,OAAWe,UAAUkP,GACvC,SAAKvP,GAAiBC,GAAiBI,IAC9B5c,OAAKpP,EAAE,sBAKpBy7B,SAAU,CACR,SAAAP,GACE,IAAKA,EACH,OAAO,EAET,IAAMQ,EAA4B,YAAnBR,EAAElvB,OAAO,EAAG,GACrB2vB,EAA6B,aAAnBT,EAAElvB,OAAO,EAAG,GACtB4vB,EAAmC,OAAnBV,EAAElvB,OAAO,EAAG,GAClC,SAAK0vB,GAAWC,GAAYC,IACnBxsB,OAAKpP,EAAE,iBAKpB67B,iBAAkB,CAAC,SAAAX,GAAC,OAAMA,KAAOA,EAAEC,QAAW/rB,OAAKpP,EAAE,qBAGxC8I,U,gGCxFTU,EAAU,CACdsyB,MAAO,MAOP1hB,WAAU,WACR,OAAO,IAAIhe,SAAQ,SAAAC,GAEM4G,OACpBC,QAAQ,mBAAoB,KAAM,UAClCjF,MAAK,SAAAof,GACJ0e,EAAoB1e,GAAYpf,MAAK,SAAAyD,GAiBnC,IAAMs6B,EAAW3e,EAAWhF,OAAO4jB,UAC7BC,EAAa7e,EAAWhF,OAAOU,QAC/BnZ,EAAIyd,EAAWmB,aACf3iB,EAAI,CACRojB,UAAWid,EAAWC,UACtBC,sBAAuBF,EAAWG,iBAClCvwB,SAAUlM,EAAIo8B,EAAS5vB,IAAM8vB,EAAWpN,MACxC/nB,MAAOnH,EAAIo8B,EAASxD,SAAW0D,EAAWI,eAC1C1I,eAAgBh0B,EAAIo8B,EAAS/1B,QAAUi2B,EAAWlN,QAClDuN,cAAe38B,EAAIo8B,EAASQ,MAAQnf,EAAWuR,cAC/CzQ,cAAave,GAAIo8B,EAAS3jB,OAC1B6G,MAAOgd,EAAWO,MAClBC,cAAeR,EAAWS,iBAKxBtf,EAAWhF,OAAOQ,QACpBhd,EAAEiQ,UAAW,EACbjQ,EAAEkL,OAAQ,EACVlL,EAAE+3B,gBAAiB,EACnB/3B,EAAE0gC,eAAgB,EAClB1gC,EAAEsiB,aAAc,GAGlBd,EAAWhF,OAAOkC,aAAe1e,EACjC2jB,EAAcnC,GAIdA,EAAW5E,kBAAoB/W,EAC/BrF,EAAQghB,aAKlBmW,cAAa,SAACx0B,EAAMyJ,EAAOgrB,GACzB,IAAM5vB,EAAS,CAAE6G,KAAM1L,EAAMuvB,MAAO9lB,EAAOm0B,MAAOnJ,GAClD,OAAOxwB,OAAIC,QAAQ,oBAAqBW,IAG1C4F,mBAAkB,SAACgkB,EAAQlkB,GACzB,IAAM1F,EAAS,CACb0pB,SAAUE,EACVoP,MAAO/T,KAAKgT,MACZ1vB,IAAK,CACH0wB,SAAUxvB,OAAOkiB,QACjBzjB,QAASxC,EAAoB,QAGjC,OAAOtG,OAAIC,QAAQ,qBAAsBW,EAAQ,MAAM,IAGzD6F,mBAAkB,SAAC+jB,EAAQ3lB,EAAOE,GAChC,IAAMnE,EAAS,CACb0pB,SAAUE,EACVsP,MAAOj1B,EACPk1B,YAAah1B,EACb60B,MAAO/T,KAAKgT,OAEd,OAAO74B,OAAIC,QAAQ,qBAAsBW,EAAQ,MAAM,GAAO,KAI5Dk4B,EAAsB,SAAA/nB,GAC1B,OAAO,IAAI5X,SAAQ,SAAAC,GACZ2X,EAAYqE,OAAOQ,MAGtBkE,OACGzC,SAAS,qBACTrc,MAAK,SAAAyD,GAAW,OAAIrF,EAAQqF,MAJ/BrF,EAAQ,QASRmjB,EAAgB,SAAAxL,GACpB,IAAIA,EAAYqE,OAAOQ,OAIlB7E,EAAYqE,OAAOe,WAAW/e,OAAnC,CAIA,IAAM4iC,EAAoB74B,OAAKC,wBAM5B44B,IACDjpB,EAAYqE,OAAOlU,UAClB6P,EAAYqE,OAAOe,WAAW/e,QAE/B+J,OAAKqb,sBAAsBzL,EAAYqE,OAAOlU,YAInCqF,U,6FCpIToR,EAAW,CACf1G,OAAQ,KACR2G,UAAS,WACP,OAAO,IAAIze,SAAQ,SAASC,GACtBue,EAAS1G,OACX7X,EAAQue,EAAS1G,QAEjBjR,OAAIC,QAAQ,YAAa,KAAM,UAAUjF,MAAK,SAAAiW,GAC5C0G,EAAS1G,OAASgpB,EAAKC,EAAoBjpB,IAC3C7X,EAAQue,EAAS1G,eAKzBkpB,WAAU,SAACC,EAAW3wB,EAAM4wB,GAC1B,OAAO,IAAIlhC,SAAQ,SAACC,EAASC,GAC3BgrB,OAAYK,qBAAqB1pB,MAAK,SAAAsxB,GACpC,IAAM1rB,EAAS,CACb05B,QAAS,GACTC,OAAQ,CACNC,MAAOH,EACPI,QAAShxB,GAEXixB,SAAU,CACR,CACEC,SAAUrO,EACVsO,UAAWR,KAKjBp6B,OAAIC,QAAQ,YAAaW,GAAQ5F,MAAK,SAAAmF,GACjB,kCAAfA,EAAIyD,OACNxK,IAEAC,eAQN6gC,EAAsB,SAAAjpB,GAC1B,OAAOA,EAAOtN,QAAO,SAAAgM,GAAK,OACxB0U,OAAYa,wBAAwBpQ,MAClC,SAAA+lB,GAAQ,OAAIlrB,EAAMsV,eAAiB4V,EAASlgC,YAK5Cs/B,EAAO,SAAAhpB,GACX,OAAOA,EAAOgpB,MAAK,SAACa,EAAGC,GAAC,OAAKD,EAAE7V,aAAa+V,cAAcD,EAAE9V,kBAG/CtN,U,kCC1Df,W,gGCGqB2gB,G,wCAAK,WACxB,SAAAA,EAAY2C,GAAW7E,eAAA,KAAAkC,GACrBzS,KAAKoV,UAAYA,EAelB,OAdA3E,eAAAgC,EAAA,EAAAl7B,IAAA,UAAAN,MAED,WAEE,IAAMo+B,EAAiB,CAAC,IAAK,IAAK,KAC9BhkC,EAAI,EACFglB,EAAMgf,EAAe9jC,OAC3B,IAAKF,EAAGA,EAAIglB,EAAKhlB,IACf,IAAmD,IAA/C2uB,KAAKoV,UAAU/7B,QAAQg8B,EAAehkC,IACxC,OAAO,EAIX,MAAO,eAAe4xB,KAAKjD,KAAKoV,eACjC3C,EAjBuB,K","file":"js/app.1cb4bafd.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-0fa4b000\":\"da3ed462\",\"chunk-2b433ae0\":\"92f3e079\",\"chunk-2c643cb2\":\"d9e351ac\",\"chunk-553e7f48\":\"5145efd2\",\"chunk-57eacccf\":\"6f26b4e5\",\"chunk-6709d376\":\"706c51a2\",\"chunk-761a863e\":\"c0aa1837\",\"chunk-78a54aea\":\"a8643730\",\"chunk-029736e1\":\"2fdab428\",\"chunk-068dd636\":\"fdd67c62\",\"chunk-5b541a49\":\"996a790e\",\"chunk-71cb4377\":\"e9d9457c\",\"chunk-8d4fc662\":\"99e3fd16\",\"chunk-aa111bf4\":\"06a21d35\",\"chunk-aad09e3c\":\"66ed5cd6\",\"chunk-6e90c523\":\"ac550c47\",\"chunk-30f66204\":\"4a8a4c79\",\"chunk-2d0d3aef\":\"ebcc4168\",\"chunk-5c87ad8d\":\"532d747c\",\"chunk-138be3aa\":\"b6cb310f\",\"chunk-68e2ff65\":\"76ed288a\",\"chunk-7ec8d674\":\"8ff2eae1\",\"chunk-bcfb5356\":\"36b74937\",\"chunk-cd8a1962\":\"2b61521f\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"chunk-0fa4b000\":1,\"chunk-553e7f48\":1,\"chunk-57eacccf\":1,\"chunk-6709d376\":1,\"chunk-761a863e\":1,\"chunk-78a54aea\":1,\"chunk-029736e1\":1,\"chunk-068dd636\":1,\"chunk-5b541a49\":1,\"chunk-71cb4377\":1,\"chunk-8d4fc662\":1,\"chunk-aa111bf4\":1,\"chunk-aad09e3c\":1,\"chunk-6e90c523\":1,\"chunk-30f66204\":1,\"chunk-5c87ad8d\":1,\"chunk-cd8a1962\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-0fa4b000\":\"d526bc61\",\"chunk-2b433ae0\":\"31d6cfe0\",\"chunk-2c643cb2\":\"31d6cfe0\",\"chunk-553e7f48\":\"8a0e8df7\",\"chunk-57eacccf\":\"c8f13af5\",\"chunk-6709d376\":\"4d805644\",\"chunk-761a863e\":\"c48ed29c\",\"chunk-78a54aea\":\"cb866668\",\"chunk-029736e1\":\"de71a636\",\"chunk-068dd636\":\"a06349dc\",\"chunk-5b541a49\":\"f695c6ec\",\"chunk-71cb4377\":\"27982152\",\"chunk-8d4fc662\":\"f885da1f\",\"chunk-aa111bf4\":\"c134788f\",\"chunk-aad09e3c\":\"dbfb8fac\",\"chunk-6e90c523\":\"f03dc80e\",\"chunk-30f66204\":\"cbbd9069\",\"chunk-2d0d3aef\":\"31d6cfe0\",\"chunk-5c87ad8d\":\"23ca5fbb\",\"chunk-138be3aa\":\"31d6cfe0\",\"chunk-68e2ff65\":\"31d6cfe0\",\"chunk-7ec8d674\":\"31d6cfe0\",\"chunk-bcfb5356\":\"31d6cfe0\",\"chunk-cd8a1962\":\"73eea5d4\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","/*\r\n This module is a wrapper for the department API. It caches the departments for a short period\r\n of time to avoid many unnecessary API calls when the app loads, since several components asks for the\r\n departments.\r\n */\r\nimport apiDepartment from \"@/api/v24/api.department\";\r\nimport store from \"@/store\";\r\n\r\nconst department = {\r\n cacheLimit: 500,\r\n lastUpdate: null,\r\n cachedDepartments: [],\r\n\r\n getAll() {\r\n return new Promise(resolve => {\r\n if (this.lastUpdate && this.cachedDepartments.length) {\r\n const now = new Date();\r\n const diff = now - this.lastUpdate;\r\n if (diff < this.cacheLimit) {\r\n resolve(this.cachedDepartments);\r\n return;\r\n }\r\n }\r\n apiDepartment.getAll().then(departments => {\r\n this.cachedDepartments = departments;\r\n this.lastUpdate = new Date();\r\n resolve(departments);\r\n });\r\n });\r\n },\r\n\r\n customerUsesDepartments() {\r\n return new Promise(resolve => {\r\n this.getAll().then(allDepartments => {\r\n resolve(allDepartments.length > 1);\r\n });\r\n });\r\n }\r\n};\r\n\r\nexport default department;\r\n","const numberUtil = {\r\n periodToComma(input) {\r\n let output = input.toString();\r\n if (output.indexOf(\".\") !== -1) {\r\n output = output.split(\".\");\r\n if (output.length > 2) {\r\n throw output + \" is not a valid number\";\r\n }\r\n output = output[0] + \",\" + output[1];\r\n }\r\n return output;\r\n },\r\n\r\n addThousandSperators(input, delimiter) {\r\n // https://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript\r\n return input.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, delimiter);\r\n },\r\n\r\n isNumber(n) {\r\n // https://stackoverflow.com/a/16655847/529171\r\n return !isNaN(parseFloat(n)) && isFinite(n);\r\n },\r\n\r\n bytesToMegabytes(bytes, numOfDecimals) {\r\n return bytes / 1024 / 1024;\r\n }\r\n};\r\n\r\nexport default numberUtil;\r\n","import api from \"./api\";\r\nimport numberUtil from \"@/util/numberUtil\";\r\nimport user from \"@/util/user\";\r\n\r\nconst apiContact = {\r\n get(id) {\r\n return new Promise((resolve, reject) => {\r\n api\r\n .execute(\"HentKontakt\", { Id: id }, \"Kontakter\")\r\n .then(res => {\r\n resolve(res[0]);\r\n })\r\n .catch(err => {\r\n reject(err);\r\n });\r\n });\r\n },\r\n\r\n getMultiple(\r\n pageIndex,\r\n numberOfRows,\r\n sortField = \"\",\r\n sortDesc = false,\r\n abortSignal = null\r\n ) {\r\n let params = null;\r\n if (pageIndex && numberOfRows) {\r\n params = {\r\n Paging: {\r\n RowCount: numberOfRows,\r\n PageIdx: pageIndex\r\n },\r\n SorterFelt: sortField,\r\n SorterSynkende: sortDesc,\r\n Avdeling: user.getSelectedDepartment()\r\n };\r\n }\r\n return api.execute(\r\n \"HentKontakter\",\r\n params,\r\n null,\r\n true,\r\n null,\r\n \"\",\r\n abortSignal\r\n );\r\n },\r\n\r\n getAll(abortSignal = null) {\r\n const pageSize = 10000; // 10 000 ett ok antall? Tilsvarer ca 3.4 mb data og ca 1 sec\r\n let pageIndex = 1;\r\n let allContacts = [];\r\n\r\n const fetchChunk = () => {\r\n if (abortSignal && abortSignal.aborted) {\r\n throw new Error(\"Operation cancelled\");\r\n }\r\n return this.getMultiple(pageIndex, pageSize, \"\", false, abortSignal).then(\r\n res => {\r\n if (res.Kontakter && res.Kontakter.length > 0) {\r\n allContacts = allContacts.concat(res.Kontakter);\r\n pageIndex++;\r\n return fetchChunk();\r\n } else {\r\n return allContacts;\r\n }\r\n }\r\n );\r\n };\r\n\r\n return new Promise((resolve, reject) => {\r\n fetchChunk()\r\n .then(resolve)\r\n .catch(reject);\r\n });\r\n },\r\n\r\n /**\r\n * @name search\r\n *\r\n * @param searchString\r\n * @param pageIndex\r\n * @param numberOfRows\r\n * @param sortField\r\n * @param sortDesc\r\n * @param contactsToIgnore Array of contact IDs to ignore\r\n * @param groupToIgnore Group ID to ignore. If this is set,\r\n * contactsToIgnore is... ignored...\r\n * @returns {Promise}\r\n */\r\n search(\r\n searchString,\r\n pageIndex,\r\n numberOfRows,\r\n sortField = \"\",\r\n sortDesc = false,\r\n contactsToIgnore = [],\r\n groupToIgnore = null\r\n ) {\r\n const ignoreIds = contactsToIgnore.map(contactToIgnore => {\r\n if (numberUtil.isNumber(contactToIgnore)) {\r\n return contactToIgnore;\r\n }\r\n return contactToIgnore.Id;\r\n });\r\n // API allows search with wildcard. We do this since that is the way it's\r\n // done when we search with custom-filter in datatables\r\n let searchStringWildcard = searchString.replace(\" \", \"%\");\r\n const params = {\r\n Tekst: searchStringWildcard,\r\n StarterMed: false,\r\n Paging: {\r\n RowCount: numberOfRows,\r\n PageIdx: pageIndex\r\n },\r\n SorterFelt: sortField,\r\n SorterSynkende: sortDesc,\r\n Unntak: ignoreIds,\r\n UnntakGruppe: groupToIgnore,\r\n Avdeling: user.getSelectedDepartment()\r\n };\r\n return api.execute(\"SokKontakter\", params);\r\n },\r\n\r\n /**\r\n * @name create\r\n * @param {Contact} contact Instance of class Contact\r\n * @returns {Promise}\r\n */\r\n create(contact) {\r\n return new Promise(resolve => {\r\n const params = {\r\n GruppeId: 0,\r\n Kontakter: [contact.getAsApiObject()],\r\n Avdeling: user.getSelectedDepartment()\r\n };\r\n createContacts(params).then(res => {\r\n resolve(res[0]);\r\n });\r\n });\r\n },\r\n\r\n /**\r\n *\r\n * @param {Contacts} contacts\r\n * @param groupId\r\n */\r\n createContactsAndAddToGroup(contacts, groupId) {\r\n const params = {\r\n GruppeId: groupId,\r\n Kontakter: contacts.getAsApiFormat()\r\n };\r\n return createContacts(params);\r\n },\r\n\r\n change(contact) {\r\n const params = {\r\n Kontakt: contact.getAsApiObject()\r\n };\r\n return api.execute(\"EndreKontakt\", params);\r\n },\r\n\r\n delete(id) {\r\n return api.execute(\"SlettKontakt\", { Id: id });\r\n },\r\n\r\n deleteMultiple(ids, silent = false) {\r\n return new Promise((resolve, reject) => {\r\n api\r\n .execute(\"SlettKontakter\", { Ids: ids }, null, true, silent)\r\n .then(res => {\r\n resolve(res);\r\n })\r\n .catch(err => {\r\n reject(err);\r\n });\r\n });\r\n },\r\n\r\n getContactsInGroup(groupId) {\r\n return api.execute(\"HentMedlemmer\", { GruppeId: groupId }, \"Medlem\");\r\n },\r\n\r\n getContactDeputies(contactsId) {\r\n return api.execute(\r\n \"HentKontaktVikarer\",\r\n { KontaktIds: contactsId },\r\n \"KontaktVikarer\"\r\n );\r\n }\r\n};\r\n\r\nconst createContacts = params => {\r\n return new Promise(resolve => {\r\n api.execute(\"NyKontakt\", params, \"Kontakter\").then(contacts => {\r\n const serverErrs = contacts.filter(contact => contact.Status !== \"OK\");\r\n if (serverErrs.length) {\r\n // Should not come here since all input should valid. This is the \"last\r\n // line of defense\"\r\n const errorMsg =\r\n \"Server rejected \" +\r\n serverErrs.length +\r\n \" contacts. \" +\r\n \"Review your data or contact Fram Web for support\";\r\n alert(errorMsg);\r\n }\r\n resolve(contacts);\r\n });\r\n });\r\n};\r\n\r\nexport default apiContact;\r\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[(_vm.emailField)?_c('v-form',{attrs:{\"autocomplete\":\"off\"},on:{\"submit\":function($event){$event.preventDefault();return _vm.sendRequest.apply(null, arguments)}},model:{value:(_vm.formSendCodeValid),callback:function ($$v) {_vm.formSendCodeValid=$$v},expression:\"formSendCodeValid\"}},[_c('p',[_vm._t(\"enterEmailText\")],2),(!_vm.hideEmail)?_c('v-text-field',{attrs:{\"label\":_vm.$t('email'),\"rules\":_vm.emailRules,\"autofocus\":\"\",\"autocomplete\":\"off\",\"required\":\"\",\"outlined\":\"\"},model:{value:(_vm.email),callback:function ($$v) {_vm.email=$$v},expression:\"email\"}}):_vm._e(),_c('div',{staticClass:\"d-flex justify-center\"},[_c('v-btn',{staticClass:\"primary\",attrs:{\"type\":\"submit\",\"large\":\"\",\"disabled\":!_vm.formSendCodeValid,\"data-testid\":\"sendPasswordCreator\"}},[_vm._v(\" \"+_vm._s(_vm.$t(\"sendCodeToMob\"))+\" \")])],1)],1):_vm._e(),(_vm.tokenField)?_c('v-form',{attrs:{\"autocomplete\":\"off\"},on:{\"submit\":function($event){$event.preventDefault();return _vm.validateToken.apply(null, arguments)}}},[_c('p',[_vm._v(\" \"+_vm._s(_vm.$t(\"enterCodeInfo\"))+\" \")]),_c('v-text-field',{attrs:{\"label\":_vm.$t('code'),\"outlined\":\"\",\"required\":\"\",\"autofocus\":\"\",\"autocomplete\":\"new-password\"},model:{value:(_vm.token),callback:function ($$v) {_vm.token=$$v},expression:\"token\"}}),_c('v-text-field',{attrs:{\"label\":_vm.$t('newPassword'),\"autocomplete\":\"new-password\",\"rules\":_vm.passwordRules,\"maxlength\":\"32\",\"type\":\"password\",\"outlined\":\"\",\"required\":\"\"},model:{value:(_vm.newPassword),callback:function ($$v) {_vm.newPassword=$$v},expression:\"newPassword\"}}),(_vm.errorMsg)?_c('v-alert',{attrs:{\"type\":\"error\"}},[_vm._v(\" \"+_vm._s(_vm.errorMsg)+\" \")]):_vm._e(),_c('div',{staticClass:\"d-flex justify-center\"},[_c('v-btn',{staticClass:\"mr-4\",attrs:{\"type\":\"button\",\"large\":\"\"},on:{\"click\":function($event){$event.preventDefault();return _vm.back.apply(null, arguments)}}},[_vm._v(\" \"+_vm._s(_vm.$t(\"back\"))+\" \")]),_c('v-btn',{staticClass:\"primary\",attrs:{\"type\":\"submit\",\"large\":\"\",\"disabled\":!_vm.token || !_vm.newPassword}},[_vm._v(\" \"+_vm._s(_vm.$t(\"ok\"))+\" \")])],1)],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PasswordCreator.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PasswordCreator.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PasswordCreator.vue?vue&type=template&id=17391140&\"\nimport script from \"./PasswordCreator.vue?vue&type=script&lang=js&\"\nexport * from \"./PasswordCreator.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import api from \"./api\";\r\nimport user from \"@/util/user\";\r\n\r\nconst apiGroup = {\r\n get(id) {\r\n return new Promise(resolve => {\r\n api.execute(\"HentGruppe\", { Id: id }, \"Grupper\").then(groups => {\r\n resolve(groups[0]);\r\n });\r\n });\r\n },\r\n getMembers(\r\n groupId,\r\n pageIndex,\r\n numberOfRows,\r\n sortField = \"\",\r\n sortDesc = false\r\n ) {\r\n const params = {\r\n GruppeId: groupId,\r\n Paging: {\r\n RowCount: numberOfRows,\r\n PageIdx: pageIndex\r\n },\r\n SorterFelt: sortField,\r\n SorterSynkende: sortDesc\r\n };\r\n return api.execute(\"HentMedlemmer\", params);\r\n },\r\n searchMembers(\r\n groupId,\r\n searchStr,\r\n pageIndex,\r\n numberOfRows,\r\n sortField = \"\",\r\n sortDesc = false\r\n ) {\r\n const params = {\r\n GruppeId: groupId,\r\n Paging: {\r\n RowCount: numberOfRows,\r\n PageIdx: pageIndex\r\n },\r\n SorterFelt: sortField,\r\n SorterSynkende: sortDesc,\r\n Tekst: searchStr,\r\n StarterMed: false\r\n };\r\n return api.execute(\"SokMedlemmer\", params);\r\n },\r\n save(id, name, department = \"\", shortname = \"\") {\r\n const params = {\r\n Gruppe: {\r\n Id: id,\r\n Navn: name,\r\n Avdeling: department,\r\n KodeNavn: shortname\r\n }\r\n };\r\n return api.execute(\"EndreGruppe\", params);\r\n },\r\n getAll(silent, forceFetchAll) {\r\n const department = forceFetchAll ? \"\" : user.getSelectedDepartment();\r\n const params = { Avdeling: department };\r\n return api.execute(\"HentGrupper\", params, \"Grupper\", true, silent);\r\n },\r\n addContact(groupId, contactId) {\r\n const params = { GruppeId: groupId, KontaktId: contactId };\r\n return api.execute(\"NyttMedlem\", params);\r\n },\r\n removeContact(groupId, contactId) {\r\n const params = { GruppeId: groupId, KontaktId: contactId };\r\n return api.execute(\"slettMedlem\", params);\r\n },\r\n create(name, department = \"\", shortword = \"\") {\r\n if (!department) {\r\n department = user.getSelectedDepartment();\r\n }\r\n const params = {\r\n Gruppe: {\r\n Navn: name,\r\n Avdeling: department,\r\n KodeNavn: shortword\r\n }\r\n };\r\n return new Promise((resolve, reject) => {\r\n api\r\n .execute(\"NyGruppe\", params, \"Gruppe\", true, true)\r\n .then(group => {\r\n resolve(group);\r\n })\r\n .catch(err => {\r\n reject(err);\r\n });\r\n });\r\n },\r\n /**\r\n * Deletes group. Note: Will throw error 413 if group is tied to a\r\n * scenario. Calling component is responsable to handle this.\r\n * @param id\r\n * @param deleteContacts\r\n * @returns {Promise}\r\n */\r\n delete(id, deleteContacts = true) {\r\n const params = {\r\n Id: id,\r\n SlettKontakter: deleteContacts\r\n };\r\n return new Promise((resolve, reject) => {\r\n api\r\n .execute(\"SlettGruppe\", params, null, true, true)\r\n .then(() => {\r\n resolve();\r\n })\r\n .catch(err => {\r\n reject(err);\r\n });\r\n });\r\n },\r\n /**\r\n * Deletes members from group\r\n * @param members Array with objects containing GruppeId and KontaktId\r\n */\r\n deleteMembers(members) {\r\n return new Promise((resolve, reject) => {\r\n const params = { Medlemmer: members };\r\n api\r\n .execute(\"SlettMedlemmer\", params, null, true, true)\r\n .then(() => {\r\n resolve();\r\n })\r\n .catch(err => {\r\n reject(err);\r\n });\r\n });\r\n },\r\n deleteAll(ids, deleteContacts) {\r\n const params = {\r\n Ids: ids,\r\n SlettKontakter: deleteContacts\r\n };\r\n return new Promise((resolve, reject) => {\r\n api\r\n .execute(\"SlettGrupper\", params, null, true, true)\r\n .then(() => {\r\n resolve();\r\n })\r\n .catch(err => {\r\n reject(err);\r\n });\r\n });\r\n },\r\n getNumberOfMembers(groupId) {\r\n return api.execute(\r\n \"HentAntallMedlemmer\",\r\n { GruppeId: groupId },\r\n \"AntallTotalt\"\r\n );\r\n }\r\n};\r\n\r\nexport default apiGroup;\r\n","import api from \"./api\";\r\nimport AlertTemplate from \"@/util/AlertTemplate\";\r\nimport user from \"@/util/user\";\r\n\r\nconst apiAlertTemplates = {\r\n getAll() {\r\n const selDep = user.getSelectedDepartment();\r\n const params = selDep ? { Avdeling: selDep } : null;\r\n return new Promise(resolve => {\r\n api.execute(\"HentMaler\", params, \"Maler\").then(templates => {\r\n // Only return new JSON-format templates\r\n const parsedTemplates = templates\r\n .filter(template => {\r\n return template.Melding.substr(0, 1) === \"{\";\r\n })\r\n .map(template => {\r\n const alertTempl = new AlertTemplate();\r\n alertTempl.setFromApiObject(template);\r\n return alertTempl.get();\r\n });\r\n resolve(parsedTemplates);\r\n });\r\n });\r\n },\r\n\r\n create(template, department) {\r\n const params = {\r\n Mal: {\r\n Navn: template.name,\r\n Melding: createTemplateJson(template),\r\n Avdeling: department\r\n }\r\n };\r\n return api.execute(\"NyMal\", params);\r\n },\r\n\r\n delete(template) {\r\n const params = { MalId: template.id };\r\n return api.execute(\"SlettMal\", params);\r\n },\r\n\r\n update(template, department) {\r\n const params = {\r\n Mal: {\r\n MalId: template.id,\r\n Navn: template.name,\r\n Melding: createTemplateJson(template),\r\n Avdeling: department\r\n }\r\n };\r\n return api.execute(\"EndreMal\", params);\r\n }\r\n};\r\n\r\nconst createTemplateJson = template => {\r\n const obj = {\r\n alertName: template.alertName,\r\n text: template.text,\r\n emailTitle: template.emailTitle,\r\n voiceSettings: template.voiceSettings,\r\n responseOptions: template.responseOptions\r\n };\r\n return JSON.stringify(obj);\r\n};\r\n\r\nexport default apiAlertTemplates;\r\n","import axios from \"axios/index\";\r\nimport config from \"../../config/config\";\r\nimport user from \"../../util/user\";\r\nimport i18n from \"@/i18n\";\r\n\r\nconst api = {\r\n execute: (\r\n methodName,\r\n params = null,\r\n returnField = null,\r\n logoutOnUnauth = true,\r\n silent = false,\r\n formData = null,\r\n apiPath = \"\",\r\n abortSignal = null\r\n ) => {\r\n return new Promise((resolve, reject) => {\r\n let url = \"\";\r\n if (apiPath === \"audio\") {\r\n url = config.urlV24AudioApi;\r\n } else {\r\n url = config.urlV24Api;\r\n }\r\n url += methodName;\r\n const sessionId = user.getSessionId();\r\n let axiosParams = {\r\n method: \"post\",\r\n url: url,\r\n headers: {\r\n // For backend stats purpose\r\n \"X-V24-Service\": \"GA\"\r\n },\r\n abortSignal: abortSignal\r\n };\r\n if (params) {\r\n axiosParams.data = JSON.stringify(params);\r\n } else if (formData) {\r\n axiosParams.data = formData;\r\n axiosParams.headers[\"content-type\"] = \"multipart/form-data\";\r\n }\r\n if (sessionId) {\r\n axiosParams.headers.SessionId = sessionId;\r\n }\r\n\r\n axios(axiosParams)\r\n .then(res => {\r\n if (returnField) {\r\n resolve(res.data[returnField]);\r\n } else {\r\n resolve(res.data);\r\n }\r\n })\r\n .catch(err => {\r\n if (err.response?.status === 401 && logoutOnUnauth) {\r\n user.logOutClient();\r\n return;\r\n }\r\n if (err.response?.data?.Errors?.length) {\r\n checkAccessRights(err.response.data.Errors);\r\n addCustomHintFields(err);\r\n if (!silent) {\r\n alert(parseOutErrorMsg(err));\r\n }\r\n reject(err);\r\n } else {\r\n if (!silent) {\r\n handleNoResponse(err);\r\n }\r\n reject(err);\r\n }\r\n });\r\n });\r\n }\r\n};\r\n\r\nconst addCustomHintFields = err => {\r\n // Using parse int to make sure we get a number. Issue #750 suggests that the code can be a string\r\n const code = parseInt(err.response.data.Errors[0].Code, 10);\r\n if (code === 404) {\r\n // Adding custom field to make it easier to detect 404s\r\n err._notFound = true;\r\n } else if (code === 403) {\r\n // Adding custom field to make it easier to detect 403s\r\n err._forbidden = true;\r\n } else if (code === 461) {\r\n // Adding custom field to make it easier to detect 461s\r\n err._dupe = true;\r\n } else if (code === 462) {\r\n // Adding custom field to make it easier to detect 462s\r\n err._inUse = true;\r\n }\r\n};\r\n\r\nconst checkAccessRights = errors => {\r\n const accessRightsErrMsg = \"Access denied - Missing user access rights\";\r\n errors.forEach(error => {\r\n if (error.Details === accessRightsErrMsg && error.Code === 403) {\r\n alert(i18n.t(\"503permissionInfo\"));\r\n window.location.href = \"/\";\r\n }\r\n });\r\n};\r\n\r\nconst handleNoResponse = errorObj => {\r\n if (!navigator.onLine) {\r\n alert(i18n.t(\"noInternetConnection\"));\r\n } else if (errorObj && !errorObj.response) {\r\n alert(errorObj.toString());\r\n } else {\r\n alert(i18n.t(\"unknownError\"));\r\n }\r\n};\r\n\r\nconst parseOutErrorMsg = errorObj => {\r\n const r = errorObj.response;\r\n let err = i18n.t(\"anErrorOccurred\") + \".\\r\\n\";\r\n if (r.data && r.data.Errors.length) {\r\n r.data.Errors.forEach(error => {\r\n err += error.Code + \" \" + error.Title + \"\\r\\n\";\r\n });\r\n } else {\r\n err = r.statusText;\r\n }\r\n err += \"\\r\\n\" + i18n.t(\"contactSupportForHelp\");\r\n return err;\r\n};\r\n\r\nexport default api;\r\n","/**\r\n * Wrapper for localStorage that can easily be mocked\r\n */\r\nconst storage = {\r\n setLocalItem(key, item) {\r\n localStorage.setItem(key, item);\r\n },\r\n getLocalItem(key) {\r\n // Don't remove \"window\" from window.localStorage even though it's not\r\n // neccessary when running in the browser. We need it for our stubs in\r\n // unit tests\r\n return window.localStorage.getItem(key);\r\n },\r\n setSessionItem(key, item) {\r\n window.sessionStorage.setItem(key, item);\r\n },\r\n getSessionItem(key) {\r\n return window.sessionStorage.getItem(key);\r\n }\r\n};\r\n\r\nexport default storage;\r\n","// See https://github.com/FramWeb/V24CoreApi/issues/909\r\nimport api from \"./api\";\r\n\r\nconst apiEvent = {\r\n set(operation, data) {\r\n const params = {\r\n Operation: operation,\r\n Params: data\r\n };\r\n return api.execute(\"Event\", params, null, false, true);\r\n }\r\n};\r\n\r\nexport default apiEvent;\r\n","const eventLogConfig = {\r\n // Event log operation types.\r\n // They are defined here for easy overview for all event log types.\r\n operation: {\r\n importReceiversFromAlertPage: \"ImportReceiversFromAlertPage\",\r\n extraReceiverUsed: \"ExtraReceiverUsed\",\r\n receiversAddedFromDsf: \"ReceiversAddedFromDsf\",\r\n voiceFileUsedInAlert: \"VoiceFileUsedInAlert\",\r\n voiceFileRecordedOnAlertPage: \"VoiceFileRecordedOnAlertPage\",\r\n voiceFileRecorded: \"VoiceFileRecorded\",\r\n voiceFileUploaded: \"VoiceFileUploaded\",\r\n voiceFileEdited: \"VoiceFileEdited\",\r\n voiceUsedInAlert: \"VoiceUsedInAlert\",\r\n emailFileUploaded: \"EmailFileUploaded\",\r\n emailFileEdited: \"EmailFileEdited\",\r\n dsfExctraction: \"DsfExctraction\",\r\n scenarioUsed: \"ScenarioUsed\",\r\n themeChange: \"ThemeChange\",\r\n ageFilter: \"AgeFilter\"\r\n }\r\n};\r\n\r\nexport default eventLogConfig;\r\n","// See https://github.com/FramWeb/V24CoreApi/issues/909\r\n// See https://github.com/FramWeb/V24CoreApi/issues/909\r\nimport apiEvent from \"@/api/v24/api.event\";\r\nimport eventLogConfig from \"@/config/eventLogConfig\";\r\n\r\nconst operation = eventLogConfig.operation;\r\n\r\nconst eventLogger = {\r\n ageFilter(fromYear, toYear, kommuneNum) {\r\n sendEvent(operation.ageFilter, {\r\n fromYear: fromYear,\r\n toYear: toYear,\r\n kommuneNum: kommuneNum\r\n });\r\n },\r\n\r\n themeChange(theme) {\r\n sendEvent(operation.themeChange, { themeType: theme });\r\n },\r\n\r\n importReceiversFromAlertPage() {\r\n sendEvent(operation.importReceiversFromAlertPage);\r\n },\r\n\r\n extraReceiverUsed() {\r\n sendEvent(operation.extraReceiverUsed);\r\n },\r\n\r\n receiversAddedFromDsf() {\r\n sendEvent(operation.receiversAddedFromDsf);\r\n },\r\n\r\n voiceUsedInAlert(alertObj) {\r\n sendEvent(operation.voiceUsedInAlert, createAudioParamObj(alertObj));\r\n },\r\n\r\n voiceFileUsedInAlert(alertObj) {\r\n sendEvent(operation.voiceFileUsedInAlert, createAudioParamObj(alertObj));\r\n },\r\n\r\n voiceFileRecordedOnAlertPage() {\r\n sendEvent(operation.voiceFileRecordedOnAlertPage);\r\n },\r\n\r\n voiceFileRecorded() {\r\n sendAudioEvent(operation.voiceFileRecorded);\r\n },\r\n\r\n voiceFileUploaded() {\r\n sendEvent(operation.voiceFileUploaded);\r\n },\r\n\r\n voiceFileEdited() {\r\n sendAudioEvent(operation.voiceFileEdited);\r\n },\r\n\r\n emailFileUploaded() {\r\n sendEmailFileEvent(operation.emailFileUploaded);\r\n },\r\n\r\n emailFileEdited() {\r\n sendEmailFileEvent(operation.emailFileEdited);\r\n },\r\n\r\n dsfExctraction(count) {\r\n sendEvent(operation.dsfExctraction, { numberOfPersons: count });\r\n },\r\n\r\n scenarioUsed() {\r\n sendEvent(operation.scenarioUsed);\r\n }\r\n};\r\n\r\nconst sendAudioEvent = (operation, audioId) => {\r\n sendEvent(operation, { audioId: audioId });\r\n};\r\n\r\nconst sendEmailFileEvent = (operation, fileId) => {\r\n sendEvent(operation, { fileId: fileId });\r\n};\r\n\r\nconst sendEvent = (operation, data) => {\r\n const params = createEventParamFormat(data);\r\n return apiEvent.set(operation, params);\r\n};\r\n\r\nconst createAudioParamObj = alertObj => {\r\n const voiceProps = alertObj.voice.voiceProps;\r\n return {\r\n alertName: alertObj.name,\r\n simMode: alertObj.simMode,\r\n audioFile: alertObj.audioFile,\r\n voiceName: voiceProps.Name,\r\n voiceLanguage: voiceProps.LanguageName,\r\n voiceGender: voiceProps.Gender,\r\n endOnState: alertObj.voice.endOnState,\r\n maxAttempts: alertObj.voice.attempts?.maxAttempts || \"\",\r\n delayBetweenAttempts: alertObj.voice.attempts?.delayBetweenAttempts || \"\"\r\n };\r\n};\r\n\r\nconst createEventParamFormat = data => {\r\n let strParam = \"\";\r\n for (const key in data) {\r\n if (strParam) {\r\n strParam += \", \";\r\n }\r\n strParam += key + \"=\" + data[key];\r\n }\r\n return strParam;\r\n};\r\n\r\nexport default eventLogger;\r\n","import Vue from \"vue\";\r\nimport Vuex from \"vuex\";\r\nimport apiGroup from \"../api/v24/api.group\";\r\nimport apiContact from \"../api/v24/api.contact\";\r\nimport department from \"@/util/department\";\r\nimport user from \"../util/user\";\r\nimport apiAlertTemplates from \"../api/v24/apiAlertTemplates\";\r\nimport apiAlert from \"../api/v24/api.alert\";\r\nimport apiVoice from \"@/api/v24/api.voice\";\r\nimport config from \"@/config/config\";\r\nimport storage from \"@/util/storage\";\r\nimport numberUtil from \"@/util/numberUtil\";\r\n\r\nVue.use(Vuex);\r\n\r\nconst keyStorageRowsPerPage = \"rowsPerPage\";\r\n\r\nexport default new Vuex.Store({\r\n state: {\r\n userProfile: null,\r\n groups: null,\r\n departments: null,\r\n contactsUpdate: null,\r\n voices: [],\r\n alertTemplates: [],\r\n alertList: null,\r\n alert: {\r\n selectedGroups: [],\r\n selectedContacts: [],\r\n settings: null,\r\n receivers: [],\r\n simMode: false\r\n },\r\n appSnackbar: {\r\n text: \"\",\r\n visible: false,\r\n navButton: {\r\n text: \"\",\r\n path: \"\"\r\n }\r\n },\r\n tagName: \"\",\r\n ssoMsLastUsedCode: \"\",\r\n roles: [],\r\n retryPageOnNoPermission: \"\",\r\n preferredNumTableRows: null\r\n },\r\n mutations: {\r\n setPreferredNumTableRows(state, num) {\r\n if (!numberUtil.isNumber(num)) {\r\n return;\r\n }\r\n state.preferredNumTableRows = num;\r\n storage.setLocalItem(keyStorageRowsPerPage, num);\r\n },\r\n setAlertList(state, alertList) {\r\n state.alertList = alertList;\r\n },\r\n setAppSnackbar(state, options) {\r\n if (typeof options === \"string\") {\r\n state.appSnackbar.text = options;\r\n state.appSnackbar.navButton = null;\r\n } else {\r\n state.appSnackbar.text = options.text;\r\n if (options.navButton) {\r\n state.appSnackbar.navButton = options.navButton;\r\n }\r\n }\r\n state.appSnackbar.visible = true;\r\n },\r\n setAlertTemplates(state, alertTemplates) {\r\n state.alertTemplates = alertTemplates;\r\n },\r\n setUserProfile(state, userProfile) {\r\n state.userProfile = userProfile;\r\n },\r\n setGroups(state, groups) {\r\n state.groups = groups;\r\n },\r\n setDepartments(state, departments) {\r\n state.departments = departments;\r\n },\r\n setAlertSimMode(state, simMode) {\r\n state.alert.simMode = simMode;\r\n },\r\n setVoices(state, voices) {\r\n state.voices = voices;\r\n },\r\n setSelectedAlertGroups(state, groups) {\r\n state.alert.selectedGroups = groups;\r\n },\r\n setSelectedAlertContacts(state, contacts) {\r\n state.alert.selectedContacts = contacts;\r\n },\r\n setAlertReceivers(state, receivers) {\r\n state.alert.receivers = receivers;\r\n },\r\n setTagNameBasedOnLocale(state) {\r\n const tagName = config.getLocaleProperties().tagName;\r\n state.tagName = tagName;\r\n },\r\n setSsoMsLastUsedCode(state, code) {\r\n state.ssoMsLastUsedCode = code;\r\n },\r\n removeSelectedAlertGroup(state, groupId) {\r\n state.alert.selectedGroups = state.alert.selectedGroups.filter(\r\n selGroup => {\r\n return selGroup.Id !== groupId;\r\n }\r\n );\r\n },\r\n setAlertSettings(state, alertSettings) {\r\n state.alert.settings = alertSettings;\r\n },\r\n addAlertReceiver(state, receiver) {\r\n const updateState = newReceiver => {\r\n state.alert.receivers.unshift(newReceiver);\r\n };\r\n receiver.Vikarer = [];\r\n if (receiver.Vikar1 || receiver.Vikar2) {\r\n // Get deputy and store it on receiver. Before this was done for all\r\n // selected alert receivers with one API call after all receivers\r\n // was added from GroupPicker/ContactPicker. But that lead to some\r\n // bugs that was hard to find. Since state was updated with new\r\n // contacts and then a new update with all the deputies added to\r\n // the contacts. This way (fetching deputies for each receiver, if\r\n // receiver has a deputy (indicated by Vikar1/2)) is much safer.\r\n // Yes, there will be more API calls when there are more than one\r\n // contact with deputry, but it will never be a performance problem,\r\n // since most contacts do not have a deputy.\r\n apiContact.getContactDeputies([receiver.Id]).then(res => {\r\n if (res.length) {\r\n receiver.Vikarer = res[0].Vikarer;\r\n }\r\n updateState(receiver);\r\n });\r\n } else {\r\n updateState(receiver);\r\n }\r\n },\r\n addSelectedContact(state, contact) {\r\n state.alert.selectedContacts.push(contact);\r\n },\r\n removeAlertReceiver(state, contact) {\r\n state.alert.receivers = state.alert.receivers.filter(receiver => {\r\n if (receiver._source.name === contact._source.name) {\r\n if (receiver._source.name === \"group\") {\r\n return receiver._source.contactId !== contact._source.contactId;\r\n } else if (receiver._source.name === \"largeGroup\") {\r\n return receiver._source.id !== contact._source.id;\r\n }\r\n return receiver._source.id !== contact._source.id;\r\n }\r\n return true;\r\n });\r\n },\r\n removeAlertReceiverByGroupId(state, groupId) {\r\n state.alert.receivers = filterReceivers(\r\n state.alert.receivers,\r\n \"group\",\r\n groupId\r\n );\r\n state.alert.receivers = filterReceivers(\r\n state.alert.receivers,\r\n \"largeGroup\",\r\n groupId\r\n );\r\n },\r\n removeAlertReceiverByContactId(state, contactId) {\r\n state.alert.receivers = filterReceivers(\r\n state.alert.receivers,\r\n \"contact\",\r\n contactId\r\n );\r\n },\r\n clearAlertReceivers(state) {\r\n state.alert.receivers = [];\r\n state.alert.selectedGroups = [];\r\n state.alert.selectedContacts = [];\r\n },\r\n clearAlert(state) {\r\n state.alert.settings = null;\r\n state.alert.receivers = [];\r\n state.alert.selectedGroups = [];\r\n state.alert.selectedContacts = [];\r\n },\r\n updateContacts(state) {\r\n // Since contacts are not stored in Vuex any more (because of\r\n // network performance issues we now let the API handle pagination, the\r\n // client has no common app state for contacts), we only trigger\r\n // event that a contact component **can** listen too\r\n state.contactsUpdate = Date.now();\r\n },\r\n setRoles(state, roles) {\r\n state.roles = roles;\r\n },\r\n setRetryPageOnNoPermission(state, page) {\r\n state.retryPageOnNoPermission = page;\r\n }\r\n },\r\n getters: {\r\n getUserHasSmsCodeword(state) {\r\n if (state.userProfile && state.userProfile.Kodeord.length) {\r\n return state.userProfile.Kodeord.some(\r\n codewordProps => codewordProps.KeywordType === 0\r\n );\r\n }\r\n return false;\r\n },\r\n getPreferredNumTableRows(state) {\r\n if (state.preferredNumTableRows === null) {\r\n let value = storage.getLocalItem(keyStorageRowsPerPage);\r\n value = parseInt(value, 10);\r\n return value ? value : config.defaultTblRowsPerPage;\r\n }\r\n return state.preferredNumTableRows;\r\n },\r\n\r\n getUserFullName(state) {\r\n if (state.userProfile) {\r\n return state.userProfile.Bruker.BrukerNavn;\r\n }\r\n return \"\";\r\n },\r\n getCustomerHasDepartments(state) {\r\n // Using > 1 since the first element is the \"show all\" option that always\r\n // is present\r\n return !!(state.userProfile?._adminDepartments.length > 1);\r\n },\r\n getUserCompany(state) {\r\n if (state.userProfile) {\r\n return state.userProfile.Firmanavn;\r\n }\r\n return \"\";\r\n },\r\n getUserIsAdmin(state) {\r\n if (state.userProfile) {\r\n return state.userProfile.Bruker.Admin;\r\n }\r\n return false;\r\n },\r\n getUserHasADProvisioning(state) {\r\n if (state.userProfile) {\r\n return state.userProfile.Bruker.Tilgang.ADProvisioning;\r\n }\r\n return false;\r\n },\r\n /**\r\n * Gets default country for phone features.\r\n * We use the country code stored on the customer. Why? Because each\r\n * user writres *alert texts* typycally in the customers language, even\r\n * though it's not the users UI language\r\n * @param state\r\n * @returns {string}\r\n */\r\n getDefaultCountryPhoneCode(state) {\r\n if (state.userProfile) {\r\n return \"+\" + state.userProfile.Landskode;\r\n }\r\n return \"\";\r\n },\r\n /**\r\n * This state can be used to determine if logged in user should see\r\n * what department an item (contact, template etc) is connected to\r\n */\r\n getShowDepartmentInfoInLists(state) {\r\n const userProfile = state.userProfile;\r\n if (userProfile) {\r\n // Returns true if users has two or more departments.\r\n // Will not return true on only one department, since the users then\r\n // does not need to differentiate between departments\r\n if (userProfile.Bruker.Admin) {\r\n return userProfile._adminDepartments.length > 1;\r\n }\r\n // For non-admins the main department is set in field Avdeling, not the\r\n // Avdelinger array. So we check if length is > 0, not 1 as with admins\r\n return userProfile.Bruker.Avdelinger.length > 0;\r\n }\r\n return false;\r\n },\r\n getSelectedDepartmentName(state) {\r\n const selectedId = user.getSelectedDepartment();\r\n if (!selectedId) {\r\n return \"\";\r\n }\r\n if (!state.departments.length) {\r\n return \"\";\r\n }\r\n const department = state.departments.find(\r\n dep => dep.AvdelingId === selectedId\r\n );\r\n return department ? department.Navn : \"\";\r\n }\r\n },\r\n actions: {\r\n // updatePreferredNumTableRows(context, num) {\r\n // if (context.state.preferredNumTableRows === null) {\r\n // const value = storage.getLocalItem(keyStorageRowsPerPage);\r\n // context.commit(\"setPreferredNumTableRows\", value);\r\n // } else {\r\n // context.commit(\"setPreferredNumTableRows\", num)\r\n // }\r\n // },\r\n updateAlertList(context) {\r\n return new Promise(resolve => {\r\n apiAlert.getAlertList(500).then(alerts => {\r\n context.commit(\"setAlertList\", alerts);\r\n resolve();\r\n });\r\n });\r\n },\r\n updateAlertTemplates(context) {\r\n apiAlertTemplates.getAll().then(templates => {\r\n context.commit(\"setAlertTemplates\", templates);\r\n });\r\n },\r\n updateUserProfile(context, forceServerFetch) {\r\n return new Promise(resolve => {\r\n user.getProfile(forceServerFetch).then(userProfile => {\r\n context.commit(\"setUserProfile\", userProfile);\r\n resolve(userProfile);\r\n });\r\n });\r\n },\r\n getUserPermissions(context) {\r\n return new Promise(resolve => {\r\n context.dispatch(\"updateUserProfile\").then(userProfile => {\r\n resolve(userProfile.Bruker._permissions);\r\n });\r\n });\r\n },\r\n updateGroups(context, slient) {\r\n return new Promise(resolve => {\r\n let returnObject = { groups: null };\r\n apiGroup.getAll(slient).then(groups => {\r\n context.commit(\"setGroups\", groups);\r\n returnObject.groups = groups;\r\n resolve(returnObject);\r\n });\r\n });\r\n },\r\n updateVoices(context) {\r\n return new Promise(resolve => {\r\n if (context.state.voices.length) {\r\n // Voices are almost never change, so used cached data if any\r\n resolve(context.state.voices);\r\n } else {\r\n apiVoice.getVoices().then(voices => {\r\n context.commit(\"setVoices\", voices);\r\n resolve(voices);\r\n });\r\n }\r\n });\r\n },\r\n updateDepartments(context) {\r\n return new Promise(resolve => {\r\n department.getAll().then(departments => {\r\n context.commit(\"setDepartments\", departments);\r\n resolve(departments);\r\n });\r\n });\r\n }\r\n },\r\n modules: {}\r\n});\r\n\r\nconst filterReceivers = (receivers, sourceName, idToExclude) => {\r\n return receivers.filter(receiver => {\r\n return !(\r\n receiver._source.name === sourceName &&\r\n receiver._source.id === idToExclude\r\n );\r\n });\r\n};\r\n","var map = {\n\t\"./da.json\": \"21aa\",\n\t\"./en.json\": \"edd4\",\n\t\"./nb.json\": \"85fc\",\n\t\"./nn.json\": \"962f\",\n\t\"./se.json\": \"ac7d\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"49f8\";","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.show)?_c('div',{staticClass:\"text-center\"},[_c('div',[_vm._v(\" \"+_vm._s(_vm.text)+\" \")]),_c('v-progress-circular',{attrs:{\"indeterminate\":\"\",\"color\":\"primary\"}})],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoadingSpinner.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoadingSpinner.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LoadingSpinner.vue?vue&type=template&id=9881ea48&scoped=true&\"\nimport script from \"./LoadingSpinner.vue?vue&type=script&lang=js&\"\nexport * from \"./LoadingSpinner.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LoadingSpinner.vue?vue&type=style&index=0&id=9881ea48&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9881ea48\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-app',[(_vm.navigationVisible)?_c('MainNavigation'):_vm._e(),_c('v-main',[_c('router-view')],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('v-app-bar',{attrs:{\"clipped-left\":\"\",\"app\":\"\",\"color\":\"indigo\",\"dark\":\"\",\"src\":require(\"../../assets/images/picsum_865-1920x1080.jpg\")}},[_c('AppSnackbar',{attrs:{\"data-testid\":\"snackBarBanner\"}}),_c('v-app-bar-nav-icon',{attrs:{\"data-testid\":\"navbarButton\"},on:{\"click\":function($event){$event.stopPropagation();_vm.drawer = !_vm.drawer}}}),_c('v-toolbar-title',[_vm._v(\" \"+_vm._s(_vm.$t(\"groupAlert\"))+\" \"),(_vm.serverName !== 'prod')?_c('span',[_vm._v(\" \"+_vm._s(_vm.serverName.toUpperCase())+\" \")]):_vm._e()]),_c('v-spacer'),_c('LocaleSwitcher')],1),_c('v-navigation-drawer',{attrs:{\"clipped\":\"\",\"app\":\"\",\"dark\":\"\",\"mobile-breakpoint\":\"1700\"},model:{value:(_vm.drawer),callback:function ($$v) {_vm.drawer=$$v},expression:\"drawer\"}},[_c('v-list',{staticClass:\"mb-n4\"},[_c('v-list-item',[_c('v-list-item-content',[_c('v-list-item-title',{staticClass:\"title\"},[_vm._v(\" \"+_vm._s(_vm.userFullName)+\" \")]),_c('v-list-item-subtitle',{staticClass:\"mb-1\"},[_vm._v(\" \"+_vm._s(_vm.userCompany)+\" \")]),(!_vm.userIsAdmin && _vm.userDepartments?.length === 2)?_c('v-list-item-subtitle',[_vm._v(\" \"+_vm._s(_vm.userDepartments[1].text)+\" \")]):_vm._e(),(!_vm.userIsAdmin && _vm.userDepartments.length > 2)?_c('v-autocomplete',{staticClass:\"mt-4\",attrs:{\"label\":_vm.$t('department'),\"items\":_vm.userDepartments,\"outlined\":\"\",\"dense\":\"\",\"data-testid\":\"departmentSelectNav\"},on:{\"change\":_vm.setDepartment},model:{value:(_vm.selectedDepartment),callback:function ($$v) {_vm.selectedDepartment=$$v},expression:\"selectedDepartment\"}}):_vm._e()],1)],1),(_vm.userIsAdmin && _vm.customerHasDepartments)?_c('v-list-item',[_c('v-list-item-content',[_c('DepartmentsSelect',{attrs:{\"init-value\":_vm.selectedDepartment,\"data-testid\":\"departmentSelectNav\"},on:{\"change\":_vm.setDepartment}})],1)],1):_vm._e()],1),_c('v-divider'),_c('v-list',{attrs:{\"dense\":\"\"}},[_c('v-list-item-group',{attrs:{\"data-testid\":\"navbarGroup\",\"color\":\"white\"},model:{value:(_vm.currentPathIndex),callback:function ($$v) {_vm.currentPathIndex=$$v},expression:\"currentPathIndex\"}},[_vm._l((_vm.navDrawerItems),function(item,i){return _c('v-list-item',{key:i,attrs:{\"data-testid\":\"navbarItem\",\"link\":\"\"},on:{\"click\":function($event){return _vm.navigate(item.path)}}},[_c('v-list-item-action',[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(item.text))])],1)],1)}),(_vm.userIsAdmin || _vm.userHasUserManagementPermission)?_c('v-list-group',{attrs:{\"sub-group\":\"\",\"value\":false,\"data-testid\":\"navbarAdminGroup\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(){return [_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.$t(\"administration\"))+\" \")])],1)]},proxy:true}],null,false,4004517210)},[(_vm.userHasUserManagementPermission)?_c('v-list-item',{attrs:{\"link\":\"\"},on:{\"click\":function($event){return _vm.navigate('/usrMng')}}},[_c('v-list-item-action',[_c('v-icon',[_vm._v(\"mdi-account-supervisor\")])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t(\"systemUsers\")))])],1)],1):_vm._e(),(_vm.userIsAdmin)?_c('v-list-item',{attrs:{\"link\":\"\"},on:{\"click\":function($event){return _vm.navigate('/admin/departments')}}},[_c('v-list-item-action',[_c('v-icon',[_vm._v(\"mdi-shield-outline\")])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t(\"departments\")))])],1)],1):_vm._e(),(_vm.userIsAdmin && _vm.customerUsesRoles)?_c('v-list-item',{attrs:{\"data-testid\":\"navbarAdminItem\",\"link\":\"\"},on:{\"click\":function($event){return _vm.navigate('/admin/roles')}}},[_c('v-list-item-action',[_c('v-icon',[_vm._v(\"mdi-key\")])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t(\"roles\")))])],1)],1):_vm._e(),(_vm.userIsAdmin)?_c('v-list-item',{attrs:{\"link\":\"\"},on:{\"click\":function($event){return _vm.navigate('/admin/stats')}}},[_c('v-list-item-action',[_c('v-icon',[_vm._v(\"mdi-chart-pie\")])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t(\"stats\")))])],1)],1):_vm._e()],1):_vm._e(),_c('v-list-item',{attrs:{\"link\":\"\"},on:{\"click\":_vm.toggleTheme}},[_c('v-list-item-action',[_c('v-icon',[_vm._v(\"mdi-theme-light-dark\")])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.$t(\"changeTheme\"))+\" \")])],1)],1),(_vm.isV24User)?_c('v-list-item',{attrs:{\"link\":\"\"},on:{\"click\":function($event){return _vm.backToV24()}}},[_c('v-list-item-action',[_c('v-icon',[_vm._v(\"mdi-arrow-left\")])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t(\"backToV24\")))])],1)],1):_vm._e(),_c('v-list-item',{attrs:{\"data-testid\":\"navbarButtonLogout\",\"link\":\"\"},on:{\"click\":function($event){return _vm.logOut()}}},[_c('v-list-item-action',[_c('v-icon',[_vm._v(\"mdi-logout\")])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t(\"logOut\")))])],1)],1)],2)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-menu',{attrs:{\"right\":\"\",\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c('v-btn',_vm._g({attrs:{\"icon\":\"\"}},on),[_c('v-icon',[_vm._v(\"mdi-earth\")])],1)]}}])},[_c('v-list',[_c('v-list-item-group',{attrs:{\"color\":\"primary\"}},[_c('v-list-item',{on:{\"click\":function($event){return _vm.switchTo('en')}}},[_c('v-list-item-content',[_vm._v(\" English \")])],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.switchTo('nb')}}},[_c('v-list-item-content',[_vm._v(\" Norsk bokmål \")])],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.switchTo('nn')}}},[_c('v-list-item-content',[_vm._v(\" Norsk nynorsk \")])],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.switchTo('da')}}},[_c('v-list-item-content',[_vm._v(\" Dansk \")])],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.switchTo('se')}}},[_c('v-list-item-content',[_vm._v(\" Svenska \")])],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","const browser = {\r\n setTabTitle(title) {\r\n document.title = title;\r\n }\r\n};\r\n\r\nexport default browser;","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LocaleSwitcher.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LocaleSwitcher.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LocaleSwitcher.vue?vue&type=template&id=72d68628&\"\nimport script from \"./LocaleSwitcher.vue?vue&type=script&lang=js&\"\nexport * from \"./LocaleSwitcher.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-snackbar',{attrs:{\"top\":\"\",\"absolute\":\"\"},scopedSlots:_vm._u([(_vm.snackbar.navButton)?{key:\"action\",fn:function({ attrs }){return [_c('v-btn',_vm._b({attrs:{\"outlined\":\"\"},on:{\"click\":_vm.navigate}},'v-btn',attrs,false),[_vm._v(\" \"+_vm._s(_vm.snackbar.navButton.text)+\" \")])]}}:null],null,true),model:{value:(_vm.snackbar.visible),callback:function ($$v) {_vm.$set(_vm.snackbar, \"visible\", $$v)},expression:\"snackbar.visible\"}},[_vm._v(\" \"+_vm._s(_vm.snackbar.text)+\" \")])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppSnackbar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppSnackbar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AppSnackbar.vue?vue&type=template&id=1342a6a8&\"\nimport script from \"./AppSnackbar.vue?vue&type=script&lang=js&\"\nexport * from \"./AppSnackbar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-autocomplete',{attrs:{\"items\":_vm.departments,\"item-text\":\"Navn\",\"item-value\":\"AvdelingId\",\"loading\":!_vm.departments,\"outlined\":\"\",\"dense\":\"\",\"label\":_vm.$t('department')},on:{\"change\":_vm.change},model:{value:(_vm.selected),callback:function ($$v) {_vm.selected=$$v},expression:\"selected\"}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DepartmentsSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DepartmentsSelect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DepartmentsSelect.vue?vue&type=template&id=15eb7544&\"\nimport script from \"./DepartmentsSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./DepartmentsSelect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MainNavigation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MainNavigation.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MainNavigation.vue?vue&type=template&id=419e4d9a&\"\nimport script from \"./MainNavigation.vue?vue&type=script&lang=js&\"\nexport * from \"./MainNavigation.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=241c9552&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","const da = {\r\n badge: 'Emblem',\r\n close: 'Luk',\r\n dataIterator: {\r\n noResultsText: 'Ingen matchende data fundet',\r\n loadingText: 'Indhenter data...',\r\n },\r\n dataTable: {\r\n itemsPerPageText: 'Rækker pr. side:',\r\n ariaLabel: {\r\n sortDescending: 'Sorteret faldende.',\r\n sortAscending: 'Sorteret stigende.',\r\n sortNone: 'Ikke sorteret.',\r\n activateNone: 'Aktiver for at fjerne sortering.',\r\n activateDescending: 'Aktiver for at sortere faldende.',\r\n activateAscending: 'Aktiver for at sortere stigende.',\r\n },\r\n sortBy: 'Sorter efter',\r\n },\r\n dataFooter: {\r\n itemsPerPageText: 'Rækker pr. side:',\r\n itemsPerPageAll: 'Alle',\r\n nextPage: 'Næste side',\r\n prevPage: 'Forrige side',\r\n firstPage: 'Første side',\r\n lastPage: 'Sidste side',\r\n pageText: '{0}-{1} af {2}',\r\n },\r\n datePicker: {\r\n itemsSelected: '{0} valgt',\r\n nextMonthAriaLabel: 'Næste måned',\r\n nextYearAriaLabel: 'Næste år',\r\n prevMonthAriaLabel: 'Forrige måned',\r\n prevYearAriaLabel: 'Forrige år',\r\n },\r\n noDataText: 'Ingen data tilgængelig',\r\n carousel: {\r\n prev: 'Forrige visuelle',\r\n next: 'Næste visuelle',\r\n ariaLabel: {\r\n delimiter: 'Karrusel dias {0} af {1}',\r\n },\r\n },\r\n calendar: {\r\n moreEvents: '{0} mere',\r\n },\r\n fileInput: {\r\n counter: '{0} filer',\r\n counterSize: '{0} filer ({1} total)',\r\n },\r\n timePicker: {\r\n am: 'AM',\r\n pm: 'PM',\r\n },\r\n pagination: {\r\n ariaLabel: {\r\n\r\n wrapper: 'Pagineringsnavigation',\r\n next: 'Neste side',\r\n previous: 'Forrige side',\r\n page: 'Gå til side {0}',\r\n currentPage: 'Nuværende side, Side {0}'\r\n }\r\n },\r\n rating: {\r\n ariaLabel: {\r\n item: 'Bedømmelse {0} af {1}',\r\n },\r\n },\r\n}\r\nexport default da;","import Vue from \"vue\";\r\nimport Vuetify from \"vuetify/lib\";\r\nimport config from \"../config/config\";\r\nimport en from \"vuetify/es5/locale/en\";\r\nimport no from \"vuetify/es5/locale/no\";\r\nimport sv from \"vuetify/es5/locale/sv\";\r\nimport da from \"../locales/custom-vuetify/da\";\r\n\r\nVue.use(Vuetify);\r\n\r\nexport default new Vuetify({\r\n lang: {\r\n locales: { en, no, da, sv},\r\n current: config.getVuetifyLocale()\r\n }\r\n});\r\n","import Vue from \"vue\";\r\nimport App from \"./App.vue\";\r\nimport router from \"./router\";\r\nimport vuetify from \"./plugins/vuetify\";\r\nimport i18n from \"./i18n\";\r\nimport store from \"@/store\";\r\nimport apiSession from \"@/api/v24/api.session\";\r\nimport user from \"@/util/user\";\r\n\r\nVue.config.productionTip = false;\r\n\r\nappSetup().then(() => {\r\n new Vue({\r\n router,\r\n vuetify,\r\n i18n,\r\n render: h => h(App)\r\n }).$mount(\"#app\");\r\n\r\n store.commit(\"setTagNameBasedOnLocale\");\r\n});\r\n\r\nasync function appSetup() {\r\n await handleV24visitors();\r\n\r\n // As long as we are inside this function nothing will be rendered to the user since Vue is not mounted yet.\r\n // Therefore, a loading spinner is set in index.html so that the user knows that something is happening.\r\n // Only users with slow/no internet connections will see this spinner. App setup is now done and the spinner is hidden\r\n document.getElementById(\"vue-is-loading\").style.display = \"none\";\r\n}\r\n\r\n// Handles any URL jump from V24 prod, test and failover\r\nasync function handleV24visitors() {\r\n const urlData = new URL(location.href);\r\n const simMode = !!urlData.searchParams.get(\"sim\");\r\n const ticket = urlData.searchParams.get(\"ticket\");\r\n if (ticket) {\r\n // Remove ticket from searchParams since we will end up here again\r\n // when the user gets redirected to a new route\r\n urlData.searchParams.set(\"ticket\", \"\");\r\n console.log(`Using ticket (${ticket}) to authenticate`);\r\n try {\r\n const sessionId = await apiSession.exchangeTicketForSessionId(ticket);\r\n await setSession(sessionId, simMode);\r\n } catch (err) {\r\n console.error(\"Authentication failed. Invalid ticket\", err);\r\n alert(\"Authentication failed. Invalid ticket\");\r\n }\r\n }\r\n}\r\n\r\nconst setSession = (sessionId, simMode) => {\r\n return user.setIsV24User(sessionId, simMode);\r\n};\r\n","const mapAlertStatus = {\r\n active: \"A\",\r\n completed: \"H\",\r\n planned: \"P\",\r\n stopped: \"S\",\r\n deleted: \"D\"\r\n};\r\n\r\nconst alertReceiverStatus = {\r\n /**\r\n * @name translate\r\n *\r\n * Translates alert receiver API status text to user language\r\n * @param alertStatus Status of the **alert**\r\n * @param simMode Set to true if alert is simulated\r\n * @param receiverStatus Receiver status as received from API\r\n * @param i18n the i18n object. This is passed as an argument instead of\r\n * beeing imported here so that user language change will be reactive\r\n * @returns {String}\r\n */\r\n translate(alertStatus, simMode, receiverStatus, i18n) {\r\n const statusTranslation = {\r\n Bekreftet: i18n.t(\"confirmed\"),\r\n Mottatt: i18n.t(\"received\"),\r\n Ubesvart: i18n.t(\"unans\"),\r\n Duplikat: i18n.t(\"dupe\"),\r\n Sendt: i18n.t(\"sent\"),\r\n \"Ikke sendt\": i18n.t(\"notSent\"),\r\n Active: i18n.t(\"active\"),\r\n Reservert: i18n.t(\"reserved\"),\r\n Avvist: i18n.t(\"rejected\")\r\n };\r\n if (receiverStatus === \"Ikke sendt\" && !simMode) {\r\n if (alertStatus === mapAlertStatus.active) {\r\n return i18n.t(\"inQueue\");\r\n }\r\n if (alertStatus === mapAlertStatus.planned) {\r\n return i18n.t(\"waiting\");\r\n }\r\n }\r\n const translatedStatus = statusTranslation[receiverStatus];\r\n if (!translatedStatus) {\r\n return receiverStatus;\r\n } else {\r\n return translatedStatus;\r\n }\r\n }\r\n};\r\n\r\nexport default alertReceiverStatus;\r\n","import store from \"@/store\";\r\nimport config from \"@/config/config\";\r\nimport Vue from \"vue\";\r\n\r\n// It would be nice to use the i18n files for the supportedVoiceLanguages\r\n// object, but an webpack error is thrown when the line below is used.\r\n// I've not been able to find out why, so these language lines\r\n// must be hard coded here. Erik\r\n//import i18n from \"@/i18n\";\r\n\r\nconst configVoice = {\r\n defaultSetting: {\r\n attempts: 0,\r\n delay: 5,\r\n deputy: false,\r\n // The API also supports \"active\", but we have agreed to simplify this\r\n // in GroupAlert to strictly use \"confirmed\". Meaning that the user\r\n // must confirm a voice call with a key press to avoid repeated calls\r\n // (if set) and calling to deputy (if set).\r\n endOnState: \"confirmed\",\r\n responseOptions: [\r\n {\r\n number: 1,\r\n text: \"\"\r\n },\r\n {\r\n number: 2,\r\n text: \"\"\r\n },\r\n {\r\n number: 3,\r\n text: \"\"\r\n },\r\n {\r\n number: 4,\r\n text: \"\"\r\n },\r\n {\r\n number: 5,\r\n text: \"\"\r\n },\r\n {\r\n number: 6,\r\n text: \"\"\r\n },\r\n {\r\n number: 7,\r\n text: \"\"\r\n },\r\n {\r\n number: 8,\r\n text: \"\"\r\n }\r\n ]\r\n },\r\n getDefaultCallerId() {\r\n return config.getCallerId();\r\n },\r\n getDefaultProps() {\r\n return new Promise(resolve => {\r\n store.dispatch(\"updateUserProfile\").then(() => {\r\n store.dispatch(\"updateVoices\").then(voices => {\r\n const defaultCountryCode = store.getters.getDefaultCountryPhoneCode;\r\n const langCode = configVoice.getLangCodeFrom(defaultCountryCode);\r\n const defaultVoice = voices.find(voice => {\r\n return voice.LanguageCode === langCode;\r\n });\r\n resolve(defaultVoice);\r\n });\r\n });\r\n });\r\n },\r\n // \"code\" must match LanguageCode in API GetVoices return data.\r\n supportedVoiceLanguages: [\r\n {\r\n code: \"nb-NO\",\r\n countryCode: \"+47\",\r\n responseOptText: {\r\n press: \"Tast\",\r\n for: \"for\",\r\n repeat: \"Tast 9 for repetisjon\",\r\n responseConfirm: \"Takk, ditt svar er registrert\",\r\n noUserInputMsg: \"Ingen svar registrert. Farvel\"\r\n }\r\n },\r\n {\r\n code: \"sv-SE\",\r\n countryCode: \"+46\",\r\n responseOptText: {\r\n press: \"Tryck\",\r\n for: \"för\",\r\n repeat: \"Tryck på 9 för upprepning\",\r\n responseConfirm: \"Tack, ditt svar är registrerat\",\r\n noUserInputMsg: \"Inga svar registrerade. Adjö\"\r\n }\r\n },\r\n {\r\n code: \"da-DK\",\r\n countryCode: \"+45\",\r\n responseOptText: {\r\n press: \"Tast\",\r\n for: \"for\",\r\n repeat: \"tast 9 for at høre meddelelsen\" + \" igen\",\r\n responseConfirm: \"Tak, dit svar er registreret\",\r\n noUserImputMsg: \"Intet svar er registreret, kaldet afbrydes\"\r\n }\r\n },\r\n {\r\n code: \"fi-FI\",\r\n countryCode: \"+358\",\r\n responseOptText: {\r\n press: \"Paina\",\r\n for: \"vastataksesi\",\r\n repeat: \"Paina 9 kuullaksesi viestin uudelleen\",\r\n responseConfirm: \"Kiitos, vastauksesi on rekisteröity\",\r\n noUserInputMsg: \"Emme saaneet vastausta. Hyvästi.\"\r\n }\r\n },\r\n {\r\n code: \"en-US\",\r\n countryCode: \"+1\",\r\n get responseOptText() {\r\n return configVoice.englishVoiceOptText;\r\n }\r\n },\r\n {\r\n code: \"en-GB\",\r\n countryCode: \"+44\",\r\n get responseOptText() {\r\n return configVoice.englishVoiceOptText;\r\n }\r\n }\r\n ],\r\n englishVoiceOptText: {\r\n press: \"Press\",\r\n for: \"for\",\r\n repeat: \"Press 9 to hear again\",\r\n responseConfirm: \"Thank you, your response is registered\",\r\n noUserInputMsg: \"No response registered. Good bye\"\r\n },\r\n getLangCodeFrom(countryCode) {\r\n const voiceLangCode = this.supportedVoiceLanguages.find(voiceLang => {\r\n return voiceLang.countryCode === countryCode;\r\n });\r\n return voiceLangCode ? voiceLangCode.code : \"en-GB\";\r\n }\r\n};\r\n\r\nexport default configVoice;\r\n","module.exports = __webpack_public_path__ + \"img/logo-with-app-title.9cf4dba5.svg\";","// Moved this code out of user.js since we got some issues when importing\r\n// that module in config.js\r\n\r\nimport storage from \"@/util/storage\";\r\n\r\nconst userLocale = {\r\n get() {\r\n return storage.getLocalItem(\"locale\") || \"\";\r\n }\r\n};\r\n\r\nexport default userLocale;\r\n","module.exports = __webpack_public_path__ + \"img/picsum_865-1920x1080.6c123b30.jpg\";","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[(_vm.loading)?_c('LoadingSpinner'):_c('v-card',[_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.newUser ? _vm.$t(\"letsGetStarted\") : _vm.$t(\"resetPassword\"))+\" \")]),_c('v-card-text',[_c('PasswordCreator',{attrs:{\"init-email\":_vm.initEmail},on:{\"success\":_vm.success},scopedSlots:_vm._u([{key:\"enterEmailText\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.$t(\"resetPassordInfo\"))+\" \")]},proxy:true}])})],1),_c('v-card-actions',[_c('v-spacer'),(!_vm.hideCancelBtn)?_c('v-btn',{on:{\"click\":_vm.cancel}},[_vm._v(\" \"+_vm._s(_vm.$t(\"cancel\"))+\" \")]):_vm._e()],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewPasswordRequest.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewPasswordRequest.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NewPasswordRequest.vue?vue&type=template&id=1d604483&\"\nimport script from \"./NewPasswordRequest.vue?vue&type=script&lang=js&\"\nexport * from \"./NewPasswordRequest.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from \"vue\";\r\nimport VueI18n from \"vue-i18n\";\r\nimport config from \"./config/config\";\r\n\r\nVue.use(VueI18n);\r\n\r\nfunction loadLocaleMessages() {\r\n const locales = require.context(\r\n \"./locales\",\r\n true,\r\n /[A-Za-z0-9-_,\\s]+\\.json$/i\r\n );\r\n const messages = {};\r\n locales.keys().forEach(key => {\r\n const matched = key.match(/([A-Za-z0-9-_]+)\\./i);\r\n if (matched && matched.length > 1) {\r\n const locale = matched[1];\r\n messages[locale] = locales(key);\r\n }\r\n });\r\n return messages;\r\n}\r\n\r\nconst dateTimeFormats = {\r\n en: {\r\n short: {\r\n year: \"numeric\",\r\n month: \"short\",\r\n day: \"numeric\"\r\n },\r\n long: {\r\n year: \"numeric\",\r\n month: \"short\",\r\n day: \"numeric\",\r\n weekday: \"short\",\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n hour12: true\r\n },\r\n timeOfDay: {\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n hour12: true\r\n }\r\n },\r\n nb: {\r\n short: {\r\n year: \"numeric\",\r\n month: \"short\",\r\n day: \"numeric\"\r\n },\r\n long: {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n weekday: \"short\",\r\n hour: \"numeric\",\r\n minute: \"numeric\"\r\n },\r\n timeOfDay: {\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n hour12: false\r\n }\r\n },\r\n nn: {\r\n short: {\r\n year: \"numeric\",\r\n month: \"short\",\r\n day: \"numeric\"\r\n },\r\n long: {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n weekday: \"short\",\r\n hour: \"numeric\",\r\n minute: \"numeric\"\r\n },\r\n timeOfDay: {\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n hour12: false\r\n }\r\n },\r\n da: {\r\n short: {\r\n year: \"numeric\",\r\n month: \"short\",\r\n day: \"numeric\"\r\n },\r\n long: {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n weekday: \"short\",\r\n hour: \"numeric\",\r\n minute: \"numeric\"\r\n },\r\n timeOfDay: {\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n hour12: false\r\n }\r\n },\r\n se: {\r\n short: {\r\n year: \"numeric\",\r\n month: \"short\",\r\n day: \"numeric\"\r\n },\r\n long: {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n weekday: \"short\",\r\n hour: \"numeric\",\r\n minute: \"numeric\"\r\n },\r\n timeOfDay: {\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n hour12: false\r\n }\r\n }\r\n};\r\n\r\nconst i18n = new VueI18n({\r\n locale: config.getDefaultLanguage() || \"en\",\r\n fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || \"en\",\r\n messages: loadLocaleMessages(),\r\n dateTimeFormats: dateTimeFormats\r\n});\r\n\r\nexport default i18n;\r\n","import numberUtil from \"@/util/numberUtil\";\r\n\r\nconst stringUtil = {\r\n /**\r\n * Converts whitespace not supported by SMS/email (will result in question\r\n * mark) to \"normal\" white space\r\n * @param {String} text\r\n * @returns {String} Fixed text\r\n */\r\n fixUnsupportedWhitespace(text) {\r\n return text.replace(\" \", \" \");\r\n },\r\n\r\n truncate(string, limit) {\r\n if (string.length > limit) {\r\n string = string.substring(0, limit);\r\n }\r\n return string;\r\n },\r\n\r\n capitalizeFirstLetter(string) {\r\n return string.charAt(0).toUpperCase() + string.slice(1);\r\n },\r\n\r\n hasNorwegianLetters(string) {\r\n return (\r\n string.indexOf(\"æ\") >= 0 ||\r\n string.indexOf(\"Æ\") >= 0 ||\r\n string.indexOf(\"ø\") >= 0 ||\r\n string.indexOf(\"Ø\") >= 0 ||\r\n string.indexOf(\"å\") >= 0 ||\r\n string.indexOf(\"Å\") >= 0\r\n );\r\n },\r\n\r\n hasLowerCase(string) {\r\n return string.toUpperCase() !== string;\r\n },\r\n\r\n hasUpperCase(string) {\r\n return string.toLowerCase() !== string;\r\n },\r\n\r\n hasWhitespace(string) {\r\n return /\\s/.test(string);\r\n },\r\n\r\n hasNumber(string) {\r\n let i = string.length;\r\n while (i--) {\r\n if (numberUtil.isNumber(string.charAt(i))) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n\r\n /**\r\n * Replaces URL/links with HTML a tag for the link(s)\r\n * @param {String} text\r\n * @param {Boolean} openUrlInNewTab\r\n * @returns {String}\r\n */\r\n urlify(text, openUrlInNewTab = false) {\r\n const targetAttr = openUrlInNewTab ? ' target=\"_blank\"' : \"\";\r\n const urlRegex = /(\\b(https?|ftp|file):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])/gi;\r\n return text.replace(urlRegex, function(url) {\r\n return '\" + url + \"\";\r\n });\r\n },\r\n\r\n covertLineShiftToHtmlBreak(text) {\r\n return text.replace(/\\n/g, \"
\");\r\n },\r\n\r\n makeDownloadFriendlyName(fileName) {\r\n return fileName.replace(/[^a-z0-9._-]+/gi, \"_\");\r\n },\r\n\r\n createRandomString() {\r\n return Math.random()\r\n .toString(36)\r\n .slice(-6);\r\n },\r\n\r\n /**\r\n * Escapes special characters in a string so it can be used in a regular\r\n * expression. Javascript does not have a built-in function for this.\r\n * This is from Mozilla Developer Network:\r\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping\r\n * @param string\r\n * @returns {*}\r\n */\r\n escapeRegExp(string) {\r\n // $& means the whole matched string\r\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n }\r\n};\r\n\r\nexport default stringUtil;\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoadingSpinner.vue?vue&type=style&index=0&id=9881ea48&prod&scoped=true&lang=css&\"","import api from \"./api\";\r\n\r\nconst apiDepartment = {\r\n getAll() {\r\n return api.execute(\"HentAvdelinger\", null, \"Avdelinger\");\r\n },\r\n\r\n get(id) {\r\n // API does not have HentAvdeling, so fetch all and then find the right one\r\n return new Promise(resolve => {\r\n this.getAll().then(allDepartments => {\r\n resolve(allDepartments.find(dep => dep.AvdelingId === id));\r\n });\r\n });\r\n },\r\n\r\n delete(id) {\r\n return new Promise((resolve, reject) => {\r\n const params = { AvdelingId: id };\r\n api\r\n .execute(\"SletteAvdeling\", params, null, true, true)\r\n .then(() => {\r\n resolve();\r\n })\r\n .catch(err => {\r\n reject(err);\r\n });\r\n });\r\n },\r\n\r\n create(name, smsSender = \"\") {\r\n const params = { Avdeling: { Navn: name, SmsAvsender: smsSender } };\r\n return api.execute(\"NyAvdeling\", params);\r\n },\r\n\r\n edit(id, name, smsSender = \"\") {\r\n const params = {\r\n Avdeling: {\r\n AvdelingId: id,\r\n Navn: name,\r\n SmsAvsender: smsSender\r\n }\r\n };\r\n return api.execute(\"EndreAvdeling\", params);\r\n },\r\n\r\n departmentExits(departmentId) {\r\n return new Promise(resolve => {\r\n this.getAll().then(allDepartments => {\r\n resolve(allDepartments.some(dep => dep.AvdelingId === departmentId));\r\n });\r\n });\r\n }\r\n};\r\n\r\nexport default apiDepartment;\r\n","import api from \"@/api/v24/api\";\r\n\r\nconst apiAdmin = {\r\n /**\r\n *\r\n * @param departmentId Workaround for missing API feature: Filter on\r\n * department. Set to falsy for no filter\r\n * @returns {Promise}\r\n */\r\n getUsers(departmentId) {\r\n return new Promise(resolve => {\r\n api.execute(\"HentBrukere\", null, \"Brukere\").then(users => {\r\n let filteredUsers = [];\r\n if (!departmentId) {\r\n filteredUsers = users;\r\n } else {\r\n filteredUsers = users.filter(user => {\r\n return user.Avdelinger.some(usrDep => {\r\n return usrDep.AvdelingId === departmentId;\r\n });\r\n });\r\n }\r\n resolve(filteredUsers);\r\n });\r\n });\r\n },\r\n\r\n getUser(id) {\r\n const params = { BrukerId: id };\r\n return new Promise(resolve => {\r\n api.execute(\"HentBruker\", params, \"Brukere\").then(users => {\r\n resolve(users[0]);\r\n });\r\n });\r\n },\r\n\r\n setUserRoles(userId, roles) {\r\n const params = {\r\n Roller: [],\r\n BrukerId: userId\r\n };\r\n roles.forEach(role => {\r\n params.Roller.push({ RolleId: role });\r\n });\r\n return api.execute(\"SettBrukerRoller\", params);\r\n },\r\n\r\n setUserDepartments(userId, departments) {\r\n const params = {\r\n Avdelinger: [],\r\n BrukerId: userId\r\n };\r\n departments.forEach(dep => {\r\n params.Avdelinger.push({ AvdelingId: dep });\r\n });\r\n return api.execute(\"SettBrukerAvdelinger\", params);\r\n },\r\n\r\n createUser(user) {\r\n const params = {\r\n Bruker: user\r\n };\r\n return api.execute(\"NyBruker\", params, null, true, true);\r\n },\r\n /**\r\n * @param {Object} user As used by V24 API:\r\n * {\r\n Navn: \"\",\r\n Epost: \"\",\r\n Mobilnr: \"\",\r\n Avdeling: \"\",\r\n Administrator: false,\r\n Sperret: false,\r\n FagEtat: \"\",\r\n KID: \"\",\r\n AcceptGDPR: false,\r\n Simulering: false,\r\n Tilgang: {\r\n VarslingSmsPremium: false,\r\n VarslingLokasjon: false,\r\n Maler: false,\r\n VarslingTime: false,\r\n VarslingSaab: false,\r\n VarslingGruppe: false,\r\n VA: false,\r\n Hendelse: false,\r\n Grupper: false,\r\n VarslingBefolkning: false,\r\n VarslingKommune: false,\r\n Saab: false\r\n },\r\n BrukerId: \"\"\r\n };\r\n */\r\n changeUser(user) {\r\n const changeFields = createUserFields(user);\r\n return changeUser(user.BrukerId, changeFields);\r\n },\r\n\r\n deactivateUser(user) {\r\n return setUserActiveState(user, true);\r\n },\r\n\r\n reactivateUser(user) {\r\n return setUserActiveState(user, false);\r\n }\r\n};\r\n\r\nconst createUserFields = user => {\r\n return [\r\n {\r\n Verdi: user.Navn,\r\n Felt: \"navn\"\r\n },\r\n {\r\n Verdi: user.Epost,\r\n Felt: \"epost\"\r\n },\r\n {\r\n Verdi: user.Mobilnr,\r\n Felt: \"mobilnr\"\r\n },\r\n {\r\n Verdi: user.HovedAvdeling,\r\n Felt: \"avdeling\"\r\n },\r\n {\r\n Verdi: user.AnsattId,\r\n Felt: \"ansattid\"\r\n },\r\n {\r\n Verdi: toDbFormat(user.Administrator),\r\n Felt: \"administrator\"\r\n },\r\n {\r\n Verdi: toDbFormat(user.Sperret),\r\n Felt: \"sperret\"\r\n },\r\n {\r\n Verdi: toDbFormat(user.Tilgang.Maler),\r\n Felt: \"tilgang_mal\"\r\n },\r\n {\r\n Verdi: toDbFormat(user.Tilgang.VarslingGruppe),\r\n Felt: \"tilgang_gruppe_varsling\"\r\n },\r\n {\r\n Verdi: toDbFormat(user.Tilgang.Grupper),\r\n Felt: \"tilgang_gruppe\"\r\n }\r\n ];\r\n};\r\n\r\nconst setUserActiveState = (user, state) => {\r\n const changeFields = [{ Verdi: toDbFormat(state), Felt: \"Sperret\" }];\r\n return changeUser(user.BrukerId, changeFields);\r\n};\r\n\r\nconst toDbFormat = state => {\r\n return state ? \"T\" : \"F\";\r\n};\r\n\r\nconst changeUser = (userId, changeFields) => {\r\n const params = {\r\n BrukerId: userId,\r\n Felter: changeFields\r\n };\r\n return api.execute(\"EndreBruker\", params, null, null, true);\r\n};\r\n\r\nexport default apiAdmin;\r\n","/*\r\nServer config for prod.\r\nUsed by server-conf-generator.js\r\nThere is one conf-x.js file per server type. Remember to edit all files\r\nif a new field is added\r\n */\r\nconst serverConfig = {\r\n name: \"prod\",\r\n url: \"https://app.groupalert.net/\",\r\n apiUrl: \"https://v24api.net/api/\",\r\n apiAudioUrl: \"https://v24api.net/audio/\",\r\n apiSsoUrl: \"https://v24api.net/sso/\",\r\n v24Url: \"https://varsling24.net/\",\r\n callerId: \"+4756914099\",\r\n};\r\nexport default serverConfig;","import user from \"../util/user\";\r\nimport configServer from \"@/config/configServer\";\r\nimport userLocale from \"@/util/userLocale\";\r\n\r\nconst config = {\r\n appName: \"GroupAlert\",\r\n serverName: configServer.name,\r\n urlApp: configServer.url,\r\n urlV24Api: configServer.apiUrl,\r\n urlV24AudioApi: configServer.apiAudioUrl,\r\n urlV24ApiSso: configServer.apiSsoUrl,\r\n urlV24MainMenu: configServer.v24Url + \"varslingsmeny.php\",\r\n urlV24Logout: configServer.v24Url + \"logout.php\",\r\n defaultEmailSenderAddr: \"noreply@groupalert.net\",\r\n emailAttachmentMbimit: 11,\r\n supportedEmailFileTypes:\r\n \".mp3,.wav,.aif,.gsm,.txt,.doc,.docx,.pdf,.xls,.xlsx,.pps,.ppt,.pptx,.gif,.jpg,.jpeg,.png,.bmp\",\r\n supportedAudioFileTypes: \".mp3,.wav,.aif,.gsm\",\r\n alertContactsPerGroupLimit: 1500,\r\n uploadContactsLimit: 25000,\r\n alertContactsLimit: 50000,\r\n alertVoiceContactsLimit: 1000,\r\n dynamicNameTags: [\"name\", \"navn\", \"namn\"],\r\n phoneLengthLimit: {\r\n min: 6,\r\n max: 16\r\n },\r\n dialogWith: {\r\n small: 450,\r\n medium: 550,\r\n large: 800,\r\n xLarge: 1200\r\n },\r\n chartColors: {\r\n strongGreen: \"rgb(10,132,41)\",\r\n green: \"rgb(82,187,109)\",\r\n yellow: \"rgb(199,255,115)\",\r\n red: \"rgb(255,98,91)\",\r\n grey: \"rgb(201, 203, 207)\",\r\n white: \"rgb(255, 255, 255)\",\r\n blue: \"rgb(90,183,231)\",\r\n orange: \"rgb(248,163,91)\"\r\n },\r\n massDeleteLimit: {\r\n contacts: 1000,\r\n members: 1000,\r\n groups: 100\r\n },\r\n responseFeedbackVisitor: false,\r\n newUserVisitor: false,\r\n defaultTblRowsPerPage: 10,\r\n fixedTblItemsPerPageOptions: [10, 30, 50, 100],\r\n foundEmailContactInfo:\r\n \"Hvordan vi fant din e-postadresse:\\n\" +\r\n \"Din e-postadresse er registrert i Statens register over digital \" +\r\n \"kontaktinformasjon og reservasjon. Du kan lese mer om registeret hos \" +\r\n \"Digitaliseringsdirektoratet på https://norge.no/oppdater-kontaktinformasjon\",\r\n get onboardingUrl() {\r\n return configServer.url + \"new-user\";\r\n },\r\n get responseUrl() {\r\n return configServer.url + \"r?i=[v24ref]\";\r\n },\r\n getAudioPlaybackUrl(fileId, fileClass = \"A\") {\r\n const sid = user.getSessionId();\r\n return (\r\n configServer.apiAudioUrl +\r\n fileId +\r\n \"?SessionId=\" +\r\n sid +\r\n \"&class=\" +\r\n fileClass\r\n );\r\n },\r\n getCallerId() {\r\n return new Promise(resolve => {\r\n user.getProfile().then(usrProfile => {\r\n if (usrProfile.Landskode === 45) {\r\n resolve(\"+4552512580\");\r\n } else {\r\n resolve(configServer.callerId);\r\n }\r\n });\r\n });\r\n },\r\n getDefaultSessionDuration(custNum) {\r\n if (custNum === 32353) {\r\n // Borregaard session never expires\r\n return -1;\r\n }\r\n // Default one week\r\n return 60 * 24 * 7;\r\n },\r\n getDefaultLanguage() {\r\n let locale = userLocale.get();\r\n if (!locale) {\r\n locale = window.navigator.language || window.navigator.userLanguage;\r\n }\r\n\r\n // For our UI we are only interessted in the language, not the\r\n // region for the language.\r\n // More info here:\r\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locale_identification_and_negotiation\r\n const localeIdentifiers = locale.split(\"-\");\r\n return localeIdentifiers[0];\r\n },\r\n getVuetifyLocale(locale) {\r\n locale = locale ? locale : this.getDefaultLanguage();\r\n\r\n // Vuetify does not use offical web language codes.\r\n // Must map exceptions to codes used by Vuetify\r\n if (locale === \"nn\" || locale === \"nb\") {\r\n return \"no\";\r\n } else if (locale === \"se\") {\r\n return \"sv\";\r\n }\r\n return locale;\r\n },\r\n getLocaleProperties() {\r\n const locale = this.getDefaultLanguage();\r\n const nynorsk = locale === \"nn\";\r\n const bokmaal = locale === \"nb\";\r\n const norwegian = nynorsk || bokmaal;\r\n const danish = locale === \"da\";\r\n const swedish = locale === \"se\";\r\n let tagName = \"[name]\";\r\n if (bokmaal || danish) {\r\n tagName = \"[navn]\";\r\n } else if (nynorsk || swedish) {\r\n tagName = \"[namn]\";\r\n }\r\n return {\r\n csvSeparator: norwegian ? \";\" : \",\",\r\n tagName: tagName\r\n };\r\n }\r\n};\r\n\r\nexport default config;\r\n","import apiSession from \"../api/v24/api.session\";\r\nimport apiUser from \"../api/v24/api.user\";\r\nimport store from \"../store/index\";\r\nimport config from \"../config/config\";\r\nimport storage from \"@/util/storage\";\r\nimport router from \"@/router\";\r\nimport apiDepartment from \"@/api/v24/api.department\";\r\nimport number from \"@/util/numberUtil\";\r\n\r\nconst user = {\r\n keySessionId: \"s\",\r\n keyLocale: \"locale\",\r\n keyIsV24User: \"isV24User\",\r\n keyIsSsoMsUser: \"isSsoMsUser\",\r\n keySsoMsLastUsedCode: \"ssoMsLastUsedCode\",\r\n keyDepartment: \"selectedDepartment\",\r\n keyTheme: \"theme\",\r\n keyAlertLogTab: \"alertLogTab\",\r\n profile: null,\r\n\r\n getSessionId() {\r\n return getSessionId();\r\n },\r\n\r\n setSessionId(id) {\r\n return setSessionId(id);\r\n },\r\n\r\n getProfile(forceServerFetch = false) {\r\n return new Promise(resolve => {\r\n if (user.profile && !forceServerFetch) {\r\n resolve(user.profile);\r\n } else {\r\n apiUser.getProfile().then(profile => {\r\n user.profile = profile;\r\n resolve(user.profile);\r\n });\r\n }\r\n });\r\n },\r\n\r\n validateDepartment(targetDepartment) {\r\n return new Promise(resolve => {\r\n this.getProfile().then(usrProfile => {\r\n if (usrProfile.Bruker.Admin) {\r\n resolve(true);\r\n return;\r\n }\r\n this.getDepartments().then(usrInfo => {\r\n if (!usrInfo.departments.length) {\r\n resolve(true);\r\n return;\r\n }\r\n const res = usrInfo.departments.some(\r\n usrDep => usrDep === targetDepartment\r\n );\r\n resolve(res);\r\n });\r\n });\r\n });\r\n },\r\n\r\n getDepartments() {\r\n return new Promise(resolve => {\r\n this.getProfile().then(profile => {\r\n let departments = [];\r\n const mainDepartment = profile.Bruker.Avdeling;\r\n if (mainDepartment) {\r\n departments.push(mainDepartment);\r\n }\r\n departments = departments.concat(\r\n ...profile.Bruker.Avdelinger.map(dep => dep.AvdelingId)\r\n );\r\n resolve({\r\n isAdmin: profile.Bruker.Admin,\r\n departments: departments\r\n });\r\n });\r\n });\r\n },\r\n\r\n changeProfile(name, email, mobile) {\r\n return new Promise(resolve => {\r\n apiUser.changeProfile(name, email, mobile).then(() => {\r\n // Update Vuex state\r\n store.dispatch(\"updateUserProfile\", true).then(() => {\r\n resolve();\r\n });\r\n });\r\n });\r\n },\r\n\r\n canEditGroups() {\r\n return new Promise(resolve => {\r\n this.getProfile().then(profile => {\r\n resolve(\r\n profile.Bruker._permissions.manageContacts || profile.Bruker.Admin\r\n );\r\n });\r\n });\r\n },\r\n\r\n goToStartPage() {\r\n router.push({ path: \"/alert\" });\r\n },\r\n\r\n setSelectedDepartment(department) {\r\n // Save department to session storage.\r\n // Could we use Vuex for this? Yes, but it quickly gets complicated\r\n // when everthing connected to department, alert templates, contacts etc,\r\n // must be updated. Will the current view be correct...? I think it\r\n // may intruduce som strange user state bugs that will be hard to\r\n // reproduce and fix. Safeast thing to do is to reload the app. So then\r\n // we need session storage so that the users choice survives the reload\r\n // Also, we use **session** over local storage so that we don't come in\r\n // a situation where the user have two tabs open and then changes department\r\n // in one of them, leaving the other tab with an outdated state\r\n storage.setSessionItem(this.keyDepartment, department);\r\n window.location.reload();\r\n },\r\n\r\n getSelectedDepartment() {\r\n return storage.getSessionItem(this.keyDepartment) || \"\";\r\n },\r\n\r\n /**\r\n * Returns any keyword of type 0, that GroupAlert uses. If there are more then one keyword,\r\n * the first one will be resolved. If no keyword is found, undefined will be resolved.\r\n */\r\n getSmsCodeword() {\r\n return new Promise(resolve => {\r\n this.getProfile().then(profile => {\r\n const keyword = profile.Kodeord.find(kodewordProps => {\r\n return kodewordProps.KeywordType === 0;\r\n });\r\n resolve(keyword);\r\n });\r\n });\r\n },\r\n\r\n /**\r\n * Get the department to use when saving an item, contact, group etc...\r\n * The users selected department can be \"\" (empty string to indicate to the\r\n * API that we want all items connected to the users departments), but we\r\n * cannot save items with this department, since the user will not be able\r\n * to see the item in the list. So we use the users main department instead\r\n */\r\n getDepartmentForItemSave() {\r\n return new Promise(resolve => {\r\n const selectedDepartment = this.getSelectedDepartment();\r\n\r\n if (selectedDepartment) {\r\n // Check if the selected department exists just to be sure. In\r\n // theory it can be deleted by an admin since since last data fetch\r\n apiDepartment.departmentExits(selectedDepartment).then(exists => {\r\n if (exists) {\r\n // Use selected department\r\n console.log(\"Using selected department\");\r\n resolve(selectedDepartment);\r\n } else {\r\n this.getProfile().then(profile => {\r\n // Department does not exits! Fallback to user main department\r\n console.log(\r\n \"Defaulting to user main department, since sel. dep. does not exist\"\r\n );\r\n const fallbackDep = profile.Bruker.Avdeling;\r\n\r\n // Update storage\r\n storage.setSessionItem(this.keyDepartment, fallbackDep);\r\n\r\n // Resolve\r\n resolve(fallbackDep);\r\n });\r\n }\r\n });\r\n } else {\r\n // No selected department\r\n this.getProfile().then(profile => {\r\n if (profile.Bruker.Admin) {\r\n // Admin can save items with blank department\r\n console.log(\"Using blank department. Ok for admin\");\r\n resolve(\"\");\r\n return;\r\n }\r\n // Fallback to user main department\r\n console.log(\"Defaulting to user main department\");\r\n resolve(profile.Bruker.Avdeling);\r\n });\r\n }\r\n });\r\n },\r\n\r\n setAlertLogTab(tabId) {\r\n storage.setLocalItem(this.keyAlertLogTab, tabId);\r\n },\r\n\r\n getAlertLogTab() {\r\n // Convert to int since localStorage will always store values as strings\r\n return parseInt(storage.getLocalItem(this.keyAlertLogTab), 10) || 0;\r\n },\r\n\r\n setIsV24User(sessionId, simMode) {\r\n localStorage.setItem(user.keyIsV24User, \"yes\");\r\n store.commit(\"setAlertSimMode\", simMode);\r\n return setSessionId(sessionId);\r\n },\r\n\r\n getIsV24User() {\r\n return getIsV24User();\r\n },\r\n\r\n setLasedUsedTheme(theme) {\r\n localStorage.setItem(user.keyTheme, theme);\r\n },\r\n\r\n getLasedUsedTheme() {\r\n return localStorage.getItem(user.keyTheme);\r\n },\r\n\r\n // SsoMs = single signon user using Microsoft Azure AD\r\n setIsSsoMsUser(sessionId, code) {\r\n localStorage.setItem(user.keySsoMsLastUsedCode, code);\r\n localStorage.setItem(user.keyIsSsoMsUser, \"yes\");\r\n return setSessionId(sessionId);\r\n },\r\n\r\n getSsoMsLastUsedCode() {\r\n return localStorage.getItem(user.keySsoMsLastUsedCode);\r\n },\r\n\r\n getIsSsoMsUser() {\r\n return getIsSsoMsUser();\r\n },\r\n\r\n setLocale(locale) {\r\n storage.setLocalItem(this.keyLocale, locale);\r\n },\r\n\r\n isLoggedIn() {\r\n const sessionId = getSessionId();\r\n return sessionId && sessionId.length > 0;\r\n },\r\n\r\n logIn(email, password, silent) {\r\n return new Promise((resolve, reject) => {\r\n let res = apiSession.login(email, password, silent);\r\n res.then(res => {\r\n if (res.SessionId === \"\") {\r\n // Empty SessionId means 2FA auth is required for this user\r\n resolve(true);\r\n } else if (!res.SessionId) {\r\n reject(getSessionErrorMessage());\r\n } else {\r\n setSessionId(res.SessionId).then(() => {\r\n resolve(false);\r\n });\r\n }\r\n });\r\n res.catch(err => {\r\n reject(err);\r\n });\r\n });\r\n },\r\n\r\n logInPin(email, password, pin) {\r\n return new Promise((resolve, reject) => {\r\n apiSession\r\n .loginPin(email, password, pin)\r\n .then(res => {\r\n if (!res.SessionId) {\r\n reject(getSessionErrorMessage());\r\n return;\r\n }\r\n setSessionId(res.SessionId).then(() => {\r\n resolve();\r\n });\r\n })\r\n .catch(err => {\r\n if (err.response.status === 401) {\r\n reject(\"Validation failed. Wrong PIN?\");\r\n }\r\n });\r\n });\r\n },\r\n\r\n logOut(noRedirect = false) {\r\n return new Promise(resolve => {\r\n apiSession.logout(getSessionId()).then(() => {\r\n clientLogout(noRedirect);\r\n resolve();\r\n });\r\n });\r\n },\r\n\r\n logOutClient() {\r\n clientLogout();\r\n }\r\n};\r\n\r\nconst getSessionErrorMessage = () => {\r\n return \"Failed to establish session\";\r\n};\r\n\r\nconst setSessionId = id => {\r\n return new Promise(resolve => {\r\n localStorage.setItem(user.keySessionId, id);\r\n // Set session duration\r\n store.dispatch(\"updateUserProfile\").then(userProfile => {\r\n const customerNum = userProfile.Kundenr;\r\n const sessionDuration = config.getDefaultSessionDuration(customerNum);\r\n apiSession.setSessionDuration(id, sessionDuration).then(() => {\r\n resolve();\r\n });\r\n });\r\n });\r\n};\r\n\r\nconst getSessionId = () => {\r\n return window.localStorage.getItem(user.keySessionId);\r\n};\r\n\r\nconst getIsV24User = () => {\r\n const isV24User = window.localStorage.getItem(user.keyIsV24User);\r\n return isV24User && isV24User === \"yes\";\r\n};\r\n\r\nconst getIsSsoMsUser = () => {\r\n const isSsoMsUser = window.localStorage.getItem(user.keyIsSsoMsUser);\r\n return isSsoMsUser && isSsoMsUser === \"yes\";\r\n};\r\n\r\nconst clientLogout = (noRedirect = false) => {\r\n const isV24User = getIsV24User();\r\n const isSsoMsUser = getIsSsoMsUser();\r\n let target = \"/\";\r\n const localStorageExceptions = [\r\n user.keyAlertLogTab,\r\n user.keyLocale,\r\n user.keyTheme\r\n ];\r\n for (let [key, value] of Object.entries(localStorage)) {\r\n // Don't remove these keys\r\n if (localStorageExceptions.includes(key)) {\r\n continue;\r\n }\r\n window.localStorage.removeItem(key);\r\n }\r\n for (let [key, value] of Object.entries(sessionStorage)) {\r\n window.sessionStorage.removeItem(key);\r\n }\r\n if (isV24User) {\r\n target = config.urlV24Logout;\r\n } else if (isSsoMsUser) {\r\n target = \"/sso-ms-loggedout\";\r\n }\r\n if (!noRedirect) {\r\n // Hard reload to get latest version and clear Vuex state\r\n window.location.href = target;\r\n }\r\n};\r\n\r\nexport default user;\r\n","import Vue from \"vue\";\r\nimport VueRouter from \"vue-router\";\r\nimport user from \"../util/user\";\r\nimport config from \"../config/config\";\r\nimport store from \"../store\";\r\nimport apiSession from \"@/api/v24/api.session\";\r\n\r\nVue.use(VueRouter);\r\n\r\nconst adminPath = \"/admin/\";\r\n\r\nconst routes = [\r\n {\r\n path: \"/\",\r\n name: \"LandingPage\",\r\n // route level code-splitting\r\n // this generates a separate chunk (about.[hash].js) for this route\r\n // which is lazy-loaded when the route is visited.\r\n component: () => import(\"../views/LandingPage\")\r\n },\r\n {\r\n path: \"/alert\",\r\n name: \"Alert\",\r\n component: () => import(\"../views/Alert\")\r\n },\r\n {\r\n path: \"/management\",\r\n name: \"ContactAndGroupManagement\",\r\n component: () => import(\"../views/ContactAndGroupManagement\")\r\n },\r\n {\r\n path: \"/log\",\r\n name: \"Log\",\r\n component: () => import(\"../views/Log\")\r\n },\r\n {\r\n path: \"/dsf-extract\",\r\n name: \"DsfExtract\",\r\n component: () => import(\"../views/DsfExtract\")\r\n },\r\n {\r\n path: \"/alert-templates\",\r\n name: \"AlertTemplates\",\r\n component: () => import(\"../views/AlertTemplates\")\r\n },\r\n {\r\n path: \"/files\",\r\n name: \"Files\",\r\n component: () => import(\"../views/Files\")\r\n },\r\n {\r\n path: \"/user-profile\",\r\n name: \"UserPorfile\",\r\n component: () => import(\"../views/UserProfile\")\r\n },\r\n {\r\n path: \"/feedback\",\r\n name: \"Feedback\",\r\n component: () => import(\"../views/Feedback\")\r\n },\r\n {\r\n path: \"/usrMng\",\r\n name: \"UserManagement\",\r\n component: () => import(\"../views/UserManagement\")\r\n },\r\n {\r\n path: adminPath + \"departments\",\r\n name: \"Departments\",\r\n component: () => import(\"../views/Departments\")\r\n },\r\n {\r\n path: adminPath + \"roles\",\r\n name: \"Roles\",\r\n component: () => import(\"../views/Roles\")\r\n },\r\n {\r\n path: adminPath + \"stats\",\r\n name: \"Stats\",\r\n component: () => import(\"../views/Stats\")\r\n },\r\n {\r\n path: \"/scenario\",\r\n name: \"Scenario\",\r\n component: () => import(\"../views/Scenario\")\r\n },\r\n {\r\n path: \"/r\",\r\n name: \"ReceiverResponse\",\r\n component: () => import(\"../views/ReceiverResponseRegistration\")\r\n },\r\n {\r\n path: \"/notauth\",\r\n name: \"NotAuthorized\",\r\n component: () => import(\"../views/NotAuthorized\")\r\n },\r\n {\r\n path: \"/new-user\",\r\n name: \"NewUser\",\r\n component: () => import(\"../views/NewUser\")\r\n },\r\n {\r\n path: \"/sso-ms-login\",\r\n name: \"SsoMicrosoftLogin\",\r\n component: () => import(\"../views/SsoMicrosoftLogin\")\r\n },\r\n {\r\n path: \"/sso-ms-loggedin\",\r\n name: \"SsoMicrosoftLoggedIn\",\r\n component: () => import(\"../views/SsoMicrosoftLoggedIn\")\r\n },\r\n {\r\n path: \"/sso-ms-loggedout\",\r\n name: \"SsoMicrosoftLoggedout\",\r\n component: () => import(\"../views/SsoMicrosoftLoggedout\")\r\n }\r\n];\r\n\r\nconst router = new VueRouter({\r\n mode: \"history\",\r\n base: process.env.BASE_URL,\r\n routes\r\n});\r\n\r\nconst originalPush = VueRouter.prototype.push;\r\nVueRouter.prototype.push = function push(location) {\r\n return originalPush.call(this, location).catch(err => {\r\n // Just to avoid overdramatic exception in console when user by mistake\r\n // clicks on page in nav bar that he/she is already on.\r\n if (err.name !== \"NavigationDuplicated\") {\r\n throw err;\r\n }\r\n });\r\n};\r\n\r\nrouter.beforeEach((to, from, next) => {\r\n config.responseFeedbackVisitor = to.path === \"/r\";\r\n config.newUserVisitor = to.path === \"/new-user\";\r\n\r\n if (user.isLoggedIn()) {\r\n store.dispatch(\"updateUserProfile\").then(usrProfile => {\r\n const permissions = usrProfile.Bruker._permissions;\r\n\r\n if (to.path === \"/\") {\r\n router.replace({ path: \"alert\" });\r\n }\r\n\r\n if (!usrProfile.Bruker.Admin) {\r\n if (from.path === \"/\" && !permissions.alert && to.path === \"/alert\") {\r\n router.replace(\"log\");\r\n } else if (to.path.indexOf(adminPath) !== -1) {\r\n handleNoAuth(to);\r\n } else if (\r\n !permissions.alert &&\r\n (to.path === \"/\" || to.path === \"/alert\")\r\n ) {\r\n handleNoAuth(to);\r\n } else if (!permissions.alert && to.path === \"/scenario\") {\r\n handleNoAuth(to);\r\n } else if (!permissions.dsfModule && to.path === \"/dsf-extract\") {\r\n handleNoAuth(to);\r\n } else if (!permissions.manageContacts && to.path === \"/management\") {\r\n handleNoAuth(to);\r\n } else if (!permissions.template && to.path === \"/alert-templates\") {\r\n handleNoAuth(to);\r\n } else if (!permissions.manageUsers && to.path === \"/usrMng\") {\r\n handleNoAuth(to);\r\n }\r\n }\r\n\r\n if (to.path === \"/sso-ms-loggedin\") {\r\n const url = new URL(location.href);\r\n const ssoCode = url.searchParams.get(\"code\");\r\n console.log(ssoCode);\r\n console.log(user.getSsoMsLastUsedCode());\r\n if (ssoCode && ssoCode === user.getSsoMsLastUsedCode()) {\r\n // If user comes here he/she is an SSO user that must have\r\n // pressed the \"back\" button\r\n // in the browser and come back to the authentication phase.\r\n // We will not route the user on with next() since this will lead\r\n // to a confusing UI state\r\n console.log(\"Route change prevented\");\r\n return;\r\n }\r\n }\r\n\r\n next();\r\n });\r\n } else {\r\n next();\r\n }\r\n});\r\n\r\nconst handleNoAuth = to => {\r\n store.commit(\"setRetryPageOnNoPermission\", to.path);\r\n router.replace(\"notauth\");\r\n};\r\n\r\nexport default router;\r\n","import api from \"./api\";\r\nimport config from \"@/config/config\";\r\n\r\nconst apiSession = {\r\n login: (user, pass, silent) => {\r\n let data = {\r\n UserId: user,\r\n Password: pass,\r\n SmsSender: config.appName\r\n };\r\n return api.execute(\"login\", data, null, false, silent);\r\n },\r\n\r\n loginPin(user, pass, pin) {\r\n const params = {\r\n UserId: user,\r\n Password: pass,\r\n PinCode: pin\r\n };\r\n return api.execute(\"VerifyPincode\", params, null);\r\n },\r\n\r\n exchangeTicketForSessionId(ticket) {\r\n const params = { Ticket: ticket };\r\n return api.execute(\"ExchangeTicketForSessionId\", params, \"SessionId\");\r\n },\r\n\r\n setSessionDuration(sessionId, duration) {\r\n const params = {\r\n SessionId: sessionId,\r\n TimeToLive: duration\r\n };\r\n return api.execute(\"SetSession\", params);\r\n },\r\n\r\n logout(sessionId) {\r\n return api.execute(\"logout\", { SessionId: sessionId }, null, false);\r\n }\r\n};\r\n\r\nexport default apiSession;\r\n","import store from \"@/store\";\r\n\r\nconst appSnackbar = {\r\n setMessage(message) {\r\n store.commit(\"setAppSnackbar\", message);\r\n }\r\n};\r\n\r\nexport default appSnackbar;\r\n","import api from \"./api\";\r\nimport alertReceiverStatus from \"@/util/alertReceiverStatus\";\r\nimport user from \"@/util/user\";\r\n\r\nconst apiAlert = {\r\n register(alertParams) {\r\n return api.execute(\"StartGruppeVarsling\", alertParams.getApiParams());\r\n },\r\n getAlertList(rowCount, pageIdx) {\r\n const params = {\r\n Paging: {\r\n RowCount: rowCount || 999999,\r\n PageIdx: pageIdx || 0\r\n },\r\n VarslingType: \"R\",\r\n Avdeling: user.getSelectedDepartment()\r\n };\r\n return api.execute(\"HentVarslingerType\", params, \"Varslinger\");\r\n },\r\n /**\r\n * @name getAlertDetails\r\n * @param alertId\r\n * @param dataParams\r\n * Set field(s) to true to fetch corresponding data\r\n {\r\n Adresser: false,\r\n Mottakere: false,\r\n Statuslogg: false,\r\n Endringslogg: false,\r\n Statistikk: false,\r\n Saab: false\r\n }\r\n * @param i18n Used for better status text\r\n * @param pageNumber\r\n * @param numberOfRows\r\n * @param sortField\r\n * @param sortDesc\r\n * @returns {Promise | Promise}\r\n */\r\n getAlertDetails(\r\n alertId,\r\n dataParams,\r\n i18n,\r\n pageNumber,\r\n numberOfRows,\r\n sortField = \"\",\r\n sortDesc = false\r\n ) {\r\n const params = {\r\n Paging: {\r\n RowCount: numberOfRows,\r\n PageIdx: pageNumber\r\n },\r\n VarslingId: alertId,\r\n Adressenr: 0,\r\n Data: dataParams,\r\n SorterFelt: sortField,\r\n SorterSynkende: sortDesc\r\n };\r\n return new Promise(resolve => {\r\n api.execute(\"HentVarslingLogg\", params).then(alert => {\r\n const receiversWithImprovedStatus = [];\r\n if (alert.Mottakere) {\r\n alert.Mottakere.forEach(receiver => {\r\n receiver.Status = alertReceiverStatus.translate(\r\n alert.Varsling.VarslingStatus,\r\n alert.Varsling.Simulering,\r\n receiver.Status,\r\n i18n\r\n );\r\n receiversWithImprovedStatus.push(receiver);\r\n });\r\n alert.Mottakere = receiversWithImprovedStatus;\r\n }\r\n resolve(alert);\r\n });\r\n });\r\n },\r\n\r\n /**\r\n * @name searchAlertReceivers\r\n * @param alertId\r\n * @param searchString\r\n * @param pageNumber\r\n * @param numberOfRows\r\n * @param {String} sortField \"Navn\" or \"Telefon\"\r\n * @param sortDesc\r\n * @param {Number} responseCode Filter on respons code. -1 to show all\r\n * @returns {Promise | Promise}\r\n */\r\n searchAlertReceivers(\r\n alertId,\r\n searchString,\r\n pageNumber,\r\n numberOfRows,\r\n sortField = \"\",\r\n sortDesc = false,\r\n responseCode = -1\r\n ) {\r\n const params = {\r\n Tekst: searchString,\r\n Paging: {\r\n RowCount: numberOfRows,\r\n PageIdx: pageNumber\r\n },\r\n VarslingId: alertId,\r\n SorterFelt: sortField,\r\n SorterSynkende: sortDesc,\r\n StarterMed: false,\r\n ResponsKode: responseCode\r\n };\r\n return new Promise(resolve => {\r\n // Workaround for missing Id value in API return data\r\n // https://app.zenhub.com/workspaces/varsling-24-5ba010a44b5806bc2be88fdb/issues/framweb/v24coreapi/385\r\n api.execute(\"SokVarslingMottakere\", params).then(res => {\r\n res.Mottakere = res.Mottakere.map((item, index) => ({\r\n ...item,\r\n Id: index\r\n }));\r\n resolve(res);\r\n });\r\n });\r\n },\r\n\r\n cancelAlert(alertId) {\r\n return api.execute(\"StoppeVarsling\", { VarslingId: alertId });\r\n },\r\n\r\n /**\r\n *\r\n * @param {String} fromDate YYYY-MM-DD HH:MM\r\n * @param {String} toDate YYYY-MM-DD HH:MM\r\n * @returns {Object} API stats object\r\n */\r\n getStats(fromDate, toDate, department = \"\") {\r\n const params = {\r\n FraDato: fromDate,\r\n TilDato: toDate,\r\n Avdeling: department\r\n };\r\n return api.execute(\"HentVarslingStatistikk\", params);\r\n }\r\n};\r\n\r\nexport default apiAlert;\r\n","import configVoice from \"@/config/configVoice\";\r\n\r\nexport default class AlertTemplate {\r\n constructor() {\r\n this.id = 0;\r\n this.name = \"\";\r\n this.alertName = \"\";\r\n this.text = {\r\n sms: \"\",\r\n email: \"\",\r\n voice: \"\"\r\n };\r\n this.responseOptions = null;\r\n this.emailTitle = \"\";\r\n this.voiceSettings = {\r\n voiceProps: {\r\n Gender: \"\",\r\n Id: \"\",\r\n LanguageCode: \"\",\r\n LanguageName: \"\",\r\n Name: \"\"\r\n },\r\n attempts: configVoice.defaultSetting.attempts,\r\n delay: configVoice.defaultSetting.delay,\r\n endOnState: configVoice.defaultSetting.endOnState,\r\n deputy: configVoice.defaultSetting.deputy\r\n };\r\n this.responseOptions = configVoice.defaultSetting.responseOptions;\r\n }\r\n\r\n /**\r\n * Set the alert template properties from object returned from API.\r\n * @param {Object} apiObject\r\n */\r\n setFromApiObject(apiObject) {\r\n const templData = JSON.parse(apiObject.Melding);\r\n this.id = apiObject.MalId;\r\n this.name = apiObject.Navn;\r\n this.department = apiObject.Avdeling;\r\n this.departmentName = apiObject.AvdelingNavn;\r\n this.text = templData.text;\r\n this.responseOptions = templData.responseOptions;\r\n // Following fields defaults to empty since this field was introduced\r\n // after initial format and may not exits for all templates\r\n if (templData.alertName) {\r\n this.alertName = templData.alertName;\r\n }\r\n if (templData.emailTitle) {\r\n this.emailTitle = templData.emailTitle;\r\n }\r\n if (templData.voiceSettings) {\r\n this.voiceSettings = templData.voiceSettings;\r\n }\r\n }\r\n\r\n get() {\r\n return {\r\n id: this.id,\r\n name: this.name,\r\n alertName: this.alertName,\r\n department: this.department,\r\n departmentName: this.departmentName,\r\n text: this.text,\r\n emailTitle: this.emailTitle,\r\n voiceSettings: this.voiceSettings,\r\n responseOptions: this.responseOptions\r\n };\r\n }\r\n}\r\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"background\"},[_c('v-container',{attrs:{\"fill-height\":\"\"}},[_c('v-layout',{attrs:{\"align-center\":\"\",\"justify-center\":\"\"}},[_c('v-flex',{attrs:{\"xs12\":\"\",\"sm8\":\"\",\"md4\":\"\"}},[_c('v-card',{staticClass:\"elevation-24\",attrs:{\"max-width\":\"450\"}},[_c('v-card-text',[_c('v-layout',{attrs:{\"align-center\":\"\",\"justify-center\":\"\"}},[_c('v-img',{staticClass:\"ma-12\",attrs:{\"src\":require(\"../assets/images/logo/logo-with-app-title.svg\"),\"max-width\":\"400\"}})],1),_c('LoginForm')],1)],1)],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('v-form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.login()}}},[_c('v-flex',[_c('v-text-field',{attrs:{\"data-testid\":\"loginFormEmail\",\"autofocus\":\"\",\"autocomplete\":\"username\",\"label\":_vm.$t('email'),\"required\":\"\"},model:{value:(_vm.email),callback:function ($$v) {_vm.email=$$v},expression:\"email\"}})],1),_c('v-flex',[_c('v-text-field',{attrs:{\"data-testid\":\"loginFormPassword\",\"type\":\"password\",\"placeholder\":\" \",\"label\":_vm.$t('pass'),\"required\":\"\",\"autocomplete\":\"current-password\"},model:{value:(_vm.password),callback:function ($$v) {_vm.password=$$v},expression:\"password\"}})],1),(_vm.resetPassSuccessMsg)?_c('v-alert',{staticClass:\"mt-8\",attrs:{\"type\":\"info\"}},[_vm._v(\" \"+_vm._s(_vm.$t(\"passResetSuccess\"))+\" \")]):_vm._e(),(_vm.wrongLogin)?_c('v-alert',{attrs:{\"type\":\"warning\"}},[_vm._v(\" \"+_vm._s(_vm.$t(\"wrongLogin\"))+\" \")]):_vm._e(),(_vm.loginFail)?_c('v-alert',{attrs:{\"type\":\"warning\"}},[_vm._v(\" \"+_vm._s(_vm.$t(\"wrongLogin\"))+\" \")]):_vm._e(),(_vm.accountDisabled)?_c('v-alert',{attrs:{\"type\":\"error\"}},[_vm._v(\" \"+_vm._s(_vm.$t(\"tooManyPassAttempts\"))+\" \")]):_vm._e(),_c('v-flex',{attrs:{\"xs12\":\"\"}},[_c('v-btn',{staticClass:\"primary\",attrs:{\"data-testid\":\"loginFormLogin\",\"large\":\"\",\"block\":\"\",\"type\":\"submit\"}},[_vm._v(_vm._s(_vm.$t(\"login\")))])],1),_c('v-flex',{staticClass:\"mb-15 mt-10\",attrs:{\"xs12\":\"\"}},[_c('v-btn',{staticStyle:{\"float\":\"right\"},attrs:{\"data-testid\":\"loginFormResetPassword\",\"text\":\"\",\"small\":\"\",\"outlined\":\"\"},on:{\"click\":_vm.showResetPassDialog}},[_vm._v(\" \"+_vm._s(_vm.$t(\"resetPassword\"))+\" \")])],1)],1),(_vm.resetPassDialog)?_c('v-dialog',{attrs:{\"max-width\":\"600\",\"persistent\":\"\"},model:{value:(_vm.resetPassDialog),callback:function ($$v) {_vm.resetPassDialog=$$v},expression:\"resetPassDialog\"}},[_c('NewPasswordRequest',{attrs:{\"init-email\":_vm.email},on:{\"cancel\":_vm.closeResetDialog,\"success\":_vm.showResetSuccessMsg}})],1):_vm._e(),_c('v-dialog',{attrs:{\"width\":\"300\",\"persistent\":\"\"},model:{value:(_vm.twoFaDialog),callback:function ($$v) {_vm.twoFaDialog=$$v},expression:\"twoFaDialog\"}},[_c('v-form',{attrs:{\"autocomplete\":\"off\"},on:{\"submit\":function($event){$event.preventDefault();return _vm.validatePin()}}},[_c('v-card',[_c('v-card-title',{staticClass:\"headline\",attrs:{\"primary-title\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.$t(\"pinRequired\"))+\" \")]),_c('v-card-text',[_c('p',[_vm._v(\" \"+_vm._s(_vm.$t(\"pinSentToMobile\"))+\" \")]),(_vm.twoFaDialog)?_c('v-text-field',{attrs:{\"label\":_vm.$t('pin'),\"outlined\":\"\",\"autofocus\":\"\"},model:{value:(_vm.pin),callback:function ($$v) {_vm.pin=$$v},expression:\"pin\"}}):_vm._e()],1),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{on:{\"click\":_vm.cancelPin}},[_vm._v(\" \"+_vm._s(_vm.$t(\"cancel\"))+\" \")]),_c('v-btn',{attrs:{\"type\":\"submit\",\"color\":\"primary\",\"disabled\":!_vm.pin}},[_vm._v(\" OK \")])],1)],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginForm.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginForm.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LoginForm.vue?vue&type=template&id=c5e88e74&\"\nimport script from \"./LoginForm.vue?vue&type=script&lang=js&\"\nexport * from \"./LoginForm.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LandingPage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LandingPage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LandingPage.vue?vue&type=template&id=de9322aa&scoped=true&\"\nimport script from \"./LandingPage.vue?vue&type=script&lang=js&\"\nexport * from \"./LandingPage.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LandingPage.vue?vue&type=style&index=0&id=de9322aa&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"de9322aa\",\n null\n \n)\n\nexport default component.exports","import i18n from \"../i18n\";\r\nimport Email from \"./Email\";\r\nimport stringUtil from \"@/util/stringUtil\";\r\nimport config from \"@/config/config\";\r\n\r\nconst formValidationRules = {\r\n requiredRule: [v => (!!v && !!v.trim()) || i18n.t(\"mandatoryField\")],\r\n groupShortnameRules: [\r\n v => {\r\n if (!v) {\r\n return true;\r\n }\r\n\r\n if (stringUtil.hasWhitespace(v)) {\r\n return i18n.t(\"noWhitespace\");\r\n }\r\n\r\n if (!/^[a-zA-Z0-9]+$/.test(v)) {\r\n return i18n.t(\"onlyLettersAndNumbers\");\r\n }\r\n\r\n const max = 16;\r\n if (v.length > max) {\r\n return i18n.t(\"maxXCharacters\", { x: max });\r\n }\r\n return true;\r\n }\r\n ],\r\n phoneRules: [\r\n v => {\r\n if (!v) {\r\n return true;\r\n }\r\n if (v.length < config.phoneLengthLimit.min) {\r\n return i18n.t(\"invalidPhoneNumber\");\r\n }\r\n if (!/^\\d+$/.test(v)) {\r\n return i18n.t(\"phoneOnlyNumbers\");\r\n } else if (v.length > config.phoneLengthLimit.max) {\r\n return i18n.t(\"tooManyDigits\");\r\n }\r\n return true;\r\n }\r\n ],\r\n requiredEmailRules: [\r\n v => {\r\n const email = new Email(v);\r\n return email.isValid() || i18n.t(\"invalidEmail\");\r\n }\r\n ],\r\n emailRules: [\r\n v => {\r\n if (!v) {\r\n return true;\r\n }\r\n const email = new Email(v);\r\n return email.isValid() || i18n.t(\"invalidEmail\");\r\n }\r\n ],\r\n passwordRules: [\r\n v => {\r\n if (!v || v.length < 8) {\r\n return i18n.t(\"passMinRule\");\r\n }\r\n if (v.length > 32) {\r\n return i18n.t(\"passMaxRule\");\r\n }\r\n const hasLowerCase = stringUtil.hasLowerCase(v);\r\n const hasUpperCase = stringUtil.hasUpperCase(v);\r\n const hasNumber = stringUtil.hasNumber(v);\r\n if (!hasLowerCase || !hasUpperCase || !hasNumber) {\r\n return i18n.t(\"passGeneralRules\");\r\n }\r\n return true;\r\n }\r\n ],\r\n urlRules: [\r\n v => {\r\n if (!v) {\r\n return true;\r\n }\r\n const isHttp = v.substr(0, 7) === \"http://\";\r\n const isHttps = v.substr(0, 8) === \"https://\";\r\n const isDoubleSlash = v.substr(0, 2) === \"//\";\r\n if (!isHttp && !isHttps && !isDoubleSlash) {\r\n return i18n.t(\"invalidLink\");\r\n }\r\n return true;\r\n }\r\n ],\r\n ignoreWhitespace: [v => (!v && !!v.trim()) || i18n.t(\"mandatoryField\")]\r\n};\r\n\r\nexport default formValidationRules;\r\n","import api from \"./api\";\r\nimport config from \"@/config/config\";\r\nimport user from \"@/util/user\";\r\nimport store from \"@/store\";\r\n\r\nconst apiUser = {\r\n alias: \"V24\",\r\n\r\n /**\r\n * @name getProfile\r\n * @desc Gets the user profile for the logged in user\r\n * @returns {Promise}\r\n */\r\n getProfile() {\r\n return new Promise(resolve => {\r\n let promiseDepartments;\r\n const promiseProfile = api\r\n .execute(\"HentBrukerProfil\", null, \"Profil\")\r\n .then(usrProfile => {\r\n getAdminDepartments(usrProfile).then(departments => {\r\n // The API returns to objects defining permissions. One legacy\r\n // object (Tilgang) and one new (Rettighet).\r\n // Rettighet is the permission\r\n // a user has based on permission roles given. At the moment\r\n // the roles feature is enabled for only a selected group of\r\n // customers that will have Rollestyring=true.\r\n //\r\n // To avoid tons of if-else we here map the\r\n // permission flags to a custom _permission field, and will use that\r\n // instead of Tilgang/Rettighet\r\n //\r\n // But note that if a customer has Rollestyring, some of the fields\r\n // in Tilgang is still used! For example: Rigspolitiet\r\n // has Rollestyring, and they also have a feature called\r\n // Tjenestetelefon, that is defined in the Tilgang object\r\n\r\n const rolePerm = usrProfile.Bruker.Rettighet;\r\n const legacyPerm = usrProfile.Bruker.Tilgang;\r\n const r = usrProfile.Rollestyring;\r\n const p = {\r\n dsfModule: legacyPerm.GruppeDSF,\r\n activeDirProvisioning: legacyPerm.ADProvisjonering,\r\n template: r ? rolePerm.Mal : legacyPerm.Maler,\r\n alert: r ? rolePerm.Varsling : legacyPerm.GruppeVarsling,\r\n manageContacts: r ? rolePerm.Kontakt : legacyPerm.Grupper,\r\n manageAccount: r ? rolePerm.Konto : usrProfile.Administrator,\r\n manageUsers: r ? rolePerm.Bruker : false,\r\n files: legacyPerm.Filer,\r\n phoneNumTypes: legacyPerm.TjenesteTelefon\r\n };\r\n\r\n // Admins have access to everything that is not a per customer\r\n // permission level\r\n if (usrProfile.Bruker.Admin) {\r\n p.template = true;\r\n p.alert = true;\r\n p.manageContacts = true;\r\n p.manageAccount = true;\r\n p.manageUsers = true;\r\n }\r\n\r\n usrProfile.Bruker._permissions = p;\r\n setDepartment(usrProfile);\r\n\r\n // It's practical for us to have the customers/admin departments in the\r\n // user profile. So we merge them together\r\n usrProfile._adminDepartments = departments;\r\n resolve(usrProfile);\r\n });\r\n });\r\n });\r\n },\r\n changeProfile(name, email, mobile) {\r\n const params = { Navn: name, Epost: email, Mobil: mobile };\r\n return api.execute(\"EndreBrukerProfil\", params);\r\n },\r\n\r\n requestNewPassword(userId, messageToReceiver) {\r\n const params = {\r\n BrukerId: userId,\r\n Alias: this.alias,\r\n Mal: {\r\n Avsender: config.appName,\r\n Melding: messageToReceiver + \" %d\"\r\n }\r\n };\r\n return api.execute(\"RequestNewPassword\", params, null, false);\r\n },\r\n\r\n confirmNewPassword(userId, token, newPassword) {\r\n const params = {\r\n BrukerId: userId,\r\n Token: token,\r\n Hemmelighet: newPassword,\r\n Alias: this.alias\r\n };\r\n return api.execute(\"ConfirmNewPassword\", params, null, false, true);\r\n }\r\n};\r\n\r\nconst getAdminDepartments = userProfile => {\r\n return new Promise(resolve => {\r\n if (!userProfile.Bruker.Admin) {\r\n resolve([]);\r\n } else {\r\n store\r\n .dispatch(\"updateDepartments\")\r\n .then(departments => resolve(departments));\r\n }\r\n });\r\n};\r\n\r\nconst setDepartment = userProfile => {\r\n if (userProfile.Bruker.Admin) {\r\n return;\r\n }\r\n\r\n if (!userProfile.Bruker.Avdelinger.length) {\r\n return;\r\n }\r\n\r\n const sessionDepartment = user.getSelectedDepartment();\r\n\r\n // This will handle the situation where a department user has not any\r\n // department stored in sessionStorage (may be because a new tab has been\r\n // created with a valid API session id (stored in localStorage)).\r\n if (\r\n !sessionDepartment &&\r\n userProfile.Bruker.Avdeling &&\r\n !userProfile.Bruker.Avdelinger.length\r\n ) {\r\n user.setSelectedDepartment(userProfile.Bruker.Avdeling);\r\n }\r\n};\r\n\r\nexport default apiUser;\r\n","import api from \"./api\";\r\nimport configVoice from \"@/config/configVoice\";\r\n\r\nconst apiVoice = {\r\n voices: null,\r\n getVoices() {\r\n return new Promise(function(resolve) {\r\n if (apiVoice.voices) {\r\n resolve(apiVoice.voices);\r\n } else {\r\n api.execute(\"GetVoices\", null, \"Voices\").then(voices => {\r\n apiVoice.voices = sort(findSupportedVoices(voices));\r\n resolve(apiVoice.voices);\r\n });\r\n }\r\n });\r\n },\r\n sendSingle(recipient, text, voicePerson) {\r\n return new Promise((resolve, reject) => {\r\n configVoice.getDefaultCallerId().then(callerId => {\r\n const params = {\r\n BatchId: \"\",\r\n Script: {\r\n Voice: voicePerson,\r\n Content: text\r\n },\r\n Messages: [\r\n {\r\n CallerId: callerId,\r\n Recipient: recipient\r\n }\r\n ]\r\n };\r\n\r\n api.execute(\"SendVoice\", params).then(res => {\r\n if (res.Status === \"1 messages queued for sending\") {\r\n resolve();\r\n } else {\r\n reject();\r\n }\r\n });\r\n });\r\n });\r\n }\r\n};\r\n\r\nconst findSupportedVoices = voices => {\r\n return voices.filter(voice =>\r\n configVoice.supportedVoiceLanguages.some(\r\n suppLang => voice.LanguageCode === suppLang.code\r\n )\r\n );\r\n};\r\n\r\nconst sort = voices => {\r\n return voices.sort((a, b) => a.LanguageCode.localeCompare(b.LanguageCode));\r\n};\r\n\r\nexport default apiVoice;\r\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LandingPage.vue?vue&type=style&index=0&id=de9322aa&prod&scoped=true&lang=css&\"","import numberUtil from \"@/util/numberUtil\";\r\nimport config from \"@/config/config\";\r\n\r\nexport default class Email {\r\n constructor(emailAddr) {\r\n this.emailAddr = emailAddr;\r\n }\r\n\r\n isValid() {\r\n // Not allowing following chars that can be accidentally get copy-pasted\r\n const copyPasteFails = [\"<\", \">\", \",\"];\r\n let i = 0;\r\n const len = copyPasteFails.length;\r\n for (i; i < len; i++) {\r\n if (this.emailAddr.indexOf(copyPasteFails[i]) !== -1) {\r\n return false;\r\n }\r\n }\r\n\r\n return /\\S+@\\S+\\.\\S+/.test(this.emailAddr);\r\n }\r\n}\r\n"],"sourceRoot":""}