{"version":3,"sources":["data/profile.ts","utils/constants.ts","utils/format.ts","utils/api.ts","utils/domain-mapping.ts","utils/client.ts","utils/persist.ts","hooks/useToken.tsx","hooks/useOrgs.tsx","components/AppBar/styles.ts","pages/Profile/ProfileForm.tsx","components/AppBar/index.tsx","components/AppFooter/styles.ts","components/AppFooter/index.tsx","components/BackdroppedCircularProgress.tsx","components/DragAndDropZone/styles.ts","components/DragAndDropZone/index.tsx","components/CompleteTaskModal/styles.ts","components/CompleteTaskModal/index.tsx","components/EmptyContainer/styles.ts","components/EmptyContainer/index.tsx","components/EnhancedTable.tsx","components/icons/DownloadIcon.tsx","components/icons/FileIcon.tsx","components/icons/UploadIcon.tsx","components/LabeledList.tsx","components/OverflowTooltip.tsx","components/PrivateRoute.tsx","components/PublicationCard/styles.ts","components/PublicationCard/index.tsx","components/RedirectToLogin.tsx","components/StatusLabel.tsx","components/RedirectToLogout.tsx","components/InfiniteScroll.tsx","hooks/useInfiniteScroll.ts","pages/Publications.tsx","pages/styles.ts","pages/Tasks.tsx","pages/PublicationDetails/PublicationHistory/styles.ts","pages/PublicationDetails/PublicationHistory/PublicationHistory.tsx","pages/PublicationDetails/PublicationSupportingDocuments.tsx","pages/PublicationDetails/PublicationTasks.tsx","pages/PublicationDetails/PackageFiles.tsx","pages/PublicationDetails/PublicationDetails/styles.ts","pages/PublicationDetails/PublicationDetails/PublicationDetails.tsx","pages/Profile/Profile.tsx","pages/Callback.tsx","pages/PageNotFound.tsx","Router.tsx","utils/theme.ts","App.tsx","index.tsx"],"names":["sampleUserPicklistInfos","Map","picklistFieldValues","TimeZoneSidKey","defaultValue","values","label","value","mvn__PP_Pronoun__c","mvn__PP_Gender__c","CountryCode","StateCode","routes","callback","routeProps","path","login","logout","publications","exact","active","archived","tasks","open","closed","publicationDetails","profile","edit","instanceUrlOverride","URLSearchParams","window","location","search","get","REDIRECT_URI","origin","RESET_PASSWORD_PAGE","process","REACT_APP_RESET_PASSWORD_PAGE","CLIENT_ID","ENABLE_MULTIORG","INSTANCE_URL","convertFileToBase64","file","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","result","split","onabort","error","onerror","getDownloadDetails","version","downloadLabel","undefined","handleDownload","hasDownloadUrl","hasCheckoutUrl","isOffice365","checkoutType","downloadUrl","checkoutUrl","a","href","client","getDocumentDownloadUrl","handleCheckout","Api","opts","conn","resetPasswordPage","updateLoginUrl","loginUrl","oauth2","jsforce","OAuth2","clientId","redirectUri","idOrPath","startsWith","includes","index","indexOf","instanceUrl","slice","getDocumentAllDownloadUrl","authorize","code","accessToken","refreshToken","setToken","props","Connection","console","log","retUrl","encodeURIComponent","getChangePassword","getAuthorizationUrl","scope","do","info","headers","localStorage","getItem","request","method","url","response","Error","message","logoutUrl","getProfile","getProfilePicklistOptions","JEST_WORKER_ID","picklistInfos","profilePicklistOptions","timezonePicklistOptions","pronounPicklistOptions","genderPicklistOptions","countryPicklistOptions","statePicklistOptions","timezoneOption","set","pronounOption","genderOption","countryOption","stateOption","updateProfile","body","JSON","stringify","getPublication","id","getSupportingDocumentDownloadLink","publicationId","documentId","getApiVersion","apiVersionResponse","mvn__PP_Portal_API_Version__c","setItem","apiVersion","temp","mvn__PP_isActive__c","mvn__PP_Pubs_API_Version__c","getPortalSettings","portalSettingsResponse","mvn__PP_Enable_Checked_Out_Document_Download__c","list","params","appendParams","uploadContentVersion","pathOnClient","reasonForChange","PathOnClient","ReasonForChange","VersionData","mvn__PP_Source__c","mvn__PP_Pending_Parenting__c","sobject","create","closeTask","verdict","comments","uploadedFiles","taskId","revisionIds","map","filter","searchParams","Object","entries","key","toString","salesforceApiVersion","this","getInstanceConfiguration","TOKEN_KEY","ORGS_KEY","getOrgs","tokenString","parse","addOrg","newOrg","orgs","org","push","AuthContext","createContext","useToken","useContext","AuthProvider","useState","userToken","actions","getToken","token","Provider","removeItem","OrgsContext","OrgsProvider","setOrgs","length","splice","useStyles","makeStyles","theme","createStyles","root","flexGrow","backgroundColor","palette","background","paper","appBar","menuButton","marginRight","spacing","title","selectedItem","color","borderBottomWidth","borderBottomStyle","borderBottomColor","borderRadius","height","unselectedItem","komodoProfileButton","homeLink","labels","EMAIL_REGEX","margin","marginTop","marginBottom","marginLeft","ProfileForm","enqueueSnackbar","useSnackbar","editMode","setEditMode","classes","useForm","defaultValues","register","formState","handleSubmit","reset","errors","onSubmit","data","variant","createSelectOptionsFromMap","selectOption","menuItems","labelStyle","e","className","container","item","xs","sm","htmlFor","disabled","required","fullWidth","firstName","helperText","lastName","type","pattern","email","phone","street","city","state","labelId","country","postalCode","timezone","pronoun","gender","ORCIDId","style","float","size","onClick","fontWeight","textDecoration","menuOptions","paths","items","profileOptions","masterIcon","htmlColor","AppBar","history","useHistory","position","underline","src","alt","flex","MenuButton","React","anchorEl","setAnchorEl","handleClose","isPathMatch","useRouteMatch","event","currentTarget","endIcon","keepMounted","Boolean","onClose","elevation","getContentAnchorEl","anchorOrigin","vertical","horizontal","transformOrigin","menuItem","selected","paddingTop","paddingBottom","section","display","alignItems","footerText","AppFooter","useAsyncFn","doGetApiVersion","useEffect","width","hidden","textAlign","target","rel","BackdroppedCircularProgress","zIndex","role","styles","dropzoneRoot","flexDirection","justifyContent","border","cursor","uploadedFilesContainer","UploadedFile","useTheme","handleRemoveFile","handleFileUploadStateChange","useAsync","contentDocumentId","name","loading","paddingLeft","fileExtension","substring","lastIndexOf","DragAndDropZone","setUploadedFiles","onDrop","useCallback","acceptedFiles","useDropzone","multiple","getRootProps","getInputProps","isDragActive","inputRef","fileName","current","files","dt","DataTransfer","Array","from","add","uploadedFile","stroke","text","secondary","dialogPaper","maxWidth","padding","buttonsSection","cancelButton","rejectButton","borderColor","main","inputLabelRoot","fontSize","wrapper","buttonProgress","primary","top","left","CompleteTaskModal","setLoading","onTaskComplete","task","setComments","commentsError","setCommentsError","isLoadingFiles","some","getTypesRenderingOptions","showAgreeButton","showApprovalButtons","showComments","showCompleteButton","showUpload","showConsentLanguage","handleReject","handleComplete","handleApprove","buttonDisabled","subject","directions","consentLanguage","component","dangerouslySetInnerHTML","__html","onChange","newComment","placeholder","multiline","minRows","taskType","options","card","cardContent","cardIcon","cardActions","EmptyContainer","icon","action","ErrorIcon","xmlns","viewBox","fill","strokeWidth","strokeLinecap","strokeLinejoin","points","x1","y1","x2","y2","CheckIcon","d","EmptyIcon","LoginIcon","tableHead","tableHeadCell","paddingRight","borderRight","darken","tableBodyCell","tableBodyRow","default","EnhancedTable","sortFieldName","sortDirection","onSortClick","header","align","field","sortable","hideSortIcon","direction","row","DownloadIcon","labelColorByFileExtension","DOC","DOCX","XLS","XLSX","PPTX","PPT","PNG","JPG","ZIP","PDF","FileIcon","normalizedExtension","ext","alternateText","labelColor","extension","getLabelColorFromExtension","substr","toUpperCase","fontFamily","x","y","userSelect","letterSpacing","UploadIcon","whiteSpace","textOverflow","overflow","LabeledList","Fragment","tooltip","Skeleton","OverflowTooltip","textElementRef","useRef","checkOverflow","hasOverflow","scrollWidth","clientWidth","setHoverListener","addEventListener","removeEventListener","hoverListener","childElement","Children","only","children","placement","interactive","disableHoverListener","cloneElement","ref","PrivateRoute","rest","render","to","actionButton","cardTitle","cardTitleAnchor","cardText","cardDivider","PublicationCard","fullyQualifiedName","productName","documentNumber","documentType","documentSubtype","targetName","targetDate","openTaskCount","statusLabel","status","statusColor","mb","RouterLink","RedirectToLogin","blue","darkBlue","lightBlue","orange","green","red","grey","StatusLabel","classNames","RedirectToLogout","handleLogout","InfiniteScroll","hasMore","loadMoreRef","useInfiniteScroll","filters","cursorRequest","setCursorRequest","queryingMore","setQueryingMore","setError","records","setRecords","nextRecordsUrl","setNextRecordsUrl","refresh","useInView","onEnter","queryMore","observe","newCursor","existingRecords","setSortFieldName","setSortDirection","formatDirection","defaults","pageSize","PublicationItem","latestAvailableDocumentVersion","products","documentNumberLabel","documentTypeLabel","documentSubtypeLabel","md","product","join","Publications","useLocation","showActivePublications","showAllActiveCompleted","showAllArchivedCompleted","showError","showData","taskPublicationLinkText","tableHeaders","publication","apiName","dueDate","completedDate","openTaskTableHeaders","closedTaskTableHeaders","Tasks","selectedTaskToComplete","setSelectedTaskToComplete","showOpenTasks","tableData","publicationReference","typeLabel","completedDateTime","currentTableHeaders","showAllOpenTasksCompleted","showAllClosedTasksCompleted","toLowerCase","find","secondaryTail","alpha","timelineContentGrid","timelineDot","timelineItemMissingOppositeContent","timelineContentGridItem","comment","borderLeft","editIconWrapper","borderWidth","borderStyle","alignContent","flexShrink","divider","versionTitleText","revisionTitleText","uploadedFileWrapper","HistoryItem","documentVersion","revisions","TimelineItem","missingOppositeContent","TimelineSeparator","TimelineDot","TimelineConnector","TimelineContent","createdByName","versionNumber","Date","createdDate","toLocaleString","dateStyle","timeStyle","mt","changeLog","revision","RevisionItem","owner","format","documents","document","Comment","PublicationHistory","Timeline","documentCardSmallFileIcon","documentCardDownloadIndicator","right","visibility","documentCardActionArea","documentCardLargeFileIconWrapper","DocumentCard","handleOnClick","mr","opacity","PublicationSupportingDocuments","handleRequestDocument","doc","autoHideDuration","IncompleteTaskCard","isCompleteTaskButton","onCompleteTaskClick","content","CompletedTaskCard","emptyList","tasksCompleteCardContent","tasksCompleteIcon","incompleteTaskGrid","showIncompleteTasksButton","textTransform","PublicationTasks","reloadPublication","showCompleted","setShowCompleted","incompleteTasks","isOpen","completedTasks","disableRipple","in","PackageFileCard","fileType","fileSize","handleOpenIn365","formatBytes","Number","sx","maxHeight","bytes","decimals","k","dm","sizes","i","Math","floor","parseFloat","pow","toFixed","PackageFiles","packageFiles","contentDocument","FileType","FileExtension","ContentSize","Id","breadcrumbAnchor","chip","tab","minWidth","minHeight","tabsRoot","tabsFlexContainer","borderBottom","tabsIndicator","CustomTabPanel","other","DetailsTab","count","tabProps","a11yProps","PublicationDetails","match","settings","setSettings","doGetPublicationDetails","useEffectOnce","myTasks","supportingDocuments","docVersion","handleDownloadAll","zipFileString","getDownloadAllDetails","packageFile","forEach","getOpenIn365Details","packageFilesCount","showDownloadButton","showCheckoutButton","tabIndex","setTabIndex","packageFilesCheckedOutIn365Count","docCount","labeledItems","separator","_event","newValue","textColor","indicatorColor","indicator","flexContainer","TabIndicatorProps","Profile","doGetProfile","doGetProfilePicklistOptions","Callback","sfdxCommunityUrl","authError","setAuthError","then","newToken","replace","catch","PageNotFound","Router","createTheme","typography","overline","h4","h5","contrastText","overrides","MuiSelect","MuiChip","MuiCard","boxShadow","MuiButton","App","ready","setReady","URL","injectLoginUrl","ThemeProvider","maxSnack","p","pt","ReactDOM","StrictMode","getElementById"],"mappings":"0eAyBaA,GAPc,IAAIC,IAAoB,CAAC,CAAC,MAAO,SAClC,IAAIA,IAAoB,CAAC,CAAC,aAAc,gBACzC,IAAIA,IAAoB,CAAC,CAAC,OAAQ,UACjC,IAAIA,IAAoB,CAAC,CAAC,KAAM,mBAClC,IAAIA,IAAoB,CAAC,CAAC,KAAM,oBAGjB,CACrCC,oBAAqB,CACnBC,eAAgB,CACdC,aAAc,MACdC,OAAQ,CACN,CACEC,MAAO,MACPC,MAAO,SAIbC,mBAAoB,CAClBJ,aAAc,aACdC,OAAQ,CACN,CACEC,MAAO,aACPC,MAAO,gBAIbE,kBAAmB,CACjBJ,OAAQ,CACN,CACEC,MAAO,OACPC,MAAO,UAIbG,YAAa,CACXL,OAAQ,CACN,CACEC,MAAO,gBACPC,MAAO,QAIbI,UAAW,CACTN,OAAQ,CACN,CACEC,MAAO,iBACPC,MAAO,WC9DJK,EAAS,CACpBC,SAAU,CACRC,WAAY,CAAEC,KAAM,CAAC,gCAEvBC,MAAO,CACLF,WAAY,CAAEC,KAAM,CAAC,YAEvBE,OAAQ,CACNH,WAAY,CAAEC,KAAM,CAAC,aAEvBG,aAAc,CACZJ,WAAY,CAAEC,KAAM,CAAC,gBAAiB,uBAAwB,0BAA2BI,OAAO,GAChGC,OAAQ,CACNN,WAAY,CAAEC,KAAM,CAAC,uBAAwB,iBAAkBI,OAAO,IAExEE,SAAU,CACRP,WAAY,CAAEC,KAAM,CAAC,0BAA2BI,OAAO,KAG3DG,MAAO,CACLR,WAAY,CAAEC,KAAM,CAAC,WACrBQ,KAAM,CACJT,WAAY,CAAEC,KAAM,CAAC,cAAe,UAAWI,OAAO,IAExDK,OAAQ,CAAEV,WAAY,CAAEC,KAAM,CAAC,iBAAkBI,OAAO,KAE1DM,mBAAoB,CAClBX,WAAY,CAAEC,KAAM,CAAC,wDAEvBW,QAAS,CACPZ,WAAY,CAAEC,KAAM,CAAC,aACrBY,KAAM,CACJb,WAAY,CAAEC,KAAM,CAAC,gBAAiB,YAAaI,OAAO,MAK1DS,EAAsB,IAAIC,gBAAgBC,OAAOC,SAASC,QAAQC,IAAI,yBAK/DC,EAAeJ,OAAOC,SAASI,OAASvB,EAAOC,SAASC,WAAWC,KAKnEqB,EAAsBC,gXAAYC,8BAKlCC,EAAYF,wFAKZG,GAAkBH,EAKlBI,EAAeb,GAAwBS,0CCzDvCK,EAAsB,SAACC,GAAD,OACjC,IAAIC,SAAQ,SAACC,EAASC,GACpB,IAAMC,EAAS,IAAIC,WACnBD,EAAOE,cAAcN,GACrBI,EAAOG,OAAS,WACd,IAAMC,EAASJ,EAAOI,QAAWJ,EAAOI,OAAkBC,MAAM,KAAK,GACrEP,EAAQM,IAEVJ,EAAOM,QAAU,SAACC,GAAD,OAAWR,EAAOQ,IACnCP,EAAOQ,QAAU,SAACD,GAAD,OAAWR,EAAOQ,QAQ1BE,EAAqB,SAACC,GACjC,IAAKA,EACH,MAAO,CACLC,mBAAeC,EACfC,eAAgB,aAChBC,gBAAgB,EAChBC,gBAAgB,GAIpB,IAIIJ,EAJEK,EAAuC,cAAzBN,EAAQO,aACtBH,OAAyCF,IAAxBF,EAAQQ,YACzBH,OAAyCH,IAAxBF,EAAQS,YAK7BR,EADEK,EACcF,EAAiB,qBAAuB,2BAExCA,EAAiB,WAAa,uBAGhD,IAAMD,EAAc,uCAAG,4BAAAO,EAAA,uDACfF,EAAcR,EAAQQ,eAG1BnC,OAAOC,SAASqC,KAAOC,EAAOC,uBAAuBL,IAJlC,2CAAH,qDAQdM,EAAc,uCAAG,4BAAAJ,EAAA,uDACfD,EAAcT,EAAQS,eAG1BpC,OAAOC,SAASqC,KAAOF,GAJJ,2CAAH,qDAQpB,MAAO,CAAER,gBAAeE,iBAAgBW,iBAAgBV,iBAAgBC,mBCtC7DU,EAAb,aAIE,WAAYC,GAA8B,IAAD,gCAHjCC,UAGiC,OAFjCC,uBAEiC,OAkBzCC,eAAiB,SAACC,GAChB,EAAKH,KAAKI,OAAS,IAAIC,IAAQC,OAAO,CACpCH,WACAI,SAAU1C,EACV2C,YAAahD,KAtBwB,KA+BzCoC,uBAAyB,SAACa,GACxB,GAAIA,EAASC,WAAW,SAAWD,EAASE,SAAS,gBAAiB,CACpE,IAAMC,EAAQH,EAASI,QAAQ,gBAC/B,MAAM,GAAN,OAAU,EAAKb,KAAKc,aAApB,OAAkCL,EAASM,MAAMH,IAC5C,OAAIH,EAASE,SAAS,KACrB,GAAN,OAAU,EAAKX,KAAKc,aAApB,OAAkCL,GAE5B,GAAN,OAAU,EAAKT,KAAKc,YAApB,mDAA0EL,IAtCrC,KA+CzCO,0BAA4B,SAACP,GAC3B,MAAM,GAAN,OAAU,EAAKT,KAAKc,YAApB,mDAA0EL,IAhDnC,KAwDzCQ,UAxDyC,uCAwD7B,WAAOC,GAAP,SAAAzB,EAAA,sEACJ,EAAKO,KAAKiB,UAAUC,GADhB,gCAGH,CACLJ,YAAa,EAAKd,KAAKc,YACvBK,YAAa,EAAKnB,KAAKmB,YACvBC,aAAc,EAAKpB,KAAKoB,eANhB,2CAxD6B,2DAsEzCC,SAAW,SAACC,GACV,EAAKtB,KAAO,IAAIK,IAAQkB,WAAZ,2BAA4B,EAAKvB,KAAKI,QAAWkB,KAvEtB,KA6EzC/E,OA7EyC,sBA6EhC,4BAAAkD,EAAA,+EAEC,EAAKO,KAAKzD,SAFX,sDAILiF,QAAQC,IAAI,8BAAZ,MAJK,cAODC,EAASC,mBAAmB,EAAK3B,KAAKI,OAAOD,UAP5C,4BAQG,EAAKH,KAAKI,OAAOD,SARpB,oCAQwDuB,IARxD,yDA7EgC,KA4FzCE,kBAAoB,WAClB,MAAM,GAAN,OAAU,EAAK5B,KAAKI,OAAOD,SAA3B,YAAuC,EAAKF,oBA7FL,KAoGzC4B,oBAAsB,WACpB,OAAO,EAAK7B,KAAKI,OAAOyB,oBAAoB,CAAEC,MAAO,gBArGd,KA6GzCC,GA7GyC,uCA6GpC,WAAUC,GAAV,qBAAAvC,EAAA,6DAEGwC,EAAU,CAAE,iBAAkBC,aAAaC,QAAQ,eAGvDC,EADkB,kBAATJ,EACC,CAAEC,UAASI,OAAQ,MAAOC,IAAK,EAAKtC,KAAKc,YAAckB,GAE1D,2BAAQA,GAAR,IAAcC,UAASK,IAAK,EAAKtC,KAAKc,YAAckB,EAAKM,MAP/D,kBAWsB,EAAKtC,KAAKoC,QAAWA,GAX3C,cAWKG,EAXL,yBAYMA,GAZN,qCAcG,gBAAiBC,OAA2B,oBAAlB,KAAMC,SAdnC,8CAgBU,gBAAiBD,OAA2B,+BAAlB,KAAMC,SAhB1C,wBAiBCjB,QAAQC,IAAI,0DACZW,EAAU,CAAEH,UAASI,OAAQ,MAAOC,IAAK,EAAKtC,KAAKc,YAAckB,GAC3DU,EAnBP,UAmBsB,EAAK1C,KAAKI,OAAOD,SAnBvC,oCAmB2EwB,mBACxE,EAAK3B,KAAKI,OAAOD,WAEnBiC,EAAQE,IAAMI,EAtBf,UAuBc,EAAK1C,KAAKoC,QAAWA,GAvBnC,qHA7GoC,2DA8IzCO,WA9IyC,sBA8I5B,sBAAAlD,EAAA,oHAGJ,EAAKsC,GAHD,mFA9I4B,KAoJzCa,0BApJyC,sBAoJb,8DAAAnD,EAAA,yDACO,qBAC3B6C,EAAM,yFAGyCrD,IAA/BtB,gXAAYkF,gBALR,qBAOrBvH,EAPqB,uCAQhB,EAAKyG,GAAwBO,GARb,2BAMpBQ,EANoB,KAStBC,EAAoD,CACtDC,wBAAyB,IAAIzH,IAC7B0H,uBAAwB,IAAI1H,IAC5B2H,sBAAuB,IAAI3H,IAC3B4H,uBAAwB,IAAI5H,IAC5B6H,qBAAsB,IAAI7H,KAdF,cAgBCuH,EAActH,oBAAoBC,eAAeE,QAhBlD,IAgB1B,2BAAS0H,EAA2E,QAClFN,EAAuBC,wBAAwBM,IAAID,EAAexH,MAAOwH,EAAezH,OAjBhE,4CAmBAkH,EAActH,oBAAoBM,mBAAmBH,QAnBrD,IAmB1B,2BAAS4H,EAA8E,QACrFR,EAAuBE,uBAAuBK,IAAIC,EAAc1H,MAAO0H,EAAc3H,OApB7D,4CAsBDkH,EAActH,oBAAoBO,kBAAkBJ,QAtBnD,IAsB1B,2BAAS6H,EAA4E,QACnFT,EAAuBG,sBAAsBI,IAAIE,EAAa3H,MAAO2H,EAAa5H,OAvB1D,4CAyBAkH,EAActH,oBAAoBQ,YAAYL,QAzB9C,IAyB1B,2BAAS8H,EAAuE,QAC9EV,EAAuBI,uBAAuBG,IAAIG,EAAc5H,MAAO4H,EAAc7H,OA1B7D,4CA4BFkH,EAActH,oBAAoBS,UAAUN,QA5B1C,IA4B1B,2BAAS+H,EAAmE,QAC1EX,EAAuBK,qBAAqBE,IAAII,EAAY7H,MAAO6H,EAAY9H,OA7BvD,uDA+BnBmH,GA/BmB,4CApJa,KA2LzCY,cA3LyC,uCA2LzB,WAAOvB,GAAP,eAAA3C,EAAA,kGAERmE,EAAOC,KAAKC,UAAU1B,GAFd,kBAIP,EAAKL,GAA0B,CAAEM,OAAQ,OAAQC,IAJ1C,sCAI+CsB,UAJ/C,2CA3LyB,2DAuMzCG,eAvMyC,uCAuMxB,WAAOhE,GAAP,eAAAN,EAAA,6DACT6C,EADS,mDACyCX,mBAAmB5B,EAAKiE,KADjE,kBAER,EAAKjC,GAA8BO,IAF3B,2CAvMwB,2DAiNzC2B,kCAjNyC,uCAiNL,WAAOlE,GAAP,mBAAAN,EAAA,6DAC5ByE,EAAgBvC,mBAAmB5B,EAAKmE,eACxCC,EAAaxC,mBAAmB5B,EAAKoE,YACrC7B,EAH4B,mDAGsB4B,EAHtB,gCAG2DC,EAH3D,sCAK3B,EAAKpC,GAA2C,CAAEM,OAAQ,OAAQC,MAAKsB,KAAM,MALlD,2CAjNK,2DA6NzCQ,cA7NyC,sBA6NzB,gCAAA3E,EAAA,yDACTyC,aAAaC,QAAQ,cADZ,gEAGNkC,EAAqB,EAAKtC,GAHpB,gDAIZG,aAJY,SAI8BmC,EAJ9B,0BAIkDC,8BAJlD,KAICC,QAJD,UAIS,aAJT,wBAKLF,GALK,cAQRG,EAAatC,aAAaC,QAAQ,cAClCsC,EAA2B,CAC/BC,qBAAqB,EACrBJ,8BAA+BE,EAC/BG,4BAA6BH,GAZjB,kBAcPC,GAdO,4CA7NyB,KAkPzCG,kBAlPyC,sBAkPrB,4BAAAnF,EAAA,0GAEZoF,EAAyB,EAAK9C,GAFlB,oDAKlBG,aALkB,KAOhB2B,KAPgB,SAOMgB,EAPN,0BAO8BC,gDAP9B,UAOXhB,UAPW,qBAKLS,QALK,UAMhB,mCANgB,wBASXM,GATW,4CAlPqB,KAoQzCE,KApQyC,uCAoQlC,WAAU1I,EAAc2I,GAAxB,eAAAvF,EAAA,6DACD6C,EADC,sCACoCjG,GADpC,OAC2C,EAAK4I,aAAaD,IAD7D,kBAGE,EAAKjD,GAAGO,IAHV,2CApQkC,6DA+QzC4C,qBA/QyC,uCA+QlB,WAAOnF,GAAP,iBAAAN,EAAA,kEAELM,EAAKoF,aAFA,eAGFpF,EAAKqF,uBAHH,QAGsB,GAHtB,SAIApH,EAAoB+B,EAAK9B,MAJzB,0BACf+G,EADe,CAEnBK,aAFmB,KAGnBC,gBAHmB,KAInBC,YAJmB,KAKnBC,kBAAmB,sBACnBC,8BAA8B,GANX,kBASd,EAAKzF,KAAK0F,QAAQ,kBAAkBC,OAAOX,IAT7B,2CA/QkB,2DAgSzCY,UAhSyC,uCAgS7B,WAAO7F,GAAP,6BAAAN,EAAA,6DACFuE,EAAyCjE,EAAzCiE,GAAI6B,EAAqC9F,EAArC8F,QAASC,EAA4B/F,EAA5B+F,SAAUC,EAAkBhG,EAAlBgG,cACzBC,EAASrE,mBAAmBqC,GAC5B1B,EAHI,4CAGuC0D,EAHvC,cAKJC,EAAcF,GAAiBA,EAAcG,KAAI,SAACjI,GAAD,uBAAUA,EAAKpC,aAAf,aAAU,EAAYmI,MAAImC,QAAO,SAACnC,GAAD,QAAwBA,KAE1GJ,EAAOC,KAAKC,UAAU,CAAE+B,UAASC,WAAUG,gBAPvC,kBASH,EAAKlE,GAAgC,CAAEM,OAAQ,OAAQC,MAAKsB,UATzD,2CAhS6B,2DAiTjCqB,aAAe,SAACD,GACtB,IAAKA,EACH,MAAO,GAKT,IAFA,IAAMoB,EAAe,IAAIjJ,gBAEzB,MAA2BkJ,OAAOC,QAAQtB,GAA1C,eAAmD,CAA9C,0BAAOuB,EAAP,KAAY1K,EAAZ,KACHuK,EAAa9C,IAAIiD,EAAK1K,GAGxB,MAAO,IAAMuK,EAAaI,YA3T1B,IACEjG,EAMER,EANFQ,SADF,EAOIR,EALF0G,4BAFF,MAEyB,OAFzB,EAGEtG,EAIEJ,EAJFI,SACAK,EAGET,EAHFS,YACAM,EAEEf,EAFFe,YALF,EAOIf,EADFE,yBANF,MAMsB,mBANtB,EASAyG,KAAK1G,KAAO,IAAIK,IAAQkB,WAAW,CAAEpB,WAAUpB,QAAS0H,EAAsBlG,WAAUC,cAAaM,gBACrG4F,KAAKzG,kBAAoBA,KCzBhB0G,EAA2B,WAKtC,MAAO,CAAEpG,SAJQ1C,wFAIEsC,SAHCpC,EAGS+C,YAHT/C,ICbT4B,EAAS,IAAIG,EAAJ,2BACjB6G,KADiB,IAEpBnG,YAAahD,EACbyC,kBAAmBvC,KCDfkJ,EAAY,QACZC,EAAW,OA4BJC,EAAU,WACrB,IAAMC,EAAc7E,aAAaC,QAAQ0E,GACzC,OAAQhD,KAAKmD,MAAMD,IAA+C,IAOvDE,EAAS,SAACC,GACrB,IAAIC,EAAOL,IAAUX,QAAO,SAACiB,GAAD,OAASA,EAAIjH,WAAa+G,EAAO/G,YAC7DgH,EAAKE,KAAKH,GAEVhF,aAAaqC,QAAQsC,EAAUhD,KAAKC,UAAUqD,K,OC1C1CG,EAAcC,6BAActI,GAErBuI,EAAW,kBAAMC,qBAAWH,IAuB1BI,EArBM,SAACpG,GACpB,IAUA,EAA0BqG,mBAVT,WACf,IAAMC,EDcc,WACtB,IAAMb,EAAc7E,aAAaC,QAAQyE,GACzC,OAAO/C,KAAKmD,MAAMD,GChBEc,GAMlB,OAJID,GACFjI,EAAO0B,SAAP,2BAAqBsF,KAA+BiB,IAG/CA,EAGqDE,IAA9D,mBAAOC,EAAP,KAAc1G,EAAd,KAOA,OAAO,cAACiG,EAAYU,SAAb,aAAsBnM,MAAO,CAACkM,EALnB,SAACH,IDVG,SAACA,GACnBA,EACF1F,aAAaqC,QAAQqC,EAAW/C,KAAKC,UAAU8D,IAE/C1F,aAAa+F,WAAWrB,GCOxBiB,CAAiBD,GACjBvG,EAASuG,MAGiDtG,KCtBjD4G,EAAcX,wBAA+B,CAAC,GAAI,aAAU,eAuC1DY,GApBM,SAAC7G,GACpB,IAAMwF,EAAU,WACd,OAAOe,KAGT,EAAwBF,mBAAqCb,KAA7D,mBAAOK,EAAP,KAAaiB,EAAb,KAYA,OAAO,cAACF,EAAYF,SAAb,aAAsBnM,MAAO,CAACsL,EAVtB,SAACC,GACdS,EAAeT,GACfgB,EAAQtB,MAGQ,SAACP,IFkBI,SAACA,GACxB,IAAMY,EAAOL,IAEb,GAAIP,GAAOY,EAAKkB,OACd,MAAM7F,MAAM,gCAGd2E,EAAKmB,OAAO/B,EAAK,GACjBrE,aAAaqC,QAAQsC,EAAUhD,KAAKC,UAAUqD,IEzB5CU,CAAkBtB,GAClB6B,EAAQtB,QAGyDxF,K,oBCxCxDiH,GAAYC,cAAW,SAACC,GAAD,OAClCC,aAAa,CACXC,KAAM,CACJC,SAAU,EACVC,gBAAiBJ,EAAMK,QAAQC,WAAWC,OAE5CC,OAAQ,CACNJ,gBAAiBJ,EAAMK,QAAQC,WAAWC,OAE5CE,WAAY,CACVC,YAAaV,EAAMW,QAAQ,IAE7BC,MAAO,CACLT,SAAU,GAEZU,aAAc,CACZC,MAAO,UACPC,kBAAmB,EACnBC,kBAAmB,QACnBC,kBAAmB,UACnBC,aAAc,EACdC,OAAQ,IAEVC,eAAgB,CACdN,MAAO,UACPK,OAAQ,IAEVE,oBAAqB,CACnBP,MAAO,UACPC,kBAAmB,EACnBC,kBAAmB,QACnBC,kBAAmB,UACnBC,aAAc,EACdC,OAAQ,IAEVG,SAAU,CACRZ,YAAaV,EAAMW,QAAQ,S,0MC9BpBY,GACI,0BADJA,GAEG,kCAGVC,GAAc,4CACd1B,GAAYC,cAAW,SAACC,GAAD,OAC3BC,aAAa,CACXC,KAAM,CACJuB,OAAQzB,EAAMW,QAAQ,IAExBvB,QAAS,CACP,QAAS,CACPsC,UAAW1B,EAAMW,QAAQ,GACzBgB,aAAc3B,EAAMW,QAAQ,GAC5BiB,WAAY5B,EAAMW,QAAQ,UAWrBkB,GAAc,SAAChJ,GAA6B,IAAD,0BAC9CiJ,EAAoBC,cAApBD,gBACR,EAAgC5C,oBAAkB,GAAlD,mBAAO8C,EAAP,KAAiBC,EAAjB,KACMC,EAAUpC,KAChB,EAAqDqC,aAA4B,CAC/EC,cAAevJ,EAAMuJ,gBADfC,EAAR,EAAQA,SAAUC,EAAlB,EAAkBA,UAAWC,EAA7B,EAA6BA,aAAcC,EAA3C,EAA2CA,MAGnCC,EAAWH,EAAXG,OAEFC,EAAQ,uCAAG,WAAOC,GAAP,SAAA3L,EAAA,+EAEPE,EAAOgE,cAAcyH,GAFd,OAGbb,EAAgB,4BAA6B,CAAEc,QAAS,YACxDX,GAAY,GAJC,gDAMT,gBAAW/J,SAAS,6BACtB4J,EAAgB,mHAEd,CAAEc,QAAS,UAGbd,EAAgB,+CAAD,aAAyD,CAAEc,QAAS,UAZxE,yDAAH,sDAuBRC,EAA6B,SAACC,GAClC,IADwE,EACpEC,EAAY,GADwD,cAE/CD,GAF+C,IAExE,2BAAuC,CAAC,IAAD,yBAA7BhF,EAA6B,KAAxB1K,EAAwB,KACrC2P,EAAUnE,KAAK,mBAAUxL,MAAO0K,EAAjB,SAAuB1K,MAHgC,8BAKxE,OAAO2P,GAGHC,EAAa,mDAEnB,OACE,mCACE,uBAAMN,SAAUH,EAAaG,GAlBjB,SAACO,GAAD,OAAYlK,QAAQC,IAAI,QAASiK,MAkBIC,UAAWhB,EAAQhC,KAApE,UACE,qBAAMiD,WAAS,EAACxC,QAAS,EAAzB,UACE,qBAAMyC,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAvB,UACE,oBAAYC,QAAQ,sBAAsBhI,GAAG,kBAAkBiI,UAAWxB,EAAUkB,UAAWF,EAA/F,0BAGA,4CACEzH,GAAG,sBACHqH,QAAQ,WACRa,UAAQ,EACRC,WAAS,EACT5C,MAAO,aACHuB,EAAS,YAAa,CAAEoB,SAAU,CAAErQ,OAAO,EAAM4G,QAASuH,OANhE,IAOEpL,QAASsM,EAAOkB,UAChBC,WAAU,UAAEnB,EAAOkB,iBAAT,aAAE,EAAkB3J,QAC9BwJ,UAAWxB,QAGf,qBAAMoB,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAvB,UACE,oBAAYC,QAAQ,qBAAqBhI,GAAG,iBAAiBiI,UAAWxB,EAAUkB,UAAWF,EAA7F,yBAGA,4CACEzH,GAAG,qBACHqH,QAAQ,WACRa,UAAQ,EACRC,WAAS,EACT5C,MAAO,aACHuB,EAAS,WAAY,CAAEoB,SAAU,CAAErQ,OAAO,EAAM4G,QAASuH,OAN/D,IAOEpL,QAASsM,EAAOoB,SAChBD,WAAU,UAAEnB,EAAOoB,gBAAT,aAAE,EAAiB7J,QAC7BwJ,UAAWxB,WAIjB,qBAAMmB,WAAS,EAACxC,QAAS,EAAzB,UACE,qBAAMyC,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAvB,UACE,oBACEC,QAAQ,yBACRhI,GAAG,qBACHiI,UAAWxB,EACXkB,UAAWF,EAJb,6BAQA,4CACEzH,GAAG,yBACHqH,QAAQ,WACRa,UAAQ,EACRK,KAAK,QACLJ,WAAS,EACT5C,MAAO,aACHuB,EAAS,QAAS,CACpBoB,SAAU,CAAErQ,OAAO,EAAM4G,QAASuH,IAClCwC,QAAS,CACP3Q,MAAOoO,GACPxH,QAASuH,OAXf,IAcEpL,QAASsM,EAAOuB,MAChBJ,WAAU,UAAEnB,EAAOuB,aAAT,aAAE,EAAchK,QAC1BwJ,UAAWxB,QAGf,qBAAMoB,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAvB,UACE,oBAAYC,QAAQ,kBAAkBhI,GAAG,cAAciI,UAAWxB,EAAUkB,UAAWF,EAAvF,0BAGA,4CACEzH,GAAG,kBACHqH,QAAQ,WACRkB,KAAK,QACLJ,WAAS,EACT5C,MAAO,aACHuB,EAAS,UANf,IAOElM,QAASsM,EAAOwB,MAChBL,WAAU,UAAEnB,EAAOwB,aAAT,aAAE,EAAcjK,QAC1BwJ,UAAWxB,WAIjB,qBAAMmB,WAAS,EAACxC,QAAS,EAAzB,UACE,qBAAMyC,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAvB,UACE,oBAAYC,QAAQ,mBAAmBhI,GAAG,eAAeiI,UAAWxB,EAAUkB,UAAWF,EAAzF,oBAGA,4CACEzH,GAAG,mBACHqH,QAAQ,WACRkB,KAAK,SACLJ,WAAS,EACT5C,MAAO,aACHuB,EAAS,WANf,IAOElM,QAASsM,EAAOyB,OAChBN,WAAU,UAAEnB,EAAOyB,cAAT,aAAE,EAAelK,QAC3BwJ,UAAWxB,QAGf,qBAAMoB,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAvB,UACE,oBAAYC,QAAQ,iBAAiBhI,GAAG,aAAaiI,UAAWxB,EAAUkB,UAAWF,EAArF,kBAGA,4CACEzH,GAAG,iBACHqH,QAAQ,WACRkB,KAAK,OACLJ,WAAS,EACT5C,MAAO,aACHuB,EAAS,SANf,IAOElM,QAASsM,EAAO0B,KAChBP,WAAU,UAAEnB,EAAO0B,YAAT,aAAE,EAAanK,QACzBwJ,UAAWxB,WAIjB,qBAAMmB,WAAS,EAACxC,QAAS,EAAzB,UACE,qBAAMyC,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAvB,UACE,oBAAYC,QAAQ,eAAehI,GAAG,cAAciI,UAAWxB,EAAUkB,UAAWF,EAApF,mBAGA,6CACEJ,QAAQ,WACRrH,GAAG,eACHtI,aAAc,UAAA4F,EAAMuJ,qBAAN,SAAqBgC,MAAQvL,EAAMuJ,cAAcgC,MAAQ,GACvEC,QAAQ,eACJhC,EAAS,UALf,IAMEqB,WAAS,EACTF,UAAWxB,EAPb,UASE,mBAAU5O,MAAO,GAAjB,sBACCyP,EAA2BhK,EAAMyB,uBAAuBK,6BAG7D,qBAAMyI,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAvB,UACE,oBAAYC,QAAQ,iBAAiBhI,GAAG,gBAAgBiI,UAAWxB,EAAUkB,UAAWF,EAAxF,qBAGA,6CACEJ,QAAQ,WACRrH,GAAG,iBACHtI,aAAc,UAAA4F,EAAMuJ,qBAAN,SAAqBkC,QAAUzL,EAAMuJ,cAAckC,QAAU,GAC3ED,QAAQ,iBACJhC,EAAS,YALf,IAMEqB,WAAS,EACTF,UAAWxB,EAPb,UASE,mBAAU5O,MAAO,GAAjB,sBACCyP,EAA2BhK,EAAMyB,uBAAuBI,kCAI/D,qBAAMyI,WAAS,EAACxC,QAAS,EAAzB,UACE,qBAAMyC,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAvB,UACE,oBACEC,QAAQ,uBACRhI,GAAG,mBACHiI,UAAWxB,EACXkB,UAAWF,EAJb,yBAQA,4CACEzH,GAAG,uBACHqH,QAAQ,WACRkB,KAAK,aACLJ,WAAS,EACT5C,MAAO,aACHuB,EAAS,eANf,IAOElM,QAASsM,EAAO8B,WAChBX,WAAU,UAAEnB,EAAO8B,kBAAT,aAAE,EAAmBvK,QAC/BwJ,UAAWxB,QAGf,qBAAMoB,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAvB,UACE,oBAAYC,QAAQ,kBAAkBhI,GAAG,iBAAiBiI,UAAWxB,EAAUkB,UAAWF,EAA1F,sBAGA,4CACEJ,QAAQ,WACRrH,GAAG,kBACHtI,aAAc,UAAA4F,EAAMuJ,qBAAN,SAAqBoC,SAAW3L,EAAMuJ,cAAcoC,SAAW,GAC7EH,QAAQ,kBACJhC,EAAS,aALf,IAMEmB,UAAWxB,EACX0B,WAAS,EAPX,SASGb,EAA2BhK,EAAMyB,uBAAuBC,kCAI/D,qBAAM4I,WAAS,EAACxC,QAAS,EAAzB,UACE,qBAAMyC,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAvB,UACE,oBAAYC,QAAQ,iBAAiBhI,GAAG,gBAAgBiI,UAAWxB,EAAUkB,UAAWF,EAAxF,gCAGA,6CACEJ,QAAQ,WACRrH,GAAG,iBACHtI,aAAc,UAAA4F,EAAMuJ,qBAAN,SAAqBqC,QAAU5L,EAAMuJ,cAAcqC,QAAU,GAC3EJ,QAAQ,iBACJhC,EAAS,YALf,IAMEmB,UAAWxB,EACX0B,WAAS,EAPX,UASE,mBAAUtQ,MAAO,GAAjB,sBACCyP,EAA2BhK,EAAMyB,uBAAuBE,+BAG7D,qBAAM4I,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAvB,UACE,oBAAYC,QAAQ,gBAAgBhI,GAAG,eAAeiI,UAAWxB,EAAUkB,UAAWF,EAAtF,oBAGA,6CACEJ,QAAQ,WACRrH,GAAG,gBACHtI,aAAc,UAAA4F,EAAMuJ,qBAAN,SAAqBsC,OAAS7L,EAAMuJ,cAAcsC,OAAS,GACzEL,QAAQ,gBACJhC,EAAS,WALf,IAMEmB,UAAWxB,EACX0B,WAAS,EAPX,UASE,mBAAUtQ,MAAO,GAAjB,sBACCyP,EAA2BhK,EAAMyB,uBAAuBG,iCAI/D,oBAAM0I,WAAS,EAACxC,QAAS,EAAzB,SACE,qBAAMyC,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAvB,UACE,oBAAYC,QAAQ,oBAAoBhI,GAAG,gBAAgBiI,UAAWxB,EAAUkB,UAAWF,EAA3F,sBAGA,4CACEzH,GAAG,oBACHqH,QAAQ,WACRkB,KAAK,UACLJ,WAAS,EACT5C,MAAO,aACHuB,EAAS,YANf,IAOElM,QAASsM,EAAOkC,QAChBf,WAAU,UAAEnB,EAAOkC,eAAT,aAAE,EAAgB3K,QAC5BwJ,UAAWxB,UAIjB,sBAAKkB,UAAWhB,EAAQ9C,QAASwF,MAAO,CAAEC,MAAO,SAAjD,UACE,mBACEC,KAAK,QACLC,QAvQmB,WAC3BpQ,OAAOC,SAASqC,KAAOC,EAAOiC,qBAuQtByL,MAAO,CAAEI,WAAY,OAAQC,eAAgB,YAAanE,MAAO,WAHnE,8BAOEkB,GACA,mBAAQ8C,KAAK,QAAQlC,QAAQ,WAAWmC,QAAS,kBAAM9C,GAAY,IAAnE,0BAIDD,GACC,qCACE,mBACE8C,KAAK,QACLlC,QAAQ,WACRmC,QAAS,WACPvC,IACAP,GAAY,IALhB,oBAUA,mBAAQ6C,KAAK,QAAQhE,MAAM,YAAY8B,QAAQ,YAAYkB,KAAK,SAAhE,sCClVRoB,GAAc,CAClB,CACE/R,MAAO,kBACPgS,MAAO1R,EAAOM,aAAaJ,WAAWC,KACtCwR,MAAO,CACL,CACEjS,MAAO,SACPS,KAAMH,EAAOM,aAAaE,OAAON,WAAWC,KAAK,IAEnD,CACET,MAAO,WACPS,KAAMH,EAAOM,aAAaG,SAASP,WAAWC,KAAK,MAIzD,CACET,MAAO,WACPgS,MAAO1R,EAAOU,MAAMR,WAAWC,KAC/BwR,MAAO,CACL,CAAEjS,MAAO,OAAQS,KAAMH,EAAOU,MAAMC,KAAKT,WAAWC,KAAK,IACzD,CAAET,MAAO,SAAUS,KAAMH,EAAOU,MAAME,OAAOV,WAAWC,KAAK,OAO7DyR,GAAiB,CACrB,CACElS,MAAO,GACPgS,MALyB,CAAC1R,EAAOc,QAAQZ,WAAWC,KAAK,GAAIH,EAAOK,OAAOH,WAAWC,KAAK,IAM3F0R,WAAY,mBAAeC,UAAU,YACrCH,MAAO,CACL,CACEjS,MAAO,mBACPS,KAAMH,EAAOc,QAAQZ,WAAWC,KAAK,IAEvC,CACET,MAAO,UACPS,KAAMH,EAAOK,OAAOH,WAAWC,KAAK,OAM/B4R,GAAS,WACpB,IAAMtD,EAAUpC,KAEhB,EAAgBf,IAATO,EAAP,oBACMmG,EAAUC,cAEhB,OACE,mBAAWC,SAAS,SAASzC,UAAWhB,EAAQ1B,OAAhD,SACE,4BACE,8BACE,8BACE,mBACEvJ,KAAMxD,EAAOM,aAAaE,OAAON,WAAWC,KAAK,GACjDkN,MAAO,UACP8E,UAAW,QACX1C,UAAWhB,EAAQZ,SAJrB,SAME,qBAAKuE,IAAK,eAAgBC,IAAK,qBAAsB3E,OAAO,WAGhE,qBAAKyD,MAAO,CAAEmB,KAAM,GAApB,WACKzG,GACD4F,GAAYzH,KAAI,WAA0BK,GAA1B,IAAG3K,EAAH,EAAGA,MAAOiS,EAAV,EAAUA,MAAOD,EAAjB,EAAiBA,MAAjB,OACd,cAAC,GAAD,CAEEhS,MAAOA,EACPgS,MAAOA,EACPpC,UAAWqC,EAAM3H,KAAI,SAAC2F,GAAD,MAAW,CAC9BjQ,MAAOiQ,EAAKjQ,MACZ4R,QAAS,kBAAMU,EAAQ7G,KAAKwE,EAAKxP,YAL9BkK,QAUZzI,IACEiK,GACD+F,GAAe5H,KAAI,WAAsCK,GAAtC,IAAG3K,EAAH,EAAGA,MAAOiS,EAAV,EAAUA,MAAOD,EAAjB,EAAiBA,MAAOG,EAAxB,EAAwBA,WAAxB,OACjB,cAAC,GAAD,CAEEA,WAAYA,EACZnS,MAAOA,EACPgS,MAAOA,EACPpC,UAAWqC,EAAM3H,KAAI,SAAC2F,GAAD,MAAW,CAC9BjQ,MAAOiQ,EAAKjQ,MACZ4R,QAAS,kBAAMU,EAAQ7G,KAAKwE,EAAKxP,YAN9BkK,cA8BfkI,GAAa,SAACnN,GAClB,IAAMqJ,EAAUpC,KACR3M,EAAwC0F,EAAxC1F,MAAO4P,EAAiClK,EAAjCkK,UAAWoC,EAAsBtM,EAAtBsM,MAAOG,EAAezM,EAAfyM,WACjC,EAAgCW,IAAM/G,SAA6B,MAAnE,mBAAOgH,EAAP,KAAiBC,EAAjB,KAMMC,EAAc,WAClBD,EAAY,OAGRE,IAAgBC,YAAcnB,GAEpC,OACE,qCACE,oBACEjC,UAAWmD,EAAcnE,EAAQrB,aAAeqB,EAAQd,eACxD2D,QAdc,SAACwB,GACnBJ,EAAYI,EAAMC,gBAcdC,QAAS,sBACT7B,MAAO,CAAEI,WAAY,QAJvB,UAMGM,EACAnS,KAEH,mBACE+S,SAAUA,EACVQ,aAAW,EACXtS,KAAMuS,QAAQT,GACdU,QAASR,EACTS,UAAW,EACXC,mBAAoB,KACpBC,aAAc,CAAEC,SAAU,SAAUC,WAAY,UAChDC,gBAAiB,CAAEF,SAAU,MAAOC,WAAY,UARlD,gBAUGlE,QAVH,IAUGA,OAVH,EAUGA,EAAWtF,KAAI,SAAC0J,GAAD,OACd,mBAEEC,SAAUD,EAASC,SACnBrC,QAAS,WACPoC,EAASpC,UACTqB,KALJ,SAQGe,EAAShU,OAPLgU,EAAShU,gBC9Jb2M,GAAYC,cAAW,SAACC,GAAD,OAClCC,aAAa,CACXC,KAAM,CACJI,WAAY,QACZ+G,WAAYrH,EAAMW,QAAQ,GAC1B2G,cAAetH,EAAMW,QAAQ,IAE/B4G,QAAS,CACPC,QAAS,OACTC,WAAY,SACZ,QAAS,CACP3G,MAAO,YAGX4G,WAAY,CACV5G,MAAO,gB,UCXA6G,GAAY,WACvB,IAAMzF,EAAUpC,KAChB,EAAgBf,IAATO,EAAP,oBACA,EAAsDsI,cAAW,kBAAM1Q,EAAOyE,mBAA9E,0BAAgB7B,EAAhB,EAAS1G,MAAiB+C,EAA1B,EAA0BA,MAAS0R,EAAnC,KAMA,OALAC,qBAAU,WACJxI,GACFuI,MAED,CAACvI,EAAOuI,IAET,mBAAK3E,UAAWhB,EAAQhC,KAAxB,SACE,4BACE,oBAAKgD,UAAWhB,EAAQqF,QAAxB,UACE,mBAAKrE,UAAWhB,EAAQwF,WAAYK,MAAO5R,EAAQ,MAAQ,MAA3D,uCAGEA,GAAS2D,GACT,oBAAKoJ,UAAWhB,EAAQwF,WAAYK,MAAO,MAA3C,UACGjO,EAAS+B,8BACV,sBAAKmM,QAAM,EAAX,sCAC4BlO,EAAS+B,8BADrC,uCAEuC/B,EAASoC,kCAInD/F,GAAS,sBAAK6R,QAAM,EAAX,+CAA+C7R,KACzD,oBAAK4R,MAAO,MAAOE,UAAW,QAA9B,UACE,mBACEhR,KAAI,8CACJiR,OAAQ,SACRC,IAAI,aACJjF,UAAWhB,EAAQwF,WAJrB,4BAQA,mBACEzQ,KAAI,gDACJiR,OAAQ,SACRC,IAAI,aACJjF,UAAWhB,EAAQwF,WAJrB,yC,oBC7BGU,GANqB,SAACvP,GAAD,OAClC,4CAAU+L,MAAO,CAAEtE,WAAY,mBAAoBqF,SAAU,WAAY0C,OAAQ,IAASxP,GAA1F,aACE,oBAAkB,cAAY,UAAUyP,KAAK,oB,0DCkBlCC,GAxBAxI,cAAW,SAACC,GAAD,OACxBC,aAAa,CACXuI,aAAc,CACZP,UAAW,SACX9G,OAAQ,QACRqG,QAAS,OACTiB,cAAe,SACfhB,WAAY,SACZiB,eAAgB,SAChBC,OAAQ,qBACRzH,aAAc,MACdd,gBAAiB,UACjBU,MAAO,UACP8H,OAAQ,WAGVC,uBAAwB,CACtB,yBAA0B,CACxBlH,aAAc3B,EAAMW,QAAQ,UCU9BmI,GAAe,SAACjQ,GACpB,IAAMmH,EAAQ+I,eACNvT,EAAkEqD,EAAlErD,KAAMgO,EAA4D3K,EAA5D2K,SAAUwF,EAAkDnQ,EAAlDmQ,iBAAkBC,EAAgCpQ,EAAhCoQ,4BAE1C,EAAkCC,cAAS,WACzC,OAAOhS,EAAOuF,qBAAqB,CACjC0M,kBAAmB,GACnB3T,OACAkH,aAAclH,EAAK4T,KACnBzM,gBAAiB,QALb0M,EAAR,EAAQA,QAASjW,EAAjB,EAAiBA,MAAO+C,EAAxB,EAAwBA,MAaxB,OAJA2R,qBAAU,WACRmB,EAA4B,CAAEzT,OAAM6T,UAASjW,QAAO+C,YACnD,CAACkT,EAASjW,EAAOoC,EAAMW,EAAO8S,IAG/B,sBACErE,MAAO,CACL4C,QAAS,OACTC,WAAY,SACZrH,gBAAiB,UACjBkJ,YAAatJ,EAAMW,QAAQ,KAC3BgI,OAAQ,oBACRzH,aAAc,OAPlB,UAWE,qBAAK0D,MAAO,CAAElE,YAAaV,EAAMW,QAAQ,IAAzC,SACE,cAAC,GAAD,CAAUmE,KAAM,GAAIyE,cAAe/T,EAAK4T,KAAKI,UAAUhU,EAAK4T,KAAKK,YAAY,KAAO,OAEtF,oBAAY7E,MAAO,CAAEzE,SAAU,GAAKyC,QAAQ,QAA5C,SACGpN,EAAK4T,OAEPC,GAAW,oBAAkBvI,MAAO,YAAagE,KAAM,KACxD,oBACEtB,SAAU6F,GAAW7F,EACrB,cAAY,cACZ8E,KAAK,SACLc,KAAK,cACLrE,QAAS,kBAAMiE,EAAiBxT,EAAK4T,OALvC,SAOE,2BAhBG5T,EAAK4T,OAgCHM,GAAkB,SAAC7Q,GAC9B,IAAQyE,EAA8CzE,EAA9CyE,cAAekG,EAA+B3K,EAA/B2K,SAAUmG,EAAqB9Q,EAArB8Q,iBAEzB7H,EAAoBC,cAApBD,gBACFI,EAAUpC,KACVE,EAAQ+I,eAERa,EAASC,uBACb,SAACC,GACCH,GAAiB,SAACrM,GAAD,6BACZA,GADY,aAEZwM,EAAcrM,KAAI,SAACjI,GAAD,MAAW,CAAEA,OAAM6T,SAAS,EAAMjW,WAAOoD,aAGlE,CAACmT,IAGH,EAAgEI,aAAY,CAC1EH,SACAI,UAAU,IAFJC,EAAR,EAAQA,aAAcC,EAAtB,EAAsBA,cAAeC,EAArC,EAAqCA,aAAcC,EAAnD,EAAmDA,SAK7CpB,EAAmBa,uBACvB,SAACQ,GAAsB,IAAD,IAIpB,GAHAV,GAAiB,SAACrM,GAAD,OAAmBA,EAAcI,QAAO,SAAClI,GAAD,OAAUA,EAAKA,KAAK4T,OAASiB,QAGtF,OAAID,QAAJ,IAAIA,GAAJ,UAAIA,EAAUE,eAAd,iBAAI,EAAmBC,aAAvB,OAAI,EAA0B3K,OAAQ,CAIpC,IAFA,IAAM4K,EAAK,IAAIC,aAEf,MAAmBC,MAAMC,KAAN,iBAAWP,QAAX,IAAWA,GAAX,UAAWA,EAAUE,eAArB,aAAW,EAAmBC,aAA9B,QAAuC,IAA1D,eAA+D,CAAC,IAAD,IAApD/U,EAAI,KACbA,EAAK4T,OAASiB,GAAYG,EAAGpF,MAAMwF,IAAIpV,GAGzC4U,EAASE,QAAQC,MAAQC,EAAGD,SAGhC,CAACH,EAAUT,IAGPV,EAA8BY,uBAClC,SAACzF,GACKA,EAAMjO,OACR6S,EAAiB5E,EAAM5O,KAAK4T,MAC5BtH,EAAgB,qCAAD,OAAsCsC,EAAMjO,MAAM6D,SAAW,CAAE4I,QAAS,WAEvF+G,GAAiB,SAACrM,GAChB,OAAOA,EAAcG,KAAI,SAACoN,GAAD,OACvBA,EAAarV,KAAK4T,OAAShF,EAAM5O,KAAK4T,KAAOhF,EAAQyG,UAK7D,CAAC7B,EAAkBW,IAGrB,OACE,qCACE,gDAASM,KAAT,IAAyB/G,UAAWhB,EAAQsG,aAA5C,UACE,mCAAO,cAAY,kBAAqB0B,MACxC,cAAC,GAAD,CAAYY,OAAQ9K,EAAMK,QAAQ0K,KAAKC,UAAWlG,KAAM,KACvDqF,EACC,oBAAYrJ,MAAM,gBAAlB,qCAEA,oBAAYA,MAAM,gBAAlB,sDAIDxD,EAAcsC,QACf,qBAAKsD,UAAWhB,EAAQ2G,uBAAxB,SACGvL,EAAcG,KAAI,SAACjI,GAAD,OACjB,cAAC,GAAD,CACEgO,SAAUA,EAEVhO,KAAMA,EAAKA,KACXwT,iBAAkBA,EAClBC,4BAA6BA,GAHxBzT,EAAKA,KAAK4T,eCrHdb,GA5CAxI,cAAW,SAACC,GAAD,OACxBC,aAAa,CACXgL,YAAa,CACXlD,MAAO,4BAEPmD,SAAU,4BACVC,QAASnL,EAAMW,QAAQ,GACvB,yBAA0B,CACxBgB,aAAc3B,EAAMW,QAAQ,KAGhCyK,eAAgB,CACd5D,QAAS,OACTkB,eAAgB,YAElB2C,aAAc,CACZ3K,YAAaV,EAAMW,QAAQ,IAE7B2K,aAAc,CACZC,YAAavL,EAAMK,QAAQlK,MAAMqV,KACjC1K,MAAOd,EAAMK,QAAQlK,MAAMqV,KAC3B9K,YAAaV,EAAMW,QAAQ,IAE7B8K,eAAgB,CACdC,SAAU,OAEV,gCAAiC,CAAE5K,MAAOd,EAAMK,QAAQ0K,KAAKC,WAE7D,cAAe,CAAElK,MAAOd,EAAMK,QAAQ0K,KAAKC,YAE7CW,QAAS,CACPhG,SAAU,YAEZiG,eAAgB,CACd9K,MAAOd,EAAMK,QAAQwL,QAAQL,KAC7B7F,SAAU,WACVmG,IAAK,MACLC,KAAM,MACNrK,WAAY,GACZE,YAAa,SCnBNoK,GAAoB,SAACnT,GAChC,MAA8BqG,oBAAkB,GAAhD,mBAAOmK,EAAP,KAAgB4C,EAAhB,KACQ7X,EAAwCyE,EAAxCzE,KAAMwS,EAAkC/N,EAAlC+N,QAASsF,EAAyBrT,EAAzBqT,eAAgBC,EAAStT,EAATsT,KAC/BrK,EAAoBC,cAApBD,gBACFI,EAAUpC,KAEhB,EAA0CZ,mBAAgC,IAA1E,mBAAO5B,EAAP,KAAsBqM,EAAtB,KACA,EAAgCzK,mBAA6BiN,EAAK9O,UAAlE,mBAAOA,EAAP,KAAiB+O,EAAjB,KACA,EAA0ClN,qBAA1C,mBAAOmN,EAAP,KAAsBC,EAAtB,KAEMC,EAAiBjP,EAAckP,MAAK,SAAChX,GAAD,OAAUA,EAAK6T,WAEzD,EACEoD,GAAyBN,EAAKrI,MADxB4I,EAAR,EAAQA,gBAAiBC,EAAzB,EAAyBA,oBAAqBC,EAA9C,EAA8CA,aAAcC,EAA5D,EAA4DA,mBAAoBC,EAAhF,EAAgFA,WAAYC,EAA5F,EAA4FA,oBA2BtFC,EAAY,uCAAG,sBAAAhW,EAAA,yDACdqG,EADc,uBAEjBiP,EAAiB,0CAFA,0CAMblG,EAAY,YANC,2CAAH,qDAYZ6G,EAAc,uCAAG,sBAAAjW,EAAA,sEACfoP,EAAY,aADG,2CAAH,qDAOd8G,EAAa,uCAAG,sBAAAlW,EAAA,sEACdoP,EAAY,YADE,2CAAH,qDAQbA,EAAW,uCAAG,WAAOhJ,GAAP,SAAApG,EAAA,sEAEhBiV,GAAW,GAFK,SAGV/U,EAAOiG,UAAU,CAAE5B,GAAI1C,EAAMsT,KAAK5Q,GAAI8B,WAAUC,gBAAeF,YAHrD,OAIhB0E,EAAgB,wBAAyB,CAAEc,QAAS,YACpDsJ,IALgB,gDAOhBpK,EAAgB,2CAAD,aAAqD,CAAEc,QAAS,UAP/D,yBAShBqJ,GAAW,GATK,4EAAH,sDAaXkB,EAAiB9D,GAAWkD,EAElC,OACE,qBAAQrK,QAAS,CAAE3B,MAAO2B,EAAQ+I,aAAe7W,KAAMA,EAAMwS,QAASA,EAAtE,UACE,oBAAY,cAAY,uBAAuBhE,QAAQ,KAAvD,SACGuJ,EAAKiB,UAER,6BAAajB,EAAKkB,aAEjBN,GAAuBZ,EAAKmB,iBAC3B,oBAAYC,UAAU,MAAtB,SACE,qBAAKC,wBAAyB,CAAEC,OAAQtB,EAAKmB,qBAIhDV,GACC,oBAAalJ,WAAS,EAAtB,SACE,oBACEF,SAAU6F,EACVlW,MAAO,WACPoI,GAAE,mBAAc4Q,EAAK5Q,IACrBpF,QAASkW,EACTzI,WAAYyI,EACZqB,SAnF8D,SAACnH,GACvE,IAAMoH,EAAapH,EAAM2B,OAAO9U,OAE3BiK,GAAYsQ,GACfrB,OAAiB9V,GAGnB4V,EAAYuB,IA6EJva,MAAOiK,EACPuQ,YArHV,wGAsHUlK,WAAS,EACTmK,WAAS,EACTC,QAAS,EACThN,MAAO,YACP8B,QAAQ,eAKbkK,GACC,cAAC,GAAD,CAAiBxP,cAAeA,EAAeqM,iBAAkBA,EAAkBnG,SAAU6F,IAG/F,sBAAKnG,UAAWhB,EAAQkJ,eAAxB,UACE,qBAAKlI,UAAWhB,EAAQyJ,QAAxB,SACE,mBACEzI,UAAWhB,EAAQmJ,aACnBtG,QA1FW,WACnB6B,KA0FQhE,QAAQ,WACR,cAAa,gBAJf,sBASD8J,GACC,mBACElJ,SAAU2J,EACVpI,QAASkI,EACTnM,MAAM,YACN8B,QAAQ,YACR,cAAa,eALf,SAOG2J,EAAiB,eAAiB,UAGtCM,GACC,sBAAK3J,UAAWhB,EAAQyJ,QAAxB,UACE,mBACEnI,SAAU2J,EACVpI,QAASkI,EACTnM,MAAM,YACN8B,QAAQ,YACR,cAAa,kBALf,SAOG2J,EAAiB,eAAiB,aAEpClD,GAAW,oBAAkBvE,KAAM,GAAI5B,UAAWhB,EAAQ0J,oBAG9De,GACC,qCACE,mBACEnJ,SAAU2J,EACVjK,UAAWhB,EAAQoJ,aACnBvG,QAASiI,EACTpK,QAAQ,WACR,cAAa,gBALf,SAOG2J,EAAiB,eAAiB,WAErC,mBACE/I,SAAU2J,EACVpI,QAASmI,EACTpM,MAAM,YACN8B,QAAQ,YACR,cAAa,iBALf,SAOG2J,EAAiB,eAAiB,sBAc3CE,GAA2B,SAACsB,GAChC,IAAIC,EAAU,CACZtB,iBAAiB,EACjBE,cAAc,EACdE,YAAY,EACZD,oBAAoB,EACpBE,qBAAqB,EACrBJ,qBAAqB,GAGvB,OAAQoB,GACN,IAAK,aACHC,EAAQtB,iBAAkB,EAC1BsB,EAAQjB,qBAAsB,EAC9B,MACF,IAAK,cACHiB,EAAQlB,YAAa,EACrBkB,EAAQpB,cAAe,EACvBoB,EAAQrB,qBAAsB,EAC9B,MAOF,QACEqB,EAAQlB,YAAa,EACrBkB,EAAQpB,cAAe,EACvBoB,EAAQnB,oBAAqB,EAGjC,OAAOmB,G,oBC9OIlO,GAAYC,cAAW,SAACC,GAAD,OAClCC,aAAa,CACXgO,KAAM,CACJ9C,QAASnL,EAAMW,QAAQ,IAEzBuN,YAAa,CACX1G,QAAS,OACTiB,cAAe,SACfhB,WAAY,SACZiB,eAAgB,UAElByF,SAAU,CACRxM,aAAc3B,EAAMW,QAAQ,MAE9ByN,YAAa,CACX1F,eAAgB,SAChB/G,aAAc3B,EAAMW,QAAQ,WCArB0N,GAAiB,SAACxV,GAC7B,IAAMqJ,EAAUpC,KACV2F,EAAUC,cAYhB,OANAoC,qBAAU,WACqB,kBAAlBjP,EAAMmB,SAAwBnB,EAAMmB,QAAQ9B,SAAS,oBAC9DuN,EAAQ7G,KAAKnL,EAAOK,OAAOH,WAAWC,KAAK,MAE5C,IAGD,qBAAMsO,QAAS,CAAEhC,KAAMgC,EAAQ+L,MAA/B,UACE,qBAAa/L,QAAS,CAAEhC,KAAMgC,EAAQgM,aAAtC,UACkB,UAAfrV,EAAMyV,MAAoB,cAAC,GAAD,IACX,UAAfzV,EAAMyV,MAAoB,cAAC,GAAD,IACX,UAAfzV,EAAMyV,MAAoB,cAAC,GAAD,IACX,UAAfzV,EAAMyV,MAAoB,cAAC,GAAD,IAC1BzV,EAAM+H,OACL,oBAAYE,MAAM,cAAlB,SACE,iCAASjI,EAAM+H,UAGnB,oBAAYE,MAAM,gBAAlB,SAAmCjI,EAAMmB,aAE1CnB,EAAMuG,SACL,oBAAa8C,QAAS,CAAEhC,KAAMgC,EAAQkM,aAAtC,SACGvV,EAAMuG,QAAQ3B,KAAI,SAAC8Q,GAAD,OACjB,mBAAQzN,MAAM,YAAY8B,QAAQ,YAAYmC,QAAS,kBA3B3ClL,EA2B8D0U,EAAO1U,SA1BzF4L,EAAQ7G,KAAK/E,GADM,IAACA,GA2BZ,SACG0U,EAAOpb,iBAShBqb,GAAY,WAChB,IAAMtM,EAAUpC,KAEhB,OACE,sBACEoD,UAAWhB,EAAQiM,SACnBM,MAAM,6BACN1G,MAAM,KACN5G,OAAO,KACPuN,QAAQ,YACRC,KAAK,OACL7D,OAAO,MACP8D,YAAY,IACZC,cAAc,QACdC,eAAe,QAVjB,UAYE,yBAASC,OAAO,2EAChB,sBAAMC,GAAG,KAAKC,GAAG,IAAIC,GAAG,KAAKC,GAAG,OAChC,sBAAMH,GAAG,KAAKC,GAAG,KAAKC,GAAG,QAAQC,GAAG,WAKpCC,GAAY,WAChB,IAAMlN,EAAUpC,KAEhB,OACE,sBACEoD,UAAWhB,EAAQiM,SACnBM,MAAM,6BACN1G,MAAM,KACN5G,OAAO,KACPuN,QAAQ,YACRC,KAAK,OACL7D,OAAO,UACP8D,YAAY,IACZC,cAAc,QACdC,eAAe,QAVjB,UAYE,sBAAMO,EAAE,uCACR,0BAAUN,OAAO,8BAKjBO,GAAY,WAChB,IAAMpN,EAAUpC,KAEhB,OACE,sBACEoD,UAAWhB,EAAQiM,SACnBM,MAAM,6BACN1G,MAAM,KACN5G,OAAO,KACPuN,QAAQ,YACRC,KAAK,OACL7D,OAAO,eACP8D,YAAY,IACZC,cAAc,QACdC,eAAe,QAVjB,UAYE,sBAAMO,EAAE,yLACR,sBAAML,GAAG,IAAIC,GAAG,IAAIC,GAAG,KAAKC,GAAG,WAK/BI,GAAY,WAChB,IAAMrN,EAAUpC,KAEhB,OACE,sBACEoD,UAAWhB,EAAQiM,SACnBM,MAAM,6BACN1G,MAAM,KACN5G,OAAO,KACPuN,QAAQ,YACRC,KAAK,OACL7D,OAAO,eACP8D,YAAY,IACZC,cAAc,QACdC,eAAe,QAVjB,UAYE,sBAAMO,EAAE,8CACR,0BAAUN,OAAO,qBACjB,sBAAMC,GAAG,KAAKC,GAAG,KAAKC,GAAG,IAAIC,GAAG,W,+EC/GhCrP,GAAYC,cAAW,SAACC,GAAD,OAC3BC,aAAa,CACXuP,UAAW,CACTpP,gBAAiB,UACjBU,MAAO,WAET2O,cAAe,CACbpI,WAAYrH,EAAMW,QAAQ,IAC1B2G,cAAetH,EAAMW,QAAQ,KAC7B2I,YAAatJ,EAAMW,QAAQ,KAC3B+O,aAAc1P,EAAMW,QAAQ,KAC5B,qBAAsB,CACpBgP,YAAY,aAAD,OAAeC,aAAO,yBAA0B,QAG/DC,cAAe,CACb,qBAAsB,CACpBF,YAAa,qCAGjBG,aAAc,CACZ,mBAAoB,CAClBhP,MAAO,UACPV,gBAAiBJ,EAAMK,QAAQC,WAAWyP,SAE5C,oBAAqB,CACnBjP,MAAO,UACPV,gBAAiBwP,aAAO5P,EAAMK,QAAQC,WAAWyP,QAAS,YAkFnDC,GA1DO,SAACnX,GACPkQ,eAAd,IACQvP,EAA6DX,EAA7DW,QAASmJ,EAAoD9J,EAApD8J,KAAMsN,EAA8CpX,EAA9CoX,cAAeC,EAA+BrX,EAA/BqX,cAAeC,EAAgBtX,EAAhBsX,YAM/CjO,EAAUpC,KAEhB,OACE,6BACE,+BACE,oBAAWoC,QAAS,CAAEhC,KAAMgC,EAAQsN,WAApC,SACE,6BACGhW,EAAQiE,KAAI,SAAC2S,GAAD,OACX,oBACElO,QAAS,CAAEhC,KAAMgC,EAAQuN,eAEzBY,MAAM,OACNH,cAAeE,EAAOE,QAAUL,GAAgBC,EAJlD,SAME,oBACE1M,UAAW4M,EAAOG,SAClBtc,OAAQmc,EAAOE,QAAUL,EACzBO,cAAeJ,EAAOG,SACtBE,UAAWL,EAAOE,QAAUL,EAAgBC,EAAgB,OAC5DnL,SAxBgBuL,EAwBgBF,EAAOE,MAxBL,SAAC/J,GAEjD4J,EAAYG,EADEL,IAAkBK,GAA2B,SAAlBJ,EACd,MAAQ,UAiBvB,SAOE,oBAAYtN,QAAQ,WAAWgC,MAAO,CAAE9D,MAAO,WAA/C,SACGsP,EAAOjd,WAZPid,EAAOE,OAfK,IAACA,SAkC1B,6BACG3N,EAAKlF,KAAI,SAACiT,GAAD,OACR,oBAAUxO,QAAS,CAAEhC,KAAMgC,EAAQ4N,cAAnC,SACGtW,EAAQiE,KAAI,SAAC2S,GAAD,OACX,oBAEElO,QAAS,CAAEhC,KAAMgC,EAAQ2N,eACzBQ,MAAwB,YAAjBD,EAAOE,MAAsB,SAAW,OAC/CvI,MAAwB,YAAjBqI,EAAOE,MAAsB,GAAK,OAJ3C,SAMGI,EAAIN,EAAOE,QALPF,EAAOE,WAHsCI,EAAI5S,gBC/G3D6S,GAAe,SAAC9X,GAC3B,IAAMmH,EAAQ+I,eACd,EAA2DlQ,EAAnDiS,cAAR,MAAiB9K,EAAMK,QAAQwL,QAAQL,KAAvC,IAA2D3S,EAAdiM,YAA7C,MAAoD,GAApD,EAEA,OACE,sBACE2J,MAAM,6BACN1G,MAAOjD,EACP3D,OAAQ2D,EACR4J,QAAQ,YACRC,KAAK,OACL7D,OAAQA,EACR8D,YAAY,IACZC,cAAc,QACdC,eAAe,QATjB,UAWE,sBAAMO,EAAE,8CACR,0BAAUN,OAAO,qBACjB,sBAAMC,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,GAAG,UC5BjCyB,GAAmE,CACvEC,IAAK,UACLC,KAAM,UACNC,IAAK,UACLC,KAAM,UACNC,KAAM,UACNC,IAAK,UACLC,IAAK,UACLC,IAAK,UACLC,IAAK,UACLC,IAAK,WAoBMC,GAAW,SAAC1Y,GACvB,IAEI2Y,EAnC0BC,EAiCtBlI,EAAiD1Q,EAAjD0Q,cAAR,EAAyD1Q,EAAlCiM,YAAvB,MAA8B,GAA9B,IAAyDjM,EAAvB6Y,qBAAlC,MAAkD,GAAlD,EAUMC,EA7B2B,SAACC,GAAuB,IAAD,EACxD,iBAAOhB,GAA0BgB,UAAjC,QAA+C,UA4B5BC,CALjBL,EADEjI,GArCsD,OAA5BkI,EAsCiBlI,GAtCI,GAAakI,EAAIK,OAAO,GAAKL,GAAKM,cAwC7D,KAKxB,OACE,sBACEhK,MAAOjD,EACP3D,OAAQ2D,EACR4J,QAAQ,YACRpG,KAAK,MACL,kBAAgB,yBAChBmG,MAAM,6BANR,UAQE,uBAAOlT,GAAG,cAAV,SAAyBmW,IACzB,sBAAMnW,GAAG,eACT,sBACE8T,EAAE,kHACFV,KAAK,YAEP,sBAAMU,EAAE,qDAAqDV,KAAK,YAClE,sBAAMU,EAAE,8BAA8BV,KAAK,YAC3C,sBACEU,EAAE,iLACFV,KAAMgD,IAGR,sBACEtC,EAAE,4GACFV,KAAK,YAEP,sBACEqD,WAAW,mBACXC,EAAE,IACFC,EAAE,KACFxG,SAAS,KACTiD,KAAK,QACL/J,MAAO,CAAEuN,WAAY,OAAQC,cAAe,QAASpN,WAAY,KANnE,SAQGwM,QCxEIa,GAAa,SAACxZ,GACzB,IAAMmH,EAAQ+I,eACd,EAA2DlQ,EAAnDiS,cAAR,MAAiB9K,EAAMK,QAAQwL,QAAQL,KAAvC,IAA2D3S,EAAdiM,YAA7C,MAAoD,GAApD,EAEA,OACE,sBACE2J,MAAM,6BACN1G,MAAOjD,EACP3D,OAAQ2D,EACR4J,QAAQ,YACRC,KAAK,OACL7D,OAAQA,EACR8D,YAAY,IACZC,cAAc,QACdC,eAAe,QATjB,UAWE,sBAAMO,EAAE,8CACR,0BAAUN,OAAO,kBACjB,sBAAMC,GAAG,KAAKC,GAAG,IAAIC,GAAG,KAAKC,GAAG,W,UCnBhCrP,GAAYC,cAAW,SAACC,GAAD,OAC3BC,aAAa,CAAE8K,KAAM,CAAEuH,WAAY,SAAUC,aAAc,WAAYC,SAAU,eA+CpEC,GAhCK,SAAC5Z,GACnB,IAAMqJ,EAAUpC,KACRsF,EAAmBvM,EAAnBuM,MAAOiE,EAAYxQ,EAAZwQ,QAEf,OACE,oBAAMlG,WAAS,EAAf,SACGiC,EAAM3H,KAAI,SAAC2F,GAAD,aACT,eAAC,IAAMsP,SAAP,WACE,oBAAMtP,MAAI,EAACC,GAAI,EAAf,SACE,cAAC,GAAD,CAAiBsP,QAASvP,EAAKjQ,MAA/B,SACE,oBAAYyP,QAAQ,QAAQ9B,MAAM,gBAAgBoC,UAAWhB,EAAQ6I,KAArE,SACG3H,EAAKjQ,YAIZ,qBAAMiQ,MAAI,EAACC,GAAI,EAAf,UACGgG,GAAW,cAACuJ,GAAA,EAAD,CAAUzR,OAAQ,GAAI4G,MAAM,SACtCsB,GACA,cAAC,GAAD,CAAiBsJ,QAAO,UAAEvP,EAAKhQ,aAAP,QAAgB,GAAxC,SACE,qBAAYwP,QAAQ,QAAQ9B,MAAM,gBAAgBoC,UAAWhB,EAAQ6I,KAArE,UACG3H,EAAKhQ,OAASgQ,EAAKhQ,OAClBgQ,EAAKhQ,OAAS,oDAdLgQ,EAAKjQ,a,UCsBnB0f,GAjCS,SAACha,GACvB,IAAMia,EAAiBC,iBAAgC,MAEjDC,EAAgB,WAAO,IAAD,QACpBC,GAAc,iBAACH,QAAD,IAACA,GAAD,UAACA,EAAgBxI,eAAjB,aAAC,EAAyB4I,mBAA1B,QAAyC,IAAzC,iBAA+CJ,QAA/C,IAA+CA,GAA/C,UAA+CA,EAAgBxI,eAA/D,aAA+C,EAAyB6I,mBAAxE,QAAuF,GAE3GC,EAAiBH,IAGnBnL,qBAAU,WAGR,OAFAkL,IACAre,OAAO0e,iBAAiB,SAAUL,GAC3B,WACLre,OAAO2e,oBAAoB,SAAUN,MAEtC,IAEH,MAA0C9T,oBAAS,GAAnD,mBAAOqU,EAAP,KAAsBH,EAAtB,KAEMI,EAAevN,IAAMwN,SAASC,KAAK7a,EAAM8a,UAE/C,OACE,oBACEC,UAAU,MACVhT,MAAO,6BAAa/H,EAAM8Z,UAC1BkB,aAAW,EACXC,sBAAuBP,EAJzB,SAMGtN,IAAM8N,aAAaP,EAAc,CAAEQ,IAAKlB,O,wBCrClCmB,GAAe,SAACpb,GAC3B,IAAQ8a,EAAsB9a,EAAtB8a,SAAaO,EAArB,aAA8Brb,EAA9B,IACA,EAAgBkG,IAATO,EAAP,oBAEA,OAAO,cAAC,IAAD,2BAAW4U,GAAX,IAAiBC,OAAQ,kBAAO7U,EAAQqU,EAAW,cAAC,IAAD,CAAUS,GAAI3gB,EAAOI,MAAMF,WAAWC,KAAK,U,UCX1FkM,GAAYC,cAAW,SAACC,GAAD,OAClCC,aAAa,CACXoU,aAAc,CACZrC,WAAY,gBACZtJ,eAAgB,iBAElB4L,UAAW,CACT5T,YAAaV,EAAMW,QAAQ,IAE7B4T,gBAAiB,CACfvC,WAAY,SACZlR,MAAO,UACP,UAAW,CACTA,MAAOd,EAAMK,QAAQwL,QAAQL,KAC7BvG,eAAgB,SAGpBuP,SAAU,CACRlC,WAAY,SACZC,aAAc,WACdC,SAAU,UAEZiC,YAAa,CACXrU,gBAAiB,gBCHVsU,GAAkB,SAAC7b,GAC9B,IAAMqJ,EAAUpC,KAGdvE,EAaE1C,EAbF0C,GACA8N,EAYExQ,EAZFwQ,QACAsL,EAWE9b,EAXF8b,mBACAC,EAUE/b,EAVF+b,YACAC,EASEhc,EATFgc,eACAC,EAQEjc,EARFic,aACAC,EAOElc,EAPFkc,gBACAC,EAMEnc,EANFmc,WACAC,EAKEpc,EALFoc,WACAC,EAIErc,EAJFqc,cACAC,EAGEtc,EAHFsc,YACAC,EAEEvc,EAFFuc,OACAC,EACExc,EADFwc,YAGIxb,EAAG,wBAAoB0B,GAC7B,OACE,+BACE,+BACE,oBAAK+Z,GAAI,EAAG9N,QAAQ,OAAOC,WAAW,SAASiB,eAAe,gBAA9D,UACE,cAAC,GAAD,CAAiBiK,QAASgC,EAA1B,SACE,oBAAYzR,UAAS,UAAKhB,EAAQoS,UAAb,YAA0BpS,EAAQsS,UAAY5R,QAAQ,KAA3E,SACE,mBAAM2K,UAAWgI,IAAYnB,GAAIva,EAAKqJ,UAAWhB,EAAQqS,gBAAzD,SACGI,QAIP,cAAC,GAAD,CAAaxhB,MAAOgiB,EAAaC,OAAQA,EAAQtU,MAAOuU,OAE1D,cAAC,GAAD,CACEhM,QAASA,EACTjE,MAAO,CACL,CAAEjS,MAAO,UAAWC,MAAOwhB,GAC3B,CAAEzhB,MAAO,kBAAmBC,MAAOyhB,GACnC,CAAE1hB,MAAO,gBAAiBC,MAAO0hB,GACjC,CAAE3hB,MAAO,mBAAoBC,MAAO2hB,GACpC,CAAE5hB,MAAO,cAAeC,MAAO4hB,GAC/B,CAAE7hB,MAAO,cAAeC,MAAO6hB,SAIrC,oBAAS/R,UAAWhB,EAAQuS,cAC5B,6BACE,oBACElH,UAAWgI,IACXnB,GAAIva,EACJ4M,QAAS,uBACT/C,WAAS,EACT5C,MAAM,YACNoC,UAAWhB,EAAQmS,aANrB,UAQGa,EARH,aAQ8C,IAAlBA,EAAsB,GAAK,aCpElDM,GAAkB,WAQ3B,OAPF1N,qBAAU,WAENnT,OAAOC,SAASqC,KAAOC,EAAOkC,wBAE/B,IAGM,cAAC,GAAD,CAAgBkV,KAAM,QAAStU,QAAS,kC,UCZ7C8F,GAAYC,cAAW,kBAC3BE,aAAa,CACXwV,KAAM,CACJnV,WAAY,UACZQ,MAAO,SAET4U,SAAU,CACRpV,WAAY,UACZQ,MAAO,SAET6U,UAAW,CACTrV,WAAY,UACZQ,MAAO,WAET8U,OAAQ,CACNtV,WAAY,UACZQ,MAAO,SAET+U,MAAO,CACLvV,WAAY,UACZQ,MAAO,SAETgV,IAAK,CACHxV,WAAY,UACZQ,MAAO,SAETiV,KAAM,CACJzV,WAAY,UACZQ,MAAO,gBAYAkV,GAAc,SAACnd,GAC1B,IAIIod,EAJI9iB,EAAwB0F,EAAxB1F,MAAO2N,EAAiBjI,EAAjBiI,MAAO8D,EAAU/L,EAAV+L,MAEhB1C,EAAUpC,KAIhB,OAAQgB,GACN,IAAK,OACHmV,EAAa/T,EAAQuT,KACrB,MACF,IAAK,YACHQ,EAAa/T,EAAQwT,SACrB,MACF,IAAK,aACHO,EAAa/T,EAAQyT,UACrB,MACF,IAAK,SACHM,EAAa/T,EAAQ0T,OACrB,MACF,IAAK,QACHK,EAAa/T,EAAQ2T,MACrB,MACF,IAAK,MACHI,EAAa/T,EAAQ4T,IACrB,MACF,IAAK,OACHG,EAAa/T,EAAQ6T,KAIzB,OAAO,oBAAMjR,KAAK,QAAQ5B,UAAW+S,EAAY9iB,MAAOA,EAAOyR,MAAOA,KCnE3DsR,GAAmB,WAC9B,MAAqBnX,IAAZnG,EAAT,oBAEAkP,qBAAU,WACRqO,OAGF,IAAMA,EAAY,uCAAG,4BAAAnf,EAAA,6DACfiD,EAAY,IADG,kBAIC/C,EAAOpD,SAJR,OAIjBmG,EAJiB,uDAMjBlB,QAAQC,IAAI,6BAAZ,MANiB,yBAQjBJ,OAASpC,GACT7B,OAAOC,SAASqC,KAAOgD,EATN,4EAAH,qDAalB,OAAO,cAAC,GAAD,CAAgBqU,KAAM,QAAStU,QAAS,oBCtBpCoc,GAAiB,SAAC,GAAmD,IAAjDC,EAAgD,EAAhDA,QAASC,EAAuC,EAAvCA,YACxC,OAAKD,EAGH,qBAAKzR,MAAO,CAAEqD,UAAW,SAAUvG,UAAW,IAAMsS,IAAKsC,EAAa,cAAa,kBAAnF,SACE,oBAAkB1R,MAAO,CAAEmB,KAAM,OAJhB,8B,UCFVwQ,GAAoB,SAAI3iB,GAAuE,IAAvC4iB,EAAsC,uDAAP,GAClG,EAA0CtX,mBAAwBsX,GAAlE,mBAAOC,EAAP,KAAsBC,EAAtB,KACA,EAAwCxX,oBAAS,GAAjD,mBAAOyX,EAAP,KAAqBC,EAArB,KACA,EAA8B1X,oBAAkB,GAAhD,mBAAOmK,EAAP,KAAgB4C,EAAhB,KACA,EAA0B/M,qBAA1B,mBAAO/I,EAAP,KAAc0gB,EAAd,KACA,EAA8B3X,wBAA+B1I,GAA7D,mBAAOsgB,EAAP,KAAgBC,EAAhB,KACA,EAA4C7X,wBAA6B1I,GAAzE,mBAAOwgB,EAAP,KAAuBC,EAAvB,KAEMC,EAAO,uCAAG,4BAAAlgB,EAAA,sEAEZiV,GAAW,GAFC,SAIS/U,EAAOoF,KAAQ1I,EAAM6iB,GAJ9B,OAIN7N,EAJM,OAMZmO,EAAWnO,EAAOkO,SAClBG,EAAkBrO,EAAOoO,gBAPb,gDASZH,EAAS,EAAD,IATI,yBAWZ5K,GAAW,GAXC,4EAAH,qDAebnE,qBAAU,WACRoP,MACC,CAACT,IAEJ,MAAoBU,aAAU,CAC5BC,QAAS,kBAAMC,OADTC,EAAR,EAAQA,QAIFD,EAAS,uCAAG,4BAAArgB,EAAA,yDACXggB,IAAkBL,IAAgBtN,EADvB,iEAIduN,GAAgB,GAJF,SAKU1f,EAAOoC,GAAsB0d,GALvC,OAKRO,EALQ,OAOdR,GAAW,SAACS,GACV,OAAIA,EACI,GAAN,oBAAWA,GAAX,aAA+BD,EAAUT,UAElCS,EAAUT,WAIrBG,EAAkBM,EAAUP,gBAfd,kDAiBdH,EAAS,EAAD,IAjBM,yBAmBdD,GAAgB,GAnBF,6EAAH,qDAuBTa,EAAmB,SAACxH,GACxByG,GAAiB,SAAC/c,GAAD,mBAAC,eAAkBA,GAAnB,IAA4BsW,sBAGzCyH,EAAmB,SAACxH,GACxBwG,GAAiB,SAAC/c,GAAD,mBAAC,eAAkBA,GAAnB,IAA4BuW,cAAeyH,GAAgBzH,SAG9E,MAAO,CACL/Z,QACAkgB,UAAWW,EACX3N,UACAsN,eACAG,UACAI,UACAR,mBACAgB,mBACAD,mBACAvH,cAAeuG,EAAcvG,cAC7BD,cAAewG,EAAcxG,cAC7BqG,YAAagB,IAIXK,GAAkB,SAAClH,GACvB,OAAQA,GACN,IAAK,MACH,MAAO,MACT,IAAK,OACH,MAAO,SChFPmH,GAAW,CACfC,SAAU,GACV5H,cAAe,OACfC,cAAe,QA+DX4H,GAAkB,SAAC,GAA6C,IAA3C1U,EAA0C,EAA1CA,KAAMiG,EAAoC,EAApCA,QACvB9N,EAA8D6H,EAA9D7H,GAAI2M,EAA0D9E,EAA1D8E,OAAQgN,EAAkD9R,EAAlD8R,cAAe6C,EAAmC3U,EAAnC2U,+BAEjCpD,EAWEoD,EAXFpD,mBACAqD,EAUED,EAVFC,SACAnD,EASEkD,EATFlD,eACAoD,EAQEF,EARFE,oBACAnD,EAOEiD,EAPFjD,aACAoD,EAMEH,EANFG,kBACAnD,EAKEgD,EALFhD,gBACAoD,EAIEJ,EAJFI,qBACAhD,EAGE4C,EAHF5C,YACAC,EAEE2C,EAFF3C,OACAC,EACE0C,EADF1C,YAGF,OACE,oBAAMjS,MAAI,EAACwB,MAAO,CAAEmD,MAAO,QAAUqQ,GAAI,EAAzC,SACE,cAAC,GAAD,CACE7c,GAAIA,EACJ8N,QAASA,EACTsL,mBAAoBA,EACpBC,YAAaoD,EAASva,KAAI,SAAC4a,GAAD,OAAaA,EAAQjP,QAAMkP,KAAK,MAC1DzD,eAAgBoD,GAAuBpD,EACvCC,aAAcoD,GAAqBpD,EACnCC,gBAAiBoD,GAAwBpD,EACzCC,WAAU,OAAE9M,QAAF,IAAEA,OAAF,EAAEA,EAAQkB,KACpB6L,WAAU,OAAE/M,QAAF,IAAEA,OAAF,EAAEA,EAAQ+M,WACpBC,cAAeA,EACfC,YAAaA,GAAeC,EAC5BC,YAAaA,EACbD,OAAQA,OAMDmD,GAjGM,WACnB,IAAM3jB,EAAW4jB,cACXC,EAAyB9R,QAAQL,YAAc7S,EAAOM,aAAaE,OAAON,aAE1E6iB,EAAO,2BACRoB,IADQ,IAEX3jB,OAAQwkB,IAGV,EAA4ElC,GAC1E,eACAC,GAFMM,EAAR,EAAQA,QAAST,EAAjB,EAAiBA,QAAShN,EAA1B,EAA0BA,QAASlT,EAAnC,EAAmCA,MAAOugB,EAA1C,EAA0CA,iBAAkBJ,EAA5D,EAA4DA,YAK5DxO,qBAAU,WACR4O,EAAiBF,KAChB,CAAC5hB,IAEJ,IAAM8jB,GAA0BrP,IAAYlT,GAASsiB,GAA8C,KAAb,OAAP3B,QAAO,IAAPA,OAAA,EAAAA,EAASlX,QAClF+Y,GAA4BtP,IAAYlT,IAAUsiB,GAA8C,KAAb,OAAP3B,QAAO,IAAPA,OAAA,EAAAA,EAASlX,QACrFgZ,GAAavP,GAAWlT,EACxB0iB,GAAYxP,GAA+B,KAAb,OAAPyN,QAAO,IAAPA,OAAA,EAAAA,EAASlX,QAEtC,OACE,qBAAMuD,WAAS,EAACxC,QAAS,EAAzB,UACE,oBAAMyC,MAAI,EAACC,GAAI,GAAf,SACE,oBAAYT,QAAQ,KAApB,SACE,eAAC,IAAD,WACE,cAAC,IAAD,2BAAWnP,EAAOM,aAAaE,OAAON,YAAtC,sCACA,cAAC,IAAD,2BAAWF,EAAOM,aAAaG,SAASP,YAAxC,+CAIN,qBAAMyP,MAAI,EAACwB,MAAO,CAAEe,SAAU,YAActC,GAAI,GAAhD,UACE,cAAC,GAAD,CAA6BjP,KAAMiV,IAClCuP,GACC,cAAC,GAAD,CAAgBtK,KAAM,QAAS1N,MAAO,qCAAsC5G,QAAS7D,EAAQ,KAE9FuiB,GAA0B,cAAC,GAAD,CAAgBpK,KAAM,QAAStU,QAAS,oCAClE2e,GAA4B,cAAC,GAAD,CAAgBrK,KAAM,QAAStU,QAAS,qBACpE6e,GAAY/B,GACX,qCACE,oBAAM3T,WAAS,EAACxC,QAAS,EAAzB,SACGmW,EAAQrZ,KAAI,SAAC2F,EAAMtF,GAAP,OACX,cAAC,GAAD,CAA2BsF,KAAMA,EAAMiG,QAASA,GAA1BvL,QAG1B,cAAC,GAAD,CAAgBuY,QAASA,EAASC,YAAaA,cC5D9CxW,GAAYC,cAAW,SAACC,GAAD,OAClCC,aAAa,CACXoU,aAAc,CACZrC,WAAY,gBACZtJ,eAAgB,gBAChB5H,MAAO,UACPV,gBAAiB,UACjBkS,WAAY,UAEdwG,wBAAyB,CACvBhY,MAAO,UACPmE,eAAgB,kBCIhB2S,GAAW,CACfC,SAAU,GACV5H,cAAe,4BACfC,cAAe,QAGX6I,GAAuC,CAC3CC,YAAa,CACX7lB,MAAO,cACPmd,MAAO,cACP2I,QAAS,mDACT1I,UAAU,GAEZsE,eAAgB,CACd1hB,MAAO,aACPmd,MAAO,iBACP2I,QAAS,6BACT1I,UAAU,GAEZxC,SAAU,CACR5a,MAAO,YACPmd,MAAO,WACP2I,QAAS,8BACT1I,UAAU,GAEZnD,QAAS,CACPja,MAAO,UACPmd,MAAO,UACP2I,QAAS,UACT1I,UAAU,GAEZ2I,QAAS,CACP/lB,MAAO,WACPmd,MAAO,UACP2I,QAAS,eACT1I,UAAU,GAEZ4I,cAAe,CACbhmB,MAAO,iBACPmd,MAAO,gBACP2I,QAAS,4BACT1I,UAAU,GAEZnR,QAAS,CACPjM,MAAO,UACPmd,MAAO,UACPC,UAAU,IAIR6I,GAAuBxb,OAAO1K,OAAO6lB,IAAcrb,QAAO,SAAC0S,GAAD,MAA6B,kBAAjBA,EAAOE,SAC7E+I,GAAyBzb,OAAO1K,OAAO6lB,IAAcrb,QACzD,SAAC0S,GAAD,MAA6B,YAAjBA,EAAOjd,OAAwC,YAAjBid,EAAOE,SAqHpCgJ,GAlHD,WAAO,IAAD,IACZpX,EAAUpC,KAChB,EAA4DZ,wBAAsC1I,GAAlG,mBAAO+iB,EAAP,KAA+BC,EAA/B,KAEM5kB,EAAW4jB,cACXiB,EAAgB9S,QAAQL,YAAc7S,EAAOU,MAAMC,KAAKT,aAExD6iB,EAAO,2BACRoB,IADQ,IAEXxjB,KAAMqlB,IAGR,EAYIlD,GAAmC,QAASC,GAX9CM,EADF,EACEA,QACAT,EAFF,EAEEA,QACAhN,EAHF,EAGEA,QACAlT,EAJF,EAIEA,MACA+Z,EALF,EAKEA,cACAD,EANF,EAMEA,cACAwH,EAPF,EAOEA,iBACAC,EARF,EAQEA,iBACAhB,EATF,EASEA,iBACAQ,EAVF,EAUEA,QACAZ,EAXF,EAWEA,YAGFxO,qBAAU,WACR4O,EAAiBF,KAChB,CAAC5hB,IAEJ,IAAM8kB,EAAS,iBACb5C,QADa,IACbA,OADa,EACbA,EAASrZ,KAAI,SAAC0O,GAAD,MAAW,CACtBrO,IAAKqO,EAAK5Q,GACVyd,YACE,mCACG7M,EAAKwN,sBACJ,mBAAQ1iB,KAAI,wBAAmBkV,EAAKwN,qBAAqBpe,IAAM2H,UAAWhB,EAAQ4W,wBAAlF,SACG3M,EAAKwN,qBAAqBhF,uBAKnCE,eAAgB1I,EAAK0I,eACrB9G,SAAU5B,EAAKyN,UACfxM,QAASjB,EAAKiB,QACd8L,QAAS/M,EAAK+M,QACdC,cAAehN,EAAKgN,cACpBU,kBAAmB1N,EAAK0N,kBACxBza,QACE,mBAAQ8D,UAAWhB,EAAQmS,aAAczR,QAAQ,YAAYmC,QAAS,kBAAMyU,EAA0BrN,IAAtG,sCAnBS,QAuBN,GAEH2N,EAAsBL,EAAgBL,GAAuBC,GAW7DU,GAA6B1Q,IAAYlT,GAASsjB,GAAsC,IAArBC,EAAU9Z,OAC7Eoa,GAA+B3Q,IAAYlT,IAAUsjB,GAAsC,IAArBC,EAAU9Z,OAChFgZ,GAAavP,GAAWlT,EACxB0iB,GAAYxP,GAAgC,IAArBqQ,EAAU9Z,OAEvC,OACE,qBAAMuD,WAAS,EAACxC,QAAS,EAAzB,YACK4Y,GACD,cAAC,GAAD,CACEpN,KAAMoN,EACNnlB,MAAM,EACN8X,eApBmB,WACzBgL,IACAsC,OAA0BhjB,IAmBpBoQ,QAhBY,WAClB4S,OAA0BhjB,MAkBxB,oBAAM4M,MAAI,EAACC,GAAI,GAAIuB,MAAO,CAAE0C,cAAe,GAA3C,SACE,oBAAY1E,QAAQ,KAApB,SACE,eAAC,IAAD,WACE,cAAC,IAAD,2BAAWnP,EAAOU,MAAMC,KAAKT,YAA7B,6BACA,cAAC,IAAD,2BAAWF,EAAOU,MAAME,OAAOV,YAA/B,sCAIN,qBAAMyP,MAAI,EAACC,GAAI,GAAIuB,MAAO,CAAEe,SAAU,YAAtC,UACE,cAAC,GAAD,CAA6BvR,KAAMiV,IAClCuP,GAAa,cAAC,GAAD,CAAgBtK,KAAM,QAAS1N,MAAO,8BAA+B5G,QAAS7D,EAAQ,KACnG4jB,GAA6B,cAAC,GAAD,CAAgBzL,KAAM,QAAStU,QAAS,6BACrEggB,GAA+B,cAAC,GAAD,CAAgB1L,KAAM,QAAStU,QAAS,qBACvE6e,GACC,qCACE,cAAC,GAAD,CACElW,KAAM+W,EACNlgB,QAASsgB,EACT5J,cAAa,OAAEA,QAAF,IAAEA,OAAF,EAAEA,EAAe+J,cAC9BhK,cAAa,UAAEmJ,GAAqBc,MAAK,SAAC9J,GAAD,OAAYA,EAAO6I,UAAYhJ,YAA3D,aAAE,EAAyEK,MACxFH,YAAa,SAACG,EAAOG,GACnBgH,EAAiBsB,GAAazI,GAAO2I,SACrCvB,EAAiBjH,MAGrB,cAAC,GAAD,CAAgB4F,QAASA,EAASC,YAAaA,c,4IChL9CxW,GAAYC,cAAW,SAACC,GAAD,MAAY,CAC9Cma,cAAe,CACb/Z,gBAAiBga,aAAMpa,EAAMK,QAAQwL,QAAQL,KAAM,KAErD6O,oBAAqB,CACnB3Y,UAAW1B,EAAMW,SAAS,KAC1BgB,aAAc3B,EAAMW,QAAQ,OAE9B2Z,YAAa,CACX3Y,aAAc3B,EAAMW,QAAQ,KAC5Be,UAAW1B,EAAMW,QAAQ,MAG3B4Z,mCAAoC,CAClC,WAAY,CACV/S,QAAS,SAGbgT,wBAAyB,CACvBhT,QAAS,OACTC,WAAY,UAEdgT,QAAS,CACPC,WAAW,aAAD,OAAeN,aAAMpa,EAAMK,QAAQ2K,UAAUQ,KAAM,MAC7DlC,YAAatJ,EAAMW,QAAQ,IAE7Bga,gBAAiB,CACfC,YAAa,EACbC,YAAa,QACbtP,YAAavL,EAAMK,QAAQ2K,UAAUQ,KACrCtK,aAAc,MACdsG,QAAS,OACTO,MAAO,OACP5G,OAAQ,OACRuH,eAAgB,SAChBoS,aAAc,SACdrT,WAAY,SACZsT,WAAY,EACZra,YAAaV,EAAMW,QAAQ,IAE7BuN,YAAa,CACX/C,QAAS,GAEX6P,QAAS,CACP7Z,OAAQ,MACRQ,aAAc3B,EAAMW,QAAQ,KAC5Be,UAAW1B,EAAMW,QAAQ,MAE3Bsa,iBAAkB,CAChBjJ,WAAY,iBAEdkJ,kBAAmB,CACjBlJ,WAAY,gBACZtQ,UAAW1B,EAAMW,QAAQ,MAE3Bwa,oBAAqB,CACnB3T,QAAS,OACTC,WAAY,SACZrH,gBAAiB,UACjB+K,QAASnL,EAAMW,QAAQ,KACvBgB,aAAc3B,EAAMW,QAAQ,KAC5BgI,OAAQ,oBACRzH,aAAc,WCAZka,GAAc,SAACviB,GACnB,IAAQwiB,EAA+BxiB,EAA/BwiB,gBAAiBC,EAAcziB,EAAdyiB,UAEnBpZ,EAAUpC,KAEhB,EAA0DzJ,EAAmBglB,GAArE9kB,EAAR,EAAQA,cAAeG,EAAvB,EAAuBA,eAAgBD,EAAvC,EAAuCA,eAEvC,OACE,eAAC8kB,GAAA,EAAD,CAAcrZ,QAAS,CAAEsZ,uBAAwBtZ,EAAQqY,oCAAzD,UACE,eAACkB,GAAA,EAAD,WACE,cAACC,GAAA,EAAD,CAAaxZ,QAAS,CAAEhC,KAAMgC,EAAQoY,aAAexZ,MAAM,YAAY8B,QAAQ,WAA/E,SACE,cAAC,GAAD,MAEF,cAAC+Y,GAAA,EAAD,CAAmBzY,UAAWhB,EAAQiY,mBAExC,eAACyB,GAAA,EAAD,WACE,qBAAMzY,WAAS,EAACjB,QAAS,CAAEhC,KAAMgC,EAAQmY,qBAAzC,UACE,oBAAMjX,MAAI,EAACC,GAAI,EAAGnB,QAAS,CAAEhC,KAAMgC,EAAQsY,yBAA3C,SACE,qBAAYtY,QAAS,CAAEhC,KAAMgC,EAAQ+Y,kBAArC,UACGI,EAAgBQ,cADnB,qBACoDR,EAAgBS,mBAGtE,oBAAM1Y,MAAI,EAACC,GAAI,EAAGnB,QAAS,CAAEhC,KAAMgC,EAAQsY,yBAA3C,SACE,6BACG,IAAIuB,KAAKV,EAAgBW,aAAaC,eAAe,QAAS,CAC7DC,UAAW,SACXC,UAAW,cAIjB,oBAAM/Y,MAAI,EAACC,GAAI,EAAGnB,QAAS,CAAEhC,KAAMgC,EAAQsY,yBAA2BrX,WAAS,EAACuF,eAAe,WAA/F,SACE,mBACE3D,QAAStO,EACTqK,MAAM,YACN8B,QAAS,WACTkC,KAAM,QACNtB,UAAW9M,EALb,SAOGH,MAIL,oBAAM6M,MAAI,EAACE,GAAI,GAAI8U,GAAI,EAAvB,SACE,mBAAKgE,GAAI,KAAT,SACE,cAAC,GAAD,CAASrR,KAAMsQ,EAAgBgB,mBAIrC,oBAASna,QAAS,CAAEhC,KAAMgC,EAAQ8Y,WAEjCM,EAAU7d,KAAI,SAAC6e,EAAUxe,GAAX,OACb,cAAC,GAAD,CAAwBwe,SAAUA,GAAfxe,aAgBvBye,GAAe,SAAC1jB,GAA8B,IAAD,EACzCyjB,EAAazjB,EAAbyjB,SAEFpa,EAAUpC,KAEhB,OACE,oBAAuB0H,QAAQ,OAAO8N,GAAI,EAA1C,UACE,sBAAwBpS,UAAWhB,EAAQyY,gBAA3C,SACE,oBAAU7Z,MAAM,YAAY4K,SAAS,QAAQ9G,MAAO,CAAEmD,MAAO,GAAI5G,OAAQ,OADhEmb,EAAS/gB,IAGpB,oBAAK4E,SAAU,EAAf,UACE,qBAAY+B,QAAS,CAAEhC,KAAMgC,EAAQgZ,mBAArC,UACGoB,EAASE,MAAMpT,KADlB,MAC2BkT,EAASlP,WAEpC,oBAAMjK,WAAS,EAAf,SACE,oBAAMC,MAAI,EAACE,GAAI,GAAI8U,GAAI,EAAvB,SACE,mBAAK9C,GAAI,EAAG8G,GAAI,KAAhB,SACE,cAAC,GAAD,CAASrR,KAAI,UAAEuR,EAASjf,gBAAX,QAAuB,WAI1C,oBAAYuF,QAAQ,QAApB,SAA6B6Z,aAAOH,EAASzC,qBAC5CyC,EAASI,WACR,mBAAKvc,SAAU,EAAGuB,UAAW,EAA7B,SACG4a,EAASI,UAAUjf,KAAI,SAACkf,EAAU7e,GAAX,OACtB,cAAC,GAAD,CAAwBtI,KAAMmnB,GAAX7e,WAK3B,mBAAKqC,SAAU,MAxBPmc,EAAS/gB,KAsCjBuN,GAAe,SAACjQ,GACpB,IAAQrD,EAASqD,EAATrD,KAEFwK,EAAQ+I,eACR7G,EAAUpC,KAEVrJ,EAAc,uCAAG,4BAAAO,EAAA,sDACf6C,EAAM3C,EAAOC,uBAAuB3B,EAAK+F,IAC/C5G,OAAOC,SAASqC,KAAO4C,EAFF,2CAAH,qDAKpB,OACE,sBAAsBqJ,UAAWhB,EAAQiZ,oBAAzC,UACE,qBAAKvW,MAAO,CAAElE,YAAaV,EAAMW,QAAQ,IAAzC,SACE,cAAC,GAAD,CAAUmE,KAAM,GAAIyE,cAAe/T,EAAK+T,kBAE1C,oBAAY3E,MAAO,CAAEzE,SAAU,GAAKyC,QAAQ,QAA5C,SACGpN,EAAKoL,MAAQ,IAAMpL,EAAK+T,gBAE3B,oBAAYxE,QAAStO,EAAgBqK,MAAM,UAAUgE,KAAM,QAA3D,SACE,cAAC,GAAD,CAAcA,KAAM,SARdtP,EAAKoL,QAuBbgc,GAAU,SAAC/jB,GACf,IAAQkS,EAASlS,EAATkS,KACF7I,EAAUpC,KAEhB,OACE,oBAAY8C,QAAQ,QAAQV,QAAS,CAAEhC,KAAMgC,EAAQuY,SAArD,SACG1P,KAKQ8R,GA7LY,SAAChkB,GAC1B,IAAQ4M,EAAY5M,EAAZ4M,QAEFvD,EAAUpC,KAEhB,OAAuB,IAAnB2F,EAAQ7F,OACH,cAAC,GAAD,CAAgB0O,KAAM,QAAStU,QAAS,qBAI/C,6BACE,oBAAakI,QAAS,CAAEhC,KAAMgC,EAAQgM,aAAtC,SACE,cAAC4O,GAAA,EAAD,CAAUzM,MAAM,OAAhB,SACG5K,EAAQhI,KAAI,WAAiCK,GAAjC,IAAGud,EAAH,EAAGA,gBAAiBC,EAApB,EAAoBA,UAApB,OACX,cAAC,GAAD,CAAuBD,gBAAiBA,EAAiBC,UAAWA,GAAlDxd,a,UC7BxBgC,GAAYC,cAAW,SAACC,GAAD,MAAY,CACvC4L,eAAgB,CACd9K,MAAO,SAETic,0BAA2B,CACzBrN,aAAc1P,EAAMW,QAAQ,IAE9Bqc,8BAA+B,CAC7BxV,QAAS,OACTC,WAAY,SACZqT,aAAc,SACdnV,SAAU,WAEVvF,gBAAiB,UACjBc,aAAc,MACdiK,QAAS,UACTW,IAAK9L,EAAMW,QAAQ,GACnBsc,MAAOjd,EAAMW,QAAQ,GACrBuc,WAAY,SACZ7U,OAAQ,GAEV8U,uBAAwB,CACtB,yCAA0C,CACxCD,WAAY,YAGhBE,iCAAkC,CAChC5V,QAAS,OACTC,WAAY,WACZiB,eAAgB,SAChBvH,OAAQ,QACRf,gBAAiB,8BA6Dfid,GAAe,SAACxkB,GACpB,IAAMqJ,EAAUpC,KACR6c,EAAqC9jB,EAArC8jB,SAAUtT,EAA2BxQ,EAA3BwQ,QAASiU,EAAkBzkB,EAAlBykB,cAE3B,OACE,6BACE,qBAAgBvY,QAASuY,EAAepb,QAAS,CAAEhC,KAAMgC,EAAQib,wBAAjE,UACE,sBAAKja,UAAWhB,EAAQ8a,8BAAxB,UACE,oBAAKO,GAAI,GAAT,WACIlU,GAAW,cAAC,GAAD,CAAcyB,OAAQ,UAClCzB,GAAW,oBAAkBvE,KAAM,GAAI5B,UAAWhB,EAAQ0J,oBAE7D,oBAAYhJ,QAAQ,QAAQgC,MAAO,CAAE9D,MAAO,WAA5C,yBAIF,mBAAKoC,UAAWhB,EAAQkb,iCAAxB,SACE,mBAAK9H,GAAI,EAAG1Q,MAAO,CAAE4Y,QAAS,IAA9B,SACE,cAAC,GAAD,CAAU1Y,KAAM,IAAKyE,cAAeoT,EAASpT,oBAIjD,qBAAa3E,MAAO,CAAE4C,QAAS,OAAQC,WAAY,UAAnD,UACE,mBAAKvE,UAAWhB,EAAQ6a,0BAAxB,SACE,cAAC,GAAD,CAAUjY,KAAM,GAAIyE,cAAeoT,EAASpT,kBAE9C,cAAC,GAAD,CAAiBoJ,QAAO,UAAKgK,EAAS/b,MAAd,YAAuB+b,EAASpT,eAAxD,SACE,qBACE3E,MAAO,CAAE0N,WAAY,SAAUE,SAAU,SAAUD,aAAc,YACjEzR,MAAM,cACNyM,UAAU,IAHZ,UAKGoP,EAAS/b,MALZ,IAKoB+b,EAASpT,4BAS1BkU,GAzFwB,SAAC5kB,GACtC,IAAQ6jB,EAA6B7jB,EAA7B6jB,UAAWjhB,EAAkB5C,EAAlB4C,cACnB,EAA8ByD,oBAAS,GAAvC,mBAAOmK,EAAP,KAAgB4C,EAAhB,KACQnK,EAAoBC,cAApBD,gBAEF4b,EAAwB,SAACC,GAAD,6BAAwC,4BAAA3mB,EAAA,sEAElEiV,GAAW,GACXnK,EAAgB,yBAA0B,CAAEc,QAAS,UAAWgb,iBAAkB,MAHhB,SAK/C1mB,EAAOsE,kCAAkC,CAC1DE,WAAYiiB,EAAIpiB,GAChBE,kBAPgE,OAK5DkH,EAL4D,OAUlEhO,OAAOC,SAASqC,KAAOC,EAAOC,uBAAuBwL,EAAK7L,aAVQ,gDAYlEgL,EAAgB,8DAAD,aAAwE,CAAEc,QAAS,UAZhC,yBAclEqJ,GAAW,GAduD,6EAkBtE,OACE,qBAAM9I,WAAS,EAACxC,QAAS,EAAzB,UACG+b,EAAUjf,KAAI,SAACkgB,GAAD,OACb,oBAAMva,MAAI,EAACE,GAAI,EAAgBD,GAAI,GAAI+U,GAAI,EAA3C,SACE,cAAC,GAAD,CAAcuE,SAAUgB,EAAKtU,QAASA,EAASiU,cAAeI,EAAsBC,MAD/DA,EAAIpiB,OAIP,IAArBmhB,EAAU9c,QACT,oBAAMwD,MAAI,EAACE,GAAI,GAAf,SACE,cAAC,GAAD,CAAgBgL,KAAM,QAAStU,QAAS,2B,UC3E5C6jB,GAAqB,SAAChlB,GAC1B,IAAMuM,EAKD,CACH,CAAEgL,OAAQ,OAAQhd,MAAOyF,EAAMiL,KAAMgB,KAAM,GAC3C,CAAEsL,OAAQ,eAAgBhd,MAAOyF,EAAMuU,QAAStI,KAAM,GACtD,CAAEsL,OAAQ,aAAchd,MAAOyF,EAAMwU,WAAYvI,KAAM,GACvD,CAAEsL,OAAQ,WAAYhd,MAAOyF,EAAMqgB,QAASpU,KAAM,GAClD,CACEgZ,sBAAsB,EACtB1N,OAAQ,GACRhd,MACE,4BACE,mBAAQ2R,QAASlM,EAAMklB,oBAAqBnb,QAAQ,YAAY9B,MAAM,YAAtE,6BAKJgE,KAAM,IAIJkZ,EACJ,oBAAM7a,WAAS,EAACxC,QAAS,EAAzB,SACGyE,EAAM3H,KAAI,YAAoD,IAAjD2S,EAAgD,EAAhDA,OAAQhd,EAAwC,EAAxCA,MAAO0R,EAAiC,EAAjCA,KAAMgZ,EAA2B,EAA3BA,qBACjC,OACE,qBAAmB1a,MAAI,EAACC,GAAIyB,EAA5B,UACGsL,EACC,oBAAYtP,MAAM,gBAAgB8B,QAAQ,UAA1C,SACGwN,IAED,KAEH0N,EACC,mBAAK3c,OAAO,OAAO4G,MAAM,OAAOP,QAAQ,OAAOkB,eAAe,WAAWjB,WAAW,SAApF,SACGrU,IAGH,oBAAYwP,QAAQ,QAApB,SAA6BxP,MAZtBgd,QAmBnB,OACE,6BACE,6BAAc4N,OAkBdC,GAAoB,SAACplB,GACzB,IAAMuM,EAAmE,CACvE,CAAEgL,OAAQ,OAAQhd,MAAOyF,EAAMiL,KAAMgB,KAAM,GAC3C,CAAEsL,OAAQ,eAAgBhd,MAAOyF,EAAMuU,QAAStI,KAAM,GACtD,CAAEsL,OAAQ,aAAchd,MAAOyF,EAAMwU,WAAYvI,KAAM,GACvD,CAAEsL,OAAQ,WAAYhd,MAAOyF,EAAMqgB,QAASpU,KAAM,GAClD,CAAEsL,OAAQ,WAAYhd,MAAOyF,EAAMwE,SAAUyH,KAAM,IAG/CkZ,EACJ,oBAAM7a,WAAS,EAACxC,QAAS,EAAzB,SACGyE,EAAM3H,KAAI,gBAAG2S,EAAH,EAAGA,OAAQhd,EAAX,EAAWA,MAAO0R,EAAlB,EAAkBA,KAAlB,OACT,qBAAmB1B,MAAI,EAACC,GAAIyB,EAA5B,UACE,oBAAYhE,MAAM,gBAAgB8B,QAAQ,UAA1C,SACGwN,IAEH,oBAAYxN,QAAQ,QAApB,SAA6BxP,MAJpBgd,QAUjB,OACE,6BACE,6BAAc4N,OAKdle,GAAYC,cAAW,SAACC,GAAD,OAC3BC,aAAa,CACXie,UAAW,CACT5d,WAAY,QACZ6K,QAASnL,EAAMW,QAAQ,KACvBsH,UAAW,UAEbkW,yBAA0B,CACxBhT,QAASnL,EAAMW,QAAQ,IAEzByd,kBAAmB,CACjBzc,aAAc3B,EAAMW,QAAQ,MAE9B0d,mBAAoB,CAClB/W,cAAetH,EAAMW,QAAQ,IAE/B2d,0BAA2B,CACzBrZ,eAAgB,YAChBsZ,cAAe,OACf,UAAW,CACTtZ,eAAgB,mBAmGTuZ,GAnFU,SAAC3lB,GAAkC,IAAD,IACjD1E,EAAsC0E,EAAtC1E,MAAOsqB,EAA+B5lB,EAA/B4lB,kBAAmBpV,EAAYxQ,EAAZwQ,QAClC,EAA0CnK,oBAAkB,GAA5D,mBAAOwf,EAAP,KAAsBC,EAAtB,KACA,EAA4Dzf,wBAAsC1I,GAAlG,mBAAO+iB,EAAP,KAA+BC,EAA/B,KAEMoF,EAAe,iBAAGzqB,QAAH,IAAGA,OAAH,EAAGA,EAAOuJ,QAAO,SAACyO,GAAD,OAAUA,EAAK0S,iBAAhC,QAA2C,GAC1DC,EAAc,iBAAG3qB,QAAH,IAAGA,OAAH,EAAGA,EAAOuJ,QAAO,SAACyO,GAAD,OAAWA,EAAK0S,iBAAjC,QAA4C,GAE1D3c,EAAUpC,KAWhB,OACE,gCACKyZ,GACD,cAAC,GAAD,CACEpN,KAAMoN,EACNnlB,MAAM,EACN8X,eAfmB,WACzBuS,IACAjF,OAA0BhjB,IAcpBoQ,QAXY,WAClB4S,OAA0BhjB,MAaxB,oBAAM0L,QAAS,CAAEhC,KAAMgC,EAAQmc,oBAAsBlb,WAAS,EAACxC,QAAS,EAAxE,SACGie,EAAgBhf,OACfgf,EAAgBnhB,KAAI,SAAC0O,GACnB,IAAQ5Q,EAAsD4Q,EAAtD5Q,GAAIqe,EAAkDzN,EAAlDyN,UAAW9V,EAAuCqI,EAAvCrI,KAAMsJ,EAAiCjB,EAAjCiB,QAASC,EAAwBlB,EAAxBkB,WAAY6L,EAAY/M,EAAZ+M,QAClD,OACE,oBAAM7V,GAAI,GAAaD,MAAI,EAA3B,SACE,cAAC,GAAD,CACEU,KAAM8V,GAAa9V,EACnBsJ,QAASA,EACTC,WAAYA,EACZ6L,QAASA,EACT6E,oBAAqB,kBAAMvE,EAA0BrN,OANtC5Q,MAYvB,oBAAM8H,GAAI,GAAID,MAAI,EAAlB,SACIiG,GAAqB,OAAVlV,EAA0F,KAAzE,cAAC,GAAD,CAAgBma,KAAM,QAAStU,QAAS,iCAI5E,oBACE8K,KAAK,QACLC,QAAS,kBAAM4Z,GAAkBD,IACjCxc,QAAS,CAAEhC,KAAMgC,EAAQoc,2BACzBS,eAAa,EAJf,UAMGL,EAAgB,OAAS,OAN5B,sBAQA,oBAAUM,GAAIN,EAAd,SACE,qBAAMvb,WAAS,EAACxC,QAAS,EAAzB,UAC6B,IAA1Bme,EAAelf,QACd,oBAAMyD,GAAI,GAAID,MAAI,EAAlB,SACE,cAAC,GAAD,CAAgBkL,KAAM,QAAStU,QAAS,uBAG3C8kB,EAAerhB,KAAI,gBAAGlC,EAAH,EAAGA,GAAIqe,EAAP,EAAOA,UAAWxM,EAAlB,EAAkBA,QAASC,EAA3B,EAA2BA,WAAY6L,EAAvC,EAAuCA,QAAS7b,EAAhD,EAAgDA,SAAhD,OAClB,oBAAegG,GAAI,GAAID,MAAI,EAA3B,SACE,cAAC,GAAD,CACEU,KAAM8V,EACNxM,QAASA,EACTC,WAAYA,EACZ6L,QAASA,EACT7b,SAAQ,OAAEA,QAAF,IAAEA,IAAY,MANf9B,e,wCC9LjB0jB,GAAkB,SAACpmB,GACvB,IAAMuM,EAAkF,CACtF,CAAEgL,OAAQ,QAAShd,MAAOyF,EAAM1F,MAAO2R,KAAM,GAC7C,CACEsL,OAAQ,YACRhd,MAAO,cAAC,GAAD,CAAU0R,KAAM,GAAIyE,cAAe1Q,EAAM0Q,cAAemI,cAAe7Y,EAAMqmB,WACpFpa,KAAM,GAER,CAAEsL,OAAQ,OAAQhd,MAAOyF,EAAMsmB,SAASphB,WAAY+G,KAAM,IAGtDrO,EAAc,uCAAG,4BAAAO,EAAA,sDACf6C,EAAM3C,EAAOC,uBAAuB0B,EAAMsQ,mBAChDxU,OAAOC,SAASqC,KAAO4C,EAFF,2CAAH,qDAKdulB,EAAe,uCAAG,sBAAApoB,EAAA,sDACtBrC,OAAOP,KAAKyE,EAAM9B,aADI,2CAAH,qDAIfinB,EACJ,qBAAM7a,WAAS,EAACxC,QAAS,EAAzB,UACGyE,EAAM3H,KAAI,gBAAG2S,EAAH,EAAGA,OAAQhd,EAAX,EAAWA,MAAO0R,EAAlB,EAAkBA,KAAlB,OACT,qBAAmB1B,MAAI,EAACC,GAAIyB,EAA5B,UACE,oBAAYhE,MAAM,gBAAgB8B,QAAQ,UAA1C,SACGwN,IAEH,oBAAYxN,QAAQ,QAApB,SAAwC,SAAXwN,EAAoBiP,GAAYC,OAAOlsB,IAAUA,MAJrEgd,MAOb,oBAAMhN,MAAI,EAACC,GAAI,EAAf,SACE,mBAAKkc,GAAI,CAAE/X,QAAS,OAAQC,WAAY,SAAUtG,OAAQ,OAAQuH,eAAgB,YAAlF,SACE,+BACE,oBACE5H,MAAM,YACN8B,QAAQ,WACRgC,MAAO,CACL4a,UAAW,OAEbza,QAAStO,EANX,UAQE,cAAC,KAAD,CAAciV,SAAS,UARzB,kBAUA,oBACE5K,MAAM,YACN8B,QAAQ,WACRgC,MAAO,CACL4a,UAAW,OAEbza,QAASqa,EACT5b,UAAW3K,EAAM9B,YAPnB,UASE,cAAC,KAAD,CAAc2U,SAAS,UATzB,sCAiBV,OACE,6BACE,6BAAcsS,OAsCpB,SAASqB,GAAYI,GAA8B,IAAfC,EAAc,uDAAH,EAC7C,KAAMD,EAAO,MAAO,UAEpB,IAAME,EAAI,KACJC,EAAKF,EAAW,EAAI,EAAIA,EACxBG,EAAQ,CAAC,QAAS,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAEnEC,EAAIC,KAAKC,MAAMD,KAAK/mB,IAAIymB,GAASM,KAAK/mB,IAAI2mB,IAEhD,MAAM,GAAN,OAAUM,YAAYR,EAAQM,KAAKG,IAAIP,EAAGG,IAAIK,QAAQP,IAAtD,YAA8DC,EAAMC,IAGvDM,OAzCM,SAACvnB,GACpB,IAAQwnB,EAAiBxnB,EAAjBwnB,aAER,OACE,4BACE,qBAAMld,WAAS,EAACxC,QAAS,EAAzB,UAC4B,KAAb,OAAZ0f,QAAY,IAAZA,OAAA,EAAAA,EAAczgB,SACb,oBAAMyD,GAAI,GAAID,MAAI,EAAlB,SACE,cAAC,GAAD,CAAgBkL,KAAM,QAAStU,QAAS,uBAH9C,OAMGqmB,QANH,IAMGA,OANH,EAMGA,EAAc5iB,KAAI,gBAAGlC,EAAH,EAAGA,GAAIpI,EAAP,EAAOA,MAAO4D,EAAd,EAAcA,YAAaupB,EAA3B,EAA2BA,gBAA3B,OACjB,oBAAejd,GAAI,GAAID,MAAI,EAA3B,SACE,cAAC,GAAD,CACE7H,GAAIA,EACJpI,MAAOA,EACP+rB,SAAUoB,EAAgBC,SAC1BhX,cAAe+W,EAAgBE,cAC/BrB,SAAUmB,EAAgBG,YAC1BtX,kBAAmBmX,EAAgBI,GACnC3pB,YAAaA,KARNwE,YC7GRuE,GAAYC,cAAW,SAACC,GAAD,OAClCC,aAAa,CACX0gB,iBAAkB,CAChB,UAAW,CACT7f,MAAOd,EAAMK,QAAQwL,QAAQL,KAC7BvG,eAAgB,SAGpB2b,KAAM,CACJhf,WAAY5B,EAAMW,QAAQ,IAE5BkgB,IAAK,CACHtC,cAAe,OACfpT,QAASnL,EAAMW,QAAQ,KACvB2G,cAAe,EACfD,WAAY,EACZyZ,SAAU,EACVpV,SAAU,GACV1G,WAAY,IACZ+b,UAAW,GAEbC,SAAU,CACRrf,aAAc3B,EAAMW,QAAQ,GAC5BogB,UAAW,GAEbE,kBAAmB,CACjBC,aAAa,aAAD,OAAe9G,aAAMpa,EAAMK,QAAQwL,QAAQL,KAAM,KAC7D,uBAAwB,CACtB9K,YAAaV,EAAMW,QAAQ,KAG/BwgB,cAAe,CACb3Z,QAAS,OACTkB,eAAgB,QAChBtI,gBAAiB,cACjBkJ,YAAatJ,EAAMW,QAAQ,GAC3B,WAAY,CACVoH,MAAO,OACP3H,gBAAiBJ,EAAMK,QAAQwL,QAAQL,KACvCrK,OAAQ,MACRwE,SAAU,WACVmG,IAAK,c,wEC4Mb,SAASsV,GAAevoB,GACtB,IAAQ8a,EAAqC9a,EAArC8a,SAAUvgB,EAA2ByF,EAA3BzF,MAAO+E,EAAoBU,EAApBV,MAAUkpB,EAAnC,aAA6CxoB,EAA7C,IAEA,OACE,6CACEyP,KAAK,WACLN,OAAQ5U,IAAU+E,EAClBoD,GAAE,0BAAqBpD,GACvB,uCAA+BA,IAC3BkpB,GALN,aAOGjuB,IAAU+E,GACT,4BACE,6BAAawb,SAqBvB,IAAM2N,GAAa,SAACzoB,GAClB,IAAQ1F,EAA+C0F,EAA/C1F,MAAOgF,EAAwCU,EAAxCV,MAAOopB,EAAiC1oB,EAAjC0oB,MAAO/d,EAA0B3K,EAA1B2K,SAAage,EAA1C,aAAuD3oB,EAAvD,IACMqJ,EAAUpC,KAEhB,OACE,4CACEif,eAAa,EACb7c,QAAS,CAAEhC,KAAMgC,EAAQ2e,KACzB1tB,MAAK,UAAKA,GAAL,YAAuBqD,IAAV+qB,EAAA,YAA2BA,EAA3B,KAAsC,IACxD/d,SAAUA,GACNge,GAxBV,SAAmBrpB,GACjB,MAAO,CACLoD,GAAG,cAAD,OAAgBpD,GAClB,gBAAgB,mBAAhB,OAAoCA,IAsB9BspB,CAAUtpB,MAKLupB,GAjRY,WAAO,IAAD,EACzBC,EAAQrb,cACd,EAAgCpH,qBAAhC,mBAAO0iB,EAAP,KAAiBC,EAAjB,KAEM3f,EAAUpC,KAEhB,EAAuE8H,cAAW,WAChF,OAAO1Q,EAAOoE,eAAe,CAAEC,GAAIomB,EAAMplB,OAAOhB,OAC/C,CAAComB,EAAMplB,OAAOhB,KAFjB,0BAAS8N,EAAT,EAASA,QAAgBvP,EAAzB,EAAkB1G,MAAiB+C,EAAnC,EAAmCA,MAAS2rB,EAA5C,KAIAC,cAAc,WACZD,IAEA,IAAM3lB,EAAiB,uCAAG,4BAAAnF,EAAA,sEACDE,EAAOiF,oBADN,OAClBylB,EADkB,OAExBC,EAAYD,GAFY,2CAAH,qDAKvBzlB,OAGF,MACErC,GAAa,GADPkf,EAAR,EAAQA,YAAavT,EAArB,EAAqBA,QAASuc,EAA9B,EAA8BA,QAASC,EAAvC,EAAuCA,oBAAqB5B,EAA5D,EAA4DA,aAGtDnY,EAAM,OAAG8Q,QAAH,IAAGA,OAAH,EAAGA,EAAa9Q,OACtBga,EAAU,OAAGlJ,QAAH,IAAGA,OAAH,EAAGA,EAAajB,+BAEhC,EACE1hB,EAAmB6rB,GADb3rB,EAAR,EAAQA,cAAeE,EAAvB,EAAuBA,eAAgBW,EAAvC,EAAuCA,eAAgBV,EAAvD,EAAuDA,eAAgBC,EAAvE,EAAuEA,eAGvE,E1CiBmC,SAAC0pB,GACpC,IAAKA,EACH,MAAO,CACL8B,kBAAmB,cAIvB,IAAMA,EAAiB,uCAAG,8BAAAnrB,EAAA,sDAExB,IADIorB,EAAgB,GACXtC,EAAI,EAAGA,EAAIO,EAAazgB,OAAQkgB,IACvCsC,GAAiB,IAAM/B,EAAaP,GAAG3W,kBAEzCxU,OAAOC,SAASqC,KAAOC,EAAOqB,0BAA0B6pB,GALhC,2CAAH,qDAQvB,MAAO,CAAED,qB0ChCqBE,CAAqB,OAACvoB,QAAD,IAACA,OAAD,EAACA,EAAUumB,cAAtD8B,EAAR,EAAQA,kBAyBR,EAlB4B,SAAC9B,GAC3B,IAAKA,EACH,MAAO,CACLjB,gBAAiB,cAIrB,IAAMA,EAAe,uCAAG,sBAAApoB,EAAA,sDACtBqpB,EACG3iB,QAAO,SAAC4kB,GAAD,OAAiBA,EAAYvrB,eACpCwrB,SAAQ,SAACD,GACR3tB,OAAOP,KAAKkuB,EAAYvrB,gBAJN,2CAAH,qDAQrB,MAAO,CAAEqoB,mBAGiBoD,CAAmB,OAAC1oB,QAAD,IAACA,OAAD,EAACA,EAAUumB,cAAlDjB,EAAR,EAAQA,gBAEFR,EAAkBoD,EAAO,OAAGA,QAAH,IAAGA,OAAH,EAAGA,EAAStkB,QAAO,SAACyO,GAAD,OAAUA,EAAK0S,eAAUroB,EAErEisB,EAAoD,kBAAhC,OAAOpC,QAAP,IAAOA,OAAP,EAAOA,EAAczgB,QAAsBygB,EAAazgB,YAASpJ,EAErFI,EAA2C,eAAnB,OAAVsrB,QAAU,IAAVA,OAAA,EAAAA,EAAYrrB,cAE1B6rB,EACHhsB,IAAmBE,IACX,OAARgrB,QAAQ,IAARA,OAAA,EAAAA,EAAUvlB,kDAAmDzF,GAAeF,EACzEisB,EAAqBhsB,GAAkBC,EAE7C,EAAgCsI,mBAAiB,GAAjD,mBAAO0jB,EAAP,KAAiBC,EAAjB,KAEMC,GAC4B,kBAAhC,OAAOzC,QAAP,IAAOA,OAAP,EAAOA,EAAczgB,QACjBygB,EAAa3iB,QAAO,SAAC4kB,GAAD,OAAiBA,EAAYvrB,eAAa6I,YAC9DpJ,EACA0e,GAAmD,kBAAnC,OAAO0J,QAAP,IAAOA,OAAP,EAAOA,EAAiBhf,QAAsBgf,EAAgBhf,YAASpJ,EACvFusB,GAAkD,kBAAvC,OAAOd,QAAP,IAAOA,OAAP,EAAOA,EAAqBriB,QAAsBqiB,EAAoBriB,YAASpJ,EAE1FwsB,GAAe,CACnB,CAAE7vB,MAAO,UAAWC,MAAK,OAAE8uB,QAAF,IAAEA,OAAF,EAAEA,EAAYlK,SAASva,KAAI,SAAC4a,GAAD,OAAaA,EAAQjP,QAAMkP,KAAK,OACpF,CAAEnlB,MAAO,kBAAmBC,MAAK,OAAE8uB,QAAF,IAAEA,OAAF,EAAEA,EAAYrN,gBAC/C,CAAE1hB,MAAO,gBAAiBC,MAAK,OAAE8uB,QAAF,IAAEA,OAAF,EAAEA,EAAYhK,mBAC7C,CAAE/kB,MAAO,mBAAoBC,MAAK,OAAE8uB,QAAF,IAAEA,OAAF,EAAEA,EAAY/J,sBAChD,CAAEhlB,MAAO,cAAeC,MAAK,OAAE8U,QAAF,IAAEA,OAAF,EAAEA,EAAQkB,MACvC,CAAEjW,MAAO,cAAeC,MAAK,OAAE8U,QAAF,IAAEA,OAAF,EAAEA,EAAQ+M,aAGnC7E,GACJ,qBAAMjN,WAAS,EAACxC,QAAS,EAAzB,UACG0I,GAAW,cAACuJ,GAAA,EAAD,CAAUzR,OAAQ,GAAI4G,MAAO,OACvCsB,GACA,oBAAMjG,MAAI,EAACC,GAAI,EAAf,SACE,qBAAa4f,UAAW,oBAAcvX,SAAS,UAA/C,UACE,mBACE0I,GACa,OAAX4E,QAAW,IAAXA,KAAa/kB,OACTR,EAAOM,aAAaE,OAAON,WAAWC,KAAK,GAC3CH,EAAOM,aAAaG,SAASP,WAAWC,KAAK,GAEnD2Z,UAAWgI,IACX3S,QAAQ,KACR9B,MAAM,cACNoC,UAAWhB,EAAQye,iBATrB,SAWI3H,EAAD,UAAqC,OAAXA,QAAW,IAAXA,KAAa/kB,OAAS,SAAW,WAA3D,iBAAe,QAElB,qBAAY2O,QAAQ,KAAK9B,MAAM,cAA/B,2BACGohB,QADH,IACGA,OADH,EACGA,EAAYvN,0BADf,QACqC,MACjCqE,EACA,cAAC,GAAD,CACE7lB,OAAiB,OAAV+uB,QAAU,IAAVA,OAAA,EAAAA,EAAY/M,eAAZ,OAA2B+M,QAA3B,IAA2BA,OAA3B,EAA2BA,EAAY9M,QAC9CA,OAAM,OAAE8M,QAAF,IAAEA,OAAF,EAAEA,EAAY9M,OACpBtU,MAAK,OAAEohB,QAAF,IAAEA,OAAF,EAAEA,EAAY7M,YACnBzQ,MAAO,CAAEhD,WAAY,MALT,cAYtByH,GACA,oBAAMjG,MAAI,EAACC,GAAI,EAAf,SACE,mBAAKmE,QAAQ,OAAOkB,eAAe,WAAnC,SACE,+BACGga,GACC,mBACE5hB,MAAM,YACN8B,QAAQ,WACRmC,QAAStO,EACT+M,UAAW9M,EACXkO,MAAO,CAAE4a,UAAW,OALtB,SAOG,cAAC,KAAD,CAAc9T,SAAS,YAI3BiX,GACC,oBACE7hB,MAAM,YACN8B,QAAQ,WACRmC,QAAS3N,EACToM,UAAW7M,EACXiO,MAAO,CAAE4a,UAAW,OALtB,UAOG,cAAC,KAAD,CAAc9T,SAAS,UAP1B,OAOyDnV,KAG1DksB,GACC,oBAAQ3hB,MAAM,YAAY8B,QAAQ,WAAWmC,QAASod,EAAmBvd,MAAO,CAAE4a,UAAW,OAA7F,UACE,cAAC,KAAD,CAAc9T,SAAS,UADzB,sBAIDoX,IACC,oBAAQhiB,MAAM,YAAY8B,QAAQ,WAAWmC,QAASqa,EAAiBxa,MAAO,CAAE4a,UAAW,OAA3F,UACE,cAAC,KAAD,CAAc9T,SAAS,UADzB,oDAWd,OAAIvV,EACK,cAAC,GAAD,CAAgBmY,KAAM,QAAS1N,MAAO,oCAAqC5G,QAAS7D,EAAQ,KAInG,qBAAMgN,WAAS,EAACyB,MAAO,CAAEe,SAAU,YAAchF,QAAS,EAA1D,UACE,cAAC,GAAD,CAA6BvM,KAAMiV,IACnC,oBAAMjG,MAAI,EAACC,GAAI,GAAf,SACG+M,KAEH,oBAAMhN,MAAI,EAACgV,GAAI,EAAf,SACE,cAAC,GAAD,CAAa/O,QAASA,EAASjE,MAAO4d,OAExC,qBAAM5f,MAAI,EAACC,GAAI,GAAf,UACE,qBACEjQ,MAAOwvB,EACPlV,SAAU,SAACwV,EAAQC,GAAT,OAA8BN,EAAYM,IACpDC,UAAU,YACVC,eAAe,UACfnhB,QAAS,CACPhC,KAAMgC,EAAQ8e,SACdsC,UAAWphB,EAAQif,cACnBoC,cAAerhB,EAAQ+e,mBAEzBuC,kBAAmB,CAAE7P,SAAU,0BAVjC,UAYG8O,GACC,cAAC,GAAD,CAAYtvB,MAAO,gBAAiBgF,MAAO,EAAGqL,UAAWif,EAAmBlB,MAAOkB,IAErF,cAAC,GAAD,CAAYtvB,MAAO,WAAYgF,MAAO,EAAGopB,MAAOrM,KAChD,cAAC,GAAD,CAAY/hB,MAAO,mBAAoBgF,MAAO,IAC9C,cAAC,GAAD,CAAYhF,MAAO,uBAAwBgF,MAAO,EAAGopB,MAAOwB,QAE7D/J,GACC,qCACE,cAACoI,GAAD,CAAgBhuB,MAAOwvB,EAAUzqB,MAAO,GAAKsqB,EAAoB,EAAI,GAArE,SACE,cAAC,GAAD,CAAcpC,aAAcA,MAE9B,cAACe,GAAD,CAAgBhuB,MAAOwvB,EAAUzqB,MAAO,GAAKsqB,EAAoB,EAAI,GAArE,SACE,cAAC,GAAD,CAAkBtuB,MAAO6tB,EAASvD,kBAAmBqD,EAAyBzY,QAASA,MAEzF,cAAC+X,GAAD,CAAgBhuB,MAAOwvB,EAAUzqB,MAAO,GAAKsqB,EAAoB,EAAI,GAArE,SACE,cAAC,GAAD,CAAoBhd,QAASA,MAE/B,cAAC2b,GAAD,CAAgBhuB,MAAOwvB,EAAUzqB,MAAO,GAAKsqB,EAAoB,EAAI,GAArE,SACE,cAAC,GAAD,CAAgC/F,UAAWuF,EAAqBxmB,cAAeud,EAAYzd,iB,UC3L1FkoB,GArCC,WACd,IAAM9B,EAAQrb,cAEd,EAAoDsB,cAAW,kBAAM1Q,EAAOgD,eAAc,CAACynB,EAAMplB,OAAOhB,KAAxG,0BAAS8N,EAAT,EAASA,QAAgB9U,EAAzB,EAAkBnB,MAAkBswB,EAApC,KACA,EAAyE9b,cACvE,kBAAM1Q,EAAOiD,8BACb,CAACwnB,EAAMplB,OAAOhB,KAFhB,mBAAgBjB,EAAhB,KAASlH,MAAiCuwB,EAA1C,KAUA,OALA5B,cAAc,WACZ2B,IACAC,OAIA,oBAAMxgB,WAAS,EAAf,SACE,qBAAMC,MAAI,EAACC,GAAI,GAAf,UACE,oBAAYT,QAAQ,KAAKgC,MAAO,CAAEjD,aAAc,IAAhD,SACE,cAAC,IAAD,UACE,cAAC,IAAD,2BAAWlO,EAAOc,QAAQZ,YAA1B,uCAGJ,oBAAOiR,MAAO,CAAEmc,UAAW,KAA3B,SACE,oBAAM5d,WAAS,EAAf,SACE,qBAAMC,MAAI,EAACC,GAAI,GAAf,UACE,cAAC,GAAD,CAA6BjP,KAAMiV,KACjCA,KAAa9U,KAAa+F,GAC1B,cAAC,GAAD,CAAa8H,cAAe7N,EAAS+F,uBAAwBA,iBC1BhEspB,GAAW,WACtB,IAAMrnB,EAAS,IAAI7H,gBAAgBC,OAAOC,SAASC,QAC7C4D,EAAO8D,EAAOzH,IAAI,QAClB+uB,EAAmBtnB,EAAOzH,IAAI,sBAE9B2Q,EAAUC,cAChB,EAAqB3G,IAAZnG,EAAT,oBACA,EAAkCsG,wBAA6B1I,GAA/D,mBAAOstB,EAAP,KAAkBC,EAAlB,KAsBA,OApBAjc,qBAAU,WACJrP,IACFvB,EAAOO,eAAeosB,GAEtB3sB,EACGsB,UAAUC,GACVurB,MAAK,SAACC,GAEL,IAAM3kB,EAAK,2BAAQ2kB,GAAR,IAAkB5rB,YAAawrB,EAAkBnsB,SAAUmsB,IACtEjrB,EAAS0G,GACTmG,EAAQye,QAAQ,QAEjBC,OAAM,SAAChuB,GACN4C,QAAQC,IAAI,gEAAiE7C,GAC7E4tB,EAAa5tB,GACbyC,OAASpC,SAGd,CAACiC,EAAMgN,IAENqe,EAEA,cAAC,GAAD,CACExV,KAAM,QACN1N,MAAO,eACP5G,QACE,yGAEFoF,QAAS,CAAC,CAAEjM,MAAO,kBAAmB0G,IAAKpG,EAAOI,MAAMF,WAAWC,KAAK,OAM5E,oBAAMuP,WAAS,EAACxC,QAAS,EAAzB,SACE,oBAAMyC,MAAI,EAACC,GAAI,GAAf,SACE,cAAC,GAAD,CAA6BjP,MAAM,SCpD9BgwB,GAAe,kBAC1B,cAAC,GAAD,CACE9V,KAAM,QACN1N,MAAO,iBACP5G,QACE,mHCEOqqB,GAAS,WACpB,OACE,eAAC,IAAD,WACE,cAAC,GAAD,CAAcrwB,OAAK,EAACJ,KAAK,IAAzB,SACE,cAAC,IAAD,CAAUwgB,GAAG,oBAEf,cAAC,GAAD,2BAAkB3gB,EAAOU,MAAMR,YAA/B,aACE,cAAC,GAAD,OAEF,cAAC,GAAD,2BAAkBF,EAAOM,aAAaJ,YAAtC,aACE,cAAC,GAAD,OAEF,cAAC,GAAD,2BAAkBF,EAAOa,mBAAmBX,YAA5C,aACE,cAAC,GAAD,OAEF,cAAC,GAAD,2BAAkBF,EAAOc,QAAQZ,YAAjC,aACE,cAAC,GAAD,OAEF,cAAC,IAAD,2BAAWF,EAAOC,SAASC,YAA3B,aACE,cAAC,GAAD,OAEF,cAAC,IAAD,2BAAWF,EAAOI,MAAMF,YAAxB,aACE,cAAC,GAAD,OAEF,cAAC,IAAD,2BAAWF,EAAOK,OAAOH,YAAzB,aACE,cAAC,GAAD,OAEF,cAAC,IAAD,UACE,cAAC,GAAD,U,+BCqBOqM,GAvDDskB,aAAY,CACxBC,WAAY,CACVvS,WAAY,CAAC,SAAU,cAAcsG,KAAK,KAC1CkM,SAAU,CAAExf,WAAY,KACxByf,GAAI,CACF/Y,SAAU,GACV1G,WAAY,KAEd0f,GAAI,CACFhZ,SAAU,GACV1G,WAAY,MAGhB3E,QAAS,CACPC,WAAY,CACVyP,QAAS,OACTxP,MAAO,QAETgO,OAAQ,CACN/K,SAAUuS,KAAK,MAEjBlK,QAAS,CACPL,KAAM,WAERR,UAAW,CACTQ,KAAM,UACNmZ,aAAc,SAIlBC,UAAW,CACTC,UAAW,CACT3kB,KAAM,CACJE,gBAAiB,SAGrB0kB,QAAS,CACP5kB,KAAM,CACJ8R,WAAY,gBACZtG,SAAU,KAGdqZ,QAAS,CACP7kB,KAAM,CACJ8kB,UAAW,kDAGfC,UAAW,CACT/kB,KAAM,CACJqe,cAAe,YCFR2G,OAtCf,WACE,MAA0BhmB,oBAAS,GAAnC,mBAAOimB,EAAP,KAAcC,EAAd,KAOA,OALAtd,qBAAU,Y1CDkB,SAACjO,GAC7B,IAAM8D,EAAe,IAAI0nB,IAAIxrB,GAAK8D,aAE5BxK,EAAQwK,EAAa7I,IAAI,2BACzB4C,EAAWiG,EAAa7I,IAAI,yBAE9B3B,GAASuE,GACX0H,EAAe,CAAEjM,QAAOuE,a0CLxB4tB,CAAe3wB,OAAOC,SAASqC,MAC/BmuB,GAAS,KACR,IAEED,EAGH,qBAAKjiB,UAAU,MAAf,SACE,cAACqiB,EAAA,EAAD,CAAevlB,MAAOA,GAAtB,SACE,cAAC,EAAD,UACE,cAAC,IAAD,CAAkBwlB,SAAU,EAA5B,SACE,cAAC,GAAD,UACE,eAAC,IAAD,WACE,sBACA,oBAAKhe,QAAS,OAAQuZ,UAAW,QAAStY,cAAe,SAAUC,eAAgB,gBAAnF,UACE,8BACE,cAAC,GAAD,IACA,4BACE,mBAAKjH,OAAO,OAAOyJ,SAAS,SAASua,EAAG,EAAGC,GAAI,EAAGlT,SAAS,OAA3D,SACE,cAAC,GAAD,WAIN,cAAC,GAAD,oBAnBG,8B,OCfrBmT,IAASxR,OACP,cAAC,IAAMyR,WAAP,UACE,cAAC,GAAD,MAEFjJ,SAASkJ,eAAe,W","file":"static/js/main.7641f10e.chunk.js","sourcesContent":["export const sampleProfileData = {\n id: '00700000003T2PGAA0',\n firstName: 'Amy',\n lastName: 'Author',\n email: 'amy.author@nyhealth.com',\n phone: '+1-844-692-4692',\n street: '123 test street',\n city: 'testville',\n state: 'NC',\n country: 'US',\n postalCode: '12345',\n timezone: 'GMT',\n pronoun: 'He_Him_His',\n gender: 'Female',\n ORCIDId: '999999',\n};\n\nexport const sampleProfilePicklistOptions = {\n timezonePicklistOptions: new Map([['GMT', 'GMT']]),\n pronounPicklistOptions: new Map([['He_Him_His', 'He/Him/His']]),\n genderPicklistOptions: new Map([['Male', 'Male']]),\n countryPicklistOptions: new Map([['US', 'United States']]),\n statePicklistOptions: new Map([['NC', 'North Carolina']]),\n};\n\nexport const sampleUserPicklistInfos = {\n picklistFieldValues: {\n TimeZoneSidKey: {\n defaultValue: 'GMT',\n values: [\n {\n label: 'GMT',\n value: 'GMT',\n },\n ],\n },\n mvn__PP_Pronoun__c: {\n defaultValue: 'He_Him_His',\n values: [\n {\n label: 'He/Him/His',\n value: 'He_Him_His',\n },\n ],\n },\n mvn__PP_Gender__c: {\n values: [\n {\n label: 'Male',\n value: 'Male',\n },\n ],\n },\n CountryCode: {\n values: [\n {\n label: 'United States',\n value: 'US',\n },\n ],\n },\n StateCode: {\n values: [\n {\n label: 'North Carolina',\n value: 'NC',\n },\n ],\n },\n },\n};\n","/**\n * Represents the React Router routes\n */\nexport const routes = {\n callback: {\n routeProps: { path: ['/services/oauth2/callback/'] },\n },\n login: {\n routeProps: { path: ['/login'] },\n },\n logout: {\n routeProps: { path: ['/logout'] },\n },\n publications: {\n routeProps: { path: ['/publications', '/publications/active', '/publications/archived'], exact: true },\n active: {\n routeProps: { path: ['/publications/active', '/publications'], exact: true },\n },\n archived: {\n routeProps: { path: ['/publications/archived'], exact: true },\n },\n },\n tasks: {\n routeProps: { path: ['/tasks'] },\n open: {\n routeProps: { path: ['/tasks/open', '/tasks'], exact: true },\n },\n closed: { routeProps: { path: ['/tasks/closed'], exact: true } },\n },\n publicationDetails: {\n routeProps: { path: ['/publications/:id([a-zA-Z0-9]{15}|[a-zA-Z0-9]{18})'] },\n },\n profile: {\n routeProps: { path: ['/profile'] },\n edit: {\n routeProps: { path: ['/profile/edit', '/profile'], exact: true },\n },\n },\n};\n\nconst instanceUrlOverride = new URLSearchParams(window.location.search).get('salesforceInstanceUrl');\n\n/**\n * Represents the Redirect URI used by the jsforce client\n */\nexport const REDIRECT_URI = window.location.origin + routes.callback.routeProps.path;\n\n/**\n * Represents the Reset Password Page API Name\n */\nexport const RESET_PASSWORD_PAGE = process.env.REACT_APP_RESET_PASSWORD_PAGE;\n\n/**\n * Represents the Salesforce Client ID\n */\nexport const CLIENT_ID = process.env.REACT_APP_PORTAL_AUTH_CLIENT_ID as string;\n\n/**\n * Represents if Multi Org is enabled\n */\nexport const ENABLE_MULTIORG = process.env.REACT_APP_ENABLE_MULTIORG === 'true';\n\n/**\n * Represents the Salesforce Instance URL\n */\nexport const INSTANCE_URL = instanceUrlOverride || (process.env.REACT_APP_PORTAL_SALESFORCE_INSTANCE_URL as string);\n","import { DocumentVersion, PackageFile } from '../typings';\nimport { client } from './client';\n\n/**\n * Converts a file to a base64 encoded string\n * @param file file to convert\n * @returns the base64 encoded string\n */\nexport const convertFileToBase64 = (file: File): Promise =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n const result = reader.result && (reader.result as string).split(',')[1];\n resolve(result);\n };\n reader.onabort = (error) => reject(error);\n reader.onerror = (error) => reject(error);\n });\n\n/**\n * Formats the Download or Checkout URL details\n * @param version the document version record\n * @returns returns the download details\n */\nexport const getDownloadDetails = (version: DocumentVersion) => {\n if (!version) {\n return {\n downloadLabel: undefined,\n handleDownload: () => {},\n hasDownloadUrl: false,\n hasCheckoutUrl: false,\n };\n }\n\n const isOffice365 = version.checkoutType === 'Office365';\n const hasDownloadUrl = version.downloadUrl !== undefined;\n const hasCheckoutUrl = version.checkoutUrl !== undefined;\n\n let downloadLabel: string;\n\n if (isOffice365) {\n downloadLabel = hasDownloadUrl ? 'Open in Office 365' : 'Checkout URL unavailable';\n } else {\n downloadLabel = hasDownloadUrl ? 'Download' : 'Download unavailable';\n }\n\n const handleDownload = async () => {\n const downloadUrl = version.downloadUrl;\n\n if (downloadUrl) {\n window.location.href = client.getDocumentDownloadUrl(downloadUrl);\n }\n };\n\n const handleCheckout = async () => {\n const checkoutUrl = version.checkoutUrl;\n\n if (checkoutUrl) {\n window.location.href = checkoutUrl;\n }\n };\n\n return { downloadLabel, handleDownload, handleCheckout, hasDownloadUrl, hasCheckoutUrl };\n};\n\n/**\n * Formats the Download or Checkout URL details\n * @param version the document version record\n * @returns returns the download details\n */\nexport const getDownloadAllDetails = (packageFiles: Array) => {\n if (!packageFiles) {\n return {\n handleDownloadAll: () => {},\n };\n }\n\n const handleDownloadAll = async () => {\n let zipFileString = '';\n for (let i = 0; i < packageFiles.length; i++) {\n zipFileString += '/' + packageFiles[i].contentDocumentId;\n }\n window.location.href = client.getDocumentAllDownloadUrl(zipFileString);\n };\n\n return { handleDownloadAll };\n};\n\n/**\n * Returns the first letters of a label to form an avatar\n * @param label the label to shorten\n * @returns the shortened label\n */\nexport const generateAvatarLetters = (label: string) => {\n if (!label) {\n return '?';\n }\n\n const segments = label\n .replace(/[^A-Za-z0-9 ]/g, '')\n .split(' ')\n .filter((item) => item);\n\n if (segments.length === 0) {\n return '?';\n } else if (segments.length === 1) {\n return segments[0].charAt(0).toUpperCase();\n } else {\n return (segments[0].charAt(0) + segments[segments.length - 1].charAt(0)).toUpperCase();\n }\n};\n\n/**\n * Returns if the string provided is an URL or not\n * @param urlString the potential url string\n * @returns returns if URL or not\n */\nexport const isValidURL = (urlString: string): string | boolean => {\n const errorMessage = 'It needs to be a valid https:// URL';\n\n try {\n const url = new URL(urlString);\n return url.protocol === 'https:' || errorMessage;\n } catch (_) {\n return errorMessage;\n }\n};\n","import jsforce from 'jsforce';\nimport { sampleUserPicklistInfos } from '../data/profile';\nimport {\n ApiConstructorOptions,\n ApiVersionResponse,\n CursorResponse,\n GetProfilePicklistOptions,\n GetProfileResponse,\n PublicationDetailOptions,\n PublicationDetailResponse,\n PublicationTaskCloseOptions,\n SupportingDocumentDownloadLinkOptions,\n SupportingDocumentDownloadLinkResponse,\n UpdateProfileRequest,\n UpdateProfileResponse,\n UploadContentVersionOptions,\n UserPicklistOptions,\n CollaboratorPortalSettingsResponse,\n} from '../typings';\nimport { CLIENT_ID, REDIRECT_URI } from './constants';\nimport { convertFileToBase64 } from './format';\n\n/**\n * Api class for sending requests\n */\nexport class Api {\n private conn: jsforce.Connection;\n private resetPasswordPage: string;\n\n constructor(opts: ApiConstructorOptions) {\n const {\n clientId,\n salesforceApiVersion = '53.0',\n loginUrl,\n redirectUri,\n instanceUrl,\n resetPasswordPage = 'mvn__SetPassword',\n } = opts;\n\n this.conn = new jsforce.Connection({ loginUrl, version: salesforceApiVersion, clientId, redirectUri, instanceUrl });\n this.resetPasswordPage = resetPasswordPage;\n }\n\n /**\n * Replaces the Login URL in the OAuth2 object\n * @param loginUrl the new login URL\n */\n updateLoginUrl = (loginUrl: string) => {\n this.conn.oauth2 = new jsforce.OAuth2({\n loginUrl,\n clientId: CLIENT_ID,\n redirectUri: REDIRECT_URI,\n });\n };\n\n /**\n * Returns the Document Download URL\n * @param idOrPath the path to the file or id\n * @returns the full URL to download the file\n */\n getDocumentDownloadUrl = (idOrPath: string) => {\n if (idOrPath.startsWith('http') && idOrPath.includes('/sfc/servlet')) {\n const index = idOrPath.indexOf('/sfc/servlet');\n return `${this.conn.instanceUrl}${idOrPath.slice(index)}`;\n } else if (idOrPath.includes('/')) {\n return `${this.conn.instanceUrl}${idOrPath}`;\n } else {\n return `${this.conn.instanceUrl}/sfc/servlet.shepherd/document/download/${idOrPath}`;\n }\n };\n\n /**\n * Returns the Zip File Document Download Url\n * @param listOfIds list of ids seperated by \"/\"\n * @returns the full URL to download the zip file\n */\n getDocumentAllDownloadUrl = (idOrPath: string) => {\n return `${this.conn.instanceUrl}/sfc/servlet.shepherd/document/download/${idOrPath}`;\n };\n\n /**\n * Get & return the token from Salesforce\n * @param code the authorization code\n * @returns the token to persist\n */\n authorize = async (code: string): Promise> => {\n await this.conn.authorize(code);\n\n return {\n instanceUrl: this.conn.instanceUrl,\n accessToken: this.conn.accessToken,\n refreshToken: this.conn.refreshToken,\n };\n };\n\n /**\n * Update the jsforce token\n * @param props the jsforce token\n */\n setToken = (props: jsforce.ConnectionOptions) => {\n this.conn = new jsforce.Connection({ ...this.conn.oauth2, ...props });\n };\n\n /**\n * Revoke the token\n */\n logout = async (): Promise => {\n try {\n await this.conn.logout();\n } catch (e) {\n console.log('Error while revoking token:', e);\n }\n\n const retUrl = encodeURIComponent(this.conn.oauth2.loginUrl);\n return `${this.conn.oauth2.loginUrl}/secur/logout.jsp?retUrl=${retUrl}`;\n };\n\n /**\n * Returns the Change Password URL\n * @returns reset password url\n */\n getChangePassword = (): string => {\n return `${this.conn.oauth2.loginUrl}/${this.resetPasswordPage}`;\n };\n\n /**\n * Returns the Authorization URL\n * @returns the url\n */\n getAuthorizationUrl = () => {\n return this.conn.oauth2.getAuthorizationUrl({ scope: 'api id web' });\n };\n\n /**\n * Executes a request to Salesforce\n * @param info\n * @returns the response\n */\n do = async (info: string | jsforce.RequestInfo) => {\n let request: string | jsforce.RequestInfo;\n const headers = { 'accept-version': localStorage.getItem('APIVersion') };\n\n if (typeof info === 'string') {\n request = { headers, method: 'GET', url: this.conn.instanceUrl + info };\n } else {\n request = { ...info, headers, url: this.conn.instanceUrl + info.url };\n }\n\n try {\n const response = await this.conn.request(request);\n return response;\n } catch (error) {\n if (error instanceof Error && error.message === 'Access Declined') {\n // window.location.href = this.getAuthorizationUrl();\n } else if (error instanceof Error && error.message === 'invalid client credentials') {\n console.log('logging the user out due to invalid client credentials');\n request = { headers, method: 'GET', url: this.conn.instanceUrl + info };\n const logoutUrl = `${this.conn.oauth2.loginUrl}/secur/logout.jsp?retUrl=${encodeURIComponent(\n this.conn.oauth2.loginUrl\n )}`;\n request.url = logoutUrl;\n return await this.conn.request(request);\n }\n throw error;\n }\n };\n\n /**\n * Returns the running user profile\n * @returns the profile\n */\n getProfile = async (): Promise => {\n const url = `/services/apexrest/mvn/pubs/profile`;\n\n return this.do(url);\n };\n\n getProfilePicklistOptions = async (): Promise => {\n const masterRecordType: string = '012000000000000AAA';\n const url = `/services/data/v53.0/ui-api/object-info/User/picklist-values/` + masterRecordType;\n // For some strange reason, the handler mock for this function refuses to return the sample data.\n // Return the sample data manually for now.\n const isJestRunning = process.env.JEST_WORKER_ID !== undefined;\n const picklistInfos: UserPicklistOptions = isJestRunning\n ? (sampleUserPicklistInfos as UserPicklistOptions)\n : await this.do(url);\n let profilePicklistOptions: GetProfilePicklistOptions = {\n timezonePicklistOptions: new Map(),\n pronounPicklistOptions: new Map(),\n genderPicklistOptions: new Map(),\n countryPicklistOptions: new Map(),\n statePicklistOptions: new Map(),\n };\n for (var timezoneOption of picklistInfos.picklistFieldValues.TimeZoneSidKey.values) {\n profilePicklistOptions.timezonePicklistOptions.set(timezoneOption.value, timezoneOption.label);\n }\n for (var pronounOption of picklistInfos.picklistFieldValues.mvn__PP_Pronoun__c.values) {\n profilePicklistOptions.pronounPicklistOptions.set(pronounOption.value, pronounOption.label);\n }\n for (var genderOption of picklistInfos.picklistFieldValues.mvn__PP_Gender__c.values) {\n profilePicklistOptions.genderPicklistOptions.set(genderOption.value, genderOption.label);\n }\n for (var countryOption of picklistInfos.picklistFieldValues.CountryCode.values) {\n profilePicklistOptions.countryPicklistOptions.set(countryOption.value, countryOption.label);\n }\n for (var stateOption of picklistInfos.picklistFieldValues.StateCode.values) {\n profilePicklistOptions.statePicklistOptions.set(stateOption.value, stateOption.label);\n }\n return profilePicklistOptions;\n };\n\n /**\n * Updates the User Profile\n * @param request the request\n * @returns the outcome\n */\n updateProfile = async (request: UpdateProfileRequest) => {\n const url = `/services/apexrest/mvn/pubs/profile`;\n const body = JSON.stringify(request);\n\n return this.do({ method: 'POST', url, body });\n };\n\n /**\n * Returns a single publication\n * @param opts the options\n * @returns the publication\n */\n getPublication = async (opts: PublicationDetailOptions): Promise => {\n const url = `/services/apexrest/mvn/pubs/publications/${encodeURIComponent(opts.id)}`;\n return this.do(url);\n };\n\n /**\n * Returns the supporting document download link\n * @param opts the options\n * @returns the download link\n */\n getSupportingDocumentDownloadLink = async (opts: SupportingDocumentDownloadLinkOptions) => {\n const publicationId = encodeURIComponent(opts.publicationId);\n const documentId = encodeURIComponent(opts.documentId);\n const url = `/services/apexrest/mvn/pubs/publications/${publicationId}/supportingDocuments/${documentId}/requestDownload`;\n\n return this.do({ method: 'POST', url, body: '' });\n };\n\n /**\n * Returns the current api version of the org and version of the portal\n * @returns the api version and version of the portal in JSON format\n */\n getApiVersion = async (): Promise => {\n if (!localStorage.getItem('APIVersion')) {\n const url = `/services/apexrest/mvn/pubs/apiVersion/`;\n const apiVersionResponse = this.do(url) as Promise;\n localStorage.setItem('APIVersion', (await apiVersionResponse).mvn__PP_Portal_API_Version__c);\n return apiVersionResponse;\n }\n\n const apiVersion = localStorage.getItem('APIVersion');\n const temp = {\n mvn__PP_isActive__c: true,\n mvn__PP_Portal_API_Version__c: apiVersion,\n mvn__PP_Pubs_API_Version__c: apiVersion,\n };\n return temp;\n };\n\n /**\n * Returns the default PP_Collaborator_Portal__mdt record of the org\n * @returns PP_Collaborator_Portal__mdt record\n */\n getPortalSettings = async (): Promise => {\n const url = `/services/apexrest/mvn/pubs/portalSettings/`;\n const portalSettingsResponse = this.do(\n url\n ) as Promise;\n localStorage.setItem(\n 'enableCheckedOutDocumentDownload',\n JSON.stringify((await portalSettingsResponse).mvn__PP_Enable_Checked_Out_Document_Download__c)\n );\n return portalSettingsResponse;\n };\n\n /**\n * Returns a cursor response\n * @param path the url path\n * @param params the options\n * @returns the cursor\n */\n list = async (path: string, params?: any): Promise> => {\n let url = `/services/apexrest/mvn/pubs/${path}${this.appendParams(params)}`;\n\n return this.do(url);\n };\n\n /**\n * Uploads a Content Version Document\n * @param opts the options\n * @returns the upload confirmation\n */\n uploadContentVersion = async (opts: UploadContentVersionOptions): Promise => {\n const params = {\n PathOnClient: opts.pathOnClient,\n ReasonForChange: opts.reasonForChange ?? '',\n VersionData: await convertFileToBase64(opts.file),\n mvn__PP_Source__c: 'Collaborator Portal',\n mvn__PP_Pending_Parenting__c: true,\n };\n\n return this.conn.sobject('ContentVersion').create(params);\n };\n\n /**\n * Closes a Task record\n * @param opts the options\n * @returns the operation outcome\n */\n closeTask = async (opts: PublicationTaskCloseOptions) => {\n const { id, verdict, comments, uploadedFiles } = opts;\n const taskId = encodeURIComponent(id);\n const url = `/services/apexrest/mvn/pubs/tasks/${taskId}/closeTask`;\n // @ts-ignore\n const revisionIds = uploadedFiles && uploadedFiles.map((file) => file.value?.id).filter((id): id is string => !!id);\n\n const body = JSON.stringify({ verdict, comments, revisionIds });\n\n return this.do({ method: 'POST', url, body });\n };\n\n /**\n * Combines URL params & returns a query string\n * @param params the query string params\n * @returns the query string\n */\n private appendParams = (params?: Record) => {\n if (!params) {\n return '';\n }\n\n const searchParams = new URLSearchParams();\n\n for (const [key, value] of Object.entries(params)) {\n searchParams.set(key, value);\n }\n\n return '?' + searchParams.toString();\n };\n}\n","import { CLIENT_ID, INSTANCE_URL } from './constants';\n\n/**\n * A customer instance configuration\n */\ntype InstanceConfiguration = {\n clientId: string;\n loginUrl: string;\n instanceUrl?: string;\n};\n\n/**\n * Returns the instance configuration, or default configuration\n * @returns the instance configuration\n */\nexport const getInstanceConfiguration = (): InstanceConfiguration => {\n const clientId = CLIENT_ID;\n const instanceUrl = INSTANCE_URL;\n const loginUrl = instanceUrl;\n\n return { clientId, loginUrl, instanceUrl };\n};\n","import { Api } from './api';\nimport { REDIRECT_URI, RESET_PASSWORD_PAGE } from './constants';\nimport { getInstanceConfiguration } from './domain-mapping';\n\nexport const client = new Api({\n ...getInstanceConfiguration(),\n redirectUri: REDIRECT_URI,\n resetPasswordPage: RESET_PASSWORD_PAGE,\n});\n","import { ConnectionOptions } from 'jsforce';\nimport { CachedSalesforceOrg } from '../typings';\n\n/**\n * Token sessionStorage key name\n */\nconst TOKEN_KEY = 'token';\nconst ORGS_KEY = 'orgs';\n\n/**\n * Persist the token to session storage\n * @param userToken OAuth2 token\n */\nexport const setToken = (userToken: Record | undefined) => {\n if (userToken) {\n localStorage.setItem(TOKEN_KEY, JSON.stringify(userToken));\n } else {\n localStorage.removeItem(TOKEN_KEY);\n }\n};\n\n/**\n * Returns token from session storage\n * @param userToken OAuth2 token\n * @returns the token\n */\nexport const getToken = () => {\n const tokenString = localStorage.getItem(TOKEN_KEY) as string;\n return JSON.parse(tokenString) as ConnectionOptions;\n};\n\n/**\n * Returns a list of cached orgs\n * @returns the orgs\n */\nexport const getOrgs = () => {\n const tokenString = localStorage.getItem(ORGS_KEY) as string;\n return (JSON.parse(tokenString) as Array) || [];\n};\n\n/**\n * Adds a new org to the cached orgs\n * @param newOrg org to add\n */\nexport const addOrg = (newOrg: CachedSalesforceOrg) => {\n let orgs = getOrgs().filter((org) => org.loginUrl !== newOrg.loginUrl);\n orgs.push(newOrg);\n\n localStorage.setItem(ORGS_KEY, JSON.stringify(orgs));\n};\n\n/**\n * Delets an cached og\n * @param key org key to delete\n */\nexport const removeOrg = (key: number) => {\n const orgs = getOrgs();\n\n if (key >= orgs.length) {\n throw Error('This org key does not exist.');\n }\n\n orgs.splice(key, 1);\n localStorage.setItem(ORGS_KEY, JSON.stringify(orgs));\n};\n","import { createContext, useContext, useState } from 'react';\nimport jsforce from 'jsforce';\nimport { client } from '../utils/client';\nimport * as actions from '../utils/persist';\nimport { getInstanceConfiguration } from '../utils/domain-mapping';\n\nconst AuthContext = createContext(undefined as any);\n\nexport const useToken = () => useContext(AuthContext);\n\nconst AuthProvider = (props: any) => {\n const getToken = (): jsforce.ConnectionOptions => {\n const userToken = actions.getToken();\n\n if (userToken) {\n client.setToken({ ...getInstanceConfiguration(), ...userToken });\n }\n\n return userToken;\n };\n\n const [token, setToken] = useState(getToken());\n\n const saveToken = (userToken: Record) => {\n actions.setToken(userToken);\n setToken(userToken);\n };\n\n return ;\n};\n\nexport default AuthProvider;\n","import { createContext, useContext, useState } from 'react';\nimport { CachedSalesforceOrg } from '../typings';\nimport * as actions from '../utils/persist';\n\ntype OrgsContextType = [Array, (org: CachedSalesforceOrg) => void, (key: number) => void];\n\nexport const OrgsContext = createContext([[], () => {}, () => {}]);\n\nexport const useOrgs = () => useContext(OrgsContext);\n\n/**\n * Parses the URL and injects if an org is found\n * @param url the url to parse\n */\nexport const injectLoginUrl = (url: string) => {\n const searchParams = new URL(url).searchParams;\n\n const label = searchParams.get('salesforceInstanceLabel');\n const loginUrl = searchParams.get('salesforceInstanceUrl');\n\n if (label && loginUrl) {\n actions.addOrg({ label, loginUrl });\n }\n};\n\nconst OrgsProvider = (props: any) => {\n const getOrgs = (): Array => {\n return actions.getOrgs();\n };\n\n const [orgs, setOrgs] = useState>(getOrgs());\n\n const addOrg = (org: CachedSalesforceOrg) => {\n actions.addOrg(org);\n setOrgs(getOrgs());\n };\n\n const removeOrg = (key: number) => {\n actions.removeOrg(key);\n setOrgs(getOrgs());\n };\n\n return ;\n};\n\nexport default OrgsProvider;\n","import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.paper,\n },\n appBar: {\n backgroundColor: theme.palette.background.paper,\n },\n menuButton: {\n marginRight: theme.spacing(2),\n },\n title: {\n flexGrow: 1,\n },\n selectedItem: {\n color: '#0050C8',\n borderBottomWidth: 3,\n borderBottomStyle: 'solid',\n borderBottomColor: '#0050C8',\n borderRadius: 0,\n height: 64,\n },\n unselectedItem: {\n color: '#71899F',\n height: 64,\n },\n komodoProfileButton: {\n color: '#3DBEE2',\n borderBottomWidth: 3,\n borderBottomStyle: 'solid',\n borderBottomColor: '#0050C8',\n borderRadius: 0,\n height: 64,\n },\n homeLink: {\n marginRight: theme.spacing(4),\n },\n })\n);\n","import { Button, Grid, TextField, Theme, Select, MenuItem, InputLabel } from '@material-ui/core';\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\nimport { useSnackbar } from 'notistack';\nimport { useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { GetProfilePicklistOptions, GetProfileResponse } from '../../typings';\nimport { client } from '../../utils/client';\n\nexport const labels = {\n fieldRequired: 'This field is required.',\n invalidEmail: 'This needs to be a valid email.',\n};\n\nconst EMAIL_REGEX = /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,10}$/;\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n margin: theme.spacing(3),\n },\n actions: {\n '& > *': {\n marginTop: theme.spacing(3),\n marginBottom: theme.spacing(3),\n marginLeft: theme.spacing(1),\n },\n },\n })\n);\n\ntype ProfileFormProps = {\n defaultValues: GetProfileResponse;\n profilePicklistOptions: GetProfilePicklistOptions;\n};\n\nexport const ProfileForm = (props: ProfileFormProps) => {\n const { enqueueSnackbar } = useSnackbar();\n const [editMode, setEditMode] = useState(false);\n const classes = useStyles();\n const { register, formState, handleSubmit, reset } = useForm({\n defaultValues: props.defaultValues,\n });\n const { errors } = formState;\n\n const onSubmit = async (data: GetProfileResponse) => {\n try {\n await client.updateProfile(data);\n enqueueSnackbar('Profile has been updated.', { variant: 'success' });\n setEditMode(false);\n } catch (error) {\n if (`${error}`.includes('FIELD_INTEGRITY_EXCEPTION')) {\n enqueueSnackbar(\n `A field integrity exception was thrown when updating the profile. Check dependent picklists and validation rules`,\n { variant: 'error' }\n );\n } else {\n enqueueSnackbar(`An error occured when updating the profile: ${error}`, { variant: 'error' });\n }\n }\n };\n\n const onError = (e: any) => console.log('error', e);\n\n const handleChangePassword = () => {\n window.location.href = client.getChangePassword();\n };\n\n const createSelectOptionsFromMap = (selectOption: Map) => {\n let menuItems = [];\n for (let [key, value] of selectOption) {\n menuItems.push({value});\n }\n return menuItems;\n };\n\n const labelStyle = 'MuiFormLabel-colorSecondary MuiInputLabel-shrink';\n\n return (\n <>\n
\n \n \n \n First Name *\n \n \n \n \n \n Last Name *\n \n \n \n \n \n \n \n Email Address *\n \n \n \n \n \n Phone Number\n \n \n \n \n \n \n \n Street\n \n \n \n \n \n City\n \n \n \n \n \n \n \n State\n \n \n --None--\n {createSelectOptionsFromMap(props.profilePicklistOptions.statePicklistOptions)}\n \n \n \n \n Country\n \n \n --None--\n {createSelectOptionsFromMap(props.profilePicklistOptions.countryPicklistOptions)}\n \n \n \n \n \n \n Postal Code\n \n \n \n \n \n Timezone\n \n \n {createSelectOptionsFromMap(props.profilePicklistOptions.timezonePicklistOptions)}\n \n \n \n \n \n \n Preferred Pronouns\n \n \n --None--\n {createSelectOptionsFromMap(props.profilePicklistOptions.pronounPicklistOptions)}\n \n \n \n \n Gender\n \n \n --None--\n {createSelectOptionsFromMap(props.profilePicklistOptions.genderPicklistOptions)}\n \n \n \n \n \n \n ORCID Id\n \n \n \n \n
\n \n Change Password\n \n {!editMode && (\n \n )}\n {editMode && (\n <>\n {\n reset();\n setEditMode(false);\n }}\n >\n Cancel\n \n \n \n )}\n
\n
\n \n );\n};\n","import { AppBar as MUIAppBar, Button, Container, Link, Menu, MenuItem, Toolbar } from '@material-ui/core';\nimport { AccountCircle, ExpandMore } from '@material-ui/icons';\nimport React from 'react';\nimport { useHistory, useRouteMatch } from 'react-router-dom';\nimport { useToken } from '../../hooks/useToken';\nimport { ENABLE_MULTIORG, routes } from '../../utils/constants';\nimport { ChangeOrg } from '../ChangeOrg/ChangeOrg';\nimport { useStyles } from './styles';\n\nconst menuOptions = [\n {\n label: 'My Publications',\n paths: routes.publications.routeProps.path,\n items: [\n {\n label: 'Active',\n path: routes.publications.active.routeProps.path[0],\n },\n {\n label: 'Archived',\n path: routes.publications.archived.routeProps.path[0],\n },\n ],\n },\n {\n label: 'My Tasks',\n paths: routes.tasks.routeProps.path,\n items: [\n { label: 'Open', path: routes.tasks.open.routeProps.path[0] },\n { label: 'Closed', path: routes.tasks.closed.routeProps.path[0] },\n ],\n },\n];\n\nconst profileOptionsRoutes = [routes.profile.routeProps.path[0], routes.logout.routeProps.path[0]];\n\nconst profileOptions = [\n {\n label: '',\n paths: profileOptionsRoutes,\n masterIcon: ,\n items: [\n {\n label: 'Profile Settings',\n path: routes.profile.routeProps.path[0],\n },\n {\n label: 'Log Out',\n path: routes.logout.routeProps.path[0],\n },\n ],\n },\n];\n\nexport const AppBar = () => {\n const classes = useStyles();\n\n const [token] = useToken();\n const history = useHistory();\n\n return (\n \n \n \n
\n \n {'Komodo\n \n
\n
\n {!!token &&\n menuOptions.map(({ label, items, paths }, key) => (\n ({\n label: item.label,\n onClick: () => history.push(item.path),\n }))}\n />\n ))}\n
\n {ENABLE_MULTIORG && }\n {!!token &&\n profileOptions.map(({ label, items, paths, masterIcon }, key) => (\n ({\n label: item.label,\n onClick: () => history.push(item.path),\n }))}\n />\n ))}\n\n {/* {!token && (\n \n )} */}\n
\n
\n
\n );\n};\n\ninterface MenuButtonProps {\n label: string;\n selected?: boolean;\n paths: string[];\n masterIcon?: JSX.Element;\n menuItems: Array<{ onClick: () => void; selected?: boolean; label: string }>;\n}\n\nconst MenuButton = (props: MenuButtonProps) => {\n const classes = useStyles();\n const { label, menuItems, paths, masterIcon } = props;\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n const handleClick = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const isPathMatch = !!useRouteMatch(paths);\n\n return (\n <>\n }\n style={{ fontWeight: 'bold' }}\n >\n {masterIcon}\n {label}\n \n \n {menuItems?.map((menuItem) => (\n {\n menuItem.onClick();\n handleClose();\n }}\n >\n {menuItem.label}\n \n ))}\n \n \n );\n};\n","import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n background: 'white',\n paddingTop: theme.spacing(2),\n paddingBottom: theme.spacing(2),\n },\n section: {\n display: 'flex',\n alignItems: 'center',\n '& > *': {\n color: '#71899F',\n },\n },\n footerText: {\n color: '#71899F',\n },\n })\n);\n","import { Box, Button, Container } from '@material-ui/core';\nimport { useStyles } from './styles';\nimport { useEffect } from 'react';\nimport { useAsyncFn } from 'react-use';\nimport { client } from '../../utils/client';\nimport { useToken } from '../../hooks/useToken';\nexport const AppFooter = () => {\n const classes = useStyles();\n const [token] = useToken();\n const [{ value: response, error }, doGetApiVersion] = useAsyncFn(() => client.getApiVersion());\n useEffect(() => {\n if (token) {\n doGetApiVersion();\n }\n }, [token, doGetApiVersion]);\n return (\n \n \n \n \n © Komodo Health, Inc.\n \n {!error && response && (\n \n {response.mvn__PP_Portal_API_Version__c}\n \n \n )}\n {error && }\n \n \n Privacy Notice\n \n \n Terms of Service\n \n \n \n \n \n );\n};\n","import { Backdrop, BackdropProps, CircularProgress } from '@material-ui/core';\n\n/**\n * @description Renders a indeterminate circular progress bar centered in a backdrop.\n * Note: To contain backdrop in parent, parent must have css style `position: 'relative;`\n */\nconst BackdroppedCircularProgress = (props: BackdropProps) => (\n \n \n \n);\n\nexport default BackdroppedCircularProgress;\n","import { createStyles, makeStyles } from '@material-ui/core/styles';\n\nconst styles = makeStyles((theme) =>\n createStyles({\n dropzoneRoot: {\n textAlign: 'center',\n height: '147px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n border: '1px dashed #D4D4D4',\n borderRadius: '3px',\n backgroundColor: '#FFFFFF',\n color: '#bdbdbd',\n cursor: 'pointer',\n },\n\n uploadedFilesContainer: {\n '& > *:not(:last-child)': {\n marginBottom: theme.spacing(1),\n },\n },\n })\n);\n\nexport default styles;\n","import { CircularProgress, IconButton, Typography } from '@material-ui/core';\nimport { useTheme } from '@material-ui/core/styles';\nimport { Close as CloseIcon } from '@material-ui/icons';\nimport jsforce from 'jsforce';\nimport { useSnackbar } from 'notistack';\nimport { useCallback, useEffect } from 'react';\nimport { DropzoneOptions, useDropzone } from 'react-dropzone';\nimport { useAsync } from 'react-use';\nimport { FileIcon, UploadIcon } from '..';\nimport { client } from '../../utils/client';\nimport useStyles from './styles';\n\nexport type FileUploadItem = {\n file: File;\n loading: boolean;\n value?: jsforce.RecordResult;\n error?: Error;\n};\n\ninterface UploadedFileProps {\n file: File;\n disabled: boolean;\n handleRemoveFile: (fileName: string) => void;\n handleFileUploadStateChange: (state: FileUploadItem) => void;\n}\n\n/**\n * @description Renders a file and uploads SF ContentVersion. Updates parent state via `handlefileUploadStateChange`\n *\n */\nconst UploadedFile = (props: UploadedFileProps) => {\n const theme = useTheme();\n const { file, disabled, handleRemoveFile, handleFileUploadStateChange } = props;\n\n const { loading, value, error } = useAsync(() => {\n return client.uploadContentVersion({\n contentDocumentId: '',\n file,\n pathOnClient: file.name,\n reasonForChange: '',\n });\n });\n\n useEffect(() => {\n handleFileUploadStateChange({ file, loading, value, error });\n }, [loading, value, file, error, handleFileUploadStateChange]);\n\n return (\n \n
\n \n
\n \n {file.name}\n \n {loading && }\n handleRemoveFile(file.name)}\n >\n \n \n \n );\n};\n\nexport interface DragAndDropZoneProps {\n disabled: boolean;\n uploadedFiles: Array;\n setUploadedFiles: React.Dispatch>>;\n}\n\n/**\n * @description Renders modal allowing user to complete a Task.\n *\n */\nexport const DragAndDropZone = (props: DragAndDropZoneProps) => {\n const { uploadedFiles, disabled, setUploadedFiles } = props;\n\n const { enqueueSnackbar } = useSnackbar();\n const classes = useStyles();\n const theme = useTheme();\n\n const onDrop = useCallback['onDrop']>(\n (acceptedFiles) => {\n setUploadedFiles((uploadedFiles) => [\n ...uploadedFiles,\n ...acceptedFiles.map((file) => ({ file, loading: true, value: undefined })),\n ]);\n },\n [setUploadedFiles]\n );\n\n const { getRootProps, getInputProps, isDragActive, inputRef } = useDropzone({\n onDrop,\n multiple: true,\n });\n\n const handleRemoveFile = useCallback(\n (fileName: string) => {\n setUploadedFiles((uploadedFiles) => uploadedFiles.filter((file) => file.file.name !== fileName));\n\n // should always be true, but we check to appease tslint\n if (inputRef?.current?.files?.length) {\n // we remove the file from the input to prevent memory leaks\n const dt = new DataTransfer();\n\n for (const file of Array.from(inputRef?.current?.files ?? [])) {\n file.name !== fileName && dt.items.add(file);\n }\n\n inputRef.current.files = dt.files;\n }\n },\n [inputRef, setUploadedFiles]\n );\n\n const handleFileUploadStateChange = useCallback(\n (state) => {\n if (state.error) {\n handleRemoveFile(state.file.name);\n enqueueSnackbar(`An error occured when uploading:\\n${state.error.message}`, { variant: 'error' });\n } else {\n setUploadedFiles((uploadedFiles) => {\n return uploadedFiles.map((uploadedFile) =>\n uploadedFile.file.name === state.file.name ? state : uploadedFile\n );\n });\n }\n },\n [handleRemoveFile, setUploadedFiles]\n );\n\n return (\n <>\n
\n \n \n {isDragActive ? (\n Drop the files here ...\n ) : (\n Drop files here or click to upload\n )}\n
\n\n {!!uploadedFiles.length && (\n
\n {uploadedFiles.map((file) => (\n \n ))}\n
\n )}\n \n );\n};\n","import { createStyles, makeStyles } from '@material-ui/core/styles';\n\nconst styles = makeStyles((theme) =>\n createStyles({\n dialogPaper: {\n width: 'clamp(400px, 60vw, 749px)',\n // override mui's maxWidth\n maxWidth: 'clamp(400px, 60vw, 749px)',\n padding: theme.spacing(3),\n '& > *:not(:last-child)': {\n marginBottom: theme.spacing(2),\n },\n },\n buttonsSection: {\n display: 'flex',\n justifyContent: 'flex-end',\n },\n cancelButton: {\n marginRight: theme.spacing(2),\n },\n rejectButton: {\n borderColor: theme.palette.error.main,\n color: theme.palette.error.main,\n marginRight: theme.spacing(2),\n },\n inputLabelRoot: {\n fontSize: '14px',\n // replace primary color on hover\n '&.Mui-focused:not(.Mui-error)': { color: theme.palette.text.secondary },\n // replace error color\n '&.Mui-error': { color: theme.palette.text.secondary },\n },\n wrapper: {\n position: 'relative',\n },\n buttonProgress: {\n color: theme.palette.primary.main,\n position: 'absolute',\n top: '50%',\n left: '50%',\n marginTop: -12,\n marginLeft: -12,\n },\n })\n);\n\nexport default styles;\n","import { Button, CircularProgress, Dialog, FormControl, TextField, Typography } from '@material-ui/core';\nimport { useSnackbar } from 'notistack';\nimport { useState } from 'react';\nimport { PublicationTask, TaskCloseVerdicts } from '../../typings';\nimport { client } from '../../utils/client';\nimport { DragAndDropZone, FileUploadItem } from '../DragAndDropZone';\nimport useStyles from './styles';\n\nconst placeholder =\n 'Enter a Comment (optional) e.g. I fixed a typo and provided my comments in the latest document draft.';\n\ntype CompleteTaskModalProps = {\n task: PublicationTask;\n open: boolean;\n onClose: () => any;\n onTaskComplete: () => any;\n};\n\n/**\n * @description Renders modal allowing user to complete a Task.\n * @param props the component properties\n */\nexport const CompleteTaskModal = (props: CompleteTaskModalProps) => {\n const [loading, setLoading] = useState(false);\n const { open, onClose, onTaskComplete, task } = props;\n const { enqueueSnackbar } = useSnackbar();\n const classes = useStyles();\n\n const [uploadedFiles, setUploadedFiles] = useState>([]);\n const [comments, setComments] = useState(task.comments);\n const [commentsError, setCommentsError] = useState();\n\n const isLoadingFiles = uploadedFiles.some((file) => file.loading);\n\n const { showAgreeButton, showApprovalButtons, showComments, showCompleteButton, showUpload, showConsentLanguage } =\n getTypesRenderingOptions(task.type);\n\n /**\n * Handles when a user updates the comment field\n * @param event the comment change event\n */\n const handleChangeComment: React.ChangeEventHandler = (event) => {\n const newComment = event.target.value;\n\n if (!comments && newComment) {\n setCommentsError(undefined);\n }\n\n setComments(newComment);\n };\n\n /**\n * Handles when a user click the Cancel button\n */\n const handleCancel = () => {\n onClose();\n };\n\n /**\n * Closes the task with an \"Reject\" status\n */\n const handleReject = async () => {\n if (!comments) {\n setCommentsError('You must set a comment when rejecting.');\n return;\n }\n\n await handleClose('REJECTED');\n };\n\n /**\n * Closes the task with an \"Complete\" status\n */\n const handleComplete = async () => {\n await handleClose('COMPLETED');\n };\n\n /**\n * Closes the task with an \"Approved\" status\n */\n const handleApprove = async () => {\n await handleClose('APPROVED');\n };\n\n /**\n * Generic method handling when any task type is closed\n * @param verdict the task close verdict\n */\n const handleClose = async (verdict: TaskCloseVerdicts) => {\n try {\n setLoading(true);\n await client.closeTask({ id: props.task.id, comments, uploadedFiles, verdict });\n enqueueSnackbar('Task has been closed.', { variant: 'success' });\n onTaskComplete();\n } catch (error) {\n enqueueSnackbar(`An error occured when closing the task: ${error}`, { variant: 'error' });\n } finally {\n setLoading(false);\n }\n };\n\n const buttonDisabled = loading || isLoadingFiles;\n\n return (\n \n \n {task.subject}\n \n {task.directions}\n\n {showConsentLanguage && task.consentLanguage && (\n \n
\n \n )}\n\n {showComments && (\n \n \n \n )}\n\n {showUpload && (\n \n )}\n\n
\n
\n \n Cancel\n \n
\n {showAgreeButton && (\n \n {isLoadingFiles ? 'Uploading...' : 'Agree'}\n \n )}\n {showCompleteButton && (\n
\n \n {isLoadingFiles ? 'Uploading...' : 'Complete'}\n \n {loading && }\n
\n )}\n {showApprovalButtons && (\n <>\n \n {isLoadingFiles ? 'Uploading...' : 'Reject'}\n \n \n {isLoadingFiles ? 'Uploading...' : 'Approve'}\n \n \n )}\n
\n
\n );\n};\n\n/**\n * Returns if components should be displayed or hidden based on Task Type\n * @param taskType the task type\n * @returns the show/hide values\n */\nconst getTypesRenderingOptions = (taskType: string) => {\n let options = {\n showAgreeButton: false,\n showComments: false,\n showUpload: false,\n showCompleteButton: false,\n showConsentLanguage: false,\n showApprovalButtons: false,\n };\n\n switch (taskType) {\n case 'PP_Consent':\n options.showAgreeButton = true;\n options.showConsentLanguage = true;\n break;\n case 'CM_Approval':\n options.showUpload = true;\n options.showComments = true;\n options.showApprovalButtons = true;\n break;\n case 'CM_Review':\n case 'PP_General':\n options.showUpload = true;\n options.showComments = true;\n options.showCompleteButton = true;\n break;\n default:\n options.showUpload = true;\n options.showComments = true;\n options.showCompleteButton = true;\n }\n\n return options;\n};\n","import { createStyles, makeStyles } from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) =>\n createStyles({\n card: {\n padding: theme.spacing(2),\n },\n cardContent: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n cardIcon: {\n marginBottom: theme.spacing(1.5),\n },\n cardActions: {\n justifyContent: 'center',\n marginBottom: theme.spacing(1.5),\n },\n })\n);\n","import { Button, Card, CardActions, CardContent, Typography } from '@material-ui/core';\nimport { useEffect } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { routes } from '../../utils/constants';\nimport { useStyles } from './styles';\n\ntype ActionProps = {\n label: string;\n url: string;\n};\n\ntype EmptyContainerProps = {\n icon: 'check' | 'empty' | 'login' | 'error';\n title?: string;\n message: string | React.ReactNode;\n actions?: Array;\n};\n\nexport const EmptyContainer = (props: EmptyContainerProps) => {\n const classes = useStyles();\n const history = useHistory();\n\n const handleAction = (url: string) => {\n history.push(url);\n };\n\n useEffect(() => {\n if (typeof props.message === 'string' && props.message.includes('Access Declined')) {\n history.push(routes.logout.routeProps.path[0]);\n }\n }, []);\n\n return (\n \n \n {props.icon === 'error' && }\n {props.icon === 'check' && }\n {props.icon === 'empty' && }\n {props.icon === 'login' && }\n {props.title && (\n \n {props.title}\n \n )}\n {props.message}\n \n {props.actions && (\n \n {props.actions.map((action) => (\n \n ))}\n \n )}\n \n );\n};\n\nconst ErrorIcon = () => {\n const classes = useStyles();\n\n return (\n \n \n \n \n \n );\n};\n\nconst CheckIcon = () => {\n const classes = useStyles();\n\n return (\n \n \n \n \n );\n};\n\nconst EmptyIcon = () => {\n const classes = useStyles();\n\n return (\n \n \n \n \n );\n};\n\nconst LoginIcon = () => {\n const classes = useStyles();\n\n return (\n \n \n \n \n \n );\n};\n","import {\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TableSortLabel,\n Typography,\n} from '@material-ui/core';\nimport { createStyles, darken, makeStyles, useTheme } from '@material-ui/core/styles';\nimport { ReactElement } from 'react';\n\ninterface Header {\n field: string;\n label: string;\n sortable: boolean;\n}\ninterface DataItem {\n [key: string]: number | string | ReactElement;\n key: string;\n}\n\nexport type SortDirection = 'asc' | 'desc';\n\nexport interface EnhancedTableProps {\n headers: Array
;\n data: Array;\n sortDirection: SortDirection;\n sortFieldName: string;\n onSortClick: (field: string, direction: SortDirection) => void;\n}\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n tableHead: {\n backgroundColor: '#FFFFFF',\n color: '#000000',\n },\n tableHeadCell: {\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.25),\n paddingLeft: theme.spacing(2.5),\n paddingRight: theme.spacing(2.5),\n '&:not(:last-child)': {\n borderRight: `1px solid ${darken('rgba(224, 224, 224, 1)', 0.03)}`,\n },\n },\n tableBodyCell: {\n '&:not(:last-child)': {\n borderRight: '1px solid rgba(224, 224, 224, 1)',\n },\n },\n tableBodyRow: {\n '&:nth-child(odd)': {\n color: '#000000',\n backgroundColor: theme.palette.background.default,\n },\n '&:nth-child(even)': {\n color: '#000000',\n backgroundColor: darken(theme.palette.background.default, 0.03),\n },\n },\n })\n);\n\n/**\n * @description\n * Component for rendering a material ui table enhacned with sortability and custom styles\n *\n * @example\n * {\n * this.sortData(field, direction);\n * this.setField(field);\n * this.setDirection(direction);\n * }}\n * />\n *\n */\nconst EnhancedTable = (props: EnhancedTableProps) => {\n const theme = useTheme();\n const { headers, data, sortFieldName, sortDirection, onSortClick } = props;\n const createSortClickHandler = (field: string) => (event: React.MouseEvent) => {\n const isAsc = sortFieldName === field && sortDirection === 'desc';\n onSortClick(field, isAsc ? 'asc' : 'desc');\n };\n\n const classes = useStyles();\n\n return (\n \n \n \n \n {headers.map((header) => (\n \n \n \n {header.label}\n \n \n \n ))}\n \n \n \n {data.map((row) => (\n \n {headers.map((header) => (\n \n {row[header.field]}\n \n ))}\n \n ))}\n \n
\n
\n );\n};\n\nexport default EnhancedTable;\n","import { useTheme } from '@material-ui/core/styles';\n\ninterface DownloadIconProps {\n stroke?: string;\n size?: string | number;\n}\n\n/**\n * Renders a Download Icon\n * @param props renderings properties\n * @returns the DownloadIcon component\n */\nexport const DownloadIcon = (props: DownloadIconProps) => {\n const theme = useTheme();\n const { stroke = theme.palette.primary.main, size = 14 } = props;\n\n return (\n \n \n \n \n \n );\n};\n","const normalizeFileExtension = (ext: string) => (ext[0] === '.' ? ext.substr(1) : ext).toUpperCase();\n\nconst labelColorByFileExtension: { [key: string]: string | undefined } = {\n DOC: '#107cad',\n DOCX: '#107cad',\n XLS: '#45b058',\n XLSX: '#45b058',\n PPTX: '#e34221',\n PPT: '#e34221',\n PNG: '#49c9a7',\n JPG: '#49c9a7',\n ZIP: '#8199af',\n PDF: '#8c181a',\n};\nconst getLabelColorFromExtension = (extension: string) => {\n return labelColorByFileExtension[extension] ?? '#8199af';\n};\n\ninterface FileIconProps {\n fileExtension: string; // used to determine label and color. `.zip | zip`\n size?: number; // height and width of svg\n alternateText?: string; // optional alt text displays on hover\n}\n/**\n * @description Renders a File icon svg. Can customize label text, label color, and size of the File icon svg.\n *\n * @example\n * \n *\n */\nexport const FileIcon = (props: FileIconProps) => {\n const { fileExtension, size = 40, alternateText = '' } = props;\n\n let normalizedExtension: string;\n\n if (fileExtension) {\n normalizedExtension = normalizeFileExtension(fileExtension);\n } else {\n normalizedExtension = '?';\n }\n\n const labelColor = getLabelColorFromExtension(normalizedExtension);\n\n return (\n \n {alternateText}\n \n \n \n \n \n\n \n \n {normalizedExtension}\n \n \n );\n};\n","import { useTheme } from '@material-ui/core/styles';\n\ninterface UploadIconProps {\n stroke?: string;\n size?: string | number;\n}\n\nexport const UploadIcon = (props: UploadIconProps) => {\n const theme = useTheme();\n const { stroke = theme.palette.primary.main, size = 14 } = props;\n\n return (\n \n \n \n \n \n );\n};\n","import { Grid, Typography } from '@material-ui/core';\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\nimport { Skeleton } from '@material-ui/lab';\nimport React from 'react';\nimport { OverflowTooltip } from '.';\n\nconst useStyles = makeStyles((theme) =>\n createStyles({ text: { whiteSpace: 'nowrap', textOverflow: 'ellipsis', overflow: 'hidden' } })\n);\n\nexport interface LabeledListProps {\n loading: boolean;\n items: Array<{ label: string; value: string | number | undefined }>;\n}\n\n/**\n * @description Renders a vertical list of labels and values.\n *\n * @example\n * \n *\n */\nconst LabeledList = (props: LabeledListProps) => {\n const classes = useStyles();\n const { items, loading } = props;\n\n return (\n \n {items.map((item) => (\n \n \n \n \n {item.label}\n \n \n \n \n {loading && }\n {!loading && (\n \n \n {item.value && item.value}\n {!item.value && }\n \n \n )}\n \n \n ))}\n \n );\n};\n\nexport default LabeledList;\n","import { Tooltip, Typography } from '@material-ui/core';\nimport React, { useEffect, useRef, useState } from 'react';\n\ninterface Props {\n tooltip: string | number;\n children: JSX.Element;\n}\n\n/**\n * @description Renders a tooltip on hover if child element is overflowing horizontally.\n * Inspired by: https://stackoverflow.com/a/62150782/1833014\n *\n * @example\n * \n * This is text which may display a tooltip on hover\n * \n *\n */\nconst OverflowTooltip = (props: Props) => {\n const textElementRef = useRef(null);\n\n const checkOverflow = () => {\n const hasOverflow = (textElementRef?.current?.scrollWidth ?? 0) > (textElementRef?.current?.clientWidth ?? 0);\n\n setHoverListener(hasOverflow);\n };\n\n useEffect(() => {\n checkOverflow();\n window.addEventListener('resize', checkOverflow);\n return () => {\n window.removeEventListener('resize', checkOverflow);\n };\n }, []);\n\n const [hoverListener, setHoverListener] = useState(false);\n\n const childElement = React.Children.only(props.children);\n\n return (\n {props.tooltip}}\n interactive\n disableHoverListener={!hoverListener}\n >\n {React.cloneElement(childElement, { ref: textElementRef })}\n \n );\n};\n\nexport default OverflowTooltip;\n","import { Redirect, Route, RouteProps } from 'react-router-dom';\nimport { useToken } from '../hooks/useToken';\nimport { routes } from '../utils/constants';\n\n/**\n * Protects routes that require a token\n * @param props the route properties\n * @returns renders the route or redirects the user\n */\nexport const PrivateRoute = (props: RouteProps) => {\n const { children, ...rest } = props;\n const [token] = useToken();\n\n return (token ? children : )} />;\n};\n","import { createStyles, makeStyles } from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) =>\n createStyles({\n actionButton: {\n fontFamily: 'DMSans-Medium',\n justifyContent: 'space-between',\n },\n cardTitle: {\n marginRight: theme.spacing(2),\n },\n cardTitleAnchor: {\n fontFamily: 'DMSans',\n color: '#111111',\n '&:hover': {\n color: theme.palette.primary.main,\n textDecoration: 'none',\n },\n },\n cardText: {\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n },\n cardDivider: {\n backgroundColor: '#F2F2F2',\n },\n })\n);\n","import { Box, Button, Card, CardActions, CardContent, Divider, Link, Typography } from '@material-ui/core';\nimport { ArrowForwardIos as ArrowForwardIosIcon } from '@material-ui/icons';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { LabeledList, OverflowTooltip, StatusLabel } from '../';\nimport { useStyles } from './styles';\n\ntype PublicationCardProps = {\n id: string;\n loading: boolean;\n fullyQualifiedName: string;\n productName: string;\n documentNumber: string;\n documentType: string;\n documentSubtype: string;\n targetName: string;\n targetDate: string;\n openTaskCount: number;\n statusColor: string;\n statusLabel: string;\n status: string;\n};\n\nexport const PublicationCard = (props: PublicationCardProps) => {\n const classes = useStyles();\n\n const {\n id,\n loading,\n fullyQualifiedName,\n productName,\n documentNumber,\n documentType,\n documentSubtype,\n targetName,\n targetDate,\n openTaskCount,\n statusLabel,\n status,\n statusColor,\n } = props;\n\n const url = `/publications/${id}`;\n return (\n \n \n \n \n \n \n {fullyQualifiedName}\n \n \n \n \n \n \n \n \n \n }\n fullWidth\n color=\"secondary\"\n className={classes.actionButton}\n >\n {openTaskCount} Open Task{openTaskCount === 1 ? '' : 's'}\n \n \n \n );\n};\n","import { useEffect } from 'react';\nimport { client } from '../utils/client';\nimport { ENABLE_MULTIORG } from '../utils/constants';\nimport { EmptyContainer } from './';\n\n/**\n * Redirects the running user to the authorization url\n * @returns the component\n */\nexport const RedirectToLogin = () => {\n useEffect(() => {\n if (!ENABLE_MULTIORG) {\n window.location.href = client.getAuthorizationUrl();\n }\n }, []);\n\n if (!ENABLE_MULTIORG) {\n return ;\n } else {\n return (\n \n );\n }\n};\n","import { Chip } from '@material-ui/core';\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\n\n// sourced from here:\n// https://github.com/mavens/P-PLTFM-Core/blob/develop/packages/mvn-content/main/default/lwc/cmDocumentStatusBadge/cmDocumentStatusBadge.css\nconst useStyles = makeStyles(() =>\n createStyles({\n blue: {\n background: '#195594',\n color: 'white',\n },\n darkBlue: {\n background: '#16325c',\n color: 'white',\n },\n lightBlue: {\n background: '#d8edff',\n color: '#080707',\n },\n orange: {\n background: '#ff9e2c',\n color: 'white',\n },\n green: {\n background: '#04844b',\n color: 'white',\n },\n red: {\n background: '#c23934',\n color: 'white',\n },\n grey: {\n background: '#ecebea',\n color: '#080707',\n },\n })\n);\n\ninterface StatusLabelProps {\n status: string;\n label: string;\n color: string;\n style?: any;\n}\n\nexport const StatusLabel = (props: StatusLabelProps) => {\n const { label, color, style } = props;\n\n const classes = useStyles();\n\n let classNames;\n\n switch (color) {\n case 'blue':\n classNames = classes.blue;\n break;\n case 'dark-blue':\n classNames = classes.darkBlue;\n break;\n case 'light-blue':\n classNames = classes.lightBlue;\n break;\n case 'orange':\n classNames = classes.orange;\n break;\n case 'green':\n classNames = classes.green;\n break;\n case 'red':\n classNames = classes.red;\n break;\n case 'grey':\n classNames = classes.grey;\n break;\n }\n\n return ;\n};\n","import { useEffect } from 'react';\nimport { useToken } from '../hooks/useToken';\nimport { client } from '../utils/client';\nimport { EmptyContainer } from './';\n\n/**\n * Redirects the running user to the authorization url\n * @returns the component\n */\nexport const RedirectToLogout = () => {\n const [, setToken] = useToken();\n\n useEffect(() => {\n handleLogout();\n });\n\n const handleLogout = async () => {\n let logoutUrl = '/';\n\n try {\n logoutUrl = await client.logout();\n } catch (e) {\n console.log('error while revoking token', e);\n } finally {\n setToken(undefined);\n window.location.href = logoutUrl;\n }\n };\n\n return ;\n};\n","import { CircularProgress } from '@material-ui/core';\n\ntype InfiniteScrollProps = {\n hasMore: boolean;\n loadMoreRef: React.LegacyRef;\n};\n\nexport const InfiniteScroll = ({ hasMore, loadMoreRef }: InfiniteScrollProps) => {\n if (!hasMore) return <>;\n\n return (\n
\n \n
\n );\n};\n","import { useEffect, useState } from 'react';\nimport useInView from 'react-cool-inview';\nimport { SortDirection } from '../components/EnhancedTable';\nimport { CursorRequest, CursorResponse } from '../typings';\nimport { client } from '../utils/client';\n\nexport const useInfiniteScroll = (path: 'publications' | 'tasks', filters: Record = {}) => {\n const [cursorRequest, setCursorRequest] = useState(filters);\n const [queryingMore, setQueryingMore] = useState(false);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState();\n const [records, setRecords] = useState | undefined>(undefined);\n const [nextRecordsUrl, setNextRecordsUrl] = useState(undefined);\n\n const refresh = async () => {\n try {\n setLoading(true);\n\n const cursor = await client.list(path, cursorRequest);\n\n setRecords(cursor.records);\n setNextRecordsUrl(cursor.nextRecordsUrl);\n } catch (err) {\n setError(err as any);\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n refresh();\n }, [cursorRequest]);\n\n const { observe } = useInView({\n onEnter: () => queryMore(),\n });\n\n const queryMore = async () => {\n if (!nextRecordsUrl || queryingMore || loading) return;\n\n try {\n setQueryingMore(true);\n const newCursor = await client.do>(nextRecordsUrl);\n\n setRecords((existingRecords) => {\n if (existingRecords) {\n return [...existingRecords, ...newCursor.records];\n } else {\n return newCursor.records;\n }\n });\n\n setNextRecordsUrl(newCursor.nextRecordsUrl);\n } catch (err) {\n setError(err as any);\n } finally {\n setQueryingMore(false);\n }\n };\n\n const setSortFieldName = (sortFieldName: string) => {\n setCursorRequest((request) => ({ ...request, sortFieldName }));\n };\n\n const setSortDirection = (sortDirection: SortDirection) => {\n setCursorRequest((request) => ({ ...request, sortDirection: formatDirection(sortDirection) }));\n };\n\n return {\n error,\n hasMore: !!nextRecordsUrl,\n loading,\n queryingMore,\n records,\n refresh,\n setCursorRequest,\n setSortDirection,\n setSortFieldName,\n sortDirection: cursorRequest.sortDirection,\n sortFieldName: cursorRequest.sortFieldName,\n loadMoreRef: observe,\n };\n};\n\nconst formatDirection = (direction: string) => {\n switch (direction) {\n case 'asc':\n return 'ASC';\n case 'desc':\n return 'DESC';\n }\n};\n","import { Grid, Typography } from '@material-ui/core';\nimport { useEffect } from 'react';\nimport { Route, Switch, useLocation, useRouteMatch } from 'react-router-dom';\nimport { BackdroppedCircularProgress, EmptyContainer, PublicationCard } from '../components';\nimport { InfiniteScroll } from '../components/InfiniteScroll';\nimport { useInfiniteScroll } from '../hooks/useInfiniteScroll';\nimport { PublicationListItem } from '../typings';\nimport { routes } from '../utils/constants';\n\nconst defaults = {\n pageSize: 10,\n sortFieldName: 'Name',\n sortDirection: 'DESC',\n};\n\nconst Publications = () => {\n const location = useLocation();\n const showActivePublications = Boolean(useRouteMatch(routes.publications.active.routeProps));\n\n const filters = {\n ...defaults,\n active: showActivePublications,\n };\n\n const { records, hasMore, loading, error, setCursorRequest, loadMoreRef } = useInfiniteScroll(\n 'publications',\n filters\n );\n\n useEffect(() => {\n setCursorRequest(filters as any);\n }, [location]);\n\n const showAllActiveCompleted = !loading && !error && showActivePublications && records?.length === 0;\n const showAllArchivedCompleted = !loading && !error && !showActivePublications && records?.length === 0;\n const showError = !loading && error;\n const showData = !loading && records?.length !== 0;\n\n return (\n \n \n \n \n Active Publications\n Archived Publications\n \n \n \n \n \n {showError && (\n \n )}\n {showAllActiveCompleted && }\n {showAllArchivedCompleted && }\n {showData && records && (\n <>\n \n {records.map((item, key) => (\n \n ))}\n \n \n \n )}\n \n \n );\n};\n\ntype PublicationItemProps = {\n item: PublicationListItem;\n loading: boolean;\n};\n\nconst PublicationItem = ({ item, loading }: PublicationItemProps) => {\n const { id, target, openTaskCount, latestAvailableDocumentVersion } = item;\n const {\n fullyQualifiedName,\n products,\n documentNumber,\n documentNumberLabel,\n documentType,\n documentTypeLabel,\n documentSubtype,\n documentSubtypeLabel,\n statusLabel,\n status,\n statusColor,\n } = latestAvailableDocumentVersion;\n\n return (\n \n product.name).join(', ')}\n documentNumber={documentNumberLabel || documentNumber}\n documentType={documentTypeLabel || documentType}\n documentSubtype={documentSubtypeLabel || documentSubtype}\n targetName={target?.name}\n targetDate={target?.targetDate}\n openTaskCount={openTaskCount}\n statusLabel={statusLabel || status}\n statusColor={statusColor}\n status={status}\n />\n \n );\n};\n\nexport default Publications;\n","import { createStyles, makeStyles } from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) =>\n createStyles({\n actionButton: {\n fontFamily: 'DMSans-Medium',\n justifyContent: 'space-between',\n color: '#FFFFFF',\n backgroundColor: '#0050C8',\n whiteSpace: 'nowrap',\n },\n taskPublicationLinkText: {\n color: '#000000',\n textDecoration: 'underline',\n },\n })\n);\n","import { Button, Grid, Typography } from '@material-ui/core';\nimport { useEffect, useState } from 'react';\nimport { Route, Switch, useLocation, useRouteMatch } from 'react-router';\nimport { BackdroppedCircularProgress, CompleteTaskModal, EmptyContainer, EnhancedTable } from '../components';\nimport { InfiniteScroll } from '../components/InfiniteScroll';\nimport { useInfiniteScroll } from '../hooks/useInfiniteScroll';\nimport { PublicationTask } from '../typings';\nimport { routes } from '../utils/constants';\nimport { useStyles } from './styles';\n\ntype Header = {\n label: string;\n field: string;\n apiName?: string;\n sortable: boolean;\n};\n\nconst defaults = {\n pageSize: 10,\n sortFieldName: 'mvn__PP_Completed_Date__c',\n sortDirection: 'DESC',\n};\n\nconst tableHeaders: Record = {\n publication: {\n label: 'Publication',\n field: 'publication',\n apiName: 'mvn__CM_Document_Version_Fully_Qualified_Name__c',\n sortable: true,\n },\n documentNumber: {\n label: 'Document #',\n field: 'documentNumber',\n apiName: 'mvn__CM_Document_Number__c',\n sortable: true,\n },\n taskType: {\n label: 'Task Type',\n field: 'taskType',\n apiName: 'mvn__CM_Record_Type_Name__c',\n sortable: true,\n },\n subject: {\n label: 'Subject',\n field: 'subject',\n apiName: 'Subject',\n sortable: true,\n },\n dueDate: {\n label: 'Due Date',\n field: 'dueDate',\n apiName: 'ActivityDate',\n sortable: true,\n },\n completedDate: {\n label: 'Completed Date',\n field: 'completedDate',\n apiName: 'mvn__PP_Completed_Date__c',\n sortable: true,\n },\n actions: {\n label: 'Actions',\n field: 'actions',\n sortable: false,\n },\n};\n\nconst openTaskTableHeaders = Object.values(tableHeaders).filter((header) => header.field !== 'completedDate');\nconst closedTaskTableHeaders = Object.values(tableHeaders).filter(\n (header) => header.label !== 'Actions' && header.field !== 'dueDate'\n);\n\nconst Tasks = () => {\n const classes = useStyles();\n const [selectedTaskToComplete, setSelectedTaskToComplete] = useState(undefined);\n\n const location = useLocation();\n const showOpenTasks = Boolean(useRouteMatch(routes.tasks.open.routeProps));\n\n const filters = {\n ...defaults,\n open: showOpenTasks,\n };\n\n const {\n records,\n hasMore,\n loading,\n error,\n sortDirection,\n sortFieldName,\n setSortFieldName,\n setSortDirection,\n setCursorRequest,\n refresh,\n loadMoreRef,\n } = useInfiniteScroll('tasks', filters);\n\n useEffect(() => {\n setCursorRequest(filters as any);\n }, [location]);\n\n const tableData =\n records?.map((task) => ({\n key: task.id,\n publication: (\n <>\n {task.publicationReference && (\n \n )}\n \n ),\n documentNumber: task.documentNumber,\n taskType: task.typeLabel,\n subject: task.subject,\n dueDate: task.dueDate,\n completedDate: task.completedDate,\n completedDateTime: task.completedDateTime,\n actions: (\n \n ),\n })) ?? [];\n\n const currentTableHeaders = showOpenTasks ? openTaskTableHeaders : closedTaskTableHeaders;\n\n const handleTaskComplete = () => {\n refresh();\n setSelectedTaskToComplete(undefined);\n };\n\n const handleClose = () => {\n setSelectedTaskToComplete(undefined);\n };\n\n const showAllOpenTasksCompleted = !loading && !error && showOpenTasks && tableData.length === 0;\n const showAllClosedTasksCompleted = !loading && !error && !showOpenTasks && tableData.length === 0;\n const showError = !loading && error;\n const showData = !loading && tableData.length !== 0;\n\n return (\n \n {!!selectedTaskToComplete && (\n \n )}\n \n \n \n Open Tasks\n Closed Tasks\n \n \n \n \n \n {showError && }\n {showAllOpenTasksCompleted && }\n {showAllClosedTasksCompleted && }\n {showData && (\n <>\n header.apiName === sortFieldName)?.field as string}\n onSortClick={(field, direction) => {\n setSortFieldName(tableHeaders[field].apiName as string);\n setSortDirection(direction);\n }}\n />\n \n \n )}\n \n \n );\n};\n\nexport default Tasks;\n","import { alpha, makeStyles } from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n secondaryTail: {\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n },\n timelineContentGrid: {\n marginTop: theme.spacing(-0.75),\n marginBottom: theme.spacing(1.75),\n },\n timelineDot: {\n marginBottom: theme.spacing(0.75),\n marginTop: theme.spacing(0.75),\n },\n // hide left side since we only display content on right\n timelineItemMissingOppositeContent: {\n '&:before': {\n display: 'none',\n },\n },\n timelineContentGridItem: {\n display: 'flex',\n alignItems: 'center',\n },\n comment: {\n borderLeft: `2px solid ${alpha(theme.palette.secondary.main, 0.45)}`,\n paddingLeft: theme.spacing(2),\n },\n editIconWrapper: {\n borderWidth: 2,\n borderStyle: 'solid',\n borderColor: theme.palette.secondary.main,\n borderRadius: '50%',\n display: 'flex',\n width: '26px',\n height: '26px',\n justifyContent: 'center',\n alignContent: 'center',\n alignItems: 'center',\n flexShrink: 0,\n marginRight: theme.spacing(1),\n },\n cardContent: {\n padding: 0,\n },\n divider: {\n height: '2px',\n marginBottom: theme.spacing(3.5),\n marginTop: theme.spacing(3.5),\n },\n versionTitleText: {\n fontFamily: 'DMSans-Medium',\n },\n revisionTitleText: {\n fontFamily: 'DMSans-Medium',\n marginTop: theme.spacing(0.25),\n },\n uploadedFileWrapper: {\n display: 'flex',\n alignItems: 'center',\n backgroundColor: '#F7F7F7',\n padding: theme.spacing(1.5),\n marginBottom: theme.spacing(1.5),\n border: '1px solid #e9e9e9',\n borderRadius: '2px',\n },\n}));\n","import { Box, Button, Card, CardContent, Divider, Grid, IconButton, Typography } from '@material-ui/core';\nimport { useTheme } from '@material-ui/core/styles';\nimport { Edit as EditIcon } from '@material-ui/icons';\nimport {\n Timeline,\n TimelineConnector,\n TimelineContent,\n TimelineDot,\n TimelineItem,\n TimelineSeparator,\n} from '@material-ui/lab';\nimport { format } from 'timeago.js';\nimport { DownloadIcon, EmptyContainer, FileIcon, UploadIcon } from '../../../components';\nimport {\n DocumentVersion,\n PublicationHistory as PublicationHistoryType,\n PublicationRevision,\n PublicationSupportingDocument,\n} from '../../../typings';\nimport { client } from '../../../utils/client';\nimport { getDownloadDetails } from '../../../utils/format';\nimport { useStyles } from './styles';\n\ninterface PublicationHistoryProps {\n history: Array;\n}\n\n/**\n * @description Renders a Publication's history as a timeline of document versions.\n * @param props the PublicationHistory props\n * @returns a PublicationHistory component\n */\nconst PublicationHistory = (props: PublicationHistoryProps) => {\n const { history } = props;\n\n const classes = useStyles();\n\n if (history.length === 0) {\n return ;\n }\n\n return (\n \n \n \n {history.map(({ documentVersion, revisions }, key) => (\n \n ))}\n \n \n \n );\n};\n\ntype HistoryItemProps = {\n documentVersion: DocumentVersion;\n revisions: PublicationRevision[];\n};\n\n/**\n * Returns an History Item grouping\n * @param props the HistoryItem props\n * @returns a HistoryItem component\n */\nconst HistoryItem = (props: HistoryItemProps) => {\n const { documentVersion, revisions } = props;\n\n const classes = useStyles();\n\n const { downloadLabel, hasDownloadUrl, handleDownload } = getDownloadDetails(documentVersion);\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n {documentVersion.createdByName} uploaded Version {documentVersion.versionNumber}\n \n \n \n \n {new Date(documentVersion.createdDate).toLocaleString('en-us', {\n dateStyle: 'medium',\n timeStyle: 'short',\n })}\n \n \n \n \n {downloadLabel}\n \n \n\n \n \n \n \n \n \n \n\n {revisions.map((revision, key) => (\n \n ))}\n \n \n );\n};\n\ntype RevisionItemProps = {\n revision: PublicationRevision;\n};\n\n/**\n * Returns a single Revision Item\n * @param props the RevisionItem props\n * @returns a RevisionItem component\n */\nconst RevisionItem = (props: RevisionItemProps) => {\n const { revision } = props;\n\n const classes = useStyles();\n\n return (\n \n \n \n \n \n \n {revision.owner.name} - {revision.subject}\n \n \n \n \n \n \n \n \n {format(revision.completedDateTime)}\n {revision.documents && (\n \n {revision.documents.map((document, key) => (\n \n ))}\n \n )}\n \n \n \n );\n};\n\ntype UploadFileProps = {\n file: PublicationSupportingDocument;\n};\n\n/**\n * Returns a single Uploaded File\n * @param props the UploadedFile props\n * @returns a UploadedFile component\n */\nconst UploadedFile = (props: UploadFileProps) => {\n const { file } = props;\n\n const theme = useTheme();\n const classes = useStyles();\n\n const handleDownload = async () => {\n const url = client.getDocumentDownloadUrl(file.id);\n window.location.href = url;\n };\n\n return (\n
\n
\n \n
\n \n {file.title + '.' + file.fileExtension}\n \n \n \n \n
\n );\n};\n\ntype CommentProps = {\n text: string;\n};\n\n/**\n * Renders text with comment styling\n * @param props the Comment props\n * @returns a Comment component\n */\nconst Comment = (props: CommentProps) => {\n const { text } = props;\n const classes = useStyles();\n\n return (\n \n {text}\n \n );\n};\n\nexport default PublicationHistory;\n","import {\n Box,\n Card,\n CardActionArea,\n CardActionAreaProps,\n CardContent,\n CircularProgress,\n Grid,\n Typography,\n} from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useSnackbar } from 'notistack';\nimport { useState } from 'react';\nimport { DownloadIcon, EmptyContainer, FileIcon, OverflowTooltip } from '../../components';\nimport { PublicationSupportingDocument } from '../../typings';\nimport { client } from '../../utils/client';\n\nconst useStyles = makeStyles((theme) => ({\n buttonProgress: {\n color: 'white',\n },\n documentCardSmallFileIcon: {\n paddingRight: theme.spacing(2),\n },\n documentCardDownloadIndicator: {\n display: 'flex',\n alignItems: 'center',\n alignContent: 'center',\n position: 'absolute',\n\n backgroundColor: '#111111',\n borderRadius: '3px',\n padding: '4px 8px',\n top: theme.spacing(2),\n right: theme.spacing(2),\n visibility: 'hidden',\n zIndex: 1, // ensures this is in \"front\" of the file svg\n },\n documentCardActionArea: {\n '&:hover $documentCardDownloadIndicator': {\n visibility: 'visible',\n },\n },\n documentCardLargeFileIconWrapper: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'center',\n height: '154px',\n backgroundColor: 'rgba(245, 245, 245, 1)',\n },\n}));\n\ninterface PublicationSupportingDocumentsProps {\n documents: Array;\n publicationId: string;\n}\n\n/**\n * @description Renders a Publication's history as a timeline of document versions.\n *\n */\nconst PublicationSupportingDocuments = (props: PublicationSupportingDocumentsProps) => {\n const { documents, publicationId } = props;\n const [loading, setLoading] = useState(false);\n const { enqueueSnackbar } = useSnackbar();\n\n const handleRequestDocument = (doc: PublicationSupportingDocument) => async () => {\n try {\n setLoading(true);\n enqueueSnackbar('Requesting download...', { variant: 'success', autoHideDuration: 3000 });\n\n const data = await client.getSupportingDocumentDownloadLink({\n documentId: doc.id,\n publicationId,\n });\n\n window.location.href = client.getDocumentDownloadUrl(data.downloadUrl);\n } catch (error) {\n enqueueSnackbar(`An error occured when downloading the supporting document: ${error}`, { variant: 'error' });\n } finally {\n setLoading(false);\n }\n };\n\n return (\n \n {documents.map((doc) => (\n \n \n \n ))}\n {documents.length === 0 && (\n \n \n \n )}\n \n );\n};\n\ninterface DocumentCardProps {\n document: PublicationSupportingDocument;\n loading: boolean;\n handleOnClick: CardActionAreaProps['onClick'];\n}\n\n/**\n * @description renders a card displaying a supporting document and allows download on click\n */\nconst DocumentCard = (props: DocumentCardProps) => {\n const classes = useStyles();\n const { document, loading, handleOnClick } = props;\n\n return (\n \n \n
\n \n {!loading && }\n {loading && }\n \n \n Download\n \n
\n \n \n \n \n \n\n \n \n \n \n \n \n {document.title}.{document.fileExtension}\n \n \n \n
\n
\n );\n};\n\nexport default PublicationSupportingDocuments;\n","import { Box, Button, Card, CardContent, Collapse, Grid, GridSize, Typography } from '@material-ui/core';\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\nimport { ReactElement, useState } from 'react';\nimport { CompleteTaskModal, EmptyContainer } from '../../components';\nimport { PublicationTask } from '../../typings';\n\ninterface IncompleteTaskCardProps {\n type: string;\n subject: string;\n directions?: string;\n dueDate: string;\n onCompleteTaskClick: () => void;\n}\n\n/**\n * @description Renders an incomplete Task and displays a button for user to complete\n *\n */\nconst IncompleteTaskCard = (props: IncompleteTaskCardProps) => {\n const items: Array<{\n header: string;\n size: GridSize;\n value?: string | ReactElement;\n isCompleteTaskButton?: boolean;\n }> = [\n { header: 'Type', value: props.type, size: 2 },\n { header: 'Task Subject', value: props.subject, size: 3 },\n { header: 'Directions', value: props.directions, size: 3 },\n { header: 'Due Date', value: props.dueDate, size: 2 },\n {\n isCompleteTaskButton: true,\n header: '',\n value: (\n \n \n \n ),\n size: 2,\n },\n ];\n\n const content = (\n \n {items.map(({ header, value, size, isCompleteTaskButton }) => {\n return (\n \n {header ? (\n \n {header}\n \n ) : null}\n\n {isCompleteTaskButton ? (\n \n {value}\n \n ) : (\n {value}\n )}\n \n );\n })}\n \n );\n return (\n \n {content}\n \n );\n};\n\ninterface CompletedTaskCardProps {\n type: string;\n subject: string;\n directions?: string;\n dueDate: string;\n comments: string;\n}\n\n/**\n * @description Renders a completed Task\n *\n */\n\nconst CompletedTaskCard = (props: CompletedTaskCardProps) => {\n const items: Array<{ header: string; size: GridSize; value?: string }> = [\n { header: 'Type', value: props.type, size: 2 },\n { header: 'Task Subject', value: props.subject, size: 3 },\n { header: 'Directions', value: props.directions, size: 3 },\n { header: 'Due Date', value: props.dueDate, size: 2 },\n { header: 'Comments', value: props.comments, size: 2 },\n ];\n\n const content = (\n \n {items.map(({ header, value, size }) => (\n \n \n {header}\n \n {value}\n \n ))}\n \n );\n\n return (\n \n {content}\n \n );\n};\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n emptyList: {\n background: 'white',\n padding: theme.spacing(1.5),\n textAlign: 'center',\n },\n tasksCompleteCardContent: {\n padding: theme.spacing(5),\n },\n tasksCompleteIcon: {\n marginBottom: theme.spacing(1.5),\n },\n incompleteTaskGrid: {\n paddingBottom: theme.spacing(8),\n },\n showIncompleteTasksButton: {\n textDecoration: 'underline',\n textTransform: 'none',\n '&:hover': {\n textDecoration: 'underline',\n },\n },\n })\n);\n\ninterface PublicationTasksProps {\n loading: boolean;\n tasks: Array | null;\n reloadPublication: () => any;\n}\n\n/**\n * @description Renders a Publication's complete and incomplete tasks in cards\n *\n */\nconst PublicationTasks = (props: PublicationTasksProps) => {\n const { tasks, reloadPublication, loading } = props;\n const [showCompleted, setShowCompleted] = useState(false);\n const [selectedTaskToComplete, setSelectedTaskToComplete] = useState(undefined);\n\n const incompleteTasks = tasks?.filter((task) => task.isOpen) ?? [];\n const completedTasks = tasks?.filter((task) => !task.isOpen) ?? [];\n\n const classes = useStyles();\n\n const handleTaskComplete = () => {\n reloadPublication();\n setSelectedTaskToComplete(undefined);\n };\n\n const handleClose = () => {\n setSelectedTaskToComplete(undefined);\n };\n\n return (\n \n {!!selectedTaskToComplete && (\n \n )}\n \n {incompleteTasks.length ? (\n incompleteTasks.map((task) => {\n const { id, typeLabel, type, subject, directions, dueDate } = task;\n return (\n \n setSelectedTaskToComplete(task)}\n />\n \n );\n })\n ) : (\n \n {!loading && tasks !== null ? : null}\n \n )}\n \n setShowCompleted(!showCompleted)}\n classes={{ root: classes.showIncompleteTasksButton }}\n disableRipple\n >\n {showCompleted ? 'Hide' : 'Show'} Completed Tasks\n \n \n \n {completedTasks.length === 0 && (\n \n \n \n )}\n {completedTasks.map(({ id, typeLabel, subject, directions, dueDate, comments }) => (\n \n \n \n ))}\n \n \n \n );\n};\n\nexport default PublicationTasks;\n","import { Box, Button, ButtonGroup, Card, CardContent, Grid, GridSize, Typography } from '@material-ui/core';\nimport { EmptyContainer } from '../../components';\nimport { PackageFile } from '../../typings';\nimport { client } from '../../utils/client';\nimport { ReactElement } from 'react';\nimport DownloadIcon from '@mui/icons-material/Download';\nimport FileOpenIcon from '@mui/icons-material/FileOpen';\nimport { FileIcon } from '../../../src/components/icons/FileIcon';\n\ninterface PackageFileCardProps {\n id: string;\n label: string;\n fileType: string;\n fileExtension: string;\n fileSize: number;\n contentDocumentId: string;\n checkoutUrl?: string;\n}\n\ninterface PackageFilesProps {\n packageFiles: Array | null;\n}\n\n/**\n * @description Renders a Package File\n *\n */\n\nconst PackageFileCard = (props: PackageFileCardProps) => {\n const items: Array<{ header: string; size: GridSize; value?: string | ReactElement }> = [\n { header: 'Title', value: props.label, size: 5 },\n {\n header: 'File Type',\n value: ,\n size: 1,\n },\n { header: 'Size', value: props.fileSize.toString(), size: 2 },\n ];\n\n const handleDownload = async () => {\n const url = client.getDocumentDownloadUrl(props.contentDocumentId);\n window.location.href = url;\n };\n\n const handleOpenIn365 = async () => {\n window.open(props.checkoutUrl!);\n };\n\n const content = (\n \n {items.map(({ header, value, size }) => (\n \n \n {header}\n \n {header === 'Size' ? formatBytes(Number(value)) : value}\n \n ))}\n \n \n \n \n  Download\n \n \n  Open in Office 365\n \n \n \n \n \n );\n\n return (\n \n {content}\n \n );\n};\n\n/**\n * @description Renders a Publication's package files\n *\n */\nconst PackageFiles = (props: PackageFilesProps) => {\n const { packageFiles } = props;\n\n return (\n \n \n {packageFiles?.length === 0 && (\n \n \n \n )}\n {packageFiles?.map(({ id, label, checkoutUrl, contentDocument }) => (\n \n \n \n ))}\n \n \n );\n};\n\nfunction formatBytes(bytes: number, decimals = 2) {\n if (!+bytes) return '0 Bytes';\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n}\n\nexport default PackageFiles;\n","import { alpha, createStyles, makeStyles } from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) =>\n createStyles({\n breadcrumbAnchor: {\n '&:hover': {\n color: theme.palette.primary.main,\n textDecoration: 'none',\n },\n },\n chip: {\n marginLeft: theme.spacing(2),\n },\n tab: {\n textTransform: 'none',\n padding: theme.spacing(1.5),\n paddingBottom: 0,\n paddingTop: 0,\n minWidth: 0,\n fontSize: 16,\n fontWeight: 600,\n minHeight: 0,\n },\n tabsRoot: {\n marginBottom: theme.spacing(2),\n minHeight: 0,\n },\n tabsFlexContainer: {\n borderBottom: `3px solid ${alpha(theme.palette.primary.main, 0.1)}`,\n '& >:not(:last-child)': {\n marginRight: theme.spacing(8),\n },\n },\n tabsIndicator: {\n display: 'flex',\n justifyContent: 'start',\n backgroundColor: 'transparent',\n paddingLeft: theme.spacing(1),\n '& > span': {\n width: '100%',\n backgroundColor: theme.palette.primary.main,\n height: '3px', // matches bottomBorder of tabsFlexContainer\n position: 'relative',\n top: '-1px', // shift up 1px to align with bottomBorder of tabsFlexContainer\n },\n },\n })\n);\n","import { Box, Breadcrumbs, Button, ButtonGroup, Grid, Link, Tab, Tabs, Typography } from '@material-ui/core';\nimport { NavigateNext } from '@material-ui/icons';\nimport { Skeleton } from '@material-ui/lab';\nimport { useState } from 'react';\nimport { useRouteMatch } from 'react-router';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { useAsyncFn, useEffectOnce } from 'react-use';\nimport { BackdroppedCircularProgress, EmptyContainer, LabeledList, StatusLabel } from '../../../components';\nimport { CollaboratorPortalSettingsResponse, PackageFile, PublicationDetailResponse } from '../../../typings';\nimport { client } from '../../../utils/client';\nimport { routes } from '../../../utils/constants';\nimport { getDownloadAllDetails, getDownloadDetails } from '../../../utils/format';\nimport PublicationHistory from '../PublicationHistory/PublicationHistory';\nimport PublicationSupportingDocuments from '../PublicationSupportingDocuments';\nimport PublicationTasks from '../PublicationTasks';\nimport PackageFiles from '../PackageFiles';\nimport { useStyles } from './styles';\nimport DownloadIcon from '@mui/icons-material/Download';\nimport FileOpenIcon from '@mui/icons-material/FileOpen';\n\n/**\n * @description Renders a page displaying PublicationDetails. Allows user to view associated Tasks, Document History, and Supporting Documents.\n *\n */\nconst PublicationDetails = () => {\n const match = useRouteMatch<{ id: string }>();\n const [settings, setSettings] = useState();\n\n const classes = useStyles();\n\n const [{ loading, value: response, error }, doGetPublicationDetails] = useAsyncFn(() => {\n return client.getPublication({ id: match.params.id });\n }, [match.params.id]);\n\n useEffectOnce(() => {\n doGetPublicationDetails();\n\n const getPortalSettings = async () => {\n const settings = await client.getPortalSettings();\n setSettings(settings);\n };\n\n getPortalSettings();\n });\n\n const { publication, history, myTasks, supportingDocuments, packageFiles } =\n response || ({} as PublicationDetailResponse);\n\n const target = publication?.target;\n const docVersion = publication?.latestAvailableDocumentVersion;\n\n const { downloadLabel, handleDownload, handleCheckout, hasDownloadUrl, hasCheckoutUrl } =\n getDownloadDetails(docVersion);\n\n const { handleDownloadAll } = getDownloadAllDetails(response?.packageFiles as Array);\n\n /**\n * Opens each checked-out package file in 365\n * @param packageFiles the package files for the document version\n * @returns returns a promise that opens each package file in a separate tab\n */\n const getOpenIn365Details = (packageFiles: Array) => {\n if (!packageFiles) {\n return {\n handleOpenIn365: () => {},\n };\n }\n\n const handleOpenIn365 = async () => {\n packageFiles\n .filter((packageFile) => packageFile.checkoutUrl)\n .forEach((packageFile) => {\n window.open(packageFile.checkoutUrl);\n });\n };\n\n return { handleOpenIn365 };\n };\n\n const { handleOpenIn365 } = getOpenIn365Details(response?.packageFiles as Array);\n\n const incompleteTasks = myTasks ? myTasks?.filter((task) => task.isOpen) : undefined;\n\n const packageFilesCount = typeof packageFiles?.length === 'number' ? packageFiles.length : undefined;\n\n const isOffice365 = docVersion?.checkoutType === 'Office365';\n\n const showDownloadButton =\n (hasDownloadUrl && !isOffice365) ||\n (settings?.mvn__PP_Enable_Checked_Out_Document_Download__c && isOffice365 && hasDownloadUrl);\n const showCheckoutButton = hasCheckoutUrl && isOffice365;\n\n const [tabIndex, setTabIndex] = useState(0);\n\n const packageFilesCheckedOutIn365Count =\n typeof packageFiles?.length === 'number'\n ? packageFiles.filter((packageFile) => packageFile.checkoutUrl).length\n : undefined;\n const openTaskCount = typeof incompleteTasks?.length === 'number' ? incompleteTasks.length : undefined;\n const docCount = typeof supportingDocuments?.length === 'number' ? supportingDocuments.length : undefined;\n\n const labeledItems = [\n { label: 'Product', value: docVersion?.products.map((product) => product.name).join(', ') },\n { label: 'Document Number', value: docVersion?.documentNumber },\n { label: 'Document Type', value: docVersion?.documentTypeLabel },\n { label: 'Document Subtype', value: docVersion?.documentSubtypeLabel },\n { label: 'Target Name', value: target?.name },\n { label: 'Target Date', value: target?.targetDate },\n ];\n\n const header = (\n \n {loading && }\n {!loading && (\n \n }>\n \n {!publication ? '...' : `${publication?.active ? 'Active' : 'Archived'} Publications`}\n \n \n {docVersion?.fullyQualifiedName ?? '...'}\n {!publication ? null : (\n \n )}\n \n \n \n )}\n {!loading && (\n \n \n \n {showDownloadButton && (\n \n {}\n \n )}\n\n {showCheckoutButton && (\n \n {} {downloadLabel}\n \n )}\n {packageFilesCount && (\n \n )}\n {packageFilesCheckedOutIn365Count && (\n \n )}\n \n \n \n )}\n \n );\n\n if (error) {\n return ;\n }\n\n return (\n \n \n \n {header}\n \n \n \n \n \n setTabIndex(newValue)}\n textColor=\"secondary\"\n indicatorColor=\"primary\"\n classes={{\n root: classes.tabsRoot,\n indicator: classes.tabsIndicator,\n flexContainer: classes.tabsFlexContainer,\n }}\n TabIndicatorProps={{ children: }}\n >\n {packageFilesCount && (\n \n )}\n \n \n \n \n {publication && (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n \n \n );\n};\n\ninterface TabPanelProps {\n children?: React.ReactNode;\n index: number;\n value: number;\n}\n\nfunction CustomTabPanel(props: TabPanelProps) {\n const { children, value, index, ...other } = props;\n\n return (\n