{"version":3,"sources":["img/logo.svg","img/loading.svg","img sync /^/.//.*$","img/downArrow.svg","img/user.svg","img/company.svg","img/dataPharmLogo2.png","img/dataPharmLogo.png","img/downArrow2.svg","img/formCloseWhite.svg","img/hamburgerIcon.svg","img/logoNegative.svg","img/logoNegative_iconSize.svg","img/meddata1.svg","img/save.svg","img/upArrow.svg","img/arrow.svg","img/backEmblem.svg","img/contact.svg","img/hammer.svg","img/help.svg","img/home.svg","img/homeSearchIcon.svg","img/label.svg","img/listingEnterIcon.svg","img/listingSearchIcon.svg","img/logoPositive.svg","img/meddata.svg","img/oldLogo.svg","img/plus.svg","img/sidebarIcon_home.svg","serviceWorker.js","contexts/GlobalStore.js","contexts/ClientStore.js","components/APIConnections/APIConnections.js","components/BackEmblem/BackEmblem.js","components/IsLoading/IsLoading.js","contexts/UserStore.js","Telemetry.js","contexts/PrivateRoute.js","contexts/AuthPages.js","components/Sidebar/CreateNew.js","components/Sidebar/CheckBox.js","components/FormElements/Button/Button.js","components/Sidebar/SelectStatus.js","components/Sidebar/SelectType.js","components/Sidebar/RadioButton.js","components/Sidebar/UserSettings.js","components/Sidebar/Contact.js","components/Sidebar/NavButton.js","components/Sidebar/NavButtonMD.js","components/Sidebar/NavButtonContact.js","components/Sidebar/Sidebar.js","components/Header/HeaderActions.js","components/Header/Header.js","components/Card/Card.js","components/CardSeeAll/CardSeeAll.js","components/CardSliderForHome/CardSliderForHome.js","pages/Home/Home.js","components/FormElements/Seperator/Seperator.js","components/FormElements/SummarySection/SummarySection.js","components/FormElements/FreeForm/FreeForm.js","components/FormElements/ApprovalZone/ApprovalZone.js","pages/HandleSub/UserActions.js","components/FormElements/Description/Description.js","contexts/FeatureContext.js","components/FormElements/DescriptionLink/DescriptionLink.js","pages/HandleSub/setup/selectBoxOptions.js","components/FormElements/TextInput/TextInput.js","components/FormElements/TextInput/useDebounce.js","components/FormElements/MultipleTextInput/MultipleTextInput.js","components/FormElements/SelectBox/SelectBox.js","components/FormElements/MultipleSelectBox/MultipleSelectBox.js","components/FormElements/DateInput/DateInput.js","components/FormElements/DataGrid/parts/DataGridEdit.js","components/FormElements/UnitSelect/UnitSelect.js","components/FormElements/RadioButton/RadioButton.js","components/FormElements/FileInput/FileInput.js","components/FormElements/IngredientBox/IngredientBox.js","components/FormElements/Ingredients/Ingredients.js","components/FormElements/PackBox/PackBox.js","components/FormElements/Packs/Packs.js","pages/HandleSub/setup/validationRules.js","pages/HandleSub/setup/formFields.js","components/FormElements/DataGrid/DataGrid.js","pages/HandleSub/HandleSub.js","pages/About/About.js","pages/ErrorPages/ErrorPages.js","pages/LoggedOut/LoggedOut.js","components/MobileMenu/MobileMenu.js","components/CardsForListing/CardsForListing.js","pages/List/List.js","App.js","index.js","img/formClose.svg"],"names":["module","exports","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","Boolean","window","location","hostname","match","GlobalContext","createContext","GlobalStore","props","history","useHistory","useState","pageName","setPageName","isLoading","setIsLoading","submissionType","productName","status","submissionId","currentAction","headerTitles","setHeaderTitles","position","content","sidebarBehavior","setSidebarBehavior","globalThrottleTime","setGlobalThrottleTime","globalAlert","setGlobalAlert","typeIdentifier","data","typeofData","Array","isArray","useLayoutEffect","disableIsLoadingWithDelay","useCallback","_","debounce","obj","a","callSaveAndContinue","setCallSaveAndContinue","callPreSection","setCallPreSection","callNextSection","setCallNextSection","closeGlobalAlertWithDelay","prototype","_isEqualTo","array","this","length","i","l","equals","Provider","value","statusLib","DRA","scr","co","display","RFA","NHS","CON","REJ","CAN","PENSUB","PENCAN","triggerGlobalAlert","text","showErrorLogsOnConsole","pennyToPound","Number","toFixed","goToHome","push","clearHeaderTitle","removeSpaces","trim","replace","txt","charAt","toUpperCase","substr","addSpaces","startAllCapitilised","toLowerCase","turnArrayToLines","item","key","removeAnItemFromAnArray","index","indexOf","splice","isNotEmpty","type","convertDateForScreen","date","newDate","substring","split","children","ClientContext","ClientStore","defineWINW","innerWidth","document","documentElement","clientWidth","defineWINH","innerHeight","clientHeight","BROWSER","isBrowserGreen","opr","addons","opera","navigator","userAgent","InstallTrigger","test","HTMLElement","safari","pushNotification","toString","documentMode","StyleMedia","chrome","webstore","runtime","WINW","WINH","isMOBILE","isBROWSERGREEN","CS","setCS","resizeBlocker","defineWindowProps","prevCS","addEventListener","FetchAPI","apiShortName","apiNeeds","token","callbackWithErrorStatusOrConfirmation","apiURL","apiData","apiTask","apiMethod","apiHeaders","Authorization","removeStringfy","process","companyId","ampId","console","warn","submissionID","ID","formData","FormData","append","fileProps","newBody","JSON","stringify","fetch","method","headers","body","then","response","ok","json","errorMessage","errorObject","dataObject","catch","undefined","pathname","BackEmblem","svgClass","className","version","xmlns","xlink","x","y","viewBox","space","d","IsLoading","useContext","showMeAlways","internalBoo","src","require","alt","UserContext","UserStore","oidcConfig","authority","client_id","redirect_uri","response_type","scope","automaticSilentRenew","silentRequestTimeout","silent_redirect_uri","revokeAccessTokenOnSignout","metadata","issuer","jwks_uri","authorization_endpoint","token_endpoint","userinfo_endpoint","end_session_endpoint","check_session_iframe","revocation_endpoint","introspection_endpoint","cookies","Cookies","oidcMgr","setOidcMgr","processing","setProcessing","user","setUser","userState","setUserState","useLocation","setupAuthentication","setupMeddataAuthentication","newOidcMgr","Oidc","UserManager","search","includes","setHubVisitCookie","setHubOIDCSettings","getHubVisitCookie","get","set","expires","signinRedirectCallback","getUser","handleUser","events","addSilentRenewError","alert","message","logout","addAccessTokenExpired","tokenExpired","info","accessToken","access_token","userId","profile","user_id","userName","user_name","userEmail","email","permissions","companyPermissions","Cookie","getUserCookie","selectedCompany","setUserCookie","companyPackCount","companyProductCount","currentPermLevel","definePermissionLevel","newCookie","path","oldCookie","remove","removeUserCookie","selectedCompanyPermissionsArray","currentLevel","forEach","role","err","signoutRedirect","clearStaleState","signoutRedirectCallback","localStorage","clear","sessionStorage","isAuthenticated","login","signinRedirect","signinSilent","signinSilentCallback","changeSelectedCompany","selectedCompanyId","newCompany","prev","reactPlugin","ReactPlugin","browserHistory","createBrowserHistory","basename","instrumentationKey","ApplicationInsights","config","extensions","extensionConfig","identifier","loadAppInsights","Telemetry","React","query","URLSearchParams","trackPageView","uri","name","properties","PrivateRoute","component","rest","AuthPages","CreateNew","to","CheckBox","checked","onChange","Button","buttonType","onClick","additionalStyle","throttle","viewMode","isDisabled","setIsDisabled","throttledCall","onMouseDown","style","data-testid","SelectStatus","Draft","ReadyForAuthorisation","PendingSubmission","WithNhsBsa","Confirmed","Rejected","PendingCancellation","Cancelled","selectedCheckBoxes","setSelectedCheckBoxes","selectedCount","setSelectedCount","handleSelect","trueOrFalse","newArray","entries","newSelectedCount","selectedOption","filterStatus","marginRight","SelectType","NewProduct","NewPack","UpdateProduct","UpdatePack","MassPriceUpdate","selectedOptions","filterType","RadioButton","UserSettings","allRadios","setAllRadios","setSelectedOption","newSelectedOption","whiteSpace","minWidth","color","Fragment","marginBottom","inputType","Contact","open","NavButton","icon","onKeyPress","dangerouslySetInnerHTML","__html","NavButtonMD","NavButtonContact","Sidebar","disableOnMouseLeave","setDisableOnMouseLeave","handleContent","newContent","delayDisableMouseLeave","onMouseLeave","pointerEvents","HeaderActions","headerActionsScrollYPosition","goBack","top","paddingTop","getElementById","scrollIntoView","behavior","title","Header","onMouseOverFix","setOnMouseOverFix","newClass","setNewClass","setHeaderActionsScrollYPosition","findClassName","turnMouseOverTrue","useEventListener","scrollY","scrollTop","getElementsByTagName","onMouseOver","onMouseOut","Card","hideStatus","medName","dateOn","dateBy","nhsMsg","statusCSS","CardSeeAll","howMuchMore","CardSliderForHome","order","setHowMuchMore","sArea","useRef","sAreaLong","sLine","sBar","sBarZone","mouseX","delayFunc","delayFunc2","currentWINW","setCurrentWINW","sBarMaxLeft","setSBarMaxLeft","sAreaMaxLeft","setSAreaMaxLeft","isSBarNeeded","setIsSBarNeeded","sBarLeftToWall","setSBarLeftToWall","halfOfSBar","setHalfOfSBar","blockScrollingIfDOMIsntReady","current","delay","sAreaWidth","getBoundingClientRect","width","sAreaLongWidth","sBarRect","left","sBarWidth","sBarZoneWidth","getMX","mouseDown","clientX","mX","newVal","clearTimeout","scrollable","scrollTo","preventDefault","onBarDrag","ref","onScroll","sAreaSLeft","scrollLeft","onScrollLeft","modified","modifiedBy","minHeight","marginLeft","marginTop","Home","draftData","setDraftData","rfaData","setRfaData","nhsData","setNhsData","confirmedData","setConfirmedData","rejectedData","setRejectedData","cancelledData","setCancelledData","penSubData","setPenSubData","sliderNames","dataRoute","hideIfEmpty","setOrder","boo","newData","filter","fetchData","alignSelf","maxWidth","height","Seperator","keyName","placeHolder","SummarySection","savedData","FreeForm","newResponse","responses","reason","additionalInfo","ApprovalZone","onConfirm","onDecline","headerText","redText","onConfirmText","onDeclineText","areYouSureText","keyCode","UserActions","errorFieldNameClicked","settings","setSettings","sections","convertCurrentValueToSavedValue","silentUpdateData","areTheyEqual","action","internalState","isThereAnyChange","allErrorFields","setAllErrorFields","propsForApprovalState","setPropsForApprovalState","localIsLoading","setLocalIsLoading","firstRender","setFirstRender","promptWhen","setPromptWhen","newAllErrorFields","dontSendToApi","errorText","isCtrlKeyDown","platform","metaKey","ctrlKey","isSDown","which","preventDef","saveAndContinue","setAttribute","jumpToSection","preOrNext","Math","round","allSectionYValues","offsetTop","sort","b","elem","arraySiraliEkle","prePoint","nextPoint","scrollHeight","changeStatus","newStatus","serverReply","pathName","createApiPackage","cloneDeep","smpcFile","currentValue","fileUrl","URL","apiPackage","discontinueProduct","discontinuePack","label","discontinued","singlePriceUpdate","inComingPack","price","relatedFields_isItSinglePriceSub","newPrice","priceLength","postSubmission","newStatusName","saveAndGoHome","log","when","error","errorFieldName","fieldName","print","Description","FeatureFlagsStore","FeatureFlagsProvider","initDefaults","enableNhsBsaEmailAddress","errorDefaults","flags","setFlags","useEffect","url","getFlags","DescriptionLink","supportemail","href","TextInput","updateData","setIsFocused2","informationText","validationRules","alwaysNonEditable","localCurrentValue","setLocalCurrentValue","firstFocus","setFirstFocus","inputZone","debouncedSearchTerm","debouncedValue","setDebouncedValue","handler","setTimeout","useDebounce","spellCheck","autoCorrect","autoCapitalize","placeholder","onBlur","onFocus","target","onKeyUp","event","blur","MultipleTextInput","localInputValue","setLocalInputValue","anItemAdded","localInputValue2","newCurrentValue","typedValues","VAL","removeAnItem","SelectBox","optionValue","apiNameForOptionValue","handleData","isFocused","setIsFocused","localLoading","setLocalLoading","localOptionBuffer","setLocalOptionBuffer","callNewOptionsViaAPI","DATA","filteredOptions","option","String","val","MultipleSelectBox","arr","checkIfItsAlreadyExist","each","addAnItem","selectedValues","DateInput","today","Date","todayDay","getDate","todayMonth","getMonth","todayYear","getFullYear","toggleFirstFocus","newOptionValue","month","year","newDays","howManyDays","parseInt","day","updateData_local","newDataObj","savedValue","NOT_A_DIGIT_AND_ZERO_FIRST","DataGridEdit","setText","newText","UnitSelect","propName","input","unit","FileInput","draggableZone","rel","textTransform","multiple","files","fileInputChanged","htmlFor","onDragEnter","classList","toggle","onDragLeave","onDrop","stopPropagation","dataTransfer","dropEvent","onDragOver","allowDrop","file","fileName","fileType","shortenFileName","click","IngredientBox","currentAll","ingredientName","bops","boss","numerator","denominator","Ingredients","removeButtonForIngsAndPacks","additionalData","PackBox","quantity","legalCategory","subpackInfo","gtinCodes","calendarPack","hospitalPack","limitedStability","Packs","hasToBeFilled","typeOfData","hasToBeFilledIfVisible","hideFromUI","hasToBeFilledDate","hasToBeTodayOrFuture","prependZero","slice","isEmpty","hasToBeFilledUnit","hasToBeFilledUnitIfVisible","hasToBeDocOrPDF","hasToBePrice","thereMustBeAnIngAtLeast","thereMustBeAnPackAtLeast","gtinCodesControl","errorStatus","lastDigit","isNaN","reverse","oddTotal","evenTotal","handleDataForIngredientApi","UnitValueValidation","shouldBeNumber","acceptDecimal","isFileSizeWithinRange","size","newYears","defaultDateOptions","yesNoNA","yesNo","trueFalse","formulations","licensedRoutes","flavours","controlledDrugCategories","currentLicensing","restrictions","units","legalCategories","seperatorIntro","isASection","componentTypeName","componentType","relatedVMP","formulation","seperatorEffectiveDate","descriptionEffectiveDate","effectiveDate","seperatorIngredients","descriptionIngredients","descriptionNewIngredients","ingredients","omit","setData","findError","saveIngredientButton","addIngredientButton","bopsCurrentValue","newIngredientsCurrentValue","seperatorExcipients","productFlavour","glutenFreeProduct","preservativeFreeProduct","sugarFreeProduct","cfcFreeProduct","seperatorLicense","controlledDrugCategory","currentLicensingAuthority","restrictionsOnAvailability","emaAdditionalMonitoring","seperatorPacks","descriptionPacks","packs","savePackButton","addPackButton","reduce","total","field","newPacksCurrentValue","seperatorSMPC","relatedProduct","seperatorPackDetails","relatedPack","discontinueReason","discontinueQuantity","inComingSavedValue","changedFieldNames","descriptionPrices","prices","isReadOnly","handleUpdatePrice","newPrices","actualPackId","tableRows","packName","HandleSub","params","setSections","convertSavedValueToCurrentValue","fieldOrfieldName","newData2","newObj","i2","newRadio","saved2","dayValue","monthValue","yearValue","uom","currentPack","newPack","fieldName2","oldSaved","currentElem","convertNhsFormToCurrentValue","dataOrg","incomingForm","yesNoNAConverter","formKeys","isThere","onlyChanged","virtualProductId","flavourCode","glutenFree","preservativeFree","sugarFree","cfcFree","controlledDrugCategoryCode","licensingAuthorityCode","restrictionOnAvailability","newIngs","basisOfPharmStrengthCode","basisOfStrengthSubstanceId","numeratorValue","numeratorUomCode","denominatorStrengthValue","denominatorStrengthUomCode","newPacks","findQuantity","unitOfMeasureCode","legalCategoryCode","subPackInformation","rule","validationResult","findAllErrors","item1","item2","typeOfItem1","isEqual","newDataKeys","currentID","currentSubmissionType","currentSubmissionID","currentStatus","newInternalState","step1","newValue","retrievedData","step2","getProductLookups","getPackLookups","getLookup","step3","processData","nhsConverter","step4","hasNoSavedIngredients","runFuncs","newSettings","toggleSaveIngredientButton","relatedFieldNames","toggleSavePackButton","relatedProductChanged","inComingValues","discontinueProductChanged","discontinuePackChanged","relatedProductChangedForUpdatePack","newPackObj","relatedPackChanged","massPriceUpdateChanged","noOfUpdatedPrice","newHeaderTitle","count","newSections","onExternalClick","callBack","element","newSaved","savedPack","objInner","innerPack","key2","elem2","savedElem","About","ErrorPages","LoggedOut","MobileMenu","CardsForListing","filteredSubmissions","clientTop","currentPage","List","statusArray","setStatusArray","typeArray","setTypeArray","searchValue","setSearchValue","allSubmissions","setAllSubmissions","setFilteredSubmissions","setCurrentPage","setClientTop","isLoadMore","setIsLoadMore","innerSearchParams","headerTitle","greyTitle","join","newList","pageYOffset","padding","App","zIndex","bottom","right","opacity","exact","render","routeProps","ReactDOM","AppInsightsContext","serviceWorker","ready","registration","unregister"],"mappings":"iHAAAA,EAAOC,QAAU,IAA0B,kC,oBCA3CD,EAAOC,QAAU,IAA0B,qC,oBCA3C,IAAIC,EAAM,CACT,cAAe,IACf,mBAAoB,IACpB,gBAAiB,IACjB,gBAAiB,IACjB,sBAAuB,IACvB,uBAAwB,IACxB,kBAAmB,IACnB,mBAAoB,IACpB,kBAAmB,GACnB,uBAAwB,IACxB,sBAAuB,IACvB,eAAgB,IAChB,aAAc,IACd,aAAc,IACd,uBAAwB,IACxB,cAAe,IACf,yBAA0B,IAC1B,0BAA2B,IAC3B,gBAAiB,IACjB,aAAc,IACd,qBAAsB,IACtB,8BAA+B,IAC/B,qBAAsB,IACtB,gBAAiB,IACjB,iBAAkB,IAClB,gBAAiB,IACjB,aAAc,IACd,aAAc,IACd,yBAA0B,IAC1B,gBAAiB,IACjB,aAAc,KAIf,SAASC,EAAeC,GACvB,IAAIC,EAAKC,EAAsBF,GAC/B,OAAOG,EAAoBF,GAE5B,SAASC,EAAsBF,GAC9B,IAAIG,EAAoBC,EAAEN,EAAKE,GAAM,CACpC,IAAIK,EAAI,IAAIC,MAAM,uBAAyBN,EAAM,KAEjD,MADAK,EAAEE,KAAO,mBACHF,EAEP,OAAOP,EAAIE,GAEZD,EAAeS,KAAO,WACrB,OAAOC,OAAOD,KAAKV,IAEpBC,EAAeW,QAAUR,EACzBN,EAAOC,QAAUE,EACjBA,EAAeE,GAAK,K,oBCpDpBL,EAAOC,QAAU,IAA0B,uC,oBCA3CD,EAAOC,QAAU,IAA0B,kC,oBCA3CD,EAAOC,QAAU,IAA0B,qC,oBCA3CD,EAAOC,QAAU,IAA0B,4C,kBCA3CD,EAAOC,QAAU,8mZ,oBCAjBD,EAAOC,QAAU,IAA0B,wC,oBCA3CD,EAAOC,QAAU,IAA0B,4C,oBCA3CD,EAAOC,QAAU,IAA0B,2C,oBCA3CD,EAAOC,QAAU,IAA0B,0C,oBCA3CD,EAAOC,QAAU,IAA0B,mD,oBCA3CD,EAAOC,QAAU,IAA0B,sC,oBCA3CD,EAAOC,QAAU,IAA0B,kC,oBCA3CD,EAAOC,QAAU,IAA0B,qC,mLCA3CD,EAAOC,QAAU,IAA0B,mC,oBCA3CD,EAAOC,QAAU,IAA0B,wC,oBCA3CD,EAAOC,QAAU,IAA0B,qC,oBCA3CD,EAAOC,QAAU,IAA0B,oC,oBCA3CD,EAAOC,QAAU,IAA0B,kC,oBCA3CD,EAAOC,QAAU,IAA0B,kC,oBCA3CD,EAAOC,QAAU,IAA0B,4C,oBCA3CD,EAAOC,QAAU,IAA0B,mC,oBCA3CD,EAAOC,QAAU,IAA0B,8C,oBCA3CD,EAAOC,QAAU,IAA0B,+C,oBCA3CD,EAAOC,QAAU,IAA0B,0C,oBCA3CD,EAAOC,QAAU,IAA0B,qC,oBCA3CD,EAAOC,QAAU,IAA0B,qC,oBCA3CD,EAAOC,QAAU,IAA0B,kC,oBCA3CD,EAAOC,QAAU,IAA0B,8C,gfCYvBc,QACW,cAA7BC,OAAOC,SAASC,UAEe,UAA7BF,OAAOC,SAASC,UAEhBF,OAAOC,SAASC,SAASC,MACvB,2D,2DCdOC,EAAgBC,0BAuWdC,EAtWK,SAACC,GAEjB,IAsBMC,EAAUC,cAxBW,EAyBKC,mBAAS,MAzBd,mBAyBpBC,EAzBoB,KAyBVC,EAzBU,OA0BOF,oBAAS,GA1BhB,mBA0BpBG,EA1BoB,KA0BTC,EA1BS,OA2BaJ,mBAAS,CAC7CrB,GAAI,KACJ0B,eAAgB,KAChBC,YAAa,KACbC,OAAQ,KACRC,aAAc,KACdC,cAAe,OAjCQ,mBA2BpBC,EA3BoB,KA2BNC,EA3BM,OAmCmBX,mBAAS,CACnDY,SAAU,SACVC,QAAS,SArCc,mBAmCpBC,EAnCoB,KAmCHC,EAnCG,OAuCyBf,mBAAS,KAvClC,mBAuCpBgB,EAvCoB,KAuCAC,EAvCA,OAwCWjB,qBAxCX,mBAwCpBkB,EAxCoB,KAwCPC,EAxCO,KA0HrBC,EAAiB,SAACC,GACpB,IAAIC,SAAoBD,EAExB,MAAmB,WAAfC,EACO,SACe,WAAfA,EACA,SACe,YAAfA,EACA,UACe,aAAfA,EACA,WACe,WAAfA,EACHC,MAAMC,QAAQH,GACP,QAEA,SAGJ,aAsEfI,2BAAgB,WACZrB,GAAa,KACd,CAACH,IAMJ,IAAMyB,EAA4BC,sBAC9BC,IAAEC,SAAF,uCAAW,WAAOC,GAAP,SAAAC,EAAA,sDACP3B,GAAa,GADN,2CAAX,sDAEG,KACH,IA9NuB,EA4P2BJ,oBAAS,GA5PpC,mBA4PpBgC,EA5PoB,KA4PCC,EA5PD,OA6PiBjC,oBAAS,GA7P1B,mBA6PpBkC,EA7PoB,KA6PJC,EA7PI,OA8PmBnC,oBAAS,GA9P5B,mBA8PpBoC,EA9PoB,KA8PHC,EA9PG,KA6QrBC,EAA4BX,sBAC9BC,IAAEC,SAAF,sBAAW,sBAAAE,EAAA,sDACPZ,IADO,2CAER,KACH,IAsCJ,OA/BAM,2BAAgB,WAKZF,MAAMgB,UAAUC,WACZjB,MAAMgB,UAAUC,YAChB,SAAUC,GACN,IAAKA,EACD,OAAO,EAEX,GAAIC,KAAKC,SAAWF,EAAME,OACtB,OAAO,EAGX,IAAK,IAAIC,EAAI,EAAGC,EAAIH,KAAKC,OAAQC,EAAIC,EAAGD,IACpC,GAAIF,KAAKE,aAAcrB,OAASkB,EAAMG,aAAcrB,OAChD,IAAKmB,KAAKE,GAAGE,OAAOL,EAAMG,IACtB,OAAO,OAER,GAAIF,KAAKE,KAAOH,EAAMG,GACzB,OAAO,EAGf,OAAO,KAEhB,IAMC,kBAAClD,EAAcqD,SAAf,CACIC,MAAO,CAEHC,UAzTM,CACdC,IAAK,CAAEC,IAAK,QAASC,GAAI,QAASC,QAAS,SAC3CC,IAAK,CACDH,IAAK,wBACLC,GAAI,wBACJC,QAAS,2BAEbE,IAAK,CAAEJ,IAAK,aAAcC,GAAI,aAAcC,QAAS,gBACrDG,IAAK,CAAEL,IAAK,YAAaC,GAAI,YAAaC,QAAS,aACnDI,IAAK,CAAEN,IAAK,WAAYC,GAAI,WAAYC,QAAS,YACjDK,IAAK,CAAEP,IAAK,YAAaC,GAAI,YAAaC,QAAS,aACnDM,OAAQ,CACJR,IAAK,oBACLC,GAAI,oBACJC,QAAS,sBAEbO,OAAQ,CACJT,IAAK,sBACLC,GAAI,sBACJC,QAAS,yBAuSLpD,WACAC,cACAQ,eACAC,kBACAG,kBACAC,qBACAC,qBACAC,wBACAd,YACAC,eACAsB,4BAEAM,sBACAC,yBACAC,iBACAC,oBACAC,kBACAC,qBACAnB,cACAC,iBACA0C,mBA3Ee,SAAC/B,GACxBX,EAAe,CACX2C,KAAMhC,EAAIgC,KACVvD,OAAQuB,EAAIvB,SAEhB+B,KAuEQyB,wBAvSmB,EA0SnB3C,iBACA4C,aAhMS,SAAChB,GAClB,OAAQiB,OAAOjB,GAAS,KAAKkB,QAAQ,IAgM7BC,SAzLK,WACI,aAAblE,GACAH,EAAQsE,KAAK,MAwLTC,iBAvSa,WACrB1D,EAAgB,CACZhC,GAAI,KACJ0B,eAAgB,KAChBC,YAAa,KACbC,OAAQ,KACRC,aAAc,KACdC,cAAe,QAiSX6D,aAvRS,SAACR,GAClB,GAAKA,EAUL,OAPAA,EAAOA,EAAKS,QAEPC,QAAQ,QAAQ,SAAUC,GACvB,OAAOA,EAAIC,OAAO,GAAGC,cAAgBF,EAAIG,OAAO,MAEnDJ,QAAQ,MAAO,KA+QZK,UA3QM,SAACf,GACf,GAAKA,EAML,OAHAA,EAAOA,EAAKS,QACOC,QAAQ,WAAY,OAAOD,QAuQtCO,oBAnQgB,SAAChB,GACzB,GAAKA,EASL,OANAA,EAAOA,EAAKS,QAEOC,QAAQ,UAAU,SAAUC,GAC3C,OAAOA,EAAIC,OAAO,GAAGC,cAAgBF,EAAIG,OAAO,GAAGG,kBA6P/CC,iBAjPa,SAACvC,GACtB,GAAKA,GAA0B,IAAjBA,EAAME,OAMpB,OAHcF,EAAMjE,KAAI,SAACyG,EAAMrC,GAC3B,OAAO,0BAAMsC,IAAKtC,GAAX,UAAiBqC,OA6OpBE,wBAnLoB,SAAC1C,EAAOwC,GACpC,IAAMG,EAAQ3C,EAAM4C,QAAQJ,GAI5B,OAHIG,GAAS,GACT3C,EAAM6C,OAAOF,EAAO,GAEjB3C,GA+KC8C,WAtKO,SAAClE,GAChB,IAAKA,EACD,OAAO,EAEX,IAAImE,EAAOpE,EAAeC,GAE1B,MAAa,WAATmE,GAA8B,YAATA,IAEL,WAATA,GAA8B,UAATA,EACxBnE,EAAKsB,OAAS,EAKF,WAAT6C,EACIrG,OAAOD,KAAKmC,GACdsB,OAAS,OAFf,IAyJC8C,qBAzHiB,SAACC,GAC1B,IAAIC,EAAUD,EAAKE,UAAU,EAAG,IAAIC,MAAM,KAgB1C,OAAOF,EAAQ,GAAK,IAfP,CACT,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAG6BA,EAAQ,GAAK,GAAK,IAAMA,EAAQ,MA2G5D9F,EAAMiG,W,OCnWNC,EAAgBpG,0BAqHdqG,EApHK,SAACnG,GAUjB,IAAMoG,EAAa,WACf,OAAO3G,OAAO4G,YAAcC,SAASC,gBAAgBC,aAEnDC,EAAa,WACf,OAAOhH,OAAOiH,aAAeJ,SAASC,gBAAgBI,cAgBtDC,EAAU,UACVC,GAAiB,EAGVpH,OAAOqH,KAASrH,OAAOqH,IAAIC,QAC5BtH,OAAOuH,OACTC,UAAUC,UAAU1B,QAAQ,UAAY,EAExCoB,EAAU,QACuB,qBAAnBO,eACdP,EAAU,UAEV,eAAeQ,KAAK3H,OAAO4H,cAEC,wCAEvB5H,OAAM,QACgB,qBAAX6H,QACJ7H,OAAO6H,OAAOC,kBAJbC,WAObZ,EAAU,SACqBN,SAASmB,aAClChI,OAAOiI,YACTd,EAAU,KACVC,GAAiB,IAEjBD,EAAU,UACVC,GAAiB,GAGnBpH,OAAOkI,SACNlI,OAAOkI,OAAOC,UAAcnI,OAAOkI,OAAOE,WAGzCjB,GADwC,IAAxCK,UAAUC,UAAU1B,QAAQ,OAClB,OAEA,UAnEK,MA6EPrF,mBAAS,CACzB2H,KAAM1B,IACN2B,KAAMtB,IACNuB,YA9DIf,UAAUC,UAAUtH,MAAM,aAC1BqH,UAAUC,UAAUtH,MAAM,WAC1BqH,UAAUC,UAAUtH,MAAM,YAC1BqH,UAAUC,UAAUtH,MAAM,UAC1BqH,UAAUC,UAAUtH,MAAM,gBAC1BqH,UAAUC,UAAUtH,MAAM,mBAC1BqH,UAAUC,UAAUtH,MAAM,gBAC1BqH,UAAUC,UAAUtH,MAAM,cAwD9BgH,QAASA,EACTqB,eAAgBpB,IAlFO,mBA6EpBqB,EA7EoB,KA6EhBC,EA7EgB,KA6G3B,OApBAvG,2BAAgB,WACZ,IAAMwG,EAAgBrG,IAAEC,UAAS,WAC7BqG,MACD,KAEGA,EAAoB,WACtBF,GAAM,SAACG,GAAD,mBAAC,eACAA,GADD,IAEFR,KAAM1B,IACN2B,KAAMtB,UAIdhH,OAAO8I,iBAAiB,SAAUH,KACnC,IAOC,kBAAClC,EAAchD,SAAf,CAAwBC,MAAO,CAAE+E,OAC5BlI,EAAMiG,W,kBCjHNuC,G,OAAQ,uCAAG,WAAOxI,GAAP,mDAAAkC,EAAA,sDAEhBuG,EAOAzI,EAPAyI,aACAlI,EAMAP,EANAO,aACAmI,EAKA1I,EALA0I,SACAzI,EAIAD,EAJAC,QACA0I,EAGA3I,EAHA2I,MACAC,EAEA5I,EAFA4I,sCAPgB,EAShB5I,EADAkE,4BARgB,SAWhB2E,EAAS,KACTC,EAAU,KACVC,EAAU,KACVC,EAAY,MACZC,EAAa,CACbC,cAAe,UAAYP,EAC3B,eAAgB,oBAEhBQ,GAAiB,EAEjB5I,GACAA,GAAa,GAtBG,KA4BZkI,EA5BY,OA6BX,wBA7BW,QAiCX,oBAjCW,QAuCX,6BAvCW,QA2CX,YA3CW,QAiDX,qBAjDW,QAqDX,YArDW,QA2DX,qBA3DW,QA+DX,aA/DW,QAsEX,sBAtEW,QA6EX,wBA7EW,QAkFX,sBAlFW,QA0FX,sBA1FW,QAsGX,wBAtGW,QA0GX,oBA1GW,QAkHX,oBAlHW,QA0HX,wBA1HW,QA8HX,eA9HW,QA0IX,oBA1IW,QAgJX,uBAhJW,QAsJX,iBAtJW,QA4JX,iCA5JW,QAkKX,yBAlKW,QAwKX,qBAxKW,QA8KX,aA9KW,QAoLX,cApLW,QA0LX,sBA1LW,gCA8BZI,EAAS,uCA9BG,oCAkCZA,EAAM,UACFO,kBADE,+BAEiBV,EAASvF,MAAM+B,eApC1B,oCAwCZ2D,EAAM,UAAMO,kBAAN,uBAAmDV,EAASvF,OAxCtD,oCA4CZ0F,EAAM,UACFO,kBADE,oCAEsBV,EAASvF,MAAM+B,eA9C/B,oCAkDZ2D,EAAM,UAAMO,kBAAN,4BAAwDV,EAASvF,OAlD3D,oCAsDZ0F,EAAM,UACFO,kBADE,4BAEcV,EAASvF,MAAM+B,cAF7B,sBAEwDwD,EAASW,WAxD3D,oCA4DZR,EAAM,UAAMO,kBAAN,oBAAgDV,EAASvF,OA5DnD,oCAgEZ0F,EAAM,UACFO,kBADE,4BAGcV,EAASW,UAHvB,4BAGoDX,EAASY,OAnEvD,oCAuEZT,EAAM,UACFO,kBADE,iBAGGV,EAASvF,OA1EN,oCA8EZ0F,EAAM,UAAMO,kBAAN,kCAA8DV,EAASW,UAAvE,iBA9EM,oCAmFZR,EAAM,UAAMO,kBAAN,eACNJ,EAAY,OACZF,EAAO,eACAJ,GAtFK,oCA2FZG,EAAM,UAAMO,kBAAN,eACNJ,EAAY,MACZC,EAAa,CACTC,cAAe,UAAYP,EAC3B,eAAgB,+BAEpBG,EAAO,eACAJ,GAlGK,oCAuGZG,EAAM,UAAMO,kBAAN,SAvGM,oCA2GZG,QAAQC,KAAK,kBAAmBd,GAE5BG,EADAH,EAASe,aACH,UAAML,kBAAN,2BAAuDV,EAASe,aAAhE,gBAAoFf,EAASW,WAE7F,UAAMD,kBAAN,uBAAmDV,EAASgB,GAA5D,gBAAsEhB,EAASW,WA/G7E,oCAmHZE,QAAQC,KAAK,qBAAsBd,GAE/BG,EADAH,EAASe,aACH,UAAML,kBAAN,kCAA8DV,EAASe,aAAvE,gBAA2Ff,EAASW,WAEpG,UAAMD,kBAAN,uBAAmDV,EAASgB,GAA5D,uBAA6EhB,EAASW,WAvHpF,oCA2HZR,EAAM,UAAMO,kBAAN,6BAAyDV,EAASW,UAAlE,mBA3HM,oCA+HZR,EAAM,UAAMO,kBAAN,SACNJ,EAAY,OACZC,EAAa,CACTC,cAAe,UAAYP,GAE/BQ,GAAiB,GACXQ,EAAW,IAAIC,UACZC,OAAO,QAASnB,EAASoB,WAClChB,EAAUa,EAvIE,oCA2IZd,EAAM,UACFO,kBADE,qBA3IM,oCAiJZP,EAAM,UACFO,kBADE,oBAjJM,oCAuJZP,EAAM,UACFO,kBADE,mBAvJM,oCA6JZP,EAAM,UACFO,kBADE,qBA7JM,oCAmKZP,EAAM,UACFO,kBADE,oBAnKM,oCAyKZP,EAAM,UACFO,kBADE,oBAzKM,oCA+KZP,EAAM,UACFO,kBADE,qBA/KM,oCAqLZP,EAAM,UACFO,kBADE,qBArLM,oCA2LZP,EAAM,UACFO,kBADE,mBA3LM,6BAiMZP,EAAS,GAjMG,eAyMhBkB,EADAZ,EACUL,EAEAkB,KAAKC,UAAL,UAAenB,SAAf,QAA0B,IAWxCC,EAAUmB,MAAMrB,EAAD,aAEXsB,OAAQnB,EACRoB,QAASnB,IACU,SAAdD,GAAsC,QAAdA,IAAwB,CACjDqB,KAAMN,KA3NM,UAmOdhB,EACDuB,MAAK,SAACC,GACH,GAAKA,EAASC,GAGV,OAAOD,EAASE,OAFhB,MAAMF,KAUbD,MAAK,SAAC9I,GAAU,IAAD,GACPA,EAAK1C,KAAM,UAAA0C,EAAKd,cAAL,eAAaoC,QAAS,IAClC4H,EAAe,cACfC,EAAcnJ,GAElBoJ,EAAapJ,KAOhBqJ,OAAM,SAACN,GACJK,OAAaE,EACbJ,EAAeH,EAAS7J,OACxBiK,EAAcJ,KA/PF,YA+QhB3B,IAAyC+B,EA/QzB,0CAgRTA,GAhRS,YAiRT/B,GAA0C+B,EAjRjC,0CAkRTC,GAlRS,YAmRTF,EAnRS,wBAoRZnK,GACAA,GAAa,GAEjBN,EAAQsE,KAAK,CAAEwG,SAAU,UAAYL,IAvRrB,uBAwRTI,GAxRS,iCAgSTF,GAhSS,4CAAH,uDCCRI,G,OAAa,SAAChL,GAAW,IAC1BiL,EAAajL,EAAbiL,SAER,OACI,yBACIC,UAAW,cAAgBD,EAC3BE,QAAQ,MACRrM,GAAG,UACHsM,MAAM,6BACNC,MAAM,+BACNC,EAAE,MACFC,EAAE,MACFC,QAAQ,cACRC,MAAM,YAEN,0BAAMC,EAAE,8eCbPC,G,OAAY,SAAC3L,GAAU,IAIxBM,EAAcsL,qBAAW/L,GAAzBS,UACAuL,EAA8B7L,EAA9B6L,aAAcC,EAAgB9L,EAAhB8L,YAMtB,OAAoB,IAAhBA,IAAwC,IAAhBA,EAEpB,yBAAKZ,UAAW,gBAAmBY,EAAwB,GAAV,UAC7C,kBAAC,EAAD,CAAYb,SAAS,cACrB,yBAAKc,IAAKC,EAAQ,KAAoBC,IAAI,KAF9C,4CAQA,yBAAKf,UAAW,iBAAmB5K,GAAauL,EAAe,QAAU,KACrE,kBAAC,EAAD,CAAYZ,SAAS,cACrB,yBAAKc,IAAKC,EAAQ,KAAoBC,IAAI,KAF9C,8C,SClBCC,EAAcpM,wBAAc,IAqW1BqM,EAnWU,SAAC,GAAkB,IAAhBlG,EAAe,EAAfA,SAAe,EACgB2F,qBAAW/L,GAA1DqB,EAD+B,EAC/BA,mBAAoBgD,EADW,EACXA,uBACtBkI,EAAa,CACfC,UAAWjD,mBACXkD,UAAWlD,gBACXmD,aAAcnD,mBACdoD,cAAe,OACfC,MAAO,wCAEPC,sBAAsB,EACtBC,qBAAsB,IACtBC,oBAAqBxD,mBAQrByD,4BAA4B,EAE5BC,SAAU,CACNC,OAAQ3D,mBACR4D,SAAU5D,yDACV6D,uBAAwB7D,qCACxB8D,eAAgB9D,iCAChB+D,kBAAmB/D,oCACnBgE,qBAAsBhE,sCACtBiE,qBAAsBjE,wCACtBkE,oBAAqBlE,sCACrBmE,uBAAwBnE,wCAI5BnJ,EAAUC,cACRsN,EAAU,IAAIC,IAnCmB,EAoCTtN,qBApCS,mBAoChCuN,EApCgC,KAoCvBC,EApCuB,OAsCHxN,oBAAS,GAtCN,mBAsChCyN,EAtCgC,KAsCpBC,EAtCoB,OAuCf1N,qBAvCe,mBAuChC2N,EAvCgC,KAuC1BC,EAvC0B,OAwCL5N,qBAxCK,mBAwChC6N,EAxCgC,KAwCrBC,EAxCqB,KAyCjCvO,EAAWwO,cAKjBtM,2BAAgB,WACZuM,MACD,IAEH,IAAMA,EAAsB,WACxBC,IACA,IAAMC,EAAa,IAAIC,IAAKC,YAAYnC,GACxCuB,EAAWU,IAGTD,EAA6B,WAAO,IAAD,IAChC1O,EAAS8O,QAMT,UAAI9O,EAAS8O,cAAb,aAAI,EAAiBC,SAASrF,qBAC/BsF,KAEK,UAAChP,EAAS8O,cAAV,aAAC,EAAiBC,SAAS,UAChCE,IATeC,KAEXD,KAWNC,EAAoB,kBAAMpB,EAAQqB,IAtCR,sBAuC1BH,EAAoB,kBAAMlB,EAAQsB,IAvCR,oBAuCqC,KAAM,CAAEC,QAAS,KAEhFJ,EAAqB,WACvBvC,EAAWE,UAAYlD,wBACvBgD,EAAWG,aAAenD,2BAC1BgD,EAAWQ,oBAAsBxD,4BAMrCxH,2BAAgB,WACP8L,IAI6B,cAA9BzN,EAAQP,SAASqL,SACjBiE,IAEAtB,EAAQuB,UAAU3E,MAAK,SAACwD,GACpBoB,EAAWpB,MAInBJ,EAAQyB,OAAOC,qBAAoB,SAAClQ,GAChCmQ,MAAM,qBAAsBnQ,EAAEoQ,SAC9BC,OAGJ7B,EAAQyB,OAAOK,uBAAsB,WACjCC,UAEL,CAAC/B,IAKJ,IAAMwB,EAAU,uCAAG,WAAOpB,GAAP,6BAAA5L,EAAA,yDACR4L,EADQ,uBAEXD,GAAc,GAFH,6BAKX3J,GACAqF,QAAQmG,KAAK5B,GAEjBC,EAAQD,GAEJ6B,EAAc7B,EAAK8B,aACnBC,EAAS/B,EAAKgC,QAAQC,QACtBC,EAAWlC,EAAKgC,QAAQG,UACxBC,EAAYpC,EAAKgC,QAAQK,MAEtBR,GAAkBE,GAAaG,EAfvB,wBAgBX/P,EAAQsE,KAAK,wBACbsJ,GAAc,GAjBH,4CAsBSrF,EAAS,CAC7BtE,uBAAwBA,EACxB0E,uCAAuC,EACvC3I,QAASA,EACTwI,aAAc,sBACdE,MAAOgH,EACPjH,SAAU,CACNmH,OAAQA,KA7BD,YAkCQ,KAZnBO,EAtBW,QAkCC5F,IACe,oBAAxB4F,EAAYd,SAC8B,IAA1Cc,EAAYC,mBAAmBvN,OApCvB,wBAsCX7C,EAAQsE,KAAK,wBACbsJ,GAAc,GAvCH,4BA6CXyC,EAASC,EAAcV,IAMvBW,EAAkBF,EAAOE,iBAHzBA,EAAkBJ,EAAcA,EAAYC,mBAAmB,GAAK,GACpEI,EAAcZ,EAAQW,IAM1BvC,EAAa,CACT4B,OAAQA,EACRG,SAAUA,EACVE,UAAWA,EACXG,mBAAoBD,EAAcA,EAAYC,mBAAqB,GACnEG,gBAAiBA,EACjBE,iBAAkB,GAClBC,oBAAqB,GACrBC,iBAAkBC,GAAqC,QAAf,EAAAL,SAAA,eAAiBJ,cAAe,MACxET,YAAaA,IAEjB9B,GAAc,GAlEC,4CAAH,sDAwEV4C,EAAgB,SAACZ,EAAQW,GAC3B,IAAIM,EAAY,CACZjB,OAAQA,EACRW,gBAAiBA,GAErBhD,EAAQsB,IAAI,YAAagC,EAAW,CAAEC,KAAM,IAAKhC,QAAS,KAExDwB,EAAgB,SAACV,GACnB,IAAImB,EAAYxD,EAAQqB,IAAI,aAC5B,OAAKmC,GAAaA,EAAUnB,SAAWA,EAI5BmB,GAHPxD,EAAQyD,OAAO,cACR,IAKTC,EAAmB,WACrB1D,EAAQyD,OAAO,cAoBbJ,EAAwB,SAACM,GAC3B,IAGIC,GAAgB,EAEpB,OAAKD,GAA8E,IAA3CA,EAAgCrO,QAIxEqO,EAAgCE,SAAQ,SAACjM,GAT1B,kBAUPA,EAAKkM,MAAmBF,EAAe,IACvCA,EAAe,GAVR,oBAYPhM,EAAKkM,MAAmBF,EAAe,IACvCA,EAAe,GAZR,oBAcPhM,EAAKkM,MAAmBF,EAAe,IACvCA,EAAe,MAIhBA,GAfIA,GAiCTpC,EAAyB,WAC3BtB,EACKsB,yBACA1E,MAAK,SAACwD,GACCA,IACAoB,EAAWpB,GACX7N,EAAQ0E,QAAQ,SAGvBkG,OAAM,SAAC0G,GACJtR,EAAQsE,KAAK,mCAAqCgN,GAClD1D,GAAc,OAIpB0B,EAAS,WACX1B,GAAc,GACdH,EAAQ8D,kBACR9D,EAAQ+D,kBACR/D,EAAQgE,0BAA0BpH,MAAK,WACnCqH,aAAaC,QACbC,eAAeD,QACfV,IACAjR,EAAQsE,KAAK,kBAIfmN,EAA0B,WAC5B7D,GAAc,GACdH,EAAQgE,0BAA0BpH,MAAK,WACnCqH,aAAaC,QACbC,eAAeD,QACflE,EAAQ+D,kBACRP,IACAjR,EAAQsE,KAAK,kBAIfkL,EAAe,WACbvL,GACAqF,QAAQmG,KAAK,mBAEjBgC,KAmCJ,OACI,kBAACxF,EAAYhJ,SAAb,CACIC,MAAO,CACH2O,gBA5FY,WACpB,SAAKhE,IAASE,IA4FNF,OACAE,YACA+D,MAvFE,WACVrE,EAAQsE,kBAuFAzC,SACA0C,aAxCS,WACb/N,GACAqF,QAAQmG,KAAK,iBAEjBhC,EACKuE,eACA3H,MAAK,SAACwD,GACC5J,GACAqF,QAAQmG,KAAK,mBAAoB5B,MAGxCjD,OAAM,SAAC0G,GACArN,GACAqF,QAAQmG,KAAK,sBAAuB6B,OA4BxCW,qBAvBiB,WACrBhO,GACAqF,QAAQmG,KAAK,yBAGjBhC,EAAQwE,sBAAqB,WAAe,IAAD,uBAAVlS,EAAU,yBAAVA,EAAU,gBACvCuJ,QAAQmG,KAAK1P,OAkBTgP,yBACA0C,0BACAS,sBA/IkB,SAACC,GAC3B,IAAIC,EAAarE,EAAUqC,mBAAmB+B,GAC9C3B,EAAczC,EAAU6B,OAAQwC,GAChCpE,GAAa,SAACqE,GAAD,mBAAC,eACPA,GADM,IAET9B,gBAAiB6B,EACjBzB,iBAAkBC,EAAsBwB,EAAWjC,aAAe,WAEtElP,EAAmB,CAAEH,SAAU,UAAWC,QAAS,YA0I9C4M,EAAa,kBAAC,EAAD,CAAW/B,cAAY,IAAM5F,I,mCClW1CsM,EAAc,IAAIC,IAEzBC,EAAiBC,YAAqB,CAAEC,SAAU,KAClDC,EAAkB,OAAGxJ,oDAA6C,GAEpD,IAAIyJ,IAAoB,CAC1CC,OAAQ,CACNF,qBACAG,WAAY,CAACR,GACbS,gBAAgB,eACbT,EAAYU,WAAa,CAAEhT,QAASwS,OAK/BS,kBAEZ,IAeeC,EAfG,SAAC,GAAkB,IAAhBlN,EAAe,EAAfA,SACbvG,EAAWwO,cAWjB,OAVAkF,aAAgB,WACd,IACMC,EADe,IAAIC,gBAAgB5T,EAAS8O,QACvBK,IAAI,UAC/B0D,EAAYgB,cAAc,CACxBC,IAAK9T,EAASqL,SACd0I,KAAM,cACNC,WAAY,CAAEL,aAEf,CAAC3T,IAEGuG,G,SC/BI0N,EAAe,SAAC,GAA4B,IAA1BC,EAAyB,EAAzBA,UAAcC,EAAW,+BACjBjI,qBAAWM,GAAtC4F,EAD4C,EAC5CA,gBAAiBC,EAD2B,EAC3BA,MAEzB,OAAID,KAAuB8B,EAChB,kBAAC,IAAD,iBAAWC,EAAX,CAAiBD,UAAWA,MAEnC7B,IAGG,OCPE+B,EAAY,SAAC9T,GACtB,IAAIN,EAAWQ,cAAaR,SAASqL,SADL,EAQ5Ba,qBAAWM,GALX8C,EAH4B,EAG5BA,uBACA+C,EAJ4B,EAI5BA,MACAxC,EAL4B,EAK5BA,OACAmC,EAN4B,EAM5BA,wBACAQ,EAP4B,EAO5BA,qBAEI3R,EAAiBqL,qBAAW/L,GAA5BU,aA4BR,OA1BAqB,2BAAgB,WACZrB,GAAa,KACd,IAEHqB,2BAAgB,WACZ,OAAQlC,GACJ,IAAK,YACDsP,IACA,MACJ,IAAK,SACD+C,IACA,MACJ,IAAK,UACDxC,IACA,MACJ,IAAK,oBACDmC,IACA,MACJ,IAAK,eACDQ,OAKT,IAEI,MCxCE6B,EAAY,SAAC/T,GACtB,OACI,yBAAKkL,UAAU,mCACX,yBAAKA,UAAU,yBACV,IADL,aAGI,6BAHJ,aAIe,KAEf,yBAAKA,UAAU,wBACf,yBAAKA,UAAU,wBACX,kBAAC,IAAD,CAAM8I,GAAG,mBAAT,eACA,kBAAC,IAAD,CAAMA,GAAG,gBAAT,YACA,kBAAC,IAAD,CAAMA,GAAG,sBAAT,kBACA,kBAAC,IAAD,CAAMA,GAAG,mBAAT,eACA,kBAAC,IAAD,CAAMA,GAAG,wBAAT,wBChBHC,EAAW,SAACjU,GAAW,IACxBiE,EAA4BjE,EAA5BiE,KAAMiQ,EAAsBlU,EAAtBkU,QAASC,EAAanU,EAAbmU,SAEvB,OACI,2BAAOjJ,UAAU,kCACZjH,EACD,2BACI0B,KAAK,WACLuO,QAASA,IAAoB,EAC7BC,SAAU,WACNA,OAIR,0BAAMjJ,UAAU,qCCZfkJ,G,OAAS,SAACpU,GAAW,IAE1BqU,EAMArU,EANAqU,WACApQ,EAKAjE,EALAiE,KACAqQ,EAIAtU,EAJAsU,QACAC,EAGAvU,EAHAuU,gBACAC,EAEAxU,EAFAwU,SACAC,EACAzU,EADAyU,SAPyB,EASOtU,oBAAS,GAThB,mBAStBuU,EATsB,KASVC,EATU,KAuBvBC,EAAgB9S,sBAClBC,IAAEC,SAAF,sBAAW,sBAAAE,EAAA,sDACPyS,GAAc,GADP,2CAER,KACH,IAMJ,MAAiB,SAAbF,EACO,KAIP,4BACIvJ,UACI,UACCmJ,EAAa,IAAMA,EAAa,KAChCK,EAAa,YAAc,IAEhCG,YAAa,WA3BjBP,IACIE,IACAG,GAAc,GACdC,MA2BAE,MAAOP,EACPQ,cAAY,cAEX9Q,KC/CA+Q,EAAe,SAAChV,GAAW,IAAD,EACO4L,qBAAW/L,GAA7CuD,EAD2B,EAC3BA,UAAWlC,EADgB,EAChBA,mBADgB,EAEiBf,mBAAS,CACzD8U,MAAO,CAAExB,KAAMrQ,EAAUC,IAAIC,IAAK4Q,SAAS,GAC3CgB,sBAAuB,CAAEzB,KAAMrQ,EAAUK,IAAIH,IAAK4Q,SAAS,GAC3DiB,kBAAmB,CAAE1B,KAAMrQ,EAAUU,OAAOR,IAAK4Q,SAAS,GAC1DkB,WAAY,CAAE3B,KAAMrQ,EAAUM,IAAIJ,IAAK4Q,SAAS,GAChDmB,UAAW,CAAE5B,KAAMrQ,EAAUO,IAAIL,IAAK4Q,SAAS,GAC/CoB,SAAU,CAAE7B,KAAMrQ,EAAUQ,IAAIN,IAAK4Q,SAAS,GAC9CqB,oBAAqB,CAAE9B,KAAMrQ,EAAUW,OAAOT,IAAK4Q,SAAS,GAC5DsB,UAAW,CAAE/B,KAAMrQ,EAAUS,IAAIP,IAAK4Q,SAAS,KAVhB,mBAE5BuB,EAF4B,KAERC,EAFQ,OAYOvV,mBAAS,GAZhB,mBAY5BwV,EAZ4B,KAYbC,EAZa,KAa/B3V,EAAUC,cAUR2V,EAAe,SAACC,GAClB,IAAI5B,GAAU,EACV4B,IACA5B,GAAU,GAGd,IAAI6B,EAAW,GAEXN,IACAnW,OAAO0W,QAAQP,GAAoB9W,KAAI,YAAkB,IAAD,mBAAf0G,EAAe,KAAVD,EAAU,KAEpD,OADA2Q,EAAS1Q,GAAO,CAAEoO,KAAMrO,EAAKqO,KAAMS,QAASA,GACrC,QAGXwB,EAAsBK,KAc9BnU,2BAAgB,WACZ,IAAIqU,EAAmB,EACnBR,IACAnW,OAAO0W,QAAQP,GAAoB9W,KAAI,YAAkB,IAAD,wBAKpD,OALoD,KAC3CuV,SACL+B,IAGG,QAGXL,EAAiBK,MAEtB,CAACR,IA+BJ,OACI,yBAAKvK,UAAU,sCACX,yBAAKA,UAAU,yBAAf,gBAEI,6BACI,0BACIoJ,QAAS,WACLuB,GAAa,KAFrB,cAMQ,IAPZ,IAQM,IACF,0BACIvB,QAAS,WACLuB,GAAa,KAFrB,kBASR,yBAAK3K,UAAU,wBACf,yBAAKA,UAAU,wBACTuK,EAEInW,OAAO0W,QAAQP,GAAoB9W,KAAI,YAAkB,IAAD,mBAAf0G,EAAe,KAAVD,EAAU,KACpD,OACI,kBAAC,EAAD,CACIC,IAAKA,EACLpB,KAAMmB,EAAKqO,KACXS,QAAS9O,EAAK8O,QACdC,SAAU,WAtFhB,IAAC+B,IAuFyB7Q,EAtF9CqQ,GAAsB,SAACpD,GAAD,mBAAC,eAChBA,GADe,kBAEjB4D,EAAiB,CACdzC,KAAMgC,EAAmBS,GAAgBzC,KACzCS,SAAUuB,EAAmBS,GAAgBhC,oBA0EvC,KAcN,kBAAC,EAAD,CACIG,WACsB,IAAlBsB,EAAsB,iBAAmB,QAE7C1R,KAAK,OACLqQ,QAAS,YApEJ,WACjB,IAAIyB,EAAW,GAEXN,IACAnW,OAAO0W,QAAQP,GAAoB9W,KAAI,YAAkB,IAAD,mBAAVyG,GAAU,WAIpD,OAHIA,EAAK8O,SACL6B,EAASxR,KAAKa,EAAKqO,MAEhB,QAGXxT,EAAQsE,KAAK,CACTwG,SAAU,QACVyD,OACI,IAAM,IAAI8E,gBAAgB,CAAE5S,OAAQqV,IAAYvO,aAExDtG,EAAmB,CAAEH,SAAU,SAAUC,QAAS,UAqDtCmV,IAEJ5B,gBAAiB,CAAE6B,YAAa,QC/IvCC,EAAa,SAACrW,GAAW,IAC1BkB,EAAuB0K,qBAAW/L,GAAlCqB,mBADyB,EAEmBf,mBAAS,CACzDmW,WAAY,CAAE7C,KAAM,cAAeS,SAAS,GAC5CqC,QAAS,CAAE9C,KAAM,WAAYS,SAAS,GACtCsC,cAAe,CAAE/C,KAAM,iBAAkBS,SAAS,GAClDuC,WAAY,CAAEhD,KAAM,cAAeS,SAAS,GAC5CwC,gBAAiB,CAAEjD,KAAM,oBAAqBS,SAAS,KAP1B,mBAE1BuB,EAF0B,KAENC,EAFM,OASSvV,mBAAS,GATlB,mBAS1BwV,EAT0B,KASXC,EATW,KAU7B3V,EAAUC,cAUR2V,EAAe,SAACC,GAClB,IAAI5B,GAAU,EACV4B,IACA5B,GAAU,GAGd,IAAI6B,EAAW,GAEXN,IACAnW,OAAO0W,QAAQP,GAAoB9W,KAAI,YAAkB,IAAD,mBAAf0G,EAAe,KAAVD,EAAU,KAEpD,OADA2Q,EAAS1Q,GAAO,CAAEoO,KAAMrO,EAAKqO,KAAMS,QAASA,GACrC,QAGXwB,EAAsBK,KAc9BnU,2BAAgB,WACZ,IAAIqU,EAAmB,EACnBR,IACAnW,OAAO0W,QAAQP,GAAoB9W,KAAI,YAAkB,IAAD,wBAKpD,OALoD,KAC3CuV,SACL+B,IAGG,QAGXL,EAAiBK,MAEtB,CAACR,IA6BJ,OACI,yBAAKvK,UAAU,oCACX,yBAAKA,UAAU,yBAAf,cAEI,6BACI,0BACIoJ,QAAS,WACLuB,GAAa,KAFrB,cAMQ,IAPZ,IAQM,IACF,0BACIvB,QAAS,WACLuB,GAAa,KAFrB,kBASR,yBAAK3K,UAAU,wBACf,yBAAKA,UAAU,wBACTuK,EAEInW,OAAO0W,QAAQP,GAAoB9W,KAAI,YAAkB,IAAD,mBAAf0G,EAAe,KAAVD,EAAU,KACpD,OACI,kBAAC,EAAD,CACIC,IAAKA,EACLpB,KAAMmB,EAAKqO,KACXS,QAAS9O,EAAK8O,QACdC,SAAU,WApFhB,IAACwC,IAqFyBtR,EApF9CqQ,GAAsB,SAACpD,GAAD,mBAAC,eAChBA,GADe,kBAEjBqE,EAAkB,CACflD,KAAMgC,EAAmBkB,GAAiBlD,KAC1CS,SAAUuB,EAAmBkB,GAAiBzC,oBAwExC,KAcN,kBAAC,EAAD,CACIG,WAA8B,IAAlBsB,EAAsB,iBAAmB,QACrD1R,KAAK,OACLqQ,QAAS,YAhEN,WACf,IAAIyB,EAAW,GAEXN,IACAnW,OAAO0W,QAAQP,GAAoB9W,KAAI,YAAkB,IAAD,mBAAf0G,EAAe,KAIpD,OAJoD,KAC3C6O,SACL6B,EAASxR,KAAKc,GAEX,QAGXpF,EAAQsE,KAAK,CACTwG,SAAU,QACVyD,OAAQ,IAAM,IAAI8E,gBAAgB,CAAE3N,KAAMoQ,IAAYvO,aAE1DtG,EAAmB,CAAEH,SAAU,SAAUC,QAAS,UAkDtC4V,IAEJrC,gBAAiB,CAAE6B,YAAa,QC3IvCS,EAAc,SAAC7W,GAAW,IAC3BiE,EAA4BjE,EAA5BiE,KAAMiQ,EAAsBlU,EAAtBkU,QAASC,EAAanU,EAAbmU,SAEvB,OACI,2BAAOjJ,UAAU,kCACZjH,EACD,2BACI0B,KAAK,QACL8N,KAAK,QACLS,QAASA,IAAoB,EAC7BC,SAAU,WACNA,OAIR,0BAAMjJ,UAAU,qCCVf4L,EAAe,SAAC9W,GAAW,IAAD,IACU4L,qBAAWM,GAAhD8B,EAD2B,EAC3BA,UAAWmE,EADgB,EAChBA,sBADgB,EAEDhS,mBAC9B6N,EAAUqC,mBAAmB1R,KAAI,SAACyG,GAAU,IAAD,EACvC,OAAO,2BACAA,GADP,IAEI8O,SAAS,UAAAlG,EAAUwC,uBAAV,eAA2B1R,MAAOsG,EAAKtG,SANzB,mBAE5BiY,EAF4B,KAEjBC,EAFiB,OAUS7W,mBAAS6N,EAAUwC,iBAV5B,mBAU5B0F,EAV4B,KAUZe,EAVY,KAW/BhX,EAAUC,cAoCd,OAlBA0B,2BAAgB,WACZ,IAAIsV,EAAoB,EACpBH,IACAzX,OAAO0W,QAAQe,GAAWpY,KAAI,YAAkB,IAAD,mBAAf0G,EAAe,KAK3C,OAL2C,KAClC6O,UACLgD,EAAoB7R,GAGjB,QAGX4R,EAAkBC,MAEvB,CAACH,IAMA,yBAAK7L,UAAU,qCAAqC4J,MAAO,CAAEqC,WAAY,WAErE,yBAAKjM,UAAU,yBAAf,iBACA,yBAAKA,UAAU,wBAGf,yBAAKA,UAAU,uBAAuB4J,MAAO,CAAEsC,SAAU,MACrD,yBAAKlM,UAAU,wBAAf,oBACC8C,EAAUgC,SACX,yBAAK9E,UAAU,uBAAuBa,IAAKC,EAAQ,KAAiBC,IAAI,KAH5E,UAIK+B,EAAUwC,uBAJf,aAIK,EAA2BiD,KAC5B,yBAAKvI,UAAU,uBAAuBa,IAAKC,EAAQ,KAAoBC,IAAI,KAC3E,kBAAC,IAAD,CAAMf,UAAU,eAAe4J,MAAO,CAAEuC,MAAO,SAAWrD,GAAG,WAA7D,aAK6B,IAAhChG,EAAU4C,iBAA0B,KACjC,kBAAC,IAAM0G,SAAP,KACI,yBAAKpM,UAAU,wBACf,yBACIA,UAAU,uBACV4J,MAAO,CAAEsC,SAAU,IAAKG,aAAc,KAEtC,yBAAKrM,UAAU,wBAAf,gBACgC,IAA/B8C,EAAU4C,iBACL,gBAC+B,IAA/B5C,EAAU4C,iBACV,qCAC+B,IAA/B5C,EAAU4C,iBACV,gDACA,QAMhBmG,GAAaA,EAAUjU,OAAS,EAAI,KAClC,kBAAC,IAAMwU,SAAP,KACI,yBAAKpM,UAAU,wBACf,yBAAKA,UAAU,uBAAuB4J,MAAO,CAAEsC,SAAU,MACrD,yBAAKlM,UAAU,wBAAf,mBAEE6L,EAEIzX,OAAO0W,QAAQe,GAAWpY,KAAI,YAAkB,IAAD,mBAAf0G,EAAe,KAAVD,EAAU,KAC3C,OACI,kBAAC,EAAD,CACIoS,UAAU,QACVnS,IAAKA,EACLpB,KAAMmB,EAAKqO,KACXS,QAAS9O,EAAK8O,QACdC,SAAU,WApFxB,IAAC3D,IAqFiCnL,EApFtD2R,GAAa,SAAC1E,GAAD,yBAAC,eACPA,GADM,uBAER4D,EAAiB,CACdzC,KAAMsD,EAAUb,GAAgBzC,KAChCS,SAAS,IAJJ,cAMR1D,EAAkB,CACfiD,KAAMsD,EAAUvG,GAAiBiD,KACjCS,SAAS,IARJ,aA2ES,KAeN,kBAAC,EAAD,CACIG,WAAW,QACXpQ,KAAK,SACLqQ,QAAS,WACLnC,EAAsB+D,GACtBjW,EAAQsE,KAAK,MAEjBgQ,gBAAiB,CAAE6B,YAAa,SCtH/CqB,EAAU,SAACzX,GACpB,OACI,yBACIkL,UAAU,gCACV4J,MAAO,CAAEqC,WAAY,WAErB,yBAAKjM,UAAU,yBACX,yBACIA,UAAU,sBACVa,IAAKC,EAAQ,KACbC,IAAI,MAGZ,yBAAKf,UAAU,wBAEf,yBAAKA,UAAU,uBAAuB4J,MAAO,CAAEsC,SAAU,MAAzD,iNAKI,0BACIlM,UAAU,eACV4J,MAAO,CAAEuC,MAAO,QAASE,aAAc,IACvCjD,QAAS,WACL7U,OAAOiY,KAAK,6BAA8B,YAJlD,kBAUJ,yBAAKxM,UAAU,wBACf,yBAAKA,UAAU,uBAAuB4J,MAAO,CAAEsC,SAAU,MAAzD,uHAGI,kBAAC,EAAD,CACI/C,WAAW,QACXpQ,KAAK,UACLqQ,QAAS,WACL7U,OAAOiY,KACH,0CACA,WAGRnD,gBAAiB,CAAE6B,YAAa,QC3CvCuB,EAAY,SAAC3X,GAAW,IACzBlB,EAA4BkB,EAA5BlB,GAAImF,EAAwBjE,EAAxBiE,KAAM2T,EAAkB5X,EAAlB4X,KAAMtD,EAAYtU,EAAZsU,QAChBrT,EAAoB2K,qBAAW/L,GAA/BoB,gBAER,OACI,yBACInC,GAAIA,EAEJoM,UACI,qBAAuBjK,EAAgBF,SAAW,IAAME,EAAgBD,QAE5E6T,YAAa,WACLP,GACAA,KAGRuD,WAAY,SAAC3Y,IACJA,EAAEmG,IAAM,UACTiP,MAIR,yBACIpJ,UAAU,6BACV4M,wBAAyB,CAAEC,OAAQ9T,KAEvC,yBAAKiH,UAAU,gCACX,yBAAKa,IAAKC,OAAQ,YAAO4L,IAAS3L,IAAI,QC3BzC+L,EAAc,SAAChY,GAAW,IAC3BlB,EAAsBkB,EAAtBlB,GAAI8Y,EAAkB5X,EAAlB4X,KAAMtD,EAAYtU,EAAZsU,QACVrT,EAAoB2K,qBAAW/L,GAA/BoB,gBAER,OACI,yBACInC,GAAIA,EACJoM,UACI,qBAAuBjK,EAAgBF,SAAW,IAAME,EAAgBD,QAE5EsT,QAAS,WACDA,GACAA,KAGRuD,WAAY,SAAC3Y,IACJA,EAAEmG,IAAM,UACTiP,MAIR,yBAAKpJ,UAAU,8BACX,sDACA,yBAAKa,IAAKC,EAAQ,KAAqBC,IAAI,MAE/C,yBAAKf,UAAU,gCACX,yBAAKa,IAAKC,OAAQ,YAAO4L,IAAS3L,IAAI,QC1BzCgM,EAAmB,SAACjY,GAAW,IAChClB,EAAsBkB,EAAtBlB,GAAI8Y,EAAkB5X,EAAlB4X,KAAMtD,EAAYtU,EAAZsU,QACVrT,EAAoB2K,qBAAW/L,GAA/BoB,gBAER,OACI,yBACInC,GAAIA,EACJoM,UACI,qBAAuBjK,EAAgBF,SAAW,IAAME,EAAgBD,QAE5EsT,QAAS,WACDA,GACAA,KAGRuD,WAAY,SAAC3Y,IACJA,EAAEmG,IAAM,UACTiP,MAIR,yBAAKpJ,UAAU,8BACX,yCACA,yBAAKa,IAAKC,EAAQ,KAA0BC,IAAI,MAEpD,yBAAKf,UAAU,gCACX,yBAAKa,IAAKC,OAAQ,YAAO4L,IAAS3L,IAAI,QCbzCiM,G,OAAU,SAAClY,GAAW,IAAD,EACxBC,EAAUC,cADc,EAEsC0L,qBAAW/L,GAAvEoB,EAFsB,EAEtBA,gBAAiBC,EAFK,EAELA,mBAAoBd,EAFf,EAEeA,SAAUkE,EAFzB,EAEyBA,SAFzB,EAGSsH,qBAAWM,GAA1C8B,EAHsB,EAGtBA,UAAW8D,EAHW,EAGXA,gBAHW,EAIwB3R,oBAAS,GAJjC,mBAIvBgY,EAJuB,KAIFC,EAJE,KAWxBC,EAAgB,SAACC,GACfA,IAAerX,EAAgBD,UAGnCoX,GAAuB,GACvBlX,GAAmB,SAACoR,GAAD,mBAAC,eACbA,GADY,IAEftR,QAASsX,OAEbC,MAGEA,EAAyBzW,sBAC3BC,IAAEC,SAAF,uCAAW,WAAOC,GAAP,SAAAC,EAAA,sDACPkW,GAAuB,GADhB,2CAAX,sDAEG,KACH,IAmCJ,OAAKtG,IAKD,yBACIhT,GAAG,UACHoM,UAAW,kBAAoBjK,EAAgBF,SAAW,IAAME,EAAgBD,QAChFwX,aAAc,WAlCdL,GAAoD,WAA7BlX,EAAgBF,UAKV,WAA7BE,EAAgBF,UACa,YAA7BE,EAAgBF,UACH,aAAbX,IAGoB,cAAbA,GAAwD,UAA5Ba,EAAgBD,QACnDqX,EAAc,UAEZjY,GAAuC,eAA3BA,EAAS4F,MAAM,KAAK,IACjB,gBAAb5F,GACa,aAAbA,IACwB,SAA5Ba,EAAgBD,SAEhBqX,EAAc,WAqBd,yBACInN,UAAU,8BACVa,IAAKC,EAAQ,KACbC,IAAI,GACJqI,QAAS,WACLpT,EAAmB,CAAEH,SAAU,SAAUC,QAAS,YAK1D,yBAAKkK,UAAU,yBAGf,yBAAKA,UAAU,yBACX,kBAAC,EAAD,MACA,kBAAC,EAAD,MACA,kBAAC,EAAD,MACA,kBAAC,EAAD,MACA,kBAAC,EAAD,OAIJ,kBAAC,EAAD,CAAYD,SAAS,cAGrB,yBAAKC,UAAU,sBAEX,yBAAKA,UAAU,oBACZ,yBACIA,UAAU,eACV4J,MAAoB,aAAb1U,EAA0B,CAAEqY,cAAe,QAAW,GAC7DnE,QAAS,WACLhQ,KAEJyH,IAAKC,EAAQ,KACbC,IAAI,sBAER,yBACIf,UAAU,wBACV4J,MAAoB,aAAb1U,EAA0B,CAAEqY,cAAe,QAAW,GAC7DnE,QAAS,WACLhQ,KAEJyH,IAAKC,EAAQ,KACbC,IAAI,uBAKG,aAAb7L,EAA0B,KACvB,kBAAC,EAAD,CACItB,GAAG,UACHmF,KAAK,mBACL2T,KAAK,WACLtD,QAAS,WACY,aAAblU,EACAiY,EAAc,QAEdpY,EAAQsE,KAAK,QAK7B,kBAAC,EAAD,CACIzF,GAAG,UACHmF,KAAK,4BACL2T,KAAK,WACLtD,QAAS,WACL+D,EAAc,gBAGtB,kBAAC,EAAD,CACIvZ,GAAG,UACHmF,KAAK,oBACL2T,KAAK,YACLtD,QAAS,WACL+D,EAAc,mBAGtB,kBAAC,EAAD,CACIvZ,GAAG,UACHmF,KAAK,kBACL2T,KAAK,YACLtD,QAAS,WACL+D,EAAc,kBAO1B,yBAAKnN,UAAU,sBACX,kBAAC,EAAD,CACIpM,GAAG,UACH8Y,KAAK,cACLtD,QAAS,WACL7U,OAAOiY,KAAK,6BAA8B,aAGlD,kBAAC,EAAD,CACI5Y,GAAG,UACHmF,KAAK,gBACL2T,KAAK,aACLtD,QAAS,WACY,cAAblU,EACAiY,EAAc,QAKd5Y,OAAOiY,KACH,kDACA,aAKhB,kBAAC,EAAD,CACI5Y,GAAG,UACHmF,KAAK,OACL2T,KAAK,WACLtD,QAAS,WACL7U,OAAOiY,KACH,0CACA,aAIZ,kBAAC,EAAD,CACI5Y,GAAG,UACHmF,KACI,SACA+J,EAAUgC,SACV,UAFA,UAGAhC,EAAUwC,uBAHV,aAGA,EAA2BiD,MAC3B,qCAEJmE,KAAK,WACLtD,QAAS,WACL+D,EAAc,mBAGtB,kBAAC,EAAD,CACIvZ,GAAG,UACH8Y,KAAK,cACLtD,QAAS,WACL7U,OAAOiY,KAAK,qCAAsC,eA9J3D,O,QC3EFgB,EAAgB,SAAC1Y,GAAW,IAC7B2Y,EAAiC3Y,EAAjC2Y,6BAD4B,EAWhC/M,qBAAW/L,GARXO,EAHgC,EAGhCA,SACAS,EAJgC,EAIhCA,aACAsB,EALgC,EAKhCA,oBACAC,EANgC,EAMhCA,uBACAC,EAPgC,EAOhCA,eACAC,EARgC,EAQhCA,kBACAC,EATgC,EAShCA,gBACAC,EAVgC,EAUhCA,mBAEEvC,EAAUC,cAKV0Y,EAAS,WACX3Y,EAAQ2Y,UAeZ,MAAiB,cAAbxY,EAEI,yBACI8K,UAAU,qBACV4J,MAAO,CACH+D,IAAKF,EACLG,YAA8C,KAAlCH,EAAuC,GAAK,KAG5D,yBACIrE,QAAS,WACLsE,MAFR,SAcwB,eAA3BxY,EAAS4F,MAAM,KAAK,GAErB,yBACIkF,UAAU,qBACV4J,MAAO,CACH+D,IAAKF,EACLG,YAA8C,KAAlCH,EAAuC,GAAK,KAG5D,yBAAKzN,UAAU,uBACX,yBACIoJ,QAAS,WACLsE,MAFR,QAOA,yBACItE,QAAS,WAjDzBhO,SAASyS,eAAe,mBAAmBC,eAAe,CACtDC,SAAU,aA+CF,WAOgC,SAA/BpY,EAAaD,eACW,UAAxBC,EAAaH,QACc,0BAAxBG,EAAaH,OAAsC,KACnD,kBAAC,IAAD,CAAMsT,GAAI,SAAWnT,EAAa/B,IAAlC,SAGR,yBAAKoM,UAAU,wBACf,yBAAKA,UAAU,uBACqB,SAA/BrK,EAAaD,eACW,UAAxBC,EAAaH,QACc,0BAAxBG,EAAaH,OACb,kBAAC,IAAM4W,SAAP,KACI,yBACIpM,UAAU,WACVa,IAAKC,EAAQ,KACbC,IAAI,GACJiN,MAAM,yCACN5E,QAAS,WACLhS,GAAmBD,MAG3B,yBACI6I,UAAU,WACVa,IAAKC,EAAQ,KACbC,IAAI,GACJiN,MAAM,6BACN5E,QAAS,WACLlS,GAAwBD,MAGhC,yBACI+I,UAAU,WACVa,IAAKC,EAAQ,KACbC,IAAI,GACJiN,MAAM,uCACN5E,QAAS,WACL9R,GAAoBD,OAIhC,OASE,gBAAbnC,EAED,yBACI8K,UAAU,qBACV4J,MAAO,CACH+D,IAAKF,EACLG,YAA8C,KAAlCH,EAAuC,GAAK,KAG5D,yBACIrE,QAAS,WACLsE,MAFR,QAO6B,KAA5B3Y,EAAQP,SAAS8O,QACc,oBAAhC3N,EAAaL,eAAuC,KAChD,yBACI8T,QAAS,WACLrU,EAAQsE,KAAK,WAFrB,SAK2C,WAAhC1D,EAAaL,eAA8B,SAAW,WAMtE,MC1JF2Y,G,OAAS,SAACnZ,GAAW,IAAD,EACmB4L,qBAAW/L,GAAnDO,EADqB,EACrBA,SAAUS,EADW,EACXA,aAAcQ,EADH,EACGA,YADH,EAEelB,oBAAS,GAFxB,mBAEtBiZ,EAFsB,KAENC,EAFM,OAIGlZ,qBAJH,mBAItBmZ,EAJsB,KAIZC,EAJY,OAK2CpZ,mBAAS,GALpD,mBAKtBwY,EALsB,KAKQa,EALR,KAqC7B5X,2BAAgB,WACZ2X,EA1BkB,SAAC7Y,GACnB,GAAiB,gBAAbN,EACA,MAAO,QAEP,OAAQM,GACJ,IAAK,QACD,MAAO,QACX,IAAK,wBACD,MAAO,QACX,IAAK,oBACL,IAAK,sBACD,MAAO,UACX,IAAK,aACD,MAAO,UACX,IAAK,YACD,MAAO,YACX,IAAK,WACD,MAAO,WACX,IAAK,YACD,MAAO,WACX,QACI,QAKA+Y,CAAc5Y,EAAaH,WACxC,CAACG,EAAaH,SAOjBkB,2BAAgB,WACZyX,GAAkB,KACnB,CAACjZ,IACJwB,2BAAgB,WACZ8X,MACD,CAACN,IACJ,IAAMM,EAAoB5X,sBACtBC,IAAEC,UAAS,WACPqX,GAAkB,KACnB,KACH,IAmDJ,OAfAM,YAAiB,UAAU,WACvB,IAAIC,EACAna,OAAOma,SACPna,OAAOoa,WACPvT,SAASwT,qBAAqB,QAAQ,GAAGD,UAEzCL,EADAI,EAAU,IACuB,EAAIA,GAEJ,OAOpCxZ,GAAyB,aAAbA,GAAwC,cAAbA,EAOtB,cAAbA,EAED,kBAAC,IAAMkX,SAAP,KACI,yBAAKpM,UAAU,kBACX,yBAAKA,UAAU,kBACX,gDAGR,kBAAC,EAAD,CAAeyN,6BAA8BA,KAQrB,eAA3BvY,EAAS4F,MAAM,KAAK,GAErB,kBAAC,IAAMsR,SAAP,KACI,yBAAKpM,UAAW,gBAAkB7J,EAAcA,EAAYX,OAAS,QAChEW,EAAcA,EAAY4C,KAAO,IAEtC,yBAAKiH,UAAU,kBACTrK,EAAaJ,YAKX,yBACIyK,UAAW,2BAA6BoO,EAAW,IAAMA,EAAW,KAEpE,6BAAMzY,EAAaL,gBACnB,6BAAMK,EAAaJ,cARvB,yBAAKyK,UAAU,kBACX,6BAAMrK,EAAaL,kBAW/B,kBAAC,EAAD,CAAemY,6BAA8BA,KAQnC,gBAAbvY,EAED,kBAAC,IAAMkX,SAAP,KACI,yBAAKpM,UAAU,kBAEP,yBACIA,UACI,kBACErK,EAAaJ,YAET,aAAe6Y,EAAW,IAAMA,EAAW,IAD3C,IAGVS,YAAa,aAGbC,WAAY,cAIZ,6BAAMnZ,EAAaL,gBACnB,6BAAMK,EAAaJ,eAwB/B,kBAAC,EAAD,CAAekY,6BAA8BA,KAQ9C,KAtGA,OC9GFsB,I,OAAO,SAACja,GAAW,IAExBka,EAUAla,EAVAka,WACApb,EASAkB,EATAlB,GACA6G,EAQA3F,EARA2F,KACAjF,EAOAV,EAPAU,OACAyZ,EAMAna,EANAma,QACAC,EAKApa,EALAoa,OACAC,EAIAra,EAJAqa,OACAC,EAGAta,EAHAsa,OAEA/F,EACAvU,EADAuU,gBAXuB,EAaM3I,qBAAW/L,GAApCuD,EAbmB,EAanBA,UAAW4B,EAbQ,EAaRA,UAgCnB,OACI,kBAAC,IAAD,CAAMgP,GAAI,SAAWlV,EAAIoM,UAAU,YAC/B,yBAAKA,UAAW,QAjCN,WACd,OAAQxK,GACJ,KAAK0C,EAAUC,IAAIE,GACnB,KAAKH,EAAUC,IAAIC,IACf,MAAO,QACX,KAAKF,EAAUK,IAAIF,GACnB,KAAKH,EAAUK,IAAIH,IACf,MAAO,QACX,KAAKF,EAAUM,IAAIH,GACnB,KAAKH,EAAUM,IAAIJ,IACf,MAAO,UACX,KAAKF,EAAUO,IAAIJ,GACnB,KAAKH,EAAUO,IAAIL,IACf,MAAO,YACX,KAAKF,EAAUQ,IAAIL,GACnB,KAAKH,EAAUQ,IAAIN,IACf,MAAO,WACX,KAAKF,EAAUS,IAAIN,GACnB,KAAKH,EAAUS,IAAIP,IACf,MAAO,WACX,KAAKF,EAAUU,OAAOP,GACtB,KAAKH,EAAUU,OAAOR,IAClB,MAAO,UACX,KAAKF,EAAUW,OAAOR,GACtB,KAAKH,EAAUW,OAAOT,IAClB,MAAO,UACX,QACI,MAAO,SAMeiX,IAAeL,EAAa,YAAc,IAC/DpF,MAAOP,GACR,yBAAKrJ,UAAU,eACX,yBACIA,UAAU,aACVC,QAAQ,MACRC,MAAM,6BACNC,MAAM,+BACNC,EAAE,MACFC,EAAE,MACFC,QAAQ,WACRC,MAAM,YAEN,0BAAMC,EAAE,6JAEZ,yBAAKR,UAAU,eAAexK,GAE9B,kBAAC,IAAM4W,SAAP,KACI,yBAAKpM,UAAU,aAAalG,EAAUW,IACtC,yBAAKuF,UAAU,aAAaiP,KAGnCzZ,IAAW0C,EAAUC,IAAIE,IAC1B7C,IAAW0C,EAAUC,IAAIC,KACzB5C,IAAW0C,EAAUK,IAAIF,IACzB7C,IAAW0C,EAAUK,IAAIH,KACzB5C,IAAW0C,EAAUS,IAAIN,IACzB7C,IAAW0C,EAAUS,IAAIP,IACrB,yBAAK4H,UAAU,aAAf,mBACqBkP,EACjB,6BAFJ,MAGQC,GAER3Z,IAAW0C,EAAUM,IAAIH,IAC3B7C,IAAW0C,EAAUM,IAAIJ,KACzB5C,IAAW0C,EAAUU,OAAOP,IAC5B7C,IAAW0C,EAAUU,OAAOR,KAC5B5C,IAAW0C,EAAUW,OAAOR,IAC5B7C,IAAW0C,EAAUW,OAAOT,IAC1B,yBAAK4H,UAAU,aAAf,iBACmBkP,EACf,6BAFJ,MAGQC,GAER3Z,IAAW0C,EAAUO,IAAIJ,IAC3B7C,IAAW0C,EAAUQ,IAAIL,IACzB7C,IAAW0C,EAAUO,IAAIL,KACzB5C,IAAW0C,EAAUQ,IAAIN,IACvB,yBAAK4H,UAAU,aAAaoP,GAC5B,SCnGPE,GAAa,SAACxa,GAAW,IAC1Bya,EAAwBza,EAAxBya,YAAa/Z,EAAWV,EAAXU,OACjBT,EAAUC,cAEd,OACI,yBACIgL,UAAU,cACVoJ,QAAS,WACLrU,EAAQsE,KAAK,CACTwG,SAAU,QACVyD,OACI,IACA,IAAI8E,gBAAgB,CAAE5S,OAAQA,IAAU8G,eAIpD,yBAAK0D,UAAU,sBACX,yBAAKA,UAAU,qBAAf,IAAqCuP,GACrC,yBAAKvP,UAAU,oBAAf,qBAEJ,yBAAKA,UAAU,gBAAf,aCbCwP,I,OAAoB,SAAC1a,GAAW,IACjCkZ,EAAyBlZ,EAAzBkZ,MAAOxY,EAAkBV,EAAlBU,OAAQia,EAAU3a,EAAV2a,MACjBnZ,EAAOxB,EAAMwB,KAAOxB,EAAMwB,KAAO,GAC/B0G,EAAO0D,qBAAW1F,GAAlBgC,GACAtC,EAAyBgG,qBAAW/L,GAApC+F,qBAJgC,EAKFzF,qBALE,mBAKjCsa,EALiC,KAKpBG,EALoB,KAOlCC,EAAQC,mBACRC,EAAYD,mBACZE,EAAQF,mBACRG,EAAOH,mBACPI,EAAWJ,mBACXK,EAASL,mBACTM,EAAYN,mBACZO,EAAaP,mBAdqB,EAgBF3a,mBAAS+H,EAAGJ,MAhBV,mBAgBjCwT,EAhBiC,KAgBpBC,EAhBoB,OAkBFpb,qBAlBE,mBAkBjCqb,EAlBiC,KAkBpBC,EAlBoB,OAmBAtb,qBAnBA,mBAmBjCub,EAnBiC,KAmBnBC,EAnBmB,OAoBAxb,qBApBA,mBAoBjCyb,EApBiC,KAoBnBC,EApBmB,OAqBI1b,qBArBJ,mBAqBjC2b,EArBiC,KAqBjBC,EArBiB,OAsBJ5b,qBAtBI,mBAsBjC6b,EAtBiC,KAsBrBC,EAtBqB,KA2BxCra,2BAAgB,WACZgZ,EAAepZ,EAAKsB,OAAS6X,KAC9B,CAACnZ,EAAMmZ,IAMV,IAAMuB,EAA+B,WACjC,WACKV,GAAeA,IACfX,IACAE,GACAC,GACAC,GACAC,GACAC,GACAC,IA2BTxZ,2BAAgB,YACP4Z,GAAeF,KAAiBpT,EAAGJ,OArBnCoU,IAILb,EAAWc,QAAUpa,IAAEqa,OAAM,WACzB,IAAIC,EAAaxB,EAAMsB,QAAQG,wBAAwBC,MACnDC,EAAiBzB,EAAUoB,QAAQG,wBAAwBC,MAG/D,GAFAZ,EAAgBa,EAAiBH,GAE7BG,EAAiBH,EAAY,CAC7BR,GAAgB,GAChB,IAAIY,EAAWxB,EAAKkB,QAAQG,wBAC5BP,EAAkBU,EAASC,MAC3B,IAAIC,EAAYF,EAASF,MACrBK,EAAgB1B,EAASiB,QAAQG,wBAAwBC,MAC7DN,EAAcU,EAAY,GAC1BlB,EAAemB,EAAgBD,MAEpC,MAOHpB,EAAerT,EAAGJ,SACnB,CAACI,EAAGJ,OACP,IAoCM+U,EAAQ,SAAC3d,GACNgd,GAGDlB,GAASA,EAAMmB,SAAWnB,EAAMmB,QAAQW,YACxC3B,EAAOgB,QAAU/X,QAAQlF,EAAE6d,SAAW,GAAG1Y,QAAQ,IAlCvC,SAAC2Y,EAAI9d,GAOnB,IAAI+d,EANCf,IAGDd,GACA8B,aAAa9B,EAAUe,SAIvBc,EADAnB,EAAiBE,EAAagB,EACrB,EACFA,EAAKlB,EAAiBE,EAAaR,EACjCA,EAEAwB,EAAKlB,EAAiBE,EAEnCf,EAAKkB,QAAQrH,MAAM4H,KAAOO,EAAS,KAEnCpC,EAAMsB,QAAQgB,YAAa,EAC3B/B,EAAUe,QAAUpa,IAAEqa,OAAM,WACxBvB,EAAMsB,QAAQgB,YAAa,IAC5B,KAEHtC,EAAMsB,QAAQiB,SAAS,CACnBV,KAAMO,GAAUvB,EAAeF,GAC/BvC,SAAU,WAGd/Z,EAAEme,kBAQEC,CAAUnC,EAAOgB,QAASjd,KAyBlC,OAtBAya,YAAiB,aAAa,SAACza,GAC3B2d,EAAM3d,MAEVya,YAAiB,WAAW,WACpBqB,GAASA,EAAMmB,SAAWnB,EAAMmB,QAAQW,YACxC9B,EAAMmB,QAAQW,WAAY,MAOlClb,2BAAgB,WACZ,OAAO,WACHsb,aAAa9B,EAAUe,SACvBe,aAAa7B,EAAWc,YAE7B,IAKE3a,EAID,kBAAC,IAAM8V,SAAP,KAEI,yBAAKpM,UAAU,kBACVgO,EACD,0BAAMhO,UAAU,uBAAhB,KAAyC1J,EAAKsB,OAA9C,MAIJ,yBACIoI,UAAU,yBACVqS,IAAK1C,EACL2C,SAAU,YAC2B,IAA7B3C,EAAMsB,QAAQgB,YAnFb,WACjB,GAAKjB,EAAL,CAGA,IAAIuB,EAAa5C,EAAMsB,QAAQuB,WAC/BzC,EAAKkB,QAAQrH,MAAM4H,KAAOe,GAAcjC,EAAcE,GAAgB,MA+EtDiC,KAIR,yBAAKJ,IAAKxC,EAAW7P,UAAU,+BAEzB1J,GAAwB,IAAhBA,EAAKsB,OAWXtB,EAAK7C,KAAI,SAACyG,EAAMC,GACZ,OAAIA,EAAMsV,EAAQ,EACP,KAGP,kBAAC,GAAD,CACItV,IAAKA,EACL6U,YAAU,EACVpb,GAAIsG,EAAKtG,GACT4B,OAAQA,EACRiF,KAAMP,EAAKO,KACXwU,QAAS/U,EAAK8T,MACdkB,OAAQxU,EAAqBR,EAAKwY,UAClCvD,OAAQjV,EAAKyY,WACbvD,OAAQlV,EAAKkV,OACb3Z,aAAcyE,EAAKzE,kBAzB/B,yBACImU,MAAO,CACHgJ,UAAW,GACXC,WAAY,GACZC,UAAW,KAJnB,wBAOyB9E,EAPzB,iBAgCHuB,EAAc,EACX,kBAAC,GAAD,CAAYA,YAAaA,EAAa/Z,OAAQA,IAC9C,OAKVkb,EACE,yBAAK2B,IAAKrC,GACN,yBACIqC,IAAKvC,EACL9P,UAAU,yBACV2J,YAAa,SAAC3V,GACV8b,EAAMmB,QAAQW,WAAY,EAC1BD,EAAM3d,KAGV,yBAAKqe,IAAKtC,EAAM/P,UAAU,iCAC1B,yBAAKA,UAAU,oBAXV,MA9Dd,OCjJF+S,I,OAAO,WAAO,IAAD,EAUlBrS,qBAAW/L,GARXO,EAFkB,EAElBA,SACAC,EAHkB,EAGlBA,YACAa,EAJkB,EAIlBA,mBACAZ,EALkB,EAKlBA,UACAC,EANkB,EAMlBA,aACAsB,EAPkB,EAOlBA,0BACAuB,EARkB,EAQlBA,UACAc,EATkB,EASlBA,uBAEI8J,EAAcpC,qBAAWM,GAAzB8B,UACA9F,EAAO0D,qBAAW1F,GAAlBgC,GAZc,EAeY/H,qBAfZ,mBAef+d,EAfe,KAeJC,EAfI,OAgBQhe,qBAhBR,mBAgBfie,EAhBe,KAgBNC,EAhBM,OAiBQle,qBAjBR,mBAiBfme,EAjBe,KAiBNC,EAjBM,OAkBoBpe,qBAlBpB,mBAkBfqe,EAlBe,KAkBAC,EAlBA,OAmBkBte,qBAnBlB,mBAmBfue,EAnBe,KAmBDC,EAnBC,OAoBoBxe,qBApBpB,mBAoBfye,EApBe,KAoBAC,EApBA,OAqBc1e,qBArBd,mBAqBf2e,EArBe,KAqBHC,EArBG,KAuBhBC,EAAc,CAChB,CACIte,OAAQ0C,EAAUC,IAAIE,GACtB2V,MAAO9V,EAAUC,IAAIG,QACrByb,UAAWf,EACXgB,aAAa,GAEjB,CACIxe,OAAQ0C,EAAUK,IAAIF,GACtB2V,MAAO9V,EAAUK,IAAIH,IACrB2b,UAAWb,EACXc,aAAa,GAEjB,CACIxe,OAAQ0C,EAAUU,OAAOP,GACzB2V,MAAO9V,EAAUU,OAAON,QACxByb,UAAWH,EACXI,aAAa,GAEjB,CACIxe,OAAQ0C,EAAUM,IAAIH,GACtB2V,MAAO9V,EAAUM,IAAIF,QACrByb,UAAWX,EACXY,aAAa,GAEjB,CACIxe,OAAQ0C,EAAUO,IAAIJ,GACtB2V,MAAO9V,EAAUO,IAAIH,QACrByb,UAAWT,EACXU,aAAa,GAEjB,CACIxe,OAAQ0C,EAAUQ,IAAIL,GACtB2V,MAAO9V,EAAUQ,IAAIJ,QACrByb,UAAWP,EACXQ,aAAa,GAEjB,CACIxe,OAAQ0C,EAAUS,IAAIN,GACtB2V,MAAO9V,EAAUS,IAAIL,QACrByb,UAAWL,EACXM,aAAa,IAGjBjf,EAAUC,cAnEQ,EAoEIC,qBApEJ,mBAoEfwa,EApEe,KAoERwE,GApEQ,KA4LtB,OAjHAvd,2BAAgB,WACZ,IAAwBkG,EAKxBqX,IALwBrX,EAKAI,EAAGJ,MAJE,KAAO,GAAKA,EAAO,KAAO,EAAIA,EAAO,IAAM,EAAI,KAK7E,CAACI,EAAGJ,OAMPlG,2BAAgB,WACZrB,GAAa,GACbF,EA5EiB,YA6EjBa,EAAmB,CAAEH,SAAU,UAAWC,QAAS,WACpD,CAACZ,IAMJwB,2BAAgB,WAAM,4CAClB,8BAAAM,EAAA,sEACwBsG,EAAS,CACzBtE,uBAAwBA,EACxBjE,QAASA,EACTwI,aAAc,sBACdE,MAAOqF,EAAU2B,YACjBjH,SAAU,CACNiS,MAAOA,EACPtR,UAAS,UAAE2E,EAAUwC,uBAAZ,aAAE,EAA2B1R,IAE1CyB,aAAc,SAAC6e,GACX7e,EAAa6e,MAXzB,UACQC,EADR,wDAmBIlB,EACIkB,EACMA,EAAQ7d,KAAK8d,QAAO,SAACla,GACjB,OAAOA,EAAK1E,SAAW0C,EAAUC,IAAIC,OAEzC,IAEV+a,EACIgB,EACMA,EAAQ7d,KAAK8d,QAAO,SAACla,GACjB,OAAOA,EAAK1E,SAAW0C,EAAUK,IAAIH,OAEzC,IAEVyb,EACIM,EACMA,EAAQ7d,KAAK8d,QAAO,SAACla,GACjB,OAAOA,EAAK1E,SAAW0C,EAAUU,OAAOR,OAE5C,IAEVib,EACIc,EACMA,EAAQ7d,KAAK8d,QAAO,SAACla,GACjB,OAAOA,EAAK1E,SAAW0C,EAAUM,IAAIJ,OAEzC,IAEVmb,EACIY,EACMA,EAAQ7d,KAAK8d,QAAO,SAACla,GACjB,OAAOA,EAAK1E,SAAW0C,EAAUO,IAAIL,OAEzC,IAEVqb,EACIU,EACMA,EAAQ7d,KAAK8d,QAAO,SAACla,GACjB,OAAOA,EAAK1E,SAAW0C,EAAUQ,IAAIN,OAEzC,IAEVub,EACIQ,EACMA,EAAQ7d,KAAK8d,QAAO,SAACla,GACjB,OAAOA,EAAK1E,SAAW0C,EAAUS,IAAIP,OAEzC,IAlEd,6CADkB,uBAAC,WAAD,wBAsElBic,KACD,CAACvR,IAEJpM,2BAAgB,WAERtB,GACA4d,GACAE,GACAE,GACAE,GACAE,GACAE,GAEA/c,MAEL,CAACqc,EAAWE,EAASE,EAASE,EAAeE,EAAcE,IAMzDV,GACAE,GACAE,GACAE,GACAE,GACAE,GACAE,EAKDZ,EAAUpb,OACNsb,EAAQtb,OACRwb,EAAQxb,OACR0b,EAAc1b,OACd4b,EAAa5b,OACb8b,EAAc9b,OACdgc,EAAWhc,SACf,EAGI,yBAAKgS,MAAO,CAAEgJ,UAAW,OAAQta,QAAS,SACtC,yBAAKsR,MAAO,CAAE0K,UAAW,SAAUC,SAAU,MACzC,sCADJ,yBAEI,6BACA,yNAUZ,kBAAC,IAAMnI,SAAP,KAII,yBAAKxC,MAAO,CAAE4K,OAAQ,OAGpBV,EAEIA,EAAYrgB,KAAI,SAACyG,EAAMC,GACnB,OAAKD,EAAK6Z,UAIN7Z,EAAK8Z,aAAyC,IAA1B9Z,EAAK6Z,UAAUnc,OAC5B,KAGP,kBAAC,GAAD,CACIuC,IAAKA,EACL6T,MAAO9T,EAAK8T,MACZxY,OAAQ0E,EAAK1E,OACbc,KAAM4D,EAAK6Z,UACXtE,MAAOA,IAZJ,QAHf,MAnCH,OC9MFgF,GAAY,SAAC3f,GAAW,IACzBwB,EAA4BxB,EAA5BwB,KAAMiT,EAAsBzU,EAAtByU,SAAUmL,EAAY5f,EAAZ4f,QAChBC,GAAgBre,GAAQxB,GAAS,IAAjC6f,YAER,OACI,yBAAK/gB,GAAI8gB,EAAS1U,UAAW,kBAAiC,SAAbuJ,EAAsB,YAAc,KAChFoL,ICHAC,I,OAAiB,SAAC9f,GAAW,IAIfU,EAHfqf,EAAc/f,EAAd+f,UACAna,EAAyBgG,qBAAW/L,GAApC+F,qBA0BF0T,EAvBa,WADI5Y,EAwBQqf,EAAUrf,QAtB1B,QAEI,0BAAXA,EACO,QAEI,sBAAXA,GAA6C,wBAAXA,EAC3B,UAEI,eAAXA,EACO,UAEI,cAAXA,EACO,YAEI,aAAXA,EACO,WAEI,cAAXA,EACO,gBADX,EAWJ,OACI,yBAAKwK,UAAU,gBACX,yBAAKA,UAAU,eACX,uCACA,6BACI,0BAAMA,UAAW,wBAA0BoO,GACvC,yBACIpO,UAAU,aACVC,QAAQ,MACRC,MAAM,6BACNC,MAAM,+BACNC,EAAE,MACFC,EAAE,MACFC,QAAQ,WACRC,MAAM,YAEN,0BAAMC,EAAE,6JACL,IACNqU,EAAUrf,UAKvB,yBAAKwK,UAAU,eACX,yBAAKA,UAAU,eACX,mCACA,6BACI,8BAAO6U,EAAUpf,aAAe,EAAIof,EAAUpf,aAAe,uBAIzE,yBAAKuK,UAAU,eACX,yBAAKA,UAAU,eACX,qCACA,6BACI,8BAAO6U,EAAUpa,SAI7B,yBAAKuF,UAAU,aACX,yBAAKA,UAAU,eACX,qCACA,6BACI,8BAAO6U,EAAU7G,UAI7B,yBAAKhO,UAAU,gBACX,yBAAKA,UAAU,eACX,6CACA,6BACI,oCACQ6U,EAAUlC,WADlB,OACkCjY,EAAqBma,EAAUnC,iBCvF5EoC,I,OAAW,SAAChgB,GAAW,IACxB+f,EAAc/f,EAAd+f,UAWFE,EAA0BF,EAAUve,KAPd0e,UAAUvhB,KAAI,SAAC8U,EAAMlO,GAAP,OAElC,wBAAI2F,UAAU,GAAG7F,IAAKE,GAAQkO,EAAK0M,OAAnC,MAA8C1M,EAAK2M,mBAS3D,OACI,yBAAKlV,UAAU,gBACZ,4BACC+U,MCjBCI,I,OAAe,SAACrgB,GAAW,IAEhCsgB,EAOAtgB,EAPAsgB,UACAC,EAMAvgB,EANAugB,UACAC,EAKAxgB,EALAwgB,WACAC,EAIAzgB,EAJAygB,QACAC,EAGA1gB,EAHA0gB,cACAC,EAEA3gB,EAFA2gB,cACAC,EACA5gB,EADA4gB,eAuBJ,OAhBAjH,YAAiB,WAAW,SAACza,GACP,KAAdA,EAAE2hB,SAAgC,KAAd3hB,EAAE2hB,SACtB3hB,EAAEme,iBACFiD,KACqB,KAAdphB,EAAE2hB,UACT3hB,EAAEme,iBACFkD,QAUHD,GAAcC,GAAcC,GAAeC,EAI5C,yBAAKvV,UAAU,gBACX,yBAAKA,UAAU,eACX,yBAAKA,UAAU,cAAcsV,GAC7B,yBAAK1L,MAAO,CAAEuC,MAAO,QAAUoJ,GAC/B,6BAAMG,GAAkC,iBACxC,6BACI,kBAAC,EAAD,CACIvM,WAAW,aACXpQ,KAAMyc,GAAgC,UACtCpM,QAAS,WACLgM,OAGR,kBAAC,EAAD,CACIjM,WAAW,WACXpQ,KAAM0c,GAAgC,UACtCrM,QAAS,WACLiM,KAEJhM,gBAAiB,CAAE6B,YAAa,QAtBzC,OCxBF0K,GAAc,SAAC9gB,GAAW,IAE/BwB,EAQAxB,EARAwB,KACAuf,EAOA/gB,EAPA+gB,sBACAC,EAMAhhB,EANAghB,SACAC,EAKAjhB,EALAihB,YACAC,EAIAlhB,EAJAkhB,SACAC,EAGAnhB,EAHAmhB,gCACAC,EAEAphB,EAFAohB,iBACAC,EACArhB,EADAqhB,aAGA3X,EAOAsX,EAPAtX,GACA4X,EAMAN,EANAM,OACA5gB,EAKAsgB,EALAtgB,OACAF,EAIAwgB,EAJAxgB,eACAiJ,EAGAuX,EAHAvX,aACA8X,EAEAP,EAFAO,cACAC,EACAR,EADAQ,iBAlB8B,EA4B9B5V,qBAAW/L,GAPX6F,EArB8B,EAqB9BA,WACAvD,EAtB8B,EAsB9BA,oBACAE,EAvB8B,EAuB9BA,eACAE,EAxB8B,EAwB9BA,gBACA1B,EAzB8B,EAyB9BA,aACAmD,EA1B8B,EA0B9BA,mBACAE,EA3B8B,EA2B9BA,uBAEI8J,EAAcpC,qBAAWM,GAAzB8B,UA7B0B,EA8BU7N,mBAAS,IA9BnB,mBA8B3BshB,EA9B2B,KA8BXC,EA9BW,KA+B9BzhB,EAAUC,cA/BoB,EAiCwBC,qBAjCxB,mBAiC3BwhB,EAjC2B,KAiCJC,EAjCI,OAkCUzhB,oBAAS,GAlCnB,mBAkC3B0hB,EAlC2B,KAkCXC,EAlCW,OAmCI3hB,oBAAS,GAnCb,mBAmC3B4hB,GAnC2B,KAmCdC,GAnCc,QAoCE7hB,oBAAS,GApCX,qBAoC3B8hB,GApC2B,MAoCfC,GApCe,MAyClCtgB,2BAAgB,WACZ,GAAKJ,EAAL,CAGA,IAAI2gB,EAAoB,GAExB7iB,OAAO0W,QAAQxU,GAAM7C,KAAI,YAAkB,IAAD,mBAAf0G,EAAe,KAAVD,EAAU,KACtC,MACgB,SAAXkc,IAAsBlc,EAAKmc,eAAiB,IAAMA,GAAiB,IACpEnc,EAAKgd,eAKLhd,EAAKid,WAAajd,EAAKid,YAAc,IAAMjd,EAAKid,UAAUvf,OAAS,GACnEqf,EAAkB5d,KAAKc,GAJhB,QASfqc,EAAkBS,MACnB,CAAC3gB,EAAM+f,EAAeD,IAMzB3H,YAAiB,WAAW,SAACza,GACzB,GAAe,SAAXoiB,EAAJ,CAIA,IAMIgB,EAAgBrb,UAAUsb,SAAS/c,QAAQ,QAAU,EAAItG,EAAEsjB,QAAUtjB,EAAEujB,QACvEC,EAAWxjB,EAAEmG,KAAiB,MAAVnG,EAAEmG,KAA2C,MAA1BnG,EAAE2hB,SAAW3hB,EAAEyjB,OAE1D,OAAIL,GAAiBI,GATF,SAACxjB,GACZA,EAAEme,gBACFne,EAAEme,iBAQNuF,CAAW1jB,GACX2jB,MACO,QAHX,MAUJjhB,2BAAgB,WACR+f,GAAyBE,EAEzBvb,SAASwT,qBAAqB,QAAQ,GAAGgJ,aAAa,QAAS,sBAG/Dxc,SAASwT,qBAAqB,QAAQ,GAAGgJ,aAAa,QAAS,sBAEpE,CAACnB,EAAuBE,IAM3BjgB,2BAAgB,WAEZ,OADAsgB,IAAc,GACP,WACHJ,GAAkB,GAClBF,IACAtb,SAASwT,qBAAqB,QAAQ,GAAGgJ,aAAa,QAAS,uBAEpE,IAKHlhB,2BAAgB,WACZogB,IAAe,KAChB,IAMH,IAOMe,GAAgB,SAACC,GACnB,KACwB,kBAAnBxiB,GAAsC+gB,EAAgB,GACnC,eAAnB/gB,GAAmC+gB,EAAgB,GAFxD,CAOA,IAAI3H,EAAUqJ,KAAKC,MACfzjB,OAAOma,SACHna,OAAOoa,WACPvT,SAASwT,qBAAqB,QAAQ,GAAGD,WAG7CsJ,EAAoB,GACxBjC,EAAS7P,SAAQ,SAACjM,GACd+d,EAAkB5e,KAAK+B,SAASyS,eAAe3T,GAAMge,cAEzDD,EAAkBE,MAAK,SAAUnhB,EAAGohB,GAChC,OAAOphB,EAAIohB,KAGf,IAQIvgB,EARoB,SAACH,EAAO2gB,GAE5B,IADA,IAAIxgB,EAAI,EACDA,EAAIH,EAAME,QAAUF,EAAMG,GAAKwgB,GAClCxgB,IAEJ,OAAOA,EAGHygB,CAAgBL,EAAmBvJ,GAEvC6J,EAAWN,EAAkBpgB,EAAI,IACjC0gB,IAAa7J,GAAY6J,EAAW7J,EAAU,IAAM6J,EAAW7J,EAAU,MACzE6J,EAAWN,EAAkBpgB,EAAI,IAEhC0gB,IACDA,EAAW,GAGf,IAAIC,EAAYP,EAAkBpgB,IAC9B2gB,IAAc9J,GAAY8J,EAAY9J,EAAU,IAAM8J,EAAY9J,EAAU,MAC5E8J,EAAYP,EAAkBpgB,EAAI,IAEjC2gB,IACDA,EAAYpd,SAAS+D,KAAKsZ,cAGZ,QAAdX,EACAvjB,OAAO2d,SAAS,CAAEvE,IAAK4K,EAAU/G,KAAM,EAAGzD,SAAU,WAC/B,SAAd+J,GACPvjB,OAAO2d,SAAS,CAAEvE,IAAK6K,EAAWhH,KAAM,EAAGzD,SAAU,aAUvD2K,GAAY,uCAAG,WAAOC,GAAP,qBAAA3hB,EAAA,yDACZ2hB,EADY,oDAMC,WAAdA,EANa,gCAOOrb,EAAS,CACzBtE,uBAAwBA,EACxB0E,uCAAuC,EACvC3I,QAASA,EACTwI,aAAc,kBACdE,MAAOqF,EAAU2B,YACjBjH,SAAU,CACNgB,GAAIA,EACJD,aAAcA,EACdJ,UAAS,UAAE2E,EAAUwC,uBAAZ,aAAE,EAA2B1R,IAE1CyB,aAAc,SAAC6e,GACX0C,EAAkB1C,MAnBb,OAOb0E,EAPa,iCAsBQ,QAAdD,EAtBM,kCAuBOrb,EAAS,CACzBtE,uBAAwBA,EACxB0E,uCAAuC,EACvC3I,QAASA,EACTwI,aAAc,oBACdE,MAAOqF,EAAU2B,YACjBjH,SAAU,CACNW,UAAS,UAAE2E,EAAUwC,uBAAZ,aAAE,EAA2B1R,GACtC4K,GAAIA,EACJD,aAAcA,EACdgK,KAAMuN,EAASvN,KACf/S,OAAQ,yBAEZH,aAAc,SAAC6e,GACX0C,EAAkB1C,MArCb,QAuBb0E,EAvBa,kCAwCQ,QAAdD,EAxCM,kCAyCOrb,EAAS,CACzBtE,uBAAwBA,EACxB0E,uCAAuC,EACvC3I,QAASA,EACTwI,aAAc,oBACdE,MAAOqF,EAAU2B,YACjBjH,SAAU,CACNW,UAAS,UAAE2E,EAAUwC,uBAAZ,aAAE,EAA2B1R,GACtC4K,GAAIA,EACJD,aAAcA,EACdgK,KAAMuN,EAASvN,KACf/S,OAAQ,qBAEZH,aAAc,SAAC6e,GACX0C,EAAkB1C,MAvDb,QAyCb0E,EAzCa,+BA2Db7jB,EAAQsE,KAAK,CAAEwG,SAAU,6BA3DZ,SA8DM,IAAnB+Y,EAAYtZ,SAAmCM,IAAnBgZ,EAAYhlB,IAExCgjB,GAAkB,GAClBF,EAAyB,CACrBmC,SAAU,IACVvD,WAAY,gCAAkCsD,EAAYpjB,OAAS,IACnE+f,QAAS,4CACTG,eAAgB,gCAChBF,cAAe,MACfJ,UAAW,WACPsB,KAEJjB,cAAe,KACfJ,UAAW,WACPtgB,EAAQsE,KAAK,CAAEwG,SAAU,WAIjCmX,IAAc,GACdjiB,EAAQsE,KAAK,CAAEwG,SAAU,OAjFZ,4CAAH,sDAyFZiZ,GAAgB,uCAAG,0DAAA9hB,EAAA,yDAChBV,EADgB,0CAEV,GAFU,UAIjB6d,EAAUtd,IAAEkiB,UAAUziB,GAOF,eAAnBhB,GACsB,YAAnBA,GACmB,kBAAnBA,GACmB,eAAnBA,KAHJ,UAIAgB,EAAK0iB,gBAJL,iBAIA,EAAeC,oBAJf,aAIA,EAA6Bra,aAC7B,UAACtI,EAAK0iB,gBAAN,iBAAC,EAAeC,oBAAhB,aAAC,EAA6BC,SAhBb,iCAkBO5b,EAAS,CAC7BtE,uBAAwBA,EACxB0E,uCAAuC,EACvC3I,QAASA,EACTwI,aAAc,aACdE,MAAOqF,EAAU2B,YACjBjH,SAAU,CACNoB,UAAWtI,EAAK0iB,SAASC,aAAara,UAAU,MAzBvC,OAkBbga,EAlBa,OA6BbO,EAAMP,EAAYtQ,IAEtB6L,EAAQ6E,SAASC,aAAaC,QAAUC,EACxCjD,EAAiB,WAAD,YAAC,eACV5f,EAAK0iB,SAASC,cADL,IAEZC,QAASC,KAlCI,WAyCjBC,EAAa,GAEjBhlB,OAAOD,KAAKggB,GAAShO,SAAQ,SAACjM,IAErBia,EAAQja,GAAMgd,eACf1c,EAAW2Z,EAAQja,GAAM+e,gBACxB9E,EAAQja,GAAMmc,eAAiB,KAAOA,GAAiB,KAExD+C,EAAWlf,GAAQ+b,EACf9B,EAAQja,GACRia,EAAQja,GAAM+e,kBAKa,IAAnC7kB,OAAOD,KAAKilB,GAAYxhB,OAxDP,2CAyDV,GAzDU,WAiEhBwhB,EAAW7Q,OACZ6Q,EAAW7Q,KAAO5S,EAAaJ,aAAe,WAK3B,kBAAnBD,GAAyD,eAAnBA,IAEjCgB,EAAK+iB,qBAAsB/iB,EAAKgjB,iBACiB,SAAjD,UAAAhjB,EAAK+iB,0BAAL,mBAAyBJ,oBAAzB,eAAuCM,QACU,SAA9C,UAAAjjB,EAAKgjB,uBAAL,mBAAsBL,oBAAtB,eAAoCM,SAExCH,EAAWI,cAAe,GAMX,eAAnBlkB,EAnFiB,oBAoFjB8jB,EAAWK,mBAAoB,GAE3B3D,EAAS4D,eAAgBpjB,EAAKqjB,MAtFjB,oBAuFPC,EAAmC,CACrC,WACA,gBACA,cACA,YACA,eACA,eACA,oBAICzD,EAAaL,EAAS4D,aAAaC,MAAMV,aAAc3iB,EAAKqjB,MAAMV,cAlG1D,iBAoGTG,EAAWK,mBAAoB,EAEtB5hB,EAAI,EAtGJ,aAsGOA,EAAI+hB,EAAiChiB,QAtG5C,oBAuGDsC,EAAO0f,EAAiC/hB,GAEvCse,EACGL,EAAS4D,aAAaxf,GAAM+e,aAC5B3iB,EAAK4D,GAAM+e,cA3Gd,wBA8GDG,EAAWK,mBAAoB,EA9G9B,6BAsGoD5hB,IAtGpD,2BAyHE,oBAAnBvC,EAzHiB,oBA0HjB8jB,EAAU,OAAaA,EAAU,OAAWhF,QAAO,SAAAla,GAAI,OAAIA,EAAK2f,SAAW,KAGxD,KAFbC,EAAcV,EAAU,OAAWxhB,QA3HxB,0CA8HN,MA9HM,QAgIjBwhB,EAAU,KAAWA,EAAU,KAAS3f,QAAQ,SAAUqgB,GAhIzC,iCAmIdV,GAnIc,4CAAH,qDA0IhBW,GAAc,uCAAG,WAAOX,GAAP,iCAAApiB,EAAA,6DAAmB2hB,EAAnB,+BAA+B,QAA/B,gCAED,UAAdA,EACAqB,EAAgB,QACK,QAAdrB,EACPqB,EAAgB,wBACK,QAAdrB,EACPqB,EAAgB,oBACK,WAAdrB,IACPqB,EAAgB,aATD,SAeK1c,EAAS,CAC7BtE,uBAAwBA,EACxB0E,uCAAuC,EACvC3I,QAASA,EACTwI,aAAyB,QAAX6Y,EAAmB,oBAAsB,oBACvD3Y,MAAOqF,EAAU2B,YACjBjH,SAAS,yBACLwQ,MAAOoL,EAAW7Q,KAClB/S,OAAQwkB,EACRvf,KAAMnF,EACN6I,UAAS,UAAE2E,EAAUwC,uBAAZ,aAAE,EAA2B1R,IACvB,SAAXwiB,GAAqB,CAAE5X,GAAIA,EAAID,aAAcA,IAL7C,IAMJjI,KAAK,eACE8iB,OA5BI,cAefR,EAfe,yBAiCZA,GAjCY,2CAAH,sDAmCdqB,GAAa,uCAAG,WAAOtB,GAAP,qBAAA3hB,EAAA,sEACK8hB,KADL,UACdM,EADc,+DAMlBxC,GAAkB,GANA,SAQMmD,GAAeX,EAAYT,GARjC,WAYK,KAJnBC,EARc,QAYFtZ,SAAmCM,IAAnBgZ,EAAYhlB,GAZ1B,oBAaV0hB,EAAa,gCAAkCsD,EAAYpjB,OAAS,IACpE+f,EAAU,gCAEY,MAAvBqD,EAAYpjB,OAhBD,wBAiBV8f,EAAa,eAjBH,UAkBMsD,EAAY7f,OAlBlB,QAkBVwc,EAlBU,eAqBdqB,GAAkB,GAClBF,EAAyB,CACrBmC,SAAU,IACVvD,WAAYA,EACZC,QAASA,EACTG,eAAgB,gCAChBF,cAAe,MACfJ,UAAW,WACPsB,KAEJjB,cAAe,KACfJ,UAAW,WACPtgB,EAAQsE,KAAK,CAAEwG,SAAU,SAjCnB,wBAqCd+W,GAAkB,GAClBI,IAAc,GACdjiB,EAAQsE,KAAK,CAAEwG,SAAU,MAvCX,4CAAH,sDA0Cb8X,GAAe,uCAAG,8BAAA3gB,EAAA,yDACfsf,EADe,iEAIGwC,KAJH,UAIhBM,EAJgB,+DAShBpgB,GACAqF,QAAQ6b,IAAId,GAVI,UAaIW,GAAeX,EAAY,SAAS,GAbxC,SAeG,KAFnBR,EAbgB,QAeJtZ,SAAmCM,IAAnBgZ,EAAYhlB,GACxCkF,EAAmB,CACfC,KAAM,kCAAoC6f,EAAYpjB,OAAS,IAC/DA,OAAQ,SAEM,QAAX4gB,GACPY,IAAc,GACdjiB,EAAQsE,KAAK,SAAWuf,EAAYhlB,MAEpCkF,EAAmB,CACfC,KAAM,wBAEVgd,EAAY,2BAAKD,GAAN,IAAgBQ,kBAAkB,MA3B7B,4CAAH,qDAsDrB,OAvBA5f,2BAAgB,WACRmgB,IAGJc,OACD,CAAC1gB,IACJP,2BAAgB,WACRmgB,IAGJgB,GAAc,SACf,CAAC1gB,IACJT,2BAAgB,WACRmgB,IAGJgB,GAAc,UACf,CAACxgB,IAOA,kBAAC,IAAM+U,SAAP,KAEI,yBAAKxY,GAAG,oBAGR,kBAAC,IAAD,CACIumB,KAAMpD,GACN3S,QAAS,SAAC5P,GACN,MACe,SAAX4hB,IACCE,GACAG,GACGjiB,EAASqL,WAAa4W,EAAsBoC,UAEhDnC,KACO,IAEPA,EAAyB,CACrBmC,SAAUrkB,EAASqL,SACnByV,WAAY,wBACZC,QAAS,gCACTH,UAAW,WACPrgB,EAAQsE,KAAK7E,EAASqL,WAE1BwV,UAAW,WACPqB,QAGD,MAMnB,kBAAC,EAAD,CAAW9V,YAAa+V,IAGtBF,EACE,kBAAC,GAAD,CACInB,WAAYmB,EAAsBnB,WAClCC,QAASkB,EAAsBlB,QAC/BC,cAAeiB,EAAsBjB,cACrCJ,UAAWqB,EAAsBrB,UACjCK,cAAegB,EAAsBhB,cACrCJ,UAAWoB,EAAsBpB,UACjCK,eAAgBe,EAAsBf,iBARpB,KAad,cAAXlgB,EAAyB,KAAO,kBAAC,GAAD,CAAWmf,YAAY,YAG5C,SAAXyB,GAAgC,UAAX5gB,EAAqB,KACvC,kBAAC,IAAM4W,SAAP,KACI,kBAAC,EAAD,CACIjD,WACKmN,EAEKC,GAA4C,IAA1BA,EAAe3e,OACjC,aACA,OAHA,gBAMVmB,KAAK,gBACLqQ,QAAS,WACL6Q,GAAc,YAGtB,kBAAC,EAAD,CACI9Q,WAAamN,EAAqC,WAAlB,gBAChCvd,KAAK,kBACLqQ,QAAS,WACLsN,EAAyB,CACrBmC,SAAU,IACVvD,WAAY,+BACZC,QAAS,gCACTH,UAAW,WACPrgB,EAAQsE,KAAK,MAEjBgc,UAAW,WACPqB,QAIZrN,gBAAiB,CAAE6B,YAAa,MAMhC,SAAXkL,GACU,UAAX5gB,GACA+gB,GACAA,EAAe3e,OAAS,EACpB,yBAAKoI,UAAU,sBAAsB4J,MAAO,CAAEkJ,UAAW,KAAzD,+KAKA,KAGQ,SAAXsD,GACU,UAAX5gB,GACA+gB,GACAA,EAAe3e,OAAS,EACpB,yBAAKoI,UAAU,sBAAsB4J,MAAO,CAAEkJ,UAAW,GAAIzG,aAAc,KAA3E,qKAII,6BACCkK,EAAe9iB,KAAI,SAAC2mB,GACjB,IAAIC,EAAiB/jB,EAAK8jB,GAAOE,UAEjC,OACI,0BACIngB,IAAKigB,EACLhR,QAAS,WACLyM,EAAsBuE,KAGzBC,OAKjB,KAIQ,SAAXjE,GAAgC,UAAX5gB,EAClB,kBAAC,EAAD,CACI2T,WAAW,MACXpQ,KAAK,kBACLqQ,QAAS,WACLrU,EAAQsE,KAAK,SAAWmF,MAGhC,KAGD+X,GAA4C,IAA1BA,EAAe3e,QACL,IAA/BkL,EAAU4C,kBACC,UAAXlQ,EAuBI,KAtBA,kBAAC,EAAD,CACI2T,WAAW,YACXpQ,KAAiB,SAAXqd,EAAoB,gBAAkB,yBAC5ChN,QAAS,WACLsN,EAAyB,CACrBmC,SAAU,KACVvD,WAAY,6BACZC,QAAS,oDACTH,UAAW,WACQ,SAAXgB,EACAsC,GAAa,OAEbuB,GAAc,OAElBvD,KAEJrB,UAAW,WACPqB,UAQjBH,GAA4C,IAA1BA,EAAe3e,QACL,IAA/BkL,EAAU4C,kBACE,UAAXlQ,GAAiC,0BAAXA,EAuBnB,KAtBA,kBAAC,EAAD,CACI2T,WAAW,YACXpQ,KAAiB,SAAXqd,EAAoB,oBAAsB,6BAChDhN,QAAS,WACLsN,EAAyB,CACrBmC,SAAU,KACVvD,WAAY,+BACZC,QAAS,oDACTH,UAAW,WACQ,SAAXgB,EACAsC,GAAa,OAEbuB,GAAc,OAElBvD,KAEJrB,UAAW,WACPqB,UAQP,UAAXlhB,GACa,0BAAXA,GACW,sBAAXA,GACW,eAAXA,GACO,QAAX4gB,EAAmB,KACf,kBAAC,EAAD,CACIjN,WAAW,UACXpQ,KAAK,oBACLqQ,QAAS,WACLsN,EAAyB,CACrBmC,SAAU,KACVvD,WAAY,4BACZC,QAAS,yCACTH,UAAW,WACPsD,GAAa,UACbhC,KAEJrB,UAAW,WACPqB,UAQpB,yBAAK1W,UAAU,aACX,yBACIA,UAAU,eACVoJ,QAAS,WACL7U,OAAOgmB,UAHf,SAQA,oCACA,yBAAKva,UAAU,gBAAf,UACA,oCACA,yBACIA,UAAU,eACVoJ,QAAS,WAxpBrB7U,OAAO2d,SAAS,CAAEvE,IAAK,EAAG6D,KAAM,EAAGzD,SAAU,aAspBrC,UCjyBHyM,GAAc,SAAC1lB,GAAW,IAC3BwB,EAAmBxB,EAAnBwB,KAAMiT,EAAazU,EAAbyU,SACNoL,EAAgBre,EAAhBqe,YAMR,MAAiB,SAAbpL,EACO,KAGJ,yBAAKvJ,UAAU,iBAAiB2U,ICX9B8F,GAAoBvS,gBAAoB,IAqCtCwS,GAnCc,SAAC,GAAkB,IAAhB3f,EAAe,EAAfA,SACtB4f,EAAe,CACjBC,8BAA0Bhb,GAGxBib,EAAgB,CAClBD,0BAA0B,GANa,EASjB1S,WAAeyS,GATE,mBASpCG,EAToC,KAS7BC,EAT6B,KAiC3C,OAtBAC,qBAAU,WAAM,4CACZ,gCAAAhkB,EAAA,sEAEcikB,EAFd,UAEuB/c,kBAFvB,wBAGcgB,EAAU,CACZ,eAAgB,oBAJ5B,SAO+BF,MAAMic,EAAK,CAAEhc,OAAQ,MAAOC,QAASA,IAPpE,WAOcG,EAPd,QAQsBC,GARtB,sBASkB,IAAIrL,MATtB,mBAYQ8mB,EAZR,UAYuB1b,EAASE,OAZhC,qFAcQwb,EAASF,GAdjB,2DADY,uBAAC,WAAD,wBAmBZK,KACD,IAEI,gBAACT,GAAkBziB,SAAnB,CAA4BC,MAAK,eAAO6iB,IAAU/f,IC9BhDogB,I,OAAkB,SAACrmB,GAAW,IAC/ByU,EAAazU,EAAbyU,SACAzG,EAAcpC,qBAAWM,GAAzB8B,UACAnN,EAAiB+K,qBAAW/L,GAA5BgB,aAOFylB,EANQlT,IAAMxH,WAAW+Z,IAML,yBAA+B,mCAAqC,oCAE9F,MAAiB,SAAblR,EACO,KAGP,yBAAKvJ,UAAU,iBAAf,wDACyD,uBAAGqb,KAAM,UAAYD,EAAe,OAASA,EAAe,kUAAoUzlB,EAAaJ,YAAc,kBAAoBuN,EAAUwC,gBAAgBiD,KAAO,eAAiBzF,EAAUgC,SAAW,sKAAtf,cADzD,+GCrBR,ICCO,IAAMwW,GAAY,SAACxmB,GAAW,IACzBwB,EAAwExB,EAAxEwB,KAAMoe,EAAkE5f,EAAlE4f,QAAS6G,EAAyDzmB,EAAzDymB,WAAYlS,EAA6CvU,EAA7CuU,gBAAiBmS,EAA4B1mB,EAA5B0mB,cAAejS,EAAazU,EAAbyU,SAE/DoL,EAOAre,EAPAqe,YACA2F,EAMAhkB,EANAgkB,UACArB,EAKA3iB,EALA2iB,aACAwC,EAIAnlB,EAJAmlB,gBACAtE,EAGA7gB,EAHA6gB,UACAuE,EAEAplB,EAFAolB,gBACAC,EACArlB,EADAqlB,kBAT4B,EAWSjb,qBAAW/L,GAA5CsF,EAXwB,EAWxBA,iBAAkBO,EAXM,EAWNA,WAXM,EAakBvF,mBAASgkB,GAb3B,mBAazB2C,EAbyB,KAaNC,EAbM,OAcI5mB,oBAAS,GAdb,mBAczB6mB,EAdyB,KAcbC,EAda,KAe1BC,EAAYpM,mBACZqM,EChBK,SAAqBhkB,EAAOiZ,GAAO,MAEFjc,mBAASgD,GAFP,mBAEvCikB,EAFuC,KAEvBC,EAFuB,KAyB9C,OArBAnB,qBACI,WAEI,IAAMoB,EAAUC,YAAW,WAInBF,EAHClkB,GAAmB,KAAVA,EAGQA,EAFA,QAIvBiZ,GAKH,OAAO,WACHc,aAAaoK,MAGrB,CAACnkB,EAAOiZ,IAGLgL,EDTqBI,CAAYV,EAAmB,KAiC3D,OA3BAllB,2BAAgB,WACPolB,GAKDP,EAAW7G,EADXuH,EACoBL,EAEA,MAEzB,CAACK,IAKJvlB,2BAAgB,WACPJ,GAGD2iB,IAAiB2C,GACjBC,EAAqB5C,KAE1B,CAACA,IAKA3iB,EAAK4gB,eAA8B,SAAb3N,EACf,KACa,SAAbA,GAAuBoS,EAE1B,yBAAK3b,UAAU,eACX,6BAAMsa,GACN,6BACI,8BAAOrB,KAOnB,yBACIrlB,GAAI8gB,EACJ1U,UAAW,oBAA8B,OAATmX,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EAAI,QAAU,IAClEgS,MAAOP,GAENiR,EACG,2BACIta,UACI,eACiB,OAAf0b,QAAe,IAAfA,OAAA,EAAAA,EAAiB9jB,QAAS,IAAM4C,EAAWye,KACpC,OAAT9B,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EACd,sBACA,KAGT0iB,GAEL,KACJ,2BACIjI,IAAK2J,EACLO,WAAW,QACXC,YAAY,MACZC,eAAe,MACfC,YAAa/H,EACb1c,MAAO2jB,GAAqB,GAC5Be,OAAQ,WACAnB,GACAA,GAAc,IAGtBoB,QAAS,SAAC5oB,GACFwnB,GACAA,GAAc,GAEbM,GACDC,GAAc,IAGtB9S,SAAU,SAACjV,GACP6nB,EAAqB7nB,EAAE6oB,OAAO5kB,QAGlC6kB,QAAS,SAACC,GACgB,KAAlBA,EAAMpH,SACNqG,EAAU/K,QAAQ+L,UAI7BvB,EAAkB,yBAAKzb,UAAU,iBAAiByb,GAAyB,KAC3EK,IAAuB,OAAT3E,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EAC/B,yBAAKoI,UAAU,kBAAkB/F,EAAiBkd,IAClD,OElHH8F,GAAoB,SAACnoB,GAAW,IACjCwB,EAAwCxB,EAAxCwB,KAAMoe,EAAkC5f,EAAlC4f,QAAS6G,EAAyBzmB,EAAzBymB,WAAYhS,EAAazU,EAAbyU,SAC3BoL,EAAqEre,EAArEqe,YAAa2F,EAAwDhkB,EAAxDgkB,UAAWrB,EAA6C3iB,EAA7C2iB,aAAc9B,EAA+B7gB,EAA/B6gB,UAAWsE,EAAoBnlB,EAApBmlB,gBACjDxhB,EAAqByG,qBAAW/L,GAAhCsF,iBAHgC,EAIMhF,qBAJN,mBAIjCioB,EAJiC,KAIhBC,EAJgB,OAKJloB,oBAAS,GALL,mBAKjC6mB,EALiC,KAKrBC,EALqB,KAMlCC,EAAYpM,mBAMZwN,EAAc,WAChB,IAAIC,EAAgB,OAAGH,QAAH,IAAGA,OAAH,EAAGA,EAAiB1jB,OACxC,GAAK6jB,EAAL,CAIA,IAAIC,EAAkBzmB,IAAEkiB,UAAUE,GAAgB,IAC9CqE,EAAgBhjB,QAAQ+iB,IAAqB,IAI7CC,EAAgBjkB,KAAKgkB,GACrB9B,EAAW7G,EAAS4I,IAHpBH,EAAmB,MAuBrBI,GAAetE,GAAgB,IAAIxlB,KAAI,SAACyG,EAAMC,GAChD,OACI,kBAAC,IAAMiS,SAAP,CAAgBjS,IAAKA,GACjB,yBAAK6F,UAAU,iBAAiB9F,GAChC,yBACI8F,UAAU,cACVa,IAAKC,EAAQ,IACbsI,QAAS,YAlBJ,SAAClP,GAClB,IAAI2Q,GAAYoO,GAAgB,IAAI7E,QAAO,SAACoJ,GACxC,OAAOA,IAAQtjB,KAEnBqhB,EAAW7G,EAAS7J,GAeJ4S,CAAavjB,IAEjB6G,IAAI,SAUpB,OAAIzK,EAAK4gB,eAA8B,SAAb3N,EACf,KACa,SAAbA,EAEH,yBAAKvJ,UAAU,iBACX,6BAAMsa,GACN,6BACMrB,EAEIA,EAAaxlB,KAAI,SAACyG,EAAMC,GACpB,OAAO,0BAAMA,IAAKA,GAAMD,MAF5B,OAUlB,yBACItG,GAAI8gB,EACJ1U,UAAW,0BAAoC,OAATmX,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EAAI,QAAU,KAEvE0iB,EACG,2BACIta,UAAW,eAAyB,OAATmX,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EAAI,sBAAwB,KAE1E0iB,GAEL,KAEHiD,EAAY3lB,OAAS,EAAI2lB,EAAc,KAExC,2BACIlL,IAAK2J,EACLO,WAAW,QACXC,YAAY,MACZC,eAAe,MACfC,YAAa/H,EACb1c,MAAOilB,GAAoC,GAC3CN,QAAS,WACAd,GACDC,GAAc,IAGtB9S,SAAU,SAACjV,GACPmpB,EAAmBnpB,EAAE6oB,OAAO5kB,QAEhC6kB,QAAS,SAACC,GACY,UAAdA,EAAM5iB,KACNijB,IAEkB,KAAlBL,EAAMpH,SACNqG,EAAU/K,QAAQ+L,UAI9B,yBACIhd,UAAU,WACVa,IAAKC,EAAQ,IACbC,IAAI,GACJqI,QAAS,WACLgU,OAGP3B,EAAkB,yBAAKzb,UAAU,iBAAiByb,GAAyB,KAC3EK,IAAuB,OAAT3E,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EAC/B,yBAAKoI,UAAU,kBAAkB/F,EAAiBkd,IAClD,OChIHuG,GAAY,SAAC5oB,GAAW,IAE7BwB,EAQAxB,EARAwB,KACAoe,EAOA5f,EAPA4f,QACA6G,EAMAzmB,EANAymB,WACArF,EAKAphB,EALAohB,iBACA7M,EAIAvU,EAJAuU,gBACAmS,EAGA1mB,EAHA0mB,cACAjS,EAEAzU,EAFAyU,SACAN,EACAnU,EADAmU,SAGA0L,EAUAre,EAVAqe,YACA2F,EASAhkB,EATAgkB,UACArB,EAQA3iB,EARA2iB,aACA0E,EAOArnB,EAPAqnB,YACAC,EAMAtnB,EANAsnB,sBACAnC,EAKAnlB,EALAmlB,gBACAoC,EAIAvnB,EAJAunB,WACA1G,EAGA7gB,EAHA6gB,UACAuE,EAEAplB,EAFAolB,gBACAC,EACArlB,EADAqlB,kBArB4B,EAuBiCjb,qBAAW/L,GAApEsF,EAvBwB,EAuBxBA,iBAAkBO,EAvBM,EAuBNA,WAAYxB,EAvBN,EAuBMA,uBAC9B8J,EAAcpC,qBAAWM,GAAzB8B,UAxBwB,EAyBE7N,oBAAS,GAzBX,mBAyBzB6oB,EAzByB,KAyBdC,EAzBc,OA0BI9oB,oBAAS,GA1Bb,mBA0BzB6mB,EA1ByB,KA0BbC,EA1Ba,OA2BQ9mB,oBAAS,GA3BjB,mBA2BzB+oB,EA3ByB,KA2BXC,EA3BW,OA4BchpB,mBAAS,IA5BvB,mBA4BzBioB,EA5ByB,KA4BRC,EA5BQ,OA6BkBloB,qBA7BlB,mBA6BzBipB,EA7ByB,KA6BNC,GA7BM,KA8B1BnC,GAAYpM,mBACd7a,GAAUC,cAORopB,GAAuBxnB,sBACzBC,IAAEC,SAAF,uCAAW,WAAOmB,GAAP,iBAAAjB,EAAA,sEACasG,EAAS,CACzBtE,uBAAwBA,EACxBjE,QAASA,GACTwI,aAAcqgB,EACdngB,MAAOqF,EAAU2B,YACjBjH,SAAU,CACNvF,MAAOA,EACPkG,UAAS,UAAE2E,EAAUwC,uBAAZ,aAAE,EAA2B1R,MARvC,OACHugB,EADG,OAYH0J,IACA1J,EAAU0J,EAAW,CAAEQ,KAAMlK,KAGjCgK,GAAqBhK,GACrB8J,GAAgB,GAjBT,2CAAX,sDAkBG,KACH,IAEJvnB,2BAAgB,WACPwnB,IAILhI,EAAiBxB,EAASwJ,EAAmB,eAC7CC,QACD,CAACD,IAMJ,IAAMI,IAAmBX,GAAe,IACnCvJ,QACG,SAACmK,GAAD,OACIA,EAAOhF,MACFvf,cACAuJ,SAAS2Z,EAAkBsB,OAAOtB,GAAiBljB,cAAgB,MACvEkjB,KAERzpB,KAAI,SAACyG,EAAMC,GACR,OACI,yBACIA,IAAKA,EACLwP,YAAa,WACNV,GAAUA,EAAS,CAAEsQ,MAAOrf,EAAKqf,MAAOthB,MAAOiC,EAAKjC,QACvDsjB,EAAW7G,EAAS,CAChB6E,MAAOrf,EAAKqf,MACZthB,MAAOiC,EAAKjC,UAInBiC,EAAKqf,UAStB,OAAIjjB,EAAK4gB,eAA8B,SAAb3N,EACf,KACa,SAAbA,GAAuBoS,EAE1B,yBAAK3b,UAAU,eACX,6BAAMsa,GACN,6BACA,8BAAqB,iCAAdA,GAAwE,UAAZ,OAAZrB,QAAY,IAAZA,OAAA,EAAAA,EAAchhB,OAC/DghB,EAAaM,MAAO,gBACpBN,EACAA,EAAaM,MACb,MAQd,yBACI3lB,GAAI8gB,EACJ1U,UAAW,oBAA8B,OAATmX,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EAAI,QAAU,IAClEgS,MAAOP,GAENiR,EACG,2BACIta,UACI,eACiB,OAAf0b,QAAe,IAAfA,OAAA,EAAAA,EAAiB9jB,QAAS,IAAM4C,EAAWye,KACpC,OAAT9B,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EACd,sBACA,KAGT0iB,GAEL,KAEA,kBAAC,IAAMlO,SAAP,KACI,2BACIiG,IAAK2J,GACLO,WAAW,QACXC,YAAY,MACZC,eAAe,MACfC,YAAa/H,EACb1c,MACI6lB,EACMZ,GACY,OAAZjE,QAAY,IAAZA,OAAA,EAAAA,EAAcM,OACdN,EAAaM,MACb,GAEVoD,OAAQ,WACJoB,GAAa,GACTvC,GACAA,GAAc,IAGtBoB,QAAS,WACLmB,GAAa,GACRjC,GACDC,GAAc,GAEdP,GACAA,GAAc,GAElB2B,EAAmB,IACfS,IACAK,GAAgB,GAChBG,GAAqB,MAG7BnV,SAAU,SAACjV,GACP,IAAIyqB,EAAMzqB,EAAE6oB,OAAO5kB,MACnBklB,EAAmBsB,GACfb,IACAK,GAAgB,GAChBG,GAAqBK,OAIjC,yBAAKze,UAAU,iBAAiBa,IAAKC,EAAQ,KAAsBC,IAAI,KACvE,yBACIf,UAAU,yBAETge,EACG,4CAEJM,GAAgB1mB,OAAS,EACrB0mB,GAEA,oDAGP7C,EACG,yBAAKzb,UAAU,iBAAiByb,GAChC,KACHK,IAAuB,OAAT3E,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EAC/B,yBAAKoI,UAAU,kBAAkB/F,EAAiBkd,IAClD,QCzMXuH,GAAoB,SAAC5pB,GAAW,IACjCwB,EAA0DxB,EAA1DwB,KAAMoe,EAAoD5f,EAApD4f,QAAS6G,EAA2CzmB,EAA3CymB,WAAYhS,EAA+BzU,EAA/ByU,SAAU2M,EAAqBphB,EAArBohB,iBAEzCvB,EASAre,EATAqe,YACA2F,EAQAhkB,EARAgkB,UACArB,EAOA3iB,EAPA2iB,aACA0E,EAMArnB,EANAqnB,YACAC,EAKAtnB,EALAsnB,sBACAnC,EAIAnlB,EAJAmlB,gBACAtE,EAGA7gB,EAHA6gB,UACAuE,EAEAplB,EAFAolB,gBACAmC,EACAvnB,EADAunB,WAXoC,EAayBnd,qBAAW/L,GAApEsF,EAbgC,EAahCA,iBAAkBO,EAbc,EAadA,WAAYxB,EAbE,EAaFA,uBAC9B8J,EAAcpC,qBAAWM,GAAzB8B,UAdgC,EAeA7N,oBAAS,GAfT,mBAejC+oB,EAfiC,KAenBC,EAfmB,OAgBMhpB,qBAhBN,mBAgBjCioB,EAhBiC,KAgBhBC,EAhBgB,OAiBJloB,oBAAS,GAjBL,mBAiBjC6mB,EAjBiC,KAiBrBC,EAjBqB,OAkBU9mB,qBAlBV,mBAkBjCipB,EAlBiC,KAkBdC,EAlBc,KAmBlCnC,EAAYpM,mBACd7a,EAAUC,cAiDRopB,EAAuBxnB,sBACzBC,IAAEC,SAAF,uCAAW,WAAOmB,GAAP,iBAAAjB,EAAA,sEACasG,EAAS,CACzBtE,uBAAwBA,EACxBjE,QAASA,EACTwI,aAAcqgB,EACdngB,MAAOqF,EAAU2B,YACjBjH,SAAU,CACNvF,MAAOA,EACPkG,UAAS,UAAE2E,EAAUwC,uBAAZ,aAAE,EAA2B1R,MARvC,OACHugB,EADG,OAYH0J,IACA1J,EAAU0J,EAAW,CAAEQ,KAAMlK,KAGjCgK,EAAqBhK,GACrB8J,GAAgB,GAjBT,2CAAX,sDAkBG,KACH,IAEJvnB,2BAAgB,WACPwnB,IAILhI,EAAiBxB,EAASwJ,EAAmB,eAC7CC,OACD,CAACD,IAMJ,IAAMI,GAAmBX,GAAe,IACnCvJ,QACG,SAACmK,GAAD,OACIA,EAAOhF,MACFvf,cACAuJ,SAAS2Z,EAAkBsB,OAAOtB,GAAiBljB,cAAgB,MACvEkjB,KAERzpB,KAAI,SAACyG,EAAMC,GACR,OACI,yBACIA,IAAKA,EACLwP,YAAa,YA1FX,SAACgV,GACf,GAAKA,EAAL,CAIA,IAAIpF,EAAQoF,EAAIpF,MACZthB,EAAQ0mB,EAAI1mB,MACZ4S,EAAW,GACX+T,EAAyB,GAE5B3F,GAAgB,IAAI9S,SAAQ,SAAC0Y,GAC1BhU,EAASxR,KAAKwlB,MAGlBhU,EAAS1E,SAAQ,SAACjM,GACVA,EAAKqf,QAAUA,GAASrf,EAAKjC,QAAUA,GACvC2mB,OAIuB,IAA3BA,IACA/T,EAASxR,KAAK,CAAEkgB,MAAOA,EAAOthB,MAAOA,IACrCsjB,EAAW7G,EAAS7J,IAExBsS,EAAmB,KAmEH2B,CAAU,CAAEvF,MAAOrf,EAAKqf,MAAOthB,MAAOiC,EAAKjC,UAG9CiC,EAAKqf,UAShBwF,GAAkB9F,GAAgB,IAAIxlB,KAAI,SAACyG,EAAMC,GACnD,OACI,kBAAC,IAAMiS,SAAP,CAAgBjS,IAAKA,GACjB,yBAAK6F,UAAU,iBAAiB9F,EAAKqf,OACrC,yBACIvZ,UAAU,cACVa,IAAKC,EAAQ,IACb6I,YAAa,YA/ER,SAACzP,GAClB,IAAM2Q,EAAWoO,EAAa7E,QAAO,SAACoJ,GAClC,OAAOA,EAAIvlB,QAAUiC,EAAKjC,OAASulB,EAAIjE,QAAUrf,EAAKqf,SAE1DgC,EAAW7G,EAAS7J,GA4EJ4S,CAAavjB,IAEjB6G,IAAI,SAUpB,MAAiB,SAAbwI,EAEI,yBAAKvJ,UAAU,iBACX,6BAAMsa,GACN,6BACMrB,EAEIA,EAAaxlB,KAAI,SAACyG,EAAMrC,GACpB,OAAO,0BAAMsC,IAAKtC,GAAIqC,EAAKqf,UAF/B,OASlB,yBAAK3lB,GAAI8gB,EAAS1U,UAAW,oBAA8B,OAATmX,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EAAI,QAAU,KAC/E0iB,EACG,2BACIta,UACI,eACiB,OAAf0b,QAAe,IAAfA,OAAA,EAAAA,EAAiB9jB,QAAS,IAAM4C,EAAWye,KACpC,OAAT9B,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EACd,sBACA,KAGT0iB,GAEL,KAEHyE,EAAennB,OAAS,EAAImnB,EAAiB,KAE9C,2BACI1M,IAAK2J,EACLO,WAAW,QACXC,YAAY,MACZC,eAAe,MACfC,YAAa/H,EACb1c,MAAOilB,GAAoC,GAC3CN,QAAS,WACLO,EAAmB,IACdrB,GACDC,GAAc,GAEd6B,IACAK,GAAgB,GAChBG,EAAqB1J,EAAS,MAGtCzL,SAAU,SAACjV,GACP,IAAIyqB,EAAMzqB,EAAE6oB,OAAO5kB,MACnBklB,EAAmBsB,GACfb,IACAK,GAAgB,GAChBG,EAAqB1J,EAAS+J,OAK1C,yBAAKze,UAAU,iBAAiBa,IAAKC,EAAQ,KAAsBC,IAAI,KACvE,yBAAKf,UAAU,yBACVge,EACG,4CAEJM,EAAgB1mB,OAAS,EACrB0mB,EAEA,oDAIP7C,EAAkB,yBAAKzb,UAAU,iBAAiByb,GAAyB,KAC3EK,IAAuB,OAAT3E,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EAC/B,yBAAKoI,UAAU,kBAAkB/F,EAAiBkd,IAClD,OCjOH6H,GAAY,SAAClqB,GAAW,IACzBwB,EAA0DxB,EAA1DwB,KAAMoe,EAAoD5f,EAApD4f,QAAS6G,EAA2CzmB,EAA3CymB,WAAYrF,EAA+BphB,EAA/BohB,iBAAkB3M,EAAazU,EAAbyU,SAC7C+Q,EAAqEhkB,EAArEgkB,UAAWrB,EAA0D3iB,EAA1D2iB,aAAcwC,EAA4CnlB,EAA5CmlB,gBAAiBtE,EAA2B7gB,EAA3B6gB,UAAWwG,EAAgBrnB,EAAhBqnB,YACrD1jB,EAAqByG,qBAAW/L,GAAhCsF,iBAEFglB,EAAQ,IAAIC,KACZC,EAAWF,EAAMG,UACjBC,EAAaJ,EAAMK,WACnBC,EAAYN,EAAMO,cARQ,EAUEvqB,oBAAS,GAVX,mBAUzB6oB,EAVyB,KAUdC,EAVc,OAWI9oB,oBAAS,GAXb,mBAWzB6mB,EAXyB,KAWbC,EAXa,KAgB1B0D,EAAmB,WAChB3D,GACDC,GAAc,IAStBrlB,2BAAgB,WAAO,IAAD,MACdgpB,EAAiB,CACjBC,MAAOhC,EAAYgC,MACnBC,KAAMjC,EAAYiC,MAGlBC,EAAU,GACVC,EAAc,GAClB,UAAI7G,QAAJ,IAAIA,GAAJ,UAAIA,EAAc0G,aAAlB,aAAI,EAAqB1nB,MACrB,OAAQghB,EAAa0G,MAAM1nB,OACvB,IAAK,IAEG6nB,EADAC,SAAQ,OAAC9G,QAAD,IAACA,GAAD,UAACA,EAAc2G,YAAf,aAAC,EAAoB3nB,OAAS,IAAM,EAC9B,GAEA,GAElB,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACD6nB,EAAc,GAK1B,IAAK,IAAIjoB,EAAI,EAAGA,EAAIioB,EAAc,EAAGjoB,IACjCgoB,EAAQxmB,KAAK,CAAEkgB,MAAO1hB,EAAI,GAAII,MAAOJ,EAAI,KAE7C6nB,EAAeM,IAAMH,EACrB3J,EAAiBxB,EAASgL,EAAgB,gBAC1B,OAAZzG,QAAY,IAAZA,GAAA,UAAAA,EAAc+G,WAAd,eAAmB/nB,OAAQ6nB,GAC3BvE,EAAW7G,EAAD,YAAC,eAAcuE,GAAf,IAA6B+G,IAAK,UAEjD,CAAC/G,IAMJ,IAcMgH,EAAmB,SAAC3F,EAAW4F,GACf,QAAd5F,EACAiB,EAAW7G,EAAD,YAAC,eACJuE,GADG,IAEN+G,IAAKE,KAEY,UAAd5F,EACPiB,EAAW7G,EAAD,YAAC,eACJuE,GADG,IAEN0G,MAAOO,KAEU,SAAd5F,GACPiB,EAAW7G,EAAD,YAAC,eACJuE,GADG,IAEN2G,KAAMM,MAQlB,MAAiB,SAAb3W,EAEI,yBAAKvJ,UAAU,eACX,6BAAMsa,GACN,6BACI,8BACKrB,EACKA,EAAa+G,IAAIzG,MACjB,IACAN,EAAa0G,MAAMpG,MACnB,IACAN,EAAa2G,KAAKrG,MAClB,MAQtB,yBACI3lB,GAAI8gB,EACJ1U,UAAW,oBAAsBmX,GAAaA,EAAUvf,OAAS,EAAI,QAAU,KAE9E0iB,EACG,2BACIta,UACI,cACCmX,GAAaA,EAAUvf,OAAS,EAAI,sBAAwB,KAGhE0iB,GAEL,KAEJ,yBAAKta,UAAU,4BACX,kBAAC,GAAD,CACI0U,QAAS,MACT6G,WAAY0E,EACZ3pB,KAAM,CACFqe,YAAa,MACbwL,WAAY,GACZxC,aAAwB,OAAXA,QAAW,IAAXA,OAAA,EAAAA,EAAaqC,KAAMrC,EAAYqC,IAAM,KAClD/G,cAA0B,OAAZA,QAAY,IAAZA,OAAA,EAAAA,EAAc+G,KAAM/G,EAAa+G,IAAM,MAEzD3W,gBAAiB,CAAEgD,aAAc,IACjCmP,cAAe,SAACtH,GACZ6J,EAAa7J,GACTA,GACAuL,OAIZ,kBAAC,GAAD,CACI/K,QAAS,QACT6G,WAAY0E,EACZ3pB,KAAM,CACFqe,YAAa,QACbwL,WAAY,GACZxC,aAAwB,OAAXA,QAAW,IAAXA,OAAA,EAAAA,EAAagC,OAAQhC,EAAYgC,MAAQ,KACtD1G,cAA0B,OAAZA,QAAY,IAAZA,OAAA,EAAAA,EAAc0G,OAAQ1G,EAAa0G,MAAQ,MAE7DtW,gBAAiB,CAAEgD,aAAc,IACjCmP,cAAe,SAACtH,GACZ6J,EAAa7J,GACTA,GACAuL,OAIZ,kBAAC,GAAD,CACI/K,QAAS,OACT6G,WAAY0E,EACZ3pB,KAAM,CACFqe,YAAa,OACbwL,WAAY,GACZxC,aAAwB,OAAXA,QAAW,IAAXA,OAAA,EAAAA,EAAaiC,MAAOjC,EAAYiC,KAAO,KACpD3G,cAA0B,OAAZA,QAAY,IAAZA,OAAA,EAAAA,EAAc2G,MAAO3G,EAAa2G,KAAO,MAE3DvW,gBAAiB,CAAEgD,aAAc,IACjCmP,cAAe,SAACtH,GACZ6J,EAAa7J,GACTA,GACAuL,QAMfhE,EACG,yBAAKzb,UAAW8d,EAAY,mBAAqB,iBAC5CrC,GAEL,KACHK,GAAc3E,GAAaA,EAAUvf,OAAS,EAC3C,yBAAKoI,UAAU,kBAAkB/F,EAAiBkd,IAClD,KACJ,0BACInX,UAAU,eACV4J,MAAO,CAAEiJ,WAAY,IACrBzJ,QAAS,WAvIjB2S,GAAc,GACdR,EAAW7G,EAAS,CAChBsL,IAAK,CAAE/nB,MAAOknB,EAAW,GAAI5F,MAAO4F,EAAW,IAC/CQ,MAAO,CACH1nB,MAAOonB,EAAa,EAAI,GACxB9F,MAAOoE,EAAYgC,MAAMN,GAAY9F,OAEzCqG,KAAM,CAAE3nB,MAAOsnB,EAAY,GAAIhG,MAAOgG,EAAY,QA6HlD,W,UC3MNa,GAA6B,SAGtBC,GAAe,SAACvrB,GAAW,IAC5BlB,EAAwBkB,EAAxBlB,GAAIqE,EAAoBnD,EAApBmD,MAAOgR,EAAanU,EAAbmU,SADgB,EAGXhU,mBAASgD,GAAS,IAHP,mBAG5Bc,EAH4B,KAGtBunB,EAHsB,KAanC,OAAO,2BAAO7lB,KAAK,OAAOxC,MAAOc,EAAMkQ,SARlB,SAAC8T,GAClB,IAAMwD,EAAUxD,EAAMF,OAAO5kB,MAAMwB,QAAQ2mB,GARnC,IAURE,EAAQC,GAEJtX,GAAUA,EAASrV,EAAI2sB,OCVtBC,I,OAAa,SAAC1rB,GAAW,IAC1BwB,EAAwCxB,EAAxCwB,KAAMoe,EAAkC5f,EAAlC4f,QAAS6G,EAAyBzmB,EAAzBymB,WAAYhS,EAAazU,EAAbyU,SAE/B+Q,EAMAhkB,EANAgkB,UACArB,EAKA3iB,EALA2iB,aACAwC,EAIAnlB,EAJAmlB,gBACAkC,EAGArnB,EAHAqnB,YACAxG,EAEA7gB,EAFA6gB,UACAuE,EACAplB,EADAolB,gBAEIzhB,EAAqByG,qBAAW/L,GAAhCsF,iBAVyB,EAYGhF,oBAAS,GAZZ,mBAY1B6mB,EAZ0B,KAYdC,EAZc,OAaC9mB,oBAAS,GAbV,mBAa1B6oB,EAb0B,KAafC,EAbe,KAkB3B0B,EAAmB,WAChB3D,GACDC,GAAc,IAOhBkE,EAAmB,SAAC3F,EAAW4F,EAAYO,GACxCA,IACDA,EAAW,gBAGG,UAAdnG,EACAiB,EAAW7G,EAAD,YAAC,eACJuE,GADG,IAENyH,MAAOR,KAEU,SAAd5F,GACPiB,EAAW7G,EAAD,YAAC,eACJuE,GADG,IAEN0H,KAAMT,MASlB,OAAI5pB,EAAK4gB,eAA8B,SAAb3N,EACf,KACa,SAAbA,EAEH,yBAAKvJ,UAAU,eACX,6BAAMsa,GACN,6BACI,+BACiB,OAAZrB,QAAY,IAAZA,OAAA,EAAAA,EAAcyH,SAAd,OAAuBzH,QAAvB,IAAuBA,OAAvB,EAAuBA,EAAc0H,MAChC1H,EAAayH,MAAQ,IAAMzH,EAAa0H,KAAKpH,MAC7C,MAQtB,yBAAK3lB,GAAI8gB,EAAS1U,UAAW,qBAA+B,OAATmX,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EAAI,QAAU,KAChF0iB,EACG,2BACIta,UACI,iBACgB,OAAf0b,QAAe,IAAfA,OAAA,EAAAA,EAAiB9jB,QAAS,IAClB,OAATuf,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,IAClBqhB,GAAiBA,EAAa0H,MAAS1H,EAAayH,MAEhD,GADA,wBAITpG,GAEL,KAEJ,yBAAKta,UAAU,4BACX,yBAAK4J,MAAO,CAAEyH,MAAO,QACjB,kBAAC,GAAD,CACIqD,QAAS,QACT6G,WAAY0E,EACZ1W,SAAUA,EACVjT,KAAM,CACFqe,YAAa,QACbwL,WAAY,GACZlH,aAAY,OAAEA,QAAF,IAAEA,OAAF,EAAEA,EAAcyH,OAEhCrX,gBAAiB,CAAEgD,aAAc,GACjCmP,cAAe,SAACtH,GACZ6J,EAAa7J,GACTA,GACAuL,QAKhB,yBAAK7V,MAAO,CAAEyH,MAAO,QACN,yBAAdiJ,EAEG,0BACIta,UAAU,cACVoJ,QAAS,WACLmS,EAAW7G,EAAD,YAAC,eACJuE,GADG,IAENyH,MAAO,GACPC,KAAM,QANlB,SAYF,KACE,kBAAC,GAAD,CACIjM,QAAS,OACT6G,WAAY0E,EACZ1W,SAAUA,EACVjT,KAAM,CACFqe,YAAa,OACbwL,WAAY,GACZxC,YAAaA,EACb1E,aAAY,OAAEA,QAAF,IAAEA,OAAF,EAAEA,EAAc0H,MAEhCtX,gBAAiB,CAAEgD,aAAc,GACjCmP,cAAe,SAACtH,GACZ6J,EAAa7J,GACTA,GACAuL,SAOnBhE,EACG,yBAAKzb,UAAW8d,EAAY,mBAAqB,iBAC5CrC,GAEL,KACHK,IAAuB,OAAT3E,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EAC/B,yBAAKoI,UAAU,kBAAkB/F,EAAiBkd,IAClD,QCrJHxL,GAAc,SAAC7W,GAAW,IAC3BwB,EAAyDxB,EAAzDwB,KAAMoe,EAAmD5f,EAAnD4f,QAAS6G,EAA0CzmB,EAA1CymB,WAAYlS,EAA8BvU,EAA9BuU,gBAAiBE,EAAazU,EAAbyU,SAEhD+Q,EAOAhkB,EAPAgkB,UACArB,EAMA3iB,EANA2iB,aACA0E,EAKArnB,EALAqnB,YACAlC,EAIAnlB,EAJAmlB,gBACAtE,EAGA7gB,EAHA6gB,UACAuE,EAEAplB,EAFAolB,gBACAC,EACArlB,EADAqlB,kBAT8B,EAWOjb,qBAAW/L,GAA5CsF,EAX0B,EAW1BA,iBAAkBO,EAXQ,EAWRA,WAXQ,EAYEvF,oBAAS,GAZX,mBAY3B6mB,EAZ2B,KAYfC,EAZe,KAkBlC,MAAiB,SAAbxS,GAAuBoS,EAEnB,yBAAK3b,UAAU,eACX,6BAAMsa,GACN,6BACI,8BAAOrB,EAAeA,EAAaM,MAAQ,MAOvD,yBACI3lB,GAAI8gB,EACJ1U,UAAW,gBAA0B,OAATmX,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EAAI,QAAU,IAC9DgS,MAAOP,EACPwF,YAAa,WACJiN,GACDC,GAAc,KAIrBzB,EACG,2BACIta,UACI,eACiB,OAAf0b,QAAe,IAAfA,OAAA,EAAAA,EAAiB9jB,QAAS,IAAM4C,EAAWye,KACpC,OAAT9B,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EACd,sBACA,KAGT0iB,GAEL,KAEHqD,EAAYlqB,KAAI,SAACyG,EAAMC,GACpB,OACI,2BAAO6F,UAAU,uBAAuB7F,IAAKA,GACzC,2BACIM,KAAK,QACL8N,KAAMmM,EACN1L,SAAqB,OAAZiQ,QAAY,IAAZA,OAAA,EAAAA,EAAchhB,SAAUiC,EAAKjC,MACtCgR,SAAU,WACNsS,EAAW7G,EAAS,CAChB6E,MAAOrf,EAAKqf,MACZthB,MAAOiC,EAAKjC,WAIxB,6BAAMiC,EAAKqf,OACX,0BAAMvZ,UAAU,6BAK3Byb,EAAkB,yBAAKzb,UAAU,iBAAiByb,GAAyB,KAC3EK,IAAuB,OAAT3E,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EAC/B,yBAAKoI,UAAU,kBAAkB/F,EAAiBkd,IAClD,OC3EHyJ,GAAY,SAAC9rB,GAAW,IACzBwB,EAAyDxB,EAAzDwB,KAAMoe,EAAmD5f,EAAnD4f,QAAS6G,EAA0CzmB,EAA1CymB,WAAYlS,EAA8BvU,EAA9BuU,gBAAiBE,EAAazU,EAAbyU,SAC5C+Q,EAAwDhkB,EAAxDgkB,UAAWrB,EAA6C3iB,EAA7C2iB,aAAcwC,EAA+BnlB,EAA/BmlB,gBAAiBtE,EAAc7gB,EAAd6gB,UAFlB,EAGSzW,qBAAW/L,GAA5CsF,EAHwB,EAGxBA,iBAAkBO,EAHM,EAGNA,WAHM,EAKIvF,oBAAS,GALb,mBAKzB6mB,EALyB,KAKbC,EALa,KAO1B8E,EAAgBjR,mBAChB8Q,EAAQ9Q,mBAyEd,MAAiB,SAAbrG,EAEI,yBAAKvJ,UAAU,eACX,6BAAMsa,GACN,8BACiB,OAAZrB,QAAY,IAAZA,OAAA,EAAAA,EAAcC,SACX,uBACImC,KAAM,WAAapC,EAAaC,QAChClZ,UAAU,eACV6c,OAAO,SACPiE,IAAI,sBACJlX,MAAO,CAAEmX,cAAe,SAEvB9H,EAAaM,OAElB,OAMhB,yBACI3lB,GAAI8gB,EACJ1U,UAAW,qBAA+B,OAATmX,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EAAI,QAAU,IACnEgS,MAAOP,EACPwF,YAAa,WACJiN,GACDC,GAAc,KAIrBzB,EACG,2BACIta,UAAW,eAAyB,OAATmX,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EAAI,sBAAwB,KAE1E0iB,GAEL,KAEJ,2BACI7f,KAAK,OACLumB,SAAS,WACT3O,IAAKqO,EACLzX,SAAU,SAACjV,IA/GE,SAACA,GACtB,IAAIitB,EAAQ,GACRjtB,EAAE6oB,OAAOoE,QACTA,EAAQjtB,EAAE6oB,OAAOoE,MACjB1F,EAAW7G,EAAS,CAChB6E,MAAO0H,EAAM,GAAG1Y,KAChBtQ,MAAOgpB,EAAM,GAAG1Y,KAChB3J,UAAWqiB,KAyGPC,CAAiBltB,MAGzB,2BACIqe,IAAKwO,EACLM,QAAST,EACT1gB,UAAU,2BACVohB,YAAa,WACTP,EAAc5P,QAAQoQ,UAAUC,OAAO,cAE3CC,YAAa,WACTV,EAAc5P,QAAQoQ,UAAUC,OAAO,cAE3CxS,WAAY,WACR+R,EAAc5P,QAAQoQ,UAAUtb,OAAO,cAE3Cyb,OAAQ,SAACxtB,IAzGH,SAACA,GACfA,EAAEme,iBACFne,EAAEytB,kBACF,IAAIR,EAAQ,GACRjtB,EAAE0tB,aAAaT,QACfA,EAAQjtB,EAAE0tB,aAAaT,MACvB1F,EAAW7G,EAAS,CAChB6E,MAAO0H,EAAM,GAAG1Y,KAChBtQ,MAAOgpB,EAAM,GAAG1Y,KAChB3J,UAAWqiB,KAiGPU,CAAU3tB,IAEd4tB,WAAY,SAAC5tB,IA3FP,SAACA,GACfA,EAAEme,iBA2FU0P,CAAU7tB,KAGZwG,EAAWye,GAaT,6BAtGQ,SAAC1Q,GACrB,GAAIA,EAAK3Q,OAAS,GAAI,CAClB,IAAIkqB,EAAOvZ,EAAKzN,MAAM,KAClBinB,EAAWD,EAAK,GAChBE,EAAWF,EAAKA,EAAKlqB,OAAS,GAQlC,OANImqB,EAASlnB,UAAU,EAAG,IACtB,UACAknB,EAASlnB,UAAUknB,EAASnqB,OAAS,GAAImqB,EAASnqB,QAClD,IACAoqB,EAIJ,OAAOzZ,EAyFM0Z,EAA4B,OAAZhJ,QAAY,IAAZA,OAAA,EAAAA,EAAcM,QAAS,IAD5C,OAGI,0BACIvZ,UAAU,eACVoJ,QAAS,WAzI7BsX,EAAMzP,QAAQhZ,MAAQ,KACtBsjB,EAAW7G,EAAS,QAsIJ,WAfJ,0DAEI,0BACI1U,UAAU,eACVoJ,QAAS,WACLsX,EAAMzP,QAAQiR,UAHtB,YAyBXpG,GAAcL,EACX,yBAAKzb,UAAU,iBAAiByb,GAChC,KACHK,IAAuB,OAAT3E,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,EAC/B,yBAAKoI,UAAU,kBAAkB/F,EAAiBkd,IAClD,OCxLHgL,GAAgB,SAACrtB,GAAW,IAAD,gCAC5BstB,EAA6DttB,EAA7DstB,WAAY1N,EAAiD5f,EAAjD4f,QAAS3O,EAAwCjR,EAAxCiR,OAAQwD,EAAgCzU,EAAhCyU,SAAUoS,EAAsB7mB,EAAtB6mB,kBAK/C,OACI,yBAAK3b,UAAU,mBACG,SAAbuJ,GAAuBoS,EAAoB,KACxC,yBACI3b,UAAU,cACVa,IAAKC,EAAQ,IACbC,IAAI,GACJqI,QAAS,WACLrD,EAAO,CAAE2O,QAASA,OAK9B,6BACI,4BAAc,OAAV0N,QAAU,IAAVA,GAAA,UAAAA,EAAYC,sBAAZ,mBAA4BpJ,oBAA5B,eAA0CM,QAAS,GAAvD,MAEJ,6BACI,qCADJ,KAC6B,OAAV6I,QAAU,IAAVA,GAAA,UAAAA,EAAYE,YAAZ,mBAAkBrJ,oBAAlB,eAAgCM,QAAS,IAE5D,6BACI,qCADJ,KAC6B,OAAV6I,QAAU,IAAVA,GAAA,UAAAA,EAAYG,YAAZ,mBAAkBtJ,oBAAlB,eAAgCM,QAAS,IAE5D,6BACI,qDACY,OAAV6I,QAAU,IAAVA,GAAA,UAAAA,EAAYI,iBAAZ,mBAAuBvJ,oBAAvB,eAAqCyH,QAAS,IAC5C,MACW,OAAV0B,QAAU,IAAVA,GAAA,UAAAA,EAAYI,iBAAZ,mBAAuBvJ,oBAAvB,mBAAqC0H,YAArC,eAA2CpH,QAAS,KAE7D,6BACI,uDACY,OAAV6I,QAAU,IAAVA,GAAA,UAAAA,EAAYK,mBAAZ,mBAAyBxJ,oBAAzB,eAAuCyH,QAAS,IAC9C,MACW,OAAV0B,QAAU,IAAVA,GAAA,UAAAA,EAAYK,mBAAZ,mBAAyBxJ,oBAAzB,mBAAuC0H,YAAvC,eAA6CpH,QAAS,OCpC9DmJ,GAAc,SAAC5tB,GAAW,IAC3BwB,EAA0ExB,EAA1EwB,KAAMoe,EAAoE5f,EAApE4f,QAASrL,EAA2DvU,EAA3DuU,gBAAiBE,EAA0CzU,EAA1CyU,SAAUoZ,EAAgC7tB,EAAhC6tB,4BAC1CxL,EAA+C7gB,EAA/C6gB,UAAWwE,EAAoCrlB,EAApCqlB,kBAAmB1C,EAAiB3iB,EAAjB2iB,aAC9Bhf,EAAqByG,qBAAW/L,GAAhCsF,iBAKR,OAAK3D,GAAQA,IAAS,GAId,yBAAK1C,GAAI8gB,EAAS9K,MAAOP,GAEnB4P,GAA6B,SAAb1P,EAEb0P,GAAsB7kB,OAAO0W,QAAQmO,GAAcrhB,OAAS,EAC7DxD,OAAO0W,QAAQmO,GAAcxlB,KAAI,YAAkB,IAAD,mBAAf0G,EAAe,KAAVD,EAAU,KAC9C,OACI,kBAAC,GAAD,CACIqP,SAAUA,EACVoS,kBAAmBA,EACnBxhB,IAAKA,EACLua,QAASva,EACTioB,WAAYloB,EACZ6L,OAAQ,SAAC6c,GACLD,EAA4BC,SAV5B,KADhB,yBAAKhZ,MAAO,CAAEiJ,WAAY,KAA1B,gCAmBM,OAATsE,QAAS,IAATA,OAAA,EAAAA,EAAWvf,QAAS,GAAkB,SAAb2R,IAA6C,IAAtBoS,EAC7C,yBAAK3b,UAAU,oBAAoB4J,MAAO,CAAEyC,aAAc,KACrDpS,EAAiBkd,IAEtB,MA7BL,MCXF0L,GAAU,SAAC/tB,GAAW,IAAD,gCACtBstB,EAAettB,EAAfstB,WAKR,OACI,yBAAKpiB,UAAU,mBACX,6BACI,4BACe,OAAVoiB,QAAU,IAAVA,GAAA,UAAAA,EAAYU,gBAAZ,mBAAsB7J,oBAAtB,eAAoCyH,OACjC,KADH,OAEG0B,QAFH,IAEGA,GAFH,UAEGA,EAAYU,gBAFf,iBAEG,EAAsB7J,oBAFzB,iBAEG,EAAoC0H,YAFvC,aAEG,EAA0CpH,SAGtD,6BACI,+CADJ,OAEK6I,QAFL,IAEKA,GAFL,UAEKA,EAAYW,qBAFjB,iBAEK,EAA2B9J,oBAFhC,aAEK,EAAyCM,OAE9C,6BACI,oDADJ,OAEK6I,QAFL,IAEKA,GAFL,UAEKA,EAAYY,mBAFjB,aAEK,EAAyB/J,cAE9B,6BACI,2CADJ,OAEKmJ,QAFL,IAEKA,GAFL,UAEKA,EAAYa,iBAFjB,aAEK,EAAuBhK,cAE5B,6BACI,8CADJ,OAEKmJ,QAFL,IAEKA,GAFL,UAEKA,EAAYc,oBAFjB,iBAEK,EAA0BjK,oBAF/B,aAEK,EAAwCM,OAE7C,6BACI,8CADJ,OAEK6I,QAFL,IAEKA,GAFL,UAEKA,EAAYe,oBAFjB,iBAEK,EAA0BlK,oBAF/B,aAEK,EAAwCM,OAE7C,6BACI,kDADJ,OAEK6I,QAFL,IAEKA,GAFL,UAEKA,EAAYgB,wBAFjB,iBAEK,EAA8BnK,oBAFnC,aAEK,EAA4CM,OAEjD,6BACI,iDADJ,OAEK6I,QAFL,IAEKA,GAFL,UAEKA,EAAYzI,aAFjB,aAEK,EAAmBV,gBCvCvBoK,GAAQ,SAACvuB,GAAW,IACrBwB,EAA0ExB,EAA1EwB,KAAMoe,EAAoE5f,EAApE4f,QAASrL,EAA2DvU,EAA3DuU,gBAAiBE,EAA0CzU,EAA1CyU,SAAUoZ,EAAgC7tB,EAAhC6tB,4BAC1CxL,EAA+C7gB,EAA/C6gB,UAAWwE,EAAoCrlB,EAApCqlB,kBAAmB1C,EAAiB3iB,EAAjB2iB,aAC9Bhf,EAAqByG,qBAAW/L,GAAhCsF,iBAKR,OAAI3D,IAAS,GACF,KAGH,yBAAK1C,GAAI8gB,EAAS9K,MAAOP,GAEnB4P,GAA6B,SAAb1P,EAEb0P,GAAsB7kB,OAAO0W,QAAQmO,GAAcrhB,OAAS,EAC7DxD,OAAO0W,QAAQmO,GAAcxlB,KAAI,YAAkB,IAAD,mBAAf0G,EAAe,KAAVD,EAAU,KAC9C,OACI,kBAAC,GAAD,CACIC,IAAKA,EACLua,QAASva,EACToP,SAAUA,EACV6Y,WAAYloB,EACZ6L,OAAQ,SAAC6c,GACLD,EAA4BC,SAT5B,KADhB,yBAAKhZ,MAAO,CAAEiJ,WAAY,KAA1B,yBAkBHsE,GACDA,EAAUvf,OAAS,GACN,SAAb2R,IACsB,IAAtBoS,EACI,yBAAK3b,UAAU,oBAAoB4J,MAAO,CAAEyC,aAAc,KACrDpS,EAAiBkd,IAEtB,OCrCPmM,GAAgB,SAACxuB,GAC1B,IAAIqiB,EAAY,0BACRkH,EAAyBvpB,EAAzBupB,KAAMhoB,EAAmBvB,EAAnBuB,eACd,IAAKgoB,EACD,OAAOlH,EAEX,IAAIoM,EAAaltB,EAAegoB,GAEhC,MAAmB,UAAfkF,GAAyC,WAAfA,EACtBlF,EAAKzmB,OAAS,GAGPuf,EAEW,WAAfoM,IACHnvB,OAAOD,KAAKkqB,GAAMzmB,OAAS,GAGpBuf,IAYNqM,GAAyB,SAAC1uB,GACnC,IAAIqiB,EAAY,0BACRkH,EAAqCvpB,EAArCupB,KAAMhoB,EAA+BvB,EAA/BuB,eAEd,GAF6CvB,EAAf2uB,WAG1B,OAAO,EAGX,IAAKpF,EACD,OAAOlH,EAEX,IAAIoM,EAAaltB,EAAegoB,GAEhC,MAAmB,UAAfkF,GAAyC,WAAfA,EACtBlF,EAAKzmB,OAAS,GAGPuf,EAEW,WAAfoM,IACHnvB,OAAOD,KAAKkqB,GAAMzmB,OAAS,GAGpBuf,IAYNuM,GAAoB,SAAC5uB,GAI9B,QAFiBA,EAATupB,MADQ,0BAedY,GAAQ,IAAIC,KACZC,GAAWF,GAAMG,UACjBC,GAAaJ,GAAMK,WACnBC,GAAYN,GAAMO,cACXmE,GAAuB,SAAC7uB,GACjC,IAAIqiB,EAAY,yCACRkH,EAASvpB,EAATupB,KAEFuF,EAAc,SAAC3rB,GACjB,OAAQ,IAAMA,GAAO4rB,OAAO,IAGhC,OAAKxF,GAAQxnB,IAAEitB,QAAQzF,EAAKuB,OAAS/oB,IAAEitB,QAAQzF,EAAKsB,QAAU9oB,IAAEitB,QAAQzF,EAAK2B,KAClE7I,IAGOje,OACdmlB,EAAKuB,KAAK3nB,MACN,GACA2rB,EAAYvF,EAAKsB,MAAM1nB,OAEvB2rB,EAAYvF,EAAK2B,IAAI/nB,QAEbiB,OACZqmB,GACI,GACAqE,EAAYvE,GAAa,GAEzBuE,EAAYzE,OAIThI,GAWF4M,GAAoB,SAACjvB,GAC9B,IACQupB,EAASvpB,EAATupB,KAER,OAAKA,MAK4B,IAA7BjqB,OAAOD,KAAKkqB,GAAMzmB,QACjBymB,EAAKqC,OACLrC,EAAKsC,MACLtC,EAAKsC,KAAK1oB,OACVomB,EAAKsC,KAAKpH,QAZC,2BAyBPyK,GAA6B,SAAClvB,GACvC,IACQupB,EAAqBvpB,EAArBupB,KAER,QAF6BvpB,EAAf2uB,aAMTpF,MAK4B,IAA7BjqB,OAAOD,KAAKkqB,GAAMzmB,QACjBymB,EAAKqC,OACLrC,EAAKsC,MACLtC,EAAKsC,KAAK1oB,OACVomB,EAAKsC,KAAKpH,QAhBC,4BA6BP0K,GAAkB,SAACnvB,GAC5B,IAMQktB,EANJ7K,EAAY,uCACRkH,EAASvpB,EAATupB,KAER,OAAKA,IAAUA,EAAKzf,WAAcyf,EAAKnF,UAI/BmF,EAAKzf,UACLojB,EAAW3D,EAAKzf,UAAU,GAAG2J,KAAKzN,MAAM,KACjCujB,EAAKnF,UACZ8I,EAAW3D,EAAK9E,MAAMze,MAAM,MAGf,SADjBknB,EAAWA,EAASA,EAASpqB,OAAS,GAAGoC,gBACF,SAAbgoB,GAAoC,QAAbA,GAGtC7K,GAZJA,GA0CF+M,GAAe,SAACpvB,GACzB,IAAIqiB,EAAY,2CACRkH,EAASvpB,EAATupB,KAER,OAAKA,KAID,uBAAuBniB,KAAKmiB,IAHrBlH,GAeFgN,GAA0B,SAACrvB,GACpC,IAAIqiB,EAAY,gCACRkH,EAASvpB,EAATupB,KAER,OAAKA,GAGDjqB,OAAOD,KAAKkqB,GAAMzmB,OAAS,GAFpBuf,GAcFiN,GAA2B,SAACtvB,GACrC,IACQupB,EAASvpB,EAATupB,KAER,OAAKA,GAGDjqB,OAAOD,KAAKkqB,GAAMzmB,OAAS,GANf,0BAkBNysB,GAAmB,SAACvvB,GAC9B,IAAIqiB,EAAY,kEACRkH,EAASvpB,EAATupB,KACR,IAAKA,EACD,OAAOlH,EAEX,IAAImN,GAAc,EA4BlB,OA1BAjG,EAAKlY,SAAQ,SAACjM,GACV,IAAKA,GAAQA,EAAKtC,OAAS,IAAMsC,EAAKtC,OAAS,KAAQ,QAAQsE,KAAKhC,GAChEoqB,GAAc,OACZ,GAAGpqB,GAAwB,KAAhBA,EAAKtC,QAAiC,KAAhBsC,EAAKtC,QAAkB,QAAQsE,KAAKhC,GAAO,CAC9E,IAAIqqB,EAAYrrB,OAAOgB,EAAKW,UAAUX,EAAKtC,OAAS,IAEpD,GAAI4sB,MAAMD,GAAc,OAAO,EAK/B,IAHA,IAAI5F,EAAMzkB,EAAKW,UAAU,EAAEX,EAAKtC,OAAS,GAAGkD,MAAM,IAAI2pB,UAClDC,EAAW,EAAGC,EAAY,EAErB9sB,EAAE,EAAGA,EAAE8mB,EAAI/mB,OAAQC,IAAK,CAC/B,GAAI2sB,MAAM7F,EAAI9mB,IAAO,OAAO,EAExBA,EAAI,IAAM,EAAK6sB,GAA6B,EAAjBxrB,OAAOylB,EAAI9mB,IACnC8sB,GAAazrB,OAAOylB,EAAI9mB,KAErB,IAAO8sB,EAAYD,GAAY,IAAO,KAGlCH,IACZD,GAAc,QAKrBA,GAGMnN,GAUFyN,GAA6B,SAAC9vB,GAAW,IAC1CupB,EAASvpB,EAATupB,KACJlK,EAAU,GAKd,OAJAkK,EAAK/nB,KAAK7C,KAAI,SAACyG,GAEX,OADAia,EAAQ9a,KAAK,CAAEkgB,MAAOrf,EAAKqO,KAAMtQ,MAAOiC,EAAKtG,KACtC,QAEJugB,GAgDG0Q,GAAsB,SAAC/vB,GACjC,IACQupB,EAASvpB,EAATupB,KAER,OAAIA,GAAQA,EAAKqC,QAAUrC,EAAKsC,KAHhB,4BAKPtC,IAASA,EAAKqC,OAASrC,EAAKsC,OALrB,2BAkBNmE,GAAiB,SAAChwB,GAC7B,IACQupB,EAAQvpB,EAARupB,KAER,QAAGA,GAAuB,KAAfA,EAAKqC,QAAkB,WAAWxkB,KAAKmiB,EAAKqC,SAHvC,0BAcLqE,GAAgB,SAACjwB,GAC3B,IACQupB,EAAQvpB,EAARupB,KAER,QAAGA,GAAuB,KAAfA,EAAKqC,QAAkB,qBAAqBxkB,KAAKmiB,EAAKqC,SAHjD,6BAePsE,GAAwB,SAAClwB,GAClC,IAAIqiB,EAAY,yCACRkH,EAASvpB,EAATupB,KAER,OAAKA,IAAUA,EAAKzf,WAAcyf,EAAKnF,YAIpCmF,EAAKzf,aAAcyf,EAAKzf,UAAU,GAAGqmB,KAAO,GAAK5G,EAAKzf,UAAU,GAAGqmB,KAAO,YAHlE9N,GfhcToI,IADQ,IAAIL,MACMM,cAClB0F,GAAW,GACRrtB,GAAI,EAAGA,GAAI,EAAGA,KACnBqtB,GAAS7rB,KAAK,CACVkgB,MAAOgG,GAAY1nB,GAAI,GACvBI,MAAOsnB,GAAY1nB,GAAI,KAI/B,IADA,IAAMgoB,GAAU,GACPhoB,GAAI,EAAGA,GAAI,GAAQA,KACxBgoB,GAAQxmB,KAAK,CAAEkgB,MAAO1hB,GAAI,GAAII,MAAOJ,GAAI,KAGtC,IAAMstB,GAAqB,CAC9BxF,MAAO,CACH,CAAEpG,MAAO,MAAOthB,MAAO,KACvB,CAAEshB,MAAO,MAAOthB,MAAO,KACvB,CAAEshB,MAAO,MAAOthB,MAAO,KACvB,CAAEshB,MAAO,MAAOthB,MAAO,KACvB,CAAEshB,MAAO,MAAOthB,MAAO,KACvB,CAAEshB,MAAO,MAAOthB,MAAO,KACvB,CAAEshB,MAAO,MAAOthB,MAAO,KACvB,CAAEshB,MAAO,MAAOthB,MAAO,KACvB,CAAEshB,MAAO,MAAOthB,MAAO,KACvB,CAAEshB,MAAO,MAAOthB,MAAO,MACvB,CAAEshB,MAAO,MAAOthB,MAAO,MACvB,CAAEshB,MAAO,MAAOthB,MAAO,OAE3B2nB,KAAMsF,GACNlF,IAAKH,IAGIuF,GAAU,CACnB,CAAEntB,MAAO,KAAMshB,MAAO,kBACtB,CAAEthB,MAAO,MAAOshB,MAAO,OACvB,CAAEthB,MAAO,KAAMshB,MAAO,OAGb8L,GAAQ,CACjB,CAAEptB,MAAO,MAAOshB,MAAO,OACvB,CAAEthB,MAAO,KAAMshB,MAAO,OAGb+L,GAAY,CACrB,CAAErtB,OAAO,EAAMshB,MAAO,QACtB,CAAEthB,OAAO,EAAOshB,MAAO,UgBEdnO,GAAa,SAAC,GAAD,IAAEma,EAAF,EAAEA,aAAcC,EAAhB,EAAgBA,eAAgBC,EAAhC,EAAgCA,SAAUC,EAA1C,EAA0CA,yBAA0BC,EAApE,EAAoEA,iBAAkBC,EAAtF,EAAsFA,aAActD,EAApG,EAAoGA,KAAMuD,EAA1G,EAA0GA,MAAOC,EAAjH,EAAiHA,gBAAjH,MAAuI,CAC7JC,eAAgB,CACZC,YAAY,EACZC,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,WAEjBpM,KAAM,CACF0d,kBAAmB,YACnBC,cAAe5K,GACfhB,UAAW,eACX3F,YAAa,oBACb8G,gBACI,6JACJC,gBAAiB,CAAC4H,KAEtB6C,WAAY,CACRF,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,cACX3F,YAAa,uBACbiJ,sBAAuB,UACvBC,WAAY+G,GACZnJ,gBAAgB,wPAChBC,gBAAiB,CAAC4H,KAEtB8C,YAAa,CACTH,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,cACX3F,YAAa,kBACbgJ,YAAa4H,EACb9J,gBAAiB,yEACjBC,gBAAiB,CAAC4H,KAEtBkC,eAAgB,CACZS,kBAAmB,oBACnBC,cAAexH,GACfpE,UAAW,kBACX3F,YAAa,kBACbgJ,YAAa6H,EACb/J,gBAAiB,yEACjBC,gBAAiB,CAAC4H,KAOtB+C,uBAAwB,CACpBL,YAAY,EACZC,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,kBAEjB2R,yBAA0B,CACtBL,kBAAmB,cACnBC,cAAe1L,GACf7F,YACI,0MAER4R,cAAe,CACXN,kBAAmB,YACnBC,cAAelH,GACf1E,UAAW,iBACXqD,YAAawH,GACb1J,gBACI,4KACJC,gBAAiB,CAACgI,GAAmBC,KAOzC6C,qBAAsB,CAClBR,YAAY,EACZC,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,eAEjB8R,uBAAwB,CACpBR,kBAAmB,cACnBC,cAAe1L,GACf7F,YACI,qJAER+R,0BAA2B,CACvBT,kBAAmB,kBACnBC,cAAe/K,IAGnBwL,YAAa,CACTV,kBAAmB,cACnBC,cAAexD,GACfpI,UAAW,cACXoB,gBAAiB,CAACyI,IAClBxB,4BAA6B,SAAC5rB,EAAK6rB,GAC/B,IAAItsB,EAAOS,EAAIT,KACX2a,EAAUpa,IAAE+vB,KAAKtwB,EAAKqwB,YAAY1N,aAAc2J,EAAelO,SAE/DtgB,OAAOD,KAAK8c,GAASrZ,OAAS,EAC9Bb,EAAI8vB,QAAJ,2BACOvwB,GADP,IAEIqwB,YAAY,2BACLrwB,EAAKqwB,aADD,IAEP1N,aAAchI,EACdkG,UAAWpgB,EAAI+vB,UAAU,cAAe7V,QAIhDla,EAAI8vB,QAAJ,2BACOvwB,GADP,IAEIqwB,YAAY,2BACLrwB,EAAKqwB,aADD,IAEP1N,aAAchI,EACdkG,UAAWpgB,EAAI+vB,UAAU,cAAe7V,KAE5C8V,qBAAqB,2BACdzwB,EAAKywB,sBADQ,IAEhBtD,YAAY,IAEhBuD,oBAAoB,2BACb1wB,EAAK0wB,qBADO,IAEfvD,YAAY,IAEhBnB,KAAK,2BACEhsB,EAAKgsB,MADR,IAEAmB,YAAY,IAEhBpB,eAAe,2BACR/rB,EAAK+rB,gBADE,IAEVoB,YAAY,IAEhBlB,KAAK,2BACEjsB,EAAKisB,MADR,IAEAkB,YAAY,IAEhBjB,UAAU,2BACHlsB,EAAKksB,WADH,IAELiB,YAAY,IAEhBhB,YAAY,2BACLnsB,EAAKmsB,aADD,IAEPgB,YAAY,SAMhCpB,eAAgB,CACZ4D,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,kBACX3F,YAAa,6BACbiJ,sBAAuB,kBACvBC,WAAY+G,GACZlJ,gBAAiB,CAAC4H,IAClB7H,gBAAiB,kEACjBvE,eAAe,EACfuM,YAAY,GAEhBnB,KAAM,CACF2D,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,0CACX3F,YAAa,kBACb+G,gBAAiB,CAAC4H,IAClB3F,YAAa2E,EACb7G,gBACI,yVACJvE,eAAe,EACfuM,YAAY,EACZxa,SAAU,SAAClS,EAAKkwB,GACZ,IAAI3wB,EAAOS,EAAIT,KAEfA,EAAKisB,KAAL,2BACOjsB,EAAKisB,MADZ,IAEItJ,aAAc,KAEdyC,gBAA4C,SAA3BuL,EAAiBhvB,MAAmB,KAAO,CAACqrB,MAEjEhtB,EAAKisB,KAAKpL,UAAYpgB,EAAI+vB,UAAU,OAAQ,QAGpDvE,KAAM,CACF0D,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,qCACX3F,YAAa,6BACbiJ,sBAAuB,kBACvBC,WAAY+G,GACZlJ,gBAAiB,CAAC4H,IAClB7H,gBACI,6LACJvE,eAAe,EACfuM,YAAY,GAEhBjB,UAAW,CACPyD,kBAAmB,aACnBC,cAAe1F,GACflG,UAAW,qBACX3F,YAAa,kBACb+G,gBAAiB,CAACqI,GAAkBgB,IACpCpH,YAAakI,EACbpK,gBACI,8GACJvE,eAAe,EACfuM,YAAY,GAEhBhB,YAAa,CACTwD,kBAAmB,aACnBC,cAAe1F,GACflG,UAAW,uBACX3F,YAAa,kBACb+G,gBAAiB,CAACmJ,GAAoBE,IACtCpH,YAAakI,EACbpK,gBACI,0SACJvE,eAAe,EACfuM,YAAY,EACZtM,UAAW,IAEf4P,qBAAsB,CAClBd,kBAAmB,SACnBC,cAAehd,EACfua,YAAY,EACZvM,eAAe,EACfne,KAAM,kBACNoQ,WAAY,WACZC,QAAS,SAACrS,EAAK6rB,GAAoB,IAAD,oBAC1BtsB,EAAOS,EAAIT,KACf,GACgD,KAAxC,OAAJA,QAAI,IAAJA,GAAA,UAAAA,EAAM+rB,sBAAN,mBAAsBlL,iBAAtB,eAAiCvf,SACC,KAA9B,OAAJtB,QAAI,IAAJA,GAAA,UAAAA,EAAMgsB,YAAN,mBAAYnL,iBAAZ,eAAuBvf,SACW,KAA9B,OAAJtB,QAAI,IAAJA,GAAA,UAAAA,EAAMisB,YAAN,mBAAYpL,iBAAZ,eAAuBvf,SACgB,KAAnC,OAAJtB,QAAI,IAAJA,GAAA,UAAAA,EAAMksB,iBAAN,mBAAiBrL,iBAAjB,eAA4Bvf,SACa,KAArC,OAAJtB,QAAI,IAAJA,GAAA,UAAAA,EAAMmsB,mBAAN,mBAAmBtL,iBAAnB,eAA8Bvf,QALlC,CAUA,IAAIsvB,EAA0B,2BACvB5wB,EAAKqwB,YAAY1N,cADM,kBAEzB3iB,EAAK+rB,eAAepJ,aAAahhB,MAAQ,CACtCoqB,eAAgB,CAAEpJ,aAAc3iB,EAAK+rB,eAAepJ,cACpDqJ,KAAM,CAAErJ,aAAc3iB,EAAKgsB,KAAKrJ,cAChCsJ,KAAM,CAAEtJ,aAAc3iB,EAAKisB,KAAKtJ,cAChCuJ,UAAW,CAAEvJ,aAAc3iB,EAAKksB,UAAUvJ,cAC1CwJ,YAAa,CAAExJ,aAAc3iB,EAAKmsB,YAAYxJ,iBAIjDliB,EAAI+e,SAASQ,kBACdvf,EAAIgf,YAAJ,2BAAqBhf,EAAI+e,UAAzB,IAAmCQ,kBAAkB,KAGzDvf,EAAI8vB,QAAJ,2BACOvwB,GADP,IAEIqwB,YAAY,2BACLrwB,EAAKqwB,aADD,IAEP1N,aAAciO,EACd/P,UAAWpgB,EAAI+vB,UAAU,cAAeI,KAE5CH,qBAAqB,2BACdzwB,EAAKywB,sBADQ,IAEhBtD,YAAY,IAEhBuD,oBAAoB,2BACb1wB,EAAK0wB,qBADO,IAEfvD,YAAY,IAEhBnB,KAAK,2BACEhsB,EAAKgsB,MADR,IAEArJ,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,OAAQ,MACjCrD,YAAY,IAEhBpB,eAAe,2BACR/rB,EAAK+rB,gBADE,IAEVpJ,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,iBAAkB,MAC3CrD,YAAY,IAEhBlB,KAAK,2BACEjsB,EAAKisB,MADR,IAEAtJ,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,OAAQ,MACjCrD,YAAY,IAEhBjB,UAAU,2BACHlsB,EAAKksB,WADH,IAELvJ,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,YAAa,MACtCrD,YAAY,IAEhBhB,YAAY,2BACLnsB,EAAKmsB,aADD,IAEPxJ,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,cAAe,MACxCrD,YAAY,UAK5BuD,oBAAqB,CACjBf,kBAAmB,SACnBC,cAAehd,EACfua,YAAY,EACZvM,eAAe,EACfne,KAAM,iBACNqQ,QAAS,SAACrS,EAAK6rB,GACX,IAAItsB,EAAOS,EAAIT,KAEfS,EAAI8vB,QAAJ,2BACOvwB,GADP,IAEIywB,qBAAqB,2BACdzwB,EAAKywB,sBADQ,IAEhBtD,YAAY,IAEhBuD,oBAAoB,2BACb1wB,EAAK0wB,qBADO,IAEfvD,YAAY,IAEhBnB,KAAK,2BACEhsB,EAAKgsB,MADR,IAEAmB,YAAY,IAEhBpB,eAAe,2BACR/rB,EAAK+rB,gBADE,IAEVoB,YAAY,IAEhBlB,KAAK,2BACEjsB,EAAKisB,MADR,IAEAkB,YAAY,IAEhBjB,UAAU,2BACHlsB,EAAKksB,WADH,IAELiB,YAAY,IAEhBhB,YAAY,2BACLnsB,EAAKmsB,aADD,IAEPgB,YAAY,SAU5B0D,oBAAqB,CACjBnB,YAAY,EACZC,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,cAEjByS,eAAgB,CACZnB,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,kBACX3F,YAAa,kBACbgJ,YAAa8H,EACbhK,gBAAiB,gEAErB4L,kBAAmB,CACfpB,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,sBACX3F,YAAa,kBACbgJ,YAAayH,GACb3J,gBAAiB,+BACjBC,gBAAiB,CAAC4H,KAEtBgE,wBAAyB,CACrBrB,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,4BACX3F,YAAa,kBACbgJ,YAAayH,GACb3J,gBACI,4HACJC,gBAAiB,CAAC4H,KAEtBiE,iBAAkB,CACdtB,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,qBACX3F,YAAa,kBACbgJ,YAAayH,GACb3J,gBACI,mGACJC,gBAAiB,CAAC4H,KAEtBkE,eAAgB,CACZvB,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,mBACX3F,YAAa,kBACbgJ,YAAayH,GACb3J,gBACI,mGACJC,gBAAiB,CAAC4H,KAOtBmE,iBAAkB,CACdzB,YAAY,EACZC,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,mBAEjB+S,uBAAwB,CACpBzB,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,2BACX3F,YAAa,kBACbgJ,YAAa+H,EACbjK,gBACI,wLACJC,gBAAiB,CAAC4H,KAEtBqE,0BAA2B,CACvB1B,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,8BACX3F,YAAa,kBACbgJ,YAAagI,EACblK,gBAAiB,sEACjBC,gBAAiB,CAAC4H,KAEtBsE,2BAA4B,CACxB3B,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,+BACX3F,YAAa,kBACbgJ,YAAaiI,EACbnK,gBACI,iKACJC,gBAAiB,CAAC4H,KAEtBuE,wBAAyB,CACrB5B,kBAAmB,cACnBC,cAAeva,GACf2O,UAAW,4BACX3F,YAAa,kBACbgJ,YAAa0H,GACb5J,gBACI,0GACJC,gBAAiB,CAAC4H,KAOtBwE,eAAgB,CACZ9B,YAAY,EACZC,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,gBAEjBoT,iBAAkB,CACd9B,kBAAmB,cACnBC,cAAe1L,GACf7F,YACI,6GAERqT,MAAO,CACHhC,YAAY,EACZC,kBAAmB,QACnBC,cAAe7C,GACf/I,UAAW,QACXoB,gBAAiB,CAAC0I,IAClBzB,4BAA6B,SAAC5rB,EAAK6rB,GAC/B,IAAItsB,EAAOS,EAAIT,KACX2a,EAAUpa,IAAE+vB,KAAKtwB,EAAK0xB,MAAM/O,aAAc2J,EAAelO,SAEzDtgB,OAAOD,KAAK8c,GAASrZ,OAAS,EAC9Bb,EAAI8vB,QAAJ,2BACOvwB,GADP,IAEI0xB,MAAM,2BACC1xB,EAAK0xB,OADP,IAED/O,aAAchI,EACdkG,UAAWpgB,EAAI+vB,UAAU,QAAS7V,QAI1Cla,EAAI8vB,QAAJ,2BACOvwB,GADP,IAEI0xB,MAAM,2BACC1xB,EAAK0xB,OADP,IAED/O,aAAchI,EACdkG,UAAWpgB,EAAI+vB,UAAU,QAAS7V,KAEtCgX,eAAe,2BACR3xB,EAAK2xB,gBADE,IAEVxE,YAAY,IAEhByE,cAAc,2BACP5xB,EAAK4xB,eADC,IAETzE,YAAY,IAGhBX,SAAS,2BACFxsB,EAAKwsB,UADJ,IAEJW,YAAY,IAEhBV,cAAc,2BACPzsB,EAAKysB,eADC,IAETU,YAAY,IAEhBT,YAAY,2BACL1sB,EAAK0sB,aADD,IAEPS,YAAY,IAEhBR,UAAU,2BACH3sB,EAAK2sB,WADH,IAELQ,YAAY,IAEhBP,aAAa,2BACN5sB,EAAK4sB,cADA,IAERO,YAAY,IAEhBN,aAAa,2BACN7sB,EAAK6sB,cADA,IAERM,YAAY,IAEhBL,iBAAiB,2BACV9sB,EAAK8sB,kBADI,IAEZK,YAAY,IAEhB9J,MAAM,2BACCrjB,EAAKqjB,OADP,IAED8J,YAAY,SAMhCX,SAAU,CACNmD,kBAAmB,aACnBC,cAAe1F,GACflG,UAAW,WACX3F,YAAa,kBACb+G,gBAAiB,CAACqI,GAAkBe,IACpCrJ,gBACI,wTACJkC,YAAakI,EACb3O,eAAe,EACfuM,YAAY,GAEhBV,cAAe,CACXkD,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,iBACX3F,YAAa,kBACb+G,gBAAiB,CAAC4H,IAClB3F,YAAamI,EACb5O,eAAe,EACfuM,YAAY,EACZhI,gBACI,gIAERuH,YAAa,CACTiD,kBAAmB,YACnBC,cAAe5K,GACfhB,UAAW,sBACX3F,YAAa,OACb+G,gBAAiB,CAAC4H,IAClBpM,eAAe,EACfuM,YAAY,EACZhI,gBACI,qRAERwH,UAAW,CACPgD,kBAAmB,oBACnBC,cAAejJ,GACf3C,UAAW,aACX3F,YAAa,eACb+G,gBAAiB,CAAC4H,GAAee,IACjCnN,eAAe,EACfuM,YAAY,EACZhI,gBACI,kIAERyH,aAAc,CACV+C,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,gBACX3F,YAAa,kBACb+G,gBAAiB,CAAC4H,IAClB3F,YAAa0H,GACbnO,eAAe,EACfuM,YAAY,EACZhI,gBACI,mIAER0H,aAAc,CACV8C,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,gBACX3F,YAAa,kBACb+G,gBAAiB,CAAC4H,IAClB3F,YAAa0H,GACbnO,eAAe,EACfuM,YAAY,EACZhI,gBACI,oFAER2H,iBAAkB,CACd6C,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,oBACX3F,YAAa,kBACb+G,gBAAiB,CAAC4H,IAClB3F,YAAa0H,GACbnO,eAAe,EACfuM,YAAY,EACZhI,gBACI,uLAER9B,MAAO,CACHsM,kBAAmB,YACnBC,cAAe5K,GACfhB,UAAW,mBACX3F,YAAa,OACb+G,gBAAiB,CAAC4H,GAAeY,IACjChN,eAAe,EACfuM,YAAY,EACZhI,gBACI,2PAERwM,eAAgB,CACZhC,kBAAmB,SACnBC,cAAehd,EACfua,YAAY,EACZvM,eAAe,EACfne,KAAM,YACNoQ,WAAY,WACZC,QAAS,SAACrS,EAAK6rB,GACX,IAAItsB,EAAOS,EAAIT,KAqBf,KAnBuB,CACnB,WACA,gBACA,cACA,YACA,eACA,eACA,mBACA,SAG+B6xB,QAAO,SAACC,EAAO7f,GAC9C,IAAM8f,EAAQ/xB,EAAKiS,GACb4O,EAAS,OAAGkR,QAAH,IAAGA,OAAH,EAAGA,EAAOlR,UAGzB,OAAOiR,IAFgB,OAATjR,QAAS,IAATA,OAAA,EAAAA,EAAWvf,SAAU,KAGpC,GAEe,GAAlB,CAIA,IAAI0wB,EAAoB,2BACjBhyB,EAAK0xB,MAAM/O,cADM,kBAEnB3iB,EAAKwsB,SAAS7J,aAAayH,MAAQ,GAAKpqB,EAAKwsB,SAAS7J,aAAa0H,KAAKpH,MAAQ,CAC7EuJ,SAAU,CAAE7J,aAAc3iB,EAAKwsB,SAAS7J,cACxC8J,cAAe,CAAE9J,aAAc3iB,EAAKysB,cAAc9J,cAClD+J,YAAa,CAAE/J,aAAc3iB,EAAK0sB,YAAY/J,cAC9CgK,UAAW,CAAEhK,aAAc3iB,EAAK2sB,UAAUhK,cAC1CiK,aAAc,CAAEjK,aAAc3iB,EAAK4sB,aAAajK,cAChDkK,aAAc,CAAElK,aAAc3iB,EAAK6sB,aAAalK,cAChDmK,iBAAkB,CAAEnK,aAAc3iB,EAAK8sB,iBAAiBnK,cACxDU,MAAO,CAAEV,aAAc3iB,EAAKqjB,MAAMV,iBAIrCliB,EAAI+e,SAASQ,kBACdvf,EAAIgf,YAAJ,2BAAqBhf,EAAI+e,UAAzB,IAAmCQ,kBAAkB,KAGzDvf,EAAI8vB,QAAJ,2BACOvwB,GADP,IAEI0xB,MAAM,2BACC1xB,EAAK0xB,OADP,IAED/O,aAAcqP,EACdnR,UAAWpgB,EAAI+vB,UAAU,QAASwB,KAEtCL,eAAe,2BACR3xB,EAAK2xB,gBADE,IAEVxE,YAAY,IAEhByE,cAAc,2BACP5xB,EAAK4xB,eADC,IAETzE,YAAY,IAGhBX,SAAS,2BACFxsB,EAAKwsB,UADJ,IAEJ7J,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,WAAY,MACrCrD,YAAY,IAEhBV,cAAc,2BACPzsB,EAAKysB,eADC,IAET9J,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,gBAAiB,MAC1CrD,YAAY,IAEhBT,YAAY,2BACL1sB,EAAK0sB,aADD,IAEP/J,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,cAAe,MACxCrD,YAAY,IAEhBR,UAAU,2BACH3sB,EAAK2sB,WADH,IAELhK,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,YAAa,MACtCrD,YAAY,IAEhBP,aAAa,2BACN5sB,EAAK4sB,cADA,IAERjK,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,eAAgB,MACzCrD,YAAY,IAEhBN,aAAa,2BACN7sB,EAAK6sB,cADA,IAERlK,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,eAAgB,MACzCrD,YAAY,IAEhBL,iBAAiB,2BACV9sB,EAAK8sB,kBADI,IAEZnK,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,mBAAoB,MAC7CrD,YAAY,IAEhB9J,MAAM,2BACCrjB,EAAKqjB,OADP,IAEDV,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,QAAS,MAClCrD,YAAY,UAK5ByE,cAAe,CACXjC,kBAAmB,SACnBC,cAAehd,EACfua,YAAY,EACZvM,eAAe,EACfne,KAAM,WACNqQ,QAAS,SAACrS,EAAK6rB,GACX,IAAItsB,EAAOS,EAAIT,KAEfS,EAAI8vB,QAAJ,2BACOvwB,GADP,IAEI2xB,eAAe,2BACR3xB,EAAK2xB,gBADE,IAEVxE,YAAY,IAEhByE,cAAc,2BACP5xB,EAAK4xB,eADC,IAETzE,YAAY,IAGhBX,SAAS,2BACFxsB,EAAKwsB,UADJ,IAEJW,YAAY,IAEhBV,cAAc,2BACPzsB,EAAKysB,eADC,IAETU,YAAY,IAEhBT,YAAY,2BACL1sB,EAAK0sB,aADD,IAEPS,YAAY,IAEhBR,UAAU,2BACH3sB,EAAK2sB,WADH,IAELQ,YAAY,IAEhBP,aAAa,2BACN5sB,EAAK4sB,cADA,IAERO,YAAY,IAEhBN,aAAa,2BACN7sB,EAAK6sB,cADA,IAERM,YAAY,IAEhBL,iBAAiB,2BACV9sB,EAAK8sB,kBADI,IAEZK,YAAY,IAEhB9J,MAAM,2BACCrjB,EAAKqjB,OADP,IAED8J,YAAY,SAU5B8E,cAAe,CACXvC,YAAY,EACZC,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,aAEjBqE,SAAU,CACNiN,kBAAmB,YACnBC,cAAetF,GACftG,UAAW,YACXoB,gBAAiB,CAACuI,GAAiBe,OAQ9B3Z,GAAU,SAAC,GAAD,IAAEwa,EAAF,EAAEA,MAAOC,EAAT,EAASA,gBAAT,MAA+B,CAClDC,eAAgB,CACZE,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,WAEjB6T,eAAgB,CACZvC,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,kBACX3F,YAAa,2BACbiJ,sBAAuB,UACvBC,WAAY+G,GACZnJ,gBACI,6JACJC,gBAAiB,CAAC4H,KAOtB+C,uBAAwB,CACpBJ,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,kBAEjB2R,yBAA0B,CACtBL,kBAAmB,cACnBC,cAAe1L,GACf7F,YACI,0MAER4R,cAAe,CACXN,kBAAmB,YACnBC,cAAelH,GACf1E,UAAW,iBACXqD,YAAawH,GACb1J,gBACI,4KACJC,gBAAiB,CAACgI,GAAmBC,KAMzC8E,qBAAsB,CAClBxC,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,gBAEjBmO,SAAU,CACNmD,kBAAmB,aACnBC,cAAe1F,GACflG,UAAW,WACX3F,YAAa,kBACb+G,gBAAiB,CAACqI,GAAkBe,IACpCrJ,gBACI,wTACJkC,YAAakI,GAEjB9C,cAAe,CACXkD,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,iBACX3F,YAAa,kBACb+G,gBAAiB,CAAC4H,IAClB3F,YAAamI,EACbrK,gBACI,gIAERuH,YAAa,CACTiD,kBAAmB,YACnBC,cAAe5K,GACfhB,UAAW,sBACX3F,YAAa,OACb+G,gBAAiB,CAAC4H,IAClB7H,gBACI,qRAERwH,UAAW,CACPgD,kBAAmB,oBACnBC,cAAejJ,GACf3C,UAAW,aACX3F,YAAa,eACb+G,gBAAiB,CAAC4H,GAAee,IACjC5I,gBACI,kIAERyH,aAAc,CACV+C,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,gBACX3F,YAAa,kBACb+G,gBAAiB,CAAC4H,IAClB3F,YAAa0H,GACb5J,gBACI,mIAER0H,aAAc,CACV8C,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,gBACX3F,YAAa,kBACb+G,gBAAiB,CAAC4H,IAClB3F,YAAa0H,GACb5J,gBACI,oFAER2H,iBAAkB,CACd6C,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,oBACX3F,YAAa,kBACb+G,gBAAiB,CAAC4H,IAClB3F,YAAa0H,GACb5J,gBACI,uLAER9B,MAAO,CACHsM,kBAAmB,YACnBC,cAAe5K,GACfhB,UAAW,mBACX3F,YAAa,OACb+G,gBAAiB,CAAC4H,GAAeY,IACjCzI,gBACI,2PAOR8M,cAAe,CACXvC,YAAY,EACZC,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,aAGjBqE,SAAU,CACNiN,kBAAmB,YACnBC,cAAetF,GACftG,UAAW,YACXoB,gBAAiB,CAACuI,GAAiBe,OAQ9BzZ,GAAa,SAAC,GAAD,IAAEsa,EAAF,EAAEA,MAAOC,EAAT,EAASA,gBAAT,MAA+B,CACrD0C,eAAgB,CACZvC,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,mBACX3F,YAAa,2BACbiJ,sBAAuB,UACvBC,WAAY+G,GACZnJ,gBACI,6JACJC,gBAAiB,CAAC4H,KAGtBoF,YAAa,CACTrS,cAAe,EACf4P,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,gBACX3F,YAAa,wBACb+G,gBAAiB,CAAC4H,KAOtB+C,uBAAwB,CACpBhQ,cAAe,EACf2P,YAAY,EACZC,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,kBAEjB2R,yBAA0B,CACtBjQ,cAAe,EACf4P,kBAAmB,cACnBC,cAAe1L,GACf7F,YACI,0MAER4R,cAAe,CACXlQ,cAAe,EACf4P,kBAAmB,YACnBC,cAAelH,GACf1E,UAAW,iBACXqD,YAAawH,GACb1J,gBACI,4KACJC,gBAAiB,CAACgI,GAAmBC,KAEzCrK,gBAAiB,CACbjD,cAAe,EACf4P,kBAAmB,cACnBC,cAAeva,GACf2O,UAAW,oBACX3F,YAAa,kBACbgJ,YAAa0H,GACb3J,gBAAiB,CAAC4H,KAEtBqF,kBAAmB,CACftS,cAAe,EACf4P,kBAAmB,YACnBC,cAAe5K,GACfhB,UAAW,qBACX3F,YAAa,6BACb8G,gBAAiB,GACjBC,gBAAiB,CAAC8H,IAClBC,YAAY,GAEhBmF,oBAAqB,CACjBvS,cAAe,EACf4P,kBAAmB,aACnBC,cAAe1F,GACflG,UAAW,WACX3F,YAAa,kBACb+G,gBAAiB,CAACsI,GAA2Bc,IAC7CrJ,gBACI,wTACJkC,YAAakI,GAGjBpM,kBAAmB,CACfpD,cAAe,EACf4P,kBAAmB,cACnBC,cAAeva,GACf2O,UAAW,qCACX3F,YAAa,GACbsE,aAAc,CACVM,MAAO,QACPthB,OAAO,GAEX4wB,mBAAoB,GACpBC,kBAAmB,GACnBnL,YAAa2H,GACb7B,YAAY,GAMhBgF,qBAAsB,CAClBpS,cAAe,EACf2P,YAAY,EACZC,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,gBAEjBmO,SAAU,CACNzM,cAAe,EACf4P,kBAAmB,aACnBC,cAAe1F,GACflG,UAAW,WACX3F,YAAa,kBACb+G,gBAAiB,CAACqI,GAAkBe,IACpCrJ,gBACI,wTACJkC,YAAakI,GAEjB9C,cAAe,CACX1M,cAAe,EACf4P,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,iBACX3F,YAAa,kBACb+G,gBAAiB,CAAC4H,IAClB3F,YAAamI,EACbrK,gBACI,gIAERuH,YAAa,CACT3M,cAAe,EACf4P,kBAAmB,YACnBC,cAAe5K,GACfhB,UAAW,sBACX3F,YAAa,OACb+G,gBAAiB,CAAC4H,IAClB7H,gBACI,qRAERwH,UAAW,CACP5M,cAAe,EACf4P,kBAAmB,oBACnBC,cAAejJ,GACf3C,UAAW,aACX3F,YAAa,eACb+G,gBAAiB,CAAC4H,GAAee,IACjC5I,gBACI,kIAERyH,aAAc,CACV7M,cAAe,EACf4P,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,gBACX3F,YAAa,kBACb+G,gBAAiB,CAAC4H,IAClB3F,YAAa0H,GACb5J,gBACI,mIAER0H,aAAc,CACV9M,cAAe,EACf4P,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,gBACX3F,YAAa,kBACb+G,gBAAiB,CAAC4H,IAClB3F,YAAa0H,GACb5J,gBACI,oFAER2H,iBAAkB,CACd/M,cAAe,EACf4P,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,oBACX3F,YAAa,kBACb+G,gBAAiB,CAAC4H,IAClB3F,YAAa0H,GACb5J,gBACI,uLAER9B,MAAO,CACHtD,cAAe,EACf4P,kBAAmB,YACnBC,cAAe5K,GACfhB,UAAW,mBACX3F,YAAa,OACb+G,gBAAiB,CAAC4H,GAAeY,IACjCzI,gBACI,2PAOR8M,cAAe,CACXvC,YAAY,EACZ3P,cAAe,EACf4P,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,aAGjBqE,SAAU,CACNiN,kBAAmB,YACnBC,cAAetF,GACfvK,cAAe,EACfiE,UAAW,YACXoB,gBAAiB,CAACuI,GAAiBe,OAQ9B1Z,GAAgB,SAAC,GAAD,IAAEia,EAAF,EAAEA,aAAcC,EAAhB,EAAgBA,eAAgBC,EAAhC,EAAgCA,SAAUC,EAA1C,EAA0CA,yBAA0BC,EAApE,EAAoEA,iBAAkBC,EAAtF,EAAsFA,aAActD,EAApG,EAAoGA,KAAMuD,EAA1G,EAA0GA,MAAOC,EAAjH,EAAiHA,gBAAjH,MAAuI,CAChK0C,eAAgB,CACZvC,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,wBACX3F,YAAa,2BACbiJ,sBAAuB,UACvBC,WAAY+G,GACZnJ,gBACI,6JACJC,gBAAiB,CAAC4H,KAOtB+C,uBAAwB,CACpBhQ,cAAe,EACf4P,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,kBAEjB2R,yBAA0B,CACtBjQ,cAAe,EACf4P,kBAAmB,cACnBC,cAAe1L,GACf7F,YACI,0MAER4R,cAAe,CACXlQ,cAAe,EACf4P,kBAAmB,YACnBC,cAAelH,GACf1E,UAAW,iBACXmB,gBACI,4KACJkC,YAAawH,GACbzJ,gBAAiB,CAACgI,GAAmBC,KAEzCtK,mBAAoB,CAChBhD,cAAe,EACf4P,kBAAmB,cACnBC,cAAeva,GACf2O,UAAW,uBACX3F,YAAa,kBACbgJ,YAAa0H,GACb3J,gBAAiB,CAAC4H,KAGtBqF,kBAAmB,CACftS,cAAe,EACf4P,kBAAmB,YACnBC,cAAe5K,GACfhB,UAAW,qBACX3F,YAAa,6BACb8G,gBAAiB,GACjBC,gBAAiB,CAAC8H,IAClBC,YAAY,GAOhBsC,eAAgB,CACZE,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,UACb0B,cAAe,GAEnB9N,KAAM,CACF0d,kBAAmB,YACnBC,cAAe5K,GACfhB,UAAW,eACXjE,cAAe,EAEf1B,YAAa,wBACb8G,gBACI,qMAER0K,WAAY,CACRF,kBAAmB,YACnBC,cAAexI,GACfrH,cAAe,EACfsF,mBAAmB,EACnBrB,UAAW,cACX3F,YAAa,uBACbiJ,sBAAuB,UACvBC,WAAY+G,GACZnJ,gBACI,4HACJC,gBAAiB,CAAC4H,KAEtB8C,YAAa,CACTH,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,cACXjE,cAAe,EACfsF,mBAAmB,EACnBgC,YAAa4H,GAGjBC,eAAgB,CACZnP,cAAe,EACf4P,kBAAmB,oBACnBC,cAAexH,GACfpE,UAAW,kBACX3F,YAAa,kBACbgJ,YAAa6H,EACb/J,gBAAiB,yEACjBC,gBAAiB,CAAC4H,KAOtBkD,qBAAsB,CAClBR,YAAY,EACZ3P,cAAe,EACf4P,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,eAEjBgS,YAAa,CACTtQ,cAAe,EACfsF,mBAAmB,EACnBsK,kBAAmB,cACnBC,cAAexD,GACfpI,UAAW,cACXoB,gBAAiB,CAACyI,IAClBxB,4BAA6B,cAEjCN,eAAgB,CACZ4D,kBAAmB,YACnBC,cAAexI,GACfrH,cAAe,EACfuH,sBAAuB,kBACvBC,WAAY+G,GACZlJ,gBAAiB,CAAC4H,IAClBpM,eAAe,EACfuM,YAAY,GAEhBnB,KAAM,CACF2D,kBAAmB,YACnBC,cAAexI,GACfrH,cAAe,EACfqF,gBAAiB,CAAC4H,IAClB3F,YAAa2E,EACbpL,eAAe,EACfuM,YAAY,GAEhBlB,KAAM,CACF0D,kBAAmB,YACnBC,cAAexI,GACfrH,cAAe,EACfuH,sBAAuB,kBACvBC,WAAY+G,GACZlJ,gBAAiB,CAAC4H,IAClBpM,eAAe,EACfuM,YAAY,GAEhBjB,UAAW,CACPyD,kBAAmB,aACnBC,cAAe1F,GACfnK,cAAe,EACfqF,gBAAiB,CAACqI,IAClBpG,YAAakI,EACb3O,eAAe,EACfuM,YAAY,GAEhBhB,YAAa,CACTwD,kBAAmB,aACnBC,cAAe1F,GACfnK,cAAe,EACfqF,gBAAiB,CAACqI,IAClBpG,YAAakI,EACb3O,eAAe,EACfuM,YAAY,GAOhB0D,oBAAqB,CACjB9Q,cAAe,EACf4P,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,cAEjByS,eAAgB,CACZ/Q,cAAe,EACf4P,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,kBACX3F,YAAa,kBACbgJ,YAAa8H,EACbhK,gBAAiB,gEAErB4L,kBAAmB,CACfhR,cAAe,EACf4P,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,sBACX3F,YAAa,kBACbgJ,YAAayH,GACb3J,gBAAiB,+BACjBC,gBAAiB,CAAC4H,KAEtBgE,wBAAyB,CACrBjR,cAAe,EACf4P,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,4BACX3F,YAAa,kBACbgJ,YAAayH,GACb3J,gBACI,4HACJC,gBAAiB,CAAC4H,KAEtBiE,iBAAkB,CACdlR,cAAe,EACf4P,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,qBACX3F,YAAa,kBACbgJ,YAAayH,GACb3J,gBACI,mGACJC,gBAAiB,CAAC4H,KAEtBkE,eAAgB,CACZnR,cAAe,EACf4P,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,mBACX3F,YAAa,kBACbgJ,YAAayH,GACb3J,gBACI,mGACJC,gBAAiB,CAAC4H,KAOtBmE,iBAAkB,CACdpR,cAAe,EACf4P,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,mBAEjB+S,uBAAwB,CACpBrR,cAAe,EACf4P,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,2BACX3F,YAAa,kBACbgJ,YAAa+H,EACbjK,gBACI,wLACJC,gBAAiB,CAAC4H,KAEtBqE,0BAA2B,CACvBtR,cAAe,EACf4P,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,8BACX3F,YAAa,kBACbgJ,YAAagI,EACblK,gBAAiB,sEACjBC,gBAAiB,CAAC4H,KAEtBsE,2BAA4B,CACxBvR,cAAe,EACf4P,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,+BACX3F,YAAa,kBACbgJ,YAAaiI,EACbnK,gBACI,iKACJC,gBAAiB,CAAC4H,KAEtBuE,wBAAyB,CACrBxR,cAAe,EACf4P,kBAAmB,cACnBC,cAAeva,GACf2O,UAAW,4BACX3F,YAAa,kBACbgJ,YAAa0H,GACb5J,gBACI,0GACJC,gBAAiB,CAAC4H,KAOtBwE,eAAgB,CACZzR,cAAe,EACf2P,YAAY,EACZC,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,gBAEjBoT,iBAAkB,CACd1R,cAAe,EACf4P,kBAAmB,cACnBC,cAAe1L,GACf7F,YACI,IAERqT,MAAO,CACH3R,cAAe,EACf4P,kBAAmB,QACnBC,cAAe7C,GACf/I,UAAW,QACXoB,gBAAiB,CAAC0I,KAEtBtB,SAAU,CACNzM,cAAe,EACf4P,kBAAmB,aACnBC,cAAe1F,GACflG,UAAW,WACX3F,YAAa,kBACb+G,gBAAiB,CAACqI,IAClBtI,gBACI,wTACJkC,YAAakI,EACb3O,eAAe,EACfuM,YAAY,GAEhBV,cAAe,CACX1M,cAAe,EACf4P,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,iBACX3F,YAAa,kBACb+G,gBAAiB,CAAC4H,IAClB3F,YAAamI,EACb5O,eAAe,EACfuM,YAAY,EACZhI,gBACI,gIAERuH,YAAa,CACT3M,cAAe,EACf4P,kBAAmB,YACnBC,cAAe5K,GACfhB,UAAW,sBACX3F,YAAa,OACb+G,gBAAiB,CAAC4H,IAClBpM,eAAe,EACfuM,YAAY,EACZhI,gBACI,qRAERwH,UAAW,CACP5M,cAAe,EACf4P,kBAAmB,oBACnBC,cAAejJ,GACf3C,UAAW,aACX3F,YAAa,eACb+G,gBAAiB,CAAC4H,GAAee,IACjCnN,eAAe,EACfuM,YAAY,EACZhI,gBACI,kIAERyH,aAAc,CACV7M,cAAe,EACf4P,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,gBACX3F,YAAa,kBACb+G,gBAAiB,CAAC4H,IAClB3F,YAAa0H,GACbnO,eAAe,EACfuM,YAAY,EACZhI,gBACI,mIAER0H,aAAc,CACV9M,cAAe,EACf4P,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,gBACX3F,YAAa,kBACb+G,gBAAiB,CAAC4H,IAClB3F,YAAa0H,GACbnO,eAAe,EACfuM,YAAY,EACZhI,gBACI,oFAER2H,iBAAkB,CACd/M,cAAe,EACf4P,kBAAmB,YACnBC,cAAexI,GACfpD,UAAW,oBACX3F,YAAa,kBACb+G,gBAAiB,CAAC4H,IAClB3F,YAAa0H,GACbnO,eAAe,EACfuM,YAAY,EACZhI,gBACI,uLAER9B,MAAO,CACHtD,cAAe,EACf4P,kBAAmB,YACnBC,cAAe5K,GACfhB,UAAW,mBACX3F,YAAa,OACb+G,gBAAiB,CAAC4H,GAAeY,IACjChN,eAAe,EACfuM,YAAY,EACZhI,gBACI,2PAERwM,eAAgB,CACZ5R,cAAe,EACf4P,kBAAmB,SACnBC,cAAehd,EACfua,YAAY,EACZvM,eAAe,EACfne,KAAM,YACNoQ,WAAY,WACZC,QAAS,SAACrS,EAAK6rB,GACX,IAAItsB,EAAOS,EAAIT,KAqBf,KAnBuB,CACnB,WACA,gBACA,cACA,YACA,eACA,eACA,mBACA,SAG+B6xB,QAAO,SAACC,EAAO7f,GAC9C,IAAM8f,EAAQ/xB,EAAKiS,GACb4O,EAAS,OAAGkR,QAAH,IAAGA,OAAH,EAAGA,EAAOlR,UAGzB,OAAOiR,IAFgB,OAATjR,QAAS,IAATA,OAAA,EAAAA,EAAWvf,SAAU,KAGpC,GAEe,GAAlB,CAIA,IAAI0wB,EAAoB,2BACjBhyB,EAAK0xB,MAAM/O,cADM,kBAEnB3iB,EAAKwsB,SAAS7J,aAAayH,MAAQ,GAAKpqB,EAAKwsB,SAAS7J,aAAa0H,KAAKpH,MAAQ,CAC7EuJ,SAAU,CAAE7J,aAAc3iB,EAAKwsB,SAAS7J,cACxC8J,cAAe,CAAE9J,aAAc3iB,EAAKysB,cAAc9J,cAClD+J,YAAa,CAAE/J,aAAc3iB,EAAK0sB,YAAY/J,cAC9CgK,UAAW,CAAEhK,aAAc3iB,EAAK2sB,UAAUhK,cAC1CiK,aAAc,CAAEjK,aAAc3iB,EAAK4sB,aAAajK,cAChDkK,aAAc,CAAElK,aAAc3iB,EAAK6sB,aAAalK,cAChDmK,iBAAkB,CAAEnK,aAAc3iB,EAAK8sB,iBAAiBnK,cACxDU,MAAO,CAAEV,aAAc3iB,EAAKqjB,MAAMV,iBAIrCliB,EAAI+e,SAASQ,kBACdvf,EAAIgf,YAAJ,2BAAqBhf,EAAI+e,UAAzB,IAAmCQ,kBAAkB,KAGzDvf,EAAI8vB,QAAJ,2BACOvwB,GADP,IAEI0xB,MAAM,2BACC1xB,EAAK0xB,OADP,IAED/O,aAAcqP,EACdnR,UAAWpgB,EAAI+vB,UAAU,QAASwB,KAEtCL,eAAe,2BACR3xB,EAAK2xB,gBADE,IAEVxE,YAAY,IAEhByE,cAAc,2BACP5xB,EAAK4xB,eADC,IAETzE,YAAY,IAGhBX,SAAS,2BACFxsB,EAAKwsB,UADJ,IAEJ7J,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,WAAY,MACrCrD,YAAY,IAEhBV,cAAc,2BACPzsB,EAAKysB,eADC,IAET9J,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,gBAAiB,MAC1CrD,YAAY,IAEhBT,YAAY,2BACL1sB,EAAK0sB,aADD,IAEP/J,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,cAAe,MACxCrD,YAAY,IAEhBR,UAAU,2BACH3sB,EAAK2sB,WADH,IAELhK,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,YAAa,MACtCrD,YAAY,IAEhBP,aAAa,2BACN5sB,EAAK4sB,cADA,IAERjK,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,eAAgB,MACzCrD,YAAY,IAEhBN,aAAa,2BACN7sB,EAAK6sB,cADA,IAERlK,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,eAAgB,MACzCrD,YAAY,IAEhBL,iBAAiB,2BACV9sB,EAAK8sB,kBADI,IAEZnK,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,mBAAoB,MAC7CrD,YAAY,IAEhB9J,MAAM,2BACCrjB,EAAKqjB,OADP,IAEDV,aAAc,KACd9B,UAAWpgB,EAAI+vB,UAAU,QAAS,MAClCrD,YAAY,UAU5B8E,cAAe,CACXlS,cAAe,EACf2P,YAAY,EACZC,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,aAEjBqE,SAAU,CACNiN,kBAAmB,YACnBC,cAAetF,GACfvK,cAAe,EACfiE,UAAW,YACXoB,gBAAiB,CAACuI,GAAiBe,OAQ9BxZ,GAAkB,CAK3B6a,uBAAwB,CACpBL,YAAY,EACZC,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,kBAGjB2R,yBAA0B,CACtBL,kBAAmB,cACnBC,cAAe1L,GACf7F,YACI,0MAGR4R,cAAe,CACXN,kBAAmB,YACnBC,cAAelH,GACf1E,UAAW,iBACXqD,YAAawH,GACb1J,gBACI,4KACJC,gBAAiB,CAACgI,GAAmBC,KAGzCoC,eAAgB,CACZC,YAAY,EACZC,kBAAmB,YACnBC,cAAezR,GACfE,YAAa,UAGjBoU,kBAAmB,CACf9C,kBAAmB,cACnBC,cAAe1L,GACf7F,YACI,2DAGRqU,OAAQ,CACJ3S,cAAe,EACf4P,kBAAmB,WACnBC,cCn0DgB,SAACpxB,GAAW,IAE5BwB,EAOAxB,EAPAwB,KACAoe,EAMA5f,EANA4f,QAKA6G,EACAzmB,EADAymB,WAMAtC,EAWA3iB,EAXA2iB,aAMA9B,EAKA7gB,EALA6gB,UApB2B,EAyB3B7gB,EADA2yB,kBAxB2B,SA0BzBD,EAAS/P,GAAgB,GAEvBhf,EAAqByG,qBAAW/L,GAAhCsF,iBAER,IAAK+uB,EACD,OAAO,2CAGX,IAAME,EAAoB,SAACt1B,EAAIqE,GAC3B,IAAMkxB,EAAY,aAAIH,GAAQv1B,KAAI,SAACyG,GAC/B,OAAIA,EAAKkvB,eAAiBx1B,EAEf,2BAAKsG,GAAZ,IAAkB2f,SAAoB,KAAV5hB,OAAe2H,GAAa3H,IAErDiC,KAGXqhB,EAAW7G,EAASyU,IAGlBE,EAAYL,EAAOv1B,KAAI,SAACkmB,GAAW,IACf/lB,EAAwB+lB,EAAtCyP,aAA4BnxB,EAAU0hB,EAApBE,SAE1B,OACI,wBAAI1f,IAAKwf,EAAMyP,cACX,4BAAKzP,EAAMyP,cACX,4BAAKzP,EAAM2P,UACX,4BAAK3P,EAAMA,OACX,6BACoB,IAAfsP,EACG,kBAAC,GAAD,CAAcr1B,GAAIA,EAAIqE,MAAOA,EAAOgR,SAAUigB,IAE9C,6BAAMjxB,QAM1B,OACI,yBAAK+H,UAAW,aAAcmX,GAAaA,EAAUvf,OAAS,EAAI,QAAU,KACpE,+BACI,+BACI,4BACI,uCACA,yCACA,qDACA,mDAGR,+BAAQyxB,IAEVlS,EACF,yBAAKnX,UAAU,kBAAkB/F,EAAiBkd,IAC9C,ODqvDZmD,UAAW,SACX3F,YAAa,cACb+G,gBAAiB,CD3+CqB,SAAC5mB,GAC3C,IAAIqiB,EAAY,iCACRkH,EAASvpB,EAATupB,KAER,OAAKA,GAIFjqB,OAAOD,KAAKkqB,GAAMjK,QAAO,SAACja,GAAD,MAAwC,qBAAxBkkB,EAAKlkB,GAAK0f,UAAoD,OAAvBwE,EAAKlkB,GAAK0f,UAAqBwE,EAAKlkB,GAAK0f,SAAW,KAAGjiB,OAAS,GAHxIuf,GAeiB,SAACriB,GAC7B,IACIqiB,EAAS,2BADWjZ,2BACX,SACLmgB,EAASvpB,EAATupB,KAER,OAAKA,GAGFjqB,OAAOD,KAAKkqB,GAAMjK,QAAO,SAACja,GAAD,MAAwC,qBAAxBkkB,EAAKlkB,GAAK0f,UAAoD,OAAvBwE,EAAKlkB,GAAK0f,UAAqBwE,EAAKlkB,GAAK0f,SAAW,KAAGjiB,QAAUmoB,SAP5H7hB,6BAKbiZ,MGnWFoS,I,cAAY,SAACz0B,GAAW,IAEzB00B,GADU10B,EAAVJ,OACoB,IAApB80B,OACFhrB,GAAOgrB,QAAU5pB,GAAjBpB,GACAlJ,GAAmBk0B,QAAU5pB,GAA7BtK,eACAiJ,GAAiBirB,QAAU5pB,GAA3BrB,aAL0B,EAgB5BmC,qBAAW/L,GATXS,EAP4B,EAO5BA,UACAD,EAR4B,EAQ5BA,YACAa,EAT4B,EAS5BA,mBACAJ,EAV4B,EAU5BA,gBACAkE,EAX4B,EAW5BA,UACAzE,EAZ4B,EAY5BA,aACAsB,EAb4B,EAa5BA,0BACAN,EAd4B,EAc5BA,eACA2C,EAf4B,EAe5BA,uBAEI8J,EAAcpC,qBAAWM,GAAzB8B,UACF/N,EAAUC,cACVohB,EAASrhB,EAAQP,SAASqL,SAAS/E,MAAM,KAAK,GAnBpB,EAoBR7F,qBApBQ,mBAoBzBqB,EApByB,KAoBnBuwB,EApBmB,OAqBA5xB,qBArBA,mBAqBzB6gB,EArByB,KAqBfC,EArBe,OAsBA9gB,qBAtBA,mBAsBzB+gB,EAtByB,KAsBfyT,EAtBe,KA4B1BC,EAAkC,SAAlCA,EAAmCC,EAAkBxJ,GAAgC,IAInFkI,EAJ+DlU,EAAmB,uDAAT7d,EAC7E,IAAKqzB,IAAqBxJ,EACtB,OAAO,KAQX,IACIlH,EADAiN,GAJAmC,EAD4B,kBAArBsB,EACCA,EAEAxV,EAAQwV,IAEM1D,kBAEtB2D,EAAWzV,EAEf,OAAQ+R,GACJ,IAAK,WAGL,IAAK,YACDjN,EAAekH,EACf,MACJ,IAAK,YACD,GAAIkI,EAAMzK,sBACN3E,EAAekH,MACZ,CAAC,IAAD,EACC0J,EACJ,IAAK,IAAIhyB,KAAKwwB,EAAM1K,YAChB,GAAI0K,EAAM1K,YAAY9lB,GAAGI,QAAUkoB,EAAY,CAC3C0J,EAASxB,EAAM1K,YAAY9lB,GAC3B,MAIRohB,EAAe,CACXhhB,MAAOkoB,EACP5G,MAAK,UAAEsQ,SAAF,aAAE,EAAQtQ,OAGvB,MACJ,IAAK,oBACD,GAAI8O,EAAMzK,sBACF5kB,GACAqF,QAAQ6b,IACJ,uEAGL,CACH,IAAI2P,EAAS,GACb,IAAK,IAAIhyB,KAAKwwB,EAAM1K,YAChB,IAAK,IAAImM,KAAM3J,EACPkI,EAAM1K,YAAY9lB,GAAGI,QAAUkoB,EAAW2J,IAC1CD,EAAOxwB,KAAK,CACRpB,MAAOkoB,EAAW2J,GAClBvQ,MAAO8O,EAAM1K,YAAY9lB,GAAG0hB,QAK5CN,EAAe4Q,EAEnB,MACJ,IAAK,cACD,IAAIE,EAAW,GACf,IAAK,IAAIlyB,KAAKwwB,EAAM1K,YACZ0K,EAAM1K,YAAY9lB,GAAGI,QAAUkoB,IAC/B4J,EAAW,CACP9xB,MAAOkoB,EACP5G,MAAO8O,EAAM1K,YAAY9lB,GAAG0hB,QAIxCN,EAAe8Q,EACf,MACJ,IAAK,YACD,IAAIC,EAAS7J,EAAWrlB,MAAM,KAC1BmvB,EAAWD,EAAO,GAClBE,EAAaF,EAAO,GACpBG,EAAYH,EAAO,GACvB/Q,EAAe,CACX+G,IAAK,CAAEzG,MAAO0Q,EAAUhyB,MAAOgyB,GAC/BtK,MAAO,CACHpG,MAAO8O,EAAM1K,YAAYgC,MAAMuK,EAAa,GAAG3Q,MAC/CthB,MAAOiyB,GAEXtK,KAAM,CAAErG,MAAO4Q,EAAWlyB,MAAOkyB,IAErC,MACJ,IAAK,aACD,IAAIN,EACJ,IAAK,IAAIhyB,KAAKwwB,EAAM1K,YAChB,GAAI0K,EAAM1K,YAAY9lB,GAAGI,QAAUkoB,EAAWiK,IAAK,CAC/CP,EAASxB,EAAM1K,YAAY9lB,GAC3B,MAIR,IAAKgyB,EACD,MAGJ5Q,EAAe,CACXyH,MAAOP,EAAWloB,MAClB0oB,KAAM,CACF1oB,MAAOkoB,EAAWiK,IAClB7Q,MAAOsQ,EAAOtQ,QAItB,MACJ,IAAK,oBACDN,EAAekH,EACf,MACJ,IAAK,YACDlH,EAAe,CACXC,QAASiH,EAAWlF,IACpB1B,MAAO4G,EAAWloB,MAClBA,MAAOkoB,EAAWloB,OAEtB,MACJ,IAAK,QACL,IAAK,cACD,IAAIoyB,EAAc,GAClBlK,EAAWha,SAAQ,SAACjM,GAChB,IAY+B,UAMxB,IAlBHowB,EAAU,IACdl2B,OAAOD,KAAK+F,GAAMiM,SAAQ,SAAChM,GACvB,IAAIowB,EAAapwB,EACbqwB,EAAWtwB,EAAKC,GAChBswB,EAAcf,EACdE,EAASW,GACTC,EACAZ,GAEJU,EAAQnwB,GAAO,CAAE8e,aAAcwR,MAGb,UAAlBvE,GACAmE,GACW,OAAPC,QAAO,IAAPA,GAAA,UAAAA,EAASxH,gBAAT,mBAAmB7J,oBAAnB,eAAiCyH,OAC7B,IADJ,OAEI4J,QAFJ,IAEIA,GAFJ,UAEIA,EAASxH,gBAFb,iBAEI,EAAmB7J,oBAFvB,iBAEI,EAAiC0H,YAFrC,aAEI,EAAuCpH,QAC3C+Q,EAEJD,EAAW,OAACC,QAAD,IAACA,GAAD,UAACA,EAASjI,sBAAV,iBAAC,EAAyBpJ,oBAA1B,aAAC,EAAuChhB,OAASqyB,KAGpErR,EAAeoR,EAOvB,OAAOpR,GAgGLyR,EAA+B,SAACC,EAASC,GAC3C,GAAKD,GAAYC,EAAjB,CAIA,IAAIt0B,EAAOO,IAAEkiB,UAAU4R,GAEjBE,EAAmB,SAACpM,GACtB,OAAY,IAARA,EACO,OACQ,IAARA,EACA,KACQ,OAARA,EACA,UADJ,GAWLqM,EAAW12B,OAAOD,KAAKy2B,IAAiB,GACxCG,EAAU,SAACtM,GACb,OAAIqM,EAASxwB,QAAQmkB,IAAQ,GAK7BuM,EAAc,CACd9H,aAAc,CAAEjK,aAAc,MAC9BkK,aAAc,CAAElK,aAAc,MAC9BmK,iBAAkB,CAAEnK,aAAc,MAClCU,MAAO,CAAEV,aAAc,MACvB+J,YAAa,CAAE/J,aAAc,MAC7BgK,UAAW,CAAEhK,aAAc,MAC3B8J,cAAe,CAAE9J,aAAc,MAC/B6J,SAAU,CAAE7J,aAAc,OA0F9B,GAvFI8R,EAAQ,SAAWz0B,EAAKiS,OACxBjS,EAAKiS,KAAK0Q,aAAe2R,EAAariB,MAGtCwiB,EAAQ,qBAAuBz0B,EAAK6vB,aACpC7vB,EAAK6vB,WAAWlN,aAAe,CAC3BhhB,MAAO2yB,EAAaK,iBACpB1R,MAAOqR,EAAaK,mBAGxBF,EAAQ,gBAAkBz0B,EAAK8vB,cAC/B9vB,EAAK8vB,YAAYnN,aAAeyQ,EAC5B,cACAkB,EAAaxE,aAAe,GAC5B9vB,IAGJy0B,EAAQ,mBAAqBz0B,EAAKkvB,iBAClClvB,EAAKkvB,eAAevM,aAAeyQ,EAC/B,iBACAkB,EAAapF,eACblvB,IAGJy0B,EAAQ,gBAAkBz0B,EAAK8wB,iBAC/B9wB,EAAK8wB,eAAenO,aAAeyQ,EAC/B,iBACAkB,EAAaM,YACb50B,IAGJy0B,EAAQ,eAAiBz0B,EAAK+wB,oBAC9B/wB,EAAK+wB,kBAAkBpO,aAAeyQ,EAClC,oBACAmB,EAAiBD,EAAaO,YAC9B70B,IAGJy0B,EAAQ,qBAAuBz0B,EAAKgxB,0BACpChxB,EAAKgxB,wBAAwBrO,aAAeyQ,EACxC,0BACAmB,EAAiBD,EAAaQ,kBAC9B90B,IAGJy0B,EAAQ,cAAgBz0B,EAAKixB,mBAC7BjxB,EAAKixB,iBAAiBtO,aAAeyQ,EACjC,mBACAmB,EAAiBD,EAAaS,WAC9B/0B,IAGJy0B,EAAQ,YAAcz0B,EAAKkxB,iBAC3BlxB,EAAKkxB,eAAevO,aAAeyQ,EAC/B,iBACAmB,EAAiBD,EAAaU,SAC9Bh1B,IAGJy0B,EAAQ,+BAAiCz0B,EAAKoxB,yBAC9CpxB,EAAKoxB,uBAAuBzO,aAAeyQ,EACvC,yBACAkB,EAAaW,2BACbj1B,IAGJy0B,EAAQ,2BAA6Bz0B,EAAKqxB,4BAC1CrxB,EAAKqxB,0BAA0B1O,aAAeyQ,EAC1C,4BACAkB,EAAaY,uBACbl1B,IAGJy0B,EAAQ,8BAAgCz0B,EAAKsxB,6BAC7CtxB,EAAKsxB,2BAA2B3O,aAAeyQ,EAC3C,6BACAkB,EAAaa,0BACbn1B,IAGJy0B,EAAQ,4BAA8Bz0B,EAAKuxB,0BAC3CvxB,EAAKuxB,wBAAwB5O,aAAeyQ,EACxC,0BACAkB,EAAa/C,wBACbvxB,IAGJy0B,EAAQ,gBAAkBz0B,EAAKqwB,YAAa,CAC5C,IAAI+E,EAAU,GACdd,EAAajE,YAAYxgB,SAAQ,SAACjM,GAC9BwxB,EAAQxxB,EAAKtG,IAAM,CACfyuB,eAAgB,CACZpJ,aAAc,CACVM,MAAOrf,EAAKqO,KACZtQ,MAAOiC,EAAKtG,KAGpB0uB,KAAM,CACFrJ,aAAcyQ,EACV,OACAxvB,EAAKyxB,yBACLr1B,IAGRisB,KAAM,CACFtJ,aAAc,CACVM,MAAOrf,EAAK0xB,2BACZ3zB,MAAOiC,EAAK0xB,6BAGpBpJ,UAAW,CACPvJ,aAAcyQ,EACV,YACA,CACIzxB,MAAOiC,EAAK2xB,eACZzB,IAAKlwB,EAAK4xB,kBAEdx1B,IAGRmsB,YAAa,CACTxJ,aAAcyQ,EACV,cACA,CACIzxB,MAAOiC,EAAK6xB,yBACZ3B,IAAKlwB,EAAK8xB,4BAEd11B,QAMhBA,EAAKqwB,YAAY1N,aAAeyS,EAEpC,GAAIX,EAAQ,UAAYz0B,EAAK0xB,MAAO,CAChC,IAAIiE,EAAW,GACfrB,EAAa5C,MAAM7hB,SAAQ,SAACjM,GACxB,IAAIgyB,EAAe,CACfjT,aAAcyQ,EACV,WACA,CACIzxB,MAAOiC,EAAK4oB,SACZsH,IAAKlwB,EAAKiyB,mBAEd71B,IAIR21B,EACIC,EAAajT,aAAayH,MAAQ,GAAKwL,EAAajT,aAAa0H,KAAKpH,OACtE,CACAuJ,SAAUoJ,EACVnJ,cAAe,CACX9J,aAAcyQ,EACV,gBACAxvB,EAAKkyB,kBACL91B,IAGR0sB,YAAa,CAAE/J,aAAc/e,EAAKmyB,oBAClCpJ,UAAW,CAAEhK,aAAc/e,EAAK+oB,WAChCC,aAAc,CACVjK,aAAcyQ,EACV,eACAmB,EAAiB3wB,EAAKgpB,cACtB5sB,IAGR6sB,aAAc,CACVlK,aAAcyQ,EACV,eACAmB,EAAiB3wB,EAAKipB,cACtB7sB,IAGR8sB,iBAAkB,CACdnK,aAAcyQ,EACV,mBACAmB,EAAiB3wB,EAAKkpB,kBACtB9sB,IAGRqjB,MAAO,CAAEV,aAAc/e,EAAKyf,WAIpCrjB,EAAK0xB,MAAM/O,aAAegT,EAuE9B,OAhEIlB,EAAQ,iBAAmBz0B,EAAK4sB,eAChC5sB,EAAK4sB,aAAajK,aAAe+R,EAAY9H,aAAajK,aAAeyQ,EACrE,eACAmB,EAAiBD,EAAa1H,cAC9B5sB,IAGJy0B,EAAQ,iBAAmBz0B,EAAK6sB,eAChC7sB,EAAK6sB,aAAalK,aAAe+R,EAAY7H,aAAalK,aAAeyQ,EACrE,eACAmB,EAAiBD,EAAazH,cAC9B7sB,IAGJy0B,EAAQ,qBAAuBz0B,EAAK8sB,mBACpC9sB,EAAK8sB,iBAAiBnK,aAAe+R,EAAY5H,iBAAiBnK,aAAeyQ,EAC7E,mBACAmB,EAAiBD,EAAaxH,kBAC9B9sB,IAGJy0B,EAAQ,UAAYz0B,EAAKqjB,QACzBrjB,EAAKqjB,MAAMV,aAAe+R,EAAYrR,MAAMV,aAAe2R,EAAajR,MAAQ,IAEhFoR,EAAQ,uBAAyBz0B,EAAK0sB,cACtC1sB,EAAK0sB,YAAY/J,aAAe+R,EAAYhI,YAAY/J,aACpD2R,EAAayB,oBAEjBtB,EAAQ,cAAgBz0B,EAAK2sB,YAC7B3sB,EAAK2sB,UAAUhK,aAAe+R,EAAY/H,UAAUhK,aAChD2R,EAAa3H,WAEjB8H,EAAQ,sBAAwBz0B,EAAKysB,gBACrCzsB,EAAKysB,cAAc9J,aAAe+R,EAAYjI,cAAc9J,aAAeyQ,EACvE,gBACAkB,EAAawB,kBACb91B,IAGJy0B,EAAQ,aAAez0B,EAAKwsB,WAC5BxsB,EAAKwsB,SAAS7J,aAAe+R,EAAYlI,SAAS7J,aAAeyQ,EAC7D,WACA,CACIzxB,MAAO2yB,EAAa9H,SACpBsH,IAAKQ,EAAauB,mBAEtB71B,IAkBD,CACHA,KAAMA,EACN00B,YAAaA,KAIflE,EAAY,SAAC6C,EAAkB1Q,GAAkB,IAAD,EAO9CoP,EANAlR,EAAY,GAEhB,IAAKwS,EACD,OAAOxS,EAIX,GAAgC,kBAArBwS,EACPtB,EAAQsB,MACL,CACH,IAAKrzB,EACD,OAAO6gB,EAEXkR,EAAQ/xB,EAAKqzB,GAGjB,OAAI,UAACtB,SAAD,aAAC,EAAO3M,kBAAoD,IAAjC2M,EAAM3M,gBAAgB9jB,QAIrDywB,EAAM3M,gBAAgBvV,SAAQ,SAACmmB,GAC3B,IAAIC,EAAmBD,EAAK,CACxBj2B,eAAgBA,EAChBgoB,KAAMpF,EACNwK,WAAY4E,EAAM5E,cAEG,IAArB8I,GACApV,EAAU9d,KAAKkzB,MAIhBpV,GAdIA,GAgBTqV,EAAgB,SAACl2B,GA4BnB,OA3BAlC,OAAO0W,QAAQxU,GAAM7C,KAAI,YAAkB,IAAD,mBAAf0G,EAAe,KAAVD,EAAU,KAClCwhB,EAAkBxhB,EAAKwhB,gBAC3B,IAAKA,EACD,OAAO,KAGX,IAAIvE,EAAY,GAkBhB,OAhBAuE,EAAgBvV,SAAQ,SAACmmB,GACrB,IAAIC,EAAmBD,EAAK,CACxB5X,QAASva,EACTkkB,KAAMnkB,EAAK+e,aACXrjB,gBAAiBA,EACjBS,eAAgBA,EAChBoH,MAAOqF,EAAU2B,YACjBgf,WAAYvpB,EAAKupB,cAEI,IAArB8I,GACApV,EAAU9d,KAAKkzB,MAInBj2B,EAAK6D,GAAKgd,UAAYA,EAEnB,QAGJ7gB,GAEL6f,EAAe,SAACsW,EAAOC,GACzB,IAAMC,EAAct2B,EAAeo2B,GAEnC,GAAIE,IADgBt2B,EAAeq2B,GAE/B,OAAO,EAGX,GAAoB,WAAhBC,GAA4C,WAAhBA,GAA4C,YAAhBA,GACxD,GAAIF,IAAUC,EACV,OAAO,OAER,GAAoB,UAAhBC,GACP,IAAK91B,IAAE+1B,QAAQH,EAAMtU,OAAQuU,EAAMvU,QAC/B,OAAO,OAER,GAAoB,WAAhBwU,IACF91B,IAAE+1B,QAAQH,EAAOC,GAClB,OAAO,EAIf,OAAO,GAMXh2B,2BAAgB,WAgBZ,IAAIyd,EACAU,GAbY,QAAXuB,GAA+B,SAAXA,GAAgC,SAAXA,GAC9B,QAAXA,GACsB,eAAnB9gB,GACmB,YAAnBA,GACmB,kBAAnBA,GACmB,eAAnBA,GACmB,oBAAnBA,IACS,SAAX8gB,GAAgC,SAAXA,KAAuB5X,IAE9CzJ,EAAQsE,KAAK,cAMjB,IAMIwzB,EAEAnT,EARAoT,EAAYtuB,EACZ9I,EAAgB0gB,EAChB2W,EAAwBz3B,EACxB03B,EAAsBzuB,EACtB0uB,EAAgB,QAGhBC,EAAmB,EAKjBC,EAAK,uCAAG,kCAAAn2B,EAAA,yDAEK,QAAXof,GAAuC,oBAAnB9gB,EAFd,gCAGiBgI,EAAS,CAC5BtE,uBAAwBA,EACxBjE,QAASA,EACTwI,aAAc,sBACdE,MAAOqF,EAAU2B,YACjBjH,SAAU,CACNW,UAAS,UAAE2E,EAAUwC,uBAAZ,aAAE,EAA2B1R,IAE1CyB,aAAc,SAAC6e,GACX7e,EAAa6e,MAZf,OAGAkZ,EAHA,OAgBNC,EAAgB,CACZ5yB,KAAMnF,EACNgB,KAAM,CACF0yB,OAAQoE,EAAS92B,OAnBnB,0BAuBM,SAAX8f,GAAgC,SAAXA,GACH,oBAAnB9gB,EAxBM,wBA0BND,GAAa,GA1BP,8BA4BY,SAAX+gB,GAAgC,SAAXA,EA5BtB,kCA6BgB9Y,EAAS,CAC3BtE,uBAAwBA,EACxBjE,QAASA,EACTwI,aAAc,kBACdE,MAAOqF,EAAU2B,YACjBjH,SAAU,CACNgB,GAAIA,EACJD,aAAcA,EACdJ,UAAS,UAAE2E,EAAUwC,uBAAZ,aAAE,EAA2B1R,IAE1CyB,aAAc,SAAC6e,GACX7e,EAAa6e,MAxCf,YA6BNmZ,EA7BM,SA4C8C,IAA9BA,EAAc/2B,KAAKsB,QACrC7C,EAAQsE,KAAK,cAGU,eAAvBg0B,EAAc5yB,OAAyB4yB,EAAc/2B,KAAKoyB,YAhDxD,kCAiDmBprB,EAAS,CAC1BtE,uBAAwBA,EACxBjE,QAASA,EACTwI,aAAc,oBACdE,MAAOqF,EAAU2B,YACjBjH,SAAU,CACNvF,MAAOo1B,EAAc/2B,KAAKoyB,eAvDhC,QAiDFhP,EAjDE,eA6DN2T,IACAxY,EAAYwY,EACZP,EAAYO,EAAcz5B,GAC1Bm5B,EAAwBM,EAAc5yB,KACtCuyB,EAAsBK,EAAc53B,aACpCw3B,EAAgBI,EAAc73B,QAAU,SAlElC,4CAAH,qDAwEL83B,EAAK,uCAAG,sBAAAt2B,EAAA,2DACF+1B,EADE,OAED,eAFC,OAKD,YALC,QAQD,kBARC,QAWD,eAXC,QAcD,oBAdC,oCAGQl2B,IAHR,KAGoBuU,GAHpB,SAGqCmiB,IAHrC,8CAGFpZ,EAHE,KAGU4E,UAHV,yDAMQliB,IANR,KAMoBwU,GANpB,UAMkCmiB,IANlC,+CAMFrZ,EANE,KAMU4E,UANV,yDASQliB,IATR,MASoByU,GATpB,UASwCiiB,IATxC,mDASFpZ,EATE,KASU4E,UATV,2DAYQliB,IAZR,MAYoB0U,GAZpB,UAYqCiiB,IAZrC,mDAYFrZ,EAZE,MAYU4E,UAZV,sDAeF5E,EAAUtd,IAAEkiB,UAAUvN,IAfpB,oCAkBFzW,EAAQsE,KAAK,cAlBX,+DAAH,qDAuBLk0B,EAAiB,uCAAG,4CAAAv2B,EAAA,sEACKy2B,EAAU,mBADf,cAChBlI,EADgB,gBAEOkI,EAAU,sBAFjB,cAEhBjI,EAFgB,gBAGCiI,EAAU,gBAHX,cAGhBhI,EAHgB,iBAIiBgI,EAAU,gCAJ3B,eAIhB/H,EAJgB,iBAKS+H,EAAU,wBALnB,eAKhB9H,EALgB,iBAMK8H,EAAU,oBANf,eAMhB7H,EANgB,iBAOH6H,EAAU,YAPP,eAOhBnL,EAPgB,iBAQFmL,EAAU,aARR,eAQhB5H,EARgB,iBASQ4H,EAAU,qBATlB,eAShB3H,EATgB,yBAUf,CAACP,eAAcC,iBAAgBC,WAAUC,2BAA0BC,mBAAkBC,eAActD,OAAMuD,QAAOC,oBAVjG,4CAAH,qDAajB0H,EAAc,uCAAG,8BAAAx2B,EAAA,sEACCy2B,EAAU,aADX,cACb5H,EADa,gBAEW4H,EAAU,qBAFrB,cAEb3H,EAFa,yBAGZ,CAACD,QAAOC,oBAHI,2CAAH,qDAMd2H,EAAS,uCAAG,WAAOlwB,GAAP,SAAAvG,EAAA,sEAA8BsG,EAAS,CACrDtE,uBAAwBA,EACxBjE,QAASA,EACTwI,aAAcA,EACdE,MAAOqF,EAAU2B,YACjBpP,aAAc,SAAC6e,GACX7e,EAAa6e,MANH,mFAAH,sDAYTwZ,EAAQ,WACV,IAAMC,EAAc,WACX9Y,KAILgY,EAAcz4B,OAAOD,KAAKggB,IACV7Z,QAAQ,SAAW,IAC/B6Z,EAAQ5L,KAAK0Q,aAAepE,EAAU7G,OAE/B5Z,OAAOD,KAAK0gB,EAAUve,MAC5B6P,SAAQ,SAAChM,GACN0yB,EAAYvyB,QAAQH,IAAQ,IAC5Bga,EAAQha,GAAK8e,aAAeyQ,EACxBvV,EAAQha,GACR0a,EAAUve,KAAK6D,GACfga,SAMhB,GAAe,QAAXiC,EACAuX,SACG,GAAe,SAAXvX,GAAgC,SAAXA,EAAmB,CAkBnC,IAAD,QAPX,GAVAuX,IAE8B,oBAA1BZ,IAEI5Y,EAAQ6U,OAAOC,WADJ,SAAX7S,GAOsB,kBAA1B2W,EACA,GAAIl2B,IAAEitB,QAAQ3P,EAAQqU,eAAevP,cACjCiU,EAAmB,EAEf/Y,EAAQwU,oBACRxU,EAAQwU,kBAAkBlF,YAAa,OAGa,SAApD,UAAAtP,EAAQkF,0BAAR,mBAA4BJ,oBAA5B,eAA0CM,QAC1C2T,EAAmB,EAEf/Y,EAAQwU,oBACRxU,EAAQwU,kBAAkBlF,YAAa,IAEgB,QAApD,UAAAtP,EAAQkF,0BAAR,mBAA4BJ,oBAA5B,eAA0CM,QACjD2T,EAAmB,EAEf/Y,EAAQwU,oBACRxU,EAAQwU,kBAAkBlF,YAAa,KAG3CyJ,EAAmB,EAEf/Y,EAAQwU,oBACRxU,EAAQwU,kBAAkBlF,YAAa,IAMvD,GAA8B,eAA1BsJ,EAAwC,CAAC,IAAD,cACpCa,EAAelD,EAA6BvW,EAASuF,GAazD,IATgB,QAAZ,EAHJA,EAAe7iB,IAAEkiB,UAAU6U,EAAa5C,oBAGpC,mBAAclI,gBAAd,mBAAwB7J,oBAAxB,eAAsCyH,SAAtC,UACAhH,SADA,iBACA,EAAcoJ,gBADd,iBACA,EAAwB7J,oBADxB,iBACA,EAAsC0H,YADtC,aACA,EAA4CpH,SAE5CpF,EAAQuU,YAAYzP,aAAaM,MAC7BG,EAAaoJ,SAAS7J,aAAayH,MACnC,IACAhH,EAAaoJ,SAAS7J,aAAa0H,KAAKpH,OAG5C1iB,IAAEitB,QAAQ3P,EAAQqU,eAAevP,cACjCiU,EAAmB,EAEf/Y,EAAQwU,oBACRxU,EAAQwU,kBAAkBlF,YAAa,EACvCtP,EAAQyU,oBAAoBnF,YAAa,QAE1C,GAAI5sB,IAAEitB,QAAQ3P,EAAQuU,YAAYzP,cACrCiU,EAAmB,EAEf/Y,EAAQwU,oBACRxU,EAAQwU,kBAAkBlF,YAAa,EACvCtP,EAAQyU,oBAAoBnF,YAAa,OAE1C,CAAC,IAAD,QACkD,SAAjD,UAAAtP,EAAQmF,uBAAR,mBAAyBL,oBAAzB,eAAuCM,QACvC2T,EAAmB,EACf/Y,EAAQwU,oBACRxU,EAAQwU,kBAAkBlF,YAAa,EACvCtP,EAAQyU,oBAAoBnF,YAAa,IAEW,QAAjD,UAAAtP,EAAQmF,uBAAR,mBAAyBL,oBAAzB,eAAuCM,QAC9C2T,EAAmB,EACf/Y,EAAQwU,oBACRxU,EAAQwU,kBAAkBlF,YAAa,EACvCtP,EAAQyU,oBAAoBnF,YAAa,KAG7CyJ,EAAmB,EACf/Y,EAAQwU,oBACRxU,EAAQwU,kBAAkBlF,YAAa,EACvCtP,EAAQyU,oBAAoBnF,YAAa,QAU3DoK,EAAQ,WACV,GAAIhZ,IAE8B,kBAA1BkY,GAC0B,eAA1BA,GACF,CACE,IACMe,EAAoD,KADjCjZ,EAAS,aAAmB,IACNjd,OAEzCilB,EAAS1I,EAAQwS,aAAe,GAGlCmH,IACAjR,EAAOnB,gBAHU,IAQ7BvH,EAAUqY,EAAcrY,KAsDd,uCAAG,sBAAAnd,EAAA,sEACPm2B,IADO,uBAEPG,IAFO,OAGbI,IACAG,IAnDAl3B,IAEIf,EADW,QAAXwgB,EACgB,CACZxiB,GAAI,KACJ0B,eAAgBwE,EAAUizB,GAC1Bx3B,YAAa,KACbC,OAAQ,QACRC,aAAc,KACdC,cAAeA,GAGH,CACZ9B,GAAI4K,EACJlJ,eAAgBwE,EAAU+a,EAAUpa,MACpClF,YAAasf,EAAU7G,MACvBxY,OAAQy3B,EACRx3B,aAAc8I,EACd7I,cAAeA,IAWvBP,EAPI,cACAO,EACA,IACAq3B,EACA,IACAD,GAGJ92B,EAAmB,CAAEH,SAAU,SAAUC,QAAS,SAElDigB,EAAY,CACRO,kBAAkB,EAClBF,OAAQ1gB,EACRJ,eAAgBy3B,EAChBvuB,GAAIsuB,EACJvuB,aAAcyuB,EACdzkB,KAAMsM,EAAYA,EAAU7G,MAAQ,GACpCxY,OAAQy3B,EACRpY,UAAWA,EACXwB,cAAe6W,EACfxT,aAAcA,IAElBmN,EAAQ1S,GAIK,2CAAH,qDAOd4Z,KACD,CAACvvB,EAAIlJ,EAAgBiJ,EAAc6X,IAKtC,IAAMmF,EAAU,uCAAG,WAAOjB,EAAW4F,GAAlB,mDAAAlpB,EAAA,yDAA8BypB,EAA9B,+BAAyC,eACnDnqB,GAASwf,EADC,iDAIXiX,EAAwBjX,EAASxgB,gBAAkB,GAKnD6hB,EAAY2P,EAAUxM,EAAW4F,GACjC/L,EAAUtd,IAAEkiB,UAAUziB,GACtB03B,EAAcn3B,IAAEkiB,UAAUjD,GAE9B3B,EAAQmG,GAAR,2BACOnG,EAAQmG,IADf,kBAEKmG,EAAWP,GACK,iBAAbO,GAA+B,CAC/BtJ,UAAWA,IAQdrB,EAASQ,mBACwB,IAAlChgB,EAAKgkB,GAAWpD,eACH,iBAAbuJ,IAEAuN,EAAY1X,kBAAmB,GAM7B2X,EAA6B,WAC/B,IAAMC,EAAoB,CACtB,iBACA,OACA,OACA,YACA,eAEC53B,EAAKywB,uBAAkE,IAA1CmH,EAAkB5zB,QAAQggB,KAEjDnD,EAAUvf,OAAS,GAGbs2B,EAAkB9Z,QAAO,SAACla,GACV,IAAD,IAAxB,OAAIA,IAASogB,EACgC,KAAlC,UAAAhkB,EAAK4D,UAAL,mBAAYid,iBAAZ,eAAuBvf,QAEvB,QAIJA,OAAS,EAVpBuc,EAAQ4S,qBAAqB5d,WAAa,WAatCgL,EAAQ4S,qBAAqB5d,WAAa,KAIhDglB,EAAuB,WACzB,IAAMD,EAAoB,CACtB,WACA,gBACA,cACA,YACA,eACA,eACA,mBACA,SAEC53B,EAAK2xB,iBAA4D,IAA1CiG,EAAkB5zB,QAAQggB,KAE3CnD,EAAUvf,OAAS,GAGbs2B,EAAkB9Z,QAAO,SAACla,GACV,IAAD,IAAxB,OAAIA,IAASogB,EAEa,MADH,UAAAhkB,EAAK4D,UAAL,mBAAYid,iBAAZ,eAAuBvf,SAAU,GAG7C,QAIJA,OAAS,EAXpBuc,EAAQ8T,eAAe9e,WAAa,WAchCgL,EAAQ8T,eAAe9e,WAAa,KAI1CilB,EA/FS,+BAAAp3B,EAAA,MA+Fe,4BAAAA,EAAA,yDAErBV,EAAKkyB,gBACQ,mBAAdlO,GACa,iBAAbmG,IACAtK,EAAa+J,EAAY5pB,EAAKkyB,eAAevP,cALvB,iEAUC3b,EAAS,CAChCtE,uBAAwBA,EACxBjE,QAASA,EACTwI,aAAc,mBACdE,MAAOqF,EAAU2B,YACjBjH,SAAU,CACNvF,MAAOioB,EAAWjoB,OAEtB5C,aAAc,SAAC6e,GACX7e,EAAa6e,MAnBK,OAUtBma,EAVsB,OAsB1Bla,EAAUtd,IAAEkiB,UAAU2R,EAA6BvW,EAASka,GAAgB/3B,MAC5E6d,EAAUqY,EAAcrY,GACxB6Z,EAAY3X,cAAgB,EAE5BhhB,GAAa,GA1Ba,2CA/Ff,qDA2HTi5B,EAA4B,WAAO,IAAD,UAChCz3B,IAAEitB,QAAF,UAAU3P,EAAQqU,sBAAlB,aAAU,EAAwBvP,cAC9B9E,EAAQwU,oBACRxU,EAAQwU,kBAAkBlF,YAAa,IAKS,SAApD,UAAAtP,EAAQkF,0BAAR,mBAA4BJ,oBAA5B,eAA0CM,QAC1CyU,EAAY3X,cAAgB,EAExBlC,EAAQwU,oBACRxU,EAAQwU,kBAAkBlF,YAAa,IAEgB,QAApD,UAAAtP,EAAQkF,0BAAR,mBAA4BJ,oBAA5B,eAA0CM,QACjDyU,EAAY3X,cAAgB,EAExBlC,EAAQwU,oBACRxU,EAAQwU,kBAAkBlF,YAAa,KAG3CuK,EAAY3X,cAAgB,EAExBlC,EAAQwU,oBACRxU,EAAQwU,kBAAkBlF,YAAa,IAI/CtP,EAAUqY,EAAcrY,KAEtBoa,EAAyB,WAAO,IAAD,YAE7B13B,IAAEitB,QAAF,UAAU3P,EAAQqU,sBAAlB,aAAU,EAAwBvP,eAClCpiB,IAAEitB,QAAF,UAAU3P,EAAQuU,mBAAlB,aAAU,EAAqBzP,cAE3B9E,EAAQwU,oBACRxU,EAAQwU,kBAAkBlF,YAAa,EACvCtP,EAAQyU,oBAAoBnF,YAAa,IAKI,SAAjD,UAAAtP,EAAQmF,uBAAR,mBAAyBL,oBAAzB,eAAuCM,QACvCyU,EAAY3X,cAAgB,EAExBlC,EAAQwU,oBACRxU,EAAQwU,kBAAkBlF,YAAa,EACvCtP,EAAQyU,oBAAoBnF,YAAa,IAEW,QAAjD,UAAAtP,EAAQmF,uBAAR,mBAAyBL,oBAAzB,eAAuCM,QAC9CyU,EAAY3X,cAAgB,EAExBlC,EAAQwU,oBACRxU,EAAQwU,kBAAkBlF,YAAa,EACvCtP,EAAQyU,oBAAoBnF,YAAa,KAG7CuK,EAAY3X,cAAgB,EAExBlC,EAAQwU,oBACRxU,EAAQwU,kBAAkBlF,YAAa,EACvCtP,EAAQyU,oBAAoBnF,YAAa,IAIjDtP,EAAUqY,EAAcrY,KAGtBqa,EA/LS,+BAAAx3B,EAAA,MA+L4B,gCAAAA,EAAA,yDAElCV,EAAKkyB,gBACQ,mBAAdlO,GACa,iBAAbmG,IACAtK,EAAa+J,EAAY5pB,EAAKkyB,eAAevP,cALV,iEAUZ3b,EAAS,CAChCtE,uBAAwBA,EACxBjE,QAASA,EACTwI,aAAc,WACdE,MAAOqF,EAAU2B,YACjBjH,SAAU,CACNW,UAAS,UAAE2E,EAAUwC,uBAAZ,aAAE,EAA2B1R,GACtCwK,MAAO8hB,EAAWjoB,OAEtB5C,aAAc,SAAC6e,GACX7e,EAAa6e,MApBkB,OAUnCma,EAVmC,OAwBnCI,EAAa,GAEjBJ,EAAe/3B,KAAK6P,SAAQ,SAACjM,GACzBu0B,EAAWp1B,KAAK,CACZpB,MAAOiC,EAAKtG,GACZ2lB,MAAOrf,EAAKqO,UAIpB4L,EAAQuU,YAAY/K,YAAc8Q,EAClCta,EAAQuU,YAAYzP,kBAAerZ,EAEnCouB,EAAY3X,cAAgB,EAC5BhhB,GAAa,GArC0B,4CA/L5B,qDAsOTq5B,EAtOS,+BAAA13B,EAAA,MAsOY,8BAAAA,EAAA,yDAElBV,EAAKoyB,aACQ,gBAAdpO,GACa,iBAAbmG,IACAtK,EAAa+J,EAAY5pB,EAAKoyB,YAAYzP,cALvB,iEAUI3b,EAAS,CAChCtE,uBAAwBA,EACxBjE,QAASA,EACTwI,aAAc,oBACdE,MAAOqF,EAAU2B,YACjBjH,SAAU,CACNvF,MAAOioB,EAAWjoB,OAEtB5C,aAAc,SAAC6e,GACX7e,EAAa6e,MAnBE,OAUnBma,EAVmB,OAuBnBT,EAAelD,EAA6BvW,EAASka,GAEzDla,EAAUtd,IAAEkiB,UAAU6U,EAAat3B,MACnC03B,EAAYtU,aAAe7iB,IAAEkiB,UAAU6U,EAAa5C,aAEpD7W,EAAUqY,EAAcrY,GACxB6Z,EAAY3X,cAAgB,EAC5BhhB,GAAa,GA9BU,4CAtOZ,qDAsQTs5B,EAAyB,WAC3B,IAAMC,EAAmBza,EAAQ6U,OAAO/P,aAAa7E,QAAO,SAAAla,GAAI,OAAIA,EAAK2f,SAAW,KAAGjiB,OACvFo2B,EAAY1X,iBAAmBsY,EAAmB,GAxQvC,KA2QP7B,EA3QO,OA4QN,eA5QM,QAgRN,kBAhRM,QAqRN,eArRM,QA0RN,oBA1RM,gCA6QPkB,IACAE,IA9QO,8CAiRDC,IAjRC,eAkRPE,IACAH,IAnRO,8CAsRDK,IAtRC,yBAuRDE,IAvRC,eAwRPH,IAxRO,oCA2RPI,IA3RO,iEAiSf9H,EAAQ1S,GACR4B,EAAYiY,GAlSG,4CAAH,wDAoSV9X,EAAmB,SAACoE,EAAW4F,GAA2C,IAA/BO,EAA8B,uDAAnB,eACxD,GAAKnqB,EAAL,CAIA,IAAI2iB,EAAe3iB,EAAKgkB,GAAWmG,GAC9BtK,EAAa8C,EAAciH,IAC5B2G,EAAQ,2BACDvwB,GADA,kBAEFgkB,EAFE,YAAC,eAGGhkB,EAAKgkB,IAHT,kBAIEmG,EAAWP,SAS5BxpB,2BAAgB,WAAO,IAAD,oBAClB,GAAKJ,GAASwf,EAAd,CAIA,IAAI+Y,EAAiB,GAErB,GAAgC,eAA5B/Y,EAASxgB,iBAAT,UAA4CgB,EAAKiS,YAAjD,aAA4C,EAAW0Q,cACvD4V,EAAiBv4B,EAAKiS,KAAK0Q,kBACxB,IAC0B,YAA5BnD,EAASxgB,gBAA4D,eAA5BwgB,EAASxgB,kBAAnD,UACAgB,EAAKkyB,sBADL,iBACA,EAAqBvP,oBADrB,aACA,EAAmCM,SADnC,UAEAjjB,EAAKwsB,gBAFL,iBAEA,EAAe7J,oBAFf,iBAEA,EAA6B0H,YAF7B,aAEA,EAAmCpH,OAEnCsV,EACIv4B,EAAKkyB,eAAevP,aAAaM,MACjC,IACAjjB,EAAKwsB,SAAS7J,aAAayH,MAC3B,IACApqB,EAAKwsB,SAAS7J,aAAa0H,KAAKpH,WACjC,GACyB,kBAA5BzD,EAASxgB,iBAAT,UACAgB,EAAKkyB,sBADL,iBACA,EAAqBvP,oBADrB,aACA,EAAmCM,OAEnCsV,EAAiBv4B,EAAKkyB,eAAevP,aAAaM,WAC/C,GACyB,oBAA5BzD,EAASxgB,iBAAT,UACAgB,EAAK0yB,cADL,iBACA,EAAa/P,oBADb,aACA,EAA2BrhB,QAC7B,CAAC,IAAD,EAEQk3B,IADS,UAAAx4B,EAAK0yB,cAAL,eAAa/P,eAAgB,IACvB7E,QAAO,SAACla,GAAD,YAA4B0F,IAAlB1F,EAAK2f,UAA0B3f,EAAK2f,SAAW,KAAGjiB,OAExFi3B,EAAc,UAAMC,EAAN,wBAEdD,EAAiB/Y,EAASvN,KAG1B3S,EAAgBL,cAAgBs5B,GAChCj5B,GAAgB,SAACwR,GAAD,mBAAC,eACVA,GADS,IAEZ7R,YAAas5B,UAGtB,CAACv4B,EAAD,OAAOwf,QAAP,IAAOA,OAAP,EAAOA,EAAUxgB,iBAKpBoB,2BAAgB,WACZ,GAAKJ,EAAL,CAGA,IAAIy4B,EAAc,GAElB36B,OAAOD,KAAKmC,GAAM6P,SAAQ,SAACjM,GACnB5D,EAAK4D,GAAM8rB,YACX+I,EAAY11B,KAAKa,MAGzBuvB,EAAYsF,MACb,CAACz4B,IAKJ,IAQM04B,EAAkB,SAACC,EAAUrM,GAC3BqM,GACAA,EACI,CACI34B,KAAMA,EACNuwB,QAASA,EACTtL,WAAYA,EACZrF,iBAAkBA,EAClBJ,SAAUA,EACVC,YAAaA,EACb+Q,UAAWA,GAEflE,IAiBZ,OATuE5pB,IACnEzE,OAAO+B,KAAOA,EACd/B,OAAOuhB,SAAWA,GAOjBxf,GAASwf,IAAY1gB,EAKtB,yBAAK4K,UAAU,YAEU,SAApB8V,EAASM,OACN,kBAAC,IAAMhK,SAAP,KACI,kBAAC,GAAD,CACI7C,SAAUuM,EAASM,OACnB9f,KAAM,CACFqe,YAAa,aAGrB,kBAAC,GAAD,CAAgBE,UAAWiB,EAASjB,aAGxC,KAEmB,cAApBiB,EAAStgB,QAA8C,aAApBsgB,EAAStgB,OAC3C,kBAAC,IAAM4W,SAAP,KACI,kBAAC,GAAD,CACI7C,SAAUuM,EAASM,OACnB9f,KAAM,CACFqe,YAAa,cAGrB,kBAAC,GAAD,CAAUE,UAAWiB,EAASjB,aAElC,KAKFve,EAEIlC,OAAO0W,QAAQxU,GAAM7C,KAAI,YAAkB,IAAD,mBAAf0G,EAAe,KAAVD,EAAU,KACtC,OACIA,EAAKupB,YACgB,SAApB3N,EAASM,SACLlc,EAAKmc,eAAiB,KAAc,OAARP,QAAQ,IAARA,OAAA,EAAAA,EAAUO,gBAAiB,GAErD,KAGP,kBAACnc,EAAKgsB,cAAN,CACI/rB,IAAKA,EACLua,QAASva,EACT7D,KAAMA,EAAK6D,GACXoP,SAAUuM,EAASM,OACnB3R,YAAa3B,EAAU2B,YACvB8W,WAAYA,EACZrF,iBAAkBA,EAClBnd,KAAMzC,EAAK6D,GAAKpB,KAChBoQ,WAAY7S,EAAK6D,GAAKgP,WACtBC,QAAS,WACL4lB,EAAgB14B,EAAK6D,GAAKiP,UAE9BuZ,4BAA6B,SAACC,GAC1BoM,EACI14B,EAAK6D,GAAKwoB,4BACVC,IAGR3Z,SAAU,SAAC2Z,GACPoM,EAAgB14B,EAAK6D,GAAK8O,SAAU2Z,SA9BpD,KAqCN,kBAAC,GAAD,CACIzM,aAAcA,EACdH,SAAUA,EACVF,SAAUA,EACVxf,KAAMA,EACNuwB,QAASA,EACT9Q,YAAaA,EACbwF,WAAYA,EACZrF,iBAAkBA,EAClBL,sBAAuB,SAACuE,IAvHN,SAACE,GAC3B,IAAI4U,EAAU9zB,SAASyS,eAAeyM,GACtC/lB,OAAO2d,SAAS,EAAGgd,EAAQhX,UAAY,IAsH3BrC,CAAsBuE,IAE1BnE,gCAv0C4B,SAAlCA,EAAmC0T,EAAkB1Q,GACvD,IAAK0Q,IAAqB1Q,EACtB,OAAO,KAEX,IAAIoP,EAQAlI,EAEJ,QARIkI,EAD4B,kBAArBsB,EACCA,EAEArzB,EAAKqzB,IAGS1D,mBAItB,IAAK,YACD9F,EAAalH,EACb,MACJ,IAAK,YAEGkH,EADAkI,EAAMzK,sBACO3E,EAEAA,EAAahhB,MAE9B,MACJ,IAAK,cACDkoB,EAAalH,EAAahhB,MAC1B,MACJ,IAAK,oBACD,IAAIk3B,EAAW,GACflW,EAAa9S,SAAQ,SAACjM,GAClBi1B,EAAS91B,KAAKa,EAAKjC,UAEvBkoB,EAAagP,EACb,MACJ,IAAK,YAKGhP,EAJClH,EAAa+G,KAAQ/G,EAAa0G,OAAU1G,EAAa2G,KAKtD3G,EAAa2G,KAAK3nB,MAClB,KACC,IAAMghB,EAAa0G,MAAM1nB,OAAO4rB,OAAO,GACxC,KACC,IAAM5K,EAAa+G,IAAI/nB,OAAO4rB,OAAO,GAR7B,KAWjB,MACJ,IAAK,aAIG1D,EAHClH,EAAayH,OAAUzH,EAAa0H,KAGxB,CACT1oB,MAAOghB,EAAayH,MACpB0J,IAAKnR,EAAa0H,KAAK1oB,OAJd,KAOjB,MACJ,IAAK,QACL,IAAK,cACD,IAAIm3B,EAAY,GAChBh7B,OAAOD,KAAK8kB,GAAc9S,SAAQ,SAAChM,GAC/B,IAAIk1B,EAAWpW,EAAa9e,GACxBm1B,EAAY,GAChBl7B,OAAOD,KAAKk7B,GAAUlpB,SAAQ,SAACopB,GAC3B,IAAIhF,EAAagF,EACbC,EAAQH,EAASE,GAAMtW,aACvBwW,EAAYxZ,EAAgCsU,EAAYiF,GAC5DF,EAAUC,GAAQE,KAEtBL,EAAU/1B,KAAKi2B,MAEnBnP,EAAaiP,EACb,MACJ,IAAK,oBACDjP,EAAalH,EACb,MACJ,IAAK,YACDkH,EAAa,CACTloB,MAAOghB,EAAaM,MACpB0B,IAAKhC,EAAaC,SAGtB,MACJ,IAAK,WACDiH,EAAalH,EAAa7E,QAAO,SAACla,GAAD,YAA4B0F,IAAlB1F,EAAK2f,YAMxD,OAAOsG,KA8uCH,yBAAKvW,MAAO,CAAEyC,aAAc,QAvFzB,OC97CFqjB,GAAQ,SAAC56B,GAClB,IAD4B,EAQxB4L,qBAAW/L,GALXO,EAHwB,EAGxBA,SACAC,EAJwB,EAIxBA,YACAa,EALwB,EAKxBA,mBACAW,EANwB,EAMxBA,0BACAtB,EAPwB,EAOxBA,aAiBJ,OAVAqB,2BAAgB,WACZrB,GAAa,GACbF,EAfiB,aAgBjBa,EAAmB,CAAEH,SAAU,SAAUC,QAAS,UAClDa,MACD,CAACzB,IAMA,yBAAK8K,UAAU,YACX,yBAAKA,UAAU,kBAAf,uBAEA,yBAAKA,UAAU,iBACX,kdAWA,8lBAeJ,yBAAKA,UAAU,kBAAf,SAEA,yBAAKA,UAAU,iBACX,kdAWA,gmBClEH2vB,I,OAAa,SAAC76B,GAAW,IAAD,IAC3B2F,EAAO+jB,QACJ,OAAL1pB,QAAK,IAALA,OAAA,EAAAA,EAAO2F,MAAO3F,EAAM2F,MAAY,OAAL3F,QAAK,IAALA,GAAA,UAAAA,EAAOJ,aAAP,mBAAc80B,cAAd,eAAsB/uB,MAAO3F,EAAMJ,MAAM80B,OAAO/uB,KAAO,WAFrD,EAW7BiG,qBAAW/L,GANXO,EAL6B,EAK7BA,SACAC,EAN6B,EAM7BA,YACAa,EAP6B,EAO7BA,mBACAoD,EAR6B,EAQ7BA,SACA/D,EAT6B,EAS7BA,aACAsB,EAV6B,EAU7BA,0BAEE5B,EAAUC,cAkBhB,OAXA0B,2BAAgB,WACZrB,GAAa,GACbF,EARiB,aASjBa,EAAmB,CAAEH,SAAU,YAAaC,QAAS,SACrDa,IACA5B,EAAQ0E,QAAQ,UAAYgB,KAC7B,CAACvF,IAMA,yBAAK8K,UAAU,cACX,yBACIA,UAAU,aACVa,IAAKC,EAAQ,KACbC,IAAI,GACJqI,QAAS,WACLhQ,OAIR,yBAAK4G,UAAU,eAAf,wBACA,6BACc,QAATvF,EACG,sFAEI,6BAFJ,UAGW,uBAAG4gB,KAAK,wDAAR,qBAHX,KAKS,QAAT5gB,EACA,uEACS,QAATA,EACA,yDAEI,6BAFJ,UAGW,uBAAG4gB,KAAK,wDAAR,qBAHX,KAKS,kBAAT5gB,EACA,6BACI,6FACA,6BACA,6BAHJ,sCAIuC,wDACnC,6BALJ,iBAMkB,4CAGlB,yDAEI,6BAFJ,2CAMJ,6BACU,kBAATA,GAAA,iBAAsCA,IAE3C,yBAAKmP,MAAO,CAAEyC,aAAc,MAElB,QAAT5R,GAA2B,kBAATA,EACf,kBAAC,EAAD,CACI0O,WAAW,GACXpQ,KAAK,QACLqQ,QAAS,kBAAMrU,EAAQsE,KAAK,YAC5BgQ,gBAAiB,KAGrB,kBAAC,EAAD,CACIF,WAAW,GACXpQ,KAAK,OACLqQ,QAAS,WACLhQ,KAEJiQ,gBAAiB,QC7FxBumB,I,OAAY,SAAC96B,GAAW,IAAD,EAO5B4L,qBAAW/L,GALXO,EAF4B,EAE5BA,SACAC,EAH4B,EAG5BA,YACAa,EAJ4B,EAI5BA,mBACAX,EAL4B,EAK5BA,aACAsB,EAN4B,EAM5BA,0BAEIkQ,EAAUnG,qBAAWM,GAArB6F,MAiBR,OAVAnQ,2BAAgB,WACZrB,GAAa,GACbF,EARiB,cASjBa,EAAmB,CAAEH,SAAU,YAAaC,QAAS,SACrDa,MACD,CAACzB,IAMA,yBAAK8K,UAAU,cACX,yBACIA,UAAU,aACVa,IAAKC,EAAQ,KACbC,IAAI,GACJqI,QAAS,WACLvC,OAIR,yBAAK7G,UAAU,eAAf,6BACA,uFACA,yBAAK4J,MAAO,CAAEyC,aAAc,MAC5B,kBAAC,EAAD,CACIlD,WAAW,GACXpQ,KAAK,QACLqQ,QAAS,WACLvC,KAEJwC,gBAAiB,QC9CpBwmB,I,OAAa,SAAC/6B,GAAW,IAAD,EACQ4L,qBAAW/L,GAA5CqB,EADyB,EACzBA,mBAAoBd,EADK,EACLA,SACxBH,EAAUC,cAMd,MAAiB,cAAbE,EACO,KAIP,yBAAK8K,UAAU,iBACX,yBACIA,UAAU,qBACVa,IAAKC,EAAQ,KACbC,IAAI,GACJqI,QAAS,WACLrU,EAAQsE,KAAK,QAGrB,yBACI2G,UAAU,0BACVa,IAAKC,EAAQ,KACbC,IAAI,GACJqI,QAAS,SAACpV,GACNgC,EAAmB,CAAEH,SAAU,SAAUC,QAAS,eC3BzDg6B,I,OAAkB,SAACh7B,GAAW,IAC/Bi7B,EAAgDj7B,EAAhDi7B,oBAAqBC,EAA2Bl7B,EAA3Bk7B,UAAWC,EAAgBn7B,EAAhBm7B,YAChCv1B,EAAyBgG,qBAAW/L,GAApC+F,qBAyBR,OACI,yBAAKsF,UAAU,iBACT+vB,EAEIA,EAAoBt8B,KAAI,SAACyG,EAAMC,GAC3B,OAAIA,EAAM61B,EAAYC,EAAc,EACzB,KAGP,kBAAC,IAAM7jB,SAAP,CAAgBjS,IAAKA,GAChB61B,GAAa71B,EAAM61B,IAAc,EAC9B,yBAAKhwB,UAAU,iBACV+vB,EAAoBn4B,QAAUq4B,EAAcD,EACzC,6BACK,IACAD,EAAoBn4B,OAAQ,IAC5Bm4B,EAAoBn4B,OAAS,EAAI,QAAU,QAGhD,sCACmB,IAARuC,EAAY,EAAIA,EAD3B,KACkC,IAC7BA,EAAM61B,EAAYD,EAAoBn4B,OACjCm4B,EAAoBn4B,OACpBuC,EAAM61B,EAAW,IAJ3B,MAKQD,EAAoBn4B,QAGhC,6BACa,IAARuC,EAAY,KACT,kBAAC,IAAMiS,SAAP,KACI,yBACIpM,UAAU,eACV4J,MAAO,CACHtR,QAAS,gBAEb8Q,QAAS,WArDvD7U,OAAO2d,SAAS,CAAEvE,IAAK,EAAG6D,KAAM,EAAGzD,SAAU,aAgDH,UAUO,IAXX,IAYM,KAGTgiB,EAAoBn4B,QACrBq4B,EAAcD,EAAY,KACtB,yBACIhwB,UAAU,eACV4J,MAAO,CACHtR,QAAS,gBAEb8Q,QAAS,WA9DnD7U,OAAO2d,SAAS,CACZvE,IAAKvS,SAAS+D,KAAKsZ,aACnBjH,KAAM,EACNzD,SAAU,aAsDwB,eAcZ,KAEJ,kBAAC,GAAD,CACI1E,gBAAiB,CAAE6B,YAAa,GAChCtX,GAAIsG,EAAKtG,GACT4B,OAAQ0E,EAAK1E,OACbiF,KAAMP,EAAKO,KACXwU,QAAS/U,EAAK8T,MACdkB,OAAQxU,EAAqBR,EAAKwY,UAClCvD,OAAQjV,EAAKyY,WACbvD,OAAQlV,EAAKkV,OACb3Z,aAAcyE,EAAKzE,mBApEnC,QCxBLy6B,I,OAAO,SAACp7B,GAAW,IACpBN,EAAaM,EAAbN,SADmB,EAUvBkM,qBAAW/L,GAPXO,EAHuB,EAGvBA,SACAC,EAJuB,EAIvBA,YACAa,EALuB,EAKvBA,mBACAW,EANuB,EAMvBA,0BACAtB,EAPuB,EAOvBA,aACAO,EARuB,EAQvBA,gBACAoD,EATuB,EASvBA,uBAEI8J,EAAcpC,qBAAWM,GAAzB8B,UACA9F,EAAO0D,qBAAW1F,GAAlBgC,GAEJjI,EAAUC,cAda,EAgBWC,qBAhBX,mBAgBpBk7B,EAhBoB,KAgBPC,EAhBO,OAiBOn7B,qBAjBP,mBAiBpBo7B,EAjBoB,KAiBTC,EAjBS,OAkBWr7B,qBAlBX,mBAkBpBs7B,EAlBoB,KAkBPC,EAlBO,OAmBiBv7B,qBAnBjB,mBAmBpBw7B,EAnBoB,KAmBJC,EAnBI,OAoB2Bz7B,qBApB3B,mBAoBpB86B,EApBoB,KAoBCY,EApBD,OAqBW17B,mBAAS,GArBpB,mBAqBpBg7B,EArBoB,KAqBPW,EArBO,OAsBO37B,qBAtBP,mBAsBpB+6B,EAtBoB,KAsBTa,EAtBS,OAuBS57B,qBAvBT,mBAuBpB67B,GAvBoB,KAuBRC,GAvBQ,KA+B3Br6B,2BAAgB,WACZvB,EAnBiB,eAoBjBa,EAAmB,CAAEH,SAAU,SAAUC,QAAS,WACnD,CAACZ,IAKJwB,2BAAgB,WACZ,IAAIs6B,EAAoB,IAAI5oB,gBAAgB5T,EAAS8O,QACrD8sB,EACIY,EAAkBrtB,IAAI,UAAYqtB,EAAkBrtB,IAAI,UAAU7I,MAAM,KAAO,IAEnFw1B,EAAaU,EAAkBrtB,IAAI,QAAUqtB,EAAkBrtB,IAAI,QAAQ7I,MAAM,KAAO,IACxF01B,EAAeQ,EAAkBrtB,IAAI,WAAa,QACnD,CAACnP,IAKJkC,2BAAgB,WACZ,GAAuBq5B,EAAvB,CAIA,IAAIkB,EAAc,GACdC,EAAY,GAEZT,EAAe74B,SAAWm4B,EAAoBn4B,QAC9Cq5B,EAAc,kBACdC,EAAY,IACLf,GAAeA,EAAYv4B,OAAS,GAC3Cq5B,EAAc,SAEVC,EADAf,EAAYv4B,OAAS,EACTu4B,EAAYgB,KAAK,MAGzBhB,EAAY,GACZ,KACAA,EAAY,GACZ,OACCA,EAAYv4B,OAAS,GACtB,gBAEDy4B,GAAaA,EAAUz4B,OAAS,GACvCq5B,EAAc,OAEVC,EADAb,EAAUz4B,OAAS,EACPy4B,EAAUc,KAAK,MAGvBd,EAAU,GACV,KACAA,EAAU,GACV,OACCA,EAAUz4B,OAAS,GACpB,cAED24B,GAAeA,EAAY34B,OAAS,GAC3Cq5B,EAAc,SACdC,EAAYX,GAEZU,EAAc,cAElBr7B,EAAgB,CACZN,eAAgB27B,EAChB17B,YAAa27B,OAElB,CAACf,EAAaE,EAAWE,EAAaE,EAAgBV,IAKzDr5B,2BAAgB,WAAM,4CAClB,8BAAAM,EAAA,sEACwBsG,EAAS,CACzBtE,uBAAwBA,EACxBjE,QAASA,EACTwI,aAAc,sBACdE,MAAOqF,EAAU2B,YACjBjH,SAAU,CACNW,UAAS,UAAE2E,EAAUwC,uBAAZ,aAAE,EAA2B1R,IAE1CyB,aAAc,SAAC6e,GACX7e,EAAa6e,MAVzB,OACQC,EADR,OAcIuc,EAAkBvc,EAAQ7d,MAd9B,4CADkB,sBAkBbm6B,GAlBc,WAAD,wBAmBdpc,KAEL,CAACvR,IAKJpM,2BAAgB,WAEZ,GADArB,GAAa,GACRo7B,EAAL,CAUA,GAA2B,IAAvBN,EAAYv4B,QAAqC,IAArBy4B,EAAUz4B,QAAiB24B,EAEpD,CACH,IAAMa,GAAWX,GAAkB,IAAIrc,QAAO,SAACmK,GAC3C,OACIC,OAAOD,EAAO5L,YACT3Y,cACAuJ,SAASib,OAAO+R,GAAav2B,gBAClCwkB,OAAOD,EAAOhW,MAAMvO,cAAcuJ,SAASib,OAAO+R,GAAav2B,gBAC/DwkB,OAAOD,EAAO9oB,cAAc8N,SAASib,OAAO+R,GAAav2B,gBACzDm2B,EAAY71B,QAAQikB,EAAO/oB,SAAW,GACtC66B,EAAU/1B,QAAQikB,EAAO9jB,OAAS,KAG1Ck2B,EAAuBS,QAbvBT,EAAuBF,GAgB3B95B,OACD,CAAC85B,EAAgBN,EAAaE,EAAWE,IAM5C75B,2BAAgB,WAUZm6B,EARW7zB,EAAGJ,KAAO,KACX,GACAI,EAAGJ,KAAO,IACV,GACAI,EAAGJ,KAAO,IACV,EACA,KAGX,CAACI,EAAGJ,OA6BP,OAZAlG,2BAAgB,WACZq6B,IAAc,GACdx8B,OAAO2d,SAAS,CACZvE,IAAKpZ,OAAO88B,YAAcr0B,EAAGH,KAAO,EACpC2U,KAAM,EACNzD,SAAU,aAEf,CAACkiB,IAKCQ,GAEOV,GAAwBA,GAAsD,IAA/BA,EAAoBn4B,OAEvE,yBAAKgS,MAAO,CAAE0nB,QAAS,KAAvB,sCAGI,6BAHJ,sDAUJ,kBAAC,IAAMllB,SAAP,KAEI,kBAAC,GAAD,CACI2jB,oBAAqBA,EACrBC,UAAWA,EACXC,YAAaA,IAIhBF,GAAuBA,EAAoBn4B,OAASq4B,EAAcD,EAC/Dc,GACI,yBAAK9wB,UAAU,sBAAf,cAEA,yBAAKA,UAAU,qBACX,6BAAM+vB,EAAoBn4B,OAASq4B,EAAcD,EAAjD,eACA,yBAAKhwB,UAAU,sBACX,kBAAC,EAAD,CACIqJ,gBAAiB,CAAEyJ,UAAW,GAC9B3J,WAAW,GACXpQ,KAAK,YACLqQ,QAAS,WACL2nB,IAAc,GAjD1CH,EAAeX,EAAc,OAsDb,yBACIjwB,UAAU,eACVoJ,QAAS,WAhE7B7U,OAAO2d,SAAS,CAAEvE,IAAK,EAAG6D,KAAM,EAAGzD,SAAU,aA8D7B,WAUR,MAjDD,O,UChMFwjB,I,OAAM,WAAO,IAEdzuB,EAAcpC,qBAAWM,GAAzB8B,UACF/N,EAAUC,cAMhB,OAJI8N,GAAaA,EAAU4C,iBAAmB,GAC1C3Q,EAAQsE,KAAK,WAKT,yBAAK2G,UAAU,OACX,yBACI4J,MAAO,CAAE/T,SAAU,QAAS27B,OAAQ,MAAOC,OAAQ,EAAGC,MAAO,EAAGC,QAAS,KAEzE,8BAAO1xB,OAGX,kBAAC,EAAD,MAGA,kBAAC,EAAD,CAAYF,SAAS,YAGrB,kBAAC,EAAD,MAGA,yBAAKC,UAAW,sBAEZ,kBAAC,GAAD,MAGA,kBAAC,EAAD,MAEA,kBAAC,EAAD,KAEI,kBAAC,IAAD,KACI,kBAAC,EAAD,CAAc4xB,OAAK,EAAC/rB,KAAM,CAAC,QAAS,KAAM6C,UAAWqK,KACrD,kBAAC,EAAD,CAAc6e,OAAK,EAAC/rB,KAAK,eAAe6C,UAAWgnB,KAEnD,kBAAC,EAAD,CAAckC,OAAK,EAAC/rB,KAAK,uBAAuB6C,UAAW6gB,KAC3D,kBAAC,EAAD,CAAcqI,OAAK,EAAC/rB,KAAK,YAAY6C,UAAW6gB,KAChD,kBAAC,EAAD,CAAcqI,OAAK,EAAC/rB,KAAK,YAAY6C,UAAW6gB,KAChD,kBAAC,EAAD,CAAcqI,OAAK,EAAC/rB,KAAK,QAAQ6C,UAAWwnB,KAE5C,kBAAC,IAAD,CAAO0B,OAAK,EAAC/rB,KAAM,CAAC,SAAU,gBAAiB6C,UAAWinB,KAC1D,kBAAC,IAAD,CAAOiC,OAAK,EAAC/rB,KAAK,aAAa6C,UAAWknB,KAE1C,kBAAC,IAAD,CACIgC,OAAK,EACL/rB,KAAM,CACF,YACA,SACA,UACA,oBACA,gBAEJ6C,UAAWE,IAGf,kBAAC,IAAD,CAAOipB,OAAQ,SAACC,GAAD,OAAgB,kBAAC,GAAD,eAAYr3B,KAAM,KAASq3B,a,UCrEtFC,IAASF,OACR,kBAACG,GAAA,EAAmBh6B,SAApB,CAA6BC,MAAOoP,GACnC,kBAAC,IAAD,CAAQI,SAAUvJ,IACjB,kBAAC,EAAD,KACC,kBAAC,EAAD,KACC,kBAAC,GAAD,KACC,kBAAC,EAAD,KACC,kBAAC,GAAD,YAON9C,SAASyS,eAAe,S9DqGnB,kBAAmB9R,WACrBA,UAAUk2B,cAAcC,MACrB9yB,MAAK,SAAA+yB,GACJA,EAAaC,gBAEdzyB,OAAM,SAAAya,GACL/b,QAAQ+b,MAAMA,EAAMhW,a,mB+DzI5B7Q,EAAOC,QAAU,IAA0B,wC","file":"static/js/main.4b60e4e9.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/logo.607d3742.svg\";","module.exports = __webpack_public_path__ + \"static/media/loading.8193e0a9.svg\";","var map = {\n\t\"./arrow.svg\": 493,\n\t\"./backEmblem.svg\": 494,\n\t\"./company.svg\": 224,\n\t\"./contact.svg\": 495,\n\t\"./dataPharmLogo.png\": 226,\n\t\"./dataPharmLogo2.png\": 225,\n\t\"./downArrow.svg\": 160,\n\t\"./downArrow2.svg\": 227,\n\t\"./formClose.svg\": 93,\n\t\"./formCloseWhite.svg\": 228,\n\t\"./hamburgerIcon.svg\": 229,\n\t\"./hammer.svg\": 496,\n\t\"./help.svg\": 497,\n\t\"./home.svg\": 498,\n\t\"./homeSearchIcon.svg\": 499,\n\t\"./label.svg\": 500,\n\t\"./listingEnterIcon.svg\": 501,\n\t\"./listingSearchIcon.svg\": 502,\n\t\"./loading.svg\": 158,\n\t\"./logo.svg\": 117,\n\t\"./logoNegative.svg\": 230,\n\t\"./logoNegative_iconSize.svg\": 231,\n\t\"./logoPositive.svg\": 503,\n\t\"./meddata.svg\": 504,\n\t\"./meddata1.svg\": 232,\n\t\"./oldLogo.svg\": 505,\n\t\"./plus.svg\": 506,\n\t\"./save.svg\": 233,\n\t\"./sidebarIcon_home.svg\": 507,\n\t\"./upArrow.svg\": 234,\n\t\"./user.svg\": 223\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 = 159;","module.exports = __webpack_public_path__ + \"static/media/downArrow.c1a9f427.svg\";","module.exports = __webpack_public_path__ + \"static/media/user.7e605209.svg\";","module.exports = __webpack_public_path__ + \"static/media/company.8c3df460.svg\";","module.exports = __webpack_public_path__ + \"static/media/dataPharmLogo2.3b86ff93.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/downArrow2.f8c707e8.svg\";","module.exports = __webpack_public_path__ + \"static/media/formCloseWhite.a40f6b00.svg\";","module.exports = __webpack_public_path__ + \"static/media/hamburgerIcon.953bbea1.svg\";","module.exports = __webpack_public_path__ + \"static/media/logoNegative.5273bff2.svg\";","module.exports = __webpack_public_path__ + \"static/media/logoNegative_iconSize.cf03dcff.svg\";","module.exports = __webpack_public_path__ + \"static/media/meddata1.8fe1337e.svg\";","module.exports = __webpack_public_path__ + \"static/media/save.bcd3338c.svg\";","module.exports = __webpack_public_path__ + \"static/media/upArrow.5bb9d3e7.svg\";","module.exports = __webpack_public_path__ + \"static/media/arrow.30b8bdb3.svg\";","module.exports = __webpack_public_path__ + \"static/media/backEmblem.b57bf610.svg\";","module.exports = __webpack_public_path__ + \"static/media/contact.d7da9209.svg\";","module.exports = __webpack_public_path__ + \"static/media/hammer.1f706cd3.svg\";","module.exports = __webpack_public_path__ + \"static/media/help.95abba4a.svg\";","module.exports = __webpack_public_path__ + \"static/media/home.04ada035.svg\";","module.exports = __webpack_public_path__ + \"static/media/homeSearchIcon.ea5233a6.svg\";","module.exports = __webpack_public_path__ + \"static/media/label.55265e2a.svg\";","module.exports = __webpack_public_path__ + \"static/media/listingEnterIcon.25a69f5b.svg\";","module.exports = __webpack_public_path__ + \"static/media/listingSearchIcon.8b949397.svg\";","module.exports = __webpack_public_path__ + \"static/media/logoPositive.5273bff2.svg\";","module.exports = __webpack_public_path__ + \"static/media/meddata.f38e6994.svg\";","module.exports = __webpack_public_path__ + \"static/media/oldLogo.e0b953af.svg\";","module.exports = __webpack_public_path__ + \"static/media/plus.ff9dfe3c.svg\";","module.exports = __webpack_public_path__ + \"static/media/sidebarIcon_home.ef423cf6.svg\";","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import React, { createContext, useState, useCallback, useLayoutEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport _ from \"lodash\";\n\nexport const GlobalContext = createContext();\nconst GlobalStore = (props) => {\n // Redundant? Removed spaces so convertsion is identical in most cases\n const statusLib = {\n DRA: { scr: \"Draft\", co: \"draft\", display: \"Draft\" },\n RFA: {\n scr: \"ReadyForAuthorisation\",\n co: \"ReadyForAuthorisation\",\n display: \"Ready For Authorisation\",\n },\n NHS: { scr: \"WithNhsBsa\", co: \"WithNhsBsa\", display: \"With NHS BSA\" },\n CON: { scr: \"Confirmed\", co: \"Confirmed\", display: \"Confirmed\" },\n REJ: { scr: \"Rejected\", co: \"Rejected\", display: \"Rejected\" },\n CAN: { scr: \"Cancelled\", co: \"Cancelled\", display: \"Cancelled\" },\n PENSUB: {\n scr: \"PendingSubmission\",\n co: \"PendingSubmission\",\n display: \"Pending Submission\",\n },\n PENCAN: {\n scr: \"PendingCancellation\",\n co: \"PendingCancellation\",\n display: \"Pending Cancellation\",\n },\n };\n const history = useHistory();\n const [pageName, setPageName] = useState(null);\n const [isLoading, setIsLoading] = useState(true);\n const [headerTitles, setHeaderTitles] = useState({\n id: null,\n submissionType: null,\n productName: null,\n status: null,\n submissionId: null,\n currentAction: null,\n });\n const [sidebarBehavior, setSidebarBehavior] = useState({\n position: \"mobile\", // can be \"landing\" \"narrow\" \"mobile\"\n content: \"hide\", // can be none, createNew, hide, selectStatus, selectType, userSettings, contact\n });\n const [globalThrottleTime, setGlobalThrottleTime] = useState(150);\n const [globalAlert, setGlobalAlert] = useState();\n\n const showErrorLogsOnConsole = true;\n\n /**\n * CLEAR HEADER TITLE\n * @description sets Header title & productname null\n */\n const clearHeaderTitle = () => {\n setHeaderTitles({\n id: null,\n submissionType: null,\n productName: null,\n status: null,\n submissionId: null,\n currentAction: null,\n });\n };\n\n /**\n * REMOVE SPACES - ADD SPACES - START ALL CAPITILISED\n * @description make some changes on string\n * @param {string} text\n * @returns {string} newText\n */\n const removeSpaces = (text) => {\n if (!text) {\n return;\n }\n text = text.trim();\n let newText = text\n .replace(/\\w+/g, function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1);\n })\n .replace(/\\s/g, \"\");\n\n return newText;\n };\n const addSpaces = (text) => {\n if (!text) {\n return;\n }\n text = text.trim();\n let newText = text.replace(/([A-Z])/g, \" $1\").trim();\n\n return newText;\n };\n const startAllCapitilised = (text) => {\n if (!text) {\n return;\n }\n text = text.trim();\n\n let newText = text.replace(/\\w\\S*/g, function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n });\n\n return newText;\n };\n\n /**\n * TURN ARRAY TO LINES\n * @description converts array to \"• item
• item\"\n * @param {array} array\n * @returns {string} newText\n */\n const turnArrayToLines = (array) => {\n if (!array || array.length === 0) {\n return;\n }\n let newText = array.map((item, i) => {\n return • {item};\n });\n return newText;\n };\n\n /**\n * TYPE IDENTIFIER\n * @description an advanced version of typeOf\n * @param {*} data\n * @returns {string} \"string\" || \"number\" || \"boolean\" || \"function\" || \"array\" || \"object\" || \"undefined\"\n */\n const typeIdentifier = (data) => {\n let typeofData = typeof data;\n\n if (typeofData === \"string\") {\n return \"string\";\n } else if (typeofData === \"number\") {\n return \"number\";\n } else if (typeofData === \"boolean\") {\n return \"boolean\";\n } else if (typeofData === \"function\") {\n return \"function\";\n } else if (typeofData === \"object\") {\n if (Array.isArray(data)) {\n return \"array\";\n } else {\n return \"object\";\n }\n } else {\n return \"undefined\";\n }\n };\n\n /**\n * PENNY TO POUND\n * @description converts a number to pound.\n * @param {number} value\n */\n const pennyToPound = (value) => {\n return (Number(value) / 100).toFixed(2);\n };\n\n /**\n * GO TO HOME\n * @description pushs \"/\" to history\n */\n const goToHome = () => {\n if (pageName !== \"homePage\") {\n history.push(\"/\");\n }\n };\n\n /**\n * REMOVE AN ITEM FROM AN ARRAY\n * @description indexOf + splice. For removing an item from an array easily.\n * @param {array} array\n * @param {*} item\n */\n const removeAnItemFromAnArray = (array, item) => {\n const index = array.indexOf(item);\n if (index > -1) {\n array.splice(index, 1);\n }\n return array;\n };\n\n /**\n * IS NOT EMPTY\n * @description this function checks if data is empty or null or undefined or .length=0 or keys=0\n * @return false if {data} is empty or null or undefined or .length=0 or keys=0\n * @param {*} data\n */\n const isNotEmpty = (data) => {\n if (!data) {\n return false;\n }\n let type = typeIdentifier(data);\n\n if (type === \"number\" || type === \"boolean\") {\n return true;\n } else if (type === \"string\" || type === \"array\") {\n if (data.length > 0) {\n return true;\n } else {\n return false;\n }\n } else if (type === \"object\") {\n let keys = Object.keys(data);\n if (keys.length > 0) {\n return true;\n } else {\n return false;\n }\n }\n };\n\n /**\n * SETISLOADING TRUE WHEN PAGE NAME CHANGED\n */\n useLayoutEffect(() => {\n setIsLoading(true);\n }, [pageName]);\n\n /**\n * DISABLE IS LOADING WITH DELAY\n * @description covers CSS transition faults.\n */\n const disableIsLoadingWithDelay = useCallback(\n _.debounce(async (obj) => {\n setIsLoading(false);\n }, 500),\n [],\n );\n\n /**\n * CONVERT DATE to NORMAL\n * 2020-10-07T17:57:57.5131142 -> 07.Oct.2020\n */\n const convertDateForScreen = (date) => {\n let newDate = date.substring(0, 10).split(\"-\");\n let months = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ];\n\n return newDate[2] + \".\" + months[newDate[1] - 1] + \".\" + newDate[0];\n };\n\n /**\n * HANDLE SUBMISSIONS + HEADER FUNCTIONS\n */\n const [callSaveAndContinue, setCallSaveAndContinue] = useState(false);\n const [callPreSection, setCallPreSection] = useState(false);\n const [callNextSection, setCallNextSection] = useState(false);\n\n /**\n * TRIGGER GLOBAL ALERT\n * @description has to a and tags.\n * triggerGlobalAlert({text:\"\",status:\"warn\"});\n */\n const triggerGlobalAlert = (obj) => {\n setGlobalAlert({\n text: obj.text,\n status: obj.status,\n });\n closeGlobalAlertWithDelay();\n };\n\n const closeGlobalAlertWithDelay = useCallback(\n _.debounce(async () => {\n setGlobalAlert();\n }, 3000),\n [],\n );\n\n /**\n * ADD NEW FEATURES TO OBJECTs' - ARRAYs' PROTOTYPES\n * Global Variables\n */\n useLayoutEffect(() => {\n // Compares if two arrays are equal\n // Usage -> array1._isEqualTo(array2)\n // Returns boolean\n // eslint-disable-next-line no-extend-native\n Array.prototype._isEqualTo =\n Array.prototype._isEqualTo ||\n function (array) {\n if (!array) {\n return false;\n }\n if (this.length !== array.length) {\n return false;\n }\n\n for (var i = 0, l = this.length; i < l; i++) {\n if (this[i] instanceof Array && array[i] instanceof Array) {\n if (!this[i].equals(array[i])) {\n return false;\n }\n } else if (this[i] !== array[i]) {\n return false;\n }\n }\n return true;\n };\n }, []);\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n return (\n \n {props.children}\n \n );\n};\n\nexport default GlobalStore;\n","import React, { createContext, useState, useLayoutEffect } from \"react\";\nimport _ from \"lodash\";\n\nexport const ClientContext = createContext();\nconst ClientStore = (props) => {\n //-------------------------------------------------------------\n // \t\tFUNCTIONS\n //-------------------------------------------------------------\n\n /**\n * @function\n * @description defines Client Window width, Window Height and Device and Browser type.\n */\n\n const defineWINW = () => {\n return window.innerWidth || document.documentElement.clientWidth;\n };\n const defineWINH = () => {\n return window.innerHeight || document.documentElement.clientHeight;\n };\n const defineDEVICE = () => {\n let DEVICE =\n navigator.userAgent.match(/Android/i) ||\n navigator.userAgent.match(/webOS/i) ||\n navigator.userAgent.match(/iPhone/i) ||\n navigator.userAgent.match(/iPod/i) ||\n navigator.userAgent.match(/BlackBerry/i) ||\n navigator.userAgent.match(/Windows Phone/i) ||\n navigator.userAgent.match(/Opera Mini/i) ||\n navigator.userAgent.match(/IEMobile/i)\n ? true\n : false;\n return DEVICE;\n };\n let BROWSER = \"UNKNOWN\";\n let isBrowserGreen = true;\n const defineBROWSER = () => {\n if (\n (!!window.opr && !!window.opr.addons) ||\n !!window.opera ||\n navigator.userAgent.indexOf(\" OPR/\") >= 0\n ) {\n BROWSER = \"OPERA\";\n } else if (typeof InstallTrigger !== \"undefined\") {\n BROWSER = \"FIREFOX\";\n } else if (\n /constructor/i.test(window.HTMLElement) ||\n (function (p) {\n return p.toString() === \"[object SafariRemoteNotification]\";\n })(\n !window[\"safari\"] ||\n (typeof safari !== \"undefined\" &&\n window.safari.pushNotification),\n )\n ) {\n BROWSER = \"SAFARI\";\n } else if (/*@cc_on!@*/ false || !!document.documentMode) {\n if (!!window.StyleMedia) {\n BROWSER = \"IE\";\n isBrowserGreen = false;\n } else {\n BROWSER = \"OLDEDGE\";\n isBrowserGreen = false;\n }\n } else if (\n !!window.chrome &&\n (!!window.chrome.webstore || !!window.chrome.runtime)\n ) {\n if (navigator.userAgent.indexOf(\"Edg\") !== -1) {\n BROWSER = \"EDGE\";\n } else {\n BROWSER = \"CHROME\";\n }\n }\n };\n defineBROWSER();\n\n /**\n * @var\n * @description defines CS\n */\n const [CS, setCS] = useState({\n WINW: defineWINW(),\n WINH: defineWINH(),\n isMOBILE: defineDEVICE(),\n BROWSER: BROWSER,\n isBROWSERGREEN: isBrowserGreen,\n });\n\n /**\n * @function\n * @description calls WINW and WINH again onResize\n */\n useLayoutEffect(() => {\n const resizeBlocker = _.debounce(() => {\n defineWindowProps();\n }, 250);\n\n const defineWindowProps = () => {\n setCS((prevCS) => ({\n ...prevCS,\n WINW: defineWINW(),\n WINH: defineWINH(),\n }));\n };\n\n window.addEventListener(\"resize\", resizeBlocker);\n }, []);\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n return (\n \n {props.children}\n \n );\n};\n\nexport default ClientStore;\n","import \"isomorphic-fetch\";\n\nexport const FetchAPI = async (props) => {\n const {\n apiShortName,\n setIsLoading,\n apiNeeds,\n history,\n token,\n callbackWithErrorStatusOrConfirmation,\n showErrorLogsOnConsole = false,\n } = props;\n\n let apiURL = null;\n let apiData = null;\n let apiTask = null;\n let apiMethod = \"GET\";\n let apiHeaders = {\n Authorization: \"Bearer \" + token,\n \"Content-Type\": \"application/json\",\n };\n let removeStringfy = false;\n\n if (setIsLoading) {\n setIsLoading(true);\n }\n\n //-------------------------------------------------------------\n // \t\tAPI URLs\n //-------------------------------------------------------------\n switch (apiShortName) {\n case \"callADummySelectBox\":\n apiURL = \"/bulkJSON/dynamicSelectBoxDummy.json\";\n break;\n\n case \"callIngredients\":\n apiURL = `${\n process.env.REACT_APP_API_PATH\n }/ingredients?search=${apiNeeds.value.toLowerCase()}`;\n break;\n\n case \"callIngredients_idSearch\":\n apiURL = `${process.env.REACT_APP_API_PATH}/ingredient/${apiNeeds.value}`;\n break;\n\n case \"callVMP\":\n apiURL = `${\n process.env.REACT_APP_API_PATH\n }/products/virtual?search=${apiNeeds.value.toLowerCase()}`;\n break;\n\n case \"callVMP_idSearch\":\n apiURL = `${process.env.REACT_APP_API_PATH}/product/virtual/${apiNeeds.value}`;\n break;\n\n case \"callAMP\":\n apiURL = `${\n process.env.REACT_APP_API_PATH\n }/products?search=${apiNeeds.value.toLowerCase()}&companyId=${apiNeeds.companyId}`;\n break;\n\n case \"callAMP_idSearch\":\n apiURL = `${process.env.REACT_APP_API_PATH}/product/${apiNeeds.value}`;\n break;\n\n case \"callAMPP\":\n apiURL = `${\n process.env.REACT_APP_API_PATH\n // }/packs?search=${apiNeeds.value.toLowerCase()}`;\n }/packs?companyId=${apiNeeds.companyId}&actualProductId=${apiNeeds.ampId}`;\n break;\n\n case \"callAMPP_idSearch\":\n apiURL = `${\n process.env.REACT_APP_API_PATH\n // }/packs?search=${apiNeeds.value.toLowerCase()}`;\n }/pack/${apiNeeds.value}`;\n break;\n\n case \"callDataForHomePage\":\n apiURL = `${process.env.REACT_APP_API_PATH}/submissions?companyId=${apiNeeds.companyId}&PageSize=800`;\n // apiURL = \"/bulkJSON/homePageDataDummy.json\";\n break;\n\n case \"postNewSubmission\":\n apiURL = `${process.env.REACT_APP_API_PATH}/submission`;\n apiMethod = \"POST\";\n apiData = {\n ...apiNeeds,\n };\n break;\n\n case \"updateASubmission\":\n apiURL = `${process.env.REACT_APP_API_PATH}/submission`;\n apiMethod = \"PUT\";\n apiHeaders = {\n Authorization: \"Bearer \" + token,\n \"Content-Type\": \"application/json-patch+json\",\n };\n apiData = {\n ...apiNeeds,\n };\n break;\n\n case \"callUserPermissions\":\n apiURL = `${process.env.REACT_APP_API_PATH}/user`;\n break;\n\n case \"callASubmission\":\n console.warn('GET apiNeeds = ', apiNeeds);\n if (apiNeeds.submissionID)\n apiURL = `${process.env.REACT_APP_API_PATH}/submission?sid=${apiNeeds.submissionID}&cid=${apiNeeds.companyId}`;\n else \n apiURL = `${process.env.REACT_APP_API_PATH}/submission/${apiNeeds.ID}?cid=${apiNeeds.companyId}`; \n break;\n\n case \"markAsCancelled\":\n console.warn('CANCEL apiNeeds = ', apiNeeds);\n if (apiNeeds.submissionID) \n apiURL = `${process.env.REACT_APP_API_PATH}/submission/cancel?sid=${apiNeeds.submissionID}&cid=${apiNeeds.companyId}`;\n else \n apiURL = `${process.env.REACT_APP_API_PATH}/submission/${apiNeeds.ID}/cancel?cid=${apiNeeds.companyId}`; \n break;\n\n case \"callMassPriceUpdate\":\n apiURL = `${process.env.REACT_APP_API_PATH}/prices?companyId=${apiNeeds.companyId}&pageSize=99999`;\n break;\n\n case \"fileUpload\":\n apiURL = `${process.env.REACT_APP_API_PATH}/smpc`;\n apiMethod = \"POST\";\n apiHeaders = {\n Authorization: \"Bearer \" + token,\n };\n removeStringfy = true;\n const formData = new FormData();\n formData.append(\"files\", apiNeeds.fileProps);\n apiData = formData;\n break;\n \n case \"callFormulation\":\n apiURL = `${\n process.env.REACT_APP_API_PATH\n }/form-lookups/frm`;\n break;\n\n case \"callLicensedRoutes\":\n apiURL = `${\n process.env.REACT_APP_API_PATH\n }/form-lookups/rt`;\n break;\n\n case \"callFlavours\":\n apiURL = `${\n process.env.REACT_APP_API_PATH\n }/form-lookups/f`;\n break;\n\n case \"callControlledDrugCategories\":\n apiURL = `${\n process.env.REACT_APP_API_PATH\n }/form-lookups/cdc`;\n break;\n\n case \"callCurrentLicensing\":\n apiURL = `${\n process.env.REACT_APP_API_PATH\n }/form-lookups/la`;\n break;\n\n case \"callRestrictions\":\n apiURL = `${\n process.env.REACT_APP_API_PATH\n }/form-lookups/ar`;\n break;\n\n case \"callBops\":\n apiURL = `${\n process.env.REACT_APP_API_PATH\n }/form-lookups/bos`;\n break;\n\n case \"callUnits\":\n apiURL = `${\n process.env.REACT_APP_API_PATH\n }/form-lookups/uom`;\n break;\n\n case \"callLegalCategory\":\n apiURL = `${\n process.env.REACT_APP_API_PATH\n }/form-lookups/c`;\n break;\n\n default:\n apiURL = \"\";\n }\n\n //-------------------------------------------------------------\n // \tFETCH\n //-------------------------------------------------------------\n let newBody;\n if (removeStringfy) {\n newBody = apiData;\n } else {\n newBody = JSON.stringify(apiData ?? {});\n }\n\n if (!process.env.NODE_ENV && process.env.NODE_ENV === \"development\" && showErrorLogsOnConsole) {\n console.warn(\n \"apiCall> \",\n apiURL,\n apiMethod === \"POST\" || apiMethod === \"PUT\" ? newBody : \"\",\n );\n }\n\n apiTask = fetch(apiURL, {\n // mode: \"no-cors\",\n method: apiMethod,\n headers: apiHeaders,\n ...((apiMethod === \"POST\" || apiMethod === \"PUT\") && {\n body: newBody,\n }),\n });\n\n let dataObject;\n let errorMessage;\n let errorObject;\n\n await apiTask\n .then((response) => {\n if (!response.ok) {\n throw response;\n } else {\n return response.json();\n }\n })\n\n //-------------------------------------------------------------\n // \t\tHANDLE DATA\n //-------------------------------------------------------------\n\n .then((data) => {\n if (!data.id && data.status?.length > 0) {\n errorMessage = \"JSONIsEmpty\";\n errorObject = data;\n }\n dataObject = data;\n })\n\n //-------------------------------------------------------------\n // \t\tCATCH ERROR\n //-------------------------------------------------------------\n\n .catch((response) => {\n dataObject = undefined;\n errorMessage = response.status;\n errorObject = response;\n });\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n if (!process.env.NODE_ENV && process.env.NODE_ENV === \"development\" && showErrorLogsOnConsole) {\n console.info(\n \"apiResponse> \",\n dataObject,\n errorMessage || \"\",\n errorObject !== dataObject ? errorObject || \"\" : \"\",\n );\n }\n\n if (callbackWithErrorStatusOrConfirmation && errorObject) {\n return errorObject;\n } else if (callbackWithErrorStatusOrConfirmation && !errorObject) {\n return dataObject;\n } else if (errorMessage) {\n if (setIsLoading) {\n setIsLoading(false);\n }\n history.push({ pathname: \"/error/\" + errorMessage });\n return undefined;\n // setTimeout(() => {\n // if (setIsLoading) {\n // setIsLoading(false);\n // }\n // history.replace({ pathname: \"/error/\" + errorMessage });\n // }, 250);\n } else {\n return dataObject;\n }\n};\n","import React from \"react\";\nimport \"./BackEmblem.scss\";\n\nexport const BackEmblem = (props) => {\n const { svgClass } = props;\n\n return (\n \n \n \n );\n};\n","import React, { useContext } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport { BackEmblem } from \"../BackEmblem/BackEmblem.js\";\nimport \"./IsLoading.scss\";\n\nexport const IsLoading = (props) => {\n //-------------------------------------------------------------\n // \t\tVARIABLES\n //-------------------------------------------------------------\n const { isLoading } = useContext(GlobalContext);\n const { showMeAlways, internalBoo } = props;\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n if (internalBoo === true || internalBoo === false) {\n return (\n
\n \n \"\"\n emc med data is working on your request.\n
\n );\n } else {\n return (\n
\n \n \"\"\n emc med data is working on your request.\n
\n );\n }\n};\n","import React, { createContext, useState, useLayoutEffect, useContext } from \"react\";\nimport { useHistory, useLocation } from \"react-router-dom\";\nimport Oidc from \"oidc-client\";\nimport { FetchAPI } from \"components/APIConnections/APIConnections.js\";\nimport { IsLoading } from \"components/IsLoading/IsLoading.js\";\nimport { GlobalContext } from \"./GlobalStore.js\";\nimport Cookies from \"universal-cookie\";\n\nexport const UserContext = createContext({});\n\nexport const UserStore = ({ children }) => {\n const { setSidebarBehavior, showErrorLogsOnConsole } = useContext(GlobalContext);\n const oidcConfig = {\n authority: process.env.REACT_APP_AUTH_URL,\n client_id: process.env.REACT_APP_IDENTITY_CLIENT_ID,\n redirect_uri: process.env.REACT_APP_REDIRECT_URL,\n response_type: \"code\",\n scope: \"openid profile datapharm.indemand.api\",\n\n automaticSilentRenew: false,\n silentRequestTimeout: 20 * 1000,\n silent_redirect_uri: process.env.REACT_APP_SILENT_REDIRECT_URL,\n // silent_redirect_uri: \"http://localhost:4200/silentRenew\", // << if this is different from the original REACT_APP_REDIRECT_URL ident throws an error\n\n // monitorSession: true,\n // accessTokenExpiringNotificationTime: 20, //default 60\n // checkSessionInterval: 5000, //default 2000\n // silentRequestTimeout: 20000, //default: 10000\n\n revokeAccessTokenOnSignout: true,\n\n metadata: {\n issuer: process.env.REACT_APP_AUTH_URL,\n jwks_uri: process.env.REACT_APP_AUTH_URL + \"/.well-known/openid-configuration/jwks\",\n authorization_endpoint: process.env.REACT_APP_AUTH_URL + \"/connect/authorize\",\n token_endpoint: process.env.REACT_APP_AUTH_URL + \"/connect/token\",\n userinfo_endpoint: process.env.REACT_APP_AUTH_URL + \"/connect/userinfo\",\n end_session_endpoint: process.env.REACT_APP_AUTH_URL + \"/connect/endsession\",\n check_session_iframe: process.env.REACT_APP_AUTH_URL + \"/connect/checksession\",\n revocation_endpoint: process.env.REACT_APP_AUTH_URL + \"/connect/revocation\",\n introspection_endpoint: process.env.REACT_APP_AUTH_URL + \"/connect/introspect\",\n },\n };\n const alreadyVisitedHubCookie = \"alreadyVisitedHub\";\n let history = useHistory();\n const cookies = new Cookies();\n const [oidcMgr, setOidcMgr] = useState();\n\n const [processing, setProcessing] = useState(true);\n const [user, setUser] = useState();\n const [userState, setUserState] = useState();\n const location = useLocation();\n\n /**\n * CREATE INDEMAND OR PUBLISHER HUB OIDCMGR\n */\n useLayoutEffect(() => {\n setupAuthentication();\n }, []);\n\n const setupAuthentication = () => {\n setupMeddataAuthentication();\n const newOidcMgr = new Oidc.UserManager(oidcConfig);\n setOidcMgr(newOidcMgr);\n }\n\n const setupMeddataAuthentication = () => {\n if (!location.search) {\n const cookie = getHubVisitCookie();\n if (!cookie) {\n setHubOIDCSettings();\n }\n }\n else if (location.search?.includes(process.env.REACT_APP_MEDDATA_REDIRECT_QUERY_PARAM)) {\n setHubVisitCookie();\n }\n else if (!location.search?.includes(\"code\")) {\n setHubOIDCSettings();\n }\n }\n\n const getHubVisitCookie = () => cookies.get(alreadyVisitedHubCookie);\n const setHubVisitCookie = () => cookies.set(alreadyVisitedHubCookie, null, { expires: 0 });\n\n const setHubOIDCSettings = () => {\n oidcConfig.client_id = process.env.REACT_APP_MEDDATA_IDENTITY_CLIENT_ID;\n oidcConfig.redirect_uri = process.env.REACT_APP_MEDDATA_REDIRECT_URL;\n oidcConfig.silent_redirect_uri = process.env.REACT_APP_MEDDATA_SILENT_REDIRECT_URL;\n }\n\n /**\n * DEFINE USER MANAGER and GET TOKENS\n */\n useLayoutEffect(() => {\n if (!oidcMgr) {\n return;\n }\n\n if (history.location.pathname === \"/callback\") {\n signinRedirectCallback();\n } else {\n oidcMgr.getUser().then((user) => {\n handleUser(user);\n });\n }\n\n oidcMgr.events.addSilentRenewError((e) => {\n alert(\"silent renew error\", e.message);\n logout();\n });\n\n oidcMgr.events.addAccessTokenExpired(() => {\n tokenExpired();\n });\n }, [oidcMgr]);\n\n /**\n * USER MANAGER FUNCTIONS\n */\n const handleUser = async (user) => {\n if (!!!user) {\n setProcessing(false);\n return;\n }\n if (showErrorLogsOnConsole) {\n console.info(user);\n }\n setUser(user);\n\n let accessToken = user.access_token;\n let userId = user.profile.user_id;\n let userName = user.profile.user_name;\n let userEmail = user.profile.email;\n\n if (!!!accessToken || !!!userId || !!!userName) {\n history.push(\"/error/noAccessToken\");\n setProcessing(false);\n return;\n }\n\n // LOAD PERMISSIONS\n let permissions = await FetchAPI({\n showErrorLogsOnConsole: showErrorLogsOnConsole,\n callbackWithErrorStatusOrConfirmation: true,\n history: history,\n apiShortName: \"callUserPermissions\",\n token: accessToken,\n apiNeeds: {\n userId: userId,\n },\n });\n\n if (\n permissions.ok === false\n || permissions.message === \"Failed to fetch\"\n || permissions.companyPermissions.length === 0\n ) {\n history.push(\"/error/noPermissions\");\n setProcessing(false);\n return;\n }\n\n // FIND SELECTED COMPANY\n\n let Cookie = getUserCookie(userId);\n let selectedCompany;\n if (!Cookie) {\n selectedCompany = permissions ? permissions.companyPermissions[0] : \"\";\n setUserCookie(userId, selectedCompany);\n } else {\n selectedCompany = Cookie.selectedCompany;\n }\n\n // UPDATE STATE\n setUserState({\n userId: userId,\n userName: userName,\n userEmail: userEmail,\n companyPermissions: permissions ? permissions.companyPermissions : \"\",\n selectedCompany: selectedCompany,\n companyPackCount: 66,\n companyProductCount: 99,\n currentPermLevel: definePermissionLevel(selectedCompany?.permissions || null),\n accessToken: accessToken,\n });\n setProcessing(false);\n };\n\n /**\n * COOKIES\n */\n const setUserCookie = (userId, selectedCompany) => {\n let newCookie = {\n userId: userId,\n selectedCompany: selectedCompany,\n };\n cookies.set(\"userState\", newCookie, { path: \"/\", expires: 0 });\n };\n const getUserCookie = (userId) => {\n let oldCookie = cookies.get(\"userState\");\n if (!oldCookie || oldCookie.userId !== userId) {\n cookies.remove(\"userState\");\n return false;\n } else {\n return oldCookie;\n }\n };\n const removeUserCookie = () => {\n cookies.remove(\"userState\");\n };\n\n /**\n * CHANGE SELECTED COMPANY\n */\n const changeSelectedCompany = (selectedCompanyId) => {\n let newCompany = userState.companyPermissions[selectedCompanyId];\n setUserCookie(userState.userId, newCompany);\n setUserState((prev) => ({\n ...prev,\n selectedCompany: newCompany,\n currentPermLevel: definePermissionLevel(newCompany.permissions || null),\n }));\n setSidebarBehavior({ position: \"landing\", content: \"none\" });\n };\n\n /**\n * DEFINE PERMISION LEVEL FOR SELECTED COMPANY\n */\n const definePermissionLevel = (selectedCompanyPermissionsArray) => {\n const L0Text = \"Indemand User\";\n const L1Text = \"in-demand V2 L1\";\n const L2Text = \"in-demand V2 L2\";\n let currentLevel = -1;\n\n if (!selectedCompanyPermissionsArray || selectedCompanyPermissionsArray.length === 0) {\n return currentLevel;\n }\n\n selectedCompanyPermissionsArray.forEach((item) => {\n if (item.role === L0Text && currentLevel < 0) {\n currentLevel = 0;\n }\n if (item.role === L1Text && currentLevel < 1) {\n currentLevel = 1;\n }\n if (item.role === L2Text && currentLevel < 2) {\n currentLevel = 2;\n }\n });\n\n return currentLevel;\n };\n\n /**\n * MANAGER ACTIONS\n */\n const isAuthenticated = () => {\n if (!user || !userState) {\n return false;\n } else {\n return true;\n }\n };\n\n const login = () => {\n oidcMgr.signinRedirect();\n };\n\n const signinRedirectCallback = () => {\n oidcMgr\n .signinRedirectCallback()\n .then((user) => {\n if (user) {\n handleUser(user);\n history.replace(\"/\");\n }\n })\n .catch((err) => {\n history.push(\"/error/signinRedirectCallbackErr\" + err);\n setProcessing(false);\n });\n };\n\n const logout = () => {\n setProcessing(false);\n oidcMgr.signoutRedirect();\n oidcMgr.clearStaleState();\n oidcMgr.signoutRedirectCallback().then(() => {\n localStorage.clear();\n sessionStorage.clear();\n removeUserCookie();\n history.push(\"/loggedOut\");\n });\n };\n\n const signoutRedirectCallback = () => {\n setProcessing(false);\n oidcMgr.signoutRedirectCallback().then(() => {\n localStorage.clear();\n sessionStorage.clear();\n oidcMgr.clearStaleState();\n removeUserCookie();\n history.push(\"/loggedOut\");\n });\n };\n\n const tokenExpired = () => {\n if (showErrorLogsOnConsole) {\n console.info(\"tokenExpired!!!\");\n }\n signoutRedirectCallback();\n };\n\n const signinSilent = () => {\n if (showErrorLogsOnConsole) {\n console.info(\"signinSilent>\");\n }\n oidcMgr\n .signinSilent()\n .then((user) => {\n if (showErrorLogsOnConsole) {\n console.info(\"silent signed in\", user);\n }\n })\n .catch((err) => {\n if (showErrorLogsOnConsole) {\n console.info(\"silent signed error\", err);\n }\n });\n };\n\n const signinSilentCallback = () => {\n if (showErrorLogsOnConsole) {\n console.info(\"signinSilentCallBack>\");\n }\n\n oidcMgr.signinSilentCallback((...props) => {\n console.info(props);\n });\n };\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n return (\n \n {processing ? : children}\n \n );\n};\n\nexport default UserStore;\n","import * as React from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { ApplicationInsights } from '@microsoft/applicationinsights-web';\nimport { ReactPlugin } from '@microsoft/applicationinsights-react-js';\nimport { createBrowserHistory } from 'history';\n\nexport const reactPlugin = new ReactPlugin();\n\nconst browserHistory = createBrowserHistory({ basename: '' });\nconst instrumentationKey = process.env.REACT_APP_INSTRUMENTATION_KEY ?? '';\n\nconst appInsights = new ApplicationInsights({\n config: {\n instrumentationKey,\n extensions: [reactPlugin],\n extensionConfig: {\n [reactPlugin.identifier]: { history: browserHistory },\n },\n },\n});\n\nappInsights.loadAppInsights();\n\nconst Telemetry = ({ children }) => {\n const location = useLocation();\n React.useEffect(() => {\n const searchParams = new URLSearchParams(location.search);\n const query = searchParams.get('search');\n reactPlugin.trackPageView({\n uri: location.pathname,\n name: 'page change',\n properties: { query },\n });\n }, [location]);\n\n return children;\n};\n\nexport default Telemetry;\n","import React, { useContext } from \"react\";\nimport { Route } from \"react-router-dom\";\nimport { UserContext } from \"./UserStore.js\";\n\nexport const PrivateRoute = ({ component, ...rest }) => {\n const { isAuthenticated, login } = useContext(UserContext);\n\n if (isAuthenticated() && !!component) {\n return ;\n } else {\n login();\n }\n\n return null;\n};\n","import { useContext, useLayoutEffect } from \"react\";\nimport { UserContext } from \"./UserStore.js\";\nimport { GlobalContext } from \"./GlobalStore.js\";\n\nimport { useHistory } from \"react-router-dom\";\n\nexport const AuthPages = (props) => {\n let location = useHistory().location.pathname;\n const {\n signinRedirectCallback,\n login,\n logout,\n signoutRedirectCallback,\n signinSilentCallback,\n } = useContext(UserContext);\n const { setIsLoading } = useContext(GlobalContext);\n\n useLayoutEffect(() => {\n setIsLoading(true);\n }, []);\n\n useLayoutEffect(() => {\n switch (location) {\n case \"/callback\":\n signinRedirectCallback();\n break;\n case \"/login\":\n login();\n break;\n case \"/logout\":\n logout();\n break;\n case \"/logout/callback/\":\n signoutRedirectCallback();\n break;\n case \"/silentRenew\":\n signinSilentCallback();\n break;\n default:\n break;\n }\n }, []);\n\n return null;\n};\n","import React from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport const CreateNew = (props) => {\n return (\n
\n
\n {\" \"}\n Create New\n
\n Submission{\" \"}\n
\n
\n
\n New Product\n New Pack\n Update Product\n Update Pack\n Mass Price Update\n
\n
\n );\n};\n","import React from \"react\";\n\nexport const CheckBox = (props) => {\n const { text, checked, onChange } = props;\n\n return (\n \n );\n};\n","import React, { useState, useCallback } from \"react\";\nimport _ from \"lodash\";\nimport \"./Button.scss\";\n\nexport const Button = (props) => {\n const {\n buttonType,\n text,\n onClick,\n additionalStyle,\n throttle,\n viewMode,\n } = props;\n const [isDisabled, setIsDisabled] = useState(false);\n\n /**\n * ONCLICK ACTION\n * @description buttons click onClick action which is coming from parent.\n * @description and if throttle is true, button is disabled for 5 sec.\n */\n const onClickAction = () => {\n onClick();\n if (throttle) {\n setIsDisabled(true);\n throttledCall();\n }\n };\n const throttledCall = useCallback(\n _.debounce(async () => {\n setIsDisabled(false);\n }, 5000),\n [],\n );\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n if (viewMode === \"view\") {\n return null;\n }\n\n return (\n {\n onClickAction();\n }}\n style={additionalStyle}\n data-testid=\"buttonText\"\n >\n {text}\n \n );\n};\n","import React, { useState, useLayoutEffect, useContext } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\n\nimport { CheckBox } from \"./CheckBox.js\";\nimport { Button } from \"../FormElements/Button/Button.js\";\n\nexport const SelectStatus = (props) => {\n const { statusLib, setSidebarBehavior } = useContext(GlobalContext);\n const [selectedCheckBoxes, setSelectedCheckBoxes] = useState({\n Draft: { name: statusLib.DRA.scr, checked: true },\n ReadyForAuthorisation: { name: statusLib.RFA.scr, checked: false },\n PendingSubmission: { name: statusLib.PENSUB.scr, checked: false },\n WithNhsBsa: { name: statusLib.NHS.scr, checked: false },\n Confirmed: { name: statusLib.CON.scr, checked: false },\n Rejected: { name: statusLib.REJ.scr, checked: false },\n PendingCancellation: { name: statusLib.PENCAN.scr, checked: false },\n Cancelled: { name: statusLib.CAN.scr, checked: false },\n });\n const [selectedCount, setSelectedCount] = useState(0);\n let history = useHistory();\n\n /**\n * @function handleSelect -> converts all selection checked or unchecked depending on param\n * @description if param is true, all options will be checked, if false, all will be unchecked\n * @param {boolean}\n *\n * @function changeSelection -> convert selected option checked or unchecked.\n * @param {string} selectedOption\n */\n const handleSelect = (trueOrFalse) => {\n let checked = false;\n if (trueOrFalse) {\n checked = true;\n }\n\n let newArray = {};\n\n if (selectedCheckBoxes) {\n Object.entries(selectedCheckBoxes).map(([key, item]) => {\n newArray[key] = { name: item.name, checked: checked };\n return null;\n });\n\n setSelectedCheckBoxes(newArray);\n }\n };\n\n const changeSelection = (selectedOption) => {\n setSelectedCheckBoxes((prev) => ({\n ...prev,\n [selectedOption]: {\n name: selectedCheckBoxes[selectedOption].name,\n checked: !selectedCheckBoxes[selectedOption].checked,\n },\n }));\n };\n\n useLayoutEffect(() => {\n let newSelectedCount = 0;\n if (selectedCheckBoxes) {\n Object.entries(selectedCheckBoxes).map(([key, item]) => {\n if (item.checked) {\n newSelectedCount++;\n }\n\n return null;\n });\n\n setSelectedCount(newSelectedCount);\n }\n }, [selectedCheckBoxes]);\n\n /**\n * @function filterStatus\n * @description collect all selected options and send to the page\n * @description NOT FINISHED YET.\n */\n const filterStatus = () => {\n let newArray = [];\n\n if (selectedCheckBoxes) {\n Object.entries(selectedCheckBoxes).map(([key, item]) => {\n if (item.checked) {\n newArray.push(item.name);\n }\n return null;\n });\n\n history.push({\n pathname: \"/list\",\n search:\n \"?\" + new URLSearchParams({ status: newArray }).toString(),\n });\n setSidebarBehavior({ position: \"narrow\", content: \"none\" });\n }\n };\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n return (\n
\n
\n Select Status\n
\n {\n handleSelect(true);\n }}\n >\n Select All\n {\" \"}\n -{\" \"}\n {\n handleSelect(false);\n }}\n >\n Deselect All\n \n
\n
\n
\n
\n {!selectedCheckBoxes\n ? null\n : Object.entries(selectedCheckBoxes).map(([key, item]) => {\n return (\n {\n changeSelection(key);\n }}\n />\n );\n })}\n\n {\n filterStatus();\n }}\n additionalStyle={{ marginRight: 0 }}\n />\n
\n
\n );\n};\n","import React, { useState, useLayoutEffect, useContext } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport { useHistory } from \"react-router-dom\";\nimport { CheckBox } from \"./CheckBox.js\";\nimport { Button } from \"../FormElements/Button/Button.js\";\n\nexport const SelectType = (props) => {\n const { setSidebarBehavior } = useContext(GlobalContext);\n const [selectedCheckBoxes, setSelectedCheckBoxes] = useState({\n NewProduct: { name: \"New Product\", checked: true },\n NewPack: { name: \"New Pack\", checked: false },\n UpdateProduct: { name: \"Update Product\", checked: false },\n UpdatePack: { name: \"Update Pack\", checked: false },\n MassPriceUpdate: { name: \"Mass Price Update\", checked: false },\n });\n const [selectedCount, setSelectedCount] = useState(0);\n let history = useHistory();\n\n /**\n * @function handleSelect -> converts all selection checked or unchecked depending on param\n * @description if param is true, all options will be checked, if false, all will be unchecked\n * @param {boolean}\n *\n * @function changeSelection -> convert selected option checked or unchecked.\n * @param {string} selectedOption\n */\n const handleSelect = (trueOrFalse) => {\n let checked = false; // DESELECT ALL\n if (trueOrFalse) {\n checked = true;\n } // SELECT ALL\n\n let newArray = {};\n\n if (selectedCheckBoxes) {\n Object.entries(selectedCheckBoxes).map(([key, item]) => {\n newArray[key] = { name: item.name, checked: checked };\n return null;\n });\n\n setSelectedCheckBoxes(newArray);\n }\n };\n\n const changeSelection = (selectedOptions) => {\n setSelectedCheckBoxes((prev) => ({\n ...prev,\n [selectedOptions]: {\n name: selectedCheckBoxes[selectedOptions].name,\n checked: !selectedCheckBoxes[selectedOptions].checked,\n },\n }));\n };\n\n useLayoutEffect(() => {\n let newSelectedCount = 0;\n if (selectedCheckBoxes) {\n Object.entries(selectedCheckBoxes).map(([key, item]) => {\n if (item.checked) {\n newSelectedCount++;\n }\n\n return null;\n });\n\n setSelectedCount(newSelectedCount);\n }\n }, [selectedCheckBoxes]);\n\n /**\n * @function filterStatus\n * @description collect all selected options and send to the page\n * @description NOT FINISHED YET.\n */\n const filterType = () => {\n let newArray = [];\n\n if (selectedCheckBoxes) {\n Object.entries(selectedCheckBoxes).map(([key, item]) => {\n if (item.checked) {\n newArray.push(key);\n }\n return null;\n });\n\n history.push({\n pathname: \"/list\",\n search: \"?\" + new URLSearchParams({ type: newArray }).toString(),\n });\n setSidebarBehavior({ position: \"narrow\", content: \"none\" });\n }\n };\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n return (\n
\n
\n Select Type\n
\n {\n handleSelect(true);\n }}\n >\n Select All\n {\" \"}\n -{\" \"}\n {\n handleSelect(false);\n }}\n >\n Deselect All\n \n
\n
\n
\n
\n {!selectedCheckBoxes\n ? null\n : Object.entries(selectedCheckBoxes).map(([key, item]) => {\n return (\n {\n changeSelection(key);\n }}\n />\n );\n })}\n\n {\n filterType();\n }}\n additionalStyle={{ marginRight: 0 }}\n />\n
\n
\n );\n};\n","import React from \"react\";\n\nexport const RadioButton = (props) => {\n const { text, checked, onChange } = props;\n\n return (\n \n );\n};\n","import React, { useState, useContext, useLayoutEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { UserContext } from \"contexts/UserStore.js\";\nimport { RadioButton } from \"./RadioButton.js\";\nimport { Button } from \"../FormElements/Button/Button.js\";\nimport { Link } from \"react-router-dom\";\n\nexport const UserSettings = (props) => {\n const { userState, changeSelectedCompany } = useContext(UserContext);\n const [allRadios, setAllRadios] = useState(\n userState.companyPermissions.map((item) => {\n return {\n ...item,\n checked: userState.selectedCompany?.id === item.id ? true : false,\n };\n }),\n );\n const [selectedOption, setSelectedOption] = useState(userState.selectedCompany);\n let history = useHistory();\n\n /**\n * CHANGE COMPANY SELECTION\n */\n const changeSelection = (selectedCompany) => {\n setAllRadios((prev) => ({\n ...prev,\n [selectedOption]: {\n name: allRadios[selectedOption].name,\n checked: false,\n },\n [selectedCompany]: {\n name: allRadios[selectedCompany].name,\n checked: true,\n },\n }));\n };\n useLayoutEffect(() => {\n let newSelectedOption = 0;\n if (allRadios) {\n Object.entries(allRadios).map(([key, item]) => {\n if (item.checked) {\n newSelectedOption = key;\n }\n\n return null;\n });\n\n setSelectedOption(newSelectedOption);\n }\n }, [allRadios]);\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n return (\n
\n {/* HEADER */}\n
User Settings
\n
\n\n {/* CURRENT ACCOUNT */}\n
\n
CURRENT ACCOUNT:
\n {userState.userName}\n \"\"\n {userState.selectedCompany?.name}\n \"\"\n \n Log Out\n \n
\n {/* CURRENT ROLE */}\n {userState.currentPermLevel === -1 ? null : (\n \n
\n \n
PERMISSIONS:
\n {userState.currentPermLevel === 0\n ? \"Indemand User\"\n : userState.currentPermLevel === 1\n ? \"Collate and track submissions (L1)\"\n : userState.currentPermLevel === 2\n ? \"Collate, track and authorise submissions (L2)\"\n : null}\n
\n \n )}\n {/* SWITCH COMPANY */}\n\n {!allRadios || allRadios.length < 2 ? null : (\n \n
\n
\n
SWITCH COMPANY:
\n\n {!allRadios\n ? null\n : Object.entries(allRadios).map(([key, item]) => {\n return (\n {\n changeSelection(key);\n }}\n />\n );\n })}\n\n {\n changeSelectedCompany(selectedOption);\n history.push(\"/\");\n }}\n additionalStyle={{ marginRight: 0 }}\n />\n
\n
\n )}\n \n );\n};\n","import React from \"react\";\nimport { Button } from \"../FormElements/Button/Button.js\";\n\nexport const Contact = (props) => {\n return (\n \n
\n \n
\n
\n\n
\n Datapharm runs emc (electronic medicines compendium), the UK’s\n leading provider of trusted medical information, and provides\n regulatory and compliance software solutions to the\n pharmaceutical industry.\n {\n window.open(\"https://www.datapharm.com/\", \"_blank\");\n }}\n >\n More About Us\n \n
\n
\n
\n You can contact with us if you have questions and problems with\n your account or if you need help about emc InDemand.\n {\n window.open(\n \"https://www.google.com/search?q=contact\",\n \"_blank\",\n );\n }}\n additionalStyle={{ marginRight: 0 }}\n />\n
\n \n );\n};\n","import React, { useContext } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore\";\n\nexport const NavButton = (props) => {\n const { id, text, icon, onClick } = props;\n const { sidebarBehavior } = useContext(GlobalContext);\n\n return (\n {\n if (onClick) {\n onClick();\n }\n }}\n onKeyPress={(e) => {\n if ((e.key = \"Enter\")) {\n onClick();\n }\n }}\n >\n \n
\n \"\"\n
\n \n );\n};\n","import React, { useContext } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore\";\n\nexport const NavButtonMD = (props) => {\n const { id, icon, onClick } = props;\n const { sidebarBehavior } = useContext(GlobalContext);\n\n return (\n {\n if (onClick) {\n onClick();\n }\n }}\n onKeyPress={(e) => {\n if ((e.key = \"Enter\")) {\n onClick();\n }\n }}\n >\n
\n emc med data browser\n \"\"\n
\n
\n \"\"\n
\n \n );\n};\n","import React, { useContext } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore\";\n\nexport const NavButtonContact = (props) => {\n const { id, icon, onClick } = props;\n const { sidebarBehavior } = useContext(GlobalContext);\n\n return (\n {\n if (onClick) {\n onClick();\n }\n }}\n onKeyPress={(e) => {\n if ((e.key = \"Enter\")) {\n onClick();\n }\n }}\n >\n
\n Contact\n \"\"\n
\n
\n \"\"\n
\n \n );\n};\n","import React, { useContext, useState, useCallback } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport _ from \"lodash\";\nimport { GlobalContext } from \"contexts/GlobalStore\";\nimport { UserContext } from \"contexts/UserStore.js\";\nimport { BackEmblem } from \"../BackEmblem/BackEmblem.js\";\nimport { CreateNew } from \"./CreateNew.js\";\nimport { SelectStatus } from \"./SelectStatus.js\";\nimport { SelectType } from \"./SelectType.js\";\nimport { UserSettings } from \"./UserSettings.js\";\nimport { Contact } from \"./Contact.js\";\nimport { NavButton } from \"./NavButton.js\";\nimport { NavButtonMD } from \"./NavButtonMD.js\";\nimport { NavButtonContact } from \"./NavButtonContact.js\";\nimport \"./Sidebar.scss\";\n\nexport const Sidebar = (props) => {\n const history = useHistory();\n const { sidebarBehavior, setSidebarBehavior, pageName, goToHome } = useContext(GlobalContext);\n const { userState, isAuthenticated } = useContext(UserContext);\n const [disableOnMouseLeave, setDisableOnMouseLeave] = useState(false);\n\n /**\n * HANDLE CONTENT\n * @description changes sidebar behaviour in global store\n * @param {string} newContent\n */\n const handleContent = (newContent) => {\n if (newContent === sidebarBehavior.content) {\n return;\n }\n setDisableOnMouseLeave(true);\n setSidebarBehavior((prev) => ({\n ...prev,\n content: newContent,\n }));\n delayDisableMouseLeave();\n };\n\n const delayDisableMouseLeave = useCallback(\n _.debounce(async (obj) => {\n setDisableOnMouseLeave(false);\n }, 250),\n [],\n );\n\n /**\n * ON MOUSE LEAVE FROM SIDEBAR\n * @description if mouse leave over sidebar, sidebar has to turn condensed version\n * @description An additional function can be added here to block onMouseOver immediately. It may help to user.\n */\n const onMouseLeaveAction = () => {\n if (disableOnMouseLeave || sidebarBehavior.position === \"mobile\") {\n return;\n }\n\n if (\n sidebarBehavior.position !== \"narrow\" &&\n sidebarBehavior.position !== \"landing\" &&\n pageName !== \"homePage\"\n ) {\n return;\n } else if (pageName === \"aboutPage\" && sidebarBehavior.content !== \"about\") {\n handleContent(\"about\");\n } else if (\n ((pageName && pageName.split(\"/\")[0] === \"handlePage\") ||\n pageName === \"listingPage\" ||\n pageName === \"homePage\") &&\n sidebarBehavior.content !== \"none\"\n ) {\n handleContent(\"none\");\n }\n };\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n if (!isAuthenticated()) {\n return null;\n }\n\n return (\n {\n onMouseLeaveAction();\n }}\n >\n {/* CLOSE X ICON FOR MOBILE MENU */}\n {\n setSidebarBehavior({ position: \"mobile\", content: \"hide\" });\n }}\n />\n\n {/* VERTICAL LINE */}\n
\n\n {/* SIDEBAR SUB CONTENTS -- for Select Status for Select Type for User Settings or for Contact */}\n
\n \n \n \n \n \n
\n\n {/* BACKEMBLEM */}\n \n\n {/* SIDEBAR HEADERZONE STARTED */}\n
\n {/* LOGOS */}\n
\n {\n goToHome();\n }}\n src={require(\"../../img/logoNegative.svg\")}\n alt=\"emc med data dm+d\"\n /> \n {\n goToHome();\n }}\n src={require(\"../../img/logoNegative_iconSize.svg\")}\n alt=\"emc med data dm+d\"\n /> \n
\n\n {/* SIDEBAR NAVIGATION BUTTONS */}\n {pageName === \"homePage\" ? null : (\n HOME\"\n icon=\"home.svg\"\n onClick={() => {\n if (pageName === \"homePage\") {\n handleContent(\"none\");\n } else {\n history.push(\"/\");\n }\n }}\n />\n )}\n SUBMISSION\"\n icon=\"plus.svg\"\n onClick={() => {\n handleContent(\"createNew\");\n }}\n />\n STATUS\"\n icon=\"arrow.svg\"\n onClick={() => {\n handleContent(\"selectStatus\");\n }}\n />\n TYPE\"\n icon=\"label.svg\"\n onClick={() => {\n handleContent(\"selectType\");\n }}\n />\n
\n {/* SIDEBAR HEADERZONE ENDED */}\n\n {/* SIDEBAR FOOTERZONE STARTED */}\n
\n {\n window.open(\"https://www.emcmeddata.com\", \"_blank\");\n }}\n />\n {\n if (pageName === \"aboutPage\") {\n handleContent(\"none\");\n } else {\n // MOVED TO EXTERNAL VERSION FOR THIS VERSION\n // history.push(\"/About&Legal\");\n\n window.open(\n \"https://www.datapharm.com/products/emc-indemand\",\n \"_blank\",\n );\n }\n }}\n />\n {\n window.open(\n \"https://support.datapharm.com/knowledge\",\n \"_blank\",\n );\n }}\n />\n \" +\n userState.userName +\n \"
(\" +\n userState.selectedCompany?.name +\n \")User Settings\"\n }\n icon=\"user.svg\"\n onClick={() => {\n handleContent(\"userSettings\");\n }}\n />\n {\n window.open(\"https://www.datapharm.com/contact/\", \"_blank\");\n }}\n />\n
\n {/* SIDEBAR FOOTERZONE ENDED */}\n \n );\n};\n","import React, { useContext } from \"react\";\nimport { Link, useHistory } from \"react-router-dom\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\n\nexport const HeaderActions = (props) => {\n const { headerActionsScrollYPosition } = props;\n const {\n pageName,\n headerTitles,\n callSaveAndContinue,\n setCallSaveAndContinue,\n callPreSection,\n setCallPreSection,\n callNextSection,\n setCallNextSection,\n } = useContext(GlobalContext);\n const history = useHistory();\n\n /**\n * GO BACK with useHistory\n */\n const goBack = () => {\n history.goBack();\n };\n\n /**\n * SCROLL TO ACTIONS ZONE\n */\n const scrollToAction = () => {\n document.getElementById(\"userActionsZone\").scrollIntoView({\n behavior: \"smooth\",\n });\n };\n\n //-------------------------------------------------------------\n // \t\tRETURN FOR ABOUT\n //-------------------------------------------------------------\n if (pageName === \"aboutPage\") {\n return (\n \n {\n goBack();\n }}\n >\n BACK\n \n \n );\n }\n\n //-------------------------------------------------------------\n // \t\tRETURN FOR HANDLE PAGE\n //-------------------------------------------------------------\n else if (pageName.split(\"/\")[0] === \"handlePage\") {\n return (\n \n
\n {\n goBack();\n }}\n >\n BACK\n
\n {\n scrollToAction();\n }}\n >\n ACTIONS\n \n {headerTitles.currentAction !== \"view\" ||\n (headerTitles.status !== \"Draft\" &&\n headerTitles.status !== \"ReadyForAuthorisation\") ? null : (\n EDIT\n )}\n \n
\n
\n {headerTitles.currentAction !== \"view\" ||\n (headerTitles.status !== \"Draft\" &&\n headerTitles.status !== \"ReadyForAuthorisation\") ? (\n \n {\n setCallPreSection(!callPreSection);\n }}\n />\n {\n setCallSaveAndContinue(!callSaveAndContinue);\n }}\n />\n {\n setCallNextSection(!callNextSection);\n }}\n />\n \n ) : null}\n
\n \n );\n }\n\n //-------------------------------------------------------------\n // \t\tRETURN FOR LISTING PAGE\n //-------------------------------------------------------------\n else if (pageName === \"listingPage\") {\n return (\n \n {\n goBack();\n }}\n >\n BACK\n \n {history.location.search === \"\" ||\n headerTitles.submissionType === \"All Submissions\" ? null : (\n {\n history.push(\"/list\");\n }}\n >\n CLEAR {headerTitles.submissionType === \"Search\" ? \"SEARCH\" : \"FILTER\"}\n \n )}\n \n );\n } else {\n return null;\n }\n};\n","import React, { useContext, useState, useCallback, useLayoutEffect } from \"react\";\nimport useEventListener from \"@use-it/event-listener\";\n// import { useHistory } from \"react-router-dom\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport _ from \"lodash\";\nimport { HeaderActions } from \"./HeaderActions.js\";\nimport \"./Header.scss\";\n\nexport const Header = (props) => {\n const { pageName, headerTitles, globalAlert } = useContext(GlobalContext);\n const [onMouseOverFix, setOnMouseOverFix] = useState(false);\n // const [negativeActions, setNegativeActions] = useState(false);\n const [newClass, setNewClass] = useState();\n const [headerActionsScrollYPosition, setHeaderActionsScrollYPosition] = useState(0);\n // const inputZone = useRef();\n // let history = useHistory();\n\n /**\n * FIND CLASS NAME FOR HEADER TITLE\n */\n const findClassName = (status) => {\n if (pageName === \"listingPage\") {\n return \"draft\";\n } else {\n switch (status) {\n case \"Draft\":\n return \"draft\";\n case \"ReadyForAuthorisation\":\n return \"ready\";\n case \"PendingSubmission\":\n case \"PendingCancellation\":\n return \"pending\";\n case \"WithNhsBsa\":\n return \"withNHS\";\n case \"Confirmed\":\n return \"confirmed\";\n case \"Rejected\":\n return \"rejected\";\n case \"Cancelled\":\n return \"canceled\";\n default:\n return undefined;\n }\n }\n };\n useLayoutEffect(() => {\n setNewClass(findClassName(headerTitles.status));\n }, [headerTitles.status]);\n\n /**\n * ON MOUSE OVER FIX\n * @description after searching something, mouse is still over the header area. Because of that, header title becomes invisible.\n * @description with this delay fix, for the first loading of the page, I'm blocking onMouseOver effect.\n */\n useLayoutEffect(() => {\n setOnMouseOverFix(false);\n }, [pageName]);\n useLayoutEffect(() => {\n turnMouseOverTrue();\n }, [onMouseOverFix]);\n const turnMouseOverTrue = useCallback(\n _.debounce(() => {\n setOnMouseOverFix(true);\n }, 1000),\n [],\n );\n\n /**\n * HANDLE ON MOUSE OVER & OUT for RELATIVE DIV\n */\n const handleOnMouseOver = () => {\n // NOT IMPLEMENTED IN THIS VERSION\n // if (!onMouseOverFix) {\n // return;\n // }\n // inputZone.current.value = \"\";\n // inputZone.current.focus();\n // setNegativeActions(true);\n };\n const handleOnMouseOut = () => {\n // NOT IMPLEMENTED IN THIS VERSION\n // setNegativeActions(false);\n // inputZone.current.blur();\n };\n // const handleSubmit = (e) => {\n // handleOnMouseOut();\n // setOnMouseOverFix(false);\n // history.push({\n // pathname: \"/list\",\n // search:\n // \"?\" +\n // new URLSearchParams({\n // search: e.target.value.trim(),\n // }).toString(),\n // });\n // };\n\n /**\n * CALCULATE HEADER ACTIONS\n */\n useEventListener(\"scroll\", () => {\n let scrollY =\n window.scrollY ||\n window.scrollTop ||\n document.getElementsByTagName(\"html\")[0].scrollTop;\n if (scrollY < 50) {\n setHeaderActionsScrollYPosition(-1 * scrollY);\n } else {\n setHeaderActionsScrollYPosition(-50);\n }\n });\n\n //-------------------------------------------------------------\n // \t\tRETURN NULL FOR homePage and errorPage\n //-------------------------------------------------------------\n if (!pageName || pageName === \"homePage\" || pageName === \"errorPage\") {\n return null;\n }\n\n //-------------------------------------------------------------\n // \t\tRETURN FOR ABOUT PAGE\n //-------------------------------------------------------------\n else if (pageName === \"aboutPage\") {\n return (\n \n
\n
\n
About & Legal
\n
\n
\n \n
\n );\n }\n\n //-------------------------------------------------------------\n // \t\tRETURN FOR HANDLE PAGE\n //-------------------------------------------------------------\n else if (pageName.split(\"/\")[0] === \"handlePage\") {\n return (\n \n
\n {globalAlert ? globalAlert.text : \"\"}\n
\n
\n {!headerTitles.productName ? (\n
\n
{headerTitles.submissionType}
\n
\n ) : (\n \n
{headerTitles.submissionType}
\n
{headerTitles.productName}
\n
\n )}\n \n \n
\n );\n }\n\n //-------------------------------------------------------------\n // \t\tRETURN FOR LISTING PAGE\n //-------------------------------------------------------------\n else if (pageName === \"listingPage\") {\n return (\n \n
\n {\n {\n handleOnMouseOver();\n }}\n onMouseOut={() => {\n handleOnMouseOut();\n }}\n >\n
{headerTitles.submissionType}
\n
{headerTitles.productName}
\n {/* {\n if (e.keyCode === 27) {\n handleOnMouseOut();\n }\n if (e.keyCode === 13) {\n handleSubmit(e);\n }\n }}\n \n /> */}\n
\n }\n \n \n
\n );\n }\n //-------------------------------------------------------------\n // \t\tDEFAULT RETURN\n //-------------------------------------------------------------\n else {\n return null;\n }\n};\n","import React, { useContext } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\n\nimport { Link } from \"react-router-dom\";\nimport \"./Card.scss\";\n\nexport const Card = (props) => {\n const {\n hideStatus,\n id,\n type,\n status,\n medName,\n dateOn,\n dateBy,\n nhsMsg,\n //submissionId,\n additionalStyle,\n } = props;\n const { statusLib, addSpaces } = useContext(GlobalContext);\n const statusCSS = () => {\n switch (status) {\n case statusLib.DRA.co:\n case statusLib.DRA.scr:\n return \"draft\";\n case statusLib.RFA.co:\n case statusLib.RFA.scr:\n return \"ready\";\n case statusLib.NHS.co:\n case statusLib.NHS.scr:\n return \"withNHS\";\n case statusLib.CON.co:\n case statusLib.CON.scr:\n return \"confirmed\";\n case statusLib.REJ.co:\n case statusLib.REJ.scr:\n return \"rejected\";\n case statusLib.CAN.co:\n case statusLib.CAN.scr:\n return \"canceled\";\n case statusLib.PENSUB.co:\n case statusLib.PENSUB.scr:\n return \"pending\";\n case statusLib.PENCAN.co:\n case statusLib.PENCAN.scr:\n return \"pending\";\n default:\n return \"draft\";\n }\n };\n\n return (\n \n
\n
\n \n \n \n
{status}
\n\n \n
{addSpaces(type)}
\n
{medName}
\n
\n
\n {status === statusLib.DRA.co ||\n status === statusLib.DRA.scr ||\n status === statusLib.RFA.co ||\n status === statusLib.RFA.scr ||\n status === statusLib.CAN.co ||\n status === statusLib.CAN.scr ? (\n
\n Last Updated on {dateOn}\n
\n by {dateBy}\n
\n ) : status === statusLib.NHS.co ||\n status === statusLib.NHS.scr ||\n status === statusLib.PENSUB.co ||\n status === statusLib.PENSUB.scr ||\n status === statusLib.PENCAN.co ||\n status === statusLib.PENCAN.scr ? (\n
\n Authorised on {dateOn}\n
\n by {dateBy}\n
\n ) : status === statusLib.CON.co ||\n status === statusLib.REJ.co ||\n status === statusLib.CON.scr ||\n status === statusLib.REJ.scr ? (\n
{nhsMsg}
\n ) : null}\n
\n \n );\n};\n","import React from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nexport const CardSeeAll = (props) => {\n const { howMuchMore, status } = props;\n let history = useHistory();\n\n return (\n {\n history.push({\n pathname: \"/list\",\n search:\n \"?\" +\n new URLSearchParams({ status: status }).toString(),\n });\n }}\n >\n
\n
+{howMuchMore}
\n
more submissions
\n
\n
See All
\n \n );\n};\n","import React, { useLayoutEffect, useState, useRef, useContext } from \"react\";\nimport _ from \"lodash\";\nimport useEventListener from \"@use-it/event-listener\";\nimport { ClientContext } from \"contexts/ClientStore.js\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\n\nimport { Card } from \"../Card/Card.js\";\nimport { CardSeeAll } from \"../CardSeeAll/CardSeeAll.js\";\nimport \"./CardSliderForHome.scss\";\n\nexport const CardSliderForHome = (props) => {\n const { title, status, order } = props;\n const data = props.data ? props.data : [];\n const { CS } = useContext(ClientContext);\n const { convertDateForScreen } = useContext(GlobalContext);\n const [howMuchMore, setHowMuchMore] = useState();\n\n const sArea = useRef();\n const sAreaLong = useRef();\n const sLine = useRef();\n const sBar = useRef();\n const sBarZone = useRef();\n const mouseX = useRef();\n const delayFunc = useRef();\n const delayFunc2 = useRef();\n\n const [currentWINW, setCurrentWINW] = useState(CS.WINW);\n\n const [sBarMaxLeft, setSBarMaxLeft] = useState();\n const [sAreaMaxLeft, setSAreaMaxLeft] = useState();\n const [isSBarNeeded, setIsSBarNeeded] = useState();\n const [sBarLeftToWall, setSBarLeftToWall] = useState();\n const [halfOfSBar, setHalfOfSBar] = useState();\n\n /**\n * CALCULATE HOW MUCH MORE\n */\n useLayoutEffect(() => {\n setHowMuchMore(data.length - order);\n }, [data, order]);\n\n /**\n * INDIVIDUAL SCROLL BAR MOVEMENT\n * @description lots of Math\n */\n const blockScrollingIfDOMIsntReady = () => {\n if (\n (sBarMaxLeft && sBarMaxLeft) ||\n !sArea ||\n !sAreaLong ||\n !sLine ||\n !sBar ||\n !sBarZone ||\n !mouseX ||\n !delayFunc\n ) {\n return false;\n }\n return true;\n };\n const defineRects = () => {\n if (!blockScrollingIfDOMIsntReady) {\n return;\n }\n\n delayFunc2.current = _.delay(function () {\n let sAreaWidth = sArea.current.getBoundingClientRect().width; // -> görünür alanın genişliği\n let sAreaLongWidth = sAreaLong.current.getBoundingClientRect().width; //-> hareket eden alanın genişliği\n setSAreaMaxLeft(sAreaLongWidth - sAreaWidth); // maksimum scroll seviyesi\n\n if (sAreaLongWidth > sAreaWidth) {\n setIsSBarNeeded(true);\n let sBarRect = sBar.current.getBoundingClientRect();\n setSBarLeftToWall(sBarRect.left); // -> scroll barın sol duvara uzaklığı\n let sBarWidth = sBarRect.width; //-> scroll barın genişliği\n let sBarZoneWidth = sBarZone.current.getBoundingClientRect().width; //-> scroll barın hareket edebileceği genişlik\n setHalfOfSBar(sBarWidth / 2);\n setSBarMaxLeft(sBarZoneWidth - sBarWidth); // scrollBarın gelebileceği max left seviyesi\n }\n }, 500);\n };\n useLayoutEffect(() => {\n if ((sBarMaxLeft && currentWINW) === CS.WINW) {\n return;\n }\n defineRects();\n setCurrentWINW(CS.WINW);\n }, [CS.WINW]);\n const onScrollLeft = () => {\n if (!blockScrollingIfDOMIsntReady) {\n return;\n }\n let sAreaSLeft = sArea.current.scrollLeft;\n sBar.current.style.left = sAreaSLeft * (sBarMaxLeft / sAreaMaxLeft) + \"px\";\n };\n const onBarDrag = (mX, e) => {\n if (!blockScrollingIfDOMIsntReady) {\n return;\n }\n if (delayFunc) {\n clearTimeout(delayFunc.current);\n }\n let newVal;\n if (sBarLeftToWall + halfOfSBar > mX) {\n newVal = 0;\n } else if (mX > sBarLeftToWall + halfOfSBar + sBarMaxLeft) {\n newVal = sBarMaxLeft;\n } else {\n newVal = mX - sBarLeftToWall - halfOfSBar;\n }\n sBar.current.style.left = newVal + \"px\";\n // sArea.current.scrollLeft = newVal * (sAreaMaxLeft / sBarMaxLeft);\n sArea.current.scrollable = false;\n delayFunc.current = _.delay(function () {\n sArea.current.scrollable = true;\n }, 750);\n\n sArea.current.scrollTo({\n left: newVal * (sAreaMaxLeft / sBarMaxLeft),\n behavior: \"smooth\",\n });\n\n e.preventDefault();\n };\n const getMX = (e) => {\n if (!blockScrollingIfDOMIsntReady) {\n return;\n }\n if (sLine && sLine.current && sLine.current.mouseDown) {\n mouseX.current = Number((e.clientX || 0).toFixed(0));\n onBarDrag(mouseX.current, e);\n }\n };\n useEventListener(\"mousemove\", (e) => {\n getMX(e);\n });\n useEventListener(\"mouseup\", () => {\n if (sLine && sLine.current && sLine.current.mouseDown) {\n sLine.current.mouseDown = false;\n }\n });\n\n /**\n * UNMOUNT & CLEAR FOR DELAY FUNCTIONS\n */\n useLayoutEffect(() => {\n return () => {\n clearTimeout(delayFunc.current);\n clearTimeout(delayFunc2.current);\n };\n }, []);\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n if (!data) {\n return null;\n }\n return (\n \n {/* SEPERATOR */}\n
\n {title}\n ({data.length})\n
\n\n {/* SEARCH BAR */}\n {\n if (sArea.current.scrollable !== false) {\n onScrollLeft();\n }\n }}\n >\n
\n {/* CALL CARDS */}\n {!data || data.length === 0 ? (\n \n You don't have any \"{title}\" submission.\n
\n ) : (\n data.map((item, key) => {\n if (key > order - 1) {\n return null;\n }\n return (\n \n );\n })\n )}\n\n {/* 'SEE ALL' CARD */}\n {howMuchMore > 0 ? (\n \n ) : null}\n \n \n\n {/* UNIQUE SCROLL BARS */}\n {!isSBarNeeded ? null : (\n
\n {\n sLine.current.mouseDown = true;\n getMX(e);\n }}\n >\n
\n
\n
\n
\n )}\n
\n );\n};\n","import React, { useContext, useLayoutEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport { ClientContext } from \"contexts/ClientStore.js\";\nimport { UserContext } from \"contexts/UserStore.js\";\nimport { FetchAPI } from \"components/APIConnections/APIConnections.js\";\n// import { SearchBarForHome } from \"components/SearchBarForHome/SearchBarForHome.js\";\nimport { CardSliderForHome } from \"components/CardSliderForHome/CardSliderForHome.js\";\n\nimport \"./Home.scss\";\n\nexport const Home = () => {\n const {\n pageName,\n setPageName,\n setSidebarBehavior,\n isLoading,\n setIsLoading,\n disableIsLoadingWithDelay,\n statusLib,\n showErrorLogsOnConsole,\n } = useContext(GlobalContext);\n const { userState } = useContext(UserContext);\n const { CS } = useContext(ClientContext);\n\n const thisPageName = \"homePage\";\n const [draftData, setDraftData] = useState();\n const [rfaData, setRfaData] = useState();\n const [nhsData, setNhsData] = useState();\n const [confirmedData, setConfirmedData] = useState();\n const [rejectedData, setRejectedData] = useState();\n const [cancelledData, setCancelledData] = useState();\n const [penSubData, setPenSubData] = useState();\n\n const sliderNames = [\n {\n status: statusLib.DRA.co,\n title: statusLib.DRA.display,\n dataRoute: draftData,\n hideIfEmpty: true,\n },\n {\n status: statusLib.RFA.co,\n title: statusLib.RFA.scr,\n dataRoute: rfaData,\n hideIfEmpty: true,\n },\n {\n status: statusLib.PENSUB.co,\n title: statusLib.PENSUB.display,\n dataRoute: penSubData,\n hideIfEmpty: true,\n },\n {\n status: statusLib.NHS.co,\n title: statusLib.NHS.display,\n dataRoute: nhsData,\n hideIfEmpty: true,\n },\n {\n status: statusLib.CON.co,\n title: statusLib.CON.display,\n dataRoute: confirmedData,\n hideIfEmpty: true,\n },\n {\n status: statusLib.REJ.co,\n title: statusLib.REJ.display,\n dataRoute: rejectedData,\n hideIfEmpty: true,\n },\n {\n status: statusLib.CAN.co,\n title: statusLib.CAN.display,\n dataRoute: cancelledData,\n hideIfEmpty: true,\n },\n ];\n let history = useHistory();\n const [order, setOrder] = useState();\n\n /**\n * CALCULATE ORDER\n * @description depending on screen size, calculate how many card will shown.\n */\n\n useLayoutEffect(() => {\n const calculateOrder = (WINW) => {\n let returnValue = WINW > 1600 ? 10 : WINW > 1200 ? 8 : WINW > 700 ? 6 : 2;\n return returnValue;\n };\n\n setOrder(calculateOrder(CS.WINW));\n }, [CS.WINW]);\n\n /**\n * SET PAGE NAME and SIDEBAR BEHAVIOUR\n * @description sets pageName and sidebarBehaviour in globalStore\n */\n useLayoutEffect(() => {\n setIsLoading(true);\n setPageName(thisPageName);\n setSidebarBehavior({ position: \"landing\", content: \"none\" });\n }, [pageName]);\n\n /**\n * GET DATA VIA API and PLACE IT.\n * THEN REMOVE LOADING PAGE.\n */\n useLayoutEffect(() => {\n async function fetchData() {\n let newData = await FetchAPI({\n showErrorLogsOnConsole: showErrorLogsOnConsole,\n history: history,\n apiShortName: \"callDataForHomePage\",\n token: userState.accessToken,\n apiNeeds: {\n order: order,\n companyId: userState.selectedCompany?.id,\n },\n setIsLoading: (boo) => {\n setIsLoading(boo);\n },\n });\n\n if (!newData) {\n return;\n }\n\n setDraftData(\n newData\n ? newData.data.filter((item) => {\n return item.status === statusLib.DRA.scr;\n })\n : [],\n );\n setRfaData(\n newData\n ? newData.data.filter((item) => {\n return item.status === statusLib.RFA.scr;\n })\n : [],\n );\n setPenSubData(\n newData\n ? newData.data.filter((item) => {\n return item.status === statusLib.PENSUB.scr;\n })\n : [],\n );\n setNhsData(\n newData\n ? newData.data.filter((item) => {\n return item.status === statusLib.NHS.scr;\n })\n : [],\n );\n setConfirmedData(\n newData\n ? newData.data.filter((item) => {\n return item.status === statusLib.CON.scr;\n })\n : [],\n );\n setRejectedData(\n newData\n ? newData.data.filter((item) => {\n return item.status === statusLib.REJ.scr;\n })\n : [],\n );\n setCancelledData(\n newData\n ? newData.data.filter((item) => {\n return item.status === statusLib.CAN.scr;\n })\n : [],\n );\n }\n fetchData();\n }, [userState]);\n\n useLayoutEffect(() => {\n if (\n isLoading &&\n draftData &&\n rfaData &&\n nhsData &&\n confirmedData &&\n rejectedData &&\n cancelledData\n ) {\n disableIsLoadingWithDelay();\n }\n }, [draftData, rfaData, nhsData, confirmedData, rejectedData, cancelledData]);\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n if (\n !draftData ||\n !rfaData ||\n !nhsData ||\n !confirmedData ||\n !rejectedData ||\n !cancelledData ||\n !penSubData\n ) {\n return null;\n }\n if (\n draftData.length +\n rfaData.length +\n nhsData.length +\n confirmedData.length +\n rejectedData.length +\n cancelledData.length +\n penSubData.length ===\n 0\n ) {\n return (\n
\n
\n Welcome to emc med data dm+d.\n
\n

\n Welcome to emc med data dm+d. You haven't yet made any submissions to the NHS\n BSA. Once started, your submissions will appear here. Please Create a New\n Submission using the menu option\n

\n
\n
\n );\n }\n return (\n \n {/* SEARCH BAR NOT IMPLEMENTED IN THIS VERSION - REMOVE - packer in to make ui look ok*/}\n {/*
Search a Submission
\n */}\n
\n\n {/* CALL CARD SLIDERS */}\n {!sliderNames\n ? null\n : sliderNames.map((item, key) => {\n if (!item.dataRoute) {\n return null;\n }\n\n if (item.hideIfEmpty && item.dataRoute.length === 0) {\n return null;\n }\n return (\n \n );\n })}\n \n );\n};\n","import React from \"react\";\n\nexport const Seperator = (props) => {\n const { data, viewMode, keyName } = props;\n const { placeHolder } = data || props || \"\";\n\n return (\n
\n {placeHolder}\n
\n );\n};\n","import React, { useContext } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\n\nimport \"./SummarySection.scss\";\n\nexport const SummarySection = (props) => {\n const { savedData } = props;\n const { convertDateForScreen } = useContext(GlobalContext);\n\n const findClassName = (status) => {\n if (status === \"Draft\") {\n return \"draft\";\n }\n if (status === \"ReadyForAuthorisation\") {\n return \"ready\";\n }\n if (status === \"PendingSubmission\" || status === \"PendingCancellation\") {\n return \"pending\";\n }\n if (status === \"WithNhsBsa\") {\n return \"withNHS\";\n }\n if (status === \"Confirmed\") {\n return \"confirmed\";\n }\n if (status === \"Rejected\") {\n return \"rejected\";\n }\n if (status === \"Cancelled\") {\n return \"canceled\";\n }\n };\n\n const newClass = findClassName(savedData.status);\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n return (\n
\n
\n
Status
\n
\n \n \n \n {\" \"}\n {savedData.status}\n \n
\n
\n\n
\n
\n
ID
\n
\n {savedData.submissionId > 0 ? savedData.submissionId : 'Not yet assigned'}\n
\n
\n
\n
\n
\n
Type
\n
\n {savedData.type}\n
\n
\n
\n
\n
\n
Name
\n
\n {savedData.title}\n
\n
\n
\n
\n
\n
Last Updated
\n
\n \n by {savedData.modifiedBy} on {convertDateForScreen(savedData.modified)}\n \n
\n
\n
\n
\n );\n};\n","import React from \"react\";\n\nimport \"./FreeForm.scss\";\n\nexport const FreeForm = (props) => {\n const { savedData } = props;\n\n\n const getResponse = (e) => {\n const thisResponses = e.responses.map((name, index) =>\n // name.additionalInfo\n
  • {name.reason} : {name.additionalInfo}
  • \n )\n return thisResponses\n };\n\n const newResponse = getResponse(savedData.data)\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n return (\n
    \n
      \n {newResponse}\n
    \n
    \n );\n};\n","import React from \"react\";\nimport useEventListener from \"@use-it/event-listener\";\n\nimport { Button } from \"../Button/Button.js\";\nimport \"./ApprovalZone.scss\";\n\nexport const ApprovalZone = (props) => {\n const {\n onConfirm,\n onDecline,\n headerText,\n redText,\n onConfirmText,\n onDeclineText,\n areYouSureText,\n } = props;\n\n /**\n * EVENT LISTENER FOR ENTER or ESC\n * @description onConfirm when Enter pressed - onDecline when Esc pressed\n */\n useEventListener(\"keydown\", (e) => {\n if (e.keyCode === 13 || e.keyCode === 32) {\n e.preventDefault();\n onConfirm();\n } else if (e.keyCode === 27) {\n e.preventDefault();\n onDecline();\n }\n\n return;\n });\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n if (!onConfirm || !onDecline || !headerText || !redText) {\n return null;\n }\n return (\n
    \n
    \n
    {headerText}
    \n
    {redText}
    \n
    {areYouSureText ? areYouSureText : \"Are you sure?\"}
    \n
    \n {\n onConfirm();\n }}\n />\n {\n onDecline();\n }}\n additionalStyle={{ marginRight: 0 }}\n />\n
    \n
    \n
    \n );\n};\n","import React, { useLayoutEffect, useState, useContext } from \"react\";\nimport { Prompt } from \"react-router\";\nimport { useHistory } from \"react-router-dom\";\nimport useEventListener from \"@use-it/event-listener\";\nimport _ from \"lodash\";\n\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport { UserContext } from \"contexts/UserStore.js\";\nimport { Button } from \"components/FormElements/Button/Button.js\";\nimport { Seperator } from \"components/FormElements/Seperator/Seperator.js\";\nimport { ApprovalZone } from \"components/FormElements/ApprovalZone/ApprovalZone.js\";\nimport { FetchAPI } from \"components/APIConnections/APIConnections.js\";\nimport { IsLoading } from \"components/IsLoading/IsLoading.js\";\n\nexport const UserActions = (props) => {\n const {\n data,\n errorFieldNameClicked,\n settings,\n setSettings,\n sections,\n convertCurrentValueToSavedValue,\n silentUpdateData,\n areTheyEqual,\n } = props;\n const {\n ID,\n action,\n status,\n submissionType,\n submissionID,\n internalState,\n isThereAnyChange,\n } = settings;\n const {\n isNotEmpty,\n callSaveAndContinue,\n callPreSection,\n callNextSection,\n headerTitles,\n triggerGlobalAlert,\n showErrorLogsOnConsole,\n } = useContext(GlobalContext);\n const { userState } = useContext(UserContext);\n const [allErrorFields, setAllErrorFields] = useState([]);\n let history = useHistory();\n\n const [propsForApprovalState, setPropsForApprovalState] = useState();\n const [localIsLoading, setLocalIsLoading] = useState(false);\n const [firstRender, setFirstRender] = useState(true);\n const [promptWhen, setPromptWhen] = useState(true);\n\n /**\n * FIND ALL ERROR FIELDS\n */\n useLayoutEffect(() => {\n if (!data) {\n return;\n }\n let newAllErrorFields = [];\n\n Object.entries(data).map(([key, item]) => {\n if (\n (action !== \"view\" && (item.internalState || 1) > (internalState || 1)) ||\n item.dontSendToApi\n ) {\n return null;\n }\n\n if (item.errorText && item.errorText !== [] && item.errorText.length > 0) {\n newAllErrorFields.push(key);\n }\n return null;\n });\n\n setAllErrorFields(newAllErrorFields);\n }, [data, internalState, action]);\n\n /**\n * EVENT LISTENER FOR CTRL + S - AND ARROW KEYS\n * @description ctrl S is triggering save as draft -> saveAndContinue in UserActions\n */\n useEventListener(\"keydown\", (e) => {\n if (action === \"view\") {\n return;\n }\n\n const preventDef = (e) => {\n if (e.preventDefault) {\n e.preventDefault();\n }\n };\n\n let isCtrlKeyDown = navigator.platform.indexOf(\"Mac\") > -1 ? e.metaKey : e.ctrlKey;\n let isSDown = (e.key && e.key === \"s\") || (e.keyCode || e.which) === 83;\n\n if (isCtrlKeyDown && isSDown) {\n preventDef(e);\n saveAndContinue();\n return false;\n }\n });\n\n /**\n * DISABLE or ENABLE SCROLLING DEPENDING on APPROVAL STATEs\n */\n useLayoutEffect(() => {\n if (propsForApprovalState || localIsLoading) {\n // scroll disabled\n document.getElementsByTagName(\"body\")[0].setAttribute(\"style\", \"overflow-y:hidden;\");\n } else {\n // scroll enabled\n document.getElementsByTagName(\"body\")[0].setAttribute(\"style\", \"overflow-y:auto;\");\n }\n }, [propsForApprovalState, localIsLoading]);\n\n /**\n * UNMOUNT EFFECT FOR ENABLE SCROLLING.\n * @description need this, because on page switch, scrolling left disabled without this correction.\n */\n useLayoutEffect(() => {\n setPromptWhen(true);\n return () => {\n setLocalIsLoading(false);\n setPropsForApprovalState();\n document.getElementsByTagName(\"body\")[0].setAttribute(\"style\", \"overflow-y:auto;\");\n };\n }, []);\n\n /**\n * REMOVE FIRST RENDER\n */\n useLayoutEffect(() => {\n setFirstRender(false);\n }, []);\n\n /**\n * HANDLE GO TO TOP\n * @description Goes to top of the page smoothly.\n */\n const handleGoToTop = () => {\n window.scrollTo({ top: 0, left: 0, behavior: \"smooth\" });\n };\n\n /**\n * LISTEN JUMP TO SECTION\n */\n const jumpToSection = (preOrNext) => {\n if (\n (submissionType === \"UpdateProduct\" && internalState < 3) ||\n (submissionType === \"UpdatePack\" && internalState < 4)\n ) {\n return;\n }\n\n let scrollY = Math.round(\n window.scrollY ||\n window.scrollTop ||\n document.getElementsByTagName(\"html\")[0].scrollTop,\n );\n\n let allSectionYValues = [];\n sections.forEach((item) => {\n allSectionYValues.push(document.getElementById(item).offsetTop);\n });\n allSectionYValues.sort(function (a, b) {\n return a - b;\n });\n\n const arraySiraliEkle = (array, elem) => {\n let i = 0;\n while (i < array.length && array[i] < elem) {\n i++;\n }\n return i;\n };\n\n let i = arraySiraliEkle(allSectionYValues, scrollY);\n\n let prePoint = allSectionYValues[i - 1];\n if (prePoint === scrollY || (prePoint < scrollY + 10 && prePoint > scrollY - 10)) {\n prePoint = allSectionYValues[i - 2];\n }\n if (!prePoint) {\n prePoint = 0;\n }\n\n let nextPoint = allSectionYValues[i];\n if (nextPoint === scrollY || (nextPoint < scrollY + 10 && nextPoint > scrollY - 10)) {\n nextPoint = allSectionYValues[i + 1];\n }\n if (!nextPoint) {\n nextPoint = document.body.scrollHeight;\n }\n\n if (preOrNext === \"pre\") {\n window.scrollTo({ top: prePoint, left: 0, behavior: \"smooth\" });\n } else if (preOrNext === \"next\") {\n window.scrollTo({ top: nextPoint, left: 0, behavior: \"smooth\" });\n }\n };\n\n /**\n * CHANGE STATUS\n * @description change submission status from Draft to \"ReadyForAuthorisation\" or \"PendingSubmission\" or \"Cancelled\"\n * This works, if the user editing the page.\n * Otherwise, if user creating a new page, (action===\"new\") mark button directs user to SaveAndGoHome function.\n */\n const changeStatus = async (newStatus) => {\n if (!newStatus) {\n return;\n }\n let serverReply;\n\n if (newStatus === \"cancel\") {\n serverReply = await FetchAPI({\n showErrorLogsOnConsole: showErrorLogsOnConsole,\n callbackWithErrorStatusOrConfirmation: true,\n history: history,\n apiShortName: \"markAsCancelled\",\n token: userState.accessToken,\n apiNeeds: {\n ID: ID,\n submissionID: submissionID,\n companyId: userState.selectedCompany?.id,\n },\n setIsLoading: (boo) => {\n setLocalIsLoading(boo);\n },\n });\n } else if (newStatus === \"rfa\") {\n serverReply = await FetchAPI({\n showErrorLogsOnConsole: showErrorLogsOnConsole,\n callbackWithErrorStatusOrConfirmation: true,\n history: history,\n apiShortName: \"updateASubmission\",\n token: userState.accessToken,\n apiNeeds: {\n companyId: userState.selectedCompany?.id,\n ID: ID,\n submissionID: submissionID,\n name: settings.name,\n status: \"ReadyForAuthorisation\",\n },\n setIsLoading: (boo) => {\n setLocalIsLoading(boo);\n },\n });\n } else if (newStatus === \"nhs\") {\n serverReply = await FetchAPI({\n showErrorLogsOnConsole: showErrorLogsOnConsole,\n callbackWithErrorStatusOrConfirmation: true,\n history: history,\n apiShortName: \"updateASubmission\",\n token: userState.accessToken,\n apiNeeds: {\n companyId: userState.selectedCompany?.id,\n ID: ID,\n submissionID: submissionID,\n name: settings.name,\n status: \"PendingSubmission\",\n },\n setIsLoading: (boo) => {\n setLocalIsLoading(boo);\n },\n });\n } else {\n history.push({ pathname: \"/error/missingStatusName\" });\n }\n\n if (serverReply.ok === false || serverReply.id === undefined) {\n // !permissions.ok gives an error because undefined is not a false in BE side.\n setLocalIsLoading(false);\n setPropsForApprovalState({\n pathName: \"/\",\n headerText: \"A server error has occurred (\" + serverReply.status + \")\",\n redText: \"Your submission has not been successful. \",\n areYouSureText: \"Would you like to try again? \",\n onConfirmText: \"Yes\",\n onConfirm: () => {\n setPropsForApprovalState();\n },\n onDeclineText: \"No\",\n onDecline: () => {\n history.push({ pathname: \"/\" });\n },\n });\n } else {\n setPromptWhen(false);\n history.push({ pathname: \"/\" });\n }\n };\n\n /**\n * CREATE THE API PACKAGE for CURRENT VALUES and POST IT\n * @description updates store depending on changes via fields.\n */\n const createApiPackage = async () => {\n if (!data) {\n return false;\n }\n let newData = _.cloneDeep(data);\n\n /**\n * CHECK IF FILE IS UPLOADED or NOT\n * Then, upload if it's not uploaded yet.\n */\n if (\n (submissionType === \"NewProduct\" ||\n submissionType === \"NewPack\" ||\n submissionType === \"UpdateProduct\" ||\n submissionType === \"UpdatePack\") &&\n data.smpcFile?.currentValue?.fileProps &&\n !data.smpcFile?.currentValue?.fileUrl\n ) {\n let serverReply = await FetchAPI({\n showErrorLogsOnConsole: showErrorLogsOnConsole,\n callbackWithErrorStatusOrConfirmation: true,\n history: history,\n apiShortName: \"fileUpload\",\n token: userState.accessToken,\n apiNeeds: {\n fileProps: data.smpcFile.currentValue.fileProps[0],\n },\n });\n\n let URL = serverReply.uri;\n\n newData.smpcFile.currentValue.fileUrl = URL;\n silentUpdateData(\"smpcFile\", {\n ...data.smpcFile.currentValue,\n fileUrl: URL,\n });\n }\n\n /**\n * CREATE API PACKAGE\n */\n let apiPackage = {};\n\n Object.keys(newData).forEach((item) => {\n if (\n !newData[item].dontSendToApi &&\n isNotEmpty(newData[item].currentValue) &&\n (newData[item].internalState || 1) <= (internalState || 1)\n ) {\n apiPackage[item] = convertCurrentValueToSavedValue(\n newData[item],\n newData[item].currentValue,\n );\n }\n });\n\n if (Object.keys(apiPackage).length === 0) {\n return false;\n }\n\n /**\n * @description NewPack doesn't have name field. But Api needs it.\n * In here, I'm creating a name field for newPack and for other forms as well, if their name field is empty.\n * Because validations are not blocking for Draft Saving.\n */\n if (!apiPackage.name) {\n apiPackage.name = headerTitles.productName || \"No Name\";\n }\n /**\n * UpdateProduct and UpdatePack needs some extra fields depending on discontinue product or pack values.\n */\n if (submissionType === \"UpdateProduct\" || submissionType === \"UpdatePack\") {\n if (\n (data.discontinueProduct || data.discontinuePack) &&\n (data.discontinueProduct?.currentValue?.label === \"Yes\" ||\n data.discontinuePack?.currentValue?.label === \"Yes\")\n ) {\n apiPackage.discontinued = true;\n }\n }\n /**\n * Add Single Price update here --->\n */\n if (submissionType === \"UpdatePack\") {\n apiPackage.singlePriceUpdate = false;\n\n if (settings.inComingPack && data.price) {\n const relatedFields_isItSinglePriceSub = [\n \"quantity\",\n \"legalCategory\",\n \"subpackInfo\",\n \"gtinCodes\",\n \"calendarPack\",\n \"hospitalPack\",\n \"limitedStability\",\n ];\n\n if (\n !areTheyEqual(settings.inComingPack.price.currentValue, data.price.currentValue)\n ) {\n apiPackage.singlePriceUpdate = true;\n\n for (let i = 0; i < relatedFields_isItSinglePriceSub.length; i++) {\n let item = relatedFields_isItSinglePriceSub[i];\n if (\n !areTheyEqual(\n settings.inComingPack[item].currentValue,\n data[item].currentValue,\n )\n ) {\n apiPackage.singlePriceUpdate = false;\n break;\n }\n }\n }\n }\n }\n\n /**\n * remove 0 items from the list\n */\n if (submissionType === \"MassPriceUpdate\") {\n apiPackage[\"prices\"] = apiPackage[\"prices\"].filter(item => item.newPrice > 0);\n const priceLength = apiPackage[\"prices\"].length;\n\n if(priceLength === 0)\n return null;\n\n apiPackage[\"name\"] = apiPackage[\"name\"].replace(/(\\d+)/g, priceLength);\n }\n\n return apiPackage;\n };\n\n /**\n * POST SUBMISSION is a assistant function.\n * Is called by SaveAndContinue or SaveAndGoHome functions.\n */\n const postSubmission = async (apiPackage, newStatus = \"draft\", disableIsLoading = false) => {\n let newStatusName;\n if (newStatus === \"draft\") {\n newStatusName = \"Draft\";\n } else if (newStatus === \"rfa\") {\n newStatusName = \"ReadyForAuthorisation\";\n } else if (newStatus === \"nhs\") {\n newStatusName = \"PendingSubmission\";\n } else if (newStatus === \"cancel\") {\n newStatusName = \"Cancelled\";\n }\n\n /**\n * CREATE SUBMISSION DEPENDING ON REQUEST\n */\n let serverReply = await FetchAPI({\n showErrorLogsOnConsole: showErrorLogsOnConsole,\n callbackWithErrorStatusOrConfirmation: true,\n history: history,\n apiShortName: action === \"new\" ? \"postNewSubmission\" : \"updateASubmission\",\n token: userState.accessToken,\n apiNeeds: {\n title: apiPackage.name,\n status: newStatusName, // --> Draft RFA or pending submission -> CHANGE HERE.\n type: submissionType,\n companyId: userState.selectedCompany?.id,\n ...(action === \"edit\" && { ID: ID, submissionID: submissionID }),\n data: {\n ...apiPackage,\n },\n },\n });\n\n return serverReply;\n };\n const saveAndGoHome = async (newStatus) => {\n let apiPackage = await createApiPackage();\n if (!apiPackage) {\n return;\n }\n\n setLocalIsLoading(true);\n\n let serverReply = await postSubmission(apiPackage, newStatus);\n\n // GO HOME AFTER SAVING\n\n if (serverReply.ok === false || serverReply.id === undefined) {\n let headerText = \"A server error has occurred (\" + serverReply.status + \")\";\n let redText = \"Your data has not been saved.\";\n\n if(serverReply.status === 400) {\n headerText = \"Invalid Data\";\n redText = await serverReply.text();\n }\n\n setLocalIsLoading(false);\n setPropsForApprovalState({\n pathName: \"/\",\n headerText: headerText,\n redText: redText,\n areYouSureText: \"Would you like to try again? \",\n onConfirmText: \"Yes\",\n onConfirm: () => {\n setPropsForApprovalState();\n }, \n onDeclineText: \"No\",\n onDecline: () => {\n history.push({ pathname: \"/\" });\n },\n });\n } else {\n setLocalIsLoading(false);\n setPromptWhen(false);\n history.push({ pathname: \"/\" });\n }\n };\n const saveAndContinue = async () => {\n if (!isThereAnyChange) {\n return;\n }\n let apiPackage = await createApiPackage();\n if (!apiPackage) {\n return;\n }\n\n if (showErrorLogsOnConsole) {\n console.log(apiPackage);\n }\n\n let serverReply = await postSubmission(apiPackage, \"draft\", false);\n\n if (serverReply.ok === false || serverReply.id === undefined) {\n triggerGlobalAlert({\n text: \"Your data has not been saved. (\" + serverReply.status + \")\",\n status: \"warn\",\n });\n } else if (action === \"new\") {\n setPromptWhen(false);\n history.push(\"/edit/\" + serverReply.id);\n } else {\n triggerGlobalAlert({\n text: \"Saved successfully.\",\n });\n setSettings({ ...settings, isThereAnyChange: false });\n }\n };\n\n useLayoutEffect(() => {\n if (firstRender) {\n return;\n }\n saveAndContinue();\n }, [callSaveAndContinue]);\n useLayoutEffect(() => {\n if (firstRender) {\n return;\n }\n jumpToSection(\"pre\");\n }, [callPreSection]);\n useLayoutEffect(() => {\n if (firstRender) {\n return;\n }\n jumpToSection(\"next\");\n }, [callNextSection]);\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n return (\n \n {/* REF POINT */}\n
    \n\n {/* PROMPT */}\n {\n if (\n action === \"view\" ||\n !isThereAnyChange ||\n (propsForApprovalState &&\n location.pathname === propsForApprovalState.pathName)\n ) {\n setPropsForApprovalState();\n return true;\n } else {\n setPropsForApprovalState({\n pathName: location.pathname,\n headerText: \"Do You Want To Leave?\",\n redText: \"You may lose changes on form.\",\n onConfirm: () => {\n history.push(location.pathname);\n },\n onDecline: () => {\n setPropsForApprovalState();\n },\n });\n return false;\n }\n }}\n />\n\n {/* INTERNAL USAGE FOR ISLOADING */}\n \n\n {/* APPROVAL STAGE */}\n {!propsForApprovalState ? null : (\n \n )}\n\n {/* ACTIONS SEPERATOR */}\n {status === \"Cancelled\" ? null : }\n\n {/* SAVE AS DRAFT - DISCARD CHANGES */}\n {action === \"view\" || status !== \"Draft\" ? null : (\n \n {\n saveAndGoHome(\"draft\");\n }}\n />\n {\n setPropsForApprovalState({\n pathName: \"/\",\n headerText: \"Discard Changes Confirmation\",\n redText: \"Any changes made may be lost.\",\n onConfirm: () => {\n history.push(\"/\");\n },\n onDecline: () => {\n setPropsForApprovalState();\n },\n });\n }}\n additionalStyle={{ marginRight: 0 }}\n />\n \n )}\n\n {/* VALIDATION ERRORS BOX for VIEW+DRAFT */}\n {action === \"view\" &&\n status === \"Draft\" &&\n allErrorFields &&\n allErrorFields.length > 0 ? (\n
    \n You have missing fields in the form. For marking the submission as \"Ready to\n Authorisation\" or for submitting submission to NHS, please edit and fill all\n mandatory fields.\n
    \n ) : null}\n\n {/* VALIDATION ERRORS DETAILS BOX for NEW-EDIT */}\n {action !== \"view\" &&\n status === \"Draft\" &&\n allErrorFields &&\n allErrorFields.length > 0 ? (\n
    \n You have missing fields in the form. For marking the submission as \"Ready to\n Authorisation\" or for submitting submission to NHS, please correct these fields:\n  \n
    \n {allErrorFields.map((error) => {\n let errorFieldName = data[error].fieldName;\n\n return (\n {\n errorFieldNameClicked(error);\n }}\n >\n {errorFieldName}\n \n );\n })}\n
    \n ) : null}\n\n {/* EDIT SUBMISSION BUTTON */}\n\n {action === \"view\" && status === \"Draft\" ? (\n {\n history.push(\"/edit/\" + ID);\n }}\n />\n ) : null}\n\n {/* MARK AS READY FOR AUTH. BUTTON */}\n {(!allErrorFields || allErrorFields.length === 0) &&\n userState.currentPermLevel === 1 &&\n status === \"Draft\" ? (\n {\n setPropsForApprovalState({\n pathName: null,\n headerText: \"Mark As Ready Confirmation\",\n redText: \"You are about to change your submission's status.\",\n onConfirm: () => {\n if (action === \"view\") {\n changeStatus(\"rfa\");\n } else {\n saveAndGoHome(\"rfa\");\n }\n setPropsForApprovalState();\n },\n onDecline: () => {\n setPropsForApprovalState();\n },\n });\n }}\n />\n ) : null}\n\n {/* SUBMIT TO NHS BUTTON */}\n {(!allErrorFields || allErrorFields.length === 0) &&\n userState.currentPermLevel === 2 &&\n (status === \"Draft\" || status === \"ReadyForAuthorisation\") ? (\n {\n setPropsForApprovalState({\n pathName: null,\n headerText: \"Submit Submission to NHS BSA\",\n redText: \"You are about to change your submission's status.\",\n onConfirm: () => {\n if (action === \"view\") {\n changeStatus(\"nhs\");\n } else {\n saveAndGoHome(\"nhs\");\n }\n setPropsForApprovalState();\n },\n onDecline: () => {\n setPropsForApprovalState();\n },\n });\n }}\n />\n ) : null}\n\n {/* MARK AS CANCELLED BUTTON */}\n {(status !== \"Draft\" &&\n status !== \"ReadyForAuthorisation\" &&\n status !== \"PendingSubmission\" &&\n status !== \"WithNhsBsa\") ||\n action === \"new\" ? null : (\n {\n setPropsForApprovalState({\n pathName: null,\n headerText: \"Cancellation Confirmation\",\n redText: \"Once confirmed, this cannot be undone.\",\n onConfirm: () => {\n changeStatus(\"cancel\");\n setPropsForApprovalState();\n },\n onDecline: () => {\n setPropsForApprovalState();\n },\n });\n }}\n />\n )}\n\n {/* PRINT - EXPORT - TOP */}\n
    \n {\n window.print();\n }}\n >\n PRINT\n
    \n
    -
    \n
    EXPORT
    \n
    -
    \n {\n handleGoToTop();\n }}\n >\n TOP\n
    \n \n
    \n );\n};\n","import React from \"react\";\n\nexport const Description = (props) => {\n const { data, viewMode } = props;\n const { placeHolder } = data;\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n if (viewMode === \"view\") {\n return null;\n }\n\n return
    {placeHolder}
    ;\n};\n","import * as React from \"react\";\nimport { useEffect } from \"react\";\n\nexport const FeatureFlagsStore = React.createContext({});\n\nconst FeatureFlagsProvider = ({ children }) => {\n const initDefaults = {\n enableNhsBsaEmailAddress: undefined\n }\n\n const errorDefaults = {\n enableNhsBsaEmailAddress: false\n }\n\n const [flags, setFlags] = React.useState(initDefaults);\n\n useEffect(() => {\n async function getFlags() {\n try {\n const url = `${process.env.REACT_APP_API_PATH}/features/management`;\n const headers = {\n \"Content-Type\": \"application/json\",\n };\n\n const response = await fetch(url, { method: \"GET\", headers: headers });\n if (!response.ok) {\n throw new Error();\n }\n\n setFlags(await response.json());\n } catch {\n setFlags(errorDefaults)\n }\n }\n\n getFlags();\n }, []);\n\n return {children};\n};\nexport default FeatureFlagsProvider;\n","import React, { useContext } from \"react\";\n\nimport { UserContext } from \"contexts/UserStore.js\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport { FeatureFlagsStore } from \"contexts/FeatureContext\";\n\nimport \"./DescriptionLink.scss\";\n\nexport const DescriptionLink = (props) => {\n const { viewMode } = props;\n const { userState } = useContext(UserContext);\n const { headerTitles } = useContext(GlobalContext);\n const flags = React.useContext(FeatureFlagsStore);\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n \n const supportemail = flags[\"enableNhsBsaEmailAddress\"] ? \"indemandppdsupport@nhsbsa.nhs.uk\" : \"nhsbsa.indemandppdsupport@nhs.net\";\n\n if (viewMode === \"view\") {\n return null;\n }\n return (\n
    \n To request an ingredient be added to the dm+d please click here. Once the ingredient has been added to the dm+d, you will be able to make your submission to the NHS BSA\n
    \n\n );\n \n};\n","const today = new Date();\nconst todayYear = today.getFullYear();\nconst newYears = [];\nfor (let i = 0; i < 3; i++) {\n newYears.push({\n label: todayYear + i + \"\",\n value: todayYear + i + \"\",\n });\n}\nconst newDays = [];\nfor (let i = 1; i < 31 + 1; i++) {\n newDays.push({ label: i + \"\", value: i + \"\" });\n}\n\nexport const defaultDateOptions = {\n month: [\n { label: \"Jan\", value: \"1\" },\n { label: \"Feb\", value: \"2\" },\n { label: \"Mar\", value: \"3\" },\n { label: \"Apr\", value: \"4\" },\n { label: \"May\", value: \"5\" },\n { label: \"Jun\", value: \"6\" },\n { label: \"Jul\", value: \"7\" },\n { label: \"Aug\", value: \"8\" },\n { label: \"Sep\", value: \"9\" },\n { label: \"Oct\", value: \"10\" },\n { label: \"Nov\", value: \"11\" },\n { label: \"Dec\", value: \"12\" },\n ],\n year: newYears,\n day: newDays,\n};\n\nexport const yesNoNA = [\n { value: \"NA\", label: \"Not Applicable\" },\n { value: \"Yes\", label: \"Yes\" },\n { value: \"No\", label: \"No\" },\n];\n\nexport const yesNo = [\n { value: \"Yes\", label: \"Yes\" },\n { value: \"No\", label: \"No\" },\n];\n\nexport const trueFalse = [\n { value: true, label: \"True\" },\n { value: false, label: \"False\" },\n];","import React, { useRef, useState, useContext, useLayoutEffect } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport useDebounce from \"./useDebounce.js\";\n\nexport const TextInput = (props) => {\n const { data, keyName, updateData, additionalStyle, setIsFocused2, viewMode } = props;\n const {\n placeHolder,\n fieldName,\n currentValue,\n informationText,\n errorText,\n validationRules,\n alwaysNonEditable,\n } = data;\n const { turnArrayToLines, isNotEmpty } = useContext(GlobalContext);\n\n const [localCurrentValue, setLocalCurrentValue] = useState(currentValue);\n const [firstFocus, setFirstFocus] = useState(false);\n const inputZone = useRef();\n const debouncedSearchTerm = useDebounce(localCurrentValue, 250);\n\n /**\n * UPDATE DATA IN PARENT\n * @description sends local variables to parent with lodash\n */\n useLayoutEffect(() => {\n if (!firstFocus) {\n return;\n }\n\n if (debouncedSearchTerm) {\n updateData(keyName, localCurrentValue);\n } else {\n updateData(keyName, \"\");\n }\n }, [debouncedSearchTerm]);\n\n /**\n * UPDATE LOCAL CURRENT VALUE, IF AN EXTERNAL TOUCH ARRIVES\n */\n useLayoutEffect(() => {\n if (!data) {\n return;\n }\n if (currentValue !== localCurrentValue) {\n setLocalCurrentValue(currentValue);\n }\n }, [currentValue]);\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n if (data.dontSendToApi && viewMode === \"view\") {\n return null;\n } else if (viewMode === \"view\" || alwaysNonEditable) {\n return (\n
    \n
    {fieldName}
    \n
    \n {currentValue}\n
    \n
    \n );\n }\n\n return (\n 0 ? \"error\" : \"\")}\n style={additionalStyle}\n >\n {fieldName ? (\n 0 && !isNotEmpty(currentValue)) ||\n errorText?.length > 0\n ? \" onLoadControlError\"\n : \"\")\n }\n >\n {fieldName}\n \n ) : null}\n {\n if (setIsFocused2) {\n setIsFocused2(false);\n }\n }}\n onFocus={(e) => {\n if (setIsFocused2) {\n setIsFocused2(true);\n }\n if (!firstFocus) {\n setFirstFocus(true);\n }\n }}\n onChange={(e) => {\n setLocalCurrentValue(e.target.value);\n // updateData(keyName, );\n }}\n onKeyUp={(event) => {\n if (event.keyCode === 27) {\n inputZone.current.blur();\n }\n }}\n />\n {informationText ?
    {informationText}
    : null}\n {firstFocus && errorText?.length > 0 ? (\n
    {turnArrayToLines(errorText)}
    \n ) : null}\n \n );\n};\n","//https://dev.to/gabe_ragland/debouncing-with-react-hooks-jci\n\nimport { useState, useEffect } from \"react\";\n\nexport default function useDebounce(value, delay) {\n // State and setters for debounced value\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(\n () => {\n // Update debounced value after delay\n const handler = setTimeout(() => {\n if (!value || value === \"\") {\n setDebouncedValue(null);\n } else {\n setDebouncedValue(value);\n }\n }, delay);\n\n // Cancel the timeout if value changes (also on delay change or unmount)\n // This is how we prevent debounced value from updating if value is changed ...\n // .. within the delay period. Timeout gets cleared and restarted.\n return () => {\n clearTimeout(handler);\n };\n },\n [value, delay], // Only re-call effect if value or delay changes\n );\n\n return debouncedValue;\n}\n","import React, { useContext, useState, useRef } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport _ from \"lodash\";\n\nexport const MultipleTextInput = (props) => {\n const { data, keyName, updateData, viewMode } = props;\n const { placeHolder, fieldName, currentValue, errorText, informationText } = data;\n const { turnArrayToLines } = useContext(GlobalContext);\n const [localInputValue, setLocalInputValue] = useState();\n const [firstFocus, setFirstFocus] = useState(false);\n const inputZone = useRef();\n\n /**\n * A NEW ITEM ADDED\n * @description send new selected value through parent.\n */\n const anItemAdded = () => {\n let localInputValue2 = localInputValue?.trim();\n if (!localInputValue2) {\n return;\n }\n\n let newCurrentValue = _.cloneDeep(currentValue || []);\n if (newCurrentValue.indexOf(localInputValue2) >= 0) {\n // inputZone.current.value = \"\";\n setLocalInputValue(\"\");\n } else {\n newCurrentValue.push(localInputValue2);\n updateData(keyName, newCurrentValue);\n setLocalInputValue(\"\");\n }\n };\n\n /**\n * REMOVE AN ITEM\n * @description removes an item from Current values\n */\n const removeAnItem = (item) => {\n let newArray = (currentValue || []).filter((VAL) => {\n return VAL !== item;\n });\n updateData(keyName, newArray);\n };\n\n /**\n * PREPARE TYPED VALUES\n * @description prepares typedValues for currentValue\n */\n const typedValues = (currentValue || []).map((item, key) => {\n return (\n \n
    {item}
    \n {\n removeAnItem(item);\n }}\n alt=\"\"\n />\n
    \n );\n });\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n if (data.dontSendToApi && viewMode === \"view\") {\n return null;\n } else if (viewMode === \"view\") {\n return (\n
    \n
    {fieldName}
    \n
    \n {!currentValue\n ? null\n : currentValue.map((item, key) => {\n return {item};\n })}\n
    \n
    \n );\n }\n\n return (\n 0 ? \"error\" : \"\")}\n >\n {fieldName ? (\n 0 ? \" onLoadControlError\" : \"\")}\n >\n {fieldName}\n \n ) : null}\n\n {typedValues.length > 0 ? typedValues : null}\n\n {\n if (!firstFocus) {\n setFirstFocus(true);\n }\n }}\n onChange={(e) => {\n setLocalInputValue(e.target.value);\n }}\n onKeyUp={(event) => {\n if (event.key === \"Enter\") {\n anItemAdded();\n }\n if (event.keyCode === 27) {\n inputZone.current.blur();\n }\n }}\n />\n {\n anItemAdded();\n }}\n />\n {informationText ?
    {informationText}
    : null}\n {firstFocus && errorText?.length > 0 ? (\n
    {turnArrayToLines(errorText)}
    \n ) : null}\n \n );\n};\n","import React, { useState, useCallback, useRef, useLayoutEffect, useContext } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport { UserContext } from \"contexts/UserStore.js\";\nimport { FetchAPI } from \"../../APIConnections/APIConnections.js\";\nimport _ from \"lodash\";\n\nexport const SelectBox = (props) => {\n const {\n data,\n keyName,\n updateData,\n silentUpdateData,\n additionalStyle,\n setIsFocused2,\n viewMode,\n onChange\n } = props;\n const {\n placeHolder,\n fieldName,\n currentValue,\n optionValue,\n apiNameForOptionValue,\n informationText,\n handleData,\n errorText,\n validationRules,\n alwaysNonEditable,\n } = data;\n const { turnArrayToLines, isNotEmpty, showErrorLogsOnConsole } = useContext(GlobalContext);\n const { userState } = useContext(UserContext);\n const [isFocused, setIsFocused] = useState(false);\n const [firstFocus, setFirstFocus] = useState(false);\n const [localLoading, setLocalLoading] = useState(false);\n const [localInputValue, setLocalInputValue] = useState(\"\");\n const [localOptionBuffer, setLocalOptionBuffer] = useState();\n const inputZone = useRef();\n let history = useHistory();\n\n /**\n * CALL NEW OPTINS VIA API\n * @description call new options for dynamic selectBox\n * @description works with lodash\n */\n const callNewOptionsViaAPI = useCallback(\n _.debounce(async (value) => {\n let newData = await FetchAPI({\n showErrorLogsOnConsole: showErrorLogsOnConsole,\n history: history,\n apiShortName: apiNameForOptionValue,\n token: userState.accessToken,\n apiNeeds: {\n value: value,\n companyId: userState.selectedCompany?.id,\n },\n });\n\n if (handleData) {\n newData = handleData({ DATA: newData });\n }\n\n setLocalOptionBuffer(newData);\n setLocalLoading(false);\n }, 500),\n [],\n );\n useLayoutEffect(() => {\n if (!localOptionBuffer) {\n return;\n }\n\n silentUpdateData(keyName, localOptionBuffer, \"optionValue\");\n setLocalOptionBuffer();\n }, [localOptionBuffer]);\n\n /**\n * PREPARE FILTERED OPTIONS\n * @description filtered \"options\" before mapping it.\n */\n const filteredOptions = (optionValue || [])\n .filter(\n (option) =>\n option.label\n .toLowerCase()\n .includes(localInputValue ? String(localInputValue).toLowerCase() : \"\") ||\n !localInputValue,\n )\n .map((item, key) => {\n return (\n {\n if(onChange) onChange({ label: item.label, value: item.value });\n updateData(keyName, {\n label: item.label,\n value: item.value,\n });\n }}\n >\n {item.label}\n \n );\n });\n \n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n if (data.dontSendToApi && viewMode === \"view\") {\n return null;\n } else if (viewMode === \"view\" || alwaysNonEditable) {\n return (\n
    \n
    {fieldName}
    \n
    \n {fieldName === \"Restrictions on Availability\" && currentValue?.value === \"0008\"\n ? currentValue.label =\"Hospital Only\"\n : currentValue\n ? currentValue.label \n : \"\"\n }\n \n
    \n
    \n );\n }\n return (\n 0 ? \"error\" : \"\")}\n style={additionalStyle}\n >\n {fieldName ? (\n 0 && !isNotEmpty(currentValue)) ||\n errorText?.length > 0\n ? \" onLoadControlError\"\n : \"\")\n }\n >\n {fieldName}\n \n ) : null}\n {\n \n {\n setIsFocused(false);\n if (setIsFocused2) {\n setIsFocused2(false);\n }\n }}\n onFocus={() => {\n setIsFocused(true);\n if (!firstFocus) {\n setFirstFocus(true);\n }\n if (setIsFocused2) {\n setIsFocused2(true);\n }\n setLocalInputValue(\"\");\n if (apiNameForOptionValue) {\n setLocalLoading(true);\n callNewOptionsViaAPI(\"\");\n }\n }}\n onChange={(e) => {\n let val = e.target.value;\n setLocalInputValue(val);\n if (apiNameForOptionValue) {\n setLocalLoading(true);\n callNewOptionsViaAPI(val);\n }\n }}\n />\n \"\"\n \n {localLoading ? (\n Loading...\n ) :\n filteredOptions.length > 0 ? (\n filteredOptions\n ) : (\n No results found.\n )}\n \n {informationText ? (\n
    {informationText}
    \n ) : null}\n {firstFocus && errorText?.length > 0 ? (\n
    {turnArrayToLines(errorText)}
    \n ) : null}\n
    \n }\n \n );\n};\n","import React, { useContext, useState, useCallback, useRef, useLayoutEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport { UserContext } from \"contexts/UserStore.js\";\nimport { FetchAPI } from \"../../APIConnections/APIConnections.js\";\nimport _ from \"lodash\";\n\nexport const MultipleSelectBox = (props) => {\n const { data, keyName, updateData, viewMode, silentUpdateData } = props;\n const {\n placeHolder,\n fieldName,\n currentValue,\n optionValue,\n apiNameForOptionValue,\n informationText,\n errorText,\n validationRules,\n handleData,\n } = data;\n const { turnArrayToLines, isNotEmpty, showErrorLogsOnConsole } = useContext(GlobalContext);\n const { userState } = useContext(UserContext);\n const [localLoading, setLocalLoading] = useState(false);\n const [localInputValue, setLocalInputValue] = useState();\n const [firstFocus, setFirstFocus] = useState(false);\n const [localOptionBuffer, setLocalOptionBuffer] = useState();\n const inputZone = useRef();\n let history = useHistory();\n\n /**\n * ADD AN ITEM\n * @description adds an item to Current values\n */\n const addAnItem = (arr) => {\n if (!arr) {\n return;\n }\n\n let label = arr.label;\n let value = arr.value;\n let newArray = [];\n let checkIfItsAlreadyExist = 0;\n\n (currentValue || []).forEach((each) => {\n newArray.push(each);\n });\n\n newArray.forEach((item) => {\n if (item.label === label || item.value === value) {\n checkIfItsAlreadyExist++;\n }\n });\n\n if (checkIfItsAlreadyExist === 0) {\n newArray.push({ label: label, value: value });\n updateData(keyName, newArray);\n }\n setLocalInputValue(\"\");\n };\n\n /**\n * REMOVE AN ITEM\n * @description removes an item from Current values\n */\n const removeAnItem = (item) => {\n const newArray = currentValue.filter((VAL) => {\n return VAL.value !== item.value && VAL.label !== item.label;\n });\n updateData(keyName, newArray);\n };\n\n /**\n * CALL NEW OPTINS VIA API\n * @description call new options for dynamic selectBox\n * @description works with lodash\n */\n const callNewOptionsViaAPI = useCallback(\n _.debounce(async (value) => {\n let newData = await FetchAPI({\n showErrorLogsOnConsole: showErrorLogsOnConsole,\n history: history,\n apiShortName: apiNameForOptionValue,\n token: userState.accessToken,\n apiNeeds: {\n value: value,\n companyId: userState.selectedCompany?.id,\n },\n });\n\n if (handleData) {\n newData = handleData({ DATA: newData });\n }\n\n setLocalOptionBuffer(newData);\n setLocalLoading(false);\n }, 500),\n [],\n );\n useLayoutEffect(() => {\n if (!localOptionBuffer) {\n return;\n }\n\n silentUpdateData(keyName, localOptionBuffer, \"optionValue\");\n setLocalOptionBuffer();\n }, [localOptionBuffer]);\n\n /**\n * PREPARE FILTERED OPTIONS\n * @description filtered \"options\" before mapping it.\n */\n const filteredOptions = (optionValue || [])\n .filter(\n (option) =>\n option.label\n .toLowerCase()\n .includes(localInputValue ? String(localInputValue).toLowerCase() : \"\") ||\n !localInputValue,\n )\n .map((item, key) => {\n return (\n {\n addAnItem({ label: item.label, value: item.value });\n }}\n >\n {item.label}\n \n );\n });\n\n /**\n * PREPARE SELECTED VALUES\n * @description prepares typedValues for currentValue\n */\n const selectedValues = (currentValue || []).map((item, key) => {\n return (\n \n
    {item.label}
    \n {\n removeAnItem(item);\n }}\n alt=\"\"\n />\n
    \n );\n });\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n if (viewMode === \"view\") {\n return (\n
    \n
    {fieldName}
    \n
    \n {!currentValue\n ? null\n : currentValue.map((item, i) => {\n return {item.label};\n })}\n
    \n
    \n );\n }\n return (\n
    0 ? \"error\" : \"\")}>\n {fieldName ? (\n 0 && !isNotEmpty(currentValue)) ||\n errorText?.length > 0\n ? \" onLoadControlError\"\n : \"\")\n }\n >\n {fieldName}\n \n ) : null}\n\n {selectedValues.length > 0 ? selectedValues : null}\n\n {\n setLocalInputValue(\"\");\n if (!firstFocus) {\n setFirstFocus(true);\n }\n if (apiNameForOptionValue) {\n setLocalLoading(true);\n callNewOptionsViaAPI(keyName, \"\");\n }\n }}\n onChange={(e) => {\n let val = e.target.value;\n setLocalInputValue(val);\n if (apiNameForOptionValue) {\n setLocalLoading(true);\n callNewOptionsViaAPI(keyName, val);\n }\n }}\n />\n\n \"\"\n
    \n {localLoading ? (\n Loading...\n ) :\n filteredOptions.length > 0 ? (\n filteredOptions\n ) : (\n No results found.\n )}\n
    \n\n {informationText ?
    {informationText}
    : null}\n {firstFocus && errorText?.length > 0 ? (\n
    {turnArrayToLines(errorText)}
    \n ) : null}\n
    \n );\n};\n","import React, { useLayoutEffect, useState } from \"react\";\nimport { useContext } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport { SelectBox } from \"../SelectBox/SelectBox.js\";\n\nexport const DateInput = (props) => {\n const { data, keyName, updateData, silentUpdateData, viewMode } = props;\n const { fieldName, currentValue, informationText, errorText, optionValue } = data;\n const { turnArrayToLines } = useContext(GlobalContext);\n\n const today = new Date();\n const todayDay = today.getDate();\n const todayMonth = today.getMonth();\n const todayYear = today.getFullYear();\n\n const [isFocused, setIsFocused] = useState(false);\n const [firstFocus, setFirstFocus] = useState(false);\n\n /**\n * TOGGLE FIRST FOCUS\n */\n const toggleFirstFocus = () => {\n if (!firstFocus) {\n setFirstFocus(true);\n }\n };\n\n /**\n * PREPARE DAY - MONTH - YEARS\n * @description depending on month and year, day options are re-populate.\n * @description if an invalid day selected (ex 30th of Feb), set day null.\n */\n useLayoutEffect(() => {\n let newOptionValue = {\n month: optionValue.month,\n year: optionValue.year,\n };\n\n let newDays = [];\n let howManyDays = 31;\n if (currentValue?.month?.value) {\n switch (currentValue.month.value) {\n case \"2\":\n if (parseInt(currentValue?.year?.value) % 4 === 0) {\n howManyDays = 29;\n } else {\n howManyDays = 28;\n }\n break;\n case \"4\":\n case \"6\":\n case \"9\":\n case \"11\":\n howManyDays = 30;\n break;\n default:\n }\n }\n for (let i = 1; i < howManyDays + 1; i++) {\n newDays.push({ label: i + \"\", value: i + \"\" });\n }\n newOptionValue.day = newDays;\n silentUpdateData(keyName, newOptionValue, \"optionValue\");\n if (currentValue?.day?.value > howManyDays) {\n updateData(keyName, { ...currentValue, day: null });\n }\n }, [currentValue]);\n\n /**\n * CALL TODAY\n * @description updates store depending on changes via fields.\n */\n const callToday = () => {\n setFirstFocus(true);\n updateData(keyName, {\n day: { value: todayDay + \"\", label: todayDay + \"\" },\n month: {\n value: todayMonth + 1 + \"\",\n label: optionValue.month[todayMonth].label,\n },\n year: { value: todayYear + \"\", label: todayYear + \"\" },\n });\n };\n /**\n * UPDATE DATA_LOCAL\n */\n const updateData_local = (fieldName, newDataObj, propName = \"currentValue\") => {\n if (fieldName === \"day\") {\n updateData(keyName, {\n ...currentValue,\n day: newDataObj,\n });\n } else if (fieldName === \"month\") {\n updateData(keyName, {\n ...currentValue,\n month: newDataObj,\n });\n } else if (fieldName === \"year\") {\n updateData(keyName, {\n ...currentValue,\n year: newDataObj,\n });\n }\n };\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n if (viewMode === \"view\") {\n return (\n
    \n
    {fieldName}
    \n
    \n \n {currentValue\n ? currentValue.day.label +\n \".\" +\n currentValue.month.label +\n \".\" +\n currentValue.year.label\n : \"\"}\n \n
    \n
    \n );\n }\n\n return (\n 0 ? \"error\" : \"\")}\n >\n {fieldName ? (\n 0 ? \" onLoadControlError\" : \"\")\n }\n >\n {fieldName}\n \n ) : null}\n\n
    \n {\n setIsFocused(boo);\n if (boo) {\n toggleFirstFocus();\n }\n }}\n />\n {\n setIsFocused(boo);\n if (boo) {\n toggleFirstFocus();\n }\n }}\n />\n {\n setIsFocused(boo);\n if (boo) {\n toggleFirstFocus();\n }\n }}\n />\n
    \n\n {informationText ? (\n
    \n {informationText}\n
    \n ) : null}\n {firstFocus && errorText && errorText.length > 0 ? (\n
    {turnArrayToLines(errorText)}
    \n ) : null}\n {\n callToday();\n }}\n >\n Today\n \n \n );\n};\n","import React, { useState } from \"react\";\n\nconst NOT_A_DIGIT_AND_ZERO_FIRST = /\\D|^0/g;\nconst NOTHING = \"\";\n\nexport const DataGridEdit = (props) => {\n const { id, value, onChange } = props;\n\n const [text, setText] = useState(value || \"\");\n\n const handelChange = (event) => {\n const newText = event.target.value.replace(NOT_A_DIGIT_AND_ZERO_FIRST, NOTHING)\n\n setText(newText);\n\n if (onChange) onChange(id, newText);\n };\n\n return ;\n};\n","import React, { useState, useContext } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport { SelectBox } from \"../SelectBox/SelectBox.js\";\nimport { TextInput } from \"../TextInput/TextInput.js\";\n\nexport const UnitSelect = (props) => {\n const { data, keyName, updateData, viewMode } = props;\n const {\n fieldName,\n currentValue,\n informationText,\n optionValue,\n errorText,\n validationRules,\n } = data;\n const { turnArrayToLines } = useContext(GlobalContext);\n\n const [firstFocus, setFirstFocus] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n /**\n * TOGGLE FIRST FOCUS\n */\n const toggleFirstFocus = () => {\n if (!firstFocus) {\n setFirstFocus(true);\n }\n };\n\n /**\n * UPDATE DATA_LOCAL\n */\n const updateData_local = (fieldName, newDataObj, propName) => {\n if (!propName) {\n propName = \"currentValue\";\n }\n\n if (fieldName === \"input\") {\n updateData(keyName, {\n ...currentValue,\n input: newDataObj,\n });\n } else if (fieldName === \"unit\") {\n updateData(keyName, {\n ...currentValue,\n unit: newDataObj,\n });\n }\n };\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n if (data.dontSendToApi && viewMode === \"view\") {\n return null;\n } else if (viewMode === \"view\") {\n return (\n
    \n
    {fieldName}
    \n
    \n \n {currentValue?.input && currentValue?.unit\n ? currentValue.input + \" \" + currentValue.unit.label\n : \"\"}\n \n
    \n
    \n );\n }\n\n return (\n
    0 ? \"error\" : \"\")}>\n {fieldName ? (\n 0 &&\n errorText?.length > 0 &&\n (!currentValue || !currentValue.unit || !currentValue.input)\n ? \" onLoadControlError\"\n : \"\")\n }\n >\n {fieldName}\n \n ) : null}\n\n
    \n
    \n {\n setIsFocused(boo);\n if (boo) {\n toggleFirstFocus();\n }\n }}\n />\n
    \n
    \n {fieldName === \"Denominator Strength\" ? \n (\n {\n updateData(keyName, {\n ...currentValue,\n input: '',\n unit: '',\n });\n }}>\n Clear\n \n )\n : null}\n {\n setIsFocused(boo);\n if (boo) {\n toggleFirstFocus();\n }\n }}\n />\n
    \n
    \n\n {informationText ? (\n
    \n {informationText}\n
    \n ) : null}\n {firstFocus && errorText?.length > 0 ? (\n
    {turnArrayToLines(errorText)}
    \n ) : null}\n
    \n );\n};\n","import React, { useState, useContext } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\n\nexport const RadioButton = (props) => {\n const { data, keyName, updateData, additionalStyle, viewMode } = props;\n const {\n fieldName,\n currentValue,\n optionValue,\n informationText,\n errorText,\n validationRules,\n alwaysNonEditable,\n } = data;\n const { turnArrayToLines, isNotEmpty } = useContext(GlobalContext);\n const [firstFocus, setFirstFocus] = useState(false);\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n if (viewMode === \"view\" || alwaysNonEditable) {\n return (\n
    \n
    {fieldName}
    \n
    \n {currentValue ? currentValue.label : \"\"}\n
    \n
    \n );\n }\n\n return (\n 0 ? \"error\" : \"\")}\n style={additionalStyle}\n onMouseOver={() => {\n if (!firstFocus) {\n setFirstFocus(true);\n }\n }}\n >\n {fieldName ? (\n 0 && !isNotEmpty(currentValue)) ||\n errorText?.length > 0\n ? \" onLoadControlError\"\n : \"\")\n }\n >\n {fieldName}\n \n ) : null}\n\n {optionValue.map((item, key) => {\n return (\n \n );\n })}\n\n {informationText ?
    {informationText}
    : null}\n {firstFocus && errorText?.length > 0 ? (\n
    {turnArrayToLines(errorText)}
    \n ) : null}\n \n );\n};\n","// https://www.newline.co/@andreeamaco/how-to-build-a-react-drag-and-drop-component-for-file-upload--bf8e5017\nimport React, { useRef, useState } from \"react\";\nimport { useContext } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\n\nexport const FileInput = (props) => {\n const { data, keyName, updateData, additionalStyle, viewMode } = props;\n const { fieldName, currentValue, informationText, errorText } = data;\n const { turnArrayToLines, isNotEmpty } = useContext(GlobalContext);\n\n const [firstFocus, setFirstFocus] = useState(false);\n\n const draggableZone = useRef();\n const input = useRef();\n\n /**\n * FILE INPUT CHANGED\n */\n const fileInputChanged = (e) => {\n let files = [];\n if (e.target.files) {\n files = e.target.files;\n updateData(keyName, {\n label: files[0].name,\n value: files[0].name,\n fileProps: files,\n });\n }\n };\n\n /**\n * REMOVE FILE\n */\n const fileRemove = () => {\n input.current.value = null;\n updateData(keyName, null);\n };\n\n /**\n * DROP EVENT\n */\n const dropEvent = (e) => {\n e.preventDefault();\n e.stopPropagation();\n let files = [];\n if (e.dataTransfer.files) {\n files = e.dataTransfer.files;\n updateData(keyName, {\n label: files[0].name,\n value: files[0].name,\n fileProps: files,\n });\n }\n };\n\n /**\n * ALLOW DROP\n */\n const allowDrop = (e) => {\n e.preventDefault();\n };\n /**\n * SHORTEN FILE NAME\n */\n const shortenFileName = (name) => {\n if (name.length > 24) {\n let file = name.split(\".\");\n let fileName = file[0];\n let fileType = file[file.length - 1];\n let newFileName =\n fileName.substring(0, 10) +\n \" (...) \" +\n fileName.substring(fileName.length - 10, fileName.length) +\n \".\" +\n fileType;\n\n return newFileName;\n } else {\n return name;\n }\n };\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n if (viewMode === \"view\") {\n return (\n
    \n
    {fieldName}
    \n
    \n {currentValue?.fileUrl ? (\n \n {currentValue.label}\n \n ) : null}\n
    \n
    \n );\n }\n return (\n 0 ? \"error\" : \"\")}\n style={additionalStyle}\n onMouseOver={() => {\n if (!firstFocus) {\n setFirstFocus(true);\n }\n }}\n >\n {fieldName ? (\n 0 ? \" onLoadControlError\" : \"\")}\n >\n {fieldName}\n \n ) : null}\n\n {\n fileInputChanged(e);\n }}\n />\n {\n draggableZone.current.classList.toggle(\"dragenter\");\n }}\n onDragLeave={() => {\n draggableZone.current.classList.toggle(\"dragenter\");\n }}\n onMouseOut={() => {\n draggableZone.current.classList.remove(\"dragenter\");\n }}\n onDrop={(e) => {\n dropEvent(e);\n }}\n onDragOver={(e) => {\n allowDrop(e);\n }}\n >\n {!isNotEmpty(currentValue) ? (\n
    \n Drop your file here or \n {\n input.current.click();\n }}\n >\n Browse\n \n
    \n ) : (\n
    \n {shortenFileName(currentValue?.label || \"\")}\n  \n {\n fileRemove();\n }}\n >\n Remove\n \n
    \n )}\n \n\n {firstFocus && informationText ? (\n
    {informationText}
    \n ) : null}\n {firstFocus && errorText?.length > 0 ? (\n
    {turnArrayToLines(errorText)}
    \n ) : null}\n \n );\n};\n","import React from \"react\";\n\nexport const IngredientBox = (props) => {\n const { currentAll, keyName, remove, viewMode, alwaysNonEditable } = props;\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n return (\n
    \n {viewMode === \"view\" || alwaysNonEditable ? null : (\n {\n remove({ keyName: keyName });\n }}\n />\n )}\n\n
    \n {currentAll?.ingredientName?.currentValue?.label || \"\"} \n
    \n
    \n BOPS: {currentAll?.bops?.currentValue?.label || \"\"}\n
    \n
    \n BoSS: {currentAll?.boss?.currentValue?.label || \"\"}\n
    \n
    \n Numerator Strength: \n {(currentAll?.numerator?.currentValue?.input || \"\") +\n \" \" +\n (currentAll?.numerator?.currentValue?.unit?.label || \"\")}\n
    \n
    \n Denominator Strength: \n {(currentAll?.denominator?.currentValue?.input || \"\") +\n \" \" +\n (currentAll?.denominator?.currentValue?.unit?.label || \"\")}\n
    \n
    \n );\n};\n","import React, { useContext } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport { IngredientBox } from \"../IngredientBox/IngredientBox.js\";\n\nexport const Ingredients = (props) => {\n const { data, keyName, additionalStyle, viewMode, removeButtonForIngsAndPacks } = props;\n const { errorText, alwaysNonEditable, currentValue } = data;\n const { turnArrayToLines } = useContext(GlobalContext);\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n if (!data || data === {}) {\n return null;\n } else {\n return (\n
    \n {/* LIST OF ADDED INGREDIENTS */}\n {!currentValue && viewMode === \"view\" ? (\n
    There isn't any ingredient.
    \n ) : !currentValue ? null : Object.entries(currentValue).length > 0 ? (\n Object.entries(currentValue).map(([key, item]) => {\n return (\n {\n removeButtonForIngsAndPacks(additionalData);\n }}\n />\n );\n })\n ) : null}\n\n {/* ERROR TEXT */}\n {errorText?.length > 0 && viewMode !== \"view\" && alwaysNonEditable !== true ? (\n
    \n {turnArrayToLines(errorText)}\n
    \n ) : null}\n
    \n );\n }\n};\n","import React from \"react\";\n\nexport const PackBox = (props) => {\n const { currentAll } = props;\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n return (\n
    \n
    \n \n {currentAll?.quantity?.currentValue?.input +\n \" \" +\n currentAll?.quantity?.currentValue?.unit?.label}\n \n
    \n
    \n Legal Category: \n {currentAll?.legalCategory?.currentValue?.label}\n
    \n
    \n Subpack Information: \n {currentAll?.subpackInfo?.currentValue}\n
    \n
    \n GTIN Codes: \n {currentAll?.gtinCodes?.currentValue}\n
    \n
    \n Calender Pack: \n {currentAll?.calendarPack?.currentValue?.label}\n
    \n
    \n Hospital Pack: \n {currentAll?.hospitalPack?.currentValue?.label}\n
    \n
    \n Limited Stability: \n {currentAll?.limitedStability?.currentValue?.label}\n
    \n
    \n Price (in pence): \n {currentAll?.price?.currentValue}\n
    \n
    \n );\n};\n","import React, { useContext } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport { PackBox } from \"../PackBox/PackBox.js\";\n\nexport const Packs = (props) => {\n const { data, keyName, additionalStyle, viewMode, removeButtonForIngsAndPacks } = props;\n const { errorText, alwaysNonEditable, currentValue } = data;\n const { turnArrayToLines } = useContext(GlobalContext);\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n if (data === {}) {\n return null;\n } else {\n return (\n
    \n {/* LIST OF ADDED PACKS */}\n {!currentValue && viewMode === \"view\" ? (\n
    There isn't any pack.
    \n ) : !currentValue ? null : Object.entries(currentValue).length > 0 ? (\n Object.entries(currentValue).map(([key, item]) => {\n return (\n {\n removeButtonForIngsAndPacks(additionalData);\n }}\n />\n );\n })\n ) : null}\n\n {/* ERROR TEXT */}\n {errorText &&\n errorText.length > 0 &&\n viewMode !== \"view\" &&\n alwaysNonEditable !== true ? (\n
    \n {turnArrayToLines(errorText)}\n
    \n ) : null}\n
    \n );\n }\n};\n","import _ from \"lodash\";\n\n/**\n * hasToBeFilled\n * @description Mandotory Check\n * @returns true || errorText\n */\nexport const hasToBeFilled = (props) => {\n let errorText = \"Field has to be filled.\";\n const { DATA, typeIdentifier } = props;\n if (!DATA) {\n return errorText;\n }\n let typeOfData = typeIdentifier(DATA);\n\n if (typeOfData === \"array\" || typeOfData === \"string\") {\n if (DATA.length > 0) {\n return true;\n } else {\n return errorText;\n }\n } else if (typeOfData === \"object\") {\n if (Object.keys(DATA).length > 0) {\n return true;\n } else {\n return errorText;\n }\n }\n\n return false;\n};\n\n/**\n * hasToBeFilled\n * @description Mandotory Check\n * @returns true || errorText\n */\nexport const hasToBeFilledIfVisible = (props) => {\n let errorText = \"Field has to be filled.\";\n const { DATA, typeIdentifier, hideFromUI } = props;\n\n if (hideFromUI) {\n return true;\n }\n\n if (!DATA) {\n return errorText;\n }\n let typeOfData = typeIdentifier(DATA);\n\n if (typeOfData === \"array\" || typeOfData === \"string\") {\n if (DATA.length > 0) {\n return true;\n } else {\n return errorText;\n }\n } else if (typeOfData === \"object\") {\n if (Object.keys(DATA).length > 0) {\n return true;\n } else {\n return errorText;\n }\n }\n\n return false;\n};\n\n/**\n * hasToBeFilledDate\n * @description Mandotory Check for DATE INPUTS\n * @returns true || errorText\n */\nexport const hasToBeFilledDate = (props) => {\n let errorText = \"Date has to be filled.\";\n const { DATA } = props;\n\n if (!DATA) {\n return errorText;\n } else {\n return true;\n }\n};\n\n/**\n * hasToBeTodayOrFuture\n * @description Effective date can not be in the past.\n * @returns true || errorText\n */\nconst today = new Date();\nconst todayDay = today.getDate();\nconst todayMonth = today.getMonth();\nconst todayYear = today.getFullYear();\nexport const hasToBeTodayOrFuture = (props) => {\n let errorText = \"The Date has to be today or in future.\";\n const { DATA } = props;\n\n const prependZero = (value) => {\n return (\"0\" + value).slice(-2);\n };\n\n if (!DATA || _.isEmpty(DATA.year) || _.isEmpty(DATA.month) || _.isEmpty(DATA.day)) {\n return errorText;\n }\n\n let currentData = Number(\n DATA.year.value +\n \"\" +\n prependZero(DATA.month.value) +\n \"\" +\n prependZero(DATA.day.value),\n );\n let todayData = Number(\n todayYear +\n \"\" +\n prependZero(todayMonth + 1) +\n \"\" +\n prependZero(todayDay),\n );\n\n if (currentData < todayData) {\n return errorText;\n }\n\n return true;\n};\n\n/**\n * unithasToBeFilled\n * @description Mandotory Check for unit selector\n * @returns true || errorText\n */\nexport const hasToBeFilledUnit = (props) => {\n let errorText = \"Field has to be filled.\";\n const { DATA } = props;\n\n if (!DATA) {\n return errorText;\n }\n\n if (\n Object.keys(DATA).length === 0 ||\n !DATA.input ||\n !DATA.unit ||\n !DATA.unit.value ||\n !DATA.unit.label\n ) {\n return errorText;\n } else {\n return true;\n }\n};\n\n/**\n * unithasToBeFilled\n * @description Mandotory Check for unit selector\n * @returns true || errorText\n */\nexport const hasToBeFilledUnitIfVisible = (props) => {\n let errorText = \"Field has to be filled.\";\n const { DATA, hideFromUI } = props;\n\n if (hideFromUI) {\n return true;\n }\n\n if (!DATA) {\n return errorText;\n }\n\n if (\n Object.keys(DATA).length === 0 ||\n !DATA.input ||\n !DATA.unit ||\n !DATA.unit.value ||\n !DATA.unit.label\n ) {\n return errorText;\n } else {\n return true;\n }\n};\n\n/**\n * hasToBeDocOrPDF\n * @description checks if file type is not a DOC DOCX or PDF\n * @returns true || errorText\n */\nexport const hasToBeDocOrPDF = (props) => {\n let errorText = \"File type has to be doc, docx or pdf\";\n const { DATA } = props;\n\n if (!DATA || (!DATA.fileProps && !DATA.fileUrl)) {\n return errorText;\n } else {\n let fileType;\n if (DATA.fileProps) {\n fileType = DATA.fileProps[0].name.split(\".\");\n } else if (DATA.fileUrl) {\n fileType = DATA.label.split(\".\");\n }\n fileType = fileType[fileType.length - 1].toLowerCase();\n if (fileType === \"doc\" || fileType === \"docx\" || fileType === \"pdf\") {\n return true;\n } else {\n return errorText;\n }\n }\n};\n\n/**\n * hasToBeNumber\n * @description Checks if value is a number or not\n * @returns true || errorText\n */\nexport const hasToBeNumber = (props) => {\n let errorText = \"Value has to be a number\";\n const { DATA } = props;\n\n if (!DATA) {\n return errorText;\n }\n\n if (/^-?\\d+$/.test(DATA)) {\n return true;\n } else {\n return errorText;\n }\n};\n\n/**\n * hasToBePrice\n * @description Checks if value is a number or not\n * @returns true || errorText\n */\nexport const hasToBePrice = (props) => {\n let errorText = \"Price must be a whole number (in pence).\";\n const { DATA } = props;\n\n if (!DATA) {\n return errorText;\n }\n\n if (/^(?!0+$)[0-9]{1,10}$/.test(DATA)) {\n return true;\n } else {\n return errorText;\n }\n};\n\n/**\n * thereMustBeAnIngAtLeast\n * @description in Ingredients zone, there must be an ing box, minimum\n * @returns true || errorText\n */\nexport const thereMustBeAnIngAtLeast = (props) => {\n let errorText = \"An ingredient has to be added\";\n const { DATA } = props;\n\n if (!DATA) {\n return errorText;\n }\n if (Object.keys(DATA).length > 0) {\n return true;\n }\n\n return errorText;\n};\n\n/**\n * thereMustBeAnPackAtLeast\n * @description in Pack Details zone, there must be an pack box, minimum\n * @returns true || errorText\n */\nexport const thereMustBeAnPackAtLeast = (props) => {\n let errorText = \"A pack has to be added\";\n const { DATA } = props;\n\n if (!DATA) {\n return errorText;\n }\n if (Object.keys(DATA).length > 0) {\n return true;\n }\n\n return errorText;\n};\n\n/**\n * GTIN CODES CONTROL\n * @description gtin codes has to be 13 or 14 cha long.\n * @returns true || errorText\n */\n export const gtinCodesControl = (props) => {\n let errorText = \"GTIN is invalid. Only valid 13 or 14 digits GTINs are accepted.\";\n const { DATA } = props;\n if (!DATA) {\n return errorText;\n }\n let errorStatus = false;\n\n DATA.forEach((item) => {\n if (!item || item.length < 13 || item.length > 14 || !(/^\\d+$/.test(item))) {\n errorStatus = true;\n }else if(item || item.length === 13 || item.length === 14 || (/^\\d+$/.test(item))){\n var lastDigit = Number(item.substring(item.length - 1));\n var checkSum = 0;\n if (isNaN(lastDigit)) { return false; } // not a valid upc/ean\n \n var arr = item.substring(0,item.length - 1).split(\"\").reverse();\n var oddTotal = 0, evenTotal = 0;\n \n for (var i=0; i {\n const { DATA } = props;\n let newData = [];\n DATA.data.map((item) => {\n newData.push({ label: item.name, value: item.id });\n return null;\n });\n return newData;\n};\n\n/**\n * thereMustBeAPriceUpdateAtLeast\n * @description in Mass Price Update zone, there must be an new price update\n * @returns true || errorText\n */\nexport const thereMustBeAPriceUpdateAtLeast = (props) => {\n let errorText = \"A price update has to be added\";\n const { DATA } = props;\n\n if (!DATA) {\n return errorText;\n }\n\n if(Object.keys(DATA).filter((key) => typeof(DATA[key].newPrice) !== \"undefined\" && DATA[key].newPrice !== null && DATA[key].newPrice > 0).length > 0) {\n return true;\n }\n\n return errorText;\n};\n\n/**\n * max of 50 price packs\n * @description in Mass Price Update zone, there must be an new price update\n * @returns true || errorText\n */\n export const maxofPriceInput = (props) => {\n let massPriceTopValue = process.env.REACT_APP_MASS_PRICE_TOP_VALUE;\n let errorText = `Maximum input of ${massPriceTopValue} only`;\n const { DATA } = props;\n\n if (!DATA) {\n return errorText;\n }\n if(Object.keys(DATA).filter((key) => typeof(DATA[key].newPrice) !== \"undefined\" && DATA[key].newPrice !== null && DATA[key].newPrice > 0).length <= parseInt(massPriceTopValue)) {\n return true;\n }\n\n return errorText;\n};\n\n/**\n * Unit and Value should both have value\n * @description Mandotory Check for unit selector\n * @returns true || errorText\n */\n export const UnitValueValidation = (props) => {\n let errorText = \"Field has to be filled.\";\n const { DATA } = props;\n\n if (DATA && DATA.input && !DATA.unit ) {\n return errorText;\n }else if(DATA && !DATA.input && DATA.unit){\n return errorText;\n }\n else {\n return true;\n }\n};\n\n/**\n * shouldBeNumber\n * @description Mandotory Check for unit selector\n * @returns true || errorText\n */\n export const shouldBeNumber = (props) => {\n let errorText = \"Input should be number\";\n const { DATA} = props;\n \n if(DATA && DATA.input !== \"\" && !(/^[0-9]*$/.test(DATA.input))) {\n return errorText;\n }\n\n return true;\n};\n/**\n * acceptDecimal\n * @description Mandotory Check for unit selector\n * @returns true || errorText\n */\n export const acceptDecimal = (props) => {\n let errorText = \"Input should be numerical\";\n const { DATA} = props;\n \n if(DATA && DATA.input !== \"\" && !(/^\\d+(\\.\\d{1,10})?$/.test(DATA.input))) {\n return errorText;\n }\n \n return true;\n };\n\n /**\n * isFileSizeWithinRange\n * @description checks the file size if between 1B and 10MB\n * @returns true || errorText\n */\nexport const isFileSizeWithinRange = (props) => {\n let errorText = \"File size must be between 1B and 10MB.\";\n const { DATA } = props;\n\n if (!DATA || (!DATA.fileProps && !DATA.fileUrl)) {\n return errorText;\n }\n\n if(DATA.fileProps && (DATA.fileProps[0].size < 1 || DATA.fileProps[0].size > 10485760)) { // equivalent to 10MB\n return errorText;\n }\n\n return true;\n};","import { Seperator } from \"components/FormElements/Seperator/Seperator.js\";\nimport { Description } from \"components/FormElements/Description/Description.js\";\nimport { DescriptionLink } from \"components/FormElements/DescriptionLink/DescriptionLink.js\";\nimport { TextInput } from \"components/FormElements/TextInput/TextInput.js\";\nimport { MultipleTextInput } from \"components/FormElements/MultipleTextInput/MultipleTextInput.js\";\nimport { SelectBox } from \"components/FormElements/SelectBox/SelectBox.js\";\nimport { MultipleSelectBox } from \"components/FormElements/MultipleSelectBox/MultipleSelectBox.js\";\nimport { DateInput } from \"components/FormElements/DateInput/DateInput.js\";\nimport { DataGrid } from \"components/FormElements/DataGrid/DataGrid.js\";\nimport { UnitSelect } from \"components/FormElements/UnitSelect/UnitSelect.js\";\nimport { RadioButton } from \"components/FormElements/RadioButton/RadioButton.js\";\nimport { FileInput } from \"components/FormElements/FileInput/FileInput.js\";\nimport { Button } from \"components/FormElements/Button/Button.js\";\nimport { Ingredients } from \"components/FormElements/Ingredients/Ingredients.js\";\nimport { Packs } from \"components/FormElements/Packs/Packs.js\";\nimport _ from \"lodash\";\n\nimport {\n hasToBeFilled,\n hasToBeFilledDate,\n hasToBeDocOrPDF,\n thereMustBeAnIngAtLeast,\n thereMustBeAnPackAtLeast,\n handleDataForIngredientApi,\n hasToBeTodayOrFuture,\n hasToBeFilledUnit,\n hasToBePrice,\n gtinCodesControl,\n hasToBeFilledIfVisible,\n hasToBeFilledUnitIfVisible,\n thereMustBeAPriceUpdateAtLeast,\n maxofPriceInput,\n UnitValueValidation,\n shouldBeNumber,\n acceptDecimal,\n isFileSizeWithinRange\n} from \"./validationRules.js\";\nimport {\n yesNoNA,\n yesNo,\n defaultDateOptions,\n trueFalse,\n} from \"./selectBoxOptions.js\";\n\n//-------------------------------------------------------------\n// \t\tNEW PRODUCT\n//-------------------------------------------------------------\n\nexport const NewProduct = ({formulations, licensedRoutes, flavours, controlledDrugCategories, currentLicensing, restrictions, bops, units, legalCategories}) => ({\n seperatorIntro: {\n isASection: true,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Details\",\n },\n name: {\n componentTypeName: \"TextInput\",\n componentType: TextInput,\n fieldName: \"Product Name\",\n placeHolder: \"Type Product Name\",\n informationText:\n \"The product name is usually the trade name of the product + strength + form e.g. BrandX 50mg tablets or BrandX 150mg/15ml solution for injection ampoules.\",\n validationRules: [hasToBeFilled],\n },\n relatedVMP: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Related VMP\",\n placeHolder: \"Type to search a VMP\",\n apiNameForOptionValue: \"callVMP\",\n handleData: handleDataForIngredientApi,\n informationText:\"Virtual Medicinal Product (VMP) name is most commonly the generic name + strength + form, e.g. paracetamol 500mg capsule. If the medicine in this form is new to the dm+d, the VMP may not yet exist. Please choose \\\"Not listed\\\" if that is the case.\", \n validationRules: [hasToBeFilled],\n },\n formulation: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Formulation\",\n placeHolder: \"Type and Select\",\n optionValue: formulations,\n informationText: \"Formulation is the dose form of the product e.g. cream, drops, tablet.\",\n validationRules: [hasToBeFilled],\n },\n licensedRoutes: {\n componentTypeName: \"MultipleSelectBox\",\n componentType: MultipleSelectBox,\n fieldName: \"Licensed Routes\",\n placeHolder: \"Type and Select\",\n optionValue: licensedRoutes,\n informationText: \"Select only the licensed route of administration as listed on the SPC.\",\n validationRules: [hasToBeFilled],\n },\n\n /**\n * EFFECTIVE DATE\n */\n\n seperatorEffectiveDate: {\n isASection: true,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Effective Date\",\n },\n descriptionEffectiveDate: {\n componentTypeName: \"Description\",\n componentType: Description,\n placeHolder:\n \"Please enter the effective date for changes. If the date that you choose is within 2 weeks of the current date, please note that the NHS BSA cannot commit to have actioned your request by this date.\",\n },\n effectiveDate: {\n componentTypeName: \"DateInput\",\n componentType: DateInput,\n fieldName: \"Effective Date\",\n optionValue: defaultDateOptions,\n informationText:\n \"The effective date is the date your submission should be added or removed from the dm+d database. The change will be seen on the dm+d browser up to 5 working days later.\",\n validationRules: [hasToBeFilledDate, hasToBeTodayOrFuture],\n },\n\n /**\n * INGREDIENTS\n */\n\n seperatorIngredients: {\n isASection: true,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Ingredients\",\n },\n descriptionIngredients: {\n componentTypeName: \"Description\",\n componentType: Description,\n placeHolder:\n \"For each active ingredient, please complete all the appropriate fields below. Then click 'Save Ingredient' to add the ingredient to your product.\",\n },\n descriptionNewIngredients: {\n componentTypeName: \"DescriptionLink\",\n componentType: DescriptionLink,\n // placeHolder:\"\",\n },\n ingredients: {\n componentTypeName: \"Ingredients\",\n componentType: Ingredients,\n fieldName: \"Ingredients\",\n validationRules: [thereMustBeAnIngAtLeast],\n removeButtonForIngsAndPacks: (obj, additionalData) => {\n let data = obj.data;\n let current = _.omit(data.ingredients.currentValue, additionalData.keyName);\n\n if (Object.keys(current).length > 0) {\n obj.setData({\n ...data,\n ingredients: {\n ...data.ingredients,\n currentValue: current,\n errorText: obj.findError(\"ingredients\", current),\n },\n });\n } else {\n obj.setData({\n ...data,\n ingredients: {\n ...data.ingredients,\n currentValue: current,\n errorText: obj.findError(\"ingredients\", current),\n },\n saveIngredientButton: {\n ...data.saveIngredientButton,\n hideFromUI: false,\n },\n addIngredientButton: {\n ...data.addIngredientButton,\n hideFromUI: true,\n },\n bops: {\n ...data.bops,\n hideFromUI: false,\n },\n ingredientName: {\n ...data.ingredientName,\n hideFromUI: false,\n },\n boss: {\n ...data.boss,\n hideFromUI: false,\n },\n numerator: {\n ...data.numerator,\n hideFromUI: false,\n },\n denominator: {\n ...data.denominator,\n hideFromUI: false,\n },\n });\n }\n },\n },\n ingredientName: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Ingredient Name\",\n placeHolder: \"Type to search ingredients\",\n apiNameForOptionValue: \"callIngredients\",\n handleData: handleDataForIngredientApi,\n validationRules: [hasToBeFilled],\n informationText: \"Ingredient means the active ingredient(s) as listed on the SPC.\",\n dontSendToApi: true,\n hideFromUI: false,\n },\n bops: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Basis of Pharmaceutical Strength (BOPS)\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilled],\n optionValue: bops,\n informationText:\n \"The BOPS indicates which part of the active ingredient the strength is based on – whether the strength is based on the whole active ingredient (based on ingredient substance) or whether the strength is based on just the base part of the active ingredient (based on base substance). See the glossary in the Help section for more guidance.\",\n dontSendToApi: true,\n hideFromUI: false,\n onChange: (obj, bopsCurrentValue) => {\n let data = obj.data;\n\n data.boss = {\n ...data.boss,\n currentValue: null,\n // set BoSS to optional field if the selected value is “Based on Ingredient Substance”\n validationRules: bopsCurrentValue.value === \"0001\" ? null : [hasToBeFilled],\n };\n data.boss.errorText = obj.findError(\"boss\", null);\n }\n },\n boss: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Basis of Substance Strength (BoSS)\",\n placeHolder: \"Type to search ingredients\",\n apiNameForOptionValue: \"callIngredients\",\n handleData: handleDataForIngredientApi,\n validationRules: [hasToBeFilled],\n informationText:\n \"If you have selected ‘based on base substance’ in the box above, click on the \\\"Lookup\\\" button, type in all or part of the BOSS and click \\\"Search\\\". Select the exact BOSS match.\",\n dontSendToApi: true,\n hideFromUI: false,\n },\n numerator: {\n componentTypeName: \"UnitSelect\",\n componentType: UnitSelect,\n fieldName: \"Numerator Strength\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilledUnit,acceptDecimal],\n optionValue: units,\n informationText:\n \"Type the product strength in the first box e.g. 50. Select the units of strength in the second box e.g. mg \",\n dontSendToApi: true,\n hideFromUI: false,\n },\n denominator: {\n componentTypeName: \"UnitSelect\",\n componentType: UnitSelect,\n fieldName: \"Denominator Strength\",\n placeHolder: \"Type and Select\",\n validationRules: [UnitValueValidation,acceptDecimal], \n optionValue: units,\n informationText:\n \"For 'per unit strength' products (50mg per 1 ml) type the denominator strength in the first box e.g. ‘1’ and select units of strength in the second box e.g. ‘ml’. Please enter products per unit measure (per 1 gram or per 1ml). See the Help section glossary for more guidance.\",\n dontSendToApi: true,\n hideFromUI: false,\n errorText: []\n },\n saveIngredientButton: {\n componentTypeName: \"Button\",\n componentType: Button,\n hideFromUI: false,\n dontSendToApi: true,\n text: \"SAVE INGREDIENT\",\n buttonType: \"deactive\", // \"deactive\" || \"\"\n onClick: (obj, additionalData) => {\n let data = obj.data;\n if (\n data?.ingredientName?.errorText?.length !== 0 ||\n data?.bops?.errorText?.length !== 0 ||\n data?.boss?.errorText?.length !== 0 ||\n data?.numerator?.errorText?.length !== 0 ||\n data?.denominator?.errorText?.length !== 0\n ) {\n return;\n }\n\n let newIngredientsCurrentValue = {\n ...data.ingredients.currentValue,\n [data.ingredientName.currentValue.value]: {\n ingredientName: { currentValue: data.ingredientName.currentValue },\n bops: { currentValue: data.bops.currentValue },\n boss: { currentValue: data.boss.currentValue },\n numerator: { currentValue: data.numerator.currentValue },\n denominator: { currentValue: data.denominator.currentValue },\n },\n };\n\n if (!obj.settings.isThereAnyChange) {\n obj.setSettings({ ...obj.settings, isThereAnyChange: true });\n }\n\n obj.setData({\n ...data,\n ingredients: {\n ...data.ingredients,\n currentValue: newIngredientsCurrentValue,\n errorText: obj.findError(\"ingredients\", newIngredientsCurrentValue),\n },\n saveIngredientButton: {\n ...data.saveIngredientButton,\n hideFromUI: true,\n },\n addIngredientButton: {\n ...data.addIngredientButton,\n hideFromUI: false,\n },\n bops: {\n ...data.bops,\n currentValue: null,\n errorText: obj.findError(\"bops\", null),\n hideFromUI: true,\n },\n ingredientName: {\n ...data.ingredientName,\n currentValue: null,\n errorText: obj.findError(\"ingredientName\", null),\n hideFromUI: true,\n },\n boss: {\n ...data.boss,\n currentValue: null,\n errorText: obj.findError(\"boss\", null),\n hideFromUI: true,\n },\n numerator: {\n ...data.numerator,\n currentValue: null,\n errorText: obj.findError(\"numerator\", null),\n hideFromUI: true,\n },\n denominator: {\n ...data.denominator,\n currentValue: null ,\n errorText: obj.findError(\"denominator\", null),\n hideFromUI: true,\n },\n });\n },\n },\n addIngredientButton: {\n componentTypeName: \"Button\",\n componentType: Button,\n hideFromUI: true,\n dontSendToApi: true,\n text: \"NEW INGREDIENT\",\n onClick: (obj, additionalData) => {\n let data = obj.data;\n\n obj.setData({\n ...data,\n saveIngredientButton: {\n ...data.saveIngredientButton,\n hideFromUI: false,\n },\n addIngredientButton: {\n ...data.addIngredientButton,\n hideFromUI: true,\n },\n bops: {\n ...data.bops,\n hideFromUI: false,\n },\n ingredientName: {\n ...data.ingredientName,\n hideFromUI: false,\n },\n boss: {\n ...data.boss,\n hideFromUI: false,\n },\n numerator: {\n ...data.numerator,\n hideFromUI: false,\n },\n denominator: {\n ...data.denominator,\n hideFromUI: false,\n },\n });\n },\n },\n\n /**\n * EXCIPIENTS\n */\n\n seperatorExcipients: {\n isASection: true,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Excipients\",\n },\n productFlavour: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Product Flavour\",\n placeHolder: \"Type and Select\",\n optionValue: flavours,\n informationText: \"If applicable, select any product flavourings from the list.\",\n },\n glutenFreeProduct: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Gluten Free Product\",\n placeHolder: \"Type and Select\",\n optionValue: yesNoNA,\n informationText: \"Is your product gluten free?\",\n validationRules: [hasToBeFilled],\n },\n preservativeFreeProduct: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Preservative Free Product\",\n placeHolder: \"Type and Select\",\n optionValue: yesNoNA,\n informationText:\n \"If your product is an eye drop, is it free from preservatives? If your product is not an eye drop, select not applicable.\",\n validationRules: [hasToBeFilled],\n },\n sugarFreeProduct: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Sugar Free Product\",\n placeHolder: \"Type and Select\",\n optionValue: yesNoNA,\n informationText:\n \"If this product has prolonged contact in the mouth, is it sugar free? See glossary for examples.\",\n validationRules: [hasToBeFilled],\n },\n cfcFreeProduct: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"CFC Free Product\",\n placeHolder: \"Type and Select\",\n optionValue: yesNoNA,\n informationText:\n \"If this product has prolonged contact in the mouth, is it sugar free? See glossary for examples.\",\n validationRules: [hasToBeFilled],\n },\n\n /**\n * LICENCE DETAILS\n */\n\n seperatorLicense: {\n isASection: true,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Licence Details\",\n },\n controlledDrugCategory: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Controlled Drug Category\",\n placeHolder: \"Type and Select\",\n optionValue: controlledDrugCategories,\n informationText:\n \"Some drugs have restrictions on them according to the Misuse of Drugs Act 1971 and Misuse of Drugs Regulations. The SPC will state any restrictions and the controlled drug schedule.\",\n validationRules: [hasToBeFilled],\n },\n currentLicensingAuthority: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Current Licensing Authority\",\n placeHolder: \"Type and Select\",\n optionValue: currentLicensing,\n informationText: \"For medicines registered by the MHRA or EMA, select Medicines-MHRA.\",\n validationRules: [hasToBeFilled],\n },\n restrictionsOnAvailability: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Restrictions on Availability\",\n placeHolder: \"Type and Select\",\n optionValue: restrictions,\n informationText:\n \"Some products have restrictions on them e.g. only available through hospitals or through specific doctors or pharmacists. The glossary gives full definitions.\",\n validationRules: [hasToBeFilled],\n },\n emaAdditionalMonitoring: {\n componentTypeName: \"RadioButton\",\n componentType: RadioButton,\n fieldName: \"EMA Additional Monitoring\",\n placeHolder: \"Type and Select\",\n optionValue: yesNo,\n informationText:\n \"This medicinal product is subject to additional monitoring. Its documentation carries a black triangle.\",\n validationRules: [hasToBeFilled],\n },\n\n /**\n * PACK DETAILS\n */\n\n seperatorPacks: {\n isASection: true,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Pack Details\",\n },\n descriptionPacks: {\n componentTypeName: \"Description\",\n componentType: Description,\n placeHolder:\n \"Use the fields below to specify each pack. Click ‘Save Pack’ to add more packs to the products.\",\n },\n packs: {\n isASection: true,\n componentTypeName: \"Packs\",\n componentType: Packs,\n fieldName: \"Packs\",\n validationRules: [thereMustBeAnPackAtLeast],\n removeButtonForIngsAndPacks: (obj, additionalData) => {\n let data = obj.data;\n let current = _.omit(data.packs.currentValue, additionalData.keyName);\n\n if (Object.keys(current).length > 0) {\n obj.setData({\n ...data,\n packs: {\n ...data.packs,\n currentValue: current,\n errorText: obj.findError(\"packs\", current),\n },\n });\n } else {\n obj.setData({\n ...data,\n packs: {\n ...data.packs,\n currentValue: current,\n errorText: obj.findError(\"packs\", current),\n },\n savePackButton: {\n ...data.savePackButton,\n hideFromUI: false,\n },\n addPackButton: {\n ...data.addPackButton,\n hideFromUI: true,\n },\n\n quantity: {\n ...data.quantity,\n hideFromUI: false,\n },\n legalCategory: {\n ...data.legalCategory,\n hideFromUI: false,\n },\n subpackInfo: {\n ...data.subpackInfo,\n hideFromUI: false,\n },\n gtinCodes: {\n ...data.gtinCodes,\n hideFromUI: false,\n },\n calendarPack: {\n ...data.calendarPack,\n hideFromUI: false,\n },\n hospitalPack: {\n ...data.hospitalPack,\n hideFromUI: false,\n },\n limitedStability: {\n ...data.limitedStability,\n hideFromUI: false,\n },\n price: {\n ...data.price,\n hideFromUI: false,\n },\n });\n }\n },\n },\n quantity: {\n componentTypeName: \"UnitSelect\",\n componentType: UnitSelect,\n fieldName: \"Quantity\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilledUnit,shouldBeNumber],\n informationText:\n \"Quantity/Unit means the number and type of ‘units’ in the pack e.g. 28 tablets or 5 cartridges. Type a numerical quantity in the first box. Select the units from the drop down list. E.g. ‘28’ and ‘tablet’ or ‘10’ and ‘ml’ or ‘5’ and ‘cartridge.\",\n optionValue: units,\n dontSendToApi: true,\n hideFromUI: false,\n },\n legalCategory: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Legal Category\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilled],\n optionValue: legalCategories,\n dontSendToApi: true,\n hideFromUI: false,\n informationText:\n \"The legal category of this specific product pack. Use ‘not applicable’ for all non-medicine packs e.g. appliances.\",\n },\n subpackInfo: {\n componentTypeName: \"TextInput\",\n componentType: TextInput,\n fieldName: \"Subpack Information\",\n placeHolder: \"Type\",\n validationRules: [hasToBeFilled],\n dontSendToApi: true,\n hideFromUI: false,\n informationText:\n \"Subpack information explains how the product is packaged e.g. the number of strips of tablets in a pack. For a 28 tablet pack in 2 strips, enter 2x14. For a 28 tablet pack in 1 strip enter 1x28. For a single pack of 1 vial, 1 ampoule, 1 tube or 1 tub, enter not applicable.\",\n },\n gtinCodes: {\n componentTypeName: \"MultipleTextInput\",\n componentType: MultipleTextInput,\n fieldName: \"GTIN Codes\",\n placeHolder: \"Type and add\",\n validationRules: [hasToBeFilled, gtinCodesControl],\n dontSendToApi: true,\n hideFromUI: false,\n informationText:\n \"This is a mandatory field - include between 1 and 20 GTIN codes. Use the drop down list to increase the number of GTIN fields.\",\n },\n calendarPack: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Calendar Pack\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilled],\n optionValue: yesNo,\n dontSendToApi: true,\n hideFromUI: false,\n informationText:\n \"A calendar pack is a blister or strip pack showing the days of the week or month against each of the several units in the pack.\",\n },\n hospitalPack: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Hospital Pack\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilled],\n optionValue: yesNo,\n dontSendToApi: true,\n hideFromUI: false,\n informationText:\n \"A hospital pack is one that is only made available through hospital prescribing.\",\n },\n limitedStability: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Limited Stability\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilled],\n optionValue: yesNo,\n dontSendToApi: true,\n hideFromUI: false,\n informationText:\n \"Some preparations require a diluent/vehicle to be added to them. If the resultant liquid preparation has a stability of 13 days or less, mark the preparation as limited stability.\",\n },\n price: {\n componentTypeName: \"TextInput\",\n componentType: TextInput,\n fieldName: \"Price (in pence)\",\n placeHolder: \"Type\",\n validationRules: [hasToBeFilled, hasToBePrice],\n dontSendToApi: true,\n hideFromUI: false,\n informationText:\n \"The price of this specific product pack in pence, sterling. For example enter £3.62 as 362. For new product packs that are awaiting price confirmation, please enter 1. See ‘entering data’ section of the user manual for more details.\",\n },\n savePackButton: {\n componentTypeName: \"Button\",\n componentType: Button,\n hideFromUI: false,\n dontSendToApi: true,\n text: \"SAVE PACK\",\n buttonType: \"deactive\", // \"deactive\" || \"\"\n onClick: (obj, additionalData) => {\n let data = obj.data;\n\n const NAMES_TO_CHECK = [\n \"quantity\",\n \"legalCategory\",\n \"subpackInfo\",\n \"gtinCodes\",\n \"calendarPack\",\n \"hospitalPack\",\n \"limitedStability\",\n \"price\",\n ];\n\n const totalErrors = NAMES_TO_CHECK.reduce((total, name) => {\n const field = data[name];\n const errorText = field?.errorText;\n const count = errorText?.length || 0;\n\n return total + count;\n }, 0);\n\n if (totalErrors > 0) {\n return;\n }\n\n let newPacksCurrentValue = {\n ...data.packs.currentValue,\n [data.quantity.currentValue.input + \"\" + data.quantity.currentValue.unit.label]: {\n quantity: { currentValue: data.quantity.currentValue },\n legalCategory: { currentValue: data.legalCategory.currentValue },\n subpackInfo: { currentValue: data.subpackInfo.currentValue },\n gtinCodes: { currentValue: data.gtinCodes.currentValue },\n calendarPack: { currentValue: data.calendarPack.currentValue },\n hospitalPack: { currentValue: data.hospitalPack.currentValue },\n limitedStability: { currentValue: data.limitedStability.currentValue },\n price: { currentValue: data.price.currentValue },\n },\n };\n\n if (!obj.settings.isThereAnyChange) {\n obj.setSettings({ ...obj.settings, isThereAnyChange: true });\n }\n\n obj.setData({\n ...data,\n packs: {\n ...data.packs,\n currentValue: newPacksCurrentValue,\n errorText: obj.findError(\"packs\", newPacksCurrentValue),\n },\n savePackButton: {\n ...data.savePackButton,\n hideFromUI: true,\n },\n addPackButton: {\n ...data.addPackButton,\n hideFromUI: false,\n },\n\n quantity: {\n ...data.quantity,\n currentValue: null,\n errorText: obj.findError(\"quantity\", null),\n hideFromUI: true,\n },\n legalCategory: {\n ...data.legalCategory,\n currentValue: null,\n errorText: obj.findError(\"legalCategory\", null),\n hideFromUI: true,\n },\n subpackInfo: {\n ...data.subpackInfo,\n currentValue: null,\n errorText: obj.findError(\"subpackInfo\", null),\n hideFromUI: true,\n },\n gtinCodes: {\n ...data.gtinCodes,\n currentValue: null,\n errorText: obj.findError(\"gtinCodes\", null),\n hideFromUI: true,\n },\n calendarPack: {\n ...data.calendarPack,\n currentValue: null,\n errorText: obj.findError(\"calendarPack\", null),\n hideFromUI: true,\n },\n hospitalPack: {\n ...data.hospitalPack,\n currentValue: null,\n errorText: obj.findError(\"hospitalPack\", null),\n hideFromUI: true,\n },\n limitedStability: {\n ...data.limitedStability,\n currentValue: null,\n errorText: obj.findError(\"limitedStability\", null),\n hideFromUI: true,\n },\n price: {\n ...data.price,\n currentValue: null,\n errorText: obj.findError(\"price\", null),\n hideFromUI: true,\n },\n });\n },\n },\n addPackButton: {\n componentTypeName: \"Button\",\n componentType: Button,\n hideFromUI: true,\n dontSendToApi: true,\n text: \"NEW PACK\",\n onClick: (obj, additionalData) => {\n let data = obj.data;\n\n obj.setData({\n ...data,\n savePackButton: {\n ...data.savePackButton,\n hideFromUI: false,\n },\n addPackButton: {\n ...data.addPackButton,\n hideFromUI: true,\n },\n\n quantity: {\n ...data.quantity,\n hideFromUI: false,\n },\n legalCategory: {\n ...data.legalCategory,\n hideFromUI: false,\n },\n subpackInfo: {\n ...data.subpackInfo,\n hideFromUI: false,\n },\n gtinCodes: {\n ...data.gtinCodes,\n hideFromUI: false,\n },\n calendarPack: {\n ...data.calendarPack,\n hideFromUI: false,\n },\n hospitalPack: {\n ...data.hospitalPack,\n hideFromUI: false,\n },\n limitedStability: {\n ...data.limitedStability,\n hideFromUI: false,\n },\n price: {\n ...data.price,\n hideFromUI: false,\n },\n });\n },\n },\n\n /**\n * SMPC FILE\n */\n\n seperatorSMPC: {\n isASection: true,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"SmPC File\",\n },\n smpcFile: {\n componentTypeName: \"FileInput\",\n componentType: FileInput,\n fieldName: \"SmPC File\",\n validationRules: [hasToBeDocOrPDF, isFileSizeWithinRange],\n },\n});\n\n//-------------------------------------------------------------\n// \t\tNEW PACK\n//-------------------------------------------------------------\n\nexport const NewPack = ({units, legalCategories}) => ({\n seperatorIntro: {\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Details\",\n },\n relatedProduct: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Related Product\",\n placeHolder: \"Type to search a product\",\n apiNameForOptionValue: \"callAMP\",\n handleData: handleDataForIngredientApi, // in some cases, there are different object keys in API. this func checks and converts them.\n informationText:\n \"The product name is usually the trade name of the product + strength + form e.g. BrandX 50mg tablets or BrandX 150mg/15ml solution for injection ampoules.\",\n validationRules: [hasToBeFilled],\n },\n\n /**\n * EFFECTIVE DATE\n */\n\n seperatorEffectiveDate: {\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Effective Date\",\n },\n descriptionEffectiveDate: {\n componentTypeName: \"Description\",\n componentType: Description,\n placeHolder:\n \"Please enter the effective date for changes. If the date that you choose is within 2 weeks of the current date, please note that the NHS BSA cannot commit to have actioned your request by this date.\",\n },\n effectiveDate: {\n componentTypeName: \"DateInput\",\n componentType: DateInput,\n fieldName: \"Effective Date\",\n optionValue: defaultDateOptions,\n informationText:\n \"The effective date is the date your submission should be added or removed from the dm+d database. The change will be seen on the dm+d browser up to 5 working days later.\",\n validationRules: [hasToBeFilledDate, hasToBeTodayOrFuture],\n },\n\n /**\n * PACK DETAILS\n */\n seperatorPackDetails: {\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Pack Details\",\n },\n quantity: {\n componentTypeName: \"UnitSelect\",\n componentType: UnitSelect,\n fieldName: \"Quantity\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilledUnit,shouldBeNumber],\n informationText:\n \"Quantity/Unit means the number and type of ‘units’ in the pack e.g. 28 tablets or 5 cartridges. Type a numerical quantity in the first box. Select the units from the drop down list. E.g. ‘28’ and ‘tablet’ or ‘10’ and ‘ml’ or ‘5’ and ‘cartridge.\",\n optionValue: units,\n },\n legalCategory: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Legal Category\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilled],\n optionValue: legalCategories,\n informationText:\n \"The legal category of this specific product pack. Use ‘not applicable’ for all non-medicine packs e.g. appliances.\",\n },\n subpackInfo: {\n componentTypeName: \"TextInput\",\n componentType: TextInput,\n fieldName: \"Subpack Information\",\n placeHolder: \"Type\",\n validationRules: [hasToBeFilled],\n informationText:\n \"Subpack information explains how the product is packaged e.g. the number of strips of tablets in a pack. For a 28 tablet pack in 2 strips, enter 2x14. For a 28 tablet pack in 1 strip enter 1x28. For a single pack of 1 vial, 1 ampoule, 1 tube or 1 tub, enter not applicable.\",\n },\n gtinCodes: {\n componentTypeName: \"MultipleTextInput\",\n componentType: MultipleTextInput,\n fieldName: \"GTIN Codes\",\n placeHolder: \"Type and add\",\n validationRules: [hasToBeFilled, gtinCodesControl],\n informationText:\n \"This is a mandatory field - include between 1 and 20 GTIN codes. Use the drop down list to increase the number of GTIN fields.\",\n },\n calendarPack: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Calendar Pack\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilled],\n optionValue: yesNo,\n informationText:\n \"A calendar pack is a blister or strip pack showing the days of the week or month against each of the several units in the pack.\",\n },\n hospitalPack: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Hospital Pack\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilled],\n optionValue: yesNo,\n informationText:\n \"A hospital pack is one that is only made available through hospital prescribing.\",\n },\n limitedStability: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Limited Stability\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilled],\n optionValue: yesNo,\n informationText:\n \"Some preparations require a diluent/vehicle to be added to them. If the resultant liquid preparation has a stability of 13 days or less, mark the preparation as limited stability.\",\n },\n price: {\n componentTypeName: \"TextInput\",\n componentType: TextInput,\n fieldName: \"Price (in pence)\",\n placeHolder: \"Type\",\n validationRules: [hasToBeFilled, hasToBePrice],\n informationText:\n \"The price of this specific product pack in pence, sterling. For example enter £3.62 as 362. For new product packs that are awaiting price confirmation, please enter 1. See ‘entering data’ section of the user manual for more details.\",\n },\n\n /**\n * SMPC FILE\n */\n\n seperatorSMPC: {\n isASection: true,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"SmPC File\",\n },\n\n smpcFile: {\n componentTypeName: \"FileInput\",\n componentType: FileInput,\n fieldName: \"SmPC File\",\n validationRules: [hasToBeDocOrPDF, isFileSizeWithinRange],\n },\n});\n\n//-------------------------------------------------------------\n// \t\tUPDATE PACK\n//-------------------------------------------------------------\n\nexport const UpdatePack = ({units, legalCategories}) => ({\n relatedProduct: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Select a Product\",\n placeHolder: \"Type to search a product\",\n apiNameForOptionValue: \"callAMP\",\n handleData: handleDataForIngredientApi,\n informationText:\n \"The product name is usually the trade name of the product + strength + form e.g. BrandX 50mg tablets or BrandX 150mg/15ml solution for injection ampoules.\",\n validationRules: [hasToBeFilled],\n },\n\n relatedPack: {\n internalState: 2,\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Select a Pack\",\n placeHolder: \"Type to search a pack\",\n validationRules: [hasToBeFilled],\n },\n\n /**\n * EFFECTIVE DATE\n */\n\n seperatorEffectiveDate: {\n internalState: 3,\n isASection: true,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Effective Date\",\n },\n descriptionEffectiveDate: {\n internalState: 3,\n componentTypeName: \"Description\",\n componentType: Description,\n placeHolder:\n \"Please enter the effective date for changes. If the date that you choose is within 2 weeks of the current date, please note that the NHS BSA cannot commit to have actioned your request by this date.\",\n },\n effectiveDate: {\n internalState: 3,\n componentTypeName: \"DateInput\",\n componentType: DateInput,\n fieldName: \"Effective Date\",\n optionValue: defaultDateOptions,\n informationText:\n \"The effective date is the date your submission should be added or removed from the dm+d database. The change will be seen on the dm+d browser up to 5 working days later.\",\n validationRules: [hasToBeFilledDate, hasToBeTodayOrFuture],\n },\n discontinuePack: {\n internalState: 3,\n componentTypeName: \"RadioButton\",\n componentType: RadioButton,\n fieldName: \"Discontinue Pack?\",\n placeHolder: \"Type and Select\",\n optionValue: yesNo,\n validationRules: [hasToBeFilled],\n },\n discontinueReason: {\n internalState: 3,\n componentTypeName: \"TextInput\",\n componentType: TextInput,\n fieldName: \"Discontinue Reason\",\n placeHolder: \"Reason for discontinuation\",\n informationText: \"\",\n validationRules: [hasToBeFilledIfVisible],\n hideFromUI: true,\n },\n discontinueQuantity: {\n internalState: 3,\n componentTypeName: \"UnitSelect\",\n componentType: UnitSelect,\n fieldName: \"Quantity\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilledUnitIfVisible,shouldBeNumber],\n informationText:\n \"Quantity/Unit means the number and type of ‘units’ in the pack e.g. 28 tablets or 5 cartridges. Type a numerical quantity in the first box. Select the units from the drop down list. E.g. ‘28’ and ‘tablet’ or ‘10’ and ‘ml’ or ‘5’ and ‘cartridge.\",\n optionValue: units,\n },\n\n singlePriceUpdate: {\n internalState: 4,\n componentTypeName: \"RadioButton\",\n componentType: RadioButton,\n fieldName: \"Hide me from UI. I'm just for API.\",\n placeHolder: \"\",\n currentValue: {\n label: \"False\",\n value: false,\n },\n inComingSavedValue: {},\n changedFieldNames: [],\n optionValue: trueFalse,\n hideFromUI: true,\n },\n\n /**\n * PACK DETAILS\n */\n seperatorPackDetails: {\n internalState: 4,\n isASection: true,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Pack Details\",\n },\n quantity: {\n internalState: 4,\n componentTypeName: \"UnitSelect\",\n componentType: UnitSelect,\n fieldName: \"Quantity\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilledUnit,shouldBeNumber],\n informationText:\n \"Quantity/Unit means the number and type of ‘units’ in the pack e.g. 28 tablets or 5 cartridges. Type a numerical quantity in the first box. Select the units from the drop down list. E.g. ‘28’ and ‘tablet’ or ‘10’ and ‘ml’ or ‘5’ and ‘cartridge.\",\n optionValue: units,\n },\n legalCategory: {\n internalState: 4,\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Legal Category\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilled],\n optionValue: legalCategories,\n informationText:\n \"The legal category of this specific product pack. Use ‘not applicable’ for all non-medicine packs e.g. appliances.\",\n },\n subpackInfo: {\n internalState: 4,\n componentTypeName: \"TextInput\",\n componentType: TextInput,\n fieldName: \"Subpack Information\",\n placeHolder: \"Type\",\n validationRules: [hasToBeFilled],\n informationText:\n \"Subpack information explains how the product is packaged e.g. the number of strips of tablets in a pack. For a 28 tablet pack in 2 strips, enter 2x14. For a 28 tablet pack in 1 strip enter 1x28. For a single pack of 1 vial, 1 ampoule, 1 tube or 1 tub, enter not applicable.\",\n },\n gtinCodes: {\n internalState: 4,\n componentTypeName: \"MultipleTextInput\",\n componentType: MultipleTextInput,\n fieldName: \"GTIN Codes\",\n placeHolder: \"Type and add\",\n validationRules: [hasToBeFilled, gtinCodesControl],\n informationText:\n \"This is a mandatory field - include between 1 and 20 GTIN codes. Use the drop down list to increase the number of GTIN fields.\",\n },\n calendarPack: {\n internalState: 4,\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Calendar Pack\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilled],\n optionValue: yesNo,\n informationText:\n \"A calendar pack is a blister or strip pack showing the days of the week or month against each of the several units in the pack.\",\n },\n hospitalPack: {\n internalState: 4,\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Hospital Pack\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilled],\n optionValue: yesNo,\n informationText:\n \"A hospital pack is one that is only made available through hospital prescribing.\",\n },\n limitedStability: {\n internalState: 4,\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Limited Stability\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilled],\n optionValue: yesNo,\n informationText:\n \"Some preparations require a diluent/vehicle to be added to them. If the resultant liquid preparation has a stability of 13 days or less, mark the preparation as limited stability.\",\n },\n price: {\n internalState: 4,\n componentTypeName: \"TextInput\",\n componentType: TextInput,\n fieldName: \"Price (in pence)\",\n placeHolder: \"Type\",\n validationRules: [hasToBeFilled, hasToBePrice],\n informationText:\n \"The price of this specific product pack in pence, sterling. For example enter £3.62 as 362. For new product packs that are awaiting price confirmation, please enter 1. See ‘entering data’ section of the user manual for more details.\",\n },\n\n /**\n * SMPC FILE\n */\n\n seperatorSMPC: {\n isASection: true,\n internalState: 4,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"SmPC File\",\n },\n\n smpcFile: {\n componentTypeName: \"FileInput\",\n componentType: FileInput,\n internalState: 4,\n fieldName: \"SmPC File\",\n validationRules: [hasToBeDocOrPDF, isFileSizeWithinRange],\n },\n});\n\n//-------------------------------------------------------------\n// \t\tUPDATE PRODUCT\n//-------------------------------------------------------------\n\nexport const UpdateProduct = ({formulations, licensedRoutes, flavours, controlledDrugCategories, currentLicensing, restrictions, bops, units, legalCategories}) => ({\n relatedProduct: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Existing Product Name\",\n placeHolder: \"Type to search a product\",\n apiNameForOptionValue: \"callAMP\",\n handleData: handleDataForIngredientApi,\n informationText:\n \"The product name is usually the trade name of the product + strength + form e.g. BrandX 50mg tablets or BrandX 150mg/15ml solution for injection ampoules.\",\n validationRules: [hasToBeFilled],\n },\n\n /**\n * EFFECTIVE DATE\n */\n\n seperatorEffectiveDate: {\n internalState: 2,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Effective Date\",\n },\n descriptionEffectiveDate: {\n internalState: 2,\n componentTypeName: \"Description\",\n componentType: Description,\n placeHolder:\n \"Please enter the effective date for changes. If the date that you choose is within 2 weeks of the current date, please note that the NHS BSA cannot commit to have actioned your request by this date.\",\n },\n effectiveDate: {\n internalState: 2,\n componentTypeName: \"DateInput\",\n componentType: DateInput,\n fieldName: \"Effective Date\",\n informationText:\n \"The effective date is the date your submission should be added or removed from the dm+d database. The change will be seen on the dm+d browser up to 5 working days later.\",\n optionValue: defaultDateOptions,\n validationRules: [hasToBeFilledDate, hasToBeTodayOrFuture],\n },\n discontinueProduct: {\n internalState: 2,\n componentTypeName: \"RadioButton\",\n componentType: RadioButton,\n fieldName: \"Discontinue Product?\",\n placeHolder: \"Type and Select\",\n optionValue: yesNo,\n validationRules: [hasToBeFilled],\n // uniqueDispatch: \"updateProductSubmission_handleDiscontinueProduct\",\n },\n discontinueReason: {\n internalState: 2,\n componentTypeName: \"TextInput\",\n componentType: TextInput,\n fieldName: \"Discontinue Reason\",\n placeHolder: \"Reason for discontinuation\",\n informationText: \"\",\n validationRules: [hasToBeFilledIfVisible],\n hideFromUI: true,\n },\n\n /**\n * DETAILS\n */\n\n seperatorIntro: {\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Details\",\n internalState: 3,\n },\n name: {\n componentTypeName: \"TextInput\",\n componentType: TextInput,\n fieldName: \"Product Name\",\n internalState: 3,\n // alwaysNonEditable: true,\n placeHolder: \"Type New Product Name\",\n informationText:\n \"Changing the product name is optional. The product name is usually the trade name of the product + strength + form e.g. BrandX 50mg tablets or BrandX 150mg/15ml solution for injection ampoules.\",\n },\n relatedVMP: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n internalState: 3,\n alwaysNonEditable: true,\n fieldName: \"Related VMP\",\n placeHolder: \"Type to search a VMP\",\n apiNameForOptionValue: \"callVMP\",\n handleData: handleDataForIngredientApi,\n informationText:\n \"Virtual Medicinal Product (VMP) name is most commonly the generic name + strength + form, e.g. paracetamol 500mg capsule.\",\n validationRules: [hasToBeFilled],\n },\n formulation: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Formulation\",\n internalState: 3,\n alwaysNonEditable: true,\n optionValue: formulations,\n },\n\n licensedRoutes: {\n internalState: 3,\n componentTypeName: \"MultipleSelectBox\",\n componentType: MultipleSelectBox,\n fieldName: \"Licensed Routes\",\n placeHolder: \"Type and Select\",\n optionValue: licensedRoutes,\n informationText: \"Select only the licensed route of administration as listed on the SPC.\",\n validationRules: [hasToBeFilled],\n },\n\n /**\n * INGREDIENTS\n */\n\n seperatorIngredients: {\n isASection: true,\n internalState: 3,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Ingredients\",\n },\n ingredients: {\n internalState: 3,\n alwaysNonEditable: true,\n componentTypeName: \"Ingredients\",\n componentType: Ingredients,\n fieldName: \"Ingredients\",\n validationRules: [thereMustBeAnIngAtLeast],\n removeButtonForIngsAndPacks: () => {},\n },\n ingredientName: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n internalState: 3,\n apiNameForOptionValue: \"callIngredients\",\n handleData: handleDataForIngredientApi,\n validationRules: [hasToBeFilled],\n dontSendToApi: true,\n hideFromUI: true,\n },\n bops: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n internalState: 3,\n validationRules: [hasToBeFilled],\n optionValue: bops,\n dontSendToApi: true,\n hideFromUI: true,\n },\n boss: {\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n internalState: 3,\n apiNameForOptionValue: \"callIngredients\",\n handleData: handleDataForIngredientApi,\n validationRules: [hasToBeFilled],\n dontSendToApi: true,\n hideFromUI: true,\n },\n numerator: {\n componentTypeName: \"UnitSelect\",\n componentType: UnitSelect,\n internalState: 3,\n validationRules: [hasToBeFilledUnit],\n optionValue: units,\n dontSendToApi: true,\n hideFromUI: true,\n },\n denominator: {\n componentTypeName: \"UnitSelect\",\n componentType: UnitSelect,\n internalState: 3,\n validationRules: [hasToBeFilledUnit],\n optionValue: units,\n dontSendToApi: true,\n hideFromUI: true,\n },\n\n /**\n * EXCIPIENTS\n */\n\n seperatorExcipients: {\n internalState: 3,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Excipients\",\n },\n productFlavour: {\n internalState: 3,\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Product Flavour\",\n placeHolder: \"Type and Select\",\n optionValue: flavours,\n informationText: \"If applicable, select any product flavourings from the list.\",\n },\n glutenFreeProduct: {\n internalState: 3,\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Gluten Free Product\",\n placeHolder: \"Type and Select\",\n optionValue: yesNoNA,\n informationText: \"Is your product gluten free?\",\n validationRules: [hasToBeFilled],\n },\n preservativeFreeProduct: {\n internalState: 3,\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Preservative Free Product\",\n placeHolder: \"Type and Select\",\n optionValue: yesNoNA,\n informationText:\n \"If your product is an eye drop, is it free from preservatives? If your product is not an eye drop, select not applicable.\",\n validationRules: [hasToBeFilled],\n },\n sugarFreeProduct: {\n internalState: 3,\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Sugar Free Product\",\n placeHolder: \"Type and Select\",\n optionValue: yesNoNA,\n informationText:\n \"If this product has prolonged contact in the mouth, is it sugar free? See glossary for examples.\",\n validationRules: [hasToBeFilled],\n },\n cfcFreeProduct: {\n internalState: 3,\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"CFC Free Product\",\n placeHolder: \"Type and Select\",\n optionValue: yesNoNA,\n informationText:\n \"If this product has prolonged contact in the mouth, is it sugar free? See glossary for examples.\",\n validationRules: [hasToBeFilled],\n },\n\n /**\n * LICENCE DETAILS\n */\n\n seperatorLicense: {\n internalState: 3,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Licence Details\",\n },\n controlledDrugCategory: {\n internalState: 3,\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Controlled Drug Category\",\n placeHolder: \"Type and Select\",\n optionValue: controlledDrugCategories,\n informationText:\n \"Some drugs have restrictions on them according to the Misuse of Drugs Act 1971 and Misuse of Drugs Regulations. The SPC will state any restrictions and the controlled drug schedule.\",\n validationRules: [hasToBeFilled],\n },\n currentLicensingAuthority: {\n internalState: 3,\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Current Licensing Authority\",\n placeHolder: \"Type and Select\",\n optionValue: currentLicensing,\n informationText: \"For medicines registered by the MHRA or EMA, select Medicines-MHRA.\",\n validationRules: [hasToBeFilled],\n },\n restrictionsOnAvailability: {\n internalState: 3,\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Restrictions on Availability\",\n placeHolder: \"Type and Select\",\n optionValue: restrictions,\n informationText:\n \"Some products have restrictions on them e.g. only available through hospitals or through specific doctors or pharmacists. The glossary gives full definitions.\",\n validationRules: [hasToBeFilled],\n },\n emaAdditionalMonitoring: {\n internalState: 3,\n componentTypeName: \"RadioButton\",\n componentType: RadioButton,\n fieldName: \"EMA Additional Monitoring\",\n placeHolder: \"Type and Select\",\n optionValue: yesNo,\n informationText:\n \"This medicinal product is subject to additional monitoring. Its documentation carries a black triangle.\",\n validationRules: [hasToBeFilled],\n },\n\n /**\n * PACK DETAILS\n */\n\n seperatorPacks: {\n internalState: 3,\n isASection: true,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Pack Details\",\n },\n descriptionPacks: {\n internalState: 3,\n componentTypeName: \"Description\",\n componentType: Description,\n placeHolder:\n \"\",\n },\n packs: {\n internalState: 3,\n componentTypeName: \"Packs\",\n componentType: Packs,\n fieldName: \"Packs\",\n validationRules: [thereMustBeAnPackAtLeast],\n },\n quantity: {\n internalState: 3,\n componentTypeName: \"UnitSelect\",\n componentType: UnitSelect,\n fieldName: \"Quantity\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilledUnit],\n informationText:\n \"Quantity/Unit means the number and type of ‘units’ in the pack e.g. 28 tablets or 5 cartridges. Type a numerical quantity in the first box. Select the units from the drop down list. E.g. ‘28’ and ‘tablet’ or ‘10’ and ‘ml’ or ‘5’ and ‘cartridge.\",\n optionValue: units,\n dontSendToApi: true,\n hideFromUI: true,\n },\n legalCategory: {\n internalState: 3,\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Legal Category\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilled],\n optionValue: legalCategories,\n dontSendToApi: true,\n hideFromUI: true,\n informationText:\n \"The legal category of this specific product pack. Use ‘not applicable’ for all non-medicine packs e.g. appliances.\",\n },\n subpackInfo: {\n internalState: 3,\n componentTypeName: \"TextInput\",\n componentType: TextInput,\n fieldName: \"Subpack Information\",\n placeHolder: \"Type\",\n validationRules: [hasToBeFilled],\n dontSendToApi: true,\n hideFromUI: true,\n informationText:\n \"Subpack information explains how the product is packaged e.g. the number of strips of tablets in a pack. For a 28 tablet pack in 2 strips, enter 2x14. For a 28 tablet pack in 1 strip enter 1x28. For a single pack of 1 vial, 1 ampoule, 1 tube or 1 tub, enter not applicable.\",\n },\n gtinCodes: {\n internalState: 3,\n componentTypeName: \"MultipleTextInput\",\n componentType: MultipleTextInput,\n fieldName: \"GTIN Codes\",\n placeHolder: \"Type and add\",\n validationRules: [hasToBeFilled, gtinCodesControl],\n dontSendToApi: true,\n hideFromUI: true,\n informationText:\n \"This is a mandatory field - include between 1 and 20 GTIN codes. Use the drop down list to increase the number of GTIN fields.\",\n },\n calendarPack: {\n internalState: 3,\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Calendar Pack\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilled],\n optionValue: yesNo,\n dontSendToApi: true,\n hideFromUI: true,\n informationText:\n \"A calendar pack is a blister or strip pack showing the days of the week or month against each of the several units in the pack.\",\n },\n hospitalPack: {\n internalState: 3,\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Hospital Pack\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilled],\n optionValue: yesNo,\n dontSendToApi: true,\n hideFromUI: true,\n informationText:\n \"A hospital pack is one that is only made available through hospital prescribing.\",\n },\n limitedStability: {\n internalState: 3,\n componentTypeName: \"SelectBox\",\n componentType: SelectBox,\n fieldName: \"Limited Stability\",\n placeHolder: \"Type and Select\",\n validationRules: [hasToBeFilled],\n optionValue: yesNo,\n dontSendToApi: true,\n hideFromUI: true,\n informationText:\n \"Some preparations require a diluent/vehicle to be added to them. If the resultant liquid preparation has a stability of 13 days or less, mark the preparation as limited stability.\",\n },\n price: {\n internalState: 3,\n componentTypeName: \"TextInput\",\n componentType: TextInput,\n fieldName: \"Price (in pence)\",\n placeHolder: \"Type\",\n validationRules: [hasToBeFilled, hasToBePrice],\n dontSendToApi: true,\n hideFromUI: true,\n informationText:\n \"The price of this specific product pack in pence, sterling. For example enter £3.62 as 362. For new product packs that are awaiting price confirmation, please enter 1. See ‘entering data’ section of the user manual for more details.\",\n },\n savePackButton: {\n internalState: 3,\n componentTypeName: \"Button\",\n componentType: Button,\n hideFromUI: true,\n dontSendToApi: true,\n text: \"SAVE PACK\",\n buttonType: \"deactive\", // \"deactive\" || \"\"\n onClick: (obj, additionalData) => {\n let data = obj.data;\n\n const NAMES_TO_CHECK = [\n \"quantity\",\n \"legalCategory\",\n \"subpackInfo\",\n \"gtinCodes\",\n \"calendarPack\",\n \"hospitalPack\",\n \"limitedStability\",\n \"price\",\n ];\n\n const totalErrors = NAMES_TO_CHECK.reduce((total, name) => {\n const field = data[name];\n const errorText = field?.errorText;\n const count = errorText?.length || 0;\n\n return total + count;\n }, 0);\n\n if (totalErrors > 0) {\n return;\n }\n\n let newPacksCurrentValue = {\n ...data.packs.currentValue,\n [data.quantity.currentValue.input + \"\" + data.quantity.currentValue.unit.label]: {\n quantity: { currentValue: data.quantity.currentValue },\n legalCategory: { currentValue: data.legalCategory.currentValue },\n subpackInfo: { currentValue: data.subpackInfo.currentValue },\n gtinCodes: { currentValue: data.gtinCodes.currentValue },\n calendarPack: { currentValue: data.calendarPack.currentValue },\n hospitalPack: { currentValue: data.hospitalPack.currentValue },\n limitedStability: { currentValue: data.limitedStability.currentValue },\n price: { currentValue: data.price.currentValue },\n },\n };\n\n if (!obj.settings.isThereAnyChange) {\n obj.setSettings({ ...obj.settings, isThereAnyChange: true });\n }\n\n obj.setData({\n ...data,\n packs: {\n ...data.packs,\n currentValue: newPacksCurrentValue,\n errorText: obj.findError(\"packs\", newPacksCurrentValue),\n },\n savePackButton: {\n ...data.savePackButton,\n hideFromUI: true,\n },\n addPackButton: {\n ...data.addPackButton,\n hideFromUI: false,\n },\n\n quantity: {\n ...data.quantity,\n currentValue: null,\n errorText: obj.findError(\"quantity\", null),\n hideFromUI: true,\n },\n legalCategory: {\n ...data.legalCategory,\n currentValue: null,\n errorText: obj.findError(\"legalCategory\", null),\n hideFromUI: true,\n },\n subpackInfo: {\n ...data.subpackInfo,\n currentValue: null,\n errorText: obj.findError(\"subpackInfo\", null),\n hideFromUI: true,\n },\n gtinCodes: {\n ...data.gtinCodes,\n currentValue: null,\n errorText: obj.findError(\"gtinCodes\", null),\n hideFromUI: true,\n },\n calendarPack: {\n ...data.calendarPack,\n currentValue: null,\n errorText: obj.findError(\"calendarPack\", null),\n hideFromUI: true,\n },\n hospitalPack: {\n ...data.hospitalPack,\n currentValue: null,\n errorText: obj.findError(\"hospitalPack\", null),\n hideFromUI: true,\n },\n limitedStability: {\n ...data.limitedStability,\n currentValue: null,\n errorText: obj.findError(\"limitedStability\", null),\n hideFromUI: true,\n },\n price: {\n ...data.price,\n currentValue: null,\n errorText: obj.findError(\"price\", null),\n hideFromUI: true,\n },\n });\n },\n },\n\n /**\n * SMPC FILE\n */\n\n seperatorSMPC: {\n internalState: 3,\n isASection: true,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"SmPC File\",\n },\n smpcFile: {\n componentTypeName: \"FileInput\",\n componentType: FileInput,\n internalState: 3,\n fieldName: \"SmPC File\",\n validationRules: [hasToBeDocOrPDF, isFileSizeWithinRange],\n },\n});\n\n//-------------------------------------------------------------\n// \t\tMASS PRICE UPDATE\n//-------------------------------------------------------------\n\nexport const MassPriceUpdate = {\n /**\n * EFFECTIVE DATE\n */\n\n seperatorEffectiveDate: {\n isASection: true,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Effective Date\",\n },\n\n descriptionEffectiveDate: {\n componentTypeName: \"Description\",\n componentType: Description,\n placeHolder:\n \"Please enter the effective date for changes. If the date that you choose is within 2 weeks of the current date, please note that the NHS BSA cannot commit to have actioned your request by this date.\",\n },\n \n effectiveDate: {\n componentTypeName: \"DateInput\",\n componentType: DateInput,\n fieldName: \"Effective Date\",\n optionValue: defaultDateOptions,\n informationText:\n \"The effective date is the date your submission should be added or removed from the dm+d database. The change will be seen on the dm+d browser up to 5 working days later.\",\n validationRules: [hasToBeFilledDate, hasToBeTodayOrFuture],\n },\n\n seperatorIntro: {\n isASection: true,\n componentTypeName: \"Seperator\",\n componentType: Seperator,\n placeHolder: \"Prices\",\n },\n\n descriptionPrices: {\n componentTypeName: \"Description\",\n componentType: Description,\n placeHolder:\n \"Please make up to 50 Price Changes using the form below\"\n },\n\n prices: {\n internalState: 1,\n componentTypeName: \"DataGrid\",\n componentType: DataGrid,\n fieldName: \"Prices\",\n placeHolder: \"Pack Prices\",\n validationRules: [thereMustBeAPriceUpdateAtLeast,maxofPriceInput]\n },\n};\n","import React, { useContext} from \"react\";\n\nimport { DataGridEdit } from \"./parts/DataGridEdit\";\n\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport \"./DataGrid.scss\";\n\nexport const DataGrid = (props) => {\n const {\n data,\n keyName,\n // dispatch,\n // additionalStyle,\n // setIsFocused2, // date input - sub fields\n // viewMode\n updateData,\n } = props;\n const {\n // apiValue, // data to go back to server\n // placeHolder,\n // fieldName, // label name\n currentValue, // {label, value, UOM}\n // savedValue, // data from api\n // optionValue, // [{value,label}] for selections\n // apiNameForOptionValue, // call to retrieve\n // informationText, // tooltip\n // handleData, // when not value/label eg ingredients converts to this structure\n errorText,\n // validationRules,\n // alwaysNonEditable, // view mode not edit mode\n // uniqueDispatch,\n isReadOnly = false,\n } = data;\n const prices = currentValue || [];\n\n const { turnArrayToLines } = useContext(GlobalContext);\n\n if (!prices) {\n return
    Loading...
    ;\n }\n\n const handleUpdatePrice = (id, value) => {\n const newPrices = [...prices].map((item) => {\n if (item.actualPackId === id) {\n // if it is an empty string, ensure that the value would not be converted to zero\n return { ...item, newPrice: value === \"\" ? undefined : +value };\n }\n return item;\n });\n\n updateData(keyName, newPrices);\n };\n\n const tableRows = prices.map((price) => {\n const { actualPackId: id, newPrice: value } = price;\n\n return (\n \n {price.actualPackId}\n {price.packName}\n {price.price}\n \n {isReadOnly === false ? (\n \n ) : (\n
    {value}
    \n )}\n \n \n );\n });\n return (\n
    0 ? \"error\" : \"\")}>\n \n \n \n \n \n \n \n \n \n {tableRows}\n
    AMPP IDPack NameCurrent Price (Pence)New Price (Pence)
    \n { errorText ? (\n
    {turnArrayToLines(errorText)}
    \n ) : null}\n
    \n );\n};\n","import React, { useLayoutEffect, useContext, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport _ from \"lodash\";\n\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport { UserContext } from \"contexts/UserStore.js\";\nimport { FetchAPI } from \"components/APIConnections/APIConnections.js\";\nimport { Seperator } from \"components/FormElements/Seperator/Seperator.js\";\nimport { SummarySection } from \"components/FormElements/SummarySection/SummarySection.js\";\nimport { FreeForm } from \"components/FormElements/FreeForm/FreeForm.js\";\n\nimport { UserActions } from \"./UserActions.js\";\nimport {\n NewProduct,\n NewPack,\n UpdateProduct,\n UpdatePack,\n MassPriceUpdate,\n} from \"./setup/formFields.js\";\n\nimport \"./HandleSub.scss\";\nimport \"components/FormElements/forms.scss\";\n\nexport let textFunc;\n\nexport const HandleSub = (props) => {\n const { match } = props;\n const { params } = match || {};\n let { ID } = params || undefined;\n let { submissionType } = params || undefined;\n let { submissionID } = params || undefined;\n const {\n isLoading,\n setPageName,\n setSidebarBehavior,\n setHeaderTitles,\n addSpaces,\n setIsLoading,\n disableIsLoadingWithDelay,\n typeIdentifier,\n showErrorLogsOnConsole,\n } = useContext(GlobalContext);\n const { userState } = useContext(UserContext);\n const history = useHistory();\n const action = history.location.pathname.split(\"/\")[1];\n const [data, setData] = useState();\n const [settings, setSettings] = useState();\n const [sections, setSections] = useState();\n\n /**\n * CONVERTERS AND SUPPORTER FUNCTIONS\n * @description convert data to currentValue or savedValue or nhsForm\n */\n const convertSavedValueToCurrentValue = (fieldOrfieldName, savedValue, newData = data) => {\n if (!fieldOrfieldName || !savedValue) {\n return null;\n }\n let field;\n if (typeof fieldOrfieldName === \"object\") {\n field = fieldOrfieldName;\n } else {\n field = newData[fieldOrfieldName];\n }\n let componentType = field.componentTypeName;\n let currentValue;\n let newData2 = newData;\n\n switch (componentType) {\n case \"DataGrid\":\n currentValue = savedValue;\n break;\n case \"TextInput\":\n currentValue = savedValue;\n break;\n case \"SelectBox\":\n if (field.apiNameForOptionValue) {\n currentValue = savedValue;\n } else {\n let newObj;\n for (let i in field.optionValue) {\n if (field.optionValue[i].value === savedValue) {\n newObj = field.optionValue[i];\n break;\n }\n }\n\n currentValue = {\n value: savedValue,\n label: newObj?.label,\n };\n }\n break;\n case \"MultipleSelectBox\":\n if (field.apiNameForOptionValue) {\n if (showErrorLogsOnConsole) {\n console.log(\n \"we don't have a dynamic multipleSelectBox. Fill here if needed.\",\n );\n }\n } else {\n let newObj = [];\n for (let i in field.optionValue) {\n for (let i2 in savedValue) {\n if (field.optionValue[i].value === savedValue[i2]) {\n newObj.push({\n value: savedValue[i2],\n label: field.optionValue[i].label,\n });\n }\n }\n }\n currentValue = newObj;\n }\n break;\n case \"RadioButton\":\n let newRadio = [];\n for (let i in field.optionValue) {\n if (field.optionValue[i].value === savedValue) {\n newRadio = {\n value: savedValue,\n label: field.optionValue[i].label,\n };\n }\n }\n currentValue = newRadio;\n break;\n case \"DateInput\":\n let saved2 = savedValue.split(\"-\");\n let dayValue = saved2[2];\n let monthValue = saved2[1];\n let yearValue = saved2[0];\n currentValue = {\n day: { label: dayValue, value: dayValue },\n month: {\n label: field.optionValue.month[monthValue - 1].label,\n value: monthValue,\n },\n year: { label: yearValue, value: yearValue },\n };\n break;\n case \"UnitSelect\":\n let newObj;\n for (let i in field.optionValue) {\n if (field.optionValue[i].value === savedValue.uom) {\n newObj = field.optionValue[i];\n break;\n }\n }\n\n if (!newObj) {\n break;\n }\n\n currentValue = {\n input: savedValue.value,\n unit: {\n value: savedValue.uom,\n label: newObj.label,\n },\n };\n\n break;\n case \"MultipleTextInput\":\n currentValue = savedValue;\n break;\n case \"FileInput\":\n currentValue = {\n fileUrl: savedValue.url,\n label: savedValue.value,\n value: savedValue.value,\n };\n break;\n case \"Packs\":\n case \"Ingredients\":\n let currentPack = {};\n savedValue.forEach((item) => {\n let newPack = {};\n Object.keys(item).forEach((key) => {\n let fieldName2 = key;\n let oldSaved = item[key];\n let currentElem = convertSavedValueToCurrentValue(\n newData2[fieldName2],\n oldSaved,\n newData2,\n );\n newPack[key] = { currentValue: currentElem };\n });\n\n if (componentType === \"Packs\") {\n currentPack[\n newPack?.quantity?.currentValue?.input +\n \"\" +\n newPack?.quantity?.currentValue?.unit?.label\n ] = newPack;\n } else {\n currentPack[newPack?.ingredientName?.currentValue?.value] = newPack;\n }\n });\n currentValue = currentPack;\n\n break;\n default:\n break;\n }\n\n return currentValue;\n };\n const convertCurrentValueToSavedValue = (fieldOrfieldName, currentValue) => {\n if (!fieldOrfieldName || !currentValue) {\n return null;\n }\n let field;\n if (typeof fieldOrfieldName === \"object\") {\n field = fieldOrfieldName;\n } else {\n field = data[fieldOrfieldName];\n }\n\n let componentType = field.componentTypeName;\n let savedValue;\n\n switch (componentType) {\n case \"TextInput\":\n savedValue = currentValue;\n break;\n case \"SelectBox\":\n if (field.apiNameForOptionValue) {\n savedValue = currentValue;\n } else {\n savedValue = currentValue.value;\n }\n break;\n case \"RadioButton\":\n savedValue = currentValue.value;\n break;\n case \"MultipleSelectBox\":\n let newSaved = [];\n currentValue.forEach((item) => {\n newSaved.push(item.value);\n });\n savedValue = newSaved;\n break;\n case \"DateInput\":\n if (!currentValue.day || !currentValue.month || !currentValue.year) {\n savedValue = null;\n } else {\n // use slice() method instead of string.prototype.padStart, as we need to still support IE11...\n savedValue =\n currentValue.year.value +\n \"-\" +\n (\"0\" + currentValue.month.value).slice(-2) +\n \"-\" +\n (\"0\" + currentValue.day.value).slice(-2);\n }\n\n break;\n case \"UnitSelect\":\n if (!currentValue.input || !currentValue.unit) {\n savedValue = null;\n } else {\n savedValue = {\n value: currentValue.input,\n uom: currentValue.unit.value,\n };\n }\n break;\n case \"Packs\":\n case \"Ingredients\":\n let savedPack = [];\n Object.keys(currentValue).forEach((key) => {\n let objInner = currentValue[key];\n let innerPack = {};\n Object.keys(objInner).forEach((key2) => {\n let fieldName2 = key2;\n let elem2 = objInner[key2].currentValue;\n let savedElem = convertCurrentValueToSavedValue(fieldName2, elem2);\n innerPack[key2] = savedElem;\n });\n savedPack.push(innerPack);\n });\n savedValue = savedPack;\n break;\n case \"MultipleTextInput\":\n savedValue = currentValue;\n break;\n case \"FileInput\":\n savedValue = {\n value: currentValue.label,\n url: currentValue.fileUrl,\n };\n\n break;\n case \"DataGrid\":\n savedValue = currentValue.filter((item) => item.newPrice !== undefined);\n\n break;\n default:\n break;\n }\n return savedValue;\n };\n const convertNhsFormToCurrentValue = (dataOrg, incomingForm) => {\n if (!dataOrg || !incomingForm) {\n return;\n }\n\n let data = _.cloneDeep(dataOrg);\n\n const yesNoNAConverter = (val) => {\n if (val === true) {\n return \"Yes\";\n } else if (val === false) {\n return \"No\";\n } else if (val === null) {\n return \"NA\";\n }\n return undefined;\n };\n\n /**\n * IsThere function\n * @description we need this function because some NHS values are coming null but it doesn't mean that it is null.\n * \"null\" is a variable in nhs form. so, I have to handle them as well.\n */\n const formKeys = Object.keys(incomingForm) || [];\n const isThere = (val) => {\n if (formKeys.indexOf(val) > -1) {\n return true;\n }\n return false;\n };\n let onlyChanged = {\n calendarPack: { currentValue: null },\n hospitalPack: { currentValue: null },\n limitedStability: { currentValue: null },\n price: { currentValue: null },\n subpackInfo: { currentValue: null },\n gtinCodes: { currentValue: null },\n legalCategory: { currentValue: null },\n quantity: { currentValue: null },\n };\n\n if (isThere(\"name\") && data.name) {\n data.name.currentValue = incomingForm.name;\n }\n // need relatedVMP label !!!! ---- waiting for BE.\n if (isThere(\"virtualProductId\") && data.relatedVMP) {\n data.relatedVMP.currentValue = {\n value: incomingForm.virtualProductId,\n label: incomingForm.virtualProductId,\n };\n }\n if (isThere(\"formulation\") && data.formulation) {\n data.formulation.currentValue = convertSavedValueToCurrentValue(\n \"formulation\",\n incomingForm.formulation || \"\",\n data,\n );\n }\n if (isThere(\"licensedRoutes\") && data.licensedRoutes) {\n data.licensedRoutes.currentValue = convertSavedValueToCurrentValue(\n \"licensedRoutes\",\n incomingForm.licensedRoutes,\n data,\n );\n }\n if (isThere(\"flavourCode\") && data.productFlavour) {\n data.productFlavour.currentValue = convertSavedValueToCurrentValue(\n \"productFlavour\",\n incomingForm.flavourCode,\n data,\n );\n }\n if (isThere(\"glutenFree\") && data.glutenFreeProduct) {\n data.glutenFreeProduct.currentValue = convertSavedValueToCurrentValue(\n \"glutenFreeProduct\",\n yesNoNAConverter(incomingForm.glutenFree),\n data,\n );\n }\n if (isThere(\"preservativeFree\") && data.preservativeFreeProduct) {\n data.preservativeFreeProduct.currentValue = convertSavedValueToCurrentValue(\n \"preservativeFreeProduct\",\n yesNoNAConverter(incomingForm.preservativeFree),\n data,\n );\n }\n if (isThere(\"sugarFree\") && data.sugarFreeProduct) {\n data.sugarFreeProduct.currentValue = convertSavedValueToCurrentValue(\n \"sugarFreeProduct\",\n yesNoNAConverter(incomingForm.sugarFree),\n data,\n );\n }\n if (isThere(\"cfcFree\") && data.cfcFreeProduct) {\n data.cfcFreeProduct.currentValue = convertSavedValueToCurrentValue(\n \"cfcFreeProduct\",\n yesNoNAConverter(incomingForm.cfcFree),\n data,\n );\n }\n if (isThere(\"controlledDrugCategoryCode\") && data.controlledDrugCategory) {\n data.controlledDrugCategory.currentValue = convertSavedValueToCurrentValue(\n \"controlledDrugCategory\",\n incomingForm.controlledDrugCategoryCode,\n data,\n );\n }\n if (isThere(\"licensingAuthorityCode\") && data.currentLicensingAuthority) {\n data.currentLicensingAuthority.currentValue = convertSavedValueToCurrentValue(\n \"currentLicensingAuthority\",\n incomingForm.licensingAuthorityCode,\n data,\n );\n }\n if (isThere(\"restrictionOnAvailability\") && data.restrictionsOnAvailability) {\n data.restrictionsOnAvailability.currentValue = convertSavedValueToCurrentValue(\n \"restrictionsOnAvailability\",\n incomingForm.restrictionOnAvailability,\n data,\n );\n }\n if (isThere(\"emaAdditionalMonitoring\") && data.emaAdditionalMonitoring) {\n data.emaAdditionalMonitoring.currentValue = convertSavedValueToCurrentValue(\n \"emaAdditionalMonitoring\",\n incomingForm.emaAdditionalMonitoring,\n data,\n );\n }\n if (isThere(\"ingredients\") && data.ingredients) {\n let newIngs = {};\n incomingForm.ingredients.forEach((item) => {\n newIngs[item.id] = {\n ingredientName: {\n currentValue: {\n label: item.name,\n value: item.id,\n },\n },\n bops: {\n currentValue: convertSavedValueToCurrentValue(\n \"bops\",\n item.basisOfPharmStrengthCode,\n data,\n ),\n },\n boss: {\n currentValue: {\n label: item.basisOfStrengthSubstanceId,\n value: item.basisOfStrengthSubstanceId,\n },\n },\n numerator: {\n currentValue: convertSavedValueToCurrentValue(\n \"numerator\",\n {\n value: item.numeratorValue,\n uom: item.numeratorUomCode,\n },\n data,\n ),\n },\n denominator: {\n currentValue: convertSavedValueToCurrentValue(\n \"denominator\",\n {\n value: item.denominatorStrengthValue,\n uom: item.denominatorStrengthUomCode,\n },\n data,\n ),\n },\n };\n });\n\n data.ingredients.currentValue = newIngs;\n }\n if (isThere(\"packs\") && data.packs) {\n let newPacks = {};\n incomingForm.packs.forEach((item) => {\n let findQuantity = {\n currentValue: convertSavedValueToCurrentValue(\n \"quantity\",\n {\n value: item.quantity,\n uom: item.unitOfMeasureCode,\n },\n data,\n ),\n };\n\n newPacks[\n findQuantity.currentValue.input + \"\" + findQuantity.currentValue.unit.label\n ] = {\n quantity: findQuantity,\n legalCategory: {\n currentValue: convertSavedValueToCurrentValue(\n \"legalCategory\",\n item.legalCategoryCode,\n data,\n ),\n },\n subpackInfo: { currentValue: item.subPackInformation },\n gtinCodes: { currentValue: item.gtinCodes },\n calendarPack: {\n currentValue: convertSavedValueToCurrentValue(\n \"calendarPack\",\n yesNoNAConverter(item.calendarPack),\n data,\n ),\n },\n hospitalPack: {\n currentValue: convertSavedValueToCurrentValue(\n \"hospitalPack\",\n yesNoNAConverter(item.hospitalPack),\n data,\n ),\n },\n limitedStability: {\n currentValue: convertSavedValueToCurrentValue(\n \"limitedStability\",\n yesNoNAConverter(item.limitedStability),\n data,\n ),\n },\n price: { currentValue: item.price },\n };\n });\n\n data.packs.currentValue = newPacks;\n }\n\n /**\n * UPDATE PACK VALS.\n */\n\n if (isThere(\"calendarPack\") && data.calendarPack) {\n data.calendarPack.currentValue = onlyChanged.calendarPack.currentValue = convertSavedValueToCurrentValue(\n \"calendarPack\",\n yesNoNAConverter(incomingForm.calendarPack),\n data,\n );\n }\n if (isThere(\"hospitalPack\") && data.hospitalPack) {\n data.hospitalPack.currentValue = onlyChanged.hospitalPack.currentValue = convertSavedValueToCurrentValue(\n \"hospitalPack\",\n yesNoNAConverter(incomingForm.hospitalPack),\n data,\n );\n }\n if (isThere(\"limitedStability\") && data.limitedStability) {\n data.limitedStability.currentValue = onlyChanged.limitedStability.currentValue = convertSavedValueToCurrentValue(\n \"limitedStability\",\n yesNoNAConverter(incomingForm.limitedStability),\n data,\n );\n }\n if (isThere(\"price\") && data.price) {\n data.price.currentValue = onlyChanged.price.currentValue = incomingForm.price + \"\";\n }\n if (isThere(\"subPackInformation\") && data.subpackInfo) {\n data.subpackInfo.currentValue = onlyChanged.subpackInfo.currentValue =\n incomingForm.subPackInformation;\n }\n if (isThere(\"gtinCodes\") && data.gtinCodes) {\n data.gtinCodes.currentValue = onlyChanged.gtinCodes.currentValue =\n incomingForm.gtinCodes;\n }\n if (isThere(\"legalCategoryCode\") && data.legalCategory) {\n data.legalCategory.currentValue = onlyChanged.legalCategory.currentValue = convertSavedValueToCurrentValue(\n \"legalCategory\",\n incomingForm.legalCategoryCode,\n data,\n );\n }\n if (isThere(\"quantity\") && data.quantity) {\n data.quantity.currentValue = onlyChanged.quantity.currentValue = convertSavedValueToCurrentValue(\n \"quantity\",\n {\n value: incomingForm.quantity,\n uom: incomingForm.unitOfMeasureCode,\n },\n data,\n );\n }\n\n /**\n * LOG THEM.\n */\n\n if (\n !process.env.NODE_ENV &&\n process.env.NODE_ENV === \"development\" &&\n showErrorLogsOnConsole\n ) {\n console.info(\"nhsFormConverter worked.\");\n console.info(\"incomingForm>\", incomingForm);\n console.info(\"resultData>\", data);\n }\n\n return {\n data: data,\n onlyChanged: onlyChanged,\n };\n };\n\n const findError = (fieldOrfieldName, currentValue) => {\n let errorText = [];\n\n if (!fieldOrfieldName) {\n return errorText;\n }\n\n let field;\n if (typeof fieldOrfieldName === \"object\") {\n field = fieldOrfieldName;\n } else {\n if (!data) {\n return errorText;\n }\n field = data[fieldOrfieldName];\n }\n\n if (!field?.validationRules || field.validationRules.length === 0) {\n return errorText;\n }\n\n field.validationRules.forEach((rule) => {\n let validationResult = rule({\n typeIdentifier: typeIdentifier,\n DATA: currentValue,\n hideFromUI: field.hideFromUI,\n });\n if (validationResult !== true) {\n errorText.push(validationResult);\n }\n });\n\n return errorText;\n };\n const findAllErrors = (data) => {\n Object.entries(data).map(([key, item]) => {\n let validationRules = item.validationRules;\n if (!validationRules) {\n return null;\n }\n\n let errorText = [];\n\n validationRules.forEach((rule) => {\n let validationResult = rule({\n keyName: key,\n DATA: item.currentValue,\n setHeaderTitles: setHeaderTitles,\n typeIdentifier: typeIdentifier,\n token: userState.accessToken,\n hideFromUI: item.hideFromUI,\n });\n if (validationResult !== true) {\n errorText.push(validationResult);\n }\n });\n\n data[key].errorText = errorText;\n\n return null;\n });\n\n return data;\n };\n const areTheyEqual = (item1, item2) => {\n const typeOfItem1 = typeIdentifier(item1);\n const typeOfItem2 = typeIdentifier(item2);\n if (typeOfItem1 !== typeOfItem2) {\n return false;\n }\n\n if (typeOfItem1 === \"string\" || typeOfItem1 === \"number\" || typeOfItem1 === \"boolean\") {\n if (item1 !== item2) {\n return false;\n }\n } else if (typeOfItem1 === \"array\") {\n if (!_.isEqual(item1.sort(), item2.sort())) {\n return false;\n }\n } else if (typeOfItem1 === \"object\") {\n if (!_.isEqual(item1, item2)) {\n return false;\n }\n }\n\n return true;\n };\n\n /**\n * GET and ORGANISE ALL DATA\n */\n useLayoutEffect(() => {\n // go Error page if page doesn't have enough data.\n\n if (\n (action !== \"new\" && action !== \"edit\" && action !== \"view\") ||\n (action === \"new\" &&\n submissionType !== \"NewProduct\" &&\n submissionType !== \"NewPack\" &&\n submissionType !== \"UpdateProduct\" &&\n submissionType !== \"UpdatePack\" &&\n submissionType !== \"MassPriceUpdate\") ||\n ((action === \"edit\" || action === \"view\") && !ID)\n ) {\n history.push(\"/error/404\");\n }\n\n let newData;\n let savedData;\n\n let currentID = ID;\n let currentAction = action;\n let currentSubmissionType = submissionType;\n let currentSubmissionID = submissionID;\n let currentStatus = \"Draft\";\n let currentPageName;\n let newDataKeys;\n let newInternalState = 1;\n let inComingPack;\n\n // STEP 1 - AWAIT\n // GET SAVED DATA if action === edit or view\n const step1 = async () => {\n let retrievedData;\n if (action === \"new\" && submissionType === \"MassPriceUpdate\") {\n const newValue = await FetchAPI({\n showErrorLogsOnConsole: showErrorLogsOnConsole,\n history: history,\n apiShortName: \"callMassPriceUpdate\",\n token: userState.accessToken,\n apiNeeds: {\n companyId: userState.selectedCompany?.id,\n },\n setIsLoading: (boo) => {\n setIsLoading(boo);\n },\n });\n\n retrievedData = {\n type: submissionType,\n data: {\n prices: newValue.data,\n },\n };\n } else if (\n (action === \"view\" || action === \"edit\") &&\n submissionType === \"MassPriceUpdate\"\n ) {\n setIsLoading(false);\n return;\n } else if (action === \"view\" || action === \"edit\") {\n retrievedData = await FetchAPI({\n showErrorLogsOnConsole: showErrorLogsOnConsole,\n history: history,\n apiShortName: \"callASubmission\",\n token: userState.accessToken,\n apiNeeds: {\n ID: ID,\n submissionID: submissionID,\n companyId: userState.selectedCompany?.id,\n },\n setIsLoading: (boo) => {\n setIsLoading(boo);\n },\n });\n\n if (!retrievedData || retrievedData.data.length === 0) {\n history.push(\"/error/404\");\n }\n\n if (retrievedData.type === \"UpdatePack\" && retrievedData.data.relatedPack) {\n inComingPack = await FetchAPI({\n showErrorLogsOnConsole: showErrorLogsOnConsole,\n history: history,\n apiShortName: \"callAMPP_idSearch\",\n token: userState.accessToken,\n apiNeeds: {\n value: retrievedData.data.relatedPack,\n },\n });\n }\n }\n\n if (retrievedData) {\n savedData = retrievedData;\n currentID = retrievedData.id;\n currentSubmissionType = retrievedData.type;\n currentSubmissionID = retrievedData.submissionId;\n currentStatus = retrievedData.status || \"Draft\";\n }\n };\n\n // STEP 2\n // GET FORM FIELDS DEPENDING ON SUBMISSION TYPE (NewProduct, UpdatePack etc.)\n const step2 = async () => {\n switch (currentSubmissionType) {\n case \"NewProduct\":\n newData = _.cloneDeep(NewProduct(await getProductLookups()));\n break;\n case \"NewPack\":\n newData = _.cloneDeep(NewPack(await getPackLookups()));\n break;\n case \"UpdateProduct\":\n newData = _.cloneDeep(UpdateProduct(await getProductLookups()));\n break;\n case \"UpdatePack\":\n newData = _.cloneDeep(UpdatePack(await getPackLookups()));\n break;\n case \"MassPriceUpdate\":\n newData = _.cloneDeep(MassPriceUpdate);\n break;\n default:\n history.push(\"/error/404\");\n return;\n }\n };\n\n const getProductLookups = async () => {\n const formulations = await getLookup(\"callFormulation\");\n const licensedRoutes = await getLookup(\"callLicensedRoutes\");\n const flavours = await getLookup(\"callFlavours\")\n const controlledDrugCategories = await getLookup(\"callControlledDrugCategories\")\n const currentLicensing = await getLookup(\"callCurrentLicensing\")\n const restrictions = await getLookup(\"callRestrictions\")\n const bops = await getLookup(\"callBops\")\n const units = await getLookup(\"callUnits\");\n const legalCategories = await getLookup(\"callLegalCategory\")\n return {formulations, licensedRoutes, flavours, controlledDrugCategories, currentLicensing, restrictions, bops, units, legalCategories};\n }\n\n const getPackLookups = async () => {\n const units = await getLookup(\"callUnits\");\n const legalCategories = await getLookup(\"callLegalCategory\")\n return {units, legalCategories};\n }\n\n const getLookup = async (apiShortName) => await FetchAPI({\n showErrorLogsOnConsole: showErrorLogsOnConsole,\n history: history,\n apiShortName: apiShortName,\n token: userState.accessToken,\n setIsLoading: (boo) => {\n setIsLoading(boo);\n },\n });\n\n // STEP 3\n // UPDATE newData via savedData if action is VIEW or EDIT\n const step3 = () => {\n const processData = () => {\n if (!savedData) {\n return;\n }\n\n newDataKeys = Object.keys(newData);\n if (newDataKeys.indexOf(\"name\") > -1) {\n newData.name.currentValue = savedData.title;\n }\n let list = Object.keys(savedData.data);\n list.forEach((key) => {\n if (newDataKeys.indexOf(key) > -1) {\n newData[key].currentValue = convertSavedValueToCurrentValue(\n newData[key],\n savedData.data[key],\n newData,\n );\n }\n });\n };\n\n if (action === \"new\") {\n processData();\n } else if (action === \"view\" || action === \"edit\") {\n processData();\n\n if (currentSubmissionType === \"MassPriceUpdate\") {\n if (action === \"view\") {\n newData.prices.isReadOnly = true;\n } else {\n newData.prices.isReadOnly = false;\n }\n }\n\n if (currentSubmissionType === \"UpdateProduct\") {\n if (_.isEmpty(newData.relatedProduct.currentValue)) {\n newInternalState = 1;\n\n if (newData.discontinueReason) {\n newData.discontinueReason.hideFromUI = true;\n }\n } else {\n if (newData.discontinueProduct?.currentValue?.label === \"Yes\") {\n newInternalState = 2;\n\n if (newData.discontinueReason) {\n newData.discontinueReason.hideFromUI = false;\n }\n } else if (newData.discontinueProduct?.currentValue?.label === \"No\") {\n newInternalState = 3;\n\n if (newData.discontinueReason) {\n newData.discontinueReason.hideFromUI = true;\n }\n } else {\n newInternalState = 2;\n\n if (newData.discontinueReason) {\n newData.discontinueReason.hideFromUI = true;\n }\n }\n }\n }\n\n if (currentSubmissionType === \"UpdatePack\") {\n let nhsConverter = convertNhsFormToCurrentValue(newData, inComingPack);\n inComingPack = _.cloneDeep(nhsConverter.onlyChanged);\n\n if (\n inComingPack?.quantity?.currentValue?.input &&\n inComingPack?.quantity?.currentValue?.unit?.label\n ) {\n newData.relatedPack.currentValue.label =\n inComingPack.quantity.currentValue.input +\n \" \" +\n inComingPack.quantity.currentValue.unit.label;\n }\n\n if (_.isEmpty(newData.relatedProduct.currentValue)) {\n newInternalState = 1;\n\n if (newData.discontinueReason) {\n newData.discontinueReason.hideFromUI = true;\n newData.discontinueQuantity.hideFromUI = true;\n }\n } else if (_.isEmpty(newData.relatedPack.currentValue)) {\n newInternalState = 2;\n\n if (newData.discontinueReason) {\n newData.discontinueReason.hideFromUI = true;\n newData.discontinueQuantity.hideFromUI = true;\n }\n } else {\n if (newData.discontinuePack?.currentValue?.label === \"Yes\") {\n newInternalState = 3;\n if (newData.discontinueReason) {\n newData.discontinueReason.hideFromUI = false;\n newData.discontinueQuantity.hideFromUI = false;\n }\n } else if (newData.discontinuePack?.currentValue?.label === \"No\") {\n newInternalState = 4;\n if (newData.discontinueReason) {\n newData.discontinueReason.hideFromUI = true;\n newData.discontinueQuantity.hideFromUI = true;\n }\n } else {\n newInternalState = 3;\n if (newData.discontinueReason) {\n newData.discontinueReason.hideFromUI = true;\n newData.discontinueQuantity.hideFromUI = true;\n }\n }\n }\n }\n }\n };\n\n // STEP 4\n // FIND ERRORS\n const step4 = () => {\n if (savedData) {\n if (\n currentSubmissionType === \"UpdateProduct\" ||\n currentSubmissionType === \"UpdatePack\"\n ) {\n const savedIngredients = savedData[\"ingredients\"] || [];\n const hasNoSavedIngredients = savedIngredients.length === 0;\n\n const target = newData.ingredients || {};\n const noValidation = [];\n\n if (hasNoSavedIngredients) {\n target.validationRules = noValidation;\n }\n }\n }\n\n newData = findAllErrors(newData);\n };\n\n // LAST STEP, STEP 5\n // UPDATE STATES\n\n const step5 = () => {\n disableIsLoadingWithDelay();\n if (action === \"new\") {\n setHeaderTitles({\n id: null,\n submissionType: addSpaces(currentSubmissionType),\n productName: null,\n status: \"Draft\",\n submissionId: null,\n currentAction: currentAction,\n });\n } else {\n setHeaderTitles({\n id: ID,\n submissionType: addSpaces(savedData.type),\n productName: savedData.title,\n status: currentStatus,\n submissionId: submissionID,\n currentAction: currentAction,\n });\n }\n currentPageName =\n \"handlePage/\" +\n currentAction +\n \"/\" +\n currentSubmissionType +\n \"/\" +\n currentID;\n //currentSubmissionID;\n setPageName(currentPageName);\n setSidebarBehavior({ position: \"narrow\", content: \"none\" });\n\n setSettings({\n isThereAnyChange: false,\n action: currentAction,\n submissionType: currentSubmissionType,\n ID: currentID,\n submissionID: currentSubmissionID,\n name: savedData ? savedData.title : \"\",\n status: currentStatus,\n savedData: savedData,\n internalState: newInternalState,\n inComingPack: inComingPack,\n });\n setData(newData);\n };\n\n // RUN FUNCS\n const runFuncs = async () => {\n await step1();\n await step2();\n step3();\n step4();\n step5();\n };\n runFuncs();\n }, [ID, submissionType, submissionID, action]);\n \n /**\n * UPDATE DATA\n */\n const updateData = async (fieldName, newDataObj, propName = \"currentValue\") => {\n if (!data || !settings) {\n return;\n }\n let currentSubmissionType = settings.submissionType || \"\";\n\n /**\n * CLONE MAIN DATA and CHANGE INCOMING VALUES\n */\n let errorText = findError(fieldName, newDataObj);\n let newData = _.cloneDeep(data);\n let newSettings = _.cloneDeep(settings);\n\n newData[fieldName] = {\n ...newData[fieldName],\n [propName]: newDataObj,\n ...(propName === \"currentValue\" && {\n errorText: errorText,\n }),\n };\n\n /**\n * CHECK IF THERE IS ANY CHANGE FOR ONE TIME\n */\n if (\n !settings.isThereAnyChange &&\n data[fieldName].dontSendToApi !== true &&\n propName === \"currentValue\"\n ) {\n newSettings.isThereAnyChange = true;\n }\n\n /**\n * UNIQUE FUNCTIONS DEPENDING ON SUBMISSION TYPE\n */\n const toggleSaveIngredientButton = () => {\n const relatedFieldNames = [\n \"ingredientName\",\n \"bops\",\n \"boss\",\n \"numerator\",\n \"denominator\",\n ];\n if (!data.saveIngredientButton || relatedFieldNames.indexOf(fieldName) === -1) {\n return;\n } else if (errorText.length > 0) {\n newData.saveIngredientButton.buttonType = \"deactive\";\n } else {\n let newArr = relatedFieldNames.filter((item) => {\n if (item !== fieldName) {\n return data[item]?.errorText?.length !== 0;\n } else {\n return null;\n }\n });\n\n if (newArr.length > 0) {\n newData.saveIngredientButton.buttonType = \"deactive\";\n } else {\n newData.saveIngredientButton.buttonType = \"\";\n }\n }\n };\n const toggleSavePackButton = () => {\n const relatedFieldNames = [\n \"quantity\",\n \"legalCategory\",\n \"subpackInfo\",\n \"gtinCodes\",\n \"calendarPack\",\n \"hospitalPack\",\n \"limitedStability\",\n \"price\",\n ];\n if (!data.savePackButton || relatedFieldNames.indexOf(fieldName) === -1) {\n return;\n } else if (errorText.length > 0) {\n newData.savePackButton.buttonType = \"deactive\";\n } else {\n let newArr = relatedFieldNames.filter((item) => {\n if (item !== fieldName) {\n const errorCount = data[item]?.errorText?.length || 0;\n return errorCount !== 0;\n } else {\n return null;\n }\n });\n\n if (newArr.length > 0) {\n newData.savePackButton.buttonType = \"deactive\";\n } else {\n newData.savePackButton.buttonType = \"\";\n }\n }\n };\n const relatedProductChanged = async () => {\n if (\n !data.relatedProduct ||\n fieldName !== \"relatedProduct\" ||\n propName !== \"currentValue\" ||\n areTheyEqual(newDataObj, data.relatedProduct.currentValue)\n ) {\n return;\n }\n\n let inComingValues = await FetchAPI({\n showErrorLogsOnConsole: showErrorLogsOnConsole,\n history: history,\n apiShortName: \"callAMP_idSearch\",\n token: userState.accessToken,\n apiNeeds: {\n value: newDataObj.value,\n },\n setIsLoading: (boo) => {\n setIsLoading(boo);\n },\n });\n newData = _.cloneDeep(convertNhsFormToCurrentValue(newData, inComingValues).data);\n newData = findAllErrors(newData);\n newSettings.internalState = 2;\n\n setIsLoading(false);\n };\n const discontinueProductChanged = () => {\n if (_.isEmpty(newData.relatedProduct?.currentValue)) {\n if (newData.discontinueReason) {\n newData.discontinueReason.hideFromUI = true;\n }\n return;\n }\n\n if (newData.discontinueProduct?.currentValue?.label === \"Yes\") {\n newSettings.internalState = 2;\n\n if (newData.discontinueReason) {\n newData.discontinueReason.hideFromUI = false;\n }\n } else if (newData.discontinueProduct?.currentValue?.label === \"No\") {\n newSettings.internalState = 3;\n\n if (newData.discontinueReason) {\n newData.discontinueReason.hideFromUI = true;\n }\n } else {\n newSettings.internalState = 2;\n\n if (newData.discontinueReason) {\n newData.discontinueReason.hideFromUI = true;\n }\n }\n\n newData = findAllErrors(newData);\n };\n const discontinuePackChanged = () => {\n if (\n _.isEmpty(newData.relatedProduct?.currentValue) ||\n _.isEmpty(newData.relatedPack?.currentValue)\n ) {\n if (newData.discontinueReason) {\n newData.discontinueReason.hideFromUI = true;\n newData.discontinueQuantity.hideFromUI = true;\n }\n return;\n }\n\n if (newData.discontinuePack?.currentValue?.label === \"Yes\") {\n newSettings.internalState = 3;\n\n if (newData.discontinueReason) {\n newData.discontinueReason.hideFromUI = false;\n newData.discontinueQuantity.hideFromUI = false;\n }\n } else if (newData.discontinuePack?.currentValue?.label === \"No\") {\n newSettings.internalState = 4;\n\n if (newData.discontinueReason) {\n newData.discontinueReason.hideFromUI = true;\n newData.discontinueQuantity.hideFromUI = true;\n }\n } else {\n newSettings.internalState = 3;\n\n if (newData.discontinueReason) {\n newData.discontinueReason.hideFromUI = true;\n newData.discontinueQuantity.hideFromUI = true;\n }\n }\n\n newData = findAllErrors(newData);\n };\n\n const relatedProductChangedForUpdatePack = async () => {\n if (\n !data.relatedProduct ||\n fieldName !== \"relatedProduct\" ||\n propName !== \"currentValue\" ||\n areTheyEqual(newDataObj, data.relatedProduct.currentValue)\n ) {\n return;\n }\n\n let inComingValues = await FetchAPI({\n showErrorLogsOnConsole: showErrorLogsOnConsole,\n history: history,\n apiShortName: \"callAMPP\",\n token: userState.accessToken,\n apiNeeds: {\n companyId: userState.selectedCompany?.id,\n ampId: newDataObj.value,\n },\n setIsLoading: (boo) => {\n setIsLoading(boo);\n },\n });\n\n let newPackObj = [];\n\n inComingValues.data.forEach((item) => {\n newPackObj.push({\n value: item.id,\n label: item.name,\n });\n });\n\n newData.relatedPack.optionValue = newPackObj;\n newData.relatedPack.currentValue = undefined;\n\n newSettings.internalState = 2;\n setIsLoading(false);\n };\n const relatedPackChanged = async () => {\n if (\n !data.relatedPack ||\n fieldName !== \"relatedPack\" ||\n propName !== \"currentValue\" ||\n areTheyEqual(newDataObj, data.relatedPack.currentValue)\n ) {\n return;\n }\n\n let inComingValues = await FetchAPI({\n showErrorLogsOnConsole: showErrorLogsOnConsole,\n history: history,\n apiShortName: \"callAMPP_idSearch\",\n token: userState.accessToken,\n apiNeeds: {\n value: newDataObj.value,\n },\n setIsLoading: (boo) => {\n setIsLoading(boo);\n },\n });\n\n let nhsConverter = convertNhsFormToCurrentValue(newData, inComingValues);\n\n newData = _.cloneDeep(nhsConverter.data);\n newSettings.inComingPack = _.cloneDeep(nhsConverter.onlyChanged);\n\n newData = findAllErrors(newData);\n newSettings.internalState = 3;\n setIsLoading(false);\n };\n const massPriceUpdateChanged = () => {\n const noOfUpdatedPrice = newData.prices.currentValue.filter(item => item.newPrice > 0).length;\n newSettings.isThereAnyChange = noOfUpdatedPrice > 0;\n };\n\n switch (currentSubmissionType) {\n case \"NewProduct\":\n toggleSaveIngredientButton();\n toggleSavePackButton();\n break;\n case \"UpdateProduct\":\n await relatedProductChanged();\n discontinueProductChanged();\n toggleSavePackButton();\n break;\n case \"UpdatePack\":\n await relatedProductChangedForUpdatePack();\n await relatedPackChanged();\n discontinuePackChanged();\n break;\n case \"MassPriceUpdate\":\n massPriceUpdateChanged();\n break;\n default:\n break;\n }\n\n setData(newData);\n setSettings(newSettings);\n };\n const silentUpdateData = (fieldName, newDataObj, propName = \"currentValue\") => {\n if (!data) {\n return;\n }\n\n let currentValue = data[fieldName][propName];\n if (!areTheyEqual(currentValue, newDataObj)) {\n setData({\n ...data,\n [fieldName]: {\n ...data[fieldName],\n [propName]: newDataObj,\n },\n });\n }\n };\n\n /**\n * UPDATE HEADER TITLE\n */\n useLayoutEffect(() => {\n if (!data || !settings) {\n return;\n }\n\n let newHeaderTitle = \"\";\n\n if (settings.submissionType === \"NewProduct\" && data.name?.currentValue) {\n newHeaderTitle = data.name.currentValue;\n } else if (\n (settings.submissionType === \"NewPack\" || settings.submissionType === \"UpdatePack\") &&\n data.relatedProduct?.currentValue?.label &&\n data.quantity?.currentValue?.unit?.label\n ) {\n newHeaderTitle =\n data.relatedProduct.currentValue.label +\n \" \" +\n data.quantity.currentValue.input +\n \" \" +\n data.quantity.currentValue.unit.label;\n } else if (\n settings.submissionType === \"UpdateProduct\" &&\n data.relatedProduct?.currentValue?.label\n ) {\n newHeaderTitle = data.relatedProduct.currentValue.label;\n } else if (\n settings.submissionType === \"MassPriceUpdate\" &&\n data.prices?.currentValue?.length\n ) {\n const prices = data.prices?.currentValue || [];\n const count = prices.filter((item) => item.newPrice !== undefined && item.newPrice > 0).length;\n\n newHeaderTitle = `${count} Prices Updated`;\n } else {\n newHeaderTitle = settings.name;\n }\n\n if (setHeaderTitles.productName !== newHeaderTitle) {\n setHeaderTitles((prev) => ({\n ...prev,\n productName: newHeaderTitle,\n }));\n }\n }, [data, settings?.submissionType]);\n\n /**\n * DEFINE SECTIONS for ANCHOR POINTS\n */\n useLayoutEffect(() => {\n if (!data) {\n return;\n }\n let newSections = [];\n\n Object.keys(data).forEach((item) => {\n if (data[item].isASection) {\n newSections.push(item);\n }\n });\n setSections(newSections);\n }, [data]);\n\n /**\n * SCROLL TO ERROR FIELD\n */\n const errorFieldNameClicked = (fieldName) => {\n let element = document.getElementById(fieldName);\n window.scrollTo(0, element.offsetTop + 75);\n };\n\n /**\n * ON EXTERNAL CLICKS CALLBACK\n */\n const onExternalClick = (callBack, additionalData) => {\n if (callBack) {\n callBack(\n {\n data: data,\n setData: setData,\n updateData: updateData,\n silentUpdateData: silentUpdateData,\n settings: settings,\n setSettings: setSettings,\n findError: findError,\n },\n additionalData,\n );\n }\n };\n\n /**\n * USE CONSOL to SEE DATA or SETTINGS for DEVELOPMENT\n */\n if (!process.env.NODE_ENV || process.env.NODE_ENV === \"development\" || showErrorLogsOnConsole) {\n window.data = data;\n window.settings = settings;\n }\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n if (!data || !settings || isLoading) {\n return null;\n }\n\n return (\n
    \n {/* SUMMARY SECTION FOR VIEW and EDIT ACTIONS */}\n {settings.action === \"view\" ? (\n \n \n \n \n \n ) : null}\n {/* Displaying the Freeform Message */}\n {(settings.status === \"Confirmed\" || settings.status === \"Rejected\") ? ( \n \n \n \n \n ) : null}\n\n {/* NHSs MESSAGE FOR FURTHER STEPS, WILL BE PLACED HERE */}\n\n {/* PRINT ALL FORM FIELDS */}\n {!data\n ? null\n : Object.entries(data).map(([key, item]) => {\n if (\n item.hideFromUI ||\n (settings.action !== \"view\" &&\n (item.internalState || 1) > (settings?.internalState || 1))\n ) {\n return null;\n }\n return (\n {\n onExternalClick(data[key].onClick);\n }}\n removeButtonForIngsAndPacks={(additionalData) => {\n onExternalClick(\n data[key].removeButtonForIngsAndPacks,\n additionalData,\n );\n }}\n onChange={(additionalData) => { \n onExternalClick(data[key].onChange, additionalData); \n }}\n />\n );\n })}\n\n {/* USER ACTIONS */}\n {\n errorFieldNameClicked(error);\n }}\n convertCurrentValueToSavedValue={convertCurrentValueToSavedValue}\n />\n\n
    \n
    \n );\n};\n","import React from \"react\";\nimport { useLayoutEffect, useContext } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\n\nexport const About = (props) => {\n const thisPageName = \"aboutPage\";\n const {\n pageName,\n setPageName,\n setSidebarBehavior,\n disableIsLoadingWithDelay,\n setIsLoading,\n } = useContext(GlobalContext);\n\n /**\n * SET PAGE NAME and SIDEBAR BEHAVIOUR IN MOUNT AND REMOVE ISLOADING\n * @description sets pageName and sidebarBehaviour in globalStore\n */\n useLayoutEffect(() => {\n setIsLoading(true);\n setPageName(thisPageName);\n setSidebarBehavior({ position: \"narrow\", content: \"about\" });\n disableIsLoadingWithDelay();\n }, [pageName]);\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n return (\n
    \n
    About emc in demand
    \n\n
    \n

    \n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed\n do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. In dictum non consectetur a erat nam at lectus urna.\n Molestie a iaculis at erat pellentesque adipiscing commodo\n elit at. Rhoncus mattis rhoncus urna neque viverra justo nec\n ultrices. Pellentesque eu tincidunt tortor aliquam nulla.\n Morbi leo urna molestie at elementum. Quis hendrerit dolor\n magna eget est lorem.\n

    \n\n

    \n Hac habitasse platea dictumst quisque sagittis purus sit\n amet. Lectus magna fringilla urna porttitor rhoncus dolor\n purus. Orci a scelerisque purus semper eget. Velit egestas\n dui id ornare arcu. Venenatis urna cursus eget nunc\n scelerisque viverra mauris in. Sodales neque sodales ut\n etiam sit amet nisl. Vitae semper quis lectus nulla at\n volutpat diam ut. Facilisi etiam dignissim diam quis enim\n lobortis scelerisque fermentum dui. In hendrerit gravida\n rutrum quisque non. Est ullamcorper eget nulla facilisi\n etiam. Massa tincidunt dui ut ornare lectus sit amet est\n placerat.\n

    \n
    \n\n
    Legal
    \n\n
    \n

    \n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed\n do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. In dictum non consectetur a erat nam at lectus urna.\n Molestie a iaculis at erat pellentesque adipiscing commodo\n elit at. Rhoncus mattis rhoncus urna neque viverra justo nec\n ultrices. Pellentesque eu tincidunt tortor aliquam nulla.\n Morbi leo urna molestie at elementum. Quis hendrerit dolor\n magna eget est lorem.\n

    \n\n

    \n Hac habitasse platea dictumst quisque sagittis purus sit\n amet. Lectus magna fringilla urna porttitor rhoncus dolor\n purus. Orci a scelerisque purus semper eget. Velit egestas\n dui id ornare arcu. Venenatis urna cursus eget nunc\n scelerisque viverra mauris in. Sodales neque sodales ut\n etiam sit amet nisl. Vitae semper quis lectus nulla at\n volutpat diam ut. Facilisi etiam dignissim diam quis enim\n lobortis scelerisque fermentum dui. In hendrerit gravida\n rutrum quisque non. Est ullamcorper eget nulla facilisi\n etiam. Massa tincidunt dui ut ornare lectus sit amet est\n placerat.\n

    \n
    \n
    \n );\n};\n","import React from \"react\";\nimport { useLayoutEffect, useContext } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport { Button } from \"components/FormElements/Button/Button.js\";\nimport \"./ErrorPages.scss\";\n\nexport const ErrorPages = (props) => {\n const type = String(\n props?.type ? props.type : props?.match?.params?.type ? props.match.params.type : \"unknown\",\n );\n const {\n pageName,\n setPageName,\n setSidebarBehavior,\n goToHome,\n setIsLoading,\n disableIsLoadingWithDelay,\n } = useContext(GlobalContext);\n const history = useHistory();\n const thisPageName = \"errorPage\";\n\n /**\n * SET PAGE NAME and SIDEBAR BEHAVIOUR IN MOUNT AND REMOVE ISLOADING\n * @description sets pageName and sidebarBehaviour in globalStore\n */\n useLayoutEffect(() => {\n setIsLoading(true);\n setPageName(thisPageName);\n setSidebarBehavior({ position: \"noSidebar\", content: \"hide\" });\n disableIsLoadingWithDelay();\n history.replace(\"/error/\" + type);\n }, [pageName]);\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n return (\n
    \n {\n goToHome();\n }}\n />\n\n
    Sorry to say, but...
    \n
    \n {type === \"403\" ? (\n
    \n You do not have access to the page you have requested.\n
    \n Please contact Datapharm.\n
    \n ) : type === \"404\" ? (\n
    We could not locate the requested page
    \n ) : type === \"500\" ? (\n
    \n There is something wrong.\n
    \n Please contact Datapharm.\n
    \n ) : type === \"noPermissions\" ? (\n
    \n You have insufficient permissions to access emc med data dm+d.\n
    \n
    \n Please contact the service desk at servicedesk@datapharm.com\n
    \n or call us on 01372 371 44\n
    \n ) : (\n
    \n There is something wrong.\n
    \n Please try again or contact your admin.\n
    \n )}\n
    \n {type !== \"noPermissions\" && `Error: ${type}`}\n
    \n
    \n\n {type === \"403\" || type === \"noPermissions\" ? (\n history.push(\"/logout\")}\n additionalStyle={{}}\n />\n ) : (\n {\n goToHome();\n }}\n additionalStyle={{}}\n />\n )}\n
    \n );\n};\n","import React, { useLayoutEffect, useContext, useState } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport { UserContext } from \"contexts/UserStore.js\";\nimport { Button } from \"components/FormElements/Button/Button.js\";\nimport \"./LoggedOut.scss\";\n\nexport const LoggedOut = (props) => {\n const {\n pageName,\n setPageName,\n setSidebarBehavior,\n setIsLoading,\n disableIsLoadingWithDelay,\n } = useContext(GlobalContext);\n const { login } = useContext(UserContext);\n const thisPageName = \"logoutPage\";\n\n /**\n * SET PAGE NAME and SIDEBAR BEHAVIOUR\n * @description sets pageName and sidebarBehaviour in globalStore\n */\n useLayoutEffect(() => {\n setIsLoading(true);\n setPageName(thisPageName);\n setSidebarBehavior({ position: \"noSidebar\", content: \"hide\" });\n disableIsLoadingWithDelay();\n }, [pageName]);\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n return (\n
    \n {\n login();\n }}\n />\n\n
    You have been logged out.
    \n
    Thank you for using emc med data dm+d. See you soon.
    \n
    \n {\n login();\n }}\n additionalStyle={{}}\n />\n
    \n );\n};\n","import React, { useContext } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport { useHistory } from \"react-router-dom\";\nimport \"./MobileMenu.scss\";\n\nexport const MobileMenu = (props) => {\n const { setSidebarBehavior, pageName } = useContext(GlobalContext);\n let history = useHistory();\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n if (pageName === \"errorPage\") {\n return null;\n }\n\n return (\n
    \n {\n history.push(\"/\");\n }}\n />\n {\n setSidebarBehavior({ position: \"mobile\", content: \"none\" });\n }}\n />\n
    \n );\n};\n","import React, { useContext } from \"react\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport { Card } from \"../Card/Card.js\";\nimport \"./CardsForListing.scss\";\n\nexport const CardsForListing = (props) => {\n const { filteredSubmissions, clientTop, currentPage } = props;\n const { convertDateForScreen } = useContext(GlobalContext);\n\n /**\n * HANDLE GO TO TOP\n * @description Goes to top of the page smoothly.\n */\n const handleGoToTop = () => {\n window.scrollTo({ top: 0, left: 0, behavior: \"smooth\" });\n };\n /**\n * HANDLE GO TO BOTTOM\n * @description Goes to bottom of the page smoothly.\n */\n const handleGoToBottom = () => {\n window.scrollTo({\n top: document.body.scrollHeight,\n left: 0,\n behavior: \"smooth\",\n });\n };\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n\n return (\n
    \n {!filteredSubmissions\n ? null\n : filteredSubmissions.map((item, key) => {\n if (key > clientTop * currentPage - 1) {\n return null;\n }\n return (\n \n {clientTop && key % clientTop === 0 ? (\n
    \n {filteredSubmissions.length <= currentPage * clientTop ? (\n
    \n {\" \"}\n {filteredSubmissions.length}{\" \"}\n {filteredSubmissions.length > 1 ? \"items\" : \"item\"}\n
    \n ) : (\n
    \n Items {key === 0 ? 1 : key} -{\" \"}\n {key + clientTop > filteredSubmissions.length\n ? filteredSubmissions.length\n : key + clientTop}{\" \"}\n of {filteredSubmissions.length}\n
    \n )}\n
    \n {key === 0 ? null : (\n \n {\n handleGoToTop();\n }}\n >\n Go Top\n
    {\" \"}\n -{\" \"}\n \n )}\n {filteredSubmissions.length <=\n currentPage * clientTop ? null : (\n {\n handleGoToBottom();\n }}\n >\n Go Bottom\n
    \n )}\n
    \n \n ) : null}\n\n \n \n );\n })}\n \n );\n};\n","import React, { useLayoutEffect, useContext, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { FetchAPI } from \"components/APIConnections/APIConnections.js\";\nimport { GlobalContext } from \"contexts/GlobalStore.js\";\nimport { UserContext } from \"contexts/UserStore.js\";\nimport { ClientContext } from \"contexts/ClientStore.js\";\nimport { CardsForListing } from \"components/CardsForListing/CardsForListing.js\";\nimport { Button } from \"components/FormElements/Button/Button.js\";\nimport \"./List.scss\";\n\nexport const List = (props) => {\n const { location } = props;\n const {\n pageName,\n setPageName,\n setSidebarBehavior,\n disableIsLoadingWithDelay,\n setIsLoading,\n setHeaderTitles,\n showErrorLogsOnConsole,\n } = useContext(GlobalContext);\n const { userState } = useContext(UserContext);\n const { CS } = useContext(ClientContext);\n const thisPageName = \"listingPage\";\n let history = useHistory();\n\n const [statusArray, setStatusArray] = useState();\n const [typeArray, setTypeArray] = useState();\n const [searchValue, setSearchValue] = useState();\n const [allSubmissions, setAllSubmissions] = useState();\n const [filteredSubmissions, setFilteredSubmissions] = useState();\n const [currentPage, setCurrentPage] = useState(1);\n const [clientTop, setClientTop] = useState();\n const [isLoadMore, setIsLoadMore] = useState();\n\n const boxLineNumber = 4;\n\n /**\n * SET PAGE NAME and SIDEBAR BEHAVIOUR IN MOUNT AND REMOVE ISLOADING\n * @description sets pageName and sidebarBehaviour in globalStore\n */\n useLayoutEffect(() => {\n setPageName(thisPageName);\n setSidebarBehavior({ position: \"narrow\", content: \"none\" });\n }, [pageName]);\n\n /**\n * GET SEARCH PARAMATERS\n */\n useLayoutEffect(() => {\n let innerSearchParams = new URLSearchParams(location.search);\n setStatusArray(\n innerSearchParams.get(\"status\") ? innerSearchParams.get(\"status\").split(\",\") : [],\n );\n setTypeArray(innerSearchParams.get(\"type\") ? innerSearchParams.get(\"type\").split(\",\") : []);\n setSearchValue(innerSearchParams.get(\"search\") || null);\n }, [location]);\n\n /**\n * UPDATE HEADER TITLE\n */\n useLayoutEffect(() => {\n if ((!allSubmissions, !filteredSubmissions)) {\n return;\n }\n\n let headerTitle = \"\";\n let greyTitle = \"\";\n\n if (allSubmissions.length === filteredSubmissions.length) {\n headerTitle = \"All Submissions\";\n greyTitle = \"\";\n } else if (statusArray && statusArray.length > 0) {\n headerTitle = \"Status\";\n if (statusArray.length < 3) {\n greyTitle = statusArray.join(\", \");\n } else {\n greyTitle =\n statusArray[0] +\n \", \" +\n statusArray[1] +\n \" + \" +\n (statusArray.length - 2) +\n \" more status\";\n }\n } else if (typeArray && typeArray.length > 0) {\n headerTitle = \"Type\";\n if (typeArray.length < 3) {\n greyTitle = typeArray.join(\", \");\n } else {\n greyTitle =\n typeArray[0] +\n \", \" +\n typeArray[1] +\n \" + \" +\n (typeArray.length - 2) +\n \" more type\";\n }\n } else if (searchValue && searchValue.length > 0) {\n headerTitle = \"Search\";\n greyTitle = searchValue;\n } else {\n headerTitle = \"Submissions\";\n }\n setHeaderTitles({\n submissionType: headerTitle,\n productName: greyTitle,\n });\n }, [statusArray, typeArray, searchValue, allSubmissions, filteredSubmissions]);\n\n /**\n * FETCH ALL SUBMISSIONS if allSubmissions are null\n */\n useLayoutEffect(() => {\n async function fetchData() {\n let newData = await FetchAPI({\n showErrorLogsOnConsole: showErrorLogsOnConsole,\n history: history,\n apiShortName: \"callDataForHomePage\",\n token: userState.accessToken,\n apiNeeds: {\n companyId: userState.selectedCompany?.id,\n },\n setIsLoading: (boo) => {\n setIsLoading(boo);\n },\n });\n\n setAllSubmissions(newData.data);\n }\n\n if (!allSubmissions) {\n fetchData();\n }\n }, [userState]);\n\n /**\n * FILTER DEPANDING ON status, type, search PARAMS.\n */\n useLayoutEffect(() => {\n setIsLoading(true);\n if (!allSubmissions) {\n return;\n }\n\n // modifiedBy\n // name\n // status\n // submissionId\n // type\n\n if (statusArray.length === 0 && typeArray.length === 0 && !searchValue) {\n setFilteredSubmissions(allSubmissions);\n } else {\n const newList = (allSubmissions || []).filter((option) => {\n return (\n String(option.modifiedBy)\n .toLowerCase()\n .includes(String(searchValue).toLowerCase()) ||\n String(option.name).toLowerCase().includes(String(searchValue).toLowerCase()) ||\n String(option.submissionId).includes(String(searchValue).toLowerCase()) ||\n statusArray.indexOf(option.status) > -1 ||\n typeArray.indexOf(option.type) > -1\n );\n });\n setFilteredSubmissions(newList);\n }\n\n disableIsLoadingWithDelay();\n }, [allSubmissions, statusArray, typeArray, searchValue]);\n\n /**\n * DEFINE PAGE HOW MANY CARDS WILL BE SHOWN IN A PAGE\n * @description responsive value for clientTop\n */\n useLayoutEffect(() => {\n const calculateClientTop = () => {\n return CS.WINW > 1300\n ? 4 * boxLineNumber\n : CS.WINW > 1000\n ? 3 * boxLineNumber\n : CS.WINW > 700\n ? 2 * boxLineNumber\n : 1 * boxLineNumber;\n };\n setClientTop(calculateClientTop());\n }, [CS.WINW]);\n\n /**\n * HANDLE GO TO TOP\n * @description Goes to top of the page smoothly.\n */\n const handleGoToTop = () => {\n window.scrollTo({ top: 0, left: 0, behavior: \"smooth\" });\n };\n\n /**\n * HANDLE LOAD MORE BUTTON & SCROLL DOWN PAGE AUTOMATICLY\n * @description if user press Load More Button, this function will be triggered.\n */\n const handleLoadMore = () => {\n setCurrentPage(currentPage + 1);\n };\n useLayoutEffect(() => {\n setIsLoadMore(false);\n window.scrollTo({\n top: window.pageYOffset + CS.WINH / 2,\n left: 0,\n behavior: \"smooth\",\n });\n }, [currentPage]);\n\n //-------------------------------------------------------------\n // \t\tRETURN\n //-------------------------------------------------------------\n if (!allSubmissions) {\n return null;\n } else if (!filteredSubmissions || (filteredSubmissions && filteredSubmissions.length === 0)) {\n return (\n
    \n {/* filteredContentBox will be here */}\n Sorry, we couldn't find anything...\n
    \n Please try a new search or change filter settings.\n
    \n );\n }\n\n return (\n \n {/** RENDER CARDS */}\n \n\n {/** LOAD MORE */}\n {filteredSubmissions && filteredSubmissions.length > currentPage * clientTop ? (\n isLoadMore ? (\n
    Loading...
    \n ) : (\n
    \n
    {filteredSubmissions.length - currentPage * clientTop} more items
    \n
    \n {\n setIsLoadMore(true);\n handleLoadMore();\n }}\n />\n
    \n {\n handleGoToTop();\n }}\n >\n Go Top\n
    \n \n )\n ) : null}\n
    \n );\n};\n","import React, { useContext } from \"react\";\nimport { Switch, Route, useHistory } from \"react-router-dom\";\n\nimport Telemetry from './Telemetry';\nimport { PrivateRoute } from \"./contexts/PrivateRoute.js\";\nimport { AuthPages } from \"./contexts/AuthPages.js\";\n\nimport { IsLoading } from \"./components/IsLoading/IsLoading.js\";\nimport { BackEmblem } from \"./components/BackEmblem/BackEmblem.js\";\nimport { Sidebar } from \"./components/Sidebar/Sidebar.js\";\nimport { Header } from \"./components/Header/Header.js\";\nimport { Home } from \"./pages/Home/Home.js\";\nimport { HandleSub } from \"./pages/HandleSub/HandleSub.js\";\nimport { About } from \"./pages/About/About.js\";\nimport { ErrorPages } from \"./pages/ErrorPages/ErrorPages.js\";\nimport { LoggedOut } from \"./pages/LoggedOut/LoggedOut.js\";\nimport { MobileMenu } from \"./components/MobileMenu/MobileMenu.js\";\nimport { List } from \"./pages/List/List.js\";\n\nimport { UserContext } from \"contexts/UserStore.js\";\n\nimport { version } from \"../package.json\";\n\nimport \"./css_app.scss\";\n\nexport const App = () => {\n\n const { userState } = useContext(UserContext);\n const history = useHistory();\n\n if (userState && userState.currentPermLevel < 1) {\n history.push(\"/logout\");\n }\n\n return (\n\n
    \n \n {version}\n
    \n {/* ISLOADING */}\n \n\n {/* BACK EMBLEM */}\n \n\n {/* SIDEBAR */}\n \n\n {/* CONTENT ZONE is STARTING */}\n
    \n {/* MOBILE HEADER WILL PLACE HERE ?!?!? */}\n \n\n {/* HEADER */}\n
    \n\n \n {/* SWITCH to PAGE CONTENT */}\n \n \n \n\n \n \n \n \n\n \n \n\n \n\n } />\n \n \n
    \n \n );\n};\n","import \"babel-polyfill\";\nimport \"core-js/features/url-search-params\";\n\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { BrowserRouter as Router } from \"react-router-dom\";\nimport * as serviceWorker from \"./serviceWorker\";\n\nimport GlobalStore from \"./contexts/GlobalStore.js\";\nimport ClientStore from \"./contexts/ClientStore.js\";\nimport UserStore from \"./contexts/UserStore.js\";\nimport { App } from \"./App\";\nimport FeatureFlagsStore from \"contexts/FeatureContext\";\nimport { AppInsightsContext } from '@microsoft/applicationinsights-react-js';\nimport { reactPlugin } from './Telemetry';\n\nReactDOM.render(\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t,\n\tdocument.getElementById(\"root\"),\n);\n\nserviceWorker.unregister();\n","module.exports = __webpack_public_path__ + \"static/media/formClose.dba9f898.svg\";"],"sourceRoot":""}