@serfab/cadre-host 1.12.0 → 1.14.0

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 (337) hide show
  1. package/README.md +332 -423
  2. package/dist/bin/host.d.ts +6 -3
  3. package/dist/bin/host.js +301 -505
  4. package/dist/bin/host.js.map +1 -1
  5. package/dist/bin/join-output.d.ts +56 -0
  6. package/dist/bin/join-output.js +92 -0
  7. package/dist/bin/join-output.js.map +1 -0
  8. package/dist/bin/nat-output.d.ts +49 -0
  9. package/dist/bin/nat-output.js +127 -0
  10. package/dist/bin/nat-output.js.map +1 -0
  11. package/dist/hosted/claim-details.d.ts +44 -0
  12. package/dist/hosted/claim-details.js +66 -0
  13. package/dist/hosted/claim-details.js.map +1 -0
  14. package/dist/hosted/hosted-node-service.d.ts +318 -0
  15. package/dist/hosted/hosted-node-service.js +666 -0
  16. package/dist/hosted/hosted-node-service.js.map +1 -0
  17. package/dist/hosted/hosted-node-store.d.ts +40 -0
  18. package/dist/hosted/hosted-node-store.js +126 -0
  19. package/dist/hosted/hosted-node-store.js.map +1 -0
  20. package/dist/{donation/donation-supervisor.d.ts → hosted/hosted-node-supervisor.d.ts} +70 -53
  21. package/dist/hosted/hosted-node-supervisor.js +396 -0
  22. package/dist/hosted/hosted-node-supervisor.js.map +1 -0
  23. package/dist/hosted/hosted-node-watcher.d.ts +83 -0
  24. package/dist/hosted/hosted-node-watcher.js +224 -0
  25. package/dist/hosted/hosted-node-watcher.js.map +1 -0
  26. package/dist/hosted/index.d.ts +16 -0
  27. package/dist/hosted/index.js +13 -0
  28. package/dist/hosted/index.js.map +1 -0
  29. package/dist/hosted/node-status.d.ts +35 -0
  30. package/dist/hosted/node-status.js +61 -0
  31. package/dist/hosted/node-status.js.map +1 -0
  32. package/dist/hosted/types.d.ts +134 -0
  33. package/dist/hosted/types.js +22 -0
  34. package/dist/hosted/types.js.map +1 -0
  35. package/dist/index.d.ts +12 -24
  36. package/dist/index.js +9 -19
  37. package/dist/index.js.map +1 -1
  38. package/dist/installer/config.d.ts +4 -34
  39. package/dist/installer/config.js +3 -18
  40. package/dist/installer/config.js.map +1 -1
  41. package/dist/installer/index.d.ts +7 -19
  42. package/dist/installer/index.js +14 -69
  43. package/dist/installer/index.js.map +1 -1
  44. package/dist/installer/paths.d.ts +0 -2
  45. package/dist/installer/paths.js +0 -4
  46. package/dist/installer/paths.js.map +1 -1
  47. package/dist/installer/wizard.d.ts +0 -7
  48. package/dist/installer/wizard.js +1 -8
  49. package/dist/installer/wizard.js.map +1 -1
  50. package/dist/nat/address-resolver.d.ts +18 -17
  51. package/dist/nat/address-resolver.js +79 -25
  52. package/dist/nat/address-resolver.js.map +1 -1
  53. package/dist/nat/address-watch.d.ts +37 -0
  54. package/dist/nat/address-watch.js +84 -0
  55. package/dist/nat/address-watch.js.map +1 -0
  56. package/dist/nat/ddns/duckdns.d.ts +2 -1
  57. package/dist/nat/ddns/duckdns.js +5 -1
  58. package/dist/nat/ddns/duckdns.js.map +1 -1
  59. package/dist/nat/ddns/index.d.ts +6 -0
  60. package/dist/nat/ddns/index.js.map +1 -1
  61. package/dist/nat/index.d.ts +12 -9
  62. package/dist/nat/index.js +6 -5
  63. package/dist/nat/index.js.map +1 -1
  64. package/dist/nat/nat-service.d.ts +203 -77
  65. package/dist/nat/nat-service.js +602 -237
  66. package/dist/nat/nat-service.js.map +1 -1
  67. package/dist/nat/nat-store.d.ts +12 -5
  68. package/dist/nat/nat-store.js +114 -30
  69. package/dist/nat/nat-store.js.map +1 -1
  70. package/dist/nat/port-mapper.d.ts +83 -79
  71. package/dist/nat/port-mapper.js +148 -189
  72. package/dist/nat/port-mapper.js.map +1 -1
  73. package/dist/nat/reachability.d.ts +31 -15
  74. package/dist/nat/reachability.js +97 -22
  75. package/dist/nat/reachability.js.map +1 -1
  76. package/dist/nat/types.d.ts +78 -27
  77. package/dist/nat/types.js +8 -5
  78. package/dist/nat/types.js.map +1 -1
  79. package/dist/orchestrator/host-process-orchestrator.d.ts +29 -71
  80. package/dist/orchestrator/host-process-orchestrator.js +78 -218
  81. package/dist/orchestrator/host-process-orchestrator.js.map +1 -1
  82. package/dist/{installer/identity.d.ts → orchestrator/identity-file.d.ts} +5 -5
  83. package/dist/{installer/identity.js → orchestrator/identity-file.js} +6 -6
  84. package/dist/orchestrator/identity-file.js.map +1 -0
  85. package/dist/orchestrator/index.d.ts +2 -3
  86. package/dist/orchestrator/index.js +1 -1
  87. package/dist/orchestrator/index.js.map +1 -1
  88. package/dist/orchestrator/node-identity.d.ts +6 -6
  89. package/dist/orchestrator/node-identity.js +7 -7
  90. package/dist/orchestrator/node-identity.js.map +1 -1
  91. package/dist/orchestrator/port-allocator.d.ts +5 -6
  92. package/dist/orchestrator/port-allocator.js +9 -11
  93. package/dist/orchestrator/port-allocator.js.map +1 -1
  94. package/dist/orchestrator/state-store.d.ts +3 -5
  95. package/dist/orchestrator/state-store.js +2 -10
  96. package/dist/orchestrator/state-store.js.map +1 -1
  97. package/dist/orchestrator/types.d.ts +33 -22
  98. package/dist/orchestrator/types.js.map +1 -1
  99. package/dist/server/error-handler.d.ts +5 -25
  100. package/dist/server/error-handler.js +11 -74
  101. package/dist/server/error-handler.js.map +1 -1
  102. package/dist/server/events/types.d.ts +7 -11
  103. package/dist/server/events/types.js +2 -1
  104. package/dist/server/events/types.js.map +1 -1
  105. package/dist/server/index.d.ts +11 -37
  106. package/dist/server/index.js +30 -48
  107. package/dist/server/index.js.map +1 -1
  108. package/dist/server/routes/hosted-nodes.d.ts +28 -0
  109. package/dist/server/routes/hosted-nodes.js +68 -0
  110. package/dist/server/routes/hosted-nodes.js.map +1 -0
  111. package/dist/server/routes/nat.d.ts +4 -1
  112. package/dist/server/routes/nat.js +13 -2
  113. package/dist/server/routes/nat.js.map +1 -1
  114. package/dist/server/routes/nodes.d.ts +6 -20
  115. package/dist/server/routes/nodes.js +7 -86
  116. package/dist/server/routes/nodes.js.map +1 -1
  117. package/dist/server/routes/settings.d.ts +2 -7
  118. package/dist/server/routes/settings.js +3 -7
  119. package/dist/server/routes/settings.js.map +1 -1
  120. package/dist/server/routes/status.d.ts +2 -25
  121. package/dist/server/routes/status.js +1 -11
  122. package/dist/server/routes/status.js.map +1 -1
  123. package/dist/server/server.js +8 -8
  124. package/dist/server/settings-store.d.ts +2 -2
  125. package/dist/server/settings-store.js +2 -2
  126. package/dist/server/static.js +1 -2
  127. package/dist/server/static.js.map +1 -1
  128. package/dist/ui/assets/index-4FWuU8ye.js +19 -0
  129. package/dist/ui/assets/index-4FWuU8ye.js.map +1 -0
  130. package/dist/ui/assets/index-Di9Q4d01.css +1 -0
  131. package/dist/ui/index.html +2 -2
  132. package/dist/update/index.d.ts +2 -2
  133. package/dist/update/index.js +2 -2
  134. package/dist/update/store.d.ts +1 -1
  135. package/dist/update/store.js +1 -1
  136. package/dist/update/types.d.ts +1 -1
  137. package/dist/update/types.js +1 -1
  138. package/package.json +5 -6
  139. package/src/__tests__/cli-nat.smoke.test.ts +219 -212
  140. package/src/__tests__/cli.smoke.test.ts +1 -1
  141. package/src/__tests__/global-setup.ts +2 -3
  142. package/src/__tests__/orchestrator-claim-secret.test.ts +112 -0
  143. package/src/__tests__/orchestrator-handle-contract.ts +134 -134
  144. package/src/__tests__/orchestrator-node-identity.test.ts +182 -203
  145. package/src/__tests__/orchestrator-ports.test.ts +124 -143
  146. package/src/__tests__/orchestrator-push.test.ts +138 -146
  147. package/src/__tests__/orchestrator.test.ts +1019 -1063
  148. package/src/bin/host.ts +368 -553
  149. package/src/bin/join-output.ts +120 -0
  150. package/src/bin/nat-output.ts +177 -0
  151. package/src/{donation → hosted}/__tests__/fake-orchestrator.test.ts +173 -173
  152. package/src/{donation → hosted}/__tests__/fake-orchestrator.ts +265 -243
  153. package/src/hosted/__tests__/hosted-node-service.test.ts +609 -0
  154. package/src/hosted/__tests__/hosted-node-supervisor.test.ts +474 -0
  155. package/src/hosted/__tests__/test-invitation.ts +33 -0
  156. package/src/hosted/claim-details.ts +96 -0
  157. package/src/hosted/hosted-node-service.ts +795 -0
  158. package/src/hosted/hosted-node-store.ts +144 -0
  159. package/src/hosted/hosted-node-supervisor.ts +439 -0
  160. package/src/hosted/hosted-node-watcher.ts +250 -0
  161. package/src/hosted/index.ts +53 -0
  162. package/src/hosted/node-status.ts +71 -0
  163. package/src/hosted/types.ts +153 -0
  164. package/src/index.ts +72 -91
  165. package/src/installer/__tests__/config.test.ts +15 -40
  166. package/src/installer/__tests__/installer.smoke.test.ts +5 -86
  167. package/src/installer/__tests__/wizard.test.ts +56 -64
  168. package/src/installer/config.ts +135 -175
  169. package/src/installer/index.ts +15 -83
  170. package/src/installer/paths.ts +104 -109
  171. package/src/installer/wizard.ts +87 -103
  172. package/src/nat/__tests__/address-resolver.test.ts +107 -82
  173. package/src/nat/__tests__/nat-service.test.ts +433 -408
  174. package/src/nat/__tests__/nat-store.test.ts +127 -93
  175. package/src/nat/__tests__/port-mapper.test.ts +30 -191
  176. package/src/nat/__tests__/reachability.test.ts +96 -13
  177. package/src/nat/address-resolver.ts +94 -52
  178. package/src/nat/address-watch.ts +92 -0
  179. package/src/nat/ddns/duckdns.ts +5 -1
  180. package/src/nat/ddns/index.ts +6 -0
  181. package/src/nat/index.ts +87 -71
  182. package/src/nat/nat-service.ts +889 -501
  183. package/src/nat/nat-store.ts +237 -154
  184. package/src/nat/port-mapper.ts +241 -329
  185. package/src/nat/reachability.ts +134 -25
  186. package/src/nat/types.ts +209 -159
  187. package/src/{installer/__tests__/identity.test.ts → orchestrator/__tests__/identity-file.test.ts} +34 -34
  188. package/src/orchestrator/__tests__/node-identity.test.ts +62 -62
  189. package/src/orchestrator/host-process-orchestrator.ts +81 -243
  190. package/src/{installer/identity.ts → orchestrator/identity-file.ts} +56 -56
  191. package/src/orchestrator/index.ts +9 -10
  192. package/src/orchestrator/node-identity.ts +41 -41
  193. package/src/orchestrator/port-allocator.ts +71 -73
  194. package/src/orchestrator/state-store.ts +76 -90
  195. package/src/orchestrator/types.ts +34 -23
  196. package/src/server/__tests__/bus.test.ts +38 -38
  197. package/src/server/__tests__/error-handler.test.ts +81 -118
  198. package/src/server/__tests__/fakes.ts +40 -44
  199. package/src/server/__tests__/hosted-nodes-route.test.ts +160 -0
  200. package/src/server/__tests__/nodes-route.test.ts +114 -283
  201. package/src/server/__tests__/publishers.test.ts +193 -180
  202. package/src/server/__tests__/server.smoke.test.ts +134 -223
  203. package/src/server/__tests__/settings-route.test.ts +179 -195
  204. package/src/server/__tests__/sse-route.test.ts +119 -119
  205. package/src/server/__tests__/status-route.test.ts +82 -121
  206. package/src/server/error-handler.ts +112 -178
  207. package/src/server/events/types.ts +20 -24
  208. package/src/server/index.ts +223 -267
  209. package/src/server/routes/hosted-nodes.ts +83 -0
  210. package/src/server/routes/nat.ts +75 -63
  211. package/src/server/routes/nodes.ts +96 -188
  212. package/src/server/routes/settings.ts +115 -123
  213. package/src/server/routes/status.ts +102 -134
  214. package/src/server/server.ts +8 -8
  215. package/src/server/settings-store.ts +2 -2
  216. package/src/server/static.ts +1 -2
  217. package/src/update/index.ts +2 -2
  218. package/src/update/store.ts +1 -1
  219. package/src/update/types.ts +1 -1
  220. package/dist/auth/duration.d.ts +0 -1
  221. package/dist/auth/duration.js +0 -32
  222. package/dist/auth/duration.js.map +0 -1
  223. package/dist/auth/index.d.ts +0 -11
  224. package/dist/auth/index.js +0 -9
  225. package/dist/auth/index.js.map +0 -1
  226. package/dist/auth/self-label.d.ts +0 -36
  227. package/dist/auth/self-label.js +0 -57
  228. package/dist/auth/self-label.js.map +0 -1
  229. package/dist/auth/trust-circle-store.d.ts +0 -26
  230. package/dist/auth/trust-circle-store.js +0 -129
  231. package/dist/auth/trust-circle-store.js.map +0 -1
  232. package/dist/auth/trust-circle.d.ts +0 -156
  233. package/dist/auth/trust-circle.js +0 -307
  234. package/dist/auth/trust-circle.js.map +0 -1
  235. package/dist/auth/types.d.ts +0 -84
  236. package/dist/auth/types.js +0 -24
  237. package/dist/auth/types.js.map +0 -1
  238. package/dist/donation/donation-service.d.ts +0 -389
  239. package/dist/donation/donation-service.js +0 -828
  240. package/dist/donation/donation-service.js.map +0 -1
  241. package/dist/donation/donation-store.d.ts +0 -51
  242. package/dist/donation/donation-store.js +0 -152
  243. package/dist/donation/donation-store.js.map +0 -1
  244. package/dist/donation/donation-supervisor.js +0 -364
  245. package/dist/donation/donation-supervisor.js.map +0 -1
  246. package/dist/donation/grant-service.d.ts +0 -80
  247. package/dist/donation/grant-service.js +0 -210
  248. package/dist/donation/grant-service.js.map +0 -1
  249. package/dist/donation/grant-store.d.ts +0 -38
  250. package/dist/donation/grant-store.js +0 -135
  251. package/dist/donation/grant-store.js.map +0 -1
  252. package/dist/donation/index.d.ts +0 -20
  253. package/dist/donation/index.js +0 -17
  254. package/dist/donation/index.js.map +0 -1
  255. package/dist/donation/types.d.ts +0 -224
  256. package/dist/donation/types.js +0 -40
  257. package/dist/donation/types.js.map +0 -1
  258. package/dist/installer/identity.js.map +0 -1
  259. package/dist/owner/index.d.ts +0 -11
  260. package/dist/owner/index.js +0 -11
  261. package/dist/owner/index.js.map +0 -1
  262. package/dist/owner/owner-node-client.d.ts +0 -110
  263. package/dist/owner/owner-node-client.js +0 -184
  264. package/dist/owner/owner-node-client.js.map +0 -1
  265. package/dist/server/routes/bootstrap-node-validation.d.ts +0 -115
  266. package/dist/server/routes/bootstrap-node-validation.js +0 -197
  267. package/dist/server/routes/bootstrap-node-validation.js.map +0 -1
  268. package/dist/server/routes/grants-admin.d.ts +0 -29
  269. package/dist/server/routes/grants-admin.js +0 -58
  270. package/dist/server/routes/grants-admin.js.map +0 -1
  271. package/dist/server/routes/grants.d.ts +0 -28
  272. package/dist/server/routes/grants.js +0 -165
  273. package/dist/server/routes/grants.js.map +0 -1
  274. package/dist/server/routes/provision-request-validation.d.ts +0 -45
  275. package/dist/server/routes/provision-request-validation.js +0 -97
  276. package/dist/server/routes/provision-request-validation.js.map +0 -1
  277. package/dist/server/routes/strands.d.ts +0 -20
  278. package/dist/server/routes/strands.js +0 -38
  279. package/dist/server/routes/strands.js.map +0 -1
  280. package/dist/server/routes/trust-circle.d.ts +0 -17
  281. package/dist/server/routes/trust-circle.js +0 -35
  282. package/dist/server/routes/trust-circle.js.map +0 -1
  283. package/dist/strands/index.d.ts +0 -7
  284. package/dist/strands/index.js +0 -6
  285. package/dist/strands/index.js.map +0 -1
  286. package/dist/strands/strand-service.d.ts +0 -50
  287. package/dist/strands/strand-service.js +0 -103
  288. package/dist/strands/strand-service.js.map +0 -1
  289. package/dist/strands/types.d.ts +0 -93
  290. package/dist/strands/types.js +0 -23
  291. package/dist/strands/types.js.map +0 -1
  292. package/dist/ui/assets/index-C6nELNfC.js +0 -23
  293. package/dist/ui/assets/index-C6nELNfC.js.map +0 -1
  294. package/dist/ui/assets/index-TtIYSeZO.css +0 -1
  295. package/src/__tests__/cli-invite.smoke.test.ts +0 -192
  296. package/src/__tests__/host-owner.smoke.test.ts +0 -123
  297. package/src/__tests__/orchestrator-owner.test.ts +0 -234
  298. package/src/__tests__/orchestrator-pin-keys.test.ts +0 -152
  299. package/src/auth/__tests__/duration.test.ts +0 -28
  300. package/src/auth/__tests__/self-label.test.ts +0 -85
  301. package/src/auth/__tests__/trust-circle-integration.test.ts +0 -152
  302. package/src/auth/__tests__/trust-circle-store.test.ts +0 -115
  303. package/src/auth/__tests__/trust-circle.test.ts +0 -445
  304. package/src/auth/duration.ts +0 -33
  305. package/src/auth/index.ts +0 -21
  306. package/src/auth/self-label.ts +0 -74
  307. package/src/auth/trust-circle-store.ts +0 -155
  308. package/src/auth/trust-circle.ts +0 -395
  309. package/src/auth/types.ts +0 -99
  310. package/src/donation/__tests__/donation-service.test.ts +0 -1193
  311. package/src/donation/__tests__/donation-supervisor.test.ts +0 -548
  312. package/src/donation/__tests__/grant-service.test.ts +0 -213
  313. package/src/donation/__tests__/grant-store.test.ts +0 -113
  314. package/src/donation/donation-service.ts +0 -1033
  315. package/src/donation/donation-store.ts +0 -176
  316. package/src/donation/donation-supervisor.ts +0 -411
  317. package/src/donation/grant-service.ts +0 -252
  318. package/src/donation/grant-store.ts +0 -152
  319. package/src/donation/index.ts +0 -65
  320. package/src/donation/types.ts +0 -260
  321. package/src/owner/__tests__/owner-node-client.test.ts +0 -194
  322. package/src/owner/index.ts +0 -12
  323. package/src/owner/owner-node-client.ts +0 -259
  324. package/src/server/__tests__/bootstrap-node-validation.test.ts +0 -138
  325. package/src/server/__tests__/grants-admin-route.test.ts +0 -171
  326. package/src/server/__tests__/grants-route.test.ts +0 -394
  327. package/src/server/__tests__/strands-route.test.ts +0 -234
  328. package/src/server/routes/bootstrap-node-validation.ts +0 -206
  329. package/src/server/routes/grants-admin.ts +0 -74
  330. package/src/server/routes/grants.ts +0 -193
  331. package/src/server/routes/provision-request-validation.ts +0 -105
  332. package/src/server/routes/strands.ts +0 -54
  333. package/src/server/routes/trust-circle.ts +0 -49
  334. package/src/strands/__tests__/strand-service.test.ts +0 -165
  335. package/src/strands/index.ts +0 -14
  336. package/src/strands/strand-service.ts +0 -135
  337. package/src/strands/types.ts +0 -102
@@ -0,0 +1,19 @@
1
+ (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))r(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const i of s.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(a){if(a.ep)return;a.ep=!0;const s=n(a);fetch(a.href,s)}})();const Bi=!1;var Xr=Array.isArray,Li=Array.prototype.indexOf,gn=Array.prototype.includes,rr=Array.from,Di=Object.defineProperty,In=Object.getOwnPropertyDescriptor,_s=Object.getOwnPropertyDescriptors,qi=Object.prototype,Ui=Array.prototype,Zr=Object.getPrototypeOf,ba=Object.isExtensible;const ea=()=>{};function Fi(e){return e()}function Br(e){for(var t=0;t<e.length;t++)e[t]()}function ms(){var e,t,n=new Promise((r,a)=>{e=r,t=a});return{promise:n,resolve:e,reject:t}}const Le=2,_n=4,jn=8,ys=1<<24,gt=16,ct=32,Ft=64,Lr=128,tt=512,Ae=1024,Be=2048,_t=4096,Fe=8192,nt=16384,cn=32768,Ea=1<<25,rn=65536,Dr=1<<17,ji=1<<18,En=1<<19,ws=1<<20,ht=1<<25,an=65536,Qn=1<<21,Ln=1<<22,Bt=1<<23,Zt=Symbol("$state"),Oi=Symbol(""),St=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},Hi=!!globalThis.document?.contentType&&globalThis.document.contentType.includes("xml");function bs(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function zi(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function Vi(e,t,n){throw new Error("https://svelte.dev/e/each_key_duplicate")}function Ki(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function Ji(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function Yi(e){throw new Error("https://svelte.dev/e/effect_orphan")}function Gi(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function Wi(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function $i(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Qi(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Xi(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const Zi=1,eo=2,Es=4,to=8,no=16,ro=1,ao=2,Re=Symbol(),ks="http://www.w3.org/1999/xhtml",so="http://www.w3.org/2000/svg",io="http://www.w3.org/1998/Math/MathML";function oo(){console.warn("https://svelte.dev/e/derived_inert")}function lo(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function co(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function Cs(e){return e===this.v}function uo(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function Ss(e){return!uo(e,this.v)}let On=!1,fo=!1;function vo(){On=!0}let ye=null;function mn(e){ye=e}function je(e,t=!1,n){ye={p:ye,i:!1,c:null,e:null,s:e,x:null,r:ee,l:On&&!t?{s:null,u:null,$:[]}:null}}function Oe(e){var t=ye,n=t.e;if(n!==null){t.e=null;for(var r of n)Vs(r)}return t.i=!0,ye=t.p,{}}function kn(){return!On||ye!==null&&ye.l===null}let Qt=[];function Ts(){var e=Qt;Qt=[],Br(e)}function Lt(e){if(Qt.length===0&&!Pn){var t=Qt;queueMicrotask(()=>{t===Qt&&Ts()})}Qt.push(e)}function ho(){for(;Qt.length>0;)Ts()}function As(e){var t=ee;if(t===null)return re.f|=Bt,e;if((t.f&cn)===0&&(t.f&_n)===0)throw e;Pt(e,t)}function Pt(e,t){for(;t!==null;){if((t.f&Lr)!==0){if((t.f&cn)===0)throw e;try{t.b.error(e);return}catch(n){e=n}}t=t.parent}throw e}const po=-7169;function be(e,t){e.f=e.f&po|t}function ta(e){(e.f&tt)!==0||e.deps===null?be(e,Ae):be(e,_t)}function Ns(e){if(e!==null)for(const t of e)(t.f&Le)===0||(t.f&an)===0||(t.f^=an,Ns(t.deps))}function Rs(e,t,n){(e.f&Be)!==0?t.add(e):(e.f&_t)!==0&&n.add(e),Ns(e.deps),be(e,Ae)}const $t=new Set;let Q=null,ot=null,qr=null,Pn=!1,or=!1,pn=null,Wn=null;var ka=0;let go=1;class jt{id=go++;current=new Map;previous=new Map;#n=new Set;#l=new Set;#e=new Set;#a=new Map;#r=new Map;#s=null;#t=[];#i=[];#c=new Set;#d=new Set;#o=new Map;#f=new Set;is_fork=!1;#h=!1;#v=new Set;#u(){return this.is_fork||this.#r.size>0}#_(){for(const r of this.#v)for(const a of r.#r.keys()){for(var t=!1,n=a;n.parent!==null;){if(this.#o.has(n)){t=!0;break}n=n.parent}if(!t)return!0}return!1}skip_effect(t){this.#o.has(t)||this.#o.set(t,{d:[],m:[]}),this.#f.delete(t)}unskip_effect(t,n=r=>this.schedule(r)){var r=this.#o.get(t);if(r){this.#o.delete(t);for(var a of r.d)be(a,Be),n(a);for(a of r.m)be(a,_t),n(a)}this.#f.add(t)}#p(){if(ka++>1e3&&($t.delete(this),mo()),!this.#u()){for(const o of this.#c)this.#d.delete(o),be(o,Be),this.schedule(o);for(const o of this.#d)be(o,_t),this.schedule(o)}const t=this.#t;this.#t=[],this.apply();var n=pn=[],r=[],a=Wn=[];for(const o of t)try{this.#m(o,n,r)}catch(l){throw Ps(o),l}if(Q=null,a.length>0){var s=jt.ensure();for(const o of a)s.schedule(o)}if(pn=null,Wn=null,this.#u()||this.#_()){this.#g(r),this.#g(n);for(const[o,l]of this.#o)Is(o,l)}else{this.#a.size===0&&$t.delete(this),this.#c.clear(),this.#d.clear();for(const o of this.#n)o(this);this.#n.clear(),Ca(r),Ca(n),this.#s?.resolve()}var i=Q;if(this.#t.length>0){const o=i??=this;o.#t.push(...this.#t.filter(l=>!o.#t.includes(l)))}i!==null&&($t.add(i),i.#p())}#m(t,n,r){t.f^=Ae;for(var a=t.first;a!==null;){var s=a.f,i=(s&(ct|Ft))!==0,o=i&&(s&Ae)!==0,l=o||(s&Fe)!==0||this.#o.has(a);if(!l&&a.fn!==null){i?a.f^=Ae:(s&_n)!==0?n.push(a):Vn(a)&&((s&gt)!==0&&this.#d.add(a),wn(a));var u=a.first;if(u!==null){a=u;continue}}for(;a!==null;){var f=a.next;if(f!==null){a=f;break}a=a.parent}}}#g(t){for(var n=0;n<t.length;n+=1)Rs(t[n],this.#c,this.#d)}capture(t,n,r=!1){t.v!==Re&&!this.previous.has(t)&&this.previous.set(t,t.v),(t.f&Bt)===0&&(this.current.set(t,[n,r]),ot?.set(t,n)),this.is_fork||(t.v=n)}activate(){Q=this}deactivate(){Q=null,ot=null}flush(){try{or=!0,Q=this,this.#p()}finally{ka=0,qr=null,pn=null,Wn=null,or=!1,Q=null,ot=null,en.clear()}}discard(){for(const t of this.#l)t(this);this.#l.clear(),this.#e.clear(),$t.delete(this)}register_created_effect(t){this.#i.push(t)}#y(){for(const f of $t){var t=f.id<this.id,n=[];for(const[p,[v,_]]of this.current){if(f.current.has(p)){var r=f.current.get(p)[0];if(t&&v!==r)f.current.set(p,[v,_]);else continue}n.push(p)}var a=[...f.current.keys()].filter(p=>!this.current.has(p));if(a.length===0)t&&f.discard();else if(n.length>0){if(t)for(const p of this.#f)f.unskip_effect(p,v=>{(v.f&(gt|Ln))!==0?f.schedule(v):f.#g([v])});f.activate();var s=new Set,i=new Map;for(var o of n)xs(o,a,s,i);i=new Map;var l=[...f.current.keys()].filter(p=>this.current.has(p)?this.current.get(p)[0]!==p:!0);for(const p of this.#i)(p.f&(nt|Fe|Dr))===0&&na(p,l,i)&&((p.f&(Ln|gt))!==0?(be(p,Be),f.schedule(p)):f.#c.add(p));if(f.#t.length>0){f.apply();for(var u of f.#t)f.#m(u,[],[]);f.#t=[]}f.deactivate()}}for(const f of $t)f.#v.has(this)&&(f.#v.delete(this),f.#v.size===0&&!f.#u()&&(f.activate(),f.#p()))}increment(t,n){let r=this.#a.get(n)??0;if(this.#a.set(n,r+1),t){let a=this.#r.get(n)??0;this.#r.set(n,a+1)}}decrement(t,n,r){let a=this.#a.get(n)??0;if(a===1?this.#a.delete(n):this.#a.set(n,a-1),t){let s=this.#r.get(n)??0;s===1?this.#r.delete(n):this.#r.set(n,s-1)}this.#h||r||(this.#h=!0,Lt(()=>{this.#h=!1,this.flush()}))}transfer_effects(t,n){for(const r of t)this.#c.add(r);for(const r of n)this.#d.add(r);t.clear(),n.clear()}oncommit(t){this.#n.add(t)}ondiscard(t){this.#l.add(t)}on_fork_commit(t){this.#e.add(t)}run_fork_commit_callbacks(){for(const t of this.#e)t(this);this.#e.clear()}settled(){return(this.#s??=ms()).promise}static ensure(){if(Q===null){const t=Q=new jt;or||($t.add(Q),Pn||Lt(()=>{Q===t&&t.flush()}))}return Q}apply(){{ot=null;return}}schedule(t){if(qr=t,t.b?.is_pending&&(t.f&(_n|jn|ys))!==0&&(t.f&cn)===0){t.b.defer_effect(t);return}for(var n=t;n.parent!==null;){n=n.parent;var r=n.f;if(pn!==null&&n===ee&&(re===null||(re.f&Le)===0))return;if((r&(Ft|ct))!==0){if((r&Ae)===0)return;n.f^=Ae}}this.#t.push(n)}}function _o(e){var t=Pn;Pn=!0;try{for(var n;;){if(ho(),Q===null)return n;Q.flush()}}finally{Pn=t}}function mo(){try{Gi()}catch(e){Pt(e,qr)}}let Ct=null;function Ca(e){var t=e.length;if(t!==0){for(var n=0;n<t;){var r=e[n++];if((r.f&(nt|Fe))===0&&Vn(r)&&(Ct=new Set,wn(r),r.deps===null&&r.first===null&&r.nodes===null&&r.teardown===null&&r.ac===null&&Ys(r),Ct?.size>0)){en.clear();for(const a of Ct){if((a.f&(nt|Fe))!==0)continue;const s=[a];let i=a.parent;for(;i!==null;)Ct.has(i)&&(Ct.delete(i),s.push(i)),i=i.parent;for(let o=s.length-1;o>=0;o--){const l=s[o];(l.f&(nt|Fe))===0&&wn(l)}}Ct.clear()}}Ct=null}}function xs(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(const a of e.reactions){const s=a.f;(s&Le)!==0?xs(a,t,n,r):(s&(Ln|gt))!==0&&(s&Be)===0&&na(a,t,r)&&(be(a,Be),ra(a))}}function na(e,t,n){const r=n.get(e);if(r!==void 0)return r;if(e.deps!==null)for(const a of e.deps){if(gn.call(t,a))return!0;if((a.f&Le)!==0&&na(a,t,n))return n.set(a,!0),!0}return n.set(e,!1),!1}function ra(e){Q.schedule(e)}function Is(e,t){if(!((e.f&ct)!==0&&(e.f&Ae)!==0)){(e.f&Be)!==0?t.d.push(e):(e.f&_t)!==0&&t.m.push(e),be(e,Ae);for(var n=e.first;n!==null;)Is(n,t),n=n.next}}function Ps(e){be(e,Ae);for(var t=e.first;t!==null;)Ps(t),t=t.next}function yo(e){let t=0,n=sn(0),r;return()=>{ia()&&(c(n),la(()=>(t===0&&(r=dn(()=>e(()=>Mn(n)))),t+=1,()=>{Lt(()=>{t-=1,t===0&&(r?.(),r=void 0,Mn(n))})})))}}var wo=rn|En;function bo(e,t,n,r){new Eo(e,t,n,r)}class Eo{parent;is_pending=!1;transform_error;#n;#l=null;#e;#a;#r;#s=null;#t=null;#i=null;#c=null;#d=0;#o=0;#f=!1;#h=new Set;#v=new Set;#u=null;#_=yo(()=>(this.#u=sn(this.#d),()=>{this.#u=null}));constructor(t,n,r,a){this.#n=t,this.#e=n,this.#a=s=>{var i=ee;i.b=this,i.f|=Lr,r(s)},this.parent=ee.b,this.transform_error=a??this.parent?.transform_error??(s=>s),this.#r=zn(()=>{this.#y()},wo)}#p(){try{this.#s=et(()=>this.#a(this.#n))}catch(t){this.error(t)}}#m(t){const n=this.#e.failed;n&&(this.#i=et(()=>{n(this.#n,()=>t,()=>()=>{})}))}#g(){const t=this.#e.pending;t&&(this.is_pending=!0,this.#t=et(()=>t(this.#n)),Lt(()=>{var n=this.#c=document.createDocumentFragment(),r=Tt();n.append(r),this.#s=this.#b(()=>et(()=>this.#a(r))),this.#o===0&&(this.#n.before(n),this.#c=null,tn(this.#t,()=>{this.#t=null}),this.#w(Q))}))}#y(){try{if(this.is_pending=this.has_pending_snippet(),this.#o=0,this.#d=0,this.#s=et(()=>{this.#a(this.#n)}),this.#o>0){var t=this.#c=document.createDocumentFragment();ua(this.#s,t);const n=this.#e.pending;this.#t=et(()=>n(this.#n))}else this.#w(Q)}catch(n){this.error(n)}}#w(t){this.is_pending=!1,t.transfer_effects(this.#h,this.#v)}defer_effect(t){Rs(t,this.#h,this.#v)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#e.pending}#b(t){var n=ee,r=re,a=ye;yt(this.#r),st(this.#r),mn(this.#r.ctx);try{return jt.ensure(),t()}catch(s){return As(s),null}finally{yt(n),st(r),mn(a)}}#E(t,n){if(!this.has_pending_snippet()){this.parent&&this.parent.#E(t,n);return}this.#o+=t,this.#o===0&&(this.#w(n),this.#t&&tn(this.#t,()=>{this.#t=null}),this.#c&&(this.#n.before(this.#c),this.#c=null))}update_pending_count(t,n){this.#E(t,n),this.#d+=t,!(!this.#u||this.#f)&&(this.#f=!0,Lt(()=>{this.#f=!1,this.#u&&yn(this.#u,this.#d)}))}get_effect_pending(){return this.#_(),c(this.#u)}error(t){if(!this.#e.onerror&&!this.#e.failed)throw t;Q?.is_fork?(this.#s&&Q.skip_effect(this.#s),this.#t&&Q.skip_effect(this.#t),this.#i&&Q.skip_effect(this.#i),Q.on_fork_commit(()=>{this.#k(t)})):this.#k(t)}#k(t){this.#s&&(Je(this.#s),this.#s=null),this.#t&&(Je(this.#t),this.#t=null),this.#i&&(Je(this.#i),this.#i=null);var n=this.#e.onerror;let r=this.#e.failed;var a=!1,s=!1;const i=()=>{if(a){co();return}a=!0,s&&Xi(),this.#i!==null&&tn(this.#i,()=>{this.#i=null}),this.#b(()=>{this.#y()})},o=l=>{try{s=!0,n?.(l,i),s=!1}catch(u){Pt(u,this.#r&&this.#r.parent)}r&&(this.#i=this.#b(()=>{try{return et(()=>{var u=ee;u.b=this,u.f|=Lr,r(this.#n,()=>l,()=>i)})}catch(u){return Pt(u,this.#r.parent),null}}))};Lt(()=>{var l;try{l=this.transform_error(t)}catch(u){Pt(u,this.#r&&this.#r.parent);return}l!==null&&typeof l=="object"&&typeof l.then=="function"?l.then(o,u=>Pt(u,this.#r&&this.#r.parent)):o(l)})}}function ko(e,t,n,r){const a=kn()?ar:Zn;var s=e.filter(v=>!v.settled);if(n.length===0&&s.length===0){r(t.map(a));return}var i=ee,o=Co(),l=s.length===1?s[0].promise:s.length>1?Promise.all(s.map(v=>v.promise)):null;function u(v){o();try{r(v)}catch(_){(i.f&nt)===0&&Pt(_,i)}Xn()}if(n.length===0){l.then(()=>u(t.map(a)));return}var f=Ms();function p(){Promise.all(n.map(v=>So(v))).then(v=>u([...t.map(a),...v])).catch(v=>Pt(v,i)).finally(()=>f())}l?l.then(()=>{o(),p(),Xn()}):p()}function Co(){var e=ee,t=re,n=ye,r=Q;return function(s=!0){yt(e),st(t),mn(n),s&&(e.f&nt)===0&&(r?.activate(),r?.apply())}}function Xn(e=!0){yt(null),st(null),mn(null),e&&Q?.deactivate()}function Ms(){var e=ee,t=e.b,n=Q,r=t.is_rendered();return t.update_pending_count(1,n),n.increment(r,e),(a=!1)=>{t.update_pending_count(-1,n),n.decrement(r,e,a)}}function ar(e){var t=Le|Be;return ee!==null&&(ee.f|=En),{ctx:ye,deps:null,effects:null,equals:Cs,f:t,fn:e,reactions:null,rv:0,v:Re,wv:0,parent:ee,ac:null}}function So(e,t,n){let r=ee;r===null&&zi();var a=void 0,s=sn(Re),i=!re,o=new Map;return Uo(()=>{var l=ee,u=ms();a=u.promise;try{Promise.resolve(e()).then(u.resolve,u.reject).finally(Xn)}catch(_){u.reject(_),Xn()}var f=Q;if(i){if((l.f&cn)!==0)var p=Ms();if(r.b.is_rendered())o.get(f)?.reject(St),o.delete(f);else{for(const _ of o.values())_.reject(St);o.clear()}o.set(f,u)}const v=(_,b=void 0)=>{if(p){var A=b===St;p(A)}if(!(b===St||(l.f&nt)!==0)){if(f.activate(),b)s.f|=Bt,yn(s,b);else{(s.f&Bt)!==0&&(s.f^=Bt),yn(s,_);for(const[E,y]of o){if(o.delete(E),E===f)break;y.reject(St)}}f.deactivate()}};u.promise.then(v,_=>v(null,_||"unknown"))}),oa(()=>{for(const l of o.values())l.reject(St)}),new Promise(l=>{function u(f){function p(){f===a?l(s):u(a)}f.then(p,p)}u(a)})}function W(e){const t=ar(e);return $s(t),t}function Zn(e){const t=ar(e);return t.equals=Ss,t}function To(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n<t.length;n+=1)Je(t[n])}}function aa(e){var t,n=ee,r=e.parent;if(!Ot&&r!==null&&(r.f&(nt|Fe))!==0)return oo(),e.v;yt(r);try{e.f&=~an,To(e),t=ei(e)}finally{yt(n)}return t}function Bs(e){var t=aa(e);if(!e.equals(t)&&(e.wv=Xs(),(!Q?.is_fork||e.deps===null)&&(Q!==null?Q.capture(e,t,!0):e.v=t,e.deps===null))){be(e,Ae);return}Ot||(ot!==null?(ia()||Q?.is_fork)&&ot.set(e,t):ta(e))}function Ao(e){if(e.effects!==null)for(const t of e.effects)(t.teardown||t.ac)&&(t.teardown?.(),t.ac?.abort(St),t.teardown=ea,t.ac=null,Dn(t,0),ca(t))}function Ls(e){if(e.effects!==null)for(const t of e.effects)t.teardown&&wn(t)}let Ur=new Set;const en=new Map;let Ds=!1;function sn(e,t){var n={f:0,v:e,reactions:null,equals:Cs,rv:0,wv:0};return n}function $(e,t){const n=sn(e);return $s(n),n}function No(e,t=!1,n=!0){const r=sn(e);return t||(r.equals=Ss),On&&n&&ye!==null&&ye.l!==null&&(ye.l.s??=[]).push(r),r}function q(e,t,n=!1){re!==null&&(!lt||(re.f&Dr)!==0)&&kn()&&(re.f&(Le|gt|Ln|Dr))!==0&&(rt===null||!gn.call(rt,e))&&Qi();let r=n?We(t):t;return yn(e,r,Wn)}function yn(e,t,n=null){if(!e.equals(t)){en.set(e,Ot?t:e.v);var r=jt.ensure();if(r.capture(e,t),(e.f&Le)!==0){const a=e;(e.f&Be)!==0&&aa(a),ot===null&&ta(a)}e.wv=Xs(),qs(e,Be,n),kn()&&ee!==null&&(ee.f&Ae)!==0&&(ee.f&(ct|Ft))===0&&(Ze===null?jo([e]):Ze.push(e)),!r.is_fork&&Ur.size>0&&!Ds&&Ro()}return t}function Ro(){Ds=!1;for(const e of Ur)(e.f&Ae)!==0&&be(e,_t),Vn(e)&&wn(e);Ur.clear()}function Mn(e){q(e,e.v+1)}function qs(e,t,n){var r=e.reactions;if(r!==null)for(var a=kn(),s=r.length,i=0;i<s;i++){var o=r[i],l=o.f;if(!(!a&&o===ee)){var u=(l&Be)===0;if(u&&be(o,t),(l&Le)!==0){var f=o;ot?.delete(f),(l&an)===0&&(l&tt&&(ee===null||(ee.f&Qn)===0)&&(o.f|=an),qs(f,_t,n))}else if(u){var p=o;(l&gt)!==0&&Ct!==null&&Ct.add(p),n!==null?n.push(p):ra(p)}}}}function We(e){if(typeof e!="object"||e===null||Zt in e)return e;const t=Zr(e);if(t!==qi&&t!==Ui)return e;var n=new Map,r=Xr(e),a=$(0),s=nn,i=o=>{if(nn===s)return o();var l=re,u=nn;st(null),Ra(s);var f=o();return st(l),Ra(u),f};return r&&n.set("length",$(e.length)),new Proxy(e,{defineProperty(o,l,u){(!("value"in u)||u.configurable===!1||u.enumerable===!1||u.writable===!1)&&Wi();var f=n.get(l);return f===void 0?i(()=>{var p=$(u.value);return n.set(l,p),p}):q(f,u.value,!0),!0},deleteProperty(o,l){var u=n.get(l);if(u===void 0){if(l in o){const f=i(()=>$(Re));n.set(l,f),Mn(a)}}else q(u,Re),Mn(a);return!0},get(o,l,u){if(l===Zt)return e;var f=n.get(l),p=l in o;if(f===void 0&&(!p||In(o,l)?.writable)&&(f=i(()=>{var _=We(p?o[l]:Re),b=$(_);return b}),n.set(l,f)),f!==void 0){var v=c(f);return v===Re?void 0:v}return Reflect.get(o,l,u)},getOwnPropertyDescriptor(o,l){var u=Reflect.getOwnPropertyDescriptor(o,l);if(u&&"value"in u){var f=n.get(l);f&&(u.value=c(f))}else if(u===void 0){var p=n.get(l),v=p?.v;if(p!==void 0&&v!==Re)return{enumerable:!0,configurable:!0,value:v,writable:!0}}return u},has(o,l){if(l===Zt)return!0;var u=n.get(l),f=u!==void 0&&u.v!==Re||Reflect.has(o,l);if(u!==void 0||ee!==null&&(!f||In(o,l)?.writable)){u===void 0&&(u=i(()=>{var v=f?We(o[l]):Re,_=$(v);return _}),n.set(l,u));var p=c(u);if(p===Re)return!1}return f},set(o,l,u,f){var p=n.get(l),v=l in o;if(r&&l==="length")for(var _=u;_<p.v;_+=1){var b=n.get(_+"");b!==void 0?q(b,Re):_ in o&&(b=i(()=>$(Re)),n.set(_+"",b))}if(p===void 0)(!v||In(o,l)?.writable)&&(p=i(()=>$(void 0)),q(p,We(u)),n.set(l,p));else{v=p.v!==Re;var A=i(()=>We(u));q(p,A)}var E=Reflect.getOwnPropertyDescriptor(o,l);if(E?.set&&E.set.call(f,u),!v){if(r&&typeof l=="string"){var y=n.get("length"),B=Number(l);Number.isInteger(B)&&B>=y.v&&q(y,B+1)}Mn(a)}return!0},ownKeys(o){c(a);var l=Reflect.ownKeys(o).filter(p=>{var v=n.get(p);return v===void 0||v.v!==Re});for(var[u,f]of n)f.v!==Re&&!(u in o)&&l.push(u);return l},setPrototypeOf(){$i()}})}function Sa(e){try{if(e!==null&&typeof e=="object"&&Zt in e)return e[Zt]}catch{}return e}function xo(e,t){return Object.is(Sa(e),Sa(t))}var Ta,Us,Fs,js;function Io(){if(Ta===void 0){Ta=window,Us=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;Fs=In(t,"firstChild").get,js=In(t,"nextSibling").get,ba(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),ba(n)&&(n.__t=void 0)}}function Tt(e=""){return document.createTextNode(e)}function pt(e){return Fs.call(e)}function Hn(e){return js.call(e)}function d(e,t){return pt(e)}function ue(e,t=!1){{var n=pt(e);return n instanceof Comment&&n.data===""?Hn(n):n}}function h(e,t=1,n=!1){let r=e;for(;t--;)r=Hn(r);return r}function Po(e){e.textContent=""}function Os(){return!1}function Hs(e,t,n){return document.createElementNS(t??ks,e,void 0)}let Aa=!1;function Mo(){Aa||(Aa=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t.__on_r?.()})},{capture:!0}))}function sr(e){var t=re,n=ee;st(null),yt(null);try{return e()}finally{st(t),yt(n)}}function sa(e,t,n,r=n){e.addEventListener(t,()=>sr(n));const a=e.__on_r;a?e.__on_r=()=>{a(),r(!0)}:e.__on_r=()=>r(!0),Mo()}function zs(e){ee===null&&(re===null&&Yi(),Ji()),Ot&&Ki()}function Bo(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function wt(e,t){var n=ee;n!==null&&(n.f&Fe)!==0&&(e|=Fe);var r={ctx:ye,deps:null,nodes:null,f:e|Be|tt,first:null,fn:t,last:null,next:null,parent:n,b:n&&n.b,prev:null,teardown:null,wv:0,ac:null};Q?.register_created_effect(r);var a=r;if((e&_n)!==0)pn!==null?pn.push(r):jt.ensure().schedule(r);else if(t!==null){try{wn(r)}catch(i){throw Je(r),i}a.deps===null&&a.teardown===null&&a.nodes===null&&a.first===a.last&&(a.f&En)===0&&(a=a.first,(e&gt)!==0&&(e&rn)!==0&&a!==null&&(a.f|=rn))}if(a!==null&&(a.parent=n,n!==null&&Bo(a,n),re!==null&&(re.f&Le)!==0&&(e&Ft)===0)){var s=re;(s.effects??=[]).push(a)}return r}function ia(){return re!==null&&!lt}function oa(e){const t=wt(jn,null);return be(t,Ae),t.teardown=e,t}function mt(e){zs();var t=ee.f,n=!re&&(t&ct)!==0&&(t&cn)===0;if(n){var r=ye;(r.e??=[]).push(e)}else return Vs(e)}function Vs(e){return wt(_n|ws,e)}function Lo(e){return zs(),wt(jn|ws,e)}function Do(e){jt.ensure();const t=wt(Ft|En,e);return(n={})=>new Promise(r=>{n.outro?tn(t,()=>{Je(t),r(void 0)}):(Je(t),r(void 0))})}function qo(e){return wt(_n,e)}function Uo(e){return wt(Ln|En,e)}function la(e,t=0){return wt(jn|t,e)}function j(e,t=[],n=[],r=[]){ko(r,t,n,a=>{wt(jn,()=>e(...a.map(c)))})}function zn(e,t=0){var n=wt(gt|t,e);return n}function et(e){return wt(ct|En,e)}function Ks(e){var t=e.teardown;if(t!==null){const n=Ot,r=re;Na(!0),st(null);try{t.call(null)}finally{Na(n),st(r)}}}function ca(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const a=n.ac;a!==null&&sr(()=>{a.abort(St)});var r=n.next;(n.f&Ft)!==0?n.parent=null:Je(n,t),n=r}}function Fo(e){for(var t=e.first;t!==null;){var n=t.next;(t.f&ct)===0&&Je(t),t=n}}function Je(e,t=!0){var n=!1;(t||(e.f&ji)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(Js(e.nodes.start,e.nodes.end),n=!0),be(e,Ea),ca(e,t&&!n),Dn(e,0);var r=e.nodes&&e.nodes.t;if(r!==null)for(const s of r)s.stop();Ks(e),e.f^=Ea,e.f|=nt;var a=e.parent;a!==null&&a.first!==null&&Ys(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function Js(e,t){for(;e!==null;){var n=e===t?null:Hn(e);e.remove(),e=n}}function Ys(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function tn(e,t,n=!0){var r=[];Gs(e,r,!0);var a=()=>{n&&Je(e),t&&t()},s=r.length;if(s>0){var i=()=>--s||a();for(var o of r)o.out(i)}else a()}function Gs(e,t,n){if((e.f&Fe)===0){e.f^=Fe;var r=e.nodes&&e.nodes.t;if(r!==null)for(const o of r)(o.is_global||n)&&t.push(o);for(var a=e.first;a!==null;){var s=a.next;if((a.f&Ft)===0){var i=(a.f&rn)!==0||(a.f&ct)!==0&&(e.f&gt)!==0;Gs(a,t,i?n:!1)}a=s}}}function da(e){Ws(e,!0)}function Ws(e,t){if((e.f&Fe)!==0){e.f^=Fe,(e.f&Ae)===0&&(be(e,Be),jt.ensure().schedule(e));for(var n=e.first;n!==null;){var r=n.next,a=(n.f&rn)!==0||(n.f&ct)!==0;Ws(n,a?t:!1),n=r}var s=e.nodes&&e.nodes.t;if(s!==null)for(const i of s)(i.is_global||t)&&i.in()}}function ua(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var a=n===r?null:Hn(n);t.append(n),n=a}}let $n=!1,Ot=!1;function Na(e){Ot=e}let re=null,lt=!1;function st(e){re=e}let ee=null;function yt(e){ee=e}let rt=null;function $s(e){re!==null&&(rt===null?rt=[e]:rt.push(e))}let ze=null,Ge=0,Ze=null;function jo(e){Ze=e}let Qs=1,Xt=0,nn=Xt;function Ra(e){nn=e}function Xs(){return++Qs}function Vn(e){var t=e.f;if((t&Be)!==0)return!0;if(t&Le&&(e.f&=~an),(t&_t)!==0){for(var n=e.deps,r=n.length,a=0;a<r;a++){var s=n[a];if(Vn(s)&&Bs(s),s.wv>e.wv)return!0}(t&tt)!==0&&ot===null&&be(e,Ae)}return!1}function Zs(e,t,n=!0){var r=e.reactions;if(r!==null&&!(rt!==null&&gn.call(rt,e)))for(var a=0;a<r.length;a++){var s=r[a];(s.f&Le)!==0?Zs(s,t,!1):t===s&&(n?be(s,Be):(s.f&Ae)!==0&&be(s,_t),ra(s))}}function ei(e){var t=ze,n=Ge,r=Ze,a=re,s=rt,i=ye,o=lt,l=nn,u=e.f;ze=null,Ge=0,Ze=null,re=(u&(ct|Ft))===0?e:null,rt=null,mn(e.ctx),lt=!1,nn=++Xt,e.ac!==null&&(sr(()=>{e.ac.abort(St)}),e.ac=null);try{e.f|=Qn;var f=e.fn,p=f();e.f|=cn;var v=e.deps,_=Q?.is_fork;if(ze!==null){var b;if(_||Dn(e,Ge),v!==null&&Ge>0)for(v.length=Ge+ze.length,b=0;b<ze.length;b++)v[Ge+b]=ze[b];else e.deps=v=ze;if(ia()&&(e.f&tt)!==0)for(b=Ge;b<v.length;b++)(v[b].reactions??=[]).push(e)}else!_&&v!==null&&Ge<v.length&&(Dn(e,Ge),v.length=Ge);if(kn()&&Ze!==null&&!lt&&v!==null&&(e.f&(Le|_t|Be))===0)for(b=0;b<Ze.length;b++)Zs(Ze[b],e);if(a!==null&&a!==e){if(Xt++,a.deps!==null)for(let A=0;A<n;A+=1)a.deps[A].rv=Xt;if(t!==null)for(const A of t)A.rv=Xt;Ze!==null&&(r===null?r=Ze:r.push(...Ze))}return(e.f&Bt)!==0&&(e.f^=Bt),p}catch(A){return As(A)}finally{e.f^=Qn,ze=t,Ge=n,Ze=r,re=a,rt=s,mn(i),lt=o,nn=l}}function Oo(e,t){let n=t.reactions;if(n!==null){var r=Li.call(n,e);if(r!==-1){var a=n.length-1;a===0?n=t.reactions=null:(n[r]=n[a],n.pop())}}if(n===null&&(t.f&Le)!==0&&(ze===null||!gn.call(ze,t))){var s=t;(s.f&tt)!==0&&(s.f^=tt,s.f&=~an),s.v!==Re&&ta(s),Ao(s),Dn(s,0)}}function Dn(e,t){var n=e.deps;if(n!==null)for(var r=t;r<n.length;r++)Oo(e,n[r])}function wn(e){var t=e.f;if((t&nt)===0){be(e,Ae);var n=ee,r=$n;ee=e,$n=!0;try{(t&(gt|ys))!==0?Fo(e):ca(e),Ks(e);var a=ei(e);e.teardown=typeof a=="function"?a:null,e.wv=Qs;var s;Bi&&fo&&(e.f&Be)!==0&&e.deps}finally{$n=r,ee=n}}}async function Ho(){await Promise.resolve(),_o()}function c(e){var t=e.f,n=(t&Le)!==0;if(re!==null&&!lt){var r=ee!==null&&(ee.f&nt)!==0;if(!r&&(rt===null||!gn.call(rt,e))){var a=re.deps;if((re.f&Qn)!==0)e.rv<Xt&&(e.rv=Xt,ze===null&&a!==null&&a[Ge]===e?Ge++:ze===null?ze=[e]:ze.push(e));else{(re.deps??=[]).push(e);var s=e.reactions;s===null?e.reactions=[re]:gn.call(s,re)||s.push(re)}}}if(Ot&&en.has(e))return en.get(e);if(n){var i=e;if(Ot){var o=i.v;return((i.f&Ae)===0&&i.reactions!==null||ni(i))&&(o=aa(i)),en.set(i,o),o}var l=(i.f&tt)===0&&!lt&&re!==null&&($n||(re.f&tt)!==0),u=(i.f&cn)===0;Vn(i)&&(l&&(i.f|=tt),Bs(i)),l&&!u&&(Ls(i),ti(i))}if(ot?.has(e))return ot.get(e);if((e.f&Bt)!==0)throw e.v;return e.v}function ti(e){if(e.f|=tt,e.deps!==null)for(const t of e.deps)(t.reactions??=[]).push(e),(t.f&Le)!==0&&(t.f&tt)===0&&(Ls(t),ti(t))}function ni(e){if(e.v===Re)return!0;if(e.deps===null)return!1;for(const t of e.deps)if(en.has(t)||(t.f&Le)!==0&&ni(t))return!0;return!1}function dn(e){var t=lt;try{return lt=!0,e()}finally{lt=t}}function zo(e){if(!(typeof e!="object"||!e||e instanceof EventTarget)){if(Zt in e)Fr(e);else if(!Array.isArray(e))for(let t in e){const n=e[t];typeof n=="object"&&n&&Zt in n&&Fr(n)}}}function Fr(e,t=new Set){if(typeof e=="object"&&e!==null&&!(e instanceof EventTarget)&&!t.has(e)){t.add(e),e instanceof Date&&e.getTime();for(let r in e)try{Fr(e[r],t)}catch{}const n=Zr(e);if(n!==Object.prototype&&n!==Array.prototype&&n!==Map.prototype&&n!==Set.prototype&&n!==Date.prototype){const r=_s(n);for(let a in r){const s=r[a].get;if(s)try{s.call(e)}catch{}}}}}const Vo=["touchstart","touchmove"];function Ko(e){return Vo.includes(e)}const Rn=Symbol("events"),ri=new Set,jr=new Set;function Jo(e,t,n,r={}){function a(s){if(r.capture||Or.call(t,s),!s.cancelBubble)return sr(()=>n?.call(this,s))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?Lt(()=>{t.addEventListener(e,a,r)}):t.addEventListener(e,a,r),a}function qn(e,t,n,r,a){var s={capture:r,passive:a},i=Jo(e,t,n,s);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&oa(()=>{t.removeEventListener(e,i,s)})}function fe(e,t,n){(t[Rn]??={})[e]=n}function bt(e){for(var t=0;t<e.length;t++)ri.add(e[t]);for(var n of jr)n(e)}let xa=null;function Or(e){var t=this,n=t.ownerDocument,r=e.type,a=e.composedPath?.()||[],s=a[0]||e.target;xa=e;var i=0,o=xa===e&&e[Rn];if(o){var l=a.indexOf(o);if(l!==-1&&(t===document||t===window)){e[Rn]=t;return}var u=a.indexOf(t);if(u===-1)return;l<=u&&(i=l)}if(s=a[i]||e.target,s!==t){Di(e,"currentTarget",{configurable:!0,get(){return s||n}});var f=re,p=ee;st(null),yt(null);try{for(var v,_=[];s!==null;){var b=s.assignedSlot||s.parentNode||s.host||null;try{var A=s[Rn]?.[r];A!=null&&(!s.disabled||e.target===s)&&A.call(s,e)}catch(E){v?_.push(E):v=E}if(e.cancelBubble||b===t||b===null)break;s=b}if(v){for(let E of _)queueMicrotask(()=>{throw E});throw v}}finally{e[Rn]=t,delete e.currentTarget,st(f),yt(p)}}}const Yo=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function Go(e){return Yo?.createHTML(e)??e}function ai(e){var t=Hs("template");return t.innerHTML=Go(e.replaceAll("<!>","<!---->")),t.content}function on(e,t){var n=ee;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function N(e,t){var n=(t&ro)!==0,r=(t&ao)!==0,a,s=!e.startsWith("<!>");return()=>{a===void 0&&(a=ai(s?e:"<!>"+e),n||(a=pt(a)));var i=r||Us?document.importNode(a,!0):a.cloneNode(!0);if(n){var o=pt(i),l=i.lastChild;on(o,l)}else on(i,i);return i}}function Wo(e,t,n="svg"){var r=!e.startsWith("<!>"),a=`<${n}>${r?e:"<!>"+e}</${n}>`,s;return()=>{if(!s){var i=ai(a),o=pt(i);s=pt(o)}var l=s.cloneNode(!0);return on(l,l),l}}function si(e,t){return Wo(e,t,"svg")}function Hr(e=""){{var t=Tt(e+"");return on(t,t),t}}function Ht(){var e=document.createDocumentFragment(),t=document.createComment(""),n=Tt();return e.append(t,n),on(t,n),e}function k(e,t){e!==null&&e.before(t)}function S(e,t){var n=t==null?"":typeof t=="object"?`${t}`:t;n!==(e.__t??=e.nodeValue)&&(e.__t=n,e.nodeValue=`${n}`)}function $o(e,t){return Qo(e,t)}const Yn=new Map;function Qo(e,{target:t,anchor:n,props:r={},events:a,context:s,intro:i=!0,transformError:o}){Io();var l=void 0,u=Do(()=>{var f=n??t.appendChild(Tt());bo(f,{pending:()=>{}},_=>{je({});var b=ye;s&&(b.c=s),a&&(r.$$events=a),l=e(_,r)||{},Oe()},o);var p=new Set,v=_=>{for(var b=0;b<_.length;b++){var A=_[b];if(!p.has(A)){p.add(A);var E=Ko(A);for(const M of[t,document]){var y=Yn.get(M);y===void 0&&(y=new Map,Yn.set(M,y));var B=y.get(A);B===void 0?(M.addEventListener(A,Or,{passive:E}),y.set(A,1)):y.set(A,B+1)}}}};return v(rr(ri)),jr.add(v),()=>{for(var _ of p)for(const E of[t,document]){var b=Yn.get(E),A=b.get(_);--A==0?(E.removeEventListener(_,Or),b.delete(_),b.size===0&&Yn.delete(E)):b.set(_,A)}jr.delete(v),f!==n&&f.parentNode?.removeChild(f)}});return Xo.set(l,u),l}let Xo=new WeakMap;class fa{anchor;#n=new Map;#l=new Map;#e=new Map;#a=new Set;#r=!0;constructor(t,n=!0){this.anchor=t,this.#r=n}#s=t=>{if(this.#n.has(t)){var n=this.#n.get(t),r=this.#l.get(n);if(r)da(r),this.#a.delete(n);else{var a=this.#e.get(n);a&&(this.#l.set(n,a.effect),this.#e.delete(n),a.fragment.lastChild.remove(),this.anchor.before(a.fragment),r=a.effect)}for(const[s,i]of this.#n){if(this.#n.delete(s),s===t)break;const o=this.#e.get(i);o&&(Je(o.effect),this.#e.delete(i))}for(const[s,i]of this.#l){if(s===n||this.#a.has(s))continue;const o=()=>{if(Array.from(this.#n.values()).includes(s)){var u=document.createDocumentFragment();ua(i,u),u.append(Tt()),this.#e.set(s,{effect:i,fragment:u})}else Je(i);this.#a.delete(s),this.#l.delete(s)};this.#r||!r?(this.#a.add(s),tn(i,o,!1)):o()}}};#t=t=>{this.#n.delete(t);const n=Array.from(this.#n.values());for(const[r,a]of this.#e)n.includes(r)||(Je(a.effect),this.#e.delete(r))};ensure(t,n){var r=Q,a=Os();if(n&&!this.#l.has(t)&&!this.#e.has(t))if(a){var s=document.createDocumentFragment(),i=Tt();s.append(i),this.#e.set(t,{effect:et(()=>n(i)),fragment:s})}else this.#l.set(t,et(()=>n(this.anchor)));if(this.#n.set(r,t),a){for(const[o,l]of this.#l)o===t?r.unskip_effect(l):r.skip_effect(l);for(const[o,l]of this.#e)o===t?r.unskip_effect(l.effect):r.skip_effect(l.effect);r.oncommit(this.#s),r.ondiscard(this.#t)}else this.#s(r)}}function z(e,t,n=!1){var r=new fa(e),a=n?rn:0;function s(i,o){r.ensure(i,o)}zn(()=>{var i=!1;t((o,l=0)=>{i=!0,s(l,o)}),i||s(-1,null)},a)}const Zo=Symbol("NaN");function el(e,t,n){var r=new fa(e),a=!kn();zn(()=>{var s=t();s!==s&&(s=Zo),a&&s!==null&&typeof s=="object"&&(s={}),r.ensure(s,n)})}function tl(e,t,n){for(var r=[],a=t.length,s,i=t.length,o=0;o<a;o++){let p=t[o];tn(p,()=>{if(s){if(s.pending.delete(p),s.done.add(p),s.pending.size===0){var v=e.outrogroups;zr(e,rr(s.done)),v.delete(s),v.size===0&&(e.outrogroups=null)}}else i-=1},!1)}if(i===0){var l=r.length===0&&n!==null;if(l){var u=n,f=u.parentNode;Po(f),f.append(u),e.items.clear()}zr(e,t,!l)}else s={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(s)}function zr(e,t,n=!0){var r;if(e.pending.size>0){r=new Set;for(const i of e.pending.values())for(const o of i)r.add(e.items.get(o).e)}for(var a=0;a<t.length;a++){var s=t[a];if(r?.has(s)){s.f|=ht;const i=document.createDocumentFragment();ua(s,i)}else Je(t[a],n)}}var Ia;function Dt(e,t,n,r,a,s=null){var i=e,o=new Map,l=(t&Es)!==0;if(l){var u=e;i=u.appendChild(Tt())}var f=null,p=Zn(()=>{var M=n();return Xr(M)?M:M==null?[]:rr(M)}),v,_=new Map,b=!0;function A(M){(B.effect.f&nt)===0&&(B.pending.delete(M),B.fallback=f,nl(B,v,i,t,r),f!==null&&(v.length===0?(f.f&ht)===0?da(f):(f.f^=ht,xn(f,null,i)):tn(f,()=>{f=null})))}function E(M){B.pending.delete(M)}var y=zn(()=>{v=c(p);for(var M=v.length,R=new Set,P=Q,I=Os(),x=0;x<M;x+=1){var D=v[x],T=r(D,x),F=b?null:o.get(T);F?(F.v&&yn(F.v,D),F.i&&yn(F.i,x),I&&P.unskip_effect(F.e)):(F=rl(o,b?i:Ia??=Tt(),D,T,x,a,t,n),b||(F.e.f|=ht),o.set(T,F)),R.add(T)}if(M===0&&s&&!f&&(b?f=et(()=>s(i)):(f=et(()=>s(Ia??=Tt())),f.f|=ht)),M>R.size&&Vi(),!b)if(_.set(P,R),I){for(const[C,w]of o)R.has(C)||P.skip_effect(w.e);P.oncommit(A),P.ondiscard(E)}else A(P);c(p)}),B={effect:y,items:o,pending:_,outrogroups:null,fallback:f};b=!1}function An(e){for(;e!==null&&(e.f&ct)===0;)e=e.next;return e}function nl(e,t,n,r,a){var s=(r&to)!==0,i=t.length,o=e.items,l=An(e.effect.first),u,f=null,p,v=[],_=[],b,A,E,y;if(s)for(y=0;y<i;y+=1)b=t[y],A=a(b,y),E=o.get(A).e,(E.f&ht)===0&&(E.nodes?.a?.measure(),(p??=new Set).add(E));for(y=0;y<i;y+=1){if(b=t[y],A=a(b,y),E=o.get(A).e,e.outrogroups!==null)for(const F of e.outrogroups)F.pending.delete(E),F.done.delete(E);if((E.f&Fe)!==0&&(da(E),s&&(E.nodes?.a?.unfix(),(p??=new Set).delete(E))),(E.f&ht)!==0)if(E.f^=ht,E===l)xn(E,null,n);else{var B=f?f.next:l;E===e.effect.last&&(e.effect.last=E.prev),E.prev&&(E.prev.next=E.next),E.next&&(E.next.prev=E.prev),xt(e,f,E),xt(e,E,B),xn(E,B,n),f=E,v=[],_=[],l=An(f.next);continue}if(E!==l){if(u!==void 0&&u.has(E)){if(v.length<_.length){var M=_[0],R;f=M.prev;var P=v[0],I=v[v.length-1];for(R=0;R<v.length;R+=1)xn(v[R],M,n);for(R=0;R<_.length;R+=1)u.delete(_[R]);xt(e,P.prev,I.next),xt(e,f,P),xt(e,I,M),l=M,f=I,y-=1,v=[],_=[]}else u.delete(E),xn(E,l,n),xt(e,E.prev,E.next),xt(e,E,f===null?e.effect.first:f.next),xt(e,f,E),f=E;continue}for(v=[],_=[];l!==null&&l!==E;)(u??=new Set).add(l),_.push(l),l=An(l.next);if(l===null)continue}(E.f&ht)===0&&v.push(E),f=E,l=An(E.next)}if(e.outrogroups!==null){for(const F of e.outrogroups)F.pending.size===0&&(zr(e,rr(F.done)),e.outrogroups?.delete(F));e.outrogroups.size===0&&(e.outrogroups=null)}if(l!==null||u!==void 0){var x=[];if(u!==void 0)for(E of u)(E.f&Fe)===0&&x.push(E);for(;l!==null;)(l.f&Fe)===0&&l!==e.fallback&&x.push(l),l=An(l.next);var D=x.length;if(D>0){var T=(r&Es)!==0&&i===0?n:null;if(s){for(y=0;y<D;y+=1)x[y].nodes?.a?.measure();for(y=0;y<D;y+=1)x[y].nodes?.a?.fix()}tl(e,x,T)}}s&&Lt(()=>{if(p!==void 0)for(E of p)E.nodes?.a?.apply()})}function rl(e,t,n,r,a,s,i,o){var l=(i&Zi)!==0?(i&no)===0?No(n,!1,!1):sn(n):null,u=(i&eo)!==0?sn(a):null;return{v:l,i:u,e:et(()=>(s(t,l??n,u??a,o),()=>{e.delete(r)}))}}function xn(e,t,n){if(e.nodes)for(var r=e.nodes.start,a=e.nodes.end,s=t&&(t.f&ht)===0?t.nodes.start:n;r!==null;){var i=Hn(r);if(s.before(r),r===a)return;r=i}}function xt(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}function al(e,t,n=!1,r=!1,a=!1,s=!1){var i=e,o="";if(n)var l=e;j(()=>{var u=ee;if(o!==(o=t()??"")){if(n){u.nodes=null,l.innerHTML=o,o!==""&&on(pt(l),l.lastChild);return}if(u.nodes!==null&&(Js(u.nodes.start,u.nodes.end),u.nodes=null),o!==""){var f=r?so:a?io:void 0,p=Hs(r?"svg":a?"math":"template",f);p.innerHTML=o;var v=r||a?p:p.content;if(on(pt(v),v.lastChild),r||a)for(;pt(v);)i.before(pt(v));else i.before(v)}}})}function ii(e,t,...n){var r=new fa(e);zn(()=>{const a=t()??null;r.ensure(a,a&&(s=>a(s,...n)))},rn)}function oi(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=oi(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}function sl(){for(var e,t,n=0,r="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=oi(e))&&(r&&(r+=" "),r+=t);return r}function il(e){return typeof e=="object"?sl(e):e??""}const Pa=[...`
2
+ \r\f \v\uFEFF`];function ol(e,t,n){var r=e==null?"":""+e;if(t&&(r=r?r+" "+t:t),n){for(var a of Object.keys(n))if(n[a])r=r?r+" "+a:a;else if(r.length)for(var s=a.length,i=0;(i=r.indexOf(a,i))>=0;){var o=i+s;(i===0||Pa.includes(r[i-1]))&&(o===r.length||Pa.includes(r[o]))?r=(i===0?"":r.substring(0,i))+r.substring(o+1):i=o}}return r===""?null:r}function ll(e,t){return e==null?null:String(e)}function at(e,t,n,r,a,s){var i=e.__className;if(i!==n||i===void 0){var o=ol(n,r,s);o==null?e.removeAttribute("class"):e.className=o,e.__className=n}else if(s&&a!==s)for(var l in s){var u=!!s[l];(a==null||u!==!!a[l])&&e.classList.toggle(l,u)}return s}function Vr(e,t,n,r){var a=e.__style;if(a!==t){var s=ll(t);s==null?e.removeAttribute("style"):e.style.cssText=s,e.__style=t}return r}function li(e,t,n=!1){if(e.multiple){if(t==null)return;if(!Xr(t))return lo();for(var r of e.options)r.selected=t.includes(Bn(r));return}for(r of e.options){var a=Bn(r);if(xo(a,t)){r.selected=!0;return}}(!n||t!==void 0)&&(e.selectedIndex=-1)}function cl(e){var t=new MutationObserver(()=>{li(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),oa(()=>{t.disconnect()})}function dl(e,t,n=t){var r=new WeakSet,a=!0;sa(e,"change",s=>{var i=s?"[selected]":":checked",o;if(e.multiple)o=[].map.call(e.querySelectorAll(i),Bn);else{var l=e.querySelector(i)??e.querySelector("option:not([disabled])");o=l&&Bn(l)}n(o),e.__value=o,Q!==null&&r.add(Q)}),qo(()=>{var s=t();if(e===document.activeElement){var i=Q;if(r.has(i))return}if(li(e,s,a),a&&s===void 0){var o=e.querySelector(":checked");o!==null&&(s=Bn(o),n(s))}e.__value=s,a=!1}),cl(e)}function Bn(e){return"__value"in e?e.__value:e.value}const ul=Symbol("is custom element"),fl=Symbol("is html"),vl=Hi?"progress":"PROGRESS";function ci(e,t){var n=di(e);n.value===(n.value=t??void 0)||e.value===t&&(t!==0||e.nodeName!==vl)||(e.value=t??"")}function ae(e,t,n,r){var a=di(e);a[t]!==(a[t]=n)&&(t==="loading"&&(e[Oi]=n),n==null?e.removeAttribute(t):typeof n!="string"&&hl(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function di(e){return e.__attributes??={[ul]:e.nodeName.includes("-"),[fl]:e.namespaceURI===ks}}var Ma=new Map;function hl(e){var t=e.getAttribute("is")||e.nodeName,n=Ma.get(t);if(n)return n;Ma.set(t,n=[]);for(var r,a=e,s=Element.prototype;s!==a;){r=_s(a);for(var i in r)r[i].set&&n.push(i);a=Zr(a)}return n}function Un(e,t,n=t){var r=new WeakSet;sa(e,"input",async a=>{var s=a?e.defaultValue:e.value;if(s=lr(e)?cr(s):s,n(s),Q!==null&&r.add(Q),await Ho(),s!==(s=t())){var i=e.selectionStart,o=e.selectionEnd,l=e.value.length;if(e.value=s??"",o!==null){var u=e.value.length;i===o&&o===l&&u>l?(e.selectionStart=u,e.selectionEnd=u):(e.selectionStart=i,e.selectionEnd=Math.min(o,u))}}}),dn(t)==null&&e.value&&(n(lr(e)?cr(e.value):e.value),Q!==null&&r.add(Q)),la(()=>{var a=t();if(e===document.activeElement){var s=Q;if(r.has(s))return}lr(e)&&a===cr(e.value)||e.type==="date"&&!a&&!e.value||a!==e.value&&(e.value=a??"")})}function Kr(e,t,n=t){sa(e,"change",r=>{var a=r?e.defaultChecked:e.checked;n(a)}),dn(t)==null&&n(e.checked),la(()=>{var r=t();e.checked=!!r})}function lr(e){var t=e.type;return t==="number"||t==="range"}function cr(e){return e===""?null:+e}function ui(e=!1){const t=ye,n=t.l.u;if(!n)return;let r=()=>zo(t.s);if(e){let a=0,s={};const i=ar(()=>{let o=!1;const l=t.s;for(const u in l)l[u]!==s[u]&&(s[u]=l[u],o=!0);return o&&a++,a});r=()=>c(i)}n.b.length&&Lo(()=>{Ba(t,r),Br(n.b)}),mt(()=>{const a=dn(()=>n.m.map(Fi));return()=>{for(const s of a)typeof s=="function"&&s()}}),n.a.length&&mt(()=>{Ba(t,r),Br(n.a)})}function Ba(e,t){if(e.l.s)for(const n of e.l.s)c(n);t()}function qt(e,t,n,r){var a=r,s=!0,i=()=>(s&&(s=!1,a=r),a),o;o=e[t],o===void 0&&r!==void 0&&(o=i());var l;return l=()=>{var u=e[t];return u===void 0?i():(s=!0,u)},l}function zt(e){ye===null&&bs(),On&&ye.l!==null?gl(ye).m.push(e):mt(()=>{const t=dn(e);if(typeof t=="function")return t})}function pl(e){ye===null&&bs(),zt(()=>()=>dn(e))}function gl(e){var t=e.l;return t.u??={a:[],b:[],m:[]}}const _l="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(_l);vo();class Ke extends Error{code;status;constructor(t,n,r=0){super(n),this.name="ApiError",this.code=t,this.status=r}}async function Qe(e,t={}){let n;try{n=await fetch(e,{...t,headers:{accept:"application/json",...t.body!==void 0&&t.body!==null?{"content-type":"application/json"}:{},...t.headers??{}}})}catch(i){throw new Ke("network",i.message||"Network request failed",0)}const s=(n.headers.get("content-type")??"").includes("application/json")?await n.json().catch(()=>null):null;if(!n.ok){const i=s;throw i&&i.ok===!1&&i.error?new Ke(i.error.code,i.error.message,n.status):new Ke(`http_${n.status}`,n.statusText||"Request failed",n.status)}if(s&&typeof s=="object"){const i=s;if(i.ok===!1&&i.error)throw new Ke(i.error.code,i.error.message,n.status);if(i.ok===!0&&"data"in i)return i.data}return s}function Kn(e,t){const n=t===void 0?{method:"POST"}:{method:"POST",body:JSON.stringify(t)};return Qe(e,n)}function er(e,t){const n=t===void 0?{method:"PUT"}:{method:"PUT",body:JSON.stringify(t)};return Qe(e,n)}function ml(e){return Qe(e,{method:"DELETE"})}function yl(e,t,n){if(!e)return"loading";const r=e.directReachability;return r==="unreachable"||r==="cgnat"||t.some(a=>a.status!=="running")||n?.lastError?"warn":"ok"}const ne=We({status:"loading",service:null,nodes:[],nodeStats:{},hostedNodes:{list:[],loaded:!1,error:null},connectivity:null,update:null,settings:null,toasts:[]});function At(){return ne}const La=6e3;let wl=0;function we(e,t){const n=`t${++wl}`,r={id:n,kind:e,text:t,expiresAt:Date.now()+La};ne.toasts.push(r),setTimeout(()=>fi(n),La)}function fi(e){ne.toasts=ne.toasts.filter(t=>t.id!==e)}async function va(e){try{await navigator.clipboard.writeText(e),we("success","Copied to clipboard")}catch(t){we("error",`Copy failed: ${t.message}`)}}function $e(e,t){const n=t instanceof Ke?t.code:"error",r=t instanceof Error?t.message:String(t);console.error(`[cadre-host-ui] ${e}:`,t),we("error",`${e}: ${r} (${n})`)}function ln(){ne.status=yl(ne.connectivity,ne.nodes,ne.update)}async function vi(){try{const e=await Qe("/api/status");ne.service=e.service,ne.connectivity=e.connectivity,ne.nodes.length===0&&(ne.nodes=e.nodes.map(t=>({id:t.id,dockerId:"",partyId:t.partyId,profile:t.profile,status:t.status,spawnedAt:"",workdir:"",ports:{health:0,metrics:0,p2p:0,ws:0}}))),ln()}catch(e){$e("status",e),ne.status="error"}}async function ha(){try{const e=await Qe("/api/nodes");ne.nodes=e.nodes,ln()}catch(e){$e("nodes",e)}}async function Da(e){try{const t=await Qe(`/api/nodes/${encodeURIComponent(e)}`);return ne.nodes=ne.nodes.some(n=>n.id===e)?ne.nodes.map(n=>n.id===e?t.node:n):[...ne.nodes,t.node],ne.nodeStats={...ne.nodeStats,[e]:t.stats},t}catch(t){return t instanceof Ke&&t.status===404?ne.nodes=ne.nodes.filter(n=>n.id!==e):$e(`node ${e}`,t),null}}let bl=0,dr=0;async function Nt(){const e=++bl;try{const t=await Qe("/api/hosted-nodes");if(e<dr)return;dr=e,ne.hostedNodes={list:t.nodes,loaded:!0,error:null}}catch(t){if($e("hosted nodes",t),e<dr)return;ne.hostedNodes={...ne.hostedNodes,error:t instanceof Error?t.message:String(t)}}}function Jn(){return Promise.all([Nt(),ha(),Mt()])}async function qa(e){const t=await Kn("/api/hosted-nodes",e===void 0?void 0:{invitation:e});return await Jn(),t.node}async function hi(e){const t=await Kn(`/api/hosted-nodes/${encodeURIComponent(e)}/retry`);return await Jn(),t.node}async function pi(e){await ml(`/api/hosted-nodes/${encodeURIComponent(e)}`),await Jn()}async function El(e){const t=await Kn(`/api/hosted-nodes/${encodeURIComponent(e)}/reset`);return await Jn(),t.node}function kl(e){return Qe(`/api/hosted-nodes/${encodeURIComponent(e)}/claim`)}async function Mt(){try{const e=await Qe("/nat/status");ne.connectivity=e,ln()}catch(e){$e("connectivity",e)}}async function Cl(e,t){ne.connectivity=await er(`/nat/nodes/${encodeURIComponent(e)}/forward`,t),ln()}async function tr(){try{const e=await Qe("/update");ne.update=e,ln()}catch{ne.update=null}}async function Jr(){try{const e=await Qe("/api/settings");ne.settings=e}catch(e){$e("settings",e)}}function Sl(e){let t;try{t=JSON.parse(e.data)}catch{return}switch(e.type){case"node-state-changed":{const n=t.nodeId,r=t.status;n&&r&&(ne.nodes=ne.nodes.map(a=>a.id===n?{...a,status:r}:a),ln()),Nt();break}case"connectivity-changed":Mt();break;case"hosted-nodes-changed":Jn();break;case"update-available":{const n=t.version,r=t.releaseNotesUrl;n&&(ne.update={...ne.update??{version:1},available:{version:n,publishedAt:ne.update?.available?.publishedAt??new Date().toISOString(),...r?{releaseNotesUrl:r}:{}}},ln());break}}}const Yr={name:"home",params:{}};function gi(e){const t=e.startsWith("#")?e.slice(1):e,n=t.startsWith("/")?t.slice(1):t;if(!n)return Yr;const r=n.split("/").filter(Boolean);switch(r[0]){case"connectivity":return{name:"connectivity",params:{}};case"nodes":return r.length>=2&&r[1]?{name:"node-detail",params:{id:decodeURIComponent(r[1])}}:{name:"nodes",params:{}};case"join":return{name:"join",params:{}};case"settings":return{name:"settings",params:{}};default:return Yr}}function Ve(e,t={}){switch(e){case"home":return"#/";case"connectivity":return"#/connectivity";case"nodes":return"#/nodes";case"node-detail":return`#/nodes/${encodeURIComponent(t.id??"")}`;case"join":return"#/join";case"settings":return"#/settings"}}function Ua(e){if(typeof window>"u")return;const t=e.startsWith("#")?e:`#${e.startsWith("/")?e:`/${e}`}`;window.location.hash!==t&&(window.location.hash=t)}const _i=We({route:typeof window>"u"?Yr:gi(window.location.hash)});let nr=!1;function Gr(){_i.route=gi(window.location.hash)}function Tl(){return _i}function Al(){nr||typeof window>"u"||(nr=!0,window.addEventListener("hashchange",Gr),Gr())}function Nl(){!nr||typeof window>"u"||(nr=!1,window.removeEventListener("hashchange",Gr))}const Rl=["node-state-changed","hosted-nodes-changed","connectivity-changed","update-available"],xl=[2e3,4e3,8e3,16e3,3e4];function Il(e,t={}){const n=t.url??"/api/events",r=t.eventSourceCtor??(typeof EventSource<"u"?EventSource:void 0);if(!r)return{close(){}};const a=r,s=t.backoffSchedule??xl;let i=!1,o=0,l,u;function f(v){const _=Math.min(v,s.length-1);return s[_]??s[s.length-1]}function p(){if(i)return;u=new a(n);const v=u;v.onopen=()=>{i||(o=0,t.onOpen?.())};for(const _ of Rl)v.addEventListener(_,b=>{e({type:_,data:b.data??""})});v.onerror=()=>{if(i)return;try{v.close()}catch{}const _=f(o);t.onError?.(o,_),o+=1,l=setTimeout(p,_)}}return p(),{close(){if(i=!0,l&&clearTimeout(l),u)try{u.close()}catch{}}}}function pa(e){return e.join.kind==="claim"&&(e.status==="spawning"||e.status==="unclaimed")}function Fn(e){return e.status==="spawning"||e.status==="unclaimed"||e.status==="joining"}function Wr(e){return e.status==="error"&&e.retryable===!0}const mi="If this is the cadre's first always-on node, no member can be reached yet: remove this node, use Join a cadre and scan the code from the phone instead. Otherwise, retry once a member of the cadre is online.";function ga(e){return e?e.slice(0,8):"—"}function _a(e){return e.ownerKey?e.partyId:null}function yi(e){return e.status!=="joined"?"—":e.connected?"yes":"no"}function wi(e){switch(e.status){case"spawning":return"Starting the node…";case"unclaimed":return"Waiting for a phone to claim this node";case"joining":return`Joining cadre ${e.partyId}…`;case"joined":return e.connected?"Connected to the cadre":e.join.kind==="invitation"?`Joined cadre ${e.partyId} at member ${e.memberPeerId??"(unnamed)"}`:`Claimed by owner ${ga(e.ownerKey)} into cadre ${e.partyId}`;case"error":return e.join.kind==="invitation"&&e.error?`Could not join: ${e.error}`:`Stopped after a failure: ${e.error??"no detail recorded"}`}}const bn={spawning:{text:"starting",tone:"info"},unclaimed:{text:"waiting",tone:"info"},joining:{text:"joining",tone:"info"},joined:{text:"joined",tone:"ok"},error:{text:"failed",tone:"err"}};function Pl(e){if(!e)return"hosted node";const t=_a(e);return t?`hosted node for cadre ${t}`:pa(e)?"waiting to be claimed":Fn(e)?`joining cadre ${e.partyId}`:"hosted node"}function Ml(e,t){const n=new Map(t.map(s=>[s.id,s])),r=[...e].sort((s,i)=>s.createdAt.localeCompare(i.createdAt)).map(s=>({id:s.id,hosted:s,handle:n.get(s.id)??null})),a=new Set(e.map(s=>s.id));for(const s of t)a.has(s.id)||r.push({id:s.id,hosted:null,handle:s});return r}const bi=1e3,$r=60*bi,Qr=60*$r,Fa=24*Qr;function Ut(e,t=Date.now()){if(!e)return"—";const n=Date.parse(e);if(!Number.isFinite(n))return"—";const r=t-n;return r<0?"just now":`${Bl(r)} ago`}function Bl(e){return e<$r?`${Math.floor(e/bi)}s`:e<Qr?`${Math.floor(e/$r)}m`:e<Fa?`${Math.floor(e/Qr)}h`:`${Math.floor(e/Fa)}d`}function Ll(e){if(e==null||!Number.isFinite(e))return"—";if(e<1024)return`${e} B`;const t=["KB","MB","GB","TB"];let n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n.toFixed(n<10?2:1)} ${t[r]}`}function Dl(e){if(e==null||!Number.isFinite(e)||e<0)return"—";const t=Math.floor(e/86400),n=Math.floor(e%86400/3600),r=Math.floor(e%3600/60);return t>0?`${t}d ${n}h`:n>0?`${n}h ${r}m`:`${r}m`}function ql(e){return e?e.length<=12?e:`${e.slice(0,6)}…${e.slice(-4)}`:"—"}var Ul=N('<span role="status"><span class="bulb svelte-1qa2kn2" aria-hidden="true"></span> <span> </span></span>');function Ei(e,t){const n=qt(t,"size",3,14),r=W(()=>{switch(t.status){case"ok":return"ok";case"warn":return"warn";case"error":return"err";default:return"muted"}}),a=W(()=>t.label??s(t.status));function s(f){switch(f){case"ok":return"Healthy";case"warn":return"Attention needed";case"error":return"Error";default:return"Loading…"}}var i=Ul(),o=d(i),l=h(o,2),u=d(l);j(()=>{at(i,1,`dot dot-${c(r)??""}`,"svelte-1qa2kn2"),Vr(o,`width: ${n()??""}px; height: ${n()??""}px;`),S(u,c(a))}),k(e,i)}var Fl=N("<span> </span>");function ki(e,t){const n=W(()=>{switch(t.reachability){case"reachable":return"Reachable";case"unreachable":return"Unreachable";case"cgnat":return"Behind CGNAT";default:return"Unknown"}}),r=W(()=>{switch(t.reachability){case"reachable":return"ok";case"unreachable":case"cgnat":return"warn";default:return"info"}});var a=Fl(),s=d(a);j(()=>{at(a,1,`badge ${c(r)??""}`),S(s,c(n))}),k(e,a)}var jl=N('<div class="banner info svelte-15mtls8"><div><strong>Update available</strong> <span class="muted"> </span></div> <a class="link svelte-15mtls8">View update</a></div>'),Ol=N('<p class="muted">No nodes are running yet.</p>'),Hl=N('<p class="none svelte-15mtls8"> </p>'),zl=N('<p class="big svelte-15mtls8"> <span class="muted svelte-15mtls8"> </span></p>'),Vl=N('<!> <!> <dl class="kv svelte-15mtls8"><div class="svelte-15mtls8"><dt class="svelte-15mtls8">External IP</dt><dd class="svelte-15mtls8"> </dd></div> <div class="svelte-15mtls8"><dt class="svelte-15mtls8">Last tested</dt><dd class="svelte-15mtls8"> </dd></div></dl> <a class="link svelte-15mtls8"> </a>',1),Kl=N('<p class="muted">Loading connectivity…</p>'),Jl=N('<p class="none svelte-15mtls8"> <a>see Nodes</a></p>'),Yl=N('<p class="big svelte-15mtls8"> <span class="muted svelte-15mtls8"> </span></p> <!>',1),Gl=N('<p class="muted">This machine runs cadre nodes for the cadres that claim them.</p>'),Wl=N('<section class="stack"><!> <div class="grid summary svelte-15mtls8"><div class="card"><h3>Overall</h3> <!> <dl class="kv svelte-15mtls8"><div class="svelte-15mtls8"><dt class="svelte-15mtls8">Service</dt><dd class="svelte-15mtls8"> </dd></div> <div class="svelte-15mtls8"><dt class="svelte-15mtls8">Version</dt><dd class="svelte-15mtls8"> </dd></div> <div class="svelte-15mtls8"><dt class="svelte-15mtls8">Uptime</dt><dd class="svelte-15mtls8"> </dd></div></dl></div> <div class="card"><h3>Connectivity</h3> <!></div> <div class="card"><h3>Hosted nodes</h3> <!> <a class="link svelte-15mtls8">Join a cadre →</a></div> <div class="card"><h3>Nodes</h3> <p class="big svelte-15mtls8"> <span class="muted svelte-15mtls8"> </span></p> <a class="link svelte-15mtls8">Details →</a></div></div></section>');function $l(e,t){je(t,!0);const n=At();zt(()=>{vi(),tr(),Nt()});const r=W(()=>n.update?.available?.version??null),a=W(()=>n.nodes.filter(K=>K.status==="running").length),s=W(()=>(n.connectivity?.nodes??[]).filter(K=>K.running)),i=W(()=>c(s).filter(K=>K.verdict!=="unreachable").length),o=W(()=>c(i)===c(s).length),l=W(()=>n.hostedNodes.list.filter(K=>K.status==="joined").length),u=W(()=>n.hostedNodes.list.filter(K=>Fn(K)).length),f=W(()=>n.hostedNodes.list.filter(K=>K.status==="error").length);var p=Wl(),v=d(p);{var _=K=>{var H=jl(),J=d(H),Z=h(d(J),2),pe=d(Z),Se=h(J,2);j(De=>{S(pe,`— version ${c(r)??""}`),ae(Se,"href",De)},[()=>Ve("settings")]),k(K,H)};z(v,K=>{c(r)&&K(_)})}var b=h(v,2),A=d(b),E=h(d(A),2);Ei(E,{get status(){return n.status}});var y=h(E,2),B=d(y),M=h(d(B)),R=d(M),P=h(B,2),I=h(d(P)),x=d(I),D=h(P,2),T=h(d(D)),F=d(T),C=h(A,2),w=h(d(C),2);{var g=K=>{var H=Vl(),J=ue(H);ki(J,{get reachability(){return n.connectivity.directReachability}});var Z=h(J,2);{var pe=O=>{var V=Ol();k(O,V)},Se=O=>{var V=Hl(),G=d(V);j(()=>S(G,`${c(s).length===1?"The running node cannot":`None of the ${c(s).length} running nodes can`}
3
+ be reached from outside your home network.`)),k(O,V)},De=O=>{var V=zl(),G=d(V),he=h(G),le=d(he);j(()=>{S(G,`${c(i)??""} `),S(le,`of ${c(s).length??""} nodes reachable from outside`)}),k(O,V)};z(Z,O=>{c(s).length===0?O(pe):c(i)===0?O(Se,1):O(De,-1)})}var oe=h(Z,2),de=d(oe),ge=h(d(de)),Ne=d(ge),Ie=h(de,2),Y=h(d(Ie)),te=d(Y),m=h(oe,2),U=d(m);j((O,V)=>{S(Ne,n.connectivity.externalIp??"—"),S(te,O),ae(m,"href",V),S(U,c(o)?"Details →":"Resolve →")},[()=>Ut(n.connectivity.lastTestedAt),()=>Ve("connectivity")]),k(K,H)},L=K=>{var H=Kl();k(K,H)};z(w,K=>{n.connectivity?K(g):K(L,-1)})}var X=h(C,2),se=h(d(X),2);{var ce=K=>{var H=Yl(),J=ue(H),Z=d(J),pe=h(Z),Se=d(pe),De=h(J,2);{var oe=de=>{var ge=Jl(),Ne=d(ge),Ie=h(Ne);j(Y=>{S(Ne,`${c(f)??""} failed; `),ae(Ie,"href",Y)},[()=>Ve("nodes")]),k(de,ge)};z(De,de=>{c(f)>0&&de(oe)})}j(()=>{S(Z,`${c(l)??""} `),S(Se,`joined, ${c(u)??""} waiting`)}),k(K,H)},ie=K=>{var H=Gl();k(K,H)};z(se,K=>{n.hostedNodes.loaded?K(ce):K(ie,-1)})}var Ee=h(se,2),_e=h(X,2),ve=h(d(_e),2),ke=d(ve),Ce=h(ke),xe=d(Ce),Te=h(ve,2);j((K,H,J)=>{S(R,n.service?.name??"cadre-host"),S(x,n.service?.version??"—"),S(F,K),ae(Ee,"href",H),S(ke,c(a)),S(xe,`/ ${n.nodes.length??""} running`),ae(Te,"href",J)},[()=>Dl(n.service?.uptimeSeconds),()=>Ve("join"),()=>Ve("nodes")]),k(e,p),Oe()}const Ql={tcp:"TCP",ws:"WebSocket"},Xl={mapped:"reachable (UPnP)",manual:"reachable (forwarded by hand)",unreachable:"not reachable from outside"};function Zl(e){return e==="unreachable"?"warn":"ok"}function ja(e){return e?e.externalPort===null?`${e.internalPort} → not mapped`:`${e.internalPort} → ${e.externalPort} (${e.source==="manual"?"forwarded by hand":"UPnP"})`:"not available"}function ec(e){const t=[{kind:"tcp",route:e.tcp}];return e.ws&&t.push({kind:"ws",route:e.ws}),t}function tc(e,t){if(e.verdict!=="unreachable"||t.cgnatDetected)return null;const n=ec(e).filter(({route:s})=>s.externalPort===null);if(n.length===0)return null;const r=t.gateway.lanAddress;return`On your router, forward ${n.map(({kind:s,route:i})=>{const o=i.internalPort;return`${Ql[s]} port ${o} to ${r?`${r}:${o}`:`port ${o} on this machine's LAN address`}`}).join(" and ")}, then enter the external ${n.length===1?"port":"ports"} below.`}function Oa(e){return e?.source==="manual"&&e.externalPort!==null?String(e.externalPort):""}function Ha(e){const t=e.trim();if(t==="")return null;if(!/^\d+$/.test(t))return;const n=Number(t);return n>=1&&n<=65535?n:void 0}var nc=si('<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="5" y="5" width="9" height="9" rx="1.5"></rect><path d="M11 3.5V3a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h.5"></path></svg>');function ma(e,t){const n=qt(t,"size",3,16);var r=nc();j(()=>{ae(r,"width",n()),ae(r,"height",n())}),k(e,r)}var rc=N('<span class="badge">stopped</span>'),ac=N('<span class="muted">none</span>'),sc=N('<li class="svelte-io9f1k"><code class="svelte-io9f1k"> </code> <button type="button" class="ghost"><!></button></li>'),ic=N('<ul class="addrs svelte-io9f1k"></ul>'),oc=N('<p class="small svelte-io9f1k"> </p>'),lc=N('<p class="small svelte-io9f1k">cadre-host cannot reserve a relay for its nodes yet. If the carrier-grade NAT detection is wrong and you did forward ports, enter them below.</p>'),cc=N('<p class="small instruction svelte-io9f1k"> </p>'),dc=N('<div><label> </label> <input type="text" inputmode="numeric" autocomplete="off"/></div>'),uc=N('<p class="error small svelte-io9f1k"> </p>'),fc=N(`<div class="reach stack svelte-io9f1k"><div class="row svelte-io9f1k"><!> <span> </span> <!></div> <dl class="kv svelte-io9f1k"><div class="svelte-io9f1k"><dt class="svelte-io9f1k">TCP</dt><dd class="svelte-io9f1k"> </dd></div> <div class="svelte-io9f1k"><dt class="svelte-io9f1k">WebSocket</dt><dd class="svelte-io9f1k"> </dd></div> <div class="svelte-io9f1k"><dt class="svelte-io9f1k">Public addresses</dt> <dd class="svelte-io9f1k"><!></dd></div></dl> <!> <!> <!> <details><summary class="svelte-io9f1k">I forwarded these ports</summary> <form class="forward svelte-io9f1k"><div class="fields svelte-io9f1k"><div><label> </label> <input type="text" inputmode="numeric" autocomplete="off"/></div> <!></div> <!> <div class="actions svelte-io9f1k"><button type="button">Clear</button> <button type="submit" class="primary"> </button></div> <p class="muted small svelte-io9f1k">A blank field means no forward for that port. If the node's public addresses change, it restarts to announce them, at most once every 10 minutes.</p></form></details></div>`);function ya(e,t){je(t,!0);let n=$(""),r=$(""),a=$(!1),s=$(!1),i=$(null);const o=W(()=>Oa(t.node.tcp)),l=W(()=>Oa(t.node.ws)),u=W(()=>tc(t.node,t.connectivity)),f=W(()=>t.connectivity.cgnatDetected&&t.node.verdict==="unreachable"),p=W(()=>c(o)!==""||c(l)!=="");mt(()=>{const m=c(o),U=c(l);c(a)||(q(n,m,!0),q(r,U,!0))});function v(m){m.preventDefault();const U=Ha(c(n)),O=t.node.ws?Ha(c(r)):null;if(U===void 0||O===void 0){q(i,"Enter each port as a whole number from 1 to 65535, or leave it blank.");return}b({tcp:U,ws:O},"Saved the forwarded ports")}function _(){b({tcp:null,ws:null},"Cleared the forwarded ports")}async function b(m,U){q(s,!0),q(i,null);try{await Cl(t.node.nodeId,m),q(a,!1),we("success",`${U} for ${t.node.nodeId}`)}catch(O){A(O)}finally{q(s,!1)}}function A(m){if(m instanceof Ke&&m.code==="unknown_node"){we("error",`Node ${t.node.nodeId} is no longer running on this machine.`),Mt();return}if(m instanceof Ke&&m.code==="invalid_config"){q(i,m.message,!0);return}const U=m instanceof Ke?m.code:"error";we("error",`Save failed: ${m.message} (${U})`)}var E=fc(),y=d(E),B=d(y);ii(B,()=>t.header??ea);var M=h(B,2),R=d(M),P=h(M,2);{var I=m=>{var U=rc();k(m,U)};z(P,m=>{t.node.running||m(I)})}var x=h(y,2),D=d(x),T=h(d(D)),F=d(T),C=h(D,2),w=h(d(C)),g=d(w),L=h(C,2),X=h(d(L),2),se=d(X);{var ce=m=>{var U=ac();k(m,U)},ie=m=>{var U=ic();Dt(U,20,()=>t.node.publicAddrs,O=>O,(O,V)=>{var G=sc(),he=d(G),le=d(he),me=h(he,2),qe=d(me);ma(qe,{}),j(()=>{S(le,V),ae(me,"aria-label",`Copy ${V}`)}),fe("click",me,()=>va(V)),k(O,G)}),k(m,U)};z(se,m=>{t.node.publicAddrs.length===0?m(ce):m(ie,-1)})}var Ee=h(x,2);{var _e=m=>{var U=oc(),O=d(U);j(()=>S(O,t.node.reason)),k(m,U)};z(Ee,m=>{t.node.reason&&m(_e)})}var ve=h(Ee,2);{var ke=m=>{var U=lc();k(m,U)};z(ve,m=>{c(f)&&m(ke)})}var Ce=h(ve,2);{var xe=m=>{var U=cc(),O=d(U);j(()=>S(O,c(u))),k(m,U)};z(Ce,m=>{c(u)&&m(xe)})}var Te=h(Ce,2),K=h(d(Te),2),H=d(K),J=d(H),Z=d(J),pe=d(Z),Se=h(Z,2),De=h(J,2);{var oe=m=>{var U=dc(),O=d(U),V=d(O),G=h(O,2);j(he=>{ae(O,"for",`fwd-ws-${t.node.nodeId}`),S(V,`External WebSocket port (to ${t.node.ws.internalPort??""})`),ae(G,"id",`fwd-ws-${t.node.nodeId}`),ae(G,"placeholder",he)},[()=>String(t.node.ws.internalPort)]),fe("input",G,()=>q(a,!0)),Un(G,()=>c(r),he=>q(r,he)),k(m,U)};z(De,m=>{t.node.ws&&m(oe)})}var de=h(H,2);{var ge=m=>{var U=uc(),O=d(U);j(()=>S(O,c(i))),k(m,U)};z(de,m=>{c(i)&&m(ge)})}var Ne=h(de,2),Ie=d(Ne),Y=h(Ie,2),te=d(Y);j((m,U,O,V)=>{at(M,1,`badge ${m??""}`,"svelte-io9f1k"),S(R,Xl[t.node.verdict]),S(F,U),S(g,O),Te.open=t.node.verdict==="unreachable"||c(p),ae(Z,"for",`fwd-tcp-${t.node.nodeId}`),S(pe,`External TCP port (to ${t.node.tcp.internalPort??""})`),ae(Se,"id",`fwd-tcp-${t.node.nodeId}`),ae(Se,"placeholder",V),Ie.disabled=c(s)||!c(p),Y.disabled=c(s),S(te,c(s)?"Saving…":"Save")},[()=>Zl(t.node.verdict),()=>ja(t.node.tcp),()=>ja(t.node.ws),()=>String(t.node.tcp.internalPort)]),qn("submit",K,v),fe("input",Se,()=>q(a,!0)),Un(Se,()=>c(n),m=>q(n,m)),fe("click",Ie,_),k(e,E),Oe()}bt(["click","input"]);var vc=N('<!> <dl class="kv svelte-hh3bto"><div class="svelte-hh3bto"><dt class="svelte-hh3bto">UPnP</dt><dd class="svelte-hh3bto"> </dd></div> <div class="svelte-hh3bto"><dt class="svelte-hh3bto">Router</dt> <dd class="svelte-hh3bto"><!></dd></div> <div class="svelte-hh3bto"><dt class="svelte-hh3bto">External IP</dt><dd class="svelte-hh3bto"> </dd></div> <div class="svelte-hh3bto"><dt class="svelte-hh3bto">Router IP</dt><dd class="svelte-hh3bto"> </dd></div> <div class="svelte-hh3bto"><dt class="svelte-hh3bto">Last tested</dt><dd class="svelte-hh3bto"> </dd></div> <div class="svelte-hh3bto"><dt class="svelte-hh3bto">External IP detected</dt><dd class="svelte-hh3bto"> </dd></div></dl> <button> </button>',1),hc=N('<p class="muted">Loading…</p>'),pc=N('<div class="card warning svelte-hh3bto"><h3>Behind carrier-grade NAT</h3> <p>Your ISP appears to use carrier-grade NAT (CGNAT), so a port forward on your router will not help. Ask your ISP for a public IP address.</p> <p>A relay would reach nodes behind CGNAT, but cadre-host cannot reserve one for its nodes yet.</p> <p class="muted small svelte-hh3bto">The detection can be wrong. If you did forward ports, enter them on each node below.</p></div>'),gc=N('<div class="card warning svelte-hh3bto"><h3>Needs a port forward</h3> <p> </p> <p class="muted small svelte-hh3bto">See <a href="https://github.com/gotchoices/sereus/blob/master/docs/cadre-host.md#manual-port-forwarding" target="_blank" rel="noreferrer">docs/cadre-host.md</a> for how manual forwarding works.</p></div>'),_c=N('<p class="muted">Loading…</p>'),mc=N('<p class="muted">No nodes are running on this machine yet.</p>'),yc=N('<a><strong><code> </code></strong></a> <span class="muted small svelte-hh3bto"> </span>',1),wc=N('<li class="svelte-hh3bto"><!></li>'),bc=N('<ul class="nodes svelte-hh3bto"></ul>'),Ec=N("<option> </option>"),kc=N('<span class="muted small svelte-hh3bto">(stored in OS keychain)</span>'),Cc=N('<div><label> <!></label> <input autocomplete="off"/></div>'),Sc=N('<p class="muted small svelte-hh3bto"> </p>'),Tc=N(`<section class="stack"><header><h2>Connectivity</h2> <p class="muted">How the outside world reaches the nodes this machine runs.</p></header> <div class="grid two svelte-hh3bto"><div class="card status-card"><h3>Current status</h3> <!></div> <!></div> <div class="card stack"><h3>Nodes</h3> <!></div> <form class="card stack"><h3>Port mapping</h3> <label class="row inline svelte-hh3bto"><input type="checkbox" class="svelte-hh3bto"/> <span>Ask the router to map each node's ports automatically (UPnP)</span></label> <div class="actions svelte-hh3bto"><button type="submit" class="primary"> </button></div></form> <form class="card stack"><h3>Dynamic DNS</h3> <p class="muted">Publish a stable hostname so your friends don't need to track your IP.</p> <div><label for="ddns-provider">Provider</label> <select id="ddns-provider"><option>— none —</option><!></select></div> <div><label for="ddns-hostname">Hostname</label> <input id="ddns-hostname" type="text" placeholder="e.g. yourname.duckdns.org" autocomplete="off"/></div> <!> <label class="row inline svelte-hh3bto"><input type="checkbox" class="svelte-hh3bto"/> <span>I manage this DDNS record outside cadre-host (don't auto-update)</span></label> <div class="actions svelte-hh3bto"><button type="submit" class="primary"> </button></div> <!></form></section>`);function Ac(e,t){je(t,!0);const n=At();let r=$(We([])),a=$(""),s=$(""),i=$(!1),o=$(We({})),l=$(!0),u=$(!1),f=$(!1),p=$(!1);const v=W(()=>c(r).find(m=>m.id===c(a))??null),_=W(()=>(n.connectivity?.nodes??[]).filter(m=>m.running)),b=W(()=>c(_).filter(m=>m.verdict==="unreachable").length),A=W(()=>n.connectivity?.cgnatDetected===!0);zt(()=>{Mt(),Nt(),E()}),mt(()=>{const m=n.connectivity;m&&(c(a)===""&&m.ddns.providerId&&q(a,m.ddns.providerId,!0),c(s)===""&&m.ddns.hostname&&q(s,m.ddns.hostname,!0),q(i,m.ddns.externallyManaged,!0),q(l,m.upnpEnabled,!0))});async function E(){try{const m=await Qe("/nat/providers");q(r,m,!0)}catch(m){we("error",`Could not load DDNS providers: ${m.message}`)}}async function y(){q(u,!0);try{await Kn("/nat/test"),we("success","Reachability test complete"),await Mt()}catch(m){we("error",`Test failed: ${m.message}`)}finally{q(u,!1)}}async function B(m){m.preventDefault(),q(f,!0);try{await er("/nat/ddns",{providerId:c(a),hostname:c(s),config:{...c(o)},externallyManaged:c(i)}),we("success","DDNS settings saved"),q(o,{},!0),await Mt()}catch(U){const O=U instanceof Ke?U.code:"error";we("error",`Save failed: ${U.message} (${O})`)}finally{q(f,!1)}}async function M(m){m.preventDefault(),q(p,!0);try{await er("/nat/settings",{upnpEnabled:c(l)}),we("success","Port mapping settings saved"),await Mt()}catch(U){we("error",`Save failed: ${U.message}`)}finally{q(p,!1)}}var R=Tc(),P=h(d(R),2),I=d(P),x=h(d(I),2);{var D=m=>{var U=vc(),O=ue(U);ki(O,{get reachability(){return n.connectivity.directReachability}});var V=h(O,2),G=d(V),he=h(d(G)),le=d(he),me=h(G,2),qe=h(d(me),2),it=d(qe);{var He=Xe=>{var Ue=Hr();j(()=>S(Ue,`found · this machine is ${n.connectivity.gateway.lanAddress??"—"??""} on its network`)),k(Xe,Ue)},Ye=Xe=>{var Ue=Hr();j(()=>S(Ue,`not found${n.connectivity.gateway.lastError?` · ${n.connectivity.gateway.lastError}`:""}`)),k(Xe,Ue)};z(it,Xe=>{n.connectivity.gateway.found?Xe(He):Xe(Ye,-1)})}var dt=h(me,2),Vt=h(d(dt)),Kt=d(Vt),ut=h(dt,2),Jt=h(d(ut)),Cn=d(Jt),vn=h(ut,2),ft=h(d(vn)),Et=d(ft),kt=h(vn,2),Yt=h(d(kt)),Sn=d(Yt),Gt=h(V,2),Rt=d(Gt);j((Xe,Ue)=>{S(le,n.connectivity.upnpEnabled?"on":"off"),S(Kt,n.connectivity.externalIp??"—"),S(Cn,n.connectivity.gateway.routerExternalIp??"—"),S(Et,Xe),S(Sn,Ue),Gt.disabled=c(u),S(Rt,c(u)?"Testing…":"Test reachability")},[()=>Ut(n.connectivity.lastTestedAt),()=>Ut(n.connectivity.externalIpDetectedAt)]),fe("click",Gt,y),k(m,U)},T=m=>{var U=hc();k(m,U)};z(x,m=>{n.connectivity?m(D):m(T,-1)})}var F=h(I,2);{var C=m=>{var U=pc();k(m,U)},w=m=>{var U=gc(),O=h(d(U),2),V=d(O);j(()=>S(V,`${c(b)??""} of ${c(_).length??""} running ${c(_).length===1?"node":"nodes"} cannot be reached from outside your home network.
4
+ Each one below says which ports to forward on your router, and to which address.`)),k(m,U)};z(F,m=>{c(A)?m(C):c(b)>0&&m(w,1)})}var g=h(P,2),L=h(d(g),2);{var X=m=>{var U=_c();k(m,U)},se=m=>{var U=mc();k(m,U)},ce=m=>{var U=bc();Dt(U,21,()=>n.connectivity.nodes,O=>O.nodeId,(O,V)=>{var G=wc(),he=d(G);ya(he,{get node(){return c(V)},get connectivity(){return n.connectivity},header:me=>{var qe=yc(),it=ue(qe),He=d(it),Ye=d(He),dt=d(Ye),Vt=h(it,2),Kt=d(Vt);j((ut,Jt)=>{ae(it,"href",ut),S(dt,c(V).nodeId),S(Kt,Jt)},[()=>Ve("node-detail",{id:c(V).nodeId}),()=>Pl(n.hostedNodes.list.find(ut=>ut.id===c(V).nodeId))]),k(me,qe)},$$slots:{header:!0}}),k(O,G)}),k(m,U)};z(L,m=>{n.connectivity?n.connectivity.nodes.length===0?m(se,1):m(ce,-1):m(X)})}var ie=h(g,2),Ee=h(d(ie),2),_e=d(Ee),ve=h(Ee,2),ke=d(ve),Ce=d(ke),xe=h(ie,2),Te=h(d(xe),4),K=h(d(Te),2),H=d(K);H.value=H.__value="";var J=h(H);Dt(J,17,()=>c(r),m=>m.id,(m,U)=>{var O=Ec(),V=d(O),G={};j(()=>{S(V,c(U).displayName),G!==(G=c(U).id)&&(O.value=(O.__value=c(U).id)??"")}),k(m,O)});var Z=h(Te,2),pe=h(d(Z),2),Se=h(Z,2);{var De=m=>{var U=Ht(),O=ue(U);Dt(O,17,()=>c(v).configFields,V=>V.key,(V,G)=>{var he=Cc(),le=d(he),me=d(le),qe=h(me);{var it=Ye=>{var dt=kc();k(Ye,dt)};z(qe,Ye=>{c(G).secret&&Ye(it)})}var He=h(le,2);j(()=>{ae(le,"for",`ddns-${c(G).key}`),S(me,`${c(G).label??""} `),ae(He,"id",`ddns-${c(G).key}`),ae(He,"type",c(G).secret?"password":"text"),ci(He,c(o)[c(G).key]??"")}),fe("input",He,Ye=>q(o,{...c(o),[c(G).key]:Ye.currentTarget.value},!0)),k(V,he)}),k(m,U)};z(Se,m=>{c(v)&&m(De)})}var oe=h(Se,2),de=d(oe),ge=h(oe,2),Ne=d(ge),Ie=d(Ne),Y=h(ge,2);{var te=m=>{var U=Sc(),O=d(U);j(V=>S(O,`Last DDNS update ${V??""}
5
+ ${n.connectivity.ddns.lastUpdateOk===!0?"· ok":n.connectivity.ddns.lastUpdateOk===!1?`· failed: ${n.connectivity.ddns.lastError??"error"}`:""}`),[()=>Ut(n.connectivity.ddns.lastUpdateAt)]),k(m,U)};z(Y,m=>{n.connectivity?.ddns.lastUpdateAt&&m(te)})}j(()=>{ke.disabled=c(p),S(Ce,c(p)?"Saving…":"Save"),Ne.disabled=c(f)||c(a)==="",S(Ie,c(f)?"Saving…":"Save DDNS settings")}),qn("submit",ie,M),Kr(_e,()=>c(l),m=>q(l,m)),qn("submit",xe,B),dl(K,()=>c(a),m=>q(a,m)),Un(pe,()=>c(s),m=>q(s,m)),Kr(de,()=>c(i),m=>q(i,m)),k(e,R),Oe()}bt(["click","input"]);var Nc=N('<p class="error svelte-7tcksg"> </p>'),Rc=N('<p class="muted">No nodes yet. <a>Join a cadre</a> to start one, then scan its code with the phone that owns the cadre.</p>'),xc=N('<p class="muted">Loading…</p>'),Ic=N("<span> </span>"),Pc=N('<span class="badge">no process</span>'),Mc=N('<span class="badge err"> </span>'),Bc=N("<code> </code>"),Lc=N('<tr class="svelte-7tcksg"><td class="svelte-7tcksg"><code> </code></td><td class="svelte-7tcksg"><span class="badges svelte-7tcksg"><!> <!></span></td><td class="svelte-7tcksg"><!></td><td class="svelte-7tcksg"><code> </code></td><td class="svelte-7tcksg"> </td><td class="muted svelte-7tcksg"> </td><td class="svelte-7tcksg"><a>Details →</a></td></tr>'),Dc=N('<div class="scroll svelte-7tcksg"><table class="svelte-7tcksg"><thead><tr><th scope="col" class="svelte-7tcksg">ID</th><th scope="col" class="svelte-7tcksg">Status</th><th scope="col" class="svelte-7tcksg">Cadre</th><th scope="col" class="svelte-7tcksg">Owner</th><th scope="col" class="svelte-7tcksg">Connected</th><th scope="col" class="svelte-7tcksg">Spawned</th><th scope="col" class="svelte-7tcksg"></th></tr></thead><tbody></tbody></table></div>'),qc=N('<section class="stack"><header><h2>Nodes</h2> <p class="muted">Cadre nodes this machine runs, and the cadre each one joined.</p></header> <div class="card"><!> <!></div></section>');function Uc(e,t){je(t,!0);const n=At(),r=W(()=>Ml(n.hostedNodes.list,n.nodes));zt(()=>{ha(),Nt()});var a=qc(),s=h(d(a),2),i=d(s);{var o=v=>{var _=Nc(),b=d(_);j(()=>S(b,`Couldn’t load hosted nodes: ${n.hostedNodes.error??""}`)),k(v,_)};z(i,v=>{n.hostedNodes.error&&v(o)})}var l=h(i,2);{var u=v=>{var _=Rc(),b=h(d(_));j(A=>ae(b,"href",A),[()=>Ve("join")]),k(v,_)},f=v=>{var _=Ht(),b=ue(_);{var A=E=>{var y=xc();k(E,y)};z(b,E=>{n.hostedNodes.error||E(A)})}k(v,_)},p=v=>{var _=Dc(),b=d(_),A=h(d(b));Dt(A,21,()=>c(r),E=>E.id,(E,y)=>{const B=W(()=>c(y).hosted?_a(c(y).hosted):null);var M=Lc(),R=d(M),P=d(R),I=d(P),x=h(R),D=d(x),T=d(D);{var F=H=>{var J=Ic(),Z=d(J);j(()=>{at(J,1,`badge ${bn[c(y).hosted.status].tone??""}`,"svelte-7tcksg"),S(Z,bn[c(y).hosted.status].text)}),k(H,J)};z(T,H=>{c(y).hosted&&H(F)})}var C=h(T,2);{var w=H=>{var J=Pc();k(H,J)},g=H=>{var J=Mc(),Z=d(J);j(()=>S(Z,c(y).handle.status)),k(H,J)};z(C,H=>{c(y).handle?c(y).handle.status!=="running"&&H(g,1):H(w)})}var L=h(x),X=d(L);{var se=H=>{var J=Bc(),Z=d(J);j(pe=>{ae(J,"title",c(B)),S(Z,pe)},[()=>ql(c(B))]),k(H,J)},ce=H=>{var J=Hr("—");k(H,J)};z(X,H=>{c(B)?H(se):H(ce,-1)})}var ie=h(L),Ee=d(ie),_e=d(Ee),ve=h(ie),ke=d(ve),Ce=h(ve),xe=d(Ce),Te=h(Ce),K=d(Te);j((H,J,Z,pe)=>{S(I,c(y).id),ae(Ee,"title",c(y).hosted?.ownerKey),S(_e,H),S(ke,J),S(xe,Z),ae(K,"href",pe)},[()=>ga(c(y).hosted?.ownerKey),()=>c(y).hosted?yi(c(y).hosted):"—",()=>Ut(c(y).handle?.spawnedAt??c(y).hosted?.createdAt),()=>Ve("node-detail",{id:c(y).id})]),k(E,M)}),k(v,_)};z(l,v=>{c(r).length===0&&n.hostedNodes.loaded?v(u):c(r).length===0?v(f,1):v(p,-1)})}k(e,a),Oe()}function Fc(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var hn={},ur,za;function jc(){return za||(za=1,ur=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}),ur}var fr={},It={},Va;function un(){if(Va)return It;Va=1;let e;const t=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];return It.getSymbolSize=function(r){if(!r)throw new Error('"version" cannot be null or undefined');if(r<1||r>40)throw new Error('"version" should be in range from 1 to 40');return r*4+17},It.getSymbolTotalCodewords=function(r){return t[r]},It.getBCHDigit=function(n){let r=0;for(;n!==0;)r++,n>>>=1;return r},It.setToSJISFunction=function(r){if(typeof r!="function")throw new Error('"toSJISFunc" is not a valid function.');e=r},It.isKanjiModeEnabled=function(){return typeof e<"u"},It.toSJIS=function(r){return e(r)},It}var vr={},Ka;function wa(){return Ka||(Ka=1,(function(e){e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(n){if(typeof n!="string")throw new Error("Param is not a string");switch(n.toLowerCase()){case"l":case"low":return e.L;case"m":case"medium":return e.M;case"q":case"quartile":return e.Q;case"h":case"high":return e.H;default:throw new Error("Unknown EC Level: "+n)}}e.isValid=function(r){return r&&typeof r.bit<"u"&&r.bit>=0&&r.bit<4},e.from=function(r,a){if(e.isValid(r))return r;try{return t(r)}catch{return a}}})(vr)),vr}var hr,Ja;function Oc(){if(Ja)return hr;Ja=1;function e(){this.buffer=[],this.length=0}return e.prototype={get:function(t){const n=Math.floor(t/8);return(this.buffer[n]>>>7-t%8&1)===1},put:function(t,n){for(let r=0;r<n;r++)this.putBit((t>>>n-r-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(t){const n=Math.floor(this.length/8);this.buffer.length<=n&&this.buffer.push(0),t&&(this.buffer[n]|=128>>>this.length%8),this.length++}},hr=e,hr}var pr,Ya;function Hc(){if(Ya)return pr;Ya=1;function e(t){if(!t||t<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=t,this.data=new Uint8Array(t*t),this.reservedBit=new Uint8Array(t*t)}return e.prototype.set=function(t,n,r,a){const s=t*this.size+n;this.data[s]=r,a&&(this.reservedBit[s]=!0)},e.prototype.get=function(t,n){return this.data[t*this.size+n]},e.prototype.xor=function(t,n,r){this.data[t*this.size+n]^=r},e.prototype.isReserved=function(t,n){return this.reservedBit[t*this.size+n]},pr=e,pr}var gr={},Ga;function zc(){return Ga||(Ga=1,(function(e){const t=un().getSymbolSize;e.getRowColCoords=function(r){if(r===1)return[];const a=Math.floor(r/7)+2,s=t(r),i=s===145?26:Math.ceil((s-13)/(2*a-2))*2,o=[s-7];for(let l=1;l<a-1;l++)o[l]=o[l-1]-i;return o.push(6),o.reverse()},e.getPositions=function(r){const a=[],s=e.getRowColCoords(r),i=s.length;for(let o=0;o<i;o++)for(let l=0;l<i;l++)o===0&&l===0||o===0&&l===i-1||o===i-1&&l===0||a.push([s[o],s[l]]);return a}})(gr)),gr}var _r={},Wa;function Vc(){if(Wa)return _r;Wa=1;const e=un().getSymbolSize,t=7;return _r.getPositions=function(r){const a=e(r);return[[0,0],[a-t,0],[0,a-t]]},_r}var mr={},$a;function Kc(){return $a||($a=1,(function(e){e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};const t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(a){return a!=null&&a!==""&&!isNaN(a)&&a>=0&&a<=7},e.from=function(a){return e.isValid(a)?parseInt(a,10):void 0},e.getPenaltyN1=function(a){const s=a.size;let i=0,o=0,l=0,u=null,f=null;for(let p=0;p<s;p++){o=l=0,u=f=null;for(let v=0;v<s;v++){let _=a.get(p,v);_===u?o++:(o>=5&&(i+=t.N1+(o-5)),u=_,o=1),_=a.get(v,p),_===f?l++:(l>=5&&(i+=t.N1+(l-5)),f=_,l=1)}o>=5&&(i+=t.N1+(o-5)),l>=5&&(i+=t.N1+(l-5))}return i},e.getPenaltyN2=function(a){const s=a.size;let i=0;for(let o=0;o<s-1;o++)for(let l=0;l<s-1;l++){const u=a.get(o,l)+a.get(o,l+1)+a.get(o+1,l)+a.get(o+1,l+1);(u===4||u===0)&&i++}return i*t.N2},e.getPenaltyN3=function(a){const s=a.size;let i=0,o=0,l=0;for(let u=0;u<s;u++){o=l=0;for(let f=0;f<s;f++)o=o<<1&2047|a.get(u,f),f>=10&&(o===1488||o===93)&&i++,l=l<<1&2047|a.get(f,u),f>=10&&(l===1488||l===93)&&i++}return i*t.N3},e.getPenaltyN4=function(a){let s=0;const i=a.data.length;for(let l=0;l<i;l++)s+=a.data[l];return Math.abs(Math.ceil(s*100/i/5)-10)*t.N4};function n(r,a,s){switch(r){case e.Patterns.PATTERN000:return(a+s)%2===0;case e.Patterns.PATTERN001:return a%2===0;case e.Patterns.PATTERN010:return s%3===0;case e.Patterns.PATTERN011:return(a+s)%3===0;case e.Patterns.PATTERN100:return(Math.floor(a/2)+Math.floor(s/3))%2===0;case e.Patterns.PATTERN101:return a*s%2+a*s%3===0;case e.Patterns.PATTERN110:return(a*s%2+a*s%3)%2===0;case e.Patterns.PATTERN111:return(a*s%3+(a+s)%2)%2===0;default:throw new Error("bad maskPattern:"+r)}}e.applyMask=function(a,s){const i=s.size;for(let o=0;o<i;o++)for(let l=0;l<i;l++)s.isReserved(l,o)||s.xor(l,o,n(a,l,o))},e.getBestMask=function(a,s){const i=Object.keys(e.Patterns).length;let o=0,l=1/0;for(let u=0;u<i;u++){s(u),e.applyMask(u,a);const f=e.getPenaltyN1(a)+e.getPenaltyN2(a)+e.getPenaltyN3(a)+e.getPenaltyN4(a);e.applyMask(u,a),f<l&&(l=f,o=u)}return o}})(mr)),mr}var Gn={},Qa;function Ci(){if(Qa)return Gn;Qa=1;const e=wa(),t=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],n=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];return Gn.getBlocksCount=function(a,s){switch(s){case e.L:return t[(a-1)*4+0];case e.M:return t[(a-1)*4+1];case e.Q:return t[(a-1)*4+2];case e.H:return t[(a-1)*4+3];default:return}},Gn.getTotalCodewordsCount=function(a,s){switch(s){case e.L:return n[(a-1)*4+0];case e.M:return n[(a-1)*4+1];case e.Q:return n[(a-1)*4+2];case e.H:return n[(a-1)*4+3];default:return}},Gn}var yr={},Nn={},Xa;function Jc(){if(Xa)return Nn;Xa=1;const e=new Uint8Array(512),t=new Uint8Array(256);return(function(){let r=1;for(let a=0;a<255;a++)e[a]=r,t[r]=a,r<<=1,r&256&&(r^=285);for(let a=255;a<512;a++)e[a]=e[a-255]})(),Nn.log=function(r){if(r<1)throw new Error("log("+r+")");return t[r]},Nn.exp=function(r){return e[r]},Nn.mul=function(r,a){return r===0||a===0?0:e[t[r]+t[a]]},Nn}var Za;function Yc(){return Za||(Za=1,(function(e){const t=Jc();e.mul=function(r,a){const s=new Uint8Array(r.length+a.length-1);for(let i=0;i<r.length;i++)for(let o=0;o<a.length;o++)s[i+o]^=t.mul(r[i],a[o]);return s},e.mod=function(r,a){let s=new Uint8Array(r);for(;s.length-a.length>=0;){const i=s[0];for(let l=0;l<a.length;l++)s[l]^=t.mul(a[l],i);let o=0;for(;o<s.length&&s[o]===0;)o++;s=s.slice(o)}return s},e.generateECPolynomial=function(r){let a=new Uint8Array([1]);for(let s=0;s<r;s++)a=e.mul(a,new Uint8Array([1,t.exp(s)]));return a}})(yr)),yr}var wr,es;function Gc(){if(es)return wr;es=1;const e=Yc();function t(n){this.genPoly=void 0,this.degree=n,this.degree&&this.initialize(this.degree)}return t.prototype.initialize=function(r){this.degree=r,this.genPoly=e.generateECPolynomial(this.degree)},t.prototype.encode=function(r){if(!this.genPoly)throw new Error("Encoder not initialized");const a=new Uint8Array(r.length+this.degree);a.set(r);const s=e.mod(a,this.genPoly),i=this.degree-s.length;if(i>0){const o=new Uint8Array(this.degree);return o.set(s,i),o}return s},wr=t,wr}var br={},Er={},kr={},ts;function Si(){return ts||(ts=1,kr.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}),kr}var vt={},ns;function Ti(){if(ns)return vt;ns=1;const e="[0-9]+",t="[A-Z $%*+\\-./:]+";let n="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";n=n.replace(/u/g,"\\u");const r="(?:(?![A-Z0-9 $%*+\\-./:]|"+n+`)(?:.|[\r
6
+ ]))+`;vt.KANJI=new RegExp(n,"g"),vt.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),vt.BYTE=new RegExp(r,"g"),vt.NUMERIC=new RegExp(e,"g"),vt.ALPHANUMERIC=new RegExp(t,"g");const a=new RegExp("^"+n+"$"),s=new RegExp("^"+e+"$"),i=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");return vt.testKanji=function(l){return a.test(l)},vt.testNumeric=function(l){return s.test(l)},vt.testAlphanumeric=function(l){return i.test(l)},vt}var rs;function fn(){return rs||(rs=1,(function(e){const t=Si(),n=Ti();e.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},e.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},e.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(s,i){if(!s.ccBits)throw new Error("Invalid mode: "+s);if(!t.isValid(i))throw new Error("Invalid version: "+i);return i>=1&&i<10?s.ccBits[0]:i<27?s.ccBits[1]:s.ccBits[2]},e.getBestModeForData=function(s){return n.testNumeric(s)?e.NUMERIC:n.testAlphanumeric(s)?e.ALPHANUMERIC:n.testKanji(s)?e.KANJI:e.BYTE},e.toString=function(s){if(s&&s.id)return s.id;throw new Error("Invalid mode")},e.isValid=function(s){return s&&s.bit&&s.ccBits};function r(a){if(typeof a!="string")throw new Error("Param is not a string");switch(a.toLowerCase()){case"numeric":return e.NUMERIC;case"alphanumeric":return e.ALPHANUMERIC;case"kanji":return e.KANJI;case"byte":return e.BYTE;default:throw new Error("Unknown mode: "+a)}}e.from=function(s,i){if(e.isValid(s))return s;try{return r(s)}catch{return i}}})(Er)),Er}var as;function Wc(){return as||(as=1,(function(e){const t=un(),n=Ci(),r=wa(),a=fn(),s=Si(),i=7973,o=t.getBCHDigit(i);function l(v,_,b){for(let A=1;A<=40;A++)if(_<=e.getCapacity(A,b,v))return A}function u(v,_){return a.getCharCountIndicator(v,_)+4}function f(v,_){let b=0;return v.forEach(function(A){const E=u(A.mode,_);b+=E+A.getBitsLength()}),b}function p(v,_){for(let b=1;b<=40;b++)if(f(v,b)<=e.getCapacity(b,_,a.MIXED))return b}e.from=function(_,b){return s.isValid(_)?parseInt(_,10):b},e.getCapacity=function(_,b,A){if(!s.isValid(_))throw new Error("Invalid QR Code version");typeof A>"u"&&(A=a.BYTE);const E=t.getSymbolTotalCodewords(_),y=n.getTotalCodewordsCount(_,b),B=(E-y)*8;if(A===a.MIXED)return B;const M=B-u(A,_);switch(A){case a.NUMERIC:return Math.floor(M/10*3);case a.ALPHANUMERIC:return Math.floor(M/11*2);case a.KANJI:return Math.floor(M/13);case a.BYTE:default:return Math.floor(M/8)}},e.getBestVersionForData=function(_,b){let A;const E=r.from(b,r.M);if(Array.isArray(_)){if(_.length>1)return p(_,E);if(_.length===0)return 1;A=_[0]}else A=_;return l(A.mode,A.getLength(),E)},e.getEncodedBits=function(_){if(!s.isValid(_)||_<7)throw new Error("Invalid QR Code version");let b=_<<12;for(;t.getBCHDigit(b)-o>=0;)b^=i<<t.getBCHDigit(b)-o;return _<<12|b}})(br)),br}var Cr={},ss;function $c(){if(ss)return Cr;ss=1;const e=un(),t=1335,n=21522,r=e.getBCHDigit(t);return Cr.getEncodedBits=function(s,i){const o=s.bit<<3|i;let l=o<<10;for(;e.getBCHDigit(l)-r>=0;)l^=t<<e.getBCHDigit(l)-r;return(o<<10|l)^n},Cr}var Sr={},Tr,is;function Qc(){if(is)return Tr;is=1;const e=fn();function t(n){this.mode=e.NUMERIC,this.data=n.toString()}return t.getBitsLength=function(r){return 10*Math.floor(r/3)+(r%3?r%3*3+1:0)},t.prototype.getLength=function(){return this.data.length},t.prototype.getBitsLength=function(){return t.getBitsLength(this.data.length)},t.prototype.write=function(r){let a,s,i;for(a=0;a+3<=this.data.length;a+=3)s=this.data.substr(a,3),i=parseInt(s,10),r.put(i,10);const o=this.data.length-a;o>0&&(s=this.data.substr(a),i=parseInt(s,10),r.put(i,o*3+1))},Tr=t,Tr}var Ar,os;function Xc(){if(os)return Ar;os=1;const e=fn(),t=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function n(r){this.mode=e.ALPHANUMERIC,this.data=r}return n.getBitsLength=function(a){return 11*Math.floor(a/2)+6*(a%2)},n.prototype.getLength=function(){return this.data.length},n.prototype.getBitsLength=function(){return n.getBitsLength(this.data.length)},n.prototype.write=function(a){let s;for(s=0;s+2<=this.data.length;s+=2){let i=t.indexOf(this.data[s])*45;i+=t.indexOf(this.data[s+1]),a.put(i,11)}this.data.length%2&&a.put(t.indexOf(this.data[s]),6)},Ar=n,Ar}var Nr,ls;function Zc(){if(ls)return Nr;ls=1;const e=fn();function t(n){this.mode=e.BYTE,typeof n=="string"?this.data=new TextEncoder().encode(n):this.data=new Uint8Array(n)}return t.getBitsLength=function(r){return r*8},t.prototype.getLength=function(){return this.data.length},t.prototype.getBitsLength=function(){return t.getBitsLength(this.data.length)},t.prototype.write=function(n){for(let r=0,a=this.data.length;r<a;r++)n.put(this.data[r],8)},Nr=t,Nr}var Rr,cs;function ed(){if(cs)return Rr;cs=1;const e=fn(),t=un();function n(r){this.mode=e.KANJI,this.data=r}return n.getBitsLength=function(a){return a*13},n.prototype.getLength=function(){return this.data.length},n.prototype.getBitsLength=function(){return n.getBitsLength(this.data.length)},n.prototype.write=function(r){let a;for(a=0;a<this.data.length;a++){let s=t.toSJIS(this.data[a]);if(s>=33088&&s<=40956)s-=33088;else if(s>=57408&&s<=60351)s-=49472;else throw new Error("Invalid SJIS character: "+this.data[a]+`
7
+ Make sure your charset is UTF-8`);s=(s>>>8&255)*192+(s&255),r.put(s,13)}},Rr=n,Rr}var xr={exports:{}},ds;function td(){return ds||(ds=1,(function(e){var t={single_source_shortest_paths:function(n,r,a){var s={},i={};i[r]=0;var o=t.PriorityQueue.make();o.push(r,0);for(var l,u,f,p,v,_,b,A,E;!o.empty();){l=o.pop(),u=l.value,p=l.cost,v=n[u]||{};for(f in v)v.hasOwnProperty(f)&&(_=v[f],b=p+_,A=i[f],E=typeof i[f]>"u",(E||A>b)&&(i[f]=b,o.push(f,b),s[f]=u))}if(typeof a<"u"&&typeof i[a]>"u"){var y=["Could not find a path from ",r," to ",a,"."].join("");throw new Error(y)}return s},extract_shortest_path_from_predecessor_list:function(n,r){for(var a=[],s=r;s;)a.push(s),n[s],s=n[s];return a.reverse(),a},find_path:function(n,r,a){var s=t.single_source_shortest_paths(n,r,a);return t.extract_shortest_path_from_predecessor_list(s,a)},PriorityQueue:{make:function(n){var r=t.PriorityQueue,a={},s;n=n||{};for(s in r)r.hasOwnProperty(s)&&(a[s]=r[s]);return a.queue=[],a.sorter=n.sorter||r.default_sorter,a},default_sorter:function(n,r){return n.cost-r.cost},push:function(n,r){var a={value:n,cost:r};this.queue.push(a),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};e.exports=t})(xr)),xr.exports}var us;function nd(){return us||(us=1,(function(e){const t=fn(),n=Qc(),r=Xc(),a=Zc(),s=ed(),i=Ti(),o=un(),l=td();function u(y){return unescape(encodeURIComponent(y)).length}function f(y,B,M){const R=[];let P;for(;(P=y.exec(M))!==null;)R.push({data:P[0],index:P.index,mode:B,length:P[0].length});return R}function p(y){const B=f(i.NUMERIC,t.NUMERIC,y),M=f(i.ALPHANUMERIC,t.ALPHANUMERIC,y);let R,P;return o.isKanjiModeEnabled()?(R=f(i.BYTE,t.BYTE,y),P=f(i.KANJI,t.KANJI,y)):(R=f(i.BYTE_KANJI,t.BYTE,y),P=[]),B.concat(M,R,P).sort(function(x,D){return x.index-D.index}).map(function(x){return{data:x.data,mode:x.mode,length:x.length}})}function v(y,B){switch(B){case t.NUMERIC:return n.getBitsLength(y);case t.ALPHANUMERIC:return r.getBitsLength(y);case t.KANJI:return s.getBitsLength(y);case t.BYTE:return a.getBitsLength(y)}}function _(y){return y.reduce(function(B,M){const R=B.length-1>=0?B[B.length-1]:null;return R&&R.mode===M.mode?(B[B.length-1].data+=M.data,B):(B.push(M),B)},[])}function b(y){const B=[];for(let M=0;M<y.length;M++){const R=y[M];switch(R.mode){case t.NUMERIC:B.push([R,{data:R.data,mode:t.ALPHANUMERIC,length:R.length},{data:R.data,mode:t.BYTE,length:R.length}]);break;case t.ALPHANUMERIC:B.push([R,{data:R.data,mode:t.BYTE,length:R.length}]);break;case t.KANJI:B.push([R,{data:R.data,mode:t.BYTE,length:u(R.data)}]);break;case t.BYTE:B.push([{data:R.data,mode:t.BYTE,length:u(R.data)}])}}return B}function A(y,B){const M={},R={start:{}};let P=["start"];for(let I=0;I<y.length;I++){const x=y[I],D=[];for(let T=0;T<x.length;T++){const F=x[T],C=""+I+T;D.push(C),M[C]={node:F,lastCount:0},R[C]={};for(let w=0;w<P.length;w++){const g=P[w];M[g]&&M[g].node.mode===F.mode?(R[g][C]=v(M[g].lastCount+F.length,F.mode)-v(M[g].lastCount,F.mode),M[g].lastCount+=F.length):(M[g]&&(M[g].lastCount=F.length),R[g][C]=v(F.length,F.mode)+4+t.getCharCountIndicator(F.mode,B))}}P=D}for(let I=0;I<P.length;I++)R[P[I]].end=0;return{map:R,table:M}}function E(y,B){let M;const R=t.getBestModeForData(y);if(M=t.from(B,R),M!==t.BYTE&&M.bit<R.bit)throw new Error('"'+y+'" cannot be encoded with mode '+t.toString(M)+`.
8
+ Suggested mode is: `+t.toString(R));switch(M===t.KANJI&&!o.isKanjiModeEnabled()&&(M=t.BYTE),M){case t.NUMERIC:return new n(y);case t.ALPHANUMERIC:return new r(y);case t.KANJI:return new s(y);case t.BYTE:return new a(y)}}e.fromArray=function(B){return B.reduce(function(M,R){return typeof R=="string"?M.push(E(R,null)):R.data&&M.push(E(R.data,R.mode)),M},[])},e.fromString=function(B,M){const R=p(B,o.isKanjiModeEnabled()),P=b(R),I=A(P,M),x=l.find_path(I.map,"start","end"),D=[];for(let T=1;T<x.length-1;T++)D.push(I.table[x[T]].node);return e.fromArray(_(D))},e.rawSplit=function(B){return e.fromArray(p(B,o.isKanjiModeEnabled()))}})(Sr)),Sr}var fs;function rd(){if(fs)return fr;fs=1;const e=un(),t=wa(),n=Oc(),r=Hc(),a=zc(),s=Vc(),i=Kc(),o=Ci(),l=Gc(),u=Wc(),f=$c(),p=fn(),v=nd();function _(I,x){const D=I.size,T=s.getPositions(x);for(let F=0;F<T.length;F++){const C=T[F][0],w=T[F][1];for(let g=-1;g<=7;g++)if(!(C+g<=-1||D<=C+g))for(let L=-1;L<=7;L++)w+L<=-1||D<=w+L||(g>=0&&g<=6&&(L===0||L===6)||L>=0&&L<=6&&(g===0||g===6)||g>=2&&g<=4&&L>=2&&L<=4?I.set(C+g,w+L,!0,!0):I.set(C+g,w+L,!1,!0))}}function b(I){const x=I.size;for(let D=8;D<x-8;D++){const T=D%2===0;I.set(D,6,T,!0),I.set(6,D,T,!0)}}function A(I,x){const D=a.getPositions(x);for(let T=0;T<D.length;T++){const F=D[T][0],C=D[T][1];for(let w=-2;w<=2;w++)for(let g=-2;g<=2;g++)w===-2||w===2||g===-2||g===2||w===0&&g===0?I.set(F+w,C+g,!0,!0):I.set(F+w,C+g,!1,!0)}}function E(I,x){const D=I.size,T=u.getEncodedBits(x);let F,C,w;for(let g=0;g<18;g++)F=Math.floor(g/3),C=g%3+D-8-3,w=(T>>g&1)===1,I.set(F,C,w,!0),I.set(C,F,w,!0)}function y(I,x,D){const T=I.size,F=f.getEncodedBits(x,D);let C,w;for(C=0;C<15;C++)w=(F>>C&1)===1,C<6?I.set(C,8,w,!0):C<8?I.set(C+1,8,w,!0):I.set(T-15+C,8,w,!0),C<8?I.set(8,T-C-1,w,!0):C<9?I.set(8,15-C-1+1,w,!0):I.set(8,15-C-1,w,!0);I.set(T-8,8,1,!0)}function B(I,x){const D=I.size;let T=-1,F=D-1,C=7,w=0;for(let g=D-1;g>0;g-=2)for(g===6&&g--;;){for(let L=0;L<2;L++)if(!I.isReserved(F,g-L)){let X=!1;w<x.length&&(X=(x[w]>>>C&1)===1),I.set(F,g-L,X),C--,C===-1&&(w++,C=7)}if(F+=T,F<0||D<=F){F-=T,T=-T;break}}}function M(I,x,D){const T=new n;D.forEach(function(L){T.put(L.mode.bit,4),T.put(L.getLength(),p.getCharCountIndicator(L.mode,I)),L.write(T)});const F=e.getSymbolTotalCodewords(I),C=o.getTotalCodewordsCount(I,x),w=(F-C)*8;for(T.getLengthInBits()+4<=w&&T.put(0,4);T.getLengthInBits()%8!==0;)T.putBit(0);const g=(w-T.getLengthInBits())/8;for(let L=0;L<g;L++)T.put(L%2?17:236,8);return R(T,I,x)}function R(I,x,D){const T=e.getSymbolTotalCodewords(x),F=o.getTotalCodewordsCount(x,D),C=T-F,w=o.getBlocksCount(x,D),g=T%w,L=w-g,X=Math.floor(T/w),se=Math.floor(C/w),ce=se+1,ie=X-se,Ee=new l(ie);let _e=0;const ve=new Array(w),ke=new Array(w);let Ce=0;const xe=new Uint8Array(I.buffer);for(let Z=0;Z<w;Z++){const pe=Z<L?se:ce;ve[Z]=xe.slice(_e,_e+pe),ke[Z]=Ee.encode(ve[Z]),_e+=pe,Ce=Math.max(Ce,pe)}const Te=new Uint8Array(T);let K=0,H,J;for(H=0;H<Ce;H++)for(J=0;J<w;J++)H<ve[J].length&&(Te[K++]=ve[J][H]);for(H=0;H<ie;H++)for(J=0;J<w;J++)Te[K++]=ke[J][H];return Te}function P(I,x,D,T){let F;if(Array.isArray(I))F=v.fromArray(I);else if(typeof I=="string"){let X=x;if(!X){const se=v.rawSplit(I);X=u.getBestVersionForData(se,D)}F=v.fromString(I,X||40)}else throw new Error("Invalid data");const C=u.getBestVersionForData(F,D);if(!C)throw new Error("The amount of data is too big to be stored in a QR Code");if(!x)x=C;else if(x<C)throw new Error(`
9
+ The chosen QR Code version cannot contain this amount of data.
10
+ Minimum version required to store current data is: `+C+`.
11
+ `);const w=M(x,D,F),g=e.getSymbolSize(x),L=new r(g);return _(L,x),b(L),A(L,x),y(L,D,0),x>=7&&E(L,x),B(L,w),isNaN(T)&&(T=i.getBestMask(L,y.bind(null,L,D))),i.applyMask(T,L),y(L,D,T),{modules:L,version:x,errorCorrectionLevel:D,maskPattern:T,segments:F}}return fr.create=function(x,D){if(typeof x>"u"||x==="")throw new Error("No input text");let T=t.M,F,C;return typeof D<"u"&&(T=t.from(D.errorCorrectionLevel,t.M),F=u.from(D.version),C=i.from(D.maskPattern),D.toSJISFunc&&e.setToSJISFunction(D.toSJISFunc)),P(x,F,T,C)},fr}var Ir={},Pr={},vs;function Ai(){return vs||(vs=1,(function(e){function t(n){if(typeof n=="number"&&(n=n.toString()),typeof n!="string")throw new Error("Color should be defined as hex string");let r=n.slice().replace("#","").split("");if(r.length<3||r.length===5||r.length>8)throw new Error("Invalid hex color: "+n);(r.length===3||r.length===4)&&(r=Array.prototype.concat.apply([],r.map(function(s){return[s,s]}))),r.length===6&&r.push("F","F");const a=parseInt(r.join(""),16);return{r:a>>24&255,g:a>>16&255,b:a>>8&255,a:a&255,hex:"#"+r.slice(0,6).join("")}}e.getOptions=function(r){r||(r={}),r.color||(r.color={});const a=typeof r.margin>"u"||r.margin===null||r.margin<0?4:r.margin,s=r.width&&r.width>=21?r.width:void 0,i=r.scale||4;return{width:s,scale:s?4:i,margin:a,color:{dark:t(r.color.dark||"#000000ff"),light:t(r.color.light||"#ffffffff")},type:r.type,rendererOpts:r.rendererOpts||{}}},e.getScale=function(r,a){return a.width&&a.width>=r+a.margin*2?a.width/(r+a.margin*2):a.scale},e.getImageWidth=function(r,a){const s=e.getScale(r,a);return Math.floor((r+a.margin*2)*s)},e.qrToImageData=function(r,a,s){const i=a.modules.size,o=a.modules.data,l=e.getScale(i,s),u=Math.floor((i+s.margin*2)*l),f=s.margin*l,p=[s.color.light,s.color.dark];for(let v=0;v<u;v++)for(let _=0;_<u;_++){let b=(v*u+_)*4,A=s.color.light;if(v>=f&&_>=f&&v<u-f&&_<u-f){const E=Math.floor((v-f)/l),y=Math.floor((_-f)/l);A=p[o[E*i+y]?1:0]}r[b++]=A.r,r[b++]=A.g,r[b++]=A.b,r[b]=A.a}}})(Pr)),Pr}var hs;function ad(){return hs||(hs=1,(function(e){const t=Ai();function n(a,s,i){a.clearRect(0,0,s.width,s.height),s.style||(s.style={}),s.height=i,s.width=i,s.style.height=i+"px",s.style.width=i+"px"}function r(){try{return document.createElement("canvas")}catch{throw new Error("You need to specify a canvas element")}}e.render=function(s,i,o){let l=o,u=i;typeof l>"u"&&(!i||!i.getContext)&&(l=i,i=void 0),i||(u=r()),l=t.getOptions(l);const f=t.getImageWidth(s.modules.size,l),p=u.getContext("2d"),v=p.createImageData(f,f);return t.qrToImageData(v.data,s,l),n(p,u,f),p.putImageData(v,0,0),u},e.renderToDataURL=function(s,i,o){let l=o;typeof l>"u"&&(!i||!i.getContext)&&(l=i,i=void 0),l||(l={});const u=e.render(s,i,l),f=l.type||"image/png",p=l.rendererOpts||{};return u.toDataURL(f,p.quality)}})(Ir)),Ir}var Mr={},ps;function sd(){if(ps)return Mr;ps=1;const e=Ai();function t(a,s){const i=a.a/255,o=s+'="'+a.hex+'"';return i<1?o+" "+s+'-opacity="'+i.toFixed(2).slice(1)+'"':o}function n(a,s,i){let o=a+s;return typeof i<"u"&&(o+=" "+i),o}function r(a,s,i){let o="",l=0,u=!1,f=0;for(let p=0;p<a.length;p++){const v=Math.floor(p%s),_=Math.floor(p/s);!v&&!u&&(u=!0),a[p]?(f++,p>0&&v>0&&a[p-1]||(o+=u?n("M",v+i,.5+_+i):n("m",l,0),l=0,u=!1),v+1<s&&a[p+1]||(o+=n("h",f),f=0)):l++}return o}return Mr.render=function(s,i,o){const l=e.getOptions(i),u=s.modules.size,f=s.modules.data,p=u+l.margin*2,v=l.color.light.a?"<path "+t(l.color.light,"fill")+' d="M0 0h'+p+"v"+p+'H0z"/>':"",_="<path "+t(l.color.dark,"stroke")+' d="'+r(f,u,l.margin)+'"/>',b='viewBox="0 0 '+p+" "+p+'"',E='<svg xmlns="http://www.w3.org/2000/svg" '+(l.width?'width="'+l.width+'" height="'+l.width+'" ':"")+b+' shape-rendering="crispEdges">'+v+_+`</svg>
12
+ `;return typeof o=="function"&&o(null,E),E},Mr}var gs;function id(){if(gs)return hn;gs=1;const e=jc(),t=rd(),n=ad(),r=sd();function a(s,i,o,l,u){const f=[].slice.call(arguments,1),p=f.length,v=typeof f[p-1]=="function";if(!v&&!e())throw new Error("Callback required as last argument");if(v){if(p<2)throw new Error("Too few arguments provided");p===2?(u=o,o=i,i=l=void 0):p===3&&(i.getContext&&typeof u>"u"?(u=l,l=void 0):(u=l,l=o,o=i,i=void 0))}else{if(p<1)throw new Error("Too few arguments provided");return p===1?(o=i,i=l=void 0):p===2&&!i.getContext&&(l=o,o=i,i=void 0),new Promise(function(_,b){try{const A=t.create(o,l);_(s(A,i,l))}catch(A){b(A)}})}try{const _=t.create(o,l);u(null,s(_,i,l))}catch(_){u(_)}}return hn.create=t.create,hn.toCanvas=a.bind(null,n.render),hn.toDataURL=a.bind(null,n.renderToDataURL),hn.toString=a.bind(null,function(s,i,o){return r.render(s,o)}),hn}var od=id();const ld=Fc(od);var cd=N('<p class="muted"> </p>'),dd=N('<div class="qr svelte-1uqetyj"></div>'),ud=N('<div class="qr placeholder svelte-1uqetyj"></div>');function fd(e,t){je(t,!0);const n=qt(t,"size",3,192);let r=$(""),a=$(null);mt(()=>{const f=t.value;if(!f){q(r,""),q(a,null);return}ld.toString(f,{type:"svg",errorCorrectionLevel:"M",margin:1,width:n(),color:{dark:"#1d1f24",light:"#ffffff"}}).then(p=>{q(r,p,!0),q(a,null)}).catch(p=>{console.error("QR generation failed",p),q(a,p.message,!0)})});var s=Ht(),i=ue(s);{var o=f=>{var p=cd(),v=d(p);j(()=>S(v,`QR unavailable: ${c(a)??""}`)),k(f,p)},l=f=>{var p=dd();al(p,()=>c(r),!0),j(()=>Vr(p,`width: ${n()??""}px; height: ${n()??""}px;`)),k(f,p)},u=f=>{var p=ud();j(()=>Vr(p,`width: ${n()??""}px; height: ${n()??""}px;`)),k(f,p)};z(i,f=>{c(a)?f(o):c(r)?f(l,1):f(u,-1)})}k(e,s),Oe()}var vd=N('<div class="qr-wrap svelte-sddtr9"><!></div> <div class="token svelte-sddtr9"><textarea readonly="" rows="3" class="svelte-sddtr9"></textarea> <button class="ghost svelte-sddtr9" type="button"><!> Copy</button></div>',1);function hd(e,t){je(t,!0);var n=vd(),r=ue(n),a=d(r);fd(a,{get value(){return t.value},size:224});var s=h(r,2),i=d(s),o=h(i,2),l=d(o);ma(l,{}),j(()=>{ci(i,t.value),ae(o,"aria-label",t.copyLabel)}),fe("click",o,()=>va(t.value)),k(e,n),Oe()}bt(["click"]);var pd=N('<div class="row"><p class="error small svelte-1jht8du"> </p> <button type="button">Try again</button></div>'),gd=N('<p class="small warn svelte-1jht8du">Works from your home network now; forward the ports below for a phone elsewhere.</p>'),_d=N('<!> <p class="small svelte-1jht8du">Scan this with the Sereus app on the phone that owns the cadre, or paste the text into it.</p> <!>',1),md=N('<p class="muted svelte-1jht8du">Starting the node…</p>'),yd=N("<!> <!>",1);function Ni(e,t){je(t,!0);const n=1e3,r=6e4,a=At();let s=$(null),i=$(null),o=$(0);const l=W(()=>t.node.id),u=W(()=>t.node.status==="unclaimed"),f=W(()=>a.connectivity?.nodes.find(R=>R.nodeId===t.node.id)??null),p=W(()=>c(f)?.publicAddrs.join(" ")??""),v=W(()=>(c(f)??c(s)?.reachability)?.verdict??null);mt(()=>{if(c(o),c(p),!c(u)){q(s,null),q(i,null);return}return _(c(l))});function _(R){let P=!1,I;const x=Date.now()+r;async function D(){try{const T=await kl(R);if(P)return;q(s,T,!0),q(i,null)}catch(T){if(P)return;if(T instanceof Ke&&T.code==="node_unavailable"&&Date.now()<x){I=setTimeout(()=>void D(),n);return}if(T instanceof Ke&&T.code==="invalid_state"){Nt();return}console.error(`[cadre-host-ui] claim details for ${R}:`,T),q(i,T instanceof Error?T.message:String(T),!0)}}return D(),()=>{P=!0,I&&clearTimeout(I)}}var b=yd(),A=ue(b);{var E=R=>{var P=pd(),I=d(P),x=d(I),D=h(I,2);j(()=>S(x,`Could not read this node's code: ${c(i)??""}`)),fe("click",D,()=>q(o,c(o)+1)),k(R,P)};z(A,R=>{c(i)&&R(E)})}var y=h(A,2);{var B=R=>{var P=_d(),I=ue(P);hd(I,{get value(){return c(s).payload},copyLabel:"Copy join details"});var x=h(I,4);{var D=T=>{var F=gd();k(T,F)};z(x,T=>{c(v)==="unreachable"&&T(D)})}k(R,P)},M=R=>{var P=md();k(R,P)};z(y,R=>{c(s)?R(B):c(i)||R(M,1)})}k(e,b),Oe()}bt(["click"]);var wd=N('<p class="note svelte-80vbit"> </p>'),bd=N('<div class="backdrop svelte-80vbit" role="presentation"></div> <div class="dialog svelte-80vbit" role="dialog" aria-modal="true" aria-labelledby="confirm-title" tabindex="-1"><h3 id="confirm-title"> </h3> <p class="muted"> </p> <!> <!> <div class="actions svelte-80vbit"><button> </button> <button> </button></div></div>',1);function Ed(e,t){je(t,!0);const n=qt(t,"confirmLabel",3,"Confirm"),r=qt(t,"cancelLabel",3,"Cancel"),a=qt(t,"danger",3,!1);let s=$(!1);async function i(){if(!c(s)){q(s,!0);try{await t.onConfirm()}finally{q(s,!1)}}}function o(p){p.key==="Escape"&&t.onCancel()}var l=Ht(),u=ue(l);{var f=p=>{var v=bd(),_=ue(v),b=h(_,2),A=d(b),E=d(A),y=h(A,2),B=d(y),M=h(y,2);{var R=C=>{var w=wd(),g=d(w);j(()=>S(g,`⚠ ${t.note??""}`)),k(C,w)};z(M,C=>{t.note&&C(R)})}var P=h(M,2);ii(P,()=>t.children??ea);var I=h(P,2),x=d(I),D=d(x),T=h(x,2),F=d(T);j(()=>{S(E,t.title),S(B,t.message),x.disabled=c(s),S(D,r()),at(T,1,il(a()?"danger":"primary")),T.disabled=c(s),S(F,c(s)?"Working…":n())}),fe("click",_,function(...C){t.onCancel?.apply(this,C)}),fe("keydown",b,o),fe("click",x,function(...C){t.onCancel?.apply(this,C)}),fe("click",T,i),k(p,v)};z(u,p=>{t.open&&p(f)})}k(e,l),Oe()}bt(["click","keydown"]);var kd=si('<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M13.5 8a5.5 5.5 0 1 1-1.6-3.9"></path><path d="M14 2v3h-3"></path></svg>');function Cd(e,t){const n=qt(t,"size",3,16);var r=kd();j(()=>{ae(r,"width",n()),ae(r,"height",n())}),k(e,r)}var Sd=N('<span class="muted small svelte-15ufwrh"> </span>'),Td=N('<p class="muted"> </p>'),Ad=N('<pre class="logs svelte-15ufwrh"> </pre>'),Nd=N('<div class="card log-card svelte-15ufwrh"><div class="header svelte-15ufwrh"><h3>Recent logs</h3> <div class="row"><!> <button class="ghost svelte-15ufwrh" aria-label="Refresh logs"><!> Refresh</button></div></div> <!></div>');function Rd(e,t){je(t,!0);const n=qt(t,"lines",3,200);let r=$(We([])),a=$(!1),s=$(null);async function i(){if(t.nodeId){q(a,!0);try{const y=await Qe(`/api/nodes/${encodeURIComponent(t.nodeId)}/logs?lines=${n()}`);q(r,y.lines,!0),q(s,new Date,!0)}catch(y){we("error",`Logs unavailable: ${y.message}`)}finally{q(a,!1)}}}mt(()=>{i()});var o=Nd(),l=d(o),u=h(d(l),2),f=d(u);{var p=y=>{var B=Sd(),M=d(B);j(R=>S(M,`as of ${R??""}`),[()=>c(s).toLocaleTimeString()]),k(y,B)};z(f,y=>{c(s)&&y(p)})}var v=h(f,2),_=d(v);Cd(_,{});var b=h(l,2);{var A=y=>{var B=Td(),M=d(B);j(()=>S(M,c(a)?"Loading…":"No log lines yet.")),k(y,B)},E=y=>{var B=Ad(),M=d(B);j(R=>S(M,R),[()=>c(r).join(`
13
+ `)]),k(y,B)};z(b,y=>{c(r).length===0?y(A):y(E,-1)})}j(()=>v.disabled=c(a)),fe("click",v,i),k(e,o),Oe()}bt(["click"]);var xd=N('<div class="card"><p class="muted"> </p></div>'),Id=N('<div class="card"><p class="muted"> </p></div>'),Pd=N("<span> </span>"),Md=N('<span class="badge">no process</span>'),Bd=N('<dl class="kv svelte-1eq4g96"><div class="svelte-1eq4g96"><dt class="svelte-1eq4g96">Workdir</dt><dd class="svelte-1eq4g96"><code> </code></dd></div> <div class="svelte-1eq4g96"><dt class="svelte-1eq4g96">Spawned</dt><dd class="svelte-1eq4g96"> </dd></div> <div class="svelte-1eq4g96"><dt class="svelte-1eq4g96">Ports</dt><dd class="svelte-1eq4g96"> </dd></div> <div class="svelte-1eq4g96"><dt class="svelte-1eq4g96">CPU</dt><dd class="svelte-1eq4g96"> </dd></div> <div class="svelte-1eq4g96"><dt class="svelte-1eq4g96">Memory (RSS)</dt><dd class="svelte-1eq4g96"> </dd></div></dl>'),Ld=N('<p class="muted">No process is running for this node on this machine.</p>'),Dd=N("<span> </span>"),qd=N('<p class="muted">No hosted-node record names this node, so its cadre is unknown. Remove stops it and deletes its data on this machine.</p> <div class="actions svelte-1eq4g96"><button class="danger"> </button></div>',1),Ud=N('<p class="muted">Loading…</p>'),Fd=N('<!> <div class="actions svelte-1eq4g96"><button> </button></div>',1),jd=N('<p class="small svelte-1eq4g96"> </p>'),Od=N('<button class="primary"> </button>'),Hd=N("<button> </button>"),zd=N("<button> </button>"),Vd=N('<!> <div class="actions svelte-1eq4g96"><!> <button class="danger"> </button></div>',1),Kd=N('<p> </p> <dl class="kv svelte-1eq4g96"><div class="svelte-1eq4g96"><dt class="svelte-1eq4g96">Cadre ID</dt><dd class="svelte-1eq4g96"><code> </code></dd></div> <div class="svelte-1eq4g96"><dt class="svelte-1eq4g96">Owner</dt><dd class="svelte-1eq4g96"><code> </code></dd></div> <div class="svelte-1eq4g96"><dt class="svelte-1eq4g96">Connected</dt><dd class="svelte-1eq4g96"> </dd></div></dl> <!>',1),Jd=N('<p class="muted">Loading…</p>'),Yd=N('<p class="muted">The port mapping table has no entry for this node yet.</p>'),Gd=N('<div class="card stack"><h3>Reachable from outside</h3> <!></div> <!>',1),Wd=N('<div class="card"><div class="page-header svelte-1eq4g96"><div><h2 class="svelte-1eq4g96"><code class="svelte-1eq4g96"> </code></h2> <p class="muted"> </p></div> <!></div> <!></div> <div class="card stack"><div class="card-head svelte-1eq4g96"><h3 class="svelte-1eq4g96">Cadre</h3> <!></div> <!></div> <!>',1),$d=N('<section class="stack"><header class="row"><a class="back svelte-1eq4g96">← Back to nodes</a></header> <!></section> <!>',1);function Qd(e,t){je(t,!0);const n={remove:{title:"Remove hosted node",label:"Remove",message:g=>`Remove ${g}? This stops the node and deletes its data on this machine. The cadre keeps the node's row until its owner removes it there.`},reset:{title:"Reset hosted node",label:"Reset",message:g=>`Reset ${g}? Use this if someone you did not intend claimed the node. The node is stopped, its data on this machine deleted, and a fresh node with a new code starts.`},retry:{title:"Retry hosted node",label:"Retry",message:g=>`Retry ${g}? The failed node is removed and its data on this machine deleted, and a fresh node with a new code starts for the phone that owns the cadre to scan.`}},r=At();let a=$(null),s=$(null),i=$(!1),o,l=!1;const u=W(()=>r.nodes.find(g=>g.id===t.id)??null),f=W(()=>r.hostedNodes.list.find(g=>g.id===t.id)??null),p=W(()=>r.nodeStats[t.id]??null),v=W(()=>r.connectivity?.nodes.find(g=>g.nodeId===t.id)??null),_=W(()=>!c(u)&&!c(f)&&c(i)&&r.hostedNodes.loaded);zt(()=>{Nt(),Da(t.id).then(()=>q(i,!0)),o=setInterval(()=>void Da(t.id),5e3)}),pl(()=>{l=!0,o&&clearInterval(o)});async function b(g){q(s,g,!0);try{await pi(t.id)}catch(L){$e(g==="cancel"?"Cancel":"Remove",L),q(s,null);return}we("success",`Removed hosted node ${t.id}`),l||Ua(Ve("nodes"))}async function A(g){q(s,g,!0);try{const L=await El(t.id);we("success",`Started ${L.id} in place of ${t.id}; show its code only to the person it is for`),l||Ua(Ve("node-detail",{id:L.id}))}catch(L){$e(g==="retry"?"Retry":"Reset",L),q(s,null)}}async function E(){q(s,"rejoin");try{await hi(t.id)}catch(g){$e("Retry",g)}finally{q(s,null)}}async function y(g){q(a,null),g==="remove"?await b("remove"):await A(g)}function B(g,L,X){return c(s)===g?X:L}var M=$d(),R=ue(M),P=d(R),I=d(P),x=h(P,2);{var D=g=>{var L=xd(),X=d(L),se=d(X);j(()=>S(se,`There is no node ${t.id??""} on this machine. It may have been removed.`)),k(g,L)},T=g=>{var L=Id(),X=d(L),se=d(X);j(()=>S(se,`Loading node ${t.id??""}…`)),k(g,L)},F=g=>{var L=Wd(),X=ue(L),se=d(X),ce=d(se),ie=d(ce),Ee=d(ie),_e=d(Ee),ve=h(ie,2),ke=d(ve),Ce=h(ce,2);{var xe=Y=>{var te=Pd(),m=d(te);j(()=>{at(te,1,`badge ${c(u).status==="running"?"ok":"err"}`,"svelte-1eq4g96"),S(m,c(u).status)}),k(Y,te)},Te=Y=>{var te=Md();k(Y,te)};z(Ce,Y=>{c(u)?Y(xe):Y(Te,-1)})}var K=h(se,2);{var H=Y=>{var te=Bd(),m=d(te),U=h(d(m)),O=d(U),V=d(O),G=h(m,2),he=h(d(G)),le=d(he),me=h(G,2),qe=h(d(me)),it=d(qe),He=h(me,2),Ye=h(d(He)),dt=d(Ye),Vt=h(He,2),Kt=h(d(Vt)),ut=d(Kt);j((Jt,Cn,vn)=>{S(V,c(u).workdir||"—"),S(le,Jt),S(it,`health ${c(u).ports.health??""} · metrics ${c(u).ports.metrics??""} · p2p ${c(u).ports.p2p??""} · ws ${c(u).ports.ws??""}`),S(dt,Cn),S(ut,vn)},[()=>Ut(c(u).spawnedAt),()=>c(p)?c(p).cpuPercent.toFixed(1)+"%":"—",()=>Ll(c(p)?.memoryBytes)]),k(Y,te)},J=Y=>{var te=Ld();k(Y,te)};z(K,Y=>{c(u)?Y(H):Y(J,-1)})}var Z=h(X,2),pe=d(Z),Se=h(d(pe),2);{var De=Y=>{var te=Dd(),m=d(te);j(()=>{at(te,1,`badge ${bn[c(f).status].tone??""}`,"svelte-1eq4g96"),S(m,bn[c(f).status].text)}),k(Y,te)};z(Se,Y=>{c(f)&&Y(De)})}var oe=h(pe,2);{var de=Y=>{var te=Ht(),m=ue(te);{var U=V=>{var G=qd(),he=h(ue(G),2),le=d(he),me=d(le);j(qe=>{le.disabled=c(s)!==null,S(me,qe)},[()=>B("remove","Remove","Removing…")]),fe("click",le,()=>q(a,"remove")),k(V,G)},O=V=>{var G=Ud();k(V,G)};z(m,V=>{r.hostedNodes.loaded?V(U):V(O,-1)})}k(Y,te)},ge=Y=>{var te=Kd(),m=ue(te);let U;var O=d(m),V=h(m,2),G=d(V),he=h(d(G)),le=d(he),me=d(le),qe=h(G,2),it=h(d(qe)),He=d(it),Ye=d(He),dt=h(qe,2),Vt=h(d(dt)),Kt=d(Vt),ut=h(V,2);{var Jt=ft=>{var Et=Fd(),kt=ue(Et);{var Yt=Ue=>{Ni(Ue,{get node(){return c(f)}})},Sn=W(()=>pa(c(f)));z(kt,Ue=>{c(Sn)&&Ue(Yt)})}var Gt=h(kt,2),Rt=d(Gt),Xe=d(Rt);j(Ue=>{Rt.disabled=c(s)!==null,S(Xe,Ue)},[()=>B("cancel","Cancel","Cancelling…")]),fe("click",Rt,()=>b("cancel")),k(ft,Et)},Cn=W(()=>Fn(c(f))),vn=ft=>{var Et=Vd(),kt=ue(Et);{var Yt=Pe=>{var Me=jd(),Wt=d(Me);j(()=>S(Wt,mi)),k(Pe,Me)},Sn=W(()=>Wr(c(f)));z(kt,Pe=>{c(Sn)&&Pe(Yt)})}var Gt=h(kt,2),Rt=d(Gt);{var Xe=Pe=>{var Me=Od(),Wt=d(Me);j(Tn=>{Me.disabled=c(s)!==null,S(Wt,Tn)},[()=>B("rejoin","Retry","Retrying…")]),fe("click",Me,E),k(Pe,Me)},Ue=W(()=>Wr(c(f))),xi=Pe=>{},Ii=Pe=>{var Me=Hd(),Wt=d(Me);j(Tn=>{Me.disabled=c(s)!==null,S(Wt,Tn)},[()=>B("retry","Retry","Retrying…")]),fe("click",Me,()=>q(a,"retry")),k(Pe,Me)},Pi=Pe=>{var Me=zd(),Wt=d(Me);j(Tn=>{Me.disabled=c(s)!==null,S(Wt,Tn)},[()=>B("reset","Reset","Resetting…")]),fe("click",Me,()=>q(a,"reset")),k(Pe,Me)};z(Rt,Pe=>{c(Ue)?Pe(Xe):c(f).join.kind==="invitation"?Pe(xi,1):c(f).status==="error"?Pe(Ii,2):Pe(Pi,-1)})}var ir=h(Rt,2),Mi=d(ir);j(Pe=>{ir.disabled=c(s)!==null,S(Mi,Pe)},[()=>B("remove","Remove","Removing…")]),fe("click",ir,()=>q(a,"remove")),k(ft,Et)};z(ut,ft=>{c(Cn)?ft(Jt):ft(vn,-1)})}j((ft,Et,kt,Yt)=>{U=at(m,1,"state svelte-1eq4g96",null,U,{error:c(f).status==="error"}),S(O,ft),S(me,Et),ae(He,"title",c(f).ownerKey),S(Ye,kt),S(Kt,Yt)},[()=>wi(c(f)),()=>_a(c(f))??"—",()=>ga(c(f).ownerKey),()=>yi(c(f))]),k(Y,te)};z(oe,Y=>{c(f)?Y(ge,-1):Y(de)})}var Ne=h(Z,2);{var Ie=Y=>{var te=Gd(),m=ue(te),U=h(d(m),2);{var O=le=>{var me=Jd();k(le,me)},V=le=>{var me=Yd();k(le,me)},G=le=>{ya(le,{get node(){return c(v)},get connectivity(){return r.connectivity}})};z(U,le=>{r.connectivity?c(v)?le(G,-1):le(V,1):le(O)})}var he=h(m,2);Rd(he,{get nodeId(){return c(u).id}}),k(Y,te)};z(Ne,Y=>{c(u)&&Y(Ie)})}j(()=>{S(_e,t.id),S(ke,`Hosted node · ${c(u)?.profile??"storage"??""} profile`)}),k(g,L)};z(x,g=>{c(_)?g(D):!c(u)&&!c(f)?g(T,1):g(F,-1)})}var C=h(R,2);{var w=g=>{const L=W(()=>c(a));{let X=W(()=>n[c(L)].message(t.id));Ed(g,{open:!0,get title(){return n[c(L)].title},get message(){return c(X)},get confirmLabel(){return n[c(L)].label},danger:!0,onConfirm:()=>y(c(L)),onCancel:()=>q(a,null)})}};z(C,g=>{c(a)&&g(w)})}j(g=>ae(I,"href",g),[()=>Ve("nodes")]),k(e,M),Oe()}bt(["click"]);var Xd=N('<p class="error svelte-cshs6v"> </p>'),Zd=N('<!> <!> <div class="actions svelte-cshs6v"><button> </button></div>',1),eu=N('<div class="actions svelte-cshs6v"><button> </button></div>'),tu=N('<p class="small svelte-cshs6v"> </p> <div class="actions svelte-cshs6v"><button> </button> <button class="primary"> </button></div>',1),nu=N("<a>Open this node's page →</a>"),ru=N('<article class="card stack"><div class="node-head svelte-cshs6v"><a><code class="svelte-cshs6v"> </code></a> <span> </span></div> <p aria-live="polite"> </p> <!></article>'),au=N('<p class="muted">No node is waiting to join a cadre.</p>'),su=N('<p class="muted">Loading…</p>'),iu=N(`<section class="stack"><header class="page-header svelte-cshs6v"><div class="svelte-cshs6v"><h2>Join a cadre</h2> <p class="muted">Start a node on this machine for someone's cadre. The phone that owns the cadre scans
14
+ the node's code, and the node joins that cadre. Anyone who scans the code claims the
15
+ node, so show it only to the person it is for.</p></div> <button class="primary"> </button></header> <form class="card stack invitation svelte-cshs6v"><label for="invitation"><strong>Or paste a cadre invitation</strong></label> <p class="muted small svelte-cshs6v">The invitation the owner's app copied. The node redeems it at a member of the cadre this
16
+ machine can reach, so it works once the cadre has an always-on node; for the cadre's first
17
+ one, use the button above and scan the code instead.</p> <textarea id="invitation" rows="3" spellcheck="false" autocomplete="off" class="svelte-cshs6v"></textarea> <div class="actions svelte-cshs6v"><button type="submit"> </button></div></form> <!> <!></section>`);function ou(e,t){je(t,!0);const n=At();let r=$(!1),a=$(!1),s=$(""),i=$(We([])),o=$(We([])),l=$(We([]));const u=W(()=>n.hostedNodes.list.filter(w=>c(l).includes(w.id)).sort((w,g)=>g.createdAt.localeCompare(w.createdAt)));zt(()=>{Nt()}),mt(()=>{const w=n.hostedNodes.list.filter(g=>Fn(g)).map(g=>g.id);dn(()=>f(w))});function f(w){const g=w.filter(L=>!c(l).includes(L));g.length>0&&q(l,[...c(l),...g],!0)}async function p(){q(r,!0);try{const w=await qa();f([w.id])}catch(w){$e("Join",w)}finally{q(r,!1)}}async function v(){q(a,!0);try{const w=await qa(c(s).trim());q(s,""),f([w.id])}catch(w){$e("Join by invitation",w)}finally{q(a,!1)}}async function _(w){q(i,[...c(i),w.id],!0);try{await pi(w.id)}catch(g){$e("Cancel",g)}finally{q(i,c(i).filter(g=>g!==w.id),!0)}}async function b(w){q(o,[...c(o),w.id],!0);try{await hi(w.id)}catch(g){$e("Retry",g)}finally{q(o,c(o).filter(g=>g!==w.id),!0)}}function A(w){return n.connectivity?.nodes.find(g=>g.nodeId===w)??null}var E=iu(),y=d(E),B=h(d(y),2),M=d(B),R=h(y,2),P=h(d(R),4),I=h(P,2),x=d(I),D=d(x),T=h(R,2);{var F=w=>{var g=Xd(),L=d(g);j(()=>S(L,`Couldn’t load hosted nodes: ${n.hostedNodes.error??""}`)),k(w,g)};z(T,w=>{n.hostedNodes.error&&w(F)})}var C=h(T,2);Dt(C,17,()=>c(u),w=>w.id,(w,g)=>{const L=W(()=>A(c(g).id));var X=ru(),se=d(X),ce=d(se),ie=d(ce),Ee=d(ie),_e=h(ce,2),ve=d(_e),ke=h(se,2);let Ce;var xe=d(ke),Te=h(ke,2);{var K=oe=>{var de=Zd(),ge=ue(de);Ni(ge,{get node(){return c(g)}});var Ne=h(ge,2);{var Ie=U=>{ya(U,{get node(){return c(L)},get connectivity(){return n.connectivity}})};z(Ne,U=>{c(L)&&n.connectivity&&U(Ie)})}var Y=h(Ne,2),te=d(Y),m=d(te);j((U,O)=>{te.disabled=U,S(m,O)},[()=>c(i).includes(c(g).id),()=>c(i).includes(c(g).id)?"Cancelling…":"Cancel"]),fe("click",te,()=>_(c(g))),k(oe,de)},H=W(()=>pa(c(g))),J=oe=>{var de=eu(),ge=d(de),Ne=d(ge);j((Ie,Y)=>{ge.disabled=Ie,S(Ne,Y)},[()=>c(i).includes(c(g).id),()=>c(i).includes(c(g).id)?"Cancelling…":"Cancel"]),fe("click",ge,()=>_(c(g))),k(oe,de)},Z=W(()=>Fn(c(g))),pe=oe=>{var de=tu(),ge=ue(de),Ne=d(ge),Ie=h(ge,2),Y=d(Ie),te=d(Y),m=h(Y,2),U=d(m);j((O,V,G,he)=>{S(Ne,mi),Y.disabled=O,S(te,V),m.disabled=G,S(U,he)},[()=>c(i).includes(c(g).id),()=>c(i).includes(c(g).id)?"Removing…":"Remove",()=>c(o).includes(c(g).id),()=>c(o).includes(c(g).id)?"Retrying…":"Retry"]),fe("click",Y,()=>_(c(g))),fe("click",m,()=>b(c(g))),k(oe,de)},Se=W(()=>Wr(c(g))),De=oe=>{var de=nu();j(ge=>ae(de,"href",ge),[()=>Ve("node-detail",{id:c(g).id})]),k(oe,de)};z(Te,oe=>{c(H)?oe(K):c(Z)?oe(J,1):c(Se)?oe(pe,2):oe(De,-1)})}j((oe,de)=>{ae(ce,"href",oe),S(Ee,c(g).id),at(_e,1,`badge ${bn[c(g).status].tone??""}`,"svelte-cshs6v"),S(ve,bn[c(g).status].text),Ce=at(ke,1,"state svelte-cshs6v",null,Ce,{error:c(g).status==="error"}),S(xe,de)},[()=>Ve("node-detail",{id:c(g).id}),()=>wi(c(g))]),k(w,X)},w=>{var g=Ht(),L=ue(g);{var X=ce=>{var ie=au();k(ce,ie)},se=ce=>{var ie=su();k(ce,ie)};z(L,ce=>{n.hostedNodes.loaded?ce(X):n.hostedNodes.error||ce(se,1)})}k(w,g)}),j(w=>{B.disabled=c(r),S(M,c(r)?"Starting a node…":"Join a cadre"),x.disabled=w,S(D,c(a)?"Joining…":"Join")},[()=>c(a)||c(s).trim()===""]),fe("click",B,p),qn("submit",R,w=>{w.preventDefault(),v()}),Un(P,()=>c(s),w=>q(s,w)),k(e,E),Oe()}bt(["click"]);var lu=N('<a target="_blank" rel="noreferrer">Release notes</a>'),cu=N('<div class="banner info svelte-1cl3wo6"><div><strong>Update available</strong> <span class="muted"> </span> <!></div> <button type="button" class="primary"> </button></div>'),du=N('<p class="muted small svelte-1cl3wo6"> </p>'),uu=N('<p class="error small svelte-1cl3wo6"> </p>'),fu=N('<dl class="kv svelte-1cl3wo6"><div class="svelte-1cl3wo6"><dt class="svelte-1cl3wo6">Install ID</dt><dd class="svelte-1cl3wo6"><code> </code></dd></div> <div class="svelte-1cl3wo6"><dt class="svelte-1cl3wo6">Installed at</dt><dd class="svelte-1cl3wo6"> </dd></div> <div class="svelte-1cl3wo6"><dt class="svelte-1cl3wo6">Installer version</dt><dd class="svelte-1cl3wo6"> </dd></div> <div class="svelte-1cl3wo6"><dt class="svelte-1cl3wo6">UI port</dt><dd class="svelte-1cl3wo6"> </dd></div> <div class="svelte-1cl3wo6"><dt class="svelte-1cl3wo6">Data dir</dt> <dd class="copy-row svelte-1cl3wo6"><code> </code> <button type="button" class="ghost" aria-label="Copy data dir"><!></button></dd></div></dl> <p class="muted small svelte-1cl3wo6">UI port and data dir are set at install time and can only be changed by editing <code>host.config.json</code> and restarting the service.</p>',1),vu=N('<p class="muted">Loading…</p>'),hu=N(`<section class="stack"><header><h2>Settings</h2> <p class="muted">Update preferences and install metadata.</p></header> <form class="card stack"><h3>Updates</h3> <label class="row inline svelte-1cl3wo6"><input type="checkbox" class="svelte-1cl3wo6"/> <span>Apply updates automatically when available</span></label> <div><label for="manifest-url">Manifest URL (optional override)</label> <input id="manifest-url" type="url" placeholder="https://example.org/latest.json" autocomplete="off"/></div> <!> <!> <div class="actions svelte-1cl3wo6"><button type="submit" class="primary"> </button></div></form> <div class="card"><h3>Install</h3> <!></div> <div class="card"><h3>Uninstall</h3> <p class="muted">Stop the cadre-host service, then remove the data directory above and the
18
+ installed package:</p> <pre>npm uninstall -g @serfab/cadre-host</pre> <p class="muted small svelte-1cl3wo6">See the README under <a href="https://github.com/gotchoices/sereus/blob/master/packages/cadre-host/README.md" target="_blank" rel="noreferrer">Uninstall</a> for OS-specific service teardown.</p></div></section>`);function pu(e,t){je(t,!0);const n=At();let r=$(!1),a=$(""),s=$(!1),i=$(!1);zt(()=>{Jr(),tr()}),mt(()=>{const C=n.settings;C&&(q(r,C.updates.autoApply,!0),q(a,C.updates.manifestUrl??"",!0))});async function o(C){C.preventDefault(),q(s,!0);try{const w={updates:{autoApply:c(r)}};c(a).trim()&&(w.updates.manifestUrl=c(a).trim()),await er("/api/settings",w),we("success","Update preferences saved"),await Jr()}catch(w){const g=w instanceof Ke?w.code:"error";we("error",`Save failed: ${w.message} (${g})`)}finally{q(s,!1)}}async function l(){q(i,!0);try{const C=await Kn("/update/apply");we("success",`Applied ${C.fromVersion} → ${C.toVersion}`+(C.restarted?" (service restarting)":"")),await tr()}catch(C){const w=C instanceof Ke?C.code:"error";we("error",`Apply failed: ${C.message} (${w})`)}finally{q(i,!1)}}var u=hu(),f=h(d(u),2),p=h(d(f),2),v=d(p),_=h(p,2),b=h(d(_),2),A=h(_,2);{var E=C=>{var w=cu(),g=d(w),L=h(d(g),2),X=d(L),se=h(L,2);{var ce=_e=>{var ve=lu();j(()=>ae(ve,"href",n.update.available.releaseNotesUrl)),k(_e,ve)};z(se,_e=>{n.update.available.releaseNotesUrl&&_e(ce)})}var ie=h(g,2),Ee=d(ie);j(()=>{S(X,`→ version ${n.update.available.version??""}`),ie.disabled=c(i),S(Ee,c(i)?"Applying…":"Apply now")}),fe("click",ie,l),k(C,w)},y=C=>{var w=du(),g=d(w);j(L=>S(g,`No update available. Last checked ${L??""}.`),[()=>Ut(n.update.lastChecked)]),k(C,w)};z(A,C=>{n.update?.available?.version?C(E):n.update?.lastChecked&&C(y,1)})}var B=h(A,2);{var M=C=>{var w=uu(),g=d(w);j(()=>S(g,`Last error: ${n.update.lastError.message??""} (${n.update.lastError.code??""})`)),k(C,w)};z(B,C=>{n.update?.lastError&&C(M)})}var R=h(B,2),P=d(R),I=d(P),x=h(f,2),D=h(d(x),2);{var T=C=>{var w=fu(),g=ue(w),L=d(g),X=h(d(L)),se=d(X),ce=d(se),ie=h(L,2),Ee=h(d(ie)),_e=d(Ee),ve=h(ie,2),ke=h(d(ve)),Ce=d(ke),xe=h(ve,2),Te=h(d(xe)),K=d(Te),H=h(xe,2),J=h(d(H),2),Z=d(J),pe=d(Z),Se=h(Z,2),De=d(Se);ma(De,{}),j(oe=>{S(ce,n.settings.installId),S(_e,oe),S(Ce,n.settings.installerVersion??"—"),S(K,n.settings.uiPort),S(pe,n.settings.dataDir)},[()=>Ut(n.settings.installedAt)]),fe("click",Se,()=>va(n.settings.dataDir)),k(C,w)},F=C=>{var w=vu();k(C,w)};z(D,C=>{n.settings?C(T):C(F,-1)})}j(()=>{P.disabled=c(s),S(I,c(s)?"Saving…":"Save update preferences")}),qn("submit",f,o),Kr(v,()=>c(r),C=>q(r,C)),Un(b,()=>c(a),C=>q(a,C)),k(e,u),Oe()}bt(["click"]);var gu=N('<div role="status"><span class="text svelte-g7yjw8"> </span> <button class="ghost svelte-g7yjw8" aria-label="Dismiss">×</button></div>'),_u=N('<div class="toast-stack svelte-g7yjw8" aria-live="polite" aria-relevant="additions"></div>');function mu(e,t){je(t,!1);const n=At();ui();var r=Ht(),a=ue(r);{var s=i=>{var o=_u();Dt(o,5,()=>n.toasts,l=>l.id,(l,u)=>{var f=gu(),p=d(f),v=d(p),_=h(p,2);j(()=>{at(f,1,`toast toast-${c(u).kind??""}`,"svelte-g7yjw8"),S(v,c(u).text)}),fe("click",_,()=>fi(c(u).id)),k(l,f)}),k(i,o)};z(a,i=>{n.toasts.length>0&&i(s)})}k(e,r),Oe()}bt(["click"]);var yu=N("<a> </a>"),wu=N('<a class="visually-hidden" href="#main">Skip to content</a> <header class="topbar svelte-1r8vfx3"><div class="brand svelte-1r8vfx3"><span class="logo svelte-1r8vfx3" aria-hidden="true">●</span> <span>cadre-host</span> <!></div> <nav aria-label="Primary" class="svelte-1r8vfx3"></nav></header> <main id="main" class="svelte-1r8vfx3"><!></main> <!>',1);function bu(e,t){je(t,!1);const n=Tl(),r=At();function a(P){switch(P){case"ok":return"OK";case"warn":return"Attention";case"error":return"Error";default:return"…"}}const s=[{name:"home",label:"Home"},{name:"connectivity",label:"Connectivity"},{name:"nodes",label:"Nodes"},{name:"join",label:"Join"},{name:"settings",label:"Settings"}];function i(P){return P==="nodes"?n.route.name==="nodes"||n.route.name==="node-detail":n.route.name===P}zt(()=>{Al(),vi(),ha(),Nt(),Mt(),tr(),Jr();let P=!0;const I=Il(x=>Sl(x),{onError(x,D){P&&(P=!1,we("error",`Lost realtime updates; retrying in ${Math.round(D/1e3)}s`))},onOpen(){P=!0}});return()=>{I.close(),Nl()}}),ui();var o=wu(),l=h(ue(o),2),u=d(l),f=h(d(u),4);{let P=Zn(()=>a(r.status));Ei(f,{get status(){return r.status},get label(){return c(P)},size:10})}var p=h(u,2);Dt(p,5,()=>s,P=>P.name,(P,I)=>{var x=yu();let D;var T=d(x);j((F,C,w)=>{ae(x,"href",F),ae(x,"aria-current",C),D=at(x,1,"svelte-1r8vfx3",null,D,w),S(T,c(I).label)},[()=>Ve(c(I).name),()=>i(c(I).name)?"page":void 0,()=>({active:i(c(I).name)})]),k(P,x)});var v=h(l,2),_=d(v);{var b=P=>{Ac(P,{})},A=P=>{Uc(P,{})},E=P=>{var I=Ht(),x=ue(I);el(x,()=>n.route.params.id,D=>{{let T=Zn(()=>n.route.params.id??"");Qd(D,{get id(){return c(T)}})}}),k(P,I)},y=P=>{ou(P,{})},B=P=>{pu(P,{})},M=P=>{$l(P,{})};z(_,P=>{n.route.name==="connectivity"?P(b):n.route.name==="nodes"?P(A,1):n.route.name==="node-detail"?P(E,2):n.route.name==="join"?P(y,3):n.route.name==="settings"?P(B,4):P(M,-1)})}var R=h(v,2);mu(R,{}),k(e,o),Oe()}const Ri=document.getElementById("app");if(!Ri)throw new Error("Missing #app mount target");$o(bu,{target:Ri});
19
+ //# sourceMappingURL=index-4FWuU8ye.js.map