@xopcai/xopc 0.0.77 → 0.0.78
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/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{agents-DN3vr8pb.js → agents-Bh_9-1KB.js} +2 -2
- package/dist/gateway/static/root/assets/{agents-DN3vr8pb.js.map → agents-Bh_9-1KB.js.map} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-BUn41aPi.js → apps-page-CB5anZpc.js} +2 -2
- package/dist/gateway/static/root/assets/{apps-page-BUn41aPi.js.map → apps-page-CB5anZpc.js.map} +1 -1
- package/dist/gateway/static/root/assets/{channels-settings-CYMmWDtP.js → channels-settings-Bt1sprhC.js} +2 -2
- package/dist/gateway/static/root/assets/{channels-settings-CYMmWDtP.js.map → channels-settings-Bt1sprhC.js.map} +1 -1
- package/dist/gateway/static/root/assets/{channels-status-swr-sJj4ueTp.js → channels-status-swr-Crgak3fg.js} +2 -2
- package/dist/gateway/static/root/assets/{channels-status-swr-sJj4ueTp.js.map → channels-status-swr-Crgak3fg.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-api-CLxnaHdq.js → cron-api-CzJGvQQ7.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-api-CLxnaHdq.js.map → cron-api-CzJGvQQ7.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-page-BAQ8xSnJ.js → cron-page-BoNRJNVV.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-page-BAQ8xSnJ.js.map → cron-page-BoNRJNVV.js.map} +1 -1
- package/dist/gateway/static/root/assets/{dist-BfJYxiK5.js → dist-a-eaOUvs.js} +2 -2
- package/dist/gateway/static/root/assets/{dist-BfJYxiK5.js.map → dist-a-eaOUvs.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-bgvVs-Sy.js → extension-debug-page-D-O1XjAa.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-debug-page-bgvVs-Sy.js.map → extension-debug-page-D-O1XjAa.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-SG4TVv-u.js → extension-page-B2VpqBTH.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-page-SG4TVv-u.js.map → extension-page-B2VpqBTH.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-CJZRTsjF.js → extension-settings-page-CmBcQfeO.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-settings-page-CJZRTsjF.js.map → extension-settings-page-CmBcQfeO.js.map} +1 -1
- package/dist/gateway/static/root/assets/{fetch-K_0JRCXU.js → fetch-EGO9T3MN.js} +3 -3
- package/dist/gateway/static/root/assets/{fetch-K_0JRCXU.js.map → fetch-EGO9T3MN.js.map} +1 -1
- package/dist/gateway/static/root/assets/{field-primitives-Z76hyBYS.js → field-primitives-Bh7G1y4D.js} +2 -2
- package/dist/gateway/static/root/assets/{field-primitives-Z76hyBYS.js.map → field-primitives-Bh7G1y4D.js.map} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-BqfDabSI.js → heartbeat-config-api-DxpIEZNs.js} +2 -2
- package/dist/gateway/static/root/assets/{heartbeat-config-api-BqfDabSI.js.map → heartbeat-config-api-DxpIEZNs.js.map} +1 -1
- package/dist/gateway/static/root/assets/{index-ChiUhJAs.js → index-Dxy9ZCtC.js} +5 -5
- package/dist/gateway/static/root/assets/{index-ChiUhJAs.js.map → index-Dxy9ZCtC.js.map} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-DrIMhDE2.js → logs-page-Dw58E2GE.js} +2 -2
- package/dist/gateway/static/root/assets/{logs-page-DrIMhDE2.js.map → logs-page-Dw58E2GE.js.map} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-B-RGO3N0.js → sessions-page-CPkhCy57.js} +2 -2
- package/dist/gateway/static/root/assets/{sessions-page-B-RGO3N0.js.map → sessions-page-CPkhCy57.js.map} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-Csvl1iL6.js → settings-form-section-DLZDVMEf.js} +2 -2
- package/dist/gateway/static/root/assets/{settings-form-section-Csvl1iL6.js.map → settings-form-section-DLZDVMEf.js.map} +1 -1
- package/dist/gateway/static/root/assets/settings-page-CVPCa0PE.js +4 -0
- package/dist/gateway/static/root/assets/settings-page-CVPCa0PE.js.map +1 -0
- package/dist/gateway/static/root/assets/{skills-page-dHwx2vh0.js → skills-page-DueZ9Qfg.js} +2 -2
- package/dist/gateway/static/root/assets/{skills-page-dHwx2vh0.js.map → skills-page-DueZ9Qfg.js.map} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-Bl5A2Fd_.js → theme-store-CWPq9gW1.js} +2 -2
- package/dist/gateway/static/root/assets/{theme-store-Bl5A2Fd_.js.map → theme-store-CWPq9gW1.js.map} +1 -1
- package/dist/gateway/static/root/assets/{utils-COYrNFF7.js → utils-Cnix55r9.js} +2 -2
- package/dist/gateway/static/root/assets/{utils-COYrNFF7.js.map → utils-Cnix55r9.js.map} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-5WZZaxH3.js → voice-api-key-field-BR3Ut06g.js} +2 -2
- package/dist/gateway/static/root/assets/{voice-api-key-field-5WZZaxH3.js.map → voice-api-key-field-BR3Ut06g.js.map} +1 -1
- package/dist/gateway/static/root/index.html +3 -3
- package/dist/package.js +1 -1
- package/dist/src/browser/providers/browser-ext-install.js +23 -4
- package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
- package/dist/src/cli/commands/tunnel.js +4 -5
- package/dist/src/cli/commands/tunnel.js.map +1 -1
- package/dist/src/config/index.js +2 -2
- package/dist/src/config/rules.js +0 -5
- package/dist/src/config/rules.js.map +1 -1
- package/dist/src/config/schema.d.ts +0 -27
- package/dist/src/config/schema.js +4 -18
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/gateway/auth-rate-limit.d.ts +2 -0
- package/dist/src/gateway/auth-rate-limit.js +9 -3
- package/dist/src/gateway/auth-rate-limit.js.map +1 -1
- package/dist/src/gateway/hono/app.js +19 -13
- package/dist/src/gateway/hono/app.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -1
- package/dist/src/gateway/hono/lib/config-payload.js +1 -2
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/routes/tunnel.js +32 -30
- package/dist/src/gateway/hono/routes/tunnel.js.map +1 -1
- package/dist/src/gateway/host.d.ts +24 -0
- package/dist/src/gateway/host.js +33 -1
- package/dist/src/gateway/host.js.map +1 -1
- package/dist/src/gateway/index.d.ts +1 -1
- package/dist/src/gateway/index.js +2 -2
- package/dist/src/gateway/runtime-config.js +1 -8
- package/dist/src/gateway/runtime-config.js.map +1 -1
- package/dist/src/gateway/security/audit.js +4 -4
- package/dist/src/gateway/security/audit.js.map +1 -1
- package/dist/src/gateway/server.js +2 -3
- package/dist/src/gateway/server.js.map +1 -1
- package/dist/src/gateway/service/types.d.ts +2 -0
- package/dist/src/gateway/service.d.ts +2 -0
- package/dist/src/gateway/service.js +7 -2
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/tunnel/frp-subdomain-host.d.ts +2 -0
- package/dist/src/tunnel/frp-subdomain-host.js +15 -0
- package/dist/src/tunnel/frp-subdomain-host.js.map +1 -0
- package/dist/src/tunnel/gateway-lifecycle.d.ts +0 -4
- package/dist/src/tunnel/gateway-lifecycle.js +9 -11
- package/dist/src/tunnel/gateway-lifecycle.js.map +1 -1
- package/dist/src/tunnel/index.d.ts +2 -4
- package/dist/src/tunnel/index.js +2 -4
- package/dist/src/tunnel/pair-url.js +7 -1
- package/dist/src/tunnel/pair-url.js.map +1 -1
- package/dist/src/tunnel/pairing.d.ts +13 -0
- package/dist/src/tunnel/pairing.js +48 -1
- package/dist/src/tunnel/pairing.js.map +1 -1
- package/dist/src/tunnel/tunnel-config.js +2 -16
- package/dist/src/tunnel/tunnel-config.js.map +1 -1
- package/dist/src/tunnel/tunnel-service.d.ts +1 -10
- package/dist/src/tunnel/tunnel-service.js +7 -60
- package/dist/src/tunnel/tunnel-service.js.map +1 -1
- package/dist/src/tunnel/tunnel-types.d.ts +3 -18
- package/dist/src/tunnel/well-known.d.ts +5 -0
- package/dist/src/tunnel/well-known.js +2 -1
- package/dist/src/tunnel/well-known.js.map +1 -1
- package/package.json +2 -2
- package/dist/gateway/static/root/assets/settings-page-nxAc0ta1.js +0 -4
- package/dist/gateway/static/root/assets/settings-page-nxAc0ta1.js.map +0 -1
- package/dist/src/tunnel/acme-cert-store.d.ts +0 -34
- package/dist/src/tunnel/acme-cert-store.js +0 -184
- package/dist/src/tunnel/acme-cert-store.js.map +0 -1
- package/dist/src/tunnel/acme-client.d.ts +0 -50
- package/dist/src/tunnel/acme-client.js +0 -473
- package/dist/src/tunnel/acme-client.js.map +0 -1
- package/dist/src/tunnel/acme-crypto.d.ts +0 -25
- package/dist/src/tunnel/acme-crypto.js +0 -58
- package/dist/src/tunnel/acme-crypto.js.map +0 -1
- package/dist/src/tunnel/acme-csr.d.ts +0 -5
- package/dist/src/tunnel/acme-csr.js +0 -48
- package/dist/src/tunnel/acme-csr.js.map +0 -1
- package/dist/src/tunnel/tls-server.d.ts +0 -14
- package/dist/src/tunnel/tls-server.js +0 -126
- package/dist/src/tunnel/tls-server.js.map +0 -1
- package/dist/src/tunnel/tunnel-e2e-config.d.ts +0 -11
- package/dist/src/tunnel/tunnel-e2e-config.js +0 -29
- package/dist/src/tunnel/tunnel-e2e-config.js.map +0 -1
package/dist/gateway/static/root/assets/{cron-page-BAQ8xSnJ.js.map → cron-page-BoNRJNVV.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron-page-BAQ8xSnJ.js","names":["Dialog","Button","MessageBundle","CronCopy","CronConfirmActionDialogProps","open","onOpenChange","action","c","onDismiss","onConfirm","CronConfirmActionDialog","t0","$","_c","t1","Symbol","for","t2","delete","runNow","t3","t4","confirmDelete","confirmRun","t5","t6","cancel","t7","undefined","t8","t9","t10","t11","t12","t13","formControlBorderFocusClass","nativeSelectMaxWidthClass","selectControlBaseClass","cn","RUN_HISTORY_FETCH_LIMIT","DEFAULT_SCHEDULE","startOfLocalDay","d","Date","x","setHours","startOfLocalWeekMonday","day","getDay","diff","setDate","getDate","startOfLocalMonth","getFullYear","getMonth","navigateToSessionChat","sessionKey","sk","trim","window","dispatchEvent","CustomEvent","detail","bubbles","inputClassName","disabled","selectClassName","cronRecipientSelectClass","cronToolbarSelectClass","Dialog","Loader2","X","MarkdownView","Button","CronJob","CronJobExecution","cronJobBodyText","navigateToSessionChat","execStatusLabel","formatDeliveryToSummary","formatDuration","formatNextRun","formatTime","truncate","MessageBundle","cn","CronCopy","CronJobDetailDrawerProps","open","onDismiss","detailJob","detailLoading","detailHistory","c","chatWorkingDirNotSet","statusLabels","running","success","failed","cancelled","CronJobDetailDrawer","t0","$","_c","t1","next","t2","Symbol","for","t3","t4","id","name","trim","t5","t6","t7","close","t8","t9","agentProfile","agentProfileDefault","channelLocal","colChat","colDetail","colDuration","colStarted","deliveryLocalOnly","deliveryTarget","deliveryTargetLocalChannel","detailRunHistory","disabled","enabled","messageLabel","mode","modeAgentOption","modeDirectOption","nextRun","noRunsYet","openChat","openChatTitle","scheduleLabel","status","timeLabels","workingDirectoryLabel","schedule","sessionTarget","agentId","workingDirectory","delivery","channel","to","next_run","length","map","row","startedAt","duration","summary","error","sessionKey","t10","t11","undefined","t12","useDirectoryPicker","DirectoryPickerTrigger","WorkingDirectoryPickerModal","MessageBundle","Props","value","onChange","path","Promise","disabled","wd","placeholder","title","maxWidthClass","clearLabel","onClear","DirectoryPickerField","t0","$","_c","t1","initialPath","onPicked","picker","t2","trim","trimmed","resolvedTitle","chooseFolder","notSet","selectWorkingDirectory","t3","picking","t4","t5","pick","t6","t7","t8","confirmPick","hasNativePicker","modalOpen","setModalOpen","undefined","t9","Dialog","Eye","RefreshCw","SquarePen","X","MarkdownEditor","MarkdownView","Button","ChatAgentOption","ModelSelector","DirectoryPickerField","ChannelStatus","SessionChatId","CronSchedulePicker","formatRecipientOptionLabel","cronRecipientSelectClass","inputClassName","selectClassName","agentListDisplayName","MessageBundle","cn","CronCopy","CronJobFormDialogProps","open","onRequestClose","c","chatM","agentsMessages","isDark","channels","sessionChatIds","cronAgentSelectOptions","defaultModelResolver","formMode","formJobId","formName","onFormNameChange","v","formSchedule","onFormScheduleChange","formSubmitting","formSessionTarget","onFormSessionTargetChange","target","defaultModelFallback","currentModel","formAgentLocalOnly","onFormAgentLocalOnlyChange","formModel","onFormModelUserChange","id","formAgentId","onFormAgentIdChange","formWorkingDirectory","onFormWorkingDirectoryChange","formChannel","onFormChannelChange","channel","formChatId","onFormChatIdChange","formMessage","onFormMessageChange","formMessageMdMode","onSetMessageMdMode","mode","messageEditorNonce","needsDeliveryChat","showChannelPicker","canSubmit","onSubmit","onRefreshRecipients","CronJobFormDialog","props","$","_c","t0","o","t1","Symbol","for","t2","editJob","addJob","t3","t4","t5","close","t6","t7","name","t8","t9","e_0","e","value","t10","namePlaceholder","t11","t12","schedulePicker","t13","t14","t15","e_1","trim","t16","modeDirectOption","t17","modeAgentOption","t18","t19","modeDirect","modeAgent","t20","t21","t22","agentLocalOnly","agentLocalOnlyHint","agentProfile","agentProfileDefault","agentProfileHint","model","workingDirectoryHint","workingDirectoryLabel","workingDirectoryReset","modelPlaceholder","modelSearchPlaceholder","modelNoMatches","e_2","map","ag","workingDirectory","notSet","e_3","checked","t23","channelLocal","enterManuallyOrSelect","lastActiveLabels","noRecentChats","noRecentChatsOption","recipient","recipientPlaceholder","refreshList","refreshRecipientHint","selectRecipient","e_4","v_0","_temp2","e_5","e_6","v_1","length","item","chatId","t24","message","t25","t26","t27","t28","t29","messageEdit","t30","t31","t32","t33","t34","messagePreview","t35","t36","t37","t38","t39","messagePlaceholder","t40","t41","messageMarkdownHint","t42","t43","t44","cancel","t45","t46","loading","save","create","t47","t48","t49","_temp","t50","ch","enabled","preventDefault","segmentedThumbActiveClassName","segmentedThumbBaseClassName","segmentedTrackClassName","CronJob","cronToolbarSelectClass","MessageBundle","cn","CronCopy","CronMainToolbarProps","c","mainTab","onMainTabChange","tab","jobSort","onJobSortChange","sort","historyRange","onHistoryRangeChange","range","historyJobFilter","onHistoryJobFilterChange","jobId","historyStatusFilter","onHistoryStatusFilterChange","status","jobs","CronMainToolbar","t0","$","_c","t1","title","t2","t3","t4","t5","t6","tabMyTasks","t7","t8","t9","t10","t11","tabSystemTasks","t12","t13","t14","t15","t16","tabRunHistory","t17","t18","t19","t20","sortCreatedAsc","sortCreatedDesc","e","target","value","t21","execStatusCancelled","execStatusFailed","execStatusRunning","execStatusSuccess","filterAllStatuses","filterAllTasks","historyRangeDay","historyRangeMonth","historyRangeWeek","runHistoryTitle","const","map","r","e_0","_temp","e_1","t22","t23","j","id","name","LayoutTemplate","Plus","RefreshCw","Button","MessageBundle","cn","CronCopy","CronPageHeaderActionsProps","c","loading","runHistoryLoading","onRefresh","onOpenTemplatePicker","onAddJob","CronPageHeaderActions","t0","$","_c","busy","t1","refresh","t2","t3","t4","t5","t6","t7","t8","Symbol","for","t9","fromTemplate","t10","t11","addJob","t12","Clock","Loader2","RefreshCw","Button","CronJob","CronRunHistoryRow","navigateToSessionChat","execStatusLabel","formatDuration","formatTime","truncate","MessageBundle","cn","CronCopy","CronRunHistorySectionProps","c","runHistoryLoading","runHistory","filteredRunHistory","jobs","onRefreshHistory","onOpenJobDetail","job","statusLabels","running","success","failed","cancelled","CronRunHistorySection","t0","$","_c","t1","tabRunHistory","t2","runHistoryHint","t3","t4","refresh","t5","t6","t7","t8","t9","t10","t11","t12","colChat","colDetail","colDuration","colJob","colStarted","emptyHistoryHint","emptyHistoryTitle","noRunsYet","openChat","openChatTitle","status","length","map","row","id","startedAt","some","j_0","j","jobId","find","x","jobName","duration","summary","error","sessionKey","trim","t13","DropdownMenu","Clock","MoreVertical","MarkdownView","Button","MutableRefObject","CronJob","cronJobBodyText","formatScheduleBadge","MessageBundle","cn","CronCopy","CronJobCardProps","job","c","localeTag","scheduleBadgeLabels","absorbCardClickJobIdRef","scheduleAbsorbNextMenuCardClick","jobId","onOpenDetail","onToggle","enabled","onEdit","onRunNow","onDelete","CronJobCard","t0","$","_c","t1","Symbol","for","t2","t3","current","id","e","key","preventDefault","t4","t5","t6","t7","e_0","stopPropagation","t8","t9","t10","t11","jobCardMenuAria","_temp","t12","t13","edit","t14","t15","runNow","t16","t17","delete","t18","_temp2","t19","t20","t21","name","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","e_2","e_1","ChevronRight","Info","Loader2","MutableRefObject","Link","Button","CronJob","CronJobCard","HeartbeatSettingsState","formatIntervalMsLabel","messages","MessageBundle","StoredLanguage","cn","CronCopy","CronSystemTasksPanelProps","c","language","localeTag","scheduleBadgeLabels","loading","sortedSystemJobs","heartbeat","keepAwake","wakeSupported","onWakeUnsupportedClick","onKeepAwakeToggle","absorbCardClickJobIdRef","scheduleAbsorbNextMenuCardClick","jobId","onOpenDetail","job","onToggle","enabled","onEdit","onRunNow","onDelete","CronSystemTasksPanel","t0","$","_c","t1","t10","t11","t12","t2","t3","t4","t5","t6","t7","t8","t9","disabled","systemHeartbeatEvery","systemHeartbeatHint","systemHeartbeatInterval","systemHeartbeatSettingsLink","systemHeartbeatStatus","systemHeartbeatTitle","systemTasksIntro","tabSystemTasks","wakeBanner","wakeLockUnavailable","intervalMs","hbInterval","heartbeatSettings","intervalPresets","t13","Symbol","for","t14","t15","t16","t17","undefined","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32","t33","replace","systemDreamingTitle","systemDreamingSettingsLink","systemDreamingHint","length","systemDreamingEmpty","map","id","MessageBundle","CronTemplateCopy","title","description","prompt","getCronTemplateCopy","cron","templateId","raw","templates","undefined","row","Record","trim","CRON_TEMPLATE_CATEGORIES","const","CronTemplateCategory","CronJobTemplateDef","templateId","category","defaultSchedule","defaultSessionTarget","CRON_JOB_TEMPLATES","CronTemplateId","cronTemplateById","id","find","t","Button","MessageBundle","cn","getCronTemplateCopy","CRON_JOB_TEMPLATES","CRON_TEMPLATE_CATEGORIES","CronTemplateCategory","formatScheduleBadge","ScheduleBadgeLabels","CronTemplateFilter","Props","cron","localeTag","scheduleBadgeLabels","categoryFilter","onCategoryFilterChange","next","onSelectTemplate","templateId","CronTemplateLibrary","props","$","_c","t0","filtered","filter","t","category","t1","fromTemplate","t2","t3","t4","templateFilterAll","t5","templateCategories","map","cat","t6","length","templatesEmptyHint","t_0","copy","badge","schedule","defaultSchedule","timezone","undefined","next_run","title","description","Info","Loader2","MutableRefObject","Button","CronJob","CronJobCard","CronTemplateFilter","CronTemplateLibrary","MessageBundle","cn","CronCopy","CronTasksPanelProps","c","localeTag","scheduleBadgeLabels","loading","jobsCount","sortedJobs","templateCategoryFilter","onTemplateCategoryFilterChange","v","onSelectTemplate","templateId","keepAwake","wakeSupported","onWakeUnsupportedClick","onKeepAwakeToggle","absorbCardClickJobIdRef","scheduleAbsorbNextMenuCardClick","jobId","onOpenDetail","job","onToggle","enabled","onEdit","onAddJob","onRunNow","onDelete","CronTasksPanel","t0","$","_c","t1","tabMyTasks","t2","Symbol","for","t3","wakeBanner","t4","t5","t6","wakeLockUnavailable","undefined","t7","t8","t9","t10","t11","t12","t13","t14","t15","emptyStateCta","map","id","j","j_0","en","t16","Dialog","X","Button","CronTemplateFilter","CronTemplateLibrary","MessageBundle","CronCopy","CronTemplatePickerDialogProps","open","onOpenChange","c","localeTag","scheduleBadgeLabels","categoryFilter","onCategoryFilterChange","v","onSelectTemplate","templateId","CronTemplatePickerDialog","t0","$","_c","t1","Symbol","for","t2","fromTemplate","t3","t4","close","t5","t6","t7","_temp","t8","e","preventDefault","useCallback","useMemo","useReducer","useRef","ChatAgentOption","cronJobBodyText","getSessionChatIds","ChannelStatus","CronJob","SessionChatId","DEFAULT_SCHEDULE","getCronTemplateCopy","cronTemplateById","messages","makeMessages","useAsyncResource","FormMode","FormSessionTarget","FormMessageMdMode","FormState","formOpen","formMode","formJobId","formName","formSchedule","formChannel","formChatId","formMessage","formMessageMdMode","messageEditorNonce","formSessionTarget","formAgentId","formAgentLocalOnly","formWorkingDirectory","formModel","formSubmitting","FormAction","type","patch","Partial","state","mode","initialFormState","formReducer","action","buildOpenFormState","job","defaultModelForForm","base","id","name","schedule","String","trim","bodyText","sessionTarget","agentId","toLowerCase","workingDirectory","fromPayload","payload","kind","model","stored","hasLocalChannel","delivery","channel","agentLocalOnly","to","parts","split","knownChannels","length","includes","slice","join","useCronJobForm","opts","m","ReturnType","channels","chatAgents","form","dispatch","undefined","formModelUserTouched","validChannelSet","Set","map","x","has","current","next","sessionChatIdsResource","enabled","initial","errorData","sessionChatIds","data","cronAgentSelectOptions","ids","a","out","extra","push","needsDeliveryChat","showChannelPicker","canSubmit","Boolean","openForm","setMessageMdMode","applyCronTemplate","templateId","def","copy","cron","title","defaultSchedule","prompt","defaultSessionTarget","closeForm","handleFormSessionTargetChange","target","defaultModelFallback","currentModel","handleFormChannelChange","v","handleFormModelUserChange","refreshRecipientsList","then","setData","patchForm","setFormName","setFormSchedule","setFormChatId","setFormMessage","setFormAgentId","setFormAgentLocalOnly","setFormWorkingDirectory","setFormSubmitting","useCallback","useEffect","useRef","useState","isElectronCronDisplayWakeAvailable","WakeMode","useCronKeepAwake","opts","onUnavailable","keepAwake","setKeepAwake","wakeLockRef","WakeLockSentinel","wakeModeRef","keepAwakeRef","wakeSupported","navigator","featureAvailable","releaseWakeLock","current","window","electronAPI","cron","setDisplaySleepPrevented","release","acquireWakeLock","electronWake","undefined","sentinel","wakeLock","request","addEventListener","onVis","document","visibilityState","removeEventListener","useCallback","useEffect","useMemo","useState","fetchChatAgents","ChatAgentOption","getAllRunsHistory","getChannels","getConfig","getModels","listJobs","ChannelStatus","CronJob","CronRunHistoryRow","isDreamingManagedCronJob","RUN_HISTORY_FETCH_LIMIT","startOfLocalDay","startOfLocalMonth","startOfLocalWeekMonday","fetchGatewayConfigSwrResponse","normalizeHeartbeatFromConfig","FailMessages","failedToLoadJobs","HistoryRange","JobSort","useCronPageData","opts","hasToken","failMessages","isHistoryTab","jobs","setJobs","channels","setChannels","availableModels","setAvailableModels","id","name","provider","defaultModel","setDefaultModel","chatAgents","setChatAgents","gatewayConfigRaw","setGatewayConfigRaw","runHistory","setRunHistory","runHistoryLoading","setRunHistoryLoading","loading","setLoading","error","setError","loadJobs","list","e","Error","message","loadAux","ch","mods","cfg","cfgFull","agentsPayload","Promise","all","catch","model","payload","config","items","loadRunHistoryOnly","rows","onReload","then","r","window","addEventListener","removeEventListener","userCronJobs","filter","j","systemCronJobs","heartbeatFromConfig","refreshAll","sortJobsByCreated","arr","sort","next","a","b","ta","Date","created_at","getTime","tb","filterRunHistory","range","jobFilter","statusFilter","now","from","row","startedAt","jobId","status","useCallback","useEffect","useLayoutEffect","useMemo","useReducer","useRef","uiPatchReducer","useLocation","addJob","getHistory","getJob","removeJob","runJob","toggleJob","updateJob","CronDelivery","CronJob","CronJobExecution","CronPayload","CronConfirmActionDialog","CronJobDetailDrawer","CronJobFormDialog","CronMainToolbar","CronPageHeaderActions","CronRunHistorySection","CronSystemTasksPanel","CronTasksPanel","CronTemplateFilter","CronTemplatePickerDialog","useCronJobForm","useCronKeepAwake","filterRunHistory","sortJobsByCreated","useCronPageData","HistoryRange","JobSort","messages","MessageBundle","useGatewayStore","useLocaleStore","usePageHeaderStore","useThemeStore","CronPageUi","mainTab","jobSort","historyRange","historyJobFilter","historyStatusFilter","detailOpen","detailJob","detailHistory","detailLoading","confirmOpen","templatePickerOpen","templateCategoryFilter","initialCronPageUi","CronPage","language","s","m","c","cron","chatM","chat","token","st","hasToken","Boolean","resolvedTheme","resolved","isDark","localeTag","ui","dispatch","data","failMessages","failedToLoadJobs","isHistoryTab","setError","keepAwakeHook","onUnavailable","wakeLockUnavailable","defaultModelForForm","defaultModel","availableModels","length","id","form","channels","chatAgents","confirmActionRef","confirmJobIdRef","openConfirm","action","jobId","current","type","patch","dismissConfirm","absorbCardClickJobIdRef","scheduleAbsorbNextMenuCardClick","window","setTimeout","onSelectTemplate","templateId","ok","applyCronTemplate","submitForm","formName","trim","nameRequired","formSchedule","formMessage","scheduleRequired","needsDeliveryChat","formChatId","chatIdRequired","setFormSubmitting","message","delivery","formSessionTarget","formAgentLocalOnly","mode","formChannel","channel","to","payload","kind","formModel","model","text","modelTrimmed","agentIdTrim","formAgentId","toLowerCase","agentIdForEdit","wdTrim","formWorkingDirectory","jobData","name","schedule","sessionTarget","undefined","formMode","agentId","workingDirectory","formJobId","sched","rest","closeForm","loadJobs","loadAux","e","Error","failedToUpdateJob","failedToCreateJob","openDetail","job","full","closeDetail","openTemplatePicker","onToggle","enabled","Promise","all","failedToToggleJob","runConfirm","loadRunHistoryOnly","actionFailed","onKey","KeyboardEvent","key","formOpen","document","addEventListener","removeEventListener","statusLabels","running","execStatusRunning","success","execStatusSuccess","failed","execStatusFailed","cancelled","execStatusCancelled","sortedUserJobs","userCronJobs","sortedSystemJobs","systemCronJobs","filteredRunHistory","runHistory","scheduleBadgeLabels","scheduleBadge","pathname","inSettingsShell","startsWith","loading","runHistoryLoading","refreshAll","openForm","needToken","error","title","subtitle","tab","sort","range","filter","jobs","keepAwake","featureAvailable","setKeepAwake","v","j","en","heartbeatFromConfig","agentsSettings","sessionChatIds","cronAgentSelectOptions","setFormName","setFormSchedule","formSubmitting","handleFormSessionTargetChange","setFormAgentLocalOnly","handleFormModelUserChange","setFormAgentId","setFormWorkingDirectory","handleFormChannelChange","setFormChatId","setFormMessage","formMessageMdMode","setMessageMdMode","messageEditorNonce","showChannelPicker","canSubmit","refreshRecipientsList","openNext","const","notSet","open","CronPageHeaderRegistration","t0","$","_c","onRefresh","onOpenTemplatePicker","onAddJob","t1","setPageHeader","_temp","clearPageHeader","_temp2","t2","cronHeaderEnd","t3","t4","startExtra","main","end","s_0"],"sources":["../../../../../web/src/features/cron/cron-confirm-action-dialog.tsx","../../../../../web/src/features/cron/cron-page-lib.ts","../../../../../web/src/features/cron/cron-job-detail-drawer.tsx","../../../../../web/src/features/fs/directory-picker-field.tsx","../../../../../web/src/features/cron/cron-job-form-dialog.tsx","../../../../../web/src/features/cron/cron-main-toolbar.tsx","../../../../../web/src/features/cron/cron-page-header-actions.tsx","../../../../../web/src/features/cron/cron-run-history-section.tsx","../../../../../web/src/features/cron/cron-job-card.tsx","../../../../../web/src/features/cron/cron-system-tasks-panel.tsx","../../../../../web/src/features/cron/cron-template-i18n.ts","../../../../../web/src/features/cron/cron-templates.ts","../../../../../web/src/features/cron/cron-template-library.tsx","../../../../../web/src/features/cron/cron-tasks-panel.tsx","../../../../../web/src/features/cron/cron-template-picker-dialog.tsx","../../../../../web/src/features/cron/use-cron-job-form.ts","../../../../../web/src/features/cron/use-cron-keep-awake.ts","../../../../../web/src/features/cron/use-cron-page-data.ts","../../../../../web/src/features/cron/cron-page.tsx"],"sourcesContent":["import * as Dialog from '@radix-ui/react-dialog';\n\nimport { Button } from '@/components/ui/button';\nimport type { MessageBundle } from '@/i18n/messages';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronConfirmActionDialogProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n action: 'delete' | 'run' | null;\n c: CronCopy;\n onDismiss: () => void;\n onConfirm: () => void;\n};\n\nexport function CronConfirmActionDialog({\n open,\n onOpenChange,\n action,\n c,\n onDismiss,\n onConfirm,\n}: CronConfirmActionDialogProps) {\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"xopc-dialog-overlay fixed inset-0 z-[70] bg-scrim\" />\n <div className=\"fixed inset-0 z-[70] flex items-center justify-center p-4 pointer-events-none\">\n <Dialog.Content className=\"xopc-dialog-content-pane pointer-events-auto relative w-full max-w-md rounded-xl border border-edge bg-surface-panel p-4 shadow-popover dark:border-edge\">\n <Dialog.Title className=\"text-base font-semibold text-fg\">\n {action === 'delete' ? c.delete : c.runNow}\n </Dialog.Title>\n <p className=\"mt-2 text-sm text-fg-muted\">\n {action === 'delete' ? c.confirmDelete : c.confirmRun}\n </p>\n <div className=\"mt-4 flex justify-end gap-2\">\n <Button type=\"button\" variant=\"secondary\" onClick={onDismiss}>\n {c.cancel}\n </Button>\n <Button\n type=\"button\"\n variant=\"primary\"\n className={action === 'delete' ? 'bg-red-600 hover:bg-red-700' : undefined}\n onClick={() => void onConfirm()}\n >\n {action === 'delete' ? c.delete : c.runNow}\n </Button>\n </div>\n </Dialog.Content>\n </div>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import {\n formControlBorderFocusClass,\n nativeSelectMaxWidthClass,\n selectControlBaseClass,\n} from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\n\nexport const RUN_HISTORY_FETCH_LIMIT = 400;\n\nexport const DEFAULT_SCHEDULE = '*/5 * * * *';\n\nexport function startOfLocalDay(d: Date): Date {\n const x = new Date(d);\n x.setHours(0, 0, 0, 0);\n return x;\n}\n\n/** Week starts on Monday (local). */\nexport function startOfLocalWeekMonday(d: Date): Date {\n const x = startOfLocalDay(d);\n const day = x.getDay();\n const diff = day === 0 ? -6 : 1 - day;\n x.setDate(x.getDate() + diff);\n return x;\n}\n\nexport function startOfLocalMonth(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), 1, 0, 0, 0, 0);\n}\n\nexport function navigateToSessionChat(sessionKey: string | undefined | null): void {\n const sk = sessionKey?.trim();\n if (!sk) return;\n window.dispatchEvent(\n new CustomEvent('navigate-to-chat', { detail: { sessionKey: sk }, bubbles: true }),\n );\n}\n\nexport function inputClassName(disabled?: boolean): string {\n return cn(\n 'w-full rounded-md border border-edge bg-surface-base px-3 py-2 text-sm text-fg placeholder:text-fg-disabled',\n formControlBorderFocusClass,\n disabled && 'cursor-not-allowed opacity-60',\n );\n}\n\nexport function selectClassName(): string {\n return cn(selectControlBaseClass, nativeSelectMaxWidthClass);\n}\n\nexport const cronRecipientSelectClass = cn(\n selectControlBaseClass,\n 'w-full text-xs sm:w-auto sm:min-w-[11rem] sm:max-w-[17rem] sm:shrink-0',\n);\n\n/** Toolbar filters: avoid `w-full` from {@link nativeSelectMaxWidthClass} so Day/Week/Month + selects stay one row. */\nexport const cronToolbarSelectClass = cn(\n selectControlBaseClass,\n 'w-auto min-w-[9rem] max-w-[14rem] shrink-0 text-xs',\n);\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { Loader2, X } from 'lucide-react';\n\nimport { MarkdownView } from '@/components/markdown/markdown-view';\nimport { Button } from '@/components/ui/button';\nimport type { CronJob, CronJobExecution } from '@/features/cron/cron-api';\nimport { cronJobBodyText } from '@/features/cron/cron-api';\nimport { navigateToSessionChat } from '@/features/cron/cron-page-lib';\nimport {\n execStatusLabel,\n formatDeliveryToSummary,\n formatDuration,\n formatNextRun,\n formatTime,\n truncate,\n} from '@/features/cron/cron-utils';\nimport type { MessageBundle } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronJobDetailDrawerProps = {\n open: boolean;\n onDismiss: () => void;\n detailJob: CronJob | null;\n detailLoading: boolean;\n detailHistory: CronJobExecution[];\n c: CronCopy;\n chatWorkingDirNotSet: string;\n statusLabels: {\n running: string;\n success: string;\n failed: string;\n cancelled: string;\n };\n};\n\nexport function CronJobDetailDrawer({\n open,\n onDismiss,\n detailJob,\n detailLoading,\n detailHistory,\n c,\n chatWorkingDirNotSet,\n statusLabels,\n}: CronJobDetailDrawerProps) {\n return (\n <Dialog.Root\n open={open}\n onOpenChange={(next) => {\n if (!next) onDismiss();\n }}\n >\n <Dialog.Portal>\n <Dialog.Overlay className=\"xopc-dialog-overlay fixed inset-0 z-[60] bg-scrim\" />\n <Dialog.Content\n className={cn(\n 'xopc-drawer-right fixed right-0 top-0 z-[60] flex size-full max-w-lg flex-col border-l border-edge bg-surface-panel shadow-popover outline-none',\n 'dark:border-edge',\n )}\n aria-describedby={undefined}\n >\n <div className=\"flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3\">\n <Dialog.Title className=\"min-w-0 truncate text-base font-semibold text-fg\">\n {detailJob?.name?.trim() || detailJob?.id || '—'}\n </Dialog.Title>\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"size-9 shrink-0 p-0\" aria-label={c.close}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-3\">\n {detailLoading ? (\n <div className=\"flex justify-center py-16\">\n <Loader2 className=\"size-8 animate-spin text-accent\" strokeWidth={1.75} />\n </div>\n ) : detailJob ? (\n <>\n <dl className=\"space-y-3 text-sm\">\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.scheduleLabel}</dt>\n <dd className=\"mt-1 font-mono text-fg\">\n <code>{detailJob.schedule}</code>\n </dd>\n </div>\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.messageLabel}</dt>\n <dd className=\"mt-1 min-w-0 break-words text-fg\">\n <MarkdownView content={cronJobBodyText(detailJob)} compact className=\"text-sm\" />\n </dd>\n </div>\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.mode}</dt>\n <dd className=\"mt-1 text-fg\">\n {detailJob.sessionTarget === 'isolated' ? c.modeAgentOption : c.modeDirectOption}\n </dd>\n </div>\n {detailJob.sessionTarget === 'isolated' ? (\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.agentProfile}</dt>\n <dd className=\"mt-1 font-mono text-sm text-fg\">\n {detailJob.agentId?.trim() ? detailJob.agentId.trim() : c.agentProfileDefault}\n </dd>\n </div>\n ) : null}\n {detailJob.sessionTarget === 'isolated' ? (\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.workingDirectoryLabel}</dt>\n <dd className=\"mt-1 break-all font-mono text-xs text-fg\">\n {detailJob.workingDirectory?.trim()\n ? detailJob.workingDirectory.trim()\n : chatWorkingDirNotSet}\n </dd>\n </div>\n ) : null}\n {detailJob.delivery?.channel === 'local' ||\n (detailJob.sessionTarget === 'isolated' && !detailJob.delivery?.to) ? (\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.deliveryTarget}</dt>\n <dd className=\"mt-1 text-fg\">\n {detailJob.delivery?.channel === 'local'\n ? c.deliveryTargetLocalChannel\n : c.deliveryLocalOnly}\n </dd>\n </div>\n ) : detailJob.delivery?.to ? (\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.deliveryTarget}</dt>\n <dd className=\"mt-1 break-words text-fg\">\n <code className=\"text-xs\">{detailJob.delivery?.channel ?? ''}</code>\n {' → '}\n {formatDeliveryToSummary(detailJob, c.channelLocal)}\n </dd>\n </div>\n ) : null}\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.status}</dt>\n <dd className=\"mt-1 text-fg\">{detailJob.enabled ? c.enabled : c.disabled}</dd>\n </div>\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.nextRun}</dt>\n <dd className=\"mt-1 text-fg\">\n {detailJob.next_run ? formatNextRun(detailJob.next_run, c.timeLabels) : '—'}\n </dd>\n </div>\n </dl>\n <h3 className=\"mt-6 text-sm font-semibold text-fg\">{c.detailRunHistory}</h3>\n {detailHistory.length === 0 ? (\n <p className=\"mt-2 text-sm text-fg-muted\">{c.noRunsYet}</p>\n ) : (\n <div className=\"mt-2 overflow-x-auto\">\n <table className=\"w-full border-collapse text-left text-xs\">\n <thead>\n <tr className=\"border-b border-edge text-fg-muted\">\n <th className=\"py-1.5 pr-2 font-medium\">{c.colStarted}</th>\n <th className=\"py-1.5 pr-2 font-medium\">{c.status}</th>\n <th className=\"py-1.5 pr-2 font-medium\">{c.colDuration}</th>\n <th className=\"py-1.5 pr-2 font-medium\">{c.colDetail}</th>\n <th className=\"py-1.5 font-medium\">{c.colChat}</th>\n </tr>\n </thead>\n <tbody>\n {detailHistory.map((row) => (\n <tr key={row.id} className=\"border-b border-edge/60\">\n <td className=\"whitespace-nowrap py-1.5 pr-2 text-fg\">\n <time dateTime={row.startedAt}>{formatTime(row.startedAt)}</time>\n </td>\n <td className=\"py-1.5 pr-2\">\n <span\n className={cn(\n 'inline-flex rounded px-1.5 py-0.5 font-medium',\n row.status === 'success' &&\n 'bg-emerald-500/15 text-emerald-800 dark:text-emerald-300',\n row.status === 'failed' && 'bg-red-500/15 text-red-800 dark:text-red-300',\n )}\n >\n {execStatusLabel(row.status, statusLabels)}\n </span>\n </td>\n <td className=\"py-1.5 pr-2 text-fg-muted\">{formatDuration(row.duration)}</td>\n <td\n className=\"max-w-[8rem] truncate py-1.5 pr-2 text-fg-muted\"\n title={row.summary || row.error || ''}\n >\n {truncate(row.summary || row.error, 120)}\n </td>\n <td className=\"whitespace-nowrap py-1.5\">\n {row.sessionKey?.trim() ? (\n <button\n type=\"button\"\n className=\"text-xs font-medium text-accent hover:underline\"\n title={c.openChatTitle}\n aria-label={c.openChatTitle}\n onClick={() => navigateToSessionChat(row.sessionKey)}\n >\n {c.openChat}\n </button>\n ) : (\n <span className=\"text-fg-disabled\">—</span>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </>\n ) : null}\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import { useDirectoryPicker } from '@/features/fs/use-directory-picker';\nimport { DirectoryPickerTrigger } from '@/features/fs/directory-picker-trigger';\nimport { WorkingDirectoryPickerModal } from '@/features/fs/working-directory-picker-modal';\nimport type { MessageBundle } from '@/i18n/messages';\n\ntype Props = {\n value: string;\n onChange: (path: string) => void | Promise<void>;\n disabled?: boolean;\n wd: MessageBundle['chat']['workingDirectory'];\n placeholder?: string;\n title?: string;\n maxWidthClass?: string;\n /** When set, show a clear link next to the trigger. */\n clearLabel?: string;\n onClear?: () => void;\n};\n\nexport function DirectoryPickerField({\n value,\n onChange,\n disabled,\n wd,\n placeholder,\n title,\n maxWidthClass,\n clearLabel,\n onClear,\n}: Props) {\n const picker = useDirectoryPicker({ initialPath: value, onPicked: onChange });\n\n const trimmed = value.trim();\n const resolvedTitle =\n title ??\n (trimmed\n ? `${trimmed}\\n${wd.chooseFolder}`\n : `${placeholder ?? wd.notSet}\\n${wd.selectWorkingDirectory}`);\n\n return (\n <>\n <div className=\"flex flex-wrap items-center gap-2\">\n <DirectoryPickerTrigger\n value={value}\n onPick={picker.pick}\n disabled={disabled || picker.picking}\n placeholder={placeholder ?? wd.notSet}\n title={resolvedTitle}\n maxWidthClass={maxWidthClass}\n />\n {clearLabel && trimmed && onClear ? (\n <button\n type=\"button\"\n disabled={disabled || picker.picking}\n className=\"text-xs font-medium text-accent hover:underline disabled:opacity-50\"\n onClick={onClear}\n >\n {clearLabel}\n </button>\n ) : null}\n </div>\n\n {!picker.hasNativePicker ? (\n <WorkingDirectoryPickerModal\n open={picker.modalOpen}\n onOpenChange={picker.setModalOpen}\n initialAbsolutePath={trimmed || undefined}\n onConfirm={picker.confirmPick}\n wd={wd}\n />\n ) : null}\n </>\n );\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { Eye, RefreshCw, SquarePen, X } from 'lucide-react';\n\nimport { MarkdownEditor } from '@/components/markdown/markdown-editor';\nimport { MarkdownView } from '@/components/markdown/markdown-view';\nimport { Button } from '@/components/ui/button';\nimport type { ChatAgentOption } from '@/features/chat/agent-selection/chat-agents-api';\nimport { ModelSelector } from '@/features/chat/model/model-selector';\nimport { DirectoryPickerField } from '@/features/fs/directory-picker-field';\nimport type { ChannelStatus, SessionChatId } from '@/features/cron/cron-api';\nimport { CronSchedulePicker } from '@/features/cron/cron-schedule-form';\nimport { formatRecipientOptionLabel } from '@/features/cron/cron-utils';\nimport {\n cronRecipientSelectClass,\n inputClassName,\n selectClassName,\n} from '@/features/cron/cron-page-lib';\nimport { agentListDisplayName } from '@/features/settings/agents/agent-display-names';\nimport type { MessageBundle } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronJobFormDialogProps = {\n open: boolean;\n onRequestClose: () => void;\n c: CronCopy;\n chatM: MessageBundle['chat'];\n agentsMessages: MessageBundle['agentsSettings'];\n isDark: boolean;\n channels: ChannelStatus[];\n sessionChatIds: SessionChatId[];\n cronAgentSelectOptions: ChatAgentOption[];\n defaultModelResolver: () => string;\n formMode: 'add' | 'edit';\n formJobId: string | null;\n formName: string;\n onFormNameChange: (v: string) => void;\n formSchedule: string;\n onFormScheduleChange: (v: string) => void;\n formSubmitting: boolean;\n formSessionTarget: 'main' | 'isolated';\n onFormSessionTargetChange: (\n target: 'main' | 'isolated',\n defaultModelFallback: () => string,\n currentModel: string,\n ) => void;\n formAgentLocalOnly: boolean;\n onFormAgentLocalOnlyChange: (v: boolean) => void;\n formModel: string;\n onFormModelUserChange: (id: string) => void;\n formAgentId: string;\n onFormAgentIdChange: (v: string) => void;\n formWorkingDirectory: string;\n onFormWorkingDirectoryChange: (v: string) => void;\n formChannel: string;\n onFormChannelChange: (channel: string) => void;\n formChatId: string;\n onFormChatIdChange: (v: string) => void;\n formMessage: string;\n onFormMessageChange: (v: string) => void;\n formMessageMdMode: 'edit' | 'preview';\n onSetMessageMdMode: (mode: 'edit' | 'preview') => void;\n messageEditorNonce: number;\n needsDeliveryChat: boolean;\n showChannelPicker: boolean;\n canSubmit: boolean;\n onSubmit: () => void;\n onRefreshRecipients: () => void;\n};\n\nexport function CronJobFormDialog(props: CronJobFormDialogProps) {\n const {\n open,\n onRequestClose,\n c,\n chatM,\n agentsMessages,\n isDark,\n channels,\n sessionChatIds,\n cronAgentSelectOptions,\n defaultModelResolver,\n formMode,\n formJobId,\n formName,\n onFormNameChange,\n formSchedule,\n onFormScheduleChange,\n formSubmitting,\n formSessionTarget,\n onFormSessionTargetChange,\n formAgentLocalOnly,\n onFormAgentLocalOnlyChange,\n formModel,\n onFormModelUserChange,\n formAgentId,\n onFormAgentIdChange,\n formWorkingDirectory,\n onFormWorkingDirectoryChange,\n formChannel,\n onFormChannelChange,\n formChatId,\n onFormChatIdChange,\n formMessage,\n onFormMessageChange,\n formMessageMdMode,\n onSetMessageMdMode,\n messageEditorNonce,\n needsDeliveryChat,\n showChannelPicker,\n canSubmit,\n onSubmit,\n onRefreshRecipients,\n } = props;\n\n return (\n <>\n <Dialog.Root open={open} onOpenChange={(o) => !o && onRequestClose()}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"xopc-dialog-overlay fixed inset-0 z-[60] bg-scrim\" />\n <div className=\"fixed inset-0 z-[60] flex items-center justify-center p-4 pointer-events-none\">\n <Dialog.Content\n className=\"xopc-dialog-content-pane pointer-events-auto relative flex max-h-[min(90vh,800px)] w-full max-w-md flex-col rounded-xl border border-edge bg-surface-panel shadow-popover outline-none sm:max-w-lg lg:max-w-xl dark:border-edge\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <div className=\"flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3\">\n <Dialog.Title className=\"text-base font-semibold text-fg\">\n {formMode === 'edit' ? c.editJob : c.addJob}\n </Dialog.Title>\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"size-9 shrink-0 p-0\" aria-label={c.close}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-3\">\n <div className=\"flex flex-col gap-3\">\n <label className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-fg-muted\">{c.name}</span>\n <input\n type=\"text\"\n className={inputClassName()}\n value={formName}\n onChange={(e) => onFormNameChange(e.target.value)}\n placeholder={c.namePlaceholder}\n />\n </label>\n <CronSchedulePicker\n value={formSchedule}\n onChange={onFormScheduleChange}\n disabled={formSubmitting}\n labels={c.schedulePicker}\n />\n <label className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-fg-muted\">{c.mode}</span>\n <select\n className={selectClassName()}\n value={formSessionTarget}\n onChange={(e) => {\n const v = e.target.value as 'main' | 'isolated';\n onFormSessionTargetChange(v, defaultModelResolver, formModel.trim());\n }}\n >\n <option value=\"main\">{c.modeDirectOption}</option>\n <option value=\"isolated\">{c.modeAgentOption}</option>\n </select>\n <p className=\"text-xs text-fg-muted\">\n {formSessionTarget === 'main' ? c.modeDirect : c.modeAgent}\n </p>\n </label>\n {formSessionTarget === 'isolated' ? (\n <>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-fg-muted\">{c.model}</span>\n <ModelSelector\n value={formModel}\n placeholder={chatM.modelPlaceholder}\n searchPlaceholder={chatM.modelSearchPlaceholder}\n noMatches={chatM.modelNoMatches}\n className=\"w-full max-w-none min-w-0\"\n popoverContentClassName=\"z-[70]\"\n onChange={onFormModelUserChange}\n />\n </div>\n <label className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-fg-muted\">{c.agentProfile}</span>\n <select\n className={selectClassName()}\n value={formAgentId}\n disabled={formSubmitting}\n onChange={(e) => onFormAgentIdChange(e.target.value)}\n >\n <option value=\"\">{c.agentProfileDefault}</option>\n {cronAgentSelectOptions.map((ag) => (\n <option key={ag.id} value={ag.id}>\n {`${ag.id} — ${agentListDisplayName(ag, agentsMessages)}`}\n </option>\n ))}\n </select>\n <p className=\"text-xs text-fg-muted\">{c.agentProfileHint}</p>\n </label>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-fg-muted\">{c.workingDirectoryLabel}</span>\n <DirectoryPickerField\n value={formWorkingDirectory}\n onChange={onFormWorkingDirectoryChange}\n disabled={formSubmitting}\n wd={chatM.workingDirectory}\n placeholder={chatM.workingDirectory.notSet}\n maxWidthClass=\"max-w-[min(16rem,48vw)]\"\n clearLabel={c.workingDirectoryReset}\n onClear={() => onFormWorkingDirectoryChange('')}\n />\n <p className=\"text-xs text-fg-muted\">{c.workingDirectoryHint}</p>\n </div>\n <label className=\"flex cursor-pointer items-start gap-2 rounded-md bg-surface-hover/45 px-3 py-2 dark:bg-surface-hover/30\">\n <input\n type=\"checkbox\"\n className={cn('ui-checkbox', 'mt-0.5')}\n checked={formAgentLocalOnly}\n onChange={(e) => onFormAgentLocalOnlyChange(e.target.checked)}\n aria-label={c.agentLocalOnly}\n />\n <span>\n <span className=\"text-sm font-medium text-fg\">{c.agentLocalOnly}</span>\n <p className=\"mt-1 text-xs text-fg-muted\">{c.agentLocalOnlyHint}</p>\n </span>\n </label>\n </>\n ) : null}\n {showChannelPicker ? (\n <>\n <label className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-fg-muted\">{c.channel}</span>\n <select\n className={selectClassName()}\n value={formChannel}\n onChange={(e) => {\n const v = e.target.value;\n onFormChannelChange(v);\n }}\n >\n <option value=\"local\">{c.channelLocal}</option>\n {channels.map((ch) => (\n <option key={ch.name} value={ch.name} disabled={!ch.enabled}>\n {ch.name} {!ch.enabled ? '(disabled)' : ''}\n </option>\n ))}\n </select>\n </label>\n {needsDeliveryChat ? (\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium text-fg-muted\">{c.recipient}</span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-7 gap-1 px-2 text-xs\"\n title={c.refreshRecipientHint}\n onClick={() => void onRefreshRecipients()}\n >\n <RefreshCw className=\"size-3.5\" strokeWidth={1.75} />\n {c.refreshList}\n </Button>\n </div>\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-stretch sm:gap-2\">\n <input\n type=\"text\"\n className={cn(inputClassName(), 'min-w-0 w-full sm:flex-1')}\n value={formChatId}\n onChange={(e) => onFormChatIdChange(e.target.value)}\n placeholder={c.recipientPlaceholder}\n />\n <select\n className={cronRecipientSelectClass}\n value={formChatId}\n onChange={(e) => {\n const v = e.target.value;\n if (v) onFormChatIdChange(v);\n }}\n >\n <option value=\"\">{c.selectRecipient}</option>\n {sessionChatIds.length > 0 ? (\n sessionChatIds.map((item) => (\n <option key={`${item.channel}-${item.chatId}`} value={item.chatId}>\n {formatRecipientOptionLabel(item, c.lastActiveLabels)}\n </option>\n ))\n ) : (\n <option value=\"\" disabled>\n {c.noRecentChatsOption}\n </option>\n )}\n </select>\n </div>\n <p className=\"text-xs text-fg-muted\">\n {sessionChatIds.length > 0 ? c.enterManuallyOrSelect : c.noRecentChats}\n </p>\n </div>\n ) : null}\n </>\n ) : null}\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <span className=\"text-xs font-medium text-fg-muted\">{c.message}</span>\n <div className=\"inline-flex rounded-lg border border-edge bg-surface-base p-0.5 dark:border-edge\">\n <button\n type=\"button\"\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs font-medium',\n formMessageMdMode === 'edit'\n ? 'bg-accent-soft text-accent-fg'\n : 'text-fg-muted hover:bg-surface-hover',\n )}\n onClick={() => onSetMessageMdMode('edit')}\n >\n <SquarePen className=\"size-3.5 shrink-0\" strokeWidth={1.75} aria-hidden />\n {c.messageEdit}\n </button>\n <button\n type=\"button\"\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs font-medium',\n formMessageMdMode === 'preview'\n ? 'bg-accent-soft text-accent-fg'\n : 'text-fg-muted hover:bg-surface-hover',\n )}\n onClick={() => onSetMessageMdMode('preview')}\n >\n <Eye className=\"size-3.5 shrink-0\" strokeWidth={1.75} aria-hidden />\n {c.messagePreview}\n </button>\n </div>\n </div>\n <div\n className={cn(\n 'overflow-hidden rounded-md border border-edge bg-surface-base dark:border-edge',\n formSubmitting && 'pointer-events-none opacity-60',\n )}\n >\n {formMessageMdMode === 'edit' ? (\n <MarkdownEditor\n key={`cron-msg-${formJobId ?? 'new'}-${messageEditorNonce}`}\n initialContent={formMessage}\n onChange={onFormMessageChange}\n isDark={isDark}\n className=\"h-[min(18rem,40vh)] min-h-[12rem]\"\n />\n ) : (\n <div className=\"h-[min(18rem,40vh)] min-h-[12rem] max-h-[min(24rem,50vh)] overflow-y-auto px-3 py-2\">\n {formMessage.trim() ? (\n <MarkdownView content={formMessage} compact className=\"text-sm\" />\n ) : (\n <p className=\"text-sm text-fg-muted\">{c.messagePlaceholder}</p>\n )}\n </div>\n )}\n </div>\n <p className=\"text-xs text-fg-muted\">{c.messageMarkdownHint}</p>\n </div>\n </div>\n </div>\n <div className=\"flex shrink-0 justify-end gap-2 border-t border-edge px-4 py-3\">\n <Button type=\"button\" variant=\"secondary\" onClick={onRequestClose}>\n {c.cancel}\n </Button>\n <Button type=\"button\" variant=\"primary\" disabled={formSubmitting || !canSubmit} onClick={onSubmit}>\n {formSubmitting ? c.loading : formMode === 'edit' ? c.save : c.create}\n </Button>\n </div>\n </Dialog.Content>\n </div>\n </Dialog.Portal>\n </Dialog.Root>\n </>\n );\n}\n","import {\n segmentedThumbActiveClassName,\n segmentedThumbBaseClassName,\n segmentedTrackClassName,\n} from '@/components/ui/segmented-styles';\nimport type { CronJob } from '@/features/cron/cron-api';\nimport { cronToolbarSelectClass } from '@/features/cron/cron-page-lib';\nimport type { MessageBundle } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronMainToolbarProps = {\n c: CronCopy;\n mainTab: 'myTasks' | 'systemTasks' | 'history';\n onMainTabChange: (tab: 'myTasks' | 'systemTasks' | 'history') => void;\n jobSort: 'created_desc' | 'created_asc';\n onJobSortChange: (sort: 'created_desc' | 'created_asc') => void;\n historyRange: 'day' | 'week' | 'month';\n onHistoryRangeChange: (range: 'day' | 'week' | 'month') => void;\n historyJobFilter: string;\n onHistoryJobFilterChange: (jobId: string) => void;\n historyStatusFilter: string;\n onHistoryStatusFilterChange: (status: string) => void;\n jobs: CronJob[];\n};\n\nexport function CronMainToolbar({\n c,\n mainTab,\n onMainTabChange,\n jobSort,\n onJobSortChange,\n historyRange,\n onHistoryRangeChange,\n historyJobFilter,\n onHistoryJobFilterChange,\n historyStatusFilter,\n onHistoryStatusFilterChange,\n jobs,\n}: CronMainToolbarProps) {\n return (\n <div className=\"flex flex-col gap-3 border-b border-edge-subtle pb-3 sm:flex-row sm:items-center sm:justify-between dark:border-edge-subtle\">\n <div className=\"flex gap-1\" role=\"tablist\" aria-label={c.title}>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mainTab === 'myTasks'}\n className={cn(\n 'rounded-md px-3 py-2 text-sm font-medium transition-colors',\n mainTab === 'myTasks' ? 'text-fg' : 'text-fg-muted hover:text-fg',\n )}\n onClick={() => onMainTabChange('myTasks')}\n >\n {c.tabMyTasks}\n </button>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mainTab === 'systemTasks'}\n className={cn(\n 'rounded-md px-3 py-2 text-sm font-medium transition-colors',\n mainTab === 'systemTasks' ? 'text-fg' : 'text-fg-muted hover:text-fg',\n )}\n onClick={() => onMainTabChange('systemTasks')}\n >\n {c.tabSystemTasks}\n </button>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mainTab === 'history'}\n className={cn(\n 'rounded-md px-3 py-2 text-sm font-medium transition-colors',\n mainTab === 'history' ? 'text-fg' : 'text-fg-muted hover:text-fg',\n )}\n onClick={() => onMainTabChange('history')}\n >\n {c.tabRunHistory}\n </button>\n </div>\n <div\n className={cn(\n 'flex min-w-0 items-center gap-2',\n mainTab === 'history'\n ? 'flex-nowrap overflow-x-auto pb-0.5 sm:justify-end'\n : 'flex-wrap sm:justify-end',\n )}\n >\n {mainTab === 'myTasks' || mainTab === 'systemTasks' ? (\n <select\n className={cronToolbarSelectClass}\n value={jobSort}\n onChange={(e) => onJobSortChange(e.target.value as 'created_desc' | 'created_asc')}\n aria-label={c.sortCreatedDesc}\n >\n <option value=\"created_desc\">{c.sortCreatedDesc}</option>\n <option value=\"created_asc\">{c.sortCreatedAsc}</option>\n </select>\n ) : null}\n {mainTab === 'history' ? (\n <>\n <div className={cn(segmentedTrackClassName, 'shrink-0')} role=\"group\" aria-label={c.runHistoryTitle}>\n {(['day', 'week', 'month'] as const).map((r) => (\n <button\n key={r}\n type=\"button\"\n className={cn(\n segmentedThumbBaseClassName,\n 'px-2.5 py-1',\n historyRange === r && segmentedThumbActiveClassName,\n historyRange === r && 'text-fg',\n )}\n onClick={() => onHistoryRangeChange(r)}\n >\n {r === 'day' ? c.historyRangeDay : r === 'week' ? c.historyRangeWeek : c.historyRangeMonth}\n </button>\n ))}\n </div>\n <select\n className={cronToolbarSelectClass}\n value={historyJobFilter}\n onChange={(e) => onHistoryJobFilterChange(e.target.value)}\n aria-label={c.filterAllTasks}\n >\n <option value=\"\">{c.filterAllTasks}</option>\n {jobs.map((j) => (\n <option key={j.id} value={j.id}>\n {j.name || j.id}\n </option>\n ))}\n </select>\n <select\n className={cronToolbarSelectClass}\n value={historyStatusFilter}\n onChange={(e) => onHistoryStatusFilterChange(e.target.value)}\n aria-label={c.filterAllStatuses}\n >\n <option value=\"\">{c.filterAllStatuses}</option>\n <option value=\"success\">{c.execStatusSuccess}</option>\n <option value=\"failed\">{c.execStatusFailed}</option>\n <option value=\"cancelled\">{c.execStatusCancelled}</option>\n <option value=\"running\">{c.execStatusRunning}</option>\n </select>\n </>\n ) : null}\n </div>\n </div>\n );\n}\n","import { LayoutTemplate, Plus, RefreshCw } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport type { MessageBundle } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronPageHeaderActionsProps = {\n c: CronCopy;\n loading: boolean;\n runHistoryLoading: boolean;\n onRefresh: () => void;\n onOpenTemplatePicker: () => void;\n onAddJob: () => void;\n};\n\nexport function CronPageHeaderActions({\n c,\n loading,\n runHistoryLoading,\n onRefresh,\n onOpenTemplatePicker,\n onAddJob,\n}: CronPageHeaderActionsProps) {\n const busy = loading || runHistoryLoading;\n return (\n <div className=\"flex min-w-0 flex-1 flex-wrap items-center justify-end gap-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"size-9 shrink-0 p-0\"\n disabled={busy}\n title={c.refresh}\n aria-label={c.refresh}\n onClick={() => void onRefresh()}\n >\n <RefreshCw className={cn('size-4', busy && 'animate-spin')} strokeWidth={1.75} />\n </Button>\n <Button type=\"button\" variant=\"secondary\" className=\"gap-2\" onClick={onOpenTemplatePicker}>\n <LayoutTemplate className=\"size-4\" strokeWidth={1.75} />\n {c.fromTemplate}\n </Button>\n <Button type=\"button\" variant=\"primary\" className=\"gap-2\" onClick={onAddJob}>\n <Plus className=\"size-4\" strokeWidth={1.75} />\n {c.addJob}\n </Button>\n </div>\n );\n}\n","import { Clock, Loader2, RefreshCw } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport type { CronJob, CronRunHistoryRow } from '@/features/cron/cron-api';\nimport { navigateToSessionChat } from '@/features/cron/cron-page-lib';\nimport {\n execStatusLabel,\n formatDuration,\n formatTime,\n truncate,\n} from '@/features/cron/cron-utils';\nimport type { MessageBundle } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronRunHistorySectionProps = {\n c: CronCopy;\n runHistoryLoading: boolean;\n runHistory: CronRunHistoryRow[];\n filteredRunHistory: CronRunHistoryRow[];\n jobs: CronJob[];\n onRefreshHistory: () => void;\n onOpenJobDetail: (job: CronJob) => void;\n statusLabels: {\n running: string;\n success: string;\n failed: string;\n cancelled: string;\n };\n};\n\nexport function CronRunHistorySection({\n c,\n runHistoryLoading,\n runHistory,\n filteredRunHistory,\n jobs,\n onRefreshHistory,\n onOpenJobDetail,\n statusLabels,\n}: CronRunHistorySectionProps) {\n return (\n <section aria-labelledby=\"cron-history-panel\" className=\"flex flex-col gap-3\">\n <div className=\"flex items-start justify-between gap-2\">\n <div>\n <h2 id=\"cron-history-panel\" className=\"sr-only\">\n {c.tabRunHistory}\n </h2>\n <p className=\"text-xs text-fg-muted\">{c.runHistoryHint}</p>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"size-9 shrink-0 p-0\"\n disabled={runHistoryLoading}\n title={c.refresh}\n aria-label={c.refresh}\n onClick={() => void onRefreshHistory()}\n >\n <RefreshCw className={cn('size-4', runHistoryLoading && 'animate-spin')} strokeWidth={1.75} />\n </Button>\n </div>\n {runHistoryLoading && runHistory.length === 0 ? (\n <div className=\"flex justify-center py-16\">\n <Loader2 className=\"size-8 animate-spin text-accent\" strokeWidth={1.75} />\n </div>\n ) : filteredRunHistory.length === 0 ? (\n <div className=\"flex flex-col items-center rounded-2xl border border-dashed border-edge-subtle px-6 py-16 text-center dark:border-edge-subtle\">\n <Clock className=\"mb-4 size-14 text-fg-disabled\" strokeWidth={1.1} aria-hidden />\n <h3 className=\"text-base font-semibold text-fg\">\n {runHistory.length === 0 ? c.emptyHistoryTitle : c.noRunsYet}\n </h3>\n <p className=\"mt-2 max-w-sm text-sm text-fg-muted\">\n {runHistory.length === 0 ? c.emptyHistoryHint : c.runHistoryHint}\n </p>\n </div>\n ) : (\n <div className=\"overflow-x-auto rounded-xl border border-edge-subtle bg-surface-base dark:border-edge-subtle\">\n <table className=\"w-full min-w-[700px] border-collapse text-left text-sm\">\n <thead>\n <tr className=\"border-b border-edge text-xs font-medium text-fg-muted\">\n <th className=\"px-3 py-2.5 font-medium\">{c.colStarted}</th>\n <th className=\"px-3 py-2.5 font-medium\">{c.colJob}</th>\n <th className=\"px-3 py-2.5 font-medium\">{c.status}</th>\n <th className=\"px-3 py-2.5 font-medium\">{c.colDuration}</th>\n <th className=\"px-3 py-2.5 font-medium\">{c.colDetail}</th>\n <th className=\"px-3 py-2.5 font-medium\">{c.colChat}</th>\n </tr>\n </thead>\n <tbody>\n {filteredRunHistory.map((row) => (\n <tr key={row.id} className=\"border-b border-edge/60 last:border-0\">\n <td className=\"whitespace-nowrap px-3 py-2.5 text-fg\">\n <time dateTime={row.startedAt}>{formatTime(row.startedAt)}</time>\n </td>\n <td className=\"max-w-[10rem] truncate px-3 py-2.5\">\n {jobs.some((j) => j.id === row.jobId) ? (\n <button\n type=\"button\"\n className=\"text-left text-accent hover:underline\"\n onClick={() => {\n const j = jobs.find((x) => x.id === row.jobId);\n if (j) void onOpenJobDetail(j);\n }}\n >\n {row.jobName || row.jobId}\n </button>\n ) : (\n <span className=\"text-fg-muted\">{row.jobName || row.jobId}</span>\n )}\n </td>\n <td className=\"px-3 py-2.5\">\n <span\n className={cn(\n 'inline-flex rounded-md px-2 py-0.5 text-xs font-medium',\n row.status === 'success' && 'bg-emerald-500/15 text-emerald-800 dark:text-emerald-300',\n row.status === 'failed' && 'bg-red-500/15 text-red-800 dark:text-red-300',\n row.status === 'running' && 'bg-accent/15 text-accent',\n row.status === 'cancelled' && 'bg-surface-hover text-fg-muted',\n )}\n >\n {execStatusLabel(row.status, statusLabels)}\n </span>\n </td>\n <td className=\"whitespace-nowrap px-3 py-2.5 text-fg-muted\">\n {formatDuration(row.duration)}\n </td>\n <td\n className=\"max-w-xs truncate px-3 py-2.5 text-fg-muted\"\n title={row.summary || row.error || ''}\n >\n {truncate(row.summary || row.error, 96)}\n </td>\n <td className=\"whitespace-nowrap px-3 py-2.5\">\n {row.sessionKey?.trim() ? (\n <button\n type=\"button\"\n className=\"text-xs font-medium text-accent hover:underline\"\n title={c.openChatTitle}\n aria-label={c.openChatTitle}\n onClick={() => navigateToSessionChat(row.sessionKey)}\n >\n {c.openChat}\n </button>\n ) : (\n <span className=\"text-fg-disabled\">—</span>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </section>\n );\n}\n","import * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { Clock, MoreVertical } from 'lucide-react';\n\nimport { MarkdownView } from '@/components/markdown/markdown-view';\nimport { Button } from '@/components/ui/button';\nimport type { MutableRefObject } from 'react';\n\nimport type { CronJob } from '@/features/cron/cron-api';\nimport { cronJobBodyText } from '@/features/cron/cron-api';\nimport { formatScheduleBadge } from '@/features/cron/cron-utils';\nimport type { MessageBundle } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronJobCardProps = {\n job: CronJob;\n c: CronCopy;\n localeTag: string;\n scheduleBadgeLabels: CronCopy['scheduleBadge'];\n absorbCardClickJobIdRef: MutableRefObject<string | null>;\n scheduleAbsorbNextMenuCardClick: (jobId: string) => void;\n onOpenDetail: (job: CronJob) => void;\n onToggle: (job: CronJob, enabled: boolean) => void;\n onEdit: (job: CronJob) => void;\n onRunNow: (job: CronJob) => void;\n onDelete: (job: CronJob) => void;\n};\n\nexport function CronJobCard({\n job,\n c,\n localeTag,\n scheduleBadgeLabels,\n absorbCardClickJobIdRef,\n scheduleAbsorbNextMenuCardClick,\n onOpenDetail,\n onToggle,\n onEdit,\n onRunNow,\n onDelete,\n}: CronJobCardProps) {\n return (\n <article\n role=\"button\"\n tabIndex={0}\n className={cn(\n 'flex cursor-pointer flex-col rounded-xl border border-edge-subtle bg-surface-base text-left transition-colors duration-150 ease-out dark:border-edge-subtle',\n 'hover:bg-surface-hover',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel',\n )}\n onClick={() => {\n if (absorbCardClickJobIdRef.current === job.id) {\n absorbCardClickJobIdRef.current = null;\n return;\n }\n void onOpenDetail(job);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (absorbCardClickJobIdRef.current === job.id) {\n absorbCardClickJobIdRef.current = null;\n return;\n }\n void onOpenDetail(job);\n }\n }}\n >\n <div className=\"flex items-start justify-between gap-2 px-4 pt-3\">\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={job.enabled}\n className={cn(\n 'inline-flex h-6 w-10 shrink-0 items-center rounded-full border border-edge p-0.5 transition-colors',\n job.enabled ? 'justify-end bg-accent' : 'justify-start bg-surface-hover',\n )}\n onClick={(e) => {\n e.stopPropagation();\n void onToggle(job, !job.enabled);\n }}\n >\n <span className=\"size-4 rounded-full bg-surface-panel shadow-surface ring-1 ring-edge/40 dark:ring-edge/55\" />\n </button>\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"size-8 shrink-0 p-0\"\n aria-label={c.jobCardMenuAria}\n onClick={(e) => e.stopPropagation()}\n >\n <MoreVertical className=\"size-4\" strokeWidth={1.75} />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n className=\"z-50 min-w-[10rem] rounded-xl border border-edge-subtle bg-surface-panel p-1 shadow-elevated dark:border-edge-subtle\"\n sideOffset={4}\n align=\"end\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DropdownMenu.Item\n className=\"cursor-pointer select-none rounded-lg px-2 py-1.5 text-sm text-fg outline-none data-highlighted:bg-surface-hover\"\n onSelect={() => {\n scheduleAbsorbNextMenuCardClick(job.id);\n onEdit(job);\n }}\n >\n {c.edit}\n </DropdownMenu.Item>\n <DropdownMenu.Item\n className=\"cursor-pointer select-none rounded-lg px-2 py-1.5 text-sm text-fg outline-none data-highlighted:bg-surface-hover\"\n onSelect={() => {\n scheduleAbsorbNextMenuCardClick(job.id);\n onRunNow(job);\n }}\n >\n {c.runNow}\n </DropdownMenu.Item>\n <DropdownMenu.Item\n className=\"cursor-pointer select-none rounded-lg px-2 py-1.5 text-sm text-red-600 outline-none data-highlighted:bg-red-500/10 dark:text-red-400\"\n onSelect={() => {\n scheduleAbsorbNextMenuCardClick(job.id);\n onDelete(job);\n }}\n >\n {c.delete}\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n </div>\n <div className=\"flex flex-1 flex-col gap-2 px-4 pb-3 pt-2\">\n <h3 className=\"line-clamp-2 font-semibold text-fg\">{job.name || job.id}</h3>\n <div\n className=\"max-h-[4.5rem] overflow-hidden text-sm text-fg-muted [&_.markdown-body]:text-sm [&_.markdown-body]:leading-snug\"\n title={cronJobBodyText(job)}\n >\n <MarkdownView content={cronJobBodyText(job)} compact />\n </div>\n </div>\n <div className=\"flex items-center gap-1.5 border-t border-edge-subtle/90 px-4 py-2.5 text-xs text-fg-muted dark:border-edge-subtle\">\n <Clock className=\"size-3.5 shrink-0\" strokeWidth={1.75} aria-hidden />\n <span className=\"min-w-0 truncate\">{formatScheduleBadge(job, localeTag, scheduleBadgeLabels)}</span>\n </div>\n </article>\n );\n}\n","import { ChevronRight, Info, Loader2 } from 'lucide-react';\nimport type { MutableRefObject } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { Button } from '@/components/ui/button';\nimport type { CronJob } from '@/features/cron/cron-api';\nimport { CronJobCard } from '@/features/cron/cron-job-card';\nimport type { HeartbeatSettingsState } from '@/features/settings/heartbeat-settings.types';\nimport { formatIntervalMsLabel } from '@/features/scheduling/interval/format-interval-label';\nimport { messages, type MessageBundle } from '@/i18n/messages';\nimport type { StoredLanguage } from '@/lib/storage';\nimport { cn } from '@/lib/cn';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronSystemTasksPanelProps = {\n c: CronCopy;\n language: StoredLanguage;\n localeTag: string;\n scheduleBadgeLabels: CronCopy['scheduleBadge'];\n loading: boolean;\n sortedSystemJobs: CronJob[];\n heartbeat: HeartbeatSettingsState;\n keepAwake: boolean;\n wakeSupported: boolean;\n onWakeUnsupportedClick: () => void;\n onKeepAwakeToggle: () => void;\n absorbCardClickJobIdRef: MutableRefObject<string | null>;\n scheduleAbsorbNextMenuCardClick: (jobId: string) => void;\n onOpenDetail: (job: CronJob) => void;\n onToggle: (job: CronJob, enabled: boolean) => void;\n onEdit: (job: CronJob) => void;\n onRunNow: (job: CronJob) => void;\n onDelete: (job: CronJob) => void;\n};\n\nexport function CronSystemTasksPanel({\n c,\n language,\n localeTag,\n scheduleBadgeLabels,\n loading,\n sortedSystemJobs,\n heartbeat,\n keepAwake,\n wakeSupported,\n onWakeUnsupportedClick,\n onKeepAwakeToggle,\n absorbCardClickJobIdRef,\n scheduleAbsorbNextMenuCardClick,\n onOpenDetail,\n onToggle,\n onEdit,\n onRunNow,\n onDelete,\n}: CronSystemTasksPanelProps) {\n const hbInterval = formatIntervalMsLabel(\n heartbeat.intervalMs,\n localeTag,\n messages(language).heartbeatSettings.intervalPresets,\n );\n\n return (\n <section aria-labelledby=\"cron-system-tasks-panel\" className=\"flex flex-col gap-4\">\n <h2 id=\"cron-system-tasks-panel\" className=\"sr-only\">\n {c.tabSystemTasks}\n </h2>\n <p className=\"text-sm text-fg-muted\">{c.systemTasksIntro}</p>\n\n <div className=\"flex flex-col gap-3 rounded-xl border border-accent/25 bg-accent/5 px-4 py-3 dark:border-accent/30 dark:bg-accent/10 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"flex gap-3 text-sm text-fg\">\n <Info className=\"mt-0.5 size-4 shrink-0 text-accent\" strokeWidth={1.75} aria-hidden />\n <p className=\"text-pretty text-fg-muted\">{c.wakeBanner}</p>\n </div>\n <div className=\"flex shrink-0 items-center gap-2 sm:pl-4\">\n <span className=\"text-sm text-fg\">{c.keepAwake}</span>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={keepAwake}\n disabled={!wakeSupported}\n title={!wakeSupported ? c.wakeLockUnavailable : undefined}\n className={cn(\n 'inline-flex h-6 w-10 shrink-0 items-center rounded-full border border-edge p-0.5 transition-colors',\n keepAwake ? 'justify-end bg-accent' : 'justify-start bg-surface-hover',\n !wakeSupported && 'cursor-not-allowed opacity-50',\n )}\n onClick={() => {\n if (!wakeSupported) onWakeUnsupportedClick();\n else onKeepAwakeToggle();\n }}\n >\n <span className=\"size-4 rounded-full bg-surface-panel shadow-surface ring-1 ring-edge/40 dark:ring-edge/55\" />\n </button>\n </div>\n </div>\n\n <div className=\"rounded-xl border border-edge bg-surface-base p-4 dark:bg-surface-hover/20\">\n <div className=\"flex flex-col gap-1 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold text-fg\">{c.systemHeartbeatTitle}</h3>\n <p className=\"mt-1 text-xs text-fg-muted\">{c.systemHeartbeatHint}</p>\n </div>\n <Button type=\"button\" variant=\"ghost\" className=\"shrink-0 gap-1 self-start px-2 py-1.5 text-xs\" asChild>\n <Link to=\"/settings/heartbeat\">\n {c.systemHeartbeatSettingsLink}\n <ChevronRight className=\"size-3.5 opacity-70\" aria-hidden />\n </Link>\n </Button>\n </div>\n <dl className=\"mt-3 grid gap-2 text-sm sm:grid-cols-2\">\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.systemHeartbeatStatus}</dt>\n <dd className=\"text-fg\">{heartbeat.enabled ? c.enabled : c.disabled}</dd>\n </div>\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.systemHeartbeatInterval}</dt>\n <dd className=\"text-fg\">{c.systemHeartbeatEvery.replace(/\\{\\{value\\}\\}/g, hbInterval)}</dd>\n </div>\n </dl>\n </div>\n\n <div>\n <div className=\"mb-2 flex flex-col gap-1 sm:flex-row sm:items-center sm:justify-between\">\n <h3 className=\"text-sm font-semibold text-fg\">{c.systemDreamingTitle}</h3>\n <Button type=\"button\" variant=\"ghost\" className=\"shrink-0 gap-1 self-start px-2 py-1.5 text-xs\" asChild>\n <Link to=\"/settings/dreams\">\n {c.systemDreamingSettingsLink}\n <ChevronRight className=\"size-3.5 opacity-70\" aria-hidden />\n </Link>\n </Button>\n </div>\n <p className=\"mb-3 text-xs text-fg-muted\">{c.systemDreamingHint}</p>\n {loading && sortedSystemJobs.length === 0 ? (\n <div className=\"flex justify-center py-12\" aria-busy=\"true\">\n <Loader2 className=\"size-8 animate-spin text-accent\" strokeWidth={1.75} />\n </div>\n ) : sortedSystemJobs.length === 0 ? (\n <p className=\"rounded-lg border border-edge-subtle bg-surface-hover/30 px-3 py-4 text-sm text-fg-muted dark:border-edge-subtle\">\n {c.systemDreamingEmpty}\n </p>\n ) : (\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {sortedSystemJobs.map((job) => (\n <CronJobCard\n key={job.id}\n job={job}\n c={c}\n localeTag={localeTag}\n scheduleBadgeLabels={scheduleBadgeLabels}\n absorbCardClickJobIdRef={absorbCardClickJobIdRef}\n scheduleAbsorbNextMenuCardClick={scheduleAbsorbNextMenuCardClick}\n onOpenDetail={onOpenDetail}\n onToggle={onToggle}\n onEdit={onEdit}\n onRunNow={onRunNow}\n onDelete={onDelete}\n />\n ))}\n </div>\n )}\n </div>\n </section>\n );\n}\n","import type { MessageBundle } from '@/i18n/messages';\n\nexport type CronTemplateCopy = {\n title: string;\n description: string;\n prompt: string;\n};\n\nexport function getCronTemplateCopy(\n cron: MessageBundle['cron'],\n templateId: string,\n): CronTemplateCopy | undefined {\n const raw = cron.templates;\n if (!raw || typeof raw !== 'object') return undefined;\n const row = (raw as Record<string, { title?: string; description?: string; prompt?: string } | undefined>)[\n templateId\n ];\n if (!row || typeof row !== 'object') return undefined;\n const title = row.title?.trim();\n const prompt = row.prompt?.trim();\n if (!title || !prompt) return undefined;\n return {\n title,\n description: (row.description ?? '').trim(),\n prompt,\n };\n}\n","/** Non-display fields for scheduled-task templates; copy lives in i18n `cron.templates`. */\n\nexport const CRON_TEMPLATE_CATEGORIES = ['daily', 'monitoring', 'reports', 'automation'] as const;\nexport type CronTemplateCategory = (typeof CRON_TEMPLATE_CATEGORIES)[number];\n\nexport interface CronJobTemplateDef {\n templateId: string;\n category: CronTemplateCategory;\n defaultSchedule: string;\n defaultSessionTarget: 'isolated';\n}\n\n/** Grouped like common scheduled-task UIs: daily rhythm, external monitoring, periodic reports, repo automation. */\nexport const CRON_JOB_TEMPLATES = [\n // Daily\n {\n templateId: 'morning_briefing',\n category: 'daily',\n defaultSchedule: '0 7 * * 1-5',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'standup_prep',\n category: 'daily',\n defaultSchedule: '0 8 * * 1-5',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'end_of_day_wrap_up',\n category: 'daily',\n defaultSchedule: '0 18 * * 1-5',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'inbox_triage',\n category: 'daily',\n defaultSchedule: '30 8 * * 1-5',\n defaultSessionTarget: 'isolated',\n },\n // Monitoring\n {\n templateId: 'competitor_watch',\n category: 'monitoring',\n defaultSchedule: '0 9 * * 1',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'trending_topics_monitor',\n category: 'monitoring',\n defaultSchedule: '0 10 * * 1-5',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'tech_radar_stack',\n category: 'monitoring',\n defaultSchedule: '0 11 * * 3',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'dependency_check_audit',\n category: 'monitoring',\n defaultSchedule: '0 9 * * 0',\n defaultSessionTarget: 'isolated',\n },\n // Reports\n {\n templateId: 'weekly_review',\n category: 'reports',\n defaultSchedule: '0 17 * * 5',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'code_quality_report',\n category: 'reports',\n defaultSchedule: '0 14 * * 1',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'git_activity_summary',\n category: 'reports',\n defaultSchedule: '0 9 * * 1',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'user_feedback_digest',\n category: 'reports',\n defaultSchedule: '0 16 * * 5',\n defaultSessionTarget: 'isolated',\n },\n // Automation\n {\n templateId: 'stale_todo_or_issue_sweep',\n category: 'automation',\n defaultSchedule: '0 10 * * 2',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'release_notes_or_changelog_draft',\n category: 'automation',\n defaultSchedule: '0 10 * * 4',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'workspace_cleanup_suggestions',\n category: 'automation',\n defaultSchedule: '30 18 * * 5',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'smoke_or_ci_health_reminder',\n category: 'automation',\n defaultSchedule: '0 8 * * 1',\n defaultSessionTarget: 'isolated',\n },\n] as const satisfies readonly CronJobTemplateDef[];\n\nexport type CronTemplateId = (typeof CRON_JOB_TEMPLATES)[number]['templateId'];\n\nexport function cronTemplateById(id: string): (typeof CRON_JOB_TEMPLATES)[number] | undefined {\n return CRON_JOB_TEMPLATES.find((t) => t.templateId === id);\n}\n","import { Button } from '@/components/ui/button';\nimport type { MessageBundle } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\nimport { getCronTemplateCopy } from '@/features/cron/cron-template-i18n';\nimport { CRON_JOB_TEMPLATES, CRON_TEMPLATE_CATEGORIES, type CronTemplateCategory } from '@/features/cron/cron-templates';\nimport { formatScheduleBadge, type ScheduleBadgeLabels } from '@/features/cron/cron-utils';\n\nexport type CronTemplateFilter = 'all' | CronTemplateCategory;\n\ntype Props = {\n cron: MessageBundle['cron'];\n localeTag: string;\n scheduleBadgeLabels: ScheduleBadgeLabels;\n categoryFilter: CronTemplateFilter;\n onCategoryFilterChange: (next: CronTemplateFilter) => void;\n onSelectTemplate: (templateId: string) => void;\n};\n\nexport function CronTemplateLibrary(props: Props) {\n const { cron, localeTag, scheduleBadgeLabels, categoryFilter, onCategoryFilterChange, onSelectTemplate } = props;\n\n const filtered =\n categoryFilter === 'all'\n ? [...CRON_JOB_TEMPLATES]\n : CRON_JOB_TEMPLATES.filter((t) => t.category === categoryFilter);\n\n return (\n <div className=\"flex w-full flex-col gap-4\">\n <div className=\"flex flex-wrap gap-2\" role=\"group\" aria-label={cron.fromTemplate}>\n <Button\n type=\"button\"\n variant={categoryFilter === 'all' ? 'secondary' : 'ghost'}\n className=\"h-8 rounded-full px-3 py-1.5 text-xs\"\n onClick={() => onCategoryFilterChange('all')}\n >\n {cron.templateFilterAll}\n </Button>\n {CRON_TEMPLATE_CATEGORIES.map((cat) => (\n <Button\n key={cat}\n type=\"button\"\n variant={categoryFilter === cat ? 'secondary' : 'ghost'}\n className=\"h-8 rounded-full px-3 py-1.5 text-xs\"\n onClick={() => onCategoryFilterChange(cat)}\n >\n {cron.templateCategories[cat]}\n </Button>\n ))}\n </div>\n {filtered.length === 0 ? (\n <p className=\"text-center text-sm text-fg-muted\">{cron.templatesEmptyHint}</p>\n ) : (\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3\">\n {filtered.map((t) => {\n const copy = getCronTemplateCopy(cron, t.templateId);\n if (!copy) return null;\n const badge = formatScheduleBadge(\n { schedule: t.defaultSchedule, timezone: undefined, next_run: undefined },\n localeTag,\n scheduleBadgeLabels,\n );\n return (\n <button\n key={t.templateId}\n type=\"button\"\n className={cn(\n 'flex flex-col gap-1.5 rounded-xl border border-edge-subtle bg-surface-base p-4 text-left transition-colors',\n 'hover:border-accent/40 hover:bg-surface-hover',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel',\n )}\n onClick={() => onSelectTemplate(t.templateId)}\n aria-label={`${cron.templateCategories[t.category]} — ${copy.title}`}\n >\n <span className=\"font-semibold text-fg\">{copy.title}</span>\n <span className=\"line-clamp-2 text-sm text-fg-muted\">{copy.description}</span>\n <span className=\"mt-1 flex items-center gap-1 text-xs text-fg-muted\">\n <span className=\"tabular-nums\">{badge}</span>\n </span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","import { Info, Loader2 } from 'lucide-react';\nimport type { MutableRefObject } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport type { CronJob } from '@/features/cron/cron-api';\nimport { CronJobCard } from '@/features/cron/cron-job-card';\nimport type { CronTemplateFilter } from '@/features/cron/cron-template-library';\nimport { CronTemplateLibrary } from '@/features/cron/cron-template-library';\nimport type { MessageBundle } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronTasksPanelProps = {\n c: CronCopy;\n localeTag: string;\n scheduleBadgeLabels: CronCopy['scheduleBadge'];\n loading: boolean;\n jobsCount: number;\n sortedJobs: CronJob[];\n templateCategoryFilter: CronTemplateFilter;\n onTemplateCategoryFilterChange: (v: CronTemplateFilter) => void;\n onSelectTemplate: (templateId: string) => void;\n keepAwake: boolean;\n wakeSupported: boolean;\n onWakeUnsupportedClick: () => void;\n onKeepAwakeToggle: () => void;\n absorbCardClickJobIdRef: MutableRefObject<string | null>;\n scheduleAbsorbNextMenuCardClick: (jobId: string) => void;\n onOpenDetail: (job: CronJob) => void;\n onToggle: (job: CronJob, enabled: boolean) => void;\n onEdit: (job: CronJob) => void;\n onAddJob: () => void;\n onRunNow: (job: CronJob) => void;\n onDelete: (job: CronJob) => void;\n};\n\nexport function CronTasksPanel({\n c,\n localeTag,\n scheduleBadgeLabels,\n loading,\n jobsCount,\n sortedJobs,\n templateCategoryFilter,\n onTemplateCategoryFilterChange,\n onSelectTemplate,\n keepAwake,\n wakeSupported,\n onWakeUnsupportedClick,\n onKeepAwakeToggle,\n absorbCardClickJobIdRef,\n scheduleAbsorbNextMenuCardClick,\n onOpenDetail,\n onToggle,\n onEdit,\n onAddJob,\n onRunNow,\n onDelete,\n}: CronTasksPanelProps) {\n return (\n <section aria-labelledby=\"cron-tasks-panel\" className=\"flex flex-col gap-4\">\n <h2 id=\"cron-tasks-panel\" className=\"sr-only\">\n {c.tabMyTasks}\n </h2>\n <div className=\"flex flex-col gap-3 rounded-xl border border-accent/25 bg-accent/5 px-4 py-3 dark:border-accent/30 dark:bg-accent/10 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"flex gap-3 text-sm text-fg\">\n <Info className=\"mt-0.5 size-4 shrink-0 text-accent\" strokeWidth={1.75} aria-hidden />\n <p className=\"text-pretty text-fg-muted\">{c.wakeBanner}</p>\n </div>\n <div className=\"flex shrink-0 items-center gap-2 sm:pl-4\">\n <span className=\"text-sm text-fg\">{c.keepAwake}</span>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={keepAwake}\n disabled={!wakeSupported}\n title={!wakeSupported ? c.wakeLockUnavailable : undefined}\n className={cn(\n 'inline-flex h-6 w-10 shrink-0 items-center rounded-full border border-edge p-0.5 transition-colors',\n keepAwake ? 'justify-end bg-accent' : 'justify-start bg-surface-hover',\n !wakeSupported && 'cursor-not-allowed opacity-50',\n )}\n onClick={() => {\n if (!wakeSupported) onWakeUnsupportedClick();\n else onKeepAwakeToggle();\n }}\n >\n <span className=\"size-4 rounded-full bg-surface-panel shadow-surface ring-1 ring-edge/40 dark:ring-edge/55\" />\n </button>\n </div>\n </div>\n\n {loading && jobsCount === 0 ? (\n <div className=\"flex justify-center py-16\" aria-busy=\"true\">\n <Loader2 className=\"size-8 animate-spin text-accent\" strokeWidth={1.75} />\n </div>\n ) : jobsCount === 0 ? (\n <div className=\"flex flex-col gap-6 rounded-2xl bg-surface-base px-4 py-8 dark:bg-surface-hover/25 sm:px-6 sm:py-10\">\n <div className=\"w-full max-w-6xl\">\n <CronTemplateLibrary\n cron={c}\n localeTag={localeTag}\n scheduleBadgeLabels={scheduleBadgeLabels}\n categoryFilter={templateCategoryFilter}\n onCategoryFilterChange={onTemplateCategoryFilterChange}\n onSelectTemplate={onSelectTemplate}\n />\n </div>\n <div className=\"flex justify-center\">\n <Button type=\"button\" variant=\"primary\" onClick={onAddJob}>\n {c.emptyStateCta}\n </Button>\n </div>\n </div>\n ) : (\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {sortedJobs.map((job) => (\n <CronJobCard\n key={job.id}\n job={job}\n c={c}\n localeTag={localeTag}\n scheduleBadgeLabels={scheduleBadgeLabels}\n absorbCardClickJobIdRef={absorbCardClickJobIdRef}\n scheduleAbsorbNextMenuCardClick={scheduleAbsorbNextMenuCardClick}\n onOpenDetail={(j) => void onOpenDetail(j)}\n onToggle={(j, en) => void onToggle(j, en)}\n onEdit={onEdit}\n onRunNow={onRunNow}\n onDelete={onDelete}\n />\n ))}\n </div>\n )}\n </section>\n );\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport type { CronTemplateFilter } from '@/features/cron/cron-template-library';\nimport { CronTemplateLibrary } from '@/features/cron/cron-template-library';\nimport type { MessageBundle } from '@/i18n/messages';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronTemplatePickerDialogProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n c: CronCopy;\n localeTag: string;\n scheduleBadgeLabels: CronCopy['scheduleBadge'];\n categoryFilter: CronTemplateFilter;\n onCategoryFilterChange: (v: CronTemplateFilter) => void;\n onSelectTemplate: (templateId: string) => void;\n};\n\nexport function CronTemplatePickerDialog({\n open,\n onOpenChange,\n c,\n localeTag,\n scheduleBadgeLabels,\n categoryFilter,\n onCategoryFilterChange,\n onSelectTemplate,\n}: CronTemplatePickerDialogProps) {\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"xopc-dialog-overlay fixed inset-0 z-[62] bg-scrim\" />\n <div className=\"fixed inset-0 z-[62] flex items-center justify-center p-4 pointer-events-none\">\n <Dialog.Content\n className=\"xopc-dialog-content-pane pointer-events-auto relative flex max-h-[min(90vh,840px)] w-full max-w-lg flex-col rounded-xl border border-edge bg-surface-panel shadow-popover outline-none sm:max-w-2xl dark:border-edge\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <div className=\"flex shrink-0 items-center justify-end border-b border-edge px-4 py-3\">\n <Dialog.Title className=\"sr-only\">{c.fromTemplate}</Dialog.Title>\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"size-9 shrink-0 p-0\" aria-label={c.close}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto p-4\">\n <CronTemplateLibrary\n cron={c}\n localeTag={localeTag}\n scheduleBadgeLabels={scheduleBadgeLabels}\n categoryFilter={categoryFilter}\n onCategoryFilterChange={onCategoryFilterChange}\n onSelectTemplate={onSelectTemplate}\n />\n </div>\n </Dialog.Content>\n </div>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import { useCallback, useMemo, useReducer, useRef } from 'react';\n\nimport { type ChatAgentOption } from '@/features/chat/agent-selection/chat-agents-api';\nimport {\n cronJobBodyText,\n getSessionChatIds,\n type ChannelStatus,\n type CronJob,\n type SessionChatId,\n} from '@/features/cron/cron-api';\nimport { DEFAULT_SCHEDULE } from '@/features/cron/cron-page-lib';\nimport { getCronTemplateCopy } from '@/features/cron/cron-template-i18n';\nimport { cronTemplateById } from '@/features/cron/cron-templates';\nimport type { messages as makeMessages } from '@/i18n/messages';\nimport { useAsyncResource } from '@/lib/use-async-resource';\n\nexport type FormMode = 'add' | 'edit';\nexport type FormSessionTarget = 'main' | 'isolated';\nexport type FormMessageMdMode = 'edit' | 'preview';\n\ntype FormState = {\n formOpen: boolean;\n formMode: FormMode;\n formJobId: string | null;\n formName: string;\n formSchedule: string;\n formChannel: string;\n formChatId: string;\n formMessage: string;\n formMessageMdMode: FormMessageMdMode;\n messageEditorNonce: number;\n formSessionTarget: FormSessionTarget;\n formAgentId: string;\n formAgentLocalOnly: boolean;\n formWorkingDirectory: string;\n formModel: string;\n formSubmitting: boolean;\n};\n\ntype FormAction =\n | { type: 'patch'; patch: Partial<FormState> }\n | { type: 'replace'; state: FormState }\n | { type: 'setMessageMdMode'; mode: FormMessageMdMode };\n\nfunction initialFormState(): FormState {\n return {\n formOpen: false,\n formMode: 'add',\n formJobId: null,\n formName: '',\n formSchedule: DEFAULT_SCHEDULE,\n formChannel: 'local',\n formChatId: '',\n formMessage: '',\n formMessageMdMode: 'edit',\n messageEditorNonce: 0,\n formSessionTarget: 'main',\n formAgentId: '',\n formAgentLocalOnly: false,\n formWorkingDirectory: '',\n formModel: '',\n formSubmitting: false,\n };\n}\n\nfunction formReducer(state: FormState, action: FormAction): FormState {\n switch (action.type) {\n case 'patch':\n return { ...state, ...action.patch };\n case 'replace':\n return action.state;\n case 'setMessageMdMode':\n return {\n ...state,\n formMessageMdMode: action.mode,\n messageEditorNonce: action.mode === 'edit' ? state.messageEditorNonce + 1 : state.messageEditorNonce,\n };\n }\n}\n\nfunction buildOpenFormState(job: CronJob | undefined, defaultModelForForm: () => string): FormState {\n const base = initialFormState();\n base.formOpen = true;\n base.formMode = job ? 'edit' : 'add';\n base.formJobId = job?.id ?? null;\n\n if (!job) {\n base.formModel = defaultModelForForm();\n return base;\n }\n\n base.formName = job.name || '';\n base.formSchedule = (job.schedule && String(job.schedule).trim()) || DEFAULT_SCHEDULE;\n const bodyText = cronJobBodyText(job);\n base.formMessage = bodyText ?? '';\n base.formSessionTarget = job.sessionTarget || 'main';\n base.formAgentId =\n (job.sessionTarget || 'main') === 'isolated' && job.agentId?.trim()\n ? job.agentId.trim().toLowerCase()\n : '';\n base.formWorkingDirectory =\n (job.sessionTarget || 'main') === 'isolated' && job.workingDirectory?.trim()\n ? job.workingDirectory.trim()\n : '';\n const fromPayload =\n job.payload?.kind === 'agentTurn' && job.payload.model?.trim() ? job.payload.model.trim() : '';\n const stored = job.model?.trim() || fromPayload;\n base.formModel = stored || defaultModelForForm();\n const hasLocalChannel = job.delivery?.channel === 'local';\n const agentLocalOnly =\n (job.sessionTarget || 'main') === 'isolated' &&\n !hasLocalChannel &&\n (!job.delivery?.to || job.delivery.mode === 'none');\n base.formAgentLocalOnly = agentLocalOnly;\n\n if (hasLocalChannel) {\n base.formChannel = 'local';\n base.formChatId = '';\n } else if (job.delivery && job.delivery.mode !== 'none' && job.delivery.to) {\n base.formChannel = job.delivery.channel || 'telegram';\n base.formChatId = job.delivery.to || '';\n } else if (!agentLocalOnly) {\n const parts = bodyText.split(':');\n const knownChannels = ['telegram', 'cli', 'gateway', 'local'];\n if (parts.length >= 3 && knownChannels.includes(parts[0])) {\n base.formChannel = parts[0];\n base.formChatId = parts[1];\n base.formMessage = parts.slice(2).join(':');\n } else {\n base.formChannel = 'telegram';\n base.formChatId = '';\n }\n } else {\n base.formChannel = 'telegram';\n base.formChatId = '';\n }\n\n base.formMessageMdMode = 'edit';\n base.messageEditorNonce = 1;\n return base;\n}\n\nexport function useCronJobForm(opts: {\n m: ReturnType<typeof makeMessages>;\n defaultModelForForm: () => string;\n channels: ChannelStatus[];\n chatAgents: ChatAgentOption[];\n}) {\n const { m, defaultModelForForm, channels, chatAgents } = opts;\n\n const [form, dispatch] = useReducer(formReducer, undefined as never, initialFormState);\n const formModelUserTouched = useRef(false);\n\n const validChannelSet = useMemo(\n () => new Set(['local', ...channels.map((x) => x.name)]),\n [channels],\n );\n\n if (form.formOpen && form.formMode === 'add' && !validChannelSet.has(form.formChannel)) {\n dispatch({ type: 'patch', patch: { formChannel: 'local' } });\n }\n\n if (form.formOpen && form.formMode === 'add' && !formModelUserTouched.current) {\n const next = defaultModelForForm();\n if (next && next !== form.formModel) {\n dispatch({ type: 'patch', patch: { formModel: next } });\n }\n }\n\n const sessionChatIdsResource = useAsyncResource(\n () => getSessionChatIds(form.formChannel),\n [form.formChannel],\n {\n enabled: form.formOpen && form.formChannel !== 'local',\n initial: [] as SessionChatId[],\n errorData: [] as SessionChatId[],\n },\n );\n const sessionChatIds = form.formChannel === 'local' ? [] : sessionChatIdsResource.data;\n\n const cronAgentSelectOptions = useMemo(() => {\n const ids = new Set(chatAgents.map((a) => a.id));\n const out: ChatAgentOption[] = [...chatAgents];\n const extra = form.formAgentId.trim().toLowerCase();\n if (extra && !ids.has(extra)) {\n out.push({ id: extra });\n }\n return out;\n }, [chatAgents, form.formAgentId]);\n\n const needsDeliveryChat =\n form.formChannel !== 'local' &&\n (form.formSessionTarget === 'main' || (form.formSessionTarget === 'isolated' && !form.formAgentLocalOnly));\n\n const showChannelPicker =\n form.formSessionTarget === 'main' || (form.formSessionTarget === 'isolated' && !form.formAgentLocalOnly);\n\n const canSubmit =\n Boolean(form.formName.trim()) &&\n Boolean(form.formSchedule.trim()) &&\n Boolean(form.formMessage.trim()) &&\n (!needsDeliveryChat || Boolean(form.formChatId.trim()));\n\n const openForm = useCallback(\n (job?: CronJob) => {\n formModelUserTouched.current = false;\n dispatch({ type: 'replace', state: buildOpenFormState(job, defaultModelForForm) });\n },\n [defaultModelForForm],\n );\n\n const setMessageMdMode = useCallback((mode: FormMessageMdMode) => {\n dispatch({ type: 'setMessageMdMode', mode });\n }, []);\n\n const applyCronTemplate = useCallback(\n (templateId: string): boolean => {\n const def = cronTemplateById(templateId);\n const copy = def ? getCronTemplateCopy(m.cron, templateId) : undefined;\n if (!def || !copy) return false;\n formModelUserTouched.current = false;\n dispatch({\n type: 'replace',\n state: {\n ...initialFormState(),\n formOpen: true,\n formMode: 'add',\n formName: copy.title,\n formSchedule: def.defaultSchedule,\n formMessage: copy.prompt,\n formSessionTarget: def.defaultSessionTarget,\n formModel: defaultModelForForm(),\n messageEditorNonce: 1,\n },\n });\n return true;\n },\n [defaultModelForForm, m.cron],\n );\n\n const closeForm = useCallback(() => {\n formModelUserTouched.current = false;\n dispatch({ type: 'replace', state: initialFormState() });\n }, []);\n\n const handleFormSessionTargetChange = useCallback(\n (target: FormSessionTarget, defaultModelFallback: () => string, currentModel: string) => {\n const patch: Partial<FormState> = { formSessionTarget: target };\n if (target === 'main') {\n patch.formAgentLocalOnly = false;\n patch.formAgentId = '';\n patch.formWorkingDirectory = '';\n } else if (target === 'isolated' && !currentModel) {\n patch.formModel = defaultModelFallback();\n }\n dispatch({ type: 'patch', patch });\n },\n [],\n );\n\n const handleFormChannelChange = useCallback((v: string) => {\n dispatch({\n type: 'patch',\n patch: {\n formChannel: v,\n formChatId: '',\n ...(v === 'local' ? { formAgentLocalOnly: false } : {}),\n },\n });\n }, []);\n\n const handleFormModelUserChange = useCallback((id: string) => {\n formModelUserTouched.current = true;\n dispatch({ type: 'patch', patch: { formModel: id } });\n }, []);\n\n const refreshRecipientsList = useCallback(() => {\n void getSessionChatIds(form.formChannel).then(sessionChatIdsResource.setData);\n }, [form.formChannel, sessionChatIdsResource.setData]);\n\n const patchForm = useCallback((patch: Partial<FormState>) => {\n dispatch({ type: 'patch', patch });\n }, []);\n\n return {\n // state\n formOpen: form.formOpen,\n formMode: form.formMode,\n formJobId: form.formJobId,\n formName: form.formName,\n formSchedule: form.formSchedule,\n formChannel: form.formChannel,\n formChatId: form.formChatId,\n formMessage: form.formMessage,\n formMessageMdMode: form.formMessageMdMode,\n messageEditorNonce: form.messageEditorNonce,\n formSessionTarget: form.formSessionTarget,\n formAgentId: form.formAgentId,\n formAgentLocalOnly: form.formAgentLocalOnly,\n formWorkingDirectory: form.formWorkingDirectory,\n formModel: form.formModel,\n formSubmitting: form.formSubmitting,\n sessionChatIds,\n // setters\n setFormName: (formName: string) => patchForm({ formName }),\n setFormSchedule: (formSchedule: string) => patchForm({ formSchedule }),\n setFormChatId: (formChatId: string) => patchForm({ formChatId }),\n setFormMessage: (formMessage: string) => patchForm({ formMessage }),\n setFormAgentId: (formAgentId: string) => patchForm({ formAgentId }),\n setFormAgentLocalOnly: (formAgentLocalOnly: boolean) => patchForm({ formAgentLocalOnly }),\n setFormWorkingDirectory: (formWorkingDirectory: string) => patchForm({ formWorkingDirectory }),\n setFormSubmitting: (formSubmitting: boolean) => patchForm({ formSubmitting }),\n // derived\n canSubmit,\n needsDeliveryChat,\n showChannelPicker,\n cronAgentSelectOptions,\n // handlers\n openForm,\n closeForm,\n applyCronTemplate,\n setMessageMdMode,\n handleFormSessionTargetChange,\n handleFormChannelChange,\n handleFormModelUserChange,\n refreshRecipientsList,\n };\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { isElectronCronDisplayWakeAvailable } from '@/lib/electron-env';\n\ntype WakeMode = 'none' | 'electron' | 'navigator';\n\nexport function useCronKeepAwake(opts: { onUnavailable: () => void }) {\n const { onUnavailable } = opts;\n const [keepAwake, setKeepAwake] = useState(false);\n const wakeLockRef = useRef<WakeLockSentinel | null>(null);\n const wakeModeRef = useRef<WakeMode>('none');\n const keepAwakeRef = useRef(keepAwake);\n const wakeSupported = typeof navigator !== 'undefined' && 'wakeLock' in navigator;\n const featureAvailable = wakeSupported || isElectronCronDisplayWakeAvailable();\n\n const releaseWakeLock = useCallback(async () => {\n if (wakeModeRef.current === 'electron') {\n try {\n await window.electronAPI?.cron?.setDisplaySleepPrevented?.(false);\n } catch {\n /* ignore */\n }\n wakeModeRef.current = 'none';\n return;\n }\n try {\n await wakeLockRef.current?.release();\n } catch {\n /* ignore */\n }\n wakeLockRef.current = null;\n wakeModeRef.current = 'none';\n }, []);\n\n const acquireWakeLock = useCallback(async () => {\n const electronWake =\n typeof window !== 'undefined' ? window.electronAPI?.cron?.setDisplaySleepPrevented : undefined;\n if (electronWake) {\n try {\n await electronWake(true);\n wakeModeRef.current = 'electron';\n return;\n } catch {\n onUnavailable();\n setKeepAwake(false);\n return;\n }\n }\n if (!wakeSupported) return;\n try {\n const sentinel = await navigator.wakeLock.request('screen');\n wakeLockRef.current = sentinel;\n wakeModeRef.current = 'navigator';\n sentinel.addEventListener('release', () => {\n wakeLockRef.current = null;\n wakeModeRef.current = 'none';\n });\n } catch {\n onUnavailable();\n setKeepAwake(false);\n }\n }, [onUnavailable, wakeSupported]);\n\n keepAwakeRef.current = keepAwake;\n\n useEffect(() => {\n if (!keepAwake) {\n void releaseWakeLock();\n return;\n }\n void acquireWakeLock();\n const onVis = () => {\n if (document.visibilityState === 'visible' && keepAwakeRef.current) void acquireWakeLock();\n };\n document.addEventListener('visibilitychange', onVis);\n return () => {\n document.removeEventListener('visibilitychange', onVis);\n void releaseWakeLock();\n };\n }, [keepAwake, acquireWakeLock, releaseWakeLock]);\n\n return { keepAwake, setKeepAwake, featureAvailable };\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { fetchChatAgents, type ChatAgentOption } from '@/features/chat/agent-selection/chat-agents-api';\nimport {\n getAllRunsHistory,\n getChannels,\n getConfig,\n getModels,\n listJobs,\n type ChannelStatus,\n type CronJob,\n type CronRunHistoryRow,\n} from '@/features/cron/cron-api';\nimport { isDreamingManagedCronJob } from '@/features/cron/cron-dreaming-jobs';\nimport {\n RUN_HISTORY_FETCH_LIMIT,\n startOfLocalDay,\n startOfLocalMonth,\n startOfLocalWeekMonday,\n} from '@/features/cron/cron-page-lib';\nimport { fetchGatewayConfigSwrResponse } from '@/features/gateway/gateway-config-swr';\nimport { normalizeHeartbeatFromConfig } from '@/features/settings/heartbeat-config-api';\n\ntype FailMessages = {\n failedToLoadJobs: string;\n};\n\nexport type HistoryRange = 'day' | 'week' | 'month';\nexport type JobSort = 'created_desc' | 'created_asc';\n\nexport function useCronPageData(opts: {\n hasToken: boolean;\n failMessages: FailMessages;\n isHistoryTab: boolean;\n}) {\n const { hasToken, failMessages, isHistoryTab } = opts;\n\n const [jobs, setJobs] = useState<CronJob[]>([]);\n const [channels, setChannels] = useState<ChannelStatus[]>([]);\n const [availableModels, setAvailableModels] = useState<{ id: string; name: string; provider: string }[]>([]);\n const [defaultModel, setDefaultModel] = useState('');\n const [chatAgents, setChatAgents] = useState<ChatAgentOption[]>([]);\n const [gatewayConfigRaw, setGatewayConfigRaw] = useState<unknown>(null);\n const [runHistory, setRunHistory] = useState<CronRunHistoryRow[]>([]);\n const [runHistoryLoading, setRunHistoryLoading] = useState(false);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const loadJobs = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const list = await listJobs();\n setJobs(list);\n } catch (e) {\n setError(e instanceof Error ? e.message : failMessages.failedToLoadJobs);\n } finally {\n setLoading(false);\n }\n }, [failMessages.failedToLoadJobs]);\n\n const loadAux = useCallback(async () => {\n try {\n const [ch, mods, cfg, cfgFull, agentsPayload] = await Promise.all([\n getChannels(),\n getModels(),\n getConfig(),\n fetchGatewayConfigSwrResponse(),\n fetchChatAgents().catch(() => null),\n ]);\n setChannels(ch);\n setAvailableModels(mods);\n setDefaultModel(cfg.model || '');\n setGatewayConfigRaw(cfgFull.payload?.config ?? null);\n if (agentsPayload) setChatAgents(agentsPayload.items);\n } catch {\n /* non-fatal */\n }\n }, []);\n\n const loadRunHistoryOnly = useCallback(async () => {\n setRunHistoryLoading(true);\n try {\n const rows = await getAllRunsHistory(RUN_HISTORY_FETCH_LIMIT);\n setRunHistory(rows);\n } catch {\n /* ignore */\n } finally {\n setRunHistoryLoading(false);\n }\n }, []);\n\n useEffect(() => {\n if (!hasToken) return;\n void loadJobs();\n void loadAux();\n }, [hasToken, loadJobs, loadAux]);\n\n useEffect(() => {\n if (!hasToken) return;\n const onReload = () => {\n void fetchGatewayConfigSwrResponse().then((r) => {\n setGatewayConfigRaw(r.payload?.config ?? null);\n });\n };\n window.addEventListener('config-reload', onReload);\n return () => window.removeEventListener('config-reload', onReload);\n }, [hasToken]);\n\n useEffect(() => {\n if (!hasToken || !isHistoryTab) return;\n void loadRunHistoryOnly();\n }, [hasToken, isHistoryTab, loadRunHistoryOnly]);\n\n const userCronJobs = useMemo(() => jobs.filter((j) => !isDreamingManagedCronJob(j)), [jobs]);\n const systemCronJobs = useMemo(() => jobs.filter((j) => isDreamingManagedCronJob(j)), [jobs]);\n\n const heartbeatFromConfig = useMemo(() => normalizeHeartbeatFromConfig(gatewayConfigRaw), [gatewayConfigRaw]);\n\n const refreshAll = useCallback(() => {\n void loadJobs();\n void loadAux();\n void loadRunHistoryOnly();\n }, [loadJobs, loadAux, loadRunHistoryOnly]);\n\n return {\n jobs,\n channels,\n availableModels,\n defaultModel,\n chatAgents,\n gatewayConfigRaw,\n runHistory,\n runHistoryLoading,\n loading,\n error,\n setError,\n userCronJobs,\n systemCronJobs,\n heartbeatFromConfig,\n loadJobs,\n loadAux,\n loadRunHistoryOnly,\n refreshAll,\n };\n}\n\nexport function sortJobsByCreated(arr: CronJob[], sort: JobSort): CronJob[] {\n const next = [...arr];\n next.sort((a, b) => {\n const ta = new Date(a.created_at).getTime();\n const tb = new Date(b.created_at).getTime();\n return sort === 'created_desc' ? tb - ta : ta - tb;\n });\n return next;\n}\n\nexport function filterRunHistory(\n runHistory: CronRunHistoryRow[],\n range: HistoryRange,\n jobFilter: string,\n statusFilter: string,\n): CronRunHistoryRow[] {\n const now = new Date();\n const from =\n range === 'day' ? startOfLocalDay(now) : range === 'week' ? startOfLocalWeekMonday(now) : startOfLocalMonth(now);\n return runHistory.filter((row) => {\n if (new Date(row.startedAt) < from) return false;\n if (jobFilter && row.jobId !== jobFilter) return false;\n if (statusFilter && row.status !== statusFilter) return false;\n return true;\n });\n}\n","import { useCallback, useEffect, useLayoutEffect, useMemo, useReducer, useRef } from 'react';\n\nimport { uiPatchReducer } from '@/lib/settings-form-draft';\nimport { useLocation } from 'react-router-dom';\n\nimport {\n addJob,\n getHistory,\n getJob,\n removeJob,\n runJob,\n toggleJob,\n updateJob,\n type CronDelivery,\n type CronJob,\n type CronJobExecution,\n type CronPayload,\n} from '@/features/cron/cron-api';\nimport { CronConfirmActionDialog } from '@/features/cron/cron-confirm-action-dialog';\nimport { CronJobDetailDrawer } from '@/features/cron/cron-job-detail-drawer';\nimport { CronJobFormDialog } from '@/features/cron/cron-job-form-dialog';\nimport { CronMainToolbar } from '@/features/cron/cron-main-toolbar';\nimport { CronPageHeaderActions } from '@/features/cron/cron-page-header-actions';\nimport { CronRunHistorySection } from '@/features/cron/cron-run-history-section';\nimport { CronSystemTasksPanel } from '@/features/cron/cron-system-tasks-panel';\nimport { CronTasksPanel } from '@/features/cron/cron-tasks-panel';\nimport type { CronTemplateFilter } from '@/features/cron/cron-template-library';\nimport { CronTemplatePickerDialog } from '@/features/cron/cron-template-picker-dialog';\nimport { useCronJobForm } from '@/features/cron/use-cron-job-form';\nimport { useCronKeepAwake } from '@/features/cron/use-cron-keep-awake';\nimport {\n filterRunHistory,\n sortJobsByCreated,\n useCronPageData,\n type HistoryRange,\n type JobSort,\n} from '@/features/cron/use-cron-page-data';\nimport { messages, type MessageBundle } from '@/i18n/messages';\nimport { useGatewayStore } from '@/stores/gateway-store';\nimport { useLocaleStore } from '@/stores/locale-store';\nimport { usePageHeaderStore } from '@/stores/page-header-store';\nimport { useThemeStore } from '@/stores/theme-store';\n\ntype CronPageUi = {\n mainTab: 'myTasks' | 'systemTasks' | 'history';\n jobSort: JobSort;\n historyRange: HistoryRange;\n historyJobFilter: string;\n historyStatusFilter: string;\n detailOpen: boolean;\n detailJob: CronJob | null;\n detailHistory: CronJobExecution[];\n detailLoading: boolean;\n confirmOpen: boolean;\n templatePickerOpen: boolean;\n templateCategoryFilter: CronTemplateFilter;\n};\n\nconst initialCronPageUi: CronPageUi = {\n mainTab: 'myTasks',\n jobSort: 'created_desc',\n historyRange: 'day',\n historyJobFilter: '',\n historyStatusFilter: '',\n detailOpen: false,\n detailJob: null,\n detailHistory: [],\n detailLoading: false,\n confirmOpen: false,\n templatePickerOpen: false,\n templateCategoryFilter: 'all',\n};\n\nexport function CronPage() {\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n const c = m.cron;\n const chatM = m.chat;\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n const resolvedTheme = useThemeStore((s) => s.resolved);\n const isDark = resolvedTheme === 'dark';\n const localeTag = language === 'zh' ? 'zh-CN' : 'en-US';\n\n const [ui, dispatch] = useReducer(uiPatchReducer<CronPageUi>, initialCronPageUi);\n const {\n mainTab,\n jobSort,\n historyRange,\n historyJobFilter,\n historyStatusFilter,\n detailOpen,\n detailJob,\n detailHistory,\n detailLoading,\n confirmOpen,\n templatePickerOpen,\n templateCategoryFilter,\n } = ui;\n\n const data = useCronPageData({\n hasToken,\n failMessages: { failedToLoadJobs: c.failedToLoadJobs },\n isHistoryTab: mainTab === 'history',\n });\n const { setError } = data;\n\n const keepAwakeHook = useCronKeepAwake({ onUnavailable: () => setError(c.wakeLockUnavailable) });\n\n const defaultModelForForm = useCallback(\n () => data.defaultModel || (data.availableModels.length > 0 ? data.availableModels[0].id : ''),\n [data.defaultModel, data.availableModels],\n );\n\n const form = useCronJobForm({\n m,\n defaultModelForForm,\n channels: data.channels,\n chatAgents: data.chatAgents,\n });\n\n const confirmActionRef = useRef<'delete' | 'run' | null>(null);\n const confirmJobIdRef = useRef<string | null>(null);\n\n const openConfirm = useCallback((action: 'delete' | 'run', jobId: string) => {\n confirmActionRef.current = action;\n confirmJobIdRef.current = jobId;\n dispatch({ type: 'patch', patch: { confirmOpen: true } });\n }, []);\n\n const dismissConfirm = useCallback(() => {\n dispatch({ type: 'patch', patch: { confirmOpen: false } });\n confirmJobIdRef.current = null;\n confirmActionRef.current = null;\n }, []);\n\n const absorbCardClickJobIdRef = useRef<string | null>(null);\n\n const scheduleAbsorbNextMenuCardClick = useCallback((jobId: string) => {\n absorbCardClickJobIdRef.current = jobId;\n window.setTimeout(() => {\n if (absorbCardClickJobIdRef.current === jobId) {\n absorbCardClickJobIdRef.current = null;\n }\n }, 400);\n }, []);\n\n const onSelectTemplate = useCallback(\n (templateId: string) => {\n const ok = form.applyCronTemplate(templateId);\n if (ok) dispatch({ type: 'patch', patch: { templatePickerOpen: false } });\n },\n [form],\n );\n\n const submitForm = async () => {\n if (!form.formName.trim()) {\n setError(c.nameRequired);\n return;\n }\n if (!form.formSchedule.trim() || !form.formMessage.trim()) {\n setError(c.scheduleRequired);\n return;\n }\n if (form.needsDeliveryChat && !form.formChatId.trim()) {\n setError(c.chatIdRequired);\n return;\n }\n\n form.setFormSubmitting(true);\n setError(null);\n try {\n const message = form.formMessage.trim();\n let delivery: CronDelivery;\n if (form.formSessionTarget === 'isolated' && form.formAgentLocalOnly) {\n delivery = { mode: 'none' };\n } else if (form.formChannel === 'local') {\n delivery = { mode: 'direct', channel: 'local' };\n } else {\n delivery = { mode: 'direct', channel: form.formChannel, to: form.formChatId.trim() };\n }\n\n const payload: CronPayload =\n form.formSessionTarget === 'isolated'\n ? {\n kind: 'agentTurn',\n message,\n ...(form.formModel.trim() ? { model: form.formModel.trim() } : {}),\n }\n : { kind: 'systemEvent', text: message };\n\n const modelTrimmed = form.formModel.trim();\n const agentIdTrim = form.formAgentId.trim().toLowerCase();\n const agentIdForEdit = form.formSessionTarget === 'main' ? null : agentIdTrim || null;\n const wdTrim = form.formWorkingDirectory.trim();\n const jobData = {\n name: form.formName.trim(),\n schedule: form.formSchedule.trim(),\n sessionTarget: form.formSessionTarget,\n model: form.formSessionTarget === 'isolated' && modelTrimmed ? modelTrimmed : undefined,\n delivery,\n payload,\n ...(form.formMode === 'edit'\n ? {\n agentId: agentIdForEdit,\n workingDirectory: form.formSessionTarget === 'isolated' ? wdTrim || null : null,\n }\n : {\n ...(form.formSessionTarget === 'isolated' && agentIdTrim ? { agentId: agentIdTrim } : {}),\n ...(form.formSessionTarget === 'isolated' && wdTrim ? { workingDirectory: wdTrim } : {}),\n }),\n };\n\n if (form.formMode === 'edit' && form.formJobId) {\n await updateJob(form.formJobId, jobData);\n } else {\n const { schedule: sched, agentId, workingDirectory, ...rest } = jobData;\n await addJob(sched, {\n ...rest,\n ...(agentId != null ? { agentId } : {}),\n ...(workingDirectory ? { workingDirectory } : {}),\n });\n }\n form.closeForm();\n await data.loadJobs();\n await data.loadAux();\n } catch (e) {\n setError(\n e instanceof Error\n ? e.message\n : form.formMode === 'edit'\n ? c.failedToUpdateJob\n : c.failedToCreateJob,\n );\n } finally {\n form.setFormSubmitting(false);\n }\n };\n\n const openDetail = async (job: CronJob) => {\n dispatch({\n type: 'patch',\n patch: { detailOpen: true, detailJob: job, detailLoading: true, detailHistory: [] },\n });\n try {\n const full = await getJob(job.id);\n if (full) {\n dispatch({\n type: 'patch',\n patch: { detailJob: full, detailHistory: await getHistory(job.id, 20) },\n });\n }\n } catch {\n /* keep partial */\n } finally {\n dispatch({ type: 'patch', patch: { detailLoading: false } });\n }\n };\n\n const closeDetail = useCallback(() => {\n dispatch({ type: 'patch', patch: { detailOpen: false, detailJob: null } });\n }, []);\n\n const openTemplatePicker = useCallback(() => {\n dispatch({ type: 'patch', patch: { templateCategoryFilter: 'all', templatePickerOpen: true } });\n }, []);\n\n const onToggle = async (job: CronJob, enabled: boolean) => {\n try {\n await toggleJob(job.id, enabled);\n await Promise.all([data.loadJobs(), data.loadAux()]);\n } catch (e) {\n setError(e instanceof Error ? e.message : c.failedToToggleJob);\n }\n };\n\n const runConfirm = async () => {\n const id = confirmJobIdRef.current;\n const action = confirmActionRef.current;\n if (!id || !action) return;\n dismissConfirm();\n try {\n if (action === 'run') {\n await runJob(id);\n } else {\n await removeJob(id);\n if (detailJob?.id === id) {\n dispatch({ type: 'patch', patch: { detailOpen: false, detailJob: null } });\n }\n }\n await Promise.all([data.loadJobs(), data.loadAux(), data.loadRunHistoryOnly()]);\n } catch (e) {\n setError(e instanceof Error ? e.message : c.actionFailed);\n }\n };\n\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key !== 'Escape') return;\n if (form.formOpen) form.closeForm();\n else if (detailOpen) {\n dispatch({ type: 'patch', patch: { detailOpen: false, detailJob: null } });\n }\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [form, detailOpen]);\n\n const statusLabels = useMemo(\n () => ({\n running: c.execStatusRunning,\n success: c.execStatusSuccess,\n failed: c.execStatusFailed,\n cancelled: c.execStatusCancelled,\n }),\n [c.execStatusCancelled, c.execStatusFailed, c.execStatusRunning, c.execStatusSuccess],\n );\n\n const sortedUserJobs = useMemo(() => sortJobsByCreated(data.userCronJobs, jobSort), [data.userCronJobs, jobSort]);\n const sortedSystemJobs = useMemo(() => sortJobsByCreated(data.systemCronJobs, jobSort), [data.systemCronJobs, jobSort]);\n\n const filteredRunHistory = useMemo(\n () => filterRunHistory(data.runHistory, historyRange, historyJobFilter, historyStatusFilter),\n [data.runHistory, historyRange, historyJobFilter, historyStatusFilter],\n );\n\n const scheduleBadgeLabels = c.scheduleBadge;\n const { pathname } = useLocation();\n const inSettingsShell = pathname.startsWith('/settings/');\n\n if (!hasToken) {\n return (\n <>\n <CronPageHeaderRegistration\n hasToken={hasToken}\n c={c}\n loading={data.loading}\n runHistoryLoading={data.runHistoryLoading}\n onRefresh={data.refreshAll}\n onOpenTemplatePicker={openTemplatePicker}\n onAddJob={() => form.openForm()}\n />\n <div className=\"mx-auto w-full max-w-app-main px-4 py-16 text-center text-sm text-fg-muted sm:px-8\">\n {c.needToken}\n </div>\n </>\n );\n }\n\n return (\n <>\n <CronPageHeaderRegistration\n hasToken={hasToken}\n c={c}\n loading={data.loading}\n runHistoryLoading={data.runHistoryLoading}\n onRefresh={data.refreshAll}\n onOpenTemplatePicker={openTemplatePicker}\n onAddJob={() => form.openForm()}\n />\n <div className=\"flex min-h-0 min-w-0 flex-1 flex-col bg-surface-panel\">\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6 sm:px-8\">\n {data.error ? (\n <div\n className=\"rounded-xl border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-800 dark:border-red-900/50 dark:bg-red-950/40 dark:text-red-200\"\n role=\"alert\"\n >\n {data.error}\n </div>\n ) : null}\n\n <header className=\"flex flex-col gap-4\">\n <div className=\"min-w-0\">\n <h1 className=\"text-xl font-semibold tracking-tight text-fg\">{c.title}</h1>\n <p className=\"mt-1 max-w-2xl text-sm text-fg-muted\">{c.subtitle}</p>\n </div>\n </header>\n\n {inSettingsShell ? (\n <div className=\"flex flex-wrap items-center justify-end gap-2 border-b border-edge-subtle pb-3 dark:border-edge-subtle\">\n <CronPageHeaderActions\n c={c}\n loading={data.loading}\n runHistoryLoading={data.runHistoryLoading}\n onRefresh={data.refreshAll}\n onOpenTemplatePicker={openTemplatePicker}\n onAddJob={() => form.openForm()}\n />\n </div>\n ) : null}\n\n <CronMainToolbar\n c={c}\n mainTab={mainTab}\n onMainTabChange={(tab) => dispatch({ type: 'patch', patch: { mainTab: tab } })}\n jobSort={jobSort}\n onJobSortChange={(sort) => dispatch({ type: 'patch', patch: { jobSort: sort } })}\n historyRange={historyRange}\n onHistoryRangeChange={(range) => dispatch({ type: 'patch', patch: { historyRange: range } })}\n historyJobFilter={historyJobFilter}\n onHistoryJobFilterChange={(filter) =>\n dispatch({ type: 'patch', patch: { historyJobFilter: filter } })\n }\n historyStatusFilter={historyStatusFilter}\n onHistoryStatusFilterChange={(filter) =>\n dispatch({ type: 'patch', patch: { historyStatusFilter: filter } })\n }\n jobs={data.jobs}\n />\n\n {mainTab === 'myTasks' ? (\n <CronTasksPanel\n c={c}\n localeTag={localeTag}\n scheduleBadgeLabels={scheduleBadgeLabels}\n loading={data.loading}\n jobsCount={data.userCronJobs.length}\n sortedJobs={sortedUserJobs}\n templateCategoryFilter={templateCategoryFilter}\n onTemplateCategoryFilterChange={(filter) =>\n dispatch({ type: 'patch', patch: { templateCategoryFilter: filter } })\n }\n onSelectTemplate={onSelectTemplate}\n keepAwake={keepAwakeHook.keepAwake}\n wakeSupported={keepAwakeHook.featureAvailable}\n onWakeUnsupportedClick={() => setError(c.wakeLockUnavailable)}\n onKeepAwakeToggle={() => keepAwakeHook.setKeepAwake((v) => !v)}\n absorbCardClickJobIdRef={absorbCardClickJobIdRef}\n scheduleAbsorbNextMenuCardClick={scheduleAbsorbNextMenuCardClick}\n onOpenDetail={(j) => void openDetail(j)}\n onToggle={(j, en) => void onToggle(j, en)}\n onEdit={(j) => form.openForm(j)}\n onAddJob={() => form.openForm()}\n onRunNow={(j) => openConfirm('run', j.id)}\n onDelete={(j) => openConfirm('delete', j.id)}\n />\n ) : mainTab === 'systemTasks' ? (\n <CronSystemTasksPanel\n c={c}\n language={language}\n localeTag={localeTag}\n scheduleBadgeLabels={scheduleBadgeLabels}\n loading={data.loading}\n sortedSystemJobs={sortedSystemJobs}\n heartbeat={data.heartbeatFromConfig}\n keepAwake={keepAwakeHook.keepAwake}\n wakeSupported={keepAwakeHook.featureAvailable}\n onWakeUnsupportedClick={() => setError(c.wakeLockUnavailable)}\n onKeepAwakeToggle={() => keepAwakeHook.setKeepAwake((v) => !v)}\n absorbCardClickJobIdRef={absorbCardClickJobIdRef}\n scheduleAbsorbNextMenuCardClick={scheduleAbsorbNextMenuCardClick}\n onOpenDetail={(j) => void openDetail(j)}\n onToggle={(j, en) => void onToggle(j, en)}\n onEdit={(j) => form.openForm(j)}\n onRunNow={(j) => openConfirm('run', j.id)}\n onDelete={(j) => openConfirm('delete', j.id)}\n />\n ) : (\n <CronRunHistorySection\n c={c}\n runHistoryLoading={data.runHistoryLoading}\n runHistory={data.runHistory}\n filteredRunHistory={filteredRunHistory}\n jobs={data.jobs}\n onRefreshHistory={() => void data.loadRunHistoryOnly()}\n onOpenJobDetail={(j) => void openDetail(j)}\n statusLabels={statusLabels}\n />\n )}\n </div>\n\n <CronJobFormDialog\n open={form.formOpen}\n onRequestClose={form.closeForm}\n c={c}\n chatM={chatM}\n agentsMessages={m.agentsSettings}\n isDark={isDark}\n channels={data.channels}\n sessionChatIds={form.sessionChatIds}\n cronAgentSelectOptions={form.cronAgentSelectOptions}\n defaultModelResolver={defaultModelForForm}\n formMode={form.formMode}\n formJobId={form.formJobId}\n formName={form.formName}\n onFormNameChange={form.setFormName}\n formSchedule={form.formSchedule}\n onFormScheduleChange={form.setFormSchedule}\n formSubmitting={form.formSubmitting}\n formSessionTarget={form.formSessionTarget}\n onFormSessionTargetChange={form.handleFormSessionTargetChange}\n formAgentLocalOnly={form.formAgentLocalOnly}\n onFormAgentLocalOnlyChange={form.setFormAgentLocalOnly}\n formModel={form.formModel}\n onFormModelUserChange={form.handleFormModelUserChange}\n formAgentId={form.formAgentId}\n onFormAgentIdChange={form.setFormAgentId}\n formWorkingDirectory={form.formWorkingDirectory}\n onFormWorkingDirectoryChange={form.setFormWorkingDirectory}\n formChannel={form.formChannel}\n onFormChannelChange={form.handleFormChannelChange}\n formChatId={form.formChatId}\n onFormChatIdChange={form.setFormChatId}\n formMessage={form.formMessage}\n onFormMessageChange={form.setFormMessage}\n formMessageMdMode={form.formMessageMdMode}\n onSetMessageMdMode={form.setMessageMdMode}\n messageEditorNonce={form.messageEditorNonce}\n needsDeliveryChat={form.needsDeliveryChat}\n showChannelPicker={form.showChannelPicker}\n canSubmit={form.canSubmit}\n onSubmit={() => void submitForm()}\n onRefreshRecipients={form.refreshRecipientsList}\n />\n\n <CronTemplatePickerDialog\n open={templatePickerOpen}\n onOpenChange={(openNext) => {\n dispatch({\n type: 'patch',\n patch: {\n templatePickerOpen: openNext,\n ...(openNext ? { templateCategoryFilter: 'all' as const } : {}),\n },\n });\n }}\n c={c}\n localeTag={localeTag}\n scheduleBadgeLabels={scheduleBadgeLabels}\n categoryFilter={templateCategoryFilter}\n onCategoryFilterChange={(filter) =>\n dispatch({ type: 'patch', patch: { templateCategoryFilter: filter } })\n }\n onSelectTemplate={onSelectTemplate}\n />\n\n <CronJobDetailDrawer\n open={detailOpen}\n onDismiss={closeDetail}\n detailJob={detailJob}\n detailLoading={detailLoading}\n detailHistory={detailHistory}\n c={c}\n chatWorkingDirNotSet={chatM.workingDirectory.notSet}\n statusLabels={statusLabels}\n />\n\n <CronConfirmActionDialog\n open={confirmOpen}\n onOpenChange={(open) => dispatch({ type: 'patch', patch: { confirmOpen: open } })}\n action={confirmActionRef.current}\n c={c}\n onDismiss={dismissConfirm}\n onConfirm={runConfirm}\n />\n </div>\n </>\n );\n}\n\nfunction CronPageHeaderRegistration({\n hasToken,\n c,\n loading,\n runHistoryLoading,\n onRefresh,\n onOpenTemplatePicker,\n onAddJob,\n}: {\n hasToken: boolean;\n c: MessageBundle['cron'];\n loading: boolean;\n runHistoryLoading: boolean;\n onRefresh: () => void;\n onOpenTemplatePicker: () => void;\n onAddJob: () => void;\n}) {\n const { pathname } = useLocation();\n const inSettingsShell = pathname.startsWith('/settings/');\n const setPageHeader = usePageHeaderStore((s) => s.setPageHeader);\n const clearPageHeader = usePageHeaderStore((s) => s.clearPageHeader);\n\n const cronHeaderEnd = useMemo(\n () => (\n <CronPageHeaderActions\n c={c}\n loading={loading}\n runHistoryLoading={runHistoryLoading}\n onRefresh={onRefresh}\n onOpenTemplatePicker={onOpenTemplatePicker}\n onAddJob={onAddJob}\n />\n ),\n [c, loading, runHistoryLoading, onRefresh, onOpenTemplatePicker, onAddJob],\n );\n\n useLayoutEffect(() => {\n if (!hasToken || inSettingsShell) {\n clearPageHeader();\n return () => clearPageHeader();\n }\n setPageHeader({\n startExtra: null,\n main: null,\n end: cronHeaderEnd,\n });\n return () => clearPageHeader();\n }, [clearPageHeader, cronHeaderEnd, hasToken, inSettingsShell, setPageHeader]);\n\n return null;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cron-page-BoNRJNVV.js","names":["Dialog","Button","MessageBundle","CronCopy","CronConfirmActionDialogProps","open","onOpenChange","action","c","onDismiss","onConfirm","CronConfirmActionDialog","t0","$","_c","t1","Symbol","for","t2","delete","runNow","t3","t4","confirmDelete","confirmRun","t5","t6","cancel","t7","undefined","t8","t9","t10","t11","t12","t13","formControlBorderFocusClass","nativeSelectMaxWidthClass","selectControlBaseClass","cn","RUN_HISTORY_FETCH_LIMIT","DEFAULT_SCHEDULE","startOfLocalDay","d","Date","x","setHours","startOfLocalWeekMonday","day","getDay","diff","setDate","getDate","startOfLocalMonth","getFullYear","getMonth","navigateToSessionChat","sessionKey","sk","trim","window","dispatchEvent","CustomEvent","detail","bubbles","inputClassName","disabled","selectClassName","cronRecipientSelectClass","cronToolbarSelectClass","Dialog","Loader2","X","MarkdownView","Button","CronJob","CronJobExecution","cronJobBodyText","navigateToSessionChat","execStatusLabel","formatDeliveryToSummary","formatDuration","formatNextRun","formatTime","truncate","MessageBundle","cn","CronCopy","CronJobDetailDrawerProps","open","onDismiss","detailJob","detailLoading","detailHistory","c","chatWorkingDirNotSet","statusLabels","running","success","failed","cancelled","CronJobDetailDrawer","t0","$","_c","t1","next","t2","Symbol","for","t3","t4","id","name","trim","t5","t6","t7","close","t8","t9","agentProfile","agentProfileDefault","channelLocal","colChat","colDetail","colDuration","colStarted","deliveryLocalOnly","deliveryTarget","deliveryTargetLocalChannel","detailRunHistory","disabled","enabled","messageLabel","mode","modeAgentOption","modeDirectOption","nextRun","noRunsYet","openChat","openChatTitle","scheduleLabel","status","timeLabels","workingDirectoryLabel","schedule","sessionTarget","agentId","workingDirectory","delivery","channel","to","next_run","length","map","row","startedAt","duration","summary","error","sessionKey","t10","t11","undefined","t12","useDirectoryPicker","DirectoryPickerTrigger","WorkingDirectoryPickerModal","MessageBundle","Props","value","onChange","path","Promise","disabled","wd","placeholder","title","maxWidthClass","clearLabel","onClear","DirectoryPickerField","t0","$","_c","t1","initialPath","onPicked","picker","t2","trim","trimmed","resolvedTitle","chooseFolder","notSet","selectWorkingDirectory","t3","picking","t4","t5","pick","t6","t7","t8","confirmPick","hasNativePicker","modalOpen","setModalOpen","undefined","t9","Dialog","Eye","RefreshCw","SquarePen","X","MarkdownEditor","MarkdownView","Button","ChatAgentOption","ModelSelector","DirectoryPickerField","ChannelStatus","SessionChatId","CronSchedulePicker","formatRecipientOptionLabel","cronRecipientSelectClass","inputClassName","selectClassName","agentListDisplayName","MessageBundle","cn","CronCopy","CronJobFormDialogProps","open","onRequestClose","c","chatM","agentsMessages","isDark","channels","sessionChatIds","cronAgentSelectOptions","defaultModelResolver","formMode","formJobId","formName","onFormNameChange","v","formSchedule","onFormScheduleChange","formSubmitting","formSessionTarget","onFormSessionTargetChange","target","defaultModelFallback","currentModel","formAgentLocalOnly","onFormAgentLocalOnlyChange","formModel","onFormModelUserChange","id","formAgentId","onFormAgentIdChange","formWorkingDirectory","onFormWorkingDirectoryChange","formChannel","onFormChannelChange","channel","formChatId","onFormChatIdChange","formMessage","onFormMessageChange","formMessageMdMode","onSetMessageMdMode","mode","messageEditorNonce","needsDeliveryChat","showChannelPicker","canSubmit","onSubmit","onRefreshRecipients","CronJobFormDialog","props","$","_c","t0","o","t1","Symbol","for","t2","editJob","addJob","t3","t4","t5","close","t6","t7","name","t8","t9","e_0","e","value","t10","namePlaceholder","t11","t12","schedulePicker","t13","t14","t15","e_1","trim","t16","modeDirectOption","t17","modeAgentOption","t18","t19","modeDirect","modeAgent","t20","t21","t22","agentLocalOnly","agentLocalOnlyHint","agentProfile","agentProfileDefault","agentProfileHint","model","workingDirectoryHint","workingDirectoryLabel","workingDirectoryReset","modelPlaceholder","modelSearchPlaceholder","modelNoMatches","e_2","map","ag","workingDirectory","notSet","e_3","checked","t23","channelLocal","enterManuallyOrSelect","lastActiveLabels","noRecentChats","noRecentChatsOption","recipient","recipientPlaceholder","refreshList","refreshRecipientHint","selectRecipient","e_4","v_0","_temp2","e_5","e_6","v_1","length","item","chatId","t24","message","t25","t26","t27","t28","t29","messageEdit","t30","t31","t32","t33","t34","messagePreview","t35","t36","t37","t38","t39","messagePlaceholder","t40","t41","messageMarkdownHint","t42","t43","t44","cancel","t45","t46","loading","save","create","t47","t48","t49","_temp","t50","ch","enabled","preventDefault","segmentedThumbActiveClassName","segmentedThumbBaseClassName","segmentedTrackClassName","CronJob","cronToolbarSelectClass","MessageBundle","cn","CronCopy","CronMainToolbarProps","c","mainTab","onMainTabChange","tab","jobSort","onJobSortChange","sort","historyRange","onHistoryRangeChange","range","historyJobFilter","onHistoryJobFilterChange","jobId","historyStatusFilter","onHistoryStatusFilterChange","status","jobs","CronMainToolbar","t0","$","_c","t1","title","t2","t3","t4","t5","t6","tabMyTasks","t7","t8","t9","t10","t11","tabSystemTasks","t12","t13","t14","t15","t16","tabRunHistory","t17","t18","t19","t20","sortCreatedAsc","sortCreatedDesc","e","target","value","t21","execStatusCancelled","execStatusFailed","execStatusRunning","execStatusSuccess","filterAllStatuses","filterAllTasks","historyRangeDay","historyRangeMonth","historyRangeWeek","runHistoryTitle","const","map","r","e_0","_temp","e_1","t22","t23","j","id","name","LayoutTemplate","Plus","RefreshCw","Button","MessageBundle","cn","CronCopy","CronPageHeaderActionsProps","c","loading","runHistoryLoading","onRefresh","onOpenTemplatePicker","onAddJob","CronPageHeaderActions","t0","$","_c","busy","t1","refresh","t2","t3","t4","t5","t6","t7","t8","Symbol","for","t9","fromTemplate","t10","t11","addJob","t12","Clock","Loader2","RefreshCw","Button","CronJob","CronRunHistoryRow","navigateToSessionChat","execStatusLabel","formatDuration","formatTime","truncate","MessageBundle","cn","CronCopy","CronRunHistorySectionProps","c","runHistoryLoading","runHistory","filteredRunHistory","jobs","onRefreshHistory","onOpenJobDetail","job","statusLabels","running","success","failed","cancelled","CronRunHistorySection","t0","$","_c","t1","tabRunHistory","t2","runHistoryHint","t3","t4","refresh","t5","t6","t7","t8","t9","t10","t11","t12","colChat","colDetail","colDuration","colJob","colStarted","emptyHistoryHint","emptyHistoryTitle","noRunsYet","openChat","openChatTitle","status","length","map","row","id","startedAt","some","j_0","j","jobId","find","x","jobName","duration","summary","error","sessionKey","trim","t13","DropdownMenu","Clock","MoreVertical","MarkdownView","Button","MutableRefObject","CronJob","cronJobBodyText","formatScheduleBadge","MessageBundle","cn","CronCopy","CronJobCardProps","job","c","localeTag","scheduleBadgeLabels","absorbCardClickJobIdRef","scheduleAbsorbNextMenuCardClick","jobId","onOpenDetail","onToggle","enabled","onEdit","onRunNow","onDelete","CronJobCard","t0","$","_c","t1","Symbol","for","t2","t3","current","id","e","key","preventDefault","t4","t5","t6","t7","e_0","stopPropagation","t8","t9","t10","t11","jobCardMenuAria","_temp","t12","t13","edit","t14","t15","runNow","t16","t17","delete","t18","_temp2","t19","t20","t21","name","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","e_2","e_1","ChevronRight","Info","Loader2","MutableRefObject","Link","Button","CronJob","CronJobCard","HeartbeatSettingsState","formatIntervalMsLabel","messages","MessageBundle","StoredLanguage","cn","CronCopy","CronSystemTasksPanelProps","c","language","localeTag","scheduleBadgeLabels","loading","sortedSystemJobs","heartbeat","keepAwake","wakeSupported","onWakeUnsupportedClick","onKeepAwakeToggle","absorbCardClickJobIdRef","scheduleAbsorbNextMenuCardClick","jobId","onOpenDetail","job","onToggle","enabled","onEdit","onRunNow","onDelete","CronSystemTasksPanel","t0","$","_c","t1","t10","t11","t12","t2","t3","t4","t5","t6","t7","t8","t9","disabled","systemHeartbeatEvery","systemHeartbeatHint","systemHeartbeatInterval","systemHeartbeatSettingsLink","systemHeartbeatStatus","systemHeartbeatTitle","systemTasksIntro","tabSystemTasks","wakeBanner","wakeLockUnavailable","intervalMs","hbInterval","heartbeatSettings","intervalPresets","t13","Symbol","for","t14","t15","t16","t17","undefined","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32","t33","replace","systemDreamingTitle","systemDreamingSettingsLink","systemDreamingHint","length","systemDreamingEmpty","map","id","MessageBundle","CronTemplateCopy","title","description","prompt","getCronTemplateCopy","cron","templateId","raw","templates","undefined","row","Record","trim","CRON_TEMPLATE_CATEGORIES","const","CronTemplateCategory","CronJobTemplateDef","templateId","category","defaultSchedule","defaultSessionTarget","CRON_JOB_TEMPLATES","CronTemplateId","cronTemplateById","id","find","t","Button","MessageBundle","cn","getCronTemplateCopy","CRON_JOB_TEMPLATES","CRON_TEMPLATE_CATEGORIES","CronTemplateCategory","formatScheduleBadge","ScheduleBadgeLabels","CronTemplateFilter","Props","cron","localeTag","scheduleBadgeLabels","categoryFilter","onCategoryFilterChange","next","onSelectTemplate","templateId","CronTemplateLibrary","props","$","_c","t0","filtered","filter","t","category","t1","fromTemplate","t2","t3","t4","templateFilterAll","t5","templateCategories","map","cat","t6","length","templatesEmptyHint","t_0","copy","badge","schedule","defaultSchedule","timezone","undefined","next_run","title","description","Info","Loader2","MutableRefObject","Button","CronJob","CronJobCard","CronTemplateFilter","CronTemplateLibrary","MessageBundle","cn","CronCopy","CronTasksPanelProps","c","localeTag","scheduleBadgeLabels","loading","jobsCount","sortedJobs","templateCategoryFilter","onTemplateCategoryFilterChange","v","onSelectTemplate","templateId","keepAwake","wakeSupported","onWakeUnsupportedClick","onKeepAwakeToggle","absorbCardClickJobIdRef","scheduleAbsorbNextMenuCardClick","jobId","onOpenDetail","job","onToggle","enabled","onEdit","onAddJob","onRunNow","onDelete","CronTasksPanel","t0","$","_c","t1","tabMyTasks","t2","Symbol","for","t3","wakeBanner","t4","t5","t6","wakeLockUnavailable","undefined","t7","t8","t9","t10","t11","t12","t13","t14","t15","emptyStateCta","map","id","j","j_0","en","t16","Dialog","X","Button","CronTemplateFilter","CronTemplateLibrary","MessageBundle","CronCopy","CronTemplatePickerDialogProps","open","onOpenChange","c","localeTag","scheduleBadgeLabels","categoryFilter","onCategoryFilterChange","v","onSelectTemplate","templateId","CronTemplatePickerDialog","t0","$","_c","t1","Symbol","for","t2","fromTemplate","t3","t4","close","t5","t6","t7","_temp","t8","e","preventDefault","useCallback","useMemo","useReducer","useRef","ChatAgentOption","cronJobBodyText","getSessionChatIds","ChannelStatus","CronJob","SessionChatId","DEFAULT_SCHEDULE","getCronTemplateCopy","cronTemplateById","messages","makeMessages","useAsyncResource","FormMode","FormSessionTarget","FormMessageMdMode","FormState","formOpen","formMode","formJobId","formName","formSchedule","formChannel","formChatId","formMessage","formMessageMdMode","messageEditorNonce","formSessionTarget","formAgentId","formAgentLocalOnly","formWorkingDirectory","formModel","formSubmitting","FormAction","type","patch","Partial","state","mode","initialFormState","formReducer","action","buildOpenFormState","job","defaultModelForForm","base","id","name","schedule","String","trim","bodyText","sessionTarget","agentId","toLowerCase","workingDirectory","fromPayload","payload","kind","model","stored","hasLocalChannel","delivery","channel","agentLocalOnly","to","parts","split","knownChannels","length","includes","slice","join","useCronJobForm","opts","m","ReturnType","channels","chatAgents","form","dispatch","undefined","formModelUserTouched","validChannelSet","Set","map","x","has","current","next","sessionChatIdsResource","enabled","initial","errorData","sessionChatIds","data","cronAgentSelectOptions","ids","a","out","extra","push","needsDeliveryChat","showChannelPicker","canSubmit","Boolean","openForm","setMessageMdMode","applyCronTemplate","templateId","def","copy","cron","title","defaultSchedule","prompt","defaultSessionTarget","closeForm","handleFormSessionTargetChange","target","defaultModelFallback","currentModel","handleFormChannelChange","v","handleFormModelUserChange","refreshRecipientsList","then","setData","patchForm","setFormName","setFormSchedule","setFormChatId","setFormMessage","setFormAgentId","setFormAgentLocalOnly","setFormWorkingDirectory","setFormSubmitting","useCallback","useEffect","useRef","useState","isElectronCronDisplayWakeAvailable","WakeMode","useCronKeepAwake","opts","onUnavailable","keepAwake","setKeepAwake","wakeLockRef","WakeLockSentinel","wakeModeRef","keepAwakeRef","wakeSupported","navigator","featureAvailable","releaseWakeLock","current","window","electronAPI","cron","setDisplaySleepPrevented","release","acquireWakeLock","electronWake","undefined","sentinel","wakeLock","request","addEventListener","onVis","document","visibilityState","removeEventListener","useCallback","useEffect","useMemo","useState","fetchChatAgents","ChatAgentOption","getAllRunsHistory","getChannels","getConfig","getModels","listJobs","ChannelStatus","CronJob","CronRunHistoryRow","isDreamingManagedCronJob","RUN_HISTORY_FETCH_LIMIT","startOfLocalDay","startOfLocalMonth","startOfLocalWeekMonday","fetchGatewayConfigSwrResponse","normalizeHeartbeatFromConfig","FailMessages","failedToLoadJobs","HistoryRange","JobSort","useCronPageData","opts","hasToken","failMessages","isHistoryTab","jobs","setJobs","channels","setChannels","availableModels","setAvailableModels","id","name","provider","defaultModel","setDefaultModel","chatAgents","setChatAgents","gatewayConfigRaw","setGatewayConfigRaw","runHistory","setRunHistory","runHistoryLoading","setRunHistoryLoading","loading","setLoading","error","setError","loadJobs","list","e","Error","message","loadAux","ch","mods","cfg","cfgFull","agentsPayload","Promise","all","catch","model","payload","config","items","loadRunHistoryOnly","rows","onReload","then","r","window","addEventListener","removeEventListener","userCronJobs","filter","j","systemCronJobs","heartbeatFromConfig","refreshAll","sortJobsByCreated","arr","sort","next","a","b","ta","Date","created_at","getTime","tb","filterRunHistory","range","jobFilter","statusFilter","now","from","row","startedAt","jobId","status","useCallback","useEffect","useLayoutEffect","useMemo","useReducer","useRef","uiPatchReducer","useLocation","addJob","getHistory","getJob","removeJob","runJob","toggleJob","updateJob","CronDelivery","CronJob","CronJobExecution","CronPayload","CronConfirmActionDialog","CronJobDetailDrawer","CronJobFormDialog","CronMainToolbar","CronPageHeaderActions","CronRunHistorySection","CronSystemTasksPanel","CronTasksPanel","CronTemplateFilter","CronTemplatePickerDialog","useCronJobForm","useCronKeepAwake","filterRunHistory","sortJobsByCreated","useCronPageData","HistoryRange","JobSort","messages","MessageBundle","useGatewayStore","useLocaleStore","usePageHeaderStore","useThemeStore","CronPageUi","mainTab","jobSort","historyRange","historyJobFilter","historyStatusFilter","detailOpen","detailJob","detailHistory","detailLoading","confirmOpen","templatePickerOpen","templateCategoryFilter","initialCronPageUi","CronPage","language","s","m","c","cron","chatM","chat","token","st","hasToken","Boolean","resolvedTheme","resolved","isDark","localeTag","ui","dispatch","data","failMessages","failedToLoadJobs","isHistoryTab","setError","keepAwakeHook","onUnavailable","wakeLockUnavailable","defaultModelForForm","defaultModel","availableModels","length","id","form","channels","chatAgents","confirmActionRef","confirmJobIdRef","openConfirm","action","jobId","current","type","patch","dismissConfirm","absorbCardClickJobIdRef","scheduleAbsorbNextMenuCardClick","window","setTimeout","onSelectTemplate","templateId","ok","applyCronTemplate","submitForm","formName","trim","nameRequired","formSchedule","formMessage","scheduleRequired","needsDeliveryChat","formChatId","chatIdRequired","setFormSubmitting","message","delivery","formSessionTarget","formAgentLocalOnly","mode","formChannel","channel","to","payload","kind","formModel","model","text","modelTrimmed","agentIdTrim","formAgentId","toLowerCase","agentIdForEdit","wdTrim","formWorkingDirectory","jobData","name","schedule","sessionTarget","undefined","formMode","agentId","workingDirectory","formJobId","sched","rest","closeForm","loadJobs","loadAux","e","Error","failedToUpdateJob","failedToCreateJob","openDetail","job","full","closeDetail","openTemplatePicker","onToggle","enabled","Promise","all","failedToToggleJob","runConfirm","loadRunHistoryOnly","actionFailed","onKey","KeyboardEvent","key","formOpen","document","addEventListener","removeEventListener","statusLabels","running","execStatusRunning","success","execStatusSuccess","failed","execStatusFailed","cancelled","execStatusCancelled","sortedUserJobs","userCronJobs","sortedSystemJobs","systemCronJobs","filteredRunHistory","runHistory","scheduleBadgeLabels","scheduleBadge","pathname","inSettingsShell","startsWith","loading","runHistoryLoading","refreshAll","openForm","needToken","error","title","subtitle","tab","sort","range","filter","jobs","keepAwake","featureAvailable","setKeepAwake","v","j","en","heartbeatFromConfig","agentsSettings","sessionChatIds","cronAgentSelectOptions","setFormName","setFormSchedule","formSubmitting","handleFormSessionTargetChange","setFormAgentLocalOnly","handleFormModelUserChange","setFormAgentId","setFormWorkingDirectory","handleFormChannelChange","setFormChatId","setFormMessage","formMessageMdMode","setMessageMdMode","messageEditorNonce","showChannelPicker","canSubmit","refreshRecipientsList","openNext","const","notSet","open","CronPageHeaderRegistration","t0","$","_c","onRefresh","onOpenTemplatePicker","onAddJob","t1","setPageHeader","_temp","clearPageHeader","_temp2","t2","cronHeaderEnd","t3","t4","startExtra","main","end","s_0"],"sources":["../../../../../web/src/features/cron/cron-confirm-action-dialog.tsx","../../../../../web/src/features/cron/cron-page-lib.ts","../../../../../web/src/features/cron/cron-job-detail-drawer.tsx","../../../../../web/src/features/fs/directory-picker-field.tsx","../../../../../web/src/features/cron/cron-job-form-dialog.tsx","../../../../../web/src/features/cron/cron-main-toolbar.tsx","../../../../../web/src/features/cron/cron-page-header-actions.tsx","../../../../../web/src/features/cron/cron-run-history-section.tsx","../../../../../web/src/features/cron/cron-job-card.tsx","../../../../../web/src/features/cron/cron-system-tasks-panel.tsx","../../../../../web/src/features/cron/cron-template-i18n.ts","../../../../../web/src/features/cron/cron-templates.ts","../../../../../web/src/features/cron/cron-template-library.tsx","../../../../../web/src/features/cron/cron-tasks-panel.tsx","../../../../../web/src/features/cron/cron-template-picker-dialog.tsx","../../../../../web/src/features/cron/use-cron-job-form.ts","../../../../../web/src/features/cron/use-cron-keep-awake.ts","../../../../../web/src/features/cron/use-cron-page-data.ts","../../../../../web/src/features/cron/cron-page.tsx"],"sourcesContent":["import * as Dialog from '@radix-ui/react-dialog';\n\nimport { Button } from '@/components/ui/button';\nimport type { MessageBundle } from '@/i18n/messages';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronConfirmActionDialogProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n action: 'delete' | 'run' | null;\n c: CronCopy;\n onDismiss: () => void;\n onConfirm: () => void;\n};\n\nexport function CronConfirmActionDialog({\n open,\n onOpenChange,\n action,\n c,\n onDismiss,\n onConfirm,\n}: CronConfirmActionDialogProps) {\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"xopc-dialog-overlay fixed inset-0 z-[70] bg-scrim\" />\n <div className=\"fixed inset-0 z-[70] flex items-center justify-center p-4 pointer-events-none\">\n <Dialog.Content className=\"xopc-dialog-content-pane pointer-events-auto relative w-full max-w-md rounded-xl border border-edge bg-surface-panel p-4 shadow-popover dark:border-edge\">\n <Dialog.Title className=\"text-base font-semibold text-fg\">\n {action === 'delete' ? c.delete : c.runNow}\n </Dialog.Title>\n <p className=\"mt-2 text-sm text-fg-muted\">\n {action === 'delete' ? c.confirmDelete : c.confirmRun}\n </p>\n <div className=\"mt-4 flex justify-end gap-2\">\n <Button type=\"button\" variant=\"secondary\" onClick={onDismiss}>\n {c.cancel}\n </Button>\n <Button\n type=\"button\"\n variant=\"primary\"\n className={action === 'delete' ? 'bg-red-600 hover:bg-red-700' : undefined}\n onClick={() => void onConfirm()}\n >\n {action === 'delete' ? c.delete : c.runNow}\n </Button>\n </div>\n </Dialog.Content>\n </div>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import {\n formControlBorderFocusClass,\n nativeSelectMaxWidthClass,\n selectControlBaseClass,\n} from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\n\nexport const RUN_HISTORY_FETCH_LIMIT = 400;\n\nexport const DEFAULT_SCHEDULE = '*/5 * * * *';\n\nexport function startOfLocalDay(d: Date): Date {\n const x = new Date(d);\n x.setHours(0, 0, 0, 0);\n return x;\n}\n\n/** Week starts on Monday (local). */\nexport function startOfLocalWeekMonday(d: Date): Date {\n const x = startOfLocalDay(d);\n const day = x.getDay();\n const diff = day === 0 ? -6 : 1 - day;\n x.setDate(x.getDate() + diff);\n return x;\n}\n\nexport function startOfLocalMonth(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), 1, 0, 0, 0, 0);\n}\n\nexport function navigateToSessionChat(sessionKey: string | undefined | null): void {\n const sk = sessionKey?.trim();\n if (!sk) return;\n window.dispatchEvent(\n new CustomEvent('navigate-to-chat', { detail: { sessionKey: sk }, bubbles: true }),\n );\n}\n\nexport function inputClassName(disabled?: boolean): string {\n return cn(\n 'w-full rounded-md border border-edge bg-surface-base px-3 py-2 text-sm text-fg placeholder:text-fg-disabled',\n formControlBorderFocusClass,\n disabled && 'cursor-not-allowed opacity-60',\n );\n}\n\nexport function selectClassName(): string {\n return cn(selectControlBaseClass, nativeSelectMaxWidthClass);\n}\n\nexport const cronRecipientSelectClass = cn(\n selectControlBaseClass,\n 'w-full text-xs sm:w-auto sm:min-w-[11rem] sm:max-w-[17rem] sm:shrink-0',\n);\n\n/** Toolbar filters: avoid `w-full` from {@link nativeSelectMaxWidthClass} so Day/Week/Month + selects stay one row. */\nexport const cronToolbarSelectClass = cn(\n selectControlBaseClass,\n 'w-auto min-w-[9rem] max-w-[14rem] shrink-0 text-xs',\n);\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { Loader2, X } from 'lucide-react';\n\nimport { MarkdownView } from '@/components/markdown/markdown-view';\nimport { Button } from '@/components/ui/button';\nimport type { CronJob, CronJobExecution } from '@/features/cron/cron-api';\nimport { cronJobBodyText } from '@/features/cron/cron-api';\nimport { navigateToSessionChat } from '@/features/cron/cron-page-lib';\nimport {\n execStatusLabel,\n formatDeliveryToSummary,\n formatDuration,\n formatNextRun,\n formatTime,\n truncate,\n} from '@/features/cron/cron-utils';\nimport type { MessageBundle } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronJobDetailDrawerProps = {\n open: boolean;\n onDismiss: () => void;\n detailJob: CronJob | null;\n detailLoading: boolean;\n detailHistory: CronJobExecution[];\n c: CronCopy;\n chatWorkingDirNotSet: string;\n statusLabels: {\n running: string;\n success: string;\n failed: string;\n cancelled: string;\n };\n};\n\nexport function CronJobDetailDrawer({\n open,\n onDismiss,\n detailJob,\n detailLoading,\n detailHistory,\n c,\n chatWorkingDirNotSet,\n statusLabels,\n}: CronJobDetailDrawerProps) {\n return (\n <Dialog.Root\n open={open}\n onOpenChange={(next) => {\n if (!next) onDismiss();\n }}\n >\n <Dialog.Portal>\n <Dialog.Overlay className=\"xopc-dialog-overlay fixed inset-0 z-[60] bg-scrim\" />\n <Dialog.Content\n className={cn(\n 'xopc-drawer-right fixed right-0 top-0 z-[60] flex size-full max-w-lg flex-col border-l border-edge bg-surface-panel shadow-popover outline-none',\n 'dark:border-edge',\n )}\n aria-describedby={undefined}\n >\n <div className=\"flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3\">\n <Dialog.Title className=\"min-w-0 truncate text-base font-semibold text-fg\">\n {detailJob?.name?.trim() || detailJob?.id || '—'}\n </Dialog.Title>\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"size-9 shrink-0 p-0\" aria-label={c.close}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-3\">\n {detailLoading ? (\n <div className=\"flex justify-center py-16\">\n <Loader2 className=\"size-8 animate-spin text-accent\" strokeWidth={1.75} />\n </div>\n ) : detailJob ? (\n <>\n <dl className=\"space-y-3 text-sm\">\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.scheduleLabel}</dt>\n <dd className=\"mt-1 font-mono text-fg\">\n <code>{detailJob.schedule}</code>\n </dd>\n </div>\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.messageLabel}</dt>\n <dd className=\"mt-1 min-w-0 break-words text-fg\">\n <MarkdownView content={cronJobBodyText(detailJob)} compact className=\"text-sm\" />\n </dd>\n </div>\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.mode}</dt>\n <dd className=\"mt-1 text-fg\">\n {detailJob.sessionTarget === 'isolated' ? c.modeAgentOption : c.modeDirectOption}\n </dd>\n </div>\n {detailJob.sessionTarget === 'isolated' ? (\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.agentProfile}</dt>\n <dd className=\"mt-1 font-mono text-sm text-fg\">\n {detailJob.agentId?.trim() ? detailJob.agentId.trim() : c.agentProfileDefault}\n </dd>\n </div>\n ) : null}\n {detailJob.sessionTarget === 'isolated' ? (\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.workingDirectoryLabel}</dt>\n <dd className=\"mt-1 break-all font-mono text-xs text-fg\">\n {detailJob.workingDirectory?.trim()\n ? detailJob.workingDirectory.trim()\n : chatWorkingDirNotSet}\n </dd>\n </div>\n ) : null}\n {detailJob.delivery?.channel === 'local' ||\n (detailJob.sessionTarget === 'isolated' && !detailJob.delivery?.to) ? (\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.deliveryTarget}</dt>\n <dd className=\"mt-1 text-fg\">\n {detailJob.delivery?.channel === 'local'\n ? c.deliveryTargetLocalChannel\n : c.deliveryLocalOnly}\n </dd>\n </div>\n ) : detailJob.delivery?.to ? (\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.deliveryTarget}</dt>\n <dd className=\"mt-1 break-words text-fg\">\n <code className=\"text-xs\">{detailJob.delivery?.channel ?? ''}</code>\n {' → '}\n {formatDeliveryToSummary(detailJob, c.channelLocal)}\n </dd>\n </div>\n ) : null}\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.status}</dt>\n <dd className=\"mt-1 text-fg\">{detailJob.enabled ? c.enabled : c.disabled}</dd>\n </div>\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.nextRun}</dt>\n <dd className=\"mt-1 text-fg\">\n {detailJob.next_run ? formatNextRun(detailJob.next_run, c.timeLabels) : '—'}\n </dd>\n </div>\n </dl>\n <h3 className=\"mt-6 text-sm font-semibold text-fg\">{c.detailRunHistory}</h3>\n {detailHistory.length === 0 ? (\n <p className=\"mt-2 text-sm text-fg-muted\">{c.noRunsYet}</p>\n ) : (\n <div className=\"mt-2 overflow-x-auto\">\n <table className=\"w-full border-collapse text-left text-xs\">\n <thead>\n <tr className=\"border-b border-edge text-fg-muted\">\n <th className=\"py-1.5 pr-2 font-medium\">{c.colStarted}</th>\n <th className=\"py-1.5 pr-2 font-medium\">{c.status}</th>\n <th className=\"py-1.5 pr-2 font-medium\">{c.colDuration}</th>\n <th className=\"py-1.5 pr-2 font-medium\">{c.colDetail}</th>\n <th className=\"py-1.5 font-medium\">{c.colChat}</th>\n </tr>\n </thead>\n <tbody>\n {detailHistory.map((row) => (\n <tr key={row.id} className=\"border-b border-edge/60\">\n <td className=\"whitespace-nowrap py-1.5 pr-2 text-fg\">\n <time dateTime={row.startedAt}>{formatTime(row.startedAt)}</time>\n </td>\n <td className=\"py-1.5 pr-2\">\n <span\n className={cn(\n 'inline-flex rounded px-1.5 py-0.5 font-medium',\n row.status === 'success' &&\n 'bg-emerald-500/15 text-emerald-800 dark:text-emerald-300',\n row.status === 'failed' && 'bg-red-500/15 text-red-800 dark:text-red-300',\n )}\n >\n {execStatusLabel(row.status, statusLabels)}\n </span>\n </td>\n <td className=\"py-1.5 pr-2 text-fg-muted\">{formatDuration(row.duration)}</td>\n <td\n className=\"max-w-[8rem] truncate py-1.5 pr-2 text-fg-muted\"\n title={row.summary || row.error || ''}\n >\n {truncate(row.summary || row.error, 120)}\n </td>\n <td className=\"whitespace-nowrap py-1.5\">\n {row.sessionKey?.trim() ? (\n <button\n type=\"button\"\n className=\"text-xs font-medium text-accent hover:underline\"\n title={c.openChatTitle}\n aria-label={c.openChatTitle}\n onClick={() => navigateToSessionChat(row.sessionKey)}\n >\n {c.openChat}\n </button>\n ) : (\n <span className=\"text-fg-disabled\">—</span>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </>\n ) : null}\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import { useDirectoryPicker } from '@/features/fs/use-directory-picker';\nimport { DirectoryPickerTrigger } from '@/features/fs/directory-picker-trigger';\nimport { WorkingDirectoryPickerModal } from '@/features/fs/working-directory-picker-modal';\nimport type { MessageBundle } from '@/i18n/messages';\n\ntype Props = {\n value: string;\n onChange: (path: string) => void | Promise<void>;\n disabled?: boolean;\n wd: MessageBundle['chat']['workingDirectory'];\n placeholder?: string;\n title?: string;\n maxWidthClass?: string;\n /** When set, show a clear link next to the trigger. */\n clearLabel?: string;\n onClear?: () => void;\n};\n\nexport function DirectoryPickerField({\n value,\n onChange,\n disabled,\n wd,\n placeholder,\n title,\n maxWidthClass,\n clearLabel,\n onClear,\n}: Props) {\n const picker = useDirectoryPicker({ initialPath: value, onPicked: onChange });\n\n const trimmed = value.trim();\n const resolvedTitle =\n title ??\n (trimmed\n ? `${trimmed}\\n${wd.chooseFolder}`\n : `${placeholder ?? wd.notSet}\\n${wd.selectWorkingDirectory}`);\n\n return (\n <>\n <div className=\"flex flex-wrap items-center gap-2\">\n <DirectoryPickerTrigger\n value={value}\n onPick={picker.pick}\n disabled={disabled || picker.picking}\n placeholder={placeholder ?? wd.notSet}\n title={resolvedTitle}\n maxWidthClass={maxWidthClass}\n />\n {clearLabel && trimmed && onClear ? (\n <button\n type=\"button\"\n disabled={disabled || picker.picking}\n className=\"text-xs font-medium text-accent hover:underline disabled:opacity-50\"\n onClick={onClear}\n >\n {clearLabel}\n </button>\n ) : null}\n </div>\n\n {!picker.hasNativePicker ? (\n <WorkingDirectoryPickerModal\n open={picker.modalOpen}\n onOpenChange={picker.setModalOpen}\n initialAbsolutePath={trimmed || undefined}\n onConfirm={picker.confirmPick}\n wd={wd}\n />\n ) : null}\n </>\n );\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { Eye, RefreshCw, SquarePen, X } from 'lucide-react';\n\nimport { MarkdownEditor } from '@/components/markdown/markdown-editor';\nimport { MarkdownView } from '@/components/markdown/markdown-view';\nimport { Button } from '@/components/ui/button';\nimport type { ChatAgentOption } from '@/features/chat/agent-selection/chat-agents-api';\nimport { ModelSelector } from '@/features/chat/model/model-selector';\nimport { DirectoryPickerField } from '@/features/fs/directory-picker-field';\nimport type { ChannelStatus, SessionChatId } from '@/features/cron/cron-api';\nimport { CronSchedulePicker } from '@/features/cron/cron-schedule-form';\nimport { formatRecipientOptionLabel } from '@/features/cron/cron-utils';\nimport {\n cronRecipientSelectClass,\n inputClassName,\n selectClassName,\n} from '@/features/cron/cron-page-lib';\nimport { agentListDisplayName } from '@/features/settings/agents/agent-display-names';\nimport type { MessageBundle } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronJobFormDialogProps = {\n open: boolean;\n onRequestClose: () => void;\n c: CronCopy;\n chatM: MessageBundle['chat'];\n agentsMessages: MessageBundle['agentsSettings'];\n isDark: boolean;\n channels: ChannelStatus[];\n sessionChatIds: SessionChatId[];\n cronAgentSelectOptions: ChatAgentOption[];\n defaultModelResolver: () => string;\n formMode: 'add' | 'edit';\n formJobId: string | null;\n formName: string;\n onFormNameChange: (v: string) => void;\n formSchedule: string;\n onFormScheduleChange: (v: string) => void;\n formSubmitting: boolean;\n formSessionTarget: 'main' | 'isolated';\n onFormSessionTargetChange: (\n target: 'main' | 'isolated',\n defaultModelFallback: () => string,\n currentModel: string,\n ) => void;\n formAgentLocalOnly: boolean;\n onFormAgentLocalOnlyChange: (v: boolean) => void;\n formModel: string;\n onFormModelUserChange: (id: string) => void;\n formAgentId: string;\n onFormAgentIdChange: (v: string) => void;\n formWorkingDirectory: string;\n onFormWorkingDirectoryChange: (v: string) => void;\n formChannel: string;\n onFormChannelChange: (channel: string) => void;\n formChatId: string;\n onFormChatIdChange: (v: string) => void;\n formMessage: string;\n onFormMessageChange: (v: string) => void;\n formMessageMdMode: 'edit' | 'preview';\n onSetMessageMdMode: (mode: 'edit' | 'preview') => void;\n messageEditorNonce: number;\n needsDeliveryChat: boolean;\n showChannelPicker: boolean;\n canSubmit: boolean;\n onSubmit: () => void;\n onRefreshRecipients: () => void;\n};\n\nexport function CronJobFormDialog(props: CronJobFormDialogProps) {\n const {\n open,\n onRequestClose,\n c,\n chatM,\n agentsMessages,\n isDark,\n channels,\n sessionChatIds,\n cronAgentSelectOptions,\n defaultModelResolver,\n formMode,\n formJobId,\n formName,\n onFormNameChange,\n formSchedule,\n onFormScheduleChange,\n formSubmitting,\n formSessionTarget,\n onFormSessionTargetChange,\n formAgentLocalOnly,\n onFormAgentLocalOnlyChange,\n formModel,\n onFormModelUserChange,\n formAgentId,\n onFormAgentIdChange,\n formWorkingDirectory,\n onFormWorkingDirectoryChange,\n formChannel,\n onFormChannelChange,\n formChatId,\n onFormChatIdChange,\n formMessage,\n onFormMessageChange,\n formMessageMdMode,\n onSetMessageMdMode,\n messageEditorNonce,\n needsDeliveryChat,\n showChannelPicker,\n canSubmit,\n onSubmit,\n onRefreshRecipients,\n } = props;\n\n return (\n <>\n <Dialog.Root open={open} onOpenChange={(o) => !o && onRequestClose()}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"xopc-dialog-overlay fixed inset-0 z-[60] bg-scrim\" />\n <div className=\"fixed inset-0 z-[60] flex items-center justify-center p-4 pointer-events-none\">\n <Dialog.Content\n className=\"xopc-dialog-content-pane pointer-events-auto relative flex max-h-[min(90vh,800px)] w-full max-w-md flex-col rounded-xl border border-edge bg-surface-panel shadow-popover outline-none sm:max-w-lg lg:max-w-xl dark:border-edge\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <div className=\"flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3\">\n <Dialog.Title className=\"text-base font-semibold text-fg\">\n {formMode === 'edit' ? c.editJob : c.addJob}\n </Dialog.Title>\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"size-9 shrink-0 p-0\" aria-label={c.close}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-3\">\n <div className=\"flex flex-col gap-3\">\n <label className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-fg-muted\">{c.name}</span>\n <input\n type=\"text\"\n className={inputClassName()}\n value={formName}\n onChange={(e) => onFormNameChange(e.target.value)}\n placeholder={c.namePlaceholder}\n />\n </label>\n <CronSchedulePicker\n value={formSchedule}\n onChange={onFormScheduleChange}\n disabled={formSubmitting}\n labels={c.schedulePicker}\n />\n <label className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-fg-muted\">{c.mode}</span>\n <select\n className={selectClassName()}\n value={formSessionTarget}\n onChange={(e) => {\n const v = e.target.value as 'main' | 'isolated';\n onFormSessionTargetChange(v, defaultModelResolver, formModel.trim());\n }}\n >\n <option value=\"main\">{c.modeDirectOption}</option>\n <option value=\"isolated\">{c.modeAgentOption}</option>\n </select>\n <p className=\"text-xs text-fg-muted\">\n {formSessionTarget === 'main' ? c.modeDirect : c.modeAgent}\n </p>\n </label>\n {formSessionTarget === 'isolated' ? (\n <>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-fg-muted\">{c.model}</span>\n <ModelSelector\n value={formModel}\n placeholder={chatM.modelPlaceholder}\n searchPlaceholder={chatM.modelSearchPlaceholder}\n noMatches={chatM.modelNoMatches}\n className=\"w-full max-w-none min-w-0\"\n popoverContentClassName=\"z-[70]\"\n onChange={onFormModelUserChange}\n />\n </div>\n <label className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-fg-muted\">{c.agentProfile}</span>\n <select\n className={selectClassName()}\n value={formAgentId}\n disabled={formSubmitting}\n onChange={(e) => onFormAgentIdChange(e.target.value)}\n >\n <option value=\"\">{c.agentProfileDefault}</option>\n {cronAgentSelectOptions.map((ag) => (\n <option key={ag.id} value={ag.id}>\n {`${ag.id} — ${agentListDisplayName(ag, agentsMessages)}`}\n </option>\n ))}\n </select>\n <p className=\"text-xs text-fg-muted\">{c.agentProfileHint}</p>\n </label>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-fg-muted\">{c.workingDirectoryLabel}</span>\n <DirectoryPickerField\n value={formWorkingDirectory}\n onChange={onFormWorkingDirectoryChange}\n disabled={formSubmitting}\n wd={chatM.workingDirectory}\n placeholder={chatM.workingDirectory.notSet}\n maxWidthClass=\"max-w-[min(16rem,48vw)]\"\n clearLabel={c.workingDirectoryReset}\n onClear={() => onFormWorkingDirectoryChange('')}\n />\n <p className=\"text-xs text-fg-muted\">{c.workingDirectoryHint}</p>\n </div>\n <label className=\"flex cursor-pointer items-start gap-2 rounded-md bg-surface-hover/45 px-3 py-2 dark:bg-surface-hover/30\">\n <input\n type=\"checkbox\"\n className={cn('ui-checkbox', 'mt-0.5')}\n checked={formAgentLocalOnly}\n onChange={(e) => onFormAgentLocalOnlyChange(e.target.checked)}\n aria-label={c.agentLocalOnly}\n />\n <span>\n <span className=\"text-sm font-medium text-fg\">{c.agentLocalOnly}</span>\n <p className=\"mt-1 text-xs text-fg-muted\">{c.agentLocalOnlyHint}</p>\n </span>\n </label>\n </>\n ) : null}\n {showChannelPicker ? (\n <>\n <label className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-fg-muted\">{c.channel}</span>\n <select\n className={selectClassName()}\n value={formChannel}\n onChange={(e) => {\n const v = e.target.value;\n onFormChannelChange(v);\n }}\n >\n <option value=\"local\">{c.channelLocal}</option>\n {channels.map((ch) => (\n <option key={ch.name} value={ch.name} disabled={!ch.enabled}>\n {ch.name} {!ch.enabled ? '(disabled)' : ''}\n </option>\n ))}\n </select>\n </label>\n {needsDeliveryChat ? (\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium text-fg-muted\">{c.recipient}</span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-7 gap-1 px-2 text-xs\"\n title={c.refreshRecipientHint}\n onClick={() => void onRefreshRecipients()}\n >\n <RefreshCw className=\"size-3.5\" strokeWidth={1.75} />\n {c.refreshList}\n </Button>\n </div>\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-stretch sm:gap-2\">\n <input\n type=\"text\"\n className={cn(inputClassName(), 'min-w-0 w-full sm:flex-1')}\n value={formChatId}\n onChange={(e) => onFormChatIdChange(e.target.value)}\n placeholder={c.recipientPlaceholder}\n />\n <select\n className={cronRecipientSelectClass}\n value={formChatId}\n onChange={(e) => {\n const v = e.target.value;\n if (v) onFormChatIdChange(v);\n }}\n >\n <option value=\"\">{c.selectRecipient}</option>\n {sessionChatIds.length > 0 ? (\n sessionChatIds.map((item) => (\n <option key={`${item.channel}-${item.chatId}`} value={item.chatId}>\n {formatRecipientOptionLabel(item, c.lastActiveLabels)}\n </option>\n ))\n ) : (\n <option value=\"\" disabled>\n {c.noRecentChatsOption}\n </option>\n )}\n </select>\n </div>\n <p className=\"text-xs text-fg-muted\">\n {sessionChatIds.length > 0 ? c.enterManuallyOrSelect : c.noRecentChats}\n </p>\n </div>\n ) : null}\n </>\n ) : null}\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <span className=\"text-xs font-medium text-fg-muted\">{c.message}</span>\n <div className=\"inline-flex rounded-lg border border-edge bg-surface-base p-0.5 dark:border-edge\">\n <button\n type=\"button\"\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs font-medium',\n formMessageMdMode === 'edit'\n ? 'bg-accent-soft text-accent-fg'\n : 'text-fg-muted hover:bg-surface-hover',\n )}\n onClick={() => onSetMessageMdMode('edit')}\n >\n <SquarePen className=\"size-3.5 shrink-0\" strokeWidth={1.75} aria-hidden />\n {c.messageEdit}\n </button>\n <button\n type=\"button\"\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs font-medium',\n formMessageMdMode === 'preview'\n ? 'bg-accent-soft text-accent-fg'\n : 'text-fg-muted hover:bg-surface-hover',\n )}\n onClick={() => onSetMessageMdMode('preview')}\n >\n <Eye className=\"size-3.5 shrink-0\" strokeWidth={1.75} aria-hidden />\n {c.messagePreview}\n </button>\n </div>\n </div>\n <div\n className={cn(\n 'overflow-hidden rounded-md border border-edge bg-surface-base dark:border-edge',\n formSubmitting && 'pointer-events-none opacity-60',\n )}\n >\n {formMessageMdMode === 'edit' ? (\n <MarkdownEditor\n key={`cron-msg-${formJobId ?? 'new'}-${messageEditorNonce}`}\n initialContent={formMessage}\n onChange={onFormMessageChange}\n isDark={isDark}\n className=\"h-[min(18rem,40vh)] min-h-[12rem]\"\n />\n ) : (\n <div className=\"h-[min(18rem,40vh)] min-h-[12rem] max-h-[min(24rem,50vh)] overflow-y-auto px-3 py-2\">\n {formMessage.trim() ? (\n <MarkdownView content={formMessage} compact className=\"text-sm\" />\n ) : (\n <p className=\"text-sm text-fg-muted\">{c.messagePlaceholder}</p>\n )}\n </div>\n )}\n </div>\n <p className=\"text-xs text-fg-muted\">{c.messageMarkdownHint}</p>\n </div>\n </div>\n </div>\n <div className=\"flex shrink-0 justify-end gap-2 border-t border-edge px-4 py-3\">\n <Button type=\"button\" variant=\"secondary\" onClick={onRequestClose}>\n {c.cancel}\n </Button>\n <Button type=\"button\" variant=\"primary\" disabled={formSubmitting || !canSubmit} onClick={onSubmit}>\n {formSubmitting ? c.loading : formMode === 'edit' ? c.save : c.create}\n </Button>\n </div>\n </Dialog.Content>\n </div>\n </Dialog.Portal>\n </Dialog.Root>\n </>\n );\n}\n","import {\n segmentedThumbActiveClassName,\n segmentedThumbBaseClassName,\n segmentedTrackClassName,\n} from '@/components/ui/segmented-styles';\nimport type { CronJob } from '@/features/cron/cron-api';\nimport { cronToolbarSelectClass } from '@/features/cron/cron-page-lib';\nimport type { MessageBundle } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronMainToolbarProps = {\n c: CronCopy;\n mainTab: 'myTasks' | 'systemTasks' | 'history';\n onMainTabChange: (tab: 'myTasks' | 'systemTasks' | 'history') => void;\n jobSort: 'created_desc' | 'created_asc';\n onJobSortChange: (sort: 'created_desc' | 'created_asc') => void;\n historyRange: 'day' | 'week' | 'month';\n onHistoryRangeChange: (range: 'day' | 'week' | 'month') => void;\n historyJobFilter: string;\n onHistoryJobFilterChange: (jobId: string) => void;\n historyStatusFilter: string;\n onHistoryStatusFilterChange: (status: string) => void;\n jobs: CronJob[];\n};\n\nexport function CronMainToolbar({\n c,\n mainTab,\n onMainTabChange,\n jobSort,\n onJobSortChange,\n historyRange,\n onHistoryRangeChange,\n historyJobFilter,\n onHistoryJobFilterChange,\n historyStatusFilter,\n onHistoryStatusFilterChange,\n jobs,\n}: CronMainToolbarProps) {\n return (\n <div className=\"flex flex-col gap-3 border-b border-edge-subtle pb-3 sm:flex-row sm:items-center sm:justify-between dark:border-edge-subtle\">\n <div className=\"flex gap-1\" role=\"tablist\" aria-label={c.title}>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mainTab === 'myTasks'}\n className={cn(\n 'rounded-md px-3 py-2 text-sm font-medium transition-colors',\n mainTab === 'myTasks' ? 'text-fg' : 'text-fg-muted hover:text-fg',\n )}\n onClick={() => onMainTabChange('myTasks')}\n >\n {c.tabMyTasks}\n </button>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mainTab === 'systemTasks'}\n className={cn(\n 'rounded-md px-3 py-2 text-sm font-medium transition-colors',\n mainTab === 'systemTasks' ? 'text-fg' : 'text-fg-muted hover:text-fg',\n )}\n onClick={() => onMainTabChange('systemTasks')}\n >\n {c.tabSystemTasks}\n </button>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mainTab === 'history'}\n className={cn(\n 'rounded-md px-3 py-2 text-sm font-medium transition-colors',\n mainTab === 'history' ? 'text-fg' : 'text-fg-muted hover:text-fg',\n )}\n onClick={() => onMainTabChange('history')}\n >\n {c.tabRunHistory}\n </button>\n </div>\n <div\n className={cn(\n 'flex min-w-0 items-center gap-2',\n mainTab === 'history'\n ? 'flex-nowrap overflow-x-auto pb-0.5 sm:justify-end'\n : 'flex-wrap sm:justify-end',\n )}\n >\n {mainTab === 'myTasks' || mainTab === 'systemTasks' ? (\n <select\n className={cronToolbarSelectClass}\n value={jobSort}\n onChange={(e) => onJobSortChange(e.target.value as 'created_desc' | 'created_asc')}\n aria-label={c.sortCreatedDesc}\n >\n <option value=\"created_desc\">{c.sortCreatedDesc}</option>\n <option value=\"created_asc\">{c.sortCreatedAsc}</option>\n </select>\n ) : null}\n {mainTab === 'history' ? (\n <>\n <div className={cn(segmentedTrackClassName, 'shrink-0')} role=\"group\" aria-label={c.runHistoryTitle}>\n {(['day', 'week', 'month'] as const).map((r) => (\n <button\n key={r}\n type=\"button\"\n className={cn(\n segmentedThumbBaseClassName,\n 'px-2.5 py-1',\n historyRange === r && segmentedThumbActiveClassName,\n historyRange === r && 'text-fg',\n )}\n onClick={() => onHistoryRangeChange(r)}\n >\n {r === 'day' ? c.historyRangeDay : r === 'week' ? c.historyRangeWeek : c.historyRangeMonth}\n </button>\n ))}\n </div>\n <select\n className={cronToolbarSelectClass}\n value={historyJobFilter}\n onChange={(e) => onHistoryJobFilterChange(e.target.value)}\n aria-label={c.filterAllTasks}\n >\n <option value=\"\">{c.filterAllTasks}</option>\n {jobs.map((j) => (\n <option key={j.id} value={j.id}>\n {j.name || j.id}\n </option>\n ))}\n </select>\n <select\n className={cronToolbarSelectClass}\n value={historyStatusFilter}\n onChange={(e) => onHistoryStatusFilterChange(e.target.value)}\n aria-label={c.filterAllStatuses}\n >\n <option value=\"\">{c.filterAllStatuses}</option>\n <option value=\"success\">{c.execStatusSuccess}</option>\n <option value=\"failed\">{c.execStatusFailed}</option>\n <option value=\"cancelled\">{c.execStatusCancelled}</option>\n <option value=\"running\">{c.execStatusRunning}</option>\n </select>\n </>\n ) : null}\n </div>\n </div>\n );\n}\n","import { LayoutTemplate, Plus, RefreshCw } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport type { MessageBundle } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronPageHeaderActionsProps = {\n c: CronCopy;\n loading: boolean;\n runHistoryLoading: boolean;\n onRefresh: () => void;\n onOpenTemplatePicker: () => void;\n onAddJob: () => void;\n};\n\nexport function CronPageHeaderActions({\n c,\n loading,\n runHistoryLoading,\n onRefresh,\n onOpenTemplatePicker,\n onAddJob,\n}: CronPageHeaderActionsProps) {\n const busy = loading || runHistoryLoading;\n return (\n <div className=\"flex min-w-0 flex-1 flex-wrap items-center justify-end gap-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"size-9 shrink-0 p-0\"\n disabled={busy}\n title={c.refresh}\n aria-label={c.refresh}\n onClick={() => void onRefresh()}\n >\n <RefreshCw className={cn('size-4', busy && 'animate-spin')} strokeWidth={1.75} />\n </Button>\n <Button type=\"button\" variant=\"secondary\" className=\"gap-2\" onClick={onOpenTemplatePicker}>\n <LayoutTemplate className=\"size-4\" strokeWidth={1.75} />\n {c.fromTemplate}\n </Button>\n <Button type=\"button\" variant=\"primary\" className=\"gap-2\" onClick={onAddJob}>\n <Plus className=\"size-4\" strokeWidth={1.75} />\n {c.addJob}\n </Button>\n </div>\n );\n}\n","import { Clock, Loader2, RefreshCw } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport type { CronJob, CronRunHistoryRow } from '@/features/cron/cron-api';\nimport { navigateToSessionChat } from '@/features/cron/cron-page-lib';\nimport {\n execStatusLabel,\n formatDuration,\n formatTime,\n truncate,\n} from '@/features/cron/cron-utils';\nimport type { MessageBundle } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronRunHistorySectionProps = {\n c: CronCopy;\n runHistoryLoading: boolean;\n runHistory: CronRunHistoryRow[];\n filteredRunHistory: CronRunHistoryRow[];\n jobs: CronJob[];\n onRefreshHistory: () => void;\n onOpenJobDetail: (job: CronJob) => void;\n statusLabels: {\n running: string;\n success: string;\n failed: string;\n cancelled: string;\n };\n};\n\nexport function CronRunHistorySection({\n c,\n runHistoryLoading,\n runHistory,\n filteredRunHistory,\n jobs,\n onRefreshHistory,\n onOpenJobDetail,\n statusLabels,\n}: CronRunHistorySectionProps) {\n return (\n <section aria-labelledby=\"cron-history-panel\" className=\"flex flex-col gap-3\">\n <div className=\"flex items-start justify-between gap-2\">\n <div>\n <h2 id=\"cron-history-panel\" className=\"sr-only\">\n {c.tabRunHistory}\n </h2>\n <p className=\"text-xs text-fg-muted\">{c.runHistoryHint}</p>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"size-9 shrink-0 p-0\"\n disabled={runHistoryLoading}\n title={c.refresh}\n aria-label={c.refresh}\n onClick={() => void onRefreshHistory()}\n >\n <RefreshCw className={cn('size-4', runHistoryLoading && 'animate-spin')} strokeWidth={1.75} />\n </Button>\n </div>\n {runHistoryLoading && runHistory.length === 0 ? (\n <div className=\"flex justify-center py-16\">\n <Loader2 className=\"size-8 animate-spin text-accent\" strokeWidth={1.75} />\n </div>\n ) : filteredRunHistory.length === 0 ? (\n <div className=\"flex flex-col items-center rounded-2xl border border-dashed border-edge-subtle px-6 py-16 text-center dark:border-edge-subtle\">\n <Clock className=\"mb-4 size-14 text-fg-disabled\" strokeWidth={1.1} aria-hidden />\n <h3 className=\"text-base font-semibold text-fg\">\n {runHistory.length === 0 ? c.emptyHistoryTitle : c.noRunsYet}\n </h3>\n <p className=\"mt-2 max-w-sm text-sm text-fg-muted\">\n {runHistory.length === 0 ? c.emptyHistoryHint : c.runHistoryHint}\n </p>\n </div>\n ) : (\n <div className=\"overflow-x-auto rounded-xl border border-edge-subtle bg-surface-base dark:border-edge-subtle\">\n <table className=\"w-full min-w-[700px] border-collapse text-left text-sm\">\n <thead>\n <tr className=\"border-b border-edge text-xs font-medium text-fg-muted\">\n <th className=\"px-3 py-2.5 font-medium\">{c.colStarted}</th>\n <th className=\"px-3 py-2.5 font-medium\">{c.colJob}</th>\n <th className=\"px-3 py-2.5 font-medium\">{c.status}</th>\n <th className=\"px-3 py-2.5 font-medium\">{c.colDuration}</th>\n <th className=\"px-3 py-2.5 font-medium\">{c.colDetail}</th>\n <th className=\"px-3 py-2.5 font-medium\">{c.colChat}</th>\n </tr>\n </thead>\n <tbody>\n {filteredRunHistory.map((row) => (\n <tr key={row.id} className=\"border-b border-edge/60 last:border-0\">\n <td className=\"whitespace-nowrap px-3 py-2.5 text-fg\">\n <time dateTime={row.startedAt}>{formatTime(row.startedAt)}</time>\n </td>\n <td className=\"max-w-[10rem] truncate px-3 py-2.5\">\n {jobs.some((j) => j.id === row.jobId) ? (\n <button\n type=\"button\"\n className=\"text-left text-accent hover:underline\"\n onClick={() => {\n const j = jobs.find((x) => x.id === row.jobId);\n if (j) void onOpenJobDetail(j);\n }}\n >\n {row.jobName || row.jobId}\n </button>\n ) : (\n <span className=\"text-fg-muted\">{row.jobName || row.jobId}</span>\n )}\n </td>\n <td className=\"px-3 py-2.5\">\n <span\n className={cn(\n 'inline-flex rounded-md px-2 py-0.5 text-xs font-medium',\n row.status === 'success' && 'bg-emerald-500/15 text-emerald-800 dark:text-emerald-300',\n row.status === 'failed' && 'bg-red-500/15 text-red-800 dark:text-red-300',\n row.status === 'running' && 'bg-accent/15 text-accent',\n row.status === 'cancelled' && 'bg-surface-hover text-fg-muted',\n )}\n >\n {execStatusLabel(row.status, statusLabels)}\n </span>\n </td>\n <td className=\"whitespace-nowrap px-3 py-2.5 text-fg-muted\">\n {formatDuration(row.duration)}\n </td>\n <td\n className=\"max-w-xs truncate px-3 py-2.5 text-fg-muted\"\n title={row.summary || row.error || ''}\n >\n {truncate(row.summary || row.error, 96)}\n </td>\n <td className=\"whitespace-nowrap px-3 py-2.5\">\n {row.sessionKey?.trim() ? (\n <button\n type=\"button\"\n className=\"text-xs font-medium text-accent hover:underline\"\n title={c.openChatTitle}\n aria-label={c.openChatTitle}\n onClick={() => navigateToSessionChat(row.sessionKey)}\n >\n {c.openChat}\n </button>\n ) : (\n <span className=\"text-fg-disabled\">—</span>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </section>\n );\n}\n","import * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { Clock, MoreVertical } from 'lucide-react';\n\nimport { MarkdownView } from '@/components/markdown/markdown-view';\nimport { Button } from '@/components/ui/button';\nimport type { MutableRefObject } from 'react';\n\nimport type { CronJob } from '@/features/cron/cron-api';\nimport { cronJobBodyText } from '@/features/cron/cron-api';\nimport { formatScheduleBadge } from '@/features/cron/cron-utils';\nimport type { MessageBundle } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronJobCardProps = {\n job: CronJob;\n c: CronCopy;\n localeTag: string;\n scheduleBadgeLabels: CronCopy['scheduleBadge'];\n absorbCardClickJobIdRef: MutableRefObject<string | null>;\n scheduleAbsorbNextMenuCardClick: (jobId: string) => void;\n onOpenDetail: (job: CronJob) => void;\n onToggle: (job: CronJob, enabled: boolean) => void;\n onEdit: (job: CronJob) => void;\n onRunNow: (job: CronJob) => void;\n onDelete: (job: CronJob) => void;\n};\n\nexport function CronJobCard({\n job,\n c,\n localeTag,\n scheduleBadgeLabels,\n absorbCardClickJobIdRef,\n scheduleAbsorbNextMenuCardClick,\n onOpenDetail,\n onToggle,\n onEdit,\n onRunNow,\n onDelete,\n}: CronJobCardProps) {\n return (\n <article\n role=\"button\"\n tabIndex={0}\n className={cn(\n 'flex cursor-pointer flex-col rounded-xl border border-edge-subtle bg-surface-base text-left transition-colors duration-150 ease-out dark:border-edge-subtle',\n 'hover:bg-surface-hover',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel',\n )}\n onClick={() => {\n if (absorbCardClickJobIdRef.current === job.id) {\n absorbCardClickJobIdRef.current = null;\n return;\n }\n void onOpenDetail(job);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (absorbCardClickJobIdRef.current === job.id) {\n absorbCardClickJobIdRef.current = null;\n return;\n }\n void onOpenDetail(job);\n }\n }}\n >\n <div className=\"flex items-start justify-between gap-2 px-4 pt-3\">\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={job.enabled}\n className={cn(\n 'inline-flex h-6 w-10 shrink-0 items-center rounded-full border border-edge p-0.5 transition-colors',\n job.enabled ? 'justify-end bg-accent' : 'justify-start bg-surface-hover',\n )}\n onClick={(e) => {\n e.stopPropagation();\n void onToggle(job, !job.enabled);\n }}\n >\n <span className=\"size-4 rounded-full bg-surface-panel shadow-surface ring-1 ring-edge/40 dark:ring-edge/55\" />\n </button>\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"size-8 shrink-0 p-0\"\n aria-label={c.jobCardMenuAria}\n onClick={(e) => e.stopPropagation()}\n >\n <MoreVertical className=\"size-4\" strokeWidth={1.75} />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n className=\"z-50 min-w-[10rem] rounded-xl border border-edge-subtle bg-surface-panel p-1 shadow-elevated dark:border-edge-subtle\"\n sideOffset={4}\n align=\"end\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DropdownMenu.Item\n className=\"cursor-pointer select-none rounded-lg px-2 py-1.5 text-sm text-fg outline-none data-highlighted:bg-surface-hover\"\n onSelect={() => {\n scheduleAbsorbNextMenuCardClick(job.id);\n onEdit(job);\n }}\n >\n {c.edit}\n </DropdownMenu.Item>\n <DropdownMenu.Item\n className=\"cursor-pointer select-none rounded-lg px-2 py-1.5 text-sm text-fg outline-none data-highlighted:bg-surface-hover\"\n onSelect={() => {\n scheduleAbsorbNextMenuCardClick(job.id);\n onRunNow(job);\n }}\n >\n {c.runNow}\n </DropdownMenu.Item>\n <DropdownMenu.Item\n className=\"cursor-pointer select-none rounded-lg px-2 py-1.5 text-sm text-red-600 outline-none data-highlighted:bg-red-500/10 dark:text-red-400\"\n onSelect={() => {\n scheduleAbsorbNextMenuCardClick(job.id);\n onDelete(job);\n }}\n >\n {c.delete}\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n </div>\n <div className=\"flex flex-1 flex-col gap-2 px-4 pb-3 pt-2\">\n <h3 className=\"line-clamp-2 font-semibold text-fg\">{job.name || job.id}</h3>\n <div\n className=\"max-h-[4.5rem] overflow-hidden text-sm text-fg-muted [&_.markdown-body]:text-sm [&_.markdown-body]:leading-snug\"\n title={cronJobBodyText(job)}\n >\n <MarkdownView content={cronJobBodyText(job)} compact />\n </div>\n </div>\n <div className=\"flex items-center gap-1.5 border-t border-edge-subtle/90 px-4 py-2.5 text-xs text-fg-muted dark:border-edge-subtle\">\n <Clock className=\"size-3.5 shrink-0\" strokeWidth={1.75} aria-hidden />\n <span className=\"min-w-0 truncate\">{formatScheduleBadge(job, localeTag, scheduleBadgeLabels)}</span>\n </div>\n </article>\n );\n}\n","import { ChevronRight, Info, Loader2 } from 'lucide-react';\nimport type { MutableRefObject } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { Button } from '@/components/ui/button';\nimport type { CronJob } from '@/features/cron/cron-api';\nimport { CronJobCard } from '@/features/cron/cron-job-card';\nimport type { HeartbeatSettingsState } from '@/features/settings/heartbeat-settings.types';\nimport { formatIntervalMsLabel } from '@/features/scheduling/interval/format-interval-label';\nimport { messages, type MessageBundle } from '@/i18n/messages';\nimport type { StoredLanguage } from '@/lib/storage';\nimport { cn } from '@/lib/cn';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronSystemTasksPanelProps = {\n c: CronCopy;\n language: StoredLanguage;\n localeTag: string;\n scheduleBadgeLabels: CronCopy['scheduleBadge'];\n loading: boolean;\n sortedSystemJobs: CronJob[];\n heartbeat: HeartbeatSettingsState;\n keepAwake: boolean;\n wakeSupported: boolean;\n onWakeUnsupportedClick: () => void;\n onKeepAwakeToggle: () => void;\n absorbCardClickJobIdRef: MutableRefObject<string | null>;\n scheduleAbsorbNextMenuCardClick: (jobId: string) => void;\n onOpenDetail: (job: CronJob) => void;\n onToggle: (job: CronJob, enabled: boolean) => void;\n onEdit: (job: CronJob) => void;\n onRunNow: (job: CronJob) => void;\n onDelete: (job: CronJob) => void;\n};\n\nexport function CronSystemTasksPanel({\n c,\n language,\n localeTag,\n scheduleBadgeLabels,\n loading,\n sortedSystemJobs,\n heartbeat,\n keepAwake,\n wakeSupported,\n onWakeUnsupportedClick,\n onKeepAwakeToggle,\n absorbCardClickJobIdRef,\n scheduleAbsorbNextMenuCardClick,\n onOpenDetail,\n onToggle,\n onEdit,\n onRunNow,\n onDelete,\n}: CronSystemTasksPanelProps) {\n const hbInterval = formatIntervalMsLabel(\n heartbeat.intervalMs,\n localeTag,\n messages(language).heartbeatSettings.intervalPresets,\n );\n\n return (\n <section aria-labelledby=\"cron-system-tasks-panel\" className=\"flex flex-col gap-4\">\n <h2 id=\"cron-system-tasks-panel\" className=\"sr-only\">\n {c.tabSystemTasks}\n </h2>\n <p className=\"text-sm text-fg-muted\">{c.systemTasksIntro}</p>\n\n <div className=\"flex flex-col gap-3 rounded-xl border border-accent/25 bg-accent/5 px-4 py-3 dark:border-accent/30 dark:bg-accent/10 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"flex gap-3 text-sm text-fg\">\n <Info className=\"mt-0.5 size-4 shrink-0 text-accent\" strokeWidth={1.75} aria-hidden />\n <p className=\"text-pretty text-fg-muted\">{c.wakeBanner}</p>\n </div>\n <div className=\"flex shrink-0 items-center gap-2 sm:pl-4\">\n <span className=\"text-sm text-fg\">{c.keepAwake}</span>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={keepAwake}\n disabled={!wakeSupported}\n title={!wakeSupported ? c.wakeLockUnavailable : undefined}\n className={cn(\n 'inline-flex h-6 w-10 shrink-0 items-center rounded-full border border-edge p-0.5 transition-colors',\n keepAwake ? 'justify-end bg-accent' : 'justify-start bg-surface-hover',\n !wakeSupported && 'cursor-not-allowed opacity-50',\n )}\n onClick={() => {\n if (!wakeSupported) onWakeUnsupportedClick();\n else onKeepAwakeToggle();\n }}\n >\n <span className=\"size-4 rounded-full bg-surface-panel shadow-surface ring-1 ring-edge/40 dark:ring-edge/55\" />\n </button>\n </div>\n </div>\n\n <div className=\"rounded-xl border border-edge bg-surface-base p-4 dark:bg-surface-hover/20\">\n <div className=\"flex flex-col gap-1 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold text-fg\">{c.systemHeartbeatTitle}</h3>\n <p className=\"mt-1 text-xs text-fg-muted\">{c.systemHeartbeatHint}</p>\n </div>\n <Button type=\"button\" variant=\"ghost\" className=\"shrink-0 gap-1 self-start px-2 py-1.5 text-xs\" asChild>\n <Link to=\"/settings/heartbeat\">\n {c.systemHeartbeatSettingsLink}\n <ChevronRight className=\"size-3.5 opacity-70\" aria-hidden />\n </Link>\n </Button>\n </div>\n <dl className=\"mt-3 grid gap-2 text-sm sm:grid-cols-2\">\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.systemHeartbeatStatus}</dt>\n <dd className=\"text-fg\">{heartbeat.enabled ? c.enabled : c.disabled}</dd>\n </div>\n <div>\n <dt className=\"text-xs font-medium text-fg-muted\">{c.systemHeartbeatInterval}</dt>\n <dd className=\"text-fg\">{c.systemHeartbeatEvery.replace(/\\{\\{value\\}\\}/g, hbInterval)}</dd>\n </div>\n </dl>\n </div>\n\n <div>\n <div className=\"mb-2 flex flex-col gap-1 sm:flex-row sm:items-center sm:justify-between\">\n <h3 className=\"text-sm font-semibold text-fg\">{c.systemDreamingTitle}</h3>\n <Button type=\"button\" variant=\"ghost\" className=\"shrink-0 gap-1 self-start px-2 py-1.5 text-xs\" asChild>\n <Link to=\"/settings/dreams\">\n {c.systemDreamingSettingsLink}\n <ChevronRight className=\"size-3.5 opacity-70\" aria-hidden />\n </Link>\n </Button>\n </div>\n <p className=\"mb-3 text-xs text-fg-muted\">{c.systemDreamingHint}</p>\n {loading && sortedSystemJobs.length === 0 ? (\n <div className=\"flex justify-center py-12\" aria-busy=\"true\">\n <Loader2 className=\"size-8 animate-spin text-accent\" strokeWidth={1.75} />\n </div>\n ) : sortedSystemJobs.length === 0 ? (\n <p className=\"rounded-lg border border-edge-subtle bg-surface-hover/30 px-3 py-4 text-sm text-fg-muted dark:border-edge-subtle\">\n {c.systemDreamingEmpty}\n </p>\n ) : (\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {sortedSystemJobs.map((job) => (\n <CronJobCard\n key={job.id}\n job={job}\n c={c}\n localeTag={localeTag}\n scheduleBadgeLabels={scheduleBadgeLabels}\n absorbCardClickJobIdRef={absorbCardClickJobIdRef}\n scheduleAbsorbNextMenuCardClick={scheduleAbsorbNextMenuCardClick}\n onOpenDetail={onOpenDetail}\n onToggle={onToggle}\n onEdit={onEdit}\n onRunNow={onRunNow}\n onDelete={onDelete}\n />\n ))}\n </div>\n )}\n </div>\n </section>\n );\n}\n","import type { MessageBundle } from '@/i18n/messages';\n\nexport type CronTemplateCopy = {\n title: string;\n description: string;\n prompt: string;\n};\n\nexport function getCronTemplateCopy(\n cron: MessageBundle['cron'],\n templateId: string,\n): CronTemplateCopy | undefined {\n const raw = cron.templates;\n if (!raw || typeof raw !== 'object') return undefined;\n const row = (raw as Record<string, { title?: string; description?: string; prompt?: string } | undefined>)[\n templateId\n ];\n if (!row || typeof row !== 'object') return undefined;\n const title = row.title?.trim();\n const prompt = row.prompt?.trim();\n if (!title || !prompt) return undefined;\n return {\n title,\n description: (row.description ?? '').trim(),\n prompt,\n };\n}\n","/** Non-display fields for scheduled-task templates; copy lives in i18n `cron.templates`. */\n\nexport const CRON_TEMPLATE_CATEGORIES = ['daily', 'monitoring', 'reports', 'automation'] as const;\nexport type CronTemplateCategory = (typeof CRON_TEMPLATE_CATEGORIES)[number];\n\nexport interface CronJobTemplateDef {\n templateId: string;\n category: CronTemplateCategory;\n defaultSchedule: string;\n defaultSessionTarget: 'isolated';\n}\n\n/** Grouped like common scheduled-task UIs: daily rhythm, external monitoring, periodic reports, repo automation. */\nexport const CRON_JOB_TEMPLATES = [\n // Daily\n {\n templateId: 'morning_briefing',\n category: 'daily',\n defaultSchedule: '0 7 * * 1-5',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'standup_prep',\n category: 'daily',\n defaultSchedule: '0 8 * * 1-5',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'end_of_day_wrap_up',\n category: 'daily',\n defaultSchedule: '0 18 * * 1-5',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'inbox_triage',\n category: 'daily',\n defaultSchedule: '30 8 * * 1-5',\n defaultSessionTarget: 'isolated',\n },\n // Monitoring\n {\n templateId: 'competitor_watch',\n category: 'monitoring',\n defaultSchedule: '0 9 * * 1',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'trending_topics_monitor',\n category: 'monitoring',\n defaultSchedule: '0 10 * * 1-5',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'tech_radar_stack',\n category: 'monitoring',\n defaultSchedule: '0 11 * * 3',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'dependency_check_audit',\n category: 'monitoring',\n defaultSchedule: '0 9 * * 0',\n defaultSessionTarget: 'isolated',\n },\n // Reports\n {\n templateId: 'weekly_review',\n category: 'reports',\n defaultSchedule: '0 17 * * 5',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'code_quality_report',\n category: 'reports',\n defaultSchedule: '0 14 * * 1',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'git_activity_summary',\n category: 'reports',\n defaultSchedule: '0 9 * * 1',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'user_feedback_digest',\n category: 'reports',\n defaultSchedule: '0 16 * * 5',\n defaultSessionTarget: 'isolated',\n },\n // Automation\n {\n templateId: 'stale_todo_or_issue_sweep',\n category: 'automation',\n defaultSchedule: '0 10 * * 2',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'release_notes_or_changelog_draft',\n category: 'automation',\n defaultSchedule: '0 10 * * 4',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'workspace_cleanup_suggestions',\n category: 'automation',\n defaultSchedule: '30 18 * * 5',\n defaultSessionTarget: 'isolated',\n },\n {\n templateId: 'smoke_or_ci_health_reminder',\n category: 'automation',\n defaultSchedule: '0 8 * * 1',\n defaultSessionTarget: 'isolated',\n },\n] as const satisfies readonly CronJobTemplateDef[];\n\nexport type CronTemplateId = (typeof CRON_JOB_TEMPLATES)[number]['templateId'];\n\nexport function cronTemplateById(id: string): (typeof CRON_JOB_TEMPLATES)[number] | undefined {\n return CRON_JOB_TEMPLATES.find((t) => t.templateId === id);\n}\n","import { Button } from '@/components/ui/button';\nimport type { MessageBundle } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\nimport { getCronTemplateCopy } from '@/features/cron/cron-template-i18n';\nimport { CRON_JOB_TEMPLATES, CRON_TEMPLATE_CATEGORIES, type CronTemplateCategory } from '@/features/cron/cron-templates';\nimport { formatScheduleBadge, type ScheduleBadgeLabels } from '@/features/cron/cron-utils';\n\nexport type CronTemplateFilter = 'all' | CronTemplateCategory;\n\ntype Props = {\n cron: MessageBundle['cron'];\n localeTag: string;\n scheduleBadgeLabels: ScheduleBadgeLabels;\n categoryFilter: CronTemplateFilter;\n onCategoryFilterChange: (next: CronTemplateFilter) => void;\n onSelectTemplate: (templateId: string) => void;\n};\n\nexport function CronTemplateLibrary(props: Props) {\n const { cron, localeTag, scheduleBadgeLabels, categoryFilter, onCategoryFilterChange, onSelectTemplate } = props;\n\n const filtered =\n categoryFilter === 'all'\n ? [...CRON_JOB_TEMPLATES]\n : CRON_JOB_TEMPLATES.filter((t) => t.category === categoryFilter);\n\n return (\n <div className=\"flex w-full flex-col gap-4\">\n <div className=\"flex flex-wrap gap-2\" role=\"group\" aria-label={cron.fromTemplate}>\n <Button\n type=\"button\"\n variant={categoryFilter === 'all' ? 'secondary' : 'ghost'}\n className=\"h-8 rounded-full px-3 py-1.5 text-xs\"\n onClick={() => onCategoryFilterChange('all')}\n >\n {cron.templateFilterAll}\n </Button>\n {CRON_TEMPLATE_CATEGORIES.map((cat) => (\n <Button\n key={cat}\n type=\"button\"\n variant={categoryFilter === cat ? 'secondary' : 'ghost'}\n className=\"h-8 rounded-full px-3 py-1.5 text-xs\"\n onClick={() => onCategoryFilterChange(cat)}\n >\n {cron.templateCategories[cat]}\n </Button>\n ))}\n </div>\n {filtered.length === 0 ? (\n <p className=\"text-center text-sm text-fg-muted\">{cron.templatesEmptyHint}</p>\n ) : (\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3\">\n {filtered.map((t) => {\n const copy = getCronTemplateCopy(cron, t.templateId);\n if (!copy) return null;\n const badge = formatScheduleBadge(\n { schedule: t.defaultSchedule, timezone: undefined, next_run: undefined },\n localeTag,\n scheduleBadgeLabels,\n );\n return (\n <button\n key={t.templateId}\n type=\"button\"\n className={cn(\n 'flex flex-col gap-1.5 rounded-xl border border-edge-subtle bg-surface-base p-4 text-left transition-colors',\n 'hover:border-accent/40 hover:bg-surface-hover',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel',\n )}\n onClick={() => onSelectTemplate(t.templateId)}\n aria-label={`${cron.templateCategories[t.category]} — ${copy.title}`}\n >\n <span className=\"font-semibold text-fg\">{copy.title}</span>\n <span className=\"line-clamp-2 text-sm text-fg-muted\">{copy.description}</span>\n <span className=\"mt-1 flex items-center gap-1 text-xs text-fg-muted\">\n <span className=\"tabular-nums\">{badge}</span>\n </span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","import { Info, Loader2 } from 'lucide-react';\nimport type { MutableRefObject } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport type { CronJob } from '@/features/cron/cron-api';\nimport { CronJobCard } from '@/features/cron/cron-job-card';\nimport type { CronTemplateFilter } from '@/features/cron/cron-template-library';\nimport { CronTemplateLibrary } from '@/features/cron/cron-template-library';\nimport type { MessageBundle } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronTasksPanelProps = {\n c: CronCopy;\n localeTag: string;\n scheduleBadgeLabels: CronCopy['scheduleBadge'];\n loading: boolean;\n jobsCount: number;\n sortedJobs: CronJob[];\n templateCategoryFilter: CronTemplateFilter;\n onTemplateCategoryFilterChange: (v: CronTemplateFilter) => void;\n onSelectTemplate: (templateId: string) => void;\n keepAwake: boolean;\n wakeSupported: boolean;\n onWakeUnsupportedClick: () => void;\n onKeepAwakeToggle: () => void;\n absorbCardClickJobIdRef: MutableRefObject<string | null>;\n scheduleAbsorbNextMenuCardClick: (jobId: string) => void;\n onOpenDetail: (job: CronJob) => void;\n onToggle: (job: CronJob, enabled: boolean) => void;\n onEdit: (job: CronJob) => void;\n onAddJob: () => void;\n onRunNow: (job: CronJob) => void;\n onDelete: (job: CronJob) => void;\n};\n\nexport function CronTasksPanel({\n c,\n localeTag,\n scheduleBadgeLabels,\n loading,\n jobsCount,\n sortedJobs,\n templateCategoryFilter,\n onTemplateCategoryFilterChange,\n onSelectTemplate,\n keepAwake,\n wakeSupported,\n onWakeUnsupportedClick,\n onKeepAwakeToggle,\n absorbCardClickJobIdRef,\n scheduleAbsorbNextMenuCardClick,\n onOpenDetail,\n onToggle,\n onEdit,\n onAddJob,\n onRunNow,\n onDelete,\n}: CronTasksPanelProps) {\n return (\n <section aria-labelledby=\"cron-tasks-panel\" className=\"flex flex-col gap-4\">\n <h2 id=\"cron-tasks-panel\" className=\"sr-only\">\n {c.tabMyTasks}\n </h2>\n <div className=\"flex flex-col gap-3 rounded-xl border border-accent/25 bg-accent/5 px-4 py-3 dark:border-accent/30 dark:bg-accent/10 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"flex gap-3 text-sm text-fg\">\n <Info className=\"mt-0.5 size-4 shrink-0 text-accent\" strokeWidth={1.75} aria-hidden />\n <p className=\"text-pretty text-fg-muted\">{c.wakeBanner}</p>\n </div>\n <div className=\"flex shrink-0 items-center gap-2 sm:pl-4\">\n <span className=\"text-sm text-fg\">{c.keepAwake}</span>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={keepAwake}\n disabled={!wakeSupported}\n title={!wakeSupported ? c.wakeLockUnavailable : undefined}\n className={cn(\n 'inline-flex h-6 w-10 shrink-0 items-center rounded-full border border-edge p-0.5 transition-colors',\n keepAwake ? 'justify-end bg-accent' : 'justify-start bg-surface-hover',\n !wakeSupported && 'cursor-not-allowed opacity-50',\n )}\n onClick={() => {\n if (!wakeSupported) onWakeUnsupportedClick();\n else onKeepAwakeToggle();\n }}\n >\n <span className=\"size-4 rounded-full bg-surface-panel shadow-surface ring-1 ring-edge/40 dark:ring-edge/55\" />\n </button>\n </div>\n </div>\n\n {loading && jobsCount === 0 ? (\n <div className=\"flex justify-center py-16\" aria-busy=\"true\">\n <Loader2 className=\"size-8 animate-spin text-accent\" strokeWidth={1.75} />\n </div>\n ) : jobsCount === 0 ? (\n <div className=\"flex flex-col gap-6 rounded-2xl bg-surface-base px-4 py-8 dark:bg-surface-hover/25 sm:px-6 sm:py-10\">\n <div className=\"w-full max-w-6xl\">\n <CronTemplateLibrary\n cron={c}\n localeTag={localeTag}\n scheduleBadgeLabels={scheduleBadgeLabels}\n categoryFilter={templateCategoryFilter}\n onCategoryFilterChange={onTemplateCategoryFilterChange}\n onSelectTemplate={onSelectTemplate}\n />\n </div>\n <div className=\"flex justify-center\">\n <Button type=\"button\" variant=\"primary\" onClick={onAddJob}>\n {c.emptyStateCta}\n </Button>\n </div>\n </div>\n ) : (\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {sortedJobs.map((job) => (\n <CronJobCard\n key={job.id}\n job={job}\n c={c}\n localeTag={localeTag}\n scheduleBadgeLabels={scheduleBadgeLabels}\n absorbCardClickJobIdRef={absorbCardClickJobIdRef}\n scheduleAbsorbNextMenuCardClick={scheduleAbsorbNextMenuCardClick}\n onOpenDetail={(j) => void onOpenDetail(j)}\n onToggle={(j, en) => void onToggle(j, en)}\n onEdit={onEdit}\n onRunNow={onRunNow}\n onDelete={onDelete}\n />\n ))}\n </div>\n )}\n </section>\n );\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport type { CronTemplateFilter } from '@/features/cron/cron-template-library';\nimport { CronTemplateLibrary } from '@/features/cron/cron-template-library';\nimport type { MessageBundle } from '@/i18n/messages';\n\ntype CronCopy = MessageBundle['cron'];\n\nexport type CronTemplatePickerDialogProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n c: CronCopy;\n localeTag: string;\n scheduleBadgeLabels: CronCopy['scheduleBadge'];\n categoryFilter: CronTemplateFilter;\n onCategoryFilterChange: (v: CronTemplateFilter) => void;\n onSelectTemplate: (templateId: string) => void;\n};\n\nexport function CronTemplatePickerDialog({\n open,\n onOpenChange,\n c,\n localeTag,\n scheduleBadgeLabels,\n categoryFilter,\n onCategoryFilterChange,\n onSelectTemplate,\n}: CronTemplatePickerDialogProps) {\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"xopc-dialog-overlay fixed inset-0 z-[62] bg-scrim\" />\n <div className=\"fixed inset-0 z-[62] flex items-center justify-center p-4 pointer-events-none\">\n <Dialog.Content\n className=\"xopc-dialog-content-pane pointer-events-auto relative flex max-h-[min(90vh,840px)] w-full max-w-lg flex-col rounded-xl border border-edge bg-surface-panel shadow-popover outline-none sm:max-w-2xl dark:border-edge\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <div className=\"flex shrink-0 items-center justify-end border-b border-edge px-4 py-3\">\n <Dialog.Title className=\"sr-only\">{c.fromTemplate}</Dialog.Title>\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"size-9 shrink-0 p-0\" aria-label={c.close}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto p-4\">\n <CronTemplateLibrary\n cron={c}\n localeTag={localeTag}\n scheduleBadgeLabels={scheduleBadgeLabels}\n categoryFilter={categoryFilter}\n onCategoryFilterChange={onCategoryFilterChange}\n onSelectTemplate={onSelectTemplate}\n />\n </div>\n </Dialog.Content>\n </div>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import { useCallback, useMemo, useReducer, useRef } from 'react';\n\nimport { type ChatAgentOption } from '@/features/chat/agent-selection/chat-agents-api';\nimport {\n cronJobBodyText,\n getSessionChatIds,\n type ChannelStatus,\n type CronJob,\n type SessionChatId,\n} from '@/features/cron/cron-api';\nimport { DEFAULT_SCHEDULE } from '@/features/cron/cron-page-lib';\nimport { getCronTemplateCopy } from '@/features/cron/cron-template-i18n';\nimport { cronTemplateById } from '@/features/cron/cron-templates';\nimport type { messages as makeMessages } from '@/i18n/messages';\nimport { useAsyncResource } from '@/lib/use-async-resource';\n\nexport type FormMode = 'add' | 'edit';\nexport type FormSessionTarget = 'main' | 'isolated';\nexport type FormMessageMdMode = 'edit' | 'preview';\n\ntype FormState = {\n formOpen: boolean;\n formMode: FormMode;\n formJobId: string | null;\n formName: string;\n formSchedule: string;\n formChannel: string;\n formChatId: string;\n formMessage: string;\n formMessageMdMode: FormMessageMdMode;\n messageEditorNonce: number;\n formSessionTarget: FormSessionTarget;\n formAgentId: string;\n formAgentLocalOnly: boolean;\n formWorkingDirectory: string;\n formModel: string;\n formSubmitting: boolean;\n};\n\ntype FormAction =\n | { type: 'patch'; patch: Partial<FormState> }\n | { type: 'replace'; state: FormState }\n | { type: 'setMessageMdMode'; mode: FormMessageMdMode };\n\nfunction initialFormState(): FormState {\n return {\n formOpen: false,\n formMode: 'add',\n formJobId: null,\n formName: '',\n formSchedule: DEFAULT_SCHEDULE,\n formChannel: 'local',\n formChatId: '',\n formMessage: '',\n formMessageMdMode: 'edit',\n messageEditorNonce: 0,\n formSessionTarget: 'main',\n formAgentId: '',\n formAgentLocalOnly: false,\n formWorkingDirectory: '',\n formModel: '',\n formSubmitting: false,\n };\n}\n\nfunction formReducer(state: FormState, action: FormAction): FormState {\n switch (action.type) {\n case 'patch':\n return { ...state, ...action.patch };\n case 'replace':\n return action.state;\n case 'setMessageMdMode':\n return {\n ...state,\n formMessageMdMode: action.mode,\n messageEditorNonce: action.mode === 'edit' ? state.messageEditorNonce + 1 : state.messageEditorNonce,\n };\n }\n}\n\nfunction buildOpenFormState(job: CronJob | undefined, defaultModelForForm: () => string): FormState {\n const base = initialFormState();\n base.formOpen = true;\n base.formMode = job ? 'edit' : 'add';\n base.formJobId = job?.id ?? null;\n\n if (!job) {\n base.formModel = defaultModelForForm();\n return base;\n }\n\n base.formName = job.name || '';\n base.formSchedule = (job.schedule && String(job.schedule).trim()) || DEFAULT_SCHEDULE;\n const bodyText = cronJobBodyText(job);\n base.formMessage = bodyText ?? '';\n base.formSessionTarget = job.sessionTarget || 'main';\n base.formAgentId =\n (job.sessionTarget || 'main') === 'isolated' && job.agentId?.trim()\n ? job.agentId.trim().toLowerCase()\n : '';\n base.formWorkingDirectory =\n (job.sessionTarget || 'main') === 'isolated' && job.workingDirectory?.trim()\n ? job.workingDirectory.trim()\n : '';\n const fromPayload =\n job.payload?.kind === 'agentTurn' && job.payload.model?.trim() ? job.payload.model.trim() : '';\n const stored = job.model?.trim() || fromPayload;\n base.formModel = stored || defaultModelForForm();\n const hasLocalChannel = job.delivery?.channel === 'local';\n const agentLocalOnly =\n (job.sessionTarget || 'main') === 'isolated' &&\n !hasLocalChannel &&\n (!job.delivery?.to || job.delivery.mode === 'none');\n base.formAgentLocalOnly = agentLocalOnly;\n\n if (hasLocalChannel) {\n base.formChannel = 'local';\n base.formChatId = '';\n } else if (job.delivery && job.delivery.mode !== 'none' && job.delivery.to) {\n base.formChannel = job.delivery.channel || 'telegram';\n base.formChatId = job.delivery.to || '';\n } else if (!agentLocalOnly) {\n const parts = bodyText.split(':');\n const knownChannels = ['telegram', 'cli', 'gateway', 'local'];\n if (parts.length >= 3 && knownChannels.includes(parts[0])) {\n base.formChannel = parts[0];\n base.formChatId = parts[1];\n base.formMessage = parts.slice(2).join(':');\n } else {\n base.formChannel = 'telegram';\n base.formChatId = '';\n }\n } else {\n base.formChannel = 'telegram';\n base.formChatId = '';\n }\n\n base.formMessageMdMode = 'edit';\n base.messageEditorNonce = 1;\n return base;\n}\n\nexport function useCronJobForm(opts: {\n m: ReturnType<typeof makeMessages>;\n defaultModelForForm: () => string;\n channels: ChannelStatus[];\n chatAgents: ChatAgentOption[];\n}) {\n const { m, defaultModelForForm, channels, chatAgents } = opts;\n\n const [form, dispatch] = useReducer(formReducer, undefined as never, initialFormState);\n const formModelUserTouched = useRef(false);\n\n const validChannelSet = useMemo(\n () => new Set(['local', ...channels.map((x) => x.name)]),\n [channels],\n );\n\n if (form.formOpen && form.formMode === 'add' && !validChannelSet.has(form.formChannel)) {\n dispatch({ type: 'patch', patch: { formChannel: 'local' } });\n }\n\n if (form.formOpen && form.formMode === 'add' && !formModelUserTouched.current) {\n const next = defaultModelForForm();\n if (next && next !== form.formModel) {\n dispatch({ type: 'patch', patch: { formModel: next } });\n }\n }\n\n const sessionChatIdsResource = useAsyncResource(\n () => getSessionChatIds(form.formChannel),\n [form.formChannel],\n {\n enabled: form.formOpen && form.formChannel !== 'local',\n initial: [] as SessionChatId[],\n errorData: [] as SessionChatId[],\n },\n );\n const sessionChatIds = form.formChannel === 'local' ? [] : sessionChatIdsResource.data;\n\n const cronAgentSelectOptions = useMemo(() => {\n const ids = new Set(chatAgents.map((a) => a.id));\n const out: ChatAgentOption[] = [...chatAgents];\n const extra = form.formAgentId.trim().toLowerCase();\n if (extra && !ids.has(extra)) {\n out.push({ id: extra });\n }\n return out;\n }, [chatAgents, form.formAgentId]);\n\n const needsDeliveryChat =\n form.formChannel !== 'local' &&\n (form.formSessionTarget === 'main' || (form.formSessionTarget === 'isolated' && !form.formAgentLocalOnly));\n\n const showChannelPicker =\n form.formSessionTarget === 'main' || (form.formSessionTarget === 'isolated' && !form.formAgentLocalOnly);\n\n const canSubmit =\n Boolean(form.formName.trim()) &&\n Boolean(form.formSchedule.trim()) &&\n Boolean(form.formMessage.trim()) &&\n (!needsDeliveryChat || Boolean(form.formChatId.trim()));\n\n const openForm = useCallback(\n (job?: CronJob) => {\n formModelUserTouched.current = false;\n dispatch({ type: 'replace', state: buildOpenFormState(job, defaultModelForForm) });\n },\n [defaultModelForForm],\n );\n\n const setMessageMdMode = useCallback((mode: FormMessageMdMode) => {\n dispatch({ type: 'setMessageMdMode', mode });\n }, []);\n\n const applyCronTemplate = useCallback(\n (templateId: string): boolean => {\n const def = cronTemplateById(templateId);\n const copy = def ? getCronTemplateCopy(m.cron, templateId) : undefined;\n if (!def || !copy) return false;\n formModelUserTouched.current = false;\n dispatch({\n type: 'replace',\n state: {\n ...initialFormState(),\n formOpen: true,\n formMode: 'add',\n formName: copy.title,\n formSchedule: def.defaultSchedule,\n formMessage: copy.prompt,\n formSessionTarget: def.defaultSessionTarget,\n formModel: defaultModelForForm(),\n messageEditorNonce: 1,\n },\n });\n return true;\n },\n [defaultModelForForm, m.cron],\n );\n\n const closeForm = useCallback(() => {\n formModelUserTouched.current = false;\n dispatch({ type: 'replace', state: initialFormState() });\n }, []);\n\n const handleFormSessionTargetChange = useCallback(\n (target: FormSessionTarget, defaultModelFallback: () => string, currentModel: string) => {\n const patch: Partial<FormState> = { formSessionTarget: target };\n if (target === 'main') {\n patch.formAgentLocalOnly = false;\n patch.formAgentId = '';\n patch.formWorkingDirectory = '';\n } else if (target === 'isolated' && !currentModel) {\n patch.formModel = defaultModelFallback();\n }\n dispatch({ type: 'patch', patch });\n },\n [],\n );\n\n const handleFormChannelChange = useCallback((v: string) => {\n dispatch({\n type: 'patch',\n patch: {\n formChannel: v,\n formChatId: '',\n ...(v === 'local' ? { formAgentLocalOnly: false } : {}),\n },\n });\n }, []);\n\n const handleFormModelUserChange = useCallback((id: string) => {\n formModelUserTouched.current = true;\n dispatch({ type: 'patch', patch: { formModel: id } });\n }, []);\n\n const refreshRecipientsList = useCallback(() => {\n void getSessionChatIds(form.formChannel).then(sessionChatIdsResource.setData);\n }, [form.formChannel, sessionChatIdsResource.setData]);\n\n const patchForm = useCallback((patch: Partial<FormState>) => {\n dispatch({ type: 'patch', patch });\n }, []);\n\n return {\n // state\n formOpen: form.formOpen,\n formMode: form.formMode,\n formJobId: form.formJobId,\n formName: form.formName,\n formSchedule: form.formSchedule,\n formChannel: form.formChannel,\n formChatId: form.formChatId,\n formMessage: form.formMessage,\n formMessageMdMode: form.formMessageMdMode,\n messageEditorNonce: form.messageEditorNonce,\n formSessionTarget: form.formSessionTarget,\n formAgentId: form.formAgentId,\n formAgentLocalOnly: form.formAgentLocalOnly,\n formWorkingDirectory: form.formWorkingDirectory,\n formModel: form.formModel,\n formSubmitting: form.formSubmitting,\n sessionChatIds,\n // setters\n setFormName: (formName: string) => patchForm({ formName }),\n setFormSchedule: (formSchedule: string) => patchForm({ formSchedule }),\n setFormChatId: (formChatId: string) => patchForm({ formChatId }),\n setFormMessage: (formMessage: string) => patchForm({ formMessage }),\n setFormAgentId: (formAgentId: string) => patchForm({ formAgentId }),\n setFormAgentLocalOnly: (formAgentLocalOnly: boolean) => patchForm({ formAgentLocalOnly }),\n setFormWorkingDirectory: (formWorkingDirectory: string) => patchForm({ formWorkingDirectory }),\n setFormSubmitting: (formSubmitting: boolean) => patchForm({ formSubmitting }),\n // derived\n canSubmit,\n needsDeliveryChat,\n showChannelPicker,\n cronAgentSelectOptions,\n // handlers\n openForm,\n closeForm,\n applyCronTemplate,\n setMessageMdMode,\n handleFormSessionTargetChange,\n handleFormChannelChange,\n handleFormModelUserChange,\n refreshRecipientsList,\n };\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { isElectronCronDisplayWakeAvailable } from '@/lib/electron-env';\n\ntype WakeMode = 'none' | 'electron' | 'navigator';\n\nexport function useCronKeepAwake(opts: { onUnavailable: () => void }) {\n const { onUnavailable } = opts;\n const [keepAwake, setKeepAwake] = useState(false);\n const wakeLockRef = useRef<WakeLockSentinel | null>(null);\n const wakeModeRef = useRef<WakeMode>('none');\n const keepAwakeRef = useRef(keepAwake);\n const wakeSupported = typeof navigator !== 'undefined' && 'wakeLock' in navigator;\n const featureAvailable = wakeSupported || isElectronCronDisplayWakeAvailable();\n\n const releaseWakeLock = useCallback(async () => {\n if (wakeModeRef.current === 'electron') {\n try {\n await window.electronAPI?.cron?.setDisplaySleepPrevented?.(false);\n } catch {\n /* ignore */\n }\n wakeModeRef.current = 'none';\n return;\n }\n try {\n await wakeLockRef.current?.release();\n } catch {\n /* ignore */\n }\n wakeLockRef.current = null;\n wakeModeRef.current = 'none';\n }, []);\n\n const acquireWakeLock = useCallback(async () => {\n const electronWake =\n typeof window !== 'undefined' ? window.electronAPI?.cron?.setDisplaySleepPrevented : undefined;\n if (electronWake) {\n try {\n await electronWake(true);\n wakeModeRef.current = 'electron';\n return;\n } catch {\n onUnavailable();\n setKeepAwake(false);\n return;\n }\n }\n if (!wakeSupported) return;\n try {\n const sentinel = await navigator.wakeLock.request('screen');\n wakeLockRef.current = sentinel;\n wakeModeRef.current = 'navigator';\n sentinel.addEventListener('release', () => {\n wakeLockRef.current = null;\n wakeModeRef.current = 'none';\n });\n } catch {\n onUnavailable();\n setKeepAwake(false);\n }\n }, [onUnavailable, wakeSupported]);\n\n keepAwakeRef.current = keepAwake;\n\n useEffect(() => {\n if (!keepAwake) {\n void releaseWakeLock();\n return;\n }\n void acquireWakeLock();\n const onVis = () => {\n if (document.visibilityState === 'visible' && keepAwakeRef.current) void acquireWakeLock();\n };\n document.addEventListener('visibilitychange', onVis);\n return () => {\n document.removeEventListener('visibilitychange', onVis);\n void releaseWakeLock();\n };\n }, [keepAwake, acquireWakeLock, releaseWakeLock]);\n\n return { keepAwake, setKeepAwake, featureAvailable };\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { fetchChatAgents, type ChatAgentOption } from '@/features/chat/agent-selection/chat-agents-api';\nimport {\n getAllRunsHistory,\n getChannels,\n getConfig,\n getModels,\n listJobs,\n type ChannelStatus,\n type CronJob,\n type CronRunHistoryRow,\n} from '@/features/cron/cron-api';\nimport { isDreamingManagedCronJob } from '@/features/cron/cron-dreaming-jobs';\nimport {\n RUN_HISTORY_FETCH_LIMIT,\n startOfLocalDay,\n startOfLocalMonth,\n startOfLocalWeekMonday,\n} from '@/features/cron/cron-page-lib';\nimport { fetchGatewayConfigSwrResponse } from '@/features/gateway/gateway-config-swr';\nimport { normalizeHeartbeatFromConfig } from '@/features/settings/heartbeat-config-api';\n\ntype FailMessages = {\n failedToLoadJobs: string;\n};\n\nexport type HistoryRange = 'day' | 'week' | 'month';\nexport type JobSort = 'created_desc' | 'created_asc';\n\nexport function useCronPageData(opts: {\n hasToken: boolean;\n failMessages: FailMessages;\n isHistoryTab: boolean;\n}) {\n const { hasToken, failMessages, isHistoryTab } = opts;\n\n const [jobs, setJobs] = useState<CronJob[]>([]);\n const [channels, setChannels] = useState<ChannelStatus[]>([]);\n const [availableModels, setAvailableModels] = useState<{ id: string; name: string; provider: string }[]>([]);\n const [defaultModel, setDefaultModel] = useState('');\n const [chatAgents, setChatAgents] = useState<ChatAgentOption[]>([]);\n const [gatewayConfigRaw, setGatewayConfigRaw] = useState<unknown>(null);\n const [runHistory, setRunHistory] = useState<CronRunHistoryRow[]>([]);\n const [runHistoryLoading, setRunHistoryLoading] = useState(false);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const loadJobs = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const list = await listJobs();\n setJobs(list);\n } catch (e) {\n setError(e instanceof Error ? e.message : failMessages.failedToLoadJobs);\n } finally {\n setLoading(false);\n }\n }, [failMessages.failedToLoadJobs]);\n\n const loadAux = useCallback(async () => {\n try {\n const [ch, mods, cfg, cfgFull, agentsPayload] = await Promise.all([\n getChannels(),\n getModels(),\n getConfig(),\n fetchGatewayConfigSwrResponse(),\n fetchChatAgents().catch(() => null),\n ]);\n setChannels(ch);\n setAvailableModels(mods);\n setDefaultModel(cfg.model || '');\n setGatewayConfigRaw(cfgFull.payload?.config ?? null);\n if (agentsPayload) setChatAgents(agentsPayload.items);\n } catch {\n /* non-fatal */\n }\n }, []);\n\n const loadRunHistoryOnly = useCallback(async () => {\n setRunHistoryLoading(true);\n try {\n const rows = await getAllRunsHistory(RUN_HISTORY_FETCH_LIMIT);\n setRunHistory(rows);\n } catch {\n /* ignore */\n } finally {\n setRunHistoryLoading(false);\n }\n }, []);\n\n useEffect(() => {\n if (!hasToken) return;\n void loadJobs();\n void loadAux();\n }, [hasToken, loadJobs, loadAux]);\n\n useEffect(() => {\n if (!hasToken) return;\n const onReload = () => {\n void fetchGatewayConfigSwrResponse().then((r) => {\n setGatewayConfigRaw(r.payload?.config ?? null);\n });\n };\n window.addEventListener('config-reload', onReload);\n return () => window.removeEventListener('config-reload', onReload);\n }, [hasToken]);\n\n useEffect(() => {\n if (!hasToken || !isHistoryTab) return;\n void loadRunHistoryOnly();\n }, [hasToken, isHistoryTab, loadRunHistoryOnly]);\n\n const userCronJobs = useMemo(() => jobs.filter((j) => !isDreamingManagedCronJob(j)), [jobs]);\n const systemCronJobs = useMemo(() => jobs.filter((j) => isDreamingManagedCronJob(j)), [jobs]);\n\n const heartbeatFromConfig = useMemo(() => normalizeHeartbeatFromConfig(gatewayConfigRaw), [gatewayConfigRaw]);\n\n const refreshAll = useCallback(() => {\n void loadJobs();\n void loadAux();\n void loadRunHistoryOnly();\n }, [loadJobs, loadAux, loadRunHistoryOnly]);\n\n return {\n jobs,\n channels,\n availableModels,\n defaultModel,\n chatAgents,\n gatewayConfigRaw,\n runHistory,\n runHistoryLoading,\n loading,\n error,\n setError,\n userCronJobs,\n systemCronJobs,\n heartbeatFromConfig,\n loadJobs,\n loadAux,\n loadRunHistoryOnly,\n refreshAll,\n };\n}\n\nexport function sortJobsByCreated(arr: CronJob[], sort: JobSort): CronJob[] {\n const next = [...arr];\n next.sort((a, b) => {\n const ta = new Date(a.created_at).getTime();\n const tb = new Date(b.created_at).getTime();\n return sort === 'created_desc' ? tb - ta : ta - tb;\n });\n return next;\n}\n\nexport function filterRunHistory(\n runHistory: CronRunHistoryRow[],\n range: HistoryRange,\n jobFilter: string,\n statusFilter: string,\n): CronRunHistoryRow[] {\n const now = new Date();\n const from =\n range === 'day' ? startOfLocalDay(now) : range === 'week' ? startOfLocalWeekMonday(now) : startOfLocalMonth(now);\n return runHistory.filter((row) => {\n if (new Date(row.startedAt) < from) return false;\n if (jobFilter && row.jobId !== jobFilter) return false;\n if (statusFilter && row.status !== statusFilter) return false;\n return true;\n });\n}\n","import { useCallback, useEffect, useLayoutEffect, useMemo, useReducer, useRef } from 'react';\n\nimport { uiPatchReducer } from '@/lib/settings-form-draft';\nimport { useLocation } from 'react-router-dom';\n\nimport {\n addJob,\n getHistory,\n getJob,\n removeJob,\n runJob,\n toggleJob,\n updateJob,\n type CronDelivery,\n type CronJob,\n type CronJobExecution,\n type CronPayload,\n} from '@/features/cron/cron-api';\nimport { CronConfirmActionDialog } from '@/features/cron/cron-confirm-action-dialog';\nimport { CronJobDetailDrawer } from '@/features/cron/cron-job-detail-drawer';\nimport { CronJobFormDialog } from '@/features/cron/cron-job-form-dialog';\nimport { CronMainToolbar } from '@/features/cron/cron-main-toolbar';\nimport { CronPageHeaderActions } from '@/features/cron/cron-page-header-actions';\nimport { CronRunHistorySection } from '@/features/cron/cron-run-history-section';\nimport { CronSystemTasksPanel } from '@/features/cron/cron-system-tasks-panel';\nimport { CronTasksPanel } from '@/features/cron/cron-tasks-panel';\nimport type { CronTemplateFilter } from '@/features/cron/cron-template-library';\nimport { CronTemplatePickerDialog } from '@/features/cron/cron-template-picker-dialog';\nimport { useCronJobForm } from '@/features/cron/use-cron-job-form';\nimport { useCronKeepAwake } from '@/features/cron/use-cron-keep-awake';\nimport {\n filterRunHistory,\n sortJobsByCreated,\n useCronPageData,\n type HistoryRange,\n type JobSort,\n} from '@/features/cron/use-cron-page-data';\nimport { messages, type MessageBundle } from '@/i18n/messages';\nimport { useGatewayStore } from '@/stores/gateway-store';\nimport { useLocaleStore } from '@/stores/locale-store';\nimport { usePageHeaderStore } from '@/stores/page-header-store';\nimport { useThemeStore } from '@/stores/theme-store';\n\ntype CronPageUi = {\n mainTab: 'myTasks' | 'systemTasks' | 'history';\n jobSort: JobSort;\n historyRange: HistoryRange;\n historyJobFilter: string;\n historyStatusFilter: string;\n detailOpen: boolean;\n detailJob: CronJob | null;\n detailHistory: CronJobExecution[];\n detailLoading: boolean;\n confirmOpen: boolean;\n templatePickerOpen: boolean;\n templateCategoryFilter: CronTemplateFilter;\n};\n\nconst initialCronPageUi: CronPageUi = {\n mainTab: 'myTasks',\n jobSort: 'created_desc',\n historyRange: 'day',\n historyJobFilter: '',\n historyStatusFilter: '',\n detailOpen: false,\n detailJob: null,\n detailHistory: [],\n detailLoading: false,\n confirmOpen: false,\n templatePickerOpen: false,\n templateCategoryFilter: 'all',\n};\n\nexport function CronPage() {\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n const c = m.cron;\n const chatM = m.chat;\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n const resolvedTheme = useThemeStore((s) => s.resolved);\n const isDark = resolvedTheme === 'dark';\n const localeTag = language === 'zh' ? 'zh-CN' : 'en-US';\n\n const [ui, dispatch] = useReducer(uiPatchReducer<CronPageUi>, initialCronPageUi);\n const {\n mainTab,\n jobSort,\n historyRange,\n historyJobFilter,\n historyStatusFilter,\n detailOpen,\n detailJob,\n detailHistory,\n detailLoading,\n confirmOpen,\n templatePickerOpen,\n templateCategoryFilter,\n } = ui;\n\n const data = useCronPageData({\n hasToken,\n failMessages: { failedToLoadJobs: c.failedToLoadJobs },\n isHistoryTab: mainTab === 'history',\n });\n const { setError } = data;\n\n const keepAwakeHook = useCronKeepAwake({ onUnavailable: () => setError(c.wakeLockUnavailable) });\n\n const defaultModelForForm = useCallback(\n () => data.defaultModel || (data.availableModels.length > 0 ? data.availableModels[0].id : ''),\n [data.defaultModel, data.availableModels],\n );\n\n const form = useCronJobForm({\n m,\n defaultModelForForm,\n channels: data.channels,\n chatAgents: data.chatAgents,\n });\n\n const confirmActionRef = useRef<'delete' | 'run' | null>(null);\n const confirmJobIdRef = useRef<string | null>(null);\n\n const openConfirm = useCallback((action: 'delete' | 'run', jobId: string) => {\n confirmActionRef.current = action;\n confirmJobIdRef.current = jobId;\n dispatch({ type: 'patch', patch: { confirmOpen: true } });\n }, []);\n\n const dismissConfirm = useCallback(() => {\n dispatch({ type: 'patch', patch: { confirmOpen: false } });\n confirmJobIdRef.current = null;\n confirmActionRef.current = null;\n }, []);\n\n const absorbCardClickJobIdRef = useRef<string | null>(null);\n\n const scheduleAbsorbNextMenuCardClick = useCallback((jobId: string) => {\n absorbCardClickJobIdRef.current = jobId;\n window.setTimeout(() => {\n if (absorbCardClickJobIdRef.current === jobId) {\n absorbCardClickJobIdRef.current = null;\n }\n }, 400);\n }, []);\n\n const onSelectTemplate = useCallback(\n (templateId: string) => {\n const ok = form.applyCronTemplate(templateId);\n if (ok) dispatch({ type: 'patch', patch: { templatePickerOpen: false } });\n },\n [form],\n );\n\n const submitForm = async () => {\n if (!form.formName.trim()) {\n setError(c.nameRequired);\n return;\n }\n if (!form.formSchedule.trim() || !form.formMessage.trim()) {\n setError(c.scheduleRequired);\n return;\n }\n if (form.needsDeliveryChat && !form.formChatId.trim()) {\n setError(c.chatIdRequired);\n return;\n }\n\n form.setFormSubmitting(true);\n setError(null);\n try {\n const message = form.formMessage.trim();\n let delivery: CronDelivery;\n if (form.formSessionTarget === 'isolated' && form.formAgentLocalOnly) {\n delivery = { mode: 'none' };\n } else if (form.formChannel === 'local') {\n delivery = { mode: 'direct', channel: 'local' };\n } else {\n delivery = { mode: 'direct', channel: form.formChannel, to: form.formChatId.trim() };\n }\n\n const payload: CronPayload =\n form.formSessionTarget === 'isolated'\n ? {\n kind: 'agentTurn',\n message,\n ...(form.formModel.trim() ? { model: form.formModel.trim() } : {}),\n }\n : { kind: 'systemEvent', text: message };\n\n const modelTrimmed = form.formModel.trim();\n const agentIdTrim = form.formAgentId.trim().toLowerCase();\n const agentIdForEdit = form.formSessionTarget === 'main' ? null : agentIdTrim || null;\n const wdTrim = form.formWorkingDirectory.trim();\n const jobData = {\n name: form.formName.trim(),\n schedule: form.formSchedule.trim(),\n sessionTarget: form.formSessionTarget,\n model: form.formSessionTarget === 'isolated' && modelTrimmed ? modelTrimmed : undefined,\n delivery,\n payload,\n ...(form.formMode === 'edit'\n ? {\n agentId: agentIdForEdit,\n workingDirectory: form.formSessionTarget === 'isolated' ? wdTrim || null : null,\n }\n : {\n ...(form.formSessionTarget === 'isolated' && agentIdTrim ? { agentId: agentIdTrim } : {}),\n ...(form.formSessionTarget === 'isolated' && wdTrim ? { workingDirectory: wdTrim } : {}),\n }),\n };\n\n if (form.formMode === 'edit' && form.formJobId) {\n await updateJob(form.formJobId, jobData);\n } else {\n const { schedule: sched, agentId, workingDirectory, ...rest } = jobData;\n await addJob(sched, {\n ...rest,\n ...(agentId != null ? { agentId } : {}),\n ...(workingDirectory ? { workingDirectory } : {}),\n });\n }\n form.closeForm();\n await data.loadJobs();\n await data.loadAux();\n } catch (e) {\n setError(\n e instanceof Error\n ? e.message\n : form.formMode === 'edit'\n ? c.failedToUpdateJob\n : c.failedToCreateJob,\n );\n } finally {\n form.setFormSubmitting(false);\n }\n };\n\n const openDetail = async (job: CronJob) => {\n dispatch({\n type: 'patch',\n patch: { detailOpen: true, detailJob: job, detailLoading: true, detailHistory: [] },\n });\n try {\n const full = await getJob(job.id);\n if (full) {\n dispatch({\n type: 'patch',\n patch: { detailJob: full, detailHistory: await getHistory(job.id, 20) },\n });\n }\n } catch {\n /* keep partial */\n } finally {\n dispatch({ type: 'patch', patch: { detailLoading: false } });\n }\n };\n\n const closeDetail = useCallback(() => {\n dispatch({ type: 'patch', patch: { detailOpen: false, detailJob: null } });\n }, []);\n\n const openTemplatePicker = useCallback(() => {\n dispatch({ type: 'patch', patch: { templateCategoryFilter: 'all', templatePickerOpen: true } });\n }, []);\n\n const onToggle = async (job: CronJob, enabled: boolean) => {\n try {\n await toggleJob(job.id, enabled);\n await Promise.all([data.loadJobs(), data.loadAux()]);\n } catch (e) {\n setError(e instanceof Error ? e.message : c.failedToToggleJob);\n }\n };\n\n const runConfirm = async () => {\n const id = confirmJobIdRef.current;\n const action = confirmActionRef.current;\n if (!id || !action) return;\n dismissConfirm();\n try {\n if (action === 'run') {\n await runJob(id);\n } else {\n await removeJob(id);\n if (detailJob?.id === id) {\n dispatch({ type: 'patch', patch: { detailOpen: false, detailJob: null } });\n }\n }\n await Promise.all([data.loadJobs(), data.loadAux(), data.loadRunHistoryOnly()]);\n } catch (e) {\n setError(e instanceof Error ? e.message : c.actionFailed);\n }\n };\n\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key !== 'Escape') return;\n if (form.formOpen) form.closeForm();\n else if (detailOpen) {\n dispatch({ type: 'patch', patch: { detailOpen: false, detailJob: null } });\n }\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [form, detailOpen]);\n\n const statusLabels = useMemo(\n () => ({\n running: c.execStatusRunning,\n success: c.execStatusSuccess,\n failed: c.execStatusFailed,\n cancelled: c.execStatusCancelled,\n }),\n [c.execStatusCancelled, c.execStatusFailed, c.execStatusRunning, c.execStatusSuccess],\n );\n\n const sortedUserJobs = useMemo(() => sortJobsByCreated(data.userCronJobs, jobSort), [data.userCronJobs, jobSort]);\n const sortedSystemJobs = useMemo(() => sortJobsByCreated(data.systemCronJobs, jobSort), [data.systemCronJobs, jobSort]);\n\n const filteredRunHistory = useMemo(\n () => filterRunHistory(data.runHistory, historyRange, historyJobFilter, historyStatusFilter),\n [data.runHistory, historyRange, historyJobFilter, historyStatusFilter],\n );\n\n const scheduleBadgeLabels = c.scheduleBadge;\n const { pathname } = useLocation();\n const inSettingsShell = pathname.startsWith('/settings/');\n\n if (!hasToken) {\n return (\n <>\n <CronPageHeaderRegistration\n hasToken={hasToken}\n c={c}\n loading={data.loading}\n runHistoryLoading={data.runHistoryLoading}\n onRefresh={data.refreshAll}\n onOpenTemplatePicker={openTemplatePicker}\n onAddJob={() => form.openForm()}\n />\n <div className=\"mx-auto w-full max-w-app-main px-4 py-16 text-center text-sm text-fg-muted sm:px-8\">\n {c.needToken}\n </div>\n </>\n );\n }\n\n return (\n <>\n <CronPageHeaderRegistration\n hasToken={hasToken}\n c={c}\n loading={data.loading}\n runHistoryLoading={data.runHistoryLoading}\n onRefresh={data.refreshAll}\n onOpenTemplatePicker={openTemplatePicker}\n onAddJob={() => form.openForm()}\n />\n <div className=\"flex min-h-0 min-w-0 flex-1 flex-col bg-surface-panel\">\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6 sm:px-8\">\n {data.error ? (\n <div\n className=\"rounded-xl border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-800 dark:border-red-900/50 dark:bg-red-950/40 dark:text-red-200\"\n role=\"alert\"\n >\n {data.error}\n </div>\n ) : null}\n\n <header className=\"flex flex-col gap-4\">\n <div className=\"min-w-0\">\n <h1 className=\"text-xl font-semibold tracking-tight text-fg\">{c.title}</h1>\n <p className=\"mt-1 max-w-2xl text-sm text-fg-muted\">{c.subtitle}</p>\n </div>\n </header>\n\n {inSettingsShell ? (\n <div className=\"flex flex-wrap items-center justify-end gap-2 border-b border-edge-subtle pb-3 dark:border-edge-subtle\">\n <CronPageHeaderActions\n c={c}\n loading={data.loading}\n runHistoryLoading={data.runHistoryLoading}\n onRefresh={data.refreshAll}\n onOpenTemplatePicker={openTemplatePicker}\n onAddJob={() => form.openForm()}\n />\n </div>\n ) : null}\n\n <CronMainToolbar\n c={c}\n mainTab={mainTab}\n onMainTabChange={(tab) => dispatch({ type: 'patch', patch: { mainTab: tab } })}\n jobSort={jobSort}\n onJobSortChange={(sort) => dispatch({ type: 'patch', patch: { jobSort: sort } })}\n historyRange={historyRange}\n onHistoryRangeChange={(range) => dispatch({ type: 'patch', patch: { historyRange: range } })}\n historyJobFilter={historyJobFilter}\n onHistoryJobFilterChange={(filter) =>\n dispatch({ type: 'patch', patch: { historyJobFilter: filter } })\n }\n historyStatusFilter={historyStatusFilter}\n onHistoryStatusFilterChange={(filter) =>\n dispatch({ type: 'patch', patch: { historyStatusFilter: filter } })\n }\n jobs={data.jobs}\n />\n\n {mainTab === 'myTasks' ? (\n <CronTasksPanel\n c={c}\n localeTag={localeTag}\n scheduleBadgeLabels={scheduleBadgeLabels}\n loading={data.loading}\n jobsCount={data.userCronJobs.length}\n sortedJobs={sortedUserJobs}\n templateCategoryFilter={templateCategoryFilter}\n onTemplateCategoryFilterChange={(filter) =>\n dispatch({ type: 'patch', patch: { templateCategoryFilter: filter } })\n }\n onSelectTemplate={onSelectTemplate}\n keepAwake={keepAwakeHook.keepAwake}\n wakeSupported={keepAwakeHook.featureAvailable}\n onWakeUnsupportedClick={() => setError(c.wakeLockUnavailable)}\n onKeepAwakeToggle={() => keepAwakeHook.setKeepAwake((v) => !v)}\n absorbCardClickJobIdRef={absorbCardClickJobIdRef}\n scheduleAbsorbNextMenuCardClick={scheduleAbsorbNextMenuCardClick}\n onOpenDetail={(j) => void openDetail(j)}\n onToggle={(j, en) => void onToggle(j, en)}\n onEdit={(j) => form.openForm(j)}\n onAddJob={() => form.openForm()}\n onRunNow={(j) => openConfirm('run', j.id)}\n onDelete={(j) => openConfirm('delete', j.id)}\n />\n ) : mainTab === 'systemTasks' ? (\n <CronSystemTasksPanel\n c={c}\n language={language}\n localeTag={localeTag}\n scheduleBadgeLabels={scheduleBadgeLabels}\n loading={data.loading}\n sortedSystemJobs={sortedSystemJobs}\n heartbeat={data.heartbeatFromConfig}\n keepAwake={keepAwakeHook.keepAwake}\n wakeSupported={keepAwakeHook.featureAvailable}\n onWakeUnsupportedClick={() => setError(c.wakeLockUnavailable)}\n onKeepAwakeToggle={() => keepAwakeHook.setKeepAwake((v) => !v)}\n absorbCardClickJobIdRef={absorbCardClickJobIdRef}\n scheduleAbsorbNextMenuCardClick={scheduleAbsorbNextMenuCardClick}\n onOpenDetail={(j) => void openDetail(j)}\n onToggle={(j, en) => void onToggle(j, en)}\n onEdit={(j) => form.openForm(j)}\n onRunNow={(j) => openConfirm('run', j.id)}\n onDelete={(j) => openConfirm('delete', j.id)}\n />\n ) : (\n <CronRunHistorySection\n c={c}\n runHistoryLoading={data.runHistoryLoading}\n runHistory={data.runHistory}\n filteredRunHistory={filteredRunHistory}\n jobs={data.jobs}\n onRefreshHistory={() => void data.loadRunHistoryOnly()}\n onOpenJobDetail={(j) => void openDetail(j)}\n statusLabels={statusLabels}\n />\n )}\n </div>\n\n <CronJobFormDialog\n open={form.formOpen}\n onRequestClose={form.closeForm}\n c={c}\n chatM={chatM}\n agentsMessages={m.agentsSettings}\n isDark={isDark}\n channels={data.channels}\n sessionChatIds={form.sessionChatIds}\n cronAgentSelectOptions={form.cronAgentSelectOptions}\n defaultModelResolver={defaultModelForForm}\n formMode={form.formMode}\n formJobId={form.formJobId}\n formName={form.formName}\n onFormNameChange={form.setFormName}\n formSchedule={form.formSchedule}\n onFormScheduleChange={form.setFormSchedule}\n formSubmitting={form.formSubmitting}\n formSessionTarget={form.formSessionTarget}\n onFormSessionTargetChange={form.handleFormSessionTargetChange}\n formAgentLocalOnly={form.formAgentLocalOnly}\n onFormAgentLocalOnlyChange={form.setFormAgentLocalOnly}\n formModel={form.formModel}\n onFormModelUserChange={form.handleFormModelUserChange}\n formAgentId={form.formAgentId}\n onFormAgentIdChange={form.setFormAgentId}\n formWorkingDirectory={form.formWorkingDirectory}\n onFormWorkingDirectoryChange={form.setFormWorkingDirectory}\n formChannel={form.formChannel}\n onFormChannelChange={form.handleFormChannelChange}\n formChatId={form.formChatId}\n onFormChatIdChange={form.setFormChatId}\n formMessage={form.formMessage}\n onFormMessageChange={form.setFormMessage}\n formMessageMdMode={form.formMessageMdMode}\n onSetMessageMdMode={form.setMessageMdMode}\n messageEditorNonce={form.messageEditorNonce}\n needsDeliveryChat={form.needsDeliveryChat}\n showChannelPicker={form.showChannelPicker}\n canSubmit={form.canSubmit}\n onSubmit={() => void submitForm()}\n onRefreshRecipients={form.refreshRecipientsList}\n />\n\n <CronTemplatePickerDialog\n open={templatePickerOpen}\n onOpenChange={(openNext) => {\n dispatch({\n type: 'patch',\n patch: {\n templatePickerOpen: openNext,\n ...(openNext ? { templateCategoryFilter: 'all' as const } : {}),\n },\n });\n }}\n c={c}\n localeTag={localeTag}\n scheduleBadgeLabels={scheduleBadgeLabels}\n categoryFilter={templateCategoryFilter}\n onCategoryFilterChange={(filter) =>\n dispatch({ type: 'patch', patch: { templateCategoryFilter: filter } })\n }\n onSelectTemplate={onSelectTemplate}\n />\n\n <CronJobDetailDrawer\n open={detailOpen}\n onDismiss={closeDetail}\n detailJob={detailJob}\n detailLoading={detailLoading}\n detailHistory={detailHistory}\n c={c}\n chatWorkingDirNotSet={chatM.workingDirectory.notSet}\n statusLabels={statusLabels}\n />\n\n <CronConfirmActionDialog\n open={confirmOpen}\n onOpenChange={(open) => dispatch({ type: 'patch', patch: { confirmOpen: open } })}\n action={confirmActionRef.current}\n c={c}\n onDismiss={dismissConfirm}\n onConfirm={runConfirm}\n />\n </div>\n </>\n );\n}\n\nfunction CronPageHeaderRegistration({\n hasToken,\n c,\n loading,\n runHistoryLoading,\n onRefresh,\n onOpenTemplatePicker,\n onAddJob,\n}: {\n hasToken: boolean;\n c: MessageBundle['cron'];\n loading: boolean;\n runHistoryLoading: boolean;\n onRefresh: () => void;\n onOpenTemplatePicker: () => void;\n onAddJob: () => void;\n}) {\n const { pathname } = useLocation();\n const inSettingsShell = pathname.startsWith('/settings/');\n const setPageHeader = usePageHeaderStore((s) => s.setPageHeader);\n const clearPageHeader = usePageHeaderStore((s) => s.clearPageHeader);\n\n const cronHeaderEnd = useMemo(\n () => (\n <CronPageHeaderActions\n c={c}\n loading={loading}\n runHistoryLoading={runHistoryLoading}\n onRefresh={onRefresh}\n onOpenTemplatePicker={onOpenTemplatePicker}\n onAddJob={onAddJob}\n />\n ),\n [c, loading, runHistoryLoading, onRefresh, onOpenTemplatePicker, onAddJob],\n );\n\n useLayoutEffect(() => {\n if (!hasToken || inSettingsShell) {\n clearPageHeader();\n return () => clearPageHeader();\n }\n setPageHeader({\n startExtra: null,\n main: null,\n end: cronHeaderEnd,\n });\n return () => clearPageHeader();\n }, [clearPageHeader, cronHeaderEnd, hasToken, inSettingsShell, setPageHeader]);\n\n return null;\n}\n"],"mappings":"2gCAgBA,SAAA,GAAA,EAAA,uoDAoCkB,CC3ClB,IAAayC,GAAmB,cAEhC,SAAgBC,GAAgBC,EAAe,CAC7C,IAAME,EAAI,IAAID,KAAKD,CAAC,EAEpB,OADAE,EAAEC,SAAS,EAAG,EAAG,EAAG,CAAC,EACdD,CACT,CAGA,SAAgBE,GAAuBJ,EAAe,CACpD,IAAME,EAAIH,GAAgBC,CAAC,EACrBK,EAAMH,EAAEI,OAAO,EACfC,EAAOF,IAAQ,EAAI,GAAK,EAAIA,EAElC,OADAH,EAAEM,QAAQN,EAAEO,QAAQ,EAAIF,CAAI,EACrBL,CACT,CAEA,SAAgBQ,GAAkBV,EAAe,CAC/C,OAAO,IAAIC,KAAKD,EAAEW,YAAY,EAAGX,EAAEY,SAAS,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAC9D,CAEA,SAAgBC,GAAsBC,EAA6C,CACjF,IAAMC,EAAKD,GAAYE,KAAK,EACvBD,GACLE,OAAOC,cACL,IAAIC,YAAY,mBAAoB,CAAEC,OAAQ,CAAEN,WAAYC,CAAG,EAAGM,QAAS,EAAK,CAAC,CACnF,CACF,CAEA,SAAgBC,GAAeC,EAA4B,CACzD,OAAO3B,EACL,8GACAH,EACA8B,GAAY,+BACd,CACF,CAEA,SAAgBC,IAA0B,CACxC,OAAO5B,EAAGD,EAAwBD,CAAyB,CAC7D,CAEA,IAAa+B,GAA2B7B,EACtCD,EACA,wEACF,EAGa+B,GAAyB9B,EACpCD,EACA,oDACF,ECtBA,SAAO+D,GAAAC,EAAA,CAAA,IAAAC,GAAAA,EAAAA,EAAAA,GAAA,EAAA,EAA6B,CAAAd,OAAAC,YAAAC,YAAAC,gBAAAC,gBAAAC,IAAAC,uBAAAC,gBAAAM,EASTG,EAAAF,EAAA,KAAAb,EAMpBe,EAAAF,EAAA,IAFaE,EAAAC,GAAA,CACPA,GAAMhB,EAAU,CAAE,EACxBa,EAAA,GAAAb,EAAAa,EAAA,GAAAE,GAAA,IAAAE,EAAAJ,EAAA,KAAAK,OAAAC,IAAA,2BAAA,GAGCF,GAAA,EAAA,EAAA,KAAA,EAAA,CAA0B,UAAA,mDAAmD,CAAA,EAAGJ,EAAA,GAAAI,GAAAA,EAAAJ,EAAA,GAAA,IAAAO,EAAAP,EAAA,KAAAK,OAAAC,IAAA,2BAAA,GAEnEC,EAAAxB,EACT,kJACA,kBACF,EAACiB,EAAA,GAAAO,GAAAA,EAAAP,EAAA,GAAA,IAAAQ,EAAAR,EAAA,KAAAZ,GAAAqB,IAAAT,EAAA,KAAAZ,GAAAsB,MAKIF,EAAApB,GAASsB,MAAYC,KAAkB,GAAZvB,GAASqB,IAApC,IAA+CT,EAAA,GAAAZ,GAAAqB,GAAAT,EAAA,GAAAZ,GAAAsB,KAAAV,EAAA,GAAAQ,GAAAA,EAAAR,EAAA,GAAA,IAAAY,EAAAZ,EAAA,KAAAQ,EACnCI,EAAAZ,EAAA,IAFfY,GAAA,EAAA,EAAA,KAAA,EAAA,CAAwB,UAAA,4DACrBJ,CACH,CAAA,EAAeR,EAAA,GAAAQ,EAAAR,EAAA,GAAAY,GAAA,IAAAC,EAAAb,EAAA,KAAAK,OAAAC,IAAA,2BAAA,GAGXO,GAAA,EAAA,EAAA,KAAC,EAAD,CAAa,UAAA,SAAsB,YAAA,IAAI,CAAA,EAAIb,EAAA,GAAAa,GAAAA,EAAAb,EAAA,GAAA,IAAAc,EAAAd,EAAA,MAAAT,EAAAwB,MAEhCD,EAAAd,EAAA,KAJfc,GAAA,EAAA,EAAA,KAAA,EAAA,CAAc,QAAA,aACZ,EAAA,EAAA,KAAC,EAAD,CAAa,KAAA,SAAiB,QAAA,QAAkB,UAAA,sBAAkC,aAAAvB,EAACwB,eACjFF,CADK,CAAA,CAGT,CAAA,EAAeb,EAAA,IAAAT,EAAAwB,MAAAf,EAAA,IAAAc,GAAA,IAAAE,EAAAhB,EAAA,MAAAY,GAAAZ,EAAA,MAAAc,GARjBE,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,2FAAf,CACEJ,EAGAE,CAKI,IAAAd,EAAA,IAAAY,EAAAZ,EAAA,IAAAc,EAAAd,EAAA,IAAAgB,GAAAA,EAAAhB,EAAA,IAAA,IAAAiB,EAAAjB,EAAA,MAAAT,EAAA2B,cAAAlB,EAAA,MAAAT,EAAA4B,qBAAAnB,EAAA,MAAAT,EAAA6B,cAAApB,EAAA,MAAAT,EAAA8B,SAAArB,EAAA,MAAAT,EAAA+B,WAAAtB,EAAA,MAAAT,EAAAgC,aAAAvB,EAAA,MAAAT,EAAAiC,YAAAxB,EAAA,MAAAT,EAAAkC,mBAAAzB,EAAA,MAAAT,EAAAmC,gBAAA1B,EAAA,MAAAT,EAAAoC,4BAAA3B,EAAA,MAAAT,EAAAqC,kBAAA5B,EAAA,MAAAT,EAAAsC,UAAA7B,EAAA,MAAAT,EAAAuC,SAAA9B,EAAA,MAAAT,EAAAwC,cAAA/B,EAAA,MAAAT,EAAAyC,MAAAhC,EAAA,MAAAT,EAAA0C,iBAAAjC,EAAA,MAAAT,EAAA2C,kBAAAlC,EAAA,MAAAT,EAAA4C,SAAAnC,EAAA,MAAAT,EAAA6C,WAAApC,EAAA,MAAAT,EAAA8C,UAAArC,EAAA,MAAAT,EAAA+C,eAAAtC,EAAA,MAAAT,EAAAgD,eAAAvC,EAAA,MAAAT,EAAAiD,QAAAxC,EAAA,MAAAT,EAAAkD,YAAAzC,EAAA,MAAAT,EAAAmD,uBAAA1C,EAAA,MAAAR,GAAAQ,EAAA,MAAAV,GAAAU,EAAA,MAAAZ,GAAAY,EAAA,MAAAX,GAAAW,EAAA,MAAAP,GAEHwB,EAAA5B,GACC,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,sCACb,EAAA,EAAA,KAAC,EAAD,CAAmB,UAAA,kCAA+C,YAAA,IAAI,CAAA,CAClE,CAAA,EACJD,GAAA,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EAEA,EAAA,EAAA,MAAA,KAAA,CAAc,UAAA,6BAAd,EACE,EAAA,EAAA,MAAA,MAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,6CAAqCG,EAACgD,aAAoB,CAAA,GACxE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,mCACZ,EAAA,EAAA,KAAA,OAAA,CAAA,SAAOnD,EAASuD,QAAiB,CAAA,CAC9B,CAAA,CACD,CAAA,CAAA,GACN,EAAA,EAAA,MAAA,MAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,6CAAqCpD,EAACwC,YAAmB,CAAA,GACvE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,6CACZ,EAAA,EAAA,KAAC,EAAD,CAAuB,QAAAzD,GAAgBc,CAAS,EAAG,QAAA,GAAkB,UAAA,SAAS,CAAA,CAC3E,CAAA,CACD,CAAA,CAAA,GACN,EAAA,EAAA,MAAA,MAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,6CAAqCG,EAACyC,IAAW,CAAA,GAC/D,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,wBACX5C,EAASwD,gBAAmB,WAAarD,EAAC0C,gBAAmB1C,EAAC2C,gBAC5D,CAAA,CACD,CAAA,CAAA,EACL9C,EAASwD,gBAAmB,YAC3B,EAAA,EAAA,MAAA,MAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,6CAAqCrD,EAAC2B,YAAmB,CAAA,GACvE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,0CACX9B,EAASyD,SAAclC,KAAoD,EAA/CvB,EAASyD,QAAQlC,KAA8B,EAApBpB,EAAC4B,mBACtD,CAAA,CACD,CAAA,CAAA,EANP,KAQA/B,EAASwD,gBAAmB,YAC3B,EAAA,EAAA,MAAA,MAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,6CAAqCrD,EAACmD,qBAA4B,CAAA,GAChF,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,oDACXtD,EAAS0D,kBAAuBnC,KAEV,EADnBvB,EAAS0D,iBAAiBnC,KACP,EAFtBnB,CAGE,CAAA,CACD,CAAA,CAAA,EARP,KAUAJ,EAAS2D,UAAkBC,UAAK,SAChC5D,EAASwD,gBAAmB,YAA5B,CAA2CxD,EAAS2D,UAAaE,IAChE,EAAA,EAAA,MAAA,MAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,6CAAqC1D,EAACmC,cAAqB,CAAA,GACzE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,wBACXtC,EAAS2D,UAAkBC,UAAK,QAC7BzD,EAACoC,2BACDpC,EAACkC,iBACF,CAAA,CACD,CAAA,CAAA,EACJrC,EAAS2D,UAAaE,IACxB,EAAA,EAAA,MAAA,MAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,6CAAqC1D,EAACmC,cAAqB,CAAA,GACzE,EAAA,EAAA,MAAA,KAAA,CAAc,UAAA,oCAAd,EACE,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,mBAAWtC,EAAS2D,UAAkBC,SAA3B,EAAyC,CAAA,EACnE,MACAvE,EAAwBW,EAAWG,EAAC6B,YAAa,CAC/C,GACD,CAAA,CAAA,EARJ,MAUJ,EAAA,EAAA,MAAA,MAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,6CAAqC7B,EAACiD,MAAa,CAAA,GACjE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,wBAAgBpD,EAAS0C,QAAWvC,EAACuC,QAAWvC,EAACsC,QAAe,CAAA,CAC1E,CAAA,CAAA,GACN,EAAA,EAAA,MAAA,MAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,6CAAqCtC,EAAC4C,OAAc,CAAA,GAClE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,wBACX/C,EAAS8D,SAAYvE,GAAcS,EAAS8D,SAAW3D,EAACkD,UAAiB,EAAzE,GACE,CAAA,CACD,CAAA,CAAA,CACH,KACL,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,8CAAsClD,EAACqC,gBAAuB,CAAA,EAC3EtC,EAAa6D,SAAY,GACxB,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,sCAA8B5D,EAAC6C,SAAe,CAAA,GAE3D,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,iCACb,EAAA,EAAA,MAAA,QAAA,CAAiB,UAAA,oDAAjB,EACE,EAAA,EAAA,KAAA,QAAA,CAAA,UACE,EAAA,EAAA,MAAA,KAAA,CAAc,UAAA,8CAAd,EACE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,mCAA2B7C,EAACiC,UAAiB,CAAA,GAC3D,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,mCAA2BjC,EAACiD,MAAa,CAAA,GACvD,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,mCAA2BjD,EAACgC,WAAkB,CAAA,GAC5D,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,mCAA2BhC,EAAC+B,SAAgB,CAAA,GAC1D,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,8BAAsB/B,EAAC8B,OAAc,CAAA,CAChD,GACC,CAAA,GACR,EAAA,EAAA,KAAA,QAAA,CAAA,SACG/B,EAAa8D,IAAKC,IACjB,EAAA,EAAA,MAAA,KAAA,CAA2B,UAAA,mCAA3B,EACE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,kDACZ,EAAA,EAAA,KAAA,OAAA,CAAgB,SAAAA,EAAGC,mBAAa1E,GAAWyE,EAAGC,SAAU,CAAS,CAAA,CAC9D,CAAA,GACL,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,wBACZ,EAAA,EAAA,KAAA,OAAA,CACa,UAAAvE,EACT,gDACAsE,EAAGb,SAAY,WAAf,2DAEAa,EAAGb,SAAY,UAAf,8CACF,WAEChE,EAAgB6E,EAAGb,OAAS/C,CAAY,CACpC,CAAA,CACJ,CAAA,GACL,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,qCAA6Bf,GAAe2E,EAAGE,QAAS,CAAO,CAAA,GAC7E,EAAA,EAAA,KAAA,KAAA,CACY,UAAA,kDACH,MAAAF,EAAGG,SAAYH,EAAGI,OAAlB,YAEN5E,EAASwE,EAAGG,SAAYH,EAAGI,MAAQ,GAAG,CACpC,CAAA,GACL,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,oCACXJ,EAAGK,YAAiB/C,KAYrB,GAXE,EAAA,EAAA,KAAA,SAAA,CACO,KAAA,SACK,UAAA,kDACH,MAAApB,EAAC+C,cACI,aAAA/C,EAAC+C,cACJ,YAAM/D,GAAsB8E,EAAGK,UAAW,WAElDnE,EAAC8C,QACK,CAAA,GAET,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,4BAAmB,GAAQ,CAAA,CAE1C,CAAA,CACF,GAtCIgB,EAAG5C,EAsCP,CACN,CACK,CAAA,CACF,GACJ,CAAA,CACP,CAAA,CAAA,EAlID,KAoIIT,EAAA,IAAAT,EAAA2B,aAAAlB,EAAA,IAAAT,EAAA4B,oBAAAnB,EAAA,IAAAT,EAAA6B,aAAApB,EAAA,IAAAT,EAAA8B,QAAArB,EAAA,IAAAT,EAAA+B,UAAAtB,EAAA,IAAAT,EAAAgC,YAAAvB,EAAA,IAAAT,EAAAiC,WAAAxB,EAAA,IAAAT,EAAAkC,kBAAAzB,EAAA,IAAAT,EAAAmC,eAAA1B,EAAA,IAAAT,EAAAoC,2BAAA3B,EAAA,IAAAT,EAAAqC,iBAAA5B,EAAA,IAAAT,EAAAsC,SAAA7B,EAAA,IAAAT,EAAAuC,QAAA9B,EAAA,IAAAT,EAAAwC,aAAA/B,EAAA,IAAAT,EAAAyC,KAAAhC,EAAA,IAAAT,EAAA0C,gBAAAjC,EAAA,IAAAT,EAAA2C,iBAAAlC,EAAA,IAAAT,EAAA4C,QAAAnC,EAAA,IAAAT,EAAA6C,UAAApC,EAAA,IAAAT,EAAA8C,SAAArC,EAAA,IAAAT,EAAA+C,cAAAtC,EAAA,IAAAT,EAAAgD,cAAAvC,EAAA,IAAAT,EAAAiD,OAAAxC,EAAA,IAAAT,EAAAkD,WAAAzC,EAAA,IAAAT,EAAAmD,sBAAA1C,EAAA,IAAAR,EAAAQ,EAAA,IAAAV,EAAAU,EAAA,IAAAZ,EAAAY,EAAA,IAAAX,EAAAW,EAAA,IAAAP,EAAAO,EAAA,IAAAiB,GAAAA,EAAAjB,EAAA,IAAA,IAAA2D,EAAA3D,EAAA,MAAAiB,EACJ0C,EAAA3D,EAAA,KA1IN2D,GAAA,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,oDACZ1C,CAyIG,CAAA,EAAAjB,EAAA,IAAAiB,EAAAjB,EAAA,IAAA2D,GAAA,IAAAC,EAAA5D,EAAA,MAAA2D,GAAA3D,EAAA,MAAAgB,GA7JV4C,GAAA,EAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CACExD,GACA,EAAA,EAAA,MAAA,EAAA,CACa,UAAAG,EAIOsD,mBAAAA,IAAAA,YALpB,CAOE7C,EAUA2C,CA2IF,GACF,CAAA,CAAA,EAAgB3D,EAAA,IAAA2D,EAAA3D,EAAA,IAAAgB,EAAAhB,EAAA,IAAA4D,GAAAA,EAAA5D,EAAA,IAAA,IAAA8D,EACJ,OADI9D,EAAA,MAAAd,GAAAc,EAAA,MAAAE,GAAAF,EAAA,MAAA4D,GArKlBE,GAAA,EAAA,EAAA,KAAA,EAAA,CACQ5E,OACQ,aAAAgB,WAId0D,CAgKF,CAAA,EAAc5D,EAAA,IAAAd,EAAAc,EAAA,IAAAE,EAAAF,EAAA,IAAA4D,EAAA5D,EAAA,IAAA8D,GAAAA,EAAA9D,EAAA,IAtKd8D,CAsKc,CCpMlB,SAAOiB,GAAAC,EAAA,CAAA,IAAAC,GAAAA,EAAAA,EAAAA,GAAA,EAAA,EAA8B,CAAAb,QAAAC,WAAAG,WAAAC,KAAAC,cAAAC,QAAAC,gBAAAC,aAAAC,WAAAE,EAU7BG,EAAAF,EAAA,KAAAZ,GAAAY,EAAA,KAAAb,GAC4Be,EAAA,CAAAC,YAAehB,EAAKiB,SAAYhB,CAAS,EAACY,EAAA,GAAAZ,EAAAY,EAAA,GAAAb,EAAAa,EAAA,GAAAE,GAAAA,EAAAF,EAAA,GAA5E,IAAAK,EAAevB,EAAmBoB,CAA0C,EAAEI,EAAAN,EAAA,KAAAb,EAElDmB,EAAAN,EAAA,IAAZM,EAAAnB,EAAKoB,KAAM,EAACP,EAAA,GAAAb,EAAAa,EAAA,GAAAM,GAA5B,IAAAE,EAAgBF,EAChBG,EACEf,IACCc,EAAA,GACMA,EAAO,IAAKhB,EAAEkB,eADpB,GAEMjB,GAAeD,EAAEmB,OAAO,IAAKnB,EAAEoB,0BAQtBC,EAAAtB,GAAYc,EAAMS,QACfC,EAAAtB,GAAeD,EAAEmB,OAAOK,EAAAhB,EAAA,KAAAL,GAAAK,EAAA,KAAAK,EAAAY,MAAAjB,EAAA,KAAAS,GAAAT,EAAA,KAAAa,GAAAb,EAAA,KAAAe,GAAAf,EAAA,MAAAb,GAJvC6B,GAAA,EAAA,EAAA,KAAC,EAAD,CACS7B,QACC,OAAAkB,EAAMY,KACJ,SAAAJ,EACG,YAAAE,EACNN,MAAAA,EACQd,eAAa,CAAA,EAC5BK,EAAA,GAAAL,EAAAK,EAAA,GAAAK,EAAAY,KAAAjB,EAAA,GAAAS,EAAAT,EAAA,GAAAa,EAAAb,EAAA,GAAAe,EAAAf,EAAA,IAAAb,EAAAa,EAAA,IAAAgB,GAAAA,EAAAhB,EAAA,IAAA,IAAAkB,EAAAlB,EAAA,MAAAJ,GAAAI,EAAA,MAAAT,GAAAS,EAAA,MAAAH,GAAAG,EAAA,MAAAK,EAAAS,SAAAd,EAAA,MAAAQ,GACDU,EAAAtB,GAAAY,GAAAX,GACC,EAAA,EAAA,KAAA,SAAA,CACO,KAAA,SACK,SAAAN,GAAYc,EAAMS,QAClB,UAAA,sEACDjB,QAAAA,WAERD,CACM,CAAA,EARV,KASOI,EAAA,IAAAJ,EAAAI,EAAA,IAAAT,EAAAS,EAAA,IAAAH,EAAAG,EAAA,IAAAK,EAAAS,QAAAd,EAAA,IAAAQ,EAAAR,EAAA,IAAAkB,GAAAA,EAAAlB,EAAA,IAAA,IAAAmB,EAAAnB,EAAA,MAAAgB,GAAAhB,EAAA,MAAAkB,GAlBVC,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,6CAAf,CACEH,EAQCE,CAUG,IAAAlB,EAAA,IAAAgB,EAAAhB,EAAA,IAAAkB,EAAAlB,EAAA,IAAAmB,GAAAA,EAAAnB,EAAA,IAAA,IAAAoB,EAAApB,EAAA,MAAAK,EAAAgB,aAAArB,EAAA,MAAAK,EAAAiB,iBAAAtB,EAAA,MAAAK,EAAAkB,WAAAvB,EAAA,MAAAK,EAAAmB,cAAAxB,EAAA,MAAAQ,GAAAR,EAAA,MAAAR,GAEL4B,EAACf,EAAMiB,gBAAP,MACC,EAAA,EAAA,KAAC,EAAD,CACQ,KAAAjB,EAAMkB,UACE,aAAAlB,EAAMmB,aACC,oBAAAhB,GAAAiB,IAAAA,GACV,UAAApB,EAAMgB,YACb7B,IAAE,CAAA,EAEFQ,EAAA,IAAAK,EAAAgB,YAAArB,EAAA,IAAAK,EAAAiB,gBAAAtB,EAAA,IAAAK,EAAAkB,UAAAvB,EAAA,IAAAK,EAAAmB,aAAAxB,EAAA,IAAAQ,EAAAR,EAAA,IAAAR,EAAAQ,EAAA,IAAAoB,GAAAA,EAAApB,EAAA,IAAA,IAAA0B,EACP,OADO1B,EAAA,MAAAmB,GAAAnB,EAAA,MAAAoB,GA9BVM,GAAA,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACEP,EAqBCC,CAQO,CAAA,CAAA,EACPpB,EAAA,IAAAmB,EAAAnB,EAAA,IAAAoB,EAAApB,EAAA,IAAA0B,GAAAA,EAAA1B,EAAA,IA/BH0B,CA+BG,CCCP,SAAOwE,GAAAC,EAAA,CAAA,IAAAC,GAAAA,EAAAA,EAAAA,GAAA,GAAA,EACL,CAAAlD,OAAAC,iBAAAC,IAAAC,QAAAC,iBAAAC,SAAAC,WAAAC,iBAAAC,yBAAAC,uBAAAC,WAAAC,YAAAC,WAAAC,mBAAAE,eAAAC,uBAAAC,iBAAAC,oBAAAC,4BAAAI,qBAAAC,6BAAAC,YAAAC,wBAAAE,cAAAC,sBAAAC,uBAAAC,+BAAAC,cAAAC,sBAAAE,aAAAC,qBAAAC,cAAAC,uBAAAC,qBAAAC,sBAAAE,sBAAAC,qBAAAC,qBAAAC,aAAAC,YAAAC,wBA0CIE,EAAMG,GAAAF,EAAA,KAAAjD,EAI8DmD,GAAAF,EAAA,IAA7BE,GAAAC,GAAO,CAACA,GAAKpD,EAAe,EAACiD,EAAA,GAAAjD,EAAAiD,EAAA,GAAAE,IAAA,IAAAE,GAAAJ,EAAA,KAAAK,OAAAC,IAAA,2BAAA,GAEhEF,IAAA,EAAA,EAAA,KAAA,EAAA,CAA0B,UAAA,mDAAmD,CAAA,EAAGJ,EAAA,GAAAI,IAAAA,GAAAJ,EAAA,GAQvE,IAAAO,GAAA/C,IAAa,OAASR,EAACwD,QAAWxD,EAACyD,OAAOC,GAAAV,EAAA,KAAAO,GAC9BG,GAAAV,EAAA,IAFfU,IAAA,EAAA,EAAA,KAAA,EAAA,CAAwB,UAAA,2CACrBH,EACH,CAAA,EAAeP,EAAA,GAAAO,GAAAP,EAAA,GAAAU,IAAA,IAAAC,GAAAX,EAAA,KAAAK,OAAAC,IAAA,2BAAA,GAGXK,IAAA,EAAA,EAAA,KAAC,EAAD,CAAa,UAAA,SAAsB,YAAA,IAAI,CAAA,EAAIX,EAAA,GAAAW,IAAAA,GAAAX,EAAA,GAAA,IAAAY,GAAAZ,EAAA,KAAAhD,EAAA6D,MAEhCD,GAAAZ,EAAA,IAJfY,IAAA,EAAA,EAAA,KAAA,EAAA,CAAc,QAAA,aACZ,EAAA,EAAA,KAAC,EAAD,CAAa,KAAA,SAAiB,QAAA,QAAkB,UAAA,sBAAkC,aAAA5D,EAAC6D,eACjFF,EADK,CAAA,CAGT,CAAA,EAAeX,EAAA,GAAAhD,EAAA6D,MAAAb,EAAA,GAAAY,IAAA,IAAAE,GAAAd,EAAA,KAAAU,IAAAV,EAAA,KAAAY,IARjBE,IAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,2FAAf,CACEJ,GAGAE,EAKI,IAAAZ,EAAA,GAAAU,GAAAV,EAAA,GAAAY,GAAAZ,EAAA,IAAAc,IAAAA,GAAAd,EAAA,IAAA,IAAAe,GAAAf,EAAA,MAAAhD,EAAAgE,KAImED,GAAAf,EAAA,KAAnEe,IAAA,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,6CAAqC/D,EAACgE,IAAa,CAAA,EAAAhB,EAAA,IAAAhD,EAAAgE,KAAAhB,EAAA,IAAAe,IAAA,IAAAE,GAAAjB,EAAA,MAAAK,OAAAC,IAAA,2BAAA,GAGtDW,GAAA1E,GAAe,EAACyD,EAAA,IAAAiB,IAAAA,GAAAjB,EAAA,IAAA,IAAAkB,GAAAlB,EAAA,MAAArC,EAEsBuD,GAAAlB,EAAA,KAAvCkB,GAAAC,GAAOxD,EAAiByD,EAAClD,OAAOmD,KAAM,EAACrB,EAAA,IAAArC,EAAAqC,EAAA,IAAAkB,IAAA,IAAAI,GAAAtB,EAAA,MAAAhD,EAAAuE,iBAAAvB,EAAA,MAAAtC,GAAAsC,EAAA,MAAAkB,IAJnDI,IAAA,EAAA,EAAA,KAAA,QAAA,CACO,KAAA,OACM,UAAAL,GACJvD,MAAAA,EACG,SAAAwD,GACG,YAAAlE,EAACuE,eAAgB,CAAA,EAC9BvB,EAAA,IAAAhD,EAAAuE,gBAAAvB,EAAA,IAAAtC,EAAAsC,EAAA,IAAAkB,GAAAlB,EAAA,IAAAsB,IAAAA,GAAAtB,EAAA,IAAA,IAAAwB,GAAAxB,EAAA,MAAAsB,IAAAtB,EAAA,MAAAe,IARJS,IAAA,EAAA,EAAA,MAAA,QAAA,CAAiB,UAAA,+BAAjB,CACET,GACAO,EAOM,IAAAtB,EAAA,IAAAsB,GAAAtB,EAAA,IAAAe,GAAAf,EAAA,IAAAwB,IAAAA,GAAAxB,EAAA,IAAA,IAAAyB,GAAAzB,EAAA,MAAAhD,EAAA0E,gBAAA1B,EAAA,MAAAnC,GAAAmC,EAAA,MAAAjC,GAAAiC,EAAA,MAAAlC,GACR2D,IAAA,EAAA,EAAA,KAAC,GAAD,CACS5D,MAAAA,EACGC,SAAAA,EACAC,SAAAA,EACF,OAAAf,EAAC0E,cAAe,CAAA,EACxB1B,EAAA,IAAAhD,EAAA0E,eAAA1B,EAAA,IAAAnC,EAAAmC,EAAA,IAAAjC,EAAAiC,EAAA,IAAAlC,EAAAkC,EAAA,IAAAyB,IAAAA,GAAAzB,EAAA,IAAA,IAAA2B,GAAA3B,EAAA,MAAAhD,EAAAuC,KAEmEoC,GAAA3B,EAAA,KAAnE2B,IAAA,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,6CAAqC3E,EAACuC,IAAa,CAAA,EAAAS,EAAA,IAAAhD,EAAAuC,KAAAS,EAAA,IAAA2B,IAAA,IAAAC,GAAA5B,EAAA,MAAAK,OAAAC,IAAA,2BAAA,GAEtDsB,GAAApF,GAAgB,EAACwD,EAAA,IAAA4B,IAAAA,GAAA5B,EAAA,IAAA,IAAA6B,GAAA7B,EAAA,MAAAzC,GAAAyC,EAAA,MAAAzB,GAAAyB,EAAA,MAAA/B,GAElB4D,GAAAC,GAAA,CACR,IAAAlE,EAAUwD,EAAClD,OAAOmD,MAClBpD,EAA0BL,EAAGL,EAAsBgB,EAASwD,KAAM,CAAC,CAAC,EACrE/B,EAAA,IAAAzC,EAAAyC,EAAA,IAAAzB,EAAAyB,EAAA,IAAA/B,EAAA+B,EAAA,IAAA6B,IAAAA,GAAA7B,EAAA,IAAA,IAAAgC,GAAAhC,EAAA,MAAAhD,EAAAiF,iBAEiDD,GAAAhC,EAAA,KAAlDgC,IAAA,EAAA,EAAA,KAAA,SAAA,CAAc,MAAA,gBAAQhF,EAACiF,gBAA2B,CAAA,EAAAjC,EAAA,IAAAhD,EAAAiF,iBAAAjC,EAAA,IAAAgC,IAAA,IAAAE,EAAAlC,EAAA,MAAAhD,EAAAmF,gBACGD,EAAAlC,EAAA,KAArDkC,GAAA,EAAA,EAAA,KAAA,SAAA,CAAc,MAAA,oBAAYlF,EAACmF,eAA0B,CAAA,EAAAnC,EAAA,IAAAhD,EAAAmF,gBAAAnC,EAAA,IAAAkC,GAAA,IAAAE,GAAApC,EAAA,MAAAhC,GAAAgC,EAAA,MAAA6B,IAAA7B,EAAA,MAAAgC,IAAAhC,EAAA,MAAAkC,GATvDE,IAAA,EAAA,EAAA,MAAA,SAAA,CACa,UAAAR,GACJ5D,MAAAA,EACG,SAAA6D,YAHZ,CAQEG,GACAE,CACO,IAAAlC,EAAA,IAAAhC,EAAAgC,EAAA,IAAA6B,GAAA7B,EAAA,IAAAgC,GAAAhC,EAAA,IAAAkC,EAAAlC,EAAA,IAAAoC,IAAAA,GAAApC,EAAA,IAEN,IAAAqC,GAAArE,IAAsB,OAAShB,EAACsF,WAActF,EAACuF,UAAUC,GAAAxC,EAAA,MAAAqC,GACxDG,GAAAxC,EAAA,KAFJwC,IAAA,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,iCACVH,EACC,CAAA,EAAArC,EAAA,IAAAqC,GAAArC,EAAA,IAAAwC,IAAA,IAAAC,GAAAzC,EAAA,MAAA2B,IAAA3B,EAAA,MAAAoC,IAAApC,EAAA,MAAAwC,IAfNC,IAAA,EAAA,EAAA,MAAA,QAAA,CAAiB,UAAA,+BAAjB,CACEd,GACAS,GAWAI,EAGM,IAAAxC,EAAA,IAAA2B,GAAA3B,EAAA,IAAAoC,GAAApC,EAAA,IAAAwC,GAAAxC,EAAA,IAAAyC,IAAAA,GAAAzC,EAAA,IAAA,IAAA0C,GAAA1C,EAAA,MAAA9C,GAAA8C,EAAA,MAAAhD,EAAA2F,gBAAA3C,EAAA,MAAAhD,EAAA4F,oBAAA5C,EAAA,MAAAhD,EAAA6F,cAAA7C,EAAA,MAAAhD,EAAA8F,qBAAA9C,EAAA,MAAAhD,EAAA+F,kBAAA/C,EAAA,MAAAhD,EAAAgG,OAAAhD,EAAA,MAAAhD,EAAAiG,sBAAAjD,EAAA,MAAAhD,EAAAkG,uBAAAlD,EAAA,MAAAhD,EAAAmG,uBAAAnD,EAAA,MAAA/C,GAAA+C,EAAA,MAAA1C,GAAA0C,EAAA,MAAAtB,GAAAsB,EAAA,MAAA3B,GAAA2B,EAAA,MAAAzB,GAAAyB,EAAA,MAAAhC,GAAAgC,EAAA,MAAAjC,GAAAiC,EAAA,MAAApB,GAAAoB,EAAA,MAAArB,GAAAqB,EAAA,MAAA1B,GAAA0B,EAAA,MAAAxB,GAAAwB,EAAA,MAAAnB,GACP6D,GAAA1E,IAAsB,YAAtB,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EAEG,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,+BAAf,EACE,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,6CAAqChB,EAACgG,KAAc,CAAA,GACpE,EAAA,EAAA,KAAC,EAAD,CACSzE,MAAAA,EACM,YAAAtB,EAAKmG,iBACC,kBAAAnG,EAAKoG,uBACb,UAAApG,EAAKqG,eACN,UAAA,4BACc,wBAAA,SACd9E,SAAAA,CAAqB,CAAA,CAE7B,KACN,EAAA,EAAA,MAAA,QAAA,CAAiB,UAAA,+BAAjB,EACE,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,6CAAqCxB,EAAC6F,YAAqB,CAAA,GAC3E,EAAA,EAAA,MAAA,SAAA,CACa,UAAArG,GAAgB,EACpBkC,MAAAA,EACGX,SAAAA,EACA,SAAAwF,GAAO5E,EAAoByC,EAAClD,OAAOmD,KAAM,WAJrD,EAME,EAAA,EAAA,KAAA,SAAA,CAAc,MAAA,YAAIrE,EAAC8F,mBAA8B,CAAA,EAChDxF,EAAsBkG,IAAKC,IAC1B,EAAA,EAAA,KAAA,SAAA,CAA2B,MAAAA,EAAEhF,YAC1B,GAAGgF,EAAEhF,GAAG,KAAMhC,EAAqBgH,EAAIvG,CAAc,GAC/C,EAFIuG,EAAEhF,EAEN,CACV,CACM,KACT,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,iCAAyBzB,EAAC+F,gBAAsB,CAAA,CACvD,KACR,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,+BAAf,EACE,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,6CAAqC/F,EAACkG,qBAA8B,CAAA,GACpF,EAAA,EAAA,KAAC,GAAD,CACStE,MAAAA,EACGC,SAAAA,EACAd,SAAAA,EACN,GAAAd,EAAKyG,iBACI,YAAAzG,EAAKyG,iBAAiBC,OACrB,cAAA,0BACF,WAAA3G,EAACmG,sBACJ,YAAMtE,EAA6B,EAAE,CAAC,CAAA,GAEjD,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,iCAAyB7B,EAACiG,oBAA0B,CAAA,CAC7D,KACN,EAAA,EAAA,MAAA,QAAA,CAAiB,UAAA,mHAAjB,EACE,EAAA,EAAA,KAAA,QAAA,CACO,KAAA,WACM,UAAAtG,EAAG,cAAe,QAAQ,EAC5B0B,QAAAA,EACC,SAAAuF,GAAOtF,EAA2B8C,EAAClD,OAAO2F,OAAQ,EAChD,aAAA7G,EAAC2F,cAAe,CAAA,GAE9B,EAAA,EAAA,MAAA,OAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,uCAA+B3F,EAAC2F,cAAuB,CAAA,GACvE,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,sCAA8B3F,EAAC4F,kBAAwB,CAAA,CAC/D,CAAA,CAAA,CACD,GAAA,CAAA,CAAA,EAzDX,KA2DO5C,EAAA,IAAA9C,EAAA8C,EAAA,IAAAhD,EAAA2F,eAAA3C,EAAA,IAAAhD,EAAA4F,mBAAA5C,EAAA,IAAAhD,EAAA6F,aAAA7C,EAAA,IAAAhD,EAAA8F,oBAAA9C,EAAA,IAAAhD,EAAA+F,iBAAA/C,EAAA,IAAAhD,EAAAgG,MAAAhD,EAAA,IAAAhD,EAAAiG,qBAAAjD,EAAA,IAAAhD,EAAAkG,sBAAAlD,EAAA,IAAAhD,EAAAmG,sBAAAnD,EAAA,IAAA/C,EAAA+C,EAAA,IAAA1C,EAAA0C,EAAA,IAAAtB,EAAAsB,EAAA,IAAA3B,EAAA2B,EAAA,IAAAzB,EAAAyB,EAAA,IAAAhC,EAAAgC,EAAA,IAAAjC,EAAAiC,EAAA,IAAApB,EAAAoB,EAAA,IAAArB,EAAAqB,EAAA,IAAA1B,EAAA0B,EAAA,IAAAxB,EAAAwB,EAAA,IAAAnB,EAAAmB,EAAA,IAAA0C,IAAAA,GAAA1C,EAAA,IAAA,IAAA8D,GAAA9D,EAAA,MAAAhD,EAAAgC,SAAAgB,EAAA,MAAAhD,EAAA+G,cAAA/D,EAAA,MAAAhD,EAAAgH,uBAAAhE,EAAA,MAAAhD,EAAAiH,kBAAAjE,EAAA,MAAAhD,EAAAkH,eAAAlE,EAAA,MAAAhD,EAAAmH,qBAAAnE,EAAA,MAAAhD,EAAAoH,WAAApE,EAAA,MAAAhD,EAAAqH,sBAAArE,EAAA,MAAAhD,EAAAsH,aAAAtE,EAAA,MAAAhD,EAAAuH,sBAAAvE,EAAA,MAAAhD,EAAAwH,iBAAAxE,EAAA,MAAA5C,GAAA4C,EAAA,MAAAlB,GAAAkB,EAAA,MAAAf,GAAAe,EAAA,MAAAP,IAAAO,EAAA,MAAAjB,GAAAiB,EAAA,MAAAd,GAAAc,EAAA,MAAAH,IAAAG,EAAA,MAAA3C,GAAA2C,EAAA,MAAAN,IACPoE,GAAApE,IAAA,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EAEG,EAAA,EAAA,MAAA,QAAA,CAAiB,UAAA,+BAAjB,EACE,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,6CAAqC1C,EAACgC,OAAgB,CAAA,GACtE,EAAA,EAAA,MAAA,SAAA,CACa,UAAAxC,GAAgB,EACpBsC,MAAAA,EACG,SAAA2F,GAAA,CACR,IAAAC,EAAUtD,EAAClD,OAAOmD,MAClBtC,EAAoBnB,CAAC,CAAC,WAL1B,EAQE,EAAA,EAAA,KAAA,SAAA,CAAc,MAAA,iBAASZ,EAAC+G,YAAuB,CAAA,EAC9C3G,EAAQoG,IAAKmB,EAIb,CACM,GACH,IACPlF,IACC,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,+BAAf,EACE,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,mDAAf,EACE,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,6CAAqCzC,EAACoH,SAAkB,CAAA,GACxE,EAAA,EAAA,MAAC,EAAD,CACO,KAAA,SACG,QAAA,QACE,UAAA,yBACH,MAAApH,EAACuH,qBACC,YAAM,KAAK1E,GAAoB,WAL1C,EAOE,EAAA,EAAA,KAAC,EAAD,CAAqB,UAAA,WAAwB,YAAA,IAAI,CAAA,EAChD7C,EAACsH,WARG,GAUH,KACN,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,qEAAf,EACE,EAAA,EAAA,KAAA,QAAA,CACO,KAAA,OACM,UAAA3H,EAAGJ,GAAe,EAAG,0BAA0B,EACnD0C,MAAAA,EACG,SAAA2F,GAAO1F,EAAmBkC,EAAClD,OAAOmD,KAAM,EACrC,YAAArE,EAACqH,oBAAqB,CAAA,GAErC,EAAA,EAAA,MAAA,SAAA,CACa/H,UAAAA,GACJ2C,MAAAA,EACG,SAAA4F,GAAA,CACR,IAAAC,EAAU1D,EAAClD,OAAOmD,MACdzD,GAAGsB,EAAmBtB,CAAC,CAAE,WALjC,EAQE,EAAA,EAAA,KAAA,SAAA,CAAc,MAAA,YAAIZ,EAACwH,eAA0B,CAAA,EAC5CnH,EAAc0H,OAAU,EACvB1H,EAAcmG,IAAKwB,IACjB,EAAA,EAAA,KAAA,SAAA,CAAsD,MAAAA,EAAIC,gBACvD5I,EAA2B2I,EAAMhI,EAACiH,gBAAiB,CAC7C,EAFI,GAAGe,EAAIhG,QAAQ,GAAIgG,EAAIC,QAE3B,CAMb,GAHE,EAAA,EAAA,KAAA,SAAA,CAAc,MAAA,GAAG,SAAA,YACdjI,EAACmH,mBACK,CAAA,CAEJ,GACL,KACN,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,iCACV9G,EAAc0H,OAAU,EAAI/H,EAACgH,sBAAyBhH,EAACkH,aACtD,CAAA,CACA,IAhDP,IAiDO,CAAA,CAAA,EArEX,KAuEOlE,EAAA,IAAAhD,EAAAgC,QAAAgB,EAAA,IAAAhD,EAAA+G,aAAA/D,EAAA,IAAAhD,EAAAgH,sBAAAhE,EAAA,IAAAhD,EAAAiH,iBAAAjE,EAAA,IAAAhD,EAAAkH,cAAAlE,EAAA,IAAAhD,EAAAmH,oBAAAnE,EAAA,IAAAhD,EAAAoH,UAAApE,EAAA,IAAAhD,EAAAqH,qBAAArE,EAAA,IAAAhD,EAAAsH,YAAAtE,EAAA,IAAAhD,EAAAuH,qBAAAvE,EAAA,IAAAhD,EAAAwH,gBAAAxE,EAAA,IAAA5C,EAAA4C,EAAA,IAAAlB,EAAAkB,EAAA,IAAAf,EAAAe,EAAA,IAAAP,GAAAO,EAAA,IAAAjB,EAAAiB,EAAA,IAAAd,EAAAc,EAAA,IAAAH,GAAAG,EAAA,IAAA3C,EAAA2C,EAAA,IAAAN,GAAAM,EAAA,IAAA8D,IAAAA,GAAA9D,EAAA,IAAA,IAAAkF,GAAAlF,EAAA,MAAAhD,EAAAmI,QAGkED,GAAAlF,EAAA,KAAtEkF,IAAA,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,6CAAqClI,EAACmI,OAAgB,CAAA,EAAAnF,EAAA,IAAAhD,EAAAmI,QAAAnF,EAAA,IAAAkF,IAMhE,IAAAE,GAAA/F,KAAsB,OAAtB,gCAAA,uCAE0CgG,GAAArF,EAAA,MAAAoF,GAC3CC,GAAArF,EAAA,KALUqF,GAAA1I,EACT,gFACAyI,EAGF,EAACpF,EAAA,IAAAoF,GAAApF,EAAA,IAAAqF,IAAA,IAAAC,GAAAtF,EAAA,MAAAV,GACwCgG,GAAAtF,EAAA,KAAhCsF,OAAMhG,GAAmB,MAAM,EAACU,EAAA,IAAAV,GAAAU,EAAA,IAAAsF,IAAA,IAAAC,GAAAvF,EAAA,OAAAK,OAAAC,IAAA,2BAAA,GAEzCiF,IAAA,EAAA,EAAA,KAAC,EAAD,CAAqB,UAAA,oBAAiC,YAAA,KAAM,cAAA,EAAW,CAAA,EAAGvF,EAAA,KAAAuF,IAAAA,GAAAvF,EAAA,KAAA,IAAAwF,GAAAxF,EAAA,OAAAhD,EAAAyI,aAAAzF,EAAA,OAAAqF,IAAArF,EAAA,OAAAsF,IAV5EE,IAAA,EAAA,EAAA,MAAA,SAAA,CACO,KAAA,SACM,UAAAH,GAMF,QAAAC,YARX,CAUEC,GACCvI,EAACyI,WACK,IAAAzF,EAAA,KAAAhD,EAAAyI,YAAAzF,EAAA,KAAAqF,GAAArF,EAAA,KAAAsF,GAAAtF,EAAA,KAAAwF,IAAAA,GAAAxF,EAAA,KAKL,IAAA0F,GAAArG,KAAsB,UAAtB,gCAAA,uCAE0CsG,GAAA3F,EAAA,OAAA0F,GAC3CC,GAAA3F,EAAA,MALU2F,GAAAhJ,EACT,gFACA+I,EAGF,EAAC1F,EAAA,KAAA0F,GAAA1F,EAAA,KAAA2F,IAAA,IAAAC,GAAA5F,EAAA,OAAAV,GAC2CsG,GAAA5F,EAAA,MAAnC4F,OAAMtG,GAAmB,SAAS,EAACU,EAAA,KAAAV,GAAAU,EAAA,KAAA4F,IAAA,IAAAC,GAAA7F,EAAA,OAAAK,OAAAC,IAAA,2BAAA,GAE5CuF,IAAA,EAAA,EAAA,KAAC,EAAD,CAAe,UAAA,oBAAiC,YAAA,KAAM,cAAA,EAAW,CAAA,EAAG7F,EAAA,KAAA6F,IAAAA,GAAA7F,EAAA,KAAA,IAAA8F,GAAA9F,EAAA,OAAAhD,EAAA+I,gBAAA/F,EAAA,OAAA2F,IAAA3F,EAAA,OAAA4F,IAVtEE,IAAA,EAAA,EAAA,MAAA,SAAA,CACO,KAAA,SACM,UAAAH,GAMF,QAAAC,YARX,CAUEC,GACC7I,EAAC+I,cACK,IAAA/F,EAAA,KAAAhD,EAAA+I,eAAA/F,EAAA,KAAA2F,GAAA3F,EAAA,KAAA4F,GAAA5F,EAAA,KAAA8F,IAAAA,GAAA9F,EAAA,KAAA,IAAAgG,GAAAhG,EAAA,OAAAwF,IAAAxF,EAAA,OAAA8F,IA1BXE,IAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,4FAAf,CACER,GAaAM,EAaI,IAAA9F,EAAA,KAAAwF,GAAAxF,EAAA,KAAA8F,GAAA9F,EAAA,KAAAgG,IAAAA,GAAAhG,EAAA,KAAA,IAAAiG,GAAAjG,EAAA,OAAAkF,IAAAlF,EAAA,OAAAgG,IA7BRC,IAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,6DAAf,CACEf,GACAc,EA4BI,IAAAhG,EAAA,KAAAkF,GAAAlF,EAAA,KAAAgG,GAAAhG,EAAA,KAAAiG,IAAAA,GAAAjG,EAAA,KAIF,IAAAkG,GAAAnI,GAAA,iCAAkDoI,GAAAnG,EAAA,OAAAkG,GACnDC,GAAAnG,EAAA,MAHUmG,GAAAxJ,EACT,iFACAuJ,EACF,EAAClG,EAAA,KAAAkG,GAAAlG,EAAA,KAAAmG,IAAA,IAAAC,GAAApG,EAAA,OAAAhD,EAAAqJ,oBAAArG,EAAA,OAAAvC,GAAAuC,EAAA,OAAAb,GAAAa,EAAA,OAAAX,IAAAW,EAAA,OAAA7C,GAAA6C,EAAA,OAAAR,IAAAQ,EAAA,OAAAZ,IAEAgH,GAAA/G,KAAsB,QACrB,EAAA,EAAA,KAAC,EAAD,CAEkBF,eAAAA,EACNC,SAAAA,GACFjC,SACE,UAAA,mCAAmC,EAJxC,YAAYM,GAAA,MAAkB,GAAI+B,IAIM,GAG/C,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,+FACZL,EAAW4C,KAIZ,GAHE,EAAA,EAAA,KAAC,EAAD,CAAuB5C,QAAAA,EAAa,QAAA,GAAkB,UAAA,SAAS,CAAA,GAE/D,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,iCAAyBnC,EAACqJ,kBAAwB,CAAA,CAE7D,CAAA,EACPrG,EAAA,KAAAhD,EAAAqJ,mBAAArG,EAAA,KAAAvC,EAAAuC,EAAA,KAAAb,EAAAa,EAAA,KAAAX,GAAAW,EAAA,KAAA7C,EAAA6C,EAAA,KAAAR,GAAAQ,EAAA,KAAAZ,GAAAY,EAAA,KAAAoG,IAAAA,GAAApG,EAAA,KAAA,IAAAsG,GAAAtG,EAAA,OAAAmG,IAAAnG,EAAA,OAAAoG,IAtBHE,IAAA,EAAA,EAAA,KAAA,MAAA,CACa,UAAAH,YAKVC,EAiBG,CAAA,EAAApG,EAAA,KAAAmG,GAAAnG,EAAA,KAAAoG,GAAApG,EAAA,KAAAsG,IAAAA,GAAAtG,EAAA,KAAA,IAAAuG,GAAAvG,EAAA,OAAAhD,EAAAwJ,oBAC0DD,GAAAvG,EAAA,MAAhEuG,IAAA,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,iCAAyBvJ,EAACwJ,mBAAyB,CAAA,EAAAxG,EAAA,KAAAhD,EAAAwJ,oBAAAxG,EAAA,KAAAuG,IAAA,IAAAE,GAAAzG,EAAA,OAAAiG,IAAAjG,EAAA,OAAAsG,IAAAtG,EAAA,OAAAuG,IAxDlEE,IAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,+BAAf,CACER,GA+BAK,GAwBAC,EACI,IAAAvG,EAAA,KAAAiG,GAAAjG,EAAA,KAAAsG,GAAAtG,EAAA,KAAAuG,GAAAvG,EAAA,KAAAyG,IAAAA,GAAAzG,EAAA,KAAA,IAAA0G,GAAA1G,EAAA,OAAAwB,IAAAxB,EAAA,OAAAyB,IAAAzB,EAAA,OAAAyC,IAAAzC,EAAA,OAAA0C,IAAA1C,EAAA,OAAA8D,IAAA9D,EAAA,OAAAyG,IAhOVC,IAAA,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,qDACb,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,+BAAf,CACElF,GAUAC,GAMAgB,GAiBCC,GA4DAoB,GAwED2C,EA0DI,GACF,CAAA,EAAAzG,EAAA,KAAAwB,GAAAxB,EAAA,KAAAyB,GAAAzB,EAAA,KAAAyC,GAAAzC,EAAA,KAAA0C,GAAA1C,EAAA,KAAA8D,GAAA9D,EAAA,KAAAyG,GAAAzG,EAAA,KAAA0G,IAAAA,GAAA1G,EAAA,KAAA,IAAA2G,GAAA3G,EAAA,OAAAhD,EAAA4J,QAAA5G,EAAA,OAAAjD,GAEJ4J,IAAA,EAAA,EAAA,KAAC,EAAD,CAAa,KAAA,SAAiB,QAAA,YAAqB5J,QAAAA,WAChDC,EAAC4J,MADG,CAAA,EAEE5G,EAAA,KAAAhD,EAAA4J,OAAA5G,EAAA,KAAAjD,EAAAiD,EAAA,KAAA2G,IAAAA,GAAA3G,EAAA,KACyC,IAAA6G,GAAA9I,GAAA,CAAmB4B,GAClEmH,GAAA/I,EAAiBf,EAAC+J,QAAWvJ,IAAa,OAASR,EAACgK,KAAQhK,EAACiK,OAAOC,GAAAlH,EAAA,OAAAJ,IAAAI,EAAA,OAAA6G,IAAA7G,EAAA,OAAA8G,IADvEI,IAAA,EAAA,EAAA,KAAC,EAAD,CAAa,KAAA,SAAiB,QAAA,UAAoB,SAAAL,GAAuCjH,QAAAA,YACtFkH,EADI,CAAA,EAEE9G,EAAA,KAAAJ,GAAAI,EAAA,KAAA6G,GAAA7G,EAAA,KAAA8G,GAAA9G,EAAA,KAAAkH,IAAAA,GAAAlH,EAAA,KAAA,IAAAmH,GAAAnH,EAAA,OAAA2G,IAAA3G,EAAA,OAAAkH,IANXC,IAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,0EAAf,CACER,GAGAO,EAGI,IAAAlH,EAAA,KAAA2G,GAAA3G,EAAA,KAAAkH,GAAAlH,EAAA,KAAAmH,IAAAA,GAAAnH,EAAA,KAAA,IAAAoH,GAAApH,EAAA,OAAA0G,IAAA1G,EAAA,OAAAmH,IAAAnH,EAAA,OAAAc,IA3PZsG,IAAA,EAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CACEhH,IACA,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,0FACb,EAAA,EAAA,MAAA,EAAA,CACY,UAAA,kOACO,gBAAAiH,YAFnB,CAIEvG,GAUA4F,GAmOAS,EAQF,GACI,CAAA,CACR,CAAA,CAAA,EAAgBnH,EAAA,KAAA0G,GAAA1G,EAAA,KAAAmH,GAAAnH,EAAA,KAAAc,GAAAd,EAAA,KAAAoH,IAAAA,GAAApH,EAAA,KAAA,IAAAsH,GAEjB,OAFiBtH,EAAA,OAAAlD,GAAAkD,EAAA,OAAAE,IAAAF,EAAA,OAAAoH,IAhQpBE,IAAA,EAAA,EAAA,KAAA,EAAA,SAAA,CAAA,UACE,EAAA,EAAA,KAAA,EAAA,CAAmBxK,OAAoB,aAAAoD,YACrCkH,EA+PF,CAAA,CAAc,CAAA,EACbpH,EAAA,KAAAlD,EAAAkD,EAAA,KAAAE,GAAAF,EAAA,KAAAoH,GAAApH,EAAA,KAAAsH,IAAAA,GAAAtH,EAAA,KAlQHsH,EAkQG,CAhTA,SAAA3C,GAAA4C,EAAA,CAAA,OA8KqB,EAAA,EAAA,MAAA,SAAA,CAA6B,MAAAA,EAAEvG,KAAiB,SAAA,CAACuG,EAAEC,iBAAnD,CACGD,EAAEvG,KAAM,IAAGuG,EAAEC,QAAH,GAAA,YACJ,GAFID,EAAEvG,IAEN,CAAA,CAhL9B,SAAAqG,GAAAjG,EAAA,CAAA,OAqD+BA,EAACqG,eAAgB,CAAC,CCjGxD,SAAO2B,GAAAC,EAAA,CAAA,IAAAC,GAAAA,EAAAA,EAAAA,GAAA,EAAA,EAAyB,CAAAnB,IAAAC,UAAAC,kBAAAE,UAAAC,kBAAAE,eAAAC,uBAAAE,mBAAAC,2BAAAE,sBAAAC,8BAAAE,QAAAE,EAgB6BG,EAAArB,EAACsB,MAIrCC,EAAAtB,IAAY,UAGzBuB,EAAAvB,IAAY,UAAZ,UAAA,8BAAiEwB,EAAAN,EAAA,KAAAK,EAClEC,EAAAN,EAAA,IAHUM,EAAA5B,EACT,6DACA2B,CACF,EAACL,EAAA,GAAAK,EAAAL,EAAA,GAAAM,GAAA,IAAAC,EAAAP,EAAA,KAAAjB,EACwCwB,EAAAP,EAAA,IAAhCO,MAAMxB,EAAgB,SAAS,EAACiB,EAAA,GAAAjB,EAAAiB,EAAA,GAAAO,GAAA,IAAAC,EAAAR,EAAA,KAAAnB,EAAA4B,YAAAT,EAAA,KAAAI,GAAAJ,EAAA,KAAAM,GAAAN,EAAA,KAAAO,GAR3CC,GAAA,EAAA,EAAA,KAAA,SAAA,CACO,KAAA,SACA,KAAA,MACU,gBAAAJ,EACJ,UAAAE,EAIF,QAAAC,WAER1B,EAAC4B,UACK,CAAA,EAAAT,EAAA,GAAAnB,EAAA4B,WAAAT,EAAA,GAAAI,EAAAJ,EAAA,GAAAM,EAAAN,EAAA,GAAAO,EAAAP,EAAA,GAAAQ,GAAAA,EAAAR,EAAA,GAIQ,IAAAU,EAAA5B,IAAY,cAGzB6B,EAAA7B,IAAY,cAAZ,UAAA,8BAAqE8B,EAAAZ,EAAA,KAAAW,EACtEC,EAAAZ,EAAA,KAHUY,EAAAlC,EACT,6DACAiC,CACF,EAACX,EAAA,GAAAW,EAAAX,EAAA,IAAAY,GAAA,IAAAC,EAAAb,EAAA,MAAAjB,EAC4C8B,EAAAb,EAAA,KAApCa,MAAM9B,EAAgB,aAAa,EAACiB,EAAA,IAAAjB,EAAAiB,EAAA,IAAAa,GAAA,IAAAC,EAAAd,EAAA,MAAAnB,EAAAkC,gBAAAf,EAAA,MAAAa,GAAAb,EAAA,MAAAU,GAAAV,EAAA,MAAAY,GAR/CE,GAAA,EAAA,EAAA,KAAA,SAAA,CACO,KAAA,SACA,KAAA,MACU,gBAAAJ,EACJ,UAAAE,EAIF,QAAAC,WAERhC,EAACkC,cACK,CAAA,EAAAf,EAAA,IAAAnB,EAAAkC,eAAAf,EAAA,IAAAa,EAAAb,EAAA,IAAAU,EAAAV,EAAA,IAAAY,EAAAZ,EAAA,IAAAc,GAAAA,EAAAd,EAAA,IAIQ,IAAAgB,EAAAlC,IAAY,UAGzBmC,EAAAnC,IAAY,UAAZ,UAAA,8BAAiEoC,EAAAlB,EAAA,MAAAiB,EAClEC,EAAAlB,EAAA,KAHUkB,EAAAxC,EACT,6DACAuC,CACF,EAACjB,EAAA,IAAAiB,EAAAjB,EAAA,IAAAkB,GAAA,IAAAC,EAAAnB,EAAA,MAAAjB,EACwCoC,EAAAnB,EAAA,KAAhCmB,MAAMpC,EAAgB,SAAS,EAACiB,EAAA,IAAAjB,EAAAiB,EAAA,IAAAmB,GAAA,IAAAC,EAAApB,EAAA,MAAAnB,EAAAwC,eAAArB,EAAA,MAAAgB,GAAAhB,EAAA,MAAAkB,GAAAlB,EAAA,MAAAmB,GAR3CC,GAAA,EAAA,EAAA,KAAA,SAAA,CACO,KAAA,SACA,KAAA,MACU,gBAAAJ,EACJ,UAAAE,EAIF,QAAAC,WAERtC,EAACwC,aACK,CAAA,EAAArB,EAAA,IAAAnB,EAAAwC,cAAArB,EAAA,IAAAgB,EAAAhB,EAAA,IAAAkB,EAAAlB,EAAA,IAAAmB,EAAAnB,EAAA,IAAAoB,GAAAA,EAAApB,EAAA,IAAA,IAAAsB,EAAAtB,EAAA,MAAAnB,EAAAsB,OAAAH,EAAA,MAAAc,GAAAd,EAAA,MAAAoB,GAAApB,EAAA,MAAAQ,GApCXc,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,aAAkB,KAAA,UAAsB,aAAApB,WAAvD,CACEM,EAYAM,EAYAM,CAYI,IAAApB,EAAA,IAAAnB,EAAAsB,MAAAH,EAAA,IAAAc,EAAAd,EAAA,IAAAoB,EAAApB,EAAA,IAAAQ,EAAAR,EAAA,IAAAsB,GAAAA,EAAAtB,EAAA,IAIF,IAAAuB,EAAAzC,IAAY,UAAZ,oDAAA,2BAE8B0C,EAAAxB,EAAA,MAAAuB,EAC/BC,EAAAxB,EAAA,KALUwB,EAAA9C,EACT,kCACA6C,CAGF,EAACvB,EAAA,IAAAuB,EAAAvB,EAAA,IAAAwB,GAAA,IAAAC,EAAAzB,EAAA,MAAAnB,EAAA6C,gBAAA1B,EAAA,MAAAnB,EAAA8C,iBAAA3B,EAAA,MAAAf,GAAAe,EAAA,MAAAlB,GAAAkB,EAAA,MAAAd,GAEAuC,EAAA3C,IAAY,WAAaA,IAAY,eACpC,EAAA,EAAA,MAAA,SAAA,CACaN,UAAAA,GACJS,MAAAA,EACG,SAAA2C,GAAO1C,EAAgB0C,EAACC,OAAOC,KAAwC,EACrE,aAAAjD,EAAC8C,yBAJf,EAME,EAAA,EAAA,KAAA,SAAA,CAAc,MAAA,wBAAgB9C,EAAC8C,eAA0B,CAAA,GACzD,EAAA,EAAA,KAAA,SAAA,CAAc,MAAA,uBAAe9C,EAAC6C,cAAyB,CAAA,CAChD,IATV,KAUO1B,EAAA,IAAAnB,EAAA6C,eAAA1B,EAAA,IAAAnB,EAAA8C,gBAAA3B,EAAA,IAAAf,EAAAe,EAAA,IAAAlB,EAAAkB,EAAA,IAAAd,EAAAc,EAAA,IAAAyB,GAAAA,EAAAzB,EAAA,IAAA,IAAA+B,EAAA/B,EAAA,MAAAnB,EAAAmD,qBAAAhC,EAAA,MAAAnB,EAAAoD,kBAAAjC,EAAA,MAAAnB,EAAAqD,mBAAAlC,EAAA,MAAAnB,EAAAsD,mBAAAnC,EAAA,MAAAnB,EAAAuD,mBAAApC,EAAA,MAAAnB,EAAAwD,gBAAArC,EAAA,MAAAnB,EAAAyD,iBAAAtC,EAAA,MAAAnB,EAAA0D,mBAAAvC,EAAA,MAAAnB,EAAA2D,kBAAAxC,EAAA,MAAAnB,EAAA4D,iBAAAzC,EAAA,MAAAT,GAAAS,EAAA,MAAAZ,GAAAY,EAAA,MAAAN,GAAAM,EAAA,MAAAH,GAAAG,EAAA,MAAAlB,GAAAkB,EAAA,MAAAR,GAAAQ,EAAA,MAAAX,GAAAW,EAAA,MAAAL,GACPoC,EAAAjD,IAAY,WAAZ,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EAEG,EAAA,EAAA,KAAA,MAAA,CAAgB,UAAAJ,EAAGJ,EAAyB,UAAU,EAAQ,KAAA,QAAoB,aAAAO,EAAC4D,yBAC/E,CAAC,MAAO,OAAQ,OAAO,EAAUE,IAAMC,IACvC,EAAA,EAAA,KAAA,SAAA,CAEO,KAAA,SACM,UAAAlE,EACTL,EACA,cACAe,IAAiBwD,GAAAA,uGACjBxD,IAAiBwD,GAAjB,SACF,EACS,YAAMvD,EAAqBuD,CAAC,WAEpCA,IAAM,MAAQ/D,EAACyD,gBAAmBM,IAAM,OAAS/D,EAAC2D,iBAAoB3D,EAAC0D,iBACjE,EAXFK,CAWE,CACV,CACG,CAAA,GACN,EAAA,EAAA,MAAA,SAAA,CACapE,UAAAA,GACJe,MAAAA,EACG,SAAAsD,GAAOrD,EAAyBoC,EAACC,OAAOC,KAAM,EAC5C,aAAAjD,EAACwD,wBAJf,EAME,EAAA,EAAA,KAAA,SAAA,CAAc,MAAA,YAAIxD,EAACwD,cAAyB,CAAA,EAC3CxC,EAAI8C,IAAKG,EAIT,CACM,KACT,EAAA,EAAA,MAAA,SAAA,CACatE,UAAAA,GACJkB,MAAAA,EACG,SAAAqD,GAAOpD,EAA4BiC,EAACC,OAAOC,KAAM,EAC/C,aAAAjD,EAACuD,2BAJf,EAME,EAAA,EAAA,KAAA,SAAA,CAAc,MAAA,YAAIvD,EAACuD,iBAA4B,CAAA,GAC/C,EAAA,EAAA,KAAA,SAAA,CAAc,MAAA,mBAAWvD,EAACsD,iBAA4B,CAAA,GACtD,EAAA,EAAA,KAAA,SAAA,CAAc,MAAA,kBAAUtD,EAACoD,gBAA2B,CAAA,GACpD,EAAA,EAAA,KAAA,SAAA,CAAc,MAAA,qBAAapD,EAACmD,mBAA8B,CAAA,GAC1D,EAAA,EAAA,KAAA,SAAA,CAAc,MAAA,mBAAWnD,EAACqD,iBAA4B,CAAA,CAC/C,GAAA,CAAA,CAAA,EA3CZ,KA6COlC,EAAA,IAAAnB,EAAAmD,oBAAAhC,EAAA,IAAAnB,EAAAoD,iBAAAjC,EAAA,IAAAnB,EAAAqD,kBAAAlC,EAAA,IAAAnB,EAAAsD,kBAAAnC,EAAA,IAAAnB,EAAAuD,kBAAApC,EAAA,IAAAnB,EAAAwD,eAAArC,EAAA,IAAAnB,EAAAyD,gBAAAtC,EAAA,IAAAnB,EAAA0D,kBAAAvC,EAAA,IAAAnB,EAAA2D,iBAAAxC,EAAA,IAAAnB,EAAA4D,gBAAAzC,EAAA,IAAAT,EAAAS,EAAA,IAAAZ,EAAAY,EAAA,IAAAN,EAAAM,EAAA,IAAAH,EAAAG,EAAA,IAAAlB,EAAAkB,EAAA,IAAAR,EAAAQ,EAAA,IAAAX,EAAAW,EAAA,IAAAL,EAAAK,EAAA,IAAA+B,GAAAA,EAAA/B,EAAA,IAAA,IAAAgD,EAAAhD,EAAA,MAAAwB,GAAAxB,EAAA,MAAAyB,GAAAzB,EAAA,MAAA+B,GAhEViB,GAAA,EAAA,EAAA,MAAA,MAAA,CACa,UAAAxB,WADb,CAQGC,EAWAM,CA8CG,IAAA/B,EAAA,IAAAwB,EAAAxB,EAAA,IAAAyB,EAAAzB,EAAA,IAAA+B,EAAA/B,EAAA,IAAAgD,GAAAA,EAAAhD,EAAA,IAAA,IAAAiD,EACF,OADEjD,EAAA,MAAAsB,GAAAtB,EAAA,MAAAgD,GAxGRC,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,uIAAf,CACE3B,EAsCA0B,CAkEI,IAAAhD,EAAA,IAAAsB,EAAAtB,EAAA,IAAAgD,EAAAhD,EAAA,IAAAiD,GAAAA,EAAAjD,EAAA,IAzGNiD,CAyGM,CAxHH,SAAAH,GAAAI,EAAA,CAAA,OAoGS,EAAA,EAAA,KAAA,SAAA,CAA0B,MAAAA,EAACC,YACxBD,EAACE,MAASF,EAACC,EACL,EAFID,EAACC,EAEL,CAAA,CChHzB,SAAOgB,GAAAC,EAAA,CAAA,IAAAC,GAAAA,EAAAA,EAAAA,GAAA,EAAA,EAA+B,CAAAR,IAAAC,UAAAC,oBAAAC,YAAAC,uBAAAC,YAAAE,EAQpCG,EAAaT,GAAAC,EAQAS,EAAAX,EAACY,QACIC,EAAAb,EAACY,QAAQE,EAAAN,EAAA,KAAAL,EACUW,EAAAN,EAAA,IAAtBM,MAAM,KAAKX,EAAU,EAACK,EAAA,GAAAL,EAAAK,EAAA,GAAAM,GAEI,IAAAC,EAAAL,GAAA,eAAsBM,EAAAR,EAAA,KAAAO,EAACC,EAAAR,EAAA,IAApCQ,EAAAnB,EAAG,SAAUkB,CAAsB,EAACP,EAAA,GAAAO,EAAAP,EAAA,GAAAQ,GAAA,IAAAC,EAAAT,EAAA,KAAAQ,EAAuBC,EAAAT,EAAA,IAAjFS,GAAA,EAAA,EAAA,KAAC,EAAD,CAAsB,UAAAD,EAAmD,YAAA,IAAI,CAAA,EAAIR,EAAA,GAAAQ,EAAAR,EAAA,GAAAS,GAAA,IAAAC,EAAAV,EAAA,KAAAE,GAAAF,EAAA,KAAAR,EAAAY,SAAAJ,EAAA,KAAAM,GAAAN,EAAA,KAAAS,GATnFC,GAAA,EAAA,EAAA,KAAC,EAAD,CACO,KAAA,SACG,QAAA,QACE,UAAA,sBACAR,SAAAA,EACH,MAAAC,EACK,aAAAE,EACH,QAAAC,WAETG,CATK,CAAA,EAUET,EAAA,GAAAE,EAAAF,EAAA,GAAAR,EAAAY,QAAAJ,EAAA,GAAAM,EAAAN,EAAA,GAAAS,EAAAT,EAAA,IAAAU,GAAAA,EAAAV,EAAA,IAAA,IAAAW,EAAAX,EAAA,MAAAY,OAAAC,IAAA,2BAAA,GAEPF,GAAA,EAAA,EAAA,KAAC,EAAD,CAA0B,UAAA,SAAsB,YAAA,IAAI,CAAA,EAAIX,EAAA,IAAAW,GAAAA,EAAAX,EAAA,IAAA,IAAAc,EAAAd,EAAA,MAAAR,EAAAuB,cAAAf,EAAA,MAAAJ,GAD1DkB,GAAA,EAAA,EAAA,MAAC,EAAD,CAAa,KAAA,SAAiB,QAAA,YAAsB,UAAA,QAAiBlB,QAAAA,WAArE,CACEe,EACCnB,EAACuB,YAFG,IAGEf,EAAA,IAAAR,EAAAuB,aAAAf,EAAA,IAAAJ,EAAAI,EAAA,IAAAc,GAAAA,EAAAd,EAAA,IAAA,IAAAgB,EAAAhB,EAAA,MAAAY,OAAAC,IAAA,2BAAA,GAEPG,GAAA,EAAA,EAAA,KAAC,EAAD,CAAgB,UAAA,SAAsB,YAAA,IAAI,CAAA,EAAIhB,EAAA,IAAAgB,GAAAA,EAAAhB,EAAA,IAAA,IAAAiB,EAAAjB,EAAA,MAAAR,EAAA0B,QAAAlB,EAAA,MAAAH,GADhDoB,GAAA,EAAA,EAAA,MAAC,EAAD,CAAa,KAAA,SAAiB,QAAA,UAAoB,UAAA,QAAiBpB,QAAAA,WAAnE,CACEmB,EACCxB,EAAC0B,MAFG,IAGElB,EAAA,IAAAR,EAAA0B,OAAAlB,EAAA,IAAAH,EAAAG,EAAA,IAAAiB,GAAAA,EAAAjB,EAAA,IAAA,IAAAmB,EACL,OADKnB,EAAA,MAAAiB,GAAAjB,EAAA,MAAAU,GAAAV,EAAA,MAAAc,GAnBXK,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,wEAAf,CACET,EAWAI,EAIAG,CAII,IAAAjB,EAAA,IAAAiB,EAAAjB,EAAA,IAAAU,EAAAV,EAAA,IAAAc,EAAAd,EAAA,IAAAmB,GAAAA,EAAAnB,EAAA,IApBNmB,CAoBM,CCfV,SAAO6B,GAAAC,EAAA,CAAA,IAAAC,GAAAA,EAAAA,EAAAA,GAAA,EAAA,EAA+B,CAAAf,IAAAC,oBAAAC,aAAAC,qBAAAC,OAAAC,mBAAAC,kBAAAE,gBAAAM,EASTG,EAAAF,EAAA,KAAAf,EAAAkB,cAOdD,EAAAF,EAAA,IAFLE,GAAA,EAAA,EAAA,KAAA,KAAA,CAAO,GAAA,qBAA+B,UAAA,mBACnCjB,EAACkB,aACC,CAAA,EAAAH,EAAA,GAAAf,EAAAkB,cAAAH,EAAA,GAAAE,GAAA,IAAAE,EAAAJ,EAAA,KAAAf,EAAAoB,eACsDD,EAAAJ,EAAA,IAA3DI,GAAA,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,iCAAyBnB,EAACoB,cAAoB,CAAA,EAAAL,EAAA,GAAAf,EAAAoB,eAAAL,EAAA,GAAAI,GAAA,IAAAE,EAAAN,EAAA,KAAAE,GAAAF,EAAA,KAAAI,GAJ7DE,GAAA,EAAA,EAAA,MAAA,MAAA,CAAA,SAAA,CACEJ,EAGAE,CACI,CAAA,CAAA,EAAAJ,EAAA,GAAAE,EAAAF,EAAA,GAAAI,EAAAJ,EAAA,GAAAM,GAAAA,EAAAN,EAAA,GAMG,IAAAO,EAAAtB,EAACuB,QACIC,EAAAxB,EAACuB,QAAQE,EAAAV,EAAA,KAAAV,EACiBoB,EAAAV,EAAA,IAA7BU,MAAM,KAAKpB,EAAiB,EAACU,EAAA,GAAAV,EAAAU,EAAA,GAAAU,GAEH,IAAAC,EAAAzB,GAAA,eAAmC0B,EAAAZ,EAAA,KAAAW,EAACC,EAAAZ,EAAA,KAAjDY,EAAA9B,EAAG,SAAU6B,CAAmC,EAACX,EAAA,GAAAW,EAAAX,EAAA,IAAAY,GAAA,IAAAC,EAAAb,EAAA,MAAAY,EAAuBC,EAAAb,EAAA,KAA9Fa,GAAA,EAAA,EAAA,KAAC,EAAD,CAAsB,UAAAD,EAAgE,YAAA,IAAI,CAAA,EAAIZ,EAAA,IAAAY,EAAAZ,EAAA,IAAAa,GAAA,IAAAC,EAAAd,EAAA,MAAAf,EAAAuB,SAAAR,EAAA,MAAAd,GAAAc,EAAA,MAAAU,GAAAV,EAAA,MAAAa,GAThGC,GAAA,EAAA,EAAA,KAAC,EAAD,CACO,KAAA,SACG,QAAA,QACE,UAAA,sBACA5B,SAAAA,EACH,MAAAqB,EACK,aAAAE,EACH,QAAAC,WAETG,CATK,CAAA,EAUEb,EAAA,IAAAf,EAAAuB,QAAAR,EAAA,IAAAd,EAAAc,EAAA,IAAAU,EAAAV,EAAA,IAAAa,EAAAb,EAAA,IAAAc,GAAAA,EAAAd,EAAA,IAAA,IAAAe,EAAAf,EAAA,MAAAc,GAAAd,EAAA,MAAAM,GAjBXS,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,kDAAf,CACET,EAMAQ,CAWI,IAAAd,EAAA,IAAAc,EAAAd,EAAA,IAAAM,EAAAN,EAAA,IAAAe,GAAAA,EAAAf,EAAA,IAAA,IAAAgB,EAAAhB,EAAA,MAAAf,EAAAgC,SAAAjB,EAAA,MAAAf,EAAAiC,WAAAlB,EAAA,MAAAf,EAAAkC,aAAAnB,EAAA,MAAAf,EAAAmC,QAAApB,EAAA,MAAAf,EAAAoC,YAAArB,EAAA,MAAAf,EAAAqC,kBAAAtB,EAAA,MAAAf,EAAAsC,mBAAAvB,EAAA,MAAAf,EAAAuC,WAAAxB,EAAA,MAAAf,EAAAwC,UAAAzB,EAAA,MAAAf,EAAAyC,eAAA1B,EAAA,MAAAf,EAAAoB,gBAAAL,EAAA,MAAAf,EAAA0C,QAAA3B,EAAA,MAAAZ,GAAAY,EAAA,MAAAX,GAAAW,EAAA,MAAAT,GAAAS,EAAA,MAAAb,GAAAa,EAAA,MAAAd,GAAAc,EAAA,MAAAP,GACLuB,EAAA9B,GAAqBC,EAAUyC,SAAY,GAC1C,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,sCACb,EAAA,EAAA,KAAC,EAAD,CAAmB,UAAA,kCAA+C,YAAA,IAAI,CAAA,CAClE,CAAA,EACJxC,EAAkBwC,SAAY,GAChC,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,yIAAf,EACE,EAAA,EAAA,KAAC,EAAD,CAAiB,UAAA,gCAA6C,YAAA,IAAK,cAAA,EAAW,CAAA,GAC9E,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,2CACXzC,EAAUyC,SAAY,EAAI3C,EAACsC,kBAAqBtC,EAACuC,SAC/C,CAAA,GACL,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,+CACVrC,EAAUyC,SAAY,EAAI3C,EAACqC,iBAAoBrC,EAACoB,cAC/C,CAAA,CACA,KAEN,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,yGACb,EAAA,EAAA,MAAA,QAAA,CAAiB,UAAA,kEAAjB,EACE,EAAA,EAAA,KAAA,QAAA,CAAA,UACE,EAAA,EAAA,MAAA,KAAA,CAAc,UAAA,kEAAd,EACE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,mCAA2BpB,EAACoC,UAAiB,CAAA,GAC3D,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,mCAA2BpC,EAACmC,MAAa,CAAA,GACvD,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,mCAA2BnC,EAAC0C,MAAa,CAAA,GACvD,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,mCAA2B1C,EAACkC,WAAkB,CAAA,GAC5D,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,mCAA2BlC,EAACiC,SAAgB,CAAA,GAC1D,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,mCAA2BjC,EAACgC,OAAc,CAAA,CACrD,GACC,CAAA,GACR,EAAA,EAAA,KAAA,QAAA,CAAA,SACG7B,EAAkByC,IAAKC,IACtB,EAAA,EAAA,MAAA,KAAA,CAA2B,UAAA,iDAA3B,EACE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,kDACZ,EAAA,EAAA,KAAA,OAAA,CAAgB,SAAAA,EAAGE,mBAAarD,GAAWmD,EAAGE,SAAU,CAAS,CAAA,CAC9D,CAAA,GACL,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,8CACX3C,EAAI4C,KAAMC,GAAOC,EAACJ,KAAQD,EAAGM,KAa9B,GAZE,EAAA,EAAA,KAAA,SAAA,CACO,KAAA,SACK,UAAA,wCACD,YAAA,CACP,IAAAD,EAAU9C,EAAIgD,KAAMC,GAAOA,EAACP,KAAQD,EAAGM,KAAM,EACzCD,GAAQ5C,EAAgB4C,CAAC,CAAE,WAGhCL,EAAGS,SAAYT,EAAGM,KACZ,CAAA,GAET,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,yBAAiBN,EAAGS,SAAYT,EAAGM,KAAc,CAAA,CAEhE,CAAA,GACL,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,wBACZ,EAAA,EAAA,KAAA,OAAA,CACa,UAAAtD,EACT,yDACAgD,EAAGH,SAAY,WAAf,2DACAG,EAAGH,SAAY,UAAf,+CACAG,EAAGH,SAAY,WAAf,2BACAG,EAAGH,SAAY,aAAf,gCACF,WAEClD,EAAgBqD,EAAGH,OAASlC,CAAY,CACpC,CAAA,CACJ,CAAA,GACL,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,uDACXf,GAAeoD,EAAGU,QAAS,CACzB,CAAA,GACL,EAAA,EAAA,KAAA,KAAA,CACY,UAAA,8CACH,MAAAV,EAAGW,SAAYX,EAAGY,OAAlB,YAEN9D,EAASkD,EAAGW,SAAYX,EAAGY,MAAQ,EAAE,CACnC,CAAA,GACL,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,yCACXZ,EAAGa,YAAiBC,KAYrB,GAXE,EAAA,EAAA,KAAA,SAAA,CACO,KAAA,SACK,UAAA,kDACH,MAAA3D,EAACyC,cACI,aAAAzC,EAACyC,cACJ,YAAMlD,GAAsBsD,EAAGa,UAAW,WAElD1D,EAACwC,QACK,CAAA,GAET,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,4BAAmB,GAAQ,CAAA,CAE1C,CAAA,CACF,GAzDIK,EAAGC,EAyDP,CACN,CACK,CAAA,CACF,GACJ,CAAA,EACP/B,EAAA,IAAAf,EAAAgC,QAAAjB,EAAA,IAAAf,EAAAiC,UAAAlB,EAAA,IAAAf,EAAAkC,YAAAnB,EAAA,IAAAf,EAAAmC,OAAApB,EAAA,IAAAf,EAAAoC,WAAArB,EAAA,IAAAf,EAAAqC,iBAAAtB,EAAA,IAAAf,EAAAsC,kBAAAvB,EAAA,IAAAf,EAAAuC,UAAAxB,EAAA,IAAAf,EAAAwC,SAAAzB,EAAA,IAAAf,EAAAyC,cAAA1B,EAAA,IAAAf,EAAAoB,eAAAL,EAAA,IAAAf,EAAA0C,OAAA3B,EAAA,IAAAZ,EAAAY,EAAA,IAAAX,EAAAW,EAAA,IAAAT,EAAAS,EAAA,IAAAb,EAAAa,EAAA,IAAAd,EAAAc,EAAA,IAAAP,EAAAO,EAAA,IAAAgB,GAAAA,EAAAhB,EAAA,IAAA,IAAA6C,EACO,OADP7C,EAAA,MAAAe,GAAAf,EAAA,MAAAgB,GA/GH6B,GAAA,EAAA,EAAA,MAAA,UAAA,CAAyB,kBAAA,qBAA+B,UAAA,+BAAxD,CACE9B,EAmBCC,CA4FO,IAAAhB,EAAA,IAAAe,EAAAf,EAAA,IAAAgB,EAAAhB,EAAA,IAAA6C,GAAAA,EAAA7C,EAAA,IAhHV6C,CAgHU,CC9Hd,SAAO2B,GAAAC,EAAA,CAAA,IAAAC,GAAAA,EAAAA,EAAAA,GAAA,EAAA,EAAqB,CAAAf,MAAAC,IAAAC,YAAAC,sBAAAC,0BAAAC,kCAAAE,eAAAC,WAAAE,SAAAC,WAAAC,YAAAE,EAYTG,EAAAF,EAAA,KAAAG,OAAAC,IAAA,2BAAA,GAKFF,EAAApB,EACT,8JACA,yBACA,+IACF,EAACkB,EAAA,GAAAE,GAAAA,EAAAF,EAAA,GAAA,IAAAK,EAAAC,EAAAN,EAAA,KAAAX,GAAAW,EAAA,KAAAf,GAAAe,EAAA,KAAAR,GACQa,MAAA,CACP,GAAIhB,EAAuBkB,UAAatB,EAAGuB,GAAG,CAC5CnB,EAAuBkB,QAAW,KAAH,MAAA,CAG5Bf,EAAaP,CAAG,CAAC,EAEbqB,EAAAG,GAAA,CACT,GAAIA,EAACC,MAAS,SAAWD,EAACC,MAAS,IAAG,CAEpC,GADAD,EAACE,eAAgB,EACbtB,EAAuBkB,UAAatB,EAAGuB,GAAG,CAC5CnB,EAAuBkB,QAAW,KAAH,MAAA,CAG5Bf,EAAaP,CAAG,CAAC,CACvB,EACFe,EAAA,GAAAX,EAAAW,EAAA,GAAAf,EAAAe,EAAA,GAAAR,EAAAQ,EAAA,GAAAK,EAAAL,EAAA,GAAAM,IAAAD,EAAAL,EAAA,GAAAM,EAAAN,EAAA,IAMiB,IAAAY,EAAA3B,EAAGS,QAGfmB,EAAA5B,EAAGS,QAAH,wBAAA,iCAAwEoB,EAAAd,EAAA,KAAAa,EACzEC,EAAAd,EAAA,IAHUc,EAAAhC,EACT,qGACA+B,CACF,EAACb,EAAA,GAAAa,EAAAb,EAAA,GAAAc,GAAA,IAAAC,EAAAf,EAAA,KAAAf,GAAAe,EAAA,KAAAP,GACQsB,EAAAC,GAAA,CACPP,EAACQ,gBAAiB,EACbxB,EAASR,EAAK,CAACA,EAAGS,OAAQ,CAAC,EACjCM,EAAA,GAAAf,EAAAe,EAAA,GAAAP,EAAAO,EAAA,IAAAe,GAAAA,EAAAf,EAAA,IAAA,IAAAkB,EAAAlB,EAAA,MAAAG,OAAAC,IAAA,2BAAA,GAEDc,GAAA,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,2FAA2F,CAAA,EAAGlB,EAAA,IAAAkB,GAAAA,EAAAlB,EAAA,IAAA,IAAAmB,EAAAnB,EAAA,MAAAf,EAAAS,SAAAM,EAAA,MAAAc,GAAAd,EAAA,MAAAe,GAbhHI,GAAA,EAAA,EAAA,KAAA,SAAA,CACO,KAAA,SACA,KAAA,SACS,eAAAP,EACH,UAAAE,EAIF,QAAAC,WAKTG,CACO,CAAA,EAAAlB,EAAA,IAAAf,EAAAS,QAAAM,EAAA,IAAAc,EAAAd,EAAA,IAAAe,EAAAf,EAAA,IAAAmB,GAAAA,EAAAnB,EAAA,IAAA,IAAAoB,EAAApB,EAAA,MAAAG,OAAAC,IAAA,2BAAA,GAUHgB,GAAA,EAAA,EAAA,KAAC,EAAD,CAAwB,UAAA,SAAsB,YAAA,IAAI,CAAA,EAAIpB,EAAA,IAAAoB,GAAAA,EAAApB,EAAA,IAAA,IAAAqB,EAAArB,EAAA,MAAAd,EAAAoC,gBAEnCD,EAAArB,EAAA,KAVvBqB,GAAA,EAAA,EAAA,KAAA,GAAA,CAAsB,QAAA,aACpB,EAAA,EAAA,KAAC,EAAD,CACO,KAAA,SACG,QAAA,QACE,UAAA,sBACE,aAAAnC,EAACoC,gBACJ,QAAAC,YAETH,CAPK,CAAA,CAST,CAAA,EAAuBpB,EAAA,IAAAd,EAAAoC,gBAAAtB,EAAA,IAAAqB,GAAA,IAAAG,EAAAxB,EAAA,MAAAf,GAAAe,EAAA,MAAAL,GAAAK,EAAA,MAAAV,GAUPkC,MAAA,CACRlC,EAAgCL,EAAGuB,EAAG,EACtCb,EAAOV,CAAG,CAAC,EACZe,EAAA,IAAAf,EAAAe,EAAA,IAAAL,EAAAK,EAAA,IAAAV,EAAAU,EAAA,IAAAwB,GAAAA,EAAAxB,EAAA,IAAA,IAAAyB,EAAAzB,EAAA,MAAAd,EAAAwC,MAAA1B,EAAA,MAAAwB,GALHC,GAAA,EAAA,EAAA,KAAA,GAAA,CACY,UAAA,mHACA,SAAAD,WAKTtC,EAACwC,IACJ,CAAA,EAAoB1B,EAAA,IAAAd,EAAAwC,KAAA1B,EAAA,IAAAwB,EAAAxB,EAAA,IAAAyB,GAAAA,EAAAzB,EAAA,IAAA,IAAA2B,EAAA3B,EAAA,MAAAf,GAAAe,EAAA,MAAAJ,GAAAI,EAAA,MAAAV,GAGRqC,MAAA,CACRrC,EAAgCL,EAAGuB,EAAG,EACtCZ,EAASX,CAAG,CAAC,EACde,EAAA,IAAAf,EAAAe,EAAA,IAAAJ,EAAAI,EAAA,IAAAV,EAAAU,EAAA,IAAA2B,GAAAA,EAAA3B,EAAA,IAAA,IAAA4B,EAAA5B,EAAA,MAAAd,EAAA2C,QAAA7B,EAAA,MAAA2B,GALHC,GAAA,EAAA,EAAA,KAAA,GAAA,CACY,UAAA,mHACA,SAAAD,WAKTzC,EAAC2C,MACJ,CAAA,EAAoB7B,EAAA,IAAAd,EAAA2C,OAAA7B,EAAA,IAAA2B,EAAA3B,EAAA,IAAA4B,GAAAA,EAAA5B,EAAA,IAAA,IAAA8B,EAAA9B,EAAA,MAAAf,GAAAe,EAAA,MAAAH,GAAAG,EAAA,MAAAV,GAGRwC,MAAA,CACRxC,EAAgCL,EAAGuB,EAAG,EACtCX,EAASZ,CAAG,CAAC,EACde,EAAA,IAAAf,EAAAe,EAAA,IAAAH,EAAAG,EAAA,IAAAV,EAAAU,EAAA,IAAA8B,GAAAA,EAAA9B,EAAA,IAAA,IAAA+B,EAAA/B,EAAA,MAAAd,EAAA8C,QAAAhC,EAAA,MAAA8B,GALHC,GAAA,EAAA,EAAA,KAAA,GAAA,CACY,UAAA,uIACA,SAAAD,WAKT5C,EAAC8C,MACJ,CAAA,EAAoBhC,EAAA,IAAAd,EAAA8C,OAAAhC,EAAA,IAAA8B,EAAA9B,EAAA,IAAA+B,GAAAA,EAAA/B,EAAA,IAAA,IAAAiC,EAAAjC,EAAA,MAAAyB,GAAAzB,EAAA,MAAA4B,GAAA5B,EAAA,MAAA+B,GAjCxBE,GAAA,EAAA,EAAA,KAAA,GAAA,CAAA,UACE,EAAA,EAAA,MAAA,GAAA,CACY,UAAA,uHACE,WAAA,EACN,MAAA,MACY,iBAAAC,YAJpB,CAMET,EASAG,EASAG,CASF,GACF,CAAA,EAAsB/B,EAAA,IAAAyB,EAAAzB,EAAA,IAAA4B,EAAA5B,EAAA,IAAA+B,EAAA/B,EAAA,IAAAiC,GAAAA,EAAAjC,EAAA,IAAA,IAAAmC,EAAAnC,EAAA,MAAAqB,GAAArB,EAAA,MAAAiC,GA/CxBE,GAAA,EAAA,EAAA,MAAA,GAAA,CAAA,SAAA,CACEd,EAWAY,CAoCF,CAAA,CAAA,EAAoBjC,EAAA,IAAAqB,EAAArB,EAAA,IAAAiC,EAAAjC,EAAA,IAAAmC,GAAAA,EAAAnC,EAAA,IAAA,IAAAoC,EAAApC,EAAA,MAAAmC,GAAAnC,EAAA,MAAAmB,GAhEtBiB,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,4DAAf,CACEjB,EAeAgB,CAiDI,IAAAnC,EAAA,IAAAmC,EAAAnC,EAAA,IAAAmB,EAAAnB,EAAA,IAAAoC,GAAAA,EAAApC,EAAA,IAEgD,IAAAqC,EAAApD,EAAGqD,MAASrD,EAAGuB,GAAG+B,EAAAvC,EAAA,MAAAqC,EAAME,EAAAvC,EAAA,KAA5EuC,GAAA,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,8CAAsCF,CAAwB,CAAA,EAAArC,EAAA,IAAAqC,EAAArC,EAAA,IAAAuC,GAAA,IAAAC,EAAAxC,EAAA,MAAAf,EAG/CuD,EAAAxC,EAAA,KAApBwC,EAAA7D,GAAgBM,CAAG,EAACe,EAAA,IAAAf,EAAAe,EAAA,IAAAwC,GAAA,IAAAC,EAAAzC,EAAA,MAAAf,EAEgBwD,EAAAzC,EAAA,KAApByC,EAAA9D,GAAgBM,CAAG,EAACe,EAAA,IAAAf,EAAAe,EAAA,IAAAyC,GAAA,IAAAC,EAAA1C,EAAA,MAAAyC,EAAYC,EAAA1C,EAAA,KAAvD0C,GAAA,EAAA,EAAA,KAAC,EAAD,CAAuB,QAAAD,EAAsB,QAAA,EAAO,CAAA,EAAGzC,EAAA,IAAAyC,EAAAzC,EAAA,IAAA0C,GAAA,IAAAC,EAAA3C,EAAA,MAAAwC,GAAAxC,EAAA,MAAA0C,GAJzDC,GAAA,EAAA,EAAA,KAAA,MAAA,CACY,UAAA,kHACH,MAAAH,WAEPE,CACI,CAAA,EAAA1C,EAAA,IAAAwC,EAAAxC,EAAA,IAAA0C,EAAA1C,EAAA,IAAA2C,GAAAA,EAAA3C,EAAA,IAAA,IAAA4C,EAAA5C,EAAA,MAAAuC,GAAAvC,EAAA,MAAA2C,GAPRC,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,qDAAf,CACEL,EACAI,CAMI,IAAA3C,EAAA,IAAAuC,EAAAvC,EAAA,IAAA2C,EAAA3C,EAAA,IAAA4C,GAAAA,EAAA5C,EAAA,IAAA,IAAA6C,EAAA7C,EAAA,MAAAG,OAAAC,IAAA,2BAAA,GAEJyC,GAAA,EAAA,EAAA,KAAC,EAAD,CAAiB,UAAA,oBAAiC,YAAA,KAAM,cAAA,EAAW,CAAA,EAAG7C,EAAA,IAAA6C,GAAAA,EAAA7C,EAAA,IAAA,IAAA8C,EAAA9C,EAAA,MAAAf,GAAAe,EAAA,MAAAb,GAAAa,EAAA,MAAAZ,GAClC0D,EAAAlE,GAAoBK,EAAKE,EAAWC,CAAmB,EAACY,EAAA,IAAAf,EAAAe,EAAA,IAAAb,EAAAa,EAAA,IAAAZ,EAAAY,EAAA,IAAA8C,GAAAA,EAAA9C,EAAA,IAAA,IAAA+C,EAAA/C,EAAA,MAAA8C,EACxFC,EAAA/C,EAAA,KAHN+C,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,8HAAf,CACEF,GACA,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,4BAAoBC,CAAgE,CAAA,CAChG,IAAA9C,EAAA,IAAA8C,EAAA9C,EAAA,IAAA+C,GAAA,IAAAC,EACE,OADFhD,EAAA,MAAAK,GAAAL,EAAA,MAAAoC,GAAApC,EAAA,MAAA4C,GAAA5C,EAAA,MAAAM,GAAAN,EAAA,MAAA+C,GAxGRC,GAAA,EAAA,EAAA,MAAA,UAAA,CACO,KAAA,SACK,SAAA,EACC,UAAA9C,EAKF,QAAAG,EAOE,UAAAC,WAfb,CA0BE8B,EAkEAQ,EASAG,CAIQ,IAAA/C,EAAA,IAAAK,EAAAL,EAAA,IAAAoC,EAAApC,EAAA,IAAA4C,EAAA5C,EAAA,IAAAM,EAAAN,EAAA,IAAA+C,EAAA/C,EAAA,IAAAgD,GAAAA,EAAAhD,EAAA,IAzGVgD,CAyGU,CAvHP,SAAAd,GAAAe,EAAA,CAAA,OAyEgCxC,EAACE,eAAgB,CAAC,CAzElD,SAAAY,GAAA2B,EAAA,CAAA,OA+DuBzC,EAACQ,gBAAiB,CAAC,CCxDjD,SAAOuE,GAAAC,EAAA,CAAA,IAAAC,GAAAA,EAAAA,EAAAA,GAAA,GAAA,EAA8B,CAAAvB,IAAAC,WAAAC,YAAAC,sBAAAC,UAAAC,mBAAAC,YAAAC,YAAAC,gBAAAC,yBAAAC,oBAAAC,0BAAAC,kCAAAE,eAAAE,WAAAE,SAAAC,WAAAC,YAAAE,EAmBTG,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,GAAAb,EAAA,KAAAvB,EAAAqC,UAAAd,EAAA,KAAAvB,EAAAiB,SAAAM,EAAA,KAAAvB,EAAAO,WAAAgB,EAAA,KAAAvB,EAAAsC,sBAAAf,EAAA,KAAAvB,EAAAuC,qBAAAhB,EAAA,KAAAvB,EAAAwC,yBAAAjB,EAAA,KAAAvB,EAAAyC,6BAAAlB,EAAA,KAAAvB,EAAA0C,uBAAAnB,EAAA,KAAAvB,EAAA2C,sBAAApB,EAAA,KAAAvB,EAAA4C,kBAAArB,EAAA,MAAAvB,EAAA6C,gBAAAtB,EAAA,MAAAvB,EAAA8C,YAAAvB,EAAA,MAAAvB,EAAA+C,qBAAAxB,EAAA,MAAAjB,EAAAW,SAAAM,EAAA,MAAAjB,EAAA0C,YAAAzB,EAAA,MAAAhB,GAAAgB,EAAA,MAAAtB,GAAAsB,EAAA,MAAArB,GAAAqB,EAAA,MAAAb,GAAAa,EAAA,MAAAd,GAAAc,EAAA,MAAAf,EAAA,CAC1B,IAAAyC,EAAmBxD,GACjBa,EAAS0C,WACT9C,EACAR,EAASO,CAAQ,EAACiD,kBAAkBC,eACtC,EAG2BhB,EAAA,0BAAoCC,EAAA,sBAAqBb,EAAA,MAAAvB,EAAA6C,eAG3EnB,EAAAH,EAAA,KAFLG,GAAA,EAAA,EAAA,KAAA,KAAA,CAAO,GAAA,0BAAoC,UAAA,mBACxC1B,EAAC6C,cACC,CAAA,EAAAtB,EAAA,IAAAvB,EAAA6C,eAAAtB,EAAA,IAAAG,GAAAH,EAAA,MAAAvB,EAAA4C,iBACwDjB,EAAAJ,EAAA,KAA7DI,GAAA,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,iCAAyB3B,EAAC4C,gBAAsB,CAAA,EAAArB,EAAA,IAAAvB,EAAA4C,iBAAArB,EAAA,IAAAI,GAAA,IAAAyB,EAAA7B,EAAA,MAAA8B,OAAAC,IAAA,2BAAA,GAIzDF,GAAA,EAAA,EAAA,KAAC,EAAD,CAAgB,UAAA,qCAAkD,YAAA,KAAM,cAAA,EAAW,CAAA,EAAG7B,EAAA,IAAA6B,GAAAA,EAAA7B,EAAA,IAAA,IAAAgC,EAAAhC,EAAA,MAAAvB,EAAA8C,WAElFS,EAAAhC,EAAA,KAHNgC,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,sCAAf,CACEH,GACA,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,qCAA6BpD,EAAC8C,UAAgB,CAAA,CACvD,IAAAvB,EAAA,IAAAvB,EAAA8C,WAAAvB,EAAA,IAAAgC,GAAA,IAAAC,EAAAjC,EAAA,MAAAvB,EAAAO,UAEkDiD,EAAAjC,EAAA,KAAtDiC,GAAA,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,2BAAmBxD,EAACO,SAAkB,CAAA,EAAAgB,EAAA,IAAAvB,EAAAO,UAAAgB,EAAA,IAAAiC,GAK1C,IAAAC,EAAA,CAACjD,EACJkD,EAAClD,EAADmD,IAAAA,GAAiB3D,EAAC+C,oBAGvBa,EAAArD,EAAA,wBAAA,iCACAsD,EAAA,CAACrD,GAAD,gCAAiDsD,EAAAvC,EAAA,MAAAqC,GAAArC,EAAA,MAAAsC,GAHxCC,EAAAjE,EACT,qGACA+D,EACAC,CACF,EAACtC,EAAA,IAAAqC,EAAArC,EAAA,IAAAsC,EAAAtC,EAAA,IAAAuC,GAAAA,EAAAvC,EAAA,IAAA,IAAAwC,EAAAxC,EAAA,MAAAb,GAAAa,EAAA,MAAAd,GAAAc,EAAA,MAAAf,GACQuD,MAAA,CACFvD,EACAE,EAAkB,EADHD,EAAuB,CAClB,EAC1Bc,EAAA,IAAAb,EAAAa,EAAA,IAAAd,EAAAc,EAAA,IAAAf,EAAAe,EAAA,IAAAwC,GAAAA,EAAAxC,EAAA,IAAA,IAAAyC,EAAAzC,EAAA,MAAA8B,OAAAC,IAAA,2BAAA,GAEDU,GAAA,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,2FAA2F,CAAA,EAAGzC,EAAA,IAAAyC,GAAAA,EAAAzC,EAAA,IAAA,IAAA0C,EAAA1C,EAAA,MAAAhB,GAAAgB,EAAA,MAAAkC,GAAAlC,EAAA,MAAAmC,GAAAnC,EAAA,MAAAuC,GAAAvC,EAAA,MAAAwC,GAhBhHE,GAAA,EAAA,EAAA,KAAA,SAAA,CACO,KAAA,SACA,KAAA,SACS1D,eAAAA,EACJ,SAAAkD,EACH,MAAAC,EACI,UAAAI,EAKF,QAAAC,WAKTC,CACO,CAAA,EAAAzC,EAAA,IAAAhB,EAAAgB,EAAA,IAAAkC,EAAAlC,EAAA,IAAAmC,EAAAnC,EAAA,IAAAuC,EAAAvC,EAAA,IAAAwC,EAAAxC,EAAA,IAAA0C,GAAAA,EAAA1C,EAAA,IAAA,IAAA2C,EAAA3C,EAAA,MAAAiC,GAAAjC,EAAA,MAAA0C,GAnBXC,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,oDAAf,CACEV,EACAS,CAkBI,IAAA1C,EAAA,IAAAiC,EAAAjC,EAAA,IAAA0C,EAAA1C,EAAA,IAAA2C,GAAAA,EAAA3C,EAAA,IAAAA,EAAA,MAAAgC,GAAAhC,EAAA,MAAA2C,GAzBRtC,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,+KAAf,CACE2B,EAIAW,CAqBI,IAAA3C,EAAA,IAAAgC,EAAAhC,EAAA,IAAA2C,EAAA3C,EAAA,IAAAK,GAAAA,EAAAL,EAAA,IAESU,EAAA,6EAA4E,IAAAkC,EAAA5C,EAAA,MAAAvB,EAAA2C,qBAGVwB,EAAA5C,EAAA,KAA3E4C,GAAA,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,yCAAiCnE,EAAC2C,oBAA2B,CAAA,EAAApB,EAAA,IAAAvB,EAAA2C,qBAAApB,EAAA,IAAA4C,GAAA,IAAAC,EAAA7C,EAAA,MAAAvB,EAAAuC,oBACN6B,EAAA7C,EAAA,KAArE6C,GAAA,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,sCAA8BpE,EAACuC,mBAAyB,CAAA,EAAAhB,EAAA,IAAAvB,EAAAuC,oBAAAhB,EAAA,IAAA6C,GAAA,IAAAC,EAAA9C,EAAA,MAAA4C,GAAA5C,EAAA,MAAA6C,GAFvEC,GAAA,EAAA,EAAA,MAAA,MAAA,CAAA,SAAA,CACEF,EACAC,CACI,CAAA,CAAA,EAAA7C,EAAA,IAAA4C,EAAA5C,EAAA,IAAA6C,EAAA7C,EAAA,IAAA8C,GAAAA,EAAA9C,EAAA,IAAA,IAAA+C,EAAA/C,EAAA,MAAA8B,OAAAC,IAAA,2BAAA,GAIFgB,GAAA,EAAA,EAAA,KAAC,EAAD,CAAwB,UAAA,sBAAsB,cAAA,EAAW,CAAA,EAAG/C,EAAA,IAAA+C,GAAAA,EAAA/C,EAAA,IAAA,IAAAgD,EAAAhD,EAAA,MAAAvB,EAAAyC,4BAEvD8B,EAAAhD,EAAA,KALTgD,GAAA,EAAA,EAAA,KAAC,EAAD,CAAa,KAAA,SAAiB,QAAA,QAAkB,UAAA,gDAAgD,QAAA,aAC9F,EAAA,EAAA,MAAC,EAAD,CAAS,GAAA,+BAAT,CACGvE,EAACyC,4BACF6B,CAFG,GADA,CAAA,EAKE/C,EAAA,IAAAvB,EAAAyC,4BAAAlB,EAAA,IAAAgD,GAAAhD,EAAA,MAAA8C,GAAA9C,EAAA,MAAAgD,GAVXrC,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,6EAAf,CACEmC,EAIAE,CAMI,IAAAhD,EAAA,IAAA8C,EAAA9C,EAAA,IAAAgD,EAAAhD,EAAA,IAAAW,GAAAA,EAAAX,EAAA,IACQQ,EAAA,yCAAwC,IAAAyC,EAAAjD,EAAA,MAAAvB,EAAA0C,sBAE8B8B,EAAAjD,EAAA,KAAhFiD,GAAA,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,6CAAqCxE,EAAC0C,qBAA4B,CAAA,EAAAnB,EAAA,IAAAvB,EAAA0C,sBAAAnB,EAAA,IAAAiD,GACvD,IAAAC,EAAAnE,EAASW,QAAWjB,EAACiB,QAAWjB,EAACqC,SAASqC,EAAAnD,EAAA,MAAAkD,EAAMC,EAAAnD,EAAA,KAAzEmD,GAAA,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,mBAAWD,CAAgD,CAAA,EAAAlD,EAAA,IAAAkD,EAAAlD,EAAA,IAAAmD,GAAAnD,EAAA,MAAAiD,GAAAjD,EAAA,MAAAmD,GAF3E1C,GAAA,EAAA,EAAA,MAAA,MAAA,CAAA,SAAA,CACEwC,EACAE,CACI,CAAA,CAAA,EAAAnD,EAAA,IAAAiD,EAAAjD,EAAA,IAAAmD,EAAAnD,EAAA,IAAAS,GAAAA,EAAAT,EAAA,IAAAA,EAAA,MAAAvB,EAAAwC,wBAE8EV,EAAAP,EAAA,KAAlFO,GAAA,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,6CAAqC9B,EAACwC,uBAA8B,CAAA,EAAAjB,EAAA,IAAAvB,EAAAwC,wBAAAjB,EAAA,IAAAO,GACpEL,EAAA,UAAS,IAAAkD,EAAApD,EAAA,MAAA8B,OAAAC,IAAA,2BAAA,GAAiCqB,EAAA,iBAAgBpD,EAAA,IAAAoD,GAAAA,EAAApD,EAAA,IAA/CM,EAAA7B,EAACsC,qBAAqBsC,QAASD,EAAkB1B,CAAU,EAAC1B,EAAA,GAAAvB,EAAAqC,SAAAd,EAAA,GAAAvB,EAAAiB,QAAAM,EAAA,GAAAvB,EAAAO,UAAAgB,EAAA,GAAAvB,EAAAsC,qBAAAf,EAAA,GAAAvB,EAAAuC,oBAAAhB,EAAA,GAAAvB,EAAAwC,wBAAAjB,EAAA,GAAAvB,EAAAyC,4BAAAlB,EAAA,GAAAvB,EAAA0C,sBAAAnB,EAAA,GAAAvB,EAAA2C,qBAAApB,EAAA,GAAAvB,EAAA4C,iBAAArB,EAAA,IAAAvB,EAAA6C,eAAAtB,EAAA,IAAAvB,EAAA8C,WAAAvB,EAAA,IAAAvB,EAAA+C,oBAAAxB,EAAA,IAAAjB,EAAAW,QAAAM,EAAA,IAAAjB,EAAA0C,WAAAzB,EAAA,IAAAhB,EAAAgB,EAAA,IAAAtB,EAAAsB,EAAA,IAAArB,EAAAqB,EAAA,IAAAb,EAAAa,EAAA,IAAAd,EAAAc,EAAA,IAAAf,EAAAe,EAAA,IAAAE,EAAAF,EAAA,IAAAG,EAAAH,EAAA,IAAAI,EAAAJ,EAAA,IAAAK,EAAAL,EAAA,IAAAM,EAAAN,EAAA,IAAAO,EAAAP,EAAA,IAAAQ,EAAAR,EAAA,IAAAS,EAAAT,EAAA,IAAAU,EAAAV,EAAA,IAAAW,EAAAX,EAAA,IAAAY,EAAAZ,EAAA,IAAAa,CAAA,MAAAX,EAAAF,EAAA,IAAAG,EAAAH,EAAA,IAAAI,EAAAJ,EAAA,IAAAK,EAAAL,EAAA,IAAAM,EAAAN,EAAA,IAAAO,EAAAP,EAAA,IAAAQ,EAAAR,EAAA,IAAAS,EAAAT,EAAA,IAAAU,EAAAV,EAAA,IAAAW,EAAAX,EAAA,IAAAY,EAAAZ,EAAA,IAAAa,EAAAb,EAAA,IAAA,IAAA6B,EAAA7B,EAAA,MAAAE,GAAAF,EAAA,MAAAM,GAArFuB,GAAA,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA3B,WAAWI,CAAkE,CAAA,EAAAN,EAAA,IAAAE,EAAAF,EAAA,IAAAM,EAAAN,EAAA,IAAA6B,GAAAA,EAAA7B,EAAA,IAAA,IAAAgC,EAAAhC,EAAA,MAAA6B,GAAA7B,EAAA,MAAAO,GAF7FyB,GAAA,EAAA,EAAA,MAAA,MAAA,CAAA,SAAA,CACEzB,EACAsB,CACI,CAAA,CAAA,EAAA7B,EAAA,IAAA6B,EAAA7B,EAAA,IAAAO,EAAAP,EAAA,IAAAgC,GAAAA,EAAAhC,EAAA,IAAA,IAAAiC,EAAAjC,EAAA,MAAAgC,GAAAhC,EAAA,MAAAQ,GAAAR,EAAA,MAAAS,GARRwB,GAAA,EAAA,EAAA,MAAA,KAAA,CAAc,UAAAzB,WAAd,CACEC,EAIAuB,CAIG,IAAAhC,EAAA,IAAAgC,EAAAhC,EAAA,IAAAQ,EAAAR,EAAA,IAAAS,EAAAT,EAAA,IAAAiC,GAAAA,EAAAjC,EAAA,IAAA,IAAAkC,EAAAlC,EAAA,MAAAiC,GAAAjC,EAAA,MAAAU,GAAAV,EAAA,MAAAW,GAtBPuB,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAAxB,WAAf,CACEC,EAYAsB,CAUI,IAAAjC,EAAA,IAAAiC,EAAAjC,EAAA,IAAAU,EAAAV,EAAA,IAAAW,EAAAX,EAAA,IAAAkC,GAAAA,EAAAlC,EAAA,IAAA,IAAAmC,EAAAnC,EAAA,MAAAvB,EAAA6E,oBAIwEnB,EAAAnC,EAAA,MAA1EmC,GAAA,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,yCAAiC1D,EAAC6E,mBAA0B,CAAA,EAAAtD,EAAA,IAAAvB,EAAA6E,oBAAAtD,EAAA,KAAAmC,GAAA,IAAAE,EAAArC,EAAA,OAAA8B,OAAAC,IAAA,2BAAA,GAItEM,GAAA,EAAA,EAAA,KAAC,EAAD,CAAwB,UAAA,sBAAsB,cAAA,EAAW,CAAA,EAAGrC,EAAA,KAAAqC,GAAAA,EAAArC,EAAA,KAAA,IAAAsC,EAAAtC,EAAA,OAAAvB,EAAA8E,2BAEvDjB,EAAAtC,EAAA,MALTsC,GAAA,EAAA,EAAA,KAAC,EAAD,CAAa,KAAA,SAAiB,QAAA,QAAkB,UAAA,gDAAgD,QAAA,aAC9F,EAAA,EAAA,MAAC,EAAD,CAAS,GAAA,4BAAT,CACG7D,EAAC8E,2BACFlB,CAFG,GADA,CAAA,EAKErC,EAAA,KAAAvB,EAAA8E,2BAAAvD,EAAA,KAAAsC,GAAA,IAAAC,EAAAvC,EAAA,OAAAmC,GAAAnC,EAAA,OAAAsC,GAPXC,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,mFAAf,CACEJ,EACAG,CAMI,IAAAtC,EAAA,KAAAmC,EAAAnC,EAAA,KAAAsC,EAAAtC,EAAA,KAAAuC,GAAAA,EAAAvC,EAAA,KAAA,IAAAwC,EAAAxC,EAAA,OAAAvB,EAAA+E,mBAC8DhB,EAAAxC,EAAA,MAApEwC,GAAA,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,sCAA8B/D,EAAC+E,kBAAwB,CAAA,EAAAxD,EAAA,KAAAvB,EAAA+E,mBAAAxD,EAAA,KAAAwC,GAAA,IAAAC,EAAAzC,EAAA,OAAAZ,GAAAY,EAAA,OAAAvB,GAAAuB,EAAA,OAAAnB,GAAAmB,EAAA,OAAArB,GAAAqB,EAAA,OAAAH,GAAAG,EAAA,OAAAL,GAAAK,EAAA,OAAAT,GAAAS,EAAA,OAAAJ,GAAAI,EAAA,OAAAP,GAAAO,EAAA,OAAAX,GAAAW,EAAA,OAAApB,GAAAoB,EAAA,OAAAlB,GACnE2D,EAAA5D,GAAWC,EAAgB2E,SAAY,GACtC,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,4BAAsC,YAAA,iBACnD,EAAA,EAAA,KAAC,EAAD,CAAmB,UAAA,kCAA+C,YAAA,IAAI,CAAA,CAClE,CAAA,EACJ3E,EAAgB2E,SAAY,GAC9B,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,4HACVhF,EAACiF,mBACA,CAAA,GAEJ,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,qCACZ5E,EAAgB6E,IAAKnE,IACpB,EAAA,EAAA,KAAC,GAAD,CAEOA,MACFf,IACQE,YACUC,sBACIQ,0BACQC,kCACnBE,eACJE,WACFE,SACEC,WACAC,UAAQ,EAXbL,EAAGoE,EAWU,CAErB,CACG,CAAA,EACP5D,EAAA,KAAAZ,EAAAY,EAAA,KAAAvB,EAAAuB,EAAA,KAAAnB,EAAAmB,EAAA,KAAArB,EAAAqB,EAAA,KAAAH,EAAAG,EAAA,KAAAL,EAAAK,EAAA,KAAAT,EAAAS,EAAA,KAAAJ,EAAAI,EAAA,KAAAP,EAAAO,EAAA,KAAAX,EAAAW,EAAA,KAAApB,EAAAoB,EAAA,KAAAlB,EAAAkB,EAAA,KAAAyC,GAAAA,EAAAzC,EAAA,KAAA,IAAA0C,EAAA1C,EAAA,OAAAuC,GAAAvC,EAAA,OAAAwC,GAAAxC,EAAA,OAAAyC,GAtCHC,GAAA,EAAA,EAAA,MAAA,MAAA,CAAA,SAAA,CACEH,EASAC,EACCC,CA4BG,CAAA,CAAA,EAAAzC,EAAA,KAAAuC,EAAAvC,EAAA,KAAAwC,EAAAxC,EAAA,KAAAyC,EAAAzC,EAAA,KAAA0C,GAAAA,EAAA1C,EAAA,KAAA,IAAA2C,EACE,OADF3C,EAAA,OAAAG,GAAAH,EAAA,OAAAI,GAAAJ,EAAA,OAAAK,GAAAL,EAAA,OAAAkC,GAAAlC,EAAA,OAAA0C,GAAA1C,EAAA,OAAAY,GAAAZ,EAAA,OAAAa,GAlGR8B,GAAA,EAAA,EAAA,MAAA,UAAA,CAAyB,kBAAA/B,EAAoC,UAAAC,WAA7D,CACEV,EAGAC,EAEAC,EA4BA6B,EAyBAQ,CAwCQ,IAAA1C,EAAA,KAAAG,EAAAH,EAAA,KAAAI,EAAAJ,EAAA,KAAAK,EAAAL,EAAA,KAAAkC,EAAAlC,EAAA,KAAA0C,EAAA1C,EAAA,KAAAY,EAAAZ,EAAA,KAAAa,EAAAb,EAAA,KAAA2C,GAAAA,EAAA3C,EAAA,KAnGV2C,CAmGU,CC1Jd,SAAgBuB,GACdC,EACAC,EAC8B,CAC9B,IAAMC,EAAMF,EAAKG,UACjB,GAAI,CAACD,GAAO,OAAOA,GAAQ,SAAU,OACrC,IAAMG,EAAOH,EACXD,GAEF,GAAI,CAACI,GAAO,OAAOA,GAAQ,SAAU,OACrC,IAAMT,EAAQS,EAAIT,OAAOW,KAAK,EACxBT,EAASO,EAAIP,QAAQS,KAAK,EAC5B,MAACX,GAAS,CAACE,GACf,MAAO,CACLF,QACAC,aAAcQ,EAAIR,aAAe,IAAIU,KAAK,EAC1CT,QACF,CACF,CCxBA,IAAaU,GAA2B,CAAC,QAAS,aAAc,UAAW,YAAY,EAW1EQ,GAAqB,CAEhC,CACEJ,WAAY,mBACZC,SAAU,QACVC,gBAAiB,cACjBC,qBAAsB,UACxB,EACA,CACEH,WAAY,eACZC,SAAU,QACVC,gBAAiB,cACjBC,qBAAsB,UACxB,EACA,CACEH,WAAY,qBACZC,SAAU,QACVC,gBAAiB,eACjBC,qBAAsB,UACxB,EACA,CACEH,WAAY,eACZC,SAAU,QACVC,gBAAiB,eACjBC,qBAAsB,UACxB,EAEA,CACEH,WAAY,mBACZC,SAAU,aACVC,gBAAiB,YACjBC,qBAAsB,UACxB,EACA,CACEH,WAAY,0BACZC,SAAU,aACVC,gBAAiB,eACjBC,qBAAsB,UACxB,EACA,CACEH,WAAY,mBACZC,SAAU,aACVC,gBAAiB,aACjBC,qBAAsB,UACxB,EACA,CACEH,WAAY,yBACZC,SAAU,aACVC,gBAAiB,YACjBC,qBAAsB,UACxB,EAEA,CACEH,WAAY,gBACZC,SAAU,UACVC,gBAAiB,aACjBC,qBAAsB,UACxB,EACA,CACEH,WAAY,sBACZC,SAAU,UACVC,gBAAiB,aACjBC,qBAAsB,UACxB,EACA,CACEH,WAAY,uBACZC,SAAU,UACVC,gBAAiB,YACjBC,qBAAsB,UACxB,EACA,CACEH,WAAY,uBACZC,SAAU,UACVC,gBAAiB,aACjBC,qBAAsB,UACxB,EAEA,CACEH,WAAY,4BACZC,SAAU,aACVC,gBAAiB,aACjBC,qBAAsB,UACxB,EACA,CACEH,WAAY,mCACZC,SAAU,aACVC,gBAAiB,aACjBC,qBAAsB,UACxB,EACA,CACEH,WAAY,gCACZC,SAAU,aACVC,gBAAiB,cACjBC,qBAAsB,UACxB,EACA,CACEH,WAAY,8BACZC,SAAU,aACVC,gBAAiB,YACjBC,qBAAsB,UACxB,CAAC,EAKH,SAAgBG,GAAiBC,EAA6D,CAC5F,OAAOH,GAAmBI,KAAMC,GAAMA,EAAET,aAAeO,CAAE,CAC3D,CCrGA,SAAOsB,GAAAC,EAAA,CAAA,IAAAC,GAAAA,EAAAA,EAAAA,GAAA,EAAA,EACL,CAAAV,OAAAC,YAAAC,sBAAAC,iBAAAC,yBAAAE,oBAA2GG,EAAMG,EAAA,GAAAF,EAAA,KAAAP,GAAAO,EAAA,KAAAV,GAAAU,EAAA,KAAAT,GAAAS,EAAA,KAAAN,GAAAM,EAAA,KAAAJ,GAAAI,EAAA,KAAAR,EAAA,CAEjH,IAAAW,EACEV,IAAmB,MAAnB,CAAA,GACQV,EAAkB,EACtBA,GAAkBqB,OAAQC,GAAOA,EAACC,WAAcb,CAAc,EAIDc,EAAAjB,EAAIkB,aAGtDC,EAAAhB,IAAmB,MAAnB,YAAA,QAAgDiB,EAAAV,EAAA,KAAAN,EAEbgB,EAAAV,EAAA,IAAnCU,MAAMhB,EAAuB,KAAK,EAACM,EAAA,GAAAN,EAAAM,EAAA,GAAAU,GAAA,IAAAC,EAAAX,EAAA,KAAAV,EAAAsB,mBAAAZ,EAAA,MAAAS,GAAAT,EAAA,MAAAU,GAJ9CC,GAAA,EAAA,EAAA,KAAC,EAAD,CACO,KAAA,SACI,QAAAF,EACC,UAAA,uCACD,QAAAC,WAERpB,EAAIsB,iBANA,CAAA,EAOEZ,EAAA,GAAAV,EAAAsB,kBAAAZ,EAAA,IAAAS,EAAAT,EAAA,IAAAU,EAAAV,EAAA,IAAAW,GAAAA,EAAAX,EAAA,IAAA,IAAAa,EAAAb,EAAA,MAAAP,GAAAO,EAAA,MAAAV,EAAAwB,oBAAAd,EAAA,MAAAN,GACRmB,EAAA7B,GAAwB+B,IAAKC,IAC5B,EAAA,EAAA,KAAC,EAAD,CAEO,KAAA,SACI,QAAAvB,IAAmBuB,EAAnB,YAAA,QACC,UAAA,uCACD,YAAMtB,EAAuBsB,CAAG,WAExC1B,EAAIwB,mBAAoBE,EAPpB,EACAA,CADA,CASR,EAAChB,EAAA,IAAAP,EAAAO,EAAA,IAAAV,EAAAwB,mBAAAd,EAAA,IAAAN,EAAAM,EAAA,IAAAa,GAAAA,EAAAb,EAAA,IAAA,IAAAiB,EAAAjB,EAAA,MAAAV,EAAAkB,cAAAR,EAAA,MAAAW,GAAAX,EAAA,MAAAa,GAnBJI,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,uBAA4B,KAAA,QAAoB,aAAAV,WAA/D,CACEI,EAQCE,CAWG,IAAAb,EAAA,IAAAV,EAAAkB,aAAAR,EAAA,IAAAW,EAAAX,EAAA,IAAAa,EAAAb,EAAA,IAAAiB,GAAAA,EAAAjB,EAAA,IArBRE,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,sCAAf,CACEe,EAqBCd,EAAQe,SAAY,GACnB,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,6CAAqC5B,EAAI6B,kBAAwB,CAAA,GAE9E,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,gEACZhB,EAAQY,IAAKK,GAAA,CACZ,IAAAC,EAAavC,GAAoBQ,EAAMe,EAACR,UAAW,EACnD,GAAI,CAACwB,EAAI,OAAS,KAClB,IAAAC,EAAcpC,GACZ,CAAAqC,SAAYlB,EAACmB,gBAAgBC,SAAYC,IAAAA,GAASC,SAAYD,IAAAA,EAAU,EACxEnC,EACAC,CACF,EAAE,OAEA,EAAA,EAAA,MAAA,SAAA,CAEO,KAAA,SACM,UAAAX,EACT,6GACA,gDACA,+IACF,EACS,YAAMe,EAAiBS,EAACR,UAAW,EAChC,aAAA,GAAGP,EAAIwB,mBAAoBT,EAACC,UAAU,KAAMe,EAAIO,iBAT9D,EAWE,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,iCAAyBP,EAAIO,KAAc,CAAA,GAC3D,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,8CAAsCP,EAAIQ,WAAoB,CAAA,GAC9E,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,+DACd,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,wBAAgBP,CAAa,CAAA,CACxC,CAAA,CACA,GAfFjB,EAACR,UAeC,CAAA,CAEZ,CACG,CAAA,CAEJ,IAAAG,EAAA,GAAAP,EAAAO,EAAA,GAAAV,EAAAU,EAAA,GAAAT,EAAAS,EAAA,GAAAN,EAAAM,EAAA,GAAAJ,EAAAI,EAAA,GAAAR,EAAAQ,EAAA,GAAAE,CAAA,MAAAA,EAAAF,EAAA,GAAA,OAxDNE,CAwDM,CC/CV,SAAOkE,GAAAC,EAAA,CAAA,IAAAC,GAAAA,EAAAA,EAAAA,GAAA,EAAA,EAAwB,CAAA5B,IAAAC,YAAAC,sBAAAC,UAAAC,YAAAC,aAAAC,yBAAAC,iCAAAE,mBAAAE,YAAAC,gBAAAC,yBAAAC,oBAAAC,0BAAAC,kCAAAE,eAAAE,WAAAE,SAAAC,WAAAC,WAAAC,YAAAE,EAsBTG,EAAAF,EAAA,KAAA5B,EAAA+B,WAKXD,EAAAF,EAAA,IAFLE,GAAA,EAAA,EAAA,KAAA,KAAA,CAAO,GAAA,mBAA6B,UAAA,mBACjC9B,EAAC+B,UACC,CAAA,EAAAH,EAAA,GAAA5B,EAAA+B,WAAAH,EAAA,GAAAE,GAAA,IAAAE,EAAAJ,EAAA,KAAAK,OAAAC,IAAA,2BAAA,GAGDF,GAAA,EAAA,EAAA,KAAC,EAAD,CAAgB,UAAA,qCAAkD,YAAA,KAAM,cAAA,EAAW,CAAA,EAAGJ,EAAA,GAAAI,GAAAA,EAAAJ,EAAA,GAAA,IAAAO,EAAAP,EAAA,KAAA5B,EAAAoC,WAElFD,EAAAP,EAAA,IAHNO,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,sCAAf,CACEH,GACA,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,qCAA6BhC,EAACoC,UAAgB,CAAA,CACvD,IAAAR,EAAA,GAAA5B,EAAAoC,WAAAR,EAAA,GAAAO,GAAA,IAAAE,EAAAT,EAAA,KAAA5B,EAAAW,UAEkD0B,EAAAT,EAAA,IAAtDS,GAAA,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,2BAAmBrC,EAACW,SAAkB,CAAA,EAAAiB,EAAA,GAAA5B,EAAAW,UAAAiB,EAAA,GAAAS,GAK1C,IAAAC,EAAA,CAAC1B,EACJ2B,EAAC3B,EAAD6B,IAAAA,GAAiBzC,EAACwC,oBAGvBE,EAAA/B,EAAA,wBAAA,iCACAgC,EAAA,CAAC/B,GAAD,gCAAiDgC,EAAAhB,EAAA,KAAAc,GAAAd,EAAA,KAAAe,GAHxCC,EAAA/C,EACT,qGACA6C,EACAC,CACF,EAACf,EAAA,GAAAc,EAAAd,EAAA,GAAAe,EAAAf,EAAA,GAAAgB,GAAAA,EAAAhB,EAAA,GAAA,IAAAiB,EAAAjB,EAAA,MAAAd,GAAAc,EAAA,MAAAf,GAAAe,EAAA,MAAAhB,GACQiC,MAAA,CACFjC,EACAE,EAAkB,EADHD,EAAuB,CAClB,EAC1Be,EAAA,IAAAd,EAAAc,EAAA,IAAAf,EAAAe,EAAA,IAAAhB,EAAAgB,EAAA,IAAAiB,GAAAA,EAAAjB,EAAA,IAAA,IAAAkB,EAAAlB,EAAA,MAAAK,OAAAC,IAAA,2BAAA,GAEDY,GAAA,EAAA,EAAA,KAAA,OAAA,CAAgB,UAAA,2FAA2F,CAAA,EAAGlB,EAAA,IAAAkB,GAAAA,EAAAlB,EAAA,IAAA,IAAAmB,EAAAnB,EAAA,MAAAjB,GAAAiB,EAAA,MAAAiB,GAAAjB,EAAA,MAAAU,GAAAV,EAAA,MAAAW,GAAAX,EAAA,MAAAgB,GAhBhHG,GAAA,EAAA,EAAA,KAAA,SAAA,CACO,KAAA,SACA,KAAA,SACSpC,eAAAA,EACJ,SAAA2B,EACH,MAAAC,EACI,UAAAK,EAKF,QAAAC,WAKTC,CACO,CAAA,EAAAlB,EAAA,IAAAjB,EAAAiB,EAAA,IAAAiB,EAAAjB,EAAA,IAAAU,EAAAV,EAAA,IAAAW,EAAAX,EAAA,IAAAgB,EAAAhB,EAAA,IAAAmB,GAAAA,EAAAnB,EAAA,IAAA,IAAAoB,EAAApB,EAAA,MAAAmB,GAAAnB,EAAA,MAAAS,GAnBXW,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,oDAAf,CACEX,EACAU,CAkBI,IAAAnB,EAAA,IAAAmB,EAAAnB,EAAA,IAAAS,EAAAT,EAAA,IAAAoB,GAAAA,EAAApB,EAAA,IAAA,IAAAqB,EAAArB,EAAA,MAAAoB,GAAApB,EAAA,MAAAO,GAzBRc,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,+KAAf,CACEd,EAIAa,CAqBI,IAAApB,EAAA,IAAAoB,EAAApB,EAAA,IAAAO,EAAAP,EAAA,IAAAqB,GAAAA,EAAArB,EAAA,IAAA,IAAAsB,EAAAtB,EAAA,MAAAb,GAAAa,EAAA,MAAA5B,GAAA4B,EAAA,MAAAxB,GAAAwB,EAAA,MAAAzB,GAAAyB,EAAA,MAAA3B,GAAA2B,EAAA,MAAAL,GAAAK,EAAA,MAAAH,GAAAG,EAAA,MAAAN,GAAAM,EAAA,MAAAV,GAAAU,EAAA,MAAAJ,GAAAI,EAAA,MAAAnB,GAAAmB,EAAA,MAAArB,GAAAqB,EAAA,MAAAR,GAAAQ,EAAA,MAAAZ,GAAAY,EAAA,MAAA1B,GAAA0B,EAAA,MAAAvB,GAAAuB,EAAA,MAAAtB,GAEL4C,EAAA/C,GAAWC,IAAc,GACxB,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,4BAAsC,YAAA,iBACnD,EAAA,EAAA,KAAC,EAAD,CAAmB,UAAA,kCAA+C,YAAA,IAAI,CAAA,CAClE,CAAA,EACJA,IAAc,GAChB,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,+GAAf,EACE,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,6BACb,EAAA,EAAA,KAAC,GAAD,CACQJ,KAAAA,EACKC,YACUC,sBACLI,eAAAA,EACQC,uBAAAA,EACNE,kBAAgB,CAAA,CAEhC,CAAA,GACN,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,gCACb,EAAA,EAAA,KAAC,EAAD,CAAa,KAAA,SAAiB,QAAA,UAAmBc,QAAAA,WAC9CvB,EAACmD,aADG,CAAA,CAGH,CAAA,CACF,KAEN,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,qCACZ9C,EAAU+C,IAAKjC,IACd,EAAA,EAAA,KAAC,GAAD,CAEOA,MACFnB,IACQC,YACUC,sBACIa,0BACQC,kCACnB,aAAAsC,GAAO,KAAKpC,EAAaoC,CAAC,EAC9B,UAAAC,EAAAC,IAAW,KAAKpC,EAASkC,EAAGE,CAAE,EAChClC,SACEE,WACAC,UAAQ,EAXbN,EAAGkC,EAWU,CAErB,CACG,CAAA,EACPzB,EAAA,IAAAb,EAAAa,EAAA,IAAA5B,EAAA4B,EAAA,IAAAxB,EAAAwB,EAAA,IAAAzB,EAAAyB,EAAA,IAAA3B,EAAA2B,EAAA,IAAAL,EAAAK,EAAA,IAAAH,EAAAG,EAAA,IAAAN,EAAAM,EAAA,IAAAV,EAAAU,EAAA,IAAAJ,EAAAI,EAAA,IAAAnB,EAAAmB,EAAA,IAAArB,EAAAqB,EAAA,IAAAR,EAAAQ,EAAA,IAAAZ,EAAAY,EAAA,IAAA1B,EAAA0B,EAAA,IAAAvB,EAAAuB,EAAA,IAAAtB,EAAAsB,EAAA,IAAAsB,GAAAA,EAAAtB,EAAA,IAAA,IAAA6B,EACO,OADP7B,EAAA,MAAAE,GAAAF,EAAA,MAAAqB,GAAArB,EAAA,MAAAsB,GAzEHO,GAAA,EAAA,EAAA,MAAA,UAAA,CAAyB,kBAAA,mBAA6B,UAAA,+BAAtD,CACE3B,EAGAmB,EA4BCC,CA0CO,IAAAtB,EAAA,IAAAE,EAAAF,EAAA,IAAAqB,EAAArB,EAAA,IAAAsB,EAAAtB,EAAA,IAAA6B,GAAAA,EAAA7B,EAAA,IA1EV6B,CA0EU,CClHd,SAAOmB,GAAAC,EAAA,CAAA,IAAAC,GAAAA,EAAAA,EAAAA,GAAA,EAAA,EAAkC,CAAAZ,OAAAC,eAAAC,IAAAC,YAAAC,sBAAAC,iBAAAC,yBAAAE,oBAAAG,EASTG,EAAAF,EAAA,KAAAG,OAAAC,IAAA,2BAAA,GAIxBF,GAAA,EAAA,EAAA,KAAA,EAAA,CAA0B,UAAA,mDAAmD,CAAA,EAAGF,EAAA,GAAAE,GAAAA,EAAAF,EAAA,GAAA,IAAAK,EAAAL,EAAA,KAAAV,EAAAgB,aAOTD,EAAAL,EAAA,IAAjEK,GAAA,EAAA,EAAA,KAAA,EAAA,CAAwB,UAAA,mBAAWf,EAACgB,YAAc,CAAA,EAAeN,EAAA,GAAAV,EAAAgB,aAAAN,EAAA,GAAAK,GAAA,IAAAE,EAAAP,EAAA,KAAAG,OAAAC,IAAA,2BAAA,GAG7DG,GAAA,EAAA,EAAA,KAAC,EAAD,CAAa,UAAA,SAAsB,YAAA,IAAI,CAAA,EAAIP,EAAA,GAAAO,GAAAA,EAAAP,EAAA,GAAA,IAAAQ,EAAAR,EAAA,KAAAV,EAAAmB,MAEhCD,EAAAR,EAAA,IAJfQ,GAAA,EAAA,EAAA,KAAA,EAAA,CAAc,QAAA,aACZ,EAAA,EAAA,KAAC,EAAD,CAAa,KAAA,SAAiB,QAAA,QAAkB,UAAA,sBAAkC,aAAAlB,EAACmB,eACjFF,CADK,CAAA,CAGT,CAAA,EAAeP,EAAA,GAAAV,EAAAmB,MAAAT,EAAA,GAAAQ,GAAA,IAAAE,EAAAV,EAAA,KAAAK,GAAAL,EAAA,KAAAQ,GANjBE,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,iFAAf,CACEL,EACAG,CAKI,IAAAR,EAAA,GAAAK,EAAAL,EAAA,GAAAQ,EAAAR,EAAA,GAAAU,GAAAA,EAAAV,EAAA,GAAA,IAAAW,EAAAX,EAAA,KAAAV,GAAAU,EAAA,MAAAP,GAAAO,EAAA,MAAAT,GAAAS,EAAA,MAAAN,GAAAM,EAAA,MAAAJ,GAAAI,EAAA,MAAAR,GACNmB,GAAA,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,+CACb,EAAA,EAAA,KAAC,GAAD,CACQrB,KAAAA,EACKC,YACUC,sBACLC,iBACQC,yBACNE,kBAAgB,CAAA,CAEhC,CAAA,EAAAI,EAAA,GAAAV,EAAAU,EAAA,IAAAP,EAAAO,EAAA,IAAAT,EAAAS,EAAA,IAAAN,EAAAM,EAAA,IAAAJ,EAAAI,EAAA,IAAAR,EAAAQ,EAAA,IAAAW,GAAAA,EAAAX,EAAA,IAAA,IAAAY,EAAAZ,EAAA,MAAAU,GAAAV,EAAA,MAAAW,GAxBZC,GAAA,EAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CACEV,GACA,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,0FACb,EAAA,EAAA,MAAA,EAAA,CACY,UAAA,uNACO,gBAAAW,YAFnB,CAIEH,EAQAC,CAUF,GACI,CAAA,CACR,CAAA,CAAA,EAAgBX,EAAA,IAAAU,EAAAV,EAAA,IAAAW,EAAAX,EAAA,IAAAY,GAAAA,EAAAZ,EAAA,IAAA,IAAAc,EACJ,OADId,EAAA,MAAAX,GAAAW,EAAA,MAAAZ,GAAAY,EAAA,MAAAY,GA5BlBE,GAAA,EAAA,EAAA,KAAA,EAAA,CAAmB1B,OAAoBC,wBACrCuB,CA4BF,CAAA,EAAcZ,EAAA,IAAAX,EAAAW,EAAA,IAAAZ,EAAAY,EAAA,IAAAY,EAAAZ,EAAA,IAAAc,GAAAA,EAAAd,EAAA,IA7Bdc,CA6Bc,CAxCX,SAAAD,GAAAE,EAAA,CAAA,OAiB6BA,EAACC,eAAgB,CAAC,CCMtD,SAAS2C,IAA8B,CACrC,MAAO,CACLtB,SAAU,GACVC,SAAU,MACVC,UAAW,KACXC,SAAU,GACVC,aAAcd,GACde,YAAa,QACbC,WAAY,GACZC,YAAa,GACbC,kBAAmB,OACnBC,mBAAoB,EACpBC,kBAAmB,OACnBC,YAAa,GACbC,mBAAoB,GACpBC,qBAAsB,GACtBC,UAAW,GACXC,eAAgB,EAClB,CACF,CAEA,SAASQ,GAAYH,EAAkBI,EAA+B,CACpE,OAAQA,EAAOP,KAAf,CACE,IAAK,QACH,MAAO,CAAE,GAAGG,EAAO,GAAGI,EAAON,KAAM,EACrC,IAAK,UACH,OAAOM,EAAOJ,MAChB,IAAK,mBACH,MAAO,CACL,GAAGA,EACHZ,kBAAmBgB,EAAOH,KAC1BZ,mBAAoBe,EAAOH,OAAS,OAASD,EAAMX,mBAAqB,EAAIW,EAAMX,kBACpF,CACJ,CACF,CAEA,SAASgB,GAAmBC,EAA0BC,EAA8C,CAClG,IAAMC,EAAON,GAAiB,EAK9B,GAJAM,EAAK5B,SAAW,GAChB4B,EAAK3B,SAAWyB,EAAM,OAAS,MAC/BE,EAAK1B,UAAYwB,GAAKG,IAAM,KAExB,CAACH,EAEH,MADAE,GAAKd,UAAYa,EAAoB,EAC9BC,EAGTA,EAAKzB,SAAWuB,EAAII,MAAQ,GAC5BF,EAAKxB,aAAgBsB,EAAIK,UAAYC,OAAON,EAAIK,QAAQ,EAAEE,KAAK,GAAA,cAC/D,IAAMC,EAAWjD,GAAgByC,CAAG,EACpCE,EAAKrB,YAAc2B,GAAY,GAC/BN,EAAKlB,kBAAoBgB,EAAIS,eAAiB,OAC9CP,EAAKjB,aACFe,EAAIS,eAAiB,UAAY,YAAcT,EAAIU,SAASH,KAAK,EAC9DP,EAAIU,QAAQH,KAAK,EAAEI,YAAY,EAC/B,GACNT,EAAKf,sBACFa,EAAIS,eAAiB,UAAY,YAAcT,EAAIY,kBAAkBL,KAAK,EACvEP,EAAIY,iBAAiBL,KAAK,EAC1B,GACN,IAAMM,EACJb,EAAIc,SAASC,OAAS,aAAef,EAAIc,QAAQE,OAAOT,KAAK,EAAIP,EAAIc,QAAQE,MAAMT,KAAK,EAAI,GAE9FL,EAAKd,UADUY,EAAIgB,OAAOT,KAAK,GAAKM,GACTZ,EAAoB,EAC/C,IAAMiB,EAAkBlB,EAAImB,UAAUC,UAAY,QAC5CC,GACHrB,EAAIS,eAAiB,UAAY,YAClC,CAACS,IACA,CAAClB,EAAImB,UAAUG,IAAMtB,EAAImB,SAASxB,OAAS,QAG9C,GAFAO,EAAKhB,mBAAqBmC,EAEtBH,EACFhB,EAAKvB,YAAc,QACnBuB,EAAKtB,WAAa,QACb,GAAIoB,EAAImB,UAAYnB,EAAImB,SAASxB,OAAS,QAAUK,EAAImB,SAASG,GACtEpB,EAAKvB,YAAcqB,EAAImB,SAASC,SAAW,WAC3ClB,EAAKtB,WAAaoB,EAAImB,SAASG,IAAM,QAChC,GAAKD,EAYVnB,EAAKvB,YAAc,WACnBuB,EAAKtB,WAAa,OAbQ,CAC1B,IAAM2C,EAAQf,EAASgB,MAAM,GAAG,EAE5BD,EAAMG,QAAU,GAAKD,CADF,WAAY,MAAO,UAAW,OAC5BA,EAAcE,SAASJ,EAAM,EAAE,GACtDrB,EAAKvB,YAAc4C,EAAM,GACzBrB,EAAKtB,WAAa2C,EAAM,GACxBrB,EAAKrB,YAAc0C,EAAMK,MAAM,CAAC,EAAEC,KAAK,GAAG,IAE1C3B,EAAKvB,YAAc,WACnBuB,EAAKtB,WAAa,GAEtB,CAOA,MAFAsB,GAAKpB,kBAAoB,OACzBoB,EAAKnB,mBAAqB,EACnBmB,CACT,CAEA,SAAgB4B,GAAeC,EAK5B,CACD,GAAM,CAAEC,IAAG/B,sBAAqBiC,WAAUC,cAAeJ,EAEnD,CAACK,EAAMC,IAAAA,EAAAA,EAAAA,YAAuBxC,GAAayC,IAAAA,GAAoB1C,EAAgB,EAC/E2C,GAAAA,EAAAA,EAAAA,QAA8B,EAAK,EAEnCC,GAAAA,EAAAA,EAAAA,aACE,IAAIC,IAAI,CAAC,QAAS,GAAGP,EAASQ,IAAKC,GAAMA,EAAEvC,IAAI,CAAC,CAAC,EACvD,CAAC8B,CAAQ,CACX,EAMA,GAJIE,EAAK9D,UAAY8D,EAAK7D,WAAa,OAAS,CAACiE,EAAgBI,IAAIR,EAAKzD,WAAW,GACnF0D,EAAS,CAAE9C,KAAM,QAASC,MAAO,CAAEb,YAAa,OAAQ,CAAE,CAAC,EAGzDyD,EAAK9D,UAAY8D,EAAK7D,WAAa,OAAS,CAACgE,EAAqBM,QAAS,CAC7E,IAAMC,EAAO7C,EAAoB,EAC7B6C,GAAQA,IAASV,EAAKhD,WACxBiD,EAAS,CAAE9C,KAAM,QAASC,MAAO,CAAEJ,UAAW0D,CAAK,CAAE,CAAC,CAE1D,CAEA,IAAMC,EAAyB9E,MACvBT,GAAkB4E,EAAKzD,WAAW,EACxC,CAACyD,EAAKzD,WAAW,EACjB,CACEqE,QAASZ,EAAK9D,UAAY8D,EAAKzD,cAAgB,QAC/CsE,QAAS,CAAA,EACTC,UAAW,CAAA,CACb,CACF,EACMC,EAAiBf,EAAKzD,cAAgB,QAAU,CAAA,EAAKoE,EAAuBK,KAE5EC,GAAAA,EAAAA,EAAAA,aAAuC,CAC3C,IAAMC,EAAM,IAAIb,IAAIN,EAAWO,IAAKa,GAAMA,EAAEpD,EAAE,CAAC,EACzCqD,EAAyB,CAAC,GAAGrB,CAAU,EACvCsB,EAAQrB,EAAKnD,YAAYsB,KAAK,EAAEI,YAAY,EAIlD,OAHI8C,GAAS,CAACH,EAAIV,IAAIa,CAAK,GACzBD,EAAIE,KAAK,CAAEvD,GAAIsD,CAAM,CAAC,EAEjBD,CACT,EAAG,CAACrB,EAAYC,EAAKnD,WAAW,CAAC,EAE3B0E,EACJvB,EAAKzD,cAAgB,UACpByD,EAAKpD,oBAAsB,QAAWoD,EAAKpD,oBAAsB,YAAc,CAACoD,EAAKlD,oBAElF0E,EACJxB,EAAKpD,oBAAsB,QAAWoD,EAAKpD,oBAAsB,YAAc,CAACoD,EAAKlD,mBAEjF2E,EACJC,EAAQ1B,EAAK3D,SAAS8B,KAAK,GAC3BuD,EAAQ1B,EAAK1D,aAAa6B,KAAK,GAC/BuD,EAAQ1B,EAAKvD,YAAY0B,KAAK,IAC7B,CAACoD,GAAqBG,EAAQ1B,EAAKxD,WAAW2B,KAAK,GAEhDwD,GAAAA,EAAAA,EAAAA,aACH/D,GAAkB,CACjBuC,EAAqBM,QAAU,GAC/BR,EAAS,CAAE9C,KAAM,UAAWG,MAAOK,GAAmBC,EAAKC,CAAmB,CAAE,CAAC,CACnF,EACA,CAACA,CAAmB,CACtB,EAEM+D,GAAAA,EAAAA,EAAAA,aAAgCrE,GAA4B,CAChE0C,EAAS,CAAE9C,KAAM,mBAAoBI,MAAK,CAAC,CAC7C,EAAG,CAAA,CAAE,EAECsE,GAAAA,EAAAA,EAAAA,aACHC,GAAgC,CAC/B,IAAMC,EAAMrG,GAAiBoG,CAAU,EACjCE,EAAOD,EAAMtG,GAAoBmE,EAAEqC,KAAMH,CAAU,EAAI5B,IAAAA,GAiB7D,MAhBI,CAAC6B,GAAO,CAACC,EAAa,IAC1B7B,EAAqBM,QAAU,GAC/BR,EAAS,CACP9C,KAAM,UACNG,MAAO,CACL,GAAGE,GAAiB,EACpBtB,SAAU,GACVC,SAAU,MACVE,SAAU2F,EAAKE,MACf5F,aAAcyF,EAAII,gBAClB1F,YAAauF,EAAKI,OAClBxF,kBAAmBmF,EAAIM,qBACvBrF,UAAWa,EAAoB,EAC/BlB,mBAAoB,CACtB,CACF,CAAC,EACM,GACT,EACA,CAACkB,EAAqB+B,EAAEqC,IAAI,CAC9B,EAEMK,GAAAA,EAAAA,EAAAA,iBAA8B,CAClCnC,EAAqBM,QAAU,GAC/BR,EAAS,CAAE9C,KAAM,UAAWG,MAAOE,GAAiB,CAAE,CAAC,CACzD,EAAG,CAAA,CAAE,EAEC+E,GAAAA,EAAAA,EAAAA,cACHC,EAA2BC,EAAoCC,IAAyB,CACvF,IAAMtF,EAA4B,CAAER,kBAAmB4F,CAAO,EAC1DA,IAAW,QACbpF,EAAMN,mBAAqB,GAC3BM,EAAMP,YAAc,GACpBO,EAAML,qBAAuB,IACpByF,IAAW,YAAc,CAACE,IACnCtF,EAAMJ,UAAYyF,EAAqB,GAEzCxC,EAAS,CAAE9C,KAAM,QAASC,OAAM,CAAC,CACnC,EACA,CAAA,CACF,EAEMuF,GAAAA,EAAAA,EAAAA,aAAuCC,GAAc,CACzD3C,EAAS,CACP9C,KAAM,QACNC,MAAO,CACLb,YAAaqG,EACbpG,WAAY,GACZ,GAAIoG,IAAM,QAAU,CAAE9F,mBAAoB,EAAM,EAAI,CAAC,CACvD,CACF,CAAC,CACH,EAAG,CAAA,CAAE,EAEC+F,GAAAA,EAAAA,EAAAA,aAAyC9E,GAAe,CAC5DoC,EAAqBM,QAAU,GAC/BR,EAAS,CAAE9C,KAAM,QAASC,MAAO,CAAEJ,UAAWe,CAAG,CAAE,CAAC,CACtD,EAAG,CAAA,CAAE,EAEC+E,GAAAA,EAAAA,EAAAA,iBAA0C,CAC9C,GAAuB9C,EAAKzD,WAAW,EAAEwG,KAAKpC,EAAuBqC,OAAO,CAC9E,EAAG,CAAChD,EAAKzD,YAAaoE,EAAuBqC,OAAO,CAAC,EAE/CC,GAAAA,EAAAA,EAAAA,aAAyB7F,GAA8B,CAC3D6C,EAAS,CAAE9C,KAAM,QAASC,MAAAA,CAAM,CAAC,CACnC,EAAG,CAAA,CAAE,EAEL,MAAO,CAELlB,SAAU8D,EAAK9D,SACfC,SAAU6D,EAAK7D,SACfC,UAAW4D,EAAK5D,UAChBC,SAAU2D,EAAK3D,SACfC,aAAc0D,EAAK1D,aACnBC,YAAayD,EAAKzD,YAClBC,WAAYwD,EAAKxD,WACjBC,YAAauD,EAAKvD,YAClBC,kBAAmBsD,EAAKtD,kBACxBC,mBAAoBqD,EAAKrD,mBACzBC,kBAAmBoD,EAAKpD,kBACxBC,YAAamD,EAAKnD,YAClBC,mBAAoBkD,EAAKlD,mBACzBC,qBAAsBiD,EAAKjD,qBAC3BC,UAAWgD,EAAKhD,UAChBC,eAAgB+C,EAAK/C,eACrB8D,iBAEAmC,YAAc7G,GAAqB4G,EAAU,CAAE5G,UAAS,CAAC,EACzD8G,gBAAkB7G,GAAyB2G,EAAU,CAAE3G,cAAa,CAAC,EACrE8G,cAAgB5G,GAAuByG,EAAU,CAAEzG,YAAW,CAAC,EAC/D6G,eAAiB5G,GAAwBwG,EAAU,CAAExG,aAAY,CAAC,EAClE6G,eAAiBzG,GAAwBoG,EAAU,CAAEpG,aAAY,CAAC,EAClE0G,sBAAwBzG,GAAgCmG,EAAU,CAAEnG,oBAAmB,CAAC,EACxF0G,wBAA0BzG,GAAiCkG,EAAU,CAAElG,sBAAqB,CAAC,EAC7F0G,kBAAoBxG,GAA4BgG,EAAU,CAAEhG,gBAAe,CAAC,EAE5EwE,YACAF,oBACAC,oBACAP,yBAEAU,WACAW,YACAT,oBACAD,mBACAW,gCACAI,0BACAE,4BACAC,uBACF,CACF,CCjUA,SAAgBkB,GAAiBC,EAAqC,CACpE,GAAM,CAAEC,iBAAkBD,EACpB,CAACE,EAAWC,IAAAA,EAAAA,EAAAA,UAAyB,EAAK,EAC1CC,GAAAA,EAAAA,EAAAA,QAA8C,IAAI,EAClDE,GAAAA,EAAAA,EAAAA,QAA+B,MAAM,EACrCC,GAAAA,EAAAA,EAAAA,QAAsBL,CAAS,EAC/BM,EAAgB,OAAOC,UAAc,KAAe,aAAcA,UAClEC,EAAmBF,GAAiBX,EAAmC,EAEvEc,GAAAA,EAAAA,EAAAA,aAA8B,SAAY,CAC9C,GAAIL,EAAYM,UAAY,WAAY,CACtC,GAAI,CACF,MAAMC,OAAOC,aAAaC,MAAMC,2BAA2B,EAAK,CAClE,MAAQ,CACN,CAEFV,EAAYM,QAAU,OACtB,MACF,CACA,GAAI,CACF,MAAMR,EAAYQ,SAASK,QAAQ,CACrC,MAAQ,CACN,CAEFb,EAAYQ,QAAU,KACtBN,EAAYM,QAAU,MACxB,EAAG,CAAA,CAAE,EAECM,GAAAA,EAAAA,EAAAA,aAA8B,SAAY,CAC9C,IAAMC,EACJ,OAAON,OAAW,IAAcA,OAAOC,aAAaC,MAAMC,yBAA2BI,IAAAA,GACvF,GAAID,EACF,GAAI,CACF,MAAMA,EAAa,EAAI,EACvBb,EAAYM,QAAU,WACtB,MACF,MAAQ,CACNX,EAAc,EACdE,EAAa,EAAK,EAClB,MACF,CAEGK,KACL,GAAI,CACF,IAAMa,EAAW,MAAMZ,UAAUa,SAASC,QAAQ,QAAQ,EAC1DnB,EAAYQ,QAAUS,EACtBf,EAAYM,QAAU,YACtBS,EAASG,iBAAiB,cAAiB,CACzCpB,EAAYQ,QAAU,KACtBN,EAAYM,QAAU,MACxB,CAAC,CACH,MAAQ,CACNX,EAAc,EACdE,EAAa,EAAK,CACpB,CACF,EAAG,CAACF,EAAeO,CAAa,CAAC,EAoBjC,MAlBAD,GAAaK,QAAUV,GAEvBR,EAAAA,EAAAA,eAAgB,CACd,GAAI,CAACQ,EAAW,CACd,EAAqB,EACrB,MACF,CACA,EAAqB,EACrB,IAAMuB,MAAc,CACdC,SAASC,kBAAoB,WAAapB,EAAaK,SAAS,EAAqB,CAC3F,EAEA,OADAc,SAASF,iBAAiB,mBAAoBC,CAAK,MACtC,CACXC,SAASE,oBAAoB,mBAAoBH,CAAK,EACtD,EAAqB,CACvB,CACF,EAAG,CAACvB,EAAWgB,EAAiBP,CAAe,CAAC,EAEzC,CAAET,YAAWC,eAAcO,kBAAiB,CACrD,CCpDA,SAAgB4C,GAAgBC,EAI7B,CACD,GAAM,CAAEC,WAAUC,eAAcC,gBAAiBH,EAE3C,CAACI,EAAMC,IAAAA,EAAAA,EAAAA,UAA+B,CAAA,CAAE,EACxC,CAACC,EAAUC,IAAAA,EAAAA,EAAAA,UAAyC,CAAA,CAAE,EACtD,CAACC,EAAiBC,IAAAA,EAAAA,EAAAA,UAAiF,CAAA,CAAE,EACrG,CAACI,EAAcC,IAAAA,EAAAA,EAAAA,UAA4B,EAAE,EAC7C,CAACC,EAAYC,IAAAA,EAAAA,EAAAA,UAA6C,CAAA,CAAE,EAC5D,CAACC,EAAkBC,IAAAA,EAAAA,EAAAA,UAAyC,IAAI,EAChE,CAACC,EAAYC,IAAAA,EAAAA,EAAAA,UAA+C,CAAA,CAAE,EAC9D,CAACC,EAAmBC,IAAAA,EAAAA,EAAAA,UAAiC,EAAK,EAC1D,CAACC,EAASC,IAAAA,EAAAA,EAAAA,UAAuB,EAAK,EACtC,CAACC,EAAOC,IAAAA,EAAAA,EAAAA,UAAoC,IAAI,EAEhDC,GAAAA,EAAAA,EAAAA,aAAuB,SAAY,CACvCH,EAAW,EAAI,EACfE,EAAS,IAAI,EACb,GAAI,CAEFrB,EAAQuB,MADW5C,GAAS,CAChB,CACd,OAAS6C,EAAG,CACVH,EAASG,aAAaC,MAAQD,EAAEE,QAAU7B,EAAaN,gBAAgB,CACzE,QAAU,CACR4B,EAAW,EAAK,CAClB,CACF,EAAG,CAACtB,EAAaN,gBAAgB,CAAC,EAE5BoC,GAAAA,EAAAA,EAAAA,aAAsB,SAAY,CACtC,GAAI,CACF,GAAM,CAACC,EAAIC,EAAMC,EAAKC,EAASC,GAAiB,MAAMC,QAAQC,IAAI,CAChE1D,GAAY,EACZE,GAAU,EACVD,GAAU,EACVW,EAA8B,EAC9Bf,EAAgB,EAAE8D,UAAY,IAAI,CAAC,CACpC,EACDjC,EAAY0B,CAAE,EACdxB,EAAmByB,CAAI,EACvBpB,EAAgBqB,EAAIM,OAAS,EAAE,EAC/BvB,EAAoBkB,EAAQM,SAASC,QAAU,IAAI,EAC/CN,GAAerB,EAAcqB,EAAcO,KAAK,CACtD,MAAQ,CACN,CAEJ,EAAG,CAAA,CAAE,EAECC,GAAAA,EAAAA,EAAAA,aAAiC,SAAY,CACjDvB,EAAqB,EAAI,EACzB,GAAI,CAEFF,EAAc0B,MADKlE,GAAAA,GAAyC,CAC1C,CACpB,MAAQ,CACN,QACQ,CACR0C,EAAqB,EAAK,CAC5B,CACF,EAAG,CAAA,CAAE,EAmCL,OAjCA/C,EAAAA,EAAAA,eAAgB,CACT0B,IACL,EAAc,EACd,EAAa,EACf,EAAG,CAACA,EAAU0B,EAAUK,CAAO,CAAC,GAEhCzD,EAAAA,EAAAA,eAAgB,CACd,GAAI,CAAC0B,EAAU,OACf,IAAM8C,MAAiB,CACrB,EAAmC,EAAEC,KAAMC,GAAM,CAC/C/B,EAAoB+B,EAAEP,SAASC,QAAU,IAAI,CAC/C,CAAC,CACH,EAEA,OADAO,OAAOC,iBAAiB,gBAAiBJ,CAAQ,MACpCG,OAAOE,oBAAoB,gBAAiBL,CAAQ,CACnE,EAAG,CAAC9C,CAAQ,CAAC,GAEb1B,EAAAA,EAAAA,eAAgB,CACV,CAAC0B,GAAY,CAACE,GAClB,EAAwB,CAC1B,EAAG,CAACF,EAAUE,EAAc0C,CAAkB,CAAC,EAaxC,CACLzC,OACAE,WACAE,kBACAK,eACAE,aACAE,mBACAE,aACAE,oBACAE,UACAE,QACAC,WACA2B,cAAAA,EAAAA,EAAAA,aAvBiCjD,EAAKkD,OAAQC,GAAM,CAACnE,GAAyBmE,CAAC,CAAC,EAAG,CAACnD,CAAI,CAuBxFiD,EACAG,gBAAAA,EAAAA,EAAAA,aAvBmCpD,EAAKkD,OAAQC,GAAMnE,GAAyBmE,CAAC,CAAC,EAAG,CAACnD,CAAI,CAuBzFoD,EACAC,qBAAAA,EAAAA,EAAAA,aAtBwC/D,GAA6BuB,CAAgB,EAAG,CAACA,CAAgB,CAsBzGwC,EACA9B,WACAK,UACAa,qBACAa,YAAAA,EAAAA,EAAAA,iBAxBmC,CACnC,EAAc,EACd,EAAa,EACb,EAAwB,CAC1B,EAAG,CAAC/B,EAAUK,EAASa,CAAkB,CAoBvCa,CACF,CACF,CAEA,SAAgBC,GAAkBC,EAAgBC,EAA0B,CAC1E,IAAMC,EAAO,CAAC,GAAGF,CAAG,EAMpB,OALAE,EAAKD,MAAME,EAAGC,IAAM,CAClB,IAAMC,EAAK,IAAIC,KAAKH,EAAEI,UAAU,EAAEC,QAAQ,EACpCC,EAAK,IAAIH,KAAKF,EAAEG,UAAU,EAAEC,QAAQ,EAC1C,OAAOP,IAAS,eAAiBQ,EAAKJ,EAAKA,EAAKI,CAClD,CAAC,EACMP,CACT,CAEA,SAAgBQ,GACdnD,EACAoD,EACAC,EACAC,EACqB,CACrB,IAAMC,EAAM,IAAIR,KACVS,EACJJ,IAAU,MAAQjF,GAAgBoF,CAAG,EAAIH,IAAU,OAAS/E,GAAuBkF,CAAG,EAAInF,GAAkBmF,CAAG,EACjH,OAAOvD,EAAWmC,OAAQsB,GAGxB,EAFI,IAAIV,KAAKU,EAAIC,SAAS,EAAIF,GAC1BH,GAAaI,EAAIE,QAAUN,GAC3BC,GAAgBG,EAAIG,SAAWN,EAEpC,CACH,CClHA,IAAM8D,GAAgC,CACpCZ,QAAS,UACTC,QAAS,eACTC,aAAc,MACdC,iBAAkB,GAClBC,oBAAqB,GACrBC,WAAY,GACZC,UAAW,KACXC,cAAe,CAAA,EACfC,cAAe,GACfC,YAAa,GACbC,mBAAoB,GACpBC,uBAAwB,KAC1B,EAEA,SAAgBE,IAAW,CACzB,IAAMC,EAAWlB,EAAgBmB,GAAMA,EAAED,QAAQ,EAC3CE,EAAIvB,EAASqB,CAAQ,EACrBG,EAAID,EAAEE,KACNC,EAAQH,EAAEI,KAEVG,EAAWC,EADH7B,EAAiB2B,GAAOA,EAAGD,KAChBA,EAEnBM,EADgB7B,EAAeiB,GAAMA,EAAEW,QAC9BD,IAAkB,OAC3BG,EAAYd,IAAa,KAAO,QAAU,QAE1C,CAACe,EAAIC,IAAAA,EAAAA,EAAAA,YAAuBnE,EAA4BiD,EAAiB,EACzE,CACJZ,UACAC,UACAC,eACAC,mBACAC,sBACAC,aACAC,YACAC,gBACAC,gBACAC,cACAC,qBACAC,0BACEkB,EAEEE,EAAOzC,GAAgB,CAC3BiC,WACAS,aAAc,CAAEC,iBAAkBhB,EAAEgB,gBAAiB,EACrDC,aAAclC,IAAY,SAC5B,CAAC,EACK,CAAEmC,YAAaJ,EAEfK,EAAgBjD,GAAiB,CAAEkD,kBAAqBF,EAASlB,EAAEqB,mBAAmB,CAAE,CAAC,EAEzFC,GAAAA,EAAAA,EAAAA,iBACER,EAAKS,eAAiBT,EAAKU,gBAAgBC,OAAS,EAAIX,EAAKU,gBAAgB,GAAGE,GAAK,IAC3F,CAACZ,EAAKS,aAAcT,EAAKU,eAAe,CAC1C,EAEMG,EAAO1D,GAAe,CAC1B8B,IACAuB,sBACAM,SAAUd,EAAKc,SACfC,WAAYf,EAAKe,UACnB,CAAC,EAEKC,GAAAA,EAAAA,EAAAA,QAAmD,IAAI,EACvDC,GAAAA,EAAAA,EAAAA,QAAwC,IAAI,EAE5CC,GAAAA,EAAAA,EAAAA,cAA2BC,EAA0BC,IAAkB,CAC3EJ,EAAiBK,QAAUF,EAC3BF,EAAgBI,QAAUD,EAC1BrB,EAAS,CAAEuB,KAAM,QAASC,MAAO,CAAE7C,YAAa,EAAK,CAAE,CAAC,CAC1D,EAAG,CAAA,CAAE,EAEC8C,GAAAA,EAAAA,EAAAA,iBAAmC,CACvCzB,EAAS,CAAEuB,KAAM,QAASC,MAAO,CAAE7C,YAAa,EAAM,CAAE,CAAC,EACzDuC,EAAgBI,QAAU,KAC1BL,EAAiBK,QAAU,IAC7B,EAAG,CAAA,CAAE,EAECI,GAAAA,EAAAA,EAAAA,QAAgD,IAAI,EAEpDC,GAAAA,EAAAA,EAAAA,aAA+CN,GAAkB,CACrEK,EAAwBJ,QAAUD,EAClCO,OAAOC,eAAiB,CAClBH,EAAwBJ,UAAYD,IACtCK,EAAwBJ,QAAU,KAEtC,EAAG,GAAG,CACR,EAAG,CAAA,CAAE,EAECQ,GAAAA,EAAAA,EAAAA,aACHC,GAAuB,CACXjB,EAAKmB,kBAAkBF,CAC9BC,GAAIhC,EAAS,CAAEuB,KAAM,QAASC,MAAO,CAAE5C,mBAAoB,EAAM,CAAE,CAAC,CAC1E,EACA,CAACkC,CAAI,CACP,EAEMoB,EAAa,SAAY,CAC7B,GAAI,CAACpB,EAAKqB,SAASC,KAAK,EAAG,CACzB/B,EAASlB,EAAEkD,YAAY,EACvB,MACF,CACA,GAAI,CAACvB,EAAKwB,aAAaF,KAAK,GAAK,CAACtB,EAAKyB,YAAYH,KAAK,EAAG,CACzD/B,EAASlB,EAAEqD,gBAAgB,EAC3B,MACF,CACA,GAAI1B,EAAK2B,mBAAqB,CAAC3B,EAAK4B,WAAWN,KAAK,EAAG,CACrD/B,EAASlB,EAAEwD,cAAc,EACzB,MACF,CAEA7B,EAAK8B,kBAAkB,EAAI,EAC3BvC,EAAS,IAAI,EACb,GAAI,CACF,IAAMwC,EAAU/B,EAAKyB,YAAYH,KAAK,EAClCU,EACJ,AAKEA,EALEhC,EAAKiC,oBAAsB,YAAcjC,EAAKkC,mBACrC,CAAEC,KAAM,MAAO,EACjBnC,EAAKoC,cAAgB,QACnB,CAAED,KAAM,SAAUE,QAAS,OAAQ,EAEnC,CAAEF,KAAM,SAAUE,QAASrC,EAAKoC,YAAaE,GAAItC,EAAK4B,WAAWN,KAAK,CAAE,EAGrF,IAAMiB,EACJvC,EAAKiC,oBAAsB,WACvB,CACEO,KAAM,YACNT,UACA,GAAI/B,EAAKyC,UAAUnB,KAAK,EAAI,CAAEoB,MAAO1C,EAAKyC,UAAUnB,KAAK,CAAE,EAAI,CAAC,CAClE,EACA,CAAEkB,KAAM,cAAeG,KAAMZ,CAAQ,EAErCa,EAAe5C,EAAKyC,UAAUnB,KAAK,EACnCuB,EAAc7C,EAAK8C,YAAYxB,KAAK,EAAEyB,YAAY,EAClDC,EAAiBhD,EAAKiC,oBAAsB,OAAS,KAAOY,GAAe,KAC3EI,EAASjD,EAAKkD,qBAAqB5B,KAAK,EACxC6B,EAAU,CACdC,KAAMpD,EAAKqB,SAASC,KAAK,EACzB+B,SAAUrD,EAAKwB,aAAaF,KAAK,EACjCgC,cAAetD,EAAKiC,kBACpBS,MAAO1C,EAAKiC,oBAAsB,YAAcW,EAAeA,EAAeW,IAAAA,GAC9EvB,WACAO,UACA,GAAIvC,EAAKwD,WAAa,OAClB,CACEC,QAAST,EACTU,iBAAkB1D,EAAKiC,oBAAsB,YAAagB,GAAiB,IAC7E,EACA,CACE,GAAIjD,EAAKiC,oBAAsB,YAAcY,EAAc,CAAEY,QAASZ,CAAY,EAAI,CAAC,EACvF,GAAI7C,EAAKiC,oBAAsB,YAAcgB,EAAS,CAAES,iBAAkBT,CAAO,EAAI,CAAC,CACxF,CACN,EAEA,GAAIjD,EAAKwD,WAAa,QAAUxD,EAAK2D,UACnC,MAAMpI,GAAUyE,EAAK2D,UAAWR,CAAO,MAClC,CACL,GAAM,CAAEE,SAAUO,EAAOH,UAASC,mBAAkB,GAAGG,GAASV,EAChE,MAAMlI,GAAO2I,EAAO,CAClB,GAAGC,EACH,GAAIJ,GAAW,KAAqB,CAAC,EAAf,CAAEA,SAAQ,EAChC,GAAIC,EAAmB,CAAEA,kBAAiB,EAAI,CAAC,CACjD,CAAC,CACH,CACA1D,EAAK8D,UAAU,EACf,MAAM3E,EAAK4E,SAAS,EACpB,MAAM5E,EAAK6E,QAAQ,CACrB,OAASC,EAAG,CACV1E,EACE0E,aAAaC,MACTD,EAAElC,QACF/B,EAAKwD,WAAa,OAChBnF,EAAE8F,kBACF9F,EAAE+F,iBACV,CACF,QAAU,CACRpE,EAAK8B,kBAAkB,EAAK,CAC9B,CACF,EAEMuC,EAAa,KAAOC,IAAiB,CACzCpF,EAAS,CACPuB,KAAM,QACNC,MAAO,CAAEjD,WAAY,GAAMC,UAAW4G,EAAK1G,cAAe,GAAMD,cAAe,CAAA,CAAG,CACpF,CAAC,EACD,GAAI,CACF,IAAM4G,EAAO,MAAMpJ,GAAOmJ,EAAIvE,EAAE,EAC5BwE,GACFrF,EAAS,CACPuB,KAAM,QACNC,MAAO,CAAEhD,UAAW6G,EAAM5G,cAAe,MAAMzC,GAAWoJ,EAAIvE,GAAI,EAAE,CAAE,CACxE,CAAC,CAEL,MAAQ,CACN,QACQ,CACRb,EAAS,CAAEuB,KAAM,QAASC,MAAO,CAAE9C,cAAe,EAAM,CAAE,CAAC,CAC7D,CACF,EAEM4G,GAAAA,EAAAA,EAAAA,iBAAgC,CACpCtF,EAAS,CAAEuB,KAAM,QAASC,MAAO,CAAEjD,WAAY,GAAOC,UAAW,IAAK,CAAE,CAAC,CAC3E,EAAG,CAAA,CAAE,EAEC+G,GAAAA,EAAAA,EAAAA,iBAAuC,CAC3CvF,EAAS,CAAEuB,KAAM,QAASC,MAAO,CAAE3C,uBAAwB,MAAOD,mBAAoB,EAAK,CAAE,CAAC,CAChG,EAAG,CAAA,CAAE,EAEC4G,EAAW,MAAOJ,EAAcK,IAAqB,CACzD,GAAI,CACF,MAAMrJ,GAAUgJ,EAAIvE,GAAI4E,CAAO,EAC/B,MAAMC,QAAQC,IAAI,CAAC1F,EAAK4E,SAAS,EAAG5E,EAAK6E,QAAQ,CAAC,CAAC,CACrD,OAASC,EAAG,CACV1E,EAAS0E,aAAaC,MAAQD,EAAElC,QAAU1D,EAAEyG,iBAAiB,CAC/D,CACF,EAEMC,EAAa,SAAY,CAC7B,IAAMhF,EAAKK,EAAgBI,QACrBF,EAASH,EAAiBK,QAC5B,MAACT,GAAM,CAACO,GACZK,GAAe,EACf,GAAI,CACEL,IAAW,MACb,MAAMjF,GAAO0E,CAAE,GAEf,MAAM3E,GAAU2E,CAAE,EACdrC,GAAWqC,KAAOA,GACpBb,EAAS,CAAEuB,KAAM,QAASC,MAAO,CAAEjD,WAAY,GAAOC,UAAW,IAAK,CAAE,CAAC,GAG7E,MAAMkH,QAAQC,IAAI,CAAC1F,EAAK4E,SAAS,EAAG5E,EAAK6E,QAAQ,EAAG7E,EAAK6F,mBAAmB,CAAC,CAAC,CAChF,OAASf,EAAG,CACV1E,EAAS0E,aAAaC,MAAQD,EAAElC,QAAU1D,EAAE4G,YAAY,CAC1D,CAbe,CAcjB,GAEAvK,EAAAA,EAAAA,eAAgB,CACd,IAAMwK,EAASjB,GAAqB,CAC9BA,EAAEmB,MAAQ,WACVpF,EAAKqF,SAAUrF,EAAK8D,UAAU,EACzBrG,GACPyB,EAAS,CAAEuB,KAAM,QAASC,MAAO,CAAEjD,WAAY,GAAOC,UAAW,IAAK,CAAE,CAAC,EAE7E,EAEA,OADA4H,SAASC,iBAAiB,UAAWL,CAAK,MAC7BI,SAASE,oBAAoB,UAAWN,CAAK,CAC5D,EAAG,CAAClF,EAAMvC,CAAU,CAAC,EAErB,IAAMgI,GAAAA,EAAAA,EAAAA,cACG,CACLC,QAASrH,EAAEsH,kBACXC,QAASvH,EAAEwH,kBACXC,OAAQzH,EAAE0H,iBACVC,UAAW3H,EAAE4H,mBACf,GACA,CAAC5H,EAAE4H,oBAAqB5H,EAAE0H,iBAAkB1H,EAAEsH,kBAAmBtH,EAAEwH,iBAAiB,CACtF,EAEMK,GAAAA,EAAAA,EAAAA,aAA+BzJ,GAAkB0C,EAAKgH,aAAc9I,CAAO,EAAG,CAAC8B,EAAKgH,aAAc9I,CAAO,CAAC,EAC1G+I,GAAAA,EAAAA,EAAAA,aAAiC3J,GAAkB0C,EAAKkH,eAAgBhJ,CAAO,EAAG,CAAC8B,EAAKkH,eAAgBhJ,CAAO,CAAC,EAEhHiJ,GAAAA,EAAAA,EAAAA,aACE9J,GAAiB2C,EAAKoH,WAAYjJ,EAAcC,EAAkBC,CAAmB,EAC3F,CAAC2B,EAAKoH,WAAYjJ,EAAcC,EAAkBC,CAAmB,CACvE,EAEMgJ,EAAsBnI,EAAEoI,cACxB,CAAEC,YAAa1L,EAAY,EAC3B2L,GAAkBD,EAASE,WAAW,YAAY,EAqBxD,OAnBKjI,GAoBH,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,GAAD,CACYA,WACPN,IACH,QAASc,EAAK0H,QACd,kBAAmB1H,EAAK2H,kBACxB,UAAW3H,EAAK4H,WAChB,qBAAsBtC,EACtB,aAAgBzE,EAAKgH,SAAS,CAAE,CAAA,GAElC,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,iEAAf,EACA,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+EAAf,CACG7H,EAAK+H,OACJ,EAAA,EAAA,KAAC,MAAD,CACE,UAAU,wIACV,KAAK,iBAEJ/H,EAAK+H,KACH,CAAA,EACH,MAEJ,EAAA,EAAA,KAAC,SAAD,CAAQ,UAAU,gCAChB,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mBAAf,EACE,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,wDAAgD7I,EAAE8I,KAAU,CAAA,GAC1E,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,gDAAwC9I,EAAE+I,QAAY,CAAA,CAChE,GACC,CAAA,EAEPT,IACC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,mHACb,EAAA,EAAA,KAAC,GAAD,CACKtI,IACH,QAASc,EAAK0H,QACd,kBAAmB1H,EAAK2H,kBACxB,UAAW3H,EAAK4H,WAChB,qBAAsBtC,EACtB,aAAgBzE,EAAKgH,SAAS,CAAE,CAAA,CAE/B,CAAA,EACH,MAEJ,EAAA,EAAA,KAAC,GAAD,CACK3I,IACMjB,UACT,gBAAkBiK,GAAQnI,EAAS,CAAEuB,KAAM,QAASC,MAAO,CAAEtD,QAASiK,CAAI,CAAE,CAAC,EACpEhK,UACT,gBAAkBiK,GAASpI,EAAS,CAAEuB,KAAM,QAASC,MAAO,CAAErD,QAASiK,CAAK,CAAE,CAAC,EACjEhK,eACd,qBAAuBiK,GAAUrI,EAAS,CAAEuB,KAAM,QAASC,MAAO,CAAEpD,aAAciK,CAAM,CAAE,CAAC,EACzEhK,mBAClB,yBAA2BiK,GACzBtI,EAAS,CAAEuB,KAAM,QAASC,MAAO,CAAEnD,iBAAkBiK,CAAO,CAAE,CAAC,EAE5ChK,sBACrB,4BAA8BgK,GAC5BtI,EAAS,CAAEuB,KAAM,QAASC,MAAO,CAAElD,oBAAqBgK,CAAO,CAAE,CAAC,EAEpE,KAAMrI,EAAKsI,IAAK,CAAA,EAGjBrK,IAAY,WACX,EAAA,EAAA,KAAC,GAAD,CACKiB,IACQW,YACUwH,sBACrB,QAASrH,EAAK0H,QACd,UAAW1H,EAAKgH,aAAarG,OAC7B,WAAYoG,EACYnI,yBACxB,+BAAiCyJ,GAC/BtI,EAAS,CAAEuB,KAAM,QAASC,MAAO,CAAE3C,uBAAwByJ,CAAO,CAAE,CAAC,EAErDxG,mBAClB,UAAWxB,EAAckI,UACzB,cAAelI,EAAcmI,iBAC7B,2BAA8BpI,EAASlB,EAAEqB,mBAAmB,EAC5D,sBAAyBF,EAAcoI,aAAcC,GAAM,CAACA,CAAC,EACpCjH,0BACQC,kCACjC,aAAeiH,GAAM,KAAKzD,EAAWyD,CAAC,EACtC,UAAWA,EAAGC,IAAO,KAAKrD,EAASoD,EAAGC,CAAE,EACxC,OAASD,GAAM9H,EAAKgH,SAASc,CAAC,EAC9B,aAAgB9H,EAAKgH,SAAS,EAC9B,SAAWc,GAAMzH,EAAY,MAAOyH,EAAE/H,EAAE,EACxC,SAAW+H,GAAMzH,EAAY,SAAUyH,EAAE/H,EAAE,CAAE,CAAA,EAE7C3C,IAAY,eACd,EAAA,EAAA,KAAC,GAAD,CACKiB,IACOH,WACCc,YACUwH,sBACrB,QAASrH,EAAK0H,QACIT,mBAClB,UAAWjH,EAAK6I,oBAChB,UAAWxI,EAAckI,UACzB,cAAelI,EAAcmI,iBAC7B,2BAA8BpI,EAASlB,EAAEqB,mBAAmB,EAC5D,sBAAyBF,EAAcoI,aAAcC,GAAM,CAACA,CAAC,EACpCjH,0BACQC,kCACjC,aAAeiH,GAAM,KAAKzD,EAAWyD,CAAC,EACtC,UAAWA,EAAGC,IAAO,KAAKrD,EAASoD,EAAGC,CAAE,EACxC,OAASD,GAAM9H,EAAKgH,SAASc,CAAC,EAC9B,SAAWA,GAAMzH,EAAY,MAAOyH,EAAE/H,EAAE,EACxC,SAAW+H,GAAMzH,EAAY,SAAUyH,EAAE/H,EAAE,CAAE,CAAA,GAG/C,EAAA,EAAA,KAAC,GAAD,CACK1B,IACH,kBAAmBc,EAAK2H,kBACxB,WAAY3H,EAAKoH,WACGD,qBACpB,KAAMnH,EAAKsI,KACX,qBAAwB,KAAKtI,EAAK6F,mBAAmB,EACrD,gBAAkB8C,GAAM,KAAKzD,EAAWyD,CAAC,EAC3BrC,cAAa,CAAA,CAG5B,KAEL,EAAA,EAAA,KAAC,GAAD,CACE,KAAMzF,EAAKqF,SACX,eAAgBrF,EAAK8D,UAClBzF,IACIE,QACP,eAAgBH,EAAE6J,eACVlJ,SACR,SAAUI,EAAKc,SACf,eAAgBD,EAAKkI,eACrB,uBAAwBlI,EAAKmI,uBAC7B,qBAAsBxI,EACtB,SAAUK,EAAKwD,SACf,UAAWxD,EAAK2D,UAChB,SAAU3D,EAAKqB,SACf,iBAAkBrB,EAAKoI,YACvB,aAAcpI,EAAKwB,aACnB,qBAAsBxB,EAAKqI,gBAC3B,eAAgBrI,EAAKsI,eACrB,kBAAmBtI,EAAKiC,kBACxB,0BAA2BjC,EAAKuI,8BAChC,mBAAoBvI,EAAKkC,mBACzB,2BAA4BlC,EAAKwI,sBACjC,UAAWxI,EAAKyC,UAChB,sBAAuBzC,EAAKyI,0BAC5B,YAAazI,EAAK8C,YAClB,oBAAqB9C,EAAK0I,eAC1B,qBAAsB1I,EAAKkD,qBAC3B,6BAA8BlD,EAAK2I,wBACnC,YAAa3I,EAAKoC,YAClB,oBAAqBpC,EAAK4I,wBAC1B,WAAY5I,EAAK4B,WACjB,mBAAoB5B,EAAK6I,cACzB,YAAa7I,EAAKyB,YAClB,oBAAqBzB,EAAK8I,eAC1B,kBAAmB9I,EAAK+I,kBACxB,mBAAoB/I,EAAKgJ,iBACzB,mBAAoBhJ,EAAKiJ,mBACzB,kBAAmBjJ,EAAK2B,kBACxB,kBAAmB3B,EAAKkJ,kBACxB,UAAWlJ,EAAKmJ,UAChB,aAAgB,KAAK/H,EAAW,EAChC,oBAAqBpB,EAAKoJ,qBAAsB,CAAA,GAGlD,EAAA,EAAA,KAAC,GAAD,CACE,KAAMtL,EACN,aAAeuL,GAAa,CAC1BnK,EAAS,CACPuB,KAAM,QACNC,MAAO,CACL5C,mBAAoBuL,EACpB,GAAIA,EAAW,CAAEtL,uBAAwB,KAAe,EAAI,CAAC,CAC/D,CACF,CAAC,CACH,EACGM,IACQW,YACUwH,sBACrB,eAAgBzI,EAChB,uBAAyByJ,GACvBtI,EAAS,CAAEuB,KAAM,QAASC,MAAO,CAAE3C,uBAAwByJ,CAAO,CAAE,CAAC,EAErDxG,kBAAiB,CAAA,GAGrC,EAAA,EAAA,KAAC,GAAD,CACE,KAAMvD,EACN,UAAW+G,EACA9G,YACIE,gBACAD,gBACZU,IACH,qBAAsBE,EAAMmF,iBAAiB6F,OAC/B9D,cAAa,CAAA,GAG7B,EAAA,EAAA,KAAC,GAAD,CACE,KAAM5H,EACN,aAAe2L,GAAStK,EAAS,CAAEuB,KAAM,QAASC,MAAO,CAAE7C,YAAa2L,CAAK,CAAE,CAAC,EAChF,OAAQrJ,EAAiBK,QACtBnC,IACH,UAAWsC,EACX,UAAWoE,CAAW,CAAA,CAErB,GACL,CAAA,CAAA,GAhOE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,GAAD,CACYpG,WACPN,IACH,QAASc,EAAK0H,QACd,kBAAmB1H,EAAK2H,kBACxB,UAAW3H,EAAK4H,WAChB,qBAAsBtC,EACtB,aAAgBzE,EAAKgH,SAAS,CAAE,CAAA,GAElC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,8FACZ3I,EAAE4I,SACA,CAAA,CACP,CAAA,CAAA,CAqNN,CAEA,SAAAwC,GAAAC,EAAA,CAAA,IAAAC,GAAAA,EAAAA,EAAAA,GAAA,EAAA,EAAoC,CAAAhL,WAAAN,IAAAwI,UAAAC,oBAAA+C,YAAAC,uBAAAC,YAAAL,EAiBlC,CAAAhD,YAAqB1L,EAAY,EAAEgP,EAAAL,EAAA,KAAAjD,EACsBsD,EAAAL,EAAA,IAAjCK,EAAAtD,EAAQE,WAAY,YAAY,EAAC+C,EAAA,GAAAjD,EAAAiD,EAAA,GAAAK,GAAzD,IAAArD,EAAwBqD,EACxBC,EAAsBhN,EAAmBiN,EAAsB,EAC/DC,EAAwBlN,EAAmBmN,EAAwB,EAAEC,EAAAV,EAAA,KAAAtL,GAAAsL,EAAA,KAAA9C,GAAA8C,EAAA,KAAAI,GAAAJ,EAAA,KAAAG,GAAAH,EAAA,KAAAE,GAAAF,EAAA,KAAA7C,GAIjEuD,GAAA,EAAA,EAAA,KAAC,GAAD,CACKhM,IACMwI,UACUC,oBACR+C,YACWC,uBACZC,UAAQ,CAAA,EAClBJ,EAAA,GAAAtL,EAAAsL,EAAA,GAAA9C,EAAA8C,EAAA,GAAAI,EAAAJ,EAAA,GAAAG,EAAAH,EAAA,GAAAE,EAAAF,EAAA,GAAA7C,EAAA6C,EAAA,GAAAU,GAAAA,EAAAV,EAAA,GATN,IAAAW,EAEID,EAUFE,EAAAC,EAa4E,OAb5Eb,EAAA,KAAAQ,GAAAR,EAAA,MAAAW,GAAAX,EAAA,MAAAhL,GAAAgL,EAAA,MAAAhD,GAAAgD,EAAA,MAAAM,GAEcM,MACV,CAAC5L,GAADgI,GACFwD,EAAgB,MACHA,EAAgB,IAE/BF,EAAc,CAAAQ,WACA,KAAIC,KACV,KAAIC,IACLL,CACP,CAAC,MACYH,EAAgB,GAC5BK,EAAA,CAACL,EAAiBG,EAAe3L,EAAUgI,EAAiBsD,CAAa,EAACN,EAAA,GAAAQ,EAAAR,EAAA,IAAAW,EAAAX,EAAA,IAAAhL,EAAAgL,EAAA,IAAAhD,EAAAgD,EAAA,IAAAM,EAAAN,EAAA,IAAAY,EAAAZ,EAAA,IAAAa,IAAAD,EAAAZ,EAAA,IAAAa,EAAAb,EAAA,MAX7EhP,EAAAA,EAAAA,iBAAgB4P,EAWbC,CAA0E,EAEtE,IAAI,CAjDb,SAAAJ,GAAAQ,EAAA,CAAA,OAoBoDzM,EAACgM,eAAgB,CApBrE,SAAAD,GAAA/L,EAAA,CAAA,OAmBkDA,EAAC8L,aAAc"}
|