agentworkshop 0.7.7 → 0.7.8

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.
Files changed (128) hide show
  1. package/.AgentWorkShop/prompts/host-tools.json +1 -1
  2. package/.output/.AgentWorkShop/prompts/host-tools.json +1 -1
  3. package/.output/nitro.json +1 -1
  4. package/.output/public/_nuxt/{CQiKcuoG.js → Dc46i75T.js} +3 -3
  5. package/.output/public/_nuxt/R_Wv_Nd9.js +1 -0
  6. package/.output/public/_nuxt/builds/latest.json +1 -1
  7. package/.output/public/_nuxt/builds/meta/e5bb1803-86d9-43b3-85be-dc787dc9a978.json +1 -0
  8. package/.output/public/_nuxt/{entry.DvlXlPwx.css → entry.5qf6EqfN.css} +1 -1
  9. package/.output/public/_nuxt/workshop.3kAcLB_M.css +1 -0
  10. package/.output/server/chunks/_/nitro.mjs +2468 -2407
  11. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  12. package/.output/server/chunks/build/TownView-B5KifIaT.mjs +1 -1
  13. package/.output/server/chunks/build/_id_-C-ewLgfl.mjs +1 -1
  14. package/.output/server/chunks/build/_id_-Ct4Jhvl1.mjs +1 -1
  15. package/.output/server/chunks/build/daq-D9RA_uze.mjs +1 -1
  16. package/.output/server/chunks/build/dcw-BTM5YU-B.mjs +1 -1
  17. package/.output/server/chunks/build/useDaqStream-hwkhJHFU.mjs +1 -1
  18. package/.output/server/chunks/build/useDcwStream-Bdew_yrr.mjs +1 -1
  19. package/.output/server/chunks/build/{workshop-iCzNRifn.mjs → workshop-D5CQj2A8.mjs} +45 -39
  20. package/.output/server/chunks/build/workshop-D5CQj2A8.mjs.map +1 -0
  21. package/.output/server/chunks/routes/api/users/setup-status.get.mjs +25 -0
  22. package/.output/server/chunks/routes/api/users/setup-status.get.mjs.map +1 -0
  23. package/.output/server/chunks/routes/api/workshop/caller.mjs +1 -1
  24. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +1 -1
  25. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +1 -1
  26. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +3 -2
  27. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs.map +1 -1
  28. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +1 -1
  29. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +1 -1
  30. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +1 -1
  31. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +1 -1
  32. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +1 -1
  33. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +1 -1
  34. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +1 -1
  35. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +1 -1
  36. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +1 -1
  37. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +1 -1
  38. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +1 -1
  39. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +1 -1
  40. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +1 -1
  41. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +1 -1
  42. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +1 -1
  43. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +1 -1
  44. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +1 -1
  45. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +1 -1
  46. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +1 -1
  47. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +1 -1
  48. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +1 -1
  49. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +1 -1
  50. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +1 -1
  51. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +1 -1
  52. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +1 -1
  53. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +1 -1
  54. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +1 -1
  55. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +1 -1
  56. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +1 -1
  57. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +1 -1
  58. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +1 -1
  59. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +1 -1
  60. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +1 -1
  61. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +1 -1
  62. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +1 -1
  63. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +1 -1
  64. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +1 -1
  65. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +1 -1
  66. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -1
  67. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -1
  68. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +1 -1
  69. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +1 -1
  70. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +1 -1
  71. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +1 -1
  72. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +1 -1
  73. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +1 -1
  74. package/.output/server/chunks/routes/api/workshop/index4.get.mjs +1 -1
  75. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +1 -1
  76. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +1 -1
  77. package/.output/server/chunks/routes/api/workshop/index6.post.mjs +1 -1
  78. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -1
  79. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -1
  80. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -1
  81. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -1
  82. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +1 -1
  83. package/.output/server/chunks/routes/renderer.mjs +2 -2
  84. package/.output/server/chunks/virtual/entry.mjs +10 -2
  85. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  86. package/.output/server/package.json +1 -1
  87. package/README-zh.md +27 -7
  88. package/README.md +455 -435
  89. package/app/pages/workshop/index.vue +25 -6
  90. package/config.yml +11 -1
  91. package/i18n/dicts/settings.json +4 -0
  92. package/i18n/locales/en.ts +4 -0
  93. package/i18n/locales/zh-CN.ts +4 -0
  94. package/package.json +1 -1
  95. package/scripts/_dbg-codex-handshake.ts +30 -0
  96. package/scripts/_dbg-codex-sandbox.ts +58 -0
  97. package/scripts/_dbg-codex-turn.ts +65 -0
  98. package/scripts/_dbg-interval-config.mjs +145 -0
  99. package/scripts/_dbg-setup-e2e.mjs +88 -0
  100. package/scripts/e2e-harness-provider-task.mjs +126 -0
  101. package/server/api/users/setup-status.get.ts +8 -0
  102. package/server/api/workshop/daq/[id]/samples.get.ts +4 -2
  103. package/server/data/daqs.json +97 -45
  104. package/server/data/dcw-lines.json +7 -0
  105. package/server/data/dcw-products.json +21 -0
  106. package/server/data/dcw-recipes.json +84 -0
  107. package/server/data/dcw-rollback.json +39 -6
  108. package/server/data/dcw-runs.json +81 -75
  109. package/server/data/dcw-writes.json +36 -0
  110. package/server/data/dcws.json +374 -299
  111. package/server/data/line-runs.json +6 -6
  112. package/server/plugins/security.ts +46 -50
  113. package/server/repositories/user.repository.ts +384 -414
  114. package/server/services/system-config.ts +2 -0
  115. package/server/services/user.service.ts +8 -3
  116. package/server/services/workshop/agents/adapters/line-spawn.ts +6 -3
  117. package/server/services/workshop/agents/host-tool-bridge.ts +21 -1
  118. package/server/services/workshop/agents/industrial-tools.ts +5 -3
  119. package/server/services/workshop/daq/daq-controller.ts +34 -6
  120. package/server/services/workshop/daq/daq-node.ts +3 -3
  121. package/server/services/workshop/daq/daq-runtime.ts +4 -3
  122. package/server/services/workshop/dcw/dcw-controller.ts +4 -2
  123. package/server/services/workshop/settings.ts +23 -0
  124. package/shared/config/schema.json +4 -0
  125. package/.output/public/_nuxt/C-GarxYC.js +0 -1
  126. package/.output/public/_nuxt/builds/meta/14df171d-89cb-43ec-ad6f-9df72d6da7f5.json +0 -1
  127. package/.output/public/_nuxt/workshop.B98sHiJq.css +0 -1
  128. package/.output/server/chunks/build/workshop-iCzNRifn.mjs.map +0 -1
@@ -222,6 +222,8 @@ export class SystemConfigService {
222
222
  }
223
223
  this.overrides = validated
224
224
  this.recompute()
225
+ // 运行语义设置读取层(settings.ts effective 3s TTL)即时失效:live 键热重载零延迟
226
+ void import('./workshop/settings').then(m => m.invalidateRuntimeSettingsCache()).catch(() => {})
225
227
  return { changed }
226
228
  }
227
229
 
@@ -83,7 +83,8 @@ export const userService = {
83
83
 
84
84
  // ===== 认证(公开端点)=====
85
85
 
86
- /** 注册:创建账号 + 签发首个 token(邮箱/用户名占用 → 409) */
86
+ /** 注册:创建账号 + 签发首个 token(邮箱/用户名占用 → 409)。
87
+ * 首启初始化:系统尚无活跃管理员时,首个注册账号授予 admin(空库自注册建站) */
87
88
  register(input: UserRegister): AuthResult {
88
89
  if (userRepository.findByEmail(input.email)) {
89
90
  throw new AppError(409, ErrorCodes.CONFLICT, '邮箱已被注册')
@@ -91,8 +92,12 @@ export const userService = {
91
92
  if (userRepository.findByName(input.name)) {
92
93
  throw new AppError(409, 'USER_EXISTS', `用户名已存在: ${input.name}`)
93
94
  }
94
- const user = userRepository.create({ ...input, role: 'user', status: 'active' })
95
- const { raw } = userRepository.createToken(user.id, 'default')
95
+ const needsBootstrap = !userRepository.hasActiveAdmin()
96
+ if (needsBootstrap) {
97
+ console.log(`[users] 初始化:尚无管理员账号,首个注册账号授予管理员角色(${input.email})`)
98
+ }
99
+ const user = userRepository.create({ ...input, role: needsBootstrap ? 'admin' : 'user', status: 'active' })
100
+ const { raw } = userRepository.createToken(user.id, needsBootstrap ? 'bootstrap-admin' : 'default')
96
101
  return { user: this.publicProfile(user), token: raw }
97
102
  },
98
103
 
@@ -84,11 +84,14 @@ export function spawnLineProcess(command: string, args: string[], options: LineS
84
84
  const { file, needsCmd } = resolveExecutable(command)
85
85
  const env = { ...process.env, ...options.env }
86
86
  if (needsCmd) {
87
- // Windows .cmd shim:固定包装器 'cmd.exe' + /d /s /c + 全量引号包裹
88
- const line = [file, ...args.map(a => assertCmdSafeArg(a))].map((token) => {
87
+ // Windows .cmd shim:固定包装器 'cmd.exe' + /d /s /c。
88
+ // 可执行文件路径无条件引号包裹:无空格路径裸奔时,/s 模式的 cmd 会吞掉
89
+ // 路径中的反斜杠(C:\Users\... → C:Users...),引擎进程立即退出(code=1)。
90
+ // 参数仍逐个经 assertCmdSafeArg 校验(拒绝引号与控制字符),引号包裹不引入注入面。
91
+ const line = [`"${file}"`, ...args.map(a => assertCmdSafeArg(a)).map((token) => {
89
92
  token = token.replace(/[\];&`<>$]/g, '^$1')
90
93
  return token.includes(' ') ? `"${token}"` : token
91
- }).join(' ')
94
+ })].join(' ')
92
95
  return launchChildProcess('cmd.exe', ['/d', '/s', '/c', line], {
93
96
  stdio: ['pipe', 'pipe', 'pipe'],
94
97
  cwd: options.cwd ?? process.cwd(),
@@ -20,6 +20,7 @@ import type { A2AArtifact, Part } from '../types/a2a'
20
20
  import type { WorkspaceTask } from '../types/task'
21
21
  import type { RpcHostToolDefinition } from './adapters/omp-rpc-client'
22
22
  import { loadHostToolDefs } from '../prompts/loader'
23
+ import { daqRuntimeSettings } from '../settings'
23
24
  import { toolDaqFrames, toolDaqQuery, toolDcwControl, toolDcwJudge, toolDcwJournal, toolDcwRead, toolDcwRollback, toolMyIndustrialNodes } from './industrial-tools'
24
25
  import { listPluginTools } from './plugin-tools'
25
26
  import { extractTaskMode } from '../runtime/execution-mode'
@@ -39,6 +40,25 @@ export const LEAD_ONLY_TOOL_NAMES = new Set([
39
40
  'remove_team_agent',
40
41
  ])
41
42
 
43
+ /** 占位符动态注入:工具描述里的运行时配置值(每次装配实时计算,配置热重载后 Agent 拿到新值) */
44
+ function applyDescriptionPlaceholders(tools: RpcHostToolDefinition[]): RpcHostToolDefinition[] {
45
+ let q: { defaultBucketMs: number, minBucketMs: number } | null = null
46
+ try {
47
+ q = daqRuntimeSettings().query
48
+ }
49
+ catch { /* 设置系统不可用(单测) → 保留原始描述 */ }
50
+ if (!q) return tools
51
+ const map: Record<string, string> = {
52
+ queryDefaultBucketMs: String(q.defaultBucketMs),
53
+ queryMinBucketMs: String(q.minBucketMs),
54
+ }
55
+ return tools.map(t => ({
56
+ ...t,
57
+ description: t.description.replace(/\{(queryDefaultBucketMs|queryMinBucketMs)\}/g, (_, k) => map[k] ?? _),
58
+ parameters: JSON.parse(JSON.stringify(t.parameters ?? {}).replace(/\{(queryDefaultBucketMs|queryMinBucketMs)\}/g, (_m: string, k: string) => map[k] ?? _m)),
59
+ }))
60
+ }
61
+
42
62
  /**
43
63
  * 按角色装配 host tools:lead = 全量;worker = 剔除 lead 专属(执行面 + 通信面 + 记忆面);
44
64
  * 尾部合并插件注册工具(roles 过滤,缺省双角色可用)。
@@ -54,7 +74,7 @@ export function hostToolsForRole(role: 'lead' | 'worker'): RpcHostToolDefinition
54
74
  if (tool.roles && !tool.roles.includes(role)) continue
55
75
  out.push({ name, label: tool.label ?? name, description: tool.description, parameters: tool.parameters ?? {} })
56
76
  }
57
- return out
77
+ return applyDescriptionPlaceholders(out)
58
78
  }
59
79
 
60
80
  /** 工具调用请求(与引擎协议解耦的规范化形状) */
@@ -14,6 +14,7 @@ import { nodeSemanticCards } from './industrial-context'
14
14
  import { getDcwController } from '../dcw/dcw-controller'
15
15
  import { getActiveLineRun } from '../dcw/line-run'
16
16
  import { findDcwTemplate } from '../dcw/dcw-templates'
17
+ import { daqRuntimeSettings } from '../settings'
17
18
  import { getDaqNodeRepo } from '../daq/daq-node.repo'
18
19
  import { findDaqTemplate } from '../daq/daq-templates'
19
20
  import { getRecipeRollBackManager } from '../dcw/recipe-rollback-manager'
@@ -258,11 +259,12 @@ export async function toolDaqQuery(agentId: string, args: {
258
259
 
259
260
  const toMs = Number(args.to_ms) || Date.now()
260
261
  const fromMs = Number(args.from_ms) || toMs - (Number(args.last_minutes) || 30) * 60_000
261
- // 时间间隔参数(bucket_ms 降采样桶宽):缺省 15s;可调,下限 1s
262
+ // 时间间隔参数(bucket_ms 降采样桶宽):缺省与下限来自 daq.query.*(live 配置,热重载)
263
+ const qCfg = daqRuntimeSettings().query
262
264
  const rawBucket = Number(args.bucket_ms)
263
265
  const bucketMs = Number.isFinite(rawBucket) && rawBucket > 0
264
- ? Math.max(1000, Math.min(3_600_000, Math.round(rawBucket)))
265
- : 15_000
266
+ ? Math.max(qCfg.minBucketMs, Math.min(3_600_000, Math.round(rawBucket)))
267
+ : qCfg.defaultBucketMs
266
268
  const limit = Math.min(Number(args.limit) || 500, 2000)
267
269
  const { getTsdb, tsdbReady } = await import('../daq/storage')
268
270
  await tsdbReady
@@ -23,6 +23,8 @@
23
23
 
24
24
  import { createLogger } from '../logger'
25
25
  import { randomUUID } from 'node:crypto'
26
+ import { daqRuntimeSettings } from '../settings'
27
+ import { getSystemConfigService } from '../../system-config'
26
28
  import { daqKeyFromRef, normalizeDataTransform, normalizeSignalKind, DAQ_DRIVERS, type AepDaqControllerState, type AepDaqFrame, type AepDaqReading, type AepDaqNodeChange, type DaqDriverKind, type DaqNodeView, type DataTransform, type DriverTestResult } from '../../../../shared/daq-protocol'
27
29
  import { AppError, ErrorCodes } from '../../../utils/errors'
28
30
  import { normalizeDriverKind, resolveDaqDriver, probeDriverAvailability, listPluginDrivers, type DaqFrameSample } from './drivers'
@@ -135,10 +137,15 @@ class DaqController {
135
137
  private queueUnsub: (() => void) | null = null
136
138
  /** 管线就绪前生产者静默(队列/消费必须先在位) */
137
139
  private pipelineReady = false
140
+ /** 配置同步/订阅状态(daq.sampling live 配置 → 网关节拍;仅挂一次) */
141
+ private settingsSynced = false
142
+ private settingsUnsub: (() => void) | null = null
138
143
 
139
144
  running = true
140
- /** 全局缺省采集间隔(节点 intervalMs=null 跟随;规范:默认 5s,下限 1s) */
145
+ /** 全局缺省采集间隔(节点 intervalMs=null 跟随;来源 = daq.sampling 配置,live 可调) */
141
146
  defaultIntervalMs = 5000
147
+ /** 采样节拍下限(create/patch/存量收敛统一钳制;来源 = daq.sampling.minIntervalMs) */
148
+ minIntervalMs = 1000
142
149
  /** 全局缺省 WS 下发间隔(节点 publishIntervalMs=null 跟随;0 = 随采样节拍) */
143
150
  defaultPublishIntervalMs = 0
144
151
  private producedCount = 0
@@ -150,6 +157,7 @@ class DaqController {
150
157
  // ---------- 生命周期 ----------
151
158
 
152
159
  private ensureLoop(): void {
160
+ this.applyRuntimeSettings()
153
161
  this.syncRuntimes()
154
162
  if (!this.queueInit) {
155
163
  this.queueInit = (async () => {
@@ -169,8 +177,27 @@ class DaqController {
169
177
 
170
178
  // ---------- 网关服务面(runtime host 实现;运行时只依赖此接口) ----------
171
179
 
172
- private runtimeDefaults(): { intervalMs: number, publishIntervalMs: number } {
173
- return { intervalMs: this.defaultIntervalMs, publishIntervalMs: this.defaultPublishIntervalMs }
180
+ /** 从运行时设置(daq.sampling.*)同步采样节拍默认值与下限。
181
+ * live 配置链:config.yml < runtime-settings.json < 环境变量 < 设置页/CLI;
182
+ * 设置变更经 system-config 订阅即时回流到这里(热重载,无需重启)。 */
183
+ applyRuntimeSettings(): void {
184
+ if (!this.settingsSynced) {
185
+ this.settingsSynced = true
186
+ try {
187
+ this.settingsUnsub = getSystemConfigService().subscribe(() => this.applyRuntimeSettings())
188
+ }
189
+ catch { /* 设置系统不可用(单测) → 用字段默认值 */ }
190
+ }
191
+ try {
192
+ const s = daqRuntimeSettings().sampling
193
+ if (Number.isFinite(s.defaultIntervalMs) && s.defaultIntervalMs > 0) this.defaultIntervalMs = Math.min(60_000, s.defaultIntervalMs)
194
+ if (Number.isFinite(s.minIntervalMs) && s.minIntervalMs > 0) this.minIntervalMs = Math.max(100, Math.min(this.defaultIntervalMs, s.minIntervalMs))
195
+ }
196
+ catch { /* settings 未就绪 → 保持当前值 */ }
197
+ }
198
+
199
+ private runtimeDefaults(): { intervalMs: number, publishIntervalMs: number, minIntervalMs: number } {
200
+ return { intervalMs: this.defaultIntervalMs, publishIntervalMs: this.defaultPublishIntervalMs, minIntervalMs: this.minIntervalMs }
174
201
  }
175
202
 
176
203
  /** 生产面:驱动采样一次(模板域 + 协议参数解析;mock/PLC 统一走驱动注册表)。
@@ -662,6 +689,7 @@ class DaqController {
662
689
  return {
663
690
  running: this.running,
664
691
  defaultIntervalMs: this.defaultIntervalMs,
692
+ minIntervalMs: this.minIntervalMs,
665
693
  defaultPublishIntervalMs: this.defaultPublishIntervalMs,
666
694
  nodesTotal: nodes.length,
667
695
  nodesOnline: this.running ? nodes.filter(n => n.enabled).length : 0,
@@ -768,7 +796,7 @@ class DaqController {
768
796
 
769
797
  configure(opts: { defaultIntervalMs?: number, defaultPublishIntervalMs?: number }): AepDaqControllerState {
770
798
  let changed = false
771
- if (typeof opts.defaultIntervalMs === 'number' && opts.defaultIntervalMs >= 1000) {
799
+ if (typeof opts.defaultIntervalMs === 'number' && opts.defaultIntervalMs >= this.minIntervalMs) {
772
800
  this.defaultIntervalMs = Math.min(60_000, Math.round(opts.defaultIntervalMs))
773
801
  changed = true
774
802
  }
@@ -806,7 +834,7 @@ class DaqController {
806
834
  driverConfig: input.driverConfig ?? {},
807
835
  transform: normalizeDataTransform(input.transform),
808
836
  enabled: input.enabled,
809
- intervalMs: input.intervalMs == null ? null : Math.max(1000, Math.min(60_000, Math.round(input.intervalMs))),
837
+ intervalMs: input.intervalMs == null ? null : Math.max(this.minIntervalMs, Math.min(60_000, Math.round(input.intervalMs))),
810
838
  publishIntervalMs: input.publishIntervalMs ?? null,
811
839
  unit: input.unit,
812
840
  decimals: input.decimals,
@@ -846,7 +874,7 @@ class DaqController {
846
874
  if (patch.warnHigh !== undefined) node.warnHigh = patch.warnHigh
847
875
  let rearm = false
848
876
  if (patch.intervalMs !== undefined) {
849
- node.intervalMs = patch.intervalMs == null ? null : Math.max(1000, Math.min(60_000, Math.round(patch.intervalMs)))
877
+ node.intervalMs = patch.intervalMs == null ? null : Math.max(this.minIntervalMs, Math.min(60_000, Math.round(patch.intervalMs)))
850
878
  rearm = true
851
879
  }
852
880
  if (patch.publishIntervalMs !== undefined) {
@@ -110,9 +110,9 @@ export class DaqNode {
110
110
  return daqKeyFromRef(this.templateRef)
111
111
  }
112
112
 
113
- /** 有效采样周期(ms):节点覆盖 > 全局缺省;硬下限 1s(存量 <1s 配置一并收敛) */
114
- effectiveInterval(defaultIntervalMs: number): number {
115
- return Math.max(1000, this.intervalMs ?? defaultIntervalMs)
113
+ /** 有效采样周期(ms):节点覆盖 > 全局缺省;下限 = daq.sampling.minIntervalMs(live 可调,缺省 1s) */
114
+ effectiveInterval(defaultIntervalMs: number, minIntervalMs = 1000): number {
115
+ return Math.max(minIntervalMs, this.intervalMs ?? defaultIntervalMs)
116
116
  }
117
117
 
118
118
  /** 越限派生:硬限外 = alarm;预警带 2% 滞回(退出需越过内缩边界,防临界抖动)。
@@ -22,8 +22,8 @@ export const PUBLISH_INTERVAL_MAX = 60_000
22
22
 
23
23
  /** 网关注入的服务面(运行时只依赖此接口;管线汇聚在网关侧) */
24
24
  export interface DaqRuntimeHost {
25
- /** 网关全局缺省(节点元数据为 null 时回退) */
26
- defaults(): { intervalMs: number, publishIntervalMs: number }
25
+ /** 网关全局缺省(节点元数据为 null 时回退);minIntervalMs = 采样节拍下限(daq.sampling 配置) */
26
+ defaults(): { intervalMs: number, publishIntervalMs: number, minIntervalMs?: number }
27
27
  /** 生产面:驱动采样一次(网关实现协议解析与模板域;多形态模板返回帧信封 ——
28
28
  * 驱动原生形态或 controller 生产侧处理形态[图像已落对象存储]) */
29
29
  sample(node: DaqNode, now: number): Promise<number | DaqFrameSample | { frame: NonNullable<DaqSampleEnvelope['frame']> } | null> | number | DaqFrameSample | { frame: NonNullable<DaqSampleEnvelope['frame']> } | null
@@ -84,7 +84,8 @@ export class DaqNodeRuntime {
84
84
  async tick(now: number): Promise<void> {
85
85
  const node = this.node
86
86
  if (this.sampling || !node.enabled) return
87
- if (now < this.lastSampleAt + node.effectiveInterval(this.host.defaults().intervalMs)) return
87
+ const defs = this.host.defaults()
88
+ if (now < this.lastSampleAt + node.effectiveInterval(defs.intervalMs, defs.minIntervalMs)) return
88
89
  this.sampling = true
89
90
  try {
90
91
  let v: number | DaqFrameSample | null = null
@@ -26,6 +26,7 @@ import { emitDcwWrite } from '@/server/services/workshop/plugins/host.mjs'
26
26
  import { clearActiveLineRun, getActiveLineRun, getAllActiveLineRuns, setActiveLineRun } from './line-run'
27
27
  import { getRecipeRollBackManager } from './recipe-rollback-manager'
28
28
  import { recordOps } from '../ops/ops'
29
+ import { daqRuntimeSettings } from '../settings'
29
30
 
30
31
  /** 运维日志写下发防噪:同节点同值 10s 内的心跳重下发不重复入册 */
31
32
  const opsWriteMemo = new Map<string, { eng: number, at: number }>()
@@ -770,8 +771,9 @@ class DcwController {
770
771
  await tsdbReady
771
772
  const { getDaqNodeRepo } = await import('../daq/daq-node.repo')
772
773
  const { findDaqTemplate } = await import('../daq/daq-templates')
773
- // 时间间隔参数(bucketMs):缺省 15s;可调,下限 1s(降采样桶聚合)
774
- const bucketMs = opts.bucketMs == null ? 15_000 : Math.max(1000, Math.min(3_600_000, Math.round(opts.bucketMs)))
774
+ // 时间间隔参数(bucketMs):缺省与下限来自 daq.query.*(live 配置,热重载)
775
+ const { defaultBucketMs, minBucketMs } = daqRuntimeSettings().query
776
+ const bucketMs = opts.bucketMs == null ? defaultBucketMs : Math.max(minBucketMs, Math.min(3_600_000, Math.round(opts.bucketMs)))
775
777
  const nodeFilter = opts.nodeId ? opts.nodeId.split(',').map(x => x.trim()).filter(Boolean) : []
776
778
  const nodes = getDaqNodeRepo().all().filter((n) => {
777
779
  if (opts.paramKey && n.templateKey !== opts.paramKey) return false
@@ -34,6 +34,11 @@ function effective(): Record<string, unknown> {
34
34
  return eff.effective
35
35
  }
36
36
 
37
+ /** 主动失效进程内缓存:settings 写路径(PATCH/CLI/文件监听)变更后调用,使 live 键即时可见 */
38
+ export function invalidateRuntimeSettingsCache(): void {
39
+ cache = null
40
+ }
41
+
37
42
  /** 按描述符键读单值(键必已注册 schema.json;缺键 = 描述符默认) */
38
43
  export function settingOf(key: string): unknown {
39
44
  return effective()[key]
@@ -111,6 +116,16 @@ export interface DaqRuntimeSettings {
111
116
  qos: number
112
117
  rejectUnauthorized: boolean
113
118
  }
119
+ /** 采样节拍(节点 intervalMs 未显式指定时的默认值与可配置下限;live 可调) */
120
+ sampling: {
121
+ defaultIntervalMs: number
122
+ minIntervalMs: number
123
+ }
124
+ /** 时序查询节拍(bucketMs 缺省值与下限;samples/产线查询/Agent daq_query 共用) */
125
+ query: {
126
+ defaultBucketMs: number
127
+ minBucketMs: number
128
+ }
114
129
  tsRetentionH: number
115
130
  frameRetentionH: number
116
131
  alarmWebhookUrl: string
@@ -143,6 +158,14 @@ export function daqRuntimeSettings(): DaqRuntimeSettings {
143
158
  frameRetentionH: Number(get('frameRetentionH', 720)),
144
159
  alarmWebhookUrl: String(get('alarmWebhookUrl', '')),
145
160
  alarmEscalateMinutes: Number(get('alarmEscalateMinutes', 15)),
161
+ sampling: {
162
+ defaultIntervalMs: Number(get('sampling.defaultIntervalMs', 5000)),
163
+ minIntervalMs: Number(get('sampling.minIntervalMs', 1000)),
164
+ },
165
+ query: {
166
+ defaultBucketMs: Number(get('query.defaultBucketMs', 15000)),
167
+ minBucketMs: Number(get('query.minBucketMs', 1000)),
168
+ },
146
169
  }
147
170
  }
148
171
  export function securityHitlTimeoutMs(): number {
@@ -38,6 +38,10 @@
38
38
  { "key": "daq.mqtt.password", "type": "string", "group": "daq", "label": "MQTT 密码", "labelKey": "settings.runtime.daq.mqttPassword", "description": "数采事件总线 MQTT 鉴权密码", "applies": "restart", "default": "", "aliases": ["DAQ_MQTT_PASSWORD"] },
39
39
  { "key": "daq.mqtt.caFile", "type": "string", "group": "daq", "label": "MQTT CA 证书", "labelKey": "settings.runtime.daq.mqttCaFile", "description": "mqtts 自签 CA 证书文件路径", "applies": "restart", "default": "", "aliases": ["DAQ_MQTT_CA_FILE"] },
40
40
  { "key": "daq.mqtt.rejectUnauthorized", "type": "boolean", "group": "daq", "label": "MQTT 校验证书", "labelKey": "settings.runtime.daq.mqttRejectUnauthorized", "description": "mqtts 是否校验服务端证书(自签调试可关)", "applies": "restart", "default": true, "aliases": ["DAQ_MQTT_REJECT_UNAUTHORIZED"] },
41
+ { "key": "daq.sampling.defaultIntervalMs", "type": "number", "group": "daq", "label": "节点采样默认间隔(ms)", "labelKey": "settings.runtime.daq.samplingDefaultIntervalMs", "description": "数采节点未显式指定 intervalMs 时的采集周期(采样→入库→事件一拍)", "applies": "live", "default": 5000, "min": 200, "max": 60000, "aliases": ["DAQ_SAMPLING_DEFAULT_INTERVAL_MS"] },
42
+ { "key": "daq.sampling.minIntervalMs", "type": "number", "group": "daq", "label": "节点采样下限(ms)", "labelKey": "settings.runtime.daq.samplingMinIntervalMs", "description": "数采节点允许配置的最小采样周期(create/patch/存量收敛统一钳制)", "applies": "live", "default": 1000, "min": 200, "max": 60000, "aliases": ["DAQ_SAMPLING_MIN_INTERVAL_MS"] },
43
+ { "key": "daq.query.defaultBucketMs", "type": "number", "group": "daq", "label": "时序查询默认间隔(ms)", "labelKey": "settings.runtime.daq.queryDefaultBucketMs", "description": "Timescale 查询未指定 bucketMs 时的降采样桶宽(samples/产线查询/Agent daq_query 共用)", "applies": "live", "default": 15000, "min": 100, "max": 3600000, "aliases": ["DAQ_QUERY_DEFAULT_BUCKET_MS"] },
44
+ { "key": "daq.query.minBucketMs", "type": "number", "group": "daq", "label": "时序查询下限(ms)", "labelKey": "settings.runtime.daq.queryMinBucketMs", "description": "时序查询允许的最小降采样桶宽(传入更小值时钳到该下限)", "applies": "live", "default": 1000, "min": 100, "max": 3600000, "aliases": ["DAQ_QUERY_MIN_BUCKET_MS"] },
41
45
  { "key": "daq.tsRetentionH", "type": "number", "group": "daq", "label": "标量时序保留(h)", "labelKey": "settings.runtime.daq.tsRetentionH", "description": "SQLite 仿真库标量样本保留小时数(Timescale 由 hypertable 策略管理)", "applies": "restart", "default": 168, "min": 1, "max": 8760, "aliases": ["DAQ_TS_RETENTION_H"] },
42
46
  { "key": "daq.frameRetentionH", "type": "number", "group": "daq", "label": "帧元数据保留(h)", "labelKey": "settings.runtime.daq.frameRetentionH", "description": "daq_frames 帧元数据保留小时数", "applies": "restart", "default": 720, "min": 1, "max": 8760, "aliases": ["DAQ_FRAME_RETENTION_H"] },
43
47
  { "key": "daq.alarmWebhookUrl", "type": "string", "group": "daq", "label": "告警 Webhook", "labelKey": "settings.runtime.daq.alarmWebhookUrl", "description": "告警升级推送的 Webhook 地址(空=不推送)", "applies": "restart", "default": "", "aliases": ["ALARM_WEBHOOK_URL"] },
@@ -1 +0,0 @@
1
- import{C as e,G as t,H as n,Ht as ee,St as r,Wt as i,a,b as o,et as s,g as c,h as l,lt as u,mt as d,nt as f,p,t as m,x as h}from"./BSCpFtzG.js";import{B as te,z as g}from"./2LwEn9gX.js";import{d as _}from"./PQLnLxYe.js";import{n as v}from"./uBbDCfTz.js";import{n as y}from"./BeIfu4N3.js";import{t as b}from"./Bt_HDizI.js";import{r as x}from"./BsMpJf7S.js";import{n as ne,t as re}from"./Do88WZG2.js";import{n as ie,t as ae}from"./B4Fia4FB.js";import{t as oe}from"./BYL0Rjqj.js";import{t as se}from"./DM8DS9MA.js";import{t as ce}from"./Du-eSpo2.js";import{t as le}from"./C9f8QMp12.js";import{t as S}from"./NIM0Wglj2.js";import{t as C}from"./C_gFA2H_2.js";import{n as w,t as T}from"./ZugRk0CM2.js";import{t as ue}from"./CNs_Ozdc2.js";var de={class:`page`},fe={key:0,class:`auth-gate aw-orbs`},pe={class:`hint`},me={class:`hint`},he={class:`aw-page-head`},ge={class:`sub`},_e={class:`head-acts`},E={class:`lib-links`},D={class:`grid`},O={class:`card-head`},k={class:`name`},A={class:`card-body`},j=[`onClick`],M={class:`ch-name`},N={class:`ch-meta`},P={key:0,class:`empty`},F={class:`card-foot`},I=[`onClick`],ve=[`onClick`],L=m(e({__name:`index`,setup(e){let{t:m}=y();ue({layout:`default`});let L=S(),R=C(),z=w(),{subscribe:ye}=T(),B=d(`login`),V=d(``),H=d(``),U=d(``),W=d(``),G=d(!1),K=async()=>{if(!V.value.trim()){x.warning(m(`wsHome.k1vnhyks019`));return}if(!H.value.trim()){x.warning(m(`wsHome.k8ieqzj020`));return}if(U.value.length<6){x.warning(m(`wsHome.ksx73ra021`));return}G.value=!0;try{let e=await L.register(V.value,H.value,U.value);x.success(m(`wsHome.k1mbatbh030`,{p0:e.name})),V.value=``,H.value=``,U.value=``}catch(e){x.error(e instanceof Error?e.message:String(e))}finally{G.value=!1}},q=async()=>{if(!H.value.trim()){x.warning(m(`wsHome.k8ieqzj020`));return}G.value=!0;try{let e=await L.login(H.value,U.value);x.success(m(`wsHome.kwixbdl031`,{p0:e.name})),U.value=``}catch(e){x.error(e instanceof Error?e.message:String(e))}finally{G.value=!1}},J=async()=>{G.value=!0;try{let e=await L.loginWithToken(W.value);x.success(m(`wsHome.kwixbdl031`,{p0:e.name})),W.value=``}catch(e){x.error(e instanceof Error?e.message:String(e))}finally{G.value=!1}},be=()=>{L.logout(),x.success(m(`wsHome.k3ngm6p022`))},Y=d(!1);s(()=>L.isLoggedIn,async e=>{if(!e){Y.value=!1;return}if(await L.refresh(),L.isLoggedIn)try{await R.load(),Y.value=!0}catch(e){x.error(e instanceof Error?e.message:m(`wsHome.k1br33vc023`))}},{immediate:!0}),s(()=>Y.value&&R.workspaces.map(e=>e.channelIds.join(`,`)).join(`|`),()=>{if(Y.value)for(let e of R.workspaces)for(let t of e.channelIds)ye(t)},{immediate:!0});let X=d(!1),Z=d(``),Q=d(!1),$=async()=>{let e=Z.value.trim();if(!e){x.warning(`Workspace 名称必填`);return}Q.value=!0;try{let t=await R.create(e);X.value=!1,Z.value=``,R.setActiveWorkspaceId(t.id),_(`/workshop/w/${t.id}`)}catch(e){x.error(e instanceof Error?e.message:String(e))}finally{Q.value=!1}},xe=async e=>{await R.remove(e),x.success(m(`wsHome.k3n5sd7024`))},Se=e=>e.map(e=>{let t=z.channels[e],n=z.agents[e]??[];return{id:e,name:t?.name??e.slice(0,8),synced:t!==void 0,agents:n.length,busy:n.filter(e=>e.state===`busy`).length,activeTasks:(z.tasks[e]??[]).filter(e=>![`COMPLETED`,`CANCELED`,`FAILED`].includes(e.state)).length}});return v({title:()=>m(`titles.workshop`)}),(e,s)=>{let d=re,m=ne,v=b,y=ce,x=ie,S=ae,C=se,w=le,T=oe;return n(),c(`div`,de,[r(L).isLoggedIn?(n(),c(a,{key:1},[p(`div`,he,[p(`div`,null,[s[17]||=p(`p`,{class:`aw-kicker`},` workshop / overview `,-1),p(`h1`,null,`Workshop `+i(e.$t(`wsHome.k3n4m5c025`)),1),p(`p`,ge,i(r(L).user?.name)+` `+i(e.$t(`wsHome.ke16e53026`)),1)]),p(`div`,_e,[p(`div`,E,[p(`button`,{type:`button`,class:`lib-link`,onClick:s[7]||=t=>(`navigateTo`in e?e.navigateTo:r(_))(`/workshop/agents`)},i(e.$t(`wsHome.k3pa5h4013`)),1),p(`button`,{type:`button`,class:`lib-link`,onClick:s[8]||=t=>(`navigateTo`in e?e.navigateTo:r(_))(`/workshop/teams`)},i(e.$t(`wsHome.k3svl8y014`)),1),p(`button`,{type:`button`,class:`lib-link`,onClick:s[9]||=t=>(`navigateTo`in e?e.navigateTo:r(_))(`/workshop/channel-templates`)},` Channel `+i(e.$t(`wsHome.k41ds5027`)),1),p(`button`,{type:`button`,class:`lib-link`,onClick:s[10]||=t=>(`navigateTo`in e?e.navigateTo:r(_))(`/tokens`)},` API Token `),p(`button`,{type:`button`,class:`lib-link`,onClick:be},i(e.$t(`wsHome.k484e7015`)),1)]),p(`button`,{class:`aw-pill im`,onClick:s[11]||=e=>X.value=!0},[s[18]||=p(`span`,{class:`i-tabler-plus im-pop`},null,-1),o(` `+i(e.$t(`wsHome.newWs`)),1)])])]),h(w,{spinning:!r(Y)},{default:f(()=>[p(`div`,D,[(n(!0),c(a,null,t(r(R).workspaces,u=>(n(),c(`div`,{key:u.id,class:`card`},[p(`div`,O,[s[19]||=p(`span`,{class:`card-mark`},[p(`span`,{class:`i-tabler-box`})],-1),p(`span`,k,i(u.name),1)]),p(`div`,A,[(n(!0),c(a,null,t(Se(u.channelIds),t=>(n(),c(`div`,{key:t.id,class:`ch-row`,onClick:t=>(`navigateTo`in e?e.navigateTo:r(_))(`/workshop/w/${u.id}`)},[p(`span`,{class:ee([`dot`,{live:t.activeTasks>0}])},null,2),p(`span`,M,i(t.name),1),p(`span`,N,[t.synced?(n(),c(a,{key:0},[o(i(t.agents)+` `+i(e.$t(`wsHome.k1ggoa45028`))+` `+i(t.busy)+` / `+i(e.$t(`wsHome.k3wcox029`))+` `+i(t.activeTasks),1)],64)):(n(),c(a,{key:1},[o(i(e.$t(`wsHome.k1bst7s9016`)),1)],64))])],8,j))),128)),u.channelIds.length===0?(n(),c(`div`,P,i(e.$t(`wsHome.k1ylgrbc017`)),1)):l(``,!0)]),p(`div`,F,[p(`button`,{class:`aw-pill outline im`,onClick:t=>(`navigateTo`in e?e.navigateTo:r(_))(`/workshop/w/${u.id}`)},[s[20]||=p(`span`,{class:`i-tabler-arrow-right im-pop`},null,-1),o(` `+i(e.$t(`wsHome.kr1uwwi018`)),1)],8,I),p(`button`,{class:`aw-ghost im`,title:`删除 Workspace`,onClick:te(e=>xe(u.id),[`stop`])},[...s[21]||=[p(`span`,{class:`i-tabler-trash im-shake`},null,-1)]],8,ve)])]))),128)),r(R).workspaces.length===0&&r(Y)?(n(),c(`div`,{key:0,class:`card placeholder`,onClick:s[12]||=e=>X.value=!0},[...s[22]||=[p(`span`,{class:`i-tabler-plus big`},null,-1),p(`span`,null,`新建第一个 Workspace`,-1)]])):l(``,!0)])]),_:1},8,[`spinning`]),h(T,{open:r(X),"onUpdate:open":s[14]||=e=>u(X)?X.value=e:null,title:e.$t(`wsHome.newWs`),"confirm-loading":r(Q),"ok-text":`创建并进入`,"cancel-text":`取消`,onOk:$},{default:f(()=>[h(d,{value:r(Z),"onUpdate:value":s[13]||=e=>u(Z)?Z.value=e:null,placeholder:e.$t(`wsHome.ksmpk8l007`),onKeydown:g($,[`enter`])},null,8,[`value`,`placeholder`])]),_:1},8,[`open`,`title`,`confirm-loading`])],64)):(n(),c(`div`,fe,[h(C,{class:`auth-card`},{default:f(()=>[s[15]||=p(`p`,{class:`aw-kicker`},` agentworkshop / sign in `,-1),p(`h2`,null,i(e.$t(`wsHome.kr0vzqu008`)),1),s[16]||=p(`p`,{class:`sub`},` 全局用户系统统管身份;每个用户可管理多个 API Token, 管理 API 需用户 token(Authorization: Bearer)。 `,-1),h(S,{"active-key":r(B),"onUpdate:activeKey":s[6]||=e=>u(B)?B.value=e:null},{default:f(()=>[h(x,{key:`login`,tab:`账号登录`},{default:f(()=>[h(y,{direction:`vertical`,style:{width:`100%`}},{default:f(()=>[h(d,{value:r(H),"onUpdate:value":s[0]||=e=>u(H)?H.value=e:null,type:`email`,placeholder:e.$t(`wsHome.k48h2c001`),onKeydown:g(q,[`enter`])},null,8,[`value`,`placeholder`]),h(m,{value:r(U),"onUpdate:value":s[1]||=e=>u(U)?U.value=e:null,placeholder:e.$t(`wsHome.k3yvgs002`),onKeydown:g(q,[`enter`])},null,8,[`value`,`placeholder`]),h(v,{type:`primary`,block:``,loading:r(G),onClick:q},{default:f(()=>[o(i(e.$t(`wsHome.k43kol009`)),1)]),_:1},8,[`loading`]),p(`p`,pe,i(e.$t(`wsHome.k17x74cj010`)),1)]),_:1})]),_:1}),h(x,{key:`register`,tab:`注册新用户`},{default:f(()=>[h(y,{direction:`vertical`,style:{width:`100%`}},{default:f(()=>[h(d,{value:r(V),"onUpdate:value":s[2]||=e=>u(V)?V.value=e:null,placeholder:e.$t(`wsHome.kwgbai9003`)},null,8,[`value`,`placeholder`]),h(d,{value:r(H),"onUpdate:value":s[3]||=e=>u(H)?H.value=e:null,type:`email`,placeholder:e.$t(`wsHome.kizjkbo004`)},null,8,[`value`,`placeholder`]),h(m,{value:r(U),"onUpdate:value":s[4]||=e=>u(U)?U.value=e:null,placeholder:e.$t(`wsHome.kh3cqfn005`),onKeydown:g(K,[`enter`])},null,8,[`value`,`placeholder`]),h(v,{type:`primary`,block:``,loading:r(G),onClick:K},{default:f(()=>[o(i(e.$t(`wsHome.k1so6a0v011`)),1)]),_:1},8,[`loading`]),p(`p`,me,i(e.$t(`wsHome.k1r0a4u3012`)),1)]),_:1})]),_:1}),h(x,{key:`token`,tab:`Token 登录`},{default:f(()=>[h(y,{direction:`vertical`,style:{width:`100%`}},{default:f(()=>[h(m,{value:r(W),"onUpdate:value":s[5]||=e=>u(W)?W.value=e:null,placeholder:e.$t(`wsHome.k15qunld006`),onKeydown:g(J,[`enter`])},null,8,[`value`,`placeholder`]),h(v,{type:`primary`,block:``,loading:r(G),onClick:J},{default:f(()=>[o(i(e.$t(`wsHome.k43kol009`)),1)]),_:1},8,[`loading`])]),_:1})]),_:1})]),_:1},8,[`active-key`])]),_:1})]))])}}}),[[`__scopeId`,`data-v-dfba3160`]]);export{L as default};
@@ -1 +0,0 @@
1
- {"id":"14df171d-89cb-43ec-ad6f-9df72d6da7f5","timestamp":1788607002809,"prerendered":[]}
@@ -1 +0,0 @@
1
- .page[data-v-dfba3160]{padding:4px}.auth-gate[data-v-dfba3160]{justify-content:center;padding-top:8vh;display:flex}.auth-card[data-v-dfba3160]{border-radius:var(--radius-panel);width:420px;max-width:92vw;box-shadow:var(--shadow-float);padding:26px 26px 18px;position:relative;border:1px solid var(--line-strong)!important}.auth-card[data-v-dfba3160] h2{font-family:var(--font-display);margin:0 0 6px;font-size:26px}.sub[data-v-dfba3160]{color:var(--ink-faint);margin:0 0 14px;font-size:12.5px}.hint[data-v-dfba3160]{color:var(--ink-fainter);margin:8px 0 0;font-size:11px}.head-acts[data-v-dfba3160]{flex-direction:column;align-items:flex-end;gap:10px;display:flex}.lib-links[data-v-dfba3160]{flex-wrap:wrap;justify-content:flex-end;gap:2px 14px;display:inline-flex}.lib-link[data-v-dfba3160]{font-family:var(--font-body);color:var(--ink-faint);cursor:pointer;transition:color var(--transition-fast);background:0 0;border:0;padding:2px 0;font-size:12.5px}.lib-link[data-v-dfba3160]:hover{color:var(--ink);text-underline-offset:3px;text-decoration:underline}.card-mark[data-v-dfba3160]{width:30px;height:30px;color:var(--ink-soft);background:var(--paper-deep);border-radius:var(--radius-panel-sm);flex:none;justify-content:center;align-items:center;font-size:15px;display:inline-flex}.card-head .name[data-v-dfba3160]{font-family:var(--font-display);letter-spacing:-.01em;color:var(--ink);font-size:17px}.card-foot[data-v-dfba3160]{justify-content:space-between;align-items:center;gap:8px;margin-top:auto;display:flex}.grid[data-v-dfba3160]{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;display:grid}.card[data-v-dfba3160]{background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius-panel);box-shadow:var(--shadow-card);flex-direction:column;gap:10px;padding:16px;transition:border-color .18s,box-shadow .18s,transform .18s;display:flex;position:relative}.card[data-v-dfba3160]:hover{border-color:var(--line-strong);transform:translateY(-1px)}.card.placeholder[data-v-dfba3160]{opacity:.55;cursor:pointer;border-style:dashed;justify-content:center;align-items:center;min-height:160px;font-size:13px}.big[data-v-dfba3160]{font-size:28px}.card-head[data-v-dfba3160]{align-items:center;gap:8px;font-size:15px;display:flex}.card-head[data-v-dfba3160]>:first-child{color:var(--accent-cobalt)}.name[data-v-dfba3160]{font-family:var(--font-display);flex:auto;font-size:17px;font-weight:600}.op[data-v-dfba3160]{cursor:pointer;opacity:.4}.op[data-v-dfba3160]:hover{opacity:1}.card-body[data-v-dfba3160]{flex:auto;min-height:40px}.ch-row[data-v-dfba3160]{cursor:pointer;border-radius:var(--radius-panel);align-items:center;gap:8px;margin:2px 0;padding:5px 7px;font-size:12px;transition:background .15s,transform .15s;display:flex}.ch-row[data-v-dfba3160]:hover{background:color-mix(in srgb, var(--accent-cobalt) 7%, transparent);transform:translate(2px)}.dot[data-v-dfba3160]{background:var(--line-strong);border-radius:50%;flex:none;width:7px;height:7px}.dot.live[data-v-dfba3160]{background:var(--accent-moss);box-shadow:0 0 6px var(--accent-moss)}.ch-name[data-v-dfba3160]{flex:none;font-weight:600}.ch-meta[data-v-dfba3160]{font-family:var(--font-mono);opacity:.5;text-overflow:ellipsis;white-space:nowrap;flex:auto;font-size:11px;overflow:hidden}.empty[data-v-dfba3160]{opacity:.4;padding:12px 6px;font-size:12px}
@@ -1 +0,0 @@
1
- {"version":3,"file":"workshop-iCzNRifn.mjs","sources":["../../../../app/pages/workshop/index.vue"],"names":["api","useHead","$t","navigateTo"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYA,MAAM,EAAE,MAAM,OAAA,EAAQ;AAItB,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,MAAM,UAAU,kBAAA,EAAmB;AACnC,EAAA,MAAM,WAAW,gBAAA,EAAiB;EAClC,MAAM,EAAE,cAAc,aAAA,EAAc;EAGpC,MAAM,OAAA,GAAU,IAAoC,OAAO,CAAA;EAC3D,MAAM,QAAA,GAAW,IAAI,EAAE,CAAA;EACvB,MAAM,SAAA,GAAY,IAAI,EAAE,CAAA;EACxB,MAAM,YAAA,GAAe,IAAI,EAAE,CAAA;EAC3B,MAAM,cAAA,GAAiB,IAAI,EAAE,CAAA;EAC7B,MAAM,WAAA,GAAc,IAAI,KAAK,CAAA;AAE7B,EAAA,MAAM,aAAa,YAA2B;AAC5C,GAAA,IAAI,CAAC,QAAA,CAAS,KAAA,CAAM,IAAA,EAAK,EAAG;IAC1BA,KAAA,CAAQ,OAAA,CAAQ,CAAA,CAAE,oBAAoB,CAAC,CAAA;AACvC,IAAA;AACF,GAAA;AACA,GAAA,IAAI,CAAC,SAAA,CAAU,KAAA,CAAM,IAAA,EAAK,EAAG;IAC3BA,KAAA,CAAQ,OAAA,CAAQ,CAAA,CAAE,mBAAmB,CAAC,CAAA;AACtC,IAAA;AACF,GAAA;GACA,IAAI,YAAA,CAAa,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;IACjCA,KAAA,CAAQ,OAAA,CAAQ,CAAA,CAAE,mBAAmB,CAAC,CAAA;AACtC,IAAA;AACF,GAAA;AACA,GAAA,WAAA,CAAY,KAAA,GAAQ,IAAA;GACpB,IAAI;IACF,MAAM,IAAA,GAAO,MAAM,SAAA,CAAU,QAAA,CAAS,SAAS,KAAA,EAAO,SAAA,CAAU,KAAA,EAAO,YAAA,CAAa,KAAK,CAAA;IACzFA,KAAA,CAAQ,OAAA,CAAQ,EAAE,oBAAA,EAAsB,EAAE,IAAI,IAAA,CAAK,IAAA,EAAM,CAAC,CAAA;AAC1D,IAAA,QAAA,CAAS,KAAA,GAAQ,EAAA;AACjB,IAAA,SAAA,CAAU,KAAA,GAAQ,EAAA;AAClB,IAAA,YAAA,CAAa,KAAA,GAAQ,EAAA;AACvB,GAAA,CAAA,CAAA,OACO,CAAA,EAAG;AACR,IAAAA,KAAA,CAAQ,MAAM,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;GAC1D,CAAA,SACQ;AACN,IAAA,WAAA,CAAY,KAAA,GAAQ,KAAA;AACtB,GAAA;AACF,EAAA,CAAA;AACA,EAAA,MAAM,UAAU,YAA2B;AACzC,GAAA,IAAI,CAAC,SAAA,CAAU,KAAA,CAAM,IAAA,EAAK,EAAG;IAC3BA,KAAA,CAAQ,OAAA,CAAQ,CAAA,CAAE,mBAAmB,CAAC,CAAA;AACtC,IAAA;AACF,GAAA;AACA,GAAA,WAAA,CAAY,KAAA,GAAQ,IAAA;GACpB,IAAI;AACF,IAAA,MAAM,OAAO,MAAM,SAAA,CAAU,MAAM,SAAA,CAAU,KAAA,EAAO,aAAa,KAAK,CAAA;IACtEA,KAAA,CAAQ,OAAA,CAAQ,EAAE,mBAAA,EAAqB,EAAE,IAAI,IAAA,CAAK,IAAA,EAAM,CAAC,CAAA;AACzD,IAAA,YAAA,CAAa,KAAA,GAAQ,EAAA;AACvB,GAAA,CAAA,CAAA,OACO,CAAA,EAAG;AACR,IAAAA,KAAA,CAAQ,MAAM,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;GAC1D,CAAA,SACQ;AACN,IAAA,WAAA,CAAY,KAAA,GAAQ,KAAA;AACtB,GAAA;AACF,EAAA,CAAA;AACA,EAAA,MAAM,mBAAmB,YAA2B;AAClD,GAAA,WAAA,CAAY,KAAA,GAAQ,IAAA;GACpB,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,MAAM,SAAA,CAAU,cAAA,CAAe,eAAe,KAAK,CAAA;IAChEA,KAAA,CAAQ,OAAA,CAAQ,EAAE,mBAAA,EAAqB,EAAE,IAAI,IAAA,CAAK,IAAA,EAAM,CAAC,CAAA;AACzD,IAAA,cAAA,CAAe,KAAA,GAAQ,EAAA;AACzB,GAAA,CAAA,CAAA,OACO,CAAA,EAAG;AACR,IAAAA,KAAA,CAAQ,MAAM,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;GAC1D,CAAA,SACQ;AACN,IAAA,WAAA,CAAY,KAAA,GAAQ,KAAA;AACtB,GAAA;AACF,EAAA,CAAA;EAOA,MAAM,KAAA,GAAQ,IAAI,KAAK,CAAA;EACvB,KAAA,CAAA,MAAY,SAAA,CAAU,UAAA,EAAY,OAAO,EAAA,KAAO;AAC9C,GAAA,IAAI,CAAC,EAAA,EAAI;AACP,IAAA,KAAA,CAAM,KAAA,GAAQ,KAAA;AACd,IAAA;AACF,GAAA;AACA,GAAA,MAAM,UAAU,OAAA,EAAQ;GACxB,IAAI,CAAC,UAAU,UAAA,EAAY;GAC3B,IAAI;AACF,IAAA,MAAM,QAAQ,IAAA,EAAK;AACnB,IAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AAChB,GAAA,CAAA,CAAA,OACO,GAAG,CAGV;EACF,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAGtB,EAAA,KAAA,CAAA,MACQ,KAAA,CAAM,KAAA,IAAS,OAAA,CAAQ,UAAA,CAAW,KAAI,CAAA,KAAK,CAAA,CAAE,UAAA,CAAW,IAAA,CAAK,GAAG,CAAC,CAAC,CAAC,IAAA,CAAK,GAAG,CAAA,EAAA,MAC3E;GACJ,IAAI,CAAC,MAAM,KAAA,EAAO;GAClB,KAAK,MAAM,EAAA,IAAM,OAAA,CAAQ,UAAA,EACvB,KAAK,MAAM,EAAA,IAAM,EAAA,CAAG,UAAA,EAAY,SAAA,CAAU,EAAE,CAAA;EAEhD,CAAA,EACA,EAAE,SAAA,EAAW,IAAA,EACf,CAAA;EAEA,MAAM,UAAA,GAAa,IAAI,KAAK,CAAA;EAC5B,MAAM,UAAA,GAAa,IAAI,EAAE,CAAA;EACzB,MAAM,aAAA,GAAgB,IAAI,KAAK,CAAA;AAC/B,EAAA,MAAM,SAAS,YAA2B;GACxC,MAAM,IAAA,GAAO,UAAA,CAAW,KAAA,CAAM,IAAA,EAAK;AACnC,GAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAAA,KAAA,CAAQ,QAAQ,gBAAgB,CAAA;AAChC,IAAA;AACF,GAAA;AACA,GAAA,aAAA,CAAc,KAAA,GAAQ,IAAA;GACtB,IAAI;AACF,IAAA,MAAM,EAAA,GAAK,MAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA;AACpC,IAAA,UAAA,CAAW,KAAA,GAAQ,KAAA;AACnB,IAAA,UAAA,CAAW,KAAA,GAAQ,EAAA;IACnB,OAAA,CAAQ,oBAAA,CAAqB,GAAG,EAAE,CAAA;IAClC,UAAA,CAAW,CAAA,YAAA,EAAe,GAAG,EAAA,CAAA,CAAI,CAAA;AACnC,GAAA,CAAA,CAAA,OACO,CAAA,EAAG;AACR,IAAAA,KAAA,CAAQ,MAAM,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;GAC1D,CAAA,SACQ;AACN,IAAA,aAAA,CAAc,KAAA,GAAQ,KAAA;AACxB,GAAA;AACF,EAAA,CAAA;EAEA,MAAM,MAAA,GAAS,OAAO,EAAA,KAA8B;GAClD,MAAM,OAAA,CAAQ,OAAO,EAAE,CAAA;GACvBA,KAAA,CAAQ,OAAA,CAAQ,CAAA,CAAE,mBAAmB,CAAC,CAAA;AACxC,EAAA,CAAA;AAEA,EAAA,MAAM,cAAA,GAAA,CAAkB,UAAA,KAAyB,UAAA,CAAW,GAAA,CAAA,CAAK,EAAA,KAAO;GACtE,MAAM,IAAA,GAAO,SAAS,QAAA,CAAS,EAAA,CAAA;AAC/B,GAAA,MAAM,MAAA,GAAS,QAAA,CAAS,MAAA,CAAO,EAAA,CAAA,IAAO,EAAC;GACvC,OAAO;AACL,IAAA,EAAA;AACA,IAAA,IAAA,EAAM,IAAA,EAAM,IAAA,IAAQ,EAAA,CAAG,KAAA,CAAM,GAAG,CAAC,CAAA;;AAEjC,IAAA,MAAA,EAAQ,SAAS,MAAA;AACjB,IAAA,MAAA,EAAQ,MAAA,CAAO,MAAA;AACf,IAAA,IAAA,EAAM,OAAO,MAAA,CAAA,CAAO,CAAA,KAAK,EAAE,KAAA,KAAU,MAAM,CAAC,CAAC,MAAA;IAC7C,WAAA,EAAA,CAAc,QAAA,CAAS,MAAM,EAAA,CAAA,IAAO,IAAI,MAAA,CAAA,CAAO,MAAK,CAAC;AAAC,KAAA,WAAA;AAAa,KAAA,UAAA;AAAY,KAAA;AAAQ,KAAC,CAAC,QAAA,CAAS,CAAA,CAAE,KAAK,CAAC,CAAC,CAAC;AAC9G,IAAA;EACF,CAAC,CAAA;AAED,EAAAC,SAAA,CAAQ,EAAE,KAAA,EAAA,MAAa,CAAA,CAAE,iBAAiB,GAAG,CAAA;;;;;;;;;;;GAItC,KAAA,CAAA,CAAA,IAAA,EAAA,cAAA,CAAA,UAAA,CAAA,EAAA,KAAA,EAAM,QAAM,EAAA,MAAA,CAAA,CAAA,CAAA,iBAAA,CAAA,CAAA;AAGN,GAAA,IAAA,CAAA,KAAA,CAAA,SAAA,CAAS,CAAC,UAAA,EAAU;;AAGnB,IAAA,KAAA,CAAA,kBAAA,CAAA,iBAAA,EAAA,EAAA,KAAA,EAAM,aAAW,EAAA;AAAzB,KAAA,OAAA,EAAA,OAAA,CAAA,CAqGS,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,KAAA;;AAjGAC,OAAAA,KAAAA,CAAAA,CAAAA,oCAAAA,EAAAA,QAAAA,CAAAA,iDAAAA,EAAAA,QAAAA,CAAAA,CAAAA,EAAAA,cAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,mBAAA,CAAA,CAAA,CAAA,mCAAA,EAAA,SAAA,+EAAA,CAAA,CAAA;;AAKO,QAAA,YAAA,EAAY,MAAA,OAAA,CAAA;AAAA,QAAA,oBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,OAAA,CAAA,GAAA,OAAA,CAAO,QAAA,MAAA,GAAA;;AAAnC,QAAA,OAAA,EAAA,OAAA,CAAA,CA2FS,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,KAAA;;;WAzFL,GAAA,EAAI,OAAA;WACJ,GAAA,EAAI;;AAFN,WAAA,OAAA,EAAA,OAAA,CAAA,CA+Ba,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,KAAA;;aA1BT,SAAA,EAAU,UAAA;aACV,KAAA,EAAA,EAAA,SAAA,MAAA;;AAFF,aAAA,OAAA,EAAA,OAAA,CAAA,CA0BU,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,KAAA;;;AArBE,gBAAA,KAAA,EAAO,MAAA,SAAA,CAAA;AAAA,gBAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,SAAA,CAAA,GAAA,SAAA,CAAS,QAAA,MAAA,GAAA,IAAA;gBACxB,IAAA,EAAK,OAAA;gBACJ,WAAA,EAAaA,IAAAA,CAAAA,GAAE,kBAAA,CAAA;gBACf,SAAA,EAAe;;;AAGR,gBAAA,KAAA,EAAO,MAAA,YAAA,CAAA;AAAA,gBAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,YAAA,CAAA,GAAA,YAAA,CAAY,QAAA,MAAA,GAAA,IAAA;gBAC1B,WAAA,EAAaA,IAAAA,CAAAA,GAAE,kBAAA,CAAA;gBACf,SAAA,EAAe;;;gBAGhB,IAAA,EAAK,SAAA;gBACL,KAAA,EAAA,EAAA;AACC,gBAAA,OAAA,EAAS,MAAA,WAAA,CAAA;gBACT,OAAA,EAAO;;AAJV,gBAAA,OAAA,EAAA,OAAA,CAAA,CAOW,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,KAAA;iBADNA,IAAAA,KAAAA,EAAAA,MAAAA,CAAAA,EAAAA,cAAAA,CAAAA,KAAAA,EAAAA,CAAE,kBAAA,CAAA,CAAA,CAAA,CAAA,CAAA;sBAAFA,OAAAA,CAAAA,gBAAAA,eAAAA,CAAAA,IAAAA,CAAAA,GAAE,kBAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA;;;;eAGFA,KAAAA,CAAAA,CAAAA,+BAAAA,EAAAA,SAAAA,CAAAA,EAAAA,cAAAA,CAAAA,KAAAA,EAAAA,CAAE,oBAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA;;AApBP,eAAA,WAAA,CAKE,kBAAA,EAAA;AAJQ,gBAAA,KAAA,EAAO,MAAA,SAAA,CAAA;AAAA,gBAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,SAAA,CAAA,GAAA,SAAA,CAAS,QAAA,MAAA,GAAA,IAAA;gBACxB,IAAA,EAAK,OAAA;gBACJ,WAAA,EAAaA,IAAAA,CAAAA,GAAE,kBAAA,CAAA;AACf,gBAAA,SAAA,EAAO,QAAA,CAAQ,OAAA,EAAO,CAAA,OAAA,CAAA;;;;;;AAEzB,eAAA,WAAA,CAIE,2BAAA,EAAA;AAHQ,gBAAA,KAAA,EAAO,MAAA,YAAA,CAAA;AAAA,gBAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,YAAA,CAAA,GAAA,YAAA,CAAY,QAAA,MAAA,GAAA,IAAA;gBAC1B,WAAA,EAAaA,IAAAA,CAAAA,GAAE,kBAAA,CAAA;AACf,gBAAA,SAAA,EAAO,QAAA,CAAQ,OAAA,EAAO,CAAA,OAAA,CAAA;;;;;;AAEzB,eAAA,WAAA,CAOW,mBAAA,EAAA;gBANT,IAAA,EAAK,SAAA;gBACL,KAAA,EAAA,EAAA;AACC,gBAAA,OAAA,EAAS,MAAA,WAAA,CAAA;gBACT,OAAA,EAAO;;gBAER,OAAA,EAAA,OAAA,CAAA,MAA4B,CAAzBA,eAAAA,CAAAA,eAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,kBAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;;;eAEP,WAAA,CAEI,GAAA,EAAA,EAFD,KAAA,EAAM,MAAA,EAAM,EAAA,eAAA,CACVA,IAAAA,CAAAA,EAAAA,CAAE,oBAAA,CAAA,CAAA,EAAA,CAAA;;;;;iBAxBT,OAAA,CAAA,YA0BU,kBAAA,EAAA;aAzBR,SAAA,EAAU,UAAA;aACV,KAAA,EAAA,EAAA,SAAA,MAAA;;AAEA,aAAA,OAAA,EAAA,OAAA,CAAA,MAKE;AALF,cAAA,WAAA,CAKE,kBAAA,EAAA;AAJQ,eAAA,KAAA,EAAO,MAAA,SAAA,CAAA;AAAA,eAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,SAAA,CAAA,GAAA,SAAA,CAAS,QAAA,MAAA,GAAA,IAAA;eACxB,IAAA,EAAK,OAAA;eACJ,WAAA,EAAaA,IAAAA,CAAAA,GAAE,kBAAA,CAAA;AACf,eAAA,SAAA,EAAO,QAAA,CAAQ,OAAA,EAAO,CAAA,OAAA,CAAA;;;;;;AAEzB,cAAA,WAAA,CAIE,2BAAA,EAAA;AAHQ,eAAA,KAAA,EAAO,MAAA,YAAA,CAAA;AAAA,eAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,YAAA,CAAA,GAAA,YAAA,CAAY,QAAA,MAAA,GAAA,IAAA;eAC1B,WAAA,EAAaA,IAAAA,CAAAA,GAAE,kBAAA,CAAA;AACf,eAAA,SAAA,EAAO,QAAA,CAAQ,OAAA,EAAO,CAAA,OAAA,CAAA;;;;;;AAEzB,cAAA,WAAA,CAOW,mBAAA,EAAA;eANT,IAAA,EAAK,SAAA;eACL,KAAA,EAAA,EAAA;AACC,eAAA,OAAA,EAAS,MAAA,WAAA,CAAA;eACT,OAAA,EAAO;;eAER,OAAA,EAAA,OAAA,CAAA,MAA4B,CAAzBA,eAAAA,CAAAA,eAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,kBAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;;;cAEP,WAAA,CAEI,GAAA,EAAA,EAFD,KAAA,EAAM,MAAA,EAAM,EAAA,eAAA,CACVA,IAAAA,CAAAA,EAAAA,CAAE,oBAAA,CAAA,CAAA,EAAA,CAAA;;;;;;;;WAKT,GAAA,EAAI,UAAA;WACJ,GAAA,EAAI;;AAFN,WAAA,OAAA,EAAA,OAAA,CAAA,CAkCa,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,KAAA;;aA7BT,SAAA,EAAU,UAAA;aACV,KAAA,EAAA,EAAA,SAAA,MAAA;;AAFF,aAAA,OAAA,EAAA,OAAA,CAAA,CA6BU,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,KAAA;;;AAxBE,gBAAA,KAAA,EAAO,MAAA,QAAA,CAAA;AAAA,gBAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,QAAA,CAAA,GAAA,QAAA,CAAQ,QAAA,MAAA,GAAA,IAAA;gBACtB,WAAA,EAAaA,IAAAA,CAAAA,GAAE,mBAAA;;;AAGR,gBAAA,KAAA,EAAO,MAAA,SAAA,CAAA;AAAA,gBAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,SAAA,CAAA,GAAA,SAAA,CAAS,QAAA,MAAA,GAAA,IAAA;gBACxB,IAAA,EAAK,OAAA;gBACJ,WAAA,EAAaA,IAAAA,CAAAA,GAAE,mBAAA;;;AAGR,gBAAA,KAAA,EAAO,MAAA,YAAA,CAAA;AAAA,gBAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,YAAA,CAAA,GAAA,YAAA,CAAY,QAAA,MAAA,GAAA,IAAA;gBAC1B,WAAA,EAAaA,IAAAA,CAAAA,GAAE,mBAAA,CAAA;gBACf,SAAA,EAAe;;;gBAGhB,IAAA,EAAK,SAAA;gBACL,KAAA,EAAA,EAAA;AACC,gBAAA,OAAA,EAAS,MAAA,WAAA,CAAA;gBACT,OAAA,EAAO;;AAJV,gBAAA,OAAA,EAAA,OAAA,CAAA,CAOW,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,KAAA;iBADNA,IAAAA,KAAAA,EAAAA,MAAAA,CAAAA,EAAAA,cAAAA,CAAAA,KAAAA,EAAAA,CAAE,oBAAA,CAAA,CAAA,CAAA,CAAA,CAAA;sBAAFA,OAAAA,CAAAA,gBAAAA,eAAAA,CAAAA,IAAAA,CAAAA,GAAE,oBAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA;;;;eAGFA,KAAAA,CAAAA,CAAAA,+BAAAA,EAAAA,SAAAA,CAAAA,EAAAA,cAAAA,CAAAA,KAAAA,EAAAA,CAAE,oBAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA;;AAvBP,eAAA,WAAA,CAGE,kBAAA,EAAA;AAFQ,gBAAA,KAAA,EAAO,MAAA,QAAA,CAAA;AAAA,gBAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,QAAA,CAAA,GAAA,QAAA,CAAQ,QAAA,MAAA,GAAA,IAAA;gBACtB,WAAA,EAAaA,IAAAA,CAAAA,GAAE,mBAAA;;;;;;AAElB,eAAA,WAAA,CAIE,kBAAA,EAAA;AAHQ,gBAAA,KAAA,EAAO,MAAA,SAAA,CAAA;AAAA,gBAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,SAAA,CAAA,GAAA,SAAA,CAAS,QAAA,MAAA,GAAA,IAAA;gBACxB,IAAA,EAAK,OAAA;gBACJ,WAAA,EAAaA,IAAAA,CAAAA,GAAE,mBAAA;;;;;;AAElB,eAAA,WAAA,CAIE,2BAAA,EAAA;AAHQ,gBAAA,KAAA,EAAO,MAAA,YAAA,CAAA;AAAA,gBAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,YAAA,CAAA,GAAA,YAAA,CAAY,QAAA,MAAA,GAAA,IAAA;gBAC1B,WAAA,EAAaA,IAAAA,CAAAA,GAAE,mBAAA,CAAA;AACf,gBAAA,SAAA,EAAO,QAAA,CAAQ,UAAA,EAAU,CAAA,OAAA,CAAA;;;;;;AAE5B,eAAA,WAAA,CAOW,mBAAA,EAAA;gBANT,IAAA,EAAK,SAAA;gBACL,KAAA,EAAA,EAAA;AACC,gBAAA,OAAA,EAAS,MAAA,WAAA,CAAA;gBACT,OAAA,EAAO;;gBAER,OAAA,EAAA,OAAA,CAAA,MAA8B,CAA3BA,eAAAA,CAAAA,eAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,oBAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;;;eAEP,WAAA,CAEI,GAAA,EAAA,EAFD,KAAA,EAAM,MAAA,EAAM,EAAA,eAAA,CACVA,IAAAA,CAAAA,EAAAA,CAAE,oBAAA,CAAA,CAAA,EAAA,CAAA;;;;;iBA3BT,OAAA,CAAA,YA6BU,kBAAA,EAAA;aA5BR,SAAA,EAAU,UAAA;aACV,KAAA,EAAA,EAAA,SAAA,MAAA;;AAEA,aAAA,OAAA,EAAA,OAAA,CAAA,MAGE;AAHF,cAAA,WAAA,CAGE,kBAAA,EAAA;AAFQ,eAAA,KAAA,EAAO,MAAA,QAAA,CAAA;AAAA,eAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,QAAA,CAAA,GAAA,QAAA,CAAQ,QAAA,MAAA,GAAA,IAAA;eACtB,WAAA,EAAaA,IAAAA,CAAAA,GAAE,mBAAA;;;;;;AAElB,cAAA,WAAA,CAIE,kBAAA,EAAA;AAHQ,eAAA,KAAA,EAAO,MAAA,SAAA,CAAA;AAAA,eAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,SAAA,CAAA,GAAA,SAAA,CAAS,QAAA,MAAA,GAAA,IAAA;eACxB,IAAA,EAAK,OAAA;eACJ,WAAA,EAAaA,IAAAA,CAAAA,GAAE,mBAAA;;;;;;AAElB,cAAA,WAAA,CAIE,2BAAA,EAAA;AAHQ,eAAA,KAAA,EAAO,MAAA,YAAA,CAAA;AAAA,eAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,YAAA,CAAA,GAAA,YAAA,CAAY,QAAA,MAAA,GAAA,IAAA;eAC1B,WAAA,EAAaA,IAAAA,CAAAA,GAAE,mBAAA,CAAA;AACf,eAAA,SAAA,EAAO,QAAA,CAAQ,UAAA,EAAU,CAAA,OAAA,CAAA;;;;;;AAE5B,cAAA,WAAA,CAOW,mBAAA,EAAA;eANT,IAAA,EAAK,SAAA;eACL,KAAA,EAAA,EAAA;AACC,eAAA,OAAA,EAAS,MAAA,WAAA,CAAA;eACT,OAAA,EAAO;;eAER,OAAA,EAAA,OAAA,CAAA,MAA8B,CAA3BA,eAAAA,CAAAA,eAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,oBAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;;;cAEP,WAAA,CAEI,GAAA,EAAA,EAFD,KAAA,EAAM,MAAA,EAAM,EAAA,eAAA,CACVA,IAAAA,CAAAA,EAAAA,CAAE,oBAAA,CAAA,CAAA,EAAA,CAAA;;;;;;;;WAKT,GAAA,EAAI,OAAA;WACJ,GAAA,EAAI;;AAFN,WAAA,OAAA,EAAA,OAAA,CAAA,CAsBa,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,KAAA;;aAjBT,SAAA,EAAU,UAAA;aACV,KAAA,EAAA,EAAA,SAAA,MAAA;;AAFF,aAAA,OAAA,EAAA,OAAA,CAAA,CAiBU,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,KAAA;;;AAZE,gBAAA,KAAA,EAAO,MAAA,cAAA,CAAA;AAAA,gBAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,cAAA,CAAA,GAAA,cAAA,CAAc,QAAA,MAAA,GAAA,IAAA;gBAC5B,WAAA,EAAaA,IAAAA,CAAAA,GAAE,oBAAA,CAAA;gBACf,SAAA,EAAe;;;gBAGhB,IAAA,EAAK,SAAA;gBACL,KAAA,EAAA,EAAA;AACC,gBAAA,OAAA,EAAS,MAAA,WAAA,CAAA;gBACT,OAAA,EAAO;;AAJV,gBAAA,OAAA,EAAA,OAAA,CAAA,CAOW,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,KAAA;iBADNA,IAAAA,KAAAA,EAAAA,MAAAA,CAAAA,EAAAA,cAAAA,CAAAA,KAAAA,EAAAA,CAAE,kBAAA,CAAA,CAAA,CAAA,CAAA,CAAA;sBAAFA,OAAAA,CAAAA,gBAAAA,eAAAA,CAAAA,IAAAA,CAAAA,GAAE,kBAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA;;;;cAXP,CAAA,MAAA,OAAA,CAAA,WAAA,CAIE,2BAAA,EAAA;AAHQ,eAAA,KAAA,EAAO,MAAA,cAAA,CAAA;AAAA,eAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,cAAA,CAAA,GAAA,cAAA,CAAc,QAAA,MAAA,GAAA,IAAA;eAC5B,WAAA,EAAaA,IAAAA,CAAAA,GAAE,oBAAA,CAAA;AACf,eAAA,SAAA,EAAO,QAAA,CAAQ,gBAAA,EAAgB,CAAA,OAAA,CAAA;;;;;eAElC,CAAA,EAAA,YAOW,mBAAA,EAAA;eANT,IAAA,EAAK,SAAA;eACL,KAAA,EAAA,EAAA;AACC,eAAA,OAAA,EAAS,MAAA,WAAA,CAAA;eACT,OAAA,EAAO;;eAER,OAAA,EAAA,OAAA,CAAA,MAA4B,CAAzBA,eAAAA,CAAAA,eAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,kBAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;;;;;;iBAfT,OAAA,CAAA,YAiBU,kBAAA,EAAA;aAhBR,SAAA,EAAU,UAAA;aACV,KAAA,EAAA,EAAA,SAAA,MAAA;;aAEA,OAAA,EAAA,OAAA,CAAA,MAIE,CAJF,WAAA,CAIE,2BAAA,EAAA;AAHQ,cAAA,KAAA,EAAO,MAAA,cAAA,CAAA;AAAA,cAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,cAAA,CAAA,GAAA,cAAA,CAAc,QAAA,MAAA,GAAA,IAAA;cAC5B,WAAA,EAAaA,IAAAA,CAAAA,GAAE,oBAAA,CAAA;AACf,cAAA,SAAA,EAAO,QAAA,CAAQ,gBAAA,EAAgB,CAAA,OAAA,CAAA;;;;;cAElC,CAAA,EAAA,YAOW,mBAAA,EAAA;cANT,IAAA,EAAK,SAAA;cACL,KAAA,EAAA,EAAA;AACC,cAAA,OAAA,EAAS,MAAA,WAAA,CAAA;cACT,OAAA,EAAO;;cAER,OAAA,EAAA,OAAA,CAAA,MAA4B,CAAzBA,eAAAA,CAAAA,eAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,kBAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;;;;;;;;;AAtFX,UAAA,WAAA,CA+Ba,qBAAA,EAAA;WA9BX,GAAA,EAAI,OAAA;WACJ,GAAA,EAAI;;WAEJ,OAAA,EAAA,OAAA,CAAA,MA0BU,CA1BV,WAAA,CA0BU,kBAAA,EAAA;YAzBR,SAAA,EAAU,UAAA;YACV,KAAA,EAAA,EAAA,SAAA,MAAA;;AAEA,YAAA,OAAA,EAAA,OAAA,CAAA,MAKE;AALF,aAAA,WAAA,CAKE,kBAAA,EAAA;AAJQ,cAAA,KAAA,EAAO,MAAA,SAAA,CAAA;AAAA,cAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,SAAA,CAAA,GAAA,SAAA,CAAS,QAAA,MAAA,GAAA,IAAA;cACxB,IAAA,EAAK,OAAA;cACJ,WAAA,EAAaA,IAAAA,CAAAA,GAAE,kBAAA,CAAA;AACf,cAAA,SAAA,EAAO,QAAA,CAAQ,OAAA,EAAO,CAAA,OAAA,CAAA;;;;;;AAEzB,aAAA,WAAA,CAIE,2BAAA,EAAA;AAHQ,cAAA,KAAA,EAAO,MAAA,YAAA,CAAA;AAAA,cAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,YAAA,CAAA,GAAA,YAAA,CAAY,QAAA,MAAA,GAAA,IAAA;cAC1B,WAAA,EAAaA,IAAAA,CAAAA,GAAE,kBAAA,CAAA;AACf,cAAA,SAAA,EAAO,QAAA,CAAQ,OAAA,EAAO,CAAA,OAAA,CAAA;;;;;;AAEzB,aAAA,WAAA,CAOW,mBAAA,EAAA;cANT,IAAA,EAAK,SAAA;cACL,KAAA,EAAA,EAAA;AACC,cAAA,OAAA,EAAS,MAAA,WAAA,CAAA;cACT,OAAA,EAAO;;cAER,OAAA,EAAA,OAAA,CAAA,MAA4B,CAAzBA,eAAAA,CAAAA,eAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,kBAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;;;aAEP,WAAA,CAEI,GAAA,EAAA,EAFD,KAAA,EAAM,MAAA,EAAM,EAAA,eAAA,CACVA,IAAAA,CAAAA,EAAAA,CAAE,oBAAA,CAAA,CAAA,EAAA,CAAA;;;;;;AAIX,UAAA,WAAA,CAkCa,qBAAA,EAAA;WAjCX,GAAA,EAAI,UAAA;WACJ,GAAA,EAAI;;WAEJ,OAAA,EAAA,OAAA,CAAA,MA6BU,CA7BV,WAAA,CA6BU,kBAAA,EAAA;YA5BR,SAAA,EAAU,UAAA;YACV,KAAA,EAAA,EAAA,SAAA,MAAA;;AAEA,YAAA,OAAA,EAAA,OAAA,CAAA,MAGE;AAHF,aAAA,WAAA,CAGE,kBAAA,EAAA;AAFQ,cAAA,KAAA,EAAO,MAAA,QAAA,CAAA;AAAA,cAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,QAAA,CAAA,GAAA,QAAA,CAAQ,QAAA,MAAA,GAAA,IAAA;cACtB,WAAA,EAAaA,IAAAA,CAAAA,GAAE,mBAAA;;;;;;AAElB,aAAA,WAAA,CAIE,kBAAA,EAAA;AAHQ,cAAA,KAAA,EAAO,MAAA,SAAA,CAAA;AAAA,cAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,SAAA,CAAA,GAAA,SAAA,CAAS,QAAA,MAAA,GAAA,IAAA;cACxB,IAAA,EAAK,OAAA;cACJ,WAAA,EAAaA,IAAAA,CAAAA,GAAE,mBAAA;;;;;;AAElB,aAAA,WAAA,CAIE,2BAAA,EAAA;AAHQ,cAAA,KAAA,EAAO,MAAA,YAAA,CAAA;AAAA,cAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,YAAA,CAAA,GAAA,YAAA,CAAY,QAAA,MAAA,GAAA,IAAA;cAC1B,WAAA,EAAaA,IAAAA,CAAAA,GAAE,mBAAA,CAAA;AACf,cAAA,SAAA,EAAO,QAAA,CAAQ,UAAA,EAAU,CAAA,OAAA,CAAA;;;;;;AAE5B,aAAA,WAAA,CAOW,mBAAA,EAAA;cANT,IAAA,EAAK,SAAA;cACL,KAAA,EAAA,EAAA;AACC,cAAA,OAAA,EAAS,MAAA,WAAA,CAAA;cACT,OAAA,EAAO;;cAER,OAAA,EAAA,OAAA,CAAA,MAA8B,CAA3BA,eAAAA,CAAAA,eAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,oBAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;;;aAEP,WAAA,CAEI,GAAA,EAAA,EAFD,KAAA,EAAM,MAAA,EAAM,EAAA,eAAA,CACVA,IAAAA,CAAAA,EAAAA,CAAE,oBAAA,CAAA,CAAA,EAAA,CAAA;;;;;;AAIX,UAAA,WAAA,CAsBa,qBAAA,EAAA;WArBX,GAAA,EAAI,OAAA;WACJ,GAAA,EAAI;;WAEJ,OAAA,EAAA,OAAA,CAAA,MAiBU,CAjBV,WAAA,CAiBU,kBAAA,EAAA;YAhBR,SAAA,EAAU,UAAA;YACV,KAAA,EAAA,EAAA,SAAA,MAAA;;YAEA,OAAA,EAAA,OAAA,CAAA,MAIE,CAJF,WAAA,CAIE,2BAAA,EAAA;AAHQ,aAAA,KAAA,EAAO,MAAA,cAAA,CAAA;AAAA,aAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,cAAA,CAAA,GAAA,cAAA,CAAc,QAAA,MAAA,GAAA,IAAA;aAC5B,WAAA,EAAaA,IAAAA,CAAAA,GAAE,oBAAA,CAAA;AACf,aAAA,SAAA,EAAO,QAAA,CAAQ,gBAAA,EAAgB,CAAA,OAAA,CAAA;;;;;aAElC,CAAA,EAAA,YAOW,mBAAA,EAAA;aANT,IAAA,EAAK,SAAA;aACL,KAAA,EAAA,EAAA;AACC,aAAA,OAAA,EAAS,MAAA,WAAA,CAAA;aACT,OAAA,EAAO;;aAER,OAAA,EAAA,OAAA,CAAA,MAA4B,CAAzBA,eAAAA,CAAAA,eAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,kBAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;AA/Fb,OAAA,WAAA,CAEI,GAAA,EAAA,EAFD,KAAA,EAAM,WAAA,IAAY,2BAErB,CAAA;OACA,WAAA,CAAsC,IAAA,EAAA,MAAA,eAAA,CAA/BA,IAAAA,CAAAA,GAAE,mBAAA,CAAA,GAAA,CAAA,CAAA;AACT,OAAA,WAAA,CAGI,GAAA,EAAA,EAHD,KAAA,EAAM,KAAA,IAAM,4EAGf,CAAA;AACA,OAAA,WAAA,CA2FS,iBAAA,EAAA;AA3FO,QAAA,YAAA,EAAY,MAAA,OAAA,CAAA;AAAA,QAAA,oBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,OAAA,CAAA,GAAA,OAAA,CAAO,QAAA,MAAA,GAAA;;AACjC,QAAA,OAAA,EAAA,OAAA,CAAA,MA+Ba;AA/Bb,SAAA,WAAA,CA+Ba,qBAAA,EAAA;UA9BX,GAAA,EAAI,OAAA;UACJ,GAAA,EAAI;;UAEJ,OAAA,EAAA,OAAA,CAAA,MA0BU,CA1BV,WAAA,CA0BU,kBAAA,EAAA;WAzBR,SAAA,EAAU,UAAA;WACV,KAAA,EAAA,EAAA,SAAA,MAAA;;AAEA,WAAA,OAAA,EAAA,OAAA,CAAA,MAKE;AALF,YAAA,WAAA,CAKE,kBAAA,EAAA;AAJQ,aAAA,KAAA,EAAO,MAAA,SAAA,CAAA;AAAA,aAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,SAAA,CAAA,GAAA,SAAA,CAAS,QAAA,MAAA,GAAA,IAAA;aACxB,IAAA,EAAK,OAAA;aACJ,WAAA,EAAaA,IAAAA,CAAAA,GAAE,kBAAA,CAAA;AACf,aAAA,SAAA,EAAO,QAAA,CAAQ,OAAA,EAAO,CAAA,OAAA,CAAA;;;;;;AAEzB,YAAA,WAAA,CAIE,2BAAA,EAAA;AAHQ,aAAA,KAAA,EAAO,MAAA,YAAA,CAAA;AAAA,aAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,YAAA,CAAA,GAAA,YAAA,CAAY,QAAA,MAAA,GAAA,IAAA;aAC1B,WAAA,EAAaA,IAAAA,CAAAA,GAAE,kBAAA,CAAA;AACf,aAAA,SAAA,EAAO,QAAA,CAAQ,OAAA,EAAO,CAAA,OAAA,CAAA;;;;;;AAEzB,YAAA,WAAA,CAOW,mBAAA,EAAA;aANT,IAAA,EAAK,SAAA;aACL,KAAA,EAAA,EAAA;AACC,aAAA,OAAA,EAAS,MAAA,WAAA,CAAA;aACT,OAAA,EAAO;;aAER,OAAA,EAAA,OAAA,CAAA,MAA4B,CAAzBA,eAAAA,CAAAA,eAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,kBAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;;;YAEP,WAAA,CAEI,GAAA,EAAA,EAFD,KAAA,EAAM,MAAA,EAAM,EAAA,eAAA,CACVA,IAAAA,CAAAA,EAAAA,CAAE,oBAAA,CAAA,CAAA,EAAA,CAAA;;;;;;AAIX,SAAA,WAAA,CAkCa,qBAAA,EAAA;UAjCX,GAAA,EAAI,UAAA;UACJ,GAAA,EAAI;;UAEJ,OAAA,EAAA,OAAA,CAAA,MA6BU,CA7BV,WAAA,CA6BU,kBAAA,EAAA;WA5BR,SAAA,EAAU,UAAA;WACV,KAAA,EAAA,EAAA,SAAA,MAAA;;AAEA,WAAA,OAAA,EAAA,OAAA,CAAA,MAGE;AAHF,YAAA,WAAA,CAGE,kBAAA,EAAA;AAFQ,aAAA,KAAA,EAAO,MAAA,QAAA,CAAA;AAAA,aAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,QAAA,CAAA,GAAA,QAAA,CAAQ,QAAA,MAAA,GAAA,IAAA;aACtB,WAAA,EAAaA,IAAAA,CAAAA,GAAE,mBAAA;;;;;;AAElB,YAAA,WAAA,CAIE,kBAAA,EAAA;AAHQ,aAAA,KAAA,EAAO,MAAA,SAAA,CAAA;AAAA,aAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,SAAA,CAAA,GAAA,SAAA,CAAS,QAAA,MAAA,GAAA,IAAA;aACxB,IAAA,EAAK,OAAA;aACJ,WAAA,EAAaA,IAAAA,CAAAA,GAAE,mBAAA;;;;;;AAElB,YAAA,WAAA,CAIE,2BAAA,EAAA;AAHQ,aAAA,KAAA,EAAO,MAAA,YAAA,CAAA;AAAA,aAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,YAAA,CAAA,GAAA,YAAA,CAAY,QAAA,MAAA,GAAA,IAAA;aAC1B,WAAA,EAAaA,IAAAA,CAAAA,GAAE,mBAAA,CAAA;AACf,aAAA,SAAA,EAAO,QAAA,CAAQ,UAAA,EAAU,CAAA,OAAA,CAAA;;;;;;AAE5B,YAAA,WAAA,CAOW,mBAAA,EAAA;aANT,IAAA,EAAK,SAAA;aACL,KAAA,EAAA,EAAA;AACC,aAAA,OAAA,EAAS,MAAA,WAAA,CAAA;aACT,OAAA,EAAO;;aAER,OAAA,EAAA,OAAA,CAAA,MAA8B,CAA3BA,eAAAA,CAAAA,eAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,oBAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;;;YAEP,WAAA,CAEI,GAAA,EAAA,EAFD,KAAA,EAAM,MAAA,EAAM,EAAA,eAAA,CACVA,IAAAA,CAAAA,EAAAA,CAAE,oBAAA,CAAA,CAAA,EAAA,CAAA;;;;;;AAIX,SAAA,WAAA,CAsBa,qBAAA,EAAA;UArBX,GAAA,EAAI,OAAA;UACJ,GAAA,EAAI;;UAEJ,OAAA,EAAA,OAAA,CAAA,MAiBU,CAjBV,WAAA,CAiBU,kBAAA,EAAA;WAhBR,SAAA,EAAU,UAAA;WACV,KAAA,EAAA,EAAA,SAAA,MAAA;;WAEA,OAAA,EAAA,OAAA,CAAA,MAIE,CAJF,WAAA,CAIE,2BAAA,EAAA;AAHQ,YAAA,KAAA,EAAO,MAAA,cAAA,CAAA;AAAA,YAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,cAAA,CAAA,GAAA,cAAA,CAAc,QAAA,MAAA,GAAA,IAAA;YAC5B,WAAA,EAAaA,IAAAA,CAAAA,GAAE,oBAAA,CAAA;AACf,YAAA,SAAA,EAAO,QAAA,CAAQ,gBAAA,EAAgB,CAAA,OAAA,CAAA;;;;;YAElC,CAAA,EAAA,YAOW,mBAAA,EAAA;YANT,IAAA,EAAK,SAAA;YACL,KAAA,EAAA,EAAA;AACC,YAAA,OAAA,EAAS,MAAA,WAAA,CAAA;YACT,OAAA,EAAO;;YAER,OAAA,EAAA,OAAA,CAAA,MAA4B,CAAzBA,eAAAA,CAAAA,eAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,kBAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;IAeKA,KAAAA,CAAAA,CAAAA,kKAAAA,EAAAA,cAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,mBAAA,CAAA,CAAA,CAAA,oCAAA,EAEb,cAAA,CAAA,KAAA,CAAA,SAAA,CAAS,CAAC,IAAA,EAAM,IAAI,CAAA,CAAA,CAAA,EAAOA,cAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,mBAAA,CAAA,CAAA,CAAA,+IAAA,EAU3BA,cAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,mBAAA,CAAA,EAAA,gEAAA,EAOFA,cAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,mBAAA,CAAA,CAAA,CAAA,yEAAA,EAOMA,cAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,kBAAA,CAAA,CAAA,CAAA,2IAAA,EAcVA,cAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,kBAAA,CAAA,CAAA,CAAA,qHAAA,EAQJA,cAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,cAAA,CAAA,CAAA,CAAA,qBAAA,CAAA,CAAA;IAKF,KAAA,CAAA,kBAAA,CAAA,mBAAA,EAAA,QAAA,EAAQ,CAAG,KAAA,CAAA,KAAA,GAAA,EAAA;AAApB,KAAA,OAAA,EAAA,OAAA,CAAA,CA8DS,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,KAAA;;;AA3DU,OAAA,aAAA,CAAA,KAAA,CAAA,OAAA,CAAO,CAAC,aAAd,EAAA,KAAE;AAMe,QAAA,KAAA,CAAA,oCAAA,QAAA,CAAA,uCAAA,EAAA,QAAA,CAAA,wCAAA,EAAA,SAAA,2CAAA,EAAA,QAAA,CAAA,iDAAA,EAAA,QAAA,CAAA,GAAA,cAAA,CAAA,EAAA,CAAG,IAAI,CAAA,CAAA,mDAAA,EAAA,SAAA,SAAA,CAAA,CAAA;AAId,QAAA,aAAA,CAAA,cAAA,CAAe,EAAA,CAAG,UAAU,CAAA,EAAA,CAAlC,EAAA,KAAE;SAOS,KAAA,CAAA,CAAA,mCAAA,EAAA,QAAA,CAAA,cAAA,EAAA,cAAA,CAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAG,WAAA,GAAW,CAAA,EAAA,EAAA,KAAA,CAAA,CAAA,CAAA,iBAAA,EAAA,QAAA,CAAA,6CAAA,EAAA,QAAA,CAAA,CAAA,EAEP,cAAA,CAAA,EAAA,CAAG,IAAI,CAAA,CAAA,4CAAA,EAAA,QAAA,CAAA,CAAA,CAAA,CAAA;AAEd,SAAA,IAAA,EAAA,CAAG,MAAA,EAAA,KAAA,CAAA,CAAA,QAAA,EAAW,eAAA,EAAA,CAAG,MAAM,CAAA,CAAA,CAAA,EAAOA,cAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,oBAAA,CAAA,CAAA,CAAA,CAAA,EAA6B,cAAA,CAAA,EAAA,CAAG,IAAI,CAAA,CAAA,GAAA,EAASA,cAAAA,CAAAA,KAAAA,EAAAA,CAAE,kBAAA,CAAA,CAAA,CAAA,CAAA,EAA2B,cAAA,CAAA,EAAA,CAAG,WAAW,EAAA,QAAA,CAAA,CAAA;AACpHA,cAAAA,KAAAA,CAAAA,WAAAA,cAAAA,CAAAA,IAAAA,CAAAA,GAAE,oBAAA,CAAA,EAAA,QAAA,CAAA,CAAA;;;;AAIlB,QAAA,IAAA,EAAA,CAAG,UAAA,CAAW,MAAA,KAAM,CAAA,EAAA,MAAA,CAAA,kCAAA,EAAA,QAAA,CAAA,CAAA,EAGvBA,cAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,oBAAA,CAAA,EAAA,MAAA,CAAA,CAAA;;AASFA,QAAAA,KAAAA,CAAAA,+CAAAA,QAAAA,CAAAA,mDAAAA,EAAAA,QAAAA,CAAAA,0DAAAA,EAAAA,SAAAA,SAAAA,EAAAA,cAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,mBAAA,CAAA,CAAA,CAAA,2EAAA,QAAA,CAAA,sDAAA,EAAA,SAAA,6BAAA,CAAA,CAAA;;;AAaH,OAAA,IAAA,MAAA,OAAA,CAAO,CAAC,UAAA,CAAW,WAAM,CAAA,IAAU,KAAA,CAAA,KAAA,CAAA,EAAA,MAAA,CAAA,6CAAA,EAAA,QAAA,CAAA,kDAAA,QAAA,CAAA,6BAAA,EAAA,SAAA,6BAAA,CAAA,CAAA;;;MArD7C,CAAA,MAAA,OAAA,CAAA,WAAA,CA4DM,KAAA,EAAA,EA5DD,KAAA,EAAM,MAAA,IAAM,EACf,SAAA,CAAA,IAAA,CAAA,EAAA,WAAA,CAiDM,UAAA,IAAA,EAAA,UAAA,CAhDS,MAAA,OAAA,CAAO,CAAC,UAAA,EAAA,CAAd,EAAA,KAAE;OADX,OAAA,SAAA,EAAA,EAAA,WAAA,CAiDM,KAAA,EAAA;AA/CH,QAAA,GAAA,EAAK,EAAA,CAAG,EAAA;QACT,KAAA,EAAM;;AAEN,QAAA,WAAA,CAGM,KAAA,EAAA,EAHD,KAAA,EAAM,WAAA,IAAW,CACpB,WAAA,CAA4D,MAAA,EAAA,EAAtD,OAAM,WAAA,EAAW,EAAA,CAAC,WAAA,CAA6B,QAAA,EAAvB,KAAA,EAAM,cAAA,EAAc,CAAA,CAAA,CAAA,EAClD,WAAA,CAAuC,QAAA,EAAjC,KAAA,EAAM,MAAA,EAAM,EAAA,gBAAI,EAAA,CAAG,IAAI,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AAE/B,QAAA,WAAA,CAuBM,OAAA,EAvBD,KAAA,EAAM,WAAA,EAAW,EAAA,EACpB,SAAA,CAAA,IAAA,CAAA,EAAA,WAAA,CAeM,UAAA,IAAA,EAAA,UAAA,CAdS,eAAe,EAAA,CAAG,UAAU,IAAlC,EAAA,KAAE;SADX,OAAA,SAAA,EAAA,EAAA,WAAA,CAeM,KAAA,EAAA;AAbH,UAAA,GAAA,EAAK,EAAA,CAAG,EAAA;UACT,KAAA,EAAM,QAAA;UACL,OAAA,EAAA,CAAK,MAAA,KAAA,CAAEC,YAAAA,IAAAA,IAAAA,GAAAA,IAAAA,CAAAA,UAAAA,GAAAA,KAAAA,CAAAA,UAAAA,CAAAA,EAAU,CAAA,YAAA,EAAgB,EAAA,CAAG,EAAA,CAAA,CAAE;;AAEvC,UAAA,WAAA,CAGE,MAAA,EAAA,EAFA,KAAA,EAAK,CAAC,OAAK,EAAA,IAAA,EACK,EAAA,CAAG,WAAA,GAAW,CAAA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,CAAA;UAEhC,WAAA,CAA0C,MAAA,EAAA,EAApC,KAAA,EAAM,SAAA,IAAS,eAAA,CAAI,EAAA,CAAG,IAAI,CAAA,EAAA,CAAA,CAAA;AAChC,UAAA,WAAA,CAGO,MAAA,EAAA,EAHD,KAAA,EAAM,SAAA,IAAS,CACH,EAAA,CAAG,MAAA,IAAnB,SAAA,IAAA,WAAA,CAAsJ,QAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,CAAxH,eAAA,CAAA,eAAA,CAAA,EAAA,CAAG,MAAM,CAAA,GAAG,GAAA,GAAC,gBAAGD,IAAAA,CAAAA,EAAAA,CAAE,oBAAA,CAAA,IAAyB,GAAA,GAAC,eAAA,CAAG,EAAA,CAAG,IAAI,IAAG,KAAA,GAAG,eAAA,CAAGA,IAAAA,CAAAA,EAAAA,CAAE,kBAAA,CAAA,CAAA,GAAuB,GAAA,GAAC,gBAAG,EAAA,CAAG,WAAW,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,KACxI,SAAA,IAAA,WAAA,CAA0D,QAAA,EAAA,EAAA,GAAA,EAAA,CAAA,EAAA,EAAA,CAAtCA,eAAAA,CAAAA,gBAAAA,IAAAA,CAAAA,EAAAA,CAAE,oBAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,EAAA,EAAA,CAAA;;QAIlB,CAAA,CAAA,EAAA,GAAA,CAAA,GAAA,EAAA,CAAG,UAAA,CAAW,WAAM,CAAA,IAD5B,SAAA,EAAA,EAAA,WAAA,CAKM,KAAA,EAAA;;SAHJ,KAAA,EAAM;AAEHA,SAAAA,EAAAA,eAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAE,oBAAA,CAAA,CAAA,EAAA,CAAA,CAAA,IAAA,kBAAA,CAAA,EAAA,EAAA,IAAA,CAAA,CAAA,CAAA;AAGT,QAAA,WAAA,CAeM,OAAA,EAfD,KAAA,EAAM,aAAW,EAAA,CACpB,YAMS,QAAA,EAAA;SALP,KAAA,EAAM,oBAAA;SACL,OAAA,EAAA,CAAK,MAAA,KAAA,CAAEC,YAAAA,IAAAA,IAAAA,GAAAA,IAAAA,CAAAA,UAAAA,GAAAA,KAAAA,CAAAA,UAAAA,CAAAA,EAAU,CAAA,YAAA,EAAgB,EAAA,CAAG,EAAA,CAAA,CAAE;SAEvC,EAAA,CAAA,WAAA,CAA4C,MAAA,EAAA,EAAtC,KAAA,EAAM,+BAA6B,CAAA,EAAG,eAAA,CAAA,GAAA,GAC5C,eAAA,CAAGD,IAAAA,CAAAA,GAAE,mBAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAEP,WAAA,CAMS,QAAA,EAAA;SALP,KAAA,EAAM,aAAA;SACN,KAAA,EAAM,cAAA;SACL,OAAA,EAAK,aAAA,CAAA,CAAA,WAAO,MAAA,CAAO,EAAA,CAAG,EAAE,CAAA,EAAA,CAAA,MAAA,CAAA;AAEzB,SAAA,EAAA,CAAA,WAAA,CAAwC,MAAA,EAAA,EAAlC,OAAM,yBAAA,EAAyB,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,CAAA;;AAMnC,MAAA,CAAA,GAAA,GAAA,CAAA,GAAA,KAAA,CAAA,OAAA,CAAO,CAAC,UAAA,CAAW,MAAA,KAAM,CAAA,IAAU,MAAA,KAAA,CAAA,IAD3C,SAAA,EAAA,EAAA,YAOM,KAAA,EAAA;;OALJ,KAAA,EAAM,kBAAA;OACL,OAAA,EAAA,CAAK,MAAA,KAAE,WAAA,KAAA,GAAU;OAElB,EAAA,CAAA,WAAA,CAAkC,MAAA,EAAA,EAA5B,KAAA,EAAM,qBAAmB,CAAA,EAC/B,WAAA,CAA4B,MAAA,EAAA,IAAA,EAAtB,iBAAe,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,IAAA,mBAAA,EAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA;;;;;AAMjB,KAAA,IAAA,EAAM,MAAA,UAAA,CAAA;AAAA,KAAA,eAAA,EAAA,CAAA,WAAA,KAAA,CAAA,UAAA,CAAA,GAAA,UAAA,CAAU,QAAA,MAAA,GAAA,IAAA;KACvB,KAAA,EAAOA,IAAAA,CAAAA,GAAE,cAAA,CAAA;AACT,KAAA,iBAAA,EAAiB,MAAA,aAAA,CAAA;KAClB,SAAA,EAAQ,OAAA;KACR,aAAA,EAAY,IAAA;KACX,IAAA,EAAI;;AANP,KAAA,OAAA,EAAA,OAAA,CAAA,CAaU,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,KAAA;;AAJE,OAAA,KAAA,EAAO,MAAA,UAAA,CAAA;AAAA,OAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,UAAA,CAAA,GAAA,UAAA,CAAU,QAAA,MAAA,GAAA,IAAA;OACxB,WAAA,EAAaA,IAAAA,CAAAA,GAAE,mBAAA,CAAA;OACf,SAAA,EAAe;;WAHlB,OAAA,CAAA,YAIE,kBAAA,EAAA;AAHQ,OAAA,KAAA,EAAO,MAAA,UAAA,CAAA;AAAA,OAAA,gBAAA,EAAA,CAAA,WAAA,KAAA,CAAA,UAAA,CAAA,GAAA,UAAA,CAAU,QAAA,MAAA,GAAA,IAAA;OACxB,WAAA,EAAaA,IAAAA,CAAAA,GAAE,mBAAA,CAAA;AACf,OAAA,SAAA,EAAO,QAAA,CAAQ,MAAA,EAAM,CAAA,OAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;"}