@flexkit/studio 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/astro.js +1 -1
- package/dist/chat-page-ZFPMTRLD.js +2 -0
- package/dist/chat-page-ZFPMTRLD.js.map +1 -0
- package/dist/chunk-BKJ2DBRK.js +2 -0
- package/dist/{chunk-QQUNCDUB.js.map → chunk-BKJ2DBRK.js.map} +1 -1
- package/dist/chunk-DPCMOWK4.js +3 -0
- package/dist/chunk-DPCMOWK4.js.map +1 -0
- package/dist/chunk-DQ6Z333C.js +4 -0
- package/dist/{chunk-YINI2YKQ.js.map → chunk-DQ6Z333C.js.map} +1 -1
- package/dist/{chunk-OUSEULBR.js → chunk-LMVJWCOM.js} +4 -4
- package/dist/{chunk-OUSEULBR.js.map → chunk-LMVJWCOM.js.map} +1 -1
- package/dist/{chunk-7PDYCDX6.js → chunk-LX7Q56OS.js} +2 -2
- package/dist/{chunk-7PDYCDX6.js.map → chunk-LX7Q56OS.js.map} +1 -1
- package/dist/chunk-MKEIZ5ZQ.js +5 -0
- package/dist/chunk-MKEIZ5ZQ.js.map +1 -0
- package/dist/chunk-QJWY4XIM.js +2 -0
- package/dist/{chunk-GZIMMYLK.js.map → chunk-QJWY4XIM.js.map} +1 -1
- package/dist/{chunk-C2BPRGGQ.js → chunk-TXK4OFAG.js} +25 -18
- package/dist/{chunk-3CPWATOI.js → chunk-WBZKCRQK.js} +2 -2
- package/dist/{chunk-3CPWATOI.js.map → chunk-WBZKCRQK.js.map} +1 -1
- package/dist/index.css +6 -0
- package/dist/index.js +4 -4
- package/dist/list-GALFFS5F.js +2 -0
- package/dist/{list-SQCN7HA3.js.map → list-GALFFS5F.js.map} +1 -1
- package/dist/nextjs.js +1 -1
- package/dist/pages-IA7GOMMS.js +3 -0
- package/dist/pages-IA7GOMMS.js.map +1 -0
- package/dist/{plugin-pages-AHOA6YJE.js → plugin-pages-Q63UBSKH.js} +2 -2
- package/dist/{plugin-pages-AHOA6YJE.js.map → plugin-pages-Q63UBSKH.js.map} +1 -1
- package/dist/root-5TCUJI6Q.js +23 -0
- package/dist/{root-4FGNRGCD.js.map → root-5TCUJI6Q.js.map} +1 -1
- package/dist/{root-IIILTOJI.js → root-SMHRBFGW.js} +3 -3
- package/dist/{root-IIILTOJI.js.map → root-SMHRBFGW.js.map} +1 -1
- package/dist/root-VSTE2THV.js +2 -0
- package/dist/{root-5ZW536V7.js.map → root-VSTE2THV.js.map} +1 -1
- package/dist/{root-QPQQ3DFJ.js → root-VYZYDWIB.js} +2 -2
- package/dist/{root-QPQQ3DFJ.js.map → root-VYZYDWIB.js.map} +1 -1
- package/dist/{search-2K2BU4UU.js → search-K75Q65A6.js} +2 -2
- package/dist/{search-2K2BU4UU.js.map → search-K75Q65A6.js.map} +1 -1
- package/dist/{skills-pages-PSBRTFGK.js → skills-pages-KDG2NOQJ.js} +2 -2
- package/dist/{skills-pages-PSBRTFGK.js.map → skills-pages-KDG2NOQJ.js.map} +1 -1
- package/dist/tanstack-start.js +1 -1
- package/package.json +4 -4
- package/dist/chat-page-NWMI4XOE.js +0 -2
- package/dist/chat-page-NWMI4XOE.js.map +0 -1
- package/dist/chunk-GZIMMYLK.js +0 -2
- package/dist/chunk-NSYO57O3.js +0 -5
- package/dist/chunk-NSYO57O3.js.map +0 -1
- package/dist/chunk-QQUNCDUB.js +0 -2
- package/dist/chunk-W2EBZZAY.js +0 -3
- package/dist/chunk-W2EBZZAY.js.map +0 -1
- package/dist/chunk-YINI2YKQ.js +0 -4
- package/dist/list-SQCN7HA3.js +0 -2
- package/dist/pages-OIAPASPF.js +0 -3
- package/dist/pages-OIAPASPF.js.map +0 -1
- package/dist/root-4FGNRGCD.js +0 -23
- package/dist/root-5ZW536V7.js +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/apps/ai/approvals-count.ts","../src/apps/ai/schema-deploy-watch.ts","../src/apps/ai/approval-card.tsx","../src/apps/ai/status-label.ts","../src/apps/ai/approval-parts.ts","../src/apps/ai/spec-renderer.tsx","../src/apps/ai/replay.tsx"],"names":["useRevalidateApprovalsCount","currentProjectId","useConfig","mutate","useSWRConfig","useCallback","known","key","paths","POLL_INTERVAL_MS","POLL_LIMIT","watching","urlFetcher","approvalUrl","response","settleSchemaDeployment","approval","projectId","revalidate","revalidateProjectSchema","watchSchemaDeployment","approvalId","fetchApproval","sleep","ms","resolve","load","attempt","APPROVAL_STATUS_STYLES","ApprovalStatusBadge","status","jsx","Badge","formatCellValue","value","DiffCell","after","before","beforeText","afterText","jsxs","MoveRightIcon","getOperationTitle","operation","entity","count","OperationPreviewTable","contextColumns","column","Table","TableHeader","TableRow","TableHead","TableBody","row","index","TableCell","columns","OperationDocuments","operations","plugin","chat","title","getChatPluginAction","segments","toolName","pluginName","action","app","letter","query","connection","account","getChatActionTitle","pluginAction","SchemaRowsTable","isSet","shownColumns","getSchemaOperationTitle","SchemaChangePreview","preview","summary","TriangleAlertIcon","change","warning","isSameApprovalSnapshot","left","right","useApprovalDecision","api","initialApproval","onDecided","setApproval","useState","prevInitialApproval","setPrevInitialApproval","errorMessage","setErrorMessage","isDeciding","startDecideTransition","useTransition","isRejectDialogOpen","setIsRejectDialogOpen","isStale","setIsStale","rejectReason","setRejectReason","revalidateApprovalsCount","applyResult","nextApproval","decide","approved","force","reason","remember","result","message","error","ApprovalDecisionActions","allowRemember","askForRejectionReason","variant","isHeader","buttonClassName","buttonSize","setRemember","rememberId","useId","Fragment","Button","LoaderCircle","CheckIcon","XIcon","Checkbox","checked","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Textarea","event","DialogFooter","ArrowRightIcon","ApprovalCardBody","isPending","formatDistance","format","ApprovalCard","ApprovalDrawer","onClose","DrawerModal","JEV_APPROVAL_REASON_PREFIX","TOOL_ALLOW_RULE_REASON_PREFIX","ROLLING_STATUS_PART_TYPES","isRollingStatusPartType","type","getPartData","part","isJevAutoApproved","truncateLabel","text","maxLength","trimmed","cut","lastSpace","stripInlineMarkdown","getCommittedReasoningText","lastNewline","lastSentence","sentenceEnd","match","boundary","getReasoningStatusLabel","options","lines","line","last","candidate","plain","humanizeToolName","tool","getRollingStatusLabel","data","AGENT_INTERNAL_ERROR_PART_TYPES","getRollingStatusError","isHiddenReplayPart","getPlanStatusLabel","current","step","getLiveStatusLabel","messageHasPendingMutationApproval","settlePendingMutationApprovals","decided","changed","parts","getMutationApprovalIds","approvalIds","pendingOnly","getPendingMutationApprovalIds","cardMaxWidthClasses","Card","children","element","props","maxWidthClass","centeredClass","stackGapClasses","stackAlignClasses","stackJustifyClasses","Stack","directionClass","gapClass","alignClass","justifyClass","gridColumnClasses","gridGapClasses","Grid","columnClass","Separator","headingClasses","Heading","level","textClasses","Text","BadgeComponent","AlertIcon","CheckCircle2Icon","AlertTriangleIcon","XCircleIcon","InfoIcon","Alert","typeClass","rows","TableCaption","rowIndex","cell","cellIndex","Progress","max","percent","Skeleton","LinkComponent","ExternalLink","Image","Accordion","item","Tabs","tabs","TabsList","tab","TabsTrigger","TabContent","TabsContent","trendClasses","TrendIcon","trend","TrendingUpIcon","TrendingDownIcon","MinusIcon","Metric","calloutClasses","CalloutIcon","LightbulbIcon","OctagonAlertIcon","Callout","timelineDotClasses","Timeline","items","CHART_COLORS","chartTooltipStyle","chartTooltipItemStyle","chartTooltipLabelStyle","chartTick","toNumber","parsed","getChartPoints","groups","group","x","ChartFrame","height","ResponsiveContainer","BarChart","points","color","RechartsBarChart","CartesianGrid","XAxis","YAxis","RechartsTooltip","Bar","LineChart","RechartsLineChart","Line","PieChart","slices","RechartsPieChart","Pie","slice","Cell","Mermaid","chart","diagramId","svg","setSvg","setError","useEffect","isCancelled","mermaid","isDark","renderError","registry","fallback","getSanitizedChildren","childKeys","elements","seen","childKey","normalizedKey","haveChildrenChanged","original","sanitized","sanitizeSpec","spec","hasChanged","elementKey","elementChildren","hasChildrenChanged","SPEC_DATA_PART_TYPE","dedupeSpecParts","seenPatchLines","deduped","payload","RunSpecPart","useMemo","builtSpec","buildSpecFromParts","stateKey","StateProvider","VisibilityProvider","ActionProvider","Renderer","useProjectApi","createApiClient","MAX_STREAM_ATTEMPTS","STREAM_RETRY_DELAY_MS","REPLAY_RENDER_INTERVAL_MS","JSON_RENDER_SPEC_PART_TYPE","RunReplayActionsContext","createContext","ChatApprovalContext","delay","isAbortError","hasRenderableParts","getMarkerIds","messages","markerIds","splitSessionMessages","chunkIndex","flush","useSessionMessages","isTerminalRunStatus","shouldPauseStreamForApproval","latestMessage","recordStatus","suppressApprovalPause","useRunStream","streamApi","setMessage","setStatus","resumeToken","decidedApprovalsRef","useRef","suppressApprovalPauseRef","streamApiRef","messageRef","streamChanged","abortController","rebuildFloor","nextMessage","startIndexSeparator","consumeOnce","sawFinish","chunkStream","parseJsonEventStream","uiMessageChunkSchema","controller","messageStream","readUIMessageStream","throttleTimer","caughtUp","flushLatestMessage","consume","loadTimeout","toMutationApprovalPartData","isCodeFenceOnlyText","MessagePart","partIndex","ToolErrorLine","otherPart","TextPart","GenerateFilesPart","RunArtifactPart","ToolDeliveryPart","RunSummaryPart","ToolMessage","ToolHeader","BotIcon","StatusIcon","PluginConnectionPart","AutoApprovedCallPart","MutationApprovalPart","BulkGraphqlActionPart","nextPart","UnknownDataPart","MessageResponse","SHIMMER_PERIOD_MS","RollingStatusText","phaseOriginRef","getPhaseDelayMs","transition","setTransition","state","STATUS_LABEL_MIN_DWELL_MS","useStableStatusLabel","label","minDwellMs","displayed","setDisplayed","shownAtRef","pendingRef","wait","timeoutId","TurnStatusLine","visible","stableLabel","className","isError","loading","StatusToolPart","icon","lastInProgress","generated","generating","CloudUploadIcon","path","isDone","previewUrl","downloadUrl","bytes","formatBytes","FileTextIcon","getArtifactLabel","DownloadIcon","LinkIcon","providerLabel","MessageSquareIcon","SendIcon","CircleSlashIcon","replayActions","useContext","isChat","previousApprovalStatusRef","isValidating","useSWR","fetcher","latestData","approvalStatus","approvedSchemaChange","previousStatus","handleDecided","body","detail","ShieldIcon","DatabaseZapIcon","ShieldCheckIcon","progress","sizeBytes","kilobytes","pluginId","pathname","useLocation","base","Link"],"mappings":"gyCAWO,SAASA,EAAAA,EAAsE,CACpF,GAAM,CAAE,gBAAA,CAAAC,CAAiB,CAAA,CAAIC,CAAAA,GACvB,CAAE,MAAA,CAAAC,CAAO,CAAA,CAAIC,YAAAA,EAAa,CAEhC,OAAOC,WAAAA,CACJC,CAAAA,EAAgC,CAC/B,GAAI,CAACL,EACH,OAGF,IAAMM,EAAMC,GAAAA,CAAMP,CAAgB,EAAE,cAAA,CAG9BK,CAAAA,CAAQH,EAAOI,CAAAA,CAAKD,CAAAA,CAAO,CAAE,UAAA,CAAY,IAAK,CAAC,CAAA,CAAIH,CAAAA,CAAOI,CAAG,EACrE,CAAA,CACA,CAACN,EAAkBE,CAAM,CAC3B,CACF,CCzBA,IAAMM,EAAAA,CAAmB,IACnBC,EAAAA,CAAa,GAAA,CACbC,GAAW,IAAI,GAAA,CAKrB,SAASC,EAAAA,CAAWC,CAAAA,CAAsC,CACxD,OAAO,SAAY,CACjB,IAAMC,CAAAA,CAAW,MAAM,MAAMD,CAAAA,CAAa,CAAE,YAAa,SAAA,CAAW,IAAA,CAAM,MAAO,CAAC,CAAA,CAElF,OAAIC,CAAAA,CAAS,MAAA,GAAW,IACf,SAAA,CAGJA,CAAAA,CAAS,IAIA,MAAMA,CAAAA,CAAS,IAAA,EAAK,EAEtB,QAAA,EAAY,SAAA,CALf,IAMX,CACF,CAMO,SAASC,EAAAA,CACdC,CAAAA,CACAC,EACAC,CAAAA,CAAuDC,GAAAA,CAC9C,CACT,OAAI,CAACH,GAAYA,CAAAA,CAAS,IAAA,GAAS,UAAYA,CAAAA,CAAS,MAAA,GAAW,YAAcA,CAAAA,CAAS,KAAA,CACjF,KAAA,CAGLA,CAAAA,CAAS,UAAA,EACNE,CAAAA,CAAWD,CAAS,CAAA,CAElB,KAAA,EAGF,IACT,CAQO,SAASG,EAAsB,CACpC,UAAA,CAAAC,EACA,WAAA,CAAAR,CAAAA,CACA,cAAAS,CAAAA,CACA,SAAA,CAAAL,EACA,UAAA,CAAAC,CAAAA,CAAaC,IACb,KAAA,CAAAI,CAAAA,CAASC,CAAAA,EAAe,IAAI,OAAA,CAAeC,CAAAA,EAAY,WAAWA,CAAAA,CAASD,CAAE,CAAC,CAChF,CAAA,CAQS,CACP,IAAMjB,CAAAA,CAAM,CAAA,EAAGU,CAAS,CAAA,CAAA,EAAII,CAAU,GAChCK,CAAAA,CAAOJ,CAAAA,GAAkBT,EAAcD,EAAAA,CAAWC,CAAW,EAAI,IAAA,CAAA,CAEnE,CAACa,CAAAA,EAAQf,EAAAA,CAAS,GAAA,CAAIJ,CAAG,IAI7BI,EAAAA,CAAS,GAAA,CAAIJ,CAAG,CAAA,CAAA,CAEV,SAAY,CAChB,GAAI,CACF,QAASoB,CAAAA,CAAU,CAAA,CAAGA,EAAUjB,EAAAA,CAAYiB,CAAAA,EAAW,EAAG,CACxD,IAAIX,EAAkD,IAAA,CAEtD,GAAI,CACFA,CAAAA,CAAW,MAAMU,CAAAA,GACnB,CAAA,KAAQ,CACNV,EAAW,KACb,CAOA,GALIA,CAAAA,GAAa,SAAA,EAKbA,IAAa,IAAA,EAAQ,CAACD,GAAuBC,CAAAA,CAAUC,CAAAA,CAAWC,CAAU,CAAA,CAC9E,OAGF,MAAMK,CAAAA,CAAMd,EAAgB,EAC9B,CACF,CAAA,OAAE,CACAE,GAAS,MAAA,CAAOJ,CAAG,EACrB,CACF,CAAA,KACF,CC1EA,IAAMqB,EAAAA,CAA2E,CAC/E,QAAA,CAAU,kCAAA,CACV,SAAA,CAAW,8CAAA,CACX,OAAA,CAAS,8CAAA,CACT,QAAS,sCAAA,CACT,QAAA,CAAU,0CACZ,CAAA,CAEO,SAASC,GAAoB,CAAE,MAAA,CAAAC,CAAO,CAAA,CAAsD,CACjG,OACEC,IAACC,CAAAA,CAAA,CACC,UAAW,CAAA,6EAAA,EAAgFJ,EAAAA,CAAuBE,CAAM,CAAC,CAAA,CAAA,CACzH,OAAA,CAAQ,WAAA,CAEP,QAAA,CAAAA,CAAAA,CACH,CAEJ,CAEA,SAASG,EAAgBC,CAAAA,CAAwB,CAC/C,OAAIA,CAAAA,EAAU,IAAA,CACL,SAGL,OAAOA,CAAAA,EAAU,SACZ,IAAA,CAAK,SAAA,CAAUA,CAAK,CAAA,CAGtB,MAAA,CAAOA,CAAK,CACrB,CAEA,SAASC,EAAAA,CAAS,CAAE,KAAA,CAAAC,EAAO,MAAA,CAAAC,CAAO,EAAqD,CACrF,IAAMC,EAAaL,CAAAA,CAAgBI,CAAM,EACnCE,CAAAA,CAAYN,CAAAA,CAAgBG,CAAK,CAAA,CAEvC,OAAIE,IAAeC,CAAAA,CACVR,GAAAA,CAAC,QAAK,SAAA,CAAU,0BAAA,CAA4B,QAAA,CAAAO,CAAAA,CAAW,CAAA,CAI9DE,IAAAA,CAAC,QAAK,SAAA,CAAU,wDAAA,CACd,UAAAT,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,gGAAA,CAAkG,QAAA,CAAAO,EAAW,CAAA,CAC7HP,GAAAA,CAACU,cAAA,CAAc,SAAA,CAAU,iDAAiD,CAAA,CAC1EV,GAAAA,CAAC,QAAK,SAAA,CAAU,wEAAA,CAA0E,QAAA,CAAAQ,CAAAA,CAAU,CAAA,CAAA,CACtG,CAEJ,CAEA,SAASG,EAAAA,CAAkBC,EAAuD,CAChF,IAAMC,EAASD,CAAAA,CAAU,MAAA,EAAU,UAAA,CAC7BE,CAAAA,CAAQF,CAAAA,CAAU,aAAA,GAAkB,KAAO,CAAA,MAAA,EAAMA,CAAAA,CAAU,cAAc,QAAA,EAAU,YAAc,EAAA,CAEvG,OAAIA,CAAAA,CAAU,IAAA,GAAS,QAAA,CACd,CAAA,OAAA,EAAUC,CAAM,CAAA,EAAGC,CAAK,GAG7BF,CAAAA,CAAU,IAAA,GAAS,SACd,CAAA,OAAA,EAAUC,CAAM,GAAGC,CAAK,CAAA,CAAA,CAG7BF,EAAU,IAAA,GAAS,QAAA,CACd,UAAUC,CAAM,CAAA,EAAGC,CAAK,CAAA,CAAA,CAG1B,CAAA,YAAA,EAAeD,CAAM,CAAA,EAAGC,CAAK,CAAA,CACtC,CAEA,SAASC,EAAAA,CAAsB,CAAE,SAAA,CAAAH,CAAU,EAA0E,CACnH,GAAIA,EAAU,IAAA,CAAK,MAAA,GAAW,EAC5B,OAAO,IAAA,CAGT,IAAMI,CAAAA,CAAAA,CAAkBJ,CAAAA,CAAU,gBAAkB,EAAC,EAAG,MAAA,CAAQK,CAAAA,EAAWA,CAAAA,GAAW,KAAK,EAE3F,GAAIL,CAAAA,CAAU,OAAS,QAAA,CACrB,OACEH,KAACS,EAAAA,CAAA,CACC,UAAAlB,GAAAA,CAACmB,EAAAA,CAAA,CACC,QAAA,CAAAV,IAAAA,CAACW,GAAA,CACC,QAAA,CAAA,CAAApB,IAACqB,EAAAA,CAAA,CAAU,QAAA,CAAA,mBAAA,CAAiB,CAAA,CAC3BL,CAAAA,CAAe,GAAA,CAAKC,GACnBjB,GAAAA,CAACqB,EAAAA,CAAA,CAAwB,QAAA,CAAAJ,CAAAA,CAAAA,CAATA,CAAgB,CACjC,CAAA,CAAA,CACH,CAAA,CACF,CAAA,CACAjB,GAAAA,CAACsB,EAAAA,CAAA,CACE,QAAA,CAAAV,CAAAA,CAAU,KAAK,GAAA,CAAI,CAACW,EAAKC,CAAAA,GACxBf,IAAAA,CAACW,EAAAA,CAAA,CAAS,SAAA,CAAU,qBAAA,CAClB,UAAApB,GAAAA,CAACyB,IAAAA,CAAA,CAAU,SAAA,CAAU,6CAAA,CAClB,SAAAF,CAAAA,CAAI,EAAA,EAAMrB,EAAgBqB,CAAAA,CAAI,MAAA,EAAQ,GAAG,CAAA,CAC5C,CAAA,CACCP,EAAe,GAAA,CAAKC,CAAAA,EACnBjB,IAACyB,IAAAA,CAAA,CAAU,SAAA,CAAU,qCAAA,CAClB,QAAA,CAAAvB,CAAAA,CAAgBqB,EAAI,MAAA,GAASN,CAAM,CAAC,CAAA,CAAA,CADyBA,CAEhE,CACD,CAAA,CAAA,CAAA,CAR4CM,CAAAA,CAAI,IAAMC,CAAAA,CAAM,QAAA,EAS/D,CACD,CAAA,CACH,GACF,CAAA,CAIJ,IAAME,EAAUd,CAAAA,CAAU,OAAA,CAAQ,MAAA,CAAQK,CAAAA,EAAWA,CAAAA,GAAW,KAAA,EAAS,CAACD,CAAAA,CAAe,QAAA,CAASC,CAAM,CAAC,CAAA,CAEzG,OACER,IAAAA,CAACS,EAAAA,CAAA,CACC,QAAA,CAAA,CAAAlB,GAAAA,CAACmB,GAAA,CACC,QAAA,CAAAV,KAACW,EAAAA,CAAA,CACC,UAAApB,GAAAA,CAACqB,EAAAA,CAAA,CAAU,QAAA,CAAA,IAAA,CAAE,CAAA,CACZL,CAAAA,CAAe,IAAKC,CAAAA,EACnBjB,GAAAA,CAACqB,GAAA,CAAwB,QAAA,CAAAJ,GAATA,CAAgB,CACjC,CAAA,CACAS,CAAAA,CAAQ,GAAA,CAAKT,CAAAA,EACZjB,IAACqB,EAAAA,CAAA,CAAwB,SAAAJ,CAAAA,CAAAA,CAATA,CAAgB,CACjC,CAAA,CAAA,CACH,CAAA,CACF,CAAA,CACAjB,GAAAA,CAACsB,EAAAA,CAAA,CACE,SAAAV,CAAAA,CAAU,IAAA,CAAK,IAAI,CAACW,CAAAA,CAAKC,IACxBf,IAAAA,CAACW,EAAAA,CAAA,CACC,QAAA,CAAA,CAAApB,GAAAA,CAACyB,KAAA,CAAU,SAAA,CAAU,mDAAoD,QAAA,CAAAF,CAAAA,CAAI,IAAM,QAAA,CAAI,CAAA,CACtFP,CAAAA,CAAe,GAAA,CAAKC,CAAAA,EACnBjB,GAAAA,CAACyB,KAAA,CAAU,SAAA,CAAU,kDACnB,QAAA,CAAAzB,GAAAA,CAAC,QAAK,SAAA,CAAU,iBAAA,CAAmB,SAAAE,CAAAA,CAAgBqB,CAAAA,CAAI,SAASN,CAAM,CAAC,EAAE,CAAA,CAAA,CADCA,CAE5E,CACD,CAAA,CACAS,CAAAA,CAAQ,GAAA,CAAKT,CAAAA,EACZjB,GAAAA,CAACyB,IAAAA,CAAA,CAAU,SAAA,CAAU,YAAA,CAClB,SAAAb,CAAAA,CAAU,IAAA,GAAS,SAClBZ,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,wEAAA,CACb,QAAA,CAAAE,EAAgBqB,CAAAA,CAAI,KAAA,GAAQN,CAAM,CAAC,CAAA,CACtC,EAEAjB,GAAAA,CAACI,EAAAA,CAAA,CAAS,KAAA,CAAOmB,CAAAA,CAAI,KAAA,GAAQN,CAAM,CAAA,CAAG,MAAA,CAAQM,EAAI,MAAA,GAASN,CAAM,EAAG,CAAA,CAAA,CANjCA,CAQvC,CACD,CAAA,CAAA,CAAA,CAjBYM,CAAAA,CAAI,EAAA,EAAMC,EAAM,QAAA,EAkB/B,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAEJ,CAEA,SAASG,EAAAA,CAAmB,CAC1B,UAAA,CAAAC,CAAAA,CACA,OAAAC,CAAAA,CACA,IAAA,CAAAC,EACA,KAAA,CAAAC,CACF,EAKgB,CACd,OACEtB,KAAC,SAAA,CAAA,CAAQ,SAAA,CAAU,8DACjB,QAAA,CAAA,CAAAT,GAAAA,CAAC,WAAQ,SAAA,CAAU,sFAAA,CAChB,SAAA+B,CAAAA,GAAUD,CAAAA,CAAO,gBAAA,CAAmBD,CAAAA,CAAS,2BAAA,CAA8B,CAAA,mBAAA,EAAsBD,EAAW,MAAM,CAAA,CAAA,CAAA,CAAA,CACrH,EACA5B,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,kDAAA,CACZ,QAAA,CAAA4B,EAAW,GAAA,CAAI,CAAChB,EAAWY,CAAAA,GAC1Bf,IAAAA,CAAC,OAAI,SAAA,CAAU,cAAA,CACb,UAAAT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mFAAA,CAAqF,QAAA,CAAAY,CAAAA,CAAU,MAAM,CAAA,CACnHA,CAAAA,CAAU,WAAa,MAAA,CAAO,IAAA,CAAKA,EAAU,SAAS,CAAA,CAAE,OAAS,CAAA,CAChEZ,GAAAA,CAAC,OAAI,SAAA,CAAU,sFAAA,CACZ,cAAK,SAAA,CAAUY,CAAAA,CAAU,UAAW,IAAA,CAAM,CAAC,CAAA,CAC9C,CAAA,CACE,IAAA,CAAA,CAAA,CAN6BY,CAAAA,CAAM,UAOzC,CACD,EACH,CAAA,CAAA,CACF,CAEJ,CAEA,SAASQ,EAAAA,CACP/C,CAAAA,CAC0F,CAC1F,GAAIA,CAAAA,CAAS,OAAS,QAAA,CACpB,OAAO,KAIT,IAAMgD,CAAAA,CADWhD,EAAS,UAAA,CAAW,CAAC,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM;AAAA,CAAI,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,EAAK,EACzC,KAAA,CAAM,GAAG,CAAA,CAC9BiD,CAAAA,CAAWD,CAAAA,EAAU,EAAA,CAAG,EAAE,CAAA,CAC1BE,EAAaF,CAAAA,GAAW,CAAC,CAAA,CAE/B,GAAI,CAACC,CAAAA,EAAY,CAACC,CAAAA,EAAcF,CAAAA,EAAU,MAAA,CAAS,CAAA,CACjD,OAAO,IAAA,CAGT,IAAMG,EAASF,CAAAA,CACZ,OAAA,CAAQ,iBAAA,CAAmB,OAAO,CAAA,CAClC,OAAA,CAAQ,QAAA,CAAU,GAAG,CAAA,CACrB,WAAA,EAAY,CACTG,CAAAA,CAAMF,CAAAA,CAAW,OAAA,CAAQ,QAAA,CAAU,GAAG,CAAA,CAAE,OAAA,CAAQ,OAAA,CAAUG,CAAAA,EAAWA,CAAAA,CAAO,WAAA,EAAa,CAAA,CACzFC,CAAAA,CAAQtD,CAAAA,CAAS,UAAA,CAAW,CAAC,CAAA,EAAG,KAAA,EAAS,GACzCuD,CAAAA,CAAa,gDAAA,CAAiD,IAAA,CAAKD,CAAK,CAAA,CAE9E,GAAIC,CAAAA,GAAa,CAAC,CAAA,EAAKA,CAAAA,CAAW,CAAC,CAAA,CACjC,OAAO,CACL,OAAAJ,CAAAA,CACA,GAAA,CAAAC,CAAAA,CACA,OAAA,CAASG,CAAAA,CAAW,CAAC,CAAA,CAAE,IAAA,EAAK,CAC5B,KAAA,CAAOA,CAAAA,CAAW,CAAC,CAAA,GAAM,SAAA,CAAY,UAAY,UACnD,CAAA,CAIF,IAAMC,CAAAA,CAAU,yCAAA,CAA0C,IAAA,CAAKF,CAAK,CAAA,GAAI,CAAC,CAAA,CAEzE,OAAO,CAAE,MAAA,CAAAH,CAAAA,CAAQ,GAAA,CAAAC,CAAAA,CAAK,OAAA,CAAAI,CAAQ,CAChC,CAEA,SAASC,EAAAA,CAAmBzD,CAAAA,CAAsC,CAChE,IAAM0D,CAAAA,CAAeX,EAAAA,CAAoB/C,CAAQ,CAAA,CAEjD,OAAI0D,EACK,CAAA,EAAGA,CAAAA,CAAa,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAa,CAAA,EAAGA,CAAAA,CAAa,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,OAAOA,CAAAA,CAAa,GAAG,CAAA,CAAA,CAGzG1D,CAAAA,CAAS,IAAA,GAAS,MAAA,CACb,uBAAA,CAGLA,CAAAA,CAAS,IAAA,GAAS,QAAA,CACbA,CAAAA,CAAS,iBAAA,CAAkB,OAAA,CAAQ,WAAA,CAAa,EAAE,CAAA,CAGpDA,CAAAA,CAAS,IAAA,GAAS,QAAA,CAAW,qBAAA,CAAwBA,CAAAA,CAAS,iBACvE,CAGA,SAAS2D,EAAAA,CAAgB,CAAE,SAAA,CAAAhC,CAAU,CAAA,CAA0E,CAC7G,GAAIA,CAAAA,CAAU,IAAA,CAAK,MAAA,GAAW,CAAA,CAC5B,OAAO,IAAA,CAGT,IAAMiC,CAAAA,CAAS1C,CAAAA,EAA4BA,CAAAA,EAAU,IAAA,EAA+BA,CAAAA,GAAU,KAAA,CAExF2C,CAAAA,CAAelC,EAAU,OAAA,CAAQ,MAAA,CAAQK,CAAAA,EAC9BL,CAAAA,CAAU,IAAA,CAAK,IAAA,CAAMW,CAAAA,EAAQsB,CAAAA,CAAMtB,CAAAA,CAAI,MAAA,GAASN,CAAM,CAAC,CAAA,EAAK4B,CAAAA,CAAMtB,CAAAA,CAAI,KAAA,GAAQN,CAAM,CAAC,CAAC,CAAA,CAGjGL,CAAAA,CAAU,IAAA,GAAS,QAAA,CAAiB,IAAA,CAEjCA,CAAAA,CAAU,IAAA,CAAK,IAAA,CAAMW,CAAAA,EAAQrB,CAAAA,CAAgBqB,CAAAA,CAAI,SAASN,CAAM,CAAC,CAAA,GAAMf,CAAAA,CAAgBqB,CAAAA,CAAI,KAAA,GAAQN,CAAM,CAAC,CAAC,CAAA,CAH9F,KAIrB,CAAA,CAED,OACEjB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gFAAA,CACb,QAAA,CAAAS,IAAAA,CAACS,EAAAA,CAAA,CAAM,SAAA,CAAU,YAAA,CACf,QAAA,CAAA,CAAAlB,GAAAA,CAACmB,EAAAA,CAAA,CACC,QAAA,CAAAV,IAAAA,CAACW,EAAAA,CAAA,CACC,QAAA,CAAA,CAAApB,GAAAA,CAACqB,EAAAA,CAAA,CAAU,SAAA,CAAU,QAAA,CAAU,QAAA,CAAAT,CAAAA,CAAU,MAAA,GAAW,QAAA,EAAYA,CAAAA,CAAU,MAAA,GAAW,QAAA,EAAYA,CAAAA,CAAU,SAAW,QAAA,CAAW,SAAA,CAAY,WAAA,CAAY,CAAA,CACxJkC,CAAAA,CAAa,GAAA,CAAK7B,CAAAA,EACjBjB,GAAAA,CAACqB,EAAAA,CAAA,CAAU,SAAA,CAAU,QAAA,CAClB,QAAA,CAAAJ,CAAAA,CAAAA,CADgCA,CAEnC,CACD,CAAA,CAAA,CACH,CAAA,CACF,CAAA,CACAjB,GAAAA,CAACsB,EAAAA,CAAA,CACE,QAAA,CAAAV,CAAAA,CAAU,IAAA,CAAK,GAAA,CAAI,CAACW,CAAAA,CAAKC,CAAAA,GACxBf,IAAAA,CAACW,EAAAA,CAAA,CACC,QAAA,CAAA,CAAAX,IAAAA,CAACgB,IAAAA,CAAA,CAAU,SAAA,CAAU,yCAAA,CAClB,QAAA,CAAA,CAAAb,CAAAA,CAAU,IAAA,GAAS,QAAA,CAAWZ,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,sCAAuC,QAAA,CAAAuB,CAAAA,CAAI,EAAA,CAAG,CAAA,CAAUA,CAAAA,CAAI,EAAA,CAC1GX,CAAAA,CAAU,IAAA,GAAS,QAAA,EAAYW,CAAAA,CAAI,MAAA,GAAW,IAAA,CAC7CvB,GAAAA,CAACC,CAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,OAAA,CAAQ,WAAA,CAAY,QAAA,CAAA,KAAA,CAE/C,CAAA,CACE,IAAA,CACHW,CAAAA,CAAU,IAAA,GAAS,QAAA,EAAYW,CAAAA,CAAI,KAAA,GAAU,IAAA,CAC5CvB,GAAAA,CAACC,EAAA,CAAM,SAAA,CAAU,SAAA,CAAU,OAAA,CAAQ,aAAA,CAAc,QAAA,CAAA,SAAA,CAEjD,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CACC6C,CAAAA,CAAa,GAAA,CAAK7B,CAAAA,EACjBjB,GAAAA,CAACyB,IAAAA,CAAA,CAAU,SAAA,CAAU,WAAA,CAClB,QAAA,CAAAb,CAAAA,CAAU,IAAA,GAAS,QAAA,CAClBZ,GAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAAE,CAAAA,CAAgBqB,CAAAA,CAAI,KAAA,GAAQN,CAAM,CAAC,CAAA,CAAE,EAC1CL,CAAAA,CAAU,IAAA,GAAS,QAAA,CACrBZ,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0BAAA,CAA4B,QAAA,CAAAE,CAAAA,CAAgBqB,CAAAA,CAAI,MAAA,GAASN,CAAM,CAAC,CAAA,CAAE,EAElFjB,GAAAA,CAACI,EAAAA,CAAA,CAAS,KAAA,CAAOmB,CAAAA,CAAI,KAAA,GAAQN,CAAM,CAAA,CAAG,MAAA,CAAQM,CAAAA,CAAI,MAAA,GAASN,CAAM,CAAA,CAAG,CAAA,CAAA,CANlCA,CAQtC,CACD,CAAA,CAAA,CAAA,CAxBYM,CAAAA,CAAI,EAAA,EAAMC,CAAAA,CAAM,QAAA,EAyB/B,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CAEA,SAASuB,EAAAA,CAAwBnC,CAAAA,CAAuD,CACtF,IAAMC,CAAAA,CAASD,CAAAA,CAAU,MAAA,EAAU,QAAA,CAEnC,OAAIC,CAAAA,GAAW,QAAA,EAAYA,CAAAA,GAAW,QAAA,EAAYA,CAAAA,GAAW,QAAA,CACpD,CAAA,OAAA,EAAUA,IAAW,QAAA,CAAW,iBAAA,CAAoBA,CAAM,CAAA,CAAA,CAG/DD,CAAAA,CAAU,IAAA,GAAS,QAAA,CACd,CAAA,WAAA,EAAcC,CAAM,CAAA,MAAA,EAAMD,CAAAA,CAAU,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU,CAAA,UAAA,EAAaA,CAAAA,CAAU,IAAA,CAAK,MAAA,GAAW,CAAA,CAAI,EAAA,CAAK,GAAG,CAAA,CAAA,CAGlHA,CAAAA,CAAU,IAAA,GAAS,QAAA,CACd,CAAA,cAAA,EAAiBC,CAAM,CAAA,CAAA,CAGzB,CAAA,cAAA,EAAiBA,CAAM,CAAA,CAChC,CAGA,SAASmC,EAAAA,CAAoB,CAAE,OAAA,CAAAC,CAAQ,CAAA,CAAyE,CAC9G,IAAMC,CAAAA,CAAUD,CAAAA,CAAQ,MAAA,CAExB,OACExC,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,cAAA,CACZ,QAAA,CAAA,CAAAyC,CAAAA,EAAWA,CAAAA,CAAQ,eAAA,CAAgB,MAAA,CAAS,CAAA,CAC3CzC,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2GAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,OAAI,SAAA,CAAU,6EAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAACmD,iBAAAA,CAAA,CAAkB,SAAA,CAAU,WAAA,CAAY,CAAA,CAAE,sDAAA,CAAA,CAE7C,CAAA,CACAnD,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,2CACX,QAAA,CAAAkD,CAAAA,CAAQ,eAAA,CAAgB,GAAA,CAAKE,CAAAA,EAC5BpD,GAAAA,CAAC,IAAA,CAAA,CAAiB,QAAA,CAAAoD,CAAAA,CAAAA,CAATA,CAAgB,CAC1B,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CACE,KACHF,CAAAA,EAAWA,CAAAA,CAAQ,QAAA,CAAS,MAAA,CAAS,CAAA,CACpClD,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wGAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,sBAAA,CACX,QAAA,CAAAkD,CAAAA,CAAQ,QAAA,CAAS,GAAA,CAAKG,CAAAA,EACrBrD,GAAAA,CAAC,IAAA,CAAA,CAAkB,QAAA,CAAAqD,CAAAA,CAAAA,CAAVA,CAAkB,CAC5B,CAAA,CACH,CAAA,CACF,CAAA,CACE,IAAA,CACHJ,CAAAA,CAAQ,WAAW,GAAA,CAAI,CAACrC,CAAAA,CAAWY,CAAAA,GAClCf,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,cAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAW,CAAA,0BAAA,EAA6BY,CAAAA,CAAU,OAAS,QAAA,CAAW,qBAAA,CAAwB,EAAE,CAAA,CAAA,CAClG,QAAA,CAAAmC,EAAAA,CAAwBnC,CAAS,CAAA,CACpC,CAAA,CACAZ,GAAAA,CAAC4C,EAAAA,CAAA,CAAgB,SAAA,CAAWhC,CAAAA,CAAW,IAJN,CAAA,EAAGA,CAAAA,CAAU,MAAA,EAAU,EAAE,CAAA,CAAA,EAAIY,CAAAA,CAAM,QAAA,EAAU,CAAA,CAKhF,CACD,CAAA,CACAyB,CAAAA,CAAQ,UAAA,CAAW,MAAA,GAAW,CAAA,CAC7BjD,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wGAAA,CAAyG,QAAA,CAAA,yDAAA,CAExH,CAAA,CACE,IAAA,CAAA,CACN,CAEJ,CAGA,SAASsD,EAAAA,CAAuBC,CAAAA,CAA0BC,CAAAA,CAAoC,CAC5F,OACED,EAAK,EAAA,GAAOC,CAAAA,CAAM,EAAA,EAClBD,CAAAA,CAAK,MAAA,GAAWC,CAAAA,CAAM,MAAA,EACtBD,CAAAA,CAAK,SAAA,GAAcC,CAAAA,CAAM,SAAA,EACzBD,CAAAA,CAAK,SAAA,GAAcC,CAAAA,CAAM,WACzBD,CAAAA,CAAK,UAAA,GAAeC,CAAAA,CAAM,UAAA,EAC1BD,CAAAA,CAAK,KAAA,GAAUC,CAAAA,CAAM,KAAA,EACrBD,CAAAA,CAAK,MAAA,GAAWC,CAAAA,CAAM,MAAA,EACtBD,CAAAA,CAAK,SAAA,GAAcC,EAAM,SAAA,EACzBD,CAAAA,CAAK,iBAAA,GAAsBC,CAAAA,CAAM,iBAAA,EACjCD,CAAAA,CAAK,aAAA,GAAkBC,CAAAA,CAAM,aAAA,EAC7B,IAAA,CAAK,SAAA,CAAUD,CAAAA,CAAK,OAAO,CAAA,GAAM,IAAA,CAAK,SAAA,CAAUC,CAAAA,CAAM,OAAO,CAEjE,CAEA,SAASC,EAAAA,CAAoB,CAC3B,GAAA,CAAAC,CAAAA,CACA,QAAA,CAAUC,CAAAA,CACV,SAAA,CAAAC,CACF,CAAA,CAeE,CACA,GAAM,CAAC3E,CAAAA,CAAU4E,CAAW,CAAA,CAAIC,QAAAA,CAASH,CAAe,CAAA,CAOlD,CAACI,CAAAA,CAAqBC,CAAsB,CAAA,CAAIF,QAAAA,CAASH,CAAe,CAAA,CACxE,CAACM,CAAAA,CAAcC,CAAe,CAAA,CAAIJ,QAAAA,CAAS,EAAE,CAAA,CAC7C,CAACK,CAAAA,CAAYC,CAAqB,CAAA,CAAIC,aAAAA,EAAc,CACpD,CAACC,CAAAA,CAAoBC,CAAqB,CAAA,CAAIT,QAAAA,CAAS,KAAK,CAAA,CAC5D,CAACU,CAAAA,CAASC,CAAU,CAAA,CAAIX,QAAAA,CAAS,KAAK,CAAA,CACtC,CAACY,CAAAA,CAAcC,CAAe,CAAA,CAAIb,QAAAA,CAAS,EAAE,CAAA,CAC7Cc,EAAAA,CAA2B3G,EAAAA,EAA4B,CAEzD0F,CAAAA,GAAoBI,CAAAA,GACtBC,CAAAA,CAAuBL,CAAe,CAAA,CAEjCL,EAAAA,CAAuBK,CAAAA,CAAiBI,CAAmB,CAAA,EAE5D9E,EAAS,EAAA,GAAO0E,CAAAA,CAAgB,EAAA,EAAM1E,CAAAA,CAAS,MAAA,GAAW,SAAA,EAAa0E,CAAAA,CAAgB,MAAA,GAAW,SAAA,EAGlGE,CAAAA,CAAYF,CAAe,CAAA,CAAA,CAKjC,SAASkB,CAAAA,CAAYC,EAAwC,CAC3DjB,CAAAA,CAAYiB,CAAY,CAAA,CAExBF,EAAAA,EAAyB,CAIrBE,CAAAA,CAAa,IAAA,GAAS,QAAA,EAAYA,CAAAA,CAAa,MAAA,GAAW,UAAA,EAC5DzF,CAAAA,CAAsB,CACpB,WAAYyF,CAAAA,CAAa,EAAA,CACzB,WAAA,CAAarG,GAAAA,CAAMqG,CAAAA,CAAa,SAAS,CAAA,CAAE,QAAA,CAASA,CAAAA,CAAa,EAAE,CAAA,CACnE,SAAA,CAAWA,CAAAA,CAAa,SAC1B,CAAC,CAAA,CAGHlB,CAAAA,GAAYkB,CAAY,EAC1B,CAEA,SAASC,EAAAA,CAAO,CACd,QAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,KAAA,CACR,MAAA,CAAAC,CAAAA,CACA,SAAAC,EAAAA,CAAW,KACb,CAAA,CAKS,CACPf,CAAAA,CAAsB,SAAY,CAChCF,CAAAA,CAAgB,EAAE,CAAA,CAElB,GAAI,CACF,IAAMkB,CAAAA,CAAS,MAAM1B,CAAAA,CAAI,cAAA,CAAezE,CAAAA,CAAS,EAAA,CAAI,CAAE,QAAA,CAAA+F,CAAAA,CAAU,KAAA,CAAAC,CAAAA,CAAO,MAAA,CAAAC,CAAAA,CAAQ,QAAA,CAAAC,EAAS,CAAC,EAE1F,GAAIC,CAAAA,CAAO,SAAA,GAAc,eAAA,CAAiB,CACxCX,CAAAA,CAAW,CAAA,CAAI,CAAA,CAEXW,CAAAA,CAAO,QAAA,EACTvB,CAAAA,CAAYuB,CAAAA,CAAO,QAAQ,CAAA,CAG7B,MACF,CAyBA,GAvBAX,CAAAA,CAAW,CAAA,CAAK,CAAA,CAChBF,CAAAA,CAAsB,CAAA,CAAK,CAAA,CAEvBa,CAAAA,CAAO,QAAA,CACTP,CAAAA,CAAYO,CAAAA,CAAO,QAAQ,CAAA,CAClBA,CAAAA,CAAO,QAGhBP,CAAAA,CAAY,CACV,GAAG5F,CAAAA,CACH,SAAA,CAAWA,CAAAA,CAAS,SAAA,EAAa,IAAI,IAAA,EAAK,CAAE,WAAA,EAAY,CACxD,MAAA,CAAQiG,CAAAA,EAAUjG,EAAS,MAAA,CAC3B,MAAA,CAAQ+F,CAAAA,CAAW,UAAA,CAAa,UAClC,CAAC,CAAA,CACQI,CAAAA,CAAO,SAAA,GAAc,iBAAA,EAG9BxB,CAAAA,GAAY3E,CAAQ,CAAA,CAMlB,CAACmG,EAAO,OAAA,GAAYA,CAAAA,CAAO,SAAA,GAAc,iBAAA,EAAqB,CAACA,CAAAA,CAAO,QAAA,CAAA,CAAW,CACnF,IAAMC,CAAAA,CAAU,KAAA,CAAM,OAAA,CAAQD,CAAAA,CAAO,YAAY,CAAA,CAAIA,CAAAA,CAAO,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,CAAIA,CAAAA,CAAO,YAAA,CAE7FlB,CAAAA,CAAgBmB,CAAAA,EAAW,gCAAgC,EAC7D,CACF,CAAA,MAASC,CAAAA,CAAO,CACdpB,EAAgBoB,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAM,OAAA,CAAU,gCAAgC,EAC3F,CACF,CAAC,EACH,CAEA,OAAO,CACL,QAAA,CAAArG,CAAAA,CACA,MAAA,CAAA8F,EAAAA,CACA,YAAA,CAAAd,CAAAA,CACA,UAAA,CAAAE,CAAAA,CACA,SAAA,CAAWlF,CAAAA,CAAS,MAAA,GAAW,SAAA,CAC/B,kBAAA,CAAAqF,CAAAA,CACA,OAAA,CAAAE,CAAAA,CACA,YAAA,CAAAE,CAAAA,CACA,sBAAAH,CAAAA,CACA,eAAA,CAAAI,CACF,CACF,CAEA,SAASY,EAAAA,CAAwB,CAC/B,aAAA,CAAAC,CAAAA,CAAgB,KAAA,CAChB,qBAAA,CAAAC,CAAAA,CACA,MAAA,CAAAV,CAAAA,CACA,UAAA,CAAAZ,CAAAA,CACA,kBAAA,CAAAG,CAAAA,CACA,OAAA,CAAAE,CAAAA,CACA,YAAA,CAAAE,CAAAA,CACA,qBAAA,CAAAH,CAAAA,CACA,eAAA,CAAAI,CAAAA,CACA,OAAA,CAAAe,CACF,CAAA,CAYgB,CACd,IAAMC,GAAAA,CAAWD,CAAAA,GAAY,QAAA,CACvBE,CAAAA,CAAkBD,GAAAA,CAAW,qBAAA,CAAwB,MAAA,CACrDE,CAAAA,CAAaF,GAAAA,CAAW,SAAA,CAAY,IAAA,CACpC,CAACR,GAAAA,CAAUW,CAAW,CAAA,CAAIhC,QAAAA,CAAS,KAAK,CAAA,CACxCiC,CAAAA,CAAaC,KAAAA,EAAM,CAEzB,OACEvF,IAAAA,CAAAwF,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAxF,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,iDAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAACyF,GAAAA,CAAA,CACC,SAAA,CAAWN,CAAAA,CACX,QAAA,CAAUzB,CAAAA,CACV,IAAA,CAAM0B,CAAAA,CACN,OAAA,CAAS,IAAMd,CAAAA,CAAO,CAAE,QAAA,CAAU,IAAA,CAAM,KAAA,CAAOP,CAAAA,CAAS,QAAA,CAAUgB,CAAAA,EAAiBL,GAAS,CAAC,CAAA,CAE5F,QAAA,CAAA,CAAAhB,CAAAA,CAAanE,GAAAA,CAACmG,YAAAA,CAAA,CAAa,SAAA,CAAU,4BAA4B,CAAA,CAAKnG,GAAAA,CAACoG,SAAAA,CAAA,CAAU,SAAA,CAAU,WAAA,CAAY,CAAA,CACvG5B,CAAAA,CAAU,gBAAA,CAAmB,SAAA,CAAA,CAChC,CAAA,CACA/D,IAAAA,CAACyF,GAAAA,CAAA,CACC,UAAWN,CAAAA,CACX,QAAA,CAAUzB,CAAAA,CACV,IAAA,CAAM0B,CAAAA,CACN,OAAA,CAAQ,SAAA,CACR,OAAA,CAAS,IAAM,CACTJ,CAAAA,EACFd,CAAAA,CAAgB,EAAE,CAAA,CAClBJ,EAAsB,IAAI,CAAA,EAE1BQ,CAAAA,CAAO,CAAE,QAAA,CAAU,KAAM,CAAC,EAE9B,CAAA,CAEA,QAAA,CAAA,CAAA/E,GAAAA,CAACqG,KAAAA,CAAA,CAAM,SAAA,CAAU,WAAA,CAAY,CAAA,CAAE,QAAA,CAAA,CAEjC,CAAA,CACCb,CAAAA,CACC/E,IAAAA,CAAC,OAAA,CAAA,CACC,SAAA,CAAU,uHAAA,CACV,OAAA,CAASsF,CAAAA,CAET,QAAA,CAAA,CAAA/F,GAAAA,CAACsG,CAAAA,CAAA,CAAS,OAAA,CAASnB,IAAU,EAAA,CAAIY,CAAAA,CAAY,eAAA,CAAkBQ,CAAAA,EAAYT,CAAAA,CAAYS,CAAAA,GAAY,IAAI,CAAA,CAAG,CAAA,CAAE,4CAAA,CAAA,CAE9G,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CAECd,CAAAA,CACCzF,IAACwG,CAAAA,CAAA,CAAO,IAAA,CAAMlC,CAAAA,CAAoB,YAAA,CAAcC,CAAAA,CAC9C,QAAA,CAAA9D,IAAAA,CAACgG,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAhG,IAAAA,CAACiG,CAAAA,CAAA,CACC,UAAA1G,GAAAA,CAAC2G,CAAAA,CAAA,CAAY,QAAA,CAAA,uBAAA,CAAqB,CAAA,CAClC3G,GAAAA,CAAC4G,CAAAA,CAAA,CAAkB,QAAA,CAAA,2FAAA,CAEnB,CAAA,CAAA,CACF,CAAA,CACA5G,GAAAA,CAAC6G,EAAAA,CAAA,CACC,WAAA,CAAY,kCAAA,CACZ,KAAA,CAAOnC,CAAAA,CACP,QAAA,CAAWoC,CAAAA,EAAUnC,CAAAA,CAAgBmC,CAAAA,CAAM,MAAA,CAAO,KAAK,CAAA,CACzD,CAAA,CACArG,IAAAA,CAACsG,CAAAA,CAAA,CACC,QAAA,CAAA,CAAA/G,IAACkG,GAAAA,CAAA,CAAO,QAAA,CAAU/B,CAAAA,CAAY,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,OAAA,CAAS,IAAMI,CAAAA,CAAsB,KAAK,CAAA,CAAG,QAAA,CAAA,QAAA,CAEvG,CAAA,CACA9D,IAAAA,CAACyF,GAAAA,CAAA,CACC,QAAA,CAAU/B,CAAAA,CACV,IAAA,CAAK,IAAA,CACL,OAAA,CAAQ,aAAA,CACR,OAAA,CAAS,IAAMY,CAAAA,CAAO,CAAE,QAAA,CAAU,KAAA,CAAO,OAAQL,CAAAA,CAAa,IAAA,EAAK,EAAK,MAAU,CAAC,CAAA,CAElF,QAAA,CAAA,CAAAP,CAAAA,CACCnE,GAAAA,CAACmG,YAAAA,CAAA,CAAa,SAAA,CAAU,2BAAA,CAA4B,CAAA,CAEpDnG,GAAAA,CAACgH,cAAAA,CAAA,CAAe,SAAA,CAAU,WAAA,CAAY,CAAA,CACtC,iBAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACE,IAAA,CAAA,CACN,CAEJ,CAEA,SAASC,EAAAA,CAAiB,CACxB,QAAA,CAAAhI,CAAAA,CACA,IAAA,CAAA6C,CAAAA,CACA,YAAA,CAAAmC,CAAAA,CACA,SAAA,CAAAiD,CAAAA,CACA,OAAA,CAAA1C,CACF,CAAA,CAMgB,CACd,GAAM,CAAE,QAAAvB,CAAQ,CAAA,CAAIhE,CAAAA,CACd0D,CAAAA,CAAeb,CAAAA,CAAOE,EAAAA,CAAoB/C,CAAQ,CAAA,CAAI,IAAA,CAE5D,OAIEwB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uCAAA,CACb,UAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+CAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAACF,EAAAA,CAAA,CAAoB,MAAA,CAAQb,CAAAA,CAAS,MAAA,CAAQ,CAAA,CAC7CA,CAAAA,CAAS,IAAA,GAAS,QAAA,CAAWe,GAAAA,CAACC,CAAAA,CAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,QAAA,CAAA,eAAA,CAAa,CAAA,CAAW,IAAA,CAC/ED,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,2BAAA,CACb,QAAA,CAAA8B,CAAAA,CAAOY,EAAAA,CAAmBzD,CAAQ,CAAA,CAAIA,CAAAA,CAAS,iBAAA,CAClD,CAAA,CAAA,CACF,CAAA,CACAwB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qCAAA,CACZ,QAAA,CAAA,CAAAxB,CAAAA,CAAS,cAAA,CAAiB,CAAA,EAAGA,CAAAA,CAAS,cAAc,CAAA,MAAA,CAAA,CAAQ,EAAA,CAAG,YAAA,CACrDkI,cAAAA,CAAe,IAAI,IAAA,CAAKlI,CAAAA,CAAS,WAAW,CAAA,CAAG,IAAI,IAAA,CAAQ,CAAE,SAAA,CAAW,IAAK,CAAC,CAAA,CACxFiI,CAAAA,CAAY,CAAA,cAAA,EAAcC,cAAAA,CAAe,IAAI,IAAA,CAAKlI,CAAAA,CAAS,SAAS,CAAA,CAAG,IAAI,IAAA,CAAQ,CAAE,SAAA,CAAW,IAAK,CAAC,CAAC,CAAA,CAAA,CAAK,EAAA,CAC5GA,CAAAA,CAAS,SAAA,CAAY,CAAA,cAAA,EAAcmI,MAAAA,CAAO,IAAI,IAAA,CAAKnI,CAAAA,CAAS,SAAS,CAAA,CAAG,MAAM,CAAC,CAAA,CAAA,CAAK,IACvF,CAAA,CAECuF,CAAAA,CACC/D,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wIAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAACmD,iBAAAA,CAAA,CAAkB,SAAA,CAAU,mDAAA,CAAoD,CAAA,CACjFnD,GAAAA,CAAC,QAAK,QAAA,CAAA,gJAAA,CAGN,CAAA,CAAA,CACF,CAAA,CACE,IAAA,CAEHf,CAAAA,CAAS,IAAA,GAAS,QAAA,EAAYgE,CAAAA,CAC7BjD,GAAAA,CAACgD,EAAAA,CAAA,CAAoB,OAAA,CAASC,CAAAA,CAAS,CAAA,CACrCA,GAAWA,CAAAA,CAAQ,UAAA,CAAW,MAAA,CAAS,CAAA,CACzCjD,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,cAAA,CACZ,QAAA,CAAAiD,CAAAA,CAAQ,UAAA,CAAW,GAAA,CAAI,CAACrC,CAAAA,CAAWY,CAAAA,GAClCf,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,cAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2BAAA,CAA6B,QAAA,CAAAW,EAAAA,CAAkBC,CAAS,CAAA,CAAE,CAAA,CACxEA,CAAAA,CAAU,OAAS,QAAA,EAAYA,CAAAA,CAAU,aAAA,GAAkB,IAAA,CAC1DH,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+HAAA,CACZ,QAAA,CAAA,CAAAG,CAAAA,CAAU,aAAA,CAAc,QAAA,EAAS,CAAE,SAAA,CAAQA,CAAAA,CAAU,aAAA,GAAkB,CAAA,CAAI,EAAA,CAAK,GAAA,CAAI,+BAAA,CAAA,CAEvF,CAAA,CACE,IAAA,CACJZ,GAAAA,CAACe,EAAAA,CAAA,CAAsB,SAAA,CAAWH,CAAAA,CAAW,CAAA,CAC5CA,CAAAA,CAAU,SAAA,CACTH,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qCAAA,CAAsC,QAAA,CAAA,CAAA,+BAAA,CACrBG,CAAAA,CAAU,IAAA,CAAK,MAAA,CAAO,QAAA,EAAS,CAAE,QAAA,CAAA,CACjE,CAAA,CACE,IAAA,CAAA,CAAA,CAb6BY,CAAAA,CAAM,QAAA,EAczC,CACD,CAAA,CACH,CAAA,CAEAxB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wGAAA,CACZ,QAAA,CAAA8B,CAAAA,CACGa,CAAAA,CACE,CAAA,iBAAA,EAAoBA,CAAAA,CAAa,KAAA,GAAU,SAAA,CAAY,eAAA,CAAkB,MAAM,CAAA,CAAA,EAAIA,CAAAA,CAAa,GAAG,CAAA,QAAA,EAAWA,CAAAA,CAAa,OAAA,CAAU,CAAA,EAAA,EAAKA,CAAAA,CAAa,OAAO,CAAA,CAAA,CAAA,CAAM,EAAE,CAAA,oCAAA,CAAA,CACtK,6EAAA,CACF1D,CAAAA,CAAS,OAAS,QAAA,CAChB,6EAAA,CACAA,CAAAA,CAAS,IAAA,GAAS,MAAA,CAChB,8IAAA,CACA,+FAAA,CACV,CAAA,CAGFe,GAAAA,CAAC2B,EAAAA,CAAA,CACC,IAAA,CAAMG,CAAAA,CACN,UAAA,CAAY7C,EAAS,UAAA,CACrB,MAAA,CAAQA,CAAAA,CAAS,IAAA,GAAS,QAAA,EAAYA,CAAAA,CAAS,IAAA,GAAS,MAAA,CACxD,KAAA,CAAOA,CAAAA,CAAS,IAAA,GAAS,MAAA,CAAS,qBAAA,CAAwBA,CAAAA,CAAS,IAAA,GAAS,QAAA,CAAW,YAAA,CAAe,MAAA,CACxG,CAAA,CAECA,CAAAA,CAAS,MAAA,CACRwB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,gBAAA,CAAiB,mBAAO,CAAA,CAAO,GAAA,CAAEf,CAAAA,CAAS,MAAA,CAAA,CAC5D,CAAA,CACE,IAAA,CACHA,CAAAA,CAAS,KAAA,CACRwB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2GAAA,CAA4G,QAAA,CAAA,CAAA,oBAAA,CACtGxB,CAAAA,CAAS,OAC9B,CAAA,CACE,IAAA,CACHA,CAAAA,CAAS,UAAA,EAAc,CAACA,CAAAA,CAAS,KAAA,CAChCwB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6DAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAACoG,SAAAA,CAAA,CAAU,SAAA,CAAU,WAAA,CAAY,CAAA,CAAE,WAAA,CACzBgB,MAAAA,CAAO,IAAI,IAAA,CAAKnI,CAAAA,CAAS,UAAU,CAAA,CAAG,MAAM,CAAA,CAAA,CACxD,CAAA,CACE,IAAA,CACHgF,CAAAA,CAAejE,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gCAAA,CAAkC,QAAA,CAAAiE,CAAAA,CAAa,CAAA,CAAS,IAAA,CAAA,CACzF,CAEJ,CAEO,SAASoD,EAAAA,CAAa,CAC3B,GAAA,CAAA3D,CAAAA,CACA,SAAUC,CAAAA,CACV,IAAA,CAAA7B,CAAAA,CACA,SAAA,CAAA8B,CACF,CAAA,CAKgB,CACd,GAAM,CACJ,QAAA,CAAA3E,CAAAA,CACA,MAAA,CAAA8F,CAAAA,CACA,YAAA,CAAAd,EACA,UAAA,CAAAE,CAAAA,CACA,SAAA,CAAA+C,CAAAA,CACA,kBAAA,CAAA5C,CAAAA,CACA,OAAA,CAAAE,CAAAA,CACA,YAAA,CAAAE,CAAAA,CACA,qBAAA,CAAAH,CAAAA,CACA,eAAA,CAAAI,CACF,EAAIlB,EAAAA,CAAoB,CAAE,GAAA,CAAAC,CAAAA,CAAK,QAAA,CAAUC,CAAAA,CAAiB,SAAA,CAAAC,CAAU,CAAC,CAAA,CAErE,OACEnD,IAAAA,CAAAwF,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAjG,GAAAA,CAACiH,EAAAA,CAAA,CACC,QAAA,CAAUhI,CAAAA,CACV,IAAA,CAAM6C,CAAAA,CACN,YAAA,CAAcmC,CAAAA,CACd,SAAA,CAAWiD,CAAAA,CACX,OAAA,CAAS1C,CAAAA,CACX,CAAA,CACC0C,CAAAA,CACClH,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CACb,QAAA,CAAAA,GAAAA,CAACuF,EAAAA,CAAA,CACC,aAAA,CAAe,CAACzD,CAAAA,EAAQ7C,CAAAA,CAAS,IAAA,GAAS,QAAA,EAAY,CAAA,CAAQA,CAAAA,CAAS,YAAA,CACvE,qBAAA,CAAuB,CAAC6C,CAAAA,CACxB,MAAA,CAAQiD,CAAAA,CACR,UAAA,CAAYZ,CAAAA,CACZ,kBAAA,CAAoBG,CAAAA,CACpB,OAAA,CAASE,CAAAA,CACT,YAAA,CAAcE,CAAAA,CACd,qBAAA,CAAuBH,EACvB,eAAA,CAAiBI,CAAAA,CACjB,OAAA,CAAQ,QAAA,CACV,CAAA,CACF,CAAA,CACE,IAAA,CAAA,CACN,CAEJ,CAEO,SAAS2C,EAAAA,CAAe,CAC7B,GAAA,CAAA5D,CAAAA,CACA,QAAA,CAAUC,CAAAA,CACV,OAAA,CAAA4D,CAAAA,CACA,SAAA,CAAA3D,CACF,CAAA,CAKgB,CACd,GAAM,CACJ,QAAA,CAAA3E,CAAAA,CACA,MAAA,CAAA8F,CAAAA,CACA,YAAA,CAAAd,CAAAA,CACA,WAAAE,CAAAA,CACA,SAAA,CAAA+C,CAAAA,CACA,kBAAA,CAAA5C,CAAAA,CACA,OAAA,CAAAE,CAAAA,CACA,YAAA,CAAAE,CAAAA,CACA,qBAAA,CAAAH,CAAAA,CACA,eAAA,CAAAI,CACF,CAAA,CAAIlB,GAAoB,CAAE,GAAA,CAAAC,CAAAA,CAAK,QAAA,CAAUC,CAAAA,CAAiB,SAAA,CAAAC,CAAU,CAAC,CAAA,CAErE,OACE5D,GAAAA,CAACwH,EAAAA,CAAA,CACC,OAAA,CACEN,EACElH,GAAAA,CAACuF,EAAAA,CAAA,CACC,aAAA,CAAetG,CAAAA,CAAS,IAAA,GAAS,QAAA,EAAY,CAAA,CAAQA,CAAAA,CAAS,YAAA,CAC9D,qBAAA,CAAqB,IAAA,CACrB,MAAA,CAAQ8F,CAAAA,CACR,UAAA,CAAYZ,CAAAA,CACZ,kBAAA,CAAoBG,CAAAA,CACpB,OAAA,CAASE,CAAAA,CACT,YAAA,CAAcE,CAAAA,CACd,qBAAA,CAAuBH,CAAAA,CACvB,eAAA,CAAiBI,CAAAA,CACjB,OAAA,CAAQ,QAAA,CACV,CAAA,CACE,IAAA,CAEN,MAAO,CAAA,CACP,SAAA,CAAS,IAAA,CACT,OAAA,CAAS4C,CAAAA,CACT,KAAA,CAAM,mBAAA,CAEN,QAAA,CAAAvH,GAAAA,CAACiH,EAAAA,CAAA,CACC,QAAA,CAAUhI,CAAAA,CACV,IAAA,CAAM,KAAA,CACN,YAAA,CAAcgF,CAAAA,CACd,SAAA,CAAWiD,CAAAA,CACX,OAAA,CAAS1C,CAAAA,CACX,CAAA,CACF,CAEJ,CCv2BO,IAAMiD,EAAAA,CAA6B,gCAAA,CAC7BC,EAAAA,CAAgC,wCAAA,CAEvCC,EAAAA,CAA4B,IAAI,GAAA,CAAY,CAChD,qBAAA,CACA,sBAAA,CACA,iBAAA,CACA,WAAA,CACA,kBAAA,CACA,kBAAA,CACA,oBAAA,CACA,oBAAA,CACA,uBAAA,CACA,iBACF,CAAC,CAAA,CAMM,SAASC,CAAAA,CAAwBC,CAAAA,CAAuB,CAC7D,OAAOF,EAAAA,CAA0B,GAAA,CAAIE,CAAI,CAC3C,CAEO,SAASC,CAAAA,CAAeC,CAAAA,CAA4B,CACzD,OAAQA,CAAAA,CAAqB,IAC/B,CAGO,SAASC,EAAAA,CAAkB3C,CAAAA,CAAwD,CACxF,OACE,CAACA,CAAAA,CAAQ,SAAA,EACT,CAAA,EACEA,CAAAA,CAAQ,MAAA,EAAQ,UAAA,CAAWoC,EAA0B,GAAKpC,CAAAA,CAAQ,MAAA,EAAQ,UAAA,CAAWqC,EAA6B,CAAA,CAGxH,CAEO,SAASO,CAAAA,CAAcC,CAAAA,CAAcC,CAAAA,CAAY,EAAA,CAAiC,CACvF,IAAMC,CAAAA,CAAUF,EAAK,IAAA,EAAK,CAE1B,GAAIE,CAAAA,CAAQ,MAAA,EAAUD,CAAAA,CACpB,OAAOC,CAAAA,CAGT,IAAMC,CAAAA,CAAMD,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAGD,CAAS,CAAA,CAChCG,CAAAA,CAAYD,CAAAA,CAAI,WAAA,CAAY,GAAG,CAAA,CAGrC,OAAO,CAAA,EAAA,CAFcC,CAAAA,EAAa,IAAA,CAAK,KAAA,CAAMH,CAAAA,CAAY,EAAG,CAAA,CAAIE,CAAAA,CAAI,KAAA,CAAM,EAAGC,CAAS,CAAA,CAAID,CAAAA,EAEnE,OAAA,EAAS,CAAA,MAAA,CAClC,CAEO,SAASE,EAAAA,CAAoBL,CAAAA,CAAsB,CACxD,OAAOA,CAAAA,CACJ,OAAA,CAAQ,YAAA,CAAc,EAAE,CAAA,CACxB,OAAA,CAAQ,uBAAA,CAAyB,EAAE,CAAA,CACnC,OAAA,CAAQ,0BAAA,CAA4B,IAAI,CAAA,CACxC,OAAA,CAAQ,mBAAA,CAAqB,IAAI,CAAA,CACjC,OAAA,CAAQ,iBAAkB,IAAI,CAAA,CAC9B,OAAA,CAAQ,YAAA,CAAc,IAAI,CAAA,CAC1B,OAAA,CAAQ,UAAA,CAAY,EAAE,CAAA,CACtB,OAAA,CAAQ,MAAA,CAAQ,GAAG,CAAA,CACnB,IAAA,EAAK,CACL,OAAA,CAAQ,QAAA,CAAU,EAAE,CACzB,CAOO,SAASM,EAAAA,CAA0BN,CAAAA,CAAsB,CAC9D,IAAMO,CAAAA,CAAcP,CAAAA,CAAK,WAAA,CAAY;AAAA,CAAI,CAAA,CACrCQ,CAAAA,CAAe,EAAA,CACbC,CAAAA,CAAc,cAAA,CAChBC,CAAAA,CAEJ,KAAA,CAAQA,CAAAA,CAAQD,CAAAA,CAAY,IAAA,CAAKT,CAAI,CAAA,IAAO,IAAA,EAC1CQ,CAAAA,CAAeE,CAAAA,CAAM,KAAA,CAGvB,IAAMC,CAAAA,CAAW,IAAA,CAAK,GAAA,CAAIJ,CAAAA,CAAaC,CAAY,CAAA,CAEnD,OAAIG,CAAAA,CAAW,CAAA,CACN,EAAA,CAGFX,CAAAA,CAAK,KAAA,CAAM,CAAA,CAAGW,CAAAA,CAAW,CAAC,CACnC,CAOO,SAASC,EAAAA,CAAwBZ,CAAAA,CAAca,CAAAA,CAAgD,CAEpG,IAAMC,CAAAA,CAAAA,CADgCR,EAAAA,CAA0BN,CAAI,CAAIA,EAErE,KAAA,CAAM,OAAO,CAAA,CACb,GAAA,CAAKe,CAAAA,EAASA,CAAAA,CAAK,IAAA,EAAM,CAAA,CACzB,MAAA,CAAO,OAAO,CAAA,CACXC,CAAAA,CAAOF,CAAAA,CAAMA,EAAM,MAAA,CAAS,CAAC,CAAA,CAEnC,GAAI,CAACE,CAAAA,CACH,OAAO,IAAA,CAIT,IAAMC,CAAAA,CADU,mBAAA,CAAoB,IAAA,CAAKD,CAAI,CAAA,GAAI,CAAC,CAAA,EAAK,iBAAA,CAAkB,IAAA,CAAKA,CAAI,CAAA,GAAI,CAAC,CAAA,EAC1D,qBAAA,CAAsB,IAAA,CAAKA,CAAI,CAAA,GAAI,CAAC,CAAA,EAAKA,CAAAA,CAChEE,CAAAA,CAAQb,EAAAA,CAAoBY,CAAS,CAAA,CAE3C,OAAI,CAACC,CAAAA,EAAS,cAAA,CAAe,IAAA,CAAKA,CAAK,CAAA,CAC9B,IAAA,CAGFnB,CAAAA,CAAcmB,CAAK,CAC5B,CAEA,SAASC,EAAAA,CAAiBC,CAAAA,CAAsB,CAC9C,OAAOA,CAAAA,CAAK,OAAA,CAAQ,QAAA,CAAU,GAAG,CAAA,CAAE,IAAA,EACrC,CAGO,SAASC,EAAAA,CAAsBxB,CAAAA,CAAwC,CAC5E,GAAIA,CAAAA,CAAK,IAAA,GAAS,iBAAA,CAAmB,CACnC,IAAMyB,CAAAA,CAAO1B,CAAAA,CAA2CC,CAAI,CAAA,CAE5D,OAAIyB,CAAAA,CAAK,MAAA,GAAW,SAAA,CACX,IAAA,CAGFA,CAAAA,CAAK,SAAA,CAAYvB,CAAAA,CAAc,CAAA,eAAA,EAAkBuB,CAAAA,CAAK,SAAS,CAAA,CAAA,CAAG,CAAA,CAAI,eAC/E,CAEA,GAAIzB,CAAAA,CAAK,IAAA,GAAS,oBAAA,CAGhB,OAFaD,CAAAA,CAA8CC,CAAI,CAAA,CAEnD,MAAA,GAAW,SAAA,CAAY,kBAAA,CAAqB,IAAA,CAG1D,GAAIA,CAAAA,CAAK,IAAA,GAAS,uBAAA,CAGhB,OAFaD,CAAAA,CAAiDC,CAAI,CAAA,CAEtD,MAAA,GAAW,SAAA,CAAY,0BAAA,CAA6B,IAAA,CAGlE,GAAIA,CAAAA,CAAK,IAAA,GAAS,sBAAA,CAAwB,CACxC,IAAMyB,CAAAA,CAAO1B,CAAAA,CAAgDC,CAAI,CAAA,CAEjE,OAAIyB,CAAAA,CAAK,MAAA,GAAW,SAAA,CACX,IAAA,CAGFA,CAAAA,CAAK,aAAA,GAAkB,UAAA,CAAa,4BAAA,CAA+B,yBAC5E,CAEA,GAAIzB,CAAAA,CAAK,IAAA,GAAS,oBAAA,CAGhB,OAFaD,CAAAA,CAA8CC,CAAI,CAAA,CAEnD,MAAA,GAAW,SAAA,CAAY,iBAAA,CAAoB,IAAA,CAGzD,GAAIA,CAAAA,CAAK,IAAA,GAAS,iBAAA,CAAmB,CACnC,IAAMyB,CAAAA,CAAO1B,CAAAA,CAA2CC,CAAI,CAAA,CAE5D,OAAIyB,CAAAA,CAAK,MAAA,GAAW,SAAA,CACX,IAAA,CAGFA,CAAAA,CAAK,KAAA,CAAQvB,CAAAA,CAAc,CAAA,uBAAA,EAA0BuB,CAAAA,CAAK,KAAK,CAAA,CAAA,CAAG,CAAA,CAAI,mBAC/E,CAEA,GAAIzB,CAAAA,CAAK,IAAA,GAAS,kBAAA,CAAoB,CACpC,IAAMyB,CAAAA,CAAO1B,CAAAA,CAA4CC,CAAI,CAAA,CAE7D,OAAK,CAAC,WAAA,CAAa,SAAA,CAAW,SAAS,CAAA,CAAE,QAAA,CAASyB,CAAAA,CAAK,MAAM,CAAA,CAItDvB,EAAc,CAAA,QAAA,EAAW,CAACuB,CAAAA,CAAK,OAAA,CAAS,GAAGA,CAAAA,CAAK,IAAI,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAE,CAAA,CAH/D,IAIX,CAEA,GAAIzB,CAAAA,CAAK,IAAA,GAAS,qBAAA,CAGhB,OAFaD,CAAAA,CAA+CC,CAAI,CAAA,CAEpD,MAAA,GAAW,SAAA,CAAY,kBAAA,CAAqB,IAAA,CAG1D,GAAIA,CAAAA,CAAK,IAAA,GAAS,kBAAA,CAAoB,CACpC,IAAMyB,CAAAA,CAAO1B,CAAAA,CAA4CC,CAAI,CAAA,CAE7D,OAAIyB,CAAAA,CAAK,MAAA,GAAW,SAAA,CACX,IAAA,CAGFvB,CAAAA,CAAc,CAAA,QAAA,EAAWuB,CAAAA,CAAK,QAAQ,CAAA,EAAA,EAAKH,EAAAA,CAAiBG,CAAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CACjF,CAEA,GAAIzB,CAAAA,CAAK,IAAA,GAAS,cAAA,CAAgB,CAChC,IAAMyB,CAAAA,CAAO1B,CAAAA,CAAwCC,CAAI,CAAA,CAEzD,OAAOyB,CAAAA,CAAK,MAAA,GAAW,SAAA,CAAYvB,CAAAA,CAAc,CAAA,iBAAA,EAAoBuB,CAAAA,CAAK,KAAK,CAAA,CAAE,CAAA,CAAI,IACvF,CAEA,OAAO,IACT,CAQA,IAAMC,EAAAA,CAAkC,IAAI,GAAA,CAAY,CAAC,sBAAA,CAAwB,oBAAA,CAAsB,uBAAuB,CAAC,CAAA,CAExH,SAASC,CAAAA,CAAsB3B,CAAAA,CAAwC,CAC5E,GAAI,CAACH,CAAAA,CAAwBG,CAAAA,CAAK,IAAI,CAAA,EAAKA,CAAAA,CAAK,IAAA,GAAS,WAAA,EAAe0B,EAAAA,CAAgC,GAAA,CAAI1B,CAAAA,CAAK,IAAI,CAAA,CACnH,OAAO,IAAA,CAGT,IAAMyB,CAAAA,CAAO1B,CAAAA,CAA2FC,CAAI,CAAA,CAE5G,GAAIyB,CAAAA,CAAK,MAAA,GAAW,OAAA,CAClB,OAAO,IAAA,CAGT,GAAIA,CAAAA,CAAK,KAAA,EAAO,OAAA,CACd,OAAOA,EAAK,KAAA,CAAM,OAAA,CAGpB,OAAQzB,CAAAA,CAAK,IAAA,EACX,KAAK,iBAAA,CACH,OAAO,0BAAA,CACT,KAAK,kBAAA,CACH,OAAO,CAAA,gBAAA,EAAmB,MAAA,CAAOyB,CAAAA,CAAK,OAAA,EAAW,EAAE,CAAC,CAAA,CAAA,CAAG,IAAA,EAAK,CAC9D,KAAK,qBAAA,CACH,OAAO,0BAAA,CACT,KAAK,iBAAA,CACH,OAAO,sBAAA,CACT,KAAK,oBAAA,CACH,OAAO,yBAAA,CACT,KAAK,kBAAA,CACH,OAAO,CAAA,oBAAA,EAAuB,MAAA,CAAOA,CAAAA,CAAK,QAAA,EAAY,EAAE,CAAC,CAAA,EAAA,EAAKH,EAAAA,CAAiB,MAAA,CAAOG,CAAAA,CAAK,IAAA,EAAQ,EAAE,CAAC,CAAC,CAAA,CAAA,CACzG,QACE,OAAO,sBACX,CACF,CAOO,SAASG,CAAAA,CAAmB5B,CAAAA,CAAkC,CACnE,GAAIA,CAAAA,CAAK,IAAA,GAAS,YAAA,EAAgBA,CAAAA,CAAK,IAAA,GAAS,WAAA,CAC9C,OAAO,KAAA,CAGT,GAAIH,CAAAA,CAAwBG,CAAAA,CAAK,IAAI,CAAA,CACnC,OAAO2B,CAAAA,CAAsB3B,CAAI,CAAA,GAAM,IAAA,CAGzC,GAAIA,CAAAA,CAAK,IAAA,GAAS,wBAAA,CAA0B,CAC1C,IAAMyB,CAAAA,CAAO1B,CAAAA,CAAkDC,CAAI,CAAA,CAEnE,OAAOC,EAAAA,CAAkBwB,CAAI,CAAA,EAAKA,CAAAA,CAAK,MAAA,GAAW,OACpD,CAEA,OAAO,MACT,CAQO,SAASI,CAAAA,CAAmBvE,CAAAA,CAAmD,CACpF,GAAI,CAACA,CAAAA,CACH,OAAO,IAAA,CAGT,IAAA,IAAS7D,CAAAA,CAAQ6D,CAAAA,CAAQ,KAAA,CAAM,MAAA,CAAS,CAAA,CAAG7D,CAAAA,EAAS,CAAA,CAAGA,CAAAA,EAAAA,CAAS,CAC9D,IAAMuG,CAAAA,CAAO1C,CAAAA,CAAQ,KAAA,CAAM7D,CAAK,CAAA,CAEhC,GAAIuG,CAAAA,EAAM,IAAA,GAAS,WAAA,CACjB,SAGF,IAAMyB,CAAAA,CAAO1B,CAAAA,CAAqCC,CAAI,CAAA,CAChD8B,CAAAA,CAAUL,CAAAA,CAAK,KAAA,CAAM,SAAA,CAAWM,CAAAA,EAASA,CAAAA,CAAK,MAAA,GAAW,aAAa,CAAA,CAE5E,OAAID,CAAAA,CAAU,CAAA,CACL,IAAA,CAGF5B,CAAAA,CAAc,CAAA,KAAA,EAAA,CAAS4B,CAAAA,CAAU,CAAA,EAAG,QAAA,EAAU,CAAA,IAAA,EAAOL,CAAAA,CAAK,KAAA,CAAM,MAAA,CAAO,QAAA,EAAU,CAAA,EAAA,EAAKA,CAAAA,CAAK,KAAA,CAAMK,CAAO,CAAA,CAAG,IAAI,CAAA,CAAE,CAC1H,CAEA,OAAO,IACT,CAEO,SAASE,EAAAA,CAAmB1E,CAAAA,CAAmD,CACpF,GAAI,CAACA,CAAAA,CACH,OAAO,IAAA,CAGT,IAAA,IAAS7D,CAAAA,CAAQ6D,CAAAA,CAAQ,KAAA,CAAM,MAAA,CAAS,CAAA,CAAG7D,CAAAA,EAAS,EAAGA,CAAAA,EAAAA,CAAS,CAC9D,IAAMuG,CAAAA,CAAO1C,CAAAA,CAAQ,KAAA,CAAM7D,CAAK,CAAA,CAEhC,GAAI,EAAA,CAACuG,CAAAA,EAAQA,CAAAA,CAAK,IAAA,GAAS,YAAA,CAAA,CAI3B,OAAIA,CAAAA,CAAK,IAAA,GAAS,WAAA,CACZA,CAAAA,CAAK,KAAA,GAAU,WAAA,CACVe,EAAAA,CAAwBf,CAAAA,CAAK,IAAyB,CAAA,EAAK6B,CAAAA,CAAmBvE,CAAO,CAAA,CAGvFuE,CAAAA,CAAmBvE,CAAO,CAAA,CAG/B0C,CAAAA,CAAK,IAAA,GAAS,wBAAA,CACHD,CAAAA,CAAkDC,CAAI,CAAA,CAEvD,MAAA,GAAW,SAAA,CAAY,mBAAA,CAAsB6B,CAAAA,CAAmBvE,CAAO,CAAA,CAGjF0C,CAAAA,CAAK,IAAA,GAAS,MAAA,CACT,IAAA,CAIFwB,EAAAA,CAAsBxB,CAAI,CAAA,EAAK6B,CAAAA,CAAmBvE,CAAO,CAClE,CAEA,OAAO,IACT,CCnVO,SAAS2E,GAAkC3E,CAAAA,CAA6C,CAC7F,OAAKA,CAAAA,CAIEA,CAAAA,CAAQ,KAAA,CAAM,IAAA,CAAM0C,CAAAA,EACrBA,CAAAA,CAAK,IAAA,GAAS,wBAAA,CACT,KAAA,CAGFD,CAAAA,CAAkDC,CAAI,CAAA,CAAE,MAAA,GAAW,SAC3E,CAAA,CATQ,KAUX,CAQO,SAASkC,EAAAA,CAA+B5E,CAAAA,CAAwB6E,CAAAA,CAA4B,EAAC,CAAkB,CACpH,IAAIC,CAAAA,CAAU,KAAA,CACRC,CAAAA,CAAgC,EAAC,CAEvC,IAAA,IAAWrC,CAAAA,IAAQ1C,CAAAA,CAAQ,KAAA,CAAO,CAChC,GAAI0C,CAAAA,CAAK,IAAA,GAAS,wBAAA,CAA0B,CAC1CqC,CAAAA,CAAM,IAAA,CAAKrC,CAAI,CAAA,CACf,QACF,CAEA,IAAMyB,CAAAA,CAAO1B,CAAAA,CAAkDC,CAAI,CAAA,CAEnE,GAAIyB,CAAAA,CAAK,MAAA,GAAW,SAAA,CAAW,CAC7BY,CAAAA,CAAM,IAAA,CAAKrC,CAAI,CAAA,CACf,QACF,CAEAoC,CAAAA,CAAU,IAAA,CACV,IAAMpK,CAAAA,CAASmK,CAAAA,CAAQV,CAAAA,CAAK,UAAU,CAAA,CAElCzJ,CAAAA,EAAUA,CAAAA,GAAW,SAAA,EACvBqK,CAAAA,CAAM,IAAA,CAAK,CAAE,GAAGrC,CAAAA,CAAM,IAAA,CAAM,CAAE,GAAGyB,CAAAA,CAAM,MAAA,CAAAzJ,CAAO,CAAE,CAAgB,EAEpE,CAEA,OAAOoK,CAAAA,CAAU,CAAE,GAAG9E,CAAAA,CAAS,KAAA,CAAA+E,CAAM,CAAA,CAAI/E,CAC3C,CAEO,SAASgF,EAAAA,CACdhF,CAAAA,CACA0D,CAAAA,CACU,CACV,GAAI,CAAC1D,CAAAA,CACH,OAAO,EAAC,CAGV,IAAMiF,CAAAA,CAAwB,EAAC,CACzBC,CAAAA,CAAcxB,CAAAA,EAAS,WAAA,EAAe,KAAA,CAE5C,IAAA,IAAWhB,CAAAA,IAAQ1C,CAAAA,CAAQ,KAAA,CAAO,CAChC,GAAI0C,EAAK,IAAA,GAAS,wBAAA,CAChB,SAGF,IAAMyB,CAAAA,CAAO1B,CAAAA,CAAkDC,CAAI,CAAA,CAE/DwC,CAAAA,EAAef,CAAAA,CAAK,MAAA,GAAW,SAAA,EAInCc,CAAAA,CAAY,IAAA,CAAKd,CAAAA,CAAK,UAAU,EAClC,CAEA,OAAOc,CACT,CAEO,SAASE,EAAAA,CAA8BnF,CAAAA,CAA8C,CAC1F,OAAOgF,EAAAA,CAAuBhF,CAAAA,CAAS,CAAE,WAAA,CAAa,IAAK,CAAC,CAC9D,CC1BA,IAAMoF,EAAAA,CAAsB,CAC1B,EAAA,CAAI,aAAA,CACJ,EAAA,CAAI,aAAA,CACJ,EAAA,CAAI,aAAA,CACJ,IAAA,CAAM,eACR,CAAA,CAEMC,EAAAA,CAAqC,CAAC,CAAE,QAAA,CAAAC,CAAAA,CAAU,OAAA,CAAAC,CAAQ,CAAA,GAAM,CACpE,GAAM,CAAE,KAAA,CAAAC,CAAM,CAAA,CAAID,CAAAA,CACZE,CAAAA,CAAgBD,CAAAA,CAAM,QAAA,CAAWJ,EAAAA,CAAoBI,CAAAA,CAAM,QAAQ,CAAA,CAAI,EAAA,CACvEE,CAAAA,CAAgBF,CAAAA,CAAM,QAAA,CAAW,YAAA,CAAe,EAAA,CAEtD,OACEpK,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAW,CAAA,kGAAA,EAAqGqK,CAAa,CAAA,CAAA,EAAIC,CAAa,CAAA,CAAA,EAAIF,CAAAA,CAAM,SAAA,EAAa,EAAE,CAAA,mBAAA,CAAA,CAEtK,QAAA,CAAA,CAAAA,CAAAA,CAAM,KAAA,EAAS7K,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2BAAA,CAA6B,QAAA,CAAA6K,CAAAA,CAAM,KAAA,CAAM,CAAA,CACvEA,CAAAA,CAAM,WAAA,EAAe7K,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+CAAA,CAAiD,QAAA,CAAA6K,CAAAA,CAAM,WAAA,CAAY,CAAA,CAAA,CACtGA,CAAAA,CAAM,KAAA,EAASA,CAAAA,CAAM,WAAA,GAAgBF,CAAAA,CAAW3K,GAAAA,CAAC,OAAI,SAAA,CAAU,SAAA,CAAU,CAAA,CAAK,IAAA,CAC/E2K,CAAAA,CAAAA,CACH,CAEJ,CAAA,CAUMK,EAAAA,CAAkB,CACtB,IAAA,CAAM,UAAA,CACN,EAAA,CAAI,UAAA,CACJ,EAAA,CAAI,UAAA,CACJ,EAAA,CAAI,UAAA,CACJ,EAAA,CAAI,UACN,CAAA,CAEMC,EAAAA,CAAoB,CACxB,KAAA,CAAO,gBAAA,CACP,MAAA,CAAQ,iBAAA,CACR,GAAA,CAAK,cAAA,CACL,OAAA,CAAS,kBACX,CAAA,CAEMC,EAAAA,CAAsB,CAC1B,KAAA,CAAO,kBAAA,CACP,MAAA,CAAQ,mBAAA,CACR,GAAA,CAAK,gBAAA,CACL,OAAA,CAAS,oBAAA,CACT,MAAA,CAAQ,mBACV,CAAA,CAEMC,EAAAA,CAAuC,CAAC,CAAE,QAAA,CAAAR,CAAAA,CAAU,OAAA,CAAAC,CAAQ,CAAA,GAAM,CACtE,GAAM,CAAE,KAAA,CAAAC,CAAM,CAAA,CAAID,CAAAA,CACZQ,CAAAA,CAAiBP,CAAAA,CAAM,SAAA,GAAc,aAAe,0BAAA,CAA6B,aAAA,CACjFQ,CAAAA,CAAWL,EAAAA,CAAgBH,CAAAA,CAAM,GAAA,EAAO,IAAI,CAAA,CAC5CS,CAAAA,CAAaT,CAAAA,CAAM,KAAA,CAAQI,EAAAA,CAAkBJ,CAAAA,CAAM,KAAK,CAAA,CAAI,EAAA,CAC5DU,CAAAA,CAAeV,CAAAA,CAAM,OAAA,CAAUK,EAAAA,CAAoBL,CAAAA,CAAM,OAAO,CAAA,CAAI,EAAA,CAE1E,OACE7K,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAW,CAAA,kBAAA,EAAqBoL,CAAc,CAAA,CAAA,EAAIC,CAAQ,CAAA,CAAA,EAAIC,CAAU,CAAA,CAAA,EAAIC,CAAY,CAAA,CAAA,EAAIV,CAAAA,CAAM,SAAA,EAAa,EAAE,CAAA,CAAA,CAEhH,QAAA,CAAAF,CAAAA,CACH,CAEJ,CAAA,CAQMa,EAAAA,CAAmD,CACvD,CAAA,CAAG,gBAAA,CACH,CAAA,CAAG,gBAAA,CACH,CAAA,CAAG,gBAAA,CACH,CAAA,CAAG,gBAAA,CACH,CAAA,CAAG,gBAAA,CACH,CAAA,CAAG,gBACL,CAAA,CAEMC,EAAAA,CAAiB,CACrB,GAAI,UAAA,CACJ,EAAA,CAAI,UAAA,CACJ,EAAA,CAAI,UAAA,CACJ,EAAA,CAAI,UACN,CAAA,CAEMC,EAAAA,CAAqC,CAAC,CAAE,QAAA,CAAAf,CAAAA,CAAU,OAAA,CAAAC,CAAQ,CAAA,GAAM,CACpE,GAAM,CAAE,KAAA,CAAAC,CAAM,CAAA,CAAID,CAAAA,CACZe,CAAAA,CAAcH,EAAAA,CAAkBX,CAAAA,CAAM,OAAA,EAAW,CAAC,CAAA,EAAK,gBAAA,CACvDQ,CAAAA,CAAWI,EAAAA,CAAeZ,CAAAA,CAAM,GAAA,EAAO,IAAI,CAAA,CAEjD,OAAO7K,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAW,CAAA,kBAAA,EAAqB2L,CAAW,CAAA,CAAA,EAAIN,CAAQ,CAAA,CAAA,EAAIR,CAAAA,CAAM,SAAA,EAAa,EAAE,CAAA,CAAA,CAAK,QAAA,CAAAF,CAAAA,CAAS,CAC5G,CAAA,CAEMiB,EAAAA,CAAkF,CAAC,CAAE,OAAA,CAAAhB,CAAQ,CAAA,GACjG5K,GAAAA,CAAC4L,CAAAA,CAAA,CAAmB,WAAA,CAAahB,CAAAA,CAAQ,KAAA,CAAM,WAAA,EAAe,YAAA,CAAc,CAAA,CAYxEiB,EAAAA,CAAiB,CACrB,EAAA,CAAI,+CAAA,CACJ,EAAA,CAAI,+CAAA,CACJ,EAAA,CAAI,6BAAA,CACJ,EAAA,CAAI,2BACN,CAAA,CAEMC,EAAAA,CAA2C,CAAC,CAAE,OAAA,CAAAlB,CAAQ,CAAA,GAAM,CAChE,IAAMmB,CAAAA,CAAQnB,CAAAA,CAAQ,KAAA,CAAM,KAAA,EAAS,IAAA,CAGrC,OAAO5K,GAAAA,CAFY+L,CAAAA,CAEX,CAAW,SAAA,CAAWF,EAAAA,CAAeE,CAAK,CAAA,CAAI,QAAA,CAAAnB,CAAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,CAC3E,CAAA,CAOMoB,EAAAA,CAAc,CAClB,IAAA,CAAM,YAAA,CACN,KAAA,CAAO,qCAAA,CACP,OAAA,CAAS,qCAAA,CACT,IAAA,CAAM,cAAA,CACN,IAAA,CAAM,qFACR,CAAA,CAEMC,EAAAA,CAAqC,CAAC,CAAE,OAAA,CAAArB,CAAQ,CAAA,GACpD5K,GAAAA,CAAC,KAAE,SAAA,CAAWgM,EAAAA,CAAYpB,CAAAA,CAAQ,KAAA,CAAM,OAAA,EAAW,MAAM,CAAA,CAAI,QAAA,CAAAA,CAAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,CAAA,CAQ5EsB,EAAAA,CAAgD,CAAC,CAAE,OAAA,CAAAtB,CAAQ,CAAA,GAC/D5K,GAAAA,CAACC,CAAAA,CAAA,CAAM,OAAA,CAAS2K,CAAAA,CAAQ,KAAA,CAAM,OAAA,EAAW,SAAA,CAAY,QAAA,CAAAA,CAAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,CAAA,CAS1E,SAASuB,EAAAA,CAAU,CAAE,IAAA,CAAAtE,CAAK,CAAA,CAA8C,CACtE,OAAQA,CAAAA,EACN,KAAK,SAAA,CACH,OAAO7H,GAAAA,CAACoM,gBAAAA,CAAA,CAAiB,SAAA,CAAU,8BAAA,CAA+B,CAAA,CACpE,KAAK,SAAA,CACH,OAAOpM,GAAAA,CAACqM,iBAAAA,CAAA,CAAkB,SAAA,CAAU,8BAAA,CAA+B,CAAA,CACrE,KAAK,OAAA,CACH,OAAOrM,GAAAA,CAACsM,WAAAA,CAAA,CAAY,SAAA,CAAU,8BAAA,CAA+B,CAAA,CAC/D,QACE,OAAOtM,GAAAA,CAACuM,QAAAA,CAAA,CAAS,SAAA,CAAU,8BAAA,CAA+B,CAC9D,CACF,CAEA,IAAMC,EAAAA,CAAuC,CAAC,CAAE,OAAA,CAAA5B,CAAQ,CAAA,GAAM,CAC5D,GAAM,CAAE,KAAA,CAAAC,CAAM,CAAA,CAAID,CAAAA,CACZ6B,CAAAA,CAAY5B,CAAAA,CAAM,IAAA,GAAS,OAAA,CAAU,8CAAA,CAAiD,oBAAA,CAE5F,OACEpK,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAW,CAAA,yFAAA,EAA4FgM,CAAS,CAAA,mBAAA,CAAA,CAChH,IAAA,CAAK,OAAA,CAEL,QAAA,CAAA,CAAAzM,GAAAA,CAACmM,EAAAA,CAAA,CAAU,IAAA,CAAMtB,CAAAA,CAAM,IAAA,CAAM,CAAA,CAC7BpK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gBAAA,CAAkB,QAAA,CAAA6K,CAAAA,CAAM,MAAM,CAAA,CAC5CA,CAAAA,CAAM,OAAA,EAAW7K,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BAAA,CAA4B,QAAA,CAAA6K,CAAAA,CAAM,OAAA,CAAQ,CAAA,CAAA,CAC7E,CAAA,CAAA,CACF,CAEJ,CAAA,CAQM3J,EAAAA,CAAuC,CAAC,CAAE,OAAA,CAAA0J,CAAQ,CAAA,GAAM,CAC5D,IAAMlJ,CAAAA,CAAUkJ,CAAAA,CAAQ,KAAA,CAAM,OAAA,EAAW,EAAC,CACpC8B,CAAAA,CAAAA,CAAQ9B,CAAAA,CAAQ,KAAA,CAAM,IAAA,EAAQ,EAAC,EAAG,GAAA,CAAKrJ,CAAAA,EAAQA,CAAAA,CAAI,GAAA,CAAI,MAAM,CAAC,CAAA,CAEpE,OACEvB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uEAAA,CACb,QAAA,CAAAS,IAAAA,CAACS,EAAAA,CAAA,CACE,QAAA,CAAA,CAAA0J,CAAAA,CAAQ,KAAA,CAAM,OAAA,EAAW5K,GAAAA,CAAC2M,EAAAA,CAAA,CAAc,QAAA,CAAA/B,CAAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,CAAA,CAC/D5K,GAAAA,CAACmB,EAAAA,CAAA,CACC,QAAA,CAAAnB,GAAAA,CAACoB,EAAAA,CAAA,CACE,QAAA,CAAAM,CAAAA,CAAQ,GAAA,CAAI,CAACT,CAAAA,CAAQO,CAAAA,GACpBxB,GAAAA,CAACqB,EAAAA,CAAA,CAAiD,QAAA,CAAAJ,CAAAA,CAAAA,CAAlC,CAAA,EAAGO,CAAAA,CAAM,QAAA,EAAU,CAAA,CAAA,EAAIP,CAAM,CAAA,CAAY,CAC1D,CAAA,CACH,CAAA,CACF,CAAA,CACAjB,GAAAA,CAACsB,EAAAA,CAAA,CACE,QAAA,CAAAoL,CAAAA,CAAK,GAAA,CAAI,CAACnL,CAAAA,CAAKqL,CAAAA,GACd5M,GAAAA,CAACoB,EAAAA,CAAA,CACE,QAAA,CAAAG,CAAAA,CAAI,GAAA,CAAI,CAACsL,CAAAA,CAAMC,CAAAA,GACd9M,GAAAA,CAACyB,IAAAA,CAAA,CAA2B,QAAA,CAAAoL,CAAAA,CAAAA,CAAZC,CAAiB,CAClC,CAAA,CAAA,CAHYF,CAIf,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CAAA,CAQMG,EAAAA,CAA6C,CAAC,CAAE,OAAA,CAAAnC,CAAQ,CAAA,GAAM,CAClE,GAAM,CAAE,KAAA,CAAAC,CAAM,CAAA,CAAID,CAAAA,CACZoC,CAAAA,CAAMnC,CAAAA,CAAM,GAAA,EAAO,GAAA,CACnBoC,CAAAA,CAAUD,CAAAA,CAAM,CAAA,CAAI,IAAA,CAAK,GAAA,CAAI,GAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAA,CAAInC,CAAAA,CAAM,KAAA,CAAQmC,CAAAA,CAAO,GAAG,CAAC,CAAA,CAAI,CAAA,CAElF,OACEvM,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACZ,QAAA,CAAA,CAAAoK,CAAAA,CAAM,KAAA,EACLpK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wFAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAA6K,CAAAA,CAAM,KAAA,CAAM,CAAA,CACnBpK,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,iBAAA,CAAmB,QAAA,CAAA,CAAA,IAAA,CAAK,KAAA,CAAMwM,CAAO,CAAA,CAAE,GAAA,CAAA,CAAC,CAAA,CAAA,CAC1D,CAAA,CAEFjN,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,wFAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4DAAA,CAA6D,KAAA,CAAO,CAAE,KAAA,CAAO,CAAA,EAAGiN,CAAAA,CAAQ,QAAA,EAAU,CAAA,CAAA,CAAI,CAAA,CAAG,CAAA,CAC1H,CAAA,CAAA,CACF,CAEJ,CAAA,CAEMC,EAAAA,CAAwG,CAAC,CAC7G,OAAA,CAAAtC,CACF,CAAA,GACE5K,GAAAA,CAACkN,CAAAA,CAAA,CACC,SAAA,CAAWtC,CAAAA,CAAQ,KAAA,CAAM,OAAA,CAAU,oCAAA,CAAuC,EAAA,CAC1E,KAAA,CAAO,CAAE,MAAA,CAAQA,CAAAA,CAAQ,KAAA,CAAM,MAAA,EAAU,MAAA,CAAQ,KAAA,CAAOA,CAAAA,CAAQ,KAAA,CAAM,KAAA,EAAS,MAAO,CAAA,CACxF,CAAA,CAGIuC,EAAAA,CAAoE,CAAC,CAAE,OAAA,CAAAvC,CAAQ,CAAA,GACnF5K,GAAAA,CAACoN,GAAAA,CAAA,CAAa,IAAA,CAAMxC,CAAAA,CAAQ,KAAA,CAAM,IAAA,CAAO,QAAA,CAAAA,EAAQ,KAAA,CAAM,KAAA,CAAM,CAAA,CAGzDyC,EAAAA,CAKD,CAAC,CAAE,OAAA,CAAAzC,CAAQ,CAAA,GACTA,CAAAA,CAAQ,KAAA,CAAM,GAAA,CAKjB5K,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAK4K,CAAAA,CAAQ,KAAA,CAAM,GAAA,CACnB,SAAA,CAAU,gDAAA,CACV,MAAA,CAAQA,CAAAA,CAAQ,KAAA,CAAM,MAAA,EAAU,MAAA,CAChC,GAAA,CAAKA,CAAAA,CAAQ,KAAA,CAAM,GAAA,CACnB,KAAA,CAAOA,CAAAA,CAAQ,KAAA,CAAM,KAAA,EAAS,MAAA,CAChC,CAAA,CAVO,IAAA,CAmBL0C,EAAAA,CAA+C,CAAC,CAAE,OAAA,CAAA1C,CAAQ,CAAA,GAC9D5K,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oGAAA,CACX,QAAA,CAAA,CAAA4K,CAAAA,CAAQ,KAAA,CAAM,KAAA,EAAS,EAAC,EAAG,GAAA,CAAI,CAAC2C,CAAAA,CAAM/L,CAAAA,GACtCf,IAAAA,CAAC,SAAA,CAAA,CAAQ,SAAA,CAAU,0BAAA,CACjB,QAAA,CAAA,CAAAT,GAAAA,CAAC,SAAA,CAAA,CAAQ,SAAA,CAAU,0DAAA,CAA4D,QAAA,CAAAuN,CAAAA,CAAK,KAAA,CAAM,CAAA,CAC1FvN,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,6CAAA,CAA+C,QAAA,CAAAuN,CAAAA,CAAK,OAAA,CAAQ,CAAA,CAAA,CAAA,CAFxB/L,CAGnD,CACD,CAAA,CACH,CAAA,CAaIgM,EAAAA,CAAqC,CAAC,CAAE,QAAA,CAAA7C,CAAAA,CAAU,OAAA,CAAAC,CAAQ,CAAA,GAAM,CACpE,IAAM6C,CAAAA,CAAO7C,CAAAA,CAAQ,KAAA,CAAM,IAAA,EAAQ,EAAC,CAEpC,OACEnK,IAAAA,CAAC+M,EAAAA,CAAA,CAAc,YAAA,CAAc5C,CAAAA,CAAQ,KAAA,CAAM,KAAA,EAASA,CAAAA,CAAQ,KAAA,CAAM,YAAA,EAAgB6C,CAAAA,CAAK,CAAC,CAAA,EAAG,KAAA,CACzF,QAAA,CAAA,CAAAzN,GAAAA,CAAC0N,EAAAA,CAAA,CACE,QAAA,CAAAD,CAAAA,CAAK,GAAA,CAAKE,CAAAA,EACT3N,GAAAA,CAAC4N,EAAAA,CAAA,CAA4B,KAAA,CAAOD,CAAAA,CAAI,KAAA,CACrC,SAAAA,CAAAA,CAAI,KAAA,CAAA,CADWA,CAAAA,CAAI,KAEtB,CACD,CAAA,CACH,CAAA,CACChD,CAAAA,CAAAA,CACH,CAEJ,CAAA,CAEMkD,EAAAA,CAAmD,CAAC,CAAE,QAAA,CAAAlD,CAAAA,CAAU,OAAA,CAAAC,CAAQ,CAAA,GAC5E5K,GAAAA,CAAC8N,EAAAA,CAAA,CAAY,KAAA,CAAOlD,CAAAA,CAAQ,KAAA,CAAM,KAAA,CAAQ,QAAA,CAAAD,CAAAA,CAAS,CAAA,CAc/CoD,EAAAA,CAAe,CACnB,EAAA,CAAI,iBAAA,CACJ,IAAA,CAAM,qBAAA,CACN,OAAA,CAAS,0BACX,CAAA,CAEA,SAASC,EAAAA,CAAU,CAAE,KAAA,CAAAC,CAAM,CAAA,CAAsD,CAC/E,OAAIA,CAAAA,GAAU,IAAA,CACLjO,GAAAA,CAACkO,cAAAA,CAAA,CAAe,SAAA,CAAU,WAAA,CAAY,CAAA,CAG3CD,CAAAA,GAAU,MAAA,CACLjO,GAAAA,CAACmO,gBAAAA,CAAA,CAAiB,SAAA,CAAU,WAAA,CAAY,CAAA,CAG1CnO,GAAAA,CAACoO,SAAAA,CAAA,CAAU,SAAA,CAAU,WAAA,CAAY,CAC1C,CAEA,IAAMC,EAAAA,CAAyC,CAAC,CAAE,OAAA,CAAAzD,CAAQ,CAAA,GAAM,CAC9D,GAAM,CAAE,KAAA,CAAAC,CAAM,CAAA,CAAID,CAAAA,CAElB,OACEnK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yFAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oDAAA,CAAsD,QAAA,CAAA6K,CAAAA,CAAM,KAAA,CAAM,CAAA,CACjFpK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0CAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,gEAAA,CAAkE,QAAA,CAAA6K,CAAAA,CAAM,KAAA,CAAM,CAAA,CAC7FA,CAAAA,CAAM,KAAA,EACL7K,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAW+N,EAAAA,CAAalD,CAAAA,CAAM,KAAK,CAAA,CACvC,QAAA,CAAA7K,GAAAA,CAACgO,EAAAA,CAAA,CAAU,KAAA,CAAOnD,CAAAA,CAAM,KAAA,CAAO,CAAA,CACjC,GAEJ,CAAA,CACCA,CAAAA,CAAM,MAAA,EAAU7K,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6CAAA,CAA+C,QAAA,CAAA6K,CAAAA,CAAM,MAAA,CAAO,CAAA,CAAA,CAC9F,CAEJ,CAAA,CAQMyD,EAAAA,CAAiB,CACrB,IAAA,CAAM,+EAAA,CACN,GAAA,CAAK,2FAAA,CACL,OAAA,CAAS,mFAAA,CACT,SAAA,CAAW,2EACb,CAAA,CAEA,SAASC,EAAAA,CAAY,CAAE,IAAA,CAAA1G,CAAK,CAAA,CAAoE,CAC9F,OAAQA,CAAAA,EACN,KAAK,KAAA,CACH,OAAO7H,GAAAA,CAACwO,aAAAA,CAAA,CAAc,SAAA,CAAU,0CAAA,CAA2C,CAAA,CAC7E,KAAK,SAAA,CACH,OAAOxO,GAAAA,CAACqM,iBAAAA,CAAA,CAAkB,SAAA,CAAU,0CAAA,CAA2C,CAAA,CACjF,KAAK,WAAA,CACH,OAAOrM,GAAAA,CAACyO,gBAAAA,CAAA,CAAiB,SAAA,CAAU,0CAAA,CAA2C,CAAA,CAChF,QACE,OAAOzO,GAAAA,CAACuM,QAAAA,CAAA,CAAS,SAAA,CAAU,0CAAA,CAA2C,CAC1E,CACF,CAEA,IAAMmC,EAAAA,CAA2C,CAAC,CAAE,OAAA,CAAA9D,CAAQ,CAAA,GAAM,CAChE,GAAM,CAAE,KAAA,CAAAC,CAAM,CAAA,CAAID,CAAAA,CACZ/C,CAAAA,CAAOgD,CAAAA,CAAM,IAAA,EAAQ,MAAA,CAE3B,OACEpK,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAW,CAAA,8EAAA,EAAiF6N,EAAAA,CAAezG,CAAI,CAAC,CAAA,mBAAA,CAAA,CAEhH,QAAA,CAAA,CAAA7H,GAAAA,CAACuO,EAAAA,CAAA,CAAY,IAAA,CAAM1G,CAAAA,CAAM,CAAA,CACzBpH,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YAAA,CACZ,QAAA,CAAA,CAAAoK,CAAAA,CAAM,KAAA,EAAS7K,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gBAAA,CAAkB,QAAA,CAAA6K,CAAAA,CAAM,KAAA,CAAM,CAAA,CAC7D7K,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oBAAA,CAAsB,QAAA,CAAA6K,CAAAA,CAAM,QAAQ,CAAA,CAAA,CACrD,CAAA,CAAA,CACF,CAEJ,CAAA,CAWM8D,EAAAA,CAAqB,CACzB,SAAA,CAAW,iCAAA,CACX,OAAA,CAAS,iCAAA,CACT,QAAA,CAAU,mCACZ,CAAA,CAEMC,EAAAA,CAA6C,CAAC,CAAE,OAAA,CAAAhE,CAAQ,CAAA,GAC5D5K,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACX,QAAA,CAAA,CAAA4K,CAAAA,CAAQ,KAAA,CAAM,KAAA,EAAS,EAAC,EAAG,GAAA,CAAI,CAAC2C,CAAAA,CAAM/L,CAAAA,CAAOqN,CAAAA,GAC7CpO,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mDAAA,CACZ,QAAA,CAAA,CAAAe,CAAAA,CAAQqN,CAAAA,CAAM,MAAA,CAAS,CAAA,EACtB7O,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mEAAA,CAAoE,CAAA,CAErFA,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAW,CAAA,+DAAA,EAAkE2O,EAAAA,CAAmBpB,CAAAA,CAAK,MAAA,EAAU,UAAU,CAAC,CAAA,mBAAA,CAAA,CAC5H,CAAA,CACA9M,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,aACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mDAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,2BAAA,CAA6B,QAAA,CAAAuN,CAAAA,CAAK,KAAA,CAAM,CAAA,CACvDA,CAAAA,CAAK,IAAA,EAAQvN,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,qCAAA,CAAuC,QAAA,CAAAuN,CAAAA,CAAK,IAAA,CAAK,CAAA,CAAA,CACjF,CAAA,CACCA,CAAAA,CAAK,WAAA,EAAevN,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qCAAA,CAAuC,QAAA,CAAAuN,CAAAA,CAAK,WAAA,CAAY,CAAA,CAAA,CAC9F,CAAA,CAAA,CAAA,CAbsE/L,CAcxE,CACD,CAAA,CACH,CAAA,CAOIsN,EAAAA,CAAe,CAAC,SAAA,CAAW,SAAA,CAAW,SAAA,CAAW,SAAA,CAAW,SAAS,CAAA,CAErEC,EAAAA,CAAoB,CACxB,UAAA,CAAY,wBAAA,CACZ,MAAA,CAAQ,8BAAA,CACR,YAAA,CAAc,CAAA,CACd,KAAA,CAAO,wBAAA,CACP,QAAA,CAAU,EACZ,CAAA,CAEMC,EAAAA,CAAwB,CAC5B,KAAA,CAAO,wBACT,CAAA,CAEMC,EAAAA,CAAyB,CAC7B,KAAA,CAAO,wBACT,CAAA,CAEMC,EAAAA,CAAY,CAAE,IAAA,CAAM,8BAAA,CAAgC,QAAA,CAAU,EAAG,CAAA,CAiBvE,SAASC,EAAAA,CAAShP,CAAAA,CAAwB,CACxC,IAAMiP,CAAAA,CAAS,OAAOjP,CAAAA,EAAU,QAAA,CAAWA,CAAAA,CAAQ,MAAA,CAAOA,CAAK,CAAA,CAE/D,OAAO,MAAA,CAAO,QAAA,CAASiP,CAAM,CAAA,CAAIA,CAAAA,CAAS,CAC5C,CAEA,SAASC,EAAAA,CAAexE,CAAAA,CAA0C,CAChE,IAAMrB,CAAAA,CAAOqB,CAAAA,CAAM,IAAA,EAAQ,EAAC,CAE5B,GAAI,CAACA,CAAAA,CAAM,SAAA,CACT,OAAOrB,CAAAA,CAAK,GAAA,CAAKjI,CAAAA,GAAS,CACxB,CAAA,CAAG,MAAA,CAAOA,CAAAA,CAAIsJ,CAAAA,CAAM,IAAI,CAAA,EAAK,EAAE,CAAA,CAC/B,CAAA,CAAGsE,EAAAA,CAAS5N,CAAAA,CAAIsJ,CAAAA,CAAM,IAAI,CAAC,CAC7B,CAAA,CAAE,CAAA,CAGJ,IAAMyE,CAAAA,CAAS,IAAI,GAAA,CAEnB,IAAA,IAAW/N,CAAAA,IAAOiI,CAAAA,CAAM,CACtB,IAAMhL,CAAAA,CAAM,MAAA,CAAO+C,CAAAA,CAAIsJ,CAAAA,CAAM,IAAI,CAAA,EAAK,EAAE,CAAA,CAClC0E,CAAAA,CAAQD,CAAAA,CAAO,GAAA,CAAI9Q,CAAG,CAAA,EAAK,CAAE,KAAA,CAAO,CAAA,CAAG,GAAA,CAAK,CAAE,CAAA,CAEpD+Q,CAAAA,CAAM,KAAA,EAAS,CAAA,CACfA,CAAAA,CAAM,GAAA,EAAOJ,EAAAA,CAAS5N,CAAAA,CAAIsJ,CAAAA,CAAM,IAAI,CAAC,CAAA,CACrCyE,CAAAA,CAAO,GAAA,CAAI9Q,CAAAA,CAAK+Q,CAAK,EACvB,CAEA,OAAO,KAAA,CAAM,IAAA,CAAKD,CAAAA,CAAO,OAAA,EAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAACE,CAAAA,CAAGD,CAAK,CAAA,GAC5C1E,CAAAA,CAAM,SAAA,GAAc,OAAA,CACf,CAAE,CAAA,CAAA2E,CAAAA,CAAG,CAAA,CAAGD,CAAAA,CAAM,KAAM,CAAA,CAGzB1E,CAAAA,CAAM,SAAA,GAAc,KAAA,CACf,CAAE,CAAA,CAAA2E,CAAAA,CAAG,CAAA,CAAGD,CAAAA,CAAM,KAAA,GAAU,CAAA,CAAI,CAAA,CAAIA,CAAAA,CAAM,GAAA,CAAMA,CAAAA,CAAM,KAAM,CAAA,CAG1D,CAAE,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAGD,CAAAA,CAAM,GAAI,CAC1B,CACH,CAEA,SAASE,EAAAA,CAAW,CAClB,QAAA,CAAA9E,CAAAA,CACA,MAAA,CAAA+E,CAAAA,CACA,KAAA,CAAA3N,CACF,CAAA,CAIgB,CACd,OACEtB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACZ,QAAA,CAAA,CAAAsB,CAAAA,EAAS/B,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CAAqC,QAAA,CAAA+B,CAAAA,CAAM,EACpE/B,GAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO,CAAE,MAAA,CAAQ0P,CAAAA,EAAU,GAAI,CAAA,CAClC,QAAA,CAAA1P,GAAAA,CAAC2P,mBAAAA,CAAA,CAAoB,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,MAAA,CACtC,QAAA,CAAAhF,CAAAA,CACH,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAEA,IAAMiF,EAAAA,CAAmD,CAAC,CAAE,OAAA,CAAAhF,CAAQ,CAAA,GAAM,CACxE,IAAMiF,CAAAA,CAASR,EAAAA,CAAezE,CAAAA,CAAQ,KAAK,CAAA,CACrCkF,CAAAA,CAAQlF,CAAAA,CAAQ,KAAA,CAAM,KAAA,EAASkE,EAAAA,CAAa,CAAC,CAAA,CAEnD,OACE9O,GAAAA,CAACyP,EAAAA,CAAA,CAAW,MAAA,CAAQ7E,CAAAA,CAAQ,KAAA,CAAM,MAAA,CAAQ,KAAA,CAAOA,CAAAA,CAAQ,KAAA,CAAM,KAAA,CAC7D,QAAA,CAAAnK,IAAAA,CAACsP,QAAAA,CAAA,CAAiB,IAAA,CAAMF,CAAAA,CACtB,QAAA,CAAA,CAAA7P,IAACgQ,aAAAA,CAAA,CAAc,MAAA,CAAO,oBAAA,CAAqB,QAAA,CAAU,KAAA,CAAO,CAAA,CAC5DhQ,GAAAA,CAACiQ,KAAAA,CAAA,CAAM,QAAA,CAAU,KAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAMf,EAAAA,CAAW,QAAA,CAAU,KAAA,CAAO,UAAA,CAAY,CAAA,CAAG,CAAA,CACrFlP,GAAAA,CAACkQ,KAAAA,CAAA,CAAM,QAAA,CAAU,KAAA,CAAO,IAAA,CAAMhB,EAAAA,CAAW,QAAA,CAAU,KAAA,CAAO,KAAA,CAAO,EAAA,CAAI,CAAA,CACrElP,GAAAA,CAACmQ,OAAAA,CAAA,CACC,YAAA,CAAcpB,EAAAA,CACd,MAAA,CAAQ,CAAE,IAAA,CAAM,mBAAoB,CAAA,CACpC,SAAA,CAAWC,EAAAA,CACX,UAAA,CAAYC,EAAAA,CACd,CAAA,CACAjP,GAAAA,CAACoQ,GAAAA,CAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAMN,CAAAA,CAAO,iBAAA,CAAmB,KAAA,CAAO,IAAA,CAAMlF,CAAAA,CAAQ,KAAA,CAAM,IAAA,CAAM,MAAA,CAAQ,CAAA,CAAG,CAAA,CAAA,CAC/F,CAAA,CACF,CAEJ,CAAA,CAEMyF,EAAAA,CAAoD,CAAC,CAAE,OAAA,CAAAzF,CAAQ,CAAA,GAAM,CACzE,IAAMiF,CAAAA,CAASR,EAAAA,CAAezE,CAAAA,CAAQ,KAAK,CAAA,CACrCkF,CAAAA,CAAQlF,CAAAA,CAAQ,KAAA,CAAM,KAAA,EAASkE,EAAAA,CAAa,CAAC,CAAA,CAEnD,OACE9O,GAAAA,CAACyP,EAAAA,CAAA,CAAW,MAAA,CAAQ7E,CAAAA,CAAQ,KAAA,CAAM,MAAA,CAAQ,KAAA,CAAOA,CAAAA,CAAQ,KAAA,CAAM,KAAA,CAC7D,QAAA,CAAAnK,IAAAA,CAAC6P,SAAAA,CAAA,CAAkB,IAAA,CAAMT,CAAAA,CACvB,QAAA,CAAA,CAAA7P,GAAAA,CAACgQ,aAAAA,CAAA,CAAc,MAAA,CAAO,oBAAA,CAAqB,QAAA,CAAU,KAAA,CAAO,CAAA,CAC5DhQ,GAAAA,CAACiQ,KAAAA,CAAA,CAAM,QAAA,CAAU,KAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAMf,EAAAA,CAAW,QAAA,CAAU,KAAA,CAAO,UAAA,CAAY,EAAG,CAAA,CACrFlP,GAAAA,CAACkQ,KAAAA,CAAA,CAAM,QAAA,CAAU,KAAA,CAAO,IAAA,CAAMhB,EAAAA,CAAW,QAAA,CAAU,KAAA,CAAO,KAAA,CAAO,EAAA,CAAI,CAAA,CACrElP,GAAAA,CAACmQ,OAAAA,CAAA,CACC,YAAA,CAAcpB,EAAAA,CACd,SAAA,CAAWC,EAAAA,CACX,UAAA,CAAYC,EAAAA,CACd,CAAA,CACAjP,GAAAA,CAACuQ,IAAAA,CAAA,CACC,OAAA,CAAQ,GAAA,CACR,GAAA,CAAK,KAAA,CACL,iBAAA,CAAmB,KAAA,CACnB,IAAA,CAAM3F,CAAAA,CAAQ,KAAA,CAAM,IAAA,CACpB,MAAA,CAAQkF,CAAAA,CACR,WAAA,CAAa,CAAA,CACb,IAAA,CAAK,UAAA,CACP,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CAAA,CAUMU,EAAAA,CAA6C,CAAC,CAAE,OAAA,CAAA5F,CAAQ,CAAA,GAAM,CAClE,IAAM6F,CAAAA,CAAAA,CAAU7F,CAAAA,CAAQ,KAAA,CAAM,IAAA,EAAQ,EAAC,EAAG,GAAA,CAAKrJ,CAAAA,GAAS,CACtD,IAAA,CAAM,MAAA,CAAOA,CAAAA,CAAIqJ,CAAAA,CAAQ,KAAA,CAAM,OAAO,CAAA,EAAK,EAAE,CAAA,CAC7C,KAAA,CAAOuE,EAAAA,CAAS5N,CAAAA,CAAIqJ,CAAAA,CAAQ,KAAA,CAAM,QAAQ,CAAC,CAC7C,CAAA,CAAE,CAAA,CAEF,OACE5K,GAAAA,CAACyP,EAAAA,CAAA,CAAW,MAAA,CAAQ7E,CAAAA,CAAQ,KAAA,CAAM,MAAA,CAAQ,KAAA,CAAOA,CAAAA,CAAQ,KAAA,CAAM,KAAA,CAC7D,QAAA,CAAAnK,IAAAA,CAACiQ,QAAAA,CAAA,CACC,QAAA,CAAA,CAAA1Q,GAAAA,CAACmQ,OAAAA,CAAA,CACC,YAAA,CAAcpB,EAAAA,CACd,SAAA,CAAWC,EAAAA,CACX,UAAA,CAAYC,EAAAA,CACd,CAAA,CACAjP,GAAAA,CAAC2Q,GAAAA,CAAA,CAAI,IAAA,CAAMF,CAAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,WAAA,CAAY,KAAA,CAAM,iBAAA,CAAmB,KAAA,CAAO,OAAA,CAAQ,MAAA,CACpF,QAAA,CAAAA,CAAAA,CAAO,GAAA,CAAI,CAACG,CAAAA,CAAOpP,CAAAA,GAClBxB,GAAAA,CAAC6Q,IAAAA,CAAA,CAAK,IAAA,CAAM/B,EAAAA,CAAatN,CAAAA,CAAQsN,EAAAA,CAAa,MAAM,CAAA,CAAA,CAAQ,CAAA,EAAG8B,CAAAA,CAAM,IAAI,CAAA,CAAA,EAAIpP,CAAAA,CAAM,QAAA,EAAU,CAAA,CAAI,CAClG,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CAAA,CAWMsP,EAAAA,CAA2C,CAAC,CAAE,OAAA,CAAAlG,CAAQ,CAAA,GAAM,CAChE,GAAM,CAAE,KAAA,CAAAmG,GAAAA,CAAO,KAAA,CAAAhP,CAAM,CAAA,CAAI6I,CAAAA,CAAQ,KAAA,CAC3BoG,CAAAA,CAAYhL,KAAAA,EAAM,CAAE,OAAA,CAAQ,eAAA,CAAiB,EAAE,CAAA,CAC/C,CAACiL,CAAAA,CAAKC,CAAM,CAAA,CAAIpN,QAAAA,CAAwB,IAAI,CAAA,CAC5C,CAACwB,CAAAA,CAAO6L,CAAQ,CAAA,CAAIrN,QAAAA,CAAwB,IAAI,CAAA,CAEtD,OAAAsN,SAAAA,CAAU,IAAM,CACd,IAAIC,CAAAA,CAAc,KAAA,CAsBlB,OAAA,CApBe,SAA2B,CACxC,GAAI,CACF,GAAM,CAAE,OAAA,CAASC,CAAQ,CAAA,CAAI,MAAM,OAAO,SAAS,CAAA,CAC7CC,CAAAA,CAAS,QAAA,CAAS,eAAA,CAAgB,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA,CAEjED,CAAAA,CAAQ,UAAA,CAAW,CAAE,aAAA,CAAe,QAAA,CAAU,WAAA,CAAa,CAAA,CAAA,CAAO,KAAA,CAAOC,CAAAA,CAAS,MAAA,CAAS,SAAU,CAAC,CAAA,CAEtG,IAAMnM,CAAAA,CAAS,MAAMkM,CAAAA,CAAQ,MAAA,CAAO,CAAA,WAAA,EAAcN,CAAS,CAAA,CAAA,CAAID,GAAK,CAAA,CAE/DM,CAAAA,GACHH,CAAAA,CAAO9L,CAAAA,CAAO,GAAG,CAAA,CACjB+L,CAAAA,CAAS,IAAI,CAAA,EAEjB,CAAA,MAASK,CAAAA,CAAa,CACfH,CAAAA,EACHF,CAAAA,CAASK,aAAuB,KAAA,CAAQA,CAAAA,CAAY,OAAA,CAAU,+BAA+B,EAEjG,CACF,CAAA,GAEY,CAEL,IAAM,CACXH,CAAAA,CAAc,KAChB,CACF,CAAA,CAAG,CAACN,GAAAA,CAAOC,CAAS,CAAC,CAAA,CAGnBvQ,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yFAAA,CACZ,QAAA,CAAA,CAAAsB,CAAAA,EAAS/B,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CAAqC,QAAA,CAAA+B,CAAAA,CAAM,CAAA,CACnEuD,CAAAA,CACCtF,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+EAAA,CAAiF,QAAA,CAAA+Q,GAAAA,CAAM,CAAA,CACpG,IAAA,CACH,CAACzL,CAAAA,EAAS2L,CAAAA,CACTjR,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8CAAA,CAA+C,uBAAA,CAAyB,CAAE,MAAA,CAAQiR,CAAI,CAAA,CAAG,CAAA,CACtG,IAAA,CACH,CAAC3L,CAAAA,EAAS,CAAC2L,CAAAA,CAAMjR,GAAAA,CAACkN,CAAAA,CAAA,CAAkB,SAAA,CAAU,mBAAA,CAAoB,CAAA,CAAK,IAAA,CAAA,CAC1E,CAEJ,CAAA,CAMMuE,EAAAA,CAA8B,CAClC,SAAA,CAAAnE,EAAAA,CACA,KAAA,CAAAd,EAAAA,CACA,KAAA,CAAON,EAAAA,CACP,QAAA,CAAA0D,EAAAA,CACA,OAAA,CAAAlB,EAAAA,CACA,IAAA,CAAAhE,EAAAA,CACA,IAAA,CAAAgB,EAAAA,CACA,OAAA,CAAAI,EAAAA,CACA,KAAA,CAAAuB,EAAAA,CACA,SAAA,CAAAgD,EAAAA,CACA,IAAA,CAAMlD,EAAAA,CACN,OAAA,CAAA2D,EAAAA,CACA,MAAA,CAAAzC,EAAAA,CACA,QAAA,CAAAmC,EAAAA,CACA,QAAA,CAAAzD,EAAAA,CACA,SAAA,CAAAnB,EAAAA,CACA,QAAA,CAAAsB,EAAAA,CACA,KAAA,CAAA/B,EAAAA,CACA,UAAA,CAAA0C,EAAAA,CACA,KAAA,CAAA3M,EAAAA,CACA,IAAA,CAAAsM,EAAAA,CACA,IAAA,CAAAvB,EAAAA,CACA,QAAA,CAAA2C,EACF,CAAA,CAEM8C,EAAAA,CAA8B,CAAC,CAAE,OAAA,CAAA9G,CAAQ,CAAA,GAC7CnK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0HAA0H,QAAA,CAAA,CAAA,yBAAA,CAC/GmK,CAAAA,CAAQ,IAAA,CAAA,CAClC,CAAA,CAGF,SAAS+G,EAAAA,CAAqBC,CAAAA,CAAiCC,CAAAA,CAAsC,CACnG,IAAMC,CAAAA,CAAO,IAAI,GAAA,CACXnH,CAAAA,CAAqB,EAAC,CAE5B,IAAA,IAAWoH,CAAAA,IAAYH,CAAAA,EAAa,EAAC,CAAG,CACtC,IAAMI,CAAAA,CAAgB,MAAA,CAAOD,CAAQ,CAAA,CAEjCD,CAAAA,CAAK,GAAA,CAAIE,CAAa,CAAA,EAAK,CAACH,CAAAA,CAASG,CAAa,CAAA,GAItDF,CAAAA,CAAK,GAAA,CAAIE,CAAa,CAAA,CACtBrH,CAAAA,CAAS,IAAA,CAAKqH,CAAa,CAAA,EAC7B,CAEA,OAAOrH,CACT,CAEA,SAASsH,EAAAA,CAAoBC,CAAAA,CAAoBC,CAAAA,CAA8B,CAC7E,OAAID,CAAAA,CAAS,MAAA,GAAWC,CAAAA,CAAU,MAAA,CACzB,IAAA,CAGFA,CAAAA,CAAU,IAAA,CAAK,CAACJ,CAAAA,CAAUvQ,CAAAA,GAAUuQ,CAAAA,GAAaG,CAAAA,CAAS1Q,CAAK,CAAC,CACzE,CAEA,SAAS4Q,EAAAA,CAAaC,CAAAA,CAAyB,CAC7C,GAAI,CAACA,CAAAA,CAAK,QAAA,CAASA,CAAAA,CAAK,IAAI,CAAA,CAC1B,OAAO,IAAA,CAGT,IAAIC,CAAAA,CAAa,KAAA,CACXT,CAAAA,CAA6B,EAAC,CAEpC,IAAA,IAAWU,CAAAA,IAAc,MAAA,CAAO,IAAA,CAAKF,CAAAA,CAAK,QAAQ,CAAA,CAAG,CACnD,IAAMzH,CAAAA,CAAUyH,CAAAA,CAAK,QAAA,CAASE,CAAU,CAAA,CAExC,GAAI,CAAC3H,CAAAA,CACH,SAGF,IAAM4H,CAAAA,CAAkB5H,CAAAA,CAAQ,QAAA,EAAY,EAAC,CACvCD,CAAAA,CAAWgH,EAAAA,CAAqBa,CAAAA,CAAiBH,CAAAA,CAAK,QAAQ,CAAA,CAC9DI,CAAAA,CAAqBR,EAAAA,CAAoBO,CAAAA,CAAiB7H,CAAQ,CAAA,CAEpE8H,CAAAA,GACFH,CAAAA,CAAa,IAAA,CAAA,CAGfT,EAASU,CAAU,CAAA,CAAIE,CAAAA,CAAqB,CAAE,GAAG7H,CAAAA,CAAS,QAAA,CAAAD,CAAS,CAAA,CAAIC,EACzE,CAEA,OAAK0H,CAAAA,CAIE,CAAE,GAAGD,CAAAA,CAAM,QAAA,CAAAR,CAAS,CAAA,CAHlBQ,CAIX,CAQA,IAAMK,EAAAA,CAAsB,WAAA,CAE5B,SAASC,EAAAA,CAAgBvI,CAAAA,CAA6C,CACpE,IAAMwI,CAAAA,CAAiB,IAAI,GAAA,CACrBC,CAAAA,CAA6B,EAAC,CAEpC,IAAA,IAAW9K,CAAAA,IAAQqC,CAAAA,CAAO,CACxB,GAAIrC,CAAAA,CAAK,IAAA,GAAS2K,EAAAA,CAChB,SAGF,IAAMI,CAAAA,CAAU/K,CAAAA,CAAK,IAAA,CAErB,GAAI+K,CAAAA,EAAW,OAAOA,CAAAA,EAAY,QAAA,EAAY,MAAA,GAAUA,CAAAA,EAAWA,CAAAA,CAAQ,IAAA,GAAS,OAAA,EAAW,OAAA,GAAWA,CAAAA,CAAS,CACjH,IAAM7J,EAAO,IAAA,CAAK,SAAA,CAAU6J,CAAAA,CAAQ,KAAK,CAAA,CAEzC,GAAIF,CAAAA,CAAe,GAAA,CAAI3J,CAAI,CAAA,CACzB,SAGF2J,CAAAA,CAAe,GAAA,CAAI3J,CAAI,EACzB,CAEA4J,CAAAA,CAAQ,IAAA,CAAK9K,CAAI,EACnB,CAEA,OAAO8K,CACT,CAEO,SAASE,EAAAA,CAAY,CAAE,KAAA,CAAA3I,CAAM,CAAA,CAAqD,CACvF,IAAMiI,CAAAA,CAAOW,OAAAA,CAAQ,IAAM,CACzB,IAAMC,CAAAA,CAAYC,kBAAAA,CAAmBP,EAAAA,CAAgBvI,CAAK,CAAC,CAAA,CAE3D,OAAO6I,CAAAA,CAAYb,EAAAA,CAAaa,CAAS,CAAA,CAAI,IAC/C,CAAA,CAAG,CAAC7I,CAAK,CAAC,CAAA,CACJ+I,CAAAA,CAAWH,OAAAA,CAAQ,IAAM,IAAA,CAAK,SAAA,CAAUX,CAAAA,EAAM,KAAA,EAAS,EAAE,CAAA,CAAG,CAACA,CAAI,CAAC,CAAA,CAExE,OAAKA,CAAAA,CAKHrS,GAAAA,CAACoT,aAAAA,CAAA,CAAc,YAAA,CAAcf,CAAAA,CAAK,KAAA,CAChC,QAAA,CAAArS,GAAAA,CAACqT,kBAAAA,CAAA,CACC,QAAA,CAAArT,GAAAA,CAACsT,cAAAA,CAAA,CACC,QAAA,CAAAtT,GAAAA,CAACuT,QAAAA,CAAA,CAAS,QAAA,CAAU7B,EAAAA,CAAU,QAAA,CAAUD,EAAAA,CAAU,IAAA,CAAMY,CAAAA,CAAM,CAAA,CAChE,CAAA,CACF,CAAA,CAAA,CAL4Cc,CAM9C,CAAA,CAVO,IAYX,CC71BO,SAASK,EAAAA,EAAmG,CACjH,GAAM,CAAE,gBAAA,CAAAtV,CAAiB,CAAA,CAAIC,CAAAA,EAAU,CAGvC,OAAO,CAAE,GAAA,CAFG6U,OAAAA,CAAQ,IAAO9U,CAAAA,CAAmBuV,CAAAA,CAAgBvV,CAAgB,CAAA,CAAI,IAAA,CAAO,CAACA,CAAgB,CAAC,CAAA,CAE7F,SAAA,CAAWA,CAAiB,CAC5C,CA4BA,IAAMwV,EAAAA,CAAsB,CAAA,CACfC,EAAAA,CAAwB,GAAA,CAC/BC,EAAAA,CAA4B,GAAA,CAC5BC,EAAAA,CAA6B,WAAA,CAOtBC,EAAAA,CAA0BC,aAAAA,CAAuC,IAAI,CAAA,CACrEC,EAAAA,CAAsBD,aAAAA,CAAc,KAAK,EAEtD,SAASE,EAAAA,CAAMxU,CAAAA,CAA2B,CACxC,OAAO,IAAI,OAAA,CAASC,CAAAA,EAAY,MAAA,CAAO,UAAA,CAAWA,CAAAA,CAASD,CAAE,CAAC,CAChE,CAEA,SAASyU,EAAAA,CAAa5O,CAAAA,CAAyB,CAC7C,OAAMA,CAAAA,YAAiB,KAAA,CAIhBA,CAAAA,CAAM,IAAA,GAAS,YAAA,EAAgBA,CAAAA,CAAM,OAAA,CAAQ,WAAA,EAAY,CAAE,QAAA,CAAS,SAAS,CAAA,CAH3E,KAIX,CAEA,SAAS6O,EAAAA,CAAmB/J,CAAAA,CAAqC,CAC/D,OAAOA,CAAAA,CAAM,IAAA,CAAMrC,CAAAA,EAAS,CAAC4B,CAAAA,CAAmB5B,CAAI,CAAC,CACvD,CAEA,SAASqM,EAAAA,CAAaC,CAAAA,CAAwC,CAC5D,IAAMC,CAAAA,CAAY,IAAI,GAAA,CAEtB,IAAA,IAAWjP,CAAAA,IAAWgP,CAAAA,CACpB,IAAA,IAAWtM,CAAAA,IAAQ1C,CAAAA,CAAQ,KAAA,CACrB0C,CAAAA,CAAK,IAAA,GAAS,mBAAA,EAAuBA,CAAAA,CAAK,EAAA,EAC5CuM,CAAAA,CAAU,GAAA,CAAIvM,CAAAA,CAAK,EAAE,CAAA,CAK3B,OAAOuM,CACT,CAEA,SAASC,EAAAA,CAAqBF,CAAAA,CAA4C,CACxE,IAAMC,CAAAA,CAAYF,EAAAA,CAAaC,CAAQ,CAAA,CACjCjP,CAAAA,CAA0B,EAAC,CAEjC,IAAA,IAAWC,CAAAA,IAAWgP,CAAAA,CAAU,CAC9B,GAAIhP,CAAAA,CAAQ,IAAA,GAAS,MAAA,CAAQ,CACtBiP,CAAAA,CAAU,GAAA,CAAIjP,CAAAA,CAAQ,EAAE,CAAA,EAC3BD,CAAAA,CAAO,IAAA,CAAKC,CAAO,CAAA,CAGrB,QACF,CAEA,GAAIA,CAAAA,CAAQ,IAAA,GAAS,WAAA,CAAa,CAChCD,CAAAA,CAAO,IAAA,CAAKC,CAAO,CAAA,CAEnB,QACF,CAEA,IAAI+E,CAAAA,CAA6B,EAAC,CAC9BoK,CAAAA,CAAa,CAAA,CAEXC,CAAAA,CAAQ,IAAY,CACpBN,EAAAA,CAAmB/J,CAAK,CAAA,EAC1BhF,CAAAA,CAAO,IAAA,CAAK,CAAE,GAAGC,CAAAA,CAAS,EAAA,CAAI,CAAA,EAAGA,CAAAA,CAAQ,EAAE,CAAA,CAAA,EAAImP,CAAAA,CAAW,QAAA,EAAU,CAAA,CAAA,CAAI,KAAA,CAAApK,CAAM,CAAC,CAAA,CAGjFoK,CAAAA,EAAAA,CACApK,CAAAA,CAAQ,GACV,CAAA,CAEA,IAAA,IAAWrC,CAAAA,IAAQ1C,CAAAA,CAAQ,KAAA,CAAO,CAChC,GAAI0C,CAAAA,CAAK,IAAA,GAAS,mBAAA,CAAqB,CACrC,IAAMyB,EAAO1B,CAAAA,CAA6CC,CAAI,CAAA,CAE9D0M,CAAAA,EAAM,CACNrP,CAAAA,CAAO,IAAA,CAAK,CACV,EAAA,CAAI2C,CAAAA,CAAK,EAAA,EAAM,MAAA,CAAO,UAAA,EAAW,CACjC,KAAA,CAAOyB,CAAAA,CAAK,KAAA,CACZ,IAAA,CAAM,MACR,CAAC,CAAA,CAED,QACF,CAEAY,CAAAA,CAAM,IAAA,CAAKrC,CAAI,EACjB,CAEA0M,CAAAA,GACF,CAEA,OAAOrP,CACT,CAEO,SAASsP,EAAAA,CAAmBL,CAAAA,CAA4C,CAC7E,OAAOrB,OAAAA,CAAQ,IAAMuB,EAAAA,CAAqBF,CAAQ,CAAA,CAAG,CAACA,CAAQ,CAAC,CACjE,CAEO,SAASM,CAAAA,CAAoB5U,CAAAA,CAAqD,CACvF,OAAOA,CAAAA,GAAW,SAAA,EAAaA,CAAAA,GAAW,QAAA,EAAYA,CAAAA,GAAW,WAAA,EAAeA,CAAAA,GAAW,SAC7F,CAEA,SAAS6U,EAAAA,CAA6B,CACpC,aAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,qBAAA,CAAAC,CACF,CAAA,CAIY,CAcV,OAbIJ,CAAAA,CAAoBG,CAAY,CAAA,EAMhCC,CAAAA,EAOAD,CAAAA,GAAiB,SAAA,CACZ,KAAA,CAGLA,CAAAA,GAAiB,mBAAA,CACZ,IAAA,CAIF9K,EAAAA,CAAkC6K,CAAa,CACxD,CAEO,SAASG,EAAAA,CACdC,CAAAA,CACAlM,CAAAA,CAUA,CACA,GAAM,CAAC1D,CAAAA,CAAS6P,CAAU,CAAA,CAAIpR,QAAAA,EAAwB,CAChD,CAAC/D,CAAAA,CAAQoV,CAAS,CAAA,CAAIrR,QAAAA,CAA0B,WAAW,CAAA,CAC3DgR,CAAAA,CAAe/L,CAAAA,EAAS,YAAA,CACxBqM,CAAAA,CAAcrM,CAAAA,EAAS,WAAA,EAAe,CAAA,CACtCsM,CAAAA,CAAsBC,MAAAA,CAAOvM,CAAAA,EAAS,gBAAA,EAAoB,EAAE,CAAA,CAClEsM,CAAAA,CAAoB,OAAA,CAAUtM,CAAAA,EAAS,gBAAA,EAAoB,EAAC,CAG5D,IAAMwM,CAAAA,CAA2BD,MAAAA,CAAOvM,CAAAA,EAAS,qBAAA,EAAyB,KAAK,CAAA,CAC/EwM,CAAAA,CAAyB,OAAA,CAAUxM,CAAAA,EAAS,qBAAA,EAAyB,KAAA,CACrE,IAAMyM,CAAAA,CAAeF,MAAAA,CAAOL,CAAS,CAAA,CAC/BQ,CAAAA,CAAaH,MAAAA,CAAOjQ,CAAO,CAAA,CACjC,OAAAoQ,CAAAA,CAAW,OAAA,CAAUpQ,CAAAA,CAErB+L,SAAAA,CAAU,IAAM,CACd,IAAMsE,CAAAA,CAAgBF,CAAAA,CAAa,OAAA,GAAYP,CAAAA,CAG/C,GAFAO,CAAAA,CAAa,OAAA,CAAUP,CAAAA,CAEnB,CAACA,CAAAA,CAAW,CACdC,CAAAA,CAAW,MAAS,CAAA,CACpBC,CAAAA,CAAU,aAAa,CAAA,CAEvB,MACF,CAEA,IAAMQ,CAAAA,CAAkB,IAAI,eAAA,CAIxBd,CAAAA,CAA2Ca,CAAAA,CAAgB,MAAA,CAAYD,CAAAA,CAAW,OAAA,CAIhFG,CAAAA,CAAeF,CAAAA,CAAgB,CAAA,CAAKb,CAAAA,EAAe,MAAM,MAAA,EAAU,CAAA,CAEzE,GAAIa,CAAAA,CACFR,CAAAA,CAAW,MAAS,CAAA,CAAA,KAAA,GACXL,CAAAA,GAAkBC,CAAAA,GAAiB,SAAA,EAAaH,CAAAA,CAAoBG,CAAY,CAAA,CAAA,CAAI,CAI7F,IAAMe,CAAAA,CAAc5L,EAAAA,CAA+B4K,CAAAA,CAAeQ,CAAAA,CAAoB,OAAO,CAAA,CAEzFQ,CAAAA,GAAgBhB,CAAAA,GAClBA,CAAAA,CAAgBgB,CAAAA,CAChBX,CAAAA,CAAWW,CAAW,CAAA,EAE1B,CAEAV,CAAAA,CAAU,WAAW,CAAA,CAGrB,IAAMW,CAAAA,CAAsBb,CAAAA,CAAU,QAAA,CAAS,GAAG,CAAA,CAAI,GAAA,CAAM,GAAA,CAEtDc,EAAAA,CAAc,SAAwC,CAC1D,IAAMhX,CAAAA,CAAW,MAAM,KAAA,CAAM,CAAA,EAAGkW,CAAS,CAAA,EAAGa,CAAmB,CAAA,YAAA,CAAA,CAAgB,CAC7E,WAAA,CAAa,SAAA,CACb,MAAA,CAAQH,CAAAA,CAAgB,MAC1B,CAAC,CAAA,CAED,GAAI5W,CAAAA,CAAS,SAAW,GAAA,CACtB,OAAO,aAAA,CAGT,GAAI,CAACA,CAAAA,CAAS,EAAA,EAAM,CAACA,CAAAA,CAAS,IAAA,CAC5B,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0CA,CAAAA,CAAS,MAAA,CAAO,QAAA,EAAU,CAAA,CAAA,CAAG,CAAA,CAGzF,IAAIiX,CAAAA,CAAY,KAAA,CAIVC,EAAAA,CAHeC,oBAAAA,CAAqB,CAAE,MAAA,CAAQC,oBAAAA,CAAsB,MAAA,CAAQpX,CAAAA,CAAS,IAAK,CAAC,CAAA,CAGhE,WAAA,CAC/B,IAAI,eAAA,CAA6C,CAC/C,SAAA,CAAW,CAACqG,CAAAA,CAAQgR,EAAAA,GAAe,CACjC,GAAI,CAAChR,CAAAA,CAAO,OAAA,CACV,MAAMA,CAAAA,CAAO,KAAA,CAGXA,CAAAA,CAAO,KAAA,CAAM,IAAA,GAAS,QAAA,GACxB4Q,CAAAA,CAAY,IAAA,CAAA,CAGdI,EAAAA,CAAW,OAAA,CAAQhR,CAAAA,CAAO,KAAK,EACjC,CACF,CAAC,CACH,CAAA,CAEMiR,CAAAA,CAAgBC,mBAAAA,CAAmC,CACvD,OAAA,CAAUhR,CAAAA,EAAU,CAEdqQ,CAAAA,CAAgB,MAAA,CAAO,OAAA,EAI3B,OAAA,CAAQ,KAAA,CAAM,wBAAA,CAA0BrQ,CAAK,EAC/C,CAAA,CACA,MAAA,CAAQ2Q,EACV,CAAC,CAAA,CAMGM,CAAAA,CAA+B,IAAA,CAE/BC,EAAAA,CAAWZ,CAAAA,GAAiB,CAAA,CAC1Ba,EAAAA,CAAqB,CAACxR,CAAAA,CAAQ,KAAA,GAAgB,CAC9C0Q,CAAAA,CAAgB,MAAA,CAAO,OAAA,EAAW,CAACd,CAAAA,EAInC,CAAC2B,EAAAA,GACHA,EAAAA,CAAWvR,CAAAA,EAAS4P,CAAAA,CAAc,KAAA,CAAM,MAAA,EAAUe,CAAAA,CAE9C,CAACY,EAAAA,CAAAA,EAKPtB,CAAAA,CAAW,CAAE,GAAGL,CAAc,CAAC,EACjC,CAAA,CAEA,GAAI,CACF,UAAA,IAAiBhL,CAAAA,IAAWwM,CAAAA,CAAe,CACzC,GAAIV,CAAAA,CAAgB,MAAA,CAAO,OAAA,CACzB,MAGFd,EAAgBhL,CAAAA,CAEZ0M,CAAAA,GAAkB,IAAA,GACpBA,CAAAA,CAAgB,MAAA,CAAO,UAAA,CAAW,IAAM,CACtCA,CAAAA,CAAgB,IAAA,CAChBE,EAAAA,GACF,CAAA,CAAG7C,EAAyB,CAAA,EAEhC,CACF,CAAA,OAAE,CACI2C,CAAAA,GAAkB,IAAA,GACpB,MAAA,CAAO,YAAA,CAAaA,CAAa,CAAA,CACjCA,CAAAA,CAAgB,IAAA,CAAA,CAGlBE,EAAAA,CAAmB,IAAI,EACzB,CAEA,OAAOT,CAAAA,CAAY,UAAA,CAAa,YAClC,CAAA,CAEMU,CAAAA,CAAU,SAA2B,CACzC,IAAI9W,CAAAA,CAAU,CAAA,CAEd,KAAO,CAAC+V,CAAAA,CAAgB,MAAA,CAAO,OAAA,EAAS,CAClC/V,CAAAA,CAAU,CAAA,EACZ,MAAMqU,EAAAA,CAAMN,EAAqB,CAAA,CAGnC,GAAI,CACF,IAAMvO,CAAAA,CAAS,MAAM2Q,EAAAA,EAAY,CAEjC,GAAIJ,CAAAA,CAAgB,MAAA,CAAO,OAAA,CACzB,OAGF,GAAIvQ,CAAAA,GAAW,aAAA,CAAe,CAC5B+P,CAAAA,CAAU,aAAa,CAAA,CAEvB,MACF,CAKA,GAAI/P,CAAAA,GAAW,UAAA,EAAcuP,CAAAA,CAAoBG,CAAY,CAAA,CAAG,CAC9DK,CAAAA,CAAU,UAAU,CAAA,CAEpB,MACF,CAKA,GAAIR,CAAAA,CAAoBG,CAAY,CAAA,CAAG,CACrCK,CAAAA,CAAU,UAAU,CAAA,CAEpB,MACF,CAKA,GACEP,EAAAA,CAA6B,CAC3B,aAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,qBAAA,CAAuBS,CAAAA,CAAyB,OAClD,CAAC,CAAA,CACD,CACAJ,CAAAA,CAAU,QAAQ,CAAA,CAElB,MACF,CAMA,GAAI,EAFuBL,CAAAA,GAAiB,SAAA,EAAaS,CAAAA,CAAyB,OAAA,CAAA,EAEvD3V,CAAAA,EAAW8T,EAAAA,CAAsB,CAAA,CAAG,CAC7DyB,CAAAA,CAAU,OAAO,EAEjB,MACF,CACF,CAAA,MAAS7P,CAAAA,CAAO,CACd,GAAIqQ,CAAAA,CAAgB,MAAA,CAAO,OAAA,EAAWzB,EAAAA,CAAa5O,CAAK,CAAA,CACtD,OAKF,GAFA,OAAA,CAAQ,KAAA,CAAM,kBAAA,CAAoBA,CAAK,CAAA,CAEnCqP,CAAAA,CAAoBG,CAAY,CAAA,CAAG,CACrCK,CAAAA,CAAU,UAAU,CAAA,CAEpB,MACF,CAIA,GAAI,EAFuBL,CAAAA,GAAiB,SAAA,EAAaS,CAAAA,CAAyB,OAAA,CAAA,EAEvD3V,CAAAA,EAAW8T,EAAAA,CAAsB,CAAA,CAAG,CAC7DyB,CAAAA,CAAU,OAAO,CAAA,CAEjB,MACF,CACF,CAEAvV,CAAAA,EAAW,EACb,CACF,CAAA,CAEM+W,EAAAA,CAAc,MAAA,CAAO,UAAA,CAAW,IAAM,CACrCD,CAAAA,GACP,CAAA,CAAG,CAAC,CAAA,CAEJ,OAAO,IAAM,CACX,MAAA,CAAO,YAAA,CAAaC,EAAW,CAAA,CAC/BhB,CAAAA,CAAgB,KAAA,CAAM,sBAAsB,EAC9C,CACF,CAAA,CAAG,CAACb,CAAAA,CAAcM,CAAAA,CAAaH,CAAS,CAAC,CAAA,CAElC,CAAE,OAAA,CAAA5P,CAAAA,CAAS,MAAA,CAAAtF,CAAO,CAC3B,CAEO,SAAS6W,EAAAA,CAA2B3X,CAAAA,CAAoE,CAC7G,OAAO,CACL,aAAA,CAAeA,CAAAA,CAAS,aAAA,CACxB,UAAA,CAAYA,CAAAA,CAAS,EAAA,CACrB,SAAA,CAAWA,CAAAA,CAAS,SAAA,EAAa,MAAA,CACjC,iBAAA,CAAmBA,CAAAA,CAAS,iBAAA,CAC5B,MAAA,CAAQA,CAAAA,CAAS,MAAA,EAAU,MAAA,CAC3B,MAAA,CAAQA,CAAAA,CAAS,MACnB,CACF,CAOO,SAAS4X,EAAAA,CAAoB3O,CAAAA,CAAuB,CACzD,IAAME,CAAAA,CAAUF,CAAAA,CAAK,IAAA,EAAK,CAE1B,OAAKE,CAAAA,CAIEA,CAAAA,CAAQ,KAAA,CAAM;AAAA,CAAI,CAAA,CAAE,KAAA,CAAOa,CAAAA,EAAS,eAAA,CAAgB,IAAA,CAAKA,CAAAA,CAAK,IAAA,EAAM,CAAC,CAAA,CAHnE,KAIX,CAEO,SAAS6N,EAAAA,CAAY,CAC1B,GAAA,CAAApT,CAAAA,CACA,IAAA,CAAAqE,CAAAA,CACA,SAAA,CAAAgP,CAAAA,CACA,KAAA,CAAA3M,CACF,CAAA,CAKuB,CAGrB,GAAIT,CAAAA,CAAmB5B,CAAI,CAAA,CACzB,OAAO,IAAA,CAIT,GAAIH,CAAAA,CAAwBG,CAAAA,CAAK,IAAI,CAAA,CAAG,CACtC,IAAMzC,CAAAA,CAAQoE,CAAAA,CAAsB3B,CAAI,CAAA,CAExC,OAAOzC,CAAAA,CAAQtF,GAAAA,CAACgX,EAAAA,CAAA,CAAc,OAAA,CAAS1R,CAAAA,CAAO,CAAA,CAAK,IACrD,CAEA,GAAIyC,CAAAA,CAAK,IAAA,GAAS,MAAA,CAIhB,OAFE8O,EAAAA,CAAoB9O,CAAAA,CAAK,IAAI,CAAA,EAAKqC,CAAAA,CAAM,IAAA,CAAM6M,CAAAA,EAAcA,CAAAA,CAAU,IAAA,GAASpD,EAA0B,CAAA,CAErF,IAAA,CAAO7T,GAAAA,CAACkX,EAAAA,CAAA,CAAS,IAAA,CAAMnP,CAAAA,CAAM,CAAA,CAGrD,GAAIA,CAAAA,CAAK,IAAA,GAAS,uBAAA,CAChB,OAAO/H,GAAAA,CAACmX,EAAAA,CAAA,CAAkB,OAAA,CAASrP,CAAAA,CAAiDC,CAAI,CAAA,CAAG,CAAA,CAG7F,GAAIA,CAAAA,CAAK,IAAA,GAAS,mBAAA,CAChB,OAAO/H,GAAAA,CAACoX,EAAAA,CAAA,CAAgB,GAAA,CAAK1T,CAAAA,CAAK,OAAA,CAASoE,CAAAA,CAA6CC,CAAI,CAAA,CAAG,CAAA,CAGjG,GAAIA,CAAAA,CAAK,IAAA,GAAS,oBAAA,CAChB,OAAO/H,GAAAA,CAACqX,EAAAA,CAAA,CAAiB,OAAA,CAASvP,CAAAA,CAA8CC,CAAI,CAAA,CAAG,CAAA,CAGzF,GAAIA,CAAAA,CAAK,IAAA,GAAS,kBAAA,CAChB,OAAO/H,GAAAA,CAACsX,EAAAA,CAAA,CAAe,OAAA,CAASxP,CAAAA,CAA4CC,CAAI,CAAA,CAAG,CAAA,CAGrF,GAAIA,CAAAA,CAAK,IAAA,GAAS,cAAA,CAAgB,CAChC,IAAMyB,CAAAA,CAAO1B,CAAAA,CAAwCC,CAAI,CAAA,CACnD1C,CAAAA,CACJmE,CAAAA,CAAK,MAAA,GAAW,SAAA,CACZ,CAAA,SAAA,EAAYA,CAAAA,CAAK,KAAK,CAAA,CAAA,CAAA,CACtBA,CAAAA,CAAK,MAAA,GAAW,MAAA,CACd,CAAA,WAAA,EAAcA,CAAAA,CAAK,KAAK,CAAA,CAAA,EAAI,OAAOA,CAAAA,CAAK,SAAA,EAAc,QAAA,CAAW,CAAA,IAAA,EAAOA,CAAAA,CAAK,SAAA,CAAU,QAAA,EAAU,CAAA,MAAA,CAAA,CAAW,EAAE,CAAA,CAAA,CAC9G,CAAA,CAAA,EAAIA,CAAAA,CAAK,KAAK,CAAA,UAAA,EAAaA,CAAAA,CAAK,KAAA,EAAO,OAAA,EAAW,eAAe,CAAA,CAAA,CAEzE,OACE/I,IAAAA,CAAC8W,CAAAA,CAAA,CACC,QAAA,CAAA,CAAA9W,IAAAA,CAAC+W,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAxX,GAAAA,CAACyX,OAAAA,CAAA,CAAQ,SAAA,CAAU,aAAA,CAAc,CAAA,CAAE,SAAA,CAAA,CAErC,CAAA,CACAhX,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gCAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,gCAAA,CACd,QAAA,CAAAA,GAAAA,CAAC0X,EAAAA,CAAA,CAAW,OAAA,CAASlO,CAAAA,CAAK,MAAA,GAAW,OAAA,CAAS,OAAA,CAASA,CAAAA,CAAK,MAAA,GAAW,SAAA,CAAW,CAAA,CACpF,CAAA,CACAxJ,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,YAAA,CAAc,QAAA,CAAAqF,CAAAA,CAAQ,CAAA,CACrCmE,CAAAA,CAAK,aAAA,CACJxJ,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,6CAAA,CAA+C,QAAA,CAAAwJ,CAAAA,CAAK,aAAA,CAAc,CAAA,CAC7E,IAAA,CAAA,CACN,CAAA,CAAA,CACF,CAEJ,CAEA,GAAIzB,CAAAA,CAAK,IAAA,GAAS,yBAAA,CAA2B,CAC3C,IAAMyB,CAAAA,CAAO1B,CAAAA,CAAmDC,CAAI,CAAA,CAEpE,OACEtH,IAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,qCAAA,CAAsC,QAAA,CAAA,CAAA,oBAAA,CAC9B+I,CAAAA,CAAK,sBAAA,CAAuB,QAAA,EAAS,CAAE,4GAAA,CAAA,CAE5D,CAEJ,CAEA,GAAIzB,CAAAA,CAAK,IAAA,GAAS,wBAAA,CAA0B,CAC1C,IAAMyB,CAAAA,CAAO1B,CAAAA,CAAkDC,CAAI,CAAA,CAEnE,OAAO/H,GAAAA,CAAC2X,EAAAA,CAAA,CAAqB,QAAA,CAAUnO,CAAAA,CAAK,QAAA,CAAU,CACxD,CAGA,GAAIzB,CAAAA,CAAK,IAAA,GAAS,uBAAA,CAChB,OAAO,IAAA,CAGT,GAAIA,CAAAA,CAAK,IAAA,GAAS,iBAAA,CAAmB,CACnC,IAAMyB,CAAAA,CAAO1B,CAAAA,CAA2CC,CAAI,CAAA,CAE5D,OACEtH,IAAAA,CAAC8W,CAAAA,CAAA,CAAY,SAAA,CAAU,sBAAA,CACrB,QAAA,CAAA,CAAA9W,IAAAA,CAAC+W,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAxX,GAAAA,CAACsM,WAAAA,CAAA,CAAY,SAAA,CAAU,6BAAA,CAA8B,CAAA,CACrDtM,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,aAAA,CAAW,CAAA,CAAA,CACnB,CAAA,CACAA,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,mCAAA,CAAqC,QAAA,CAAAwJ,CAAAA,CAAK,OAAA,CAAQ,CAAA,CAAA,CACjE,CAEJ,CAEA,GAAIzB,CAAAA,CAAK,IAAA,GAAS,wBAAA,CAA0B,CAC1C,IAAM9I,CAAAA,CAAW6I,CAAAA,CAAkDC,CAAI,CAAA,CAEvE,OAAOC,EAAAA,CAAkB/I,CAAQ,CAAA,CAC/Be,GAAAA,CAAC4X,EAAAA,CAAA,CAAqB,OAAA,CAAS3Y,CAAAA,CAAU,CAAA,CAEzCe,GAAAA,CAAC6X,EAAAA,CAAA,CAAqB,GAAA,CAAKnU,CAAAA,CAAK,OAAA,CAASzE,CAAAA,CAAU,CAEvD,CAEA,OAAI8I,CAAAA,CAAK,IAAA,GAAS,0BAAA,CACT/H,GAAAA,CAAC8X,EAAAA,CAAA,CAAsB,OAAA,CAAShQ,CAAAA,CAAoDC,CAAI,CAAA,CAAG,CAAA,CAGhGA,CAAAA,CAAK,IAAA,GAAS8L,EAAAA,CACKzJ,CAAAA,CAAM,KAAA,CAAM2M,CAAAA,CAAY,CAAC,CAAA,CAAE,IAAA,CAAMgB,CAAAA,EAAaA,CAAAA,CAAS,IAAA,GAASlE,EAA0B,CAAA,CAGtG,IAAA,CAGF7T,GAAAA,CAAC+S,EAAAA,CAAA,CAAY,KAAA,CAAO3I,CAAAA,CAAO,CAAA,CAGhCrC,CAAAA,CAAK,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,CACvB/H,GAAAA,CAACgY,EAAAA,CAAA,CAAgB,IAAA,CAAMjQ,CAAAA,CAAM,CAAA,CAG/B,IACT,CAEA,SAASmP,EAAAA,CAAS,CAAE,IAAA,CAAAnP,CAAK,CAAA,CAAsC,CAC7D,OACE/H,GAAAA,CAACiY,EAAAA,CAAA,CACC,SAAA,CAAU,gGAAA,CACV,WAAA,CAAalQ,CAAAA,CAAK,KAAA,GAAU,WAAA,CAE3B,QAAA,CAAAA,CAAAA,CAAK,IAAA,CACR,CAEJ,CAGO,SAASiP,EAAAA,CAAc,CAAE,OAAA,CAAA3R,CAAQ,CAAA,CAAqC,CAC3E,OACE5E,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kJAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAACsM,WAAAA,CAAA,CAAY,SAAA,CAAU,mDAAA,CAAoD,CAAA,CAC3EtM,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,mCAAA,CAAqC,QAAA,CAAAqF,CAAAA,CAAQ,CAAA,CAAA,CAC/D,CAEJ,CAGA,IAAM6S,EAAAA,CAAoB,GAAA,CAOnB,SAASC,EAAAA,CAAkB,CAAE,IAAA,CAAAjQ,CAAK,CAAA,CAAkC,CAGzE,IAAMkQ,CAAAA,CAAiB9C,MAAAA,CAAe,OAAO,WAAA,CAAgB,GAAA,CAAc,CAAA,CAAI,WAAA,CAAY,GAAA,EAAK,CAAA,CAC1F+C,CAAAA,CAAkB,IAGf,EAAA,CAAA,CAFK,OAAO,WAAA,CAAgB,GAAA,CAAc,CAAA,CAAI,WAAA,CAAY,GAAA,EAAI,EAErDD,CAAAA,CAAe,OAAA,EAAWF,EAAAA,CAAAA,CAEtC,CAACI,CAAAA,CAAYC,CAAa,CAAA,CAAIzU,QAAAA,CAMjC,CACD,OAAA,CAASoE,CAAAA,CACT,cAAA,CAAgB,CAAA,CAChB,GAAA,CAAK,CAAA,CACL,QAAA,CAAU,IAAA,CACV,eAAA,CAAiB,CACnB,CAAC,CAAA,CAED,OAAAkJ,SAAAA,CAAU,IAAM,CACdmH,CAAAA,CAAeC,CAAAA,EACTA,CAAAA,CAAM,OAAA,GAAYtQ,CAAAA,CACbsQ,CAAAA,CAGF,CACL,OAAA,CAAStQ,CAAAA,CACT,cAAA,CAAgBmQ,CAAAA,EAAgB,CAChC,GAAA,CAAKG,CAAAA,CAAM,GAAA,CAAM,CAAA,CACjB,QAAA,CAAUA,CAAAA,CAAM,OAAA,CAChB,eAAA,CAAiBA,CAAAA,CAAM,cACzB,CACD,EACH,CAAA,CAAG,CAACtQ,CAAI,CAAC,CAAA,CAKPzH,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,qEAAA,CACb,QAAA,CAAA,CAAA6X,CAAAA,CAAW,QAAA,CACVtY,GAAAA,CAAC,MAAA,CAAA,CACC,aAAA,CAAW,IAAA,CACX,SAAA,CAAU,mEAAA,CAGV,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAU,0DAAA,CACV,KAAA,CAAO,CAAE,cAAA,CAAgB,CAAA,EAAGsY,CAAAA,CAAW,eAAA,CAAgB,QAAA,EAAU,CAAA,EAAA,CAAK,CAAA,CAErE,QAAA,CAAAA,CAAAA,CAAW,QAAA,CACd,CAAA,CAAA,CAPK,CAAA,SAAA,EAAYA,CAAAA,CAAW,GAAA,CAAI,QAAA,EAAU,CAAA,CAQ5C,CAAA,CACE,IAAA,CACJtY,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAWsY,CAAAA,CAAW,QAAA,CAAW,gCAAA,CAAmC,UAAA,CAEpE,IAAA,CAAK,QAAA,CAEL,QAAA,CAAAtY,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAU,0DAAA,CACV,KAAA,CAAO,CAAE,cAAA,CAAgB,CAAA,EAAGsY,CAAAA,CAAW,cAAA,CAAe,QAAA,EAAU,CAAA,EAAA,CAAK,CAAA,CAEpE,QAAA,CAAAA,CAAAA,CAAW,OAAA,CACd,CAAA,CAAA,CARK,CAAA,QAAA,EAAWA,CAAAA,CAAW,GAAA,CAAI,QAAA,EAAU,CAAA,CAS3C,CAAA,CAAA,CACF,CAEJ,CAEA,IAAMG,EAAAA,CAA4B,GAAA,CAQ3B,SAASC,EAAAA,CAAqBC,CAAAA,CAAe5P,CAAAA,CAA2C,CAC7F,IAAM6P,CAAAA,CAAoCH,EAAAA,CACpC,CAACI,CAAAA,CAAWC,CAAY,CAAA,CAAIhV,QAAAA,CAAS6U,CAAK,CAAA,CAC1CI,CAAAA,CAAazD,MAAAA,CAAO,IAAA,CAAK,GAAA,EAAK,CAAA,CAC9B0D,CAAAA,CAAa1D,MAAAA,CAAOqD,CAAK,CAAA,CAC/B,OAAAK,CAAAA,CAAW,OAAA,CAAUL,CAAAA,CAErBvH,SAAAA,CAAU,IAAM,CACd,GAAIuH,CAAAA,GAAUE,CAAAA,CACZ,OAGF,IAAMI,CAAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGL,CAAAA,EAAc,IAAA,CAAK,GAAA,EAAI,CAAIG,CAAAA,CAAW,OAAA,CAAQ,CAAA,CACjEG,CAAAA,CAAY,MAAA,CAAO,UAAA,CAAW,IAAM,CACxCH,CAAAA,CAAW,OAAA,CAAU,IAAA,CAAK,GAAA,EAAI,CAC9BD,CAAAA,CAAaE,CAAAA,CAAW,OAAO,EACjC,CAAA,CAAGC,CAAI,CAAA,CAEP,OAAO,IAAM,CACX,MAAA,CAAO,YAAA,CAAaC,CAAS,EAC/B,CACF,CAAA,CAAG,CAACL,CAAAA,CAAWF,CAAAA,CAAOC,CAAU,CAAC,CAAA,CAE1BC,CACT,CAaO,SAASM,EAAAA,CAAe,CAAE,KAAA,CAAAR,CAAAA,CAAO,OAAA,CAAAS,CAAQ,CAAA,CAA4B,CAC1E,IAAMC,CAAAA,CAAcX,EAAAA,CAAqBC,CAAK,CAAA,CAE9C,OACE3Y,GAAAA,CAAC,KAAA,CAAA,CACC,aAAA,CAAa,CAACoZ,CAAAA,CACd,SAAA,CAAW,CAAA,sHAAA,EACTA,CAAAA,CAAU,2BAAA,CAA8B,2BAC1C,CAAA,CAAA,CAEA,QAAA,CAAApZ,GAAAA,CAACmY,EAAAA,CAAA,CAAkB,IAAA,CAAMkB,CAAAA,CAAa,CAAA,CACxC,CAEJ,CAEO,SAAS9B,CAAAA,CAAY,CAC1B,QAAA,CAAA5M,CAAAA,CACA,SAAA,CAAA2O,CAAAA,CAAY,EACd,CAAA,CAGgB,CACd,OACEtZ,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAW,CAAA,mIAAA,EAAsIsZ,CAAS,CAAA,mBAAA,CAAA,CAEzJ,QAAA,CAAA3O,CAAAA,CACH,CAEJ,CAEO,SAAS6M,CAAAA,CAAW,CAAE,QAAA,CAAA7M,CAAS,CAAA,CAA+C,CACnF,OAAO3K,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0EAAA,CAA4E,QAAA,CAAA2K,CAAAA,CAAS,CAC7G,CAEA,SAAS+M,EAAAA,CAAW,CAAE,OAAA,CAAA6B,CAAAA,CAAS,OAAA,CAAAC,CAAQ,CAAA,CAA0D,CAC/F,OAAIA,CAAAA,CACKxZ,GAAAA,CAACmG,YAAAA,CAAA,CAAa,SAAA,CAAU,2BAAA,CAA4B,CAAA,CAGzDoT,CAAAA,CACKvZ,GAAAA,CAACqG,KAAAA,CAAA,CAAM,SAAA,CAAU,2BAAA,CAA4B,CAAA,CAG/CrG,GAAAA,CAACoG,SAAAA,CAAA,CAAU,SAAA,CAAU,WAAA,CAAY,CAC1C,CAEO,SAASqT,EAAAA,CAAe,CAC7B,KAAA,CAAAnU,CAAAA,CACA,IAAA,CAAAoU,CAAAA,CACA,OAAA,CAAAF,CAAAA,CACA,OAAA,CAAAnU,CAAAA,CACA,KAAA,CAAAtD,CACF,CAAA,CAMgB,CACd,OACEtB,IAAAA,CAAC8W,CAAAA,CAAA,CACC,QAAA,CAAA,CAAA9W,IAAAA,CAAC+W,CAAAA,CAAA,CACE,QAAA,CAAA,CAAAkC,CAAAA,CACA3X,CAAAA,CAAAA,CACH,CAAA,CACAtB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gCAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,gCAAA,CACd,QAAA,CAAAA,GAAAA,CAAC0X,EAAAA,CAAA,CAAW,OAAA,CAAS,CAAA,CAAQpS,CAAAA,CAAQ,OAAA,CAASkU,CAAAA,CAAS,CAAA,CACzD,CAAA,CACAxZ,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,YAAA,CAAc,QAAA,CAAAqF,CAAAA,CAAQ,CAAA,CAAA,CACxC,CAAA,CAAA,CACF,CAEJ,CAEA,SAAS8R,EAAAA,CAAkB,CAAE,OAAA,CAAA9R,CAAQ,CAAA,CAAkE,CACrG,IAAMsU,CAAAA,CAAiB,CAAC,OAAA,CAAS,WAAA,CAAa,YAAY,CAAA,CAAE,QAAA,CAAStU,CAAAA,CAAQ,MAAM,CAAA,CAC7EuU,CAAAA,CAAYD,CAAAA,CAAiBtU,CAAAA,CAAQ,KAAA,CAAM,KAAA,CAAM,CAAA,CAAGA,CAAAA,CAAQ,KAAA,CAAM,MAAA,CAAS,CAAC,CAAA,CAAIA,CAAAA,CAAQ,KAAA,CACxFwU,CAAAA,CAAaF,CAAAA,CAAkBtU,CAAAA,CAAQ,KAAA,CAAMA,CAAAA,CAAQ,KAAA,CAAM,MAAA,CAAS,CAAC,CAAA,EAAK,EAAA,CAAM,IAAA,CAEtF,OACE5E,IAAAA,CAAC8W,CAAAA,CAAA,CACC,QAAA,CAAA,CAAA9W,IAAAA,CAAC+W,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAxX,GAAAA,CAAC8Z,eAAAA,CAAA,CAAgB,SAAA,CAAU,aAAA,CAAc,CAAA,CACzC9Z,GAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAAqF,CAAAA,CAAQ,MAAA,GAAW,MAAA,CAAS,gBAAA,CAAmB,kBAAA,CAAmB,CAAA,CAAA,CAC3E,CAAA,CACA5E,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACZ,QAAA,CAAA,CAAAmZ,CAAAA,CAAU,GAAA,CAAI,CAACG,CAAAA,CAAMvY,CAAAA,GACpBf,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAACoG,SAAAA,CAAA,CAAU,SAAA,CAAU,WAAA,CAAY,CAAA,CACjCpG,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,wBAAA,CAA0B,QAAA,CAAA+Z,CAAAA,CAAK,CAAA,CAAA,CAAA,CAFM,CAAA,EAAGA,CAAI,CAAA,CAAA,EAAIvY,CAAAA,CAAM,QAAA,EAAU,CAAA,CAGlF,CACD,CAAA,CACA,OAAOqY,CAAAA,EAAe,QAAA,CACrBpZ,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAAC0X,EAAAA,CAAA,CAAW,OAAA,CAASrS,CAAAA,CAAQ,MAAA,GAAW,OAAA,CAAS,OAAA,CAASA,CAAAA,CAAQ,MAAA,GAAW,OAAA,CAAS,CAAA,CACtFrF,GAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAAqF,CAAAA,CAAQ,MAAA,GAAW,OAAA,CAAWA,CAAAA,CAAQ,KAAA,EAAO,OAAA,EAAWwU,CAAAA,CAAcA,CAAAA,CAAW,CAAA,CAAA,CAC1F,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CAAA,CACF,CAEJ,CAEO,SAASzC,EAAAA,CAAgB,CAC9B,GAAA,CAAA1T,CAAAA,CACA,OAAA,CAAA2B,CACF,CAAA,CAGgB,CACd,IAAM2U,CAAAA,CAAS3U,CAAAA,CAAQ,MAAA,GAAW,MAAA,EAAUA,CAAAA,CAAQ,UAAA,CAC9C4U,CAAAA,CAAaD,CAAAA,CAAStW,CAAAA,CAAI,cAAA,CAAe2B,CAAAA,CAAQ,UAAA,EAAc,EAAE,CAAA,CAAI,EAAA,CACrE6U,CAAAA,CAAcF,CAAAA,CAAStW,CAAAA,CAAI,cAAA,CAAe2B,CAAAA,CAAQ,UAAA,EAAc,EAAA,CAAI,CAAE,QAAA,CAAU,IAAK,CAAC,CAAA,CAAI,EAAA,CAC1F8U,CAAAA,CAAQC,EAAAA,CAAY/U,CAAAA,CAAQ,SAAS,CAAA,CAE3C,OACE5E,IAAAA,CAAC8W,CAAAA,CAAA,CACC,QAAA,CAAA,CAAA9W,IAAAA,CAAC+W,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAxX,GAAAA,CAACqa,YAAAA,CAAA,CAAa,SAAA,CAAU,aAAA,CAAc,CAAA,CACrChV,CAAAA,CAAQ,MAAA,GAAW,MAAA,CAAS,oBAAA,CAAuB,qBAAA,CAAA,CACtD,CAAA,CACA5E,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gCAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,gCAAA,CACd,QAAA,CAAAA,GAAAA,CAAC0X,EAAAA,CAAA,CAAW,OAAA,CAASrS,CAAAA,CAAQ,MAAA,GAAW,OAAA,CAAS,OAAA,CAASA,CAAAA,CAAQ,MAAA,GAAW,WAAA,CAAa,CAAA,CAC5F,CAAA,CACA5E,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4BAAA,CAA8B,QAAA,CAAAqF,CAAAA,CAAQ,QAAA,CAAS,CAAA,CAC9D5E,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qCAAA,CACZ,QAAA,CAAA,CAAA4E,CAAAA,CAAQ,MAAA,GAAW,WAAA,EAAe,wBAAA,CAClCA,CAAAA,CAAQ,MAAA,GAAW,MAAA,EAAU,CAACiV,EAAAA,CAAiBjV,CAAO,CAAA,CAAG8U,CAAK,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,QAAK,CAAA,CAC1F9U,CAAAA,CAAQ,MAAA,GAAW,OAAA,GAAYA,CAAAA,CAAQ,KAAA,EAAO,OAAA,EAAW,4BAAA,CAAA,CAAA,CAC5D,CAAA,CAAA,CACF,CAAA,CACC2U,CAAAA,CACCvZ,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+BAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAACkG,GAAAA,CAAA,CAAO,OAAA,CAAO,IAAA,CAAC,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,SAAA,CAChC,QAAA,CAAAlG,GAAAA,CAAC,GAAA,CAAA,CAAE,IAAA,CAAMia,CAAAA,CAAY,GAAA,CAAI,YAAA,CAAa,MAAA,CAAO,QAAA,CAAS,QAAA,CAAA,SAAA,CAEtD,CAAA,CACF,CAAA,CACAja,GAAAA,CAACkG,GAAAA,CAAA,CAAO,OAAA,CAAO,IAAA,CAAC,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,SAAA,CAChC,QAAA,CAAAzF,IAAAA,CAAC,GAAA,CAAA,CAAE,IAAA,CAAMyZ,CAAAA,CACP,QAAA,CAAA,CAAAla,GAAAA,CAACua,YAAAA,CAAA,CAAa,SAAA,CAAU,WAAA,CAAY,CAAA,CAAE,UAAA,CAAA,CAExC,CAAA,CACF,CAAA,CACClV,CAAAA,CAAQ,GAAA,CACPrF,GAAAA,CAACkG,GAAAA,CAAA,CAAO,OAAA,CAAO,IAAA,CAAC,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,SAAA,CAChC,QAAA,CAAAzF,IAAAA,CAAC,GAAA,CAAA,CAAE,IAAA,CAAM4E,CAAAA,CAAQ,GAAA,CAAK,GAAA,CAAI,YAAA,CAAa,MAAA,CAAO,QAAA,CAC5C,QAAA,CAAA,CAAArF,GAAAA,CAACwa,QAAAA,CAAA,CAAS,SAAA,CAAU,WAAA,CAAY,CAAA,CAAE,gBAAA,CAAA,CAEpC,CAAA,CACF,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAEA,SAASnD,EAAAA,CAAiB,CAAE,OAAA,CAAAhS,CAAQ,CAAA,CAA+D,CACjG,IAAMoV,CAAAA,CAAgBpV,CAAAA,CAAQ,QAAA,GAAa,OAAA,CAAU,OAAA,CAAU,iBAAA,CACzDqU,CAAAA,CACJrU,CAAAA,CAAQ,QAAA,GAAa,OAAA,CAAUrF,GAAAA,CAAC0a,iBAAAA,CAAA,CAAkB,SAAA,CAAU,aAAA,CAAc,CAAA,CAAK1a,GAAAA,CAAC2a,QAAAA,CAAA,CAAS,SAAA,CAAU,aAAA,CAAc,CAAA,CAEnH,OACE3a,GAAAA,CAACyZ,EAAAA,CAAA,CACC,KAAA,CAAOpU,CAAAA,CAAQ,KAAA,EAAO,OAAA,CACtB,IAAA,CAAMqU,CAAAA,CACN,OAAA,CAASrU,CAAAA,CAAQ,MAAA,GAAW,SAAA,CAC5B,OAAA,CACEA,CAAAA,CAAQ,MAAA,GAAW,OAAA,CACdA,CAAAA,CAAQ,KAAA,EAAO,OAAA,EAAW,CAAA,yBAAA,EAA4BA,CAAAA,CAAQ,WAAW,CAAA,CAAA,CAC1E,CAAA,EAAGA,CAAAA,CAAQ,MAAA,GAAW,MAAA,CAAS,MAAA,CAAS,SAAS,CAAA,WAAA,EAAcA,CAAAA,CAAQ,WAAW,CAAA,CAAA,CAExF,KAAA,CAAO,CAAA,EAAGoV,CAAa,CAAA,SAAA,CAAA,CACzB,CAEJ,CAEA,SAASnD,EAAAA,CAAe,CAAE,OAAA,CAAAjS,CAAQ,CAAA,CAA6D,CAC7F,IAAMqU,CAAAA,CACJrU,CAAAA,CAAQ,MAAA,GAAW,SAAA,CACjBrF,GAAAA,CAACoM,gBAAAA,CAAA,CAAiB,SAAA,CAAU,+BAAA,CAAgC,CAAA,CAC1D/G,CAAAA,CAAQ,MAAA,GAAW,SAAA,CACrBrF,GAAAA,CAAC4a,eAAAA,CAAA,CAAgB,SAAA,CAAU,aAAA,CAAc,CAAA,CAEzC5a,GAAAA,CAACsM,WAAAA,CAAA,CAAY,SAAA,CAAU,6BAAA,CAA8B,CAAA,CAEnDvK,CAAAA,CACJsD,CAAAA,CAAQ,MAAA,GAAW,SAAA,CAAY,eAAA,CAAkBA,CAAAA,CAAQ,MAAA,GAAW,SAAA,CAAY,aAAA,CAAgB,YAAA,CAElG,OACE5E,IAAAA,CAAC8W,CAAAA,CAAA,CAAY,SAAA,CAAWlS,CAAAA,CAAQ,MAAA,GAAW,QAAA,CAAW,sBAAA,CAAyB,wBAAA,CAC7E,QAAA,CAAA,CAAA5E,IAAAA,CAAC+W,CAAAA,CAAA,CACE,QAAA,CAAA,CAAAkC,CAAAA,CACD1Z,GAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAA+B,CAAAA,CAAM,CAAA,CAAA,CACf,CAAA,CACCsD,CAAAA,CAAQ,MAAA,GAAW,QAAA,CAAWrF,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,mCAAA,CAAqC,QAAA,CAAAqF,CAAAA,CAAQ,OAAA,CAAQ,CAAA,CAAO,IAAA,CAAA,CAC1G,CAEJ,CAMO,SAASwS,EAAAA,CAAqB,CACnC,GAAA,CAAAnU,CAAAA,CACA,OAAA,CAAA2B,CACF,CAAA,CAGgB,CACd,GAAM,CAAE,SAAA,CAAAnG,CAAU,CAAA,CAAIsU,EAAAA,EAAc,CAC9BqH,CAAAA,CAAgBC,UAAAA,CAAWhH,EAAuB,CAAA,CAClDiH,CAAAA,CAASD,UAAAA,CAAW9G,EAAmB,CAAA,CACvCgH,CAAAA,CAA4B1F,MAAAA,CAAiD,MAAS,CAAA,CAItF,CAAE,IAAA,CAAA9L,CAAAA,CAAM,KAAA,CAAAlE,CAAAA,CAAO,YAAA,CAAA2V,GAAAA,CAAc,MAAA,CAAA7c,CAAO,CAAA,CAAI8c,EAAAA,CAC5Chc,CAAAA,CAAYT,GAAAA,CAAMS,CAAS,CAAA,CAAE,QAAA,CAASmG,CAAAA,CAAQ,UAAU,CAAA,CAAI,IAAA,CAC5D8V,CAAAA,CACA,CACE,eAAA,CAAkBC,CAAAA,EACZ/V,CAAAA,CAAQ,MAAA,GAAW,SAAA,EAInB+V,CAAAA,EAAY,QAAA,EAAU,MAAA,EAAUA,CAAAA,CAAW,QAAA,CAAS,MAAA,GAAW,SAAA,CAC1D,CAAA,CAGFzH,EAEX,CACF,CAAA,CACM0H,CAAAA,CAAiB7R,CAAAA,EAAM,QAAA,EAAU,MAAA,CACjCtC,CAAAA,CAAAA,CAAamU,CAAAA,EAAkBhW,CAAAA,CAAQ,MAAA,IAAY,SAAA,CACnDiW,CAAAA,CAAuB9R,CAAAA,EAAM,QAAA,EAAU,IAAA,GAAS,QAAA,EAAYA,CAAAA,CAAK,QAAA,CAAS,MAAA,GAAW,UAAA,CAI3F4H,SAAAA,CAAU,IAAM,CACV,CAACkK,CAAAA,EAAwB,CAACpc,CAAAA,EAI9BG,CAAAA,CAAsB,CAAE,UAAA,CAAYgG,CAAAA,CAAQ,UAAA,CAAY,WAAA,CAAa5G,GAAAA,CAAMS,CAAS,CAAA,CAAE,QAAA,CAASmG,CAAAA,CAAQ,UAAU,CAAA,CAAG,SAAA,CAAAnG,CAAU,CAAC,EACjI,CAAA,CAAG,CAACoc,CAAAA,CAAsBjW,CAAAA,CAAQ,UAAA,CAAYnG,CAAS,CAAC,CAAA,CAIxDkS,SAAAA,CAAU,IAAM,CACThT,CAAAA,GACP,CAAA,CAAG,CAACiH,CAAAA,CAAQ,MAAA,CAAQjH,CAAM,CAAC,CAAA,CAO3BgT,SAAAA,CAAU,IAAM,CACd,IAAMmK,CAAAA,CAAiBP,CAAAA,CAA0B,OAAA,CACjDA,CAAAA,CAA0B,OAAA,CAAUK,CAAAA,CAEhC,EAAAhW,CAAAA,CAAQ,MAAA,GAAW,SAAA,EAAa,CAACgW,CAAAA,EAAkBA,CAAAA,GAAmB,SAAA,CAAA,EAItEE,CAAAA,GAAmB,SAAA,EAIvBV,CAAAA,EAAe,iBAAA,CAAkBrR,CAAAA,EAAM,QAAA,EAAU,EAAA,EAAMnE,CAAAA,CAAQ,UAAA,CAAYgW,CAAc,EAC3F,CAAA,CAAG,CAACA,CAAAA,CAAgB7R,CAAAA,EAAM,QAAA,EAAU,EAAA,CAAInE,CAAAA,CAAQ,UAAA,CAAYA,CAAAA,CAAQ,MAAA,CAAQwV,CAAa,CAAC,CAAA,CAE1F,SAASW,CAAAA,CAAc1W,CAAAA,CAAwC,CAGzDA,CAAAA,CAAa,MAAA,GAAW,SAAA,GAC1BkW,CAAAA,CAA0B,OAAA,CAAUlW,CAAAA,CAAa,MAAA,CAAA,CAG9C1G,CAAAA,EAAO,CAGZyc,CAAAA,EAAe,iBAAA,CAAkB/V,CAAAA,CAAa,EAAA,CAAIA,CAAAA,CAAa,MAAM,EACvE,CAEA,IAAI2W,CAAAA,CAEJ,GAAIjS,CAAAA,EAAM,QAAA,CACRiS,CAAAA,CACEzb,GAAAA,CAACqH,EAAAA,CAAA,CACC,GAAA,CAAK3D,CAAAA,CACL,QAAA,CAAU8F,CAAAA,CAAK,QAAA,CACf,IAAA,CAAMuR,CAAAA,CAEN,SAAA,CAAWS,CAAAA,CAAAA,CADNhS,CAAAA,CAAK,QAAA,CAAS,MAErB,CAAA,CAAA,KAAA,GAEOlE,CAAAA,EAAS,CAAC2V,GAAAA,CAAc,CACjC,IAAMS,CAAAA,CAASpW,CAAAA,YAAiB,KAAA,EAASA,CAAAA,CAAM,OAAA,CAAUA,CAAAA,CAAM,OAAA,CAAU,gBAAA,CAEzEmW,CAAAA,CACEhb,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,cAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,gCAAA,CAAiC,QAAA,CAAA,CAAA,0BAAA,CACnB4E,CAAAA,CAAQ,iBAAA,CAAkB,IAAA,CAAGqW,CAAAA,CAAAA,CACxD,CAAA,CACA1b,GAAAA,CAACkG,GAAAA,CAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,OAAA,CAAS,IAAG,CAAQ9H,CAAAA,GAAO,CAAA,CAAG,QAAA,CAAA,OAAA,CAElE,CAAA,CAAA,CACF,EAEJ,CAAA,KACEqd,CAAAA,CACEhb,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sEAAA,CACb,QAAA,CAAA,CAAAT,GAAAA,CAACmG,YAAAA,CAAA,CAAa,SAAA,CAAU,6BAAA,CAA8B,CAAA,CACtD1F,IAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,CAAA,mBAAA,CAAkB4E,CAAAA,CAAQ,iBAAA,CAAkB,KAAA,CAAA,CAAG,CAAA,CAAA,CACvD,CAAA,CAIJ,OACE5E,IAAAA,CAAC8W,CAAAA,CAAA,CACC,QAAA,CAAA,CAAA9W,IAAAA,CAAC+W,CAAAA,CAAA,CACE,QAAA,CAAA,CAAAuD,CAAAA,CAAS/a,GAAAA,CAAC2b,UAAAA,CAAA,CAAW,SAAA,CAAU,aAAA,CAAc,CAAA,CAAK3b,GAAAA,CAAC4b,eAAAA,CAAA,CAAgB,SAAA,CAAU,aAAA,CAAc,CAAA,CAC3Fb,CAAAA,CAAS,kBAAA,CAAqB,mBAAA,CAC9B7T,CAAAA,CAAYlH,GAAAA,CAACmG,YAAAA,CAAA,CAAa,SAAA,CAAU,qCAAA,CAAsC,CAAA,CAAK,IAAA,CAAA,CAClF,CAAA,CACAnG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAW,QAAA,CAAAyb,CAAAA,CAAK,CAAA,CAC9BpW,CAAAA,CAAQ,MAAA,GAAW,OAAA,EAAWA,CAAAA,CAAQ,KAAA,CACrCrF,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,wCAAA,CAA0C,QAAA,CAAAqF,CAAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,CAAA,CAC3E,IAAA,CAAA,CACN,CAEJ,CAGA,SAASuS,EAAAA,CAAqB,CAAE,OAAA,CAAAvS,CAAQ,CAAA,CAAmE,CACzG,IAAMnC,CAAAA,CAAUmC,CAAAA,CAAQ,iBAAA,CAAkB,OAAA,CAAQ,QAAA,CAAU,EAAE,CAAA,CAE9D,OACErF,GAAAA,CAACyZ,EAAAA,CAAA,CACC,KAAA,CAAOpU,CAAAA,CAAQ,MAAA,GAAW,OAAA,CAAWA,CAAAA,CAAQ,KAAA,EAAO,OAAA,EAAW,kBAAA,CAAsB,MAAA,CACrF,IAAA,CAAMrF,GAAAA,CAAC6b,eAAAA,CAAA,CAAgB,SAAA,CAAU,aAAA,CAAc,CAAA,CAC/C,OAAA,CAAS,KAAA,CACT,OAAA,CACExW,CAAAA,CAAQ,MAAA,GAAW,OAAA,CACf,CAAA,EAAGnC,CAAO,CAAA,EAAA,EAAKmC,CAAAA,CAAQ,KAAA,EAAO,OAAA,EAAW,kBAAkB,CAAA,CAAA,CAC3D,CAAA,EAAGnC,CAAO,CAAA,0BAAA,CAAA,CAEhB,KAAA,CAAM,aAAA,CACR,CAEJ,CAEA,SAAS4U,EAAAA,CAAsB,CAAE,OAAA,CAAAzS,CAAQ,CAAA,CAAqE,CAC5G,IAAMyW,CAAAA,CAAW,CACf,OAAOzW,CAAAA,CAAQ,cAAA,EAAmB,QAAA,CAAW,CAAA,EAAGA,CAAAA,CAAQ,cAAA,CAAe,QAAA,EAAU,CAAA,UAAA,CAAA,CAAe,EAAA,CAChG,OAAOA,CAAAA,CAAQ,YAAA,EAAiB,QAAA,CAAW,CAAA,EAAGA,CAAAA,CAAQ,YAAA,CAAa,QAAA,EAAU,CAAA,QAAA,CAAA,CAAa,EAAA,CAC1F,OAAOA,CAAAA,CAAQ,WAAA,EAAgB,QAAA,CAAW,CAAA,EAAGA,CAAAA,CAAQ,WAAA,CAAY,QAAA,EAAU,CAAA,OAAA,CAAA,CAAY,EAAA,CACvF,OAAOA,CAAAA,CAAQ,UAAA,EAAe,QAAA,CAAW,CAAA,EAAGA,CAAAA,CAAQ,UAAA,CAAW,QAAA,EAAU,CAAA,MAAA,CAAA,CAAW,EACtF,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAEhB,OACErF,GAAAA,CAACyZ,EAAAA,CAAA,CACC,KAAA,CAAOpU,CAAAA,CAAQ,KAAA,EAAO,OAAA,CACtB,IAAA,CAAMrF,GAAAA,CAAC4b,eAAAA,CAAA,CAAgB,SAAA,CAAU,aAAA,CAAc,CAAA,CAC/C,OAAA,CAASvW,CAAAA,CAAQ,MAAA,GAAW,SAAA,EAAaA,CAAAA,CAAQ,MAAA,GAAW,SAAA,CAC5D,OAAA,CACEA,CAAAA,CAAQ,MAAA,GAAW,OAAA,CACdA,CAAAA,CAAQ,KAAA,EAAO,OAAA,EAAW,CAAA,YAAA,EAAeA,CAAAA,CAAQ,aAAa,CAAA,CAAA,CAC/D,CAAA,EAAGA,CAAAA,CAAQ,MAAA,GAAW,MAAA,CAAS,WAAA,CAAc,SAAS,CAAA,CAAA,EAAIA,CAAAA,CAAQ,aAAa,CAAA,EAC7EyW,CAAAA,CAAS,MAAA,CAAS,CAAA,CAAI,CAAA,EAAA,EAAKA,CAAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,CAAM,EACtD,CAAA,CAAA,CAEN,KAAA,CAAM,qBAAA,CACR,CAEJ,CAEA,SAAS9D,EAAAA,CAAgB,CAAE,IAAA,CAAAjQ,CAAK,CAAA,CAA6C,CAC3E,OACEtH,IAAAA,CAAC8W,CAAAA,CAAA,CAAY,SAAA,CAAU,gBAAA,CACrB,QAAA,CAAA,CAAA9W,IAAAA,CAAC+W,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAxX,GAAAA,CAACoM,gBAAAA,CAAA,CAAiB,SAAA,CAAU,aAAA,CAAc,CAAA,CACzCrE,CAAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAU,EAAE,CAAA,CAAE,UAAA,CAAW,GAAA,CAAK,GAAG,CAAA,CAAA,CACtD,CAAA,CACA/H,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,qCAAA,CAAsC,QAAA,CAAA,yEAAA,CAEnD,CAAA,CAAA,CACF,CAEJ,CAEA,SAASoa,EAAAA,CAAY2B,CAAAA,CAA4B,CAC/C,GAAI,OAAOA,CAAAA,EAAc,QAAA,CACvB,OAAO,EAAA,CAGT,GAAIA,CAAAA,CAAY,IAAA,CACd,OAAO,CAAA,EAAGA,CAAAA,CAAU,QAAA,EAAU,CAAA,EAAA,CAAA,CAGhC,IAAMC,CAAAA,CAAYD,CAAAA,CAAY,IAAA,CAE9B,OAAIC,CAAAA,CAAY,IAAA,CACP,CAAA,EAAGA,CAAAA,CAAU,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA,CAGzB,CAAA,EAAA,CAAIA,CAAAA,CAAY,IAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CACzC,CAEA,SAAS1B,EAAAA,CAAiBjV,CAAAA,CAAkD,CAC1E,OAAIA,CAAAA,CAAQ,IAAA,GAAS,KAAA,CACZ,cAAA,CAGLA,CAAAA,CAAQ,IAAA,GAAS,MAAA,CACZ,eAAA,CAGF,UACT,CAGA,SAASsS,EAAAA,CAAqB,CAAE,QAAA,CAAAsE,CAAS,CAAA,CAAsC,CAC7E,GAAM,CAAE,QAAA,CAAAC,CAAS,CAAA,CAAIC,WAAAA,EAAY,CAC3B,CAACC,CAAI,CAAA,CAAIF,CAAAA,CAAS,KAAA,CAAM,MAAM,CAAA,CAEpC,OACEzb,IAAAA,CAAC8W,CAAAA,CAAA,CACC,QAAA,CAAA,CAAA9W,IAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,YAAA,CAAa,QAAA,CAAA,CAAA,UAAA,CAASwb,CAAAA,CAAS,kCAAA,CAAA,CAAgC,CAAA,CAC5Ejc,GAAAA,CAACkG,GAAAA,CAAA,CAAO,OAAA,CAAO,IAAA,CAAC,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,SAAA,CAChC,QAAA,CAAAzF,IAAAA,CAAC4b,IAAAA,CAAA,CAAK,EAAA,CAAI,CAAA,EAAGD,CAAI,CAAA,YAAA,EAAe,kBAAA,CAAmBH,CAAQ,CAAC,CAAA,CAAA,CAAI,QAAA,CAAA,CAAA,UAAA,CAASA,CAAAA,CAAAA,CAAS,CAAA,CACpF,CAAA,CAAA,CACF,CAEJ","file":"chunk-MKEIZ5ZQ.js","sourcesContent":["import { useCallback } from 'react';\nimport { useSWRConfig } from 'swr';\nimport { useConfig } from '../../core/config/config-context';\nimport { paths } from './api';\nimport type { AutomationApprovals } from './types';\n\n/**\n * The sidebar badge polls the approvals count only every 30 seconds. Pages\n * that learn earlier that the count changed (a run pausing for approval, a\n * decision, the inbox loading) call this so the badge updates at once.\n */\nexport function useRevalidateApprovalsCount(): (_known?: AutomationApprovals) => void {\n const { currentProjectId } = useConfig();\n const { mutate } = useSWRConfig();\n\n return useCallback(\n (known?: AutomationApprovals) => {\n if (!currentProjectId) {\n return;\n }\n\n const key = paths(currentProjectId).approvalsCount;\n\n // A fresh inbox response carries the count already; show it before the refetch lands.\n void (known ? mutate(key, known, { revalidate: true }) : mutate(key));\n },\n [currentProjectId, mutate]\n );\n}\n","import { revalidateProjectSchema } from '../../core/config/use-project-schemas';\nimport type { AutomationApproval } from './types';\n\nconst POLL_INTERVAL_MS = 5_000;\nconst POLL_LIMIT = 150;\nconst watching = new Set<string>();\n\n/** `null` = transient failure (keep polling); `'missing'` = the approval does not exist (stop). */\nexport type ApprovalFetcher = () => Promise<AutomationApproval | 'missing' | null>;\n\nfunction urlFetcher(approvalUrl: string): ApprovalFetcher {\n return async () => {\n const response = await fetch(approvalUrl, { credentials: 'include', mode: 'cors' });\n\n if (response.status === 404) {\n return 'missing';\n }\n\n if (!response.ok) {\n return null;\n }\n\n const body = (await response.json()) as { approval?: AutomationApproval };\n\n return body.approval ?? 'missing';\n };\n}\n\n/**\n * Decides whether a watch is still needed: `true` to keep polling, `false`\n * once the deployment settled (schema refreshed when it succeeded).\n */\nexport function settleSchemaDeployment(\n approval: AutomationApproval | null,\n projectId: string,\n revalidate: (_projectId: string) => Promise<unknown> = revalidateProjectSchema\n): boolean {\n if (!approval || approval.kind !== 'schema' || approval.status !== 'approved' || approval.error) {\n return false;\n }\n\n if (approval.executedAt) {\n void revalidate(projectId);\n\n return false;\n }\n\n return true;\n}\n\n/**\n * After a schema change is approved the deployment runs server-side for a\n * while. This keeps polling the approval, independently of which component\n * approved it (chat card or inbox drawer) and of navigation inside the\n * Studio, and refetches the project schema once the deployment completed.\n */\nexport function watchSchemaDeployment({\n approvalId,\n approvalUrl,\n fetchApproval,\n projectId,\n revalidate = revalidateProjectSchema,\n sleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms)),\n}: {\n approvalId: string;\n /** GET endpoint returning `{ approval }`; required unless `fetchApproval` is given. */\n approvalUrl?: string;\n fetchApproval?: ApprovalFetcher;\n projectId: string;\n revalidate?: (_projectId: string) => Promise<unknown>;\n sleep?: (_ms: number) => Promise<void>;\n}): void {\n const key = `${projectId}:${approvalId}`;\n const load = fetchApproval ?? (approvalUrl ? urlFetcher(approvalUrl) : null);\n\n if (!load || watching.has(key)) {\n return;\n }\n\n watching.add(key);\n\n void (async () => {\n try {\n for (let attempt = 0; attempt < POLL_LIMIT; attempt += 1) {\n let approval: AutomationApproval | 'missing' | null = null;\n\n try {\n approval = await load();\n } catch {\n approval = null;\n }\n\n if (approval === 'missing') {\n return;\n }\n\n // A transient fetch failure (network blip, 5xx) keeps the watch alive.\n if (approval !== null && !settleSchemaDeployment(approval, projectId, revalidate)) {\n return;\n }\n\n await sleep(POLL_INTERVAL_MS);\n }\n } finally {\n watching.delete(key);\n }\n })();\n}\n","import type { JSX } from 'react';\nimport { useId, useState, useTransition } from 'react';\nimport { format, formatDistance } from 'date-fns';\nimport { ArrowRightIcon, CheckIcon, LoaderCircle, MoveRightIcon, TriangleAlertIcon, XIcon } from 'lucide-react';\nimport {\n Badge,\n Button,\n Checkbox,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DrawerModal,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n Textarea,\n} from '../../ui';\nimport { paths, type ApiClient } from './api';\nimport { useRevalidateApprovalsCount } from './approvals-count';\nimport { watchSchemaDeployment } from './schema-deploy-watch';\nimport type {\n AutomationApproval,\n AutomationApprovalOperation,\n AutomationApprovalPreviewOperation,\n AutomationApprovalStatus,\n} from './types';\n\nconst APPROVAL_STATUS_STYLES: { [status in AutomationApprovalStatus]: string } = {\n approved: 'fk:bg-success/20 fk:text-success',\n cancelled: 'fk:bg-secondary fk:text-secondary-foreground',\n expired: 'fk:bg-secondary fk:text-secondary-foreground',\n pending: 'fk:bg-amber-500/20 fk:text-amber-600',\n rejected: 'fk:bg-destructive/15 fk:text-destructive',\n};\n\nexport function ApprovalStatusBadge({ status }: { status: AutomationApprovalStatus }): JSX.Element {\n return (\n <Badge\n className={`fk:border-none fk:h-4.75 fk:text-[0.6875rem] fk:leading-4.5 fk:tracking-wide ${APPROVAL_STATUS_STYLES[status]}`}\n variant=\"secondary\"\n >\n {status}\n </Badge>\n );\n}\n\nfunction formatCellValue(value: unknown): string {\n if (value === null || value === undefined) {\n return '—';\n }\n\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n\n return String(value);\n}\n\nfunction DiffCell({ after, before }: { after: unknown; before: unknown }): JSX.Element {\n const beforeText = formatCellValue(before);\n const afterText = formatCellValue(after);\n\n if (beforeText === afterText) {\n return <span className=\"fk:text-muted-foreground\">{beforeText}</span>;\n }\n\n return (\n <span className=\"fk:inline-flex fk:flex-wrap fk:items-center fk:gap-1.5\">\n <span className=\"fk:rounded fk:bg-destructive/10 fk:px-1 fk:text-destructive fk:line-through fk:corner-squircle\">{beforeText}</span>\n <MoveRightIcon className=\"fk:size-3 fk:shrink-0 fk:text-muted-foreground\" />\n <span className=\"fk:rounded fk:bg-success/15 fk:px-1 fk:text-success fk:corner-squircle\">{afterText}</span>\n </span>\n );\n}\n\nfunction getOperationTitle(operation: AutomationApprovalPreviewOperation): string {\n const entity = operation.entity ?? 'entities';\n const count = operation.affectedCount !== null ? ` · ${operation.affectedCount.toString()} affected` : '';\n\n if (operation.kind === 'create') {\n return `Create ${entity}${count}`;\n }\n\n if (operation.kind === 'update') {\n return `Update ${entity}${count}`;\n }\n\n if (operation.kind === 'delete') {\n return `Delete ${entity}${count}`;\n }\n\n return `Mutation on ${entity}${count}`;\n}\n\nfunction OperationPreviewTable({ operation }: { operation: AutomationApprovalPreviewOperation }): JSX.Element | null {\n if (operation.rows.length === 0) {\n return null;\n }\n\n const contextColumns = (operation.contextColumns ?? []).filter((column) => column !== '_id');\n\n if (operation.kind === 'delete') {\n return (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Records to delete</TableHead>\n {contextColumns.map((column) => (\n <TableHead key={column}>{column}</TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {operation.rows.map((row, index) => (\n <TableRow className=\"fk:bg-destructive/5\" key={row.id ?? index.toString()}>\n <TableCell className=\"fk:font-mono fk:text-xs fk:text-destructive\">\n {row.id ?? formatCellValue(row.before?._id)}\n </TableCell>\n {contextColumns.map((column) => (\n <TableCell className=\"fk:text-xs fk:text-muted-foreground\" key={column}>\n {formatCellValue(row.before?.[column])}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n );\n }\n\n const columns = operation.columns.filter((column) => column !== '_id' && !contextColumns.includes(column));\n\n return (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>ID</TableHead>\n {contextColumns.map((column) => (\n <TableHead key={column}>{column}</TableHead>\n ))}\n {columns.map((column) => (\n <TableHead key={column}>{column}</TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {operation.rows.map((row, index) => (\n <TableRow key={row.id ?? index.toString()}>\n <TableCell className=\"fk:font-mono fk:text-xs fk:text-muted-foreground\">{row.id ?? '—'}</TableCell>\n {contextColumns.map((column) => (\n <TableCell className=\"fk:max-w-72 fk:text-xs fk:text-muted-foreground\" key={column}>\n <span className=\"fk:line-clamp-3\">{formatCellValue(row.before?.[column])}</span>\n </TableCell>\n ))}\n {columns.map((column) => (\n <TableCell className=\"fk:text-xs\" key={column}>\n {operation.kind === 'create' ? (\n <span className=\"fk:rounded fk:bg-success/15 fk:px-1 fk:text-success fk:corner-squircle\">\n {formatCellValue(row.after?.[column])}\n </span>\n ) : (\n <DiffCell after={row.after?.[column]} before={row.before?.[column]} />\n )}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n );\n}\n\nfunction OperationDocuments({\n operations,\n plugin,\n chat,\n title,\n}: {\n operations: AutomationApprovalOperation[];\n plugin: boolean;\n chat: boolean;\n title?: string;\n}): JSX.Element {\n return (\n <details className=\"fk:rounded-md fk:border fk:border-border fk:corner-squircle\">\n <summary className=\"fk:cursor-pointer fk:px-3 fk:py-2 fk:text-xs fk:font-medium fk:text-muted-foreground\">\n {title ?? (chat ? 'Action details' : plugin ? 'Plugin tool and arguments' : `GraphQL documents (${operations.length})`)}\n </summary>\n <div className=\"fk:space-y-3 fk:border-t fk:border-border fk:p-3\">\n {operations.map((operation, index) => (\n <div className=\"fk:space-y-2\" key={index.toString()}>\n <pre className=\"fk:overflow-x-auto fk:rounded-md fk:bg-muted fk:p-3 fk:text-xs fk:corner-squircle\">{operation.query}</pre>\n {operation.variables && Object.keys(operation.variables).length > 0 ? (\n <pre className=\"fk:overflow-x-auto fk:rounded-md fk:bg-muted/60 fk:p-3 fk:text-xs fk:corner-squircle\">\n {JSON.stringify(operation.variables, null, 2)}\n </pre>\n ) : null}\n </div>\n ))}\n </div>\n </details>\n );\n}\n\nfunction getChatPluginAction(\n approval: AutomationApproval\n): { action: string; app: string; account?: string; scope?: 'project' | 'personal' } | null {\n if (approval.kind !== 'plugin') {\n return null;\n }\n\n const toolPath = approval.operations[0]?.query.split('\\n')[0]?.trim();\n const segments = toolPath?.split('/');\n const toolName = segments?.at(-1);\n const pluginName = segments?.[0];\n\n if (!toolName || !pluginName || segments?.length < 2) {\n return null;\n }\n\n const action = toolName\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/[_-]+/g, ' ')\n .toLowerCase();\n const app = pluginName.replace(/[_-]+/g, ' ').replace(/\\b\\w/g, (letter) => letter.toUpperCase());\n const query = approval.operations[0]?.query ?? '';\n const connection = /^Connection:\\s*(Project|Personal)\\s+—\\s+(.+)$/m.exec(query);\n\n if (connection?.[1] && connection[2]) {\n return {\n action,\n app,\n account: connection[2].trim(),\n scope: connection[1] === 'Project' ? 'project' : 'personal',\n };\n }\n\n // Older approvals only carried the account email.\n const account = /^Connection:.*?([^\\s<>]+@[^\\s<>]+)\\s*$/m.exec(query)?.[1];\n\n return { action, app, account };\n}\n\nfunction getChatActionTitle(approval: AutomationApproval): string {\n const pluginAction = getChatPluginAction(approval);\n\n if (pluginAction) {\n return `${pluginAction.action.charAt(0).toUpperCase()}${pluginAction.action.slice(1)} in ${pluginAction.app}`;\n }\n\n if (approval.kind === 'exec') {\n return 'Run a sandbox command';\n }\n\n if (approval.kind === 'schema') {\n return approval.operationsSummary.replace(/^Schema: /, '');\n }\n\n return approval.kind === 'plugin' ? 'Use a connected app' : approval.operationsSummary;\n}\n\n\nfunction SchemaRowsTable({ operation }: { operation: AutomationApprovalPreviewOperation }): JSX.Element | null {\n if (operation.rows.length === 0) {\n return null;\n }\n\n const isSet = (value: unknown): boolean => value !== null && value !== undefined && value !== false;\n // Hide columns no row sets; in a change table also hide columns no row changes.\n const shownColumns = operation.columns.filter((column) => {\n const anySet = operation.rows.some((row) => isSet(row.before?.[column]) || isSet(row.after?.[column]));\n\n if (!anySet) return false;\n if (operation.kind !== 'update') return true;\n\n return operation.rows.some((row) => formatCellValue(row.before?.[column]) !== formatCellValue(row.after?.[column]));\n });\n\n return (\n <div className=\"fk:overflow-x-auto fk:rounded-md fk:border fk:border-border fk:corner-squircle\">\n <Table className=\"fk:text-xs\">\n <TableHeader>\n <TableRow>\n <TableHead className=\"fk:h-8\">{operation.entity === 'scopes' || operation.entity === 'spaces' || operation.entity === 'studio' ? 'Setting' : 'Attribute'}</TableHead>\n {shownColumns.map((column) => (\n <TableHead className=\"fk:h-8\" key={column}>\n {column}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {operation.rows.map((row, index) => (\n <TableRow key={row.id ?? index.toString()}>\n <TableCell className=\"fk:py-1.5 fk:font-mono fk:text-[0.7rem]\">\n {operation.kind === 'delete' ? <span className=\"fk:line-through fk:text-destructive\">{row.id}</span> : row.id}\n {operation.kind === 'update' && row.before === null ? (\n <Badge className=\"fk:ml-2\" variant=\"secondary\">\n new\n </Badge>\n ) : null}\n {operation.kind === 'update' && row.after === null ? (\n <Badge className=\"fk:ml-2\" variant=\"destructive\">\n removed\n </Badge>\n ) : null}\n </TableCell>\n {shownColumns.map((column) => (\n <TableCell className=\"fk:py-1.5\" key={column}>\n {operation.kind === 'create' ? (\n <span>{formatCellValue(row.after?.[column])}</span>\n ) : operation.kind === 'delete' ? (\n <span className=\"fk:text-muted-foreground\">{formatCellValue(row.before?.[column])}</span>\n ) : (\n <DiffCell after={row.after?.[column]} before={row.before?.[column]} />\n )}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n );\n}\n\nfunction getSchemaOperationTitle(operation: AutomationApprovalPreviewOperation): string {\n const entity = operation.entity ?? 'schema';\n\n if (entity === 'scopes' || entity === 'spaces' || entity === 'studio') {\n return `Change ${entity === 'studio' ? 'Studio settings' : entity}`;\n }\n\n if (operation.kind === 'create') {\n return `Add entity ${entity} · ${operation.rows.length.toString()} attribute${operation.rows.length === 1 ? '' : 's'}`;\n }\n\n if (operation.kind === 'delete') {\n return `Remove entity ${entity}`;\n }\n\n return `Change entity ${entity}`;\n}\n\n/** Review card body for agent-proposed schema deployments. */\nfunction SchemaChangePreview({ preview }: { preview: NonNullable<AutomationApproval['preview']> }): JSX.Element {\n const summary = preview.schema;\n\n return (\n <div className=\"fk:space-y-4\">\n {summary && summary.breakingChanges.length > 0 ? (\n <div className=\"fk:rounded-md fk:border fk:border-destructive/30 fk:bg-destructive/5 fk:p-3 fk:text-sm fk:corner-squircle\">\n <div className=\"fk:mb-1 fk:flex fk:items-center fk:gap-2 fk:font-medium fk:text-destructive\">\n <TriangleAlertIcon className=\"fk:size-4\" />\n Breaking changes: existing data becomes inaccessible\n </div>\n <ul className=\"fk:list-disc fk:pl-5 fk:text-destructive\">\n {summary.breakingChanges.map((change) => (\n <li key={change}>{change}</li>\n ))}\n </ul>\n </div>\n ) : null}\n {summary && summary.warnings.length > 0 ? (\n <div className=\"fk:rounded-md fk:border fk:border-amber-500/40 fk:bg-amber-500/10 fk:p-3 fk:text-sm fk:corner-squircle\">\n <ul className=\"fk:list-disc fk:pl-5\">\n {summary.warnings.map((warning) => (\n <li key={warning}>{warning}</li>\n ))}\n </ul>\n </div>\n ) : null}\n {preview.operations.map((operation, index) => (\n <div className=\"fk:space-y-2\" key={`${operation.entity ?? ''}-${index.toString()}`}>\n <div className={`fk:text-sm fk:font-medium ${operation.kind === 'delete' ? 'fk:text-destructive' : ''}`}>\n {getSchemaOperationTitle(operation)}\n </div>\n <SchemaRowsTable operation={operation} />\n </div>\n ))}\n {preview.operations.length === 0 ? (\n <div className=\"fk:rounded-md fk:border fk:border-dashed fk:p-3 fk:text-xs fk:text-muted-foreground fk:corner-squircle\">\n No visible entity changes. Review the operations below.\n </div>\n ) : null}\n </div>\n );\n}\n\n/** Fields the card syncs from parent props; ignores object identity from SWR. */\nfunction isSameApprovalSnapshot(left: AutomationApproval, right: AutomationApproval): boolean {\n return (\n left.id === right.id &&\n left.status === right.status &&\n left.decidedAt === right.decidedAt &&\n left.decidedBy === right.decidedBy &&\n left.executedAt === right.executedAt &&\n left.error === right.error &&\n left.reason === right.reason &&\n left.expiresAt === right.expiresAt &&\n left.operationsSummary === right.operationsSummary &&\n left.affectedCount === right.affectedCount &&\n JSON.stringify(left.preview) === JSON.stringify(right.preview)\n );\n}\n\nfunction useApprovalDecision({\n api,\n approval: initialApproval,\n onDecided,\n}: {\n api: ApiClient;\n approval: AutomationApproval;\n onDecided?: (_approval: AutomationApproval) => void;\n}): {\n approval: AutomationApproval;\n decide: (_options: { approved: boolean; force?: boolean; reason?: string; remember?: boolean }) => void;\n errorMessage: string;\n isDeciding: boolean;\n isPending: boolean;\n isRejectDialogOpen: boolean;\n isStale: boolean;\n rejectReason: string;\n setIsRejectDialogOpen: (_open: boolean) => void;\n setRejectReason: (_reason: string) => void;\n} {\n const [approval, setApproval] = useState(initialApproval);\n // Keep local state for decide() responses, but adopt fresher parent data when\n // list polling / SWR revalidation replaces the prop with meaningfully new\n // data (e.g. refreshed preview while still pending). Never regress a local\n // decision back to pending — mutate/revalidation can briefly return stale\n // pending rows. Do not clear isStale here: a reference-only revalidation\n // must not drop the stale-preview banner / \"Approve anyway\" (force) path.\n const [prevInitialApproval, setPrevInitialApproval] = useState(initialApproval);\n const [errorMessage, setErrorMessage] = useState('');\n const [isDeciding, startDecideTransition] = useTransition();\n const [isRejectDialogOpen, setIsRejectDialogOpen] = useState(false);\n const [isStale, setIsStale] = useState(false);\n const [rejectReason, setRejectReason] = useState('');\n const revalidateApprovalsCount = useRevalidateApprovalsCount();\n\n if (initialApproval !== prevInitialApproval) {\n setPrevInitialApproval(initialApproval);\n\n if (!isSameApprovalSnapshot(initialApproval, prevInitialApproval)) {\n const wouldRegressDecision =\n approval.id === initialApproval.id && approval.status !== 'pending' && initialApproval.status === 'pending';\n\n if (!wouldRegressDecision) {\n setApproval(initialApproval);\n }\n }\n }\n\n function applyResult(nextApproval: AutomationApproval): void {\n setApproval(nextApproval);\n // The sidebar badge counts pending approvals; a decision changes it now.\n revalidateApprovalsCount();\n\n // An approved schema change deploys in the background; refresh the\n // project schema when it lands, wherever the approval came from.\n if (nextApproval.kind === 'schema' && nextApproval.status === 'approved') {\n watchSchemaDeployment({\n approvalId: nextApproval.id,\n approvalUrl: paths(nextApproval.projectId).approval(nextApproval.id),\n projectId: nextApproval.projectId,\n });\n }\n\n onDecided?.(nextApproval);\n }\n\n function decide({\n approved,\n force = false,\n reason,\n remember = false,\n }: {\n approved: boolean;\n force?: boolean;\n reason?: string;\n remember?: boolean;\n }): void {\n startDecideTransition(async () => {\n setErrorMessage('');\n\n try {\n const result = await api.decideApproval(approval.id, { approved, force, reason, remember });\n\n if (result.errorCode === 'stale_preview') {\n setIsStale(true);\n\n if (result.approval) {\n setApproval(result.approval);\n }\n\n return;\n }\n\n setIsStale(false);\n setIsRejectDialogOpen(false);\n\n if (result.approval) {\n applyResult(result.approval);\n } else if (result.success) {\n // Successful decide omitted the payload — exit pending using the\n // decision we just submitted (the server accepted it).\n applyResult({\n ...approval,\n decidedAt: approval.decidedAt ?? new Date().toISOString(),\n reason: reason ?? approval.reason,\n status: approved ? 'approved' : 'rejected',\n });\n } else if (result.errorCode === 'already_decided') {\n // Never invent a status from the click — the real decision may differ.\n // Ask the parent to revalidate so the true approval can load.\n onDecided?.(approval);\n }\n\n // When already_decided includes an approval, the badge reflects truth.\n // Otherwise surface the server message (including already_decided\n // without a payload). errorMessage may be omitted on some 400 bodies.\n if (!result.success && (result.errorCode !== 'already_decided' || !result.approval)) {\n const message = Array.isArray(result.errorMessage) ? result.errorMessage.join(', ') : result.errorMessage;\n\n setErrorMessage(message || 'Failed to submit the decision.');\n }\n } catch (error) {\n setErrorMessage(error instanceof Error ? error.message : 'Failed to submit the decision.');\n }\n });\n }\n\n return {\n approval,\n decide,\n errorMessage,\n isDeciding,\n isPending: approval.status === 'pending',\n isRejectDialogOpen,\n isStale,\n rejectReason,\n setIsRejectDialogOpen,\n setRejectReason,\n };\n}\n\nfunction ApprovalDecisionActions({\n allowRemember = false,\n askForRejectionReason,\n decide,\n isDeciding,\n isRejectDialogOpen,\n isStale,\n rejectReason,\n setIsRejectDialogOpen,\n setRejectReason,\n variant,\n}: {\n /** Offer \"always allow this tool for this automation\" alongside Approve. */\n allowRemember?: boolean;\n askForRejectionReason: boolean;\n decide: (_options: { approved: boolean; force?: boolean; reason?: string; remember?: boolean }) => void;\n isDeciding: boolean;\n isRejectDialogOpen: boolean;\n isStale: boolean;\n rejectReason: string;\n setIsRejectDialogOpen: (_open: boolean) => void;\n setRejectReason: (_reason: string) => void;\n variant: 'header' | 'inline';\n}): JSX.Element {\n const isHeader = variant === 'header';\n const buttonClassName = isHeader ? 'fk:px-8 fk:min-w-32' : undefined;\n const buttonSize = isHeader ? 'default' : 'sm';\n const [remember, setRemember] = useState(false);\n const rememberId = useId();\n\n return (\n <>\n <div className=\"fk:flex fk:flex-nowrap fk:items-center fk:gap-2\">\n <Button\n className={buttonClassName}\n disabled={isDeciding}\n size={buttonSize}\n onClick={() => decide({ approved: true, force: isStale, remember: allowRemember && remember })}\n >\n {isDeciding ? <LoaderCircle className=\"fk:size-4 fk:animate-spin\" /> : <CheckIcon className=\"fk:size-4\" />}\n {isStale ? 'Approve anyway' : 'Approve'}\n </Button>\n <Button\n className={buttonClassName}\n disabled={isDeciding}\n size={buttonSize}\n variant=\"outline\"\n onClick={() => {\n if (askForRejectionReason) {\n setRejectReason('');\n setIsRejectDialogOpen(true);\n } else {\n decide({ approved: false });\n }\n }}\n >\n <XIcon className=\"fk:size-4\" />\n Reject\n </Button>\n {allowRemember ? (\n <label\n className=\"fk:ml-1 fk:flex fk:cursor-pointer fk:items-center fk:gap-1.5 fk:whitespace-nowrap fk:text-xs fk:text-muted-foreground\"\n htmlFor={rememberId}\n >\n <Checkbox checked={remember} id={rememberId} onCheckedChange={(checked) => setRemember(checked === true)} />\n Always allow this tool for this automation\n </label>\n ) : null}\n </div>\n\n {askForRejectionReason ? (\n <Dialog open={isRejectDialogOpen} onOpenChange={setIsRejectDialogOpen}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Reject this proposal?</DialogTitle>\n <DialogDescription>\n The mutation will not be executed. The agent receives your reason and can adapt its plan.\n </DialogDescription>\n </DialogHeader>\n <Textarea\n placeholder=\"Optional reason for the agent...\"\n value={rejectReason}\n onChange={(event) => setRejectReason(event.target.value)}\n />\n <DialogFooter>\n <Button disabled={isDeciding} size=\"sm\" variant=\"outline\" onClick={() => setIsRejectDialogOpen(false)}>\n Cancel\n </Button>\n <Button\n disabled={isDeciding}\n size=\"sm\"\n variant=\"destructive\"\n onClick={() => decide({ approved: false, reason: rejectReason.trim() || undefined })}\n >\n {isDeciding ? (\n <LoaderCircle className=\"fk:size-4 fk:animate-spin\" />\n ) : (\n <ArrowRightIcon className=\"fk:size-4\" />\n )}\n Reject proposal\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n ) : null}\n </>\n );\n}\n\nfunction ApprovalCardBody({\n approval,\n chat,\n errorMessage,\n isPending,\n isStale,\n}: {\n approval: AutomationApproval;\n chat: boolean;\n errorMessage: string;\n isPending: boolean;\n isStale: boolean;\n}): JSX.Element {\n const { preview } = approval;\n const pluginAction = chat ? getChatPluginAction(approval) : null;\n\n return (\n // min-w-0 lets the card shrink inside flex/grid parents (e.g. DrawerModal)\n // so wide preview tables scroll inside their own container instead of\n // stretching the layout.\n <div className=\"fk:min-w-0 fk:max-w-full fk:space-y-4\">\n <div className=\"fk:flex fk:flex-wrap fk:items-center fk:gap-2\">\n <ApprovalStatusBadge status={approval.status} />\n {approval.kind === 'schema' ? <Badge variant=\"outline\">Schema change</Badge> : null}\n <span className=\"fk:text-sm fk:font-medium\">\n {chat ? getChatActionTitle(approval) : approval.operationsSummary}\n </span>\n </div>\n <div className=\"fk:text-xs fk:text-muted-foreground\">\n {approval.automationName ? `${approval.automationName} · ` : ''}\n requested {formatDistance(new Date(approval.requestedAt), new Date(), { addSuffix: true })}\n {isPending ? ` · expires ${formatDistance(new Date(approval.expiresAt), new Date(), { addSuffix: true })}` : ''}\n {approval.decidedAt ? ` · decided ${format(new Date(approval.decidedAt), 'PPpp')}` : ''}\n </div>\n\n {isStale ? (\n <div className=\"fk:flex fk:items-start fk:gap-2 fk:rounded-md fk:border fk:border-amber-500/40 fk:bg-amber-500/10 fk:p-3 fk:text-sm fk:corner-squircle\">\n <TriangleAlertIcon className=\"fk:mt-0.5 fk:size-4 fk:shrink-0 fk:text-amber-600\" />\n <span>\n The affected data changed since this proposal was created. The preview below has been refreshed — review it\n and approve again to proceed.\n </span>\n </div>\n ) : null}\n\n {approval.kind === 'schema' && preview ? (\n <SchemaChangePreview preview={preview} />\n ) : preview && preview.operations.length > 0 ? (\n <div className=\"fk:space-y-4\">\n {preview.operations.map((operation, index) => (\n <div className=\"fk:space-y-2\" key={index.toString()}>\n <div className=\"fk:text-sm fk:font-medium\">{getOperationTitle(operation)}</div>\n {operation.kind === 'delete' && operation.affectedCount !== null ? (\n <div className=\"fk:rounded-md fk:border fk:border-destructive/30 fk:bg-destructive/5 fk:p-3 fk:text-sm fk:text-destructive fk:corner-squircle\">\n {operation.affectedCount.toString()} record{operation.affectedCount === 1 ? '' : 's'} will be\n permanently deleted.\n </div>\n ) : null}\n <OperationPreviewTable operation={operation} />\n {operation.truncated ? (\n <div className=\"fk:text-xs fk:text-muted-foreground\">\n Preview limited to the first {operation.rows.length.toString()} rows.\n </div>\n ) : null}\n </div>\n ))}\n </div>\n ) : (\n <div className=\"fk:rounded-md fk:border fk:border-dashed fk:p-3 fk:text-xs fk:text-muted-foreground fk:corner-squircle\">\n {chat\n ? pluginAction\n ? `This action uses ${pluginAction.scope === 'project' ? \"the project's\" : 'your'} ${pluginAction.app} account${pluginAction.account ? ` (${pluginAction.account})` : ''}. Check the details before deciding.`\n : 'The assistant wants to make this change. Check the details before deciding.'\n : approval.kind === 'plugin'\n ? 'Review the account, tool, and arguments before allowing this external call.'\n : approval.kind === 'exec'\n ? 'This command runs inside the run\\'s ephemeral sandbox but may send data out or reach other hosts. Review the command line before allowing it.'\n : 'No structured preview is available for this proposal. Review the raw GraphQL documents below.'}\n </div>\n )}\n\n <OperationDocuments\n chat={chat}\n operations={approval.operations}\n plugin={approval.kind === 'plugin' || approval.kind === 'exec'}\n title={approval.kind === 'exec' ? 'Command and options' : approval.kind === 'schema' ? 'Operations' : undefined}\n />\n\n {approval.reason ? (\n <div className=\"fk:text-sm\">\n <span className=\"fk:font-medium\">Reason:</span> {approval.reason}\n </div>\n ) : null}\n {approval.error ? (\n <div className=\"fk:rounded-md fk:border fk:border-destructive/30 fk:bg-destructive/5 fk:p-3 fk:text-sm fk:corner-squircle\">\n Execution failed: {approval.error}\n </div>\n ) : null}\n {approval.executedAt && !approval.error ? (\n <div className=\"fk:flex fk:items-center fk:gap-2 fk:text-sm fk:text-success\">\n <CheckIcon className=\"fk:size-4\" />\n Executed {format(new Date(approval.executedAt), 'PPpp')}\n </div>\n ) : null}\n {errorMessage ? <div className=\"fk:text-sm fk:text-destructive\">{errorMessage}</div> : null}\n </div>\n );\n}\n\nexport function ApprovalCard({\n api,\n approval: initialApproval,\n chat,\n onDecided,\n}: {\n api: ApiClient;\n approval: AutomationApproval;\n chat: boolean;\n onDecided?: (_approval: AutomationApproval) => void;\n}): JSX.Element {\n const {\n approval,\n decide,\n errorMessage,\n isDeciding,\n isPending,\n isRejectDialogOpen,\n isStale,\n rejectReason,\n setIsRejectDialogOpen,\n setRejectReason,\n } = useApprovalDecision({ api, approval: initialApproval, onDecided });\n\n return (\n <>\n <ApprovalCardBody\n approval={approval}\n chat={chat}\n errorMessage={errorMessage}\n isPending={isPending}\n isStale={isStale}\n />\n {isPending ? (\n <div className=\"fk:mt-4\">\n <ApprovalDecisionActions\n allowRemember={!chat && approval.kind === 'plugin' && Boolean(approval.automationId)}\n askForRejectionReason={!chat}\n decide={decide}\n isDeciding={isDeciding}\n isRejectDialogOpen={isRejectDialogOpen}\n isStale={isStale}\n rejectReason={rejectReason}\n setIsRejectDialogOpen={setIsRejectDialogOpen}\n setRejectReason={setRejectReason}\n variant=\"inline\"\n />\n </div>\n ) : null}\n </>\n );\n}\n\nexport function ApprovalDrawer({\n api,\n approval: initialApproval,\n onClose,\n onDecided,\n}: {\n api: ApiClient;\n approval: AutomationApproval;\n onClose: () => void;\n onDecided?: (_approval: AutomationApproval) => void;\n}): JSX.Element {\n const {\n approval,\n decide,\n errorMessage,\n isDeciding,\n isPending,\n isRejectDialogOpen,\n isStale,\n rejectReason,\n setIsRejectDialogOpen,\n setRejectReason,\n } = useApprovalDecision({ api, approval: initialApproval, onDecided });\n\n return (\n <DrawerModal\n actions={\n isPending ? (\n <ApprovalDecisionActions\n allowRemember={approval.kind === 'plugin' && Boolean(approval.automationId)}\n askForRejectionReason\n decide={decide}\n isDeciding={isDeciding}\n isRejectDialogOpen={isRejectDialogOpen}\n isStale={isStale}\n rejectReason={rejectReason}\n setIsRejectDialogOpen={setIsRejectDialogOpen}\n setRejectReason={setRejectReason}\n variant=\"header\"\n />\n ) : null\n }\n depth={0}\n isFocused\n onClose={onClose}\n title=\"Mutation proposal\"\n >\n <ApprovalCardBody\n approval={approval}\n chat={false}\n errorMessage={errorMessage}\n isPending={isPending}\n isStale={isStale}\n />\n </DrawerModal>\n );\n}\n","/**\n * Pure helpers behind the transient status line shown while an agent turn or\n * automation run is in flight. Kept free of React and UI imports so the\n * label heuristics can be unit-tested in isolation.\n */\nimport type { ReplayDataParts, ReplayMessage, ReplayMessagePart } from './replay';\n\nexport const STATUS_LABEL_MAX_LENGTH = 72;\n\nexport const JEV_APPROVAL_REASON_PREFIX = 'Approved by Flexkit Jev policy';\nexport const TOOL_ALLOW_RULE_REASON_PREFIX = 'Approved by automation tool allow rule';\n\nconst ROLLING_STATUS_PART_TYPES = new Set<string>([\n 'data-create-sandbox',\n 'data-execute-graphql',\n 'data-load-skill',\n 'data-plan',\n 'data-plugin-call',\n 'data-run-command',\n 'data-search-schema',\n 'data-update-memory',\n 'data-validate-graphql',\n 'data-web-search',\n]);\n\n/**\n * These tool events are surfaced as a single transient status line while the\n * call is in flight (see `RollingStatusText`) instead of persistent cards.\n */\nexport function isRollingStatusPartType(type: string): boolean {\n return ROLLING_STATUS_PART_TYPES.has(type);\n}\n\nexport function getPartData<T>(part: ReplayMessagePart): T {\n return (part as { data: T }).data;\n}\n\n/** Plugin calls cleared without asking anyone (Jev or an allow rule): the replay shows nothing for them. */\nexport function isJevAutoApproved(message: ReplayDataParts['mutation-approval']): boolean {\n return (\n !message.decidedBy &&\n Boolean(\n message.reason?.startsWith(JEV_APPROVAL_REASON_PREFIX) || message.reason?.startsWith(TOOL_ALLOW_RULE_REASON_PREFIX)\n )\n );\n}\n\nexport function truncateLabel(text: string, maxLength = STATUS_LABEL_MAX_LENGTH): string {\n const trimmed = text.trim();\n\n if (trimmed.length <= maxLength) {\n return trimmed;\n }\n\n const cut = trimmed.slice(0, maxLength);\n const lastSpace = cut.lastIndexOf(' ');\n const wordBoundary = lastSpace >= Math.floor(maxLength * 0.6) ? cut.slice(0, lastSpace) : cut;\n\n return `${wordBoundary.trimEnd()}…`;\n}\n\nexport function stripInlineMarkdown(text: string): string {\n return text\n .replace(/^#{1,6}\\s+/, '')\n .replace(/^(?:[-*+]|\\d+[.)])\\s+/, '')\n .replace(/!?\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1')\n .replace(/(\\*\\*|__)(.*?)\\1/g, '$2')\n .replace(/(\\*|_)(.*?)\\1/g, '$2')\n .replace(/`([^`]*)`/g, '$1')\n .replace(/[*_`#>]/g, '')\n .replace(/\\s+/g, ' ')\n .trim()\n .replace(/[.:]+$/, '');\n}\n\n/**\n * The prefix of a streaming reasoning text that will not change anymore: up to\n * the later of the last line break and the last sentence terminator followed\n * by whitespace. Empty when no boundary has been reached yet.\n */\nexport function getCommittedReasoningText(text: string): string {\n const lastNewline = text.lastIndexOf('\\n');\n let lastSentence = -1;\n const sentenceEnd = /[.!?](?=\\s)/g;\n let match: RegExpExecArray | null;\n\n while ((match = sentenceEnd.exec(text)) !== null) {\n lastSentence = match.index;\n }\n\n const boundary = Math.max(lastNewline, lastSentence);\n\n if (boundary < 0) {\n return '';\n }\n\n return text.slice(0, boundary + 1);\n}\n\n/**\n * One-line label for a reasoning part: the heading or first sentence of the\n * latest committed paragraph. Updates only at line/sentence boundaries so the\n * status line does not flicker on every token.\n */\nexport function getReasoningStatusLabel(text: string, options: { streaming: boolean }): string | null {\n const committed = options.streaming ? getCommittedReasoningText(text) : text;\n const lines = committed\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean);\n const last = lines[lines.length - 1];\n\n if (!last) {\n return null;\n }\n\n const heading = /^\\*\\*(.+?)\\*\\*:?$/.exec(last)?.[1] ?? /^#{1,6}\\s+(.+)$/.exec(last)?.[1];\n const candidate = heading ?? /^(.+?[.!?])(?:\\s|$)/.exec(last)?.[1] ?? last;\n const plain = stripInlineMarkdown(candidate);\n\n if (!plain || /^reasoning$/i.test(plain)) {\n return null;\n }\n\n return truncateLabel(plain);\n}\n\nfunction humanizeToolName(tool: string): string {\n return tool.replace(/[_-]+/g, ' ').trim();\n}\n\n/** Gerund label for a rolling-status part, or null once the call concluded. */\nexport function getRollingStatusLabel(part: ReplayMessagePart): string | null {\n if (part.type === 'data-load-skill') {\n const data = getPartData<ReplayDataParts['load-skill']>(part);\n\n if (data.status !== 'loading') {\n return null;\n }\n\n return data.skillName ? truncateLabel(`Loading skill \"${data.skillName}\"`) : 'Loading skill';\n }\n\n if (part.type === 'data-search-schema') {\n const data = getPartData<ReplayDataParts['search-schema']>(part);\n\n return data.status === 'loading' ? 'Searching schema' : null;\n }\n\n if (part.type === 'data-validate-graphql') {\n const data = getPartData<ReplayDataParts['validate-graphql']>(part);\n\n return data.status === 'loading' ? 'Validating GraphQL query' : null;\n }\n\n if (part.type === 'data-execute-graphql') {\n const data = getPartData<ReplayDataParts['execute-graphql']>(part);\n\n if (data.status !== 'loading') {\n return null;\n }\n\n return data.operationType === 'mutation' ? 'Executing GraphQL mutation' : 'Executing GraphQL query';\n }\n\n if (part.type === 'data-update-memory') {\n const data = getPartData<ReplayDataParts['update-memory']>(part);\n\n return data.status === 'loading' ? 'Updating memory' : null;\n }\n\n if (part.type === 'data-web-search') {\n const data = getPartData<ReplayDataParts['web-search']>(part);\n\n if (data.status !== 'loading') {\n return null;\n }\n\n return data.query ? truncateLabel(`Searching the web for \"${data.query}\"`) : 'Searching the web';\n }\n\n if (part.type === 'data-run-command') {\n const data = getPartData<ReplayDataParts['run-command']>(part);\n\n if (!['executing', 'running', 'waiting'].includes(data.status)) {\n return null;\n }\n\n return truncateLabel(`Running ${[data.command, ...data.args].join(' ')}`);\n }\n\n if (part.type === 'data-create-sandbox') {\n const data = getPartData<ReplayDataParts['create-sandbox']>(part);\n\n return data.status === 'loading' ? 'Creating sandbox' : null;\n }\n\n if (part.type === 'data-plugin-call') {\n const data = getPartData<ReplayDataParts['plugin-call']>(part);\n\n if (data.status !== 'loading') {\n return null;\n }\n\n return truncateLabel(`Calling ${data.pluginId}: ${humanizeToolName(data.tool)}`);\n }\n\n if (part.type === 'data-subtask') {\n const data = getPartData<ReplayDataParts['subtask']>(part);\n\n return data.status === 'running' ? truncateLabel(`Running subtask: ${data.title}`) : null;\n }\n\n return null;\n}\n\n/** Error text for a failed rolling-status part, or null when it did not fail. */\n/**\n * Schema lookups and GraphQL validation or query failures are the agent's own\n * missteps: it reads the error and corrects the next call. Showing them would\n * only tell the user about a problem they cannot act on.\n */\nconst AGENT_INTERNAL_ERROR_PART_TYPES = new Set<string>(['data-execute-graphql', 'data-search-schema', 'data-validate-graphql']);\n\nexport function getRollingStatusError(part: ReplayMessagePart): string | null {\n if (!isRollingStatusPartType(part.type) || part.type === 'data-plan' || AGENT_INTERNAL_ERROR_PART_TYPES.has(part.type)) {\n return null;\n }\n\n const data = getPartData<{ status: string; error?: { message?: string } } & { [key: string]: unknown }>(part);\n\n if (data.status !== 'error') {\n return null;\n }\n\n if (data.error?.message) {\n return data.error.message;\n }\n\n switch (part.type) {\n case 'data-web-search':\n return 'Failed to search the web';\n case 'data-run-command':\n return `Command failed: ${String(data.command ?? '')}`.trim();\n case 'data-create-sandbox':\n return 'Failed to create sandbox';\n case 'data-load-skill':\n return 'Failed to load skill';\n case 'data-update-memory':\n return 'Failed to update memory';\n case 'data-plugin-call':\n return `Plugin call failed: ${String(data.pluginId ?? '')}: ${humanizeToolName(String(data.tool ?? ''))}`;\n default:\n return 'The tool call failed';\n }\n}\n\n/**\n * Parts that never render in the conversation: they either feed the transient\n * status line, are internal bookkeeping, or were cleared without anyone being\n * asked. Failed calls stay visible so the user learns what went wrong.\n */\nexport function isHiddenReplayPart(part: ReplayMessagePart): boolean {\n if (part.type === 'step-start' || part.type === 'reasoning') {\n return true;\n }\n\n if (isRollingStatusPartType(part.type)) {\n return getRollingStatusError(part) === null;\n }\n\n if (part.type === 'data-mutation-approval') {\n const data = getPartData<ReplayDataParts['mutation-approval']>(part);\n\n return isJevAutoApproved(data) && data.status !== 'error';\n }\n\n return false;\n}\n\n/**\n * Label describing what the agent is doing right now, derived from the tail\n * of the stream: streaming reasoning, a pending approval, or an in-flight\n * tool call. Null when nothing specific is known (callers show \"Thinking\").\n */\n/** \"Step 2 of 5: Fetch threads\" from the latest plan part, if one has an in-progress step. */\nexport function getPlanStatusLabel(message: ReplayMessage | undefined): string | null {\n if (!message) {\n return null;\n }\n\n for (let index = message.parts.length - 1; index >= 0; index--) {\n const part = message.parts[index];\n\n if (part?.type !== 'data-plan') {\n continue;\n }\n\n const data = getPartData<ReplayDataParts['plan']>(part);\n const current = data.steps.findIndex((step) => step.status === 'in_progress');\n\n if (current < 0) {\n return null;\n }\n\n return truncateLabel(`Step ${(current + 1).toString()} of ${data.steps.length.toString()}: ${data.steps[current]!.step}`);\n }\n\n return null;\n}\n\nexport function getLiveStatusLabel(message: ReplayMessage | undefined): string | null {\n if (!message) {\n return null;\n }\n\n for (let index = message.parts.length - 1; index >= 0; index--) {\n const part = message.parts[index];\n\n if (!part || part.type === 'step-start') {\n continue;\n }\n\n if (part.type === 'reasoning') {\n if (part.state === 'streaming') {\n return getReasoningStatusLabel(part.text, { streaming: true }) ?? getPlanStatusLabel(message);\n }\n\n return getPlanStatusLabel(message);\n }\n\n if (part.type === 'data-mutation-approval') {\n const data = getPartData<ReplayDataParts['mutation-approval']>(part);\n\n return data.status === 'pending' ? 'Awaiting approval' : getPlanStatusLabel(message);\n }\n\n if (part.type === 'text') {\n return null;\n }\n\n // A tool label beats the plan step while the tool runs; the plan fills the gaps.\n return getRollingStatusLabel(part) ?? getPlanStatusLabel(message);\n }\n\n return null;\n}\n","import type { AutomationApprovalStatus } from '@flexkit/agent-protocol';\nimport type { ReplayDataParts, ReplayMessage } from './replay';\nimport { getPartData } from './status-label';\n\n/** Decisions this client made or observed, by approval id, before the stream caught up. */\nexport type DecidedApprovals = { [approvalId: string]: AutomationApprovalStatus };\n\nexport function messageHasPendingMutationApproval(message: ReplayMessage | undefined): boolean {\n if (!message) {\n return false;\n }\n\n return message.parts.some((part) => {\n if (part.type !== 'data-mutation-approval') {\n return false;\n }\n\n return getPartData<ReplayDataParts['mutation-approval']>(part).status === 'pending';\n });\n}\n\n/**\n * Once the run record says execution resumed, a `pending` approval part in\n * the in-memory replay is stale. Parts whose decision this client knows are\n * patched to that status so the card stays mounted; unknown ones are dropped\n * until the rebuilt stream delivers their real status.\n */\nexport function settlePendingMutationApprovals(message: ReplayMessage, decided: DecidedApprovals = {}): ReplayMessage {\n let changed = false;\n const parts: ReplayMessage['parts'] = [];\n\n for (const part of message.parts) {\n if (part.type !== 'data-mutation-approval') {\n parts.push(part);\n continue;\n }\n\n const data = getPartData<ReplayDataParts['mutation-approval']>(part);\n\n if (data.status !== 'pending') {\n parts.push(part);\n continue;\n }\n\n changed = true;\n const status = decided[data.approvalId];\n\n if (status && status !== 'pending') {\n parts.push({ ...part, data: { ...data, status } } as typeof part);\n }\n }\n\n return changed ? { ...message, parts } : message;\n}\n\nexport function getMutationApprovalIds(\n message: ReplayMessage | undefined,\n options?: { pendingOnly?: boolean }\n): string[] {\n if (!message) {\n return [];\n }\n\n const approvalIds: string[] = [];\n const pendingOnly = options?.pendingOnly ?? false;\n\n for (const part of message.parts) {\n if (part.type !== 'data-mutation-approval') {\n continue;\n }\n\n const data = getPartData<ReplayDataParts['mutation-approval']>(part);\n\n if (pendingOnly && data.status !== 'pending') {\n continue;\n }\n\n approvalIds.push(data.approvalId);\n }\n\n return approvalIds;\n}\n\nexport function getPendingMutationApprovalIds(message: ReplayMessage | undefined): string[] {\n return getMutationApprovalIds(message, { pendingOnly: true });\n}\n","import type { JSX } from 'react';\nimport type { ComponentRegistry, ComponentRenderer, Spec } from '@json-render/react';\nimport { useEffect, useId, useMemo, useState } from 'react';\nimport { ActionProvider, Renderer, StateProvider, VisibilityProvider, buildSpecFromParts } from '@json-render/react';\nimport {\n AlertTriangleIcon,\n CheckCircle2Icon,\n InfoIcon,\n LightbulbIcon,\n MinusIcon,\n OctagonAlertIcon,\n TrendingDownIcon,\n TrendingUpIcon,\n XCircleIcon,\n} from 'lucide-react';\nimport {\n Bar,\n BarChart as RechartsBarChart,\n CartesianGrid,\n Cell,\n Line,\n LineChart as RechartsLineChart,\n Pie,\n PieChart as RechartsPieChart,\n ResponsiveContainer,\n Tooltip as RechartsTooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport {\n Badge,\n ExternalLink,\n Separator as SeparatorPrimitive,\n Skeleton as SkeletonPrimitive,\n Table as TablePrimitive,\n TableBody,\n TableCaption,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n Tabs as TabsPrimitive,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '../../ui';\n\n// ---------------------------------------------------------------------------\n// Layout components\n// ---------------------------------------------------------------------------\n\ninterface CardProps {\n centered: boolean | null;\n className: string | null;\n description: string | null;\n maxWidth: 'sm' | 'md' | 'lg' | 'full' | null;\n title: string | null;\n}\n\nconst cardMaxWidthClasses = {\n sm: 'fk:max-w-sm',\n md: 'fk:max-w-md',\n lg: 'fk:max-w-lg',\n full: 'fk:max-w-full',\n};\n\nconst Card: ComponentRenderer<CardProps> = ({ children, element }) => {\n const { props } = element;\n const maxWidthClass = props.maxWidth ? cardMaxWidthClasses[props.maxWidth] : '';\n const centeredClass = props.centered ? 'fk:mx-auto' : '';\n\n return (\n <div\n className={`fk:w-full fk:rounded-lg fk:border fk:border-border fk:bg-card fk:p-4 fk:gap-2 fk:flex fk:flex-col ${maxWidthClass} ${centeredClass} ${props.className ?? ''} fk:corner-squircle`}\n >\n {props.title && <div className=\"fk:text-sm fk:font-medium\">{props.title}</div>}\n {props.description && <div className=\"fk:mt-0.5 fk:text-xs fk:text-muted-foreground\">{props.description}</div>}\n {(props.title ?? props.description) && children ? <div className=\"fk:mt-3\" /> : null}\n {children}\n </div>\n );\n};\n\ninterface StackProps {\n align: 'start' | 'center' | 'end' | 'stretch' | null;\n className: string | null;\n direction: 'horizontal' | 'vertical' | null;\n gap: 'none' | 'sm' | 'md' | 'lg' | 'xl' | null;\n justify: 'start' | 'center' | 'end' | 'between' | 'around' | null;\n}\n\nconst stackGapClasses = {\n none: 'fk:gap-0',\n sm: 'fk:gap-2',\n md: 'fk:gap-3',\n lg: 'fk:gap-4',\n xl: 'fk:gap-6',\n};\n\nconst stackAlignClasses = {\n start: 'fk:items-start',\n center: 'fk:items-center',\n end: 'fk:items-end',\n stretch: 'fk:items-stretch',\n};\n\nconst stackJustifyClasses = {\n start: 'fk:justify-start',\n center: 'fk:justify-center',\n end: 'fk:justify-end',\n between: 'fk:justify-between',\n around: 'fk:justify-around',\n};\n\nconst Stack: ComponentRenderer<StackProps> = ({ children, element }) => {\n const { props } = element;\n const directionClass = props.direction === 'horizontal' ? 'fk:flex-row fk:flex-wrap' : 'fk:flex-col';\n const gapClass = stackGapClasses[props.gap ?? 'md'];\n const alignClass = props.align ? stackAlignClasses[props.align] : '';\n const justifyClass = props.justify ? stackJustifyClasses[props.justify] : '';\n\n return (\n <div\n className={`fk:flex fk:w-full ${directionClass} ${gapClass} ${alignClass} ${justifyClass} ${props.className ?? ''}`}\n >\n {children}\n </div>\n );\n};\n\ninterface GridProps {\n className: string | null;\n columns: number | null;\n gap: 'sm' | 'md' | 'lg' | 'xl' | null;\n}\n\nconst gridColumnClasses: { [columns: number]: string } = {\n 1: 'fk:grid-cols-1',\n 2: 'fk:grid-cols-2',\n 3: 'fk:grid-cols-3',\n 4: 'fk:grid-cols-4',\n 5: 'fk:grid-cols-5',\n 6: 'fk:grid-cols-6',\n};\n\nconst gridGapClasses = {\n sm: 'fk:gap-2',\n md: 'fk:gap-3',\n lg: 'fk:gap-4',\n xl: 'fk:gap-6',\n};\n\nconst Grid: ComponentRenderer<GridProps> = ({ children, element }) => {\n const { props } = element;\n const columnClass = gridColumnClasses[props.columns ?? 1] ?? 'fk:grid-cols-1';\n const gapClass = gridGapClasses[props.gap ?? 'md'];\n\n return <div className={`fk:grid fk:w-full ${columnClass} ${gapClass} ${props.className ?? ''}`}>{children}</div>;\n};\n\nconst Separator: ComponentRenderer<{ orientation: 'horizontal' | 'vertical' | null }> = ({ element }) => (\n <SeparatorPrimitive orientation={element.props.orientation ?? 'horizontal'} />\n);\n\n// ---------------------------------------------------------------------------\n// Typography and content components\n// ---------------------------------------------------------------------------\n\ninterface HeadingProps {\n level: 'h1' | 'h2' | 'h3' | 'h4' | null;\n text: string;\n}\n\nconst headingClasses = {\n h1: 'fk:text-xl fk:font-semibold fk:tracking-tight',\n h2: 'fk:text-lg fk:font-semibold fk:tracking-tight',\n h3: 'fk:text-base fk:font-medium',\n h4: 'fk:text-sm fk:font-medium',\n};\n\nconst Heading: ComponentRenderer<HeadingProps> = ({ element }) => {\n const level = element.props.level ?? 'h2';\n const HeadingTag = level;\n\n return <HeadingTag className={headingClasses[level]}>{element.props.text}</HeadingTag>;\n};\n\ninterface TextProps {\n text: string;\n variant: 'body' | 'muted' | 'caption' | 'lead' | 'code' | null;\n}\n\nconst textClasses = {\n body: 'fk:text-sm',\n muted: 'fk:text-sm fk:text-muted-foreground',\n caption: 'fk:text-xs fk:text-muted-foreground',\n lead: 'fk:text-base',\n code: 'fk:rounded fk:bg-muted fk:px-1 fk:py-0.5 fk:font-mono fk:text-xs fk:corner-squircle',\n};\n\nconst Text: ComponentRenderer<TextProps> = ({ element }) => (\n <p className={textClasses[element.props.variant ?? 'body']}>{element.props.text}</p>\n);\n\ninterface BadgeProps {\n text: string;\n variant: 'default' | 'secondary' | 'destructive' | 'outline' | null;\n}\n\nconst BadgeComponent: ComponentRenderer<BadgeProps> = ({ element }) => (\n <Badge variant={element.props.variant ?? 'default'}>{element.props.text}</Badge>\n);\n\ninterface AlertProps {\n message: string | null;\n title: string;\n type: 'success' | 'info' | 'warning' | 'error' | null;\n}\n\nfunction AlertIcon({ type }: { type: AlertProps['type'] }): JSX.Element {\n switch (type) {\n case 'success':\n return <CheckCircle2Icon className=\"fk:size-4 fk:translate-y-0.5\" />;\n case 'warning':\n return <AlertTriangleIcon className=\"fk:size-4 fk:translate-y-0.5\" />;\n case 'error':\n return <XCircleIcon className=\"fk:size-4 fk:translate-y-0.5\" />;\n default:\n return <InfoIcon className=\"fk:size-4 fk:translate-y-0.5\" />;\n }\n}\n\nconst Alert: ComponentRenderer<AlertProps> = ({ element }) => {\n const { props } = element;\n const typeClass = props.type === 'error' ? 'fk:border-destructive/50 fk:text-destructive' : 'fk:text-foreground';\n\n return (\n <div\n className={`fk:flex fk:w-full fk:gap-3 fk:rounded-lg fk:border fk:bg-card fk:px-4 fk:py-3 fk:text-sm ${typeClass} fk:corner-squircle`}\n role=\"alert\"\n >\n <AlertIcon type={props.type} />\n <div className=\"fk:min-w-0\">\n <div className=\"fk:font-medium\">{props.title}</div>\n {props.message && <div className=\"fk:text-muted-foreground\">{props.message}</div>}\n </div>\n </div>\n );\n};\n\ninterface TableProps {\n caption: string | null;\n columns: string[];\n rows: string[][];\n}\n\nconst Table: ComponentRenderer<TableProps> = ({ element }) => {\n const columns = element.props.columns ?? [];\n const rows = (element.props.rows ?? []).map((row) => row.map(String));\n\n return (\n <div className=\"fk:w-full fk:overflow-hidden fk:rounded-md fk:mt-2 fk:corner-squircle\">\n <TablePrimitive>\n {element.props.caption && <TableCaption>{element.props.caption}</TableCaption>}\n <TableHeader>\n <TableRow>\n {columns.map((column, index) => (\n <TableHead key={`${index.toString()}-${column}`}>{column}</TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((row, rowIndex) => (\n <TableRow key={rowIndex}>\n {row.map((cell, cellIndex) => (\n <TableCell key={cellIndex}>{cell}</TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </TablePrimitive>\n </div>\n );\n};\n\ninterface ProgressProps {\n label: string | null;\n max: number | null;\n value: number;\n}\n\nconst Progress: ComponentRenderer<ProgressProps> = ({ element }) => {\n const { props } = element;\n const max = props.max ?? 100;\n const percent = max > 0 ? Math.min(100, Math.max(0, (props.value / max) * 100)) : 0;\n\n return (\n <div className=\"fk:w-full\">\n {props.label && (\n <div className=\"fk:mb-1 fk:flex fk:items-center fk:justify-between fk:text-xs fk:text-muted-foreground\">\n <span>{props.label}</span>\n <span className=\"fk:tabular-nums\">{Math.round(percent)}%</span>\n </div>\n )}\n <div className=\"fk:h-2 fk:w-full fk:overflow-hidden fk:rounded-full fk:bg-secondary fk:corner-squircle\">\n <div className=\"fk:h-full fk:rounded-full fk:bg-primary fk:corner-squircle\" style={{ width: `${percent.toString()}%` }} />\n </div>\n </div>\n );\n};\n\nconst Skeleton: ComponentRenderer<{ height: string | null; rounded: boolean | null; width: string | null }> = ({\n element,\n}) => (\n <SkeletonPrimitive\n className={element.props.rounded ? 'fk:rounded-full fk:corner-squircle' : ''}\n style={{ height: element.props.height ?? '1rem', width: element.props.width ?? '100%' }}\n />\n);\n\nconst LinkComponent: ComponentRenderer<{ href: string; label: string }> = ({ element }) => (\n <ExternalLink href={element.props.href}>{element.props.label}</ExternalLink>\n);\n\nconst Image: ComponentRenderer<{\n alt: string;\n height: number | null;\n src: string | null;\n width: number | null;\n}> = ({ element }) => {\n if (!element.props.src) {\n return null;\n }\n\n return (\n <img\n alt={element.props.alt}\n className=\"fk:max-w-full fk:rounded-md fk:corner-squircle\"\n height={element.props.height ?? undefined}\n src={element.props.src}\n width={element.props.width ?? undefined}\n />\n );\n};\n\ninterface AccordionProps {\n items: { content: string; title: string }[];\n type: 'single' | 'multiple' | null;\n}\n\nconst Accordion: ComponentRenderer<AccordionProps> = ({ element }) => (\n <div className=\"fk:w-full fk:divide-y fk:divide-border fk:rounded-md fk:border fk:border-border fk:corner-squircle\">\n {(element.props.items ?? []).map((item, index) => (\n <details className=\"fk:group fk:px-4 fk:py-3\" key={index}>\n <summary className=\"fk:cursor-pointer fk:list-none fk:text-sm fk:font-medium\">{item.title}</summary>\n <p className=\"fk:mt-2 fk:text-sm fk:text-muted-foreground\">{item.content}</p>\n </details>\n ))}\n </div>\n);\n\n// ---------------------------------------------------------------------------\n// Tabs\n// ---------------------------------------------------------------------------\n\ninterface TabsProps {\n defaultValue: string | null;\n tabs: { label: string; value: string }[];\n value: string | null;\n}\n\nconst Tabs: ComponentRenderer<TabsProps> = ({ children, element }) => {\n const tabs = element.props.tabs ?? [];\n\n return (\n <TabsPrimitive defaultValue={element.props.value ?? element.props.defaultValue ?? tabs[0]?.value}>\n <TabsList>\n {tabs.map((tab) => (\n <TabsTrigger key={tab.value} value={tab.value}>\n {tab.label}\n </TabsTrigger>\n ))}\n </TabsList>\n {children}\n </TabsPrimitive>\n );\n};\n\nconst TabContent: ComponentRenderer<{ value: string }> = ({ children, element }) => (\n <TabsContent value={element.props.value}>{children}</TabsContent>\n);\n\n// ---------------------------------------------------------------------------\n// Result-focused components (Metric, Callout, Timeline)\n// ---------------------------------------------------------------------------\n\ninterface MetricProps {\n detail: string | null;\n label: string;\n trend: 'up' | 'down' | 'neutral' | null;\n value: string;\n}\n\nconst trendClasses = {\n up: 'fk:text-success',\n down: 'fk:text-destructive',\n neutral: 'fk:text-muted-foreground',\n};\n\nfunction TrendIcon({ trend }: { trend: 'up' | 'down' | 'neutral' }): JSX.Element {\n if (trend === 'up') {\n return <TrendingUpIcon className=\"fk:size-4\" />;\n }\n\n if (trend === 'down') {\n return <TrendingDownIcon className=\"fk:size-4\" />;\n }\n\n return <MinusIcon className=\"fk:size-4\" />;\n}\n\nconst Metric: ComponentRenderer<MetricProps> = ({ element }) => {\n const { props } = element;\n\n return (\n <div className=\"fk:w-full fk:rounded-lg fk:border fk:border-border fk:bg-card fk:p-4 fk:corner-squircle\">\n <div className=\"fk:text-xs fk:font-medium fk:text-muted-foreground\">{props.label}</div>\n <div className=\"fk:mt-1 fk:flex fk:items-center fk:gap-2\">\n <span className=\"fk:text-2xl fk:font-semibold fk:tabular-nums fk:tracking-tight\">{props.value}</span>\n {props.trend && (\n <span className={trendClasses[props.trend]}>\n <TrendIcon trend={props.trend} />\n </span>\n )}\n </div>\n {props.detail && <div className=\"fk:mt-1 fk:text-xs fk:text-muted-foreground\">{props.detail}</div>}\n </div>\n );\n};\n\ninterface CalloutProps {\n content: string;\n title: string | null;\n type: 'info' | 'tip' | 'warning' | 'important' | null;\n}\n\nconst calloutClasses = {\n info: 'fk:border-blue-500/30 fk:bg-blue-500/5 fk:text-blue-700 fk:dark:text-blue-400',\n tip: 'fk:border-emerald-500/30 fk:bg-emerald-500/5 fk:text-emerald-700 fk:dark:text-emerald-400',\n warning: 'fk:border-amber-500/30 fk:bg-amber-500/5 fk:text-amber-700 fk:dark:text-amber-400',\n important: 'fk:border-red-500/30 fk:bg-red-500/5 fk:text-red-700 fk:dark:text-red-400',\n};\n\nfunction CalloutIcon({ type }: { type: 'info' | 'tip' | 'warning' | 'important' }): JSX.Element {\n switch (type) {\n case 'tip':\n return <LightbulbIcon className=\"fk:size-4 fk:shrink-0 fk:translate-y-0.5\" />;\n case 'warning':\n return <AlertTriangleIcon className=\"fk:size-4 fk:shrink-0 fk:translate-y-0.5\" />;\n case 'important':\n return <OctagonAlertIcon className=\"fk:size-4 fk:shrink-0 fk:translate-y-0.5\" />;\n default:\n return <InfoIcon className=\"fk:size-4 fk:shrink-0 fk:translate-y-0.5\" />;\n }\n}\n\nconst Callout: ComponentRenderer<CalloutProps> = ({ element }) => {\n const { props } = element;\n const type = props.type ?? 'info';\n\n return (\n <div\n className={`fk:flex fk:w-full fk:gap-3 fk:rounded-lg fk:border fk:px-4 fk:py-3 fk:text-sm ${calloutClasses[type]} fk:corner-squircle`}\n >\n <CalloutIcon type={type} />\n <div className=\"fk:min-w-0\">\n {props.title && <div className=\"fk:font-medium\">{props.title}</div>}\n <div className=\"fk:text-foreground\">{props.content}</div>\n </div>\n </div>\n );\n};\n\ninterface TimelineProps {\n items: {\n date: string | null;\n description: string | null;\n status: 'completed' | 'current' | 'upcoming' | null;\n title: string;\n }[];\n}\n\nconst timelineDotClasses = {\n completed: 'fk:border-success fk:bg-success',\n current: 'fk:border-primary fk:bg-primary',\n upcoming: 'fk:border-border fk:bg-background',\n};\n\nconst Timeline: ComponentRenderer<TimelineProps> = ({ element }) => (\n <div className=\"fk:w-full\">\n {(element.props.items ?? []).map((item, index, items) => (\n <div className=\"fk:relative fk:flex fk:gap-3 fk:pb-4 fk:last:pb-0\" key={index}>\n {index < items.length - 1 && (\n <div className=\"fk:absolute fk:left-[5px] fk:top-4 fk:h-full fk:w-px fk:bg-border\" />\n )}\n <div\n className={`fk:mt-1 fk:size-[11px] fk:shrink-0 fk:rounded-full fk:border-2 ${timelineDotClasses[item.status ?? 'upcoming']} fk:corner-squircle`}\n />\n <div className=\"fk:min-w-0\">\n <div className=\"fk:flex fk:flex-wrap fk:items-baseline fk:gap-x-2\">\n <span className=\"fk:text-sm fk:font-medium\">{item.title}</span>\n {item.date && <span className=\"fk:text-xs fk:text-muted-foreground\">{item.date}</span>}\n </div>\n {item.description && <div className=\"fk:text-sm fk:text-muted-foreground\">{item.description}</div>}\n </div>\n </div>\n ))}\n </div>\n);\n\n// ---------------------------------------------------------------------------\n// Charts\n// ---------------------------------------------------------------------------\n\nconst CHART_COLORS = ['#6366f1', '#10b981', '#f59e0b', '#ef4444', '#06b6d4'];\n\nconst chartTooltipStyle = {\n background: 'hsl(var(--background))',\n border: '1px solid hsl(var(--border))',\n borderRadius: 6,\n color: 'hsl(var(--foreground))',\n fontSize: 12,\n};\n\nconst chartTooltipItemStyle = {\n color: 'hsl(var(--foreground))',\n};\n\nconst chartTooltipLabelStyle = {\n color: 'hsl(var(--foreground))',\n};\n\nconst chartTick = { fill: 'hsl(var(--muted-foreground))', fontSize: 11 };\n\ninterface ChartPoint {\n x: string;\n y: number;\n}\n\ninterface CartesianChartProps {\n aggregate: 'sum' | 'count' | 'avg' | null;\n color: string | null;\n data: { [key: string]: unknown }[];\n height: number | null;\n title: string | null;\n xKey: string;\n yKey: string;\n}\n\nfunction toNumber(value: unknown): number {\n const parsed = typeof value === 'number' ? value : Number(value);\n\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction getChartPoints(props: CartesianChartProps): ChartPoint[] {\n const data = props.data ?? [];\n\n if (!props.aggregate) {\n return data.map((row) => ({\n x: String(row[props.xKey] ?? ''),\n y: toNumber(row[props.yKey]),\n }));\n }\n\n const groups = new Map<string, { count: number; sum: number }>();\n\n for (const row of data) {\n const key = String(row[props.xKey] ?? '');\n const group = groups.get(key) ?? { count: 0, sum: 0 };\n\n group.count += 1;\n group.sum += toNumber(row[props.yKey]);\n groups.set(key, group);\n }\n\n return Array.from(groups.entries()).map(([x, group]) => {\n if (props.aggregate === 'count') {\n return { x, y: group.count };\n }\n\n if (props.aggregate === 'avg') {\n return { x, y: group.count === 0 ? 0 : group.sum / group.count };\n }\n\n return { x, y: group.sum };\n });\n}\n\nfunction ChartFrame({\n children,\n height,\n title,\n}: {\n children: JSX.Element;\n height: number | null;\n title: string | null;\n}): JSX.Element {\n return (\n <div className=\"fk:w-full\">\n {title && <div className=\"fk:mb-2 fk:text-sm fk:font-medium\">{title}</div>}\n <div style={{ height: height ?? 256 }}>\n <ResponsiveContainer height=\"100%\" width=\"100%\">\n {children}\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n\nconst BarChart: ComponentRenderer<CartesianChartProps> = ({ element }) => {\n const points = getChartPoints(element.props);\n const color = element.props.color ?? CHART_COLORS[0];\n\n return (\n <ChartFrame height={element.props.height} title={element.props.title}>\n <RechartsBarChart data={points}>\n <CartesianGrid stroke=\"hsl(var(--border))\" vertical={false} />\n <XAxis axisLine={false} dataKey=\"x\" tick={chartTick} tickLine={false} tickMargin={8} />\n <YAxis axisLine={false} tick={chartTick} tickLine={false} width={40} />\n <RechartsTooltip\n contentStyle={chartTooltipStyle}\n cursor={{ fill: 'hsl(var(--muted))' }}\n itemStyle={chartTooltipItemStyle}\n labelStyle={chartTooltipLabelStyle}\n />\n <Bar dataKey=\"y\" fill={color} isAnimationActive={false} name={element.props.yKey} radius={4} />\n </RechartsBarChart>\n </ChartFrame>\n );\n};\n\nconst LineChart: ComponentRenderer<CartesianChartProps> = ({ element }) => {\n const points = getChartPoints(element.props);\n const color = element.props.color ?? CHART_COLORS[0];\n\n return (\n <ChartFrame height={element.props.height} title={element.props.title}>\n <RechartsLineChart data={points}>\n <CartesianGrid stroke=\"hsl(var(--border))\" vertical={false} />\n <XAxis axisLine={false} dataKey=\"x\" tick={chartTick} tickLine={false} tickMargin={8} />\n <YAxis axisLine={false} tick={chartTick} tickLine={false} width={40} />\n <RechartsTooltip\n contentStyle={chartTooltipStyle}\n itemStyle={chartTooltipItemStyle}\n labelStyle={chartTooltipLabelStyle}\n />\n <Line\n dataKey=\"y\"\n dot={false}\n isAnimationActive={false}\n name={element.props.yKey}\n stroke={color}\n strokeWidth={2}\n type=\"monotone\"\n />\n </RechartsLineChart>\n </ChartFrame>\n );\n};\n\ninterface PieChartProps {\n data: { [key: string]: unknown }[];\n height: number | null;\n nameKey: string;\n title: string | null;\n valueKey: string;\n}\n\nconst PieChart: ComponentRenderer<PieChartProps> = ({ element }) => {\n const slices = (element.props.data ?? []).map((row) => ({\n name: String(row[element.props.nameKey] ?? ''),\n value: toNumber(row[element.props.valueKey]),\n }));\n\n return (\n <ChartFrame height={element.props.height} title={element.props.title}>\n <RechartsPieChart>\n <RechartsTooltip\n contentStyle={chartTooltipStyle}\n itemStyle={chartTooltipItemStyle}\n labelStyle={chartTooltipLabelStyle}\n />\n <Pie data={slices} dataKey=\"value\" innerRadius=\"45%\" isAnimationActive={false} nameKey=\"name\">\n {slices.map((slice, index) => (\n <Cell fill={CHART_COLORS[index % CHART_COLORS.length]} key={`${slice.name}-${index.toString()}`} />\n ))}\n </Pie>\n </RechartsPieChart>\n </ChartFrame>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Mermaid\n// ---------------------------------------------------------------------------\n\ninterface MermaidProps {\n chart: string;\n title: string | null;\n}\n\nconst Mermaid: ComponentRenderer<MermaidProps> = ({ element }) => {\n const { chart, title } = element.props;\n const diagramId = useId().replace(/[^a-zA-Z0-9]/g, '');\n const [svg, setSvg] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let isCancelled = false;\n\n const render = async (): Promise<void> => {\n try {\n const { default: mermaid } = await import('mermaid');\n const isDark = document.documentElement.classList.contains('dark');\n\n mermaid.initialize({ securityLevel: 'strict', startOnLoad: false, theme: isDark ? 'dark' : 'default' });\n\n const result = await mermaid.render(`fk-mermaid-${diagramId}`, chart);\n\n if (!isCancelled) {\n setSvg(result.svg);\n setError(null);\n }\n } catch (renderError) {\n if (!isCancelled) {\n setError(renderError instanceof Error ? renderError.message : 'Failed to render the diagram.');\n }\n }\n };\n\n void render();\n\n return () => {\n isCancelled = true;\n };\n }, [chart, diagramId]);\n\n return (\n <div className=\"fk:w-full fk:rounded-lg fk:border fk:border-border fk:bg-card fk:p-4 fk:corner-squircle\">\n {title && <div className=\"fk:mb-2 fk:text-sm fk:font-medium\">{title}</div>}\n {error ? (\n <pre className=\"fk:overflow-x-auto fk:whitespace-pre-wrap fk:text-xs fk:text-muted-foreground\">{chart}</pre>\n ) : null}\n {!error && svg ? (\n <div className=\"fk:flex fk:justify-center fk:overflow-x-auto\" dangerouslySetInnerHTML={{ __html: svg }} />\n ) : null}\n {!error && !svg ? <SkeletonPrimitive className=\"fk:h-40 fk:w-full\" /> : null}\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Registry and spec rendering\n// ---------------------------------------------------------------------------\n\nconst registry: ComponentRegistry = {\n Accordion,\n Alert,\n Badge: BadgeComponent,\n BarChart,\n Callout,\n Card,\n Grid,\n Heading,\n Image,\n LineChart,\n Link: LinkComponent,\n Mermaid,\n Metric,\n PieChart,\n Progress,\n Separator,\n Skeleton,\n Stack,\n TabContent,\n Table,\n Tabs,\n Text,\n Timeline,\n};\n\nconst fallback: ComponentRenderer = ({ element }) => (\n <div className=\"fk:rounded-md fk:border fk:border-dashed fk:border-border fk:p-3 fk:text-sm fk:text-muted-foreground fk:corner-squircle\">\n Unsupported component: {element.type}\n </div>\n);\n\nfunction getSanitizedChildren(childKeys: string[] | undefined, elements: Spec['elements']): string[] {\n const seen = new Set<string>();\n const children: string[] = [];\n\n for (const childKey of childKeys ?? []) {\n const normalizedKey = String(childKey);\n\n if (seen.has(normalizedKey) || !elements[normalizedKey]) {\n continue;\n }\n\n seen.add(normalizedKey);\n children.push(normalizedKey);\n }\n\n return children;\n}\n\nfunction haveChildrenChanged(original: string[], sanitized: string[]): boolean {\n if (original.length !== sanitized.length) {\n return true;\n }\n\n return sanitized.some((childKey, index) => childKey !== original[index]);\n}\n\nfunction sanitizeSpec(spec: Spec): Spec | null {\n if (!spec.elements[spec.root]) {\n return null;\n }\n\n let hasChanged = false;\n const elements: Spec['elements'] = {};\n\n for (const elementKey of Object.keys(spec.elements)) {\n const element = spec.elements[elementKey];\n\n if (!element) {\n continue;\n }\n\n const elementChildren = element.children ?? [];\n const children = getSanitizedChildren(elementChildren, spec.elements);\n const hasChildrenChanged = haveChildrenChanged(elementChildren, children);\n\n if (hasChildrenChanged) {\n hasChanged = true;\n }\n\n elements[elementKey] = hasChildrenChanged ? { ...element, children } : element;\n }\n\n if (!hasChanged) {\n return spec;\n }\n\n return { ...spec, elements };\n}\n\ninterface SpecMessagePart {\n data?: unknown;\n text?: string;\n type: string;\n}\n\nconst SPEC_DATA_PART_TYPE = 'data-spec';\n\nfunction dedupeSpecParts(parts: SpecMessagePart[]): SpecMessagePart[] {\n const seenPatchLines = new Set<string>();\n const deduped: SpecMessagePart[] = [];\n\n for (const part of parts) {\n if (part.type !== SPEC_DATA_PART_TYPE) {\n continue;\n }\n\n const payload = part.data;\n\n if (payload && typeof payload === 'object' && 'type' in payload && payload.type === 'patch' && 'patch' in payload) {\n const line = JSON.stringify(payload.patch);\n\n if (seenPatchLines.has(line)) {\n continue;\n }\n\n seenPatchLines.add(line);\n }\n\n deduped.push(part);\n }\n\n return deduped;\n}\n\nexport function RunSpecPart({ parts }: { parts: SpecMessagePart[] }): JSX.Element | null {\n const spec = useMemo(() => {\n const builtSpec = buildSpecFromParts(dedupeSpecParts(parts));\n\n return builtSpec ? sanitizeSpec(builtSpec) : null;\n }, [parts]);\n const stateKey = useMemo(() => JSON.stringify(spec?.state ?? {}), [spec]);\n\n if (!spec) {\n return null;\n }\n\n return (\n <StateProvider initialState={spec.state} key={stateKey}>\n <VisibilityProvider>\n <ActionProvider>\n <Renderer fallback={fallback} registry={registry} spec={spec} />\n </ActionProvider>\n </VisibilityProvider>\n </StateProvider>\n );\n}\n\nexport type { SpecMessagePart };\n","import { Link, useLocation } from 'react-router-dom';\nimport type { JSX } from 'react';\nimport type { TextUIPart, UIMessage, UIMessageChunk } from 'ai';\nimport { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { parseJsonEventStream, readUIMessageStream, uiMessageChunkSchema } from 'ai';\nimport {\n BotIcon,\n CheckCircle2Icon,\n CheckIcon,\n CircleSlashIcon,\n CloudUploadIcon,\n DatabaseZapIcon,\n DownloadIcon,\n LinkIcon,\n FileTextIcon,\n LoaderCircle,\n MessageSquareIcon,\n SendIcon,\n ShieldCheckIcon,\n ShieldIcon,\n XCircleIcon,\n XIcon,\n} from 'lucide-react';\nimport { useConfig } from '../../core/config/config-context';\nimport { Button, MessageResponse } from '../../ui';\nimport useSWR from 'swr';\nimport { createApiClient, fetcher, paths } from './api';\nimport { ApprovalCard } from './approval-card';\nimport { type DecidedApprovals, messageHasPendingMutationApproval, settlePendingMutationApprovals } from './approval-parts';\n\nexport { getMutationApprovalIds, getPendingMutationApprovalIds, messageHasPendingMutationApproval } from './approval-parts';\nexport type { DecidedApprovals } from './approval-parts';\nimport { RunSpecPart } from './spec-renderer';\nimport {\n getPartData,\n getRollingStatusError,\n isHiddenReplayPart,\n isJevAutoApproved,\n isRollingStatusPartType,\n} from './status-label';\nimport type { DataPart } from '@flexkit/agent-protocol';\nimport type { AutomationApproval, AutomationRun } from './types';\nimport { watchSchemaDeployment } from './schema-deploy-watch';\n\nexport {\n getLiveStatusLabel,\n getPartData,\n getRollingStatusError,\n isHiddenReplayPart,\n isRollingStatusPartType,\n} from './status-label';\n\nexport function useProjectApi(): { api: ReturnType<typeof createApiClient> | null; projectId: string | undefined } {\n const { currentProjectId } = useConfig();\n const api = useMemo(() => (currentProjectId ? createApiClient(currentProjectId) : null), [currentProjectId]);\n\n return { api, projectId: currentProjectId };\n}\n\nexport interface ReplayMetadata {\n model?: string;\n}\n\n/**\n * Parts streamed by the platform, derived from the shared protocol schema; the\n * index signature keeps `UIMessage` happy with parts this build does not know.\n */\nexport interface ReplayDataParts extends DataPart {\n [key: string]: unknown;\n}\n\ninterface ReplayTools {\n [key: string]: {\n input: unknown;\n output: unknown | undefined;\n };\n}\n\nexport type ReplayMessage = UIMessage<ReplayMetadata, ReplayDataParts, ReplayTools>;\nexport type ReplayMessagePart = ReplayMessage['parts'][number];\nexport type RunStreamStatus = 'streaming' | 'paused' | 'finished' | 'error' | 'unavailable';\n/** The persisted record status backing a stream (automation run or chat turn). */\nexport type RunRecordStatus = AutomationRun['status'];\ntype ConsumeOnceResult = 'finished' | 'incomplete' | 'unavailable';\n\nconst MAX_STREAM_ATTEMPTS = 5;\nexport const STREAM_RETRY_DELAY_MS = 2000;\nconst REPLAY_RENDER_INTERVAL_MS = 120;\nconst JSON_RENDER_SPEC_PART_TYPE = 'data-spec';\n\nexport interface RunReplayActions {\n /** A proposal was decided here or seen decided elsewhere; `status` lets the replay keep its card mounted. */\n onApprovalDecided: (_approvalId?: string, _status?: AutomationApproval['status']) => void;\n}\n\nexport const RunReplayActionsContext = createContext<RunReplayActions | null>(null);\nexport const ChatApprovalContext = createContext(false);\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => window.setTimeout(resolve, ms));\n}\n\nfunction isAbortError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n return error.name === 'AbortError' || error.message.toLowerCase().includes('aborted');\n}\n\nfunction hasRenderableParts(parts: ReplayMessagePart[]): boolean {\n return parts.some((part) => !isHiddenReplayPart(part));\n}\n\nfunction getMarkerIds(messages: ReplayMessage[]): Set<string> {\n const markerIds = new Set<string>();\n\n for (const message of messages) {\n for (const part of message.parts) {\n if (part.type === 'data-user-message' && part.id) {\n markerIds.add(part.id);\n }\n }\n }\n\n return markerIds;\n}\n\nfunction splitSessionMessages(messages: ReplayMessage[]): ReplayMessage[] {\n const markerIds = getMarkerIds(messages);\n const result: ReplayMessage[] = [];\n\n for (const message of messages) {\n if (message.role === 'user') {\n if (!markerIds.has(message.id)) {\n result.push(message);\n }\n\n continue;\n }\n\n if (message.role !== 'assistant') {\n result.push(message);\n\n continue;\n }\n\n let parts: ReplayMessagePart[] = [];\n let chunkIndex = 0;\n\n const flush = (): void => {\n if (hasRenderableParts(parts)) {\n result.push({ ...message, id: `${message.id}-${chunkIndex.toString()}`, parts });\n }\n\n chunkIndex++;\n parts = [];\n };\n\n for (const part of message.parts) {\n if (part.type === 'data-user-message') {\n const data = getPartData<ReplayDataParts['user-message']>(part);\n\n flush();\n result.push({\n id: part.id ?? crypto.randomUUID(),\n parts: data.parts as ReplayMessagePart[],\n role: 'user',\n });\n\n continue;\n }\n\n parts.push(part);\n }\n\n flush();\n }\n\n return result;\n}\n\nexport function useSessionMessages(messages: ReplayMessage[]): ReplayMessage[] {\n return useMemo(() => splitSessionMessages(messages), [messages]);\n}\n\nexport function isTerminalRunStatus(status: RunRecordStatus | null | undefined): boolean {\n return status === 'success' || status === 'failed' || status === 'cancelled' || status === 'skipped';\n}\n\nfunction shouldPauseStreamForApproval({\n latestMessage,\n recordStatus,\n suppressApprovalPause,\n}: {\n latestMessage: ReplayMessage | undefined;\n recordStatus: RunRecordStatus | null | undefined;\n suppressApprovalPause: boolean;\n}): boolean {\n if (isTerminalRunStatus(recordStatus)) {\n return false;\n }\n\n // After a local approval decision the run/stream can still look suspended\n // until the workflow hook resumes — keep reconnecting in that case.\n if (suppressApprovalPause) {\n return false;\n }\n\n // The run record is authoritative once execution has resumed. A stale\n // pending data-mutation-approval part can linger in the replay until the\n // next workflow step writes an updated status.\n if (recordStatus === 'running') {\n return false;\n }\n\n if (recordStatus === 'awaiting_approval') {\n return true;\n }\n\n // Fall back to the stream part when the run record hasn't caught up yet.\n return messageHasPendingMutationApproval(latestMessage);\n}\n\nexport function useRunStream(\n streamApi: string,\n options?: {\n /** Decisions known to this client, applied to stale pending parts while the stream rebuilds. */\n decidedApprovals?: DecidedApprovals;\n recordStatus?: RunRecordStatus | null;\n resumeToken?: number;\n suppressApprovalPause?: boolean;\n }\n): {\n message: ReplayMessage | undefined;\n status: RunStreamStatus;\n} {\n const [message, setMessage] = useState<ReplayMessage>();\n const [status, setStatus] = useState<RunStreamStatus>('streaming');\n const recordStatus = options?.recordStatus;\n const resumeToken = options?.resumeToken ?? 0;\n const decidedApprovalsRef = useRef(options?.decidedApprovals ?? {});\n decidedApprovalsRef.current = options?.decidedApprovals ?? {};\n // Read via ref so clearing the post-decide suppress window does not abort a\n // healthy reconnect the way resetting resumeToken would.\n const suppressApprovalPauseRef = useRef(options?.suppressApprovalPause ?? false);\n suppressApprovalPauseRef.current = options?.suppressApprovalPause ?? false;\n const streamApiRef = useRef(streamApi);\n const messageRef = useRef(message);\n messageRef.current = message;\n\n useEffect(() => {\n const streamChanged = streamApiRef.current !== streamApi;\n streamApiRef.current = streamApi;\n\n if (!streamApi) {\n setMessage(undefined);\n setStatus('unavailable');\n\n return;\n }\n\n const abortController = new AbortController();\n // Approval resume and record-status updates restart this effect (they bump\n // resumeToken / recordStatus) but the stream identity is unchanged. Keep\n // the in-memory replay while consumeOnce rebuilds from startIndex=0.\n let latestMessage: ReplayMessage | undefined = streamChanged ? undefined : messageRef.current;\n // While the same stream rebuilds from startIndex=0 the partial replay has\n // fewer parts than what is on screen; keep showing the previous message\n // until the rebuild catches up so cards do not blink out and back.\n const rebuildFloor = streamChanged ? 0 : (latestMessage?.parts.length ?? 0);\n\n if (streamChanged) {\n setMessage(undefined);\n } else if (latestMessage && (recordStatus === 'running' || isTerminalRunStatus(recordStatus))) {\n // Pending data-mutation-approval parts are stale once the run record\n // says execution has resumed. Chat and run UIs treat those parts as\n // still awaiting approval until consumeOnce rebuilds from startIndex=0.\n const nextMessage = settlePendingMutationApprovals(latestMessage, decidedApprovalsRef.current);\n\n if (nextMessage !== latestMessage) {\n latestMessage = nextMessage;\n setMessage(nextMessage);\n }\n }\n\n setStatus('streaming');\n\n // The chat stream URL already carries a workflowRunId query parameter.\n const startIndexSeparator = streamApi.includes('?') ? '&' : '?';\n\n const consumeOnce = async (): Promise<ConsumeOnceResult> => {\n const response = await fetch(`${streamApi}${startIndexSeparator}startIndex=0`, {\n credentials: 'include',\n signal: abortController.signal,\n });\n\n if (response.status === 404) {\n return 'unavailable';\n }\n\n if (!response.ok || !response.body) {\n throw new Error(`Failed to fetch the run stream (status ${response.status.toString()})`);\n }\n\n let sawFinish = false;\n const parsedStream = parseJsonEventStream({ schema: uiMessageChunkSchema, stream: response.body });\n type ParsedChunk = typeof parsedStream extends ReadableStream<infer T> ? T : never;\n\n const chunkStream = parsedStream.pipeThrough(\n new TransformStream<ParsedChunk, UIMessageChunk>({\n transform: (result, controller) => {\n if (!result.success) {\n throw result.error;\n }\n\n if (result.value.type === 'finish') {\n sawFinish = true;\n }\n\n controller.enqueue(result.value);\n },\n })\n );\n\n const messageStream = readUIMessageStream<ReplayMessage>({\n onError: (error) => {\n // Unmounting aborts the fetch on purpose; only a real chunk error is worth a log.\n if (abortController.signal.aborted) {\n return;\n }\n\n console.error('Run stream chunk error', error);\n },\n stream: chunkStream,\n });\n\n // Rendering after every chunk makes long replays (thousands of chunks,\n // e.g. large streamed tool inputs) re-render the whole message tree per\n // chunk and freeze the page. Throttle to one trailing update per\n // interval, with a guaranteed final flush after the stream ends.\n let throttleTimer: number | null = null;\n\n let caughtUp = rebuildFloor === 0;\n const flushLatestMessage = (force = false): void => {\n if (abortController.signal.aborted || !latestMessage) {\n return;\n }\n\n if (!caughtUp) {\n caughtUp = force || latestMessage.parts.length >= rebuildFloor;\n\n if (!caughtUp) {\n return;\n }\n }\n\n setMessage({ ...latestMessage });\n };\n\n try {\n for await (const current of messageStream) {\n if (abortController.signal.aborted) {\n break;\n }\n\n latestMessage = current;\n\n if (throttleTimer === null) {\n throttleTimer = window.setTimeout(() => {\n throttleTimer = null;\n flushLatestMessage();\n }, REPLAY_RENDER_INTERVAL_MS);\n }\n }\n } finally {\n if (throttleTimer !== null) {\n window.clearTimeout(throttleTimer);\n throttleTimer = null;\n }\n\n flushLatestMessage(true);\n }\n\n return sawFinish ? 'finished' : 'incomplete';\n };\n\n const consume = async (): Promise<void> => {\n let attempt = 0;\n\n while (!abortController.signal.aborted) {\n if (attempt > 0) {\n await delay(STREAM_RETRY_DELAY_MS);\n }\n\n try {\n const result = await consumeOnce();\n\n if (abortController.signal.aborted) {\n return;\n }\n\n if (result === 'unavailable') {\n setStatus('unavailable');\n\n return;\n }\n\n // The stream route wraps every readable session with a finish chunk,\n // including sessions that close while the durable workflow continues.\n // Only the run record can confirm that the run itself finished.\n if (result === 'finished' && isTerminalRunStatus(recordStatus)) {\n setStatus('finished');\n\n return;\n }\n\n // The run record is authoritative once it reaches a terminal status.\n // Without this, a lingering post-decide suppress flag would reconnect\n // forever when the replay never emits a finish chunk.\n if (isTerminalRunStatus(recordStatus)) {\n setStatus('finished');\n\n return;\n }\n\n // Workflow hooks close the readable without a finish chunk while the\n // run is suspended on a mutation approval. Pause instead of treating\n // that as an error or a perpetual \"Running...\" state.\n if (\n shouldPauseStreamForApproval({\n latestMessage,\n recordStatus,\n suppressApprovalPause: suppressApprovalPauseRef.current,\n })\n ) {\n setStatus('paused');\n\n return;\n }\n\n // Keep reconnecting while the run is active, or right after a local\n // approval decision while the workflow is still waking up.\n const shouldKeepRetrying = recordStatus === 'running' || suppressApprovalPauseRef.current;\n\n if (!shouldKeepRetrying && attempt >= MAX_STREAM_ATTEMPTS - 1) {\n setStatus('error');\n\n return;\n }\n } catch (error) {\n if (abortController.signal.aborted || isAbortError(error)) {\n return;\n }\n\n console.error('Run stream error', error);\n\n if (isTerminalRunStatus(recordStatus)) {\n setStatus('finished');\n\n return;\n }\n\n const shouldKeepRetrying = recordStatus === 'running' || suppressApprovalPauseRef.current;\n\n if (!shouldKeepRetrying && attempt >= MAX_STREAM_ATTEMPTS - 1) {\n setStatus('error');\n\n return;\n }\n }\n\n attempt += 1;\n }\n };\n\n const loadTimeout = window.setTimeout(() => {\n void consume();\n }, 0);\n\n return () => {\n window.clearTimeout(loadTimeout);\n abortController.abort('Run replay unmounted');\n };\n }, [recordStatus, resumeToken, streamApi]);\n\n return { message, status };\n}\n\nexport function toMutationApprovalPartData(approval: AutomationApproval): ReplayDataParts['mutation-approval'] {\n return {\n affectedCount: approval.affectedCount,\n approvalId: approval.id,\n decidedBy: approval.decidedBy ?? undefined,\n operationsSummary: approval.operationsSummary,\n reason: approval.reason ?? undefined,\n status: approval.status,\n };\n}\n\n/**\n * Models sometimes wrap json-render patch lines in a Markdown code fence\n * despite instructions. The patch lines are consumed by the spec pipeline,\n * leaving stray fence-only text parts behind; those are never meaningful.\n */\nexport function isCodeFenceOnlyText(text: string): boolean {\n const trimmed = text.trim();\n\n if (!trimmed) {\n return false;\n }\n\n return trimmed.split('\\n').every((line) => /^`{3,}[\\w-]*$/.test(line.trim()));\n}\n\nexport function MessagePart({\n api,\n part,\n partIndex,\n parts,\n}: {\n api: ReturnType<typeof createApiClient>;\n part: ReplayMessagePart;\n partIndex: number;\n parts: ReplayMessagePart[];\n}): JSX.Element | null {\n // Reasoning, step markers, in-flight tool calls, and Jev-cleared plugin\n // calls only feed the transient status line; nothing to show here.\n if (isHiddenReplayPart(part)) {\n return null;\n }\n\n // A rolling-status call that is not hidden has failed.\n if (isRollingStatusPartType(part.type)) {\n const error = getRollingStatusError(part);\n\n return error ? <ToolErrorLine message={error} /> : null;\n }\n\n if (part.type === 'text') {\n const isStrayFence =\n isCodeFenceOnlyText(part.text) && parts.some((otherPart) => otherPart.type === JSON_RENDER_SPEC_PART_TYPE);\n\n return isStrayFence ? null : <TextPart part={part} />;\n }\n\n if (part.type === 'data-generating-files') {\n return <GenerateFilesPart message={getPartData<ReplayDataParts['generating-files']>(part)} />;\n }\n\n if (part.type === 'data-run-artifact') {\n return <RunArtifactPart api={api} message={getPartData<ReplayDataParts['run-artifact']>(part)} />;\n }\n\n if (part.type === 'data-tool-delivery') {\n return <ToolDeliveryPart message={getPartData<ReplayDataParts['tool-delivery']>(part)} />;\n }\n\n if (part.type === 'data-run-summary') {\n return <RunSummaryPart message={getPartData<ReplayDataParts['run-summary']>(part)} />;\n }\n\n if (part.type === 'data-subtask') {\n const data = getPartData<ReplayDataParts['subtask']>(part);\n const message =\n data.status === 'running'\n ? `Running \"${data.title}\"`\n : data.status === 'done'\n ? `Completed \"${data.title}\"${typeof data.stepsUsed === 'number' ? ` in ${data.stepsUsed.toString()} steps` : ''}`\n : `\"${data.title}\" failed: ${data.error?.message ?? 'unknown error'}`;\n\n return (\n <ToolMessage>\n <ToolHeader>\n <BotIcon className=\"fk:size-3.5\" />\n Subtask\n </ToolHeader>\n <div className=\"fk:relative fk:min-h-5 fk:pl-6\">\n <span className=\"fk:absolute fk:left-0 fk:top-0\">\n <StatusIcon isError={data.status === 'error'} loading={data.status === 'running'} />\n </span>\n <span className=\"fk:text-xs\">{message}</span>\n {data.resultPreview ? (\n <p className=\"fk:mt-1 fk:text-xs fk:text-muted-foreground\">{data.resultPreview}</p>\n ) : null}\n </div>\n </ToolMessage>\n );\n }\n\n if (part.type === 'data-context-compaction') {\n const data = getPartData<ReplayDataParts['context-compaction']>(part);\n\n return (\n <p className=\"fk:text-xs fk:text-muted-foreground\">\n Earlier messages ({data.summarizedMessageCount.toString()}) were summarized to keep this conversation within\n the model's context. Details may need to be re-fetched.\n </p>\n );\n }\n\n if (part.type === 'data-plugin-connection') {\n const data = getPartData<ReplayDataParts['plugin-connection']>(part);\n\n return <PluginConnectionPart pluginId={data.pluginId} />;\n }\n\n // Rendered by the chat page under the latest reply, where the composer is in reach.\n if (part.type === 'data-suggested-prompt') {\n return null;\n }\n\n if (part.type === 'data-turn-error') {\n const data = getPartData<ReplayDataParts['turn-error']>(part);\n\n return (\n <ToolMessage className=\"fk:border-red-700/40\">\n <ToolHeader>\n <XCircleIcon className=\"fk:size-3.5 fk:text-red-700\" />\n <span>Turn failed</span>\n </ToolHeader>\n <p className=\"fk:whitespace-pre-wrap fk:text-xs\">{data.message}</p>\n </ToolMessage>\n );\n }\n\n if (part.type === 'data-mutation-approval') {\n const approval = getPartData<ReplayDataParts['mutation-approval']>(part);\n\n return isJevAutoApproved(approval) ? (\n <AutoApprovedCallPart message={approval} />\n ) : (\n <MutationApprovalPart api={api} message={approval} />\n );\n }\n\n if (part.type === 'data-bulk-graphql-action') {\n return <BulkGraphqlActionPart message={getPartData<ReplayDataParts['bulk-graphql-action']>(part)} />;\n }\n\n if (part.type === JSON_RENDER_SPEC_PART_TYPE) {\n const nextSpecPart = parts.slice(partIndex + 1).find((nextPart) => nextPart.type === JSON_RENDER_SPEC_PART_TYPE);\n\n if (nextSpecPart) {\n return null;\n }\n\n return <RunSpecPart parts={parts} />;\n }\n\n if (part.type.startsWith('data-')) {\n return <UnknownDataPart part={part} />;\n }\n\n return null;\n}\n\nfunction TextPart({ part }: { part: TextUIPart }): JSX.Element {\n return (\n <MessageResponse\n className=\"fk:min-w-0 fk:max-w-full fk:overflow-x-auto fk:text-base fk:leading-relaxed fk:text-foreground\"\n isAnimating={part.state === 'streaming'}\n >\n {part.text}\n </MessageResponse>\n );\n}\n\n/** Compact inline error row for a failed tool call or turn. */\nexport function ToolErrorLine({ message }: { message: string }): JSX.Element {\n return (\n <div className=\"fk:flex fk:items-start fk:gap-2 fk:rounded-xl fk:border fk:border-red-700/40 fk:bg-destructive/5 fk:px-3.5 fk:py-3 fk:text-sm fk:corner-squircle\">\n <XCircleIcon className=\"fk:mt-0.5 fk:size-3.5 fk:shrink-0 fk:text-red-700\" />\n <span className=\"fk:whitespace-pre-wrap fk:text-xs\">{message}</span>\n </div>\n );\n}\n\n/** Period of the `fk:shimmer-duration-1000` utility, used to keep the phase across label swaps. */\nconst SHIMMER_PERIOD_MS = 1000;\n\n/**\n * Single-line shimmering status indicator that swaps its text with a rolling\n * transition: the previous label exits through the top while the new one\n * enters from the bottom of an overflow-hidden line.\n */\nexport function RollingStatusText({ text }: { text: string }): JSX.Element {\n // The shimmer utility restarts its animation whenever the keyed label span\n // remounts. A negative delay anchored to one origin resumes it in phase.\n const phaseOriginRef = useRef<number>(typeof performance === 'undefined' ? 0 : performance.now());\n const getPhaseDelayMs = (): number => {\n const now = typeof performance === 'undefined' ? 0 : performance.now();\n\n return -((now - phaseOriginRef.current) % SHIMMER_PERIOD_MS);\n };\n const [transition, setTransition] = useState<{\n current: string;\n currentDelayMs: number;\n key: number;\n previous: string | null;\n previousDelayMs: number;\n }>({\n current: text,\n currentDelayMs: 0,\n key: 0,\n previous: null,\n previousDelayMs: 0,\n });\n\n useEffect(() => {\n setTransition((state) => {\n if (state.current === text) {\n return state;\n }\n\n return {\n current: text,\n currentDelayMs: getPhaseDelayMs(),\n key: state.key + 1,\n previous: state.current,\n previousDelayMs: state.currentDelayMs,\n };\n });\n }, [text]);\n\n // The shimmer utility (background-clip: text) sets `animation` itself, so\n // the roll transforms live on wrapper spans to avoid overriding it.\n return (\n <span className=\"fk:relative fk:block fk:h-5 fk:min-w-0 fk:flex-1 fk:overflow-hidden\">\n {transition.previous ? (\n <span\n aria-hidden\n className=\"fk:absolute fk:inset-x-0 fk:top-0 fk:block fk:animate-roll-up-out\"\n key={`previous-${transition.key.toString()}`}\n >\n <span\n className=\"fk:block fk:truncate fk:shimmer fk:shimmer-duration-1000\"\n style={{ animationDelay: `${transition.previousDelayMs.toString()}ms` }}\n >\n {transition.previous}\n </span>\n </span>\n ) : null}\n <span\n className={transition.previous ? 'fk:block fk:animate-roll-up-in' : 'fk:block'}\n key={`current-${transition.key.toString()}`}\n role=\"status\"\n >\n <span\n className=\"fk:block fk:truncate fk:shimmer fk:shimmer-duration-1000\"\n style={{ animationDelay: `${transition.currentDelayMs.toString()}ms` }}\n >\n {transition.current}\n </span>\n </span>\n </span>\n );\n}\n\nconst STATUS_LABEL_MIN_DWELL_MS = 1000;\n\n/**\n * Holds each displayed label for at least `minDwellMs` so a burst of label\n * changes (e.g. a reasoning heading followed by its first sentence) still\n * reads as distinct rolls. The latest pending label wins once the window\n * elapses; A → B → A inside the window collapses to no change.\n */\nexport function useStableStatusLabel(label: string, options?: { minDwellMs?: number }): string {\n const minDwellMs = options?.minDwellMs ?? STATUS_LABEL_MIN_DWELL_MS;\n const [displayed, setDisplayed] = useState(label);\n const shownAtRef = useRef(Date.now());\n const pendingRef = useRef(label);\n pendingRef.current = label;\n\n useEffect(() => {\n if (label === displayed) {\n return;\n }\n\n const wait = Math.max(0, minDwellMs - (Date.now() - shownAtRef.current));\n const timeoutId = window.setTimeout(() => {\n shownAtRef.current = Date.now();\n setDisplayed(pendingRef.current);\n }, wait);\n\n return () => {\n window.clearTimeout(timeoutId);\n };\n }, [displayed, label, minDwellMs]);\n\n return displayed;\n}\n\nexport interface TurnStatus {\n label: string;\n visible: boolean;\n}\n\n/**\n * The one transient status slot of an in-flight turn or run. It keeps its\n * height for the whole turn and only fades while response text streams, so\n * the conversation never shifts when the label appears or disappears.\n * Parents unmount it once the turn reached a terminal state.\n */\nexport function TurnStatusLine({ label, visible }: TurnStatus): JSX.Element {\n const stableLabel = useStableStatusLabel(label);\n\n return (\n <div\n aria-hidden={!visible}\n className={`fk:flex fk:h-9 fk:items-center fk:text-sm fk:text-muted-foreground fk:transition-[opacity,visibility] fk:duration-200 ${\n visible ? 'fk:visible fk:opacity-100' : 'fk:invisible fk:opacity-0'\n }`}\n >\n <RollingStatusText text={stableLabel} />\n </div>\n );\n}\n\nexport function ToolMessage({\n children,\n className = '',\n}: {\n children: React.ReactNode;\n className?: string;\n}): JSX.Element {\n return (\n <div\n className={`fk:min-w-0 fk:max-w-full fk:overflow-x-auto fk:rounded-xl fk:border fk:border-border fk:bg-background fk:px-3.5 fk:py-3 fk:text-sm ${className} fk:corner-squircle`}\n >\n {children}\n </div>\n );\n}\n\nexport function ToolHeader({ children }: { children: React.ReactNode }): JSX.Element {\n return <div className=\"fk:flex fk:items-center fk:gap-2 fk:font-medium fk:text-muted-foreground\">{children}</div>;\n}\n\nfunction StatusIcon({ isError, loading }: { isError?: boolean; loading?: boolean }): JSX.Element {\n if (loading) {\n return <LoaderCircle className=\"fk:size-4 fk:animate-spin\" />;\n }\n\n if (isError) {\n return <XIcon className=\"fk:size-4 fk:text-red-700\" />;\n }\n\n return <CheckIcon className=\"fk:size-4\" />;\n}\n\nexport function StatusToolPart({\n error,\n icon,\n loading,\n message,\n title,\n}: {\n error?: string;\n icon: React.ReactNode;\n loading: boolean;\n message: string;\n title: string;\n}): JSX.Element {\n return (\n <ToolMessage>\n <ToolHeader>\n {icon}\n {title}\n </ToolHeader>\n <div className=\"fk:relative fk:min-h-5 fk:pl-6\">\n <span className=\"fk:absolute fk:left-0 fk:top-0\">\n <StatusIcon isError={Boolean(error)} loading={loading} />\n </span>\n <span className=\"fk:text-xs\">{message}</span>\n </div>\n </ToolMessage>\n );\n}\n\nfunction GenerateFilesPart({ message }: { message: ReplayDataParts['generating-files'] }): JSX.Element {\n const lastInProgress = ['error', 'uploading', 'generating'].includes(message.status);\n const generated = lastInProgress ? message.paths.slice(0, message.paths.length - 1) : message.paths;\n const generating = lastInProgress ? (message.paths[message.paths.length - 1] ?? '') : null;\n\n return (\n <ToolMessage>\n <ToolHeader>\n <CloudUploadIcon className=\"fk:size-3.5\" />\n <span>{message.status === 'done' ? 'Uploaded files' : 'Generating files'}</span>\n </ToolHeader>\n <div className=\"fk:space-y-1 fk:text-sm\">\n {generated.map((path, index) => (\n <div className=\"fk:flex fk:items-center fk:gap-2\" key={`${path}-${index.toString()}`}>\n <CheckIcon className=\"fk:size-4\" />\n <span className=\"fk:whitespace-pre-wrap\">{path}</span>\n </div>\n ))}\n {typeof generating === 'string' ? (\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <StatusIcon isError={message.status === 'error'} loading={message.status !== 'error'} />\n <span>{message.status === 'error' ? (message.error?.message ?? generating) : generating}</span>\n </div>\n ) : null}\n </div>\n </ToolMessage>\n );\n}\n\nexport function RunArtifactPart({\n api,\n message,\n}: {\n api: ReturnType<typeof createApiClient>;\n message: ReplayDataParts['run-artifact'];\n}): JSX.Element {\n const isDone = message.status === 'done' && message.artifactId;\n const previewUrl = isDone ? api.getArtifactUrl(message.artifactId ?? '') : '';\n const downloadUrl = isDone ? api.getArtifactUrl(message.artifactId ?? '', { download: true }) : '';\n const bytes = formatBytes(message.sizeBytes);\n\n return (\n <ToolMessage>\n <ToolHeader>\n <FileTextIcon className=\"fk:size-3.5\" />\n {message.status === 'done' ? 'Published artifact' : 'Publishing artifact'}\n </ToolHeader>\n <div className=\"fk:relative fk:min-h-5 fk:pl-6\">\n <span className=\"fk:absolute fk:left-0 fk:top-0\">\n <StatusIcon isError={message.status === 'error'} loading={message.status === 'uploading'} />\n </span>\n <div className=\"fk:min-w-0 fk:space-y-2\">\n <div className=\"fk:min-w-0\">\n <div className=\"fk:truncate fk:font-medium\">{message.filename}</div>\n <div className=\"fk:text-xs fk:text-muted-foreground\">\n {message.status === 'uploading' && 'Uploading to artifacts'}\n {message.status === 'done' && [getArtifactLabel(message), bytes].filter(Boolean).join(' · ')}\n {message.status === 'error' && (message.error?.message ?? 'Failed to publish artifact')}\n </div>\n </div>\n {isDone ? (\n <div className=\"fk:flex fk:flex-wrap fk:gap-2\">\n <Button asChild size=\"sm\" variant=\"outline\">\n <a href={previewUrl} rel=\"noreferrer\" target=\"_blank\">\n Preview\n </a>\n </Button>\n <Button asChild size=\"sm\" variant=\"outline\">\n <a href={downloadUrl}>\n <DownloadIcon className=\"fk:size-3\" />\n Download\n </a>\n </Button>\n {message.url ? (\n <Button asChild size=\"sm\" variant=\"outline\">\n <a href={message.url} rel=\"noreferrer\" target=\"_blank\">\n <LinkIcon className=\"fk:size-3\" />\n Permanent link\n </a>\n </Button>\n ) : null}\n </div>\n ) : null}\n </div>\n </div>\n </ToolMessage>\n );\n}\n\nfunction ToolDeliveryPart({ message }: { message: ReplayDataParts['tool-delivery'] }): JSX.Element {\n const providerLabel = message.provider === 'slack' ? 'Slack' : 'Microsoft Teams';\n const icon =\n message.provider === 'slack' ? <MessageSquareIcon className=\"fk:size-3.5\" /> : <SendIcon className=\"fk:size-3.5\" />;\n\n return (\n <StatusToolPart\n error={message.error?.message}\n icon={icon}\n loading={message.status === 'loading'}\n message={\n message.status === 'error'\n ? (message.error?.message ?? `Failed to send result to ${message.channelName}`)\n : `${message.status === 'done' ? 'Sent' : 'Sending'} result to ${message.channelName}`\n }\n title={`${providerLabel} Delivery`}\n />\n );\n}\n\nfunction RunSummaryPart({ message }: { message: ReplayDataParts['run-summary'] }): JSX.Element {\n const icon =\n message.status === 'success' ? (\n <CheckCircle2Icon className=\"fk:size-3.5 fk:text-green-700\" />\n ) : message.status === 'skipped' ? (\n <CircleSlashIcon className=\"fk:size-3.5\" />\n ) : (\n <XCircleIcon className=\"fk:size-3.5 fk:text-red-700\" />\n );\n const title =\n message.status === 'success' ? 'Run completed' : message.status === 'skipped' ? 'Run skipped' : 'Run failed';\n\n return (\n <ToolMessage className={message.status === 'failed' ? 'fk:border-red-700/40' : 'fk:border-green-700/40'}>\n <ToolHeader>\n {icon}\n <span>{title}</span>\n </ToolHeader>\n {message.status === 'failed' ? <p className=\"fk:whitespace-pre-wrap fk:text-xs\">{message.summary}</p> : null}\n </ToolMessage>\n );\n}\n\ninterface ApprovalResponse {\n approval: AutomationApproval;\n}\n\nexport function MutationApprovalPart({\n api,\n message,\n}: {\n api: ReturnType<typeof createApiClient>;\n message: ReplayDataParts['mutation-approval'];\n}): JSX.Element {\n const { projectId } = useProjectApi();\n const replayActions = useContext(RunReplayActionsContext);\n const isChat = useContext(ChatApprovalContext);\n const previousApprovalStatusRef = useRef<AutomationApproval['status'] | undefined>(undefined);\n // Poll while the stream still says pending so a decision from the Approvals\n // inbox / another tab updates this card. RunReplay refreshes the run record\n // on the same interval but does not touch this approval fetch.\n const { data, error, isValidating, mutate } = useSWR<ApprovalResponse>(\n projectId ? paths(projectId).approval(message.approvalId) : null,\n fetcher,\n {\n refreshInterval: (latestData) => {\n if (message.status !== 'pending') {\n return 0;\n }\n\n if (latestData?.approval?.status && latestData.approval.status !== 'pending') {\n return 0;\n }\n\n return STREAM_RETRY_DELAY_MS;\n },\n }\n );\n const approvalStatus = data?.approval?.status;\n const isPending = (approvalStatus ?? message.status) === 'pending';\n const approvedSchemaChange = data?.approval?.kind === 'schema' && data.approval.status === 'approved';\n\n // A schema change approved here or elsewhere deploys in the background:\n // watch it so the navbar and Desk pick up the new entities without a reload.\n useEffect(() => {\n if (!approvedSchemaChange || !projectId) {\n return;\n }\n\n watchSchemaDeployment({ approvalId: message.approvalId, approvalUrl: paths(projectId).approval(message.approvalId), projectId });\n }, [approvedSchemaChange, message.approvalId, projectId]);\n\n // The stream part changes when the proposal is decided or executed; refresh\n // the full approval (preview, result, error) from the API when that happens.\n useEffect(() => {\n void mutate();\n }, [message.status, mutate]);\n\n // When polling discovers an external decide while the replay part is still\n // pending, reconnect the stream the same way a local decide does. Only a\n // pending -> decided transition observed while mounted counts: a card that\n // mounts with an already-decided approval (e.g. right after a reconnect\n // remounted it) must not trigger another reconnect, or it would loop.\n useEffect(() => {\n const previousStatus = previousApprovalStatusRef.current;\n previousApprovalStatusRef.current = approvalStatus;\n\n if (message.status !== 'pending' || !approvalStatus || approvalStatus === 'pending') {\n return;\n }\n\n if (previousStatus !== 'pending') {\n return;\n }\n\n replayActions?.onApprovalDecided(data?.approval?.id ?? message.approvalId, approvalStatus);\n }, [approvalStatus, data?.approval?.id, message.approvalId, message.status, replayActions]);\n\n function handleDecided(nextApproval: AutomationApproval): void {\n // Keep the external-decide effect from bumping resumeToken again after a\n // local decide already reconnected the stream.\n if (nextApproval.status !== 'pending') {\n previousApprovalStatusRef.current = nextApproval.status;\n }\n\n void mutate();\n // Revalidate the run record and reconnect the workflow stream so the page\n // reflects resumed execution instead of a stale awaiting_approval/error state.\n replayActions?.onApprovalDecided(nextApproval.id, nextApproval.status);\n }\n\n let body: JSX.Element;\n\n if (data?.approval) {\n body = (\n <ApprovalCard\n api={api}\n approval={data.approval}\n chat={isChat}\n key={data.approval.status}\n onDecided={handleDecided}\n />\n );\n } else if (error && !isValidating) {\n const detail = error instanceof Error && error.message ? error.message : 'Request failed';\n\n body = (\n <div className=\"fk:space-y-2\">\n <p className=\"fk:text-xs fk:text-destructive\">\n Failed to load proposal {message.operationsSummary}: {detail}\n </p>\n <Button size=\"sm\" variant=\"outline\" onClick={() => void mutate()}>\n Retry\n </Button>\n </div>\n );\n } else {\n body = (\n <div className=\"fk:flex fk:items-center fk:gap-2 fk:text-xs fk:text-muted-foreground\">\n <LoaderCircle className=\"fk:size-3.5 fk:animate-spin\" />\n <span>Loading proposal {message.operationsSummary}...</span>\n </div>\n );\n }\n\n return (\n <ToolMessage>\n <ToolHeader>\n {isChat ? <ShieldIcon className=\"fk:size-3.5\" /> : <DatabaseZapIcon className=\"fk:size-3.5\" />}\n {isChat ? 'Approval request' : 'Mutation approval'}\n {isPending ? <LoaderCircle className=\"fk:ml-1 fk:size-3.5 fk:animate-spin\" /> : null}\n </ToolHeader>\n <div className=\"fk:mt-2\">{body}</div>\n {message.status === 'error' && message.error ? (\n <p className=\"fk:mt-2 fk:text-xs fk:text-destructive\">{message.error.message}</p>\n ) : null}\n </ToolMessage>\n );\n}\n\n/** Only reached for a Jev-cleared call that failed; successful ones are hidden. */\nfunction AutoApprovedCallPart({ message }: { message: ReplayDataParts['mutation-approval'] }): JSX.Element {\n const summary = message.operationsSummary.replace(/^Call /, '');\n\n return (\n <StatusToolPart\n error={message.status === 'error' ? (message.error?.message ?? 'The call failed.') : undefined}\n icon={<ShieldCheckIcon className=\"fk:size-3.5\" />}\n loading={false}\n message={\n message.status === 'error'\n ? `${summary}: ${message.error?.message ?? 'The call failed.'}`\n : `${summary} · Auto-approved by Jev`\n }\n title=\"Plugin call\"\n />\n );\n}\n\nfunction BulkGraphqlActionPart({ message }: { message: ReplayDataParts['bulk-graphql-action'] }): JSX.Element {\n const progress = [\n typeof message.processedItems === 'number' ? `${message.processedItems.toString()} processed` : '',\n typeof message.changedItems === 'number' ? `${message.changedItems.toString()} changed` : '',\n typeof message.failedItems === 'number' ? `${message.failedItems.toString()} failed` : '',\n typeof message.totalItems === 'number' ? `${message.totalItems.toString()} total` : '',\n ].filter(Boolean);\n\n return (\n <StatusToolPart\n error={message.error?.message}\n icon={<DatabaseZapIcon className=\"fk:size-3.5\" />}\n loading={message.status === 'loading' || message.status === 'running'}\n message={\n message.status === 'error'\n ? (message.error?.message ?? `Failed bulk ${message.operationName}`)\n : `${message.status === 'done' ? 'Completed' : 'Running'} ${message.operationName}${\n progress.length > 0 ? ` (${progress.join(', ')})` : ''\n }`\n }\n title=\"Bulk GraphQL action\"\n />\n );\n}\n\nfunction UnknownDataPart({ part }: { part: ReplayMessagePart }): JSX.Element {\n return (\n <ToolMessage className=\"fk:bg-muted/30\">\n <ToolHeader>\n <CheckCircle2Icon className=\"fk:size-3.5\" />\n {part.type.replace(/^data-/, '').replaceAll('-', ' ')}\n </ToolHeader>\n <p className=\"fk:text-xs fk:text-muted-foreground\">\n This run emitted a structured event that is not yet rendered by Studio.\n </p>\n </ToolMessage>\n );\n}\n\nfunction formatBytes(sizeBytes?: number): string {\n if (typeof sizeBytes !== 'number') {\n return '';\n }\n\n if (sizeBytes < 1024) {\n return `${sizeBytes.toString()} B`;\n }\n\n const kilobytes = sizeBytes / 1024;\n\n if (kilobytes < 1024) {\n return `${kilobytes.toFixed(1)} KB`;\n }\n\n return `${(kilobytes / 1024).toFixed(1)} MB`;\n}\n\nfunction getArtifactLabel(message: ReplayDataParts['run-artifact']): string {\n if (message.kind === 'pdf') {\n return 'PDF artifact';\n }\n\n if (message.kind === 'html') {\n return 'HTML artifact';\n }\n\n return 'Artifact';\n}\n\n/** Links to the plugin page, which lists every account and reconnects the one that needs attention. */\nfunction PluginConnectionPart({ pluginId }: { pluginId: string }): JSX.Element {\n const { pathname } = useLocation();\n const [base] = pathname.split('/ai/');\n\n return (\n <ToolMessage>\n <p className=\"fk:text-sm\">Connect {pluginId} to use it in this conversation.</p>\n <Button asChild size=\"sm\" variant=\"outline\">\n <Link to={`${base}/ai/plugins/${encodeURIComponent(pluginId)}`}>Connect {pluginId}</Link>\n </Button>\n </ToolMessage>\n );\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import'./index.css';import {q as q$1,o,r}from'./chunk-LMVJWCOM.js';import {g as g$1}from'./chunk-DPCMOWK4.js';import {e}from'./chunk-NNA4MLFC.js';import {useCallback}from'react';import {toast}from'sonner';import {useApolloClient}from'@apollo/client/react';function E(i){let{currentProjectSchema:t}=g$1();return useCallback(a=>{t&&q$1(o(i,t),a);},[i,t])}var g=["image/jpeg","image/png","image/webp","image/vnd.microsoft.icon","image/bmp","image/gif","image/tiff","image/svg+xml","image/avif","image/heic","image/heif","image/heic-sequence","image/heif-sequence","image/apng","audio/aac","audio/mpeg","audio/wav","audio/webm","audio/midi","audio/x-midi","audio/ogg","video/x-msvideo","video/mp4","video/mpeg","video/webm","video/quicktime","video/ogg","video/mp2t","video/3gpp","video/3gpp2","application/x-7z-compressed","application/zip","application/vnd.amazon.ebook","application/octet-stream","application/epub+zip","application/pdf","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.ms-fontobject","application/gzip","application/x-gzip","application/java-archive","application/json","application/ld+json","text/javascript","application/vnd.oasis.opendocument.presentation","application/vnd.oasis.opendocument.spreadsheet","application/vnd.oasis.opendocument.text","application/ogg","application/vnd.ms-powerpoint","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.rar","application/x-tar","application/vnd.visio","application/xhtml+xml","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/xml"];function F(i,t){if(!i.type)return true;let a=t?t.split(",").map(e=>e.trim()).filter(Boolean):g;return a.length===0?true:a.some(e=>e.endsWith("/*")?i.type.startsWith(e.slice(0,-1)):i.type===e)}async function x(i,t){let a=new URLSearchParams({filename:i.name}),e$1=await fetch(`${e(t).assets}?${a.toString()}`,{method:"POST",headers:{"Content-Type":i.type||"application/octet-stream"},body:i});if(!e$1.ok)throw new Error(`Upload failed for ${i.name}`);let n=await e$1.json(),o={_id:n._id,path:n.path??"",originalFilename:n.originalFilename??i.name,size:n.size??i.size,mimeType:n.mimeType??i.type,lqip:n.lqip??"",width:n.width??0,height:n.height??0};return {pathname:o.path,lqip:o.lqip||void 0,originalFilename:o.originalFilename,size:o.size,mimeType:o.mimeType,width:o.width||void 0,height:o.height||void 0,_id:o._id,asset:o}}async function h(i,t){let{projectId:a,accept:e,maxBytes:n=4*1024*1024,onUploadStart:o}=t,l=[];for(let p of Array.from(i)){if(p.size>n){toast.error(`File size too big (max ${(n/(1024*1024)).toFixed(0)}MB): ${p.name}`);continue}if(!F(p,e)){toast.error(`Unsupported file type: ${p.name}`);continue}l.push(p);}if(l.length===0)return [];o?.();try{let p=await Promise.all(l.map(async f=>x(f,a)));return p.length>0&&toast.success(`Uploaded ${p.length} file${p.length>1?"s":""}`),p}catch(p){return console.error(p),toast.error("Upload failed. Please try again."),[]}}async function b(i){let{accept:t,multiple:a=true}=i,e=document.createElement("input");e.type="file",e.accept=t??g.join(","),e.multiple=a,e.style.display="none",document.body.appendChild(e);try{let n=await new Promise(o=>{e.addEventListener("change",()=>o(e.files),{once:!0}),e.addEventListener("cancel",()=>o(null),{once:!0}),e.click();});return !n||n.length===0?[]:h(n,i)}finally{document.body.removeChild(e);}}function q(){let i=useApolloClient();return useCallback(async t=>{let a=t.files?await h(t.files,t):await b(t);return a.length>0&&await r(i,"GetAssets").catch(e=>{console.error("Error refreshing asset lists after upload:",e);}),a},[i])}export{E as a,x as b,q as c};//# sourceMappingURL=chunk-QJWY4XIM.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-QJWY4XIM.js.map
|