@hashgraphonline/standards-sdk 0.0.84 → 0.0.85

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 (212) hide show
  1. package/dist/es/hcs-10/connections-manager.d.ts +26 -8
  2. package/dist/es/hcs-10/connections-manager.d.ts.map +1 -1
  3. package/dist/es/standards-sdk.es10.js +271 -85
  4. package/dist/es/standards-sdk.es10.js.map +1 -1
  5. package/dist/es/standards-sdk.es100.js +147 -3
  6. package/dist/es/standards-sdk.es100.js.map +1 -1
  7. package/dist/es/standards-sdk.es101.js +90 -3
  8. package/dist/es/standards-sdk.es101.js.map +1 -1
  9. package/dist/es/standards-sdk.es102.js +84 -13
  10. package/dist/es/standards-sdk.es102.js.map +1 -1
  11. package/dist/es/standards-sdk.es103.js +32 -13
  12. package/dist/es/standards-sdk.es103.js.map +1 -1
  13. package/dist/es/standards-sdk.es104.js +5 -15
  14. package/dist/es/standards-sdk.es104.js.map +1 -1
  15. package/dist/es/standards-sdk.es105.js +158 -4
  16. package/dist/es/standards-sdk.es105.js.map +1 -1
  17. package/dist/es/standards-sdk.es106.js +21 -37
  18. package/dist/es/standards-sdk.es106.js.map +1 -1
  19. package/dist/es/standards-sdk.es107.js +787 -34
  20. package/dist/es/standards-sdk.es107.js.map +1 -1
  21. package/dist/es/standards-sdk.es108.js +172 -35
  22. package/dist/es/standards-sdk.es108.js.map +1 -1
  23. package/dist/es/standards-sdk.es109.js +133 -68
  24. package/dist/es/standards-sdk.es109.js.map +1 -1
  25. package/dist/es/standards-sdk.es110.js +20 -3
  26. package/dist/es/standards-sdk.es110.js.map +1 -1
  27. package/dist/es/standards-sdk.es111.js +26 -33
  28. package/dist/es/standards-sdk.es111.js.map +1 -1
  29. package/dist/es/standards-sdk.es112.js +25 -32
  30. package/dist/es/standards-sdk.es112.js.map +1 -1
  31. package/dist/es/standards-sdk.es113.js +38 -9
  32. package/dist/es/standards-sdk.es113.js.map +1 -1
  33. package/dist/es/standards-sdk.es114.js +4 -34
  34. package/dist/es/standards-sdk.es114.js.map +1 -1
  35. package/dist/es/standards-sdk.es115.js +419 -3
  36. package/dist/es/standards-sdk.es115.js.map +1 -1
  37. package/dist/es/standards-sdk.es116.js +2 -2
  38. package/dist/es/standards-sdk.es116.js.map +1 -1
  39. package/dist/es/standards-sdk.es117.js +120 -2
  40. package/dist/es/standards-sdk.es117.js.map +1 -1
  41. package/dist/es/standards-sdk.es13.js +3 -3
  42. package/dist/es/standards-sdk.es15.js +1 -1
  43. package/dist/es/standards-sdk.es18.js +2 -2
  44. package/dist/es/standards-sdk.es19.js +3 -3
  45. package/dist/es/standards-sdk.es2.js +0 -11
  46. package/dist/es/standards-sdk.es2.js.map +1 -1
  47. package/dist/es/standards-sdk.es22.js +1692 -966
  48. package/dist/es/standards-sdk.es22.js.map +1 -1
  49. package/dist/es/standards-sdk.es23.js +36 -1767
  50. package/dist/es/standards-sdk.es23.js.map +1 -1
  51. package/dist/es/standards-sdk.es24.js +48 -36
  52. package/dist/es/standards-sdk.es24.js.map +1 -1
  53. package/dist/es/standards-sdk.es25.js +7163 -21
  54. package/dist/es/standards-sdk.es25.js.map +1 -1
  55. package/dist/es/standards-sdk.es26.js +3 -7190
  56. package/dist/es/standards-sdk.es26.js.map +1 -1
  57. package/dist/es/standards-sdk.es27.js +2 -3
  58. package/dist/es/standards-sdk.es27.js.map +1 -1
  59. package/dist/es/standards-sdk.es28.js +1041 -2
  60. package/dist/es/standards-sdk.es28.js.map +1 -1
  61. package/dist/es/standards-sdk.es29.js +4167 -5
  62. package/dist/es/standards-sdk.es29.js.map +1 -1
  63. package/dist/es/standards-sdk.es30.js +5 -4167
  64. package/dist/es/standards-sdk.es30.js.map +1 -1
  65. package/dist/es/standards-sdk.es31.js +364 -2
  66. package/dist/es/standards-sdk.es31.js.map +1 -1
  67. package/dist/es/standards-sdk.es32.js +4 -362
  68. package/dist/es/standards-sdk.es32.js.map +1 -1
  69. package/dist/es/standards-sdk.es33.js +178 -5
  70. package/dist/es/standards-sdk.es33.js.map +1 -1
  71. package/dist/es/standards-sdk.es34.js +73 -171
  72. package/dist/es/standards-sdk.es34.js.map +1 -1
  73. package/dist/es/standards-sdk.es35.js +107 -74
  74. package/dist/es/standards-sdk.es35.js.map +1 -1
  75. package/dist/es/standards-sdk.es36.js +45 -107
  76. package/dist/es/standards-sdk.es36.js.map +1 -1
  77. package/dist/es/standards-sdk.es37.js +9 -51
  78. package/dist/es/standards-sdk.es37.js.map +1 -1
  79. package/dist/es/standards-sdk.es38.js +96 -9
  80. package/dist/es/standards-sdk.es38.js.map +1 -1
  81. package/dist/es/standards-sdk.es39.js +3 -96
  82. package/dist/es/standards-sdk.es39.js.map +1 -1
  83. package/dist/es/standards-sdk.es4.js +1 -1
  84. package/dist/es/standards-sdk.es40.js +2 -4
  85. package/dist/es/standards-sdk.es40.js.map +1 -1
  86. package/dist/es/standards-sdk.es41.js +113 -2
  87. package/dist/es/standards-sdk.es41.js.map +1 -1
  88. package/dist/es/standards-sdk.es42.js +70 -109
  89. package/dist/es/standards-sdk.es42.js.map +1 -1
  90. package/dist/es/standards-sdk.es43.js +5 -73
  91. package/dist/es/standards-sdk.es43.js.map +1 -1
  92. package/dist/es/standards-sdk.es44.js +4 -5
  93. package/dist/es/standards-sdk.es44.js.map +1 -1
  94. package/dist/es/standards-sdk.es45.js +220 -4
  95. package/dist/es/standards-sdk.es45.js.map +1 -1
  96. package/dist/es/standards-sdk.es46.js +51 -214
  97. package/dist/es/standards-sdk.es46.js.map +1 -1
  98. package/dist/es/standards-sdk.es47.js +67 -56
  99. package/dist/es/standards-sdk.es47.js.map +1 -1
  100. package/dist/es/standards-sdk.es48.js +3 -69
  101. package/dist/es/standards-sdk.es48.js.map +1 -1
  102. package/dist/es/standards-sdk.es49.js +146 -177
  103. package/dist/es/standards-sdk.es49.js.map +1 -1
  104. package/dist/es/standards-sdk.es5.js +3 -3
  105. package/dist/es/standards-sdk.es50.js +26 -432
  106. package/dist/es/standards-sdk.es50.js.map +1 -1
  107. package/dist/es/standards-sdk.es51.js +57 -19
  108. package/dist/es/standards-sdk.es51.js.map +1 -1
  109. package/dist/es/standards-sdk.es52.js +44 -133
  110. package/dist/es/standards-sdk.es52.js.map +1 -1
  111. package/dist/es/standards-sdk.es53.js +9 -17
  112. package/dist/es/standards-sdk.es53.js.map +1 -1
  113. package/dist/es/standards-sdk.es54.js +61 -25
  114. package/dist/es/standards-sdk.es54.js.map +1 -1
  115. package/dist/es/standards-sdk.es55.js +6 -29
  116. package/dist/es/standards-sdk.es55.js.map +1 -1
  117. package/dist/es/standards-sdk.es56.js +13 -19
  118. package/dist/es/standards-sdk.es56.js.map +1 -1
  119. package/dist/es/standards-sdk.es57.js +7 -44
  120. package/dist/es/standards-sdk.es57.js.map +1 -1
  121. package/dist/es/standards-sdk.es58.js +45 -18
  122. package/dist/es/standards-sdk.es58.js.map +1 -1
  123. package/dist/es/standards-sdk.es59.js +2 -61
  124. package/dist/es/standards-sdk.es59.js.map +1 -1
  125. package/dist/es/standards-sdk.es60.js +121 -1274
  126. package/dist/es/standards-sdk.es60.js.map +1 -1
  127. package/dist/es/standards-sdk.es61.js +157 -133
  128. package/dist/es/standards-sdk.es61.js.map +1 -1
  129. package/dist/es/standards-sdk.es62.js +98 -88
  130. package/dist/es/standards-sdk.es62.js.map +1 -1
  131. package/dist/es/standards-sdk.es63.js +2 -84
  132. package/dist/es/standards-sdk.es63.js.map +1 -1
  133. package/dist/es/standards-sdk.es64.js +15 -31
  134. package/dist/es/standards-sdk.es64.js.map +1 -1
  135. package/dist/es/standards-sdk.es65.js +408 -5
  136. package/dist/es/standards-sdk.es65.js.map +1 -1
  137. package/dist/es/standards-sdk.es66.js +13 -159
  138. package/dist/es/standards-sdk.es66.js.map +1 -1
  139. package/dist/es/standards-sdk.es67.js +13 -23
  140. package/dist/es/standards-sdk.es67.js.map +1 -1
  141. package/dist/es/standards-sdk.es68.js +29 -790
  142. package/dist/es/standards-sdk.es68.js.map +1 -1
  143. package/dist/es/standards-sdk.es69.js +14 -100
  144. package/dist/es/standards-sdk.es69.js.map +1 -1
  145. package/dist/es/standards-sdk.es7.js +3 -3
  146. package/dist/es/standards-sdk.es70.js +4 -2
  147. package/dist/es/standards-sdk.es70.js.map +1 -1
  148. package/dist/es/standards-sdk.es71.js +3 -15
  149. package/dist/es/standards-sdk.es71.js.map +1 -1
  150. package/dist/es/standards-sdk.es72.js +14 -407
  151. package/dist/es/standards-sdk.es72.js.map +1 -1
  152. package/dist/es/standards-sdk.es73.js +4 -173
  153. package/dist/es/standards-sdk.es73.js.map +1 -1
  154. package/dist/es/standards-sdk.es74.js +39 -143
  155. package/dist/es/standards-sdk.es74.js.map +1 -1
  156. package/dist/es/standards-sdk.es75.js +39 -2281
  157. package/dist/es/standards-sdk.es75.js.map +1 -1
  158. package/dist/es/standards-sdk.es76.js +34 -161
  159. package/dist/es/standards-sdk.es76.js.map +1 -1
  160. package/dist/es/standards-sdk.es77.js +67 -408
  161. package/dist/es/standards-sdk.es77.js.map +1 -1
  162. package/dist/es/standards-sdk.es78.js +2282 -2
  163. package/dist/es/standards-sdk.es78.js.map +1 -1
  164. package/dist/es/standards-sdk.es79.js +2 -120
  165. package/dist/es/standards-sdk.es79.js.map +1 -1
  166. package/dist/es/standards-sdk.es8.js +3 -3
  167. package/dist/es/standards-sdk.es80.js +7131 -16
  168. package/dist/es/standards-sdk.es80.js.map +1 -1
  169. package/dist/es/standards-sdk.es81.js +3 -3
  170. package/dist/es/standards-sdk.es81.js.map +1 -1
  171. package/dist/es/standards-sdk.es82.js +2 -32
  172. package/dist/es/standards-sdk.es82.js.map +1 -1
  173. package/dist/es/standards-sdk.es83.js +2 -63
  174. package/dist/es/standards-sdk.es83.js.map +1 -1
  175. package/dist/es/standards-sdk.es84.js +32 -48
  176. package/dist/es/standards-sdk.es84.js.map +1 -1
  177. package/dist/es/standards-sdk.es85.js +32 -9
  178. package/dist/es/standards-sdk.es85.js.map +1 -1
  179. package/dist/es/standards-sdk.es86.js +9 -65
  180. package/dist/es/standards-sdk.es86.js.map +1 -1
  181. package/dist/es/standards-sdk.es87.js +34 -6
  182. package/dist/es/standards-sdk.es87.js.map +1 -1
  183. package/dist/es/standards-sdk.es88.js +192 -12
  184. package/dist/es/standards-sdk.es88.js.map +1 -1
  185. package/dist/es/standards-sdk.es89.js +437 -6
  186. package/dist/es/standards-sdk.es89.js.map +1 -1
  187. package/dist/es/standards-sdk.es9.js +1 -1
  188. package/dist/es/standards-sdk.es90.js +24 -44
  189. package/dist/es/standards-sdk.es90.js.map +1 -1
  190. package/dist/es/standards-sdk.es91.js +139 -2
  191. package/dist/es/standards-sdk.es91.js.map +1 -1
  192. package/dist/es/standards-sdk.es92.js +18 -136
  193. package/dist/es/standards-sdk.es92.js.map +1 -1
  194. package/dist/es/standards-sdk.es93.js +23 -166
  195. package/dist/es/standards-sdk.es93.js.map +1 -1
  196. package/dist/es/standards-sdk.es94.js +27 -7134
  197. package/dist/es/standards-sdk.es94.js.map +1 -1
  198. package/dist/es/standards-sdk.es95.js +19 -25
  199. package/dist/es/standards-sdk.es95.js.map +1 -1
  200. package/dist/es/standards-sdk.es96.js +42 -24
  201. package/dist/es/standards-sdk.es96.js.map +1 -1
  202. package/dist/es/standards-sdk.es97.js +16 -36
  203. package/dist/es/standards-sdk.es97.js.map +1 -1
  204. package/dist/es/standards-sdk.es98.js +60 -31
  205. package/dist/es/standards-sdk.es98.js.map +1 -1
  206. package/dist/es/standards-sdk.es99.js +1288 -14
  207. package/dist/es/standards-sdk.es99.js.map +1 -1
  208. package/dist/umd/hcs-10/connections-manager.d.ts +26 -8
  209. package/dist/umd/hcs-10/connections-manager.d.ts.map +1 -1
  210. package/dist/umd/standards-sdk.umd.js +9 -9
  211. package/dist/umd/standards-sdk.umd.js.map +1 -1
  212. package/package.json +2 -1
@@ -1,8 +1,8 @@
1
- import Buffer from "./standards-sdk.es23.js";
1
+ import Buffer from "./standards-sdk.es22.js";
2
2
  import { PublicKey, Timestamp } from "@hashgraph/sdk";
3
- import "./standards-sdk.es24.js";
3
+ import "./standards-sdk.es23.js";
4
4
  import { proto } from "@hashgraph/proto";
5
- import axios from "./standards-sdk.es25.js";
5
+ import axios from "./standards-sdk.es24.js";
6
6
  class HederaMirrorNode {
7
7
  constructor(network, logger) {
8
8
  this.network = network;
@@ -679,17 +679,6 @@ class HCS {
679
679
  }
680
680
  }
681
681
  }
682
- const isServer = typeof window === "undefined";
683
- if (!isServer) {
684
- window.HCS = new HCS();
685
- window.HCS.init().then(() => {
686
- console.log("All HCS resources loaded");
687
- if (typeof window.HCSReady === "function") {
688
- console.log("Running HCSReady...");
689
- window.HCSReady();
690
- }
691
- });
692
- }
693
682
  export {
694
683
  HCS,
695
684
  sleep
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es2.js","sources":["../../src/hcs-3/src/index.ts"],"sourcesContent":["import {\n HCSSDK,\n LoadQueueItem,\n HCSConfigMapping,\n HCSConfig,\n LoadType,\n} from './types';\nimport { Logger } from '../../utils/logger';\n\nexport const sleep = (ms: number) => {\n return new Promise((resolve) => setTimeout(resolve, ms));\n};\n\nexport class HCS implements HCSSDK {\n config: HCSConfig;\n configMapping: HCSConfigMapping;\n LoadedScripts: Record<string, string>;\n LoadedWasm: Record<string, WebAssembly.Instance>;\n LoadedImages: Record<string, string>;\n LoadedVideos: Record<string, string>;\n LoadedAudios: Record<string, HTMLAudioElement>;\n LoadedAudioUrls: Record<string, string>;\n LoadedGLBs: Record<string, string>;\n scriptLoadedEvent: Event;\n loadQueue: LoadQueueItem[];\n isProcessingQueue: boolean;\n private modelViewerLoaded: boolean = false;\n private modelViewerLoading: Promise<void> | null = null;\n private logger: Logger;\n\n constructor() {\n this.config = {\n cdnUrl: 'https://kiloscribe.com/api/inscription-cdn/',\n network: 'mainnet',\n retryAttempts: 3,\n retryBackoff: 300,\n debug: false,\n showLoadingIndicator: false,\n loadingCallbackName: null,\n };\n this.configMapping = {\n hcsCdnUrl: 'cdnUrl',\n hcsNetwork: 'network',\n hcsRetryAttempts: 'retryAttempts',\n hcsRetryBackoff: 'retryBackoff',\n hcsDebug: 'debug',\n hcsShowLoadingIndicator: 'showLoadingIndicator',\n hcsLoadingCallbackName: 'loadingCallbackName',\n };\n this.LoadedScripts = {};\n this.LoadedWasm = {};\n this.LoadedImages = {};\n this.LoadedVideos = {};\n this.LoadedAudios = {};\n this.LoadedAudioUrls = {};\n this.LoadedGLBs = {};\n this.scriptLoadedEvent = new Event('HCSScriptLoaded');\n this.loadQueue = [] as LoadQueueItem[];\n this.isProcessingQueue = false;\n\n try {\n this.logger = Logger.getInstance({\n module: 'HCS-3',\n level: this.config.debug ? 'debug' : 'error',\n });\n } catch (e) {\n this.logger = this.createFallbackLogger();\n }\n }\n\n private createFallbackLogger(): Logger {\n const fallbackLogger = {\n debug: (...args: any[]) =>\n this.config.debug && console.debug('[HCS-3]', ...args),\n info: (...args: any[]) =>\n this.config.debug && console.info('[HCS-3]', ...args),\n warn: (...args: any[]) => console.warn('[HCS-3]', ...args),\n error: (...args: any[]) => console.error('[HCS-3]', ...args),\n setLogLevel: (level: string) => {\n this.config.debug = level === 'debug';\n },\n } as unknown as Logger;\n\n return fallbackLogger;\n }\n\n log(...args: any[]): void {\n if (args.length === 0) {\n this.logger.debug('');\n } else if (args.length === 1) {\n this.logger.debug(String(args[0]));\n } else {\n const message = String(args[0]);\n const data = args.slice(1);\n this.logger.debug(message, data);\n }\n }\n\n error(...args: any[]): void {\n if (args.length === 0) {\n this.logger.error('');\n } else if (args.length === 1) {\n this.logger.error(String(args[0]));\n } else {\n const message = String(args[0]);\n const data = args.slice(1);\n this.logger.error(message, data);\n }\n }\n\n loadConfigFromHTML(): void {\n const configScript = document.querySelector(\n 'script[data-hcs-config]'\n ) as HTMLScriptElement | null;\n if (configScript) {\n Object.keys(this.configMapping).forEach((dataAttr) => {\n if (configScript.dataset[dataAttr]) {\n const configKey =\n this.configMapping[dataAttr as keyof HCSConfigMapping];\n let value: any = configScript.dataset[dataAttr];\n\n if (value === 'true') value = true;\n if (value === 'false') value = false;\n if (!isNaN(Number(value)) && value !== '') value = Number(value);\n\n (this.config as any)[configKey] = value;\n }\n });\n\n // Update logger level based on debug setting\n this.logger.setLogLevel(this.config.debug ? 'debug' : 'error');\n }\n this.log('Loaded config:', this.config);\n }\n\n updateLoadingStatus(id: string, status: string): void {\n if (this.LoadedScripts[id] === 'loaded') {\n return;\n }\n if (this.config.showLoadingIndicator) {\n console.log('[HCS Loading] ' + id + ' : ' + status);\n }\n this.LoadedScripts[id] = status;\n if (\n this.config.loadingCallbackName &&\n typeof (window as any)[this.config.loadingCallbackName] === 'function'\n ) {\n const callback = (window as any)[this.config.loadingCallbackName];\n if (typeof callback === 'function') {\n callback(id, status);\n }\n }\n }\n\n async fetchWithRetry(\n url: string,\n retries: number = this.config.retryAttempts,\n backoff: number = this.config.retryBackoff\n ): Promise<Response> {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('HTTP error! status: ' + response.status);\n }\n return response;\n } catch (error) {\n if (retries > 0) {\n this.log(\n 'Retrying fetch for ' + url + ' Attempts left: ' + (retries - 1)\n );\n await this.sleep(backoff);\n return this.fetchWithRetry(url, retries - 1, backoff * 2);\n }\n throw error;\n }\n }\n\n sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n isDuplicate(topicId: string): boolean {\n return !!this.LoadedScripts[topicId];\n }\n\n async retrieveHCS1Data(\n topicId: string,\n cdnUrl: string = this.config.cdnUrl,\n network: string = this.config.network\n ): Promise<Blob> {\n const cleanNetwork = network.replace(/['\"]+/g, '');\n const response = await this.fetchWithRetry(\n cdnUrl + topicId + '?network=' + cleanNetwork\n );\n return await response.blob();\n }\n\n async loadScript(scriptElement: HTMLElement): Promise<void> {\n const src = scriptElement.getAttribute('data-src');\n const scriptId = scriptElement.getAttribute('data-script-id');\n const topicId = src?.split('/').pop();\n const type = scriptElement.getAttribute('type');\n const isRequired = scriptElement.hasAttribute('data-required');\n const isModule = scriptElement.getAttribute('type') === 'module';\n\n if (this.isDuplicate(topicId || '')) {\n return;\n }\n\n this.updateLoadingStatus(scriptId!, 'loading');\n\n try {\n const cdnUrl =\n scriptElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n scriptElement.getAttribute('data-network') || this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n\n if (type === 'wasm') {\n const arrayBuffer = await blob.arrayBuffer();\n const wasmModule = await WebAssembly.compile(arrayBuffer);\n this.LoadedWasm[scriptId!] = await WebAssembly.instantiate(wasmModule, {\n env: {},\n ...(scriptElement.dataset as any),\n });\n this.updateLoadingStatus(scriptId!, 'loaded');\n window.dispatchEvent(this.scriptLoadedEvent);\n this.log('Loaded wasm: ' + scriptId);\n } else {\n const content = await blob.text();\n const script = document.createElement('script');\n script.textContent = content;\n script.className = 'hcs-inline-script';\n // Copy over the script ID to the inlined script\n if (scriptId) {\n script.setAttribute('data-loaded-script-id', scriptId);\n }\n\n if (isModule) {\n script.type = 'module';\n const moduleBlob = new Blob([content], {\n type: 'application/javascript',\n });\n script.src = URL.createObjectURL(moduleBlob);\n }\n\n document.body.appendChild(script);\n\n this.updateLoadingStatus(scriptId!, 'loaded');\n window.dispatchEvent(this.scriptLoadedEvent);\n this.log('Loaded script: ' + scriptId);\n\n script.onerror = (error) => {\n this.error('Failed to load ' + type + ': ' + scriptId, error);\n this.updateLoadingStatus(scriptId!, 'failed');\n if (isRequired) {\n throw error;\n }\n };\n }\n } catch (error) {\n this.error('Failed to load ' + type + ': ' + scriptId, error);\n this.updateLoadingStatus(scriptId!, 'failed');\n if (isRequired) {\n throw error;\n }\n }\n }\n\n async loadModuleExports(scriptId: string): Promise<any> {\n const script = document.querySelector(\n 'script[data-loaded-script-id=\"' + scriptId + '\"]'\n );\n if (!script) {\n throw new Error('Module script with id ' + scriptId + ' not found');\n }\n const scriptSrc = script.getAttribute('src');\n if (!scriptSrc) {\n throw new Error('Module script ' + scriptId + ' has no src attribute');\n }\n\n try {\n return await import(/* webpackIgnore: true */ scriptSrc);\n } catch (error) {\n this.error('Failed to import module', error);\n throw error;\n }\n }\n\n async loadStylesheet(linkElement: HTMLElement): Promise<void> {\n const src = linkElement.getAttribute('data-src');\n const stylesheetId = linkElement.getAttribute('data-script-id');\n const topicId = src?.split('/').pop();\n const isRequired = linkElement.hasAttribute('data-required');\n if (this.isDuplicate(topicId || '')) {\n return;\n }\n\n this.updateLoadingStatus(stylesheetId!, 'loading');\n\n try {\n const cdnUrl =\n linkElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n linkElement.getAttribute('data-network') || this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n const cssContent = await blob.text();\n const style = document.createElement('style');\n style.textContent = cssContent;\n document.head.appendChild(style);\n\n this.updateLoadingStatus(stylesheetId!, 'loaded');\n window.dispatchEvent(this.scriptLoadedEvent);\n this.log('Loaded and inlined stylesheet: ' + stylesheetId);\n } catch (error) {\n this.error('Failed to load stylesheet: ' + stylesheetId, error);\n this.updateLoadingStatus(stylesheetId!, 'failed');\n if (isRequired) {\n throw error;\n }\n }\n }\n\n async loadImage(imageElement: HTMLElement): Promise<void> {\n const src = imageElement.getAttribute('data-src');\n const topicId = src?.split('/').pop();\n\n this.log('Loading image: ' + topicId);\n this.updateLoadingStatus('Image: ' + topicId!, 'loaded');\n\n try {\n const cdnUrl =\n imageElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n imageElement.getAttribute('data-network') || this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n const objectURL = URL.createObjectURL(blob);\n (imageElement as HTMLImageElement).src = objectURL;\n this.LoadedImages[topicId!] = objectURL;\n this.updateLoadingStatus('Image: ' + topicId!, 'loaded');\n this.log('Loaded image: ' + topicId);\n } catch (error) {\n this.error('Failed to load image: ' + topicId, error);\n this.updateLoadingStatus('Image: ' + topicId!, 'failed');\n }\n }\n\n async loadMedia(\n mediaElement: HTMLElement,\n mediaType: 'video' | 'audio'\n ): Promise<void> {\n const src = mediaElement.getAttribute('data-src');\n const topicId = src?.split('/').pop();\n\n this.log('Loading ' + mediaType + ': ' + topicId);\n this.updateLoadingStatus(mediaType + ': ' + topicId!, 'loading');\n\n try {\n const cdnUrl =\n mediaElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n mediaElement.getAttribute('data-network') || this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n const objectURL = URL.createObjectURL(blob);\n (mediaElement as HTMLMediaElement).src = objectURL;\n\n if (mediaType === 'video') {\n this.LoadedVideos[topicId!] = objectURL;\n } else {\n this.LoadedAudioUrls[topicId!] = objectURL;\n }\n\n this.updateLoadingStatus(mediaType + ': ' + topicId!, 'loaded');\n this.log('Loaded ' + mediaType + ': ' + topicId);\n } catch (error) {\n this.error('Failed to load ' + mediaType + ': ' + topicId, error);\n this.updateLoadingStatus(mediaType + ': ' + topicId!, 'failed');\n }\n }\n\n private async loadModelViewer(): Promise<void> {\n if (this.modelViewerLoading) return this.modelViewerLoading;\n if (this.modelViewerLoaded) return Promise.resolve();\n\n this.modelViewerLoading = new Promise<void>((resolve) => {\n const modelViewerScript = document.createElement('script');\n modelViewerScript.setAttribute('data-src', 'hcs://1/0.0.7293044');\n modelViewerScript.setAttribute('data-script-id', 'model-viewer');\n modelViewerScript.setAttribute('type', 'module');\n\n window.addEventListener(\n 'HCSScriptLoaded',\n () => {\n this.modelViewerLoaded = true;\n resolve();\n },\n { once: true }\n );\n\n this.loadScript(modelViewerScript);\n });\n\n return this.modelViewerLoading;\n }\n\n async loadGLB(glbElement: HTMLElement): Promise<void> {\n await this.loadModelViewer();\n\n const src = glbElement.getAttribute('data-src');\n const topicId = src?.split('/').pop();\n\n this.log('Loading GLB: ' + topicId);\n this.updateLoadingStatus('GLB: ' + topicId!, 'loading');\n\n try {\n const cdnUrl =\n glbElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n glbElement.getAttribute('data-network') || this.config.network;\n\n let modelViewer: HTMLElement;\n if (glbElement.tagName.toLowerCase() !== 'model-viewer') {\n modelViewer = document.createElement('model-viewer');\n Array.from(glbElement.attributes).forEach((attr) => {\n modelViewer.setAttribute(attr.name, attr.value);\n });\n modelViewer.setAttribute('camera-controls', '');\n modelViewer.setAttribute('auto-rotate', '');\n modelViewer.setAttribute('ar', '');\n glbElement.parentNode?.replaceChild(modelViewer, glbElement);\n } else {\n modelViewer = glbElement;\n }\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n const objectURL = URL.createObjectURL(blob);\n modelViewer.setAttribute('src', objectURL);\n this.LoadedGLBs[topicId!] = objectURL;\n\n this.updateLoadingStatus('GLB: ' + topicId!, 'loaded');\n this.log('Loaded GLB: ' + topicId);\n } catch (error) {\n this.error('Failed to load GLB: ' + topicId, error);\n this.updateLoadingStatus('GLB: ' + topicId!, 'failed');\n }\n }\n\n async loadResource(\n element: HTMLElement,\n type: LoadType,\n order: number\n ): Promise<void> {\n return new Promise((resolve) => {\n this.loadQueue.push({ element, type, order, resolve });\n this.processQueue();\n });\n }\n\n async processQueue(): Promise<void> {\n if (this.isProcessingQueue) return;\n this.isProcessingQueue = true;\n\n while (this.loadQueue.length > 0) {\n const item = this.loadQueue.shift()!;\n try {\n if (item.type === 'script') {\n await this.loadScript(item.element);\n } else if (item.type === 'image') {\n await this.loadImage(item.element);\n } else if (item.type === 'video' || item.type === 'audio') {\n await this.loadMedia(item.element, item.type as 'video' | 'audio');\n } else if (item.type === 'glb') {\n await this.loadGLB(item.element);\n } else if (item.type === 'css') {\n await this.loadStylesheet(item.element);\n }\n item.resolve();\n } catch (error) {\n this.error('Error processing queue item:', error);\n if (\n item.type === 'script' &&\n item.element.hasAttribute('data-required')\n ) {\n break;\n }\n }\n }\n\n this.isProcessingQueue = false;\n }\n\n private async replaceHCSInStyle(styleContent: string): Promise<string> {\n let newContent = styleContent;\n let startIndex = newContent.indexOf('hcs://');\n\n while (startIndex !== -1) {\n let endIndex = startIndex;\n while (\n endIndex < newContent.length &&\n ![\"'\", '\"', ' ', ')'].includes(newContent[endIndex])\n ) {\n endIndex++;\n }\n\n const hcsUrl = newContent.substring(startIndex, endIndex);\n const topicId = hcsUrl.split('/').pop()!;\n\n try {\n const cdnUrl = this.config.cdnUrl;\n const network = this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId, cdnUrl, network);\n const objectURL = URL.createObjectURL(blob);\n\n newContent =\n newContent.substring(0, startIndex) +\n objectURL +\n newContent.substring(endIndex);\n\n this.LoadedImages[topicId] = objectURL;\n this.log('Replaced CSS HCS URL: ' + hcsUrl + ' with ' + objectURL);\n } catch (error) {\n this.error('Failed to load CSS image: ' + topicId, error);\n }\n\n startIndex = newContent.indexOf('hcs://', startIndex + 1);\n }\n\n return newContent;\n }\n\n private async processInlineStyles(): Promise<void> {\n const elementsWithStyle = document.querySelectorAll('[style*=\"hcs://\"]');\n this.log(\n 'Found ' +\n elementsWithStyle.length +\n ' elements with HCS style references'\n );\n\n for (const element of Array.from(elementsWithStyle)) {\n const style = element.getAttribute('style');\n if (style) {\n this.log('Processing style: ' + style);\n const newStyle = await this.replaceHCSInStyle(style);\n if (style !== newStyle) {\n element.setAttribute('style', newStyle);\n this.log('Updated style to: ' + newStyle);\n }\n }\n }\n\n const styleTags = document.querySelectorAll('style');\n for (const styleTag of Array.from(styleTags)) {\n if (styleTag.textContent?.includes('hcs://')) {\n const newContent = await this.replaceHCSInStyle(styleTag.textContent);\n if (styleTag.textContent !== newContent) {\n styleTag.textContent = newContent;\n }\n }\n }\n }\n\n async init(): Promise<void> {\n this.loadConfigFromHTML();\n\n return new Promise((resolve) => {\n const initializeObserver = async () => {\n const scriptElements = document.querySelectorAll(\n 'script[data-src^=\"hcs://\"]'\n );\n const imageElements = document.querySelectorAll(\n 'img[data-src^=\"hcs://\"], img[src^=\"hcs://\"]'\n );\n const videoElements = document.querySelectorAll(\n 'video[data-src^=\"hcs://\"], video[src^=\"hcs://\"]'\n );\n const audioElements = document.querySelectorAll(\n 'audio[data-src^=\"hcs://\"], audio[src^=\"hcs://\"]'\n );\n const glbElements = document.querySelectorAll(\n 'model-viewer[data-src^=\"hcs://\"]'\n );\n const cssElements = document.querySelectorAll(\n 'link[data-src^=\"hcs://\"]'\n );\n\n // Convert src to data-src for HCS URLs\n document.querySelectorAll('[src^=\"hcs://\"]').forEach((element) => {\n const src = element.getAttribute('src');\n if (src) {\n element.setAttribute('data-src', src);\n element.removeAttribute('src');\n }\n });\n\n await this.processInlineStyles();\n\n const loadPromises: Promise<void>[] = [];\n\n [\n { elements: scriptElements, type: 'script' },\n { elements: imageElements, type: 'image' },\n { elements: videoElements, type: 'video' },\n { elements: audioElements, type: 'audio' },\n { elements: glbElements, type: 'glb' },\n { elements: cssElements, type: 'css' },\n ].forEach(({ elements, type }) => {\n elements.forEach((element) => {\n const order =\n parseInt(element.getAttribute('data-load-order') || '') ||\n Infinity;\n loadPromises.push(\n this.loadResource(element as HTMLElement, type as LoadType, order)\n );\n });\n });\n\n await Promise.all(loadPromises);\n\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n\n if (element.getAttribute('style')?.includes('hcs://')) {\n this.processInlineStyles();\n }\n\n if (\n element.tagName.toLowerCase() === 'style' &&\n element.textContent?.includes('hcs://')\n ) {\n this.processInlineStyles();\n }\n\n // Handle both src and data-src attributes\n if (element.getAttribute('src')?.startsWith('hcs://')) {\n const src = element.getAttribute('src')!;\n element.setAttribute('data-src', src);\n element.removeAttribute('src');\n\n // Immediately process the element based on its type\n const tagName = element.tagName.toLowerCase();\n switch (tagName) {\n case 'img':\n this.loadResource(element, 'image', Infinity);\n break;\n case 'video':\n this.loadResource(element, 'video', Infinity);\n break;\n case 'audio':\n this.loadResource(element, 'audio', Infinity);\n break;\n case 'script':\n this.loadResource(element, 'script', Infinity);\n break;\n }\n }\n\n // Also check data-src in case it was set directly\n if (element.matches('script[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'script', Infinity);\n } else if (element.matches('img[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'image', Infinity);\n } else if (element.matches('video[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'video', Infinity);\n } else if (element.matches('audio[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'audio', Infinity);\n } else if (\n element.matches('model-viewer[data-src^=\"hcs://\"]')\n ) {\n this.loadResource(element, 'glb', Infinity);\n } else if (element.matches('link[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'css', Infinity);\n }\n\n // Check children of added nodes for HCS URLs\n const childrenWithHCS = element.querySelectorAll(\n '[data-src^=\"hcs://\"], [src^=\"hcs://\"]'\n );\n childrenWithHCS.forEach((child) => {\n const childElement = child as HTMLElement;\n const tagName = childElement.tagName.toLowerCase();\n\n // Convert src to data-src if needed\n const src = childElement.getAttribute('src');\n if (src?.startsWith('hcs://')) {\n childElement.setAttribute('data-src', src);\n childElement.removeAttribute('src');\n }\n\n // Process based on tag type\n switch (tagName) {\n case 'script':\n this.loadResource(childElement, 'script', Infinity);\n break;\n case 'img':\n this.loadResource(childElement, 'image', Infinity);\n break;\n case 'video':\n this.loadResource(childElement, 'video', Infinity);\n break;\n case 'audio':\n this.loadResource(childElement, 'audio', Infinity);\n break;\n case 'model-viewer':\n this.loadResource(childElement, 'glb', Infinity);\n break;\n case 'link':\n this.loadResource(childElement, 'css', Infinity);\n break;\n }\n });\n }\n });\n\n // Handle attribute changes\n if (mutation.type === 'attributes') {\n const element = mutation.target as HTMLElement;\n if (\n mutation.attributeName === 'style' &&\n element.getAttribute('style')?.includes('hcs://')\n ) {\n this.processInlineStyles();\n } else if (mutation.attributeName === 'src') {\n const src = element.getAttribute('src');\n if (src?.startsWith('hcs://')) {\n element.setAttribute('data-src', src);\n element.removeAttribute('src');\n const type = element.tagName.toLowerCase();\n if (['img', 'video', 'audio'].includes(type)) {\n this.loadResource(element, type as LoadType, Infinity);\n }\n }\n }\n }\n });\n });\n\n if (document.body) {\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['style', 'src', 'data-src'],\n });\n } else {\n document.addEventListener('DOMContentLoaded', () => {\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['style', 'src', 'data-src'],\n });\n });\n }\n\n resolve();\n };\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', initializeObserver);\n } else {\n initializeObserver();\n }\n });\n }\n\n async preloadImage(topicId: string): Promise<string> {\n this.log('Loading image:' + topicId);\n this.updateLoadingStatus('image: ' + topicId, 'loading');\n const blob = await this.retrieveHCS1Data(topicId);\n const objectURL = URL.createObjectURL(blob);\n this.LoadedImages[topicId!] = objectURL;\n this.updateLoadingStatus('image: ' + topicId, 'loaded');\n return objectURL;\n }\n\n async preloadAudio(topicId: string): Promise<string> {\n const audioElement = document.createElement('audio');\n audioElement.setAttribute('data-topic-id', topicId);\n audioElement.setAttribute('data-src', 'hcs://1/' + topicId);\n document.body.appendChild(audioElement);\n\n await this.loadMedia(audioElement, 'audio');\n\n const cachedAudio = document.querySelector(\n 'audio[data-topic-id=\"' + topicId + '\"]'\n ) as HTMLAudioElement;\n\n if (cachedAudio) {\n this.LoadedAudioUrls[topicId] = cachedAudio.src;\n } else {\n console.error('Failed to preload audio: ' + topicId);\n }\n return this.LoadedAudioUrls[topicId];\n }\n\n async playAudio(topicId: string, volume = 1.0) {\n const audioUrl = this.LoadedAudioUrls[topicId];\n\n if (audioUrl) {\n const audio = new Audio(audioUrl);\n audio.volume = volume;\n this.LoadedAudios[topicId] = audio;\n\n audio.play().catch((error) => {\n console.error('Failed to play audio:', error);\n });\n\n audio.addEventListener('ended', () => {\n audio.remove();\n delete this.LoadedAudios[topicId];\n });\n } else {\n console.error('Audio not preloaded: ' + topicId);\n }\n }\n\n async pauseAudio(topicId: string) {\n const audioElement = document.querySelector(\n 'audio[data-topic-id=\"' + topicId + '\"]'\n ) as HTMLAudioElement;\n\n if (audioElement) {\n console.log('found element', audioElement);\n audioElement.pause();\n this.LoadedAudios[topicId]?.pause();\n } else {\n this.LoadedAudios[topicId]?.pause();\n }\n }\n\n async loadAndPlayAudio(topicId: string, autoplay = false, volume = 1.0) {\n let existingAudioElement = document.querySelector(\n 'audio[data-topic-id=\"' + topicId + '\"]'\n ) as HTMLAudioElement;\n\n if (existingAudioElement) {\n existingAudioElement.volume = volume;\n await existingAudioElement.play();\n } else {\n const audioElement = document.createElement('audio');\n audioElement.volume = volume;\n if (autoplay) {\n audioElement.setAttribute('autoplay', 'autoplay');\n }\n audioElement.setAttribute('data-topic-id', topicId);\n audioElement.setAttribute('data-src', 'hcs://1/' + topicId);\n\n document.body.appendChild(audioElement);\n\n await this.loadMedia(audioElement, 'audio');\n\n existingAudioElement = document.querySelector(\n 'audio[data-topic-id=\"' + topicId + '\"]'\n ) as HTMLAudioElement;\n if (!autoplay) {\n await existingAudioElement.play();\n }\n }\n }\n}\nconst isServer = typeof window === 'undefined';\n\nif (!isServer) {\n (window as any).HCS = new HCS();\n (window as any).HCS.init().then(() => {\n console.log('All HCS resources loaded');\n if (typeof (window as any).HCSReady === 'function') {\n console.log('Running HCSReady...');\n (window as any).HCSReady();\n }\n });\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es2.js","sources":["../../src/hcs-3/src/index.ts"],"sourcesContent":["import {\n HCSSDK,\n LoadQueueItem,\n HCSConfigMapping,\n HCSConfig,\n LoadType,\n} from './types';\nimport { Logger } from '../../utils/logger';\n\nexport const sleep = (ms: number) => {\n return new Promise((resolve) => setTimeout(resolve, ms));\n};\n\nexport class HCS implements HCSSDK {\n config: HCSConfig;\n configMapping: HCSConfigMapping;\n LoadedScripts: Record<string, string>;\n LoadedWasm: Record<string, WebAssembly.Instance>;\n LoadedImages: Record<string, string>;\n LoadedVideos: Record<string, string>;\n LoadedAudios: Record<string, HTMLAudioElement>;\n LoadedAudioUrls: Record<string, string>;\n LoadedGLBs: Record<string, string>;\n scriptLoadedEvent: Event;\n loadQueue: LoadQueueItem[];\n isProcessingQueue: boolean;\n private modelViewerLoaded: boolean = false;\n private modelViewerLoading: Promise<void> | null = null;\n private logger: Logger;\n\n constructor() {\n this.config = {\n cdnUrl: 'https://kiloscribe.com/api/inscription-cdn/',\n network: 'mainnet',\n retryAttempts: 3,\n retryBackoff: 300,\n debug: false,\n showLoadingIndicator: false,\n loadingCallbackName: null,\n };\n this.configMapping = {\n hcsCdnUrl: 'cdnUrl',\n hcsNetwork: 'network',\n hcsRetryAttempts: 'retryAttempts',\n hcsRetryBackoff: 'retryBackoff',\n hcsDebug: 'debug',\n hcsShowLoadingIndicator: 'showLoadingIndicator',\n hcsLoadingCallbackName: 'loadingCallbackName',\n };\n this.LoadedScripts = {};\n this.LoadedWasm = {};\n this.LoadedImages = {};\n this.LoadedVideos = {};\n this.LoadedAudios = {};\n this.LoadedAudioUrls = {};\n this.LoadedGLBs = {};\n this.scriptLoadedEvent = new Event('HCSScriptLoaded');\n this.loadQueue = [] as LoadQueueItem[];\n this.isProcessingQueue = false;\n\n try {\n this.logger = Logger.getInstance({\n module: 'HCS-3',\n level: this.config.debug ? 'debug' : 'error',\n });\n } catch (e) {\n this.logger = this.createFallbackLogger();\n }\n }\n\n private createFallbackLogger(): Logger {\n const fallbackLogger = {\n debug: (...args: any[]) =>\n this.config.debug && console.debug('[HCS-3]', ...args),\n info: (...args: any[]) =>\n this.config.debug && console.info('[HCS-3]', ...args),\n warn: (...args: any[]) => console.warn('[HCS-3]', ...args),\n error: (...args: any[]) => console.error('[HCS-3]', ...args),\n setLogLevel: (level: string) => {\n this.config.debug = level === 'debug';\n },\n } as unknown as Logger;\n\n return fallbackLogger;\n }\n\n log(...args: any[]): void {\n if (args.length === 0) {\n this.logger.debug('');\n } else if (args.length === 1) {\n this.logger.debug(String(args[0]));\n } else {\n const message = String(args[0]);\n const data = args.slice(1);\n this.logger.debug(message, data);\n }\n }\n\n error(...args: any[]): void {\n if (args.length === 0) {\n this.logger.error('');\n } else if (args.length === 1) {\n this.logger.error(String(args[0]));\n } else {\n const message = String(args[0]);\n const data = args.slice(1);\n this.logger.error(message, data);\n }\n }\n\n loadConfigFromHTML(): void {\n const configScript = document.querySelector(\n 'script[data-hcs-config]'\n ) as HTMLScriptElement | null;\n if (configScript) {\n Object.keys(this.configMapping).forEach((dataAttr) => {\n if (configScript.dataset[dataAttr]) {\n const configKey =\n this.configMapping[dataAttr as keyof HCSConfigMapping];\n let value: any = configScript.dataset[dataAttr];\n\n if (value === 'true') value = true;\n if (value === 'false') value = false;\n if (!isNaN(Number(value)) && value !== '') value = Number(value);\n\n (this.config as any)[configKey] = value;\n }\n });\n\n // Update logger level based on debug setting\n this.logger.setLogLevel(this.config.debug ? 'debug' : 'error');\n }\n this.log('Loaded config:', this.config);\n }\n\n updateLoadingStatus(id: string, status: string): void {\n if (this.LoadedScripts[id] === 'loaded') {\n return;\n }\n if (this.config.showLoadingIndicator) {\n console.log('[HCS Loading] ' + id + ' : ' + status);\n }\n this.LoadedScripts[id] = status;\n if (\n this.config.loadingCallbackName &&\n typeof (window as any)[this.config.loadingCallbackName] === 'function'\n ) {\n const callback = (window as any)[this.config.loadingCallbackName];\n if (typeof callback === 'function') {\n callback(id, status);\n }\n }\n }\n\n async fetchWithRetry(\n url: string,\n retries: number = this.config.retryAttempts,\n backoff: number = this.config.retryBackoff\n ): Promise<Response> {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('HTTP error! status: ' + response.status);\n }\n return response;\n } catch (error) {\n if (retries > 0) {\n this.log(\n 'Retrying fetch for ' + url + ' Attempts left: ' + (retries - 1)\n );\n await this.sleep(backoff);\n return this.fetchWithRetry(url, retries - 1, backoff * 2);\n }\n throw error;\n }\n }\n\n sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n isDuplicate(topicId: string): boolean {\n return !!this.LoadedScripts[topicId];\n }\n\n async retrieveHCS1Data(\n topicId: string,\n cdnUrl: string = this.config.cdnUrl,\n network: string = this.config.network\n ): Promise<Blob> {\n const cleanNetwork = network.replace(/['\"]+/g, '');\n const response = await this.fetchWithRetry(\n cdnUrl + topicId + '?network=' + cleanNetwork\n );\n return await response.blob();\n }\n\n async loadScript(scriptElement: HTMLElement): Promise<void> {\n const src = scriptElement.getAttribute('data-src');\n const scriptId = scriptElement.getAttribute('data-script-id');\n const topicId = src?.split('/').pop();\n const type = scriptElement.getAttribute('type');\n const isRequired = scriptElement.hasAttribute('data-required');\n const isModule = scriptElement.getAttribute('type') === 'module';\n\n if (this.isDuplicate(topicId || '')) {\n return;\n }\n\n this.updateLoadingStatus(scriptId!, 'loading');\n\n try {\n const cdnUrl =\n scriptElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n scriptElement.getAttribute('data-network') || this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n\n if (type === 'wasm') {\n const arrayBuffer = await blob.arrayBuffer();\n const wasmModule = await WebAssembly.compile(arrayBuffer);\n this.LoadedWasm[scriptId!] = await WebAssembly.instantiate(wasmModule, {\n env: {},\n ...(scriptElement.dataset as any),\n });\n this.updateLoadingStatus(scriptId!, 'loaded');\n window.dispatchEvent(this.scriptLoadedEvent);\n this.log('Loaded wasm: ' + scriptId);\n } else {\n const content = await blob.text();\n const script = document.createElement('script');\n script.textContent = content;\n script.className = 'hcs-inline-script';\n // Copy over the script ID to the inlined script\n if (scriptId) {\n script.setAttribute('data-loaded-script-id', scriptId);\n }\n\n if (isModule) {\n script.type = 'module';\n const moduleBlob = new Blob([content], {\n type: 'application/javascript',\n });\n script.src = URL.createObjectURL(moduleBlob);\n }\n\n document.body.appendChild(script);\n\n this.updateLoadingStatus(scriptId!, 'loaded');\n window.dispatchEvent(this.scriptLoadedEvent);\n this.log('Loaded script: ' + scriptId);\n\n script.onerror = (error) => {\n this.error('Failed to load ' + type + ': ' + scriptId, error);\n this.updateLoadingStatus(scriptId!, 'failed');\n if (isRequired) {\n throw error;\n }\n };\n }\n } catch (error) {\n this.error('Failed to load ' + type + ': ' + scriptId, error);\n this.updateLoadingStatus(scriptId!, 'failed');\n if (isRequired) {\n throw error;\n }\n }\n }\n\n async loadModuleExports(scriptId: string): Promise<any> {\n const script = document.querySelector(\n 'script[data-loaded-script-id=\"' + scriptId + '\"]'\n );\n if (!script) {\n throw new Error('Module script with id ' + scriptId + ' not found');\n }\n const scriptSrc = script.getAttribute('src');\n if (!scriptSrc) {\n throw new Error('Module script ' + scriptId + ' has no src attribute');\n }\n\n try {\n return await import(/* webpackIgnore: true */ scriptSrc);\n } catch (error) {\n this.error('Failed to import module', error);\n throw error;\n }\n }\n\n async loadStylesheet(linkElement: HTMLElement): Promise<void> {\n const src = linkElement.getAttribute('data-src');\n const stylesheetId = linkElement.getAttribute('data-script-id');\n const topicId = src?.split('/').pop();\n const isRequired = linkElement.hasAttribute('data-required');\n if (this.isDuplicate(topicId || '')) {\n return;\n }\n\n this.updateLoadingStatus(stylesheetId!, 'loading');\n\n try {\n const cdnUrl =\n linkElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n linkElement.getAttribute('data-network') || this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n const cssContent = await blob.text();\n const style = document.createElement('style');\n style.textContent = cssContent;\n document.head.appendChild(style);\n\n this.updateLoadingStatus(stylesheetId!, 'loaded');\n window.dispatchEvent(this.scriptLoadedEvent);\n this.log('Loaded and inlined stylesheet: ' + stylesheetId);\n } catch (error) {\n this.error('Failed to load stylesheet: ' + stylesheetId, error);\n this.updateLoadingStatus(stylesheetId!, 'failed');\n if (isRequired) {\n throw error;\n }\n }\n }\n\n async loadImage(imageElement: HTMLElement): Promise<void> {\n const src = imageElement.getAttribute('data-src');\n const topicId = src?.split('/').pop();\n\n this.log('Loading image: ' + topicId);\n this.updateLoadingStatus('Image: ' + topicId!, 'loaded');\n\n try {\n const cdnUrl =\n imageElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n imageElement.getAttribute('data-network') || this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n const objectURL = URL.createObjectURL(blob);\n (imageElement as HTMLImageElement).src = objectURL;\n this.LoadedImages[topicId!] = objectURL;\n this.updateLoadingStatus('Image: ' + topicId!, 'loaded');\n this.log('Loaded image: ' + topicId);\n } catch (error) {\n this.error('Failed to load image: ' + topicId, error);\n this.updateLoadingStatus('Image: ' + topicId!, 'failed');\n }\n }\n\n async loadMedia(\n mediaElement: HTMLElement,\n mediaType: 'video' | 'audio'\n ): Promise<void> {\n const src = mediaElement.getAttribute('data-src');\n const topicId = src?.split('/').pop();\n\n this.log('Loading ' + mediaType + ': ' + topicId);\n this.updateLoadingStatus(mediaType + ': ' + topicId!, 'loading');\n\n try {\n const cdnUrl =\n mediaElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n mediaElement.getAttribute('data-network') || this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n const objectURL = URL.createObjectURL(blob);\n (mediaElement as HTMLMediaElement).src = objectURL;\n\n if (mediaType === 'video') {\n this.LoadedVideos[topicId!] = objectURL;\n } else {\n this.LoadedAudioUrls[topicId!] = objectURL;\n }\n\n this.updateLoadingStatus(mediaType + ': ' + topicId!, 'loaded');\n this.log('Loaded ' + mediaType + ': ' + topicId);\n } catch (error) {\n this.error('Failed to load ' + mediaType + ': ' + topicId, error);\n this.updateLoadingStatus(mediaType + ': ' + topicId!, 'failed');\n }\n }\n\n private async loadModelViewer(): Promise<void> {\n if (this.modelViewerLoading) return this.modelViewerLoading;\n if (this.modelViewerLoaded) return Promise.resolve();\n\n this.modelViewerLoading = new Promise<void>((resolve) => {\n const modelViewerScript = document.createElement('script');\n modelViewerScript.setAttribute('data-src', 'hcs://1/0.0.7293044');\n modelViewerScript.setAttribute('data-script-id', 'model-viewer');\n modelViewerScript.setAttribute('type', 'module');\n\n window.addEventListener(\n 'HCSScriptLoaded',\n () => {\n this.modelViewerLoaded = true;\n resolve();\n },\n { once: true }\n );\n\n this.loadScript(modelViewerScript);\n });\n\n return this.modelViewerLoading;\n }\n\n async loadGLB(glbElement: HTMLElement): Promise<void> {\n await this.loadModelViewer();\n\n const src = glbElement.getAttribute('data-src');\n const topicId = src?.split('/').pop();\n\n this.log('Loading GLB: ' + topicId);\n this.updateLoadingStatus('GLB: ' + topicId!, 'loading');\n\n try {\n const cdnUrl =\n glbElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n glbElement.getAttribute('data-network') || this.config.network;\n\n let modelViewer: HTMLElement;\n if (glbElement.tagName.toLowerCase() !== 'model-viewer') {\n modelViewer = document.createElement('model-viewer');\n Array.from(glbElement.attributes).forEach((attr) => {\n modelViewer.setAttribute(attr.name, attr.value);\n });\n modelViewer.setAttribute('camera-controls', '');\n modelViewer.setAttribute('auto-rotate', '');\n modelViewer.setAttribute('ar', '');\n glbElement.parentNode?.replaceChild(modelViewer, glbElement);\n } else {\n modelViewer = glbElement;\n }\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n const objectURL = URL.createObjectURL(blob);\n modelViewer.setAttribute('src', objectURL);\n this.LoadedGLBs[topicId!] = objectURL;\n\n this.updateLoadingStatus('GLB: ' + topicId!, 'loaded');\n this.log('Loaded GLB: ' + topicId);\n } catch (error) {\n this.error('Failed to load GLB: ' + topicId, error);\n this.updateLoadingStatus('GLB: ' + topicId!, 'failed');\n }\n }\n\n async loadResource(\n element: HTMLElement,\n type: LoadType,\n order: number\n ): Promise<void> {\n return new Promise((resolve) => {\n this.loadQueue.push({ element, type, order, resolve });\n this.processQueue();\n });\n }\n\n async processQueue(): Promise<void> {\n if (this.isProcessingQueue) return;\n this.isProcessingQueue = true;\n\n while (this.loadQueue.length > 0) {\n const item = this.loadQueue.shift()!;\n try {\n if (item.type === 'script') {\n await this.loadScript(item.element);\n } else if (item.type === 'image') {\n await this.loadImage(item.element);\n } else if (item.type === 'video' || item.type === 'audio') {\n await this.loadMedia(item.element, item.type as 'video' | 'audio');\n } else if (item.type === 'glb') {\n await this.loadGLB(item.element);\n } else if (item.type === 'css') {\n await this.loadStylesheet(item.element);\n }\n item.resolve();\n } catch (error) {\n this.error('Error processing queue item:', error);\n if (\n item.type === 'script' &&\n item.element.hasAttribute('data-required')\n ) {\n break;\n }\n }\n }\n\n this.isProcessingQueue = false;\n }\n\n private async replaceHCSInStyle(styleContent: string): Promise<string> {\n let newContent = styleContent;\n let startIndex = newContent.indexOf('hcs://');\n\n while (startIndex !== -1) {\n let endIndex = startIndex;\n while (\n endIndex < newContent.length &&\n ![\"'\", '\"', ' ', ')'].includes(newContent[endIndex])\n ) {\n endIndex++;\n }\n\n const hcsUrl = newContent.substring(startIndex, endIndex);\n const topicId = hcsUrl.split('/').pop()!;\n\n try {\n const cdnUrl = this.config.cdnUrl;\n const network = this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId, cdnUrl, network);\n const objectURL = URL.createObjectURL(blob);\n\n newContent =\n newContent.substring(0, startIndex) +\n objectURL +\n newContent.substring(endIndex);\n\n this.LoadedImages[topicId] = objectURL;\n this.log('Replaced CSS HCS URL: ' + hcsUrl + ' with ' + objectURL);\n } catch (error) {\n this.error('Failed to load CSS image: ' + topicId, error);\n }\n\n startIndex = newContent.indexOf('hcs://', startIndex + 1);\n }\n\n return newContent;\n }\n\n private async processInlineStyles(): Promise<void> {\n const elementsWithStyle = document.querySelectorAll('[style*=\"hcs://\"]');\n this.log(\n 'Found ' +\n elementsWithStyle.length +\n ' elements with HCS style references'\n );\n\n for (const element of Array.from(elementsWithStyle)) {\n const style = element.getAttribute('style');\n if (style) {\n this.log('Processing style: ' + style);\n const newStyle = await this.replaceHCSInStyle(style);\n if (style !== newStyle) {\n element.setAttribute('style', newStyle);\n this.log('Updated style to: ' + newStyle);\n }\n }\n }\n\n const styleTags = document.querySelectorAll('style');\n for (const styleTag of Array.from(styleTags)) {\n if (styleTag.textContent?.includes('hcs://')) {\n const newContent = await this.replaceHCSInStyle(styleTag.textContent);\n if (styleTag.textContent !== newContent) {\n styleTag.textContent = newContent;\n }\n }\n }\n }\n\n async init(): Promise<void> {\n this.loadConfigFromHTML();\n\n return new Promise((resolve) => {\n const initializeObserver = async () => {\n const scriptElements = document.querySelectorAll(\n 'script[data-src^=\"hcs://\"]'\n );\n const imageElements = document.querySelectorAll(\n 'img[data-src^=\"hcs://\"], img[src^=\"hcs://\"]'\n );\n const videoElements = document.querySelectorAll(\n 'video[data-src^=\"hcs://\"], video[src^=\"hcs://\"]'\n );\n const audioElements = document.querySelectorAll(\n 'audio[data-src^=\"hcs://\"], audio[src^=\"hcs://\"]'\n );\n const glbElements = document.querySelectorAll(\n 'model-viewer[data-src^=\"hcs://\"]'\n );\n const cssElements = document.querySelectorAll(\n 'link[data-src^=\"hcs://\"]'\n );\n\n // Convert src to data-src for HCS URLs\n document.querySelectorAll('[src^=\"hcs://\"]').forEach((element) => {\n const src = element.getAttribute('src');\n if (src) {\n element.setAttribute('data-src', src);\n element.removeAttribute('src');\n }\n });\n\n await this.processInlineStyles();\n\n const loadPromises: Promise<void>[] = [];\n\n [\n { elements: scriptElements, type: 'script' },\n { elements: imageElements, type: 'image' },\n { elements: videoElements, type: 'video' },\n { elements: audioElements, type: 'audio' },\n { elements: glbElements, type: 'glb' },\n { elements: cssElements, type: 'css' },\n ].forEach(({ elements, type }) => {\n elements.forEach((element) => {\n const order =\n parseInt(element.getAttribute('data-load-order') || '') ||\n Infinity;\n loadPromises.push(\n this.loadResource(element as HTMLElement, type as LoadType, order)\n );\n });\n });\n\n await Promise.all(loadPromises);\n\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n\n if (element.getAttribute('style')?.includes('hcs://')) {\n this.processInlineStyles();\n }\n\n if (\n element.tagName.toLowerCase() === 'style' &&\n element.textContent?.includes('hcs://')\n ) {\n this.processInlineStyles();\n }\n\n // Handle both src and data-src attributes\n if (element.getAttribute('src')?.startsWith('hcs://')) {\n const src = element.getAttribute('src')!;\n element.setAttribute('data-src', src);\n element.removeAttribute('src');\n\n // Immediately process the element based on its type\n const tagName = element.tagName.toLowerCase();\n switch (tagName) {\n case 'img':\n this.loadResource(element, 'image', Infinity);\n break;\n case 'video':\n this.loadResource(element, 'video', Infinity);\n break;\n case 'audio':\n this.loadResource(element, 'audio', Infinity);\n break;\n case 'script':\n this.loadResource(element, 'script', Infinity);\n break;\n }\n }\n\n // Also check data-src in case it was set directly\n if (element.matches('script[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'script', Infinity);\n } else if (element.matches('img[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'image', Infinity);\n } else if (element.matches('video[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'video', Infinity);\n } else if (element.matches('audio[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'audio', Infinity);\n } else if (\n element.matches('model-viewer[data-src^=\"hcs://\"]')\n ) {\n this.loadResource(element, 'glb', Infinity);\n } else if (element.matches('link[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'css', Infinity);\n }\n\n // Check children of added nodes for HCS URLs\n const childrenWithHCS = element.querySelectorAll(\n '[data-src^=\"hcs://\"], [src^=\"hcs://\"]'\n );\n childrenWithHCS.forEach((child) => {\n const childElement = child as HTMLElement;\n const tagName = childElement.tagName.toLowerCase();\n\n // Convert src to data-src if needed\n const src = childElement.getAttribute('src');\n if (src?.startsWith('hcs://')) {\n childElement.setAttribute('data-src', src);\n childElement.removeAttribute('src');\n }\n\n // Process based on tag type\n switch (tagName) {\n case 'script':\n this.loadResource(childElement, 'script', Infinity);\n break;\n case 'img':\n this.loadResource(childElement, 'image', Infinity);\n break;\n case 'video':\n this.loadResource(childElement, 'video', Infinity);\n break;\n case 'audio':\n this.loadResource(childElement, 'audio', Infinity);\n break;\n case 'model-viewer':\n this.loadResource(childElement, 'glb', Infinity);\n break;\n case 'link':\n this.loadResource(childElement, 'css', Infinity);\n break;\n }\n });\n }\n });\n\n // Handle attribute changes\n if (mutation.type === 'attributes') {\n const element = mutation.target as HTMLElement;\n if (\n mutation.attributeName === 'style' &&\n element.getAttribute('style')?.includes('hcs://')\n ) {\n this.processInlineStyles();\n } else if (mutation.attributeName === 'src') {\n const src = element.getAttribute('src');\n if (src?.startsWith('hcs://')) {\n element.setAttribute('data-src', src);\n element.removeAttribute('src');\n const type = element.tagName.toLowerCase();\n if (['img', 'video', 'audio'].includes(type)) {\n this.loadResource(element, type as LoadType, Infinity);\n }\n }\n }\n }\n });\n });\n\n if (document.body) {\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['style', 'src', 'data-src'],\n });\n } else {\n document.addEventListener('DOMContentLoaded', () => {\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['style', 'src', 'data-src'],\n });\n });\n }\n\n resolve();\n };\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', initializeObserver);\n } else {\n initializeObserver();\n }\n });\n }\n\n async preloadImage(topicId: string): Promise<string> {\n this.log('Loading image:' + topicId);\n this.updateLoadingStatus('image: ' + topicId, 'loading');\n const blob = await this.retrieveHCS1Data(topicId);\n const objectURL = URL.createObjectURL(blob);\n this.LoadedImages[topicId!] = objectURL;\n this.updateLoadingStatus('image: ' + topicId, 'loaded');\n return objectURL;\n }\n\n async preloadAudio(topicId: string): Promise<string> {\n const audioElement = document.createElement('audio');\n audioElement.setAttribute('data-topic-id', topicId);\n audioElement.setAttribute('data-src', 'hcs://1/' + topicId);\n document.body.appendChild(audioElement);\n\n await this.loadMedia(audioElement, 'audio');\n\n const cachedAudio = document.querySelector(\n 'audio[data-topic-id=\"' + topicId + '\"]'\n ) as HTMLAudioElement;\n\n if (cachedAudio) {\n this.LoadedAudioUrls[topicId] = cachedAudio.src;\n } else {\n console.error('Failed to preload audio: ' + topicId);\n }\n return this.LoadedAudioUrls[topicId];\n }\n\n async playAudio(topicId: string, volume = 1.0) {\n const audioUrl = this.LoadedAudioUrls[topicId];\n\n if (audioUrl) {\n const audio = new Audio(audioUrl);\n audio.volume = volume;\n this.LoadedAudios[topicId] = audio;\n\n audio.play().catch((error) => {\n console.error('Failed to play audio:', error);\n });\n\n audio.addEventListener('ended', () => {\n audio.remove();\n delete this.LoadedAudios[topicId];\n });\n } else {\n console.error('Audio not preloaded: ' + topicId);\n }\n }\n\n async pauseAudio(topicId: string) {\n const audioElement = document.querySelector(\n 'audio[data-topic-id=\"' + topicId + '\"]'\n ) as HTMLAudioElement;\n\n if (audioElement) {\n console.log('found element', audioElement);\n audioElement.pause();\n this.LoadedAudios[topicId]?.pause();\n } else {\n this.LoadedAudios[topicId]?.pause();\n }\n }\n\n async loadAndPlayAudio(topicId: string, autoplay = false, volume = 1.0) {\n let existingAudioElement = document.querySelector(\n 'audio[data-topic-id=\"' + topicId + '\"]'\n ) as HTMLAudioElement;\n\n if (existingAudioElement) {\n existingAudioElement.volume = volume;\n await existingAudioElement.play();\n } else {\n const audioElement = document.createElement('audio');\n audioElement.volume = volume;\n if (autoplay) {\n audioElement.setAttribute('autoplay', 'autoplay');\n }\n audioElement.setAttribute('data-topic-id', topicId);\n audioElement.setAttribute('data-src', 'hcs://1/' + topicId);\n\n document.body.appendChild(audioElement);\n\n await this.loadMedia(audioElement, 'audio');\n\n existingAudioElement = document.querySelector(\n 'audio[data-topic-id=\"' + topicId + '\"]'\n ) as HTMLAudioElement;\n if (!autoplay) {\n await existingAudioElement.play();\n }\n }\n }\n}\n\n"],"names":[],"mappings":";AASa,MAAA,QAAQ,CAAC,OAAe;AACnC,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACzD;AAEO,MAAM,IAAsB;AAAA,EAiBjC,cAAc;AAJd,SAAQ,oBAA6B;AACrC,SAAQ,qBAA2C;AAIjD,SAAK,SAAS;AAAA,MACZ,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,eAAe;AAAA,MACf,cAAc;AAAA,MACd,OAAO;AAAA,MACP,sBAAsB;AAAA,MACtB,qBAAqB;AAAA,IACvB;AACA,SAAK,gBAAgB;AAAA,MACnB,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,kBAAkB;AAAA,MAClB,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,yBAAyB;AAAA,MACzB,wBAAwB;AAAA,IAC1B;AACA,SAAK,gBAAgB,CAAC;AACtB,SAAK,aAAa,CAAC;AACnB,SAAK,eAAe,CAAC;AACrB,SAAK,eAAe,CAAC;AACrB,SAAK,eAAe,CAAC;AACrB,SAAK,kBAAkB,CAAC;AACxB,SAAK,aAAa,CAAC;AACd,SAAA,oBAAoB,IAAI,MAAM,iBAAiB;AACpD,SAAK,YAAY,CAAC;AAClB,SAAK,oBAAoB;AAErB,QAAA;AACG,WAAA,SAAS,OAAO,YAAY;AAAA,QAC/B,QAAQ;AAAA,QACR,OAAO,KAAK,OAAO,QAAQ,UAAU;AAAA,MAAA,CACtC;AAAA,aACM,GAAG;AACL,WAAA,SAAS,KAAK,qBAAqB;AAAA,IAAA;AAAA,EAC1C;AAAA,EAGM,uBAA+B;AACrC,UAAM,iBAAiB;AAAA,MACrB,OAAO,IAAI,SACT,KAAK,OAAO,SAAS,QAAQ,MAAM,WAAW,GAAG,IAAI;AAAA,MACvD,MAAM,IAAI,SACR,KAAK,OAAO,SAAS,QAAQ,KAAK,WAAW,GAAG,IAAI;AAAA,MACtD,MAAM,IAAI,SAAgB,QAAQ,KAAK,WAAW,GAAG,IAAI;AAAA,MACzD,OAAO,IAAI,SAAgB,QAAQ,MAAM,WAAW,GAAG,IAAI;AAAA,MAC3D,aAAa,CAAC,UAAkB;AACzB,aAAA,OAAO,QAAQ,UAAU;AAAA,MAAA;AAAA,IAElC;AAEO,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAmB;AACpB,QAAA,KAAK,WAAW,GAAG;AAChB,WAAA,OAAO,MAAM,EAAE;AAAA,IAAA,WACX,KAAK,WAAW,GAAG;AAC5B,WAAK,OAAO,MAAM,OAAO,KAAK,CAAC,CAAC,CAAC;AAAA,IAAA,OAC5B;AACL,YAAM,UAAU,OAAO,KAAK,CAAC,CAAC;AACxB,YAAA,OAAO,KAAK,MAAM,CAAC;AACpB,WAAA,OAAO,MAAM,SAAS,IAAI;AAAA,IAAA;AAAA,EACjC;AAAA,EAGF,SAAS,MAAmB;AACtB,QAAA,KAAK,WAAW,GAAG;AAChB,WAAA,OAAO,MAAM,EAAE;AAAA,IAAA,WACX,KAAK,WAAW,GAAG;AAC5B,WAAK,OAAO,MAAM,OAAO,KAAK,CAAC,CAAC,CAAC;AAAA,IAAA,OAC5B;AACL,YAAM,UAAU,OAAO,KAAK,CAAC,CAAC;AACxB,YAAA,OAAO,KAAK,MAAM,CAAC;AACpB,WAAA,OAAO,MAAM,SAAS,IAAI;AAAA,IAAA;AAAA,EACjC;AAAA,EAGF,qBAA2B;AACzB,UAAM,eAAe,SAAS;AAAA,MAC5B;AAAA,IACF;AACA,QAAI,cAAc;AAChB,aAAO,KAAK,KAAK,aAAa,EAAE,QAAQ,CAAC,aAAa;AAChD,YAAA,aAAa,QAAQ,QAAQ,GAAG;AAC5B,gBAAA,YACJ,KAAK,cAAc,QAAkC;AACnD,cAAA,QAAa,aAAa,QAAQ,QAAQ;AAE1C,cAAA,UAAU,OAAgB,SAAA;AAC1B,cAAA,UAAU,QAAiB,SAAA;AAC3B,cAAA,CAAC,MAAM,OAAO,KAAK,CAAC,KAAK,UAAU,GAAY,SAAA,OAAO,KAAK;AAE9D,eAAK,OAAe,SAAS,IAAI;AAAA,QAAA;AAAA,MACpC,CACD;AAGD,WAAK,OAAO,YAAY,KAAK,OAAO,QAAQ,UAAU,OAAO;AAAA,IAAA;AAE1D,SAAA,IAAI,kBAAkB,KAAK,MAAM;AAAA,EAAA;AAAA,EAGxC,oBAAoB,IAAY,QAAsB;AACpD,QAAI,KAAK,cAAc,EAAE,MAAM,UAAU;AACvC;AAAA,IAAA;AAEE,QAAA,KAAK,OAAO,sBAAsB;AACpC,cAAQ,IAAI,mBAAmB,KAAK,QAAQ,MAAM;AAAA,IAAA;AAE/C,SAAA,cAAc,EAAE,IAAI;AAEvB,QAAA,KAAK,OAAO,uBACZ,OAAQ,OAAe,KAAK,OAAO,mBAAmB,MAAM,YAC5D;AACA,YAAM,WAAY,OAAe,KAAK,OAAO,mBAAmB;AAC5D,UAAA,OAAO,aAAa,YAAY;AAClC,iBAAS,IAAI,MAAM;AAAA,MAAA;AAAA,IACrB;AAAA,EACF;AAAA,EAGF,MAAM,eACJ,KACA,UAAkB,KAAK,OAAO,eAC9B,UAAkB,KAAK,OAAO,cACX;AACf,QAAA;AACI,YAAA,WAAW,MAAM,MAAM,GAAG;AAC5B,UAAA,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,MAAM,yBAAyB,SAAS,MAAM;AAAA,MAAA;AAEnD,aAAA;AAAA,aACA,OAAO;AACd,UAAI,UAAU,GAAG;AACV,aAAA;AAAA,UACH,wBAAwB,MAAM,sBAAsB,UAAU;AAAA,QAChE;AACM,cAAA,KAAK,MAAM,OAAO;AACxB,eAAO,KAAK,eAAe,KAAK,UAAU,GAAG,UAAU,CAAC;AAAA,MAAA;AAEpD,YAAA;AAAA,IAAA;AAAA,EACR;AAAA,EAGF,MAAM,IAAY;AAChB,WAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAAA,EAAA;AAAA,EAGzD,YAAY,SAA0B;AACpC,WAAO,CAAC,CAAC,KAAK,cAAc,OAAO;AAAA,EAAA;AAAA,EAGrC,MAAM,iBACJ,SACA,SAAiB,KAAK,OAAO,QAC7B,UAAkB,KAAK,OAAO,SACf;AACf,UAAM,eAAe,QAAQ,QAAQ,UAAU,EAAE;AAC3C,UAAA,WAAW,MAAM,KAAK;AAAA,MAC1B,SAAS,UAAU,cAAc;AAAA,IACnC;AACO,WAAA,MAAM,SAAS,KAAK;AAAA,EAAA;AAAA,EAG7B,MAAM,WAAW,eAA2C;AACpD,UAAA,MAAM,cAAc,aAAa,UAAU;AAC3C,UAAA,WAAW,cAAc,aAAa,gBAAgB;AAC5D,UAAM,UAAU,KAAK,MAAM,GAAG,EAAE,IAAI;AAC9B,UAAA,OAAO,cAAc,aAAa,MAAM;AACxC,UAAA,aAAa,cAAc,aAAa,eAAe;AAC7D,UAAM,WAAW,cAAc,aAAa,MAAM,MAAM;AAExD,QAAI,KAAK,YAAY,WAAW,EAAE,GAAG;AACnC;AAAA,IAAA;AAGG,SAAA,oBAAoB,UAAW,SAAS;AAEzC,QAAA;AACF,YAAM,SACJ,cAAc,aAAa,cAAc,KAAK,KAAK,OAAO;AAC5D,YAAM,UACJ,cAAc,aAAa,cAAc,KAAK,KAAK,OAAO;AAE5D,YAAM,OAAO,MAAM,KAAK,iBAAiB,SAAU,QAAQ,OAAO;AAElE,UAAI,SAAS,QAAQ;AACb,cAAA,cAAc,MAAM,KAAK,YAAY;AAC3C,cAAM,aAAa,MAAM,YAAY,QAAQ,WAAW;AACxD,aAAK,WAAW,QAAS,IAAI,MAAM,YAAY,YAAY,YAAY;AAAA,UACrE,KAAK,CAAC;AAAA,UACN,GAAI,cAAc;AAAA,QAAA,CACnB;AACI,aAAA,oBAAoB,UAAW,QAAQ;AACrC,eAAA,cAAc,KAAK,iBAAiB;AACtC,aAAA,IAAI,kBAAkB,QAAQ;AAAA,MAAA,OAC9B;AACC,cAAA,UAAU,MAAM,KAAK,KAAK;AAC1B,cAAA,SAAS,SAAS,cAAc,QAAQ;AAC9C,eAAO,cAAc;AACrB,eAAO,YAAY;AAEnB,YAAI,UAAU;AACL,iBAAA,aAAa,yBAAyB,QAAQ;AAAA,QAAA;AAGvD,YAAI,UAAU;AACZ,iBAAO,OAAO;AACd,gBAAM,aAAa,IAAI,KAAK,CAAC,OAAO,GAAG;AAAA,YACrC,MAAM;AAAA,UAAA,CACP;AACM,iBAAA,MAAM,IAAI,gBAAgB,UAAU;AAAA,QAAA;AAGpC,iBAAA,KAAK,YAAY,MAAM;AAE3B,aAAA,oBAAoB,UAAW,QAAQ;AACrC,eAAA,cAAc,KAAK,iBAAiB;AACtC,aAAA,IAAI,oBAAoB,QAAQ;AAE9B,eAAA,UAAU,CAAC,UAAU;AAC1B,eAAK,MAAM,oBAAoB,OAAO,OAAO,UAAU,KAAK;AACvD,eAAA,oBAAoB,UAAW,QAAQ;AAC5C,cAAI,YAAY;AACR,kBAAA;AAAA,UAAA;AAAA,QAEV;AAAA,MAAA;AAAA,aAEK,OAAO;AACd,WAAK,MAAM,oBAAoB,OAAO,OAAO,UAAU,KAAK;AACvD,WAAA,oBAAoB,UAAW,QAAQ;AAC5C,UAAI,YAAY;AACR,cAAA;AAAA,MAAA;AAAA,IACR;AAAA,EACF;AAAA,EAGF,MAAM,kBAAkB,UAAgC;AACtD,UAAM,SAAS,SAAS;AAAA,MACtB,mCAAmC,WAAW;AAAA,IAChD;AACA,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,2BAA2B,WAAW,YAAY;AAAA,IAAA;AAE9D,UAAA,YAAY,OAAO,aAAa,KAAK;AAC3C,QAAI,CAAC,WAAW;AACd,YAAM,IAAI,MAAM,mBAAmB,WAAW,uBAAuB;AAAA,IAAA;AAGnE,QAAA;AACF,aAAO,MAAM;AAAA;AAAA,QAAiC;AAAA;AAAA,aACvC,OAAO;AACT,WAAA,MAAM,2BAA2B,KAAK;AACrC,YAAA;AAAA,IAAA;AAAA,EACR;AAAA,EAGF,MAAM,eAAe,aAAyC;AACtD,UAAA,MAAM,YAAY,aAAa,UAAU;AACzC,UAAA,eAAe,YAAY,aAAa,gBAAgB;AAC9D,UAAM,UAAU,KAAK,MAAM,GAAG,EAAE,IAAI;AAC9B,UAAA,aAAa,YAAY,aAAa,eAAe;AAC3D,QAAI,KAAK,YAAY,WAAW,EAAE,GAAG;AACnC;AAAA,IAAA;AAGG,SAAA,oBAAoB,cAAe,SAAS;AAE7C,QAAA;AACF,YAAM,SACJ,YAAY,aAAa,cAAc,KAAK,KAAK,OAAO;AAC1D,YAAM,UACJ,YAAY,aAAa,cAAc,KAAK,KAAK,OAAO;AAE1D,YAAM,OAAO,MAAM,KAAK,iBAAiB,SAAU,QAAQ,OAAO;AAC5D,YAAA,aAAa,MAAM,KAAK,KAAK;AAC7B,YAAA,QAAQ,SAAS,cAAc,OAAO;AAC5C,YAAM,cAAc;AACX,eAAA,KAAK,YAAY,KAAK;AAE1B,WAAA,oBAAoB,cAAe,QAAQ;AACzC,aAAA,cAAc,KAAK,iBAAiB;AACtC,WAAA,IAAI,oCAAoC,YAAY;AAAA,aAClD,OAAO;AACT,WAAA,MAAM,gCAAgC,cAAc,KAAK;AACzD,WAAA,oBAAoB,cAAe,QAAQ;AAChD,UAAI,YAAY;AACR,cAAA;AAAA,MAAA;AAAA,IACR;AAAA,EACF;AAAA,EAGF,MAAM,UAAU,cAA0C;AAClD,UAAA,MAAM,aAAa,aAAa,UAAU;AAChD,UAAM,UAAU,KAAK,MAAM,GAAG,EAAE,IAAI;AAE/B,SAAA,IAAI,oBAAoB,OAAO;AAC/B,SAAA,oBAAoB,YAAY,SAAU,QAAQ;AAEnD,QAAA;AACF,YAAM,SACJ,aAAa,aAAa,cAAc,KAAK,KAAK,OAAO;AAC3D,YAAM,UACJ,aAAa,aAAa,cAAc,KAAK,KAAK,OAAO;AAE3D,YAAM,OAAO,MAAM,KAAK,iBAAiB,SAAU,QAAQ,OAAO;AAC5D,YAAA,YAAY,IAAI,gBAAgB,IAAI;AACzC,mBAAkC,MAAM;AACpC,WAAA,aAAa,OAAQ,IAAI;AACzB,WAAA,oBAAoB,YAAY,SAAU,QAAQ;AAClD,WAAA,IAAI,mBAAmB,OAAO;AAAA,aAC5B,OAAO;AACT,WAAA,MAAM,2BAA2B,SAAS,KAAK;AAC/C,WAAA,oBAAoB,YAAY,SAAU,QAAQ;AAAA,IAAA;AAAA,EACzD;AAAA,EAGF,MAAM,UACJ,cACA,WACe;AACT,UAAA,MAAM,aAAa,aAAa,UAAU;AAChD,UAAM,UAAU,KAAK,MAAM,GAAG,EAAE,IAAI;AAEpC,SAAK,IAAI,aAAa,YAAY,OAAO,OAAO;AAChD,SAAK,oBAAoB,YAAY,OAAO,SAAU,SAAS;AAE3D,QAAA;AACF,YAAM,SACJ,aAAa,aAAa,cAAc,KAAK,KAAK,OAAO;AAC3D,YAAM,UACJ,aAAa,aAAa,cAAc,KAAK,KAAK,OAAO;AAE3D,YAAM,OAAO,MAAM,KAAK,iBAAiB,SAAU,QAAQ,OAAO;AAC5D,YAAA,YAAY,IAAI,gBAAgB,IAAI;AACzC,mBAAkC,MAAM;AAEzC,UAAI,cAAc,SAAS;AACpB,aAAA,aAAa,OAAQ,IAAI;AAAA,MAAA,OACzB;AACA,aAAA,gBAAgB,OAAQ,IAAI;AAAA,MAAA;AAGnC,WAAK,oBAAoB,YAAY,OAAO,SAAU,QAAQ;AAC9D,WAAK,IAAI,YAAY,YAAY,OAAO,OAAO;AAAA,aACxC,OAAO;AACd,WAAK,MAAM,oBAAoB,YAAY,OAAO,SAAS,KAAK;AAChE,WAAK,oBAAoB,YAAY,OAAO,SAAU,QAAQ;AAAA,IAAA;AAAA,EAChE;AAAA,EAGF,MAAc,kBAAiC;AACzC,QAAA,KAAK,mBAAoB,QAAO,KAAK;AACzC,QAAI,KAAK,kBAA0B,QAAA,QAAQ,QAAQ;AAEnD,SAAK,qBAAqB,IAAI,QAAc,CAAC,YAAY;AACjD,YAAA,oBAAoB,SAAS,cAAc,QAAQ;AACvC,wBAAA,aAAa,YAAY,qBAAqB;AAC9C,wBAAA,aAAa,kBAAkB,cAAc;AAC7C,wBAAA,aAAa,QAAQ,QAAQ;AAExC,aAAA;AAAA,QACL;AAAA,QACA,MAAM;AACJ,eAAK,oBAAoB;AACjB,kBAAA;AAAA,QACV;AAAA,QACA,EAAE,MAAM,KAAK;AAAA,MACf;AAEA,WAAK,WAAW,iBAAiB;AAAA,IAAA,CAClC;AAED,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,MAAM,QAAQ,YAAwC;AACpD,UAAM,KAAK,gBAAgB;AAErB,UAAA,MAAM,WAAW,aAAa,UAAU;AAC9C,UAAM,UAAU,KAAK,MAAM,GAAG,EAAE,IAAI;AAE/B,SAAA,IAAI,kBAAkB,OAAO;AAC7B,SAAA,oBAAoB,UAAU,SAAU,SAAS;AAElD,QAAA;AACF,YAAM,SACJ,WAAW,aAAa,cAAc,KAAK,KAAK,OAAO;AACzD,YAAM,UACJ,WAAW,aAAa,cAAc,KAAK,KAAK,OAAO;AAErD,UAAA;AACJ,UAAI,WAAW,QAAQ,YAAY,MAAM,gBAAgB;AACzC,sBAAA,SAAS,cAAc,cAAc;AACnD,cAAM,KAAK,WAAW,UAAU,EAAE,QAAQ,CAAC,SAAS;AAClD,sBAAY,aAAa,KAAK,MAAM,KAAK,KAAK;AAAA,QAAA,CAC/C;AACW,oBAAA,aAAa,mBAAmB,EAAE;AAClC,oBAAA,aAAa,eAAe,EAAE;AAC9B,oBAAA,aAAa,MAAM,EAAE;AACtB,mBAAA,YAAY,aAAa,aAAa,UAAU;AAAA,MAAA,OACtD;AACS,sBAAA;AAAA,MAAA;AAGhB,YAAM,OAAO,MAAM,KAAK,iBAAiB,SAAU,QAAQ,OAAO;AAC5D,YAAA,YAAY,IAAI,gBAAgB,IAAI;AAC9B,kBAAA,aAAa,OAAO,SAAS;AACpC,WAAA,WAAW,OAAQ,IAAI;AAEvB,WAAA,oBAAoB,UAAU,SAAU,QAAQ;AAChD,WAAA,IAAI,iBAAiB,OAAO;AAAA,aAC1B,OAAO;AACT,WAAA,MAAM,yBAAyB,SAAS,KAAK;AAC7C,WAAA,oBAAoB,UAAU,SAAU,QAAQ;AAAA,IAAA;AAAA,EACvD;AAAA,EAGF,MAAM,aACJ,SACA,MACA,OACe;AACR,WAAA,IAAI,QAAQ,CAAC,YAAY;AAC9B,WAAK,UAAU,KAAK,EAAE,SAAS,MAAM,OAAO,SAAS;AACrD,WAAK,aAAa;AAAA,IAAA,CACnB;AAAA,EAAA;AAAA,EAGH,MAAM,eAA8B;AAClC,QAAI,KAAK,kBAAmB;AAC5B,SAAK,oBAAoB;AAElB,WAAA,KAAK,UAAU,SAAS,GAAG;AAC1B,YAAA,OAAO,KAAK,UAAU,MAAM;AAC9B,UAAA;AACE,YAAA,KAAK,SAAS,UAAU;AACpB,gBAAA,KAAK,WAAW,KAAK,OAAO;AAAA,QAAA,WACzB,KAAK,SAAS,SAAS;AAC1B,gBAAA,KAAK,UAAU,KAAK,OAAO;AAAA,QAAA,WACxB,KAAK,SAAS,WAAW,KAAK,SAAS,SAAS;AACzD,gBAAM,KAAK,UAAU,KAAK,SAAS,KAAK,IAAyB;AAAA,QAAA,WACxD,KAAK,SAAS,OAAO;AACxB,gBAAA,KAAK,QAAQ,KAAK,OAAO;AAAA,QAAA,WACtB,KAAK,SAAS,OAAO;AACxB,gBAAA,KAAK,eAAe,KAAK,OAAO;AAAA,QAAA;AAExC,aAAK,QAAQ;AAAA,eACN,OAAO;AACT,aAAA,MAAM,gCAAgC,KAAK;AAChD,YACE,KAAK,SAAS,YACd,KAAK,QAAQ,aAAa,eAAe,GACzC;AACA;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAGF,SAAK,oBAAoB;AAAA,EAAA;AAAA,EAG3B,MAAc,kBAAkB,cAAuC;AACrE,QAAI,aAAa;AACb,QAAA,aAAa,WAAW,QAAQ,QAAQ;AAE5C,WAAO,eAAe,IAAI;AACxB,UAAI,WAAW;AACf,aACE,WAAW,WAAW,UACtB,CAAC,CAAC,KAAK,KAAK,KAAK,GAAG,EAAE,SAAS,WAAW,QAAQ,CAAC,GACnD;AACA;AAAA,MAAA;AAGF,YAAM,SAAS,WAAW,UAAU,YAAY,QAAQ;AACxD,YAAM,UAAU,OAAO,MAAM,GAAG,EAAE,IAAI;AAElC,UAAA;AACI,cAAA,SAAS,KAAK,OAAO;AACrB,cAAA,UAAU,KAAK,OAAO;AAE5B,cAAM,OAAO,MAAM,KAAK,iBAAiB,SAAS,QAAQ,OAAO;AAC3D,cAAA,YAAY,IAAI,gBAAgB,IAAI;AAGxC,qBAAA,WAAW,UAAU,GAAG,UAAU,IAClC,YACA,WAAW,UAAU,QAAQ;AAE1B,aAAA,aAAa,OAAO,IAAI;AAC7B,aAAK,IAAI,2BAA2B,SAAS,WAAW,SAAS;AAAA,eAC1D,OAAO;AACT,aAAA,MAAM,+BAA+B,SAAS,KAAK;AAAA,MAAA;AAG1D,mBAAa,WAAW,QAAQ,UAAU,aAAa,CAAC;AAAA,IAAA;AAGnD,WAAA;AAAA,EAAA;AAAA,EAGT,MAAc,sBAAqC;AAC3C,UAAA,oBAAoB,SAAS,iBAAiB,mBAAmB;AAClE,SAAA;AAAA,MACH,WACE,kBAAkB,SAClB;AAAA,IACJ;AAEA,eAAW,WAAW,MAAM,KAAK,iBAAiB,GAAG;AAC7C,YAAA,QAAQ,QAAQ,aAAa,OAAO;AAC1C,UAAI,OAAO;AACJ,aAAA,IAAI,uBAAuB,KAAK;AACrC,cAAM,WAAW,MAAM,KAAK,kBAAkB,KAAK;AACnD,YAAI,UAAU,UAAU;AACd,kBAAA,aAAa,SAAS,QAAQ;AACjC,eAAA,IAAI,uBAAuB,QAAQ;AAAA,QAAA;AAAA,MAC1C;AAAA,IACF;AAGI,UAAA,YAAY,SAAS,iBAAiB,OAAO;AACnD,eAAW,YAAY,MAAM,KAAK,SAAS,GAAG;AAC5C,UAAI,SAAS,aAAa,SAAS,QAAQ,GAAG;AAC5C,cAAM,aAAa,MAAM,KAAK,kBAAkB,SAAS,WAAW;AAChE,YAAA,SAAS,gBAAgB,YAAY;AACvC,mBAAS,cAAc;AAAA,QAAA;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AAAA,EAGF,MAAM,OAAsB;AAC1B,SAAK,mBAAmB;AAEjB,WAAA,IAAI,QAAQ,CAAC,YAAY;AAC9B,YAAM,qBAAqB,YAAY;AACrC,cAAM,iBAAiB,SAAS;AAAA,UAC9B;AAAA,QACF;AACA,cAAM,gBAAgB,SAAS;AAAA,UAC7B;AAAA,QACF;AACA,cAAM,gBAAgB,SAAS;AAAA,UAC7B;AAAA,QACF;AACA,cAAM,gBAAgB,SAAS;AAAA,UAC7B;AAAA,QACF;AACA,cAAM,cAAc,SAAS;AAAA,UAC3B;AAAA,QACF;AACA,cAAM,cAAc,SAAS;AAAA,UAC3B;AAAA,QACF;AAGA,iBAAS,iBAAiB,iBAAiB,EAAE,QAAQ,CAAC,YAAY;AAC1D,gBAAA,MAAM,QAAQ,aAAa,KAAK;AACtC,cAAI,KAAK;AACC,oBAAA,aAAa,YAAY,GAAG;AACpC,oBAAQ,gBAAgB,KAAK;AAAA,UAAA;AAAA,QAC/B,CACD;AAED,cAAM,KAAK,oBAAoB;AAE/B,cAAM,eAAgC,CAAC;AAEvC;AAAA,UACE,EAAE,UAAU,gBAAgB,MAAM,SAAS;AAAA,UAC3C,EAAE,UAAU,eAAe,MAAM,QAAQ;AAAA,UACzC,EAAE,UAAU,eAAe,MAAM,QAAQ;AAAA,UACzC,EAAE,UAAU,eAAe,MAAM,QAAQ;AAAA,UACzC,EAAE,UAAU,aAAa,MAAM,MAAM;AAAA,UACrC,EAAE,UAAU,aAAa,MAAM,MAAM;AAAA,UACrC,QAAQ,CAAC,EAAE,UAAU,WAAW;AACvB,mBAAA,QAAQ,CAAC,YAAY;AAC5B,kBAAM,QACJ,SAAS,QAAQ,aAAa,iBAAiB,KAAK,EAAE,KACtD;AACW,yBAAA;AAAA,cACX,KAAK,aAAa,SAAwB,MAAkB,KAAK;AAAA,YACnE;AAAA,UAAA,CACD;AAAA,QAAA,CACF;AAEK,cAAA,QAAQ,IAAI,YAAY;AAE9B,cAAM,WAAW,IAAI,iBAAiB,CAAC,cAAc;AACzC,oBAAA,QAAQ,CAAC,aAAa;AACrB,qBAAA,WAAW,QAAQ,CAAC,SAAS;AAChC,kBAAA,KAAK,aAAa,KAAK,cAAc;AACvC,sBAAM,UAAU;AAEhB,oBAAI,QAAQ,aAAa,OAAO,GAAG,SAAS,QAAQ,GAAG;AACrD,uBAAK,oBAAoB;AAAA,gBAAA;AAIzB,oBAAA,QAAQ,QAAQ,kBAAkB,WAClC,QAAQ,aAAa,SAAS,QAAQ,GACtC;AACA,uBAAK,oBAAoB;AAAA,gBAAA;AAI3B,oBAAI,QAAQ,aAAa,KAAK,GAAG,WAAW,QAAQ,GAAG;AAC/C,wBAAA,MAAM,QAAQ,aAAa,KAAK;AAC9B,0BAAA,aAAa,YAAY,GAAG;AACpC,0BAAQ,gBAAgB,KAAK;AAGvB,wBAAA,UAAU,QAAQ,QAAQ,YAAY;AAC5C,0BAAQ,SAAS;AAAA,oBACf,KAAK;AACE,2BAAA,aAAa,SAAS,SAAS,QAAQ;AAC5C;AAAA,oBACF,KAAK;AACE,2BAAA,aAAa,SAAS,SAAS,QAAQ;AAC5C;AAAA,oBACF,KAAK;AACE,2BAAA,aAAa,SAAS,SAAS,QAAQ;AAC5C;AAAA,oBACF,KAAK;AACE,2BAAA,aAAa,SAAS,UAAU,QAAQ;AAC7C;AAAA,kBAAA;AAAA,gBACJ;AAIE,oBAAA,QAAQ,QAAQ,4BAA4B,GAAG;AAC5C,uBAAA,aAAa,SAAS,UAAU,QAAQ;AAAA,gBACpC,WAAA,QAAQ,QAAQ,yBAAyB,GAAG;AAChD,uBAAA,aAAa,SAAS,SAAS,QAAQ;AAAA,gBACnC,WAAA,QAAQ,QAAQ,2BAA2B,GAAG;AAClD,uBAAA,aAAa,SAAS,SAAS,QAAQ;AAAA,gBACnC,WAAA,QAAQ,QAAQ,2BAA2B,GAAG;AAClD,uBAAA,aAAa,SAAS,SAAS,QAAQ;AAAA,gBAE5C,WAAA,QAAQ,QAAQ,kCAAkC,GAClD;AACK,uBAAA,aAAa,SAAS,OAAO,QAAQ;AAAA,gBACjC,WAAA,QAAQ,QAAQ,0BAA0B,GAAG;AACjD,uBAAA,aAAa,SAAS,OAAO,QAAQ;AAAA,gBAAA;AAI5C,sBAAM,kBAAkB,QAAQ;AAAA,kBAC9B;AAAA,gBACF;AACgB,gCAAA,QAAQ,CAAC,UAAU;AACjC,wBAAM,eAAe;AACf,wBAAA,UAAU,aAAa,QAAQ,YAAY;AAG3C,wBAAA,MAAM,aAAa,aAAa,KAAK;AACvC,sBAAA,KAAK,WAAW,QAAQ,GAAG;AAChB,iCAAA,aAAa,YAAY,GAAG;AACzC,iCAAa,gBAAgB,KAAK;AAAA,kBAAA;AAIpC,0BAAQ,SAAS;AAAA,oBACf,KAAK;AACE,2BAAA,aAAa,cAAc,UAAU,QAAQ;AAClD;AAAA,oBACF,KAAK;AACE,2BAAA,aAAa,cAAc,SAAS,QAAQ;AACjD;AAAA,oBACF,KAAK;AACE,2BAAA,aAAa,cAAc,SAAS,QAAQ;AACjD;AAAA,oBACF,KAAK;AACE,2BAAA,aAAa,cAAc,SAAS,QAAQ;AACjD;AAAA,oBACF,KAAK;AACE,2BAAA,aAAa,cAAc,OAAO,QAAQ;AAC/C;AAAA,oBACF,KAAK;AACE,2BAAA,aAAa,cAAc,OAAO,QAAQ;AAC/C;AAAA,kBAAA;AAAA,gBACJ,CACD;AAAA,cAAA;AAAA,YACH,CACD;AAGG,gBAAA,SAAS,SAAS,cAAc;AAClC,oBAAM,UAAU,SAAS;AAEvB,kBAAA,SAAS,kBAAkB,WAC3B,QAAQ,aAAa,OAAO,GAAG,SAAS,QAAQ,GAChD;AACA,qBAAK,oBAAoB;AAAA,cAAA,WAChB,SAAS,kBAAkB,OAAO;AACrC,sBAAA,MAAM,QAAQ,aAAa,KAAK;AAClC,oBAAA,KAAK,WAAW,QAAQ,GAAG;AACrB,0BAAA,aAAa,YAAY,GAAG;AACpC,0BAAQ,gBAAgB,KAAK;AACvB,wBAAA,OAAO,QAAQ,QAAQ,YAAY;AACzC,sBAAI,CAAC,OAAO,SAAS,OAAO,EAAE,SAAS,IAAI,GAAG;AACvC,yBAAA,aAAa,SAAS,MAAkB,QAAQ;AAAA,kBAAA;AAAA,gBACvD;AAAA,cACF;AAAA,YACF;AAAA,UACF,CACD;AAAA,QAAA,CACF;AAED,YAAI,SAAS,MAAM;AACR,mBAAA,QAAQ,SAAS,MAAM;AAAA,YAC9B,WAAW;AAAA,YACX,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,iBAAiB,CAAC,SAAS,OAAO,UAAU;AAAA,UAAA,CAC7C;AAAA,QAAA,OACI;AACI,mBAAA,iBAAiB,oBAAoB,MAAM;AACzC,qBAAA,QAAQ,SAAS,MAAM;AAAA,cAC9B,WAAW;AAAA,cACX,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,iBAAiB,CAAC,SAAS,OAAO,UAAU;AAAA,YAAA,CAC7C;AAAA,UAAA,CACF;AAAA,QAAA;AAGK,gBAAA;AAAA,MACV;AAEI,UAAA,SAAS,eAAe,WAAW;AAC5B,iBAAA,iBAAiB,oBAAoB,kBAAkB;AAAA,MAAA,OAC3D;AACc,2BAAA;AAAA,MAAA;AAAA,IACrB,CACD;AAAA,EAAA;AAAA,EAGH,MAAM,aAAa,SAAkC;AAC9C,SAAA,IAAI,mBAAmB,OAAO;AAC9B,SAAA,oBAAoB,YAAY,SAAS,SAAS;AACvD,UAAM,OAAO,MAAM,KAAK,iBAAiB,OAAO;AAC1C,UAAA,YAAY,IAAI,gBAAgB,IAAI;AACrC,SAAA,aAAa,OAAQ,IAAI;AACzB,SAAA,oBAAoB,YAAY,SAAS,QAAQ;AAC/C,WAAA;AAAA,EAAA;AAAA,EAGT,MAAM,aAAa,SAAkC;AAC7C,UAAA,eAAe,SAAS,cAAc,OAAO;AACtC,iBAAA,aAAa,iBAAiB,OAAO;AACrC,iBAAA,aAAa,YAAY,aAAa,OAAO;AACjD,aAAA,KAAK,YAAY,YAAY;AAEhC,UAAA,KAAK,UAAU,cAAc,OAAO;AAE1C,UAAM,cAAc,SAAS;AAAA,MAC3B,0BAA0B,UAAU;AAAA,IACtC;AAEA,QAAI,aAAa;AACV,WAAA,gBAAgB,OAAO,IAAI,YAAY;AAAA,IAAA,OACvC;AACG,cAAA,MAAM,8BAA8B,OAAO;AAAA,IAAA;AAE9C,WAAA,KAAK,gBAAgB,OAAO;AAAA,EAAA;AAAA,EAGrC,MAAM,UAAU,SAAiB,SAAS,GAAK;AACvC,UAAA,WAAW,KAAK,gBAAgB,OAAO;AAE7C,QAAI,UAAU;AACN,YAAA,QAAQ,IAAI,MAAM,QAAQ;AAChC,YAAM,SAAS;AACV,WAAA,aAAa,OAAO,IAAI;AAE7B,YAAM,KAAK,EAAE,MAAM,CAAC,UAAU;AACpB,gBAAA,MAAM,yBAAyB,KAAK;AAAA,MAAA,CAC7C;AAEK,YAAA,iBAAiB,SAAS,MAAM;AACpC,cAAM,OAAO;AACN,eAAA,KAAK,aAAa,OAAO;AAAA,MAAA,CACjC;AAAA,IAAA,OACI;AACG,cAAA,MAAM,0BAA0B,OAAO;AAAA,IAAA;AAAA,EACjD;AAAA,EAGF,MAAM,WAAW,SAAiB;AAChC,UAAM,eAAe,SAAS;AAAA,MAC5B,0BAA0B,UAAU;AAAA,IACtC;AAEA,QAAI,cAAc;AACR,cAAA,IAAI,iBAAiB,YAAY;AACzC,mBAAa,MAAM;AACd,WAAA,aAAa,OAAO,GAAG,MAAM;AAAA,IAAA,OAC7B;AACA,WAAA,aAAa,OAAO,GAAG,MAAM;AAAA,IAAA;AAAA,EACpC;AAAA,EAGF,MAAM,iBAAiB,SAAiB,WAAW,OAAO,SAAS,GAAK;AACtE,QAAI,uBAAuB,SAAS;AAAA,MAClC,0BAA0B,UAAU;AAAA,IACtC;AAEA,QAAI,sBAAsB;AACxB,2BAAqB,SAAS;AAC9B,YAAM,qBAAqB,KAAK;AAAA,IAAA,OAC3B;AACC,YAAA,eAAe,SAAS,cAAc,OAAO;AACnD,mBAAa,SAAS;AACtB,UAAI,UAAU;AACC,qBAAA,aAAa,YAAY,UAAU;AAAA,MAAA;AAErC,mBAAA,aAAa,iBAAiB,OAAO;AACrC,mBAAA,aAAa,YAAY,aAAa,OAAO;AAEjD,eAAA,KAAK,YAAY,YAAY;AAEhC,YAAA,KAAK,UAAU,cAAc,OAAO;AAE1C,6BAAuB,SAAS;AAAA,QAC9B,0BAA0B,UAAU;AAAA,MACtC;AACA,UAAI,CAAC,UAAU;AACb,cAAM,qBAAqB,KAAK;AAAA,MAAA;AAAA,IAClC;AAAA,EACF;AAEJ;"}