@meridianlabs/log-viewer 0.3.282 → 0.3.284

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/lib/{AnsiDisplayRich-302CIkEj.js → AnsiDisplayRich-Dpc1-E4A.js} +31 -34
  2. package/lib/AnsiDisplayRich-Dpc1-E4A.js.map +1 -0
  3. package/lib/{AsciinemaPlayerImpl-BG5NPs0z.js → AsciinemaPlayerImpl-DrztGkXg.js} +40 -35
  4. package/lib/{AsciinemaPlayerImpl-BG5NPs0z.js.map → AsciinemaPlayerImpl-DrztGkXg.js.map} +1 -1
  5. package/lib/ToolButton-BGW3G4cu.js +374 -0
  6. package/lib/ToolButton-BGW3G4cu.js.map +1 -0
  7. package/lib/e2e/csp/csp.spec.d.ts +2 -0
  8. package/lib/e2e/csp/csp.spec.d.ts.map +1 -0
  9. package/lib/e2e/csp/cspLogs.d.ts +10 -0
  10. package/lib/e2e/csp/cspLogs.d.ts.map +1 -0
  11. package/lib/e2e/csp/media.d.ts +3 -0
  12. package/lib/e2e/csp/media.d.ts.map +1 -0
  13. package/lib/e2e/expandable-panel-nested-toggles.spec.d.ts +2 -0
  14. package/lib/e2e/expandable-panel-nested-toggles.spec.d.ts.map +1 -0
  15. package/lib/e2e/fixtures/app.d.ts +12 -1
  16. package/lib/e2e/fixtures/app.d.ts.map +1 -1
  17. package/lib/e2e/message-selection.spec.d.ts +2 -0
  18. package/lib/e2e/message-selection.spec.d.ts.map +1 -0
  19. package/lib/index.js +35328 -34927
  20. package/lib/index.js.map +1 -1
  21. package/lib/{markdownPipeline-C_z-iU9a.js → markdownPipeline-D23f-WkE.js} +456 -427
  22. package/lib/markdownPipeline-D23f-WkE.js.map +1 -0
  23. package/lib/{prismHighlighter-D-PZtkPX.js → prismHighlighter-7qrXrStR.js} +1 -2
  24. package/lib/{prismHighlighter-D-PZtkPX.js.map → prismHighlighter-7qrXrStR.js.map} +1 -1
  25. package/lib/src/app/App.d.ts.map +1 -1
  26. package/lib/src/app/AppProviders.d.ts +10 -0
  27. package/lib/src/app/AppProviders.d.ts.map +1 -0
  28. package/lib/src/app/log-list/LogsPanel.d.ts.map +1 -1
  29. package/lib/src/app/log-list/ViewerOptionsButton.d.ts +1 -0
  30. package/lib/src/app/log-list/ViewerOptionsButton.d.ts.map +1 -1
  31. package/lib/src/app/log-list/ViewerOptionsPopover.d.ts +1 -0
  32. package/lib/src/app/log-list/ViewerOptionsPopover.d.ts.map +1 -1
  33. package/lib/src/app/log-list/grid/columns/hooks.d.ts.map +1 -1
  34. package/lib/src/app/log-view/error/TaskErrorPanel.d.ts.map +1 -1
  35. package/lib/src/app/log-view/tabs/InfoTab.d.ts +1 -1
  36. package/lib/src/app/log-view/tabs/JsonTab.d.ts.map +1 -1
  37. package/lib/src/app/log-view/tabs/ModelsTab.d.ts +1 -1
  38. package/lib/src/app/log-view/tabs/SamplesTab.d.ts.map +1 -1
  39. package/lib/src/app/log-view/tabs/timeline/HistoryList.d.ts.map +1 -1
  40. package/lib/src/app/log-view/tabs/timeline/TimelineChart.d.ts.map +1 -1
  41. package/lib/src/app/log-view/tabs/timeline/TimelineTab.d.ts +1 -1
  42. package/lib/src/app/log-view/tabs/timeline/TimelineTab.d.ts.map +1 -1
  43. package/lib/src/app/log-view/title-view/CollapsedTitleBar.d.ts.map +1 -1
  44. package/lib/src/app/log-view/title-view/EditAnnotationsDialog.d.ts +22 -0
  45. package/lib/src/app/log-view/title-view/EditAnnotationsDialog.d.ts.map +1 -0
  46. package/lib/src/app/log-view/title-view/EditMetadataDialog.d.ts +3 -3
  47. package/lib/src/app/log-view/title-view/EditMetadataDialog.d.ts.map +1 -1
  48. package/lib/src/app/log-view/title-view/EditTagsDialog.d.ts.map +1 -1
  49. package/lib/src/app/log-view/title-view/RunningStatusPanel.d.ts.map +1 -1
  50. package/lib/src/app/log-view/title-view/ScoreGrid.d.ts.map +1 -1
  51. package/lib/src/app/log-view/title-view/StatusPanel.d.ts +2 -1
  52. package/lib/src/app/log-view/title-view/StatusPanel.d.ts.map +1 -1
  53. package/lib/src/app/log-view/title-view/renderEditDialog.d.ts +12 -0
  54. package/lib/src/app/log-view/title-view/renderEditDialog.d.ts.map +1 -0
  55. package/lib/src/app/navbar/ApplicationNavbar.d.ts +3 -0
  56. package/lib/src/app/navbar/ApplicationNavbar.d.ts.map +1 -1
  57. package/lib/src/app/navbar/Navbar.d.ts.map +1 -1
  58. package/lib/src/app/navbar/NavbarButton.d.ts +2 -1
  59. package/lib/src/app/navbar/NavbarButton.d.ts.map +1 -1
  60. package/lib/src/app/navbar/ViewSegmentedControl.d.ts.map +1 -1
  61. package/lib/src/app/plan/DetailStep.d.ts +2 -1
  62. package/lib/src/app/plan/DetailStep.d.ts.map +1 -1
  63. package/lib/src/app/plan/ScorerDetailView.d.ts.map +1 -1
  64. package/lib/src/app/plan/SolverDetailView.d.ts.map +1 -1
  65. package/lib/src/app/routing/url.d.ts +8 -3
  66. package/lib/src/app/routing/url.d.ts.map +1 -1
  67. package/lib/src/app/samples/InlineSampleDisplay.d.ts.map +1 -1
  68. package/lib/src/app/samples/SampleDisplay.d.ts.map +1 -1
  69. package/lib/src/app/samples/SampleRetriedErrors.d.ts.map +1 -1
  70. package/lib/src/app/samples/SamplesTools.d.ts.map +1 -1
  71. package/lib/src/app/samples/StoreTerminalSessions.d.ts +20 -0
  72. package/lib/src/app/samples/StoreTerminalSessions.d.ts.map +1 -0
  73. package/lib/src/app/samples/error/SampleErrorView.d.ts.map +1 -1
  74. package/lib/src/app/samples/event/SampleEventView.d.ts.map +1 -1
  75. package/lib/src/app/samples/header-v2/ScorePanel.d.ts.map +1 -1
  76. package/lib/src/app/samples/list/samplesView.d.ts +1 -1
  77. package/lib/src/app/samples/print/SamplePrintView.d.ts +3 -1
  78. package/lib/src/app/samples/print/SamplePrintView.d.ts.map +1 -1
  79. package/lib/src/app/samples/retry-display/RetryAttemptCard.d.ts.map +1 -1
  80. package/lib/src/app/samples/retry-display/RetryTerminalAnchor.d.ts.map +1 -1
  81. package/lib/src/app/samples/sample-tools/SelectScorer.d.ts.map +1 -1
  82. package/lib/src/app/samples/sample-tools/sample-filter/SampleFilter.d.ts.map +1 -1
  83. package/lib/src/app/samples/scans/ScansSidebarPanel.d.ts.map +1 -1
  84. package/lib/src/app/samples/status/status.d.ts.map +1 -1
  85. package/lib/src/app/samples/transcript/TranscriptPanel.d.ts +4 -2
  86. package/lib/src/app/samples/transcript/TranscriptPanel.d.ts.map +1 -1
  87. package/lib/src/app/samples/transcript/search/SearchScoutUnavailable.d.ts.map +1 -1
  88. package/lib/src/app/samples/useEvidenceSelection.d.ts +56 -0
  89. package/lib/src/app/samples/useEvidenceSelection.d.ts.map +1 -0
  90. package/lib/src/app/samples-panel/SamplesPanel.d.ts.map +1 -1
  91. package/lib/src/app/server/useUserInfo.d.ts +12 -0
  92. package/lib/src/app/server/useUserInfo.d.ts.map +1 -0
  93. package/lib/src/app/shared/ColumnSelectorPopover.d.ts.map +1 -1
  94. package/lib/src/app/shared/contentTrust.d.ts +1 -5
  95. package/lib/src/app/shared/contentTrust.d.ts.map +1 -1
  96. package/lib/src/app/shared/data-grid/DataGrid.d.ts +1 -2
  97. package/lib/src/app/shared/data-grid/DataGrid.d.ts.map +1 -1
  98. package/lib/src/app/types.d.ts +2 -2
  99. package/lib/src/app/types.d.ts.map +1 -1
  100. package/lib/src/app_config/LogLocationGate.d.ts +6 -5
  101. package/lib/src/app_config/LogLocationGate.d.ts.map +1 -1
  102. package/lib/src/app_config/appConfig.d.ts +1 -2
  103. package/lib/src/app_config/appConfig.d.ts.map +1 -1
  104. package/lib/src/app_config/logLocationTrust.d.ts +5 -4
  105. package/lib/src/app_config/logLocationTrust.d.ts.map +1 -1
  106. package/lib/src/app_config/resolveBackend.d.ts +3 -3
  107. package/lib/src/app_config/resolveBackend.d.ts.map +1 -1
  108. package/lib/src/client/api/client-api.d.ts.map +1 -1
  109. package/lib/src/client/api/shared/api-shared.d.ts.map +1 -1
  110. package/lib/src/client/api/testClientApi.d.ts +2 -1
  111. package/lib/src/client/api/testClientApi.d.ts.map +1 -1
  112. package/lib/src/client/api/types.d.ts +2 -5
  113. package/lib/src/client/api/types.d.ts.map +1 -1
  114. package/lib/src/client/api/vscode/testExtensionHost.d.ts +28 -0
  115. package/lib/src/client/api/vscode/testExtensionHost.d.ts.map +1 -0
  116. package/lib/src/client/database/schema.d.ts.map +1 -1
  117. package/lib/src/client/json-parse.worker.d.ts +2 -0
  118. package/lib/src/client/json-parse.worker.d.ts.map +1 -0
  119. package/lib/src/client/jsonParseWorker.d.ts +2 -0
  120. package/lib/src/client/jsonParseWorker.d.ts.map +1 -0
  121. package/lib/src/client/remote/{zstd-worker.d.ts → decompression-worker.d.ts} +15 -8
  122. package/lib/src/client/remote/decompression-worker.d.ts.map +1 -0
  123. package/lib/src/client/remote/decompression.d.ts.map +1 -1
  124. package/lib/src/client/remote/decompression.worker.d.ts +2 -0
  125. package/lib/src/client/remote/decompression.worker.d.ts.map +1 -0
  126. package/lib/src/client/remote/inflate.d.ts +11 -0
  127. package/lib/src/client/remote/inflate.d.ts.map +1 -0
  128. package/lib/src/client/remote/zstd-decoder.d.ts.map +1 -1
  129. package/lib/src/client/utils/derive.d.ts.map +1 -1
  130. package/lib/src/components/DownloadLogButton.d.ts.map +1 -1
  131. package/lib/src/components/LinkButton.d.ts +2 -1
  132. package/lib/src/components/LinkButton.d.ts.map +1 -1
  133. package/lib/src/components/MessageBand.d.ts.map +1 -1
  134. package/lib/src/index.d.ts +0 -9
  135. package/lib/src/index.d.ts.map +1 -1
  136. package/lib/src/log_data/databaseInstance.d.ts +7 -0
  137. package/lib/src/log_data/databaseInstance.d.ts.map +1 -1
  138. package/lib/src/log_data/databaseListings.d.ts +3 -1
  139. package/lib/src/log_data/databaseListings.d.ts.map +1 -1
  140. package/lib/src/log_data/fetchEngine.d.ts +4 -0
  141. package/lib/src/log_data/fetchEngine.d.ts.map +1 -1
  142. package/lib/src/log_data/imperativeLogData.d.ts +1 -1
  143. package/lib/src/log_data/index.d.ts +3 -1
  144. package/lib/src/log_data/index.d.ts.map +1 -1
  145. package/lib/src/log_data/runningSampleQuery.d.ts +4 -1
  146. package/lib/src/log_data/runningSampleQuery.d.ts.map +1 -1
  147. package/lib/src/log_data/samplesListing.d.ts +1 -2
  148. package/lib/src/log_data/samplesListing.d.ts.map +1 -1
  149. package/lib/src/log_data/testFixtures.d.ts +1 -1
  150. package/lib/src/log_data/testFixtures.d.ts.map +1 -1
  151. package/lib/src/log_data/useFetchEngineStatus.d.ts +5 -1
  152. package/lib/src/log_data/useFetchEngineStatus.d.ts.map +1 -1
  153. package/lib/src/log_data/useLogsSync.d.ts +7 -1
  154. package/lib/src/log_data/useLogsSync.d.ts.map +1 -1
  155. package/lib/src/main.d.ts +0 -1
  156. package/lib/src/main.d.ts.map +1 -1
  157. package/lib/src/scoring/headline.d.ts.map +1 -1
  158. package/lib/src/state/hooks.d.ts.map +1 -1
  159. package/lib/src/state/sampleSlice.d.ts +6 -6
  160. package/lib/src/state/sampleSlice.d.ts.map +1 -1
  161. package/lib/src/test/mswServer.d.ts +9 -0
  162. package/lib/src/test/mswServer.d.ts.map +1 -0
  163. package/lib/src/test/nodeWorker.d.ts +2 -0
  164. package/lib/src/test/nodeWorker.d.ts.map +1 -0
  165. package/lib/src/test/testApp.d.ts +36 -0
  166. package/lib/src/test/testApp.d.ts.map +1 -0
  167. package/lib/styles/index.css +12654 -12529
  168. package/package.json +20 -20
  169. package/lib/AnsiDisplayRich-302CIkEj.js.map +0 -1
  170. package/lib/ToolButton-BmBvTvKO.js +0 -124
  171. package/lib/ToolButton-BmBvTvKO.js.map +0 -1
  172. package/lib/markdownPipeline-C_z-iU9a.js.map +0 -1
  173. package/lib/src/app/appearance/colors.d.ts +0 -10
  174. package/lib/src/app/appearance/colors.d.ts.map +0 -1
  175. package/lib/src/app/appearance/icons.d.ts +0 -148
  176. package/lib/src/app/appearance/icons.d.ts.map +0 -1
  177. package/lib/src/app/log-view/title-view/ProvenanceFields.d.ts +0 -11
  178. package/lib/src/app/log-view/title-view/ProvenanceFields.d.ts.map +0 -1
  179. package/lib/src/app/samples/error/FlatSampleErrorView.d.ts +0 -10
  180. package/lib/src/app/samples/error/FlatSampleErrorView.d.ts.map +0 -1
  181. package/lib/src/app/samples/sampleDataAdapter.d.ts +0 -7
  182. package/lib/src/app/samples/sampleDataAdapter.d.ts.map +0 -1
  183. package/lib/src/app/samples/transcript/types.d.ts +0 -9
  184. package/lib/src/app/samples/transcript/types.d.ts.map +0 -1
  185. package/lib/src/app/shared/openInNewTab.d.ts +0 -13
  186. package/lib/src/app/shared/openInNewTab.d.ts.map +0 -1
  187. package/lib/src/client/database/utils.d.ts +0 -3
  188. package/lib/src/client/database/utils.d.ts.map +0 -1
  189. package/lib/src/client/remote/zstd-worker-code.d.ts +0 -20
  190. package/lib/src/client/remote/zstd-worker-code.d.ts.map +0 -1
  191. package/lib/src/client/remote/zstd-worker.d.ts.map +0 -1
  192. package/lib/src/components/CodePanel.d.ts +0 -8
  193. package/lib/src/components/CodePanel.d.ts.map +0 -1
  194. package/lib/src/test/nodeBlobWorker.d.ts +0 -2
  195. package/lib/src/test/nodeBlobWorker.d.ts.map +0 -1
  196. package/lib/src/utils/debugging.d.ts +0 -3
  197. package/lib/src/utils/debugging.d.ts.map +0 -1
  198. package/lib/src-s8Cexy_j.js +0 -9977
  199. package/lib/src-s8Cexy_j.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AsciinemaPlayerImpl-BG5NPs0z.js","names":["clamp","previousState","startTransition","create","ret","create","useEffect","useRef","AsciinemaPlayerImpl","_c"],"sources":["../../../node_modules/.pnpm/asciinema-player@3.17.0/node_modules/asciinema-player/dist/logging-DeB0koVt.js","../../../node_modules/.pnpm/asciinema-player@3.17.0/node_modules/asciinema-player/dist/core-BSn7GtYU.js","../../../node_modules/.pnpm/asciinema-player@3.17.0/node_modules/asciinema-player/dist/opts-Dj5f5MR1.js","../../../node_modules/.pnpm/asciinema-player@3.17.0/node_modules/asciinema-player/dist/index.js","../../../packages/react/src/components/AsciinemaPlayerImpl.tsx"],"sourcesContent":["function parseNpt(time) {\n if (typeof time === \"number\") {\n return time;\n } else if (typeof time === \"string\") {\n return time.split(\":\").reverse().map(parseFloat).reduce((sum, n, i) => sum + n * Math.pow(60, i));\n } else {\n return undefined;\n }\n}\nfunction debounce(f, delay) {\n let timeout;\n return function (...args) {\n clearTimeout(timeout);\n timeout = setTimeout(() => f.apply(this, args), delay);\n };\n}\nfunction throttle(f, interval) {\n let enableCall = true;\n return function (...args) {\n if (!enableCall) return;\n enableCall = false;\n f.apply(this, args);\n setTimeout(() => enableCall = true, interval);\n };\n}\n\nfunction toErrorPayload(error) {\n return {\n name: typeof error?.name === \"string\" ? error.name : \"Error\",\n message: typeof error?.message === \"string\" ? error.message : String(error)\n };\n}\nfunction fromErrorPayload(payload) {\n const error = new Error(typeof payload?.message === \"string\" ? payload.message : \"Unknown error\");\n error.name = typeof payload?.name === \"string\" ? payload.name : \"Error\";\n return error;\n}\n\nconst FULL_HEX_COLOR_REGEX = /^#[0-9a-f]{6}$/;\nconst SHORT_HEX_COLOR_REGEX = /^#[0-9a-f]{3}$/;\nfunction normalizeHexColor(color, fallback = undefined) {\n if (typeof color !== \"string\") return fallback;\n const normalized = color.trim().toLowerCase();\n if (FULL_HEX_COLOR_REGEX.test(normalized)) {\n return normalized;\n }\n if (SHORT_HEX_COLOR_REGEX.test(normalized)) {\n return `#${normalized[1]}${normalized[1]}${normalized[2]}${normalized[2]}${normalized[3]}${normalized[3]}`;\n }\n return fallback;\n}\nfunction lerpOklab(t, c1, c2) {\n return [c1[0] + t * (c2[0] - c1[0]), c1[1] + t * (c2[1] - c1[1]), c1[2] + t * (c2[2] - c1[2])];\n}\nfunction hexToOklab(hex) {\n const [r, g, b] = hexToSrgb(hex).map(srgbToLinear);\n const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\n const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\n const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\n const l_ = Math.cbrt(l);\n const m_ = Math.cbrt(m);\n const s_ = Math.cbrt(s);\n return [0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_, 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_, 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_];\n}\nfunction oklabToHex(lab) {\n const rgb = oklabToSrgb(lab);\n if (isSrgbInGamut(rgb)) return srgbToHex(rgb);\n const [L, C, h] = oklabToOklch(lab);\n let low = 0;\n let high = C;\n let best = [L, 0, h];\n for (let i = 0; i < 24; i += 1) {\n const mid = (low + high) / 2;\n const candidate = [L, mid, h];\n const candidateRgb = oklabToSrgb(oklchToOklab(candidate));\n if (isSrgbInGamut(candidateRgb)) {\n low = mid;\n best = candidate;\n } else {\n high = mid;\n }\n }\n return srgbToHex(oklabToSrgb(oklchToOklab(best)));\n}\nfunction oklabToSrgb(lab) {\n const L = clamp(lab[0], 0, 1);\n const a = lab[1];\n const b = lab[2];\n const l_ = L + 0.3963377774 * a + 0.2158037573 * b;\n const m_ = L - 0.1055613458 * a - 0.0638541728 * b;\n const s_ = L - 0.0894841775 * a - 1.291485548 * b;\n const l = l_ ** 3;\n const m = m_ ** 3;\n const s = s_ ** 3;\n const r = 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s;\n const g = -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s;\n const blue = -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s;\n return [linearToSrgb(r), linearToSrgb(g), linearToSrgb(blue)];\n}\nfunction oklabToOklch([L, a, b]) {\n return [L, Math.hypot(a, b), Math.atan2(b, a)];\n}\nfunction oklchToOklab([L, C, h]) {\n return [L, C * Math.cos(h), C * Math.sin(h)];\n}\nfunction hexToSrgb(hex) {\n return [Number.parseInt(hex.slice(1, 3), 16) / 255, Number.parseInt(hex.slice(3, 5), 16) / 255, Number.parseInt(hex.slice(5, 7), 16) / 255];\n}\nfunction rgbToHex(r, g, b) {\n return `#${toHexByte(r)}${toHexByte(g)}${toHexByte(b)}`;\n}\nfunction srgbToHex(rgb) {\n return rgbToHex(rgb[0] * 255, rgb[1] * 255, rgb[2] * 255);\n}\nfunction srgbToLinear(c) {\n if (c <= 0.04045) return c / 12.92;\n return ((c + 0.055) / 1.055) ** 2.4;\n}\nfunction linearToSrgb(c) {\n if (c <= 0.0031308) return c * 12.92;\n return 1.055 * c ** (1 / 2.4) - 0.055;\n}\nfunction isSrgbInGamut([r, g, b]) {\n return r >= 0 && r <= 1 && g >= 0 && g <= 1 && b >= 0 && b <= 1;\n}\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\nfunction toHexByte(value) {\n const byte = Math.round(clamp(value, 0, 255));\n return byte.toString(16).padStart(2, \"0\");\n}\n\nclass DummyLogger {\n log(...args) {}\n debug(...args) {}\n info(...args) {}\n warn(...args) {}\n error(...args) {}\n}\nclass PrefixedLogger {\n constructor(logger, prefix) {\n this.logger = logger;\n this.prefix = prefix;\n }\n log(message, ...args) {\n this.logger.log(`${this.prefix}${message}`, ...args);\n }\n debug(message, ...args) {\n this.logger.debug(`${this.prefix}${message}`, ...args);\n }\n info(message, ...args) {\n this.logger.info(`${this.prefix}${message}`, ...args);\n }\n warn(message, ...args) {\n this.logger.warn(`${this.prefix}${message}`, ...args);\n }\n error(message, ...args) {\n this.logger.error(`${this.prefix}${message}`, ...args);\n }\n}\n\nexport { DummyLogger as D, PrefixedLogger as P, toErrorPayload as a, debounce as d, fromErrorPayload as f, hexToOklab as h, lerpOklab as l, normalizeHexColor as n, oklabToHex as o, parseNpt as p, rgbToHex as r, throttle as t };\n","import { n as normalizeHexColor, a as toErrorPayload, P as PrefixedLogger, p as parseNpt } from './logging-DeB0koVt.js';\n\nclass Clock {\n constructor(speed = 1.0) {\n this.speed = speed;\n this.startTime = performance.now();\n }\n getTime() {\n return this.speed * (performance.now() - this.startTime);\n }\n setTime(time) {\n this.startTime = performance.now() - time / this.speed;\n }\n}\nclass NullClock {\n constructor() {}\n getTime(_speed) {}\n setTime(_time) {}\n}\n\n// Efficient array transformations without intermediate array objects.\n// Inspired by Elixir's streams and Rust's iterator adapters.\n\nclass Stream {\n constructor(input, xfs) {\n this.input = typeof input.next === \"function\" ? input : input[Symbol.iterator]();\n this.xfs = xfs ?? [];\n }\n map(f) {\n return this.transform(Map$1(f));\n }\n flatMap(f) {\n return this.transform(FlatMap(f));\n }\n filter(f) {\n return this.transform(Filter(f));\n }\n take(n) {\n return this.transform(Take(n));\n }\n drop(n) {\n return this.transform(Drop(n));\n }\n transform(f) {\n return new Stream(this.input, this.xfs.concat([f]));\n }\n multiplex(other, comparator) {\n return new Stream(new Multiplexer(this[Symbol.iterator](), other[Symbol.iterator](), comparator));\n }\n toArray() {\n return Array.from(this);\n }\n [Symbol.iterator]() {\n let v = 0;\n let values = [];\n let flushed = false;\n const xf = compose(this.xfs, val => values.push(val));\n return {\n next: () => {\n if (v === values.length) {\n values = [];\n v = 0;\n }\n while (values.length === 0) {\n const next = this.input.next();\n if (next.done) {\n break;\n } else {\n xf.step(next.value);\n }\n }\n if (values.length === 0 && !flushed) {\n xf.flush();\n flushed = true;\n }\n if (values.length > 0) {\n return {\n done: false,\n value: values[v++]\n };\n } else {\n return {\n done: true\n };\n }\n }\n };\n }\n}\nfunction Map$1(f) {\n return emit => {\n return input => {\n emit(f(input));\n };\n };\n}\nfunction FlatMap(f) {\n return emit => {\n return input => {\n f(input).forEach(emit);\n };\n };\n}\nfunction Filter(f) {\n return emit => {\n return input => {\n if (f(input)) {\n emit(input);\n }\n };\n };\n}\nfunction Take(n) {\n let c = 0;\n return emit => {\n return input => {\n if (c < n) {\n emit(input);\n }\n c += 1;\n };\n };\n}\nfunction Drop(n) {\n let c = 0;\n return emit => {\n return input => {\n c += 1;\n if (c > n) {\n emit(input);\n }\n };\n };\n}\nfunction compose(xfs, push) {\n return xfs.reverse().reduce((next, curr) => {\n const xf = toXf(curr(next.step));\n return {\n step: xf.step,\n flush: () => {\n xf.flush();\n next.flush();\n }\n };\n }, toXf(push));\n}\nfunction toXf(xf) {\n if (typeof xf === \"function\") {\n return {\n step: xf,\n flush: () => {}\n };\n } else {\n return xf;\n }\n}\nclass Multiplexer {\n constructor(left, right, comparator) {\n this.left = left;\n this.right = right;\n this.comparator = comparator;\n }\n [Symbol.iterator]() {\n let leftItem;\n let rightItem;\n return {\n next: () => {\n if (leftItem === undefined && this.left !== undefined) {\n const result = this.left.next();\n if (result.done) {\n this.left = undefined;\n } else {\n leftItem = result.value;\n }\n }\n if (rightItem === undefined && this.right !== undefined) {\n const result = this.right.next();\n if (result.done) {\n this.right = undefined;\n } else {\n rightItem = result.value;\n }\n }\n if (leftItem === undefined && rightItem === undefined) {\n return {\n done: true\n };\n } else if (leftItem === undefined) {\n const value = rightItem;\n rightItem = undefined;\n return {\n done: false,\n value: value\n };\n } else if (rightItem === undefined) {\n const value = leftItem;\n leftItem = undefined;\n return {\n done: false,\n value: value\n };\n } else if (this.comparator(leftItem, rightItem)) {\n const value = leftItem;\n leftItem = undefined;\n return {\n done: false,\n value: value\n };\n } else {\n const value = rightItem;\n rightItem = undefined;\n return {\n done: false,\n value: value\n };\n }\n }\n };\n }\n}\n\nasync function loadFullRecording(src, options) {\n return wrapFullRecording(prepareRecording(await loadRecording(src), options));\n}\nasync function loadRecording(src) {\n const {\n parser,\n encoding = \"utf-8\"\n } = src;\n const data = await doFetch(src);\n return await parser(data, {\n encoding\n });\n}\nfunction wrapFullRecording(recording) {\n const segment = {\n start: 0\n };\n const markers = recording.events.filter(event => event[1] === \"m\").map(event => [event[0], event[2].label]);\n return {\n cols: recording.cols,\n rows: recording.rows,\n theme: recording.theme,\n duration: recording.duration,\n effectiveStartAt: recording.effectiveStartAt,\n markers,\n segments: [segment],\n async loadSegment(index) {\n if (index !== 0) {\n throw new Error(\"unknown recording segment\");\n }\n return {\n snapshot: {\n cols: recording.cols,\n rows: recording.rows,\n init: \"\"\n },\n events: recording.events\n };\n }\n };\n}\nasync function doFetch({\n url,\n data,\n fetchOpts = {}\n}) {\n if (typeof url === \"string\") {\n return await doFetchOne(url, fetchOpts);\n } else if (Array.isArray(url)) {\n return await Promise.all(url.map(url => doFetchOne(url, fetchOpts)));\n } else if (data !== undefined) {\n if (typeof data === \"function\") {\n data = data();\n }\n if (!(data instanceof Promise)) {\n data = Promise.resolve(data);\n }\n const value = await data;\n if (typeof value === \"string\" || value instanceof ArrayBuffer) {\n return new Response(value);\n } else {\n return value;\n }\n } else {\n throw new Error(\"failed fetching recording file: url/data missing in src\");\n }\n}\nasync function doFetchOne(url, fetchOpts) {\n const response = await fetch(url, fetchOpts);\n if (!response.ok) {\n throw new Error(`failed fetching recording from ${url}: ${response.status} ${response.statusText}`);\n }\n return response;\n}\nfunction prepareRecording(recording, {\n startAt = 0,\n idleTimeLimit,\n inputOffset,\n markers\n}) {\n let {\n events\n } = recording;\n if (!(events instanceof Stream)) {\n events = new Stream(events);\n }\n startAt = startAt * 1000;\n idleTimeLimit = idleTimeLimit ?? recording.idleTimeLimit;\n idleTimeLimit = idleTimeLimit !== undefined ? idleTimeLimit * 1000 : Infinity;\n inputOffset = inputOffset !== undefined ? inputOffset * 1000 : undefined;\n const limiterOutput = {\n offset: 0\n };\n events = events.map(timeLimiter(idleTimeLimit, startAt, limiterOutput));\n if (markers !== undefined) {\n markers = new Stream(markers).map(normalizeMarker);\n events = events.filter(e => e[1] !== \"m\").multiplex(markers, (a, b) => a[0] < b[0]);\n }\n events = events.map(markerWrapper());\n events = events.toArray();\n if (inputOffset !== undefined) {\n events = events.map(e => e[1] === \"i\" ? [e[0] + inputOffset, e[1], e[2]] : e);\n events.sort((a, b) => a[0] - b[0]);\n }\n if (events.length === 0) {\n throw new Error(\"recording is missing events\");\n }\n const duration = events[events.length - 1][0];\n const effectiveStartAt = startAt - limiterOutput.offset;\n return {\n ...recording,\n events,\n duration,\n effectiveStartAt\n };\n}\nfunction normalizeMarker(marker) {\n return typeof marker === \"number\" ? [marker * 1000, \"m\", \"\"] : [marker[0] * 1000, \"m\", marker[1]];\n}\nfunction timeLimiter(idleTimeLimit, startAt, output) {\n let previousTime = 0;\n let shift = 0;\n return function (event) {\n const delay = event[0] - previousTime;\n const delta = delay - idleTimeLimit;\n previousTime = event[0];\n if (delta > 0) {\n shift += delta;\n if (event[0] < startAt) {\n output.offset += delta;\n }\n }\n return [event[0] - shift, event[1], event[2]];\n };\n}\nfunction markerWrapper() {\n let index = 0;\n return function (event) {\n if (event[1] === \"m\") {\n return [event[0], event[1], {\n index: index++,\n time: event[0],\n label: event[2]\n }];\n } else {\n return event;\n }\n };\n}\n\nfunction normalizeTheme(theme) {\n const foreground = normalizeHexColor(theme.foreground);\n const background = normalizeHexColor(theme.background);\n const paletteInput = theme.palette;\n if (paletteInput === undefined) return;\n if (!foreground || !background || paletteInput.length < 8) return;\n const palette = [];\n const limit = Math.min(paletteInput.length, 16);\n for (let i = 0; i < limit; i += 1) {\n const color = normalizeHexColor(paletteInput[i]);\n if (!color) return;\n palette.push(color);\n }\n for (let i = palette.length; i < 16; i += 1) {\n palette.push(palette[i - 8]);\n }\n return {\n foreground,\n background,\n palette\n };\n}\n\nfunction loadSegmentedRecording(src, opts = {}) {\n validateOptions(src, opts);\n return doLoadSegmentedRecording(src, opts);\n}\nasync function doLoadSegmentedRecording(src, {\n startAt = 0\n}) {\n const response = await fetchResponse(src.url, src.fetchOpts ?? {});\n let index;\n try {\n index = await response.json();\n } catch (error) {\n throw new Error(`failed parsing segmented recording index from ${src.url}: ${error.message}`);\n }\n validateIndex(index);\n const duration = index.duration * 1000;\n const markers = (index.markers ?? []).map(([time, label]) => [time * 1000, label]);\n const segments = index.segments.map(segment => ({\n start: segment.start * 1000,\n url: resolveUrl(segment.url, response.url || src.url)\n }));\n const recording = {\n cols: index.term.cols,\n rows: index.term.rows,\n theme: parseTheme$2(index.term.theme),\n duration,\n effectiveStartAt: Math.min(Math.max(startAt * 1000, 0), duration),\n markers,\n segments,\n async loadSegment(segmentIndex) {\n if (!Number.isInteger(segmentIndex) || segmentIndex < 0 || segmentIndex >= segments.length) {\n throw new Error(\"unknown recording segment\");\n }\n const segment = segments[segmentIndex];\n const segmentResponse = await fetchResponse(segment.url, src.fetchOpts ?? {});\n let payload;\n try {\n payload = await segmentResponse.json();\n } catch (error) {\n throw new Error(`failed parsing recording segment from ${segment.url}: ${error.message}`);\n }\n return normalizeSegment(recording, segmentIndex, payload);\n }\n };\n return recording;\n}\nfunction validateOptions(src, {\n idleTimeLimit,\n markers\n}) {\n if (typeof src.url !== \"string\") {\n throw new Error(\"segmented recording source requires a URL\");\n }\n const unsupported = [];\n if (idleTimeLimit !== undefined) unsupported.push(\"idleTimeLimit\");\n if (markers !== undefined) unsupported.push(\"markers\");\n for (const option of [\"inputOffset\", \"parser\", \"encoding\"]) {\n if (Object.hasOwn(src, option)) unsupported.push(option);\n }\n if (unsupported.length > 0) {\n throw new Error(`segmented recordings do not support option: ${unsupported.join(\", \")}`);\n }\n}\nfunction validateIndex(index) {\n if (index?.version !== 1) {\n throw new Error(`unsupported segmented recording version: ${JSON.stringify(index?.version)}`);\n }\n validateFiniteTime(index.duration, \"recording duration\");\n validateTerminalSize(index.term, \"recording terminal\");\n if (!Array.isArray(index.segments) || index.segments.length === 0) {\n throw new Error(\"segmented recording index is missing segments\");\n }\n let previousStart = -1;\n index.segments.forEach((segment, i) => {\n validateFiniteTime(segment?.start, `segment ${i} start`);\n if (typeof segment?.url !== \"string\" || segment.url.length === 0) {\n throw new Error(`segment ${i} is missing its URL`);\n }\n if (i === 0 && segment.start !== 0) {\n throw new Error(\"first segment must start at 0\");\n }\n if (i > 0 && (segment.start <= previousStart || segment.start >= index.duration)) {\n throw new Error(`segment ${i} start must be strictly increasing and before duration`);\n }\n previousStart = segment.start;\n });\n if (index.markers !== undefined && !Array.isArray(index.markers)) {\n throw new Error(\"segmented recording markers must be an array\");\n }\n let previousMarkerTime = -1;\n for (const [i, marker] of (index.markers ?? []).entries()) {\n if (!Array.isArray(marker) || marker.length !== 2 || typeof marker[1] !== \"string\") {\n throw new Error(`invalid marker ${i} in segmented recording index`);\n }\n validateFiniteTime(marker[0], `marker ${i} time`);\n if (marker[0] < previousMarkerTime || marker[0] > index.duration) {\n throw new Error(`marker ${i} time is out of order or range`);\n }\n previousMarkerTime = marker[0];\n }\n}\nfunction normalizeSegment(recording, index, payload) {\n const snapshot = payload?.snapshot;\n validateTerminalSize(snapshot, `segment ${index} snapshot`);\n if (typeof snapshot.init !== \"string\") {\n throw new Error(`segment ${index} snapshot init must be a string`);\n }\n if (!Array.isArray(payload.events) || payload.events.length === 0) {\n throw new Error(`segment ${index} is missing events`);\n }\n const start = recording.segments[index].start;\n const end = recording.segments[index + 1]?.start ?? recording.duration;\n let previousTime = -1;\n let markerIndex = recording.markers.findIndex(([time]) => time >= start);\n if (markerIndex === -1) markerIndex = recording.markers.length;\n const events = payload.events.map((event, eventIndex) => {\n if (!Array.isArray(event) || event.length !== 3 || typeof event[1] !== \"string\") {\n throw new Error(`invalid event ${eventIndex} in segment ${index}`);\n }\n const time = event[0] * 1000;\n validateFiniteTime(time, `event ${eventIndex} time in segment ${index}`, true);\n if (time < previousTime || time < start || (index + 1 < recording.segments.length ? time >= end : time > end)) {\n throw new Error(`event ${eventIndex} time is out of range in segment ${index}`);\n }\n previousTime = time;\n if (event[1] === \"m\") {\n if (typeof event[2] !== \"string\") {\n throw new Error(`marker event ${eventIndex} in segment ${index} must have a string label`);\n }\n return [time, \"m\", {\n index: markerIndex++,\n time,\n label: event[2]\n }];\n }\n return [time, event[1], event[2]];\n });\n if (index > 0 && events[0][0] !== start) {\n throw new Error(`segment ${index} first event must match its start`);\n }\n if (index === recording.segments.length - 1 && events[events.length - 1][0] !== recording.duration) {\n throw new Error(\"final segment event must match recording duration\");\n }\n return {\n snapshot: {\n cols: snapshot.cols,\n rows: snapshot.rows,\n init: snapshot.init\n },\n events\n };\n}\nasync function fetchResponse(url, fetchOpts) {\n const response = await fetch(url, fetchOpts);\n if (!response.ok) {\n throw new Error(`failed fetching recording from ${url}: ${response.status} ${response.statusText}`);\n }\n return response;\n}\nfunction validateFiniteTime(value, label, milliseconds = false) {\n if (!Number.isFinite(value) || value < 0) {\n throw new Error(`${label} must be a finite non-negative ${milliseconds ? \"millisecond\" : \"second\"} value`);\n }\n}\nfunction validateTerminalSize(term, label) {\n if (!Number.isInteger(term?.cols) || term.cols <= 0 || !Number.isInteger(term?.rows) || term.rows <= 0) {\n throw new Error(`${label} must have positive integer cols and rows`);\n }\n}\nfunction parseTheme$2(theme) {\n return normalizeTheme({\n foreground: theme?.fg,\n background: theme?.bg,\n palette: typeof theme?.palette === \"string\" ? theme.palette.split(\":\") : undefined\n });\n}\nfunction resolveUrl(url, indexUrl) {\n return new URL(url, new URL(indexUrl, globalThis.location?.href ?? \"http://localhost/\")).href;\n}\n\nfunction recording(src, {\n dispatch,\n logger\n}, {\n speed,\n idleTimeLimit,\n startAt,\n preload,\n loop,\n poster,\n markers: markers_,\n pauseOnMarkers,\n cols: optionCols,\n rows: optionRows,\n audioUrl\n}) {\n const STATE = {\n COLD: \"cold\",\n // Recording has not been loaded yet.\n LOADING: \"loading\",\n // Recording/audio load is in progress.\n READY_INITIAL: \"ready.initial\",\n // Loaded, not yet played or navigated.\n READY_PAUSED: \"ready.paused\",\n // Loaded and positioned while playback clock is stopped.\n READY_STARTING: \"ready.starting\",\n // Playback start/resume requested; waiting for clock readiness.\n READY_PLAYING: \"ready.playing\",\n // Playback clock is running and events are scheduled.\n READY_BUFFERING_WHILE_PAUSED: \"ready.buffering.whilePaused\",\n // Buffering while remaining paused.\n READY_BUFFERING_TO_RESUME: \"ready.buffering.toResume\",\n // Buffering before resuming playback.\n READY_ENDED: \"ready.ended\",\n // Playback or navigation reached recording duration.\n FAILED: \"failed\",\n // Fatal driver error; public commands reject.\n STOPPED: \"stopped\" // Terminal state after stop().\n };\n const EVENT = {\n INIT_REQUESTED: \"initRequested\",\n // Public init/preload command.\n PLAY_REQUESTED: \"playRequested\",\n // Public play command.\n DEFERRED_PLAY_READY: \"deferredPlayReady\",\n // Cold play() can continue after load.\n PAUSE_REQUESTED: \"pauseRequested\",\n // Public pause command.\n SEEK_REQUESTED: \"seekRequested\",\n // Public seek command.\n STEP_REQUESTED: \"stepRequested\",\n // Public frame-step command.\n STOP_REQUESTED: \"stopRequested\",\n // Public teardown command.\n LOAD_SUCCEEDED: \"loadSucceeded\",\n // Recording load completed.\n LOAD_FAILED: \"loadFailed\",\n // Recording load failed fatally.\n PLAYBACK_START_CONFIRMED: \"playbackStartConfirmed\",\n // Playback clock can start.\n PLAYBACK_START_REJECTED: \"playbackStartRejected\",\n // Audio/media play() rejected.\n PLAYBACK_ENDED: \"playbackEnded\",\n // Scheduled playback reached natural end.\n AUDIO_WAITING: \"audioWaiting\",\n // Audio element entered buffering.\n AUDIO_PLAYING: \"audioPlaying\",\n // Audio element resumed from buffering.\n SEGMENT_WAITING: \"segmentWaiting\",\n // Required segment is loading at a boundary.\n SEGMENT_READY: \"segmentReady\",\n // Required segment loaded and playback may continue.\n MARKER_REACHED: \"markerReached\" // Playback crossed a marker event.\n };\n const PLAYBACK_START_REASON = {\n PLAY: \"play\",\n SEEK: \"seek\"\n };\n const outputBatchWindow = (src.minFrameTime ?? 1 / 60) * 1000;\n let now = () => performance.now() * speed;\n let state = STATE.COLD;\n let queuedDriverEvents = [];\n let processingDriverEvents = false;\n const ctx = {\n recording: undefined,\n segmentIndex: undefined,\n segment: undefined,\n segmentCache: new Map(),\n positionGeneration: 0,\n markers: undefined,\n duration: undefined,\n effectiveStartAt: undefined,\n recordingEventTimeoutId: undefined,\n nextEventIndex: 0,\n lastEventTime: 0,\n startTime: undefined,\n pauseElapsedTime: undefined,\n playCount: 0,\n waitingTimeout: undefined,\n loadingTimeout: undefined,\n audioCtx: undefined,\n audioElement: undefined,\n audioSeekable: false,\n loaded: undefined,\n posterVisible: false,\n posterRenderableAfterLoad: poster !== undefined,\n failureError: null,\n segmentWaiting: false\n };\n function isBufferingState(value = state) {\n return value === STATE.READY_BUFFERING_WHILE_PAUSED || value === STATE.READY_BUFFERING_TO_RESUME;\n }\n function canLoopPlayback() {\n return loop === true || typeof loop === \"number\" && ctx.playCount < loop;\n }\n function loadPromise(initialTime) {\n if (ctx.loaded === undefined) {\n ctx.loaded = load(initialTime);\n void ctx.loaded.catch(() => {});\n }\n return ctx.loaded;\n }\n\n // Public command events (INIT_REQUESTED, PLAY_REQUESTED, PAUSE_REQUESTED,\n // SEEK_REQUESTED, STEP_REQUESTED, STOP_REQUESTED) are serialized by Core\n // and are considered re-entrancy safe.\n //\n // Primary non-stale state transitions:\n // COLD -> [INIT_REQUESTED] -> LOADING\n // COLD -> [PLAY_REQUESTED | SEEK_REQUESTED | STEP_REQUESTED] -> LOADING\n // LOADING -> [LOAD_SUCCEEDED] -> READY_INITIAL\n // LOADING -> [LOAD_FAILED] -> FAILED\n // READY_INITIAL -> [PLAY_REQUESTED | DEFERRED_PLAY_READY] -> READY_STARTING\n // READY_INITIAL -> [SEEK_REQUESTED | STEP_REQUESTED] -> READY_PAUSED\n // READY_PAUSED -> [PLAY_REQUESTED] -> READY_STARTING\n // READY_PAUSED -> [SEEK_REQUESTED | STEP_REQUESTED] -> READY_PAUSED\n // READY_ENDED -> [PLAY_REQUESTED] -> READY_STARTING\n // READY_ENDED -> [SEEK_REQUESTED | STEP_REQUESTED] -> READY_PAUSED\n // READY_STARTING -> [PLAYBACK_START_CONFIRMED] -> READY_PLAYING\n // READY_STARTING -> [PLAYBACK_START_REJECTED] -> READY_PAUSED\n // READY_PLAYING -> [PAUSE_REQUESTED] -> READY_PAUSED\n // READY_PLAYING -> [SEEK_REQUESTED] -> READY_STARTING\n // READY_PLAYING -> [AUDIO_WAITING] -> READY_BUFFERING_TO_RESUME\n // READY_PLAYING -> [MARKER_REACHED] -> READY_PAUSED (pauseOnMarkers)\n // READY_BUFFERING_TO_RESUME -> [PAUSE_REQUESTED] -> READY_BUFFERING_WHILE_PAUSED\n // READY_BUFFERING_TO_RESUME -> [AUDIO_PLAYING] -> READY_PLAYING\n // READY_BUFFERING_WHILE_PAUSED -> [PLAY_REQUESTED] -> READY_BUFFERING_TO_RESUME\n // READY_BUFFERING_WHILE_PAUSED -> [AUDIO_PLAYING] -> READY_PAUSED\n // READY_BUFFERING_TO_RESUME -> [PLAYBACK_START_REJECTED] -> READY_BUFFERING_WHILE_PAUSED\n // READY_PLAYING -> [PLAYBACK_ENDED] -> READY_ENDED | READY_PLAYING (loop)\n // COLD | READY_INITIAL | READY_PAUSED | READY_PLAYING\n // | READY_BUFFERING_WHILE_PAUSED | READY_BUFFERING_TO_RESUME | READY_ENDED\n // -> [STOP_REQUESTED] -> STOPPED\n function transition(currentState, event, payload = {}) {\n switch (event) {\n case EVENT.INIT_REQUESTED:\n if (currentState === STATE.COLD) {\n if (preload || poster?.type == \"npt\") {\n return {\n nextState: STATE.LOADING,\n action: () => loadPromise()\n };\n }\n if (poster?.type == \"text\") {\n return {\n nextState: currentState,\n action: () => renderTextPoster()\n };\n }\n }\n return {\n nextState: currentState\n };\n case EVENT.LOAD_SUCCEEDED:\n if (currentState !== STATE.LOADING) {\n return {\n nextState: currentState\n };\n }\n return {\n nextState: STATE.READY_INITIAL,\n action: () => {\n dispatch(\"metadata\", {\n duration: ctx.duration / 1000,\n markers: ctx.markers.map(([t, label]) => [t / 1000, label]),\n hasAudio: payload.hasAudio\n });\n resetTerminalFromSnapshot(ctx.segment);\n renderPoster();\n }\n };\n case EVENT.LOAD_FAILED:\n if (currentState !== STATE.LOADING) {\n return {\n nextState: currentState\n };\n }\n return {\n nextState: STATE.FAILED,\n action: () => {\n ctx.failureError = payload.error;\n dispatch(\"error\", toErrorPayload(payload.error));\n }\n };\n case EVENT.PLAY_REQUESTED:\n if (currentState === STATE.COLD) {\n return {\n nextState: STATE.LOADING,\n action: () => {\n clearPoster();\n dispatch(\"play\");\n return loadPromise().then(() => sendDriverEvent(EVENT.DEFERRED_PLAY_READY));\n }\n };\n }\n if (currentState === STATE.READY_INITIAL || currentState === STATE.READY_PAUSED || currentState === STATE.READY_ENDED) {\n return {\n nextState: STATE.READY_STARTING,\n action: () => {\n dispatch(\"play\");\n clearPoster();\n return startPlayback(PLAYBACK_START_REASON.PLAY);\n }\n };\n }\n if (currentState === STATE.READY_BUFFERING_WHILE_PAUSED) {\n return {\n nextState: STATE.READY_BUFFERING_TO_RESUME,\n action: () => {\n dispatch(\"play\");\n if (ctx.segmentWaiting) return true;\n if (ctx.audioElement) {\n return ctx.audioElement.play().catch(error => {\n sendDriverEvent(EVENT.PLAYBACK_START_REJECTED);\n throw error;\n });\n }\n return true;\n }\n };\n }\n if (currentState === STATE.READY_BUFFERING_TO_RESUME || currentState === STATE.READY_PLAYING) {\n return {\n nextState: currentState,\n action: () => {\n dispatch(\"play\");\n return true;\n }\n };\n }\n return {\n nextState: currentState\n };\n case EVENT.DEFERRED_PLAY_READY:\n if (currentState === STATE.READY_INITIAL) {\n return {\n nextState: STATE.READY_STARTING,\n action: () => {\n clearPoster();\n return startPlayback(PLAYBACK_START_REASON.PLAY);\n }\n };\n }\n return {\n nextState: currentState\n };\n case EVENT.PLAYBACK_START_CONFIRMED:\n if (currentState !== STATE.READY_STARTING) {\n return {\n nextState: currentState\n };\n }\n return {\n nextState: STATE.READY_PLAYING,\n action: () => {\n confirmPlaybackClockStart();\n if (payload.reason === PLAYBACK_START_REASON.SEEK) {\n dispatch(\"seeked\");\n } else {\n dispatch(\"playing\");\n }\n return true;\n }\n };\n case EVENT.PLAYBACK_START_REJECTED:\n if (currentState === STATE.READY_STARTING) {\n return {\n nextState: STATE.READY_PAUSED\n };\n }\n if (currentState === STATE.READY_BUFFERING_TO_RESUME) {\n return {\n nextState: STATE.READY_BUFFERING_WHILE_PAUSED\n };\n }\n return {\n nextState: currentState\n };\n case EVENT.PLAYBACK_ENDED:\n if (currentState !== STATE.READY_PLAYING) {\n return {\n nextState: currentState\n };\n }\n if (canLoopPlayback()) {\n return {\n nextState: STATE.READY_PLAYING,\n action: restartLoop\n };\n }\n return {\n nextState: STATE.READY_ENDED,\n action: finishPlayback\n };\n case EVENT.AUDIO_WAITING:\n if (currentState === STATE.READY_PLAYING) {\n return {\n nextState: STATE.READY_BUFFERING_TO_RESUME,\n action: () => {\n logger.debug(\"pausing session playback\");\n pausePlaybackClock();\n restartWaitingTimeout();\n }\n };\n }\n if (currentState === STATE.READY_BUFFERING_WHILE_PAUSED || currentState === STATE.READY_BUFFERING_TO_RESUME) {\n return {\n nextState: currentState,\n action: restartWaitingTimeout\n };\n }\n return {\n nextState: currentState\n };\n case EVENT.AUDIO_PLAYING:\n if (ctx.segmentWaiting) {\n return {\n nextState: currentState\n };\n }\n if (currentState === STATE.READY_BUFFERING_TO_RESUME) {\n return {\n nextState: STATE.READY_PLAYING,\n action: () => {\n logger.debug(\"resuming session playback\");\n clearWaitingTimeout();\n confirmPlaybackClockStart();\n dispatch(\"playing\");\n }\n };\n }\n if (currentState === STATE.READY_BUFFERING_WHILE_PAUSED) {\n return {\n nextState: STATE.READY_PAUSED,\n action: () => {\n clearWaitingTimeout();\n // The media element may report recovery after the user has already paused.\n // Clear waiting bookkeeping, but do not announce resumed playback.\n }\n };\n }\n\n // Media events are delivered asynchronously and may arrive after the\n // driver has already moved on to another state, so treat them as stale.\n return {\n nextState: currentState\n };\n case EVENT.SEGMENT_WAITING:\n if (currentState === STATE.READY_PLAYING) {\n return {\n nextState: STATE.READY_BUFFERING_TO_RESUME,\n action: () => {\n ctx.segmentWaiting = true;\n pausePlaybackAt(payload.time);\n restartWaitingTimeout();\n if (ctx.audioElement) {\n ctx.audioElement.pause();\n }\n }\n };\n }\n return {\n nextState: currentState\n };\n case EVENT.SEGMENT_READY:\n ctx.segmentWaiting = false;\n if (currentState === STATE.READY_BUFFERING_TO_RESUME) {\n return {\n nextState: currentState,\n action: resumeAfterSegmentWait\n };\n }\n if (currentState === STATE.READY_BUFFERING_WHILE_PAUSED) {\n return {\n nextState: STATE.READY_PAUSED,\n action: clearWaitingTimeout\n };\n }\n return {\n nextState: currentState\n };\n case EVENT.PAUSE_REQUESTED:\n if (currentState === STATE.READY_PLAYING) {\n return {\n nextState: STATE.READY_PAUSED,\n action: performPause\n };\n }\n if (currentState === STATE.READY_BUFFERING_TO_RESUME) {\n return {\n nextState: STATE.READY_BUFFERING_WHILE_PAUSED,\n action: () => {\n if (ctx.audioElement) {\n ctx.audioElement.pause();\n }\n return true;\n }\n };\n }\n return {\n nextState: currentState,\n action: () => true\n };\n case EVENT.SEEK_REQUESTED:\n {\n if (currentState === STATE.COLD) {\n return {\n nextState: STATE.LOADING,\n action: () => loadPromise(typeof payload.where === \"number\" ? payload.where * 1000 : undefined).then(() => seek(payload.where))\n };\n }\n if (isBufferingState(currentState) && !ctx.segmentWaiting) {\n return {\n nextState: currentState,\n action: () => false\n };\n }\n if (currentState !== STATE.READY_INITIAL && currentState !== STATE.READY_PAUSED && currentState !== STATE.READY_ENDED && currentState !== STATE.READY_PLAYING && currentState !== STATE.READY_BUFFERING_WHILE_PAUSED && currentState !== STATE.READY_BUFFERING_TO_RESUME) {\n return {\n nextState: currentState\n };\n }\n const seekOperation = payload.seekOperation;\n if (seekOperation.noOp) {\n return {\n nextState: currentState,\n action: () => false\n };\n }\n return {\n nextState: seekOperation.reachedEnd ? STATE.READY_ENDED : currentState === STATE.READY_PLAYING || currentState === STATE.READY_BUFFERING_TO_RESUME ? STATE.READY_STARTING : STATE.READY_PAUSED,\n action: () => {\n clearPoster();\n return performSeek(seekOperation, currentState);\n }\n };\n }\n case EVENT.STEP_REQUESTED:\n {\n if (currentState === STATE.COLD) {\n return {\n nextState: STATE.LOADING,\n action: () => loadPromise().then(() => sendCommand(EVENT.STEP_REQUESTED, payload))\n };\n }\n if (currentState === STATE.READY_PLAYING || isBufferingState(currentState)) {\n // Stepping is only defined for paused/idle states. During active\n // playback or buffering, step() is a no-op.\n return {\n nextState: currentState\n };\n }\n if (currentState !== STATE.READY_INITIAL && currentState !== STATE.READY_PAUSED && currentState !== STATE.READY_ENDED) {\n return {\n nextState: currentState\n };\n }\n return {\n nextState: currentState,\n action: () => performStep(payload.n)\n };\n }\n case EVENT.MARKER_REACHED:\n if (currentState !== STATE.READY_PLAYING) {\n return {\n nextState: currentState\n };\n }\n if (pauseOnMarkers) {\n return {\n nextState: STATE.READY_PAUSED,\n action: () => {\n dispatchMarker(payload.data);\n return performPause(payload.time);\n }\n };\n }\n return {\n nextState: currentState,\n action: () => dispatchMarker(payload.data)\n };\n case EVENT.STOP_REQUESTED:\n return {\n nextState: STATE.STOPPED,\n action: teardown\n };\n default:\n return {\n nextState: currentState\n };\n }\n }\n function enqueueDriverEvent(event, payload = {}) {\n queuedDriverEvents.push({\n event,\n payload\n });\n }\n function processDriverEvent(event, payload = {}) {\n const previousState = state;\n const {\n nextState,\n action\n } = transition(previousState, event, payload);\n if (nextState !== state) {\n state = nextState;\n }\n return action?.();\n }\n function failDriver(error) {\n if (ctx.failureError || state === STATE.STOPPED) return;\n queuedDriverEvents.length = 0;\n ctx.segmentWaiting = false;\n cancelPendingTimers();\n if (ctx.audioElement) {\n ctx.audioElement.pause();\n }\n ctx.failureError = error;\n state = STATE.FAILED;\n dispatch(\"error\", toErrorPayload(error));\n }\n function assertCommandAllowed() {\n if (ctx.failureError) {\n throw ctx.failureError;\n }\n if (state === STATE.STOPPED) {\n throw new Error(\"driver has been stopped\");\n }\n }\n function sendCommand(event, payload = {}) {\n assertCommandAllowed();\n return sendDriverEvent(event, payload);\n }\n function sendDriverEvent(event, payload = {}) {\n if (ctx.failureError || state === STATE.STOPPED) {\n // Terminal states reject public commands via sendCommand(); late async\n // facts from timers/media callbacks are ignored here.\n return;\n }\n if (processingDriverEvents) {\n // Core serializes public commands, so re-entry here means the driver was\n // called directly in an unsupported way.\n throw new Error(\"re-entrant sendDriverEvent() is not allowed during queue processing\");\n }\n processingDriverEvents = true;\n try {\n const result = processDriverEvent(event, payload);\n while (queuedDriverEvents.length > 0) {\n const queuedEvent = queuedDriverEvents.shift();\n processDriverEvent(queuedEvent.event, queuedEvent.payload);\n }\n return result;\n } catch (error) {\n failDriver(error);\n throw error;\n } finally {\n processingDriverEvents = false;\n queuedDriverEvents.length = 0;\n }\n }\n\n // Emit a follow-up event when the call site's framing is runtime-dependent:\n // defer to the active queue while one is processing (a direct sendDriverEvent() would\n // re-enter and throw), otherwise process immediately. Where the framing is\n // statically known, call sendDriverEvent()/enqueueDriverEvent() directly instead.\n function raiseDriverEvent(event, payload = {}) {\n if (processingDriverEvents) {\n enqueueDriverEvent(event, payload);\n return true;\n }\n return sendDriverEvent(event, payload);\n }\n function init() {\n return sendCommand(EVENT.INIT_REQUESTED);\n }\n async function load(requestedInitialTime) {\n const generation = ctx.positionGeneration;\n ctx.loadingTimeout = setTimeout(() => {\n dispatch(\"loading\");\n }, 3000);\n try {\n const loadedRecording = loadRecordingSource(src, {\n idleTimeLimit,\n startAt,\n markers: markers_,\n inputOffset: src.inputOffset\n });\n const audioLoaded = loadAudio(audioUrl).catch(error => {\n logger.warn(`audio load failed: ${error.message}`);\n return false;\n });\n const recording = await loadedRecording;\n if (generation !== ctx.positionGeneration) return false;\n ctx.recording = recording;\n ctx.duration = recording.duration;\n ctx.effectiveStartAt = recording.effectiveStartAt;\n ctx.markers = recording.markers;\n const initialTime = requestedInitialTime ?? (poster?.type === \"npt\" ? poster.value * 1000 : ctx.effectiveStartAt);\n const segmentIndex = findSegmentIndex(recording, initialTime ?? 0);\n const segment = await getSegment(segmentIndex, true);\n if (generation !== ctx.positionGeneration) return false;\n activateSegment(segmentIndex, segment);\n const hasAudio = await audioLoaded;\n if (generation !== ctx.positionGeneration) return false;\n sendDriverEvent(EVENT.LOAD_SUCCEEDED, {\n hasAudio\n });\n } catch (e) {\n // Segmented option validation may fail synchronously in-frame, while\n // fetch and parser failures arrive asynchronously out-of-frame.\n raiseDriverEvent(EVENT.LOAD_FAILED, {\n error: e\n });\n throw e;\n } finally {\n clearLoadingTimeout();\n }\n }\n async function loadAudio(audioUrl) {\n if (!audioUrl) return false;\n ctx.audioElement = await createAudioElement(audioUrl);\n ctx.audioSeekable = !Number.isNaN(ctx.audioElement.duration) && ctx.audioElement.duration !== Infinity && ctx.audioElement.seekable.length > 0 && ctx.audioElement.seekable.end(ctx.audioElement.seekable.length - 1) === ctx.audioElement.duration;\n if (ctx.audioSeekable) {\n ctx.audioElement.addEventListener(\"playing\", onAudioPlaying);\n ctx.audioElement.addEventListener(\"waiting\", onAudioWaiting);\n } else {\n logger.warn(`audio is not seekable - you must enable range request support on the server providing ${ctx.audioElement.src} for audio seeking to work`);\n }\n return true;\n }\n function renderPoster() {\n if (!ctx.posterRenderableAfterLoad) return;\n if (poster.type == \"npt\") {\n syncActiveSegmentToTime(poster.value * 1000, false, false);\n } else if (poster.type == \"text\") {\n feed(poster.value);\n }\n ctx.posterVisible = true;\n }\n function clearPoster() {\n if (ctx.posterVisible) {\n feed(\"\\x1bc\");\n }\n ctx.posterVisible = false;\n ctx.posterRenderableAfterLoad = false;\n }\n function activateSegment(index, segment) {\n ctx.segmentIndex = index;\n ctx.segment = segment;\n ctx.nextEventIndex = 0;\n ctx.lastEventTime = ctx.recording.segments[index].start;\n }\n function getSegment(index, required = false) {\n let entry = ctx.segmentCache.get(index);\n if (entry === undefined) {\n entry = {};\n entry.promise = ctx.recording.loadSegment(index).then(data => {\n if (ctx.segmentCache.get(index) === entry) {\n entry.data = data;\n }\n return data;\n }, error => {\n if (ctx.segmentCache.get(index) === entry) {\n ctx.segmentCache.delete(index);\n }\n if (!required) {\n logger.warn(`segment prefetch failed: ${error.message}`);\n }\n throw error;\n });\n ctx.segmentCache.set(index, entry);\n if (!required) {\n void entry.promise.catch(() => {});\n }\n }\n return entry.promise;\n }\n async function getRequiredSegment(index, generation, onWaiting) {\n if (ctx.segmentCache.get(index)?.data === undefined) {\n onWaiting?.();\n }\n try {\n return await getSegment(index, true);\n } catch (error) {\n if (generation === ctx.positionGeneration && state !== STATE.STOPPED) {\n failDriver(error);\n }\n throw error;\n }\n }\n function retainSegments(indexes) {\n const retained = new Set(indexes.filter(index => index >= 0));\n for (const index of ctx.segmentCache.keys()) {\n if (!retained.has(index)) {\n ctx.segmentCache.delete(index);\n }\n }\n }\n function prefetchNextSegment() {\n const lastIndex = ctx.recording.segments.length - 1;\n const nextIndex = ctx.segmentIndex < lastIndex ? ctx.segmentIndex + 1 : canLoopPlayback() ? 0 : undefined;\n retainSegments([ctx.segmentIndex - 1, ctx.segmentIndex, nextIndex]);\n if (nextIndex !== undefined) getSegment(nextIndex);\n }\n async function advanceSegment() {\n const nextIndex = ctx.segmentIndex + 1;\n const boundary = ctx.recording.segments[nextIndex].start;\n const generation = ++ctx.positionGeneration;\n try {\n const segment = await getRequiredSegment(nextIndex, generation, () => {\n sendDriverEvent(EVENT.SEGMENT_WAITING, {\n time: boundary\n });\n });\n if (generation !== ctx.positionGeneration || state === STATE.STOPPED) return;\n activateSegment(nextIndex, segment);\n prefetchNextSegment();\n if (state === STATE.READY_BUFFERING_TO_RESUME || state === STATE.READY_BUFFERING_WHILE_PAUSED) {\n await sendDriverEvent(EVENT.SEGMENT_READY);\n } else if (state === STATE.READY_PLAYING) {\n scheduleNextRecordingEvent();\n }\n } catch {\n // Required segment failures have already failed the driver.\n }\n }\n function pausePlaybackAt(time) {\n cancelScheduledRecordingEvent();\n ctx.pauseElapsedTime = time;\n }\n function resumeAfterSegmentWait() {\n clearWaitingTimeout();\n if (ctx.audioElement) {\n return ctx.audioElement.play().then(() => sendDriverEvent(EVENT.AUDIO_PLAYING), error => {\n sendDriverEvent(EVENT.PLAYBACK_START_REJECTED);\n logger.warn(`audio resume failed: ${error.message}`);\n return false;\n });\n }\n enqueueDriverEvent(EVENT.AUDIO_PLAYING);\n }\n function scheduleNextRecordingEvent() {\n const nextEvent = ctx.segment.events[ctx.nextEventIndex];\n if (nextEvent) {\n ctx.recordingEventTimeoutId = scheduleAt(runDueRecordingEvents, nextEvent[0]);\n } else {\n if (ctx.segmentIndex < ctx.recording.segments.length - 1) {\n const boundary = ctx.recording.segments[ctx.segmentIndex + 1].start;\n ctx.recordingEventTimeoutId = scheduleAt(advanceSegment, boundary);\n } else {\n raiseDriverEvent(EVENT.PLAYBACK_ENDED);\n }\n }\n }\n function scheduleAt(f, targetTime) {\n let timeout = (targetTime - (now() - ctx.startTime)) / speed;\n if (timeout < 0) {\n timeout = 0;\n }\n return setTimeout(f, timeout);\n }\n function runDueRecordingEvents() {\n while (ctx.segment.events[ctx.nextEventIndex] !== undefined) {\n if (applyNextRecordingEvents()) {\n return;\n }\n const nextEvent = ctx.segment.events[ctx.nextEventIndex];\n if (nextEvent === undefined) {\n break;\n }\n const elapsedWallTime = now() - ctx.startTime;\n if (elapsedWallTime <= nextEvent[0]) {\n break;\n }\n }\n scheduleNextRecordingEvent();\n }\n function applyNextRecordingEvents() {\n const event = ctx.segment.events[ctx.nextEventIndex];\n if (event[1] === \"o\") {\n applyOutputGroup();\n return false;\n }\n ctx.lastEventTime = event[0];\n ctx.nextEventIndex++;\n return applyRecordingEvent(event);\n }\n function applyOutputGroup() {\n const firstEvent = ctx.segment.events[ctx.nextEventIndex];\n const batchDeadline = firstEvent[0] + outputBatchWindow;\n const output = [];\n let event = firstEvent;\n while (event !== undefined && event[1] === \"o\" && event[0] < batchDeadline) {\n output.push(event[2]);\n ctx.lastEventTime = event[0];\n ctx.nextEventIndex++;\n event = ctx.segment.events[ctx.nextEventIndex];\n }\n feed(output);\n }\n function cancelScheduledRecordingEvent() {\n clearTimeout(ctx.recordingEventTimeoutId);\n ctx.recordingEventTimeoutId = null;\n }\n async function teardownAudio() {\n clearTimeout(ctx.waitingTimeout);\n if (ctx.audioElement) {\n ctx.audioElement.removeEventListener(\"playing\", onAudioPlaying);\n ctx.audioElement.removeEventListener(\"waiting\", onAudioWaiting);\n ctx.audioElement.pause();\n ctx.audioElement.src = \"\";\n ctx.audioElement.load();\n ctx.audioElement = undefined;\n }\n if (ctx.audioCtx) {\n await ctx.audioCtx.close();\n ctx.audioCtx = undefined;\n }\n }\n function applyRecordingEvent(event) {\n const [time, type, data] = event;\n if (type === \"o\") {\n feed(data);\n } else if (type === \"i\") {\n dispatch(\"input\", {\n data\n });\n } else if (type === \"r\") {\n const [cols, rows] = data.split(\"x\").map(n => Number.parseInt(n, 10));\n dispatch(\"resize\", effectiveSize(cols, rows));\n } else if (type === \"m\") {\n return sendDriverEvent(EVENT.MARKER_REACHED, {\n data,\n time\n }) === true;\n }\n return false;\n }\n function play() {\n return sendCommand(EVENT.PLAY_REQUESTED);\n }\n function pause() {\n return sendCommand(EVENT.PAUSE_REQUESTED);\n }\n function pausePlaybackClock() {\n cancelScheduledRecordingEvent();\n ctx.pauseElapsedTime = now() - ctx.startTime;\n }\n function preparePlaybackClock() {\n if (ctx.audioElement && !ctx.audioCtx) setupAudioCtx();\n }\n function confirmPlaybackClockStart() {\n ctx.startTime = now() - ctx.pauseElapsedTime;\n ctx.pauseElapsedTime = null;\n scheduleNextRecordingEvent();\n }\n function seek(where) {\n assertCommandAllowed();\n validateSeekInput(where);\n if (state === STATE.COLD) {\n return sendDriverEvent(EVENT.SEEK_REQUESTED, {\n where\n });\n }\n return sendDriverEvent(EVENT.SEEK_REQUESTED, {\n seekOperation: resolveSeek(state, where)\n });\n }\n function findMarkerTimeBefore(time) {\n if (ctx.markers.length == 0) return;\n let i = 0;\n let marker = ctx.markers[i];\n let lastMarkerTimeBefore;\n while (marker && marker[0] < time) {\n lastMarkerTimeBefore = marker[0];\n marker = ctx.markers[++i];\n }\n return lastMarkerTimeBefore;\n }\n function findMarkerTimeAfter(time) {\n if (ctx.markers.length == 0) return;\n let i = ctx.markers.length - 1;\n let marker = ctx.markers[i];\n let firstMarkerTimeAfter;\n while (marker && marker[0] > time) {\n firstMarkerTimeAfter = marker[0];\n marker = ctx.markers[--i];\n }\n return firstMarkerTimeAfter;\n }\n function step(n) {\n return sendCommand(EVENT.STEP_REQUESTED, {\n n\n });\n }\n function getDuration() {\n return ctx.duration === undefined ? undefined : ctx.duration / 1000;\n }\n function getCurrentTimeMs() {\n if (state === STATE.READY_PLAYING) {\n return now() - ctx.startTime;\n } else {\n return ctx.pauseElapsedTime ?? 0;\n }\n }\n function getCurrentTime() {\n return getCurrentTimeMs() / 1000;\n }\n function setupAudioCtx() {\n ctx.audioCtx = new AudioContext({\n latencyHint: \"interactive\"\n });\n const src = ctx.audioCtx.createMediaElementSource(ctx.audioElement);\n src.connect(ctx.audioCtx.destination);\n now = audioNow;\n }\n function audioNow() {\n if (!ctx.audioCtx) throw new Error(\"audio context not started - can't tell time!\");\n const {\n contextTime,\n performanceTime\n } = ctx.audioCtx.getOutputTimestamp();\n\n // The check below is needed for Chrome,\n // which returns 0 for first several dozen millis,\n // completely ruining the timing (the clock jumps backwards once),\n // therefore we initially ignore performanceTime in our calculation.\n\n return performanceTime === 0 ? contextTime * 1000 : contextTime * 1000 + (performance.now() - performanceTime);\n }\n function onAudioWaiting() {\n logger.debug(\"audio buffering\");\n sendDriverEvent(EVENT.AUDIO_WAITING);\n }\n function onAudioPlaying() {\n logger.debug(\"audio resumed\");\n sendDriverEvent(EVENT.AUDIO_PLAYING);\n }\n function mute() {\n if (ctx.audioElement) {\n ctx.audioElement.muted = true;\n dispatch(\"muted\", true);\n return true;\n }\n }\n function unmute() {\n if (ctx.audioElement) {\n ctx.audioElement.muted = false;\n dispatch(\"muted\", false);\n return true;\n }\n }\n function stop() {\n return sendCommand(EVENT.STOP_REQUESTED);\n }\n function feed(data) {\n dispatch(\"output\", data);\n }\n function dispatchMarker(data) {\n dispatch(\"marker\", {\n ...data,\n time: data.time / 1000\n });\n }\n function renderTextPoster() {\n renderPoster();\n ctx.posterRenderableAfterLoad = false;\n }\n function validateSeekInput(where) {\n if (typeof where === \"number\") {\n if (Number.isFinite(where)) return;\n } else if (typeof where === \"string\") {\n if (isRelativeSeek(where) || parseSeekPercentage(where) !== undefined) return;\n } else if (typeof where === \"object\" && where !== null) {\n if (where.marker === \"prev\" || where.marker === \"next\" || Number.isInteger(where.marker) && where.marker >= 0) {\n return;\n }\n }\n throw new Error(`invalid seek target: ${JSON.stringify(where)}`);\n }\n function isRelativeSeek(where) {\n return where === \"<<\" || where === \">>\" || where === \"<<<\" || where === \">>>\";\n }\n function parseSeekPercentage(where) {\n if (!where.endsWith(\"%\")) return;\n const percentage = Number(where.slice(0, -1));\n if (Number.isFinite(percentage)) {\n return percentage;\n }\n }\n function resolveSeek(currentState, where) {\n const currentTime = getCurrentTimeMs();\n const isPlaying = currentState === STATE.READY_PLAYING;\n let target = where;\n if (typeof target === \"number\") {\n target = target * 1000;\n } else if (typeof target === \"string\") {\n if (target === \"<<\") {\n target = currentTime - 5000;\n } else if (target === \">>\") {\n target = currentTime + 5000;\n } else if (target === \"<<<\") {\n target = currentTime - 0.1 * ctx.duration;\n } else if (target === \">>>\") {\n target = currentTime + 0.1 * ctx.duration;\n } else if (target[target.length - 1] === \"%\") {\n target = parseSeekPercentage(target) / 100 * ctx.duration;\n }\n } else if (typeof target === \"object\") {\n if (target.marker === \"prev\") {\n target = findMarkerTimeBefore(currentTime) ?? 0;\n if (isPlaying && currentTime - target < 1000) {\n target = findMarkerTimeBefore(target) ?? 0;\n }\n } else if (target.marker === \"next\") {\n target = findMarkerTimeAfter(currentTime) ?? ctx.duration;\n } else if (typeof target.marker === \"number\") {\n const marker = ctx.markers[target.marker];\n if (marker === undefined) {\n throw new Error(`invalid marker index: ${target.marker}`);\n }\n target = marker[0];\n }\n }\n const targetTime = Math.min(Math.max(target, 0), ctx.duration);\n return {\n targetTime,\n reachedEnd: targetTime >= ctx.duration,\n noOp: targetTime === ctx.pauseElapsedTime\n };\n }\n function effectiveSize(cols, rows) {\n return {\n cols: optionCols ?? cols,\n rows: optionRows ?? rows\n };\n }\n function resetTerminalFromSnapshot(segment, emitClear = false) {\n if (emitClear) {\n // Preserve the existing observable RIS output even though reset replaces the VT state.\n feed(\"\\x1bc\");\n }\n dispatch(\"reset\", {\n size: effectiveSize(segment.snapshot.cols, segment.snapshot.rows),\n init: segment.snapshot.init,\n theme: ctx.recording.theme ?? null\n });\n }\n function syncActiveSegmentToTime(targetTime, clearStartAt = true, inclusive = true) {\n let event = ctx.segment.events[ctx.nextEventIndex];\n let output = [];\n while (event && (inclusive ? event[0] <= targetTime : event[0] < targetTime)) {\n if (event[1] === \"o\") {\n output.push(event[2]);\n } else if (event[1] === \"r\") {\n if (output.length > 0) {\n feed(output);\n output = [];\n }\n applyRecordingEvent(event);\n }\n ctx.lastEventTime = event[0];\n event = ctx.segment.events[++ctx.nextEventIndex];\n }\n if (output.length > 0) {\n feed(output);\n }\n ctx.pauseElapsedTime = targetTime;\n if (clearStartAt) {\n ctx.effectiveStartAt = null;\n }\n if (ctx.audioElement && ctx.audioSeekable) {\n ctx.audioElement.currentTime = targetTime / 1000 / speed;\n }\n }\n async function positionAt(targetTime, generation, forceReset = false) {\n const targetIndex = findSegmentIndex(ctx.recording, targetTime);\n if (generation !== ctx.positionGeneration) return false;\n if (!forceReset && targetIndex === ctx.segmentIndex && targetTime >= ctx.lastEventTime) {\n syncActiveSegmentToTime(targetTime);\n return true;\n }\n retainSegments([targetIndex - 1, targetIndex, targetIndex + 1]);\n const segment = await getRequiredSegment(targetIndex, generation);\n if (generation !== ctx.positionGeneration) return false;\n activateSegment(targetIndex, segment);\n resetTerminalFromSnapshot(segment, true);\n syncActiveSegmentToTime(targetTime);\n return true;\n }\n async function startPlayback(reason) {\n const generation = ctx.positionGeneration;\n if (ctx.segmentIndex === ctx.recording.segments.length - 1 && ctx.segment.events[ctx.nextEventIndex] === undefined) {\n if (!(await positionAt(0, generation, true))) return false;\n } else if (ctx.effectiveStartAt !== null) {\n if (!(await positionAt(ctx.effectiveStartAt, generation))) return false;\n }\n if (generation !== ctx.positionGeneration) return false;\n prefetchNextSegment();\n preparePlaybackClock();\n if (ctx.audioElement) {\n try {\n await ctx.audioElement.play();\n return sendDriverEvent(EVENT.PLAYBACK_START_CONFIRMED, {\n reason\n });\n } catch (error) {\n sendDriverEvent(EVENT.PLAYBACK_START_REJECTED);\n throw error;\n }\n }\n return raiseDriverEvent(EVENT.PLAYBACK_START_CONFIRMED, {\n reason\n });\n }\n function performPause(time) {\n if (ctx.audioElement) {\n ctx.audioElement.pause();\n }\n pausePlaybackClock();\n if (time !== undefined) {\n ctx.pauseElapsedTime = time;\n }\n dispatch(\"pause\");\n return true;\n }\n async function performSeek(seekOperation, stateBeforeSeek) {\n const resumeAfterSeek = stateBeforeSeek === STATE.READY_PLAYING || stateBeforeSeek === STATE.READY_BUFFERING_TO_RESUME;\n const generation = ++ctx.positionGeneration;\n if (stateBeforeSeek === STATE.READY_PLAYING) {\n pausePlaybackClock();\n }\n ctx.segmentWaiting = false;\n clearWaitingTimeout();\n if (ctx.audioElement) {\n ctx.audioElement.pause();\n }\n if (!(await positionAt(seekOperation.targetTime, generation))) return false;\n if (generation !== ctx.positionGeneration) return false;\n if (seekOperation.reachedEnd) {\n dispatch(\"seeked\");\n dispatch(\"ended\");\n return true;\n }\n if (resumeAfterSeek) {\n return await startPlayback(PLAYBACK_START_REASON.SEEK);\n }\n dispatch(\"seeked\");\n return true;\n }\n async function performStep(n = 1) {\n const generation = ++ctx.positionGeneration;\n const target = await findStepTarget(n, generation);\n if (target === undefined || generation !== ctx.positionGeneration) return;\n clearPoster();\n if (!(await positionAt(target.time, generation, n < 0))) return;\n if (ctx.audioElement && ctx.audioSeekable) {\n ctx.audioElement.currentTime = target.time / 1000 / speed;\n }\n if (target.reachedEnd) {\n state = STATE.READY_ENDED;\n dispatch(\"ended\");\n } else {\n state = STATE.READY_PAUSED;\n }\n }\n async function findStepTarget(n, generation) {\n let remaining = Math.abs(n);\n let segmentIndex = ctx.segmentIndex;\n let eventIndex = n > 0 ? ctx.nextEventIndex : ctx.nextEventIndex - 2;\n let target;\n while (segmentIndex >= 0 && segmentIndex < ctx.recording.segments.length) {\n if (generation !== ctx.positionGeneration) return;\n retainSegments([segmentIndex - 1, segmentIndex, segmentIndex + 1]);\n const segment = await getRequiredSegment(segmentIndex, generation);\n if (generation !== ctx.positionGeneration) return;\n if (n > 0) {\n for (let i = Math.max(eventIndex, 0); i < segment.events.length; i++) {\n if (segment.events[i][1] === \"o\" && --remaining === 0) {\n target = {\n time: segment.events[i][0]\n };\n break;\n }\n }\n if (target) break;\n segmentIndex++;\n eventIndex = 0;\n } else {\n for (let i = Math.min(eventIndex, segment.events.length - 1); i >= 0; i--) {\n if (segment.events[i][1] === \"o\" && --remaining === 0) {\n target = {\n time: segment.events[i][0]\n };\n break;\n }\n }\n if (target) break;\n segmentIndex--;\n eventIndex = Number.MAX_SAFE_INTEGER;\n }\n }\n if (target) {\n target.reachedEnd = target.time >= ctx.duration;\n }\n return target;\n }\n function restartWaitingTimeout() {\n clearTimeout(ctx.waitingTimeout);\n ctx.waitingTimeout = setTimeout(() => {\n dispatch(\"loading\");\n }, 1000);\n }\n function clearWaitingTimeout() {\n clearTimeout(ctx.waitingTimeout);\n ctx.waitingTimeout = null;\n }\n function clearLoadingTimeout() {\n clearTimeout(ctx.loadingTimeout);\n ctx.loadingTimeout = null;\n }\n function cancelPendingTimers() {\n clearLoadingTimeout();\n clearWaitingTimeout();\n cancelScheduledRecordingEvent();\n }\n async function restartLoop() {\n cancelScheduledRecordingEvent();\n ctx.playCount++;\n const generation = ++ctx.positionGeneration;\n try {\n const segment = await getRequiredSegment(0, generation, () => {\n enqueueDriverEvent(EVENT.SEGMENT_WAITING, {\n time: ctx.duration\n });\n });\n if (generation !== ctx.positionGeneration) return;\n activateSegment(0, segment);\n resetTerminalFromSnapshot(segment, true);\n ctx.pauseElapsedTime = 0;\n ctx.startTime = now();\n prefetchNextSegment();\n if (ctx.audioElement && ctx.audioSeekable) {\n ctx.audioElement.currentTime = 0;\n }\n if (state === STATE.READY_BUFFERING_TO_RESUME || state === STATE.READY_BUFFERING_WHILE_PAUSED) {\n await sendDriverEvent(EVENT.SEGMENT_READY);\n } else {\n ctx.pauseElapsedTime = null;\n scheduleNextRecordingEvent();\n }\n } catch {\n // Required segment failures have already failed the driver.\n }\n }\n function finishPlayback() {\n cancelScheduledRecordingEvent();\n ctx.playCount++;\n ctx.pauseElapsedTime = ctx.duration;\n if (ctx.audioElement) {\n ctx.audioElement.pause();\n }\n retainSegments([ctx.segmentIndex - 1, ctx.segmentIndex]);\n dispatch(\"ended\");\n }\n function teardown() {\n ctx.positionGeneration++;\n ctx.segmentCache.clear();\n cancelPendingTimers();\n return teardownAudio();\n }\n return {\n init,\n stop,\n getDuration,\n getCurrentTime,\n play,\n pause,\n seek,\n step,\n mute,\n unmute\n };\n}\nfunction loadRecordingSource(src, options) {\n if (src.format === \"segmented\") {\n return loadSegmentedRecording(src, options);\n }\n return loadFullRecording(src, options);\n}\nfunction findSegmentIndex(recording, time) {\n let low = 0;\n let high = recording.segments.length;\n while (low + 1 < high) {\n const middle = Math.floor((low + high) / 2);\n if (recording.segments[middle].start <= time) {\n low = middle;\n } else {\n high = middle;\n }\n }\n return low;\n}\nasync function createAudioElement(src) {\n const audio = new Audio();\n audio.preload = \"metadata\";\n audio.loop = false;\n audio.crossOrigin = \"anonymous\";\n let resolve;\n let reject;\n const canPlay = new Promise((resolve_, reject_) => {\n resolve = resolve_;\n reject = reject_;\n });\n function cleanup() {\n audio.removeEventListener(\"canplay\", onCanPlay);\n audio.removeEventListener(\"error\", onError);\n audio.removeEventListener(\"abort\", onAbort);\n }\n function onCanPlay() {\n cleanup();\n resolve();\n }\n function onError() {\n cleanup();\n reject(new Error(`failed loading audio from ${src}`));\n }\n function onAbort() {\n cleanup();\n reject(new Error(`audio loading aborted for ${src}`));\n }\n audio.addEventListener(\"canplay\", onCanPlay);\n audio.addEventListener(\"error\", onError);\n audio.addEventListener(\"abort\", onAbort);\n audio.src = src;\n audio.load();\n await canPlay;\n return audio;\n}\n\nfunction clock({\n hourColor = 3,\n minuteColor = 4,\n separatorColor = 9\n}, {\n dispatch\n}, {\n cols = 5,\n rows = 1\n}) {\n const middleRow = Math.floor(rows / 2);\n const leftPad = Math.floor(cols / 2) - 2;\n const setupCursor = `\\x1b[?25l\\x1b[1m\\x1b[${middleRow}B`;\n let intervalId;\n const getCurrentTime = () => {\n const d = new Date();\n const h = d.getHours();\n const m = d.getMinutes();\n const seqs = [];\n seqs.push(\"\\r\");\n for (let i = 0; i < leftPad; i++) {\n seqs.push(\" \");\n }\n seqs.push(`\\x1b[3${hourColor}m`);\n if (h < 10) {\n seqs.push(\"0\");\n }\n seqs.push(`${h}`);\n seqs.push(`\\x1b[3${separatorColor};5m:\\x1b[25m`);\n seqs.push(`\\x1b[3${minuteColor}m`);\n if (m < 10) {\n seqs.push(\"0\");\n }\n seqs.push(`${m}`);\n return seqs;\n };\n const updateTime = () => {\n getCurrentTime().forEach(seq => {\n dispatch(\"output\", seq);\n });\n };\n return {\n init: () => {\n dispatch(\"reset\", {\n size: {\n cols,\n rows\n }\n });\n dispatch(\"output\", setupCursor);\n updateTime();\n },\n play: () => {\n if (intervalId !== undefined) return true;\n dispatch(\"play\");\n dispatch(\"playing\");\n dispatch(\"output\", setupCursor);\n updateTime();\n intervalId = setInterval(updateTime, 1000);\n return true;\n },\n stop: () => {\n clearInterval(intervalId);\n },\n getCurrentTime: () => {\n const d = new Date();\n return d.getHours() * 60 + d.getMinutes();\n }\n };\n}\n\nfunction random(_src, {\n dispatch\n}, {\n speed\n}) {\n const base = \" \".charCodeAt(0);\n const range = \"~\".charCodeAt(0) - base;\n let timeoutId;\n const schedule = () => {\n const t = Math.pow(5, Math.random() * 4);\n timeoutId = setTimeout(print, t / speed);\n };\n const print = () => {\n schedule();\n const char = String.fromCharCode(base + Math.floor(Math.random() * range));\n dispatch(\"output\", char);\n };\n return {\n play() {\n if (timeoutId !== undefined) return true;\n dispatch(\"play\");\n dispatch(\"playing\");\n schedule();\n },\n stop() {\n clearInterval(timeoutId);\n }\n };\n}\n\nconst DEFAULT_COLS = 80;\nconst DEFAULT_ROWS = 24;\nasync function parse$2(data) {\n if (data instanceof Response) {\n const text = await data.text();\n const result = parseJsonl(text);\n if (result !== undefined) {\n const {\n header,\n events\n } = result;\n if (header.version === 2) {\n return parseAsciicastV2(header, events);\n } else if (header.version === 3) {\n return parseAsciicastV3(header, events);\n } else {\n throw new Error(`asciicast v${header.version} format not supported`);\n }\n } else {\n const header = JSON.parse(text);\n if (header.version === 1) {\n return parseAsciicastV1(header);\n }\n }\n } else if (typeof data === \"object\" && data.version === 1) {\n return parseAsciicastV1(data);\n } else if (Array.isArray(data)) {\n const header = data[0];\n if (header.version === 2) {\n const events = data.slice(1, data.length);\n return parseAsciicastV2(header, events);\n } else if (header.version === 3) {\n const events = data.slice(1, data.length);\n return parseAsciicastV3(header, events);\n } else {\n throw new Error(`asciicast v${header.version} format not supported`);\n }\n }\n throw new Error(\"invalid data\");\n}\nfunction parseJsonl(jsonl) {\n const lines = jsonl.split(\"\\n\");\n let header;\n try {\n header = JSON.parse(lines[0]);\n } catch (_error) {\n return;\n }\n const events = new Stream(lines).drop(1).filter(l => l[0] === \"[\").map(JSON.parse);\n return {\n header,\n events\n };\n}\nfunction parseAsciicastV1(data) {\n let time = 0;\n const events = new Stream(data.stdout).map(e => {\n time += e[0] * 1000;\n return [time, \"o\", e[1]];\n });\n return {\n cols: data.width === 0 ? DEFAULT_COLS : data.width,\n rows: data.height === 0 ? DEFAULT_ROWS : data.height,\n events\n };\n}\nfunction parseAsciicastV2(header, events) {\n if (!(events instanceof Stream)) {\n events = new Stream(events);\n }\n events = events.map(e => [e[0] * 1000, e[1], e[2]]);\n return {\n cols: header.width === 0 ? DEFAULT_COLS : header.width,\n rows: header.height === 0 ? DEFAULT_ROWS : header.height,\n theme: parseTheme$1(header.theme),\n events,\n idleTimeLimit: header.idle_time_limit\n };\n}\nfunction parseAsciicastV3(header, events) {\n if (!(events instanceof Stream)) {\n events = new Stream(events);\n }\n let time = 0;\n events = events.map(e => {\n time += e[0] * 1000;\n return [time, e[1], e[2]];\n });\n return {\n cols: header.term.cols === 0 ? DEFAULT_COLS : header.term.cols,\n rows: header.term.rows === 0 ? DEFAULT_ROWS : header.term.rows,\n theme: parseTheme$1(header.term?.theme),\n events,\n idleTimeLimit: header.idle_time_limit\n };\n}\nfunction parseTheme$1(theme) {\n const palette = typeof theme?.palette === \"string\" ? theme.palette.split(\":\") : undefined;\n return normalizeTheme({\n foreground: theme?.fg,\n background: theme?.bg,\n palette\n });\n}\n\nfunction benchmark({\n url,\n iterations = 10\n}, {\n dispatch\n}) {\n let data;\n let byteCount = 0;\n return {\n async init() {\n const recording = await parse$2(await fetch(url));\n const {\n cols,\n rows,\n events\n } = recording;\n data = Array.from(events).filter(([_time, type, _text]) => type === \"o\").map(([time, _type, text]) => [time, text]);\n for (const [_, text] of data) {\n byteCount += new Blob([text]).size;\n }\n dispatch(\"reset\", {\n size: {\n cols,\n rows\n }\n });\n },\n play() {\n const startTime = performance.now();\n for (let i = 0; i < iterations; i++) {\n for (const [_, text] of data) {\n dispatch(\"output\", text);\n }\n dispatch(\"output\", \"\\x1bc\"); // reset terminal\n }\n const endTime = performance.now();\n const duration = (endTime - startTime) / 1000;\n const throughput = byteCount * iterations / duration;\n const throughputMbs = byteCount / (1024 * 1024) * iterations / duration;\n console.info(\"benchmark: result\", {\n byteCount,\n iterations,\n duration,\n throughput,\n throughputMbs\n });\n setTimeout(() => {\n dispatch(\"ended\");\n }, 0);\n return true;\n }\n };\n}\n\nfunction getBuffer(bufferTime, dispatch, setTime, baseStreamTime, minFrameTime, logger) {\n const execute = executeEvent(dispatch);\n if (bufferTime === 0) {\n logger.debug(\"using no buffer\");\n return nullBuffer(execute);\n } else {\n bufferTime = bufferTime ?? {};\n let getBufferTime;\n if (typeof bufferTime === \"number\") {\n logger.debug(`using fixed time buffer (${bufferTime} ms)`);\n getBufferTime = _latency => bufferTime;\n } else if (typeof bufferTime === \"function\") {\n logger.debug(\"using custom dynamic buffer\");\n getBufferTime = bufferTime({\n logger\n });\n } else {\n logger.debug(\"using adaptive buffer\", bufferTime);\n getBufferTime = adaptiveBufferTimeProvider({\n logger\n }, bufferTime);\n }\n return buffer(getBufferTime, execute, setTime, logger, baseStreamTime ?? 0, minFrameTime);\n }\n}\nfunction nullBuffer(execute) {\n return {\n pushEvent(event) {\n execute(event[1], event[2]);\n },\n pushText(text) {\n execute(\"o\", text);\n },\n stop() {}\n };\n}\nfunction executeEvent(dispatch) {\n return function (code, data) {\n if (code === \"o\") {\n dispatch(\"output\", data);\n } else if (code === \"i\") {\n dispatch(\"input\", {\n data\n });\n } else if (code === \"r\") {\n dispatch(\"resize\", data);\n } else if (code === \"m\") {\n dispatch(\"marker\", data);\n }\n };\n}\nfunction buffer(getBufferTime, execute, setTime, logger, baseStreamTime, minFrameTime = 1.0 / 60) {\n const outputBatchWindow = minFrameTime * 1000;\n let epoch = performance.now() - baseStreamTime;\n let bufferTime = getBufferTime(0);\n let queue = [];\n let onPush;\n let prevElapsedStreamTime = -outputBatchWindow;\n let stop = false;\n function elapsedWallTime() {\n return performance.now() - epoch;\n }\n function push(item) {\n queue.push(item);\n if (onPush !== undefined) {\n onPush(popAll());\n onPush = undefined;\n }\n }\n function popAll() {\n if (queue.length > 0) {\n const items = queue;\n queue = [];\n return items;\n } else {\n return new Promise(resolve => {\n onPush = resolve;\n });\n }\n }\n async function run() {\n while (!stop) {\n const events = await popAll();\n if (stop) return;\n let nextEventIndex = 0;\n while (nextEventIndex < events.length) {\n nextEventIndex = await executeNextEventChunk(events, nextEventIndex);\n }\n }\n }\n queueMicrotask(run);\n async function executeNextEventChunk(events, nextEventIndex) {\n const event = events[nextEventIndex];\n const elapsedStreamTime = event[3];\n if (elapsedStreamTime - prevElapsedStreamTime >= outputBatchWindow) {\n const delay = elapsedStreamTime - elapsedWallTime();\n if (delay > 0) {\n await sleep(delay);\n if (stop) {\n return events.length;\n }\n }\n setTime(event[0]);\n prevElapsedStreamTime = elapsedStreamTime;\n }\n if (event[1] === \"o\") {\n return executeOutputGroup(events, nextEventIndex);\n }\n execute(event[1], event[2]);\n return nextEventIndex + 1;\n }\n function executeOutputGroup(events, nextEventIndex) {\n const firstEvent = events[nextEventIndex];\n const batchDeadline = firstEvent[0] + outputBatchWindow;\n const output = [];\n let event = firstEvent;\n while (event !== undefined && event[1] === \"o\" && event[0] < batchDeadline) {\n output.push(event[2]);\n event = events[++nextEventIndex];\n }\n execute(\"o\", output);\n return nextEventIndex;\n }\n return {\n pushEvent(event) {\n let latency = elapsedWallTime() - event[0];\n if (latency < 0) {\n logger.debug(`correcting epoch by ${latency} ms`);\n epoch += latency;\n latency = 0;\n }\n bufferTime = getBufferTime(latency);\n push([event[0], event[1], event[2], event[0] + bufferTime]);\n },\n pushText(text) {\n const time = elapsedWallTime();\n push([time, \"o\", text, time + bufferTime]);\n },\n stop() {\n stop = true;\n if (onPush !== undefined) {\n onPush([]);\n onPush = undefined;\n }\n }\n };\n}\nfunction sleep(t) {\n return new Promise(resolve => {\n setTimeout(resolve, t);\n });\n}\nfunction adaptiveBufferTimeProvider({\n logger\n} = {}, {\n minBufferTime = 50,\n bufferLevelStep = 100,\n maxBufferLevel = 50,\n transitionDuration = 500,\n peakHalfLifeUp = 100,\n peakHalfLifeDown = 10000,\n floorHalfLifeUp = 5000,\n floorHalfLifeDown = 100,\n idealHalfLifeUp = 1000,\n idealHalfLifeDown = 5000,\n safetyMultiplier = 1.2,\n minImprovementDuration = 3000\n} = {}) {\n function levelToMs(level) {\n return level === 0 ? minBufferTime : bufferLevelStep * level;\n }\n let bufferLevel = 1;\n let bufferTime = levelToMs(bufferLevel);\n let lastUpdateTime = performance.now();\n let smoothedPeakLatency = null;\n let smoothedFloorLatency = null;\n let smoothedIdealBufferTime = null;\n let stableSince = null;\n let targetBufferTime = null;\n let transitionRate = null;\n return function (latency) {\n const now = performance.now();\n const dt = Math.max(0, now - lastUpdateTime);\n lastUpdateTime = now;\n\n // adjust EMA-smoothed peak latency from current latency\n\n if (smoothedPeakLatency === null) {\n smoothedPeakLatency = latency;\n } else if (latency > smoothedPeakLatency) {\n const alphaUp = 1 - Math.pow(2, -dt / peakHalfLifeUp);\n smoothedPeakLatency += alphaUp * (latency - smoothedPeakLatency);\n } else {\n const alphaDown = 1 - Math.pow(2, -dt / peakHalfLifeDown);\n smoothedPeakLatency += alphaDown * (latency - smoothedPeakLatency);\n }\n smoothedPeakLatency = Math.max(smoothedPeakLatency, 0);\n\n // adjust EMA-smoothed floor latency from current latency\n\n if (smoothedFloorLatency === null) {\n smoothedFloorLatency = latency;\n } else if (latency > smoothedFloorLatency) {\n const alphaUp = 1 - Math.pow(2, -dt / floorHalfLifeUp);\n smoothedFloorLatency += alphaUp * (latency - smoothedFloorLatency);\n } else {\n const alphaDown = 1 - Math.pow(2, -dt / floorHalfLifeDown);\n smoothedFloorLatency += alphaDown * (latency - smoothedFloorLatency);\n }\n smoothedFloorLatency = Math.max(smoothedFloorLatency, 0);\n\n // adjust EMA-smoothed ideal buffer time\n\n const jitter = smoothedPeakLatency - smoothedFloorLatency;\n const idealBufferTime = safetyMultiplier * (smoothedPeakLatency + jitter);\n if (smoothedIdealBufferTime === null) {\n smoothedIdealBufferTime = idealBufferTime;\n } else if (idealBufferTime > smoothedIdealBufferTime) {\n const alphaUp = 1 - Math.pow(2, -dt / idealHalfLifeUp);\n smoothedIdealBufferTime += +alphaUp * (idealBufferTime - smoothedIdealBufferTime);\n } else {\n const alphaDown = 1 - Math.pow(2, -dt / idealHalfLifeDown);\n smoothedIdealBufferTime += +alphaDown * (idealBufferTime - smoothedIdealBufferTime);\n }\n\n // quantize smoothed ideal buffer time to discrete buffer level\n\n let newBufferLevel;\n if (smoothedIdealBufferTime <= minBufferTime) {\n newBufferLevel = 0;\n } else {\n newBufferLevel = clamp(Math.ceil(smoothedIdealBufferTime / bufferLevelStep), 1, maxBufferLevel);\n }\n if (latency > bufferTime) {\n logger.debug('buffer underrun', {\n latency,\n bufferTime\n });\n }\n\n // adjust buffer level and target buffer time for new buffer level\n\n if (newBufferLevel > bufferLevel) {\n if (latency > bufferTime) {\n // <- underrun - raise quickly\n bufferLevel = Math.min(newBufferLevel, bufferLevel + 3);\n } else {\n bufferLevel += 1;\n }\n targetBufferTime = levelToMs(bufferLevel);\n transitionRate = (targetBufferTime - bufferTime) / transitionDuration;\n stableSince = null;\n logger.debug('raising buffer', {\n latency,\n bufferTime,\n targetBufferTime\n });\n } else if (newBufferLevel < bufferLevel) {\n if (stableSince == null) stableSince = now;\n if (now - stableSince >= minImprovementDuration) {\n bufferLevel -= 1;\n targetBufferTime = levelToMs(bufferLevel);\n transitionRate = (targetBufferTime - bufferTime) / transitionDuration;\n stableSince = now;\n logger.debug('lowering buffer', {\n latency,\n bufferTime,\n targetBufferTime\n });\n }\n } else {\n stableSince = null;\n }\n\n // linear transition to target buffer time\n\n if (targetBufferTime !== null) {\n bufferTime += transitionRate * dt;\n if (transitionRate >= 0 && bufferTime > targetBufferTime || transitionRate < 0 && bufferTime < targetBufferTime) {\n bufferTime = targetBufferTime;\n targetBufferTime = null;\n }\n }\n return bufferTime;\n };\n}\nfunction clamp(x, lo, hi) {\n return Math.min(hi, Math.max(lo, x));\n}\n\nconst ONE_MS_IN_USEC = 1000;\nconst ONE_SEC_IN_USEC = 1000000;\nfunction alisHandler(logger) {\n const outputDecoder = new TextDecoder();\n const inputDecoder = new TextDecoder();\n let handler = parseMagicString;\n let lastEventTime;\n let markerIndex = 0;\n function parseMagicString(buffer) {\n const text = new TextDecoder().decode(buffer);\n if (text === \"ALiS\\x01\") {\n handler = parseFirstFrame;\n } else {\n throw new Error(\"not an ALiS v1 live stream\");\n }\n }\n function parseFirstFrame(buffer) {\n const view = new BinaryReader(new DataView(buffer));\n const type = view.getUint8();\n if (type !== 0x01) throw new Error(`expected reset (0x01) frame, got ${type}`);\n return parseResetFrame(view, buffer);\n }\n function parseResetFrame(view, buffer) {\n view.decodeVarUint();\n let time = view.decodeVarUint();\n lastEventTime = time;\n time = time / ONE_MS_IN_USEC;\n markerIndex = 0;\n const cols = view.decodeVarUint();\n const rows = view.decodeVarUint();\n const themeFormat = view.getUint8();\n let theme;\n if (themeFormat === 8) {\n const len = (2 + 8) * 3;\n theme = parseTheme(new Uint8Array(buffer, view.offset, len));\n view.forward(len);\n } else if (themeFormat === 16) {\n const len = (2 + 16) * 3;\n theme = parseTheme(new Uint8Array(buffer, view.offset, len));\n view.forward(len);\n } else if (themeFormat !== 0) {\n throw new Error(`alis: invalid theme format (${themeFormat})`);\n }\n const initLen = view.decodeVarUint();\n let init;\n if (initLen > 0) {\n init = outputDecoder.decode(new Uint8Array(buffer, view.offset, initLen));\n }\n handler = parseFrame;\n return {\n time,\n term: {\n size: {\n cols,\n rows\n },\n theme,\n init\n }\n };\n }\n function parseFrame(buffer) {\n const view = new BinaryReader(new DataView(buffer));\n const type = view.getUint8();\n if (type === 0x01) {\n return parseResetFrame(view, buffer);\n } else if (type === 0x6f) {\n // \"o\"\n return parseOutputFrame(view, buffer);\n } else if (type === 0x69) {\n // \"i\"\n return parseInputFrame(view, buffer);\n } else if (type === 0x72) {\n // \"r\"\n return parseResizeFrame(view);\n } else if (type === 0x6d) {\n // \"m\"\n return parseMarkerFrame(view, buffer);\n } else if (type === 0x78) {\n // \"x\"\n return parseExitFrame(view);\n } else if (type === 0x04) {\n // EOT\n handler = parseFirstFrame;\n return false;\n } else {\n logger.debug(`alis: unknown frame type: ${type}`);\n }\n }\n function parseOutputFrame(view, buffer) {\n view.decodeVarUint();\n const relTime = view.decodeVarUint();\n lastEventTime += relTime;\n const len = view.decodeVarUint();\n const text = outputDecoder.decode(new Uint8Array(buffer, view.offset, len));\n return [lastEventTime / ONE_MS_IN_USEC, \"o\", text];\n }\n function parseInputFrame(view, buffer) {\n view.decodeVarUint();\n const relTime = view.decodeVarUint();\n lastEventTime += relTime;\n const len = view.decodeVarUint();\n const text = inputDecoder.decode(new Uint8Array(buffer, view.offset, len));\n return [lastEventTime / ONE_MS_IN_USEC, \"i\", text];\n }\n function parseResizeFrame(view) {\n view.decodeVarUint();\n const relTime = view.decodeVarUint();\n lastEventTime += relTime;\n const cols = view.decodeVarUint();\n const rows = view.decodeVarUint();\n return [lastEventTime / ONE_MS_IN_USEC, \"r\", {\n cols,\n rows\n }];\n }\n function parseMarkerFrame(view, buffer) {\n view.decodeVarUint();\n const relTime = view.decodeVarUint();\n lastEventTime += relTime;\n const len = view.decodeVarUint();\n const decoder = new TextDecoder();\n const index = markerIndex++;\n const time = lastEventTime / ONE_MS_IN_USEC;\n const markerTime = lastEventTime / ONE_SEC_IN_USEC;\n const label = decoder.decode(new Uint8Array(buffer, view.offset, len));\n return [time, \"m\", {\n index,\n time: markerTime,\n label\n }];\n }\n function parseExitFrame(view) {\n view.decodeVarUint();\n const relTime = view.decodeVarUint();\n lastEventTime += relTime;\n const status = view.decodeVarUint();\n return [lastEventTime / ONE_MS_IN_USEC, \"x\", {\n status\n }];\n }\n return function (buffer) {\n return handler(buffer);\n };\n}\nfunction parseTheme(arr) {\n const colorCount = arr.length / 3;\n const foreground = hexColor(arr[0], arr[1], arr[2]);\n const background = hexColor(arr[3], arr[4], arr[5]);\n const palette = [];\n for (let i = 2; i < colorCount; i++) {\n palette.push(hexColor(arr[i * 3], arr[i * 3 + 1], arr[i * 3 + 2]));\n }\n return normalizeTheme({\n foreground,\n background,\n palette\n });\n}\nfunction hexColor(r, g, b) {\n return `#${byteToHex(r)}${byteToHex(g)}${byteToHex(b)}`;\n}\nfunction byteToHex(value) {\n return value.toString(16).padStart(2, \"0\");\n}\nclass BinaryReader {\n constructor(inner, offset = 0) {\n this.inner = inner;\n this.offset = offset;\n }\n forward(delta) {\n this.offset += delta;\n }\n getUint8() {\n const value = this.inner.getUint8(this.offset);\n this.offset += 1;\n return value;\n }\n decodeVarUint() {\n let number = BigInt(0);\n let shift = BigInt(0);\n let byte = this.getUint8();\n while (byte > 127) {\n byte &= 127;\n number += BigInt(byte) << shift;\n shift += BigInt(7);\n byte = this.getUint8();\n }\n number = number + (BigInt(byte) << shift);\n return Number(number);\n }\n}\n\nfunction ascicastV2Handler() {\n let parse = parseHeader;\n function parseHeader(buffer) {\n const header = JSON.parse(buffer);\n if (header.version !== 2) {\n throw new Error(\"not an asciicast v2 stream\");\n }\n parse = parseEvent;\n return {\n time: 0.0,\n term: {\n size: {\n cols: header.width,\n rows: header.height\n }\n }\n };\n }\n function parseEvent(buffer) {\n const event = JSON.parse(buffer);\n const time = event[0] * 1000;\n if (event[1] === \"r\") {\n const [cols, rows] = event[2].split(\"x\");\n return [time, \"r\", {\n cols: parseInt(cols, 10),\n rows: parseInt(rows, 10)\n }];\n } else {\n return [time, event[1], event[2]];\n }\n }\n return function (buffer) {\n return parse(buffer);\n };\n}\n\nfunction ascicastV3Handler() {\n let parse = parseHeader;\n let currentTime = 0;\n function parseHeader(buffer) {\n const header = JSON.parse(buffer);\n if (header.version !== 3) {\n throw new Error(\"not an asciicast v3 stream\");\n }\n parse = parseEvent;\n const term = {\n size: {\n cols: header.term.cols,\n rows: header.term.rows\n }\n };\n if (header.term.theme) {\n const palette = typeof header.term.theme.palette === \"string\" ? header.term.theme.palette.split(\":\") : undefined;\n const theme = normalizeTheme({\n foreground: header.term.theme.fg,\n background: header.term.theme.bg,\n palette\n });\n if (theme) {\n term.theme = theme;\n }\n }\n return {\n time: 0.0,\n term\n };\n }\n function parseEvent(buffer) {\n const event = JSON.parse(buffer);\n const [interval, eventType, data] = event;\n currentTime += interval * 1000;\n if (eventType === \"r\") {\n const [cols, rows] = data.split(\"x\");\n return [currentTime, \"r\", {\n cols: parseInt(cols, 10),\n rows: parseInt(rows, 10)\n }];\n } else {\n return [currentTime, eventType, data];\n }\n }\n return function (buffer) {\n return parse(buffer);\n };\n}\n\nfunction rawHandler() {\n const outputDecoder = new TextDecoder();\n let parse = parseSize;\n function parseSize(buffer) {\n const text = outputDecoder.decode(buffer, {\n stream: true\n });\n const [cols, rows] = sizeFromResizeSeq(text) ?? sizeFromScriptStartMessage(text) ?? [80, 24];\n parse = parseOutput;\n return {\n time: 0.0,\n term: {\n size: {\n cols,\n rows\n },\n init: text\n }\n };\n }\n function parseOutput(buffer) {\n return outputDecoder.decode(buffer, {\n stream: true\n });\n }\n return function (buffer) {\n return parse(buffer);\n };\n}\nfunction sizeFromResizeSeq(text) {\n const match = text.match(/\\x1b\\[8;(\\d+);(\\d+)t/);\n if (match !== null) {\n return [parseInt(match[2], 10), parseInt(match[1], 10)];\n }\n}\nfunction sizeFromScriptStartMessage(text) {\n const match = text.match(/\\[.*COLUMNS=\"(\\d{1,3})\" LINES=\"(\\d{1,3})\".*\\]/);\n if (match !== null) {\n return [parseInt(match[1], 10), parseInt(match[2], 10)];\n }\n}\n\nconst RECONNECT_DELAY_BASE = 500;\nconst RECONNECT_DELAY_CAP = 10000;\nfunction exponentialDelay(attempt) {\n const base = Math.min(RECONNECT_DELAY_BASE * Math.pow(2, attempt), RECONNECT_DELAY_CAP);\n return Math.random() * base;\n}\nfunction websocket({\n url,\n bufferTime,\n reconnectDelay = exponentialDelay,\n minFrameTime\n}, {\n dispatch,\n logger\n}, {\n audioUrl\n}) {\n logger = new PrefixedLogger(logger, \"websocket: \");\n let socket;\n let buf;\n let clock = new NullClock();\n let reconnectAttempt = 0;\n let successfulConnectionTimeout;\n let stop = false;\n let wasOnline = false;\n let gotExitEvent = false;\n let gotEotEvent = false;\n let initTimeout;\n let audioElement;\n function connect() {\n socket = new WebSocket(url, [\"v1.alis\", \"v2.asciicast\", \"v3.asciicast\", \"raw\"]);\n socket.binaryType = \"arraybuffer\";\n let proto;\n socket.onopen = () => {\n proto = socket.protocol || \"raw\";\n logger.info(\"opened\");\n logger.info(`activating ${proto} protocol handler`);\n if (proto === \"v1.alis\") {\n socket.onmessage = onMessage(alisHandler(logger));\n } else if (proto === \"v2.asciicast\") {\n socket.onmessage = onMessage(ascicastV2Handler());\n } else if (proto === \"v3.asciicast\") {\n socket.onmessage = onMessage(ascicastV3Handler());\n } else if (proto === \"raw\") {\n socket.onmessage = onMessage(rawHandler());\n }\n successfulConnectionTimeout = setTimeout(() => {\n reconnectAttempt = 0;\n }, 1000);\n };\n socket.onclose = event => {\n clearTimeout(initTimeout);\n stopBuffer();\n if (stop) return;\n let ended = false;\n let endedMessage = \"Stream ended\";\n if (proto === \"v1.alis\") {\n if (gotEotEvent || event.code >= 4000 && event.code <= 4100) {\n ended = true;\n endedMessage = event.reason || endedMessage;\n }\n } else if (gotExitEvent || event.code === 1000 || event.code === 1005) {\n ended = true;\n }\n if (ended) {\n logger.info(\"closed\");\n dispatch(\"ended\", {\n message: endedMessage\n });\n } else if (event.code === 1002) {\n logger.debug(`close reason: ${event.reason}`);\n dispatch(\"ended\", {\n message: \"Err: Player not compatible with the server\"\n });\n } else {\n clearTimeout(successfulConnectionTimeout);\n const delay = reconnectDelay(reconnectAttempt++);\n logger.info(`unexpected close, reconnecting in ${delay}...`);\n dispatch(\"loading\");\n setTimeout(connect, delay);\n }\n };\n wasOnline = false;\n }\n function onMessage(handler) {\n initTimeout = setTimeout(onStreamEnd, 5000);\n return function (event) {\n try {\n const result = handler(event.data);\n if (buf) {\n if (Array.isArray(result)) {\n buf.pushEvent(result);\n if (result[1] === \"x\") {\n gotExitEvent = true;\n }\n } else if (typeof result === \"string\") {\n buf.pushText(result);\n } else if (typeof result === \"object\" && !Array.isArray(result)) {\n // TODO: check last event ID from the parser, don't reset if we didn't miss anything\n onStreamReset(result);\n } else if (result === false) {\n // EOT\n onStreamEnd();\n gotEotEvent = true;\n } else if (result !== undefined) {\n throw new Error(`unexpected value from protocol handler: ${result}`);\n }\n } else {\n if (typeof result === \"object\" && !Array.isArray(result)) {\n onStreamReset(result);\n clearTimeout(initTimeout);\n } else if (result === undefined) {\n clearTimeout(initTimeout);\n initTimeout = setTimeout(onStreamEnd, 1000);\n } else {\n clearTimeout(initTimeout);\n throw new Error(`unexpected value from protocol handler: ${result}`);\n }\n }\n } catch (e) {\n socket.close();\n throw e;\n }\n };\n }\n function onStreamReset({\n time,\n term\n }) {\n const {\n size,\n init,\n theme\n } = term;\n const {\n cols,\n rows\n } = size;\n logger.info(`stream reset (${cols}x${rows} @${time})`);\n stopBuffer();\n buf = getBuffer(bufferTime, dispatch, t => clock.setTime(t), time, minFrameTime, logger);\n dispatch(\"reset\", {\n size: {\n cols,\n rows\n },\n init,\n theme: theme ?? null\n });\n clock = new Clock();\n wasOnline = true;\n gotExitEvent = false;\n gotEotEvent = false;\n if (typeof time === \"number\") {\n clock.setTime(time);\n }\n dispatch(\"playing\");\n }\n function onStreamEnd() {\n stopBuffer();\n if (wasOnline) {\n logger.info(\"stream ended\");\n dispatch(\"offline\", {\n message: \"Stream ended\"\n });\n } else {\n logger.info(\"stream offline\");\n dispatch(\"offline\", {\n message: \"Stream offline\"\n });\n }\n clock = new NullClock();\n }\n function stopBuffer() {\n if (buf) buf.stop();\n buf = null;\n }\n function startAudio() {\n if (!audioUrl) return;\n audioElement = new Audio();\n audioElement.preload = \"auto\";\n audioElement.crossOrigin = \"anonymous\";\n audioElement.src = audioUrl;\n audioElement.play();\n }\n function stopAudio() {\n if (!audioElement) return;\n audioElement.pause();\n }\n function mute() {\n if (audioElement) {\n audioElement.muted = true;\n return true;\n }\n }\n function unmute() {\n if (audioElement) {\n audioElement.muted = false;\n return true;\n }\n }\n return {\n init: () => {\n dispatch(\"metadata\", {\n hasAudio: !!audioUrl\n });\n },\n play: () => {\n if (socket) return true;\n dispatch(\"play\");\n connect();\n startAudio();\n return true;\n },\n stop: () => {\n stop = true;\n stopBuffer();\n if (socket !== undefined) socket.close();\n stopAudio();\n },\n mute,\n unmute,\n getCurrentTime: () => {\n const t = clock.getTime();\n return typeof t === \"number\" ? t / 1000 : t;\n }\n };\n}\n\nfunction eventsource({\n url,\n bufferTime,\n minFrameTime\n}, {\n dispatch,\n logger\n}) {\n logger = new PrefixedLogger(logger, \"eventsource: \");\n let es;\n let buf;\n let clock = new NullClock();\n function initBuffer(baseStreamTime) {\n if (buf !== undefined) buf.stop();\n buf = getBuffer(bufferTime, dispatch, t => clock.setTime(t), baseStreamTime, minFrameTime, logger);\n }\n return {\n play: () => {\n if (es) return true;\n dispatch(\"play\");\n es = new EventSource(url);\n es.addEventListener(\"open\", () => {\n logger.info(\"opened\");\n initBuffer();\n });\n es.addEventListener(\"error\", e => {\n logger.info(\"errored\");\n logger.debug({\n e\n });\n dispatch(\"loading\");\n });\n es.addEventListener(\"message\", event => {\n const e = JSON.parse(event.data);\n if (Array.isArray(e)) {\n buf.pushEvent([e[0] * 1000, e[1], e[2]]);\n } else if (e.cols !== undefined || e.width !== undefined) {\n const cols = e.cols ?? e.width;\n const rows = e.rows ?? e.height;\n const time = typeof e.time === \"number\" ? e.time * 1000 : undefined;\n logger.debug(`vt reset (${cols}x${rows})`);\n initBuffer(time);\n dispatch(\"reset\", {\n size: {\n cols,\n rows\n },\n init: e.init ?? undefined\n });\n clock = new Clock();\n if (time !== undefined) {\n clock.setTime(time);\n }\n dispatch(\"playing\");\n } else if (e.state === \"offline\") {\n logger.info(\"stream offline\");\n dispatch(\"offline\", {\n message: \"Stream offline\"\n });\n clock = new NullClock();\n }\n });\n es.addEventListener(\"done\", () => {\n logger.info(\"closed\");\n es.close();\n dispatch(\"ended\", {\n message: \"Stream ended\"\n });\n });\n return true;\n },\n stop: () => {\n if (buf !== undefined) buf.stop();\n if (es !== undefined) es.close();\n },\n getCurrentTime: () => {\n const t = clock.getTime();\n return typeof t === \"number\" ? t / 1000 : t;\n }\n };\n}\n\nasync function parse$1(responses, {\n encoding\n}) {\n const textDecoder = new TextDecoder(encoding);\n let cols;\n let rows;\n let timing = (await responses[0].text()).split(\"\\n\").filter(line => line.length > 0).map(line => line.split(\" \"));\n if (timing[0].length < 3) {\n timing = timing.map(entry => [\"O\", entry[0], entry[1]]);\n }\n const buffer = await responses[1].arrayBuffer();\n const array = new Uint8Array(buffer);\n const dataOffset = array.findIndex(byte => byte == 0x0a) + 1;\n const header = textDecoder.decode(array.subarray(0, dataOffset));\n const sizeMatch = header.match(/COLUMNS=\"(\\d+)\" LINES=\"(\\d+)\"/);\n if (sizeMatch !== null) {\n cols = parseInt(sizeMatch[1], 10);\n rows = parseInt(sizeMatch[2], 10);\n }\n const stdout = {\n array,\n cursor: dataOffset\n };\n let stdin = stdout;\n if (responses[2] !== undefined) {\n const buffer = await responses[2].arrayBuffer();\n const array = new Uint8Array(buffer);\n stdin = {\n array,\n cursor: dataOffset\n };\n }\n const events = [];\n let time = 0;\n for (const entry of timing) {\n time += parseFloat(entry[1]) * 1000;\n if (entry[0] === \"O\") {\n const count = parseInt(entry[2], 10);\n const bytes = stdout.array.subarray(stdout.cursor, stdout.cursor + count);\n const text = textDecoder.decode(bytes);\n events.push([time, \"o\", text]);\n stdout.cursor += count;\n } else if (entry[0] === \"I\") {\n const count = parseInt(entry[2], 10);\n const bytes = stdin.array.subarray(stdin.cursor, stdin.cursor + count);\n const text = textDecoder.decode(bytes);\n events.push([time, \"i\", text]);\n stdin.cursor += count;\n } else if (entry[0] === \"S\" && entry[2] === \"SIGWINCH\") {\n const cols = parseInt(entry[4].slice(5), 10);\n const rows = parseInt(entry[3].slice(5), 10);\n events.push([time, \"r\", `${cols}x${rows}`]);\n } else if (entry[0] === \"H\" && entry[2] === \"COLUMNS\") {\n cols = parseInt(entry[3], 10);\n } else if (entry[0] === \"H\" && entry[2] === \"LINES\") {\n rows = parseInt(entry[3], 10);\n }\n }\n cols = cols ?? 80;\n rows = rows ?? 24;\n return {\n cols,\n rows,\n events\n };\n}\n\nasync function parse(response, {\n encoding\n}) {\n const textDecoder = new TextDecoder(encoding);\n const buffer = await response.arrayBuffer();\n const array = new Uint8Array(buffer);\n const firstFrame = parseFrame(array);\n const baseTime = firstFrame.time;\n const firstFrameText = textDecoder.decode(firstFrame.data);\n const sizeMatch = firstFrameText.match(/\\x1b\\[8;(\\d+);(\\d+)t/);\n const events = [];\n let cols = 80;\n let rows = 24;\n if (sizeMatch !== null) {\n cols = parseInt(sizeMatch[2], 10);\n rows = parseInt(sizeMatch[1], 10);\n }\n let cursor = 0;\n let frame = parseFrame(array);\n while (frame !== undefined) {\n const time = (frame.time - baseTime) * 1000;\n const text = textDecoder.decode(frame.data);\n events.push([time, \"o\", text]);\n cursor += frame.len;\n frame = parseFrame(array.subarray(cursor));\n }\n return {\n cols,\n rows,\n events\n };\n}\nfunction parseFrame(array) {\n if (array.length < 13) return;\n const time = parseTimestamp(array.subarray(0, 8));\n const len = parseNumber(array.subarray(8, 12));\n const data = array.subarray(12, 12 + len);\n return {\n time,\n data,\n len: len + 12\n };\n}\nfunction parseNumber(array) {\n return array[0] + array[1] * 256 + array[2] * 256 * 256 + array[3] * 256 * 256 * 256;\n}\nfunction parseTimestamp(array) {\n const sec = parseNumber(array.subarray(0, 4));\n const usec = parseNumber(array.subarray(4, 8));\n return sec + usec / 1000000;\n}\n\nclass Core {\n constructor(src, opts) {\n this.logger = opts.logger;\n this.driverFactory = getDriver(src);\n this.driver = null;\n this.cols = opts.cols;\n this.rows = opts.rows;\n this.speed = opts.speed;\n this.loop = opts.loop;\n this.autoPlay = opts.autoPlay;\n this.idleTimeLimit = opts.idleTimeLimit;\n this.preload = opts.preload;\n this.startAt = parseNpt(opts.startAt);\n this.poster = this._parsePoster(opts.poster);\n this.markers = opts.markers;\n this.pauseOnMarkers = opts.pauseOnMarkers;\n this.audioUrl = opts.audioUrl;\n this.initPromise = null;\n this.commandQueue = Promise.resolve();\n this.startupPromise = new Promise(resolve => {\n this.resolveStartup = resolve;\n });\n this.eventHandlers = new Map([[\"ended\", []], [\"error\", []], [\"input\", []], [\"loading\", []], [\"marker\", []], [\"metadata\", []], [\"muted\", []], [\"offline\", []], [\"output\", []], [\"pause\", []], [\"play\", []], [\"playing\", []], [\"reset\", []], [\"resize\", []], [\"ready\", []], [\"seeked\", []]]);\n }\n init() {\n if (this.initPromise === null) {\n this.initPromise = this._init();\n }\n return this.initPromise;\n }\n terminalReady() {\n this.resolveStartup();\n }\n async _init() {\n // Wait until Terminal has installed VT event listeners before drivers start dispatching.\n await this.startupPromise;\n this.driver = this.driverFactory({\n dispatch: this._dispatchEvent.bind(this),\n logger: this.logger\n }, {\n cols: this.cols,\n rows: this.rows,\n speed: this.speed,\n idleTimeLimit: this.idleTimeLimit,\n startAt: this.startAt,\n preload: this.preload,\n loop: this.loop,\n poster: this.autoPlay ? undefined : this.poster,\n markers: this.markers,\n pauseOnMarkers: this.pauseOnMarkers,\n audioUrl: this.audioUrl\n });\n const config = {\n isPausable: !!this.driver.pause,\n isSeekable: !!this.driver.seek\n };\n this._installDriverDefaults();\n if (this.driver.init) {\n await this.driver.init();\n }\n if (this.autoPlay) {\n await this.driver.play();\n }\n this._dispatchEvent(\"ready\", config);\n }\n _installDriverDefaults() {\n if (this.driver.stop === undefined) {\n this.driver.stop = () => {};\n }\n if (this.driver.pause === undefined) {\n this.driver.pause = () => {};\n }\n if (this.driver.seek === undefined) {\n this.driver.seek = _where => false;\n }\n if (this.driver.step === undefined) {\n this.driver.step = _n => {};\n }\n if (this.driver.mute === undefined) {\n this.driver.mute = () => {};\n }\n if (this.driver.unmute === undefined) {\n this.driver.unmute = () => {};\n }\n if (this.driver.getDuration === undefined) {\n this.driver.getDuration = () => {};\n }\n if (this.driver.getCurrentTime === undefined) {\n const play = this.driver.play;\n let clock = new NullClock();\n this.driver.play = () => {\n clock = new Clock(this.speed);\n return play();\n };\n this.driver.getCurrentTime = () => {\n const t = clock.getTime();\n return typeof t === \"number\" ? t / 1000 : t;\n };\n }\n }\n _enqueue(command) {\n const run = async () => {\n await this.init();\n return command.call(this);\n };\n const result = this.commandQueue.then(run, run);\n this.commandQueue = result.catch(() => {});\n return result;\n }\n play() {\n return this._enqueue(function () {\n return this.driver.play();\n });\n }\n pause() {\n return this._enqueue(function () {\n return this.driver.pause();\n });\n }\n seek(where) {\n return this._enqueue(function () {\n return this.driver.seek(where);\n });\n }\n step(n) {\n return this._enqueue(function () {\n return this.driver.step(n);\n });\n }\n stop() {\n return this._enqueue(function () {\n return this.driver.stop();\n });\n }\n mute() {\n return this._enqueue(function () {\n return this.driver.mute();\n });\n }\n unmute() {\n return this._enqueue(function () {\n return this.driver.unmute();\n });\n }\n getCurrentTime() {\n if (!this.driver) {\n return 0;\n }\n return this.driver.getCurrentTime();\n }\n getRemainingTime() {\n const duration = this.getDuration();\n if (typeof duration === \"number\") {\n return duration - Math.min(this.getCurrentTime(), duration);\n }\n }\n getProgress() {\n const duration = this.getDuration();\n if (typeof duration === \"number\") {\n return Math.min(this.getCurrentTime(), duration) / duration;\n }\n }\n getDuration() {\n if (!this.driver) {\n return undefined;\n }\n return this.driver.getDuration();\n }\n addEventListener(eventName, handler) {\n this.eventHandlers.get(eventName).push(handler);\n }\n removeEventListener(eventName, handler) {\n const handlers = this.eventHandlers.get(eventName);\n if (!handlers) return;\n const idx = handlers.indexOf(handler);\n if (idx !== -1) handlers.splice(idx, 1);\n }\n _dispatchEvent(eventName, data = {}) {\n for (const handler of [...this.eventHandlers.get(eventName)]) {\n try {\n handler(data);\n } catch (error) {\n this.logger.error(`event handler for \"${eventName}\" failed`, error);\n if (typeof globalThis.reportError === \"function\") {\n globalThis.reportError(error);\n } else {\n setTimeout(() => {\n throw error;\n }, 0);\n }\n }\n }\n }\n _parsePoster(poster) {\n if (typeof poster !== \"string\") return;\n if (poster.substring(0, 16) == \"data:text/plain,\") {\n return {\n type: \"text\",\n value: poster.substring(16)\n };\n } else if (poster.substring(0, 4) == \"npt:\") {\n return {\n type: \"npt\",\n value: parseNpt(poster.substring(4))\n };\n }\n return;\n }\n}\nconst DRIVERS = new Map([[\"benchmark\", benchmark], [\"clock\", clock], [\"eventsource\", eventsource], [\"random\", random], [\"recording\", recording], [\"websocket\", websocket]]);\nconst PARSERS = new Map([[\"asciicast\", parse$2], [\"typescript\", parse$1], [\"ttyrec\", parse]]);\nfunction getDriver(src) {\n if (typeof src === \"function\") return src;\n if (typeof src === \"string\") {\n if (src.substring(0, 5) == \"ws://\" || src.substring(0, 6) == \"wss://\") {\n src = {\n driver: \"websocket\",\n url: src\n };\n } else if (src.substring(0, 6) == \"clock:\") {\n src = {\n driver: \"clock\"\n };\n } else if (src.substring(0, 7) == \"random:\") {\n src = {\n driver: \"random\"\n };\n } else if (src.substring(0, 10) == \"benchmark:\") {\n src = {\n driver: \"benchmark\",\n url: src.substring(10)\n };\n } else {\n src = {\n driver: \"recording\",\n url: src\n };\n }\n }\n if (src.driver === undefined) {\n src.driver = \"recording\";\n }\n if (src.driver == \"recording\") {\n if (src.format !== \"segmented\" && src.parser === undefined) {\n src.parser = \"asciicast\";\n }\n if (typeof src.parser === \"string\") {\n if (PARSERS.has(src.parser)) {\n src.parser = PARSERS.get(src.parser);\n } else {\n throw new Error(`unknown parser: ${src.parser}`);\n }\n }\n }\n if (DRIVERS.has(src.driver)) {\n const driver = DRIVERS.get(src.driver);\n return (callbacks, opts) => driver(src, callbacks, opts);\n } else {\n throw new Error(`unsupported driver: ${JSON.stringify(src)}`);\n }\n}\n\nexport { Core as C };\n","import { h as hexToOklab, l as lerpOklab, o as oklabToHex, r as rgbToHex, n as normalizeHexColor, t as throttle, d as debounce } from './logging-DeB0koVt.js';\n\nconst IS_DEV = false;\nconst equalFn = (a, b) => a === b;\nconst $TRACK = Symbol(\"solid-track\");\nconst signalOptions = {\n equals: equalFn\n};\nlet runEffects = runQueue;\nconst STALE = 1;\nconst PENDING = 2;\nconst UNOWNED = {\n owned: null,\n cleanups: null,\n context: null,\n owner: null\n};\nvar Owner = null;\nlet Transition$1 = null;\nlet ExternalSourceConfig = null;\nlet Listener = null;\nlet Updates = null;\nlet Effects = null;\nlet ExecCount = 0;\nfunction createRoot(fn, detachedOwner) {\n const listener = Listener,\n owner = Owner,\n unowned = fn.length === 0,\n current = detachedOwner === undefined ? owner : detachedOwner,\n root = unowned\n ? UNOWNED\n : {\n owned: null,\n cleanups: null,\n context: current ? current.context : null,\n owner: current\n },\n updateFn = unowned ? fn : () => fn(() => untrack(() => cleanNode(root)));\n Owner = root;\n Listener = null;\n try {\n return runUpdates(updateFn, true);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n}\nfunction createSignal(value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const s = {\n value,\n observers: null,\n observerSlots: null,\n comparator: options.equals || undefined\n };\n const setter = value => {\n if (typeof value === \"function\") {\n value = value(s.value);\n }\n return writeSignal(s, value);\n };\n return [readSignal.bind(s), setter];\n}\nfunction createComputed(fn, value, options) {\n const c = createComputation(fn, value, true, STALE);\n updateComputation(c);\n}\nfunction createRenderEffect(fn, value, options) {\n const c = createComputation(fn, value, false, STALE);\n updateComputation(c);\n}\nfunction createEffect(fn, value, options) {\n runEffects = runUserEffects;\n const c = createComputation(fn, value, false, STALE);\n c.user = true;\n Effects ? Effects.push(c) : updateComputation(c);\n}\nfunction createMemo(fn, value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const c = createComputation(fn, value, true, 0);\n c.observers = null;\n c.observerSlots = null;\n c.comparator = options.equals || undefined;\n updateComputation(c);\n return readSignal.bind(c);\n}\nfunction batch(fn) {\n return runUpdates(fn, false);\n}\nfunction untrack(fn) {\n if (Listener === null) return fn();\n const listener = Listener;\n Listener = null;\n try {\n if (ExternalSourceConfig) ;\n return fn();\n } finally {\n Listener = listener;\n }\n}\nfunction onMount(fn) {\n createEffect(() => untrack(fn));\n}\nfunction onCleanup(fn) {\n if (Owner === null);\n else if (Owner.cleanups === null) Owner.cleanups = [fn];\n else Owner.cleanups.push(fn);\n return fn;\n}\nfunction startTransition(fn) {\n const l = Listener;\n const o = Owner;\n return Promise.resolve().then(() => {\n Listener = l;\n Owner = o;\n let t;\n runUpdates(fn, false);\n Listener = Owner = null;\n return t ? t.done : undefined;\n });\n}\nconst [transPending] = /*@__PURE__*/ createSignal(false);\nfunction useTransition() {\n return [transPending, startTransition];\n}\nfunction children(fn) {\n const children = createMemo(fn);\n const memo = createMemo(() => resolveChildren(children()));\n memo.toArray = () => {\n const c = memo();\n return Array.isArray(c) ? c : c != null ? [c] : [];\n };\n return memo;\n}\nfunction readSignal() {\n if (this.sources && (this.state)) {\n if ((this.state) === STALE) updateComputation(this);\n else {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(this), false);\n Updates = updates;\n }\n }\n if (Listener) {\n const sSlot = this.observers ? this.observers.length : 0;\n if (!Listener.sources) {\n Listener.sources = [this];\n Listener.sourceSlots = [sSlot];\n } else {\n Listener.sources.push(this);\n Listener.sourceSlots.push(sSlot);\n }\n if (!this.observers) {\n this.observers = [Listener];\n this.observerSlots = [Listener.sources.length - 1];\n } else {\n this.observers.push(Listener);\n this.observerSlots.push(Listener.sources.length - 1);\n }\n }\n return this.value;\n}\nfunction writeSignal(node, value, isComp) {\n let current =\n node.value;\n if (!node.comparator || !node.comparator(current, value)) {\n node.value = value;\n if (node.observers && node.observers.length) {\n runUpdates(() => {\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n const TransitionRunning = Transition$1 && Transition$1.running;\n if (TransitionRunning && Transition$1.disposed.has(o)) ;\n if (TransitionRunning ? !o.tState : !o.state) {\n if (o.pure) Updates.push(o);\n else Effects.push(o);\n if (o.observers) markDownstream(o);\n }\n if (!TransitionRunning) o.state = STALE;\n }\n if (Updates.length > 10e5) {\n Updates = [];\n if (IS_DEV);\n throw new Error();\n }\n }, false);\n }\n }\n return value;\n}\nfunction updateComputation(node) {\n if (!node.fn) return;\n cleanNode(node);\n const time = ExecCount;\n runComputation(\n node,\n node.value,\n time\n );\n}\nfunction runComputation(node, value, time) {\n let nextValue;\n const owner = Owner,\n listener = Listener;\n Listener = Owner = node;\n try {\n nextValue = node.fn(value);\n } catch (err) {\n if (node.pure) {\n {\n node.state = STALE;\n node.owned && node.owned.forEach(cleanNode);\n node.owned = null;\n }\n }\n node.updatedAt = time + 1;\n return handleError(err);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n if (!node.updatedAt || node.updatedAt <= time) {\n if (node.updatedAt != null && \"observers\" in node) {\n writeSignal(node, nextValue);\n } else node.value = nextValue;\n node.updatedAt = time;\n }\n}\nfunction createComputation(fn, init, pure, state = STALE, options) {\n const c = {\n fn,\n state: state,\n updatedAt: null,\n owned: null,\n sources: null,\n sourceSlots: null,\n cleanups: null,\n value: init,\n owner: Owner,\n context: Owner ? Owner.context : null,\n pure\n };\n if (Owner === null);\n else if (Owner !== UNOWNED) {\n {\n if (!Owner.owned) Owner.owned = [c];\n else Owner.owned.push(c);\n }\n }\n return c;\n}\nfunction runTop(node) {\n if ((node.state) === 0) return;\n if ((node.state) === PENDING) return lookUpstream(node);\n if (node.suspense && untrack(node.suspense.inFallback)) return node.suspense.effects.push(node);\n const ancestors = [node];\n while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {\n if (node.state) ancestors.push(node);\n }\n for (let i = ancestors.length - 1; i >= 0; i--) {\n node = ancestors[i];\n if ((node.state) === STALE) {\n updateComputation(node);\n } else if ((node.state) === PENDING) {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(node, ancestors[0]), false);\n Updates = updates;\n }\n }\n}\nfunction runUpdates(fn, init) {\n if (Updates) return fn();\n let wait = false;\n if (!init) Updates = [];\n if (Effects) wait = true;\n else Effects = [];\n ExecCount++;\n try {\n const res = fn();\n completeUpdates(wait);\n return res;\n } catch (err) {\n if (!wait) Effects = null;\n Updates = null;\n handleError(err);\n }\n}\nfunction completeUpdates(wait) {\n if (Updates) {\n runQueue(Updates);\n Updates = null;\n }\n if (wait) return;\n const e = Effects;\n Effects = null;\n if (e.length) runUpdates(() => runEffects(e), false);\n}\nfunction runQueue(queue) {\n for (let i = 0; i < queue.length; i++) runTop(queue[i]);\n}\nfunction runUserEffects(queue) {\n let i,\n userLength = 0;\n for (i = 0; i < queue.length; i++) {\n const e = queue[i];\n if (!e.user) runTop(e);\n else queue[userLength++] = e;\n }\n for (i = 0; i < userLength; i++) runTop(queue[i]);\n}\nfunction lookUpstream(node, ignore) {\n node.state = 0;\n for (let i = 0; i < node.sources.length; i += 1) {\n const source = node.sources[i];\n if (source.sources) {\n const state = source.state;\n if (state === STALE) {\n if (source !== ignore && (!source.updatedAt || source.updatedAt < ExecCount))\n runTop(source);\n } else if (state === PENDING) lookUpstream(source, ignore);\n }\n }\n}\nfunction markDownstream(node) {\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n if (!o.state) {\n o.state = PENDING;\n if (o.pure) Updates.push(o);\n else Effects.push(o);\n o.observers && markDownstream(o);\n }\n }\n}\nfunction cleanNode(node) {\n let i;\n if (node.sources) {\n while (node.sources.length) {\n const source = node.sources.pop(),\n index = node.sourceSlots.pop(),\n obs = source.observers;\n if (obs && obs.length) {\n const n = obs.pop(),\n s = source.observerSlots.pop();\n if (index < obs.length) {\n n.sourceSlots[s] = index;\n obs[index] = n;\n source.observerSlots[index] = s;\n }\n }\n }\n }\n if (node.tOwned) {\n for (i = node.tOwned.length - 1; i >= 0; i--) cleanNode(node.tOwned[i]);\n delete node.tOwned;\n }\n if (node.owned) {\n for (i = node.owned.length - 1; i >= 0; i--) cleanNode(node.owned[i]);\n node.owned = null;\n }\n if (node.cleanups) {\n for (i = node.cleanups.length - 1; i >= 0; i--) node.cleanups[i]();\n node.cleanups = null;\n }\n node.state = 0;\n}\nfunction castError(err) {\n if (err instanceof Error) return err;\n return new Error(typeof err === \"string\" ? err : \"Unknown error\", {\n cause: err\n });\n}\nfunction handleError(err, owner = Owner) {\n const error = castError(err);\n throw error;\n}\nfunction resolveChildren(children) {\n if (typeof children === \"function\" && !children.length) return resolveChildren(children());\n if (Array.isArray(children)) {\n const results = [];\n for (let i = 0; i < children.length; i++) {\n const result = resolveChildren(children[i]);\n Array.isArray(result) ? results.push.apply(results, result) : results.push(result);\n }\n return results;\n }\n return children;\n}\n\nconst FALLBACK = Symbol(\"fallback\");\nfunction dispose(d) {\n for (let i = 0; i < d.length; i++) d[i]();\n}\nfunction mapArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n len = 0,\n indexes = mapFn.length > 1 ? [] : null;\n onCleanup(() => dispose(disposers));\n return () => {\n let newItems = list() || [],\n newLen = newItems.length,\n i,\n j;\n newItems[$TRACK];\n return untrack(() => {\n let newIndices, newIndicesNext, temp, tempdisposers, tempIndexes, start, end, newEnd, item;\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n indexes && (indexes = []);\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n } else if (len === 0) {\n mapped = new Array(newLen);\n for (j = 0; j < newLen; j++) {\n items[j] = newItems[j];\n mapped[j] = createRoot(mapper);\n }\n len = newLen;\n } else {\n temp = new Array(newLen);\n tempdisposers = new Array(newLen);\n indexes && (tempIndexes = new Array(newLen));\n for (\n start = 0, end = Math.min(len, newLen);\n start < end && items[start] === newItems[start];\n start++\n );\n for (\n end = len - 1, newEnd = newLen - 1;\n end >= start && newEnd >= start && items[end] === newItems[newEnd];\n end--, newEnd--\n ) {\n temp[newEnd] = mapped[end];\n tempdisposers[newEnd] = disposers[end];\n indexes && (tempIndexes[newEnd] = indexes[end]);\n }\n newIndices = new Map();\n newIndicesNext = new Array(newEnd + 1);\n for (j = newEnd; j >= start; j--) {\n item = newItems[j];\n i = newIndices.get(item);\n newIndicesNext[j] = i === undefined ? -1 : i;\n newIndices.set(item, j);\n }\n for (i = start; i <= end; i++) {\n item = items[i];\n j = newIndices.get(item);\n if (j !== undefined && j !== -1) {\n temp[j] = mapped[i];\n tempdisposers[j] = disposers[i];\n indexes && (tempIndexes[j] = indexes[i]);\n j = newIndicesNext[j];\n newIndices.set(item, j);\n } else disposers[i]();\n }\n for (j = start; j < newLen; j++) {\n if (j in temp) {\n mapped[j] = temp[j];\n disposers[j] = tempdisposers[j];\n if (indexes) {\n indexes[j] = tempIndexes[j];\n indexes[j](j);\n }\n } else mapped[j] = createRoot(mapper);\n }\n mapped = mapped.slice(0, (len = newLen));\n items = newItems.slice(0);\n }\n return mapped;\n });\n function mapper(disposer) {\n disposers[j] = disposer;\n if (indexes) {\n const [s, set] = createSignal(j);\n indexes[j] = set;\n return mapFn(newItems[j], s);\n }\n return mapFn(newItems[j]);\n }\n };\n}\nfunction createComponent(Comp, props) {\n return untrack(() => Comp(props || {}));\n}\n\nconst narrowedError = name => `Stale read from <${name}>.`;\nfunction For(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(mapArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Show(props) {\n const keyed = props.keyed;\n const conditionValue = createMemo(() => props.when, undefined, undefined);\n const condition = keyed\n ? conditionValue\n : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n return createMemo(\n () => {\n const c = condition();\n if (c) {\n const child = props.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn\n ? untrack(() =>\n child(\n keyed\n ? c\n : () => {\n if (!untrack(condition)) throw narrowedError(\"Show\");\n return conditionValue();\n }\n )\n )\n : child;\n }\n return props.fallback;\n },\n undefined,\n undefined\n );\n}\nfunction Switch(props) {\n const chs = children(() => props.children);\n const switchFunc = createMemo(() => {\n const ch = chs();\n const mps = Array.isArray(ch) ? ch : [ch];\n let func = () => undefined;\n for (let i = 0; i < mps.length; i++) {\n const index = i;\n const mp = mps[i];\n const prevFunc = func;\n const conditionValue = createMemo(\n () => (prevFunc() ? undefined : mp.when),\n undefined,\n undefined\n );\n const condition = mp.keyed\n ? conditionValue\n : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n func = () => prevFunc() || (condition() ? [index, conditionValue, mp] : undefined);\n }\n return func;\n });\n return createMemo(\n () => {\n const sel = switchFunc()();\n if (!sel) return props.fallback;\n const [index, conditionValue, mp] = sel;\n const child = mp.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn\n ? untrack(() =>\n child(\n mp.keyed\n ? conditionValue()\n : () => {\n if (untrack(switchFunc)()?.[0] !== index) throw narrowedError(\"Match\");\n return conditionValue();\n }\n )\n )\n : child;\n },\n undefined,\n undefined\n );\n}\nfunction Match(props) {\n return props;\n}\n\nfunction reconcileArrays(parentNode, a, b) {\n let bLength = b.length,\n aEnd = a.length,\n bEnd = bLength,\n aStart = 0,\n bStart = 0,\n after = a[aEnd - 1].nextSibling,\n map = null;\n while (aStart < aEnd || bStart < bEnd) {\n if (a[aStart] === b[bStart]) {\n aStart++;\n bStart++;\n continue;\n }\n while (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--;\n bEnd--;\n }\n if (aEnd === aStart) {\n const node = bEnd < bLength ? (bStart ? b[bStart - 1].nextSibling : b[bEnd - bStart]) : after;\n while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);\n } else if (bEnd === bStart) {\n while (aStart < aEnd) {\n if (!map || !map.has(a[aStart])) a[aStart].remove();\n aStart++;\n }\n } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n const node = a[--aEnd].nextSibling;\n parentNode.insertBefore(b[bStart++], a[aStart++].nextSibling);\n parentNode.insertBefore(b[--bEnd], node);\n a[aEnd] = b[bEnd];\n } else {\n if (!map) {\n map = new Map();\n let i = bStart;\n while (i < bEnd) map.set(b[i], i++);\n }\n const index = map.get(a[aStart]);\n if (index != null) {\n if (bStart < index && index < bEnd) {\n let i = aStart,\n sequence = 1,\n t;\n while (++i < aEnd && i < bEnd) {\n if ((t = map.get(a[i])) == null || t !== index + sequence) break;\n sequence++;\n }\n if (sequence > index - bStart) {\n const node = a[aStart];\n while (bStart < index) parentNode.insertBefore(b[bStart++], node);\n } else parentNode.replaceChild(b[bStart++], a[aStart++]);\n } else aStart++;\n } else a[aStart++].remove();\n }\n }\n}\n\nconst $$EVENTS = \"_$DX_DELEGATE\";\nfunction render(code, element, init, options = {}) {\n let disposer;\n createRoot(dispose => {\n disposer = dispose;\n element === document\n ? code()\n : insert(element, code(), element.firstChild ? null : undefined, init);\n }, options.owner);\n return () => {\n disposer();\n element.textContent = \"\";\n };\n}\nfunction template(html, isImportNode, isSVG, isMathML) {\n let node;\n const create = () => {\n const t = document.createElement(\"template\");\n t.innerHTML = html;\n return t.content.firstChild;\n };\n const fn = isImportNode\n ? () => untrack(() => document.importNode(node || (node = create()), true))\n : () => (node || (node = create())).cloneNode(true);\n fn.cloneNode = fn;\n return fn;\n}\nfunction delegateEvents(eventNames, document = window.document) {\n const e = document[$$EVENTS] || (document[$$EVENTS] = new Set());\n for (let i = 0, l = eventNames.length; i < l; i++) {\n const name = eventNames[i];\n if (!e.has(name)) {\n e.add(name);\n document.addEventListener(name, eventHandler);\n }\n }\n}\nfunction setAttribute(node, name, value) {\n if (value == null) node.removeAttribute(name);\n else node.setAttribute(name, value);\n}\nfunction className(node, value) {\n if (value == null) node.removeAttribute(\"class\");\n else node.className = value;\n}\nfunction addEventListener(node, name, handler, delegate) {\n {\n if (Array.isArray(handler)) {\n node[`$$${name}`] = handler[0];\n node[`$$${name}Data`] = handler[1];\n } else node[`$$${name}`] = handler;\n }\n}\nfunction style(node, value, prev) {\n if (!value) return prev ? setAttribute(node, \"style\") : value;\n const nodeStyle = node.style;\n if (typeof value === \"string\") return (nodeStyle.cssText = value);\n typeof prev === \"string\" && (nodeStyle.cssText = prev = undefined);\n prev || (prev = {});\n value || (value = {});\n let v, s;\n for (s in prev) {\n value[s] == null && nodeStyle.removeProperty(s);\n delete prev[s];\n }\n for (s in value) {\n v = value[s];\n if (v !== prev[s]) {\n nodeStyle.setProperty(s, v);\n prev[s] = v;\n }\n }\n return prev;\n}\nfunction use(fn, element, arg) {\n return untrack(() => fn(element, arg));\n}\nfunction insert(parent, accessor, marker, initial) {\n if (marker !== undefined && !initial) initial = [];\n if (typeof accessor !== \"function\") return insertExpression(parent, accessor, initial, marker);\n createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);\n}\nfunction eventHandler(e) {\n let node = e.target;\n const key = `$$${e.type}`;\n const oriTarget = e.target;\n const oriCurrentTarget = e.currentTarget;\n const retarget = value =>\n Object.defineProperty(e, \"target\", {\n configurable: true,\n value\n });\n const handleNode = () => {\n const handler = node[key];\n if (handler && !node.disabled) {\n const data = node[`${key}Data`];\n data !== undefined ? handler.call(node, data, e) : handler.call(node, e);\n if (e.cancelBubble) return;\n }\n node.host &&\n typeof node.host !== \"string\" &&\n !node.host._$host &&\n node.contains(e.target) &&\n retarget(node.host);\n return true;\n };\n const walkUpTree = () => {\n while (handleNode() && (node = node._$host || node.parentNode || node.host));\n };\n Object.defineProperty(e, \"currentTarget\", {\n configurable: true,\n get() {\n return node || document;\n }\n });\n if (e.composedPath) {\n const path = e.composedPath();\n retarget(path[0]);\n for (let i = 0; i < path.length - 2; i++) {\n node = path[i];\n if (!handleNode()) break;\n if (node._$host) {\n node = node._$host;\n walkUpTree();\n break;\n }\n if (node.parentNode === oriCurrentTarget) {\n break;\n }\n }\n } else walkUpTree();\n retarget(oriTarget);\n}\nfunction insertExpression(parent, value, current, marker, unwrapArray) {\n while (typeof current === \"function\") current = current();\n if (value === current) return current;\n const t = typeof value,\n multi = marker !== undefined;\n parent = (multi && current[0] && current[0].parentNode) || parent;\n if (t === \"string\" || t === \"number\") {\n if (t === \"number\") {\n value = value.toString();\n if (value === current) return current;\n }\n if (multi) {\n let node = current[0];\n if (node && node.nodeType === 3) {\n node.data !== value && (node.data = value);\n } else node = document.createTextNode(value);\n current = cleanChildren(parent, current, marker, node);\n } else {\n if (current !== \"\" && typeof current === \"string\") {\n current = parent.firstChild.data = value;\n } else current = parent.textContent = value;\n }\n } else if (value == null || t === \"boolean\") {\n current = cleanChildren(parent, current, marker);\n } else if (t === \"function\") {\n createRenderEffect(() => {\n let v = value();\n while (typeof v === \"function\") v = v();\n current = insertExpression(parent, v, current, marker);\n });\n return () => current;\n } else if (Array.isArray(value)) {\n const array = [];\n const currentArray = current && Array.isArray(current);\n if (normalizeIncomingArray(array, value, current, unwrapArray)) {\n createRenderEffect(() => (current = insertExpression(parent, array, current, marker, true)));\n return () => current;\n }\n if (array.length === 0) {\n current = cleanChildren(parent, current, marker);\n if (multi) return current;\n } else if (currentArray) {\n if (current.length === 0) {\n appendNodes(parent, array, marker);\n } else reconcileArrays(parent, current, array);\n } else {\n current && cleanChildren(parent);\n appendNodes(parent, array);\n }\n current = array;\n } else if (value.nodeType) {\n if (Array.isArray(current)) {\n if (multi) return (current = cleanChildren(parent, current, marker, value));\n cleanChildren(parent, current, null, value);\n } else if (current == null || current === \"\" || !parent.firstChild) {\n parent.appendChild(value);\n } else parent.replaceChild(value, parent.firstChild);\n current = value;\n } else;\n return current;\n}\nfunction normalizeIncomingArray(normalized, array, current, unwrap) {\n let dynamic = false;\n for (let i = 0, len = array.length; i < len; i++) {\n let item = array[i],\n prev = current && current[normalized.length],\n t;\n if (item == null || item === true || item === false);\n else if ((t = typeof item) === \"object\" && item.nodeType) {\n normalized.push(item);\n } else if (Array.isArray(item)) {\n dynamic = normalizeIncomingArray(normalized, item, prev) || dynamic;\n } else if (t === \"function\") {\n if (unwrap) {\n while (typeof item === \"function\") item = item();\n dynamic =\n normalizeIncomingArray(\n normalized,\n Array.isArray(item) ? item : [item],\n Array.isArray(prev) ? prev : [prev]\n ) || dynamic;\n } else {\n normalized.push(item);\n dynamic = true;\n }\n } else {\n const value = String(item);\n if (prev && prev.nodeType === 3 && prev.data === value) normalized.push(prev);\n else normalized.push(document.createTextNode(value));\n }\n }\n return dynamic;\n}\nfunction appendNodes(parent, array, marker = null) {\n for (let i = 0, len = array.length; i < len; i++) parent.insertBefore(array[i], marker);\n}\nfunction cleanChildren(parent, current, marker, replacement) {\n if (marker === undefined) return (parent.textContent = \"\");\n const node = replacement || document.createTextNode(\"\");\n if (current.length) {\n let inserted = false;\n for (let i = current.length - 1; i >= 0; i--) {\n const el = current[i];\n if (node !== el) {\n const isParent = el.parentNode === parent;\n if (!inserted && !i)\n isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);\n else isParent && el.remove();\n } else inserted = true;\n }\n } else parent.insertBefore(node, marker);\n return [node];\n}\n\nconst noop = () => {\n /* noop */\n};\nconst noopTransition = (el, done) => done();\n/**\n * Create an element transition interface for switching between single elements.\n * It can be used to implement own transition effect, or a custom `<Transition>`-like component.\n *\n * It will observe {@link source} and return a signal with array of elements to be rendered (current one and exiting ones).\n *\n * @param source a signal with the current element. Any nullish value will mean there is no element.\n * Any object can used as the source, but most likely you will want to use a `HTMLElement` or `SVGElement`.\n * @param options transition options {@link SwitchTransitionOptions}\n * @returns a signal with an array of the current element and exiting previous elements.\n *\n * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/transition-group#createSwitchTransition\n *\n * @example\n * const [el, setEl] = createSignal<HTMLDivElement>();\n *\n * const rendered = createSwitchTransition(el, {\n * onEnter(el, done) {\n * // the enter callback is called before the element is inserted into the DOM\n * // so run the animation in the next animation frame / microtask\n * queueMicrotask(() => { ... })\n * },\n * onExit(el, done) {\n * // the exitting element is kept in the DOM until the done() callback is called\n * },\n * })\n *\n * // change the source to trigger the transition\n * setEl(refToHtmlElement);\n */\nfunction createSwitchTransition(source, options) {\n const initSource = untrack(source);\n const initReturned = initSource ? [initSource] : [];\n const { onEnter = noopTransition, onExit = noopTransition } = options;\n const [returned, setReturned] = createSignal(options.appear ? [] : initReturned);\n const [isTransitionPending] = useTransition();\n let next;\n let isExiting = false;\n function exitTransition(el, after) {\n if (!el)\n return after && after();\n isExiting = true;\n onExit(el, () => {\n batch(() => {\n isExiting = false;\n setReturned(p => p.filter(e => e !== el));\n after && after();\n });\n });\n }\n function enterTransition(after) {\n const el = next;\n if (!el)\n return after && after();\n next = undefined;\n setReturned(p => [el, ...p]);\n onEnter(el, after ?? noop);\n }\n const triggerTransitions = options.mode === \"out-in\"\n ? // exit -> enter\n // exit -> enter\n prev => isExiting || exitTransition(prev, enterTransition)\n : options.mode === \"in-out\"\n ? // enter -> exit\n // enter -> exit\n prev => enterTransition(() => exitTransition(prev))\n : // exit & enter\n // exit & enter\n prev => {\n exitTransition(prev);\n enterTransition();\n };\n createComputed((prev) => {\n const el = source();\n if (untrack(isTransitionPending)) {\n // wait for pending transition to end before animating\n isTransitionPending();\n return prev;\n }\n if (el !== prev) {\n next = el;\n batch(() => untrack(() => triggerTransitions(prev)));\n }\n return el;\n }, options.appear ? undefined : initSource);\n return returned;\n}\n\n/**\n * Default predicate used in `resolveElements()` and `resolveFirst()` to filter Elements.\n *\n * On the client it uses `instanceof Element` check, on the server it checks for the object with `t` property. (generated by compiling JSX)\n */\nconst defaultElementPredicate = (item) => item instanceof Element;\n/**\n * Utility for resolving recursively nested JSX children in search of the first element that matches a predicate.\n *\n * It does **not** create a computation - should be wrapped in one to repeat the resolution on changes.\n *\n * @param value JSX children\n * @param predicate predicate to filter elements\n * @returns single found element or `null` if no elements were found\n */\nfunction getFirstChild(value, predicate) {\n if (predicate(value))\n return value;\n if (typeof value === \"function\" && !value.length)\n return getFirstChild(value(), predicate);\n if (Array.isArray(value)) {\n for (const item of value) {\n const result = getFirstChild(item, predicate);\n if (result)\n return result;\n }\n }\n return null;\n}\nfunction resolveFirst(fn, predicate = defaultElementPredicate, serverPredicate = defaultElementPredicate) {\n const children = createMemo(fn);\n return createMemo(() => getFirstChild(children(), predicate));\n}\n\n// src/common.ts\nfunction createClassnames(props) {\n return createMemo(() => {\n const name = props.name || \"s\";\n return {\n enterActive: (props.enterActiveClass || name + \"-enter-active\").split(\" \"),\n enter: (props.enterClass || name + \"-enter\").split(\" \"),\n enterTo: (props.enterToClass || name + \"-enter-to\").split(\" \"),\n exitActive: (props.exitActiveClass || name + \"-exit-active\").split(\" \"),\n exit: (props.exitClass || name + \"-exit\").split(\" \"),\n exitTo: (props.exitToClass || name + \"-exit-to\").split(\" \"),\n move: (props.moveClass || name + \"-move\").split(\" \")\n };\n });\n}\nfunction nextFrame(fn) {\n requestAnimationFrame(() => requestAnimationFrame(fn));\n}\nfunction enterTransition(classes, events, el, done) {\n const { onBeforeEnter, onEnter, onAfterEnter } = events;\n onBeforeEnter?.(el);\n el.classList.add(...classes.enter);\n el.classList.add(...classes.enterActive);\n queueMicrotask(() => {\n if (!el.parentNode)\n return done?.();\n onEnter?.(el, () => endTransition());\n });\n nextFrame(() => {\n el.classList.remove(...classes.enter);\n el.classList.add(...classes.enterTo);\n if (!onEnter || onEnter.length < 2) {\n el.addEventListener(\"transitionend\", endTransition);\n el.addEventListener(\"animationend\", endTransition);\n }\n });\n function endTransition(e) {\n if (!e || e.target === el) {\n done?.();\n el.removeEventListener(\"transitionend\", endTransition);\n el.removeEventListener(\"animationend\", endTransition);\n el.classList.remove(...classes.enterActive);\n el.classList.remove(...classes.enterTo);\n onAfterEnter?.(el);\n }\n }\n}\nfunction exitTransition(classes, events, el, done) {\n const { onBeforeExit, onExit, onAfterExit } = events;\n if (!el.parentNode)\n return done?.();\n onBeforeExit?.(el);\n el.classList.add(...classes.exit);\n el.classList.add(...classes.exitActive);\n onExit?.(el, () => endTransition());\n nextFrame(() => {\n el.classList.remove(...classes.exit);\n el.classList.add(...classes.exitTo);\n if (!onExit || onExit.length < 2) {\n el.addEventListener(\"transitionend\", endTransition);\n el.addEventListener(\"animationend\", endTransition);\n }\n });\n function endTransition(e) {\n if (!e || e.target === el) {\n done?.();\n el.removeEventListener(\"transitionend\", endTransition);\n el.removeEventListener(\"animationend\", endTransition);\n el.classList.remove(...classes.exitActive);\n el.classList.remove(...classes.exitTo);\n onAfterExit?.(el);\n }\n }\n}\nvar TRANSITION_MODE_MAP = {\n inout: \"in-out\",\n outin: \"out-in\"\n};\nvar Transition = (props) => {\n const classnames = createClassnames(props);\n return createSwitchTransition(\n resolveFirst(() => props.children),\n {\n mode: TRANSITION_MODE_MAP[props.mode],\n appear: props.appear,\n onEnter(el, done) {\n enterTransition(classnames(), props, el, done);\n },\n onExit(el, done) {\n exitTransition(classnames(), props, el, done);\n }\n }\n );\n};\n\nlet wasm;\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n heap[idx] = obj;\n return idx;\n}\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for (let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches && builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\nfunction dropObject(idx) {\n if (idx < 132) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\nfunction getArrayU32FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);\n}\nlet cachedDataViewMemory0 = null;\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return decodeText(ptr, len);\n}\nlet cachedUint32ArrayMemory0 = null;\nfunction getUint32ArrayMemory0() {\n if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) {\n cachedUint32ArrayMemory0 = new Uint32Array(wasm.memory.buffer);\n }\n return cachedUint32ArrayMemory0;\n}\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\nfunction getObject(idx) {\n return heap[idx];\n}\nlet heap = new Array(128).fill(undefined);\nheap.push(undefined, null, true, false);\nlet heap_next = heap.length;\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n const mem = getUint8ArrayMemory0();\n let offset = 0;\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\nlet cachedTextDecoder = new TextDecoder('utf-8', {\n ignoreBOM: true,\n fatal: true\n});\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', {\n ignoreBOM: true,\n fatal: true\n });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\nconst cachedTextEncoder = new TextEncoder();\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n}\nlet WASM_VECTOR_LEN = 0;\nconst VtFinalization = typeof FinalizationRegistry === 'undefined' ? {\n register: () => {},\n unregister: () => {}\n} : new FinalizationRegistry(ptr => wasm.__wbg_vt_free(ptr >>> 0, 1));\nlet Vt$1 = class Vt {\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(Vt.prototype);\n obj.__wbg_ptr = ptr;\n VtFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n VtFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_vt_free(ptr, 0);\n }\n /**\n * @param {string} s\n * @returns {any}\n */\n feed(s) {\n const ptr0 = passStringToWasm0(s, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.vt_feed(this.__wbg_ptr, ptr0, len0);\n return takeObject(ret);\n }\n /**\n * @param {number} cols\n * @param {number} rows\n * @returns {any}\n */\n resize(cols, rows) {\n const ret = wasm.vt_resize(this.__wbg_ptr, cols, rows);\n return takeObject(ret);\n }\n /**\n * @returns {Uint32Array}\n */\n getSize() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.vt_getSize(retptr, this.__wbg_ptr);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var v1 = getArrayU32FromWasm0(r0, r1).slice();\n wasm.__wbindgen_export3(r0, r1 * 4, 4);\n return v1;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {number} row\n * @param {boolean} cursor_on\n * @returns {any}\n */\n getLine(row, cursor_on) {\n const ret = wasm.vt_getLine(this.__wbg_ptr, row, cursor_on);\n return takeObject(ret);\n }\n /**\n * @returns {any}\n */\n getCursor() {\n const ret = wasm.vt_getCursor(this.__wbg_ptr);\n return takeObject(ret);\n }\n};\nif (Symbol.dispose) Vt$1.prototype[Symbol.dispose] = Vt$1.prototype.free;\n\n/**\n * @param {number} cols\n * @param {number} rows\n * @param {number} scrollback_limit\n * @param {boolean} bold_is_bright\n * @returns {Vt}\n */\nfunction create(cols, rows, scrollback_limit, bold_is_bright) {\n const ret = wasm.create(cols, rows, scrollback_limit, bold_is_bright);\n return Vt$1.__wrap(ret);\n}\nconst EXPECTED_RESPONSE_TYPES = new Set(['basic', 'cors', 'default']);\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = module.ok && EXPECTED_RESPONSE_TYPES.has(module.type);\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n } else {\n throw e;\n }\n }\n }\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n if (instance instanceof WebAssembly.Instance) {\n return {\n instance,\n module\n };\n } else {\n return instance;\n }\n }\n}\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbg___wbindgen_debug_string_adfb662ae34724b6 = function (arg0, arg1) {\n const ret = debugString(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg___wbindgen_throw_dd24417ed36fc46e = function (arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n imports.wbg.__wbg_new_13317ed16189158e = function () {\n const ret = new Array();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_4ceb6a766bf78b04 = function () {\n const ret = new Object();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_set_3f1d0b984ed272ed = function (arg0, arg1, arg2) {\n getObject(arg0)[takeObject(arg1)] = takeObject(arg2);\n };\n imports.wbg.__wbg_set_8b6a9a61e98a8881 = function (arg0, arg1, arg2) {\n getObject(arg0)[arg1 >>> 0] = takeObject(arg2);\n };\n imports.wbg.__wbindgen_cast_2241b6af4c4b2941 = function (arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_cast_4625c577ab2ec9ee = function (arg0) {\n // Cast intrinsic for `U64 -> Externref`.\n const ret = BigInt.asUintN(64, arg0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_cast_d6cd19b81560fd6e = function (arg0) {\n // Cast intrinsic for `F64 -> Externref`.\n const ret = arg0;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_object_clone_ref = function (arg0) {\n const ret = getObject(arg0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_object_drop_ref = function (arg0) {\n takeObject(arg0);\n };\n return imports;\n}\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedDataViewMemory0 = null;\n cachedUint32ArrayMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n return wasm;\n}\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n if (typeof module !== 'undefined') {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({\n module\n } = module);\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead');\n }\n }\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n if (typeof module_or_path !== 'undefined') {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({\n module_or_path\n } = module_or_path);\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead');\n }\n }\n const imports = __wbg_get_imports();\n if (typeof module_or_path === 'string' || typeof Request === 'function' && module_or_path instanceof Request || typeof URL === 'function' && module_or_path instanceof URL) {\n module_or_path = fetch(module_or_path);\n }\n const {\n instance,\n module\n } = await __wbg_load(await module_or_path, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nvar exports$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Vt: Vt$1,\n create: create,\n default: __wbg_init,\n initSync: initSync\n});\n\nconst base64codes = [62,0,0,0,63,52,53,54,55,56,57,58,59,60,61,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,0,0,0,0,0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];\n\n function getBase64Code(charCode) {\n return base64codes[charCode - 43];\n }\n\n function base64Decode(str) {\n let missingOctets = str.endsWith(\"==\") ? 2 : str.endsWith(\"=\") ? 1 : 0;\n let n = str.length;\n let result = new Uint8Array(3 * (n / 4));\n let buffer;\n\n for (let i = 0, j = 0; i < n; i += 4, j += 3) {\n buffer =\n getBase64Code(str.charCodeAt(i)) << 18 |\n getBase64Code(str.charCodeAt(i + 1)) << 12 |\n getBase64Code(str.charCodeAt(i + 2)) << 6 |\n getBase64Code(str.charCodeAt(i + 3));\n result[j] = buffer >> 16;\n result[j + 1] = (buffer >> 8) & 0xFF;\n result[j + 2] = buffer & 0xFF;\n }\n\n return result.subarray(0, result.length - missingOctets);\n }\n\n var vtWasmModule = base64Decode(\"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ACABLwEIOwECDCQLIABBAToAACAAIAEvAQg7AQIMIwsgAEECOgAAIAAgAS8BCDsBAgwiCyAAQQo6AAAgACABLwEIOwECDCELIABBIjoAACAAIAEvAQg7AQIMIAsgAEEvOgAAIAAgAS8BCDsBAgwfCyAAQTA6AAAgACABLwEIOwECDB4LIABBCzoAACAAIAEvARg7AQQgACABLwEIOwECDB0LIAEvAQgOBBQTExUTCyADIAQgASgChARBhNzAABBtIANBQGsiASADKAIAIgIgAiADKAIEQQR0ahAmIANBO2ogAUEIaigCADYAACADIAMpAkA3ADMgAEErOgAAIAAgAykAMDcAASAAQQhqIANBN2opAAA3AAAMGwsgA0EIaiAEIAEoAoQEQZTcwAAQbSADQUBrIgEgAygCCCICIAIgAygCDEEEdGoQJiADQTtqIAFBCGooAgA2AAAgAyADKQJANwAzIABBJToAACAAIAMpADA3AAEgAEEIaiADQTdqKQAANwAADBoLIANBGGogBCABKAKEBEGk3MAAEG0gAyADKQMYNwJMIANB1gBqIANBzABqEAsCfyADLQBWQRJGBEBBACEBQQAhBEEBDAELIANBEGpBBEEBQQVBlMjAABBXIANB2gBqLQAAIQEgAygCECECIAMoAhQiBCADKABWNgAAIARBBGogAToAACADQQE2AjggAyAENgI0IAMgAjYCMCADIAMpAkw3AkBBBSECQQEhAQNAIANB2wBqIANBQGsQCyADLQBbQRJGRQRAIAMoAjAgAUYEQCADQTBqIAFBAUEBQQUQZCADKAI0IQQLIAIgBGoiBSADKABbNgAAIAVBBGogA0HfAGotAAA6AAAgAyABQQFqIgE2AjggAkEFaiECDAELCyADKAIwIQQgAygCNAshAiAAIAE2AgwgACACNgIIIAAgBDYCBCAAQSk6AAAMGQsgAEETOgAAIAAgAS8BGDsBBCAAIAEvAQg7AQIMGAsgAEEnOgAADBcLIABBJjoAAAwWCyAAQTI6AAAMFQsgAEEXOwEADBQLIABBlwI7AQAMEwsgAEGXBDsBAAwSCyAAQZcGOwEADBELIABBMjoAAAwQCyAAQRg7AQAMDwsgAEGYAjsBAAwOCyAAQZgEOwEADA0LIABBMjoAAAwMCyAAQQc7AQAMCwsgAEGHAjsBAAwKCyAAQYcEOwEADAkLIABBMjoAAAwICyAAQS47AQAMBwsgAEGuAjsBAAwGCyABLwEIQQhGDQMgAEEyOgAADAULIAVBIUcNAyAAQRQ6AAAMBAsgBUE/Rw0CIANBIGogBCABKAKEBEG03MAAEG0gA0FAayIBIAMoAiAiAiACIAMoAiRBBHRqECcgA0E7aiABQQhqKAIANgAAIAMgAykCQDcAMyAAQRI6AAAgACADKQAwNwABIABBCGogA0E3aikAADcAAAwDCyAFQT9HDQEgA0EoaiAEIAEoAoQEQcTcwAAQbSADQUBrIgEgAygCKCICIAIgAygCLEEEdGoQJyADQTtqIAFBCGooAgA2AAAgAyADKQJANwAzIABBEDoAACAAIAMpADA3AAEgAEEIaiADQTdqKQAANwAADAILIABBMToAACAAIAEvARg7AQQgACABLwEoOwECDAELIABBMjoAAAsgA0HgAGokAAvaCwIPfwJ+IwBB0ABrIgIkACABQQRqIQwgAkFAayENIAJBJWohDiACQRxqIQ8gASgCJCEFIAEoAhQhECABKAIQIQMCQAJAAn8CQANAIAEoAgAhBiABQYCAgIB4NgIAIAEoAgQhCwJAAkACQAJAAkAgBkGAgICAeEcEQCABKQIIIREgCyEHDAELAkAgAyAQRgRAQYCAgIB4IQYMAQsgASADQRBqIgg2AhAgAykCCCERIAMoAgQhByADKAIAIQYgCCEDC0GAgICAeCALEJgBIAZBgICAgHhGDQELIAIgBzYCDCACIAY2AgggAiARNwIQIBFCIIghEkF/IAUgEaciBEcgBCAFSxtB/wFxDgICAwELQYCAgIB4IAcQmAEgAEGAgICAeDYCACABQYCAgIB4NgIADAcLAkAgEqdBAXENACAFIAQgByAEEDBrIgMgAyAFSRsiAyAESw0AIAIgAzYCECADIQQLAn9BgICAgHggBCAFTQ0AGgJAAkAgByAEIAVBuNrAABCGASgCBEUEQCACQThqIgMgAkEIaiIIIAVBAWsQOSACQTBqIANBCGooAgA2AgAgAiACKQI4NwMoIAItABQhBCADQRBqIAIoAgwgAigCECIHIAdBAWtB2NrAABCGASIHQRBqLwEAOwEAIAJCoICAgBA3AjggAiAHKQIINwJAIAggA0Ho2sAAEE4gAiAEOgA0IAItABRBAXFFDQEMAgsgAkE4aiIDIAJBCGogBRA5IAJBMGogA0EIaigCADYCACACIAIpAjg3AyggAiACLQAUIgM6ADQgAw0BCyACQShqEIEBCyACKAIwBEAgAkFAayACQTRqKAIANgIAIAJBAToAFCACIAIpAiw3AzggAigCKAwBCyACKAIoIAIoAixBFBCVAUGAgICAeAshA0GAgICAeCALEJgBIAEgAzYCACAMIAIpAzg3AgAgDEEIaiACQUBrKAIANgIAIABBCGogAkEQaikCADcCACAAIAIpAgg3AgAMBgsgACARNwIIIAAgBzYCBCAAIAY2AgAMBQsCQCADIBBHBEAgASADQRBqIgg2AhAgAygCACIGQYCAgIB4Rw0BCyACQQA7AEAgAkECOgA8IAJBAjoAOCACQQhqIgEgBSACQThqEDogACACKQIINwIAIAJBADoAFCAAQQhqIAFBCGopAgA3AgAMBQsgA0EMaigCACEJIA8gAykCBDcCACAPQQhqIAk2AgAgAiAGNgIYIAUgBGsiCUUNASASp0EBcUUEQCACQQA7AEAgAkECOgA8IAJBAjoAOCACQQhqIAUgAkE4ahA6DAILIAItACRFBEAgAkEYahCBAQsgAigCHCEDIAIoAiAiCiAJTQRAIAJBCGoiBCADIAoQdgJAIAItACQiBg0AIAJBADoAFCACKAIQIAVPDQAgAkEAOwBAIAJBAjoAPCACQQI6ADggBCAFIAJBOGoQOgsgAigCGCADQRQQlQEgBkUNBEGAgICAeCALEJgBIAFBCGogAkEQaikCADcCACABIAIpAgg3AgBBgICAgHggAhCYASAIIQMMAQsLIAMgCiAJQfjZwAAQhgEoAgRFBEAgDUEIaiAHIAQgBEEBa0GI2sAAEIYBIghBEGovAQA7AQAgDSAIKQIINwIAIAJCoICAgBA3AjggAkEIaiACQThqQZjawAAQTiAJQQFrIQkLIAkgCk0EQCACQQhqIAMgCRB2IAIoAhghBiADIAogCRB+IAZBgICAgHhGDQMgCiAKIAlrIgggCCAKSxshBCACLQAkDAILIAkgCkGo2sAAEKIBAAsgAkEqaiAOQQJqLQAAOgAAIAIgDi8AADsBKCACKAIgIQQgAigCHCEDIAItACQLIQhBgICAgHggCxCYASABIAg6AAwgASAENgIIIAEgAzYCBCABIAY2AgAgASACLwEoOwAN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AiAAEHogAiADEHogASgCGAVBgAELIAEoAgggASgCDBCXASABQSBqJAALpwEBAn8jAEEgayICJAAgAiAAKAJoNgIMIAJBADoAHCACIAAoAlQiAzYCECACIAMgACgCWEECdGo2AhQgAiACQQxqNgIYIAACfwJAAkADQCABQQFrIgEEQCACQRBqEEANAQwCCwsgAkEQahBAIgENAQsgACgCnAEiA0EBayIADAELIAAoApwBIgNBAWshACABKAIACyIBIAAgASADSRs2AmggAkEgaiQAC6MBAQF/IwBBQGoiAyQAIANBHGogABBVIAMoAhwiACABIAIQIyADQShqIABB4ABqKAIAIABB5ABqKAIAECAgA0EQaiAAECEgAyADKQMQNwI0IANBCGogAygCLCADKAIwEFIgAygCDCEAIAMoAghBAXEEQCADIAA2AjwgA0E8akHswsAAEDwACyADQShqEGwgAygCICADKAIkEKEBIANBQGskACAAC5kBAQN/IAFBbGwhAiABQf////8DcSEDIAAgAUEUbGohAUEAIQACQANAIAJFDQECQCABQRRrIgQoAgBBIEcNACABQRBrKAIAQQFHDQAgAUEMay0AAEECRw0AIAFBCGstAABBAkcNACABQQRrLQAADQAgAUEDay0AAEEfcQ0AIAJBFGohAiAAQQFqIQAgBCEBDAELCyAAIQMLIAMLoAEBA38jAEEQayIFJAAgBUEIaiAAIAEgAkHgzsAAEF8gBSgCDCIGIAMgAiABayIHIAMgB0kbIgNPBEAgBiADayIGIAUoAgggBkEEdGogAxATIAAgASABIANqIAQQKCABBEAgACABQQFrQfDOwAAQWkEAOgAMCyAAIAJBAWtBgM/AABBaQQA6AAwgBUEQaiQADwtBzMnAAEEhQfDJwAAQZwALiwEBAn8jAEEQayICJAAgAkKAgICAwAA3AgQgAkEANgIMIAFBCGsiA0EAIAEgA08bIgFBA3YgAUEHcUEAR2ohAUEIIQMDQCABBEAgAkEEaiADQaziwAAQcSABQQFrIQEgA0EIaiEDDAEFIAAgAikCBDcCACAAQQhqIAJBDGooAgA2AgAgAkEQaiQACwsLjQEBBH8gASAAKAIAIAAoAggiBGtLBEAgACAEIAFBAUEBEGQgACgCCCEECyAAKAIEIARqIQVBASABIAFBAU0bIgZB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dGo2AgALRAEBfyABKAIAIgIgASgCBEYEQCAAQYCAgIB4NgIADwsgASACQRBqNgIAIAAgAikCADcCACAAQQhqIAJBCGopAgA3AgALOwEDfwNAIAJBFEZFBEAgACACaiIDKAIAIQQgAyABIAJqIgMoAgA2AgAgAyAENgIAIAJBBGohAgwBCwsLOwEDfwNAIAJBJEZFBEAgACACaiIDKAIAIQQgAyABIAJqIgMoAgA2AgAgAyAENgIAIAJBBGohAgwBCwsLQAECfyAAKAIAIAAoAgRBBBCVASAAKAIMIQEgACgCECIAKAIAIgIEQCABIAIRAgALIAAoAgQiAARAIAEgABA7Cws6AQF/AkAgAkF/RwRAIAJBAWohBCACQSBJDQEgBEEgIAMQogEACyADEHMACyAAIAQ2AgQgACABNgIACzgAAkAgAWlBAUcNAEGAgICAeCABayAASQ0AIAAEQEH4qsEALQAAGiABIAAQFSIBRQ0BCyABDwsACy0BAX8gASAAKAIATwR/IAAoAgQhAiAALQAIRQRAIAEgAk0PCyABIAJJBUEACwtwAQN/IAAoAgAiBCAAKAIIIgVGBEAjAEEQayIDJAAgA0EIaiAAIARBAUECQQgQJCADKAIIIgRBgYCAgHhHBEAgAygCDBogBCACEJ0BAAsgA0EQaiQACyAAIAVBAWo2AgggACgCBCAFQQN0aiABNwEACzQBAX8gACgCCCIDIAAoAgBGBEAgACACEGILIAAgA0EBajYCCCAAKAIEIANBAnRqIAE2AgALLgEBfyMAQRBrIgIkACACQQhqIAEgABCCASACKAIIIgAEQCACQRBqJAAgAA8LAAs3AQF/IwBBIGsiASQAIAFBADYCGCABQQE2AgwgAUGM6cAANgIIIAFCBDcCECABQQhqIAAQgAEACyUAIABBgQJPBEAgAEEeIABnIgBrdiAAQQF0a0E8ag8LIABBBHYLKwAgAiADSQRAIAMgAiAEEKMBAAsgACACIANrNgIEIAAgASADQRRsajYCAAsvAQF/IAAgAhCEASAAKAIEIAAoAggiA0EUbGogASACQRRsEBQaIAAgAiADajYCCAsrACABIANLBEAgASADIAQQowEACyAAIAMgAWs2AgQgACACIAFBBHRqNgIACy8AAkACQCADaUEBRw0AQYCAgIB4IANrIAFJDQAgACABIAMgAhAiIgANAQsACyAACywAA0AgAQRAIAAoAgAgAEEEaigCAEEUEJUBIAFBAWshASAAQRBqIQAMAQsLCzIBAX8gACgCCCECIAEgACgCAEECai0AABCRASEBIAAoAgQgAiABEAEgACACQQFqNgIICyoAIAAgACgCaCABaiIBIAAoApwBIgBBAWsgACABSxtBACABQQBOGzYCaAszAQJ/IAAgACgCqAEiAiAAKAKsAUEBaiIDIAEgAEGyAWoQMSAAKAJgIAAoAmQgAiADEEoLMwECfyAAIAAoAqgBIgIgACgCrAFBAWoiAyABIABBsgFqEBogACgCYCAAKAJkIAIgAxBKCyoAIAEgAkkEQEGkyMAAQSNBvMnAABBnAAsgAiAAIAJBFGxqIAEgAmsQFws1ACAAIAApAnQ3AmggACAAKQF8NwGyASAAIAAvAYYBOwG+ASAAQboBaiAAQYQBai8BADsBAAvsAQICfwF+IwBBEGsiAiQAIAJBATsBDCACIAE2AgggAiAANgIEIwBBEGsiASQAIAJBBGoiACkCACEEIAEgADYCDCABIAQ3AgQjAEEQayIAJAAgAUEEaiIBKAIAIgIoAgwhAwJAAkACQAJAIAIoAgQOAgABAgsgAw0BQQEhAkEAIQMMAgsgAw0AIAIoAgAiAigCBCEDIAIoAgAhAgwBCyAAQYCAgIB4NgIAIAAgATYCDCABKAIIIgEtAAkaIABBFSABLQAIEEEACyAAIAM2AgQgACACNgIAIAEoAggiAS0ACRogAEEWIAEtAAgQQQALKwECfwJAIAAoAgQgACgCCCIBEDAiAkUNACABIAJJDQAgACABIAJrNgIICwsmACACBEBB+KrBAC0AABogASACEBUhAQsgACACNgIEIAAgATYCAAsjAQF/IAEgACgCACAAKAIIIgJrSwRAIAAgAiABQQRBEBBkCwsjAQF/IAEgACgCACAAKAIIIgJrSwRAIAAgAiABQQRBFBBkCwslACAAQQE2AgQgACABKAIEIAEoAgBrQQR2IgE2AgggACABNgIACxsAIAEgAk0EQCACIAEgAxBCAAsgACACQRRsagsgACABIAJNBEAgAiABQeTjwAAQQgALIAAgAmpBAToAAAsbACABIAJNBEAgAiABIAMQQgALIAAgAkEEdGoLAwAACwMAAAsDAAALAwAACwMAAAsDAAALGgBB+KrBAC0AABpBBCAAEBUiAARAIAAPCwALAwAACxYAIAFBAXFFBEAgALgQBw8LIACtEAgLRAEBfyAAIAAoAgBBAWsiATYCACABRQRAIABBDGoQRwJAIABBf0YNACAAIAAoAgRBAWsiATYCBCABDQAgAEGcBhA7CwsLHgEBfyAAKAIQIgEgACgCFBB5IAAoAgwgAUEQEJUBCx4BAX8gACgCBCIBIAAoAggQeSAAKAIAIAFBEBCVAQsQACAABEAgASAAIAJsEDsLCxYAIABBEGoQTyAAKAIAIAAoAgQQmAELFAAgACAAKAIAQQFrNgIAIAEQkgELFwAgAEGAgICAeEcEQCAAIAFBFBCVAQsLEwAgAARADwtBpKnBAEEbEKgBAAsPACAAQYQBTwRAIAAQAgsLDQAgAQRAIAAgARA7CwsNACABBEAgACABEDsLCzwAIABFBEAjAEEgayIAJAAgAEEANgIYIABBATYCDCAAQdDEwAA2AgggAEIENwIQIABBCGogARCAAQALAAsRACAAKAIIIAAoAgBBAhCVAQsUACAAQQA2AgggAEKAgICAEDcCAAsSACAAIAFBkM3AABBaQQE6AAwLDgAgAEEANgIAIAEQkgELawEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQejpwAA2AgggA0ICNwIUIAMgA0EEaq1CgICAgIABhDcDKCADIAOtQoCAgICAAYQ3AyAgAyADQSBqNgIQIANBCGogAhCAAQALawEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQcjpwAA2AgggA0ICNwIUIAMgA0EEaq1CgICAgIABhDcDKCADIAOtQoCAgICAAYQ3AyAgAyADQSBqNgIQIANBCGogAhCAAQALawEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQZzqwAA2AgggA0ICNwIUIAMgA0EEaq1CgICAgIABhDcDKCADIAOtQoCAgICAAYQ3AyAgAyADQSBqNgIQIANBCGogAhCAAQALDgBB8OXAAEErIAAQZwALCwAgACMAaiQAIwALDgBBv6nBAEHPABCoAQALCQAgACABEAYACwwAIAAgASkCADcDAAsKACAAKAIAEJoBCw0AIABBgICAgHg2AgALCQAgAEEANgIACwYAIAAQTwsL0m0gAEGAgMAAC0AXAAAABAAAAAQAAAAYAAAAY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZUVycm9yAEG/icAACwF4AEHgicAACxD/////////////////////AEGGisAACw8BAAAAAAAgAAAAAAAAAAIAQcCKwAALIP//////////////////////////////////////////AEGki8AACwgQAAAAAAAAAQBBwLjAAAsC/wcAQdS4wAALBw8A////9f8AQYC5wAALFv///////////////////////////wMAQaC5wAALHf////////////////////////////////////8PAEH/ucAACxj8//////////////////////////////8AQaC6wAALPv//////////////////////////////////////////////////////////////////////////////////AEGMu8AACzj/////////////////////////////////////////////////////////////////////////fwBB4LvAAAvRAf////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8DAEHAvcAACyf//////////////////////////////////////////////////w8AQcDAwAALwSNzcmMvbGliLnJzAAABAA8A8BoPAAAAAADiJQAA5SUAAAAAAACw4AAAv+AAAAAAAAA8+wEAafsBAAAAAABq+wEAbPsBAAAAAACAJQAAnyUAAAAAAAAA+wEAO/sBAAAAAABhdHRlbXB0ZWQgdG8gdGFrZSBvd25lcnNoaXAgb2YgUnVzdCB2YWx1ZSB3aGlsZSBpdCB3YXMgYm9ycm93ZWRiZ3RleHRjb2RlcG9pbnRzcmFzdGVyX3N5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VVVVVRVRVVVVVVVVVQAAAAAAAEBVVVVVVVVVVVXVV1VVVVVVVVVVVVVVBQAAVFVVVVVVVVVVVVVVVVUVAABVVVFVVVVVVQUQAAABAVBVVVVVVVVVVVVVAVVVVVVV/////39VVVVQVQAAVVVVVVVVVVVVVQUAQcD8wAALmARAVVVVVVVVVVVVVVVVVUVUAQBUUQEAVVUFVVVVVVVVVVFVVVVVVVVVVVVVVVVVVUQBVFVRVRVVVQVVVVVVVVVFQVVVVVVVVVVVVVVVVVVVVEEVFFBRVVVVVVVVVVBRVVVBVVVVVVVVVVVVVVVVVVVUARBUUVVVVVUFVVVVVVUFAFFVVVVVVVVVVVVVVVVVVQQBVFVRVQFVVQVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVRVRVVVFVFVVVVVVVVVVVVVVUVFVVVVVVVVVVVVVVVVUEVAUEUFVBVVUFVVVVVVVVVVFVVVVVVVVVVVVVVVVVVRREBQRQVUFVVQVVVVVVVVVVUFVVVVVVVVVVVVVVVVUVRAFUVUFVFVVVBVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVFFQVEVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVEAQFVVFQBAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUQAAVFVVAEBVVVVVVVVVVVVVVVVVVVVVVVVQVVVVVVVVEVFVVVVVVVVVVVVVVVVVAQAAQAAEVQEAAAEAAAAAAAAAAFRVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUBBABBQVVVVVVVVVAFVFVVVQFUVVVFQVVRVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgBBgIHBAAuQA1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAVVVVVVVVVVVVVVVVQVUVVVVVVVVBVVVVVVVVVUFVVVVVVVVVQVVVVV///33//3XX3fW1ddVEABQVUUBAABVV1FVVVVVVVVVVVVVFQBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUFVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAVVFVFVQFVVVVVVVVVVVVVVVVVVVVVVVVVVVVXFRRVVVVVVVVVVVVVVVVVVUUAQEQBAFQVAAAUVVVVVVVVVVVVVVVVAAAAAAAAAEBVVVVVVVVVVVVVVVUAVVVVVVVVVVVVVVVVAABQBVVVVVVVVVVVVRUAAFVVVVBVVVVVVVVVBVAQUFVVVVVVVVVVVVVVVVVFUBFQVVVVVVVVVVVVVVVVVVUAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAAAAAEAFRRVVRQVVVVVVVVVVVVVVVVVVVVVVUAQaCEwQALkwhVVRUAVVVVVVVVBUBVVVVVVVVVVVVVVVUAAAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAAAAAAAAAABUVVVVVVVVVVVV9VVVVWlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf1X11VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV9VVVVVVVfVVVVVVVVVVVVVVVV////VVVVVVVVVVVVVdVVVVVV1VVVVV1V9VVVVVV9VV9VdVVXVVVVVXVV9V11XVVd9VVVVVVVVVVXVVVVVVVVVVV31d9VVVVVVVVVVVVVVVVVVVX9VVVVVVVVV1VV1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVXVV1VVVVVVVVVVVVVVVVddVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVQVVVVVVVVVVVVVVVVVVVV/f///////////////19V1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAAAAAAAAAAKqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVVVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpaVVVVVVVVqqqqqqqqqqqqqqqqqqoKAKqqqmqpqqqqqqqqqqqqqqqqqqqqqqqqqqpqgaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVqaqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqKqqqqqqqqqqqmqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVVZWqqqqqqqqqqqqqqmqqqqqqqqqqqqqqVVWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVVVVVVVVVVVVVVVVVVVVVaqqqlaqqqqqqqqqqqqqqqqqalVVVVVVVVVVVVVVVVVfVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFUAAAFBVVVVVVVVVBVVVVVVVVVVVVVVVVVVVVVVVVVVVUFVVVUVFFVVVVVVVVUFVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQVVVVVVVVAAAAAFBVRRVVVVVVVVVVVVUFAFBVVVVVVRUAAFBVVVWqqqqqqqqqVkBVVVVVVVVVVVVVVRUFUFBVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVQFAQUFVVRVVVVRVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVUEFFQFUVVVVVVVVVVVVVVQVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVFFVVVVVqqqqqqqqqqqqVVVVAAAAAABAFQBBv4zBAAvhDFVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQAAAPCqqlpVAAAAAKqqqqqqqqqqaqqqqqpqqlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRWpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpWVVVVVVVVVVVVVVVVVVUFVFVVVVVVVVVVVVVVVVVVVapqVVUAAFRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBUBVAUFVAFVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQVVVVVVVVdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVRVVVVVVVVVVVVVVVVVVVVVVVVVAVVVVVVVVVVVVVVVVVVVVVVVBQAAVFVVVVVVVVVVVVVVBVBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVQAAAEBVVVVVVVVVVVVVFFRVFVBVVVVVVVVVVVVVVRVAQVVFVVVVVVVVVVVVVVVVVVVVQFVVVVVVVVVVFQABAFRVVVVVVVVVVVVVVVVVVRVVVVVQVVVVVVVVVVVVVVVVBQBABVUBFFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVAEVUVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVFQBAVVVVVVVQVVVVVVVVVVVVVVVVVRVEVFVVVVUVVVVVBQBUAFRVVVVVVVVVVVVVVVVVVVVVAAAFRFVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVVFABEEQRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRUFUFUQVFVVVVVVVVBVVVVVVVVVVVVVVVVVVVVVVVVVVRUAQBFUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVRABBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAQUQAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFQAAQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFUVBBFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUABVVUVVVVVVVVVQEAQFVVVVVVVVVVVRUABEBVFVVVAUABVVVVVVVVVVVVVQAAAABAUFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAQAAQVVVVVVVVVVVVVVVVVVVVVVVVVVUFAAAAAAAFAARBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAUBFEAAAVVVVVVVVVVVVVVVVVVVVVVVVUBFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVFVVQFVVVVVVVVVVVVVVVQVAVURVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBUAAABQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAVFVVVVVVVVVVVVVVVVVVAEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVRVAVVVVVVVVVVVVVVVVVVVVVVVVVapUVVVaVVVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVVWqqqqqqqqqqqqqqqqqqqqqqqqqqqpaVVVVVVVVVVVVVaqqVlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqpqmmqqqqqqqqqqmpVVVVlVVVVVVVVVWpZVVVVqlVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVVVVVVVVVVUEAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAQauZwQALdVAAAAAAAEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVURUAUAAAAAQAEAVVVVVVVVVQVQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBVRVVVVVVVVVVVVVVVVVVQBBrZrBAAsCQBUAQbuawQALxQZUVVFVVVVUVVVVVRUAAQAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVAEAAAAAAFAAQBEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVQBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQBAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAEBVVVVVVVVVVVVVVVVVVVdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV1VVVVVVVVVVVVVVVVVVVVXX9/39VVVVVVVVVVVVVVVVVVVVVVVX1////////blVVVaqquqqqqqrq+r+/VaqqVlVfVVVVqlpVVVVVVVX//////////1dVVf3/3///////////////////////9///////VVVV/////////////3/V/1VVVf////9XV///////////////////////f/f/////////////////////////////////////////////////////////////1////////////////////19VVdV/////////VVVVVXVVVVVVVVV9VVVVV1VVVVVVVVVVVVVVVVVVVVVVVVVV1f///////////////////////////1VVVVVVVVVVVVVVVf//////////////////////X1VXf/1V/1VV1VdV//9XVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV////VVdVVVVVVVX//////////////3///9//////////////////////////////////////////////////////////////VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf///1f//1dV///////////////f/19V9f///1X//1dV//9XVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpaVVVVVVVVVVVZllVhqqVZqlVVVVVVlVVVVVVVVVWVVVUAQY6hwQALAQMAQZyhwQALiQlVVVVVVZVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRUAlmpaWmqqBUCmWZVlVVVVVVVVVVUAAAAAVVZVValWVVVVVVVVVVVVVlVVVVVVVVVVAAAAAAAAAABUVVVVlVlZVVVlVVVpVVVVVVVVVVVVVVWVVpVqqqqqVaqqWlVVVVlVqqqqVVVVVWVVVVpVVVVVpWVWVVVVlVVVVVVVVaaWmpZZWWWplqqqZlWqVVpZVVpWZVVVVWqqpaVaVVVVpapaVVVZWVVVWVVVVVVVlVVVVVVVVVVVVVVVVVVVVVVVVVVVZVX1VVVVaVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVaqqqqqqqqqqqlVVVaqqqqqlWlVVmqpaVaWlVVpapZalWlVVVaVaVZVVVVV9VWlZpVVfVWZVVVVVVVVVVWZV////VVVVmppqmlVVVdVVVVVV1VVVpV1V9VVVVVW9Va+quqqrqqqaVbqq+q66rlVd9VVVVVVVVVVXVVVVVVlVVVV31d9VVVVVVVVVpaqqVVVVVVVV1VdVVVVVVVVVVVVVVVVXrVpVVVVVVVVVVVWqqqqqqqqqaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgAAAMCqqlpVAAAAAKqqqqqqqqqqaqqqqqpqqlVVVVVVVVVVVVVVVQVUVVVVVVVVVVVVVVVVVVVVqmpVVQAAVFmqqmpVqqqqqqqqqlqqqqqqqqqqqqqqqqqqqlpVqqqqqqqqqrr+/7+qqqqqVlVVVVVVVVVVVVVVVVX1////////L25peC9zdG9yZS8yOGh5emZsMzM4a3M0YW1oYTd2cHBubGJxMXMxbnFhdi1ydXN0LWRlZmF1bHQtMS44NS4wL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi93YXNtLWJpbmRnZW4tMC4yLjEwNi9zcmMvY29udmVydC9zbGljZXMucnMvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi93YXNtLWJpbmRnZW4tMC4yLjEwNi9zcmMvZXh0ZXJucmVmLnJzHVQQAGcAAAB/AAAAEQAAAB1UEABnAAAAjAAAABEAAABudWxsIHBvaW50ZXIgcGFzc2VkIHRvIHJ1c3RyZWN1cnNpdmUgdXNlIG9mIGFuIG9iamVjdCBkZXRlY3RlZCB3aGljaCB3b3VsZCBsZWFkIHRvIHVuc2FmZSBhbGlhc2luZyBpbiBydXN0SnNWYWx1ZSgpAA5VEAAIAAAAFlUQAAEAQaiqwQALAQQASAlwcm9kdWNlcnMBDHByb2Nlc3NlZC1ieQIGd2FscnVzBjAuMjQuNAx3YXNtLWJpbmRnZW4TMC4yLjEwNiAoMTE4MzFmYjg5KQ==\");\n\nasync function init(options) {\n await __wbg_init({\n module_or_path: await options.module,\n memory: options.memory,\n });\n return exports$1;\n }\n\nconst vt = init({\n module: vtWasmModule\n}); // trigger async loading of wasm\nconst memory = vt.then(wasm => wasm.default()).then(d => d.memory);\nclass Vt {\n static async build(cols, rows, boldIsBright, logger) {\n return new Vt(await vt, await memory, logger, cols, rows, boldIsBright);\n }\n constructor(wasm, memory, logger, cols, rows, boldIsBright) {\n this.wasm = wasm;\n this.memory = memory;\n this.logger = logger;\n this.cols = cols;\n this.rows = rows;\n this.boldIsBright = boldIsBright;\n this.vt = wasm.create(cols, rows, 100, boldIsBright);\n }\n feed(data) {\n return this.vt.feed(data);\n }\n reset(cols, rows, init = undefined) {\n this.logger.debug(`vt: reset (${cols}x${rows})`);\n this.vt = this.wasm.create(cols, rows, 100, this.boldIsBright);\n this.cols = cols;\n this.rows = rows;\n if (init !== undefined && init !== \"\") {\n this.vt.feed(init);\n }\n return Array.from({\n length: rows\n }, (_, i) => i);\n }\n resize(cols, rows) {\n if (cols === this.cols && rows === this.rows) return;\n this.logger.debug(`vt: resize (${cols}x${rows})`);\n const changedRows = this.vt.resize(cols, rows);\n this.cols = cols;\n this.rows = rows;\n return changedRows;\n }\n getLine(n, cursorOn) {\n return this.vt.getLine(n, cursorOn);\n }\n getDataView([ptr, len], size) {\n return new DataView(this.memory.buffer, ptr, len * size);\n }\n getUint32Array([ptr, len]) {\n return new Uint32Array(this.memory.buffer, ptr, len);\n }\n getCursor() {\n const cursor = this.vt.getCursor();\n if (cursor) {\n return {\n col: cursor[0],\n row: cursor[1],\n visible: true\n };\n }\n return {\n col: 0,\n row: 0,\n visible: false\n };\n }\n}\n\nconst _tmpl$$f = /*#__PURE__*/template(`<div class=\"ap-term\"><canvas></canvas><svg class=\"ap-term-symbols\" xmlns=\"http://www.w3.org/2000/svg\" preserveAspectRatio=\"none\" width=\"100%\" height=\"100%\" aria-hidden=\"true\"><defs></defs><g></g></svg><pre class=\"ap-term-text\" aria-live=\"off\" tabindex=\"0\"></pre></div>`, 12);\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\nconst BLOCK_H_RES = 8;\nconst BLOCK_V_RES = 24;\nconst BOLD_MASK = 1;\nconst FAINT_MASK = 1 << 1;\nconst ITALIC_MASK = 1 << 2;\nconst UNDERLINE_MASK = 1 << 3;\nconst STRIKETHROUGH_MASK = 1 << 4;\nconst BLINK_MASK = 1 << 5;\nvar Terminal = props => {\n const core = props.core;\n const textRowPool = [];\n const vectorSymbolRowPool = [];\n const vectorSymbolUsePool = [];\n const vectorSymbolDefCache = new Set();\n const colorsCache = new Map();\n const attrClassCache = new Map();\n const vtReady = Vt.build(props.cols, props.rows, props.boldIsBright, props.logger);\n let vt;\n const [size, setSize] = createSignal({\n cols: props.cols,\n rows: props.rows\n }, {\n equals: (newVal, oldVal) => newVal.cols === oldVal.cols && newVal.rows === oldVal.rows\n });\n const [theme, setTheme] = createSignal(buildTheme(FALLBACK_THEME, props.adaptivePalette));\n const lineHeight = () => props.lineHeight ?? 1.3333333333;\n const [blinkOn, setBlinkOn] = createSignal(true);\n const cursorOn = createMemo(() => {\n if (props.cursorMode === \"hidden\") return false;\n if (props.cursorMode === \"steady\") return true;\n return blinkOn() || cursorHold;\n });\n const style$1 = createMemo(() => {\n return {\n width: `${size().cols}ch`,\n height: `${lineHeight() * size().rows}em`,\n \"font-size\": `${(props.scale || 1.0) * 100}%`,\n \"--term-line-height\": `${lineHeight()}em`,\n \"--term-cols\": size().cols,\n \"--term-rows\": size().rows\n };\n });\n let cursor = {\n col: 0,\n row: 0,\n visible: false\n };\n let pendingChanges = {\n size: undefined,\n theme: undefined,\n rows: new Set()\n };\n let el;\n let canvasEl;\n let canvasCtx;\n let textEl;\n let vectorSymbolsEl;\n let vectorSymbolDefsEl;\n let vectorSymbolRowsEl;\n let frameRequestId;\n let blinkIntervalId;\n let cssTheme;\n let cursorHold = false;\n onMount(() => {\n setupCanvas();\n setInitialTheme();\n adjustTextRowNodeCount(size().rows);\n adjustSymbolRowNodeCount(size().rows);\n vtReady.then(vt_ => {\n vt = vt_;\n core.addEventListener(\"reset\", onVtReset);\n core.addEventListener(\"resize\", onVtResize);\n core.addEventListener(\"output\", onVtOutput);\n props.onReady?.();\n });\n });\n onCleanup(() => {\n core.removeEventListener(\"reset\", onVtReset);\n core.removeEventListener(\"resize\", onVtResize);\n core.removeEventListener(\"output\", onVtOutput);\n clearInterval(blinkIntervalId);\n cancelAnimationFrame(frameRequestId);\n });\n createEffect(() => {\n if (props.blinking && blinkIntervalId === undefined) {\n blinkIntervalId = setInterval(toggleBlink, 600);\n } else {\n clearInterval(blinkIntervalId);\n blinkIntervalId = undefined;\n setBlinkOn(true);\n }\n });\n createEffect(() => {\n cursorOn();\n if (cursor.visible) {\n pendingChanges.rows.add(cursor.row);\n scheduleRender();\n }\n });\n function setupCanvas() {\n canvasCtx = canvasEl.getContext(\"2d\");\n if (!canvasCtx) throw new Error(\"2D ctx not available\");\n const {\n cols,\n rows\n } = size();\n canvasEl.width = cols * BLOCK_H_RES;\n canvasEl.height = rows * BLOCK_V_RES;\n canvasEl.style.imageRendering = \"pixelated\";\n canvasCtx.imageSmoothingEnabled = false;\n }\n function resizeCanvas({\n cols,\n rows\n }) {\n canvasEl.width = cols * BLOCK_H_RES;\n canvasEl.height = rows * BLOCK_V_RES;\n canvasCtx.imageSmoothingEnabled = false;\n }\n function setInitialTheme() {\n cssTheme = getCssTheme(el);\n pendingChanges.theme = cssTheme;\n }\n function onVtReset({\n size,\n theme,\n init\n }) {\n const changedRows = vt.reset(size.cols, size.rows, init);\n onVtUpdate({\n size,\n theme,\n changedRows\n });\n }\n function onVtResize(size) {\n const changedRows = vt.resize(size.cols, size.rows);\n if (changedRows === undefined) return;\n onVtUpdate({\n size,\n changedRows\n });\n }\n function onVtOutput(data) {\n let changedRows;\n if (Array.isArray(data)) {\n changedRows = new Set();\n for (const d of data) {\n for (const row of vt.feed(d)) {\n changedRows.add(row);\n }\n }\n } else {\n changedRows = vt.feed(data);\n }\n onVtUpdate({\n changedRows\n });\n }\n function onVtUpdate({\n size: newSize,\n theme,\n changedRows\n }) {\n let activity = false;\n if (changedRows !== undefined) {\n for (const row of changedRows) {\n pendingChanges.rows.add(row);\n cursorHold = true;\n activity = true;\n }\n }\n if (theme !== undefined && props.preferEmbeddedTheme) {\n pendingChanges.theme = theme;\n for (let row = 0; row < size().rows; row++) {\n pendingChanges.rows.add(row);\n }\n }\n const newCursor = vt.getCursor();\n if (newCursor.visible != cursor.visible || newCursor.col != cursor.col || newCursor.row != cursor.row) {\n if (cursor.visible) {\n pendingChanges.rows.add(cursor.row);\n }\n if (newCursor.visible) {\n pendingChanges.rows.add(newCursor.row);\n }\n cursor = newCursor;\n cursorHold = true;\n activity = true;\n }\n if (newSize !== undefined) {\n pendingChanges.size = newSize;\n for (const row of pendingChanges.rows) {\n if (row >= newSize.rows) {\n pendingChanges.rows.delete(row);\n }\n }\n }\n if (activity && cursor.visible) {\n pendingChanges.rows.add(cursor.row);\n }\n scheduleRender();\n }\n function toggleBlink() {\n setBlinkOn(blink => {\n if (!blink) cursorHold = false;\n return !blink;\n });\n }\n function scheduleRender() {\n if (frameRequestId === undefined) {\n frameRequestId = requestAnimationFrame(render);\n }\n }\n function render() {\n frameRequestId = undefined;\n const {\n size: newSize,\n theme: newTheme,\n rows\n } = pendingChanges;\n batch(function () {\n if (newSize !== undefined) {\n resizeCanvas(newSize);\n adjustTextRowNodeCount(newSize.rows);\n adjustSymbolRowNodeCount(newSize.rows);\n setSize(newSize);\n }\n if (newTheme !== undefined) {\n if (newTheme === null) {\n setTheme(buildTheme(cssTheme, props.adaptivePalette));\n } else {\n setTheme(buildTheme(newTheme, props.adaptivePalette));\n }\n colorsCache.clear();\n }\n const theme_ = theme();\n const cursorOn_ = cursorOn();\n for (const r of rows) {\n renderRow(r, theme_, cursorOn_);\n }\n });\n pendingChanges.size = undefined;\n pendingChanges.theme = undefined;\n pendingChanges.rows.clear();\n props.stats.renders += 1;\n }\n function renderRow(rowIndex, theme, cursorOn) {\n const line = vt.getLine(rowIndex, cursorOn);\n clearCanvasRow(rowIndex);\n renderRowBg(rowIndex, line.bg, theme);\n renderRowRasterSymbols(rowIndex, line.raster_symbols, theme);\n renderRowVectorSymbols(rowIndex, line.vector_symbols, theme);\n renderRowText(rowIndex, line.text, line.codepoints, theme);\n }\n function clearCanvasRow(rowIndex) {\n canvasCtx.clearRect(0, rowIndex * BLOCK_V_RES, size().cols * BLOCK_H_RES, BLOCK_V_RES);\n }\n function renderRowBg(rowIndex, spans, theme) {\n // The memory layout of a BgSpan must follow one defined in lib.rs (see the assertions at the bottom)\n const view = vt.getDataView(spans, 8);\n const y = rowIndex * BLOCK_V_RES;\n let i = 0;\n while (i < view.byteLength) {\n const column = view.getUint16(i + 0, true);\n const width = view.getUint16(i + 2, true);\n const color = getColor(view, i + 4, theme);\n i += 8;\n canvasCtx.fillStyle = color;\n canvasCtx.fillRect(column * BLOCK_H_RES, y, width * BLOCK_H_RES, BLOCK_V_RES);\n }\n }\n function renderRowRasterSymbols(rowIndex, symbols, theme) {\n // The memory layout of a RasterSymbol must follow one defined in lib.rs (see the assertions at the bottom)\n const view = vt.getDataView(symbols, 12);\n const y = rowIndex * BLOCK_V_RES;\n let i = 0;\n while (i < view.byteLength) {\n const column = view.getUint16(i + 0, true);\n const codepoint = view.getUint32(i + 4, true);\n const color = getColor(view, i + 8, theme) || theme.fg;\n i += 12;\n canvasCtx.fillStyle = color;\n drawBlockGlyph(canvasCtx, codepoint, column * BLOCK_H_RES, y);\n }\n }\n function renderRowVectorSymbols(rowIndex, symbols, theme) {\n // The memory layout of a VectorSymbol must follow one defined in lib.rs (see the assertions at the bottom)\n const view = vt.getDataView(symbols, 16);\n const frag = document.createDocumentFragment();\n const symbolRow = vectorSymbolRowsEl.children[rowIndex];\n let i = 0;\n while (i < view.byteLength) {\n const column = view.getUint16(i + 0, true);\n const codepoint = view.getUint32(i + 4, true);\n const color = getColor(view, i + 8, theme);\n const attrs = view.getUint8(i + 12);\n i += 16;\n const blink = (attrs & BLINK_MASK) !== 0;\n const el = createVectorSymbolNode(codepoint, column, color, blink);\n if (el) {\n frag.appendChild(el);\n }\n }\n recycleVectorSymbolUses(symbolRow);\n symbolRow.replaceChildren(frag);\n }\n function renderRowText(rowIndex, spans, codepoints, theme) {\n // The memory layout of a TextSpan must follow one defined in lib.rs (see the assertions at the bottom)\n const spansView = vt.getDataView(spans, 12);\n const codepointsView = vt.getUint32Array(codepoints);\n const frag = document.createDocumentFragment();\n let i = 0;\n while (i < spansView.byteLength) {\n const column = spansView.getUint16(i + 0, true);\n const codepointsStart = spansView.getUint16(i + 2, true);\n const len = spansView.getUint16(i + 4, true);\n const color = getColor(spansView, i + 6, theme);\n const attrs = spansView.getUint8(i + 10);\n const text = String.fromCodePoint(...codepointsView.subarray(codepointsStart, codepointsStart + len));\n i += 12;\n const el = document.createElement(\"span\");\n const style = el.style;\n style.setProperty(\"--offset\", column);\n el.textContent = text;\n if (color) {\n style.color = color;\n }\n const cls = getAttrClass(attrs);\n if (cls !== null) {\n el.className = cls;\n }\n frag.appendChild(el);\n }\n textEl.children[rowIndex].replaceChildren(frag);\n }\n function getAttrClass(attrs) {\n let c = attrClassCache.get(attrs);\n if (c === undefined) {\n c = buildAttrClass(attrs);\n attrClassCache.set(attrs, c);\n }\n return c;\n }\n function buildAttrClass(attrs) {\n let cls = \"\";\n if ((attrs & BOLD_MASK) !== 0) {\n cls += \"ap-bold \";\n } else if ((attrs & FAINT_MASK) !== 0) {\n cls += \"ap-faint \";\n }\n if ((attrs & ITALIC_MASK) !== 0) {\n cls += \"ap-italic \";\n }\n if ((attrs & UNDERLINE_MASK) !== 0) {\n cls += \"ap-underline \";\n }\n if ((attrs & STRIKETHROUGH_MASK) !== 0) {\n cls += \"ap-strike \";\n }\n if ((attrs & BLINK_MASK) !== 0) {\n cls += \"ap-blink \";\n }\n return cls === \"\" ? null : cls;\n }\n function getColor(view, offset, theme) {\n const tag = view.getUint8(offset);\n if (tag === 0) {\n return null;\n } else if (tag === 1) {\n return theme.fg;\n } else if (tag === 2) {\n return theme.bg;\n } else if (tag === 3) {\n return theme.palette[view.getUint8(offset + 1)];\n } else if (tag === 4) {\n const key = view.getUint32(offset, true);\n let c = colorsCache.get(key);\n if (c === undefined) {\n const r = view.getUint8(offset + 1);\n const g = view.getUint8(offset + 2);\n const b = view.getUint8(offset + 3);\n c = \"rgb(\" + r + \",\" + g + \",\" + b + \")\";\n colorsCache.set(key, c);\n }\n return c;\n } else {\n throw new Error(`invalid color tag: ${tag}`);\n }\n }\n function adjustTextRowNodeCount(rows) {\n let r = textEl.children.length;\n if (r < rows) {\n const frag = document.createDocumentFragment();\n while (r < rows) {\n const row = getNewRow();\n row.style.setProperty(\"--row\", r);\n frag.appendChild(row);\n r += 1;\n }\n textEl.appendChild(frag);\n }\n while (textEl.children.length > rows) {\n const row = textEl.lastElementChild;\n textEl.removeChild(row);\n textRowPool.push(row);\n }\n }\n function adjustSymbolRowNodeCount(rows) {\n let r = vectorSymbolRowsEl.children.length;\n if (r < rows) {\n const frag = document.createDocumentFragment();\n while (r < rows) {\n const row = getNewSymbolRow();\n row.setAttribute(\"transform\", `translate(0 ${r})`);\n frag.appendChild(row);\n r += 1;\n }\n vectorSymbolRowsEl.appendChild(frag);\n }\n while (vectorSymbolRowsEl.children.length > rows) {\n const row = vectorSymbolRowsEl.lastElementChild;\n vectorSymbolRowsEl.removeChild(row);\n vectorSymbolRowPool.push(row);\n }\n }\n function getNewRow() {\n let row = textRowPool.pop();\n if (row === undefined) {\n row = document.createElement(\"span\");\n row.className = \"ap-line\";\n }\n return row;\n }\n function getNewSymbolRow() {\n let row = vectorSymbolRowPool.pop();\n if (row === undefined) {\n row = document.createElementNS(SVG_NS, \"g\");\n row.setAttribute(\"class\", \"ap-symbol-line\");\n }\n return row;\n }\n function createVectorSymbolNode(codepoint, column, fg, blink) {\n if (!ensureVectorSymbolDef(codepoint)) {\n return null;\n }\n const isPowerline = POWERLINE_SYMBOLS.has(codepoint);\n const symbolX = isPowerline ? column - POWERLINE_SYMBOL_NUDGE : column;\n const symbolWidth = isPowerline ? 1 + POWERLINE_SYMBOL_NUDGE * 2 : 1;\n const node = getVectorSymbolUse();\n node.setAttribute(\"href\", `#sym-${codepoint}`);\n node.setAttribute(\"x\", symbolX);\n node.setAttribute(\"y\", 0);\n node.setAttribute(\"width\", symbolWidth);\n node.setAttribute(\"height\", \"1\");\n if (fg) {\n node.style.setProperty(\"color\", fg);\n } else {\n node.style.removeProperty(\"color\");\n }\n if (blink) {\n node.classList.add(\"ap-blink\");\n } else {\n node.classList.remove(\"ap-blink\");\n }\n return node;\n }\n function recycleVectorSymbolUses(row) {\n while (row.firstChild) {\n const child = row.firstChild;\n row.removeChild(child);\n vectorSymbolUsePool.push(child);\n }\n }\n function getVectorSymbolUse() {\n let node = vectorSymbolUsePool.pop();\n if (node === undefined) {\n node = document.createElementNS(SVG_NS, \"use\");\n }\n return node;\n }\n function ensureVectorSymbolDef(codepoint) {\n const content = getVectorSymbolDef(codepoint);\n if (!content) {\n return false;\n }\n if (vectorSymbolDefCache.has(codepoint)) {\n return true;\n }\n const id = `sym-${codepoint}`;\n const symbol = document.createElementNS(SVG_NS, \"symbol\");\n symbol.setAttribute(\"id\", id);\n symbol.setAttribute(\"viewBox\", \"0 0 1 1\");\n symbol.setAttribute(\"preserveAspectRatio\", \"none\");\n symbol.setAttribute(\"overflow\", \"visible\");\n symbol.innerHTML = content;\n vectorSymbolDefsEl.appendChild(symbol);\n vectorSymbolDefCache.add(codepoint);\n return true;\n }\n return (() => {\n const _el$ = _tmpl$$f.cloneNode(true),\n _el$2 = _el$.firstChild,\n _el$3 = _el$2.nextSibling,\n _el$4 = _el$3.firstChild,\n _el$5 = _el$4.nextSibling,\n _el$6 = _el$3.nextSibling;\n const _ref$ = el;\n typeof _ref$ === \"function\" ? use(_ref$, _el$) : el = _el$;\n const _ref$2 = canvasEl;\n typeof _ref$2 === \"function\" ? use(_ref$2, _el$2) : canvasEl = _el$2;\n const _ref$3 = vectorSymbolsEl;\n typeof _ref$3 === \"function\" ? use(_ref$3, _el$3) : vectorSymbolsEl = _el$3;\n const _ref$4 = vectorSymbolDefsEl;\n typeof _ref$4 === \"function\" ? use(_ref$4, _el$4) : vectorSymbolDefsEl = _el$4;\n const _ref$5 = vectorSymbolRowsEl;\n typeof _ref$5 === \"function\" ? use(_ref$5, _el$5) : vectorSymbolRowsEl = _el$5;\n const _ref$6 = textEl;\n typeof _ref$6 === \"function\" ? use(_ref$6, _el$6) : textEl = _el$6;\n createRenderEffect(_p$ => {\n const _v$ = style$1(),\n _v$2 = `0 0 ${size().cols} ${size().rows}`,\n _v$3 = !!blinkOn(),\n _v$4 = !!blinkOn();\n _p$._v$ = style(_el$, _v$, _p$._v$);\n _v$2 !== _p$._v$2 && setAttribute(_el$3, \"viewBox\", _p$._v$2 = _v$2);\n _v$3 !== _p$._v$3 && _el$3.classList.toggle(\"ap-blink\", _p$._v$3 = _v$3);\n _v$4 !== _p$._v$4 && _el$6.classList.toggle(\"ap-blink\", _p$._v$4 = _v$4);\n return _p$;\n }, {\n _v$: undefined,\n _v$2: undefined,\n _v$3: undefined,\n _v$4: undefined\n });\n return _el$;\n })();\n};\nfunction buildTheme(theme, adaptivePalette = false) {\n return {\n fg: theme.foreground,\n bg: theme.background,\n palette: adaptivePalette ? generate256Palette(theme.palette, theme.background, theme.foreground) : generateFixed256Palette(theme.palette)\n };\n}\nfunction getCssTheme(el) {\n const style = getComputedStyle(el);\n const foreground = normalizeHexColor(style.getPropertyValue(\"--term-color-foreground\"), FALLBACK_THEME.foreground);\n const background = normalizeHexColor(style.getPropertyValue(\"--term-color-background\"), FALLBACK_THEME.background);\n const palette = [];\n for (let i = 0; i < 16; i++) {\n const fallback = i >= 8 ? palette[i - 8] : FALLBACK_THEME.palette[i];\n palette[i] = normalizeHexColor(style.getPropertyValue(`--term-color-${i}`), fallback);\n }\n return {\n foreground,\n background,\n palette\n };\n}\nfunction generate256Palette(base16, bg, fg) {\n const bgLab = hexToOklab(bg);\n const fgLab = hexToOklab(fg);\n const c100 = hexToOklab(base16[1]);\n const c010 = hexToOklab(base16[2]);\n const c110 = hexToOklab(base16[3]);\n const c001 = hexToOklab(base16[4]);\n const c101 = hexToOklab(base16[5]);\n const c011 = hexToOklab(base16[6]);\n const palette = [...base16];\n\n // 216 color cube range\n\n for (let r = 0; r < 6; r += 1) {\n const tR = r / 5;\n const c0 = lerpOklab(tR, bgLab, c100);\n const c1 = lerpOklab(tR, c010, c110);\n const c2 = lerpOklab(tR, c001, c101);\n const c3 = lerpOklab(tR, c011, fgLab);\n for (let g = 0; g < 6; g += 1) {\n const tG = g / 5;\n const c4 = lerpOklab(tG, c0, c1);\n const c5 = lerpOklab(tG, c2, c3);\n for (let b = 0; b < 6; b += 1) {\n const tB = b / 5;\n const c6 = lerpOklab(tB, c4, c5);\n palette.push(oklabToHex(c6));\n }\n }\n }\n\n // grayscale range\n\n for (let i = 0; i < 24; i += 1) {\n const t = (i + 1) / 25;\n palette.push(oklabToHex(lerpOklab(t, bgLab, fgLab)));\n }\n return palette;\n}\nfunction generateFixed256Palette(base16) {\n const palette = [...base16];\n const levels = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];\n\n // 216 color cube range\n\n for (let r = 0; r < 6; r += 1) {\n for (let g = 0; g < 6; g += 1) {\n for (let b = 0; b < 6; b += 1) {\n palette.push(rgbToHex(levels[r], levels[g], levels[b]));\n }\n }\n }\n\n // grayscale range\n\n for (let i = 0; i < 24; i += 1) {\n const level = 8 + i * 10;\n palette.push(rgbToHex(level, level, level));\n }\n return palette;\n}\nfunction drawBlockGlyph(ctx, codepoint, x, y) {\n const unitX = BLOCK_H_RES / 8;\n const unitY = BLOCK_V_RES / 8;\n const halfX = BLOCK_H_RES / 2;\n const halfY = BLOCK_V_RES / 2;\n const sextantX = BLOCK_H_RES / 2;\n const sextantY = BLOCK_V_RES / 3;\n switch (codepoint) {\n case 0x2503:\n // box drawings heavy vertical (https://symbl.cc/en/2503/)\n ctx.fillRect(x + 3, y, 2, BLOCK_V_RES);\n break;\n case 0x2579:\n // box drawings heavy up (https://symbl.cc/en/2579/)\n ctx.fillRect(x + 3, y, 2, halfY);\n break;\n case 0x257b:\n // box drawings heavy down (https://symbl.cc/en/257B/)\n ctx.fillRect(x + 3, y + halfY, 2, halfY);\n break;\n case 0x2580:\n // upper half block (https://symbl.cc/en/2580/)\n ctx.fillRect(x, y, BLOCK_H_RES, halfY);\n break;\n case 0x2581:\n // lower one eighth block (https://symbl.cc/en/2581/)\n ctx.fillRect(x, y + unitY * 7, BLOCK_H_RES, unitY);\n break;\n case 0x2582:\n // lower one quarter block (https://symbl.cc/en/2582/)\n ctx.fillRect(x, y + unitY * 6, BLOCK_H_RES, unitY * 2);\n break;\n case 0x2583:\n // lower three eighths block (https://symbl.cc/en/2583/)\n ctx.fillRect(x, y + unitY * 5, BLOCK_H_RES, unitY * 3);\n break;\n case 0x2584:\n // lower half block (https://symbl.cc/en/2584/)\n ctx.fillRect(x, y + halfY, BLOCK_H_RES, halfY);\n break;\n case 0x2585:\n // lower five eighths block (https://symbl.cc/en/2585/)\n ctx.fillRect(x, y + unitY * 3, BLOCK_H_RES, unitY * 5);\n break;\n case 0x2586:\n // lower three quarters block (https://symbl.cc/en/2586/)\n ctx.fillRect(x, y + unitY * 2, BLOCK_H_RES, unitY * 6);\n break;\n case 0x2587:\n // lower seven eighths block (https://symbl.cc/en/2587/)\n ctx.fillRect(x, y + unitY, BLOCK_H_RES, unitY * 7);\n break;\n case 0x2588:\n // full block (https://symbl.cc/en/2588/)\n ctx.fillRect(x, y, BLOCK_H_RES, BLOCK_V_RES);\n break;\n case 0x25a0:\n // black square (https://symbl.cc/en/25A0/)\n ctx.fillRect(x, y + unitY * 2, BLOCK_H_RES, unitY * 4);\n break;\n case 0x2589:\n // left seven eighths block (https://symbl.cc/en/2589/)\n ctx.fillRect(x, y, unitX * 7, BLOCK_V_RES);\n break;\n case 0x258a:\n // left three quarters block (https://symbl.cc/en/258A/)\n ctx.fillRect(x, y, unitX * 6, BLOCK_V_RES);\n break;\n case 0x258b:\n // left five eighths block (https://symbl.cc/en/258B/)\n ctx.fillRect(x, y, unitX * 5, BLOCK_V_RES);\n break;\n case 0x258c:\n // left half block (https://symbl.cc/en/258C/)\n ctx.fillRect(x, y, halfX, BLOCK_V_RES);\n break;\n case 0x258d:\n // left three eighths block (https://symbl.cc/en/258D/)\n ctx.fillRect(x, y, unitX * 3, BLOCK_V_RES);\n break;\n case 0x258e:\n // left one quarter block (https://symbl.cc/en/258E/)\n ctx.fillRect(x, y, unitX * 2, BLOCK_V_RES);\n break;\n case 0x258f:\n // left one eighth block (https://symbl.cc/en/258F/)\n ctx.fillRect(x, y, unitX, BLOCK_V_RES);\n break;\n case 0x2590:\n // right half block (https://symbl.cc/en/2590/)\n ctx.fillRect(x + halfX, y, halfX, BLOCK_V_RES);\n break;\n case 0x2591:\n // light shade (https://symbl.cc/en/2591/)\n ctx.save();\n ctx.globalAlpha = 0.25;\n ctx.fillRect(x, y, BLOCK_H_RES, BLOCK_V_RES);\n ctx.restore();\n break;\n case 0x2592:\n // medium shade (https://symbl.cc/en/2592/)\n ctx.save();\n ctx.globalAlpha = 0.5;\n ctx.fillRect(x, y, BLOCK_H_RES, BLOCK_V_RES);\n ctx.restore();\n break;\n case 0x2593:\n // dark shade (https://symbl.cc/en/2593/)\n ctx.save();\n ctx.globalAlpha = 0.75;\n ctx.fillRect(x, y, BLOCK_H_RES, BLOCK_V_RES);\n ctx.restore();\n break;\n case 0x2594:\n // upper one eighth block (https://symbl.cc/en/2594/)\n ctx.fillRect(x, y, BLOCK_H_RES, unitY);\n break;\n case 0x2595:\n // right one eighth block (https://symbl.cc/en/2595/)\n ctx.fillRect(x + unitX * 7, y, unitX, BLOCK_V_RES);\n break;\n case 0x2596:\n // quadrant lower left (https://symbl.cc/en/2596/)\n ctx.fillRect(x, y + halfY, halfX, halfY);\n break;\n case 0x2597:\n // quadrant lower right (https://symbl.cc/en/2597/)\n ctx.fillRect(x + halfX, y + halfY, halfX, halfY);\n break;\n case 0x2598:\n // quadrant upper left (https://symbl.cc/en/2598/)\n ctx.fillRect(x, y, halfX, halfY);\n break;\n case 0x2599:\n // quadrant upper left and lower left and lower right (https://symbl.cc/en/2599/)\n ctx.fillRect(x, y, halfX, BLOCK_V_RES);\n ctx.fillRect(x + halfX, y + halfY, halfX, halfY);\n break;\n case 0x259a:\n // quadrant upper left and lower right (https://symbl.cc/en/259A/)\n ctx.fillRect(x, y, halfX, halfY);\n ctx.fillRect(x + halfX, y + halfY, halfX, halfY);\n break;\n case 0x259b:\n // quadrant upper left and upper right and lower left (https://symbl.cc/en/259B/)\n ctx.fillRect(x, y, BLOCK_H_RES, halfY);\n ctx.fillRect(x, y + halfY, halfX, halfY);\n break;\n case 0x259c:\n // quadrant upper left and upper right and lower right (https://symbl.cc/en/259C/)\n ctx.fillRect(x, y, BLOCK_H_RES, halfY);\n ctx.fillRect(x + halfX, y + halfY, halfX, halfY);\n break;\n case 0x259d:\n // quadrant upper right (https://symbl.cc/en/259D/)\n ctx.fillRect(x + halfX, y, halfX, halfY);\n break;\n case 0x259e:\n // quadrant upper right and lower left (https://symbl.cc/en/259E/)\n ctx.fillRect(x + halfX, y, halfX, halfY);\n ctx.fillRect(x, y + halfY, halfX, halfY);\n break;\n case 0x259f:\n // quadrant upper right and lower left and lower right (https://symbl.cc/en/259F/)\n ctx.fillRect(x + halfX, y, halfX, BLOCK_V_RES);\n ctx.fillRect(x, y + halfY, halfX, halfY);\n break;\n case 0x1fb00:\n // sextant-1: upper left (https://symbl.cc/en/1FB00/)\n ctx.fillRect(x, y, sextantX, sextantY);\n break;\n case 0x1fb01:\n // sextant-2: upper right (https://symbl.cc/en/1FB01/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n break;\n case 0x1fb02:\n // sextant-12: upper one third (https://symbl.cc/en/1FB02/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n break;\n case 0x1fb03:\n // sextant-3: middle left (https://symbl.cc/en/1FB03/)\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n break;\n case 0x1fb04:\n // sextant-13: top-left and middle-left filled (https://symbl.cc/en/1FB04/)\n ctx.fillRect(x, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n break;\n case 0x1fb05:\n // sextant-23: upper right and middle left (https://symbl.cc/en/1FB05/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n break;\n case 0x1fb06:\n // sextant-123: upper one third and middle left (https://symbl.cc/en/1FB06/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n break;\n case 0x1fb07:\n // sextant-4: middle right (https://symbl.cc/en/1FB07/)\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n break;\n case 0x1fb08:\n // sextant-14: upper left and middle right (https://symbl.cc/en/1FB08/)\n ctx.fillRect(x, y, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n break;\n case 0x1fb09:\n // sextant-24: top-right and middle-right filled (https://symbl.cc/en/1FB09/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n break;\n case 0x1fb0a:\n // sextant-124: upper one third and middle right (https://symbl.cc/en/1FB0A/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n break;\n case 0x1fb0b:\n // sextant-34: middle one third (https://symbl.cc/en/1FB0B/)\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY);\n break;\n case 0x1fb0c:\n // sextant-134: upper left, middle left and middle right (https://symbl.cc/en/1FB0C/)\n ctx.fillRect(x, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY);\n break;\n case 0x1fb0d:\n // sextant-234: upper right and middle one third (https://symbl.cc/en/1FB0D/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY);\n break;\n case 0x1fb0e:\n // sextant-1234: top and middle rows filled (https://symbl.cc/en/1FB0E/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY);\n break;\n case 0x1fb0f:\n // sextant-5: lower left (https://symbl.cc/en/1FB0F/)\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb10:\n // sextant-15: upper left and lower left (https://symbl.cc/en/1FB10/)\n ctx.fillRect(x, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb11:\n // sextant-25: upper right and lower left (https://symbl.cc/en/1FB11/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb12:\n // sextant-125: upper one third and lower left (https://symbl.cc/en/1FB12/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb13:\n // sextant-35: middle left and lower left (https://symbl.cc/en/1FB13/)\n ctx.fillRect(x, y + sextantY, sextantX, sextantY * 2);\n break;\n case 0x1fb14:\n // sextant-235: upper right and left column lower two thirds (https://symbl.cc/en/1FB14/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX, sextantY * 2);\n break;\n case 0x1fb15:\n // sextant-1235: upper one third and left column lower two thirds (https://symbl.cc/en/1FB15/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX, sextantY * 2);\n break;\n case 0x1fb16:\n // sextant-45: middle right and lower left (https://symbl.cc/en/1FB16/)\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb17:\n // sextant-145: upper left, middle right and lower left (https://symbl.cc/en/1FB17/)\n ctx.fillRect(x, y, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb18:\n // sextant-245: right column upper two thirds and lower left (https://symbl.cc/en/1FB18/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY * 2);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb19:\n // sextant-1245: upper one third, middle right and lower left (https://symbl.cc/en/1FB19/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb1a:\n // sextant-345: middle one third and lower left (https://symbl.cc/en/1FB1A/)\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb1b:\n // sextant-1345: left column and middle right (https://symbl.cc/en/1FB1B/)\n ctx.fillRect(x, y, sextantX, sextantY * 3);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n break;\n case 0x1fb1c:\n // sextant-2345: upper right, middle one third and lower left (https://symbl.cc/en/1FB1C/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb1d:\n // sextant-12345: upper two thirds and lower left (https://symbl.cc/en/1FB1D/)\n ctx.fillRect(x, y, sextantX * 2, sextantY * 2);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb1e:\n // sextant-6: lower right (https://symbl.cc/en/1FB1E/)\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb1f:\n // sextant-16: upper left and lower right (https://symbl.cc/en/1FB1F/)\n ctx.fillRect(x, y, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb20:\n // sextant-26: upper right and lower right (https://symbl.cc/en/1FB20/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb21:\n // sextant-126: upper one third and lower right (https://symbl.cc/en/1FB21/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb22:\n // sextant-36: middle left and lower right (https://symbl.cc/en/1FB22/)\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb23:\n // sextant-136: upper left, middle left and lower right (https://symbl.cc/en/1FB23/)\n ctx.fillRect(x, y, sextantX, sextantY * 2);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb24:\n // sextant-236: upper right, middle left and lower right (https://symbl.cc/en/1FB24/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb25:\n // sextant-1236: upper one third, middle left and lower right (https://symbl.cc/en/1FB25/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb26:\n // sextant-46: middle right and lower right (https://symbl.cc/en/1FB26/)\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY * 2);\n break;\n case 0x1fb27:\n // sextant-146: upper left and right column lower two thirds (https://symbl.cc/en/1FB27/)\n ctx.fillRect(x, y, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY * 2);\n break;\n case 0x1fb28:\n // sextant-1246: upper one third and right column lower two thirds (https://symbl.cc/en/1FB28/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY * 2);\n break;\n case 0x1fb29:\n // sextant-346: middle one third and lower right (https://symbl.cc/en/1FB29/)\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb2a:\n // sextant-1346: left column upper two thirds and right column lower two thirds (https://symbl.cc/en/1FB2A/)\n ctx.fillRect(x, y, sextantX, sextantY * 2);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY * 2);\n break;\n case 0x1fb2b:\n // sextant-2346: upper right, middle one third and lower right (https://symbl.cc/en/1FB2B/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb2c:\n // sextant-12346: upper two thirds and lower right (https://symbl.cc/en/1FB2C/)\n ctx.fillRect(x, y, sextantX * 2, sextantY * 2);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb2d:\n // sextant-56: lower one third (https://symbl.cc/en/1FB2D/)\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb2e:\n // sextant-156: upper left and lower one third (https://symbl.cc/en/1FB2E/)\n ctx.fillRect(x, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb2f:\n // sextant-256: upper right and lower one third (https://symbl.cc/en/1FB2F/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb30:\n // sextant-1256: upper one third and lower one third (https://symbl.cc/en/1FB30/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb31:\n // sextant-356: middle left and lower one third (https://symbl.cc/en/1FB31/)\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb32:\n // sextant-1356: left column upper two thirds and lower one third (https://symbl.cc/en/1FB32/)\n ctx.fillRect(x, y, sextantX, sextantY * 2);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb33:\n // sextant-2356: upper right, middle left and lower one third (https://symbl.cc/en/1FB33/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb34:\n // sextant-12356: upper one third, middle left and lower one third (https://symbl.cc/en/1FB34/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb35:\n // sextant-456: middle right and lower one third (https://symbl.cc/en/1FB35/)\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb36:\n // sextant-1456: upper left, middle right and lower one third (https://symbl.cc/en/1FB36/)\n ctx.fillRect(x, y, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb37:\n // sextant-2456: right column upper two thirds and lower one third (https://symbl.cc/en/1FB37/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY * 2);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb38:\n // sextant-12456: upper one third, middle right and lower one third (https://symbl.cc/en/1FB38/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb39:\n // sextant-3456: middle one third and lower one third (https://symbl.cc/en/1FB39/)\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY * 2);\n break;\n case 0x1fb3a:\n // sextant-13456: left column and lower one third (https://symbl.cc/en/1FB3A/)\n ctx.fillRect(x, y, sextantX, sextantY * 3);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb3b:\n // sextant-23456: upper right and lower two thirds (https://symbl.cc/en/1FB3B/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY * 2);\n break;\n }\n}\nconst SYMBOL_STROKE = 0.05;\nconst CELL_RATIO = 9.0375 / 20;\nfunction getVectorSymbolDef(codepoint) {\n const stroke = `stroke=\"currentColor\" stroke-width=\"${SYMBOL_STROKE}\" stroke-linejoin=\"miter\" stroke-linecap=\"square\"`;\n const strokeButt = `stroke=\"currentColor\" stroke-width=\"${SYMBOL_STROKE}\" stroke-linejoin=\"miter\" stroke-linecap=\"butt\"`;\n const stroked = d => `<path d=\"${d}\" fill=\"none\" ${stroke}/>`;\n const third = 1 / 3;\n const twoThirds = 2 / 3;\n switch (codepoint) {\n // ◢ - black lower right triangle (https://symbl.cc/en/25E2/)\n case 0x25e2:\n return '<path d=\"M1,1 L1,0 L0,1 Z\" fill=\"currentColor\"/>' + stroked(\"M1,1 L1,0 L0,1 Z\");\n\n // ◣ - black lower left triangle (https://symbl.cc/en/25E3/)\n case 0x25e3:\n return '<path d=\"M0,1 L0,0 L1,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0,1 L0,0 L1,1 Z\");\n\n // ◤ - black upper left triangle (https://symbl.cc/en/25E4/)\n case 0x25e4:\n return '<path d=\"M0,0 L1,0 L0,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0,0 L1,0 L0,1 Z\");\n\n // ◥ - black upper right triangle (https://symbl.cc/en/25E5/)\n case 0x25e5:\n return '<path d=\"M1,0 L1,1 L0,0 Z\" fill=\"currentColor\"/>' + stroked(\"M1,0 L1,1 L0,0 Z\");\n case 0x268f:\n {\n // ⚏ - digram for greater yin (https://symbl.cc/en/268F/)\n const horizontalGap = 0.15;\n const verticalGap = 0.2;\n const lineHeight = 0.17;\n const halfHorizontalGap = horizontalGap / 2;\n const halfVerticalGap = verticalGap / 2;\n const toViewBoxY = offset => 0.5 + offset * CELL_RATIO;\n const leftX1 = 0.5 - halfHorizontalGap;\n const rightX0 = 0.5 + halfHorizontalGap;\n const rightX1 = 1 + 0.02; // slight overdraw\n const topY0 = toViewBoxY(-halfVerticalGap - lineHeight);\n const topY1 = toViewBoxY(-halfVerticalGap);\n const bottomY0 = toViewBoxY(halfVerticalGap);\n const bottomY1 = toViewBoxY(halfVerticalGap + lineHeight);\n const rect = (x0, x1, y0, y1) => `M${x0},${y0} L${x1},${y0} L${x1},${y1} L${x0},${y1} Z`;\n return `<path d=\"${rect(0, leftX1, topY0, topY1)} ${rect(rightX0, rightX1, topY0, topY1)} ${rect(0, leftX1, bottomY0, bottomY1)} ${rect(rightX0, rightX1, bottomY0, bottomY1)}\" fill=\"currentColor\"/>`;\n }\n\n // 🬼 - lower left block diagonal lower middle left to lower centre (https://symbl.cc/en/1FB3C/)\n case 0x1fb3c:\n return `<path d=\"M0,${twoThirds} L0,1 L0.5,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,${twoThirds} L0,1 L0.5,1 Z`);\n\n // 🬽 - lower left block diagonal lower middle left to lower right (https://symbl.cc/en/1FB3D/)\n case 0x1fb3d:\n return `<path d=\"M0,${twoThirds} L0,1 L1,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,${twoThirds} L0,1 L1,1 Z`);\n\n // 🬾 - lower left block diagonal upper middle left to lower centre (https://symbl.cc/en/1FB3E/)\n case 0x1fb3e:\n return `<path d=\"M0,${third} L0.5,1 L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,${third} L0.5,1 L0,1 Z`);\n\n // 🬿 - lower left block diagonal upper middle left to lower right (https://symbl.cc/en/1FB3F/)\n case 0x1fb3f:\n return `<path d=\"M0,${third} L1,1 L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,${third} L1,1 L0,1 Z`);\n\n // 🭀 - lower left block diagonal upper left to lower centre (https://symbl.cc/en/1FB40/)\n case 0x1fb40:\n return '<path d=\"M0,0 L0.5,1 L0,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0,0 L0.5,1 L0,1 Z\");\n\n // 🭁 - lower right block diagonal upper middle left to upper centre (https://symbl.cc/en/1FB41/)\n case 0x1fb41:\n return `<path d=\"M0,${third} L0,1 L1,1 L1,0 L0.5,0 Z\" fill=\"currentColor\"/>` + stroked(`M0,${third} L0,1 L1,1 L1,0 L0.5,0 Z`);\n\n // 🭂 - lower right block diagonal upper middle left to upper right (https://symbl.cc/en/1FB42/)\n case 0x1fb42:\n return `<path d=\"M0,${third} L0,1 L1,1 L1,0 Z\" fill=\"currentColor\"/>` + stroked(`M0,${third} L0,1 L1,1 L1,0 Z`);\n\n // 🭃 - lower right block diagonal lower middle left to upper centre (https://symbl.cc/en/1FB43/)\n case 0x1fb43:\n return `<path d=\"M0,${twoThirds} L0,1 L1,1 L1,0 L0.5,0 Z\" fill=\"currentColor\"/>` + stroked(`M0,${twoThirds} L0,1 L1,1 L1,0 L0.5,0 Z`);\n\n // 🭄 - lower right block diagonal lower middle left to upper right (https://symbl.cc/en/1FB44/)\n case 0x1fb44:\n return `<path d=\"M0,${twoThirds} L0,1 L1,1 L1,0 Z\" fill=\"currentColor\"/>` + stroked(`M0,${twoThirds} L0,1 L1,1 L1,0 Z`);\n\n // 🭅 - lower right block diagonal lower left to upper centre (https://symbl.cc/en/1FB45/)\n case 0x1fb45:\n return '<path d=\"M0.5,0 L1,0 L1,1 L0,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0.5,0 L1,0 L1,1 L0,1 Z\");\n\n // 🭆 - lower right block diagonal lower middle left to upper middle right (https://symbl.cc/en/1FB46/)\n case 0x1fb46:\n return `<path d=\"M0,${twoThirds} L0,1 L1,1 L1,${third} Z\" fill=\"currentColor\"/>` + stroked(`M0,${twoThirds} L0,1 L1,1 L1,${third} Z`);\n\n // 🭇 - lower right block diagonal lower centre to lower middle right (https://symbl.cc/en/1FB47/)\n case 0x1fb47:\n return `<path d=\"M0.5,1 L1,1 L1,${twoThirds} Z\" fill=\"currentColor\"/>` + stroked(`M0.5,1 L1,1 L1,${twoThirds} Z`);\n\n // 🭈 - lower right block diagonal lower left to lower middle right (https://symbl.cc/en/1FB48/)\n case 0x1fb48:\n return `<path d=\"M0,1 L1,1 L1,${twoThirds} Z\" fill=\"currentColor\"/>` + stroked(`M0,1 L1,1 L1,${twoThirds} Z`);\n\n // 🭉 - lower right block diagonal lower centre to upper middle right (https://symbl.cc/en/1FB49/)\n case 0x1fb49:\n return `<path d=\"M0.5,1 L1,1 L1,${third} Z\" fill=\"currentColor\"/>` + stroked(`M0.5,1 L1,1 L1,${third} Z`);\n\n // 🭊 - lower right block diagonal lower left to upper middle right (https://symbl.cc/en/1FB4A/)\n case 0x1fb4a:\n return `<path d=\"M0,1 L1,1 L1,${third} Z\" fill=\"currentColor\"/>` + stroked(`M0,1 L1,1 L1,${third} Z`);\n\n // 🭋 - lower right block diagonal lower centre to upper right (https://symbl.cc/en/1FB4B/)\n case 0x1fb4b:\n return '<path d=\"M0.5,1 L1,0 L1,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0.5,1 L1,0 L1,1 Z\");\n\n // 🭌 - lower left block diagonal upper centre to upper middle right (https://symbl.cc/en/1FB4C/)\n case 0x1fb4c:\n return `<path d=\"M0,0 L0.5,0 L1,${third} L1,1 L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L0.5,0 L1,${third} L1,1 L0,1 Z`);\n\n // 🭍 - lower left block diagonal upper left to upper middle right (https://symbl.cc/en/1FB4D/)\n case 0x1fb4d:\n return `<path d=\"M0,0 L0,1 L1,1 L1,${third} Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L0,1 L1,1 L1,${third} Z`);\n\n // 🭎 - lower left block diagonal upper centre to lower middle right (https://symbl.cc/en/1FB4E/)\n case 0x1fb4e:\n return `<path d=\"M0,0 L0.5,0 L1,${twoThirds} L1,1 L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L0.5,0 L1,${twoThirds} L1,1 L0,1 Z`);\n\n // 🭏 - lower left block diagonal upper left to lower middle right (https://symbl.cc/en/1FB4F/)\n case 0x1fb4f:\n return `<path d=\"M0,0 L1,${twoThirds} L1,1 L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,${twoThirds} L1,1 L0,1 Z`);\n\n // 🭐 - lower left block diagonal upper centre to lower right (https://symbl.cc/en/1FB50/)\n case 0x1fb50:\n return '<path d=\"M0,0 L0.5,0 L1,1 L0,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0,0 L0.5,0 L1,1 L0,1 Z\");\n\n // 🭑 - lower left block diagonal upper middle left to lower middle right (https://symbl.cc/en/1FB51/)\n case 0x1fb51:\n return `<path d=\"M0,${third} L1,${twoThirds} L1,1 L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,${third} L1,${twoThirds} L1,1 L0,1 Z`);\n\n // 🭒 - upper right block diagonal lower middle left to lower centre (https://symbl.cc/en/1FB52/)\n case 0x1fb52:\n return `<path d=\"M0,${twoThirds} L0,0 L1,0 L1,1 L0.5,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,${twoThirds} L0,0 L1,0 L1,1 L0.5,1 Z`);\n\n // 🭓 - upper right block diagonal lower middle left to lower right (https://symbl.cc/en/1FB53/)\n case 0x1fb53:\n return `<path d=\"M0,${twoThirds} L0,0 L1,0 L1,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,${twoThirds} L0,0 L1,0 L1,1 Z`);\n\n // 🭔 - upper right block diagonal upper middle left to lower centre (https://symbl.cc/en/1FB54/)\n case 0x1fb54:\n return `<path d=\"M0,${third} L0,0 L1,0 L1,1 L0.5,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,${third} L0,0 L1,0 L1,1 L0.5,1 Z`);\n\n // 🭕 - upper right block diagonal upper middle left to lower right (https://symbl.cc/en/1FB55/)\n case 0x1fb55:\n return `<path d=\"M0,${third} L0,0 L1,0 L1,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,${third} L0,0 L1,0 L1,1 Z`);\n\n // 🭖 - upper right block diagonal upper left to lower centre (https://symbl.cc/en/1FB56/)\n case 0x1fb56:\n return '<path d=\"M0,0 L1,0 L1,1 L0.5,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0,0 L1,0 L1,1 L0.5,1 Z\");\n\n // 🭗 - upper left block diagonal upper middle left to upper centre (https://symbl.cc/en/1FB57/)\n case 0x1fb57:\n return `<path d=\"M0,${third} L0.5,0 L0,0 Z\" fill=\"currentColor\"/>` + stroked(`M0,${third} L0.5,0 L0,0 Z`);\n\n // 🭘 - upper left block diagonal upper middle left to upper right (https://symbl.cc/en/1FB58/)\n case 0x1fb58:\n return `<path d=\"M0,0 L1,0 L0,${third} Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,0 L0,${third} Z`);\n\n // 🭙 - upper left block diagonal lower middle left to upper centre (https://symbl.cc/en/1FB59/)\n case 0x1fb59:\n return `<path d=\"M0,0 L0.5,0 L0,${twoThirds} Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L0.5,0 L0,${twoThirds} Z`);\n\n // 🭚 - upper left block diagonal lower middle left to upper right (https://symbl.cc/en/1FB5A/)\n case 0x1fb5a:\n return `<path d=\"M0,0 L1,0 L0,${twoThirds} Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,0 L0,${twoThirds} Z`);\n\n // 🭛 - upper left block diagonal lower left to upper centre (https://symbl.cc/en/1FB5B/)\n case 0x1fb5b:\n return '<path d=\"M0,0 L0.5,0 L0,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0,0 L0.5,0 L0,1 Z\");\n\n // 🭜 - upper left block diagonal lower middle left to upper middle right (https://symbl.cc/en/1FB5C/)\n case 0x1fb5c:\n return `<path d=\"M0,0 L1,0 L1,${third} L0,${twoThirds} Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,0 L1,${third} L0,${twoThirds} Z`);\n\n // 🭝 - upper left block diagonal lower centre to lower middle right (https://symbl.cc/en/1FB5D/)\n case 0x1fb5d:\n return `<path d=\"M0,0 L1,0 L1,${twoThirds} L0.5,1 L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,0 L1,${twoThirds} L0.5,1 L0,1 Z`);\n\n // 🭞 - upper left block diagonal lower left to lower middle right (https://symbl.cc/en/1FB5E/)\n case 0x1fb5e:\n return `<path d=\"M0,0 L1,0 L1,${twoThirds} L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,0 L1,${twoThirds} L0,1 Z`);\n\n // 🭟 - upper left block diagonal lower centre to upper middle right (https://symbl.cc/en/1FB5F/)\n case 0x1fb5f:\n return `<path d=\"M0,0 L1,0 L1,${third} L0.5,1 L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,0 L1,${third} L0.5,1 L0,1 Z`);\n\n // 🭠 - upper left block diagonal lower left to upper middle right (https://symbl.cc/en/1FB60/)\n case 0x1fb60:\n return `<path d=\"M0,0 L1,0 L1,${third} L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,0 L1,${third} L0,1 Z`);\n\n // 🭡 - upper left block diagonal lower centre to upper right (https://symbl.cc/en/1FB61/)\n case 0x1fb61:\n return '<path d=\"M0,0 L1,0 L0.5,1 L0,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0,0 L1,0 L0.5,1 L0,1 Z\");\n\n // 🭢 - upper right block diagonal upper centre to upper middle right (https://symbl.cc/en/1FB62/)\n case 0x1fb62:\n return `<path d=\"M0.5,0 L1,0 L1,${third} Z\" fill=\"currentColor\"/>` + stroked(`M0.5,0 L1,0 L1,${third} Z`);\n\n // 🭣 - upper right block diagonal upper left to upper middle right (https://symbl.cc/en/1FB63/)\n case 0x1fb63:\n return `<path d=\"M0,0 L1,0 L1,${third} Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,0 L1,${third} Z`);\n\n // 🭤 - upper right block diagonal upper centre to lower middle right (https://symbl.cc/en/1FB64/)\n case 0x1fb64:\n return `<path d=\"M0.5,0 L1,0 L1,${twoThirds} Z\" fill=\"currentColor\"/>` + stroked(`M0.5,0 L1,0 L1,${twoThirds} Z`);\n\n // 🭥 - upper right block diagonal upper left to lower middle right (https://symbl.cc/en/1FB65/)\n case 0x1fb65:\n return `<path d=\"M0,0 L1,0 L1,${twoThirds} Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,0 L1,${twoThirds} Z`);\n\n // 🭦 - upper right block diagonal upper centre to lower right (https://symbl.cc/en/1FB66/)\n case 0x1fb66:\n return '<path d=\"M0.5,0 L1,0 L1,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0.5,0 L1,0 L1,1 Z\");\n\n // 🭧 - upper right block diagonal upper middle left to lower middle right (https://symbl.cc/en/1FB67/)\n case 0x1fb67:\n return `<path d=\"M0,${third} L0,0 L1,0 L1,${twoThirds} Z\" fill=\"currentColor\"/>` + stroked(`M0,${third} L0,0 L1,0 L1,${twoThirds} Z`);\n\n // 🭨 - upper and right and lower triangular three quarters block (https://symbl.cc/en/1FB68/)\n case 0x1fb68:\n return '<path fill-rule=\"evenodd\" d=\"M0,0 L1,0 L1,1 L0,1 Z M0,0 L0,1 L0.5,0.5 Z\" fill=\"currentColor\"/>' + `<path d=\"M0,0 L1,0 M0,1 L1,1 M1,0 L1,1\" fill=\"none\" ${stroke}/>` + `<path d=\"M0,0 L0.5,0.5 M0,1 L0.5,0.5\" fill=\"none\" ${strokeButt}/>`;\n\n // 🭩 - left and lower and right triangular three quarters block (https://symbl.cc/en/1FB69/)\n case 0x1fb69:\n return '<path fill-rule=\"evenodd\" d=\"M0,0 L1,0 L1,1 L0,1 Z M0,0 L1,0 L0.5,0.5 Z\" fill=\"currentColor\"/>' + `<path d=\"M0,0 L0,1 M1,0 L1,1 M0,1 L1,1\" fill=\"none\" ${stroke}/>` + `<path d=\"M0,0 L0.5,0.5 M1,0 L0.5,0.5\" fill=\"none\" ${strokeButt}/>`;\n\n // 🭪 - upper and left and lower triangular three quarters block (https://symbl.cc/en/1FB6A/)\n case 0x1fb6a:\n return '<path fill-rule=\"evenodd\" d=\"M0,0 L1,0 L1,1 L0,1 Z M1,0 L1,1 L0.5,0.5 Z\" fill=\"currentColor\"/>' + `<path d=\"M0,0 L1,0 M0,1 L1,1 M0,0 L0,1\" fill=\"none\" ${stroke}/>` + `<path d=\"M1,0 L0.5,0.5 M1,1 L0.5,0.5\" fill=\"none\" ${strokeButt}/>`;\n\n // 🭫 - left and upper and right triangular three quarters block (https://symbl.cc/en/1FB6B/)\n case 0x1fb6b:\n return '<path fill-rule=\"evenodd\" d=\"M0,0 L1,0 L1,1 L0,1 Z M0,1 L1,1 L0.5,0.5 Z\" fill=\"currentColor\"/>' + `<path d=\"M0,0 L1,0 M0,0 L0,1 M1,0 L1,1\" fill=\"none\" ${stroke}/>` + `<path d=\"M0,1 L0.5,0.5 M1,1 L0.5,0.5\" fill=\"none\" ${strokeButt}/>`;\n\n // 🭬 - left triangular one quarter block (https://symbl.cc/en/1FB6C/)\n case 0x1fb6c:\n return '<path d=\"M0,0 L0,1 L0.5,0.5 Z\" fill=\"currentColor\"/>' + stroked(\"M0,0 L0,1 L0.5,0.5 Z\");\n\n // powerline right full triangle (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b0:\n return '<path d=\"M0,0 L1,0.5 L0,1 Z\" fill=\"currentColor\"/>';\n\n // powerline right bracket (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b1:\n return '<path d=\"M0,0 L1,0.5 L0,1\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"0.07\" stroke-linejoin=\"miter\"/>';\n\n // powerline left full triangle (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b2:\n return '<path d=\"M1,0 L0,0.5 L1,1 Z\" fill=\"currentColor\"/>';\n\n // powerline left bracket (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b3:\n return '<path d=\"M1,0 L0,0.5 L1,1\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"0.07\" stroke-linejoin=\"miter\"/>';\n\n // nf-ple-right_half_circle_thick (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b4:\n return '<path d=\"M0,0 A1,0.5 0 0 1 0,1 Z\" fill=\"currentColor\"/>';\n\n // nf-ple-right_half_circle_thin (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b5:\n return '<path d=\"M0,0 A1,0.5 0 0 1 0,1\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"0.07\"/>';\n\n // nf-ple-left_half_circle_thick (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b6:\n return '<path d=\"M1,0 A1,0.5 0 0 0 1,1 Z\" fill=\"currentColor\"/>';\n\n // nf-ple-left_half_circle_thin (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b7:\n return '<path d=\"M1,0 A1,0.5 0 0 0 1,1\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"0.07\"/>';\n\n // nf-ple-lower_left_triangle (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b8:\n return '<path d=\"M0,1 L0,0 L1,1 Z\" fill=\"currentColor\"/>';\n\n // nf-ple-backslash_separator (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b9:\n // nf-ple-backslash_separator_redundant (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0bf:\n return '<path d=\"M0,0 L1,1\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"0.07\"/>';\n\n // nf-ple-lower_right_triangle (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0ba:\n return '<path d=\"M1,1 L1,0 L0,1 Z\" fill=\"currentColor\"/>';\n\n // nf-ple-forwardslash_separator (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0bb:\n // nf-ple-forwardslash_separator_redundant (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0bd:\n return '<path d=\"M0,1 L1,0\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"0.07\"/>';\n\n // nf-ple-upper_left_triangle (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0bc:\n return '<path d=\"M0,0 L1,0 L0,1 Z\" fill=\"currentColor\"/>';\n\n // nf-ple-upper_right_triangle (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0be:\n return '<path d=\"M1,0 L1,1 L0,0 Z\" fill=\"currentColor\"/>';\n default:\n return null;\n }\n}\nconst POWERLINE_SYMBOLS = new Set([0xe0b0, 0xe0b1, 0xe0b2, 0xe0b3, 0xe0b4, 0xe0b5, 0xe0b6, 0xe0b7, 0xe0b8, 0xe0b9, 0xe0ba, 0xe0bb, 0xe0bc, 0xe0bd, 0xe0be, 0xe0bf]);\nconst POWERLINE_SYMBOL_NUDGE = 0.02;\nconst FALLBACK_THEME = {\n foreground: \"#000000\",\n background: \"#000000\",\n palette: [\"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\"]\n};\n\nconst _tmpl$$e = /*#__PURE__*/template(`<svg version=\"1.1\" viewBox=\"0 0 12 12\" class=\"ap-icon ap-icon-fullscreen-off\" aria-hidden=\"true\"><path d=\"M7,5 L7,0 L9,2 L11,0 L12,1 L10,3 L12,5 Z\"></path><path d=\"M5,7 L0,7 L2,9 L0,11 L1,12 L3,10 L5,12 Z\"></path></svg>`, 6);\nvar ExpandIcon = props => {\n return _tmpl$$e.cloneNode(true);\n};\n\nconst _tmpl$$d = /*#__PURE__*/template(`<svg version=\"1.1\" viewBox=\"6 8 14 16\" class=\"ap-icon\" aria-hidden=\"true\"><path d=\"M0.938 8.313h22.125c0.5 0 0.938 0.438 0.938 0.938v13.5c0 0.5-0.438 0.938-0.938 0.938h-22.125c-0.5 0-0.938-0.438-0.938-0.938v-13.5c0-0.5 0.438-0.938 0.938-0.938zM1.594 22.063h20.813v-12.156h-20.813v12.156zM3.844 11.188h1.906v1.938h-1.906v-1.938zM7.469 11.188h1.906v1.938h-1.906v-1.938zM11.031 11.188h1.938v1.938h-1.938v-1.938zM14.656 11.188h1.875v1.938h-1.875v-1.938zM18.25 11.188h1.906v1.938h-1.906v-1.938zM5.656 15.031h1.938v1.938h-1.938v-1.938zM9.281 16.969v-1.938h1.906v1.938h-1.906zM12.875 16.969v-1.938h1.906v1.938h-1.906zM18.406 16.969h-1.938v-1.938h1.938v1.938zM16.531 20.781h-9.063v-1.906h9.063v1.906z\"></path></svg>`, 4);\nvar KeyboardIcon = props => {\n return _tmpl$$d.cloneNode(true);\n};\n\nconst _tmpl$$c = /*#__PURE__*/template(`<svg version=\"1.1\" viewBox=\"0 0 12 12\" class=\"ap-icon\" aria-hidden=\"true\"><path d=\"M1,0 L4,0 L4,12 L1,12 Z\"></path><path d=\"M8,0 L11,0 L11,12 L8,12 Z\"></path></svg>`, 6);\nvar PauseIcon = props => {\n return _tmpl$$c.cloneNode(true);\n};\n\nconst _tmpl$$b = /*#__PURE__*/template(`<svg version=\"1.1\" viewBox=\"0 0 12 12\" class=\"ap-icon\" aria-hidden=\"true\"><path d=\"M1,0 L11,6 L1,12 Z\"></path></svg>`, 4);\nvar PlayIcon = props => {\n return _tmpl$$b.cloneNode(true);\n};\n\nconst _tmpl$$a = /*#__PURE__*/template(`<svg version=\"1.1\" viewBox=\"0 0 12 12\" class=\"ap-icon ap-icon-fullscreen-on\" aria-hidden=\"true\"><path d=\"M12,0 L7,0 L9,2 L7,4 L8,5 L10,3 L12,5 Z\"></path><path d=\"M0,12 L0,7 L2,9 L4,7 L5,8 L3,10 L5,12 Z\"></path></svg>`, 6);\nvar ShrinkIcon = props => {\n return _tmpl$$a.cloneNode(true);\n};\n\nconst _tmpl$$9 = /*#__PURE__*/template(`<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M10.5 3.75a.75.75 0 0 0-1.264-.546L5.203 7H2.667a.75.75 0 0 0-.7.48A6.985 6.985 0 0 0 1.5 10c0 .887.165 1.737.468 2.52.111.29.39.48.7.48h2.535l4.033 3.796a.75.75 0 0 0 1.264-.546V3.75ZM16.45 5.05a.75.75 0 0 0-1.06 1.061 5.5 5.5 0 0 1 0 7.778.75.75 0 0 0 1.06 1.06 7 7 0 0 0 0-9.899Z\"></path><path d=\"M14.329 7.172a.75.75 0 0 0-1.061 1.06 2.5 2.5 0 0 1 0 3.536.75.75 0 0 0 1.06 1.06 4 4 0 0 0 0-5.656Z\"></path></svg>`, 6);\nvar SpeakerOnIcon = props => {\n return _tmpl$$9.cloneNode(true);\n};\n\nconst _tmpl$$8 = /*#__PURE__*/template(`<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" class=\"size-5\" aria-hidden=\"true\"><path d=\"M10.047 3.062a.75.75 0 0 1 .453.688v12.5a.75.75 0 0 1-1.264.546L5.203 13H2.667a.75.75 0 0 1-.7-.48A6.985 6.985 0 0 1 1.5 10c0-.887.165-1.737.468-2.52a.75.75 0 0 1 .7-.48h2.535l4.033-3.796a.75.75 0 0 1 .811-.142ZM13.78 7.22a.75.75 0 1 0-1.06 1.06L14.44 10l-1.72 1.72a.75.75 0 0 0 1.06 1.06l1.72-1.72 1.72 1.72a.75.75 0 1 0 1.06-1.06L16.56 10l1.72-1.72a.75.75 0 0 0-1.06-1.06L15.5 8.94l-1.72-1.72Z\"></path></svg>`, 4);\nvar SpeakerOffIcon = props => {\n return _tmpl$$8.cloneNode(true);\n};\n\nconst _tmpl$$7 = /*#__PURE__*/template(`<button class=\"ap-button ap-playback-button\" type=\"button\"></button>`, 2),\n _tmpl$2$2 = /*#__PURE__*/template(`<span class=\"ap-bar\"><span class=\"ap-gutter ap-gutter-empty\"></span><span class=\"ap-gutter ap-gutter-full\"></span></span>`, 6),\n _tmpl$3$1 = /*#__PURE__*/template(`<span class=\"ap-tooltip\">Unmute (m)</span>`, 2),\n _tmpl$4$1 = /*#__PURE__*/template(`<span class=\"ap-tooltip\">Mute (m)</span>`, 2),\n _tmpl$5$1 = /*#__PURE__*/template(`<button class=\"ap-button ap-speaker-button ap-tooltip-container\" type=\"button\" aria-label=\"Mute / unmute\"></button>`, 2),\n _tmpl$6$1 = /*#__PURE__*/template(`<div class=\"ap-control-bar\"><span class=\"ap-timer\"><span class=\"ap-time-elapsed\"></span><span class=\"ap-time-remaining\"></span></span><span class=\"ap-progressbar\"></span><button class=\"ap-button ap-kbd-button ap-tooltip-container\" type=\"button\" aria-label=\"Show keyboard shortcuts\"><span class=\"ap-tooltip\">Keyboard shortcuts (?)</span></button><button class=\"ap-button ap-fullscreen-button ap-tooltip-container\" type=\"button\" aria-label=\"Toggle fullscreen mode\"><span class=\"ap-tooltip\">Fullscreen (f)</span></button></div>`, 18),\n _tmpl$7$1 = /*#__PURE__*/template(`<span class=\"ap-marker-container ap-tooltip-container\"><span class=\"ap-marker\"></span><span class=\"ap-tooltip\"></span></span>`, 6);\nfunction formatTime(seconds) {\n let s = Math.floor(seconds);\n const d = Math.floor(s / 86400);\n s %= 86400;\n const h = Math.floor(s / 3600);\n s %= 3600;\n const m = Math.floor(s / 60);\n s %= 60;\n if (d > 0) {\n return `${zeroPad(d)}:${zeroPad(h)}:${zeroPad(m)}:${zeroPad(s)}`;\n } else if (h > 0) {\n return `${zeroPad(h)}:${zeroPad(m)}:${zeroPad(s)}`;\n } else {\n return `${zeroPad(m)}:${zeroPad(s)}`;\n }\n}\nfunction zeroPad(n) {\n return n < 10 ? `0${n}` : n.toString();\n}\nvar ControlBar = props => {\n const e = f => {\n return e => {\n e.preventDefault();\n f(e);\n };\n };\n const currentTime = () => typeof props.currentTime === \"number\" ? formatTime(props.currentTime) : \"--:--\";\n const remainingTime = () => typeof props.remainingTime === \"number\" ? \"-\" + formatTime(props.remainingTime) : currentTime();\n const markers = createMemo(() => typeof props.duration === \"number\" ? props.markers.filter(m => m[0] < props.duration) : []);\n const markerPosition = m => `${m[0] / props.duration * 100}%`;\n const markerText = m => {\n if (m[1] === \"\") {\n return formatTime(m[0]);\n } else {\n return `${formatTime(m[0])} - ${m[1]}`;\n }\n };\n const isPastMarker = m => typeof props.currentTime === \"number\" ? m[0] <= props.currentTime : false;\n const gutterBarStyle = () => {\n return {\n transform: `scaleX(${props.progress || 0}`\n };\n };\n const calcPosition = e => {\n const barWidth = e.currentTarget.offsetWidth;\n const rect = e.currentTarget.getBoundingClientRect();\n const mouseX = e.clientX - rect.left;\n const pos = Math.max(0, mouseX / barWidth);\n return `${pos * 100}%`;\n };\n const [mouseDown, setMouseDown] = createSignal(false);\n const throttledSeek = throttle(props.onSeekClick, 50);\n const onMouseDown = e => {\n if (e._marker) return;\n if (e.altKey || e.shiftKey || e.metaKey || e.ctrlKey || e.button !== 0) return;\n setMouseDown(true);\n props.onSeekClick(calcPosition(e));\n };\n const seekToMarker = index => {\n return e(() => {\n props.onSeekClick({\n marker: index\n });\n });\n };\n const onMove = e => {\n if (e.altKey || e.shiftKey || e.metaKey || e.ctrlKey) return;\n if (mouseDown()) {\n throttledSeek(calcPosition(e));\n }\n };\n const onDocumentMouseUp = () => {\n setMouseDown(false);\n };\n document.addEventListener(\"mouseup\", onDocumentMouseUp);\n onCleanup(() => {\n document.removeEventListener(\"mouseup\", onDocumentMouseUp);\n });\n return (() => {\n const _el$ = _tmpl$6$1.cloneNode(true),\n _el$3 = _el$.firstChild,\n _el$4 = _el$3.firstChild,\n _el$5 = _el$4.nextSibling,\n _el$6 = _el$3.nextSibling,\n _el$11 = _el$6.nextSibling,\n _el$12 = _el$11.firstChild,\n _el$13 = _el$11.nextSibling,\n _el$14 = _el$13.firstChild;\n const _ref$ = props.ref;\n typeof _ref$ === \"function\" ? use(_ref$, _el$) : props.ref = _el$;\n insert(_el$, createComponent(Show, {\n get when() {\n return props.isPausable;\n },\n get children() {\n const _el$2 = _tmpl$$7.cloneNode(true);\n addEventListener(_el$2, \"click\", e(props.onPlayClick));\n insert(_el$2, createComponent(Switch, {\n get children() {\n return [createComponent(Match, {\n get when() {\n return props.isPlaying;\n },\n get children() {\n return createComponent(PauseIcon, {});\n }\n }), createComponent(Match, {\n when: true,\n get children() {\n return createComponent(PlayIcon, {});\n }\n })];\n }\n }));\n createRenderEffect(() => setAttribute(_el$2, \"aria-label\", props.isPlaying ? \"Pause\" : \"Play\"));\n return _el$2;\n }\n }), _el$3);\n insert(_el$4, currentTime);\n insert(_el$5, remainingTime);\n insert(_el$6, createComponent(Show, {\n get when() {\n return typeof props.progress === \"number\" || props.isSeekable;\n },\n get children() {\n const _el$7 = _tmpl$2$2.cloneNode(true),\n _el$8 = _el$7.firstChild,\n _el$9 = _el$8.nextSibling;\n _el$7.$$mousemove = onMove;\n _el$7.$$mousedown = onMouseDown;\n insert(_el$7, createComponent(For, {\n get each() {\n return markers();\n },\n children: (m, i) => (() => {\n const _el$15 = _tmpl$7$1.cloneNode(true),\n _el$16 = _el$15.firstChild,\n _el$17 = _el$16.nextSibling;\n _el$15.$$mousedown = e => {\n e._marker = true;\n };\n addEventListener(_el$15, \"click\", seekToMarker(i()));\n insert(_el$17, () => markerText(m));\n createRenderEffect(_p$ => {\n const _v$ = markerPosition(m),\n _v$2 = !!isPastMarker(m);\n _v$ !== _p$._v$ && _el$15.style.setProperty(\"left\", _p$._v$ = _v$);\n _v$2 !== _p$._v$2 && _el$16.classList.toggle(\"ap-marker-past\", _p$._v$2 = _v$2);\n return _p$;\n }, {\n _v$: undefined,\n _v$2: undefined\n });\n return _el$15;\n })()\n }), null);\n createRenderEffect(_$p => style(_el$9, gutterBarStyle(), _$p));\n return _el$7;\n }\n }));\n insert(_el$, createComponent(Show, {\n get when() {\n return props.isMuted !== undefined;\n },\n get children() {\n const _el$0 = _tmpl$5$1.cloneNode(true);\n addEventListener(_el$0, \"click\", e(props.onMuteClick));\n insert(_el$0, createComponent(Switch, {\n get children() {\n return [createComponent(Match, {\n get when() {\n return props.isMuted === true;\n },\n get children() {\n return [createComponent(SpeakerOffIcon, {}), _tmpl$3$1.cloneNode(true)];\n }\n }), createComponent(Match, {\n get when() {\n return props.isMuted === false;\n },\n get children() {\n return [createComponent(SpeakerOnIcon, {}), _tmpl$4$1.cloneNode(true)];\n }\n })];\n }\n }));\n return _el$0;\n }\n }), _el$11);\n addEventListener(_el$11, \"click\", e(props.onHelpClick));\n insert(_el$11, createComponent(KeyboardIcon, {}), _el$12);\n addEventListener(_el$13, \"click\", e(props.onFullscreenClick));\n insert(_el$13, createComponent(ShrinkIcon, {}), _el$14);\n insert(_el$13, createComponent(ExpandIcon, {}), _el$14);\n createRenderEffect(() => _el$.classList.toggle(\"ap-seekable\", !!props.isSeekable));\n return _el$;\n })();\n};\ndelegateEvents([\"click\", \"mousedown\", \"mousemove\"]);\n\nconst _tmpl$$6 = /*#__PURE__*/template(`<div class=\"ap-overlay ap-overlay-error\"><span>💥</span></div>`, 4);\nvar ErrorOverlay = props => {\n return _tmpl$$6.cloneNode(true);\n};\n\nconst _tmpl$$5 = /*#__PURE__*/template(`<div class=\"ap-overlay ap-overlay-loading\"><span class=\"ap-loader\"></span></div>`, 4);\nvar LoaderOverlay = props => {\n return _tmpl$$5.cloneNode(true);\n};\n\nconst _tmpl$$4 = /*#__PURE__*/template(`<div class=\"ap-overlay ap-overlay-info\"><span></span></div>`, 4);\nvar InfoOverlay = props => {\n return (() => {\n const _el$ = _tmpl$$4.cloneNode(true),\n _el$2 = _el$.firstChild;\n insert(_el$2, () => props.message);\n createRenderEffect(() => _el$.classList.toggle(\"ap-was-playing\", !!props.wasPlaying));\n return _el$;\n })();\n};\n\nconst _tmpl$$3 = /*#__PURE__*/template(`<div class=\"ap-overlay ap-overlay-start\"><div class=\"ap-play-button\"><div><span><svg version=\"1.1\" viewBox=\"0 0 1000.0 1000.0\" class=\"ap-icon\"><defs><mask id=\"small-triangle-mask\"><rect width=\"100%\" height=\"100%\" fill=\"white\"></rect><polygon points=\"700.0 500.0, 400.00000000000006 326.7949192431122, 399.9999999999999 673.2050807568877\" fill=\"black\"></polygon></mask></defs><polygon points=\"1000.0 500.0, 250.0000000000001 66.98729810778059, 249.99999999999977 933.0127018922192\" mask=\"url(#small-triangle-mask)\" fill=\"white\" class=\"ap-play-btn-fill\"></polygon><polyline points=\"673.2050807568878 400.0, 326.7949192431123 600.0\" stroke=\"white\" stroke-width=\"90\" class=\"ap-play-btn-stroke\"></polyline></svg></span></div></div></div>`, 22);\nvar StartOverlay = props => {\n const e = f => {\n return e => {\n e.preventDefault();\n f(e);\n };\n };\n return (() => {\n const _el$ = _tmpl$$3.cloneNode(true);\n addEventListener(_el$, \"click\", e(props.onClick));\n return _el$;\n })();\n};\ndelegateEvents([\"click\"]);\n\nconst _tmpl$$2 = /*#__PURE__*/template(`<li><kbd>space</kbd> - pause / resume</li>`, 4),\n _tmpl$2$1 = /*#__PURE__*/template(`<li><kbd>←</kbd> / <kbd>→</kbd> - rewind / fast-forward by 5 seconds</li>`, 6),\n _tmpl$3 = /*#__PURE__*/template(`<li><kbd>Shift</kbd> + <kbd>←</kbd> / <kbd>→</kbd> - rewind / fast-forward by 10%</li>`, 8),\n _tmpl$4 = /*#__PURE__*/template(`<li><kbd>[</kbd> / <kbd>]</kbd> - jump to the previous / next marker</li>`, 6),\n _tmpl$5 = /*#__PURE__*/template(`<li><kbd>0</kbd>, <kbd>1</kbd>, <kbd>2</kbd> ... <kbd>9</kbd> - jump to 0%, 10%, 20% ... 90%</li>`, 10),\n _tmpl$6 = /*#__PURE__*/template(`<li><kbd>,</kbd> / <kbd>.</kbd> - step back / forward, a frame at a time (when paused)</li>`, 6),\n _tmpl$7 = /*#__PURE__*/template(`<li><kbd>m</kbd> - mute / unmute audio</li>`, 4),\n _tmpl$8 = /*#__PURE__*/template(`<div class=\"ap-overlay ap-overlay-help\"><div><div><p>Keyboard shortcuts</p><ul><li><kbd>f</kbd> - toggle fullscreen mode</li><li><kbd>k</kbd> - toggle keystroke overlay</li><li><kbd>?</kbd> - show this help popup</li></ul></div></div></div>`, 22);\nvar HelpOverlay = props => {\n const e = f => {\n return e => {\n e.preventDefault();\n f(e);\n };\n };\n return (() => {\n const _el$ = _tmpl$8.cloneNode(true),\n _el$2 = _el$.firstChild,\n _el$3 = _el$2.firstChild,\n _el$4 = _el$3.firstChild,\n _el$5 = _el$4.nextSibling,\n _el$10 = _el$5.firstChild,\n _el$11 = _el$10.nextSibling,\n _el$13 = _el$11.nextSibling;\n addEventListener(_el$, \"click\", e(props.onClose));\n _el$2.$$click = e => {\n e.stopPropagation();\n };\n insert(_el$5, createComponent(Show, {\n get when() {\n return props.isPausable;\n },\n get children() {\n return _tmpl$$2.cloneNode(true);\n }\n }), _el$10);\n insert(_el$5, createComponent(Show, {\n get when() {\n return props.isSeekable;\n },\n get children() {\n return [_tmpl$2$1.cloneNode(true), _tmpl$3.cloneNode(true), _tmpl$4.cloneNode(true), _tmpl$5.cloneNode(true), _tmpl$6.cloneNode(true)];\n }\n }), _el$10);\n insert(_el$5, createComponent(Show, {\n get when() {\n return props.hasAudio;\n },\n get children() {\n return _tmpl$7.cloneNode(true);\n }\n }), _el$13);\n return _el$;\n })();\n};\ndelegateEvents([\"click\"]);\n\nconst _tmpl$$1 = /*#__PURE__*/template(`<div><kbd></kbd></div>`, 4),\n _tmpl$2 = /*#__PURE__*/template(`<div class=\"ap-overlay ap-overlay-keystrokes\"></div>`, 2);\nconst VISIBLE_MS = 2000;\nconst FADE_MS = 700;\nfunction KeystrokePill(props) {\n const [isFading, setIsFading] = createSignal(false);\n createEffect(() => {\n const {\n id\n } = props.keystroke;\n // Subscribe to append/increment bumps so the fade timer restarts.\n props.keystroke.rev();\n setIsFading(false);\n const fadeTimeoutId = setTimeout(function () {\n setIsFading(true);\n }, VISIBLE_MS);\n const expireTimeoutId = setTimeout(function () {\n props.onExpired(id);\n }, VISIBLE_MS + FADE_MS);\n onCleanup(() => {\n clearTimeout(fadeTimeoutId);\n clearTimeout(expireTimeoutId);\n });\n });\n return (() => {\n const _el$ = _tmpl$$1.cloneNode(true),\n _el$2 = _el$.firstChild;\n insert(_el$2, () => props.keystroke.label());\n createRenderEffect(() => className(_el$, isFading() ? \"ap-keystroke-pill fading\" : \"ap-keystroke-pill\"));\n return _el$;\n })();\n}\nvar KeystrokesOverlay = props => {\n return (() => {\n const _el$3 = _tmpl$2.cloneNode(true);\n insert(_el$3, createComponent(For, {\n get each() {\n return props.keystrokes;\n },\n children: keystroke => createComponent(KeystrokePill, {\n keystroke: keystroke,\n get onExpired() {\n return props.onExpired;\n }\n })\n }));\n createRenderEffect(() => _el$3.style.setProperty(\"--ap-keystrokes-bottom\", `${(props.bottomOffset ?? 0) + 12}px`));\n return _el$3;\n })();\n};\n\nconst controlSeqs = Object.fromEntries(Array.from({\n length: 26\n}, (_, i) => {\n const char = String.fromCharCode(i + 1);\n const key = String.fromCharCode(97 + i);\n return [char, `C-${key}`];\n}));\nconst basicSeqs = {\n ...controlSeqs,\n \"\\b\": \"Back\",\n \"\\r\": \"Ret\",\n \"\\t\": \"Tab\",\n \"\\u001b\": \"Esc\",\n \"\\u007f\": \"Back\"\n};\nconst singles = {\n \" \": \"Spc\"\n};\nconst functionalKeys = {\n 57358: \"Caps\",\n 57359: \"Scroll\",\n 57360: \"Num\",\n 57361: \"Print\",\n 57362: \"Pause\",\n 57363: \"Menu\",\n 57414: \"Enter\",\n 57421: \"PgUp\",\n 57422: \"PgDn\"\n};\nconst arrowKeys = {\n up: \"↑\",\n down: \"↓\",\n left: \"←\",\n right: \"→\"\n};\nconst csiFinalKeys = {\n A: arrowKeys.up,\n B: arrowKeys.down,\n C: arrowKeys.right,\n D: arrowKeys.left,\n F: \"End\",\n H: \"Home\",\n P: \"F1\",\n Q: \"F2\",\n R: \"F3\",\n S: \"F4\"\n};\nconst csiTildeKeys = {\n 2: \"Ins\",\n 3: \"Del\",\n 5: \"PgUp\",\n 6: \"PgDn\",\n 15: \"F5\",\n 17: \"F6\",\n 18: \"F7\",\n 19: \"F8\",\n 20: \"F9\",\n 21: \"F10\",\n 23: \"F11\",\n 24: \"F12\"\n};\nfunction addModifierPrefix(key, modifier) {\n const mod = Number.parseInt(modifier.split(\":\")[0], 10);\n if (!Number.isFinite(mod) || mod <= 1) {\n return key;\n }\n const bits = mod - 1;\n const parts = [];\n if (bits & 4) parts.push(\"C\");\n if (bits & 2) parts.push(\"A\");\n if (bits & 1) parts.push(\"S\");\n return parts.length === 0 ? key : `${parts.join(\"-\")}-${key}`;\n}\nfunction codepointToKey(codepoint) {\n if (codepoint in functionalKeys) {\n return functionalKeys[codepoint];\n }\n const char = String.fromCodePoint(codepoint);\n if (char in basicSeqs) {\n return basicSeqs[char];\n }\n if (char in singles) {\n return singles[char];\n }\n return char;\n}\nfunction formatCsiSequence(seq) {\n const csiUAlt = seq.match(/^(\\d+);;(\\d+)u$/);\n if (csiUAlt !== null) {\n return `A-${codepointToKey(Number.parseInt(csiUAlt[2], 10))}`;\n }\n const csiU = seq.match(/^(\\d+)(?:;([\\d:]+))?u$/);\n if (csiU !== null) {\n const key = codepointToKey(Number.parseInt(csiU[1], 10));\n return csiU[2] === undefined ? key : addModifierPrefix(key, csiU[2]);\n }\n const finalKey = seq.match(/^O?([A-Z])$/);\n if (finalKey !== null && finalKey[1] in csiFinalKeys) {\n return csiFinalKeys[finalKey[1]];\n }\n const tildeKey = seq.match(/^(\\d+)~$/);\n if (tildeKey !== null && tildeKey[1] in csiTildeKeys) {\n return csiTildeKeys[tildeKey[1]];\n }\n const modifyOtherKeys = seq.match(/^27;([\\d:]+);(\\d+)~$/);\n if (modifyOtherKeys !== null) {\n const key = codepointToKey(Number.parseInt(modifyOtherKeys[2], 10));\n return addModifierPrefix(key, modifyOtherKeys[1]);\n }\n const modifiedFinal = seq.match(/^(?:1;)?([\\d:]+)([A-Z])$/);\n if (modifiedFinal !== null && modifiedFinal[2] in csiFinalKeys) {\n return addModifierPrefix(csiFinalKeys[modifiedFinal[2]], modifiedFinal[1]);\n }\n const modifiedTilde = seq.match(/^(\\d+);([\\d:]+)~$/);\n if (modifiedTilde !== null && modifiedTilde[1] in csiTildeKeys) {\n return addModifierPrefix(csiTildeKeys[modifiedTilde[1]], modifiedTilde[2]);\n }\n return \"\";\n}\nfunction formatEscapeSequence(data) {\n const seq = data.slice(1);\n if (seq.length === 1) {\n if (seq in basicSeqs) {\n return \"A-\" + basicSeqs[seq];\n }\n return seq in singles ? \"A-\" + singles[seq] : \"A-\" + seq;\n }\n if (seq.startsWith(\"[\")) {\n return formatCsiSequence(seq.slice(1));\n }\n if (seq.startsWith(\"O\")) {\n return formatCsiSequence(seq);\n }\n return \"\";\n}\nfunction formatKeystroke(data) {\n if (data in basicSeqs) {\n return {\n kind: \"special\",\n label: basicSeqs[data]\n };\n }\n if (data.length === 1) {\n if (data in singles) {\n return {\n kind: \"special\",\n label: singles[data]\n };\n }\n return {\n kind: \"text\",\n label: data\n };\n }\n if (data.startsWith(\"\\u001b\")) {\n const key = formatEscapeSequence(data);\n if (key !== \"\") {\n return {\n kind: \"special\",\n label: key\n };\n }\n }\n return null;\n}\n\nconst _tmpl$ = /*#__PURE__*/template(`<div class=\"ap-wrapper\" tabindex=\"-1\"><div></div></div>`, 4);\nconst CONTROL_BAR_HEIGHT = 32; // must match height of div.ap-control-bar in CSS\nvar Player = props => {\n const logger = props.logger;\n const core = props.core;\n const autoPlay = props.autoPlay;\n const charW = props.charW;\n const charH = props.charH;\n const bordersW = props.bordersW;\n const bordersH = props.bordersH;\n const themeOption = props.theme ?? \"auto/asciinema\";\n const preferEmbeddedTheme = themeOption.slice(0, 5) === \"auto/\";\n const themeName = preferEmbeddedTheme ? themeOption.slice(5) : themeOption;\n const [terminalSize, setTerminalSize] = createTerminalSizeSignal(props.cols, props.rows);\n const [containerSize, setContainerSize] = createContainerSizeSignal();\n const [isPausable, setIsPausable] = createSignal(true);\n const [isSeekable, setIsSeekable] = createSignal(true);\n const [isFullscreen, setIsFullscreen] = createSignal(false);\n const [currentTime, setCurrentTime] = createSignal(null);\n const [remainingTime, setRemainingTime] = createSignal(null);\n const [progress, setProgress] = createSignal(null);\n const [isPlaying, setIsPlaying] = createSignal(false);\n const [isMuted, setIsMuted] = createSignal(undefined);\n const [wasPlaying, setWasPlaying] = createSignal(false);\n const [overlay, setOverlay] = createSignal(!autoPlay ? \"start\" : null);\n const [infoMessage, setInfoMessage] = createSignal(null);\n const [blinking, setBlinking] = createSignal(false);\n const [duration, setDuration] = createSignal(null);\n const [markers, setMarkers] = createSignal([]);\n const [userActive, setUserActive] = createSignal(false);\n const [isHelpVisible, setIsHelpVisible] = createSignal(false);\n const [originalTheme, setOriginalTheme] = createSignal(null);\n const terminalCols = createMemo(() => terminalSize().cols || 80);\n const terminalRows = createMemo(() => terminalSize().rows || 24);\n const controlBarHeight = () => props.controls === false ? 0 : CONTROL_BAR_HEIGHT;\n const [isKeystrokeOverlayEnabled, setKeystrokeOverlayEnabled] = createSignal(props.keystrokeOverlay !== false);\n const [keystrokes, setKeystrokes] = createSignal([]);\n const controlsVisible = () => props.controls === true || props.controls === \"auto\" && userActive();\n let nextKeystrokeId = 1;\n let userActivityTimeoutId;\n let timeUpdateIntervalId;\n let wrapperRef;\n let playerRef;\n let controlBarRef;\n let resizeObserver;\n function onPlaying() {\n setBlinking(true);\n startTimeUpdates();\n }\n function onStopped() {\n setBlinking(false);\n stopTimeUpdates();\n updateTime();\n }\n const onCoreReady = ({\n isPausable,\n isSeekable\n }) => {\n batch(() => {\n setIsPausable(isPausable);\n setIsSeekable(isSeekable);\n });\n };\n const onCoreMetadata = meta => {\n batch(() => {\n if (meta.duration !== undefined) {\n setDuration(meta.duration);\n setCurrentTime(0);\n setRemainingTime(meta.duration);\n setProgress(0);\n }\n if (meta.markers !== undefined) {\n setMarkers(meta.markers);\n }\n if (meta.hasAudio !== undefined) {\n setIsMuted(meta.hasAudio ? false : undefined);\n }\n });\n };\n const onCoreReset = ({\n size,\n theme\n }) => {\n batch(() => {\n setTerminalSize(size);\n if (theme !== undefined) {\n setOriginalTheme(theme);\n }\n });\n };\n const onCoreResize = size => {\n setTerminalSize(size);\n };\n const onCorePlay = () => {\n setOverlay(null);\n };\n const onCorePlaying = () => {\n batch(() => {\n setIsPlaying(true);\n setWasPlaying(true);\n setOverlay(null);\n onPlaying();\n });\n };\n const onCorePause = () => {\n batch(() => {\n setIsPlaying(false);\n onStopped();\n });\n };\n const onCoreLoading = () => {\n batch(() => {\n setIsPlaying(false);\n onStopped();\n setOverlay(\"loader\");\n clearKeystrokes();\n });\n };\n const onCoreOffline = ({\n message\n }) => {\n batch(() => {\n setIsPlaying(false);\n onStopped();\n clearKeystrokes();\n if (message !== undefined) {\n setInfoMessage(message);\n setOverlay(\"info\");\n }\n });\n };\n const onCoreMuted = muted => {\n setIsMuted(muted);\n };\n const stats = {\n terminal: {\n renders: 0\n }\n };\n const onCoreEnded = ({\n message\n }) => {\n batch(() => {\n setIsPlaying(false);\n onStopped();\n if (message !== undefined) {\n setInfoMessage(message);\n setOverlay(\"info\");\n }\n });\n logger.debug(\"stats\", stats.terminal);\n };\n const onCoreError = () => {\n clearKeystrokes();\n setOverlay(\"error\");\n };\n const onCoreInput = ({\n data\n }) => {\n if (!isKeystrokeOverlayEnabled()) {\n return;\n }\n const keystroke = formatKeystroke(data);\n if (keystroke === null) {\n return;\n }\n const currentKeystrokes = keystrokes();\n const latestKeystroke = currentKeystrokes[currentKeystrokes.length - 1];\n if (latestKeystroke?.kind === \"text\" && keystroke.kind === \"text\") {\n latestKeystroke.append(keystroke.label);\n return;\n }\n if (latestKeystroke?.kind === \"special\" && keystroke.kind === \"special\" && latestKeystroke.key === keystroke.label) {\n latestKeystroke.increment();\n return;\n }\n setKeystrokes([...currentKeystrokes, createKeystroke(keystroke)].slice(-4));\n };\n const onCoreSeeked = () => {\n updateTime();\n clearKeystrokes();\n };\n const clearKeystrokes = () => {\n setKeystrokes([]);\n };\n const removeKeystroke = id => {\n setKeystrokes(keystrokes => keystrokes.filter(keystroke => keystroke.id !== id));\n };\n const createKeystroke = ({\n kind,\n label\n }) => {\n const [value, setValue] = createSignal(label);\n const [count, setCount] = createSignal(1);\n const [rev, setRev] = createSignal(0);\n return {\n id: nextKeystrokeId++,\n kind,\n key: label,\n label: () => count() === 1 ? value() : `${value()} × ${count()}`,\n rev,\n append: label => {\n setValue(value => (value + label).slice(-10));\n setRev(rev => rev + 1);\n },\n increment: () => {\n setCount(count => count + 1);\n setRev(rev => rev + 1);\n }\n };\n };\n core.addEventListener(\"ready\", onCoreReady);\n core.addEventListener(\"metadata\", onCoreMetadata);\n core.addEventListener(\"play\", onCorePlay);\n core.addEventListener(\"playing\", onCorePlaying);\n core.addEventListener(\"pause\", onCorePause);\n core.addEventListener(\"loading\", onCoreLoading);\n core.addEventListener(\"offline\", onCoreOffline);\n core.addEventListener(\"muted\", onCoreMuted);\n core.addEventListener(\"ended\", onCoreEnded);\n core.addEventListener(\"error\", onCoreError);\n core.addEventListener(\"input\", onCoreInput);\n core.addEventListener(\"seeked\", onCoreSeeked);\n core.addEventListener(\"reset\", onCoreReset);\n core.addEventListener(\"resize\", onCoreResize);\n const setupResizeObserver = () => {\n resizeObserver = new ResizeObserver(debounce(_entries => {\n setContainerSize({\n width: wrapperRef.offsetWidth,\n height: wrapperRef.offsetHeight\n });\n wrapperRef.dispatchEvent(new CustomEvent(\"resize\", {\n detail: {\n el: playerRef\n }\n }));\n }, 10));\n resizeObserver.observe(wrapperRef);\n };\n onMount(async () => {\n logger.info(\"view: mounted\");\n logger.debug(\"view: font measurements\", {\n charW,\n charH\n });\n setupResizeObserver();\n setContainerSize({\n width: wrapperRef.offsetWidth,\n height: wrapperRef.offsetHeight\n });\n });\n onCleanup(() => {\n core.removeEventListener(\"ready\", onCoreReady);\n core.removeEventListener(\"metadata\", onCoreMetadata);\n core.removeEventListener(\"play\", onCorePlay);\n core.removeEventListener(\"playing\", onCorePlaying);\n core.removeEventListener(\"pause\", onCorePause);\n core.removeEventListener(\"loading\", onCoreLoading);\n core.removeEventListener(\"offline\", onCoreOffline);\n core.removeEventListener(\"muted\", onCoreMuted);\n core.removeEventListener(\"ended\", onCoreEnded);\n core.removeEventListener(\"error\", onCoreError);\n core.removeEventListener(\"input\", onCoreInput);\n core.removeEventListener(\"seeked\", onCoreSeeked);\n core.removeEventListener(\"reset\", onCoreReset);\n core.removeEventListener(\"resize\", onCoreResize);\n core.stop();\n stopTimeUpdates();\n resizeObserver.disconnect();\n });\n const terminalElementSize = createMemo(() => {\n const terminalW = charW * terminalCols() + bordersW;\n const terminalH = charH * terminalRows() + bordersH;\n let fit = props.fit ?? \"width\";\n const currentContainerSize = containerSize();\n if (fit === \"both\" || isFullscreen()) {\n const containerRatio = currentContainerSize.width / (currentContainerSize.height - controlBarHeight());\n const terminalRatio = terminalW / terminalH;\n if (containerRatio > terminalRatio) {\n fit = \"height\";\n } else {\n fit = \"width\";\n }\n }\n if (fit === false || fit === \"none\") {\n return {};\n } else if (fit === \"width\") {\n const scale = currentContainerSize.width / terminalW;\n return {\n scale: scale,\n width: currentContainerSize.width,\n height: terminalH * scale + controlBarHeight()\n };\n } else if (fit === \"height\") {\n const scale = (currentContainerSize.height - controlBarHeight()) / terminalH;\n return {\n scale: scale,\n width: terminalW * scale,\n height: currentContainerSize.height\n };\n } else {\n throw new Error(`unsupported fit mode: ${fit}`);\n }\n });\n const onFullscreenChange = () => {\n setIsFullscreen(document.fullscreenElement ?? document.webkitFullscreenElement);\n };\n const toggleFullscreen = () => {\n if (isFullscreen()) {\n (document.exitFullscreen ?? document.webkitExitFullscreen ?? (() => {})).apply(document);\n } else {\n (wrapperRef.requestFullscreen ?? wrapperRef.webkitRequestFullscreen ?? (() => {})).apply(wrapperRef);\n }\n };\n const toggleHelp = () => {\n if (isHelpVisible()) {\n setIsHelpVisible(false);\n } else {\n core.pause();\n setIsHelpVisible(true);\n }\n };\n const toggleKeystrokeOverlay = () => {\n if (isKeystrokeOverlayEnabled()) {\n clearKeystrokes();\n setKeystrokeOverlayEnabled(false);\n } else {\n setKeystrokeOverlayEnabled(true);\n }\n };\n const onKeyDown = e => {\n if (e.altKey || e.metaKey || e.ctrlKey) {\n return;\n }\n\n // Let a focused control button activate itself on Space/Enter rather than\n // also triggering the global keyboard shortcuts.\n if ((e.key == \" \" || e.key == \"Enter\") && e.target instanceof HTMLButtonElement) {\n return;\n }\n if (e.key == \" \") {\n togglePlay();\n } else if (e.key == \",\") {\n core.step(-1).then(updateTime);\n } else if (e.key == \".\") {\n core.step().then(updateTime);\n } else if (e.key == \"f\") {\n toggleFullscreen();\n } else if (e.key == \"m\") {\n toggleMuted();\n } else if (e.key == \"[\") {\n core.seek({\n marker: \"prev\"\n });\n } else if (e.key == \"]\") {\n core.seek({\n marker: \"next\"\n });\n } else if (e.key.charCodeAt(0) >= 48 && e.key.charCodeAt(0) <= 57) {\n const pos = (e.key.charCodeAt(0) - 48) / 10;\n core.seek(`${pos * 100}%`);\n } else if (e.key == \"?\") {\n toggleHelp();\n } else if (e.key == \"k\") {\n toggleKeystrokeOverlay();\n } else if (e.key == \"ArrowLeft\") {\n if (e.shiftKey) {\n core.seek(\"<<<\");\n } else {\n core.seek(\"<<\");\n }\n } else if (e.key == \"ArrowRight\") {\n if (e.shiftKey) {\n core.seek(\">>>\");\n } else {\n core.seek(\">>\");\n }\n } else if (e.key == \"Escape\") {\n setIsHelpVisible(false);\n } else {\n return;\n }\n e.stopPropagation();\n e.preventDefault();\n };\n const wrapperOnMouseMove = () => {\n if (isFullscreen()) {\n onUserActive(true);\n }\n };\n const playerOnMouseLeave = () => {\n if (!isFullscreen()) {\n onUserActive(false);\n }\n };\n const startTimeUpdates = () => {\n clearInterval(timeUpdateIntervalId);\n timeUpdateIntervalId = setInterval(updateTime, 100);\n };\n const stopTimeUpdates = () => {\n clearInterval(timeUpdateIntervalId);\n };\n const updateTime = async () => {\n const newCurrentTime = await core.getCurrentTime();\n const newRemainingTime = await core.getRemainingTime();\n const newProgress = await core.getProgress();\n batch(() => {\n setCurrentTime(newCurrentTime);\n setRemainingTime(newRemainingTime);\n setProgress(newProgress);\n });\n };\n const onUserActive = show => {\n clearTimeout(userActivityTimeoutId);\n if (show) {\n userActivityTimeoutId = setTimeout(() => onUserActive(false), 2000);\n }\n setUserActive(show);\n };\n const embeddedTheme = createMemo(() => preferEmbeddedTheme ? originalTheme() : null);\n const playerStyle = () => {\n const style = {};\n if ((props.fit === false || props.fit === \"none\") && props.terminalFontSize !== undefined) {\n if (props.terminalFontSize === \"small\") {\n style[\"font-size\"] = \"12px\";\n } else if (props.terminalFontSize === \"medium\") {\n style[\"font-size\"] = \"18px\";\n } else if (props.terminalFontSize === \"big\") {\n style[\"font-size\"] = \"24px\";\n } else {\n style[\"font-size\"] = props.terminalFontSize;\n }\n }\n const size = terminalElementSize();\n if (size.width !== undefined) {\n style[\"width\"] = `${size.width}px`;\n style[\"height\"] = `${size.height}px`;\n }\n if (props.terminalFontFamily !== undefined) {\n style[\"--term-font-family\"] = props.terminalFontFamily;\n }\n const themeColors = embeddedTheme();\n if (themeColors) {\n style[\"--term-color-foreground\"] = themeColors.foreground;\n style[\"--term-color-background\"] = themeColors.background;\n }\n return style;\n };\n const play = () => {\n core.play();\n };\n const togglePlay = () => {\n if (isPlaying()) {\n core.pause();\n } else {\n core.play();\n }\n };\n const toggleMuted = () => {\n if (isMuted() === true) {\n core.unmute();\n } else {\n core.mute();\n }\n };\n const seek = pos => {\n core.seek(pos);\n };\n const playerClass = () => `ap-player ap-default-term-ff asciinema-player-theme-${themeName}`;\n const terminalScale = () => terminalElementSize()?.scale;\n const el = (() => {\n const _el$ = _tmpl$.cloneNode(true),\n _el$2 = _el$.firstChild;\n const _ref$ = wrapperRef;\n typeof _ref$ === \"function\" ? use(_ref$, _el$) : wrapperRef = _el$;\n _el$.addEventListener(\"webkitfullscreenchange\", onFullscreenChange);\n _el$.addEventListener(\"fullscreenchange\", onFullscreenChange);\n _el$.$$mousemove = wrapperOnMouseMove;\n _el$.$$keydown = onKeyDown;\n const _ref$2 = playerRef;\n typeof _ref$2 === \"function\" ? use(_ref$2, _el$2) : playerRef = _el$2;\n _el$2.$$mousemove = () => onUserActive(true);\n _el$2.addEventListener(\"mouseleave\", playerOnMouseLeave);\n insert(_el$2, createComponent(Terminal, {\n get cols() {\n return terminalCols();\n },\n get rows() {\n return terminalRows();\n },\n get scale() {\n return terminalScale();\n },\n get blinking() {\n return blinking();\n },\n get cursorMode() {\n return props.cursorMode;\n },\n get boldIsBright() {\n return props.boldIsBright;\n },\n get adaptivePalette() {\n return props.adaptivePalette;\n },\n get lineHeight() {\n return props.terminalLineHeight;\n },\n preferEmbeddedTheme: preferEmbeddedTheme,\n core: core,\n logger: logger,\n get onReady() {\n return props.onTerminalReady;\n },\n get stats() {\n return stats.terminal;\n }\n }), null);\n insert(_el$2, createComponent(Show, {\n get when() {\n return props.controls !== false;\n },\n get children() {\n return createComponent(ControlBar, {\n get duration() {\n return duration();\n },\n get currentTime() {\n return currentTime();\n },\n get remainingTime() {\n return remainingTime();\n },\n get progress() {\n return progress();\n },\n get markers() {\n return markers();\n },\n get isPlaying() {\n return isPlaying() || overlay() == \"loader\";\n },\n get isPausable() {\n return isPausable();\n },\n get isSeekable() {\n return isSeekable();\n },\n get isMuted() {\n return isMuted();\n },\n onPlayClick: togglePlay,\n onFullscreenClick: toggleFullscreen,\n onHelpClick: toggleHelp,\n onSeekClick: seek,\n onMuteClick: toggleMuted,\n ref(r$) {\n const _ref$3 = controlBarRef;\n typeof _ref$3 === \"function\" ? _ref$3(r$) : controlBarRef = r$;\n }\n });\n }\n }), null);\n insert(_el$2, createComponent(Show, {\n get when() {\n return keystrokes().length > 0;\n },\n get children() {\n return createComponent(KeystrokesOverlay, {\n get bottomOffset() {\n return controlBarHeight();\n },\n get keystrokes() {\n return keystrokes();\n },\n onExpired: removeKeystroke\n });\n }\n }), null);\n insert(_el$2, createComponent(Switch, {\n get children() {\n return [createComponent(Match, {\n get when() {\n return overlay() == \"start\";\n },\n get children() {\n return createComponent(StartOverlay, {\n onClick: play\n });\n }\n }), createComponent(Match, {\n get when() {\n return overlay() == \"loader\";\n },\n get children() {\n return createComponent(LoaderOverlay, {});\n }\n }), createComponent(Match, {\n get when() {\n return overlay() == \"error\";\n },\n get children() {\n return createComponent(ErrorOverlay, {});\n }\n })];\n }\n }), null);\n insert(_el$2, createComponent(Transition, {\n name: \"slide\",\n get children() {\n return createComponent(Show, {\n get when() {\n return overlay() == \"info\";\n },\n get children() {\n return createComponent(InfoOverlay, {\n get message() {\n return infoMessage();\n },\n get wasPlaying() {\n return wasPlaying();\n }\n });\n }\n });\n }\n }), null);\n insert(_el$2, createComponent(Show, {\n get when() {\n return isHelpVisible();\n },\n get children() {\n return createComponent(HelpOverlay, {\n onClose: () => setIsHelpVisible(false),\n get isPausable() {\n return isPausable();\n },\n get isSeekable() {\n return isSeekable();\n },\n get hasAudio() {\n return isMuted() !== undefined;\n }\n });\n }\n }), null);\n createRenderEffect(_p$ => {\n const _v$ = !!controlsVisible(),\n _v$2 = playerClass(),\n _v$3 = playerStyle();\n _v$ !== _p$._v$ && _el$.classList.toggle(\"ap-hud\", _p$._v$ = _v$);\n _v$2 !== _p$._v$2 && className(_el$2, _p$._v$2 = _v$2);\n _p$._v$3 = style(_el$2, _v$3, _p$._v$3);\n return _p$;\n }, {\n _v$: undefined,\n _v$2: undefined,\n _v$3: undefined\n });\n return _el$;\n })();\n return el;\n};\nfunction createTerminalSizeSignal(cols, rows) {\n return createSignal({\n cols,\n rows\n }, {\n equals: (newVal, oldVal) => newVal.cols === oldVal.cols && newVal.rows === oldVal.rows\n });\n}\nfunction createContainerSizeSignal() {\n return createSignal({\n width: 0,\n height: 0\n }, {\n equals: (newVal, oldVal) => newVal.width === oldVal.width && newVal.height === oldVal.height\n });\n}\ndelegateEvents([\"keydown\", \"mousemove\"]);\n\nfunction mount(core, elem, opts = {}) {\n const metrics = measureTerminal(opts.terminalFontFamily, opts.terminalLineHeight);\n const props = {\n core: core,\n logger: opts.logger,\n cols: opts.cols,\n rows: opts.rows,\n fit: opts.fit,\n controls: opts.controls,\n cursorMode: opts.cursorMode,\n keystrokeOverlay: opts.keystrokeOverlay,\n autoPlay: opts.autoPlay,\n boldIsBright: opts.boldIsBright,\n adaptivePalette: opts.adaptivePalette,\n terminalFontSize: opts.terminalFontSize,\n terminalFontFamily: opts.terminalFontFamily,\n terminalLineHeight: opts.terminalLineHeight,\n theme: opts.theme,\n onTerminalReady: opts.onTerminalReady,\n ...metrics\n };\n let el;\n const dispose = render(() => {\n el = createComponent(Player, props);\n return el;\n }, elem);\n return {\n el: el,\n dispose: dispose\n };\n}\nfunction measureTerminal(fontFamily, lineHeight) {\n const cols = 80;\n const rows = 24;\n const playerDiv = document.createElement(\"div\");\n playerDiv.className = \"ap-default-term-ff\";\n playerDiv.style.height = \"0px\";\n playerDiv.style.overflow = \"hidden\";\n playerDiv.style.fontSize = \"15px\"; // must match font-size of div.asciinema-player in CSS\n\n if (fontFamily !== undefined) {\n playerDiv.style.setProperty(\"--term-font-family\", fontFamily);\n }\n const termDiv = document.createElement(\"div\");\n termDiv.className = \"ap-term\";\n termDiv.style.width = `${cols}ch`;\n termDiv.style.height = `${rows * (lineHeight ?? 1.3333333333)}em`;\n termDiv.style.fontSize = \"100%\";\n playerDiv.appendChild(termDiv);\n document.body.appendChild(playerDiv);\n const metrics = {\n charW: termDiv.clientWidth / cols,\n charH: termDiv.clientHeight / rows,\n bordersW: termDiv.offsetWidth - termDiv.clientWidth,\n bordersH: termDiv.offsetHeight - termDiv.clientHeight\n };\n document.body.removeChild(playerDiv);\n return metrics;\n}\n\nconst CORE_OPTS = [\"audioUrl\", \"autoPlay\", \"autoplay\", \"cols\", \"idleTimeLimit\", \"loop\", \"markers\", \"pauseOnMarkers\", \"poster\", \"preload\", \"rows\", \"speed\", \"startAt\"];\nconst UI_OPTS = [\"autoPlay\", \"autoplay\", \"boldIsBright\", \"cols\", \"adaptivePalette\", \"controls\", \"cursorMode\", \"fit\", \"keystrokeOverlay\", \"rows\", \"terminalFontFamily\", \"terminalFontSize\", \"terminalLineHeight\", \"theme\"];\nfunction coreOpts(inputOpts, overrides = {}) {\n const opts = Object.fromEntries(Object.entries(inputOpts).filter(([key]) => CORE_OPTS.includes(key)));\n opts.autoPlay ??= opts.autoplay;\n opts.speed ??= 1.0;\n return {\n ...opts,\n ...overrides\n };\n}\nfunction uiOpts(inputOpts, overrides = {}) {\n const opts = Object.fromEntries(Object.entries(inputOpts).filter(([key]) => UI_OPTS.includes(key)));\n opts.autoPlay ??= opts.autoplay;\n opts.adaptivePalette ??= false;\n opts.controls ??= \"auto\";\n opts.cursorMode ??= \"blinking\";\n opts.keystrokeOverlay ??= false;\n if (![\"blinking\", \"steady\", \"hidden\"].includes(opts.cursorMode)) {\n throw new Error(`unsupported cursor mode: ${opts.cursorMode}`);\n }\n if (typeof opts.keystrokeOverlay !== \"boolean\") {\n throw new Error(`unsupported keystroke overlay option: ${opts.keystrokeOverlay}`);\n }\n return {\n ...opts,\n ...overrides\n };\n}\n\nexport { coreOpts as c, mount as m, uiOpts as u };\n","import { C as Core } from './core-BSn7GtYU.js';\nimport { c as coreOpts, m as mount, u as uiOpts } from './opts-Dj5f5MR1.js';\nimport { D as DummyLogger } from './logging-DeB0koVt.js';\n\nfunction create(src, elem, opts = {}) {\n const logger = opts.logger ?? new DummyLogger();\n const core = new Core(src, coreOpts(opts, {\n logger\n }));\n const onTerminalReady = () => core.terminalReady();\n const {\n el,\n dispose\n } = mount(core, elem, uiOpts(opts, {\n logger,\n onTerminalReady\n }));\n const ready = core.init();\n void ready.catch(() => {});\n const player = {\n el,\n dispose,\n getCurrentTime: () => core.getCurrentTime(),\n getDuration: () => core.getDuration(),\n play: () => core.play(),\n pause: () => core.pause(),\n seek: pos => core.seek(pos)\n };\n player.addEventListener = (name, callback) => {\n return core.addEventListener(name, callback.bind(player));\n };\n return player;\n}\n\nexport { create };\n","import { create } from \"asciinema-player\";\n\nimport \"asciinema-player/dist/bundle/asciinema-player.css\";\n\nimport { CSSProperties, FC, useEffect, useRef } from \"react\";\n\ninterface AsciinemaPlayerProps {\n id?: string;\n inputUrl: string;\n outputUrl: string;\n timingUrl: string;\n rows?: number;\n cols?: number;\n fit?: \"width\" | \"height\" | \"both\" | \"none\" | false;\n style?: CSSProperties;\n speed?: number;\n autoPlay?: boolean;\n loop?: boolean;\n theme?: string;\n idleTimeLimit?: number;\n className?: string;\n}\n\nconst AsciinemaPlayerImpl: FC<AsciinemaPlayerProps> = ({\n id,\n rows,\n cols,\n inputUrl,\n outputUrl,\n timingUrl,\n fit,\n speed,\n autoPlay,\n loop,\n theme,\n idleTimeLimit = 2,\n style,\n}) => {\n const playerContainerRef = useRef<HTMLDivElement>(null);\n\n // eslint-disable-next-line tsmono/no-raw-use-effect -- baselined at rule introduction; migrate to a named hook or derived state\n useEffect(() => {\n if (!playerContainerRef.current) return;\n\n const player = create(\n {\n url: [timingUrl, outputUrl, inputUrl],\n parser: \"typescript\",\n },\n playerContainerRef.current,\n {\n rows,\n cols,\n autoPlay,\n loop,\n theme,\n speed,\n idleTimeLimit,\n fit,\n }\n );\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n player.play();\n\n return () => {\n player.dispose();\n };\n }, [\n timingUrl,\n outputUrl,\n inputUrl,\n rows,\n cols,\n autoPlay,\n loop,\n theme,\n speed,\n idleTimeLimit,\n fit,\n ]);\n\n return (\n <div\n id={`asciinema-player-${id || \"default\"}`}\n ref={playerContainerRef}\n style={{ ...style }}\n />\n );\n};\n\nexport default AsciinemaPlayerImpl;\nexport type { AsciinemaPlayerProps };\n"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}
1
+ {"version":3,"file":"AsciinemaPlayerImpl-DrztGkXg.js","names":["clamp","previousState","startTransition","create","ret","create","useEffect","useRef","AsciinemaPlayerImpl","_c"],"sources":["../../../node_modules/.pnpm/asciinema-player@3.17.0/node_modules/asciinema-player/dist/logging-DeB0koVt.js","../../../node_modules/.pnpm/asciinema-player@3.17.0/node_modules/asciinema-player/dist/core-BSn7GtYU.js","../../../node_modules/.pnpm/asciinema-player@3.17.0/node_modules/asciinema-player/dist/opts-Dj5f5MR1.js","../../../node_modules/.pnpm/asciinema-player@3.17.0/node_modules/asciinema-player/dist/index.js","../../../packages/react/src/components/AsciinemaPlayerImpl.tsx"],"sourcesContent":["function parseNpt(time) {\n if (typeof time === \"number\") {\n return time;\n } else if (typeof time === \"string\") {\n return time.split(\":\").reverse().map(parseFloat).reduce((sum, n, i) => sum + n * Math.pow(60, i));\n } else {\n return undefined;\n }\n}\nfunction debounce(f, delay) {\n let timeout;\n return function (...args) {\n clearTimeout(timeout);\n timeout = setTimeout(() => f.apply(this, args), delay);\n };\n}\nfunction throttle(f, interval) {\n let enableCall = true;\n return function (...args) {\n if (!enableCall) return;\n enableCall = false;\n f.apply(this, args);\n setTimeout(() => enableCall = true, interval);\n };\n}\n\nfunction toErrorPayload(error) {\n return {\n name: typeof error?.name === \"string\" ? error.name : \"Error\",\n message: typeof error?.message === \"string\" ? error.message : String(error)\n };\n}\nfunction fromErrorPayload(payload) {\n const error = new Error(typeof payload?.message === \"string\" ? payload.message : \"Unknown error\");\n error.name = typeof payload?.name === \"string\" ? payload.name : \"Error\";\n return error;\n}\n\nconst FULL_HEX_COLOR_REGEX = /^#[0-9a-f]{6}$/;\nconst SHORT_HEX_COLOR_REGEX = /^#[0-9a-f]{3}$/;\nfunction normalizeHexColor(color, fallback = undefined) {\n if (typeof color !== \"string\") return fallback;\n const normalized = color.trim().toLowerCase();\n if (FULL_HEX_COLOR_REGEX.test(normalized)) {\n return normalized;\n }\n if (SHORT_HEX_COLOR_REGEX.test(normalized)) {\n return `#${normalized[1]}${normalized[1]}${normalized[2]}${normalized[2]}${normalized[3]}${normalized[3]}`;\n }\n return fallback;\n}\nfunction lerpOklab(t, c1, c2) {\n return [c1[0] + t * (c2[0] - c1[0]), c1[1] + t * (c2[1] - c1[1]), c1[2] + t * (c2[2] - c1[2])];\n}\nfunction hexToOklab(hex) {\n const [r, g, b] = hexToSrgb(hex).map(srgbToLinear);\n const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\n const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\n const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\n const l_ = Math.cbrt(l);\n const m_ = Math.cbrt(m);\n const s_ = Math.cbrt(s);\n return [0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_, 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_, 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_];\n}\nfunction oklabToHex(lab) {\n const rgb = oklabToSrgb(lab);\n if (isSrgbInGamut(rgb)) return srgbToHex(rgb);\n const [L, C, h] = oklabToOklch(lab);\n let low = 0;\n let high = C;\n let best = [L, 0, h];\n for (let i = 0; i < 24; i += 1) {\n const mid = (low + high) / 2;\n const candidate = [L, mid, h];\n const candidateRgb = oklabToSrgb(oklchToOklab(candidate));\n if (isSrgbInGamut(candidateRgb)) {\n low = mid;\n best = candidate;\n } else {\n high = mid;\n }\n }\n return srgbToHex(oklabToSrgb(oklchToOklab(best)));\n}\nfunction oklabToSrgb(lab) {\n const L = clamp(lab[0], 0, 1);\n const a = lab[1];\n const b = lab[2];\n const l_ = L + 0.3963377774 * a + 0.2158037573 * b;\n const m_ = L - 0.1055613458 * a - 0.0638541728 * b;\n const s_ = L - 0.0894841775 * a - 1.291485548 * b;\n const l = l_ ** 3;\n const m = m_ ** 3;\n const s = s_ ** 3;\n const r = 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s;\n const g = -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s;\n const blue = -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s;\n return [linearToSrgb(r), linearToSrgb(g), linearToSrgb(blue)];\n}\nfunction oklabToOklch([L, a, b]) {\n return [L, Math.hypot(a, b), Math.atan2(b, a)];\n}\nfunction oklchToOklab([L, C, h]) {\n return [L, C * Math.cos(h), C * Math.sin(h)];\n}\nfunction hexToSrgb(hex) {\n return [Number.parseInt(hex.slice(1, 3), 16) / 255, Number.parseInt(hex.slice(3, 5), 16) / 255, Number.parseInt(hex.slice(5, 7), 16) / 255];\n}\nfunction rgbToHex(r, g, b) {\n return `#${toHexByte(r)}${toHexByte(g)}${toHexByte(b)}`;\n}\nfunction srgbToHex(rgb) {\n return rgbToHex(rgb[0] * 255, rgb[1] * 255, rgb[2] * 255);\n}\nfunction srgbToLinear(c) {\n if (c <= 0.04045) return c / 12.92;\n return ((c + 0.055) / 1.055) ** 2.4;\n}\nfunction linearToSrgb(c) {\n if (c <= 0.0031308) return c * 12.92;\n return 1.055 * c ** (1 / 2.4) - 0.055;\n}\nfunction isSrgbInGamut([r, g, b]) {\n return r >= 0 && r <= 1 && g >= 0 && g <= 1 && b >= 0 && b <= 1;\n}\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\nfunction toHexByte(value) {\n const byte = Math.round(clamp(value, 0, 255));\n return byte.toString(16).padStart(2, \"0\");\n}\n\nclass DummyLogger {\n log(...args) {}\n debug(...args) {}\n info(...args) {}\n warn(...args) {}\n error(...args) {}\n}\nclass PrefixedLogger {\n constructor(logger, prefix) {\n this.logger = logger;\n this.prefix = prefix;\n }\n log(message, ...args) {\n this.logger.log(`${this.prefix}${message}`, ...args);\n }\n debug(message, ...args) {\n this.logger.debug(`${this.prefix}${message}`, ...args);\n }\n info(message, ...args) {\n this.logger.info(`${this.prefix}${message}`, ...args);\n }\n warn(message, ...args) {\n this.logger.warn(`${this.prefix}${message}`, ...args);\n }\n error(message, ...args) {\n this.logger.error(`${this.prefix}${message}`, ...args);\n }\n}\n\nexport { DummyLogger as D, PrefixedLogger as P, toErrorPayload as a, debounce as d, fromErrorPayload as f, hexToOklab as h, lerpOklab as l, normalizeHexColor as n, oklabToHex as o, parseNpt as p, rgbToHex as r, throttle as t };\n","import { n as normalizeHexColor, a as toErrorPayload, P as PrefixedLogger, p as parseNpt } from './logging-DeB0koVt.js';\n\nclass Clock {\n constructor(speed = 1.0) {\n this.speed = speed;\n this.startTime = performance.now();\n }\n getTime() {\n return this.speed * (performance.now() - this.startTime);\n }\n setTime(time) {\n this.startTime = performance.now() - time / this.speed;\n }\n}\nclass NullClock {\n constructor() {}\n getTime(_speed) {}\n setTime(_time) {}\n}\n\n// Efficient array transformations without intermediate array objects.\n// Inspired by Elixir's streams and Rust's iterator adapters.\n\nclass Stream {\n constructor(input, xfs) {\n this.input = typeof input.next === \"function\" ? input : input[Symbol.iterator]();\n this.xfs = xfs ?? [];\n }\n map(f) {\n return this.transform(Map$1(f));\n }\n flatMap(f) {\n return this.transform(FlatMap(f));\n }\n filter(f) {\n return this.transform(Filter(f));\n }\n take(n) {\n return this.transform(Take(n));\n }\n drop(n) {\n return this.transform(Drop(n));\n }\n transform(f) {\n return new Stream(this.input, this.xfs.concat([f]));\n }\n multiplex(other, comparator) {\n return new Stream(new Multiplexer(this[Symbol.iterator](), other[Symbol.iterator](), comparator));\n }\n toArray() {\n return Array.from(this);\n }\n [Symbol.iterator]() {\n let v = 0;\n let values = [];\n let flushed = false;\n const xf = compose(this.xfs, val => values.push(val));\n return {\n next: () => {\n if (v === values.length) {\n values = [];\n v = 0;\n }\n while (values.length === 0) {\n const next = this.input.next();\n if (next.done) {\n break;\n } else {\n xf.step(next.value);\n }\n }\n if (values.length === 0 && !flushed) {\n xf.flush();\n flushed = true;\n }\n if (values.length > 0) {\n return {\n done: false,\n value: values[v++]\n };\n } else {\n return {\n done: true\n };\n }\n }\n };\n }\n}\nfunction Map$1(f) {\n return emit => {\n return input => {\n emit(f(input));\n };\n };\n}\nfunction FlatMap(f) {\n return emit => {\n return input => {\n f(input).forEach(emit);\n };\n };\n}\nfunction Filter(f) {\n return emit => {\n return input => {\n if (f(input)) {\n emit(input);\n }\n };\n };\n}\nfunction Take(n) {\n let c = 0;\n return emit => {\n return input => {\n if (c < n) {\n emit(input);\n }\n c += 1;\n };\n };\n}\nfunction Drop(n) {\n let c = 0;\n return emit => {\n return input => {\n c += 1;\n if (c > n) {\n emit(input);\n }\n };\n };\n}\nfunction compose(xfs, push) {\n return xfs.reverse().reduce((next, curr) => {\n const xf = toXf(curr(next.step));\n return {\n step: xf.step,\n flush: () => {\n xf.flush();\n next.flush();\n }\n };\n }, toXf(push));\n}\nfunction toXf(xf) {\n if (typeof xf === \"function\") {\n return {\n step: xf,\n flush: () => {}\n };\n } else {\n return xf;\n }\n}\nclass Multiplexer {\n constructor(left, right, comparator) {\n this.left = left;\n this.right = right;\n this.comparator = comparator;\n }\n [Symbol.iterator]() {\n let leftItem;\n let rightItem;\n return {\n next: () => {\n if (leftItem === undefined && this.left !== undefined) {\n const result = this.left.next();\n if (result.done) {\n this.left = undefined;\n } else {\n leftItem = result.value;\n }\n }\n if (rightItem === undefined && this.right !== undefined) {\n const result = this.right.next();\n if (result.done) {\n this.right = undefined;\n } else {\n rightItem = result.value;\n }\n }\n if (leftItem === undefined && rightItem === undefined) {\n return {\n done: true\n };\n } else if (leftItem === undefined) {\n const value = rightItem;\n rightItem = undefined;\n return {\n done: false,\n value: value\n };\n } else if (rightItem === undefined) {\n const value = leftItem;\n leftItem = undefined;\n return {\n done: false,\n value: value\n };\n } else if (this.comparator(leftItem, rightItem)) {\n const value = leftItem;\n leftItem = undefined;\n return {\n done: false,\n value: value\n };\n } else {\n const value = rightItem;\n rightItem = undefined;\n return {\n done: false,\n value: value\n };\n }\n }\n };\n }\n}\n\nasync function loadFullRecording(src, options) {\n return wrapFullRecording(prepareRecording(await loadRecording(src), options));\n}\nasync function loadRecording(src) {\n const {\n parser,\n encoding = \"utf-8\"\n } = src;\n const data = await doFetch(src);\n return await parser(data, {\n encoding\n });\n}\nfunction wrapFullRecording(recording) {\n const segment = {\n start: 0\n };\n const markers = recording.events.filter(event => event[1] === \"m\").map(event => [event[0], event[2].label]);\n return {\n cols: recording.cols,\n rows: recording.rows,\n theme: recording.theme,\n duration: recording.duration,\n effectiveStartAt: recording.effectiveStartAt,\n markers,\n segments: [segment],\n async loadSegment(index) {\n if (index !== 0) {\n throw new Error(\"unknown recording segment\");\n }\n return {\n snapshot: {\n cols: recording.cols,\n rows: recording.rows,\n init: \"\"\n },\n events: recording.events\n };\n }\n };\n}\nasync function doFetch({\n url,\n data,\n fetchOpts = {}\n}) {\n if (typeof url === \"string\") {\n return await doFetchOne(url, fetchOpts);\n } else if (Array.isArray(url)) {\n return await Promise.all(url.map(url => doFetchOne(url, fetchOpts)));\n } else if (data !== undefined) {\n if (typeof data === \"function\") {\n data = data();\n }\n if (!(data instanceof Promise)) {\n data = Promise.resolve(data);\n }\n const value = await data;\n if (typeof value === \"string\" || value instanceof ArrayBuffer) {\n return new Response(value);\n } else {\n return value;\n }\n } else {\n throw new Error(\"failed fetching recording file: url/data missing in src\");\n }\n}\nasync function doFetchOne(url, fetchOpts) {\n const response = await fetch(url, fetchOpts);\n if (!response.ok) {\n throw new Error(`failed fetching recording from ${url}: ${response.status} ${response.statusText}`);\n }\n return response;\n}\nfunction prepareRecording(recording, {\n startAt = 0,\n idleTimeLimit,\n inputOffset,\n markers\n}) {\n let {\n events\n } = recording;\n if (!(events instanceof Stream)) {\n events = new Stream(events);\n }\n startAt = startAt * 1000;\n idleTimeLimit = idleTimeLimit ?? recording.idleTimeLimit;\n idleTimeLimit = idleTimeLimit !== undefined ? idleTimeLimit * 1000 : Infinity;\n inputOffset = inputOffset !== undefined ? inputOffset * 1000 : undefined;\n const limiterOutput = {\n offset: 0\n };\n events = events.map(timeLimiter(idleTimeLimit, startAt, limiterOutput));\n if (markers !== undefined) {\n markers = new Stream(markers).map(normalizeMarker);\n events = events.filter(e => e[1] !== \"m\").multiplex(markers, (a, b) => a[0] < b[0]);\n }\n events = events.map(markerWrapper());\n events = events.toArray();\n if (inputOffset !== undefined) {\n events = events.map(e => e[1] === \"i\" ? [e[0] + inputOffset, e[1], e[2]] : e);\n events.sort((a, b) => a[0] - b[0]);\n }\n if (events.length === 0) {\n throw new Error(\"recording is missing events\");\n }\n const duration = events[events.length - 1][0];\n const effectiveStartAt = startAt - limiterOutput.offset;\n return {\n ...recording,\n events,\n duration,\n effectiveStartAt\n };\n}\nfunction normalizeMarker(marker) {\n return typeof marker === \"number\" ? [marker * 1000, \"m\", \"\"] : [marker[0] * 1000, \"m\", marker[1]];\n}\nfunction timeLimiter(idleTimeLimit, startAt, output) {\n let previousTime = 0;\n let shift = 0;\n return function (event) {\n const delay = event[0] - previousTime;\n const delta = delay - idleTimeLimit;\n previousTime = event[0];\n if (delta > 0) {\n shift += delta;\n if (event[0] < startAt) {\n output.offset += delta;\n }\n }\n return [event[0] - shift, event[1], event[2]];\n };\n}\nfunction markerWrapper() {\n let index = 0;\n return function (event) {\n if (event[1] === \"m\") {\n return [event[0], event[1], {\n index: index++,\n time: event[0],\n label: event[2]\n }];\n } else {\n return event;\n }\n };\n}\n\nfunction normalizeTheme(theme) {\n const foreground = normalizeHexColor(theme.foreground);\n const background = normalizeHexColor(theme.background);\n const paletteInput = theme.palette;\n if (paletteInput === undefined) return;\n if (!foreground || !background || paletteInput.length < 8) return;\n const palette = [];\n const limit = Math.min(paletteInput.length, 16);\n for (let i = 0; i < limit; i += 1) {\n const color = normalizeHexColor(paletteInput[i]);\n if (!color) return;\n palette.push(color);\n }\n for (let i = palette.length; i < 16; i += 1) {\n palette.push(palette[i - 8]);\n }\n return {\n foreground,\n background,\n palette\n };\n}\n\nfunction loadSegmentedRecording(src, opts = {}) {\n validateOptions(src, opts);\n return doLoadSegmentedRecording(src, opts);\n}\nasync function doLoadSegmentedRecording(src, {\n startAt = 0\n}) {\n const response = await fetchResponse(src.url, src.fetchOpts ?? {});\n let index;\n try {\n index = await response.json();\n } catch (error) {\n throw new Error(`failed parsing segmented recording index from ${src.url}: ${error.message}`);\n }\n validateIndex(index);\n const duration = index.duration * 1000;\n const markers = (index.markers ?? []).map(([time, label]) => [time * 1000, label]);\n const segments = index.segments.map(segment => ({\n start: segment.start * 1000,\n url: resolveUrl(segment.url, response.url || src.url)\n }));\n const recording = {\n cols: index.term.cols,\n rows: index.term.rows,\n theme: parseTheme$2(index.term.theme),\n duration,\n effectiveStartAt: Math.min(Math.max(startAt * 1000, 0), duration),\n markers,\n segments,\n async loadSegment(segmentIndex) {\n if (!Number.isInteger(segmentIndex) || segmentIndex < 0 || segmentIndex >= segments.length) {\n throw new Error(\"unknown recording segment\");\n }\n const segment = segments[segmentIndex];\n const segmentResponse = await fetchResponse(segment.url, src.fetchOpts ?? {});\n let payload;\n try {\n payload = await segmentResponse.json();\n } catch (error) {\n throw new Error(`failed parsing recording segment from ${segment.url}: ${error.message}`);\n }\n return normalizeSegment(recording, segmentIndex, payload);\n }\n };\n return recording;\n}\nfunction validateOptions(src, {\n idleTimeLimit,\n markers\n}) {\n if (typeof src.url !== \"string\") {\n throw new Error(\"segmented recording source requires a URL\");\n }\n const unsupported = [];\n if (idleTimeLimit !== undefined) unsupported.push(\"idleTimeLimit\");\n if (markers !== undefined) unsupported.push(\"markers\");\n for (const option of [\"inputOffset\", \"parser\", \"encoding\"]) {\n if (Object.hasOwn(src, option)) unsupported.push(option);\n }\n if (unsupported.length > 0) {\n throw new Error(`segmented recordings do not support option: ${unsupported.join(\", \")}`);\n }\n}\nfunction validateIndex(index) {\n if (index?.version !== 1) {\n throw new Error(`unsupported segmented recording version: ${JSON.stringify(index?.version)}`);\n }\n validateFiniteTime(index.duration, \"recording duration\");\n validateTerminalSize(index.term, \"recording terminal\");\n if (!Array.isArray(index.segments) || index.segments.length === 0) {\n throw new Error(\"segmented recording index is missing segments\");\n }\n let previousStart = -1;\n index.segments.forEach((segment, i) => {\n validateFiniteTime(segment?.start, `segment ${i} start`);\n if (typeof segment?.url !== \"string\" || segment.url.length === 0) {\n throw new Error(`segment ${i} is missing its URL`);\n }\n if (i === 0 && segment.start !== 0) {\n throw new Error(\"first segment must start at 0\");\n }\n if (i > 0 && (segment.start <= previousStart || segment.start >= index.duration)) {\n throw new Error(`segment ${i} start must be strictly increasing and before duration`);\n }\n previousStart = segment.start;\n });\n if (index.markers !== undefined && !Array.isArray(index.markers)) {\n throw new Error(\"segmented recording markers must be an array\");\n }\n let previousMarkerTime = -1;\n for (const [i, marker] of (index.markers ?? []).entries()) {\n if (!Array.isArray(marker) || marker.length !== 2 || typeof marker[1] !== \"string\") {\n throw new Error(`invalid marker ${i} in segmented recording index`);\n }\n validateFiniteTime(marker[0], `marker ${i} time`);\n if (marker[0] < previousMarkerTime || marker[0] > index.duration) {\n throw new Error(`marker ${i} time is out of order or range`);\n }\n previousMarkerTime = marker[0];\n }\n}\nfunction normalizeSegment(recording, index, payload) {\n const snapshot = payload?.snapshot;\n validateTerminalSize(snapshot, `segment ${index} snapshot`);\n if (typeof snapshot.init !== \"string\") {\n throw new Error(`segment ${index} snapshot init must be a string`);\n }\n if (!Array.isArray(payload.events) || payload.events.length === 0) {\n throw new Error(`segment ${index} is missing events`);\n }\n const start = recording.segments[index].start;\n const end = recording.segments[index + 1]?.start ?? recording.duration;\n let previousTime = -1;\n let markerIndex = recording.markers.findIndex(([time]) => time >= start);\n if (markerIndex === -1) markerIndex = recording.markers.length;\n const events = payload.events.map((event, eventIndex) => {\n if (!Array.isArray(event) || event.length !== 3 || typeof event[1] !== \"string\") {\n throw new Error(`invalid event ${eventIndex} in segment ${index}`);\n }\n const time = event[0] * 1000;\n validateFiniteTime(time, `event ${eventIndex} time in segment ${index}`, true);\n if (time < previousTime || time < start || (index + 1 < recording.segments.length ? time >= end : time > end)) {\n throw new Error(`event ${eventIndex} time is out of range in segment ${index}`);\n }\n previousTime = time;\n if (event[1] === \"m\") {\n if (typeof event[2] !== \"string\") {\n throw new Error(`marker event ${eventIndex} in segment ${index} must have a string label`);\n }\n return [time, \"m\", {\n index: markerIndex++,\n time,\n label: event[2]\n }];\n }\n return [time, event[1], event[2]];\n });\n if (index > 0 && events[0][0] !== start) {\n throw new Error(`segment ${index} first event must match its start`);\n }\n if (index === recording.segments.length - 1 && events[events.length - 1][0] !== recording.duration) {\n throw new Error(\"final segment event must match recording duration\");\n }\n return {\n snapshot: {\n cols: snapshot.cols,\n rows: snapshot.rows,\n init: snapshot.init\n },\n events\n };\n}\nasync function fetchResponse(url, fetchOpts) {\n const response = await fetch(url, fetchOpts);\n if (!response.ok) {\n throw new Error(`failed fetching recording from ${url}: ${response.status} ${response.statusText}`);\n }\n return response;\n}\nfunction validateFiniteTime(value, label, milliseconds = false) {\n if (!Number.isFinite(value) || value < 0) {\n throw new Error(`${label} must be a finite non-negative ${milliseconds ? \"millisecond\" : \"second\"} value`);\n }\n}\nfunction validateTerminalSize(term, label) {\n if (!Number.isInteger(term?.cols) || term.cols <= 0 || !Number.isInteger(term?.rows) || term.rows <= 0) {\n throw new Error(`${label} must have positive integer cols and rows`);\n }\n}\nfunction parseTheme$2(theme) {\n return normalizeTheme({\n foreground: theme?.fg,\n background: theme?.bg,\n palette: typeof theme?.palette === \"string\" ? theme.palette.split(\":\") : undefined\n });\n}\nfunction resolveUrl(url, indexUrl) {\n return new URL(url, new URL(indexUrl, globalThis.location?.href ?? \"http://localhost/\")).href;\n}\n\nfunction recording(src, {\n dispatch,\n logger\n}, {\n speed,\n idleTimeLimit,\n startAt,\n preload,\n loop,\n poster,\n markers: markers_,\n pauseOnMarkers,\n cols: optionCols,\n rows: optionRows,\n audioUrl\n}) {\n const STATE = {\n COLD: \"cold\",\n // Recording has not been loaded yet.\n LOADING: \"loading\",\n // Recording/audio load is in progress.\n READY_INITIAL: \"ready.initial\",\n // Loaded, not yet played or navigated.\n READY_PAUSED: \"ready.paused\",\n // Loaded and positioned while playback clock is stopped.\n READY_STARTING: \"ready.starting\",\n // Playback start/resume requested; waiting for clock readiness.\n READY_PLAYING: \"ready.playing\",\n // Playback clock is running and events are scheduled.\n READY_BUFFERING_WHILE_PAUSED: \"ready.buffering.whilePaused\",\n // Buffering while remaining paused.\n READY_BUFFERING_TO_RESUME: \"ready.buffering.toResume\",\n // Buffering before resuming playback.\n READY_ENDED: \"ready.ended\",\n // Playback or navigation reached recording duration.\n FAILED: \"failed\",\n // Fatal driver error; public commands reject.\n STOPPED: \"stopped\" // Terminal state after stop().\n };\n const EVENT = {\n INIT_REQUESTED: \"initRequested\",\n // Public init/preload command.\n PLAY_REQUESTED: \"playRequested\",\n // Public play command.\n DEFERRED_PLAY_READY: \"deferredPlayReady\",\n // Cold play() can continue after load.\n PAUSE_REQUESTED: \"pauseRequested\",\n // Public pause command.\n SEEK_REQUESTED: \"seekRequested\",\n // Public seek command.\n STEP_REQUESTED: \"stepRequested\",\n // Public frame-step command.\n STOP_REQUESTED: \"stopRequested\",\n // Public teardown command.\n LOAD_SUCCEEDED: \"loadSucceeded\",\n // Recording load completed.\n LOAD_FAILED: \"loadFailed\",\n // Recording load failed fatally.\n PLAYBACK_START_CONFIRMED: \"playbackStartConfirmed\",\n // Playback clock can start.\n PLAYBACK_START_REJECTED: \"playbackStartRejected\",\n // Audio/media play() rejected.\n PLAYBACK_ENDED: \"playbackEnded\",\n // Scheduled playback reached natural end.\n AUDIO_WAITING: \"audioWaiting\",\n // Audio element entered buffering.\n AUDIO_PLAYING: \"audioPlaying\",\n // Audio element resumed from buffering.\n SEGMENT_WAITING: \"segmentWaiting\",\n // Required segment is loading at a boundary.\n SEGMENT_READY: \"segmentReady\",\n // Required segment loaded and playback may continue.\n MARKER_REACHED: \"markerReached\" // Playback crossed a marker event.\n };\n const PLAYBACK_START_REASON = {\n PLAY: \"play\",\n SEEK: \"seek\"\n };\n const outputBatchWindow = (src.minFrameTime ?? 1 / 60) * 1000;\n let now = () => performance.now() * speed;\n let state = STATE.COLD;\n let queuedDriverEvents = [];\n let processingDriverEvents = false;\n const ctx = {\n recording: undefined,\n segmentIndex: undefined,\n segment: undefined,\n segmentCache: new Map(),\n positionGeneration: 0,\n markers: undefined,\n duration: undefined,\n effectiveStartAt: undefined,\n recordingEventTimeoutId: undefined,\n nextEventIndex: 0,\n lastEventTime: 0,\n startTime: undefined,\n pauseElapsedTime: undefined,\n playCount: 0,\n waitingTimeout: undefined,\n loadingTimeout: undefined,\n audioCtx: undefined,\n audioElement: undefined,\n audioSeekable: false,\n loaded: undefined,\n posterVisible: false,\n posterRenderableAfterLoad: poster !== undefined,\n failureError: null,\n segmentWaiting: false\n };\n function isBufferingState(value = state) {\n return value === STATE.READY_BUFFERING_WHILE_PAUSED || value === STATE.READY_BUFFERING_TO_RESUME;\n }\n function canLoopPlayback() {\n return loop === true || typeof loop === \"number\" && ctx.playCount < loop;\n }\n function loadPromise(initialTime) {\n if (ctx.loaded === undefined) {\n ctx.loaded = load(initialTime);\n void ctx.loaded.catch(() => {});\n }\n return ctx.loaded;\n }\n\n // Public command events (INIT_REQUESTED, PLAY_REQUESTED, PAUSE_REQUESTED,\n // SEEK_REQUESTED, STEP_REQUESTED, STOP_REQUESTED) are serialized by Core\n // and are considered re-entrancy safe.\n //\n // Primary non-stale state transitions:\n // COLD -> [INIT_REQUESTED] -> LOADING\n // COLD -> [PLAY_REQUESTED | SEEK_REQUESTED | STEP_REQUESTED] -> LOADING\n // LOADING -> [LOAD_SUCCEEDED] -> READY_INITIAL\n // LOADING -> [LOAD_FAILED] -> FAILED\n // READY_INITIAL -> [PLAY_REQUESTED | DEFERRED_PLAY_READY] -> READY_STARTING\n // READY_INITIAL -> [SEEK_REQUESTED | STEP_REQUESTED] -> READY_PAUSED\n // READY_PAUSED -> [PLAY_REQUESTED] -> READY_STARTING\n // READY_PAUSED -> [SEEK_REQUESTED | STEP_REQUESTED] -> READY_PAUSED\n // READY_ENDED -> [PLAY_REQUESTED] -> READY_STARTING\n // READY_ENDED -> [SEEK_REQUESTED | STEP_REQUESTED] -> READY_PAUSED\n // READY_STARTING -> [PLAYBACK_START_CONFIRMED] -> READY_PLAYING\n // READY_STARTING -> [PLAYBACK_START_REJECTED] -> READY_PAUSED\n // READY_PLAYING -> [PAUSE_REQUESTED] -> READY_PAUSED\n // READY_PLAYING -> [SEEK_REQUESTED] -> READY_STARTING\n // READY_PLAYING -> [AUDIO_WAITING] -> READY_BUFFERING_TO_RESUME\n // READY_PLAYING -> [MARKER_REACHED] -> READY_PAUSED (pauseOnMarkers)\n // READY_BUFFERING_TO_RESUME -> [PAUSE_REQUESTED] -> READY_BUFFERING_WHILE_PAUSED\n // READY_BUFFERING_TO_RESUME -> [AUDIO_PLAYING] -> READY_PLAYING\n // READY_BUFFERING_WHILE_PAUSED -> [PLAY_REQUESTED] -> READY_BUFFERING_TO_RESUME\n // READY_BUFFERING_WHILE_PAUSED -> [AUDIO_PLAYING] -> READY_PAUSED\n // READY_BUFFERING_TO_RESUME -> [PLAYBACK_START_REJECTED] -> READY_BUFFERING_WHILE_PAUSED\n // READY_PLAYING -> [PLAYBACK_ENDED] -> READY_ENDED | READY_PLAYING (loop)\n // COLD | READY_INITIAL | READY_PAUSED | READY_PLAYING\n // | READY_BUFFERING_WHILE_PAUSED | READY_BUFFERING_TO_RESUME | READY_ENDED\n // -> [STOP_REQUESTED] -> STOPPED\n function transition(currentState, event, payload = {}) {\n switch (event) {\n case EVENT.INIT_REQUESTED:\n if (currentState === STATE.COLD) {\n if (preload || poster?.type == \"npt\") {\n return {\n nextState: STATE.LOADING,\n action: () => loadPromise()\n };\n }\n if (poster?.type == \"text\") {\n return {\n nextState: currentState,\n action: () => renderTextPoster()\n };\n }\n }\n return {\n nextState: currentState\n };\n case EVENT.LOAD_SUCCEEDED:\n if (currentState !== STATE.LOADING) {\n return {\n nextState: currentState\n };\n }\n return {\n nextState: STATE.READY_INITIAL,\n action: () => {\n dispatch(\"metadata\", {\n duration: ctx.duration / 1000,\n markers: ctx.markers.map(([t, label]) => [t / 1000, label]),\n hasAudio: payload.hasAudio\n });\n resetTerminalFromSnapshot(ctx.segment);\n renderPoster();\n }\n };\n case EVENT.LOAD_FAILED:\n if (currentState !== STATE.LOADING) {\n return {\n nextState: currentState\n };\n }\n return {\n nextState: STATE.FAILED,\n action: () => {\n ctx.failureError = payload.error;\n dispatch(\"error\", toErrorPayload(payload.error));\n }\n };\n case EVENT.PLAY_REQUESTED:\n if (currentState === STATE.COLD) {\n return {\n nextState: STATE.LOADING,\n action: () => {\n clearPoster();\n dispatch(\"play\");\n return loadPromise().then(() => sendDriverEvent(EVENT.DEFERRED_PLAY_READY));\n }\n };\n }\n if (currentState === STATE.READY_INITIAL || currentState === STATE.READY_PAUSED || currentState === STATE.READY_ENDED) {\n return {\n nextState: STATE.READY_STARTING,\n action: () => {\n dispatch(\"play\");\n clearPoster();\n return startPlayback(PLAYBACK_START_REASON.PLAY);\n }\n };\n }\n if (currentState === STATE.READY_BUFFERING_WHILE_PAUSED) {\n return {\n nextState: STATE.READY_BUFFERING_TO_RESUME,\n action: () => {\n dispatch(\"play\");\n if (ctx.segmentWaiting) return true;\n if (ctx.audioElement) {\n return ctx.audioElement.play().catch(error => {\n sendDriverEvent(EVENT.PLAYBACK_START_REJECTED);\n throw error;\n });\n }\n return true;\n }\n };\n }\n if (currentState === STATE.READY_BUFFERING_TO_RESUME || currentState === STATE.READY_PLAYING) {\n return {\n nextState: currentState,\n action: () => {\n dispatch(\"play\");\n return true;\n }\n };\n }\n return {\n nextState: currentState\n };\n case EVENT.DEFERRED_PLAY_READY:\n if (currentState === STATE.READY_INITIAL) {\n return {\n nextState: STATE.READY_STARTING,\n action: () => {\n clearPoster();\n return startPlayback(PLAYBACK_START_REASON.PLAY);\n }\n };\n }\n return {\n nextState: currentState\n };\n case EVENT.PLAYBACK_START_CONFIRMED:\n if (currentState !== STATE.READY_STARTING) {\n return {\n nextState: currentState\n };\n }\n return {\n nextState: STATE.READY_PLAYING,\n action: () => {\n confirmPlaybackClockStart();\n if (payload.reason === PLAYBACK_START_REASON.SEEK) {\n dispatch(\"seeked\");\n } else {\n dispatch(\"playing\");\n }\n return true;\n }\n };\n case EVENT.PLAYBACK_START_REJECTED:\n if (currentState === STATE.READY_STARTING) {\n return {\n nextState: STATE.READY_PAUSED\n };\n }\n if (currentState === STATE.READY_BUFFERING_TO_RESUME) {\n return {\n nextState: STATE.READY_BUFFERING_WHILE_PAUSED\n };\n }\n return {\n nextState: currentState\n };\n case EVENT.PLAYBACK_ENDED:\n if (currentState !== STATE.READY_PLAYING) {\n return {\n nextState: currentState\n };\n }\n if (canLoopPlayback()) {\n return {\n nextState: STATE.READY_PLAYING,\n action: restartLoop\n };\n }\n return {\n nextState: STATE.READY_ENDED,\n action: finishPlayback\n };\n case EVENT.AUDIO_WAITING:\n if (currentState === STATE.READY_PLAYING) {\n return {\n nextState: STATE.READY_BUFFERING_TO_RESUME,\n action: () => {\n logger.debug(\"pausing session playback\");\n pausePlaybackClock();\n restartWaitingTimeout();\n }\n };\n }\n if (currentState === STATE.READY_BUFFERING_WHILE_PAUSED || currentState === STATE.READY_BUFFERING_TO_RESUME) {\n return {\n nextState: currentState,\n action: restartWaitingTimeout\n };\n }\n return {\n nextState: currentState\n };\n case EVENT.AUDIO_PLAYING:\n if (ctx.segmentWaiting) {\n return {\n nextState: currentState\n };\n }\n if (currentState === STATE.READY_BUFFERING_TO_RESUME) {\n return {\n nextState: STATE.READY_PLAYING,\n action: () => {\n logger.debug(\"resuming session playback\");\n clearWaitingTimeout();\n confirmPlaybackClockStart();\n dispatch(\"playing\");\n }\n };\n }\n if (currentState === STATE.READY_BUFFERING_WHILE_PAUSED) {\n return {\n nextState: STATE.READY_PAUSED,\n action: () => {\n clearWaitingTimeout();\n // The media element may report recovery after the user has already paused.\n // Clear waiting bookkeeping, but do not announce resumed playback.\n }\n };\n }\n\n // Media events are delivered asynchronously and may arrive after the\n // driver has already moved on to another state, so treat them as stale.\n return {\n nextState: currentState\n };\n case EVENT.SEGMENT_WAITING:\n if (currentState === STATE.READY_PLAYING) {\n return {\n nextState: STATE.READY_BUFFERING_TO_RESUME,\n action: () => {\n ctx.segmentWaiting = true;\n pausePlaybackAt(payload.time);\n restartWaitingTimeout();\n if (ctx.audioElement) {\n ctx.audioElement.pause();\n }\n }\n };\n }\n return {\n nextState: currentState\n };\n case EVENT.SEGMENT_READY:\n ctx.segmentWaiting = false;\n if (currentState === STATE.READY_BUFFERING_TO_RESUME) {\n return {\n nextState: currentState,\n action: resumeAfterSegmentWait\n };\n }\n if (currentState === STATE.READY_BUFFERING_WHILE_PAUSED) {\n return {\n nextState: STATE.READY_PAUSED,\n action: clearWaitingTimeout\n };\n }\n return {\n nextState: currentState\n };\n case EVENT.PAUSE_REQUESTED:\n if (currentState === STATE.READY_PLAYING) {\n return {\n nextState: STATE.READY_PAUSED,\n action: performPause\n };\n }\n if (currentState === STATE.READY_BUFFERING_TO_RESUME) {\n return {\n nextState: STATE.READY_BUFFERING_WHILE_PAUSED,\n action: () => {\n if (ctx.audioElement) {\n ctx.audioElement.pause();\n }\n return true;\n }\n };\n }\n return {\n nextState: currentState,\n action: () => true\n };\n case EVENT.SEEK_REQUESTED:\n {\n if (currentState === STATE.COLD) {\n return {\n nextState: STATE.LOADING,\n action: () => loadPromise(typeof payload.where === \"number\" ? payload.where * 1000 : undefined).then(() => seek(payload.where))\n };\n }\n if (isBufferingState(currentState) && !ctx.segmentWaiting) {\n return {\n nextState: currentState,\n action: () => false\n };\n }\n if (currentState !== STATE.READY_INITIAL && currentState !== STATE.READY_PAUSED && currentState !== STATE.READY_ENDED && currentState !== STATE.READY_PLAYING && currentState !== STATE.READY_BUFFERING_WHILE_PAUSED && currentState !== STATE.READY_BUFFERING_TO_RESUME) {\n return {\n nextState: currentState\n };\n }\n const seekOperation = payload.seekOperation;\n if (seekOperation.noOp) {\n return {\n nextState: currentState,\n action: () => false\n };\n }\n return {\n nextState: seekOperation.reachedEnd ? STATE.READY_ENDED : currentState === STATE.READY_PLAYING || currentState === STATE.READY_BUFFERING_TO_RESUME ? STATE.READY_STARTING : STATE.READY_PAUSED,\n action: () => {\n clearPoster();\n return performSeek(seekOperation, currentState);\n }\n };\n }\n case EVENT.STEP_REQUESTED:\n {\n if (currentState === STATE.COLD) {\n return {\n nextState: STATE.LOADING,\n action: () => loadPromise().then(() => sendCommand(EVENT.STEP_REQUESTED, payload))\n };\n }\n if (currentState === STATE.READY_PLAYING || isBufferingState(currentState)) {\n // Stepping is only defined for paused/idle states. During active\n // playback or buffering, step() is a no-op.\n return {\n nextState: currentState\n };\n }\n if (currentState !== STATE.READY_INITIAL && currentState !== STATE.READY_PAUSED && currentState !== STATE.READY_ENDED) {\n return {\n nextState: currentState\n };\n }\n return {\n nextState: currentState,\n action: () => performStep(payload.n)\n };\n }\n case EVENT.MARKER_REACHED:\n if (currentState !== STATE.READY_PLAYING) {\n return {\n nextState: currentState\n };\n }\n if (pauseOnMarkers) {\n return {\n nextState: STATE.READY_PAUSED,\n action: () => {\n dispatchMarker(payload.data);\n return performPause(payload.time);\n }\n };\n }\n return {\n nextState: currentState,\n action: () => dispatchMarker(payload.data)\n };\n case EVENT.STOP_REQUESTED:\n return {\n nextState: STATE.STOPPED,\n action: teardown\n };\n default:\n return {\n nextState: currentState\n };\n }\n }\n function enqueueDriverEvent(event, payload = {}) {\n queuedDriverEvents.push({\n event,\n payload\n });\n }\n function processDriverEvent(event, payload = {}) {\n const previousState = state;\n const {\n nextState,\n action\n } = transition(previousState, event, payload);\n if (nextState !== state) {\n state = nextState;\n }\n return action?.();\n }\n function failDriver(error) {\n if (ctx.failureError || state === STATE.STOPPED) return;\n queuedDriverEvents.length = 0;\n ctx.segmentWaiting = false;\n cancelPendingTimers();\n if (ctx.audioElement) {\n ctx.audioElement.pause();\n }\n ctx.failureError = error;\n state = STATE.FAILED;\n dispatch(\"error\", toErrorPayload(error));\n }\n function assertCommandAllowed() {\n if (ctx.failureError) {\n throw ctx.failureError;\n }\n if (state === STATE.STOPPED) {\n throw new Error(\"driver has been stopped\");\n }\n }\n function sendCommand(event, payload = {}) {\n assertCommandAllowed();\n return sendDriverEvent(event, payload);\n }\n function sendDriverEvent(event, payload = {}) {\n if (ctx.failureError || state === STATE.STOPPED) {\n // Terminal states reject public commands via sendCommand(); late async\n // facts from timers/media callbacks are ignored here.\n return;\n }\n if (processingDriverEvents) {\n // Core serializes public commands, so re-entry here means the driver was\n // called directly in an unsupported way.\n throw new Error(\"re-entrant sendDriverEvent() is not allowed during queue processing\");\n }\n processingDriverEvents = true;\n try {\n const result = processDriverEvent(event, payload);\n while (queuedDriverEvents.length > 0) {\n const queuedEvent = queuedDriverEvents.shift();\n processDriverEvent(queuedEvent.event, queuedEvent.payload);\n }\n return result;\n } catch (error) {\n failDriver(error);\n throw error;\n } finally {\n processingDriverEvents = false;\n queuedDriverEvents.length = 0;\n }\n }\n\n // Emit a follow-up event when the call site's framing is runtime-dependent:\n // defer to the active queue while one is processing (a direct sendDriverEvent() would\n // re-enter and throw), otherwise process immediately. Where the framing is\n // statically known, call sendDriverEvent()/enqueueDriverEvent() directly instead.\n function raiseDriverEvent(event, payload = {}) {\n if (processingDriverEvents) {\n enqueueDriverEvent(event, payload);\n return true;\n }\n return sendDriverEvent(event, payload);\n }\n function init() {\n return sendCommand(EVENT.INIT_REQUESTED);\n }\n async function load(requestedInitialTime) {\n const generation = ctx.positionGeneration;\n ctx.loadingTimeout = setTimeout(() => {\n dispatch(\"loading\");\n }, 3000);\n try {\n const loadedRecording = loadRecordingSource(src, {\n idleTimeLimit,\n startAt,\n markers: markers_,\n inputOffset: src.inputOffset\n });\n const audioLoaded = loadAudio(audioUrl).catch(error => {\n logger.warn(`audio load failed: ${error.message}`);\n return false;\n });\n const recording = await loadedRecording;\n if (generation !== ctx.positionGeneration) return false;\n ctx.recording = recording;\n ctx.duration = recording.duration;\n ctx.effectiveStartAt = recording.effectiveStartAt;\n ctx.markers = recording.markers;\n const initialTime = requestedInitialTime ?? (poster?.type === \"npt\" ? poster.value * 1000 : ctx.effectiveStartAt);\n const segmentIndex = findSegmentIndex(recording, initialTime ?? 0);\n const segment = await getSegment(segmentIndex, true);\n if (generation !== ctx.positionGeneration) return false;\n activateSegment(segmentIndex, segment);\n const hasAudio = await audioLoaded;\n if (generation !== ctx.positionGeneration) return false;\n sendDriverEvent(EVENT.LOAD_SUCCEEDED, {\n hasAudio\n });\n } catch (e) {\n // Segmented option validation may fail synchronously in-frame, while\n // fetch and parser failures arrive asynchronously out-of-frame.\n raiseDriverEvent(EVENT.LOAD_FAILED, {\n error: e\n });\n throw e;\n } finally {\n clearLoadingTimeout();\n }\n }\n async function loadAudio(audioUrl) {\n if (!audioUrl) return false;\n ctx.audioElement = await createAudioElement(audioUrl);\n ctx.audioSeekable = !Number.isNaN(ctx.audioElement.duration) && ctx.audioElement.duration !== Infinity && ctx.audioElement.seekable.length > 0 && ctx.audioElement.seekable.end(ctx.audioElement.seekable.length - 1) === ctx.audioElement.duration;\n if (ctx.audioSeekable) {\n ctx.audioElement.addEventListener(\"playing\", onAudioPlaying);\n ctx.audioElement.addEventListener(\"waiting\", onAudioWaiting);\n } else {\n logger.warn(`audio is not seekable - you must enable range request support on the server providing ${ctx.audioElement.src} for audio seeking to work`);\n }\n return true;\n }\n function renderPoster() {\n if (!ctx.posterRenderableAfterLoad) return;\n if (poster.type == \"npt\") {\n syncActiveSegmentToTime(poster.value * 1000, false, false);\n } else if (poster.type == \"text\") {\n feed(poster.value);\n }\n ctx.posterVisible = true;\n }\n function clearPoster() {\n if (ctx.posterVisible) {\n feed(\"\\x1bc\");\n }\n ctx.posterVisible = false;\n ctx.posterRenderableAfterLoad = false;\n }\n function activateSegment(index, segment) {\n ctx.segmentIndex = index;\n ctx.segment = segment;\n ctx.nextEventIndex = 0;\n ctx.lastEventTime = ctx.recording.segments[index].start;\n }\n function getSegment(index, required = false) {\n let entry = ctx.segmentCache.get(index);\n if (entry === undefined) {\n entry = {};\n entry.promise = ctx.recording.loadSegment(index).then(data => {\n if (ctx.segmentCache.get(index) === entry) {\n entry.data = data;\n }\n return data;\n }, error => {\n if (ctx.segmentCache.get(index) === entry) {\n ctx.segmentCache.delete(index);\n }\n if (!required) {\n logger.warn(`segment prefetch failed: ${error.message}`);\n }\n throw error;\n });\n ctx.segmentCache.set(index, entry);\n if (!required) {\n void entry.promise.catch(() => {});\n }\n }\n return entry.promise;\n }\n async function getRequiredSegment(index, generation, onWaiting) {\n if (ctx.segmentCache.get(index)?.data === undefined) {\n onWaiting?.();\n }\n try {\n return await getSegment(index, true);\n } catch (error) {\n if (generation === ctx.positionGeneration && state !== STATE.STOPPED) {\n failDriver(error);\n }\n throw error;\n }\n }\n function retainSegments(indexes) {\n const retained = new Set(indexes.filter(index => index >= 0));\n for (const index of ctx.segmentCache.keys()) {\n if (!retained.has(index)) {\n ctx.segmentCache.delete(index);\n }\n }\n }\n function prefetchNextSegment() {\n const lastIndex = ctx.recording.segments.length - 1;\n const nextIndex = ctx.segmentIndex < lastIndex ? ctx.segmentIndex + 1 : canLoopPlayback() ? 0 : undefined;\n retainSegments([ctx.segmentIndex - 1, ctx.segmentIndex, nextIndex]);\n if (nextIndex !== undefined) getSegment(nextIndex);\n }\n async function advanceSegment() {\n const nextIndex = ctx.segmentIndex + 1;\n const boundary = ctx.recording.segments[nextIndex].start;\n const generation = ++ctx.positionGeneration;\n try {\n const segment = await getRequiredSegment(nextIndex, generation, () => {\n sendDriverEvent(EVENT.SEGMENT_WAITING, {\n time: boundary\n });\n });\n if (generation !== ctx.positionGeneration || state === STATE.STOPPED) return;\n activateSegment(nextIndex, segment);\n prefetchNextSegment();\n if (state === STATE.READY_BUFFERING_TO_RESUME || state === STATE.READY_BUFFERING_WHILE_PAUSED) {\n await sendDriverEvent(EVENT.SEGMENT_READY);\n } else if (state === STATE.READY_PLAYING) {\n scheduleNextRecordingEvent();\n }\n } catch {\n // Required segment failures have already failed the driver.\n }\n }\n function pausePlaybackAt(time) {\n cancelScheduledRecordingEvent();\n ctx.pauseElapsedTime = time;\n }\n function resumeAfterSegmentWait() {\n clearWaitingTimeout();\n if (ctx.audioElement) {\n return ctx.audioElement.play().then(() => sendDriverEvent(EVENT.AUDIO_PLAYING), error => {\n sendDriverEvent(EVENT.PLAYBACK_START_REJECTED);\n logger.warn(`audio resume failed: ${error.message}`);\n return false;\n });\n }\n enqueueDriverEvent(EVENT.AUDIO_PLAYING);\n }\n function scheduleNextRecordingEvent() {\n const nextEvent = ctx.segment.events[ctx.nextEventIndex];\n if (nextEvent) {\n ctx.recordingEventTimeoutId = scheduleAt(runDueRecordingEvents, nextEvent[0]);\n } else {\n if (ctx.segmentIndex < ctx.recording.segments.length - 1) {\n const boundary = ctx.recording.segments[ctx.segmentIndex + 1].start;\n ctx.recordingEventTimeoutId = scheduleAt(advanceSegment, boundary);\n } else {\n raiseDriverEvent(EVENT.PLAYBACK_ENDED);\n }\n }\n }\n function scheduleAt(f, targetTime) {\n let timeout = (targetTime - (now() - ctx.startTime)) / speed;\n if (timeout < 0) {\n timeout = 0;\n }\n return setTimeout(f, timeout);\n }\n function runDueRecordingEvents() {\n while (ctx.segment.events[ctx.nextEventIndex] !== undefined) {\n if (applyNextRecordingEvents()) {\n return;\n }\n const nextEvent = ctx.segment.events[ctx.nextEventIndex];\n if (nextEvent === undefined) {\n break;\n }\n const elapsedWallTime = now() - ctx.startTime;\n if (elapsedWallTime <= nextEvent[0]) {\n break;\n }\n }\n scheduleNextRecordingEvent();\n }\n function applyNextRecordingEvents() {\n const event = ctx.segment.events[ctx.nextEventIndex];\n if (event[1] === \"o\") {\n applyOutputGroup();\n return false;\n }\n ctx.lastEventTime = event[0];\n ctx.nextEventIndex++;\n return applyRecordingEvent(event);\n }\n function applyOutputGroup() {\n const firstEvent = ctx.segment.events[ctx.nextEventIndex];\n const batchDeadline = firstEvent[0] + outputBatchWindow;\n const output = [];\n let event = firstEvent;\n while (event !== undefined && event[1] === \"o\" && event[0] < batchDeadline) {\n output.push(event[2]);\n ctx.lastEventTime = event[0];\n ctx.nextEventIndex++;\n event = ctx.segment.events[ctx.nextEventIndex];\n }\n feed(output);\n }\n function cancelScheduledRecordingEvent() {\n clearTimeout(ctx.recordingEventTimeoutId);\n ctx.recordingEventTimeoutId = null;\n }\n async function teardownAudio() {\n clearTimeout(ctx.waitingTimeout);\n if (ctx.audioElement) {\n ctx.audioElement.removeEventListener(\"playing\", onAudioPlaying);\n ctx.audioElement.removeEventListener(\"waiting\", onAudioWaiting);\n ctx.audioElement.pause();\n ctx.audioElement.src = \"\";\n ctx.audioElement.load();\n ctx.audioElement = undefined;\n }\n if (ctx.audioCtx) {\n await ctx.audioCtx.close();\n ctx.audioCtx = undefined;\n }\n }\n function applyRecordingEvent(event) {\n const [time, type, data] = event;\n if (type === \"o\") {\n feed(data);\n } else if (type === \"i\") {\n dispatch(\"input\", {\n data\n });\n } else if (type === \"r\") {\n const [cols, rows] = data.split(\"x\").map(n => Number.parseInt(n, 10));\n dispatch(\"resize\", effectiveSize(cols, rows));\n } else if (type === \"m\") {\n return sendDriverEvent(EVENT.MARKER_REACHED, {\n data,\n time\n }) === true;\n }\n return false;\n }\n function play() {\n return sendCommand(EVENT.PLAY_REQUESTED);\n }\n function pause() {\n return sendCommand(EVENT.PAUSE_REQUESTED);\n }\n function pausePlaybackClock() {\n cancelScheduledRecordingEvent();\n ctx.pauseElapsedTime = now() - ctx.startTime;\n }\n function preparePlaybackClock() {\n if (ctx.audioElement && !ctx.audioCtx) setupAudioCtx();\n }\n function confirmPlaybackClockStart() {\n ctx.startTime = now() - ctx.pauseElapsedTime;\n ctx.pauseElapsedTime = null;\n scheduleNextRecordingEvent();\n }\n function seek(where) {\n assertCommandAllowed();\n validateSeekInput(where);\n if (state === STATE.COLD) {\n return sendDriverEvent(EVENT.SEEK_REQUESTED, {\n where\n });\n }\n return sendDriverEvent(EVENT.SEEK_REQUESTED, {\n seekOperation: resolveSeek(state, where)\n });\n }\n function findMarkerTimeBefore(time) {\n if (ctx.markers.length == 0) return;\n let i = 0;\n let marker = ctx.markers[i];\n let lastMarkerTimeBefore;\n while (marker && marker[0] < time) {\n lastMarkerTimeBefore = marker[0];\n marker = ctx.markers[++i];\n }\n return lastMarkerTimeBefore;\n }\n function findMarkerTimeAfter(time) {\n if (ctx.markers.length == 0) return;\n let i = ctx.markers.length - 1;\n let marker = ctx.markers[i];\n let firstMarkerTimeAfter;\n while (marker && marker[0] > time) {\n firstMarkerTimeAfter = marker[0];\n marker = ctx.markers[--i];\n }\n return firstMarkerTimeAfter;\n }\n function step(n) {\n return sendCommand(EVENT.STEP_REQUESTED, {\n n\n });\n }\n function getDuration() {\n return ctx.duration === undefined ? undefined : ctx.duration / 1000;\n }\n function getCurrentTimeMs() {\n if (state === STATE.READY_PLAYING) {\n return now() - ctx.startTime;\n } else {\n return ctx.pauseElapsedTime ?? 0;\n }\n }\n function getCurrentTime() {\n return getCurrentTimeMs() / 1000;\n }\n function setupAudioCtx() {\n ctx.audioCtx = new AudioContext({\n latencyHint: \"interactive\"\n });\n const src = ctx.audioCtx.createMediaElementSource(ctx.audioElement);\n src.connect(ctx.audioCtx.destination);\n now = audioNow;\n }\n function audioNow() {\n if (!ctx.audioCtx) throw new Error(\"audio context not started - can't tell time!\");\n const {\n contextTime,\n performanceTime\n } = ctx.audioCtx.getOutputTimestamp();\n\n // The check below is needed for Chrome,\n // which returns 0 for first several dozen millis,\n // completely ruining the timing (the clock jumps backwards once),\n // therefore we initially ignore performanceTime in our calculation.\n\n return performanceTime === 0 ? contextTime * 1000 : contextTime * 1000 + (performance.now() - performanceTime);\n }\n function onAudioWaiting() {\n logger.debug(\"audio buffering\");\n sendDriverEvent(EVENT.AUDIO_WAITING);\n }\n function onAudioPlaying() {\n logger.debug(\"audio resumed\");\n sendDriverEvent(EVENT.AUDIO_PLAYING);\n }\n function mute() {\n if (ctx.audioElement) {\n ctx.audioElement.muted = true;\n dispatch(\"muted\", true);\n return true;\n }\n }\n function unmute() {\n if (ctx.audioElement) {\n ctx.audioElement.muted = false;\n dispatch(\"muted\", false);\n return true;\n }\n }\n function stop() {\n return sendCommand(EVENT.STOP_REQUESTED);\n }\n function feed(data) {\n dispatch(\"output\", data);\n }\n function dispatchMarker(data) {\n dispatch(\"marker\", {\n ...data,\n time: data.time / 1000\n });\n }\n function renderTextPoster() {\n renderPoster();\n ctx.posterRenderableAfterLoad = false;\n }\n function validateSeekInput(where) {\n if (typeof where === \"number\") {\n if (Number.isFinite(where)) return;\n } else if (typeof where === \"string\") {\n if (isRelativeSeek(where) || parseSeekPercentage(where) !== undefined) return;\n } else if (typeof where === \"object\" && where !== null) {\n if (where.marker === \"prev\" || where.marker === \"next\" || Number.isInteger(where.marker) && where.marker >= 0) {\n return;\n }\n }\n throw new Error(`invalid seek target: ${JSON.stringify(where)}`);\n }\n function isRelativeSeek(where) {\n return where === \"<<\" || where === \">>\" || where === \"<<<\" || where === \">>>\";\n }\n function parseSeekPercentage(where) {\n if (!where.endsWith(\"%\")) return;\n const percentage = Number(where.slice(0, -1));\n if (Number.isFinite(percentage)) {\n return percentage;\n }\n }\n function resolveSeek(currentState, where) {\n const currentTime = getCurrentTimeMs();\n const isPlaying = currentState === STATE.READY_PLAYING;\n let target = where;\n if (typeof target === \"number\") {\n target = target * 1000;\n } else if (typeof target === \"string\") {\n if (target === \"<<\") {\n target = currentTime - 5000;\n } else if (target === \">>\") {\n target = currentTime + 5000;\n } else if (target === \"<<<\") {\n target = currentTime - 0.1 * ctx.duration;\n } else if (target === \">>>\") {\n target = currentTime + 0.1 * ctx.duration;\n } else if (target[target.length - 1] === \"%\") {\n target = parseSeekPercentage(target) / 100 * ctx.duration;\n }\n } else if (typeof target === \"object\") {\n if (target.marker === \"prev\") {\n target = findMarkerTimeBefore(currentTime) ?? 0;\n if (isPlaying && currentTime - target < 1000) {\n target = findMarkerTimeBefore(target) ?? 0;\n }\n } else if (target.marker === \"next\") {\n target = findMarkerTimeAfter(currentTime) ?? ctx.duration;\n } else if (typeof target.marker === \"number\") {\n const marker = ctx.markers[target.marker];\n if (marker === undefined) {\n throw new Error(`invalid marker index: ${target.marker}`);\n }\n target = marker[0];\n }\n }\n const targetTime = Math.min(Math.max(target, 0), ctx.duration);\n return {\n targetTime,\n reachedEnd: targetTime >= ctx.duration,\n noOp: targetTime === ctx.pauseElapsedTime\n };\n }\n function effectiveSize(cols, rows) {\n return {\n cols: optionCols ?? cols,\n rows: optionRows ?? rows\n };\n }\n function resetTerminalFromSnapshot(segment, emitClear = false) {\n if (emitClear) {\n // Preserve the existing observable RIS output even though reset replaces the VT state.\n feed(\"\\x1bc\");\n }\n dispatch(\"reset\", {\n size: effectiveSize(segment.snapshot.cols, segment.snapshot.rows),\n init: segment.snapshot.init,\n theme: ctx.recording.theme ?? null\n });\n }\n function syncActiveSegmentToTime(targetTime, clearStartAt = true, inclusive = true) {\n let event = ctx.segment.events[ctx.nextEventIndex];\n let output = [];\n while (event && (inclusive ? event[0] <= targetTime : event[0] < targetTime)) {\n if (event[1] === \"o\") {\n output.push(event[2]);\n } else if (event[1] === \"r\") {\n if (output.length > 0) {\n feed(output);\n output = [];\n }\n applyRecordingEvent(event);\n }\n ctx.lastEventTime = event[0];\n event = ctx.segment.events[++ctx.nextEventIndex];\n }\n if (output.length > 0) {\n feed(output);\n }\n ctx.pauseElapsedTime = targetTime;\n if (clearStartAt) {\n ctx.effectiveStartAt = null;\n }\n if (ctx.audioElement && ctx.audioSeekable) {\n ctx.audioElement.currentTime = targetTime / 1000 / speed;\n }\n }\n async function positionAt(targetTime, generation, forceReset = false) {\n const targetIndex = findSegmentIndex(ctx.recording, targetTime);\n if (generation !== ctx.positionGeneration) return false;\n if (!forceReset && targetIndex === ctx.segmentIndex && targetTime >= ctx.lastEventTime) {\n syncActiveSegmentToTime(targetTime);\n return true;\n }\n retainSegments([targetIndex - 1, targetIndex, targetIndex + 1]);\n const segment = await getRequiredSegment(targetIndex, generation);\n if (generation !== ctx.positionGeneration) return false;\n activateSegment(targetIndex, segment);\n resetTerminalFromSnapshot(segment, true);\n syncActiveSegmentToTime(targetTime);\n return true;\n }\n async function startPlayback(reason) {\n const generation = ctx.positionGeneration;\n if (ctx.segmentIndex === ctx.recording.segments.length - 1 && ctx.segment.events[ctx.nextEventIndex] === undefined) {\n if (!(await positionAt(0, generation, true))) return false;\n } else if (ctx.effectiveStartAt !== null) {\n if (!(await positionAt(ctx.effectiveStartAt, generation))) return false;\n }\n if (generation !== ctx.positionGeneration) return false;\n prefetchNextSegment();\n preparePlaybackClock();\n if (ctx.audioElement) {\n try {\n await ctx.audioElement.play();\n return sendDriverEvent(EVENT.PLAYBACK_START_CONFIRMED, {\n reason\n });\n } catch (error) {\n sendDriverEvent(EVENT.PLAYBACK_START_REJECTED);\n throw error;\n }\n }\n return raiseDriverEvent(EVENT.PLAYBACK_START_CONFIRMED, {\n reason\n });\n }\n function performPause(time) {\n if (ctx.audioElement) {\n ctx.audioElement.pause();\n }\n pausePlaybackClock();\n if (time !== undefined) {\n ctx.pauseElapsedTime = time;\n }\n dispatch(\"pause\");\n return true;\n }\n async function performSeek(seekOperation, stateBeforeSeek) {\n const resumeAfterSeek = stateBeforeSeek === STATE.READY_PLAYING || stateBeforeSeek === STATE.READY_BUFFERING_TO_RESUME;\n const generation = ++ctx.positionGeneration;\n if (stateBeforeSeek === STATE.READY_PLAYING) {\n pausePlaybackClock();\n }\n ctx.segmentWaiting = false;\n clearWaitingTimeout();\n if (ctx.audioElement) {\n ctx.audioElement.pause();\n }\n if (!(await positionAt(seekOperation.targetTime, generation))) return false;\n if (generation !== ctx.positionGeneration) return false;\n if (seekOperation.reachedEnd) {\n dispatch(\"seeked\");\n dispatch(\"ended\");\n return true;\n }\n if (resumeAfterSeek) {\n return await startPlayback(PLAYBACK_START_REASON.SEEK);\n }\n dispatch(\"seeked\");\n return true;\n }\n async function performStep(n = 1) {\n const generation = ++ctx.positionGeneration;\n const target = await findStepTarget(n, generation);\n if (target === undefined || generation !== ctx.positionGeneration) return;\n clearPoster();\n if (!(await positionAt(target.time, generation, n < 0))) return;\n if (ctx.audioElement && ctx.audioSeekable) {\n ctx.audioElement.currentTime = target.time / 1000 / speed;\n }\n if (target.reachedEnd) {\n state = STATE.READY_ENDED;\n dispatch(\"ended\");\n } else {\n state = STATE.READY_PAUSED;\n }\n }\n async function findStepTarget(n, generation) {\n let remaining = Math.abs(n);\n let segmentIndex = ctx.segmentIndex;\n let eventIndex = n > 0 ? ctx.nextEventIndex : ctx.nextEventIndex - 2;\n let target;\n while (segmentIndex >= 0 && segmentIndex < ctx.recording.segments.length) {\n if (generation !== ctx.positionGeneration) return;\n retainSegments([segmentIndex - 1, segmentIndex, segmentIndex + 1]);\n const segment = await getRequiredSegment(segmentIndex, generation);\n if (generation !== ctx.positionGeneration) return;\n if (n > 0) {\n for (let i = Math.max(eventIndex, 0); i < segment.events.length; i++) {\n if (segment.events[i][1] === \"o\" && --remaining === 0) {\n target = {\n time: segment.events[i][0]\n };\n break;\n }\n }\n if (target) break;\n segmentIndex++;\n eventIndex = 0;\n } else {\n for (let i = Math.min(eventIndex, segment.events.length - 1); i >= 0; i--) {\n if (segment.events[i][1] === \"o\" && --remaining === 0) {\n target = {\n time: segment.events[i][0]\n };\n break;\n }\n }\n if (target) break;\n segmentIndex--;\n eventIndex = Number.MAX_SAFE_INTEGER;\n }\n }\n if (target) {\n target.reachedEnd = target.time >= ctx.duration;\n }\n return target;\n }\n function restartWaitingTimeout() {\n clearTimeout(ctx.waitingTimeout);\n ctx.waitingTimeout = setTimeout(() => {\n dispatch(\"loading\");\n }, 1000);\n }\n function clearWaitingTimeout() {\n clearTimeout(ctx.waitingTimeout);\n ctx.waitingTimeout = null;\n }\n function clearLoadingTimeout() {\n clearTimeout(ctx.loadingTimeout);\n ctx.loadingTimeout = null;\n }\n function cancelPendingTimers() {\n clearLoadingTimeout();\n clearWaitingTimeout();\n cancelScheduledRecordingEvent();\n }\n async function restartLoop() {\n cancelScheduledRecordingEvent();\n ctx.playCount++;\n const generation = ++ctx.positionGeneration;\n try {\n const segment = await getRequiredSegment(0, generation, () => {\n enqueueDriverEvent(EVENT.SEGMENT_WAITING, {\n time: ctx.duration\n });\n });\n if (generation !== ctx.positionGeneration) return;\n activateSegment(0, segment);\n resetTerminalFromSnapshot(segment, true);\n ctx.pauseElapsedTime = 0;\n ctx.startTime = now();\n prefetchNextSegment();\n if (ctx.audioElement && ctx.audioSeekable) {\n ctx.audioElement.currentTime = 0;\n }\n if (state === STATE.READY_BUFFERING_TO_RESUME || state === STATE.READY_BUFFERING_WHILE_PAUSED) {\n await sendDriverEvent(EVENT.SEGMENT_READY);\n } else {\n ctx.pauseElapsedTime = null;\n scheduleNextRecordingEvent();\n }\n } catch {\n // Required segment failures have already failed the driver.\n }\n }\n function finishPlayback() {\n cancelScheduledRecordingEvent();\n ctx.playCount++;\n ctx.pauseElapsedTime = ctx.duration;\n if (ctx.audioElement) {\n ctx.audioElement.pause();\n }\n retainSegments([ctx.segmentIndex - 1, ctx.segmentIndex]);\n dispatch(\"ended\");\n }\n function teardown() {\n ctx.positionGeneration++;\n ctx.segmentCache.clear();\n cancelPendingTimers();\n return teardownAudio();\n }\n return {\n init,\n stop,\n getDuration,\n getCurrentTime,\n play,\n pause,\n seek,\n step,\n mute,\n unmute\n };\n}\nfunction loadRecordingSource(src, options) {\n if (src.format === \"segmented\") {\n return loadSegmentedRecording(src, options);\n }\n return loadFullRecording(src, options);\n}\nfunction findSegmentIndex(recording, time) {\n let low = 0;\n let high = recording.segments.length;\n while (low + 1 < high) {\n const middle = Math.floor((low + high) / 2);\n if (recording.segments[middle].start <= time) {\n low = middle;\n } else {\n high = middle;\n }\n }\n return low;\n}\nasync function createAudioElement(src) {\n const audio = new Audio();\n audio.preload = \"metadata\";\n audio.loop = false;\n audio.crossOrigin = \"anonymous\";\n let resolve;\n let reject;\n const canPlay = new Promise((resolve_, reject_) => {\n resolve = resolve_;\n reject = reject_;\n });\n function cleanup() {\n audio.removeEventListener(\"canplay\", onCanPlay);\n audio.removeEventListener(\"error\", onError);\n audio.removeEventListener(\"abort\", onAbort);\n }\n function onCanPlay() {\n cleanup();\n resolve();\n }\n function onError() {\n cleanup();\n reject(new Error(`failed loading audio from ${src}`));\n }\n function onAbort() {\n cleanup();\n reject(new Error(`audio loading aborted for ${src}`));\n }\n audio.addEventListener(\"canplay\", onCanPlay);\n audio.addEventListener(\"error\", onError);\n audio.addEventListener(\"abort\", onAbort);\n audio.src = src;\n audio.load();\n await canPlay;\n return audio;\n}\n\nfunction clock({\n hourColor = 3,\n minuteColor = 4,\n separatorColor = 9\n}, {\n dispatch\n}, {\n cols = 5,\n rows = 1\n}) {\n const middleRow = Math.floor(rows / 2);\n const leftPad = Math.floor(cols / 2) - 2;\n const setupCursor = `\\x1b[?25l\\x1b[1m\\x1b[${middleRow}B`;\n let intervalId;\n const getCurrentTime = () => {\n const d = new Date();\n const h = d.getHours();\n const m = d.getMinutes();\n const seqs = [];\n seqs.push(\"\\r\");\n for (let i = 0; i < leftPad; i++) {\n seqs.push(\" \");\n }\n seqs.push(`\\x1b[3${hourColor}m`);\n if (h < 10) {\n seqs.push(\"0\");\n }\n seqs.push(`${h}`);\n seqs.push(`\\x1b[3${separatorColor};5m:\\x1b[25m`);\n seqs.push(`\\x1b[3${minuteColor}m`);\n if (m < 10) {\n seqs.push(\"0\");\n }\n seqs.push(`${m}`);\n return seqs;\n };\n const updateTime = () => {\n getCurrentTime().forEach(seq => {\n dispatch(\"output\", seq);\n });\n };\n return {\n init: () => {\n dispatch(\"reset\", {\n size: {\n cols,\n rows\n }\n });\n dispatch(\"output\", setupCursor);\n updateTime();\n },\n play: () => {\n if (intervalId !== undefined) return true;\n dispatch(\"play\");\n dispatch(\"playing\");\n dispatch(\"output\", setupCursor);\n updateTime();\n intervalId = setInterval(updateTime, 1000);\n return true;\n },\n stop: () => {\n clearInterval(intervalId);\n },\n getCurrentTime: () => {\n const d = new Date();\n return d.getHours() * 60 + d.getMinutes();\n }\n };\n}\n\nfunction random(_src, {\n dispatch\n}, {\n speed\n}) {\n const base = \" \".charCodeAt(0);\n const range = \"~\".charCodeAt(0) - base;\n let timeoutId;\n const schedule = () => {\n const t = Math.pow(5, Math.random() * 4);\n timeoutId = setTimeout(print, t / speed);\n };\n const print = () => {\n schedule();\n const char = String.fromCharCode(base + Math.floor(Math.random() * range));\n dispatch(\"output\", char);\n };\n return {\n play() {\n if (timeoutId !== undefined) return true;\n dispatch(\"play\");\n dispatch(\"playing\");\n schedule();\n },\n stop() {\n clearInterval(timeoutId);\n }\n };\n}\n\nconst DEFAULT_COLS = 80;\nconst DEFAULT_ROWS = 24;\nasync function parse$2(data) {\n if (data instanceof Response) {\n const text = await data.text();\n const result = parseJsonl(text);\n if (result !== undefined) {\n const {\n header,\n events\n } = result;\n if (header.version === 2) {\n return parseAsciicastV2(header, events);\n } else if (header.version === 3) {\n return parseAsciicastV3(header, events);\n } else {\n throw new Error(`asciicast v${header.version} format not supported`);\n }\n } else {\n const header = JSON.parse(text);\n if (header.version === 1) {\n return parseAsciicastV1(header);\n }\n }\n } else if (typeof data === \"object\" && data.version === 1) {\n return parseAsciicastV1(data);\n } else if (Array.isArray(data)) {\n const header = data[0];\n if (header.version === 2) {\n const events = data.slice(1, data.length);\n return parseAsciicastV2(header, events);\n } else if (header.version === 3) {\n const events = data.slice(1, data.length);\n return parseAsciicastV3(header, events);\n } else {\n throw new Error(`asciicast v${header.version} format not supported`);\n }\n }\n throw new Error(\"invalid data\");\n}\nfunction parseJsonl(jsonl) {\n const lines = jsonl.split(\"\\n\");\n let header;\n try {\n header = JSON.parse(lines[0]);\n } catch (_error) {\n return;\n }\n const events = new Stream(lines).drop(1).filter(l => l[0] === \"[\").map(JSON.parse);\n return {\n header,\n events\n };\n}\nfunction parseAsciicastV1(data) {\n let time = 0;\n const events = new Stream(data.stdout).map(e => {\n time += e[0] * 1000;\n return [time, \"o\", e[1]];\n });\n return {\n cols: data.width === 0 ? DEFAULT_COLS : data.width,\n rows: data.height === 0 ? DEFAULT_ROWS : data.height,\n events\n };\n}\nfunction parseAsciicastV2(header, events) {\n if (!(events instanceof Stream)) {\n events = new Stream(events);\n }\n events = events.map(e => [e[0] * 1000, e[1], e[2]]);\n return {\n cols: header.width === 0 ? DEFAULT_COLS : header.width,\n rows: header.height === 0 ? DEFAULT_ROWS : header.height,\n theme: parseTheme$1(header.theme),\n events,\n idleTimeLimit: header.idle_time_limit\n };\n}\nfunction parseAsciicastV3(header, events) {\n if (!(events instanceof Stream)) {\n events = new Stream(events);\n }\n let time = 0;\n events = events.map(e => {\n time += e[0] * 1000;\n return [time, e[1], e[2]];\n });\n return {\n cols: header.term.cols === 0 ? DEFAULT_COLS : header.term.cols,\n rows: header.term.rows === 0 ? DEFAULT_ROWS : header.term.rows,\n theme: parseTheme$1(header.term?.theme),\n events,\n idleTimeLimit: header.idle_time_limit\n };\n}\nfunction parseTheme$1(theme) {\n const palette = typeof theme?.palette === \"string\" ? theme.palette.split(\":\") : undefined;\n return normalizeTheme({\n foreground: theme?.fg,\n background: theme?.bg,\n palette\n });\n}\n\nfunction benchmark({\n url,\n iterations = 10\n}, {\n dispatch\n}) {\n let data;\n let byteCount = 0;\n return {\n async init() {\n const recording = await parse$2(await fetch(url));\n const {\n cols,\n rows,\n events\n } = recording;\n data = Array.from(events).filter(([_time, type, _text]) => type === \"o\").map(([time, _type, text]) => [time, text]);\n for (const [_, text] of data) {\n byteCount += new Blob([text]).size;\n }\n dispatch(\"reset\", {\n size: {\n cols,\n rows\n }\n });\n },\n play() {\n const startTime = performance.now();\n for (let i = 0; i < iterations; i++) {\n for (const [_, text] of data) {\n dispatch(\"output\", text);\n }\n dispatch(\"output\", \"\\x1bc\"); // reset terminal\n }\n const endTime = performance.now();\n const duration = (endTime - startTime) / 1000;\n const throughput = byteCount * iterations / duration;\n const throughputMbs = byteCount / (1024 * 1024) * iterations / duration;\n console.info(\"benchmark: result\", {\n byteCount,\n iterations,\n duration,\n throughput,\n throughputMbs\n });\n setTimeout(() => {\n dispatch(\"ended\");\n }, 0);\n return true;\n }\n };\n}\n\nfunction getBuffer(bufferTime, dispatch, setTime, baseStreamTime, minFrameTime, logger) {\n const execute = executeEvent(dispatch);\n if (bufferTime === 0) {\n logger.debug(\"using no buffer\");\n return nullBuffer(execute);\n } else {\n bufferTime = bufferTime ?? {};\n let getBufferTime;\n if (typeof bufferTime === \"number\") {\n logger.debug(`using fixed time buffer (${bufferTime} ms)`);\n getBufferTime = _latency => bufferTime;\n } else if (typeof bufferTime === \"function\") {\n logger.debug(\"using custom dynamic buffer\");\n getBufferTime = bufferTime({\n logger\n });\n } else {\n logger.debug(\"using adaptive buffer\", bufferTime);\n getBufferTime = adaptiveBufferTimeProvider({\n logger\n }, bufferTime);\n }\n return buffer(getBufferTime, execute, setTime, logger, baseStreamTime ?? 0, minFrameTime);\n }\n}\nfunction nullBuffer(execute) {\n return {\n pushEvent(event) {\n execute(event[1], event[2]);\n },\n pushText(text) {\n execute(\"o\", text);\n },\n stop() {}\n };\n}\nfunction executeEvent(dispatch) {\n return function (code, data) {\n if (code === \"o\") {\n dispatch(\"output\", data);\n } else if (code === \"i\") {\n dispatch(\"input\", {\n data\n });\n } else if (code === \"r\") {\n dispatch(\"resize\", data);\n } else if (code === \"m\") {\n dispatch(\"marker\", data);\n }\n };\n}\nfunction buffer(getBufferTime, execute, setTime, logger, baseStreamTime, minFrameTime = 1.0 / 60) {\n const outputBatchWindow = minFrameTime * 1000;\n let epoch = performance.now() - baseStreamTime;\n let bufferTime = getBufferTime(0);\n let queue = [];\n let onPush;\n let prevElapsedStreamTime = -outputBatchWindow;\n let stop = false;\n function elapsedWallTime() {\n return performance.now() - epoch;\n }\n function push(item) {\n queue.push(item);\n if (onPush !== undefined) {\n onPush(popAll());\n onPush = undefined;\n }\n }\n function popAll() {\n if (queue.length > 0) {\n const items = queue;\n queue = [];\n return items;\n } else {\n return new Promise(resolve => {\n onPush = resolve;\n });\n }\n }\n async function run() {\n while (!stop) {\n const events = await popAll();\n if (stop) return;\n let nextEventIndex = 0;\n while (nextEventIndex < events.length) {\n nextEventIndex = await executeNextEventChunk(events, nextEventIndex);\n }\n }\n }\n queueMicrotask(run);\n async function executeNextEventChunk(events, nextEventIndex) {\n const event = events[nextEventIndex];\n const elapsedStreamTime = event[3];\n if (elapsedStreamTime - prevElapsedStreamTime >= outputBatchWindow) {\n const delay = elapsedStreamTime - elapsedWallTime();\n if (delay > 0) {\n await sleep(delay);\n if (stop) {\n return events.length;\n }\n }\n setTime(event[0]);\n prevElapsedStreamTime = elapsedStreamTime;\n }\n if (event[1] === \"o\") {\n return executeOutputGroup(events, nextEventIndex);\n }\n execute(event[1], event[2]);\n return nextEventIndex + 1;\n }\n function executeOutputGroup(events, nextEventIndex) {\n const firstEvent = events[nextEventIndex];\n const batchDeadline = firstEvent[0] + outputBatchWindow;\n const output = [];\n let event = firstEvent;\n while (event !== undefined && event[1] === \"o\" && event[0] < batchDeadline) {\n output.push(event[2]);\n event = events[++nextEventIndex];\n }\n execute(\"o\", output);\n return nextEventIndex;\n }\n return {\n pushEvent(event) {\n let latency = elapsedWallTime() - event[0];\n if (latency < 0) {\n logger.debug(`correcting epoch by ${latency} ms`);\n epoch += latency;\n latency = 0;\n }\n bufferTime = getBufferTime(latency);\n push([event[0], event[1], event[2], event[0] + bufferTime]);\n },\n pushText(text) {\n const time = elapsedWallTime();\n push([time, \"o\", text, time + bufferTime]);\n },\n stop() {\n stop = true;\n if (onPush !== undefined) {\n onPush([]);\n onPush = undefined;\n }\n }\n };\n}\nfunction sleep(t) {\n return new Promise(resolve => {\n setTimeout(resolve, t);\n });\n}\nfunction adaptiveBufferTimeProvider({\n logger\n} = {}, {\n minBufferTime = 50,\n bufferLevelStep = 100,\n maxBufferLevel = 50,\n transitionDuration = 500,\n peakHalfLifeUp = 100,\n peakHalfLifeDown = 10000,\n floorHalfLifeUp = 5000,\n floorHalfLifeDown = 100,\n idealHalfLifeUp = 1000,\n idealHalfLifeDown = 5000,\n safetyMultiplier = 1.2,\n minImprovementDuration = 3000\n} = {}) {\n function levelToMs(level) {\n return level === 0 ? minBufferTime : bufferLevelStep * level;\n }\n let bufferLevel = 1;\n let bufferTime = levelToMs(bufferLevel);\n let lastUpdateTime = performance.now();\n let smoothedPeakLatency = null;\n let smoothedFloorLatency = null;\n let smoothedIdealBufferTime = null;\n let stableSince = null;\n let targetBufferTime = null;\n let transitionRate = null;\n return function (latency) {\n const now = performance.now();\n const dt = Math.max(0, now - lastUpdateTime);\n lastUpdateTime = now;\n\n // adjust EMA-smoothed peak latency from current latency\n\n if (smoothedPeakLatency === null) {\n smoothedPeakLatency = latency;\n } else if (latency > smoothedPeakLatency) {\n const alphaUp = 1 - Math.pow(2, -dt / peakHalfLifeUp);\n smoothedPeakLatency += alphaUp * (latency - smoothedPeakLatency);\n } else {\n const alphaDown = 1 - Math.pow(2, -dt / peakHalfLifeDown);\n smoothedPeakLatency += alphaDown * (latency - smoothedPeakLatency);\n }\n smoothedPeakLatency = Math.max(smoothedPeakLatency, 0);\n\n // adjust EMA-smoothed floor latency from current latency\n\n if (smoothedFloorLatency === null) {\n smoothedFloorLatency = latency;\n } else if (latency > smoothedFloorLatency) {\n const alphaUp = 1 - Math.pow(2, -dt / floorHalfLifeUp);\n smoothedFloorLatency += alphaUp * (latency - smoothedFloorLatency);\n } else {\n const alphaDown = 1 - Math.pow(2, -dt / floorHalfLifeDown);\n smoothedFloorLatency += alphaDown * (latency - smoothedFloorLatency);\n }\n smoothedFloorLatency = Math.max(smoothedFloorLatency, 0);\n\n // adjust EMA-smoothed ideal buffer time\n\n const jitter = smoothedPeakLatency - smoothedFloorLatency;\n const idealBufferTime = safetyMultiplier * (smoothedPeakLatency + jitter);\n if (smoothedIdealBufferTime === null) {\n smoothedIdealBufferTime = idealBufferTime;\n } else if (idealBufferTime > smoothedIdealBufferTime) {\n const alphaUp = 1 - Math.pow(2, -dt / idealHalfLifeUp);\n smoothedIdealBufferTime += +alphaUp * (idealBufferTime - smoothedIdealBufferTime);\n } else {\n const alphaDown = 1 - Math.pow(2, -dt / idealHalfLifeDown);\n smoothedIdealBufferTime += +alphaDown * (idealBufferTime - smoothedIdealBufferTime);\n }\n\n // quantize smoothed ideal buffer time to discrete buffer level\n\n let newBufferLevel;\n if (smoothedIdealBufferTime <= minBufferTime) {\n newBufferLevel = 0;\n } else {\n newBufferLevel = clamp(Math.ceil(smoothedIdealBufferTime / bufferLevelStep), 1, maxBufferLevel);\n }\n if (latency > bufferTime) {\n logger.debug('buffer underrun', {\n latency,\n bufferTime\n });\n }\n\n // adjust buffer level and target buffer time for new buffer level\n\n if (newBufferLevel > bufferLevel) {\n if (latency > bufferTime) {\n // <- underrun - raise quickly\n bufferLevel = Math.min(newBufferLevel, bufferLevel + 3);\n } else {\n bufferLevel += 1;\n }\n targetBufferTime = levelToMs(bufferLevel);\n transitionRate = (targetBufferTime - bufferTime) / transitionDuration;\n stableSince = null;\n logger.debug('raising buffer', {\n latency,\n bufferTime,\n targetBufferTime\n });\n } else if (newBufferLevel < bufferLevel) {\n if (stableSince == null) stableSince = now;\n if (now - stableSince >= minImprovementDuration) {\n bufferLevel -= 1;\n targetBufferTime = levelToMs(bufferLevel);\n transitionRate = (targetBufferTime - bufferTime) / transitionDuration;\n stableSince = now;\n logger.debug('lowering buffer', {\n latency,\n bufferTime,\n targetBufferTime\n });\n }\n } else {\n stableSince = null;\n }\n\n // linear transition to target buffer time\n\n if (targetBufferTime !== null) {\n bufferTime += transitionRate * dt;\n if (transitionRate >= 0 && bufferTime > targetBufferTime || transitionRate < 0 && bufferTime < targetBufferTime) {\n bufferTime = targetBufferTime;\n targetBufferTime = null;\n }\n }\n return bufferTime;\n };\n}\nfunction clamp(x, lo, hi) {\n return Math.min(hi, Math.max(lo, x));\n}\n\nconst ONE_MS_IN_USEC = 1000;\nconst ONE_SEC_IN_USEC = 1000000;\nfunction alisHandler(logger) {\n const outputDecoder = new TextDecoder();\n const inputDecoder = new TextDecoder();\n let handler = parseMagicString;\n let lastEventTime;\n let markerIndex = 0;\n function parseMagicString(buffer) {\n const text = new TextDecoder().decode(buffer);\n if (text === \"ALiS\\x01\") {\n handler = parseFirstFrame;\n } else {\n throw new Error(\"not an ALiS v1 live stream\");\n }\n }\n function parseFirstFrame(buffer) {\n const view = new BinaryReader(new DataView(buffer));\n const type = view.getUint8();\n if (type !== 0x01) throw new Error(`expected reset (0x01) frame, got ${type}`);\n return parseResetFrame(view, buffer);\n }\n function parseResetFrame(view, buffer) {\n view.decodeVarUint();\n let time = view.decodeVarUint();\n lastEventTime = time;\n time = time / ONE_MS_IN_USEC;\n markerIndex = 0;\n const cols = view.decodeVarUint();\n const rows = view.decodeVarUint();\n const themeFormat = view.getUint8();\n let theme;\n if (themeFormat === 8) {\n const len = (2 + 8) * 3;\n theme = parseTheme(new Uint8Array(buffer, view.offset, len));\n view.forward(len);\n } else if (themeFormat === 16) {\n const len = (2 + 16) * 3;\n theme = parseTheme(new Uint8Array(buffer, view.offset, len));\n view.forward(len);\n } else if (themeFormat !== 0) {\n throw new Error(`alis: invalid theme format (${themeFormat})`);\n }\n const initLen = view.decodeVarUint();\n let init;\n if (initLen > 0) {\n init = outputDecoder.decode(new Uint8Array(buffer, view.offset, initLen));\n }\n handler = parseFrame;\n return {\n time,\n term: {\n size: {\n cols,\n rows\n },\n theme,\n init\n }\n };\n }\n function parseFrame(buffer) {\n const view = new BinaryReader(new DataView(buffer));\n const type = view.getUint8();\n if (type === 0x01) {\n return parseResetFrame(view, buffer);\n } else if (type === 0x6f) {\n // \"o\"\n return parseOutputFrame(view, buffer);\n } else if (type === 0x69) {\n // \"i\"\n return parseInputFrame(view, buffer);\n } else if (type === 0x72) {\n // \"r\"\n return parseResizeFrame(view);\n } else if (type === 0x6d) {\n // \"m\"\n return parseMarkerFrame(view, buffer);\n } else if (type === 0x78) {\n // \"x\"\n return parseExitFrame(view);\n } else if (type === 0x04) {\n // EOT\n handler = parseFirstFrame;\n return false;\n } else {\n logger.debug(`alis: unknown frame type: ${type}`);\n }\n }\n function parseOutputFrame(view, buffer) {\n view.decodeVarUint();\n const relTime = view.decodeVarUint();\n lastEventTime += relTime;\n const len = view.decodeVarUint();\n const text = outputDecoder.decode(new Uint8Array(buffer, view.offset, len));\n return [lastEventTime / ONE_MS_IN_USEC, \"o\", text];\n }\n function parseInputFrame(view, buffer) {\n view.decodeVarUint();\n const relTime = view.decodeVarUint();\n lastEventTime += relTime;\n const len = view.decodeVarUint();\n const text = inputDecoder.decode(new Uint8Array(buffer, view.offset, len));\n return [lastEventTime / ONE_MS_IN_USEC, \"i\", text];\n }\n function parseResizeFrame(view) {\n view.decodeVarUint();\n const relTime = view.decodeVarUint();\n lastEventTime += relTime;\n const cols = view.decodeVarUint();\n const rows = view.decodeVarUint();\n return [lastEventTime / ONE_MS_IN_USEC, \"r\", {\n cols,\n rows\n }];\n }\n function parseMarkerFrame(view, buffer) {\n view.decodeVarUint();\n const relTime = view.decodeVarUint();\n lastEventTime += relTime;\n const len = view.decodeVarUint();\n const decoder = new TextDecoder();\n const index = markerIndex++;\n const time = lastEventTime / ONE_MS_IN_USEC;\n const markerTime = lastEventTime / ONE_SEC_IN_USEC;\n const label = decoder.decode(new Uint8Array(buffer, view.offset, len));\n return [time, \"m\", {\n index,\n time: markerTime,\n label\n }];\n }\n function parseExitFrame(view) {\n view.decodeVarUint();\n const relTime = view.decodeVarUint();\n lastEventTime += relTime;\n const status = view.decodeVarUint();\n return [lastEventTime / ONE_MS_IN_USEC, \"x\", {\n status\n }];\n }\n return function (buffer) {\n return handler(buffer);\n };\n}\nfunction parseTheme(arr) {\n const colorCount = arr.length / 3;\n const foreground = hexColor(arr[0], arr[1], arr[2]);\n const background = hexColor(arr[3], arr[4], arr[5]);\n const palette = [];\n for (let i = 2; i < colorCount; i++) {\n palette.push(hexColor(arr[i * 3], arr[i * 3 + 1], arr[i * 3 + 2]));\n }\n return normalizeTheme({\n foreground,\n background,\n palette\n });\n}\nfunction hexColor(r, g, b) {\n return `#${byteToHex(r)}${byteToHex(g)}${byteToHex(b)}`;\n}\nfunction byteToHex(value) {\n return value.toString(16).padStart(2, \"0\");\n}\nclass BinaryReader {\n constructor(inner, offset = 0) {\n this.inner = inner;\n this.offset = offset;\n }\n forward(delta) {\n this.offset += delta;\n }\n getUint8() {\n const value = this.inner.getUint8(this.offset);\n this.offset += 1;\n return value;\n }\n decodeVarUint() {\n let number = BigInt(0);\n let shift = BigInt(0);\n let byte = this.getUint8();\n while (byte > 127) {\n byte &= 127;\n number += BigInt(byte) << shift;\n shift += BigInt(7);\n byte = this.getUint8();\n }\n number = number + (BigInt(byte) << shift);\n return Number(number);\n }\n}\n\nfunction ascicastV2Handler() {\n let parse = parseHeader;\n function parseHeader(buffer) {\n const header = JSON.parse(buffer);\n if (header.version !== 2) {\n throw new Error(\"not an asciicast v2 stream\");\n }\n parse = parseEvent;\n return {\n time: 0.0,\n term: {\n size: {\n cols: header.width,\n rows: header.height\n }\n }\n };\n }\n function parseEvent(buffer) {\n const event = JSON.parse(buffer);\n const time = event[0] * 1000;\n if (event[1] === \"r\") {\n const [cols, rows] = event[2].split(\"x\");\n return [time, \"r\", {\n cols: parseInt(cols, 10),\n rows: parseInt(rows, 10)\n }];\n } else {\n return [time, event[1], event[2]];\n }\n }\n return function (buffer) {\n return parse(buffer);\n };\n}\n\nfunction ascicastV3Handler() {\n let parse = parseHeader;\n let currentTime = 0;\n function parseHeader(buffer) {\n const header = JSON.parse(buffer);\n if (header.version !== 3) {\n throw new Error(\"not an asciicast v3 stream\");\n }\n parse = parseEvent;\n const term = {\n size: {\n cols: header.term.cols,\n rows: header.term.rows\n }\n };\n if (header.term.theme) {\n const palette = typeof header.term.theme.palette === \"string\" ? header.term.theme.palette.split(\":\") : undefined;\n const theme = normalizeTheme({\n foreground: header.term.theme.fg,\n background: header.term.theme.bg,\n palette\n });\n if (theme) {\n term.theme = theme;\n }\n }\n return {\n time: 0.0,\n term\n };\n }\n function parseEvent(buffer) {\n const event = JSON.parse(buffer);\n const [interval, eventType, data] = event;\n currentTime += interval * 1000;\n if (eventType === \"r\") {\n const [cols, rows] = data.split(\"x\");\n return [currentTime, \"r\", {\n cols: parseInt(cols, 10),\n rows: parseInt(rows, 10)\n }];\n } else {\n return [currentTime, eventType, data];\n }\n }\n return function (buffer) {\n return parse(buffer);\n };\n}\n\nfunction rawHandler() {\n const outputDecoder = new TextDecoder();\n let parse = parseSize;\n function parseSize(buffer) {\n const text = outputDecoder.decode(buffer, {\n stream: true\n });\n const [cols, rows] = sizeFromResizeSeq(text) ?? sizeFromScriptStartMessage(text) ?? [80, 24];\n parse = parseOutput;\n return {\n time: 0.0,\n term: {\n size: {\n cols,\n rows\n },\n init: text\n }\n };\n }\n function parseOutput(buffer) {\n return outputDecoder.decode(buffer, {\n stream: true\n });\n }\n return function (buffer) {\n return parse(buffer);\n };\n}\nfunction sizeFromResizeSeq(text) {\n const match = text.match(/\\x1b\\[8;(\\d+);(\\d+)t/);\n if (match !== null) {\n return [parseInt(match[2], 10), parseInt(match[1], 10)];\n }\n}\nfunction sizeFromScriptStartMessage(text) {\n const match = text.match(/\\[.*COLUMNS=\"(\\d{1,3})\" LINES=\"(\\d{1,3})\".*\\]/);\n if (match !== null) {\n return [parseInt(match[1], 10), parseInt(match[2], 10)];\n }\n}\n\nconst RECONNECT_DELAY_BASE = 500;\nconst RECONNECT_DELAY_CAP = 10000;\nfunction exponentialDelay(attempt) {\n const base = Math.min(RECONNECT_DELAY_BASE * Math.pow(2, attempt), RECONNECT_DELAY_CAP);\n return Math.random() * base;\n}\nfunction websocket({\n url,\n bufferTime,\n reconnectDelay = exponentialDelay,\n minFrameTime\n}, {\n dispatch,\n logger\n}, {\n audioUrl\n}) {\n logger = new PrefixedLogger(logger, \"websocket: \");\n let socket;\n let buf;\n let clock = new NullClock();\n let reconnectAttempt = 0;\n let successfulConnectionTimeout;\n let stop = false;\n let wasOnline = false;\n let gotExitEvent = false;\n let gotEotEvent = false;\n let initTimeout;\n let audioElement;\n function connect() {\n socket = new WebSocket(url, [\"v1.alis\", \"v2.asciicast\", \"v3.asciicast\", \"raw\"]);\n socket.binaryType = \"arraybuffer\";\n let proto;\n socket.onopen = () => {\n proto = socket.protocol || \"raw\";\n logger.info(\"opened\");\n logger.info(`activating ${proto} protocol handler`);\n if (proto === \"v1.alis\") {\n socket.onmessage = onMessage(alisHandler(logger));\n } else if (proto === \"v2.asciicast\") {\n socket.onmessage = onMessage(ascicastV2Handler());\n } else if (proto === \"v3.asciicast\") {\n socket.onmessage = onMessage(ascicastV3Handler());\n } else if (proto === \"raw\") {\n socket.onmessage = onMessage(rawHandler());\n }\n successfulConnectionTimeout = setTimeout(() => {\n reconnectAttempt = 0;\n }, 1000);\n };\n socket.onclose = event => {\n clearTimeout(initTimeout);\n stopBuffer();\n if (stop) return;\n let ended = false;\n let endedMessage = \"Stream ended\";\n if (proto === \"v1.alis\") {\n if (gotEotEvent || event.code >= 4000 && event.code <= 4100) {\n ended = true;\n endedMessage = event.reason || endedMessage;\n }\n } else if (gotExitEvent || event.code === 1000 || event.code === 1005) {\n ended = true;\n }\n if (ended) {\n logger.info(\"closed\");\n dispatch(\"ended\", {\n message: endedMessage\n });\n } else if (event.code === 1002) {\n logger.debug(`close reason: ${event.reason}`);\n dispatch(\"ended\", {\n message: \"Err: Player not compatible with the server\"\n });\n } else {\n clearTimeout(successfulConnectionTimeout);\n const delay = reconnectDelay(reconnectAttempt++);\n logger.info(`unexpected close, reconnecting in ${delay}...`);\n dispatch(\"loading\");\n setTimeout(connect, delay);\n }\n };\n wasOnline = false;\n }\n function onMessage(handler) {\n initTimeout = setTimeout(onStreamEnd, 5000);\n return function (event) {\n try {\n const result = handler(event.data);\n if (buf) {\n if (Array.isArray(result)) {\n buf.pushEvent(result);\n if (result[1] === \"x\") {\n gotExitEvent = true;\n }\n } else if (typeof result === \"string\") {\n buf.pushText(result);\n } else if (typeof result === \"object\" && !Array.isArray(result)) {\n // TODO: check last event ID from the parser, don't reset if we didn't miss anything\n onStreamReset(result);\n } else if (result === false) {\n // EOT\n onStreamEnd();\n gotEotEvent = true;\n } else if (result !== undefined) {\n throw new Error(`unexpected value from protocol handler: ${result}`);\n }\n } else {\n if (typeof result === \"object\" && !Array.isArray(result)) {\n onStreamReset(result);\n clearTimeout(initTimeout);\n } else if (result === undefined) {\n clearTimeout(initTimeout);\n initTimeout = setTimeout(onStreamEnd, 1000);\n } else {\n clearTimeout(initTimeout);\n throw new Error(`unexpected value from protocol handler: ${result}`);\n }\n }\n } catch (e) {\n socket.close();\n throw e;\n }\n };\n }\n function onStreamReset({\n time,\n term\n }) {\n const {\n size,\n init,\n theme\n } = term;\n const {\n cols,\n rows\n } = size;\n logger.info(`stream reset (${cols}x${rows} @${time})`);\n stopBuffer();\n buf = getBuffer(bufferTime, dispatch, t => clock.setTime(t), time, minFrameTime, logger);\n dispatch(\"reset\", {\n size: {\n cols,\n rows\n },\n init,\n theme: theme ?? null\n });\n clock = new Clock();\n wasOnline = true;\n gotExitEvent = false;\n gotEotEvent = false;\n if (typeof time === \"number\") {\n clock.setTime(time);\n }\n dispatch(\"playing\");\n }\n function onStreamEnd() {\n stopBuffer();\n if (wasOnline) {\n logger.info(\"stream ended\");\n dispatch(\"offline\", {\n message: \"Stream ended\"\n });\n } else {\n logger.info(\"stream offline\");\n dispatch(\"offline\", {\n message: \"Stream offline\"\n });\n }\n clock = new NullClock();\n }\n function stopBuffer() {\n if (buf) buf.stop();\n buf = null;\n }\n function startAudio() {\n if (!audioUrl) return;\n audioElement = new Audio();\n audioElement.preload = \"auto\";\n audioElement.crossOrigin = \"anonymous\";\n audioElement.src = audioUrl;\n audioElement.play();\n }\n function stopAudio() {\n if (!audioElement) return;\n audioElement.pause();\n }\n function mute() {\n if (audioElement) {\n audioElement.muted = true;\n return true;\n }\n }\n function unmute() {\n if (audioElement) {\n audioElement.muted = false;\n return true;\n }\n }\n return {\n init: () => {\n dispatch(\"metadata\", {\n hasAudio: !!audioUrl\n });\n },\n play: () => {\n if (socket) return true;\n dispatch(\"play\");\n connect();\n startAudio();\n return true;\n },\n stop: () => {\n stop = true;\n stopBuffer();\n if (socket !== undefined) socket.close();\n stopAudio();\n },\n mute,\n unmute,\n getCurrentTime: () => {\n const t = clock.getTime();\n return typeof t === \"number\" ? t / 1000 : t;\n }\n };\n}\n\nfunction eventsource({\n url,\n bufferTime,\n minFrameTime\n}, {\n dispatch,\n logger\n}) {\n logger = new PrefixedLogger(logger, \"eventsource: \");\n let es;\n let buf;\n let clock = new NullClock();\n function initBuffer(baseStreamTime) {\n if (buf !== undefined) buf.stop();\n buf = getBuffer(bufferTime, dispatch, t => clock.setTime(t), baseStreamTime, minFrameTime, logger);\n }\n return {\n play: () => {\n if (es) return true;\n dispatch(\"play\");\n es = new EventSource(url);\n es.addEventListener(\"open\", () => {\n logger.info(\"opened\");\n initBuffer();\n });\n es.addEventListener(\"error\", e => {\n logger.info(\"errored\");\n logger.debug({\n e\n });\n dispatch(\"loading\");\n });\n es.addEventListener(\"message\", event => {\n const e = JSON.parse(event.data);\n if (Array.isArray(e)) {\n buf.pushEvent([e[0] * 1000, e[1], e[2]]);\n } else if (e.cols !== undefined || e.width !== undefined) {\n const cols = e.cols ?? e.width;\n const rows = e.rows ?? e.height;\n const time = typeof e.time === \"number\" ? e.time * 1000 : undefined;\n logger.debug(`vt reset (${cols}x${rows})`);\n initBuffer(time);\n dispatch(\"reset\", {\n size: {\n cols,\n rows\n },\n init: e.init ?? undefined\n });\n clock = new Clock();\n if (time !== undefined) {\n clock.setTime(time);\n }\n dispatch(\"playing\");\n } else if (e.state === \"offline\") {\n logger.info(\"stream offline\");\n dispatch(\"offline\", {\n message: \"Stream offline\"\n });\n clock = new NullClock();\n }\n });\n es.addEventListener(\"done\", () => {\n logger.info(\"closed\");\n es.close();\n dispatch(\"ended\", {\n message: \"Stream ended\"\n });\n });\n return true;\n },\n stop: () => {\n if (buf !== undefined) buf.stop();\n if (es !== undefined) es.close();\n },\n getCurrentTime: () => {\n const t = clock.getTime();\n return typeof t === \"number\" ? t / 1000 : t;\n }\n };\n}\n\nasync function parse$1(responses, {\n encoding\n}) {\n const textDecoder = new TextDecoder(encoding);\n let cols;\n let rows;\n let timing = (await responses[0].text()).split(\"\\n\").filter(line => line.length > 0).map(line => line.split(\" \"));\n if (timing[0].length < 3) {\n timing = timing.map(entry => [\"O\", entry[0], entry[1]]);\n }\n const buffer = await responses[1].arrayBuffer();\n const array = new Uint8Array(buffer);\n const dataOffset = array.findIndex(byte => byte == 0x0a) + 1;\n const header = textDecoder.decode(array.subarray(0, dataOffset));\n const sizeMatch = header.match(/COLUMNS=\"(\\d+)\" LINES=\"(\\d+)\"/);\n if (sizeMatch !== null) {\n cols = parseInt(sizeMatch[1], 10);\n rows = parseInt(sizeMatch[2], 10);\n }\n const stdout = {\n array,\n cursor: dataOffset\n };\n let stdin = stdout;\n if (responses[2] !== undefined) {\n const buffer = await responses[2].arrayBuffer();\n const array = new Uint8Array(buffer);\n stdin = {\n array,\n cursor: dataOffset\n };\n }\n const events = [];\n let time = 0;\n for (const entry of timing) {\n time += parseFloat(entry[1]) * 1000;\n if (entry[0] === \"O\") {\n const count = parseInt(entry[2], 10);\n const bytes = stdout.array.subarray(stdout.cursor, stdout.cursor + count);\n const text = textDecoder.decode(bytes);\n events.push([time, \"o\", text]);\n stdout.cursor += count;\n } else if (entry[0] === \"I\") {\n const count = parseInt(entry[2], 10);\n const bytes = stdin.array.subarray(stdin.cursor, stdin.cursor + count);\n const text = textDecoder.decode(bytes);\n events.push([time, \"i\", text]);\n stdin.cursor += count;\n } else if (entry[0] === \"S\" && entry[2] === \"SIGWINCH\") {\n const cols = parseInt(entry[4].slice(5), 10);\n const rows = parseInt(entry[3].slice(5), 10);\n events.push([time, \"r\", `${cols}x${rows}`]);\n } else if (entry[0] === \"H\" && entry[2] === \"COLUMNS\") {\n cols = parseInt(entry[3], 10);\n } else if (entry[0] === \"H\" && entry[2] === \"LINES\") {\n rows = parseInt(entry[3], 10);\n }\n }\n cols = cols ?? 80;\n rows = rows ?? 24;\n return {\n cols,\n rows,\n events\n };\n}\n\nasync function parse(response, {\n encoding\n}) {\n const textDecoder = new TextDecoder(encoding);\n const buffer = await response.arrayBuffer();\n const array = new Uint8Array(buffer);\n const firstFrame = parseFrame(array);\n const baseTime = firstFrame.time;\n const firstFrameText = textDecoder.decode(firstFrame.data);\n const sizeMatch = firstFrameText.match(/\\x1b\\[8;(\\d+);(\\d+)t/);\n const events = [];\n let cols = 80;\n let rows = 24;\n if (sizeMatch !== null) {\n cols = parseInt(sizeMatch[2], 10);\n rows = parseInt(sizeMatch[1], 10);\n }\n let cursor = 0;\n let frame = parseFrame(array);\n while (frame !== undefined) {\n const time = (frame.time - baseTime) * 1000;\n const text = textDecoder.decode(frame.data);\n events.push([time, \"o\", text]);\n cursor += frame.len;\n frame = parseFrame(array.subarray(cursor));\n }\n return {\n cols,\n rows,\n events\n };\n}\nfunction parseFrame(array) {\n if (array.length < 13) return;\n const time = parseTimestamp(array.subarray(0, 8));\n const len = parseNumber(array.subarray(8, 12));\n const data = array.subarray(12, 12 + len);\n return {\n time,\n data,\n len: len + 12\n };\n}\nfunction parseNumber(array) {\n return array[0] + array[1] * 256 + array[2] * 256 * 256 + array[3] * 256 * 256 * 256;\n}\nfunction parseTimestamp(array) {\n const sec = parseNumber(array.subarray(0, 4));\n const usec = parseNumber(array.subarray(4, 8));\n return sec + usec / 1000000;\n}\n\nclass Core {\n constructor(src, opts) {\n this.logger = opts.logger;\n this.driverFactory = getDriver(src);\n this.driver = null;\n this.cols = opts.cols;\n this.rows = opts.rows;\n this.speed = opts.speed;\n this.loop = opts.loop;\n this.autoPlay = opts.autoPlay;\n this.idleTimeLimit = opts.idleTimeLimit;\n this.preload = opts.preload;\n this.startAt = parseNpt(opts.startAt);\n this.poster = this._parsePoster(opts.poster);\n this.markers = opts.markers;\n this.pauseOnMarkers = opts.pauseOnMarkers;\n this.audioUrl = opts.audioUrl;\n this.initPromise = null;\n this.commandQueue = Promise.resolve();\n this.startupPromise = new Promise(resolve => {\n this.resolveStartup = resolve;\n });\n this.eventHandlers = new Map([[\"ended\", []], [\"error\", []], [\"input\", []], [\"loading\", []], [\"marker\", []], [\"metadata\", []], [\"muted\", []], [\"offline\", []], [\"output\", []], [\"pause\", []], [\"play\", []], [\"playing\", []], [\"reset\", []], [\"resize\", []], [\"ready\", []], [\"seeked\", []]]);\n }\n init() {\n if (this.initPromise === null) {\n this.initPromise = this._init();\n }\n return this.initPromise;\n }\n terminalReady() {\n this.resolveStartup();\n }\n async _init() {\n // Wait until Terminal has installed VT event listeners before drivers start dispatching.\n await this.startupPromise;\n this.driver = this.driverFactory({\n dispatch: this._dispatchEvent.bind(this),\n logger: this.logger\n }, {\n cols: this.cols,\n rows: this.rows,\n speed: this.speed,\n idleTimeLimit: this.idleTimeLimit,\n startAt: this.startAt,\n preload: this.preload,\n loop: this.loop,\n poster: this.autoPlay ? undefined : this.poster,\n markers: this.markers,\n pauseOnMarkers: this.pauseOnMarkers,\n audioUrl: this.audioUrl\n });\n const config = {\n isPausable: !!this.driver.pause,\n isSeekable: !!this.driver.seek\n };\n this._installDriverDefaults();\n if (this.driver.init) {\n await this.driver.init();\n }\n if (this.autoPlay) {\n await this.driver.play();\n }\n this._dispatchEvent(\"ready\", config);\n }\n _installDriverDefaults() {\n if (this.driver.stop === undefined) {\n this.driver.stop = () => {};\n }\n if (this.driver.pause === undefined) {\n this.driver.pause = () => {};\n }\n if (this.driver.seek === undefined) {\n this.driver.seek = _where => false;\n }\n if (this.driver.step === undefined) {\n this.driver.step = _n => {};\n }\n if (this.driver.mute === undefined) {\n this.driver.mute = () => {};\n }\n if (this.driver.unmute === undefined) {\n this.driver.unmute = () => {};\n }\n if (this.driver.getDuration === undefined) {\n this.driver.getDuration = () => {};\n }\n if (this.driver.getCurrentTime === undefined) {\n const play = this.driver.play;\n let clock = new NullClock();\n this.driver.play = () => {\n clock = new Clock(this.speed);\n return play();\n };\n this.driver.getCurrentTime = () => {\n const t = clock.getTime();\n return typeof t === \"number\" ? t / 1000 : t;\n };\n }\n }\n _enqueue(command) {\n const run = async () => {\n await this.init();\n return command.call(this);\n };\n const result = this.commandQueue.then(run, run);\n this.commandQueue = result.catch(() => {});\n return result;\n }\n play() {\n return this._enqueue(function () {\n return this.driver.play();\n });\n }\n pause() {\n return this._enqueue(function () {\n return this.driver.pause();\n });\n }\n seek(where) {\n return this._enqueue(function () {\n return this.driver.seek(where);\n });\n }\n step(n) {\n return this._enqueue(function () {\n return this.driver.step(n);\n });\n }\n stop() {\n return this._enqueue(function () {\n return this.driver.stop();\n });\n }\n mute() {\n return this._enqueue(function () {\n return this.driver.mute();\n });\n }\n unmute() {\n return this._enqueue(function () {\n return this.driver.unmute();\n });\n }\n getCurrentTime() {\n if (!this.driver) {\n return 0;\n }\n return this.driver.getCurrentTime();\n }\n getRemainingTime() {\n const duration = this.getDuration();\n if (typeof duration === \"number\") {\n return duration - Math.min(this.getCurrentTime(), duration);\n }\n }\n getProgress() {\n const duration = this.getDuration();\n if (typeof duration === \"number\") {\n return Math.min(this.getCurrentTime(), duration) / duration;\n }\n }\n getDuration() {\n if (!this.driver) {\n return undefined;\n }\n return this.driver.getDuration();\n }\n addEventListener(eventName, handler) {\n this.eventHandlers.get(eventName).push(handler);\n }\n removeEventListener(eventName, handler) {\n const handlers = this.eventHandlers.get(eventName);\n if (!handlers) return;\n const idx = handlers.indexOf(handler);\n if (idx !== -1) handlers.splice(idx, 1);\n }\n _dispatchEvent(eventName, data = {}) {\n for (const handler of [...this.eventHandlers.get(eventName)]) {\n try {\n handler(data);\n } catch (error) {\n this.logger.error(`event handler for \"${eventName}\" failed`, error);\n if (typeof globalThis.reportError === \"function\") {\n globalThis.reportError(error);\n } else {\n setTimeout(() => {\n throw error;\n }, 0);\n }\n }\n }\n }\n _parsePoster(poster) {\n if (typeof poster !== \"string\") return;\n if (poster.substring(0, 16) == \"data:text/plain,\") {\n return {\n type: \"text\",\n value: poster.substring(16)\n };\n } else if (poster.substring(0, 4) == \"npt:\") {\n return {\n type: \"npt\",\n value: parseNpt(poster.substring(4))\n };\n }\n return;\n }\n}\nconst DRIVERS = new Map([[\"benchmark\", benchmark], [\"clock\", clock], [\"eventsource\", eventsource], [\"random\", random], [\"recording\", recording], [\"websocket\", websocket]]);\nconst PARSERS = new Map([[\"asciicast\", parse$2], [\"typescript\", parse$1], [\"ttyrec\", parse]]);\nfunction getDriver(src) {\n if (typeof src === \"function\") return src;\n if (typeof src === \"string\") {\n if (src.substring(0, 5) == \"ws://\" || src.substring(0, 6) == \"wss://\") {\n src = {\n driver: \"websocket\",\n url: src\n };\n } else if (src.substring(0, 6) == \"clock:\") {\n src = {\n driver: \"clock\"\n };\n } else if (src.substring(0, 7) == \"random:\") {\n src = {\n driver: \"random\"\n };\n } else if (src.substring(0, 10) == \"benchmark:\") {\n src = {\n driver: \"benchmark\",\n url: src.substring(10)\n };\n } else {\n src = {\n driver: \"recording\",\n url: src\n };\n }\n }\n if (src.driver === undefined) {\n src.driver = \"recording\";\n }\n if (src.driver == \"recording\") {\n if (src.format !== \"segmented\" && src.parser === undefined) {\n src.parser = \"asciicast\";\n }\n if (typeof src.parser === \"string\") {\n if (PARSERS.has(src.parser)) {\n src.parser = PARSERS.get(src.parser);\n } else {\n throw new Error(`unknown parser: ${src.parser}`);\n }\n }\n }\n if (DRIVERS.has(src.driver)) {\n const driver = DRIVERS.get(src.driver);\n return (callbacks, opts) => driver(src, callbacks, opts);\n } else {\n throw new Error(`unsupported driver: ${JSON.stringify(src)}`);\n }\n}\n\nexport { Core as C };\n","import { h as hexToOklab, l as lerpOklab, o as oklabToHex, r as rgbToHex, n as normalizeHexColor, t as throttle, d as debounce } from './logging-DeB0koVt.js';\n\nconst IS_DEV = false;\nconst equalFn = (a, b) => a === b;\nconst $TRACK = Symbol(\"solid-track\");\nconst signalOptions = {\n equals: equalFn\n};\nlet runEffects = runQueue;\nconst STALE = 1;\nconst PENDING = 2;\nconst UNOWNED = {\n owned: null,\n cleanups: null,\n context: null,\n owner: null\n};\nvar Owner = null;\nlet Transition$1 = null;\nlet ExternalSourceConfig = null;\nlet Listener = null;\nlet Updates = null;\nlet Effects = null;\nlet ExecCount = 0;\nfunction createRoot(fn, detachedOwner) {\n const listener = Listener,\n owner = Owner,\n unowned = fn.length === 0,\n current = detachedOwner === undefined ? owner : detachedOwner,\n root = unowned\n ? UNOWNED\n : {\n owned: null,\n cleanups: null,\n context: current ? current.context : null,\n owner: current\n },\n updateFn = unowned ? fn : () => fn(() => untrack(() => cleanNode(root)));\n Owner = root;\n Listener = null;\n try {\n return runUpdates(updateFn, true);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n}\nfunction createSignal(value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const s = {\n value,\n observers: null,\n observerSlots: null,\n comparator: options.equals || undefined\n };\n const setter = value => {\n if (typeof value === \"function\") {\n value = value(s.value);\n }\n return writeSignal(s, value);\n };\n return [readSignal.bind(s), setter];\n}\nfunction createComputed(fn, value, options) {\n const c = createComputation(fn, value, true, STALE);\n updateComputation(c);\n}\nfunction createRenderEffect(fn, value, options) {\n const c = createComputation(fn, value, false, STALE);\n updateComputation(c);\n}\nfunction createEffect(fn, value, options) {\n runEffects = runUserEffects;\n const c = createComputation(fn, value, false, STALE);\n c.user = true;\n Effects ? Effects.push(c) : updateComputation(c);\n}\nfunction createMemo(fn, value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const c = createComputation(fn, value, true, 0);\n c.observers = null;\n c.observerSlots = null;\n c.comparator = options.equals || undefined;\n updateComputation(c);\n return readSignal.bind(c);\n}\nfunction batch(fn) {\n return runUpdates(fn, false);\n}\nfunction untrack(fn) {\n if (Listener === null) return fn();\n const listener = Listener;\n Listener = null;\n try {\n if (ExternalSourceConfig) ;\n return fn();\n } finally {\n Listener = listener;\n }\n}\nfunction onMount(fn) {\n createEffect(() => untrack(fn));\n}\nfunction onCleanup(fn) {\n if (Owner === null);\n else if (Owner.cleanups === null) Owner.cleanups = [fn];\n else Owner.cleanups.push(fn);\n return fn;\n}\nfunction startTransition(fn) {\n const l = Listener;\n const o = Owner;\n return Promise.resolve().then(() => {\n Listener = l;\n Owner = o;\n let t;\n runUpdates(fn, false);\n Listener = Owner = null;\n return t ? t.done : undefined;\n });\n}\nconst [transPending] = /*@__PURE__*/ createSignal(false);\nfunction useTransition() {\n return [transPending, startTransition];\n}\nfunction children(fn) {\n const children = createMemo(fn);\n const memo = createMemo(() => resolveChildren(children()));\n memo.toArray = () => {\n const c = memo();\n return Array.isArray(c) ? c : c != null ? [c] : [];\n };\n return memo;\n}\nfunction readSignal() {\n if (this.sources && (this.state)) {\n if ((this.state) === STALE) updateComputation(this);\n else {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(this), false);\n Updates = updates;\n }\n }\n if (Listener) {\n const sSlot = this.observers ? this.observers.length : 0;\n if (!Listener.sources) {\n Listener.sources = [this];\n Listener.sourceSlots = [sSlot];\n } else {\n Listener.sources.push(this);\n Listener.sourceSlots.push(sSlot);\n }\n if (!this.observers) {\n this.observers = [Listener];\n this.observerSlots = [Listener.sources.length - 1];\n } else {\n this.observers.push(Listener);\n this.observerSlots.push(Listener.sources.length - 1);\n }\n }\n return this.value;\n}\nfunction writeSignal(node, value, isComp) {\n let current =\n node.value;\n if (!node.comparator || !node.comparator(current, value)) {\n node.value = value;\n if (node.observers && node.observers.length) {\n runUpdates(() => {\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n const TransitionRunning = Transition$1 && Transition$1.running;\n if (TransitionRunning && Transition$1.disposed.has(o)) ;\n if (TransitionRunning ? !o.tState : !o.state) {\n if (o.pure) Updates.push(o);\n else Effects.push(o);\n if (o.observers) markDownstream(o);\n }\n if (!TransitionRunning) o.state = STALE;\n }\n if (Updates.length > 10e5) {\n Updates = [];\n if (IS_DEV);\n throw new Error();\n }\n }, false);\n }\n }\n return value;\n}\nfunction updateComputation(node) {\n if (!node.fn) return;\n cleanNode(node);\n const time = ExecCount;\n runComputation(\n node,\n node.value,\n time\n );\n}\nfunction runComputation(node, value, time) {\n let nextValue;\n const owner = Owner,\n listener = Listener;\n Listener = Owner = node;\n try {\n nextValue = node.fn(value);\n } catch (err) {\n if (node.pure) {\n {\n node.state = STALE;\n node.owned && node.owned.forEach(cleanNode);\n node.owned = null;\n }\n }\n node.updatedAt = time + 1;\n return handleError(err);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n if (!node.updatedAt || node.updatedAt <= time) {\n if (node.updatedAt != null && \"observers\" in node) {\n writeSignal(node, nextValue);\n } else node.value = nextValue;\n node.updatedAt = time;\n }\n}\nfunction createComputation(fn, init, pure, state = STALE, options) {\n const c = {\n fn,\n state: state,\n updatedAt: null,\n owned: null,\n sources: null,\n sourceSlots: null,\n cleanups: null,\n value: init,\n owner: Owner,\n context: Owner ? Owner.context : null,\n pure\n };\n if (Owner === null);\n else if (Owner !== UNOWNED) {\n {\n if (!Owner.owned) Owner.owned = [c];\n else Owner.owned.push(c);\n }\n }\n return c;\n}\nfunction runTop(node) {\n if ((node.state) === 0) return;\n if ((node.state) === PENDING) return lookUpstream(node);\n if (node.suspense && untrack(node.suspense.inFallback)) return node.suspense.effects.push(node);\n const ancestors = [node];\n while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {\n if (node.state) ancestors.push(node);\n }\n for (let i = ancestors.length - 1; i >= 0; i--) {\n node = ancestors[i];\n if ((node.state) === STALE) {\n updateComputation(node);\n } else if ((node.state) === PENDING) {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(node, ancestors[0]), false);\n Updates = updates;\n }\n }\n}\nfunction runUpdates(fn, init) {\n if (Updates) return fn();\n let wait = false;\n if (!init) Updates = [];\n if (Effects) wait = true;\n else Effects = [];\n ExecCount++;\n try {\n const res = fn();\n completeUpdates(wait);\n return res;\n } catch (err) {\n if (!wait) Effects = null;\n Updates = null;\n handleError(err);\n }\n}\nfunction completeUpdates(wait) {\n if (Updates) {\n runQueue(Updates);\n Updates = null;\n }\n if (wait) return;\n const e = Effects;\n Effects = null;\n if (e.length) runUpdates(() => runEffects(e), false);\n}\nfunction runQueue(queue) {\n for (let i = 0; i < queue.length; i++) runTop(queue[i]);\n}\nfunction runUserEffects(queue) {\n let i,\n userLength = 0;\n for (i = 0; i < queue.length; i++) {\n const e = queue[i];\n if (!e.user) runTop(e);\n else queue[userLength++] = e;\n }\n for (i = 0; i < userLength; i++) runTop(queue[i]);\n}\nfunction lookUpstream(node, ignore) {\n node.state = 0;\n for (let i = 0; i < node.sources.length; i += 1) {\n const source = node.sources[i];\n if (source.sources) {\n const state = source.state;\n if (state === STALE) {\n if (source !== ignore && (!source.updatedAt || source.updatedAt < ExecCount))\n runTop(source);\n } else if (state === PENDING) lookUpstream(source, ignore);\n }\n }\n}\nfunction markDownstream(node) {\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n if (!o.state) {\n o.state = PENDING;\n if (o.pure) Updates.push(o);\n else Effects.push(o);\n o.observers && markDownstream(o);\n }\n }\n}\nfunction cleanNode(node) {\n let i;\n if (node.sources) {\n while (node.sources.length) {\n const source = node.sources.pop(),\n index = node.sourceSlots.pop(),\n obs = source.observers;\n if (obs && obs.length) {\n const n = obs.pop(),\n s = source.observerSlots.pop();\n if (index < obs.length) {\n n.sourceSlots[s] = index;\n obs[index] = n;\n source.observerSlots[index] = s;\n }\n }\n }\n }\n if (node.tOwned) {\n for (i = node.tOwned.length - 1; i >= 0; i--) cleanNode(node.tOwned[i]);\n delete node.tOwned;\n }\n if (node.owned) {\n for (i = node.owned.length - 1; i >= 0; i--) cleanNode(node.owned[i]);\n node.owned = null;\n }\n if (node.cleanups) {\n for (i = node.cleanups.length - 1; i >= 0; i--) node.cleanups[i]();\n node.cleanups = null;\n }\n node.state = 0;\n}\nfunction castError(err) {\n if (err instanceof Error) return err;\n return new Error(typeof err === \"string\" ? err : \"Unknown error\", {\n cause: err\n });\n}\nfunction handleError(err, owner = Owner) {\n const error = castError(err);\n throw error;\n}\nfunction resolveChildren(children) {\n if (typeof children === \"function\" && !children.length) return resolveChildren(children());\n if (Array.isArray(children)) {\n const results = [];\n for (let i = 0; i < children.length; i++) {\n const result = resolveChildren(children[i]);\n Array.isArray(result) ? results.push.apply(results, result) : results.push(result);\n }\n return results;\n }\n return children;\n}\n\nconst FALLBACK = Symbol(\"fallback\");\nfunction dispose(d) {\n for (let i = 0; i < d.length; i++) d[i]();\n}\nfunction mapArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n len = 0,\n indexes = mapFn.length > 1 ? [] : null;\n onCleanup(() => dispose(disposers));\n return () => {\n let newItems = list() || [],\n newLen = newItems.length,\n i,\n j;\n newItems[$TRACK];\n return untrack(() => {\n let newIndices, newIndicesNext, temp, tempdisposers, tempIndexes, start, end, newEnd, item;\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n indexes && (indexes = []);\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n } else if (len === 0) {\n mapped = new Array(newLen);\n for (j = 0; j < newLen; j++) {\n items[j] = newItems[j];\n mapped[j] = createRoot(mapper);\n }\n len = newLen;\n } else {\n temp = new Array(newLen);\n tempdisposers = new Array(newLen);\n indexes && (tempIndexes = new Array(newLen));\n for (\n start = 0, end = Math.min(len, newLen);\n start < end && items[start] === newItems[start];\n start++\n );\n for (\n end = len - 1, newEnd = newLen - 1;\n end >= start && newEnd >= start && items[end] === newItems[newEnd];\n end--, newEnd--\n ) {\n temp[newEnd] = mapped[end];\n tempdisposers[newEnd] = disposers[end];\n indexes && (tempIndexes[newEnd] = indexes[end]);\n }\n newIndices = new Map();\n newIndicesNext = new Array(newEnd + 1);\n for (j = newEnd; j >= start; j--) {\n item = newItems[j];\n i = newIndices.get(item);\n newIndicesNext[j] = i === undefined ? -1 : i;\n newIndices.set(item, j);\n }\n for (i = start; i <= end; i++) {\n item = items[i];\n j = newIndices.get(item);\n if (j !== undefined && j !== -1) {\n temp[j] = mapped[i];\n tempdisposers[j] = disposers[i];\n indexes && (tempIndexes[j] = indexes[i]);\n j = newIndicesNext[j];\n newIndices.set(item, j);\n } else disposers[i]();\n }\n for (j = start; j < newLen; j++) {\n if (j in temp) {\n mapped[j] = temp[j];\n disposers[j] = tempdisposers[j];\n if (indexes) {\n indexes[j] = tempIndexes[j];\n indexes[j](j);\n }\n } else mapped[j] = createRoot(mapper);\n }\n mapped = mapped.slice(0, (len = newLen));\n items = newItems.slice(0);\n }\n return mapped;\n });\n function mapper(disposer) {\n disposers[j] = disposer;\n if (indexes) {\n const [s, set] = createSignal(j);\n indexes[j] = set;\n return mapFn(newItems[j], s);\n }\n return mapFn(newItems[j]);\n }\n };\n}\nfunction createComponent(Comp, props) {\n return untrack(() => Comp(props || {}));\n}\n\nconst narrowedError = name => `Stale read from <${name}>.`;\nfunction For(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(mapArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Show(props) {\n const keyed = props.keyed;\n const conditionValue = createMemo(() => props.when, undefined, undefined);\n const condition = keyed\n ? conditionValue\n : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n return createMemo(\n () => {\n const c = condition();\n if (c) {\n const child = props.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn\n ? untrack(() =>\n child(\n keyed\n ? c\n : () => {\n if (!untrack(condition)) throw narrowedError(\"Show\");\n return conditionValue();\n }\n )\n )\n : child;\n }\n return props.fallback;\n },\n undefined,\n undefined\n );\n}\nfunction Switch(props) {\n const chs = children(() => props.children);\n const switchFunc = createMemo(() => {\n const ch = chs();\n const mps = Array.isArray(ch) ? ch : [ch];\n let func = () => undefined;\n for (let i = 0; i < mps.length; i++) {\n const index = i;\n const mp = mps[i];\n const prevFunc = func;\n const conditionValue = createMemo(\n () => (prevFunc() ? undefined : mp.when),\n undefined,\n undefined\n );\n const condition = mp.keyed\n ? conditionValue\n : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n func = () => prevFunc() || (condition() ? [index, conditionValue, mp] : undefined);\n }\n return func;\n });\n return createMemo(\n () => {\n const sel = switchFunc()();\n if (!sel) return props.fallback;\n const [index, conditionValue, mp] = sel;\n const child = mp.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn\n ? untrack(() =>\n child(\n mp.keyed\n ? conditionValue()\n : () => {\n if (untrack(switchFunc)()?.[0] !== index) throw narrowedError(\"Match\");\n return conditionValue();\n }\n )\n )\n : child;\n },\n undefined,\n undefined\n );\n}\nfunction Match(props) {\n return props;\n}\n\nfunction reconcileArrays(parentNode, a, b) {\n let bLength = b.length,\n aEnd = a.length,\n bEnd = bLength,\n aStart = 0,\n bStart = 0,\n after = a[aEnd - 1].nextSibling,\n map = null;\n while (aStart < aEnd || bStart < bEnd) {\n if (a[aStart] === b[bStart]) {\n aStart++;\n bStart++;\n continue;\n }\n while (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--;\n bEnd--;\n }\n if (aEnd === aStart) {\n const node = bEnd < bLength ? (bStart ? b[bStart - 1].nextSibling : b[bEnd - bStart]) : after;\n while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);\n } else if (bEnd === bStart) {\n while (aStart < aEnd) {\n if (!map || !map.has(a[aStart])) a[aStart].remove();\n aStart++;\n }\n } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n const node = a[--aEnd].nextSibling;\n parentNode.insertBefore(b[bStart++], a[aStart++].nextSibling);\n parentNode.insertBefore(b[--bEnd], node);\n a[aEnd] = b[bEnd];\n } else {\n if (!map) {\n map = new Map();\n let i = bStart;\n while (i < bEnd) map.set(b[i], i++);\n }\n const index = map.get(a[aStart]);\n if (index != null) {\n if (bStart < index && index < bEnd) {\n let i = aStart,\n sequence = 1,\n t;\n while (++i < aEnd && i < bEnd) {\n if ((t = map.get(a[i])) == null || t !== index + sequence) break;\n sequence++;\n }\n if (sequence > index - bStart) {\n const node = a[aStart];\n while (bStart < index) parentNode.insertBefore(b[bStart++], node);\n } else parentNode.replaceChild(b[bStart++], a[aStart++]);\n } else aStart++;\n } else a[aStart++].remove();\n }\n }\n}\n\nconst $$EVENTS = \"_$DX_DELEGATE\";\nfunction render(code, element, init, options = {}) {\n let disposer;\n createRoot(dispose => {\n disposer = dispose;\n element === document\n ? code()\n : insert(element, code(), element.firstChild ? null : undefined, init);\n }, options.owner);\n return () => {\n disposer();\n element.textContent = \"\";\n };\n}\nfunction template(html, isImportNode, isSVG, isMathML) {\n let node;\n const create = () => {\n const t = document.createElement(\"template\");\n t.innerHTML = html;\n return t.content.firstChild;\n };\n const fn = isImportNode\n ? () => untrack(() => document.importNode(node || (node = create()), true))\n : () => (node || (node = create())).cloneNode(true);\n fn.cloneNode = fn;\n return fn;\n}\nfunction delegateEvents(eventNames, document = window.document) {\n const e = document[$$EVENTS] || (document[$$EVENTS] = new Set());\n for (let i = 0, l = eventNames.length; i < l; i++) {\n const name = eventNames[i];\n if (!e.has(name)) {\n e.add(name);\n document.addEventListener(name, eventHandler);\n }\n }\n}\nfunction setAttribute(node, name, value) {\n if (value == null) node.removeAttribute(name);\n else node.setAttribute(name, value);\n}\nfunction className(node, value) {\n if (value == null) node.removeAttribute(\"class\");\n else node.className = value;\n}\nfunction addEventListener(node, name, handler, delegate) {\n {\n if (Array.isArray(handler)) {\n node[`$$${name}`] = handler[0];\n node[`$$${name}Data`] = handler[1];\n } else node[`$$${name}`] = handler;\n }\n}\nfunction style(node, value, prev) {\n if (!value) return prev ? setAttribute(node, \"style\") : value;\n const nodeStyle = node.style;\n if (typeof value === \"string\") return (nodeStyle.cssText = value);\n typeof prev === \"string\" && (nodeStyle.cssText = prev = undefined);\n prev || (prev = {});\n value || (value = {});\n let v, s;\n for (s in prev) {\n value[s] == null && nodeStyle.removeProperty(s);\n delete prev[s];\n }\n for (s in value) {\n v = value[s];\n if (v !== prev[s]) {\n nodeStyle.setProperty(s, v);\n prev[s] = v;\n }\n }\n return prev;\n}\nfunction use(fn, element, arg) {\n return untrack(() => fn(element, arg));\n}\nfunction insert(parent, accessor, marker, initial) {\n if (marker !== undefined && !initial) initial = [];\n if (typeof accessor !== \"function\") return insertExpression(parent, accessor, initial, marker);\n createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);\n}\nfunction eventHandler(e) {\n let node = e.target;\n const key = `$$${e.type}`;\n const oriTarget = e.target;\n const oriCurrentTarget = e.currentTarget;\n const retarget = value =>\n Object.defineProperty(e, \"target\", {\n configurable: true,\n value\n });\n const handleNode = () => {\n const handler = node[key];\n if (handler && !node.disabled) {\n const data = node[`${key}Data`];\n data !== undefined ? handler.call(node, data, e) : handler.call(node, e);\n if (e.cancelBubble) return;\n }\n node.host &&\n typeof node.host !== \"string\" &&\n !node.host._$host &&\n node.contains(e.target) &&\n retarget(node.host);\n return true;\n };\n const walkUpTree = () => {\n while (handleNode() && (node = node._$host || node.parentNode || node.host));\n };\n Object.defineProperty(e, \"currentTarget\", {\n configurable: true,\n get() {\n return node || document;\n }\n });\n if (e.composedPath) {\n const path = e.composedPath();\n retarget(path[0]);\n for (let i = 0; i < path.length - 2; i++) {\n node = path[i];\n if (!handleNode()) break;\n if (node._$host) {\n node = node._$host;\n walkUpTree();\n break;\n }\n if (node.parentNode === oriCurrentTarget) {\n break;\n }\n }\n } else walkUpTree();\n retarget(oriTarget);\n}\nfunction insertExpression(parent, value, current, marker, unwrapArray) {\n while (typeof current === \"function\") current = current();\n if (value === current) return current;\n const t = typeof value,\n multi = marker !== undefined;\n parent = (multi && current[0] && current[0].parentNode) || parent;\n if (t === \"string\" || t === \"number\") {\n if (t === \"number\") {\n value = value.toString();\n if (value === current) return current;\n }\n if (multi) {\n let node = current[0];\n if (node && node.nodeType === 3) {\n node.data !== value && (node.data = value);\n } else node = document.createTextNode(value);\n current = cleanChildren(parent, current, marker, node);\n } else {\n if (current !== \"\" && typeof current === \"string\") {\n current = parent.firstChild.data = value;\n } else current = parent.textContent = value;\n }\n } else if (value == null || t === \"boolean\") {\n current = cleanChildren(parent, current, marker);\n } else if (t === \"function\") {\n createRenderEffect(() => {\n let v = value();\n while (typeof v === \"function\") v = v();\n current = insertExpression(parent, v, current, marker);\n });\n return () => current;\n } else if (Array.isArray(value)) {\n const array = [];\n const currentArray = current && Array.isArray(current);\n if (normalizeIncomingArray(array, value, current, unwrapArray)) {\n createRenderEffect(() => (current = insertExpression(parent, array, current, marker, true)));\n return () => current;\n }\n if (array.length === 0) {\n current = cleanChildren(parent, current, marker);\n if (multi) return current;\n } else if (currentArray) {\n if (current.length === 0) {\n appendNodes(parent, array, marker);\n } else reconcileArrays(parent, current, array);\n } else {\n current && cleanChildren(parent);\n appendNodes(parent, array);\n }\n current = array;\n } else if (value.nodeType) {\n if (Array.isArray(current)) {\n if (multi) return (current = cleanChildren(parent, current, marker, value));\n cleanChildren(parent, current, null, value);\n } else if (current == null || current === \"\" || !parent.firstChild) {\n parent.appendChild(value);\n } else parent.replaceChild(value, parent.firstChild);\n current = value;\n } else;\n return current;\n}\nfunction normalizeIncomingArray(normalized, array, current, unwrap) {\n let dynamic = false;\n for (let i = 0, len = array.length; i < len; i++) {\n let item = array[i],\n prev = current && current[normalized.length],\n t;\n if (item == null || item === true || item === false);\n else if ((t = typeof item) === \"object\" && item.nodeType) {\n normalized.push(item);\n } else if (Array.isArray(item)) {\n dynamic = normalizeIncomingArray(normalized, item, prev) || dynamic;\n } else if (t === \"function\") {\n if (unwrap) {\n while (typeof item === \"function\") item = item();\n dynamic =\n normalizeIncomingArray(\n normalized,\n Array.isArray(item) ? item : [item],\n Array.isArray(prev) ? prev : [prev]\n ) || dynamic;\n } else {\n normalized.push(item);\n dynamic = true;\n }\n } else {\n const value = String(item);\n if (prev && prev.nodeType === 3 && prev.data === value) normalized.push(prev);\n else normalized.push(document.createTextNode(value));\n }\n }\n return dynamic;\n}\nfunction appendNodes(parent, array, marker = null) {\n for (let i = 0, len = array.length; i < len; i++) parent.insertBefore(array[i], marker);\n}\nfunction cleanChildren(parent, current, marker, replacement) {\n if (marker === undefined) return (parent.textContent = \"\");\n const node = replacement || document.createTextNode(\"\");\n if (current.length) {\n let inserted = false;\n for (let i = current.length - 1; i >= 0; i--) {\n const el = current[i];\n if (node !== el) {\n const isParent = el.parentNode === parent;\n if (!inserted && !i)\n isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);\n else isParent && el.remove();\n } else inserted = true;\n }\n } else parent.insertBefore(node, marker);\n return [node];\n}\n\nconst noop = () => {\n /* noop */\n};\nconst noopTransition = (el, done) => done();\n/**\n * Create an element transition interface for switching between single elements.\n * It can be used to implement own transition effect, or a custom `<Transition>`-like component.\n *\n * It will observe {@link source} and return a signal with array of elements to be rendered (current one and exiting ones).\n *\n * @param source a signal with the current element. Any nullish value will mean there is no element.\n * Any object can used as the source, but most likely you will want to use a `HTMLElement` or `SVGElement`.\n * @param options transition options {@link SwitchTransitionOptions}\n * @returns a signal with an array of the current element and exiting previous elements.\n *\n * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/transition-group#createSwitchTransition\n *\n * @example\n * const [el, setEl] = createSignal<HTMLDivElement>();\n *\n * const rendered = createSwitchTransition(el, {\n * onEnter(el, done) {\n * // the enter callback is called before the element is inserted into the DOM\n * // so run the animation in the next animation frame / microtask\n * queueMicrotask(() => { ... })\n * },\n * onExit(el, done) {\n * // the exitting element is kept in the DOM until the done() callback is called\n * },\n * })\n *\n * // change the source to trigger the transition\n * setEl(refToHtmlElement);\n */\nfunction createSwitchTransition(source, options) {\n const initSource = untrack(source);\n const initReturned = initSource ? [initSource] : [];\n const { onEnter = noopTransition, onExit = noopTransition } = options;\n const [returned, setReturned] = createSignal(options.appear ? [] : initReturned);\n const [isTransitionPending] = useTransition();\n let next;\n let isExiting = false;\n function exitTransition(el, after) {\n if (!el)\n return after && after();\n isExiting = true;\n onExit(el, () => {\n batch(() => {\n isExiting = false;\n setReturned(p => p.filter(e => e !== el));\n after && after();\n });\n });\n }\n function enterTransition(after) {\n const el = next;\n if (!el)\n return after && after();\n next = undefined;\n setReturned(p => [el, ...p]);\n onEnter(el, after ?? noop);\n }\n const triggerTransitions = options.mode === \"out-in\"\n ? // exit -> enter\n // exit -> enter\n prev => isExiting || exitTransition(prev, enterTransition)\n : options.mode === \"in-out\"\n ? // enter -> exit\n // enter -> exit\n prev => enterTransition(() => exitTransition(prev))\n : // exit & enter\n // exit & enter\n prev => {\n exitTransition(prev);\n enterTransition();\n };\n createComputed((prev) => {\n const el = source();\n if (untrack(isTransitionPending)) {\n // wait for pending transition to end before animating\n isTransitionPending();\n return prev;\n }\n if (el !== prev) {\n next = el;\n batch(() => untrack(() => triggerTransitions(prev)));\n }\n return el;\n }, options.appear ? undefined : initSource);\n return returned;\n}\n\n/**\n * Default predicate used in `resolveElements()` and `resolveFirst()` to filter Elements.\n *\n * On the client it uses `instanceof Element` check, on the server it checks for the object with `t` property. (generated by compiling JSX)\n */\nconst defaultElementPredicate = (item) => item instanceof Element;\n/**\n * Utility for resolving recursively nested JSX children in search of the first element that matches a predicate.\n *\n * It does **not** create a computation - should be wrapped in one to repeat the resolution on changes.\n *\n * @param value JSX children\n * @param predicate predicate to filter elements\n * @returns single found element or `null` if no elements were found\n */\nfunction getFirstChild(value, predicate) {\n if (predicate(value))\n return value;\n if (typeof value === \"function\" && !value.length)\n return getFirstChild(value(), predicate);\n if (Array.isArray(value)) {\n for (const item of value) {\n const result = getFirstChild(item, predicate);\n if (result)\n return result;\n }\n }\n return null;\n}\nfunction resolveFirst(fn, predicate = defaultElementPredicate, serverPredicate = defaultElementPredicate) {\n const children = createMemo(fn);\n return createMemo(() => getFirstChild(children(), predicate));\n}\n\n// src/common.ts\nfunction createClassnames(props) {\n return createMemo(() => {\n const name = props.name || \"s\";\n return {\n enterActive: (props.enterActiveClass || name + \"-enter-active\").split(\" \"),\n enter: (props.enterClass || name + \"-enter\").split(\" \"),\n enterTo: (props.enterToClass || name + \"-enter-to\").split(\" \"),\n exitActive: (props.exitActiveClass || name + \"-exit-active\").split(\" \"),\n exit: (props.exitClass || name + \"-exit\").split(\" \"),\n exitTo: (props.exitToClass || name + \"-exit-to\").split(\" \"),\n move: (props.moveClass || name + \"-move\").split(\" \")\n };\n });\n}\nfunction nextFrame(fn) {\n requestAnimationFrame(() => requestAnimationFrame(fn));\n}\nfunction enterTransition(classes, events, el, done) {\n const { onBeforeEnter, onEnter, onAfterEnter } = events;\n onBeforeEnter?.(el);\n el.classList.add(...classes.enter);\n el.classList.add(...classes.enterActive);\n queueMicrotask(() => {\n if (!el.parentNode)\n return done?.();\n onEnter?.(el, () => endTransition());\n });\n nextFrame(() => {\n el.classList.remove(...classes.enter);\n el.classList.add(...classes.enterTo);\n if (!onEnter || onEnter.length < 2) {\n el.addEventListener(\"transitionend\", endTransition);\n el.addEventListener(\"animationend\", endTransition);\n }\n });\n function endTransition(e) {\n if (!e || e.target === el) {\n done?.();\n el.removeEventListener(\"transitionend\", endTransition);\n el.removeEventListener(\"animationend\", endTransition);\n el.classList.remove(...classes.enterActive);\n el.classList.remove(...classes.enterTo);\n onAfterEnter?.(el);\n }\n }\n}\nfunction exitTransition(classes, events, el, done) {\n const { onBeforeExit, onExit, onAfterExit } = events;\n if (!el.parentNode)\n return done?.();\n onBeforeExit?.(el);\n el.classList.add(...classes.exit);\n el.classList.add(...classes.exitActive);\n onExit?.(el, () => endTransition());\n nextFrame(() => {\n el.classList.remove(...classes.exit);\n el.classList.add(...classes.exitTo);\n if (!onExit || onExit.length < 2) {\n el.addEventListener(\"transitionend\", endTransition);\n el.addEventListener(\"animationend\", endTransition);\n }\n });\n function endTransition(e) {\n if (!e || e.target === el) {\n done?.();\n el.removeEventListener(\"transitionend\", endTransition);\n el.removeEventListener(\"animationend\", endTransition);\n el.classList.remove(...classes.exitActive);\n el.classList.remove(...classes.exitTo);\n onAfterExit?.(el);\n }\n }\n}\nvar TRANSITION_MODE_MAP = {\n inout: \"in-out\",\n outin: \"out-in\"\n};\nvar Transition = (props) => {\n const classnames = createClassnames(props);\n return createSwitchTransition(\n resolveFirst(() => props.children),\n {\n mode: TRANSITION_MODE_MAP[props.mode],\n appear: props.appear,\n onEnter(el, done) {\n enterTransition(classnames(), props, el, done);\n },\n onExit(el, done) {\n exitTransition(classnames(), props, el, done);\n }\n }\n );\n};\n\nlet wasm;\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n heap[idx] = obj;\n return idx;\n}\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for (let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches && builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\nfunction dropObject(idx) {\n if (idx < 132) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\nfunction getArrayU32FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);\n}\nlet cachedDataViewMemory0 = null;\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return decodeText(ptr, len);\n}\nlet cachedUint32ArrayMemory0 = null;\nfunction getUint32ArrayMemory0() {\n if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) {\n cachedUint32ArrayMemory0 = new Uint32Array(wasm.memory.buffer);\n }\n return cachedUint32ArrayMemory0;\n}\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\nfunction getObject(idx) {\n return heap[idx];\n}\nlet heap = new Array(128).fill(undefined);\nheap.push(undefined, null, true, false);\nlet heap_next = heap.length;\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n const mem = getUint8ArrayMemory0();\n let offset = 0;\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\nlet cachedTextDecoder = new TextDecoder('utf-8', {\n ignoreBOM: true,\n fatal: true\n});\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', {\n ignoreBOM: true,\n fatal: true\n });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\nconst cachedTextEncoder = new TextEncoder();\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n}\nlet WASM_VECTOR_LEN = 0;\nconst VtFinalization = typeof FinalizationRegistry === 'undefined' ? {\n register: () => {},\n unregister: () => {}\n} : new FinalizationRegistry(ptr => wasm.__wbg_vt_free(ptr >>> 0, 1));\nlet Vt$1 = class Vt {\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(Vt.prototype);\n obj.__wbg_ptr = ptr;\n VtFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n VtFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_vt_free(ptr, 0);\n }\n /**\n * @param {string} s\n * @returns {any}\n */\n feed(s) {\n const ptr0 = passStringToWasm0(s, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.vt_feed(this.__wbg_ptr, ptr0, len0);\n return takeObject(ret);\n }\n /**\n * @param {number} cols\n * @param {number} rows\n * @returns {any}\n */\n resize(cols, rows) {\n const ret = wasm.vt_resize(this.__wbg_ptr, cols, rows);\n return takeObject(ret);\n }\n /**\n * @returns {Uint32Array}\n */\n getSize() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.vt_getSize(retptr, this.__wbg_ptr);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var v1 = getArrayU32FromWasm0(r0, r1).slice();\n wasm.__wbindgen_export3(r0, r1 * 4, 4);\n return v1;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {number} row\n * @param {boolean} cursor_on\n * @returns {any}\n */\n getLine(row, cursor_on) {\n const ret = wasm.vt_getLine(this.__wbg_ptr, row, cursor_on);\n return takeObject(ret);\n }\n /**\n * @returns {any}\n */\n getCursor() {\n const ret = wasm.vt_getCursor(this.__wbg_ptr);\n return takeObject(ret);\n }\n};\nif (Symbol.dispose) Vt$1.prototype[Symbol.dispose] = Vt$1.prototype.free;\n\n/**\n * @param {number} cols\n * @param {number} rows\n * @param {number} scrollback_limit\n * @param {boolean} bold_is_bright\n * @returns {Vt}\n */\nfunction create(cols, rows, scrollback_limit, bold_is_bright) {\n const ret = wasm.create(cols, rows, scrollback_limit, bold_is_bright);\n return Vt$1.__wrap(ret);\n}\nconst EXPECTED_RESPONSE_TYPES = new Set(['basic', 'cors', 'default']);\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = module.ok && EXPECTED_RESPONSE_TYPES.has(module.type);\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n } else {\n throw e;\n }\n }\n }\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n if (instance instanceof WebAssembly.Instance) {\n return {\n instance,\n module\n };\n } else {\n return instance;\n }\n }\n}\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbg___wbindgen_debug_string_adfb662ae34724b6 = function (arg0, arg1) {\n const ret = debugString(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg___wbindgen_throw_dd24417ed36fc46e = function (arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n imports.wbg.__wbg_new_13317ed16189158e = function () {\n const ret = new Array();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_4ceb6a766bf78b04 = function () {\n const ret = new Object();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_set_3f1d0b984ed272ed = function (arg0, arg1, arg2) {\n getObject(arg0)[takeObject(arg1)] = takeObject(arg2);\n };\n imports.wbg.__wbg_set_8b6a9a61e98a8881 = function (arg0, arg1, arg2) {\n getObject(arg0)[arg1 >>> 0] = takeObject(arg2);\n };\n imports.wbg.__wbindgen_cast_2241b6af4c4b2941 = function (arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_cast_4625c577ab2ec9ee = function (arg0) {\n // Cast intrinsic for `U64 -> Externref`.\n const ret = BigInt.asUintN(64, arg0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_cast_d6cd19b81560fd6e = function (arg0) {\n // Cast intrinsic for `F64 -> Externref`.\n const ret = arg0;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_object_clone_ref = function (arg0) {\n const ret = getObject(arg0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_object_drop_ref = function (arg0) {\n takeObject(arg0);\n };\n return imports;\n}\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedDataViewMemory0 = null;\n cachedUint32ArrayMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n return wasm;\n}\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n if (typeof module !== 'undefined') {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({\n module\n } = module);\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead');\n }\n }\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n if (typeof module_or_path !== 'undefined') {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({\n module_or_path\n } = module_or_path);\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead');\n }\n }\n const imports = __wbg_get_imports();\n if (typeof module_or_path === 'string' || typeof Request === 'function' && module_or_path instanceof Request || typeof URL === 'function' && module_or_path instanceof URL) {\n module_or_path = fetch(module_or_path);\n }\n const {\n instance,\n module\n } = await __wbg_load(await module_or_path, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nvar exports$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Vt: Vt$1,\n create: create,\n default: __wbg_init,\n initSync: initSync\n});\n\nconst base64codes = [62,0,0,0,63,52,53,54,55,56,57,58,59,60,61,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,0,0,0,0,0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];\n\n function getBase64Code(charCode) {\n return base64codes[charCode - 43];\n }\n\n function base64Decode(str) {\n let missingOctets = str.endsWith(\"==\") ? 2 : str.endsWith(\"=\") ? 1 : 0;\n let n = str.length;\n let result = new Uint8Array(3 * (n / 4));\n let buffer;\n\n for (let i = 0, j = 0; i < n; i += 4, j += 3) {\n buffer =\n getBase64Code(str.charCodeAt(i)) << 18 |\n getBase64Code(str.charCodeAt(i + 1)) << 12 |\n getBase64Code(str.charCodeAt(i + 2)) << 6 |\n getBase64Code(str.charCodeAt(i + 3));\n result[j] = buffer >> 16;\n result[j + 1] = (buffer >> 8) & 0xFF;\n result[j + 2] = buffer & 0xFF;\n }\n\n return result.subarray(0, result.length - missingOctets);\n }\n\n var vtWasmModule = base64Decode(\"AGFzbQEAAAABnAEXYAJ/fwBgA39/fwBgAX8AYAF/AX9gBX9/f39/AGACf38Bf2ADf39/AX9gBH9/f38AYAR/f39/AX9gBn9/f39/fwBgAAF/YAV/f39/fwF/YAF8AX9gAX4Bf2AHf39/f39/fwBgA39/fgF/YAR/f39+AGADf35/AGAGf39/f39/AX9gBX9/fH9/AGAFf39+f38AYAV/f31/fwBgAAAC6wIKA3diZxpfX3diZ19uZXdfMTMzMTdlZDE2MTg5MTU4ZQAKA3diZxpfX3diZ19zZXRfOGI2YTlhNjFlOThhODg4MQABA3diZxpfX3diaW5kZ2VuX29iamVjdF9kcm9wX3JlZgACA3diZxtfX3diaW5kZ2VuX29iamVjdF9jbG9uZV9yZWYAAwN3YmcaX193Ymdfc2V0XzNmMWQwYjk4NGVkMjcyZWQAAQN3YmcaX193YmdfbmV3XzRjZWI2YTc2NmJmNzhiMDQACgN3YmcnX193YmdfX193YmluZGdlbl90aHJvd19kZDI0NDE3ZWQzNmZjNDZlAAADd2JnIF9fd2JpbmRnZW5fY2FzdF9kNmNkMTliODE1NjBmZDZlAAwDd2JnIF9fd2JpbmRnZW5fY2FzdF80NjI1YzU3N2FiMmVjOWVlAA0Dd2JnIF9fd2JpbmRnZW5fY2FzdF8yMjQxYjZhZjRjNGIyOTQxAAUDpgGkAQYABgEAAgELBQEGBQYBCA4EBgkEAAkBAAgBCQQBAQcBAgEHAwAGBQQAAQkHBwAAAQEAAAAPAAMBAQEAAwMCBQAHAAAAAQIDAwECAQAABAIABgEQAgAEAAEACQQCAAEAAAAAAgcFBREBBQIDBAEECAAAAAAAAQIAAgEAAAAIAQgSBBMLFBUDBwUCAgIBAgAAAgIAAQACAAAAAQEBAgMWAAACAAACBAUBcAElJQUDAQARBgkBfwFBgIDAAAsHxAEMBm1lbW9yeQIADV9fd2JnX3Z0X2ZyZWUANwZjcmVhdGUAGAd2dF9mZWVkAAoJdnRfcmVzaXplAC8KdnRfZ2V0U2l6ZQBeCnZ0X2dldExpbmUADAx2dF9nZXRDdXJzb3IALRFfX3diaW5kZ2VuX2V4cG9ydABuEl9fd2JpbmRnZW5fZXhwb3J0MgB4H19fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIApgESX193YmluZGdlbl9leHBvcnQzAJwBCTsBAEEBCyQSBwgJEhISEowBiQE0igGMARaQAYoBigGOAYsBjQGsAakBqgESqwGfARJUrQFphQESVBYSEgwBIArQtAKkAa01ARB/IwBBoAFrIgQkACAEQTBqIAAQVSAEKAIwIQMgBEEoaiIAIAI2AgQgACABNgIAIANB3ABqIQsgA0HQAGohDCADQTBqIQ8gA0EkaiEQIANBDGohESADQbIBaiEHIANBxAFqIQkgBCgCKCINIAQoAiwiDmohEiANIQIDQAJAAkACQAJAAkACQCADAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAIgEkYNAAJ/IAIsAAAiAEEATgRAIABB/wFxIQAgAkEBagwBCyACLQABQT9xIQUgAEEfcSEBIABBX00EQCABQQZ0IAVyIQAgAkECagwBCyACLQACQT9xIAVBBnRyIQUgAEFwSQRAIAUgAUEMdHIhACACQQNqDAELIAFBEnRBgIDwAHEgAi0AA0E/cSAFQQZ0cnIiAEGAgMQARg0BIAJBBGoLIQJBwQAgACAAQZ8BSxshAQJAAkACQCADLQDMBSIGDgUABAQEAQQLIAFBIGtB4ABJDQEMAwsgAUEwa0EMTw0CDCALIAQgADYCQCAEQSE6ADwMAgsgBEHwAGoiASADQeAAaigCACADQeQAaigCABAgIARBCGogAxAhIAQgBCkDCDcCfCAEIAQoAnQgBCgCeBBSIAQoAgQhACAEKAIAQQFxRQRAIAEQbCAOBEAgDSAOEDsLIAQoAjQgBCgCOBChASAEQaABaiQAIAAPCyAEIAA2AkwgBEHMAGpB3MLAABA8AAsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUH/AXEiBUEbRwRAIAVB2wBGDQEgBg4NAwQFBgcOCA4ODgIOCQ4LIANBAToAzAUgCRAqDFQLIAYODQEjAwQFDQYNDQ0ADQcNCyABQSBrQd8ASQ1SDAsLAkAgAUEYSQ0AIAFBGUYNACABQfwBcUEcRw0LCyAEQTxqIAAQPwwyCyABQfABcUEgRg0GIAFBMGtBIEkNCCABQdEAa0EHSQ0IAkAgBUHZAGsOBQkJAAkfAAsgAUHgAGtBH08NCQwICyABQTBrQc8ATw0IIANBADoAzAUgBEE8aiAJIAAQKwwwCyABQS9LBEAgAUE7RyABQTpPcUUEQCADQQQ6AMwFDE8LIAFBQGpBP0kNBAsgAUH8AXFBPEcNByADIAA2AsQBIANBBDoAzAUMTgsgAUFAakE/SQ0EIAFB/AFxQTxHDQYMSwsgAUFAakE/Tw0FDEkLIAFBIGtB4ABJDUsCQCAFQRhrDgMHBgcACyAFQZkBa0ECSQ0GIAVB0ABGDUsgBUEHRg1IDAULIANBADoAzAUgBEE8aiAJIAAQDQwrCyADIAA2AsQBIANBAjoAzAUMSQsgA0EAOgDMBSAEQTxqIAkgABANDCkLIANBADoAzAUgBEE8aiAJIAAQKwwoCwJAIAVBGGsOAwIBAgALIAVBmQFrQQJJDQEgBUHQAEcNACAGQQFrDgoVAwgJCiQLDA0ORgsgAUHwAXEiCEGAAUYNACABQZEBa0EGSw0BCyADQQA6AMwFIARBPGogABA/DCULIAhBIEcNASAGQQRHDQEMPwsgAUHwAXEhCAwBCyAGQQFrDgoBAAMEBQ4GBwgJDgsgCEEgRw0BDDsLIAFBGE8NCgwLCwJAIAFBGEkNACABQRlGDQAgAUH8AXFBHEcNDAsgBEE8aiAAED8MHwsCQAJAIAFBGEkNACABQRlGDQAgAUH8AXFBHEcNAQsgBEE8aiAAED8MHwsgAUHwAXFBIEYNOQwKCwJAIAFBGEkNACABQRlGDQAgAUH8AXFBHEcNCgsgBEE8aiAAED8MHQsgAUFAakE/TwRAIAFB8AFxIghBIEYNNyAIQTBGDToMCQsgA0EAOgDMBSAEQTxqIAkgABANDBwLIAFB/AFxQTxGDQMgAUHwAXFBIEYNLyABQUBqQT9PDQcMBAsgAUEvTQ0GIAFBOkkNOCABQTtGDTggAUFAakE+TQ0DDAYLIAFBQGpBP0kNAgwFCyABQRhJDTcgAUEZRg03IAFB/AFxQRxGDTcMBAsgAyAANgLEASADQQg6AMwFDDYLIANBCjoAzAUMNQsgBUHYAGsiCEEHTUEAQQEgCHRBwQFxGw0FIAVBGUYNACABQfwBcUEcRw0BCyAEQTxqIAAQPwwUCyAFQZABaw4QAQUFBQUFBQUDBQUCLwADAwQLIANBDDoAzAUMMQsgA0EHOgDMBSAJECoMMAsgA0EDOgDMBSAJECoMLwsgA0ENOgDMBQwuCwJAIAVBOmsOAgQCAAsgBUEZRg0CCyAGQQNrDgcJLAMKBQsHLAsgBkEDaw4HCCsrCQUKBysLIAZBA2sOBwcqAggqCQYqCyAGQQNrDgcGKSkHCQgFKQsgAUEYSQ0AIAFB/AFxQRxHDSgLIARBPGogABA/DAgLIAFBMGtBCk8NJgsgA0EIOgDMBQwkCyABQfABcUEgRg0fCyABQfABcUEwRw0jDAMLIAFBOkcNIgwgCwJAIAFBGEkNACABQRlGDQAgAUH8AXFBHEcNIgsgBEE8aiAAED8MAgsgAUHwAXFBIEYNFSABQTpGDQAgAUH8AXFBPEcNIAsgA0ELOgDMBQwfCyAELQA8IgBBMkYNHwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAEEBaw4xAgMEBQYHCAkKCwwNDg8lECYREhMUFRYXGBkaGxwdHh8AISIjJCUmJygpKissLTAxMgELIAQoAkAhAAwfCyADQX5BfyADKAJoIAMoApwBRhsQeww9CyAELwE+IQAgBCADKAJoNgJMIARBADoAfCAEIANB1ABqKAIAIgE2AnAgBCABIAMoAlhBAnRqNgJ0QQEgACAAQQFNGyEAIAQgBEHMAGo2AngDQCAAQQFrIgAEQCAEQfAAahBGDQEMNgsLIARB8ABqEEYiAEUNNCAAKAIADDULIANBASAELwE+IgAgAEEBTRtBAWsiACADKAKcASIBQQFrIAAgAUkbNgJoDDsLIANBASAELwE+IgAgAEEBTRsQLgw6CyADQQEgBC8BPiIAIABBAU0bEFYgA0EANgJoDDkLIANBASAELwE+IgAgAEEBTRsQWSADQQA2AmgMOAsgA0EANgJoDDcLAkAgBC0APUEBaw4CJgATCyADQQA2AlgMNgsgA0EBIAQvAT4iACAAQQFNGyIAQX9zQQAgAGsgAygCaCADKAKcAUYbEHsMNQsgA0EBIAQvAT4iACAAQQFNGxBWDDQLIANBASAELwE+IgAgAEEBTRsQewwzCyADQQEgBC8BQCIAIABBAU0bQQFrIgAgAygCnAEiAUEBayAAIAFJGzYCaCADQQEgBC8BPiIAIABBAU0bQQFrEEkMMgsgA0EBIAQvAT4iACAAQQFNGxBZDDELIAMoAmgiACADKAKcASIBTwRAIAMgAUEBayIANgJoC0EBIAQvAT4iASABQQFNGyIBIAMoAhggAGsiBSABIAVJGyEBIAMgAygCbEGwzcAAEFoiBSgCBCAFKAIIIABBqNnAABCGASgCBEUEQCAFKAIEIAUoAgggAEEBa0G42cAAEIYBIgZCoICAgBA3AgAgBiAHKQEANwEIIAZBEGogB0EIai8BADsBAAsgBEEYaiAFKAIEIAUoAgggAEHI2cAAEHUgBCgCGCAEKAIcIAEQfiAFKAIEIAUoAgggAEHY2cAAEIYBIgAoAgRFBEAgAEKggICAEDcCACAAIAcpAQA3AQggAEEQaiAHQQhqLwEAOwEACyAEQRBqIAUoAgQgBSgCCCIAIAAgAWtB6NnAABB1IAQoAhAhACAEKAIUIARB+ABqIAdBCGovAQA7AQAgBCAHKQEANwNwQRRsIQEDQCABBEAgAEKggICAEDcCACAAIAQpA3A3AgggAEEQaiAEQfgAai8BADsBACABQRRrIQEgAEEUaiEADAELCyAFQQA6AAwgA0HgAGooAgAgA0HkAGooAgAgAygCbBCHAQwwCyADKAKcASEFIAMoAqABIQZBACEBA0AgASAGRg0wQQAhAANAIAAgBUYEQCADQeAAaigCACADQeQAaigCACABEIcBIAFBAWohAQwCBSAEQQA7AHggBEECOgB0IARBAjoAcCADIAAgAUHFACAEQfAAahARGiAAQQFqIQAMAQsACwALAAsgBCgCSCEBIAQoAkQhACAEIAQoAkA2AnggBCAANgJwIAQgAUEBdCIBIABqIgU2AnwDQCABBEACQAJAAkACQAJAAkACQAJAAkACQCAALwEAIgZBAWsOBwExMTExAgMACyAGQZcIaw4DBAUGAwsgA0EAOgDBAQwHCyADQgA3AmggA0EAOgC+AQwGCyADQQA6AL8BDAULIANBADoAcAwECyADEGUMAgsgAxB/DAILIAMQZSADEH8LIAMQDwsgAEECaiEAIAFBAmshAQwBCwsgBCAFNgJ0IARB8ABqEJ4BDC4LIAQoAkghASAEKAJEIQAgBCAEKAJANgJ4IAQgADYCcCAEIAFBAXQiASAAaiIGNgJ8A0AgAQRAAkACQAJAAkACQAJAAkACQAJAIAAvAQAiBUEBaw4HAS8vLy8CAwALIAVBlwhrDgMGBAUDCyADQQE6AMEBDAYLIANBAToAvgEgA0EANgJoIAMgAygCqAE2AmwMBQsgA0EBOgC/AQwECyADQQE6AHAMAwsgAxBdDAILIAMQXQsjAEEwayIFJAAgAy0AvAFFBEAgA0EBOgC8ASADQfQAaiADQYgBahBqIAMgA0EkahBrIAVBDGoiCCADKAKcASADKAKgASIKQQFBACADQbIBahAcIANBDGoQlAEgAyAIQSQQFCIIKAJgIAgoAmRBACAKEEoLIAVBMGokACADEA8LIABBAmohACABQQJrIQEMAQsLIAQgBjYCdCAEQfAAahCeAQwtCwJAQQEgBC8BPiIAIABBAU0bQQFrIgAgBC8BQCIBIAMoAqABIgUgARtBAWsiAUkgASAFSXFFBEAgAygCqAEhAAwBCyADIAE2AqwBIAMgADYCqAELIANBADYCaCADIABBACADLQC+ARs2AmwMLAsgA0EBOgBwIANBADsAvQEgA0EAOwG6ASADQQI6ALYBIANBAjoAsgEgA0EAOwGwASADQgA3AqQBIANBgICACDYChAEgA0ECOgCAASADQQI6AHwgA0IANwJ0IAMgAygCoAFBAWs2AqwBDCsLIAMoAqABIAMoAqwBIgBBAWogACADKAJsIgBJGyEBIAMgACABQQEgBC8BPiIFIAVBAU0bIAcQGiADQeAAaigCACADQeQAaigCACAAIAEQSgwqCyADIAMoAmggAygCbCIAQQBBASAELwE+IgEgAUEBTRsgBxAfIANB4ABqKAIAIANB5ABqKAIAIAAQhwEMKQsCQAJAAkAgBC0APUEBaw4DAQIrAAsgAyADKAJoIAMoAmwiAEEBIAQgBxAfIANB4ABqKAIAIANB5ABqKAIAIAAgAygCoAEQSgwqCyADIAMoAmggAygCbCIAQQIgBCAHEB8gA0HgAGooAgAgA0HkAGooAgBBACAAQQFqEEoMKQsgA0EAIAMoAhwgBxAoIANB4ABqKAIAIANB5ABqKAIAQQAgAygCoAEQSgwoCyADIAMoAmggAygCbCIAIAQtAD1BBHIgBCAHEB8gA0HgAGooAgAgA0HkAGooAgAgABCHAQwnCyADIAQtAD06ALEBDCYLIAMgBC0APToAsAEMJQsgA0EBEC4MJAsjAEEQayIFJAACQAJAAkAgAygCaCIIRQ0AIAggAygCnAFPDQAgBUEIaiADKAJUIgAgAygCWCIBIAgQNSAFKAIIQQFHDQAgBSgCDCIGIAFLDQEgA0HQAGoiCigCACABRgR/IApBvOLAABBiIAMoAlQFIAALIAZBAnRqIQAgASAGSwRAIABBBGogACABIAZrQQJ0EBALIAAgCDYCACADIAFBAWo2AlgLIAVBEGokAAwBCyAGIAFBvOLAABBDAAsMIwsgAygCaCIAIAMoApwBIgVGBEAgAyAAQQFrIgA2AmgLIAMgACADKAJsIgFBASAELwE+IgYgBkEBTRsiBiAFIABrIgUgBSAGSxsiBSAHEB0gACAAIAVqIgUgACAFSxshBQNAIAAgBUcEQCADIAAgAUEgIAcQERogAEEBaiEADAELCyADQeAAaigCACADQeQAaigCACABEIcBDCILIAMoAqABIAMoAqwBIgBBAWogACADKAJsIgBJGyEBIAMgACABQQEgBC8BPiIFIAVBAU0bIAcQMSADQeAAaigCACADQeQAaigCACAAIAEQSgwhCyADEFMgAy0AwAFBAUcNICADQQA2AmgMIAsgAxBTIANBADYCaAwfCyADIAAQHgweCyADKAJoIgVFDR0gBC8BPiEAIAMoAmwhASAEQSBqIAMQZiAEKAIkIgYgAU0NEkEBIAAgAEEBTRshACAEKAIgIAFBBHRqIgFBBGooAgAgAUEIaigCACAFQQFrQbjlwAAQhgEoAgAhAQNAIABFDR4gAyABEB4gAEEBayEADAALAAsgAygCbCIAIAMoAqgBRg0SIABFDRwgAyAAQQFrEEkMHAsgBEHMAGoiACADKAKcASIFIAMoAqABIgEgAygCSCADKAJMQQAQHCAEQfAAaiIGIAUgAUEBQQBBABAcIBEQlAEgAyAAQSQQFCEAIA8QlAEgECAGQSQQFBogAEEAOgC8ASAEQZQBaiIGIAUQMiAAKAJQIABB1ABqKAIAQQQQlQEgDEEIaiAGQQhqIgUoAgA2AgAgDCAEKQKUATcCACAAQQA7AboBIABBAjoAtgEgAEECOgCyASAAQQE6AHAgAEIANwJoIABBADsBsAEgAEGAgAQ2AL0BIAAgAUEBazYCrAEgAEIANwKkASAAQYCAgAg2ApgBIABBAjoAlAEgAEECOgCQASAAQQA2AowBIABCgICACDcChAEgAEECOgCAASAAQQI6AHwgAEIANwJ0IAYgARBMIAAoAlwgAEHgAGooAgBBARCVASALQQhqIAUoAgA2AgAgCyAEKQKUATcCAAwbCyAEKAJIIQEgBCgCRCEAIAQgBCgCQDYCeCAEIAA2AnAgBCABQQF0IgEgAGoiBTYCfANAIAEEQAJAIAAvAQBBFEcEQCADQQA6AL0BDAELIANBADoAwAELIABBAmohACABQQJrIQEMAQsLIAQgBTYCdCAEQfAAahCeAQwaCyADEH8MGQsgAxBdDBgLIANBASAELwE+IgAgAEEBTRsQfAwXCyAEKAJIQQVsIQEgAy0AuwEhBSAEKAJAIAQoAkQiCiEAA0ACQCABRQ0AIAAoAAEhBgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAtAABBAWsOEgECAwQFBgcICQoLDA0ODxAREwALQQAhBSADQQA7AboBIANBAjoAtgEgA0ECOgCyAQwRCyADQQE6ALoBDBALIANBAjoAugEMDwsgAyAFQQFyIgU6ALsBDA4LIAMgBUECciIFOgC7AQwNCyADIAVBCHIiBToAuwEMDAsgAyAFQRByIgU6ALsBDAsLIAMgBUEEciIFOgC7AQwKCyADQQA6ALoBDAkLIAMgBUH+AXEiBToAuwEMCAsgAyAFQf0BcSIFOgC7AQwHCyADIAVB9wFxIgU6ALsBDAYLIAMgBUHvAXEiBToAuwEMBQsgAyAFQfsBcSIFOgC7AQwECyAHIAY2AQAMAwsgB0ECOgAADAILIAMgBjYBtgEMAQsgA0ECOgC2AQsgAEEFaiEAIAFBBWshAQwBCwsgCkEFEJUBDBYLIANBADYCpAEMFQsgBCgCSCEBIAQoAkQhACAEIAQoAkA2AnggBCAANgJwIAQgAUEBdCIBIABqIgU2AnwDQCABBEACQCAALwEAQRRHBEAgA0EBOgC9AQwBCyADQQE6AMABCyAAQQJqIQAgAUECayEBDAELCyAEIAU2AnQgBEHwAGoQngEMFAsgA0EBNgKkAQwTCyADQQEgBC8BPiIAIABBAU0bEH0MEgsgBC0APQ0BCyMAQRBrIgAkACAAQQhqIAMoAlQiBiADKAJYIgEgAygCaBA1AkACQCAAKAIIRQRAIAAoAgwiBSABTw0BIAYgBUECdGoiBiAGQQRqIAEgBUF/c2pBAnQQECADIAFBAWs2AlgLIABBEGokAAwBCyMAQTBrIgAkACAAIAE2AgQgACAFNgIAIABBAzYCDCAAQcjFwAA2AgggAEICNwIUIAAgAEEEaq1CgICAgIABhDcDKCAAIACtQoCAgICAAYQ3AyAgACAAQSBqNgIQIABBCGpBzOLAABCAAQALDBALIANBADYCWAwPCyADQQEgBC8BPiIAIABBAU0bQQFrEEkMDgsgA0EBIAQvAT4iACAAQQFNGxBWDA0LIAMtAMIBQQFHDQwgAyAELwE+IgAgAygCnAEgABsgBC8BQCIAIAMoAqABIAAbECMMDAsgAyAANgLEASADQQk6AMwFDAoLIAEgBkG45cAAEEIACyADQQEQfAwJCwALQQALIgAgAygCnAEiAUEBayAAIAFJGzYCaAwGCyAJIAA2AgAMBAsgAyAANgLEASADQQU6AMwFDAMLIANBADoAzAUMAgsgA0EGOgDMBQwBCyAJKAKEBCEBAkACQAJAAkACQCAAQTprDgIBAAILIAlBHyABQQFqIgAgAEEgRhs2AoQEDAMLIAFBIEkNASABQSBB5NvAABBCAAsgAUEgTwRAIAFBIEH028AAEEIACyAJIAFBBHRqQQRqIgUoAgAiAUEGSQRAIAUgAUEBdGpBBGoiASABLwEAQQpsIABBMGtB/wFxajsBAAwCCyABQQZBtOHAABBCAAsgCSABQQR0akEEaiIBKAIAQQFqIQAgAUEFIAAgAEEFTxs2AgALCyAEQTI6ADwMAAsAC7oUAQZ/IwBBwAJrIgIkACABKAIEIQMDQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMEQCACQbgCaiABKAIAEGAgAigCuAIhAyACKAK8AkEBaw4GAQUEBQIDBQsgAEESOgAADAsLAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMvAQAiAw4eAAECAwQFDgYOBw4ODg4ODg4ODg4OCAgJCgsODA4NDgsgAkGoAWpBASABKAIAIAEoAgRB1NzAABB3IAEgAikDqAE3AgAgAEEAOgAADBgLIAJBsAFqQQEgASgCACABKAIEQeTcwAAQdyABIAIpA7ABNwIAIABBAToAAAwXCyACQbgBakEBIAEoAgAgASgCBEH03MAAEHcgASACKQO4ATcCACAAQQI6AAAMFgsgAkHAAWpBASABKAIAIAEoAgRBhN3AABB3IAEgAikDwAE3AgAgAEEDOgAADBULIAJByAFqQQEgASgCACABKAIEQZTdwAAQdyABIAIpA8gBNwIAIABBBDoAAAwUCyACQdABakEBIAEoAgAgASgCBEGk3cAAEHcgASACKQPQATcCACAAQQU6AAAMEwsgAkHYAWpBASABKAIAIAEoAgRBtN3AABB3IAEgAikD2AE3AgAgAEEGOgAADBILIAJB4AFqQQEgASgCACABKAIEQcTdwAAQdyABIAIpA+ABNwIAIABBBzoAAAwRCyACQegBakEBIAEoAgAgASgCBEHU3cAAEHcgASACKQPoATcCACAAQQg6AAAMEAsgAkHwAWpBASABKAIAIAEoAgRB5N3AABB3IAEgAikD8AE3AgAgAEEJOgAADA8LIAJB+AFqQQEgASgCACABKAIEQfTdwAAQdyABIAIpA/gBNwIAIABBCjoAAAwOCyACQYACakEBIAEoAgAgASgCBEGE3sAAEHcgASACKQOAAjcCACAAQQs6AAAMDQsgAkGIAmpBASABKAIAIAEoAgRBlN7AABB3IAEgAikDiAI3AgAgAEEMOgAADAwLIAJBkAJqQQEgASgCACABKAIEQaTewAAQdyABIAIpA5ACNwIAIABBDToAAAwLCwJAAkAgA0Eea0H//wNxQQhPBEAgA0Emaw4CAQgCCyACQQhqQQEgASgCACABKAIEQcTgwAAQdyABIAIpAwg3AgAgACADQR5rOgACIABBDjsAAAwMCwJAIAEoAgQiA0ECTwRAIAJBmAFqIAEoAgBBEGoQYCACKAKYASIDDQEgASgCBCEDCyACQegAakEBIAEoAgAgA0G03sAAEHcgAigCbCEDIAIoAmghBAwNCwJAAkACQCACKAKcAUEBRw0AIAMvAQBBAmsOBAEAAAIACyACQfAAakEBIAEoAgAgASgCBEGE38AAEHcgAigCdCEDIAIoAnAhBAwOCyABKAIAIQMgASgCBCIEQQVPBEAgAy0AJCEFIAMvATQhBiADLwFEIQcgAkGAAWpBBSADIARBxN7AABB3IAEgAikDgAE3AgAgAEEOOgAAIAAgBSAGQQh0QYD+A3EgB0EQdHJyQQh0QQFyNgABDA0LIAJB+ABqQQIgAyAEQdTewAAQdyACKAJ8IQMgAigCeCEEDA0LIAEoAgAhAyABKAIEIgRBA08EQCADLQAkIQUgAkGQAWpBAyADIARB5N7AABB3IAEgAikDkAE3AgAgACAFOgACIABBDjsAAAwMCyACQYgBakECIAMgBEH03sAAEHcgAigCjAEhAyACKAKIASEEDAwLAkACQCADQfj/A3FBKEcEQCADQTBrDgIBCQILIAJBEGpBASABKAIAIAEoAgRBtODAABB3IAEgAikDEDcCACAAIANBKGs6AAIgAEEQOwAADAwLAkAgASgCBCIDQQJPBEAgAkHYAGogASgCAEEQahBgIAIoAlgiAw0BIAEoAgQhAwsgAkEoakEBIAEoAgAgA0Gk38AAEHcgAigCLCEDIAIoAighBAwNCwJAAkACQCACKAJcQQFHDQAgAy8BAEECaw4EAQAAAgALIAJBMGpBASABKAIAIAEoAgRB9N/AABB3IAIoAjQhAyACKAIwIQQMDgsgASgCACEDIAEoAgQiBEEFTwRAIAMtACQhBSADLwE0IQYgAy8BRCEHIAJBQGtBBSADIARBtN/AABB3IAEgAikDQDcCACAAQRA6AAAgACAFIAZBCHRBgP4DcSAHQRB0cnJBCHRBAXI2AAEMDQsgAkE4akECIAMgBEHE38AAEHcgAigCPCEDIAIoAjghBAwNCyABKAIAIQMgASgCBCIEQQNPBEAgAy0AJCEFIAJB0ABqQQMgAyAEQdTfwAAQdyABIAIpA1A3AgAgACAFOgACIABBEDsAAAwMCyACQcgAakECIAMgBEHk38AAEHcgAigCTCEDIAIoAkghBAwMCyADQdoAa0H//wNxQQhJDQcgA0HkAGtB//8DcUEITw0DIAJBIGpBASABKAIAIAEoAgRBlODAABB3IAEgAikDIDcCACAAIANB3ABrOgACIABBEDsAAAwKCyADLwEAIgRBMEcEQCAEQSZHDQMgAy8BAkECRw0DQQghBEEGIQVBBCEGDAkLIAMvAQJBAkcNAkEIIQRBBiEFQQQhBgwHCyADLwEAIgRBMEcEQCAEQSZHDQIgAy8BAkECRw0CQQohBEEIIQVBBiEGDAgLIAMvAQJBAkcNAUEKIQRBCCEFQQYhBgwGCyADLwEAIgRBMEcEQCAEQSZHDQEgAy8BAkEFRw0BIAMtAAQhAyACQagCakEBIAEoAgAgASgCBEH04MAAEHcgASACKQOoAjcCACAAIAM6AAIgAEEOOwAADAgLIAMvAQJBBUYNAQsgAkEBIAEoAgAgASgCBEGU4cAAEHcgAigCBCEDIAIoAgAhBAwHCyADLQAEIQMgAkGwAmpBASABKAIAIAEoAgRBhOHAABB3IAEgAikDsAI3AgAgACADOgACIABBEDsAAAwFCyACQaABakEBIAEoAgAgASgCBEGU38AAEHcgASACKQOgATcCACAAQQ86AAAMBAsgAkHgAGpBASABKAIAIAEoAgRBhODAABB3IAEgAikDYDcCACAAQRE6AAAMAwsgAkEYakEBIAEoAgAgASgCBEGk4MAAEHcgASACKQMYNwIAIAAgA0HSAGs6AAIgAEEOOwAADAILIAMgBmotAAAhBiADIAVqLwEAIQUgAyAEai8BACEDIAJBoAJqQQEgASgCACABKAIEQeTgwAAQdyABIAIpA6ACNwIAIABBEDoAACAAIAYgBUEIdEGA/gNxIANBEHRyckEIdEEBcjYAAQwBCyACQZgCakEBIAEoAgAgASgCBEHU4MAAEHcgASACKQOYAjcCACADIAZqLQAAIQEgAyAFai8BACEFIAMgBGovAQAhAyAAQQ46AAAgACABIAVBCHRBgP4DcSADQRB0cnJBCHRBAXI2AAELIAJBwAJqJAAPCyABIAQ2AgAgASADNgIEDAALAAuXEwIkfwF+IwBB8ABrIgMkACADQTRqIAAQVSADKAI0IgVBADYCiAYgBUEANgL8BSAFQQA2AvAFIAVBADYC5AUgBUEANgLYBSAFLQBwQQFxBEAgBSgCbCABRiACQQBHcSEhIAUoAmghBgsgA0EoaiAFEGYgAygCLCIAIAFLBEAgBUGABmohHSAFQfwFaiEUIAVB9AVqIR4gBUHwBWohFSAFQegFaiEfIAVB3AVqIRYgBUHQBWohGCADKAIoIAFBBHRqIgEoAgQhACAAIAEoAghBFGxqISIgA0HWAGohIyADQdAAaiIBQQRyISQgBkH//wNxISUgAUEJaiEmQQUhAUEFIQkDQAJAAkACQCAAIgggIkcEQCAIQRRqIQAgCCgCBCIORQ0EIAgoAgAhBiAIQQhqISACQAJAIAMCfwJAICEgJSAPQf//A3EiGUZxIAhBEWoiEC0AAEEQcUEEdkcEQEEBICAoAAAiBEH/AXFBAkYNAhogBEEBcQ0BIARBgP4DcUEDcgwCCyADQQUgCCgADCICQYB+cUEEQQMgAkEBcRtyIAJB/wFxQQJGGyIENgJsQQAhCiAIKAAIIgdB/wFxQQJHDQJBACECDAcLIARBgH5xQQRyCyIENgJsQQIhAiAIKAAMIgdB/wFxQQJHDQFBACEKDAULIAdBCHYhCiAHQQFxDQNBAyECIAdBgPADcQ0EIAUtAIwGQQFHDQQMAgsgB0EIdiEKIAdBAXENAkEDIQIgB0GA8ANxDQMgBS0AjAYNAQwDCyAJQf8BcUEFRwRAIBggEa0gCa1C/wGDQiCGIBqtQiiGhIRB/MLAABBwCyABQf8BcUEFRwRAIAMgCzsAVyADQdkAaiALQRB2OgAAIAMgDDoAWiADIAE6AFYgAyANOwFUIAMgFzYCUCAWIANB0ABqQYzDwAAQWwsgBSgCiAYhASAFKAKEBiECIAUoAvwFIQQgBSgC+AUhCCAFKALwBSEUIAUoAuwFIRUgBSgC5AUhBiAFKALgBSEHIAUoAtgFIQkgBSgC1AUhBSADQQA2AmwgA0EgaiADQewAahAFIgBB38HAAEECIAUgCRAZAkACfyADKAIgBEAgAygCJAwBCyADQRhqIANB7ABqIABB4cHAAEEEIAcgBhAZIAMoAhgEQCADKAIcDAELIANBEGogA0HsAGogAEHlwcAAQQogAiABEBkgAygCEARAIAMoAhQMAQsgA0EIaiADQewAaiAAQe/BwABBDiAVIBQQGSADKAIIBEAgAygCDAwBCyADIANB7ABqIABB/cHAAEEOIAggBBAZIAMoAgBFDQEgAygCBAshASAAEJoBIAMgATYCbCADQewAakGcw8AAEDwACyADKAI4IAMoAjwQoQEgA0HwAGokACAADwsgCkEIciAKIAgtABBBAUYbIQoMAQtBBCECCyADIApBCHRBgP4DcSAHQYCAfHFyIgogAnIiBzYCQCADQQAgA0HsAGoiEiAEQf8BcUEFRiIEGzYCWCADIBGtIAmtQv8Bg0IghiAarUIohoSEIic3A1ACQCAJQf8BcUEFRgRAQQUhCSAEDQEgDkEQdCAZciERIBIQUCIJQQh2IRoMAQsgBEUEQCAkIANB7ABqIgQQSEUEQCAYICdBvMPAABBwIA5BEHQgGXIhESAEEFAiCUEIdiEaDAILIA5BEHQgEWohEQwBCyAYICdBrMPAABBwQQUhCQtBiMHAACAGEG8hBAJAAkACQAJAAn8CQCAGQaDLAEYNACAGQYPKAEYNACAGQf3//wBxQfnKAEYNACAEDQBBlMHAACAGEG8NAEHYwMAAIAYQbyEEAkAgBkGPzQBGDQAgBA0AQeTAwAAgBhBvDQBB8MDAACAGEG8NAEH8wMAAIAYQb0UNAwsgA0FAaxBQIRIgEC0AAEECdEH8AHFBAiAIQRBqLQAAIgRBAUYgBEECRhtyQf8BcSETIB4oAgAiGyAUKAIAIgdGBEAjAEEQayIEJAAgBEEIaiAeIBtBAUEEQRAQJCAEKAIIIhtBgYCAgHhHBEAgBCgCDBogG0HMw8AAEJ0BAAsgBEEQaiQACyAFKAL4BSAHQQR0aiIEIBM6AAwgBCASNgIIIAQgBjYCBCAEIA87AQAgFAwBCyADQUBrEFAhEiAfKAIAIhMgFSgCACIHRgRAIwBBEGsiBCQAIARBCGogHyATQQFBBEEMECQgBCgCCCITQYGAgIB4RwRAIAQoAgwaIBNB3MPAABCdAQALIARBEGokAAsgBSgC7AUgB0EMbGoiBCASNgIIIAQgBjYCBCAEIA87AQAgFQsgB0EBajYCAEEgIQYMAQsgBkGAAUkNACAOQf//A3FBAUsNASAGQf//A00EQCAGQQN2QcCAwABqLQAAIAZBB3F2QQFxRQ0BDAILQczAwAAgBhBvDQELIAMgCzsAVyAmIAtBEHYiBDoAACADICA2AlwgAyAMOgBaIAMgDTsBVCADIBc2AlAgAyABOgBWAkAgAUH/AXFBBUYNAAJAIANBQGsgIxBIBEAgEC0AAEECdEH8AHFBAiAIQRBqLQAAIgdBAUYgB0ECRhtyQb8BcSAMc0G/AXFFDQELAkAgBkEgRw0AIAxBCHFBA3YgEC0AACIHQQJxQQF2Rw0AIAxBEHFBBHYgB0EEcUECdkYNAQsgAyALOwBnIANB4ABqIgdBCWogBDoAACADIAw6AGogAyABOgBmIAMgDTsBZCADIBc2AmAgFiAHQezDwAAQWwwBCyANQQFqIQ0gASECDAILIBxBEHQgGXIhFyAQLQAAQQJ0QfwAcUECIAhBEGotAAAiAUEBRiABQQJGG3JB/wFxIQwgCkEIdiELQQEhDQwBCyABQf8BcUEFRwRAIAMgCzsASyADQcQAaiICQQlqIAtBEHY6AAAgAyAMOgBOIAMgAToASiADIA07AUggAyAXNgJEIBYgAkH8w8AAEFsLIBAtAAAhAiAIQRBqLQAAIQEgAyAHNgFWIANBATsBVCADIBw7AVIgAyAPOwFQIAMgAkECdEH8AHFBAiABQQFGIAFBAkYbcjoAWiAWIANB0ABqQYzEwAAQW0EFIQILIAUoAogGIgQgBSgCgAZGBEAjAEEQayIBJAAgAUEIaiAdIB0oAgBBAUEEQQQQJCABKAIIIghBgYCAgHhHBEAgASgCDBogCEGcxMAAEJ0BAAsgAUEQaiQACyAcQQFqIRwgBSgChAYgBEECdGogBjYCACAFIARBAWo2AogGIA4gD2ohDyACIQEMAAsACyABIABBmOXAABBCAAu5DgEDfyMAQeAAayIDJAAgAUEEaiEEAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABKAIAIgVBgIDEAEYEQCACQUBqDjYBAgMEBQYHCAkKCwwNDjc3Dzc3EBE3NxITNxQ3Nzc3NxUWFzcYGRobHDc3Nx0eNzc3Nx8gMiE3CwJAIAJB7ABrDgU1Nzc3MwALIAJB6ABGDTMMNgsgAEEdOgAAIAAgAS8BCDsBAgw2CyAAQQw6AAAgACABLwEIOwECDDULIABBCToAACAAIAEvAQg7AQIMNAsgAEEKOgAAIAAgAS8BCDsBAgwzCyAAQQg6AAAgACABLwEIOwECDDILIABBBDoAACAAIAEvAQg7AQIMMQsgAEEFOgAAIAAgAS8BCDsBAgwwCyAAQQI6AAAgACABLwEIOwECDC8LIABBCzoAACAAIAEvARg7AQQgACABLwEIOwECDC4LIABBAzoAACAAIAEvAQg7AQIMLQsgAS8BCA4EFxgZGhYLIAEvAQgOAxscHRoLIABBHjoAACAAIAEvAQg7AQIMKgsgAEEVOgAAIAAgAS8BCDsBAgwpCyAAQQ06AAAgACABLwEIOwECDCgLIABBLToAACAAIAEvAQg7AQIMJwsgAEEoOgAAIAAgAS8BCDsBAgwmCyABLwEIDgYZGBoYGBsYCyAAQRY6AAAgACABLwEIOwECDCQLIABBAToAACAAIAEvAQg7AQIMIwsgAEECOgAAIAAgAS8BCDsBAgwiCyAAQQo6AAAgACABLwEIOwECDCELIABBIjoAACAAIAEvAQg7AQIMIAsgAEEvOgAAIAAgAS8BCDsBAgwfCyAAQTA6AAAgACABLwEIOwECDB4LIABBCzoAACAAIAEvARg7AQQgACABLwEIOwECDB0LIAEvAQgOBBQTExUTCyADIAQgASgChARBhNzAABBtIANBQGsiASADKAIAIgIgAiADKAIEQQR0ahAmIANBO2ogAUEIaigCADYAACADIAMpAkA3ADMgAEErOgAAIAAgAykAMDcAASAAQQhqIANBN2opAAA3AAAMGwsgA0EIaiAEIAEoAoQEQZTcwAAQbSADQUBrIgEgAygCCCICIAIgAygCDEEEdGoQJiADQTtqIAFBCGooAgA2AAAgAyADKQJANwAzIABBJToAACAAIAMpADA3AAEgAEEIaiADQTdqKQAANwAADBoLIANBGGogBCABKAKEBEGk3MAAEG0gAyADKQMYNwJMIANB1gBqIANBzABqEAsCfyADLQBWQRJGBEBBACEBQQAhBEEBDAELIANBEGpBBEEBQQVBlMjAABBXIANB2gBqLQAAIQEgAygCECECIAMoAhQiBCADKABWNgAAIARBBGogAToAACADQQE2AjggAyAENgI0IAMgAjYCMCADIAMpAkw3AkBBBSECQQEhAQNAIANB2wBqIANBQGsQCyADLQBbQRJGRQRAIAMoAjAgAUYEQCADQTBqIAFBAUEBQQUQZCADKAI0IQQLIAIgBGoiBSADKABbNgAAIAVBBGogA0HfAGotAAA6AAAgAyABQQFqIgE2AjggAkEFaiECDAELCyADKAIwIQQgAygCNAshAiAAIAE2AgwgACACNgIIIAAgBDYCBCAAQSk6AAAMGQsgAEETOgAAIAAgAS8BGDsBBCAAIAEvAQg7AQIMGAsgAEEnOgAADBcLIABBJjoAAAwWCyAAQTI6AAAMFQsgAEEXOwEADBQLIABBlwI7AQAMEwsgAEGXBDsBAAwSCyAAQZcGOwEADBELIABBMjoAAAwQCyAAQRg7AQAMDwsgAEGYAjsBAAwOCyAAQZgEOwEADA0LIABBMjoAAAwMCyAAQQc7AQAMCwsgAEGHAjsBAAwKCyAAQYcEOwEADAkLIABBMjoAAAwICyAAQS47AQAMBwsgAEGuAjsBAAwGCyABLwEIQQhGDQMgAEEyOgAADAULIAVBIUcNAyAAQRQ6AAAMBAsgBUE/Rw0CIANBIGogBCABKAKEBEG03MAAEG0gA0FAayIBIAMoAiAiAiACIAMoAiRBBHRqECcgA0E7aiABQQhqKAIANgAAIAMgAykCQDcAMyAAQRI6AAAgACADKQAwNwABIABBCGogA0E3aikAADcAAAwDCyAFQT9HDQEgA0EoaiAEIAEoAoQEQcTcwAAQbSADQUBrIgEgAygCKCICIAIgAygCLEEEdGoQJyADQTtqIAFBCGooAgA2AAAgAyADKQJANwAzIABBEDoAACAAIAMpADA3AAEgAEEIaiADQTdqKQAANwAADAILIABBMToAACAAIAEvARg7AQQgACABLwEoOwECDAELIABBMjoAAAsgA0HgAGokAAvaCwIPfwJ+IwBB0ABrIgIkACABQQRqIQwgAkFAayENIAJBJWohDiACQRxqIQ8gASgCJCEFIAEoAhQhECABKAIQIQMCQAJAAn8CQANAIAEoAgAhBiABQYCAgIB4NgIAIAEoAgQhCwJAAkACQAJAAkAgBkGAgICAeEcEQCABKQIIIREgCyEHDAELAkAgAyAQRgRAQYCAgIB4IQYMAQsgASADQRBqIgg2AhAgAykCCCERIAMoAgQhByADKAIAIQYgCCEDC0GAgICAeCALEJgBIAZBgICAgHhGDQELIAIgBzYCDCACIAY2AgggAiARNwIQIBFCIIghEkF/IAUgEaciBEcgBCAFSxtB/wFxDgICAwELQYCAgIB4IAcQmAEgAEGAgICAeDYCACABQYCAgIB4NgIADAcLAkAgEqdBAXENACAFIAQgByAEEDBrIgMgAyAFSRsiAyAESw0AIAIgAzYCECADIQQLAn9BgICAgHggBCAFTQ0AGgJAAkAgByAEIAVBuNrAABCGASgCBEUEQCACQThqIgMgAkEIaiIIIAVBAWsQOSACQTBqIANBCGooAgA2AgAgAiACKQI4NwMoIAItABQhBCADQRBqIAIoAgwgAigCECIHIAdBAWtB2NrAABCGASIHQRBqLwEAOwEAIAJCoICAgBA3AjggAiAHKQIINwJAIAggA0Ho2sAAEE4gAiAEOgA0IAItABRBAXFFDQEMAgsgAkE4aiIDIAJBCGogBRA5IAJBMGogA0EIaigCADYCACACIAIpAjg3AyggAiACLQAUIgM6ADQgAw0BCyACQShqEIEBCyACKAIwBEAgAkFAayACQTRqKAIANgIAIAJBAToAFCACIAIpAiw3AzggAigCKAwBCyACKAIoIAIoAixBFBCVAUGAgICAeAshA0GAgICAeCALEJgBIAEgAzYCACAMIAIpAzg3AgAgDEEIaiACQUBrKAIANgIAIABBCGogAkEQaikCADcCACAAIAIpAgg3AgAMBgsgACARNwIIIAAgBzYCBCAAIAY2AgAMBQsCQCADIBBHBEAgASADQRBqIgg2AhAgAygCACIGQYCAgIB4Rw0BCyACQQA7AEAgAkECOgA8IAJBAjoAOCACQQhqIgEgBSACQThqEDogACACKQIINwIAIAJBADoAFCAAQQhqIAFBCGopAgA3AgAMBQsgA0EMaigCACEJIA8gAykCBDcCACAPQQhqIAk2AgAgAiAGNgIYIAUgBGsiCUUNASASp0EBcUUEQCACQQA7AEAgAkECOgA8IAJBAjoAOCACQQhqIAUgAkE4ahA6DAILIAItACRFBEAgAkEYahCBAQsgAigCHCEDIAIoAiAiCiAJTQRAIAJBCGoiBCADIAoQdgJAIAItACQiBg0AIAJBADoAFCACKAIQIAVPDQAgAkEAOwBAIAJBAjoAPCACQQI6ADggBCAFIAJBOGoQOgsgAigCGCADQRQQlQEgBkUNBEGAgICAeCALEJgBIAFBCGogAkEQaikCADcCACABIAIpAgg3AgBBgICAgHggAhCYASAIIQMMAQsLIAMgCiAJQfjZwAAQhgEoAgRFBEAgDUEIaiAHIAQgBEEBa0GI2sAAEIYBIghBEGovAQA7AQAgDSAIKQIINwIAIAJCoICAgBA3AjggAkEIaiACQThqQZjawAAQTiAJQQFrIQkLIAkgCk0EQCACQQhqIAMgCRB2IAIoAhghBiADIAogCRB+IAZBgICAgHhGDQMgCiAKIAlrIgggCCAKSxshBCACLQAkDAILIAkgCkGo2sAAEKIBAAsgAkEqaiAOQQJqLQAAOgAAIAIgDi8AADsBKCACKAIgIQQgAigCHCEDIAItACQLIQhBgICAgHggCxCYASABIAg6AAwgASAENgIIIAEgAzYCBCABIAY2AgAgASACLwEoOwANIAFBD2ogAkEqai0AADoAAAsgACACKQIINwIAIABBCGogAkEQaikCADcCAAsgAkHQAGokAAvjCgIQfwF+IwBBkAFrIgIkACAAKAJsIgUgACgCHCIGayIBQQAgASAAKAIUIgcgBmsgBWpNGyENIAUgB2ohAyAHQQR0IgEgACgCECIKaiEPIAAoAhghDCAAKAJoIQ4gACgCoAEhCyAAKAKcASEIIAohBANAAkAgAyAGRg0AIAFFDQAgCSAMakEAIAQtAAwiEBshCSADQQFrIQMgAUEQayEBIARBEGohBCANIBBBAXNqIQ0MAQsLIAggDEcEQEEAIQUgAEEANgIUIAIgCDYCOCACQQA2AjQgAiAHNgIwIAIgAEEMaiIMNgIsIAIgDzYCKCACIAo2AiQgAkGAgICAeDYCFCACQcgAaiACQRRqIgEQDgJ/IAIoAkhBgICAgHhGBEAgARCWAUEEIQRBAAwBCyACQQhqQQRBBEEQQZTIwAAQVyACQdAAaikCACERIAIoAgghASACKAIMIgQgAikCSDcCACAEQQhqIBE3AgAgAkEBNgJEIAIgBDYCQCACIAE2AjwgAkHYAGogAkEUakEoEBQaQRAhA0EBIQUDQCACQYABaiACQdgAahAOIAIoAoABQYCAgIB4RwRAIAIoAjwgBUYEQCACQTxqQQEQgwEgAigCQCEECyADIARqIgEgAikCgAE3AgAgAUEIaiACQYgBaikCADcCACACIAVBAWoiBTYCRCADQRBqIQMMAQsLQYCAgIB4IAIoAoQBEJgBIAJB2ABqEJYBIAIoAjwLIQcgCSAOaiEJIAVBBHQhAyAEIQECQANAIANFDQEgA0EQayEDIAEoAgghCiABQRBqIQEgCCAKRg0AC0Hwz8AAQTdBqNDAABBnAAsgDBCUASAAIAU2AhQgACAENgIQIAAgBzYCDCAFIAZJBEAgAkEAOwBgIAJBAjoAXCACQQI6AFggACAGIAVrIAggAkHYAGoQLCAAKAIUIQULIAVBAWshBEEAIQFBACEDA0ACQCABIA1PDQAgAyAETw0AIAEgACgCECAAKAIUIANBsM/AABCIAS0ADEEBc2ohASADQQFqIQMMAQsLAn8DQCAAKAIUIgEgCCAJSw0BGiAAKAIQIAEgA0Ggz8AAEIgBLQAMBEAgA0EBaiEDIAkgCGshCQwBCwsgACgCFAshByAJIAhBAWsiASABIAlLGyEOIAMgBiAFa2oiAUEATiEEIAFBACAEGyEFIAZBACABIAQbayEGCwJAAkACQEF/IAYgC0cgBiALSxtB/wFxDgICAAELIAcgBmsiAUEAIAEgB00bIgQgCyAGayIBIAEgBEsbIgNBACAFIAZJGyAFaiEFIAEgBE0NASACQQA7AGAgAkECOgBcIAJBAjoAWCAAIAEgA2sgCCACQdgAahAsDAELAkAgBiALayIKIAYgBUF/c2oiASABIApLGyIERQ0AIAAoAhAhAyAEIAdNBEAgACAHIARrIgE2AhQgAyABQQR0aiEDIAQhAQNAIAEEQCADKAIAIANBBGooAgBBFBCVASABQQFrIQEgA0EQaiEDDAELCyAAKAIUIQcgACgCECEDCwJAIAdFDQAgAyAHQQR0aiIBQRBGDQAgAUEEa0EAOgAADAELQZDPwAAQpQEACyAFIAprIARqIQULIAAgBTYCbCAAIA42AmggAEEBOgAgIAAgCzYCHCAAIAg2AhgCfyAAKAKgASIDIAAoAmQiAU0EQCAAIAM2AmQgAwwBCyAAQdwAaiADIAFrQQAQMyAAKAJkIQMgACgCoAELIQEgACgCYCADQQAgARBKIAAoApwBIgEgACgCdE0EQCAAIAFBAWs2AnQLIAAoAqABIgEgACgCeE0EQCAAIAFBAWs2AngLIAJBkAFqJAALuwkBB38CQAJAIAIgACABa0sEQCABIAJqIQUgACACaiEAIAJBEEkNAUEAIABBA3EiBmshBwJAIABBfHEiAyAATw0AIAZBAWsCQCAGRQRAIAUhBAwBCyAGIQggBSEEA0AgAEEBayIAIARBAWsiBC0AADoAACAIQQFrIggNAAsLQQNJDQAgBEEEayEEA0AgAEEBayAEQQNqLQAAOgAAIABBAmsgBEECai0AADoAACAAQQNrIARBAWotAAA6AAAgAEEEayIAIAQtAAA6AAAgBEEEayEEIAAgA0sNAAsLIAMgAiAGayIEQXxxIgJrIQBBACACayEGAkAgBSAHaiIFQQNxRQRAIAAgA08NASABIARqQQRrIQEDQCADQQRrIgMgASgCADYCACABQQRrIQEgACADSQ0ACwwBCyAAIANPDQAgBUEDdCICQRhxIQggBUF8cSIHQQRrIQFBACACa0EYcSEJIAcoAgAhAgNAIAIgCXQhByADQQRrIgMgByABKAIAIgIgCHZyNgIAIAFBBGshASAAIANJDQALCyAEQQNxIQIgBSAGaiEFDAELIAJBEE8EQAJAQQAgAGtBA3EiBiAAaiIEIABNDQAgBkEBayABIQMgBgRAIAYhBQNAIAAgAy0AADoAACADQQFqIQMgAEEBaiEAIAVBAWsiBQ0ACwtBB0kNAANAIAAgAy0AADoAACAAQQFqIANBAWotAAA6AAAgAEECaiADQQJqLQAAOgAAIABBA2ogA0EDai0AADoAACAAQQRqIANBBGotAAA6AAAgAEEFaiADQQVqLQAAOgAAIABBBmogA0EGai0AADoAACAAQQdqIANBB2otAAA6AAAgA0EIaiEDIAQgAEEIaiIARw0ACwsgAiAGayIDQXxxIgggBGohAAJAIAEgBmoiBUEDcUUEQCAAIARNDQEgBSEBA0AgBCABKAIANgIAIAFBBGohASAEQQRqIgQgAEkNAAsMAQsgACAETQ0AIAVBA3QiAkEYcSEGIAVBfHEiB0EEaiEBQQAgAmtBGHEhCSAHKAIAIQIDQCACIAZ2IQcgBCAHIAEoAgAiAiAJdHI2AgAgAUEEaiEBIARBBGoiBCAASQ0ACwsgA0EDcSECIAUgCGohAQsgACACaiIFIABNDQEgAkEBayACQQdxIgMEQANAIAAgAS0AADoAACABQQFqIQEgAEEBaiEAIANBAWsiAw0ACwtBB0kNAQNAIAAgAS0AADoAACAAQQFqIAFBAWotAAA6AAAgAEECaiABQQJqLQAAOgAAIABBA2ogAUEDai0AADoAACAAQQRqIAFBBGotAAA6AAAgAEEFaiABQQVqLQAAOgAAIABBBmogAUEGai0AADoAACAAQQdqIAFBB2otAAA6AAAgAUEIaiEBIAUgAEEIaiIARw0ACwwBCyAAIAJrIgQgAE8NACACQQFrIAJBA3EiAQRAA0AgAEEBayIAIAVBAWsiBS0AADoAACABQQFrIgENAAsLQQNJDQAgBUEEayEBA0AgAEEBayABQQNqLQAAOgAAIABBAmsgAUECai0AADoAACAAQQNrIAFBAWotAAA6AAAgAEEEayIAIAEtAAA6AAAgAUEEayEBIAAgBEsNAAsLC7gKAQV/IAAgAkGAzcAAEFoiAigCBCACKAIIIAFB0NXAABCGASgCBCEGQQEhBwJAAkACfwJAAkACQAJAAkACQAJAIANBoAFJDQAgA0ENdkGA7cAAai0AACIAQRVPDQEgA0EHdkE/cSAAQQZ0ckGA78AAai0AACIAQbQBTw0CAkACQCADQQJ2QR9xIABBBXRyQcD5wABqLQAAIANBAXRBBnF2QQNxQQJrDgIBAAILIANBjvwDa0ECSQ0BIANB3AtGDQEgA0HYL0YNASADQZA0Rg0BIANBg5gERg0BIANB/v//AHFB/MkCRg0BIANBogxrQeEESQ0BIANBgC9rQTBJDQEgA0Gx2gBrQT9JDQEgA0Hm4wdrQRpJDQELQQAhBwsgAigCCCIFIAFBf3NqIQACQAJAAkACQCAGDgMDAQIAC0Gg2MAAQShByNjAABBnAAsgAigCBCEGIAcNBwJAAkACQCAADgIAAQILIAYgBSABQfDVwAAQhgEiAkEgNgIAQQAhAEEBIQYMCwtBAiEAIAYgBSABQYDWwAAQhgEiBUECNgIEIAUgAzYCACAFIAQpAAA3AAggBUEQaiAEQQhqLwAAOwAAIAIoAgQgAigCCCABQQFqQZDWwAAQhgEiAkEgNgIADAcLQQIhACAGIAUgAUGg1sAAEIYBIgVBAjYCBCAFIAM2AgAgBSAEKQAANwAIIAVBEGogBEEIaiIDLwAAOwAAIAIoAgQgAigCCCABQQFqIgVBsNbAABCGASgCBEECRgRAIAIoAgQgAigCCCABQQJqQcDWwAAQhgEiAUKggICAEDcCACABIAQpAAA3AAggAUEQaiADLwAAOwAACyACKAIEIAIoAgggBUHQ1sAAEIYBIgJBIDYCAAwGC0EBIQYgAUEBaiEIIAIoAgQhCSAHDQRBAiEAIAkgBSABQYDXwAAQhgEiAUECNgIEIAEgAzYCACABIAQpAAA3AAggAUEQaiAEQQhqLwAAOwAAIAIoAgQgAigCCCAIQZDXwAAQhgEiAkEgNgIADAULIAcNAgJAAkAgAA4CCgABC0EBIQYgAigCBCAFIAFBAWpBwNfAABCGASICQSA2AgBBACEADAgLIAIoAgQgBSABQQFrQdDXwAAQhgEiAEKggICAEDcCACAAIAQpAAA3AAggAEEQaiAEQQhqIgcvAAA7AABBAiEAIAIoAgQgAigCCCABQeDXwAAQhgEiBUECNgIEIAUgAzYCACAFIAQpAAA3AAggBUEQaiAHLwAAOwAAIAIoAgQgAigCCCABQQFqIgNB8NfAABCGASgCBEECRgRAIAIoAgQgAigCCCABQQJqQYDYwAAQhgEiAUKggICAEDcCACABIAQpAAA3AAggAUEQaiAHLwAAOwAACyACKAIEIAIoAgggA0GQ2MAAEIYBIgJBIDYCAAwECyAAQRVB9MbAABBCAAsgAEG0AUGEx8AAEEIACyACKAIEIAUgAUEBa0Gg18AAEIYBIgBCoICAgBA3AgAgACAEKQAANwAIIABBEGogBEEIai8AADsAACACKAIEIAIoAgggAUGw18AAEIYBDAMLIAkgBSABQeDWwAAQhgEiAEEBNgIEIAAgAzYCACAAIAQpAAA3AAggAEEQaiAEQQhqLwAAOwAAIAIoAgQgAigCCCAIQfDWwAAQhgEiAkEgNgIAQQEhAAwDC0EAIQYMAgsgBiAFIAFB4NXAABCGAQsiAiADNgIAQQEhBkEBIQALIAIgBjYCBCACIAQpAAA3AAggAkEQaiAEQQhqLwAAOwAACyAACwMAAAvJBQIKfwF+IwBBkAFrIgQkAAJAAkACQANAQQAgAkEEdGshBQJAA0AgAkUNBSAARQ0FIAAgAmpBGEkNAyAAIAIgACACSSIDG0EJSQ0BIANFBEAgASEDA0AgAyAFaiIBIAMgAhBhIAEhAyACIAAgAmsiAE0NAAsMAQsLQQAgAEEEdCIDayEFA0AgASAFaiABIAAQYSABIANqIQEgAiAAayICIABPDQALDAELCyABIABBBHQiBWsiAyACQQR0IgZqIQcgACACSw0BIARBEGoiACADIAUQFBogAyABIAYQECAHIAAgBRAUGgwCCyAEQQhqIgcgASAAQQR0ayIGQQhqKQIANwMAIAQgBikCADcDACACQQR0IQggAiIFIQEDQCAGIAFBBHRqIQMDQCAEQRhqIgkgA0EIaiIKKQIANwMAIAQgAykCADcDECAHKQMAIQ0gAyAEKQMANwIAIAogDTcCACAHIAkpAwA3AwAgBCAEKQMQNwMAIAAgAUsEQCADIAhqIQMgASACaiEBDAELCyABIABrIgEEQCABIAUgASAFSRshBQwBBSAEKQMAIQ0gBkEIaiAEQQhqIgcpAwA3AgAgBiANNwIAQQEgBSAFQQFNGyEJQQEhAQNAIAEgCUYNBCAGIAFBBHRqIgUpAgAhDSAHIAVBCGoiCikCADcDACAEIA03AwAgASACaiEDA0AgBEEYaiILIAYgA0EEdGoiCEEIaiIMKQIANwMAIAQgCCkCADcDECAHKQMAIQ0gCCAEKQMANwIAIAwgDTcCACAHIAspAwA3AwAgBCAEKQMQNwMAIAAgA0sEQCACIANqIQMMAQsgAyAAayIDIAFHDQALIAQpAwAhDSAKIAcpAwA3AgAgBSANNwIAIAFBAWohAQwACwALAAsACyAEQRBqIgAgASAGEBQaIAcgAyAFEBAgAyAAIAYQFBoLIARBkAFqJAALkAUBCH8CQCACQRBJBEAgACEDDAELAkBBACAAa0EDcSIGIABqIgUgAE0NACAGQQFrIAAhAyABIQQgBgRAIAYhBwNAIAMgBC0AADoAACAEQQFqIQQgA0EBaiEDIAdBAWsiBw0ACwtBB0kNAANAIAMgBC0AADoAACADQQFqIARBAWotAAA6AAAgA0ECaiAEQQJqLQAAOgAAIANBA2ogBEEDai0AADoAACADQQRqIARBBGotAAA6AAAgA0EFaiAEQQVqLQAAOgAAIANBBmogBEEGai0AADoAACADQQdqIARBB2otAAA6AAAgBEEIaiEEIAUgA0EIaiIDRw0ACwsgAiAGayIHQXxxIgggBWohAwJAIAEgBmoiBEEDcUUEQCADIAVNDQEgBCEBA0AgBSABKAIANgIAIAFBBGohASAFQQRqIgUgA0kNAAsMAQsgAyAFTQ0AIARBA3QiAkEYcSEGIARBfHEiCUEEaiEBQQAgAmtBGHEhCiAJKAIAIQIDQCACIAZ2IQkgBSAJIAEoAgAiAiAKdHI2AgAgAUEEaiEBIAVBBGoiBSADSQ0ACwsgB0EDcSECIAQgCGohAQsCQCACIANqIgYgA00NACACQQFrIAJBB3EiBARAA0AgAyABLQAAOgAAIAFBAWohASADQQFqIQMgBEEBayIEDQALC0EHSQ0AA0AgAyABLQAAOgAAIANBAWogAUEBai0AADoAACADQQJqIAFBAmotAAA6AAAgA0EDaiABQQNqLQAAOgAAIANBBGogAUEEai0AADoAACADQQVqIAFBBWotAAA6AAAgA0EGaiABQQZqLQAAOgAAIANBB2ogAUEHai0AADoAACABQQhqIQEgBiADQQhqIgNHDQALCyAAC/QEAgt/BH4jAEEQayICJABCASABQXBxQRBqIgQgACAAIARJG0EBaxB0IgathiEOQn8gBkEBaq2GIQ8gAEEBayEHIAFBj4AEaiIBQYCAfHEhCSABQRB2IQogBkE9SyELIABBEUkhDAJAAn8DQAJAQbCqwQApAwAhDQJAIAtFBEAgDSAPg3oiEEI/WARAIBCnIQAgDARAQbiqwQAoAgAgAEECdGooAgAiASgCDCABEFggAUEBayIDIAMtAABBAnM6AAAgAWoMBgsDQCACQQRqIAAgBCAHEDYgAigCBEEBRg0EIABBP0kEQEGwqsEAKQMAQn8gAEEBaq2Gg3oiDachACANQsAAVA0BCwsgAkEEaiAGIAQgBxA2IAIoAgQNAwwCCyANIA6DUA0BIAJBBGogBiAEIAcQNiACKAIEQQFGDQIMAQsgDUIAWQ0AIAJBBGpBPyAEIAcQNiACKAIEQQFGDQELQQAhASAKQAAiAEF/Rg0DQX8gAEEQdCIAIAlqIgMgACADSxtBcHEhAwJAQbiqwQAoAgAEQCAAQSBqIgUgAEkNBSADIAVJDQUgAEEPakEHOgAAIABBEGohBQwBCyAAQQEgABtBA2pBhIB8cSIIQZACckGQgnxxIgUgCEkNBCADIAVJDQRBACEAQbiqwQAgCDYCACAFQQFrQQNBASADIAVLGzoAAANAIABBgAJGDQEgACAIakEANgIAIABBBGohAAwACwALIAMgBUsEQCAFIAMQOAsgAw0BDAMLCyACKAIIIQEgAigCDAsiACABIARqIgRGBH9BAQUgBCAAEDhBAwshACAEQQFrIAA6AAALIAJBEGokACABCwMAAAuhBAILfwJ+IwBB0ABrIQQCQCAARQ0AIAJFDQAgBEEIaiIDQRBqIgYgASAAQWxsaiILIgdBEGooAgA2AgAgA0EIaiIIIAdBCGopAgA3AwAgBCAHKQIANwMIIAJBFGwhCSACIgMhBQNAIAsgA0EUbGohAQNAIAEpAgAhDiABIAQpAwg3AgAgCCkDACEPIAggAUEIaiIKKQIANwMAIAogDzcCACAGKAIAIQogBiABQRBqIgwoAgA2AgAgDCAKNgIAIAQgDjcDCCAAIANNRQRAIAEgCWohASACIANqIQMMAQsLIAMgAGsiAwRAIAMgBSADIAVJGyEFDAEFIAcgBCkDCDcCACAHQRBqIARBCGoiAUEQaiIGKAIANgIAIAdBCGogAUEIaiIIKQMANwIAQQEgBSAFQQFNGyELQQEhAwNAIAMgC0YNAyAGIAcgA0EUbGoiBUEQaiIKKAIANgIAIAggBUEIaiIMKQIANwMAIAQgBSkCADcDCCACIANqIQEDQCAHIAFBFGxqIgkpAgAhDiAJIAQpAwg3AgAgCCkDACEPIAggCUEIaiINKQIANwMAIA0gDzcCACAGKAIAIQ0gBiAJQRBqIgkoAgA2AgAgCSANNgIAIAQgDjcDCCAAIAFLBEAgASACaiEBDAELIAMgASAAayIBRw0ACyAFIAQpAwg3AgAgCiAGKAIANgIAIAwgCCkDADcCACADQQFqIQMMAAsACwALAAsL0QQCA38EfiMAQdAGayIEJAAgBEH8AWpBAEGFBBAbGiAEQYCAxAA2AvgBIARBNGoiBSAAIAFBASACQQAQHCAEQdgAaiAAIAFBAUEAQQAQHCAEQcQGaiIGIAEQTCAEQYQBaiAAEDIgBEEAOgDwASAEIAE2AtQBIAQgADYC0AEgBEEAOwHuASAEQQI6AOoBIARBAjoA5gEgBEEBOgCkASAEQgA3ApwBIAQgAjYCgAEgBEEBNgJ8IARBADsB5AEgBEEAOgD1ASAEQYCABDYA8QEgBEIANwLYASAEIAFBAWs2AuABIARBAjoAsAEgBEECOgC0ASAEQQA2AsABIARBAjoAxAEgBEECOgDIASAEQYCAgAg2AswBIARCADcCqAEgBEKAgIAINwK4ASAEQZgBaiAGQQhqKAIANgIAIARBADoA9gEgBCAEKQLEBjcCkAEgBEEoaiAAQQJBCEGMwsAAEFcgBCkDKCEHIARBIGogAEECQQxBnMLAABBXIAQpAyAhCCAEQRhqIABBBEEMQazCwAAQVyAEKQMYIQkgBEEQaiAAQQRBEEG8wsAAEFcgBCkDECEKIARBCGogAEEEQQRBzMLAABBXIAQgA0EARzoAwAYgBEEANgK8BiAEQQA2ArAGIAQgCjcCqAYgBEEANgKkBiAEIAk3ApwGIARBADYCmAYgBCAINwKQBiAEQQA2AowGIAQgBzcChAYgBCAEKQMINwK0BkGcBhCPASIAQQA2AgggAEKBgICAEDcCACAAQQxqIAVBkAYQFBogBEHQBmokACAAQQhqC7sQAhF/BH4jAEEgayIMJAAQACEKIAxBADYCHCAMIAo2AhggDCABNgIUIAxBFGogBRB6IAwoAhwhASAGQf//A3G4EAchBSAMKAIYIhUgASAFEAEjAEEgayIGJAACQEG8qsEAKAIAIgUNAEHAqsEAQQA2AgBBvKrBAEEBNgIAQcSqwQAoAgAhAUHIqsEAKAIAIQhBxKrBAEHY68AAKQIAIhg3AgAgBkEIakHg68AAKQIAIhk3AwBB0KrBACgCACEKQcyqwQAgGTcCACAGIBg3AwAgBUUNACAIRQ0AAkAgCkUNACABQQhqIQkgASkDAEJ/hUKAgYKEiJCgwIB/gyEZQQEhCyABIQUDQCALRQ0BIBkhGANAIBhQBEAgBUHgAGshBSAJKQMAQn+FQoCBgoSIkKDAgH+DIRggCUEIaiEJDAELCyAYQgF9IBiDIRkgCkEBayIKIQsgBSAYeqdBA3ZBdGxqQQRrKAIAIgdBhAFJDQAgBxACDAALAAsgBkEUaiAIQQFqED0gASAGKAIcayAGKAIYEJsBCyAGQSBqJABBwKrBACgCAEUEQEHAqsEAQX82AgBByKrBACgCACIBIANxIQYgA60iGkIZiEKBgoSIkKDAgAF+IRtBxKrBACgCACEKA0AgBiAKaikAACIZIBuFIhhCgYKEiJCgwIABfSAYQn+Fg0KAgYKEiJCgwIB/gyEYAkACQANAIBhCAFIEQCADIAogGHqnQQN2IAZqIAFxQXRsaiIFQQxrKAIARgRAIAVBCGsoAgAgBEYNAwsgGEIBfSAYgyEYDAELCyAZIBlCAYaDQoCBgoSIkKDAgH+DUA0BQcyqwQAoAgBFBEAjAEEwayIIJAACQAJAAkBB0KrBACgCACIKQX9GDQBByKrBACgCACIJQQFqIgtBA3YhASAJIAFBB2wgCUEISRsiDkEBdiAKTQRAIAhBCGoCfyAKIA4gCiAOSxsiAUEHTwRAIAFB/v///wFLDQNBfyABQQN0QQhqQQduQQFrZ3ZBAWoMAQtBBEEIIAFBA0kbCyIBED0gCCgCCCIFRQ0BIAgoAhAhBiAIKAIMIgkEQEH4qsEALQAAGiAFIAkQFSEFCyAFRQ0CIAUgBmpB/wEgAUEIahAbIQsgCEEANgIgIAggAUEBayIHNgIYIAggCzYCFCAIQQg2AhAgCCAHIAFBA3ZBB2wgAUEJSRsiDjYCHCALQQxrIRFBxKrBACgCACIGKQMAQn+FQoCBgoSIkKDAgH+DIRggBiEBIAohCUEAIQUDQCAJBEADQCAYUARAIAVBCGohBSABKQMIQn+FQoCBgoSIkKDAgH+DIRggAUEIaiEBDAELCyAIIAsgByAGIBh6p0EDdiAFaiINQXRsaiIGQQxrKAIAIhAgBkEIaygCACAQG60QXCARIAgoAgBBdGxqIhBBxKrBACgCACIGIA1BdGxqQQxrIg0pAAA3AAAgEEEIaiANQQhqKAAANgAAIAlBAWshCSAYQgF9IBiDIRgMAQsLIAggCjYCICAIIA4gCms2AhxBACEBA0AgAUEQRwRAIAFBxKrBAGoiBSgCACEGIAUgASAIakEUaiIFKAIANgIAIAUgBjYCACABQQRqIQEMAQsLIAgoAhgiAUUNAyAIQSRqIAFBAWoQPSAIKAIUIAgoAixrIAgoAigQmwEMAwsgASALQQdxQQBHaiEFQcSqwQAoAgAiBiEBA0AgBQRAIAEgASkDACIYQn+FQgeIQoGChIiQoMCAAYMgGEL//v379+/fv/8AhHw3AwAgAUEIaiEBIAVBAWshBQwBBQJAIAtBCE8EQCAGIAtqIAYpAAA3AAAMAQsgBkEIaiAGIAsQEAsgBkEIaiERIAZBDGshECAGIQVBACEBA0ACQAJAIAEgC0cEQCABIAZqIhMtAABBgAFHDQIgAUF0bCIHIBBqIRQgBiAHaiIHQQhrIRYgB0EMayEXA0AgASAXKAIAIgcgFigCACAHGyIHIAlxIg9rIAYgCSAHrRA+Ig0gD2tzIAlxQQhJDQIgBiANaiIPLQAAIA8gB0EZdiIHOgAAIBEgDUEIayAJcWogBzoAACANQXRsIQdB/wFHBEAgBiAHaiENQXQhBwNAIAdFDQIgBSAHaiIPLQAAIRIgDyAHIA1qIg8tAAA6AAAgDyASOgAAIAdBAWohBwwACwALCyATQf8BOgAAIBEgAUEIayAJcWpB/wE6AAAgByAQaiIHQQhqIBRBCGooAAA2AAAgByAUKQAANwAADAILQcyqwQAgDiAKazYCAAwHCyATIAdBGXYiBzoAACARIAFBCGsgCXFqIAc6AAALIAFBAWohASAFQQxrIQUMAAsACwALAAsjAEEgayIAJAAgAEEANgIYIABBATYCDCAAQcjqwAA2AgggAEIENwIQIABBCGpB/OrAABCAAQALAAsgCEEwaiQACyADIAQQCSEBIAxBCGpBxKrBACgCAEHIqsEAKAIAIBoQXCAMKAIIIQUgDC0ADCEGQdCqwQBB0KrBACgCAEEBajYCAEHMqsEAQcyqwQAoAgAgBkEBcWs2AgBBxKrBACgCACAFQXRsaiIFQQRrIAE2AgAgBUEIayAENgIAIAVBDGsgAzYCAAsgBUEEaygCABADIQFBwKrBAEHAqsEAKAIAQQFqNgIAIAIgASAVEAQgAEEANgIAIAxBIGokAA8LIA5BCGoiDiAGaiABcSEGDAALAAsjAEEwayIAJAAgAEEBNgIMIABB6OXAADYCCCAAQgE3AhQgACAAQS9qrUKAgICA0ACENwMgIAAgAEEgajYCECAAQQhqQdDswAAQgAEAC/IDAQV/IwBBMGsiBiQAIAIgAWsiByADSyEJIAJBAWsiCCAAKAIcIgVBAWtJBEAgACAIQaDOwAAQWkEAOgAMCyADIAcgCRshAwJAAkAgAUUEQAJAIAIgBUcEQCAGQRBqIAAoAhggBBApIAVBBHQgAkEEdGshByAAQQxqIQkgACgCFCIBIAIgBWtqIQQgASECA0AgA0UEQCAGKAIQIAYoAhRBFBCVAQwFCyAGQSBqIAZBEGoQSyABIARJDQIgCSgCACIIIAJGBEAjAEEQayIFJAAgBUEIaiAJIAhBAUEEQRAQJCAFKAIIIghBgYCAgHhHBEAgBSgCDBogCEGwzsAAEJ0BAAsgBUEQaiQACyAAKAIQIARBBHRqIQUgAiAESwRAIAVBEGogBSAHEBALIAUgBikCIDcCACAAIAJBAWoiAjYCFCAFQQhqIAZBKGopAgA3AgAgA0EBayEDIAdBEGohBwwACwALIAAgAyAAKAIYIAQQLAwCCyAEIAJBsM7AABBDAAsgACABQQFrQcDOwAAQWkEAOgAMIAZBCGogACABIAJB0M7AABBfIAYoAgwiASADSQ0BIAMgBigCCCADQQR0aiABIANrEBMgACACIANrIAIgBBAoCyAAQQE6ACAgBkEwaiQADwtBpMjAAEEjQbzJwAAQZwALlAMBBX8CQCACQRBJBEAgACEDDAELAkBBACAAa0EDcSIFIABqIgQgAE0NACAFQQFrIAAhAyAFBEAgBSEGA0AgAyABOgAAIANBAWohAyAGQQFrIgYNAAsLQQdJDQADQCADIAE6AAAgA0EHaiABOgAAIANBBmogAToAACADQQVqIAE6AAAgA0EEaiABOgAAIANBA2ogAToAACADQQJqIAE6AAAgA0EBaiABOgAAIAQgA0EIaiIDRw0ACwsgBCACIAVrIgJBfHFqIgMgBEsEQCABQf8BcUGBgoQIbCEFA0AgBCAFNgIAIARBBGoiBCADSQ0ACwsgAkEDcSECCwJAIAIgA2oiBSADTQ0AIAJBAWsgAkEHcSIEBEADQCADIAE6AAAgA0EBaiEDIARBAWsiBA0ACwtBB0kNAANAIAMgAToAACADQQdqIAE6AAAgA0EGaiABOgAAIANBBWogAToAACADQQRqIAE6AAAgA0EDaiABOgAAIANBAmogAToAACADQQFqIAE6AAAgBSADQQhqIgNHDQALCyAAC68DAQV/IwBBQGoiBiQAIAZBADsAEiAGQQI6AA4gBkECOgAKIAZBMGoiB0EIaiIIIAUgBkEKaiAFGyIFQQhqLwAAOwEAIAYgBSkAADcDMCAGQRRqIAEgBxApIAYgAkEEQRBB8MzAABBXIAZBADYCLCAGIAYpAwA3AiQgBkEkaiACEIMBQQEgAiACQQFNGyIJQQFrIQcgBigCKCAGKAIsIgpBBHRqIQUCfwNAIAcEQCAGQTBqIAZBFGoQSyAFIAYpAjA3AgAgBUEIaiAIKQIANwIAIAdBAWshByAFQRBqIQUMAQUCQCAJIApqIQcCQCACRQRAIAYoAhQgBigCGEEUEJUBIAdBAWshBwwBCyAFIAYpAhQ3AgAgBUEIaiAGQRxqKQIANwIACyAGIAc2AiwgA0EBcUUNACAEBEAgBkEkaiAEEIMBCyAEQQpuIARqIQVBAQwDCwsLIAZBJGpB6AcQgwFBAAshAyAAIAYpAiQ3AgwgACACNgIcIAAgATYCGCAAQQA6ACAgACAFNgIIIAAgBDYCBCAAIAM2AgAgAEEUaiAGQSxqKAIANgIAIAZBQGskAAumAwEDfyMAQRBrIgYkACADIAAoAhggAWsiBSADIAVJGyEDIAEgACACQaDNwAAQWiIAKAIIIgJBAWsiBSABIAVJGyEBIAAoAgQgAiABQdjYwAAQhgEiBSgCBEUEQCAFQqCAgIAQNwIAIAUgBCkAADcACCAFQRBqIARBCGoiBy8AADsAACAAKAIEIAAoAgggAUEBa0Ho2MAAEIYBIgVCoICAgBA3AgAgBSAEKQAANwAIIAVBEGogBy8AADsAAAsgBkEIaiAAKAIEIAAoAgggAUH42MAAEHUCQCADIAYoAgwiBU0EQCAFIANrIgUgBigCCCAFQRRsaiADEBcgACgCBCAAKAIIIAFBiNnAABCGASIBKAIERQRAIAFCoICAgBA3AgAgASAEKQAANwAIIAFBEGogBEEIai8AADsAACACRQ0CIAAoAgQgAkEUbGoiAEEUayIBRQ0CIAFBIDYCACAAQRBrQQE2AgAgAEEMayIAIAQpAAA3AAAgAEEIaiAEQQhqLwAAOwAACyAGQRBqJAAPC0HMycAAQSFB8MnAABBnAAtBmNnAABClAQAL9QIBBH8CQCAAAn8CQAJAAkACQAJAIAAoAqQBIgJBAU0EQAJAIAFB/wBLDQAgACACakGwAWotAABBAXFFDQAgAUECdEG40MAAaigCACEBCyAAKAJoIgMgACgCnAEiBE8NAyAAKAJsIQIgAC0AvQENAQwCCyACQQJBqOXAABBCAAsgACADIAJBASAAQbIBahAdCyAAIAMgAiABIABBsgFqEBEiBQ0BCyAALQC/AQ0BIAAgA0EBayAAKAJsIgIgASAAQbIBaiIFEBFFBEAgACADQQJrIAIgASAFEBEaCyAEQQFrDAILIAAgAyAFaiIBNgJoIAEgBEcNAiAALQC/AQ0CIARBAWsMAQsCQCAAKAJsIgIgACgCrAFHBEAgAiAAKAKgAUEBa08NASAAIAIQoAEgACACQQFqIgI2AmwMAQsgACACEKABIABBARB9IAAoAmwhAgsgAEEAIAIgASAAQbIBahARCzYCaAsgACgCYCAAKAJkIAIQhwEL+gIAAkACQAJAAkACQAJAAkAgA0EBaw4GAAECAwQFBgsgACgCGCEEIAAgAkHQzcAAEFoiA0EAOgAMIAMoAgQgAygCCCABIAQgBRAlIAAgAkEBaiAAKAIcIAUQKA8LIAAoAhghAyAAIAJB4M3AABBaIgQoAgQgBCgCCEEAIAFBAWoiASADIAEgA0kbIAUQJSAAQQAgAiAFECgPCyAAQQAgACgCHCAFECgPCyAAKAIYIQMgACACQfDNwAAQWiIAKAIEIAAoAgggASADIAUQJSAAQQA6AAwPCyAAKAIYIQMgACACQYDOwAAQWiIAKAIEIAAoAghBACABQQFqIgAgAyAAIANJGyAFECUPCyAAKAIYIQEgACACQZDOwAAQWiIAKAIEIAAoAghBACABIAUQJSAAQQA6AAwPCyAAKAIYIQMgACACQcDNwAAQWiIAKAIEIAAoAgggASABIAQgAyABayIBIAEgBEsbaiIBIAUQJSABIANGBEAgAEEAOgAMCwvUAgEFfyMAQUBqIgMkACADQQA2AiAgAyABNgIYIAMgASACajYCHCADQRBqIANBGGoQRAJAIAMoAhBFBEAgAEEANgIIIABCgICAgMAANwIADAELIAMoAhQhBCADQQhqQQRBBEEEQZTIwAAQVyADKAIIIQUgAygCDCIGIAQ2AgAgA0EBNgIsIAMgBjYCKCADIAU2AiQgA0E4aiADQSBqKAIANgIAIAMgAykCGDcDMEEEIQVBASEEA0AgAyADQTBqEEQgAygCAEEBR0UEQCADKAIEIQcgAygCJCAERgRAIANBJGogBEEBQQRBBBBkIAMoAighBgsgBSAGaiAHNgIAIAMgBEEBaiIENgIsIAVBBGohBQwBCwsgACADKQIkNwIAIABBCGogA0EsaigCADYCAAsDQCACBEAgAUEAOgAAIAJBAWshAiABQQFqIQEMAQsLIANBQGskAAvKAgIFfwJ+IwBBIGsiAiQAIAACfwJAAkAgAS0AIEUEQAwBCyABQQA6ACACQCABKAIAQQFGBEAgASgCFCIFIAEoAhxrIgMgASgCCEsNAQsMAQsgBSADIAEoAgRrIgRPBEBBACEDIAFBADYCFCACIAFBDGo2AhQgAiABKAIQIgY2AgwgAiAENgIYIAIgBSAEazYCHCACIAYgBEEEdGo2AhAgAS0AvAENAkEUQQQQciEBIAJBDGoiA0EIaikCACEHIAIpAgwhCCABQRBqIANBEGooAgA2AgAgAUEIaiAHNwIAIAEgCDcCAEGg5MAADAMLIAQgBUH0y8AAEKIBAAsgAkEANgIMQQEhAyABLQC8AQ0AQQBBARByIQFBhOTAAAwBC0EAQQEQciEBIANFBEAgAkEMahBPC0GE5MAACzYCBCAAIAE2AgAgAkEgaiQAC4YCAQR/AkACQAJ/AkACQAJAQX8gASADRyABIANLG0H/AXEOAgUBAAsgA0FwcSICIAFBcHEiAUYNBCAAIAJqIgVBEGogACABaiICQRBqIQEgAkEPai0AAEECcQR/IAJBHGooAgAhAiABEFggASACagUgAQsQOAwBCyABQXBxIgUgA0FwcSIGRg0DIAAgBWoiBEEPai0AAEECcUUNAiAAIAZqIgVBEGoiBiAEQRBqIgcgBEEcaigCAGoiBEsNAiAHEFhBASAEIAZGDQEaIAYgBBA4C0EDCyEBIAVBD2ogAToAACAADwsgAiADEBUiAkUEQEEADwsgAiAAIAEQFCAAIAEQOyEACyAAC5ICAQV/AkACQAJAQX8gACgCnAEiAyABRyABIANJG0H/AXEOAgIBAAsgACAAKAJYIgMEfyAAKAJUIQUDQCADQQJJRQRAIANBAXYiBiAEaiIHIAQgBSAHQQJ0aigCACABSRshBCADIAZrIQMMAQsLIAQgBSAEQQJ0aigCACABSWoFQQALNgJYDAELQQAgASADQXhxQQhqIgRrIgNBACABIANPGyIDQQN2IANBB3FBAEdqayEDIABB0ABqIQUDQCADRQ0BIAUgBEHc4sAAEHEgA0EBaiEDIARBCGohBAwACwALIAIgACgCoAFHBEAgAEEANgKoASAAIAJBAWs2AqwBCyAAIAI2AqABIAAgATYCnAEgABAPC/IBAgR/AX4jAEEQayIGJAACQCACIAIgA2oiA0sEQEEAIQIMAQtBACECIAQgBWpBAWtBACAEa3GtQQhBBCAFQQFGGyIHIAEoAgAiCEEBdCIJIAMgAyAJSRsiAyADIAdJGyIHrX4iCkIgiKcNACAKpyIDQYCAgIB4IARrSw0AIAQhAgJ/IAgEQCAFRQRAIAZBCGogBCADEIIBIAYoAggMAgsgASgCBCAFIAhsIAQgAxAiDAELIAYgBCADEIIBIAYoAgALIgVFDQAgASAHNgIAIAEgBTYCBEGBgICAeCECCyAAIAM2AgQgACACNgIAIAZBEGokAAuZAgEDfwJAAkACQCABIAJGDQAgACABIAJBoNXAABCGASgCBEUEQCAAIAEgAkEBa0Gw1cAAEIYBIgVCoICAgBA3AgAgBSAEKQAANwAIIAVBEGogBEEIai8AADsAAAsgAiADSw0BIAEgA0kNAiADQRRsIgYgAkEUbCICayEFIAAgAmohAiAEQQhqIQcDQCAFBEAgAkKggICAEDcCACACIAQpAAA3AAggAkEQaiAHLwAAOwAAIAVBFGshBSACQRRqIQIMAQsLIAEgA00NACAAIAZqIgAoAgQNACAAQqCAgIAQNwIAIAAgBCkAADcACCAAQRBqIARBCGovAAA7AAALDwsgAiADQcDVwAAQpAEACyADIAFBwNXAABCiAQALiwIBA38jAEEwayIDJAAgAyACNgIYIAMgATYCFAJAIANBFGoQUSIBQf//A3FBA0YEQCAAQQA2AgggAEKAgICAIDcCAAwBCyADQQhqQQRBAkECQZTIwAAQVyADKAIIIQIgAygCDCIEIAE7AQAgA0EBNgIkIAMgBDYCICADIAI2AhwgAyADKQIUNwIoQQIhAUEBIQIDQCADQShqEFEiBUH//wNxQQNGRQRAIAMoAhwgAkYEQCADQRxqIAJBAUECQQIQZCADKAIgIQQLIAEgBGogBTsBACADIAJBAWoiAjYCJCABQQJqIQEMAQsLIAAgAykCHDcCACAAQQhqIANBJGooAgA2AgALIANBMGokAAuFAgEDfyMAQTBrIgMkACADIAI2AhggAyABNgIUAkAgA0EUahBFQf//A3EiAUUEQCAAQQA2AgggAEKAgICAIDcCAAwBCyADQQhqQQRBAkECQZTIwAAQVyADKAIIIQIgAygCDCIEIAE7AQAgA0EBNgIkIAMgBDYCICADIAI2AhwgAyADKQIUNwIoQQIhAUEBIQIDQCADQShqEEVB//8DcSIFBEAgAygCHCACRgRAIANBHGogAkEBQQJBAhBkIAMoAiAhBAsgASAEaiAFOwEAIAMgAkEBaiICNgIkIAFBAmohAQwBCwsgACADKQIcNwIAIABBCGogA0EkaigCADYCAAsgA0EwaiQAC/0BAQJ/IwBBMGsiBCQAIARBEGogACgCGCADECkgBEEIaiAAEGggBCABIAIgBCgCCCAEKAIMQeDPwAAQYwJAIAQoAgQiAEUEQCAEKAIQIAQoAhRBFBCVAQwBCyAAQQR0IgFBEGshAyABIAQoAgAiAGoiAkEQayEBA0AgAwRAIARBIGoiBSAEQRBqEEsgACgCACAAQQRqKAIAQRQQlQEgAEEIaiAFQQhqKQIANwIAIAAgBCkCIDcCACADQRBrIQMgAEEQaiEADAEFIAEoAgAgAkEMaygCAEEUEJUBIAFBCGogBEEYaikCADcCACABIAQpAhA3AgALCwsgBEEwaiQAC4ACAQZ/IwBBIGsiAyQAIANBCGogAUEEQRRBkNXAABBXIANBADYCHCADIAMpAwg3AhQgA0EUaiABEIQBQQEgASABQQFNGyIGQQFrIQUgAygCGCADKAIcIgdBFGxqIQQgAkEIaiEIAkADQCAFBEAgBEKggICAEDcCACAEIAIpAAA3AAggBEEQaiAILwAAOwAAIAVBAWshBSAEQRRqIQQMAQUCQCAGIAdqIQUgAQ0AIAVBAWshBQwDCwsLIARCoICAgBA3AgAgBCACKQAANwAIIARBEGogAkEIai8AADsAAAsgACADKQIUNwIAIABBCGogBTYCACAAQQA6AAwgA0EgaiQAC9QBAQV/AkAgACgChAQiAUF/RwRAIAFBAWohAyABQSBJDQEgA0EgQdTbwAAQogEAC0HU28AAEHMACyAAQQRqIgEgA0EEdGohBQNAIAEgBUZFBEACQCABKAIAIgJBf0cEQCACQQZJDQEgAkEBakEGQaThwAAQogEAC0Gk4cAAEHMACyABQQRqIQQgAUEQaiACQQF0QQJqIQIDQCACBEAgBEEAOwEAIAJBAmshAiAEQQJqIQQMAQsLIAFBADYCACEBDAELCyAAQYCAxAA2AgAgAEEANgKEBAvzAQEBfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgASgCACIDQYCAxABGBEAgAkHg//8AcUHAAEYNASACQTdrDgIDBAILIAJBMEYNBiACQThGDQUgA0Eoaw4CCQoNCyAAIAJBQGsQPw8LIAJB4wBGDQIMCwsgAEEROgAADwsgAEEPOgAADwsgAEEkOgAAIAFBADoAiAQPCyADQSNrDgcBBwcHBwMGBwsgA0Eoaw4CAQQGCyAAQQ46AAAPCyAAQZoCOwEADwsgAEEaOwEADwsgAkEwRw0BCyAAQZkCOwEADwsgAEEZOwEADwsgAEEyOgAAC8MBAQJ/IwBBMGsiBCQAIARBDGogAiADECkgBCABNgIcIABBDGogARCDASABBEAgACgCECAAKAIUIgJBBHRqIQMCQANAAkAgBEEgaiIFIARBDGoQSyAEKAIgQYCAgIB4Rg0AIAMgBCkCIDcCACADQQhqIAVBCGopAgA3AgAgA0EQaiEDIAJBAWohAiABQQFrIgENAQwCCwtBgICAgHggBCgCJBCYAQsgACACNgIUCyAEKAIMIAQoAhBBFBCVASAEQTBqJAALhQEBA38jAEEgayIBJAAgAUEEaiAAEE0gASgCBCIALQBwQQFxBH8gACgCbCEDIAAoAmghACABQQA2AhAQACECIAFBADYCHCABIAI2AhggASABQRBqNgIUIAFBFGoiAiAAEHogAiADEHogASgCGAVBgAELIAEoAgggASgCDBCXASABQSBqJAALpwEBAn8jAEEgayICJAAgAiAAKAJoNgIMIAJBADoAHCACIAAoAlQiAzYCECACIAMgACgCWEECdGo2AhQgAiACQQxqNgIYIAACfwJAAkADQCABQQFrIgEEQCACQRBqEEANAQwCCwsgAkEQahBAIgENAQsgACgCnAEiA0EBayIADAELIAAoApwBIgNBAWshACABKAIACyIBIAAgASADSRs2AmggAkEgaiQAC6MBAQF/IwBBQGoiAyQAIANBHGogABBVIAMoAhwiACABIAIQIyADQShqIABB4ABqKAIAIABB5ABqKAIAECAgA0EQaiAAECEgAyADKQMQNwI0IANBCGogAygCLCADKAIwEFIgAygCDCEAIAMoAghBAXEEQCADIAA2AjwgA0E8akHswsAAEDwACyADQShqEGwgAygCICADKAIkEKEBIANBQGskACAAC5kBAQN/IAFBbGwhAiABQf////8DcSEDIAAgAUEUbGohAUEAIQACQANAIAJFDQECQCABQRRrIgQoAgBBIEcNACABQRBrKAIAQQFHDQAgAUEMay0AAEECRw0AIAFBCGstAABBAkcNACABQQRrLQAADQAgAUEDay0AAEEfcQ0AIAJBFGohAiAAQQFqIQAgBCEBDAELCyAAIQMLIAMLoAEBA38jAEEQayIFJAAgBUEIaiAAIAEgAkHgzsAAEF8gBSgCDCIGIAMgAiABayIHIAMgB0kbIgNPBEAgBiADayIGIAUoAgggBkEEdGogAxATIAAgASABIANqIAQQKCABBEAgACABQQFrQfDOwAAQWkEAOgAMCyAAIAJBAWtBgM/AABBaQQA6AAwgBUEQaiQADwtBzMnAAEEhQfDJwAAQZwALiwEBAn8jAEEQayICJAAgAkKAgICAwAA3AgQgAkEANgIMIAFBCGsiA0EAIAEgA08bIgFBA3YgAUEHcUEAR2ohAUEIIQMDQCABBEAgAkEEaiADQaziwAAQcSABQQFrIQEgA0EIaiEDDAEFIAAgAikCBDcCACAAQQhqIAJBDGooAgA2AgAgAkEQaiQACwsLjQEBBH8gASAAKAIAIAAoAggiBGtLBEAgACAEIAFBAUEBEGQgACgCCCEECyAAKAIEIARqIQVBASABIAFBAU0bIgZB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dGo2AgALRAEBfyABKAIAIgIgASgCBEYEQCAAQYCAgIB4NgIADwsgASACQRBqNgIAIAAgAikCADcCACAAQQhqIAJBCGopAgA3AgALOwEDfwNAIAJBFEZFBEAgACACaiIDKAIAIQQgAyABIAJqIgMoAgA2AgAgAyAENgIAIAJBBGohAgwBCwsLOwEDfwNAIAJBJEZFBEAgACACaiIDKAIAIQQgAyABIAJqIgMoAgA2AgAgAyAENgIAIAJBBGohAgwBCwsLQAECfyAAKAIAIAAoAgRBBBCVASAAKAIMIQEgACgCECIAKAIAIgIEQCABIAIRAgALIAAoAgQiAARAIAEgABA7Cws6AQF/AkAgAkF/RwRAIAJBAWohBCACQSBJDQEgBEEgIAMQogEACyADEHMACyAAIAQ2AgQgACABNgIACzgAAkAgAWlBAUcNAEGAgICAeCABayAASQ0AIAAEQEH4qsEALQAAGiABIAAQFSIBRQ0BCyABDwsACy0BAX8gASAAKAIATwR/IAAoAgQhAiAALQAIRQRAIAEgAk0PCyABIAJJBUEACwtwAQN/IAAoAgAiBCAAKAIIIgVGBEAjAEEQayIDJAAgA0EIaiAAIARBAUECQQgQJCADKAIIIgRBgYCAgHhHBEAgAygCDBogBCACEJ0BAAsgA0EQaiQACyAAIAVBAWo2AgggACgCBCAFQQN0aiABNwEACzQBAX8gACgCCCIDIAAoAgBGBEAgACACEGILIAAgA0EBajYCCCAAKAIEIANBAnRqIAE2AgALLgEBfyMAQRBrIgIkACACQQhqIAEgABCCASACKAIIIgAEQCACQRBqJAAgAA8LAAs3AQF/IwBBIGsiASQAIAFBADYCGCABQQE2AgwgAUGM6cAANgIIIAFCBDcCECABQQhqIAAQgAEACyUAIABBgQJPBEAgAEEeIABnIgBrdiAAQQF0a0E8ag8LIABBBHYLKwAgAiADSQRAIAMgAiAEEKMBAAsgACACIANrNgIEIAAgASADQRRsajYCAAsvAQF/IAAgAhCEASAAKAIEIAAoAggiA0EUbGogASACQRRsEBQaIAAgAiADajYCCAsrACABIANLBEAgASADIAQQowEACyAAIAMgAWs2AgQgACACIAFBBHRqNgIACy8AAkACQCADaUEBRw0AQYCAgIB4IANrIAFJDQAgACABIAMgAhAiIgANAQsACyAACywAA0AgAQRAIAAoAgAgAEEEaigCAEEUEJUBIAFBAWshASAAQRBqIQAMAQsLCzIBAX8gACgCCCECIAEgACgCAEECai0AABCRASEBIAAoAgQgAiABEAEgACACQQFqNgIICyoAIAAgACgCaCABaiIBIAAoApwBIgBBAWsgACABSxtBACABQQBOGzYCaAszAQJ/IAAgACgCqAEiAiAAKAKsAUEBaiIDIAEgAEGyAWoQMSAAKAJgIAAoAmQgAiADEEoLMwECfyAAIAAoAqgBIgIgACgCrAFBAWoiAyABIABBsgFqEBogACgCYCAAKAJkIAIgAxBKCyoAIAEgAkkEQEGkyMAAQSNBvMnAABBnAAsgAiAAIAJBFGxqIAEgAmsQFws1ACAAIAApAnQ3AmggACAAKQF8NwGyASAAIAAvAYYBOwG+ASAAQboBaiAAQYQBai8BADsBAAvsAQICfwF+IwBBEGsiAiQAIAJBATsBDCACIAE2AgggAiAANgIEIwBBEGsiASQAIAJBBGoiACkCACEEIAEgADYCDCABIAQ3AgQjAEEQayIAJAAgAUEEaiIBKAIAIgIoAgwhAwJAAkACQAJAIAIoAgQOAgABAgsgAw0BQQEhAkEAIQMMAgsgAw0AIAIoAgAiAigCBCEDIAIoAgAhAgwBCyAAQYCAgIB4NgIAIAAgATYCDCABKAIIIgEtAAkaIABBFSABLQAIEEEACyAAIAM2AgQgACACNgIAIAEoAggiAS0ACRogAEEWIAEtAAgQQQALKwECfwJAIAAoAgQgACgCCCIBEDAiAkUNACABIAJJDQAgACABIAJrNgIICwsmACACBEBB+KrBAC0AABogASACEBUhAQsgACACNgIEIAAgATYCAAsjAQF/IAEgACgCACAAKAIIIgJrSwRAIAAgAiABQQRBEBBkCwsjAQF/IAEgACgCACAAKAIIIgJrSwRAIAAgAiABQQRBFBBkCwslACAAQQE2AgQgACABKAIEIAEoAgBrQQR2IgE2AgggACABNgIACxsAIAEgAk0EQCACIAEgAxBCAAsgACACQRRsagsgACABIAJNBEAgAiABQeTjwAAQQgALIAAgAmpBAToAAAsbACABIAJNBEAgAiABIAMQQgALIAAgAkEEdGoLAwAACwMAAAsDAAALAwAACwMAAAsDAAALGgBB+KrBAC0AABpBBCAAEBUiAARAIAAPCwALAwAACxYAIAFBAXFFBEAgALgQBw8LIACtEAgLRAEBfyAAIAAoAgBBAWsiATYCACABRQRAIABBDGoQRwJAIABBf0YNACAAIAAoAgRBAWsiATYCBCABDQAgAEGcBhA7CwsLHgEBfyAAKAIQIgEgACgCFBB5IAAoAgwgAUEQEJUBCx4BAX8gACgCBCIBIAAoAggQeSAAKAIAIAFBEBCVAQsQACAABEAgASAAIAJsEDsLCxYAIABBEGoQTyAAKAIAIAAoAgQQmAELFAAgACAAKAIAQQFrNgIAIAEQkgELFwAgAEGAgICAeEcEQCAAIAFBFBCVAQsLEwAgAARADwtBpKnBAEEbEKgBAAsPACAAQYQBTwRAIAAQAgsLDQAgAQRAIAAgARA7CwsNACABBEAgACABEDsLCzwAIABFBEAjAEEgayIAJAAgAEEANgIYIABBATYCDCAAQdDEwAA2AgggAEIENwIQIABBCGogARCAAQALAAsRACAAKAIIIAAoAgBBAhCVAQsUACAAQQA2AgggAEKAgICAEDcCAAsSACAAIAFBkM3AABBaQQE6AAwLDgAgAEEANgIAIAEQkgELawEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQejpwAA2AgggA0ICNwIUIAMgA0EEaq1CgICAgIABhDcDKCADIAOtQoCAgICAAYQ3AyAgAyADQSBqNgIQIANBCGogAhCAAQALawEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQcjpwAA2AgggA0ICNwIUIAMgA0EEaq1CgICAgIABhDcDKCADIAOtQoCAgICAAYQ3AyAgAyADQSBqNgIQIANBCGogAhCAAQALawEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQZzqwAA2AgggA0ICNwIUIAMgA0EEaq1CgICAgIABhDcDKCADIAOtQoCAgICAAYQ3AyAgAyADQSBqNgIQIANBCGogAhCAAQALDgBB8OXAAEErIAAQZwALCwAgACMAaiQAIwALDgBBv6nBAEHPABCoAQALCQAgACABEAYACwwAIAAgASkCADcDAAsKACAAKAIAEJoBCw0AIABBgICAgHg2AgALCQAgAEEANgIACwYAIAAQTwsL0m0gAEGAgMAAC0AXAAAABAAAAAQAAAAYAAAAY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZUVycm9yAEG/icAACwF4AEHgicAACxD/////////////////////AEGGisAACw8BAAAAAAAgAAAAAAAAAAIAQcCKwAALIP//////////////////////////////////////////AEGki8AACwgQAAAAAAAAAQBBwLjAAAsC/wcAQdS4wAALBw8A////9f8AQYC5wAALFv///////////////////////////wMAQaC5wAALHf////////////////////////////////////8PAEH/ucAACxj8//////////////////////////////8AQaC6wAALPv//////////////////////////////////////////////////////////////////////////////////AEGMu8AACzj/////////////////////////////////////////////////////////////////////////fwBB4LvAAAvRAf////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8DAEHAvcAACyf//////////////////////////////////////////////////w8AQcDAwAALwSNzcmMvbGliLnJzAAABAA8A8BoPAAAAAADiJQAA5SUAAAAAAACw4AAAv+AAAAAAAAA8+wEAafsBAAAAAABq+wEAbPsBAAAAAACAJQAAnyUAAAAAAAAA+wEAO/sBAAAAAABhdHRlbXB0ZWQgdG8gdGFrZSBvd25lcnNoaXAgb2YgUnVzdCB2YWx1ZSB3aGlsZSBpdCB3YXMgYm9ycm93ZWRiZ3RleHRjb2RlcG9pbnRzcmFzdGVyX3N5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VVVVVRVRVVVVVVVVVQAAAAAAAEBVVVVVVVVVVVXVV1VVVVVVVVVVVVVVBQAAVFVVVVVVVVVVVVVVVVUVAABVVVFVVVVVVQUQAAABAVBVVVVVVVVVVVVVAVVVVVVV/////39VVVVQVQAAVVVVVVVVVVVVVQUAQcD8wAALmARAVVVVVVVVVVVVVVVVVUVUAQBUUQEAVVUFVVVVVVVVVVFVVVVVVVVVVVVVVVVVVUQBVFVRVRVVVQVVVVVVVVVFQVVVVVVVVVVVVVVVVVVVVEEVFFBRVVVVVVVVVVBRVVVBVVVVVVVVVVVVVVVVVVVUARBUUVVVVVUFVVVVVVUFAFFVVVVVVVVVVVVVVVVVVQQBVFVRVQFVVQVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVRVRVVVFVFVVVVVVVVVVVVVVUVFVVVVVVVVVVVVVVVVUEVAUEUFVBVVUFVVVVVVVVVVFVVVVVVVVVVVVVVVVVVRREBQRQVUFVVQVVVVVVVVVVUFVVVVVVVVVVVVVVVVUVRAFUVUFVFVVVBVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVFFQVEVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVEAQFVVFQBAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUQAAVFVVAEBVVVVVVVVVVVVVVVVVVVVVVVVQVVVVVVVVEVFVVVVVVVVVVVVVVVVVAQAAQAAEVQEAAAEAAAAAAAAAAFRVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUBBABBQVVVVVVVVVAFVFVVVQFUVVVFQVVRVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgBBgIHBAAuQA1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAVVVVVVVVVVVVVVVVQVUVVVVVVVVBVVVVVVVVVUFVVVVVVVVVQVVVVV///33//3XX3fW1ddVEABQVUUBAABVV1FVVVVVVVVVVVVVFQBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUFVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAVVFVFVQFVVVVVVVVVVVVVVVVVVVVVVVVVVVVXFRRVVVVVVVVVVVVVVVVVVUUAQEQBAFQVAAAUVVVVVVVVVVVVVVVVAAAAAAAAAEBVVVVVVVVVVVVVVVUAVVVVVVVVVVVVVVVVAABQBVVVVVVVVVVVVRUAAFVVVVBVVVVVVVVVBVAQUFVVVVVVVVVVVVVVVVVFUBFQVVVVVVVVVVVVVVVVVVUAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAAAAAEAFRRVVRQVVVVVVVVVVVVVVVVVVVVVVUAQaCEwQALkwhVVRUAVVVVVVVVBUBVVVVVVVVVVVVVVVUAAAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAAAAAAAAAABUVVVVVVVVVVVV9VVVVWlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf1X11VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV9VVVVVVVfVVVVVVVVVVVVVVVV////VVVVVVVVVVVVVdVVVVVV1VVVVV1V9VVVVVV9VV9VdVVXVVVVVXVV9V11XVVd9VVVVVVVVVVXVVVVVVVVVVV31d9VVVVVVVVVVVVVVVVVVVX9VVVVVVVVV1VV1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVXVV1VVVVVVVVVVVVVVVVddVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVQVVVVVVVVVVVVVVVVVVVV/f///////////////19V1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAAAAAAAAAAKqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVVVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpaVVVVVVVVqqqqqqqqqqqqqqqqqqoKAKqqqmqpqqqqqqqqqqqqqqqqqqqqqqqqqqpqgaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVqaqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqKqqqqqqqqqqqmqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVVZWqqqqqqqqqqqqqqmqqqqqqqqqqqqqqVVWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVVVVVVVVVVVVVVVVVVVVVaqqqlaqqqqqqqqqqqqqqqqqalVVVVVVVVVVVVVVVVVfVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFUAAAFBVVVVVVVVVBVVVVVVVVVVVVVVVVVVVVVVVVVVVUFVVVUVFFVVVVVVVVUFVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQVVVVVVVVAAAAAFBVRRVVVVVVVVVVVVUFAFBVVVVVVRUAAFBVVVWqqqqqqqqqVkBVVVVVVVVVVVVVVRUFUFBVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVQFAQUFVVRVVVVRVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVUEFFQFUVVVVVVVVVVVVVVQVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVFFVVVVVqqqqqqqqqqqqVVVVAAAAAABAFQBBv4zBAAvhDFVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQAAAPCqqlpVAAAAAKqqqqqqqqqqaqqqqqpqqlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRWpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpWVVVVVVVVVVVVVVVVVVUFVFVVVVVVVVVVVVVVVVVVVapqVVUAAFRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBUBVAUFVAFVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQVVVVVVVVdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVRVVVVVVVVVVVVVVVVVVVVVVVVVAVVVVVVVVVVVVVVVVVVVVVVVBQAAVFVVVVVVVVVVVVVVBVBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVQAAAEBVVVVVVVVVVVVVFFRVFVBVVVVVVVVVVVVVVRVAQVVFVVVVVVVVVVVVVVVVVVVVQFVVVVVVVVVVFQABAFRVVVVVVVVVVVVVVVVVVRVVVVVQVVVVVVVVVVVVVVVVBQBABVUBFFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVAEVUVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVFQBAVVVVVVVQVVVVVVVVVVVVVVVVVRVEVFVVVVUVVVVVBQBUAFRVVVVVVVVVVVVVVVVVVVVVAAAFRFVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVVFABEEQRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRUFUFUQVFVVVVVVVVBVVVVVVVVVVVVVVVVVVVVVVVVVVRUAQBFUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVRABBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAQUQAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFQAAQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFUVBBFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUABVVUVVVVVVVVVQEAQFVVVVVVVVVVVRUABEBVFVVVAUABVVVVVVVVVVVVVQAAAABAUFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAQAAQVVVVVVVVVVVVVVVVVVVVVVVVVVUFAAAAAAAFAARBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAUBFEAAAVVVVVVVVVVVVVVVVVVVVVVVVUBFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVFVVQFVVVVVVVVVVVVVVVQVAVURVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBUAAABQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAVFVVVVVVVVVVVVVVVVVVAEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVRVAVVVVVVVVVVVVVVVVVVVVVVVVVapUVVVaVVVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVVWqqqqqqqqqqqqqqqqqqqqqqqqqqqpaVVVVVVVVVVVVVaqqVlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqpqmmqqqqqqqqqqmpVVVVlVVVVVVVVVWpZVVVVqlVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVVVVVVVVVVUEAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAQauZwQALdVAAAAAAAEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVURUAUAAAAAQAEAVVVVVVVVVQVQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBVRVVVVVVVVVVVVVVVVVVQBBrZrBAAsCQBUAQbuawQALxQZUVVFVVVVUVVVVVRUAAQAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVAEAAAAAAFAAQBEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVQBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQBAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAEBVVVVVVVVVVVVVVVVVVVdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV1VVVVVVVVVVVVVVVVVVVVXX9/39VVVVVVVVVVVVVVVVVVVVVVVX1////////blVVVaqquqqqqqrq+r+/VaqqVlVfVVVVqlpVVVVVVVX//////////1dVVf3/3///////////////////////9///////VVVV/////////////3/V/1VVVf////9XV///////////////////////f/f/////////////////////////////////////////////////////////////1////////////////////19VVdV/////////VVVVVXVVVVVVVVV9VVVVV1VVVVVVVVVVVVVVVVVVVVVVVVVV1f///////////////////////////1VVVVVVVVVVVVVVVf//////////////////////X1VXf/1V/1VV1VdV//9XVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV////VVdVVVVVVVX//////////////3///9//////////////////////////////////////////////////////////////VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf///1f//1dV///////////////f/19V9f///1X//1dV//9XVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpaVVVVVVVVVVVZllVhqqVZqlVVVVVVlVVVVVVVVVWVVVUAQY6hwQALAQMAQZyhwQALiQlVVVVVVZVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRUAlmpaWmqqBUCmWZVlVVVVVVVVVVUAAAAAVVZVValWVVVVVVVVVVVVVlVVVVVVVVVVAAAAAAAAAABUVVVVlVlZVVVlVVVpVVVVVVVVVVVVVVWVVpVqqqqqVaqqWlVVVVlVqqqqVVVVVWVVVVpVVVVVpWVWVVVVlVVVVVVVVaaWmpZZWWWplqqqZlWqVVpZVVpWZVVVVWqqpaVaVVVVpapaVVVZWVVVWVVVVVVVlVVVVVVVVVVVVVVVVVVVVVVVVVVVZVX1VVVVaVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVaqqqqqqqqqqqlVVVaqqqqqlWlVVmqpaVaWlVVpapZalWlVVVaVaVZVVVVV9VWlZpVVfVWZVVVVVVVVVVWZV////VVVVmppqmlVVVdVVVVVV1VVVpV1V9VVVVVW9Va+quqqrqqqaVbqq+q66rlVd9VVVVVVVVVVXVVVVVVlVVVV31d9VVVVVVVVVpaqqVVVVVVVV1VdVVVVVVVVVVVVVVVVXrVpVVVVVVVVVVVWqqqqqqqqqaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgAAAMCqqlpVAAAAAKqqqqqqqqqqaqqqqqpqqlVVVVVVVVVVVVVVVQVUVVVVVVVVVVVVVVVVVVVVqmpVVQAAVFmqqmpVqqqqqqqqqlqqqqqqqqqqqqqqqqqqqlpVqqqqqqqqqrr+/7+qqqqqVlVVVVVVVVVVVVVVVVX1////////L25peC9zdG9yZS8yOGh5emZsMzM4a3M0YW1oYTd2cHBubGJxMXMxbnFhdi1ydXN0LWRlZmF1bHQtMS44NS4wL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi93YXNtLWJpbmRnZW4tMC4yLjEwNi9zcmMvY29udmVydC9zbGljZXMucnMvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi93YXNtLWJpbmRnZW4tMC4yLjEwNi9zcmMvZXh0ZXJucmVmLnJzHVQQAGcAAAB/AAAAEQAAAB1UEABnAAAAjAAAABEAAABudWxsIHBvaW50ZXIgcGFzc2VkIHRvIHJ1c3RyZWN1cnNpdmUgdXNlIG9mIGFuIG9iamVjdCBkZXRlY3RlZCB3aGljaCB3b3VsZCBsZWFkIHRvIHVuc2FmZSBhbGlhc2luZyBpbiBydXN0SnNWYWx1ZSgpAA5VEAAIAAAAFlUQAAEAQaiqwQALAQQASAlwcm9kdWNlcnMBDHByb2Nlc3NlZC1ieQIGd2FscnVzBjAuMjQuNAx3YXNtLWJpbmRnZW4TMC4yLjEwNiAoMTE4MzFmYjg5KQ==\");\n\nasync function init(options) {\n await __wbg_init({\n module_or_path: await options.module,\n memory: options.memory,\n });\n return exports$1;\n }\n\nconst vt = init({\n module: vtWasmModule\n}); // trigger async loading of wasm\nconst memory = vt.then(wasm => wasm.default()).then(d => d.memory);\nclass Vt {\n static async build(cols, rows, boldIsBright, logger) {\n return new Vt(await vt, await memory, logger, cols, rows, boldIsBright);\n }\n constructor(wasm, memory, logger, cols, rows, boldIsBright) {\n this.wasm = wasm;\n this.memory = memory;\n this.logger = logger;\n this.cols = cols;\n this.rows = rows;\n this.boldIsBright = boldIsBright;\n this.vt = wasm.create(cols, rows, 100, boldIsBright);\n }\n feed(data) {\n return this.vt.feed(data);\n }\n reset(cols, rows, init = undefined) {\n this.logger.debug(`vt: reset (${cols}x${rows})`);\n this.vt = this.wasm.create(cols, rows, 100, this.boldIsBright);\n this.cols = cols;\n this.rows = rows;\n if (init !== undefined && init !== \"\") {\n this.vt.feed(init);\n }\n return Array.from({\n length: rows\n }, (_, i) => i);\n }\n resize(cols, rows) {\n if (cols === this.cols && rows === this.rows) return;\n this.logger.debug(`vt: resize (${cols}x${rows})`);\n const changedRows = this.vt.resize(cols, rows);\n this.cols = cols;\n this.rows = rows;\n return changedRows;\n }\n getLine(n, cursorOn) {\n return this.vt.getLine(n, cursorOn);\n }\n getDataView([ptr, len], size) {\n return new DataView(this.memory.buffer, ptr, len * size);\n }\n getUint32Array([ptr, len]) {\n return new Uint32Array(this.memory.buffer, ptr, len);\n }\n getCursor() {\n const cursor = this.vt.getCursor();\n if (cursor) {\n return {\n col: cursor[0],\n row: cursor[1],\n visible: true\n };\n }\n return {\n col: 0,\n row: 0,\n visible: false\n };\n }\n}\n\nconst _tmpl$$f = /*#__PURE__*/template(`<div class=\"ap-term\"><canvas></canvas><svg class=\"ap-term-symbols\" xmlns=\"http://www.w3.org/2000/svg\" preserveAspectRatio=\"none\" width=\"100%\" height=\"100%\" aria-hidden=\"true\"><defs></defs><g></g></svg><pre class=\"ap-term-text\" aria-live=\"off\" tabindex=\"0\"></pre></div>`, 12);\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\nconst BLOCK_H_RES = 8;\nconst BLOCK_V_RES = 24;\nconst BOLD_MASK = 1;\nconst FAINT_MASK = 1 << 1;\nconst ITALIC_MASK = 1 << 2;\nconst UNDERLINE_MASK = 1 << 3;\nconst STRIKETHROUGH_MASK = 1 << 4;\nconst BLINK_MASK = 1 << 5;\nvar Terminal = props => {\n const core = props.core;\n const textRowPool = [];\n const vectorSymbolRowPool = [];\n const vectorSymbolUsePool = [];\n const vectorSymbolDefCache = new Set();\n const colorsCache = new Map();\n const attrClassCache = new Map();\n const vtReady = Vt.build(props.cols, props.rows, props.boldIsBright, props.logger);\n let vt;\n const [size, setSize] = createSignal({\n cols: props.cols,\n rows: props.rows\n }, {\n equals: (newVal, oldVal) => newVal.cols === oldVal.cols && newVal.rows === oldVal.rows\n });\n const [theme, setTheme] = createSignal(buildTheme(FALLBACK_THEME, props.adaptivePalette));\n const lineHeight = () => props.lineHeight ?? 1.3333333333;\n const [blinkOn, setBlinkOn] = createSignal(true);\n const cursorOn = createMemo(() => {\n if (props.cursorMode === \"hidden\") return false;\n if (props.cursorMode === \"steady\") return true;\n return blinkOn() || cursorHold;\n });\n const style$1 = createMemo(() => {\n return {\n width: `${size().cols}ch`,\n height: `${lineHeight() * size().rows}em`,\n \"font-size\": `${(props.scale || 1.0) * 100}%`,\n \"--term-line-height\": `${lineHeight()}em`,\n \"--term-cols\": size().cols,\n \"--term-rows\": size().rows\n };\n });\n let cursor = {\n col: 0,\n row: 0,\n visible: false\n };\n let pendingChanges = {\n size: undefined,\n theme: undefined,\n rows: new Set()\n };\n let el;\n let canvasEl;\n let canvasCtx;\n let textEl;\n let vectorSymbolsEl;\n let vectorSymbolDefsEl;\n let vectorSymbolRowsEl;\n let frameRequestId;\n let blinkIntervalId;\n let cssTheme;\n let cursorHold = false;\n onMount(() => {\n setupCanvas();\n setInitialTheme();\n adjustTextRowNodeCount(size().rows);\n adjustSymbolRowNodeCount(size().rows);\n vtReady.then(vt_ => {\n vt = vt_;\n core.addEventListener(\"reset\", onVtReset);\n core.addEventListener(\"resize\", onVtResize);\n core.addEventListener(\"output\", onVtOutput);\n props.onReady?.();\n });\n });\n onCleanup(() => {\n core.removeEventListener(\"reset\", onVtReset);\n core.removeEventListener(\"resize\", onVtResize);\n core.removeEventListener(\"output\", onVtOutput);\n clearInterval(blinkIntervalId);\n cancelAnimationFrame(frameRequestId);\n });\n createEffect(() => {\n if (props.blinking && blinkIntervalId === undefined) {\n blinkIntervalId = setInterval(toggleBlink, 600);\n } else {\n clearInterval(blinkIntervalId);\n blinkIntervalId = undefined;\n setBlinkOn(true);\n }\n });\n createEffect(() => {\n cursorOn();\n if (cursor.visible) {\n pendingChanges.rows.add(cursor.row);\n scheduleRender();\n }\n });\n function setupCanvas() {\n canvasCtx = canvasEl.getContext(\"2d\");\n if (!canvasCtx) throw new Error(\"2D ctx not available\");\n const {\n cols,\n rows\n } = size();\n canvasEl.width = cols * BLOCK_H_RES;\n canvasEl.height = rows * BLOCK_V_RES;\n canvasEl.style.imageRendering = \"pixelated\";\n canvasCtx.imageSmoothingEnabled = false;\n }\n function resizeCanvas({\n cols,\n rows\n }) {\n canvasEl.width = cols * BLOCK_H_RES;\n canvasEl.height = rows * BLOCK_V_RES;\n canvasCtx.imageSmoothingEnabled = false;\n }\n function setInitialTheme() {\n cssTheme = getCssTheme(el);\n pendingChanges.theme = cssTheme;\n }\n function onVtReset({\n size,\n theme,\n init\n }) {\n const changedRows = vt.reset(size.cols, size.rows, init);\n onVtUpdate({\n size,\n theme,\n changedRows\n });\n }\n function onVtResize(size) {\n const changedRows = vt.resize(size.cols, size.rows);\n if (changedRows === undefined) return;\n onVtUpdate({\n size,\n changedRows\n });\n }\n function onVtOutput(data) {\n let changedRows;\n if (Array.isArray(data)) {\n changedRows = new Set();\n for (const d of data) {\n for (const row of vt.feed(d)) {\n changedRows.add(row);\n }\n }\n } else {\n changedRows = vt.feed(data);\n }\n onVtUpdate({\n changedRows\n });\n }\n function onVtUpdate({\n size: newSize,\n theme,\n changedRows\n }) {\n let activity = false;\n if (changedRows !== undefined) {\n for (const row of changedRows) {\n pendingChanges.rows.add(row);\n cursorHold = true;\n activity = true;\n }\n }\n if (theme !== undefined && props.preferEmbeddedTheme) {\n pendingChanges.theme = theme;\n for (let row = 0; row < size().rows; row++) {\n pendingChanges.rows.add(row);\n }\n }\n const newCursor = vt.getCursor();\n if (newCursor.visible != cursor.visible || newCursor.col != cursor.col || newCursor.row != cursor.row) {\n if (cursor.visible) {\n pendingChanges.rows.add(cursor.row);\n }\n if (newCursor.visible) {\n pendingChanges.rows.add(newCursor.row);\n }\n cursor = newCursor;\n cursorHold = true;\n activity = true;\n }\n if (newSize !== undefined) {\n pendingChanges.size = newSize;\n for (const row of pendingChanges.rows) {\n if (row >= newSize.rows) {\n pendingChanges.rows.delete(row);\n }\n }\n }\n if (activity && cursor.visible) {\n pendingChanges.rows.add(cursor.row);\n }\n scheduleRender();\n }\n function toggleBlink() {\n setBlinkOn(blink => {\n if (!blink) cursorHold = false;\n return !blink;\n });\n }\n function scheduleRender() {\n if (frameRequestId === undefined) {\n frameRequestId = requestAnimationFrame(render);\n }\n }\n function render() {\n frameRequestId = undefined;\n const {\n size: newSize,\n theme: newTheme,\n rows\n } = pendingChanges;\n batch(function () {\n if (newSize !== undefined) {\n resizeCanvas(newSize);\n adjustTextRowNodeCount(newSize.rows);\n adjustSymbolRowNodeCount(newSize.rows);\n setSize(newSize);\n }\n if (newTheme !== undefined) {\n if (newTheme === null) {\n setTheme(buildTheme(cssTheme, props.adaptivePalette));\n } else {\n setTheme(buildTheme(newTheme, props.adaptivePalette));\n }\n colorsCache.clear();\n }\n const theme_ = theme();\n const cursorOn_ = cursorOn();\n for (const r of rows) {\n renderRow(r, theme_, cursorOn_);\n }\n });\n pendingChanges.size = undefined;\n pendingChanges.theme = undefined;\n pendingChanges.rows.clear();\n props.stats.renders += 1;\n }\n function renderRow(rowIndex, theme, cursorOn) {\n const line = vt.getLine(rowIndex, cursorOn);\n clearCanvasRow(rowIndex);\n renderRowBg(rowIndex, line.bg, theme);\n renderRowRasterSymbols(rowIndex, line.raster_symbols, theme);\n renderRowVectorSymbols(rowIndex, line.vector_symbols, theme);\n renderRowText(rowIndex, line.text, line.codepoints, theme);\n }\n function clearCanvasRow(rowIndex) {\n canvasCtx.clearRect(0, rowIndex * BLOCK_V_RES, size().cols * BLOCK_H_RES, BLOCK_V_RES);\n }\n function renderRowBg(rowIndex, spans, theme) {\n // The memory layout of a BgSpan must follow one defined in lib.rs (see the assertions at the bottom)\n const view = vt.getDataView(spans, 8);\n const y = rowIndex * BLOCK_V_RES;\n let i = 0;\n while (i < view.byteLength) {\n const column = view.getUint16(i + 0, true);\n const width = view.getUint16(i + 2, true);\n const color = getColor(view, i + 4, theme);\n i += 8;\n canvasCtx.fillStyle = color;\n canvasCtx.fillRect(column * BLOCK_H_RES, y, width * BLOCK_H_RES, BLOCK_V_RES);\n }\n }\n function renderRowRasterSymbols(rowIndex, symbols, theme) {\n // The memory layout of a RasterSymbol must follow one defined in lib.rs (see the assertions at the bottom)\n const view = vt.getDataView(symbols, 12);\n const y = rowIndex * BLOCK_V_RES;\n let i = 0;\n while (i < view.byteLength) {\n const column = view.getUint16(i + 0, true);\n const codepoint = view.getUint32(i + 4, true);\n const color = getColor(view, i + 8, theme) || theme.fg;\n i += 12;\n canvasCtx.fillStyle = color;\n drawBlockGlyph(canvasCtx, codepoint, column * BLOCK_H_RES, y);\n }\n }\n function renderRowVectorSymbols(rowIndex, symbols, theme) {\n // The memory layout of a VectorSymbol must follow one defined in lib.rs (see the assertions at the bottom)\n const view = vt.getDataView(symbols, 16);\n const frag = document.createDocumentFragment();\n const symbolRow = vectorSymbolRowsEl.children[rowIndex];\n let i = 0;\n while (i < view.byteLength) {\n const column = view.getUint16(i + 0, true);\n const codepoint = view.getUint32(i + 4, true);\n const color = getColor(view, i + 8, theme);\n const attrs = view.getUint8(i + 12);\n i += 16;\n const blink = (attrs & BLINK_MASK) !== 0;\n const el = createVectorSymbolNode(codepoint, column, color, blink);\n if (el) {\n frag.appendChild(el);\n }\n }\n recycleVectorSymbolUses(symbolRow);\n symbolRow.replaceChildren(frag);\n }\n function renderRowText(rowIndex, spans, codepoints, theme) {\n // The memory layout of a TextSpan must follow one defined in lib.rs (see the assertions at the bottom)\n const spansView = vt.getDataView(spans, 12);\n const codepointsView = vt.getUint32Array(codepoints);\n const frag = document.createDocumentFragment();\n let i = 0;\n while (i < spansView.byteLength) {\n const column = spansView.getUint16(i + 0, true);\n const codepointsStart = spansView.getUint16(i + 2, true);\n const len = spansView.getUint16(i + 4, true);\n const color = getColor(spansView, i + 6, theme);\n const attrs = spansView.getUint8(i + 10);\n const text = String.fromCodePoint(...codepointsView.subarray(codepointsStart, codepointsStart + len));\n i += 12;\n const el = document.createElement(\"span\");\n const style = el.style;\n style.setProperty(\"--offset\", column);\n el.textContent = text;\n if (color) {\n style.color = color;\n }\n const cls = getAttrClass(attrs);\n if (cls !== null) {\n el.className = cls;\n }\n frag.appendChild(el);\n }\n textEl.children[rowIndex].replaceChildren(frag);\n }\n function getAttrClass(attrs) {\n let c = attrClassCache.get(attrs);\n if (c === undefined) {\n c = buildAttrClass(attrs);\n attrClassCache.set(attrs, c);\n }\n return c;\n }\n function buildAttrClass(attrs) {\n let cls = \"\";\n if ((attrs & BOLD_MASK) !== 0) {\n cls += \"ap-bold \";\n } else if ((attrs & FAINT_MASK) !== 0) {\n cls += \"ap-faint \";\n }\n if ((attrs & ITALIC_MASK) !== 0) {\n cls += \"ap-italic \";\n }\n if ((attrs & UNDERLINE_MASK) !== 0) {\n cls += \"ap-underline \";\n }\n if ((attrs & STRIKETHROUGH_MASK) !== 0) {\n cls += \"ap-strike \";\n }\n if ((attrs & BLINK_MASK) !== 0) {\n cls += \"ap-blink \";\n }\n return cls === \"\" ? null : cls;\n }\n function getColor(view, offset, theme) {\n const tag = view.getUint8(offset);\n if (tag === 0) {\n return null;\n } else if (tag === 1) {\n return theme.fg;\n } else if (tag === 2) {\n return theme.bg;\n } else if (tag === 3) {\n return theme.palette[view.getUint8(offset + 1)];\n } else if (tag === 4) {\n const key = view.getUint32(offset, true);\n let c = colorsCache.get(key);\n if (c === undefined) {\n const r = view.getUint8(offset + 1);\n const g = view.getUint8(offset + 2);\n const b = view.getUint8(offset + 3);\n c = \"rgb(\" + r + \",\" + g + \",\" + b + \")\";\n colorsCache.set(key, c);\n }\n return c;\n } else {\n throw new Error(`invalid color tag: ${tag}`);\n }\n }\n function adjustTextRowNodeCount(rows) {\n let r = textEl.children.length;\n if (r < rows) {\n const frag = document.createDocumentFragment();\n while (r < rows) {\n const row = getNewRow();\n row.style.setProperty(\"--row\", r);\n frag.appendChild(row);\n r += 1;\n }\n textEl.appendChild(frag);\n }\n while (textEl.children.length > rows) {\n const row = textEl.lastElementChild;\n textEl.removeChild(row);\n textRowPool.push(row);\n }\n }\n function adjustSymbolRowNodeCount(rows) {\n let r = vectorSymbolRowsEl.children.length;\n if (r < rows) {\n const frag = document.createDocumentFragment();\n while (r < rows) {\n const row = getNewSymbolRow();\n row.setAttribute(\"transform\", `translate(0 ${r})`);\n frag.appendChild(row);\n r += 1;\n }\n vectorSymbolRowsEl.appendChild(frag);\n }\n while (vectorSymbolRowsEl.children.length > rows) {\n const row = vectorSymbolRowsEl.lastElementChild;\n vectorSymbolRowsEl.removeChild(row);\n vectorSymbolRowPool.push(row);\n }\n }\n function getNewRow() {\n let row = textRowPool.pop();\n if (row === undefined) {\n row = document.createElement(\"span\");\n row.className = \"ap-line\";\n }\n return row;\n }\n function getNewSymbolRow() {\n let row = vectorSymbolRowPool.pop();\n if (row === undefined) {\n row = document.createElementNS(SVG_NS, \"g\");\n row.setAttribute(\"class\", \"ap-symbol-line\");\n }\n return row;\n }\n function createVectorSymbolNode(codepoint, column, fg, blink) {\n if (!ensureVectorSymbolDef(codepoint)) {\n return null;\n }\n const isPowerline = POWERLINE_SYMBOLS.has(codepoint);\n const symbolX = isPowerline ? column - POWERLINE_SYMBOL_NUDGE : column;\n const symbolWidth = isPowerline ? 1 + POWERLINE_SYMBOL_NUDGE * 2 : 1;\n const node = getVectorSymbolUse();\n node.setAttribute(\"href\", `#sym-${codepoint}`);\n node.setAttribute(\"x\", symbolX);\n node.setAttribute(\"y\", 0);\n node.setAttribute(\"width\", symbolWidth);\n node.setAttribute(\"height\", \"1\");\n if (fg) {\n node.style.setProperty(\"color\", fg);\n } else {\n node.style.removeProperty(\"color\");\n }\n if (blink) {\n node.classList.add(\"ap-blink\");\n } else {\n node.classList.remove(\"ap-blink\");\n }\n return node;\n }\n function recycleVectorSymbolUses(row) {\n while (row.firstChild) {\n const child = row.firstChild;\n row.removeChild(child);\n vectorSymbolUsePool.push(child);\n }\n }\n function getVectorSymbolUse() {\n let node = vectorSymbolUsePool.pop();\n if (node === undefined) {\n node = document.createElementNS(SVG_NS, \"use\");\n }\n return node;\n }\n function ensureVectorSymbolDef(codepoint) {\n const content = getVectorSymbolDef(codepoint);\n if (!content) {\n return false;\n }\n if (vectorSymbolDefCache.has(codepoint)) {\n return true;\n }\n const id = `sym-${codepoint}`;\n const symbol = document.createElementNS(SVG_NS, \"symbol\");\n symbol.setAttribute(\"id\", id);\n symbol.setAttribute(\"viewBox\", \"0 0 1 1\");\n symbol.setAttribute(\"preserveAspectRatio\", \"none\");\n symbol.setAttribute(\"overflow\", \"visible\");\n symbol.innerHTML = content;\n vectorSymbolDefsEl.appendChild(symbol);\n vectorSymbolDefCache.add(codepoint);\n return true;\n }\n return (() => {\n const _el$ = _tmpl$$f.cloneNode(true),\n _el$2 = _el$.firstChild,\n _el$3 = _el$2.nextSibling,\n _el$4 = _el$3.firstChild,\n _el$5 = _el$4.nextSibling,\n _el$6 = _el$3.nextSibling;\n const _ref$ = el;\n typeof _ref$ === \"function\" ? use(_ref$, _el$) : el = _el$;\n const _ref$2 = canvasEl;\n typeof _ref$2 === \"function\" ? use(_ref$2, _el$2) : canvasEl = _el$2;\n const _ref$3 = vectorSymbolsEl;\n typeof _ref$3 === \"function\" ? use(_ref$3, _el$3) : vectorSymbolsEl = _el$3;\n const _ref$4 = vectorSymbolDefsEl;\n typeof _ref$4 === \"function\" ? use(_ref$4, _el$4) : vectorSymbolDefsEl = _el$4;\n const _ref$5 = vectorSymbolRowsEl;\n typeof _ref$5 === \"function\" ? use(_ref$5, _el$5) : vectorSymbolRowsEl = _el$5;\n const _ref$6 = textEl;\n typeof _ref$6 === \"function\" ? use(_ref$6, _el$6) : textEl = _el$6;\n createRenderEffect(_p$ => {\n const _v$ = style$1(),\n _v$2 = `0 0 ${size().cols} ${size().rows}`,\n _v$3 = !!blinkOn(),\n _v$4 = !!blinkOn();\n _p$._v$ = style(_el$, _v$, _p$._v$);\n _v$2 !== _p$._v$2 && setAttribute(_el$3, \"viewBox\", _p$._v$2 = _v$2);\n _v$3 !== _p$._v$3 && _el$3.classList.toggle(\"ap-blink\", _p$._v$3 = _v$3);\n _v$4 !== _p$._v$4 && _el$6.classList.toggle(\"ap-blink\", _p$._v$4 = _v$4);\n return _p$;\n }, {\n _v$: undefined,\n _v$2: undefined,\n _v$3: undefined,\n _v$4: undefined\n });\n return _el$;\n })();\n};\nfunction buildTheme(theme, adaptivePalette = false) {\n return {\n fg: theme.foreground,\n bg: theme.background,\n palette: adaptivePalette ? generate256Palette(theme.palette, theme.background, theme.foreground) : generateFixed256Palette(theme.palette)\n };\n}\nfunction getCssTheme(el) {\n const style = getComputedStyle(el);\n const foreground = normalizeHexColor(style.getPropertyValue(\"--term-color-foreground\"), FALLBACK_THEME.foreground);\n const background = normalizeHexColor(style.getPropertyValue(\"--term-color-background\"), FALLBACK_THEME.background);\n const palette = [];\n for (let i = 0; i < 16; i++) {\n const fallback = i >= 8 ? palette[i - 8] : FALLBACK_THEME.palette[i];\n palette[i] = normalizeHexColor(style.getPropertyValue(`--term-color-${i}`), fallback);\n }\n return {\n foreground,\n background,\n palette\n };\n}\nfunction generate256Palette(base16, bg, fg) {\n const bgLab = hexToOklab(bg);\n const fgLab = hexToOklab(fg);\n const c100 = hexToOklab(base16[1]);\n const c010 = hexToOklab(base16[2]);\n const c110 = hexToOklab(base16[3]);\n const c001 = hexToOklab(base16[4]);\n const c101 = hexToOklab(base16[5]);\n const c011 = hexToOklab(base16[6]);\n const palette = [...base16];\n\n // 216 color cube range\n\n for (let r = 0; r < 6; r += 1) {\n const tR = r / 5;\n const c0 = lerpOklab(tR, bgLab, c100);\n const c1 = lerpOklab(tR, c010, c110);\n const c2 = lerpOklab(tR, c001, c101);\n const c3 = lerpOklab(tR, c011, fgLab);\n for (let g = 0; g < 6; g += 1) {\n const tG = g / 5;\n const c4 = lerpOklab(tG, c0, c1);\n const c5 = lerpOklab(tG, c2, c3);\n for (let b = 0; b < 6; b += 1) {\n const tB = b / 5;\n const c6 = lerpOklab(tB, c4, c5);\n palette.push(oklabToHex(c6));\n }\n }\n }\n\n // grayscale range\n\n for (let i = 0; i < 24; i += 1) {\n const t = (i + 1) / 25;\n palette.push(oklabToHex(lerpOklab(t, bgLab, fgLab)));\n }\n return palette;\n}\nfunction generateFixed256Palette(base16) {\n const palette = [...base16];\n const levels = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];\n\n // 216 color cube range\n\n for (let r = 0; r < 6; r += 1) {\n for (let g = 0; g < 6; g += 1) {\n for (let b = 0; b < 6; b += 1) {\n palette.push(rgbToHex(levels[r], levels[g], levels[b]));\n }\n }\n }\n\n // grayscale range\n\n for (let i = 0; i < 24; i += 1) {\n const level = 8 + i * 10;\n palette.push(rgbToHex(level, level, level));\n }\n return palette;\n}\nfunction drawBlockGlyph(ctx, codepoint, x, y) {\n const unitX = BLOCK_H_RES / 8;\n const unitY = BLOCK_V_RES / 8;\n const halfX = BLOCK_H_RES / 2;\n const halfY = BLOCK_V_RES / 2;\n const sextantX = BLOCK_H_RES / 2;\n const sextantY = BLOCK_V_RES / 3;\n switch (codepoint) {\n case 0x2503:\n // box drawings heavy vertical (https://symbl.cc/en/2503/)\n ctx.fillRect(x + 3, y, 2, BLOCK_V_RES);\n break;\n case 0x2579:\n // box drawings heavy up (https://symbl.cc/en/2579/)\n ctx.fillRect(x + 3, y, 2, halfY);\n break;\n case 0x257b:\n // box drawings heavy down (https://symbl.cc/en/257B/)\n ctx.fillRect(x + 3, y + halfY, 2, halfY);\n break;\n case 0x2580:\n // upper half block (https://symbl.cc/en/2580/)\n ctx.fillRect(x, y, BLOCK_H_RES, halfY);\n break;\n case 0x2581:\n // lower one eighth block (https://symbl.cc/en/2581/)\n ctx.fillRect(x, y + unitY * 7, BLOCK_H_RES, unitY);\n break;\n case 0x2582:\n // lower one quarter block (https://symbl.cc/en/2582/)\n ctx.fillRect(x, y + unitY * 6, BLOCK_H_RES, unitY * 2);\n break;\n case 0x2583:\n // lower three eighths block (https://symbl.cc/en/2583/)\n ctx.fillRect(x, y + unitY * 5, BLOCK_H_RES, unitY * 3);\n break;\n case 0x2584:\n // lower half block (https://symbl.cc/en/2584/)\n ctx.fillRect(x, y + halfY, BLOCK_H_RES, halfY);\n break;\n case 0x2585:\n // lower five eighths block (https://symbl.cc/en/2585/)\n ctx.fillRect(x, y + unitY * 3, BLOCK_H_RES, unitY * 5);\n break;\n case 0x2586:\n // lower three quarters block (https://symbl.cc/en/2586/)\n ctx.fillRect(x, y + unitY * 2, BLOCK_H_RES, unitY * 6);\n break;\n case 0x2587:\n // lower seven eighths block (https://symbl.cc/en/2587/)\n ctx.fillRect(x, y + unitY, BLOCK_H_RES, unitY * 7);\n break;\n case 0x2588:\n // full block (https://symbl.cc/en/2588/)\n ctx.fillRect(x, y, BLOCK_H_RES, BLOCK_V_RES);\n break;\n case 0x25a0:\n // black square (https://symbl.cc/en/25A0/)\n ctx.fillRect(x, y + unitY * 2, BLOCK_H_RES, unitY * 4);\n break;\n case 0x2589:\n // left seven eighths block (https://symbl.cc/en/2589/)\n ctx.fillRect(x, y, unitX * 7, BLOCK_V_RES);\n break;\n case 0x258a:\n // left three quarters block (https://symbl.cc/en/258A/)\n ctx.fillRect(x, y, unitX * 6, BLOCK_V_RES);\n break;\n case 0x258b:\n // left five eighths block (https://symbl.cc/en/258B/)\n ctx.fillRect(x, y, unitX * 5, BLOCK_V_RES);\n break;\n case 0x258c:\n // left half block (https://symbl.cc/en/258C/)\n ctx.fillRect(x, y, halfX, BLOCK_V_RES);\n break;\n case 0x258d:\n // left three eighths block (https://symbl.cc/en/258D/)\n ctx.fillRect(x, y, unitX * 3, BLOCK_V_RES);\n break;\n case 0x258e:\n // left one quarter block (https://symbl.cc/en/258E/)\n ctx.fillRect(x, y, unitX * 2, BLOCK_V_RES);\n break;\n case 0x258f:\n // left one eighth block (https://symbl.cc/en/258F/)\n ctx.fillRect(x, y, unitX, BLOCK_V_RES);\n break;\n case 0x2590:\n // right half block (https://symbl.cc/en/2590/)\n ctx.fillRect(x + halfX, y, halfX, BLOCK_V_RES);\n break;\n case 0x2591:\n // light shade (https://symbl.cc/en/2591/)\n ctx.save();\n ctx.globalAlpha = 0.25;\n ctx.fillRect(x, y, BLOCK_H_RES, BLOCK_V_RES);\n ctx.restore();\n break;\n case 0x2592:\n // medium shade (https://symbl.cc/en/2592/)\n ctx.save();\n ctx.globalAlpha = 0.5;\n ctx.fillRect(x, y, BLOCK_H_RES, BLOCK_V_RES);\n ctx.restore();\n break;\n case 0x2593:\n // dark shade (https://symbl.cc/en/2593/)\n ctx.save();\n ctx.globalAlpha = 0.75;\n ctx.fillRect(x, y, BLOCK_H_RES, BLOCK_V_RES);\n ctx.restore();\n break;\n case 0x2594:\n // upper one eighth block (https://symbl.cc/en/2594/)\n ctx.fillRect(x, y, BLOCK_H_RES, unitY);\n break;\n case 0x2595:\n // right one eighth block (https://symbl.cc/en/2595/)\n ctx.fillRect(x + unitX * 7, y, unitX, BLOCK_V_RES);\n break;\n case 0x2596:\n // quadrant lower left (https://symbl.cc/en/2596/)\n ctx.fillRect(x, y + halfY, halfX, halfY);\n break;\n case 0x2597:\n // quadrant lower right (https://symbl.cc/en/2597/)\n ctx.fillRect(x + halfX, y + halfY, halfX, halfY);\n break;\n case 0x2598:\n // quadrant upper left (https://symbl.cc/en/2598/)\n ctx.fillRect(x, y, halfX, halfY);\n break;\n case 0x2599:\n // quadrant upper left and lower left and lower right (https://symbl.cc/en/2599/)\n ctx.fillRect(x, y, halfX, BLOCK_V_RES);\n ctx.fillRect(x + halfX, y + halfY, halfX, halfY);\n break;\n case 0x259a:\n // quadrant upper left and lower right (https://symbl.cc/en/259A/)\n ctx.fillRect(x, y, halfX, halfY);\n ctx.fillRect(x + halfX, y + halfY, halfX, halfY);\n break;\n case 0x259b:\n // quadrant upper left and upper right and lower left (https://symbl.cc/en/259B/)\n ctx.fillRect(x, y, BLOCK_H_RES, halfY);\n ctx.fillRect(x, y + halfY, halfX, halfY);\n break;\n case 0x259c:\n // quadrant upper left and upper right and lower right (https://symbl.cc/en/259C/)\n ctx.fillRect(x, y, BLOCK_H_RES, halfY);\n ctx.fillRect(x + halfX, y + halfY, halfX, halfY);\n break;\n case 0x259d:\n // quadrant upper right (https://symbl.cc/en/259D/)\n ctx.fillRect(x + halfX, y, halfX, halfY);\n break;\n case 0x259e:\n // quadrant upper right and lower left (https://symbl.cc/en/259E/)\n ctx.fillRect(x + halfX, y, halfX, halfY);\n ctx.fillRect(x, y + halfY, halfX, halfY);\n break;\n case 0x259f:\n // quadrant upper right and lower left and lower right (https://symbl.cc/en/259F/)\n ctx.fillRect(x + halfX, y, halfX, BLOCK_V_RES);\n ctx.fillRect(x, y + halfY, halfX, halfY);\n break;\n case 0x1fb00:\n // sextant-1: upper left (https://symbl.cc/en/1FB00/)\n ctx.fillRect(x, y, sextantX, sextantY);\n break;\n case 0x1fb01:\n // sextant-2: upper right (https://symbl.cc/en/1FB01/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n break;\n case 0x1fb02:\n // sextant-12: upper one third (https://symbl.cc/en/1FB02/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n break;\n case 0x1fb03:\n // sextant-3: middle left (https://symbl.cc/en/1FB03/)\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n break;\n case 0x1fb04:\n // sextant-13: top-left and middle-left filled (https://symbl.cc/en/1FB04/)\n ctx.fillRect(x, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n break;\n case 0x1fb05:\n // sextant-23: upper right and middle left (https://symbl.cc/en/1FB05/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n break;\n case 0x1fb06:\n // sextant-123: upper one third and middle left (https://symbl.cc/en/1FB06/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n break;\n case 0x1fb07:\n // sextant-4: middle right (https://symbl.cc/en/1FB07/)\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n break;\n case 0x1fb08:\n // sextant-14: upper left and middle right (https://symbl.cc/en/1FB08/)\n ctx.fillRect(x, y, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n break;\n case 0x1fb09:\n // sextant-24: top-right and middle-right filled (https://symbl.cc/en/1FB09/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n break;\n case 0x1fb0a:\n // sextant-124: upper one third and middle right (https://symbl.cc/en/1FB0A/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n break;\n case 0x1fb0b:\n // sextant-34: middle one third (https://symbl.cc/en/1FB0B/)\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY);\n break;\n case 0x1fb0c:\n // sextant-134: upper left, middle left and middle right (https://symbl.cc/en/1FB0C/)\n ctx.fillRect(x, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY);\n break;\n case 0x1fb0d:\n // sextant-234: upper right and middle one third (https://symbl.cc/en/1FB0D/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY);\n break;\n case 0x1fb0e:\n // sextant-1234: top and middle rows filled (https://symbl.cc/en/1FB0E/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY);\n break;\n case 0x1fb0f:\n // sextant-5: lower left (https://symbl.cc/en/1FB0F/)\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb10:\n // sextant-15: upper left and lower left (https://symbl.cc/en/1FB10/)\n ctx.fillRect(x, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb11:\n // sextant-25: upper right and lower left (https://symbl.cc/en/1FB11/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb12:\n // sextant-125: upper one third and lower left (https://symbl.cc/en/1FB12/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb13:\n // sextant-35: middle left and lower left (https://symbl.cc/en/1FB13/)\n ctx.fillRect(x, y + sextantY, sextantX, sextantY * 2);\n break;\n case 0x1fb14:\n // sextant-235: upper right and left column lower two thirds (https://symbl.cc/en/1FB14/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX, sextantY * 2);\n break;\n case 0x1fb15:\n // sextant-1235: upper one third and left column lower two thirds (https://symbl.cc/en/1FB15/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX, sextantY * 2);\n break;\n case 0x1fb16:\n // sextant-45: middle right and lower left (https://symbl.cc/en/1FB16/)\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb17:\n // sextant-145: upper left, middle right and lower left (https://symbl.cc/en/1FB17/)\n ctx.fillRect(x, y, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb18:\n // sextant-245: right column upper two thirds and lower left (https://symbl.cc/en/1FB18/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY * 2);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb19:\n // sextant-1245: upper one third, middle right and lower left (https://symbl.cc/en/1FB19/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb1a:\n // sextant-345: middle one third and lower left (https://symbl.cc/en/1FB1A/)\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb1b:\n // sextant-1345: left column and middle right (https://symbl.cc/en/1FB1B/)\n ctx.fillRect(x, y, sextantX, sextantY * 3);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n break;\n case 0x1fb1c:\n // sextant-2345: upper right, middle one third and lower left (https://symbl.cc/en/1FB1C/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb1d:\n // sextant-12345: upper two thirds and lower left (https://symbl.cc/en/1FB1D/)\n ctx.fillRect(x, y, sextantX * 2, sextantY * 2);\n ctx.fillRect(x, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb1e:\n // sextant-6: lower right (https://symbl.cc/en/1FB1E/)\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb1f:\n // sextant-16: upper left and lower right (https://symbl.cc/en/1FB1F/)\n ctx.fillRect(x, y, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb20:\n // sextant-26: upper right and lower right (https://symbl.cc/en/1FB20/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb21:\n // sextant-126: upper one third and lower right (https://symbl.cc/en/1FB21/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb22:\n // sextant-36: middle left and lower right (https://symbl.cc/en/1FB22/)\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb23:\n // sextant-136: upper left, middle left and lower right (https://symbl.cc/en/1FB23/)\n ctx.fillRect(x, y, sextantX, sextantY * 2);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb24:\n // sextant-236: upper right, middle left and lower right (https://symbl.cc/en/1FB24/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb25:\n // sextant-1236: upper one third, middle left and lower right (https://symbl.cc/en/1FB25/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb26:\n // sextant-46: middle right and lower right (https://symbl.cc/en/1FB26/)\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY * 2);\n break;\n case 0x1fb27:\n // sextant-146: upper left and right column lower two thirds (https://symbl.cc/en/1FB27/)\n ctx.fillRect(x, y, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY * 2);\n break;\n case 0x1fb28:\n // sextant-1246: upper one third and right column lower two thirds (https://symbl.cc/en/1FB28/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY * 2);\n break;\n case 0x1fb29:\n // sextant-346: middle one third and lower right (https://symbl.cc/en/1FB29/)\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb2a:\n // sextant-1346: left column upper two thirds and right column lower two thirds (https://symbl.cc/en/1FB2A/)\n ctx.fillRect(x, y, sextantX, sextantY * 2);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY * 2);\n break;\n case 0x1fb2b:\n // sextant-2346: upper right, middle one third and lower right (https://symbl.cc/en/1FB2B/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb2c:\n // sextant-12346: upper two thirds and lower right (https://symbl.cc/en/1FB2C/)\n ctx.fillRect(x, y, sextantX * 2, sextantY * 2);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb2d:\n // sextant-56: lower one third (https://symbl.cc/en/1FB2D/)\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb2e:\n // sextant-156: upper left and lower one third (https://symbl.cc/en/1FB2E/)\n ctx.fillRect(x, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb2f:\n // sextant-256: upper right and lower one third (https://symbl.cc/en/1FB2F/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb30:\n // sextant-1256: upper one third and lower one third (https://symbl.cc/en/1FB30/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb31:\n // sextant-356: middle left and lower one third (https://symbl.cc/en/1FB31/)\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb32:\n // sextant-1356: left column upper two thirds and lower one third (https://symbl.cc/en/1FB32/)\n ctx.fillRect(x, y, sextantX, sextantY * 2);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb33:\n // sextant-2356: upper right, middle left and lower one third (https://symbl.cc/en/1FB33/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb34:\n // sextant-12356: upper one third, middle left and lower one third (https://symbl.cc/en/1FB34/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb35:\n // sextant-456: middle right and lower one third (https://symbl.cc/en/1FB35/)\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb36:\n // sextant-1456: upper left, middle right and lower one third (https://symbl.cc/en/1FB36/)\n ctx.fillRect(x, y, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb37:\n // sextant-2456: right column upper two thirds and lower one third (https://symbl.cc/en/1FB37/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY * 2);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb38:\n // sextant-12456: upper one third, middle right and lower one third (https://symbl.cc/en/1FB38/)\n ctx.fillRect(x, y, sextantX * 2, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY * 2, sextantX * 2, sextantY);\n break;\n case 0x1fb39:\n // sextant-3456: middle one third and lower one third (https://symbl.cc/en/1FB39/)\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY * 2);\n break;\n case 0x1fb3a:\n // sextant-13456: left column and lower one third (https://symbl.cc/en/1FB3A/)\n ctx.fillRect(x, y, sextantX, sextantY * 3);\n ctx.fillRect(x + sextantX, y + sextantY, sextantX, sextantY);\n ctx.fillRect(x + sextantX, y + sextantY * 2, sextantX, sextantY);\n break;\n case 0x1fb3b:\n // sextant-23456: upper right and lower two thirds (https://symbl.cc/en/1FB3B/)\n ctx.fillRect(x + sextantX, y, sextantX, sextantY);\n ctx.fillRect(x, y + sextantY, sextantX * 2, sextantY * 2);\n break;\n }\n}\nconst SYMBOL_STROKE = 0.05;\nconst CELL_RATIO = 9.0375 / 20;\nfunction getVectorSymbolDef(codepoint) {\n const stroke = `stroke=\"currentColor\" stroke-width=\"${SYMBOL_STROKE}\" stroke-linejoin=\"miter\" stroke-linecap=\"square\"`;\n const strokeButt = `stroke=\"currentColor\" stroke-width=\"${SYMBOL_STROKE}\" stroke-linejoin=\"miter\" stroke-linecap=\"butt\"`;\n const stroked = d => `<path d=\"${d}\" fill=\"none\" ${stroke}/>`;\n const third = 1 / 3;\n const twoThirds = 2 / 3;\n switch (codepoint) {\n // ◢ - black lower right triangle (https://symbl.cc/en/25E2/)\n case 0x25e2:\n return '<path d=\"M1,1 L1,0 L0,1 Z\" fill=\"currentColor\"/>' + stroked(\"M1,1 L1,0 L0,1 Z\");\n\n // ◣ - black lower left triangle (https://symbl.cc/en/25E3/)\n case 0x25e3:\n return '<path d=\"M0,1 L0,0 L1,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0,1 L0,0 L1,1 Z\");\n\n // ◤ - black upper left triangle (https://symbl.cc/en/25E4/)\n case 0x25e4:\n return '<path d=\"M0,0 L1,0 L0,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0,0 L1,0 L0,1 Z\");\n\n // ◥ - black upper right triangle (https://symbl.cc/en/25E5/)\n case 0x25e5:\n return '<path d=\"M1,0 L1,1 L0,0 Z\" fill=\"currentColor\"/>' + stroked(\"M1,0 L1,1 L0,0 Z\");\n case 0x268f:\n {\n // ⚏ - digram for greater yin (https://symbl.cc/en/268F/)\n const horizontalGap = 0.15;\n const verticalGap = 0.2;\n const lineHeight = 0.17;\n const halfHorizontalGap = horizontalGap / 2;\n const halfVerticalGap = verticalGap / 2;\n const toViewBoxY = offset => 0.5 + offset * CELL_RATIO;\n const leftX1 = 0.5 - halfHorizontalGap;\n const rightX0 = 0.5 + halfHorizontalGap;\n const rightX1 = 1 + 0.02; // slight overdraw\n const topY0 = toViewBoxY(-halfVerticalGap - lineHeight);\n const topY1 = toViewBoxY(-halfVerticalGap);\n const bottomY0 = toViewBoxY(halfVerticalGap);\n const bottomY1 = toViewBoxY(halfVerticalGap + lineHeight);\n const rect = (x0, x1, y0, y1) => `M${x0},${y0} L${x1},${y0} L${x1},${y1} L${x0},${y1} Z`;\n return `<path d=\"${rect(0, leftX1, topY0, topY1)} ${rect(rightX0, rightX1, topY0, topY1)} ${rect(0, leftX1, bottomY0, bottomY1)} ${rect(rightX0, rightX1, bottomY0, bottomY1)}\" fill=\"currentColor\"/>`;\n }\n\n // 🬼 - lower left block diagonal lower middle left to lower centre (https://symbl.cc/en/1FB3C/)\n case 0x1fb3c:\n return `<path d=\"M0,${twoThirds} L0,1 L0.5,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,${twoThirds} L0,1 L0.5,1 Z`);\n\n // 🬽 - lower left block diagonal lower middle left to lower right (https://symbl.cc/en/1FB3D/)\n case 0x1fb3d:\n return `<path d=\"M0,${twoThirds} L0,1 L1,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,${twoThirds} L0,1 L1,1 Z`);\n\n // 🬾 - lower left block diagonal upper middle left to lower centre (https://symbl.cc/en/1FB3E/)\n case 0x1fb3e:\n return `<path d=\"M0,${third} L0.5,1 L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,${third} L0.5,1 L0,1 Z`);\n\n // 🬿 - lower left block diagonal upper middle left to lower right (https://symbl.cc/en/1FB3F/)\n case 0x1fb3f:\n return `<path d=\"M0,${third} L1,1 L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,${third} L1,1 L0,1 Z`);\n\n // 🭀 - lower left block diagonal upper left to lower centre (https://symbl.cc/en/1FB40/)\n case 0x1fb40:\n return '<path d=\"M0,0 L0.5,1 L0,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0,0 L0.5,1 L0,1 Z\");\n\n // 🭁 - lower right block diagonal upper middle left to upper centre (https://symbl.cc/en/1FB41/)\n case 0x1fb41:\n return `<path d=\"M0,${third} L0,1 L1,1 L1,0 L0.5,0 Z\" fill=\"currentColor\"/>` + stroked(`M0,${third} L0,1 L1,1 L1,0 L0.5,0 Z`);\n\n // 🭂 - lower right block diagonal upper middle left to upper right (https://symbl.cc/en/1FB42/)\n case 0x1fb42:\n return `<path d=\"M0,${third} L0,1 L1,1 L1,0 Z\" fill=\"currentColor\"/>` + stroked(`M0,${third} L0,1 L1,1 L1,0 Z`);\n\n // 🭃 - lower right block diagonal lower middle left to upper centre (https://symbl.cc/en/1FB43/)\n case 0x1fb43:\n return `<path d=\"M0,${twoThirds} L0,1 L1,1 L1,0 L0.5,0 Z\" fill=\"currentColor\"/>` + stroked(`M0,${twoThirds} L0,1 L1,1 L1,0 L0.5,0 Z`);\n\n // 🭄 - lower right block diagonal lower middle left to upper right (https://symbl.cc/en/1FB44/)\n case 0x1fb44:\n return `<path d=\"M0,${twoThirds} L0,1 L1,1 L1,0 Z\" fill=\"currentColor\"/>` + stroked(`M0,${twoThirds} L0,1 L1,1 L1,0 Z`);\n\n // 🭅 - lower right block diagonal lower left to upper centre (https://symbl.cc/en/1FB45/)\n case 0x1fb45:\n return '<path d=\"M0.5,0 L1,0 L1,1 L0,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0.5,0 L1,0 L1,1 L0,1 Z\");\n\n // 🭆 - lower right block diagonal lower middle left to upper middle right (https://symbl.cc/en/1FB46/)\n case 0x1fb46:\n return `<path d=\"M0,${twoThirds} L0,1 L1,1 L1,${third} Z\" fill=\"currentColor\"/>` + stroked(`M0,${twoThirds} L0,1 L1,1 L1,${third} Z`);\n\n // 🭇 - lower right block diagonal lower centre to lower middle right (https://symbl.cc/en/1FB47/)\n case 0x1fb47:\n return `<path d=\"M0.5,1 L1,1 L1,${twoThirds} Z\" fill=\"currentColor\"/>` + stroked(`M0.5,1 L1,1 L1,${twoThirds} Z`);\n\n // 🭈 - lower right block diagonal lower left to lower middle right (https://symbl.cc/en/1FB48/)\n case 0x1fb48:\n return `<path d=\"M0,1 L1,1 L1,${twoThirds} Z\" fill=\"currentColor\"/>` + stroked(`M0,1 L1,1 L1,${twoThirds} Z`);\n\n // 🭉 - lower right block diagonal lower centre to upper middle right (https://symbl.cc/en/1FB49/)\n case 0x1fb49:\n return `<path d=\"M0.5,1 L1,1 L1,${third} Z\" fill=\"currentColor\"/>` + stroked(`M0.5,1 L1,1 L1,${third} Z`);\n\n // 🭊 - lower right block diagonal lower left to upper middle right (https://symbl.cc/en/1FB4A/)\n case 0x1fb4a:\n return `<path d=\"M0,1 L1,1 L1,${third} Z\" fill=\"currentColor\"/>` + stroked(`M0,1 L1,1 L1,${third} Z`);\n\n // 🭋 - lower right block diagonal lower centre to upper right (https://symbl.cc/en/1FB4B/)\n case 0x1fb4b:\n return '<path d=\"M0.5,1 L1,0 L1,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0.5,1 L1,0 L1,1 Z\");\n\n // 🭌 - lower left block diagonal upper centre to upper middle right (https://symbl.cc/en/1FB4C/)\n case 0x1fb4c:\n return `<path d=\"M0,0 L0.5,0 L1,${third} L1,1 L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L0.5,0 L1,${third} L1,1 L0,1 Z`);\n\n // 🭍 - lower left block diagonal upper left to upper middle right (https://symbl.cc/en/1FB4D/)\n case 0x1fb4d:\n return `<path d=\"M0,0 L0,1 L1,1 L1,${third} Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L0,1 L1,1 L1,${third} Z`);\n\n // 🭎 - lower left block diagonal upper centre to lower middle right (https://symbl.cc/en/1FB4E/)\n case 0x1fb4e:\n return `<path d=\"M0,0 L0.5,0 L1,${twoThirds} L1,1 L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L0.5,0 L1,${twoThirds} L1,1 L0,1 Z`);\n\n // 🭏 - lower left block diagonal upper left to lower middle right (https://symbl.cc/en/1FB4F/)\n case 0x1fb4f:\n return `<path d=\"M0,0 L1,${twoThirds} L1,1 L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,${twoThirds} L1,1 L0,1 Z`);\n\n // 🭐 - lower left block diagonal upper centre to lower right (https://symbl.cc/en/1FB50/)\n case 0x1fb50:\n return '<path d=\"M0,0 L0.5,0 L1,1 L0,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0,0 L0.5,0 L1,1 L0,1 Z\");\n\n // 🭑 - lower left block diagonal upper middle left to lower middle right (https://symbl.cc/en/1FB51/)\n case 0x1fb51:\n return `<path d=\"M0,${third} L1,${twoThirds} L1,1 L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,${third} L1,${twoThirds} L1,1 L0,1 Z`);\n\n // 🭒 - upper right block diagonal lower middle left to lower centre (https://symbl.cc/en/1FB52/)\n case 0x1fb52:\n return `<path d=\"M0,${twoThirds} L0,0 L1,0 L1,1 L0.5,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,${twoThirds} L0,0 L1,0 L1,1 L0.5,1 Z`);\n\n // 🭓 - upper right block diagonal lower middle left to lower right (https://symbl.cc/en/1FB53/)\n case 0x1fb53:\n return `<path d=\"M0,${twoThirds} L0,0 L1,0 L1,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,${twoThirds} L0,0 L1,0 L1,1 Z`);\n\n // 🭔 - upper right block diagonal upper middle left to lower centre (https://symbl.cc/en/1FB54/)\n case 0x1fb54:\n return `<path d=\"M0,${third} L0,0 L1,0 L1,1 L0.5,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,${third} L0,0 L1,0 L1,1 L0.5,1 Z`);\n\n // 🭕 - upper right block diagonal upper middle left to lower right (https://symbl.cc/en/1FB55/)\n case 0x1fb55:\n return `<path d=\"M0,${third} L0,0 L1,0 L1,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,${third} L0,0 L1,0 L1,1 Z`);\n\n // 🭖 - upper right block diagonal upper left to lower centre (https://symbl.cc/en/1FB56/)\n case 0x1fb56:\n return '<path d=\"M0,0 L1,0 L1,1 L0.5,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0,0 L1,0 L1,1 L0.5,1 Z\");\n\n // 🭗 - upper left block diagonal upper middle left to upper centre (https://symbl.cc/en/1FB57/)\n case 0x1fb57:\n return `<path d=\"M0,${third} L0.5,0 L0,0 Z\" fill=\"currentColor\"/>` + stroked(`M0,${third} L0.5,0 L0,0 Z`);\n\n // 🭘 - upper left block diagonal upper middle left to upper right (https://symbl.cc/en/1FB58/)\n case 0x1fb58:\n return `<path d=\"M0,0 L1,0 L0,${third} Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,0 L0,${third} Z`);\n\n // 🭙 - upper left block diagonal lower middle left to upper centre (https://symbl.cc/en/1FB59/)\n case 0x1fb59:\n return `<path d=\"M0,0 L0.5,0 L0,${twoThirds} Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L0.5,0 L0,${twoThirds} Z`);\n\n // 🭚 - upper left block diagonal lower middle left to upper right (https://symbl.cc/en/1FB5A/)\n case 0x1fb5a:\n return `<path d=\"M0,0 L1,0 L0,${twoThirds} Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,0 L0,${twoThirds} Z`);\n\n // 🭛 - upper left block diagonal lower left to upper centre (https://symbl.cc/en/1FB5B/)\n case 0x1fb5b:\n return '<path d=\"M0,0 L0.5,0 L0,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0,0 L0.5,0 L0,1 Z\");\n\n // 🭜 - upper left block diagonal lower middle left to upper middle right (https://symbl.cc/en/1FB5C/)\n case 0x1fb5c:\n return `<path d=\"M0,0 L1,0 L1,${third} L0,${twoThirds} Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,0 L1,${third} L0,${twoThirds} Z`);\n\n // 🭝 - upper left block diagonal lower centre to lower middle right (https://symbl.cc/en/1FB5D/)\n case 0x1fb5d:\n return `<path d=\"M0,0 L1,0 L1,${twoThirds} L0.5,1 L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,0 L1,${twoThirds} L0.5,1 L0,1 Z`);\n\n // 🭞 - upper left block diagonal lower left to lower middle right (https://symbl.cc/en/1FB5E/)\n case 0x1fb5e:\n return `<path d=\"M0,0 L1,0 L1,${twoThirds} L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,0 L1,${twoThirds} L0,1 Z`);\n\n // 🭟 - upper left block diagonal lower centre to upper middle right (https://symbl.cc/en/1FB5F/)\n case 0x1fb5f:\n return `<path d=\"M0,0 L1,0 L1,${third} L0.5,1 L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,0 L1,${third} L0.5,1 L0,1 Z`);\n\n // 🭠 - upper left block diagonal lower left to upper middle right (https://symbl.cc/en/1FB60/)\n case 0x1fb60:\n return `<path d=\"M0,0 L1,0 L1,${third} L0,1 Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,0 L1,${third} L0,1 Z`);\n\n // 🭡 - upper left block diagonal lower centre to upper right (https://symbl.cc/en/1FB61/)\n case 0x1fb61:\n return '<path d=\"M0,0 L1,0 L0.5,1 L0,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0,0 L1,0 L0.5,1 L0,1 Z\");\n\n // 🭢 - upper right block diagonal upper centre to upper middle right (https://symbl.cc/en/1FB62/)\n case 0x1fb62:\n return `<path d=\"M0.5,0 L1,0 L1,${third} Z\" fill=\"currentColor\"/>` + stroked(`M0.5,0 L1,0 L1,${third} Z`);\n\n // 🭣 - upper right block diagonal upper left to upper middle right (https://symbl.cc/en/1FB63/)\n case 0x1fb63:\n return `<path d=\"M0,0 L1,0 L1,${third} Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,0 L1,${third} Z`);\n\n // 🭤 - upper right block diagonal upper centre to lower middle right (https://symbl.cc/en/1FB64/)\n case 0x1fb64:\n return `<path d=\"M0.5,0 L1,0 L1,${twoThirds} Z\" fill=\"currentColor\"/>` + stroked(`M0.5,0 L1,0 L1,${twoThirds} Z`);\n\n // 🭥 - upper right block diagonal upper left to lower middle right (https://symbl.cc/en/1FB65/)\n case 0x1fb65:\n return `<path d=\"M0,0 L1,0 L1,${twoThirds} Z\" fill=\"currentColor\"/>` + stroked(`M0,0 L1,0 L1,${twoThirds} Z`);\n\n // 🭦 - upper right block diagonal upper centre to lower right (https://symbl.cc/en/1FB66/)\n case 0x1fb66:\n return '<path d=\"M0.5,0 L1,0 L1,1 Z\" fill=\"currentColor\"/>' + stroked(\"M0.5,0 L1,0 L1,1 Z\");\n\n // 🭧 - upper right block diagonal upper middle left to lower middle right (https://symbl.cc/en/1FB67/)\n case 0x1fb67:\n return `<path d=\"M0,${third} L0,0 L1,0 L1,${twoThirds} Z\" fill=\"currentColor\"/>` + stroked(`M0,${third} L0,0 L1,0 L1,${twoThirds} Z`);\n\n // 🭨 - upper and right and lower triangular three quarters block (https://symbl.cc/en/1FB68/)\n case 0x1fb68:\n return '<path fill-rule=\"evenodd\" d=\"M0,0 L1,0 L1,1 L0,1 Z M0,0 L0,1 L0.5,0.5 Z\" fill=\"currentColor\"/>' + `<path d=\"M0,0 L1,0 M0,1 L1,1 M1,0 L1,1\" fill=\"none\" ${stroke}/>` + `<path d=\"M0,0 L0.5,0.5 M0,1 L0.5,0.5\" fill=\"none\" ${strokeButt}/>`;\n\n // 🭩 - left and lower and right triangular three quarters block (https://symbl.cc/en/1FB69/)\n case 0x1fb69:\n return '<path fill-rule=\"evenodd\" d=\"M0,0 L1,0 L1,1 L0,1 Z M0,0 L1,0 L0.5,0.5 Z\" fill=\"currentColor\"/>' + `<path d=\"M0,0 L0,1 M1,0 L1,1 M0,1 L1,1\" fill=\"none\" ${stroke}/>` + `<path d=\"M0,0 L0.5,0.5 M1,0 L0.5,0.5\" fill=\"none\" ${strokeButt}/>`;\n\n // 🭪 - upper and left and lower triangular three quarters block (https://symbl.cc/en/1FB6A/)\n case 0x1fb6a:\n return '<path fill-rule=\"evenodd\" d=\"M0,0 L1,0 L1,1 L0,1 Z M1,0 L1,1 L0.5,0.5 Z\" fill=\"currentColor\"/>' + `<path d=\"M0,0 L1,0 M0,1 L1,1 M0,0 L0,1\" fill=\"none\" ${stroke}/>` + `<path d=\"M1,0 L0.5,0.5 M1,1 L0.5,0.5\" fill=\"none\" ${strokeButt}/>`;\n\n // 🭫 - left and upper and right triangular three quarters block (https://symbl.cc/en/1FB6B/)\n case 0x1fb6b:\n return '<path fill-rule=\"evenodd\" d=\"M0,0 L1,0 L1,1 L0,1 Z M0,1 L1,1 L0.5,0.5 Z\" fill=\"currentColor\"/>' + `<path d=\"M0,0 L1,0 M0,0 L0,1 M1,0 L1,1\" fill=\"none\" ${stroke}/>` + `<path d=\"M0,1 L0.5,0.5 M1,1 L0.5,0.5\" fill=\"none\" ${strokeButt}/>`;\n\n // 🭬 - left triangular one quarter block (https://symbl.cc/en/1FB6C/)\n case 0x1fb6c:\n return '<path d=\"M0,0 L0,1 L0.5,0.5 Z\" fill=\"currentColor\"/>' + stroked(\"M0,0 L0,1 L0.5,0.5 Z\");\n\n // powerline right full triangle (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b0:\n return '<path d=\"M0,0 L1,0.5 L0,1 Z\" fill=\"currentColor\"/>';\n\n // powerline right bracket (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b1:\n return '<path d=\"M0,0 L1,0.5 L0,1\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"0.07\" stroke-linejoin=\"miter\"/>';\n\n // powerline left full triangle (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b2:\n return '<path d=\"M1,0 L0,0.5 L1,1 Z\" fill=\"currentColor\"/>';\n\n // powerline left bracket (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b3:\n return '<path d=\"M1,0 L0,0.5 L1,1\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"0.07\" stroke-linejoin=\"miter\"/>';\n\n // nf-ple-right_half_circle_thick (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b4:\n return '<path d=\"M0,0 A1,0.5 0 0 1 0,1 Z\" fill=\"currentColor\"/>';\n\n // nf-ple-right_half_circle_thin (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b5:\n return '<path d=\"M0,0 A1,0.5 0 0 1 0,1\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"0.07\"/>';\n\n // nf-ple-left_half_circle_thick (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b6:\n return '<path d=\"M1,0 A1,0.5 0 0 0 1,1 Z\" fill=\"currentColor\"/>';\n\n // nf-ple-left_half_circle_thin (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b7:\n return '<path d=\"M1,0 A1,0.5 0 0 0 1,1\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"0.07\"/>';\n\n // nf-ple-lower_left_triangle (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b8:\n return '<path d=\"M0,1 L0,0 L1,1 Z\" fill=\"currentColor\"/>';\n\n // nf-ple-backslash_separator (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0b9:\n // nf-ple-backslash_separator_redundant (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0bf:\n return '<path d=\"M0,0 L1,1\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"0.07\"/>';\n\n // nf-ple-lower_right_triangle (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0ba:\n return '<path d=\"M1,1 L1,0 L0,1 Z\" fill=\"currentColor\"/>';\n\n // nf-ple-forwardslash_separator (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0bb:\n // nf-ple-forwardslash_separator_redundant (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0bd:\n return '<path d=\"M0,1 L1,0\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"0.07\"/>';\n\n // nf-ple-upper_left_triangle (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0bc:\n return '<path d=\"M0,0 L1,0 L0,1 Z\" fill=\"currentColor\"/>';\n\n // nf-ple-upper_right_triangle (https://www.nerdfonts.com/cheat-sheet)\n case 0xe0be:\n return '<path d=\"M1,0 L1,1 L0,0 Z\" fill=\"currentColor\"/>';\n default:\n return null;\n }\n}\nconst POWERLINE_SYMBOLS = new Set([0xe0b0, 0xe0b1, 0xe0b2, 0xe0b3, 0xe0b4, 0xe0b5, 0xe0b6, 0xe0b7, 0xe0b8, 0xe0b9, 0xe0ba, 0xe0bb, 0xe0bc, 0xe0bd, 0xe0be, 0xe0bf]);\nconst POWERLINE_SYMBOL_NUDGE = 0.02;\nconst FALLBACK_THEME = {\n foreground: \"#000000\",\n background: \"#000000\",\n palette: [\"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\", \"#000000\"]\n};\n\nconst _tmpl$$e = /*#__PURE__*/template(`<svg version=\"1.1\" viewBox=\"0 0 12 12\" class=\"ap-icon ap-icon-fullscreen-off\" aria-hidden=\"true\"><path d=\"M7,5 L7,0 L9,2 L11,0 L12,1 L10,3 L12,5 Z\"></path><path d=\"M5,7 L0,7 L2,9 L0,11 L1,12 L3,10 L5,12 Z\"></path></svg>`, 6);\nvar ExpandIcon = props => {\n return _tmpl$$e.cloneNode(true);\n};\n\nconst _tmpl$$d = /*#__PURE__*/template(`<svg version=\"1.1\" viewBox=\"6 8 14 16\" class=\"ap-icon\" aria-hidden=\"true\"><path d=\"M0.938 8.313h22.125c0.5 0 0.938 0.438 0.938 0.938v13.5c0 0.5-0.438 0.938-0.938 0.938h-22.125c-0.5 0-0.938-0.438-0.938-0.938v-13.5c0-0.5 0.438-0.938 0.938-0.938zM1.594 22.063h20.813v-12.156h-20.813v12.156zM3.844 11.188h1.906v1.938h-1.906v-1.938zM7.469 11.188h1.906v1.938h-1.906v-1.938zM11.031 11.188h1.938v1.938h-1.938v-1.938zM14.656 11.188h1.875v1.938h-1.875v-1.938zM18.25 11.188h1.906v1.938h-1.906v-1.938zM5.656 15.031h1.938v1.938h-1.938v-1.938zM9.281 16.969v-1.938h1.906v1.938h-1.906zM12.875 16.969v-1.938h1.906v1.938h-1.906zM18.406 16.969h-1.938v-1.938h1.938v1.938zM16.531 20.781h-9.063v-1.906h9.063v1.906z\"></path></svg>`, 4);\nvar KeyboardIcon = props => {\n return _tmpl$$d.cloneNode(true);\n};\n\nconst _tmpl$$c = /*#__PURE__*/template(`<svg version=\"1.1\" viewBox=\"0 0 12 12\" class=\"ap-icon\" aria-hidden=\"true\"><path d=\"M1,0 L4,0 L4,12 L1,12 Z\"></path><path d=\"M8,0 L11,0 L11,12 L8,12 Z\"></path></svg>`, 6);\nvar PauseIcon = props => {\n return _tmpl$$c.cloneNode(true);\n};\n\nconst _tmpl$$b = /*#__PURE__*/template(`<svg version=\"1.1\" viewBox=\"0 0 12 12\" class=\"ap-icon\" aria-hidden=\"true\"><path d=\"M1,0 L11,6 L1,12 Z\"></path></svg>`, 4);\nvar PlayIcon = props => {\n return _tmpl$$b.cloneNode(true);\n};\n\nconst _tmpl$$a = /*#__PURE__*/template(`<svg version=\"1.1\" viewBox=\"0 0 12 12\" class=\"ap-icon ap-icon-fullscreen-on\" aria-hidden=\"true\"><path d=\"M12,0 L7,0 L9,2 L7,4 L8,5 L10,3 L12,5 Z\"></path><path d=\"M0,12 L0,7 L2,9 L4,7 L5,8 L3,10 L5,12 Z\"></path></svg>`, 6);\nvar ShrinkIcon = props => {\n return _tmpl$$a.cloneNode(true);\n};\n\nconst _tmpl$$9 = /*#__PURE__*/template(`<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M10.5 3.75a.75.75 0 0 0-1.264-.546L5.203 7H2.667a.75.75 0 0 0-.7.48A6.985 6.985 0 0 0 1.5 10c0 .887.165 1.737.468 2.52.111.29.39.48.7.48h2.535l4.033 3.796a.75.75 0 0 0 1.264-.546V3.75ZM16.45 5.05a.75.75 0 0 0-1.06 1.061 5.5 5.5 0 0 1 0 7.778.75.75 0 0 0 1.06 1.06 7 7 0 0 0 0-9.899Z\"></path><path d=\"M14.329 7.172a.75.75 0 0 0-1.061 1.06 2.5 2.5 0 0 1 0 3.536.75.75 0 0 0 1.06 1.06 4 4 0 0 0 0-5.656Z\"></path></svg>`, 6);\nvar SpeakerOnIcon = props => {\n return _tmpl$$9.cloneNode(true);\n};\n\nconst _tmpl$$8 = /*#__PURE__*/template(`<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" class=\"size-5\" aria-hidden=\"true\"><path d=\"M10.047 3.062a.75.75 0 0 1 .453.688v12.5a.75.75 0 0 1-1.264.546L5.203 13H2.667a.75.75 0 0 1-.7-.48A6.985 6.985 0 0 1 1.5 10c0-.887.165-1.737.468-2.52a.75.75 0 0 1 .7-.48h2.535l4.033-3.796a.75.75 0 0 1 .811-.142ZM13.78 7.22a.75.75 0 1 0-1.06 1.06L14.44 10l-1.72 1.72a.75.75 0 0 0 1.06 1.06l1.72-1.72 1.72 1.72a.75.75 0 1 0 1.06-1.06L16.56 10l1.72-1.72a.75.75 0 0 0-1.06-1.06L15.5 8.94l-1.72-1.72Z\"></path></svg>`, 4);\nvar SpeakerOffIcon = props => {\n return _tmpl$$8.cloneNode(true);\n};\n\nconst _tmpl$$7 = /*#__PURE__*/template(`<button class=\"ap-button ap-playback-button\" type=\"button\"></button>`, 2),\n _tmpl$2$2 = /*#__PURE__*/template(`<span class=\"ap-bar\"><span class=\"ap-gutter ap-gutter-empty\"></span><span class=\"ap-gutter ap-gutter-full\"></span></span>`, 6),\n _tmpl$3$1 = /*#__PURE__*/template(`<span class=\"ap-tooltip\">Unmute (m)</span>`, 2),\n _tmpl$4$1 = /*#__PURE__*/template(`<span class=\"ap-tooltip\">Mute (m)</span>`, 2),\n _tmpl$5$1 = /*#__PURE__*/template(`<button class=\"ap-button ap-speaker-button ap-tooltip-container\" type=\"button\" aria-label=\"Mute / unmute\"></button>`, 2),\n _tmpl$6$1 = /*#__PURE__*/template(`<div class=\"ap-control-bar\"><span class=\"ap-timer\"><span class=\"ap-time-elapsed\"></span><span class=\"ap-time-remaining\"></span></span><span class=\"ap-progressbar\"></span><button class=\"ap-button ap-kbd-button ap-tooltip-container\" type=\"button\" aria-label=\"Show keyboard shortcuts\"><span class=\"ap-tooltip\">Keyboard shortcuts (?)</span></button><button class=\"ap-button ap-fullscreen-button ap-tooltip-container\" type=\"button\" aria-label=\"Toggle fullscreen mode\"><span class=\"ap-tooltip\">Fullscreen (f)</span></button></div>`, 18),\n _tmpl$7$1 = /*#__PURE__*/template(`<span class=\"ap-marker-container ap-tooltip-container\"><span class=\"ap-marker\"></span><span class=\"ap-tooltip\"></span></span>`, 6);\nfunction formatTime(seconds) {\n let s = Math.floor(seconds);\n const d = Math.floor(s / 86400);\n s %= 86400;\n const h = Math.floor(s / 3600);\n s %= 3600;\n const m = Math.floor(s / 60);\n s %= 60;\n if (d > 0) {\n return `${zeroPad(d)}:${zeroPad(h)}:${zeroPad(m)}:${zeroPad(s)}`;\n } else if (h > 0) {\n return `${zeroPad(h)}:${zeroPad(m)}:${zeroPad(s)}`;\n } else {\n return `${zeroPad(m)}:${zeroPad(s)}`;\n }\n}\nfunction zeroPad(n) {\n return n < 10 ? `0${n}` : n.toString();\n}\nvar ControlBar = props => {\n const e = f => {\n return e => {\n e.preventDefault();\n f(e);\n };\n };\n const currentTime = () => typeof props.currentTime === \"number\" ? formatTime(props.currentTime) : \"--:--\";\n const remainingTime = () => typeof props.remainingTime === \"number\" ? \"-\" + formatTime(props.remainingTime) : currentTime();\n const markers = createMemo(() => typeof props.duration === \"number\" ? props.markers.filter(m => m[0] < props.duration) : []);\n const markerPosition = m => `${m[0] / props.duration * 100}%`;\n const markerText = m => {\n if (m[1] === \"\") {\n return formatTime(m[0]);\n } else {\n return `${formatTime(m[0])} - ${m[1]}`;\n }\n };\n const isPastMarker = m => typeof props.currentTime === \"number\" ? m[0] <= props.currentTime : false;\n const gutterBarStyle = () => {\n return {\n transform: `scaleX(${props.progress || 0}`\n };\n };\n const calcPosition = e => {\n const barWidth = e.currentTarget.offsetWidth;\n const rect = e.currentTarget.getBoundingClientRect();\n const mouseX = e.clientX - rect.left;\n const pos = Math.max(0, mouseX / barWidth);\n return `${pos * 100}%`;\n };\n const [mouseDown, setMouseDown] = createSignal(false);\n const throttledSeek = throttle(props.onSeekClick, 50);\n const onMouseDown = e => {\n if (e._marker) return;\n if (e.altKey || e.shiftKey || e.metaKey || e.ctrlKey || e.button !== 0) return;\n setMouseDown(true);\n props.onSeekClick(calcPosition(e));\n };\n const seekToMarker = index => {\n return e(() => {\n props.onSeekClick({\n marker: index\n });\n });\n };\n const onMove = e => {\n if (e.altKey || e.shiftKey || e.metaKey || e.ctrlKey) return;\n if (mouseDown()) {\n throttledSeek(calcPosition(e));\n }\n };\n const onDocumentMouseUp = () => {\n setMouseDown(false);\n };\n document.addEventListener(\"mouseup\", onDocumentMouseUp);\n onCleanup(() => {\n document.removeEventListener(\"mouseup\", onDocumentMouseUp);\n });\n return (() => {\n const _el$ = _tmpl$6$1.cloneNode(true),\n _el$3 = _el$.firstChild,\n _el$4 = _el$3.firstChild,\n _el$5 = _el$4.nextSibling,\n _el$6 = _el$3.nextSibling,\n _el$11 = _el$6.nextSibling,\n _el$12 = _el$11.firstChild,\n _el$13 = _el$11.nextSibling,\n _el$14 = _el$13.firstChild;\n const _ref$ = props.ref;\n typeof _ref$ === \"function\" ? use(_ref$, _el$) : props.ref = _el$;\n insert(_el$, createComponent(Show, {\n get when() {\n return props.isPausable;\n },\n get children() {\n const _el$2 = _tmpl$$7.cloneNode(true);\n addEventListener(_el$2, \"click\", e(props.onPlayClick));\n insert(_el$2, createComponent(Switch, {\n get children() {\n return [createComponent(Match, {\n get when() {\n return props.isPlaying;\n },\n get children() {\n return createComponent(PauseIcon, {});\n }\n }), createComponent(Match, {\n when: true,\n get children() {\n return createComponent(PlayIcon, {});\n }\n })];\n }\n }));\n createRenderEffect(() => setAttribute(_el$2, \"aria-label\", props.isPlaying ? \"Pause\" : \"Play\"));\n return _el$2;\n }\n }), _el$3);\n insert(_el$4, currentTime);\n insert(_el$5, remainingTime);\n insert(_el$6, createComponent(Show, {\n get when() {\n return typeof props.progress === \"number\" || props.isSeekable;\n },\n get children() {\n const _el$7 = _tmpl$2$2.cloneNode(true),\n _el$8 = _el$7.firstChild,\n _el$9 = _el$8.nextSibling;\n _el$7.$$mousemove = onMove;\n _el$7.$$mousedown = onMouseDown;\n insert(_el$7, createComponent(For, {\n get each() {\n return markers();\n },\n children: (m, i) => (() => {\n const _el$15 = _tmpl$7$1.cloneNode(true),\n _el$16 = _el$15.firstChild,\n _el$17 = _el$16.nextSibling;\n _el$15.$$mousedown = e => {\n e._marker = true;\n };\n addEventListener(_el$15, \"click\", seekToMarker(i()));\n insert(_el$17, () => markerText(m));\n createRenderEffect(_p$ => {\n const _v$ = markerPosition(m),\n _v$2 = !!isPastMarker(m);\n _v$ !== _p$._v$ && _el$15.style.setProperty(\"left\", _p$._v$ = _v$);\n _v$2 !== _p$._v$2 && _el$16.classList.toggle(\"ap-marker-past\", _p$._v$2 = _v$2);\n return _p$;\n }, {\n _v$: undefined,\n _v$2: undefined\n });\n return _el$15;\n })()\n }), null);\n createRenderEffect(_$p => style(_el$9, gutterBarStyle(), _$p));\n return _el$7;\n }\n }));\n insert(_el$, createComponent(Show, {\n get when() {\n return props.isMuted !== undefined;\n },\n get children() {\n const _el$0 = _tmpl$5$1.cloneNode(true);\n addEventListener(_el$0, \"click\", e(props.onMuteClick));\n insert(_el$0, createComponent(Switch, {\n get children() {\n return [createComponent(Match, {\n get when() {\n return props.isMuted === true;\n },\n get children() {\n return [createComponent(SpeakerOffIcon, {}), _tmpl$3$1.cloneNode(true)];\n }\n }), createComponent(Match, {\n get when() {\n return props.isMuted === false;\n },\n get children() {\n return [createComponent(SpeakerOnIcon, {}), _tmpl$4$1.cloneNode(true)];\n }\n })];\n }\n }));\n return _el$0;\n }\n }), _el$11);\n addEventListener(_el$11, \"click\", e(props.onHelpClick));\n insert(_el$11, createComponent(KeyboardIcon, {}), _el$12);\n addEventListener(_el$13, \"click\", e(props.onFullscreenClick));\n insert(_el$13, createComponent(ShrinkIcon, {}), _el$14);\n insert(_el$13, createComponent(ExpandIcon, {}), _el$14);\n createRenderEffect(() => _el$.classList.toggle(\"ap-seekable\", !!props.isSeekable));\n return _el$;\n })();\n};\ndelegateEvents([\"click\", \"mousedown\", \"mousemove\"]);\n\nconst _tmpl$$6 = /*#__PURE__*/template(`<div class=\"ap-overlay ap-overlay-error\"><span>💥</span></div>`, 4);\nvar ErrorOverlay = props => {\n return _tmpl$$6.cloneNode(true);\n};\n\nconst _tmpl$$5 = /*#__PURE__*/template(`<div class=\"ap-overlay ap-overlay-loading\"><span class=\"ap-loader\"></span></div>`, 4);\nvar LoaderOverlay = props => {\n return _tmpl$$5.cloneNode(true);\n};\n\nconst _tmpl$$4 = /*#__PURE__*/template(`<div class=\"ap-overlay ap-overlay-info\"><span></span></div>`, 4);\nvar InfoOverlay = props => {\n return (() => {\n const _el$ = _tmpl$$4.cloneNode(true),\n _el$2 = _el$.firstChild;\n insert(_el$2, () => props.message);\n createRenderEffect(() => _el$.classList.toggle(\"ap-was-playing\", !!props.wasPlaying));\n return _el$;\n })();\n};\n\nconst _tmpl$$3 = /*#__PURE__*/template(`<div class=\"ap-overlay ap-overlay-start\"><div class=\"ap-play-button\"><div><span><svg version=\"1.1\" viewBox=\"0 0 1000.0 1000.0\" class=\"ap-icon\"><defs><mask id=\"small-triangle-mask\"><rect width=\"100%\" height=\"100%\" fill=\"white\"></rect><polygon points=\"700.0 500.0, 400.00000000000006 326.7949192431122, 399.9999999999999 673.2050807568877\" fill=\"black\"></polygon></mask></defs><polygon points=\"1000.0 500.0, 250.0000000000001 66.98729810778059, 249.99999999999977 933.0127018922192\" mask=\"url(#small-triangle-mask)\" fill=\"white\" class=\"ap-play-btn-fill\"></polygon><polyline points=\"673.2050807568878 400.0, 326.7949192431123 600.0\" stroke=\"white\" stroke-width=\"90\" class=\"ap-play-btn-stroke\"></polyline></svg></span></div></div></div>`, 22);\nvar StartOverlay = props => {\n const e = f => {\n return e => {\n e.preventDefault();\n f(e);\n };\n };\n return (() => {\n const _el$ = _tmpl$$3.cloneNode(true);\n addEventListener(_el$, \"click\", e(props.onClick));\n return _el$;\n })();\n};\ndelegateEvents([\"click\"]);\n\nconst _tmpl$$2 = /*#__PURE__*/template(`<li><kbd>space</kbd> - pause / resume</li>`, 4),\n _tmpl$2$1 = /*#__PURE__*/template(`<li><kbd>←</kbd> / <kbd>→</kbd> - rewind / fast-forward by 5 seconds</li>`, 6),\n _tmpl$3 = /*#__PURE__*/template(`<li><kbd>Shift</kbd> + <kbd>←</kbd> / <kbd>→</kbd> - rewind / fast-forward by 10%</li>`, 8),\n _tmpl$4 = /*#__PURE__*/template(`<li><kbd>[</kbd> / <kbd>]</kbd> - jump to the previous / next marker</li>`, 6),\n _tmpl$5 = /*#__PURE__*/template(`<li><kbd>0</kbd>, <kbd>1</kbd>, <kbd>2</kbd> ... <kbd>9</kbd> - jump to 0%, 10%, 20% ... 90%</li>`, 10),\n _tmpl$6 = /*#__PURE__*/template(`<li><kbd>,</kbd> / <kbd>.</kbd> - step back / forward, a frame at a time (when paused)</li>`, 6),\n _tmpl$7 = /*#__PURE__*/template(`<li><kbd>m</kbd> - mute / unmute audio</li>`, 4),\n _tmpl$8 = /*#__PURE__*/template(`<div class=\"ap-overlay ap-overlay-help\"><div><div><p>Keyboard shortcuts</p><ul><li><kbd>f</kbd> - toggle fullscreen mode</li><li><kbd>k</kbd> - toggle keystroke overlay</li><li><kbd>?</kbd> - show this help popup</li></ul></div></div></div>`, 22);\nvar HelpOverlay = props => {\n const e = f => {\n return e => {\n e.preventDefault();\n f(e);\n };\n };\n return (() => {\n const _el$ = _tmpl$8.cloneNode(true),\n _el$2 = _el$.firstChild,\n _el$3 = _el$2.firstChild,\n _el$4 = _el$3.firstChild,\n _el$5 = _el$4.nextSibling,\n _el$10 = _el$5.firstChild,\n _el$11 = _el$10.nextSibling,\n _el$13 = _el$11.nextSibling;\n addEventListener(_el$, \"click\", e(props.onClose));\n _el$2.$$click = e => {\n e.stopPropagation();\n };\n insert(_el$5, createComponent(Show, {\n get when() {\n return props.isPausable;\n },\n get children() {\n return _tmpl$$2.cloneNode(true);\n }\n }), _el$10);\n insert(_el$5, createComponent(Show, {\n get when() {\n return props.isSeekable;\n },\n get children() {\n return [_tmpl$2$1.cloneNode(true), _tmpl$3.cloneNode(true), _tmpl$4.cloneNode(true), _tmpl$5.cloneNode(true), _tmpl$6.cloneNode(true)];\n }\n }), _el$10);\n insert(_el$5, createComponent(Show, {\n get when() {\n return props.hasAudio;\n },\n get children() {\n return _tmpl$7.cloneNode(true);\n }\n }), _el$13);\n return _el$;\n })();\n};\ndelegateEvents([\"click\"]);\n\nconst _tmpl$$1 = /*#__PURE__*/template(`<div><kbd></kbd></div>`, 4),\n _tmpl$2 = /*#__PURE__*/template(`<div class=\"ap-overlay ap-overlay-keystrokes\"></div>`, 2);\nconst VISIBLE_MS = 2000;\nconst FADE_MS = 700;\nfunction KeystrokePill(props) {\n const [isFading, setIsFading] = createSignal(false);\n createEffect(() => {\n const {\n id\n } = props.keystroke;\n // Subscribe to append/increment bumps so the fade timer restarts.\n props.keystroke.rev();\n setIsFading(false);\n const fadeTimeoutId = setTimeout(function () {\n setIsFading(true);\n }, VISIBLE_MS);\n const expireTimeoutId = setTimeout(function () {\n props.onExpired(id);\n }, VISIBLE_MS + FADE_MS);\n onCleanup(() => {\n clearTimeout(fadeTimeoutId);\n clearTimeout(expireTimeoutId);\n });\n });\n return (() => {\n const _el$ = _tmpl$$1.cloneNode(true),\n _el$2 = _el$.firstChild;\n insert(_el$2, () => props.keystroke.label());\n createRenderEffect(() => className(_el$, isFading() ? \"ap-keystroke-pill fading\" : \"ap-keystroke-pill\"));\n return _el$;\n })();\n}\nvar KeystrokesOverlay = props => {\n return (() => {\n const _el$3 = _tmpl$2.cloneNode(true);\n insert(_el$3, createComponent(For, {\n get each() {\n return props.keystrokes;\n },\n children: keystroke => createComponent(KeystrokePill, {\n keystroke: keystroke,\n get onExpired() {\n return props.onExpired;\n }\n })\n }));\n createRenderEffect(() => _el$3.style.setProperty(\"--ap-keystrokes-bottom\", `${(props.bottomOffset ?? 0) + 12}px`));\n return _el$3;\n })();\n};\n\nconst controlSeqs = Object.fromEntries(Array.from({\n length: 26\n}, (_, i) => {\n const char = String.fromCharCode(i + 1);\n const key = String.fromCharCode(97 + i);\n return [char, `C-${key}`];\n}));\nconst basicSeqs = {\n ...controlSeqs,\n \"\\b\": \"Back\",\n \"\\r\": \"Ret\",\n \"\\t\": \"Tab\",\n \"\\u001b\": \"Esc\",\n \"\\u007f\": \"Back\"\n};\nconst singles = {\n \" \": \"Spc\"\n};\nconst functionalKeys = {\n 57358: \"Caps\",\n 57359: \"Scroll\",\n 57360: \"Num\",\n 57361: \"Print\",\n 57362: \"Pause\",\n 57363: \"Menu\",\n 57414: \"Enter\",\n 57421: \"PgUp\",\n 57422: \"PgDn\"\n};\nconst arrowKeys = {\n up: \"↑\",\n down: \"↓\",\n left: \"←\",\n right: \"→\"\n};\nconst csiFinalKeys = {\n A: arrowKeys.up,\n B: arrowKeys.down,\n C: arrowKeys.right,\n D: arrowKeys.left,\n F: \"End\",\n H: \"Home\",\n P: \"F1\",\n Q: \"F2\",\n R: \"F3\",\n S: \"F4\"\n};\nconst csiTildeKeys = {\n 2: \"Ins\",\n 3: \"Del\",\n 5: \"PgUp\",\n 6: \"PgDn\",\n 15: \"F5\",\n 17: \"F6\",\n 18: \"F7\",\n 19: \"F8\",\n 20: \"F9\",\n 21: \"F10\",\n 23: \"F11\",\n 24: \"F12\"\n};\nfunction addModifierPrefix(key, modifier) {\n const mod = Number.parseInt(modifier.split(\":\")[0], 10);\n if (!Number.isFinite(mod) || mod <= 1) {\n return key;\n }\n const bits = mod - 1;\n const parts = [];\n if (bits & 4) parts.push(\"C\");\n if (bits & 2) parts.push(\"A\");\n if (bits & 1) parts.push(\"S\");\n return parts.length === 0 ? key : `${parts.join(\"-\")}-${key}`;\n}\nfunction codepointToKey(codepoint) {\n if (codepoint in functionalKeys) {\n return functionalKeys[codepoint];\n }\n const char = String.fromCodePoint(codepoint);\n if (char in basicSeqs) {\n return basicSeqs[char];\n }\n if (char in singles) {\n return singles[char];\n }\n return char;\n}\nfunction formatCsiSequence(seq) {\n const csiUAlt = seq.match(/^(\\d+);;(\\d+)u$/);\n if (csiUAlt !== null) {\n return `A-${codepointToKey(Number.parseInt(csiUAlt[2], 10))}`;\n }\n const csiU = seq.match(/^(\\d+)(?:;([\\d:]+))?u$/);\n if (csiU !== null) {\n const key = codepointToKey(Number.parseInt(csiU[1], 10));\n return csiU[2] === undefined ? key : addModifierPrefix(key, csiU[2]);\n }\n const finalKey = seq.match(/^O?([A-Z])$/);\n if (finalKey !== null && finalKey[1] in csiFinalKeys) {\n return csiFinalKeys[finalKey[1]];\n }\n const tildeKey = seq.match(/^(\\d+)~$/);\n if (tildeKey !== null && tildeKey[1] in csiTildeKeys) {\n return csiTildeKeys[tildeKey[1]];\n }\n const modifyOtherKeys = seq.match(/^27;([\\d:]+);(\\d+)~$/);\n if (modifyOtherKeys !== null) {\n const key = codepointToKey(Number.parseInt(modifyOtherKeys[2], 10));\n return addModifierPrefix(key, modifyOtherKeys[1]);\n }\n const modifiedFinal = seq.match(/^(?:1;)?([\\d:]+)([A-Z])$/);\n if (modifiedFinal !== null && modifiedFinal[2] in csiFinalKeys) {\n return addModifierPrefix(csiFinalKeys[modifiedFinal[2]], modifiedFinal[1]);\n }\n const modifiedTilde = seq.match(/^(\\d+);([\\d:]+)~$/);\n if (modifiedTilde !== null && modifiedTilde[1] in csiTildeKeys) {\n return addModifierPrefix(csiTildeKeys[modifiedTilde[1]], modifiedTilde[2]);\n }\n return \"\";\n}\nfunction formatEscapeSequence(data) {\n const seq = data.slice(1);\n if (seq.length === 1) {\n if (seq in basicSeqs) {\n return \"A-\" + basicSeqs[seq];\n }\n return seq in singles ? \"A-\" + singles[seq] : \"A-\" + seq;\n }\n if (seq.startsWith(\"[\")) {\n return formatCsiSequence(seq.slice(1));\n }\n if (seq.startsWith(\"O\")) {\n return formatCsiSequence(seq);\n }\n return \"\";\n}\nfunction formatKeystroke(data) {\n if (data in basicSeqs) {\n return {\n kind: \"special\",\n label: basicSeqs[data]\n };\n }\n if (data.length === 1) {\n if (data in singles) {\n return {\n kind: \"special\",\n label: singles[data]\n };\n }\n return {\n kind: \"text\",\n label: data\n };\n }\n if (data.startsWith(\"\\u001b\")) {\n const key = formatEscapeSequence(data);\n if (key !== \"\") {\n return {\n kind: \"special\",\n label: key\n };\n }\n }\n return null;\n}\n\nconst _tmpl$ = /*#__PURE__*/template(`<div class=\"ap-wrapper\" tabindex=\"-1\"><div></div></div>`, 4);\nconst CONTROL_BAR_HEIGHT = 32; // must match height of div.ap-control-bar in CSS\nvar Player = props => {\n const logger = props.logger;\n const core = props.core;\n const autoPlay = props.autoPlay;\n const charW = props.charW;\n const charH = props.charH;\n const bordersW = props.bordersW;\n const bordersH = props.bordersH;\n const themeOption = props.theme ?? \"auto/asciinema\";\n const preferEmbeddedTheme = themeOption.slice(0, 5) === \"auto/\";\n const themeName = preferEmbeddedTheme ? themeOption.slice(5) : themeOption;\n const [terminalSize, setTerminalSize] = createTerminalSizeSignal(props.cols, props.rows);\n const [containerSize, setContainerSize] = createContainerSizeSignal();\n const [isPausable, setIsPausable] = createSignal(true);\n const [isSeekable, setIsSeekable] = createSignal(true);\n const [isFullscreen, setIsFullscreen] = createSignal(false);\n const [currentTime, setCurrentTime] = createSignal(null);\n const [remainingTime, setRemainingTime] = createSignal(null);\n const [progress, setProgress] = createSignal(null);\n const [isPlaying, setIsPlaying] = createSignal(false);\n const [isMuted, setIsMuted] = createSignal(undefined);\n const [wasPlaying, setWasPlaying] = createSignal(false);\n const [overlay, setOverlay] = createSignal(!autoPlay ? \"start\" : null);\n const [infoMessage, setInfoMessage] = createSignal(null);\n const [blinking, setBlinking] = createSignal(false);\n const [duration, setDuration] = createSignal(null);\n const [markers, setMarkers] = createSignal([]);\n const [userActive, setUserActive] = createSignal(false);\n const [isHelpVisible, setIsHelpVisible] = createSignal(false);\n const [originalTheme, setOriginalTheme] = createSignal(null);\n const terminalCols = createMemo(() => terminalSize().cols || 80);\n const terminalRows = createMemo(() => terminalSize().rows || 24);\n const controlBarHeight = () => props.controls === false ? 0 : CONTROL_BAR_HEIGHT;\n const [isKeystrokeOverlayEnabled, setKeystrokeOverlayEnabled] = createSignal(props.keystrokeOverlay !== false);\n const [keystrokes, setKeystrokes] = createSignal([]);\n const controlsVisible = () => props.controls === true || props.controls === \"auto\" && userActive();\n let nextKeystrokeId = 1;\n let userActivityTimeoutId;\n let timeUpdateIntervalId;\n let wrapperRef;\n let playerRef;\n let controlBarRef;\n let resizeObserver;\n function onPlaying() {\n setBlinking(true);\n startTimeUpdates();\n }\n function onStopped() {\n setBlinking(false);\n stopTimeUpdates();\n updateTime();\n }\n const onCoreReady = ({\n isPausable,\n isSeekable\n }) => {\n batch(() => {\n setIsPausable(isPausable);\n setIsSeekable(isSeekable);\n });\n };\n const onCoreMetadata = meta => {\n batch(() => {\n if (meta.duration !== undefined) {\n setDuration(meta.duration);\n setCurrentTime(0);\n setRemainingTime(meta.duration);\n setProgress(0);\n }\n if (meta.markers !== undefined) {\n setMarkers(meta.markers);\n }\n if (meta.hasAudio !== undefined) {\n setIsMuted(meta.hasAudio ? false : undefined);\n }\n });\n };\n const onCoreReset = ({\n size,\n theme\n }) => {\n batch(() => {\n setTerminalSize(size);\n if (theme !== undefined) {\n setOriginalTheme(theme);\n }\n });\n };\n const onCoreResize = size => {\n setTerminalSize(size);\n };\n const onCorePlay = () => {\n setOverlay(null);\n };\n const onCorePlaying = () => {\n batch(() => {\n setIsPlaying(true);\n setWasPlaying(true);\n setOverlay(null);\n onPlaying();\n });\n };\n const onCorePause = () => {\n batch(() => {\n setIsPlaying(false);\n onStopped();\n });\n };\n const onCoreLoading = () => {\n batch(() => {\n setIsPlaying(false);\n onStopped();\n setOverlay(\"loader\");\n clearKeystrokes();\n });\n };\n const onCoreOffline = ({\n message\n }) => {\n batch(() => {\n setIsPlaying(false);\n onStopped();\n clearKeystrokes();\n if (message !== undefined) {\n setInfoMessage(message);\n setOverlay(\"info\");\n }\n });\n };\n const onCoreMuted = muted => {\n setIsMuted(muted);\n };\n const stats = {\n terminal: {\n renders: 0\n }\n };\n const onCoreEnded = ({\n message\n }) => {\n batch(() => {\n setIsPlaying(false);\n onStopped();\n if (message !== undefined) {\n setInfoMessage(message);\n setOverlay(\"info\");\n }\n });\n logger.debug(\"stats\", stats.terminal);\n };\n const onCoreError = () => {\n clearKeystrokes();\n setOverlay(\"error\");\n };\n const onCoreInput = ({\n data\n }) => {\n if (!isKeystrokeOverlayEnabled()) {\n return;\n }\n const keystroke = formatKeystroke(data);\n if (keystroke === null) {\n return;\n }\n const currentKeystrokes = keystrokes();\n const latestKeystroke = currentKeystrokes[currentKeystrokes.length - 1];\n if (latestKeystroke?.kind === \"text\" && keystroke.kind === \"text\") {\n latestKeystroke.append(keystroke.label);\n return;\n }\n if (latestKeystroke?.kind === \"special\" && keystroke.kind === \"special\" && latestKeystroke.key === keystroke.label) {\n latestKeystroke.increment();\n return;\n }\n setKeystrokes([...currentKeystrokes, createKeystroke(keystroke)].slice(-4));\n };\n const onCoreSeeked = () => {\n updateTime();\n clearKeystrokes();\n };\n const clearKeystrokes = () => {\n setKeystrokes([]);\n };\n const removeKeystroke = id => {\n setKeystrokes(keystrokes => keystrokes.filter(keystroke => keystroke.id !== id));\n };\n const createKeystroke = ({\n kind,\n label\n }) => {\n const [value, setValue] = createSignal(label);\n const [count, setCount] = createSignal(1);\n const [rev, setRev] = createSignal(0);\n return {\n id: nextKeystrokeId++,\n kind,\n key: label,\n label: () => count() === 1 ? value() : `${value()} × ${count()}`,\n rev,\n append: label => {\n setValue(value => (value + label).slice(-10));\n setRev(rev => rev + 1);\n },\n increment: () => {\n setCount(count => count + 1);\n setRev(rev => rev + 1);\n }\n };\n };\n core.addEventListener(\"ready\", onCoreReady);\n core.addEventListener(\"metadata\", onCoreMetadata);\n core.addEventListener(\"play\", onCorePlay);\n core.addEventListener(\"playing\", onCorePlaying);\n core.addEventListener(\"pause\", onCorePause);\n core.addEventListener(\"loading\", onCoreLoading);\n core.addEventListener(\"offline\", onCoreOffline);\n core.addEventListener(\"muted\", onCoreMuted);\n core.addEventListener(\"ended\", onCoreEnded);\n core.addEventListener(\"error\", onCoreError);\n core.addEventListener(\"input\", onCoreInput);\n core.addEventListener(\"seeked\", onCoreSeeked);\n core.addEventListener(\"reset\", onCoreReset);\n core.addEventListener(\"resize\", onCoreResize);\n const setupResizeObserver = () => {\n resizeObserver = new ResizeObserver(debounce(_entries => {\n setContainerSize({\n width: wrapperRef.offsetWidth,\n height: wrapperRef.offsetHeight\n });\n wrapperRef.dispatchEvent(new CustomEvent(\"resize\", {\n detail: {\n el: playerRef\n }\n }));\n }, 10));\n resizeObserver.observe(wrapperRef);\n };\n onMount(async () => {\n logger.info(\"view: mounted\");\n logger.debug(\"view: font measurements\", {\n charW,\n charH\n });\n setupResizeObserver();\n setContainerSize({\n width: wrapperRef.offsetWidth,\n height: wrapperRef.offsetHeight\n });\n });\n onCleanup(() => {\n core.removeEventListener(\"ready\", onCoreReady);\n core.removeEventListener(\"metadata\", onCoreMetadata);\n core.removeEventListener(\"play\", onCorePlay);\n core.removeEventListener(\"playing\", onCorePlaying);\n core.removeEventListener(\"pause\", onCorePause);\n core.removeEventListener(\"loading\", onCoreLoading);\n core.removeEventListener(\"offline\", onCoreOffline);\n core.removeEventListener(\"muted\", onCoreMuted);\n core.removeEventListener(\"ended\", onCoreEnded);\n core.removeEventListener(\"error\", onCoreError);\n core.removeEventListener(\"input\", onCoreInput);\n core.removeEventListener(\"seeked\", onCoreSeeked);\n core.removeEventListener(\"reset\", onCoreReset);\n core.removeEventListener(\"resize\", onCoreResize);\n core.stop();\n stopTimeUpdates();\n resizeObserver.disconnect();\n });\n const terminalElementSize = createMemo(() => {\n const terminalW = charW * terminalCols() + bordersW;\n const terminalH = charH * terminalRows() + bordersH;\n let fit = props.fit ?? \"width\";\n const currentContainerSize = containerSize();\n if (fit === \"both\" || isFullscreen()) {\n const containerRatio = currentContainerSize.width / (currentContainerSize.height - controlBarHeight());\n const terminalRatio = terminalW / terminalH;\n if (containerRatio > terminalRatio) {\n fit = \"height\";\n } else {\n fit = \"width\";\n }\n }\n if (fit === false || fit === \"none\") {\n return {};\n } else if (fit === \"width\") {\n const scale = currentContainerSize.width / terminalW;\n return {\n scale: scale,\n width: currentContainerSize.width,\n height: terminalH * scale + controlBarHeight()\n };\n } else if (fit === \"height\") {\n const scale = (currentContainerSize.height - controlBarHeight()) / terminalH;\n return {\n scale: scale,\n width: terminalW * scale,\n height: currentContainerSize.height\n };\n } else {\n throw new Error(`unsupported fit mode: ${fit}`);\n }\n });\n const onFullscreenChange = () => {\n setIsFullscreen(document.fullscreenElement ?? document.webkitFullscreenElement);\n };\n const toggleFullscreen = () => {\n if (isFullscreen()) {\n (document.exitFullscreen ?? document.webkitExitFullscreen ?? (() => {})).apply(document);\n } else {\n (wrapperRef.requestFullscreen ?? wrapperRef.webkitRequestFullscreen ?? (() => {})).apply(wrapperRef);\n }\n };\n const toggleHelp = () => {\n if (isHelpVisible()) {\n setIsHelpVisible(false);\n } else {\n core.pause();\n setIsHelpVisible(true);\n }\n };\n const toggleKeystrokeOverlay = () => {\n if (isKeystrokeOverlayEnabled()) {\n clearKeystrokes();\n setKeystrokeOverlayEnabled(false);\n } else {\n setKeystrokeOverlayEnabled(true);\n }\n };\n const onKeyDown = e => {\n if (e.altKey || e.metaKey || e.ctrlKey) {\n return;\n }\n\n // Let a focused control button activate itself on Space/Enter rather than\n // also triggering the global keyboard shortcuts.\n if ((e.key == \" \" || e.key == \"Enter\") && e.target instanceof HTMLButtonElement) {\n return;\n }\n if (e.key == \" \") {\n togglePlay();\n } else if (e.key == \",\") {\n core.step(-1).then(updateTime);\n } else if (e.key == \".\") {\n core.step().then(updateTime);\n } else if (e.key == \"f\") {\n toggleFullscreen();\n } else if (e.key == \"m\") {\n toggleMuted();\n } else if (e.key == \"[\") {\n core.seek({\n marker: \"prev\"\n });\n } else if (e.key == \"]\") {\n core.seek({\n marker: \"next\"\n });\n } else if (e.key.charCodeAt(0) >= 48 && e.key.charCodeAt(0) <= 57) {\n const pos = (e.key.charCodeAt(0) - 48) / 10;\n core.seek(`${pos * 100}%`);\n } else if (e.key == \"?\") {\n toggleHelp();\n } else if (e.key == \"k\") {\n toggleKeystrokeOverlay();\n } else if (e.key == \"ArrowLeft\") {\n if (e.shiftKey) {\n core.seek(\"<<<\");\n } else {\n core.seek(\"<<\");\n }\n } else if (e.key == \"ArrowRight\") {\n if (e.shiftKey) {\n core.seek(\">>>\");\n } else {\n core.seek(\">>\");\n }\n } else if (e.key == \"Escape\") {\n setIsHelpVisible(false);\n } else {\n return;\n }\n e.stopPropagation();\n e.preventDefault();\n };\n const wrapperOnMouseMove = () => {\n if (isFullscreen()) {\n onUserActive(true);\n }\n };\n const playerOnMouseLeave = () => {\n if (!isFullscreen()) {\n onUserActive(false);\n }\n };\n const startTimeUpdates = () => {\n clearInterval(timeUpdateIntervalId);\n timeUpdateIntervalId = setInterval(updateTime, 100);\n };\n const stopTimeUpdates = () => {\n clearInterval(timeUpdateIntervalId);\n };\n const updateTime = async () => {\n const newCurrentTime = await core.getCurrentTime();\n const newRemainingTime = await core.getRemainingTime();\n const newProgress = await core.getProgress();\n batch(() => {\n setCurrentTime(newCurrentTime);\n setRemainingTime(newRemainingTime);\n setProgress(newProgress);\n });\n };\n const onUserActive = show => {\n clearTimeout(userActivityTimeoutId);\n if (show) {\n userActivityTimeoutId = setTimeout(() => onUserActive(false), 2000);\n }\n setUserActive(show);\n };\n const embeddedTheme = createMemo(() => preferEmbeddedTheme ? originalTheme() : null);\n const playerStyle = () => {\n const style = {};\n if ((props.fit === false || props.fit === \"none\") && props.terminalFontSize !== undefined) {\n if (props.terminalFontSize === \"small\") {\n style[\"font-size\"] = \"12px\";\n } else if (props.terminalFontSize === \"medium\") {\n style[\"font-size\"] = \"18px\";\n } else if (props.terminalFontSize === \"big\") {\n style[\"font-size\"] = \"24px\";\n } else {\n style[\"font-size\"] = props.terminalFontSize;\n }\n }\n const size = terminalElementSize();\n if (size.width !== undefined) {\n style[\"width\"] = `${size.width}px`;\n style[\"height\"] = `${size.height}px`;\n }\n if (props.terminalFontFamily !== undefined) {\n style[\"--term-font-family\"] = props.terminalFontFamily;\n }\n const themeColors = embeddedTheme();\n if (themeColors) {\n style[\"--term-color-foreground\"] = themeColors.foreground;\n style[\"--term-color-background\"] = themeColors.background;\n }\n return style;\n };\n const play = () => {\n core.play();\n };\n const togglePlay = () => {\n if (isPlaying()) {\n core.pause();\n } else {\n core.play();\n }\n };\n const toggleMuted = () => {\n if (isMuted() === true) {\n core.unmute();\n } else {\n core.mute();\n }\n };\n const seek = pos => {\n core.seek(pos);\n };\n const playerClass = () => `ap-player ap-default-term-ff asciinema-player-theme-${themeName}`;\n const terminalScale = () => terminalElementSize()?.scale;\n const el = (() => {\n const _el$ = _tmpl$.cloneNode(true),\n _el$2 = _el$.firstChild;\n const _ref$ = wrapperRef;\n typeof _ref$ === \"function\" ? use(_ref$, _el$) : wrapperRef = _el$;\n _el$.addEventListener(\"webkitfullscreenchange\", onFullscreenChange);\n _el$.addEventListener(\"fullscreenchange\", onFullscreenChange);\n _el$.$$mousemove = wrapperOnMouseMove;\n _el$.$$keydown = onKeyDown;\n const _ref$2 = playerRef;\n typeof _ref$2 === \"function\" ? use(_ref$2, _el$2) : playerRef = _el$2;\n _el$2.$$mousemove = () => onUserActive(true);\n _el$2.addEventListener(\"mouseleave\", playerOnMouseLeave);\n insert(_el$2, createComponent(Terminal, {\n get cols() {\n return terminalCols();\n },\n get rows() {\n return terminalRows();\n },\n get scale() {\n return terminalScale();\n },\n get blinking() {\n return blinking();\n },\n get cursorMode() {\n return props.cursorMode;\n },\n get boldIsBright() {\n return props.boldIsBright;\n },\n get adaptivePalette() {\n return props.adaptivePalette;\n },\n get lineHeight() {\n return props.terminalLineHeight;\n },\n preferEmbeddedTheme: preferEmbeddedTheme,\n core: core,\n logger: logger,\n get onReady() {\n return props.onTerminalReady;\n },\n get stats() {\n return stats.terminal;\n }\n }), null);\n insert(_el$2, createComponent(Show, {\n get when() {\n return props.controls !== false;\n },\n get children() {\n return createComponent(ControlBar, {\n get duration() {\n return duration();\n },\n get currentTime() {\n return currentTime();\n },\n get remainingTime() {\n return remainingTime();\n },\n get progress() {\n return progress();\n },\n get markers() {\n return markers();\n },\n get isPlaying() {\n return isPlaying() || overlay() == \"loader\";\n },\n get isPausable() {\n return isPausable();\n },\n get isSeekable() {\n return isSeekable();\n },\n get isMuted() {\n return isMuted();\n },\n onPlayClick: togglePlay,\n onFullscreenClick: toggleFullscreen,\n onHelpClick: toggleHelp,\n onSeekClick: seek,\n onMuteClick: toggleMuted,\n ref(r$) {\n const _ref$3 = controlBarRef;\n typeof _ref$3 === \"function\" ? _ref$3(r$) : controlBarRef = r$;\n }\n });\n }\n }), null);\n insert(_el$2, createComponent(Show, {\n get when() {\n return keystrokes().length > 0;\n },\n get children() {\n return createComponent(KeystrokesOverlay, {\n get bottomOffset() {\n return controlBarHeight();\n },\n get keystrokes() {\n return keystrokes();\n },\n onExpired: removeKeystroke\n });\n }\n }), null);\n insert(_el$2, createComponent(Switch, {\n get children() {\n return [createComponent(Match, {\n get when() {\n return overlay() == \"start\";\n },\n get children() {\n return createComponent(StartOverlay, {\n onClick: play\n });\n }\n }), createComponent(Match, {\n get when() {\n return overlay() == \"loader\";\n },\n get children() {\n return createComponent(LoaderOverlay, {});\n }\n }), createComponent(Match, {\n get when() {\n return overlay() == \"error\";\n },\n get children() {\n return createComponent(ErrorOverlay, {});\n }\n })];\n }\n }), null);\n insert(_el$2, createComponent(Transition, {\n name: \"slide\",\n get children() {\n return createComponent(Show, {\n get when() {\n return overlay() == \"info\";\n },\n get children() {\n return createComponent(InfoOverlay, {\n get message() {\n return infoMessage();\n },\n get wasPlaying() {\n return wasPlaying();\n }\n });\n }\n });\n }\n }), null);\n insert(_el$2, createComponent(Show, {\n get when() {\n return isHelpVisible();\n },\n get children() {\n return createComponent(HelpOverlay, {\n onClose: () => setIsHelpVisible(false),\n get isPausable() {\n return isPausable();\n },\n get isSeekable() {\n return isSeekable();\n },\n get hasAudio() {\n return isMuted() !== undefined;\n }\n });\n }\n }), null);\n createRenderEffect(_p$ => {\n const _v$ = !!controlsVisible(),\n _v$2 = playerClass(),\n _v$3 = playerStyle();\n _v$ !== _p$._v$ && _el$.classList.toggle(\"ap-hud\", _p$._v$ = _v$);\n _v$2 !== _p$._v$2 && className(_el$2, _p$._v$2 = _v$2);\n _p$._v$3 = style(_el$2, _v$3, _p$._v$3);\n return _p$;\n }, {\n _v$: undefined,\n _v$2: undefined,\n _v$3: undefined\n });\n return _el$;\n })();\n return el;\n};\nfunction createTerminalSizeSignal(cols, rows) {\n return createSignal({\n cols,\n rows\n }, {\n equals: (newVal, oldVal) => newVal.cols === oldVal.cols && newVal.rows === oldVal.rows\n });\n}\nfunction createContainerSizeSignal() {\n return createSignal({\n width: 0,\n height: 0\n }, {\n equals: (newVal, oldVal) => newVal.width === oldVal.width && newVal.height === oldVal.height\n });\n}\ndelegateEvents([\"keydown\", \"mousemove\"]);\n\nfunction mount(core, elem, opts = {}) {\n const metrics = measureTerminal(opts.terminalFontFamily, opts.terminalLineHeight);\n const props = {\n core: core,\n logger: opts.logger,\n cols: opts.cols,\n rows: opts.rows,\n fit: opts.fit,\n controls: opts.controls,\n cursorMode: opts.cursorMode,\n keystrokeOverlay: opts.keystrokeOverlay,\n autoPlay: opts.autoPlay,\n boldIsBright: opts.boldIsBright,\n adaptivePalette: opts.adaptivePalette,\n terminalFontSize: opts.terminalFontSize,\n terminalFontFamily: opts.terminalFontFamily,\n terminalLineHeight: opts.terminalLineHeight,\n theme: opts.theme,\n onTerminalReady: opts.onTerminalReady,\n ...metrics\n };\n let el;\n const dispose = render(() => {\n el = createComponent(Player, props);\n return el;\n }, elem);\n return {\n el: el,\n dispose: dispose\n };\n}\nfunction measureTerminal(fontFamily, lineHeight) {\n const cols = 80;\n const rows = 24;\n const playerDiv = document.createElement(\"div\");\n playerDiv.className = \"ap-default-term-ff\";\n playerDiv.style.height = \"0px\";\n playerDiv.style.overflow = \"hidden\";\n playerDiv.style.fontSize = \"15px\"; // must match font-size of div.asciinema-player in CSS\n\n if (fontFamily !== undefined) {\n playerDiv.style.setProperty(\"--term-font-family\", fontFamily);\n }\n const termDiv = document.createElement(\"div\");\n termDiv.className = \"ap-term\";\n termDiv.style.width = `${cols}ch`;\n termDiv.style.height = `${rows * (lineHeight ?? 1.3333333333)}em`;\n termDiv.style.fontSize = \"100%\";\n playerDiv.appendChild(termDiv);\n document.body.appendChild(playerDiv);\n const metrics = {\n charW: termDiv.clientWidth / cols,\n charH: termDiv.clientHeight / rows,\n bordersW: termDiv.offsetWidth - termDiv.clientWidth,\n bordersH: termDiv.offsetHeight - termDiv.clientHeight\n };\n document.body.removeChild(playerDiv);\n return metrics;\n}\n\nconst CORE_OPTS = [\"audioUrl\", \"autoPlay\", \"autoplay\", \"cols\", \"idleTimeLimit\", \"loop\", \"markers\", \"pauseOnMarkers\", \"poster\", \"preload\", \"rows\", \"speed\", \"startAt\"];\nconst UI_OPTS = [\"autoPlay\", \"autoplay\", \"boldIsBright\", \"cols\", \"adaptivePalette\", \"controls\", \"cursorMode\", \"fit\", \"keystrokeOverlay\", \"rows\", \"terminalFontFamily\", \"terminalFontSize\", \"terminalLineHeight\", \"theme\"];\nfunction coreOpts(inputOpts, overrides = {}) {\n const opts = Object.fromEntries(Object.entries(inputOpts).filter(([key]) => CORE_OPTS.includes(key)));\n opts.autoPlay ??= opts.autoplay;\n opts.speed ??= 1.0;\n return {\n ...opts,\n ...overrides\n };\n}\nfunction uiOpts(inputOpts, overrides = {}) {\n const opts = Object.fromEntries(Object.entries(inputOpts).filter(([key]) => UI_OPTS.includes(key)));\n opts.autoPlay ??= opts.autoplay;\n opts.adaptivePalette ??= false;\n opts.controls ??= \"auto\";\n opts.cursorMode ??= \"blinking\";\n opts.keystrokeOverlay ??= false;\n if (![\"blinking\", \"steady\", \"hidden\"].includes(opts.cursorMode)) {\n throw new Error(`unsupported cursor mode: ${opts.cursorMode}`);\n }\n if (typeof opts.keystrokeOverlay !== \"boolean\") {\n throw new Error(`unsupported keystroke overlay option: ${opts.keystrokeOverlay}`);\n }\n return {\n ...opts,\n ...overrides\n };\n}\n\nexport { coreOpts as c, mount as m, uiOpts as u };\n","import { C as Core } from './core-BSn7GtYU.js';\nimport { c as coreOpts, m as mount, u as uiOpts } from './opts-Dj5f5MR1.js';\nimport { D as DummyLogger } from './logging-DeB0koVt.js';\n\nfunction create(src, elem, opts = {}) {\n const logger = opts.logger ?? new DummyLogger();\n const core = new Core(src, coreOpts(opts, {\n logger\n }));\n const onTerminalReady = () => core.terminalReady();\n const {\n el,\n dispose\n } = mount(core, elem, uiOpts(opts, {\n logger,\n onTerminalReady\n }));\n const ready = core.init();\n void ready.catch(() => {});\n const player = {\n el,\n dispose,\n getCurrentTime: () => core.getCurrentTime(),\n getDuration: () => core.getDuration(),\n play: () => core.play(),\n pause: () => core.pause(),\n seek: pos => core.seek(pos)\n };\n player.addEventListener = (name, callback) => {\n return core.addEventListener(name, callback.bind(player));\n };\n return player;\n}\n\nexport { create };\n","import { create, DataSource } from \"asciinema-player\";\n\nimport \"asciinema-player/dist/bundle/asciinema-player.css\";\n\nimport { CSSProperties, FC, useEffect, useRef } from \"react\";\n\ninterface AsciinemaPlayerBaseProps {\n id?: string;\n rows?: number;\n cols?: number;\n fit?: \"width\" | \"height\" | \"both\" | \"none\" | false;\n style?: CSSProperties;\n speed?: number;\n autoPlay?: boolean;\n loop?: boolean;\n theme?: string;\n idleTimeLimit?: number;\n className?: string;\n}\n\n// A session recorded as a `script -m advanced` input/output/timing triple.\ninterface AsciinemaTimingProps extends AsciinemaPlayerBaseProps {\n input: string;\n output: string;\n timing: string;\n cast?: never;\n}\n\n// A session recorded as a single asciicast v2 document.\ninterface AsciinemaCastProps extends AsciinemaPlayerBaseProps {\n cast: string;\n input?: never;\n output?: never;\n timing?: never;\n}\n\ntype AsciinemaPlayerProps = AsciinemaTimingProps | AsciinemaCastProps;\n\nconst AsciinemaPlayerImpl: FC<AsciinemaPlayerProps> = ({\n id,\n rows,\n cols,\n input,\n output,\n timing,\n cast,\n fit,\n speed,\n autoPlay,\n loop,\n theme,\n idleTimeLimit = 2,\n style,\n}) => {\n const playerContainerRef = useRef<HTMLDivElement>(null);\n\n // eslint-disable-next-line tsmono/no-raw-use-effect -- baselined at rule introduction; migrate to a named hook or derived state\n useEffect(() => {\n if (!playerContainerRef.current) return;\n\n // In-memory Responses, not Blob URLs the player would fetch: the\n // viewer's CSP allows no blob: connections. Fresh per load, since a\n // Response body reads once.\n const source: DataSource =\n cast !== undefined\n ? {\n data: () => new Response(cast),\n parser: \"asciicast\",\n }\n : {\n data: () => [\n new Response(timing),\n new Response(output),\n new Response(input),\n ],\n parser: \"typescript\",\n };\n\n const player = create(source, playerContainerRef.current, {\n rows,\n cols,\n autoPlay,\n loop,\n theme,\n speed,\n idleTimeLimit,\n fit,\n });\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n player.play();\n\n return () => {\n player.dispose();\n };\n }, [\n timing,\n output,\n input,\n cast,\n rows,\n cols,\n autoPlay,\n loop,\n theme,\n speed,\n idleTimeLimit,\n fit,\n ]);\n\n return (\n <div\n id={`asciinema-player-${id || \"default\"}`}\n ref={playerContainerRef}\n style={{ ...style }}\n />\n );\n};\n\nexport default AsciinemaPlayerImpl;\nexport type { AsciinemaPlayerProps };\n"],"ignoreList":[0,1,2,3],"mappings":"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"}