@eternalheart/vue-file-preview 1.3.7 → 1.3.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.
- package/lib/chunks/{index-BI0dSTSM.mjs → index-5Smm2vx0.mjs} +2 -2
- package/lib/chunks/{index-BI0dSTSM.mjs.map → index-5Smm2vx0.mjs.map} +1 -1
- package/lib/chunks/{index-yMb1JUC4.mjs → index-BCkcZs4y.mjs} +2 -2
- package/lib/chunks/{index-yMb1JUC4.mjs.map → index-BCkcZs4y.mjs.map} +1 -1
- package/lib/chunks/{index-DUUsS_T4.mjs → index-BM9FaQUl.mjs} +2 -2
- package/lib/chunks/{index-DUUsS_T4.mjs.map → index-BM9FaQUl.mjs.map} +1 -1
- package/lib/chunks/{index-CcJ5NmY1.mjs → index-BYzQg-jL.mjs} +2 -2
- package/lib/chunks/{index-CcJ5NmY1.mjs.map → index-BYzQg-jL.mjs.map} +1 -1
- package/lib/chunks/{index-DTLDLOGO.mjs → index-BoL1b2w-.mjs} +2 -2
- package/lib/chunks/{index-DTLDLOGO.mjs.map → index-BoL1b2w-.mjs.map} +1 -1
- package/lib/chunks/{index-S_kGRh6H.mjs → index-Bri7VeRx.mjs} +2 -2
- package/lib/chunks/{index-S_kGRh6H.mjs.map → index-Bri7VeRx.mjs.map} +1 -1
- package/lib/chunks/{index-DpAxU2JM.mjs → index-C324a7kV.mjs} +3 -3
- package/lib/chunks/{index-DpAxU2JM.mjs.map → index-C324a7kV.mjs.map} +1 -1
- package/lib/chunks/{index-kBPb_OKm.mjs → index-C7uOM7XL.mjs} +2 -2
- package/lib/chunks/{index-kBPb_OKm.mjs.map → index-C7uOM7XL.mjs.map} +1 -1
- package/lib/chunks/{index-Doy0FvQW.mjs → index-CTsscgqY.mjs} +2 -2
- package/lib/chunks/{index-Doy0FvQW.mjs.map → index-CTsscgqY.mjs.map} +1 -1
- package/lib/chunks/{index-CBCQs1ZC.mjs → index-Ch7AEfnk.mjs} +2 -2
- package/lib/chunks/{index-CBCQs1ZC.mjs.map → index-Ch7AEfnk.mjs.map} +1 -1
- package/lib/chunks/{index-ClxBxmPR.mjs → index-D9wf6m37.mjs} +2 -2
- package/lib/chunks/{index-ClxBxmPR.mjs.map → index-D9wf6m37.mjs.map} +1 -1
- package/lib/chunks/{index-BW61ZRev.mjs → index-DAEQe-RI.mjs} +2 -2
- package/lib/chunks/{index-BW61ZRev.mjs.map → index-DAEQe-RI.mjs.map} +1 -1
- package/lib/chunks/{index-DsznjwsH.mjs → index-DAo-7spn.mjs} +2 -2
- package/lib/chunks/{index-DsznjwsH.mjs.map → index-DAo-7spn.mjs.map} +1 -1
- package/lib/chunks/{index-C8ZF84WX.mjs → index-DXlcF1Dk.mjs} +2 -2
- package/lib/chunks/{index-C8ZF84WX.mjs.map → index-DXlcF1Dk.mjs.map} +1 -1
- package/lib/chunks/{index-SAfVQyNJ.mjs → index-ELyTQZeF.mjs} +3 -3
- package/lib/chunks/{index-SAfVQyNJ.mjs.map → index-ELyTQZeF.mjs.map} +1 -1
- package/lib/chunks/{index-D9lByoJw.mjs → index-cZn4ih-x.mjs} +2 -2
- package/lib/chunks/{index-D9lByoJw.mjs.map → index-cZn4ih-x.mjs.map} +1 -1
- package/lib/chunks/{index-CB0zCxJb.mjs → index-dzB4jd9b.mjs} +2 -2
- package/lib/chunks/{index-CB0zCxJb.mjs.map → index-dzB4jd9b.mjs.map} +1 -1
- package/lib/chunks/{index-CbKSdAt_.mjs → index-lHlugUBI.mjs} +2 -2
- package/lib/chunks/{index-CbKSdAt_.mjs.map → index-lHlugUBI.mjs.map} +1 -1
- package/lib/index.cjs +1 -1
- package/lib/index.mjs +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-DpAxU2JM.mjs","sources":["../../../file-preview-core/lib/index.mjs","../../src/i18n/localeKey.ts","../../src/composables/useTranslator.ts","../../src/composables/useResolvedTheme.ts","../../src/renderers/Image/toolbar.ts","../../src/renderers/Pdf/toolbar.ts","../../src/renderers/Epub/toolbar.ts","../../src/renderers/Mobi/toolbar.ts","../../src/renderers/Zip/toolbar.ts","../../src/renderers/Text/toolbar.ts","../../src/renderers/Markdown/toolbar.ts","../../src/renderers/RendererLoading.vue","../../src/renderers/lazy.ts","../../src/renderers/Unsupported/index.vue","../../src/FilePreviewContent.vue","../../src/composables/useScrollLock.ts","../../src/FilePreviewModal.vue","../../src/FilePreviewEmbed.vue","../../src/index.ts"],"sourcesContent":["import A from \"jszip\";\nfunction j(e) {\n try {\n const n = new URL(e).pathname.split(\"/\").pop() || \"file\";\n return decodeURIComponent(n);\n } catch {\n const t = e.split(\"/\").pop() || \"file\";\n return decodeURIComponent(t);\n }\n}\nfunction k(e) {\n var n;\n const t = ((n = e.split(\".\").pop()) == null ? void 0 : n.toLowerCase()) || \"\";\n return {\n // 图片\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n png: \"image/png\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n svg: \"image/svg+xml\",\n bmp: \"image/bmp\",\n ico: \"image/x-icon\",\n // 视频\n mp4: \"video/mp4\",\n webm: \"video/webm\",\n ogg: \"video/ogg\",\n ogv: \"video/ogg\",\n mov: \"video/quicktime\",\n avi: \"video/x-msvideo\",\n mkv: \"video/x-matroska\",\n m4v: \"video/x-m4v\",\n \"3gp\": \"video/3gpp\",\n flv: \"video/x-flv\",\n // 音频\n mp3: \"audio/mpeg\",\n wav: \"audio/wav\",\n m4a: \"audio/mp4\",\n aac: \"audio/aac\",\n flac: \"audio/flac\",\n // 文档\n pdf: \"application/pdf\",\n docx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n pptx: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n ppt: \"application/vnd.ms-powerpoint\",\n msg: \"application/vnd.ms-outlook\",\n mobi: \"application/x-mobipocket-ebook\",\n azw: \"application/vnd.amazon.ebook\",\n azw3: \"application/vnd.amazon.ebook\",\n kf8: \"application/vnd.amazon.ebook\",\n // 文本\n txt: \"text/plain\",\n md: \"text/markdown\",\n markdown: \"text/markdown\",\n json: \"application/json\",\n xml: \"application/xml\",\n html: \"text/html\",\n css: \"text/css\",\n js: \"text/javascript\",\n ts: \"text/typescript\",\n jsx: \"text/javascript\",\n tsx: \"text/typescript\",\n py: \"text/x-python\",\n java: \"text/x-java\",\n cpp: \"text/x-c++src\",\n c: \"text/x-csrc\",\n cs: \"text/x-csharp\",\n php: \"text/x-php\",\n rb: \"text/x-ruby\",\n go: \"text/x-go\",\n rs: \"text/x-rust\",\n yaml: \"text/yaml\",\n yml: \"text/yaml\",\n toml: \"text/toml\",\n ini: \"text/plain\",\n env: \"text/plain\",\n diff: \"text/x-diff\",\n patch: \"text/x-diff\",\n log: \"text/plain\",\n csv: \"text/csv\",\n tsv: \"text/tab-separated-values\",\n srt: \"application/x-subrip\",\n vtt: \"text/vtt\",\n zip: \"application/zip\"\n }[t] || \"application/octet-stream\";\n}\nfunction I(e, t = 0) {\n if (e instanceof File)\n return {\n id: `file-${Date.now()}-${t}`,\n name: e.name,\n url: URL.createObjectURL(e),\n type: e.type || k(e.name),\n size: e.size\n };\n if (typeof e == \"string\") {\n const o = j(e);\n return {\n id: `url-${Date.now()}-${t}`,\n name: o,\n url: e,\n type: k(o)\n };\n }\n return {\n id: e.id || `link-${Date.now()}-${t}`,\n name: e.name,\n url: e.url,\n type: e.type || k(e.name),\n size: e.size\n };\n}\nfunction lt(e) {\n return e.map((t, o) => I(t, o));\n}\nfunction ct(e) {\n var r;\n const t = ((r = e.name.split(\".\").pop()) == null ? void 0 : r.toLowerCase()) || \"\", o = e.type.toLowerCase();\n if (o.startsWith(\"image/\") || [\"jpg\", \"jpeg\", \"png\", \"gif\", \"webp\", \"svg\"].includes(t))\n return \"image\";\n if (o.includes(\"pdf\") || t === \"pdf\")\n return \"pdf\";\n if (o.includes(\"wordprocessingml\") || t === \"docx\")\n return \"docx\";\n if (o.includes(\"spreadsheetml\") || t === \"xlsx\")\n return \"xlsx\";\n if (o.includes(\"presentationml\") || t === \"pptx\" || t === \"ppt\")\n return \"pptx\";\n if (o.includes(\"ms-outlook\") || t === \"msg\")\n return \"msg\";\n if (o.includes(\"epub\") || t === \"epub\")\n return \"epub\";\n if ([\"mobi\", \"azw\", \"azw3\", \"kf8\"].includes(t) || o === \"application/x-mobipocket-ebook\" || o === \"application/vnd.amazon.ebook\")\n return \"mobi\";\n if ([\"csv\", \"tsv\"].includes(t) || o === \"text/csv\" || o === \"text/tab-separated-values\")\n return \"csv\";\n if (t === \"xml\" || o === \"application/xml\" || o === \"text/xml\")\n return \"xml\";\n if ([\"srt\", \"vtt\", \"lrc\", \"elrc\", \"ass\", \"ssa\", \"ttml\", \"dfxp\"].includes(t) || o === \"text/vtt\" || o === \"application/x-subrip\" || o === \"application/ttml+xml\")\n return \"subtitle\";\n if (t === \"zip\" || o === \"application/zip\" || o === \"application/x-zip-compressed\")\n return \"zip\";\n if (o.startsWith(\"video/\") || [\"mp4\", \"webm\", \"ogg\", \"ogv\", \"mov\", \"avi\", \"mkv\", \"m4v\", \"3gp\", \"flv\"].includes(t))\n return \"video\";\n if (o.startsWith(\"audio/\") || [\"mp3\", \"wav\", \"ogg\", \"m4a\", \"flac\", \"aac\"].includes(t))\n return \"audio\";\n if (t === \"md\" || t === \"markdown\")\n return \"markdown\";\n if (o === \"application/json\" || t === \"json\")\n return \"json\";\n const n = [\n \"txt\",\n \"log\",\n \"lock\",\n \"js\",\n \"jsx\",\n \"ts\",\n \"tsx\",\n \"py\",\n \"java\",\n \"cpp\",\n \"c\",\n \"h\",\n \"cs\",\n \"php\",\n \"rb\",\n \"go\",\n \"mod\",\n \"rs\",\n \"swift\",\n \"kt\",\n \"lua\",\n \"vim\",\n \"html\",\n \"css\",\n \"scss\",\n \"sass\",\n \"less\",\n \"yaml\",\n \"yml\",\n \"toml\",\n \"ini\",\n \"conf\",\n \"env\",\n \"diff\",\n \"patch\",\n \"sh\",\n \"bash\",\n \"zsh\",\n \"sql\"\n ];\n return o.startsWith(\"text/\") || n.includes(t) ? \"text\" : \"unsupported\";\n}\nfunction dt(e) {\n var n;\n const t = ((n = e.split(\".\").pop()) == null ? void 0 : n.toLowerCase()) || \"\";\n return {\n js: \"javascript\",\n jsx: \"jsx\",\n ts: \"typescript\",\n tsx: \"tsx\",\n py: \"python\",\n java: \"java\",\n cpp: \"cpp\",\n c: \"c\",\n cs: \"csharp\",\n php: \"php\",\n rb: \"ruby\",\n go: \"go\",\n mod: \"go\",\n rs: \"rust\",\n swift: \"swift\",\n kt: \"kotlin\",\n lua: \"lua\",\n vim: \"vim\",\n scala: \"scala\",\n sh: \"bash\",\n bash: \"bash\",\n zsh: \"bash\",\n json: \"json\",\n xml: \"xml\",\n html: \"html\",\n css: \"css\",\n scss: \"scss\",\n sass: \"sass\",\n less: \"less\",\n sql: \"sql\",\n yaml: \"yaml\",\n yml: \"yaml\",\n toml: \"toml\",\n ini: \"ini\",\n env: \"bash\",\n conf: \"nginx\",\n diff: \"diff\",\n patch: \"diff\",\n log: \"log\",\n md: \"markdown\",\n txt: \"text\"\n }[t] || \"text\";\n}\nfunction ut(e) {\n var n;\n const t = ((n = e.split(\".\").pop()) == null ? void 0 : n.toLowerCase().split(\"?\")[0]) || \"\";\n return {\n mp4: \"video/mp4\",\n webm: \"video/webm\",\n ogg: \"video/ogg\",\n ogv: \"video/ogg\",\n mov: \"video/quicktime\",\n avi: \"video/x-msvideo\",\n mkv: \"video/x-matroska\",\n m4v: \"video/mp4\",\n \"3gp\": \"video/3gpp\",\n flv: \"video/x-flv\"\n }[t] || \"video/mp4\";\n}\nfunction pt(e) {\n return e < 1024 ? `${e} B` : e < 1024 * 1024 ? `${(e / 1024).toFixed(1)} KB` : `${(e / (1024 * 1024)).toFixed(1)} MB`;\n}\nfunction ft(e) {\n if (!isFinite(e) || isNaN(e) || e < 0) return \"0:00\";\n const t = Math.floor(e / 60), o = Math.floor(e % 60);\n return `${t}:${o.toString().padStart(2, \"0\")}`;\n}\nfunction mt(e) {\n var o;\n return (((o = e.split(\".\").pop()) == null ? void 0 : o.toLowerCase()) || \"\") === \"tsv\" ? \"\t\" : \",\";\n}\nfunction gt(e, t = {}) {\n const o = t.delimiter ?? \",\", n = t.firstRowAsHeader ?? !0, r = [];\n let a = [], i = \"\", c = !1, s = 0;\n const l = e.length;\n for (; s < l; ) {\n const p = e[s];\n if (c) {\n if (p === '\"') {\n if (e[s + 1] === '\"') {\n i += '\"', s += 2;\n continue;\n }\n c = !1, s += 1;\n continue;\n }\n i += p, s += 1;\n continue;\n }\n if (p === '\"') {\n c = !0, s += 1;\n continue;\n }\n if (p === o) {\n a.push(i), i = \"\", s += 1;\n continue;\n }\n if (p === \"\\r\") {\n e[s + 1] === `\n` && (s += 1), a.push(i), r.push(a), a = [], i = \"\", s += 1;\n continue;\n }\n if (p === `\n`) {\n a.push(i), r.push(a), a = [], i = \"\", s += 1;\n continue;\n }\n i += p, s += 1;\n }\n for ((i.length > 0 || a.length > 0) && (a.push(i), r.push(a)); r.length > 0; ) {\n const p = r[r.length - 1];\n if (p.length === 1 && p[0] === \"\")\n r.pop();\n else\n break;\n }\n let d = [], f = r;\n n && r.length > 0 && (d = r[0], f = r.slice(1));\n const u = Math.max(\n d.length,\n ...f.map((p) => p.length),\n 0\n );\n for (const p of f)\n for (; p.length < u; ) p.push(\"\");\n return {\n header: d,\n rows: f,\n columnCount: u,\n delimiter: o\n };\n}\nfunction $(e) {\n const t = e instanceof Uint8Array ? e : new Uint8Array(e);\n if (t.length >= 3 && t[0] === 239 && t[1] === 187 && t[2] === 191)\n return new TextDecoder(\"utf-8\").decode(t);\n if (t.length >= 2 && t[0] === 255 && t[1] === 254)\n return new TextDecoder(\"utf-16le\").decode(t);\n if (t.length >= 2 && t[0] === 254 && t[1] === 255)\n return new TextDecoder(\"utf-16be\").decode(t);\n try {\n return new TextDecoder(\"utf-8\", { fatal: !0 }).decode(t);\n } catch {\n }\n try {\n return new TextDecoder(\"gbk\").decode(t);\n } catch {\n }\n return new TextDecoder(\"utf-8\", { fatal: !1 }).decode(t);\n}\nconst U = $;\nasync function ht(e, t) {\n const o = await fetch(e, t);\n if (!o.ok) throw new Error(`请求失败: ${o.status}`);\n const n = await o.arrayBuffer();\n return $(n);\n}\nfunction z(e) {\n const t = e.trim().replace(\",\", \".\"), o = t.split(\":\").map((n) => n.trim());\n if (o.length === 3) {\n const [n, r, a] = o;\n return Number(n) * 3600 + Number(r) * 60 + Number(a);\n }\n if (o.length === 2) {\n const [n, r] = o;\n return Number(n) * 60 + Number(r);\n }\n return Number(t) || 0;\n}\nfunction xt(e) {\n if (!isFinite(e) || e < 0) return \"00:00:00.000\";\n const t = Math.floor(e * 1e3), o = t % 1e3, n = Math.floor(t / 1e3) % 60, r = Math.floor(t / 6e4) % 60, a = Math.floor(t / 36e5), i = (c, s = 2) => c.toString().padStart(s, \"0\");\n return `${i(a)}:${i(r)}:${i(n)}.${i(o, 3)}`;\n}\nconst E = /(\\d{1,2}:)?\\d{1,2}:\\d{1,2}[.,]\\d{1,3}\\s*-->\\s*(\\d{1,2}:)?\\d{1,2}:\\d{1,2}[.,]\\d{1,3}/, B = /^\\s*\\[\\d{1,2}:\\d{1,2}(?:[.:]\\d{1,3})?\\]/;\nfunction W(e) {\n const t = e.replace(/^\\uFEFF/, \"\").trimStart();\n return /^WEBVTT/.test(t) ? \"vtt\" : /^<\\?xml/i.test(t) || /<tt\\b[^>]*>/i.test(t) ? \"ttml\" : /^\\[Script Info\\]/im.test(t) || /^Dialogue:/m.test(t) ? /ScriptType:\\s*v4\\.00\\s*$/im.test(t) ? \"ssa\" : \"ass\" : B.test(t) || /^\\[(ti|ar|al|au|by|length|offset|re|ve):/im.test(t) ? /<\\d{1,2}:\\d{1,2}(?:[.:]\\d{1,3})?>/.test(t) ? \"elrc\" : \"lrc\" : \"srt\";\n}\nfunction N(e, t) {\n const n = e.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), r = [];\n let a, i = 0;\n if (t === \"vtt\") {\n const c = [];\n for (; i < n.length && n[i].trim() !== \"\"; )\n c.push(n[i]), i++;\n for (a = c.join(`\n`); i < n.length && n[i].trim() === \"\"; ) i++;\n }\n for (; i < n.length; ) {\n for (; i < n.length && n[i].trim() === \"\"; ) i++;\n if (i >= n.length) break;\n let c, s = null;\n if (E.test(n[i]))\n s = n[i], i++;\n else if (c = n[i].trim() || void 0, i++, i < n.length && E.test(n[i]))\n s = n[i], i++;\n else\n continue;\n if (!s) continue;\n const l = s.match(/([\\d:.,]+)\\s*-->\\s*([\\d:.,]+)/);\n if (!l) continue;\n const d = z(l[1]), f = z(l[2]), u = [];\n for (; i < n.length && n[i].trim() !== \"\"; )\n u.push(n[i]), i++;\n r.push({ id: c, start: d, end: f, text: u.join(`\n`) });\n }\n return { format: t, cues: r, header: a };\n}\nfunction M(e, t, o) {\n const n = Number(e), r = Number(t);\n let a = 0;\n if (o) {\n const i = (o + \"000\").slice(0, 3);\n a = Number(i);\n }\n return n * 60 + r + a / 1e3;\n}\nfunction R(e, t) {\n const o = /^\\[(ti|ar|al|au|by|length|offset|re|ve):(.*)\\]$/i.exec(e.trim());\n if (!o) return !1;\n const n = o[1].toLowerCase(), r = o[2].trim();\n if (t.metadata[n] = r, n === \"offset\") {\n const a = Number(r);\n isNaN(a) || (t.offsetMs = a);\n }\n return !0;\n}\nfunction Z(e) {\n const o = e.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), n = { metadata: {}, offsetMs: 0 }, r = /\\[(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?\\]/g, a = [];\n for (const s of o) {\n const l = s.trim();\n if (!l || R(l, n)) continue;\n const d = [];\n let f = 0;\n r.lastIndex = 0;\n let u;\n for (; (u = r.exec(l)) !== null && u.index === f; )\n d.push(M(u[1], u[2], u[3])), f = u.index + u[0].length;\n if (d.length === 0) continue;\n const p = l.slice(f).trim();\n for (const m of d)\n a.push({ start: m, text: p });\n }\n a.sort((s, l) => s.start - l.start);\n const i = n.offsetMs / 1e3;\n return { format: \"lrc\", cues: a.map((s, l) => {\n const d = Math.max(0, s.start - i), f = a[l + 1], u = f ? Math.max(d, f.start - i) : d + 5;\n return { start: d, end: u, text: s.text };\n }), metadata: n.metadata };\n}\nfunction O(e) {\n const o = e.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), n = { metadata: {}, offsetMs: 0 }, r = /\\[(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?\\]/g, a = /<(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?>/g, i = [];\n for (const l of o) {\n const d = l.trim();\n if (!d || R(d, n)) continue;\n const f = [];\n let u = 0;\n r.lastIndex = 0;\n let p;\n for (; (p = r.exec(d)) !== null && p.index === u; )\n f.push(M(p[1], p[2], p[3])), u = p.index + p[0].length;\n if (f.length === 0) continue;\n const m = d.slice(u);\n for (const g of f)\n i.push({ start: g, raw: m });\n }\n i.sort((l, d) => l.start - d.start);\n const c = n.offsetMs / 1e3;\n return { format: \"elrc\", cues: i.map((l, d) => {\n const f = [];\n let u = \"\", p = 0, m = null;\n a.lastIndex = 0;\n let g;\n for (; (g = a.exec(l.raw)) !== null; ) {\n const F = l.raw.slice(p, g.index);\n m !== null && F && f.push({ start: Math.max(0, m - c), text: F }), u += F, m = M(g[1], g[2], g[3]), p = g.index + g[0].length;\n }\n const b = l.raw.slice(p);\n m !== null && b && f.push({ start: Math.max(0, m - c), text: b }), u += b;\n const h = Math.max(0, l.start - c), x = i[d + 1], w = x ? Math.max(h, x.start - c) : h + 5;\n return {\n start: h,\n end: w,\n text: u.trim(),\n words: f.length ? f : void 0\n };\n }), metadata: n.metadata };\n}\nfunction D(e) {\n const t = e.trim().split(\":\");\n return t.length !== 3 ? 0 : Number(t[0]) * 3600 + Number(t[1]) * 60 + Number(t[2].replace(\",\", \".\"));\n}\nfunction L(e, t) {\n const n = e.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`);\n let r = \"\", a = [];\n const i = [], c = [];\n for (const s of n) {\n const l = s.replace(/\\s+$/, \"\"), d = l.trim(), f = /^\\[([^\\]]+)\\]\\s*$/.exec(d);\n if (f) {\n r = f[1].toLowerCase(), c.push(l);\n continue;\n }\n if (r !== \"events\") {\n c.push(l);\n continue;\n }\n const u = /^Format:\\s*(.+)$/i.exec(d);\n if (u) {\n a = u[1].split(\",\").map((v) => v.trim());\n continue;\n }\n const p = /^(Dialogue|Comment):\\s*(.+)$/i.exec(d);\n if (!p || p[1].toLowerCase() === \"comment\" || a.length === 0) continue;\n const m = a.length, g = p[2].split(\",\"), b = g.slice(0, m - 1), h = g.slice(m - 1).join(\",\"), x = {};\n a.forEach((v, y) => {\n x[v] = y === m - 1 ? h : b[y] ?? \"\";\n });\n const w = D(x.Start || \"\"), F = D(x.End || \"\"), _ = (x.Text || \"\").replace(/\\\\N/g, `\n`).replace(/\\\\n/g, `\n`).replace(/\\\\h/g, \" \").replace(/\\{[^}]*\\}/g, \"\");\n i.push({ start: w, end: F, text: _, style: x.Style });\n }\n return i.sort((s, l) => s.start - l.start), {\n format: t,\n cues: i,\n header: c.join(`\n`).trim() || void 0\n };\n}\nfunction S(e) {\n const t = e.trim();\n if (!t) return 0;\n const o = /^(\\d+(?:\\.\\d+)?)(h|m|s|ms|f|t)$/i.exec(t);\n if (o) {\n const r = Number(o[1]), a = o[2].toLowerCase();\n return a === \"h\" ? r * 3600 : a === \"m\" ? r * 60 : a === \"ms\" ? r / 1e3 : r;\n }\n const n = t.split(\":\");\n return n.length === 3 ? Number(n[0]) * 3600 + Number(n[1]) * 60 + Number(n[2]) : n.length === 2 ? Number(n[0]) * 60 + Number(n[1]) : Number(t) || 0;\n}\nfunction V(e) {\n if (typeof DOMParser > \"u\")\n throw new Error(\"TTML parsing requires a DOMParser environment\");\n const t = new DOMParser().parseFromString(e, \"application/xml\");\n if (t.getElementsByTagName(\"parsererror\").length > 0)\n throw new Error(\"TTML XML parse error\");\n const n = t.getElementsByTagName(\"p\"), r = [];\n for (let a = 0; a < n.length; a++) {\n const i = n[a], c = i.getAttribute(\"begin\") || \"\", s = i.getAttribute(\"end\") || \"\", l = i.getAttribute(\"dur\") || \"\", d = S(c);\n let f;\n s ? f = S(s) : l ? f = d + S(l) : f = d + 5;\n let u = \"\";\n i.childNodes.forEach((m) => {\n if (m.nodeType === 3)\n u += m.nodeValue || \"\";\n else if (m.nodeType === 1) {\n const g = m;\n g.tagName.toLowerCase() === \"br\" ? u += `\n` : u += g.textContent || \"\";\n }\n });\n const p = u.replace(/[ \\t]+/g, \" \").replace(/\\n /g, `\n`).trim();\n (p || d || f) && r.push({ start: d, end: f, text: p });\n }\n return r.sort((a, i) => a.start - i.start), { format: \"ttml\", cues: r };\n}\nfunction bt(e, t) {\n switch (t ?? W(e)) {\n case \"lrc\":\n return Z(e);\n case \"elrc\":\n return O(e);\n case \"ass\":\n return L(e, \"ass\");\n case \"ssa\":\n return L(e, \"ssa\");\n case \"ttml\":\n return V(e);\n case \"vtt\":\n return N(e, \"vtt\");\n case \"srt\":\n default:\n return N(e, \"srt\");\n }\n}\nasync function Ft(e) {\n return A.loadAsync(e);\n}\nfunction vt(e) {\n const t = [];\n return e.forEach((o, n) => {\n var f;\n const r = n.dir, a = r && !o.endsWith(\"/\") ? o + \"/\" : o, i = r ? a.replace(/\\/$/, \"\") : a, c = i.lastIndexOf(\"/\"), s = c >= 0 ? i.slice(c + 1) : i, l = c >= 0 ? i.slice(0, c) : \"\", d = r ? 0 : ((f = n._data) == null ? void 0 : f.uncompressedSize) ?? 0;\n t.push({\n path: a,\n name: s,\n dir: l,\n isDir: r,\n size: d,\n date: n.date\n });\n }), t;\n}\nfunction wt(e) {\n const t = { name: \"\", path: \"\", isDir: !0, children: [], size: 0 }, o = /* @__PURE__ */ new Map();\n o.set(\"\", t);\n const n = (a) => {\n if (o.has(a)) return o.get(a);\n const i = a.split(\"/\").filter(Boolean);\n let c = t, s = \"\";\n for (const l of i) {\n s = s ? `${s}/${l}` : l;\n let d = o.get(s);\n d || (d = { name: l, path: s + \"/\", isDir: !0, children: [], size: 0 }, c.children.push(d), o.set(s, d)), c = d;\n }\n return c;\n };\n for (const a of e) {\n if (a.isDir) {\n n(a.path.replace(/\\/$/, \"\"));\n continue;\n }\n n(a.dir).children.push({\n name: a.name,\n path: a.path,\n isDir: !1,\n size: a.size\n });\n }\n const r = (a) => {\n if (a.children) {\n a.children.sort((i, c) => i.isDir !== c.isDir ? i.isDir ? -1 : 1 : i.name.localeCompare(c.name));\n for (const i of a.children) r(i);\n }\n };\n return r(t), t;\n}\nasync function yt(e, t) {\n const o = e.file(t);\n if (!o) throw new Error(`ZIP entry not found: ${t}`);\n const n = await o.async(\"arraybuffer\");\n return U(n);\n}\nasync function _t(e, t, o) {\n const n = e.file(t);\n if (!n) throw new Error(`ZIP entry not found: ${t}`);\n const r = await n.async(\"arraybuffer\");\n return new Blob([r], o ? { type: o } : void 0);\n}\nfunction q(e) {\n return e ? e.startsWith(\"#\") ? e : e.length === 8 ? \"#\" + e.substring(2) : e.length === 6 ? \"#\" + e : \"#000000\" : \"#000000\";\n}\nconst G = [\n \"FFFFFF\",\n \"000000\",\n \"E7E6E6\",\n \"44546A\",\n \"4472C4\",\n \"ED7D31\",\n \"A5A5A5\",\n \"FFC000\",\n \"5B9BD5\",\n \"70AD47\"\n], H = [\n \"000000\",\n \"FFFFFF\",\n \"FF0000\",\n \"00FF00\",\n \"0000FF\",\n \"FFFF00\",\n \"FF00FF\",\n \"00FFFF\",\n \"000000\",\n \"FFFFFF\",\n \"FF0000\",\n \"00FF00\",\n \"0000FF\",\n \"FFFF00\",\n \"FF00FF\",\n \"00FFFF\",\n \"800000\",\n \"008000\",\n \"000080\",\n \"808000\",\n \"800080\",\n \"008080\",\n \"C0C0C0\",\n \"808080\",\n \"9999FF\",\n \"993366\",\n \"FFFFCC\",\n \"CCFFFF\",\n \"660066\",\n \"FF8080\",\n \"0066CC\",\n \"CCCCFF\",\n \"000080\",\n \"FF00FF\",\n \"FFFF00\",\n \"00FFFF\",\n \"800080\",\n \"800000\",\n \"008080\",\n \"0000FF\",\n \"00CCFF\",\n \"CCFFFF\",\n \"CCFFCC\",\n \"FFFF99\",\n \"99CCFF\",\n \"FF99CC\",\n \"CC99FF\",\n \"FFCC99\",\n \"3366FF\",\n \"33CCCC\",\n \"99CC00\",\n \"FFCC00\",\n \"FF9900\",\n \"FF6600\",\n \"666699\",\n \"969696\",\n \"003366\",\n \"339966\",\n \"003300\",\n \"333300\",\n \"993300\",\n \"993366\",\n \"333399\",\n \"333333\"\n];\nfunction J(e, t) {\n const o = parseInt(e.substring(0, 2), 16), n = parseInt(e.substring(2, 4), 16), r = parseInt(e.substring(4, 6), 16), a = (l) => t < 0 ? Math.round(l * (1 + t)) : Math.round(l + (255 - l) * t), i = Math.min(255, Math.max(0, a(o))), c = Math.min(255, Math.max(0, a(n))), s = Math.min(255, Math.max(0, a(r)));\n return i.toString(16).padStart(2, \"0\") + c.toString(16).padStart(2, \"0\") + s.toString(16).padStart(2, \"0\");\n}\nfunction X(e) {\n if (e && e.type === \"pattern\" && e.pattern === \"solid\") {\n const t = e.fgColor;\n if (t)\n return T(t);\n }\n}\nfunction T(e) {\n if (e) {\n if (\"argb\" in e && typeof e.argb == \"string\" && e.argb)\n return q(e.argb);\n if (\"theme\" in e && typeof e.theme == \"number\") {\n const t = G[e.theme] || \"000000\", o = \"tint\" in e && typeof e.tint == \"number\" ? e.tint : 0;\n return \"#\" + (o !== 0 ? J(t, o) : t);\n }\n if (\"indexed\" in e && typeof e.indexed == \"number\") {\n const t = H[e.indexed];\n if (t) return \"#\" + t;\n }\n }\n}\nfunction K(e) {\n if (!e || !e.style) return;\n const t = T(e.color) || \"#000000\";\n return [e.style, t];\n}\nfunction Q(e) {\n const t = {};\n let o = !1;\n if (e.font) {\n const r = e.font;\n if ((r.name || r.size || r.bold || r.italic) && (o = !0, t.font = {}, r.name && (t.font.name = r.name), r.size && (t.font.size = r.size), r.bold && (t.font.bold = !0), r.italic && (t.font.italic = !0)), r.color) {\n const a = T(r.color);\n a && (o = !0, t.color = a);\n }\n r.underline && (o = !0, t.underline = !0), r.strike && (o = !0, t.strike = !0);\n }\n const n = X(e.fill);\n if (n && (o = !0, t.bgcolor = n), e.alignment) {\n const r = e.alignment;\n r.horizontal && (o = !0, t.align = r.horizontal), r.vertical && (o = !0, t.valign = r.vertical), r.wrapText && (o = !0, t.textwrap = !0);\n }\n if (e.border) {\n const r = {};\n let a = !1;\n const i = [\"top\", \"bottom\", \"left\", \"right\"];\n for (const c of i) {\n const s = K(e.border[c]);\n s && (r[c] = s, a = !0);\n }\n a && (o = !0, t.border = r);\n }\n return o ? t : null;\n}\nfunction Y(e) {\n return JSON.stringify(e);\n}\nfunction tt(e, t, o) {\n const n = Q(e);\n if (!n) return -1;\n const r = Y(n), a = o.get(r);\n if (a !== void 0) return a;\n const i = t.length;\n return t.push(n), o.set(r, i), i;\n}\nfunction et(e) {\n const t = e.value;\n if (t == null) return \"\";\n if (typeof t == \"string\") return t;\n if (typeof t == \"number\") return String(t);\n if (typeof t == \"boolean\") return t ? \"TRUE\" : \"FALSE\";\n if (t instanceof Date)\n return t.toLocaleDateString();\n if (typeof t == \"object\" && \"formula\" in t) {\n const o = t.result;\n return o != null ? String(o) : \"\";\n }\n return typeof t == \"object\" && \"richText\" in t ? t.richText.map((n) => n.text).join(\"\") : typeof t == \"object\" && \"hyperlink\" in t ? t.text || \"\" : typeof t == \"object\" && \"error\" in t ? String(t.error) : String(t);\n}\nfunction ot(e) {\n const t = e.split(\":\"), o = P(t[0]), n = t[1] ? P(t[1]) : o;\n return {\n top: o.row,\n left: o.col,\n bottom: n.row,\n right: n.col\n };\n}\nfunction P(e) {\n const t = e.match(/^([A-Z]+)(\\d+)$/);\n if (!t) return { row: 1, col: 1 };\n const o = t[1], n = parseInt(t[2], 10);\n let r = 0;\n for (let a = 0; a < o.length; a++)\n r = r * 26 + (o.charCodeAt(a) - 64);\n return { row: n, col: r };\n}\nfunction Ct(e) {\n const t = [];\n return e.eachSheet((o) => {\n const n = [], r = /* @__PURE__ */ new Map(), a = [], i = {}, c = {}, s = o.columnCount;\n for (let u = 1; u <= s; u++) {\n const p = o.getColumn(u);\n p.width && (c[String(u - 1)] = { width: Math.round(p.width * 7.5) });\n }\n c.len = Math.max(s, 26);\n const l = /* @__PURE__ */ new Map(), d = o.model, f = (d == null ? void 0 : d.merges) || [];\n for (const u of f) {\n a.push(u);\n const { top: p, left: m, bottom: g, right: b } = ot(u), h = g - p, x = b - m;\n l.set(`${p - 1},${m - 1}`, [h, x]);\n }\n o.eachRow({ includeEmpty: !0 }, (u, p) => {\n const m = p - 1, g = {};\n u.eachCell({ includeEmpty: !1 }, (h, x) => {\n const w = x - 1;\n if (h.isMerged && h.master !== h) return;\n const F = et(h), _ = tt(h, n, r), v = { text: F };\n _ !== -1 && (v.style = _);\n const y = `${m},${w}`;\n l.has(y) && (v.merge = l.get(y)), g[String(w)] = v;\n });\n const b = { cells: g };\n u.height && (b.height = Math.round(u.height * 1.333)), i[String(m)] = b;\n }), t.push({\n name: o.name,\n styles: n,\n merges: a,\n rows: i,\n cols: c\n });\n }), t;\n}\nfunction kt(e, t, o = \"Sheet1\") {\n const n = e.length > 0, a = n ? [{ font: { bold: !0 } }] : [], i = {};\n if (n) {\n const s = {};\n e.forEach((l, d) => {\n s[String(d)] = { text: l, style: 0 };\n }), i[0] = { cells: s };\n }\n const c = n ? 1 : 0;\n return t.forEach((s, l) => {\n const d = {};\n s.forEach((f, u) => {\n f !== void 0 && f !== \"\" && (d[String(u)] = { text: f });\n }), i[String(l + c)] = { cells: d };\n }), [{ name: o, styles: a, rows: i }];\n}\nfunction St(e, t) {\n var i;\n if (typeof window > \"u\") return;\n const o = (e == null ? void 0 : e.version) || ((i = e == null ? void 0 : e.GlobalWorkerOptions) == null ? void 0 : i.version) || \"\", {\n workerSrc: n = `https://unpkg.com/pdfjs-dist@${o}/build/pdf.worker.min.mjs`,\n cMapUrl: r = `https://unpkg.com/pdfjs-dist@${o}/cmaps/`,\n cMapPacked: a = !0\n } = t || {};\n e.GlobalWorkerOptions && (e.GlobalWorkerOptions.workerSrc = n, e.GlobalWorkerOptions.cMapUrl = r, e.GlobalWorkerOptions.cMapPacked = a);\n}\nconst nt = {\n // ─────── common ───────\n \"common.download\": \"下载\",\n \"common.close\": \"关闭\",\n \"common.loading\": \"加载中\",\n \"common.unknown_error\": \"未知错误\",\n \"common.unsupported_preview\": \"不支持预览此文件类型 ({type})\",\n // ─────── toolbar ───────\n \"toolbar.zoom_in\": \"放大\",\n \"toolbar.zoom_out\": \"缩小\",\n \"toolbar.rotate_left\": \"向左旋转\",\n \"toolbar.rotate_right\": \"向右旋转\",\n \"toolbar.reset\": \"复原\",\n \"toolbar.fit_to_window\": \"适应窗口\",\n \"toolbar.original_size\": \"原始尺寸\",\n \"toolbar.toc\": \"目录\",\n \"toolbar.prev_page\": \"上一页\",\n \"toolbar.next_page\": \"下一页\",\n \"toolbar.full_width\": \"全屏宽度\",\n \"toolbar.normal_width\": \"正常宽度\",\n \"toolbar.wrap_on\": \"自动换行\",\n \"toolbar.wrap_off\": \"不换行\",\n \"toolbar.source\": \"源码\",\n \"toolbar.preview\": \"预览\",\n // ─────── image ───────\n \"image.load_failed\": \"图片加载失败\",\n // ─────── pdf ───────\n \"pdf.load_failed\": \"PDF 文件加载失败\",\n // ─────── docx ───────\n \"docx.parse_failed\": \"Word 文档解析失败\",\n // ─────── xlsx ───────\n \"xlsx.loading\": \"加载 Excel 中...\",\n \"xlsx.load_failed\": \"Excel 加载失败\",\n \"xlsx.parse_failed\": \"Excel 文件解析失败\",\n \"xlsx.not_found\": \"Excel 文件不存在\",\n // ─────── pptx ───────\n \"pptx.loading\": \"加载 PPT 中...\",\n \"pptx.load_failed\": \"PPT 加载失败\",\n \"pptx.parse_failed\": \"PPT 文件解析失败\",\n \"pptx.not_found\": \"PPT 文件不存在\",\n \"pptx.invalid_format\": \"PPT 文件格式错误或已损坏\",\n \"pptx.no_pages\": \"PPT 文件无有效页面\",\n \"pptx.timeout\": \"加载超时,请检查网络或稍后重试\",\n // ─────── msg ───────\n \"msg.parse_failed\": \"Outlook 邮件解析失败\",\n \"msg.parse_failed_short\": \"邮件解析失败\",\n \"msg.empty_body\": \"(无邮件正文)\",\n // ─────── epub ───────\n \"epub.load_failed\": \"EPUB 文件加载失败\",\n // ─────── mobi ───────\n \"mobi.load_failed\": \"电子书加载失败,文件可能已损坏或带有 DRM 保护\",\n // ─────── video ───────\n \"video.loading\": \"加载视频中...\",\n \"video.load_failed\": \"视频加载失败\",\n \"video.load_failed_with_error\": \"视频加载失败: {error}\",\n // ─────── audio (aria-label) ───────\n \"audio.aria.play\": \"播放\",\n \"audio.aria.pause\": \"暂停\",\n \"audio.aria.forward_10\": \"前进 10 秒\",\n \"audio.aria.backward_10\": \"后退 10 秒\",\n \"audio.aria.mute\": \"静音\",\n \"audio.aria.unmute\": \"取消静音\",\n \"audio.aria.loop_on\": \"开启循环\",\n \"audio.aria.loop_off\": \"关闭循环\",\n \"audio.aria.progress\": \"播放进度\",\n \"audio.aria.volume\": \"音量\",\n // ─────── markdown ───────\n \"markdown.load_failed\": \"Markdown 文件加载失败\",\n \"markdown.copy_code\": \"复制代码\",\n \"markdown.copied\": \"已复制\",\n // ─────── json ───────\n \"json.load_failed\": \"JSON 文件加载失败\",\n \"json.items\": \"items\",\n \"json.keys\": \"keys\",\n // ─────── csv ───────\n \"csv.loading\": \"加载 CSV 中...\",\n \"csv.load_failed\": \"CSV 文件加载失败\",\n \"csv.parse_failed\": \"CSV 解析失败\",\n // ─────── xml ───────\n \"xml.load_failed\": \"XML 文件加载失败\",\n // ─────── subtitle / lyric ───────\n \"subtitle.load_failed\": \"字幕文件加载失败\",\n \"subtitle.parse_failed\": \"字幕解析失败\",\n \"subtitle.lines\": \"lines\",\n \"subtitle.cues\": \"cues\",\n \"subtitle.meta.title\": \"标题\",\n \"subtitle.meta.artist\": \"艺术家\",\n \"subtitle.meta.album\": \"专辑\",\n \"subtitle.meta.author\": \"作者\",\n \"subtitle.meta.by\": \"制作\",\n \"subtitle.meta.length\": \"时长\",\n \"subtitle.meta.offset\": \"偏移\",\n \"subtitle.meta.editor\": \"编辑器\",\n \"subtitle.meta.version\": \"版本\",\n // ─────── zip ───────\n \"zip.load_failed\": \"ZIP 文件加载失败\",\n \"zip.parse_failed\": \"ZIP 解析失败\",\n // ─────── text ───────\n \"text.load_failed\": \"文本文件加载失败\"\n}, rt = {\n // ─────── common ───────\n \"common.download\": \"Download\",\n \"common.close\": \"Close\",\n \"common.loading\": \"Loading\",\n \"common.unknown_error\": \"Unknown error\",\n \"common.unsupported_preview\": \"Preview not supported for this file type ({type})\",\n // ─────── toolbar ───────\n \"toolbar.zoom_in\": \"Zoom in\",\n \"toolbar.zoom_out\": \"Zoom out\",\n \"toolbar.rotate_left\": \"Rotate left\",\n \"toolbar.rotate_right\": \"Rotate right\",\n \"toolbar.reset\": \"Reset\",\n \"toolbar.fit_to_window\": \"Fit to window\",\n \"toolbar.original_size\": \"Original size\",\n \"toolbar.toc\": \"Table of contents\",\n \"toolbar.prev_page\": \"Previous page\",\n \"toolbar.next_page\": \"Next page\",\n \"toolbar.full_width\": \"Full width\",\n \"toolbar.normal_width\": \"Normal width\",\n \"toolbar.wrap_on\": \"Word wrap\",\n \"toolbar.wrap_off\": \"No wrap\",\n \"toolbar.source\": \"Source\",\n \"toolbar.preview\": \"Preview\",\n // ─────── image ───────\n \"image.load_failed\": \"Failed to load image\",\n // ─────── pdf ───────\n \"pdf.load_failed\": \"Failed to load PDF\",\n // ─────── docx ───────\n \"docx.parse_failed\": \"Failed to parse Word document\",\n // ─────── xlsx ───────\n \"xlsx.loading\": \"Loading Excel...\",\n \"xlsx.load_failed\": \"Failed to load Excel\",\n \"xlsx.parse_failed\": \"Failed to parse Excel file\",\n \"xlsx.not_found\": \"Excel file not found\",\n // ─────── pptx ───────\n \"pptx.loading\": \"Loading PPT...\",\n \"pptx.load_failed\": \"Failed to load PPT\",\n \"pptx.parse_failed\": \"Failed to parse PPT file\",\n \"pptx.not_found\": \"PPT file not found\",\n \"pptx.invalid_format\": \"PPT file format is invalid or corrupted\",\n \"pptx.no_pages\": \"PPT file has no valid pages\",\n \"pptx.timeout\": \"Loading timed out, please check your network and retry\",\n // ─────── msg ───────\n \"msg.parse_failed\": \"Failed to parse Outlook message\",\n \"msg.parse_failed_short\": \"Failed to parse message\",\n \"msg.empty_body\": \"(No message body)\",\n // ─────── epub ───────\n \"epub.load_failed\": \"Failed to load EPUB\",\n // ─────── mobi ───────\n \"mobi.load_failed\": \"Failed to load ebook — file may be corrupted or DRM-protected\",\n // ─────── video ───────\n \"video.loading\": \"Loading video...\",\n \"video.load_failed\": \"Failed to load video\",\n \"video.load_failed_with_error\": \"Failed to load video: {error}\",\n // ─────── audio (aria-label) ───────\n \"audio.aria.play\": \"Play\",\n \"audio.aria.pause\": \"Pause\",\n \"audio.aria.forward_10\": \"Forward 10 seconds\",\n \"audio.aria.backward_10\": \"Back 10 seconds\",\n \"audio.aria.mute\": \"Mute\",\n \"audio.aria.unmute\": \"Unmute\",\n \"audio.aria.loop_on\": \"Enable loop\",\n \"audio.aria.loop_off\": \"Disable loop\",\n \"audio.aria.progress\": \"Playback progress\",\n \"audio.aria.volume\": \"Volume\",\n // ─────── markdown ───────\n \"markdown.load_failed\": \"Failed to load Markdown\",\n \"markdown.copy_code\": \"Copy code\",\n \"markdown.copied\": \"Copied\",\n // ─────── json ───────\n \"json.load_failed\": \"Failed to load JSON\",\n \"json.items\": \"items\",\n \"json.keys\": \"keys\",\n // ─────── csv ───────\n \"csv.loading\": \"Loading CSV...\",\n \"csv.load_failed\": \"Failed to load CSV\",\n \"csv.parse_failed\": \"Failed to parse CSV\",\n // ─────── xml ───────\n \"xml.load_failed\": \"Failed to load XML\",\n // ─────── subtitle / lyric ───────\n \"subtitle.load_failed\": \"Failed to load subtitle\",\n \"subtitle.parse_failed\": \"Failed to parse subtitle\",\n \"subtitle.lines\": \"lines\",\n \"subtitle.cues\": \"cues\",\n \"subtitle.meta.title\": \"Title\",\n \"subtitle.meta.artist\": \"Artist\",\n \"subtitle.meta.album\": \"Album\",\n \"subtitle.meta.author\": \"Author\",\n \"subtitle.meta.by\": \"By\",\n \"subtitle.meta.length\": \"Length\",\n \"subtitle.meta.offset\": \"Offset\",\n \"subtitle.meta.editor\": \"Editor\",\n \"subtitle.meta.version\": \"Version\",\n // ─────── zip ───────\n \"zip.load_failed\": \"Failed to load ZIP\",\n \"zip.parse_failed\": \"Failed to parse ZIP\",\n // ─────── text ───────\n \"text.load_failed\": \"Failed to load text file\"\n}, C = {\n \"zh-CN\": nt,\n \"en-US\": rt\n}, it = /\\{(\\w+)\\}/g;\nfunction at(e, t) {\n return t ? e.replace(it, (o, n) => {\n const r = t[n];\n return r === void 0 ? `{${n}}` : String(r);\n }) : e;\n}\nfunction Mt(e) {\n var i;\n const t = e.fallbackLocale ?? \"zh-CN\", o = C[e.locale] ?? C[t] ?? C[\"zh-CN\"], n = (i = e.messages) == null ? void 0 : i[e.locale], r = n ? { ...o, ...n } : o, a = C[\"zh-CN\"];\n return (c, s) => {\n const l = r[c] ?? a[c] ?? c;\n return at(l, s);\n };\n}\nexport {\n wt as buildZipTree,\n C as builtInMessages,\n St as configurePdfWorker,\n kt as convertCsvToSpreadsheetData,\n Ct as convertWorkbookToSpreadsheetData,\n Mt as createTranslator,\n $ as decodeText,\n U as decodeUtf8,\n ht as fetchTextUtf8,\n pt as formatFileSize,\n xt as formatSubtitleTime,\n ft as formatTime,\n j as getFileNameFromUrl,\n ct as getFileType,\n dt as getLanguageFromFileName,\n ut as getVideoMimeType,\n mt as guessCsvDelimiter,\n k as inferMimeType,\n vt as listZipEntries,\n Ft as loadZip,\n I as normalizeFile,\n lt as normalizeFiles,\n gt as parseCsv,\n bt as parseSubtitle,\n _t as readZipEntryBlob,\n yt as readZipEntryText\n};\n//# sourceMappingURL=index.mjs.map\n","import type { InjectionKey, Ref, ComputedRef } from 'vue';\nimport type { Locale, Translator } from '@eternalheart/file-preview-core';\n\nexport interface LocaleInjection {\n locale: Ref<Locale>;\n t: ComputedRef<Translator>;\n}\n\nexport const LOCALE_KEY: InjectionKey<LocaleInjection> = Symbol('file-preview-locale');\n","import { provide, inject, computed, unref, type Ref, type MaybeRef, type ComputedRef } from 'vue';\nimport { createTranslator, type Locale, type Messages, type Translator } from '@eternalheart/file-preview-core';\nimport { LOCALE_KEY, type LocaleInjection } from '../i18n/localeKey';\n\n/**\n * 在主组件中调用,向子树注入 locale context\n */\nexport function provideLocale(\n locale: MaybeRef<Locale | undefined>,\n messages?: MaybeRef<Partial<Record<Locale, Partial<Messages>>> | undefined>,\n): void {\n const localeRef = computed<Locale>(() => unref(locale) ?? 'zh-CN');\n const t = computed<Translator>(() =>\n createTranslator({ locale: localeRef.value, messages: unref(messages) }),\n );\n provide(LOCALE_KEY, { locale: localeRef as Ref<Locale>, t });\n}\n\n// 兜底 translator(模块级单例)\nlet fallbackT: Translator | null = null;\nfunction getFallback(): Translator {\n if (!fallbackT) fallbackT = createTranslator({ locale: 'zh-CN' });\n return fallbackT;\n}\n\n/**\n * 获取翻译函数。在 provider 外使用时自动 fallback 到 zh-CN。\n */\nexport function useTranslator(): { locale: Ref<Locale>; t: ComputedRef<Translator> } {\n const injected = inject<LocaleInjection | null>(LOCALE_KEY, null);\n if (injected) return injected;\n // fallback\n const locale = computed<Locale>(() => 'zh-CN');\n const t = computed<Translator>(() => getFallback());\n return { locale: locale as Ref<Locale>, t };\n}\n","import { provide, inject, computed, unref, type InjectionKey, type MaybeRef, type ComputedRef } from 'vue';\n\nexport type ResolvedTheme = 'dark' | 'light';\n\nconst THEME_KEY: InjectionKey<ComputedRef<ResolvedTheme>> = Symbol('vfp-resolved-theme');\n\n/**\n * 在主组件中调用,向子树注入已解析的主题('dark' | 'light')\n */\nexport function provideResolvedTheme(theme: MaybeRef<ResolvedTheme>): void {\n const themeRef = computed<ResolvedTheme>(() => unref(theme));\n provide(THEME_KEY, themeRef);\n}\n\n/**\n * 获取已解析的主题('dark' | 'light')。\n * Provider 之外默认 'dark'。\n *\n * renderer 需要切第三方库的 theme 选项(如 shiki 的 theme)时使用;\n * 不要用它做 className 分支 —— class 由 CSS 变量通过根容器 [data-theme] 自动切换。\n */\nexport function useResolvedTheme(): ComputedRef<ResolvedTheme> {\n const injected = inject(THEME_KEY, null);\n if (injected) return injected;\n return computed<ResolvedTheme>(() => 'dark');\n}\n","import { ZoomIn, ZoomOut, RotateCw, RotateCcw, Scan, RefreshCw } from 'lucide-vue-next';\nimport { h, type FunctionalComponent } from 'vue';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nconst OriginalSizeIcon: FunctionalComponent = (_props, { attrs }) => {\n return h('svg', {\n xmlns: 'http://www.w3.org/2000/svg', viewBox: '0 0 24 24',\n fill: 'none', stroke: 'currentColor', 'stroke-width': '2',\n 'stroke-linecap': 'round', 'stroke-linejoin': 'round', ...attrs,\n }, [\n h('text', {\n x: '12', y: '17.5', 'text-anchor': 'middle',\n 'font-size': '20', 'font-weight': 'bold',\n fill: 'currentColor', stroke: 'none',\n }, '1:1'),\n ]);\n};\n\nexport interface ImageToolbarContext {\n zoom: number;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onFitToWidth: () => void;\n onOriginalSize: () => void;\n onRotateLeft: () => void;\n onRotateRight: () => void;\n onReset: () => void;\n t: Translator;\n}\n\nexport function getImageToolbarGroups(ctx: ImageToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n { type: 'button', icon: ZoomOut, tooltip: ctx.t('toolbar.zoom_out'), action: ctx.onZoomOut, disabled: ctx.zoom <= 0.01 },\n { type: 'text', content: `${Math.round(ctx.zoom * 100)}%`, minWidth: '3rem' },\n { type: 'button', icon: ZoomIn, tooltip: ctx.t('toolbar.zoom_in'), action: ctx.onZoomIn, disabled: ctx.zoom >= 10 },\n ],\n },\n {\n items: [\n { type: 'button', icon: Scan, tooltip: ctx.t('toolbar.fit_to_window'), action: ctx.onFitToWidth },\n { type: 'button', icon: OriginalSizeIcon, tooltip: ctx.t('toolbar.original_size'), action: ctx.onOriginalSize },\n ],\n },\n {\n items: [\n { type: 'button', icon: RotateCcw, tooltip: ctx.t('toolbar.rotate_left'), action: ctx.onRotateLeft },\n { type: 'button', icon: RotateCw, tooltip: ctx.t('toolbar.rotate_right'), action: ctx.onRotateRight },\n ],\n },\n {\n items: [\n { type: 'button', icon: RefreshCw, tooltip: ctx.t('toolbar.reset'), action: ctx.onReset },\n ],\n },\n ];\n}\n","import { ZoomIn, ZoomOut, RefreshCw } from 'lucide-vue-next';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface PdfToolbarContext {\n zoom: number;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onReset: () => void;\n t: Translator;\n}\n\nexport function getPdfToolbarGroups(ctx: PdfToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n { type: 'button', icon: ZoomOut, tooltip: ctx.t('toolbar.zoom_out'), action: ctx.onZoomOut, disabled: ctx.zoom <= 0.01 },\n { type: 'text', content: `${Math.round(ctx.zoom * 100)}%`, minWidth: '3rem' },\n { type: 'button', icon: ZoomIn, tooltip: ctx.t('toolbar.zoom_in'), action: ctx.onZoomIn, disabled: ctx.zoom >= 10 },\n ],\n },\n {\n items: [\n { type: 'button', icon: RefreshCw, tooltip: ctx.t('toolbar.reset'), action: ctx.onReset },\n ],\n },\n ];\n}\n","import { ChevronLeft, ChevronRight, List, Maximize2, Minimize2 } from 'lucide-vue-next';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface EpubToolbarContext {\n epubRef: { prevPage: () => void; nextPage: () => void; toggleFullWidth: () => void; toggleToc: () => void } | null;\n current: number;\n total: number;\n fullWidth: boolean;\n t: Translator;\n}\n\nexport function getEpubToolbarGroups(ctx: EpubToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n { type: 'button', icon: List, tooltip: ctx.t('toolbar.toc'), action: () => ctx.epubRef?.toggleToc() },\n ],\n },\n {\n items: [\n { type: 'button', icon: ChevronLeft, tooltip: ctx.t('toolbar.prev_page'), action: () => ctx.epubRef?.prevPage() },\n { type: 'text', content: `${ctx.current} / ${ctx.total}`, minWidth: '4rem' },\n { type: 'button', icon: ChevronRight, tooltip: ctx.t('toolbar.next_page'), action: () => ctx.epubRef?.nextPage() },\n ],\n },\n {\n items: [\n {\n type: 'button',\n icon: ctx.fullWidth ? Minimize2 : Maximize2,\n tooltip: ctx.fullWidth ? ctx.t('toolbar.normal_width') : ctx.t('toolbar.full_width'),\n action: () => ctx.epubRef?.toggleFullWidth(),\n },\n ],\n },\n ];\n}\n","import type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\nimport { ChevronLeft, ChevronRight, List, Maximize2, Minimize2 } from 'lucide-vue-next';\n\nexport interface MobiToolbarContext {\n mobiRef: { prevPage: () => void; nextPage: () => void; toggleFullWidth: () => void; toggleToc: () => void } | null;\n current: number;\n total: number;\n fullWidth: boolean;\n t: Translator;\n}\n\nexport function getMobiToolbarGroups(ctx: MobiToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n { type: 'button', icon: List, tooltip: ctx.t('toolbar.toc'), action: () => ctx.mobiRef?.toggleToc() },\n ],\n },\n {\n items: [\n { type: 'button', icon: ChevronLeft, tooltip: ctx.t('toolbar.prev_page'), action: () => ctx.mobiRef?.prevPage() },\n { type: 'text', content: `${ctx.current} / ${ctx.total}`, minWidth: '4rem' },\n { type: 'button', icon: ChevronRight, tooltip: ctx.t('toolbar.next_page'), action: () => ctx.mobiRef?.nextPage() },\n ],\n },\n {\n items: [\n {\n type: 'button',\n icon: ctx.fullWidth ? Minimize2 : Maximize2,\n tooltip: ctx.fullWidth ? ctx.t('toolbar.normal_width') : ctx.t('toolbar.full_width'),\n action: () => ctx.mobiRef?.toggleFullWidth(),\n },\n ],\n },\n ];\n}\n","import type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\nimport { formatFileSize } from '@eternalheart/file-preview-core';\n\nexport interface ZipToolbarStats {\n files: number;\n dirs: number;\n size: number;\n}\n\nexport interface ZipToolbarContext {\n stats: ZipToolbarStats | null;\n t: Translator;\n}\n\nexport function getZipToolbarGroups({ stats }: ZipToolbarContext): ToolbarGroup[] {\n if (!stats) return [];\n return [\n {\n items: [\n {\n type: 'text',\n content: `${stats.files} files · ${stats.dirs} dirs · ${formatFileSize(stats.size)}`,\n minWidth: '10rem',\n },\n ],\n },\n ];\n}\n","import { h } from 'vue';\nimport { WrapText, Eye, Code } from 'lucide-vue-next';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface TextToolbarContext {\n wordWrap: boolean;\n onToggleWrap: () => void;\n isHtml: boolean;\n htmlPreview: boolean;\n onToggleHtmlPreview: () => void;\n t: Translator;\n}\n\nexport function getTextToolbarGroups(ctx: TextToolbarContext): ToolbarGroup[] {\n const groups: ToolbarGroup[] = [\n {\n items: [\n {\n type: 'button',\n icon: h(WrapText, { class: 'vfp-w-4 vfp-h-4' }),\n tooltip: ctx.wordWrap ? ctx.t('toolbar.wrap_off') : ctx.t('toolbar.wrap_on'),\n action: ctx.onToggleWrap,\n },\n ],\n },\n ];\n\n if (ctx.isHtml) {\n groups.push({\n items: [\n {\n type: 'button',\n icon: ctx.htmlPreview\n ? h(Code, { class: 'vfp-w-4 vfp-h-4' })\n : h(Eye, { class: 'vfp-w-4 vfp-h-4' }),\n tooltip: ctx.htmlPreview ? ctx.t('toolbar.source') : ctx.t('toolbar.preview'),\n action: ctx.onToggleHtmlPreview,\n },\n ],\n });\n }\n\n return groups;\n}\n","import { h } from 'vue';\nimport { Eye, Code } from 'lucide-vue-next';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface MarkdownToolbarContext {\n viewMode: 'preview' | 'source';\n onToggleViewMode: () => void;\n t: Translator;\n}\n\nexport function getMarkdownToolbarGroups(ctx: MarkdownToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n {\n type: 'button',\n icon: ctx.viewMode === 'preview'\n ? h(Code, { class: 'vfp-w-4 vfp-h-4' })\n : h(Eye, { class: 'vfp-w-4 vfp-h-4' }),\n tooltip: ctx.viewMode === 'preview' ? ctx.t('toolbar.source') : ctx.t('toolbar.preview'),\n action: ctx.onToggleViewMode,\n },\n ],\n },\n ];\n}\n","<script setup lang=\"ts\">\nimport { useTranslator } from '../composables/useTranslator';\nconst { t } = useTranslator();\n</script>\n\n<template>\n <div class=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-text-fg-muted\">\n <div class=\"rfp-flex rfp-flex-col rfp-items-center rfp-gap-3\">\n <div class=\"rfp-w-8 rfp-h-8 rfp-rounded-full rfp-border-2 rfp-border-fg-muted rfp-border-t-transparent rfp-animate-spin\" />\n <span class=\"rfp-text-sm\">{{ t('common.loading') || 'Loading...' }}</span>\n </div>\n </div>\n</template>\n","// 集中的 Vue 异步装饰:把每个 renderer 转为 defineAsyncComponent,\n// 让 rollup 自动按 chunk 分割。\nimport { defineAsyncComponent, h, type Component } from 'vue';\nimport RendererLoading from './RendererLoading.vue';\n\ntype ComponentModule = { default: Component };\n\nconst wrap = (loader: () => Promise<ComponentModule>) =>\n defineAsyncComponent({\n loader,\n loadingComponent: { render: () => h(RendererLoading) },\n delay: 0,\n });\n\nexport const ImageRenderer = wrap(() => import('./Image/index.vue'));\nexport const PdfRenderer = wrap(() => import('./Pdf/index.vue'));\nexport const DocxRenderer = wrap(() => import('./Docx/index.vue'));\nexport const XlsxRenderer = wrap(() => import('./Xlsx/index.vue'));\nexport const PptxRenderer = wrap(() => import('./Pptx/index.vue'));\nexport const MsgRenderer = wrap(() => import('./Msg/index.vue'));\nexport const EpubRenderer = wrap(() => import('./Epub/index.vue'));\nexport const MobiRenderer = wrap(() => import('./Mobi/index.vue'));\nexport const VideoRenderer = wrap(() => import('./Video/index.vue'));\nexport const AudioRenderer = wrap(() => import('./Audio/index.vue'));\nexport const MarkdownRenderer = wrap(() => import('./Markdown/index.vue'));\nexport const JsonRenderer = wrap(() => import('./Json/index.vue'));\nexport const CsvRenderer = wrap(() => import('./Csv/index.vue'));\nexport const XmlRenderer = wrap(() => import('./Xml/index.vue'));\nexport const SubtitleRenderer = wrap(() => import('./Subtitle/index.vue'));\nexport const ZipRenderer = wrap(() => import('./Zip/index.vue'));\nexport const TextRenderer = wrap(() => import('./Text/index.vue'));\n","<script setup lang=\"ts\">\nimport { FileQuestion, Download } from 'lucide-vue-next';\nimport { useTranslator } from '../../composables/useTranslator';\n\ndefineProps<{\n fileName: string;\n fileType: string;\n}>();\n\nconst { t } = useTranslator();\n\nconst emit = defineEmits<{\n (e: 'download'): void;\n}>();\n</script>\n\n<template>\n <div\n class=\"vfp-flex vfp-flex-col vfp-items-center vfp-justify-center vfp-w-full vfp-h-full vfp-p-8 vfp-gap-6\"\n >\n <div\n class=\"vfp-w-32 vfp-h-32 vfp-rounded-full vfp-bg-surface-2 vfp-flex vfp-items-center vfp-justify-center\"\n >\n <FileQuestion class=\"vfp-w-16 vfp-h-16 vfp-text-fg-secondary\" />\n </div>\n\n <div class=\"vfp-text-fg-primary vfp-text-center\">\n <p class=\"vfp-text-xl vfp-font-medium vfp-mb-2\">{{ fileName }}</p>\n <p class=\"vfp-text-fg-secondary\">{{ t('common.unsupported_preview', { type: fileType }) }}</p>\n </div>\n\n <button\n class=\"vfp-flex vfp-items-center vfp-gap-2 vfp-px-6 vfp-py-3 vfp-bg-surface-2 hover:vfp-bg-surface-3 vfp-backdrop-blur-sm vfp-rounded-lg vfp-text-fg-primary vfp-font-medium vfp-transition-all\"\n @click=\"emit('download')\"\n >\n <Download class=\"vfp-w-5 vfp-h-5\" />\n {{ t('common.download') }}\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, computed, watch, onMounted, onBeforeUnmount, toRef, provide } from 'vue';\nimport { X, Download, ChevronLeft, ChevronRight } from 'lucide-vue-next';\nimport {\n normalizeFiles,\n getFileType,\n type PreviewFileInput,\n type Locale,\n type Messages,\n type Theme,\n type CustomRendererEventPayload,\n} from '@eternalheart/file-preview-core';\nimport type { CustomRenderer, CustomRendererContext } from './types';\nimport { provideLocale, useTranslator } from './composables/useTranslator';\nimport { provideResolvedTheme } from './composables/useResolvedTheme';\nimport type { ToolbarGroup, ToolbarButtonItem, ToolbarTextItem } from './renderers/toolbar.types';\nimport { getImageToolbarGroups } from './renderers/Image/toolbar';\nimport { getPdfToolbarGroups } from './renderers/Pdf/toolbar';\nimport { getEpubToolbarGroups } from './renderers/Epub/toolbar';\nimport { getMobiToolbarGroups } from './renderers/Mobi/toolbar';\nimport { getZipToolbarGroups, type ZipToolbarStats } from './renderers/Zip/toolbar';\nimport { getTextToolbarGroups } from './renderers/Text/toolbar';\nimport { getMarkdownToolbarGroups } from './renderers/Markdown/toolbar';\n// Renderer 通过 defineAsyncComponent 动态加载,运行时按需下载对应 chunk\nimport {\n ImageRenderer,\n PdfRenderer,\n DocxRenderer,\n XlsxRenderer,\n PptxRenderer,\n MsgRenderer,\n EpubRenderer,\n MobiRenderer,\n VideoRenderer,\n AudioRenderer,\n MarkdownRenderer,\n JsonRenderer,\n CsvRenderer,\n XmlRenderer,\n SubtitleRenderer,\n ZipRenderer,\n TextRenderer,\n} from './renderers/lazy';\n// Unsupported 体量极小且每次回退都用,直接静态打包到主入口\nimport UnsupportedRenderer from './renderers/Unsupported/index.vue';\n\nconst MAX_ZIP_NESTING_DEPTH = 3;\n\ninterface Props {\n files: PreviewFileInput[];\n currentIndex: number;\n customRenderers?: CustomRenderer[];\n /** 运行模式: modal(弹窗) 或 embed(嵌入) */\n mode?: 'modal' | 'embed';\n /** ZIP 嵌套深度(内部使用),超过上限时不再递归渲染 ZIP */\n zipNestingDepth?: number;\n /** 语言 */\n locale?: Locale;\n /** 自定义翻译字典 */\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n /** 无头模式:隐藏工具栏和导航箭头,仅渲染文件内容 */\n headless?: boolean;\n /** 主题模式,默认 'dark' */\n theme?: Theme;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n customRenderers: () => [],\n mode: 'modal',\n zipNestingDepth: 0,\n locale: undefined,\n messages: undefined,\n headless: false,\n theme: 'dark',\n});\n\nconst emit = defineEmits<{\n (e: 'navigate', index: number): void;\n (e: 'close'): void;\n (e: 'custom-event', payload: CustomRendererEventPayload): void;\n}>();\n\nprovideLocale(toRef(props, 'locale'), toRef(props, 'messages'));\nconst { t } = useTranslator();\n\nconst systemDark = ref(\n typeof window !== 'undefined'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n : true,\n);\n\nlet mediaQueryCleanup: (() => void) | null = null;\n\nwatch(\n () => props.theme,\n (theme) => {\n if (mediaQueryCleanup) {\n mediaQueryCleanup();\n mediaQueryCleanup = null;\n }\n if (theme === 'auto') {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => { systemDark.value = e.matches; };\n mql.addEventListener('change', handler);\n mediaQueryCleanup = () => mql.removeEventListener('change', handler);\n }\n },\n { immediate: true },\n);\n\nonBeforeUnmount(() => {\n if (mediaQueryCleanup) mediaQueryCleanup();\n});\n\nconst resolvedTheme = computed(() =>\n props.theme === 'auto' ? (systemDark.value ? 'dark' : 'light') : props.theme,\n);\nprovideResolvedTheme(resolvedTheme);\n\nconst zoom = ref(1);\nconst rotation = ref(0);\nconst currentPage = ref(1);\nconst totalPages = ref(1);\nconst contentNaturalWidth = ref(0);\nconst contentNaturalHeight = ref(0);\nconst imageResetKey = ref(0);\n\nconst contentRef = ref<HTMLDivElement | null>(null);\nconst rootRef = ref<HTMLDivElement | null>(null);\n\n// 导航箭头自动隐藏\nconst navVisible = ref(true);\nlet navHideTimer: number | null = null;\nconst NAV_HIDE_DELAY = 2000;\n\nconst resetNavTimer = () => {\n navVisible.value = true;\n if (navHideTimer !== null) {\n clearTimeout(navHideTimer);\n }\n navHideTimer = window.setTimeout(() => {\n navVisible.value = false;\n }, NAV_HIDE_DELAY);\n};\n\nconst handleMouseMove = () => resetNavTimer();\n\n// 标准化文件输入\nconst normalizedFiles = computed(() => normalizeFiles(props.files));\n\nconst currentFile = computed(() => normalizedFiles.value[props.currentIndex]);\n\n// 自定义渲染器匹配\nconst customRenderer = computed(() => {\n if (!currentFile.value) return null;\n return props.customRenderers.find((r) => r.test(currentFile.value!)) || null;\n});\n\nconst customRendererComponent = computed(() => {\n if (!customRenderer.value || !currentFile.value) return null;\n return customRenderer.value.render(currentFile.value, customCtx.value);\n});\n\nconst fileType = computed(() => (currentFile.value ? getFileType(currentFile.value) : 'unsupported'));\n\n// 自定义渲染器事件派发器:未绑定 @custom-event 时仍调用 emit(Vue 会安全忽略未声明监听)\nconst emitCustom = (name: string, payload?: unknown) => {\n if (!currentFile.value) return;\n const ev: CustomRendererEventPayload = { name, payload, file: currentFile.value };\n emit('custom-event', ev);\n};\n\n// 自定义渲染器上下文\nconst customCtx = computed<CustomRendererContext>(() => ({\n emit: emitCustom,\n t: t.value,\n theme: resolvedTheme.value,\n locale: (props.locale ?? 'zh-CN') as Locale,\n}));\n\n// 通过 provide 暴露给深层子组件 inject 使用\nprovide('file-preview:custom-ctx', customCtx);\n\n// 重置状态当文件改变时\nwatch(\n () => props.currentIndex,\n () => {\n zoom.value = 1;\n rotation.value = 0;\n currentPage.value = 1;\n totalPages.value = 1;\n contentNaturalWidth.value = 0;\n contentNaturalHeight.value = 0;\n navVisible.value = true;\n if (navHideTimer !== null) {\n clearTimeout(navHideTimer);\n }\n }\n);\n\n// 图片加载后默认适应窗口\nwatch(\n [fileType, contentNaturalWidth, contentNaturalHeight],\n () => {\n if (\n fileType.value === 'image' &&\n contentNaturalWidth.value > 0 &&\n contentNaturalHeight.value > 0 &&\n contentRef.value\n ) {\n const containerWidth = contentRef.value.clientWidth;\n const containerHeight = contentRef.value.clientHeight;\n const scaleX = containerWidth / contentNaturalWidth.value;\n const scaleY = containerHeight / contentNaturalHeight.value;\n const newZoom = Math.min(scaleX, scaleY);\n zoom.value = Math.max(0.01, Math.min(10, newZoom));\n }\n }\n);\n\n// 导航箭头自动隐藏计时器\nwatch(\n () => normalizedFiles.value.length,\n (len) => {\n if (len > 1) resetNavTimer();\n },\n { immediate: true }\n);\n\n// 键盘导航\nconst handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && props.mode === 'modal') {\n emit('close');\n } else if (e.key === 'ArrowLeft' && props.currentIndex > 0) {\n emit('navigate', props.currentIndex - 1);\n } else if (e.key === 'ArrowRight' && props.currentIndex < normalizedFiles.value.length - 1) {\n emit('navigate', props.currentIndex + 1);\n }\n};\n\nonMounted(() => {\n if (props.mode === 'modal') {\n window.addEventListener('keydown', handleKeyDown);\n } else if (rootRef.value) {\n rootRef.value.addEventListener('keydown', handleKeyDown as EventListener);\n }\n});\n\nonBeforeUnmount(() => {\n if (navHideTimer !== null) clearTimeout(navHideTimer);\n if (props.mode === 'modal') {\n window.removeEventListener('keydown', handleKeyDown);\n } else if (rootRef.value) {\n rootRef.value.removeEventListener('keydown', handleKeyDown as EventListener);\n }\n});\n\nconst handleZoomIn = () => {\n zoom.value = Math.min(zoom.value + 0.1, 10);\n};\nconst handleZoomOut = () => {\n zoom.value = Math.max(zoom.value - 0.1, 0.01);\n};\nconst handleRotate = () => {\n rotation.value = rotation.value + 90;\n};\nconst handleRotateLeft = () => {\n rotation.value = rotation.value - 90;\n};\n\nconst handleFitToWidth = () => {\n if (contentRef.value && contentNaturalWidth.value > 0 && contentNaturalHeight.value > 0) {\n const containerWidth = contentRef.value.clientWidth;\n const containerHeight = contentRef.value.clientHeight;\n const scaleX = containerWidth / contentNaturalWidth.value;\n const scaleY = containerHeight / contentNaturalHeight.value;\n const newZoom = Math.min(scaleX, scaleY);\n zoom.value = Math.max(0.01, Math.min(10, newZoom));\n } else {\n zoom.value = 1;\n }\n rotation.value = 0;\n imageResetKey.value++;\n};\n\nconst handleOriginalSize = () => {\n zoom.value = 1;\n rotation.value = 0;\n imageResetKey.value++;\n};\n\nconst handleZoomChange = (newZoom: number) => {\n zoom.value = newZoom;\n};\n\nconst handleReset = () => {\n zoom.value = 1;\n rotation.value = 0;\n imageResetKey.value++;\n};\n\nconst handleDownload = () => {\n if (!currentFile.value) return;\n const link = document.createElement('a');\n link.href = currentFile.value.url;\n link.download = currentFile.value.name;\n link.click();\n};\n\nconst showCloseButton = computed(() => props.mode === 'modal');\n\nconst epubRef = ref<{ prevPage: () => void; nextPage: () => void; toggleFullWidth: () => void; toggleToc: () => void } | null>(null);\nconst epubCurrent = ref(0);\nconst epubTotal = ref(0);\nconst epubFullWidth = ref(false);\n\nconst mobiRef = ref<{ prevPage: () => void; nextPage: () => void; toggleFullWidth: () => void; toggleToc: () => void } | null>(null);\nconst mobiCurrent = ref(0);\nconst mobiTotal = ref(0);\nconst mobiFullWidth = ref(false);\n\nconst handleEpubChapterChange = (current: number, total: number) => {\n epubCurrent.value = current;\n epubTotal.value = total;\n};\n\nconst handleMobiChapterChange = (current: number, total: number) => {\n mobiCurrent.value = current;\n mobiTotal.value = total;\n};\n\nconst zipStats = ref<ZipToolbarStats | null>(null);\nconst handleZipStatsChange = (stats: ZipToolbarStats | null) => {\n zipStats.value = stats;\n};\n\nconst textWordWrap = ref(true);\nconst textHtmlPreview = ref(false);\nconst markdownViewMode = ref<'preview' | 'source'>('preview');\n\n// 工具栏配置 — 各 Renderer 自行声明。命中自定义渲染器时优先使用其 getToolbarGroups\nconst toolGroups = computed(() => {\n if (customRenderer.value) {\n return (\n customRenderer.value.getToolbarGroups?.(currentFile.value!, customCtx.value) ?? []\n );\n }\n if (fileType.value === 'image') {\n return getImageToolbarGroups({\n zoom: zoom.value,\n onZoomIn: handleZoomIn,\n onZoomOut: handleZoomOut,\n onFitToWidth: handleFitToWidth,\n onOriginalSize: handleOriginalSize,\n onRotateLeft: handleRotateLeft,\n onRotateRight: handleRotate,\n onReset: handleReset,\n t: t.value,\n });\n }\n if (fileType.value === 'pdf') {\n return getPdfToolbarGroups({\n zoom: zoom.value,\n onZoomIn: handleZoomIn,\n onZoomOut: handleZoomOut,\n onReset: handleReset,\n t: t.value,\n });\n }\n if (fileType.value === 'epub') {\n return getEpubToolbarGroups({\n epubRef: epubRef.value,\n current: epubCurrent.value,\n total: epubTotal.value,\n fullWidth: epubFullWidth.value,\n t: t.value,\n });\n }\n if (fileType.value === 'mobi') {\n return getMobiToolbarGroups({\n mobiRef: mobiRef.value,\n current: mobiCurrent.value,\n total: mobiTotal.value,\n fullWidth: mobiFullWidth.value,\n t: t.value,\n });\n }\n if (fileType.value === 'zip') {\n return getZipToolbarGroups({ stats: zipStats.value, t: t.value });\n }\n if (fileType.value === 'text') {\n const ext = currentFile.value!.name.split('.').pop()?.toLowerCase() || '';\n return getTextToolbarGroups({\n wordWrap: textWordWrap.value,\n onToggleWrap: () => { textWordWrap.value = !textWordWrap.value; },\n isHtml: ext === 'html' || ext === 'htm',\n htmlPreview: textHtmlPreview.value,\n onToggleHtmlPreview: () => { textHtmlPreview.value = !textHtmlPreview.value; },\n t: t.value,\n });\n }\n if (fileType.value === 'markdown') {\n return getMarkdownToolbarGroups({\n viewMode: markdownViewMode.value,\n onToggleViewMode: () => { markdownViewMode.value = markdownViewMode.value === 'preview' ? 'source' : 'preview'; },\n t: t.value,\n });\n }\n return [];\n});\n\n// 操作组:下载、关闭(通用,不属于任何 Renderer)\nconst actionGroups = computed<ToolbarGroup[]>(() => {\n const groups: ToolbarGroup[] = [\n {\n items: [\n { type: 'button', icon: Download, tooltip: t.value('common.download'), action: handleDownload },\n ],\n },\n ];\n if (showCloseButton.value) {\n groups.push({\n items: [\n { type: 'button', icon: X, tooltip: t.value('common.close'), action: () => emit('close') },\n ],\n });\n }\n return groups;\n});\n\nconst hasToolGroups = computed(() => toolGroups.value.length > 0);\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :tabindex=\"mode === 'embed' ? 0 : -1\"\n :data-theme=\"resolvedTheme\"\n class=\"vfp-relative vfp-w-full vfp-h-full vfp-flex vfp-flex-col vfp-overflow-hidden vfp-outline-none\"\n >\n <!-- 顶部工具栏 -->\n <div\n v-if=\"!headless\"\n class=\"vfp-flex-shrink-0 vfp-z-10 vfp-backdrop-blur-md vfp-border-b vfp-bg-surface-toolbar vfp-border-line\"\n style=\"padding-top: env(safe-area-inset-top, 0px)\"\n >\n <!-- 第一行: 文件名 + 桌面端工具按钮 -->\n <div class=\"vfp-flex vfp-items-center vfp-justify-between vfp-px-3 md:vfp-px-5 vfp-py-1.5 md:vfp-py-2.5\">\n <!-- 左侧: 文件名 + 分页 -->\n <div class=\"vfp-flex vfp-items-center vfp-flex-1 vfp-min-w-0 vfp-mr-2 md:vfp-mr-3\">\n <h2 class=\"vfp-font-medium vfp-text-xs md:vfp-text-sm vfp-truncate vfp-text-fg-primary\">\n {{ currentFile?.name }}\n </h2>\n <span class=\"vfp-text-xs vfp-ml-2 vfp-flex-shrink-0 vfp-text-fg-muted\">\n {{ currentIndex + 1 }}/{{ normalizedFiles.length }}\n </span>\n </div>\n\n <!-- 移动端: 仅下载 + 关闭 -->\n <div class=\"vfp-flex vfp-items-center vfp-gap-1 md:vfp-hidden vfp-flex-shrink-0\">\n <template v-for=\"(group, gi) in actionGroups\" :key=\"'m-action-' + gi\">\n <template v-for=\"(item, ii) in group.items\" :key=\"'m-action-' + gi + '-' + ii\">\n <button\n v-if=\"item.type === 'button'\"\n class=\"toolbar-btn\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n @click=\"(item as ToolbarButtonItem).action\"\n >\n <component :is=\"(item as ToolbarButtonItem).icon\" class=\"vfp-w-4 vfp-h-4\" />\n </button>\n </template>\n </template>\n </div>\n\n <!-- 桌面端: 完整工具按钮 -->\n <div class=\"vfp-hidden md:vfp-flex vfp-items-center vfp-gap-1 vfp-flex-shrink-0\">\n <template v-for=\"(group, gi) in toolGroups\" :key=\"'d-tool-' + gi\">\n <template v-for=\"(item, ii) in group.items\" :key=\"'d-tool-' + gi + '-' + ii\">\n <button\n v-if=\"item.type === 'button'\"\n class=\"toolbar-btn\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n @click=\"(item as ToolbarButtonItem).action\"\n >\n <component :is=\"(item as ToolbarButtonItem).icon\" class=\"vfp-w-4 vfp-h-4\" />\n </button>\n <span\n v-else-if=\"item.type === 'text'\"\n class=\"vfp-text-xs vfp-text-center vfp-font-medium vfp-tabular-nums vfp-text-fg-tertiary\"\n :style=\"{ minWidth: (item as ToolbarTextItem).minWidth || 'auto' }\"\n >\n {{ (item as ToolbarTextItem).content }}\n </span>\n </template>\n <div class=\"vfp-w-px vfp-h-4 vfp-mx-1 vfp-bg-divide\" />\n </template>\n <template v-for=\"(group, gi) in actionGroups\" :key=\"'d-action-' + gi\">\n <template v-for=\"(item, ii) in group.items\" :key=\"'d-action-' + gi + '-' + ii\">\n <button\n v-if=\"item.type === 'button'\"\n class=\"toolbar-btn\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n @click=\"(item as ToolbarButtonItem).action\"\n >\n <component :is=\"(item as ToolbarButtonItem).icon\" class=\"vfp-w-4 vfp-h-4\" />\n </button>\n </template>\n </template>\n </div>\n </div>\n\n <!-- 移动端第二行工具按钮 -->\n <div\n v-if=\"hasToolGroups\"\n class=\"vfp-flex vfp-items-center vfp-gap-1 vfp-px-3 vfp-pb-1.5 vfp-overflow-x-auto scrollbar-hide md:vfp-hidden\"\n >\n <template v-for=\"(group, gi) in toolGroups\" :key=\"'m-tool-' + gi\">\n <div v-if=\"gi > 0\" class=\"vfp-w-px vfp-h-4 vfp-mx-0.5 vfp-bg-divide\" />\n <template v-for=\"(item, ii) in group.items\" :key=\"'m-tool-' + gi + '-' + ii\">\n <button\n v-if=\"item.type === 'button'\"\n class=\"toolbar-btn\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n @click=\"(item as ToolbarButtonItem).action\"\n >\n <component :is=\"(item as ToolbarButtonItem).icon\" class=\"vfp-w-4 vfp-h-4\" />\n </button>\n <span\n v-else-if=\"item.type === 'text'\"\n class=\"vfp-text-xs vfp-text-center vfp-font-medium vfp-tabular-nums vfp-text-fg-tertiary\"\n :style=\"{ minWidth: (item as ToolbarTextItem).minWidth || 'auto' }\"\n >\n {{ (item as ToolbarTextItem).content }}\n </span>\n </template>\n </template>\n </div>\n </div>\n\n <!-- 内容区域 -->\n <div\n ref=\"contentRef\"\n class=\"vfp-flex-1 vfp-flex vfp-items-center vfp-justify-center vfp-overflow-auto\"\n @mousemove=\"handleMouseMove\"\n >\n <template v-if=\"currentFile\">\n <component :is=\"customRendererComponent\" v-if=\"customRendererComponent\" :file=\"currentFile\" :ctx=\"customCtx\" />\n <template v-else>\n <ImageRenderer\n v-if=\"fileType === 'image'\"\n :url=\"currentFile.url\"\n :zoom=\"zoom\"\n :rotation=\"rotation\"\n :reset-key=\"imageResetKey\"\n :file-size=\"currentFile.size\"\n @zoom-change=\"handleZoomChange\"\n @natural-width-change=\"(w: number) => (contentNaturalWidth = w)\"\n @natural-height-change=\"(h: number) => (contentNaturalHeight = h)\"\n />\n <PdfRenderer\n v-else-if=\"fileType === 'pdf'\"\n :url=\"currentFile.url\"\n :zoom=\"zoom\"\n :current-page=\"currentPage\"\n @page-change=\"(p: number) => (currentPage = p)\"\n @total-pages-change=\"(t: number) => (totalPages = t)\"\n @page-width-change=\"(w: number) => (contentNaturalWidth = w)\"\n />\n <DocxRenderer v-else-if=\"fileType === 'docx'\" :url=\"currentFile.url\" />\n <XlsxRenderer v-else-if=\"fileType === 'xlsx'\" :url=\"currentFile.url\" />\n <PptxRenderer v-else-if=\"fileType === 'pptx'\" :url=\"currentFile.url\" />\n <MsgRenderer v-else-if=\"fileType === 'msg'\" :url=\"currentFile.url\" />\n <EpubRenderer\n v-else-if=\"fileType === 'epub'\"\n ref=\"epubRef\"\n :url=\"currentFile.url\"\n @chapter-change=\"handleEpubChapterChange\"\n @full-width-change=\"(v: boolean) => (epubFullWidth = v)\"\n />\n <MobiRenderer\n v-else-if=\"fileType === 'mobi'\"\n ref=\"mobiRef\"\n :url=\"currentFile.url\"\n @chapter-change=\"handleMobiChapterChange\"\n @full-width-change=\"(v: boolean) => (mobiFullWidth = v)\"\n />\n <VideoRenderer v-else-if=\"fileType === 'video'\" :url=\"currentFile.url\" />\n <AudioRenderer\n v-else-if=\"fileType === 'audio'\"\n :url=\"currentFile.url\"\n :file-name=\"currentFile.name\"\n />\n <MarkdownRenderer v-else-if=\"fileType === 'markdown'\" :url=\"currentFile.url\" :view-mode=\"markdownViewMode\" />\n <JsonRenderer\n v-else-if=\"fileType === 'json'\"\n :url=\"currentFile.url\"\n :file-name=\"currentFile.name\"\n />\n <CsvRenderer\n v-else-if=\"fileType === 'csv'\"\n :url=\"currentFile.url\"\n :file-name=\"currentFile.name\"\n />\n <XmlRenderer\n v-else-if=\"fileType === 'xml'\"\n :url=\"currentFile.url\"\n :file-name=\"currentFile.name\"\n />\n <SubtitleRenderer\n v-else-if=\"fileType === 'subtitle'\"\n :url=\"currentFile.url\"\n :file-name=\"currentFile.name\"\n />\n <template v-else-if=\"fileType === 'zip' && props.zipNestingDepth >= MAX_ZIP_NESTING_DEPTH\">\n <UnsupportedRenderer\n :file-name=\"currentFile.name\"\n :file-type=\"currentFile.type\"\n @download=\"handleDownload\"\n />\n </template>\n <ZipRenderer\n v-else-if=\"fileType === 'zip'\"\n :url=\"currentFile.url\"\n :nesting-depth=\"props.zipNestingDepth\"\n @stats-change=\"handleZipStatsChange\"\n />\n <TextRenderer\n v-else-if=\"fileType === 'text'\"\n :url=\"currentFile.url\"\n :file-name=\"currentFile.name\"\n :word-wrap=\"textWordWrap\"\n :html-preview=\"textHtmlPreview\"\n />\n <UnsupportedRenderer\n v-else\n :file-name=\"currentFile.name\"\n :file-type=\"currentFile.type\"\n @download=\"handleDownload\"\n />\n </template>\n </template>\n </div>\n\n <!-- 左右导航箭头 -->\n <template v-if=\"!headless && normalizedFiles.length > 1\">\n <button\n v-if=\"currentIndex > 0\"\n :style=\"{\n opacity: navVisible ? 1 : 0,\n transform: navVisible ? 'translateY(-50%)' : 'translateY(-50%) translateX(-20px)',\n pointerEvents: navVisible ? 'auto' : 'none',\n transition: 'opacity 0.2s, transform 0.2s',\n }\"\n class=\"vfp-absolute vfp-z-20 vfp-left-2 md:vfp-left-4 vfp-top-1/2 vfp-w-10 vfp-h-10 md:vfp-w-12 md:vfp-h-12 vfp-rounded-full vfp-backdrop-blur-xl vfp-border vfp-flex vfp-items-center vfp-justify-center vfp-transition-colors vfp-shadow-2xl vfp-bg-surface-nav vfp-border-line hover:vfp-bg-surface-nav-hover vfp-text-fg-primary\"\n @click=\"emit('navigate', currentIndex - 1)\"\n @mouseenter=\"navVisible = true\"\n >\n <ChevronLeft class=\"vfp-w-5 vfp-h-5 md:vfp-w-6 md:vfp-h-6\" />\n </button>\n\n <button\n v-if=\"currentIndex < normalizedFiles.length - 1\"\n :style=\"{\n opacity: navVisible ? 1 : 0,\n transform: navVisible ? 'translateY(-50%)' : 'translateY(-50%) translateX(20px)',\n pointerEvents: navVisible ? 'auto' : 'none',\n transition: 'opacity 0.2s, transform 0.2s',\n }\"\n class=\"vfp-absolute vfp-z-20 vfp-right-2 md:vfp-right-4 vfp-top-1/2 vfp-w-10 vfp-h-10 md:vfp-w-12 md:vfp-h-12 vfp-rounded-full vfp-backdrop-blur-xl vfp-border vfp-flex vfp-items-center vfp-justify-center vfp-transition-colors vfp-shadow-2xl vfp-bg-surface-nav vfp-border-line hover:vfp-bg-surface-nav-hover vfp-text-fg-primary\"\n @click=\"emit('navigate', currentIndex + 1)\"\n @mouseenter=\"navVisible = true\"\n >\n <ChevronRight class=\"vfp-w-5 vfp-h-5 md:vfp-w-6 md:vfp-h-6\" />\n </button>\n </template>\n </div>\n</template>\n\n<style scoped>\n.toolbar-btn {\n position: relative;\n padding: 0.5rem;\n border-radius: 0.375rem;\n transition: all 0.15s;\n user-select: none;\n color: var(--fp-fg-primary);\n background: transparent;\n border: 0;\n cursor: pointer;\n}\n@media (min-width: 768px) {\n .toolbar-btn {\n padding: 0.375rem;\n }\n}\n.toolbar-btn:hover {\n background: var(--fp-surface-2);\n}\n.toolbar-btn:active {\n background: var(--fp-surface-3);\n}\n.toolbar-btn:disabled {\n color: var(--fp-fg-disabled);\n cursor: not-allowed;\n}\n/* Tooltip */\n.toolbar-btn[data-tooltip]::after {\n content: attr(data-tooltip);\n position: absolute;\n left: 50%;\n top: 100%;\n transform: translateX(-50%);\n margin-top: 6px;\n padding: 4px 8px;\n background: var(--fp-fg-primary);\n color: var(--fp-fg-inverse);\n font-size: 12px;\n line-height: 1.5;\n border-radius: 4px;\n white-space: nowrap;\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.2s, visibility 0.2s;\n z-index: 50;\n}\n.toolbar-btn[data-tooltip]::before {\n content: '';\n position: absolute;\n left: 50%;\n top: 100%;\n transform: translateX(-50%);\n margin-top: 2px;\n border: 4px solid transparent;\n border-bottom-color: var(--fp-fg-primary);\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.2s, visibility 0.2s;\n z-index: 50;\n}\n.toolbar-btn[data-tooltip]:hover::after,\n.toolbar-btn[data-tooltip]:hover::before {\n opacity: 1;\n visibility: visible;\n}\n</style>\n","import { onMounted, onUnmounted } from 'vue';\n\n/**\n * 锁定 body 滚动 (用于 Modal)\n */\nexport function useScrollLock(enabled: () => boolean) {\n let originalOverflow = '';\n let originalPaddingRight = '';\n let locked = false;\n\n const lock = () => {\n if (locked || typeof document === 'undefined') return;\n originalOverflow = document.body.style.overflow;\n originalPaddingRight = document.body.style.paddingRight;\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n document.body.style.overflow = 'hidden';\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n }\n locked = true;\n };\n\n const unlock = () => {\n if (!locked || typeof document === 'undefined') return;\n document.body.style.overflow = originalOverflow;\n document.body.style.paddingRight = originalPaddingRight;\n locked = false;\n };\n\n onMounted(() => {\n if (enabled()) lock();\n });\n\n onUnmounted(() => {\n unlock();\n });\n\n return { lock, unlock };\n}\n","<script setup lang=\"ts\">\nimport { watch, ref, onBeforeUnmount, computed } from 'vue';\nimport type { PreviewFileInput, Locale, Messages, Theme, CustomRendererEventPayload } from '@eternalheart/file-preview-core';\nimport type { CustomRenderer } from './types';\nimport FilePreviewContent from './FilePreviewContent.vue';\nimport { useScrollLock } from './composables/useScrollLock';\n\ninterface Props {\n files: PreviewFileInput[];\n currentIndex: number;\n isOpen: boolean;\n customRenderers?: CustomRenderer[];\n /** 语言 */\n locale?: Locale;\n /** 自定义翻译字典 */\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n /** 无头模式:隐藏工具栏和导航箭头 */\n headless?: boolean;\n /** 主题模式,默认 'dark' */\n theme?: Theme;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n customRenderers: () => [],\n locale: undefined,\n messages: undefined,\n headless: false,\n theme: 'dark',\n});\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n (e: 'navigate', index: number): void;\n (e: 'custom-event', payload: CustomRendererEventPayload): void;\n}>();\n\nconst { lock, unlock } = useScrollLock(() => props.isOpen);\n\nwatch(\n () => props.isOpen,\n (open) => {\n if (open) lock();\n else unlock();\n }\n);\n\nconst systemDark = ref(\n typeof window !== 'undefined'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n : true,\n);\n\nlet mediaQueryCleanup: (() => void) | null = null;\n\nwatch(\n () => props.theme,\n (theme) => {\n if (mediaQueryCleanup) {\n mediaQueryCleanup();\n mediaQueryCleanup = null;\n }\n if (theme === 'auto') {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => { systemDark.value = e.matches; };\n mql.addEventListener('change', handler);\n mediaQueryCleanup = () => mql.removeEventListener('change', handler);\n }\n },\n { immediate: true },\n);\n\nonBeforeUnmount(() => {\n if (mediaQueryCleanup) mediaQueryCleanup();\n});\n\nconst resolvedTheme = computed(() =>\n props.theme === 'auto' ? (systemDark.value ? 'dark' : 'light') : props.theme,\n);\n\nconst handleBackdropClick = () => emit('close');\nconst handleContentClick = (e: MouseEvent) => e.stopPropagation();\nconst handleWheel = (e: WheelEvent) => e.stopPropagation();\n</script>\n\n<template>\n <Teleport to=\"body\">\n <Transition name=\"vfp-fade\">\n <div v-if=\"isOpen\" class=\"vfp-root\" :data-theme=\"resolvedTheme\">\n <div\n class=\"vfp-fixed vfp-inset-0 vfp-z-[9999] vfp-flex vfp-items-center vfp-justify-center vfp-backdrop-blur-md vfp-overflow-hidden vfp-bg-surface-overlay\"\n @click=\"handleBackdropClick\"\n @wheel=\"handleWheel\"\n >\n <div class=\"vfp-relative vfp-w-full vfp-h-full\" @click=\"handleContentClick\">\n <FilePreviewContent\n mode=\"modal\"\n :files=\"files\"\n :current-index=\"currentIndex\"\n :custom-renderers=\"customRenderers\"\n :locale=\"locale\"\n :messages=\"messages\"\n :headless=\"headless\"\n :theme=\"theme\"\n @close=\"emit('close')\"\n @navigate=\"(i) => emit('navigate', i)\"\n @custom-event=\"(p) => emit('custom-event', p)\"\n />\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, watch, onBeforeUnmount, computed } from 'vue';\nimport type { CSSProperties } from 'vue';\nimport type { PreviewFileInput, Locale, Messages, Theme, CustomRendererEventPayload } from '@eternalheart/file-preview-core';\nimport type { CustomRenderer } from './types';\nimport FilePreviewContent from './FilePreviewContent.vue';\n\ninterface Props {\n files: PreviewFileInput[];\n currentIndex?: number;\n customRenderers?: CustomRenderer[];\n /** 宽度,默认 100% 填充父容器 */\n width?: number | string;\n /** 高度,默认 100% 填充父容器 */\n height?: number | string;\n /** 语言 */\n locale?: Locale;\n /** 自定义翻译字典 */\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n /** 无头模式:隐藏工具栏和导航箭头 */\n headless?: boolean;\n /** 主题模式,默认 'dark' */\n theme?: Theme;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n currentIndex: 0,\n customRenderers: () => [],\n width: '100%',\n height: '100%',\n locale: undefined,\n messages: undefined,\n headless: false,\n theme: 'dark',\n});\n\nconst emit = defineEmits<{\n (e: 'navigate', index: number): void;\n (e: 'custom-event', payload: CustomRendererEventPayload): void;\n}>();\n\nconst systemDark = ref(\n typeof window !== 'undefined'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n : true,\n);\n\nlet mediaQueryCleanup: (() => void) | null = null;\n\nwatch(\n () => props.theme,\n (theme) => {\n if (mediaQueryCleanup) {\n mediaQueryCleanup();\n mediaQueryCleanup = null;\n }\n if (theme === 'auto') {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => { systemDark.value = e.matches; };\n mql.addEventListener('change', handler);\n mediaQueryCleanup = () => mql.removeEventListener('change', handler);\n }\n },\n { immediate: true },\n);\n\nonBeforeUnmount(() => {\n if (mediaQueryCleanup) mediaQueryCleanup();\n});\n\nconst resolvedTheme = computed(() =>\n props.theme === 'auto' ? (systemDark.value ? 'dark' : 'light') : props.theme,\n);\n\nconst wrapperStyle: CSSProperties = {\n width: typeof props.width === 'number' ? `${props.width}px` : props.width,\n height: typeof props.height === 'number' ? `${props.height}px` : props.height,\n};\n</script>\n\n<template>\n <div class=\"vfp-root\" :style=\"wrapperStyle\" :data-theme=\"resolvedTheme\">\n <div class=\"vfp-relative vfp-w-full vfp-h-full vfp-overflow-hidden vfp-bg-surface-overlay\">\n <FilePreviewContent\n mode=\"embed\"\n :files=\"files\"\n :current-index=\"currentIndex\"\n :custom-renderers=\"customRenderers\"\n :locale=\"locale\"\n :messages=\"messages\"\n :headless=\"headless\"\n :theme=\"theme\"\n @navigate=\"(i) => emit('navigate', i)\"\n @custom-event=\"(p) => emit('custom-event', p)\"\n />\n </div>\n </div>\n</template>\n","// 导入样式\nimport './index.css';\n\n// 导入版本号\nimport packageJson from '../package.json';\n\n// 导出版本号\nexport const VERSION = packageJson.version;\n\n// 导出主组件\nexport { default as FilePreviewModal } from './FilePreviewModal.vue';\nexport { default as FilePreviewEmbed } from './FilePreviewEmbed.vue';\nexport { default as FilePreviewContent } from './FilePreviewContent.vue';\n\n// 导出类型定义\nexport type {\n PreviewFile,\n PreviewFileLink,\n PreviewFileInput,\n FileType,\n PreviewState,\n ToolbarAction,\n CustomRenderer,\n CustomRendererContext,\n CustomRendererEventPayload,\n} from './types';\n\n// 导出工具函数\nexport {\n normalizeFile,\n normalizeFiles,\n getFileType,\n configurePdfWorker,\n} from '@eternalheart/file-preview-core';\n\nexport type { PdfWorkerOptions } from '@eternalheart/file-preview-core';\n\n// 导出 i18n 相关\nexport { useTranslator, provideLocale } from './composables/useTranslator';\nexport { LOCALE_KEY } from './i18n/localeKey';\nexport type { Locale, Messages, Translator, Theme } from '@eternalheart/file-preview-core';\n"],"names":["j","n","k","t","I","lt","ct","r","o","dt","ut","pt","ft","mt","gt","a","c","s","l","f","u","$","ht","z","xt","E","B","W","N","i","d","M","R","Z","p","O","g","F","b","h","x","w","D","L","v","m","y","_","S","V","bt","Ft","A","vt","wt","_t","q","G","H","J","X","T","K","Q","Y","tt","et","ot","P","Ct","kt","St","nt","rt","C","it","at","Mt","LOCALE_KEY","provideLocale","locale","messages","localeRef","computed","unref","createTranslator","provide","fallbackT","getFallback","useTranslator","injected","inject","THEME_KEY","provideResolvedTheme","theme","themeRef","useResolvedTheme","OriginalSizeIcon","_props","attrs","getImageToolbarGroups","ctx","ZoomOut","ZoomIn","Scan","RotateCcw","RotateCw","RefreshCw","getPdfToolbarGroups","getEpubToolbarGroups","List","_a","ChevronLeft","ChevronRight","Minimize2","Maximize2","getMobiToolbarGroups","getZipToolbarGroups","stats","formatFileSize","getTextToolbarGroups","groups","WrapText","Code","Eye","getMarkdownToolbarGroups","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","_toDisplayString","_unref","wrap","loader","defineAsyncComponent","RendererLoading","ImageRenderer","PdfRenderer","DocxRenderer","XlsxRenderer","PptxRenderer","MsgRenderer","EpubRenderer","MobiRenderer","VideoRenderer","AudioRenderer","MarkdownRenderer","JsonRenderer","CsvRenderer","XmlRenderer","SubtitleRenderer","ZipRenderer","TextRenderer","emit","__emit","_createVNode","FileQuestion","_hoisted_4","__props","_hoisted_5","Download","_createTextVNode","MAX_ZIP_NESTING_DEPTH","NAV_HIDE_DELAY","props","toRef","systemDark","ref","mediaQueryCleanup","watch","mql","handler","e","onBeforeUnmount","resolvedTheme","zoom","rotation","currentPage","totalPages","contentNaturalWidth","contentNaturalHeight","imageResetKey","contentRef","rootRef","navVisible","navHideTimer","resetNavTimer","handleMouseMove","normalizedFiles","normalizeFiles","currentFile","customRenderer","customRendererComponent","customCtx","fileType","getFileType","emitCustom","name","payload","ev","containerWidth","containerHeight","scaleX","scaleY","newZoom","len","handleKeyDown","onMounted","handleZoomIn","handleZoomOut","handleRotate","handleRotateLeft","handleFitToWidth","handleOriginalSize","handleZoomChange","handleReset","handleDownload","link","showCloseButton","epubRef","epubCurrent","epubTotal","epubFullWidth","mobiRef","mobiCurrent","mobiTotal","mobiFullWidth","handleEpubChapterChange","current","total","handleMobiChapterChange","zipStats","handleZipStatsChange","textWordWrap","textHtmlPreview","markdownViewMode","toolGroups","_b","ext","_c","actionGroups","hasToolGroups","_hoisted_6","_hoisted_7","_Fragment","_renderList","group","gi","item","ii","_createBlock","_resolveDynamicComponent","_hoisted_9","_normalizeStyle","_hoisted_12","_hoisted_13","_cache","UnsupportedRenderer","$event","useScrollLock","enabled","originalOverflow","originalPaddingRight","locked","lock","scrollbarWidth","unlock","onUnmounted","open","handleBackdropClick","handleContentClick","handleWheel","_Teleport","_Transition","FilePreviewContent","wrapperStyle","VERSION","packageJson"],"mappings":";;;;;;AACA,SAASA,GAAE,GAAG;AACZ,MAAI;AACF,UAAMC,IAAI,IAAI,IAAI,CAAC,EAAE,SAAS,MAAM,GAAG,EAAE,IAAG,KAAM;AAClD,WAAO,mBAAmBA,CAAC;AAAA,EAC7B,QAAQ;AACN,UAAM,IAAI,EAAE,MAAM,GAAG,EAAE,IAAG,KAAM;AAChC,WAAO,mBAAmB,CAAC;AAAA,EAC7B;AACF;AACA,SAASC,GAAE,GAAG;AACZ,MAAID;AACJ,QAAME,MAAMF,IAAI,EAAE,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,MAAO;AAC3E,SAAO;AAAA;AAAA,IAEL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA;AAAA,IAEL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,KAAK;AAAA;AAAA,IAEL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA;AAAA,IAEN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA;AAAA,IAEL,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACT,EAAIE,CAAC,KAAK;AACV;AACA,SAASC,GAAE,GAAG,IAAI,GAAG;AACnB,MAAI,aAAa;AACf,WAAO;AAAA,MACL,IAAI,QAAQ,KAAK,IAAG,CAAE,IAAI,CAAC;AAAA,MAC3B,MAAM,EAAE;AAAA,MACR,KAAK,IAAI,gBAAgB,CAAC;AAAA,MAC1B,MAAM,EAAE,QAAQF,GAAE,EAAE,IAAI;AAAA,MACxB,MAAM,EAAE;AAAA,IACd;AACE,MAAI,OAAO,KAAK,UAAU;AACxB,UAAM,IAAIF,GAAE,CAAC;AACb,WAAO;AAAA,MACL,IAAI,OAAO,KAAK,IAAG,CAAE,IAAI,CAAC;AAAA,MAC1B,MAAM;AAAA,MACN,KAAK;AAAA,MACL,MAAME,GAAE,CAAC;AAAA,IACf;AAAA,EACE;AACA,SAAO;AAAA,IACL,IAAI,EAAE,MAAM,QAAQ,KAAK,IAAG,CAAE,IAAI,CAAC;AAAA,IACnC,MAAM,EAAE;AAAA,IACR,KAAK,EAAE;AAAA,IACP,MAAM,EAAE,QAAQA,GAAE,EAAE,IAAI;AAAA,IACxB,MAAM,EAAE;AAAA,EACZ;AACA;AACA,SAASG,GAAG,GAAG;AACb,SAAO,EAAE,IAAI,CAAC,GAAG,MAAMD,GAAE,GAAG,CAAC,CAAC;AAChC;AACA,SAASE,GAAG,GAAG;AACb,MAAIC;AACJ,QAAMJ,MAAMI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,MAAO,IAAIC,IAAI,EAAE,KAAK,YAAW;AAC1G,MAAIA,EAAE,WAAW,QAAQ,KAAK,CAAC,OAAO,QAAQ,OAAO,OAAO,QAAQ,KAAK,EAAE,SAASL,CAAC;AACnF,WAAO;AACT,MAAIK,EAAE,SAAS,KAAK,KAAKL,MAAM;AAC7B,WAAO;AACT,MAAIK,EAAE,SAAS,kBAAkB,KAAKL,MAAM;AAC1C,WAAO;AACT,MAAIK,EAAE,SAAS,eAAe,KAAKL,MAAM;AACvC,WAAO;AACT,MAAIK,EAAE,SAAS,gBAAgB,KAAKL,MAAM,UAAUA,MAAM;AACxD,WAAO;AACT,MAAIK,EAAE,SAAS,YAAY,KAAKL,MAAM;AACpC,WAAO;AACT,MAAIK,EAAE,SAAS,MAAM,KAAKL,MAAM;AAC9B,WAAO;AACT,MAAI,CAAC,QAAQ,OAAO,QAAQ,KAAK,EAAE,SAASA,CAAC,KAAKK,MAAM,oCAAoCA,MAAM;AAChG,WAAO;AACT,MAAI,CAAC,OAAO,KAAK,EAAE,SAASL,CAAC,KAAKK,MAAM,cAAcA,MAAM;AAC1D,WAAO;AACT,MAAIL,MAAM,SAASK,MAAM,qBAAqBA,MAAM;AAClD,WAAO;AACT,MAAI,CAAC,OAAO,OAAO,OAAO,QAAQ,OAAO,OAAO,QAAQ,MAAM,EAAE,SAASL,CAAC,KAAKK,MAAM,cAAcA,MAAM,0BAA0BA,MAAM;AACvI,WAAO;AACT,MAAIL,MAAM,SAASK,MAAM,qBAAqBA,MAAM;AAClD,WAAO;AACT,MAAIA,EAAE,WAAW,QAAQ,KAAK,CAAC,OAAO,QAAQ,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK,EAAE,SAASL,CAAC;AAC9G,WAAO;AACT,MAAIK,EAAE,WAAW,QAAQ,KAAK,CAAC,OAAO,OAAO,OAAO,OAAO,QAAQ,KAAK,EAAE,SAASL,CAAC;AAClF,WAAO;AACT,MAAIA,MAAM,QAAQA,MAAM;AACtB,WAAO;AACT,MAAIK,MAAM,sBAAsBL,MAAM;AACpC,WAAO;AACT,QAAMF,IAAI;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACE,SAAOO,EAAE,WAAW,OAAO,KAAKP,EAAE,SAASE,CAAC,IAAI,SAAS;AAC3D;AACA,SAASM,GAAG,GAAG;AACb,MAAIR;AACJ,QAAME,MAAMF,IAAI,EAAE,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,MAAO;AAC3E,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,EACT,EAAIE,CAAC,KAAK;AACV;AACA,SAASO,GAAG,GAAG;AACb,MAAIT;AACJ,QAAME,MAAMF,IAAI,EAAE,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,EAAG,MAAM,GAAG,EAAE,CAAC,MAAM;AACzF,SAAO;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,KAAK;AAAA,EACT,EAAIE,CAAC,KAAK;AACV;AACA,SAASQ,GAAG,GAAG;AACb,SAAO,IAAI,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,OAAO,IAAI,IAAI,MAAM,QAAQ,CAAC,CAAC,QAAQ,IAAI,KAAK,OAAO,OAAO,QAAQ,CAAC,CAAC;AAClH;AACA,SAASC,GAAG,GAAG;AACb,MAAI,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC,KAAK,IAAI,EAAG,QAAO;AAC9C,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE,GAAG,IAAI,KAAK,MAAM,IAAI,EAAE;AACnD,SAAO,GAAG,CAAC,IAAI,EAAE,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC;AAC9C;AACA,SAASC,GAAG,GAAG;AACb,MAAIL;AACJ,YAAUA,IAAI,EAAE,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,MAAO,QAAQ,QAAQ,MAAM;AACjG;AACA,SAASM,GAAG,GAAG,IAAI,IAAI;AACrB,QAAM,IAAI,EAAE,aAAa,KAAKb,IAAI,EAAE,oBAAoB,IAAIM,IAAI,CAAA;AAChE,MAAIQ,IAAI,CAAA,GAAI,IAAI,IAAIC,IAAI,IAAIC,IAAI;AAChC,QAAMC,IAAI,EAAE;AACZ,SAAOD,IAAIC,KAAK;AACd,UAAM,IAAI,EAAED,CAAC;AACb,QAAID,GAAG;AACL,UAAI,MAAM,KAAK;AACb,YAAI,EAAEC,IAAI,CAAC,MAAM,KAAK;AACpB,eAAK,KAAKA,KAAK;AACf;AAAA,QACF;AACA,QAAAD,IAAI,IAAIC,KAAK;AACb;AAAA,MACF;AACA,WAAK,GAAGA,KAAK;AACb;AAAA,IACF;AACA,QAAI,MAAM,KAAK;AACb,MAAAD,IAAI,IAAIC,KAAK;AACb;AAAA,IACF;AACA,QAAI,MAAM,GAAG;AACX,MAAAF,EAAE,KAAK,CAAC,GAAG,IAAI,IAAIE,KAAK;AACxB;AAAA,IACF;AACA,QAAI,MAAM,MAAM;AACd,QAAEA,IAAI,CAAC,MAAM;AAAA,MACbA,KAAK,IAAIF,EAAE,KAAK,CAAC,GAAGR,EAAE,KAAKQ,CAAC,GAAGA,IAAI,CAAA,GAAI,IAAI,IAAIE,KAAK;AACpD;AAAA,IACF;AACA,QAAI,MAAM;AAAA,GACX;AACG,MAAAF,EAAE,KAAK,CAAC,GAAGR,EAAE,KAAKQ,CAAC,GAAGA,IAAI,CAAA,GAAI,IAAI,IAAIE,KAAK;AAC3C;AAAA,IACF;AACA,SAAK,GAAGA,KAAK;AAAA,EACf;AACA,QAAM,EAAE,SAAS,KAAKF,EAAE,SAAS,OAAOA,EAAE,KAAK,CAAC,GAAGR,EAAE,KAAKQ,CAAC,IAAIR,EAAE,SAAS,KAAK;AAC7E,UAAM,IAAIA,EAAEA,EAAE,SAAS,CAAC;AACxB,QAAI,EAAE,WAAW,KAAK,EAAE,CAAC,MAAM;AAC7B,MAAAA,EAAE,IAAG;AAAA;AAEL;AAAA,EACJ;AACA,MAAI,IAAI,IAAIY,IAAIZ;AAChB,EAAAN,KAAKM,EAAE,SAAS,MAAM,IAAIA,EAAE,CAAC,GAAGY,IAAIZ,EAAE,MAAM,CAAC;AAC7C,QAAMa,IAAI,KAAK;AAAA,IACb,EAAE;AAAA,IACF,GAAGD,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM;AAAA,IACxB;AAAA,EACJ;AACE,aAAW,KAAKA;AACd,WAAO,EAAE,SAASC,IAAK,GAAE,KAAK,EAAE;AAClC,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,MAAMD;AAAA,IACN,aAAaC;AAAA,IACb,WAAW;AAAA,EACf;AACA;AACA,SAASC,GAAE,GAAG;AACZ,QAAM,IAAI,aAAa,aAAa,IAAI,IAAI,WAAW,CAAC;AACxD,MAAI,EAAE,UAAU,KAAK,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM;AAC5D,WAAO,IAAI,YAAY,OAAO,EAAE,OAAO,CAAC;AAC1C,MAAI,EAAE,UAAU,KAAK,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM;AAC5C,WAAO,IAAI,YAAY,UAAU,EAAE,OAAO,CAAC;AAC7C,MAAI,EAAE,UAAU,KAAK,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM;AAC5C,WAAO,IAAI,YAAY,UAAU,EAAE,OAAO,CAAC;AAC7C,MAAI;AACF,WAAO,IAAI,YAAY,SAAS,EAAE,OAAO,GAAE,CAAE,EAAE,OAAO,CAAC;AAAA,EACzD,QAAQ;AAAA,EACR;AACA,MAAI;AACF,WAAO,IAAI,YAAY,KAAK,EAAE,OAAO,CAAC;AAAA,EACxC,QAAQ;AAAA,EACR;AACA,SAAO,IAAI,YAAY,SAAS,EAAE,OAAO,IAAI,EAAE,OAAO,CAAC;AACzD;AAEA,eAAeC,GAAG,GAAG,GAAG;AACtB,QAAM,IAAI,MAAM,MAAM,GAAG,CAAC;AAC1B,MAAI,CAAC,EAAE,GAAI,OAAM,IAAI,MAAM,SAAS,EAAE,MAAM,EAAE;AAC9C,QAAMrB,IAAI,MAAM,EAAE,YAAW;AAC7B,SAAOoB,GAAEpB,CAAC;AACZ;AACA,SAASsB,GAAE,GAAG;AACZ,QAAM,IAAI,EAAE,KAAI,EAAG,QAAQ,KAAK,GAAG,GAAG,IAAI,EAAE,MAAM,GAAG,EAAE,IAAI,CAACtB,MAAMA,EAAE,MAAM;AAC1E,MAAI,EAAE,WAAW,GAAG;AAClB,UAAM,CAACA,GAAGM,GAAGQ,CAAC,IAAI;AAClB,WAAO,OAAOd,CAAC,IAAI,OAAO,OAAOM,CAAC,IAAI,KAAK,OAAOQ,CAAC;AAAA,EACrD;AACA,MAAI,EAAE,WAAW,GAAG;AAClB,UAAM,CAACd,GAAGM,CAAC,IAAI;AACf,WAAO,OAAON,CAAC,IAAI,KAAK,OAAOM,CAAC;AAAA,EAClC;AACA,SAAO,OAAO,CAAC,KAAK;AACtB;AACA,SAASiB,GAAG,GAAG;AACb,MAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAG,QAAO;AAClC,QAAM,IAAI,KAAK,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,KAAKvB,IAAI,KAAK,MAAM,IAAI,GAAG,IAAI,IAAIM,IAAI,KAAK,MAAM,IAAI,GAAG,IAAI,IAAIQ,IAAI,KAAK,MAAM,IAAI,IAAI,GAAG,IAAI,CAACC,GAAGC,IAAI,MAAMD,EAAE,SAAQ,EAAG,SAASC,GAAG,GAAG;AAChL,SAAO,GAAG,EAAEF,CAAC,CAAC,IAAI,EAAER,CAAC,CAAC,IAAI,EAAEN,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC3C;AACA,MAAMwB,KAAI,uFAAuFC,KAAI;AACrG,SAASC,GAAE,GAAG;AACZ,QAAM,IAAI,EAAE,QAAQ,WAAW,EAAE,EAAE,UAAS;AAC5C,SAAO,UAAU,KAAK,CAAC,IAAI,QAAQ,WAAW,KAAK,CAAC,KAAK,eAAe,KAAK,CAAC,IAAI,SAAS,qBAAqB,KAAK,CAAC,KAAK,cAAc,KAAK,CAAC,IAAI,6BAA6B,KAAK,CAAC,IAAI,QAAQ,QAAQD,GAAE,KAAK,CAAC,KAAK,6CAA6C,KAAK,CAAC,IAAI,oCAAoC,KAAK,CAAC,IAAI,SAAS,QAAQ;AAC/U;AACA,SAASE,GAAE,GAAG,GAAG;AACf,QAAM3B,IAAI,EAAE,QAAQ,UAAU;AAAA,CAC/B,EAAE,QAAQ,WAAW,EAAE,EAAE,MAAM;AAAA,CAC/B,GAAGM,IAAI,CAAA;AACN,MAAIQ,GAAGc,IAAI;AACX,MAAI,MAAM,OAAO;AACf,UAAMb,IAAI,CAAA;AACV,WAAOa,IAAI5B,EAAE,UAAUA,EAAE4B,CAAC,EAAE,KAAI,MAAO;AACrC,MAAAb,EAAE,KAAKf,EAAE4B,CAAC,CAAC,GAAGA;AAChB,SAAKd,IAAIC,EAAE,KAAK;AAAA,CACnB,GAAGa,IAAI5B,EAAE,UAAUA,EAAE4B,CAAC,EAAE,KAAI,MAAO,KAAM,CAAAA;AAAA,EACxC;AACA,SAAOA,IAAI5B,EAAE,UAAU;AACrB,WAAO4B,IAAI5B,EAAE,UAAUA,EAAE4B,CAAC,EAAE,KAAI,MAAO,KAAM,CAAAA;AAC7C,QAAIA,KAAK5B,EAAE,OAAQ;AACnB,QAAIe,GAAG,IAAI;AACX,QAAIS,GAAE,KAAKxB,EAAE4B,CAAC,CAAC;AACb,UAAI5B,EAAE4B,CAAC,GAAGA;AAAA,aACHb,IAAIf,EAAE4B,CAAC,EAAE,KAAI,KAAM,QAAQA,KAAKA,IAAI5B,EAAE,UAAUwB,GAAE,KAAKxB,EAAE4B,CAAC,CAAC;AAClE,UAAI5B,EAAE4B,CAAC,GAAGA;AAAA;AAEV;AACF,QAAI,CAAC,EAAG;AACR,UAAMX,IAAI,EAAE,MAAM,+BAA+B;AACjD,QAAI,CAACA,EAAG;AACR,UAAMY,IAAIP,GAAEL,EAAE,CAAC,CAAC,GAAGC,IAAII,GAAEL,EAAE,CAAC,CAAC,GAAGE,IAAI,CAAA;AACpC,WAAOS,IAAI5B,EAAE,UAAUA,EAAE4B,CAAC,EAAE,KAAI,MAAO;AACrC,MAAAT,EAAE,KAAKnB,EAAE4B,CAAC,CAAC,GAAGA;AAChB,IAAAtB,EAAE,KAAK,EAAE,IAAIS,GAAG,OAAOc,GAAG,KAAKX,GAAG,MAAMC,EAAE,KAAK;AAAA,CAClD,GAAG;AAAA,EACF;AACA,SAAO,EAAE,QAAQ,GAAG,MAAMb,GAAG,QAAQQ,EAAC;AACxC;AACA,SAASgB,GAAE,GAAG,GAAG,GAAG;AAClB,QAAM9B,IAAI,OAAO,CAAC,GAAGM,IAAI,OAAO,CAAC;AACjC,MAAIQ,IAAI;AACR,MAAI,GAAG;AACL,UAAM,KAAK,IAAI,OAAO,MAAM,GAAG,CAAC;AAChC,IAAAA,IAAI,OAAO,CAAC;AAAA,EACd;AACA,SAAOd,IAAI,KAAKM,IAAIQ,IAAI;AAC1B;AACA,SAASiB,GAAE,GAAG,GAAG;AACf,QAAM,IAAI,mDAAmD,KAAK,EAAE,KAAI,CAAE;AAC1E,MAAI,CAAC,EAAG,QAAO;AACf,QAAM/B,IAAI,EAAE,CAAC,EAAE,eAAeM,IAAI,EAAE,CAAC,EAAE,KAAI;AAC3C,MAAI,EAAE,SAASN,CAAC,IAAIM,GAAGN,MAAM,UAAU;AACrC,UAAMc,IAAI,OAAOR,CAAC;AAClB,UAAMQ,CAAC,MAAM,EAAE,WAAWA;AAAA,EAC5B;AACA,SAAO;AACT;AACA,SAASkB,GAAE,GAAG;AACZ,QAAMzB,IAAI,EAAE,QAAQ,UAAU;AAAA,CAC/B,EAAE,QAAQ,WAAW,EAAE,EAAE,MAAM;AAAA,CAC/B,GAAGP,IAAI,EAAE,UAAU,IAAI,UAAU,EAAC,GAAIM,IAAI,8CAA8CQ,IAAI,CAAA;AAC3F,aAAWE,KAAKT,GAAG;AACjB,UAAMU,IAAID,EAAE,KAAI;AAChB,QAAI,CAACC,KAAKc,GAAEd,GAAGjB,CAAC,EAAG;AACnB,UAAM6B,IAAI,CAAA;AACV,QAAIX,IAAI;AACR,IAAAZ,EAAE,YAAY;AACd,QAAIa;AACJ,YAAQA,IAAIb,EAAE,KAAKW,CAAC,OAAO,QAAQE,EAAE,UAAUD;AAC7C,MAAAW,EAAE,KAAKC,GAAEX,EAAE,CAAC,GAAGA,EAAE,CAAC,GAAGA,EAAE,CAAC,CAAC,CAAC,GAAGD,IAAIC,EAAE,QAAQA,EAAE,CAAC,EAAE;AAClD,QAAIU,EAAE,WAAW,EAAG;AACpB,UAAMI,IAAIhB,EAAE,MAAMC,CAAC,EAAE,KAAI;AACzB,eAAW,KAAKW;AACd,MAAAf,EAAE,KAAK,EAAE,OAAO,GAAG,MAAMmB,GAAG;AAAA,EAChC;AACA,EAAAnB,EAAE,KAAK,CAACE,GAAGC,MAAMD,EAAE,QAAQC,EAAE,KAAK;AAClC,QAAMW,IAAI5B,EAAE,WAAW;AACvB,SAAO,EAAE,QAAQ,OAAO,MAAMc,EAAE,IAAI,CAACE,GAAGC,MAAM;AAC5C,UAAMY,IAAI,KAAK,IAAI,GAAGb,EAAE,QAAQY,CAAC,GAAGV,IAAIJ,EAAEG,IAAI,CAAC,GAAGE,IAAID,IAAI,KAAK,IAAIW,GAAGX,EAAE,QAAQU,CAAC,IAAIC,IAAI;AACzF,WAAO,EAAE,OAAOA,GAAG,KAAKV,GAAG,MAAMH,EAAE,KAAI;AAAA,EACzC,CAAC,GAAG,UAAUhB,EAAE,SAAQ;AAC1B;AACA,SAASkC,GAAE,GAAG;AACZ,QAAM3B,IAAI,EAAE,QAAQ,UAAU;AAAA,CAC/B,EAAE,QAAQ,WAAW,EAAE,EAAE,MAAM;AAAA,CAC/B,GAAGP,IAAI,EAAE,UAAU,CAAA,GAAI,UAAU,KAAKM,IAAI,8CAA8CQ,IAAI,4CAA4Cc,IAAI,CAAA;AAC3I,aAAWX,KAAKV,GAAG;AACjB,UAAMsB,IAAIZ,EAAE,KAAI;AAChB,QAAI,CAACY,KAAKE,GAAEF,GAAG7B,CAAC,EAAG;AACnB,UAAMkB,IAAI,CAAA;AACV,QAAIC,IAAI;AACR,IAAAb,EAAE,YAAY;AACd,QAAI2B;AACJ,YAAQA,IAAI3B,EAAE,KAAKuB,CAAC,OAAO,QAAQI,EAAE,UAAUd;AAC7C,MAAAD,EAAE,KAAKY,GAAEG,EAAE,CAAC,GAAGA,EAAE,CAAC,GAAGA,EAAE,CAAC,CAAC,CAAC,GAAGd,IAAIc,EAAE,QAAQA,EAAE,CAAC,EAAE;AAClD,QAAIf,EAAE,WAAW,EAAG;AACpB,UAAM,IAAIW,EAAE,MAAMV,CAAC;AACnB,eAAWgB,KAAKjB;AACd,MAAAU,EAAE,KAAK,EAAE,OAAOO,GAAG,KAAK,GAAG;AAAA,EAC/B;AACA,EAAAP,EAAE,KAAK,CAACX,GAAGY,MAAMZ,EAAE,QAAQY,EAAE,KAAK;AAClC,QAAMd,IAAIf,EAAE,WAAW;AACvB,SAAO,EAAE,QAAQ,QAAQ,MAAM4B,EAAE,IAAI,CAACX,GAAGY,MAAM;AAC7C,UAAMX,IAAI,CAAA;AACV,QAAIC,IAAI,IAAIc,IAAI,GAAG,IAAI;AACvB,IAAAnB,EAAE,YAAY;AACd,QAAIqB;AACJ,YAAQA,IAAIrB,EAAE,KAAKG,EAAE,GAAG,OAAO,QAAQ;AACrC,YAAMmB,IAAInB,EAAE,IAAI,MAAMgB,GAAGE,EAAE,KAAK;AAChC,YAAM,QAAQC,KAAKlB,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAIH,CAAC,GAAG,MAAMqB,EAAC,CAAE,GAAGjB,KAAKiB,GAAG,IAAIN,GAAEK,EAAE,CAAC,GAAGA,EAAE,CAAC,GAAGA,EAAE,CAAC,CAAC,GAAGF,IAAIE,EAAE,QAAQA,EAAE,CAAC,EAAE;AAAA,IACzH;AACA,UAAME,IAAIpB,EAAE,IAAI,MAAMgB,CAAC;AACvB,UAAM,QAAQI,KAAKnB,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAIH,CAAC,GAAG,MAAMsB,EAAC,CAAE,GAAGlB,KAAKkB;AACxE,UAAMC,IAAI,KAAK,IAAI,GAAGrB,EAAE,QAAQF,CAAC,GAAGwB,IAAIX,EAAEC,IAAI,CAAC,GAAGW,IAAID,IAAI,KAAK,IAAID,GAAGC,EAAE,QAAQxB,CAAC,IAAIuB,IAAI;AACzF,WAAO;AAAA,MACL,OAAOA;AAAA,MACP,KAAKE;AAAA,MACL,MAAMrB,EAAE,KAAI;AAAA,MACZ,OAAOD,EAAE,SAASA,IAAI;AAAA,IAC5B;AAAA,EACE,CAAC,GAAG,UAAUlB,EAAE,SAAQ;AAC1B;AACA,SAASyC,GAAE,GAAG;AACZ,QAAM,IAAI,EAAE,KAAI,EAAG,MAAM,GAAG;AAC5B,SAAO,EAAE,WAAW,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC,IAAI,OAAO,OAAO,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC,EAAE,QAAQ,KAAK,GAAG,CAAC;AACrG;AACA,SAASC,GAAE,GAAG,GAAG;AACf,QAAM1C,IAAI,EAAE,QAAQ,UAAU;AAAA,CAC/B,EAAE,QAAQ,WAAW,EAAE,EAAE,MAAM;AAAA,CAC/B;AACC,MAAIM,IAAI,IAAIQ,IAAI,CAAA;AAChB,QAAMc,IAAI,IAAIb,IAAI,CAAA;AAClB,aAAW,KAAKf,GAAG;AACjB,UAAMiB,IAAI,EAAE,QAAQ,QAAQ,EAAE,GAAGY,IAAIZ,EAAE,KAAI,GAAIC,IAAI,oBAAoB,KAAKW,CAAC;AAC7E,QAAIX,GAAG;AACL,MAAAZ,IAAIY,EAAE,CAAC,EAAE,YAAW,GAAIH,EAAE,KAAKE,CAAC;AAChC;AAAA,IACF;AACA,QAAIX,MAAM,UAAU;AAClB,MAAAS,EAAE,KAAKE,CAAC;AACR;AAAA,IACF;AACA,UAAME,IAAI,oBAAoB,KAAKU,CAAC;AACpC,QAAIV,GAAG;AACL,MAAAL,IAAIK,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,CAACwB,MAAMA,EAAE,KAAI,CAAE;AACvC;AAAA,IACF;AACA,UAAMV,IAAI,gCAAgC,KAAKJ,CAAC;AAChD,QAAI,CAACI,KAAKA,EAAE,CAAC,EAAE,YAAW,MAAO,aAAanB,EAAE,WAAW,EAAG;AAC9D,UAAM8B,IAAI9B,EAAE,QAAQqB,IAAIF,EAAE,CAAC,EAAE,MAAM,GAAG,GAAGI,IAAIF,EAAE,MAAM,GAAGS,IAAI,CAAC,GAAGN,IAAIH,EAAE,MAAMS,IAAI,CAAC,EAAE,KAAK,GAAG,GAAGL,IAAI,CAAA;AAClG,IAAAzB,EAAE,QAAQ,CAAC6B,GAAGE,MAAM;AAClB,MAAAN,EAAEI,CAAC,IAAIE,MAAMD,IAAI,IAAIN,IAAID,EAAEQ,CAAC,KAAK;AAAA,IACnC,CAAC;AACD,UAAML,IAAIC,GAAEF,EAAE,SAAS,EAAE,GAAGH,IAAIK,GAAEF,EAAE,OAAO,EAAE,GAAGO,KAAKP,EAAE,QAAQ,IAAI,QAAQ,QAAQ;AAAA,CACtF,EAAE,QAAQ,QAAQ;AAAA,CAClB,EAAE,QAAQ,QAAQ,GAAG,EAAE,QAAQ,cAAc,EAAE;AAC5C,IAAAX,EAAE,KAAK,EAAE,OAAOY,GAAG,KAAKJ,GAAG,MAAMU,GAAG,OAAOP,EAAE,MAAK,CAAE;AAAA,EACtD;AACA,SAAOX,EAAE,KAAK,CAAC,GAAGX,MAAM,EAAE,QAAQA,EAAE,KAAK,GAAG;AAAA,IAC1C,QAAQ;AAAA,IACR,MAAMW;AAAA,IACN,QAAQb,EAAE,KAAK;AAAA,CAClB,EAAE,KAAI,KAAM;AAAA,EACb;AACA;AACA,SAASgC,GAAE,GAAG;AACZ,QAAM,IAAI,EAAE,KAAI;AAChB,MAAI,CAAC,EAAG,QAAO;AACf,QAAM,IAAI,mCAAmC,KAAK,CAAC;AACnD,MAAI,GAAG;AACL,UAAMzC,IAAI,OAAO,EAAE,CAAC,CAAC,GAAGQ,IAAI,EAAE,CAAC,EAAE,YAAW;AAC5C,WAAOA,MAAM,MAAMR,IAAI,OAAOQ,MAAM,MAAMR,IAAI,KAAKQ,MAAM,OAAOR,IAAI,MAAMA;AAAA,EAC5E;AACA,QAAMN,IAAI,EAAE,MAAM,GAAG;AACrB,SAAOA,EAAE,WAAW,IAAI,OAAOA,EAAE,CAAC,CAAC,IAAI,OAAO,OAAOA,EAAE,CAAC,CAAC,IAAI,KAAK,OAAOA,EAAE,CAAC,CAAC,IAAIA,EAAE,WAAW,IAAI,OAAOA,EAAE,CAAC,CAAC,IAAI,KAAK,OAAOA,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK;AACpJ;AACA,SAASgD,GAAE,GAAG;AACZ,MAAI,OAAO,YAAY;AACrB,UAAM,IAAI,MAAM,+CAA+C;AACjE,QAAM,IAAI,IAAI,UAAS,EAAG,gBAAgB,GAAG,iBAAiB;AAC9D,MAAI,EAAE,qBAAqB,aAAa,EAAE,SAAS;AACjD,UAAM,IAAI,MAAM,sBAAsB;AACxC,QAAMhD,IAAI,EAAE,qBAAqB,GAAG,GAAGM,IAAI,CAAA;AAC3C,WAASQ,IAAI,GAAGA,IAAId,EAAE,QAAQc,KAAK;AACjC,UAAMc,IAAI5B,EAAEc,CAAC,GAAGC,IAAIa,EAAE,aAAa,OAAO,KAAK,IAAI,IAAIA,EAAE,aAAa,KAAK,KAAK,IAAIX,IAAIW,EAAE,aAAa,KAAK,KAAK,IAAIC,IAAIkB,GAAEhC,CAAC;AAC5H,QAAIG;AACJ,QAAIA,IAAI6B,GAAE,CAAC,IAAI9B,IAAIC,IAAIW,IAAIkB,GAAE9B,CAAC,IAAIC,IAAIW,IAAI;AAC1C,QAAIV,IAAI;AACR,IAAAS,EAAE,WAAW,QAAQ,CAACgB,MAAM;AAC1B,UAAIA,EAAE,aAAa;AACjB,QAAAzB,KAAKyB,EAAE,aAAa;AAAA,eACbA,EAAE,aAAa,GAAG;AACzB,cAAMT,IAAIS;AACV,QAAAT,EAAE,QAAQ,kBAAkB,OAAOhB,KAAK;AAAA,IAC5CA,KAAKgB,EAAE,eAAe;AAAA,MACpB;AAAA,IACF,CAAC;AACD,UAAMF,IAAId,EAAE,QAAQ,WAAW,GAAG,EAAE,QAAQ,QAAQ;AAAA,CACvD,EAAE,KAAI;AACH,KAACc,KAAKJ,KAAKX,MAAMZ,EAAE,KAAK,EAAE,OAAOuB,GAAG,KAAKX,GAAG,MAAMe,EAAC,CAAE;AAAA,EACvD;AACA,SAAO3B,EAAE,KAAK,CAACQ,GAAGc,MAAMd,EAAE,QAAQc,EAAE,KAAK,GAAG,EAAE,QAAQ,QAAQ,MAAMtB,EAAC;AACvE;AACA,SAAS2C,GAAG,GAAG,GAAG;AAChB,UAAQ,KAAKvB,GAAE,CAAC,GAAC;AAAA,IACf,KAAK;AACH,aAAOM,GAAE,CAAC;AAAA,IACZ,KAAK;AACH,aAAOE,GAAE,CAAC;AAAA,IACZ,KAAK;AACH,aAAOQ,GAAE,GAAG,KAAK;AAAA,IACnB,KAAK;AACH,aAAOA,GAAE,GAAG,KAAK;AAAA,IACnB,KAAK;AACH,aAAOM,GAAE,CAAC;AAAA,IACZ,KAAK;AACH,aAAOrB,GAAE,GAAG,KAAK;AAAA,IACnB,KAAK;AAAA,IACL;AACE,aAAOA,GAAE,GAAG,KAAK;AAAA,EACvB;AACA;AACA,eAAeuB,GAAG,GAAG;AACnB,SAAOC,GAAE,UAAU,CAAC;AACtB;AACA,SAASC,GAAG,GAAG;AACb,QAAM,IAAI,CAAA;AACV,SAAO,EAAE,QAAQ,CAAC,GAAGpD,MAAM;AACzB,QAAIkB;AACJ,UAAMZ,IAAIN,EAAE,KAAKc,IAAIR,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,IAAI,MAAM,GAAGsB,IAAItB,IAAIQ,EAAE,QAAQ,OAAO,EAAE,IAAIA,GAAGC,IAAIa,EAAE,YAAY,GAAG,GAAGZ,IAAID,KAAK,IAAIa,EAAE,MAAMb,IAAI,CAAC,IAAIa,GAAGX,IAAIF,KAAK,IAAIa,EAAE,MAAM,GAAGb,CAAC,IAAI,IAAIc,IAAIvB,IAAI,MAAMY,IAAIlB,EAAE,UAAU,OAAO,SAASkB,EAAE,qBAAqB;AAC3P,MAAE,KAAK;AAAA,MACL,MAAMJ;AAAA,MACN,MAAME;AAAA,MACN,KAAKC;AAAA,MACL,OAAOX;AAAA,MACP,MAAMuB;AAAA,MACN,MAAM7B,EAAE;AAAA,IACd,CAAK;AAAA,EACH,CAAC,GAAG;AACN;AACA,SAASqD,GAAG,GAAG;AACb,QAAM,IAAI,EAAE,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,UAAU,CAAA,GAAI,MAAM,EAAC,GAAI,IAAoB,oBAAI,IAAG;AAC/F,IAAE,IAAI,IAAI,CAAC;AACX,QAAMrD,IAAI,CAACc,MAAM;AACf,QAAI,EAAE,IAAIA,CAAC,EAAG,QAAO,EAAE,IAAIA,CAAC;AAC5B,UAAM,IAAIA,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO;AACrC,QAAIC,IAAI,GAAGC,IAAI;AACf,eAAWC,KAAK,GAAG;AACjB,MAAAD,IAAIA,IAAI,GAAGA,CAAC,IAAIC,CAAC,KAAKA;AACtB,UAAI,IAAI,EAAE,IAAID,CAAC;AACf,YAAM,IAAI,EAAE,MAAMC,GAAG,MAAMD,IAAI,KAAK,OAAO,IAAI,UAAU,CAAA,GAAI,MAAM,EAAC,GAAID,EAAE,SAAS,KAAK,CAAC,GAAG,EAAE,IAAIC,GAAG,CAAC,IAAID,IAAI;AAAA,IAChH;AACA,WAAOA;AAAA,EACT;AACA,aAAWD,KAAK,GAAG;AACjB,QAAIA,EAAE,OAAO;AACX,MAAAd,EAAEc,EAAE,KAAK,QAAQ,OAAO,EAAE,CAAC;AAC3B;AAAA,IACF;AACA,IAAAd,EAAEc,EAAE,GAAG,EAAE,SAAS,KAAK;AAAA,MACrB,MAAMA,EAAE;AAAA,MACR,MAAMA,EAAE;AAAA,MACR,OAAO;AAAA,MACP,MAAMA,EAAE;AAAA,IACd,CAAK;AAAA,EACH;AACA,QAAMR,IAAI,CAACQ,MAAM;AACf,QAAIA,EAAE,UAAU;AACd,MAAAA,EAAE,SAAS,KAAK,CAAC,GAAGC,MAAM,EAAE,UAAUA,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,EAAE,KAAK,cAAcA,EAAE,IAAI,CAAC;AAC/F,iBAAW,KAAKD,EAAE,SAAU,CAAAR,EAAE,CAAC;AAAA,IACjC;AAAA,EACF;AACA,SAAOA,EAAE,CAAC,GAAG;AACf;AAOA,eAAegD,GAAG,GAAG,GAAG,GAAG;AACzB,QAAMtD,IAAI,EAAE,KAAK,CAAC;AAClB,MAAI,CAACA,EAAG,OAAM,IAAI,MAAM,wBAAwB,CAAC,EAAE;AACnD,QAAMM,IAAI,MAAMN,EAAE,MAAM,aAAa;AACrC,SAAO,IAAI,KAAK,CAACM,CAAC,GAAG,IAAI,EAAE,MAAM,EAAC,IAAK,MAAM;AAC/C;AACA,SAASiD,GAAE,GAAG;AACZ,SAAO,IAAI,EAAE,WAAW,GAAG,IAAI,IAAI,EAAE,WAAW,IAAI,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,WAAW,IAAI,MAAM,IAAI,YAAY;AACpH;AACA,MAAMC,KAAI;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAGC,KAAI;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,SAASC,GAAE,GAAG,GAAG;AACf,QAAM,IAAI,SAAS,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG1D,IAAI,SAAS,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE,GAAGM,IAAI,SAAS,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE,GAAGQ,IAAI,CAACG,MAAM,IAAI,IAAI,KAAK,MAAMA,KAAK,IAAI,EAAE,IAAI,KAAK,MAAMA,KAAK,MAAMA,KAAK,CAAC,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,GAAGH,EAAE,CAAC,CAAC,CAAC,GAAGC,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,GAAGD,EAAEd,CAAC,CAAC,CAAC,GAAGgB,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,GAAGF,EAAER,CAAC,CAAC,CAAC;AAChT,SAAO,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,IAAIS,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,IAAIC,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAC3G;AACA,SAAS2C,GAAE,GAAG;AACZ,MAAI,KAAK,EAAE,SAAS,aAAa,EAAE,YAAY,SAAS;AACtD,UAAM,IAAI,EAAE;AACZ,QAAI;AACF,aAAOC,GAAE,CAAC;AAAA,EACd;AACF;AACA,SAASA,GAAE,GAAG;AACZ,MAAI,GAAG;AACL,QAAI,UAAU,KAAK,OAAO,EAAE,QAAQ,YAAY,EAAE;AAChD,aAAOL,GAAE,EAAE,IAAI;AACjB,QAAI,WAAW,KAAK,OAAO,EAAE,SAAS,UAAU;AAC9C,YAAM,IAAIC,GAAE,EAAE,KAAK,KAAK,UAAU,IAAI,UAAU,KAAK,OAAO,EAAE,QAAQ,WAAW,EAAE,OAAO;AAC1F,aAAO,OAAO,MAAM,IAAIE,GAAE,GAAG,CAAC,IAAI;AAAA,IACpC;AACA,QAAI,aAAa,KAAK,OAAO,EAAE,WAAW,UAAU;AAClD,YAAM,IAAID,GAAE,EAAE,OAAO;AACrB,UAAI,EAAG,QAAO,MAAM;AAAA,IACtB;AAAA,EACF;AACF;AACA,SAASI,GAAE,GAAG;AACZ,MAAI,CAAC,KAAK,CAAC,EAAE,MAAO;AACpB,QAAM,IAAID,GAAE,EAAE,KAAK,KAAK;AACxB,SAAO,CAAC,EAAE,OAAO,CAAC;AACpB;AACA,SAASE,GAAE,GAAG;AACZ,QAAM,IAAI,CAAA;AACV,MAAI,IAAI;AACR,MAAI,EAAE,MAAM;AACV,UAAMxD,IAAI,EAAE;AACZ,SAAKA,EAAE,QAAQA,EAAE,QAAQA,EAAE,QAAQA,EAAE,YAAY,IAAI,IAAI,EAAE,OAAO,IAAIA,EAAE,SAAS,EAAE,KAAK,OAAOA,EAAE,OAAOA,EAAE,SAAS,EAAE,KAAK,OAAOA,EAAE,OAAOA,EAAE,SAAS,EAAE,KAAK,OAAO,KAAKA,EAAE,WAAW,EAAE,KAAK,SAAS,MAAMA,EAAE,OAAO;AAClN,YAAMQ,IAAI8C,GAAEtD,EAAE,KAAK;AACnB,MAAAQ,MAAM,IAAI,IAAI,EAAE,QAAQA;AAAA,IAC1B;AACA,IAAAR,EAAE,cAAc,IAAI,IAAI,EAAE,YAAY,KAAKA,EAAE,WAAW,IAAI,IAAI,EAAE,SAAS;AAAA,EAC7E;AACA,QAAMN,IAAI2D,GAAE,EAAE,IAAI;AAClB,MAAI3D,MAAM,IAAI,IAAI,EAAE,UAAUA,IAAI,EAAE,WAAW;AAC7C,UAAMM,IAAI,EAAE;AACZ,IAAAA,EAAE,eAAe,IAAI,IAAI,EAAE,QAAQA,EAAE,aAAaA,EAAE,aAAa,IAAI,IAAI,EAAE,SAASA,EAAE,WAAWA,EAAE,aAAa,IAAI,IAAI,EAAE,WAAW;AAAA,EACvI;AACA,MAAI,EAAE,QAAQ;AACZ,UAAMA,IAAI,CAAA;AACV,QAAIQ,IAAI;AACR,UAAM,IAAI,CAAC,OAAO,UAAU,QAAQ,OAAO;AAC3C,eAAWC,KAAK,GAAG;AACjB,YAAMC,IAAI6C,GAAE,EAAE,OAAO9C,CAAC,CAAC;AACvB,MAAAC,MAAMV,EAAES,CAAC,IAAIC,GAAGF,IAAI;AAAA,IACtB;AACA,IAAAA,MAAM,IAAI,IAAI,EAAE,SAASR;AAAA,EAC3B;AACA,SAAO,IAAI,IAAI;AACjB;AACA,SAASyD,GAAE,GAAG;AACZ,SAAO,KAAK,UAAU,CAAC;AACzB;AACA,SAASC,GAAG,GAAG,GAAG,GAAG;AACnB,QAAMhE,IAAI8D,GAAE,CAAC;AACb,MAAI,CAAC9D,EAAG,QAAO;AACf,QAAMM,IAAIyD,GAAE/D,CAAC,GAAGc,IAAI,EAAE,IAAIR,CAAC;AAC3B,MAAIQ,MAAM,OAAQ,QAAOA;AACzB,QAAM,IAAI,EAAE;AACZ,SAAO,EAAE,KAAKd,CAAC,GAAG,EAAE,IAAIM,GAAG,CAAC,GAAG;AACjC;AACA,SAAS2D,GAAG,GAAG;AACb,QAAM,IAAI,EAAE;AACZ,MAAI,KAAK,KAAM,QAAO;AACtB,MAAI,OAAO,KAAK,SAAU,QAAO;AACjC,MAAI,OAAO,KAAK,SAAU,QAAO,OAAO,CAAC;AACzC,MAAI,OAAO,KAAK,UAAW,QAAO,IAAI,SAAS;AAC/C,MAAI,aAAa;AACf,WAAO,EAAE,mBAAkB;AAC7B,MAAI,OAAO,KAAK,YAAY,aAAa,GAAG;AAC1C,UAAM,IAAI,EAAE;AACZ,WAAO,KAAK,OAAO,OAAO,CAAC,IAAI;AAAA,EACjC;AACA,SAAO,OAAO,KAAK,YAAY,cAAc,IAAI,EAAE,SAAS,IAAI,CAACjE,MAAMA,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,OAAO,KAAK,YAAY,eAAe,IAAI,EAAE,QAAQ,KAAK,OAAO,KAAK,YAAY,WAAW,IAAI,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC;AACvN;AACA,SAASkE,GAAG,GAAG;AACb,QAAM,IAAI,EAAE,MAAM,GAAG,GAAG,IAAIC,GAAE,EAAE,CAAC,CAAC,GAAGnE,IAAI,EAAE,CAAC,IAAImE,GAAE,EAAE,CAAC,CAAC,IAAI;AAC1D,SAAO;AAAA,IACL,KAAK,EAAE;AAAA,IACP,MAAM,EAAE;AAAA,IACR,QAAQnE,EAAE;AAAA,IACV,OAAOA,EAAE;AAAA,EACb;AACA;AACA,SAASmE,GAAE,GAAG;AACZ,QAAM,IAAI,EAAE,MAAM,iBAAiB;AACnC,MAAI,CAAC,EAAG,QAAO,EAAE,KAAK,GAAG,KAAK,EAAC;AAC/B,QAAM,IAAI,EAAE,CAAC,GAAGnE,IAAI,SAAS,EAAE,CAAC,GAAG,EAAE;AACrC,MAAIM,IAAI;AACR,WAASQ,IAAI,GAAGA,IAAI,EAAE,QAAQA;AAC5B,IAAAR,IAAIA,IAAI,MAAM,EAAE,WAAWQ,CAAC,IAAI;AAClC,SAAO,EAAE,KAAKd,GAAG,KAAKM,EAAC;AACzB;AACA,SAAS8D,GAAG,GAAG;AACb,QAAM,IAAI,CAAA;AACV,SAAO,EAAE,UAAU,CAAC,MAAM;AACxB,UAAMpE,IAAI,CAAA,GAAIM,IAAoB,oBAAI,IAAG,GAAIQ,IAAI,CAAA,GAAI,IAAI,CAAA,GAAIC,IAAI,CAAA,GAAIC,IAAI,EAAE;AAC3E,aAASG,IAAI,GAAGA,KAAKH,GAAGG,KAAK;AAC3B,YAAM,IAAI,EAAE,UAAUA,CAAC;AACvB,QAAE,UAAUJ,EAAE,OAAOI,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,EAAE,QAAQ,GAAG,EAAC;AAAA,IACnE;AACA,IAAAJ,EAAE,MAAM,KAAK,IAAIC,GAAG,EAAE;AACtB,UAAMC,IAAoB,oBAAI,IAAG,GAAI,IAAI,EAAE,OAAOC,KAAK,KAAK,OAAO,SAAS,EAAE,WAAW,CAAA;AACzF,eAAWC,KAAKD,GAAG;AACjB,MAAAJ,EAAE,KAAKK,CAAC;AACR,YAAM,EAAE,KAAK,GAAG,MAAMyB,GAAG,QAAQT,GAAG,OAAOE,EAAC,IAAK6B,GAAG/C,CAAC,GAAGmB,IAAIH,IAAI,GAAGI,IAAIF,IAAIO;AAC3E,MAAA3B,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI2B,IAAI,CAAC,IAAI,CAACN,GAAGC,CAAC,CAAC;AAAA,IACnC;AACA,MAAE,QAAQ,EAAE,cAAc,GAAE,GAAI,CAACpB,GAAG,MAAM;AACxC,YAAMyB,IAAI,IAAI,GAAGT,IAAI,CAAA;AACrB,MAAAhB,EAAE,SAAS,EAAE,cAAc,GAAE,GAAI,CAACmB,GAAGC,MAAM;AACzC,cAAMC,IAAID,IAAI;AACd,YAAID,EAAE,YAAYA,EAAE,WAAWA,EAAG;AAClC,cAAMF,IAAI6B,GAAG3B,CAAC,GAAGQ,IAAIkB,GAAG1B,GAAGtC,GAAGM,CAAC,GAAGqC,IAAI,EAAE,MAAMP,EAAC;AAC/C,QAAAU,MAAM,OAAOH,EAAE,QAAQG;AACvB,cAAMD,IAAI,GAAGD,CAAC,IAAIJ,CAAC;AACnB,QAAAvB,EAAE,IAAI4B,CAAC,MAAMF,EAAE,QAAQ1B,EAAE,IAAI4B,CAAC,IAAIV,EAAE,OAAOK,CAAC,CAAC,IAAIG;AAAA,MACnD,CAAC;AACD,YAAMN,IAAI,EAAE,OAAOF,EAAC;AACpB,MAAAhB,EAAE,WAAWkB,EAAE,SAAS,KAAK,MAAMlB,EAAE,SAAS,KAAK,IAAI,EAAE,OAAOyB,CAAC,CAAC,IAAIP;AAAA,IACxE,CAAC,GAAG,EAAE,KAAK;AAAA,MACT,MAAM,EAAE;AAAA,MACR,QAAQrC;AAAA,MACR,QAAQc;AAAA,MACR,MAAM;AAAA,MACN,MAAMC;AAAA,IACZ,CAAK;AAAA,EACH,CAAC,GAAG;AACN;AACA,SAASsD,GAAG,GAAG,GAAG,IAAI,UAAU;AAC9B,QAAMrE,IAAI,EAAE,SAAS,GAAGc,IAAId,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,GAAE,EAAE,CAAE,IAAI,CAAA,GAAI4B,IAAI,CAAA;AACnE,MAAI5B,GAAG;AACL,UAAM,IAAI,CAAA;AACV,MAAE,QAAQ,CAACiB,GAAGY,MAAM;AAClB,QAAE,OAAOA,CAAC,CAAC,IAAI,EAAE,MAAMZ,GAAG,OAAO,EAAC;AAAA,IACpC,CAAC,GAAGW,EAAE,CAAC,IAAI,EAAE,OAAO,EAAC;AAAA,EACvB;AACA,QAAMb,IAAIf,IAAI,IAAI;AAClB,SAAO,EAAE,QAAQ,CAAC,GAAGiB,MAAM;AACzB,UAAMY,IAAI,CAAA;AACV,MAAE,QAAQ,CAACX,GAAGC,MAAM;AAClB,MAAAD,MAAM,UAAUA,MAAM,OAAOW,EAAE,OAAOV,CAAC,CAAC,IAAI,EAAE,MAAMD,EAAC;AAAA,IACvD,CAAC,GAAGU,EAAE,OAAOX,IAAIF,CAAC,CAAC,IAAI,EAAE,OAAOc,EAAC;AAAA,EACnC,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQf,GAAG,MAAMc,GAAG;AACtC;AACA,SAAS0C,GAAG,GAAG,GAAG;AAChB,MAAI1C;AACJ,MAAI,OAAO,SAAS,IAAK;AACzB,QAAMrB,KAAK,KAAK,OAAO,SAAS,EAAE,cAAcqB,IAAI,KAAK,OAAO,SAAS,EAAE,wBAAwB,OAAO,SAASA,EAAE,YAAY,IAAI;AAAA,IACnI,WAAW5B,IAAI,gCAAgCO,CAAC;AAAA,IAChD,SAASD,IAAI,gCAAgCC,CAAC;AAAA,IAC9C,YAAYO,IAAI;AAAA,EACpB,IAAM,KAAK,CAAA;AACT,IAAE,wBAAwB,EAAE,oBAAoB,YAAYd,GAAG,EAAE,oBAAoB,UAAUM,GAAG,EAAE,oBAAoB,aAAaQ;AACvI;AACA,MAAMyD,KAAK;AAAA;AAAA,EAET,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,wBAAwB;AAAA,EACxB,8BAA8B;AAAA;AAAA,EAE9B,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,wBAAwB;AAAA,EACxB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA;AAAA,EAEnB,qBAAqB;AAAA;AAAA,EAErB,mBAAmB;AAAA;AAAA,EAEnB,qBAAqB;AAAA;AAAA,EAErB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA;AAAA,EAElB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA;AAAA,EAEhB,oBAAoB;AAAA,EACpB,0BAA0B;AAAA,EAC1B,kBAAkB;AAAA;AAAA,EAElB,oBAAoB;AAAA;AAAA,EAEpB,oBAAoB;AAAA;AAAA,EAEpB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,gCAAgC;AAAA;AAAA,EAEhC,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,yBAAyB;AAAA,EACzB,0BAA0B;AAAA,EAC1B,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,qBAAqB;AAAA;AAAA,EAErB,wBAAwB;AAAA,EACxB,sBAAsB;AAAA,EACtB,mBAAmB;AAAA;AAAA,EAEnB,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,aAAa;AAAA;AAAA,EAEb,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,oBAAoB;AAAA;AAAA,EAEpB,mBAAmB;AAAA;AAAA,EAEnB,wBAAwB;AAAA,EACxB,yBAAyB;AAAA,EACzB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,yBAAyB;AAAA;AAAA,EAEzB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA;AAAA,EAEpB,oBAAoB;AACtB,GAAGC,KAAK;AAAA;AAAA,EAEN,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,wBAAwB;AAAA,EACxB,8BAA8B;AAAA;AAAA,EAE9B,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,wBAAwB;AAAA,EACxB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA;AAAA,EAEnB,qBAAqB;AAAA;AAAA,EAErB,mBAAmB;AAAA;AAAA,EAEnB,qBAAqB;AAAA;AAAA,EAErB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA;AAAA,EAElB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA;AAAA,EAEhB,oBAAoB;AAAA,EACpB,0BAA0B;AAAA,EAC1B,kBAAkB;AAAA;AAAA,EAElB,oBAAoB;AAAA;AAAA,EAEpB,oBAAoB;AAAA;AAAA,EAEpB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,gCAAgC;AAAA;AAAA,EAEhC,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,yBAAyB;AAAA,EACzB,0BAA0B;AAAA,EAC1B,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,qBAAqB;AAAA;AAAA,EAErB,wBAAwB;AAAA,EACxB,sBAAsB;AAAA,EACtB,mBAAmB;AAAA;AAAA,EAEnB,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,aAAa;AAAA;AAAA,EAEb,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,oBAAoB;AAAA;AAAA,EAEpB,mBAAmB;AAAA;AAAA,EAEnB,wBAAwB;AAAA,EACxB,yBAAyB;AAAA,EACzB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,yBAAyB;AAAA;AAAA,EAEzB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA;AAAA,EAEpB,oBAAoB;AACtB,GAAGC,KAAI;AAAA,EACL,SAASF;AAAA,EACT,SAASC;AACX,GAAGE,KAAK;AACR,SAASC,GAAG,GAAG,GAAG;AAChB,SAAO,IAAI,EAAE,QAAQD,IAAI,CAAC,GAAG1E,MAAM;AACjC,UAAMM,IAAI,EAAEN,CAAC;AACb,WAAOM,MAAM,SAAS,IAAIN,CAAC,MAAM,OAAOM,CAAC;AAAA,EAC3C,CAAC,IAAI;AACP;AACA,SAASsE,GAAG,GAAG;AACb,MAAIhD;AACJ,QAAM1B,IAAI,EAAE,kBAAkB,SAASK,IAAIkE,GAAE,EAAE,MAAM,KAAKA,GAAEvE,CAAC,KAAKuE,GAAE,OAAO,GAAGzE,KAAK4B,IAAI,EAAE,aAAa,OAAO,SAASA,EAAE,EAAE,MAAM,GAAGtB,IAAIN,IAAI,EAAE,GAAGO,GAAG,GAAGP,EAAC,IAAKO,GAAGO,IAAI2D,GAAE,OAAO;AAC5K,SAAO,CAAC1D,GAAGC,MAAM;AACf,UAAMC,IAAIX,EAAES,CAAC,KAAKD,EAAEC,CAAC,KAAKA;AAC1B,WAAO4D,GAAG1D,GAAGD,CAAC;AAAA,EAChB;AACF;ACplCO,MAAM6D,KAA4C,OAAO,qBAAqB;ACD9E,SAASC,GACdC,GACAC,GACM;AACN,QAAMC,IAAYC,EAAiB,MAAMC,EAAMJ,CAAM,KAAK,OAAO,GAC3D7E,IAAIgF;AAAA,IAAqB,MAC7BE,GAAiB,EAAE,QAAQH,EAAU,OAAO,UAAUE,EAAMH,CAAQ,EAAA,CAAG;AAAA,EAAA;AAEzE,EAAAK,GAAQR,IAAY,EAAE,QAAQI,GAA0B,GAAA/E,GAAG;AAC7D;AAGA,IAAIoF,KAA+B;AACnC,SAASC,KAA0B;AACjC,SAAKD,OAAWA,KAAYF,GAAiB,EAAE,QAAQ,SAAS,IACzDE;AACT;AAKO,SAASE,KAAqE;AACnF,QAAMC,IAAWC,GAA+Bb,IAAY,IAAI;AAChE,MAAIY,EAAU,QAAOA;AAErB,QAAMV,IAASG,EAAiB,MAAM,OAAO,GACvChF,IAAIgF,EAAqB,MAAMK,IAAa;AAClD,SAAO,EAAE,QAAAR,GAA+B,GAAA7E,EAAA;AAC1C;AC/BA,MAAMyF,KAAsD,OAAO,oBAAoB;AAKhF,SAASC,GAAqBC,GAAsC;AACzE,QAAMC,IAAWZ,EAAwB,MAAMC,EAAMU,CAAK,CAAC;AAC3D,EAAAR,GAAQM,IAAWG,CAAQ;AAC7B;AASO,SAASC,KAA+C;AAC7D,QAAMN,IAAWC,GAAOC,IAAW,IAAI;AACvC,SAAIF,KACGP,EAAwB,MAAM,MAAM;AAC7C;ACpBA,MAAMc,KAAwC,CAACC,GAAQ,EAAE,OAAAC,QAChD5D,EAAE,OAAO;AAAA,EACd,OAAO;AAAA,EAA8B,SAAS;AAAA,EAC9C,MAAM;AAAA,EAAQ,QAAQ;AAAA,EAAgB,gBAAgB;AAAA,EACtD,kBAAkB;AAAA,EAAS,mBAAmB;AAAA,EAAS,GAAG4D;AAAA,GACzD;AAAA,EACD5D,EAAE,QAAQ;AAAA,IACR,GAAG;AAAA,IAAM,GAAG;AAAA,IAAQ,eAAe;AAAA,IACnC,aAAa;AAAA,IAAM,eAAe;AAAA,IAClC,MAAM;AAAA,IAAgB,QAAQ;AAAA,EAAA,GAC7B,KAAK;AAAA,CACT;AAeI,SAAS6D,GAAsBC,GAA0C;AAC9E,SAAO;AAAA,IACL;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMC,IAAS,SAASD,EAAI,EAAE,kBAAkB,GAAG,QAAQA,EAAI,WAAW,UAAUA,EAAI,QAAQ,KAAA;AAAA,QAClH,EAAE,MAAM,QAAQ,SAAS,GAAG,KAAK,MAAMA,EAAI,OAAO,GAAG,CAAC,KAAK,UAAU,OAAA;AAAA,QACrE,EAAE,MAAM,UAAU,MAAME,IAAQ,SAASF,EAAI,EAAE,iBAAiB,GAAG,QAAQA,EAAI,UAAU,UAAUA,EAAI,QAAQ,GAAA;AAAA,MAAG;AAAA,IACpH;AAAA,IAEF;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMG,IAAM,SAASH,EAAI,EAAE,uBAAuB,GAAG,QAAQA,EAAI,aAAA;AAAA,QACnF,EAAE,MAAM,UAAU,MAAMJ,IAAkB,SAASI,EAAI,EAAE,uBAAuB,GAAG,QAAQA,EAAI,eAAA;AAAA,MAAe;AAAA,IAChH;AAAA,IAEF;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMI,IAAW,SAASJ,EAAI,EAAE,qBAAqB,GAAG,QAAQA,EAAI,aAAA;AAAA,QACtF,EAAE,MAAM,UAAU,MAAMK,IAAU,SAASL,EAAI,EAAE,sBAAsB,GAAG,QAAQA,EAAI,cAAA;AAAA,MAAc;AAAA,IACtG;AAAA,IAEF;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMM,IAAW,SAASN,EAAI,EAAE,eAAe,GAAG,QAAQA,EAAI,QAAA;AAAA,MAAQ;AAAA,IAC1F;AAAA,EACF;AAEJ;AC9CO,SAASO,GAAoBP,GAAwC;AAC1E,SAAO;AAAA,IACL;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMC,IAAS,SAASD,EAAI,EAAE,kBAAkB,GAAG,QAAQA,EAAI,WAAW,UAAUA,EAAI,QAAQ,KAAA;AAAA,QAClH,EAAE,MAAM,QAAQ,SAAS,GAAG,KAAK,MAAMA,EAAI,OAAO,GAAG,CAAC,KAAK,UAAU,OAAA;AAAA,QACrE,EAAE,MAAM,UAAU,MAAME,IAAQ,SAASF,EAAI,EAAE,iBAAiB,GAAG,QAAQA,EAAI,UAAU,UAAUA,EAAI,QAAQ,GAAA;AAAA,MAAG;AAAA,IACpH;AAAA,IAEF;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMM,IAAW,SAASN,EAAI,EAAE,eAAe,GAAG,QAAQA,EAAI,QAAA;AAAA,MAAQ;AAAA,IAC1F;AAAA,EACF;AAEJ;ACfO,SAASQ,GAAqBR,GAAyC;AAC5E,SAAO;AAAA,IACL;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMS,IAAM,SAAST,EAAI,EAAE,aAAa,GAAG,QAAQ,MAAA;;AAAM,kBAAAU,IAAAV,EAAI,YAAJ,gBAAAU,EAAa;AAAA,UAAU;AAAA,MAAE;AAAA,IACtG;AAAA,IAEF;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMC,IAAa,SAASX,EAAI,EAAE,mBAAmB,GAAG,QAAQ,MAAA;;AAAM,kBAAAU,IAAAV,EAAI,YAAJ,gBAAAU,EAAa;AAAA,UAAS;AAAA,QAC9G,EAAE,MAAM,QAAQ,SAAS,GAAGV,EAAI,OAAO,MAAMA,EAAI,KAAK,IAAI,UAAU,OAAA;AAAA,QACpE,EAAE,MAAM,UAAU,MAAMY,IAAc,SAASZ,EAAI,EAAE,mBAAmB,GAAG,QAAQ,MAAA;;AAAM,kBAAAU,IAAAV,EAAI,YAAJ,gBAAAU,EAAa;AAAA,UAAS;AAAA,MAAE;AAAA,IACnH;AAAA,IAEF;AAAA,MACE,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAMV,EAAI,YAAYa,KAAYC;AAAA,UAClC,SAASd,EAAI,YAAYA,EAAI,EAAE,sBAAsB,IAAIA,EAAI,EAAE,oBAAoB;AAAA,UACnF,QAAQ,MAAA;;AAAM,oBAAAU,IAAAV,EAAI,YAAJ,gBAAAU,EAAa;AAAA;AAAA,QAAgB;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAEJ;ACzBO,SAASK,GAAqBf,GAAyC;AAC5E,SAAO;AAAA,IACL;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMS,IAAM,SAAST,EAAI,EAAE,aAAa,GAAG,QAAQ,MAAA;;AAAM,kBAAAU,IAAAV,EAAI,YAAJ,gBAAAU,EAAa;AAAA,UAAU;AAAA,MAAE;AAAA,IACtG;AAAA,IAEF;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMC,IAAa,SAASX,EAAI,EAAE,mBAAmB,GAAG,QAAQ,MAAA;;AAAM,kBAAAU,IAAAV,EAAI,YAAJ,gBAAAU,EAAa;AAAA,UAAS;AAAA,QAC9G,EAAE,MAAM,QAAQ,SAAS,GAAGV,EAAI,OAAO,MAAMA,EAAI,KAAK,IAAI,UAAU,OAAA;AAAA,QACpE,EAAE,MAAM,UAAU,MAAMY,IAAc,SAASZ,EAAI,EAAE,mBAAmB,GAAG,QAAQ,MAAA;;AAAM,kBAAAU,IAAAV,EAAI,YAAJ,gBAAAU,EAAa;AAAA,UAAS;AAAA,MAAE;AAAA,IACnH;AAAA,IAEF;AAAA,MACE,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAMV,EAAI,YAAYa,KAAYC;AAAA,UAClC,SAASd,EAAI,YAAYA,EAAI,EAAE,sBAAsB,IAAIA,EAAI,EAAE,oBAAoB;AAAA,UACnF,QAAQ,MAAA;;AAAM,oBAAAU,IAAAV,EAAI,YAAJ,gBAAAU,EAAa;AAAA;AAAA,QAAgB;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAEJ;ACtBO,SAASM,GAAoB,EAAE,OAAAC,KAA4C;AAChF,SAAKA,IACE;AAAA,IACL;AAAA,MACE,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,SAAS,GAAGA,EAAM,KAAK,YAAYA,EAAM,IAAI,WAAWC,GAAeD,EAAM,IAAI,CAAC;AAAA,UAClF,UAAU;AAAA,QAAA;AAAA,MACZ;AAAA,IACF;AAAA,EACF,IAViB,CAAA;AAYrB;ACdO,SAASE,GAAqBnB,GAAyC;AAC5E,QAAMoB,IAAyB;AAAA,IAC7B;AAAA,MACE,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAMlF,EAAEmF,IAAU,EAAE,OAAO,mBAAmB;AAAA,UAC9C,SAASrB,EAAI,WAAWA,EAAI,EAAE,kBAAkB,IAAIA,EAAI,EAAE,iBAAiB;AAAA,UAC3E,QAAQA,EAAI;AAAA,QAAA;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAGF,SAAIA,EAAI,UACNoB,EAAO,KAAK;AAAA,IACV,OAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,MAAMpB,EAAI,cACN9D,EAAEoF,IAAM,EAAE,OAAO,kBAAA,CAAmB,IACpCpF,EAAEqF,IAAK,EAAE,OAAO,mBAAmB;AAAA,QACvC,SAASvB,EAAI,cAAcA,EAAI,EAAE,gBAAgB,IAAIA,EAAI,EAAE,iBAAiB;AAAA,QAC5E,QAAQA,EAAI;AAAA,MAAA;AAAA,IACd;AAAA,EACF,CACD,GAGIoB;AACT;ACjCO,SAASI,GAAyBxB,GAA6C;AACpF,SAAO;AAAA,IACL;AAAA,MACE,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAMA,EAAI,aAAa,YACnB9D,EAAEoF,IAAM,EAAE,OAAO,kBAAA,CAAmB,IACpCpF,EAAEqF,IAAK,EAAE,OAAO,mBAAmB;AAAA,UACvC,SAASvB,EAAI,aAAa,YAAYA,EAAI,EAAE,gBAAgB,IAAIA,EAAI,EAAE,iBAAiB;AAAA,UACvF,QAAQA,EAAI;AAAA,QAAA;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAEJ;;;;ACxBA,UAAM,EAAE,EAAA,IAAMZ,GAAA;sBAIZqC,EAAA,GAAAC,EAKM,OALNC,IAKM;AAAA,MAJJC,EAGM,OAHNC,IAGM;AAAA,wBAFJD,EAA2H,OAAA,EAAtH,OAAM,8GAAA,GAA6G,MAAA,EAAA;AAAA,QACxHA,EAA0E,QAA1EE,IAA0EC,EAA7CC,EAAA,CAAA,EAAC,gBAAA,KAAA,YAAA,GAAA,CAAA;AAAA,MAAA;;;ICF9BC,IAAO,CAACC,MACZC,GAAqB;AAAA,EACnB,QAAAD;AAAA,EACA,kBAAkB,EAAE,QAAQ,MAAMhG,EAAEkG,EAAe,EAAA;AAAA,EACnD,OAAO;AACT,CAAC,GAEUC,KAAgBJ,EAAK,MAAM,OAAO,sBAAmB,CAAC,GACtDK,KAAcL,EAAK,MAAM,OAAO,sBAAiB,CAAC,GAClDM,KAAeN,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDO,KAAeP,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDQ,KAAeR,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDS,KAAcT,EAAK,MAAM,OAAO,sBAAiB,CAAC,GAClDU,KAAeV,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDW,KAAeX,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDY,KAAgBZ,EAAK,MAAM,OAAO,sBAAmB,CAAC,GACtDa,KAAgBb,EAAK,MAAM,OAAO,sBAAmB,CAAC,GACtDc,KAAmBd,EAAK,MAAM,OAAO,sBAAsB,CAAC,GAC5De,KAAef,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDgB,KAAchB,EAAK,MAAM,OAAO,sBAAiB,CAAC,GAClDiB,KAAcjB,EAAK,MAAM,OAAO,sBAAiB,CAAC,GAClDkB,KAAmBlB,EAAK,MAAM,OAAO,sBAAsB,CAAC,GAC5DmB,KAAcnB,EAAK,MAAM,OAAO,sBAAiB,CAAC,GAClDoB,KAAepB,EAAK,MAAM,OAAO,sBAAkB,CAAC;;;;;;;;ACrBjE,UAAM,EAAE,GAAAnI,EAAA,IAAMsF,GAAA,GAERkE,IAAOC;sBAMX9B,EAAA,GAAAC,EAqBM,OArBNC,IAqBM;AAAA,MAlBJC,EAIM,OAJNC,IAIM;AAAA,QADJ2B,EAAgExB,EAAAyB,EAAA,GAAA,EAAlD,OAAM,2CAAyC;AAAA,MAAA;MAG/D7B,EAGM,OAHNE,IAGM;AAAA,QAFJF,EAAkE,KAAlE8B,IAAkE3B,EAAf4B,EAAA,QAAQ,GAAA,CAAA;AAAA,QAC3D/B,EAA8F,KAA9FgC,IAA8F7B,EAA1DC,EAAAlI,CAAA,wCAAwC6J,EAAA,SAAA,CAAQ,CAAA,GAAA,CAAA;AAAA,MAAA;MAGtF/B,EAMS,UAAA;AAAA,QALP,OAAM;AAAA,QACL,gCAAO0B,EAAI,UAAA;AAAA,MAAA;QAEZE,EAAoCxB,EAAA6B,EAAA,GAAA,EAA1B,OAAM,mBAAiB;AAAA,QAAGC,GAAA,QACjC9B,EAAAlI,CAAA,EAAC,iBAAA,CAAA,GAAA,CAAA;AAAA,MAAA;;;;;;;;;;;;;iDCUJiK,KAAwB,GAuFxBC,KAAiB;;;;;;;;;;;;;;;AAnEvB,UAAMC,IAAQN,GAURL,IAAOC;AAMb,IAAA7E,GAAcwF,GAAMD,GAAO,QAAQ,GAAGC,GAAMD,GAAO,UAAU,CAAC;AAC9D,UAAM,EAAE,GAAAnK,EAAA,IAAMsF,GAAA,GAER+E,IAAaC;AAAA,MACjB,OAAO,SAAW,MACd,OAAO,WAAW,8BAA8B,EAAE,UAClD;AAAA,IAAA;AAGN,QAAIC,IAAyC;AAE7C,IAAAC;AAAA,MACE,MAAML,EAAM;AAAA,MACZ,CAACxE,MAAU;AAKT,YAJI4E,MACFA,EAAA,GACAA,IAAoB,OAElB5E,MAAU,QAAQ;AACpB,gBAAM8E,IAAM,OAAO,WAAW,8BAA8B,GACtDC,IAAU,CAACC,MAA2B;AAAE,YAAAN,EAAW,QAAQM,EAAE;AAAA,UAAS;AAC5E,UAAAF,EAAI,iBAAiB,UAAUC,CAAO,GACtCH,IAAoB,MAAME,EAAI,oBAAoB,UAAUC,CAAO;AAAA,QACrE;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpBE,GAAgB,MAAM;AACpB,MAAIL,KAAmBA,EAAA;AAAA,IACzB,CAAC;AAED,UAAMM,IAAgB7F;AAAA,MAAS,MAC7BmF,EAAM,UAAU,SAAUE,EAAW,QAAQ,SAAS,UAAWF,EAAM;AAAA,IAAA;AAEzE,IAAAzE,GAAqBmF,CAAa;AAElC,UAAMC,IAAOR,EAAI,CAAC,GACZS,IAAWT,EAAI,CAAC,GAChBU,IAAcV,EAAI,CAAC,GACnBW,IAAaX,EAAI,CAAC,GAClBY,IAAsBZ,EAAI,CAAC,GAC3Ba,IAAuBb,EAAI,CAAC,GAC5Bc,IAAgBd,EAAI,CAAC,GAErBe,IAAaf,EAA2B,IAAI,GAC5CgB,IAAUhB,EAA2B,IAAI,GAGzCiB,IAAajB,EAAI,EAAI;AAC3B,QAAIkB,IAA8B;AAGlC,UAAMC,IAAgB,MAAM;AAC1B,MAAAF,EAAW,QAAQ,IACfC,MAAiB,QACnB,aAAaA,CAAY,GAE3BA,IAAe,OAAO,WAAW,MAAM;AACrC,QAAAD,EAAW,QAAQ;AAAA,MACrB,GAAGrB,EAAc;AAAA,IACnB,GAEMwB,IAAkB,MAAMD,EAAA,GAGxBE,IAAkB3G,EAAS,MAAM4G,GAAezB,EAAM,KAAK,CAAC,GAE5D0B,IAAc7G,EAAS,MAAM2G,EAAgB,MAAMxB,EAAM,YAAY,CAAC,GAGtE2B,IAAiB9G,EAAS,MACzB6G,EAAY,SACV1B,EAAM,gBAAgB,KAAK,CAAC/J,MAAMA,EAAE,KAAKyL,EAAY,KAAM,CAAC,KAAK,IACzE,GAEKE,KAA0B/G,EAAS,MACnC,CAAC8G,EAAe,SAAS,CAACD,EAAY,QAAc,OACjDC,EAAe,MAAM,OAAOD,EAAY,OAAOG,EAAU,KAAK,CACtE,GAEKC,IAAWjH,EAAS,MAAO6G,EAAY,QAAQK,GAAYL,EAAY,KAAK,IAAI,aAAc,GAG9FM,KAAa,CAACC,GAAcC,MAAsB;AACtD,UAAI,CAACR,EAAY,MAAO;AACxB,YAAMS,IAAiC,EAAE,MAAAF,GAAM,SAAAC,GAAS,MAAMR,EAAY,MAAA;AAC1E,MAAArC,EAAK,gBAAgB8C,CAAE;AAAA,IACzB,GAGMN,IAAYhH,EAAgC,OAAO;AAAA,MACvD,MAAMmH;AAAA,MACN,GAAGnM,EAAE;AAAA,MACL,OAAO6K,EAAc;AAAA,MACrB,QAASV,EAAM,UAAU;AAAA,IAAA,EACzB;AAGF,IAAAhF,GAAQ,2BAA2B6G,CAAS,GAG5CxB;AAAA,MACE,MAAML,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAW,EAAK,QAAQ,GACbC,EAAS,QAAQ,GACjBC,EAAY,QAAQ,GACpBC,EAAW,QAAQ,GACnBC,EAAoB,QAAQ,GAC5BC,EAAqB,QAAQ,GAC7BI,EAAW,QAAQ,IACfC,MAAiB,QACnB,aAAaA,CAAY;AAAA,MAE7B;AAAA,IAAA,GAIFhB;AAAA,MACE,CAACyB,GAAUf,GAAqBC,CAAoB;AAAA,MACpD,MAAM;AACJ,YACEc,EAAS,UAAU,WACnBf,EAAoB,QAAQ,KAC5BC,EAAqB,QAAQ,KAC7BE,EAAW,OACX;AACA,gBAAMkB,IAAiBlB,EAAW,MAAM,aAClCmB,IAAkBnB,EAAW,MAAM,cACnCoB,IAASF,IAAiBrB,EAAoB,OAC9CwB,IAASF,IAAkBrB,EAAqB,OAChDwB,IAAU,KAAK,IAAIF,GAAQC,CAAM;AACvC,UAAA5B,EAAK,QAAQ,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI6B,CAAO,CAAC;AAAA,QACnD;AAAA,MACF;AAAA,IAAA,GAIFnC;AAAA,MACE,MAAMmB,EAAgB,MAAM;AAAA,MAC5B,CAACiB,MAAQ;AACP,QAAIA,IAAM,KAAGnB,EAAA;AAAA,MACf;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;AAIpB,UAAMoB,IAAgB,CAAClC,MAAqB;AAC1C,MAAIA,EAAE,QAAQ,YAAYR,EAAM,SAAS,UACvCX,EAAK,OAAO,IACHmB,EAAE,QAAQ,eAAeR,EAAM,eAAe,IACvDX,EAAK,YAAYW,EAAM,eAAe,CAAC,IAC9BQ,EAAE,QAAQ,gBAAgBR,EAAM,eAAewB,EAAgB,MAAM,SAAS,KACvFnC,EAAK,YAAYW,EAAM,eAAe,CAAC;AAAA,IAE3C;AAEA,IAAA2C,GAAU,MAAM;AACd,MAAI3C,EAAM,SAAS,UACjB,OAAO,iBAAiB,WAAW0C,CAAa,IACvCvB,EAAQ,SACjBA,EAAQ,MAAM,iBAAiB,WAAWuB,CAA8B;AAAA,IAE5E,CAAC,GAEDjC,GAAgB,MAAM;AACpB,MAAIY,MAAiB,QAAM,aAAaA,CAAY,GAChDrB,EAAM,SAAS,UACjB,OAAO,oBAAoB,WAAW0C,CAAa,IAC1CvB,EAAQ,SACjBA,EAAQ,MAAM,oBAAoB,WAAWuB,CAA8B;AAAA,IAE/E,CAAC;AAED,UAAME,KAAe,MAAM;AACzB,MAAAjC,EAAK,QAAQ,KAAK,IAAIA,EAAK,QAAQ,KAAK,EAAE;AAAA,IAC5C,GACMkC,KAAgB,MAAM;AAC1B,MAAAlC,EAAK,QAAQ,KAAK,IAAIA,EAAK,QAAQ,KAAK,IAAI;AAAA,IAC9C,GACMmC,KAAe,MAAM;AACzB,MAAAlC,EAAS,QAAQA,EAAS,QAAQ;AAAA,IACpC,GACMmC,KAAmB,MAAM;AAC7B,MAAAnC,EAAS,QAAQA,EAAS,QAAQ;AAAA,IACpC,GAEMoC,KAAmB,MAAM;AAC7B,UAAI9B,EAAW,SAASH,EAAoB,QAAQ,KAAKC,EAAqB,QAAQ,GAAG;AACvF,cAAMoB,IAAiBlB,EAAW,MAAM,aAClCmB,IAAkBnB,EAAW,MAAM,cACnCoB,IAASF,IAAiBrB,EAAoB,OAC9CwB,IAASF,IAAkBrB,EAAqB,OAChDwB,IAAU,KAAK,IAAIF,GAAQC,CAAM;AACvC,QAAA5B,EAAK,QAAQ,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI6B,CAAO,CAAC;AAAA,MACnD;AACE,QAAA7B,EAAK,QAAQ;AAEf,MAAAC,EAAS,QAAQ,GACjBK,EAAc;AAAA,IAChB,GAEMgC,KAAqB,MAAM;AAC/B,MAAAtC,EAAK,QAAQ,GACbC,EAAS,QAAQ,GACjBK,EAAc;AAAA,IAChB,GAEMiC,KAAmB,CAACV,MAAoB;AAC5C,MAAA7B,EAAK,QAAQ6B;AAAA,IACf,GAEMW,KAAc,MAAM;AACxB,MAAAxC,EAAK,QAAQ,GACbC,EAAS,QAAQ,GACjBK,EAAc;AAAA,IAChB,GAEMmC,KAAiB,MAAM;AAC3B,UAAI,CAAC1B,EAAY,MAAO;AACxB,YAAM2B,IAAO,SAAS,cAAc,GAAG;AACvC,MAAAA,EAAK,OAAO3B,EAAY,MAAM,KAC9B2B,EAAK,WAAW3B,EAAY,MAAM,MAClC2B,EAAK,MAAA;AAAA,IACP,GAEMC,KAAkBzI,EAAS,MAAMmF,EAAM,SAAS,OAAO,GAEvDuD,KAAUpD,EAA+G,IAAI,GAC7HqD,KAAcrD,EAAI,CAAC,GACnBsD,KAAYtD,EAAI,CAAC,GACjBuD,KAAgBvD,EAAI,EAAK,GAEzBwD,KAAUxD,EAA+G,IAAI,GAC7HyD,KAAczD,EAAI,CAAC,GACnB0D,KAAY1D,EAAI,CAAC,GACjB2D,KAAgB3D,EAAI,EAAK,GAEzB4D,KAA0B,CAACC,GAAiBC,MAAkB;AAClE,MAAAT,GAAY,QAAQQ,GACpBP,GAAU,QAAQQ;AAAA,IACpB,GAEMC,KAA0B,CAACF,GAAiBC,MAAkB;AAClE,MAAAL,GAAY,QAAQI,GACpBH,GAAU,QAAQI;AAAA,IACpB,GAEME,KAAWhE,EAA4B,IAAI,GAC3CiE,KAAuB,CAACpH,MAAkC;AAC9D,MAAAmH,GAAS,QAAQnH;AAAA,IACnB,GAEMqH,IAAelE,EAAI,EAAI,GACvBmE,IAAkBnE,EAAI,EAAK,GAC3BoE,IAAmBpE,EAA0B,SAAS,GAGtDqE,KAAa3J,EAAS,MAAM;;AAChC,UAAI8G,EAAe;AACjB,iBACE8C,KAAAhI,IAAAkF,EAAe,OAAM,qBAArB,gBAAA8C,EAAA,KAAAhI,GAAwCiF,EAAY,OAAQG,EAAU,WAAU,CAAA;AAGpF,UAAIC,EAAS,UAAU;AACrB,eAAOhG,GAAsB;AAAA,UAC3B,MAAM6E,EAAK;AAAA,UACX,UAAUiC;AAAA,UACV,WAAWC;AAAA,UACX,cAAcG;AAAA,UACd,gBAAgBC;AAAA,UAChB,cAAcF;AAAA,UACd,eAAeD;AAAA,UACf,SAASK;AAAA,UACT,GAAGtN,EAAE;AAAA,QAAA,CACN;AAEH,UAAIiM,EAAS,UAAU;AACrB,eAAOxF,GAAoB;AAAA,UACzB,MAAMqE,EAAK;AAAA,UACX,UAAUiC;AAAA,UACV,WAAWC;AAAA,UACX,SAASM;AAAA,UACT,GAAGtN,EAAE;AAAA,QAAA,CACN;AAEH,UAAIiM,EAAS,UAAU;AACrB,eAAOvF,GAAqB;AAAA,UAC1B,SAASgH,GAAQ;AAAA,UACjB,SAASC,GAAY;AAAA,UACrB,OAAOC,GAAU;AAAA,UACjB,WAAWC,GAAc;AAAA,UACzB,GAAG7N,EAAE;AAAA,QAAA,CACN;AAEH,UAAIiM,EAAS,UAAU;AACrB,eAAOhF,GAAqB;AAAA,UAC1B,SAAS6G,GAAQ;AAAA,UACjB,SAASC,GAAY;AAAA,UACrB,OAAOC,GAAU;AAAA,UACjB,WAAWC,GAAc;AAAA,UACzB,GAAGjO,EAAE;AAAA,QAAA,CACN;AAEH,UAAIiM,EAAS,UAAU;AACrB,eAAO/E,GAAoB,EAAE,OAAOoH,GAAS,OAAO,GAAGtO,EAAE,OAAO;AAElE,UAAIiM,EAAS,UAAU,QAAQ;AAC7B,cAAM4C,MAAMC,IAAAjD,EAAY,MAAO,KAAK,MAAM,GAAG,EAAE,IAAA,MAAnC,gBAAAiD,EAA0C,kBAAiB;AACvE,eAAOzH,GAAqB;AAAA,UAC1B,UAAUmH,EAAa;AAAA,UACvB,cAAc,MAAM;AAAE,YAAAA,EAAa,QAAQ,CAACA,EAAa;AAAA,UAAO;AAAA,UAChE,QAAQK,MAAQ,UAAUA,MAAQ;AAAA,UAClC,aAAaJ,EAAgB;AAAA,UAC7B,qBAAqB,MAAM;AAAE,YAAAA,EAAgB,QAAQ,CAACA,EAAgB;AAAA,UAAO;AAAA,UAC7E,GAAGzO,EAAE;AAAA,QAAA,CACN;AAAA,MACH;AACA,aAAIiM,EAAS,UAAU,aACdvE,GAAyB;AAAA,QAC9B,UAAUgH,EAAiB;AAAA,QAC3B,kBAAkB,MAAM;AAAE,UAAAA,EAAiB,QAAQA,EAAiB,UAAU,YAAY,WAAW;AAAA,QAAW;AAAA,QAChH,GAAG1O,EAAE;AAAA,MAAA,CACN,IAEI,CAAA;AAAA,IACT,CAAC,GAGK+O,KAAe/J,EAAyB,MAAM;AAClD,YAAMsC,IAAyB;AAAA,QAC7B;AAAA,UACE,OAAO;AAAA,YACL,EAAE,MAAM,UAAU,MAAMyC,IAAU,SAAS/J,EAAE,MAAM,iBAAiB,GAAG,QAAQuN,GAAA;AAAA,UAAe;AAAA,QAChG;AAAA,MACF;AAEF,aAAIE,GAAgB,SAClBnG,EAAO,KAAK;AAAA,QACV,OAAO;AAAA,UACL,EAAE,MAAM,UAAU,MAAM7D,IAAG,SAASzD,EAAE,MAAM,cAAc,GAAG,QAAQ,MAAMwJ,EAAK,OAAO,EAAA;AAAA,QAAE;AAAA,MAC3F,CACD,GAEIlC;AAAA,IACT,CAAC,GAEK0H,KAAgBhK,EAAS,MAAM2J,GAAW,MAAM,SAAS,CAAC;;;kBAI9D/G,EAqPM,OAAA;AAAA,iBApPA;AAAA,QAAJ,KAAI0D;AAAA,QACH,UAAUzB,EAAA,SAAI,UAAA,IAAA;AAAA,QACd,cAAYgB,EAAA;AAAA,QACb,OAAM;AAAA,MAAA;QAIGhB,EAAA,wBADTlC,KAAAC,EAoGM,OApGNG,IAoGM;AAAA,UA9FJD,EAiEM,OAjENE,IAiEM;AAAA,YA/DJF,EAOM,OAPN8B,IAOM;AAAA,cANJ9B,EAEK,MAFLgC,IAEK7B,GADArB,IAAAiF,EAAA,UAAA,gBAAAjF,EAAa,IAAI,GAAA,CAAA;AAAA,cAEtBkB,EAEO,QAFPmH,IAEOhH,EADF4B,EAAA,oBAAmB,MAAC5B,EAAG0D,EAAA,MAAgB,MAAM,GAAA,CAAA;AAAA,YAAA;YAKpD7D,EAcM,OAdNoH,IAcM;AAAA,eAbJvH,EAAA,EAAA,GAAAC,EAYWuH,GAAA,MAAAC,EAZqBL,GAAA,OAAY,CAA1BM,GAAOC;mCAAyCA;AAAA,cAAA;iBAChE3H,EAAA,EAAA,GAAAC,EAUWuH,WAVoBE,EAAM,OAAK,CAAxBE,GAAMC;kBAAwC,KAAA,cAAAF,UAAWE;AAAA,gBAAA;kBAEjED,EAAK,SAAI,iBADjB3H,EAQS,UAAA;AAAA;oBANP,OAAM;AAAA,oBACL,gBAAe2H,EAA2B;AAAA,oBAC1C,UAAWA,EAA2B;AAAA,oBACtC,SAAQA,EAA2B;AAAA,kBAAA;qBAEpC5H,EAAA,GAAA8H,EAA4EC,EAA3DH,EAA2B,IAAI,GAAA,EAAE,OAAM,mBAAiB;AAAA,kBAAA;;;;YAOjFzH,EAmCM,OAnCN6H,IAmCM;AAAA,eAlCJhI,EAAA,EAAA,GAAAC,EAoBWuH,GAAA,MAAAC,EApBqBT,GAAA,OAAU,CAAxBU,GAAOC;iCAAqCA;AAAA,cAAA;iBAC5D3H,EAAA,EAAA,GAAAC,EAiBWuH,WAjBoBE,EAAM,OAAK,CAAxBE,GAAMC;kBAAsC,KAAA,YAAAF,UAAWE;AAAA,gBAAA;kBAE/DD,EAAK,SAAI,iBADjB3H,EAQS,UAAA;AAAA;oBANP,OAAM;AAAA,oBACL,gBAAe2H,EAA2B;AAAA,oBAC1C,UAAWA,EAA2B;AAAA,oBACtC,SAAQA,EAA2B;AAAA,kBAAA;qBAEpC5H,EAAA,GAAA8H,EAA4EC,EAA3DH,EAA2B,IAAI,GAAA,EAAE,OAAM,mBAAiB;AAAA,kBAAA,aAG9DA,EAAK,SAAI,eADtB3H,EAMO,QAAA;AAAA;oBAJL,OAAM;AAAA,oBACL,OAAKgI,GAAA,EAAA,UAAeL,EAAyB,YAAQ,QAAA;AAAA,kBAAA,GAElDtH,EAAAsH,EAAyB,OAAO,GAAA,CAAA;;kCAGxCzH,EAAuD,OAAA,EAAlD,OAAM,6CAAyC,MAAA,EAAA;AAAA,cAAA;eAEtDH,EAAA,EAAA,GAAAC,EAYWuH,GAAA,MAAAC,EAZqBL,GAAA,OAAY,CAA1BM,GAAOC;mCAAyCA;AAAA,cAAA;iBAChE3H,EAAA,EAAA,GAAAC,EAUWuH,WAVoBE,EAAM,OAAK,CAAxBE,GAAMC;kBAAwC,KAAA,cAAAF,UAAWE;AAAA,gBAAA;kBAEjED,EAAK,SAAI,iBADjB3H,EAQS,UAAA;AAAA;oBANP,OAAM;AAAA,oBACL,gBAAe2H,EAA2B;AAAA,oBAC1C,UAAWA,EAA2B;AAAA,oBACtC,SAAQA,EAA2B;AAAA,kBAAA;qBAEpC5H,EAAA,GAAA8H,EAA4EC,EAA3DH,EAA2B,IAAI,GAAA,EAAE,OAAM,mBAAiB;AAAA,kBAAA;;;;;UAS3EP,GAAA,SADRrH,EAAA,GAAAC,EAyBM,OAzBNiI,IAyBM;AAAA,aArBJlI,EAAA,EAAA,GAAAC,EAoBWuH,GAAA,MAAAC,EApBqBT,GAAA,OAAU,CAAxBU,GAAOC;+BAAqCA;AAAA,YAAA;cACjDA,IAAE,KAAb3H,EAAA,GAAAC,EAAuE,OAAvEkI,EAAuE;eACvEnI,EAAA,EAAA,GAAAC,EAiBWuH,WAjBoBE,EAAM,OAAK,CAAxBE,GAAMC;gBAAsC,KAAA,YAAAF,UAAWE;AAAA,cAAA;gBAE/DD,EAAK,SAAI,iBADjB3H,EAQS,UAAA;AAAA;kBANP,OAAM;AAAA,kBACL,gBAAe2H,EAA2B;AAAA,kBAC1C,UAAWA,EAA2B;AAAA,kBACtC,SAAQA,EAA2B;AAAA,gBAAA;mBAEpC5H,EAAA,GAAA8H,EAA4EC,EAA3DH,EAA2B,IAAI,GAAA,EAAE,OAAM,mBAAiB;AAAA,gBAAA,aAG9DA,EAAK,SAAI,eADtB3H,EAMO,QAAA;AAAA;kBAJL,OAAM;AAAA,kBACL,OAAKgI,GAAA,EAAA,UAAeL,EAAyB,YAAQ,QAAA;AAAA,gBAAA,GAElDtH,EAAAsH,EAAyB,OAAO,GAAA,CAAA;;;;;QAQ9CzH,EAqGM,OAAA;AAAA,mBApGA;AAAA,UAAJ,KAAIuD;AAAA,UACJ,OAAM;AAAA,UACL,aAAWK;AAAA,QAAA;UAEIG,EAAA,cAAhBjE,EA+FWuH,GAAA,EAAA,KAAA,KAAA;AAAA,YA9FsCpD,GAAA,SAA/CpE,EAAA,GAAA8H,EAA+GC,EAA/F3D,GAAA,KAAuB,GAAA;AAAA;cAAkC,MAAMF,EAAA;AAAA,cAAc,KAAKG,EAAA;AAAA,YAAA,sCAClGpE,EA4FWuH,GAAA,EAAA,KAAA,KAAA;AAAA,cA1FDlD,EAAA,UAAQ,gBADhBwD,EAUEvH,EAAAK,EAAA,GAAA;AAAA;gBARC,KAAKsD,EAAA,MAAY;AAAA,gBACjB,MAAMf,EAAA;AAAA,gBACN,UAAUC,EAAA;AAAA,gBACV,aAAWK,EAAA;AAAA,gBACX,aAAWS,EAAA,MAAY;AAAA,gBACvB,cAAawB;AAAA,gBACb,sBAAoB0C,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAG,MAAe7E,EAAA,QAAsB;AAAA,gBAC5D,uBAAqB6E,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAG3N,MAAe+I,EAAA,QAAuB/I;AAAA,cAAA,sEAGpD6J,EAAA,UAAQ,cADrBwD,EAQEvH,EAAAM,EAAA,GAAA;AAAA;gBANC,KAAKqD,EAAA,MAAY;AAAA,gBACjB,MAAMf,EAAA;AAAA,gBACN,gBAAcE,EAAA;AAAA,gBACd,cAAW+E,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGhO,MAAeiJ,EAAA,QAAcjJ;AAAA,gBAC3C,oBAAkBgO,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAG/P,MAAeiL,EAAA,QAAajL;AAAAA,gBACjD,mBAAiB+P,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAG,MAAe7E,EAAA,QAAsB;AAAA,cAAA,gDAEnCe,EAAA,UAAQ,eAAjCwD,EAAuEvH,EAAAO,EAAA,GAAA;AAAA;gBAAxB,KAAKoD,EAAA,MAAY;AAAA,cAAA,wBACvCI,EAAA,UAAQ,eAAjCwD,EAAuEvH,EAAAQ,EAAA,GAAA;AAAA;gBAAxB,KAAKmD,EAAA,MAAY;AAAA,cAAA,wBACvCI,EAAA,UAAQ,eAAjCwD,EAAuEvH,EAAAS,EAAA,GAAA;AAAA;gBAAxB,KAAKkD,EAAA,MAAY;AAAA,cAAA,wBACxCI,EAAA,UAAQ,cAAhCwD,EAAqEvH,EAAAU,EAAA,GAAA;AAAA;gBAAxB,KAAKiD,EAAA,MAAY;AAAA,cAAA,wBAEjDI,EAAA,UAAQ,eADrBwD,EAMEvH,EAAAW,EAAA,GAAA;AAAA;yBAJI;AAAA,gBAAJ,KAAI6E;AAAA,gBACH,KAAK7B,EAAA,MAAY;AAAA,gBACjB,iBAAgBqC;AAAA,gBAChB,mBAAiB6B,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGtN,MAAgBoL,GAAA,QAAgBpL;AAAA,cAAA,wBAG1CwJ,EAAA,UAAQ,eADrBwD,EAMEvH,EAAAY,EAAA,GAAA;AAAA;yBAJI;AAAA,gBAAJ,KAAIgF;AAAA,gBACH,KAAKjC,EAAA,MAAY;AAAA,gBACjB,iBAAgBwC;AAAA,gBAChB,mBAAiB0B,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGtN,MAAgBwL,GAAA,QAAgBxL;AAAA,cAAA,wBAE7BwJ,EAAA,UAAQ,gBAAlCwD,EAAyEvH,EAAAa,EAAA,GAAA;AAAA;gBAAxB,KAAK8C,EAAA,MAAY;AAAA,cAAA,wBAErDI,EAAA,UAAQ,gBADrBwD,EAIEvH,EAAAc,EAAA,GAAA;AAAA;gBAFC,KAAK6C,EAAA,MAAY;AAAA,gBACjB,aAAWA,EAAA,MAAY;AAAA,cAAA,qCAEGI,EAAA,UAAQ,mBAArCwD,EAA6GvH,EAAAe,EAAA,GAAA;AAAA;gBAAtD,KAAK4C,EAAA,MAAY;AAAA,gBAAM,aAAW6C,EAAA;AAAA,cAAA,qCAE5EzC,EAAA,UAAQ,eADrBwD,EAIEvH,EAAAgB,EAAA,GAAA;AAAA;gBAFC,KAAK2C,EAAA,MAAY;AAAA,gBACjB,aAAWA,EAAA,MAAY;AAAA,cAAA,qCAGbI,EAAA,UAAQ,cADrBwD,EAIEvH,EAAAiB,EAAA,GAAA;AAAA;gBAFC,KAAK0C,EAAA,MAAY;AAAA,gBACjB,aAAWA,EAAA,MAAY;AAAA,cAAA,qCAGbI,EAAA,UAAQ,cADrBwD,EAIEvH,EAAAkB,EAAA,GAAA;AAAA;gBAFC,KAAKyC,EAAA,MAAY;AAAA,gBACjB,aAAWA,EAAA,MAAY;AAAA,cAAA,qCAGbI,EAAA,UAAQ,mBADrBwD,EAIEvH,EAAAmB,EAAA,GAAA;AAAA;gBAFC,KAAKwC,EAAA,MAAY;AAAA,gBACjB,aAAWA,EAAA,MAAY;AAAA,cAAA,qCAELI,EAAA,UAAQ,SAAc9B,EAAM,mBAAmBF,WAClEwF,EAIEO,IAAA;AAAA;gBAHC,aAAWnE,EAAA,MAAY;AAAA,gBACvB,aAAWA,EAAA,MAAY;AAAA,gBACvB,YAAU0B;AAAA,cAAA,2CAIFtB,EAAA,UAAQ,cADrBwD,EAKEvH,EAAAoB,EAAA,GAAA;AAAA;gBAHC,KAAKuC,EAAA,MAAY;AAAA,gBACjB,iBAAe1B,EAAM;AAAA,gBACrB,eAAcoE;AAAA,cAAA,yCAGJtC,EAAA,UAAQ,eADrBwD,EAMEvH,EAAAqB,EAAA,GAAA;AAAA;gBAJC,KAAKsC,EAAA,MAAY;AAAA,gBACjB,aAAWA,EAAA,MAAY;AAAA,gBACvB,aAAW2C,EAAA;AAAA,gBACX,gBAAcC,EAAA;AAAA,cAAA,wEAEjBgB,EAKEO,IAAA;AAAA;gBAHC,aAAWnE,EAAA,MAAY;AAAA,gBACvB,aAAWA,EAAA,MAAY;AAAA,gBACvB,YAAU0B;AAAA,cAAA;;;;SAOF1D,EAAA,YAAY8B,EAAA,MAAgB,SAAM,UAAnD/D,EA8BWuH,GAAA,EAAA,KAAA,KAAA;AAAA,UA5BDtF,EAAA,eAAY,UADpBjC,EAaS,UAAA;AAAA;YAXN,OAAKgI,GAAA;AAAA,uBAAuBrE,EAAA,QAAU,IAAA;AAAA,yBAA+BA,EAAA,QAAU,qBAAA;AAAA,6BAAuFA,EAAA,QAAU,SAAA;AAAA;;YAMjL,OAAM;AAAA,YACL,SAAKwE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAEzG,EAAI,YAAaK,EAAA,eAAY,CAAA;AAAA,YACpC,qCAAY0B,EAAA,QAAU;AAAA,UAAA;YAEvB7B,EAA6DxB,EAAArB,EAAA,GAAA,EAAhD,OAAM,yCAAuC;AAAA,UAAA;UAIpDgD,EAAA,eAAe8B,EAAA,MAAgB,SAAM,UAD7C/D,EAaS,UAAA;AAAA;YAXN,OAAKgI,GAAA;AAAA,uBAAuBrE,EAAA,QAAU,IAAA;AAAA,yBAA+BA,EAAA,QAAU,qBAAA;AAAA,6BAAsFA,EAAA,QAAU,SAAA;AAAA;;YAMhL,OAAM;AAAA,YACL,SAAKwE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAEzG,EAAI,YAAaK,EAAA,eAAY,CAAA;AAAA,YACpC,uCAAY0B,EAAA,QAAU;AAAA,UAAA;YAEvB7B,EAA8DxB,EAAApB,EAAA,GAAA,EAAhD,OAAM,yCAAuC;AAAA,UAAA;;;;;;;;;;;;;;AC/pB5D,SAASoJ,GAAcC,GAAwB;AACpD,MAAIC,IAAmB,IACnBC,IAAuB,IACvBC,IAAS;AAEb,QAAMC,IAAO,MAAM;AACjB,QAAID,KAAU,OAAO,WAAa,IAAa;AAC/C,IAAAF,IAAmB,SAAS,KAAK,MAAM,UACvCC,IAAuB,SAAS,KAAK,MAAM;AAC3C,UAAMG,IAAiB,OAAO,aAAa,SAAS,gBAAgB;AACpE,aAAS,KAAK,MAAM,WAAW,UAC3BA,IAAiB,MACnB,SAAS,KAAK,MAAM,eAAe,GAAGA,CAAc,OAEtDF,IAAS;AAAA,EACX,GAEMG,IAAS,MAAM;AACnB,IAAI,CAACH,KAAU,OAAO,WAAa,QACnC,SAAS,KAAK,MAAM,WAAWF,GAC/B,SAAS,KAAK,MAAM,eAAeC,GACnCC,IAAS;AAAA,EACX;AAEA,SAAAxD,GAAU,MAAM;AACd,IAAIqD,EAAA,KAAWI,EAAA;AAAA,EACjB,CAAC,GAEDG,GAAY,MAAM;AAChB,IAAAD,EAAA;AAAA,EACF,CAAC,GAEM,EAAE,MAAAF,GAAM,QAAAE,EAAA;AACjB;;;;;;;;;;;;;;;AChBA,UAAMtG,IAAQN,GAQRL,IAAOC,GAMP,EAAE,MAAA8G,GAAM,QAAAE,EAAA,IAAWP,GAAc,MAAM/F,EAAM,MAAM;AAEzD,IAAAK;AAAA,MACE,MAAML,EAAM;AAAA,MACZ,CAACwG,MAAS;AACR,QAAIA,IAAMJ,EAAA,IACLE,EAAA;AAAA,MACP;AAAA,IAAA;AAGF,UAAMpG,IAAaC;AAAA,MACjB,OAAO,SAAW,MACd,OAAO,WAAW,8BAA8B,EAAE,UAClD;AAAA,IAAA;AAGN,QAAIC,IAAyC;AAE7C,IAAAC;AAAA,MACE,MAAML,EAAM;AAAA,MACZ,CAACxE,MAAU;AAKT,YAJI4E,MACFA,EAAA,GACAA,IAAoB,OAElB5E,MAAU,QAAQ;AACpB,gBAAM8E,IAAM,OAAO,WAAW,8BAA8B,GACtDC,IAAU,CAACC,MAA2B;AAAE,YAAAN,EAAW,QAAQM,EAAE;AAAA,UAAS;AAC5E,UAAAF,EAAI,iBAAiB,UAAUC,CAAO,GACtCH,IAAoB,MAAME,EAAI,oBAAoB,UAAUC,CAAO;AAAA,QACrE;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpBE,GAAgB,MAAM;AACpB,MAAIL,KAAmBA,EAAA;AAAA,IACzB,CAAC;AAED,UAAMM,IAAgB7F;AAAA,MAAS,MAC7BmF,EAAM,UAAU,SAAUE,EAAW,QAAQ,SAAS,UAAWF,EAAM;AAAA,IAAA,GAGnEyG,IAAsB,MAAMpH,EAAK,OAAO,GACxCqH,IAAqB,CAAClG,MAAkBA,EAAE,gBAAA,GAC1CmG,IAAc,CAACnG,MAAkBA,EAAE,gBAAA;2BAIvC8E,EA0BWsB,IAAA,EA1BD,IAAG,UAAM;AAAA,MACjBrH,EAwBasH,IAAA,EAxBD,MAAK,cAAU;AAAA,oBACzB,MAsBM;AAAA,UAtBKnH,EAAA,eAAXjC,EAsBM,OAAA;AAAA;YAtBa,OAAM;AAAA,YAAY,cAAYiD,EAAA;AAAA,UAAA;YAC/C/C,EAoBM,OAAA;AAAA,cAnBJ,OAAM;AAAA,cACL,SAAO8I;AAAA,cACP,SAAOE;AAAA,YAAA;cAERhJ,EAcM,OAAA;AAAA,gBAdD,OAAM;AAAA,gBAAsC,SAAO+I;AAAA,cAAA;gBACtDnH,EAYEuH,IAAA;AAAA,kBAXA,MAAK;AAAA,kBACJ,OAAOpH,EAAA;AAAA,kBACP,iBAAeA,EAAA;AAAA,kBACf,oBAAkBA,EAAA;AAAA,kBAClB,QAAQA,EAAA;AAAA,kBACR,UAAUA,EAAA;AAAA,kBACV,UAAUA,EAAA;AAAA,kBACV,OAAOA,EAAA;AAAA,kBACP,gCAAOL,EAAI,OAAA;AAAA,kBACX,YAAQuG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGrO,MAAM8H,cAAiB9H,CAAC;AAAA,kBACnC,eAAYqO,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGhO,MAAMyH,kBAAqBzH,CAAC;AAAA,gBAAA;;;;;;;;;;;;;;;;;;;;;;;;AChF1D,UAAMoI,IAAQN,GAWRL,IAAOC,GAKPY,IAAaC;AAAA,MACjB,OAAO,SAAW,MACd,OAAO,WAAW,8BAA8B,EAAE,UAClD;AAAA,IAAA;AAGN,QAAIC,IAAyC;AAE7C,IAAAC;AAAA,MACE,MAAML,EAAM;AAAA,MACZ,CAACxE,MAAU;AAKT,YAJI4E,MACFA,EAAA,GACAA,IAAoB,OAElB5E,MAAU,QAAQ;AACpB,gBAAM8E,IAAM,OAAO,WAAW,8BAA8B,GACtDC,IAAU,CAACC,MAA2B;AAAE,YAAAN,EAAW,QAAQM,EAAE;AAAA,UAAS;AAC5E,UAAAF,EAAI,iBAAiB,UAAUC,CAAO,GACtCH,IAAoB,MAAME,EAAI,oBAAoB,UAAUC,CAAO;AAAA,QACrE;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpBE,GAAgB,MAAM;AACpB,MAAIL,KAAmBA,EAAA;AAAA,IACzB,CAAC;AAED,UAAMM,IAAgB7F;AAAA,MAAS,MAC7BmF,EAAM,UAAU,SAAUE,EAAW,QAAQ,SAAS,UAAWF,EAAM;AAAA,IAAA,GAGnE+G,IAA8B;AAAA,MAClC,OAAO,OAAO/G,EAAM,SAAU,WAAW,GAAGA,EAAM,KAAK,OAAOA,EAAM;AAAA,MACpE,QAAQ,OAAOA,EAAM,UAAW,WAAW,GAAGA,EAAM,MAAM,OAAOA,EAAM;AAAA,IAAA;2BAKvEvC,EAeM,OAAA;AAAA,MAfD,OAAM;AAAA,MAAY,OAAOsJ;AAAA,MAAe,cAAYrG,EAAA;AAAA,IAAA;MACvD/C,EAaM,OAbNC,IAaM;AAAA,QAZJ2B,EAWEuH,IAAA;AAAA,UAVA,MAAK;AAAA,UACJ,OAAOpH,EAAA;AAAA,UACP,iBAAeA,EAAA;AAAA,UACf,oBAAkBA,EAAA;AAAA,UAClB,QAAQA,EAAA;AAAA,UACR,UAAUA,EAAA;AAAA,UACV,UAAUA,EAAA;AAAA,UACV,OAAOA,EAAA;AAAA,UACP,YAAQkG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGrO,MAAM8H,cAAiB9H,CAAC;AAAA,UACnC,eAAYqO,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGhO,MAAMyH,kBAAqBzH,CAAC;AAAA,QAAA;;;;ICtFvCoP,KAAUC,GAAY;"}
|
|
1
|
+
{"version":3,"file":"index-C324a7kV.mjs","sources":["../../../file-preview-core/lib/index.mjs","../../src/i18n/localeKey.ts","../../src/composables/useTranslator.ts","../../src/composables/useResolvedTheme.ts","../../src/renderers/Image/toolbar.ts","../../src/renderers/Pdf/toolbar.ts","../../src/renderers/Epub/toolbar.ts","../../src/renderers/Mobi/toolbar.ts","../../src/renderers/Zip/toolbar.ts","../../src/renderers/Text/toolbar.ts","../../src/renderers/Markdown/toolbar.ts","../../src/renderers/RendererLoading.vue","../../src/renderers/lazy.ts","../../src/renderers/Unsupported/index.vue","../../src/FilePreviewContent.vue","../../src/composables/useScrollLock.ts","../../src/FilePreviewModal.vue","../../src/FilePreviewEmbed.vue","../../src/index.ts"],"sourcesContent":["import A from \"jszip\";\nfunction j(e) {\n try {\n const n = new URL(e).pathname.split(\"/\").pop() || \"file\";\n return decodeURIComponent(n);\n } catch {\n const t = e.split(\"/\").pop() || \"file\";\n return decodeURIComponent(t);\n }\n}\nfunction k(e) {\n var n;\n const t = ((n = e.split(\".\").pop()) == null ? void 0 : n.toLowerCase()) || \"\";\n return {\n // 图片\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n png: \"image/png\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n svg: \"image/svg+xml\",\n bmp: \"image/bmp\",\n ico: \"image/x-icon\",\n // 视频\n mp4: \"video/mp4\",\n webm: \"video/webm\",\n ogg: \"video/ogg\",\n ogv: \"video/ogg\",\n mov: \"video/quicktime\",\n avi: \"video/x-msvideo\",\n mkv: \"video/x-matroska\",\n m4v: \"video/x-m4v\",\n \"3gp\": \"video/3gpp\",\n flv: \"video/x-flv\",\n // 音频\n mp3: \"audio/mpeg\",\n wav: \"audio/wav\",\n m4a: \"audio/mp4\",\n aac: \"audio/aac\",\n flac: \"audio/flac\",\n // 文档\n pdf: \"application/pdf\",\n docx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n pptx: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n ppt: \"application/vnd.ms-powerpoint\",\n msg: \"application/vnd.ms-outlook\",\n mobi: \"application/x-mobipocket-ebook\",\n azw: \"application/vnd.amazon.ebook\",\n azw3: \"application/vnd.amazon.ebook\",\n kf8: \"application/vnd.amazon.ebook\",\n // 文本\n txt: \"text/plain\",\n md: \"text/markdown\",\n markdown: \"text/markdown\",\n json: \"application/json\",\n xml: \"application/xml\",\n html: \"text/html\",\n css: \"text/css\",\n js: \"text/javascript\",\n ts: \"text/typescript\",\n jsx: \"text/javascript\",\n tsx: \"text/typescript\",\n py: \"text/x-python\",\n java: \"text/x-java\",\n cpp: \"text/x-c++src\",\n c: \"text/x-csrc\",\n cs: \"text/x-csharp\",\n php: \"text/x-php\",\n rb: \"text/x-ruby\",\n go: \"text/x-go\",\n rs: \"text/x-rust\",\n yaml: \"text/yaml\",\n yml: \"text/yaml\",\n toml: \"text/toml\",\n ini: \"text/plain\",\n env: \"text/plain\",\n diff: \"text/x-diff\",\n patch: \"text/x-diff\",\n log: \"text/plain\",\n csv: \"text/csv\",\n tsv: \"text/tab-separated-values\",\n srt: \"application/x-subrip\",\n vtt: \"text/vtt\",\n zip: \"application/zip\"\n }[t] || \"application/octet-stream\";\n}\nfunction I(e, t = 0) {\n if (e instanceof File)\n return {\n id: `file-${Date.now()}-${t}`,\n name: e.name,\n url: URL.createObjectURL(e),\n type: e.type || k(e.name),\n size: e.size\n };\n if (typeof e == \"string\") {\n const o = j(e);\n return {\n id: `url-${Date.now()}-${t}`,\n name: o,\n url: e,\n type: k(o)\n };\n }\n return {\n id: e.id || `link-${Date.now()}-${t}`,\n name: e.name,\n url: e.url,\n type: e.type || k(e.name),\n size: e.size\n };\n}\nfunction lt(e) {\n return e.map((t, o) => I(t, o));\n}\nfunction ct(e) {\n var r;\n const t = ((r = e.name.split(\".\").pop()) == null ? void 0 : r.toLowerCase()) || \"\", o = e.type.toLowerCase();\n if (o.startsWith(\"image/\") || [\"jpg\", \"jpeg\", \"png\", \"gif\", \"webp\", \"svg\"].includes(t))\n return \"image\";\n if (o.includes(\"pdf\") || t === \"pdf\")\n return \"pdf\";\n if (o.includes(\"wordprocessingml\") || t === \"docx\")\n return \"docx\";\n if (o.includes(\"spreadsheetml\") || t === \"xlsx\")\n return \"xlsx\";\n if (o.includes(\"presentationml\") || t === \"pptx\" || t === \"ppt\")\n return \"pptx\";\n if (o.includes(\"ms-outlook\") || t === \"msg\")\n return \"msg\";\n if (o.includes(\"epub\") || t === \"epub\")\n return \"epub\";\n if ([\"mobi\", \"azw\", \"azw3\", \"kf8\"].includes(t) || o === \"application/x-mobipocket-ebook\" || o === \"application/vnd.amazon.ebook\")\n return \"mobi\";\n if ([\"csv\", \"tsv\"].includes(t) || o === \"text/csv\" || o === \"text/tab-separated-values\")\n return \"csv\";\n if (t === \"xml\" || o === \"application/xml\" || o === \"text/xml\")\n return \"xml\";\n if ([\"srt\", \"vtt\", \"lrc\", \"elrc\", \"ass\", \"ssa\", \"ttml\", \"dfxp\"].includes(t) || o === \"text/vtt\" || o === \"application/x-subrip\" || o === \"application/ttml+xml\")\n return \"subtitle\";\n if (t === \"zip\" || o === \"application/zip\" || o === \"application/x-zip-compressed\")\n return \"zip\";\n if (o.startsWith(\"video/\") || [\"mp4\", \"webm\", \"ogg\", \"ogv\", \"mov\", \"avi\", \"mkv\", \"m4v\", \"3gp\", \"flv\"].includes(t))\n return \"video\";\n if (o.startsWith(\"audio/\") || [\"mp3\", \"wav\", \"ogg\", \"m4a\", \"flac\", \"aac\"].includes(t))\n return \"audio\";\n if (t === \"md\" || t === \"markdown\")\n return \"markdown\";\n if (o === \"application/json\" || t === \"json\")\n return \"json\";\n const n = [\n \"txt\",\n \"log\",\n \"lock\",\n \"js\",\n \"jsx\",\n \"ts\",\n \"tsx\",\n \"py\",\n \"java\",\n \"cpp\",\n \"c\",\n \"h\",\n \"cs\",\n \"php\",\n \"rb\",\n \"go\",\n \"mod\",\n \"rs\",\n \"swift\",\n \"kt\",\n \"lua\",\n \"vim\",\n \"html\",\n \"css\",\n \"scss\",\n \"sass\",\n \"less\",\n \"yaml\",\n \"yml\",\n \"toml\",\n \"ini\",\n \"conf\",\n \"env\",\n \"diff\",\n \"patch\",\n \"sh\",\n \"bash\",\n \"zsh\",\n \"sql\"\n ];\n return o.startsWith(\"text/\") || n.includes(t) ? \"text\" : \"unsupported\";\n}\nfunction dt(e) {\n var n;\n const t = ((n = e.split(\".\").pop()) == null ? void 0 : n.toLowerCase()) || \"\";\n return {\n js: \"javascript\",\n jsx: \"jsx\",\n ts: \"typescript\",\n tsx: \"tsx\",\n py: \"python\",\n java: \"java\",\n cpp: \"cpp\",\n c: \"c\",\n cs: \"csharp\",\n php: \"php\",\n rb: \"ruby\",\n go: \"go\",\n mod: \"go\",\n rs: \"rust\",\n swift: \"swift\",\n kt: \"kotlin\",\n lua: \"lua\",\n vim: \"vim\",\n scala: \"scala\",\n sh: \"bash\",\n bash: \"bash\",\n zsh: \"bash\",\n json: \"json\",\n xml: \"xml\",\n html: \"html\",\n css: \"css\",\n scss: \"scss\",\n sass: \"sass\",\n less: \"less\",\n sql: \"sql\",\n yaml: \"yaml\",\n yml: \"yaml\",\n toml: \"toml\",\n ini: \"ini\",\n env: \"bash\",\n conf: \"nginx\",\n diff: \"diff\",\n patch: \"diff\",\n log: \"log\",\n md: \"markdown\",\n txt: \"text\"\n }[t] || \"text\";\n}\nfunction ut(e) {\n var n;\n const t = ((n = e.split(\".\").pop()) == null ? void 0 : n.toLowerCase().split(\"?\")[0]) || \"\";\n return {\n mp4: \"video/mp4\",\n webm: \"video/webm\",\n ogg: \"video/ogg\",\n ogv: \"video/ogg\",\n mov: \"video/quicktime\",\n avi: \"video/x-msvideo\",\n mkv: \"video/x-matroska\",\n m4v: \"video/mp4\",\n \"3gp\": \"video/3gpp\",\n flv: \"video/x-flv\"\n }[t] || \"video/mp4\";\n}\nfunction pt(e) {\n return e < 1024 ? `${e} B` : e < 1024 * 1024 ? `${(e / 1024).toFixed(1)} KB` : `${(e / (1024 * 1024)).toFixed(1)} MB`;\n}\nfunction ft(e) {\n if (!isFinite(e) || isNaN(e) || e < 0) return \"0:00\";\n const t = Math.floor(e / 60), o = Math.floor(e % 60);\n return `${t}:${o.toString().padStart(2, \"0\")}`;\n}\nfunction mt(e) {\n var o;\n return (((o = e.split(\".\").pop()) == null ? void 0 : o.toLowerCase()) || \"\") === \"tsv\" ? \"\t\" : \",\";\n}\nfunction gt(e, t = {}) {\n const o = t.delimiter ?? \",\", n = t.firstRowAsHeader ?? !0, r = [];\n let a = [], i = \"\", c = !1, s = 0;\n const l = e.length;\n for (; s < l; ) {\n const p = e[s];\n if (c) {\n if (p === '\"') {\n if (e[s + 1] === '\"') {\n i += '\"', s += 2;\n continue;\n }\n c = !1, s += 1;\n continue;\n }\n i += p, s += 1;\n continue;\n }\n if (p === '\"') {\n c = !0, s += 1;\n continue;\n }\n if (p === o) {\n a.push(i), i = \"\", s += 1;\n continue;\n }\n if (p === \"\\r\") {\n e[s + 1] === `\n` && (s += 1), a.push(i), r.push(a), a = [], i = \"\", s += 1;\n continue;\n }\n if (p === `\n`) {\n a.push(i), r.push(a), a = [], i = \"\", s += 1;\n continue;\n }\n i += p, s += 1;\n }\n for ((i.length > 0 || a.length > 0) && (a.push(i), r.push(a)); r.length > 0; ) {\n const p = r[r.length - 1];\n if (p.length === 1 && p[0] === \"\")\n r.pop();\n else\n break;\n }\n let d = [], f = r;\n n && r.length > 0 && (d = r[0], f = r.slice(1));\n const u = Math.max(\n d.length,\n ...f.map((p) => p.length),\n 0\n );\n for (const p of f)\n for (; p.length < u; ) p.push(\"\");\n return {\n header: d,\n rows: f,\n columnCount: u,\n delimiter: o\n };\n}\nfunction $(e) {\n const t = e instanceof Uint8Array ? e : new Uint8Array(e);\n if (t.length >= 3 && t[0] === 239 && t[1] === 187 && t[2] === 191)\n return new TextDecoder(\"utf-8\").decode(t);\n if (t.length >= 2 && t[0] === 255 && t[1] === 254)\n return new TextDecoder(\"utf-16le\").decode(t);\n if (t.length >= 2 && t[0] === 254 && t[1] === 255)\n return new TextDecoder(\"utf-16be\").decode(t);\n try {\n return new TextDecoder(\"utf-8\", { fatal: !0 }).decode(t);\n } catch {\n }\n try {\n return new TextDecoder(\"gbk\").decode(t);\n } catch {\n }\n return new TextDecoder(\"utf-8\", { fatal: !1 }).decode(t);\n}\nconst U = $;\nasync function ht(e, t) {\n const o = await fetch(e, t);\n if (!o.ok) throw new Error(`请求失败: ${o.status}`);\n const n = await o.arrayBuffer();\n return $(n);\n}\nfunction z(e) {\n const t = e.trim().replace(\",\", \".\"), o = t.split(\":\").map((n) => n.trim());\n if (o.length === 3) {\n const [n, r, a] = o;\n return Number(n) * 3600 + Number(r) * 60 + Number(a);\n }\n if (o.length === 2) {\n const [n, r] = o;\n return Number(n) * 60 + Number(r);\n }\n return Number(t) || 0;\n}\nfunction xt(e) {\n if (!isFinite(e) || e < 0) return \"00:00:00.000\";\n const t = Math.floor(e * 1e3), o = t % 1e3, n = Math.floor(t / 1e3) % 60, r = Math.floor(t / 6e4) % 60, a = Math.floor(t / 36e5), i = (c, s = 2) => c.toString().padStart(s, \"0\");\n return `${i(a)}:${i(r)}:${i(n)}.${i(o, 3)}`;\n}\nconst E = /(\\d{1,2}:)?\\d{1,2}:\\d{1,2}[.,]\\d{1,3}\\s*-->\\s*(\\d{1,2}:)?\\d{1,2}:\\d{1,2}[.,]\\d{1,3}/, B = /^\\s*\\[\\d{1,2}:\\d{1,2}(?:[.:]\\d{1,3})?\\]/;\nfunction W(e) {\n const t = e.replace(/^\\uFEFF/, \"\").trimStart();\n return /^WEBVTT/.test(t) ? \"vtt\" : /^<\\?xml/i.test(t) || /<tt\\b[^>]*>/i.test(t) ? \"ttml\" : /^\\[Script Info\\]/im.test(t) || /^Dialogue:/m.test(t) ? /ScriptType:\\s*v4\\.00\\s*$/im.test(t) ? \"ssa\" : \"ass\" : B.test(t) || /^\\[(ti|ar|al|au|by|length|offset|re|ve):/im.test(t) ? /<\\d{1,2}:\\d{1,2}(?:[.:]\\d{1,3})?>/.test(t) ? \"elrc\" : \"lrc\" : \"srt\";\n}\nfunction N(e, t) {\n const n = e.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), r = [];\n let a, i = 0;\n if (t === \"vtt\") {\n const c = [];\n for (; i < n.length && n[i].trim() !== \"\"; )\n c.push(n[i]), i++;\n for (a = c.join(`\n`); i < n.length && n[i].trim() === \"\"; ) i++;\n }\n for (; i < n.length; ) {\n for (; i < n.length && n[i].trim() === \"\"; ) i++;\n if (i >= n.length) break;\n let c, s = null;\n if (E.test(n[i]))\n s = n[i], i++;\n else if (c = n[i].trim() || void 0, i++, i < n.length && E.test(n[i]))\n s = n[i], i++;\n else\n continue;\n if (!s) continue;\n const l = s.match(/([\\d:.,]+)\\s*-->\\s*([\\d:.,]+)/);\n if (!l) continue;\n const d = z(l[1]), f = z(l[2]), u = [];\n for (; i < n.length && n[i].trim() !== \"\"; )\n u.push(n[i]), i++;\n r.push({ id: c, start: d, end: f, text: u.join(`\n`) });\n }\n return { format: t, cues: r, header: a };\n}\nfunction M(e, t, o) {\n const n = Number(e), r = Number(t);\n let a = 0;\n if (o) {\n const i = (o + \"000\").slice(0, 3);\n a = Number(i);\n }\n return n * 60 + r + a / 1e3;\n}\nfunction R(e, t) {\n const o = /^\\[(ti|ar|al|au|by|length|offset|re|ve):(.*)\\]$/i.exec(e.trim());\n if (!o) return !1;\n const n = o[1].toLowerCase(), r = o[2].trim();\n if (t.metadata[n] = r, n === \"offset\") {\n const a = Number(r);\n isNaN(a) || (t.offsetMs = a);\n }\n return !0;\n}\nfunction Z(e) {\n const o = e.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), n = { metadata: {}, offsetMs: 0 }, r = /\\[(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?\\]/g, a = [];\n for (const s of o) {\n const l = s.trim();\n if (!l || R(l, n)) continue;\n const d = [];\n let f = 0;\n r.lastIndex = 0;\n let u;\n for (; (u = r.exec(l)) !== null && u.index === f; )\n d.push(M(u[1], u[2], u[3])), f = u.index + u[0].length;\n if (d.length === 0) continue;\n const p = l.slice(f).trim();\n for (const m of d)\n a.push({ start: m, text: p });\n }\n a.sort((s, l) => s.start - l.start);\n const i = n.offsetMs / 1e3;\n return { format: \"lrc\", cues: a.map((s, l) => {\n const d = Math.max(0, s.start - i), f = a[l + 1], u = f ? Math.max(d, f.start - i) : d + 5;\n return { start: d, end: u, text: s.text };\n }), metadata: n.metadata };\n}\nfunction O(e) {\n const o = e.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), n = { metadata: {}, offsetMs: 0 }, r = /\\[(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?\\]/g, a = /<(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?>/g, i = [];\n for (const l of o) {\n const d = l.trim();\n if (!d || R(d, n)) continue;\n const f = [];\n let u = 0;\n r.lastIndex = 0;\n let p;\n for (; (p = r.exec(d)) !== null && p.index === u; )\n f.push(M(p[1], p[2], p[3])), u = p.index + p[0].length;\n if (f.length === 0) continue;\n const m = d.slice(u);\n for (const g of f)\n i.push({ start: g, raw: m });\n }\n i.sort((l, d) => l.start - d.start);\n const c = n.offsetMs / 1e3;\n return { format: \"elrc\", cues: i.map((l, d) => {\n const f = [];\n let u = \"\", p = 0, m = null;\n a.lastIndex = 0;\n let g;\n for (; (g = a.exec(l.raw)) !== null; ) {\n const F = l.raw.slice(p, g.index);\n m !== null && F && f.push({ start: Math.max(0, m - c), text: F }), u += F, m = M(g[1], g[2], g[3]), p = g.index + g[0].length;\n }\n const b = l.raw.slice(p);\n m !== null && b && f.push({ start: Math.max(0, m - c), text: b }), u += b;\n const h = Math.max(0, l.start - c), x = i[d + 1], w = x ? Math.max(h, x.start - c) : h + 5;\n return {\n start: h,\n end: w,\n text: u.trim(),\n words: f.length ? f : void 0\n };\n }), metadata: n.metadata };\n}\nfunction D(e) {\n const t = e.trim().split(\":\");\n return t.length !== 3 ? 0 : Number(t[0]) * 3600 + Number(t[1]) * 60 + Number(t[2].replace(\",\", \".\"));\n}\nfunction L(e, t) {\n const n = e.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`);\n let r = \"\", a = [];\n const i = [], c = [];\n for (const s of n) {\n const l = s.replace(/\\s+$/, \"\"), d = l.trim(), f = /^\\[([^\\]]+)\\]\\s*$/.exec(d);\n if (f) {\n r = f[1].toLowerCase(), c.push(l);\n continue;\n }\n if (r !== \"events\") {\n c.push(l);\n continue;\n }\n const u = /^Format:\\s*(.+)$/i.exec(d);\n if (u) {\n a = u[1].split(\",\").map((v) => v.trim());\n continue;\n }\n const p = /^(Dialogue|Comment):\\s*(.+)$/i.exec(d);\n if (!p || p[1].toLowerCase() === \"comment\" || a.length === 0) continue;\n const m = a.length, g = p[2].split(\",\"), b = g.slice(0, m - 1), h = g.slice(m - 1).join(\",\"), x = {};\n a.forEach((v, y) => {\n x[v] = y === m - 1 ? h : b[y] ?? \"\";\n });\n const w = D(x.Start || \"\"), F = D(x.End || \"\"), _ = (x.Text || \"\").replace(/\\\\N/g, `\n`).replace(/\\\\n/g, `\n`).replace(/\\\\h/g, \" \").replace(/\\{[^}]*\\}/g, \"\");\n i.push({ start: w, end: F, text: _, style: x.Style });\n }\n return i.sort((s, l) => s.start - l.start), {\n format: t,\n cues: i,\n header: c.join(`\n`).trim() || void 0\n };\n}\nfunction S(e) {\n const t = e.trim();\n if (!t) return 0;\n const o = /^(\\d+(?:\\.\\d+)?)(h|m|s|ms|f|t)$/i.exec(t);\n if (o) {\n const r = Number(o[1]), a = o[2].toLowerCase();\n return a === \"h\" ? r * 3600 : a === \"m\" ? r * 60 : a === \"ms\" ? r / 1e3 : r;\n }\n const n = t.split(\":\");\n return n.length === 3 ? Number(n[0]) * 3600 + Number(n[1]) * 60 + Number(n[2]) : n.length === 2 ? Number(n[0]) * 60 + Number(n[1]) : Number(t) || 0;\n}\nfunction V(e) {\n if (typeof DOMParser > \"u\")\n throw new Error(\"TTML parsing requires a DOMParser environment\");\n const t = new DOMParser().parseFromString(e, \"application/xml\");\n if (t.getElementsByTagName(\"parsererror\").length > 0)\n throw new Error(\"TTML XML parse error\");\n const n = t.getElementsByTagName(\"p\"), r = [];\n for (let a = 0; a < n.length; a++) {\n const i = n[a], c = i.getAttribute(\"begin\") || \"\", s = i.getAttribute(\"end\") || \"\", l = i.getAttribute(\"dur\") || \"\", d = S(c);\n let f;\n s ? f = S(s) : l ? f = d + S(l) : f = d + 5;\n let u = \"\";\n i.childNodes.forEach((m) => {\n if (m.nodeType === 3)\n u += m.nodeValue || \"\";\n else if (m.nodeType === 1) {\n const g = m;\n g.tagName.toLowerCase() === \"br\" ? u += `\n` : u += g.textContent || \"\";\n }\n });\n const p = u.replace(/[ \\t]+/g, \" \").replace(/\\n /g, `\n`).trim();\n (p || d || f) && r.push({ start: d, end: f, text: p });\n }\n return r.sort((a, i) => a.start - i.start), { format: \"ttml\", cues: r };\n}\nfunction bt(e, t) {\n switch (t ?? W(e)) {\n case \"lrc\":\n return Z(e);\n case \"elrc\":\n return O(e);\n case \"ass\":\n return L(e, \"ass\");\n case \"ssa\":\n return L(e, \"ssa\");\n case \"ttml\":\n return V(e);\n case \"vtt\":\n return N(e, \"vtt\");\n case \"srt\":\n default:\n return N(e, \"srt\");\n }\n}\nasync function Ft(e) {\n return A.loadAsync(e);\n}\nfunction vt(e) {\n const t = [];\n return e.forEach((o, n) => {\n var f;\n const r = n.dir, a = r && !o.endsWith(\"/\") ? o + \"/\" : o, i = r ? a.replace(/\\/$/, \"\") : a, c = i.lastIndexOf(\"/\"), s = c >= 0 ? i.slice(c + 1) : i, l = c >= 0 ? i.slice(0, c) : \"\", d = r ? 0 : ((f = n._data) == null ? void 0 : f.uncompressedSize) ?? 0;\n t.push({\n path: a,\n name: s,\n dir: l,\n isDir: r,\n size: d,\n date: n.date\n });\n }), t;\n}\nfunction wt(e) {\n const t = { name: \"\", path: \"\", isDir: !0, children: [], size: 0 }, o = /* @__PURE__ */ new Map();\n o.set(\"\", t);\n const n = (a) => {\n if (o.has(a)) return o.get(a);\n const i = a.split(\"/\").filter(Boolean);\n let c = t, s = \"\";\n for (const l of i) {\n s = s ? `${s}/${l}` : l;\n let d = o.get(s);\n d || (d = { name: l, path: s + \"/\", isDir: !0, children: [], size: 0 }, c.children.push(d), o.set(s, d)), c = d;\n }\n return c;\n };\n for (const a of e) {\n if (a.isDir) {\n n(a.path.replace(/\\/$/, \"\"));\n continue;\n }\n n(a.dir).children.push({\n name: a.name,\n path: a.path,\n isDir: !1,\n size: a.size\n });\n }\n const r = (a) => {\n if (a.children) {\n a.children.sort((i, c) => i.isDir !== c.isDir ? i.isDir ? -1 : 1 : i.name.localeCompare(c.name));\n for (const i of a.children) r(i);\n }\n };\n return r(t), t;\n}\nasync function yt(e, t) {\n const o = e.file(t);\n if (!o) throw new Error(`ZIP entry not found: ${t}`);\n const n = await o.async(\"arraybuffer\");\n return U(n);\n}\nasync function _t(e, t, o) {\n const n = e.file(t);\n if (!n) throw new Error(`ZIP entry not found: ${t}`);\n const r = await n.async(\"arraybuffer\");\n return new Blob([r], o ? { type: o } : void 0);\n}\nfunction q(e) {\n return e ? e.startsWith(\"#\") ? e : e.length === 8 ? \"#\" + e.substring(2) : e.length === 6 ? \"#\" + e : \"#000000\" : \"#000000\";\n}\nconst G = [\n \"FFFFFF\",\n \"000000\",\n \"E7E6E6\",\n \"44546A\",\n \"4472C4\",\n \"ED7D31\",\n \"A5A5A5\",\n \"FFC000\",\n \"5B9BD5\",\n \"70AD47\"\n], H = [\n \"000000\",\n \"FFFFFF\",\n \"FF0000\",\n \"00FF00\",\n \"0000FF\",\n \"FFFF00\",\n \"FF00FF\",\n \"00FFFF\",\n \"000000\",\n \"FFFFFF\",\n \"FF0000\",\n \"00FF00\",\n \"0000FF\",\n \"FFFF00\",\n \"FF00FF\",\n \"00FFFF\",\n \"800000\",\n \"008000\",\n \"000080\",\n \"808000\",\n \"800080\",\n \"008080\",\n \"C0C0C0\",\n \"808080\",\n \"9999FF\",\n \"993366\",\n \"FFFFCC\",\n \"CCFFFF\",\n \"660066\",\n \"FF8080\",\n \"0066CC\",\n \"CCCCFF\",\n \"000080\",\n \"FF00FF\",\n \"FFFF00\",\n \"00FFFF\",\n \"800080\",\n \"800000\",\n \"008080\",\n \"0000FF\",\n \"00CCFF\",\n \"CCFFFF\",\n \"CCFFCC\",\n \"FFFF99\",\n \"99CCFF\",\n \"FF99CC\",\n \"CC99FF\",\n \"FFCC99\",\n \"3366FF\",\n \"33CCCC\",\n \"99CC00\",\n \"FFCC00\",\n \"FF9900\",\n \"FF6600\",\n \"666699\",\n \"969696\",\n \"003366\",\n \"339966\",\n \"003300\",\n \"333300\",\n \"993300\",\n \"993366\",\n \"333399\",\n \"333333\"\n];\nfunction J(e, t) {\n const o = parseInt(e.substring(0, 2), 16), n = parseInt(e.substring(2, 4), 16), r = parseInt(e.substring(4, 6), 16), a = (l) => t < 0 ? Math.round(l * (1 + t)) : Math.round(l + (255 - l) * t), i = Math.min(255, Math.max(0, a(o))), c = Math.min(255, Math.max(0, a(n))), s = Math.min(255, Math.max(0, a(r)));\n return i.toString(16).padStart(2, \"0\") + c.toString(16).padStart(2, \"0\") + s.toString(16).padStart(2, \"0\");\n}\nfunction X(e) {\n if (e && e.type === \"pattern\" && e.pattern === \"solid\") {\n const t = e.fgColor;\n if (t)\n return T(t);\n }\n}\nfunction T(e) {\n if (e) {\n if (\"argb\" in e && typeof e.argb == \"string\" && e.argb)\n return q(e.argb);\n if (\"theme\" in e && typeof e.theme == \"number\") {\n const t = G[e.theme] || \"000000\", o = \"tint\" in e && typeof e.tint == \"number\" ? e.tint : 0;\n return \"#\" + (o !== 0 ? J(t, o) : t);\n }\n if (\"indexed\" in e && typeof e.indexed == \"number\") {\n const t = H[e.indexed];\n if (t) return \"#\" + t;\n }\n }\n}\nfunction K(e) {\n if (!e || !e.style) return;\n const t = T(e.color) || \"#000000\";\n return [e.style, t];\n}\nfunction Q(e) {\n const t = {};\n let o = !1;\n if (e.font) {\n const r = e.font;\n if ((r.name || r.size || r.bold || r.italic) && (o = !0, t.font = {}, r.name && (t.font.name = r.name), r.size && (t.font.size = r.size), r.bold && (t.font.bold = !0), r.italic && (t.font.italic = !0)), r.color) {\n const a = T(r.color);\n a && (o = !0, t.color = a);\n }\n r.underline && (o = !0, t.underline = !0), r.strike && (o = !0, t.strike = !0);\n }\n const n = X(e.fill);\n if (n && (o = !0, t.bgcolor = n), e.alignment) {\n const r = e.alignment;\n r.horizontal && (o = !0, t.align = r.horizontal), r.vertical && (o = !0, t.valign = r.vertical), r.wrapText && (o = !0, t.textwrap = !0);\n }\n if (e.border) {\n const r = {};\n let a = !1;\n const i = [\"top\", \"bottom\", \"left\", \"right\"];\n for (const c of i) {\n const s = K(e.border[c]);\n s && (r[c] = s, a = !0);\n }\n a && (o = !0, t.border = r);\n }\n return o ? t : null;\n}\nfunction Y(e) {\n return JSON.stringify(e);\n}\nfunction tt(e, t, o) {\n const n = Q(e);\n if (!n) return -1;\n const r = Y(n), a = o.get(r);\n if (a !== void 0) return a;\n const i = t.length;\n return t.push(n), o.set(r, i), i;\n}\nfunction et(e) {\n const t = e.value;\n if (t == null) return \"\";\n if (typeof t == \"string\") return t;\n if (typeof t == \"number\") return String(t);\n if (typeof t == \"boolean\") return t ? \"TRUE\" : \"FALSE\";\n if (t instanceof Date)\n return t.toLocaleDateString();\n if (typeof t == \"object\" && \"formula\" in t) {\n const o = t.result;\n return o != null ? String(o) : \"\";\n }\n return typeof t == \"object\" && \"richText\" in t ? t.richText.map((n) => n.text).join(\"\") : typeof t == \"object\" && \"hyperlink\" in t ? t.text || \"\" : typeof t == \"object\" && \"error\" in t ? String(t.error) : String(t);\n}\nfunction ot(e) {\n const t = e.split(\":\"), o = P(t[0]), n = t[1] ? P(t[1]) : o;\n return {\n top: o.row,\n left: o.col,\n bottom: n.row,\n right: n.col\n };\n}\nfunction P(e) {\n const t = e.match(/^([A-Z]+)(\\d+)$/);\n if (!t) return { row: 1, col: 1 };\n const o = t[1], n = parseInt(t[2], 10);\n let r = 0;\n for (let a = 0; a < o.length; a++)\n r = r * 26 + (o.charCodeAt(a) - 64);\n return { row: n, col: r };\n}\nfunction Ct(e) {\n const t = [];\n return e.eachSheet((o) => {\n const n = [], r = /* @__PURE__ */ new Map(), a = [], i = {}, c = {}, s = o.columnCount;\n for (let u = 1; u <= s; u++) {\n const p = o.getColumn(u);\n p.width && (c[String(u - 1)] = { width: Math.round(p.width * 7.5) });\n }\n c.len = Math.max(s, 26);\n const l = /* @__PURE__ */ new Map(), d = o.model, f = (d == null ? void 0 : d.merges) || [];\n for (const u of f) {\n a.push(u);\n const { top: p, left: m, bottom: g, right: b } = ot(u), h = g - p, x = b - m;\n l.set(`${p - 1},${m - 1}`, [h, x]);\n }\n o.eachRow({ includeEmpty: !0 }, (u, p) => {\n const m = p - 1, g = {};\n u.eachCell({ includeEmpty: !1 }, (h, x) => {\n const w = x - 1;\n if (h.isMerged && h.master !== h) return;\n const F = et(h), _ = tt(h, n, r), v = { text: F };\n _ !== -1 && (v.style = _);\n const y = `${m},${w}`;\n l.has(y) && (v.merge = l.get(y)), g[String(w)] = v;\n });\n const b = { cells: g };\n u.height && (b.height = Math.round(u.height * 1.333)), i[String(m)] = b;\n }), t.push({\n name: o.name,\n styles: n,\n merges: a,\n rows: i,\n cols: c\n });\n }), t;\n}\nfunction kt(e, t, o = \"Sheet1\") {\n const n = e.length > 0, a = n ? [{ font: { bold: !0 } }] : [], i = {};\n if (n) {\n const s = {};\n e.forEach((l, d) => {\n s[String(d)] = { text: l, style: 0 };\n }), i[0] = { cells: s };\n }\n const c = n ? 1 : 0;\n return t.forEach((s, l) => {\n const d = {};\n s.forEach((f, u) => {\n f !== void 0 && f !== \"\" && (d[String(u)] = { text: f });\n }), i[String(l + c)] = { cells: d };\n }), [{ name: o, styles: a, rows: i }];\n}\nfunction St(e, t) {\n var i;\n if (typeof window > \"u\") return;\n const o = (e == null ? void 0 : e.version) || ((i = e == null ? void 0 : e.GlobalWorkerOptions) == null ? void 0 : i.version) || \"\", {\n workerSrc: n = `https://unpkg.com/pdfjs-dist@${o}/build/pdf.worker.min.mjs`,\n cMapUrl: r = `https://unpkg.com/pdfjs-dist@${o}/cmaps/`,\n cMapPacked: a = !0\n } = t || {};\n e.GlobalWorkerOptions && (e.GlobalWorkerOptions.workerSrc = n, e.GlobalWorkerOptions.cMapUrl = r, e.GlobalWorkerOptions.cMapPacked = a);\n}\nconst nt = {\n // ─────── common ───────\n \"common.download\": \"下载\",\n \"common.close\": \"关闭\",\n \"common.loading\": \"加载中\",\n \"common.unknown_error\": \"未知错误\",\n \"common.unsupported_preview\": \"不支持预览此文件类型 ({type})\",\n // ─────── toolbar ───────\n \"toolbar.zoom_in\": \"放大\",\n \"toolbar.zoom_out\": \"缩小\",\n \"toolbar.rotate_left\": \"向左旋转\",\n \"toolbar.rotate_right\": \"向右旋转\",\n \"toolbar.reset\": \"复原\",\n \"toolbar.fit_to_window\": \"适应窗口\",\n \"toolbar.original_size\": \"原始尺寸\",\n \"toolbar.toc\": \"目录\",\n \"toolbar.prev_page\": \"上一页\",\n \"toolbar.next_page\": \"下一页\",\n \"toolbar.full_width\": \"全屏宽度\",\n \"toolbar.normal_width\": \"正常宽度\",\n \"toolbar.wrap_on\": \"自动换行\",\n \"toolbar.wrap_off\": \"不换行\",\n \"toolbar.source\": \"源码\",\n \"toolbar.preview\": \"预览\",\n // ─────── image ───────\n \"image.load_failed\": \"图片加载失败\",\n // ─────── pdf ───────\n \"pdf.load_failed\": \"PDF 文件加载失败\",\n // ─────── docx ───────\n \"docx.parse_failed\": \"Word 文档解析失败\",\n // ─────── xlsx ───────\n \"xlsx.loading\": \"加载 Excel 中...\",\n \"xlsx.load_failed\": \"Excel 加载失败\",\n \"xlsx.parse_failed\": \"Excel 文件解析失败\",\n \"xlsx.not_found\": \"Excel 文件不存在\",\n // ─────── pptx ───────\n \"pptx.loading\": \"加载 PPT 中...\",\n \"pptx.load_failed\": \"PPT 加载失败\",\n \"pptx.parse_failed\": \"PPT 文件解析失败\",\n \"pptx.not_found\": \"PPT 文件不存在\",\n \"pptx.invalid_format\": \"PPT 文件格式错误或已损坏\",\n \"pptx.no_pages\": \"PPT 文件无有效页面\",\n \"pptx.timeout\": \"加载超时,请检查网络或稍后重试\",\n // ─────── msg ───────\n \"msg.parse_failed\": \"Outlook 邮件解析失败\",\n \"msg.parse_failed_short\": \"邮件解析失败\",\n \"msg.empty_body\": \"(无邮件正文)\",\n // ─────── epub ───────\n \"epub.load_failed\": \"EPUB 文件加载失败\",\n // ─────── mobi ───────\n \"mobi.load_failed\": \"电子书加载失败,文件可能已损坏或带有 DRM 保护\",\n // ─────── video ───────\n \"video.loading\": \"加载视频中...\",\n \"video.load_failed\": \"视频加载失败\",\n \"video.load_failed_with_error\": \"视频加载失败: {error}\",\n // ─────── audio (aria-label) ───────\n \"audio.aria.play\": \"播放\",\n \"audio.aria.pause\": \"暂停\",\n \"audio.aria.forward_10\": \"前进 10 秒\",\n \"audio.aria.backward_10\": \"后退 10 秒\",\n \"audio.aria.mute\": \"静音\",\n \"audio.aria.unmute\": \"取消静音\",\n \"audio.aria.loop_on\": \"开启循环\",\n \"audio.aria.loop_off\": \"关闭循环\",\n \"audio.aria.progress\": \"播放进度\",\n \"audio.aria.volume\": \"音量\",\n // ─────── markdown ───────\n \"markdown.load_failed\": \"Markdown 文件加载失败\",\n \"markdown.copy_code\": \"复制代码\",\n \"markdown.copied\": \"已复制\",\n // ─────── json ───────\n \"json.load_failed\": \"JSON 文件加载失败\",\n \"json.items\": \"items\",\n \"json.keys\": \"keys\",\n // ─────── csv ───────\n \"csv.loading\": \"加载 CSV 中...\",\n \"csv.load_failed\": \"CSV 文件加载失败\",\n \"csv.parse_failed\": \"CSV 解析失败\",\n // ─────── xml ───────\n \"xml.load_failed\": \"XML 文件加载失败\",\n // ─────── subtitle / lyric ───────\n \"subtitle.load_failed\": \"字幕文件加载失败\",\n \"subtitle.parse_failed\": \"字幕解析失败\",\n \"subtitle.lines\": \"lines\",\n \"subtitle.cues\": \"cues\",\n \"subtitle.meta.title\": \"标题\",\n \"subtitle.meta.artist\": \"艺术家\",\n \"subtitle.meta.album\": \"专辑\",\n \"subtitle.meta.author\": \"作者\",\n \"subtitle.meta.by\": \"制作\",\n \"subtitle.meta.length\": \"时长\",\n \"subtitle.meta.offset\": \"偏移\",\n \"subtitle.meta.editor\": \"编辑器\",\n \"subtitle.meta.version\": \"版本\",\n // ─────── zip ───────\n \"zip.load_failed\": \"ZIP 文件加载失败\",\n \"zip.parse_failed\": \"ZIP 解析失败\",\n // ─────── text ───────\n \"text.load_failed\": \"文本文件加载失败\"\n}, rt = {\n // ─────── common ───────\n \"common.download\": \"Download\",\n \"common.close\": \"Close\",\n \"common.loading\": \"Loading\",\n \"common.unknown_error\": \"Unknown error\",\n \"common.unsupported_preview\": \"Preview not supported for this file type ({type})\",\n // ─────── toolbar ───────\n \"toolbar.zoom_in\": \"Zoom in\",\n \"toolbar.zoom_out\": \"Zoom out\",\n \"toolbar.rotate_left\": \"Rotate left\",\n \"toolbar.rotate_right\": \"Rotate right\",\n \"toolbar.reset\": \"Reset\",\n \"toolbar.fit_to_window\": \"Fit to window\",\n \"toolbar.original_size\": \"Original size\",\n \"toolbar.toc\": \"Table of contents\",\n \"toolbar.prev_page\": \"Previous page\",\n \"toolbar.next_page\": \"Next page\",\n \"toolbar.full_width\": \"Full width\",\n \"toolbar.normal_width\": \"Normal width\",\n \"toolbar.wrap_on\": \"Word wrap\",\n \"toolbar.wrap_off\": \"No wrap\",\n \"toolbar.source\": \"Source\",\n \"toolbar.preview\": \"Preview\",\n // ─────── image ───────\n \"image.load_failed\": \"Failed to load image\",\n // ─────── pdf ───────\n \"pdf.load_failed\": \"Failed to load PDF\",\n // ─────── docx ───────\n \"docx.parse_failed\": \"Failed to parse Word document\",\n // ─────── xlsx ───────\n \"xlsx.loading\": \"Loading Excel...\",\n \"xlsx.load_failed\": \"Failed to load Excel\",\n \"xlsx.parse_failed\": \"Failed to parse Excel file\",\n \"xlsx.not_found\": \"Excel file not found\",\n // ─────── pptx ───────\n \"pptx.loading\": \"Loading PPT...\",\n \"pptx.load_failed\": \"Failed to load PPT\",\n \"pptx.parse_failed\": \"Failed to parse PPT file\",\n \"pptx.not_found\": \"PPT file not found\",\n \"pptx.invalid_format\": \"PPT file format is invalid or corrupted\",\n \"pptx.no_pages\": \"PPT file has no valid pages\",\n \"pptx.timeout\": \"Loading timed out, please check your network and retry\",\n // ─────── msg ───────\n \"msg.parse_failed\": \"Failed to parse Outlook message\",\n \"msg.parse_failed_short\": \"Failed to parse message\",\n \"msg.empty_body\": \"(No message body)\",\n // ─────── epub ───────\n \"epub.load_failed\": \"Failed to load EPUB\",\n // ─────── mobi ───────\n \"mobi.load_failed\": \"Failed to load ebook — file may be corrupted or DRM-protected\",\n // ─────── video ───────\n \"video.loading\": \"Loading video...\",\n \"video.load_failed\": \"Failed to load video\",\n \"video.load_failed_with_error\": \"Failed to load video: {error}\",\n // ─────── audio (aria-label) ───────\n \"audio.aria.play\": \"Play\",\n \"audio.aria.pause\": \"Pause\",\n \"audio.aria.forward_10\": \"Forward 10 seconds\",\n \"audio.aria.backward_10\": \"Back 10 seconds\",\n \"audio.aria.mute\": \"Mute\",\n \"audio.aria.unmute\": \"Unmute\",\n \"audio.aria.loop_on\": \"Enable loop\",\n \"audio.aria.loop_off\": \"Disable loop\",\n \"audio.aria.progress\": \"Playback progress\",\n \"audio.aria.volume\": \"Volume\",\n // ─────── markdown ───────\n \"markdown.load_failed\": \"Failed to load Markdown\",\n \"markdown.copy_code\": \"Copy code\",\n \"markdown.copied\": \"Copied\",\n // ─────── json ───────\n \"json.load_failed\": \"Failed to load JSON\",\n \"json.items\": \"items\",\n \"json.keys\": \"keys\",\n // ─────── csv ───────\n \"csv.loading\": \"Loading CSV...\",\n \"csv.load_failed\": \"Failed to load CSV\",\n \"csv.parse_failed\": \"Failed to parse CSV\",\n // ─────── xml ───────\n \"xml.load_failed\": \"Failed to load XML\",\n // ─────── subtitle / lyric ───────\n \"subtitle.load_failed\": \"Failed to load subtitle\",\n \"subtitle.parse_failed\": \"Failed to parse subtitle\",\n \"subtitle.lines\": \"lines\",\n \"subtitle.cues\": \"cues\",\n \"subtitle.meta.title\": \"Title\",\n \"subtitle.meta.artist\": \"Artist\",\n \"subtitle.meta.album\": \"Album\",\n \"subtitle.meta.author\": \"Author\",\n \"subtitle.meta.by\": \"By\",\n \"subtitle.meta.length\": \"Length\",\n \"subtitle.meta.offset\": \"Offset\",\n \"subtitle.meta.editor\": \"Editor\",\n \"subtitle.meta.version\": \"Version\",\n // ─────── zip ───────\n \"zip.load_failed\": \"Failed to load ZIP\",\n \"zip.parse_failed\": \"Failed to parse ZIP\",\n // ─────── text ───────\n \"text.load_failed\": \"Failed to load text file\"\n}, C = {\n \"zh-CN\": nt,\n \"en-US\": rt\n}, it = /\\{(\\w+)\\}/g;\nfunction at(e, t) {\n return t ? e.replace(it, (o, n) => {\n const r = t[n];\n return r === void 0 ? `{${n}}` : String(r);\n }) : e;\n}\nfunction Mt(e) {\n var i;\n const t = e.fallbackLocale ?? \"zh-CN\", o = C[e.locale] ?? C[t] ?? C[\"zh-CN\"], n = (i = e.messages) == null ? void 0 : i[e.locale], r = n ? { ...o, ...n } : o, a = C[\"zh-CN\"];\n return (c, s) => {\n const l = r[c] ?? a[c] ?? c;\n return at(l, s);\n };\n}\nexport {\n wt as buildZipTree,\n C as builtInMessages,\n St as configurePdfWorker,\n kt as convertCsvToSpreadsheetData,\n Ct as convertWorkbookToSpreadsheetData,\n Mt as createTranslator,\n $ as decodeText,\n U as decodeUtf8,\n ht as fetchTextUtf8,\n pt as formatFileSize,\n xt as formatSubtitleTime,\n ft as formatTime,\n j as getFileNameFromUrl,\n ct as getFileType,\n dt as getLanguageFromFileName,\n ut as getVideoMimeType,\n mt as guessCsvDelimiter,\n k as inferMimeType,\n vt as listZipEntries,\n Ft as loadZip,\n I as normalizeFile,\n lt as normalizeFiles,\n gt as parseCsv,\n bt as parseSubtitle,\n _t as readZipEntryBlob,\n yt as readZipEntryText\n};\n//# sourceMappingURL=index.mjs.map\n","import type { InjectionKey, Ref, ComputedRef } from 'vue';\nimport type { Locale, Translator } from '@eternalheart/file-preview-core';\n\nexport interface LocaleInjection {\n locale: Ref<Locale>;\n t: ComputedRef<Translator>;\n}\n\nexport const LOCALE_KEY: InjectionKey<LocaleInjection> = Symbol('file-preview-locale');\n","import { provide, inject, computed, unref, type Ref, type MaybeRef, type ComputedRef } from 'vue';\nimport { createTranslator, type Locale, type Messages, type Translator } from '@eternalheart/file-preview-core';\nimport { LOCALE_KEY, type LocaleInjection } from '../i18n/localeKey';\n\n/**\n * 在主组件中调用,向子树注入 locale context\n */\nexport function provideLocale(\n locale: MaybeRef<Locale | undefined>,\n messages?: MaybeRef<Partial<Record<Locale, Partial<Messages>>> | undefined>,\n): void {\n const localeRef = computed<Locale>(() => unref(locale) ?? 'zh-CN');\n const t = computed<Translator>(() =>\n createTranslator({ locale: localeRef.value, messages: unref(messages) }),\n );\n provide(LOCALE_KEY, { locale: localeRef as Ref<Locale>, t });\n}\n\n// 兜底 translator(模块级单例)\nlet fallbackT: Translator | null = null;\nfunction getFallback(): Translator {\n if (!fallbackT) fallbackT = createTranslator({ locale: 'zh-CN' });\n return fallbackT;\n}\n\n/**\n * 获取翻译函数。在 provider 外使用时自动 fallback 到 zh-CN。\n */\nexport function useTranslator(): { locale: Ref<Locale>; t: ComputedRef<Translator> } {\n const injected = inject<LocaleInjection | null>(LOCALE_KEY, null);\n if (injected) return injected;\n // fallback\n const locale = computed<Locale>(() => 'zh-CN');\n const t = computed<Translator>(() => getFallback());\n return { locale: locale as Ref<Locale>, t };\n}\n","import { provide, inject, computed, unref, type InjectionKey, type MaybeRef, type ComputedRef } from 'vue';\n\nexport type ResolvedTheme = 'dark' | 'light';\n\nconst THEME_KEY: InjectionKey<ComputedRef<ResolvedTheme>> = Symbol('vfp-resolved-theme');\n\n/**\n * 在主组件中调用,向子树注入已解析的主题('dark' | 'light')\n */\nexport function provideResolvedTheme(theme: MaybeRef<ResolvedTheme>): void {\n const themeRef = computed<ResolvedTheme>(() => unref(theme));\n provide(THEME_KEY, themeRef);\n}\n\n/**\n * 获取已解析的主题('dark' | 'light')。\n * Provider 之外默认 'dark'。\n *\n * renderer 需要切第三方库的 theme 选项(如 shiki 的 theme)时使用;\n * 不要用它做 className 分支 —— class 由 CSS 变量通过根容器 [data-theme] 自动切换。\n */\nexport function useResolvedTheme(): ComputedRef<ResolvedTheme> {\n const injected = inject(THEME_KEY, null);\n if (injected) return injected;\n return computed<ResolvedTheme>(() => 'dark');\n}\n","import { ZoomIn, ZoomOut, RotateCw, RotateCcw, Scan, RefreshCw } from 'lucide-vue-next';\nimport { h, type FunctionalComponent } from 'vue';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nconst OriginalSizeIcon: FunctionalComponent = (_props, { attrs }) => {\n return h('svg', {\n xmlns: 'http://www.w3.org/2000/svg', viewBox: '0 0 24 24',\n fill: 'none', stroke: 'currentColor', 'stroke-width': '2',\n 'stroke-linecap': 'round', 'stroke-linejoin': 'round', ...attrs,\n }, [\n h('text', {\n x: '12', y: '17.5', 'text-anchor': 'middle',\n 'font-size': '20', 'font-weight': 'bold',\n fill: 'currentColor', stroke: 'none',\n }, '1:1'),\n ]);\n};\n\nexport interface ImageToolbarContext {\n zoom: number;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onFitToWidth: () => void;\n onOriginalSize: () => void;\n onRotateLeft: () => void;\n onRotateRight: () => void;\n onReset: () => void;\n t: Translator;\n}\n\nexport function getImageToolbarGroups(ctx: ImageToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n { type: 'button', icon: ZoomOut, tooltip: ctx.t('toolbar.zoom_out'), action: ctx.onZoomOut, disabled: ctx.zoom <= 0.01 },\n { type: 'text', content: `${Math.round(ctx.zoom * 100)}%`, minWidth: '3rem' },\n { type: 'button', icon: ZoomIn, tooltip: ctx.t('toolbar.zoom_in'), action: ctx.onZoomIn, disabled: ctx.zoom >= 10 },\n ],\n },\n {\n items: [\n { type: 'button', icon: Scan, tooltip: ctx.t('toolbar.fit_to_window'), action: ctx.onFitToWidth },\n { type: 'button', icon: OriginalSizeIcon, tooltip: ctx.t('toolbar.original_size'), action: ctx.onOriginalSize },\n ],\n },\n {\n items: [\n { type: 'button', icon: RotateCcw, tooltip: ctx.t('toolbar.rotate_left'), action: ctx.onRotateLeft },\n { type: 'button', icon: RotateCw, tooltip: ctx.t('toolbar.rotate_right'), action: ctx.onRotateRight },\n ],\n },\n {\n items: [\n { type: 'button', icon: RefreshCw, tooltip: ctx.t('toolbar.reset'), action: ctx.onReset },\n ],\n },\n ];\n}\n","import { ZoomIn, ZoomOut, RefreshCw } from 'lucide-vue-next';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface PdfToolbarContext {\n zoom: number;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onReset: () => void;\n t: Translator;\n}\n\nexport function getPdfToolbarGroups(ctx: PdfToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n { type: 'button', icon: ZoomOut, tooltip: ctx.t('toolbar.zoom_out'), action: ctx.onZoomOut, disabled: ctx.zoom <= 0.01 },\n { type: 'text', content: `${Math.round(ctx.zoom * 100)}%`, minWidth: '3rem' },\n { type: 'button', icon: ZoomIn, tooltip: ctx.t('toolbar.zoom_in'), action: ctx.onZoomIn, disabled: ctx.zoom >= 10 },\n ],\n },\n {\n items: [\n { type: 'button', icon: RefreshCw, tooltip: ctx.t('toolbar.reset'), action: ctx.onReset },\n ],\n },\n ];\n}\n","import { ChevronLeft, ChevronRight, List, Maximize2, Minimize2 } from 'lucide-vue-next';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface EpubToolbarContext {\n epubRef: { prevPage: () => void; nextPage: () => void; toggleFullWidth: () => void; toggleToc: () => void } | null;\n current: number;\n total: number;\n fullWidth: boolean;\n t: Translator;\n}\n\nexport function getEpubToolbarGroups(ctx: EpubToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n { type: 'button', icon: List, tooltip: ctx.t('toolbar.toc'), action: () => ctx.epubRef?.toggleToc() },\n ],\n },\n {\n items: [\n { type: 'button', icon: ChevronLeft, tooltip: ctx.t('toolbar.prev_page'), action: () => ctx.epubRef?.prevPage() },\n { type: 'text', content: `${ctx.current} / ${ctx.total}`, minWidth: '4rem' },\n { type: 'button', icon: ChevronRight, tooltip: ctx.t('toolbar.next_page'), action: () => ctx.epubRef?.nextPage() },\n ],\n },\n {\n items: [\n {\n type: 'button',\n icon: ctx.fullWidth ? Minimize2 : Maximize2,\n tooltip: ctx.fullWidth ? ctx.t('toolbar.normal_width') : ctx.t('toolbar.full_width'),\n action: () => ctx.epubRef?.toggleFullWidth(),\n },\n ],\n },\n ];\n}\n","import type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\nimport { ChevronLeft, ChevronRight, List, Maximize2, Minimize2 } from 'lucide-vue-next';\n\nexport interface MobiToolbarContext {\n mobiRef: { prevPage: () => void; nextPage: () => void; toggleFullWidth: () => void; toggleToc: () => void } | null;\n current: number;\n total: number;\n fullWidth: boolean;\n t: Translator;\n}\n\nexport function getMobiToolbarGroups(ctx: MobiToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n { type: 'button', icon: List, tooltip: ctx.t('toolbar.toc'), action: () => ctx.mobiRef?.toggleToc() },\n ],\n },\n {\n items: [\n { type: 'button', icon: ChevronLeft, tooltip: ctx.t('toolbar.prev_page'), action: () => ctx.mobiRef?.prevPage() },\n { type: 'text', content: `${ctx.current} / ${ctx.total}`, minWidth: '4rem' },\n { type: 'button', icon: ChevronRight, tooltip: ctx.t('toolbar.next_page'), action: () => ctx.mobiRef?.nextPage() },\n ],\n },\n {\n items: [\n {\n type: 'button',\n icon: ctx.fullWidth ? Minimize2 : Maximize2,\n tooltip: ctx.fullWidth ? ctx.t('toolbar.normal_width') : ctx.t('toolbar.full_width'),\n action: () => ctx.mobiRef?.toggleFullWidth(),\n },\n ],\n },\n ];\n}\n","import type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\nimport { formatFileSize } from '@eternalheart/file-preview-core';\n\nexport interface ZipToolbarStats {\n files: number;\n dirs: number;\n size: number;\n}\n\nexport interface ZipToolbarContext {\n stats: ZipToolbarStats | null;\n t: Translator;\n}\n\nexport function getZipToolbarGroups({ stats }: ZipToolbarContext): ToolbarGroup[] {\n if (!stats) return [];\n return [\n {\n items: [\n {\n type: 'text',\n content: `${stats.files} files · ${stats.dirs} dirs · ${formatFileSize(stats.size)}`,\n minWidth: '10rem',\n },\n ],\n },\n ];\n}\n","import { h } from 'vue';\nimport { WrapText, Eye, Code } from 'lucide-vue-next';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface TextToolbarContext {\n wordWrap: boolean;\n onToggleWrap: () => void;\n isHtml: boolean;\n htmlPreview: boolean;\n onToggleHtmlPreview: () => void;\n t: Translator;\n}\n\nexport function getTextToolbarGroups(ctx: TextToolbarContext): ToolbarGroup[] {\n const groups: ToolbarGroup[] = [\n {\n items: [\n {\n type: 'button',\n icon: h(WrapText, { class: 'vfp-w-4 vfp-h-4' }),\n tooltip: ctx.wordWrap ? ctx.t('toolbar.wrap_off') : ctx.t('toolbar.wrap_on'),\n action: ctx.onToggleWrap,\n },\n ],\n },\n ];\n\n if (ctx.isHtml) {\n groups.push({\n items: [\n {\n type: 'button',\n icon: ctx.htmlPreview\n ? h(Code, { class: 'vfp-w-4 vfp-h-4' })\n : h(Eye, { class: 'vfp-w-4 vfp-h-4' }),\n tooltip: ctx.htmlPreview ? ctx.t('toolbar.source') : ctx.t('toolbar.preview'),\n action: ctx.onToggleHtmlPreview,\n },\n ],\n });\n }\n\n return groups;\n}\n","import { h } from 'vue';\nimport { Eye, Code } from 'lucide-vue-next';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface MarkdownToolbarContext {\n viewMode: 'preview' | 'source';\n onToggleViewMode: () => void;\n t: Translator;\n}\n\nexport function getMarkdownToolbarGroups(ctx: MarkdownToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n {\n type: 'button',\n icon: ctx.viewMode === 'preview'\n ? h(Code, { class: 'vfp-w-4 vfp-h-4' })\n : h(Eye, { class: 'vfp-w-4 vfp-h-4' }),\n tooltip: ctx.viewMode === 'preview' ? ctx.t('toolbar.source') : ctx.t('toolbar.preview'),\n action: ctx.onToggleViewMode,\n },\n ],\n },\n ];\n}\n","<script setup lang=\"ts\">\nimport { useTranslator } from '../composables/useTranslator';\nconst { t } = useTranslator();\n</script>\n\n<template>\n <div class=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-text-fg-muted\">\n <div class=\"rfp-flex rfp-flex-col rfp-items-center rfp-gap-3\">\n <div class=\"rfp-w-8 rfp-h-8 rfp-rounded-full rfp-border-2 rfp-border-fg-muted rfp-border-t-transparent rfp-animate-spin\" />\n <span class=\"rfp-text-sm\">{{ t('common.loading') || 'Loading...' }}</span>\n </div>\n </div>\n</template>\n","// 集中的 Vue 异步装饰:把每个 renderer 转为 defineAsyncComponent,\n// 让 rollup 自动按 chunk 分割。\nimport { defineAsyncComponent, h, type Component } from 'vue';\nimport RendererLoading from './RendererLoading.vue';\n\ntype ComponentModule = { default: Component };\n\nconst wrap = (loader: () => Promise<ComponentModule>) =>\n defineAsyncComponent({\n loader,\n loadingComponent: { render: () => h(RendererLoading) },\n delay: 0,\n });\n\nexport const ImageRenderer = wrap(() => import('./Image/index.vue'));\nexport const PdfRenderer = wrap(() => import('./Pdf/index.vue'));\nexport const DocxRenderer = wrap(() => import('./Docx/index.vue'));\nexport const XlsxRenderer = wrap(() => import('./Xlsx/index.vue'));\nexport const PptxRenderer = wrap(() => import('./Pptx/index.vue'));\nexport const MsgRenderer = wrap(() => import('./Msg/index.vue'));\nexport const EpubRenderer = wrap(() => import('./Epub/index.vue'));\nexport const MobiRenderer = wrap(() => import('./Mobi/index.vue'));\nexport const VideoRenderer = wrap(() => import('./Video/index.vue'));\nexport const AudioRenderer = wrap(() => import('./Audio/index.vue'));\nexport const MarkdownRenderer = wrap(() => import('./Markdown/index.vue'));\nexport const JsonRenderer = wrap(() => import('./Json/index.vue'));\nexport const CsvRenderer = wrap(() => import('./Csv/index.vue'));\nexport const XmlRenderer = wrap(() => import('./Xml/index.vue'));\nexport const SubtitleRenderer = wrap(() => import('./Subtitle/index.vue'));\nexport const ZipRenderer = wrap(() => import('./Zip/index.vue'));\nexport const TextRenderer = wrap(() => import('./Text/index.vue'));\n","<script setup lang=\"ts\">\nimport { FileQuestion, Download } from 'lucide-vue-next';\nimport { useTranslator } from '../../composables/useTranslator';\n\ndefineProps<{\n fileName: string;\n fileType: string;\n}>();\n\nconst { t } = useTranslator();\n\nconst emit = defineEmits<{\n (e: 'download'): void;\n}>();\n</script>\n\n<template>\n <div\n class=\"vfp-flex vfp-flex-col vfp-items-center vfp-justify-center vfp-w-full vfp-h-full vfp-p-8 vfp-gap-6\"\n >\n <div\n class=\"vfp-w-32 vfp-h-32 vfp-rounded-full vfp-bg-surface-2 vfp-flex vfp-items-center vfp-justify-center\"\n >\n <FileQuestion class=\"vfp-w-16 vfp-h-16 vfp-text-fg-secondary\" />\n </div>\n\n <div class=\"vfp-text-fg-primary vfp-text-center\">\n <p class=\"vfp-text-xl vfp-font-medium vfp-mb-2\">{{ fileName }}</p>\n <p class=\"vfp-text-fg-secondary\">{{ t('common.unsupported_preview', { type: fileType }) }}</p>\n </div>\n\n <button\n class=\"vfp-flex vfp-items-center vfp-gap-2 vfp-px-6 vfp-py-3 vfp-bg-surface-2 hover:vfp-bg-surface-3 vfp-backdrop-blur-sm vfp-rounded-lg vfp-text-fg-primary vfp-font-medium vfp-transition-all\"\n @click=\"emit('download')\"\n >\n <Download class=\"vfp-w-5 vfp-h-5\" />\n {{ t('common.download') }}\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, computed, watch, onMounted, onBeforeUnmount, toRef, provide } from 'vue';\nimport { X, Download, ChevronLeft, ChevronRight } from 'lucide-vue-next';\nimport {\n normalizeFiles,\n getFileType,\n type PreviewFileInput,\n type Locale,\n type Messages,\n type Theme,\n type CustomRendererEventPayload,\n} from '@eternalheart/file-preview-core';\nimport type { CustomRenderer, CustomRendererContext } from './types';\nimport { provideLocale, useTranslator } from './composables/useTranslator';\nimport { provideResolvedTheme } from './composables/useResolvedTheme';\nimport type { ToolbarGroup, ToolbarButtonItem, ToolbarTextItem } from './renderers/toolbar.types';\nimport { getImageToolbarGroups } from './renderers/Image/toolbar';\nimport { getPdfToolbarGroups } from './renderers/Pdf/toolbar';\nimport { getEpubToolbarGroups } from './renderers/Epub/toolbar';\nimport { getMobiToolbarGroups } from './renderers/Mobi/toolbar';\nimport { getZipToolbarGroups, type ZipToolbarStats } from './renderers/Zip/toolbar';\nimport { getTextToolbarGroups } from './renderers/Text/toolbar';\nimport { getMarkdownToolbarGroups } from './renderers/Markdown/toolbar';\n// Renderer 通过 defineAsyncComponent 动态加载,运行时按需下载对应 chunk\nimport {\n ImageRenderer,\n PdfRenderer,\n DocxRenderer,\n XlsxRenderer,\n PptxRenderer,\n MsgRenderer,\n EpubRenderer,\n MobiRenderer,\n VideoRenderer,\n AudioRenderer,\n MarkdownRenderer,\n JsonRenderer,\n CsvRenderer,\n XmlRenderer,\n SubtitleRenderer,\n ZipRenderer,\n TextRenderer,\n} from './renderers/lazy';\n// Unsupported 体量极小且每次回退都用,直接静态打包到主入口\nimport UnsupportedRenderer from './renderers/Unsupported/index.vue';\n\nconst MAX_ZIP_NESTING_DEPTH = 3;\n\ninterface Props {\n files: PreviewFileInput[];\n currentIndex: number;\n customRenderers?: CustomRenderer[];\n /** 运行模式: modal(弹窗) 或 embed(嵌入) */\n mode?: 'modal' | 'embed';\n /** ZIP 嵌套深度(内部使用),超过上限时不再递归渲染 ZIP */\n zipNestingDepth?: number;\n /** 语言 */\n locale?: Locale;\n /** 自定义翻译字典 */\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n /** 无头模式:隐藏工具栏和导航箭头,仅渲染文件内容 */\n headless?: boolean;\n /** 主题模式,默认 'dark' */\n theme?: Theme;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n customRenderers: () => [],\n mode: 'modal',\n zipNestingDepth: 0,\n locale: undefined,\n messages: undefined,\n headless: false,\n theme: 'dark',\n});\n\nconst emit = defineEmits<{\n (e: 'navigate', index: number): void;\n (e: 'close'): void;\n (e: 'custom-event', payload: CustomRendererEventPayload): void;\n}>();\n\nprovideLocale(toRef(props, 'locale'), toRef(props, 'messages'));\nconst { t } = useTranslator();\n\nconst systemDark = ref(\n typeof window !== 'undefined'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n : true,\n);\n\nlet mediaQueryCleanup: (() => void) | null = null;\n\nwatch(\n () => props.theme,\n (theme) => {\n if (mediaQueryCleanup) {\n mediaQueryCleanup();\n mediaQueryCleanup = null;\n }\n if (theme === 'auto') {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => { systemDark.value = e.matches; };\n mql.addEventListener('change', handler);\n mediaQueryCleanup = () => mql.removeEventListener('change', handler);\n }\n },\n { immediate: true },\n);\n\nonBeforeUnmount(() => {\n if (mediaQueryCleanup) mediaQueryCleanup();\n});\n\nconst resolvedTheme = computed(() =>\n props.theme === 'auto' ? (systemDark.value ? 'dark' : 'light') : props.theme,\n);\nprovideResolvedTheme(resolvedTheme);\n\nconst zoom = ref(1);\nconst rotation = ref(0);\nconst currentPage = ref(1);\nconst totalPages = ref(1);\nconst contentNaturalWidth = ref(0);\nconst contentNaturalHeight = ref(0);\nconst imageResetKey = ref(0);\n\nconst contentRef = ref<HTMLDivElement | null>(null);\nconst rootRef = ref<HTMLDivElement | null>(null);\n\n// 导航箭头自动隐藏\nconst navVisible = ref(true);\nlet navHideTimer: number | null = null;\nconst NAV_HIDE_DELAY = 2000;\n\nconst resetNavTimer = () => {\n navVisible.value = true;\n if (navHideTimer !== null) {\n clearTimeout(navHideTimer);\n }\n navHideTimer = window.setTimeout(() => {\n navVisible.value = false;\n }, NAV_HIDE_DELAY);\n};\n\nconst handleMouseMove = () => resetNavTimer();\n\n// 标准化文件输入\nconst normalizedFiles = computed(() => normalizeFiles(props.files));\n\nconst currentFile = computed(() => normalizedFiles.value[props.currentIndex]);\n\n// 自定义渲染器匹配\nconst customRenderer = computed(() => {\n if (!currentFile.value) return null;\n return props.customRenderers.find((r) => r.test(currentFile.value!)) || null;\n});\n\nconst customRendererComponent = computed(() => {\n if (!customRenderer.value || !currentFile.value) return null;\n return customRenderer.value.render(currentFile.value, customCtx.value);\n});\n\nconst fileType = computed(() => (currentFile.value ? getFileType(currentFile.value) : 'unsupported'));\n\n// 自定义渲染器事件派发器:未绑定 @custom-event 时仍调用 emit(Vue 会安全忽略未声明监听)\nconst emitCustom = (name: string, payload?: unknown) => {\n if (!currentFile.value) return;\n const ev: CustomRendererEventPayload = { name, payload, file: currentFile.value };\n emit('custom-event', ev);\n};\n\n// 自定义渲染器上下文\nconst customCtx = computed<CustomRendererContext>(() => ({\n emit: emitCustom,\n t: t.value,\n theme: resolvedTheme.value,\n locale: (props.locale ?? 'zh-CN') as Locale,\n}));\n\n// 通过 provide 暴露给深层子组件 inject 使用\nprovide('file-preview:custom-ctx', customCtx);\n\n// 重置状态当文件改变时\nwatch(\n () => props.currentIndex,\n () => {\n zoom.value = 1;\n rotation.value = 0;\n currentPage.value = 1;\n totalPages.value = 1;\n contentNaturalWidth.value = 0;\n contentNaturalHeight.value = 0;\n navVisible.value = true;\n if (navHideTimer !== null) {\n clearTimeout(navHideTimer);\n }\n }\n);\n\n// 图片加载后默认适应窗口\nwatch(\n [fileType, contentNaturalWidth, contentNaturalHeight],\n () => {\n if (\n fileType.value === 'image' &&\n contentNaturalWidth.value > 0 &&\n contentNaturalHeight.value > 0 &&\n contentRef.value\n ) {\n const containerWidth = contentRef.value.clientWidth;\n const containerHeight = contentRef.value.clientHeight;\n const scaleX = containerWidth / contentNaturalWidth.value;\n const scaleY = containerHeight / contentNaturalHeight.value;\n const newZoom = Math.min(scaleX, scaleY);\n zoom.value = Math.max(0.01, Math.min(10, newZoom));\n }\n }\n);\n\n// 导航箭头自动隐藏计时器\nwatch(\n () => normalizedFiles.value.length,\n (len) => {\n if (len > 1) resetNavTimer();\n },\n { immediate: true }\n);\n\n// 键盘导航\nconst handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && props.mode === 'modal') {\n emit('close');\n } else if (e.key === 'ArrowLeft' && props.currentIndex > 0) {\n emit('navigate', props.currentIndex - 1);\n } else if (e.key === 'ArrowRight' && props.currentIndex < normalizedFiles.value.length - 1) {\n emit('navigate', props.currentIndex + 1);\n }\n};\n\nonMounted(() => {\n if (props.mode === 'modal') {\n window.addEventListener('keydown', handleKeyDown);\n } else if (rootRef.value) {\n rootRef.value.addEventListener('keydown', handleKeyDown as EventListener);\n }\n});\n\nonBeforeUnmount(() => {\n if (navHideTimer !== null) clearTimeout(navHideTimer);\n if (props.mode === 'modal') {\n window.removeEventListener('keydown', handleKeyDown);\n } else if (rootRef.value) {\n rootRef.value.removeEventListener('keydown', handleKeyDown as EventListener);\n }\n});\n\nconst handleZoomIn = () => {\n zoom.value = Math.min(zoom.value + 0.1, 10);\n};\nconst handleZoomOut = () => {\n zoom.value = Math.max(zoom.value - 0.1, 0.01);\n};\nconst handleRotate = () => {\n rotation.value = rotation.value + 90;\n};\nconst handleRotateLeft = () => {\n rotation.value = rotation.value - 90;\n};\n\nconst handleFitToWidth = () => {\n if (contentRef.value && contentNaturalWidth.value > 0 && contentNaturalHeight.value > 0) {\n const containerWidth = contentRef.value.clientWidth;\n const containerHeight = contentRef.value.clientHeight;\n const scaleX = containerWidth / contentNaturalWidth.value;\n const scaleY = containerHeight / contentNaturalHeight.value;\n const newZoom = Math.min(scaleX, scaleY);\n zoom.value = Math.max(0.01, Math.min(10, newZoom));\n } else {\n zoom.value = 1;\n }\n rotation.value = 0;\n imageResetKey.value++;\n};\n\nconst handleOriginalSize = () => {\n zoom.value = 1;\n rotation.value = 0;\n imageResetKey.value++;\n};\n\nconst handleZoomChange = (newZoom: number) => {\n zoom.value = newZoom;\n};\n\nconst handleReset = () => {\n zoom.value = 1;\n rotation.value = 0;\n imageResetKey.value++;\n};\n\nconst handleDownload = () => {\n if (!currentFile.value) return;\n const link = document.createElement('a');\n link.href = currentFile.value.url;\n link.download = currentFile.value.name;\n link.click();\n};\n\nconst showCloseButton = computed(() => props.mode === 'modal');\n\nconst epubRef = ref<{ prevPage: () => void; nextPage: () => void; toggleFullWidth: () => void; toggleToc: () => void } | null>(null);\nconst epubCurrent = ref(0);\nconst epubTotal = ref(0);\nconst epubFullWidth = ref(false);\n\nconst mobiRef = ref<{ prevPage: () => void; nextPage: () => void; toggleFullWidth: () => void; toggleToc: () => void } | null>(null);\nconst mobiCurrent = ref(0);\nconst mobiTotal = ref(0);\nconst mobiFullWidth = ref(false);\n\nconst handleEpubChapterChange = (current: number, total: number) => {\n epubCurrent.value = current;\n epubTotal.value = total;\n};\n\nconst handleMobiChapterChange = (current: number, total: number) => {\n mobiCurrent.value = current;\n mobiTotal.value = total;\n};\n\nconst zipStats = ref<ZipToolbarStats | null>(null);\nconst handleZipStatsChange = (stats: ZipToolbarStats | null) => {\n zipStats.value = stats;\n};\n\nconst textWordWrap = ref(true);\nconst textHtmlPreview = ref(false);\nconst markdownViewMode = ref<'preview' | 'source'>('preview');\n\n// 工具栏配置 — 各 Renderer 自行声明。命中自定义渲染器时优先使用其 getToolbarGroups\nconst toolGroups = computed(() => {\n if (customRenderer.value) {\n return (\n customRenderer.value.getToolbarGroups?.(currentFile.value!, customCtx.value) ?? []\n );\n }\n if (fileType.value === 'image') {\n return getImageToolbarGroups({\n zoom: zoom.value,\n onZoomIn: handleZoomIn,\n onZoomOut: handleZoomOut,\n onFitToWidth: handleFitToWidth,\n onOriginalSize: handleOriginalSize,\n onRotateLeft: handleRotateLeft,\n onRotateRight: handleRotate,\n onReset: handleReset,\n t: t.value,\n });\n }\n if (fileType.value === 'pdf') {\n return getPdfToolbarGroups({\n zoom: zoom.value,\n onZoomIn: handleZoomIn,\n onZoomOut: handleZoomOut,\n onReset: handleReset,\n t: t.value,\n });\n }\n if (fileType.value === 'epub') {\n return getEpubToolbarGroups({\n epubRef: epubRef.value,\n current: epubCurrent.value,\n total: epubTotal.value,\n fullWidth: epubFullWidth.value,\n t: t.value,\n });\n }\n if (fileType.value === 'mobi') {\n return getMobiToolbarGroups({\n mobiRef: mobiRef.value,\n current: mobiCurrent.value,\n total: mobiTotal.value,\n fullWidth: mobiFullWidth.value,\n t: t.value,\n });\n }\n if (fileType.value === 'zip') {\n return getZipToolbarGroups({ stats: zipStats.value, t: t.value });\n }\n if (fileType.value === 'text') {\n const ext = currentFile.value!.name.split('.').pop()?.toLowerCase() || '';\n return getTextToolbarGroups({\n wordWrap: textWordWrap.value,\n onToggleWrap: () => { textWordWrap.value = !textWordWrap.value; },\n isHtml: ext === 'html' || ext === 'htm',\n htmlPreview: textHtmlPreview.value,\n onToggleHtmlPreview: () => { textHtmlPreview.value = !textHtmlPreview.value; },\n t: t.value,\n });\n }\n if (fileType.value === 'markdown') {\n return getMarkdownToolbarGroups({\n viewMode: markdownViewMode.value,\n onToggleViewMode: () => { markdownViewMode.value = markdownViewMode.value === 'preview' ? 'source' : 'preview'; },\n t: t.value,\n });\n }\n return [];\n});\n\n// 操作组:下载、关闭(通用,不属于任何 Renderer)\nconst actionGroups = computed<ToolbarGroup[]>(() => {\n const groups: ToolbarGroup[] = [\n {\n items: [\n { type: 'button', icon: Download, tooltip: t.value('common.download'), action: handleDownload },\n ],\n },\n ];\n if (showCloseButton.value) {\n groups.push({\n items: [\n { type: 'button', icon: X, tooltip: t.value('common.close'), action: () => emit('close') },\n ],\n });\n }\n return groups;\n});\n\nconst hasToolGroups = computed(() => toolGroups.value.length > 0);\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :tabindex=\"mode === 'embed' ? 0 : -1\"\n :data-theme=\"resolvedTheme\"\n class=\"vfp-relative vfp-w-full vfp-h-full vfp-flex vfp-flex-col vfp-overflow-hidden vfp-outline-none\"\n >\n <!-- 顶部工具栏 -->\n <div\n v-if=\"!headless\"\n class=\"vfp-flex-shrink-0 vfp-z-10 vfp-backdrop-blur-md vfp-border-b vfp-bg-surface-toolbar vfp-border-line\"\n style=\"padding-top: env(safe-area-inset-top, 0px)\"\n >\n <!-- 第一行: 文件名 + 桌面端工具按钮 -->\n <div class=\"vfp-flex vfp-items-center vfp-justify-between vfp-px-3 md:vfp-px-5 vfp-py-1.5 md:vfp-py-2.5\">\n <!-- 左侧: 文件名 + 分页 -->\n <div class=\"vfp-flex vfp-items-center vfp-flex-1 vfp-min-w-0 vfp-mr-2 md:vfp-mr-3\">\n <h2 class=\"vfp-font-medium vfp-text-xs md:vfp-text-sm vfp-truncate vfp-text-fg-primary\">\n {{ currentFile?.name }}\n </h2>\n <span class=\"vfp-text-xs vfp-ml-2 vfp-flex-shrink-0 vfp-text-fg-muted\">\n {{ currentIndex + 1 }}/{{ normalizedFiles.length }}\n </span>\n </div>\n\n <!-- 移动端: 仅下载 + 关闭 -->\n <div class=\"vfp-flex vfp-items-center vfp-gap-1 md:vfp-hidden vfp-flex-shrink-0\">\n <template v-for=\"(group, gi) in actionGroups\" :key=\"'m-action-' + gi\">\n <template v-for=\"(item, ii) in group.items\" :key=\"'m-action-' + gi + '-' + ii\">\n <button\n v-if=\"item.type === 'button'\"\n class=\"toolbar-btn\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n @click=\"(item as ToolbarButtonItem).action\"\n >\n <component :is=\"(item as ToolbarButtonItem).icon\" class=\"vfp-w-4 vfp-h-4\" />\n </button>\n </template>\n </template>\n </div>\n\n <!-- 桌面端: 完整工具按钮 -->\n <div class=\"vfp-hidden md:vfp-flex vfp-items-center vfp-gap-1 vfp-flex-shrink-0\">\n <template v-for=\"(group, gi) in toolGroups\" :key=\"'d-tool-' + gi\">\n <template v-for=\"(item, ii) in group.items\" :key=\"'d-tool-' + gi + '-' + ii\">\n <button\n v-if=\"item.type === 'button'\"\n class=\"toolbar-btn\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n @click=\"(item as ToolbarButtonItem).action\"\n >\n <component :is=\"(item as ToolbarButtonItem).icon\" class=\"vfp-w-4 vfp-h-4\" />\n </button>\n <span\n v-else-if=\"item.type === 'text'\"\n class=\"vfp-text-xs vfp-text-center vfp-font-medium vfp-tabular-nums vfp-text-fg-tertiary\"\n :style=\"{ minWidth: (item as ToolbarTextItem).minWidth || 'auto' }\"\n >\n {{ (item as ToolbarTextItem).content }}\n </span>\n </template>\n <div class=\"vfp-w-px vfp-h-4 vfp-mx-1 vfp-bg-divide\" />\n </template>\n <template v-for=\"(group, gi) in actionGroups\" :key=\"'d-action-' + gi\">\n <template v-for=\"(item, ii) in group.items\" :key=\"'d-action-' + gi + '-' + ii\">\n <button\n v-if=\"item.type === 'button'\"\n class=\"toolbar-btn\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n @click=\"(item as ToolbarButtonItem).action\"\n >\n <component :is=\"(item as ToolbarButtonItem).icon\" class=\"vfp-w-4 vfp-h-4\" />\n </button>\n </template>\n </template>\n </div>\n </div>\n\n <!-- 移动端第二行工具按钮 -->\n <div\n v-if=\"hasToolGroups\"\n class=\"vfp-flex vfp-items-center vfp-gap-1 vfp-px-3 vfp-pb-1.5 vfp-overflow-x-auto scrollbar-hide md:vfp-hidden\"\n >\n <template v-for=\"(group, gi) in toolGroups\" :key=\"'m-tool-' + gi\">\n <div v-if=\"gi > 0\" class=\"vfp-w-px vfp-h-4 vfp-mx-0.5 vfp-bg-divide\" />\n <template v-for=\"(item, ii) in group.items\" :key=\"'m-tool-' + gi + '-' + ii\">\n <button\n v-if=\"item.type === 'button'\"\n class=\"toolbar-btn\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n @click=\"(item as ToolbarButtonItem).action\"\n >\n <component :is=\"(item as ToolbarButtonItem).icon\" class=\"vfp-w-4 vfp-h-4\" />\n </button>\n <span\n v-else-if=\"item.type === 'text'\"\n class=\"vfp-text-xs vfp-text-center vfp-font-medium vfp-tabular-nums vfp-text-fg-tertiary\"\n :style=\"{ minWidth: (item as ToolbarTextItem).minWidth || 'auto' }\"\n >\n {{ (item as ToolbarTextItem).content }}\n </span>\n </template>\n </template>\n </div>\n </div>\n\n <!-- 内容区域 -->\n <div\n ref=\"contentRef\"\n class=\"vfp-flex-1 vfp-flex vfp-items-center vfp-justify-center vfp-overflow-auto\"\n @mousemove=\"handleMouseMove\"\n >\n <template v-if=\"currentFile\">\n <component :is=\"customRendererComponent\" v-if=\"customRendererComponent\" :file=\"currentFile\" :ctx=\"customCtx\" />\n <template v-else>\n <ImageRenderer\n v-if=\"fileType === 'image'\"\n :url=\"currentFile.url\"\n :zoom=\"zoom\"\n :rotation=\"rotation\"\n :reset-key=\"imageResetKey\"\n :file-size=\"currentFile.size\"\n @zoom-change=\"handleZoomChange\"\n @natural-width-change=\"(w: number) => (contentNaturalWidth = w)\"\n @natural-height-change=\"(h: number) => (contentNaturalHeight = h)\"\n />\n <PdfRenderer\n v-else-if=\"fileType === 'pdf'\"\n :url=\"currentFile.url\"\n :zoom=\"zoom\"\n :current-page=\"currentPage\"\n @page-change=\"(p: number) => (currentPage = p)\"\n @total-pages-change=\"(t: number) => (totalPages = t)\"\n @page-width-change=\"(w: number) => (contentNaturalWidth = w)\"\n />\n <DocxRenderer v-else-if=\"fileType === 'docx'\" :url=\"currentFile.url\" />\n <XlsxRenderer v-else-if=\"fileType === 'xlsx'\" :url=\"currentFile.url\" />\n <PptxRenderer v-else-if=\"fileType === 'pptx'\" :url=\"currentFile.url\" />\n <MsgRenderer v-else-if=\"fileType === 'msg'\" :url=\"currentFile.url\" />\n <EpubRenderer\n v-else-if=\"fileType === 'epub'\"\n ref=\"epubRef\"\n :url=\"currentFile.url\"\n @chapter-change=\"handleEpubChapterChange\"\n @full-width-change=\"(v: boolean) => (epubFullWidth = v)\"\n />\n <MobiRenderer\n v-else-if=\"fileType === 'mobi'\"\n ref=\"mobiRef\"\n :url=\"currentFile.url\"\n @chapter-change=\"handleMobiChapterChange\"\n @full-width-change=\"(v: boolean) => (mobiFullWidth = v)\"\n />\n <VideoRenderer v-else-if=\"fileType === 'video'\" :url=\"currentFile.url\" />\n <AudioRenderer\n v-else-if=\"fileType === 'audio'\"\n :url=\"currentFile.url\"\n :file-name=\"currentFile.name\"\n />\n <MarkdownRenderer v-else-if=\"fileType === 'markdown'\" :url=\"currentFile.url\" :view-mode=\"markdownViewMode\" />\n <JsonRenderer\n v-else-if=\"fileType === 'json'\"\n :url=\"currentFile.url\"\n :file-name=\"currentFile.name\"\n />\n <CsvRenderer\n v-else-if=\"fileType === 'csv'\"\n :url=\"currentFile.url\"\n :file-name=\"currentFile.name\"\n />\n <XmlRenderer\n v-else-if=\"fileType === 'xml'\"\n :url=\"currentFile.url\"\n :file-name=\"currentFile.name\"\n />\n <SubtitleRenderer\n v-else-if=\"fileType === 'subtitle'\"\n :url=\"currentFile.url\"\n :file-name=\"currentFile.name\"\n />\n <template v-else-if=\"fileType === 'zip' && props.zipNestingDepth >= MAX_ZIP_NESTING_DEPTH\">\n <UnsupportedRenderer\n :file-name=\"currentFile.name\"\n :file-type=\"currentFile.type\"\n @download=\"handleDownload\"\n />\n </template>\n <ZipRenderer\n v-else-if=\"fileType === 'zip'\"\n :url=\"currentFile.url\"\n :nesting-depth=\"props.zipNestingDepth\"\n @stats-change=\"handleZipStatsChange\"\n />\n <TextRenderer\n v-else-if=\"fileType === 'text'\"\n :url=\"currentFile.url\"\n :file-name=\"currentFile.name\"\n :word-wrap=\"textWordWrap\"\n :html-preview=\"textHtmlPreview\"\n />\n <UnsupportedRenderer\n v-else\n :file-name=\"currentFile.name\"\n :file-type=\"currentFile.type\"\n @download=\"handleDownload\"\n />\n </template>\n </template>\n </div>\n\n <!-- 左右导航箭头 -->\n <template v-if=\"!headless && normalizedFiles.length > 1\">\n <button\n v-if=\"currentIndex > 0\"\n :style=\"{\n opacity: navVisible ? 1 : 0,\n transform: navVisible ? 'translateY(-50%)' : 'translateY(-50%) translateX(-20px)',\n pointerEvents: navVisible ? 'auto' : 'none',\n transition: 'opacity 0.2s, transform 0.2s',\n }\"\n class=\"vfp-absolute vfp-z-20 vfp-left-2 md:vfp-left-4 vfp-top-1/2 vfp-w-10 vfp-h-10 md:vfp-w-12 md:vfp-h-12 vfp-rounded-full vfp-backdrop-blur-xl vfp-border vfp-flex vfp-items-center vfp-justify-center vfp-transition-colors vfp-shadow-2xl vfp-bg-surface-nav vfp-border-line hover:vfp-bg-surface-nav-hover vfp-text-fg-primary\"\n @click=\"emit('navigate', currentIndex - 1)\"\n @mouseenter=\"navVisible = true\"\n >\n <ChevronLeft class=\"vfp-w-5 vfp-h-5 md:vfp-w-6 md:vfp-h-6\" />\n </button>\n\n <button\n v-if=\"currentIndex < normalizedFiles.length - 1\"\n :style=\"{\n opacity: navVisible ? 1 : 0,\n transform: navVisible ? 'translateY(-50%)' : 'translateY(-50%) translateX(20px)',\n pointerEvents: navVisible ? 'auto' : 'none',\n transition: 'opacity 0.2s, transform 0.2s',\n }\"\n class=\"vfp-absolute vfp-z-20 vfp-right-2 md:vfp-right-4 vfp-top-1/2 vfp-w-10 vfp-h-10 md:vfp-w-12 md:vfp-h-12 vfp-rounded-full vfp-backdrop-blur-xl vfp-border vfp-flex vfp-items-center vfp-justify-center vfp-transition-colors vfp-shadow-2xl vfp-bg-surface-nav vfp-border-line hover:vfp-bg-surface-nav-hover vfp-text-fg-primary\"\n @click=\"emit('navigate', currentIndex + 1)\"\n @mouseenter=\"navVisible = true\"\n >\n <ChevronRight class=\"vfp-w-5 vfp-h-5 md:vfp-w-6 md:vfp-h-6\" />\n </button>\n </template>\n </div>\n</template>\n\n<style scoped>\n.toolbar-btn {\n position: relative;\n padding: 0.5rem;\n border-radius: 0.375rem;\n transition: all 0.15s;\n user-select: none;\n color: var(--fp-fg-primary);\n background: transparent;\n border: 0;\n cursor: pointer;\n}\n@media (min-width: 768px) {\n .toolbar-btn {\n padding: 0.375rem;\n }\n}\n.toolbar-btn:hover {\n background: var(--fp-surface-2);\n}\n.toolbar-btn:active {\n background: var(--fp-surface-3);\n}\n.toolbar-btn:disabled {\n color: var(--fp-fg-disabled);\n cursor: not-allowed;\n}\n/* Tooltip */\n.toolbar-btn[data-tooltip]::after {\n content: attr(data-tooltip);\n position: absolute;\n left: 50%;\n top: 100%;\n transform: translateX(-50%);\n margin-top: 6px;\n padding: 4px 8px;\n background: var(--fp-fg-primary);\n color: var(--fp-fg-inverse);\n font-size: 12px;\n line-height: 1.5;\n border-radius: 4px;\n white-space: nowrap;\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.2s, visibility 0.2s;\n z-index: 50;\n}\n.toolbar-btn[data-tooltip]::before {\n content: '';\n position: absolute;\n left: 50%;\n top: 100%;\n transform: translateX(-50%);\n margin-top: 2px;\n border: 4px solid transparent;\n border-bottom-color: var(--fp-fg-primary);\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.2s, visibility 0.2s;\n z-index: 50;\n}\n.toolbar-btn[data-tooltip]:hover::after,\n.toolbar-btn[data-tooltip]:hover::before {\n opacity: 1;\n visibility: visible;\n}\n</style>\n","import { onMounted, onUnmounted } from 'vue';\n\n/**\n * 锁定 body 滚动 (用于 Modal)\n */\nexport function useScrollLock(enabled: () => boolean) {\n let originalOverflow = '';\n let originalPaddingRight = '';\n let locked = false;\n\n const lock = () => {\n if (locked || typeof document === 'undefined') return;\n originalOverflow = document.body.style.overflow;\n originalPaddingRight = document.body.style.paddingRight;\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n document.body.style.overflow = 'hidden';\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n }\n locked = true;\n };\n\n const unlock = () => {\n if (!locked || typeof document === 'undefined') return;\n document.body.style.overflow = originalOverflow;\n document.body.style.paddingRight = originalPaddingRight;\n locked = false;\n };\n\n onMounted(() => {\n if (enabled()) lock();\n });\n\n onUnmounted(() => {\n unlock();\n });\n\n return { lock, unlock };\n}\n","<script setup lang=\"ts\">\nimport { watch, ref, onBeforeUnmount, computed } from 'vue';\nimport type { PreviewFileInput, Locale, Messages, Theme, CustomRendererEventPayload } from '@eternalheart/file-preview-core';\nimport type { CustomRenderer } from './types';\nimport FilePreviewContent from './FilePreviewContent.vue';\nimport { useScrollLock } from './composables/useScrollLock';\n\ninterface Props {\n files: PreviewFileInput[];\n currentIndex: number;\n isOpen: boolean;\n customRenderers?: CustomRenderer[];\n /** 语言 */\n locale?: Locale;\n /** 自定义翻译字典 */\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n /** 无头模式:隐藏工具栏和导航箭头 */\n headless?: boolean;\n /** 主题模式,默认 'dark' */\n theme?: Theme;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n customRenderers: () => [],\n locale: undefined,\n messages: undefined,\n headless: false,\n theme: 'dark',\n});\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n (e: 'navigate', index: number): void;\n (e: 'custom-event', payload: CustomRendererEventPayload): void;\n}>();\n\nconst { lock, unlock } = useScrollLock(() => props.isOpen);\n\nwatch(\n () => props.isOpen,\n (open) => {\n if (open) lock();\n else unlock();\n }\n);\n\nconst systemDark = ref(\n typeof window !== 'undefined'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n : true,\n);\n\nlet mediaQueryCleanup: (() => void) | null = null;\n\nwatch(\n () => props.theme,\n (theme) => {\n if (mediaQueryCleanup) {\n mediaQueryCleanup();\n mediaQueryCleanup = null;\n }\n if (theme === 'auto') {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => { systemDark.value = e.matches; };\n mql.addEventListener('change', handler);\n mediaQueryCleanup = () => mql.removeEventListener('change', handler);\n }\n },\n { immediate: true },\n);\n\nonBeforeUnmount(() => {\n if (mediaQueryCleanup) mediaQueryCleanup();\n});\n\nconst resolvedTheme = computed(() =>\n props.theme === 'auto' ? (systemDark.value ? 'dark' : 'light') : props.theme,\n);\n\nconst handleBackdropClick = () => emit('close');\nconst handleContentClick = (e: MouseEvent) => e.stopPropagation();\nconst handleWheel = (e: WheelEvent) => e.stopPropagation();\n</script>\n\n<template>\n <Teleport to=\"body\">\n <Transition name=\"vfp-fade\">\n <div v-if=\"isOpen\" class=\"vfp-root\" :data-theme=\"resolvedTheme\">\n <div\n class=\"vfp-fixed vfp-inset-0 vfp-z-[9999] vfp-flex vfp-items-center vfp-justify-center vfp-backdrop-blur-md vfp-overflow-hidden vfp-bg-surface-overlay\"\n @click=\"handleBackdropClick\"\n @wheel=\"handleWheel\"\n >\n <div class=\"vfp-relative vfp-w-full vfp-h-full\" @click=\"handleContentClick\">\n <FilePreviewContent\n mode=\"modal\"\n :files=\"files\"\n :current-index=\"currentIndex\"\n :custom-renderers=\"customRenderers\"\n :locale=\"locale\"\n :messages=\"messages\"\n :headless=\"headless\"\n :theme=\"theme\"\n @close=\"emit('close')\"\n @navigate=\"(i) => emit('navigate', i)\"\n @custom-event=\"(p) => emit('custom-event', p)\"\n />\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, watch, onBeforeUnmount, computed } from 'vue';\nimport type { CSSProperties } from 'vue';\nimport type { PreviewFileInput, Locale, Messages, Theme, CustomRendererEventPayload } from '@eternalheart/file-preview-core';\nimport type { CustomRenderer } from './types';\nimport FilePreviewContent from './FilePreviewContent.vue';\n\ninterface Props {\n files: PreviewFileInput[];\n currentIndex?: number;\n customRenderers?: CustomRenderer[];\n /** 宽度,默认 100% 填充父容器 */\n width?: number | string;\n /** 高度,默认 100% 填充父容器 */\n height?: number | string;\n /** 语言 */\n locale?: Locale;\n /** 自定义翻译字典 */\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n /** 无头模式:隐藏工具栏和导航箭头 */\n headless?: boolean;\n /** 主题模式,默认 'dark' */\n theme?: Theme;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n currentIndex: 0,\n customRenderers: () => [],\n width: '100%',\n height: '100%',\n locale: undefined,\n messages: undefined,\n headless: false,\n theme: 'dark',\n});\n\nconst emit = defineEmits<{\n (e: 'navigate', index: number): void;\n (e: 'custom-event', payload: CustomRendererEventPayload): void;\n}>();\n\nconst systemDark = ref(\n typeof window !== 'undefined'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n : true,\n);\n\nlet mediaQueryCleanup: (() => void) | null = null;\n\nwatch(\n () => props.theme,\n (theme) => {\n if (mediaQueryCleanup) {\n mediaQueryCleanup();\n mediaQueryCleanup = null;\n }\n if (theme === 'auto') {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => { systemDark.value = e.matches; };\n mql.addEventListener('change', handler);\n mediaQueryCleanup = () => mql.removeEventListener('change', handler);\n }\n },\n { immediate: true },\n);\n\nonBeforeUnmount(() => {\n if (mediaQueryCleanup) mediaQueryCleanup();\n});\n\nconst resolvedTheme = computed(() =>\n props.theme === 'auto' ? (systemDark.value ? 'dark' : 'light') : props.theme,\n);\n\nconst wrapperStyle: CSSProperties = {\n width: typeof props.width === 'number' ? `${props.width}px` : props.width,\n height: typeof props.height === 'number' ? `${props.height}px` : props.height,\n};\n</script>\n\n<template>\n <div class=\"vfp-root\" :style=\"wrapperStyle\" :data-theme=\"resolvedTheme\">\n <div class=\"vfp-relative vfp-w-full vfp-h-full vfp-overflow-hidden vfp-bg-surface-overlay\">\n <FilePreviewContent\n mode=\"embed\"\n :files=\"files\"\n :current-index=\"currentIndex\"\n :custom-renderers=\"customRenderers\"\n :locale=\"locale\"\n :messages=\"messages\"\n :headless=\"headless\"\n :theme=\"theme\"\n @navigate=\"(i) => emit('navigate', i)\"\n @custom-event=\"(p) => emit('custom-event', p)\"\n />\n </div>\n </div>\n</template>\n","// 导入样式\nimport './index.css';\n\n// 导入版本号\nimport packageJson from '../package.json';\n\n// 导出版本号\nexport const VERSION = packageJson.version;\n\n// 导出主组件\nexport { default as FilePreviewModal } from './FilePreviewModal.vue';\nexport { default as FilePreviewEmbed } from './FilePreviewEmbed.vue';\nexport { default as FilePreviewContent } from './FilePreviewContent.vue';\n\n// 导出类型定义\nexport type {\n PreviewFile,\n PreviewFileLink,\n PreviewFileInput,\n FileType,\n PreviewState,\n ToolbarAction,\n CustomRenderer,\n CustomRendererContext,\n CustomRendererEventPayload,\n} from './types';\n\n// 导出工具函数\nexport {\n normalizeFile,\n normalizeFiles,\n getFileType,\n configurePdfWorker,\n} from '@eternalheart/file-preview-core';\n\nexport type { PdfWorkerOptions } from '@eternalheart/file-preview-core';\n\n// 导出 i18n 相关\nexport { useTranslator, provideLocale } from './composables/useTranslator';\nexport { LOCALE_KEY } from './i18n/localeKey';\nexport type { Locale, Messages, Translator, Theme } from '@eternalheart/file-preview-core';\n"],"names":["j","n","k","t","I","lt","ct","r","o","dt","ut","pt","ft","mt","gt","a","c","s","l","f","u","$","ht","z","xt","E","B","W","N","i","d","M","R","Z","p","O","g","F","b","h","x","w","D","L","v","m","y","_","S","V","bt","Ft","A","vt","wt","_t","q","G","H","J","X","T","K","Q","Y","tt","et","ot","P","Ct","kt","St","nt","rt","C","it","at","Mt","LOCALE_KEY","provideLocale","locale","messages","localeRef","computed","unref","createTranslator","provide","fallbackT","getFallback","useTranslator","injected","inject","THEME_KEY","provideResolvedTheme","theme","themeRef","useResolvedTheme","OriginalSizeIcon","_props","attrs","getImageToolbarGroups","ctx","ZoomOut","ZoomIn","Scan","RotateCcw","RotateCw","RefreshCw","getPdfToolbarGroups","getEpubToolbarGroups","List","_a","ChevronLeft","ChevronRight","Minimize2","Maximize2","getMobiToolbarGroups","getZipToolbarGroups","stats","formatFileSize","getTextToolbarGroups","groups","WrapText","Code","Eye","getMarkdownToolbarGroups","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","_toDisplayString","_unref","wrap","loader","defineAsyncComponent","RendererLoading","ImageRenderer","PdfRenderer","DocxRenderer","XlsxRenderer","PptxRenderer","MsgRenderer","EpubRenderer","MobiRenderer","VideoRenderer","AudioRenderer","MarkdownRenderer","JsonRenderer","CsvRenderer","XmlRenderer","SubtitleRenderer","ZipRenderer","TextRenderer","emit","__emit","_createVNode","FileQuestion","_hoisted_4","__props","_hoisted_5","Download","_createTextVNode","MAX_ZIP_NESTING_DEPTH","NAV_HIDE_DELAY","props","toRef","systemDark","ref","mediaQueryCleanup","watch","mql","handler","e","onBeforeUnmount","resolvedTheme","zoom","rotation","currentPage","totalPages","contentNaturalWidth","contentNaturalHeight","imageResetKey","contentRef","rootRef","navVisible","navHideTimer","resetNavTimer","handleMouseMove","normalizedFiles","normalizeFiles","currentFile","customRenderer","customRendererComponent","customCtx","fileType","getFileType","emitCustom","name","payload","ev","containerWidth","containerHeight","scaleX","scaleY","newZoom","len","handleKeyDown","onMounted","handleZoomIn","handleZoomOut","handleRotate","handleRotateLeft","handleFitToWidth","handleOriginalSize","handleZoomChange","handleReset","handleDownload","link","showCloseButton","epubRef","epubCurrent","epubTotal","epubFullWidth","mobiRef","mobiCurrent","mobiTotal","mobiFullWidth","handleEpubChapterChange","current","total","handleMobiChapterChange","zipStats","handleZipStatsChange","textWordWrap","textHtmlPreview","markdownViewMode","toolGroups","_b","ext","_c","actionGroups","hasToolGroups","_hoisted_6","_hoisted_7","_Fragment","_renderList","group","gi","item","ii","_createBlock","_resolveDynamicComponent","_hoisted_9","_normalizeStyle","_hoisted_12","_hoisted_13","_cache","UnsupportedRenderer","$event","useScrollLock","enabled","originalOverflow","originalPaddingRight","locked","lock","scrollbarWidth","unlock","onUnmounted","open","handleBackdropClick","handleContentClick","handleWheel","_Teleport","_Transition","FilePreviewContent","wrapperStyle","VERSION","packageJson"],"mappings":";;;;;;AACA,SAASA,GAAE,GAAG;AACZ,MAAI;AACF,UAAMC,IAAI,IAAI,IAAI,CAAC,EAAE,SAAS,MAAM,GAAG,EAAE,IAAG,KAAM;AAClD,WAAO,mBAAmBA,CAAC;AAAA,EAC7B,QAAQ;AACN,UAAM,IAAI,EAAE,MAAM,GAAG,EAAE,IAAG,KAAM;AAChC,WAAO,mBAAmB,CAAC;AAAA,EAC7B;AACF;AACA,SAASC,GAAE,GAAG;AACZ,MAAID;AACJ,QAAME,MAAMF,IAAI,EAAE,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,MAAO;AAC3E,SAAO;AAAA;AAAA,IAEL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA;AAAA,IAEL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,KAAK;AAAA;AAAA,IAEL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA;AAAA,IAEN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA;AAAA,IAEL,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACT,EAAIE,CAAC,KAAK;AACV;AACA,SAASC,GAAE,GAAG,IAAI,GAAG;AACnB,MAAI,aAAa;AACf,WAAO;AAAA,MACL,IAAI,QAAQ,KAAK,IAAG,CAAE,IAAI,CAAC;AAAA,MAC3B,MAAM,EAAE;AAAA,MACR,KAAK,IAAI,gBAAgB,CAAC;AAAA,MAC1B,MAAM,EAAE,QAAQF,GAAE,EAAE,IAAI;AAAA,MACxB,MAAM,EAAE;AAAA,IACd;AACE,MAAI,OAAO,KAAK,UAAU;AACxB,UAAM,IAAIF,GAAE,CAAC;AACb,WAAO;AAAA,MACL,IAAI,OAAO,KAAK,IAAG,CAAE,IAAI,CAAC;AAAA,MAC1B,MAAM;AAAA,MACN,KAAK;AAAA,MACL,MAAME,GAAE,CAAC;AAAA,IACf;AAAA,EACE;AACA,SAAO;AAAA,IACL,IAAI,EAAE,MAAM,QAAQ,KAAK,IAAG,CAAE,IAAI,CAAC;AAAA,IACnC,MAAM,EAAE;AAAA,IACR,KAAK,EAAE;AAAA,IACP,MAAM,EAAE,QAAQA,GAAE,EAAE,IAAI;AAAA,IACxB,MAAM,EAAE;AAAA,EACZ;AACA;AACA,SAASG,GAAG,GAAG;AACb,SAAO,EAAE,IAAI,CAAC,GAAG,MAAMD,GAAE,GAAG,CAAC,CAAC;AAChC;AACA,SAASE,GAAG,GAAG;AACb,MAAIC;AACJ,QAAMJ,MAAMI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,MAAO,IAAIC,IAAI,EAAE,KAAK,YAAW;AAC1G,MAAIA,EAAE,WAAW,QAAQ,KAAK,CAAC,OAAO,QAAQ,OAAO,OAAO,QAAQ,KAAK,EAAE,SAASL,CAAC;AACnF,WAAO;AACT,MAAIK,EAAE,SAAS,KAAK,KAAKL,MAAM;AAC7B,WAAO;AACT,MAAIK,EAAE,SAAS,kBAAkB,KAAKL,MAAM;AAC1C,WAAO;AACT,MAAIK,EAAE,SAAS,eAAe,KAAKL,MAAM;AACvC,WAAO;AACT,MAAIK,EAAE,SAAS,gBAAgB,KAAKL,MAAM,UAAUA,MAAM;AACxD,WAAO;AACT,MAAIK,EAAE,SAAS,YAAY,KAAKL,MAAM;AACpC,WAAO;AACT,MAAIK,EAAE,SAAS,MAAM,KAAKL,MAAM;AAC9B,WAAO;AACT,MAAI,CAAC,QAAQ,OAAO,QAAQ,KAAK,EAAE,SAASA,CAAC,KAAKK,MAAM,oCAAoCA,MAAM;AAChG,WAAO;AACT,MAAI,CAAC,OAAO,KAAK,EAAE,SAASL,CAAC,KAAKK,MAAM,cAAcA,MAAM;AAC1D,WAAO;AACT,MAAIL,MAAM,SAASK,MAAM,qBAAqBA,MAAM;AAClD,WAAO;AACT,MAAI,CAAC,OAAO,OAAO,OAAO,QAAQ,OAAO,OAAO,QAAQ,MAAM,EAAE,SAASL,CAAC,KAAKK,MAAM,cAAcA,MAAM,0BAA0BA,MAAM;AACvI,WAAO;AACT,MAAIL,MAAM,SAASK,MAAM,qBAAqBA,MAAM;AAClD,WAAO;AACT,MAAIA,EAAE,WAAW,QAAQ,KAAK,CAAC,OAAO,QAAQ,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK,EAAE,SAASL,CAAC;AAC9G,WAAO;AACT,MAAIK,EAAE,WAAW,QAAQ,KAAK,CAAC,OAAO,OAAO,OAAO,OAAO,QAAQ,KAAK,EAAE,SAASL,CAAC;AAClF,WAAO;AACT,MAAIA,MAAM,QAAQA,MAAM;AACtB,WAAO;AACT,MAAIK,MAAM,sBAAsBL,MAAM;AACpC,WAAO;AACT,QAAMF,IAAI;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACE,SAAOO,EAAE,WAAW,OAAO,KAAKP,EAAE,SAASE,CAAC,IAAI,SAAS;AAC3D;AACA,SAASM,GAAG,GAAG;AACb,MAAIR;AACJ,QAAME,MAAMF,IAAI,EAAE,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,MAAO;AAC3E,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,EACT,EAAIE,CAAC,KAAK;AACV;AACA,SAASO,GAAG,GAAG;AACb,MAAIT;AACJ,QAAME,MAAMF,IAAI,EAAE,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,EAAG,MAAM,GAAG,EAAE,CAAC,MAAM;AACzF,SAAO;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,KAAK;AAAA,EACT,EAAIE,CAAC,KAAK;AACV;AACA,SAASQ,GAAG,GAAG;AACb,SAAO,IAAI,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,OAAO,IAAI,IAAI,MAAM,QAAQ,CAAC,CAAC,QAAQ,IAAI,KAAK,OAAO,OAAO,QAAQ,CAAC,CAAC;AAClH;AACA,SAASC,GAAG,GAAG;AACb,MAAI,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC,KAAK,IAAI,EAAG,QAAO;AAC9C,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE,GAAG,IAAI,KAAK,MAAM,IAAI,EAAE;AACnD,SAAO,GAAG,CAAC,IAAI,EAAE,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC;AAC9C;AACA,SAASC,GAAG,GAAG;AACb,MAAIL;AACJ,YAAUA,IAAI,EAAE,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,MAAO,QAAQ,QAAQ,MAAM;AACjG;AACA,SAASM,GAAG,GAAG,IAAI,IAAI;AACrB,QAAM,IAAI,EAAE,aAAa,KAAKb,IAAI,EAAE,oBAAoB,IAAIM,IAAI,CAAA;AAChE,MAAIQ,IAAI,CAAA,GAAI,IAAI,IAAIC,IAAI,IAAIC,IAAI;AAChC,QAAMC,IAAI,EAAE;AACZ,SAAOD,IAAIC,KAAK;AACd,UAAM,IAAI,EAAED,CAAC;AACb,QAAID,GAAG;AACL,UAAI,MAAM,KAAK;AACb,YAAI,EAAEC,IAAI,CAAC,MAAM,KAAK;AACpB,eAAK,KAAKA,KAAK;AACf;AAAA,QACF;AACA,QAAAD,IAAI,IAAIC,KAAK;AACb;AAAA,MACF;AACA,WAAK,GAAGA,KAAK;AACb;AAAA,IACF;AACA,QAAI,MAAM,KAAK;AACb,MAAAD,IAAI,IAAIC,KAAK;AACb;AAAA,IACF;AACA,QAAI,MAAM,GAAG;AACX,MAAAF,EAAE,KAAK,CAAC,GAAG,IAAI,IAAIE,KAAK;AACxB;AAAA,IACF;AACA,QAAI,MAAM,MAAM;AACd,QAAEA,IAAI,CAAC,MAAM;AAAA,MACbA,KAAK,IAAIF,EAAE,KAAK,CAAC,GAAGR,EAAE,KAAKQ,CAAC,GAAGA,IAAI,CAAA,GAAI,IAAI,IAAIE,KAAK;AACpD;AAAA,IACF;AACA,QAAI,MAAM;AAAA,GACX;AACG,MAAAF,EAAE,KAAK,CAAC,GAAGR,EAAE,KAAKQ,CAAC,GAAGA,IAAI,CAAA,GAAI,IAAI,IAAIE,KAAK;AAC3C;AAAA,IACF;AACA,SAAK,GAAGA,KAAK;AAAA,EACf;AACA,QAAM,EAAE,SAAS,KAAKF,EAAE,SAAS,OAAOA,EAAE,KAAK,CAAC,GAAGR,EAAE,KAAKQ,CAAC,IAAIR,EAAE,SAAS,KAAK;AAC7E,UAAM,IAAIA,EAAEA,EAAE,SAAS,CAAC;AACxB,QAAI,EAAE,WAAW,KAAK,EAAE,CAAC,MAAM;AAC7B,MAAAA,EAAE,IAAG;AAAA;AAEL;AAAA,EACJ;AACA,MAAI,IAAI,IAAIY,IAAIZ;AAChB,EAAAN,KAAKM,EAAE,SAAS,MAAM,IAAIA,EAAE,CAAC,GAAGY,IAAIZ,EAAE,MAAM,CAAC;AAC7C,QAAMa,IAAI,KAAK;AAAA,IACb,EAAE;AAAA,IACF,GAAGD,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM;AAAA,IACxB;AAAA,EACJ;AACE,aAAW,KAAKA;AACd,WAAO,EAAE,SAASC,IAAK,GAAE,KAAK,EAAE;AAClC,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,MAAMD;AAAA,IACN,aAAaC;AAAA,IACb,WAAW;AAAA,EACf;AACA;AACA,SAASC,GAAE,GAAG;AACZ,QAAM,IAAI,aAAa,aAAa,IAAI,IAAI,WAAW,CAAC;AACxD,MAAI,EAAE,UAAU,KAAK,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM;AAC5D,WAAO,IAAI,YAAY,OAAO,EAAE,OAAO,CAAC;AAC1C,MAAI,EAAE,UAAU,KAAK,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM;AAC5C,WAAO,IAAI,YAAY,UAAU,EAAE,OAAO,CAAC;AAC7C,MAAI,EAAE,UAAU,KAAK,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM;AAC5C,WAAO,IAAI,YAAY,UAAU,EAAE,OAAO,CAAC;AAC7C,MAAI;AACF,WAAO,IAAI,YAAY,SAAS,EAAE,OAAO,GAAE,CAAE,EAAE,OAAO,CAAC;AAAA,EACzD,QAAQ;AAAA,EACR;AACA,MAAI;AACF,WAAO,IAAI,YAAY,KAAK,EAAE,OAAO,CAAC;AAAA,EACxC,QAAQ;AAAA,EACR;AACA,SAAO,IAAI,YAAY,SAAS,EAAE,OAAO,IAAI,EAAE,OAAO,CAAC;AACzD;AAEA,eAAeC,GAAG,GAAG,GAAG;AACtB,QAAM,IAAI,MAAM,MAAM,GAAG,CAAC;AAC1B,MAAI,CAAC,EAAE,GAAI,OAAM,IAAI,MAAM,SAAS,EAAE,MAAM,EAAE;AAC9C,QAAMrB,IAAI,MAAM,EAAE,YAAW;AAC7B,SAAOoB,GAAEpB,CAAC;AACZ;AACA,SAASsB,GAAE,GAAG;AACZ,QAAM,IAAI,EAAE,KAAI,EAAG,QAAQ,KAAK,GAAG,GAAG,IAAI,EAAE,MAAM,GAAG,EAAE,IAAI,CAACtB,MAAMA,EAAE,MAAM;AAC1E,MAAI,EAAE,WAAW,GAAG;AAClB,UAAM,CAACA,GAAGM,GAAGQ,CAAC,IAAI;AAClB,WAAO,OAAOd,CAAC,IAAI,OAAO,OAAOM,CAAC,IAAI,KAAK,OAAOQ,CAAC;AAAA,EACrD;AACA,MAAI,EAAE,WAAW,GAAG;AAClB,UAAM,CAACd,GAAGM,CAAC,IAAI;AACf,WAAO,OAAON,CAAC,IAAI,KAAK,OAAOM,CAAC;AAAA,EAClC;AACA,SAAO,OAAO,CAAC,KAAK;AACtB;AACA,SAASiB,GAAG,GAAG;AACb,MAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAG,QAAO;AAClC,QAAM,IAAI,KAAK,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,KAAKvB,IAAI,KAAK,MAAM,IAAI,GAAG,IAAI,IAAIM,IAAI,KAAK,MAAM,IAAI,GAAG,IAAI,IAAIQ,IAAI,KAAK,MAAM,IAAI,IAAI,GAAG,IAAI,CAACC,GAAGC,IAAI,MAAMD,EAAE,SAAQ,EAAG,SAASC,GAAG,GAAG;AAChL,SAAO,GAAG,EAAEF,CAAC,CAAC,IAAI,EAAER,CAAC,CAAC,IAAI,EAAEN,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC3C;AACA,MAAMwB,KAAI,uFAAuFC,KAAI;AACrG,SAASC,GAAE,GAAG;AACZ,QAAM,IAAI,EAAE,QAAQ,WAAW,EAAE,EAAE,UAAS;AAC5C,SAAO,UAAU,KAAK,CAAC,IAAI,QAAQ,WAAW,KAAK,CAAC,KAAK,eAAe,KAAK,CAAC,IAAI,SAAS,qBAAqB,KAAK,CAAC,KAAK,cAAc,KAAK,CAAC,IAAI,6BAA6B,KAAK,CAAC,IAAI,QAAQ,QAAQD,GAAE,KAAK,CAAC,KAAK,6CAA6C,KAAK,CAAC,IAAI,oCAAoC,KAAK,CAAC,IAAI,SAAS,QAAQ;AAC/U;AACA,SAASE,GAAE,GAAG,GAAG;AACf,QAAM3B,IAAI,EAAE,QAAQ,UAAU;AAAA,CAC/B,EAAE,QAAQ,WAAW,EAAE,EAAE,MAAM;AAAA,CAC/B,GAAGM,IAAI,CAAA;AACN,MAAIQ,GAAGc,IAAI;AACX,MAAI,MAAM,OAAO;AACf,UAAMb,IAAI,CAAA;AACV,WAAOa,IAAI5B,EAAE,UAAUA,EAAE4B,CAAC,EAAE,KAAI,MAAO;AACrC,MAAAb,EAAE,KAAKf,EAAE4B,CAAC,CAAC,GAAGA;AAChB,SAAKd,IAAIC,EAAE,KAAK;AAAA,CACnB,GAAGa,IAAI5B,EAAE,UAAUA,EAAE4B,CAAC,EAAE,KAAI,MAAO,KAAM,CAAAA;AAAA,EACxC;AACA,SAAOA,IAAI5B,EAAE,UAAU;AACrB,WAAO4B,IAAI5B,EAAE,UAAUA,EAAE4B,CAAC,EAAE,KAAI,MAAO,KAAM,CAAAA;AAC7C,QAAIA,KAAK5B,EAAE,OAAQ;AACnB,QAAIe,GAAG,IAAI;AACX,QAAIS,GAAE,KAAKxB,EAAE4B,CAAC,CAAC;AACb,UAAI5B,EAAE4B,CAAC,GAAGA;AAAA,aACHb,IAAIf,EAAE4B,CAAC,EAAE,KAAI,KAAM,QAAQA,KAAKA,IAAI5B,EAAE,UAAUwB,GAAE,KAAKxB,EAAE4B,CAAC,CAAC;AAClE,UAAI5B,EAAE4B,CAAC,GAAGA;AAAA;AAEV;AACF,QAAI,CAAC,EAAG;AACR,UAAMX,IAAI,EAAE,MAAM,+BAA+B;AACjD,QAAI,CAACA,EAAG;AACR,UAAMY,IAAIP,GAAEL,EAAE,CAAC,CAAC,GAAGC,IAAII,GAAEL,EAAE,CAAC,CAAC,GAAGE,IAAI,CAAA;AACpC,WAAOS,IAAI5B,EAAE,UAAUA,EAAE4B,CAAC,EAAE,KAAI,MAAO;AACrC,MAAAT,EAAE,KAAKnB,EAAE4B,CAAC,CAAC,GAAGA;AAChB,IAAAtB,EAAE,KAAK,EAAE,IAAIS,GAAG,OAAOc,GAAG,KAAKX,GAAG,MAAMC,EAAE,KAAK;AAAA,CAClD,GAAG;AAAA,EACF;AACA,SAAO,EAAE,QAAQ,GAAG,MAAMb,GAAG,QAAQQ,EAAC;AACxC;AACA,SAASgB,GAAE,GAAG,GAAG,GAAG;AAClB,QAAM9B,IAAI,OAAO,CAAC,GAAGM,IAAI,OAAO,CAAC;AACjC,MAAIQ,IAAI;AACR,MAAI,GAAG;AACL,UAAM,KAAK,IAAI,OAAO,MAAM,GAAG,CAAC;AAChC,IAAAA,IAAI,OAAO,CAAC;AAAA,EACd;AACA,SAAOd,IAAI,KAAKM,IAAIQ,IAAI;AAC1B;AACA,SAASiB,GAAE,GAAG,GAAG;AACf,QAAM,IAAI,mDAAmD,KAAK,EAAE,KAAI,CAAE;AAC1E,MAAI,CAAC,EAAG,QAAO;AACf,QAAM/B,IAAI,EAAE,CAAC,EAAE,eAAeM,IAAI,EAAE,CAAC,EAAE,KAAI;AAC3C,MAAI,EAAE,SAASN,CAAC,IAAIM,GAAGN,MAAM,UAAU;AACrC,UAAMc,IAAI,OAAOR,CAAC;AAClB,UAAMQ,CAAC,MAAM,EAAE,WAAWA;AAAA,EAC5B;AACA,SAAO;AACT;AACA,SAASkB,GAAE,GAAG;AACZ,QAAMzB,IAAI,EAAE,QAAQ,UAAU;AAAA,CAC/B,EAAE,QAAQ,WAAW,EAAE,EAAE,MAAM;AAAA,CAC/B,GAAGP,IAAI,EAAE,UAAU,IAAI,UAAU,EAAC,GAAIM,IAAI,8CAA8CQ,IAAI,CAAA;AAC3F,aAAWE,KAAKT,GAAG;AACjB,UAAMU,IAAID,EAAE,KAAI;AAChB,QAAI,CAACC,KAAKc,GAAEd,GAAGjB,CAAC,EAAG;AACnB,UAAM6B,IAAI,CAAA;AACV,QAAIX,IAAI;AACR,IAAAZ,EAAE,YAAY;AACd,QAAIa;AACJ,YAAQA,IAAIb,EAAE,KAAKW,CAAC,OAAO,QAAQE,EAAE,UAAUD;AAC7C,MAAAW,EAAE,KAAKC,GAAEX,EAAE,CAAC,GAAGA,EAAE,CAAC,GAAGA,EAAE,CAAC,CAAC,CAAC,GAAGD,IAAIC,EAAE,QAAQA,EAAE,CAAC,EAAE;AAClD,QAAIU,EAAE,WAAW,EAAG;AACpB,UAAMI,IAAIhB,EAAE,MAAMC,CAAC,EAAE,KAAI;AACzB,eAAW,KAAKW;AACd,MAAAf,EAAE,KAAK,EAAE,OAAO,GAAG,MAAMmB,GAAG;AAAA,EAChC;AACA,EAAAnB,EAAE,KAAK,CAACE,GAAGC,MAAMD,EAAE,QAAQC,EAAE,KAAK;AAClC,QAAMW,IAAI5B,EAAE,WAAW;AACvB,SAAO,EAAE,QAAQ,OAAO,MAAMc,EAAE,IAAI,CAACE,GAAGC,MAAM;AAC5C,UAAMY,IAAI,KAAK,IAAI,GAAGb,EAAE,QAAQY,CAAC,GAAGV,IAAIJ,EAAEG,IAAI,CAAC,GAAGE,IAAID,IAAI,KAAK,IAAIW,GAAGX,EAAE,QAAQU,CAAC,IAAIC,IAAI;AACzF,WAAO,EAAE,OAAOA,GAAG,KAAKV,GAAG,MAAMH,EAAE,KAAI;AAAA,EACzC,CAAC,GAAG,UAAUhB,EAAE,SAAQ;AAC1B;AACA,SAASkC,GAAE,GAAG;AACZ,QAAM3B,IAAI,EAAE,QAAQ,UAAU;AAAA,CAC/B,EAAE,QAAQ,WAAW,EAAE,EAAE,MAAM;AAAA,CAC/B,GAAGP,IAAI,EAAE,UAAU,CAAA,GAAI,UAAU,KAAKM,IAAI,8CAA8CQ,IAAI,4CAA4Cc,IAAI,CAAA;AAC3I,aAAWX,KAAKV,GAAG;AACjB,UAAMsB,IAAIZ,EAAE,KAAI;AAChB,QAAI,CAACY,KAAKE,GAAEF,GAAG7B,CAAC,EAAG;AACnB,UAAMkB,IAAI,CAAA;AACV,QAAIC,IAAI;AACR,IAAAb,EAAE,YAAY;AACd,QAAI2B;AACJ,YAAQA,IAAI3B,EAAE,KAAKuB,CAAC,OAAO,QAAQI,EAAE,UAAUd;AAC7C,MAAAD,EAAE,KAAKY,GAAEG,EAAE,CAAC,GAAGA,EAAE,CAAC,GAAGA,EAAE,CAAC,CAAC,CAAC,GAAGd,IAAIc,EAAE,QAAQA,EAAE,CAAC,EAAE;AAClD,QAAIf,EAAE,WAAW,EAAG;AACpB,UAAM,IAAIW,EAAE,MAAMV,CAAC;AACnB,eAAWgB,KAAKjB;AACd,MAAAU,EAAE,KAAK,EAAE,OAAOO,GAAG,KAAK,GAAG;AAAA,EAC/B;AACA,EAAAP,EAAE,KAAK,CAACX,GAAGY,MAAMZ,EAAE,QAAQY,EAAE,KAAK;AAClC,QAAMd,IAAIf,EAAE,WAAW;AACvB,SAAO,EAAE,QAAQ,QAAQ,MAAM4B,EAAE,IAAI,CAACX,GAAGY,MAAM;AAC7C,UAAMX,IAAI,CAAA;AACV,QAAIC,IAAI,IAAIc,IAAI,GAAG,IAAI;AACvB,IAAAnB,EAAE,YAAY;AACd,QAAIqB;AACJ,YAAQA,IAAIrB,EAAE,KAAKG,EAAE,GAAG,OAAO,QAAQ;AACrC,YAAMmB,IAAInB,EAAE,IAAI,MAAMgB,GAAGE,EAAE,KAAK;AAChC,YAAM,QAAQC,KAAKlB,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAIH,CAAC,GAAG,MAAMqB,EAAC,CAAE,GAAGjB,KAAKiB,GAAG,IAAIN,GAAEK,EAAE,CAAC,GAAGA,EAAE,CAAC,GAAGA,EAAE,CAAC,CAAC,GAAGF,IAAIE,EAAE,QAAQA,EAAE,CAAC,EAAE;AAAA,IACzH;AACA,UAAME,IAAIpB,EAAE,IAAI,MAAMgB,CAAC;AACvB,UAAM,QAAQI,KAAKnB,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAIH,CAAC,GAAG,MAAMsB,EAAC,CAAE,GAAGlB,KAAKkB;AACxE,UAAMC,IAAI,KAAK,IAAI,GAAGrB,EAAE,QAAQF,CAAC,GAAGwB,IAAIX,EAAEC,IAAI,CAAC,GAAGW,IAAID,IAAI,KAAK,IAAID,GAAGC,EAAE,QAAQxB,CAAC,IAAIuB,IAAI;AACzF,WAAO;AAAA,MACL,OAAOA;AAAA,MACP,KAAKE;AAAA,MACL,MAAMrB,EAAE,KAAI;AAAA,MACZ,OAAOD,EAAE,SAASA,IAAI;AAAA,IAC5B;AAAA,EACE,CAAC,GAAG,UAAUlB,EAAE,SAAQ;AAC1B;AACA,SAASyC,GAAE,GAAG;AACZ,QAAM,IAAI,EAAE,KAAI,EAAG,MAAM,GAAG;AAC5B,SAAO,EAAE,WAAW,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC,IAAI,OAAO,OAAO,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC,EAAE,QAAQ,KAAK,GAAG,CAAC;AACrG;AACA,SAASC,GAAE,GAAG,GAAG;AACf,QAAM1C,IAAI,EAAE,QAAQ,UAAU;AAAA,CAC/B,EAAE,QAAQ,WAAW,EAAE,EAAE,MAAM;AAAA,CAC/B;AACC,MAAIM,IAAI,IAAIQ,IAAI,CAAA;AAChB,QAAMc,IAAI,IAAIb,IAAI,CAAA;AAClB,aAAW,KAAKf,GAAG;AACjB,UAAMiB,IAAI,EAAE,QAAQ,QAAQ,EAAE,GAAGY,IAAIZ,EAAE,KAAI,GAAIC,IAAI,oBAAoB,KAAKW,CAAC;AAC7E,QAAIX,GAAG;AACL,MAAAZ,IAAIY,EAAE,CAAC,EAAE,YAAW,GAAIH,EAAE,KAAKE,CAAC;AAChC;AAAA,IACF;AACA,QAAIX,MAAM,UAAU;AAClB,MAAAS,EAAE,KAAKE,CAAC;AACR;AAAA,IACF;AACA,UAAME,IAAI,oBAAoB,KAAKU,CAAC;AACpC,QAAIV,GAAG;AACL,MAAAL,IAAIK,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,CAACwB,MAAMA,EAAE,KAAI,CAAE;AACvC;AAAA,IACF;AACA,UAAMV,IAAI,gCAAgC,KAAKJ,CAAC;AAChD,QAAI,CAACI,KAAKA,EAAE,CAAC,EAAE,YAAW,MAAO,aAAanB,EAAE,WAAW,EAAG;AAC9D,UAAM8B,IAAI9B,EAAE,QAAQqB,IAAIF,EAAE,CAAC,EAAE,MAAM,GAAG,GAAGI,IAAIF,EAAE,MAAM,GAAGS,IAAI,CAAC,GAAGN,IAAIH,EAAE,MAAMS,IAAI,CAAC,EAAE,KAAK,GAAG,GAAGL,IAAI,CAAA;AAClG,IAAAzB,EAAE,QAAQ,CAAC6B,GAAGE,MAAM;AAClB,MAAAN,EAAEI,CAAC,IAAIE,MAAMD,IAAI,IAAIN,IAAID,EAAEQ,CAAC,KAAK;AAAA,IACnC,CAAC;AACD,UAAML,IAAIC,GAAEF,EAAE,SAAS,EAAE,GAAGH,IAAIK,GAAEF,EAAE,OAAO,EAAE,GAAGO,KAAKP,EAAE,QAAQ,IAAI,QAAQ,QAAQ;AAAA,CACtF,EAAE,QAAQ,QAAQ;AAAA,CAClB,EAAE,QAAQ,QAAQ,GAAG,EAAE,QAAQ,cAAc,EAAE;AAC5C,IAAAX,EAAE,KAAK,EAAE,OAAOY,GAAG,KAAKJ,GAAG,MAAMU,GAAG,OAAOP,EAAE,MAAK,CAAE;AAAA,EACtD;AACA,SAAOX,EAAE,KAAK,CAAC,GAAGX,MAAM,EAAE,QAAQA,EAAE,KAAK,GAAG;AAAA,IAC1C,QAAQ;AAAA,IACR,MAAMW;AAAA,IACN,QAAQb,EAAE,KAAK;AAAA,CAClB,EAAE,KAAI,KAAM;AAAA,EACb;AACA;AACA,SAASgC,GAAE,GAAG;AACZ,QAAM,IAAI,EAAE,KAAI;AAChB,MAAI,CAAC,EAAG,QAAO;AACf,QAAM,IAAI,mCAAmC,KAAK,CAAC;AACnD,MAAI,GAAG;AACL,UAAMzC,IAAI,OAAO,EAAE,CAAC,CAAC,GAAGQ,IAAI,EAAE,CAAC,EAAE,YAAW;AAC5C,WAAOA,MAAM,MAAMR,IAAI,OAAOQ,MAAM,MAAMR,IAAI,KAAKQ,MAAM,OAAOR,IAAI,MAAMA;AAAA,EAC5E;AACA,QAAMN,IAAI,EAAE,MAAM,GAAG;AACrB,SAAOA,EAAE,WAAW,IAAI,OAAOA,EAAE,CAAC,CAAC,IAAI,OAAO,OAAOA,EAAE,CAAC,CAAC,IAAI,KAAK,OAAOA,EAAE,CAAC,CAAC,IAAIA,EAAE,WAAW,IAAI,OAAOA,EAAE,CAAC,CAAC,IAAI,KAAK,OAAOA,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK;AACpJ;AACA,SAASgD,GAAE,GAAG;AACZ,MAAI,OAAO,YAAY;AACrB,UAAM,IAAI,MAAM,+CAA+C;AACjE,QAAM,IAAI,IAAI,UAAS,EAAG,gBAAgB,GAAG,iBAAiB;AAC9D,MAAI,EAAE,qBAAqB,aAAa,EAAE,SAAS;AACjD,UAAM,IAAI,MAAM,sBAAsB;AACxC,QAAMhD,IAAI,EAAE,qBAAqB,GAAG,GAAGM,IAAI,CAAA;AAC3C,WAASQ,IAAI,GAAGA,IAAId,EAAE,QAAQc,KAAK;AACjC,UAAMc,IAAI5B,EAAEc,CAAC,GAAGC,IAAIa,EAAE,aAAa,OAAO,KAAK,IAAI,IAAIA,EAAE,aAAa,KAAK,KAAK,IAAIX,IAAIW,EAAE,aAAa,KAAK,KAAK,IAAIC,IAAIkB,GAAEhC,CAAC;AAC5H,QAAIG;AACJ,QAAIA,IAAI6B,GAAE,CAAC,IAAI9B,IAAIC,IAAIW,IAAIkB,GAAE9B,CAAC,IAAIC,IAAIW,IAAI;AAC1C,QAAIV,IAAI;AACR,IAAAS,EAAE,WAAW,QAAQ,CAACgB,MAAM;AAC1B,UAAIA,EAAE,aAAa;AACjB,QAAAzB,KAAKyB,EAAE,aAAa;AAAA,eACbA,EAAE,aAAa,GAAG;AACzB,cAAMT,IAAIS;AACV,QAAAT,EAAE,QAAQ,kBAAkB,OAAOhB,KAAK;AAAA,IAC5CA,KAAKgB,EAAE,eAAe;AAAA,MACpB;AAAA,IACF,CAAC;AACD,UAAMF,IAAId,EAAE,QAAQ,WAAW,GAAG,EAAE,QAAQ,QAAQ;AAAA,CACvD,EAAE,KAAI;AACH,KAACc,KAAKJ,KAAKX,MAAMZ,EAAE,KAAK,EAAE,OAAOuB,GAAG,KAAKX,GAAG,MAAMe,EAAC,CAAE;AAAA,EACvD;AACA,SAAO3B,EAAE,KAAK,CAACQ,GAAGc,MAAMd,EAAE,QAAQc,EAAE,KAAK,GAAG,EAAE,QAAQ,QAAQ,MAAMtB,EAAC;AACvE;AACA,SAAS2C,GAAG,GAAG,GAAG;AAChB,UAAQ,KAAKvB,GAAE,CAAC,GAAC;AAAA,IACf,KAAK;AACH,aAAOM,GAAE,CAAC;AAAA,IACZ,KAAK;AACH,aAAOE,GAAE,CAAC;AAAA,IACZ,KAAK;AACH,aAAOQ,GAAE,GAAG,KAAK;AAAA,IACnB,KAAK;AACH,aAAOA,GAAE,GAAG,KAAK;AAAA,IACnB,KAAK;AACH,aAAOM,GAAE,CAAC;AAAA,IACZ,KAAK;AACH,aAAOrB,GAAE,GAAG,KAAK;AAAA,IACnB,KAAK;AAAA,IACL;AACE,aAAOA,GAAE,GAAG,KAAK;AAAA,EACvB;AACA;AACA,eAAeuB,GAAG,GAAG;AACnB,SAAOC,GAAE,UAAU,CAAC;AACtB;AACA,SAASC,GAAG,GAAG;AACb,QAAM,IAAI,CAAA;AACV,SAAO,EAAE,QAAQ,CAAC,GAAGpD,MAAM;AACzB,QAAIkB;AACJ,UAAMZ,IAAIN,EAAE,KAAKc,IAAIR,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,IAAI,MAAM,GAAGsB,IAAItB,IAAIQ,EAAE,QAAQ,OAAO,EAAE,IAAIA,GAAGC,IAAIa,EAAE,YAAY,GAAG,GAAGZ,IAAID,KAAK,IAAIa,EAAE,MAAMb,IAAI,CAAC,IAAIa,GAAGX,IAAIF,KAAK,IAAIa,EAAE,MAAM,GAAGb,CAAC,IAAI,IAAIc,IAAIvB,IAAI,MAAMY,IAAIlB,EAAE,UAAU,OAAO,SAASkB,EAAE,qBAAqB;AAC3P,MAAE,KAAK;AAAA,MACL,MAAMJ;AAAA,MACN,MAAME;AAAA,MACN,KAAKC;AAAA,MACL,OAAOX;AAAA,MACP,MAAMuB;AAAA,MACN,MAAM7B,EAAE;AAAA,IACd,CAAK;AAAA,EACH,CAAC,GAAG;AACN;AACA,SAASqD,GAAG,GAAG;AACb,QAAM,IAAI,EAAE,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,UAAU,CAAA,GAAI,MAAM,EAAC,GAAI,IAAoB,oBAAI,IAAG;AAC/F,IAAE,IAAI,IAAI,CAAC;AACX,QAAMrD,IAAI,CAACc,MAAM;AACf,QAAI,EAAE,IAAIA,CAAC,EAAG,QAAO,EAAE,IAAIA,CAAC;AAC5B,UAAM,IAAIA,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO;AACrC,QAAIC,IAAI,GAAGC,IAAI;AACf,eAAWC,KAAK,GAAG;AACjB,MAAAD,IAAIA,IAAI,GAAGA,CAAC,IAAIC,CAAC,KAAKA;AACtB,UAAI,IAAI,EAAE,IAAID,CAAC;AACf,YAAM,IAAI,EAAE,MAAMC,GAAG,MAAMD,IAAI,KAAK,OAAO,IAAI,UAAU,CAAA,GAAI,MAAM,EAAC,GAAID,EAAE,SAAS,KAAK,CAAC,GAAG,EAAE,IAAIC,GAAG,CAAC,IAAID,IAAI;AAAA,IAChH;AACA,WAAOA;AAAA,EACT;AACA,aAAWD,KAAK,GAAG;AACjB,QAAIA,EAAE,OAAO;AACX,MAAAd,EAAEc,EAAE,KAAK,QAAQ,OAAO,EAAE,CAAC;AAC3B;AAAA,IACF;AACA,IAAAd,EAAEc,EAAE,GAAG,EAAE,SAAS,KAAK;AAAA,MACrB,MAAMA,EAAE;AAAA,MACR,MAAMA,EAAE;AAAA,MACR,OAAO;AAAA,MACP,MAAMA,EAAE;AAAA,IACd,CAAK;AAAA,EACH;AACA,QAAMR,IAAI,CAACQ,MAAM;AACf,QAAIA,EAAE,UAAU;AACd,MAAAA,EAAE,SAAS,KAAK,CAAC,GAAGC,MAAM,EAAE,UAAUA,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,EAAE,KAAK,cAAcA,EAAE,IAAI,CAAC;AAC/F,iBAAW,KAAKD,EAAE,SAAU,CAAAR,EAAE,CAAC;AAAA,IACjC;AAAA,EACF;AACA,SAAOA,EAAE,CAAC,GAAG;AACf;AAOA,eAAegD,GAAG,GAAG,GAAG,GAAG;AACzB,QAAMtD,IAAI,EAAE,KAAK,CAAC;AAClB,MAAI,CAACA,EAAG,OAAM,IAAI,MAAM,wBAAwB,CAAC,EAAE;AACnD,QAAMM,IAAI,MAAMN,EAAE,MAAM,aAAa;AACrC,SAAO,IAAI,KAAK,CAACM,CAAC,GAAG,IAAI,EAAE,MAAM,EAAC,IAAK,MAAM;AAC/C;AACA,SAASiD,GAAE,GAAG;AACZ,SAAO,IAAI,EAAE,WAAW,GAAG,IAAI,IAAI,EAAE,WAAW,IAAI,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,WAAW,IAAI,MAAM,IAAI,YAAY;AACpH;AACA,MAAMC,KAAI;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAGC,KAAI;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,SAASC,GAAE,GAAG,GAAG;AACf,QAAM,IAAI,SAAS,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG1D,IAAI,SAAS,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE,GAAGM,IAAI,SAAS,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE,GAAGQ,IAAI,CAACG,MAAM,IAAI,IAAI,KAAK,MAAMA,KAAK,IAAI,EAAE,IAAI,KAAK,MAAMA,KAAK,MAAMA,KAAK,CAAC,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,GAAGH,EAAE,CAAC,CAAC,CAAC,GAAGC,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,GAAGD,EAAEd,CAAC,CAAC,CAAC,GAAGgB,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,GAAGF,EAAER,CAAC,CAAC,CAAC;AAChT,SAAO,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,IAAIS,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,IAAIC,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAC3G;AACA,SAAS2C,GAAE,GAAG;AACZ,MAAI,KAAK,EAAE,SAAS,aAAa,EAAE,YAAY,SAAS;AACtD,UAAM,IAAI,EAAE;AACZ,QAAI;AACF,aAAOC,GAAE,CAAC;AAAA,EACd;AACF;AACA,SAASA,GAAE,GAAG;AACZ,MAAI,GAAG;AACL,QAAI,UAAU,KAAK,OAAO,EAAE,QAAQ,YAAY,EAAE;AAChD,aAAOL,GAAE,EAAE,IAAI;AACjB,QAAI,WAAW,KAAK,OAAO,EAAE,SAAS,UAAU;AAC9C,YAAM,IAAIC,GAAE,EAAE,KAAK,KAAK,UAAU,IAAI,UAAU,KAAK,OAAO,EAAE,QAAQ,WAAW,EAAE,OAAO;AAC1F,aAAO,OAAO,MAAM,IAAIE,GAAE,GAAG,CAAC,IAAI;AAAA,IACpC;AACA,QAAI,aAAa,KAAK,OAAO,EAAE,WAAW,UAAU;AAClD,YAAM,IAAID,GAAE,EAAE,OAAO;AACrB,UAAI,EAAG,QAAO,MAAM;AAAA,IACtB;AAAA,EACF;AACF;AACA,SAASI,GAAE,GAAG;AACZ,MAAI,CAAC,KAAK,CAAC,EAAE,MAAO;AACpB,QAAM,IAAID,GAAE,EAAE,KAAK,KAAK;AACxB,SAAO,CAAC,EAAE,OAAO,CAAC;AACpB;AACA,SAASE,GAAE,GAAG;AACZ,QAAM,IAAI,CAAA;AACV,MAAI,IAAI;AACR,MAAI,EAAE,MAAM;AACV,UAAMxD,IAAI,EAAE;AACZ,SAAKA,EAAE,QAAQA,EAAE,QAAQA,EAAE,QAAQA,EAAE,YAAY,IAAI,IAAI,EAAE,OAAO,IAAIA,EAAE,SAAS,EAAE,KAAK,OAAOA,EAAE,OAAOA,EAAE,SAAS,EAAE,KAAK,OAAOA,EAAE,OAAOA,EAAE,SAAS,EAAE,KAAK,OAAO,KAAKA,EAAE,WAAW,EAAE,KAAK,SAAS,MAAMA,EAAE,OAAO;AAClN,YAAMQ,IAAI8C,GAAEtD,EAAE,KAAK;AACnB,MAAAQ,MAAM,IAAI,IAAI,EAAE,QAAQA;AAAA,IAC1B;AACA,IAAAR,EAAE,cAAc,IAAI,IAAI,EAAE,YAAY,KAAKA,EAAE,WAAW,IAAI,IAAI,EAAE,SAAS;AAAA,EAC7E;AACA,QAAMN,IAAI2D,GAAE,EAAE,IAAI;AAClB,MAAI3D,MAAM,IAAI,IAAI,EAAE,UAAUA,IAAI,EAAE,WAAW;AAC7C,UAAMM,IAAI,EAAE;AACZ,IAAAA,EAAE,eAAe,IAAI,IAAI,EAAE,QAAQA,EAAE,aAAaA,EAAE,aAAa,IAAI,IAAI,EAAE,SAASA,EAAE,WAAWA,EAAE,aAAa,IAAI,IAAI,EAAE,WAAW;AAAA,EACvI;AACA,MAAI,EAAE,QAAQ;AACZ,UAAMA,IAAI,CAAA;AACV,QAAIQ,IAAI;AACR,UAAM,IAAI,CAAC,OAAO,UAAU,QAAQ,OAAO;AAC3C,eAAWC,KAAK,GAAG;AACjB,YAAMC,IAAI6C,GAAE,EAAE,OAAO9C,CAAC,CAAC;AACvB,MAAAC,MAAMV,EAAES,CAAC,IAAIC,GAAGF,IAAI;AAAA,IACtB;AACA,IAAAA,MAAM,IAAI,IAAI,EAAE,SAASR;AAAA,EAC3B;AACA,SAAO,IAAI,IAAI;AACjB;AACA,SAASyD,GAAE,GAAG;AACZ,SAAO,KAAK,UAAU,CAAC;AACzB;AACA,SAASC,GAAG,GAAG,GAAG,GAAG;AACnB,QAAMhE,IAAI8D,GAAE,CAAC;AACb,MAAI,CAAC9D,EAAG,QAAO;AACf,QAAMM,IAAIyD,GAAE/D,CAAC,GAAGc,IAAI,EAAE,IAAIR,CAAC;AAC3B,MAAIQ,MAAM,OAAQ,QAAOA;AACzB,QAAM,IAAI,EAAE;AACZ,SAAO,EAAE,KAAKd,CAAC,GAAG,EAAE,IAAIM,GAAG,CAAC,GAAG;AACjC;AACA,SAAS2D,GAAG,GAAG;AACb,QAAM,IAAI,EAAE;AACZ,MAAI,KAAK,KAAM,QAAO;AACtB,MAAI,OAAO,KAAK,SAAU,QAAO;AACjC,MAAI,OAAO,KAAK,SAAU,QAAO,OAAO,CAAC;AACzC,MAAI,OAAO,KAAK,UAAW,QAAO,IAAI,SAAS;AAC/C,MAAI,aAAa;AACf,WAAO,EAAE,mBAAkB;AAC7B,MAAI,OAAO,KAAK,YAAY,aAAa,GAAG;AAC1C,UAAM,IAAI,EAAE;AACZ,WAAO,KAAK,OAAO,OAAO,CAAC,IAAI;AAAA,EACjC;AACA,SAAO,OAAO,KAAK,YAAY,cAAc,IAAI,EAAE,SAAS,IAAI,CAACjE,MAAMA,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,OAAO,KAAK,YAAY,eAAe,IAAI,EAAE,QAAQ,KAAK,OAAO,KAAK,YAAY,WAAW,IAAI,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC;AACvN;AACA,SAASkE,GAAG,GAAG;AACb,QAAM,IAAI,EAAE,MAAM,GAAG,GAAG,IAAIC,GAAE,EAAE,CAAC,CAAC,GAAGnE,IAAI,EAAE,CAAC,IAAImE,GAAE,EAAE,CAAC,CAAC,IAAI;AAC1D,SAAO;AAAA,IACL,KAAK,EAAE;AAAA,IACP,MAAM,EAAE;AAAA,IACR,QAAQnE,EAAE;AAAA,IACV,OAAOA,EAAE;AAAA,EACb;AACA;AACA,SAASmE,GAAE,GAAG;AACZ,QAAM,IAAI,EAAE,MAAM,iBAAiB;AACnC,MAAI,CAAC,EAAG,QAAO,EAAE,KAAK,GAAG,KAAK,EAAC;AAC/B,QAAM,IAAI,EAAE,CAAC,GAAGnE,IAAI,SAAS,EAAE,CAAC,GAAG,EAAE;AACrC,MAAIM,IAAI;AACR,WAASQ,IAAI,GAAGA,IAAI,EAAE,QAAQA;AAC5B,IAAAR,IAAIA,IAAI,MAAM,EAAE,WAAWQ,CAAC,IAAI;AAClC,SAAO,EAAE,KAAKd,GAAG,KAAKM,EAAC;AACzB;AACA,SAAS8D,GAAG,GAAG;AACb,QAAM,IAAI,CAAA;AACV,SAAO,EAAE,UAAU,CAAC,MAAM;AACxB,UAAMpE,IAAI,CAAA,GAAIM,IAAoB,oBAAI,IAAG,GAAIQ,IAAI,CAAA,GAAI,IAAI,CAAA,GAAIC,IAAI,CAAA,GAAIC,IAAI,EAAE;AAC3E,aAASG,IAAI,GAAGA,KAAKH,GAAGG,KAAK;AAC3B,YAAM,IAAI,EAAE,UAAUA,CAAC;AACvB,QAAE,UAAUJ,EAAE,OAAOI,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,EAAE,QAAQ,GAAG,EAAC;AAAA,IACnE;AACA,IAAAJ,EAAE,MAAM,KAAK,IAAIC,GAAG,EAAE;AACtB,UAAMC,IAAoB,oBAAI,IAAG,GAAI,IAAI,EAAE,OAAOC,KAAK,KAAK,OAAO,SAAS,EAAE,WAAW,CAAA;AACzF,eAAWC,KAAKD,GAAG;AACjB,MAAAJ,EAAE,KAAKK,CAAC;AACR,YAAM,EAAE,KAAK,GAAG,MAAMyB,GAAG,QAAQT,GAAG,OAAOE,EAAC,IAAK6B,GAAG/C,CAAC,GAAGmB,IAAIH,IAAI,GAAGI,IAAIF,IAAIO;AAC3E,MAAA3B,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI2B,IAAI,CAAC,IAAI,CAACN,GAAGC,CAAC,CAAC;AAAA,IACnC;AACA,MAAE,QAAQ,EAAE,cAAc,GAAE,GAAI,CAACpB,GAAG,MAAM;AACxC,YAAMyB,IAAI,IAAI,GAAGT,IAAI,CAAA;AACrB,MAAAhB,EAAE,SAAS,EAAE,cAAc,GAAE,GAAI,CAACmB,GAAGC,MAAM;AACzC,cAAMC,IAAID,IAAI;AACd,YAAID,EAAE,YAAYA,EAAE,WAAWA,EAAG;AAClC,cAAMF,IAAI6B,GAAG3B,CAAC,GAAGQ,IAAIkB,GAAG1B,GAAGtC,GAAGM,CAAC,GAAGqC,IAAI,EAAE,MAAMP,EAAC;AAC/C,QAAAU,MAAM,OAAOH,EAAE,QAAQG;AACvB,cAAMD,IAAI,GAAGD,CAAC,IAAIJ,CAAC;AACnB,QAAAvB,EAAE,IAAI4B,CAAC,MAAMF,EAAE,QAAQ1B,EAAE,IAAI4B,CAAC,IAAIV,EAAE,OAAOK,CAAC,CAAC,IAAIG;AAAA,MACnD,CAAC;AACD,YAAMN,IAAI,EAAE,OAAOF,EAAC;AACpB,MAAAhB,EAAE,WAAWkB,EAAE,SAAS,KAAK,MAAMlB,EAAE,SAAS,KAAK,IAAI,EAAE,OAAOyB,CAAC,CAAC,IAAIP;AAAA,IACxE,CAAC,GAAG,EAAE,KAAK;AAAA,MACT,MAAM,EAAE;AAAA,MACR,QAAQrC;AAAA,MACR,QAAQc;AAAA,MACR,MAAM;AAAA,MACN,MAAMC;AAAA,IACZ,CAAK;AAAA,EACH,CAAC,GAAG;AACN;AACA,SAASsD,GAAG,GAAG,GAAG,IAAI,UAAU;AAC9B,QAAMrE,IAAI,EAAE,SAAS,GAAGc,IAAId,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,GAAE,EAAE,CAAE,IAAI,CAAA,GAAI4B,IAAI,CAAA;AACnE,MAAI5B,GAAG;AACL,UAAM,IAAI,CAAA;AACV,MAAE,QAAQ,CAACiB,GAAGY,MAAM;AAClB,QAAE,OAAOA,CAAC,CAAC,IAAI,EAAE,MAAMZ,GAAG,OAAO,EAAC;AAAA,IACpC,CAAC,GAAGW,EAAE,CAAC,IAAI,EAAE,OAAO,EAAC;AAAA,EACvB;AACA,QAAMb,IAAIf,IAAI,IAAI;AAClB,SAAO,EAAE,QAAQ,CAAC,GAAGiB,MAAM;AACzB,UAAMY,IAAI,CAAA;AACV,MAAE,QAAQ,CAACX,GAAGC,MAAM;AAClB,MAAAD,MAAM,UAAUA,MAAM,OAAOW,EAAE,OAAOV,CAAC,CAAC,IAAI,EAAE,MAAMD,EAAC;AAAA,IACvD,CAAC,GAAGU,EAAE,OAAOX,IAAIF,CAAC,CAAC,IAAI,EAAE,OAAOc,EAAC;AAAA,EACnC,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQf,GAAG,MAAMc,GAAG;AACtC;AACA,SAAS0C,GAAG,GAAG,GAAG;AAChB,MAAI1C;AACJ,MAAI,OAAO,SAAS,IAAK;AACzB,QAAMrB,KAAK,KAAK,OAAO,SAAS,EAAE,cAAcqB,IAAI,KAAK,OAAO,SAAS,EAAE,wBAAwB,OAAO,SAASA,EAAE,YAAY,IAAI;AAAA,IACnI,WAAW5B,IAAI,gCAAgCO,CAAC;AAAA,IAChD,SAASD,IAAI,gCAAgCC,CAAC;AAAA,IAC9C,YAAYO,IAAI;AAAA,EACpB,IAAM,KAAK,CAAA;AACT,IAAE,wBAAwB,EAAE,oBAAoB,YAAYd,GAAG,EAAE,oBAAoB,UAAUM,GAAG,EAAE,oBAAoB,aAAaQ;AACvI;AACA,MAAMyD,KAAK;AAAA;AAAA,EAET,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,wBAAwB;AAAA,EACxB,8BAA8B;AAAA;AAAA,EAE9B,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,wBAAwB;AAAA,EACxB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA;AAAA,EAEnB,qBAAqB;AAAA;AAAA,EAErB,mBAAmB;AAAA;AAAA,EAEnB,qBAAqB;AAAA;AAAA,EAErB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA;AAAA,EAElB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA;AAAA,EAEhB,oBAAoB;AAAA,EACpB,0BAA0B;AAAA,EAC1B,kBAAkB;AAAA;AAAA,EAElB,oBAAoB;AAAA;AAAA,EAEpB,oBAAoB;AAAA;AAAA,EAEpB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,gCAAgC;AAAA;AAAA,EAEhC,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,yBAAyB;AAAA,EACzB,0BAA0B;AAAA,EAC1B,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,qBAAqB;AAAA;AAAA,EAErB,wBAAwB;AAAA,EACxB,sBAAsB;AAAA,EACtB,mBAAmB;AAAA;AAAA,EAEnB,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,aAAa;AAAA;AAAA,EAEb,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,oBAAoB;AAAA;AAAA,EAEpB,mBAAmB;AAAA;AAAA,EAEnB,wBAAwB;AAAA,EACxB,yBAAyB;AAAA,EACzB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,yBAAyB;AAAA;AAAA,EAEzB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA;AAAA,EAEpB,oBAAoB;AACtB,GAAGC,KAAK;AAAA;AAAA,EAEN,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,wBAAwB;AAAA,EACxB,8BAA8B;AAAA;AAAA,EAE9B,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,wBAAwB;AAAA,EACxB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA;AAAA,EAEnB,qBAAqB;AAAA;AAAA,EAErB,mBAAmB;AAAA;AAAA,EAEnB,qBAAqB;AAAA;AAAA,EAErB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA;AAAA,EAElB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA;AAAA,EAEhB,oBAAoB;AAAA,EACpB,0BAA0B;AAAA,EAC1B,kBAAkB;AAAA;AAAA,EAElB,oBAAoB;AAAA;AAAA,EAEpB,oBAAoB;AAAA;AAAA,EAEpB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,gCAAgC;AAAA;AAAA,EAEhC,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,yBAAyB;AAAA,EACzB,0BAA0B;AAAA,EAC1B,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,qBAAqB;AAAA;AAAA,EAErB,wBAAwB;AAAA,EACxB,sBAAsB;AAAA,EACtB,mBAAmB;AAAA;AAAA,EAEnB,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,aAAa;AAAA;AAAA,EAEb,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,oBAAoB;AAAA;AAAA,EAEpB,mBAAmB;AAAA;AAAA,EAEnB,wBAAwB;AAAA,EACxB,yBAAyB;AAAA,EACzB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,yBAAyB;AAAA;AAAA,EAEzB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA;AAAA,EAEpB,oBAAoB;AACtB,GAAGC,KAAI;AAAA,EACL,SAASF;AAAA,EACT,SAASC;AACX,GAAGE,KAAK;AACR,SAASC,GAAG,GAAG,GAAG;AAChB,SAAO,IAAI,EAAE,QAAQD,IAAI,CAAC,GAAG1E,MAAM;AACjC,UAAMM,IAAI,EAAEN,CAAC;AACb,WAAOM,MAAM,SAAS,IAAIN,CAAC,MAAM,OAAOM,CAAC;AAAA,EAC3C,CAAC,IAAI;AACP;AACA,SAASsE,GAAG,GAAG;AACb,MAAIhD;AACJ,QAAM1B,IAAI,EAAE,kBAAkB,SAASK,IAAIkE,GAAE,EAAE,MAAM,KAAKA,GAAEvE,CAAC,KAAKuE,GAAE,OAAO,GAAGzE,KAAK4B,IAAI,EAAE,aAAa,OAAO,SAASA,EAAE,EAAE,MAAM,GAAGtB,IAAIN,IAAI,EAAE,GAAGO,GAAG,GAAGP,EAAC,IAAKO,GAAGO,IAAI2D,GAAE,OAAO;AAC5K,SAAO,CAAC1D,GAAGC,MAAM;AACf,UAAMC,IAAIX,EAAES,CAAC,KAAKD,EAAEC,CAAC,KAAKA;AAC1B,WAAO4D,GAAG1D,GAAGD,CAAC;AAAA,EAChB;AACF;ACplCO,MAAM6D,KAA4C,OAAO,qBAAqB;ACD9E,SAASC,GACdC,GACAC,GACM;AACN,QAAMC,IAAYC,EAAiB,MAAMC,EAAMJ,CAAM,KAAK,OAAO,GAC3D7E,IAAIgF;AAAA,IAAqB,MAC7BE,GAAiB,EAAE,QAAQH,EAAU,OAAO,UAAUE,EAAMH,CAAQ,EAAA,CAAG;AAAA,EAAA;AAEzE,EAAAK,GAAQR,IAAY,EAAE,QAAQI,GAA0B,GAAA/E,GAAG;AAC7D;AAGA,IAAIoF,KAA+B;AACnC,SAASC,KAA0B;AACjC,SAAKD,OAAWA,KAAYF,GAAiB,EAAE,QAAQ,SAAS,IACzDE;AACT;AAKO,SAASE,KAAqE;AACnF,QAAMC,IAAWC,GAA+Bb,IAAY,IAAI;AAChE,MAAIY,EAAU,QAAOA;AAErB,QAAMV,IAASG,EAAiB,MAAM,OAAO,GACvChF,IAAIgF,EAAqB,MAAMK,IAAa;AAClD,SAAO,EAAE,QAAAR,GAA+B,GAAA7E,EAAA;AAC1C;AC/BA,MAAMyF,KAAsD,OAAO,oBAAoB;AAKhF,SAASC,GAAqBC,GAAsC;AACzE,QAAMC,IAAWZ,EAAwB,MAAMC,EAAMU,CAAK,CAAC;AAC3D,EAAAR,GAAQM,IAAWG,CAAQ;AAC7B;AASO,SAASC,KAA+C;AAC7D,QAAMN,IAAWC,GAAOC,IAAW,IAAI;AACvC,SAAIF,KACGP,EAAwB,MAAM,MAAM;AAC7C;ACpBA,MAAMc,KAAwC,CAACC,GAAQ,EAAE,OAAAC,QAChD5D,EAAE,OAAO;AAAA,EACd,OAAO;AAAA,EAA8B,SAAS;AAAA,EAC9C,MAAM;AAAA,EAAQ,QAAQ;AAAA,EAAgB,gBAAgB;AAAA,EACtD,kBAAkB;AAAA,EAAS,mBAAmB;AAAA,EAAS,GAAG4D;AAAA,GACzD;AAAA,EACD5D,EAAE,QAAQ;AAAA,IACR,GAAG;AAAA,IAAM,GAAG;AAAA,IAAQ,eAAe;AAAA,IACnC,aAAa;AAAA,IAAM,eAAe;AAAA,IAClC,MAAM;AAAA,IAAgB,QAAQ;AAAA,EAAA,GAC7B,KAAK;AAAA,CACT;AAeI,SAAS6D,GAAsBC,GAA0C;AAC9E,SAAO;AAAA,IACL;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMC,IAAS,SAASD,EAAI,EAAE,kBAAkB,GAAG,QAAQA,EAAI,WAAW,UAAUA,EAAI,QAAQ,KAAA;AAAA,QAClH,EAAE,MAAM,QAAQ,SAAS,GAAG,KAAK,MAAMA,EAAI,OAAO,GAAG,CAAC,KAAK,UAAU,OAAA;AAAA,QACrE,EAAE,MAAM,UAAU,MAAME,IAAQ,SAASF,EAAI,EAAE,iBAAiB,GAAG,QAAQA,EAAI,UAAU,UAAUA,EAAI,QAAQ,GAAA;AAAA,MAAG;AAAA,IACpH;AAAA,IAEF;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMG,IAAM,SAASH,EAAI,EAAE,uBAAuB,GAAG,QAAQA,EAAI,aAAA;AAAA,QACnF,EAAE,MAAM,UAAU,MAAMJ,IAAkB,SAASI,EAAI,EAAE,uBAAuB,GAAG,QAAQA,EAAI,eAAA;AAAA,MAAe;AAAA,IAChH;AAAA,IAEF;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMI,IAAW,SAASJ,EAAI,EAAE,qBAAqB,GAAG,QAAQA,EAAI,aAAA;AAAA,QACtF,EAAE,MAAM,UAAU,MAAMK,IAAU,SAASL,EAAI,EAAE,sBAAsB,GAAG,QAAQA,EAAI,cAAA;AAAA,MAAc;AAAA,IACtG;AAAA,IAEF;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMM,IAAW,SAASN,EAAI,EAAE,eAAe,GAAG,QAAQA,EAAI,QAAA;AAAA,MAAQ;AAAA,IAC1F;AAAA,EACF;AAEJ;AC9CO,SAASO,GAAoBP,GAAwC;AAC1E,SAAO;AAAA,IACL;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMC,IAAS,SAASD,EAAI,EAAE,kBAAkB,GAAG,QAAQA,EAAI,WAAW,UAAUA,EAAI,QAAQ,KAAA;AAAA,QAClH,EAAE,MAAM,QAAQ,SAAS,GAAG,KAAK,MAAMA,EAAI,OAAO,GAAG,CAAC,KAAK,UAAU,OAAA;AAAA,QACrE,EAAE,MAAM,UAAU,MAAME,IAAQ,SAASF,EAAI,EAAE,iBAAiB,GAAG,QAAQA,EAAI,UAAU,UAAUA,EAAI,QAAQ,GAAA;AAAA,MAAG;AAAA,IACpH;AAAA,IAEF;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMM,IAAW,SAASN,EAAI,EAAE,eAAe,GAAG,QAAQA,EAAI,QAAA;AAAA,MAAQ;AAAA,IAC1F;AAAA,EACF;AAEJ;ACfO,SAASQ,GAAqBR,GAAyC;AAC5E,SAAO;AAAA,IACL;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMS,IAAM,SAAST,EAAI,EAAE,aAAa,GAAG,QAAQ,MAAA;;AAAM,kBAAAU,IAAAV,EAAI,YAAJ,gBAAAU,EAAa;AAAA,UAAU;AAAA,MAAE;AAAA,IACtG;AAAA,IAEF;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMC,IAAa,SAASX,EAAI,EAAE,mBAAmB,GAAG,QAAQ,MAAA;;AAAM,kBAAAU,IAAAV,EAAI,YAAJ,gBAAAU,EAAa;AAAA,UAAS;AAAA,QAC9G,EAAE,MAAM,QAAQ,SAAS,GAAGV,EAAI,OAAO,MAAMA,EAAI,KAAK,IAAI,UAAU,OAAA;AAAA,QACpE,EAAE,MAAM,UAAU,MAAMY,IAAc,SAASZ,EAAI,EAAE,mBAAmB,GAAG,QAAQ,MAAA;;AAAM,kBAAAU,IAAAV,EAAI,YAAJ,gBAAAU,EAAa;AAAA,UAAS;AAAA,MAAE;AAAA,IACnH;AAAA,IAEF;AAAA,MACE,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAMV,EAAI,YAAYa,KAAYC;AAAA,UAClC,SAASd,EAAI,YAAYA,EAAI,EAAE,sBAAsB,IAAIA,EAAI,EAAE,oBAAoB;AAAA,UACnF,QAAQ,MAAA;;AAAM,oBAAAU,IAAAV,EAAI,YAAJ,gBAAAU,EAAa;AAAA;AAAA,QAAgB;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAEJ;ACzBO,SAASK,GAAqBf,GAAyC;AAC5E,SAAO;AAAA,IACL;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMS,IAAM,SAAST,EAAI,EAAE,aAAa,GAAG,QAAQ,MAAA;;AAAM,kBAAAU,IAAAV,EAAI,YAAJ,gBAAAU,EAAa;AAAA,UAAU;AAAA,MAAE;AAAA,IACtG;AAAA,IAEF;AAAA,MACE,OAAO;AAAA,QACL,EAAE,MAAM,UAAU,MAAMC,IAAa,SAASX,EAAI,EAAE,mBAAmB,GAAG,QAAQ,MAAA;;AAAM,kBAAAU,IAAAV,EAAI,YAAJ,gBAAAU,EAAa;AAAA,UAAS;AAAA,QAC9G,EAAE,MAAM,QAAQ,SAAS,GAAGV,EAAI,OAAO,MAAMA,EAAI,KAAK,IAAI,UAAU,OAAA;AAAA,QACpE,EAAE,MAAM,UAAU,MAAMY,IAAc,SAASZ,EAAI,EAAE,mBAAmB,GAAG,QAAQ,MAAA;;AAAM,kBAAAU,IAAAV,EAAI,YAAJ,gBAAAU,EAAa;AAAA,UAAS;AAAA,MAAE;AAAA,IACnH;AAAA,IAEF;AAAA,MACE,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAMV,EAAI,YAAYa,KAAYC;AAAA,UAClC,SAASd,EAAI,YAAYA,EAAI,EAAE,sBAAsB,IAAIA,EAAI,EAAE,oBAAoB;AAAA,UACnF,QAAQ,MAAA;;AAAM,oBAAAU,IAAAV,EAAI,YAAJ,gBAAAU,EAAa;AAAA;AAAA,QAAgB;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAEJ;ACtBO,SAASM,GAAoB,EAAE,OAAAC,KAA4C;AAChF,SAAKA,IACE;AAAA,IACL;AAAA,MACE,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,SAAS,GAAGA,EAAM,KAAK,YAAYA,EAAM,IAAI,WAAWC,GAAeD,EAAM,IAAI,CAAC;AAAA,UAClF,UAAU;AAAA,QAAA;AAAA,MACZ;AAAA,IACF;AAAA,EACF,IAViB,CAAA;AAYrB;ACdO,SAASE,GAAqBnB,GAAyC;AAC5E,QAAMoB,IAAyB;AAAA,IAC7B;AAAA,MACE,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAMlF,EAAEmF,IAAU,EAAE,OAAO,mBAAmB;AAAA,UAC9C,SAASrB,EAAI,WAAWA,EAAI,EAAE,kBAAkB,IAAIA,EAAI,EAAE,iBAAiB;AAAA,UAC3E,QAAQA,EAAI;AAAA,QAAA;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAGF,SAAIA,EAAI,UACNoB,EAAO,KAAK;AAAA,IACV,OAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,MAAMpB,EAAI,cACN9D,EAAEoF,IAAM,EAAE,OAAO,kBAAA,CAAmB,IACpCpF,EAAEqF,IAAK,EAAE,OAAO,mBAAmB;AAAA,QACvC,SAASvB,EAAI,cAAcA,EAAI,EAAE,gBAAgB,IAAIA,EAAI,EAAE,iBAAiB;AAAA,QAC5E,QAAQA,EAAI;AAAA,MAAA;AAAA,IACd;AAAA,EACF,CACD,GAGIoB;AACT;ACjCO,SAASI,GAAyBxB,GAA6C;AACpF,SAAO;AAAA,IACL;AAAA,MACE,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAMA,EAAI,aAAa,YACnB9D,EAAEoF,IAAM,EAAE,OAAO,kBAAA,CAAmB,IACpCpF,EAAEqF,IAAK,EAAE,OAAO,mBAAmB;AAAA,UACvC,SAASvB,EAAI,aAAa,YAAYA,EAAI,EAAE,gBAAgB,IAAIA,EAAI,EAAE,iBAAiB;AAAA,UACvF,QAAQA,EAAI;AAAA,QAAA;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAEJ;;;;ACxBA,UAAM,EAAE,EAAA,IAAMZ,GAAA;sBAIZqC,EAAA,GAAAC,EAKM,OALNC,IAKM;AAAA,MAJJC,EAGM,OAHNC,IAGM;AAAA,wBAFJD,EAA2H,OAAA,EAAtH,OAAM,8GAAA,GAA6G,MAAA,EAAA;AAAA,QACxHA,EAA0E,QAA1EE,IAA0EC,EAA7CC,EAAA,CAAA,EAAC,gBAAA,KAAA,YAAA,GAAA,CAAA;AAAA,MAAA;;;ICF9BC,IAAO,CAACC,MACZC,GAAqB;AAAA,EACnB,QAAAD;AAAA,EACA,kBAAkB,EAAE,QAAQ,MAAMhG,EAAEkG,EAAe,EAAA;AAAA,EACnD,OAAO;AACT,CAAC,GAEUC,KAAgBJ,EAAK,MAAM,OAAO,sBAAmB,CAAC,GACtDK,KAAcL,EAAK,MAAM,OAAO,sBAAiB,CAAC,GAClDM,KAAeN,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDO,KAAeP,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDQ,KAAeR,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDS,KAAcT,EAAK,MAAM,OAAO,sBAAiB,CAAC,GAClDU,KAAeV,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDW,KAAeX,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDY,KAAgBZ,EAAK,MAAM,OAAO,sBAAmB,CAAC,GACtDa,KAAgBb,EAAK,MAAM,OAAO,sBAAmB,CAAC,GACtDc,KAAmBd,EAAK,MAAM,OAAO,sBAAsB,CAAC,GAC5De,KAAef,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDgB,KAAchB,EAAK,MAAM,OAAO,sBAAiB,CAAC,GAClDiB,KAAcjB,EAAK,MAAM,OAAO,sBAAiB,CAAC,GAClDkB,KAAmBlB,EAAK,MAAM,OAAO,sBAAsB,CAAC,GAC5DmB,KAAcnB,EAAK,MAAM,OAAO,sBAAiB,CAAC,GAClDoB,KAAepB,EAAK,MAAM,OAAO,sBAAkB,CAAC;;;;;;;;ACrBjE,UAAM,EAAE,GAAAnI,EAAA,IAAMsF,GAAA,GAERkE,IAAOC;sBAMX9B,EAAA,GAAAC,EAqBM,OArBNC,IAqBM;AAAA,MAlBJC,EAIM,OAJNC,IAIM;AAAA,QADJ2B,EAAgExB,EAAAyB,EAAA,GAAA,EAAlD,OAAM,2CAAyC;AAAA,MAAA;MAG/D7B,EAGM,OAHNE,IAGM;AAAA,QAFJF,EAAkE,KAAlE8B,IAAkE3B,EAAf4B,EAAA,QAAQ,GAAA,CAAA;AAAA,QAC3D/B,EAA8F,KAA9FgC,IAA8F7B,EAA1DC,EAAAlI,CAAA,wCAAwC6J,EAAA,SAAA,CAAQ,CAAA,GAAA,CAAA;AAAA,MAAA;MAGtF/B,EAMS,UAAA;AAAA,QALP,OAAM;AAAA,QACL,gCAAO0B,EAAI,UAAA;AAAA,MAAA;QAEZE,EAAoCxB,EAAA6B,EAAA,GAAA,EAA1B,OAAM,mBAAiB;AAAA,QAAGC,GAAA,QACjC9B,EAAAlI,CAAA,EAAC,iBAAA,CAAA,GAAA,CAAA;AAAA,MAAA;;;;;;;;;;;;;iDCUJiK,KAAwB,GAuFxBC,KAAiB;;;;;;;;;;;;;;;AAnEvB,UAAMC,IAAQN,GAURL,IAAOC;AAMb,IAAA7E,GAAcwF,GAAMD,GAAO,QAAQ,GAAGC,GAAMD,GAAO,UAAU,CAAC;AAC9D,UAAM,EAAE,GAAAnK,EAAA,IAAMsF,GAAA,GAER+E,IAAaC;AAAA,MACjB,OAAO,SAAW,MACd,OAAO,WAAW,8BAA8B,EAAE,UAClD;AAAA,IAAA;AAGN,QAAIC,IAAyC;AAE7C,IAAAC;AAAA,MACE,MAAML,EAAM;AAAA,MACZ,CAACxE,MAAU;AAKT,YAJI4E,MACFA,EAAA,GACAA,IAAoB,OAElB5E,MAAU,QAAQ;AACpB,gBAAM8E,IAAM,OAAO,WAAW,8BAA8B,GACtDC,IAAU,CAACC,MAA2B;AAAE,YAAAN,EAAW,QAAQM,EAAE;AAAA,UAAS;AAC5E,UAAAF,EAAI,iBAAiB,UAAUC,CAAO,GACtCH,IAAoB,MAAME,EAAI,oBAAoB,UAAUC,CAAO;AAAA,QACrE;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpBE,GAAgB,MAAM;AACpB,MAAIL,KAAmBA,EAAA;AAAA,IACzB,CAAC;AAED,UAAMM,IAAgB7F;AAAA,MAAS,MAC7BmF,EAAM,UAAU,SAAUE,EAAW,QAAQ,SAAS,UAAWF,EAAM;AAAA,IAAA;AAEzE,IAAAzE,GAAqBmF,CAAa;AAElC,UAAMC,IAAOR,EAAI,CAAC,GACZS,IAAWT,EAAI,CAAC,GAChBU,IAAcV,EAAI,CAAC,GACnBW,IAAaX,EAAI,CAAC,GAClBY,IAAsBZ,EAAI,CAAC,GAC3Ba,IAAuBb,EAAI,CAAC,GAC5Bc,IAAgBd,EAAI,CAAC,GAErBe,IAAaf,EAA2B,IAAI,GAC5CgB,IAAUhB,EAA2B,IAAI,GAGzCiB,IAAajB,EAAI,EAAI;AAC3B,QAAIkB,IAA8B;AAGlC,UAAMC,IAAgB,MAAM;AAC1B,MAAAF,EAAW,QAAQ,IACfC,MAAiB,QACnB,aAAaA,CAAY,GAE3BA,IAAe,OAAO,WAAW,MAAM;AACrC,QAAAD,EAAW,QAAQ;AAAA,MACrB,GAAGrB,EAAc;AAAA,IACnB,GAEMwB,IAAkB,MAAMD,EAAA,GAGxBE,IAAkB3G,EAAS,MAAM4G,GAAezB,EAAM,KAAK,CAAC,GAE5D0B,IAAc7G,EAAS,MAAM2G,EAAgB,MAAMxB,EAAM,YAAY,CAAC,GAGtE2B,IAAiB9G,EAAS,MACzB6G,EAAY,SACV1B,EAAM,gBAAgB,KAAK,CAAC/J,MAAMA,EAAE,KAAKyL,EAAY,KAAM,CAAC,KAAK,IACzE,GAEKE,KAA0B/G,EAAS,MACnC,CAAC8G,EAAe,SAAS,CAACD,EAAY,QAAc,OACjDC,EAAe,MAAM,OAAOD,EAAY,OAAOG,EAAU,KAAK,CACtE,GAEKC,IAAWjH,EAAS,MAAO6G,EAAY,QAAQK,GAAYL,EAAY,KAAK,IAAI,aAAc,GAG9FM,KAAa,CAACC,GAAcC,MAAsB;AACtD,UAAI,CAACR,EAAY,MAAO;AACxB,YAAMS,IAAiC,EAAE,MAAAF,GAAM,SAAAC,GAAS,MAAMR,EAAY,MAAA;AAC1E,MAAArC,EAAK,gBAAgB8C,CAAE;AAAA,IACzB,GAGMN,IAAYhH,EAAgC,OAAO;AAAA,MACvD,MAAMmH;AAAA,MACN,GAAGnM,EAAE;AAAA,MACL,OAAO6K,EAAc;AAAA,MACrB,QAASV,EAAM,UAAU;AAAA,IAAA,EACzB;AAGF,IAAAhF,GAAQ,2BAA2B6G,CAAS,GAG5CxB;AAAA,MACE,MAAML,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAW,EAAK,QAAQ,GACbC,EAAS,QAAQ,GACjBC,EAAY,QAAQ,GACpBC,EAAW,QAAQ,GACnBC,EAAoB,QAAQ,GAC5BC,EAAqB,QAAQ,GAC7BI,EAAW,QAAQ,IACfC,MAAiB,QACnB,aAAaA,CAAY;AAAA,MAE7B;AAAA,IAAA,GAIFhB;AAAA,MACE,CAACyB,GAAUf,GAAqBC,CAAoB;AAAA,MACpD,MAAM;AACJ,YACEc,EAAS,UAAU,WACnBf,EAAoB,QAAQ,KAC5BC,EAAqB,QAAQ,KAC7BE,EAAW,OACX;AACA,gBAAMkB,IAAiBlB,EAAW,MAAM,aAClCmB,IAAkBnB,EAAW,MAAM,cACnCoB,IAASF,IAAiBrB,EAAoB,OAC9CwB,IAASF,IAAkBrB,EAAqB,OAChDwB,IAAU,KAAK,IAAIF,GAAQC,CAAM;AACvC,UAAA5B,EAAK,QAAQ,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI6B,CAAO,CAAC;AAAA,QACnD;AAAA,MACF;AAAA,IAAA,GAIFnC;AAAA,MACE,MAAMmB,EAAgB,MAAM;AAAA,MAC5B,CAACiB,MAAQ;AACP,QAAIA,IAAM,KAAGnB,EAAA;AAAA,MACf;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;AAIpB,UAAMoB,IAAgB,CAAClC,MAAqB;AAC1C,MAAIA,EAAE,QAAQ,YAAYR,EAAM,SAAS,UACvCX,EAAK,OAAO,IACHmB,EAAE,QAAQ,eAAeR,EAAM,eAAe,IACvDX,EAAK,YAAYW,EAAM,eAAe,CAAC,IAC9BQ,EAAE,QAAQ,gBAAgBR,EAAM,eAAewB,EAAgB,MAAM,SAAS,KACvFnC,EAAK,YAAYW,EAAM,eAAe,CAAC;AAAA,IAE3C;AAEA,IAAA2C,GAAU,MAAM;AACd,MAAI3C,EAAM,SAAS,UACjB,OAAO,iBAAiB,WAAW0C,CAAa,IACvCvB,EAAQ,SACjBA,EAAQ,MAAM,iBAAiB,WAAWuB,CAA8B;AAAA,IAE5E,CAAC,GAEDjC,GAAgB,MAAM;AACpB,MAAIY,MAAiB,QAAM,aAAaA,CAAY,GAChDrB,EAAM,SAAS,UACjB,OAAO,oBAAoB,WAAW0C,CAAa,IAC1CvB,EAAQ,SACjBA,EAAQ,MAAM,oBAAoB,WAAWuB,CAA8B;AAAA,IAE/E,CAAC;AAED,UAAME,KAAe,MAAM;AACzB,MAAAjC,EAAK,QAAQ,KAAK,IAAIA,EAAK,QAAQ,KAAK,EAAE;AAAA,IAC5C,GACMkC,KAAgB,MAAM;AAC1B,MAAAlC,EAAK,QAAQ,KAAK,IAAIA,EAAK,QAAQ,KAAK,IAAI;AAAA,IAC9C,GACMmC,KAAe,MAAM;AACzB,MAAAlC,EAAS,QAAQA,EAAS,QAAQ;AAAA,IACpC,GACMmC,KAAmB,MAAM;AAC7B,MAAAnC,EAAS,QAAQA,EAAS,QAAQ;AAAA,IACpC,GAEMoC,KAAmB,MAAM;AAC7B,UAAI9B,EAAW,SAASH,EAAoB,QAAQ,KAAKC,EAAqB,QAAQ,GAAG;AACvF,cAAMoB,IAAiBlB,EAAW,MAAM,aAClCmB,IAAkBnB,EAAW,MAAM,cACnCoB,IAASF,IAAiBrB,EAAoB,OAC9CwB,IAASF,IAAkBrB,EAAqB,OAChDwB,IAAU,KAAK,IAAIF,GAAQC,CAAM;AACvC,QAAA5B,EAAK,QAAQ,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI6B,CAAO,CAAC;AAAA,MACnD;AACE,QAAA7B,EAAK,QAAQ;AAEf,MAAAC,EAAS,QAAQ,GACjBK,EAAc;AAAA,IAChB,GAEMgC,KAAqB,MAAM;AAC/B,MAAAtC,EAAK,QAAQ,GACbC,EAAS,QAAQ,GACjBK,EAAc;AAAA,IAChB,GAEMiC,KAAmB,CAACV,MAAoB;AAC5C,MAAA7B,EAAK,QAAQ6B;AAAA,IACf,GAEMW,KAAc,MAAM;AACxB,MAAAxC,EAAK,QAAQ,GACbC,EAAS,QAAQ,GACjBK,EAAc;AAAA,IAChB,GAEMmC,KAAiB,MAAM;AAC3B,UAAI,CAAC1B,EAAY,MAAO;AACxB,YAAM2B,IAAO,SAAS,cAAc,GAAG;AACvC,MAAAA,EAAK,OAAO3B,EAAY,MAAM,KAC9B2B,EAAK,WAAW3B,EAAY,MAAM,MAClC2B,EAAK,MAAA;AAAA,IACP,GAEMC,KAAkBzI,EAAS,MAAMmF,EAAM,SAAS,OAAO,GAEvDuD,KAAUpD,EAA+G,IAAI,GAC7HqD,KAAcrD,EAAI,CAAC,GACnBsD,KAAYtD,EAAI,CAAC,GACjBuD,KAAgBvD,EAAI,EAAK,GAEzBwD,KAAUxD,EAA+G,IAAI,GAC7HyD,KAAczD,EAAI,CAAC,GACnB0D,KAAY1D,EAAI,CAAC,GACjB2D,KAAgB3D,EAAI,EAAK,GAEzB4D,KAA0B,CAACC,GAAiBC,MAAkB;AAClE,MAAAT,GAAY,QAAQQ,GACpBP,GAAU,QAAQQ;AAAA,IACpB,GAEMC,KAA0B,CAACF,GAAiBC,MAAkB;AAClE,MAAAL,GAAY,QAAQI,GACpBH,GAAU,QAAQI;AAAA,IACpB,GAEME,KAAWhE,EAA4B,IAAI,GAC3CiE,KAAuB,CAACpH,MAAkC;AAC9D,MAAAmH,GAAS,QAAQnH;AAAA,IACnB,GAEMqH,IAAelE,EAAI,EAAI,GACvBmE,IAAkBnE,EAAI,EAAK,GAC3BoE,IAAmBpE,EAA0B,SAAS,GAGtDqE,KAAa3J,EAAS,MAAM;;AAChC,UAAI8G,EAAe;AACjB,iBACE8C,KAAAhI,IAAAkF,EAAe,OAAM,qBAArB,gBAAA8C,EAAA,KAAAhI,GAAwCiF,EAAY,OAAQG,EAAU,WAAU,CAAA;AAGpF,UAAIC,EAAS,UAAU;AACrB,eAAOhG,GAAsB;AAAA,UAC3B,MAAM6E,EAAK;AAAA,UACX,UAAUiC;AAAA,UACV,WAAWC;AAAA,UACX,cAAcG;AAAA,UACd,gBAAgBC;AAAA,UAChB,cAAcF;AAAA,UACd,eAAeD;AAAA,UACf,SAASK;AAAA,UACT,GAAGtN,EAAE;AAAA,QAAA,CACN;AAEH,UAAIiM,EAAS,UAAU;AACrB,eAAOxF,GAAoB;AAAA,UACzB,MAAMqE,EAAK;AAAA,UACX,UAAUiC;AAAA,UACV,WAAWC;AAAA,UACX,SAASM;AAAA,UACT,GAAGtN,EAAE;AAAA,QAAA,CACN;AAEH,UAAIiM,EAAS,UAAU;AACrB,eAAOvF,GAAqB;AAAA,UAC1B,SAASgH,GAAQ;AAAA,UACjB,SAASC,GAAY;AAAA,UACrB,OAAOC,GAAU;AAAA,UACjB,WAAWC,GAAc;AAAA,UACzB,GAAG7N,EAAE;AAAA,QAAA,CACN;AAEH,UAAIiM,EAAS,UAAU;AACrB,eAAOhF,GAAqB;AAAA,UAC1B,SAAS6G,GAAQ;AAAA,UACjB,SAASC,GAAY;AAAA,UACrB,OAAOC,GAAU;AAAA,UACjB,WAAWC,GAAc;AAAA,UACzB,GAAGjO,EAAE;AAAA,QAAA,CACN;AAEH,UAAIiM,EAAS,UAAU;AACrB,eAAO/E,GAAoB,EAAE,OAAOoH,GAAS,OAAO,GAAGtO,EAAE,OAAO;AAElE,UAAIiM,EAAS,UAAU,QAAQ;AAC7B,cAAM4C,MAAMC,IAAAjD,EAAY,MAAO,KAAK,MAAM,GAAG,EAAE,IAAA,MAAnC,gBAAAiD,EAA0C,kBAAiB;AACvE,eAAOzH,GAAqB;AAAA,UAC1B,UAAUmH,EAAa;AAAA,UACvB,cAAc,MAAM;AAAE,YAAAA,EAAa,QAAQ,CAACA,EAAa;AAAA,UAAO;AAAA,UAChE,QAAQK,MAAQ,UAAUA,MAAQ;AAAA,UAClC,aAAaJ,EAAgB;AAAA,UAC7B,qBAAqB,MAAM;AAAE,YAAAA,EAAgB,QAAQ,CAACA,EAAgB;AAAA,UAAO;AAAA,UAC7E,GAAGzO,EAAE;AAAA,QAAA,CACN;AAAA,MACH;AACA,aAAIiM,EAAS,UAAU,aACdvE,GAAyB;AAAA,QAC9B,UAAUgH,EAAiB;AAAA,QAC3B,kBAAkB,MAAM;AAAE,UAAAA,EAAiB,QAAQA,EAAiB,UAAU,YAAY,WAAW;AAAA,QAAW;AAAA,QAChH,GAAG1O,EAAE;AAAA,MAAA,CACN,IAEI,CAAA;AAAA,IACT,CAAC,GAGK+O,KAAe/J,EAAyB,MAAM;AAClD,YAAMsC,IAAyB;AAAA,QAC7B;AAAA,UACE,OAAO;AAAA,YACL,EAAE,MAAM,UAAU,MAAMyC,IAAU,SAAS/J,EAAE,MAAM,iBAAiB,GAAG,QAAQuN,GAAA;AAAA,UAAe;AAAA,QAChG;AAAA,MACF;AAEF,aAAIE,GAAgB,SAClBnG,EAAO,KAAK;AAAA,QACV,OAAO;AAAA,UACL,EAAE,MAAM,UAAU,MAAM7D,IAAG,SAASzD,EAAE,MAAM,cAAc,GAAG,QAAQ,MAAMwJ,EAAK,OAAO,EAAA;AAAA,QAAE;AAAA,MAC3F,CACD,GAEIlC;AAAA,IACT,CAAC,GAEK0H,KAAgBhK,EAAS,MAAM2J,GAAW,MAAM,SAAS,CAAC;;;kBAI9D/G,EAqPM,OAAA;AAAA,iBApPA;AAAA,QAAJ,KAAI0D;AAAA,QACH,UAAUzB,EAAA,SAAI,UAAA,IAAA;AAAA,QACd,cAAYgB,EAAA;AAAA,QACb,OAAM;AAAA,MAAA;QAIGhB,EAAA,wBADTlC,KAAAC,EAoGM,OApGNG,IAoGM;AAAA,UA9FJD,EAiEM,OAjENE,IAiEM;AAAA,YA/DJF,EAOM,OAPN8B,IAOM;AAAA,cANJ9B,EAEK,MAFLgC,IAEK7B,GADArB,IAAAiF,EAAA,UAAA,gBAAAjF,EAAa,IAAI,GAAA,CAAA;AAAA,cAEtBkB,EAEO,QAFPmH,IAEOhH,EADF4B,EAAA,oBAAmB,MAAC5B,EAAG0D,EAAA,MAAgB,MAAM,GAAA,CAAA;AAAA,YAAA;YAKpD7D,EAcM,OAdNoH,IAcM;AAAA,eAbJvH,EAAA,EAAA,GAAAC,EAYWuH,GAAA,MAAAC,EAZqBL,GAAA,OAAY,CAA1BM,GAAOC;mCAAyCA;AAAA,cAAA;iBAChE3H,EAAA,EAAA,GAAAC,EAUWuH,WAVoBE,EAAM,OAAK,CAAxBE,GAAMC;kBAAwC,KAAA,cAAAF,UAAWE;AAAA,gBAAA;kBAEjED,EAAK,SAAI,iBADjB3H,EAQS,UAAA;AAAA;oBANP,OAAM;AAAA,oBACL,gBAAe2H,EAA2B;AAAA,oBAC1C,UAAWA,EAA2B;AAAA,oBACtC,SAAQA,EAA2B;AAAA,kBAAA;qBAEpC5H,EAAA,GAAA8H,EAA4EC,EAA3DH,EAA2B,IAAI,GAAA,EAAE,OAAM,mBAAiB;AAAA,kBAAA;;;;YAOjFzH,EAmCM,OAnCN6H,IAmCM;AAAA,eAlCJhI,EAAA,EAAA,GAAAC,EAoBWuH,GAAA,MAAAC,EApBqBT,GAAA,OAAU,CAAxBU,GAAOC;iCAAqCA;AAAA,cAAA;iBAC5D3H,EAAA,EAAA,GAAAC,EAiBWuH,WAjBoBE,EAAM,OAAK,CAAxBE,GAAMC;kBAAsC,KAAA,YAAAF,UAAWE;AAAA,gBAAA;kBAE/DD,EAAK,SAAI,iBADjB3H,EAQS,UAAA;AAAA;oBANP,OAAM;AAAA,oBACL,gBAAe2H,EAA2B;AAAA,oBAC1C,UAAWA,EAA2B;AAAA,oBACtC,SAAQA,EAA2B;AAAA,kBAAA;qBAEpC5H,EAAA,GAAA8H,EAA4EC,EAA3DH,EAA2B,IAAI,GAAA,EAAE,OAAM,mBAAiB;AAAA,kBAAA,aAG9DA,EAAK,SAAI,eADtB3H,EAMO,QAAA;AAAA;oBAJL,OAAM;AAAA,oBACL,OAAKgI,GAAA,EAAA,UAAeL,EAAyB,YAAQ,QAAA;AAAA,kBAAA,GAElDtH,EAAAsH,EAAyB,OAAO,GAAA,CAAA;;kCAGxCzH,EAAuD,OAAA,EAAlD,OAAM,6CAAyC,MAAA,EAAA;AAAA,cAAA;eAEtDH,EAAA,EAAA,GAAAC,EAYWuH,GAAA,MAAAC,EAZqBL,GAAA,OAAY,CAA1BM,GAAOC;mCAAyCA;AAAA,cAAA;iBAChE3H,EAAA,EAAA,GAAAC,EAUWuH,WAVoBE,EAAM,OAAK,CAAxBE,GAAMC;kBAAwC,KAAA,cAAAF,UAAWE;AAAA,gBAAA;kBAEjED,EAAK,SAAI,iBADjB3H,EAQS,UAAA;AAAA;oBANP,OAAM;AAAA,oBACL,gBAAe2H,EAA2B;AAAA,oBAC1C,UAAWA,EAA2B;AAAA,oBACtC,SAAQA,EAA2B;AAAA,kBAAA;qBAEpC5H,EAAA,GAAA8H,EAA4EC,EAA3DH,EAA2B,IAAI,GAAA,EAAE,OAAM,mBAAiB;AAAA,kBAAA;;;;;UAS3EP,GAAA,SADRrH,EAAA,GAAAC,EAyBM,OAzBNiI,IAyBM;AAAA,aArBJlI,EAAA,EAAA,GAAAC,EAoBWuH,GAAA,MAAAC,EApBqBT,GAAA,OAAU,CAAxBU,GAAOC;+BAAqCA;AAAA,YAAA;cACjDA,IAAE,KAAb3H,EAAA,GAAAC,EAAuE,OAAvEkI,EAAuE;eACvEnI,EAAA,EAAA,GAAAC,EAiBWuH,WAjBoBE,EAAM,OAAK,CAAxBE,GAAMC;gBAAsC,KAAA,YAAAF,UAAWE;AAAA,cAAA;gBAE/DD,EAAK,SAAI,iBADjB3H,EAQS,UAAA;AAAA;kBANP,OAAM;AAAA,kBACL,gBAAe2H,EAA2B;AAAA,kBAC1C,UAAWA,EAA2B;AAAA,kBACtC,SAAQA,EAA2B;AAAA,gBAAA;mBAEpC5H,EAAA,GAAA8H,EAA4EC,EAA3DH,EAA2B,IAAI,GAAA,EAAE,OAAM,mBAAiB;AAAA,gBAAA,aAG9DA,EAAK,SAAI,eADtB3H,EAMO,QAAA;AAAA;kBAJL,OAAM;AAAA,kBACL,OAAKgI,GAAA,EAAA,UAAeL,EAAyB,YAAQ,QAAA;AAAA,gBAAA,GAElDtH,EAAAsH,EAAyB,OAAO,GAAA,CAAA;;;;;QAQ9CzH,EAqGM,OAAA;AAAA,mBApGA;AAAA,UAAJ,KAAIuD;AAAA,UACJ,OAAM;AAAA,UACL,aAAWK;AAAA,QAAA;UAEIG,EAAA,cAAhBjE,EA+FWuH,GAAA,EAAA,KAAA,KAAA;AAAA,YA9FsCpD,GAAA,SAA/CpE,EAAA,GAAA8H,EAA+GC,EAA/F3D,GAAA,KAAuB,GAAA;AAAA;cAAkC,MAAMF,EAAA;AAAA,cAAc,KAAKG,EAAA;AAAA,YAAA,sCAClGpE,EA4FWuH,GAAA,EAAA,KAAA,KAAA;AAAA,cA1FDlD,EAAA,UAAQ,gBADhBwD,EAUEvH,EAAAK,EAAA,GAAA;AAAA;gBARC,KAAKsD,EAAA,MAAY;AAAA,gBACjB,MAAMf,EAAA;AAAA,gBACN,UAAUC,EAAA;AAAA,gBACV,aAAWK,EAAA;AAAA,gBACX,aAAWS,EAAA,MAAY;AAAA,gBACvB,cAAawB;AAAA,gBACb,sBAAoB0C,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAG,MAAe7E,EAAA,QAAsB;AAAA,gBAC5D,uBAAqB6E,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAG3N,MAAe+I,EAAA,QAAuB/I;AAAA,cAAA,sEAGpD6J,EAAA,UAAQ,cADrBwD,EAQEvH,EAAAM,EAAA,GAAA;AAAA;gBANC,KAAKqD,EAAA,MAAY;AAAA,gBACjB,MAAMf,EAAA;AAAA,gBACN,gBAAcE,EAAA;AAAA,gBACd,cAAW+E,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGhO,MAAeiJ,EAAA,QAAcjJ;AAAA,gBAC3C,oBAAkBgO,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAG/P,MAAeiL,EAAA,QAAajL;AAAAA,gBACjD,mBAAiB+P,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAG,MAAe7E,EAAA,QAAsB;AAAA,cAAA,gDAEnCe,EAAA,UAAQ,eAAjCwD,EAAuEvH,EAAAO,EAAA,GAAA;AAAA;gBAAxB,KAAKoD,EAAA,MAAY;AAAA,cAAA,wBACvCI,EAAA,UAAQ,eAAjCwD,EAAuEvH,EAAAQ,EAAA,GAAA;AAAA;gBAAxB,KAAKmD,EAAA,MAAY;AAAA,cAAA,wBACvCI,EAAA,UAAQ,eAAjCwD,EAAuEvH,EAAAS,EAAA,GAAA;AAAA;gBAAxB,KAAKkD,EAAA,MAAY;AAAA,cAAA,wBACxCI,EAAA,UAAQ,cAAhCwD,EAAqEvH,EAAAU,EAAA,GAAA;AAAA;gBAAxB,KAAKiD,EAAA,MAAY;AAAA,cAAA,wBAEjDI,EAAA,UAAQ,eADrBwD,EAMEvH,EAAAW,EAAA,GAAA;AAAA;yBAJI;AAAA,gBAAJ,KAAI6E;AAAA,gBACH,KAAK7B,EAAA,MAAY;AAAA,gBACjB,iBAAgBqC;AAAA,gBAChB,mBAAiB6B,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGtN,MAAgBoL,GAAA,QAAgBpL;AAAA,cAAA,wBAG1CwJ,EAAA,UAAQ,eADrBwD,EAMEvH,EAAAY,EAAA,GAAA;AAAA;yBAJI;AAAA,gBAAJ,KAAIgF;AAAA,gBACH,KAAKjC,EAAA,MAAY;AAAA,gBACjB,iBAAgBwC;AAAA,gBAChB,mBAAiB0B,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGtN,MAAgBwL,GAAA,QAAgBxL;AAAA,cAAA,wBAE7BwJ,EAAA,UAAQ,gBAAlCwD,EAAyEvH,EAAAa,EAAA,GAAA;AAAA;gBAAxB,KAAK8C,EAAA,MAAY;AAAA,cAAA,wBAErDI,EAAA,UAAQ,gBADrBwD,EAIEvH,EAAAc,EAAA,GAAA;AAAA;gBAFC,KAAK6C,EAAA,MAAY;AAAA,gBACjB,aAAWA,EAAA,MAAY;AAAA,cAAA,qCAEGI,EAAA,UAAQ,mBAArCwD,EAA6GvH,EAAAe,EAAA,GAAA;AAAA;gBAAtD,KAAK4C,EAAA,MAAY;AAAA,gBAAM,aAAW6C,EAAA;AAAA,cAAA,qCAE5EzC,EAAA,UAAQ,eADrBwD,EAIEvH,EAAAgB,EAAA,GAAA;AAAA;gBAFC,KAAK2C,EAAA,MAAY;AAAA,gBACjB,aAAWA,EAAA,MAAY;AAAA,cAAA,qCAGbI,EAAA,UAAQ,cADrBwD,EAIEvH,EAAAiB,EAAA,GAAA;AAAA;gBAFC,KAAK0C,EAAA,MAAY;AAAA,gBACjB,aAAWA,EAAA,MAAY;AAAA,cAAA,qCAGbI,EAAA,UAAQ,cADrBwD,EAIEvH,EAAAkB,EAAA,GAAA;AAAA;gBAFC,KAAKyC,EAAA,MAAY;AAAA,gBACjB,aAAWA,EAAA,MAAY;AAAA,cAAA,qCAGbI,EAAA,UAAQ,mBADrBwD,EAIEvH,EAAAmB,EAAA,GAAA;AAAA;gBAFC,KAAKwC,EAAA,MAAY;AAAA,gBACjB,aAAWA,EAAA,MAAY;AAAA,cAAA,qCAELI,EAAA,UAAQ,SAAc9B,EAAM,mBAAmBF,WAClEwF,EAIEO,IAAA;AAAA;gBAHC,aAAWnE,EAAA,MAAY;AAAA,gBACvB,aAAWA,EAAA,MAAY;AAAA,gBACvB,YAAU0B;AAAA,cAAA,2CAIFtB,EAAA,UAAQ,cADrBwD,EAKEvH,EAAAoB,EAAA,GAAA;AAAA;gBAHC,KAAKuC,EAAA,MAAY;AAAA,gBACjB,iBAAe1B,EAAM;AAAA,gBACrB,eAAcoE;AAAA,cAAA,yCAGJtC,EAAA,UAAQ,eADrBwD,EAMEvH,EAAAqB,EAAA,GAAA;AAAA;gBAJC,KAAKsC,EAAA,MAAY;AAAA,gBACjB,aAAWA,EAAA,MAAY;AAAA,gBACvB,aAAW2C,EAAA;AAAA,gBACX,gBAAcC,EAAA;AAAA,cAAA,wEAEjBgB,EAKEO,IAAA;AAAA;gBAHC,aAAWnE,EAAA,MAAY;AAAA,gBACvB,aAAWA,EAAA,MAAY;AAAA,gBACvB,YAAU0B;AAAA,cAAA;;;;SAOF1D,EAAA,YAAY8B,EAAA,MAAgB,SAAM,UAAnD/D,EA8BWuH,GAAA,EAAA,KAAA,KAAA;AAAA,UA5BDtF,EAAA,eAAY,UADpBjC,EAaS,UAAA;AAAA;YAXN,OAAKgI,GAAA;AAAA,uBAAuBrE,EAAA,QAAU,IAAA;AAAA,yBAA+BA,EAAA,QAAU,qBAAA;AAAA,6BAAuFA,EAAA,QAAU,SAAA;AAAA;;YAMjL,OAAM;AAAA,YACL,SAAKwE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAEzG,EAAI,YAAaK,EAAA,eAAY,CAAA;AAAA,YACpC,qCAAY0B,EAAA,QAAU;AAAA,UAAA;YAEvB7B,EAA6DxB,EAAArB,EAAA,GAAA,EAAhD,OAAM,yCAAuC;AAAA,UAAA;UAIpDgD,EAAA,eAAe8B,EAAA,MAAgB,SAAM,UAD7C/D,EAaS,UAAA;AAAA;YAXN,OAAKgI,GAAA;AAAA,uBAAuBrE,EAAA,QAAU,IAAA;AAAA,yBAA+BA,EAAA,QAAU,qBAAA;AAAA,6BAAsFA,EAAA,QAAU,SAAA;AAAA;;YAMhL,OAAM;AAAA,YACL,SAAKwE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAEzG,EAAI,YAAaK,EAAA,eAAY,CAAA;AAAA,YACpC,uCAAY0B,EAAA,QAAU;AAAA,UAAA;YAEvB7B,EAA8DxB,EAAApB,EAAA,GAAA,EAAhD,OAAM,yCAAuC;AAAA,UAAA;;;;;;;;;;;;;;AC/pB5D,SAASoJ,GAAcC,GAAwB;AACpD,MAAIC,IAAmB,IACnBC,IAAuB,IACvBC,IAAS;AAEb,QAAMC,IAAO,MAAM;AACjB,QAAID,KAAU,OAAO,WAAa,IAAa;AAC/C,IAAAF,IAAmB,SAAS,KAAK,MAAM,UACvCC,IAAuB,SAAS,KAAK,MAAM;AAC3C,UAAMG,IAAiB,OAAO,aAAa,SAAS,gBAAgB;AACpE,aAAS,KAAK,MAAM,WAAW,UAC3BA,IAAiB,MACnB,SAAS,KAAK,MAAM,eAAe,GAAGA,CAAc,OAEtDF,IAAS;AAAA,EACX,GAEMG,IAAS,MAAM;AACnB,IAAI,CAACH,KAAU,OAAO,WAAa,QACnC,SAAS,KAAK,MAAM,WAAWF,GAC/B,SAAS,KAAK,MAAM,eAAeC,GACnCC,IAAS;AAAA,EACX;AAEA,SAAAxD,GAAU,MAAM;AACd,IAAIqD,EAAA,KAAWI,EAAA;AAAA,EACjB,CAAC,GAEDG,GAAY,MAAM;AAChB,IAAAD,EAAA;AAAA,EACF,CAAC,GAEM,EAAE,MAAAF,GAAM,QAAAE,EAAA;AACjB;;;;;;;;;;;;;;;AChBA,UAAMtG,IAAQN,GAQRL,IAAOC,GAMP,EAAE,MAAA8G,GAAM,QAAAE,EAAA,IAAWP,GAAc,MAAM/F,EAAM,MAAM;AAEzD,IAAAK;AAAA,MACE,MAAML,EAAM;AAAA,MACZ,CAACwG,MAAS;AACR,QAAIA,IAAMJ,EAAA,IACLE,EAAA;AAAA,MACP;AAAA,IAAA;AAGF,UAAMpG,IAAaC;AAAA,MACjB,OAAO,SAAW,MACd,OAAO,WAAW,8BAA8B,EAAE,UAClD;AAAA,IAAA;AAGN,QAAIC,IAAyC;AAE7C,IAAAC;AAAA,MACE,MAAML,EAAM;AAAA,MACZ,CAACxE,MAAU;AAKT,YAJI4E,MACFA,EAAA,GACAA,IAAoB,OAElB5E,MAAU,QAAQ;AACpB,gBAAM8E,IAAM,OAAO,WAAW,8BAA8B,GACtDC,IAAU,CAACC,MAA2B;AAAE,YAAAN,EAAW,QAAQM,EAAE;AAAA,UAAS;AAC5E,UAAAF,EAAI,iBAAiB,UAAUC,CAAO,GACtCH,IAAoB,MAAME,EAAI,oBAAoB,UAAUC,CAAO;AAAA,QACrE;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpBE,GAAgB,MAAM;AACpB,MAAIL,KAAmBA,EAAA;AAAA,IACzB,CAAC;AAED,UAAMM,IAAgB7F;AAAA,MAAS,MAC7BmF,EAAM,UAAU,SAAUE,EAAW,QAAQ,SAAS,UAAWF,EAAM;AAAA,IAAA,GAGnEyG,IAAsB,MAAMpH,EAAK,OAAO,GACxCqH,IAAqB,CAAClG,MAAkBA,EAAE,gBAAA,GAC1CmG,IAAc,CAACnG,MAAkBA,EAAE,gBAAA;2BAIvC8E,EA0BWsB,IAAA,EA1BD,IAAG,UAAM;AAAA,MACjBrH,EAwBasH,IAAA,EAxBD,MAAK,cAAU;AAAA,oBACzB,MAsBM;AAAA,UAtBKnH,EAAA,eAAXjC,EAsBM,OAAA;AAAA;YAtBa,OAAM;AAAA,YAAY,cAAYiD,EAAA;AAAA,UAAA;YAC/C/C,EAoBM,OAAA;AAAA,cAnBJ,OAAM;AAAA,cACL,SAAO8I;AAAA,cACP,SAAOE;AAAA,YAAA;cAERhJ,EAcM,OAAA;AAAA,gBAdD,OAAM;AAAA,gBAAsC,SAAO+I;AAAA,cAAA;gBACtDnH,EAYEuH,IAAA;AAAA,kBAXA,MAAK;AAAA,kBACJ,OAAOpH,EAAA;AAAA,kBACP,iBAAeA,EAAA;AAAA,kBACf,oBAAkBA,EAAA;AAAA,kBAClB,QAAQA,EAAA;AAAA,kBACR,UAAUA,EAAA;AAAA,kBACV,UAAUA,EAAA;AAAA,kBACV,OAAOA,EAAA;AAAA,kBACP,gCAAOL,EAAI,OAAA;AAAA,kBACX,YAAQuG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGrO,MAAM8H,cAAiB9H,CAAC;AAAA,kBACnC,eAAYqO,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGhO,MAAMyH,kBAAqBzH,CAAC;AAAA,gBAAA;;;;;;;;;;;;;;;;;;;;;;;;AChF1D,UAAMoI,IAAQN,GAWRL,IAAOC,GAKPY,IAAaC;AAAA,MACjB,OAAO,SAAW,MACd,OAAO,WAAW,8BAA8B,EAAE,UAClD;AAAA,IAAA;AAGN,QAAIC,IAAyC;AAE7C,IAAAC;AAAA,MACE,MAAML,EAAM;AAAA,MACZ,CAACxE,MAAU;AAKT,YAJI4E,MACFA,EAAA,GACAA,IAAoB,OAElB5E,MAAU,QAAQ;AACpB,gBAAM8E,IAAM,OAAO,WAAW,8BAA8B,GACtDC,IAAU,CAACC,MAA2B;AAAE,YAAAN,EAAW,QAAQM,EAAE;AAAA,UAAS;AAC5E,UAAAF,EAAI,iBAAiB,UAAUC,CAAO,GACtCH,IAAoB,MAAME,EAAI,oBAAoB,UAAUC,CAAO;AAAA,QACrE;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpBE,GAAgB,MAAM;AACpB,MAAIL,KAAmBA,EAAA;AAAA,IACzB,CAAC;AAED,UAAMM,IAAgB7F;AAAA,MAAS,MAC7BmF,EAAM,UAAU,SAAUE,EAAW,QAAQ,SAAS,UAAWF,EAAM;AAAA,IAAA,GAGnE+G,IAA8B;AAAA,MAClC,OAAO,OAAO/G,EAAM,SAAU,WAAW,GAAGA,EAAM,KAAK,OAAOA,EAAM;AAAA,MACpE,QAAQ,OAAOA,EAAM,UAAW,WAAW,GAAGA,EAAM,MAAM,OAAOA,EAAM;AAAA,IAAA;2BAKvEvC,EAeM,OAAA;AAAA,MAfD,OAAM;AAAA,MAAY,OAAOsJ;AAAA,MAAe,cAAYrG,EAAA;AAAA,IAAA;MACvD/C,EAaM,OAbNC,IAaM;AAAA,QAZJ2B,EAWEuH,IAAA;AAAA,UAVA,MAAK;AAAA,UACJ,OAAOpH,EAAA;AAAA,UACP,iBAAeA,EAAA;AAAA,UACf,oBAAkBA,EAAA;AAAA,UAClB,QAAQA,EAAA;AAAA,UACR,UAAUA,EAAA;AAAA,UACV,UAAUA,EAAA;AAAA,UACV,OAAOA,EAAA;AAAA,UACP,YAAQkG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGrO,MAAM8H,cAAiB9H,CAAC;AAAA,UACnC,eAAYqO,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGhO,MAAMyH,kBAAqBzH,CAAC;AAAA,QAAA;;;;ICtFvCoP,KAAUC,GAAY;"}
|