@weppy/roblox-mcp 2.5.1 → 2.6.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 (215) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.github/workflows/install-test.yml +55 -4
  3. package/CHANGELOG.md +17 -0
  4. package/README.md +29 -46
  5. package/SUPPORT.md +4 -6
  6. package/install.ps1 +7 -5
  7. package/install.sh +4 -2
  8. package/llms-full.txt +8 -688
  9. package/llms.txt +3 -13
  10. package/package.json +1 -1
  11. package/plugins/weppy-roblox-mcp/.claude-plugin/plugin.json +1 -1
  12. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{ChangelogDetailPage-DRfFUIvC.js → ChangelogDetailPage-C-ROvHGr.js} +1 -1
  13. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{ChangelogPage-Dgl8dBt6.js → ChangelogPage-CPm4ft8m.js} +1 -1
  14. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{ConfirmModal-DfdyAPrJ.js → ConfirmModal-BSTYLn14.js} +1 -1
  15. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{ConnectionPage-LSvSX1_u.js → ConnectionPage-BeJEgfmf.js} +1 -1
  16. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{InfoLabel-DrK7vhO-.js → InfoLabel-BRbbxjjt.js} +1 -1
  17. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{OverviewPage-CXsGuoPu.js → OverviewPage-BHd6yL_8.js} +1 -1
  18. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{PlaytestPage-CgkzRAqQ.js → PlaytestPage-BiNJCh4I.js} +1 -1
  19. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{PropertyDiff-Dy3MffNh.js → PropertyDiff-BKVe7m6g.js} +1 -1
  20. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/SettingsPage-Cg33y021.js +1 -0
  21. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{StatusBadge-hJyzgRAl.js → StatusBadge-A72TDL-q.js} +1 -1
  22. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{SyncPage-eX2Rh-Ct.js → SyncPage-R4Qs9Xt3.js} +1 -1
  23. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/TierComparison-CQewH4h_.js +1 -0
  24. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{TierPromoProgress-CLAr1gQq.js → TierPromoProgress-DolZjAqX.js} +1 -1
  25. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{ToolsPage-CqzfCxxH.js → ToolsPage-DRX93nSV.js} +1 -1
  26. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/WhatsNewPage-uLdiNHd0.js +1 -0
  27. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{index-BfvSPSNj.js → index-oz4Gtzz9.js} +55 -21
  28. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{useLiveUptime-BeRNzFBh.js → useLiveUptime-CRLLCM8t.js} +1 -1
  29. package/plugins/weppy-roblox-mcp/dashboard/dist/index.html +1 -1
  30. package/plugins/weppy-roblox-mcp/dist/index.js +76 -76
  31. package/plugins/weppy-roblox-mcp/roblox-plugin/WeppyRobloxMCP.rbxm +0 -0
  32. package/docs/compatibility.md +0 -44
  33. package/docs/en/dashboard/changelog.md +0 -114
  34. package/docs/en/dashboard/connection.md +0 -77
  35. package/docs/en/dashboard/overview.md +0 -95
  36. package/docs/en/dashboard/playtest.md +0 -61
  37. package/docs/en/dashboard/settings.md +0 -60
  38. package/docs/en/dashboard/sync.md +0 -68
  39. package/docs/en/dashboard/tools.md +0 -69
  40. package/docs/en/explorer/overview.md +0 -104
  41. package/docs/en/installation/README.md +0 -95
  42. package/docs/en/installation/ai-apps/antigravity.md +0 -89
  43. package/docs/en/installation/ai-apps/claude-app.md +0 -78
  44. package/docs/en/installation/ai-apps/claude-code.md +0 -104
  45. package/docs/en/installation/ai-apps/codex-app.md +0 -56
  46. package/docs/en/installation/ai-apps/codex-cli.md +0 -67
  47. package/docs/en/installation/ai-apps/cursor.md +0 -77
  48. package/docs/en/installation/ai-apps/gemini-cli.md +0 -120
  49. package/docs/en/installation/roblox-explorer.md +0 -68
  50. package/docs/en/installation/roblox-plugin.md +0 -96
  51. package/docs/en/pro-upgrade.md +0 -96
  52. package/docs/en/sync/luau-lsp.md +0 -41
  53. package/docs/en/sync/overview.md +0 -153
  54. package/docs/en/tools/assets-and-effects.md +0 -104
  55. package/docs/en/tools/instances-and-properties.md +0 -104
  56. package/docs/en/tools/overview.md +0 -277
  57. package/docs/en/tools/playtest.md +0 -140
  58. package/docs/en/tools/scripting.md +0 -66
  59. package/docs/en/tools/system-and-debugging.md +0 -93
  60. package/docs/en/tools/world-and-environment.md +0 -102
  61. package/docs/es/README.md +0 -209
  62. package/docs/es/dashboard/changelog.md +0 -114
  63. package/docs/es/dashboard/connection.md +0 -77
  64. package/docs/es/dashboard/overview.md +0 -95
  65. package/docs/es/dashboard/playtest.md +0 -61
  66. package/docs/es/dashboard/settings.md +0 -60
  67. package/docs/es/dashboard/sync.md +0 -68
  68. package/docs/es/dashboard/tools.md +0 -69
  69. package/docs/es/explorer/overview.md +0 -104
  70. package/docs/es/installation/README.md +0 -87
  71. package/docs/es/installation/ai-apps/antigravity.md +0 -89
  72. package/docs/es/installation/ai-apps/claude-app.md +0 -78
  73. package/docs/es/installation/ai-apps/claude-code.md +0 -104
  74. package/docs/es/installation/ai-apps/codex-app.md +0 -56
  75. package/docs/es/installation/ai-apps/codex-cli.md +0 -67
  76. package/docs/es/installation/ai-apps/cursor.md +0 -77
  77. package/docs/es/installation/ai-apps/gemini-cli.md +0 -120
  78. package/docs/es/installation/roblox-explorer.md +0 -58
  79. package/docs/es/installation/roblox-plugin.md +0 -85
  80. package/docs/es/pro-upgrade.md +0 -96
  81. package/docs/es/sync/luau-lsp.md +0 -41
  82. package/docs/es/sync/overview.md +0 -153
  83. package/docs/es/tools/assets-and-effects.md +0 -104
  84. package/docs/es/tools/instances-and-properties.md +0 -104
  85. package/docs/es/tools/overview.md +0 -277
  86. package/docs/es/tools/playtest.md +0 -140
  87. package/docs/es/tools/scripting.md +0 -66
  88. package/docs/es/tools/system-and-debugging.md +0 -93
  89. package/docs/es/tools/world-and-environment.md +0 -102
  90. package/docs/id/README.md +0 -209
  91. package/docs/id/dashboard/changelog.md +0 -114
  92. package/docs/id/dashboard/connection.md +0 -77
  93. package/docs/id/dashboard/overview.md +0 -95
  94. package/docs/id/dashboard/playtest.md +0 -61
  95. package/docs/id/dashboard/settings.md +0 -60
  96. package/docs/id/dashboard/sync.md +0 -68
  97. package/docs/id/dashboard/tools.md +0 -69
  98. package/docs/id/explorer/overview.md +0 -104
  99. package/docs/id/installation/README.md +0 -93
  100. package/docs/id/installation/ai-apps/antigravity.md +0 -89
  101. package/docs/id/installation/ai-apps/claude-app.md +0 -78
  102. package/docs/id/installation/ai-apps/claude-code.md +0 -104
  103. package/docs/id/installation/ai-apps/codex-app.md +0 -56
  104. package/docs/id/installation/ai-apps/codex-cli.md +0 -67
  105. package/docs/id/installation/ai-apps/cursor.md +0 -77
  106. package/docs/id/installation/ai-apps/gemini-cli.md +0 -120
  107. package/docs/id/installation/roblox-explorer.md +0 -58
  108. package/docs/id/installation/roblox-plugin.md +0 -85
  109. package/docs/id/pro-upgrade.md +0 -96
  110. package/docs/id/sync/luau-lsp.md +0 -41
  111. package/docs/id/sync/overview.md +0 -153
  112. package/docs/id/tools/assets-and-effects.md +0 -104
  113. package/docs/id/tools/instances-and-properties.md +0 -104
  114. package/docs/id/tools/overview.md +0 -277
  115. package/docs/id/tools/playtest.md +0 -140
  116. package/docs/id/tools/scripting.md +0 -66
  117. package/docs/id/tools/system-and-debugging.md +0 -93
  118. package/docs/id/tools/world-and-environment.md +0 -102
  119. package/docs/installer/assets/index-Bz0amd7x.js +0 -63
  120. package/docs/installer/assets/index-ei4lRUa6.css +0 -1
  121. package/docs/installer/index.html +0 -14
  122. package/docs/installer/manifest.webmanifest +0 -15
  123. package/docs/installer/sw.js +0 -7
  124. package/docs/installer/weppy-icon.png +0 -0
  125. package/docs/ja/README.md +0 -207
  126. package/docs/ja/dashboard/changelog.md +0 -114
  127. package/docs/ja/dashboard/connection.md +0 -77
  128. package/docs/ja/dashboard/overview.md +0 -95
  129. package/docs/ja/dashboard/playtest.md +0 -61
  130. package/docs/ja/dashboard/settings.md +0 -60
  131. package/docs/ja/dashboard/sync.md +0 -68
  132. package/docs/ja/dashboard/tools.md +0 -69
  133. package/docs/ja/explorer/overview.md +0 -104
  134. package/docs/ja/installation/README.md +0 -93
  135. package/docs/ja/installation/ai-apps/antigravity.md +0 -89
  136. package/docs/ja/installation/ai-apps/claude-app.md +0 -78
  137. package/docs/ja/installation/ai-apps/claude-code.md +0 -104
  138. package/docs/ja/installation/ai-apps/codex-app.md +0 -56
  139. package/docs/ja/installation/ai-apps/codex-cli.md +0 -67
  140. package/docs/ja/installation/ai-apps/cursor.md +0 -77
  141. package/docs/ja/installation/ai-apps/gemini-cli.md +0 -120
  142. package/docs/ja/installation/roblox-explorer.md +0 -58
  143. package/docs/ja/installation/roblox-plugin.md +0 -85
  144. package/docs/ja/pro-upgrade.md +0 -96
  145. package/docs/ja/sync/luau-lsp.md +0 -41
  146. package/docs/ja/sync/overview.md +0 -153
  147. package/docs/ja/tools/assets-and-effects.md +0 -104
  148. package/docs/ja/tools/instances-and-properties.md +0 -104
  149. package/docs/ja/tools/overview.md +0 -277
  150. package/docs/ja/tools/playtest.md +0 -140
  151. package/docs/ja/tools/scripting.md +0 -66
  152. package/docs/ja/tools/system-and-debugging.md +0 -93
  153. package/docs/ja/tools/world-and-environment.md +0 -102
  154. package/docs/ko/README.md +0 -207
  155. package/docs/ko/dashboard/changelog.md +0 -114
  156. package/docs/ko/dashboard/connection.md +0 -77
  157. package/docs/ko/dashboard/overview.md +0 -95
  158. package/docs/ko/dashboard/playtest.md +0 -61
  159. package/docs/ko/dashboard/settings.md +0 -60
  160. package/docs/ko/dashboard/sync.md +0 -68
  161. package/docs/ko/dashboard/tools.md +0 -69
  162. package/docs/ko/explorer/overview.md +0 -104
  163. package/docs/ko/installation/README.md +0 -95
  164. package/docs/ko/installation/ai-apps/antigravity.md +0 -88
  165. package/docs/ko/installation/ai-apps/claude-app.md +0 -78
  166. package/docs/ko/installation/ai-apps/claude-code.md +0 -104
  167. package/docs/ko/installation/ai-apps/codex-app.md +0 -56
  168. package/docs/ko/installation/ai-apps/codex-cli.md +0 -67
  169. package/docs/ko/installation/ai-apps/cursor.md +0 -77
  170. package/docs/ko/installation/ai-apps/gemini-cli.md +0 -120
  171. package/docs/ko/installation/roblox-explorer.md +0 -68
  172. package/docs/ko/installation/roblox-plugin.md +0 -96
  173. package/docs/ko/pro-upgrade.md +0 -96
  174. package/docs/ko/sync/luau-lsp.md +0 -41
  175. package/docs/ko/sync/overview.md +0 -153
  176. package/docs/ko/tools/assets-and-effects.md +0 -104
  177. package/docs/ko/tools/instances-and-properties.md +0 -104
  178. package/docs/ko/tools/overview.md +0 -277
  179. package/docs/ko/tools/playtest.md +0 -134
  180. package/docs/ko/tools/scripting.md +0 -66
  181. package/docs/ko/tools/system-and-debugging.md +0 -93
  182. package/docs/ko/tools/world-and-environment.md +0 -102
  183. package/docs/pt-br/README.md +0 -209
  184. package/docs/pt-br/dashboard/changelog.md +0 -114
  185. package/docs/pt-br/dashboard/connection.md +0 -77
  186. package/docs/pt-br/dashboard/overview.md +0 -95
  187. package/docs/pt-br/dashboard/playtest.md +0 -61
  188. package/docs/pt-br/dashboard/settings.md +0 -60
  189. package/docs/pt-br/dashboard/sync.md +0 -68
  190. package/docs/pt-br/dashboard/tools.md +0 -69
  191. package/docs/pt-br/explorer/overview.md +0 -104
  192. package/docs/pt-br/installation/README.md +0 -93
  193. package/docs/pt-br/installation/ai-apps/antigravity.md +0 -89
  194. package/docs/pt-br/installation/ai-apps/claude-app.md +0 -78
  195. package/docs/pt-br/installation/ai-apps/claude-code.md +0 -104
  196. package/docs/pt-br/installation/ai-apps/codex-app.md +0 -56
  197. package/docs/pt-br/installation/ai-apps/codex-cli.md +0 -67
  198. package/docs/pt-br/installation/ai-apps/cursor.md +0 -77
  199. package/docs/pt-br/installation/ai-apps/gemini-cli.md +0 -120
  200. package/docs/pt-br/installation/roblox-explorer.md +0 -58
  201. package/docs/pt-br/installation/roblox-plugin.md +0 -85
  202. package/docs/pt-br/pro-upgrade.md +0 -96
  203. package/docs/pt-br/sync/luau-lsp.md +0 -41
  204. package/docs/pt-br/sync/overview.md +0 -153
  205. package/docs/pt-br/tools/assets-and-effects.md +0 -104
  206. package/docs/pt-br/tools/instances-and-properties.md +0 -104
  207. package/docs/pt-br/tools/overview.md +0 -277
  208. package/docs/pt-br/tools/playtest.md +0 -140
  209. package/docs/pt-br/tools/scripting.md +0 -66
  210. package/docs/pt-br/tools/system-and-debugging.md +0 -93
  211. package/docs/pt-br/tools/world-and-environment.md +0 -102
  212. package/docs/troubleshooting.md +0 -47
  213. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/SettingsPage-D2ZBQ2KF.js +0 -1
  214. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/TierComparison-BwKqP_4s.js +0 -1
  215. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/WhatsNewPage-23o8LmsR.js +0 -1
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OverviewPage-CXsGuoPu.js","assets/InfoLabel-DrK7vhO-.js","assets/StatusBadge-hJyzgRAl.js","assets/StatusBadge-C2zYt5iE.css","assets/PropertyDiff-Dy3MffNh.js","assets/PropertyDiff-Cbx8P1zh.css","assets/TierComparison-BwKqP_4s.js","assets/TierComparison-DGh9vLz0.css","assets/useLiveUptime-BeRNzFBh.js","assets/TierPromoProgress-CLAr1gQq.js","assets/TierPromo.module-CAoUYgIx.js","assets/TierPromo-D5n9OoEm.css","assets/OverviewPage-Dsfl-NRT.css","assets/ConnectionPage-LSvSX1_u.js","assets/ConfirmModal-DfdyAPrJ.js","assets/ConnectionPage-9bG71eB1.css","assets/SyncPage-eX2Rh-Ct.js","assets/SyncPage-CLt9jxd8.css","assets/ChangelogPage-Dgl8dBt6.js","assets/ChangelogPage-BH87M2hn.css","assets/PlaytestPage-CgkzRAqQ.js","assets/PlaytestPage-CYSu0pfO.css","assets/ToolsPage-CqzfCxxH.js","assets/ToolsPage-54vIMfZg.css","assets/WhatsNewPage-23o8LmsR.js","assets/WhatsNewPage-Lxgj0StO.css","assets/ChangelogDetailPage-DRfFUIvC.js","assets/ChangelogDetailPage-D6Tqz7ut.css","assets/SettingsPage-D2ZBQ2KF.js","assets/SettingsPage-DTv0NbEY.css"])))=>i.map(i=>d[i]);
2
- var dg=Object.defineProperty;var pg=(a,i,s)=>i in a?dg(a,i,{enumerable:!0,configurable:!0,writable:!0,value:s}):a[i]=s;var Co=(a,i,s)=>pg(a,typeof i!="symbol"?i+"":i,s);function Gd(a,i){for(var s=0;s<i.length;s++){const c=i[s];if(typeof c!="string"&&!Array.isArray(c)){for(const d in c)if(d!=="default"&&!(d in a)){const p=Object.getOwnPropertyDescriptor(c,d);p&&Object.defineProperty(a,d,p.get?p:{enumerable:!0,get:()=>c[d]})}}}return Object.freeze(Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}))}(function(){const i=document.createElement("link").relList;if(i&&i.supports&&i.supports("modulepreload"))return;for(const d of document.querySelectorAll('link[rel="modulepreload"]'))c(d);new MutationObserver(d=>{for(const p of d)if(p.type==="childList")for(const f of p.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&c(f)}).observe(document,{childList:!0,subtree:!0});function s(d){const p={};return d.integrity&&(p.integrity=d.integrity),d.referrerPolicy&&(p.referrerPolicy=d.referrerPolicy),d.crossOrigin==="use-credentials"?p.credentials="include":d.crossOrigin==="anonymous"?p.credentials="omit":p.credentials="same-origin",p}function c(d){if(d.ep)return;d.ep=!0;const p=s(d);fetch(d.href,p)}})();function Jd(a){return a&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a}var cl={exports:{}},Ga={},ul={exports:{}},Se={};/**
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OverviewPage-BHd6yL_8.js","assets/InfoLabel-BRbbxjjt.js","assets/StatusBadge-A72TDL-q.js","assets/StatusBadge-C2zYt5iE.css","assets/PropertyDiff-BKVe7m6g.js","assets/PropertyDiff-Cbx8P1zh.css","assets/TierComparison-CQewH4h_.js","assets/TierComparison-DGh9vLz0.css","assets/useLiveUptime-CRLLCM8t.js","assets/TierPromoProgress-DolZjAqX.js","assets/TierPromo.module-CAoUYgIx.js","assets/TierPromo-D5n9OoEm.css","assets/OverviewPage-Dsfl-NRT.css","assets/ConnectionPage-BeJEgfmf.js","assets/ConfirmModal-BSTYLn14.js","assets/ConnectionPage-9bG71eB1.css","assets/SyncPage-R4Qs9Xt3.js","assets/SyncPage-CLt9jxd8.css","assets/ChangelogPage-CPm4ft8m.js","assets/ChangelogPage-BH87M2hn.css","assets/PlaytestPage-BiNJCh4I.js","assets/PlaytestPage-CYSu0pfO.css","assets/ToolsPage-DRX93nSV.js","assets/ToolsPage-54vIMfZg.css","assets/WhatsNewPage-uLdiNHd0.js","assets/WhatsNewPage-Lxgj0StO.css","assets/ChangelogDetailPage-C-ROvHGr.js","assets/ChangelogDetailPage-D6Tqz7ut.css","assets/SettingsPage-Cg33y021.js","assets/SettingsPage-DTv0NbEY.css"])))=>i.map(i=>d[i]);
2
+ var df=Object.defineProperty;var pf=(a,i,s)=>i in a?df(a,i,{enumerable:!0,configurable:!0,writable:!0,value:s}):a[i]=s;var Rn=(a,i,s)=>pf(a,typeof i!="symbol"?i+"":i,s);function Qd(a,i){for(var s=0;s<i.length;s++){const c=i[s];if(typeof c!="string"&&!Array.isArray(c)){for(const d in c)if(d!=="default"&&!(d in a)){const p=Object.getOwnPropertyDescriptor(c,d);p&&Object.defineProperty(a,d,p.get?p:{enumerable:!0,get:()=>c[d]})}}}return Object.freeze(Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}))}(function(){const i=document.createElement("link").relList;if(i&&i.supports&&i.supports("modulepreload"))return;for(const d of document.querySelectorAll('link[rel="modulepreload"]'))c(d);new MutationObserver(d=>{for(const p of d)if(p.type==="childList")for(const g of p.addedNodes)g.tagName==="LINK"&&g.rel==="modulepreload"&&c(g)}).observe(document,{childList:!0,subtree:!0});function s(d){const p={};return d.integrity&&(p.integrity=d.integrity),d.referrerPolicy&&(p.referrerPolicy=d.referrerPolicy),d.crossOrigin==="use-credentials"?p.credentials="include":d.crossOrigin==="anonymous"?p.credentials="omit":p.credentials="same-origin",p}function c(d){if(d.ep)return;d.ep=!0;const p=s(d);fetch(d.href,p)}})();function Jd(a){return a&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a}var cl={exports:{}},Qa={},ul={exports:{}},ke={};/**
3
3
  * @license React
4
4
  * react.production.min.js
5
5
  *
@@ -7,7 +7,7 @@ var dg=Object.defineProperty;var pg=(a,i,s)=>i in a?dg(a,i,{enumerable:!0,config
7
7
  *
8
8
  * This source code is licensed under the MIT license found in the
9
9
  * LICENSE file in the root directory of this source tree.
10
- */var cd;function fg(){if(cd)return Se;cd=1;var a=Symbol.for("react.element"),i=Symbol.for("react.portal"),s=Symbol.for("react.fragment"),c=Symbol.for("react.strict_mode"),d=Symbol.for("react.profiler"),p=Symbol.for("react.provider"),f=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),P=Symbol.for("react.memo"),x=Symbol.for("react.lazy"),C=Symbol.iterator;function M(k){return k===null||typeof k!="object"?null:(k=C&&k[C]||k["@@iterator"],typeof k=="function"?k:null)}var O={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},H=Object.assign,F={};function U(k,N,de){this.props=k,this.context=N,this.refs=F,this.updater=de||O}U.prototype.isReactComponent={},U.prototype.setState=function(k,N){if(typeof k!="object"&&typeof k!="function"&&k!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,k,N,"setState")},U.prototype.forceUpdate=function(k){this.updater.enqueueForceUpdate(this,k,"forceUpdate")};function ge(){}ge.prototype=U.prototype;function q(k,N,de){this.props=k,this.context=N,this.refs=F,this.updater=de||O}var ue=q.prototype=new ge;ue.constructor=q,H(ue,U.prototype),ue.isPureReactComponent=!0;var re=Array.isArray,xe=Object.prototype.hasOwnProperty,Ee={current:null},E={key:!0,ref:!0,__self:!0,__source:!0};function J(k,N,de){var ye,me={},Pe=null,Re=null;if(N!=null)for(ye in N.ref!==void 0&&(Re=N.ref),N.key!==void 0&&(Pe=""+N.key),N)xe.call(N,ye)&&!E.hasOwnProperty(ye)&&(me[ye]=N[ye]);var we=arguments.length-2;if(we===1)me.children=de;else if(1<we){for(var Ue=Array(we),ct=0;ct<we;ct++)Ue[ct]=arguments[ct+2];me.children=Ue}if(k&&k.defaultProps)for(ye in we=k.defaultProps,we)me[ye]===void 0&&(me[ye]=we[ye]);return{$$typeof:a,type:k,key:Pe,ref:Re,props:me,_owner:Ee.current}}function ke(k,N){return{$$typeof:a,type:k.type,key:N,ref:k.ref,props:k.props,_owner:k._owner}}function ie(k){return typeof k=="object"&&k!==null&&k.$$typeof===a}function We(k){var N={"=":"=0",":":"=2"};return"$"+k.replace(/[=:]/g,function(de){return N[de]})}var Te=/\/+/g;function ze(k,N){return typeof k=="object"&&k!==null&&k.key!=null?We(""+k.key):N.toString(36)}function he(k,N,de,ye,me){var Pe=typeof k;(Pe==="undefined"||Pe==="boolean")&&(k=null);var Re=!1;if(k===null)Re=!0;else switch(Pe){case"string":case"number":Re=!0;break;case"object":switch(k.$$typeof){case a:case i:Re=!0}}if(Re)return Re=k,me=me(Re),k=ye===""?"."+ze(Re,0):ye,re(me)?(de="",k!=null&&(de=k.replace(Te,"$&/")+"/"),he(me,N,de,"",function(ct){return ct})):me!=null&&(ie(me)&&(me=ke(me,de+(!me.key||Re&&Re.key===me.key?"":(""+me.key).replace(Te,"$&/")+"/")+k)),N.push(me)),1;if(Re=0,ye=ye===""?".":ye+":",re(k))for(var we=0;we<k.length;we++){Pe=k[we];var Ue=ye+ze(Pe,we);Re+=he(Pe,N,de,Ue,me)}else if(Ue=M(k),typeof Ue=="function")for(k=Ue.call(k),we=0;!(Pe=k.next()).done;)Pe=Pe.value,Ue=ye+ze(Pe,we++),Re+=he(Pe,N,de,Ue,me);else if(Pe==="object")throw N=String(k),Error("Objects are not valid as a React child (found: "+(N==="[object Object]"?"object with keys {"+Object.keys(k).join(", ")+"}":N)+"). If you meant to render a collection of children, use an array instead.");return Re}function Ze(k,N,de){if(k==null)return k;var ye=[],me=0;return he(k,ye,"","",function(Pe){return N.call(de,Pe,me++)}),ye}function et(k){if(k._status===-1){var N=k._result;N=N(),N.then(function(de){(k._status===0||k._status===-1)&&(k._status=1,k._result=de)},function(de){(k._status===0||k._status===-1)&&(k._status=2,k._result=de)}),k._status===-1&&(k._status=0,k._result=N)}if(k._status===1)return k._result.default;throw k._result}var Ie={current:null},B={transition:null},ae={ReactCurrentDispatcher:Ie,ReactCurrentBatchConfig:B,ReactCurrentOwner:Ee};function Y(){throw Error("act(...) is not supported in production builds of React.")}return Se.Children={map:Ze,forEach:function(k,N,de){Ze(k,function(){N.apply(this,arguments)},de)},count:function(k){var N=0;return Ze(k,function(){N++}),N},toArray:function(k){return Ze(k,function(N){return N})||[]},only:function(k){if(!ie(k))throw Error("React.Children.only expected to receive a single React element child.");return k}},Se.Component=U,Se.Fragment=s,Se.Profiler=d,Se.PureComponent=q,Se.StrictMode=c,Se.Suspense=h,Se.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=ae,Se.act=Y,Se.cloneElement=function(k,N,de){if(k==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+k+".");var ye=H({},k.props),me=k.key,Pe=k.ref,Re=k._owner;if(N!=null){if(N.ref!==void 0&&(Pe=N.ref,Re=Ee.current),N.key!==void 0&&(me=""+N.key),k.type&&k.type.defaultProps)var we=k.type.defaultProps;for(Ue in N)xe.call(N,Ue)&&!E.hasOwnProperty(Ue)&&(ye[Ue]=N[Ue]===void 0&&we!==void 0?we[Ue]:N[Ue])}var Ue=arguments.length-2;if(Ue===1)ye.children=de;else if(1<Ue){we=Array(Ue);for(var ct=0;ct<Ue;ct++)we[ct]=arguments[ct+2];ye.children=we}return{$$typeof:a,type:k.type,key:me,ref:Pe,props:ye,_owner:Re}},Se.createContext=function(k){return k={$$typeof:f,_currentValue:k,_currentValue2:k,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},k.Provider={$$typeof:p,_context:k},k.Consumer=k},Se.createElement=J,Se.createFactory=function(k){var N=J.bind(null,k);return N.type=k,N},Se.createRef=function(){return{current:null}},Se.forwardRef=function(k){return{$$typeof:m,render:k}},Se.isValidElement=ie,Se.lazy=function(k){return{$$typeof:x,_payload:{_status:-1,_result:k},_init:et}},Se.memo=function(k,N){return{$$typeof:P,type:k,compare:N===void 0?null:N}},Se.startTransition=function(k){var N=B.transition;B.transition={};try{k()}finally{B.transition=N}},Se.unstable_act=Y,Se.useCallback=function(k,N){return Ie.current.useCallback(k,N)},Se.useContext=function(k){return Ie.current.useContext(k)},Se.useDebugValue=function(){},Se.useDeferredValue=function(k){return Ie.current.useDeferredValue(k)},Se.useEffect=function(k,N){return Ie.current.useEffect(k,N)},Se.useId=function(){return Ie.current.useId()},Se.useImperativeHandle=function(k,N,de){return Ie.current.useImperativeHandle(k,N,de)},Se.useInsertionEffect=function(k,N){return Ie.current.useInsertionEffect(k,N)},Se.useLayoutEffect=function(k,N){return Ie.current.useLayoutEffect(k,N)},Se.useMemo=function(k,N){return Ie.current.useMemo(k,N)},Se.useReducer=function(k,N,de){return Ie.current.useReducer(k,N,de)},Se.useRef=function(k){return Ie.current.useRef(k)},Se.useState=function(k){return Ie.current.useState(k)},Se.useSyncExternalStore=function(k,N,de){return Ie.current.useSyncExternalStore(k,N,de)},Se.useTransition=function(){return Ie.current.useTransition()},Se.version="18.3.1",Se}var ud;function El(){return ud||(ud=1,ul.exports=fg()),ul.exports}/**
10
+ */var cd;function gf(){if(cd)return ke;cd=1;var a=Symbol.for("react.element"),i=Symbol.for("react.portal"),s=Symbol.for("react.fragment"),c=Symbol.for("react.strict_mode"),d=Symbol.for("react.profiler"),p=Symbol.for("react.provider"),g=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),P=Symbol.for("react.memo"),x=Symbol.for("react.lazy"),R=Symbol.iterator;function A(S){return S===null||typeof S!="object"?null:(S=R&&S[R]||S["@@iterator"],typeof S=="function"?S:null)}var O={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},V=Object.assign,B={};function U(S,M,de){this.props=S,this.context=M,this.refs=B,this.updater=de||O}U.prototype.isReactComponent={},U.prototype.setState=function(S,M){if(typeof S!="object"&&typeof S!="function"&&S!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,S,M,"setState")},U.prototype.forceUpdate=function(S){this.updater.enqueueForceUpdate(this,S,"forceUpdate")};function fe(){}fe.prototype=U.prototype;function q(S,M,de){this.props=S,this.context=M,this.refs=B,this.updater=de||O}var ue=q.prototype=new fe;ue.constructor=q,V(ue,U.prototype),ue.isPureReactComponent=!0;var re=Array.isArray,xe=Object.prototype.hasOwnProperty,je={current:null},j={key:!0,ref:!0,__self:!0,__source:!0};function J(S,M,de){var ye,me={},Pe=null,Ce=null;if(M!=null)for(ye in M.ref!==void 0&&(Ce=M.ref),M.key!==void 0&&(Pe=""+M.key),M)xe.call(M,ye)&&!j.hasOwnProperty(ye)&&(me[ye]=M[ye]);var we=arguments.length-2;if(we===1)me.children=de;else if(1<we){for(var Ue=Array(we),ct=0;ct<we;ct++)Ue[ct]=arguments[ct+2];me.children=Ue}if(S&&S.defaultProps)for(ye in we=S.defaultProps,we)me[ye]===void 0&&(me[ye]=we[ye]);return{$$typeof:a,type:S,key:Pe,ref:Ce,props:me,_owner:je.current}}function Se(S,M){return{$$typeof:a,type:S.type,key:M,ref:S.ref,props:S.props,_owner:S._owner}}function ie(S){return typeof S=="object"&&S!==null&&S.$$typeof===a}function Fe(S){var M={"=":"=0",":":"=2"};return"$"+S.replace(/[=:]/g,function(de){return M[de]})}var Te=/\/+/g;function De(S,M){return typeof S=="object"&&S!==null&&S.key!=null?Fe(""+S.key):M.toString(36)}function he(S,M,de,ye,me){var Pe=typeof S;(Pe==="undefined"||Pe==="boolean")&&(S=null);var Ce=!1;if(S===null)Ce=!0;else switch(Pe){case"string":case"number":Ce=!0;break;case"object":switch(S.$$typeof){case a:case i:Ce=!0}}if(Ce)return Ce=S,me=me(Ce),S=ye===""?"."+De(Ce,0):ye,re(me)?(de="",S!=null&&(de=S.replace(Te,"$&/")+"/"),he(me,M,de,"",function(ct){return ct})):me!=null&&(ie(me)&&(me=Se(me,de+(!me.key||Ce&&Ce.key===me.key?"":(""+me.key).replace(Te,"$&/")+"/")+S)),M.push(me)),1;if(Ce=0,ye=ye===""?".":ye+":",re(S))for(var we=0;we<S.length;we++){Pe=S[we];var Ue=ye+De(Pe,we);Ce+=he(Pe,M,de,Ue,me)}else if(Ue=A(S),typeof Ue=="function")for(S=Ue.call(S),we=0;!(Pe=S.next()).done;)Pe=Pe.value,Ue=ye+De(Pe,we++),Ce+=he(Pe,M,de,Ue,me);else if(Pe==="object")throw M=String(S),Error("Objects are not valid as a React child (found: "+(M==="[object Object]"?"object with keys {"+Object.keys(S).join(", ")+"}":M)+"). If you meant to render a collection of children, use an array instead.");return Ce}function Xe(S,M,de){if(S==null)return S;var ye=[],me=0;return he(S,ye,"","",function(Pe){return M.call(de,Pe,me++)}),ye}function et(S){if(S._status===-1){var M=S._result;M=M(),M.then(function(de){(S._status===0||S._status===-1)&&(S._status=1,S._result=de)},function(de){(S._status===0||S._status===-1)&&(S._status=2,S._result=de)}),S._status===-1&&(S._status=0,S._result=M)}if(S._status===1)return S._result.default;throw S._result}var Ie={current:null},W={transition:null},ae={ReactCurrentDispatcher:Ie,ReactCurrentBatchConfig:W,ReactCurrentOwner:je};function Y(){throw Error("act(...) is not supported in production builds of React.")}return ke.Children={map:Xe,forEach:function(S,M,de){Xe(S,function(){M.apply(this,arguments)},de)},count:function(S){var M=0;return Xe(S,function(){M++}),M},toArray:function(S){return Xe(S,function(M){return M})||[]},only:function(S){if(!ie(S))throw Error("React.Children.only expected to receive a single React element child.");return S}},ke.Component=U,ke.Fragment=s,ke.Profiler=d,ke.PureComponent=q,ke.StrictMode=c,ke.Suspense=h,ke.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=ae,ke.act=Y,ke.cloneElement=function(S,M,de){if(S==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+S+".");var ye=V({},S.props),me=S.key,Pe=S.ref,Ce=S._owner;if(M!=null){if(M.ref!==void 0&&(Pe=M.ref,Ce=je.current),M.key!==void 0&&(me=""+M.key),S.type&&S.type.defaultProps)var we=S.type.defaultProps;for(Ue in M)xe.call(M,Ue)&&!j.hasOwnProperty(Ue)&&(ye[Ue]=M[Ue]===void 0&&we!==void 0?we[Ue]:M[Ue])}var Ue=arguments.length-2;if(Ue===1)ye.children=de;else if(1<Ue){we=Array(Ue);for(var ct=0;ct<Ue;ct++)we[ct]=arguments[ct+2];ye.children=we}return{$$typeof:a,type:S.type,key:me,ref:Pe,props:ye,_owner:Ce}},ke.createContext=function(S){return S={$$typeof:g,_currentValue:S,_currentValue2:S,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},S.Provider={$$typeof:p,_context:S},S.Consumer=S},ke.createElement=J,ke.createFactory=function(S){var M=J.bind(null,S);return M.type=S,M},ke.createRef=function(){return{current:null}},ke.forwardRef=function(S){return{$$typeof:m,render:S}},ke.isValidElement=ie,ke.lazy=function(S){return{$$typeof:x,_payload:{_status:-1,_result:S},_init:et}},ke.memo=function(S,M){return{$$typeof:P,type:S,compare:M===void 0?null:M}},ke.startTransition=function(S){var M=W.transition;W.transition={};try{S()}finally{W.transition=M}},ke.unstable_act=Y,ke.useCallback=function(S,M){return Ie.current.useCallback(S,M)},ke.useContext=function(S){return Ie.current.useContext(S)},ke.useDebugValue=function(){},ke.useDeferredValue=function(S){return Ie.current.useDeferredValue(S)},ke.useEffect=function(S,M){return Ie.current.useEffect(S,M)},ke.useId=function(){return Ie.current.useId()},ke.useImperativeHandle=function(S,M,de){return Ie.current.useImperativeHandle(S,M,de)},ke.useInsertionEffect=function(S,M){return Ie.current.useInsertionEffect(S,M)},ke.useLayoutEffect=function(S,M){return Ie.current.useLayoutEffect(S,M)},ke.useMemo=function(S,M){return Ie.current.useMemo(S,M)},ke.useReducer=function(S,M,de){return Ie.current.useReducer(S,M,de)},ke.useRef=function(S){return Ie.current.useRef(S)},ke.useState=function(S){return Ie.current.useState(S)},ke.useSyncExternalStore=function(S,M,de){return Ie.current.useSyncExternalStore(S,M,de)},ke.useTransition=function(){return Ie.current.useTransition()},ke.version="18.3.1",ke}var ud;function jl(){return ud||(ud=1,ul.exports=gf()),ul.exports}/**
11
11
  * @license React
12
12
  * react-jsx-runtime.production.min.js
13
13
  *
@@ -15,7 +15,7 @@ var dg=Object.defineProperty;var pg=(a,i,s)=>i in a?dg(a,i,{enumerable:!0,config
15
15
  *
16
16
  * This source code is licensed under the MIT license found in the
17
17
  * LICENSE file in the root directory of this source tree.
18
- */var dd;function gg(){if(dd)return Ga;dd=1;var a=El(),i=Symbol.for("react.element"),s=Symbol.for("react.fragment"),c=Object.prototype.hasOwnProperty,d=a.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};function f(m,h,P){var x,C={},M=null,O=null;P!==void 0&&(M=""+P),h.key!==void 0&&(M=""+h.key),h.ref!==void 0&&(O=h.ref);for(x in h)c.call(h,x)&&!p.hasOwnProperty(x)&&(C[x]=h[x]);if(m&&m.defaultProps)for(x in h=m.defaultProps,h)C[x]===void 0&&(C[x]=h[x]);return{$$typeof:i,type:m,key:M,ref:O,props:C,_owner:d.current}}return Ga.Fragment=s,Ga.jsx=f,Ga.jsxs=f,Ga}var pd;function hg(){return pd||(pd=1,cl.exports=gg()),cl.exports}var L=hg(),hi={},dl={exports:{}},Et={},pl={exports:{}},fl={};/**
18
+ */var dd;function ff(){if(dd)return Qa;dd=1;var a=jl(),i=Symbol.for("react.element"),s=Symbol.for("react.fragment"),c=Object.prototype.hasOwnProperty,d=a.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};function g(m,h,P){var x,R={},A=null,O=null;P!==void 0&&(A=""+P),h.key!==void 0&&(A=""+h.key),h.ref!==void 0&&(O=h.ref);for(x in h)c.call(h,x)&&!p.hasOwnProperty(x)&&(R[x]=h[x]);if(m&&m.defaultProps)for(x in h=m.defaultProps,h)R[x]===void 0&&(R[x]=h[x]);return{$$typeof:i,type:m,key:A,ref:O,props:R,_owner:d.current}}return Qa.Fragment=s,Qa.jsx=g,Qa.jsxs=g,Qa}var pd;function hf(){return pd||(pd=1,cl.exports=ff()),cl.exports}var N=hf(),hi={},dl={exports:{}},jt={},pl={exports:{}},gl={};/**
19
19
  * @license React
20
20
  * scheduler.production.min.js
21
21
  *
@@ -23,7 +23,7 @@ var dg=Object.defineProperty;var pg=(a,i,s)=>i in a?dg(a,i,{enumerable:!0,config
23
23
  *
24
24
  * This source code is licensed under the MIT license found in the
25
25
  * LICENSE file in the root directory of this source tree.
26
- */var fd;function mg(){return fd||(fd=1,(function(a){function i(B,ae){var Y=B.length;B.push(ae);e:for(;0<Y;){var k=Y-1>>>1,N=B[k];if(0<d(N,ae))B[k]=ae,B[Y]=N,Y=k;else break e}}function s(B){return B.length===0?null:B[0]}function c(B){if(B.length===0)return null;var ae=B[0],Y=B.pop();if(Y!==ae){B[0]=Y;e:for(var k=0,N=B.length,de=N>>>1;k<de;){var ye=2*(k+1)-1,me=B[ye],Pe=ye+1,Re=B[Pe];if(0>d(me,Y))Pe<N&&0>d(Re,me)?(B[k]=Re,B[Pe]=Y,k=Pe):(B[k]=me,B[ye]=Y,k=ye);else if(Pe<N&&0>d(Re,Y))B[k]=Re,B[Pe]=Y,k=Pe;else break e}}return ae}function d(B,ae){var Y=B.sortIndex-ae.sortIndex;return Y!==0?Y:B.id-ae.id}if(typeof performance=="object"&&typeof performance.now=="function"){var p=performance;a.unstable_now=function(){return p.now()}}else{var f=Date,m=f.now();a.unstable_now=function(){return f.now()-m}}var h=[],P=[],x=1,C=null,M=3,O=!1,H=!1,F=!1,U=typeof setTimeout=="function"?setTimeout:null,ge=typeof clearTimeout=="function"?clearTimeout:null,q=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function ue(B){for(var ae=s(P);ae!==null;){if(ae.callback===null)c(P);else if(ae.startTime<=B)c(P),ae.sortIndex=ae.expirationTime,i(h,ae);else break;ae=s(P)}}function re(B){if(F=!1,ue(B),!H)if(s(h)!==null)H=!0,et(xe);else{var ae=s(P);ae!==null&&Ie(re,ae.startTime-B)}}function xe(B,ae){H=!1,F&&(F=!1,ge(J),J=-1),O=!0;var Y=M;try{for(ue(ae),C=s(h);C!==null&&(!(C.expirationTime>ae)||B&&!We());){var k=C.callback;if(typeof k=="function"){C.callback=null,M=C.priorityLevel;var N=k(C.expirationTime<=ae);ae=a.unstable_now(),typeof N=="function"?C.callback=N:C===s(h)&&c(h),ue(ae)}else c(h);C=s(h)}if(C!==null)var de=!0;else{var ye=s(P);ye!==null&&Ie(re,ye.startTime-ae),de=!1}return de}finally{C=null,M=Y,O=!1}}var Ee=!1,E=null,J=-1,ke=5,ie=-1;function We(){return!(a.unstable_now()-ie<ke)}function Te(){if(E!==null){var B=a.unstable_now();ie=B;var ae=!0;try{ae=E(!0,B)}finally{ae?ze():(Ee=!1,E=null)}}else Ee=!1}var ze;if(typeof q=="function")ze=function(){q(Te)};else if(typeof MessageChannel<"u"){var he=new MessageChannel,Ze=he.port2;he.port1.onmessage=Te,ze=function(){Ze.postMessage(null)}}else ze=function(){U(Te,0)};function et(B){E=B,Ee||(Ee=!0,ze())}function Ie(B,ae){J=U(function(){B(a.unstable_now())},ae)}a.unstable_IdlePriority=5,a.unstable_ImmediatePriority=1,a.unstable_LowPriority=4,a.unstable_NormalPriority=3,a.unstable_Profiling=null,a.unstable_UserBlockingPriority=2,a.unstable_cancelCallback=function(B){B.callback=null},a.unstable_continueExecution=function(){H||O||(H=!0,et(xe))},a.unstable_forceFrameRate=function(B){0>B||125<B?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):ke=0<B?Math.floor(1e3/B):5},a.unstable_getCurrentPriorityLevel=function(){return M},a.unstable_getFirstCallbackNode=function(){return s(h)},a.unstable_next=function(B){switch(M){case 1:case 2:case 3:var ae=3;break;default:ae=M}var Y=M;M=ae;try{return B()}finally{M=Y}},a.unstable_pauseExecution=function(){},a.unstable_requestPaint=function(){},a.unstable_runWithPriority=function(B,ae){switch(B){case 1:case 2:case 3:case 4:case 5:break;default:B=3}var Y=M;M=B;try{return ae()}finally{M=Y}},a.unstable_scheduleCallback=function(B,ae,Y){var k=a.unstable_now();switch(typeof Y=="object"&&Y!==null?(Y=Y.delay,Y=typeof Y=="number"&&0<Y?k+Y:k):Y=k,B){case 1:var N=-1;break;case 2:N=250;break;case 5:N=1073741823;break;case 4:N=1e4;break;default:N=5e3}return N=Y+N,B={id:x++,callback:ae,priorityLevel:B,startTime:Y,expirationTime:N,sortIndex:-1},Y>k?(B.sortIndex=Y,i(P,B),s(h)===null&&B===s(P)&&(F?(ge(J),J=-1):F=!0,Ie(re,Y-k))):(B.sortIndex=N,i(h,B),H||O||(H=!0,et(xe))),B},a.unstable_shouldYield=We,a.unstable_wrapCallback=function(B){var ae=M;return function(){var Y=M;M=ae;try{return B.apply(this,arguments)}finally{M=Y}}}})(fl)),fl}var gd;function yg(){return gd||(gd=1,pl.exports=mg()),pl.exports}/**
26
+ */var gd;function mf(){return gd||(gd=1,(function(a){function i(W,ae){var Y=W.length;W.push(ae);e:for(;0<Y;){var S=Y-1>>>1,M=W[S];if(0<d(M,ae))W[S]=ae,W[Y]=M,Y=S;else break e}}function s(W){return W.length===0?null:W[0]}function c(W){if(W.length===0)return null;var ae=W[0],Y=W.pop();if(Y!==ae){W[0]=Y;e:for(var S=0,M=W.length,de=M>>>1;S<de;){var ye=2*(S+1)-1,me=W[ye],Pe=ye+1,Ce=W[Pe];if(0>d(me,Y))Pe<M&&0>d(Ce,me)?(W[S]=Ce,W[Pe]=Y,S=Pe):(W[S]=me,W[ye]=Y,S=ye);else if(Pe<M&&0>d(Ce,Y))W[S]=Ce,W[Pe]=Y,S=Pe;else break e}}return ae}function d(W,ae){var Y=W.sortIndex-ae.sortIndex;return Y!==0?Y:W.id-ae.id}if(typeof performance=="object"&&typeof performance.now=="function"){var p=performance;a.unstable_now=function(){return p.now()}}else{var g=Date,m=g.now();a.unstable_now=function(){return g.now()-m}}var h=[],P=[],x=1,R=null,A=3,O=!1,V=!1,B=!1,U=typeof setTimeout=="function"?setTimeout:null,fe=typeof clearTimeout=="function"?clearTimeout:null,q=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function ue(W){for(var ae=s(P);ae!==null;){if(ae.callback===null)c(P);else if(ae.startTime<=W)c(P),ae.sortIndex=ae.expirationTime,i(h,ae);else break;ae=s(P)}}function re(W){if(B=!1,ue(W),!V)if(s(h)!==null)V=!0,et(xe);else{var ae=s(P);ae!==null&&Ie(re,ae.startTime-W)}}function xe(W,ae){V=!1,B&&(B=!1,fe(J),J=-1),O=!0;var Y=A;try{for(ue(ae),R=s(h);R!==null&&(!(R.expirationTime>ae)||W&&!Fe());){var S=R.callback;if(typeof S=="function"){R.callback=null,A=R.priorityLevel;var M=S(R.expirationTime<=ae);ae=a.unstable_now(),typeof M=="function"?R.callback=M:R===s(h)&&c(h),ue(ae)}else c(h);R=s(h)}if(R!==null)var de=!0;else{var ye=s(P);ye!==null&&Ie(re,ye.startTime-ae),de=!1}return de}finally{R=null,A=Y,O=!1}}var je=!1,j=null,J=-1,Se=5,ie=-1;function Fe(){return!(a.unstable_now()-ie<Se)}function Te(){if(j!==null){var W=a.unstable_now();ie=W;var ae=!0;try{ae=j(!0,W)}finally{ae?De():(je=!1,j=null)}}else je=!1}var De;if(typeof q=="function")De=function(){q(Te)};else if(typeof MessageChannel<"u"){var he=new MessageChannel,Xe=he.port2;he.port1.onmessage=Te,De=function(){Xe.postMessage(null)}}else De=function(){U(Te,0)};function et(W){j=W,je||(je=!0,De())}function Ie(W,ae){J=U(function(){W(a.unstable_now())},ae)}a.unstable_IdlePriority=5,a.unstable_ImmediatePriority=1,a.unstable_LowPriority=4,a.unstable_NormalPriority=3,a.unstable_Profiling=null,a.unstable_UserBlockingPriority=2,a.unstable_cancelCallback=function(W){W.callback=null},a.unstable_continueExecution=function(){V||O||(V=!0,et(xe))},a.unstable_forceFrameRate=function(W){0>W||125<W?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):Se=0<W?Math.floor(1e3/W):5},a.unstable_getCurrentPriorityLevel=function(){return A},a.unstable_getFirstCallbackNode=function(){return s(h)},a.unstable_next=function(W){switch(A){case 1:case 2:case 3:var ae=3;break;default:ae=A}var Y=A;A=ae;try{return W()}finally{A=Y}},a.unstable_pauseExecution=function(){},a.unstable_requestPaint=function(){},a.unstable_runWithPriority=function(W,ae){switch(W){case 1:case 2:case 3:case 4:case 5:break;default:W=3}var Y=A;A=W;try{return ae()}finally{A=Y}},a.unstable_scheduleCallback=function(W,ae,Y){var S=a.unstable_now();switch(typeof Y=="object"&&Y!==null?(Y=Y.delay,Y=typeof Y=="number"&&0<Y?S+Y:S):Y=S,W){case 1:var M=-1;break;case 2:M=250;break;case 5:M=1073741823;break;case 4:M=1e4;break;default:M=5e3}return M=Y+M,W={id:x++,callback:ae,priorityLevel:W,startTime:Y,expirationTime:M,sortIndex:-1},Y>S?(W.sortIndex=Y,i(P,W),s(h)===null&&W===s(P)&&(B?(fe(J),J=-1):B=!0,Ie(re,Y-S))):(W.sortIndex=M,i(h,W),V||O||(V=!0,et(xe))),W},a.unstable_shouldYield=Fe,a.unstable_wrapCallback=function(W){var ae=A;return function(){var Y=A;A=ae;try{return W.apply(this,arguments)}finally{A=Y}}}})(gl)),gl}var fd;function yf(){return fd||(fd=1,pl.exports=mf()),pl.exports}/**
27
27
  * @license React
28
28
  * react-dom.production.min.js
29
29
  *
@@ -31,14 +31,14 @@ var dg=Object.defineProperty;var pg=(a,i,s)=>i in a?dg(a,i,{enumerable:!0,config
31
31
  *
32
32
  * This source code is licensed under the MIT license found in the
33
33
  * LICENSE file in the root directory of this source tree.
34
- */var hd;function vg(){if(hd)return Et;hd=1;var a=El(),i=yg();function s(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,o=1;o<arguments.length;o++)t+="&args[]="+encodeURIComponent(arguments[o]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var c=new Set,d={};function p(e,t){f(e,t),f(e+"Capture",t)}function f(e,t){for(d[e]=t,e=0;e<t.length;e++)c.add(t[e])}var m=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),h=Object.prototype.hasOwnProperty,P=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,x={},C={};function M(e){return h.call(C,e)?!0:h.call(x,e)?!1:P.test(e)?C[e]=!0:(x[e]=!0,!1)}function O(e,t,o,n){if(o!==null&&o.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return n?!1:o!==null?!o.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function H(e,t,o,n){if(t===null||typeof t>"u"||O(e,t,o,n))return!0;if(n)return!1;if(o!==null)switch(o.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function F(e,t,o,n,r,l,u){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=n,this.attributeNamespace=r,this.mustUseProperty=o,this.propertyName=e,this.type=t,this.sanitizeURL=l,this.removeEmptyString=u}var U={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){U[e]=new F(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];U[t]=new F(t,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){U[e]=new F(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){U[e]=new F(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){U[e]=new F(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){U[e]=new F(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){U[e]=new F(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){U[e]=new F(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){U[e]=new F(e,5,!1,e.toLowerCase(),null,!1,!1)});var ge=/[\-:]([a-z])/g;function q(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(ge,q);U[t]=new F(t,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(ge,q);U[t]=new F(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(ge,q);U[t]=new F(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){U[e]=new F(e,1,!1,e.toLowerCase(),null,!1,!1)}),U.xlinkHref=new F("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){U[e]=new F(e,1,!1,e.toLowerCase(),null,!0,!0)});function ue(e,t,o,n){var r=U.hasOwnProperty(t)?U[t]:null;(r!==null?r.type!==0:n||!(2<t.length)||t[0]!=="o"&&t[0]!=="O"||t[1]!=="n"&&t[1]!=="N")&&(H(t,o,r,n)&&(o=null),n||r===null?M(t)&&(o===null?e.removeAttribute(t):e.setAttribute(t,""+o)):r.mustUseProperty?e[r.propertyName]=o===null?r.type===3?!1:"":o:(t=r.attributeName,n=r.attributeNamespace,o===null?e.removeAttribute(t):(r=r.type,o=r===3||r===4&&o===!0?"":""+o,n?e.setAttributeNS(n,t,o):e.setAttribute(t,o))))}var re=a.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,xe=Symbol.for("react.element"),Ee=Symbol.for("react.portal"),E=Symbol.for("react.fragment"),J=Symbol.for("react.strict_mode"),ke=Symbol.for("react.profiler"),ie=Symbol.for("react.provider"),We=Symbol.for("react.context"),Te=Symbol.for("react.forward_ref"),ze=Symbol.for("react.suspense"),he=Symbol.for("react.suspense_list"),Ze=Symbol.for("react.memo"),et=Symbol.for("react.lazy"),Ie=Symbol.for("react.offscreen"),B=Symbol.iterator;function ae(e){return e===null||typeof e!="object"?null:(e=B&&e[B]||e["@@iterator"],typeof e=="function"?e:null)}var Y=Object.assign,k;function N(e){if(k===void 0)try{throw Error()}catch(o){var t=o.stack.trim().match(/\n( *(at )?)/);k=t&&t[1]||""}return`
35
- `+k+e}var de=!1;function ye(e,t){if(!e||de)return"";de=!0;var o=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(t,[])}catch(j){var n=j}Reflect.construct(e,[],t)}else{try{t.call()}catch(j){n=j}e.call(t.prototype)}else{try{throw Error()}catch(j){n=j}e()}}catch(j){if(j&&n&&typeof j.stack=="string"){for(var r=j.stack.split(`
36
- `),l=n.stack.split(`
37
- `),u=r.length-1,g=l.length-1;1<=u&&0<=g&&r[u]!==l[g];)g--;for(;1<=u&&0<=g;u--,g--)if(r[u]!==l[g]){if(u!==1||g!==1)do if(u--,g--,0>g||r[u]!==l[g]){var v=`
38
- `+r[u].replace(" at new "," at ");return e.displayName&&v.includes("<anonymous>")&&(v=v.replace("<anonymous>",e.displayName)),v}while(1<=u&&0<=g);break}}}finally{de=!1,Error.prepareStackTrace=o}return(e=e?e.displayName||e.name:"")?N(e):""}function me(e){switch(e.tag){case 5:return N(e.type);case 16:return N("Lazy");case 13:return N("Suspense");case 19:return N("SuspenseList");case 0:case 2:case 15:return e=ye(e.type,!1),e;case 11:return e=ye(e.type.render,!1),e;case 1:return e=ye(e.type,!0),e;default:return""}}function Pe(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case E:return"Fragment";case Ee:return"Portal";case ke:return"Profiler";case J:return"StrictMode";case ze:return"Suspense";case he:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case We:return(e.displayName||"Context")+".Consumer";case ie:return(e._context.displayName||"Context")+".Provider";case Te:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Ze:return t=e.displayName||null,t!==null?t:Pe(e.type)||"Memo";case et:t=e._payload,e=e._init;try{return Pe(e(t))}catch{}}return null}function Re(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Pe(t);case 8:return t===J?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function we(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Ue(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function ct(e){var t=Ue(e)?"checked":"value",o=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=""+e[t];if(!e.hasOwnProperty(t)&&typeof o<"u"&&typeof o.get=="function"&&typeof o.set=="function"){var r=o.get,l=o.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return r.call(this)},set:function(u){n=""+u,l.call(this,u)}}),Object.defineProperty(e,t,{enumerable:o.enumerable}),{getValue:function(){return n},setValue:function(u){n=""+u},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Mo(e){e._valueTracker||(e._valueTracker=ct(e))}function tt(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var o=t.getValue(),n="";return e&&(n=Ue(e)?e.checked?"true":"false":e.value),e=n,e!==o?(t.setValue(e),!0):!1}function Tt(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function No(e,t){var o=t.checked;return Y({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:o??e._wrapperState.initialChecked})}function Ln(e,t){var o=t.defaultValue==null?"":t.defaultValue,n=t.checked!=null?t.checked:t.defaultChecked;o=we(t.value!=null?t.value:o),e._wrapperState={initialChecked:n,initialValue:o,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Mt(e,t){t=t.checked,t!=null&&ue(e,"checked",t,!1)}function Lo(e,t){Mt(e,t);var o=we(t.value),n=t.type;if(o!=null)n==="number"?(o===0&&e.value===""||e.value!=o)&&(e.value=""+o):e.value!==""+o&&(e.value=""+o);else if(n==="submit"||n==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?fo(e,t.type,o):t.hasOwnProperty("defaultValue")&&fo(e,t.type,we(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function un(e,t,o){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var n=t.type;if(!(n!=="submit"&&n!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,o||t===e.value||(e.value=t),e.defaultValue=t}o=e.name,o!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,o!==""&&(e.name=o)}function fo(e,t,o){(t!=="number"||Tt(e.ownerDocument)!==e)&&(o==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+o&&(e.defaultValue=""+o))}var pe=Array.isArray;function Ge(e,t,o,n){if(e=e.options,t){t={};for(var r=0;r<o.length;r++)t["$"+o[r]]=!0;for(o=0;o<e.length;o++)r=t.hasOwnProperty("$"+e[o].value),e[o].selected!==r&&(e[o].selected=r),r&&n&&(e[o].defaultSelected=!0)}else{for(o=""+we(o),t=null,r=0;r<e.length;r++){if(e[r].value===o){e[r].selected=!0,n&&(e[r].defaultSelected=!0);return}t!==null||e[r].disabled||(t=e[r])}t!==null&&(t.selected=!0)}}function ft(e,t){if(t.dangerouslySetInnerHTML!=null)throw Error(s(91));return Y({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function An(e,t){var o=t.value;if(o==null){if(o=t.children,t=t.defaultValue,o!=null){if(t!=null)throw Error(s(92));if(pe(o)){if(1<o.length)throw Error(s(93));o=o[0]}t=o}t==null&&(t=""),o=t}e._wrapperState={initialValue:we(o)}}function to(e,t){var o=we(t.value),n=we(t.defaultValue);o!=null&&(o=""+o,o!==e.value&&(e.value=o),t.defaultValue==null&&e.defaultValue!==o&&(e.defaultValue=o)),n!=null&&(e.defaultValue=""+n)}function Ao(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}function da(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function dn(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?da(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var Nt,Ft=(function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,o,n,r){MSApp.execUnsafeLocalFunction(function(){return e(t,o,n,r)})}:e})(function(e,t){if(e.namespaceURI!=="http://www.w3.org/2000/svg"||"innerHTML"in e)e.innerHTML=t;else{for(Nt=Nt||document.createElement("div"),Nt.innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=Nt.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Do(e,t){if(t){var o=e.firstChild;if(o&&o===e.lastChild&&o.nodeType===3){o.nodeValue=t;return}}e.textContent=t}var oo={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Ei=["Webkit","ms","Moz","O"];Object.keys(oo).forEach(function(e){Ei.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),oo[t]=oo[e]})});function qt(e,t,o){return t==null||typeof t=="boolean"||t===""?"":o||typeof t!="number"||t===0||oo.hasOwnProperty(e)&&oo[e]?(""+t).trim():t+"px"}function pa(e,t){e=e.style;for(var o in t)if(t.hasOwnProperty(o)){var n=o.indexOf("--")===0,r=qt(o,t[o],n);o==="float"&&(o="cssFloat"),n?e.setProperty(o,r):e[o]=r}}var sr=Y({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Dn(e,t){if(t){if(sr[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(s(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(s(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(s(61))}if(t.style!=null&&typeof t.style!="object")throw Error(s(62))}}function fa(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var zn=null;function zo(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var In=null,no=null,ao=null;function lr(e){if(e=Da(e)){if(typeof In!="function")throw Error(s(280));var t=e.stateNode;t&&(t=Tr(t),In(e.stateNode,e.type,t))}}function ga(e){no?ao?ao.push(e):ao=[e]:no=e}function cr(){if(no){var e=no,t=ao;if(ao=no=null,lr(e),t)for(e=0;e<t.length;e++)lr(t[e])}}function ha(e,t){return e(t)}function pn(){}var Io=!1;function ur(e,t,o){if(Io)return e(t,o);Io=!0;try{return ha(e,t,o)}finally{Io=!1,(no!==null||ao!==null)&&(pn(),cr())}}function fn(e,t){var o=e.stateNode;if(o===null)return null;var n=Tr(o);if(n===null)return null;o=n[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(n=!n.disabled)||(e=e.type,n=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!n;break e;default:e=!1}if(e)return null;if(o&&typeof o!="function")throw Error(s(231,t,typeof o));return o}var y=!1;if(m)try{var S={};Object.defineProperty(S,"passive",{get:function(){y=!0}}),window.addEventListener("test",S,S),window.removeEventListener("test",S,S)}catch{y=!1}function _(e,t,o,n,r,l,u,g,v){var j=Array.prototype.slice.call(arguments,3);try{t.apply(o,j)}catch(z){this.onError(z)}}var A=!1,V=null,ne=!1,ce=null,X={onError:function(e){A=!0,V=e}};function ee(e,t,o,n,r,l,u,g,v){A=!1,V=null,_.apply(X,arguments)}function $(e,t,o,n,r,l,u,g,v){if(ee.apply(this,arguments),A){if(A){var j=V;A=!1,V=null}else throw Error(s(198));ne||(ne=!0,ce=j)}}function G(e){var t=e,o=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,(t.flags&4098)!==0&&(o=t.return),e=t.return;while(e)}return t.tag===3?o:null}function ve(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function Ce(e){if(G(e)!==e)throw Error(s(188))}function it(e){var t=e.alternate;if(!t){if(t=G(e),t===null)throw Error(s(188));return t!==e?null:e}for(var o=e,n=t;;){var r=o.return;if(r===null)break;var l=r.alternate;if(l===null){if(n=r.return,n!==null){o=n;continue}break}if(r.child===l.child){for(l=r.child;l;){if(l===o)return Ce(r),e;if(l===n)return Ce(r),t;l=l.sibling}throw Error(s(188))}if(o.return!==n.return)o=r,n=l;else{for(var u=!1,g=r.child;g;){if(g===o){u=!0,o=r,n=l;break}if(g===n){u=!0,n=r,o=l;break}g=g.sibling}if(!u){for(g=l.child;g;){if(g===o){u=!0,o=l,n=r;break}if(g===n){u=!0,n=l,o=r;break}g=g.sibling}if(!u)throw Error(s(189))}}if(o.alternate!==n)throw Error(s(190))}if(o.tag!==3)throw Error(s(188));return o.stateNode.current===o?e:t}function Oe(e){return e=it(e),e!==null?_e(e):null}function _e(e){if(e.tag===5||e.tag===6)return e;for(e=e.child;e!==null;){var t=_e(e);if(t!==null)return t;e=e.sibling}return null}var Ye=i.unstable_scheduleCallback,go=i.unstable_cancelCallback,gn=i.unstable_shouldYield,Kt=i.unstable_requestPaint,Le=i.unstable_now,ma=i.unstable_getCurrentPriorityLevel,ho=i.unstable_ImmediatePriority,ro=i.unstable_UserBlockingPriority,mo=i.unstable_NormalPriority,On=i.unstable_LowPriority,je=i.unstable_IdlePriority,He=null,gt=null;function hn(e){if(gt&&typeof gt.onCommitFiberRoot=="function")try{gt.onCommitFiberRoot(He,e,void 0,(e.current.flags&128)===128)}catch{}}var Ae=Math.clz32?Math.clz32:_i,Oo=Math.log,dr=Math.LN2;function _i(e){return e>>>=0,e===0?32:31-(Oo(e)/dr|0)|0}var pr=64,fr=4194304;function ya(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function gr(e,t){var o=e.pendingLanes;if(o===0)return 0;var n=0,r=e.suspendedLanes,l=e.pingedLanes,u=o&268435455;if(u!==0){var g=u&~r;g!==0?n=ya(g):(l&=u,l!==0&&(n=ya(l)))}else u=o&~r,u!==0?n=ya(u):l!==0&&(n=ya(l));if(n===0)return 0;if(t!==0&&t!==n&&(t&r)===0&&(r=n&-n,l=t&-t,r>=l||r===16&&(l&4194240)!==0))return t;if((n&4)!==0&&(n|=o&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=n;0<t;)o=31-Ae(t),r=1<<o,n|=e[o],t&=~r;return n}function _p(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Tp(e,t){for(var o=e.suspendedLanes,n=e.pingedLanes,r=e.expirationTimes,l=e.pendingLanes;0<l;){var u=31-Ae(l),g=1<<u,v=r[u];v===-1?((g&o)===0||(g&n)!==0)&&(r[u]=_p(g,t)):v<=t&&(e.expiredLanes|=g),l&=~g}}function Ti(e){return e=e.pendingLanes&-1073741825,e!==0?e:e&1073741824?1073741824:0}function Bl(){var e=pr;return pr<<=1,(pr&4194240)===0&&(pr=64),e}function Mi(e){for(var t=[],o=0;31>o;o++)t.push(e);return t}function va(e,t,o){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Ae(t),e[t]=o}function Mp(e,t){var o=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0<o;){var r=31-Ae(o),l=1<<r;t[r]=0,n[r]=-1,e[r]=-1,o&=~l}}function Ni(e,t){var o=e.entangledLanes|=t;for(e=e.entanglements;o;){var n=31-Ae(o),r=1<<n;r&t|e[n]&t&&(e[n]|=t),o&=~r}}var Fe=0;function Wl(e){return e&=-e,1<e?4<e?(e&268435455)!==0?16:536870912:4:1}var Ul,Li,Hl,Vl,Yl,Ai=!1,hr=[],Fo=null,Bo=null,Wo=null,Pa=new Map,wa=new Map,Uo=[],Np="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function ql(e,t){switch(e){case"focusin":case"focusout":Fo=null;break;case"dragenter":case"dragleave":Bo=null;break;case"mouseover":case"mouseout":Wo=null;break;case"pointerover":case"pointerout":Pa.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":wa.delete(t.pointerId)}}function ka(e,t,o,n,r,l){return e===null||e.nativeEvent!==l?(e={blockedOn:t,domEventName:o,eventSystemFlags:n,nativeEvent:l,targetContainers:[r]},t!==null&&(t=Da(t),t!==null&&Li(t)),e):(e.eventSystemFlags|=n,t=e.targetContainers,r!==null&&t.indexOf(r)===-1&&t.push(r),e)}function Lp(e,t,o,n,r){switch(t){case"focusin":return Fo=ka(Fo,e,t,o,n,r),!0;case"dragenter":return Bo=ka(Bo,e,t,o,n,r),!0;case"mouseover":return Wo=ka(Wo,e,t,o,n,r),!0;case"pointerover":var l=r.pointerId;return Pa.set(l,ka(Pa.get(l)||null,e,t,o,n,r)),!0;case"gotpointercapture":return l=r.pointerId,wa.set(l,ka(wa.get(l)||null,e,t,o,n,r)),!0}return!1}function Kl(e){var t=mn(e.target);if(t!==null){var o=G(t);if(o!==null){if(t=o.tag,t===13){if(t=ve(o),t!==null){e.blockedOn=t,Yl(e.priority,function(){Hl(o)});return}}else if(t===3&&o.stateNode.current.memoizedState.isDehydrated){e.blockedOn=o.tag===3?o.stateNode.containerInfo:null;return}}}e.blockedOn=null}function mr(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var o=zi(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(o===null){o=e.nativeEvent;var n=new o.constructor(o.type,o);zn=n,o.target.dispatchEvent(n),zn=null}else return t=Da(o),t!==null&&Li(t),e.blockedOn=o,!1;t.shift()}return!0}function $l(e,t,o){mr(e)&&o.delete(t)}function Ap(){Ai=!1,Fo!==null&&mr(Fo)&&(Fo=null),Bo!==null&&mr(Bo)&&(Bo=null),Wo!==null&&mr(Wo)&&(Wo=null),Pa.forEach($l),wa.forEach($l)}function Sa(e,t){e.blockedOn===t&&(e.blockedOn=null,Ai||(Ai=!0,i.unstable_scheduleCallback(i.unstable_NormalPriority,Ap)))}function ba(e){function t(r){return Sa(r,e)}if(0<hr.length){Sa(hr[0],e);for(var o=1;o<hr.length;o++){var n=hr[o];n.blockedOn===e&&(n.blockedOn=null)}}for(Fo!==null&&Sa(Fo,e),Bo!==null&&Sa(Bo,e),Wo!==null&&Sa(Wo,e),Pa.forEach(t),wa.forEach(t),o=0;o<Uo.length;o++)n=Uo[o],n.blockedOn===e&&(n.blockedOn=null);for(;0<Uo.length&&(o=Uo[0],o.blockedOn===null);)Kl(o),o.blockedOn===null&&Uo.shift()}var Fn=re.ReactCurrentBatchConfig,yr=!0;function Dp(e,t,o,n){var r=Fe,l=Fn.transition;Fn.transition=null;try{Fe=1,Di(e,t,o,n)}finally{Fe=r,Fn.transition=l}}function zp(e,t,o,n){var r=Fe,l=Fn.transition;Fn.transition=null;try{Fe=4,Di(e,t,o,n)}finally{Fe=r,Fn.transition=l}}function Di(e,t,o,n){if(yr){var r=zi(e,t,o,n);if(r===null)Zi(e,t,n,vr,o),ql(e,n);else if(Lp(r,e,t,o,n))n.stopPropagation();else if(ql(e,n),t&4&&-1<Np.indexOf(e)){for(;r!==null;){var l=Da(r);if(l!==null&&Ul(l),l=zi(e,t,o,n),l===null&&Zi(e,t,n,vr,o),l===r)break;r=l}r!==null&&n.stopPropagation()}else Zi(e,t,n,null,o)}}var vr=null;function zi(e,t,o,n){if(vr=null,e=zo(n),e=mn(e),e!==null)if(t=G(e),t===null)e=null;else if(o=t.tag,o===13){if(e=ve(t),e!==null)return e;e=null}else if(o===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return vr=e,null}function Ql(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(ma()){case ho:return 1;case ro:return 4;case mo:case On:return 16;case je:return 536870912;default:return 16}default:return 16}}var Ho=null,Ii=null,Pr=null;function Gl(){if(Pr)return Pr;var e,t=Ii,o=t.length,n,r="value"in Ho?Ho.value:Ho.textContent,l=r.length;for(e=0;e<o&&t[e]===r[e];e++);var u=o-e;for(n=1;n<=u&&t[o-n]===r[l-n];n++);return Pr=r.slice(e,1<n?1-n:void 0)}function wr(e){var t=e.keyCode;return"charCode"in e?(e=e.charCode,e===0&&t===13&&(e=13)):e=t,e===10&&(e=13),32<=e||e===13?e:0}function kr(){return!0}function Jl(){return!1}function Lt(e){function t(o,n,r,l,u){this._reactName=o,this._targetInst=r,this.type=n,this.nativeEvent=l,this.target=u,this.currentTarget=null;for(var g in e)e.hasOwnProperty(g)&&(o=e[g],this[g]=o?o(l):l[g]);return this.isDefaultPrevented=(l.defaultPrevented!=null?l.defaultPrevented:l.returnValue===!1)?kr:Jl,this.isPropagationStopped=Jl,this}return Y(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var o=this.nativeEvent;o&&(o.preventDefault?o.preventDefault():typeof o.returnValue!="unknown"&&(o.returnValue=!1),this.isDefaultPrevented=kr)},stopPropagation:function(){var o=this.nativeEvent;o&&(o.stopPropagation?o.stopPropagation():typeof o.cancelBubble!="unknown"&&(o.cancelBubble=!0),this.isPropagationStopped=kr)},persist:function(){},isPersistent:kr}),t}var Bn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Oi=Lt(Bn),xa=Y({},Bn,{view:0,detail:0}),Ip=Lt(xa),Fi,Bi,Ca,Sr=Y({},xa,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Ui,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==Ca&&(Ca&&e.type==="mousemove"?(Fi=e.screenX-Ca.screenX,Bi=e.screenY-Ca.screenY):Bi=Fi=0,Ca=e),Fi)},movementY:function(e){return"movementY"in e?e.movementY:Bi}}),Xl=Lt(Sr),Op=Y({},Sr,{dataTransfer:0}),Fp=Lt(Op),Bp=Y({},xa,{relatedTarget:0}),Wi=Lt(Bp),Wp=Y({},Bn,{animationName:0,elapsedTime:0,pseudoElement:0}),Up=Lt(Wp),Hp=Y({},Bn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),Vp=Lt(Hp),Yp=Y({},Bn,{data:0}),Zl=Lt(Yp),qp={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Kp={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},$p={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Qp(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=$p[e])?!!t[e]:!1}function Ui(){return Qp}var Gp=Y({},xa,{key:function(e){if(e.key){var t=qp[e.key]||e.key;if(t!=="Unidentified")return t}return e.type==="keypress"?(e=wr(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?Kp[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Ui,charCode:function(e){return e.type==="keypress"?wr(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?wr(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),Jp=Lt(Gp),Xp=Y({},Sr,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),ec=Lt(Xp),Zp=Y({},xa,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Ui}),ef=Lt(Zp),tf=Y({},Bn,{propertyName:0,elapsedTime:0,pseudoElement:0}),of=Lt(tf),nf=Y({},Sr,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),af=Lt(nf),rf=[9,13,27,32],Hi=m&&"CompositionEvent"in window,Ra=null;m&&"documentMode"in document&&(Ra=document.documentMode);var sf=m&&"TextEvent"in window&&!Ra,tc=m&&(!Hi||Ra&&8<Ra&&11>=Ra),oc=" ",nc=!1;function ac(e,t){switch(e){case"keyup":return rf.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function rc(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Wn=!1;function lf(e,t){switch(e){case"compositionend":return rc(t);case"keypress":return t.which!==32?null:(nc=!0,oc);case"textInput":return e=t.data,e===oc&&nc?null:e;default:return null}}function cf(e,t){if(Wn)return e==="compositionend"||!Hi&&ac(e,t)?(e=Gl(),Pr=Ii=Ho=null,Wn=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return tc&&t.locale!=="ko"?null:t.data;default:return null}}var uf={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function ic(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t==="input"?!!uf[e.type]:t==="textarea"}function sc(e,t,o,n){ga(n),t=jr(t,"onChange"),0<t.length&&(o=new Oi("onChange","change",null,o,n),e.push({event:o,listeners:t}))}var ja=null,Ea=null;function df(e){Cc(e,0)}function br(e){var t=qn(e);if(tt(t))return e}function pf(e,t){if(e==="change")return t}var lc=!1;if(m){var Vi;if(m){var Yi="oninput"in document;if(!Yi){var cc=document.createElement("div");cc.setAttribute("oninput","return;"),Yi=typeof cc.oninput=="function"}Vi=Yi}else Vi=!1;lc=Vi&&(!document.documentMode||9<document.documentMode)}function uc(){ja&&(ja.detachEvent("onpropertychange",dc),Ea=ja=null)}function dc(e){if(e.propertyName==="value"&&br(Ea)){var t=[];sc(t,Ea,e,zo(e)),ur(df,t)}}function ff(e,t,o){e==="focusin"?(uc(),ja=t,Ea=o,ja.attachEvent("onpropertychange",dc)):e==="focusout"&&uc()}function gf(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return br(Ea)}function hf(e,t){if(e==="click")return br(t)}function mf(e,t){if(e==="input"||e==="change")return br(t)}function yf(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var $t=typeof Object.is=="function"?Object.is:yf;function _a(e,t){if($t(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;var o=Object.keys(e),n=Object.keys(t);if(o.length!==n.length)return!1;for(n=0;n<o.length;n++){var r=o[n];if(!h.call(t,r)||!$t(e[r],t[r]))return!1}return!0}function pc(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function fc(e,t){var o=pc(e);e=0;for(var n;o;){if(o.nodeType===3){if(n=e+o.textContent.length,e<=t&&n>=t)return{node:o,offset:t-e};e=n}e:{for(;o;){if(o.nextSibling){o=o.nextSibling;break e}o=o.parentNode}o=void 0}o=pc(o)}}function gc(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?gc(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function hc(){for(var e=window,t=Tt();t instanceof e.HTMLIFrameElement;){try{var o=typeof t.contentWindow.location.href=="string"}catch{o=!1}if(o)e=t.contentWindow;else break;t=Tt(e.document)}return t}function qi(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function vf(e){var t=hc(),o=e.focusedElem,n=e.selectionRange;if(t!==o&&o&&o.ownerDocument&&gc(o.ownerDocument.documentElement,o)){if(n!==null&&qi(o)){if(t=n.start,e=n.end,e===void 0&&(e=t),"selectionStart"in o)o.selectionStart=t,o.selectionEnd=Math.min(e,o.value.length);else if(e=(t=o.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var r=o.textContent.length,l=Math.min(n.start,r);n=n.end===void 0?l:Math.min(n.end,r),!e.extend&&l>n&&(r=n,n=l,l=r),r=fc(o,l);var u=fc(o,n);r&&u&&(e.rangeCount!==1||e.anchorNode!==r.node||e.anchorOffset!==r.offset||e.focusNode!==u.node||e.focusOffset!==u.offset)&&(t=t.createRange(),t.setStart(r.node,r.offset),e.removeAllRanges(),l>n?(e.addRange(t),e.extend(u.node,u.offset)):(t.setEnd(u.node,u.offset),e.addRange(t)))}}for(t=[],e=o;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof o.focus=="function"&&o.focus(),o=0;o<t.length;o++)e=t[o],e.element.scrollLeft=e.left,e.element.scrollTop=e.top}}var Pf=m&&"documentMode"in document&&11>=document.documentMode,Un=null,Ki=null,Ta=null,$i=!1;function mc(e,t,o){var n=o.window===o?o.document:o.nodeType===9?o:o.ownerDocument;$i||Un==null||Un!==Tt(n)||(n=Un,"selectionStart"in n&&qi(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),Ta&&_a(Ta,n)||(Ta=n,n=jr(Ki,"onSelect"),0<n.length&&(t=new Oi("onSelect","select",null,t,o),e.push({event:t,listeners:n}),t.target=Un)))}function xr(e,t){var o={};return o[e.toLowerCase()]=t.toLowerCase(),o["Webkit"+e]="webkit"+t,o["Moz"+e]="moz"+t,o}var Hn={animationend:xr("Animation","AnimationEnd"),animationiteration:xr("Animation","AnimationIteration"),animationstart:xr("Animation","AnimationStart"),transitionend:xr("Transition","TransitionEnd")},Qi={},yc={};m&&(yc=document.createElement("div").style,"AnimationEvent"in window||(delete Hn.animationend.animation,delete Hn.animationiteration.animation,delete Hn.animationstart.animation),"TransitionEvent"in window||delete Hn.transitionend.transition);function Cr(e){if(Qi[e])return Qi[e];if(!Hn[e])return e;var t=Hn[e],o;for(o in t)if(t.hasOwnProperty(o)&&o in yc)return Qi[e]=t[o];return e}var vc=Cr("animationend"),Pc=Cr("animationiteration"),wc=Cr("animationstart"),kc=Cr("transitionend"),Sc=new Map,bc="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Vo(e,t){Sc.set(e,t),p(t,[e])}for(var Gi=0;Gi<bc.length;Gi++){var Ji=bc[Gi],wf=Ji.toLowerCase(),kf=Ji[0].toUpperCase()+Ji.slice(1);Vo(wf,"on"+kf)}Vo(vc,"onAnimationEnd"),Vo(Pc,"onAnimationIteration"),Vo(wc,"onAnimationStart"),Vo("dblclick","onDoubleClick"),Vo("focusin","onFocus"),Vo("focusout","onBlur"),Vo(kc,"onTransitionEnd"),f("onMouseEnter",["mouseout","mouseover"]),f("onMouseLeave",["mouseout","mouseover"]),f("onPointerEnter",["pointerout","pointerover"]),f("onPointerLeave",["pointerout","pointerover"]),p("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),p("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),p("onBeforeInput",["compositionend","keypress","textInput","paste"]),p("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),p("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),p("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Ma="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Sf=new Set("cancel close invalid load scroll toggle".split(" ").concat(Ma));function xc(e,t,o){var n=e.type||"unknown-event";e.currentTarget=o,$(n,t,void 0,e),e.currentTarget=null}function Cc(e,t){t=(t&4)!==0;for(var o=0;o<e.length;o++){var n=e[o],r=n.event;n=n.listeners;e:{var l=void 0;if(t)for(var u=n.length-1;0<=u;u--){var g=n[u],v=g.instance,j=g.currentTarget;if(g=g.listener,v!==l&&r.isPropagationStopped())break e;xc(r,g,j),l=v}else for(u=0;u<n.length;u++){if(g=n[u],v=g.instance,j=g.currentTarget,g=g.listener,v!==l&&r.isPropagationStopped())break e;xc(r,g,j),l=v}}}if(ne)throw e=ce,ne=!1,ce=null,e}function qe(e,t){var o=t[rs];o===void 0&&(o=t[rs]=new Set);var n=e+"__bubble";o.has(n)||(Rc(t,e,2,!1),o.add(n))}function Xi(e,t,o){var n=0;t&&(n|=4),Rc(o,e,n,t)}var Rr="_reactListening"+Math.random().toString(36).slice(2);function Na(e){if(!e[Rr]){e[Rr]=!0,c.forEach(function(o){o!=="selectionchange"&&(Sf.has(o)||Xi(o,!1,e),Xi(o,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[Rr]||(t[Rr]=!0,Xi("selectionchange",!1,t))}}function Rc(e,t,o,n){switch(Ql(t)){case 1:var r=Dp;break;case 4:r=zp;break;default:r=Di}o=r.bind(null,t,o,e),r=void 0,!y||t!=="touchstart"&&t!=="touchmove"&&t!=="wheel"||(r=!0),n?r!==void 0?e.addEventListener(t,o,{capture:!0,passive:r}):e.addEventListener(t,o,!0):r!==void 0?e.addEventListener(t,o,{passive:r}):e.addEventListener(t,o,!1)}function Zi(e,t,o,n,r){var l=n;if((t&1)===0&&(t&2)===0&&n!==null)e:for(;;){if(n===null)return;var u=n.tag;if(u===3||u===4){var g=n.stateNode.containerInfo;if(g===r||g.nodeType===8&&g.parentNode===r)break;if(u===4)for(u=n.return;u!==null;){var v=u.tag;if((v===3||v===4)&&(v=u.stateNode.containerInfo,v===r||v.nodeType===8&&v.parentNode===r))return;u=u.return}for(;g!==null;){if(u=mn(g),u===null)return;if(v=u.tag,v===5||v===6){n=l=u;continue e}g=g.parentNode}}n=n.return}ur(function(){var j=l,z=zo(o),I=[];e:{var D=Sc.get(e);if(D!==void 0){var K=Oi,Z=e;switch(e){case"keypress":if(wr(o)===0)break e;case"keydown":case"keyup":K=Jp;break;case"focusin":Z="focus",K=Wi;break;case"focusout":Z="blur",K=Wi;break;case"beforeblur":case"afterblur":K=Wi;break;case"click":if(o.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":K=Xl;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":K=Fp;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":K=ef;break;case vc:case Pc:case wc:K=Up;break;case kc:K=of;break;case"scroll":K=Ip;break;case"wheel":K=af;break;case"copy":case"cut":case"paste":K=Vp;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":K=ec}var te=(t&4)!==0,nt=!te&&e==="scroll",b=te?D!==null?D+"Capture":null:D;te=[];for(var w=j,R;w!==null;){R=w;var W=R.stateNode;if(R.tag===5&&W!==null&&(R=W,b!==null&&(W=fn(w,b),W!=null&&te.push(La(w,W,R)))),nt)break;w=w.return}0<te.length&&(D=new K(D,Z,null,o,z),I.push({event:D,listeners:te}))}}if((t&7)===0){e:{if(D=e==="mouseover"||e==="pointerover",K=e==="mouseout"||e==="pointerout",D&&o!==zn&&(Z=o.relatedTarget||o.fromElement)&&(mn(Z)||Z[yo]))break e;if((K||D)&&(D=z.window===z?z:(D=z.ownerDocument)?D.defaultView||D.parentWindow:window,K?(Z=o.relatedTarget||o.toElement,K=j,Z=Z?mn(Z):null,Z!==null&&(nt=G(Z),Z!==nt||Z.tag!==5&&Z.tag!==6)&&(Z=null)):(K=null,Z=j),K!==Z)){if(te=Xl,W="onMouseLeave",b="onMouseEnter",w="mouse",(e==="pointerout"||e==="pointerover")&&(te=ec,W="onPointerLeave",b="onPointerEnter",w="pointer"),nt=K==null?D:qn(K),R=Z==null?D:qn(Z),D=new te(W,w+"leave",K,o,z),D.target=nt,D.relatedTarget=R,W=null,mn(z)===j&&(te=new te(b,w+"enter",Z,o,z),te.target=R,te.relatedTarget=nt,W=te),nt=W,K&&Z)t:{for(te=K,b=Z,w=0,R=te;R;R=Vn(R))w++;for(R=0,W=b;W;W=Vn(W))R++;for(;0<w-R;)te=Vn(te),w--;for(;0<R-w;)b=Vn(b),R--;for(;w--;){if(te===b||b!==null&&te===b.alternate)break t;te=Vn(te),b=Vn(b)}te=null}else te=null;K!==null&&jc(I,D,K,te,!1),Z!==null&&nt!==null&&jc(I,nt,Z,te,!0)}}e:{if(D=j?qn(j):window,K=D.nodeName&&D.nodeName.toLowerCase(),K==="select"||K==="input"&&D.type==="file")var oe=pf;else if(ic(D))if(lc)oe=mf;else{oe=gf;var se=ff}else(K=D.nodeName)&&K.toLowerCase()==="input"&&(D.type==="checkbox"||D.type==="radio")&&(oe=hf);if(oe&&(oe=oe(e,j))){sc(I,oe,o,z);break e}se&&se(e,D,j),e==="focusout"&&(se=D._wrapperState)&&se.controlled&&D.type==="number"&&fo(D,"number",D.value)}switch(se=j?qn(j):window,e){case"focusin":(ic(se)||se.contentEditable==="true")&&(Un=se,Ki=j,Ta=null);break;case"focusout":Ta=Ki=Un=null;break;case"mousedown":$i=!0;break;case"contextmenu":case"mouseup":case"dragend":$i=!1,mc(I,o,z);break;case"selectionchange":if(Pf)break;case"keydown":case"keyup":mc(I,o,z)}var le;if(Hi)e:{switch(e){case"compositionstart":var fe="onCompositionStart";break e;case"compositionend":fe="onCompositionEnd";break e;case"compositionupdate":fe="onCompositionUpdate";break e}fe=void 0}else Wn?ac(e,o)&&(fe="onCompositionEnd"):e==="keydown"&&o.keyCode===229&&(fe="onCompositionStart");fe&&(tc&&o.locale!=="ko"&&(Wn||fe!=="onCompositionStart"?fe==="onCompositionEnd"&&Wn&&(le=Gl()):(Ho=z,Ii="value"in Ho?Ho.value:Ho.textContent,Wn=!0)),se=jr(j,fe),0<se.length&&(fe=new Zl(fe,e,null,o,z),I.push({event:fe,listeners:se}),le?fe.data=le:(le=rc(o),le!==null&&(fe.data=le)))),(le=sf?lf(e,o):cf(e,o))&&(j=jr(j,"onBeforeInput"),0<j.length&&(z=new Zl("onBeforeInput","beforeinput",null,o,z),I.push({event:z,listeners:j}),z.data=le))}Cc(I,t)})}function La(e,t,o){return{instance:e,listener:t,currentTarget:o}}function jr(e,t){for(var o=t+"Capture",n=[];e!==null;){var r=e,l=r.stateNode;r.tag===5&&l!==null&&(r=l,l=fn(e,o),l!=null&&n.unshift(La(e,l,r)),l=fn(e,t),l!=null&&n.push(La(e,l,r))),e=e.return}return n}function Vn(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5);return e||null}function jc(e,t,o,n,r){for(var l=t._reactName,u=[];o!==null&&o!==n;){var g=o,v=g.alternate,j=g.stateNode;if(v!==null&&v===n)break;g.tag===5&&j!==null&&(g=j,r?(v=fn(o,l),v!=null&&u.unshift(La(o,v,g))):r||(v=fn(o,l),v!=null&&u.push(La(o,v,g)))),o=o.return}u.length!==0&&e.push({event:t,listeners:u})}var bf=/\r\n?/g,xf=/\u0000|\uFFFD/g;function Ec(e){return(typeof e=="string"?e:""+e).replace(bf,`
39
- `).replace(xf,"")}function Er(e,t,o){if(t=Ec(t),Ec(e)!==t&&o)throw Error(s(425))}function _r(){}var es=null,ts=null;function os(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var ns=typeof setTimeout=="function"?setTimeout:void 0,Cf=typeof clearTimeout=="function"?clearTimeout:void 0,_c=typeof Promise=="function"?Promise:void 0,Rf=typeof queueMicrotask=="function"?queueMicrotask:typeof _c<"u"?function(e){return _c.resolve(null).then(e).catch(jf)}:ns;function jf(e){setTimeout(function(){throw e})}function as(e,t){var o=t,n=0;do{var r=o.nextSibling;if(e.removeChild(o),r&&r.nodeType===8)if(o=r.data,o==="/$"){if(n===0){e.removeChild(r),ba(t);return}n--}else o!=="$"&&o!=="$?"&&o!=="$!"||n++;o=r}while(o);ba(t)}function Yo(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?")break;if(t==="/$")return null}}return e}function Tc(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var o=e.data;if(o==="$"||o==="$!"||o==="$?"){if(t===0)return e;t--}else o==="/$"&&t++}e=e.previousSibling}return null}var Yn=Math.random().toString(36).slice(2),io="__reactFiber$"+Yn,Aa="__reactProps$"+Yn,yo="__reactContainer$"+Yn,rs="__reactEvents$"+Yn,Ef="__reactListeners$"+Yn,_f="__reactHandles$"+Yn;function mn(e){var t=e[io];if(t)return t;for(var o=e.parentNode;o;){if(t=o[yo]||o[io]){if(o=t.alternate,t.child!==null||o!==null&&o.child!==null)for(e=Tc(e);e!==null;){if(o=e[io])return o;e=Tc(e)}return t}e=o,o=e.parentNode}return null}function Da(e){return e=e[io]||e[yo],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function qn(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(s(33))}function Tr(e){return e[Aa]||null}var is=[],Kn=-1;function qo(e){return{current:e}}function Ke(e){0>Kn||(e.current=is[Kn],is[Kn]=null,Kn--)}function Ve(e,t){Kn++,is[Kn]=e.current,e.current=t}var Ko={},yt=qo(Ko),bt=qo(!1),yn=Ko;function $n(e,t){var o=e.type.contextTypes;if(!o)return Ko;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var r={},l;for(l in o)r[l]=t[l];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=r),r}function xt(e){return e=e.childContextTypes,e!=null}function Mr(){Ke(bt),Ke(yt)}function Mc(e,t,o){if(yt.current!==Ko)throw Error(s(168));Ve(yt,t),Ve(bt,o)}function Nc(e,t,o){var n=e.stateNode;if(t=t.childContextTypes,typeof n.getChildContext!="function")return o;n=n.getChildContext();for(var r in n)if(!(r in t))throw Error(s(108,Re(e)||"Unknown",r));return Y({},o,n)}function Nr(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ko,yn=yt.current,Ve(yt,e),Ve(bt,bt.current),!0}function Lc(e,t,o){var n=e.stateNode;if(!n)throw Error(s(169));o?(e=Nc(e,t,yn),n.__reactInternalMemoizedMergedChildContext=e,Ke(bt),Ke(yt),Ve(yt,e)):Ke(bt),Ve(bt,o)}var vo=null,Lr=!1,ss=!1;function Ac(e){vo===null?vo=[e]:vo.push(e)}function Tf(e){Lr=!0,Ac(e)}function $o(){if(!ss&&vo!==null){ss=!0;var e=0,t=Fe;try{var o=vo;for(Fe=1;e<o.length;e++){var n=o[e];do n=n(!0);while(n!==null)}vo=null,Lr=!1}catch(r){throw vo!==null&&(vo=vo.slice(e+1)),Ye(ho,$o),r}finally{Fe=t,ss=!1}}return null}var Qn=[],Gn=0,Ar=null,Dr=0,Bt=[],Wt=0,vn=null,Po=1,wo="";function Pn(e,t){Qn[Gn++]=Dr,Qn[Gn++]=Ar,Ar=e,Dr=t}function Dc(e,t,o){Bt[Wt++]=Po,Bt[Wt++]=wo,Bt[Wt++]=vn,vn=e;var n=Po;e=wo;var r=32-Ae(n)-1;n&=~(1<<r),o+=1;var l=32-Ae(t)+r;if(30<l){var u=r-r%5;l=(n&(1<<u)-1).toString(32),n>>=u,r-=u,Po=1<<32-Ae(t)+r|o<<r|n,wo=l+e}else Po=1<<l|o<<r|n,wo=e}function ls(e){e.return!==null&&(Pn(e,1),Dc(e,1,0))}function cs(e){for(;e===Ar;)Ar=Qn[--Gn],Qn[Gn]=null,Dr=Qn[--Gn],Qn[Gn]=null;for(;e===vn;)vn=Bt[--Wt],Bt[Wt]=null,wo=Bt[--Wt],Bt[Wt]=null,Po=Bt[--Wt],Bt[Wt]=null}var At=null,Dt=null,$e=!1,Qt=null;function zc(e,t){var o=Yt(5,null,null,0);o.elementType="DELETED",o.stateNode=t,o.return=e,t=e.deletions,t===null?(e.deletions=[o],e.flags|=16):t.push(o)}function Ic(e,t){switch(e.tag){case 5:var o=e.type;return t=t.nodeType!==1||o.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,At=e,Dt=Yo(t.firstChild),!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,At=e,Dt=null,!0):!1;case 13:return t=t.nodeType!==8?null:t,t!==null?(o=vn!==null?{id:Po,overflow:wo}:null,e.memoizedState={dehydrated:t,treeContext:o,retryLane:1073741824},o=Yt(18,null,null,0),o.stateNode=t,o.return=e,e.child=o,At=e,Dt=null,!0):!1;default:return!1}}function us(e){return(e.mode&1)!==0&&(e.flags&128)===0}function ds(e){if($e){var t=Dt;if(t){var o=t;if(!Ic(e,t)){if(us(e))throw Error(s(418));t=Yo(o.nextSibling);var n=At;t&&Ic(e,t)?zc(n,o):(e.flags=e.flags&-4097|2,$e=!1,At=e)}}else{if(us(e))throw Error(s(418));e.flags=e.flags&-4097|2,$e=!1,At=e}}}function Oc(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;At=e}function zr(e){if(e!==At)return!1;if(!$e)return Oc(e),$e=!0,!1;var t;if((t=e.tag!==3)&&!(t=e.tag!==5)&&(t=e.type,t=t!=="head"&&t!=="body"&&!os(e.type,e.memoizedProps)),t&&(t=Dt)){if(us(e))throw Fc(),Error(s(418));for(;t;)zc(e,t),t=Yo(t.nextSibling)}if(Oc(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(s(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var o=e.data;if(o==="/$"){if(t===0){Dt=Yo(e.nextSibling);break e}t--}else o!=="$"&&o!=="$!"&&o!=="$?"||t++}e=e.nextSibling}Dt=null}}else Dt=At?Yo(e.stateNode.nextSibling):null;return!0}function Fc(){for(var e=Dt;e;)e=Yo(e.nextSibling)}function Jn(){Dt=At=null,$e=!1}function ps(e){Qt===null?Qt=[e]:Qt.push(e)}var Mf=re.ReactCurrentBatchConfig;function za(e,t,o){if(e=o.ref,e!==null&&typeof e!="function"&&typeof e!="object"){if(o._owner){if(o=o._owner,o){if(o.tag!==1)throw Error(s(309));var n=o.stateNode}if(!n)throw Error(s(147,e));var r=n,l=""+e;return t!==null&&t.ref!==null&&typeof t.ref=="function"&&t.ref._stringRef===l?t.ref:(t=function(u){var g=r.refs;u===null?delete g[l]:g[l]=u},t._stringRef=l,t)}if(typeof e!="string")throw Error(s(284));if(!o._owner)throw Error(s(290,e))}return e}function Ir(e,t){throw e=Object.prototype.toString.call(t),Error(s(31,e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Bc(e){var t=e._init;return t(e._payload)}function Wc(e){function t(b,w){if(e){var R=b.deletions;R===null?(b.deletions=[w],b.flags|=16):R.push(w)}}function o(b,w){if(!e)return null;for(;w!==null;)t(b,w),w=w.sibling;return null}function n(b,w){for(b=new Map;w!==null;)w.key!==null?b.set(w.key,w):b.set(w.index,w),w=w.sibling;return b}function r(b,w){return b=on(b,w),b.index=0,b.sibling=null,b}function l(b,w,R){return b.index=R,e?(R=b.alternate,R!==null?(R=R.index,R<w?(b.flags|=2,w):R):(b.flags|=2,w)):(b.flags|=1048576,w)}function u(b){return e&&b.alternate===null&&(b.flags|=2),b}function g(b,w,R,W){return w===null||w.tag!==6?(w=nl(R,b.mode,W),w.return=b,w):(w=r(w,R),w.return=b,w)}function v(b,w,R,W){var oe=R.type;return oe===E?z(b,w,R.props.children,W,R.key):w!==null&&(w.elementType===oe||typeof oe=="object"&&oe!==null&&oe.$$typeof===et&&Bc(oe)===w.type)?(W=r(w,R.props),W.ref=za(b,w,R),W.return=b,W):(W=si(R.type,R.key,R.props,null,b.mode,W),W.ref=za(b,w,R),W.return=b,W)}function j(b,w,R,W){return w===null||w.tag!==4||w.stateNode.containerInfo!==R.containerInfo||w.stateNode.implementation!==R.implementation?(w=al(R,b.mode,W),w.return=b,w):(w=r(w,R.children||[]),w.return=b,w)}function z(b,w,R,W,oe){return w===null||w.tag!==7?(w=jn(R,b.mode,W,oe),w.return=b,w):(w=r(w,R),w.return=b,w)}function I(b,w,R){if(typeof w=="string"&&w!==""||typeof w=="number")return w=nl(""+w,b.mode,R),w.return=b,w;if(typeof w=="object"&&w!==null){switch(w.$$typeof){case xe:return R=si(w.type,w.key,w.props,null,b.mode,R),R.ref=za(b,null,w),R.return=b,R;case Ee:return w=al(w,b.mode,R),w.return=b,w;case et:var W=w._init;return I(b,W(w._payload),R)}if(pe(w)||ae(w))return w=jn(w,b.mode,R,null),w.return=b,w;Ir(b,w)}return null}function D(b,w,R,W){var oe=w!==null?w.key:null;if(typeof R=="string"&&R!==""||typeof R=="number")return oe!==null?null:g(b,w,""+R,W);if(typeof R=="object"&&R!==null){switch(R.$$typeof){case xe:return R.key===oe?v(b,w,R,W):null;case Ee:return R.key===oe?j(b,w,R,W):null;case et:return oe=R._init,D(b,w,oe(R._payload),W)}if(pe(R)||ae(R))return oe!==null?null:z(b,w,R,W,null);Ir(b,R)}return null}function K(b,w,R,W,oe){if(typeof W=="string"&&W!==""||typeof W=="number")return b=b.get(R)||null,g(w,b,""+W,oe);if(typeof W=="object"&&W!==null){switch(W.$$typeof){case xe:return b=b.get(W.key===null?R:W.key)||null,v(w,b,W,oe);case Ee:return b=b.get(W.key===null?R:W.key)||null,j(w,b,W,oe);case et:var se=W._init;return K(b,w,R,se(W._payload),oe)}if(pe(W)||ae(W))return b=b.get(R)||null,z(w,b,W,oe,null);Ir(w,W)}return null}function Z(b,w,R,W){for(var oe=null,se=null,le=w,fe=w=0,pt=null;le!==null&&fe<R.length;fe++){le.index>fe?(pt=le,le=null):pt=le.sibling;var De=D(b,le,R[fe],W);if(De===null){le===null&&(le=pt);break}e&&le&&De.alternate===null&&t(b,le),w=l(De,w,fe),se===null?oe=De:se.sibling=De,se=De,le=pt}if(fe===R.length)return o(b,le),$e&&Pn(b,fe),oe;if(le===null){for(;fe<R.length;fe++)le=I(b,R[fe],W),le!==null&&(w=l(le,w,fe),se===null?oe=le:se.sibling=le,se=le);return $e&&Pn(b,fe),oe}for(le=n(b,le);fe<R.length;fe++)pt=K(le,b,fe,R[fe],W),pt!==null&&(e&&pt.alternate!==null&&le.delete(pt.key===null?fe:pt.key),w=l(pt,w,fe),se===null?oe=pt:se.sibling=pt,se=pt);return e&&le.forEach(function(nn){return t(b,nn)}),$e&&Pn(b,fe),oe}function te(b,w,R,W){var oe=ae(R);if(typeof oe!="function")throw Error(s(150));if(R=oe.call(R),R==null)throw Error(s(151));for(var se=oe=null,le=w,fe=w=0,pt=null,De=R.next();le!==null&&!De.done;fe++,De=R.next()){le.index>fe?(pt=le,le=null):pt=le.sibling;var nn=D(b,le,De.value,W);if(nn===null){le===null&&(le=pt);break}e&&le&&nn.alternate===null&&t(b,le),w=l(nn,w,fe),se===null?oe=nn:se.sibling=nn,se=nn,le=pt}if(De.done)return o(b,le),$e&&Pn(b,fe),oe;if(le===null){for(;!De.done;fe++,De=R.next())De=I(b,De.value,W),De!==null&&(w=l(De,w,fe),se===null?oe=De:se.sibling=De,se=De);return $e&&Pn(b,fe),oe}for(le=n(b,le);!De.done;fe++,De=R.next())De=K(le,b,fe,De.value,W),De!==null&&(e&&De.alternate!==null&&le.delete(De.key===null?fe:De.key),w=l(De,w,fe),se===null?oe=De:se.sibling=De,se=De);return e&&le.forEach(function(ug){return t(b,ug)}),$e&&Pn(b,fe),oe}function nt(b,w,R,W){if(typeof R=="object"&&R!==null&&R.type===E&&R.key===null&&(R=R.props.children),typeof R=="object"&&R!==null){switch(R.$$typeof){case xe:e:{for(var oe=R.key,se=w;se!==null;){if(se.key===oe){if(oe=R.type,oe===E){if(se.tag===7){o(b,se.sibling),w=r(se,R.props.children),w.return=b,b=w;break e}}else if(se.elementType===oe||typeof oe=="object"&&oe!==null&&oe.$$typeof===et&&Bc(oe)===se.type){o(b,se.sibling),w=r(se,R.props),w.ref=za(b,se,R),w.return=b,b=w;break e}o(b,se);break}else t(b,se);se=se.sibling}R.type===E?(w=jn(R.props.children,b.mode,W,R.key),w.return=b,b=w):(W=si(R.type,R.key,R.props,null,b.mode,W),W.ref=za(b,w,R),W.return=b,b=W)}return u(b);case Ee:e:{for(se=R.key;w!==null;){if(w.key===se)if(w.tag===4&&w.stateNode.containerInfo===R.containerInfo&&w.stateNode.implementation===R.implementation){o(b,w.sibling),w=r(w,R.children||[]),w.return=b,b=w;break e}else{o(b,w);break}else t(b,w);w=w.sibling}w=al(R,b.mode,W),w.return=b,b=w}return u(b);case et:return se=R._init,nt(b,w,se(R._payload),W)}if(pe(R))return Z(b,w,R,W);if(ae(R))return te(b,w,R,W);Ir(b,R)}return typeof R=="string"&&R!==""||typeof R=="number"?(R=""+R,w!==null&&w.tag===6?(o(b,w.sibling),w=r(w,R),w.return=b,b=w):(o(b,w),w=nl(R,b.mode,W),w.return=b,b=w),u(b)):o(b,w)}return nt}var Xn=Wc(!0),Uc=Wc(!1),Or=qo(null),Fr=null,Zn=null,fs=null;function gs(){fs=Zn=Fr=null}function hs(e){var t=Or.current;Ke(Or),e._currentValue=t}function ms(e,t,o){for(;e!==null;){var n=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,n!==null&&(n.childLanes|=t)):n!==null&&(n.childLanes&t)!==t&&(n.childLanes|=t),e===o)break;e=e.return}}function ea(e,t){Fr=e,fs=Zn=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&t)!==0&&(Ct=!0),e.firstContext=null)}function Ut(e){var t=e._currentValue;if(fs!==e)if(e={context:e,memoizedValue:t,next:null},Zn===null){if(Fr===null)throw Error(s(308));Zn=e,Fr.dependencies={lanes:0,firstContext:e}}else Zn=Zn.next=e;return t}var wn=null;function ys(e){wn===null?wn=[e]:wn.push(e)}function Hc(e,t,o,n){var r=t.interleaved;return r===null?(o.next=o,ys(t)):(o.next=r.next,r.next=o),t.interleaved=o,ko(e,n)}function ko(e,t){e.lanes|=t;var o=e.alternate;for(o!==null&&(o.lanes|=t),o=e,e=e.return;e!==null;)e.childLanes|=t,o=e.alternate,o!==null&&(o.childLanes|=t),o=e,e=e.return;return o.tag===3?o.stateNode:null}var Qo=!1;function vs(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Vc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function So(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Go(e,t,o){var n=e.updateQueue;if(n===null)return null;if(n=n.shared,(Me&2)!==0){var r=n.pending;return r===null?t.next=t:(t.next=r.next,r.next=t),n.pending=t,ko(e,o)}return r=n.interleaved,r===null?(t.next=t,ys(n)):(t.next=r.next,r.next=t),n.interleaved=t,ko(e,o)}function Br(e,t,o){if(t=t.updateQueue,t!==null&&(t=t.shared,(o&4194240)!==0)){var n=t.lanes;n&=e.pendingLanes,o|=n,t.lanes=o,Ni(e,o)}}function Yc(e,t){var o=e.updateQueue,n=e.alternate;if(n!==null&&(n=n.updateQueue,o===n)){var r=null,l=null;if(o=o.firstBaseUpdate,o!==null){do{var u={eventTime:o.eventTime,lane:o.lane,tag:o.tag,payload:o.payload,callback:o.callback,next:null};l===null?r=l=u:l=l.next=u,o=o.next}while(o!==null);l===null?r=l=t:l=l.next=t}else r=l=t;o={baseState:n.baseState,firstBaseUpdate:r,lastBaseUpdate:l,shared:n.shared,effects:n.effects},e.updateQueue=o;return}e=o.lastBaseUpdate,e===null?o.firstBaseUpdate=t:e.next=t,o.lastBaseUpdate=t}function Wr(e,t,o,n){var r=e.updateQueue;Qo=!1;var l=r.firstBaseUpdate,u=r.lastBaseUpdate,g=r.shared.pending;if(g!==null){r.shared.pending=null;var v=g,j=v.next;v.next=null,u===null?l=j:u.next=j,u=v;var z=e.alternate;z!==null&&(z=z.updateQueue,g=z.lastBaseUpdate,g!==u&&(g===null?z.firstBaseUpdate=j:g.next=j,z.lastBaseUpdate=v))}if(l!==null){var I=r.baseState;u=0,z=j=v=null,g=l;do{var D=g.lane,K=g.eventTime;if((n&D)===D){z!==null&&(z=z.next={eventTime:K,lane:0,tag:g.tag,payload:g.payload,callback:g.callback,next:null});e:{var Z=e,te=g;switch(D=t,K=o,te.tag){case 1:if(Z=te.payload,typeof Z=="function"){I=Z.call(K,I,D);break e}I=Z;break e;case 3:Z.flags=Z.flags&-65537|128;case 0:if(Z=te.payload,D=typeof Z=="function"?Z.call(K,I,D):Z,D==null)break e;I=Y({},I,D);break e;case 2:Qo=!0}}g.callback!==null&&g.lane!==0&&(e.flags|=64,D=r.effects,D===null?r.effects=[g]:D.push(g))}else K={eventTime:K,lane:D,tag:g.tag,payload:g.payload,callback:g.callback,next:null},z===null?(j=z=K,v=I):z=z.next=K,u|=D;if(g=g.next,g===null){if(g=r.shared.pending,g===null)break;D=g,g=D.next,D.next=null,r.lastBaseUpdate=D,r.shared.pending=null}}while(!0);if(z===null&&(v=I),r.baseState=v,r.firstBaseUpdate=j,r.lastBaseUpdate=z,t=r.shared.interleaved,t!==null){r=t;do u|=r.lane,r=r.next;while(r!==t)}else l===null&&(r.shared.lanes=0);bn|=u,e.lanes=u,e.memoizedState=I}}function qc(e,t,o){if(e=t.effects,t.effects=null,e!==null)for(t=0;t<e.length;t++){var n=e[t],r=n.callback;if(r!==null){if(n.callback=null,n=o,typeof r!="function")throw Error(s(191,r));r.call(n)}}}var Ia={},so=qo(Ia),Oa=qo(Ia),Fa=qo(Ia);function kn(e){if(e===Ia)throw Error(s(174));return e}function Ps(e,t){switch(Ve(Fa,t),Ve(Oa,e),Ve(so,Ia),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:dn(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=dn(t,e)}Ke(so),Ve(so,t)}function ta(){Ke(so),Ke(Oa),Ke(Fa)}function Kc(e){kn(Fa.current);var t=kn(so.current),o=dn(t,e.type);t!==o&&(Ve(Oa,e),Ve(so,o))}function ws(e){Oa.current===e&&(Ke(so),Ke(Oa))}var Je=qo(0);function Ur(e){for(var t=e;t!==null;){if(t.tag===13){var o=t.memoizedState;if(o!==null&&(o=o.dehydrated,o===null||o.data==="$?"||o.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if((t.flags&128)!==0)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var ks=[];function Ss(){for(var e=0;e<ks.length;e++)ks[e]._workInProgressVersionPrimary=null;ks.length=0}var Hr=re.ReactCurrentDispatcher,bs=re.ReactCurrentBatchConfig,Sn=0,Xe=null,st=null,ut=null,Vr=!1,Ba=!1,Wa=0,Nf=0;function vt(){throw Error(s(321))}function xs(e,t){if(t===null)return!1;for(var o=0;o<t.length&&o<e.length;o++)if(!$t(e[o],t[o]))return!1;return!0}function Cs(e,t,o,n,r,l){if(Sn=l,Xe=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Hr.current=e===null||e.memoizedState===null?zf:If,e=o(n,r),Ba){l=0;do{if(Ba=!1,Wa=0,25<=l)throw Error(s(301));l+=1,ut=st=null,t.updateQueue=null,Hr.current=Of,e=o(n,r)}while(Ba)}if(Hr.current=Kr,t=st!==null&&st.next!==null,Sn=0,ut=st=Xe=null,Vr=!1,t)throw Error(s(300));return e}function Rs(){var e=Wa!==0;return Wa=0,e}function lo(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return ut===null?Xe.memoizedState=ut=e:ut=ut.next=e,ut}function Ht(){if(st===null){var e=Xe.alternate;e=e!==null?e.memoizedState:null}else e=st.next;var t=ut===null?Xe.memoizedState:ut.next;if(t!==null)ut=t,st=e;else{if(e===null)throw Error(s(310));st=e,e={memoizedState:st.memoizedState,baseState:st.baseState,baseQueue:st.baseQueue,queue:st.queue,next:null},ut===null?Xe.memoizedState=ut=e:ut=ut.next=e}return ut}function Ua(e,t){return typeof t=="function"?t(e):t}function js(e){var t=Ht(),o=t.queue;if(o===null)throw Error(s(311));o.lastRenderedReducer=e;var n=st,r=n.baseQueue,l=o.pending;if(l!==null){if(r!==null){var u=r.next;r.next=l.next,l.next=u}n.baseQueue=r=l,o.pending=null}if(r!==null){l=r.next,n=n.baseState;var g=u=null,v=null,j=l;do{var z=j.lane;if((Sn&z)===z)v!==null&&(v=v.next={lane:0,action:j.action,hasEagerState:j.hasEagerState,eagerState:j.eagerState,next:null}),n=j.hasEagerState?j.eagerState:e(n,j.action);else{var I={lane:z,action:j.action,hasEagerState:j.hasEagerState,eagerState:j.eagerState,next:null};v===null?(g=v=I,u=n):v=v.next=I,Xe.lanes|=z,bn|=z}j=j.next}while(j!==null&&j!==l);v===null?u=n:v.next=g,$t(n,t.memoizedState)||(Ct=!0),t.memoizedState=n,t.baseState=u,t.baseQueue=v,o.lastRenderedState=n}if(e=o.interleaved,e!==null){r=e;do l=r.lane,Xe.lanes|=l,bn|=l,r=r.next;while(r!==e)}else r===null&&(o.lanes=0);return[t.memoizedState,o.dispatch]}function Es(e){var t=Ht(),o=t.queue;if(o===null)throw Error(s(311));o.lastRenderedReducer=e;var n=o.dispatch,r=o.pending,l=t.memoizedState;if(r!==null){o.pending=null;var u=r=r.next;do l=e(l,u.action),u=u.next;while(u!==r);$t(l,t.memoizedState)||(Ct=!0),t.memoizedState=l,t.baseQueue===null&&(t.baseState=l),o.lastRenderedState=l}return[l,n]}function $c(){}function Qc(e,t){var o=Xe,n=Ht(),r=t(),l=!$t(n.memoizedState,r);if(l&&(n.memoizedState=r,Ct=!0),n=n.queue,_s(Xc.bind(null,o,n,e),[e]),n.getSnapshot!==t||l||ut!==null&&ut.memoizedState.tag&1){if(o.flags|=2048,Ha(9,Jc.bind(null,o,n,r,t),void 0,null),dt===null)throw Error(s(349));(Sn&30)!==0||Gc(o,t,r)}return r}function Gc(e,t,o){e.flags|=16384,e={getSnapshot:t,value:o},t=Xe.updateQueue,t===null?(t={lastEffect:null,stores:null},Xe.updateQueue=t,t.stores=[e]):(o=t.stores,o===null?t.stores=[e]:o.push(e))}function Jc(e,t,o,n){t.value=o,t.getSnapshot=n,Zc(t)&&eu(e)}function Xc(e,t,o){return o(function(){Zc(t)&&eu(e)})}function Zc(e){var t=e.getSnapshot;e=e.value;try{var o=t();return!$t(e,o)}catch{return!0}}function eu(e){var t=ko(e,1);t!==null&&Zt(t,e,1,-1)}function tu(e){var t=lo();return typeof e=="function"&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Ua,lastRenderedState:e},t.queue=e,e=e.dispatch=Df.bind(null,Xe,e),[t.memoizedState,e]}function Ha(e,t,o,n){return e={tag:e,create:t,destroy:o,deps:n,next:null},t=Xe.updateQueue,t===null?(t={lastEffect:null,stores:null},Xe.updateQueue=t,t.lastEffect=e.next=e):(o=t.lastEffect,o===null?t.lastEffect=e.next=e:(n=o.next,o.next=e,e.next=n,t.lastEffect=e)),e}function ou(){return Ht().memoizedState}function Yr(e,t,o,n){var r=lo();Xe.flags|=e,r.memoizedState=Ha(1|t,o,void 0,n===void 0?null:n)}function qr(e,t,o,n){var r=Ht();n=n===void 0?null:n;var l=void 0;if(st!==null){var u=st.memoizedState;if(l=u.destroy,n!==null&&xs(n,u.deps)){r.memoizedState=Ha(t,o,l,n);return}}Xe.flags|=e,r.memoizedState=Ha(1|t,o,l,n)}function nu(e,t){return Yr(8390656,8,e,t)}function _s(e,t){return qr(2048,8,e,t)}function au(e,t){return qr(4,2,e,t)}function ru(e,t){return qr(4,4,e,t)}function iu(e,t){if(typeof t=="function")return e=e(),t(e),function(){t(null)};if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function su(e,t,o){return o=o!=null?o.concat([e]):null,qr(4,4,iu.bind(null,t,e),o)}function Ts(){}function lu(e,t){var o=Ht();t=t===void 0?null:t;var n=o.memoizedState;return n!==null&&t!==null&&xs(t,n[1])?n[0]:(o.memoizedState=[e,t],e)}function cu(e,t){var o=Ht();t=t===void 0?null:t;var n=o.memoizedState;return n!==null&&t!==null&&xs(t,n[1])?n[0]:(e=e(),o.memoizedState=[e,t],e)}function uu(e,t,o){return(Sn&21)===0?(e.baseState&&(e.baseState=!1,Ct=!0),e.memoizedState=o):($t(o,t)||(o=Bl(),Xe.lanes|=o,bn|=o,e.baseState=!0),t)}function Lf(e,t){var o=Fe;Fe=o!==0&&4>o?o:4,e(!0);var n=bs.transition;bs.transition={};try{e(!1),t()}finally{Fe=o,bs.transition=n}}function du(){return Ht().memoizedState}function Af(e,t,o){var n=en(e);if(o={lane:n,action:o,hasEagerState:!1,eagerState:null,next:null},pu(e))fu(t,o);else if(o=Hc(e,t,o,n),o!==null){var r=St();Zt(o,e,n,r),gu(o,t,n)}}function Df(e,t,o){var n=en(e),r={lane:n,action:o,hasEagerState:!1,eagerState:null,next:null};if(pu(e))fu(t,r);else{var l=e.alternate;if(e.lanes===0&&(l===null||l.lanes===0)&&(l=t.lastRenderedReducer,l!==null))try{var u=t.lastRenderedState,g=l(u,o);if(r.hasEagerState=!0,r.eagerState=g,$t(g,u)){var v=t.interleaved;v===null?(r.next=r,ys(t)):(r.next=v.next,v.next=r),t.interleaved=r;return}}catch{}finally{}o=Hc(e,t,r,n),o!==null&&(r=St(),Zt(o,e,n,r),gu(o,t,n))}}function pu(e){var t=e.alternate;return e===Xe||t!==null&&t===Xe}function fu(e,t){Ba=Vr=!0;var o=e.pending;o===null?t.next=t:(t.next=o.next,o.next=t),e.pending=t}function gu(e,t,o){if((o&4194240)!==0){var n=t.lanes;n&=e.pendingLanes,o|=n,t.lanes=o,Ni(e,o)}}var Kr={readContext:Ut,useCallback:vt,useContext:vt,useEffect:vt,useImperativeHandle:vt,useInsertionEffect:vt,useLayoutEffect:vt,useMemo:vt,useReducer:vt,useRef:vt,useState:vt,useDebugValue:vt,useDeferredValue:vt,useTransition:vt,useMutableSource:vt,useSyncExternalStore:vt,useId:vt,unstable_isNewReconciler:!1},zf={readContext:Ut,useCallback:function(e,t){return lo().memoizedState=[e,t===void 0?null:t],e},useContext:Ut,useEffect:nu,useImperativeHandle:function(e,t,o){return o=o!=null?o.concat([e]):null,Yr(4194308,4,iu.bind(null,t,e),o)},useLayoutEffect:function(e,t){return Yr(4194308,4,e,t)},useInsertionEffect:function(e,t){return Yr(4,2,e,t)},useMemo:function(e,t){var o=lo();return t=t===void 0?null:t,e=e(),o.memoizedState=[e,t],e},useReducer:function(e,t,o){var n=lo();return t=o!==void 0?o(t):t,n.memoizedState=n.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},n.queue=e,e=e.dispatch=Af.bind(null,Xe,e),[n.memoizedState,e]},useRef:function(e){var t=lo();return e={current:e},t.memoizedState=e},useState:tu,useDebugValue:Ts,useDeferredValue:function(e){return lo().memoizedState=e},useTransition:function(){var e=tu(!1),t=e[0];return e=Lf.bind(null,e[1]),lo().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,o){var n=Xe,r=lo();if($e){if(o===void 0)throw Error(s(407));o=o()}else{if(o=t(),dt===null)throw Error(s(349));(Sn&30)!==0||Gc(n,t,o)}r.memoizedState=o;var l={value:o,getSnapshot:t};return r.queue=l,nu(Xc.bind(null,n,l,e),[e]),n.flags|=2048,Ha(9,Jc.bind(null,n,l,o,t),void 0,null),o},useId:function(){var e=lo(),t=dt.identifierPrefix;if($e){var o=wo,n=Po;o=(n&~(1<<32-Ae(n)-1)).toString(32)+o,t=":"+t+"R"+o,o=Wa++,0<o&&(t+="H"+o.toString(32)),t+=":"}else o=Nf++,t=":"+t+"r"+o.toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},If={readContext:Ut,useCallback:lu,useContext:Ut,useEffect:_s,useImperativeHandle:su,useInsertionEffect:au,useLayoutEffect:ru,useMemo:cu,useReducer:js,useRef:ou,useState:function(){return js(Ua)},useDebugValue:Ts,useDeferredValue:function(e){var t=Ht();return uu(t,st.memoizedState,e)},useTransition:function(){var e=js(Ua)[0],t=Ht().memoizedState;return[e,t]},useMutableSource:$c,useSyncExternalStore:Qc,useId:du,unstable_isNewReconciler:!1},Of={readContext:Ut,useCallback:lu,useContext:Ut,useEffect:_s,useImperativeHandle:su,useInsertionEffect:au,useLayoutEffect:ru,useMemo:cu,useReducer:Es,useRef:ou,useState:function(){return Es(Ua)},useDebugValue:Ts,useDeferredValue:function(e){var t=Ht();return st===null?t.memoizedState=e:uu(t,st.memoizedState,e)},useTransition:function(){var e=Es(Ua)[0],t=Ht().memoizedState;return[e,t]},useMutableSource:$c,useSyncExternalStore:Qc,useId:du,unstable_isNewReconciler:!1};function Gt(e,t){if(e&&e.defaultProps){t=Y({},t),e=e.defaultProps;for(var o in e)t[o]===void 0&&(t[o]=e[o]);return t}return t}function Ms(e,t,o,n){t=e.memoizedState,o=o(n,t),o=o==null?t:Y({},t,o),e.memoizedState=o,e.lanes===0&&(e.updateQueue.baseState=o)}var $r={isMounted:function(e){return(e=e._reactInternals)?G(e)===e:!1},enqueueSetState:function(e,t,o){e=e._reactInternals;var n=St(),r=en(e),l=So(n,r);l.payload=t,o!=null&&(l.callback=o),t=Go(e,l,r),t!==null&&(Zt(t,e,r,n),Br(t,e,r))},enqueueReplaceState:function(e,t,o){e=e._reactInternals;var n=St(),r=en(e),l=So(n,r);l.tag=1,l.payload=t,o!=null&&(l.callback=o),t=Go(e,l,r),t!==null&&(Zt(t,e,r,n),Br(t,e,r))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var o=St(),n=en(e),r=So(o,n);r.tag=2,t!=null&&(r.callback=t),t=Go(e,r,n),t!==null&&(Zt(t,e,n,o),Br(t,e,n))}};function hu(e,t,o,n,r,l,u){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(n,l,u):t.prototype&&t.prototype.isPureReactComponent?!_a(o,n)||!_a(r,l):!0}function mu(e,t,o){var n=!1,r=Ko,l=t.contextType;return typeof l=="object"&&l!==null?l=Ut(l):(r=xt(t)?yn:yt.current,n=t.contextTypes,l=(n=n!=null)?$n(e,r):Ko),t=new t(o,l),e.memoizedState=t.state!==null&&t.state!==void 0?t.state:null,t.updater=$r,e.stateNode=t,t._reactInternals=e,n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=r,e.__reactInternalMemoizedMaskedChildContext=l),t}function yu(e,t,o,n){e=t.state,typeof t.componentWillReceiveProps=="function"&&t.componentWillReceiveProps(o,n),typeof t.UNSAFE_componentWillReceiveProps=="function"&&t.UNSAFE_componentWillReceiveProps(o,n),t.state!==e&&$r.enqueueReplaceState(t,t.state,null)}function Ns(e,t,o,n){var r=e.stateNode;r.props=o,r.state=e.memoizedState,r.refs={},vs(e);var l=t.contextType;typeof l=="object"&&l!==null?r.context=Ut(l):(l=xt(t)?yn:yt.current,r.context=$n(e,l)),r.state=e.memoizedState,l=t.getDerivedStateFromProps,typeof l=="function"&&(Ms(e,t,l,o),r.state=e.memoizedState),typeof t.getDerivedStateFromProps=="function"||typeof r.getSnapshotBeforeUpdate=="function"||typeof r.UNSAFE_componentWillMount!="function"&&typeof r.componentWillMount!="function"||(t=r.state,typeof r.componentWillMount=="function"&&r.componentWillMount(),typeof r.UNSAFE_componentWillMount=="function"&&r.UNSAFE_componentWillMount(),t!==r.state&&$r.enqueueReplaceState(r,r.state,null),Wr(e,o,r,n),r.state=e.memoizedState),typeof r.componentDidMount=="function"&&(e.flags|=4194308)}function oa(e,t){try{var o="",n=t;do o+=me(n),n=n.return;while(n);var r=o}catch(l){r=`
34
+ */var hd;function vf(){if(hd)return jt;hd=1;var a=jl(),i=yf();function s(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var c=new Set,d={};function p(e,t){g(e,t),g(e+"Capture",t)}function g(e,t){for(d[e]=t,e=0;e<t.length;e++)c.add(t[e])}var m=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),h=Object.prototype.hasOwnProperty,P=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,x={},R={};function A(e){return h.call(R,e)?!0:h.call(x,e)?!1:P.test(e)?R[e]=!0:(x[e]=!0,!1)}function O(e,t,n,o){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return o?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function V(e,t,n,o){if(t===null||typeof t>"u"||O(e,t,n,o))return!0;if(o)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function B(e,t,n,o,r,l,u){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=o,this.attributeNamespace=r,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=l,this.removeEmptyString=u}var U={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){U[e]=new B(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];U[t]=new B(t,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){U[e]=new B(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){U[e]=new B(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){U[e]=new B(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){U[e]=new B(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){U[e]=new B(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){U[e]=new B(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){U[e]=new B(e,5,!1,e.toLowerCase(),null,!1,!1)});var fe=/[\-:]([a-z])/g;function q(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(fe,q);U[t]=new B(t,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(fe,q);U[t]=new B(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(fe,q);U[t]=new B(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){U[e]=new B(e,1,!1,e.toLowerCase(),null,!1,!1)}),U.xlinkHref=new B("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){U[e]=new B(e,1,!1,e.toLowerCase(),null,!0,!0)});function ue(e,t,n,o){var r=U.hasOwnProperty(t)?U[t]:null;(r!==null?r.type!==0:o||!(2<t.length)||t[0]!=="o"&&t[0]!=="O"||t[1]!=="n"&&t[1]!=="N")&&(V(t,n,r,o)&&(n=null),o||r===null?A(t)&&(n===null?e.removeAttribute(t):e.setAttribute(t,""+n)):r.mustUseProperty?e[r.propertyName]=n===null?r.type===3?!1:"":n:(t=r.attributeName,o=r.attributeNamespace,n===null?e.removeAttribute(t):(r=r.type,n=r===3||r===4&&n===!0?"":""+n,o?e.setAttributeNS(o,t,n):e.setAttribute(t,n))))}var re=a.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,xe=Symbol.for("react.element"),je=Symbol.for("react.portal"),j=Symbol.for("react.fragment"),J=Symbol.for("react.strict_mode"),Se=Symbol.for("react.profiler"),ie=Symbol.for("react.provider"),Fe=Symbol.for("react.context"),Te=Symbol.for("react.forward_ref"),De=Symbol.for("react.suspense"),he=Symbol.for("react.suspense_list"),Xe=Symbol.for("react.memo"),et=Symbol.for("react.lazy"),Ie=Symbol.for("react.offscreen"),W=Symbol.iterator;function ae(e){return e===null||typeof e!="object"?null:(e=W&&e[W]||e["@@iterator"],typeof e=="function"?e:null)}var Y=Object.assign,S;function M(e){if(S===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);S=t&&t[1]||""}return`
35
+ `+S+e}var de=!1;function ye(e,t){if(!e||de)return"";de=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(t,[])}catch(E){var o=E}Reflect.construct(e,[],t)}else{try{t.call()}catch(E){o=E}e.call(t.prototype)}else{try{throw Error()}catch(E){o=E}e()}}catch(E){if(E&&o&&typeof E.stack=="string"){for(var r=E.stack.split(`
36
+ `),l=o.stack.split(`
37
+ `),u=r.length-1,f=l.length-1;1<=u&&0<=f&&r[u]!==l[f];)f--;for(;1<=u&&0<=f;u--,f--)if(r[u]!==l[f]){if(u!==1||f!==1)do if(u--,f--,0>f||r[u]!==l[f]){var v=`
38
+ `+r[u].replace(" at new "," at ");return e.displayName&&v.includes("<anonymous>")&&(v=v.replace("<anonymous>",e.displayName)),v}while(1<=u&&0<=f);break}}}finally{de=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?M(e):""}function me(e){switch(e.tag){case 5:return M(e.type);case 16:return M("Lazy");case 13:return M("Suspense");case 19:return M("SuspenseList");case 0:case 2:case 15:return e=ye(e.type,!1),e;case 11:return e=ye(e.type.render,!1),e;case 1:return e=ye(e.type,!0),e;default:return""}}function Pe(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case j:return"Fragment";case je:return"Portal";case Se:return"Profiler";case J:return"StrictMode";case De:return"Suspense";case he:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Fe:return(e.displayName||"Context")+".Consumer";case ie:return(e._context.displayName||"Context")+".Provider";case Te:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Xe:return t=e.displayName||null,t!==null?t:Pe(e.type)||"Memo";case et:t=e._payload,e=e._init;try{return Pe(e(t))}catch{}}return null}function Ce(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Pe(t);case 8:return t===J?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function we(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Ue(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function ct(e){var t=Ue(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),o=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var r=n.get,l=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return r.call(this)},set:function(u){o=""+u,l.call(this,u)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return o},setValue:function(u){o=""+u},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function An(e){e._valueTracker||(e._valueTracker=ct(e))}function tt(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),o="";return e&&(o=Ue(e)?e.checked?"true":"false":e.value),e=o,e!==n?(t.setValue(e),!0):!1}function Tt(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Mn(e,t){var n=t.checked;return Y({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function No(e,t){var n=t.defaultValue==null?"":t.defaultValue,o=t.checked!=null?t.checked:t.defaultChecked;n=we(t.value!=null?t.value:n),e._wrapperState={initialChecked:o,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function At(e,t){t=t.checked,t!=null&&ue(e,"checked",t,!1)}function Nn(e,t){At(e,t);var n=we(t.value),o=t.type;if(n!=null)o==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(o==="submit"||o==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?gn(e,t.type,n):t.hasOwnProperty("defaultValue")&&gn(e,t.type,we(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function co(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var o=t.type;if(!(o!=="submit"&&o!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function gn(e,t,n){(t!=="number"||Tt(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var pe=Array.isArray;function Qe(e,t,n,o){if(e=e.options,t){t={};for(var r=0;r<n.length;r++)t["$"+n[r]]=!0;for(n=0;n<e.length;n++)r=t.hasOwnProperty("$"+e[n].value),e[n].selected!==r&&(e[n].selected=r),r&&o&&(e[n].defaultSelected=!0)}else{for(n=""+we(n),t=null,r=0;r<e.length;r++){if(e[r].value===n){e[r].selected=!0,o&&(e[r].defaultSelected=!0);return}t!==null||e[r].disabled||(t=e[r])}t!==null&&(t.selected=!0)}}function gt(e,t){if(t.dangerouslySetInnerHTML!=null)throw Error(s(91));return Y({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function Lo(e,t){var n=t.value;if(n==null){if(n=t.children,t=t.defaultValue,n!=null){if(t!=null)throw Error(s(92));if(pe(n)){if(1<n.length)throw Error(s(93));n=n[0]}t=n}t==null&&(t=""),n=t}e._wrapperState={initialValue:we(n)}}function tn(e,t){var n=we(t.value),o=we(t.defaultValue);n!=null&&(n=""+n,n!==e.value&&(e.value=n),t.defaultValue==null&&e.defaultValue!==n&&(e.defaultValue=n)),o!=null&&(e.defaultValue=""+o)}function Ln(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}function da(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function uo(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?da(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var Mt,Bt=(function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,n,o,r){MSApp.execUnsafeLocalFunction(function(){return e(t,n,o,r)})}:e})(function(e,t){if(e.namespaceURI!=="http://www.w3.org/2000/svg"||"innerHTML"in e)e.innerHTML=t;else{for(Mt=Mt||document.createElement("div"),Mt.innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=Mt.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function zn(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var nn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ji=["Webkit","ms","Moz","O"];Object.keys(nn).forEach(function(e){ji.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),nn[t]=nn[e]})});function qt(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||nn.hasOwnProperty(e)&&nn[e]?(""+t).trim():t+"px"}function pa(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var o=n.indexOf("--")===0,r=qt(n,t[n],o);n==="float"&&(n="cssFloat"),o?e.setProperty(n,r):e[n]=r}}var sr=Y({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function zo(e,t){if(t){if(sr[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(s(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(s(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(s(61))}if(t.style!=null&&typeof t.style!="object")throw Error(s(62))}}function ga(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Do=null;function Dn(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Io=null,on=null,an=null;function lr(e){if(e=za(e)){if(typeof Io!="function")throw Error(s(280));var t=e.stateNode;t&&(t=Tr(t),Io(e.stateNode,e.type,t))}}function fa(e){on?an?an.push(e):an=[e]:on=e}function cr(){if(on){var e=on,t=an;if(an=on=null,lr(e),t)for(e=0;e<t.length;e++)lr(t[e])}}function ha(e,t){return e(t)}function po(){}var In=!1;function ur(e,t,n){if(In)return e(t,n);In=!0;try{return ha(e,t,n)}finally{In=!1,(on!==null||an!==null)&&(po(),cr())}}function go(e,t){var n=e.stateNode;if(n===null)return null;var o=Tr(n);if(o===null)return null;n=o[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(o=!o.disabled)||(e=e.type,o=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!o;break e;default:e=!1}if(e)return null;if(n&&typeof n!="function")throw Error(s(231,t,typeof n));return n}var y=!1;if(m)try{var k={};Object.defineProperty(k,"passive",{get:function(){y=!0}}),window.addEventListener("test",k,k),window.removeEventListener("test",k,k)}catch{y=!1}function _(e,t,n,o,r,l,u,f,v){var E=Array.prototype.slice.call(arguments,3);try{t.apply(n,E)}catch(D){this.onError(D)}}var L=!1,H=null,oe=!1,ce=null,Z={onError:function(e){L=!0,H=e}};function ee(e,t,n,o,r,l,u,f,v){L=!1,H=null,_.apply(Z,arguments)}function $(e,t,n,o,r,l,u,f,v){if(ee.apply(this,arguments),L){if(L){var E=H;L=!1,H=null}else throw Error(s(198));oe||(oe=!0,ce=E)}}function Q(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,(t.flags&4098)!==0&&(n=t.return),e=t.return;while(e)}return t.tag===3?n:null}function ve(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function Re(e){if(Q(e)!==e)throw Error(s(188))}function it(e){var t=e.alternate;if(!t){if(t=Q(e),t===null)throw Error(s(188));return t!==e?null:e}for(var n=e,o=t;;){var r=n.return;if(r===null)break;var l=r.alternate;if(l===null){if(o=r.return,o!==null){n=o;continue}break}if(r.child===l.child){for(l=r.child;l;){if(l===n)return Re(r),e;if(l===o)return Re(r),t;l=l.sibling}throw Error(s(188))}if(n.return!==o.return)n=r,o=l;else{for(var u=!1,f=r.child;f;){if(f===n){u=!0,n=r,o=l;break}if(f===o){u=!0,o=r,n=l;break}f=f.sibling}if(!u){for(f=l.child;f;){if(f===n){u=!0,n=l,o=r;break}if(f===o){u=!0,o=l,n=r;break}f=f.sibling}if(!u)throw Error(s(189))}}if(n.alternate!==o)throw Error(s(190))}if(n.tag!==3)throw Error(s(188));return n.stateNode.current===n?e:t}function Oe(e){return e=it(e),e!==null?_e(e):null}function _e(e){if(e.tag===5||e.tag===6)return e;for(e=e.child;e!==null;){var t=_e(e);if(t!==null)return t;e=e.sibling}return null}var Ye=i.unstable_scheduleCallback,fn=i.unstable_cancelCallback,fo=i.unstable_shouldYield,Kt=i.unstable_requestPaint,Ne=i.unstable_now,ma=i.unstable_getCurrentPriorityLevel,hn=i.unstable_ImmediatePriority,rn=i.unstable_UserBlockingPriority,mn=i.unstable_NormalPriority,Oo=i.unstable_LowPriority,Ee=i.unstable_IdlePriority,Ve=null,ft=null;function ho(e){if(ft&&typeof ft.onCommitFiberRoot=="function")try{ft.onCommitFiberRoot(Ve,e,void 0,(e.current.flags&128)===128)}catch{}}var Le=Math.clz32?Math.clz32:_i,On=Math.log,dr=Math.LN2;function _i(e){return e>>>=0,e===0?32:31-(On(e)/dr|0)|0}var pr=64,gr=4194304;function ya(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function fr(e,t){var n=e.pendingLanes;if(n===0)return 0;var o=0,r=e.suspendedLanes,l=e.pingedLanes,u=n&268435455;if(u!==0){var f=u&~r;f!==0?o=ya(f):(l&=u,l!==0&&(o=ya(l)))}else u=n&~r,u!==0?o=ya(u):l!==0&&(o=ya(l));if(o===0)return 0;if(t!==0&&t!==o&&(t&r)===0&&(r=o&-o,l=t&-t,r>=l||r===16&&(l&4194240)!==0))return t;if((o&4)!==0&&(o|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=o;0<t;)n=31-Le(t),r=1<<n,o|=e[n],t&=~r;return o}function _p(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Tp(e,t){for(var n=e.suspendedLanes,o=e.pingedLanes,r=e.expirationTimes,l=e.pendingLanes;0<l;){var u=31-Le(l),f=1<<u,v=r[u];v===-1?((f&n)===0||(f&o)!==0)&&(r[u]=_p(f,t)):v<=t&&(e.expiredLanes|=f),l&=~f}}function Ti(e){return e=e.pendingLanes&-1073741825,e!==0?e:e&1073741824?1073741824:0}function Wl(){var e=pr;return pr<<=1,(pr&4194240)===0&&(pr=64),e}function Ai(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function va(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Le(t),e[t]=n}function Ap(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var o=e.eventTimes;for(e=e.expirationTimes;0<n;){var r=31-Le(n),l=1<<r;t[r]=0,o[r]=-1,e[r]=-1,n&=~l}}function Mi(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var o=31-Le(n),r=1<<o;r&t|e[o]&t&&(e[o]|=t),n&=~r}}var Be=0;function Fl(e){return e&=-e,1<e?4<e?(e&268435455)!==0?16:536870912:4:1}var Ul,Ni,Vl,Hl,Yl,Li=!1,hr=[],Bn=null,Wn=null,Fn=null,Pa=new Map,wa=new Map,Un=[],Mp="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function ql(e,t){switch(e){case"focusin":case"focusout":Bn=null;break;case"dragenter":case"dragleave":Wn=null;break;case"mouseover":case"mouseout":Fn=null;break;case"pointerover":case"pointerout":Pa.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":wa.delete(t.pointerId)}}function Sa(e,t,n,o,r,l){return e===null||e.nativeEvent!==l?(e={blockedOn:t,domEventName:n,eventSystemFlags:o,nativeEvent:l,targetContainers:[r]},t!==null&&(t=za(t),t!==null&&Ni(t)),e):(e.eventSystemFlags|=o,t=e.targetContainers,r!==null&&t.indexOf(r)===-1&&t.push(r),e)}function Np(e,t,n,o,r){switch(t){case"focusin":return Bn=Sa(Bn,e,t,n,o,r),!0;case"dragenter":return Wn=Sa(Wn,e,t,n,o,r),!0;case"mouseover":return Fn=Sa(Fn,e,t,n,o,r),!0;case"pointerover":var l=r.pointerId;return Pa.set(l,Sa(Pa.get(l)||null,e,t,n,o,r)),!0;case"gotpointercapture":return l=r.pointerId,wa.set(l,Sa(wa.get(l)||null,e,t,n,o,r)),!0}return!1}function Kl(e){var t=mo(e.target);if(t!==null){var n=Q(t);if(n!==null){if(t=n.tag,t===13){if(t=ve(n),t!==null){e.blockedOn=t,Yl(e.priority,function(){Vl(n)});return}}else if(t===3&&n.stateNode.current.memoizedState.isDehydrated){e.blockedOn=n.tag===3?n.stateNode.containerInfo:null;return}}}e.blockedOn=null}function mr(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var n=Di(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(n===null){n=e.nativeEvent;var o=new n.constructor(n.type,n);Do=o,n.target.dispatchEvent(o),Do=null}else return t=za(n),t!==null&&Ni(t),e.blockedOn=n,!1;t.shift()}return!0}function $l(e,t,n){mr(e)&&n.delete(t)}function Lp(){Li=!1,Bn!==null&&mr(Bn)&&(Bn=null),Wn!==null&&mr(Wn)&&(Wn=null),Fn!==null&&mr(Fn)&&(Fn=null),Pa.forEach($l),wa.forEach($l)}function ka(e,t){e.blockedOn===t&&(e.blockedOn=null,Li||(Li=!0,i.unstable_scheduleCallback(i.unstable_NormalPriority,Lp)))}function ba(e){function t(r){return ka(r,e)}if(0<hr.length){ka(hr[0],e);for(var n=1;n<hr.length;n++){var o=hr[n];o.blockedOn===e&&(o.blockedOn=null)}}for(Bn!==null&&ka(Bn,e),Wn!==null&&ka(Wn,e),Fn!==null&&ka(Fn,e),Pa.forEach(t),wa.forEach(t),n=0;n<Un.length;n++)o=Un[n],o.blockedOn===e&&(o.blockedOn=null);for(;0<Un.length&&(n=Un[0],n.blockedOn===null);)Kl(n),n.blockedOn===null&&Un.shift()}var Bo=re.ReactCurrentBatchConfig,yr=!0;function zp(e,t,n,o){var r=Be,l=Bo.transition;Bo.transition=null;try{Be=1,zi(e,t,n,o)}finally{Be=r,Bo.transition=l}}function Dp(e,t,n,o){var r=Be,l=Bo.transition;Bo.transition=null;try{Be=4,zi(e,t,n,o)}finally{Be=r,Bo.transition=l}}function zi(e,t,n,o){if(yr){var r=Di(e,t,n,o);if(r===null)Xi(e,t,o,vr,n),ql(e,o);else if(Np(r,e,t,n,o))o.stopPropagation();else if(ql(e,o),t&4&&-1<Mp.indexOf(e)){for(;r!==null;){var l=za(r);if(l!==null&&Ul(l),l=Di(e,t,n,o),l===null&&Xi(e,t,o,vr,n),l===r)break;r=l}r!==null&&o.stopPropagation()}else Xi(e,t,o,null,n)}}var vr=null;function Di(e,t,n,o){if(vr=null,e=Dn(o),e=mo(e),e!==null)if(t=Q(e),t===null)e=null;else if(n=t.tag,n===13){if(e=ve(t),e!==null)return e;e=null}else if(n===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return vr=e,null}function Gl(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(ma()){case hn:return 1;case rn:return 4;case mn:case Oo:return 16;case Ee:return 536870912;default:return 16}default:return 16}}var Vn=null,Ii=null,Pr=null;function Ql(){if(Pr)return Pr;var e,t=Ii,n=t.length,o,r="value"in Vn?Vn.value:Vn.textContent,l=r.length;for(e=0;e<n&&t[e]===r[e];e++);var u=n-e;for(o=1;o<=u&&t[n-o]===r[l-o];o++);return Pr=r.slice(e,1<o?1-o:void 0)}function wr(e){var t=e.keyCode;return"charCode"in e?(e=e.charCode,e===0&&t===13&&(e=13)):e=t,e===10&&(e=13),32<=e||e===13?e:0}function Sr(){return!0}function Jl(){return!1}function Nt(e){function t(n,o,r,l,u){this._reactName=n,this._targetInst=r,this.type=o,this.nativeEvent=l,this.target=u,this.currentTarget=null;for(var f in e)e.hasOwnProperty(f)&&(n=e[f],this[f]=n?n(l):l[f]);return this.isDefaultPrevented=(l.defaultPrevented!=null?l.defaultPrevented:l.returnValue===!1)?Sr:Jl,this.isPropagationStopped=Jl,this}return Y(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var n=this.nativeEvent;n&&(n.preventDefault?n.preventDefault():typeof n.returnValue!="unknown"&&(n.returnValue=!1),this.isDefaultPrevented=Sr)},stopPropagation:function(){var n=this.nativeEvent;n&&(n.stopPropagation?n.stopPropagation():typeof n.cancelBubble!="unknown"&&(n.cancelBubble=!0),this.isPropagationStopped=Sr)},persist:function(){},isPersistent:Sr}),t}var Wo={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Oi=Nt(Wo),xa=Y({},Wo,{view:0,detail:0}),Ip=Nt(xa),Bi,Wi,Ra,kr=Y({},xa,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Ui,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==Ra&&(Ra&&e.type==="mousemove"?(Bi=e.screenX-Ra.screenX,Wi=e.screenY-Ra.screenY):Wi=Bi=0,Ra=e),Bi)},movementY:function(e){return"movementY"in e?e.movementY:Wi}}),Zl=Nt(kr),Op=Y({},kr,{dataTransfer:0}),Bp=Nt(Op),Wp=Y({},xa,{relatedTarget:0}),Fi=Nt(Wp),Fp=Y({},Wo,{animationName:0,elapsedTime:0,pseudoElement:0}),Up=Nt(Fp),Vp=Y({},Wo,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),Hp=Nt(Vp),Yp=Y({},Wo,{data:0}),Xl=Nt(Yp),qp={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Kp={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},$p={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Gp(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=$p[e])?!!t[e]:!1}function Ui(){return Gp}var Qp=Y({},xa,{key:function(e){if(e.key){var t=qp[e.key]||e.key;if(t!=="Unidentified")return t}return e.type==="keypress"?(e=wr(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?Kp[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Ui,charCode:function(e){return e.type==="keypress"?wr(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?wr(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),Jp=Nt(Qp),Zp=Y({},kr,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),ec=Nt(Zp),Xp=Y({},xa,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Ui}),eg=Nt(Xp),tg=Y({},Wo,{propertyName:0,elapsedTime:0,pseudoElement:0}),ng=Nt(tg),og=Y({},kr,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),ag=Nt(og),rg=[9,13,27,32],Vi=m&&"CompositionEvent"in window,Ca=null;m&&"documentMode"in document&&(Ca=document.documentMode);var ig=m&&"TextEvent"in window&&!Ca,tc=m&&(!Vi||Ca&&8<Ca&&11>=Ca),nc=" ",oc=!1;function ac(e,t){switch(e){case"keyup":return rg.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function rc(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Fo=!1;function sg(e,t){switch(e){case"compositionend":return rc(t);case"keypress":return t.which!==32?null:(oc=!0,nc);case"textInput":return e=t.data,e===nc&&oc?null:e;default:return null}}function lg(e,t){if(Fo)return e==="compositionend"||!Vi&&ac(e,t)?(e=Ql(),Pr=Ii=Vn=null,Fo=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return tc&&t.locale!=="ko"?null:t.data;default:return null}}var cg={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function ic(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t==="input"?!!cg[e.type]:t==="textarea"}function sc(e,t,n,o){fa(o),t=Er(t,"onChange"),0<t.length&&(n=new Oi("onChange","change",null,n,o),e.push({event:n,listeners:t}))}var Ea=null,ja=null;function ug(e){Rc(e,0)}function br(e){var t=qo(e);if(tt(t))return e}function dg(e,t){if(e==="change")return t}var lc=!1;if(m){var Hi;if(m){var Yi="oninput"in document;if(!Yi){var cc=document.createElement("div");cc.setAttribute("oninput","return;"),Yi=typeof cc.oninput=="function"}Hi=Yi}else Hi=!1;lc=Hi&&(!document.documentMode||9<document.documentMode)}function uc(){Ea&&(Ea.detachEvent("onpropertychange",dc),ja=Ea=null)}function dc(e){if(e.propertyName==="value"&&br(ja)){var t=[];sc(t,ja,e,Dn(e)),ur(ug,t)}}function pg(e,t,n){e==="focusin"?(uc(),Ea=t,ja=n,Ea.attachEvent("onpropertychange",dc)):e==="focusout"&&uc()}function gg(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return br(ja)}function fg(e,t){if(e==="click")return br(t)}function hg(e,t){if(e==="input"||e==="change")return br(t)}function mg(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var $t=typeof Object.is=="function"?Object.is:mg;function _a(e,t){if($t(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;var n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(o=0;o<n.length;o++){var r=n[o];if(!h.call(t,r)||!$t(e[r],t[r]))return!1}return!0}function pc(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function gc(e,t){var n=pc(e);e=0;for(var o;n;){if(n.nodeType===3){if(o=e+n.textContent.length,e<=t&&o>=t)return{node:n,offset:t-e};e=o}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=pc(n)}}function fc(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?fc(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function hc(){for(var e=window,t=Tt();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Tt(e.document)}return t}function qi(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function yg(e){var t=hc(),n=e.focusedElem,o=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&fc(n.ownerDocument.documentElement,n)){if(o!==null&&qi(n)){if(t=o.start,e=o.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var r=n.textContent.length,l=Math.min(o.start,r);o=o.end===void 0?l:Math.min(o.end,r),!e.extend&&l>o&&(r=o,o=l,l=r),r=gc(n,l);var u=gc(n,o);r&&u&&(e.rangeCount!==1||e.anchorNode!==r.node||e.anchorOffset!==r.offset||e.focusNode!==u.node||e.focusOffset!==u.offset)&&(t=t.createRange(),t.setStart(r.node,r.offset),e.removeAllRanges(),l>o?(e.addRange(t),e.extend(u.node,u.offset)):(t.setEnd(u.node,u.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n<t.length;n++)e=t[n],e.element.scrollLeft=e.left,e.element.scrollTop=e.top}}var vg=m&&"documentMode"in document&&11>=document.documentMode,Uo=null,Ki=null,Ta=null,$i=!1;function mc(e,t,n){var o=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;$i||Uo==null||Uo!==Tt(o)||(o=Uo,"selectionStart"in o&&qi(o)?o={start:o.selectionStart,end:o.selectionEnd}:(o=(o.ownerDocument&&o.ownerDocument.defaultView||window).getSelection(),o={anchorNode:o.anchorNode,anchorOffset:o.anchorOffset,focusNode:o.focusNode,focusOffset:o.focusOffset}),Ta&&_a(Ta,o)||(Ta=o,o=Er(Ki,"onSelect"),0<o.length&&(t=new Oi("onSelect","select",null,t,n),e.push({event:t,listeners:o}),t.target=Uo)))}function xr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var Vo={animationend:xr("Animation","AnimationEnd"),animationiteration:xr("Animation","AnimationIteration"),animationstart:xr("Animation","AnimationStart"),transitionend:xr("Transition","TransitionEnd")},Gi={},yc={};m&&(yc=document.createElement("div").style,"AnimationEvent"in window||(delete Vo.animationend.animation,delete Vo.animationiteration.animation,delete Vo.animationstart.animation),"TransitionEvent"in window||delete Vo.transitionend.transition);function Rr(e){if(Gi[e])return Gi[e];if(!Vo[e])return e;var t=Vo[e],n;for(n in t)if(t.hasOwnProperty(n)&&n in yc)return Gi[e]=t[n];return e}var vc=Rr("animationend"),Pc=Rr("animationiteration"),wc=Rr("animationstart"),Sc=Rr("transitionend"),kc=new Map,bc="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Hn(e,t){kc.set(e,t),p(t,[e])}for(var Qi=0;Qi<bc.length;Qi++){var Ji=bc[Qi],Pg=Ji.toLowerCase(),wg=Ji[0].toUpperCase()+Ji.slice(1);Hn(Pg,"on"+wg)}Hn(vc,"onAnimationEnd"),Hn(Pc,"onAnimationIteration"),Hn(wc,"onAnimationStart"),Hn("dblclick","onDoubleClick"),Hn("focusin","onFocus"),Hn("focusout","onBlur"),Hn(Sc,"onTransitionEnd"),g("onMouseEnter",["mouseout","mouseover"]),g("onMouseLeave",["mouseout","mouseover"]),g("onPointerEnter",["pointerout","pointerover"]),g("onPointerLeave",["pointerout","pointerover"]),p("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),p("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),p("onBeforeInput",["compositionend","keypress","textInput","paste"]),p("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),p("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),p("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Aa="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Sg=new Set("cancel close invalid load scroll toggle".split(" ").concat(Aa));function xc(e,t,n){var o=e.type||"unknown-event";e.currentTarget=n,$(o,t,void 0,e),e.currentTarget=null}function Rc(e,t){t=(t&4)!==0;for(var n=0;n<e.length;n++){var o=e[n],r=o.event;o=o.listeners;e:{var l=void 0;if(t)for(var u=o.length-1;0<=u;u--){var f=o[u],v=f.instance,E=f.currentTarget;if(f=f.listener,v!==l&&r.isPropagationStopped())break e;xc(r,f,E),l=v}else for(u=0;u<o.length;u++){if(f=o[u],v=f.instance,E=f.currentTarget,f=f.listener,v!==l&&r.isPropagationStopped())break e;xc(r,f,E),l=v}}}if(oe)throw e=ce,oe=!1,ce=null,e}function qe(e,t){var n=t[rs];n===void 0&&(n=t[rs]=new Set);var o=e+"__bubble";n.has(o)||(Cc(t,e,2,!1),n.add(o))}function Zi(e,t,n){var o=0;t&&(o|=4),Cc(n,e,o,t)}var Cr="_reactListening"+Math.random().toString(36).slice(2);function Ma(e){if(!e[Cr]){e[Cr]=!0,c.forEach(function(n){n!=="selectionchange"&&(Sg.has(n)||Zi(n,!1,e),Zi(n,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[Cr]||(t[Cr]=!0,Zi("selectionchange",!1,t))}}function Cc(e,t,n,o){switch(Gl(t)){case 1:var r=zp;break;case 4:r=Dp;break;default:r=zi}n=r.bind(null,t,n,e),r=void 0,!y||t!=="touchstart"&&t!=="touchmove"&&t!=="wheel"||(r=!0),o?r!==void 0?e.addEventListener(t,n,{capture:!0,passive:r}):e.addEventListener(t,n,!0):r!==void 0?e.addEventListener(t,n,{passive:r}):e.addEventListener(t,n,!1)}function Xi(e,t,n,o,r){var l=o;if((t&1)===0&&(t&2)===0&&o!==null)e:for(;;){if(o===null)return;var u=o.tag;if(u===3||u===4){var f=o.stateNode.containerInfo;if(f===r||f.nodeType===8&&f.parentNode===r)break;if(u===4)for(u=o.return;u!==null;){var v=u.tag;if((v===3||v===4)&&(v=u.stateNode.containerInfo,v===r||v.nodeType===8&&v.parentNode===r))return;u=u.return}for(;f!==null;){if(u=mo(f),u===null)return;if(v=u.tag,v===5||v===6){o=l=u;continue e}f=f.parentNode}}o=o.return}ur(function(){var E=l,D=Dn(n),I=[];e:{var z=kc.get(e);if(z!==void 0){var K=Oi,X=e;switch(e){case"keypress":if(wr(n)===0)break e;case"keydown":case"keyup":K=Jp;break;case"focusin":X="focus",K=Fi;break;case"focusout":X="blur",K=Fi;break;case"beforeblur":case"afterblur":K=Fi;break;case"click":if(n.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":K=Zl;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":K=Bp;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":K=eg;break;case vc:case Pc:case wc:K=Up;break;case Sc:K=ng;break;case"scroll":K=Ip;break;case"wheel":K=ag;break;case"copy":case"cut":case"paste":K=Hp;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":K=ec}var te=(t&4)!==0,ot=!te&&e==="scroll",b=te?z!==null?z+"Capture":null:z;te=[];for(var w=E,C;w!==null;){C=w;var F=C.stateNode;if(C.tag===5&&F!==null&&(C=F,b!==null&&(F=go(w,b),F!=null&&te.push(Na(w,F,C)))),ot)break;w=w.return}0<te.length&&(z=new K(z,X,null,n,D),I.push({event:z,listeners:te}))}}if((t&7)===0){e:{if(z=e==="mouseover"||e==="pointerover",K=e==="mouseout"||e==="pointerout",z&&n!==Do&&(X=n.relatedTarget||n.fromElement)&&(mo(X)||X[yn]))break e;if((K||z)&&(z=D.window===D?D:(z=D.ownerDocument)?z.defaultView||z.parentWindow:window,K?(X=n.relatedTarget||n.toElement,K=E,X=X?mo(X):null,X!==null&&(ot=Q(X),X!==ot||X.tag!==5&&X.tag!==6)&&(X=null)):(K=null,X=E),K!==X)){if(te=Zl,F="onMouseLeave",b="onMouseEnter",w="mouse",(e==="pointerout"||e==="pointerover")&&(te=ec,F="onPointerLeave",b="onPointerEnter",w="pointer"),ot=K==null?z:qo(K),C=X==null?z:qo(X),z=new te(F,w+"leave",K,n,D),z.target=ot,z.relatedTarget=C,F=null,mo(D)===E&&(te=new te(b,w+"enter",X,n,D),te.target=C,te.relatedTarget=ot,F=te),ot=F,K&&X)t:{for(te=K,b=X,w=0,C=te;C;C=Ho(C))w++;for(C=0,F=b;F;F=Ho(F))C++;for(;0<w-C;)te=Ho(te),w--;for(;0<C-w;)b=Ho(b),C--;for(;w--;){if(te===b||b!==null&&te===b.alternate)break t;te=Ho(te),b=Ho(b)}te=null}else te=null;K!==null&&Ec(I,z,K,te,!1),X!==null&&ot!==null&&Ec(I,ot,X,te,!0)}}e:{if(z=E?qo(E):window,K=z.nodeName&&z.nodeName.toLowerCase(),K==="select"||K==="input"&&z.type==="file")var ne=dg;else if(ic(z))if(lc)ne=hg;else{ne=gg;var se=pg}else(K=z.nodeName)&&K.toLowerCase()==="input"&&(z.type==="checkbox"||z.type==="radio")&&(ne=fg);if(ne&&(ne=ne(e,E))){sc(I,ne,n,D);break e}se&&se(e,z,E),e==="focusout"&&(se=z._wrapperState)&&se.controlled&&z.type==="number"&&gn(z,"number",z.value)}switch(se=E?qo(E):window,e){case"focusin":(ic(se)||se.contentEditable==="true")&&(Uo=se,Ki=E,Ta=null);break;case"focusout":Ta=Ki=Uo=null;break;case"mousedown":$i=!0;break;case"contextmenu":case"mouseup":case"dragend":$i=!1,mc(I,n,D);break;case"selectionchange":if(vg)break;case"keydown":case"keyup":mc(I,n,D)}var le;if(Vi)e:{switch(e){case"compositionstart":var ge="onCompositionStart";break e;case"compositionend":ge="onCompositionEnd";break e;case"compositionupdate":ge="onCompositionUpdate";break e}ge=void 0}else Fo?ac(e,n)&&(ge="onCompositionEnd"):e==="keydown"&&n.keyCode===229&&(ge="onCompositionStart");ge&&(tc&&n.locale!=="ko"&&(Fo||ge!=="onCompositionStart"?ge==="onCompositionEnd"&&Fo&&(le=Ql()):(Vn=D,Ii="value"in Vn?Vn.value:Vn.textContent,Fo=!0)),se=Er(E,ge),0<se.length&&(ge=new Xl(ge,e,null,n,D),I.push({event:ge,listeners:se}),le?ge.data=le:(le=rc(n),le!==null&&(ge.data=le)))),(le=ig?sg(e,n):lg(e,n))&&(E=Er(E,"onBeforeInput"),0<E.length&&(D=new Xl("onBeforeInput","beforeinput",null,n,D),I.push({event:D,listeners:E}),D.data=le))}Rc(I,t)})}function Na(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Er(e,t){for(var n=t+"Capture",o=[];e!==null;){var r=e,l=r.stateNode;r.tag===5&&l!==null&&(r=l,l=go(e,n),l!=null&&o.unshift(Na(e,l,r)),l=go(e,t),l!=null&&o.push(Na(e,l,r))),e=e.return}return o}function Ho(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5);return e||null}function Ec(e,t,n,o,r){for(var l=t._reactName,u=[];n!==null&&n!==o;){var f=n,v=f.alternate,E=f.stateNode;if(v!==null&&v===o)break;f.tag===5&&E!==null&&(f=E,r?(v=go(n,l),v!=null&&u.unshift(Na(n,v,f))):r||(v=go(n,l),v!=null&&u.push(Na(n,v,f)))),n=n.return}u.length!==0&&e.push({event:t,listeners:u})}var kg=/\r\n?/g,bg=/\u0000|\uFFFD/g;function jc(e){return(typeof e=="string"?e:""+e).replace(kg,`
39
+ `).replace(bg,"")}function jr(e,t,n){if(t=jc(t),jc(e)!==t&&n)throw Error(s(425))}function _r(){}var es=null,ts=null;function ns(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var os=typeof setTimeout=="function"?setTimeout:void 0,xg=typeof clearTimeout=="function"?clearTimeout:void 0,_c=typeof Promise=="function"?Promise:void 0,Rg=typeof queueMicrotask=="function"?queueMicrotask:typeof _c<"u"?function(e){return _c.resolve(null).then(e).catch(Cg)}:os;function Cg(e){setTimeout(function(){throw e})}function as(e,t){var n=t,o=0;do{var r=n.nextSibling;if(e.removeChild(n),r&&r.nodeType===8)if(n=r.data,n==="/$"){if(o===0){e.removeChild(r),ba(t);return}o--}else n!=="$"&&n!=="$?"&&n!=="$!"||o++;n=r}while(n);ba(t)}function Yn(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?")break;if(t==="/$")return null}}return e}function Tc(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="$"||n==="$!"||n==="$?"){if(t===0)return e;t--}else n==="/$"&&t++}e=e.previousSibling}return null}var Yo=Math.random().toString(36).slice(2),sn="__reactFiber$"+Yo,La="__reactProps$"+Yo,yn="__reactContainer$"+Yo,rs="__reactEvents$"+Yo,Eg="__reactListeners$"+Yo,jg="__reactHandles$"+Yo;function mo(e){var t=e[sn];if(t)return t;for(var n=e.parentNode;n;){if(t=n[yn]||n[sn]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=Tc(e);e!==null;){if(n=e[sn])return n;e=Tc(e)}return t}e=n,n=e.parentNode}return null}function za(e){return e=e[sn]||e[yn],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function qo(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(s(33))}function Tr(e){return e[La]||null}var is=[],Ko=-1;function qn(e){return{current:e}}function Ke(e){0>Ko||(e.current=is[Ko],is[Ko]=null,Ko--)}function He(e,t){Ko++,is[Ko]=e.current,e.current=t}var Kn={},yt=qn(Kn),bt=qn(!1),yo=Kn;function $o(e,t){var n=e.type.contextTypes;if(!n)return Kn;var o=e.stateNode;if(o&&o.__reactInternalMemoizedUnmaskedChildContext===t)return o.__reactInternalMemoizedMaskedChildContext;var r={},l;for(l in n)r[l]=t[l];return o&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=r),r}function xt(e){return e=e.childContextTypes,e!=null}function Ar(){Ke(bt),Ke(yt)}function Ac(e,t,n){if(yt.current!==Kn)throw Error(s(168));He(yt,t),He(bt,n)}function Mc(e,t,n){var o=e.stateNode;if(t=t.childContextTypes,typeof o.getChildContext!="function")return n;o=o.getChildContext();for(var r in o)if(!(r in t))throw Error(s(108,Ce(e)||"Unknown",r));return Y({},n,o)}function Mr(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Kn,yo=yt.current,He(yt,e),He(bt,bt.current),!0}function Nc(e,t,n){var o=e.stateNode;if(!o)throw Error(s(169));n?(e=Mc(e,t,yo),o.__reactInternalMemoizedMergedChildContext=e,Ke(bt),Ke(yt),He(yt,e)):Ke(bt),He(bt,n)}var vn=null,Nr=!1,ss=!1;function Lc(e){vn===null?vn=[e]:vn.push(e)}function _g(e){Nr=!0,Lc(e)}function $n(){if(!ss&&vn!==null){ss=!0;var e=0,t=Be;try{var n=vn;for(Be=1;e<n.length;e++){var o=n[e];do o=o(!0);while(o!==null)}vn=null,Nr=!1}catch(r){throw vn!==null&&(vn=vn.slice(e+1)),Ye(hn,$n),r}finally{Be=t,ss=!1}}return null}var Go=[],Qo=0,Lr=null,zr=0,Wt=[],Ft=0,vo=null,Pn=1,wn="";function Po(e,t){Go[Qo++]=zr,Go[Qo++]=Lr,Lr=e,zr=t}function zc(e,t,n){Wt[Ft++]=Pn,Wt[Ft++]=wn,Wt[Ft++]=vo,vo=e;var o=Pn;e=wn;var r=32-Le(o)-1;o&=~(1<<r),n+=1;var l=32-Le(t)+r;if(30<l){var u=r-r%5;l=(o&(1<<u)-1).toString(32),o>>=u,r-=u,Pn=1<<32-Le(t)+r|n<<r|o,wn=l+e}else Pn=1<<l|n<<r|o,wn=e}function ls(e){e.return!==null&&(Po(e,1),zc(e,1,0))}function cs(e){for(;e===Lr;)Lr=Go[--Qo],Go[Qo]=null,zr=Go[--Qo],Go[Qo]=null;for(;e===vo;)vo=Wt[--Ft],Wt[Ft]=null,wn=Wt[--Ft],Wt[Ft]=null,Pn=Wt[--Ft],Wt[Ft]=null}var Lt=null,zt=null,$e=!1,Gt=null;function Dc(e,t){var n=Yt(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,t=e.deletions,t===null?(e.deletions=[n],e.flags|=16):t.push(n)}function Ic(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,Lt=e,zt=Yn(t.firstChild),!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,Lt=e,zt=null,!0):!1;case 13:return t=t.nodeType!==8?null:t,t!==null?(n=vo!==null?{id:Pn,overflow:wn}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},n=Yt(18,null,null,0),n.stateNode=t,n.return=e,e.child=n,Lt=e,zt=null,!0):!1;default:return!1}}function us(e){return(e.mode&1)!==0&&(e.flags&128)===0}function ds(e){if($e){var t=zt;if(t){var n=t;if(!Ic(e,t)){if(us(e))throw Error(s(418));t=Yn(n.nextSibling);var o=Lt;t&&Ic(e,t)?Dc(o,n):(e.flags=e.flags&-4097|2,$e=!1,Lt=e)}}else{if(us(e))throw Error(s(418));e.flags=e.flags&-4097|2,$e=!1,Lt=e}}}function Oc(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;Lt=e}function Dr(e){if(e!==Lt)return!1;if(!$e)return Oc(e),$e=!0,!1;var t;if((t=e.tag!==3)&&!(t=e.tag!==5)&&(t=e.type,t=t!=="head"&&t!=="body"&&!ns(e.type,e.memoizedProps)),t&&(t=zt)){if(us(e))throw Bc(),Error(s(418));for(;t;)Dc(e,t),t=Yn(t.nextSibling)}if(Oc(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(s(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"){if(t===0){zt=Yn(e.nextSibling);break e}t--}else n!=="$"&&n!=="$!"&&n!=="$?"||t++}e=e.nextSibling}zt=null}}else zt=Lt?Yn(e.stateNode.nextSibling):null;return!0}function Bc(){for(var e=zt;e;)e=Yn(e.nextSibling)}function Jo(){zt=Lt=null,$e=!1}function ps(e){Gt===null?Gt=[e]:Gt.push(e)}var Tg=re.ReactCurrentBatchConfig;function Da(e,t,n){if(e=n.ref,e!==null&&typeof e!="function"&&typeof e!="object"){if(n._owner){if(n=n._owner,n){if(n.tag!==1)throw Error(s(309));var o=n.stateNode}if(!o)throw Error(s(147,e));var r=o,l=""+e;return t!==null&&t.ref!==null&&typeof t.ref=="function"&&t.ref._stringRef===l?t.ref:(t=function(u){var f=r.refs;u===null?delete f[l]:f[l]=u},t._stringRef=l,t)}if(typeof e!="string")throw Error(s(284));if(!n._owner)throw Error(s(290,e))}return e}function Ir(e,t){throw e=Object.prototype.toString.call(t),Error(s(31,e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Wc(e){var t=e._init;return t(e._payload)}function Fc(e){function t(b,w){if(e){var C=b.deletions;C===null?(b.deletions=[w],b.flags|=16):C.push(w)}}function n(b,w){if(!e)return null;for(;w!==null;)t(b,w),w=w.sibling;return null}function o(b,w){for(b=new Map;w!==null;)w.key!==null?b.set(w.key,w):b.set(w.index,w),w=w.sibling;return b}function r(b,w){return b=no(b,w),b.index=0,b.sibling=null,b}function l(b,w,C){return b.index=C,e?(C=b.alternate,C!==null?(C=C.index,C<w?(b.flags|=2,w):C):(b.flags|=2,w)):(b.flags|=1048576,w)}function u(b){return e&&b.alternate===null&&(b.flags|=2),b}function f(b,w,C,F){return w===null||w.tag!==6?(w=ol(C,b.mode,F),w.return=b,w):(w=r(w,C),w.return=b,w)}function v(b,w,C,F){var ne=C.type;return ne===j?D(b,w,C.props.children,F,C.key):w!==null&&(w.elementType===ne||typeof ne=="object"&&ne!==null&&ne.$$typeof===et&&Wc(ne)===w.type)?(F=r(w,C.props),F.ref=Da(b,w,C),F.return=b,F):(F=si(C.type,C.key,C.props,null,b.mode,F),F.ref=Da(b,w,C),F.return=b,F)}function E(b,w,C,F){return w===null||w.tag!==4||w.stateNode.containerInfo!==C.containerInfo||w.stateNode.implementation!==C.implementation?(w=al(C,b.mode,F),w.return=b,w):(w=r(w,C.children||[]),w.return=b,w)}function D(b,w,C,F,ne){return w===null||w.tag!==7?(w=Eo(C,b.mode,F,ne),w.return=b,w):(w=r(w,C),w.return=b,w)}function I(b,w,C){if(typeof w=="string"&&w!==""||typeof w=="number")return w=ol(""+w,b.mode,C),w.return=b,w;if(typeof w=="object"&&w!==null){switch(w.$$typeof){case xe:return C=si(w.type,w.key,w.props,null,b.mode,C),C.ref=Da(b,null,w),C.return=b,C;case je:return w=al(w,b.mode,C),w.return=b,w;case et:var F=w._init;return I(b,F(w._payload),C)}if(pe(w)||ae(w))return w=Eo(w,b.mode,C,null),w.return=b,w;Ir(b,w)}return null}function z(b,w,C,F){var ne=w!==null?w.key:null;if(typeof C=="string"&&C!==""||typeof C=="number")return ne!==null?null:f(b,w,""+C,F);if(typeof C=="object"&&C!==null){switch(C.$$typeof){case xe:return C.key===ne?v(b,w,C,F):null;case je:return C.key===ne?E(b,w,C,F):null;case et:return ne=C._init,z(b,w,ne(C._payload),F)}if(pe(C)||ae(C))return ne!==null?null:D(b,w,C,F,null);Ir(b,C)}return null}function K(b,w,C,F,ne){if(typeof F=="string"&&F!==""||typeof F=="number")return b=b.get(C)||null,f(w,b,""+F,ne);if(typeof F=="object"&&F!==null){switch(F.$$typeof){case xe:return b=b.get(F.key===null?C:F.key)||null,v(w,b,F,ne);case je:return b=b.get(F.key===null?C:F.key)||null,E(w,b,F,ne);case et:var se=F._init;return K(b,w,C,se(F._payload),ne)}if(pe(F)||ae(F))return b=b.get(C)||null,D(w,b,F,ne,null);Ir(w,F)}return null}function X(b,w,C,F){for(var ne=null,se=null,le=w,ge=w=0,pt=null;le!==null&&ge<C.length;ge++){le.index>ge?(pt=le,le=null):pt=le.sibling;var ze=z(b,le,C[ge],F);if(ze===null){le===null&&(le=pt);break}e&&le&&ze.alternate===null&&t(b,le),w=l(ze,w,ge),se===null?ne=ze:se.sibling=ze,se=ze,le=pt}if(ge===C.length)return n(b,le),$e&&Po(b,ge),ne;if(le===null){for(;ge<C.length;ge++)le=I(b,C[ge],F),le!==null&&(w=l(le,w,ge),se===null?ne=le:se.sibling=le,se=le);return $e&&Po(b,ge),ne}for(le=o(b,le);ge<C.length;ge++)pt=K(le,b,ge,C[ge],F),pt!==null&&(e&&pt.alternate!==null&&le.delete(pt.key===null?ge:pt.key),w=l(pt,w,ge),se===null?ne=pt:se.sibling=pt,se=pt);return e&&le.forEach(function(oo){return t(b,oo)}),$e&&Po(b,ge),ne}function te(b,w,C,F){var ne=ae(C);if(typeof ne!="function")throw Error(s(150));if(C=ne.call(C),C==null)throw Error(s(151));for(var se=ne=null,le=w,ge=w=0,pt=null,ze=C.next();le!==null&&!ze.done;ge++,ze=C.next()){le.index>ge?(pt=le,le=null):pt=le.sibling;var oo=z(b,le,ze.value,F);if(oo===null){le===null&&(le=pt);break}e&&le&&oo.alternate===null&&t(b,le),w=l(oo,w,ge),se===null?ne=oo:se.sibling=oo,se=oo,le=pt}if(ze.done)return n(b,le),$e&&Po(b,ge),ne;if(le===null){for(;!ze.done;ge++,ze=C.next())ze=I(b,ze.value,F),ze!==null&&(w=l(ze,w,ge),se===null?ne=ze:se.sibling=ze,se=ze);return $e&&Po(b,ge),ne}for(le=o(b,le);!ze.done;ge++,ze=C.next())ze=K(le,b,ge,ze.value,F),ze!==null&&(e&&ze.alternate!==null&&le.delete(ze.key===null?ge:ze.key),w=l(ze,w,ge),se===null?ne=ze:se.sibling=ze,se=ze);return e&&le.forEach(function(uf){return t(b,uf)}),$e&&Po(b,ge),ne}function ot(b,w,C,F){if(typeof C=="object"&&C!==null&&C.type===j&&C.key===null&&(C=C.props.children),typeof C=="object"&&C!==null){switch(C.$$typeof){case xe:e:{for(var ne=C.key,se=w;se!==null;){if(se.key===ne){if(ne=C.type,ne===j){if(se.tag===7){n(b,se.sibling),w=r(se,C.props.children),w.return=b,b=w;break e}}else if(se.elementType===ne||typeof ne=="object"&&ne!==null&&ne.$$typeof===et&&Wc(ne)===se.type){n(b,se.sibling),w=r(se,C.props),w.ref=Da(b,se,C),w.return=b,b=w;break e}n(b,se);break}else t(b,se);se=se.sibling}C.type===j?(w=Eo(C.props.children,b.mode,F,C.key),w.return=b,b=w):(F=si(C.type,C.key,C.props,null,b.mode,F),F.ref=Da(b,w,C),F.return=b,b=F)}return u(b);case je:e:{for(se=C.key;w!==null;){if(w.key===se)if(w.tag===4&&w.stateNode.containerInfo===C.containerInfo&&w.stateNode.implementation===C.implementation){n(b,w.sibling),w=r(w,C.children||[]),w.return=b,b=w;break e}else{n(b,w);break}else t(b,w);w=w.sibling}w=al(C,b.mode,F),w.return=b,b=w}return u(b);case et:return se=C._init,ot(b,w,se(C._payload),F)}if(pe(C))return X(b,w,C,F);if(ae(C))return te(b,w,C,F);Ir(b,C)}return typeof C=="string"&&C!==""||typeof C=="number"?(C=""+C,w!==null&&w.tag===6?(n(b,w.sibling),w=r(w,C),w.return=b,b=w):(n(b,w),w=ol(C,b.mode,F),w.return=b,b=w),u(b)):n(b,w)}return ot}var Zo=Fc(!0),Uc=Fc(!1),Or=qn(null),Br=null,Xo=null,gs=null;function fs(){gs=Xo=Br=null}function hs(e){var t=Or.current;Ke(Or),e._currentValue=t}function ms(e,t,n){for(;e!==null;){var o=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,o!==null&&(o.childLanes|=t)):o!==null&&(o.childLanes&t)!==t&&(o.childLanes|=t),e===n)break;e=e.return}}function ea(e,t){Br=e,gs=Xo=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&t)!==0&&(Rt=!0),e.firstContext=null)}function Ut(e){var t=e._currentValue;if(gs!==e)if(e={context:e,memoizedValue:t,next:null},Xo===null){if(Br===null)throw Error(s(308));Xo=e,Br.dependencies={lanes:0,firstContext:e}}else Xo=Xo.next=e;return t}var wo=null;function ys(e){wo===null?wo=[e]:wo.push(e)}function Vc(e,t,n,o){var r=t.interleaved;return r===null?(n.next=n,ys(t)):(n.next=r.next,r.next=n),t.interleaved=n,Sn(e,o)}function Sn(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var Gn=!1;function vs(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Hc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function kn(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Qn(e,t,n){var o=e.updateQueue;if(o===null)return null;if(o=o.shared,(Ae&2)!==0){var r=o.pending;return r===null?t.next=t:(t.next=r.next,r.next=t),o.pending=t,Sn(e,n)}return r=o.interleaved,r===null?(t.next=t,ys(o)):(t.next=r.next,r.next=t),o.interleaved=t,Sn(e,n)}function Wr(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var o=t.lanes;o&=e.pendingLanes,n|=o,t.lanes=n,Mi(e,n)}}function Yc(e,t){var n=e.updateQueue,o=e.alternate;if(o!==null&&(o=o.updateQueue,n===o)){var r=null,l=null;if(n=n.firstBaseUpdate,n!==null){do{var u={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};l===null?r=l=u:l=l.next=u,n=n.next}while(n!==null);l===null?r=l=t:l=l.next=t}else r=l=t;n={baseState:o.baseState,firstBaseUpdate:r,lastBaseUpdate:l,shared:o.shared,effects:o.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Fr(e,t,n,o){var r=e.updateQueue;Gn=!1;var l=r.firstBaseUpdate,u=r.lastBaseUpdate,f=r.shared.pending;if(f!==null){r.shared.pending=null;var v=f,E=v.next;v.next=null,u===null?l=E:u.next=E,u=v;var D=e.alternate;D!==null&&(D=D.updateQueue,f=D.lastBaseUpdate,f!==u&&(f===null?D.firstBaseUpdate=E:f.next=E,D.lastBaseUpdate=v))}if(l!==null){var I=r.baseState;u=0,D=E=v=null,f=l;do{var z=f.lane,K=f.eventTime;if((o&z)===z){D!==null&&(D=D.next={eventTime:K,lane:0,tag:f.tag,payload:f.payload,callback:f.callback,next:null});e:{var X=e,te=f;switch(z=t,K=n,te.tag){case 1:if(X=te.payload,typeof X=="function"){I=X.call(K,I,z);break e}I=X;break e;case 3:X.flags=X.flags&-65537|128;case 0:if(X=te.payload,z=typeof X=="function"?X.call(K,I,z):X,z==null)break e;I=Y({},I,z);break e;case 2:Gn=!0}}f.callback!==null&&f.lane!==0&&(e.flags|=64,z=r.effects,z===null?r.effects=[f]:z.push(f))}else K={eventTime:K,lane:z,tag:f.tag,payload:f.payload,callback:f.callback,next:null},D===null?(E=D=K,v=I):D=D.next=K,u|=z;if(f=f.next,f===null){if(f=r.shared.pending,f===null)break;z=f,f=z.next,z.next=null,r.lastBaseUpdate=z,r.shared.pending=null}}while(!0);if(D===null&&(v=I),r.baseState=v,r.firstBaseUpdate=E,r.lastBaseUpdate=D,t=r.shared.interleaved,t!==null){r=t;do u|=r.lane,r=r.next;while(r!==t)}else l===null&&(r.shared.lanes=0);bo|=u,e.lanes=u,e.memoizedState=I}}function qc(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;t<e.length;t++){var o=e[t],r=o.callback;if(r!==null){if(o.callback=null,o=n,typeof r!="function")throw Error(s(191,r));r.call(o)}}}var Ia={},ln=qn(Ia),Oa=qn(Ia),Ba=qn(Ia);function So(e){if(e===Ia)throw Error(s(174));return e}function Ps(e,t){switch(He(Ba,t),He(Oa,e),He(ln,Ia),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:uo(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=uo(t,e)}Ke(ln),He(ln,t)}function ta(){Ke(ln),Ke(Oa),Ke(Ba)}function Kc(e){So(Ba.current);var t=So(ln.current),n=uo(t,e.type);t!==n&&(He(Oa,e),He(ln,n))}function ws(e){Oa.current===e&&(Ke(ln),Ke(Oa))}var Je=qn(0);function Ur(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if((t.flags&128)!==0)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Ss=[];function ks(){for(var e=0;e<Ss.length;e++)Ss[e]._workInProgressVersionPrimary=null;Ss.length=0}var Vr=re.ReactCurrentDispatcher,bs=re.ReactCurrentBatchConfig,ko=0,Ze=null,st=null,ut=null,Hr=!1,Wa=!1,Fa=0,Ag=0;function vt(){throw Error(s(321))}function xs(e,t){if(t===null)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!$t(e[n],t[n]))return!1;return!0}function Rs(e,t,n,o,r,l){if(ko=l,Ze=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Vr.current=e===null||e.memoizedState===null?zg:Dg,e=n(o,r),Wa){l=0;do{if(Wa=!1,Fa=0,25<=l)throw Error(s(301));l+=1,ut=st=null,t.updateQueue=null,Vr.current=Ig,e=n(o,r)}while(Wa)}if(Vr.current=Kr,t=st!==null&&st.next!==null,ko=0,ut=st=Ze=null,Hr=!1,t)throw Error(s(300));return e}function Cs(){var e=Fa!==0;return Fa=0,e}function cn(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return ut===null?Ze.memoizedState=ut=e:ut=ut.next=e,ut}function Vt(){if(st===null){var e=Ze.alternate;e=e!==null?e.memoizedState:null}else e=st.next;var t=ut===null?Ze.memoizedState:ut.next;if(t!==null)ut=t,st=e;else{if(e===null)throw Error(s(310));st=e,e={memoizedState:st.memoizedState,baseState:st.baseState,baseQueue:st.baseQueue,queue:st.queue,next:null},ut===null?Ze.memoizedState=ut=e:ut=ut.next=e}return ut}function Ua(e,t){return typeof t=="function"?t(e):t}function Es(e){var t=Vt(),n=t.queue;if(n===null)throw Error(s(311));n.lastRenderedReducer=e;var o=st,r=o.baseQueue,l=n.pending;if(l!==null){if(r!==null){var u=r.next;r.next=l.next,l.next=u}o.baseQueue=r=l,n.pending=null}if(r!==null){l=r.next,o=o.baseState;var f=u=null,v=null,E=l;do{var D=E.lane;if((ko&D)===D)v!==null&&(v=v.next={lane:0,action:E.action,hasEagerState:E.hasEagerState,eagerState:E.eagerState,next:null}),o=E.hasEagerState?E.eagerState:e(o,E.action);else{var I={lane:D,action:E.action,hasEagerState:E.hasEagerState,eagerState:E.eagerState,next:null};v===null?(f=v=I,u=o):v=v.next=I,Ze.lanes|=D,bo|=D}E=E.next}while(E!==null&&E!==l);v===null?u=o:v.next=f,$t(o,t.memoizedState)||(Rt=!0),t.memoizedState=o,t.baseState=u,t.baseQueue=v,n.lastRenderedState=o}if(e=n.interleaved,e!==null){r=e;do l=r.lane,Ze.lanes|=l,bo|=l,r=r.next;while(r!==e)}else r===null&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function js(e){var t=Vt(),n=t.queue;if(n===null)throw Error(s(311));n.lastRenderedReducer=e;var o=n.dispatch,r=n.pending,l=t.memoizedState;if(r!==null){n.pending=null;var u=r=r.next;do l=e(l,u.action),u=u.next;while(u!==r);$t(l,t.memoizedState)||(Rt=!0),t.memoizedState=l,t.baseQueue===null&&(t.baseState=l),n.lastRenderedState=l}return[l,o]}function $c(){}function Gc(e,t){var n=Ze,o=Vt(),r=t(),l=!$t(o.memoizedState,r);if(l&&(o.memoizedState=r,Rt=!0),o=o.queue,_s(Zc.bind(null,n,o,e),[e]),o.getSnapshot!==t||l||ut!==null&&ut.memoizedState.tag&1){if(n.flags|=2048,Va(9,Jc.bind(null,n,o,r,t),void 0,null),dt===null)throw Error(s(349));(ko&30)!==0||Qc(n,t,r)}return r}function Qc(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},t=Ze.updateQueue,t===null?(t={lastEffect:null,stores:null},Ze.updateQueue=t,t.stores=[e]):(n=t.stores,n===null?t.stores=[e]:n.push(e))}function Jc(e,t,n,o){t.value=n,t.getSnapshot=o,Xc(t)&&eu(e)}function Zc(e,t,n){return n(function(){Xc(t)&&eu(e)})}function Xc(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!$t(e,n)}catch{return!0}}function eu(e){var t=Sn(e,1);t!==null&&Xt(t,e,1,-1)}function tu(e){var t=cn();return typeof e=="function"&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Ua,lastRenderedState:e},t.queue=e,e=e.dispatch=Lg.bind(null,Ze,e),[t.memoizedState,e]}function Va(e,t,n,o){return e={tag:e,create:t,destroy:n,deps:o,next:null},t=Ze.updateQueue,t===null?(t={lastEffect:null,stores:null},Ze.updateQueue=t,t.lastEffect=e.next=e):(n=t.lastEffect,n===null?t.lastEffect=e.next=e:(o=n.next,n.next=e,e.next=o,t.lastEffect=e)),e}function nu(){return Vt().memoizedState}function Yr(e,t,n,o){var r=cn();Ze.flags|=e,r.memoizedState=Va(1|t,n,void 0,o===void 0?null:o)}function qr(e,t,n,o){var r=Vt();o=o===void 0?null:o;var l=void 0;if(st!==null){var u=st.memoizedState;if(l=u.destroy,o!==null&&xs(o,u.deps)){r.memoizedState=Va(t,n,l,o);return}}Ze.flags|=e,r.memoizedState=Va(1|t,n,l,o)}function ou(e,t){return Yr(8390656,8,e,t)}function _s(e,t){return qr(2048,8,e,t)}function au(e,t){return qr(4,2,e,t)}function ru(e,t){return qr(4,4,e,t)}function iu(e,t){if(typeof t=="function")return e=e(),t(e),function(){t(null)};if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function su(e,t,n){return n=n!=null?n.concat([e]):null,qr(4,4,iu.bind(null,t,e),n)}function Ts(){}function lu(e,t){var n=Vt();t=t===void 0?null:t;var o=n.memoizedState;return o!==null&&t!==null&&xs(t,o[1])?o[0]:(n.memoizedState=[e,t],e)}function cu(e,t){var n=Vt();t=t===void 0?null:t;var o=n.memoizedState;return o!==null&&t!==null&&xs(t,o[1])?o[0]:(e=e(),n.memoizedState=[e,t],e)}function uu(e,t,n){return(ko&21)===0?(e.baseState&&(e.baseState=!1,Rt=!0),e.memoizedState=n):($t(n,t)||(n=Wl(),Ze.lanes|=n,bo|=n,e.baseState=!0),t)}function Mg(e,t){var n=Be;Be=n!==0&&4>n?n:4,e(!0);var o=bs.transition;bs.transition={};try{e(!1),t()}finally{Be=n,bs.transition=o}}function du(){return Vt().memoizedState}function Ng(e,t,n){var o=eo(e);if(n={lane:o,action:n,hasEagerState:!1,eagerState:null,next:null},pu(e))gu(t,n);else if(n=Vc(e,t,n,o),n!==null){var r=kt();Xt(n,e,o,r),fu(n,t,o)}}function Lg(e,t,n){var o=eo(e),r={lane:o,action:n,hasEagerState:!1,eagerState:null,next:null};if(pu(e))gu(t,r);else{var l=e.alternate;if(e.lanes===0&&(l===null||l.lanes===0)&&(l=t.lastRenderedReducer,l!==null))try{var u=t.lastRenderedState,f=l(u,n);if(r.hasEagerState=!0,r.eagerState=f,$t(f,u)){var v=t.interleaved;v===null?(r.next=r,ys(t)):(r.next=v.next,v.next=r),t.interleaved=r;return}}catch{}finally{}n=Vc(e,t,r,o),n!==null&&(r=kt(),Xt(n,e,o,r),fu(n,t,o))}}function pu(e){var t=e.alternate;return e===Ze||t!==null&&t===Ze}function gu(e,t){Wa=Hr=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function fu(e,t,n){if((n&4194240)!==0){var o=t.lanes;o&=e.pendingLanes,n|=o,t.lanes=n,Mi(e,n)}}var Kr={readContext:Ut,useCallback:vt,useContext:vt,useEffect:vt,useImperativeHandle:vt,useInsertionEffect:vt,useLayoutEffect:vt,useMemo:vt,useReducer:vt,useRef:vt,useState:vt,useDebugValue:vt,useDeferredValue:vt,useTransition:vt,useMutableSource:vt,useSyncExternalStore:vt,useId:vt,unstable_isNewReconciler:!1},zg={readContext:Ut,useCallback:function(e,t){return cn().memoizedState=[e,t===void 0?null:t],e},useContext:Ut,useEffect:ou,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Yr(4194308,4,iu.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Yr(4194308,4,e,t)},useInsertionEffect:function(e,t){return Yr(4,2,e,t)},useMemo:function(e,t){var n=cn();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var o=cn();return t=n!==void 0?n(t):t,o.memoizedState=o.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},o.queue=e,e=e.dispatch=Ng.bind(null,Ze,e),[o.memoizedState,e]},useRef:function(e){var t=cn();return e={current:e},t.memoizedState=e},useState:tu,useDebugValue:Ts,useDeferredValue:function(e){return cn().memoizedState=e},useTransition:function(){var e=tu(!1),t=e[0];return e=Mg.bind(null,e[1]),cn().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var o=Ze,r=cn();if($e){if(n===void 0)throw Error(s(407));n=n()}else{if(n=t(),dt===null)throw Error(s(349));(ko&30)!==0||Qc(o,t,n)}r.memoizedState=n;var l={value:n,getSnapshot:t};return r.queue=l,ou(Zc.bind(null,o,l,e),[e]),o.flags|=2048,Va(9,Jc.bind(null,o,l,n,t),void 0,null),n},useId:function(){var e=cn(),t=dt.identifierPrefix;if($e){var n=wn,o=Pn;n=(o&~(1<<32-Le(o)-1)).toString(32)+n,t=":"+t+"R"+n,n=Fa++,0<n&&(t+="H"+n.toString(32)),t+=":"}else n=Ag++,t=":"+t+"r"+n.toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},Dg={readContext:Ut,useCallback:lu,useContext:Ut,useEffect:_s,useImperativeHandle:su,useInsertionEffect:au,useLayoutEffect:ru,useMemo:cu,useReducer:Es,useRef:nu,useState:function(){return Es(Ua)},useDebugValue:Ts,useDeferredValue:function(e){var t=Vt();return uu(t,st.memoizedState,e)},useTransition:function(){var e=Es(Ua)[0],t=Vt().memoizedState;return[e,t]},useMutableSource:$c,useSyncExternalStore:Gc,useId:du,unstable_isNewReconciler:!1},Ig={readContext:Ut,useCallback:lu,useContext:Ut,useEffect:_s,useImperativeHandle:su,useInsertionEffect:au,useLayoutEffect:ru,useMemo:cu,useReducer:js,useRef:nu,useState:function(){return js(Ua)},useDebugValue:Ts,useDeferredValue:function(e){var t=Vt();return st===null?t.memoizedState=e:uu(t,st.memoizedState,e)},useTransition:function(){var e=js(Ua)[0],t=Vt().memoizedState;return[e,t]},useMutableSource:$c,useSyncExternalStore:Gc,useId:du,unstable_isNewReconciler:!1};function Qt(e,t){if(e&&e.defaultProps){t=Y({},t),e=e.defaultProps;for(var n in e)t[n]===void 0&&(t[n]=e[n]);return t}return t}function As(e,t,n,o){t=e.memoizedState,n=n(o,t),n=n==null?t:Y({},t,n),e.memoizedState=n,e.lanes===0&&(e.updateQueue.baseState=n)}var $r={isMounted:function(e){return(e=e._reactInternals)?Q(e)===e:!1},enqueueSetState:function(e,t,n){e=e._reactInternals;var o=kt(),r=eo(e),l=kn(o,r);l.payload=t,n!=null&&(l.callback=n),t=Qn(e,l,r),t!==null&&(Xt(t,e,r,o),Wr(t,e,r))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var o=kt(),r=eo(e),l=kn(o,r);l.tag=1,l.payload=t,n!=null&&(l.callback=n),t=Qn(e,l,r),t!==null&&(Xt(t,e,r,o),Wr(t,e,r))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=kt(),o=eo(e),r=kn(n,o);r.tag=2,t!=null&&(r.callback=t),t=Qn(e,r,o),t!==null&&(Xt(t,e,o,n),Wr(t,e,o))}};function hu(e,t,n,o,r,l,u){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(o,l,u):t.prototype&&t.prototype.isPureReactComponent?!_a(n,o)||!_a(r,l):!0}function mu(e,t,n){var o=!1,r=Kn,l=t.contextType;return typeof l=="object"&&l!==null?l=Ut(l):(r=xt(t)?yo:yt.current,o=t.contextTypes,l=(o=o!=null)?$o(e,r):Kn),t=new t(n,l),e.memoizedState=t.state!==null&&t.state!==void 0?t.state:null,t.updater=$r,e.stateNode=t,t._reactInternals=e,o&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=r,e.__reactInternalMemoizedMaskedChildContext=l),t}function yu(e,t,n,o){e=t.state,typeof t.componentWillReceiveProps=="function"&&t.componentWillReceiveProps(n,o),typeof t.UNSAFE_componentWillReceiveProps=="function"&&t.UNSAFE_componentWillReceiveProps(n,o),t.state!==e&&$r.enqueueReplaceState(t,t.state,null)}function Ms(e,t,n,o){var r=e.stateNode;r.props=n,r.state=e.memoizedState,r.refs={},vs(e);var l=t.contextType;typeof l=="object"&&l!==null?r.context=Ut(l):(l=xt(t)?yo:yt.current,r.context=$o(e,l)),r.state=e.memoizedState,l=t.getDerivedStateFromProps,typeof l=="function"&&(As(e,t,l,n),r.state=e.memoizedState),typeof t.getDerivedStateFromProps=="function"||typeof r.getSnapshotBeforeUpdate=="function"||typeof r.UNSAFE_componentWillMount!="function"&&typeof r.componentWillMount!="function"||(t=r.state,typeof r.componentWillMount=="function"&&r.componentWillMount(),typeof r.UNSAFE_componentWillMount=="function"&&r.UNSAFE_componentWillMount(),t!==r.state&&$r.enqueueReplaceState(r,r.state,null),Fr(e,n,r,o),r.state=e.memoizedState),typeof r.componentDidMount=="function"&&(e.flags|=4194308)}function na(e,t){try{var n="",o=t;do n+=me(o),o=o.return;while(o);var r=n}catch(l){r=`
40
40
  Error generating stack: `+l.message+`
41
- `+l.stack}return{value:e,source:t,stack:r,digest:null}}function Ls(e,t,o){return{value:e,source:null,stack:o??null,digest:t??null}}function As(e,t){try{console.error(t.value)}catch(o){setTimeout(function(){throw o})}}var Ff=typeof WeakMap=="function"?WeakMap:Map;function vu(e,t,o){o=So(-1,o),o.tag=3,o.payload={element:null};var n=t.value;return o.callback=function(){ti||(ti=!0,Qs=n),As(e,t)},o}function Pu(e,t,o){o=So(-1,o),o.tag=3;var n=e.type.getDerivedStateFromError;if(typeof n=="function"){var r=t.value;o.payload=function(){return n(r)},o.callback=function(){As(e,t)}}var l=e.stateNode;return l!==null&&typeof l.componentDidCatch=="function"&&(o.callback=function(){As(e,t),typeof n!="function"&&(Xo===null?Xo=new Set([this]):Xo.add(this));var u=t.stack;this.componentDidCatch(t.value,{componentStack:u!==null?u:""})}),o}function wu(e,t,o){var n=e.pingCache;if(n===null){n=e.pingCache=new Ff;var r=new Set;n.set(t,r)}else r=n.get(t),r===void 0&&(r=new Set,n.set(t,r));r.has(o)||(r.add(o),e=Zf.bind(null,e,t,o),t.then(e,e))}function ku(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function Su(e,t,o,n,r){return(e.mode&1)===0?(e===t?e.flags|=65536:(e.flags|=128,o.flags|=131072,o.flags&=-52805,o.tag===1&&(o.alternate===null?o.tag=17:(t=So(-1,1),t.tag=2,Go(o,t,1))),o.lanes|=1),e):(e.flags|=65536,e.lanes=r,e)}var Bf=re.ReactCurrentOwner,Ct=!1;function kt(e,t,o,n){t.child=e===null?Uc(t,null,o,n):Xn(t,e.child,o,n)}function bu(e,t,o,n,r){o=o.render;var l=t.ref;return ea(t,r),n=Cs(e,t,o,n,l,r),o=Rs(),e!==null&&!Ct?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~r,bo(e,t,r)):($e&&o&&ls(t),t.flags|=1,kt(e,t,n,r),t.child)}function xu(e,t,o,n,r){if(e===null){var l=o.type;return typeof l=="function"&&!ol(l)&&l.defaultProps===void 0&&o.compare===null&&o.defaultProps===void 0?(t.tag=15,t.type=l,Cu(e,t,l,n,r)):(e=si(o.type,null,n,t,t.mode,r),e.ref=t.ref,e.return=t,t.child=e)}if(l=e.child,(e.lanes&r)===0){var u=l.memoizedProps;if(o=o.compare,o=o!==null?o:_a,o(u,n)&&e.ref===t.ref)return bo(e,t,r)}return t.flags|=1,e=on(l,n),e.ref=t.ref,e.return=t,t.child=e}function Cu(e,t,o,n,r){if(e!==null){var l=e.memoizedProps;if(_a(l,n)&&e.ref===t.ref)if(Ct=!1,t.pendingProps=n=l,(e.lanes&r)!==0)(e.flags&131072)!==0&&(Ct=!0);else return t.lanes=e.lanes,bo(e,t,r)}return Ds(e,t,o,n,r)}function Ru(e,t,o){var n=t.pendingProps,r=n.children,l=e!==null?e.memoizedState:null;if(n.mode==="hidden")if((t.mode&1)===0)t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Ve(aa,zt),zt|=o;else{if((o&1073741824)===0)return e=l!==null?l.baseLanes|o:o,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Ve(aa,zt),zt|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},n=l!==null?l.baseLanes:o,Ve(aa,zt),zt|=n}else l!==null?(n=l.baseLanes|o,t.memoizedState=null):n=o,Ve(aa,zt),zt|=n;return kt(e,t,r,o),t.child}function ju(e,t){var o=t.ref;(e===null&&o!==null||e!==null&&e.ref!==o)&&(t.flags|=512,t.flags|=2097152)}function Ds(e,t,o,n,r){var l=xt(o)?yn:yt.current;return l=$n(t,l),ea(t,r),o=Cs(e,t,o,n,l,r),n=Rs(),e!==null&&!Ct?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~r,bo(e,t,r)):($e&&n&&ls(t),t.flags|=1,kt(e,t,o,r),t.child)}function Eu(e,t,o,n,r){if(xt(o)){var l=!0;Nr(t)}else l=!1;if(ea(t,r),t.stateNode===null)Gr(e,t),mu(t,o,n),Ns(t,o,n,r),n=!0;else if(e===null){var u=t.stateNode,g=t.memoizedProps;u.props=g;var v=u.context,j=o.contextType;typeof j=="object"&&j!==null?j=Ut(j):(j=xt(o)?yn:yt.current,j=$n(t,j));var z=o.getDerivedStateFromProps,I=typeof z=="function"||typeof u.getSnapshotBeforeUpdate=="function";I||typeof u.UNSAFE_componentWillReceiveProps!="function"&&typeof u.componentWillReceiveProps!="function"||(g!==n||v!==j)&&yu(t,u,n,j),Qo=!1;var D=t.memoizedState;u.state=D,Wr(t,n,u,r),v=t.memoizedState,g!==n||D!==v||bt.current||Qo?(typeof z=="function"&&(Ms(t,o,z,n),v=t.memoizedState),(g=Qo||hu(t,o,g,n,D,v,j))?(I||typeof u.UNSAFE_componentWillMount!="function"&&typeof u.componentWillMount!="function"||(typeof u.componentWillMount=="function"&&u.componentWillMount(),typeof u.UNSAFE_componentWillMount=="function"&&u.UNSAFE_componentWillMount()),typeof u.componentDidMount=="function"&&(t.flags|=4194308)):(typeof u.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=n,t.memoizedState=v),u.props=n,u.state=v,u.context=j,n=g):(typeof u.componentDidMount=="function"&&(t.flags|=4194308),n=!1)}else{u=t.stateNode,Vc(e,t),g=t.memoizedProps,j=t.type===t.elementType?g:Gt(t.type,g),u.props=j,I=t.pendingProps,D=u.context,v=o.contextType,typeof v=="object"&&v!==null?v=Ut(v):(v=xt(o)?yn:yt.current,v=$n(t,v));var K=o.getDerivedStateFromProps;(z=typeof K=="function"||typeof u.getSnapshotBeforeUpdate=="function")||typeof u.UNSAFE_componentWillReceiveProps!="function"&&typeof u.componentWillReceiveProps!="function"||(g!==I||D!==v)&&yu(t,u,n,v),Qo=!1,D=t.memoizedState,u.state=D,Wr(t,n,u,r);var Z=t.memoizedState;g!==I||D!==Z||bt.current||Qo?(typeof K=="function"&&(Ms(t,o,K,n),Z=t.memoizedState),(j=Qo||hu(t,o,j,n,D,Z,v)||!1)?(z||typeof u.UNSAFE_componentWillUpdate!="function"&&typeof u.componentWillUpdate!="function"||(typeof u.componentWillUpdate=="function"&&u.componentWillUpdate(n,Z,v),typeof u.UNSAFE_componentWillUpdate=="function"&&u.UNSAFE_componentWillUpdate(n,Z,v)),typeof u.componentDidUpdate=="function"&&(t.flags|=4),typeof u.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof u.componentDidUpdate!="function"||g===e.memoizedProps&&D===e.memoizedState||(t.flags|=4),typeof u.getSnapshotBeforeUpdate!="function"||g===e.memoizedProps&&D===e.memoizedState||(t.flags|=1024),t.memoizedProps=n,t.memoizedState=Z),u.props=n,u.state=Z,u.context=v,n=j):(typeof u.componentDidUpdate!="function"||g===e.memoizedProps&&D===e.memoizedState||(t.flags|=4),typeof u.getSnapshotBeforeUpdate!="function"||g===e.memoizedProps&&D===e.memoizedState||(t.flags|=1024),n=!1)}return zs(e,t,o,n,l,r)}function zs(e,t,o,n,r,l){ju(e,t);var u=(t.flags&128)!==0;if(!n&&!u)return r&&Lc(t,o,!1),bo(e,t,l);n=t.stateNode,Bf.current=t;var g=u&&typeof o.getDerivedStateFromError!="function"?null:n.render();return t.flags|=1,e!==null&&u?(t.child=Xn(t,e.child,null,l),t.child=Xn(t,null,g,l)):kt(e,t,g,l),t.memoizedState=n.state,r&&Lc(t,o,!0),t.child}function _u(e){var t=e.stateNode;t.pendingContext?Mc(e,t.pendingContext,t.pendingContext!==t.context):t.context&&Mc(e,t.context,!1),Ps(e,t.containerInfo)}function Tu(e,t,o,n,r){return Jn(),ps(r),t.flags|=256,kt(e,t,o,n),t.child}var Is={dehydrated:null,treeContext:null,retryLane:0};function Os(e){return{baseLanes:e,cachePool:null,transitions:null}}function Mu(e,t,o){var n=t.pendingProps,r=Je.current,l=!1,u=(t.flags&128)!==0,g;if((g=u)||(g=e!==null&&e.memoizedState===null?!1:(r&2)!==0),g?(l=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(r|=1),Ve(Je,r&1),e===null)return ds(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?((t.mode&1)===0?t.lanes=1:e.data==="$!"?t.lanes=8:t.lanes=1073741824,null):(u=n.children,e=n.fallback,l?(n=t.mode,l=t.child,u={mode:"hidden",children:u},(n&1)===0&&l!==null?(l.childLanes=0,l.pendingProps=u):l=li(u,n,0,null),e=jn(e,n,o,null),l.return=t,e.return=t,l.sibling=e,t.child=l,t.child.memoizedState=Os(o),t.memoizedState=Is,e):Fs(t,u));if(r=e.memoizedState,r!==null&&(g=r.dehydrated,g!==null))return Wf(e,t,u,n,g,r,o);if(l){l=n.fallback,u=t.mode,r=e.child,g=r.sibling;var v={mode:"hidden",children:n.children};return(u&1)===0&&t.child!==r?(n=t.child,n.childLanes=0,n.pendingProps=v,t.deletions=null):(n=on(r,v),n.subtreeFlags=r.subtreeFlags&14680064),g!==null?l=on(g,l):(l=jn(l,u,o,null),l.flags|=2),l.return=t,n.return=t,n.sibling=l,t.child=n,n=l,l=t.child,u=e.child.memoizedState,u=u===null?Os(o):{baseLanes:u.baseLanes|o,cachePool:null,transitions:u.transitions},l.memoizedState=u,l.childLanes=e.childLanes&~o,t.memoizedState=Is,n}return l=e.child,e=l.sibling,n=on(l,{mode:"visible",children:n.children}),(t.mode&1)===0&&(n.lanes=o),n.return=t,n.sibling=null,e!==null&&(o=t.deletions,o===null?(t.deletions=[e],t.flags|=16):o.push(e)),t.child=n,t.memoizedState=null,n}function Fs(e,t){return t=li({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function Qr(e,t,o,n){return n!==null&&ps(n),Xn(t,e.child,null,o),e=Fs(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function Wf(e,t,o,n,r,l,u){if(o)return t.flags&256?(t.flags&=-257,n=Ls(Error(s(422))),Qr(e,t,u,n)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(l=n.fallback,r=t.mode,n=li({mode:"visible",children:n.children},r,0,null),l=jn(l,r,u,null),l.flags|=2,n.return=t,l.return=t,n.sibling=l,t.child=n,(t.mode&1)!==0&&Xn(t,e.child,null,u),t.child.memoizedState=Os(u),t.memoizedState=Is,l);if((t.mode&1)===0)return Qr(e,t,u,null);if(r.data==="$!"){if(n=r.nextSibling&&r.nextSibling.dataset,n)var g=n.dgst;return n=g,l=Error(s(419)),n=Ls(l,n,void 0),Qr(e,t,u,n)}if(g=(u&e.childLanes)!==0,Ct||g){if(n=dt,n!==null){switch(u&-u){case 4:r=2;break;case 16:r=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:r=32;break;case 536870912:r=268435456;break;default:r=0}r=(r&(n.suspendedLanes|u))!==0?0:r,r!==0&&r!==l.retryLane&&(l.retryLane=r,ko(e,r),Zt(n,e,r,-1))}return tl(),n=Ls(Error(s(421))),Qr(e,t,u,n)}return r.data==="$?"?(t.flags|=128,t.child=e.child,t=eg.bind(null,e),r._reactRetry=t,null):(e=l.treeContext,Dt=Yo(r.nextSibling),At=t,$e=!0,Qt=null,e!==null&&(Bt[Wt++]=Po,Bt[Wt++]=wo,Bt[Wt++]=vn,Po=e.id,wo=e.overflow,vn=t),t=Fs(t,n.children),t.flags|=4096,t)}function Nu(e,t,o){e.lanes|=t;var n=e.alternate;n!==null&&(n.lanes|=t),ms(e.return,t,o)}function Bs(e,t,o,n,r){var l=e.memoizedState;l===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:n,tail:o,tailMode:r}:(l.isBackwards=t,l.rendering=null,l.renderingStartTime=0,l.last=n,l.tail=o,l.tailMode=r)}function Lu(e,t,o){var n=t.pendingProps,r=n.revealOrder,l=n.tail;if(kt(e,t,n.children,o),n=Je.current,(n&2)!==0)n=n&1|2,t.flags|=128;else{if(e!==null&&(e.flags&128)!==0)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&Nu(e,o,t);else if(e.tag===19)Nu(e,o,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}n&=1}if(Ve(Je,n),(t.mode&1)===0)t.memoizedState=null;else switch(r){case"forwards":for(o=t.child,r=null;o!==null;)e=o.alternate,e!==null&&Ur(e)===null&&(r=o),o=o.sibling;o=r,o===null?(r=t.child,t.child=null):(r=o.sibling,o.sibling=null),Bs(t,!1,r,o,l);break;case"backwards":for(o=null,r=t.child,t.child=null;r!==null;){if(e=r.alternate,e!==null&&Ur(e)===null){t.child=r;break}e=r.sibling,r.sibling=o,o=r,r=e}Bs(t,!0,o,null,l);break;case"together":Bs(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Gr(e,t){(t.mode&1)===0&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function bo(e,t,o){if(e!==null&&(t.dependencies=e.dependencies),bn|=t.lanes,(o&t.childLanes)===0)return null;if(e!==null&&t.child!==e.child)throw Error(s(153));if(t.child!==null){for(e=t.child,o=on(e,e.pendingProps),t.child=o,o.return=t;e.sibling!==null;)e=e.sibling,o=o.sibling=on(e,e.pendingProps),o.return=t;o.sibling=null}return t.child}function Uf(e,t,o){switch(t.tag){case 3:_u(t),Jn();break;case 5:Kc(t);break;case 1:xt(t.type)&&Nr(t);break;case 4:Ps(t,t.stateNode.containerInfo);break;case 10:var n=t.type._context,r=t.memoizedProps.value;Ve(Or,n._currentValue),n._currentValue=r;break;case 13:if(n=t.memoizedState,n!==null)return n.dehydrated!==null?(Ve(Je,Je.current&1),t.flags|=128,null):(o&t.child.childLanes)!==0?Mu(e,t,o):(Ve(Je,Je.current&1),e=bo(e,t,o),e!==null?e.sibling:null);Ve(Je,Je.current&1);break;case 19:if(n=(o&t.childLanes)!==0,(e.flags&128)!==0){if(n)return Lu(e,t,o);t.flags|=128}if(r=t.memoizedState,r!==null&&(r.rendering=null,r.tail=null,r.lastEffect=null),Ve(Je,Je.current),n)break;return null;case 22:case 23:return t.lanes=0,Ru(e,t,o)}return bo(e,t,o)}var Au,Ws,Du,zu;Au=function(e,t){for(var o=t.child;o!==null;){if(o.tag===5||o.tag===6)e.appendChild(o.stateNode);else if(o.tag!==4&&o.child!==null){o.child.return=o,o=o.child;continue}if(o===t)break;for(;o.sibling===null;){if(o.return===null||o.return===t)return;o=o.return}o.sibling.return=o.return,o=o.sibling}},Ws=function(){},Du=function(e,t,o,n){var r=e.memoizedProps;if(r!==n){e=t.stateNode,kn(so.current);var l=null;switch(o){case"input":r=No(e,r),n=No(e,n),l=[];break;case"select":r=Y({},r,{value:void 0}),n=Y({},n,{value:void 0}),l=[];break;case"textarea":r=ft(e,r),n=ft(e,n),l=[];break;default:typeof r.onClick!="function"&&typeof n.onClick=="function"&&(e.onclick=_r)}Dn(o,n);var u;o=null;for(j in r)if(!n.hasOwnProperty(j)&&r.hasOwnProperty(j)&&r[j]!=null)if(j==="style"){var g=r[j];for(u in g)g.hasOwnProperty(u)&&(o||(o={}),o[u]="")}else j!=="dangerouslySetInnerHTML"&&j!=="children"&&j!=="suppressContentEditableWarning"&&j!=="suppressHydrationWarning"&&j!=="autoFocus"&&(d.hasOwnProperty(j)?l||(l=[]):(l=l||[]).push(j,null));for(j in n){var v=n[j];if(g=r!=null?r[j]:void 0,n.hasOwnProperty(j)&&v!==g&&(v!=null||g!=null))if(j==="style")if(g){for(u in g)!g.hasOwnProperty(u)||v&&v.hasOwnProperty(u)||(o||(o={}),o[u]="");for(u in v)v.hasOwnProperty(u)&&g[u]!==v[u]&&(o||(o={}),o[u]=v[u])}else o||(l||(l=[]),l.push(j,o)),o=v;else j==="dangerouslySetInnerHTML"?(v=v?v.__html:void 0,g=g?g.__html:void 0,v!=null&&g!==v&&(l=l||[]).push(j,v)):j==="children"?typeof v!="string"&&typeof v!="number"||(l=l||[]).push(j,""+v):j!=="suppressContentEditableWarning"&&j!=="suppressHydrationWarning"&&(d.hasOwnProperty(j)?(v!=null&&j==="onScroll"&&qe("scroll",e),l||g===v||(l=[])):(l=l||[]).push(j,v))}o&&(l=l||[]).push("style",o);var j=l;(t.updateQueue=j)&&(t.flags|=4)}},zu=function(e,t,o,n){o!==n&&(t.flags|=4)};function Va(e,t){if(!$e)switch(e.tailMode){case"hidden":t=e.tail;for(var o=null;t!==null;)t.alternate!==null&&(o=t),t=t.sibling;o===null?e.tail=null:o.sibling=null;break;case"collapsed":o=e.tail;for(var n=null;o!==null;)o.alternate!==null&&(n=o),o=o.sibling;n===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:n.sibling=null}}function Pt(e){var t=e.alternate!==null&&e.alternate.child===e.child,o=0,n=0;if(t)for(var r=e.child;r!==null;)o|=r.lanes|r.childLanes,n|=r.subtreeFlags&14680064,n|=r.flags&14680064,r.return=e,r=r.sibling;else for(r=e.child;r!==null;)o|=r.lanes|r.childLanes,n|=r.subtreeFlags,n|=r.flags,r.return=e,r=r.sibling;return e.subtreeFlags|=n,e.childLanes=o,t}function Hf(e,t,o){var n=t.pendingProps;switch(cs(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Pt(t),null;case 1:return xt(t.type)&&Mr(),Pt(t),null;case 3:return n=t.stateNode,ta(),Ke(bt),Ke(yt),Ss(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),(e===null||e.child===null)&&(zr(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&(t.flags&256)===0||(t.flags|=1024,Qt!==null&&(Xs(Qt),Qt=null))),Ws(e,t),Pt(t),null;case 5:ws(t);var r=kn(Fa.current);if(o=t.type,e!==null&&t.stateNode!=null)Du(e,t,o,n,r),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!n){if(t.stateNode===null)throw Error(s(166));return Pt(t),null}if(e=kn(so.current),zr(t)){n=t.stateNode,o=t.type;var l=t.memoizedProps;switch(n[io]=t,n[Aa]=l,e=(t.mode&1)!==0,o){case"dialog":qe("cancel",n),qe("close",n);break;case"iframe":case"object":case"embed":qe("load",n);break;case"video":case"audio":for(r=0;r<Ma.length;r++)qe(Ma[r],n);break;case"source":qe("error",n);break;case"img":case"image":case"link":qe("error",n),qe("load",n);break;case"details":qe("toggle",n);break;case"input":Ln(n,l),qe("invalid",n);break;case"select":n._wrapperState={wasMultiple:!!l.multiple},qe("invalid",n);break;case"textarea":An(n,l),qe("invalid",n)}Dn(o,l),r=null;for(var u in l)if(l.hasOwnProperty(u)){var g=l[u];u==="children"?typeof g=="string"?n.textContent!==g&&(l.suppressHydrationWarning!==!0&&Er(n.textContent,g,e),r=["children",g]):typeof g=="number"&&n.textContent!==""+g&&(l.suppressHydrationWarning!==!0&&Er(n.textContent,g,e),r=["children",""+g]):d.hasOwnProperty(u)&&g!=null&&u==="onScroll"&&qe("scroll",n)}switch(o){case"input":Mo(n),un(n,l,!0);break;case"textarea":Mo(n),Ao(n);break;case"select":case"option":break;default:typeof l.onClick=="function"&&(n.onclick=_r)}n=r,t.updateQueue=n,n!==null&&(t.flags|=4)}else{u=r.nodeType===9?r:r.ownerDocument,e==="http://www.w3.org/1999/xhtml"&&(e=da(o)),e==="http://www.w3.org/1999/xhtml"?o==="script"?(e=u.createElement("div"),e.innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=u.createElement(o,{is:n.is}):(e=u.createElement(o),o==="select"&&(u=e,n.multiple?u.multiple=!0:n.size&&(u.size=n.size))):e=u.createElementNS(e,o),e[io]=t,e[Aa]=n,Au(e,t,!1,!1),t.stateNode=e;e:{switch(u=fa(o,n),o){case"dialog":qe("cancel",e),qe("close",e),r=n;break;case"iframe":case"object":case"embed":qe("load",e),r=n;break;case"video":case"audio":for(r=0;r<Ma.length;r++)qe(Ma[r],e);r=n;break;case"source":qe("error",e),r=n;break;case"img":case"image":case"link":qe("error",e),qe("load",e),r=n;break;case"details":qe("toggle",e),r=n;break;case"input":Ln(e,n),r=No(e,n),qe("invalid",e);break;case"option":r=n;break;case"select":e._wrapperState={wasMultiple:!!n.multiple},r=Y({},n,{value:void 0}),qe("invalid",e);break;case"textarea":An(e,n),r=ft(e,n),qe("invalid",e);break;default:r=n}Dn(o,r),g=r;for(l in g)if(g.hasOwnProperty(l)){var v=g[l];l==="style"?pa(e,v):l==="dangerouslySetInnerHTML"?(v=v?v.__html:void 0,v!=null&&Ft(e,v)):l==="children"?typeof v=="string"?(o!=="textarea"||v!=="")&&Do(e,v):typeof v=="number"&&Do(e,""+v):l!=="suppressContentEditableWarning"&&l!=="suppressHydrationWarning"&&l!=="autoFocus"&&(d.hasOwnProperty(l)?v!=null&&l==="onScroll"&&qe("scroll",e):v!=null&&ue(e,l,v,u))}switch(o){case"input":Mo(e),un(e,n,!1);break;case"textarea":Mo(e),Ao(e);break;case"option":n.value!=null&&e.setAttribute("value",""+we(n.value));break;case"select":e.multiple=!!n.multiple,l=n.value,l!=null?Ge(e,!!n.multiple,l,!1):n.defaultValue!=null&&Ge(e,!!n.multiple,n.defaultValue,!0);break;default:typeof r.onClick=="function"&&(e.onclick=_r)}switch(o){case"button":case"input":case"select":case"textarea":n=!!n.autoFocus;break e;case"img":n=!0;break e;default:n=!1}}n&&(t.flags|=4)}t.ref!==null&&(t.flags|=512,t.flags|=2097152)}return Pt(t),null;case 6:if(e&&t.stateNode!=null)zu(e,t,e.memoizedProps,n);else{if(typeof n!="string"&&t.stateNode===null)throw Error(s(166));if(o=kn(Fa.current),kn(so.current),zr(t)){if(n=t.stateNode,o=t.memoizedProps,n[io]=t,(l=n.nodeValue!==o)&&(e=At,e!==null))switch(e.tag){case 3:Er(n.nodeValue,o,(e.mode&1)!==0);break;case 5:e.memoizedProps.suppressHydrationWarning!==!0&&Er(n.nodeValue,o,(e.mode&1)!==0)}l&&(t.flags|=4)}else n=(o.nodeType===9?o:o.ownerDocument).createTextNode(n),n[io]=t,t.stateNode=n}return Pt(t),null;case 13:if(Ke(Je),n=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if($e&&Dt!==null&&(t.mode&1)!==0&&(t.flags&128)===0)Fc(),Jn(),t.flags|=98560,l=!1;else if(l=zr(t),n!==null&&n.dehydrated!==null){if(e===null){if(!l)throw Error(s(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(s(317));l[io]=t}else Jn(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Pt(t),l=!1}else Qt!==null&&(Xs(Qt),Qt=null),l=!0;if(!l)return t.flags&65536?t:null}return(t.flags&128)!==0?(t.lanes=o,t):(n=n!==null,n!==(e!==null&&e.memoizedState!==null)&&n&&(t.child.flags|=8192,(t.mode&1)!==0&&(e===null||(Je.current&1)!==0?lt===0&&(lt=3):tl())),t.updateQueue!==null&&(t.flags|=4),Pt(t),null);case 4:return ta(),Ws(e,t),e===null&&Na(t.stateNode.containerInfo),Pt(t),null;case 10:return hs(t.type._context),Pt(t),null;case 17:return xt(t.type)&&Mr(),Pt(t),null;case 19:if(Ke(Je),l=t.memoizedState,l===null)return Pt(t),null;if(n=(t.flags&128)!==0,u=l.rendering,u===null)if(n)Va(l,!1);else{if(lt!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(u=Ur(e),u!==null){for(t.flags|=128,Va(l,!1),n=u.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),t.subtreeFlags=0,n=o,o=t.child;o!==null;)l=o,e=n,l.flags&=14680066,u=l.alternate,u===null?(l.childLanes=0,l.lanes=e,l.child=null,l.subtreeFlags=0,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.subtreeFlags=0,l.deletions=null,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,e=u.dependencies,l.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext}),o=o.sibling;return Ve(Je,Je.current&1|2),t.child}e=e.sibling}l.tail!==null&&Le()>ra&&(t.flags|=128,n=!0,Va(l,!1),t.lanes=4194304)}else{if(!n)if(e=Ur(u),e!==null){if(t.flags|=128,n=!0,o=e.updateQueue,o!==null&&(t.updateQueue=o,t.flags|=4),Va(l,!0),l.tail===null&&l.tailMode==="hidden"&&!u.alternate&&!$e)return Pt(t),null}else 2*Le()-l.renderingStartTime>ra&&o!==1073741824&&(t.flags|=128,n=!0,Va(l,!1),t.lanes=4194304);l.isBackwards?(u.sibling=t.child,t.child=u):(o=l.last,o!==null?o.sibling=u:t.child=u,l.last=u)}return l.tail!==null?(t=l.tail,l.rendering=t,l.tail=t.sibling,l.renderingStartTime=Le(),t.sibling=null,o=Je.current,Ve(Je,n?o&1|2:o&1),t):(Pt(t),null);case 22:case 23:return el(),n=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==n&&(t.flags|=8192),n&&(t.mode&1)!==0?(zt&1073741824)!==0&&(Pt(t),t.subtreeFlags&6&&(t.flags|=8192)):Pt(t),null;case 24:return null;case 25:return null}throw Error(s(156,t.tag))}function Vf(e,t){switch(cs(t),t.tag){case 1:return xt(t.type)&&Mr(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ta(),Ke(bt),Ke(yt),Ss(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 5:return ws(t),null;case 13:if(Ke(Je),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(s(340));Jn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Ke(Je),null;case 4:return ta(),null;case 10:return hs(t.type._context),null;case 22:case 23:return el(),null;case 24:return null;default:return null}}var Jr=!1,wt=!1,Yf=typeof WeakSet=="function"?WeakSet:Set,Q=null;function na(e,t){var o=e.ref;if(o!==null)if(typeof o=="function")try{o(null)}catch(n){ot(e,t,n)}else o.current=null}function Us(e,t,o){try{o()}catch(n){ot(e,t,n)}}var Iu=!1;function qf(e,t){if(es=yr,e=hc(),qi(e)){if("selectionStart"in e)var o={start:e.selectionStart,end:e.selectionEnd};else e:{o=(o=e.ownerDocument)&&o.defaultView||window;var n=o.getSelection&&o.getSelection();if(n&&n.rangeCount!==0){o=n.anchorNode;var r=n.anchorOffset,l=n.focusNode;n=n.focusOffset;try{o.nodeType,l.nodeType}catch{o=null;break e}var u=0,g=-1,v=-1,j=0,z=0,I=e,D=null;t:for(;;){for(var K;I!==o||r!==0&&I.nodeType!==3||(g=u+r),I!==l||n!==0&&I.nodeType!==3||(v=u+n),I.nodeType===3&&(u+=I.nodeValue.length),(K=I.firstChild)!==null;)D=I,I=K;for(;;){if(I===e)break t;if(D===o&&++j===r&&(g=u),D===l&&++z===n&&(v=u),(K=I.nextSibling)!==null)break;I=D,D=I.parentNode}I=K}o=g===-1||v===-1?null:{start:g,end:v}}else o=null}o=o||{start:0,end:0}}else o=null;for(ts={focusedElem:e,selectionRange:o},yr=!1,Q=t;Q!==null;)if(t=Q,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Q=e;else for(;Q!==null;){t=Q;try{var Z=t.alternate;if((t.flags&1024)!==0)switch(t.tag){case 0:case 11:case 15:break;case 1:if(Z!==null){var te=Z.memoizedProps,nt=Z.memoizedState,b=t.stateNode,w=b.getSnapshotBeforeUpdate(t.elementType===t.type?te:Gt(t.type,te),nt);b.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var R=t.stateNode.containerInfo;R.nodeType===1?R.textContent="":R.nodeType===9&&R.documentElement&&R.removeChild(R.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(s(163))}}catch(W){ot(t,t.return,W)}if(e=t.sibling,e!==null){e.return=t.return,Q=e;break}Q=t.return}return Z=Iu,Iu=!1,Z}function Ya(e,t,o){var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var r=n=n.next;do{if((r.tag&e)===e){var l=r.destroy;r.destroy=void 0,l!==void 0&&Us(t,o,l)}r=r.next}while(r!==n)}}function Xr(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var o=t=t.next;do{if((o.tag&e)===e){var n=o.create;o.destroy=n()}o=o.next}while(o!==t)}}function Hs(e){var t=e.ref;if(t!==null){var o=e.stateNode;switch(e.tag){case 5:e=o;break;default:e=o}typeof t=="function"?t(e):t.current=e}}function Ou(e){var t=e.alternate;t!==null&&(e.alternate=null,Ou(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[io],delete t[Aa],delete t[rs],delete t[Ef],delete t[_f])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Fu(e){return e.tag===5||e.tag===3||e.tag===4}function Bu(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Fu(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Vs(e,t,o){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?o.nodeType===8?o.parentNode.insertBefore(e,t):o.insertBefore(e,t):(o.nodeType===8?(t=o.parentNode,t.insertBefore(e,o)):(t=o,t.appendChild(e)),o=o._reactRootContainer,o!=null||t.onclick!==null||(t.onclick=_r));else if(n!==4&&(e=e.child,e!==null))for(Vs(e,t,o),e=e.sibling;e!==null;)Vs(e,t,o),e=e.sibling}function Ys(e,t,o){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?o.insertBefore(e,t):o.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(Ys(e,t,o),e=e.sibling;e!==null;)Ys(e,t,o),e=e.sibling}var ht=null,Jt=!1;function Jo(e,t,o){for(o=o.child;o!==null;)Wu(e,t,o),o=o.sibling}function Wu(e,t,o){if(gt&&typeof gt.onCommitFiberUnmount=="function")try{gt.onCommitFiberUnmount(He,o)}catch{}switch(o.tag){case 5:wt||na(o,t);case 6:var n=ht,r=Jt;ht=null,Jo(e,t,o),ht=n,Jt=r,ht!==null&&(Jt?(e=ht,o=o.stateNode,e.nodeType===8?e.parentNode.removeChild(o):e.removeChild(o)):ht.removeChild(o.stateNode));break;case 18:ht!==null&&(Jt?(e=ht,o=o.stateNode,e.nodeType===8?as(e.parentNode,o):e.nodeType===1&&as(e,o),ba(e)):as(ht,o.stateNode));break;case 4:n=ht,r=Jt,ht=o.stateNode.containerInfo,Jt=!0,Jo(e,t,o),ht=n,Jt=r;break;case 0:case 11:case 14:case 15:if(!wt&&(n=o.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){r=n=n.next;do{var l=r,u=l.destroy;l=l.tag,u!==void 0&&((l&2)!==0||(l&4)!==0)&&Us(o,t,u),r=r.next}while(r!==n)}Jo(e,t,o);break;case 1:if(!wt&&(na(o,t),n=o.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=o.memoizedProps,n.state=o.memoizedState,n.componentWillUnmount()}catch(g){ot(o,t,g)}Jo(e,t,o);break;case 21:Jo(e,t,o);break;case 22:o.mode&1?(wt=(n=wt)||o.memoizedState!==null,Jo(e,t,o),wt=n):Jo(e,t,o);break;default:Jo(e,t,o)}}function Uu(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var o=e.stateNode;o===null&&(o=e.stateNode=new Yf),t.forEach(function(n){var r=tg.bind(null,e,n);o.has(n)||(o.add(n),n.then(r,r))})}}function Xt(e,t){var o=t.deletions;if(o!==null)for(var n=0;n<o.length;n++){var r=o[n];try{var l=e,u=t,g=u;e:for(;g!==null;){switch(g.tag){case 5:ht=g.stateNode,Jt=!1;break e;case 3:ht=g.stateNode.containerInfo,Jt=!0;break e;case 4:ht=g.stateNode.containerInfo,Jt=!0;break e}g=g.return}if(ht===null)throw Error(s(160));Wu(l,u,r),ht=null,Jt=!1;var v=r.alternate;v!==null&&(v.return=null),r.return=null}catch(j){ot(r,t,j)}}if(t.subtreeFlags&12854)for(t=t.child;t!==null;)Hu(t,e),t=t.sibling}function Hu(e,t){var o=e.alternate,n=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(Xt(t,e),co(e),n&4){try{Ya(3,e,e.return),Xr(3,e)}catch(te){ot(e,e.return,te)}try{Ya(5,e,e.return)}catch(te){ot(e,e.return,te)}}break;case 1:Xt(t,e),co(e),n&512&&o!==null&&na(o,o.return);break;case 5:if(Xt(t,e),co(e),n&512&&o!==null&&na(o,o.return),e.flags&32){var r=e.stateNode;try{Do(r,"")}catch(te){ot(e,e.return,te)}}if(n&4&&(r=e.stateNode,r!=null)){var l=e.memoizedProps,u=o!==null?o.memoizedProps:l,g=e.type,v=e.updateQueue;if(e.updateQueue=null,v!==null)try{g==="input"&&l.type==="radio"&&l.name!=null&&Mt(r,l),fa(g,u);var j=fa(g,l);for(u=0;u<v.length;u+=2){var z=v[u],I=v[u+1];z==="style"?pa(r,I):z==="dangerouslySetInnerHTML"?Ft(r,I):z==="children"?Do(r,I):ue(r,z,I,j)}switch(g){case"input":Lo(r,l);break;case"textarea":to(r,l);break;case"select":var D=r._wrapperState.wasMultiple;r._wrapperState.wasMultiple=!!l.multiple;var K=l.value;K!=null?Ge(r,!!l.multiple,K,!1):D!==!!l.multiple&&(l.defaultValue!=null?Ge(r,!!l.multiple,l.defaultValue,!0):Ge(r,!!l.multiple,l.multiple?[]:"",!1))}r[Aa]=l}catch(te){ot(e,e.return,te)}}break;case 6:if(Xt(t,e),co(e),n&4){if(e.stateNode===null)throw Error(s(162));r=e.stateNode,l=e.memoizedProps;try{r.nodeValue=l}catch(te){ot(e,e.return,te)}}break;case 3:if(Xt(t,e),co(e),n&4&&o!==null&&o.memoizedState.isDehydrated)try{ba(t.containerInfo)}catch(te){ot(e,e.return,te)}break;case 4:Xt(t,e),co(e);break;case 13:Xt(t,e),co(e),r=e.child,r.flags&8192&&(l=r.memoizedState!==null,r.stateNode.isHidden=l,!l||r.alternate!==null&&r.alternate.memoizedState!==null||($s=Le())),n&4&&Uu(e);break;case 22:if(z=o!==null&&o.memoizedState!==null,e.mode&1?(wt=(j=wt)||z,Xt(t,e),wt=j):Xt(t,e),co(e),n&8192){if(j=e.memoizedState!==null,(e.stateNode.isHidden=j)&&!z&&(e.mode&1)!==0)for(Q=e,z=e.child;z!==null;){for(I=Q=z;Q!==null;){switch(D=Q,K=D.child,D.tag){case 0:case 11:case 14:case 15:Ya(4,D,D.return);break;case 1:na(D,D.return);var Z=D.stateNode;if(typeof Z.componentWillUnmount=="function"){n=D,o=D.return;try{t=n,Z.props=t.memoizedProps,Z.state=t.memoizedState,Z.componentWillUnmount()}catch(te){ot(n,o,te)}}break;case 5:na(D,D.return);break;case 22:if(D.memoizedState!==null){qu(I);continue}}K!==null?(K.return=D,Q=K):qu(I)}z=z.sibling}e:for(z=null,I=e;;){if(I.tag===5){if(z===null){z=I;try{r=I.stateNode,j?(l=r.style,typeof l.setProperty=="function"?l.setProperty("display","none","important"):l.display="none"):(g=I.stateNode,v=I.memoizedProps.style,u=v!=null&&v.hasOwnProperty("display")?v.display:null,g.style.display=qt("display",u))}catch(te){ot(e,e.return,te)}}}else if(I.tag===6){if(z===null)try{I.stateNode.nodeValue=j?"":I.memoizedProps}catch(te){ot(e,e.return,te)}}else if((I.tag!==22&&I.tag!==23||I.memoizedState===null||I===e)&&I.child!==null){I.child.return=I,I=I.child;continue}if(I===e)break e;for(;I.sibling===null;){if(I.return===null||I.return===e)break e;z===I&&(z=null),I=I.return}z===I&&(z=null),I.sibling.return=I.return,I=I.sibling}}break;case 19:Xt(t,e),co(e),n&4&&Uu(e);break;case 21:break;default:Xt(t,e),co(e)}}function co(e){var t=e.flags;if(t&2){try{e:{for(var o=e.return;o!==null;){if(Fu(o)){var n=o;break e}o=o.return}throw Error(s(160))}switch(n.tag){case 5:var r=n.stateNode;n.flags&32&&(Do(r,""),n.flags&=-33);var l=Bu(e);Ys(e,l,r);break;case 3:case 4:var u=n.stateNode.containerInfo,g=Bu(e);Vs(e,g,u);break;default:throw Error(s(161))}}catch(v){ot(e,e.return,v)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function Kf(e,t,o){Q=e,Vu(e)}function Vu(e,t,o){for(var n=(e.mode&1)!==0;Q!==null;){var r=Q,l=r.child;if(r.tag===22&&n){var u=r.memoizedState!==null||Jr;if(!u){var g=r.alternate,v=g!==null&&g.memoizedState!==null||wt;g=Jr;var j=wt;if(Jr=u,(wt=v)&&!j)for(Q=r;Q!==null;)u=Q,v=u.child,u.tag===22&&u.memoizedState!==null?Ku(r):v!==null?(v.return=u,Q=v):Ku(r);for(;l!==null;)Q=l,Vu(l),l=l.sibling;Q=r,Jr=g,wt=j}Yu(e)}else(r.subtreeFlags&8772)!==0&&l!==null?(l.return=r,Q=l):Yu(e)}}function Yu(e){for(;Q!==null;){var t=Q;if((t.flags&8772)!==0){var o=t.alternate;try{if((t.flags&8772)!==0)switch(t.tag){case 0:case 11:case 15:wt||Xr(5,t);break;case 1:var n=t.stateNode;if(t.flags&4&&!wt)if(o===null)n.componentDidMount();else{var r=t.elementType===t.type?o.memoizedProps:Gt(t.type,o.memoizedProps);n.componentDidUpdate(r,o.memoizedState,n.__reactInternalSnapshotBeforeUpdate)}var l=t.updateQueue;l!==null&&qc(t,l,n);break;case 3:var u=t.updateQueue;if(u!==null){if(o=null,t.child!==null)switch(t.child.tag){case 5:o=t.child.stateNode;break;case 1:o=t.child.stateNode}qc(t,u,o)}break;case 5:var g=t.stateNode;if(o===null&&t.flags&4){o=g;var v=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":v.autoFocus&&o.focus();break;case"img":v.src&&(o.src=v.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(t.memoizedState===null){var j=t.alternate;if(j!==null){var z=j.memoizedState;if(z!==null){var I=z.dehydrated;I!==null&&ba(I)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;default:throw Error(s(163))}wt||t.flags&512&&Hs(t)}catch(D){ot(t,t.return,D)}}if(t===e){Q=null;break}if(o=t.sibling,o!==null){o.return=t.return,Q=o;break}Q=t.return}}function qu(e){for(;Q!==null;){var t=Q;if(t===e){Q=null;break}var o=t.sibling;if(o!==null){o.return=t.return,Q=o;break}Q=t.return}}function Ku(e){for(;Q!==null;){var t=Q;try{switch(t.tag){case 0:case 11:case 15:var o=t.return;try{Xr(4,t)}catch(v){ot(t,o,v)}break;case 1:var n=t.stateNode;if(typeof n.componentDidMount=="function"){var r=t.return;try{n.componentDidMount()}catch(v){ot(t,r,v)}}var l=t.return;try{Hs(t)}catch(v){ot(t,l,v)}break;case 5:var u=t.return;try{Hs(t)}catch(v){ot(t,u,v)}}}catch(v){ot(t,t.return,v)}if(t===e){Q=null;break}var g=t.sibling;if(g!==null){g.return=t.return,Q=g;break}Q=t.return}}var $f=Math.ceil,Zr=re.ReactCurrentDispatcher,qs=re.ReactCurrentOwner,Vt=re.ReactCurrentBatchConfig,Me=0,dt=null,at=null,mt=0,zt=0,aa=qo(0),lt=0,qa=null,bn=0,ei=0,Ks=0,Ka=null,Rt=null,$s=0,ra=1/0,xo=null,ti=!1,Qs=null,Xo=null,oi=!1,Zo=null,ni=0,$a=0,Gs=null,ai=-1,ri=0;function St(){return(Me&6)!==0?Le():ai!==-1?ai:ai=Le()}function en(e){return(e.mode&1)===0?1:(Me&2)!==0&&mt!==0?mt&-mt:Mf.transition!==null?(ri===0&&(ri=Bl()),ri):(e=Fe,e!==0||(e=window.event,e=e===void 0?16:Ql(e.type)),e)}function Zt(e,t,o,n){if(50<$a)throw $a=0,Gs=null,Error(s(185));va(e,o,n),((Me&2)===0||e!==dt)&&(e===dt&&((Me&2)===0&&(ei|=o),lt===4&&tn(e,mt)),jt(e,n),o===1&&Me===0&&(t.mode&1)===0&&(ra=Le()+500,Lr&&$o()))}function jt(e,t){var o=e.callbackNode;Tp(e,t);var n=gr(e,e===dt?mt:0);if(n===0)o!==null&&go(o),e.callbackNode=null,e.callbackPriority=0;else if(t=n&-n,e.callbackPriority!==t){if(o!=null&&go(o),t===1)e.tag===0?Tf(Qu.bind(null,e)):Ac(Qu.bind(null,e)),Rf(function(){(Me&6)===0&&$o()}),o=null;else{switch(Wl(n)){case 1:o=ho;break;case 4:o=ro;break;case 16:o=mo;break;case 536870912:o=je;break;default:o=mo}o=nd(o,$u.bind(null,e))}e.callbackPriority=t,e.callbackNode=o}}function $u(e,t){if(ai=-1,ri=0,(Me&6)!==0)throw Error(s(327));var o=e.callbackNode;if(ia()&&e.callbackNode!==o)return null;var n=gr(e,e===dt?mt:0);if(n===0)return null;if((n&30)!==0||(n&e.expiredLanes)!==0||t)t=ii(e,n);else{t=n;var r=Me;Me|=2;var l=Ju();(dt!==e||mt!==t)&&(xo=null,ra=Le()+500,Cn(e,t));do try{Jf();break}catch(g){Gu(e,g)}while(!0);gs(),Zr.current=l,Me=r,at!==null?t=0:(dt=null,mt=0,t=lt)}if(t!==0){if(t===2&&(r=Ti(e),r!==0&&(n=r,t=Js(e,r))),t===1)throw o=qa,Cn(e,0),tn(e,n),jt(e,Le()),o;if(t===6)tn(e,n);else{if(r=e.current.alternate,(n&30)===0&&!Qf(r)&&(t=ii(e,n),t===2&&(l=Ti(e),l!==0&&(n=l,t=Js(e,l))),t===1))throw o=qa,Cn(e,0),tn(e,n),jt(e,Le()),o;switch(e.finishedWork=r,e.finishedLanes=n,t){case 0:case 1:throw Error(s(345));case 2:Rn(e,Rt,xo);break;case 3:if(tn(e,n),(n&130023424)===n&&(t=$s+500-Le(),10<t)){if(gr(e,0)!==0)break;if(r=e.suspendedLanes,(r&n)!==n){St(),e.pingedLanes|=e.suspendedLanes&r;break}e.timeoutHandle=ns(Rn.bind(null,e,Rt,xo),t);break}Rn(e,Rt,xo);break;case 4:if(tn(e,n),(n&4194240)===n)break;for(t=e.eventTimes,r=-1;0<n;){var u=31-Ae(n);l=1<<u,u=t[u],u>r&&(r=u),n&=~l}if(n=r,n=Le()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*$f(n/1960))-n,10<n){e.timeoutHandle=ns(Rn.bind(null,e,Rt,xo),n);break}Rn(e,Rt,xo);break;case 5:Rn(e,Rt,xo);break;default:throw Error(s(329))}}}return jt(e,Le()),e.callbackNode===o?$u.bind(null,e):null}function Js(e,t){var o=Ka;return e.current.memoizedState.isDehydrated&&(Cn(e,t).flags|=256),e=ii(e,t),e!==2&&(t=Rt,Rt=o,t!==null&&Xs(t)),e}function Xs(e){Rt===null?Rt=e:Rt.push.apply(Rt,e)}function Qf(e){for(var t=e;;){if(t.flags&16384){var o=t.updateQueue;if(o!==null&&(o=o.stores,o!==null))for(var n=0;n<o.length;n++){var r=o[n],l=r.getSnapshot;r=r.value;try{if(!$t(l(),r))return!1}catch{return!1}}}if(o=t.child,t.subtreeFlags&16384&&o!==null)o.return=t,t=o;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function tn(e,t){for(t&=~Ks,t&=~ei,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var o=31-Ae(t),n=1<<o;e[o]=-1,t&=~n}}function Qu(e){if((Me&6)!==0)throw Error(s(327));ia();var t=gr(e,0);if((t&1)===0)return jt(e,Le()),null;var o=ii(e,t);if(e.tag!==0&&o===2){var n=Ti(e);n!==0&&(t=n,o=Js(e,n))}if(o===1)throw o=qa,Cn(e,0),tn(e,t),jt(e,Le()),o;if(o===6)throw Error(s(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,Rn(e,Rt,xo),jt(e,Le()),null}function Zs(e,t){var o=Me;Me|=1;try{return e(t)}finally{Me=o,Me===0&&(ra=Le()+500,Lr&&$o())}}function xn(e){Zo!==null&&Zo.tag===0&&(Me&6)===0&&ia();var t=Me;Me|=1;var o=Vt.transition,n=Fe;try{if(Vt.transition=null,Fe=1,e)return e()}finally{Fe=n,Vt.transition=o,Me=t,(Me&6)===0&&$o()}}function el(){zt=aa.current,Ke(aa)}function Cn(e,t){e.finishedWork=null,e.finishedLanes=0;var o=e.timeoutHandle;if(o!==-1&&(e.timeoutHandle=-1,Cf(o)),at!==null)for(o=at.return;o!==null;){var n=o;switch(cs(n),n.tag){case 1:n=n.type.childContextTypes,n!=null&&Mr();break;case 3:ta(),Ke(bt),Ke(yt),Ss();break;case 5:ws(n);break;case 4:ta();break;case 13:Ke(Je);break;case 19:Ke(Je);break;case 10:hs(n.type._context);break;case 22:case 23:el()}o=o.return}if(dt=e,at=e=on(e.current,null),mt=zt=t,lt=0,qa=null,Ks=ei=bn=0,Rt=Ka=null,wn!==null){for(t=0;t<wn.length;t++)if(o=wn[t],n=o.interleaved,n!==null){o.interleaved=null;var r=n.next,l=o.pending;if(l!==null){var u=l.next;l.next=r,n.next=u}o.pending=n}wn=null}return e}function Gu(e,t){do{var o=at;try{if(gs(),Hr.current=Kr,Vr){for(var n=Xe.memoizedState;n!==null;){var r=n.queue;r!==null&&(r.pending=null),n=n.next}Vr=!1}if(Sn=0,ut=st=Xe=null,Ba=!1,Wa=0,qs.current=null,o===null||o.return===null){lt=1,qa=t,at=null;break}e:{var l=e,u=o.return,g=o,v=t;if(t=mt,g.flags|=32768,v!==null&&typeof v=="object"&&typeof v.then=="function"){var j=v,z=g,I=z.tag;if((z.mode&1)===0&&(I===0||I===11||I===15)){var D=z.alternate;D?(z.updateQueue=D.updateQueue,z.memoizedState=D.memoizedState,z.lanes=D.lanes):(z.updateQueue=null,z.memoizedState=null)}var K=ku(u);if(K!==null){K.flags&=-257,Su(K,u,g,l,t),K.mode&1&&wu(l,j,t),t=K,v=j;var Z=t.updateQueue;if(Z===null){var te=new Set;te.add(v),t.updateQueue=te}else Z.add(v);break e}else{if((t&1)===0){wu(l,j,t),tl();break e}v=Error(s(426))}}else if($e&&g.mode&1){var nt=ku(u);if(nt!==null){(nt.flags&65536)===0&&(nt.flags|=256),Su(nt,u,g,l,t),ps(oa(v,g));break e}}l=v=oa(v,g),lt!==4&&(lt=2),Ka===null?Ka=[l]:Ka.push(l),l=u;do{switch(l.tag){case 3:l.flags|=65536,t&=-t,l.lanes|=t;var b=vu(l,v,t);Yc(l,b);break e;case 1:g=v;var w=l.type,R=l.stateNode;if((l.flags&128)===0&&(typeof w.getDerivedStateFromError=="function"||R!==null&&typeof R.componentDidCatch=="function"&&(Xo===null||!Xo.has(R)))){l.flags|=65536,t&=-t,l.lanes|=t;var W=Pu(l,g,t);Yc(l,W);break e}}l=l.return}while(l!==null)}Zu(o)}catch(oe){t=oe,at===o&&o!==null&&(at=o=o.return);continue}break}while(!0)}function Ju(){var e=Zr.current;return Zr.current=Kr,e===null?Kr:e}function tl(){(lt===0||lt===3||lt===2)&&(lt=4),dt===null||(bn&268435455)===0&&(ei&268435455)===0||tn(dt,mt)}function ii(e,t){var o=Me;Me|=2;var n=Ju();(dt!==e||mt!==t)&&(xo=null,Cn(e,t));do try{Gf();break}catch(r){Gu(e,r)}while(!0);if(gs(),Me=o,Zr.current=n,at!==null)throw Error(s(261));return dt=null,mt=0,lt}function Gf(){for(;at!==null;)Xu(at)}function Jf(){for(;at!==null&&!gn();)Xu(at)}function Xu(e){var t=od(e.alternate,e,zt);e.memoizedProps=e.pendingProps,t===null?Zu(e):at=t,qs.current=null}function Zu(e){var t=e;do{var o=t.alternate;if(e=t.return,(t.flags&32768)===0){if(o=Hf(o,t,zt),o!==null){at=o;return}}else{if(o=Vf(o,t),o!==null){o.flags&=32767,at=o;return}if(e!==null)e.flags|=32768,e.subtreeFlags=0,e.deletions=null;else{lt=6,at=null;return}}if(t=t.sibling,t!==null){at=t;return}at=t=e}while(t!==null);lt===0&&(lt=5)}function Rn(e,t,o){var n=Fe,r=Vt.transition;try{Vt.transition=null,Fe=1,Xf(e,t,o,n)}finally{Vt.transition=r,Fe=n}return null}function Xf(e,t,o,n){do ia();while(Zo!==null);if((Me&6)!==0)throw Error(s(327));o=e.finishedWork;var r=e.finishedLanes;if(o===null)return null;if(e.finishedWork=null,e.finishedLanes=0,o===e.current)throw Error(s(177));e.callbackNode=null,e.callbackPriority=0;var l=o.lanes|o.childLanes;if(Mp(e,l),e===dt&&(at=dt=null,mt=0),(o.subtreeFlags&2064)===0&&(o.flags&2064)===0||oi||(oi=!0,nd(mo,function(){return ia(),null})),l=(o.flags&15990)!==0,(o.subtreeFlags&15990)!==0||l){l=Vt.transition,Vt.transition=null;var u=Fe;Fe=1;var g=Me;Me|=4,qs.current=null,qf(e,o),Hu(o,e),vf(ts),yr=!!es,ts=es=null,e.current=o,Kf(o),Kt(),Me=g,Fe=u,Vt.transition=l}else e.current=o;if(oi&&(oi=!1,Zo=e,ni=r),l=e.pendingLanes,l===0&&(Xo=null),hn(o.stateNode),jt(e,Le()),t!==null)for(n=e.onRecoverableError,o=0;o<t.length;o++)r=t[o],n(r.value,{componentStack:r.stack,digest:r.digest});if(ti)throw ti=!1,e=Qs,Qs=null,e;return(ni&1)!==0&&e.tag!==0&&ia(),l=e.pendingLanes,(l&1)!==0?e===Gs?$a++:($a=0,Gs=e):$a=0,$o(),null}function ia(){if(Zo!==null){var e=Wl(ni),t=Vt.transition,o=Fe;try{if(Vt.transition=null,Fe=16>e?16:e,Zo===null)var n=!1;else{if(e=Zo,Zo=null,ni=0,(Me&6)!==0)throw Error(s(331));var r=Me;for(Me|=4,Q=e.current;Q!==null;){var l=Q,u=l.child;if((Q.flags&16)!==0){var g=l.deletions;if(g!==null){for(var v=0;v<g.length;v++){var j=g[v];for(Q=j;Q!==null;){var z=Q;switch(z.tag){case 0:case 11:case 15:Ya(8,z,l)}var I=z.child;if(I!==null)I.return=z,Q=I;else for(;Q!==null;){z=Q;var D=z.sibling,K=z.return;if(Ou(z),z===j){Q=null;break}if(D!==null){D.return=K,Q=D;break}Q=K}}}var Z=l.alternate;if(Z!==null){var te=Z.child;if(te!==null){Z.child=null;do{var nt=te.sibling;te.sibling=null,te=nt}while(te!==null)}}Q=l}}if((l.subtreeFlags&2064)!==0&&u!==null)u.return=l,Q=u;else e:for(;Q!==null;){if(l=Q,(l.flags&2048)!==0)switch(l.tag){case 0:case 11:case 15:Ya(9,l,l.return)}var b=l.sibling;if(b!==null){b.return=l.return,Q=b;break e}Q=l.return}}var w=e.current;for(Q=w;Q!==null;){u=Q;var R=u.child;if((u.subtreeFlags&2064)!==0&&R!==null)R.return=u,Q=R;else e:for(u=w;Q!==null;){if(g=Q,(g.flags&2048)!==0)try{switch(g.tag){case 0:case 11:case 15:Xr(9,g)}}catch(oe){ot(g,g.return,oe)}if(g===u){Q=null;break e}var W=g.sibling;if(W!==null){W.return=g.return,Q=W;break e}Q=g.return}}if(Me=r,$o(),gt&&typeof gt.onPostCommitFiberRoot=="function")try{gt.onPostCommitFiberRoot(He,e)}catch{}n=!0}return n}finally{Fe=o,Vt.transition=t}}return!1}function ed(e,t,o){t=oa(o,t),t=vu(e,t,1),e=Go(e,t,1),t=St(),e!==null&&(va(e,1,t),jt(e,t))}function ot(e,t,o){if(e.tag===3)ed(e,e,o);else for(;t!==null;){if(t.tag===3){ed(t,e,o);break}else if(t.tag===1){var n=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof n.componentDidCatch=="function"&&(Xo===null||!Xo.has(n))){e=oa(o,e),e=Pu(t,e,1),t=Go(t,e,1),e=St(),t!==null&&(va(t,1,e),jt(t,e));break}}t=t.return}}function Zf(e,t,o){var n=e.pingCache;n!==null&&n.delete(t),t=St(),e.pingedLanes|=e.suspendedLanes&o,dt===e&&(mt&o)===o&&(lt===4||lt===3&&(mt&130023424)===mt&&500>Le()-$s?Cn(e,0):Ks|=o),jt(e,t)}function td(e,t){t===0&&((e.mode&1)===0?t=1:(t=fr,fr<<=1,(fr&130023424)===0&&(fr=4194304)));var o=St();e=ko(e,t),e!==null&&(va(e,t,o),jt(e,o))}function eg(e){var t=e.memoizedState,o=0;t!==null&&(o=t.retryLane),td(e,o)}function tg(e,t){var o=0;switch(e.tag){case 13:var n=e.stateNode,r=e.memoizedState;r!==null&&(o=r.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(s(314))}n!==null&&n.delete(t),td(e,o)}var od;od=function(e,t,o){if(e!==null)if(e.memoizedProps!==t.pendingProps||bt.current)Ct=!0;else{if((e.lanes&o)===0&&(t.flags&128)===0)return Ct=!1,Uf(e,t,o);Ct=(e.flags&131072)!==0}else Ct=!1,$e&&(t.flags&1048576)!==0&&Dc(t,Dr,t.index);switch(t.lanes=0,t.tag){case 2:var n=t.type;Gr(e,t),e=t.pendingProps;var r=$n(t,yt.current);ea(t,o),r=Cs(null,t,n,e,r,o);var l=Rs();return t.flags|=1,typeof r=="object"&&r!==null&&typeof r.render=="function"&&r.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,xt(n)?(l=!0,Nr(t)):l=!1,t.memoizedState=r.state!==null&&r.state!==void 0?r.state:null,vs(t),r.updater=$r,t.stateNode=r,r._reactInternals=t,Ns(t,n,e,o),t=zs(null,t,n,!0,l,o)):(t.tag=0,$e&&l&&ls(t),kt(null,t,r,o),t=t.child),t;case 16:n=t.elementType;e:{switch(Gr(e,t),e=t.pendingProps,r=n._init,n=r(n._payload),t.type=n,r=t.tag=ng(n),e=Gt(n,e),r){case 0:t=Ds(null,t,n,e,o);break e;case 1:t=Eu(null,t,n,e,o);break e;case 11:t=bu(null,t,n,e,o);break e;case 14:t=xu(null,t,n,Gt(n.type,e),o);break e}throw Error(s(306,n,""))}return t;case 0:return n=t.type,r=t.pendingProps,r=t.elementType===n?r:Gt(n,r),Ds(e,t,n,r,o);case 1:return n=t.type,r=t.pendingProps,r=t.elementType===n?r:Gt(n,r),Eu(e,t,n,r,o);case 3:e:{if(_u(t),e===null)throw Error(s(387));n=t.pendingProps,l=t.memoizedState,r=l.element,Vc(e,t),Wr(t,n,null,o);var u=t.memoizedState;if(n=u.element,l.isDehydrated)if(l={element:n,isDehydrated:!1,cache:u.cache,pendingSuspenseBoundaries:u.pendingSuspenseBoundaries,transitions:u.transitions},t.updateQueue.baseState=l,t.memoizedState=l,t.flags&256){r=oa(Error(s(423)),t),t=Tu(e,t,n,o,r);break e}else if(n!==r){r=oa(Error(s(424)),t),t=Tu(e,t,n,o,r);break e}else for(Dt=Yo(t.stateNode.containerInfo.firstChild),At=t,$e=!0,Qt=null,o=Uc(t,null,n,o),t.child=o;o;)o.flags=o.flags&-3|4096,o=o.sibling;else{if(Jn(),n===r){t=bo(e,t,o);break e}kt(e,t,n,o)}t=t.child}return t;case 5:return Kc(t),e===null&&ds(t),n=t.type,r=t.pendingProps,l=e!==null?e.memoizedProps:null,u=r.children,os(n,r)?u=null:l!==null&&os(n,l)&&(t.flags|=32),ju(e,t),kt(e,t,u,o),t.child;case 6:return e===null&&ds(t),null;case 13:return Mu(e,t,o);case 4:return Ps(t,t.stateNode.containerInfo),n=t.pendingProps,e===null?t.child=Xn(t,null,n,o):kt(e,t,n,o),t.child;case 11:return n=t.type,r=t.pendingProps,r=t.elementType===n?r:Gt(n,r),bu(e,t,n,r,o);case 7:return kt(e,t,t.pendingProps,o),t.child;case 8:return kt(e,t,t.pendingProps.children,o),t.child;case 12:return kt(e,t,t.pendingProps.children,o),t.child;case 10:e:{if(n=t.type._context,r=t.pendingProps,l=t.memoizedProps,u=r.value,Ve(Or,n._currentValue),n._currentValue=u,l!==null)if($t(l.value,u)){if(l.children===r.children&&!bt.current){t=bo(e,t,o);break e}}else for(l=t.child,l!==null&&(l.return=t);l!==null;){var g=l.dependencies;if(g!==null){u=l.child;for(var v=g.firstContext;v!==null;){if(v.context===n){if(l.tag===1){v=So(-1,o&-o),v.tag=2;var j=l.updateQueue;if(j!==null){j=j.shared;var z=j.pending;z===null?v.next=v:(v.next=z.next,z.next=v),j.pending=v}}l.lanes|=o,v=l.alternate,v!==null&&(v.lanes|=o),ms(l.return,o,t),g.lanes|=o;break}v=v.next}}else if(l.tag===10)u=l.type===t.type?null:l.child;else if(l.tag===18){if(u=l.return,u===null)throw Error(s(341));u.lanes|=o,g=u.alternate,g!==null&&(g.lanes|=o),ms(u,o,t),u=l.sibling}else u=l.child;if(u!==null)u.return=l;else for(u=l;u!==null;){if(u===t){u=null;break}if(l=u.sibling,l!==null){l.return=u.return,u=l;break}u=u.return}l=u}kt(e,t,r.children,o),t=t.child}return t;case 9:return r=t.type,n=t.pendingProps.children,ea(t,o),r=Ut(r),n=n(r),t.flags|=1,kt(e,t,n,o),t.child;case 14:return n=t.type,r=Gt(n,t.pendingProps),r=Gt(n.type,r),xu(e,t,n,r,o);case 15:return Cu(e,t,t.type,t.pendingProps,o);case 17:return n=t.type,r=t.pendingProps,r=t.elementType===n?r:Gt(n,r),Gr(e,t),t.tag=1,xt(n)?(e=!0,Nr(t)):e=!1,ea(t,o),mu(t,n,r),Ns(t,n,r,o),zs(null,t,n,!0,e,o);case 19:return Lu(e,t,o);case 22:return Ru(e,t,o)}throw Error(s(156,t.tag))};function nd(e,t){return Ye(e,t)}function og(e,t,o,n){this.tag=e,this.key=o,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Yt(e,t,o,n){return new og(e,t,o,n)}function ol(e){return e=e.prototype,!(!e||!e.isReactComponent)}function ng(e){if(typeof e=="function")return ol(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Te)return 11;if(e===Ze)return 14}return 2}function on(e,t){var o=e.alternate;return o===null?(o=Yt(e.tag,t,e.key,e.mode),o.elementType=e.elementType,o.type=e.type,o.stateNode=e.stateNode,o.alternate=e,e.alternate=o):(o.pendingProps=t,o.type=e.type,o.flags=0,o.subtreeFlags=0,o.deletions=null),o.flags=e.flags&14680064,o.childLanes=e.childLanes,o.lanes=e.lanes,o.child=e.child,o.memoizedProps=e.memoizedProps,o.memoizedState=e.memoizedState,o.updateQueue=e.updateQueue,t=e.dependencies,o.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},o.sibling=e.sibling,o.index=e.index,o.ref=e.ref,o}function si(e,t,o,n,r,l){var u=2;if(n=e,typeof e=="function")ol(e)&&(u=1);else if(typeof e=="string")u=5;else e:switch(e){case E:return jn(o.children,r,l,t);case J:u=8,r|=8;break;case ke:return e=Yt(12,o,t,r|2),e.elementType=ke,e.lanes=l,e;case ze:return e=Yt(13,o,t,r),e.elementType=ze,e.lanes=l,e;case he:return e=Yt(19,o,t,r),e.elementType=he,e.lanes=l,e;case Ie:return li(o,r,l,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case ie:u=10;break e;case We:u=9;break e;case Te:u=11;break e;case Ze:u=14;break e;case et:u=16,n=null;break e}throw Error(s(130,e==null?e:typeof e,""))}return t=Yt(u,o,t,r),t.elementType=e,t.type=n,t.lanes=l,t}function jn(e,t,o,n){return e=Yt(7,e,n,t),e.lanes=o,e}function li(e,t,o,n){return e=Yt(22,e,n,t),e.elementType=Ie,e.lanes=o,e.stateNode={isHidden:!1},e}function nl(e,t,o){return e=Yt(6,e,null,t),e.lanes=o,e}function al(e,t,o){return t=Yt(4,e.children!==null?e.children:[],e.key,t),t.lanes=o,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function ag(e,t,o,n,r){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Mi(0),this.expirationTimes=Mi(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Mi(0),this.identifierPrefix=n,this.onRecoverableError=r,this.mutableSourceEagerHydrationData=null}function rl(e,t,o,n,r,l,u,g,v){return e=new ag(e,t,o,g,v),t===1?(t=1,l===!0&&(t|=8)):t=0,l=Yt(3,null,null,t),e.current=l,l.stateNode=e,l.memoizedState={element:n,isDehydrated:o,cache:null,transitions:null,pendingSuspenseBoundaries:null},vs(l),e}function rg(e,t,o){var n=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:Ee,key:n==null?null:""+n,children:e,containerInfo:t,implementation:o}}function ad(e){if(!e)return Ko;e=e._reactInternals;e:{if(G(e)!==e||e.tag!==1)throw Error(s(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(xt(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(t!==null);throw Error(s(171))}if(e.tag===1){var o=e.type;if(xt(o))return Nc(e,o,t)}return t}function rd(e,t,o,n,r,l,u,g,v){return e=rl(o,n,!0,e,r,l,u,g,v),e.context=ad(null),o=e.current,n=St(),r=en(o),l=So(n,r),l.callback=t??null,Go(o,l,r),e.current.lanes=r,va(e,r,n),jt(e,n),e}function ci(e,t,o,n){var r=t.current,l=St(),u=en(r);return o=ad(o),t.context===null?t.context=o:t.pendingContext=o,t=So(l,u),t.payload={element:e},n=n===void 0?null:n,n!==null&&(t.callback=n),e=Go(r,t,u),e!==null&&(Zt(e,r,u,l),Br(e,r,u)),u}function ui(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 5:return e.child.stateNode;default:return e.child.stateNode}}function id(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var o=e.retryLane;e.retryLane=o!==0&&o<t?o:t}}function il(e,t){id(e,t),(e=e.alternate)&&id(e,t)}function ig(){return null}var sd=typeof reportError=="function"?reportError:function(e){console.error(e)};function sl(e){this._internalRoot=e}di.prototype.render=sl.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(s(409));ci(e,t,null,null)},di.prototype.unmount=sl.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;xn(function(){ci(null,e,null,null)}),t[yo]=null}};function di(e){this._internalRoot=e}di.prototype.unstable_scheduleHydration=function(e){if(e){var t=Vl();e={blockedOn:null,target:e,priority:t};for(var o=0;o<Uo.length&&t!==0&&t<Uo[o].priority;o++);Uo.splice(o,0,e),o===0&&Kl(e)}};function ll(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function pi(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11&&(e.nodeType!==8||e.nodeValue!==" react-mount-point-unstable "))}function ld(){}function sg(e,t,o,n,r){if(r){if(typeof n=="function"){var l=n;n=function(){var j=ui(u);l.call(j)}}var u=rd(t,n,e,0,null,!1,!1,"",ld);return e._reactRootContainer=u,e[yo]=u.current,Na(e.nodeType===8?e.parentNode:e),xn(),u}for(;r=e.lastChild;)e.removeChild(r);if(typeof n=="function"){var g=n;n=function(){var j=ui(v);g.call(j)}}var v=rl(e,0,!1,null,null,!1,!1,"",ld);return e._reactRootContainer=v,e[yo]=v.current,Na(e.nodeType===8?e.parentNode:e),xn(function(){ci(t,v,o,n)}),v}function fi(e,t,o,n,r){var l=o._reactRootContainer;if(l){var u=l;if(typeof r=="function"){var g=r;r=function(){var v=ui(u);g.call(v)}}ci(t,u,e,r)}else u=sg(o,t,e,r,n);return ui(u)}Ul=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var o=ya(t.pendingLanes);o!==0&&(Ni(t,o|1),jt(t,Le()),(Me&6)===0&&(ra=Le()+500,$o()))}break;case 13:xn(function(){var n=ko(e,1);if(n!==null){var r=St();Zt(n,e,1,r)}}),il(e,1)}},Li=function(e){if(e.tag===13){var t=ko(e,134217728);if(t!==null){var o=St();Zt(t,e,134217728,o)}il(e,134217728)}},Hl=function(e){if(e.tag===13){var t=en(e),o=ko(e,t);if(o!==null){var n=St();Zt(o,e,t,n)}il(e,t)}},Vl=function(){return Fe},Yl=function(e,t){var o=Fe;try{return Fe=e,t()}finally{Fe=o}},In=function(e,t,o){switch(t){case"input":if(Lo(e,o),t=o.name,o.type==="radio"&&t!=null){for(o=e;o.parentNode;)o=o.parentNode;for(o=o.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<o.length;t++){var n=o[t];if(n!==e&&n.form===e.form){var r=Tr(n);if(!r)throw Error(s(90));tt(n),Lo(n,r)}}}break;case"textarea":to(e,o);break;case"select":t=o.value,t!=null&&Ge(e,!!o.multiple,t,!1)}},ha=Zs,pn=xn;var lg={usingClientEntryPoint:!1,Events:[Da,qn,Tr,ga,cr,Zs]},Qa={findFiberByHostInstance:mn,bundleType:0,version:"18.3.1",rendererPackageName:"react-dom"},cg={bundleType:Qa.bundleType,version:Qa.version,rendererPackageName:Qa.rendererPackageName,rendererConfig:Qa.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:re.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return e=Oe(e),e===null?null:e.stateNode},findFiberByHostInstance:Qa.findFiberByHostInstance||ig,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var gi=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!gi.isDisabled&&gi.supportsFiber)try{He=gi.inject(cg),gt=gi}catch{}}return Et.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=lg,Et.createPortal=function(e,t){var o=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!ll(t))throw Error(s(200));return rg(e,t,null,o)},Et.createRoot=function(e,t){if(!ll(e))throw Error(s(299));var o=!1,n="",r=sd;return t!=null&&(t.unstable_strictMode===!0&&(o=!0),t.identifierPrefix!==void 0&&(n=t.identifierPrefix),t.onRecoverableError!==void 0&&(r=t.onRecoverableError)),t=rl(e,1,!1,null,null,o,!1,n,r),e[yo]=t.current,Na(e.nodeType===8?e.parentNode:e),new sl(t)},Et.findDOMNode=function(e){if(e==null)return null;if(e.nodeType===1)return e;var t=e._reactInternals;if(t===void 0)throw typeof e.render=="function"?Error(s(188)):(e=Object.keys(e).join(","),Error(s(268,e)));return e=Oe(t),e=e===null?null:e.stateNode,e},Et.flushSync=function(e){return xn(e)},Et.hydrate=function(e,t,o){if(!pi(t))throw Error(s(200));return fi(null,e,t,!0,o)},Et.hydrateRoot=function(e,t,o){if(!ll(e))throw Error(s(405));var n=o!=null&&o.hydratedSources||null,r=!1,l="",u=sd;if(o!=null&&(o.unstable_strictMode===!0&&(r=!0),o.identifierPrefix!==void 0&&(l=o.identifierPrefix),o.onRecoverableError!==void 0&&(u=o.onRecoverableError)),t=rd(t,null,e,1,o??null,r,!1,l,u),e[yo]=t.current,Na(e),n)for(e=0;e<n.length;e++)o=n[e],r=o._getVersion,r=r(o._source),t.mutableSourceEagerHydrationData==null?t.mutableSourceEagerHydrationData=[o,r]:t.mutableSourceEagerHydrationData.push(o,r);return new di(t)},Et.render=function(e,t,o){if(!pi(t))throw Error(s(200));return fi(null,e,t,!1,o)},Et.unmountComponentAtNode=function(e){if(!pi(e))throw Error(s(40));return e._reactRootContainer?(xn(function(){fi(null,null,e,!1,function(){e._reactRootContainer=null,e[yo]=null})}),!0):!1},Et.unstable_batchedUpdates=Zs,Et.unstable_renderSubtreeIntoContainer=function(e,t,o,n){if(!pi(o))throw Error(s(200));if(e==null||e._reactInternals===void 0)throw Error(s(38));return fi(e,t,o,!1,n)},Et.version="18.3.1-next-f1338f8080-20240426",Et}var md;function Xd(){if(md)return dl.exports;md=1;function a(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(a)}catch(i){console.error(i)}}return a(),dl.exports=vg(),dl.exports}var yd;function Pg(){if(yd)return hi;yd=1;var a=Xd();return hi.createRoot=a.createRoot,hi.hydrateRoot=a.hydrateRoot,hi}var wg=Pg(),T=El();const kg=Jd(T),Sg=Gd({__proto__:null,default:kg},[T]);var Zd=Xd();const bg=Jd(Zd),xg=Gd({__proto__:null,default:bg},[Zd]);/**
41
+ `+l.stack}return{value:e,source:t,stack:r,digest:null}}function Ns(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function Ls(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var Og=typeof WeakMap=="function"?WeakMap:Map;function vu(e,t,n){n=kn(-1,n),n.tag=3,n.payload={element:null};var o=t.value;return n.callback=function(){ti||(ti=!0,Gs=o),Ls(e,t)},n}function Pu(e,t,n){n=kn(-1,n),n.tag=3;var o=e.type.getDerivedStateFromError;if(typeof o=="function"){var r=t.value;n.payload=function(){return o(r)},n.callback=function(){Ls(e,t)}}var l=e.stateNode;return l!==null&&typeof l.componentDidCatch=="function"&&(n.callback=function(){Ls(e,t),typeof o!="function"&&(Zn===null?Zn=new Set([this]):Zn.add(this));var u=t.stack;this.componentDidCatch(t.value,{componentStack:u!==null?u:""})}),n}function wu(e,t,n){var o=e.pingCache;if(o===null){o=e.pingCache=new Og;var r=new Set;o.set(t,r)}else r=o.get(t),r===void 0&&(r=new Set,o.set(t,r));r.has(n)||(r.add(n),e=Zg.bind(null,e,t,n),t.then(e,e))}function Su(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function ku(e,t,n,o,r){return(e.mode&1)===0?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=kn(-1,1),t.tag=2,Qn(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=r,e)}var Bg=re.ReactCurrentOwner,Rt=!1;function St(e,t,n,o){t.child=e===null?Uc(t,null,n,o):Zo(t,e.child,n,o)}function bu(e,t,n,o,r){n=n.render;var l=t.ref;return ea(t,r),o=Rs(e,t,n,o,l,r),n=Cs(),e!==null&&!Rt?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~r,bn(e,t,r)):($e&&n&&ls(t),t.flags|=1,St(e,t,o,r),t.child)}function xu(e,t,n,o,r){if(e===null){var l=n.type;return typeof l=="function"&&!nl(l)&&l.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=l,Ru(e,t,l,o,r)):(e=si(n.type,null,o,t,t.mode,r),e.ref=t.ref,e.return=t,t.child=e)}if(l=e.child,(e.lanes&r)===0){var u=l.memoizedProps;if(n=n.compare,n=n!==null?n:_a,n(u,o)&&e.ref===t.ref)return bn(e,t,r)}return t.flags|=1,e=no(l,o),e.ref=t.ref,e.return=t,t.child=e}function Ru(e,t,n,o,r){if(e!==null){var l=e.memoizedProps;if(_a(l,o)&&e.ref===t.ref)if(Rt=!1,t.pendingProps=o=l,(e.lanes&r)!==0)(e.flags&131072)!==0&&(Rt=!0);else return t.lanes=e.lanes,bn(e,t,r)}return zs(e,t,n,o,r)}function Cu(e,t,n){var o=t.pendingProps,r=o.children,l=e!==null?e.memoizedState:null;if(o.mode==="hidden")if((t.mode&1)===0)t.memoizedState={baseLanes:0,cachePool:null,transitions:null},He(aa,Dt),Dt|=n;else{if((n&1073741824)===0)return e=l!==null?l.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,He(aa,Dt),Dt|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},o=l!==null?l.baseLanes:n,He(aa,Dt),Dt|=o}else l!==null?(o=l.baseLanes|n,t.memoizedState=null):o=n,He(aa,Dt),Dt|=o;return St(e,t,r,n),t.child}function Eu(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function zs(e,t,n,o,r){var l=xt(n)?yo:yt.current;return l=$o(t,l),ea(t,r),n=Rs(e,t,n,o,l,r),o=Cs(),e!==null&&!Rt?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~r,bn(e,t,r)):($e&&o&&ls(t),t.flags|=1,St(e,t,n,r),t.child)}function ju(e,t,n,o,r){if(xt(n)){var l=!0;Mr(t)}else l=!1;if(ea(t,r),t.stateNode===null)Qr(e,t),mu(t,n,o),Ms(t,n,o,r),o=!0;else if(e===null){var u=t.stateNode,f=t.memoizedProps;u.props=f;var v=u.context,E=n.contextType;typeof E=="object"&&E!==null?E=Ut(E):(E=xt(n)?yo:yt.current,E=$o(t,E));var D=n.getDerivedStateFromProps,I=typeof D=="function"||typeof u.getSnapshotBeforeUpdate=="function";I||typeof u.UNSAFE_componentWillReceiveProps!="function"&&typeof u.componentWillReceiveProps!="function"||(f!==o||v!==E)&&yu(t,u,o,E),Gn=!1;var z=t.memoizedState;u.state=z,Fr(t,o,u,r),v=t.memoizedState,f!==o||z!==v||bt.current||Gn?(typeof D=="function"&&(As(t,n,D,o),v=t.memoizedState),(f=Gn||hu(t,n,f,o,z,v,E))?(I||typeof u.UNSAFE_componentWillMount!="function"&&typeof u.componentWillMount!="function"||(typeof u.componentWillMount=="function"&&u.componentWillMount(),typeof u.UNSAFE_componentWillMount=="function"&&u.UNSAFE_componentWillMount()),typeof u.componentDidMount=="function"&&(t.flags|=4194308)):(typeof u.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=o,t.memoizedState=v),u.props=o,u.state=v,u.context=E,o=f):(typeof u.componentDidMount=="function"&&(t.flags|=4194308),o=!1)}else{u=t.stateNode,Hc(e,t),f=t.memoizedProps,E=t.type===t.elementType?f:Qt(t.type,f),u.props=E,I=t.pendingProps,z=u.context,v=n.contextType,typeof v=="object"&&v!==null?v=Ut(v):(v=xt(n)?yo:yt.current,v=$o(t,v));var K=n.getDerivedStateFromProps;(D=typeof K=="function"||typeof u.getSnapshotBeforeUpdate=="function")||typeof u.UNSAFE_componentWillReceiveProps!="function"&&typeof u.componentWillReceiveProps!="function"||(f!==I||z!==v)&&yu(t,u,o,v),Gn=!1,z=t.memoizedState,u.state=z,Fr(t,o,u,r);var X=t.memoizedState;f!==I||z!==X||bt.current||Gn?(typeof K=="function"&&(As(t,n,K,o),X=t.memoizedState),(E=Gn||hu(t,n,E,o,z,X,v)||!1)?(D||typeof u.UNSAFE_componentWillUpdate!="function"&&typeof u.componentWillUpdate!="function"||(typeof u.componentWillUpdate=="function"&&u.componentWillUpdate(o,X,v),typeof u.UNSAFE_componentWillUpdate=="function"&&u.UNSAFE_componentWillUpdate(o,X,v)),typeof u.componentDidUpdate=="function"&&(t.flags|=4),typeof u.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof u.componentDidUpdate!="function"||f===e.memoizedProps&&z===e.memoizedState||(t.flags|=4),typeof u.getSnapshotBeforeUpdate!="function"||f===e.memoizedProps&&z===e.memoizedState||(t.flags|=1024),t.memoizedProps=o,t.memoizedState=X),u.props=o,u.state=X,u.context=v,o=E):(typeof u.componentDidUpdate!="function"||f===e.memoizedProps&&z===e.memoizedState||(t.flags|=4),typeof u.getSnapshotBeforeUpdate!="function"||f===e.memoizedProps&&z===e.memoizedState||(t.flags|=1024),o=!1)}return Ds(e,t,n,o,l,r)}function Ds(e,t,n,o,r,l){Eu(e,t);var u=(t.flags&128)!==0;if(!o&&!u)return r&&Nc(t,n,!1),bn(e,t,l);o=t.stateNode,Bg.current=t;var f=u&&typeof n.getDerivedStateFromError!="function"?null:o.render();return t.flags|=1,e!==null&&u?(t.child=Zo(t,e.child,null,l),t.child=Zo(t,null,f,l)):St(e,t,f,l),t.memoizedState=o.state,r&&Nc(t,n,!0),t.child}function _u(e){var t=e.stateNode;t.pendingContext?Ac(e,t.pendingContext,t.pendingContext!==t.context):t.context&&Ac(e,t.context,!1),Ps(e,t.containerInfo)}function Tu(e,t,n,o,r){return Jo(),ps(r),t.flags|=256,St(e,t,n,o),t.child}var Is={dehydrated:null,treeContext:null,retryLane:0};function Os(e){return{baseLanes:e,cachePool:null,transitions:null}}function Au(e,t,n){var o=t.pendingProps,r=Je.current,l=!1,u=(t.flags&128)!==0,f;if((f=u)||(f=e!==null&&e.memoizedState===null?!1:(r&2)!==0),f?(l=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(r|=1),He(Je,r&1),e===null)return ds(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?((t.mode&1)===0?t.lanes=1:e.data==="$!"?t.lanes=8:t.lanes=1073741824,null):(u=o.children,e=o.fallback,l?(o=t.mode,l=t.child,u={mode:"hidden",children:u},(o&1)===0&&l!==null?(l.childLanes=0,l.pendingProps=u):l=li(u,o,0,null),e=Eo(e,o,n,null),l.return=t,e.return=t,l.sibling=e,t.child=l,t.child.memoizedState=Os(n),t.memoizedState=Is,e):Bs(t,u));if(r=e.memoizedState,r!==null&&(f=r.dehydrated,f!==null))return Wg(e,t,u,o,f,r,n);if(l){l=o.fallback,u=t.mode,r=e.child,f=r.sibling;var v={mode:"hidden",children:o.children};return(u&1)===0&&t.child!==r?(o=t.child,o.childLanes=0,o.pendingProps=v,t.deletions=null):(o=no(r,v),o.subtreeFlags=r.subtreeFlags&14680064),f!==null?l=no(f,l):(l=Eo(l,u,n,null),l.flags|=2),l.return=t,o.return=t,o.sibling=l,t.child=o,o=l,l=t.child,u=e.child.memoizedState,u=u===null?Os(n):{baseLanes:u.baseLanes|n,cachePool:null,transitions:u.transitions},l.memoizedState=u,l.childLanes=e.childLanes&~n,t.memoizedState=Is,o}return l=e.child,e=l.sibling,o=no(l,{mode:"visible",children:o.children}),(t.mode&1)===0&&(o.lanes=n),o.return=t,o.sibling=null,e!==null&&(n=t.deletions,n===null?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=o,t.memoizedState=null,o}function Bs(e,t){return t=li({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function Gr(e,t,n,o){return o!==null&&ps(o),Zo(t,e.child,null,n),e=Bs(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function Wg(e,t,n,o,r,l,u){if(n)return t.flags&256?(t.flags&=-257,o=Ns(Error(s(422))),Gr(e,t,u,o)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(l=o.fallback,r=t.mode,o=li({mode:"visible",children:o.children},r,0,null),l=Eo(l,r,u,null),l.flags|=2,o.return=t,l.return=t,o.sibling=l,t.child=o,(t.mode&1)!==0&&Zo(t,e.child,null,u),t.child.memoizedState=Os(u),t.memoizedState=Is,l);if((t.mode&1)===0)return Gr(e,t,u,null);if(r.data==="$!"){if(o=r.nextSibling&&r.nextSibling.dataset,o)var f=o.dgst;return o=f,l=Error(s(419)),o=Ns(l,o,void 0),Gr(e,t,u,o)}if(f=(u&e.childLanes)!==0,Rt||f){if(o=dt,o!==null){switch(u&-u){case 4:r=2;break;case 16:r=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:r=32;break;case 536870912:r=268435456;break;default:r=0}r=(r&(o.suspendedLanes|u))!==0?0:r,r!==0&&r!==l.retryLane&&(l.retryLane=r,Sn(e,r),Xt(o,e,r,-1))}return tl(),o=Ns(Error(s(421))),Gr(e,t,u,o)}return r.data==="$?"?(t.flags|=128,t.child=e.child,t=Xg.bind(null,e),r._reactRetry=t,null):(e=l.treeContext,zt=Yn(r.nextSibling),Lt=t,$e=!0,Gt=null,e!==null&&(Wt[Ft++]=Pn,Wt[Ft++]=wn,Wt[Ft++]=vo,Pn=e.id,wn=e.overflow,vo=t),t=Bs(t,o.children),t.flags|=4096,t)}function Mu(e,t,n){e.lanes|=t;var o=e.alternate;o!==null&&(o.lanes|=t),ms(e.return,t,n)}function Ws(e,t,n,o,r){var l=e.memoizedState;l===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:o,tail:n,tailMode:r}:(l.isBackwards=t,l.rendering=null,l.renderingStartTime=0,l.last=o,l.tail=n,l.tailMode=r)}function Nu(e,t,n){var o=t.pendingProps,r=o.revealOrder,l=o.tail;if(St(e,t,o.children,n),o=Je.current,(o&2)!==0)o=o&1|2,t.flags|=128;else{if(e!==null&&(e.flags&128)!==0)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&Mu(e,n,t);else if(e.tag===19)Mu(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}o&=1}if(He(Je,o),(t.mode&1)===0)t.memoizedState=null;else switch(r){case"forwards":for(n=t.child,r=null;n!==null;)e=n.alternate,e!==null&&Ur(e)===null&&(r=n),n=n.sibling;n=r,n===null?(r=t.child,t.child=null):(r=n.sibling,n.sibling=null),Ws(t,!1,r,n,l);break;case"backwards":for(n=null,r=t.child,t.child=null;r!==null;){if(e=r.alternate,e!==null&&Ur(e)===null){t.child=r;break}e=r.sibling,r.sibling=n,n=r,r=e}Ws(t,!0,n,null,l);break;case"together":Ws(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Qr(e,t){(t.mode&1)===0&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function bn(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),bo|=t.lanes,(n&t.childLanes)===0)return null;if(e!==null&&t.child!==e.child)throw Error(s(153));if(t.child!==null){for(e=t.child,n=no(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=no(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function Fg(e,t,n){switch(t.tag){case 3:_u(t),Jo();break;case 5:Kc(t);break;case 1:xt(t.type)&&Mr(t);break;case 4:Ps(t,t.stateNode.containerInfo);break;case 10:var o=t.type._context,r=t.memoizedProps.value;He(Or,o._currentValue),o._currentValue=r;break;case 13:if(o=t.memoizedState,o!==null)return o.dehydrated!==null?(He(Je,Je.current&1),t.flags|=128,null):(n&t.child.childLanes)!==0?Au(e,t,n):(He(Je,Je.current&1),e=bn(e,t,n),e!==null?e.sibling:null);He(Je,Je.current&1);break;case 19:if(o=(n&t.childLanes)!==0,(e.flags&128)!==0){if(o)return Nu(e,t,n);t.flags|=128}if(r=t.memoizedState,r!==null&&(r.rendering=null,r.tail=null,r.lastEffect=null),He(Je,Je.current),o)break;return null;case 22:case 23:return t.lanes=0,Cu(e,t,n)}return bn(e,t,n)}var Lu,Fs,zu,Du;Lu=function(e,t){for(var n=t.child;n!==null;){if(n.tag===5||n.tag===6)e.appendChild(n.stateNode);else if(n.tag!==4&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Fs=function(){},zu=function(e,t,n,o){var r=e.memoizedProps;if(r!==o){e=t.stateNode,So(ln.current);var l=null;switch(n){case"input":r=Mn(e,r),o=Mn(e,o),l=[];break;case"select":r=Y({},r,{value:void 0}),o=Y({},o,{value:void 0}),l=[];break;case"textarea":r=gt(e,r),o=gt(e,o),l=[];break;default:typeof r.onClick!="function"&&typeof o.onClick=="function"&&(e.onclick=_r)}zo(n,o);var u;n=null;for(E in r)if(!o.hasOwnProperty(E)&&r.hasOwnProperty(E)&&r[E]!=null)if(E==="style"){var f=r[E];for(u in f)f.hasOwnProperty(u)&&(n||(n={}),n[u]="")}else E!=="dangerouslySetInnerHTML"&&E!=="children"&&E!=="suppressContentEditableWarning"&&E!=="suppressHydrationWarning"&&E!=="autoFocus"&&(d.hasOwnProperty(E)?l||(l=[]):(l=l||[]).push(E,null));for(E in o){var v=o[E];if(f=r!=null?r[E]:void 0,o.hasOwnProperty(E)&&v!==f&&(v!=null||f!=null))if(E==="style")if(f){for(u in f)!f.hasOwnProperty(u)||v&&v.hasOwnProperty(u)||(n||(n={}),n[u]="");for(u in v)v.hasOwnProperty(u)&&f[u]!==v[u]&&(n||(n={}),n[u]=v[u])}else n||(l||(l=[]),l.push(E,n)),n=v;else E==="dangerouslySetInnerHTML"?(v=v?v.__html:void 0,f=f?f.__html:void 0,v!=null&&f!==v&&(l=l||[]).push(E,v)):E==="children"?typeof v!="string"&&typeof v!="number"||(l=l||[]).push(E,""+v):E!=="suppressContentEditableWarning"&&E!=="suppressHydrationWarning"&&(d.hasOwnProperty(E)?(v!=null&&E==="onScroll"&&qe("scroll",e),l||f===v||(l=[])):(l=l||[]).push(E,v))}n&&(l=l||[]).push("style",n);var E=l;(t.updateQueue=E)&&(t.flags|=4)}},Du=function(e,t,n,o){n!==o&&(t.flags|=4)};function Ha(e,t){if(!$e)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var o=null;n!==null;)n.alternate!==null&&(o=n),n=n.sibling;o===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:o.sibling=null}}function Pt(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,o=0;if(t)for(var r=e.child;r!==null;)n|=r.lanes|r.childLanes,o|=r.subtreeFlags&14680064,o|=r.flags&14680064,r.return=e,r=r.sibling;else for(r=e.child;r!==null;)n|=r.lanes|r.childLanes,o|=r.subtreeFlags,o|=r.flags,r.return=e,r=r.sibling;return e.subtreeFlags|=o,e.childLanes=n,t}function Ug(e,t,n){var o=t.pendingProps;switch(cs(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Pt(t),null;case 1:return xt(t.type)&&Ar(),Pt(t),null;case 3:return o=t.stateNode,ta(),Ke(bt),Ke(yt),ks(),o.pendingContext&&(o.context=o.pendingContext,o.pendingContext=null),(e===null||e.child===null)&&(Dr(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&(t.flags&256)===0||(t.flags|=1024,Gt!==null&&(Zs(Gt),Gt=null))),Fs(e,t),Pt(t),null;case 5:ws(t);var r=So(Ba.current);if(n=t.type,e!==null&&t.stateNode!=null)zu(e,t,n,o,r),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!o){if(t.stateNode===null)throw Error(s(166));return Pt(t),null}if(e=So(ln.current),Dr(t)){o=t.stateNode,n=t.type;var l=t.memoizedProps;switch(o[sn]=t,o[La]=l,e=(t.mode&1)!==0,n){case"dialog":qe("cancel",o),qe("close",o);break;case"iframe":case"object":case"embed":qe("load",o);break;case"video":case"audio":for(r=0;r<Aa.length;r++)qe(Aa[r],o);break;case"source":qe("error",o);break;case"img":case"image":case"link":qe("error",o),qe("load",o);break;case"details":qe("toggle",o);break;case"input":No(o,l),qe("invalid",o);break;case"select":o._wrapperState={wasMultiple:!!l.multiple},qe("invalid",o);break;case"textarea":Lo(o,l),qe("invalid",o)}zo(n,l),r=null;for(var u in l)if(l.hasOwnProperty(u)){var f=l[u];u==="children"?typeof f=="string"?o.textContent!==f&&(l.suppressHydrationWarning!==!0&&jr(o.textContent,f,e),r=["children",f]):typeof f=="number"&&o.textContent!==""+f&&(l.suppressHydrationWarning!==!0&&jr(o.textContent,f,e),r=["children",""+f]):d.hasOwnProperty(u)&&f!=null&&u==="onScroll"&&qe("scroll",o)}switch(n){case"input":An(o),co(o,l,!0);break;case"textarea":An(o),Ln(o);break;case"select":case"option":break;default:typeof l.onClick=="function"&&(o.onclick=_r)}o=r,t.updateQueue=o,o!==null&&(t.flags|=4)}else{u=r.nodeType===9?r:r.ownerDocument,e==="http://www.w3.org/1999/xhtml"&&(e=da(n)),e==="http://www.w3.org/1999/xhtml"?n==="script"?(e=u.createElement("div"),e.innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):typeof o.is=="string"?e=u.createElement(n,{is:o.is}):(e=u.createElement(n),n==="select"&&(u=e,o.multiple?u.multiple=!0:o.size&&(u.size=o.size))):e=u.createElementNS(e,n),e[sn]=t,e[La]=o,Lu(e,t,!1,!1),t.stateNode=e;e:{switch(u=ga(n,o),n){case"dialog":qe("cancel",e),qe("close",e),r=o;break;case"iframe":case"object":case"embed":qe("load",e),r=o;break;case"video":case"audio":for(r=0;r<Aa.length;r++)qe(Aa[r],e);r=o;break;case"source":qe("error",e),r=o;break;case"img":case"image":case"link":qe("error",e),qe("load",e),r=o;break;case"details":qe("toggle",e),r=o;break;case"input":No(e,o),r=Mn(e,o),qe("invalid",e);break;case"option":r=o;break;case"select":e._wrapperState={wasMultiple:!!o.multiple},r=Y({},o,{value:void 0}),qe("invalid",e);break;case"textarea":Lo(e,o),r=gt(e,o),qe("invalid",e);break;default:r=o}zo(n,r),f=r;for(l in f)if(f.hasOwnProperty(l)){var v=f[l];l==="style"?pa(e,v):l==="dangerouslySetInnerHTML"?(v=v?v.__html:void 0,v!=null&&Bt(e,v)):l==="children"?typeof v=="string"?(n!=="textarea"||v!=="")&&zn(e,v):typeof v=="number"&&zn(e,""+v):l!=="suppressContentEditableWarning"&&l!=="suppressHydrationWarning"&&l!=="autoFocus"&&(d.hasOwnProperty(l)?v!=null&&l==="onScroll"&&qe("scroll",e):v!=null&&ue(e,l,v,u))}switch(n){case"input":An(e),co(e,o,!1);break;case"textarea":An(e),Ln(e);break;case"option":o.value!=null&&e.setAttribute("value",""+we(o.value));break;case"select":e.multiple=!!o.multiple,l=o.value,l!=null?Qe(e,!!o.multiple,l,!1):o.defaultValue!=null&&Qe(e,!!o.multiple,o.defaultValue,!0);break;default:typeof r.onClick=="function"&&(e.onclick=_r)}switch(n){case"button":case"input":case"select":case"textarea":o=!!o.autoFocus;break e;case"img":o=!0;break e;default:o=!1}}o&&(t.flags|=4)}t.ref!==null&&(t.flags|=512,t.flags|=2097152)}return Pt(t),null;case 6:if(e&&t.stateNode!=null)Du(e,t,e.memoizedProps,o);else{if(typeof o!="string"&&t.stateNode===null)throw Error(s(166));if(n=So(Ba.current),So(ln.current),Dr(t)){if(o=t.stateNode,n=t.memoizedProps,o[sn]=t,(l=o.nodeValue!==n)&&(e=Lt,e!==null))switch(e.tag){case 3:jr(o.nodeValue,n,(e.mode&1)!==0);break;case 5:e.memoizedProps.suppressHydrationWarning!==!0&&jr(o.nodeValue,n,(e.mode&1)!==0)}l&&(t.flags|=4)}else o=(n.nodeType===9?n:n.ownerDocument).createTextNode(o),o[sn]=t,t.stateNode=o}return Pt(t),null;case 13:if(Ke(Je),o=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if($e&&zt!==null&&(t.mode&1)!==0&&(t.flags&128)===0)Bc(),Jo(),t.flags|=98560,l=!1;else if(l=Dr(t),o!==null&&o.dehydrated!==null){if(e===null){if(!l)throw Error(s(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(s(317));l[sn]=t}else Jo(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Pt(t),l=!1}else Gt!==null&&(Zs(Gt),Gt=null),l=!0;if(!l)return t.flags&65536?t:null}return(t.flags&128)!==0?(t.lanes=n,t):(o=o!==null,o!==(e!==null&&e.memoizedState!==null)&&o&&(t.child.flags|=8192,(t.mode&1)!==0&&(e===null||(Je.current&1)!==0?lt===0&&(lt=3):tl())),t.updateQueue!==null&&(t.flags|=4),Pt(t),null);case 4:return ta(),Fs(e,t),e===null&&Ma(t.stateNode.containerInfo),Pt(t),null;case 10:return hs(t.type._context),Pt(t),null;case 17:return xt(t.type)&&Ar(),Pt(t),null;case 19:if(Ke(Je),l=t.memoizedState,l===null)return Pt(t),null;if(o=(t.flags&128)!==0,u=l.rendering,u===null)if(o)Ha(l,!1);else{if(lt!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(u=Ur(e),u!==null){for(t.flags|=128,Ha(l,!1),o=u.updateQueue,o!==null&&(t.updateQueue=o,t.flags|=4),t.subtreeFlags=0,o=n,n=t.child;n!==null;)l=n,e=o,l.flags&=14680066,u=l.alternate,u===null?(l.childLanes=0,l.lanes=e,l.child=null,l.subtreeFlags=0,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.subtreeFlags=0,l.deletions=null,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,e=u.dependencies,l.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return He(Je,Je.current&1|2),t.child}e=e.sibling}l.tail!==null&&Ne()>ra&&(t.flags|=128,o=!0,Ha(l,!1),t.lanes=4194304)}else{if(!o)if(e=Ur(u),e!==null){if(t.flags|=128,o=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Ha(l,!0),l.tail===null&&l.tailMode==="hidden"&&!u.alternate&&!$e)return Pt(t),null}else 2*Ne()-l.renderingStartTime>ra&&n!==1073741824&&(t.flags|=128,o=!0,Ha(l,!1),t.lanes=4194304);l.isBackwards?(u.sibling=t.child,t.child=u):(n=l.last,n!==null?n.sibling=u:t.child=u,l.last=u)}return l.tail!==null?(t=l.tail,l.rendering=t,l.tail=t.sibling,l.renderingStartTime=Ne(),t.sibling=null,n=Je.current,He(Je,o?n&1|2:n&1),t):(Pt(t),null);case 22:case 23:return el(),o=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==o&&(t.flags|=8192),o&&(t.mode&1)!==0?(Dt&1073741824)!==0&&(Pt(t),t.subtreeFlags&6&&(t.flags|=8192)):Pt(t),null;case 24:return null;case 25:return null}throw Error(s(156,t.tag))}function Vg(e,t){switch(cs(t),t.tag){case 1:return xt(t.type)&&Ar(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ta(),Ke(bt),Ke(yt),ks(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 5:return ws(t),null;case 13:if(Ke(Je),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(s(340));Jo()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Ke(Je),null;case 4:return ta(),null;case 10:return hs(t.type._context),null;case 22:case 23:return el(),null;case 24:return null;default:return null}}var Jr=!1,wt=!1,Hg=typeof WeakSet=="function"?WeakSet:Set,G=null;function oa(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(o){nt(e,t,o)}else n.current=null}function Us(e,t,n){try{n()}catch(o){nt(e,t,o)}}var Iu=!1;function Yg(e,t){if(es=yr,e=hc(),qi(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var o=n.getSelection&&n.getSelection();if(o&&o.rangeCount!==0){n=o.anchorNode;var r=o.anchorOffset,l=o.focusNode;o=o.focusOffset;try{n.nodeType,l.nodeType}catch{n=null;break e}var u=0,f=-1,v=-1,E=0,D=0,I=e,z=null;t:for(;;){for(var K;I!==n||r!==0&&I.nodeType!==3||(f=u+r),I!==l||o!==0&&I.nodeType!==3||(v=u+o),I.nodeType===3&&(u+=I.nodeValue.length),(K=I.firstChild)!==null;)z=I,I=K;for(;;){if(I===e)break t;if(z===n&&++E===r&&(f=u),z===l&&++D===o&&(v=u),(K=I.nextSibling)!==null)break;I=z,z=I.parentNode}I=K}n=f===-1||v===-1?null:{start:f,end:v}}else n=null}n=n||{start:0,end:0}}else n=null;for(ts={focusedElem:e,selectionRange:n},yr=!1,G=t;G!==null;)if(t=G,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,G=e;else for(;G!==null;){t=G;try{var X=t.alternate;if((t.flags&1024)!==0)switch(t.tag){case 0:case 11:case 15:break;case 1:if(X!==null){var te=X.memoizedProps,ot=X.memoizedState,b=t.stateNode,w=b.getSnapshotBeforeUpdate(t.elementType===t.type?te:Qt(t.type,te),ot);b.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var C=t.stateNode.containerInfo;C.nodeType===1?C.textContent="":C.nodeType===9&&C.documentElement&&C.removeChild(C.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(s(163))}}catch(F){nt(t,t.return,F)}if(e=t.sibling,e!==null){e.return=t.return,G=e;break}G=t.return}return X=Iu,Iu=!1,X}function Ya(e,t,n){var o=t.updateQueue;if(o=o!==null?o.lastEffect:null,o!==null){var r=o=o.next;do{if((r.tag&e)===e){var l=r.destroy;r.destroy=void 0,l!==void 0&&Us(t,n,l)}r=r.next}while(r!==o)}}function Zr(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var o=n.create;n.destroy=o()}n=n.next}while(n!==t)}}function Vs(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Ou(e){var t=e.alternate;t!==null&&(e.alternate=null,Ou(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[sn],delete t[La],delete t[rs],delete t[Eg],delete t[jg])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Bu(e){return e.tag===5||e.tag===3||e.tag===4}function Wu(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Bu(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Hs(e,t,n){var o=e.tag;if(o===5||o===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=_r));else if(o!==4&&(e=e.child,e!==null))for(Hs(e,t,n),e=e.sibling;e!==null;)Hs(e,t,n),e=e.sibling}function Ys(e,t,n){var o=e.tag;if(o===5||o===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(o!==4&&(e=e.child,e!==null))for(Ys(e,t,n),e=e.sibling;e!==null;)Ys(e,t,n),e=e.sibling}var ht=null,Jt=!1;function Jn(e,t,n){for(n=n.child;n!==null;)Fu(e,t,n),n=n.sibling}function Fu(e,t,n){if(ft&&typeof ft.onCommitFiberUnmount=="function")try{ft.onCommitFiberUnmount(Ve,n)}catch{}switch(n.tag){case 5:wt||oa(n,t);case 6:var o=ht,r=Jt;ht=null,Jn(e,t,n),ht=o,Jt=r,ht!==null&&(Jt?(e=ht,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):ht.removeChild(n.stateNode));break;case 18:ht!==null&&(Jt?(e=ht,n=n.stateNode,e.nodeType===8?as(e.parentNode,n):e.nodeType===1&&as(e,n),ba(e)):as(ht,n.stateNode));break;case 4:o=ht,r=Jt,ht=n.stateNode.containerInfo,Jt=!0,Jn(e,t,n),ht=o,Jt=r;break;case 0:case 11:case 14:case 15:if(!wt&&(o=n.updateQueue,o!==null&&(o=o.lastEffect,o!==null))){r=o=o.next;do{var l=r,u=l.destroy;l=l.tag,u!==void 0&&((l&2)!==0||(l&4)!==0)&&Us(n,t,u),r=r.next}while(r!==o)}Jn(e,t,n);break;case 1:if(!wt&&(oa(n,t),o=n.stateNode,typeof o.componentWillUnmount=="function"))try{o.props=n.memoizedProps,o.state=n.memoizedState,o.componentWillUnmount()}catch(f){nt(n,t,f)}Jn(e,t,n);break;case 21:Jn(e,t,n);break;case 22:n.mode&1?(wt=(o=wt)||n.memoizedState!==null,Jn(e,t,n),wt=o):Jn(e,t,n);break;default:Jn(e,t,n)}}function Uu(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new Hg),t.forEach(function(o){var r=ef.bind(null,e,o);n.has(o)||(n.add(o),o.then(r,r))})}}function Zt(e,t){var n=t.deletions;if(n!==null)for(var o=0;o<n.length;o++){var r=n[o];try{var l=e,u=t,f=u;e:for(;f!==null;){switch(f.tag){case 5:ht=f.stateNode,Jt=!1;break e;case 3:ht=f.stateNode.containerInfo,Jt=!0;break e;case 4:ht=f.stateNode.containerInfo,Jt=!0;break e}f=f.return}if(ht===null)throw Error(s(160));Fu(l,u,r),ht=null,Jt=!1;var v=r.alternate;v!==null&&(v.return=null),r.return=null}catch(E){nt(r,t,E)}}if(t.subtreeFlags&12854)for(t=t.child;t!==null;)Vu(t,e),t=t.sibling}function Vu(e,t){var n=e.alternate,o=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(Zt(t,e),un(e),o&4){try{Ya(3,e,e.return),Zr(3,e)}catch(te){nt(e,e.return,te)}try{Ya(5,e,e.return)}catch(te){nt(e,e.return,te)}}break;case 1:Zt(t,e),un(e),o&512&&n!==null&&oa(n,n.return);break;case 5:if(Zt(t,e),un(e),o&512&&n!==null&&oa(n,n.return),e.flags&32){var r=e.stateNode;try{zn(r,"")}catch(te){nt(e,e.return,te)}}if(o&4&&(r=e.stateNode,r!=null)){var l=e.memoizedProps,u=n!==null?n.memoizedProps:l,f=e.type,v=e.updateQueue;if(e.updateQueue=null,v!==null)try{f==="input"&&l.type==="radio"&&l.name!=null&&At(r,l),ga(f,u);var E=ga(f,l);for(u=0;u<v.length;u+=2){var D=v[u],I=v[u+1];D==="style"?pa(r,I):D==="dangerouslySetInnerHTML"?Bt(r,I):D==="children"?zn(r,I):ue(r,D,I,E)}switch(f){case"input":Nn(r,l);break;case"textarea":tn(r,l);break;case"select":var z=r._wrapperState.wasMultiple;r._wrapperState.wasMultiple=!!l.multiple;var K=l.value;K!=null?Qe(r,!!l.multiple,K,!1):z!==!!l.multiple&&(l.defaultValue!=null?Qe(r,!!l.multiple,l.defaultValue,!0):Qe(r,!!l.multiple,l.multiple?[]:"",!1))}r[La]=l}catch(te){nt(e,e.return,te)}}break;case 6:if(Zt(t,e),un(e),o&4){if(e.stateNode===null)throw Error(s(162));r=e.stateNode,l=e.memoizedProps;try{r.nodeValue=l}catch(te){nt(e,e.return,te)}}break;case 3:if(Zt(t,e),un(e),o&4&&n!==null&&n.memoizedState.isDehydrated)try{ba(t.containerInfo)}catch(te){nt(e,e.return,te)}break;case 4:Zt(t,e),un(e);break;case 13:Zt(t,e),un(e),r=e.child,r.flags&8192&&(l=r.memoizedState!==null,r.stateNode.isHidden=l,!l||r.alternate!==null&&r.alternate.memoizedState!==null||($s=Ne())),o&4&&Uu(e);break;case 22:if(D=n!==null&&n.memoizedState!==null,e.mode&1?(wt=(E=wt)||D,Zt(t,e),wt=E):Zt(t,e),un(e),o&8192){if(E=e.memoizedState!==null,(e.stateNode.isHidden=E)&&!D&&(e.mode&1)!==0)for(G=e,D=e.child;D!==null;){for(I=G=D;G!==null;){switch(z=G,K=z.child,z.tag){case 0:case 11:case 14:case 15:Ya(4,z,z.return);break;case 1:oa(z,z.return);var X=z.stateNode;if(typeof X.componentWillUnmount=="function"){o=z,n=z.return;try{t=o,X.props=t.memoizedProps,X.state=t.memoizedState,X.componentWillUnmount()}catch(te){nt(o,n,te)}}break;case 5:oa(z,z.return);break;case 22:if(z.memoizedState!==null){qu(I);continue}}K!==null?(K.return=z,G=K):qu(I)}D=D.sibling}e:for(D=null,I=e;;){if(I.tag===5){if(D===null){D=I;try{r=I.stateNode,E?(l=r.style,typeof l.setProperty=="function"?l.setProperty("display","none","important"):l.display="none"):(f=I.stateNode,v=I.memoizedProps.style,u=v!=null&&v.hasOwnProperty("display")?v.display:null,f.style.display=qt("display",u))}catch(te){nt(e,e.return,te)}}}else if(I.tag===6){if(D===null)try{I.stateNode.nodeValue=E?"":I.memoizedProps}catch(te){nt(e,e.return,te)}}else if((I.tag!==22&&I.tag!==23||I.memoizedState===null||I===e)&&I.child!==null){I.child.return=I,I=I.child;continue}if(I===e)break e;for(;I.sibling===null;){if(I.return===null||I.return===e)break e;D===I&&(D=null),I=I.return}D===I&&(D=null),I.sibling.return=I.return,I=I.sibling}}break;case 19:Zt(t,e),un(e),o&4&&Uu(e);break;case 21:break;default:Zt(t,e),un(e)}}function un(e){var t=e.flags;if(t&2){try{e:{for(var n=e.return;n!==null;){if(Bu(n)){var o=n;break e}n=n.return}throw Error(s(160))}switch(o.tag){case 5:var r=o.stateNode;o.flags&32&&(zn(r,""),o.flags&=-33);var l=Wu(e);Ys(e,l,r);break;case 3:case 4:var u=o.stateNode.containerInfo,f=Wu(e);Hs(e,f,u);break;default:throw Error(s(161))}}catch(v){nt(e,e.return,v)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function qg(e,t,n){G=e,Hu(e)}function Hu(e,t,n){for(var o=(e.mode&1)!==0;G!==null;){var r=G,l=r.child;if(r.tag===22&&o){var u=r.memoizedState!==null||Jr;if(!u){var f=r.alternate,v=f!==null&&f.memoizedState!==null||wt;f=Jr;var E=wt;if(Jr=u,(wt=v)&&!E)for(G=r;G!==null;)u=G,v=u.child,u.tag===22&&u.memoizedState!==null?Ku(r):v!==null?(v.return=u,G=v):Ku(r);for(;l!==null;)G=l,Hu(l),l=l.sibling;G=r,Jr=f,wt=E}Yu(e)}else(r.subtreeFlags&8772)!==0&&l!==null?(l.return=r,G=l):Yu(e)}}function Yu(e){for(;G!==null;){var t=G;if((t.flags&8772)!==0){var n=t.alternate;try{if((t.flags&8772)!==0)switch(t.tag){case 0:case 11:case 15:wt||Zr(5,t);break;case 1:var o=t.stateNode;if(t.flags&4&&!wt)if(n===null)o.componentDidMount();else{var r=t.elementType===t.type?n.memoizedProps:Qt(t.type,n.memoizedProps);o.componentDidUpdate(r,n.memoizedState,o.__reactInternalSnapshotBeforeUpdate)}var l=t.updateQueue;l!==null&&qc(t,l,o);break;case 3:var u=t.updateQueue;if(u!==null){if(n=null,t.child!==null)switch(t.child.tag){case 5:n=t.child.stateNode;break;case 1:n=t.child.stateNode}qc(t,u,n)}break;case 5:var f=t.stateNode;if(n===null&&t.flags&4){n=f;var v=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":v.autoFocus&&n.focus();break;case"img":v.src&&(n.src=v.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(t.memoizedState===null){var E=t.alternate;if(E!==null){var D=E.memoizedState;if(D!==null){var I=D.dehydrated;I!==null&&ba(I)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;default:throw Error(s(163))}wt||t.flags&512&&Vs(t)}catch(z){nt(t,t.return,z)}}if(t===e){G=null;break}if(n=t.sibling,n!==null){n.return=t.return,G=n;break}G=t.return}}function qu(e){for(;G!==null;){var t=G;if(t===e){G=null;break}var n=t.sibling;if(n!==null){n.return=t.return,G=n;break}G=t.return}}function Ku(e){for(;G!==null;){var t=G;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{Zr(4,t)}catch(v){nt(t,n,v)}break;case 1:var o=t.stateNode;if(typeof o.componentDidMount=="function"){var r=t.return;try{o.componentDidMount()}catch(v){nt(t,r,v)}}var l=t.return;try{Vs(t)}catch(v){nt(t,l,v)}break;case 5:var u=t.return;try{Vs(t)}catch(v){nt(t,u,v)}}}catch(v){nt(t,t.return,v)}if(t===e){G=null;break}var f=t.sibling;if(f!==null){f.return=t.return,G=f;break}G=t.return}}var Kg=Math.ceil,Xr=re.ReactCurrentDispatcher,qs=re.ReactCurrentOwner,Ht=re.ReactCurrentBatchConfig,Ae=0,dt=null,at=null,mt=0,Dt=0,aa=qn(0),lt=0,qa=null,bo=0,ei=0,Ks=0,Ka=null,Ct=null,$s=0,ra=1/0,xn=null,ti=!1,Gs=null,Zn=null,ni=!1,Xn=null,oi=0,$a=0,Qs=null,ai=-1,ri=0;function kt(){return(Ae&6)!==0?Ne():ai!==-1?ai:ai=Ne()}function eo(e){return(e.mode&1)===0?1:(Ae&2)!==0&&mt!==0?mt&-mt:Tg.transition!==null?(ri===0&&(ri=Wl()),ri):(e=Be,e!==0||(e=window.event,e=e===void 0?16:Gl(e.type)),e)}function Xt(e,t,n,o){if(50<$a)throw $a=0,Qs=null,Error(s(185));va(e,n,o),((Ae&2)===0||e!==dt)&&(e===dt&&((Ae&2)===0&&(ei|=n),lt===4&&to(e,mt)),Et(e,o),n===1&&Ae===0&&(t.mode&1)===0&&(ra=Ne()+500,Nr&&$n()))}function Et(e,t){var n=e.callbackNode;Tp(e,t);var o=fr(e,e===dt?mt:0);if(o===0)n!==null&&fn(n),e.callbackNode=null,e.callbackPriority=0;else if(t=o&-o,e.callbackPriority!==t){if(n!=null&&fn(n),t===1)e.tag===0?_g(Gu.bind(null,e)):Lc(Gu.bind(null,e)),Rg(function(){(Ae&6)===0&&$n()}),n=null;else{switch(Fl(o)){case 1:n=hn;break;case 4:n=rn;break;case 16:n=mn;break;case 536870912:n=Ee;break;default:n=mn}n=od(n,$u.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function $u(e,t){if(ai=-1,ri=0,(Ae&6)!==0)throw Error(s(327));var n=e.callbackNode;if(ia()&&e.callbackNode!==n)return null;var o=fr(e,e===dt?mt:0);if(o===0)return null;if((o&30)!==0||(o&e.expiredLanes)!==0||t)t=ii(e,o);else{t=o;var r=Ae;Ae|=2;var l=Ju();(dt!==e||mt!==t)&&(xn=null,ra=Ne()+500,Ro(e,t));do try{Qg();break}catch(f){Qu(e,f)}while(!0);fs(),Xr.current=l,Ae=r,at!==null?t=0:(dt=null,mt=0,t=lt)}if(t!==0){if(t===2&&(r=Ti(e),r!==0&&(o=r,t=Js(e,r))),t===1)throw n=qa,Ro(e,0),to(e,o),Et(e,Ne()),n;if(t===6)to(e,o);else{if(r=e.current.alternate,(o&30)===0&&!$g(r)&&(t=ii(e,o),t===2&&(l=Ti(e),l!==0&&(o=l,t=Js(e,l))),t===1))throw n=qa,Ro(e,0),to(e,o),Et(e,Ne()),n;switch(e.finishedWork=r,e.finishedLanes=o,t){case 0:case 1:throw Error(s(345));case 2:Co(e,Ct,xn);break;case 3:if(to(e,o),(o&130023424)===o&&(t=$s+500-Ne(),10<t)){if(fr(e,0)!==0)break;if(r=e.suspendedLanes,(r&o)!==o){kt(),e.pingedLanes|=e.suspendedLanes&r;break}e.timeoutHandle=os(Co.bind(null,e,Ct,xn),t);break}Co(e,Ct,xn);break;case 4:if(to(e,o),(o&4194240)===o)break;for(t=e.eventTimes,r=-1;0<o;){var u=31-Le(o);l=1<<u,u=t[u],u>r&&(r=u),o&=~l}if(o=r,o=Ne()-o,o=(120>o?120:480>o?480:1080>o?1080:1920>o?1920:3e3>o?3e3:4320>o?4320:1960*Kg(o/1960))-o,10<o){e.timeoutHandle=os(Co.bind(null,e,Ct,xn),o);break}Co(e,Ct,xn);break;case 5:Co(e,Ct,xn);break;default:throw Error(s(329))}}}return Et(e,Ne()),e.callbackNode===n?$u.bind(null,e):null}function Js(e,t){var n=Ka;return e.current.memoizedState.isDehydrated&&(Ro(e,t).flags|=256),e=ii(e,t),e!==2&&(t=Ct,Ct=n,t!==null&&Zs(t)),e}function Zs(e){Ct===null?Ct=e:Ct.push.apply(Ct,e)}function $g(e){for(var t=e;;){if(t.flags&16384){var n=t.updateQueue;if(n!==null&&(n=n.stores,n!==null))for(var o=0;o<n.length;o++){var r=n[o],l=r.getSnapshot;r=r.value;try{if(!$t(l(),r))return!1}catch{return!1}}}if(n=t.child,t.subtreeFlags&16384&&n!==null)n.return=t,t=n;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function to(e,t){for(t&=~Ks,t&=~ei,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Le(t),o=1<<n;e[n]=-1,t&=~o}}function Gu(e){if((Ae&6)!==0)throw Error(s(327));ia();var t=fr(e,0);if((t&1)===0)return Et(e,Ne()),null;var n=ii(e,t);if(e.tag!==0&&n===2){var o=Ti(e);o!==0&&(t=o,n=Js(e,o))}if(n===1)throw n=qa,Ro(e,0),to(e,t),Et(e,Ne()),n;if(n===6)throw Error(s(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,Co(e,Ct,xn),Et(e,Ne()),null}function Xs(e,t){var n=Ae;Ae|=1;try{return e(t)}finally{Ae=n,Ae===0&&(ra=Ne()+500,Nr&&$n())}}function xo(e){Xn!==null&&Xn.tag===0&&(Ae&6)===0&&ia();var t=Ae;Ae|=1;var n=Ht.transition,o=Be;try{if(Ht.transition=null,Be=1,e)return e()}finally{Be=o,Ht.transition=n,Ae=t,(Ae&6)===0&&$n()}}function el(){Dt=aa.current,Ke(aa)}function Ro(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(n!==-1&&(e.timeoutHandle=-1,xg(n)),at!==null)for(n=at.return;n!==null;){var o=n;switch(cs(o),o.tag){case 1:o=o.type.childContextTypes,o!=null&&Ar();break;case 3:ta(),Ke(bt),Ke(yt),ks();break;case 5:ws(o);break;case 4:ta();break;case 13:Ke(Je);break;case 19:Ke(Je);break;case 10:hs(o.type._context);break;case 22:case 23:el()}n=n.return}if(dt=e,at=e=no(e.current,null),mt=Dt=t,lt=0,qa=null,Ks=ei=bo=0,Ct=Ka=null,wo!==null){for(t=0;t<wo.length;t++)if(n=wo[t],o=n.interleaved,o!==null){n.interleaved=null;var r=o.next,l=n.pending;if(l!==null){var u=l.next;l.next=r,o.next=u}n.pending=o}wo=null}return e}function Qu(e,t){do{var n=at;try{if(fs(),Vr.current=Kr,Hr){for(var o=Ze.memoizedState;o!==null;){var r=o.queue;r!==null&&(r.pending=null),o=o.next}Hr=!1}if(ko=0,ut=st=Ze=null,Wa=!1,Fa=0,qs.current=null,n===null||n.return===null){lt=1,qa=t,at=null;break}e:{var l=e,u=n.return,f=n,v=t;if(t=mt,f.flags|=32768,v!==null&&typeof v=="object"&&typeof v.then=="function"){var E=v,D=f,I=D.tag;if((D.mode&1)===0&&(I===0||I===11||I===15)){var z=D.alternate;z?(D.updateQueue=z.updateQueue,D.memoizedState=z.memoizedState,D.lanes=z.lanes):(D.updateQueue=null,D.memoizedState=null)}var K=Su(u);if(K!==null){K.flags&=-257,ku(K,u,f,l,t),K.mode&1&&wu(l,E,t),t=K,v=E;var X=t.updateQueue;if(X===null){var te=new Set;te.add(v),t.updateQueue=te}else X.add(v);break e}else{if((t&1)===0){wu(l,E,t),tl();break e}v=Error(s(426))}}else if($e&&f.mode&1){var ot=Su(u);if(ot!==null){(ot.flags&65536)===0&&(ot.flags|=256),ku(ot,u,f,l,t),ps(na(v,f));break e}}l=v=na(v,f),lt!==4&&(lt=2),Ka===null?Ka=[l]:Ka.push(l),l=u;do{switch(l.tag){case 3:l.flags|=65536,t&=-t,l.lanes|=t;var b=vu(l,v,t);Yc(l,b);break e;case 1:f=v;var w=l.type,C=l.stateNode;if((l.flags&128)===0&&(typeof w.getDerivedStateFromError=="function"||C!==null&&typeof C.componentDidCatch=="function"&&(Zn===null||!Zn.has(C)))){l.flags|=65536,t&=-t,l.lanes|=t;var F=Pu(l,f,t);Yc(l,F);break e}}l=l.return}while(l!==null)}Xu(n)}catch(ne){t=ne,at===n&&n!==null&&(at=n=n.return);continue}break}while(!0)}function Ju(){var e=Xr.current;return Xr.current=Kr,e===null?Kr:e}function tl(){(lt===0||lt===3||lt===2)&&(lt=4),dt===null||(bo&268435455)===0&&(ei&268435455)===0||to(dt,mt)}function ii(e,t){var n=Ae;Ae|=2;var o=Ju();(dt!==e||mt!==t)&&(xn=null,Ro(e,t));do try{Gg();break}catch(r){Qu(e,r)}while(!0);if(fs(),Ae=n,Xr.current=o,at!==null)throw Error(s(261));return dt=null,mt=0,lt}function Gg(){for(;at!==null;)Zu(at)}function Qg(){for(;at!==null&&!fo();)Zu(at)}function Zu(e){var t=nd(e.alternate,e,Dt);e.memoizedProps=e.pendingProps,t===null?Xu(e):at=t,qs.current=null}function Xu(e){var t=e;do{var n=t.alternate;if(e=t.return,(t.flags&32768)===0){if(n=Ug(n,t,Dt),n!==null){at=n;return}}else{if(n=Vg(n,t),n!==null){n.flags&=32767,at=n;return}if(e!==null)e.flags|=32768,e.subtreeFlags=0,e.deletions=null;else{lt=6,at=null;return}}if(t=t.sibling,t!==null){at=t;return}at=t=e}while(t!==null);lt===0&&(lt=5)}function Co(e,t,n){var o=Be,r=Ht.transition;try{Ht.transition=null,Be=1,Jg(e,t,n,o)}finally{Ht.transition=r,Be=o}return null}function Jg(e,t,n,o){do ia();while(Xn!==null);if((Ae&6)!==0)throw Error(s(327));n=e.finishedWork;var r=e.finishedLanes;if(n===null)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(s(177));e.callbackNode=null,e.callbackPriority=0;var l=n.lanes|n.childLanes;if(Ap(e,l),e===dt&&(at=dt=null,mt=0),(n.subtreeFlags&2064)===0&&(n.flags&2064)===0||ni||(ni=!0,od(mn,function(){return ia(),null})),l=(n.flags&15990)!==0,(n.subtreeFlags&15990)!==0||l){l=Ht.transition,Ht.transition=null;var u=Be;Be=1;var f=Ae;Ae|=4,qs.current=null,Yg(e,n),Vu(n,e),yg(ts),yr=!!es,ts=es=null,e.current=n,qg(n),Kt(),Ae=f,Be=u,Ht.transition=l}else e.current=n;if(ni&&(ni=!1,Xn=e,oi=r),l=e.pendingLanes,l===0&&(Zn=null),ho(n.stateNode),Et(e,Ne()),t!==null)for(o=e.onRecoverableError,n=0;n<t.length;n++)r=t[n],o(r.value,{componentStack:r.stack,digest:r.digest});if(ti)throw ti=!1,e=Gs,Gs=null,e;return(oi&1)!==0&&e.tag!==0&&ia(),l=e.pendingLanes,(l&1)!==0?e===Qs?$a++:($a=0,Qs=e):$a=0,$n(),null}function ia(){if(Xn!==null){var e=Fl(oi),t=Ht.transition,n=Be;try{if(Ht.transition=null,Be=16>e?16:e,Xn===null)var o=!1;else{if(e=Xn,Xn=null,oi=0,(Ae&6)!==0)throw Error(s(331));var r=Ae;for(Ae|=4,G=e.current;G!==null;){var l=G,u=l.child;if((G.flags&16)!==0){var f=l.deletions;if(f!==null){for(var v=0;v<f.length;v++){var E=f[v];for(G=E;G!==null;){var D=G;switch(D.tag){case 0:case 11:case 15:Ya(8,D,l)}var I=D.child;if(I!==null)I.return=D,G=I;else for(;G!==null;){D=G;var z=D.sibling,K=D.return;if(Ou(D),D===E){G=null;break}if(z!==null){z.return=K,G=z;break}G=K}}}var X=l.alternate;if(X!==null){var te=X.child;if(te!==null){X.child=null;do{var ot=te.sibling;te.sibling=null,te=ot}while(te!==null)}}G=l}}if((l.subtreeFlags&2064)!==0&&u!==null)u.return=l,G=u;else e:for(;G!==null;){if(l=G,(l.flags&2048)!==0)switch(l.tag){case 0:case 11:case 15:Ya(9,l,l.return)}var b=l.sibling;if(b!==null){b.return=l.return,G=b;break e}G=l.return}}var w=e.current;for(G=w;G!==null;){u=G;var C=u.child;if((u.subtreeFlags&2064)!==0&&C!==null)C.return=u,G=C;else e:for(u=w;G!==null;){if(f=G,(f.flags&2048)!==0)try{switch(f.tag){case 0:case 11:case 15:Zr(9,f)}}catch(ne){nt(f,f.return,ne)}if(f===u){G=null;break e}var F=f.sibling;if(F!==null){F.return=f.return,G=F;break e}G=f.return}}if(Ae=r,$n(),ft&&typeof ft.onPostCommitFiberRoot=="function")try{ft.onPostCommitFiberRoot(Ve,e)}catch{}o=!0}return o}finally{Be=n,Ht.transition=t}}return!1}function ed(e,t,n){t=na(n,t),t=vu(e,t,1),e=Qn(e,t,1),t=kt(),e!==null&&(va(e,1,t),Et(e,t))}function nt(e,t,n){if(e.tag===3)ed(e,e,n);else for(;t!==null;){if(t.tag===3){ed(t,e,n);break}else if(t.tag===1){var o=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof o.componentDidCatch=="function"&&(Zn===null||!Zn.has(o))){e=na(n,e),e=Pu(t,e,1),t=Qn(t,e,1),e=kt(),t!==null&&(va(t,1,e),Et(t,e));break}}t=t.return}}function Zg(e,t,n){var o=e.pingCache;o!==null&&o.delete(t),t=kt(),e.pingedLanes|=e.suspendedLanes&n,dt===e&&(mt&n)===n&&(lt===4||lt===3&&(mt&130023424)===mt&&500>Ne()-$s?Ro(e,0):Ks|=n),Et(e,t)}function td(e,t){t===0&&((e.mode&1)===0?t=1:(t=gr,gr<<=1,(gr&130023424)===0&&(gr=4194304)));var n=kt();e=Sn(e,t),e!==null&&(va(e,t,n),Et(e,n))}function Xg(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),td(e,n)}function ef(e,t){var n=0;switch(e.tag){case 13:var o=e.stateNode,r=e.memoizedState;r!==null&&(n=r.retryLane);break;case 19:o=e.stateNode;break;default:throw Error(s(314))}o!==null&&o.delete(t),td(e,n)}var nd;nd=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||bt.current)Rt=!0;else{if((e.lanes&n)===0&&(t.flags&128)===0)return Rt=!1,Fg(e,t,n);Rt=(e.flags&131072)!==0}else Rt=!1,$e&&(t.flags&1048576)!==0&&zc(t,zr,t.index);switch(t.lanes=0,t.tag){case 2:var o=t.type;Qr(e,t),e=t.pendingProps;var r=$o(t,yt.current);ea(t,n),r=Rs(null,t,o,e,r,n);var l=Cs();return t.flags|=1,typeof r=="object"&&r!==null&&typeof r.render=="function"&&r.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,xt(o)?(l=!0,Mr(t)):l=!1,t.memoizedState=r.state!==null&&r.state!==void 0?r.state:null,vs(t),r.updater=$r,t.stateNode=r,r._reactInternals=t,Ms(t,o,e,n),t=Ds(null,t,o,!0,l,n)):(t.tag=0,$e&&l&&ls(t),St(null,t,r,n),t=t.child),t;case 16:o=t.elementType;e:{switch(Qr(e,t),e=t.pendingProps,r=o._init,o=r(o._payload),t.type=o,r=t.tag=nf(o),e=Qt(o,e),r){case 0:t=zs(null,t,o,e,n);break e;case 1:t=ju(null,t,o,e,n);break e;case 11:t=bu(null,t,o,e,n);break e;case 14:t=xu(null,t,o,Qt(o.type,e),n);break e}throw Error(s(306,o,""))}return t;case 0:return o=t.type,r=t.pendingProps,r=t.elementType===o?r:Qt(o,r),zs(e,t,o,r,n);case 1:return o=t.type,r=t.pendingProps,r=t.elementType===o?r:Qt(o,r),ju(e,t,o,r,n);case 3:e:{if(_u(t),e===null)throw Error(s(387));o=t.pendingProps,l=t.memoizedState,r=l.element,Hc(e,t),Fr(t,o,null,n);var u=t.memoizedState;if(o=u.element,l.isDehydrated)if(l={element:o,isDehydrated:!1,cache:u.cache,pendingSuspenseBoundaries:u.pendingSuspenseBoundaries,transitions:u.transitions},t.updateQueue.baseState=l,t.memoizedState=l,t.flags&256){r=na(Error(s(423)),t),t=Tu(e,t,o,n,r);break e}else if(o!==r){r=na(Error(s(424)),t),t=Tu(e,t,o,n,r);break e}else for(zt=Yn(t.stateNode.containerInfo.firstChild),Lt=t,$e=!0,Gt=null,n=Uc(t,null,o,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Jo(),o===r){t=bn(e,t,n);break e}St(e,t,o,n)}t=t.child}return t;case 5:return Kc(t),e===null&&ds(t),o=t.type,r=t.pendingProps,l=e!==null?e.memoizedProps:null,u=r.children,ns(o,r)?u=null:l!==null&&ns(o,l)&&(t.flags|=32),Eu(e,t),St(e,t,u,n),t.child;case 6:return e===null&&ds(t),null;case 13:return Au(e,t,n);case 4:return Ps(t,t.stateNode.containerInfo),o=t.pendingProps,e===null?t.child=Zo(t,null,o,n):St(e,t,o,n),t.child;case 11:return o=t.type,r=t.pendingProps,r=t.elementType===o?r:Qt(o,r),bu(e,t,o,r,n);case 7:return St(e,t,t.pendingProps,n),t.child;case 8:return St(e,t,t.pendingProps.children,n),t.child;case 12:return St(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(o=t.type._context,r=t.pendingProps,l=t.memoizedProps,u=r.value,He(Or,o._currentValue),o._currentValue=u,l!==null)if($t(l.value,u)){if(l.children===r.children&&!bt.current){t=bn(e,t,n);break e}}else for(l=t.child,l!==null&&(l.return=t);l!==null;){var f=l.dependencies;if(f!==null){u=l.child;for(var v=f.firstContext;v!==null;){if(v.context===o){if(l.tag===1){v=kn(-1,n&-n),v.tag=2;var E=l.updateQueue;if(E!==null){E=E.shared;var D=E.pending;D===null?v.next=v:(v.next=D.next,D.next=v),E.pending=v}}l.lanes|=n,v=l.alternate,v!==null&&(v.lanes|=n),ms(l.return,n,t),f.lanes|=n;break}v=v.next}}else if(l.tag===10)u=l.type===t.type?null:l.child;else if(l.tag===18){if(u=l.return,u===null)throw Error(s(341));u.lanes|=n,f=u.alternate,f!==null&&(f.lanes|=n),ms(u,n,t),u=l.sibling}else u=l.child;if(u!==null)u.return=l;else for(u=l;u!==null;){if(u===t){u=null;break}if(l=u.sibling,l!==null){l.return=u.return,u=l;break}u=u.return}l=u}St(e,t,r.children,n),t=t.child}return t;case 9:return r=t.type,o=t.pendingProps.children,ea(t,n),r=Ut(r),o=o(r),t.flags|=1,St(e,t,o,n),t.child;case 14:return o=t.type,r=Qt(o,t.pendingProps),r=Qt(o.type,r),xu(e,t,o,r,n);case 15:return Ru(e,t,t.type,t.pendingProps,n);case 17:return o=t.type,r=t.pendingProps,r=t.elementType===o?r:Qt(o,r),Qr(e,t),t.tag=1,xt(o)?(e=!0,Mr(t)):e=!1,ea(t,n),mu(t,o,r),Ms(t,o,r,n),Ds(null,t,o,!0,e,n);case 19:return Nu(e,t,n);case 22:return Cu(e,t,n)}throw Error(s(156,t.tag))};function od(e,t){return Ye(e,t)}function tf(e,t,n,o){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=o,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Yt(e,t,n,o){return new tf(e,t,n,o)}function nl(e){return e=e.prototype,!(!e||!e.isReactComponent)}function nf(e){if(typeof e=="function")return nl(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Te)return 11;if(e===Xe)return 14}return 2}function no(e,t){var n=e.alternate;return n===null?(n=Yt(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function si(e,t,n,o,r,l){var u=2;if(o=e,typeof e=="function")nl(e)&&(u=1);else if(typeof e=="string")u=5;else e:switch(e){case j:return Eo(n.children,r,l,t);case J:u=8,r|=8;break;case Se:return e=Yt(12,n,t,r|2),e.elementType=Se,e.lanes=l,e;case De:return e=Yt(13,n,t,r),e.elementType=De,e.lanes=l,e;case he:return e=Yt(19,n,t,r),e.elementType=he,e.lanes=l,e;case Ie:return li(n,r,l,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case ie:u=10;break e;case Fe:u=9;break e;case Te:u=11;break e;case Xe:u=14;break e;case et:u=16,o=null;break e}throw Error(s(130,e==null?e:typeof e,""))}return t=Yt(u,n,t,r),t.elementType=e,t.type=o,t.lanes=l,t}function Eo(e,t,n,o){return e=Yt(7,e,o,t),e.lanes=n,e}function li(e,t,n,o){return e=Yt(22,e,o,t),e.elementType=Ie,e.lanes=n,e.stateNode={isHidden:!1},e}function ol(e,t,n){return e=Yt(6,e,null,t),e.lanes=n,e}function al(e,t,n){return t=Yt(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function of(e,t,n,o,r){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Ai(0),this.expirationTimes=Ai(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ai(0),this.identifierPrefix=o,this.onRecoverableError=r,this.mutableSourceEagerHydrationData=null}function rl(e,t,n,o,r,l,u,f,v){return e=new of(e,t,n,f,v),t===1?(t=1,l===!0&&(t|=8)):t=0,l=Yt(3,null,null,t),e.current=l,l.stateNode=e,l.memoizedState={element:o,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},vs(l),e}function af(e,t,n){var o=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:je,key:o==null?null:""+o,children:e,containerInfo:t,implementation:n}}function ad(e){if(!e)return Kn;e=e._reactInternals;e:{if(Q(e)!==e||e.tag!==1)throw Error(s(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(xt(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(t!==null);throw Error(s(171))}if(e.tag===1){var n=e.type;if(xt(n))return Mc(e,n,t)}return t}function rd(e,t,n,o,r,l,u,f,v){return e=rl(n,o,!0,e,r,l,u,f,v),e.context=ad(null),n=e.current,o=kt(),r=eo(n),l=kn(o,r),l.callback=t??null,Qn(n,l,r),e.current.lanes=r,va(e,r,o),Et(e,o),e}function ci(e,t,n,o){var r=t.current,l=kt(),u=eo(r);return n=ad(n),t.context===null?t.context=n:t.pendingContext=n,t=kn(l,u),t.payload={element:e},o=o===void 0?null:o,o!==null&&(t.callback=o),e=Qn(r,t,u),e!==null&&(Xt(e,r,u,l),Wr(e,r,u)),u}function ui(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 5:return e.child.stateNode;default:return e.child.stateNode}}function id(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var n=e.retryLane;e.retryLane=n!==0&&n<t?n:t}}function il(e,t){id(e,t),(e=e.alternate)&&id(e,t)}function rf(){return null}var sd=typeof reportError=="function"?reportError:function(e){console.error(e)};function sl(e){this._internalRoot=e}di.prototype.render=sl.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(s(409));ci(e,t,null,null)},di.prototype.unmount=sl.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;xo(function(){ci(null,e,null,null)}),t[yn]=null}};function di(e){this._internalRoot=e}di.prototype.unstable_scheduleHydration=function(e){if(e){var t=Hl();e={blockedOn:null,target:e,priority:t};for(var n=0;n<Un.length&&t!==0&&t<Un[n].priority;n++);Un.splice(n,0,e),n===0&&Kl(e)}};function ll(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function pi(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11&&(e.nodeType!==8||e.nodeValue!==" react-mount-point-unstable "))}function ld(){}function sf(e,t,n,o,r){if(r){if(typeof o=="function"){var l=o;o=function(){var E=ui(u);l.call(E)}}var u=rd(t,o,e,0,null,!1,!1,"",ld);return e._reactRootContainer=u,e[yn]=u.current,Ma(e.nodeType===8?e.parentNode:e),xo(),u}for(;r=e.lastChild;)e.removeChild(r);if(typeof o=="function"){var f=o;o=function(){var E=ui(v);f.call(E)}}var v=rl(e,0,!1,null,null,!1,!1,"",ld);return e._reactRootContainer=v,e[yn]=v.current,Ma(e.nodeType===8?e.parentNode:e),xo(function(){ci(t,v,n,o)}),v}function gi(e,t,n,o,r){var l=n._reactRootContainer;if(l){var u=l;if(typeof r=="function"){var f=r;r=function(){var v=ui(u);f.call(v)}}ci(t,u,e,r)}else u=sf(n,t,e,r,o);return ui(u)}Ul=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=ya(t.pendingLanes);n!==0&&(Mi(t,n|1),Et(t,Ne()),(Ae&6)===0&&(ra=Ne()+500,$n()))}break;case 13:xo(function(){var o=Sn(e,1);if(o!==null){var r=kt();Xt(o,e,1,r)}}),il(e,1)}},Ni=function(e){if(e.tag===13){var t=Sn(e,134217728);if(t!==null){var n=kt();Xt(t,e,134217728,n)}il(e,134217728)}},Vl=function(e){if(e.tag===13){var t=eo(e),n=Sn(e,t);if(n!==null){var o=kt();Xt(n,e,t,o)}il(e,t)}},Hl=function(){return Be},Yl=function(e,t){var n=Be;try{return Be=e,t()}finally{Be=n}},Io=function(e,t,n){switch(t){case"input":if(Nn(e,n),t=n.name,n.type==="radio"&&t!=null){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var o=n[t];if(o!==e&&o.form===e.form){var r=Tr(o);if(!r)throw Error(s(90));tt(o),Nn(o,r)}}}break;case"textarea":tn(e,n);break;case"select":t=n.value,t!=null&&Qe(e,!!n.multiple,t,!1)}},ha=Xs,po=xo;var lf={usingClientEntryPoint:!1,Events:[za,qo,Tr,fa,cr,Xs]},Ga={findFiberByHostInstance:mo,bundleType:0,version:"18.3.1",rendererPackageName:"react-dom"},cf={bundleType:Ga.bundleType,version:Ga.version,rendererPackageName:Ga.rendererPackageName,rendererConfig:Ga.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:re.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return e=Oe(e),e===null?null:e.stateNode},findFiberByHostInstance:Ga.findFiberByHostInstance||rf,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var fi=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!fi.isDisabled&&fi.supportsFiber)try{Ve=fi.inject(cf),ft=fi}catch{}}return jt.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=lf,jt.createPortal=function(e,t){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!ll(t))throw Error(s(200));return af(e,t,null,n)},jt.createRoot=function(e,t){if(!ll(e))throw Error(s(299));var n=!1,o="",r=sd;return t!=null&&(t.unstable_strictMode===!0&&(n=!0),t.identifierPrefix!==void 0&&(o=t.identifierPrefix),t.onRecoverableError!==void 0&&(r=t.onRecoverableError)),t=rl(e,1,!1,null,null,n,!1,o,r),e[yn]=t.current,Ma(e.nodeType===8?e.parentNode:e),new sl(t)},jt.findDOMNode=function(e){if(e==null)return null;if(e.nodeType===1)return e;var t=e._reactInternals;if(t===void 0)throw typeof e.render=="function"?Error(s(188)):(e=Object.keys(e).join(","),Error(s(268,e)));return e=Oe(t),e=e===null?null:e.stateNode,e},jt.flushSync=function(e){return xo(e)},jt.hydrate=function(e,t,n){if(!pi(t))throw Error(s(200));return gi(null,e,t,!0,n)},jt.hydrateRoot=function(e,t,n){if(!ll(e))throw Error(s(405));var o=n!=null&&n.hydratedSources||null,r=!1,l="",u=sd;if(n!=null&&(n.unstable_strictMode===!0&&(r=!0),n.identifierPrefix!==void 0&&(l=n.identifierPrefix),n.onRecoverableError!==void 0&&(u=n.onRecoverableError)),t=rd(t,null,e,1,n??null,r,!1,l,u),e[yn]=t.current,Ma(e),o)for(e=0;e<o.length;e++)n=o[e],r=n._getVersion,r=r(n._source),t.mutableSourceEagerHydrationData==null?t.mutableSourceEagerHydrationData=[n,r]:t.mutableSourceEagerHydrationData.push(n,r);return new di(t)},jt.render=function(e,t,n){if(!pi(t))throw Error(s(200));return gi(null,e,t,!1,n)},jt.unmountComponentAtNode=function(e){if(!pi(e))throw Error(s(40));return e._reactRootContainer?(xo(function(){gi(null,null,e,!1,function(){e._reactRootContainer=null,e[yn]=null})}),!0):!1},jt.unstable_batchedUpdates=Xs,jt.unstable_renderSubtreeIntoContainer=function(e,t,n,o){if(!pi(n))throw Error(s(200));if(e==null||e._reactInternals===void 0)throw Error(s(38));return gi(e,t,n,!1,o)},jt.version="18.3.1-next-f1338f8080-20240426",jt}var md;function Zd(){if(md)return dl.exports;md=1;function a(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(a)}catch(i){console.error(i)}}return a(),dl.exports=vf(),dl.exports}var yd;function Pf(){if(yd)return hi;yd=1;var a=Zd();return hi.createRoot=a.createRoot,hi.hydrateRoot=a.hydrateRoot,hi}var wf=Pf(),T=jl();const Sf=Jd(T),kf=Qd({__proto__:null,default:Sf},[T]);var Xd=Zd();const bf=Jd(Xd),xf=Qd({__proto__:null,default:bf},[Xd]);/**
42
42
  * @remix-run/router v1.23.2
43
43
  *
44
44
  * Copyright (c) Remix Software Inc.
@@ -47,8 +47,8 @@ Error generating stack: `+l.message+`
47
47
  * LICENSE.md file in the root directory of this source tree.
48
48
  *
49
49
  * @license MIT
50
- */function Qe(){return Qe=Object.assign?Object.assign.bind():function(a){for(var i=1;i<arguments.length;i++){var s=arguments[i];for(var c in s)Object.prototype.hasOwnProperty.call(s,c)&&(a[c]=s[c])}return a},Qe.apply(this,arguments)}var rt;(function(a){a.Pop="POP",a.Push="PUSH",a.Replace="REPLACE"})(rt||(rt={}));const vd="popstate";function Cg(a){a===void 0&&(a={});function i(d,p){let{pathname:f="/",search:m="",hash:h=""}=_o(d.location.hash.substr(1));return!f.startsWith("/")&&!f.startsWith(".")&&(f="/"+f),tr("",{pathname:f,search:m,hash:h},p.state&&p.state.usr||null,p.state&&p.state.key||"default")}function s(d,p){let f=d.document.querySelector("base"),m="";if(f&&f.getAttribute("href")){let h=d.location.href,P=h.indexOf("#");m=P===-1?h:h.slice(0,P)}return m+"#"+(typeof p=="string"?p:Nn(p))}function c(d,p){sn(d.pathname.charAt(0)==="/","relative pathnames are not supported in hash history.push("+JSON.stringify(p)+")")}return jg(i,s,c,a)}function be(a,i){if(a===!1||a===null||typeof a>"u")throw new Error(i)}function sn(a,i){if(!a){typeof console<"u"&&console.warn(i);try{throw new Error(i)}catch{}}}function Rg(){return Math.random().toString(36).substr(2,8)}function Pd(a,i){return{usr:a.state,key:a.key,idx:i}}function tr(a,i,s,c){return s===void 0&&(s=null),Qe({pathname:typeof a=="string"?a:a.pathname,search:"",hash:""},typeof i=="string"?_o(i):i,{state:s,key:i&&i.key||c||Rg()})}function Nn(a){let{pathname:i="/",search:s="",hash:c=""}=a;return s&&s!=="?"&&(i+=s.charAt(0)==="?"?s:"?"+s),c&&c!=="#"&&(i+=c.charAt(0)==="#"?c:"#"+c),i}function _o(a){let i={};if(a){let s=a.indexOf("#");s>=0&&(i.hash=a.substr(s),a=a.substr(0,s));let c=a.indexOf("?");c>=0&&(i.search=a.substr(c),a=a.substr(0,c)),a&&(i.pathname=a)}return i}function jg(a,i,s,c){c===void 0&&(c={});let{window:d=document.defaultView,v5Compat:p=!1}=c,f=d.history,m=rt.Pop,h=null,P=x();P==null&&(P=0,f.replaceState(Qe({},f.state,{idx:P}),""));function x(){return(f.state||{idx:null}).idx}function C(){m=rt.Pop;let U=x(),ge=U==null?null:U-P;P=U,h&&h({action:m,location:F.location,delta:ge})}function M(U,ge){m=rt.Push;let q=tr(F.location,U,ge);s&&s(q,U),P=x()+1;let ue=Pd(q,P),re=F.createHref(q);try{f.pushState(ue,"",re)}catch(xe){if(xe instanceof DOMException&&xe.name==="DataCloneError")throw xe;d.location.assign(re)}p&&h&&h({action:m,location:F.location,delta:1})}function O(U,ge){m=rt.Replace;let q=tr(F.location,U,ge);s&&s(q,U),P=x();let ue=Pd(q,P),re=F.createHref(q);f.replaceState(ue,"",re),p&&h&&h({action:m,location:F.location,delta:0})}function H(U){let ge=d.location.origin!=="null"?d.location.origin:d.location.href,q=typeof U=="string"?U:Nn(U);return q=q.replace(/ $/,"%20"),be(ge,"No window.location.(origin|href) available to create URL for href: "+q),new URL(q,ge)}let F={get action(){return m},get location(){return a(d,f)},listen(U){if(h)throw new Error("A history only accepts one active listener");return d.addEventListener(vd,C),h=U,()=>{d.removeEventListener(vd,C),h=null}},createHref(U){return i(d,U)},createURL:H,encodeLocation(U){let ge=H(U);return{pathname:ge.pathname,search:ge.search,hash:ge.hash}},push:M,replace:O,go(U){return f.go(U)}};return F}var Be;(function(a){a.data="data",a.deferred="deferred",a.redirect="redirect",a.error="error"})(Be||(Be={}));const Eg=new Set(["lazy","caseSensitive","path","id","index","children"]);function _g(a){return a.index===!0}function Si(a,i,s,c){return s===void 0&&(s=[]),c===void 0&&(c={}),a.map((d,p)=>{let f=[...s,String(p)],m=typeof d.id=="string"?d.id:f.join("-");if(be(d.index!==!0||!d.children,"Cannot specify children on an index route"),be(!c[m],'Found a route id collision on id "'+m+`". Route id's must be globally unique within Data Router usages`),_g(d)){let h=Qe({},d,i(d),{id:m});return c[m]=h,h}else{let h=Qe({},d,i(d),{id:m,children:void 0});return c[m]=h,d.children&&(h.children=Si(d.children,i,f,c)),h}})}function En(a,i,s){return s===void 0&&(s="/"),wi(a,i,s,!1)}function wi(a,i,s,c){let d=typeof i=="string"?_o(i):i,p=Eo(d.pathname||"/",s);if(p==null)return null;let f=ep(a);Mg(f);let m=null;for(let h=0;m==null&&h<f.length;++h){let P=Ug(p);m=Bg(f[h],P,c)}return m}function Tg(a,i){let{route:s,pathname:c,params:d}=a;return{id:s.id,pathname:c,params:d,data:i[s.id],handle:s.handle}}function ep(a,i,s,c){i===void 0&&(i=[]),s===void 0&&(s=[]),c===void 0&&(c="");let d=(p,f,m)=>{let h={relativePath:m===void 0?p.path||"":m,caseSensitive:p.caseSensitive===!0,childrenIndex:f,route:p};h.relativePath.startsWith("/")&&(be(h.relativePath.startsWith(c),'Absolute route path "'+h.relativePath+'" nested under path '+('"'+c+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),h.relativePath=h.relativePath.slice(c.length));let P=jo([c,h.relativePath]),x=s.concat(h);p.children&&p.children.length>0&&(be(p.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+P+'".')),ep(p.children,i,x,P)),!(p.path==null&&!p.index)&&i.push({path:P,score:Og(P,p.index),routesMeta:x})};return a.forEach((p,f)=>{var m;if(p.path===""||!((m=p.path)!=null&&m.includes("?")))d(p,f);else for(let h of tp(p.path))d(p,f,h)}),i}function tp(a){let i=a.split("/");if(i.length===0)return[];let[s,...c]=i,d=s.endsWith("?"),p=s.replace(/\?$/,"");if(c.length===0)return d?[p,""]:[p];let f=tp(c.join("/")),m=[];return m.push(...f.map(h=>h===""?p:[p,h].join("/"))),d&&m.push(...f),m.map(h=>a.startsWith("/")&&h===""?"/":h)}function Mg(a){a.sort((i,s)=>i.score!==s.score?s.score-i.score:Fg(i.routesMeta.map(c=>c.childrenIndex),s.routesMeta.map(c=>c.childrenIndex)))}const Ng=/^:[\w-]+$/,Lg=3,Ag=2,Dg=1,zg=10,Ig=-2,wd=a=>a==="*";function Og(a,i){let s=a.split("/"),c=s.length;return s.some(wd)&&(c+=Ig),i&&(c+=Ag),s.filter(d=>!wd(d)).reduce((d,p)=>d+(Ng.test(p)?Lg:p===""?Dg:zg),c)}function Fg(a,i){return a.length===i.length&&a.slice(0,-1).every((c,d)=>c===i[d])?a[a.length-1]-i[i.length-1]:0}function Bg(a,i,s){s===void 0&&(s=!1);let{routesMeta:c}=a,d={},p="/",f=[];for(let m=0;m<c.length;++m){let h=c[m],P=m===c.length-1,x=p==="/"?i:i.slice(p.length)||"/",C=bi({path:h.relativePath,caseSensitive:h.caseSensitive,end:P},x),M=h.route;if(!C&&P&&s&&!c[c.length-1].route.index&&(C=bi({path:h.relativePath,caseSensitive:h.caseSensitive,end:!1},x)),!C)return null;Object.assign(d,C.params),f.push({params:d,pathname:jo([p,C.pathname]),pathnameBase:qg(jo([p,C.pathnameBase])),route:M}),C.pathnameBase!=="/"&&(p=jo([p,C.pathnameBase]))}return f}function bi(a,i){typeof a=="string"&&(a={path:a,caseSensitive:!1,end:!0});let[s,c]=Wg(a.path,a.caseSensitive,a.end),d=i.match(s);if(!d)return null;let p=d[0],f=p.replace(/(.)\/+$/,"$1"),m=d.slice(1);return{params:c.reduce((P,x,C)=>{let{paramName:M,isOptional:O}=x;if(M==="*"){let F=m[C]||"";f=p.slice(0,p.length-F.length).replace(/(.)\/+$/,"$1")}const H=m[C];return O&&!H?P[M]=void 0:P[M]=(H||"").replace(/%2F/g,"/"),P},{}),pathname:p,pathnameBase:f,pattern:a}}function Wg(a,i,s){i===void 0&&(i=!1),s===void 0&&(s=!0),sn(a==="*"||!a.endsWith("*")||a.endsWith("/*"),'Route path "'+a+'" will be treated as if it were '+('"'+a.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+a.replace(/\*$/,"/*")+'".'));let c=[],d="^"+a.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(f,m,h)=>(c.push({paramName:m,isOptional:h!=null}),h?"/?([^\\/]+)?":"/([^\\/]+)"));return a.endsWith("*")?(c.push({paramName:"*"}),d+=a==="*"||a==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):s?d+="\\/*$":a!==""&&a!=="/"&&(d+="(?:(?=\\/|$))"),[new RegExp(d,i?void 0:"i"),c]}function Ug(a){try{return a.split("/").map(i=>decodeURIComponent(i).replace(/\//g,"%2F")).join("/")}catch(i){return sn(!1,'The URL path "'+a+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+i+").")),a}}function Eo(a,i){if(i==="/")return a;if(!a.toLowerCase().startsWith(i.toLowerCase()))return null;let s=i.endsWith("/")?i.length-1:i.length,c=a.charAt(s);return c&&c!=="/"?null:a.slice(s)||"/"}const Hg=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Vg=a=>Hg.test(a);function Yg(a,i){i===void 0&&(i="/");let{pathname:s,search:c="",hash:d=""}=typeof a=="string"?_o(a):a,p;if(s)if(Vg(s))p=s;else{if(s.includes("//")){let f=s;s=s.replace(/\/\/+/g,"/"),sn(!1,"Pathnames cannot have embedded double slashes - normalizing "+(f+" -> "+s))}s.startsWith("/")?p=kd(s.substring(1),"/"):p=kd(s,i)}else p=i;return{pathname:p,search:Kg(c),hash:$g(d)}}function kd(a,i){let s=i.replace(/\/+$/,"").split("/");return a.split("/").forEach(d=>{d===".."?s.length>1&&s.pop():d!=="."&&s.push(d)}),s.length>1?s.join("/"):"/"}function gl(a,i,s,c){return"Cannot include a '"+a+"' character in a manually specified "+("`to."+i+"` field ["+JSON.stringify(c)+"]. Please separate it out to the ")+("`to."+s+"` field. Alternatively you may provide the full path as ")+'a string in <Link to="..."> and the router will parse it for you.'}function op(a){return a.filter((i,s)=>s===0||i.route.path&&i.route.path.length>0)}function _l(a,i){let s=op(a);return i?s.map((c,d)=>d===s.length-1?c.pathname:c.pathnameBase):s.map(c=>c.pathnameBase)}function Tl(a,i,s,c){c===void 0&&(c=!1);let d;typeof a=="string"?d=_o(a):(d=Qe({},a),be(!d.pathname||!d.pathname.includes("?"),gl("?","pathname","search",d)),be(!d.pathname||!d.pathname.includes("#"),gl("#","pathname","hash",d)),be(!d.search||!d.search.includes("#"),gl("#","search","hash",d)));let p=a===""||d.pathname==="",f=p?"/":d.pathname,m;if(f==null)m=s;else{let C=i.length-1;if(!c&&f.startsWith("..")){let M=f.split("/");for(;M[0]==="..";)M.shift(),C-=1;d.pathname=M.join("/")}m=C>=0?i[C]:"/"}let h=Yg(d,m),P=f&&f!=="/"&&f.endsWith("/"),x=(p||f===".")&&s.endsWith("/");return!h.pathname.endsWith("/")&&(P||x)&&(h.pathname+="/"),h}const jo=a=>a.join("/").replace(/\/\/+/g,"/"),qg=a=>a.replace(/\/+$/,"").replace(/^\/*/,"/"),Kg=a=>!a||a==="?"?"":a.startsWith("?")?a:"?"+a,$g=a=>!a||a==="#"?"":a.startsWith("#")?a:"#"+a;class xi{constructor(i,s,c,d){d===void 0&&(d=!1),this.status=i,this.statusText=s||"",this.internal=d,c instanceof Error?(this.data=c.toString(),this.error=c):this.data=c}}function or(a){return a!=null&&typeof a.status=="number"&&typeof a.statusText=="string"&&typeof a.internal=="boolean"&&"data"in a}const np=["post","put","patch","delete"],Qg=new Set(np),Gg=["get",...np],Jg=new Set(Gg),Xg=new Set([301,302,303,307,308]),Zg=new Set([307,308]),hl={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},eh={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},Ja={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},Ml=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,th=a=>({hasErrorBoundary:!!a.hasErrorBoundary}),ap="remix-router-transitions";function oh(a){const i=a.window?a.window:typeof window<"u"?window:void 0,s=typeof i<"u"&&typeof i.document<"u"&&typeof i.document.createElement<"u",c=!s;be(a.routes.length>0,"You must provide a non-empty routes array to createRouter");let d;if(a.mapRouteProperties)d=a.mapRouteProperties;else if(a.detectErrorBoundary){let y=a.detectErrorBoundary;d=S=>({hasErrorBoundary:y(S)})}else d=th;let p={},f=Si(a.routes,d,void 0,p),m,h=a.basename||"/",P=a.dataStrategy||ih,x=a.patchRoutesOnNavigation,C=Qe({v7_fetcherPersist:!1,v7_normalizeFormMethod:!1,v7_partialHydration:!1,v7_prependBasename:!1,v7_relativeSplatPath:!1,v7_skipActionErrorRevalidation:!1},a.future),M=null,O=new Set,H=null,F=null,U=null,ge=a.hydrationData!=null,q=En(f,a.history.location,h),ue=!1,re=null;if(q==null&&!x){let y=_t(404,{pathname:a.history.location.pathname}),{matches:S,route:_}=Nd(f);q=S,re={[_.id]:y}}q&&!a.hydrationData&&pn(q,f,a.history.location.pathname).active&&(q=null);let xe;if(q)if(q.some(y=>y.route.lazy))xe=!1;else if(!q.some(y=>y.route.loader))xe=!0;else if(C.v7_partialHydration){let y=a.hydrationData?a.hydrationData.loaderData:null,S=a.hydrationData?a.hydrationData.errors:null;if(S){let _=q.findIndex(A=>S[A.route.id]!==void 0);xe=q.slice(0,_+1).every(A=>!bl(A.route,y,S))}else xe=q.every(_=>!bl(_.route,y,S))}else xe=a.hydrationData!=null;else if(xe=!1,q=[],C.v7_partialHydration){let y=pn(null,f,a.history.location.pathname);y.active&&y.matches&&(ue=!0,q=y.matches)}let Ee,E={historyAction:a.history.action,location:a.history.location,matches:q,initialized:xe,navigation:hl,restoreScrollPosition:a.hydrationData!=null?!1:null,preventScrollReset:!1,revalidation:"idle",loaderData:a.hydrationData&&a.hydrationData.loaderData||{},actionData:a.hydrationData&&a.hydrationData.actionData||null,errors:a.hydrationData&&a.hydrationData.errors||re,fetchers:new Map,blockers:new Map},J=rt.Pop,ke=!1,ie,We=!1,Te=new Map,ze=null,he=!1,Ze=!1,et=[],Ie=new Set,B=new Map,ae=0,Y=-1,k=new Map,N=new Set,de=new Map,ye=new Map,me=new Set,Pe=new Map,Re=new Map,we;function Ue(){if(M=a.history.listen(y=>{let{action:S,location:_,delta:A}=y;if(we){we(),we=void 0;return}sn(Re.size===0||A!=null,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let V=In({currentLocation:E.location,nextLocation:_,historyAction:S});if(V&&A!=null){let ne=new Promise(ce=>{we=ce});a.history.go(A*-1),zo(V,{state:"blocked",location:_,proceed(){zo(V,{state:"proceeding",proceed:void 0,reset:void 0,location:_}),ne.then(()=>a.history.go(A))},reset(){let ce=new Map(E.blockers);ce.set(V,Ja),tt({blockers:ce})}});return}return Mt(S,_)}),s){wh(i,Te);let y=()=>kh(i,Te);i.addEventListener("pagehide",y),ze=()=>i.removeEventListener("pagehide",y)}return E.initialized||Mt(rt.Pop,E.location,{initialHydration:!0}),Ee}function ct(){M&&M(),ze&&ze(),O.clear(),ie&&ie.abort(),E.fetchers.forEach((y,S)=>oo(S)),E.blockers.forEach((y,S)=>zn(S))}function Mo(y){return O.add(y),()=>O.delete(y)}function tt(y,S){S===void 0&&(S={}),E=Qe({},E,y);let _=[],A=[];C.v7_fetcherPersist&&E.fetchers.forEach((V,ne)=>{V.state==="idle"&&(me.has(ne)?A.push(ne):_.push(ne))}),me.forEach(V=>{!E.fetchers.has(V)&&!B.has(V)&&A.push(V)}),[...O].forEach(V=>V(E,{deletedFetchers:A,viewTransitionOpts:S.viewTransitionOpts,flushSync:S.flushSync===!0})),C.v7_fetcherPersist?(_.forEach(V=>E.fetchers.delete(V)),A.forEach(V=>oo(V))):A.forEach(V=>me.delete(V))}function Tt(y,S,_){var A,V;let{flushSync:ne}=_===void 0?{}:_,ce=E.actionData!=null&&E.navigation.formMethod!=null&&eo(E.navigation.formMethod)&&E.navigation.state==="loading"&&((A=y.state)==null?void 0:A._isRedirect)!==!0,X;S.actionData?Object.keys(S.actionData).length>0?X=S.actionData:X=null:ce?X=E.actionData:X=null;let ee=S.loaderData?Td(E.loaderData,S.loaderData,S.matches||[],S.errors):E.loaderData,$=E.blockers;$.size>0&&($=new Map($),$.forEach((Ce,it)=>$.set(it,Ja)));let G=ke===!0||E.navigation.formMethod!=null&&eo(E.navigation.formMethod)&&((V=y.state)==null?void 0:V._isRedirect)!==!0;m&&(f=m,m=void 0),he||J===rt.Pop||(J===rt.Push?a.history.push(y,y.state):J===rt.Replace&&a.history.replace(y,y.state));let ve;if(J===rt.Pop){let Ce=Te.get(E.location.pathname);Ce&&Ce.has(y.pathname)?ve={currentLocation:E.location,nextLocation:y}:Te.has(y.pathname)&&(ve={currentLocation:y,nextLocation:E.location})}else if(We){let Ce=Te.get(E.location.pathname);Ce?Ce.add(y.pathname):(Ce=new Set([y.pathname]),Te.set(E.location.pathname,Ce)),ve={currentLocation:E.location,nextLocation:y}}tt(Qe({},S,{actionData:X,loaderData:ee,historyAction:J,location:y,initialized:!0,navigation:hl,revalidation:"idle",restoreScrollPosition:ha(y,S.matches||E.matches),preventScrollReset:G,blockers:$}),{viewTransitionOpts:ve,flushSync:ne===!0}),J=rt.Pop,ke=!1,We=!1,he=!1,Ze=!1,et=[]}async function No(y,S){if(typeof y=="number"){a.history.go(y);return}let _=Sl(E.location,E.matches,h,C.v7_prependBasename,y,C.v7_relativeSplatPath,S==null?void 0:S.fromRouteId,S==null?void 0:S.relative),{path:A,submission:V,error:ne}=Sd(C.v7_normalizeFormMethod,!1,_,S),ce=E.location,X=tr(E.location,A,S&&S.state);X=Qe({},X,a.history.encodeLocation(X));let ee=S&&S.replace!=null?S.replace:void 0,$=rt.Push;ee===!0?$=rt.Replace:ee===!1||V!=null&&eo(V.formMethod)&&V.formAction===E.location.pathname+E.location.search&&($=rt.Replace);let G=S&&"preventScrollReset"in S?S.preventScrollReset===!0:void 0,ve=(S&&S.flushSync)===!0,Ce=In({currentLocation:ce,nextLocation:X,historyAction:$});if(Ce){zo(Ce,{state:"blocked",location:X,proceed(){zo(Ce,{state:"proceeding",proceed:void 0,reset:void 0,location:X}),No(y,S)},reset(){let it=new Map(E.blockers);it.set(Ce,Ja),tt({blockers:it})}});return}return await Mt($,X,{submission:V,pendingError:ne,preventScrollReset:G,replace:S&&S.replace,enableViewTransition:S&&S.viewTransition,flushSync:ve})}function Ln(){if(dn(),tt({revalidation:"loading"}),E.navigation.state!=="submitting"){if(E.navigation.state==="idle"){Mt(E.historyAction,E.location,{startUninterruptedRevalidation:!0});return}Mt(J||E.historyAction,E.navigation.location,{overrideNavigation:E.navigation,enableViewTransition:We===!0})}}async function Mt(y,S,_){ie&&ie.abort(),ie=null,J=y,he=(_&&_.startUninterruptedRevalidation)===!0,cr(E.location,E.matches),ke=(_&&_.preventScrollReset)===!0,We=(_&&_.enableViewTransition)===!0;let A=m||f,V=_&&_.overrideNavigation,ne=_!=null&&_.initialHydration&&E.matches&&E.matches.length>0&&!ue?E.matches:En(A,S,h),ce=(_&&_.flushSync)===!0;if(ne&&E.initialized&&!Ze&&ph(E.location,S)&&!(_&&_.submission&&eo(_.submission.formMethod))){Tt(S,{matches:ne},{flushSync:ce});return}let X=pn(ne,A,S.pathname);if(X.active&&X.matches&&(ne=X.matches),!ne){let{error:Oe,notFoundMatches:_e,route:Ye}=no(S.pathname);Tt(S,{matches:_e,loaderData:{},errors:{[Ye.id]:Oe}},{flushSync:ce});return}ie=new AbortController;let ee=sa(a.history,S,ie.signal,_&&_.submission),$;if(_&&_.pendingError)$=[_n(ne).route.id,{type:Be.error,error:_.pendingError}];else if(_&&_.submission&&eo(_.submission.formMethod)){let Oe=await Lo(ee,S,_.submission,ne,X.active,{replace:_.replace,flushSync:ce});if(Oe.shortCircuited)return;if(Oe.pendingActionResult){let[_e,Ye]=Oe.pendingActionResult;if(Ot(Ye)&&or(Ye.error)&&Ye.error.status===404){ie=null,Tt(S,{matches:Oe.matches,loaderData:{},errors:{[_e]:Ye.error}});return}}ne=Oe.matches||ne,$=Oe.pendingActionResult,V=ml(S,_.submission),ce=!1,X.active=!1,ee=sa(a.history,ee.url,ee.signal)}let{shortCircuited:G,matches:ve,loaderData:Ce,errors:it}=await un(ee,S,ne,X.active,V,_&&_.submission,_&&_.fetcherSubmission,_&&_.replace,_&&_.initialHydration===!0,ce,$);G||(ie=null,Tt(S,Qe({matches:ve||ne},Md($),{loaderData:Ce,errors:it})))}async function Lo(y,S,_,A,V,ne){ne===void 0&&(ne={}),dn();let ce=vh(S,_);if(tt({navigation:ce},{flushSync:ne.flushSync===!0}),V){let $=await Io(A,S.pathname,y.signal);if($.type==="aborted")return{shortCircuited:!0};if($.type==="error"){let G=_n($.partialMatches).route.id;return{matches:$.partialMatches,pendingActionResult:[G,{type:Be.error,error:$.error}]}}else if($.matches)A=$.matches;else{let{notFoundMatches:G,error:ve,route:Ce}=no(S.pathname);return{matches:G,pendingActionResult:[Ce.id,{type:Be.error,error:ve}]}}}let X,ee=er(A,S);if(!ee.route.action&&!ee.route.lazy)X={type:Be.error,error:_t(405,{method:y.method,pathname:S.pathname,routeId:ee.route.id})};else if(X=(await Ao("action",E,y,[ee],A,null))[ee.route.id],y.signal.aborted)return{shortCircuited:!0};if(Tn(X)){let $;return ne&&ne.replace!=null?$=ne.replace:$=jd(X.response.headers.get("Location"),new URL(y.url),h,a.history)===E.location.pathname+E.location.search,await to(y,X,!0,{submission:_,replace:$}),{shortCircuited:!0}}if(rn(X))throw _t(400,{type:"defer-action"});if(Ot(X)){let $=_n(A,ee.route.id);return(ne&&ne.replace)!==!0&&(J=rt.Push),{matches:A,pendingActionResult:[$.route.id,X]}}return{matches:A,pendingActionResult:[ee.route.id,X]}}async function un(y,S,_,A,V,ne,ce,X,ee,$,G){let ve=V||ml(S,ne),Ce=ne||ce||Ad(ve),it=!he&&(!C.v7_partialHydration||!ee);if(A){if(it){let He=fo(G);tt(Qe({navigation:ve},He!==void 0?{actionData:He}:{}),{flushSync:$})}let je=await Io(_,S.pathname,y.signal);if(je.type==="aborted")return{shortCircuited:!0};if(je.type==="error"){let He=_n(je.partialMatches).route.id;return{matches:je.partialMatches,loaderData:{},errors:{[He]:je.error}}}else if(je.matches)_=je.matches;else{let{error:He,notFoundMatches:gt,route:hn}=no(S.pathname);return{matches:gt,loaderData:{},errors:{[hn.id]:He}}}}let Oe=m||f,[_e,Ye]=xd(a.history,E,_,Ce,S,C.v7_partialHydration&&ee===!0,C.v7_skipActionErrorRevalidation,Ze,et,Ie,me,de,N,Oe,h,G);if(ao(je=>!(_&&_.some(He=>He.route.id===je))||_e&&_e.some(He=>He.route.id===je)),Y=++ae,_e.length===0&&Ye.length===0){let je=sr();return Tt(S,Qe({matches:_,loaderData:{},errors:G&&Ot(G[1])?{[G[0]]:G[1].error}:null},Md(G),je?{fetchers:new Map(E.fetchers)}:{}),{flushSync:$}),{shortCircuited:!0}}if(it){let je={};if(!A){je.navigation=ve;let He=fo(G);He!==void 0&&(je.actionData=He)}Ye.length>0&&(je.fetchers=pe(Ye)),tt(je,{flushSync:$})}Ye.forEach(je=>{qt(je.key),je.controller&&B.set(je.key,je.controller)});let go=()=>Ye.forEach(je=>qt(je.key));ie&&ie.signal.addEventListener("abort",go);let{loaderResults:gn,fetcherResults:Kt}=await da(E,_,_e,Ye,y);if(y.signal.aborted)return{shortCircuited:!0};ie&&ie.signal.removeEventListener("abort",go),Ye.forEach(je=>B.delete(je.key));let Le=mi(gn);if(Le)return await to(y,Le.result,!0,{replace:X}),{shortCircuited:!0};if(Le=mi(Kt),Le)return N.add(Le.key),await to(y,Le.result,!0,{replace:X}),{shortCircuited:!0};let{loaderData:ma,errors:ho}=_d(E,_,gn,G,Ye,Kt,Pe);Pe.forEach((je,He)=>{je.subscribe(gt=>{(gt||je.done)&&Pe.delete(He)})}),C.v7_partialHydration&&ee&&E.errors&&(ho=Qe({},E.errors,ho));let ro=sr(),mo=Dn(Y),On=ro||mo||Ye.length>0;return Qe({matches:_,loaderData:ma,errors:ho},On?{fetchers:new Map(E.fetchers)}:{})}function fo(y){if(y&&!Ot(y[1]))return{[y[0]]:y[1].data};if(E.actionData)return Object.keys(E.actionData).length===0?null:E.actionData}function pe(y){return y.forEach(S=>{let _=E.fetchers.get(S.key),A=Xa(void 0,_?_.data:void 0);E.fetchers.set(S.key,A)}),new Map(E.fetchers)}function Ge(y,S,_,A){if(c)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");qt(y);let V=(A&&A.flushSync)===!0,ne=m||f,ce=Sl(E.location,E.matches,h,C.v7_prependBasename,_,C.v7_relativeSplatPath,S,A==null?void 0:A.relative),X=En(ne,ce,h),ee=pn(X,ne,ce);if(ee.active&&ee.matches&&(X=ee.matches),!X){Ft(y,S,_t(404,{pathname:ce}),{flushSync:V});return}let{path:$,submission:G,error:ve}=Sd(C.v7_normalizeFormMethod,!0,ce,A);if(ve){Ft(y,S,ve,{flushSync:V});return}let Ce=er(X,$),it=(A&&A.preventScrollReset)===!0;if(G&&eo(G.formMethod)){ft(y,S,$,Ce,X,ee.active,V,it,G);return}de.set(y,{routeId:S,path:$}),An(y,S,$,Ce,X,ee.active,V,it,G)}async function ft(y,S,_,A,V,ne,ce,X,ee){dn(),de.delete(y);function $(Ae){if(!Ae.route.action&&!Ae.route.lazy){let Oo=_t(405,{method:ee.formMethod,pathname:_,routeId:S});return Ft(y,S,Oo,{flushSync:ce}),!0}return!1}if(!ne&&$(A))return;let G=E.fetchers.get(y);Nt(y,Ph(ee,G),{flushSync:ce});let ve=new AbortController,Ce=sa(a.history,_,ve.signal,ee);if(ne){let Ae=await Io(V,new URL(Ce.url).pathname,Ce.signal,y);if(Ae.type==="aborted")return;if(Ae.type==="error"){Ft(y,S,Ae.error,{flushSync:ce});return}else if(Ae.matches){if(V=Ae.matches,A=er(V,_),$(A))return}else{Ft(y,S,_t(404,{pathname:_}),{flushSync:ce});return}}B.set(y,ve);let it=ae,_e=(await Ao("action",E,Ce,[A],V,y))[A.route.id];if(Ce.signal.aborted){B.get(y)===ve&&B.delete(y);return}if(C.v7_fetcherPersist&&me.has(y)){if(Tn(_e)||Ot(_e)){Nt(y,an(void 0));return}}else{if(Tn(_e))if(B.delete(y),Y>it){Nt(y,an(void 0));return}else return N.add(y),Nt(y,Xa(ee)),to(Ce,_e,!1,{fetcherSubmission:ee,preventScrollReset:X});if(Ot(_e)){Ft(y,S,_e.error);return}}if(rn(_e))throw _t(400,{type:"defer-action"});let Ye=E.navigation.location||E.location,go=sa(a.history,Ye,ve.signal),gn=m||f,Kt=E.navigation.state!=="idle"?En(gn,E.navigation.location,h):E.matches;be(Kt,"Didn't find any matches after fetcher action");let Le=++ae;k.set(y,Le);let ma=Xa(ee,_e.data);E.fetchers.set(y,ma);let[ho,ro]=xd(a.history,E,Kt,ee,Ye,!1,C.v7_skipActionErrorRevalidation,Ze,et,Ie,me,de,N,gn,h,[A.route.id,_e]);ro.filter(Ae=>Ae.key!==y).forEach(Ae=>{let Oo=Ae.key,dr=E.fetchers.get(Oo),_i=Xa(void 0,dr?dr.data:void 0);E.fetchers.set(Oo,_i),qt(Oo),Ae.controller&&B.set(Oo,Ae.controller)}),tt({fetchers:new Map(E.fetchers)});let mo=()=>ro.forEach(Ae=>qt(Ae.key));ve.signal.addEventListener("abort",mo);let{loaderResults:On,fetcherResults:je}=await da(E,Kt,ho,ro,go);if(ve.signal.aborted)return;ve.signal.removeEventListener("abort",mo),k.delete(y),B.delete(y),ro.forEach(Ae=>B.delete(Ae.key));let He=mi(On);if(He)return to(go,He.result,!1,{preventScrollReset:X});if(He=mi(je),He)return N.add(He.key),to(go,He.result,!1,{preventScrollReset:X});let{loaderData:gt,errors:hn}=_d(E,Kt,On,void 0,ro,je,Pe);if(E.fetchers.has(y)){let Ae=an(_e.data);E.fetchers.set(y,Ae)}Dn(Le),E.navigation.state==="loading"&&Le>Y?(be(J,"Expected pending action"),ie&&ie.abort(),Tt(E.navigation.location,{matches:Kt,loaderData:gt,errors:hn,fetchers:new Map(E.fetchers)})):(tt({errors:hn,loaderData:Td(E.loaderData,gt,Kt,hn),fetchers:new Map(E.fetchers)}),Ze=!1)}async function An(y,S,_,A,V,ne,ce,X,ee){let $=E.fetchers.get(y);Nt(y,Xa(ee,$?$.data:void 0),{flushSync:ce});let G=new AbortController,ve=sa(a.history,_,G.signal);if(ne){let _e=await Io(V,new URL(ve.url).pathname,ve.signal,y);if(_e.type==="aborted")return;if(_e.type==="error"){Ft(y,S,_e.error,{flushSync:ce});return}else if(_e.matches)V=_e.matches,A=er(V,_);else{Ft(y,S,_t(404,{pathname:_}),{flushSync:ce});return}}B.set(y,G);let Ce=ae,Oe=(await Ao("loader",E,ve,[A],V,y))[A.route.id];if(rn(Oe)&&(Oe=await Nl(Oe,ve.signal,!0)||Oe),B.get(y)===G&&B.delete(y),!ve.signal.aborted){if(me.has(y)){Nt(y,an(void 0));return}if(Tn(Oe))if(Y>Ce){Nt(y,an(void 0));return}else{N.add(y),await to(ve,Oe,!1,{preventScrollReset:X});return}if(Ot(Oe)){Ft(y,S,Oe.error);return}be(!rn(Oe),"Unhandled fetcher deferred data"),Nt(y,an(Oe.data))}}async function to(y,S,_,A){let{submission:V,fetcherSubmission:ne,preventScrollReset:ce,replace:X}=A===void 0?{}:A;S.response.headers.has("X-Remix-Revalidate")&&(Ze=!0);let ee=S.response.headers.get("Location");be(ee,"Expected a Location header on the redirect Response"),ee=jd(ee,new URL(y.url),h,a.history);let $=tr(E.location,ee,{_isRedirect:!0});if(s){let _e=!1;if(S.response.headers.has("X-Remix-Reload-Document"))_e=!0;else if(Ml.test(ee)){const Ye=a.history.createURL(ee);_e=Ye.origin!==i.location.origin||Eo(Ye.pathname,h)==null}if(_e){X?i.location.replace(ee):i.location.assign(ee);return}}ie=null;let G=X===!0||S.response.headers.has("X-Remix-Replace")?rt.Replace:rt.Push,{formMethod:ve,formAction:Ce,formEncType:it}=E.navigation;!V&&!ne&&ve&&Ce&&it&&(V=Ad(E.navigation));let Oe=V||ne;if(Zg.has(S.response.status)&&Oe&&eo(Oe.formMethod))await Mt(G,$,{submission:Qe({},Oe,{formAction:ee}),preventScrollReset:ce||ke,enableViewTransition:_?We:void 0});else{let _e=ml($,V);await Mt(G,$,{overrideNavigation:_e,fetcherSubmission:ne,preventScrollReset:ce||ke,enableViewTransition:_?We:void 0})}}async function Ao(y,S,_,A,V,ne){let ce,X={};try{ce=await sh(P,y,S,_,A,V,ne,p,d)}catch(ee){return A.forEach($=>{X[$.route.id]={type:Be.error,error:ee}}),X}for(let[ee,$]of Object.entries(ce))if(fh($)){let G=$.result;X[ee]={type:Be.redirect,response:uh(G,_,ee,V,h,C.v7_relativeSplatPath)}}else X[ee]=await ch($);return X}async function da(y,S,_,A,V){let ne=y.matches,ce=Ao("loader",y,V,_,S,null),X=Promise.all(A.map(async G=>{if(G.matches&&G.match&&G.controller){let Ce=(await Ao("loader",y,sa(a.history,G.path,G.controller.signal),[G.match],G.matches,G.key))[G.match.route.id];return{[G.key]:Ce}}else return Promise.resolve({[G.key]:{type:Be.error,error:_t(404,{pathname:G.path})}})})),ee=await ce,$=(await X).reduce((G,ve)=>Object.assign(G,ve),{});return await Promise.all([mh(S,ee,V.signal,ne,y.loaderData),yh(S,$,A)]),{loaderResults:ee,fetcherResults:$}}function dn(){Ze=!0,et.push(...ao()),de.forEach((y,S)=>{B.has(S)&&Ie.add(S),qt(S)})}function Nt(y,S,_){_===void 0&&(_={}),E.fetchers.set(y,S),tt({fetchers:new Map(E.fetchers)},{flushSync:(_&&_.flushSync)===!0})}function Ft(y,S,_,A){A===void 0&&(A={});let V=_n(E.matches,S);oo(y),tt({errors:{[V.route.id]:_},fetchers:new Map(E.fetchers)},{flushSync:(A&&A.flushSync)===!0})}function Do(y){return ye.set(y,(ye.get(y)||0)+1),me.has(y)&&me.delete(y),E.fetchers.get(y)||eh}function oo(y){let S=E.fetchers.get(y);B.has(y)&&!(S&&S.state==="loading"&&k.has(y))&&qt(y),de.delete(y),k.delete(y),N.delete(y),C.v7_fetcherPersist&&me.delete(y),Ie.delete(y),E.fetchers.delete(y)}function Ei(y){let S=(ye.get(y)||0)-1;S<=0?(ye.delete(y),me.add(y),C.v7_fetcherPersist||oo(y)):ye.set(y,S),tt({fetchers:new Map(E.fetchers)})}function qt(y){let S=B.get(y);S&&(S.abort(),B.delete(y))}function pa(y){for(let S of y){let _=Do(S),A=an(_.data);E.fetchers.set(S,A)}}function sr(){let y=[],S=!1;for(let _ of N){let A=E.fetchers.get(_);be(A,"Expected fetcher: "+_),A.state==="loading"&&(N.delete(_),y.push(_),S=!0)}return pa(y),S}function Dn(y){let S=[];for(let[_,A]of k)if(A<y){let V=E.fetchers.get(_);be(V,"Expected fetcher: "+_),V.state==="loading"&&(qt(_),k.delete(_),S.push(_))}return pa(S),S.length>0}function fa(y,S){let _=E.blockers.get(y)||Ja;return Re.get(y)!==S&&Re.set(y,S),_}function zn(y){E.blockers.delete(y),Re.delete(y)}function zo(y,S){let _=E.blockers.get(y)||Ja;be(_.state==="unblocked"&&S.state==="blocked"||_.state==="blocked"&&S.state==="blocked"||_.state==="blocked"&&S.state==="proceeding"||_.state==="blocked"&&S.state==="unblocked"||_.state==="proceeding"&&S.state==="unblocked","Invalid blocker state transition: "+_.state+" -> "+S.state);let A=new Map(E.blockers);A.set(y,S),tt({blockers:A})}function In(y){let{currentLocation:S,nextLocation:_,historyAction:A}=y;if(Re.size===0)return;Re.size>1&&sn(!1,"A router only supports one blocker at a time");let V=Array.from(Re.entries()),[ne,ce]=V[V.length-1],X=E.blockers.get(ne);if(!(X&&X.state==="proceeding")&&ce({currentLocation:S,nextLocation:_,historyAction:A}))return ne}function no(y){let S=_t(404,{pathname:y}),_=m||f,{matches:A,route:V}=Nd(_);return ao(),{notFoundMatches:A,route:V,error:S}}function ao(y){let S=[];return Pe.forEach((_,A)=>{(!y||y(A))&&(_.cancel(),S.push(A),Pe.delete(A))}),S}function lr(y,S,_){if(H=y,U=S,F=_||null,!ge&&E.navigation===hl){ge=!0;let A=ha(E.location,E.matches);A!=null&&tt({restoreScrollPosition:A})}return()=>{H=null,U=null,F=null}}function ga(y,S){return F&&F(y,S.map(A=>Tg(A,E.loaderData)))||y.key}function cr(y,S){if(H&&U){let _=ga(y,S);H[_]=U()}}function ha(y,S){if(H){let _=ga(y,S),A=H[_];if(typeof A=="number")return A}return null}function pn(y,S,_){if(x)if(y){if(Object.keys(y[0].params).length>0)return{active:!0,matches:wi(S,_,h,!0)}}else return{active:!0,matches:wi(S,_,h,!0)||[]};return{active:!1,matches:null}}async function Io(y,S,_,A){if(!x)return{type:"success",matches:y};let V=y;for(;;){let ne=m==null,ce=m||f,X=p;try{await x({signal:_,path:S,matches:V,fetcherKey:A,patch:(G,ve)=>{_.aborted||Rd(G,ve,ce,X,d)}})}catch(G){return{type:"error",error:G,partialMatches:V}}finally{ne&&!_.aborted&&(f=[...f])}if(_.aborted)return{type:"aborted"};let ee=En(ce,S,h);if(ee)return{type:"success",matches:ee};let $=wi(ce,S,h,!0);if(!$||V.length===$.length&&V.every((G,ve)=>G.route.id===$[ve].route.id))return{type:"success",matches:null};V=$}}function ur(y){p={},m=Si(y,d,void 0,p)}function fn(y,S){let _=m==null;Rd(y,S,m||f,p,d),_&&(f=[...f],tt({}))}return Ee={get basename(){return h},get future(){return C},get state(){return E},get routes(){return f},get window(){return i},initialize:Ue,subscribe:Mo,enableScrollRestoration:lr,navigate:No,fetch:Ge,revalidate:Ln,createHref:y=>a.history.createHref(y),encodeLocation:y=>a.history.encodeLocation(y),getFetcher:Do,deleteFetcher:Ei,dispose:ct,getBlocker:fa,deleteBlocker:zn,patchRoutes:fn,_internalFetchControllers:B,_internalActiveDeferreds:Pe,_internalSetRoutes:ur},Ee}function nh(a){return a!=null&&("formData"in a&&a.formData!=null||"body"in a&&a.body!==void 0)}function Sl(a,i,s,c,d,p,f,m){let h,P;if(f){h=[];for(let C of i)if(h.push(C),C.route.id===f){P=C;break}}else h=i,P=i[i.length-1];let x=Tl(d||".",_l(h,p),Eo(a.pathname,s)||a.pathname,m==="path");if(d==null&&(x.search=a.search,x.hash=a.hash),(d==null||d===""||d===".")&&P){let C=Ll(x.search);if(P.route.index&&!C)x.search=x.search?x.search.replace(/^\?/,"?index&"):"?index";else if(!P.route.index&&C){let M=new URLSearchParams(x.search),O=M.getAll("index");M.delete("index"),O.filter(F=>F).forEach(F=>M.append("index",F));let H=M.toString();x.search=H?"?"+H:""}}return c&&s!=="/"&&(x.pathname=x.pathname==="/"?s:jo([s,x.pathname])),Nn(x)}function Sd(a,i,s,c){if(!c||!nh(c))return{path:s};if(c.formMethod&&!hh(c.formMethod))return{path:s,error:_t(405,{method:c.formMethod})};let d=()=>({path:s,error:_t(400,{type:"invalid-body"})}),p=c.formMethod||"get",f=a?p.toUpperCase():p.toLowerCase(),m=sp(s);if(c.body!==void 0){if(c.formEncType==="text/plain"){if(!eo(f))return d();let M=typeof c.body=="string"?c.body:c.body instanceof FormData||c.body instanceof URLSearchParams?Array.from(c.body.entries()).reduce((O,H)=>{let[F,U]=H;return""+O+F+"="+U+`
51
- `},""):String(c.body);return{path:s,submission:{formMethod:f,formAction:m,formEncType:c.formEncType,formData:void 0,json:void 0,text:M}}}else if(c.formEncType==="application/json"){if(!eo(f))return d();try{let M=typeof c.body=="string"?JSON.parse(c.body):c.body;return{path:s,submission:{formMethod:f,formAction:m,formEncType:c.formEncType,formData:void 0,json:M,text:void 0}}}catch{return d()}}}be(typeof FormData=="function","FormData is not available in this environment");let h,P;if(c.formData)h=xl(c.formData),P=c.formData;else if(c.body instanceof FormData)h=xl(c.body),P=c.body;else if(c.body instanceof URLSearchParams)h=c.body,P=Ed(h);else if(c.body==null)h=new URLSearchParams,P=new FormData;else try{h=new URLSearchParams(c.body),P=Ed(h)}catch{return d()}let x={formMethod:f,formAction:m,formEncType:c&&c.formEncType||"application/x-www-form-urlencoded",formData:P,json:void 0,text:void 0};if(eo(x.formMethod))return{path:s,submission:x};let C=_o(s);return i&&C.search&&Ll(C.search)&&h.append("index",""),C.search="?"+h,{path:Nn(C),submission:x}}function bd(a,i,s){s===void 0&&(s=!1);let c=a.findIndex(d=>d.route.id===i);return c>=0?a.slice(0,s?c+1:c):a}function xd(a,i,s,c,d,p,f,m,h,P,x,C,M,O,H,F){let U=F?Ot(F[1])?F[1].error:F[1].data:void 0,ge=a.createURL(i.location),q=a.createURL(d),ue=s;p&&i.errors?ue=bd(s,Object.keys(i.errors)[0],!0):F&&Ot(F[1])&&(ue=bd(s,F[0]));let re=F?F[1].statusCode:void 0,xe=f&&re&&re>=400,Ee=ue.filter((J,ke)=>{let{route:ie}=J;if(ie.lazy)return!0;if(ie.loader==null)return!1;if(p)return bl(ie,i.loaderData,i.errors);if(ah(i.loaderData,i.matches[ke],J)||h.some(ze=>ze===J.route.id))return!0;let We=i.matches[ke],Te=J;return Cd(J,Qe({currentUrl:ge,currentParams:We.params,nextUrl:q,nextParams:Te.params},c,{actionResult:U,actionStatus:re,defaultShouldRevalidate:xe?!1:m||ge.pathname+ge.search===q.pathname+q.search||ge.search!==q.search||rp(We,Te)}))}),E=[];return C.forEach((J,ke)=>{if(p||!s.some(he=>he.route.id===J.routeId)||x.has(ke))return;let ie=En(O,J.path,H);if(!ie){E.push({key:ke,routeId:J.routeId,path:J.path,matches:null,match:null,controller:null});return}let We=i.fetchers.get(ke),Te=er(ie,J.path),ze=!1;M.has(ke)?ze=!1:P.has(ke)?(P.delete(ke),ze=!0):We&&We.state!=="idle"&&We.data===void 0?ze=m:ze=Cd(Te,Qe({currentUrl:ge,currentParams:i.matches[i.matches.length-1].params,nextUrl:q,nextParams:s[s.length-1].params},c,{actionResult:U,actionStatus:re,defaultShouldRevalidate:xe?!1:m})),ze&&E.push({key:ke,routeId:J.routeId,path:J.path,matches:ie,match:Te,controller:new AbortController})}),[Ee,E]}function bl(a,i,s){if(a.lazy)return!0;if(!a.loader)return!1;let c=i!=null&&i[a.id]!==void 0,d=s!=null&&s[a.id]!==void 0;return!c&&d?!1:typeof a.loader=="function"&&a.loader.hydrate===!0?!0:!c&&!d}function ah(a,i,s){let c=!i||s.route.id!==i.route.id,d=a[s.route.id]===void 0;return c||d}function rp(a,i){let s=a.route.path;return a.pathname!==i.pathname||s!=null&&s.endsWith("*")&&a.params["*"]!==i.params["*"]}function Cd(a,i){if(a.route.shouldRevalidate){let s=a.route.shouldRevalidate(i);if(typeof s=="boolean")return s}return i.defaultShouldRevalidate}function Rd(a,i,s,c,d){var p;let f;if(a){let P=c[a];be(P,"No route found to patch children into: routeId = "+a),P.children||(P.children=[]),f=P.children}else f=s;let m=i.filter(P=>!f.some(x=>ip(P,x))),h=Si(m,d,[a||"_","patch",String(((p=f)==null?void 0:p.length)||"0")],c);f.push(...h)}function ip(a,i){return"id"in a&&"id"in i&&a.id===i.id?!0:a.index===i.index&&a.path===i.path&&a.caseSensitive===i.caseSensitive?(!a.children||a.children.length===0)&&(!i.children||i.children.length===0)?!0:a.children.every((s,c)=>{var d;return(d=i.children)==null?void 0:d.some(p=>ip(s,p))}):!1}async function rh(a,i,s){if(!a.lazy)return;let c=await a.lazy();if(!a.lazy)return;let d=s[a.id];be(d,"No route found in manifest");let p={};for(let f in c){let h=d[f]!==void 0&&f!=="hasErrorBoundary";sn(!h,'Route "'+d.id+'" has a static property "'+f+'" defined but its lazy function is also returning a value for this property. '+('The lazy route property "'+f+'" will be ignored.')),!h&&!Eg.has(f)&&(p[f]=c[f])}Object.assign(d,p),Object.assign(d,Qe({},i(d),{lazy:void 0}))}async function ih(a){let{matches:i}=a,s=i.filter(d=>d.shouldLoad);return(await Promise.all(s.map(d=>d.resolve()))).reduce((d,p,f)=>Object.assign(d,{[s[f].route.id]:p}),{})}async function sh(a,i,s,c,d,p,f,m,h,P){let x=p.map(O=>O.route.lazy?rh(O.route,h,m):void 0),C=p.map((O,H)=>{let F=x[H],U=d.some(q=>q.route.id===O.route.id);return Qe({},O,{shouldLoad:U,resolve:async q=>(q&&c.method==="GET"&&(O.route.lazy||O.route.loader)&&(U=!0),U?lh(i,c,O,F,q,P):Promise.resolve({type:Be.data,result:void 0}))})}),M=await a({matches:C,request:c,params:p[0].params,fetcherKey:f,context:P});try{await Promise.all(x)}catch{}return M}async function lh(a,i,s,c,d,p){let f,m,h=P=>{let x,C=new Promise((H,F)=>x=F);m=()=>x(),i.signal.addEventListener("abort",m);let M=H=>typeof P!="function"?Promise.reject(new Error("You cannot call the handler for a route which defines a boolean "+('"'+a+'" [routeId: '+s.route.id+"]"))):P({request:i,params:s.params,context:p},...H!==void 0?[H]:[]),O=(async()=>{try{return{type:"data",result:await(d?d(F=>M(F)):M())}}catch(H){return{type:"error",result:H}}})();return Promise.race([O,C])};try{let P=s.route[a];if(c)if(P){let x,[C]=await Promise.all([h(P).catch(M=>{x=M}),c]);if(x!==void 0)throw x;f=C}else if(await c,P=s.route[a],P)f=await h(P);else if(a==="action"){let x=new URL(i.url),C=x.pathname+x.search;throw _t(405,{method:i.method,pathname:C,routeId:s.route.id})}else return{type:Be.data,result:void 0};else if(P)f=await h(P);else{let x=new URL(i.url),C=x.pathname+x.search;throw _t(404,{pathname:C})}be(f.result!==void 0,"You defined "+(a==="action"?"an action":"a loader")+" for route "+('"'+s.route.id+"\" but didn't return anything from your `"+a+"` ")+"function. Please return a value or `null`.")}catch(P){return{type:Be.error,result:P}}finally{m&&i.signal.removeEventListener("abort",m)}return f}async function ch(a){let{result:i,type:s}=a;if(lp(i)){let C;try{let M=i.headers.get("Content-Type");M&&/\bapplication\/json\b/.test(M)?i.body==null?C=null:C=await i.json():C=await i.text()}catch(M){return{type:Be.error,error:M}}return s===Be.error?{type:Be.error,error:new xi(i.status,i.statusText,C),statusCode:i.status,headers:i.headers}:{type:Be.data,data:C,statusCode:i.status,headers:i.headers}}if(s===Be.error){if(Ld(i)){var c,d;if(i.data instanceof Error){var p,f;return{type:Be.error,error:i.data,statusCode:(p=i.init)==null?void 0:p.status,headers:(f=i.init)!=null&&f.headers?new Headers(i.init.headers):void 0}}return{type:Be.error,error:new xi(((c=i.init)==null?void 0:c.status)||500,void 0,i.data),statusCode:or(i)?i.status:void 0,headers:(d=i.init)!=null&&d.headers?new Headers(i.init.headers):void 0}}return{type:Be.error,error:i,statusCode:or(i)?i.status:void 0}}if(gh(i)){var m,h;return{type:Be.deferred,deferredData:i,statusCode:(m=i.init)==null?void 0:m.status,headers:((h=i.init)==null?void 0:h.headers)&&new Headers(i.init.headers)}}if(Ld(i)){var P,x;return{type:Be.data,data:i.data,statusCode:(P=i.init)==null?void 0:P.status,headers:(x=i.init)!=null&&x.headers?new Headers(i.init.headers):void 0}}return{type:Be.data,data:i}}function uh(a,i,s,c,d,p){let f=a.headers.get("Location");if(be(f,"Redirects returned/thrown from loaders/actions must have a Location header"),!Ml.test(f)){let m=c.slice(0,c.findIndex(h=>h.route.id===s)+1);f=Sl(new URL(i.url),m,d,!0,f,p),a.headers.set("Location",f)}return a}function jd(a,i,s,c){let d=["about:","blob:","chrome:","chrome-untrusted:","content:","data:","devtools:","file:","filesystem:","javascript:"];if(Ml.test(a)){let p=a,f=p.startsWith("//")?new URL(i.protocol+p):new URL(p);if(d.includes(f.protocol))throw new Error("Invalid redirect location");let m=Eo(f.pathname,s)!=null;if(f.origin===i.origin&&m)return f.pathname+f.search+f.hash}try{let p=c.createURL(a);if(d.includes(p.protocol))throw new Error("Invalid redirect location")}catch{}return a}function sa(a,i,s,c){let d=a.createURL(sp(i)).toString(),p={signal:s};if(c&&eo(c.formMethod)){let{formMethod:f,formEncType:m}=c;p.method=f.toUpperCase(),m==="application/json"?(p.headers=new Headers({"Content-Type":m}),p.body=JSON.stringify(c.json)):m==="text/plain"?p.body=c.text:m==="application/x-www-form-urlencoded"&&c.formData?p.body=xl(c.formData):p.body=c.formData}return new Request(d,p)}function xl(a){let i=new URLSearchParams;for(let[s,c]of a.entries())i.append(s,typeof c=="string"?c:c.name);return i}function Ed(a){let i=new FormData;for(let[s,c]of a.entries())i.append(s,c);return i}function dh(a,i,s,c,d){let p={},f=null,m,h=!1,P={},x=s&&Ot(s[1])?s[1].error:void 0;return a.forEach(C=>{if(!(C.route.id in i))return;let M=C.route.id,O=i[M];if(be(!Tn(O),"Cannot handle redirect results in processLoaderData"),Ot(O)){let H=O.error;x!==void 0&&(H=x,x=void 0),f=f||{};{let F=_n(a,M);f[F.route.id]==null&&(f[F.route.id]=H)}p[M]=void 0,h||(h=!0,m=or(O.error)?O.error.status:500),O.headers&&(P[M]=O.headers)}else rn(O)?(c.set(M,O.deferredData),p[M]=O.deferredData.data,O.statusCode!=null&&O.statusCode!==200&&!h&&(m=O.statusCode),O.headers&&(P[M]=O.headers)):(p[M]=O.data,O.statusCode&&O.statusCode!==200&&!h&&(m=O.statusCode),O.headers&&(P[M]=O.headers))}),x!==void 0&&s&&(f={[s[0]]:x},p[s[0]]=void 0),{loaderData:p,errors:f,statusCode:m||200,loaderHeaders:P}}function _d(a,i,s,c,d,p,f){let{loaderData:m,errors:h}=dh(i,s,c,f);return d.forEach(P=>{let{key:x,match:C,controller:M}=P,O=p[x];if(be(O,"Did not find corresponding fetcher result"),!(M&&M.signal.aborted))if(Ot(O)){let H=_n(a.matches,C==null?void 0:C.route.id);h&&h[H.route.id]||(h=Qe({},h,{[H.route.id]:O.error})),a.fetchers.delete(x)}else if(Tn(O))be(!1,"Unhandled fetcher revalidation redirect");else if(rn(O))be(!1,"Unhandled fetcher deferred data");else{let H=an(O.data);a.fetchers.set(x,H)}}),{loaderData:m,errors:h}}function Td(a,i,s,c){let d=Qe({},i);for(let p of s){let f=p.route.id;if(i.hasOwnProperty(f)?i[f]!==void 0&&(d[f]=i[f]):a[f]!==void 0&&p.route.loader&&(d[f]=a[f]),c&&c.hasOwnProperty(f))break}return d}function Md(a){return a?Ot(a[1])?{actionData:{}}:{actionData:{[a[0]]:a[1].data}}:{}}function _n(a,i){return(i?a.slice(0,a.findIndex(c=>c.route.id===i)+1):[...a]).reverse().find(c=>c.route.hasErrorBoundary===!0)||a[0]}function Nd(a){let i=a.length===1?a[0]:a.find(s=>s.index||!s.path||s.path==="/")||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:i}],route:i}}function _t(a,i){let{pathname:s,routeId:c,method:d,type:p,message:f}=i===void 0?{}:i,m="Unknown Server Error",h="Unknown @remix-run/router error";return a===400?(m="Bad Request",d&&s&&c?h="You made a "+d+' request to "'+s+'" but '+('did not provide a `loader` for route "'+c+'", ')+"so there is no way to handle the request.":p==="defer-action"?h="defer() is not supported in actions":p==="invalid-body"&&(h="Unable to encode submission body")):a===403?(m="Forbidden",h='Route "'+c+'" does not match URL "'+s+'"'):a===404?(m="Not Found",h='No route matches URL "'+s+'"'):a===405&&(m="Method Not Allowed",d&&s&&c?h="You made a "+d.toUpperCase()+' request to "'+s+'" but '+('did not provide an `action` for route "'+c+'", ')+"so there is no way to handle the request.":d&&(h='Invalid request method "'+d.toUpperCase()+'"')),new xi(a||500,m,new Error(h),!0)}function mi(a){let i=Object.entries(a);for(let s=i.length-1;s>=0;s--){let[c,d]=i[s];if(Tn(d))return{key:c,result:d}}}function sp(a){let i=typeof a=="string"?_o(a):a;return Nn(Qe({},i,{hash:""}))}function ph(a,i){return a.pathname!==i.pathname||a.search!==i.search?!1:a.hash===""?i.hash!=="":a.hash===i.hash?!0:i.hash!==""}function fh(a){return lp(a.result)&&Xg.has(a.result.status)}function rn(a){return a.type===Be.deferred}function Ot(a){return a.type===Be.error}function Tn(a){return(a&&a.type)===Be.redirect}function Ld(a){return typeof a=="object"&&a!=null&&"type"in a&&"data"in a&&"init"in a&&a.type==="DataWithResponseInit"}function gh(a){let i=a;return i&&typeof i=="object"&&typeof i.data=="object"&&typeof i.subscribe=="function"&&typeof i.cancel=="function"&&typeof i.resolveData=="function"}function lp(a){return a!=null&&typeof a.status=="number"&&typeof a.statusText=="string"&&typeof a.headers=="object"&&typeof a.body<"u"}function hh(a){return Jg.has(a.toLowerCase())}function eo(a){return Qg.has(a.toLowerCase())}async function mh(a,i,s,c,d){let p=Object.entries(i);for(let f=0;f<p.length;f++){let[m,h]=p[f],P=a.find(M=>(M==null?void 0:M.route.id)===m);if(!P)continue;let x=c.find(M=>M.route.id===P.route.id),C=x!=null&&!rp(x,P)&&(d&&d[P.route.id])!==void 0;rn(h)&&C&&await Nl(h,s,!1).then(M=>{M&&(i[m]=M)})}}async function yh(a,i,s){for(let c=0;c<s.length;c++){let{key:d,routeId:p,controller:f}=s[c],m=i[d];a.find(P=>(P==null?void 0:P.route.id)===p)&&rn(m)&&(be(f,"Expected an AbortController for revalidating fetcher deferred result"),await Nl(m,f.signal,!0).then(P=>{P&&(i[d]=P)}))}}async function Nl(a,i,s){if(s===void 0&&(s=!1),!await a.deferredData.resolveData(i)){if(s)try{return{type:Be.data,data:a.deferredData.unwrappedData}}catch(d){return{type:Be.error,error:d}}return{type:Be.data,data:a.deferredData.data}}}function Ll(a){return new URLSearchParams(a).getAll("index").some(i=>i==="")}function er(a,i){let s=typeof i=="string"?_o(i).search:i.search;if(a[a.length-1].route.index&&Ll(s||""))return a[a.length-1];let c=op(a);return c[c.length-1]}function Ad(a){let{formMethod:i,formAction:s,formEncType:c,text:d,formData:p,json:f}=a;if(!(!i||!s||!c)){if(d!=null)return{formMethod:i,formAction:s,formEncType:c,formData:void 0,json:void 0,text:d};if(p!=null)return{formMethod:i,formAction:s,formEncType:c,formData:p,json:void 0,text:void 0};if(f!==void 0)return{formMethod:i,formAction:s,formEncType:c,formData:void 0,json:f,text:void 0}}}function ml(a,i){return i?{state:"loading",location:a,formMethod:i.formMethod,formAction:i.formAction,formEncType:i.formEncType,formData:i.formData,json:i.json,text:i.text}:{state:"loading",location:a,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function vh(a,i){return{state:"submitting",location:a,formMethod:i.formMethod,formAction:i.formAction,formEncType:i.formEncType,formData:i.formData,json:i.json,text:i.text}}function Xa(a,i){return a?{state:"loading",formMethod:a.formMethod,formAction:a.formAction,formEncType:a.formEncType,formData:a.formData,json:a.json,text:a.text,data:i}:{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:i}}function Ph(a,i){return{state:"submitting",formMethod:a.formMethod,formAction:a.formAction,formEncType:a.formEncType,formData:a.formData,json:a.json,text:a.text,data:i?i.data:void 0}}function an(a){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:a}}function wh(a,i){try{let s=a.sessionStorage.getItem(ap);if(s){let c=JSON.parse(s);for(let[d,p]of Object.entries(c||{}))p&&Array.isArray(p)&&i.set(d,new Set(p||[]))}}catch{}}function kh(a,i){if(i.size>0){let s={};for(let[c,d]of i)s[c]=[...d];try{a.sessionStorage.setItem(ap,JSON.stringify(s))}catch(c){sn(!1,"Failed to save applied view transitions in sessionStorage ("+c+").")}}}/**
50
+ */function Ge(){return Ge=Object.assign?Object.assign.bind():function(a){for(var i=1;i<arguments.length;i++){var s=arguments[i];for(var c in s)Object.prototype.hasOwnProperty.call(s,c)&&(a[c]=s[c])}return a},Ge.apply(this,arguments)}var rt;(function(a){a.Pop="POP",a.Push="PUSH",a.Replace="REPLACE"})(rt||(rt={}));const vd="popstate";function Rf(a){a===void 0&&(a={});function i(d,p){let{pathname:g="/",search:m="",hash:h=""}=_n(d.location.hash.substr(1));return!g.startsWith("/")&&!g.startsWith(".")&&(g="/"+g),tr("",{pathname:g,search:m,hash:h},p.state&&p.state.usr||null,p.state&&p.state.key||"default")}function s(d,p){let g=d.document.querySelector("base"),m="";if(g&&g.getAttribute("href")){let h=d.location.href,P=h.indexOf("#");m=P===-1?h:h.slice(0,P)}return m+"#"+(typeof p=="string"?p:Mo(p))}function c(d,p){io(d.pathname.charAt(0)==="/","relative pathnames are not supported in hash history.push("+JSON.stringify(p)+")")}return Ef(i,s,c,a)}function be(a,i){if(a===!1||a===null||typeof a>"u")throw new Error(i)}function io(a,i){if(!a){typeof console<"u"&&console.warn(i);try{throw new Error(i)}catch{}}}function Cf(){return Math.random().toString(36).substr(2,8)}function Pd(a,i){return{usr:a.state,key:a.key,idx:i}}function tr(a,i,s,c){return s===void 0&&(s=null),Ge({pathname:typeof a=="string"?a:a.pathname,search:"",hash:""},typeof i=="string"?_n(i):i,{state:s,key:i&&i.key||c||Cf()})}function Mo(a){let{pathname:i="/",search:s="",hash:c=""}=a;return s&&s!=="?"&&(i+=s.charAt(0)==="?"?s:"?"+s),c&&c!=="#"&&(i+=c.charAt(0)==="#"?c:"#"+c),i}function _n(a){let i={};if(a){let s=a.indexOf("#");s>=0&&(i.hash=a.substr(s),a=a.substr(0,s));let c=a.indexOf("?");c>=0&&(i.search=a.substr(c),a=a.substr(0,c)),a&&(i.pathname=a)}return i}function Ef(a,i,s,c){c===void 0&&(c={});let{window:d=document.defaultView,v5Compat:p=!1}=c,g=d.history,m=rt.Pop,h=null,P=x();P==null&&(P=0,g.replaceState(Ge({},g.state,{idx:P}),""));function x(){return(g.state||{idx:null}).idx}function R(){m=rt.Pop;let U=x(),fe=U==null?null:U-P;P=U,h&&h({action:m,location:B.location,delta:fe})}function A(U,fe){m=rt.Push;let q=tr(B.location,U,fe);s&&s(q,U),P=x()+1;let ue=Pd(q,P),re=B.createHref(q);try{g.pushState(ue,"",re)}catch(xe){if(xe instanceof DOMException&&xe.name==="DataCloneError")throw xe;d.location.assign(re)}p&&h&&h({action:m,location:B.location,delta:1})}function O(U,fe){m=rt.Replace;let q=tr(B.location,U,fe);s&&s(q,U),P=x();let ue=Pd(q,P),re=B.createHref(q);g.replaceState(ue,"",re),p&&h&&h({action:m,location:B.location,delta:0})}function V(U){let fe=d.location.origin!=="null"?d.location.origin:d.location.href,q=typeof U=="string"?U:Mo(U);return q=q.replace(/ $/,"%20"),be(fe,"No window.location.(origin|href) available to create URL for href: "+q),new URL(q,fe)}let B={get action(){return m},get location(){return a(d,g)},listen(U){if(h)throw new Error("A history only accepts one active listener");return d.addEventListener(vd,R),h=U,()=>{d.removeEventListener(vd,R),h=null}},createHref(U){return i(d,U)},createURL:V,encodeLocation(U){let fe=V(U);return{pathname:fe.pathname,search:fe.search,hash:fe.hash}},push:A,replace:O,go(U){return g.go(U)}};return B}var We;(function(a){a.data="data",a.deferred="deferred",a.redirect="redirect",a.error="error"})(We||(We={}));const jf=new Set(["lazy","caseSensitive","path","id","index","children"]);function _f(a){return a.index===!0}function ki(a,i,s,c){return s===void 0&&(s=[]),c===void 0&&(c={}),a.map((d,p)=>{let g=[...s,String(p)],m=typeof d.id=="string"?d.id:g.join("-");if(be(d.index!==!0||!d.children,"Cannot specify children on an index route"),be(!c[m],'Found a route id collision on id "'+m+`". Route id's must be globally unique within Data Router usages`),_f(d)){let h=Ge({},d,i(d),{id:m});return c[m]=h,h}else{let h=Ge({},d,i(d),{id:m,children:void 0});return c[m]=h,d.children&&(h.children=ki(d.children,i,g,c)),h}})}function jo(a,i,s){return s===void 0&&(s="/"),wi(a,i,s,!1)}function wi(a,i,s,c){let d=typeof i=="string"?_n(i):i,p=jn(d.pathname||"/",s);if(p==null)return null;let g=ep(a);Af(g);let m=null;for(let h=0;m==null&&h<g.length;++h){let P=Uf(p);m=Wf(g[h],P,c)}return m}function Tf(a,i){let{route:s,pathname:c,params:d}=a;return{id:s.id,pathname:c,params:d,data:i[s.id],handle:s.handle}}function ep(a,i,s,c){i===void 0&&(i=[]),s===void 0&&(s=[]),c===void 0&&(c="");let d=(p,g,m)=>{let h={relativePath:m===void 0?p.path||"":m,caseSensitive:p.caseSensitive===!0,childrenIndex:g,route:p};h.relativePath.startsWith("/")&&(be(h.relativePath.startsWith(c),'Absolute route path "'+h.relativePath+'" nested under path '+('"'+c+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),h.relativePath=h.relativePath.slice(c.length));let P=En([c,h.relativePath]),x=s.concat(h);p.children&&p.children.length>0&&(be(p.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+P+'".')),ep(p.children,i,x,P)),!(p.path==null&&!p.index)&&i.push({path:P,score:Of(P,p.index),routesMeta:x})};return a.forEach((p,g)=>{var m;if(p.path===""||!((m=p.path)!=null&&m.includes("?")))d(p,g);else for(let h of tp(p.path))d(p,g,h)}),i}function tp(a){let i=a.split("/");if(i.length===0)return[];let[s,...c]=i,d=s.endsWith("?"),p=s.replace(/\?$/,"");if(c.length===0)return d?[p,""]:[p];let g=tp(c.join("/")),m=[];return m.push(...g.map(h=>h===""?p:[p,h].join("/"))),d&&m.push(...g),m.map(h=>a.startsWith("/")&&h===""?"/":h)}function Af(a){a.sort((i,s)=>i.score!==s.score?s.score-i.score:Bf(i.routesMeta.map(c=>c.childrenIndex),s.routesMeta.map(c=>c.childrenIndex)))}const Mf=/^:[\w-]+$/,Nf=3,Lf=2,zf=1,Df=10,If=-2,wd=a=>a==="*";function Of(a,i){let s=a.split("/"),c=s.length;return s.some(wd)&&(c+=If),i&&(c+=Lf),s.filter(d=>!wd(d)).reduce((d,p)=>d+(Mf.test(p)?Nf:p===""?zf:Df),c)}function Bf(a,i){return a.length===i.length&&a.slice(0,-1).every((c,d)=>c===i[d])?a[a.length-1]-i[i.length-1]:0}function Wf(a,i,s){s===void 0&&(s=!1);let{routesMeta:c}=a,d={},p="/",g=[];for(let m=0;m<c.length;++m){let h=c[m],P=m===c.length-1,x=p==="/"?i:i.slice(p.length)||"/",R=bi({path:h.relativePath,caseSensitive:h.caseSensitive,end:P},x),A=h.route;if(!R&&P&&s&&!c[c.length-1].route.index&&(R=bi({path:h.relativePath,caseSensitive:h.caseSensitive,end:!1},x)),!R)return null;Object.assign(d,R.params),g.push({params:d,pathname:En([p,R.pathname]),pathnameBase:qf(En([p,R.pathnameBase])),route:A}),R.pathnameBase!=="/"&&(p=En([p,R.pathnameBase]))}return g}function bi(a,i){typeof a=="string"&&(a={path:a,caseSensitive:!1,end:!0});let[s,c]=Ff(a.path,a.caseSensitive,a.end),d=i.match(s);if(!d)return null;let p=d[0],g=p.replace(/(.)\/+$/,"$1"),m=d.slice(1);return{params:c.reduce((P,x,R)=>{let{paramName:A,isOptional:O}=x;if(A==="*"){let B=m[R]||"";g=p.slice(0,p.length-B.length).replace(/(.)\/+$/,"$1")}const V=m[R];return O&&!V?P[A]=void 0:P[A]=(V||"").replace(/%2F/g,"/"),P},{}),pathname:p,pathnameBase:g,pattern:a}}function Ff(a,i,s){i===void 0&&(i=!1),s===void 0&&(s=!0),io(a==="*"||!a.endsWith("*")||a.endsWith("/*"),'Route path "'+a+'" will be treated as if it were '+('"'+a.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+a.replace(/\*$/,"/*")+'".'));let c=[],d="^"+a.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(g,m,h)=>(c.push({paramName:m,isOptional:h!=null}),h?"/?([^\\/]+)?":"/([^\\/]+)"));return a.endsWith("*")?(c.push({paramName:"*"}),d+=a==="*"||a==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):s?d+="\\/*$":a!==""&&a!=="/"&&(d+="(?:(?=\\/|$))"),[new RegExp(d,i?void 0:"i"),c]}function Uf(a){try{return a.split("/").map(i=>decodeURIComponent(i).replace(/\//g,"%2F")).join("/")}catch(i){return io(!1,'The URL path "'+a+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+i+").")),a}}function jn(a,i){if(i==="/")return a;if(!a.toLowerCase().startsWith(i.toLowerCase()))return null;let s=i.endsWith("/")?i.length-1:i.length,c=a.charAt(s);return c&&c!=="/"?null:a.slice(s)||"/"}const Vf=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Hf=a=>Vf.test(a);function Yf(a,i){i===void 0&&(i="/");let{pathname:s,search:c="",hash:d=""}=typeof a=="string"?_n(a):a,p;if(s)if(Hf(s))p=s;else{if(s.includes("//")){let g=s;s=s.replace(/\/\/+/g,"/"),io(!1,"Pathnames cannot have embedded double slashes - normalizing "+(g+" -> "+s))}s.startsWith("/")?p=Sd(s.substring(1),"/"):p=Sd(s,i)}else p=i;return{pathname:p,search:Kf(c),hash:$f(d)}}function Sd(a,i){let s=i.replace(/\/+$/,"").split("/");return a.split("/").forEach(d=>{d===".."?s.length>1&&s.pop():d!=="."&&s.push(d)}),s.length>1?s.join("/"):"/"}function fl(a,i,s,c){return"Cannot include a '"+a+"' character in a manually specified "+("`to."+i+"` field ["+JSON.stringify(c)+"]. Please separate it out to the ")+("`to."+s+"` field. Alternatively you may provide the full path as ")+'a string in <Link to="..."> and the router will parse it for you.'}function np(a){return a.filter((i,s)=>s===0||i.route.path&&i.route.path.length>0)}function _l(a,i){let s=np(a);return i?s.map((c,d)=>d===s.length-1?c.pathname:c.pathnameBase):s.map(c=>c.pathnameBase)}function Tl(a,i,s,c){c===void 0&&(c=!1);let d;typeof a=="string"?d=_n(a):(d=Ge({},a),be(!d.pathname||!d.pathname.includes("?"),fl("?","pathname","search",d)),be(!d.pathname||!d.pathname.includes("#"),fl("#","pathname","hash",d)),be(!d.search||!d.search.includes("#"),fl("#","search","hash",d)));let p=a===""||d.pathname==="",g=p?"/":d.pathname,m;if(g==null)m=s;else{let R=i.length-1;if(!c&&g.startsWith("..")){let A=g.split("/");for(;A[0]==="..";)A.shift(),R-=1;d.pathname=A.join("/")}m=R>=0?i[R]:"/"}let h=Yf(d,m),P=g&&g!=="/"&&g.endsWith("/"),x=(p||g===".")&&s.endsWith("/");return!h.pathname.endsWith("/")&&(P||x)&&(h.pathname+="/"),h}const En=a=>a.join("/").replace(/\/\/+/g,"/"),qf=a=>a.replace(/\/+$/,"").replace(/^\/*/,"/"),Kf=a=>!a||a==="?"?"":a.startsWith("?")?a:"?"+a,$f=a=>!a||a==="#"?"":a.startsWith("#")?a:"#"+a;class xi{constructor(i,s,c,d){d===void 0&&(d=!1),this.status=i,this.statusText=s||"",this.internal=d,c instanceof Error?(this.data=c.toString(),this.error=c):this.data=c}}function nr(a){return a!=null&&typeof a.status=="number"&&typeof a.statusText=="string"&&typeof a.internal=="boolean"&&"data"in a}const op=["post","put","patch","delete"],Gf=new Set(op),Qf=["get",...op],Jf=new Set(Qf),Zf=new Set([301,302,303,307,308]),Xf=new Set([307,308]),hl={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},eh={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},Ja={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},Al=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,th=a=>({hasErrorBoundary:!!a.hasErrorBoundary}),ap="remix-router-transitions";function nh(a){const i=a.window?a.window:typeof window<"u"?window:void 0,s=typeof i<"u"&&typeof i.document<"u"&&typeof i.document.createElement<"u",c=!s;be(a.routes.length>0,"You must provide a non-empty routes array to createRouter");let d;if(a.mapRouteProperties)d=a.mapRouteProperties;else if(a.detectErrorBoundary){let y=a.detectErrorBoundary;d=k=>({hasErrorBoundary:y(k)})}else d=th;let p={},g=ki(a.routes,d,void 0,p),m,h=a.basename||"/",P=a.dataStrategy||ih,x=a.patchRoutesOnNavigation,R=Ge({v7_fetcherPersist:!1,v7_normalizeFormMethod:!1,v7_partialHydration:!1,v7_prependBasename:!1,v7_relativeSplatPath:!1,v7_skipActionErrorRevalidation:!1},a.future),A=null,O=new Set,V=null,B=null,U=null,fe=a.hydrationData!=null,q=jo(g,a.history.location,h),ue=!1,re=null;if(q==null&&!x){let y=_t(404,{pathname:a.history.location.pathname}),{matches:k,route:_}=Md(g);q=k,re={[_.id]:y}}q&&!a.hydrationData&&po(q,g,a.history.location.pathname).active&&(q=null);let xe;if(q)if(q.some(y=>y.route.lazy))xe=!1;else if(!q.some(y=>y.route.loader))xe=!0;else if(R.v7_partialHydration){let y=a.hydrationData?a.hydrationData.loaderData:null,k=a.hydrationData?a.hydrationData.errors:null;if(k){let _=q.findIndex(L=>k[L.route.id]!==void 0);xe=q.slice(0,_+1).every(L=>!bl(L.route,y,k))}else xe=q.every(_=>!bl(_.route,y,k))}else xe=a.hydrationData!=null;else if(xe=!1,q=[],R.v7_partialHydration){let y=po(null,g,a.history.location.pathname);y.active&&y.matches&&(ue=!0,q=y.matches)}let je,j={historyAction:a.history.action,location:a.history.location,matches:q,initialized:xe,navigation:hl,restoreScrollPosition:a.hydrationData!=null?!1:null,preventScrollReset:!1,revalidation:"idle",loaderData:a.hydrationData&&a.hydrationData.loaderData||{},actionData:a.hydrationData&&a.hydrationData.actionData||null,errors:a.hydrationData&&a.hydrationData.errors||re,fetchers:new Map,blockers:new Map},J=rt.Pop,Se=!1,ie,Fe=!1,Te=new Map,De=null,he=!1,Xe=!1,et=[],Ie=new Set,W=new Map,ae=0,Y=-1,S=new Map,M=new Set,de=new Map,ye=new Map,me=new Set,Pe=new Map,Ce=new Map,we;function Ue(){if(A=a.history.listen(y=>{let{action:k,location:_,delta:L}=y;if(we){we(),we=void 0;return}io(Ce.size===0||L!=null,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let H=Io({currentLocation:j.location,nextLocation:_,historyAction:k});if(H&&L!=null){let oe=new Promise(ce=>{we=ce});a.history.go(L*-1),Dn(H,{state:"blocked",location:_,proceed(){Dn(H,{state:"proceeding",proceed:void 0,reset:void 0,location:_}),oe.then(()=>a.history.go(L))},reset(){let ce=new Map(j.blockers);ce.set(H,Ja),tt({blockers:ce})}});return}return At(k,_)}),s){wh(i,Te);let y=()=>Sh(i,Te);i.addEventListener("pagehide",y),De=()=>i.removeEventListener("pagehide",y)}return j.initialized||At(rt.Pop,j.location,{initialHydration:!0}),je}function ct(){A&&A(),De&&De(),O.clear(),ie&&ie.abort(),j.fetchers.forEach((y,k)=>nn(k)),j.blockers.forEach((y,k)=>Do(k))}function An(y){return O.add(y),()=>O.delete(y)}function tt(y,k){k===void 0&&(k={}),j=Ge({},j,y);let _=[],L=[];R.v7_fetcherPersist&&j.fetchers.forEach((H,oe)=>{H.state==="idle"&&(me.has(oe)?L.push(oe):_.push(oe))}),me.forEach(H=>{!j.fetchers.has(H)&&!W.has(H)&&L.push(H)}),[...O].forEach(H=>H(j,{deletedFetchers:L,viewTransitionOpts:k.viewTransitionOpts,flushSync:k.flushSync===!0})),R.v7_fetcherPersist?(_.forEach(H=>j.fetchers.delete(H)),L.forEach(H=>nn(H))):L.forEach(H=>me.delete(H))}function Tt(y,k,_){var L,H;let{flushSync:oe}=_===void 0?{}:_,ce=j.actionData!=null&&j.navigation.formMethod!=null&&en(j.navigation.formMethod)&&j.navigation.state==="loading"&&((L=y.state)==null?void 0:L._isRedirect)!==!0,Z;k.actionData?Object.keys(k.actionData).length>0?Z=k.actionData:Z=null:ce?Z=j.actionData:Z=null;let ee=k.loaderData?Td(j.loaderData,k.loaderData,k.matches||[],k.errors):j.loaderData,$=j.blockers;$.size>0&&($=new Map($),$.forEach((Re,it)=>$.set(it,Ja)));let Q=Se===!0||j.navigation.formMethod!=null&&en(j.navigation.formMethod)&&((H=y.state)==null?void 0:H._isRedirect)!==!0;m&&(g=m,m=void 0),he||J===rt.Pop||(J===rt.Push?a.history.push(y,y.state):J===rt.Replace&&a.history.replace(y,y.state));let ve;if(J===rt.Pop){let Re=Te.get(j.location.pathname);Re&&Re.has(y.pathname)?ve={currentLocation:j.location,nextLocation:y}:Te.has(y.pathname)&&(ve={currentLocation:y,nextLocation:j.location})}else if(Fe){let Re=Te.get(j.location.pathname);Re?Re.add(y.pathname):(Re=new Set([y.pathname]),Te.set(j.location.pathname,Re)),ve={currentLocation:j.location,nextLocation:y}}tt(Ge({},k,{actionData:Z,loaderData:ee,historyAction:J,location:y,initialized:!0,navigation:hl,revalidation:"idle",restoreScrollPosition:ha(y,k.matches||j.matches),preventScrollReset:Q,blockers:$}),{viewTransitionOpts:ve,flushSync:oe===!0}),J=rt.Pop,Se=!1,Fe=!1,he=!1,Xe=!1,et=[]}async function Mn(y,k){if(typeof y=="number"){a.history.go(y);return}let _=kl(j.location,j.matches,h,R.v7_prependBasename,y,R.v7_relativeSplatPath,k==null?void 0:k.fromRouteId,k==null?void 0:k.relative),{path:L,submission:H,error:oe}=kd(R.v7_normalizeFormMethod,!1,_,k),ce=j.location,Z=tr(j.location,L,k&&k.state);Z=Ge({},Z,a.history.encodeLocation(Z));let ee=k&&k.replace!=null?k.replace:void 0,$=rt.Push;ee===!0?$=rt.Replace:ee===!1||H!=null&&en(H.formMethod)&&H.formAction===j.location.pathname+j.location.search&&($=rt.Replace);let Q=k&&"preventScrollReset"in k?k.preventScrollReset===!0:void 0,ve=(k&&k.flushSync)===!0,Re=Io({currentLocation:ce,nextLocation:Z,historyAction:$});if(Re){Dn(Re,{state:"blocked",location:Z,proceed(){Dn(Re,{state:"proceeding",proceed:void 0,reset:void 0,location:Z}),Mn(y,k)},reset(){let it=new Map(j.blockers);it.set(Re,Ja),tt({blockers:it})}});return}return await At($,Z,{submission:H,pendingError:oe,preventScrollReset:Q,replace:k&&k.replace,enableViewTransition:k&&k.viewTransition,flushSync:ve})}function No(){if(uo(),tt({revalidation:"loading"}),j.navigation.state!=="submitting"){if(j.navigation.state==="idle"){At(j.historyAction,j.location,{startUninterruptedRevalidation:!0});return}At(J||j.historyAction,j.navigation.location,{overrideNavigation:j.navigation,enableViewTransition:Fe===!0})}}async function At(y,k,_){ie&&ie.abort(),ie=null,J=y,he=(_&&_.startUninterruptedRevalidation)===!0,cr(j.location,j.matches),Se=(_&&_.preventScrollReset)===!0,Fe=(_&&_.enableViewTransition)===!0;let L=m||g,H=_&&_.overrideNavigation,oe=_!=null&&_.initialHydration&&j.matches&&j.matches.length>0&&!ue?j.matches:jo(L,k,h),ce=(_&&_.flushSync)===!0;if(oe&&j.initialized&&!Xe&&ph(j.location,k)&&!(_&&_.submission&&en(_.submission.formMethod))){Tt(k,{matches:oe},{flushSync:ce});return}let Z=po(oe,L,k.pathname);if(Z.active&&Z.matches&&(oe=Z.matches),!oe){let{error:Oe,notFoundMatches:_e,route:Ye}=on(k.pathname);Tt(k,{matches:_e,loaderData:{},errors:{[Ye.id]:Oe}},{flushSync:ce});return}ie=new AbortController;let ee=sa(a.history,k,ie.signal,_&&_.submission),$;if(_&&_.pendingError)$=[_o(oe).route.id,{type:We.error,error:_.pendingError}];else if(_&&_.submission&&en(_.submission.formMethod)){let Oe=await Nn(ee,k,_.submission,oe,Z.active,{replace:_.replace,flushSync:ce});if(Oe.shortCircuited)return;if(Oe.pendingActionResult){let[_e,Ye]=Oe.pendingActionResult;if(Ot(Ye)&&nr(Ye.error)&&Ye.error.status===404){ie=null,Tt(k,{matches:Oe.matches,loaderData:{},errors:{[_e]:Ye.error}});return}}oe=Oe.matches||oe,$=Oe.pendingActionResult,H=ml(k,_.submission),ce=!1,Z.active=!1,ee=sa(a.history,ee.url,ee.signal)}let{shortCircuited:Q,matches:ve,loaderData:Re,errors:it}=await co(ee,k,oe,Z.active,H,_&&_.submission,_&&_.fetcherSubmission,_&&_.replace,_&&_.initialHydration===!0,ce,$);Q||(ie=null,Tt(k,Ge({matches:ve||oe},Ad($),{loaderData:Re,errors:it})))}async function Nn(y,k,_,L,H,oe){oe===void 0&&(oe={}),uo();let ce=vh(k,_);if(tt({navigation:ce},{flushSync:oe.flushSync===!0}),H){let $=await In(L,k.pathname,y.signal);if($.type==="aborted")return{shortCircuited:!0};if($.type==="error"){let Q=_o($.partialMatches).route.id;return{matches:$.partialMatches,pendingActionResult:[Q,{type:We.error,error:$.error}]}}else if($.matches)L=$.matches;else{let{notFoundMatches:Q,error:ve,route:Re}=on(k.pathname);return{matches:Q,pendingActionResult:[Re.id,{type:We.error,error:ve}]}}}let Z,ee=er(L,k);if(!ee.route.action&&!ee.route.lazy)Z={type:We.error,error:_t(405,{method:y.method,pathname:k.pathname,routeId:ee.route.id})};else if(Z=(await Ln("action",j,y,[ee],L,null))[ee.route.id],y.signal.aborted)return{shortCircuited:!0};if(To(Z)){let $;return oe&&oe.replace!=null?$=oe.replace:$=Ed(Z.response.headers.get("Location"),new URL(y.url),h,a.history)===j.location.pathname+j.location.search,await tn(y,Z,!0,{submission:_,replace:$}),{shortCircuited:!0}}if(ro(Z))throw _t(400,{type:"defer-action"});if(Ot(Z)){let $=_o(L,ee.route.id);return(oe&&oe.replace)!==!0&&(J=rt.Push),{matches:L,pendingActionResult:[$.route.id,Z]}}return{matches:L,pendingActionResult:[ee.route.id,Z]}}async function co(y,k,_,L,H,oe,ce,Z,ee,$,Q){let ve=H||ml(k,oe),Re=oe||ce||Ld(ve),it=!he&&(!R.v7_partialHydration||!ee);if(L){if(it){let Ve=gn(Q);tt(Ge({navigation:ve},Ve!==void 0?{actionData:Ve}:{}),{flushSync:$})}let Ee=await In(_,k.pathname,y.signal);if(Ee.type==="aborted")return{shortCircuited:!0};if(Ee.type==="error"){let Ve=_o(Ee.partialMatches).route.id;return{matches:Ee.partialMatches,loaderData:{},errors:{[Ve]:Ee.error}}}else if(Ee.matches)_=Ee.matches;else{let{error:Ve,notFoundMatches:ft,route:ho}=on(k.pathname);return{matches:ft,loaderData:{},errors:{[ho.id]:Ve}}}}let Oe=m||g,[_e,Ye]=xd(a.history,j,_,Re,k,R.v7_partialHydration&&ee===!0,R.v7_skipActionErrorRevalidation,Xe,et,Ie,me,de,M,Oe,h,Q);if(an(Ee=>!(_&&_.some(Ve=>Ve.route.id===Ee))||_e&&_e.some(Ve=>Ve.route.id===Ee)),Y=++ae,_e.length===0&&Ye.length===0){let Ee=sr();return Tt(k,Ge({matches:_,loaderData:{},errors:Q&&Ot(Q[1])?{[Q[0]]:Q[1].error}:null},Ad(Q),Ee?{fetchers:new Map(j.fetchers)}:{}),{flushSync:$}),{shortCircuited:!0}}if(it){let Ee={};if(!L){Ee.navigation=ve;let Ve=gn(Q);Ve!==void 0&&(Ee.actionData=Ve)}Ye.length>0&&(Ee.fetchers=pe(Ye)),tt(Ee,{flushSync:$})}Ye.forEach(Ee=>{qt(Ee.key),Ee.controller&&W.set(Ee.key,Ee.controller)});let fn=()=>Ye.forEach(Ee=>qt(Ee.key));ie&&ie.signal.addEventListener("abort",fn);let{loaderResults:fo,fetcherResults:Kt}=await da(j,_,_e,Ye,y);if(y.signal.aborted)return{shortCircuited:!0};ie&&ie.signal.removeEventListener("abort",fn),Ye.forEach(Ee=>W.delete(Ee.key));let Ne=mi(fo);if(Ne)return await tn(y,Ne.result,!0,{replace:Z}),{shortCircuited:!0};if(Ne=mi(Kt),Ne)return M.add(Ne.key),await tn(y,Ne.result,!0,{replace:Z}),{shortCircuited:!0};let{loaderData:ma,errors:hn}=_d(j,_,fo,Q,Ye,Kt,Pe);Pe.forEach((Ee,Ve)=>{Ee.subscribe(ft=>{(ft||Ee.done)&&Pe.delete(Ve)})}),R.v7_partialHydration&&ee&&j.errors&&(hn=Ge({},j.errors,hn));let rn=sr(),mn=zo(Y),Oo=rn||mn||Ye.length>0;return Ge({matches:_,loaderData:ma,errors:hn},Oo?{fetchers:new Map(j.fetchers)}:{})}function gn(y){if(y&&!Ot(y[1]))return{[y[0]]:y[1].data};if(j.actionData)return Object.keys(j.actionData).length===0?null:j.actionData}function pe(y){return y.forEach(k=>{let _=j.fetchers.get(k.key),L=Za(void 0,_?_.data:void 0);j.fetchers.set(k.key,L)}),new Map(j.fetchers)}function Qe(y,k,_,L){if(c)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");qt(y);let H=(L&&L.flushSync)===!0,oe=m||g,ce=kl(j.location,j.matches,h,R.v7_prependBasename,_,R.v7_relativeSplatPath,k,L==null?void 0:L.relative),Z=jo(oe,ce,h),ee=po(Z,oe,ce);if(ee.active&&ee.matches&&(Z=ee.matches),!Z){Bt(y,k,_t(404,{pathname:ce}),{flushSync:H});return}let{path:$,submission:Q,error:ve}=kd(R.v7_normalizeFormMethod,!0,ce,L);if(ve){Bt(y,k,ve,{flushSync:H});return}let Re=er(Z,$),it=(L&&L.preventScrollReset)===!0;if(Q&&en(Q.formMethod)){gt(y,k,$,Re,Z,ee.active,H,it,Q);return}de.set(y,{routeId:k,path:$}),Lo(y,k,$,Re,Z,ee.active,H,it,Q)}async function gt(y,k,_,L,H,oe,ce,Z,ee){uo(),de.delete(y);function $(Le){if(!Le.route.action&&!Le.route.lazy){let On=_t(405,{method:ee.formMethod,pathname:_,routeId:k});return Bt(y,k,On,{flushSync:ce}),!0}return!1}if(!oe&&$(L))return;let Q=j.fetchers.get(y);Mt(y,Ph(ee,Q),{flushSync:ce});let ve=new AbortController,Re=sa(a.history,_,ve.signal,ee);if(oe){let Le=await In(H,new URL(Re.url).pathname,Re.signal,y);if(Le.type==="aborted")return;if(Le.type==="error"){Bt(y,k,Le.error,{flushSync:ce});return}else if(Le.matches){if(H=Le.matches,L=er(H,_),$(L))return}else{Bt(y,k,_t(404,{pathname:_}),{flushSync:ce});return}}W.set(y,ve);let it=ae,_e=(await Ln("action",j,Re,[L],H,y))[L.route.id];if(Re.signal.aborted){W.get(y)===ve&&W.delete(y);return}if(R.v7_fetcherPersist&&me.has(y)){if(To(_e)||Ot(_e)){Mt(y,ao(void 0));return}}else{if(To(_e))if(W.delete(y),Y>it){Mt(y,ao(void 0));return}else return M.add(y),Mt(y,Za(ee)),tn(Re,_e,!1,{fetcherSubmission:ee,preventScrollReset:Z});if(Ot(_e)){Bt(y,k,_e.error);return}}if(ro(_e))throw _t(400,{type:"defer-action"});let Ye=j.navigation.location||j.location,fn=sa(a.history,Ye,ve.signal),fo=m||g,Kt=j.navigation.state!=="idle"?jo(fo,j.navigation.location,h):j.matches;be(Kt,"Didn't find any matches after fetcher action");let Ne=++ae;S.set(y,Ne);let ma=Za(ee,_e.data);j.fetchers.set(y,ma);let[hn,rn]=xd(a.history,j,Kt,ee,Ye,!1,R.v7_skipActionErrorRevalidation,Xe,et,Ie,me,de,M,fo,h,[L.route.id,_e]);rn.filter(Le=>Le.key!==y).forEach(Le=>{let On=Le.key,dr=j.fetchers.get(On),_i=Za(void 0,dr?dr.data:void 0);j.fetchers.set(On,_i),qt(On),Le.controller&&W.set(On,Le.controller)}),tt({fetchers:new Map(j.fetchers)});let mn=()=>rn.forEach(Le=>qt(Le.key));ve.signal.addEventListener("abort",mn);let{loaderResults:Oo,fetcherResults:Ee}=await da(j,Kt,hn,rn,fn);if(ve.signal.aborted)return;ve.signal.removeEventListener("abort",mn),S.delete(y),W.delete(y),rn.forEach(Le=>W.delete(Le.key));let Ve=mi(Oo);if(Ve)return tn(fn,Ve.result,!1,{preventScrollReset:Z});if(Ve=mi(Ee),Ve)return M.add(Ve.key),tn(fn,Ve.result,!1,{preventScrollReset:Z});let{loaderData:ft,errors:ho}=_d(j,Kt,Oo,void 0,rn,Ee,Pe);if(j.fetchers.has(y)){let Le=ao(_e.data);j.fetchers.set(y,Le)}zo(Ne),j.navigation.state==="loading"&&Ne>Y?(be(J,"Expected pending action"),ie&&ie.abort(),Tt(j.navigation.location,{matches:Kt,loaderData:ft,errors:ho,fetchers:new Map(j.fetchers)})):(tt({errors:ho,loaderData:Td(j.loaderData,ft,Kt,ho),fetchers:new Map(j.fetchers)}),Xe=!1)}async function Lo(y,k,_,L,H,oe,ce,Z,ee){let $=j.fetchers.get(y);Mt(y,Za(ee,$?$.data:void 0),{flushSync:ce});let Q=new AbortController,ve=sa(a.history,_,Q.signal);if(oe){let _e=await In(H,new URL(ve.url).pathname,ve.signal,y);if(_e.type==="aborted")return;if(_e.type==="error"){Bt(y,k,_e.error,{flushSync:ce});return}else if(_e.matches)H=_e.matches,L=er(H,_);else{Bt(y,k,_t(404,{pathname:_}),{flushSync:ce});return}}W.set(y,Q);let Re=ae,Oe=(await Ln("loader",j,ve,[L],H,y))[L.route.id];if(ro(Oe)&&(Oe=await Ml(Oe,ve.signal,!0)||Oe),W.get(y)===Q&&W.delete(y),!ve.signal.aborted){if(me.has(y)){Mt(y,ao(void 0));return}if(To(Oe))if(Y>Re){Mt(y,ao(void 0));return}else{M.add(y),await tn(ve,Oe,!1,{preventScrollReset:Z});return}if(Ot(Oe)){Bt(y,k,Oe.error);return}be(!ro(Oe),"Unhandled fetcher deferred data"),Mt(y,ao(Oe.data))}}async function tn(y,k,_,L){let{submission:H,fetcherSubmission:oe,preventScrollReset:ce,replace:Z}=L===void 0?{}:L;k.response.headers.has("X-Remix-Revalidate")&&(Xe=!0);let ee=k.response.headers.get("Location");be(ee,"Expected a Location header on the redirect Response"),ee=Ed(ee,new URL(y.url),h,a.history);let $=tr(j.location,ee,{_isRedirect:!0});if(s){let _e=!1;if(k.response.headers.has("X-Remix-Reload-Document"))_e=!0;else if(Al.test(ee)){const Ye=a.history.createURL(ee);_e=Ye.origin!==i.location.origin||jn(Ye.pathname,h)==null}if(_e){Z?i.location.replace(ee):i.location.assign(ee);return}}ie=null;let Q=Z===!0||k.response.headers.has("X-Remix-Replace")?rt.Replace:rt.Push,{formMethod:ve,formAction:Re,formEncType:it}=j.navigation;!H&&!oe&&ve&&Re&&it&&(H=Ld(j.navigation));let Oe=H||oe;if(Xf.has(k.response.status)&&Oe&&en(Oe.formMethod))await At(Q,$,{submission:Ge({},Oe,{formAction:ee}),preventScrollReset:ce||Se,enableViewTransition:_?Fe:void 0});else{let _e=ml($,H);await At(Q,$,{overrideNavigation:_e,fetcherSubmission:oe,preventScrollReset:ce||Se,enableViewTransition:_?Fe:void 0})}}async function Ln(y,k,_,L,H,oe){let ce,Z={};try{ce=await sh(P,y,k,_,L,H,oe,p,d)}catch(ee){return L.forEach($=>{Z[$.route.id]={type:We.error,error:ee}}),Z}for(let[ee,$]of Object.entries(ce))if(gh($)){let Q=$.result;Z[ee]={type:We.redirect,response:uh(Q,_,ee,H,h,R.v7_relativeSplatPath)}}else Z[ee]=await ch($);return Z}async function da(y,k,_,L,H){let oe=y.matches,ce=Ln("loader",y,H,_,k,null),Z=Promise.all(L.map(async Q=>{if(Q.matches&&Q.match&&Q.controller){let Re=(await Ln("loader",y,sa(a.history,Q.path,Q.controller.signal),[Q.match],Q.matches,Q.key))[Q.match.route.id];return{[Q.key]:Re}}else return Promise.resolve({[Q.key]:{type:We.error,error:_t(404,{pathname:Q.path})}})})),ee=await ce,$=(await Z).reduce((Q,ve)=>Object.assign(Q,ve),{});return await Promise.all([mh(k,ee,H.signal,oe,y.loaderData),yh(k,$,L)]),{loaderResults:ee,fetcherResults:$}}function uo(){Xe=!0,et.push(...an()),de.forEach((y,k)=>{W.has(k)&&Ie.add(k),qt(k)})}function Mt(y,k,_){_===void 0&&(_={}),j.fetchers.set(y,k),tt({fetchers:new Map(j.fetchers)},{flushSync:(_&&_.flushSync)===!0})}function Bt(y,k,_,L){L===void 0&&(L={});let H=_o(j.matches,k);nn(y),tt({errors:{[H.route.id]:_},fetchers:new Map(j.fetchers)},{flushSync:(L&&L.flushSync)===!0})}function zn(y){return ye.set(y,(ye.get(y)||0)+1),me.has(y)&&me.delete(y),j.fetchers.get(y)||eh}function nn(y){let k=j.fetchers.get(y);W.has(y)&&!(k&&k.state==="loading"&&S.has(y))&&qt(y),de.delete(y),S.delete(y),M.delete(y),R.v7_fetcherPersist&&me.delete(y),Ie.delete(y),j.fetchers.delete(y)}function ji(y){let k=(ye.get(y)||0)-1;k<=0?(ye.delete(y),me.add(y),R.v7_fetcherPersist||nn(y)):ye.set(y,k),tt({fetchers:new Map(j.fetchers)})}function qt(y){let k=W.get(y);k&&(k.abort(),W.delete(y))}function pa(y){for(let k of y){let _=zn(k),L=ao(_.data);j.fetchers.set(k,L)}}function sr(){let y=[],k=!1;for(let _ of M){let L=j.fetchers.get(_);be(L,"Expected fetcher: "+_),L.state==="loading"&&(M.delete(_),y.push(_),k=!0)}return pa(y),k}function zo(y){let k=[];for(let[_,L]of S)if(L<y){let H=j.fetchers.get(_);be(H,"Expected fetcher: "+_),H.state==="loading"&&(qt(_),S.delete(_),k.push(_))}return pa(k),k.length>0}function ga(y,k){let _=j.blockers.get(y)||Ja;return Ce.get(y)!==k&&Ce.set(y,k),_}function Do(y){j.blockers.delete(y),Ce.delete(y)}function Dn(y,k){let _=j.blockers.get(y)||Ja;be(_.state==="unblocked"&&k.state==="blocked"||_.state==="blocked"&&k.state==="blocked"||_.state==="blocked"&&k.state==="proceeding"||_.state==="blocked"&&k.state==="unblocked"||_.state==="proceeding"&&k.state==="unblocked","Invalid blocker state transition: "+_.state+" -> "+k.state);let L=new Map(j.blockers);L.set(y,k),tt({blockers:L})}function Io(y){let{currentLocation:k,nextLocation:_,historyAction:L}=y;if(Ce.size===0)return;Ce.size>1&&io(!1,"A router only supports one blocker at a time");let H=Array.from(Ce.entries()),[oe,ce]=H[H.length-1],Z=j.blockers.get(oe);if(!(Z&&Z.state==="proceeding")&&ce({currentLocation:k,nextLocation:_,historyAction:L}))return oe}function on(y){let k=_t(404,{pathname:y}),_=m||g,{matches:L,route:H}=Md(_);return an(),{notFoundMatches:L,route:H,error:k}}function an(y){let k=[];return Pe.forEach((_,L)=>{(!y||y(L))&&(_.cancel(),k.push(L),Pe.delete(L))}),k}function lr(y,k,_){if(V=y,U=k,B=_||null,!fe&&j.navigation===hl){fe=!0;let L=ha(j.location,j.matches);L!=null&&tt({restoreScrollPosition:L})}return()=>{V=null,U=null,B=null}}function fa(y,k){return B&&B(y,k.map(L=>Tf(L,j.loaderData)))||y.key}function cr(y,k){if(V&&U){let _=fa(y,k);V[_]=U()}}function ha(y,k){if(V){let _=fa(y,k),L=V[_];if(typeof L=="number")return L}return null}function po(y,k,_){if(x)if(y){if(Object.keys(y[0].params).length>0)return{active:!0,matches:wi(k,_,h,!0)}}else return{active:!0,matches:wi(k,_,h,!0)||[]};return{active:!1,matches:null}}async function In(y,k,_,L){if(!x)return{type:"success",matches:y};let H=y;for(;;){let oe=m==null,ce=m||g,Z=p;try{await x({signal:_,path:k,matches:H,fetcherKey:L,patch:(Q,ve)=>{_.aborted||Cd(Q,ve,ce,Z,d)}})}catch(Q){return{type:"error",error:Q,partialMatches:H}}finally{oe&&!_.aborted&&(g=[...g])}if(_.aborted)return{type:"aborted"};let ee=jo(ce,k,h);if(ee)return{type:"success",matches:ee};let $=wi(ce,k,h,!0);if(!$||H.length===$.length&&H.every((Q,ve)=>Q.route.id===$[ve].route.id))return{type:"success",matches:null};H=$}}function ur(y){p={},m=ki(y,d,void 0,p)}function go(y,k){let _=m==null;Cd(y,k,m||g,p,d),_&&(g=[...g],tt({}))}return je={get basename(){return h},get future(){return R},get state(){return j},get routes(){return g},get window(){return i},initialize:Ue,subscribe:An,enableScrollRestoration:lr,navigate:Mn,fetch:Qe,revalidate:No,createHref:y=>a.history.createHref(y),encodeLocation:y=>a.history.encodeLocation(y),getFetcher:zn,deleteFetcher:ji,dispose:ct,getBlocker:ga,deleteBlocker:Do,patchRoutes:go,_internalFetchControllers:W,_internalActiveDeferreds:Pe,_internalSetRoutes:ur},je}function oh(a){return a!=null&&("formData"in a&&a.formData!=null||"body"in a&&a.body!==void 0)}function kl(a,i,s,c,d,p,g,m){let h,P;if(g){h=[];for(let R of i)if(h.push(R),R.route.id===g){P=R;break}}else h=i,P=i[i.length-1];let x=Tl(d||".",_l(h,p),jn(a.pathname,s)||a.pathname,m==="path");if(d==null&&(x.search=a.search,x.hash=a.hash),(d==null||d===""||d===".")&&P){let R=Nl(x.search);if(P.route.index&&!R)x.search=x.search?x.search.replace(/^\?/,"?index&"):"?index";else if(!P.route.index&&R){let A=new URLSearchParams(x.search),O=A.getAll("index");A.delete("index"),O.filter(B=>B).forEach(B=>A.append("index",B));let V=A.toString();x.search=V?"?"+V:""}}return c&&s!=="/"&&(x.pathname=x.pathname==="/"?s:En([s,x.pathname])),Mo(x)}function kd(a,i,s,c){if(!c||!oh(c))return{path:s};if(c.formMethod&&!hh(c.formMethod))return{path:s,error:_t(405,{method:c.formMethod})};let d=()=>({path:s,error:_t(400,{type:"invalid-body"})}),p=c.formMethod||"get",g=a?p.toUpperCase():p.toLowerCase(),m=sp(s);if(c.body!==void 0){if(c.formEncType==="text/plain"){if(!en(g))return d();let A=typeof c.body=="string"?c.body:c.body instanceof FormData||c.body instanceof URLSearchParams?Array.from(c.body.entries()).reduce((O,V)=>{let[B,U]=V;return""+O+B+"="+U+`
51
+ `},""):String(c.body);return{path:s,submission:{formMethod:g,formAction:m,formEncType:c.formEncType,formData:void 0,json:void 0,text:A}}}else if(c.formEncType==="application/json"){if(!en(g))return d();try{let A=typeof c.body=="string"?JSON.parse(c.body):c.body;return{path:s,submission:{formMethod:g,formAction:m,formEncType:c.formEncType,formData:void 0,json:A,text:void 0}}}catch{return d()}}}be(typeof FormData=="function","FormData is not available in this environment");let h,P;if(c.formData)h=xl(c.formData),P=c.formData;else if(c.body instanceof FormData)h=xl(c.body),P=c.body;else if(c.body instanceof URLSearchParams)h=c.body,P=jd(h);else if(c.body==null)h=new URLSearchParams,P=new FormData;else try{h=new URLSearchParams(c.body),P=jd(h)}catch{return d()}let x={formMethod:g,formAction:m,formEncType:c&&c.formEncType||"application/x-www-form-urlencoded",formData:P,json:void 0,text:void 0};if(en(x.formMethod))return{path:s,submission:x};let R=_n(s);return i&&R.search&&Nl(R.search)&&h.append("index",""),R.search="?"+h,{path:Mo(R),submission:x}}function bd(a,i,s){s===void 0&&(s=!1);let c=a.findIndex(d=>d.route.id===i);return c>=0?a.slice(0,s?c+1:c):a}function xd(a,i,s,c,d,p,g,m,h,P,x,R,A,O,V,B){let U=B?Ot(B[1])?B[1].error:B[1].data:void 0,fe=a.createURL(i.location),q=a.createURL(d),ue=s;p&&i.errors?ue=bd(s,Object.keys(i.errors)[0],!0):B&&Ot(B[1])&&(ue=bd(s,B[0]));let re=B?B[1].statusCode:void 0,xe=g&&re&&re>=400,je=ue.filter((J,Se)=>{let{route:ie}=J;if(ie.lazy)return!0;if(ie.loader==null)return!1;if(p)return bl(ie,i.loaderData,i.errors);if(ah(i.loaderData,i.matches[Se],J)||h.some(De=>De===J.route.id))return!0;let Fe=i.matches[Se],Te=J;return Rd(J,Ge({currentUrl:fe,currentParams:Fe.params,nextUrl:q,nextParams:Te.params},c,{actionResult:U,actionStatus:re,defaultShouldRevalidate:xe?!1:m||fe.pathname+fe.search===q.pathname+q.search||fe.search!==q.search||rp(Fe,Te)}))}),j=[];return R.forEach((J,Se)=>{if(p||!s.some(he=>he.route.id===J.routeId)||x.has(Se))return;let ie=jo(O,J.path,V);if(!ie){j.push({key:Se,routeId:J.routeId,path:J.path,matches:null,match:null,controller:null});return}let Fe=i.fetchers.get(Se),Te=er(ie,J.path),De=!1;A.has(Se)?De=!1:P.has(Se)?(P.delete(Se),De=!0):Fe&&Fe.state!=="idle"&&Fe.data===void 0?De=m:De=Rd(Te,Ge({currentUrl:fe,currentParams:i.matches[i.matches.length-1].params,nextUrl:q,nextParams:s[s.length-1].params},c,{actionResult:U,actionStatus:re,defaultShouldRevalidate:xe?!1:m})),De&&j.push({key:Se,routeId:J.routeId,path:J.path,matches:ie,match:Te,controller:new AbortController})}),[je,j]}function bl(a,i,s){if(a.lazy)return!0;if(!a.loader)return!1;let c=i!=null&&i[a.id]!==void 0,d=s!=null&&s[a.id]!==void 0;return!c&&d?!1:typeof a.loader=="function"&&a.loader.hydrate===!0?!0:!c&&!d}function ah(a,i,s){let c=!i||s.route.id!==i.route.id,d=a[s.route.id]===void 0;return c||d}function rp(a,i){let s=a.route.path;return a.pathname!==i.pathname||s!=null&&s.endsWith("*")&&a.params["*"]!==i.params["*"]}function Rd(a,i){if(a.route.shouldRevalidate){let s=a.route.shouldRevalidate(i);if(typeof s=="boolean")return s}return i.defaultShouldRevalidate}function Cd(a,i,s,c,d){var p;let g;if(a){let P=c[a];be(P,"No route found to patch children into: routeId = "+a),P.children||(P.children=[]),g=P.children}else g=s;let m=i.filter(P=>!g.some(x=>ip(P,x))),h=ki(m,d,[a||"_","patch",String(((p=g)==null?void 0:p.length)||"0")],c);g.push(...h)}function ip(a,i){return"id"in a&&"id"in i&&a.id===i.id?!0:a.index===i.index&&a.path===i.path&&a.caseSensitive===i.caseSensitive?(!a.children||a.children.length===0)&&(!i.children||i.children.length===0)?!0:a.children.every((s,c)=>{var d;return(d=i.children)==null?void 0:d.some(p=>ip(s,p))}):!1}async function rh(a,i,s){if(!a.lazy)return;let c=await a.lazy();if(!a.lazy)return;let d=s[a.id];be(d,"No route found in manifest");let p={};for(let g in c){let h=d[g]!==void 0&&g!=="hasErrorBoundary";io(!h,'Route "'+d.id+'" has a static property "'+g+'" defined but its lazy function is also returning a value for this property. '+('The lazy route property "'+g+'" will be ignored.')),!h&&!jf.has(g)&&(p[g]=c[g])}Object.assign(d,p),Object.assign(d,Ge({},i(d),{lazy:void 0}))}async function ih(a){let{matches:i}=a,s=i.filter(d=>d.shouldLoad);return(await Promise.all(s.map(d=>d.resolve()))).reduce((d,p,g)=>Object.assign(d,{[s[g].route.id]:p}),{})}async function sh(a,i,s,c,d,p,g,m,h,P){let x=p.map(O=>O.route.lazy?rh(O.route,h,m):void 0),R=p.map((O,V)=>{let B=x[V],U=d.some(q=>q.route.id===O.route.id);return Ge({},O,{shouldLoad:U,resolve:async q=>(q&&c.method==="GET"&&(O.route.lazy||O.route.loader)&&(U=!0),U?lh(i,c,O,B,q,P):Promise.resolve({type:We.data,result:void 0}))})}),A=await a({matches:R,request:c,params:p[0].params,fetcherKey:g,context:P});try{await Promise.all(x)}catch{}return A}async function lh(a,i,s,c,d,p){let g,m,h=P=>{let x,R=new Promise((V,B)=>x=B);m=()=>x(),i.signal.addEventListener("abort",m);let A=V=>typeof P!="function"?Promise.reject(new Error("You cannot call the handler for a route which defines a boolean "+('"'+a+'" [routeId: '+s.route.id+"]"))):P({request:i,params:s.params,context:p},...V!==void 0?[V]:[]),O=(async()=>{try{return{type:"data",result:await(d?d(B=>A(B)):A())}}catch(V){return{type:"error",result:V}}})();return Promise.race([O,R])};try{let P=s.route[a];if(c)if(P){let x,[R]=await Promise.all([h(P).catch(A=>{x=A}),c]);if(x!==void 0)throw x;g=R}else if(await c,P=s.route[a],P)g=await h(P);else if(a==="action"){let x=new URL(i.url),R=x.pathname+x.search;throw _t(405,{method:i.method,pathname:R,routeId:s.route.id})}else return{type:We.data,result:void 0};else if(P)g=await h(P);else{let x=new URL(i.url),R=x.pathname+x.search;throw _t(404,{pathname:R})}be(g.result!==void 0,"You defined "+(a==="action"?"an action":"a loader")+" for route "+('"'+s.route.id+"\" but didn't return anything from your `"+a+"` ")+"function. Please return a value or `null`.")}catch(P){return{type:We.error,result:P}}finally{m&&i.signal.removeEventListener("abort",m)}return g}async function ch(a){let{result:i,type:s}=a;if(lp(i)){let R;try{let A=i.headers.get("Content-Type");A&&/\bapplication\/json\b/.test(A)?i.body==null?R=null:R=await i.json():R=await i.text()}catch(A){return{type:We.error,error:A}}return s===We.error?{type:We.error,error:new xi(i.status,i.statusText,R),statusCode:i.status,headers:i.headers}:{type:We.data,data:R,statusCode:i.status,headers:i.headers}}if(s===We.error){if(Nd(i)){var c,d;if(i.data instanceof Error){var p,g;return{type:We.error,error:i.data,statusCode:(p=i.init)==null?void 0:p.status,headers:(g=i.init)!=null&&g.headers?new Headers(i.init.headers):void 0}}return{type:We.error,error:new xi(((c=i.init)==null?void 0:c.status)||500,void 0,i.data),statusCode:nr(i)?i.status:void 0,headers:(d=i.init)!=null&&d.headers?new Headers(i.init.headers):void 0}}return{type:We.error,error:i,statusCode:nr(i)?i.status:void 0}}if(fh(i)){var m,h;return{type:We.deferred,deferredData:i,statusCode:(m=i.init)==null?void 0:m.status,headers:((h=i.init)==null?void 0:h.headers)&&new Headers(i.init.headers)}}if(Nd(i)){var P,x;return{type:We.data,data:i.data,statusCode:(P=i.init)==null?void 0:P.status,headers:(x=i.init)!=null&&x.headers?new Headers(i.init.headers):void 0}}return{type:We.data,data:i}}function uh(a,i,s,c,d,p){let g=a.headers.get("Location");if(be(g,"Redirects returned/thrown from loaders/actions must have a Location header"),!Al.test(g)){let m=c.slice(0,c.findIndex(h=>h.route.id===s)+1);g=kl(new URL(i.url),m,d,!0,g,p),a.headers.set("Location",g)}return a}function Ed(a,i,s,c){let d=["about:","blob:","chrome:","chrome-untrusted:","content:","data:","devtools:","file:","filesystem:","javascript:"];if(Al.test(a)){let p=a,g=p.startsWith("//")?new URL(i.protocol+p):new URL(p);if(d.includes(g.protocol))throw new Error("Invalid redirect location");let m=jn(g.pathname,s)!=null;if(g.origin===i.origin&&m)return g.pathname+g.search+g.hash}try{let p=c.createURL(a);if(d.includes(p.protocol))throw new Error("Invalid redirect location")}catch{}return a}function sa(a,i,s,c){let d=a.createURL(sp(i)).toString(),p={signal:s};if(c&&en(c.formMethod)){let{formMethod:g,formEncType:m}=c;p.method=g.toUpperCase(),m==="application/json"?(p.headers=new Headers({"Content-Type":m}),p.body=JSON.stringify(c.json)):m==="text/plain"?p.body=c.text:m==="application/x-www-form-urlencoded"&&c.formData?p.body=xl(c.formData):p.body=c.formData}return new Request(d,p)}function xl(a){let i=new URLSearchParams;for(let[s,c]of a.entries())i.append(s,typeof c=="string"?c:c.name);return i}function jd(a){let i=new FormData;for(let[s,c]of a.entries())i.append(s,c);return i}function dh(a,i,s,c,d){let p={},g=null,m,h=!1,P={},x=s&&Ot(s[1])?s[1].error:void 0;return a.forEach(R=>{if(!(R.route.id in i))return;let A=R.route.id,O=i[A];if(be(!To(O),"Cannot handle redirect results in processLoaderData"),Ot(O)){let V=O.error;x!==void 0&&(V=x,x=void 0),g=g||{};{let B=_o(a,A);g[B.route.id]==null&&(g[B.route.id]=V)}p[A]=void 0,h||(h=!0,m=nr(O.error)?O.error.status:500),O.headers&&(P[A]=O.headers)}else ro(O)?(c.set(A,O.deferredData),p[A]=O.deferredData.data,O.statusCode!=null&&O.statusCode!==200&&!h&&(m=O.statusCode),O.headers&&(P[A]=O.headers)):(p[A]=O.data,O.statusCode&&O.statusCode!==200&&!h&&(m=O.statusCode),O.headers&&(P[A]=O.headers))}),x!==void 0&&s&&(g={[s[0]]:x},p[s[0]]=void 0),{loaderData:p,errors:g,statusCode:m||200,loaderHeaders:P}}function _d(a,i,s,c,d,p,g){let{loaderData:m,errors:h}=dh(i,s,c,g);return d.forEach(P=>{let{key:x,match:R,controller:A}=P,O=p[x];if(be(O,"Did not find corresponding fetcher result"),!(A&&A.signal.aborted))if(Ot(O)){let V=_o(a.matches,R==null?void 0:R.route.id);h&&h[V.route.id]||(h=Ge({},h,{[V.route.id]:O.error})),a.fetchers.delete(x)}else if(To(O))be(!1,"Unhandled fetcher revalidation redirect");else if(ro(O))be(!1,"Unhandled fetcher deferred data");else{let V=ao(O.data);a.fetchers.set(x,V)}}),{loaderData:m,errors:h}}function Td(a,i,s,c){let d=Ge({},i);for(let p of s){let g=p.route.id;if(i.hasOwnProperty(g)?i[g]!==void 0&&(d[g]=i[g]):a[g]!==void 0&&p.route.loader&&(d[g]=a[g]),c&&c.hasOwnProperty(g))break}return d}function Ad(a){return a?Ot(a[1])?{actionData:{}}:{actionData:{[a[0]]:a[1].data}}:{}}function _o(a,i){return(i?a.slice(0,a.findIndex(c=>c.route.id===i)+1):[...a]).reverse().find(c=>c.route.hasErrorBoundary===!0)||a[0]}function Md(a){let i=a.length===1?a[0]:a.find(s=>s.index||!s.path||s.path==="/")||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:i}],route:i}}function _t(a,i){let{pathname:s,routeId:c,method:d,type:p,message:g}=i===void 0?{}:i,m="Unknown Server Error",h="Unknown @remix-run/router error";return a===400?(m="Bad Request",d&&s&&c?h="You made a "+d+' request to "'+s+'" but '+('did not provide a `loader` for route "'+c+'", ')+"so there is no way to handle the request.":p==="defer-action"?h="defer() is not supported in actions":p==="invalid-body"&&(h="Unable to encode submission body")):a===403?(m="Forbidden",h='Route "'+c+'" does not match URL "'+s+'"'):a===404?(m="Not Found",h='No route matches URL "'+s+'"'):a===405&&(m="Method Not Allowed",d&&s&&c?h="You made a "+d.toUpperCase()+' request to "'+s+'" but '+('did not provide an `action` for route "'+c+'", ')+"so there is no way to handle the request.":d&&(h='Invalid request method "'+d.toUpperCase()+'"')),new xi(a||500,m,new Error(h),!0)}function mi(a){let i=Object.entries(a);for(let s=i.length-1;s>=0;s--){let[c,d]=i[s];if(To(d))return{key:c,result:d}}}function sp(a){let i=typeof a=="string"?_n(a):a;return Mo(Ge({},i,{hash:""}))}function ph(a,i){return a.pathname!==i.pathname||a.search!==i.search?!1:a.hash===""?i.hash!=="":a.hash===i.hash?!0:i.hash!==""}function gh(a){return lp(a.result)&&Zf.has(a.result.status)}function ro(a){return a.type===We.deferred}function Ot(a){return a.type===We.error}function To(a){return(a&&a.type)===We.redirect}function Nd(a){return typeof a=="object"&&a!=null&&"type"in a&&"data"in a&&"init"in a&&a.type==="DataWithResponseInit"}function fh(a){let i=a;return i&&typeof i=="object"&&typeof i.data=="object"&&typeof i.subscribe=="function"&&typeof i.cancel=="function"&&typeof i.resolveData=="function"}function lp(a){return a!=null&&typeof a.status=="number"&&typeof a.statusText=="string"&&typeof a.headers=="object"&&typeof a.body<"u"}function hh(a){return Jf.has(a.toLowerCase())}function en(a){return Gf.has(a.toLowerCase())}async function mh(a,i,s,c,d){let p=Object.entries(i);for(let g=0;g<p.length;g++){let[m,h]=p[g],P=a.find(A=>(A==null?void 0:A.route.id)===m);if(!P)continue;let x=c.find(A=>A.route.id===P.route.id),R=x!=null&&!rp(x,P)&&(d&&d[P.route.id])!==void 0;ro(h)&&R&&await Ml(h,s,!1).then(A=>{A&&(i[m]=A)})}}async function yh(a,i,s){for(let c=0;c<s.length;c++){let{key:d,routeId:p,controller:g}=s[c],m=i[d];a.find(P=>(P==null?void 0:P.route.id)===p)&&ro(m)&&(be(g,"Expected an AbortController for revalidating fetcher deferred result"),await Ml(m,g.signal,!0).then(P=>{P&&(i[d]=P)}))}}async function Ml(a,i,s){if(s===void 0&&(s=!1),!await a.deferredData.resolveData(i)){if(s)try{return{type:We.data,data:a.deferredData.unwrappedData}}catch(d){return{type:We.error,error:d}}return{type:We.data,data:a.deferredData.data}}}function Nl(a){return new URLSearchParams(a).getAll("index").some(i=>i==="")}function er(a,i){let s=typeof i=="string"?_n(i).search:i.search;if(a[a.length-1].route.index&&Nl(s||""))return a[a.length-1];let c=np(a);return c[c.length-1]}function Ld(a){let{formMethod:i,formAction:s,formEncType:c,text:d,formData:p,json:g}=a;if(!(!i||!s||!c)){if(d!=null)return{formMethod:i,formAction:s,formEncType:c,formData:void 0,json:void 0,text:d};if(p!=null)return{formMethod:i,formAction:s,formEncType:c,formData:p,json:void 0,text:void 0};if(g!==void 0)return{formMethod:i,formAction:s,formEncType:c,formData:void 0,json:g,text:void 0}}}function ml(a,i){return i?{state:"loading",location:a,formMethod:i.formMethod,formAction:i.formAction,formEncType:i.formEncType,formData:i.formData,json:i.json,text:i.text}:{state:"loading",location:a,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function vh(a,i){return{state:"submitting",location:a,formMethod:i.formMethod,formAction:i.formAction,formEncType:i.formEncType,formData:i.formData,json:i.json,text:i.text}}function Za(a,i){return a?{state:"loading",formMethod:a.formMethod,formAction:a.formAction,formEncType:a.formEncType,formData:a.formData,json:a.json,text:a.text,data:i}:{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:i}}function Ph(a,i){return{state:"submitting",formMethod:a.formMethod,formAction:a.formAction,formEncType:a.formEncType,formData:a.formData,json:a.json,text:a.text,data:i?i.data:void 0}}function ao(a){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:a}}function wh(a,i){try{let s=a.sessionStorage.getItem(ap);if(s){let c=JSON.parse(s);for(let[d,p]of Object.entries(c||{}))p&&Array.isArray(p)&&i.set(d,new Set(p||[]))}}catch{}}function Sh(a,i){if(i.size>0){let s={};for(let[c,d]of i)s[c]=[...d];try{a.sessionStorage.setItem(ap,JSON.stringify(s))}catch(c){io(!1,"Failed to save applied view transitions in sessionStorage ("+c+").")}}}/**
52
52
  * React Router v6.30.3
53
53
  *
54
54
  * Copyright (c) Remix Software Inc.
@@ -57,7 +57,7 @@ Error generating stack: `+l.message+`
57
57
  * LICENSE.md file in the root directory of this source tree.
58
58
  *
59
59
  * @license MIT
60
- */function Ci(){return Ci=Object.assign?Object.assign.bind():function(a){for(var i=1;i<arguments.length;i++){var s=arguments[i];for(var c in s)Object.prototype.hasOwnProperty.call(s,c)&&(a[c]=s[c])}return a},Ci.apply(this,arguments)}const ar=T.createContext(null),Al=T.createContext(null),ln=T.createContext(null),Dl=T.createContext(null),To=T.createContext({outlet:null,matches:[],isDataRoute:!1}),cp=T.createContext(null);function Sh(a,i){let{relative:s}=i===void 0?{}:i;rr()||be(!1);let{basename:c,navigator:d}=T.useContext(ln),{hash:p,pathname:f,search:m}=Ri(a,{relative:s}),h=f;return c!=="/"&&(h=f==="/"?c:jo([c,f])),d.createHref({pathname:h,search:m,hash:p})}function rr(){return T.useContext(Dl)!=null}function cn(){return rr()||be(!1),T.useContext(Dl).location}function up(a){T.useContext(ln).static||T.useLayoutEffect(a)}function bh(){let{isDataRoute:a}=T.useContext(To);return a?Ih():xh()}function xh(){rr()||be(!1);let a=T.useContext(ar),{basename:i,future:s,navigator:c}=T.useContext(ln),{matches:d}=T.useContext(To),{pathname:p}=cn(),f=JSON.stringify(_l(d,s.v7_relativeSplatPath)),m=T.useRef(!1);return up(()=>{m.current=!0}),T.useCallback(function(P,x){if(x===void 0&&(x={}),!m.current)return;if(typeof P=="number"){c.go(P);return}let C=Tl(P,JSON.parse(f),p,x.relative==="path");a==null&&i!=="/"&&(C.pathname=C.pathname==="/"?i:jo([i,C.pathname])),(x.replace?c.replace:c.push)(C,x.state,x)},[i,c,f,p,a])}const Ch=T.createContext(null);function Rh(a){let i=T.useContext(To).outlet;return i&&T.createElement(Ch.Provider,{value:a},i)}function bv(){let{matches:a}=T.useContext(To),i=a[a.length-1];return i?i.params:{}}function Ri(a,i){let{relative:s}=i===void 0?{}:i,{future:c}=T.useContext(ln),{matches:d}=T.useContext(To),{pathname:p}=cn(),f=JSON.stringify(_l(d,c.v7_relativeSplatPath));return T.useMemo(()=>Tl(a,JSON.parse(f),p,s==="path"),[a,f,p,s])}function jh(a,i,s,c){rr()||be(!1);let{navigator:d}=T.useContext(ln),{matches:p}=T.useContext(To),f=p[p.length-1],m=f?f.params:{};f&&f.pathname;let h=f?f.pathnameBase:"/";f&&f.route;let P=cn(),x;x=P;let C=x.pathname||"/",M=C;if(h!=="/"){let F=h.replace(/^\//,"").split("/");M="/"+C.replace(/^\//,"").split("/").slice(F.length).join("/")}let O=En(a,{pathname:M});return Nh(O&&O.map(F=>Object.assign({},F,{params:Object.assign({},m,F.params),pathname:jo([h,d.encodeLocation?d.encodeLocation(F.pathname).pathname:F.pathname]),pathnameBase:F.pathnameBase==="/"?h:jo([h,d.encodeLocation?d.encodeLocation(F.pathnameBase).pathname:F.pathnameBase])})),p,s,c)}function Eh(){let a=zh(),i=or(a)?a.status+" "+a.statusText:a instanceof Error?a.message:JSON.stringify(a),s=a instanceof Error?a.stack:null,d={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return T.createElement(T.Fragment,null,T.createElement("h2",null,"Unexpected Application Error!"),T.createElement("h3",{style:{fontStyle:"italic"}},i),s?T.createElement("pre",{style:d},s):null,null)}const _h=T.createElement(Eh,null);class Th extends T.Component{constructor(i){super(i),this.state={location:i.location,revalidation:i.revalidation,error:i.error}}static getDerivedStateFromError(i){return{error:i}}static getDerivedStateFromProps(i,s){return s.location!==i.location||s.revalidation!=="idle"&&i.revalidation==="idle"?{error:i.error,location:i.location,revalidation:i.revalidation}:{error:i.error!==void 0?i.error:s.error,location:s.location,revalidation:i.revalidation||s.revalidation}}componentDidCatch(i,s){console.error("React Router caught the following error during render",i,s)}render(){return this.state.error!==void 0?T.createElement(To.Provider,{value:this.props.routeContext},T.createElement(cp.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function Mh(a){let{routeContext:i,match:s,children:c}=a,d=T.useContext(ar);return d&&d.static&&d.staticContext&&(s.route.errorElement||s.route.ErrorBoundary)&&(d.staticContext._deepestRenderedBoundaryId=s.route.id),T.createElement(To.Provider,{value:i},c)}function Nh(a,i,s,c){var d;if(i===void 0&&(i=[]),s===void 0&&(s=null),c===void 0&&(c=null),a==null){var p;if(!s)return null;if(s.errors)a=s.matches;else if((p=c)!=null&&p.v7_partialHydration&&i.length===0&&!s.initialized&&s.matches.length>0)a=s.matches;else return null}let f=a,m=(d=s)==null?void 0:d.errors;if(m!=null){let x=f.findIndex(C=>C.route.id&&(m==null?void 0:m[C.route.id])!==void 0);x>=0||be(!1),f=f.slice(0,Math.min(f.length,x+1))}let h=!1,P=-1;if(s&&c&&c.v7_partialHydration)for(let x=0;x<f.length;x++){let C=f[x];if((C.route.HydrateFallback||C.route.hydrateFallbackElement)&&(P=x),C.route.id){let{loaderData:M,errors:O}=s,H=C.route.loader&&M[C.route.id]===void 0&&(!O||O[C.route.id]===void 0);if(C.route.lazy||H){h=!0,P>=0?f=f.slice(0,P+1):f=[f[0]];break}}}return f.reduceRight((x,C,M)=>{let O,H=!1,F=null,U=null;s&&(O=m&&C.route.id?m[C.route.id]:void 0,F=C.route.errorElement||_h,h&&(P<0&&M===0?(Oh("route-fallback"),H=!0,U=null):P===M&&(H=!0,U=C.route.hydrateFallbackElement||null)));let ge=i.concat(f.slice(0,M+1)),q=()=>{let ue;return O?ue=F:H?ue=U:C.route.Component?ue=T.createElement(C.route.Component,null):C.route.element?ue=C.route.element:ue=x,T.createElement(Mh,{match:C,routeContext:{outlet:x,matches:ge,isDataRoute:s!=null},children:ue})};return s&&(C.route.ErrorBoundary||C.route.errorElement||M===0)?T.createElement(Th,{location:s.location,revalidation:s.revalidation,component:F,error:O,children:q(),routeContext:{outlet:null,matches:ge,isDataRoute:!0}}):q()},null)}var dp=(function(a){return a.UseBlocker="useBlocker",a.UseRevalidator="useRevalidator",a.UseNavigateStable="useNavigate",a})(dp||{}),pp=(function(a){return a.UseBlocker="useBlocker",a.UseLoaderData="useLoaderData",a.UseActionData="useActionData",a.UseRouteError="useRouteError",a.UseNavigation="useNavigation",a.UseRouteLoaderData="useRouteLoaderData",a.UseMatches="useMatches",a.UseRevalidator="useRevalidator",a.UseNavigateStable="useNavigate",a.UseRouteId="useRouteId",a})(pp||{});function Lh(a){let i=T.useContext(ar);return i||be(!1),i}function Ah(a){let i=T.useContext(Al);return i||be(!1),i}function Dh(a){let i=T.useContext(To);return i||be(!1),i}function fp(a){let i=Dh(),s=i.matches[i.matches.length-1];return s.route.id||be(!1),s.route.id}function zh(){var a;let i=T.useContext(cp),s=Ah(),c=fp();return i!==void 0?i:(a=s.errors)==null?void 0:a[c]}function Ih(){let{router:a}=Lh(dp.UseNavigateStable),i=fp(pp.UseNavigateStable),s=T.useRef(!1);return up(()=>{s.current=!0}),T.useCallback(function(d,p){p===void 0&&(p={}),s.current&&(typeof d=="number"?a.navigate(d):a.navigate(d,Ci({fromRouteId:i},p)))},[a,i])}const Dd={};function Oh(a,i,s){Dd[a]||(Dd[a]=!0)}function Fh(a,i){a==null||a.v7_startTransition,(a==null?void 0:a.v7_relativeSplatPath)===void 0&&(!i||i.v7_relativeSplatPath),i&&(i.v7_fetcherPersist,i.v7_normalizeFormMethod,i.v7_partialHydration,i.v7_skipActionErrorRevalidation)}function Bh(a){return Rh(a.context)}function Wh(a){let{basename:i="/",children:s=null,location:c,navigationType:d=rt.Pop,navigator:p,static:f=!1,future:m}=a;rr()&&be(!1);let h=i.replace(/^\/*/,"/"),P=T.useMemo(()=>({basename:h,navigator:p,static:f,future:Ci({v7_relativeSplatPath:!1},m)}),[h,m,p,f]);typeof c=="string"&&(c=_o(c));let{pathname:x="/",search:C="",hash:M="",state:O=null,key:H="default"}=c,F=T.useMemo(()=>{let U=Eo(x,h);return U==null?null:{location:{pathname:U,search:C,hash:M,state:O,key:H},navigationType:d}},[h,x,C,M,O,H,d]);return F==null?null:T.createElement(ln.Provider,{value:P},T.createElement(Dl.Provider,{children:s,value:F}))}new Promise(()=>{});function Uh(a){let i={hasErrorBoundary:a.ErrorBoundary!=null||a.errorElement!=null};return a.Component&&Object.assign(i,{element:T.createElement(a.Component),Component:void 0}),a.HydrateFallback&&Object.assign(i,{hydrateFallbackElement:T.createElement(a.HydrateFallback),HydrateFallback:void 0}),a.ErrorBoundary&&Object.assign(i,{errorElement:T.createElement(a.ErrorBoundary),ErrorBoundary:void 0}),i}/**
60
+ */function Ri(){return Ri=Object.assign?Object.assign.bind():function(a){for(var i=1;i<arguments.length;i++){var s=arguments[i];for(var c in s)Object.prototype.hasOwnProperty.call(s,c)&&(a[c]=s[c])}return a},Ri.apply(this,arguments)}const ar=T.createContext(null),Ll=T.createContext(null),so=T.createContext(null),zl=T.createContext(null),Tn=T.createContext({outlet:null,matches:[],isDataRoute:!1}),cp=T.createContext(null);function kh(a,i){let{relative:s}=i===void 0?{}:i;rr()||be(!1);let{basename:c,navigator:d}=T.useContext(so),{hash:p,pathname:g,search:m}=Ci(a,{relative:s}),h=g;return c!=="/"&&(h=g==="/"?c:En([c,g])),d.createHref({pathname:h,search:m,hash:p})}function rr(){return T.useContext(zl)!=null}function lo(){return rr()||be(!1),T.useContext(zl).location}function up(a){T.useContext(so).static||T.useLayoutEffect(a)}function bh(){let{isDataRoute:a}=T.useContext(Tn);return a?Ih():xh()}function xh(){rr()||be(!1);let a=T.useContext(ar),{basename:i,future:s,navigator:c}=T.useContext(so),{matches:d}=T.useContext(Tn),{pathname:p}=lo(),g=JSON.stringify(_l(d,s.v7_relativeSplatPath)),m=T.useRef(!1);return up(()=>{m.current=!0}),T.useCallback(function(P,x){if(x===void 0&&(x={}),!m.current)return;if(typeof P=="number"){c.go(P);return}let R=Tl(P,JSON.parse(g),p,x.relative==="path");a==null&&i!=="/"&&(R.pathname=R.pathname==="/"?i:En([i,R.pathname])),(x.replace?c.replace:c.push)(R,x.state,x)},[i,c,g,p,a])}const Rh=T.createContext(null);function Ch(a){let i=T.useContext(Tn).outlet;return i&&T.createElement(Rh.Provider,{value:a},i)}function xv(){let{matches:a}=T.useContext(Tn),i=a[a.length-1];return i?i.params:{}}function Ci(a,i){let{relative:s}=i===void 0?{}:i,{future:c}=T.useContext(so),{matches:d}=T.useContext(Tn),{pathname:p}=lo(),g=JSON.stringify(_l(d,c.v7_relativeSplatPath));return T.useMemo(()=>Tl(a,JSON.parse(g),p,s==="path"),[a,g,p,s])}function Eh(a,i,s,c){rr()||be(!1);let{navigator:d}=T.useContext(so),{matches:p}=T.useContext(Tn),g=p[p.length-1],m=g?g.params:{};g&&g.pathname;let h=g?g.pathnameBase:"/";g&&g.route;let P=lo(),x;x=P;let R=x.pathname||"/",A=R;if(h!=="/"){let B=h.replace(/^\//,"").split("/");A="/"+R.replace(/^\//,"").split("/").slice(B.length).join("/")}let O=jo(a,{pathname:A});return Mh(O&&O.map(B=>Object.assign({},B,{params:Object.assign({},m,B.params),pathname:En([h,d.encodeLocation?d.encodeLocation(B.pathname).pathname:B.pathname]),pathnameBase:B.pathnameBase==="/"?h:En([h,d.encodeLocation?d.encodeLocation(B.pathnameBase).pathname:B.pathnameBase])})),p,s,c)}function jh(){let a=Dh(),i=nr(a)?a.status+" "+a.statusText:a instanceof Error?a.message:JSON.stringify(a),s=a instanceof Error?a.stack:null,d={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return T.createElement(T.Fragment,null,T.createElement("h2",null,"Unexpected Application Error!"),T.createElement("h3",{style:{fontStyle:"italic"}},i),s?T.createElement("pre",{style:d},s):null,null)}const _h=T.createElement(jh,null);class Th extends T.Component{constructor(i){super(i),this.state={location:i.location,revalidation:i.revalidation,error:i.error}}static getDerivedStateFromError(i){return{error:i}}static getDerivedStateFromProps(i,s){return s.location!==i.location||s.revalidation!=="idle"&&i.revalidation==="idle"?{error:i.error,location:i.location,revalidation:i.revalidation}:{error:i.error!==void 0?i.error:s.error,location:s.location,revalidation:i.revalidation||s.revalidation}}componentDidCatch(i,s){console.error("React Router caught the following error during render",i,s)}render(){return this.state.error!==void 0?T.createElement(Tn.Provider,{value:this.props.routeContext},T.createElement(cp.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function Ah(a){let{routeContext:i,match:s,children:c}=a,d=T.useContext(ar);return d&&d.static&&d.staticContext&&(s.route.errorElement||s.route.ErrorBoundary)&&(d.staticContext._deepestRenderedBoundaryId=s.route.id),T.createElement(Tn.Provider,{value:i},c)}function Mh(a,i,s,c){var d;if(i===void 0&&(i=[]),s===void 0&&(s=null),c===void 0&&(c=null),a==null){var p;if(!s)return null;if(s.errors)a=s.matches;else if((p=c)!=null&&p.v7_partialHydration&&i.length===0&&!s.initialized&&s.matches.length>0)a=s.matches;else return null}let g=a,m=(d=s)==null?void 0:d.errors;if(m!=null){let x=g.findIndex(R=>R.route.id&&(m==null?void 0:m[R.route.id])!==void 0);x>=0||be(!1),g=g.slice(0,Math.min(g.length,x+1))}let h=!1,P=-1;if(s&&c&&c.v7_partialHydration)for(let x=0;x<g.length;x++){let R=g[x];if((R.route.HydrateFallback||R.route.hydrateFallbackElement)&&(P=x),R.route.id){let{loaderData:A,errors:O}=s,V=R.route.loader&&A[R.route.id]===void 0&&(!O||O[R.route.id]===void 0);if(R.route.lazy||V){h=!0,P>=0?g=g.slice(0,P+1):g=[g[0]];break}}}return g.reduceRight((x,R,A)=>{let O,V=!1,B=null,U=null;s&&(O=m&&R.route.id?m[R.route.id]:void 0,B=R.route.errorElement||_h,h&&(P<0&&A===0?(Oh("route-fallback"),V=!0,U=null):P===A&&(V=!0,U=R.route.hydrateFallbackElement||null)));let fe=i.concat(g.slice(0,A+1)),q=()=>{let ue;return O?ue=B:V?ue=U:R.route.Component?ue=T.createElement(R.route.Component,null):R.route.element?ue=R.route.element:ue=x,T.createElement(Ah,{match:R,routeContext:{outlet:x,matches:fe,isDataRoute:s!=null},children:ue})};return s&&(R.route.ErrorBoundary||R.route.errorElement||A===0)?T.createElement(Th,{location:s.location,revalidation:s.revalidation,component:B,error:O,children:q(),routeContext:{outlet:null,matches:fe,isDataRoute:!0}}):q()},null)}var dp=(function(a){return a.UseBlocker="useBlocker",a.UseRevalidator="useRevalidator",a.UseNavigateStable="useNavigate",a})(dp||{}),pp=(function(a){return a.UseBlocker="useBlocker",a.UseLoaderData="useLoaderData",a.UseActionData="useActionData",a.UseRouteError="useRouteError",a.UseNavigation="useNavigation",a.UseRouteLoaderData="useRouteLoaderData",a.UseMatches="useMatches",a.UseRevalidator="useRevalidator",a.UseNavigateStable="useNavigate",a.UseRouteId="useRouteId",a})(pp||{});function Nh(a){let i=T.useContext(ar);return i||be(!1),i}function Lh(a){let i=T.useContext(Ll);return i||be(!1),i}function zh(a){let i=T.useContext(Tn);return i||be(!1),i}function gp(a){let i=zh(),s=i.matches[i.matches.length-1];return s.route.id||be(!1),s.route.id}function Dh(){var a;let i=T.useContext(cp),s=Lh(),c=gp();return i!==void 0?i:(a=s.errors)==null?void 0:a[c]}function Ih(){let{router:a}=Nh(dp.UseNavigateStable),i=gp(pp.UseNavigateStable),s=T.useRef(!1);return up(()=>{s.current=!0}),T.useCallback(function(d,p){p===void 0&&(p={}),s.current&&(typeof d=="number"?a.navigate(d):a.navigate(d,Ri({fromRouteId:i},p)))},[a,i])}const zd={};function Oh(a,i,s){zd[a]||(zd[a]=!0)}function Bh(a,i){a==null||a.v7_startTransition,(a==null?void 0:a.v7_relativeSplatPath)===void 0&&(!i||i.v7_relativeSplatPath),i&&(i.v7_fetcherPersist,i.v7_normalizeFormMethod,i.v7_partialHydration,i.v7_skipActionErrorRevalidation)}function Wh(a){return Ch(a.context)}function Fh(a){let{basename:i="/",children:s=null,location:c,navigationType:d=rt.Pop,navigator:p,static:g=!1,future:m}=a;rr()&&be(!1);let h=i.replace(/^\/*/,"/"),P=T.useMemo(()=>({basename:h,navigator:p,static:g,future:Ri({v7_relativeSplatPath:!1},m)}),[h,m,p,g]);typeof c=="string"&&(c=_n(c));let{pathname:x="/",search:R="",hash:A="",state:O=null,key:V="default"}=c,B=T.useMemo(()=>{let U=jn(x,h);return U==null?null:{location:{pathname:U,search:R,hash:A,state:O,key:V},navigationType:d}},[h,x,R,A,O,V,d]);return B==null?null:T.createElement(so.Provider,{value:P},T.createElement(zl.Provider,{children:s,value:B}))}new Promise(()=>{});function Uh(a){let i={hasErrorBoundary:a.ErrorBoundary!=null||a.errorElement!=null};return a.Component&&Object.assign(i,{element:T.createElement(a.Component),Component:void 0}),a.HydrateFallback&&Object.assign(i,{hydrateFallbackElement:T.createElement(a.HydrateFallback),HydrateFallback:void 0}),a.ErrorBoundary&&Object.assign(i,{errorElement:T.createElement(a.ErrorBoundary),ErrorBoundary:void 0}),i}/**
61
61
  * React Router DOM v6.30.3
62
62
  *
63
63
  * Copyright (c) Remix Software Inc.
@@ -66,7 +66,7 @@ Error generating stack: `+l.message+`
66
66
  * LICENSE.md file in the root directory of this source tree.
67
67
  *
68
68
  * @license MIT
69
- */function ca(){return ca=Object.assign?Object.assign.bind():function(a){for(var i=1;i<arguments.length;i++){var s=arguments[i];for(var c in s)Object.prototype.hasOwnProperty.call(s,c)&&(a[c]=s[c])}return a},ca.apply(this,arguments)}function gp(a,i){if(a==null)return{};var s={},c=Object.keys(a),d,p;for(p=0;p<c.length;p++)d=c[p],!(i.indexOf(d)>=0)&&(s[d]=a[d]);return s}function Hh(a){return!!(a.metaKey||a.altKey||a.ctrlKey||a.shiftKey)}function Vh(a,i){return a.button===0&&(!i||i==="_self")&&!Hh(a)}const Yh=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],qh=["aria-current","caseSensitive","className","end","style","to","viewTransition","children"],Kh="6";try{window.__reactRouterVersion=Kh}catch{}function $h(a,i){return oh({basename:void 0,future:ca({},void 0,{v7_prependBasename:!0}),history:Cg({window:void 0}),hydrationData:Qh(),routes:a,mapRouteProperties:Uh,dataStrategy:void 0,patchRoutesOnNavigation:void 0,window:void 0}).initialize()}function Qh(){var a;let i=(a=window)==null?void 0:a.__staticRouterHydrationData;return i&&i.errors&&(i=ca({},i,{errors:Gh(i.errors)})),i}function Gh(a){if(!a)return null;let i=Object.entries(a),s={};for(let[c,d]of i)if(d&&d.__type==="RouteErrorResponse")s[c]=new xi(d.status,d.statusText,d.data,d.internal===!0);else if(d&&d.__type==="Error"){if(d.__subType){let p=window[d.__subType];if(typeof p=="function")try{let f=new p(d.message);f.stack="",s[c]=f}catch{}}if(s[c]==null){let p=new Error(d.message);p.stack="",s[c]=p}}else s[c]=d;return s}const hp=T.createContext({isTransitioning:!1}),Jh=T.createContext(new Map),Xh="startTransition",zd=Sg[Xh],Zh="flushSync",Id=xg[Zh];function em(a){zd?zd(a):a()}function Za(a){Id?Id(a):a()}class tm{constructor(){this.status="pending",this.promise=new Promise((i,s)=>{this.resolve=c=>{this.status==="pending"&&(this.status="resolved",i(c))},this.reject=c=>{this.status==="pending"&&(this.status="rejected",s(c))}})}}function om(a){let{fallbackElement:i,router:s,future:c}=a,[d,p]=T.useState(s.state),[f,m]=T.useState(),[h,P]=T.useState({isTransitioning:!1}),[x,C]=T.useState(),[M,O]=T.useState(),[H,F]=T.useState(),U=T.useRef(new Map),{v7_startTransition:ge}=c||{},q=T.useCallback(J=>{ge?em(J):J()},[ge]),ue=T.useCallback((J,ke)=>{let{deletedFetchers:ie,flushSync:We,viewTransitionOpts:Te}=ke;J.fetchers.forEach((he,Ze)=>{he.data!==void 0&&U.current.set(Ze,he.data)}),ie.forEach(he=>U.current.delete(he));let ze=s.window==null||s.window.document==null||typeof s.window.document.startViewTransition!="function";if(!Te||ze){We?Za(()=>p(J)):q(()=>p(J));return}if(We){Za(()=>{M&&(x&&x.resolve(),M.skipTransition()),P({isTransitioning:!0,flushSync:!0,currentLocation:Te.currentLocation,nextLocation:Te.nextLocation})});let he=s.window.document.startViewTransition(()=>{Za(()=>p(J))});he.finished.finally(()=>{Za(()=>{C(void 0),O(void 0),m(void 0),P({isTransitioning:!1})})}),Za(()=>O(he));return}M?(x&&x.resolve(),M.skipTransition(),F({state:J,currentLocation:Te.currentLocation,nextLocation:Te.nextLocation})):(m(J),P({isTransitioning:!0,flushSync:!1,currentLocation:Te.currentLocation,nextLocation:Te.nextLocation}))},[s.window,M,x,U,q]);T.useLayoutEffect(()=>s.subscribe(ue),[s,ue]),T.useEffect(()=>{h.isTransitioning&&!h.flushSync&&C(new tm)},[h]),T.useEffect(()=>{if(x&&f&&s.window){let J=f,ke=x.promise,ie=s.window.document.startViewTransition(async()=>{q(()=>p(J)),await ke});ie.finished.finally(()=>{C(void 0),O(void 0),m(void 0),P({isTransitioning:!1})}),O(ie)}},[q,f,x,s.window]),T.useEffect(()=>{x&&f&&d.location.key===f.location.key&&x.resolve()},[x,M,d.location,f]),T.useEffect(()=>{!h.isTransitioning&&H&&(m(H.state),P({isTransitioning:!0,flushSync:!1,currentLocation:H.currentLocation,nextLocation:H.nextLocation}),F(void 0))},[h.isTransitioning,H]),T.useEffect(()=>{},[]);let re=T.useMemo(()=>({createHref:s.createHref,encodeLocation:s.encodeLocation,go:J=>s.navigate(J),push:(J,ke,ie)=>s.navigate(J,{state:ke,preventScrollReset:ie==null?void 0:ie.preventScrollReset}),replace:(J,ke,ie)=>s.navigate(J,{replace:!0,state:ke,preventScrollReset:ie==null?void 0:ie.preventScrollReset})}),[s]),xe=s.basename||"/",Ee=T.useMemo(()=>({router:s,navigator:re,static:!1,basename:xe}),[s,re,xe]),E=T.useMemo(()=>({v7_relativeSplatPath:s.future.v7_relativeSplatPath}),[s.future.v7_relativeSplatPath]);return T.useEffect(()=>Fh(c,s.future),[c,s.future]),T.createElement(T.Fragment,null,T.createElement(ar.Provider,{value:Ee},T.createElement(Al.Provider,{value:d},T.createElement(Jh.Provider,{value:U.current},T.createElement(hp.Provider,{value:h},T.createElement(Wh,{basename:xe,location:d.location,navigationType:d.historyAction,navigator:re,future:E},d.initialized||s.future.v7_partialHydration?T.createElement(nm,{routes:s.routes,future:s.future,state:d}):i))))),null)}const nm=T.memo(am);function am(a){let{routes:i,future:s,state:c}=a;return jh(i,void 0,c,s)}const rm=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",im=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,zl=T.forwardRef(function(i,s){let{onClick:c,relative:d,reloadDocument:p,replace:f,state:m,target:h,to:P,preventScrollReset:x,viewTransition:C}=i,M=gp(i,Yh),{basename:O}=T.useContext(ln),H,F=!1;if(typeof P=="string"&&im.test(P)&&(H=P,rm))try{let ue=new URL(window.location.href),re=P.startsWith("//")?new URL(ue.protocol+P):new URL(P),xe=Eo(re.pathname,O);re.origin===ue.origin&&xe!=null?P=xe+re.search+re.hash:F=!0}catch{}let U=Sh(P,{relative:d}),ge=cm(P,{replace:f,state:m,target:h,preventScrollReset:x,relative:d,viewTransition:C});function q(ue){c&&c(ue),ue.defaultPrevented||ge(ue)}return T.createElement("a",ca({},M,{href:H||U,onClick:F||p?c:q,ref:s,target:h}))}),sm=T.forwardRef(function(i,s){let{"aria-current":c="page",caseSensitive:d=!1,className:p="",end:f=!1,style:m,to:h,viewTransition:P,children:x}=i,C=gp(i,qh),M=Ri(h,{relative:C.relative}),O=cn(),H=T.useContext(Al),{navigator:F,basename:U}=T.useContext(ln),ge=H!=null&&um(M)&&P===!0,q=F.encodeLocation?F.encodeLocation(M).pathname:M.pathname,ue=O.pathname,re=H&&H.navigation&&H.navigation.location?H.navigation.location.pathname:null;d||(ue=ue.toLowerCase(),re=re?re.toLowerCase():null,q=q.toLowerCase()),re&&U&&(re=Eo(re,U)||re);const xe=q!=="/"&&q.endsWith("/")?q.length-1:q.length;let Ee=ue===q||!f&&ue.startsWith(q)&&ue.charAt(xe)==="/",E=re!=null&&(re===q||!f&&re.startsWith(q)&&re.charAt(q.length)==="/"),J={isActive:Ee,isPending:E,isTransitioning:ge},ke=Ee?c:void 0,ie;typeof p=="function"?ie=p(J):ie=[p,Ee?"active":null,E?"pending":null,ge?"transitioning":null].filter(Boolean).join(" ");let We=typeof m=="function"?m(J):m;return T.createElement(zl,ca({},C,{"aria-current":ke,className:ie,ref:s,style:We,to:h,viewTransition:P}),typeof x=="function"?x(J):x)});var Cl;(function(a){a.UseScrollRestoration="useScrollRestoration",a.UseSubmit="useSubmit",a.UseSubmitFetcher="useSubmitFetcher",a.UseFetcher="useFetcher",a.useViewTransitionState="useViewTransitionState"})(Cl||(Cl={}));var Od;(function(a){a.UseFetcher="useFetcher",a.UseFetchers="useFetchers",a.UseScrollRestoration="useScrollRestoration"})(Od||(Od={}));function lm(a){let i=T.useContext(ar);return i||be(!1),i}function cm(a,i){let{target:s,replace:c,state:d,preventScrollReset:p,relative:f,viewTransition:m}=i===void 0?{}:i,h=bh(),P=cn(),x=Ri(a,{relative:f});return T.useCallback(C=>{if(Vh(C,s)){C.preventDefault();let M=c!==void 0?c:Nn(P)===Nn(x);h(a,{replace:M,state:d,preventScrollReset:p,relative:f,viewTransition:m})}},[P,h,x,c,d,s,a,p,f,m])}function um(a,i){i===void 0&&(i={});let s=T.useContext(hp);s==null&&be(!1);let{basename:c}=lm(Cl.useViewTransitionState),d=Ri(a,{relative:i.relative});if(!s.isTransitioning)return!1;let p=Eo(s.currentLocation.pathname,c)||s.currentLocation.pathname,f=Eo(s.nextLocation.pathname,c)||s.nextLocation.pathname;return bi(d.pathname,f)!=null||bi(d.pathname,p)!=null}const dm="modulepreload",pm=function(a){return"/dashboard/"+a},Fd={},Ro=function(i,s,c){let d=Promise.resolve();if(s&&s.length>0){let f=function(P){return Promise.all(P.map(x=>Promise.resolve(x).then(C=>({status:"fulfilled",value:C}),C=>({status:"rejected",reason:C}))))};document.getElementsByTagName("link");const m=document.querySelector("meta[property=csp-nonce]"),h=(m==null?void 0:m.nonce)||(m==null?void 0:m.getAttribute("nonce"));d=f(s.map(P=>{if(P=pm(P),P in Fd)return;Fd[P]=!0;const x=P.endsWith(".css"),C=x?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${P}"]${C}`))return;const M=document.createElement("link");if(M.rel=x?"stylesheet":dm,x||(M.as="script"),M.crossOrigin="",M.href=P,h&&M.setAttribute("nonce",h),document.head.appendChild(M),x)return new Promise((O,H)=>{M.addEventListener("load",O),M.addEventListener("error",()=>H(new Error(`Unable to preload CSS for ${P}`)))})}))}function p(f){const m=new Event("vite:preloadError",{cancelable:!0});if(m.payload=f,window.dispatchEvent(m),!m.defaultPrevented)throw f}return d.then(f=>{for(const m of f||[])m.status==="rejected"&&p(m.reason);return i().catch(p)})},ji=window.location.origin,fm=3e3,gm=5e3;class hm extends Error{constructor(s,c,d=null,p=null){super(c);Co(this,"status");Co(this,"error");Co(this,"payload");this.name="ApiClientError",this.status=s,this.error=d,this.payload=p}}function mm(a){var s,c;const i=(c=(s=a.headers)==null?void 0:s.get)==null?void 0:c.call(s,"content-type");return typeof i=="string"&&i.toLowerCase().includes("application/json")}async function ym(a){if(!mm(a))return null;try{const i=await a.json();if(i&&typeof i=="object")return i}catch{return null}return null}async function yl(a){if(a.ok)return;const i=await ym(a),s=typeof(i==null?void 0:i.message)=="string"&&i.message.trim().length>0?i.message:`API ${a.status}: ${a.statusText}`,c=typeof(i==null?void 0:i.error)=="string"?i.error:null;throw new hm(a.status,s,c,i)}class vm{constructor(i){Co(this,"base");this.base=i}async get(i,s){const c=new URL(i,this.base);s&&Object.entries(s).forEach(([p,f])=>c.searchParams.set(p,f));const d=await fetch(c.toString(),{method:"GET"});return await yl(d),d.json()}async patch(i,s){const c=new URL(i,this.base),d=await fetch(c.toString(),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});return await yl(d),d.json()}async post(i,s){const c=new URL(i,this.base),d=await fetch(c.toString(),{method:"POST",headers:s?{"Content-Type":"application/json"}:{},body:s?JSON.stringify(s):void 0});return await yl(d),d.json()}}const po=new vm(ji);function Pm(a){return a.pluginClients&&a.pluginClients.length>0?"studioConnected":(a.connectedClients===0||!a.pluginClients,"serverOnly")}const mp=T.createContext(null);function wm({children:a}){const[i,s]=T.useState("disconnected"),[c,d]=T.useState(null),[p,f]=T.useState(null),m=T.useRef(null);return T.useEffect(()=>{let h=!1;async function P(){try{const x=await po.get("/status");if(h)return;d(x),s(Pm(x)),f(null)}catch(x){if(h)return;s("disconnected"),f(x instanceof Error?x.message:String(x))}}return P(),m.current=setInterval(P,gm),()=>{h=!0,m.current&&clearInterval(m.current)}},[]),L.jsx(mp.Provider,{value:{level:i,status:c,error:p},children:a})}function Il(){const a=T.useContext(mp);if(!a)throw new Error("useConnection must be used within a ConnectionProvider");return a}const km={"sidebar.overview":"Overview","sidebar.changelog":"Changelog","sidebar.connection":"Connection","sidebar.sync":"Sync","sidebar.playtest":"Playtest","sidebar.tools":"Tools","sidebar.settings":"Settings","sidebar.gate.l1":"MCP server connection required","sidebar.gate.l2":"Roblox Studio plugin connection required","header.currentProject":"Current Project","header.unknownProject":"Unknown project","header.projectRoot.label":"Project Root","header.currentProject.loading":"Loading project root...","header.currentProject.unavailable":"Project root unavailable","header.placeNotConnected":"Place not connected","header.currentProject.tooltip":"Currently selected project folder","header.currentProject.loading.tooltip":"Project root information is still loading","header.currentProject.unavailable.tooltip":"Current project root information is unavailable","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Loading sync root...","header.currentProjectSyncRoot.unavailable":"Sync root unavailable","header.currentProjectSyncRoot.tooltip":"Current sync root folder for the selected project","header.currentProjectSyncRoot.loading.tooltip":"Sync root information is still loading","header.currentProjectSyncRoot.unavailable.tooltip":"Current sync root information is unavailable","header.testFiles.label":"Test Files","header.testFiles.unavailable":"Test files unavailable","header.testFiles.tooltip":"Current playtest files directory for the selected place","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"Plugin connection required","header.places.liveRequired":"Plugin connection required for live active place","header.place.tooltip":"Connected Roblox place","header.placeNotConnected.tooltip":"Place not connected","header.changeProjectRoot":"Change Project Root","header.changeProjectRoot.ariaLabel":"Change project root","header.changeProjectRoot.tooltip":"Change the current project root","header.changeProjectRoot.disabledTooltip.l0":"MCP server connection required before project root can be changed","header.changeProjectRoot.disabledTooltip.loading":"Project root information is still loading","header.changeProjectRoot.disabledTooltip.unavailable":"Current project root information is unavailable","header.projectRootModal.initial.title":"Change project root","header.projectRootModal.initial.body.connected":"After you choose a project folder, MCP will switch to the new project root and the current Studio contents will be fully resynced into the new <selected project folder>/weppy-project-sync target.","header.projectRootModal.initial.body.disconnected":"After you choose a project folder, MCP will switch to the new project root and use <selected project folder>/weppy-project-sync as the next sync target.","header.projectRootModal.initial.nextSyncRoot":"New sync target after selection","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"Current sync stops immediately.","header.projectRootModal.initial.warningFreshSync":"The current Studio contents will be used to build a fresh full sync in the new target.","header.projectRootModal.initial.warningNoMove":"Old sync folders are not moved automatically.","header.projectRootModal.initial.warningDeferredSync":"If Studio is not connected, full resync starts the next time the plugin connects.","header.projectRootModal.confirm.title":"Confirm new project root","header.projectRootModal.confirm.body":"Review the selected project folder before applying.","header.projectRootModal.confirm.projectRoot":"Selected project folder","header.projectRootModal.confirm.syncRoot":"New sync target","header.projectRootModal.confirm.warningNoMove":"Existing sync folders are not moved automatically.","header.projectRootModal.pick":"Choose folder","header.projectRootModal.apply":"Apply change","header.projectRootModal.cancel":"Cancel","header.projectRootModal.error":"Failed to change project root","status.online":"Online","status.offline":"Offline","status.idle":"Idle","status.syncing":"Syncing","status.error":"Error","status.initializing":"Initializing","level.l0.title":"Server disconnected","level.l0.message":"WEPPY Dashboard opened but MCP server has stopped or is not responding.","level.l1.title":"Server connected","level.l1.hint":"Check: Is Roblox Studio running? Is the plugin installed?","level.l2.ok":"Studio connected","tier.basic":"Basic","tier.basic.tooltip":"Basic tier with the standard WEPPY Dashboard feature set.","tier.pro":"Pro","tier.pro.tooltip":"Pro tier with the full WEPPY Dashboard feature set.","tier.mixed":"Mixed","tier.upgrade":"Upgrade to Pro","tier.compare":"Basic vs Pro","tier.banner.save":"Save AI tokens with Pro!","tier.comparison.comingSoon":"Basic vs Pro comparison — coming soon","tier.comparison.close":"Close","tier.comparison.detailTitle":"Detailed Tool Catalog","tier.comparison.description":"Description","tier.comparison.basic.core":"Core MCP workflow","tier.comparison.basic.core.item1":"Script create/edit","tier.comparison.basic.core.item2":"Instance management","tier.comparison.basic.core.item3":"Property control","tier.comparison.basic.core.item4":"Selection and search","tier.comparison.basic.core.item5":"Tag management","tier.comparison.basic.core.item6":"Camera control","tier.comparison.basic.core.item7":"Log monitoring","tier.comparison.basic.sync":"Sync (Basic)","tier.comparison.basic.sync.item1":"Studio to Local one-way sync","tier.comparison.basic.sync.item2":"Manual apply as default","tier.comparison.pro.all":"Everything in Basic, plus","tier.comparison.pro.sync":"Advanced Sync workflow","tier.comparison.pro.sync.item1":"Per-type sync direction","tier.comparison.pro.sync.item2":"Per-type apply mode","tier.comparison.pro.sync.item3":"Bidirectional and reverse sync","tier.comparison.pro.sync.item4":"Full sync, resync, and push to Studio","tier.comparison.pro.sync.item5":"Multi-place sync","tier.comparison.pro.playtest":"Playtest control","tier.comparison.pro.playtest.item1":"Play, stop, pause, and resume","tier.comparison.pro.playtest.item2":"Playtest state inspection","tier.comparison.pro.playtest.item3":"Automated test execution","tier.comparison.pro.creation":"Advanced creation workflow","tier.comparison.pro.creation.item1":"Bulk operations","tier.comparison.pro.creation.item2":"Terrain generation","tier.comparison.pro.creation.item3":"Asset search and insert","tier.comparison.pro.creation.item4":"Raycast and spatial analysis","tier.comparison.pro.creation.item5":"Environment control","tier.comparison.discount.label":"🎁 Enter this code at Gumroad checkout for a discount:","tier.comparison.discount.code":"WEPPY-MCP","tier.comparison.discount.expiry":"Valid until April 30","tier.promo.discount.hint":"🎁 Use code WEPPY-MCP at Gumroad · Valid until April 30","tier.promo.discount.context":"🎁 Enter at Gumroad checkout:","tier.tool.query_instances.desc":"Inspect instances, search children and descendants, and inspect class data. Pro adds file tree, project structure, and property or tag search.","tier.tool.mutate_instances.desc":"Create, delete, clone, and move instances. Pro adds tree creation and bulk create, delete, or clone operations.","tier.tool.manage_properties.desc":"Read and set properties, attributes, and tags. Pro adds calculated updates, relative changes, and bulk property operations.","tier.tool.manage_scripts.desc":"Read, write, create, delete, edit, and search script source. Pro adds bulk replacement across scripts.","tier.tool.manage_lighting.desc":"Pro only. Configure lighting, atmosphere, sky, terrain properties, and time-of-day settings.","tier.tool.manage_selection.desc":"Read, set, and clear the current Studio selection. Pro adds context, details, add or remove, and selection watch support.","tier.tool.manage_camera.desc":"Inspect camera state, focus by path or position, and request suggested views.","tier.tool.manage_tween.desc":"Pro only. Create, play, pause, and cancel tweens for smooth animation.","tier.tool.manage_audio.desc":"Pro only. Play, stop, pause, and resume sounds, and configure the audio listener.","tier.tool.manage_animation.desc":"Pro only. Load, play, and stop animations, and inspect active animation tracks.","tier.tool.manage_physics.desc":"Pro only. Register collision groups, configure group collisions, and inspect available groups.","tier.tool.manage_effects.desc":"Pro only. Emit particles, clear effects, and toggle effect state.","tier.tool.manage_terrain.desc":"Pro only. Fill terrain shapes, clear regions, replace materials, manage terrain colors, read or write voxels, generate terrain, and smooth terrain.","tier.tool.spatial_query.desc":"Pro only. Run raycasts, find ground, validate placement, scan areas, search for flat or spawn positions, analyze walkability, map space, and inspect collisions.","tier.tool.manage_assets.desc":"Pro only. Insert models, inspect asset info, search the creator store, insert free assets or packages, and export assets.","tier.tool.manage_sync.desc":"Pro only. Inspect sync status, configuration, history, directions, and read or write synced files.","tier.tool.workspace_state.desc":"Pro only. Run full sync, capture snapshots, inspect recent changes and viewport state, and manage related metadata.","tier.tool.manage_logs.desc":"Inspect output logs with filtering, incremental polling, buffer clearing, and recent error lookup.","tier.tool.system_info.desc":"Inspect connection status and current tier. Pro adds place info, services, Studio settings, playtest control, and automated tests.","tier.tool.batch_execute.desc":"Pro only. Run multiple commands in a batch, with sequential execution and optional continue-on-error behavior.","tier.tool.execute_luau.desc":"Pro only. Execute arbitrary Luau code inside the Roblox Studio sandbox.","connection.server.title":"Server Status","connection.server.version":"Version","connection.server.version.tooltip":"Installed MCP server version","connection.server.pid":"PID","connection.server.pid.tooltip":"Operating system process identifier","connection.server.uptime":"Uptime","connection.server.uptime.tooltip":"Time elapsed since the MCP server started","connection.server.session":"Session","connection.server.session.tooltip":"Current MCP session identifier","connection.server.exec":"Exec","connection.server.exec.tooltip":"Executable path used to launch the MCP server","connection.reconnect":"Reconnect","connection.checkSettings":"Check Settings","connection.agents.title":"AI Agents","connection.agents.name":"Agent","connection.agents.cwd":"Working Dir","connection.agents.cwd.tooltip":"Current working directory for the connected AI agent","connection.agents.projectRoot":"Project Root","connection.agents.projectRoot.tooltip":"Authoritative project root for sync ownership","connection.agents.projectRoot.unresolved":"Unresolved","connection.agents.connected":"Connected","connection.agents.unknown":"Unknown","connection.agents.none":"No agents connected","connection.plugins.title":"Plugins","connection.plugins.place":"Place","connection.plugins.clientId":"Client ID","connection.plugins.clientId.tooltip":"Unique plugin client identifier for this Studio connection","connection.plugins.lastSeen":"Last Seen","connection.plugins.lastSeen.tooltip":"Most recent heartbeat received from the plugin","connection.plugins.version":"Ver","connection.plugins.version.tooltip":"Installed plugin version reported by Studio","connection.plugins.none":"No plugins connected","connection.log.title":"Connection Log","connection.log.empty":"No events yet","connection.time.secondsAgo":"s ago","connection.time.minutesAgo":"m ago","connection.time.hoursAgo":"h ago","common.loading":"Loading...","common.retry":"Retry","common.reconnecting":"Reconnecting...","common.expand":"Expand","common.collapse":"Collapse","tools.tab.history":"History","tools.tab.statistics":"Statistics","tools.tab.failures":"Failures","tools.col.time":"Time","tools.col.time.tooltip":"When the tool run was recorded.","tools.col.toolAction":"Tool.Action","tools.col.toolAction.tooltip":"Tool name and action that were executed.","tools.col.duration":"Duration","tools.col.duration.tooltip":"How long the tool took to finish.","tools.col.status":"Status","tools.col.status.tooltip":"Outcome of the recorded tool run.","tools.col.tier":"Tier","tools.col.tier.tooltip":"License tier required for the tool or action.","tools.col.tierStats.tooltip":"Basic, Pro, or Mixed summary for the tool statistics row.","tools.col.tool":"Tool","tools.col.tool.tooltip":"Consolidated tool name in the statistics table.","tools.col.calls":"Calls","tools.col.calls.tooltip":"Total number of recorded calls for this tool.","tools.col.ok":"OK","tools.col.ok.tooltip":"Number of direct successful runs.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"Number of runs that succeeded through fallback execution.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"Number of blocked runs without fallback execution.","tools.col.err":"FAILED","tools.col.err.tooltip":"Number of runs that failed.","tools.col.okRate":"OK%","tools.col.okRate.tooltip":"Percentage of calls that finished successfully.","tools.col.avgTime":"Avg Time","tools.col.avgTime.tooltip":"Average execution time across recorded calls.","tools.col.error":"Error","tools.filter.tool":"Tool","tools.filter.all":"All","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"This entry used a Pro-only tool or action.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"The requested Pro action succeeded via a Basic fallback.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"The requested Pro action was blocked and no fallback ran.","tools.badge.err":"FAILED","tools.badge.err.tooltip":"The tool run failed.","tools.status.ok":"OK","tools.status.ok.tooltip":"The tool run completed successfully.","tools.tier.mixed.tooltip":"This tool includes both Basic and Pro actions.","tools.detail.params":"Parameters","tools.detail.params.tooltip":"Input parameters passed to this tool run.","tools.detail.result":"Result","tools.detail.result.tooltip":"Returned result payload for this tool run.","tools.detail.requestedCommand":"Requested Command","tools.detail.executedCommand":"Executed Command","tools.detail.alternatives":"Alternatives","tools.detail.blockedMessage":"Blocked Reason","tools.detail.noFallback":"No Fallback","tools.detail.noFallback.value":"No fallback ran.","tools.detail.errorMessage":"Error Message","tools.clear.history.title":"Clear history?","tools.clear.history.message":"This permanently removes the current place tools history.","tools.clear.statistics.title":"Clear statistics?","tools.clear.statistics.message":"This permanently resets the current place tool statistics.","tools.detail.error":"Error","tools.page.prev":"Prev","tools.page.prev.tooltip":"Go to the previous page of tool history results.","tools.page.next":"Next","tools.page.next.tooltip":"Go to the next page of tool history results.","tools.empty.history":"No history entries","tools.empty.stats":"No tool statistics","tools.empty.failures":"No failures","tools.summary.total":"Total","tools.summary.calls":"calls","tools.summary.sessions":"Sessions","settings.license.title":"License","settings.license.title.tooltip":"Current license status and subscription tier.","settings.license.status":"Status","settings.license.status.tooltip":"Current license activation state.","settings.license.tier":"Tier","settings.license.tier.tooltip":"Current subscription tier for available WEPPY Dashboard features.","settings.license.key":"Key","settings.license.key.tooltip":"Masked license key currently loaded by the server.","settings.license.keyValue.tooltip":"Masked license key currently loaded by the server.","settings.license.provider":"Provider","settings.license.provider.tooltip":"License provider used to validate this key.","settings.license.providerValue.tooltip":"License provider used to validate this key.","settings.license.active":"Active","settings.license.active.tooltip":"Current license activation state.","settings.license.status.activeCancelPending.tooltip":"Cancellation is pending, but Pro access remains active until the current billing period ends.","settings.license.inactive":"Inactive","settings.license.inactive.tooltip":"Current license activation state.","settings.license.expired":"Expired","settings.license.expired.tooltip":"Current license activation state.","settings.license.unavailable":"License info unavailable","settings.license.detail.cancelPending":"Cancellation is scheduled. Pro access remains active until the current billing period ends.","settings.license.reset":"Reset License","settings.readOnly":"Read-only","settings.readOnly.tooltip":"This section shows values that cannot be edited from the WEPPY Dashboard.","settings.unavailable":"Settings unavailable","settings.general.title":"General Settings","settings.general.title.tooltip":"Hot settings that apply immediately when changed.","settings.general.liveApply":"Live Apply","settings.general.liveApply.tooltip":"Changes in this section are applied immediately without a separate save button.","settings.general.applied":"Applied","settings.general.logLevel":"Log Level","settings.general.logLevel.tooltip":"Sets how much detail the WEPPY Dashboard writes to its logs.","settings.general.localHistory":"Tool History Recording","settings.general.localHistory.tooltip":"Stores local tool execution history for the WEPPY Dashboard history views.","settings.general.localStatistics":"Tool Statistics Collection","settings.general.localStatistics.tooltip":"Aggregates local usage statistics for WEPPY Dashboard reporting.","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WEPPY Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"Request Timeout","settings.general.requestTimeout.tooltip":"Maximum time the WEPPY Dashboard waits for a request before it fails.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"Request timeout is measured in milliseconds.","settings.cold.title":"Server Environment","settings.cold.title.tooltip":"Read-only server environment values loaded at startup.","settings.cold.httpPort.tooltip":"Port number used by the MCP WEPPY Dashboard HTTP server.","settings.cold.httpHost.tooltip":"Host interface that the MCP WEPPY Dashboard HTTP server binds to.","settings.cold.dashboardAutoOpen.tooltip":"Controls whether the WEPPY Dashboard opens automatically in the browser when the server starts.","settings.cold.dashboardAutoOpen.value.tooltip":"Current startup behavior for opening the WEPPY Dashboard in a browser.","settings.cold.hint":"Set via environment variables to change these values.","settings.language.title":"Language","settings.language.title.tooltip":"Choose how the WEPPY Dashboard interface text is localized.","settings.language.dashboard":"WEPPY Dashboard Language","settings.language.dashboard.tooltip":"Overrides the WEPPY Dashboard language or follows the system language when set to Auto.","settings.language.auto":"Auto","overview.l0.title":"MCP Server Disconnected","overview.l0.message":"The MCP server is not responding. The WEPPY Dashboard will automatically attempt to reconnect.","overview.l0.step1":"Check that the MCP server process is running","overview.l0.step2":"Restart the MCP server command if needed","overview.l0.reconnecting":"Auto-reconnecting every 3s...","overview.l0.reconnectBtn":"Reconnect","overview.l0.settingsBtn":"Check Settings","overview.l1.pluginGuide":"Roblox Studio plugin is not connected","overview.l1.check1":"Is Roblox Studio running?","overview.l1.check2":"Is the WEPPY Plugin installed?","overview.l1.feedHint":"Changes will appear here once the plugin connects","overview.metric.server":"Server","overview.metric.server.tooltip":"MCP server runtime and process status","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Roblox Studio plugin connection and version status","overview.metric.agent":"Agent","overview.metric.agent.tooltip":"Connected AI coding agents and their runtime state","overview.metric.agent.instancesUnit":"instances","overview.metric.sync":"Sync","overview.metric.sync.tooltip":"Current Studio to local sync activity","overview.metric.noAgent":"No Agent","overview.meta.version":"Version","overview.meta.version.tooltip":"Installed MCP server version","overview.meta.session":"Session","overview.meta.session.tooltip":"Current MCP session identifier","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Operating system process identifier","overview.meta.uptime":"Uptime","overview.meta.uptime.tooltip":"Time elapsed since the MCP server started","overview.feed.title":"Recent Game Changes","overview.feed.empty":"No recent changes","overview.changelog.title":"Session Change Summary","overview.changelog.entries":"Total","overview.changelog.scripts":"scripts","overview.changelog.instances":"instances","overview.changelog.properties":"properties","overview.changelog.assets":"assets","overview.tier.title":"Tier Usage","changelog.subtitle":"Game Change History","changelog.filter.all":"All","changelog.filter.active":"Active","changelog.filter.completed":"Completed","changelog.empty":"No changelog entries yet","changelog.basic.limit.title":"Basic preview shows the latest 3 sessions","changelog.basic.limit.body":"Upgrade to Pro to browse the full changelog timeline for this place.","changelog.basic.metricLabel":"Visible Changelog / Total","changelog.basic.visible":"visible","changelog.basic.total":"total","changelog.card.active":"Active","changelog.card.active.tooltip":"This session is still receiving new game changes.","changelog.card.completed":"Completed","changelog.card.completed.tooltip":"This session has ended and no more changes are expected.","changelog.card.bootstrapStatus":"Bootstrap","changelog.card.bootstrapStatus.tooltip":"This session only contains the initial sync bootstrap snapshot.","changelog.card.inProgress":"in progress","changelog.card.noChanges":"No changes yet","changelog.card.noChanges.tooltip":"No game changes have been extracted for this session yet.","changelog.card.bootstrapSummary":"Initial sync snapshot","changelog.card.bootstrapSummary.tooltip":"Initial file sync writes are collapsed into a single bootstrap snapshot row.","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"scripts","changelog.card.scripts.tooltip":"Script changes made in this session.","changelog.card.instances":"instances","changelog.card.instances.tooltip":"Instance create, delete, move, or clone changes in this session.","changelog.card.modified":"modified","changelog.card.created":"created","changelog.card.deleted":"deleted","changelog.card.moved":"moved","changelog.card.propertiesChanged":"properties changed","changelog.card.propertiesChanged.tooltip":"Property value changes recorded for this session.","changelog.card.lightingConfigured":"Lighting configured","changelog.card.lightingConfigured.tooltip":"Lighting or atmosphere settings changed in this session.","changelog.card.terrainConfigured":"Terrain configured","changelog.card.terrainConfigured.tooltip":"Terrain data or terrain settings changed in this session.","changelog.card.assetsInserted":"assets inserted","changelog.card.assetsInserted.tooltip":"Assets inserted into the place during this session.","changelog.category.script":"Scripts","changelog.category.instance":"Instances","changelog.category.property":"Properties","changelog.category.lighting":"Lighting","changelog.category.terrain":"Terrain","changelog.category.asset":"Assets","changelog.detail.changeSummary":"Change Summary","changelog.detail.changeSummary.tooltip":"Counts of extracted game changes grouped by category for this session.","changelog.detail.changeTimeline":"Change Timeline","changelog.detail.changeTimeline.tooltip":"Chronological list of extracted game changes for this session.","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"Before & After","changelog.detail.filterCategory":"Category","changelog.detail.filterCategory.tooltip":"Filter the timeline to a single change category.","changelog.detail.confidence.exact":"Exact","changelog.detail.confidence.exact.tooltip":"Both the before and after state were confirmed for this change.","changelog.detail.confidence.partial":"Partial","changelog.detail.confidence.partial.tooltip":"Only part of the before and after state could be confirmed for this change.","changelog.detail.confidence.afterOnly":"After only","changelog.detail.confidence.afterOnly.tooltip":"Only the resulting state after the change could be confirmed.","changelog.detail.confidence.intentOnly":"Intent only","changelog.detail.confidence.intentOnly.tooltip":"Only the requested action was recorded, not the resulting state.","changelog.detail.confidence.unknown":"Unknown","changelog.detail.confidence.unknown.tooltip":"This change could not be confidently classified from the available data.","changelog.detail.noChanges":"No changes in this category","changelog.detail.backToList":"Back to list","changelog.diff.empty":"No diff available","changelog.diff.unified":"Unified","changelog.diff.sideBySide":"Side by Side","changelog.diff.before":"Before","changelog.diff.after":"After","sync.overlay.title":"Roblox Studio plugin required","sync.overlay.message":"Sync status will be available once the Roblox Studio plugin connects.","sync.overlay.check1":"Is Roblox Studio running?","sync.overlay.check2":"Is the WEPPY Plugin installed?","sync.status.title":"Sync Status","sync.status.title.tooltip":"Current Studio and local file sync status for this place.","sync.status.forwardOnly":"Forward Only","sync.status.forwardOnly.tooltip":"Basic tier allows Studio to local forward sync only.","sync.status.place":"Place","sync.status.place.tooltip":"Connected Roblox place name and place ID.","sync.status.path":"Path","sync.status.path.tooltip":"Local filesystem root currently used for sync output.","sync.status.instances":"Instances","sync.status.instances.tooltip":"Total synced Roblox instances tracked in the local mirror.","sync.status.scripts":"Scripts","sync.status.scripts.tooltip":"Total synced script files currently indexed for this place.","sync.status.state":"State","sync.status.state.tooltip":"Current runtime sync state reported by the server.","sync.directions.title":"Sync Directions","sync.directions.title.tooltip":"Per-category sync direction and apply behavior between Local and Studio.","sync.directions.type":"Type","sync.directions.type.tooltip":"Sync category affected by this rule.","sync.directions.direction":"Direction","sync.directions.direction.tooltip":"Whether each category syncs from Studio, to Studio, or both ways.","sync.directions.applyMode":"Apply Mode","sync.directions.applyMode.tooltip":"How incoming sync changes are applied for this category.","sync.directions.cat.scripts":"Scripts","sync.directions.cat.values":"Values","sync.directions.cat.containers":"Containers","sync.directions.cat.data":"Data","sync.directions.cat.services":"Services","sync.directions.endpoint.local":"Local","sync.directions.endpoint.local.tooltip":"Local files on disk are always shown on the left side of the direction rail.","sync.directions.endpoint.studio":"Studio","sync.directions.endpoint.studio.tooltip":"Roblox Studio is always shown on the right side of the direction rail.","sync.directions.mode.manual":"Manual","sync.directions.mode.manual.tooltip":"Applies sync changes only when you trigger them manually.","sync.directions.mode.auto":"Auto","sync.directions.mode.auto.tooltip":"Applies sync changes automatically when updates arrive.","sync.directions.tooltip.forward.body":"Studio changes sync to local files only","sync.directions.tooltip.bidirectional.body":"Two-way sync between Local and Studio","sync.directions.tooltip.reverse.body":"Push local file changes to Studio","sync.directions.tooltip.proRequired":"Pro required in Basic tier","sync.directions.dir.forward":"forward","sync.directions.dir.bidirectional":"bidirectional","sync.directions.dir.reverse":"reverse","sync.log.title":"Sync Log","sync.log.empty":"No sync events yet","sync.log.type.write":"WRITE","sync.log.type.write.tooltip":"A new sync output was written to disk.","sync.log.type.update":"UPDATE","sync.log.type.update.tooltip":"An existing synced file or instance was updated.","sync.log.type.delete":"DELETE","sync.log.type.delete.tooltip":"A synced file or instance was removed.","sync.log.type.idle":"IDLE","sync.log.type.idle.tooltip":"A sync event was recorded without a file mutation.","sync.upgrade.title":"Unlock Full Sync with Pro","sync.upgrade.benefit1":"Bidirectional sync — edit files, auto-apply to Studio","sync.upgrade.benefit2":"Reverse sync — push file changes back to Studio","sync.upgrade.benefit3":"Full sync history and detailed change log","sync.upgrade.buy":"Upgrade to Pro","playtest.status.title":"Playtest Status","playtest.status.title.tooltip":"Current Roblox playtest session state reported by Studio.","playtest.status.mode":"Mode","playtest.status.mode.tooltip":"Studio playtest launch mode for the current session.","playtest.status.mode.value.tooltip":"Specific Roblox Studio playtest mode currently in use.","playtest.status.mode.play":"Play","playtest.status.mode.run":"Run","playtest.status.mode.server":"Server","playtest.status.mode.edit":"Edit","playtest.status.place.tooltip":"Roblox place currently associated with this playtest session.","playtest.status.state.running":"Running","playtest.status.state.running.tooltip":"A Roblox playtest session is currently running.","playtest.status.state.paused":"Paused","playtest.status.state.paused.tooltip":"The current Roblox playtest session is paused.","playtest.status.state.notRunning":"Not Running","playtest.status.state.notRunning.tooltip":"No Roblox playtest session is currently running.","playtest.control.play":"Play","playtest.control.pause":"Pause","playtest.control.resume":"Resume","playtest.control.stop":"Stop","playtest.history.title":"Test History","playtest.history.title.tooltip":"Recorded automated playtest runs for this project.","playtest.history.empty":"No test results yet","playtest.history.mode":"Mode","playtest.history.mode.tooltip":"Playtest mode used for this recorded test run.","playtest.history.status.passed":"Passed","playtest.history.status.failed":"Failed","playtest.history.status.running":"Running","playtest.history.status.unknown":"Unknown","playtest.history.status.tooltip":"Recorded result state for this automated playtest run.","playtest.empty.title":"No playtest results yet","playtest.empty.message":"Test results will appear here when the AI agent runs automated tests via system_info.run_test.","playtest.empty.message.before":"Test results will appear here when the AI agent runs automated tests via","playtest.empty.message.after":".","playtest.empty.runTest.tooltip":"WEPPY Dashboard automation entry point that runs Roblox playtest checks through the system_info tool.","playtest.report.title":"Selected Report","playtest.report.title.tooltip":"Detailed output for the currently selected automated playtest run.","playtest.report.content":"Report","playtest.report.content.tooltip":"Markdown summary for the selected automated playtest run.","playtest.report.logs":"Logs","playtest.report.logs.tooltip":"Execution logs captured for the selected automated playtest run.","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"No report content available","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest is a Pro-only feature","playtest.basic.desc":"Control playtesting from the WEPPY Dashboard, run automated tests, and view detailed test reports.","playtest.basic.benefit1":"One-click play/pause/stop controls","playtest.basic.benefit2":"Automated test execution via AI agent","playtest.basic.benefit3":"Test history with pass/fail tracking","playtest.basic.benefit4":"Detailed markdown test reports","playtest.sample.badge":"Preview of the Pro playtest view","playtest.sample.title":"You are previewing the playtest screen that becomes available after upgrading to Pro.","playtest.sample.message":"This preview uses sample data. Live playtest control, history management, and real reports unlock with Pro.","playtest.sample.clearDisabled":"Upgrade to Pro to clear live playtest history.","playtest.sample.place":"Arena Preview","playtest.sample.history.name":"Sample Arena Smoke Test","playtest.sample.context.why":"Spawn into the arena, survive the opener, and verify the HUD responds immediately.","playtest.sample.context.expected":"The player spawns safely, the countdown UI appears within one second, and the first wave starts without errors.","playtest.sample.context.observed":"Spawn protection held, the HUD updated on time, and wave one completed with no gameplay regressions.","playtest.sample.report.markdown":`# Sample Arena Smoke Test
69
+ */function ca(){return ca=Object.assign?Object.assign.bind():function(a){for(var i=1;i<arguments.length;i++){var s=arguments[i];for(var c in s)Object.prototype.hasOwnProperty.call(s,c)&&(a[c]=s[c])}return a},ca.apply(this,arguments)}function fp(a,i){if(a==null)return{};var s={},c=Object.keys(a),d,p;for(p=0;p<c.length;p++)d=c[p],!(i.indexOf(d)>=0)&&(s[d]=a[d]);return s}function Vh(a){return!!(a.metaKey||a.altKey||a.ctrlKey||a.shiftKey)}function Hh(a,i){return a.button===0&&(!i||i==="_self")&&!Vh(a)}const Yh=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],qh=["aria-current","caseSensitive","className","end","style","to","viewTransition","children"],Kh="6";try{window.__reactRouterVersion=Kh}catch{}function $h(a,i){return nh({basename:void 0,future:ca({},void 0,{v7_prependBasename:!0}),history:Rf({window:void 0}),hydrationData:Gh(),routes:a,mapRouteProperties:Uh,dataStrategy:void 0,patchRoutesOnNavigation:void 0,window:void 0}).initialize()}function Gh(){var a;let i=(a=window)==null?void 0:a.__staticRouterHydrationData;return i&&i.errors&&(i=ca({},i,{errors:Qh(i.errors)})),i}function Qh(a){if(!a)return null;let i=Object.entries(a),s={};for(let[c,d]of i)if(d&&d.__type==="RouteErrorResponse")s[c]=new xi(d.status,d.statusText,d.data,d.internal===!0);else if(d&&d.__type==="Error"){if(d.__subType){let p=window[d.__subType];if(typeof p=="function")try{let g=new p(d.message);g.stack="",s[c]=g}catch{}}if(s[c]==null){let p=new Error(d.message);p.stack="",s[c]=p}}else s[c]=d;return s}const hp=T.createContext({isTransitioning:!1}),Jh=T.createContext(new Map),Zh="startTransition",Dd=kf[Zh],Xh="flushSync",Id=xf[Xh];function em(a){Dd?Dd(a):a()}function Xa(a){Id?Id(a):a()}class tm{constructor(){this.status="pending",this.promise=new Promise((i,s)=>{this.resolve=c=>{this.status==="pending"&&(this.status="resolved",i(c))},this.reject=c=>{this.status==="pending"&&(this.status="rejected",s(c))}})}}function nm(a){let{fallbackElement:i,router:s,future:c}=a,[d,p]=T.useState(s.state),[g,m]=T.useState(),[h,P]=T.useState({isTransitioning:!1}),[x,R]=T.useState(),[A,O]=T.useState(),[V,B]=T.useState(),U=T.useRef(new Map),{v7_startTransition:fe}=c||{},q=T.useCallback(J=>{fe?em(J):J()},[fe]),ue=T.useCallback((J,Se)=>{let{deletedFetchers:ie,flushSync:Fe,viewTransitionOpts:Te}=Se;J.fetchers.forEach((he,Xe)=>{he.data!==void 0&&U.current.set(Xe,he.data)}),ie.forEach(he=>U.current.delete(he));let De=s.window==null||s.window.document==null||typeof s.window.document.startViewTransition!="function";if(!Te||De){Fe?Xa(()=>p(J)):q(()=>p(J));return}if(Fe){Xa(()=>{A&&(x&&x.resolve(),A.skipTransition()),P({isTransitioning:!0,flushSync:!0,currentLocation:Te.currentLocation,nextLocation:Te.nextLocation})});let he=s.window.document.startViewTransition(()=>{Xa(()=>p(J))});he.finished.finally(()=>{Xa(()=>{R(void 0),O(void 0),m(void 0),P({isTransitioning:!1})})}),Xa(()=>O(he));return}A?(x&&x.resolve(),A.skipTransition(),B({state:J,currentLocation:Te.currentLocation,nextLocation:Te.nextLocation})):(m(J),P({isTransitioning:!0,flushSync:!1,currentLocation:Te.currentLocation,nextLocation:Te.nextLocation}))},[s.window,A,x,U,q]);T.useLayoutEffect(()=>s.subscribe(ue),[s,ue]),T.useEffect(()=>{h.isTransitioning&&!h.flushSync&&R(new tm)},[h]),T.useEffect(()=>{if(x&&g&&s.window){let J=g,Se=x.promise,ie=s.window.document.startViewTransition(async()=>{q(()=>p(J)),await Se});ie.finished.finally(()=>{R(void 0),O(void 0),m(void 0),P({isTransitioning:!1})}),O(ie)}},[q,g,x,s.window]),T.useEffect(()=>{x&&g&&d.location.key===g.location.key&&x.resolve()},[x,A,d.location,g]),T.useEffect(()=>{!h.isTransitioning&&V&&(m(V.state),P({isTransitioning:!0,flushSync:!1,currentLocation:V.currentLocation,nextLocation:V.nextLocation}),B(void 0))},[h.isTransitioning,V]),T.useEffect(()=>{},[]);let re=T.useMemo(()=>({createHref:s.createHref,encodeLocation:s.encodeLocation,go:J=>s.navigate(J),push:(J,Se,ie)=>s.navigate(J,{state:Se,preventScrollReset:ie==null?void 0:ie.preventScrollReset}),replace:(J,Se,ie)=>s.navigate(J,{replace:!0,state:Se,preventScrollReset:ie==null?void 0:ie.preventScrollReset})}),[s]),xe=s.basename||"/",je=T.useMemo(()=>({router:s,navigator:re,static:!1,basename:xe}),[s,re,xe]),j=T.useMemo(()=>({v7_relativeSplatPath:s.future.v7_relativeSplatPath}),[s.future.v7_relativeSplatPath]);return T.useEffect(()=>Bh(c,s.future),[c,s.future]),T.createElement(T.Fragment,null,T.createElement(ar.Provider,{value:je},T.createElement(Ll.Provider,{value:d},T.createElement(Jh.Provider,{value:U.current},T.createElement(hp.Provider,{value:h},T.createElement(Fh,{basename:xe,location:d.location,navigationType:d.historyAction,navigator:re,future:j},d.initialized||s.future.v7_partialHydration?T.createElement(om,{routes:s.routes,future:s.future,state:d}):i))))),null)}const om=T.memo(am);function am(a){let{routes:i,future:s,state:c}=a;return Eh(i,void 0,c,s)}const rm=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",im=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Dl=T.forwardRef(function(i,s){let{onClick:c,relative:d,reloadDocument:p,replace:g,state:m,target:h,to:P,preventScrollReset:x,viewTransition:R}=i,A=fp(i,Yh),{basename:O}=T.useContext(so),V,B=!1;if(typeof P=="string"&&im.test(P)&&(V=P,rm))try{let ue=new URL(window.location.href),re=P.startsWith("//")?new URL(ue.protocol+P):new URL(P),xe=jn(re.pathname,O);re.origin===ue.origin&&xe!=null?P=xe+re.search+re.hash:B=!0}catch{}let U=kh(P,{relative:d}),fe=cm(P,{replace:g,state:m,target:h,preventScrollReset:x,relative:d,viewTransition:R});function q(ue){c&&c(ue),ue.defaultPrevented||fe(ue)}return T.createElement("a",ca({},A,{href:V||U,onClick:B||p?c:q,ref:s,target:h}))}),sm=T.forwardRef(function(i,s){let{"aria-current":c="page",caseSensitive:d=!1,className:p="",end:g=!1,style:m,to:h,viewTransition:P,children:x}=i,R=fp(i,qh),A=Ci(h,{relative:R.relative}),O=lo(),V=T.useContext(Ll),{navigator:B,basename:U}=T.useContext(so),fe=V!=null&&um(A)&&P===!0,q=B.encodeLocation?B.encodeLocation(A).pathname:A.pathname,ue=O.pathname,re=V&&V.navigation&&V.navigation.location?V.navigation.location.pathname:null;d||(ue=ue.toLowerCase(),re=re?re.toLowerCase():null,q=q.toLowerCase()),re&&U&&(re=jn(re,U)||re);const xe=q!=="/"&&q.endsWith("/")?q.length-1:q.length;let je=ue===q||!g&&ue.startsWith(q)&&ue.charAt(xe)==="/",j=re!=null&&(re===q||!g&&re.startsWith(q)&&re.charAt(q.length)==="/"),J={isActive:je,isPending:j,isTransitioning:fe},Se=je?c:void 0,ie;typeof p=="function"?ie=p(J):ie=[p,je?"active":null,j?"pending":null,fe?"transitioning":null].filter(Boolean).join(" ");let Fe=typeof m=="function"?m(J):m;return T.createElement(Dl,ca({},R,{"aria-current":Se,className:ie,ref:s,style:Fe,to:h,viewTransition:P}),typeof x=="function"?x(J):x)});var Rl;(function(a){a.UseScrollRestoration="useScrollRestoration",a.UseSubmit="useSubmit",a.UseSubmitFetcher="useSubmitFetcher",a.UseFetcher="useFetcher",a.useViewTransitionState="useViewTransitionState"})(Rl||(Rl={}));var Od;(function(a){a.UseFetcher="useFetcher",a.UseFetchers="useFetchers",a.UseScrollRestoration="useScrollRestoration"})(Od||(Od={}));function lm(a){let i=T.useContext(ar);return i||be(!1),i}function cm(a,i){let{target:s,replace:c,state:d,preventScrollReset:p,relative:g,viewTransition:m}=i===void 0?{}:i,h=bh(),P=lo(),x=Ci(a,{relative:g});return T.useCallback(R=>{if(Hh(R,s)){R.preventDefault();let A=c!==void 0?c:Mo(P)===Mo(x);h(a,{replace:A,state:d,preventScrollReset:p,relative:g,viewTransition:m})}},[P,h,x,c,d,s,a,p,g,m])}function um(a,i){i===void 0&&(i={});let s=T.useContext(hp);s==null&&be(!1);let{basename:c}=lm(Rl.useViewTransitionState),d=Ci(a,{relative:i.relative});if(!s.isTransitioning)return!1;let p=jn(s.currentLocation.pathname,c)||s.currentLocation.pathname,g=jn(s.nextLocation.pathname,c)||s.nextLocation.pathname;return bi(d.pathname,g)!=null||bi(d.pathname,p)!=null}const dm="modulepreload",pm=function(a){return"/dashboard/"+a},Bd={},Cn=function(i,s,c){let d=Promise.resolve();if(s&&s.length>0){let g=function(P){return Promise.all(P.map(x=>Promise.resolve(x).then(R=>({status:"fulfilled",value:R}),R=>({status:"rejected",reason:R}))))};document.getElementsByTagName("link");const m=document.querySelector("meta[property=csp-nonce]"),h=(m==null?void 0:m.nonce)||(m==null?void 0:m.getAttribute("nonce"));d=g(s.map(P=>{if(P=pm(P),P in Bd)return;Bd[P]=!0;const x=P.endsWith(".css"),R=x?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${P}"]${R}`))return;const A=document.createElement("link");if(A.rel=x?"stylesheet":dm,x||(A.as="script"),A.crossOrigin="",A.href=P,h&&A.setAttribute("nonce",h),document.head.appendChild(A),x)return new Promise((O,V)=>{A.addEventListener("load",O),A.addEventListener("error",()=>V(new Error(`Unable to preload CSS for ${P}`)))})}))}function p(g){const m=new Event("vite:preloadError",{cancelable:!0});if(m.payload=g,window.dispatchEvent(m),!m.defaultPrevented)throw g}return d.then(g=>{for(const m of g||[])m.status==="rejected"&&p(m.reason);return i().catch(p)})},Ei=window.location.origin,gm=3e3,fm=5e3;class hm extends Error{constructor(s,c,d=null,p=null){super(c);Rn(this,"status");Rn(this,"error");Rn(this,"payload");this.name="ApiClientError",this.status=s,this.error=d,this.payload=p}}function mm(a){var s,c;const i=(c=(s=a.headers)==null?void 0:s.get)==null?void 0:c.call(s,"content-type");return typeof i=="string"&&i.toLowerCase().includes("application/json")}async function ym(a){if(!mm(a))return null;try{const i=await a.json();if(i&&typeof i=="object")return i}catch{return null}return null}async function yl(a){if(a.ok)return;const i=await ym(a),s=typeof(i==null?void 0:i.message)=="string"&&i.message.trim().length>0?i.message:`API ${a.status}: ${a.statusText}`,c=typeof(i==null?void 0:i.error)=="string"?i.error:null;throw new hm(a.status,s,c,i)}class vm{constructor(i){Rn(this,"base");this.base=i}async get(i,s){const c=new URL(i,this.base);s&&Object.entries(s).forEach(([p,g])=>c.searchParams.set(p,g));const d=await fetch(c.toString(),{method:"GET"});return await yl(d),d.json()}async patch(i,s){const c=new URL(i,this.base),d=await fetch(c.toString(),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});return await yl(d),d.json()}async post(i,s){const c=new URL(i,this.base),d=await fetch(c.toString(),{method:"POST",headers:s?{"Content-Type":"application/json"}:{},body:s?JSON.stringify(s):void 0});return await yl(d),d.json()}}const pn=new vm(Ei);function Pm(a){return a.pluginClients&&a.pluginClients.length>0?"studioConnected":(a.connectedClients===0||!a.pluginClients,"serverOnly")}const mp=T.createContext(null);function wm({children:a}){const[i,s]=T.useState("disconnected"),[c,d]=T.useState(null),[p,g]=T.useState(null),m=T.useRef(null);return T.useEffect(()=>{let h=!1;async function P(){try{const x=await pn.get("/status");if(h)return;d(x),s(Pm(x)),g(null)}catch(x){if(h)return;s("disconnected"),g(x instanceof Error?x.message:String(x))}}return P(),m.current=setInterval(P,fm),()=>{h=!0,m.current&&clearInterval(m.current)}},[]),N.jsx(mp.Provider,{value:{level:i,status:c,error:p},children:a})}function Il(){const a=T.useContext(mp);if(!a)throw new Error("useConnection must be used within a ConnectionProvider");return a}const Sm={"sidebar.overview":"Overview","sidebar.changelog":"Changelog","sidebar.connection":"Connection","sidebar.sync":"Sync","sidebar.playtest":"Playtest","sidebar.tools":"Tools","sidebar.settings":"Settings","sidebar.gate.l1":"MCP server connection required","sidebar.gate.l2":"Roblox Studio plugin connection required","header.currentProject":"Current Project","header.unknownProject":"Unknown project","header.projectRoot.label":"Project Root","header.currentProject.loading":"Loading project root...","header.currentProject.unavailable":"Project root unavailable","header.placeNotConnected":"Place not connected","header.currentProject.tooltip":"Currently selected project folder","header.currentProject.loading.tooltip":"Project root information is still loading","header.currentProject.unavailable.tooltip":"Current project root information is unavailable","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Loading sync root...","header.currentProjectSyncRoot.unavailable":"Sync root unavailable","header.currentProjectSyncRoot.tooltip":"Current sync root folder for the selected project","header.currentProjectSyncRoot.loading.tooltip":"Sync root information is still loading","header.currentProjectSyncRoot.unavailable.tooltip":"Current sync root information is unavailable","header.testFiles.label":"Test Files","header.testFiles.unavailable":"Test files unavailable","header.testFiles.tooltip":"Current playtest files directory for the selected place","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"Plugin connection required","header.places.liveRequired":"Plugin connection required for live active place","header.place.tooltip":"Connected Roblox place","header.placeNotConnected.tooltip":"Place not connected","header.changeProjectRoot":"Change Project Root","header.changeProjectRoot.ariaLabel":"Change project root","header.changeProjectRoot.tooltip":"Change the current project root","header.changeProjectRoot.disabledTooltip.l0":"MCP server connection required before project root can be changed","header.changeProjectRoot.disabledTooltip.loading":"Project root information is still loading","header.changeProjectRoot.disabledTooltip.unavailable":"Current project root information is unavailable","header.projectRootModal.initial.title":"Change project root","header.projectRootModal.initial.body.connected":"After you choose a project folder, MCP will switch to the new project root and the current Studio contents will be fully resynced into the new <selected project folder>/weppy-project-sync target.","header.projectRootModal.initial.body.disconnected":"After you choose a project folder, MCP will switch to the new project root and use <selected project folder>/weppy-project-sync as the next sync target.","header.projectRootModal.initial.nextSyncRoot":"New sync target after selection","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"Current sync stops immediately.","header.projectRootModal.initial.warningFreshSync":"The current Studio contents will be used to build a fresh full sync in the new target.","header.projectRootModal.initial.warningNoMove":"Old sync folders are not moved automatically.","header.projectRootModal.initial.warningDeferredSync":"If Studio is not connected, full resync starts the next time the plugin connects.","header.projectRootModal.confirm.title":"Confirm new project root","header.projectRootModal.confirm.body":"Review the selected project folder before applying.","header.projectRootModal.confirm.projectRoot":"Selected project folder","header.projectRootModal.confirm.syncRoot":"New sync target","header.projectRootModal.confirm.warningNoMove":"Existing sync folders are not moved automatically.","header.projectRootModal.pick":"Choose folder","header.projectRootModal.apply":"Apply change","header.projectRootModal.cancel":"Cancel","header.projectRootModal.error":"Failed to change project root","status.online":"Online","status.offline":"Offline","status.idle":"Idle","status.syncing":"Syncing","status.error":"Error","status.initializing":"Initializing","level.l0.title":"Server disconnected","level.l0.message":"WEPPY Dashboard opened but MCP server has stopped or is not responding.","level.l1.title":"Server connected","level.l1.hint":"Check: Is Roblox Studio running? Is the plugin installed?","level.l2.ok":"Studio connected","tier.basic":"Basic","tier.basic.tooltip":"Basic tier with the standard WEPPY Dashboard feature set.","tier.pro":"Pro","tier.pro.tooltip":"Pro tier with the full WEPPY Dashboard feature set.","tier.mixed":"Mixed","tier.upgrade":"Upgrade to Pro","tier.compare":"Basic vs Pro","tier.banner.save":"Save AI tokens with Pro!","tier.comparison.comingSoon":"Basic vs Pro comparison — coming soon","tier.comparison.close":"Close","tier.comparison.detailTitle":"Detailed Tool Catalog","tier.comparison.description":"Description","tier.comparison.basic.core":"Core MCP workflow","tier.comparison.basic.core.item1":"Script create/edit","tier.comparison.basic.core.item2":"Instance management","tier.comparison.basic.core.item3":"Property control","tier.comparison.basic.core.item4":"Selection and search","tier.comparison.basic.core.item5":"Tag management","tier.comparison.basic.core.item6":"Camera control","tier.comparison.basic.core.item7":"Log monitoring","tier.comparison.basic.sync":"Sync (Basic)","tier.comparison.basic.sync.item1":"Studio to Local one-way sync","tier.comparison.basic.sync.item2":"Manual apply as default","tier.comparison.pro.all":"Everything in Basic, plus","tier.comparison.pro.sync":"Advanced Sync workflow","tier.comparison.pro.sync.item1":"Per-type sync direction","tier.comparison.pro.sync.item2":"Per-type apply mode","tier.comparison.pro.sync.item3":"Bidirectional and reverse sync","tier.comparison.pro.sync.item4":"Full sync, resync, and push to Studio","tier.comparison.pro.sync.item5":"Multi-place sync","tier.comparison.pro.playtest":"Playtest control","tier.comparison.pro.playtest.item1":"Play, stop, pause, and resume","tier.comparison.pro.playtest.item2":"Playtest state inspection","tier.comparison.pro.playtest.item3":"Automated test execution","tier.comparison.pro.creation":"Advanced creation workflow","tier.comparison.pro.creation.item1":"Bulk operations","tier.comparison.pro.creation.item2":"Terrain generation","tier.comparison.pro.creation.item3":"Asset search and insert","tier.comparison.pro.creation.item4":"Raycast and spatial analysis","tier.comparison.pro.creation.item5":"Environment control","tier.comparison.discount.label":"🎁 Enter this code at Gumroad checkout for a discount:","tier.comparison.discount.code":"WEPPY-MCP","tier.comparison.discount.expiry":"Valid until April 30","tier.promo.discount.hint":"🎁 Use code WEPPY-MCP at Gumroad · Valid until April 30","tier.promo.discount.context":"🎁 Enter at Gumroad checkout:","tier.tool.query_instances.desc":"Inspect instances, search children and descendants, and inspect class data. Pro adds file tree, project structure, and property or tag search.","tier.tool.mutate_instances.desc":"Create, delete, clone, and move instances. Pro adds tree creation and bulk create, delete, or clone operations.","tier.tool.manage_properties.desc":"Read and set properties, attributes, and tags. Pro adds calculated updates, relative changes, and bulk property operations.","tier.tool.manage_scripts.desc":"Read, write, create, delete, edit, and search script source. Pro adds bulk replacement across scripts.","tier.tool.manage_lighting.desc":"Pro only. Configure lighting, atmosphere, sky, terrain properties, and time-of-day settings.","tier.tool.manage_selection.desc":"Read, set, and clear the current Studio selection. Pro adds context, details, add or remove, and selection watch support.","tier.tool.manage_camera.desc":"Inspect camera state, focus by path or position, and request suggested views.","tier.tool.manage_tween.desc":"Pro only. Create, play, pause, and cancel tweens for smooth animation.","tier.tool.manage_audio.desc":"Pro only. Play, stop, pause, and resume sounds, and configure the audio listener.","tier.tool.manage_animation.desc":"Pro only. Load, play, and stop animations, and inspect active animation tracks.","tier.tool.manage_physics.desc":"Pro only. Register collision groups, configure group collisions, and inspect available groups.","tier.tool.manage_effects.desc":"Pro only. Emit particles, clear effects, and toggle effect state.","tier.tool.manage_terrain.desc":"Pro only. Fill terrain shapes, clear regions, replace materials, manage terrain colors, read or write voxels, generate terrain, and smooth terrain.","tier.tool.spatial_query.desc":"Pro only. Run raycasts, find ground, validate placement, scan areas, search for flat or spawn positions, analyze walkability, map space, and inspect collisions.","tier.tool.manage_assets.desc":"Pro only. Insert models, inspect asset info, search the creator store, insert free assets or packages, and export assets.","tier.tool.manage_sync.desc":"Pro only. Inspect sync status, configuration, history, directions, and read or write synced files.","tier.tool.workspace_state.desc":"Pro only. Run full sync, capture snapshots, inspect recent changes and viewport state, and manage related metadata.","tier.tool.manage_logs.desc":"Inspect output logs with filtering, incremental polling, buffer clearing, and recent error lookup.","tier.tool.system_info.desc":"Inspect connection status and current tier. Pro adds place info, services, Studio settings, playtest control, and automated tests.","tier.tool.batch_execute.desc":"Pro only. Run multiple commands in a batch, with sequential execution and optional continue-on-error behavior.","tier.tool.execute_luau.desc":"Pro only. Execute arbitrary Luau code inside the Roblox Studio sandbox.","connection.server.title":"Server Status","connection.server.version":"Version","connection.server.version.tooltip":"Installed MCP server version","connection.server.pid":"PID","connection.server.pid.tooltip":"Operating system process identifier","connection.server.uptime":"Uptime","connection.server.uptime.tooltip":"Time elapsed since the MCP server started","connection.server.session":"Session","connection.server.session.tooltip":"Current MCP session identifier","connection.server.exec":"Exec","connection.server.exec.tooltip":"Executable path used to launch the MCP server","connection.reconnect":"Reconnect","connection.checkSettings":"Check Settings","connection.agents.title":"AI Agents","connection.agents.name":"Agent","connection.agents.cwd":"Working Dir","connection.agents.cwd.tooltip":"Current working directory for the connected AI agent","connection.agents.projectRoot":"Project Root","connection.agents.projectRoot.tooltip":"Authoritative project root for sync ownership","connection.agents.projectRoot.unresolved":"Unresolved","connection.agents.connected":"Connected","connection.agents.unknown":"Unknown","connection.agents.none":"No agents connected","connection.plugins.title":"Plugins","connection.plugins.place":"Place","connection.plugins.clientId":"Client ID","connection.plugins.clientId.tooltip":"Unique plugin client identifier for this Studio connection","connection.plugins.lastSeen":"Last Seen","connection.plugins.lastSeen.tooltip":"Most recent heartbeat received from the plugin","connection.plugins.version":"Ver","connection.plugins.version.tooltip":"Installed plugin version reported by Studio","connection.plugins.none":"No plugins connected","connection.log.title":"Connection Log","connection.log.empty":"No events yet","connection.time.secondsAgo":"s ago","connection.time.minutesAgo":"m ago","connection.time.hoursAgo":"h ago","common.loading":"Loading...","common.retry":"Retry","common.reconnecting":"Reconnecting...","common.expand":"Expand","common.collapse":"Collapse","tools.tab.history":"History","tools.tab.statistics":"Statistics","tools.tab.failures":"Failures","tools.col.time":"Time","tools.col.time.tooltip":"When the tool run was recorded.","tools.col.toolAction":"Tool.Action","tools.col.toolAction.tooltip":"Tool name and action that were executed.","tools.col.duration":"Duration","tools.col.duration.tooltip":"How long the tool took to finish.","tools.col.status":"Status","tools.col.status.tooltip":"Outcome of the recorded tool run.","tools.col.tier":"Tier","tools.col.tier.tooltip":"License tier required for the tool or action.","tools.col.tierStats.tooltip":"Basic, Pro, or Mixed summary for the tool statistics row.","tools.col.tool":"Tool","tools.col.tool.tooltip":"Consolidated tool name in the statistics table.","tools.col.calls":"Calls","tools.col.calls.tooltip":"Total number of recorded calls for this tool.","tools.col.ok":"OK","tools.col.ok.tooltip":"Number of direct successful runs.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"Number of runs that succeeded through fallback execution.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"Number of blocked runs without fallback execution.","tools.col.err":"FAILED","tools.col.err.tooltip":"Number of runs that failed.","tools.col.okRate":"OK%","tools.col.okRate.tooltip":"Percentage of calls that finished successfully.","tools.col.avgTime":"Avg Time","tools.col.avgTime.tooltip":"Average execution time across recorded calls.","tools.col.error":"Error","tools.filter.tool":"Tool","tools.filter.all":"All","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"This entry used a Pro-only tool or action.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"The requested Pro action succeeded via a Basic fallback.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"The requested Pro action was blocked and no fallback ran.","tools.badge.err":"FAILED","tools.badge.err.tooltip":"The tool run failed.","tools.status.ok":"OK","tools.status.ok.tooltip":"The tool run completed successfully.","tools.tier.mixed.tooltip":"This tool includes both Basic and Pro actions.","tools.detail.params":"Parameters","tools.detail.params.tooltip":"Input parameters passed to this tool run.","tools.detail.result":"Result","tools.detail.result.tooltip":"Returned result payload for this tool run.","tools.detail.requestedCommand":"Requested Command","tools.detail.executedCommand":"Executed Command","tools.detail.alternatives":"Alternatives","tools.detail.blockedMessage":"Blocked Reason","tools.detail.noFallback":"No Fallback","tools.detail.noFallback.value":"No fallback ran.","tools.detail.errorMessage":"Error Message","tools.clear.history.title":"Clear history?","tools.clear.history.message":"This permanently removes the current place tools history.","tools.clear.statistics.title":"Clear statistics?","tools.clear.statistics.message":"This permanently resets the current place tool statistics.","tools.detail.error":"Error","tools.page.prev":"Prev","tools.page.prev.tooltip":"Go to the previous page of tool history results.","tools.page.next":"Next","tools.page.next.tooltip":"Go to the next page of tool history results.","tools.empty.history":"No history entries","tools.empty.stats":"No tool statistics","tools.empty.failures":"No failures","tools.summary.total":"Total","tools.summary.calls":"calls","tools.summary.sessions":"Sessions","settings.license.title":"License","settings.license.title.tooltip":"Current license status and subscription tier.","settings.license.status":"Status","settings.license.status.tooltip":"Current license activation state.","settings.license.tier":"Tier","settings.license.tier.tooltip":"Current subscription tier for available WEPPY Dashboard features.","settings.license.key":"Key","settings.license.key.tooltip":"Masked license key currently loaded by the server.","settings.license.keyValue.tooltip":"Masked license key currently loaded by the server.","settings.license.provider":"Provider","settings.license.provider.tooltip":"License provider used to validate this key.","settings.license.providerValue.tooltip":"License provider used to validate this key.","settings.license.active":"Active","settings.license.active.tooltip":"Current license activation state.","settings.license.status.activeCancelPending.tooltip":"Cancellation is pending, but Pro access remains active until the current billing period ends.","settings.license.inactive":"Inactive","settings.license.inactive.tooltip":"Current license activation state.","settings.license.expired":"Expired","settings.license.expired.tooltip":"Current license activation state.","settings.license.unavailable":"License info unavailable","settings.license.detail.cancelPending":"Cancellation is scheduled. Pro access remains active until the current billing period ends.","settings.license.reset":"Reset License","settings.readOnly":"Read-only","settings.readOnly.tooltip":"This section shows values that cannot be edited from the WEPPY Dashboard.","settings.unavailable":"Settings unavailable","settings.general.title":"General Settings","settings.general.title.tooltip":"Hot settings that apply immediately when changed.","settings.general.liveApply":"Live Apply","settings.general.liveApply.tooltip":"Changes in this section are applied immediately without a separate save button.","settings.general.applied":"Applied","settings.general.logLevel":"Log Level","settings.general.logLevel.tooltip":"Sets how much detail the WEPPY Dashboard writes to its logs.","settings.general.localHistory":"Tool History Recording","settings.general.localHistory.tooltip":"Stores local tool execution history for the WEPPY Dashboard history views.","settings.general.localStatistics":"Tool Statistics Collection","settings.general.localStatistics.tooltip":"Aggregates local usage statistics for WEPPY Dashboard reporting.","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WEPPY Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"Request Timeout","settings.general.requestTimeout.tooltip":"Maximum time the WEPPY Dashboard waits for a request before it fails.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"Request timeout is measured in milliseconds.","settings.cold.title":"Server Environment","settings.cold.title.tooltip":"Read-only server environment values loaded at startup.","settings.cold.httpPort.tooltip":"Port number used by the MCP WEPPY Dashboard HTTP server.","settings.cold.httpHost.tooltip":"Host interface that the MCP WEPPY Dashboard HTTP server binds to.","settings.cold.dashboardAutoOpen.tooltip":"Controls whether the WEPPY Dashboard opens automatically in the browser when the server starts.","settings.cold.dashboardAutoOpen.value.tooltip":"Current startup behavior for opening the WEPPY Dashboard in a browser.","settings.cold.hint":"Set via environment variables to change these values.","settings.language.title":"Language","settings.language.title.tooltip":"Choose how the WEPPY Dashboard interface text is localized.","settings.language.dashboard":"WEPPY Dashboard Language","settings.language.dashboard.tooltip":"Overrides the WEPPY Dashboard language or follows the system language when set to Auto.","settings.language.auto":"Auto","overview.l0.title":"MCP Server Disconnected","overview.l0.message":"The MCP server is not responding. The WEPPY Dashboard will automatically attempt to reconnect.","overview.l0.step1":"Check that the MCP server process is running","overview.l0.step2":"Restart the MCP server command if needed","overview.l0.reconnecting":"Auto-reconnecting every 3s...","overview.l0.reconnectBtn":"Reconnect","overview.l0.settingsBtn":"Check Settings","overview.l1.pluginGuide":"Roblox Studio plugin is not connected","overview.l1.check1":"Is Roblox Studio running?","overview.l1.check2":"Is the WEPPY Plugin installed?","overview.l1.feedHint":"Changes will appear here once the plugin connects","overview.metric.server":"Server","overview.metric.server.tooltip":"MCP server runtime and process status","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Roblox Studio plugin connection and version status","overview.metric.agent":"Agent","overview.metric.agent.tooltip":"Connected AI coding agents and their runtime state","overview.metric.agent.instancesUnit":"instances","overview.metric.sync":"Sync","overview.metric.sync.tooltip":"Current Studio to local sync activity","overview.metric.noAgent":"No Agent","overview.meta.version":"Version","overview.meta.version.tooltip":"Installed MCP server version","overview.meta.session":"Session","overview.meta.session.tooltip":"Current MCP session identifier","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Operating system process identifier","overview.meta.uptime":"Uptime","overview.meta.uptime.tooltip":"Time elapsed since the MCP server started","overview.feed.title":"Recent Game Changes","overview.feed.empty":"No recent changes","overview.changelog.title":"Session Change Summary","overview.changelog.entries":"Total","overview.changelog.scripts":"scripts","overview.changelog.instances":"instances","overview.changelog.properties":"properties","overview.changelog.assets":"assets","overview.tier.title":"Tier Usage","changelog.subtitle":"Game Change History","changelog.filter.all":"All","changelog.filter.active":"Active","changelog.filter.completed":"Completed","changelog.empty":"No changelog entries yet","changelog.basic.limit.title":"Basic preview shows the latest 3 sessions","changelog.basic.limit.body":"Upgrade to Pro to browse the full changelog timeline for this place.","changelog.basic.metricLabel":"Visible Changelog / Total","changelog.basic.visible":"visible","changelog.basic.total":"total","changelog.card.active":"Active","changelog.card.active.tooltip":"This session is still receiving new game changes.","changelog.card.completed":"Completed","changelog.card.completed.tooltip":"This session has ended and no more changes are expected.","changelog.card.bootstrapStatus":"Bootstrap","changelog.card.bootstrapStatus.tooltip":"This session only contains the initial sync bootstrap snapshot.","changelog.card.inProgress":"in progress","changelog.card.noChanges":"No changes yet","changelog.card.noChanges.tooltip":"No game changes have been extracted for this session yet.","changelog.card.bootstrapSummary":"Initial sync snapshot","changelog.card.bootstrapSummary.tooltip":"Initial file sync writes are collapsed into a single bootstrap snapshot row.","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"scripts","changelog.card.scripts.tooltip":"Script changes made in this session.","changelog.card.instances":"instances","changelog.card.instances.tooltip":"Instance create, delete, move, or clone changes in this session.","changelog.card.modified":"modified","changelog.card.created":"created","changelog.card.deleted":"deleted","changelog.card.moved":"moved","changelog.card.propertiesChanged":"properties changed","changelog.card.propertiesChanged.tooltip":"Property value changes recorded for this session.","changelog.card.lightingConfigured":"Lighting configured","changelog.card.lightingConfigured.tooltip":"Lighting or atmosphere settings changed in this session.","changelog.card.terrainConfigured":"Terrain configured","changelog.card.terrainConfigured.tooltip":"Terrain data or terrain settings changed in this session.","changelog.card.assetsInserted":"assets inserted","changelog.card.assetsInserted.tooltip":"Assets inserted into the place during this session.","changelog.category.script":"Scripts","changelog.category.instance":"Instances","changelog.category.property":"Properties","changelog.category.lighting":"Lighting","changelog.category.terrain":"Terrain","changelog.category.asset":"Assets","changelog.detail.changeSummary":"Change Summary","changelog.detail.changeSummary.tooltip":"Counts of extracted game changes grouped by category for this session.","changelog.detail.changeTimeline":"Change Timeline","changelog.detail.changeTimeline.tooltip":"Chronological list of extracted game changes for this session.","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"Before & After","changelog.detail.filterCategory":"Category","changelog.detail.filterCategory.tooltip":"Filter the timeline to a single change category.","changelog.detail.confidence.exact":"Exact","changelog.detail.confidence.exact.tooltip":"Both the before and after state were confirmed for this change.","changelog.detail.confidence.partial":"Partial","changelog.detail.confidence.partial.tooltip":"Only part of the before and after state could be confirmed for this change.","changelog.detail.confidence.afterOnly":"After only","changelog.detail.confidence.afterOnly.tooltip":"Only the resulting state after the change could be confirmed.","changelog.detail.confidence.intentOnly":"Intent only","changelog.detail.confidence.intentOnly.tooltip":"Only the requested action was recorded, not the resulting state.","changelog.detail.confidence.unknown":"Unknown","changelog.detail.confidence.unknown.tooltip":"This change could not be confidently classified from the available data.","changelog.detail.noChanges":"No changes in this category","changelog.detail.backToList":"Back to list","changelog.diff.empty":"No diff available","changelog.diff.unified":"Unified","changelog.diff.sideBySide":"Side by Side","changelog.diff.before":"Before","changelog.diff.after":"After","sync.overlay.title":"Roblox Studio plugin required","sync.overlay.message":"Sync status will be available once the Roblox Studio plugin connects.","sync.overlay.check1":"Is Roblox Studio running?","sync.overlay.check2":"Is the WEPPY Plugin installed?","sync.status.title":"Sync Status","sync.status.title.tooltip":"Current Studio and local file sync status for this place.","sync.status.forwardOnly":"Forward Only","sync.status.forwardOnly.tooltip":"Basic tier allows Studio to local forward sync only.","sync.status.place":"Place","sync.status.place.tooltip":"Connected Roblox place name and place ID.","sync.status.path":"Path","sync.status.path.tooltip":"Local filesystem root currently used for sync output.","sync.status.instances":"Instances","sync.status.instances.tooltip":"Total synced Roblox instances tracked in the local mirror.","sync.status.scripts":"Scripts","sync.status.scripts.tooltip":"Total synced script files currently indexed for this place.","sync.status.state":"State","sync.status.state.tooltip":"Current runtime sync state reported by the server.","sync.directions.title":"Sync Directions","sync.directions.title.tooltip":"Per-category sync direction and apply behavior between Local and Studio.","sync.directions.type":"Type","sync.directions.type.tooltip":"Sync category affected by this rule.","sync.directions.direction":"Direction","sync.directions.direction.tooltip":"Whether each category syncs from Studio, to Studio, or both ways.","sync.directions.applyMode":"Apply Mode","sync.directions.applyMode.tooltip":"How incoming sync changes are applied for this category.","sync.directions.cat.scripts":"Scripts","sync.directions.cat.values":"Values","sync.directions.cat.containers":"Containers","sync.directions.cat.data":"Data","sync.directions.cat.services":"Services","sync.directions.endpoint.local":"Local","sync.directions.endpoint.local.tooltip":"Local files on disk are always shown on the left side of the direction rail.","sync.directions.endpoint.studio":"Studio","sync.directions.endpoint.studio.tooltip":"Roblox Studio is always shown on the right side of the direction rail.","sync.directions.mode.manual":"Manual","sync.directions.mode.manual.tooltip":"Applies sync changes only when you trigger them manually.","sync.directions.mode.auto":"Auto","sync.directions.mode.auto.tooltip":"Applies sync changes automatically when updates arrive.","sync.directions.tooltip.forward.body":"Studio changes sync to local files only","sync.directions.tooltip.bidirectional.body":"Two-way sync between Local and Studio","sync.directions.tooltip.reverse.body":"Push local file changes to Studio","sync.directions.tooltip.proRequired":"Pro required in Basic tier","sync.directions.dir.forward":"forward","sync.directions.dir.bidirectional":"bidirectional","sync.directions.dir.reverse":"reverse","sync.log.title":"Sync Log","sync.log.empty":"No sync events yet","sync.log.type.write":"WRITE","sync.log.type.write.tooltip":"A new sync output was written to disk.","sync.log.type.update":"UPDATE","sync.log.type.update.tooltip":"An existing synced file or instance was updated.","sync.log.type.delete":"DELETE","sync.log.type.delete.tooltip":"A synced file or instance was removed.","sync.log.type.idle":"IDLE","sync.log.type.idle.tooltip":"A sync event was recorded without a file mutation.","sync.upgrade.title":"Unlock Full Sync with Pro","sync.upgrade.benefit1":"Bidirectional sync — edit files, auto-apply to Studio","sync.upgrade.benefit2":"Reverse sync — push file changes back to Studio","sync.upgrade.benefit3":"Full sync history and detailed change log","sync.upgrade.buy":"Upgrade to Pro","playtest.status.title":"Playtest Status","playtest.status.title.tooltip":"Current Roblox playtest session state reported by Studio.","playtest.status.mode":"Mode","playtest.status.mode.tooltip":"Studio playtest launch mode for the current session.","playtest.status.mode.value.tooltip":"Specific Roblox Studio playtest mode currently in use.","playtest.status.mode.play":"Play","playtest.status.mode.run":"Run","playtest.status.mode.server":"Server","playtest.status.mode.edit":"Edit","playtest.status.place.tooltip":"Roblox place currently associated with this playtest session.","playtest.status.state.running":"Running","playtest.status.state.running.tooltip":"A Roblox playtest session is currently running.","playtest.status.state.paused":"Paused","playtest.status.state.paused.tooltip":"The current Roblox playtest session is paused.","playtest.status.state.notRunning":"Not Running","playtest.status.state.notRunning.tooltip":"No Roblox playtest session is currently running.","playtest.control.play":"Play","playtest.control.pause":"Pause","playtest.control.resume":"Resume","playtest.control.stop":"Stop","playtest.history.title":"Test History","playtest.history.title.tooltip":"Recorded automated playtest runs for this project.","playtest.history.empty":"No test results yet","playtest.history.mode":"Mode","playtest.history.mode.tooltip":"Playtest mode used for this recorded test run.","playtest.history.status.passed":"Passed","playtest.history.status.failed":"Failed","playtest.history.status.running":"Running","playtest.history.status.unknown":"Unknown","playtest.history.status.tooltip":"Recorded result state for this automated playtest run.","playtest.empty.title":"No playtest results yet","playtest.empty.message":"Test results will appear here when the AI agent runs automated tests via system_info.run_test.","playtest.empty.message.before":"Test results will appear here when the AI agent runs automated tests via","playtest.empty.message.after":".","playtest.empty.runTest.tooltip":"WEPPY Dashboard automation entry point that runs Roblox playtest checks through the system_info tool.","playtest.report.title":"Selected Report","playtest.report.title.tooltip":"Detailed output for the currently selected automated playtest run.","playtest.report.content":"Report","playtest.report.content.tooltip":"Markdown summary for the selected automated playtest run.","playtest.report.logs":"Logs","playtest.report.logs.tooltip":"Execution logs captured for the selected automated playtest run.","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"No report content available","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest is a Pro-only feature","playtest.basic.desc":"Control playtesting from the WEPPY Dashboard, run automated tests, and view detailed test reports.","playtest.basic.benefit1":"One-click play/pause/stop controls","playtest.basic.benefit2":"Automated test execution via AI agent","playtest.basic.benefit3":"Test history with pass/fail tracking","playtest.basic.benefit4":"Detailed markdown test reports","playtest.sample.badge":"Preview of the Pro playtest view","playtest.sample.title":"You are previewing the playtest screen that becomes available after upgrading to Pro.","playtest.sample.message":"This preview uses sample data. Live playtest control, history management, and real reports unlock with Pro.","playtest.sample.clearDisabled":"Upgrade to Pro to clear live playtest history.","playtest.sample.place":"Arena Preview","playtest.sample.history.name":"Sample Arena Smoke Test","playtest.sample.context.why":"Spawn into the arena, survive the opener, and verify the HUD responds immediately.","playtest.sample.context.expected":"The player spawns safely, the countdown UI appears within one second, and the first wave starts without errors.","playtest.sample.context.observed":"Spawn protection held, the HUD updated on time, and wave one completed with no gameplay regressions.","playtest.sample.report.markdown":`# Sample Arena Smoke Test
70
70
 
71
71
  - Spawn flow: PASS
72
72
  - HUD countdown: PASS
@@ -76,7 +76,7 @@ This is a sample preview. Upgrade to Pro to run live playtests and save real rep
76
76
  [sample] spawn protection active
77
77
  [sample] hud countdown rendered
78
78
  [sample] wave one completed
79
- [sample] preview report finished`,"sidebar.whatsNew":"What's New","header.whatsNew":"What's New","header.whatsNew.tooltip":"What's New","whatsNew.pageTitle":"What's New","whatsNew.pageSubtitle":"Stay up to date with MCP changes","whatsNew.unreadSection":"Unread","whatsNew.allSection":"All Announcements","whatsNew.empty":"No announcements yet","whatsNew.newBadge":"NEW","whatsNew.category.release":"Release","whatsNew.category.notice":"Notice","whatsNew.category.deprecation":"Deprecated","whatsNew.category.tip":"Tip"},Sm={"sidebar.overview":"개요","sidebar.changelog":"변경 이력","sidebar.connection":"연결","sidebar.sync":"동기화","sidebar.playtest":"플레이테스트","sidebar.tools":"도구","sidebar.settings":"설정","sidebar.gate.l1":"MCP 서버를 연결해야 이 페이지를 사용할 수 있습니다.","sidebar.gate.l2":"Roblox Studio 플러그인을 연결해야 이 페이지를 사용할 수 있습니다.","header.currentProject":"현재 프로젝트","header.unknownProject":"알 수 없는 프로젝트","header.projectRoot.label":"Project Root","header.currentProject.loading":"프로젝트 루트 불러오는 중...","header.currentProject.unavailable":"프로젝트 루트를 불러올 수 없음","header.placeNotConnected":"플레이스 미연결","header.currentProject.tooltip":"현재 선택된 프로젝트 폴더입니다.","header.currentProject.loading.tooltip":"프로젝트 루트 정보를 아직 불러오는 중입니다.","header.currentProject.unavailable.tooltip":"현재 프로젝트 루트 정보를 불러올 수 없습니다.","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Sync root 불러오는 중...","header.currentProjectSyncRoot.unavailable":"Sync root 정보를 불러올 수 없음","header.currentProjectSyncRoot.tooltip":"선택된 프로젝트의 현재 sync root 폴더입니다.","header.currentProjectSyncRoot.loading.tooltip":"Sync root 정보를 아직 불러오는 중입니다.","header.currentProjectSyncRoot.unavailable.tooltip":"현재 sync root 정보를 불러올 수 없습니다.","header.testFiles.label":"Test Files","header.testFiles.unavailable":"테스트 파일 경로를 확인할 수 없습니다.","header.testFiles.tooltip":"선택된 플레이스의 현재 플레이테스트 파일 경로입니다.","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"플러그인 연결 필요","header.places.liveRequired":"실시간 활성 플레이스를 확인하려면 플러그인 연결이 필요합니다.","header.place.tooltip":"연결된 Roblox 플레이스입니다.","header.placeNotConnected.tooltip":"플레이스 미연결","header.changeProjectRoot":"프로젝트 루트 변경","header.changeProjectRoot.ariaLabel":"프로젝트 루트 변경","header.changeProjectRoot.tooltip":"현재 프로젝트 루트를 변경합니다.","header.changeProjectRoot.disabledTooltip.l0":"프로젝트 루트를 변경하려면 먼저 MCP 서버 연결이 필요합니다.","header.changeProjectRoot.disabledTooltip.loading":"프로젝트 루트 정보를 아직 불러오는 중입니다.","header.changeProjectRoot.disabledTooltip.unavailable":"현재 프로젝트 루트 정보를 불러올 수 없습니다.","header.projectRootModal.initial.title":"프로젝트 루트 변경","header.projectRootModal.initial.body.connected":"프로젝트 폴더를 선택하면 MCP 프로젝트 루트가 즉시 변경되고 현재 Studio 내용이 새 <selected project folder>/weppy-project-sync 대상으로 전체 재동기화됩니다.","header.projectRootModal.initial.body.disconnected":"프로젝트 폴더를 선택하면 MCP 프로젝트 루트가 즉시 변경되고 새 <selected project folder>/weppy-project-sync 경로가 다음 sync 대상으로 사용됩니다.","header.projectRootModal.initial.nextSyncRoot":"선택 후 새 sync 대상","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"현재 sync는 즉시 중단됩니다.","header.projectRootModal.initial.warningFreshSync":"현재 Studio 내용을 기준으로 새 대상에 fresh full sync가 다시 생성됩니다.","header.projectRootModal.initial.warningNoMove":"기존 sync 폴더는 자동으로 이동되지 않습니다.","header.projectRootModal.initial.warningDeferredSync":"Studio가 아직 연결되지 않았다면 전체 재동기화는 다음 플러그인 연결 시 시작됩니다.","header.projectRootModal.confirm.title":"새 프로젝트 루트 확인","header.projectRootModal.confirm.body":"적용 전에 선택한 프로젝트 폴더를 다시 확인하세요.","header.projectRootModal.confirm.projectRoot":"선택한 프로젝트 폴더","header.projectRootModal.confirm.syncRoot":"새 sync 대상","header.projectRootModal.confirm.warningNoMove":"기존 sync 폴더는 자동으로 이동되지 않습니다.","header.projectRootModal.pick":"폴더 선택","header.projectRootModal.apply":"변경 적용","header.projectRootModal.cancel":"취소","header.projectRootModal.error":"프로젝트 루트를 변경하지 못했습니다.","status.online":"온라인","status.offline":"오프라인","status.idle":"대기","status.syncing":"동기화 중","status.error":"오류","status.initializing":"초기화 중","level.l0.title":"서버 연결 끊김","level.l0.message":"WEPPY Dashboard가 열린 뒤 서버가 종료되었거나 응답하지 않습니다.","level.l1.title":"서버 연결됨","level.l1.hint":"확인: Studio 실행 중? 플러그인 설치?","level.l2.ok":"Studio 연결됨","tier.basic":"Basic","tier.basic.tooltip":"기본 WEPPY Dashboard 기능을 제공하는 Basic 티어입니다.","tier.pro":"Pro","tier.pro.tooltip":"전체 WEPPY Dashboard 기능을 제공하는 Pro 티어입니다.","tier.mixed":"혼합","tier.upgrade":"Pro로 업그레이드","tier.compare":"Basic vs Pro 비교","tier.banner.save":"Pro로 AI 토큰 절약!","tier.comparison.comingSoon":"Basic vs Pro 비교 — 준비 중","tier.comparison.close":"닫기","tier.comparison.detailTitle":"상세 도구 카탈로그","tier.comparison.description":"설명","tier.comparison.basic.core":"핵심 MCP 워크플로우","tier.comparison.basic.core.item1":"스크립트 생성/편집","tier.comparison.basic.core.item2":"인스턴스 관리","tier.comparison.basic.core.item3":"속성 제어","tier.comparison.basic.core.item4":"선택 및 검색","tier.comparison.basic.core.item5":"태그 관리","tier.comparison.basic.core.item6":"카메라 제어","tier.comparison.basic.core.item7":"로그 모니터링","tier.comparison.basic.sync":"동기화 (Basic)","tier.comparison.basic.sync.item1":"Studio에서 로컬로 단방향 동기화","tier.comparison.basic.sync.item2":"수동 적용이 기본값","tier.comparison.pro.all":"Basic의 모든 기능 포함, 추가로","tier.comparison.pro.sync":"고급 동기화 워크플로우","tier.comparison.pro.sync.item1":"유형별 동기화 방향 설정","tier.comparison.pro.sync.item2":"유형별 적용 모드","tier.comparison.pro.sync.item3":"양방향 및 역방향 동기화","tier.comparison.pro.sync.item4":"전체 동기화, 재동기화, Studio로 푸시","tier.comparison.pro.sync.item5":"멀티 플레이스 동기화","tier.comparison.pro.playtest":"플레이테스트 제어","tier.comparison.pro.playtest.item1":"플레이, 정지, 일시정지, 재개","tier.comparison.pro.playtest.item2":"플레이테스트 상태 검사","tier.comparison.pro.playtest.item3":"자동 테스트 실행","tier.comparison.pro.creation":"고급 생성 워크플로우","tier.comparison.pro.creation.item1":"대량 작업","tier.comparison.pro.creation.item2":"터레인 생성","tier.comparison.pro.creation.item3":"에셋 검색 및 삽입","tier.comparison.pro.creation.item4":"레이캐스트 및 공간 분석","tier.comparison.pro.creation.item5":"환경 제어","tier.comparison.discount.label":"🎁 Gumroad 결제 시 아래 코드를 입력하면 할인 받을 수 있어요:","tier.comparison.discount.code":"WEPPY-MCP","tier.comparison.discount.expiry":"4월 30일까지 유효","tier.promo.discount.hint":"🎁 Gumroad에서 WEPPY-MCP 코드 사용 · 4월 30일까지","tier.promo.discount.context":"🎁 Gumroad 결제 시 할인코드 입력:","tier.tool.query_instances.desc":"인스턴스 조회, 자식/자손 탐색, 클래스 정보, 이름·클래스 검색. Pro: 파일 트리, 프로젝트 구조, 속성·태그 검색.","tier.tool.mutate_instances.desc":"인스턴스 생성, 삭제, 복제, 이동, 이름변경, 피벗. Pro: 트리 생성, 대량 생성·삭제·복제.","tier.tool.manage_properties.desc":"속성, 어트리뷰트, 태그 조회 및 설정. Pro: 계산·상대값 설정, 대량 조회·설정, 자식 일괄 수정.","tier.tool.manage_scripts.desc":"스크립트 소스 코드 읽기, 쓰기, 생성, 삭제, 줄 편집, 검색. Pro: 스크립트 간 일괄 치환.","tier.tool.manage_lighting.desc":"Pro 전용. 조명, 대기, 하늘, 터레인 속성, 시간대 환경 설정.","tier.tool.manage_selection.desc":"선택 조회, 설정, 해제. Pro: 컨텍스트, 상세 정보, 항목 추가·제거, 변경 감시.","tier.tool.manage_camera.desc":"카메라 정보 조회, 경로 또는 좌표로 포커스, 추천 뷰 제안.","tier.tool.manage_tween.desc":"Pro 전용. 부드러운 애니메이션을 위한 트윈 생성, 재생, 일시정지, 취소.","tier.tool.manage_audio.desc":"Pro 전용. 사운드 재생, 정지, 일시정지, 재개. 오디오 리스너 설정.","tier.tool.manage_animation.desc":"Pro 전용. 애니메이션 로드, 재생, 정지. 휴머노이드·컨트롤러의 트랙 조회.","tier.tool.manage_physics.desc":"Pro 전용. 물리 충돌 그룹 등록, 그룹 간 충돌 설정, 목록 조회.","tier.tool.manage_effects.desc":"Pro 전용. 파티클 방출, 전체 삭제, 이펙트 활성화 토글.","tier.tool.manage_terrain.desc":"Pro 전용. 도형 채우기, 영역 삭제, 재질 치환, 색상 관리, 복셀 읽기·쓰기, 절차적 생성, 스무딩.","tier.tool.spatial_query.desc":"Pro 전용. 레이캐스트, 지면 찾기, 배치 확인, 영역 스캔, 평지·스폰 위치 탐색, 보행 분석, 공간 맵, 충돌 확인.","tier.tool.manage_assets.desc":"Pro 전용. 모델 삽입, 에셋 정보 조회, 크리에이터 스토어 검색, 무료 모델·패키지 삽입, 내보내기.","tier.tool.manage_sync.desc":"Pro 전용. 동기화 상태, 설정, 히스토리, 방향 설정, 동기화 파일 읽기·쓰기.","tier.tool.workspace_state.desc":"Pro 전용. 전체 동기화, 스냅샷, 최근 변경, 뷰포트 정보, 메타데이터, 캐시 관리.","tier.tool.manage_logs.desc":"출력 로그 필터링 조회, 증분 폴링, 버퍼 삭제, 최근 오류 조회.","tier.tool.system_info.desc":"연결 상태, 사용 티어 확인. Pro: 플레이스 정보, 서비스 목록, Studio 설정, 플레이테스트 제어, 자동 테스트.","tier.tool.batch_execute.desc":"Pro 전용. 여러 명령을 한 번에 일괄 실행. 순차 처리하며 오류 시 계속 진행 옵션.","tier.tool.execute_luau.desc":"Pro 전용. Roblox Studio 샌드박스에서 임의 Luau 코드 실행.","connection.server.title":"서버 상태","connection.server.version":"버전","connection.server.version.tooltip":"설치된 MCP 서버 버전입니다.","connection.server.pid":"PID","connection.server.pid.tooltip":"운영체제에서 사용하는 프로세스 식별자입니다.","connection.server.uptime":"가동 시간","connection.server.uptime.tooltip":"MCP 서버가 시작된 뒤 경과한 시간입니다.","connection.server.session":"세션","connection.server.session.tooltip":"현재 MCP 세션 식별자입니다.","connection.server.exec":"실행 파일","connection.server.exec.tooltip":"MCP 서버를 실행한 실행 파일 경로입니다.","connection.reconnect":"수동 재연결","connection.checkSettings":"설정 확인","connection.agents.title":"AI 에이전트","connection.agents.name":"에이전트","connection.agents.cwd":"작업 디렉토리","connection.agents.cwd.tooltip":"연결된 AI 에이전트의 현재 작업 디렉토리입니다.","connection.agents.projectRoot":"프로젝트 루트","connection.agents.projectRoot.tooltip":"Sync ownership을 결정하는 프로젝트 경로","connection.agents.projectRoot.unresolved":"미확인","connection.agents.connected":"연결 시각","connection.agents.unknown":"알 수 없음","connection.agents.none":"연결된 에이전트 없음","connection.plugins.title":"플러그인","connection.plugins.place":"플레이스","connection.plugins.clientId":"클라이언트 ID","connection.plugins.clientId.tooltip":"현재 Studio 연결을 식별하는 플러그인 클라이언트 ID입니다.","connection.plugins.lastSeen":"마지막 확인","connection.plugins.lastSeen.tooltip":"플러그인에서 가장 최근에 수신한 heartbeat 시각입니다.","connection.plugins.version":"버전","connection.plugins.version.tooltip":"Studio가 보고한 설치된 플러그인 버전입니다.","connection.plugins.none":"연결된 플러그인 없음","connection.log.title":"연결 로그","connection.log.empty":"이벤트 없음","connection.time.secondsAgo":"초 전","connection.time.minutesAgo":"분 전","connection.time.hoursAgo":"시간 전","common.loading":"로딩 중...","common.retry":"재시도","common.reconnecting":"재연결 중...","common.expand":"펼치기","common.collapse":"접기","tools.tab.history":"히스토리","tools.tab.statistics":"통계","tools.tab.failures":"실패","tools.col.time":"시간","tools.col.time.tooltip":"도구 실행이 기록된 시각입니다.","tools.col.toolAction":"도구.액션","tools.col.toolAction.tooltip":"실행된 도구 이름과 액션입니다.","tools.col.duration":"소요 시간","tools.col.duration.tooltip":"도구 실행이 완료될 때까지 걸린 시간입니다.","tools.col.status":"상태","tools.col.status.tooltip":"기록된 도구 실행의 결과 상태입니다.","tools.col.tier":"티어","tools.col.tier.tooltip":"도구 또는 액션에 필요한 라이센스 티어입니다.","tools.col.tierStats.tooltip":"도구 통계 행이 Basic, Pro, Mixed 중 어느 집계인지 설명합니다.","tools.col.tool":"도구","tools.col.tool.tooltip":"통계 테이블에 표시되는 통합 도구 이름입니다.","tools.col.calls":"호출 수","tools.col.calls.tooltip":"이 도구에 대해 기록된 총 호출 횟수입니다.","tools.col.ok":"OK","tools.col.ok.tooltip":"직접 성공한 실행 횟수입니다.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"fallback 실행으로 성공한 횟수입니다.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"fallback 없이 차단된 실행 횟수입니다.","tools.col.err":"실패","tools.col.err.tooltip":"실패로 끝난 실행 횟수입니다.","tools.col.okRate":"성공률","tools.col.okRate.tooltip":"성공적으로 끝난 호출 비율입니다.","tools.col.avgTime":"평균 시간","tools.col.avgTime.tooltip":"기록된 호출들의 평균 실행 시간입니다.","tools.col.error":"오류","tools.filter.tool":"도구","tools.filter.all":"전체","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"이 항목은 Pro 전용 도구 또는 액션을 사용했습니다.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"요청한 Pro 액션이 Basic fallback으로 성공했습니다.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"요청한 Pro 액션이 차단되었고 fallback도 실행되지 않았습니다.","tools.badge.err":"실패","tools.badge.err.tooltip":"도구 실행이 실패로 끝났습니다.","tools.status.ok":"OK","tools.status.ok.tooltip":"도구 실행이 성공적으로 완료되었습니다.","tools.tier.mixed.tooltip":"이 도구에는 Basic 액션과 Pro 액션이 함께 포함됩니다.","tools.detail.params":"파라미터","tools.detail.params.tooltip":"이 도구 실행에 전달된 입력 파라미터입니다.","tools.detail.result":"결과","tools.detail.result.tooltip":"이 도구 실행에서 반환된 결과 페이로드입니다.","tools.detail.requestedCommand":"요청한 명령","tools.detail.executedCommand":"실행된 명령","tools.detail.alternatives":"대안","tools.detail.blockedMessage":"차단 사유","tools.detail.noFallback":"Fallback 없음","tools.detail.noFallback.value":"실행된 fallback이 없습니다.","tools.detail.errorMessage":"오류 메시지","tools.clear.history.title":"히스토리를 삭제할까요?","tools.clear.history.message":"현재 place의 도구 히스토리가 영구적으로 삭제됩니다.","tools.clear.statistics.title":"통계를 삭제할까요?","tools.clear.statistics.message":"현재 place의 도구 통계가 영구적으로 초기화됩니다.","tools.detail.error":"오류","tools.page.prev":"이전","tools.page.prev.tooltip":"도구 히스토리의 이전 페이지로 이동합니다.","tools.page.next":"다음","tools.page.next.tooltip":"도구 히스토리의 다음 페이지로 이동합니다.","tools.empty.history":"히스토리 없음","tools.empty.stats":"도구 통계 없음","tools.empty.failures":"실패 없음","tools.summary.total":"합계","tools.summary.calls":"호출","tools.summary.sessions":"세션","settings.license.title":"라이센스","settings.license.title.tooltip":"현재 라이센스 상태와 구독 티어입니다.","settings.license.status":"상태","settings.license.status.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.tier":"티어","settings.license.tier.tooltip":"WEPPY Dashboard 기능 범위를 결정하는 현재 구독 티어입니다.","settings.license.key":"키","settings.license.key.tooltip":"서버에 현재 로드된 마스킹된 라이센스 키입니다.","settings.license.keyValue.tooltip":"서버에 현재 로드된 마스킹된 라이센스 키입니다.","settings.license.provider":"제공자","settings.license.provider.tooltip":"이 키를 검증하는 라이센스 제공자입니다.","settings.license.providerValue.tooltip":"이 키를 검증하는 라이센스 제공자입니다.","settings.license.active":"활성","settings.license.active.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.status.activeCancelPending.tooltip":"해지가 예약되어 있지만 현재 결제 주기가 끝날 때까지 Pro 접근은 유지됩니다.","settings.license.inactive":"비활성","settings.license.inactive.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.expired":"만료","settings.license.expired.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.unavailable":"라이센스 정보를 불러올 수 없음","settings.license.detail.cancelPending":"해지가 예약되었습니다. 현재 결제 주기가 끝날 때까지 Pro 접근은 유지됩니다.","settings.license.reset":"라이센스 리셋","settings.readOnly":"읽기 전용","settings.readOnly.tooltip":"이 섹션의 값은 WEPPY Dashboard에서 수정할 수 없습니다.","settings.unavailable":"설정을 불러올 수 없음","settings.general.title":"일반 설정","settings.general.title.tooltip":"변경 즉시 적용되는 Hot 설정입니다.","settings.general.liveApply":"즉시 반영","settings.general.liveApply.tooltip":"이 섹션의 변경은 별도 저장 버튼 없이 바로 적용됩니다.","settings.general.applied":"적용됨","settings.general.logLevel":"로그 레벨","settings.general.logLevel.tooltip":"WEPPY Dashboard 로그에 남길 상세 수준을 설정합니다.","settings.general.localHistory":"도구 히스토리 기록","settings.general.localHistory.tooltip":"WEPPY Dashboard 히스토리 화면용 로컬 도구 실행 기록을 저장합니다.","settings.general.localStatistics":"도구 통계 집계","settings.general.localStatistics.tooltip":"WEPPY Dashboard 보고용 로컬 사용 통계를 집계합니다.","settings.general.contextCapture":"컨텍스트 캡처","settings.general.contextCapture.tooltip":"활성화하면 체인지로그와 플레이테스트 화면에 구조화된 실행 컨텍스트를 기록합니다.","settings.general.requestTimeout":"요청 타임아웃","settings.general.requestTimeout.tooltip":"요청을 실패로 처리하기 전까지 WEPPY Dashboard가 기다리는 최대 시간입니다.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"요청 타임아웃 단위는 밀리초입니다.","settings.cold.title":"서버 환경변수","settings.cold.title.tooltip":"서버 시작 시 로드되는 읽기 전용 환경변수 값입니다.","settings.cold.httpPort.tooltip":"MCP WEPPY Dashboard HTTP 서버가 사용하는 포트 번호입니다.","settings.cold.httpHost.tooltip":"MCP WEPPY Dashboard HTTP 서버가 바인딩하는 호스트 인터페이스입니다.","settings.cold.dashboardAutoOpen.tooltip":"서버 시작 시 브라우저에서 WEPPY Dashboard를 자동으로 열지 여부를 제어합니다.","settings.cold.dashboardAutoOpen.value.tooltip":"브라우저 자동 열기 현재 시작 동작입니다.","settings.cold.hint":"환경변수로 설정하세요.","settings.language.title":"언어","settings.language.title.tooltip":"WEPPY Dashboard UI 텍스트에 사용할 언어를 선택합니다.","settings.language.dashboard":"WEPPY Dashboard 언어","settings.language.dashboard.tooltip":"Auto일 때는 시스템 언어를 따르고, 아니면 선택한 언어를 강제합니다.","settings.language.auto":"자동","overview.l0.title":"MCP 서버 연결 끊김","overview.l0.message":"MCP 서버가 응답하지 않습니다. WEPPY Dashboard가 자동으로 재연결을 시도합니다.","overview.l0.step1":"MCP 서버 프로세스가 실행 중인지 확인하세요","overview.l0.step2":"필요 시 MCP 서버 명령을 다시 시작하세요","overview.l0.reconnecting":"3초마다 자동 재연결 중...","overview.l0.reconnectBtn":"수동 재연결","overview.l0.settingsBtn":"설정 확인","overview.l1.pluginGuide":"Roblox Studio 플러그인이 연결되지 않았습니다","overview.l1.check1":"Roblox Studio가 실행 중인가요?","overview.l1.check2":"WEPPY Plugin이 설치되어 있나요?","overview.l1.feedHint":"플러그인이 연결되면 변경사항이 표시됩니다","overview.metric.server":"서버","overview.metric.server.tooltip":"MCP 서버의 실행 상태와 프로세스 상태입니다.","overview.metric.plugin":"플러그인","overview.metric.plugin.tooltip":"Roblox Studio 플러그인의 연결 상태와 버전 정보입니다.","overview.metric.agent":"에이전트","overview.metric.agent.tooltip":"연결된 AI 코딩 에이전트와 현재 실행 상태입니다.","overview.metric.agent.instancesUnit":"인스턴스","overview.metric.sync":"동기화","overview.metric.sync.tooltip":"현재 Studio와 로컬 파일 간 동기화 상태입니다.","overview.metric.noAgent":"에이전트 없음","overview.meta.version":"버전","overview.meta.version.tooltip":"설치된 MCP 서버 버전입니다.","overview.meta.session":"세션","overview.meta.session.tooltip":"현재 MCP 세션 식별자입니다.","overview.meta.pid":"PID","overview.meta.pid.tooltip":"운영체제에서 사용하는 프로세스 식별자입니다.","overview.meta.uptime":"가동 시간","overview.meta.uptime.tooltip":"MCP 서버가 시작된 뒤 경과한 시간입니다.","overview.feed.title":"최근 게임 변경","overview.feed.empty":"최근 변경사항 없음","overview.changelog.title":"세션 변경 요약","overview.changelog.entries":"합계","overview.changelog.scripts":"스크립트","overview.changelog.instances":"인스턴스","overview.changelog.properties":"속성","overview.changelog.assets":"에셋","overview.tier.title":"티어 사용 현황","changelog.subtitle":"게임 변경 이력","changelog.filter.all":"전체","changelog.filter.active":"활성","changelog.filter.completed":"완료","changelog.empty":"변경 이력이 없습니다","changelog.basic.limit.title":"Basic 미리보기에서는 최신 3개 세션만 표시됩니다","changelog.basic.limit.body":"Pro로 업그레이드하면 이 플레이스의 전체 변경 이력 타임라인을 확인할 수 있습니다.","changelog.basic.metricLabel":"표시 중인 변경 이력 / 전체","changelog.basic.visible":"표시 중","changelog.basic.total":"전체","changelog.card.active":"활성","changelog.card.active.tooltip":"이 세션은 아직 새 게임 변경을 계속 수집 중입니다.","changelog.card.completed":"완료","changelog.card.completed.tooltip":"이 세션은 종료되어 더 이상 새 변경이 추가되지 않습니다.","changelog.card.bootstrapStatus":"초기화","changelog.card.bootstrapStatus.tooltip":"이 세션에는 초기 동기화 부트스트랩 스냅샷만 포함됩니다.","changelog.card.inProgress":"진행 중","changelog.card.noChanges":"아직 변경사항 없음","changelog.card.noChanges.tooltip":"이 세션에서는 아직 추출된 게임 변경이 없습니다.","changelog.card.bootstrapSummary":"초기 동기화 스냅샷","changelog.card.bootstrapSummary.tooltip":"초기 파일 동기화 쓰기 작업은 하나의 부트스트랩 스냅샷 행으로 축약됩니다.","changelog.card.sessionIntent":"세션 의도","changelog.card.scripts":"스크립트","changelog.card.scripts.tooltip":"이 세션에서 발생한 스크립트 변경입니다.","changelog.card.instances":"인스턴스","changelog.card.instances.tooltip":"이 세션에서 발생한 인스턴스 생성, 삭제, 이동, 복제 변경입니다.","changelog.card.modified":"수정","changelog.card.created":"생성","changelog.card.deleted":"삭제","changelog.card.moved":"이동","changelog.card.propertiesChanged":"속성 변경","changelog.card.propertiesChanged.tooltip":"이 세션에서 기록된 속성 값 변경입니다.","changelog.card.lightingConfigured":"라이팅 설정됨","changelog.card.lightingConfigured.tooltip":"이 세션에서 라이팅 또는 대기 설정이 변경되었습니다.","changelog.card.terrainConfigured":"터레인 설정됨","changelog.card.terrainConfigured.tooltip":"이 세션에서 터레인 데이터 또는 터레인 설정이 변경되었습니다.","changelog.card.assetsInserted":"에셋 삽입","changelog.card.assetsInserted.tooltip":"이 세션 동안 플레이스에 삽입된 에셋입니다.","changelog.category.script":"스크립트","changelog.category.instance":"인스턴스","changelog.category.property":"속성","changelog.category.lighting":"라이팅","changelog.category.terrain":"터레인","changelog.category.asset":"에셋","changelog.detail.changeSummary":"변경 요약","changelog.detail.changeSummary.tooltip":"이 세션에서 추출된 게임 변경 수를 카테고리별로 묶어서 보여줍니다.","changelog.detail.changeTimeline":"변경 타임라인","changelog.detail.changeTimeline.tooltip":"이 세션에서 추출된 게임 변경을 시간순으로 보여줍니다.","changelog.detail.context.title":"컨텍스트 요약","changelog.detail.context.tooltip":"이 체인지로그 세션에 연결된 구조화된 실행 컨텍스트입니다.","changelog.detail.verification.title":"검증","changelog.detail.verification.tooltip":"이 체인지로그 세션에 연결된 검증 신호입니다.","changelog.detail.verification.label":"결과","changelog.detail.verification.status":"상태","changelog.detail.verification.timestamp":"기록 시각","changelog.detail.beforeAfter":"변경 전후 비교","changelog.detail.filterCategory":"카테고리","changelog.detail.filterCategory.tooltip":"타임라인을 하나의 변경 카테고리만 보이도록 필터링합니다.","changelog.detail.confidence.exact":"정확","changelog.detail.confidence.exact.tooltip":"이 변경은 변경 전과 변경 후 상태가 모두 확인되었습니다.","changelog.detail.confidence.partial":"부분 확인","changelog.detail.confidence.partial.tooltip":"이 변경은 변경 전후 상태 중 일부만 확인되었습니다.","changelog.detail.confidence.afterOnly":"결과만 확인","changelog.detail.confidence.afterOnly.tooltip":"이 변경은 적용 후 결과 상태만 확인되었습니다.","changelog.detail.confidence.intentOnly":"의도만 기록","changelog.detail.confidence.intentOnly.tooltip":"요청된 작업 의도만 기록되었고 결과 상태는 확인되지 않았습니다.","changelog.detail.confidence.unknown":"알 수 없음","changelog.detail.confidence.unknown.tooltip":"사용 가능한 데이터만으로는 이 변경을 신뢰도 있게 분류할 수 없습니다.","changelog.detail.noChanges":"이 카테고리에 변경사항 없음","changelog.detail.backToList":"목록으로 돌아가기","changelog.diff.empty":"비교할 내용 없음","changelog.diff.unified":"통합","changelog.diff.sideBySide":"나란히 비교","changelog.diff.before":"변경 전","changelog.diff.after":"변경 후","sync.overlay.title":"Roblox Studio 플러그인이 필요합니다","sync.overlay.message":"Roblox Studio 플러그인이 연결되면 동기화 상태를 확인할 수 있습니다.","sync.overlay.check1":"Roblox Studio가 실행 중인가요?","sync.overlay.check2":"WEPPY Plugin이 설치되어 있나요?","sync.status.title":"동기화 상태","sync.status.title.tooltip":"이 플레이스의 Studio와 로컬 파일 동기화 상태입니다.","sync.status.forwardOnly":"단방향만","sync.status.forwardOnly.tooltip":"Basic 티어에서는 Studio에서 로컬로 가는 단방향 동기화만 사용할 수 있습니다.","sync.status.place":"플레이스","sync.status.place.tooltip":"연결된 Roblox 플레이스 이름과 플레이스 ID입니다.","sync.status.path":"경로","sync.status.path.tooltip":"현재 동기화 출력에 사용하는 로컬 파일 시스템 루트입니다.","sync.status.instances":"인스턴스","sync.status.instances.tooltip":"로컬 미러에 추적 중인 동기화된 Roblox 인스턴스 수입니다.","sync.status.scripts":"스크립트","sync.status.scripts.tooltip":"이 플레이스에 대해 현재 인덱싱된 동기화 스크립트 파일 수입니다.","sync.status.state":"상태","sync.status.state.tooltip":"서버가 보고한 현재 동기화 런타임 상태입니다.","sync.directions.title":"동기화 방향","sync.directions.title.tooltip":"Local과 Studio 사이의 카테고리별 동기화 방향과 적용 방식입니다.","sync.directions.type":"유형","sync.directions.type.tooltip":"이 규칙이 적용되는 동기화 카테고리입니다.","sync.directions.direction":"방향","sync.directions.direction.tooltip":"각 카테고리가 Studio에서만, Studio로만, 또는 양방향으로 동기화되는지 나타냅니다.","sync.directions.applyMode":"적용 모드","sync.directions.applyMode.tooltip":"이 카테고리에 들어오는 동기화 변경을 적용하는 방식입니다.","sync.directions.cat.scripts":"스크립트","sync.directions.cat.values":"값","sync.directions.cat.containers":"컨테이너","sync.directions.cat.data":"데이터","sync.directions.cat.services":"서비스","sync.directions.endpoint.local":"Local","sync.directions.endpoint.local.tooltip":"방향 레일의 왼쪽은 항상 디스크의 로컬 파일을 의미합니다.","sync.directions.endpoint.studio":"Studio","sync.directions.endpoint.studio.tooltip":"방향 레일의 오른쪽은 항상 Roblox Studio를 의미합니다.","sync.directions.mode.manual":"수동","sync.directions.mode.manual.tooltip":"직접 실행할 때만 동기화 변경을 적용합니다.","sync.directions.mode.auto":"자동","sync.directions.mode.auto.tooltip":"업데이트가 들어오면 동기화 변경을 자동으로 적용합니다.","sync.directions.tooltip.forward.body":"Studio 변경 사항을 로컬 파일로만 동기화합니다","sync.directions.tooltip.bidirectional.body":"Local과 Studio 사이에 양방향 동기화를 사용합니다","sync.directions.tooltip.reverse.body":"로컬 파일 변경 사항을 Studio로 푸시합니다","sync.directions.tooltip.proRequired":"Basic 티어에서는 Pro가 필요합니다","sync.directions.dir.forward":"순방향","sync.directions.dir.bidirectional":"양방향","sync.directions.dir.reverse":"역방향","sync.log.title":"동기화 로그","sync.log.empty":"동기화 이벤트 없음","sync.log.type.write":"쓰기","sync.log.type.write.tooltip":"새 동기화 출력이 디스크에 기록되었습니다.","sync.log.type.update":"업데이트","sync.log.type.update.tooltip":"기존 동기화 파일 또는 인스턴스가 갱신되었습니다.","sync.log.type.delete":"삭제","sync.log.type.delete.tooltip":"동기화된 파일 또는 인스턴스가 제거되었습니다.","sync.log.type.idle":"대기","sync.log.type.idle.tooltip":"파일 변경 없이 동기화 이벤트만 기록되었습니다.","sync.upgrade.title":"Pro로 완전한 동기화 기능 해제","sync.upgrade.benefit1":"양방향 동기화 — 파일 편집 시 Studio에 자동 반영","sync.upgrade.benefit2":"역방향 동기화 — 파일 변경을 Studio로 전송","sync.upgrade.benefit3":"전체 동기화 히스토리 및 상세 변경 로그","sync.upgrade.buy":"Pro로 업그레이드","playtest.status.title":"플레이테스트 상태","playtest.status.title.tooltip":"Studio가 보고한 현재 Roblox 플레이테스트 세션 상태입니다.","playtest.status.mode":"모드","playtest.status.mode.tooltip":"현재 세션에 사용 중인 Studio 플레이테스트 실행 모드입니다.","playtest.status.mode.value.tooltip":"현재 적용 중인 Roblox Studio 플레이테스트 모드의 구체적인 값입니다.","playtest.status.mode.play":"플레이","playtest.status.mode.run":"실행","playtest.status.mode.server":"서버","playtest.status.mode.edit":"편집","playtest.status.place.tooltip":"이 플레이테스트 세션과 연결된 Roblox 플레이스입니다.","playtest.status.state.running":"실행 중","playtest.status.state.running.tooltip":"현재 Roblox 플레이테스트 세션이 실행 중입니다.","playtest.status.state.paused":"일시정지","playtest.status.state.paused.tooltip":"현재 Roblox 플레이테스트 세션이 일시정지 상태입니다.","playtest.status.state.notRunning":"실행 안 함","playtest.status.state.notRunning.tooltip":"현재 실행 중인 Roblox 플레이테스트 세션이 없습니다.","playtest.control.play":"플레이","playtest.control.pause":"일시정지","playtest.control.resume":"재개","playtest.control.stop":"정지","playtest.history.title":"테스트 히스토리","playtest.history.title.tooltip":"이 프로젝트에서 기록된 자동 플레이테스트 실행 이력입니다.","playtest.history.empty":"테스트 결과 없음","playtest.history.mode":"모드","playtest.history.mode.tooltip":"이 기록된 테스트 실행에 사용된 플레이테스트 모드입니다.","playtest.history.status.passed":"성공","playtest.history.status.failed":"실패","playtest.history.status.running":"실행 중","playtest.history.status.unknown":"알 수 없음","playtest.history.status.tooltip":"이 자동 플레이테스트 실행의 기록된 결과 상태입니다.","playtest.empty.title":"아직 플레이테스트 결과가 없습니다","playtest.empty.message":"AI 에이전트가 system_info.run_test로 자동 테스트를 실행하면 결과가 표시됩니다.","playtest.empty.message.before":"AI 에이전트가 자동 테스트를","playtest.empty.message.after":"로 실행하면 결과가 여기에 표시됩니다.","playtest.empty.runTest.tooltip":"system_info 도구를 통해 Roblox 플레이테스트 검사를 실행하는 WEPPY Dashboard 자동화 진입점입니다.","playtest.report.title":"선택된 리포트","playtest.report.title.tooltip":"현재 선택된 자동 플레이테스트 실행의 상세 출력입니다.","playtest.report.content":"리포트","playtest.report.content.tooltip":"선택된 자동 플레이테스트 실행의 마크다운 요약입니다.","playtest.report.logs":"로그","playtest.report.logs.tooltip":"선택된 자동 플레이테스트 실행에서 수집된 실행 로그입니다.","playtest.context.contextId":"컨텍스트 ID","playtest.context.why":"이 테스트를 실행한 이유","playtest.context.expected":"예상 결과","playtest.context.observed":"관찰 결과","playtest.report.empty":"리포트 내용 없음","playtest.basic.icon":"🎮","playtest.basic.title":"플레이테스트는 Pro 전용 기능입니다","playtest.basic.desc":"WEPPY Dashboard에서 플레이테스트를 제어하고, 자동 테스트를 실행하며, 상세한 테스트 리포트를 확인하세요.","playtest.basic.benefit1":"원클릭 플레이/일시정지/정지 제어","playtest.basic.benefit2":"AI 에이전트를 통한 자동 테스트 실행","playtest.basic.benefit3":"성공/실패 추적이 가능한 테스트 히스토리","playtest.basic.benefit4":"상세한 마크다운 테스트 리포트","playtest.sample.badge":"Pro 플레이테스트 화면 미리보기","playtest.sample.title":"현재 보고 있는 화면은 Pro 업그레이드 후 사용할 수 있는 플레이테스트 화면 예시입니다.","playtest.sample.message":"이 미리보기는 샘플 데이터로 구성되어 있습니다. 실시간 플레이테스트 제어, 히스토리 관리, 실제 리포트 저장은 Pro 구매 후 사용할 수 있습니다.","playtest.sample.clearDisabled":"실제 플레이테스트 기록 삭제는 Pro에서 사용할 수 있습니다.","playtest.sample.place":"아레나 미리보기","playtest.sample.history.name":"샘플 아레나 스모크 테스트","playtest.sample.context.why":"아레나에 스폰한 뒤 첫 구간을 버티고 HUD가 즉시 반응하는지 확인합니다.","playtest.sample.context.expected":"플레이어가 안전하게 스폰되고, 1초 안에 카운트다운 UI가 표시되며, 첫 웨이브가 오류 없이 시작되어야 합니다.","playtest.sample.context.observed":"스폰 보호가 정상 동작했고, HUD가 제때 갱신되었으며, 첫 웨이브가 회귀 없이 완료되었습니다.","playtest.sample.report.markdown":`# 샘플 아레나 스모크 테스트
79
+ [sample] preview report finished`,"sidebar.whatsNew":"What's New","header.whatsNew":"What's New","header.whatsNew.tooltip":"What's New","whatsNew.pageTitle":"What's New","whatsNew.pageSubtitle":"Stay up to date with MCP changes","whatsNew.unreadSection":"Unread","whatsNew.allSection":"All Announcements","whatsNew.empty":"No announcements yet","whatsNew.newBadge":"NEW","whatsNew.category.release":"Release","whatsNew.category.notice":"Notice","whatsNew.category.deprecation":"Deprecated","whatsNew.category.tip":"Tip"},km={"sidebar.overview":"개요","sidebar.changelog":"변경 이력","sidebar.connection":"연결","sidebar.sync":"동기화","sidebar.playtest":"플레이테스트","sidebar.tools":"도구","sidebar.settings":"설정","sidebar.gate.l1":"MCP 서버를 연결해야 이 페이지를 사용할 수 있습니다.","sidebar.gate.l2":"Roblox Studio 플러그인을 연결해야 이 페이지를 사용할 수 있습니다.","header.currentProject":"현재 프로젝트","header.unknownProject":"알 수 없는 프로젝트","header.projectRoot.label":"Project Root","header.currentProject.loading":"프로젝트 루트 불러오는 중...","header.currentProject.unavailable":"프로젝트 루트를 불러올 수 없음","header.placeNotConnected":"플레이스 미연결","header.currentProject.tooltip":"현재 선택된 프로젝트 폴더입니다.","header.currentProject.loading.tooltip":"프로젝트 루트 정보를 아직 불러오는 중입니다.","header.currentProject.unavailable.tooltip":"현재 프로젝트 루트 정보를 불러올 수 없습니다.","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Sync root 불러오는 중...","header.currentProjectSyncRoot.unavailable":"Sync root 정보를 불러올 수 없음","header.currentProjectSyncRoot.tooltip":"선택된 프로젝트의 현재 sync root 폴더입니다.","header.currentProjectSyncRoot.loading.tooltip":"Sync root 정보를 아직 불러오는 중입니다.","header.currentProjectSyncRoot.unavailable.tooltip":"현재 sync root 정보를 불러올 수 없습니다.","header.testFiles.label":"Test Files","header.testFiles.unavailable":"테스트 파일 경로를 확인할 수 없습니다.","header.testFiles.tooltip":"선택된 플레이스의 현재 플레이테스트 파일 경로입니다.","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"플러그인 연결 필요","header.places.liveRequired":"실시간 활성 플레이스를 확인하려면 플러그인 연결이 필요합니다.","header.place.tooltip":"연결된 Roblox 플레이스입니다.","header.placeNotConnected.tooltip":"플레이스 미연결","header.changeProjectRoot":"프로젝트 루트 변경","header.changeProjectRoot.ariaLabel":"프로젝트 루트 변경","header.changeProjectRoot.tooltip":"현재 프로젝트 루트를 변경합니다.","header.changeProjectRoot.disabledTooltip.l0":"프로젝트 루트를 변경하려면 먼저 MCP 서버 연결이 필요합니다.","header.changeProjectRoot.disabledTooltip.loading":"프로젝트 루트 정보를 아직 불러오는 중입니다.","header.changeProjectRoot.disabledTooltip.unavailable":"현재 프로젝트 루트 정보를 불러올 수 없습니다.","header.projectRootModal.initial.title":"프로젝트 루트 변경","header.projectRootModal.initial.body.connected":"프로젝트 폴더를 선택하면 MCP 프로젝트 루트가 즉시 변경되고 현재 Studio 내용이 새 <selected project folder>/weppy-project-sync 대상으로 전체 재동기화됩니다.","header.projectRootModal.initial.body.disconnected":"프로젝트 폴더를 선택하면 MCP 프로젝트 루트가 즉시 변경되고 새 <selected project folder>/weppy-project-sync 경로가 다음 sync 대상으로 사용됩니다.","header.projectRootModal.initial.nextSyncRoot":"선택 후 새 sync 대상","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"현재 sync는 즉시 중단됩니다.","header.projectRootModal.initial.warningFreshSync":"현재 Studio 내용을 기준으로 새 대상에 fresh full sync가 다시 생성됩니다.","header.projectRootModal.initial.warningNoMove":"기존 sync 폴더는 자동으로 이동되지 않습니다.","header.projectRootModal.initial.warningDeferredSync":"Studio가 아직 연결되지 않았다면 전체 재동기화는 다음 플러그인 연결 시 시작됩니다.","header.projectRootModal.confirm.title":"새 프로젝트 루트 확인","header.projectRootModal.confirm.body":"적용 전에 선택한 프로젝트 폴더를 다시 확인하세요.","header.projectRootModal.confirm.projectRoot":"선택한 프로젝트 폴더","header.projectRootModal.confirm.syncRoot":"새 sync 대상","header.projectRootModal.confirm.warningNoMove":"기존 sync 폴더는 자동으로 이동되지 않습니다.","header.projectRootModal.pick":"폴더 선택","header.projectRootModal.apply":"변경 적용","header.projectRootModal.cancel":"취소","header.projectRootModal.error":"프로젝트 루트를 변경하지 못했습니다.","status.online":"온라인","status.offline":"오프라인","status.idle":"대기","status.syncing":"동기화 중","status.error":"오류","status.initializing":"초기화 중","level.l0.title":"서버 연결 끊김","level.l0.message":"WEPPY Dashboard가 열린 뒤 서버가 종료되었거나 응답하지 않습니다.","level.l1.title":"서버 연결됨","level.l1.hint":"확인: Studio 실행 중? 플러그인 설치?","level.l2.ok":"Studio 연결됨","tier.basic":"Basic","tier.basic.tooltip":"기본 WEPPY Dashboard 기능을 제공하는 Basic 티어입니다.","tier.pro":"Pro","tier.pro.tooltip":"전체 WEPPY Dashboard 기능을 제공하는 Pro 티어입니다.","tier.mixed":"혼합","tier.upgrade":"Pro로 업그레이드","tier.compare":"Basic vs Pro 비교","tier.banner.save":"Pro로 AI 토큰 절약!","tier.comparison.comingSoon":"Basic vs Pro 비교 — 준비 중","tier.comparison.close":"닫기","tier.comparison.detailTitle":"상세 도구 카탈로그","tier.comparison.description":"설명","tier.comparison.basic.core":"핵심 MCP 워크플로우","tier.comparison.basic.core.item1":"스크립트 생성/편집","tier.comparison.basic.core.item2":"인스턴스 관리","tier.comparison.basic.core.item3":"속성 제어","tier.comparison.basic.core.item4":"선택 및 검색","tier.comparison.basic.core.item5":"태그 관리","tier.comparison.basic.core.item6":"카메라 제어","tier.comparison.basic.core.item7":"로그 모니터링","tier.comparison.basic.sync":"동기화 (Basic)","tier.comparison.basic.sync.item1":"Studio에서 로컬로 단방향 동기화","tier.comparison.basic.sync.item2":"수동 적용이 기본값","tier.comparison.pro.all":"Basic의 모든 기능 포함, 추가로","tier.comparison.pro.sync":"고급 동기화 워크플로우","tier.comparison.pro.sync.item1":"유형별 동기화 방향 설정","tier.comparison.pro.sync.item2":"유형별 적용 모드","tier.comparison.pro.sync.item3":"양방향 및 역방향 동기화","tier.comparison.pro.sync.item4":"전체 동기화, 재동기화, Studio로 푸시","tier.comparison.pro.sync.item5":"멀티 플레이스 동기화","tier.comparison.pro.playtest":"플레이테스트 제어","tier.comparison.pro.playtest.item1":"플레이, 정지, 일시정지, 재개","tier.comparison.pro.playtest.item2":"플레이테스트 상태 검사","tier.comparison.pro.playtest.item3":"자동 테스트 실행","tier.comparison.pro.creation":"고급 생성 워크플로우","tier.comparison.pro.creation.item1":"대량 작업","tier.comparison.pro.creation.item2":"터레인 생성","tier.comparison.pro.creation.item3":"에셋 검색 및 삽입","tier.comparison.pro.creation.item4":"레이캐스트 및 공간 분석","tier.comparison.pro.creation.item5":"환경 제어","tier.comparison.discount.label":"🎁 Gumroad 결제 시 아래 코드를 입력하면 할인 받을 수 있어요:","tier.comparison.discount.code":"WEPPY-MCP","tier.comparison.discount.expiry":"4월 30일까지 유효","tier.promo.discount.hint":"🎁 Gumroad에서 WEPPY-MCP 코드 사용 · 4월 30일까지","tier.promo.discount.context":"🎁 Gumroad 결제 시 할인코드 입력:","tier.tool.query_instances.desc":"인스턴스 조회, 자식/자손 탐색, 클래스 정보, 이름·클래스 검색. Pro: 파일 트리, 프로젝트 구조, 속성·태그 검색.","tier.tool.mutate_instances.desc":"인스턴스 생성, 삭제, 복제, 이동, 이름변경, 피벗. Pro: 트리 생성, 대량 생성·삭제·복제.","tier.tool.manage_properties.desc":"속성, 어트리뷰트, 태그 조회 및 설정. Pro: 계산·상대값 설정, 대량 조회·설정, 자식 일괄 수정.","tier.tool.manage_scripts.desc":"스크립트 소스 코드 읽기, 쓰기, 생성, 삭제, 줄 편집, 검색. Pro: 스크립트 간 일괄 치환.","tier.tool.manage_lighting.desc":"Pro 전용. 조명, 대기, 하늘, 터레인 속성, 시간대 환경 설정.","tier.tool.manage_selection.desc":"선택 조회, 설정, 해제. Pro: 컨텍스트, 상세 정보, 항목 추가·제거, 변경 감시.","tier.tool.manage_camera.desc":"카메라 정보 조회, 경로 또는 좌표로 포커스, 추천 뷰 제안.","tier.tool.manage_tween.desc":"Pro 전용. 부드러운 애니메이션을 위한 트윈 생성, 재생, 일시정지, 취소.","tier.tool.manage_audio.desc":"Pro 전용. 사운드 재생, 정지, 일시정지, 재개. 오디오 리스너 설정.","tier.tool.manage_animation.desc":"Pro 전용. 애니메이션 로드, 재생, 정지. 휴머노이드·컨트롤러의 트랙 조회.","tier.tool.manage_physics.desc":"Pro 전용. 물리 충돌 그룹 등록, 그룹 간 충돌 설정, 목록 조회.","tier.tool.manage_effects.desc":"Pro 전용. 파티클 방출, 전체 삭제, 이펙트 활성화 토글.","tier.tool.manage_terrain.desc":"Pro 전용. 도형 채우기, 영역 삭제, 재질 치환, 색상 관리, 복셀 읽기·쓰기, 절차적 생성, 스무딩.","tier.tool.spatial_query.desc":"Pro 전용. 레이캐스트, 지면 찾기, 배치 확인, 영역 스캔, 평지·스폰 위치 탐색, 보행 분석, 공간 맵, 충돌 확인.","tier.tool.manage_assets.desc":"Pro 전용. 모델 삽입, 에셋 정보 조회, 크리에이터 스토어 검색, 무료 모델·패키지 삽입, 내보내기.","tier.tool.manage_sync.desc":"Pro 전용. 동기화 상태, 설정, 히스토리, 방향 설정, 동기화 파일 읽기·쓰기.","tier.tool.workspace_state.desc":"Pro 전용. 전체 동기화, 스냅샷, 최근 변경, 뷰포트 정보, 메타데이터, 캐시 관리.","tier.tool.manage_logs.desc":"출력 로그 필터링 조회, 증분 폴링, 버퍼 삭제, 최근 오류 조회.","tier.tool.system_info.desc":"연결 상태, 사용 티어 확인. Pro: 플레이스 정보, 서비스 목록, Studio 설정, 플레이테스트 제어, 자동 테스트.","tier.tool.batch_execute.desc":"Pro 전용. 여러 명령을 한 번에 일괄 실행. 순차 처리하며 오류 시 계속 진행 옵션.","tier.tool.execute_luau.desc":"Pro 전용. Roblox Studio 샌드박스에서 임의 Luau 코드 실행.","connection.server.title":"서버 상태","connection.server.version":"버전","connection.server.version.tooltip":"설치된 MCP 서버 버전입니다.","connection.server.pid":"PID","connection.server.pid.tooltip":"운영체제에서 사용하는 프로세스 식별자입니다.","connection.server.uptime":"가동 시간","connection.server.uptime.tooltip":"MCP 서버가 시작된 뒤 경과한 시간입니다.","connection.server.session":"세션","connection.server.session.tooltip":"현재 MCP 세션 식별자입니다.","connection.server.exec":"실행 파일","connection.server.exec.tooltip":"MCP 서버를 실행한 실행 파일 경로입니다.","connection.reconnect":"수동 재연결","connection.checkSettings":"설정 확인","connection.agents.title":"AI 에이전트","connection.agents.name":"에이전트","connection.agents.cwd":"작업 디렉토리","connection.agents.cwd.tooltip":"연결된 AI 에이전트의 현재 작업 디렉토리입니다.","connection.agents.projectRoot":"프로젝트 루트","connection.agents.projectRoot.tooltip":"Sync ownership을 결정하는 프로젝트 경로","connection.agents.projectRoot.unresolved":"미확인","connection.agents.connected":"연결 시각","connection.agents.unknown":"알 수 없음","connection.agents.none":"연결된 에이전트 없음","connection.plugins.title":"플러그인","connection.plugins.place":"플레이스","connection.plugins.clientId":"클라이언트 ID","connection.plugins.clientId.tooltip":"현재 Studio 연결을 식별하는 플러그인 클라이언트 ID입니다.","connection.plugins.lastSeen":"마지막 확인","connection.plugins.lastSeen.tooltip":"플러그인에서 가장 최근에 수신한 heartbeat 시각입니다.","connection.plugins.version":"버전","connection.plugins.version.tooltip":"Studio가 보고한 설치된 플러그인 버전입니다.","connection.plugins.none":"연결된 플러그인 없음","connection.log.title":"연결 로그","connection.log.empty":"이벤트 없음","connection.time.secondsAgo":"초 전","connection.time.minutesAgo":"분 전","connection.time.hoursAgo":"시간 전","common.loading":"로딩 중...","common.retry":"재시도","common.reconnecting":"재연결 중...","common.expand":"펼치기","common.collapse":"접기","tools.tab.history":"히스토리","tools.tab.statistics":"통계","tools.tab.failures":"실패","tools.col.time":"시간","tools.col.time.tooltip":"도구 실행이 기록된 시각입니다.","tools.col.toolAction":"도구.액션","tools.col.toolAction.tooltip":"실행된 도구 이름과 액션입니다.","tools.col.duration":"소요 시간","tools.col.duration.tooltip":"도구 실행이 완료될 때까지 걸린 시간입니다.","tools.col.status":"상태","tools.col.status.tooltip":"기록된 도구 실행의 결과 상태입니다.","tools.col.tier":"티어","tools.col.tier.tooltip":"도구 또는 액션에 필요한 라이센스 티어입니다.","tools.col.tierStats.tooltip":"도구 통계 행이 Basic, Pro, Mixed 중 어느 집계인지 설명합니다.","tools.col.tool":"도구","tools.col.tool.tooltip":"통계 테이블에 표시되는 통합 도구 이름입니다.","tools.col.calls":"호출 수","tools.col.calls.tooltip":"이 도구에 대해 기록된 총 호출 횟수입니다.","tools.col.ok":"OK","tools.col.ok.tooltip":"직접 성공한 실행 횟수입니다.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"fallback 실행으로 성공한 횟수입니다.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"fallback 없이 차단된 실행 횟수입니다.","tools.col.err":"실패","tools.col.err.tooltip":"실패로 끝난 실행 횟수입니다.","tools.col.okRate":"성공률","tools.col.okRate.tooltip":"성공적으로 끝난 호출 비율입니다.","tools.col.avgTime":"평균 시간","tools.col.avgTime.tooltip":"기록된 호출들의 평균 실행 시간입니다.","tools.col.error":"오류","tools.filter.tool":"도구","tools.filter.all":"전체","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"이 항목은 Pro 전용 도구 또는 액션을 사용했습니다.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"요청한 Pro 액션이 Basic fallback으로 성공했습니다.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"요청한 Pro 액션이 차단되었고 fallback도 실행되지 않았습니다.","tools.badge.err":"실패","tools.badge.err.tooltip":"도구 실행이 실패로 끝났습니다.","tools.status.ok":"OK","tools.status.ok.tooltip":"도구 실행이 성공적으로 완료되었습니다.","tools.tier.mixed.tooltip":"이 도구에는 Basic 액션과 Pro 액션이 함께 포함됩니다.","tools.detail.params":"파라미터","tools.detail.params.tooltip":"이 도구 실행에 전달된 입력 파라미터입니다.","tools.detail.result":"결과","tools.detail.result.tooltip":"이 도구 실행에서 반환된 결과 페이로드입니다.","tools.detail.requestedCommand":"요청한 명령","tools.detail.executedCommand":"실행된 명령","tools.detail.alternatives":"대안","tools.detail.blockedMessage":"차단 사유","tools.detail.noFallback":"Fallback 없음","tools.detail.noFallback.value":"실행된 fallback이 없습니다.","tools.detail.errorMessage":"오류 메시지","tools.clear.history.title":"히스토리를 삭제할까요?","tools.clear.history.message":"현재 place의 도구 히스토리가 영구적으로 삭제됩니다.","tools.clear.statistics.title":"통계를 삭제할까요?","tools.clear.statistics.message":"현재 place의 도구 통계가 영구적으로 초기화됩니다.","tools.detail.error":"오류","tools.page.prev":"이전","tools.page.prev.tooltip":"도구 히스토리의 이전 페이지로 이동합니다.","tools.page.next":"다음","tools.page.next.tooltip":"도구 히스토리의 다음 페이지로 이동합니다.","tools.empty.history":"히스토리 없음","tools.empty.stats":"도구 통계 없음","tools.empty.failures":"실패 없음","tools.summary.total":"합계","tools.summary.calls":"호출","tools.summary.sessions":"세션","settings.license.title":"라이센스","settings.license.title.tooltip":"현재 라이센스 상태와 구독 티어입니다.","settings.license.status":"상태","settings.license.status.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.tier":"티어","settings.license.tier.tooltip":"WEPPY Dashboard 기능 범위를 결정하는 현재 구독 티어입니다.","settings.license.key":"키","settings.license.key.tooltip":"서버에 현재 로드된 마스킹된 라이센스 키입니다.","settings.license.keyValue.tooltip":"서버에 현재 로드된 마스킹된 라이센스 키입니다.","settings.license.provider":"제공자","settings.license.provider.tooltip":"이 키를 검증하는 라이센스 제공자입니다.","settings.license.providerValue.tooltip":"이 키를 검증하는 라이센스 제공자입니다.","settings.license.active":"활성","settings.license.active.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.status.activeCancelPending.tooltip":"해지가 예약되어 있지만 현재 결제 주기가 끝날 때까지 Pro 접근은 유지됩니다.","settings.license.inactive":"비활성","settings.license.inactive.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.expired":"만료","settings.license.expired.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.unavailable":"라이센스 정보를 불러올 수 없음","settings.license.detail.cancelPending":"해지가 예약되었습니다. 현재 결제 주기가 끝날 때까지 Pro 접근은 유지됩니다.","settings.license.reset":"라이센스 리셋","settings.readOnly":"읽기 전용","settings.readOnly.tooltip":"이 섹션의 값은 WEPPY Dashboard에서 수정할 수 없습니다.","settings.unavailable":"설정을 불러올 수 없음","settings.general.title":"일반 설정","settings.general.title.tooltip":"변경 즉시 적용되는 Hot 설정입니다.","settings.general.liveApply":"즉시 반영","settings.general.liveApply.tooltip":"이 섹션의 변경은 별도 저장 버튼 없이 바로 적용됩니다.","settings.general.applied":"적용됨","settings.general.logLevel":"로그 레벨","settings.general.logLevel.tooltip":"WEPPY Dashboard 로그에 남길 상세 수준을 설정합니다.","settings.general.localHistory":"도구 히스토리 기록","settings.general.localHistory.tooltip":"WEPPY Dashboard 히스토리 화면용 로컬 도구 실행 기록을 저장합니다.","settings.general.localStatistics":"도구 통계 집계","settings.general.localStatistics.tooltip":"WEPPY Dashboard 보고용 로컬 사용 통계를 집계합니다.","settings.general.contextCapture":"컨텍스트 캡처","settings.general.contextCapture.tooltip":"활성화하면 체인지로그와 플레이테스트 화면에 구조화된 실행 컨텍스트를 기록합니다.","settings.general.requestTimeout":"요청 타임아웃","settings.general.requestTimeout.tooltip":"요청을 실패로 처리하기 전까지 WEPPY Dashboard가 기다리는 최대 시간입니다.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"요청 타임아웃 단위는 밀리초입니다.","settings.cold.title":"서버 환경변수","settings.cold.title.tooltip":"서버 시작 시 로드되는 읽기 전용 환경변수 값입니다.","settings.cold.httpPort.tooltip":"MCP WEPPY Dashboard HTTP 서버가 사용하는 포트 번호입니다.","settings.cold.httpHost.tooltip":"MCP WEPPY Dashboard HTTP 서버가 바인딩하는 호스트 인터페이스입니다.","settings.cold.dashboardAutoOpen.tooltip":"서버 시작 시 브라우저에서 WEPPY Dashboard를 자동으로 열지 여부를 제어합니다.","settings.cold.dashboardAutoOpen.value.tooltip":"브라우저 자동 열기 현재 시작 동작입니다.","settings.cold.hint":"환경변수로 설정하세요.","settings.language.title":"언어","settings.language.title.tooltip":"WEPPY Dashboard UI 텍스트에 사용할 언어를 선택합니다.","settings.language.dashboard":"WEPPY Dashboard 언어","settings.language.dashboard.tooltip":"Auto일 때는 시스템 언어를 따르고, 아니면 선택한 언어를 강제합니다.","settings.language.auto":"자동","overview.l0.title":"MCP 서버 연결 끊김","overview.l0.message":"MCP 서버가 응답하지 않습니다. WEPPY Dashboard가 자동으로 재연결을 시도합니다.","overview.l0.step1":"MCP 서버 프로세스가 실행 중인지 확인하세요","overview.l0.step2":"필요 시 MCP 서버 명령을 다시 시작하세요","overview.l0.reconnecting":"3초마다 자동 재연결 중...","overview.l0.reconnectBtn":"수동 재연결","overview.l0.settingsBtn":"설정 확인","overview.l1.pluginGuide":"Roblox Studio 플러그인이 연결되지 않았습니다","overview.l1.check1":"Roblox Studio가 실행 중인가요?","overview.l1.check2":"WEPPY Plugin이 설치되어 있나요?","overview.l1.feedHint":"플러그인이 연결되면 변경사항이 표시됩니다","overview.metric.server":"서버","overview.metric.server.tooltip":"MCP 서버의 실행 상태와 프로세스 상태입니다.","overview.metric.plugin":"플러그인","overview.metric.plugin.tooltip":"Roblox Studio 플러그인의 연결 상태와 버전 정보입니다.","overview.metric.agent":"에이전트","overview.metric.agent.tooltip":"연결된 AI 코딩 에이전트와 현재 실행 상태입니다.","overview.metric.agent.instancesUnit":"인스턴스","overview.metric.sync":"동기화","overview.metric.sync.tooltip":"현재 Studio와 로컬 파일 간 동기화 상태입니다.","overview.metric.noAgent":"에이전트 없음","overview.meta.version":"버전","overview.meta.version.tooltip":"설치된 MCP 서버 버전입니다.","overview.meta.session":"세션","overview.meta.session.tooltip":"현재 MCP 세션 식별자입니다.","overview.meta.pid":"PID","overview.meta.pid.tooltip":"운영체제에서 사용하는 프로세스 식별자입니다.","overview.meta.uptime":"가동 시간","overview.meta.uptime.tooltip":"MCP 서버가 시작된 뒤 경과한 시간입니다.","overview.feed.title":"최근 게임 변경","overview.feed.empty":"최근 변경사항 없음","overview.changelog.title":"세션 변경 요약","overview.changelog.entries":"합계","overview.changelog.scripts":"스크립트","overview.changelog.instances":"인스턴스","overview.changelog.properties":"속성","overview.changelog.assets":"에셋","overview.tier.title":"티어 사용 현황","changelog.subtitle":"게임 변경 이력","changelog.filter.all":"전체","changelog.filter.active":"활성","changelog.filter.completed":"완료","changelog.empty":"변경 이력이 없습니다","changelog.basic.limit.title":"Basic 미리보기에서는 최신 3개 세션만 표시됩니다","changelog.basic.limit.body":"Pro로 업그레이드하면 이 플레이스의 전체 변경 이력 타임라인을 확인할 수 있습니다.","changelog.basic.metricLabel":"표시 중인 변경 이력 / 전체","changelog.basic.visible":"표시 중","changelog.basic.total":"전체","changelog.card.active":"활성","changelog.card.active.tooltip":"이 세션은 아직 새 게임 변경을 계속 수집 중입니다.","changelog.card.completed":"완료","changelog.card.completed.tooltip":"이 세션은 종료되어 더 이상 새 변경이 추가되지 않습니다.","changelog.card.bootstrapStatus":"초기화","changelog.card.bootstrapStatus.tooltip":"이 세션에는 초기 동기화 부트스트랩 스냅샷만 포함됩니다.","changelog.card.inProgress":"진행 중","changelog.card.noChanges":"아직 변경사항 없음","changelog.card.noChanges.tooltip":"이 세션에서는 아직 추출된 게임 변경이 없습니다.","changelog.card.bootstrapSummary":"초기 동기화 스냅샷","changelog.card.bootstrapSummary.tooltip":"초기 파일 동기화 쓰기 작업은 하나의 부트스트랩 스냅샷 행으로 축약됩니다.","changelog.card.sessionIntent":"세션 의도","changelog.card.scripts":"스크립트","changelog.card.scripts.tooltip":"이 세션에서 발생한 스크립트 변경입니다.","changelog.card.instances":"인스턴스","changelog.card.instances.tooltip":"이 세션에서 발생한 인스턴스 생성, 삭제, 이동, 복제 변경입니다.","changelog.card.modified":"수정","changelog.card.created":"생성","changelog.card.deleted":"삭제","changelog.card.moved":"이동","changelog.card.propertiesChanged":"속성 변경","changelog.card.propertiesChanged.tooltip":"이 세션에서 기록된 속성 값 변경입니다.","changelog.card.lightingConfigured":"라이팅 설정됨","changelog.card.lightingConfigured.tooltip":"이 세션에서 라이팅 또는 대기 설정이 변경되었습니다.","changelog.card.terrainConfigured":"터레인 설정됨","changelog.card.terrainConfigured.tooltip":"이 세션에서 터레인 데이터 또는 터레인 설정이 변경되었습니다.","changelog.card.assetsInserted":"에셋 삽입","changelog.card.assetsInserted.tooltip":"이 세션 동안 플레이스에 삽입된 에셋입니다.","changelog.category.script":"스크립트","changelog.category.instance":"인스턴스","changelog.category.property":"속성","changelog.category.lighting":"라이팅","changelog.category.terrain":"터레인","changelog.category.asset":"에셋","changelog.detail.changeSummary":"변경 요약","changelog.detail.changeSummary.tooltip":"이 세션에서 추출된 게임 변경 수를 카테고리별로 묶어서 보여줍니다.","changelog.detail.changeTimeline":"변경 타임라인","changelog.detail.changeTimeline.tooltip":"이 세션에서 추출된 게임 변경을 시간순으로 보여줍니다.","changelog.detail.context.title":"컨텍스트 요약","changelog.detail.context.tooltip":"이 체인지로그 세션에 연결된 구조화된 실행 컨텍스트입니다.","changelog.detail.verification.title":"검증","changelog.detail.verification.tooltip":"이 체인지로그 세션에 연결된 검증 신호입니다.","changelog.detail.verification.label":"결과","changelog.detail.verification.status":"상태","changelog.detail.verification.timestamp":"기록 시각","changelog.detail.beforeAfter":"변경 전후 비교","changelog.detail.filterCategory":"카테고리","changelog.detail.filterCategory.tooltip":"타임라인을 하나의 변경 카테고리만 보이도록 필터링합니다.","changelog.detail.confidence.exact":"정확","changelog.detail.confidence.exact.tooltip":"이 변경은 변경 전과 변경 후 상태가 모두 확인되었습니다.","changelog.detail.confidence.partial":"부분 확인","changelog.detail.confidence.partial.tooltip":"이 변경은 변경 전후 상태 중 일부만 확인되었습니다.","changelog.detail.confidence.afterOnly":"결과만 확인","changelog.detail.confidence.afterOnly.tooltip":"이 변경은 적용 후 결과 상태만 확인되었습니다.","changelog.detail.confidence.intentOnly":"의도만 기록","changelog.detail.confidence.intentOnly.tooltip":"요청된 작업 의도만 기록되었고 결과 상태는 확인되지 않았습니다.","changelog.detail.confidence.unknown":"알 수 없음","changelog.detail.confidence.unknown.tooltip":"사용 가능한 데이터만으로는 이 변경을 신뢰도 있게 분류할 수 없습니다.","changelog.detail.noChanges":"이 카테고리에 변경사항 없음","changelog.detail.backToList":"목록으로 돌아가기","changelog.diff.empty":"비교할 내용 없음","changelog.diff.unified":"통합","changelog.diff.sideBySide":"나란히 비교","changelog.diff.before":"변경 전","changelog.diff.after":"변경 후","sync.overlay.title":"Roblox Studio 플러그인이 필요합니다","sync.overlay.message":"Roblox Studio 플러그인이 연결되면 동기화 상태를 확인할 수 있습니다.","sync.overlay.check1":"Roblox Studio가 실행 중인가요?","sync.overlay.check2":"WEPPY Plugin이 설치되어 있나요?","sync.status.title":"동기화 상태","sync.status.title.tooltip":"이 플레이스의 Studio와 로컬 파일 동기화 상태입니다.","sync.status.forwardOnly":"단방향만","sync.status.forwardOnly.tooltip":"Basic 티어에서는 Studio에서 로컬로 가는 단방향 동기화만 사용할 수 있습니다.","sync.status.place":"플레이스","sync.status.place.tooltip":"연결된 Roblox 플레이스 이름과 플레이스 ID입니다.","sync.status.path":"경로","sync.status.path.tooltip":"현재 동기화 출력에 사용하는 로컬 파일 시스템 루트입니다.","sync.status.instances":"인스턴스","sync.status.instances.tooltip":"로컬 미러에 추적 중인 동기화된 Roblox 인스턴스 수입니다.","sync.status.scripts":"스크립트","sync.status.scripts.tooltip":"이 플레이스에 대해 현재 인덱싱된 동기화 스크립트 파일 수입니다.","sync.status.state":"상태","sync.status.state.tooltip":"서버가 보고한 현재 동기화 런타임 상태입니다.","sync.directions.title":"동기화 방향","sync.directions.title.tooltip":"Local과 Studio 사이의 카테고리별 동기화 방향과 적용 방식입니다.","sync.directions.type":"유형","sync.directions.type.tooltip":"이 규칙이 적용되는 동기화 카테고리입니다.","sync.directions.direction":"방향","sync.directions.direction.tooltip":"각 카테고리가 Studio에서만, Studio로만, 또는 양방향으로 동기화되는지 나타냅니다.","sync.directions.applyMode":"적용 모드","sync.directions.applyMode.tooltip":"이 카테고리에 들어오는 동기화 변경을 적용하는 방식입니다.","sync.directions.cat.scripts":"스크립트","sync.directions.cat.values":"값","sync.directions.cat.containers":"컨테이너","sync.directions.cat.data":"데이터","sync.directions.cat.services":"서비스","sync.directions.endpoint.local":"Local","sync.directions.endpoint.local.tooltip":"방향 레일의 왼쪽은 항상 디스크의 로컬 파일을 의미합니다.","sync.directions.endpoint.studio":"Studio","sync.directions.endpoint.studio.tooltip":"방향 레일의 오른쪽은 항상 Roblox Studio를 의미합니다.","sync.directions.mode.manual":"수동","sync.directions.mode.manual.tooltip":"직접 실행할 때만 동기화 변경을 적용합니다.","sync.directions.mode.auto":"자동","sync.directions.mode.auto.tooltip":"업데이트가 들어오면 동기화 변경을 자동으로 적용합니다.","sync.directions.tooltip.forward.body":"Studio 변경 사항을 로컬 파일로만 동기화합니다","sync.directions.tooltip.bidirectional.body":"Local과 Studio 사이에 양방향 동기화를 사용합니다","sync.directions.tooltip.reverse.body":"로컬 파일 변경 사항을 Studio로 푸시합니다","sync.directions.tooltip.proRequired":"Basic 티어에서는 Pro가 필요합니다","sync.directions.dir.forward":"순방향","sync.directions.dir.bidirectional":"양방향","sync.directions.dir.reverse":"역방향","sync.log.title":"동기화 로그","sync.log.empty":"동기화 이벤트 없음","sync.log.type.write":"쓰기","sync.log.type.write.tooltip":"새 동기화 출력이 디스크에 기록되었습니다.","sync.log.type.update":"업데이트","sync.log.type.update.tooltip":"기존 동기화 파일 또는 인스턴스가 갱신되었습니다.","sync.log.type.delete":"삭제","sync.log.type.delete.tooltip":"동기화된 파일 또는 인스턴스가 제거되었습니다.","sync.log.type.idle":"대기","sync.log.type.idle.tooltip":"파일 변경 없이 동기화 이벤트만 기록되었습니다.","sync.upgrade.title":"Pro로 완전한 동기화 기능 해제","sync.upgrade.benefit1":"양방향 동기화 — 파일 편집 시 Studio에 자동 반영","sync.upgrade.benefit2":"역방향 동기화 — 파일 변경을 Studio로 전송","sync.upgrade.benefit3":"전체 동기화 히스토리 및 상세 변경 로그","sync.upgrade.buy":"Pro로 업그레이드","playtest.status.title":"플레이테스트 상태","playtest.status.title.tooltip":"Studio가 보고한 현재 Roblox 플레이테스트 세션 상태입니다.","playtest.status.mode":"모드","playtest.status.mode.tooltip":"현재 세션에 사용 중인 Studio 플레이테스트 실행 모드입니다.","playtest.status.mode.value.tooltip":"현재 적용 중인 Roblox Studio 플레이테스트 모드의 구체적인 값입니다.","playtest.status.mode.play":"플레이","playtest.status.mode.run":"실행","playtest.status.mode.server":"서버","playtest.status.mode.edit":"편집","playtest.status.place.tooltip":"이 플레이테스트 세션과 연결된 Roblox 플레이스입니다.","playtest.status.state.running":"실행 중","playtest.status.state.running.tooltip":"현재 Roblox 플레이테스트 세션이 실행 중입니다.","playtest.status.state.paused":"일시정지","playtest.status.state.paused.tooltip":"현재 Roblox 플레이테스트 세션이 일시정지 상태입니다.","playtest.status.state.notRunning":"실행 안 함","playtest.status.state.notRunning.tooltip":"현재 실행 중인 Roblox 플레이테스트 세션이 없습니다.","playtest.control.play":"플레이","playtest.control.pause":"일시정지","playtest.control.resume":"재개","playtest.control.stop":"정지","playtest.history.title":"테스트 히스토리","playtest.history.title.tooltip":"이 프로젝트에서 기록된 자동 플레이테스트 실행 이력입니다.","playtest.history.empty":"테스트 결과 없음","playtest.history.mode":"모드","playtest.history.mode.tooltip":"이 기록된 테스트 실행에 사용된 플레이테스트 모드입니다.","playtest.history.status.passed":"성공","playtest.history.status.failed":"실패","playtest.history.status.running":"실행 중","playtest.history.status.unknown":"알 수 없음","playtest.history.status.tooltip":"이 자동 플레이테스트 실행의 기록된 결과 상태입니다.","playtest.empty.title":"아직 플레이테스트 결과가 없습니다","playtest.empty.message":"AI 에이전트가 system_info.run_test로 자동 테스트를 실행하면 결과가 표시됩니다.","playtest.empty.message.before":"AI 에이전트가 자동 테스트를","playtest.empty.message.after":"로 실행하면 결과가 여기에 표시됩니다.","playtest.empty.runTest.tooltip":"system_info 도구를 통해 Roblox 플레이테스트 검사를 실행하는 WEPPY Dashboard 자동화 진입점입니다.","playtest.report.title":"선택된 리포트","playtest.report.title.tooltip":"현재 선택된 자동 플레이테스트 실행의 상세 출력입니다.","playtest.report.content":"리포트","playtest.report.content.tooltip":"선택된 자동 플레이테스트 실행의 마크다운 요약입니다.","playtest.report.logs":"로그","playtest.report.logs.tooltip":"선택된 자동 플레이테스트 실행에서 수집된 실행 로그입니다.","playtest.context.contextId":"컨텍스트 ID","playtest.context.why":"이 테스트를 실행한 이유","playtest.context.expected":"예상 결과","playtest.context.observed":"관찰 결과","playtest.report.empty":"리포트 내용 없음","playtest.basic.icon":"🎮","playtest.basic.title":"플레이테스트는 Pro 전용 기능입니다","playtest.basic.desc":"WEPPY Dashboard에서 플레이테스트를 제어하고, 자동 테스트를 실행하며, 상세한 테스트 리포트를 확인하세요.","playtest.basic.benefit1":"원클릭 플레이/일시정지/정지 제어","playtest.basic.benefit2":"AI 에이전트를 통한 자동 테스트 실행","playtest.basic.benefit3":"성공/실패 추적이 가능한 테스트 히스토리","playtest.basic.benefit4":"상세한 마크다운 테스트 리포트","playtest.sample.badge":"Pro 플레이테스트 화면 미리보기","playtest.sample.title":"현재 보고 있는 화면은 Pro 업그레이드 후 사용할 수 있는 플레이테스트 화면 예시입니다.","playtest.sample.message":"이 미리보기는 샘플 데이터로 구성되어 있습니다. 실시간 플레이테스트 제어, 히스토리 관리, 실제 리포트 저장은 Pro 구매 후 사용할 수 있습니다.","playtest.sample.clearDisabled":"실제 플레이테스트 기록 삭제는 Pro에서 사용할 수 있습니다.","playtest.sample.place":"아레나 미리보기","playtest.sample.history.name":"샘플 아레나 스모크 테스트","playtest.sample.context.why":"아레나에 스폰한 뒤 첫 구간을 버티고 HUD가 즉시 반응하는지 확인합니다.","playtest.sample.context.expected":"플레이어가 안전하게 스폰되고, 1초 안에 카운트다운 UI가 표시되며, 첫 웨이브가 오류 없이 시작되어야 합니다.","playtest.sample.context.observed":"스폰 보호가 정상 동작했고, HUD가 제때 갱신되었으며, 첫 웨이브가 회귀 없이 완료되었습니다.","playtest.sample.report.markdown":`# 샘플 아레나 스모크 테스트
80
80
 
81
81
  - 스폰 흐름: 통과
82
82
  - HUD 카운트다운: 통과
@@ -106,7 +106,7 @@ Isto é uma prévia de amostra. Faça upgrade para Pro para executar playtests a
106
106
  [sample] proteção de spawn ativa
107
107
  [sample] contagem do hud renderizada
108
108
  [sample] primeira onda concluída
109
- [sample] relatório de amostra finalizado`,"sidebar.whatsNew":"Novidades","header.whatsNew":"Novidades","header.whatsNew.tooltip":"Novidades","whatsNew.pageTitle":"Novidades","whatsNew.pageSubtitle":"Fique por dentro das mudanças do MCP","whatsNew.unreadSection":"Não lidos","whatsNew.allSection":"Todos os anúncios","whatsNew.empty":"Nenhum anúncio ainda","whatsNew.newBadge":"NOVO","whatsNew.category.release":"Versão","whatsNew.category.notice":"Aviso","whatsNew.category.deprecation":"Descontinuado","whatsNew.category.tip":"Dica"},Cm={"sidebar.overview":"概要","sidebar.changelog":"変更履歴","sidebar.connection":"接続","sidebar.sync":"同期","sidebar.playtest":"プレイテスト","sidebar.tools":"ツール","sidebar.settings":"設定","header.currentProject":"現在のプロジェクト","header.unknownProject":"不明なプロジェクト","header.projectRoot.label":"Project Root","header.currentProject.loading":"プロジェクトルートを読み込み中...","header.currentProject.unavailable":"プロジェクトルートを読み込めません","header.placeNotConnected":"プレイス未接続","header.currentProject.tooltip":"現在選択されているプロジェクトフォルダです。","header.currentProject.loading.tooltip":"プロジェクトルート情報をまだ読み込み中です。","header.currentProject.unavailable.tooltip":"現在のプロジェクトルート情報を読み込めません。","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Sync root を読み込み中...","header.currentProjectSyncRoot.unavailable":"Sync root 情報を読み込めません","header.currentProjectSyncRoot.tooltip":"選択中のプロジェクトに対応する現在の sync root フォルダです。","header.currentProjectSyncRoot.loading.tooltip":"Sync root 情報をまだ読み込み中です。","header.currentProjectSyncRoot.unavailable.tooltip":"現在の sync root 情報を読み込めません。","header.testFiles.label":"Test Files","header.testFiles.unavailable":"テストファイルのパスを確認できません。","header.testFiles.tooltip":"選択した place の現在の playtest ファイルディレクトリです。","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"プラグイン接続が必要です","header.places.liveRequired":"現在の active place を確認するにはプラグイン接続が必要です。","header.place.tooltip":"接続中の Roblox プレイスです。","header.placeNotConnected.tooltip":"プレイス未接続","header.changeProjectRoot":"プロジェクトルートを変更","header.changeProjectRoot.ariaLabel":"プロジェクトルートを変更","header.changeProjectRoot.tooltip":"現在の project root を変更します。","header.changeProjectRoot.disabledTooltip.l0":"プロジェクトルートを変更するには、まず MCP サーバー接続が必要です。","header.changeProjectRoot.disabledTooltip.loading":"プロジェクトルート情報をまだ読み込み中です。","header.changeProjectRoot.disabledTooltip.unavailable":"現在のプロジェクトルート情報を読み込めません。","header.projectRootModal.initial.title":"プロジェクトルートを変更","header.projectRootModal.initial.body.connected":"プロジェクトフォルダを選択すると、MCP は新しい project root に切り替わり、現在の Studio 内容が新しい <selected project folder>/weppy-project-sync にフル再同期されます。","header.projectRootModal.initial.body.disconnected":"プロジェクトフォルダを選択すると、MCP は新しい project root に切り替わり、<selected project folder>/weppy-project-sync を次の sync 対象として使用します。","header.projectRootModal.initial.nextSyncRoot":"選択後の新しい sync 先","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"現在の sync は直ちに停止します。","header.projectRootModal.initial.warningFreshSync":"現在の Studio 内容を基準に、新しい対象へ fresh full sync が作成されます。","header.projectRootModal.initial.warningNoMove":"既存の sync フォルダは自動では移動されません。","header.projectRootModal.initial.warningDeferredSync":"Studio が未接続の場合、full resync は次回 plugin 接続時に開始されます。","header.projectRootModal.confirm.title":"新しいプロジェクトルートを確認","header.projectRootModal.confirm.body":"適用前に選択したプロジェクトフォルダを確認してください。","header.projectRootModal.confirm.projectRoot":"選択したプロジェクトフォルダ","header.projectRootModal.confirm.syncRoot":"新しい sync 先","header.projectRootModal.confirm.warningNoMove":"既存の sync フォルダは自動では移動されません。","header.projectRootModal.pick":"フォルダを選択","header.projectRootModal.apply":"変更を適用","header.projectRootModal.cancel":"キャンセル","header.projectRootModal.error":"プロジェクトルートを変更できませんでした。","sidebar.gate.l1":"MCP サーバーへの接続が必要です。","sidebar.gate.l2":"Roblox Studio プラグインへの接続が必要です。","status.online":"オンライン","status.offline":"オフライン","status.idle":"待機中","status.syncing":"同期中","status.error":"エラー","status.initializing":"初期化中","level.l0.title":"サーバー切断","level.l0.message":"WEPPY Dashboard は開いていますが、MCPサーバーが停止したか応答していません。","level.l1.title":"サーバー接続済み","level.l1.hint":"確認: Roblox Studioは実行中?プラグインはインストール済み?","level.l2.ok":"Studio接続済み","tier.basic":"Basic","tier.basic.tooltip":"標準のWEPPY Dashboard機能を提供するBasicティアです。","tier.pro":"Pro","tier.pro.tooltip":"すべてのWEPPY Dashboard機能を提供するProティアです。","tier.mixed":"混合","tier.upgrade":"Proにアップグレード","tier.compare":"Basic vs Pro","tier.banner.save":"ProでAIトークンを節約!","tier.comparison.comingSoon":"Basic vs Pro 比較 — 近日公開","tier.comparison.close":"閉じる","tier.comparison.detailTitle":"詳細ツールカタログ","tier.comparison.description":"説明","tier.comparison.basic.core":"基本MCPワークフロー","tier.comparison.basic.core.item1":"スクリプト作成・編集","tier.comparison.basic.core.item2":"インスタンス管理","tier.comparison.basic.core.item3":"プロパティ制御","tier.comparison.basic.core.item4":"選択と検索","tier.comparison.basic.core.item5":"タグ管理","tier.comparison.basic.core.item6":"カメラ制御","tier.comparison.basic.core.item7":"ログ監視","tier.comparison.basic.sync":"同期(Basic)","tier.comparison.basic.sync.item1":"Studioからローカルへの一方向同期","tier.comparison.basic.sync.item2":"手動適用がデフォルト","tier.comparison.pro.all":"Basicのすべてに加えて","tier.comparison.pro.sync":"高度な同期ワークフロー","tier.comparison.pro.sync.item1":"タイプ別同期方向","tier.comparison.pro.sync.item2":"タイプ別適用モード","tier.comparison.pro.sync.item3":"双方向・逆方向同期","tier.comparison.pro.sync.item4":"フル同期、再同期、Studioへプッシュ","tier.comparison.pro.sync.item5":"マルチプレイス同期","tier.comparison.pro.playtest":"プレイテスト制御","tier.comparison.pro.playtest.item1":"再生、停止、一時停止、再開","tier.comparison.pro.playtest.item2":"プレイテスト状態の検査","tier.comparison.pro.playtest.item3":"自動テスト実行","tier.comparison.pro.creation":"高度な作成ワークフロー","tier.comparison.pro.creation.item1":"一括操作","tier.comparison.pro.creation.item2":"テレイン生成","tier.comparison.pro.creation.item3":"アセット検索・挿入","tier.comparison.pro.creation.item4":"レイキャスト・空間分析","tier.comparison.pro.creation.item5":"環境制御","tier.comparison.discount.label":"🎁 Gumroad決済時にこのコードを入力すると割引が受けられます:","tier.comparison.discount.code":"WEPPY-MCP","tier.comparison.discount.expiry":"4月30日まで有効","tier.promo.discount.hint":"🎁 GumroadでWEPPY-MCPコードを使用 · 4月30日まで","tier.promo.discount.context":"🎁 Gumroad決済時に入力:","tier.tool.query_instances.desc":"インスタンス照会、子孫探索、クラス情報、名前・クラス検索。Pro: ファイルツリー、プロジェクト構造、プロパティ・タグ検索。","tier.tool.mutate_instances.desc":"インスタンスの作成、削除、複製、移動、名前変更、ピボット。Pro: ツリー作成、一括作成・削除・複製。","tier.tool.manage_properties.desc":"プロパティ、属性、タグの取得・設定。Pro: 計算・相対値設定、一括取得・設定、子の一括変更。","tier.tool.manage_scripts.desc":"スクリプトソースの読取・書込・作成・削除・行編集・検索。Pro: スクリプト間一括置換。","tier.tool.manage_lighting.desc":"Pro専用。照明、大気、空、テレイン属性、時間帯の環境設定。","tier.tool.manage_selection.desc":"選択の取得、設定、解除。Pro: コンテキスト、詳細、項目の追加・削除、変更監視。","tier.tool.manage_camera.desc":"カメラ情報取得、パスまたは座標でフォーカス、推奨ビュー提案。","tier.tool.manage_tween.desc":"Pro専用。滑らかなアニメーションのためのトゥイーン作成、再生、一時停止、キャンセル。","tier.tool.manage_audio.desc":"Pro専用。サウンドの再生、停止、一時停止、再開。オーディオリスナー設定。","tier.tool.manage_animation.desc":"Pro専用。アニメーションのロード、再生、停止。ヒューマノイド・コントローラーのトラック照会。","tier.tool.manage_physics.desc":"Pro専用。物理衝突グループの登録、グループ間衝突設定、一覧照会。","tier.tool.manage_effects.desc":"Pro専用。パーティクル放出、全消去、エフェクト有効化トグル。","tier.tool.manage_terrain.desc":"Pro専用。図形充填、領域消去、マテリアル置換、色管理、ボクセル読書、手続き生成、スムージング。","tier.tool.spatial_query.desc":"Pro専用。レイキャスト、地面検索、配置確認、領域スキャン、平地・スポーン位置探索、歩行分析、空間マップ、衝突確認。","tier.tool.manage_assets.desc":"Pro専用。モデル挿入、アセット情報照会、クリエイターストア検索、無料モデル・パッケージ挿入、エクスポート。","tier.tool.manage_sync.desc":"Pro専用。同期状態、設定、履歴、方向設定、同期ファイル読書。","tier.tool.workspace_state.desc":"Pro専用。フル同期、スナップショット、最近の変更、ビューポート情報、メタデータ、キャッシュ管理。","tier.tool.manage_logs.desc":"出力ログのフィルタリング照会、増分ポーリング、バッファ消去、最近のエラー照会。","tier.tool.system_info.desc":"接続状態、使用ティア確認。Pro: プレイス情報、サービス一覧、Studio設定、プレイテスト制御、自動テスト。","tier.tool.batch_execute.desc":"Pro専用。複数コマンドを一括実行。順次処理、エラー時続行オプション。","tier.tool.execute_luau.desc":"Pro専用。Roblox Studioサンドボックスで任意のLuauコードを実行。","connection.server.title":"サーバーステータス","connection.server.version":"バージョン","connection.server.version.tooltip":"インストールされているMCPサーバーのバージョンです。","connection.server.pid":"PID","connection.server.pid.tooltip":"OSが使用するプロセス識別子です。","connection.server.uptime":"稼働時間","connection.server.uptime.tooltip":"MCPサーバーの起動後に経過した時間です。","connection.server.session":"セッション","connection.server.session.tooltip":"現在のMCPセッション識別子です。","connection.server.exec":"実行ファイル","connection.server.exec.tooltip":"MCPサーバーを起動した実行ファイルのパスです。","connection.reconnect":"再接続","connection.checkSettings":"設定を確認","connection.agents.title":"AIエージェント","connection.agents.name":"エージェント","connection.agents.cwd":"作業ディレクトリ","connection.agents.cwd.tooltip":"接続中のAIエージェントの現在の作業ディレクトリです。","connection.agents.projectRoot":"プロジェクトルート","connection.agents.projectRoot.tooltip":"同期オーナーシップの権威あるプロジェクトパス","connection.agents.projectRoot.unresolved":"未解決","connection.agents.connected":"接続時刻","connection.agents.unknown":"不明","connection.agents.none":"接続中のエージェントなし","connection.plugins.title":"プラグイン","connection.plugins.place":"プレイス","connection.plugins.clientId":"クライアントID","connection.plugins.clientId.tooltip":"このStudio接続を識別するプラグインクライアントIDです。","connection.plugins.lastSeen":"最終確認","connection.plugins.lastSeen.tooltip":"プラグインから最後に受信したハートビート時刻です。","connection.plugins.version":"バージョン","connection.plugins.version.tooltip":"Studioが報告したインストール済みプラグインのバージョンです。","connection.plugins.none":"接続中のプラグインなし","connection.log.title":"接続ログ","connection.log.empty":"イベントなし","connection.time.secondsAgo":"秒前","connection.time.minutesAgo":"分前","connection.time.hoursAgo":"時間前","common.loading":"読み込み中...","common.retry":"再試行","common.reconnecting":"再接続中...","common.expand":"展開","common.collapse":"折りたたむ","tools.tab.history":"履歴","tools.tab.statistics":"統計","tools.tab.failures":"失敗","tools.col.time":"時刻","tools.col.time.tooltip":"ツール実行が記録された時刻です。","tools.col.toolAction":"ツール.アクション","tools.col.toolAction.tooltip":"実行されたツール名とアクションです。","tools.col.duration":"所要時間","tools.col.duration.tooltip":"ツール完了までにかかった時間です。","tools.col.status":"ステータス","tools.col.status.tooltip":"記録されたツール実行の結果です。","tools.col.tier":"ティア","tools.col.tier.tooltip":"そのツールまたはアクションに必要なライセンスティアです。","tools.col.tierStats.tooltip":"ツール統計行がBasic、Pro、Mixedのどれに当たるかを示します。","tools.col.tool":"ツール","tools.col.tool.tooltip":"統計テーブルに表示される統合ツール名です。","tools.col.calls":"呼び出し数","tools.col.calls.tooltip":"このツールで記録された総呼び出し回数です。","tools.col.ok":"OK","tools.col.ok.tooltip":"直接成功した実行回数です。","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"fallback 実行で成功した回数です。","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"fallback なしでブロックされた実行回数です。","tools.col.err":"失敗","tools.col.err.tooltip":"失敗で終了した実行回数です。","tools.col.okRate":"成功率","tools.col.okRate.tooltip":"正常に完了した呼び出しの割合です。","tools.col.avgTime":"平均時間","tools.col.avgTime.tooltip":"記録された呼び出し全体の平均実行時間です。","tools.col.error":"エラー","tools.filter.tool":"ツール","tools.filter.all":"すべて","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"この項目はPro専用のツールまたはアクションを使用しました。","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"要求したProアクションがBasic fallbackで成功しました。","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"要求したProアクションはブロックされ、fallbackも実行されませんでした。","tools.badge.err":"失敗","tools.badge.err.tooltip":"ツール実行が失敗で終了しました。","tools.status.ok":"OK","tools.status.ok.tooltip":"ツール実行が正常に完了しました。","tools.tier.mixed.tooltip":"このツールにはBasicとProのアクションが両方含まれます。","tools.detail.params":"パラメータ","tools.detail.params.tooltip":"このツール実行に渡された入力パラメータです。","tools.detail.result":"結果","tools.detail.result.tooltip":"このツール実行から返された結果ペイロードです。","tools.detail.requestedCommand":"要求コマンド","tools.detail.executedCommand":"実行コマンド","tools.detail.alternatives":"代替候補","tools.detail.blockedMessage":"ブロック理由","tools.detail.noFallback":"Fallback なし","tools.detail.noFallback.value":"実行された fallback はありません。","tools.detail.errorMessage":"エラーメッセージ","tools.clear.history.title":"履歴を削除しますか?","tools.clear.history.message":"現在の place のツール履歴を完全に削除します。","tools.clear.statistics.title":"統計を削除しますか?","tools.clear.statistics.message":"現在の place のツール統計を完全にリセットします。","tools.detail.error":"エラー","tools.page.prev":"前へ","tools.page.prev.tooltip":"ツール履歴の前のページへ移動します。","tools.page.next":"次へ","tools.page.next.tooltip":"ツール履歴の次のページへ移動します。","tools.empty.history":"履歴なし","tools.empty.stats":"ツール統計なし","tools.empty.failures":"失敗なし","tools.summary.total":"合計","tools.summary.calls":"呼び出し","tools.summary.sessions":"セッション","settings.license.title":"ライセンス","settings.license.title.tooltip":"現在のライセンス状態とサブスクリプションティアです。","settings.license.status":"ステータス","settings.license.status.tooltip":"現在のライセンス有効化状態です。","settings.license.tier":"ティア","settings.license.tier.tooltip":"利用できるWEPPY Dashboard機能を決める現在のサブスクリプションティアです。","settings.license.key":"キー","settings.license.key.tooltip":"現在サーバーに読み込まれているマスク済みライセンスキーです。","settings.license.keyValue.tooltip":"現在サーバーに読み込まれているマスク済みライセンスキーです。","settings.license.provider":"プロバイダー","settings.license.provider.tooltip":"このキーを検証するライセンスプロバイダーです。","settings.license.providerValue.tooltip":"このキーを検証するライセンスプロバイダーです。","settings.license.active":"有効","settings.license.active.tooltip":"現在のライセンス有効化状態です。","settings.license.status.activeCancelPending.tooltip":"解約は予約済みですが、現在の請求期間が終了するまでは Pro アクセスが維持されます。","settings.license.inactive":"無効","settings.license.inactive.tooltip":"現在のライセンス有効化状態です。","settings.license.expired":"期限切れ","settings.license.expired.tooltip":"現在のライセンス有効化状態です。","settings.license.unavailable":"ライセンス情報を取得できません","settings.license.detail.cancelPending":"解約が予約されました。現在の請求期間が終了するまでは Pro アクセスが維持されます。","settings.license.reset":"ライセンスをリセット","settings.readOnly":"読み取り専用","settings.readOnly.tooltip":"このセクションの値はWEPPY Dashboardから編集できません。","settings.unavailable":"設定を取得できません","settings.general.title":"一般設定","settings.general.title.tooltip":"変更すると即時反映されるHot設定です。","settings.general.liveApply":"即時反映","settings.general.liveApply.tooltip":"このセクションの変更は別の保存ボタンなしですぐ適用されます。","settings.general.applied":"適用済み","settings.general.logLevel":"ログレベル","settings.general.logLevel.tooltip":"WEPPY Dashboardログに出力する詳細度を設定します。","settings.general.localHistory":"ツール履歴記録","settings.general.localHistory.tooltip":"WEPPY Dashboard履歴画面用にローカルのツール実行履歴を保存します。","settings.general.localStatistics":"ツール統計収集","settings.general.localStatistics.tooltip":"WEPPY Dashboard表示用にローカル利用統計を集計します。","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WEPPY Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"リクエストタイムアウト","settings.general.requestTimeout.tooltip":"リクエストを失敗扱いにするまでWEPPY Dashboardが待機する最大時間です。","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"リクエストタイムアウトの単位はミリ秒です。","settings.cold.title":"サーバー環境変数","settings.cold.title.tooltip":"サーバー起動時に読み込まれる読み取り専用の環境変数です。","settings.cold.httpPort.tooltip":"MCPWEPPY DashboardHTTPサーバーが使用するポート番号です。","settings.cold.httpHost.tooltip":"MCPWEPPY DashboardHTTPサーバーがバインドするホストインターフェースです。","settings.cold.dashboardAutoOpen.tooltip":"サーバー起動時にブラウザーでWEPPY Dashboardを自動で開くかどうかを制御します。","settings.cold.dashboardAutoOpen.value.tooltip":"ブラウザー自動起動の現在の起動動作です。","settings.cold.hint":"環境変数で設定してください。","settings.language.title":"言語","settings.language.title.tooltip":"WEPPY DashboardUIテキストの表示言語を選択します。","settings.language.dashboard":"WEPPY Dashboard言語","settings.language.dashboard.tooltip":"Autoではシステム言語を使い、それ以外では選択した言語を強制します。","settings.language.auto":"自動","overview.l0.title":"MCPサーバー切断","overview.l0.message":"MCPサーバーが応答していません。WEPPY Dashboardが自動的に再接続を試みます。","overview.l0.step1":"MCPサーバープロセスが実行中か確認してください","overview.l0.step2":"必要に応じてMCPサーバーコマンドを再起動してください","overview.l0.reconnecting":"3秒ごとに自動再接続中...","overview.l0.reconnectBtn":"再接続","overview.l0.settingsBtn":"設定を確認","overview.l1.pluginGuide":"Roblox Studioプラグインが接続されていません","overview.l1.check1":"Roblox Studioは実行中ですか?","overview.l1.check2":"WEPPY Pluginはインストール済みですか?","overview.l1.feedHint":"プラグインが接続されると変更がここに表示されます","overview.metric.server":"サーバー","overview.metric.server.tooltip":"MCPサーバーの実行状態とプロセス状態です。","overview.metric.plugin":"プラグイン","overview.metric.plugin.tooltip":"Roblox Studioプラグインの接続状態とバージョン情報です。","overview.metric.agent":"エージェント","overview.metric.agent.tooltip":"接続中のAIコーディングエージェントと現在の実行状態です。","overview.metric.agent.instancesUnit":"インスタンス","overview.metric.sync":"同期","overview.metric.sync.tooltip":"現在のStudioとローカルファイル間の同期状態です。","overview.metric.noAgent":"エージェントなし","overview.meta.version":"バージョン","overview.meta.version.tooltip":"インストールされているMCPサーバーのバージョンです。","overview.meta.session":"セッション","overview.meta.session.tooltip":"現在のMCPセッション識別子です。","overview.meta.pid":"PID","overview.meta.pid.tooltip":"OSが使用するプロセス識別子です。","overview.meta.uptime":"稼働時間","overview.meta.uptime.tooltip":"MCPサーバーの起動後に経過した時間です。","overview.feed.title":"最近のゲーム変更","overview.feed.empty":"最近の変更なし","overview.changelog.title":"セッション変更サマリー","overview.changelog.entries":"合計","overview.changelog.scripts":"スクリプト","overview.changelog.instances":"インスタンス","overview.changelog.properties":"プロパティ","overview.changelog.assets":"アセット","overview.tier.title":"ティア使用状況","changelog.subtitle":"ゲーム変更履歴","changelog.filter.all":"すべて","changelog.filter.active":"アクティブ","changelog.filter.completed":"完了","changelog.empty":"変更履歴がありません","changelog.basic.limit.title":"Basicプレビューでは最新3セッションのみ表示されます","changelog.basic.limit.body":"Proにアップグレードすると、このプレイスの完全な変更履歴タイムラインを確認できます。","changelog.basic.metricLabel":"表示中の変更履歴 / 全体","changelog.basic.visible":"表示中","changelog.basic.total":"全体","changelog.card.active":"アクティブ","changelog.card.active.tooltip":"このセッションはまだ新しいゲーム変更を受信しています。","changelog.card.completed":"完了","changelog.card.completed.tooltip":"このセッションは終了しており、これ以上変更は追加されません。","changelog.card.bootstrapStatus":"初期化","changelog.card.bootstrapStatus.tooltip":"このセッションには初期同期ブートストラップのスナップショットのみが含まれます。","changelog.card.inProgress":"進行中","changelog.card.noChanges":"変更なし","changelog.card.noChanges.tooltip":"このセッションではまだ抽出されたゲーム変更がありません。","changelog.card.bootstrapSummary":"初期同期スナップショット","changelog.card.bootstrapSummary.tooltip":"初期ファイル同期の書き込みは 1 件のブートストラップスナップショット行にまとめられます。","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"スクリプト","changelog.card.scripts.tooltip":"このセッションで発生したスクリプト変更です。","changelog.card.instances":"インスタンス","changelog.card.instances.tooltip":"このセッションで発生したインスタンスの作成、削除、移動、複製です。","changelog.card.modified":"変更","changelog.card.created":"作成","changelog.card.deleted":"削除","changelog.card.moved":"移動","changelog.card.propertiesChanged":"プロパティ変更","changelog.card.propertiesChanged.tooltip":"このセッションで記録されたプロパティ値の変更です。","changelog.card.lightingConfigured":"ライティング設定済み","changelog.card.lightingConfigured.tooltip":"このセッションでライティングまたは大気設定が変更されました。","changelog.card.terrainConfigured":"テレイン設定済み","changelog.card.terrainConfigured.tooltip":"このセッションでテレインデータまたはテレイン設定が変更されました。","changelog.card.assetsInserted":"アセット挿入","changelog.card.assetsInserted.tooltip":"このセッション中にプレイスへ挿入されたアセットです。","changelog.category.script":"スクリプト","changelog.category.instance":"インスタンス","changelog.category.property":"プロパティ","changelog.category.lighting":"ライティング","changelog.category.terrain":"テレイン","changelog.category.asset":"アセット","changelog.detail.changeSummary":"変更サマリー","changelog.detail.changeSummary.tooltip":"このセッションで抽出されたゲーム変更数をカテゴリ別に表示します。","changelog.detail.changeTimeline":"変更タイムライン","changelog.detail.changeTimeline.tooltip":"このセッションで抽出されたゲーム変更を時系列で表示します。","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"変更前後の比較","changelog.detail.filterCategory":"カテゴリ","changelog.detail.filterCategory.tooltip":"タイムラインを 1 つの変更カテゴリに絞り込みます。","changelog.detail.confidence.exact":"正確","changelog.detail.confidence.exact.tooltip":"この変更は変更前と変更後の状態が両方確認されています。","changelog.detail.confidence.partial":"部分確認","changelog.detail.confidence.partial.tooltip":"この変更は変更前後の状態の一部のみ確認されています。","changelog.detail.confidence.afterOnly":"結果のみ確認","changelog.detail.confidence.afterOnly.tooltip":"この変更は適用後の結果状態のみ確認されています。","changelog.detail.confidence.intentOnly":"意図のみ記録","changelog.detail.confidence.intentOnly.tooltip":"要求された操作意図のみが記録され、結果状態は確認されていません。","changelog.detail.confidence.unknown":"不明","changelog.detail.confidence.unknown.tooltip":"利用可能なデータだけではこの変更を確実に分類できませんでした。","changelog.detail.noChanges":"このカテゴリに変更なし","changelog.detail.backToList":"一覧に戻る","changelog.diff.empty":"差分なし","changelog.diff.unified":"統合","changelog.diff.sideBySide":"並列比較","changelog.diff.before":"変更前","changelog.diff.after":"変更後","sync.overlay.title":"Roblox Studioプラグインが必要です","sync.overlay.message":"Roblox Studioプラグインが接続されると同期状態を確認できます。","sync.overlay.check1":"Roblox Studioは実行中ですか?","sync.overlay.check2":"WEPPY Pluginはインストール済みですか?","sync.status.title":"同期ステータス","sync.status.title.tooltip":"このプレイスのStudioとローカルファイルの同期状態です。","sync.status.forwardOnly":"順方向のみ","sync.status.forwardOnly.tooltip":"BasicティアではStudioからローカルへの順方向同期のみ利用できます。","sync.status.place":"プレイス","sync.status.place.tooltip":"接続中のRobloxプレイス名とプレイスIDです。","sync.status.path":"パス","sync.status.path.tooltip":"現在同期出力に使っているローカルファイルシステムのルートです。","sync.status.instances":"インスタンス","sync.status.instances.tooltip":"ローカルミラーで追跡中の同期済みRobloxインスタンス総数です。","sync.status.scripts":"スクリプト","sync.status.scripts.tooltip":"このプレイスで現在インデックスされている同期スクリプトファイル数です。","sync.status.state":"状態","sync.status.state.tooltip":"サーバーが報告した現在の同期ランタイム状態です。","sync.directions.title":"同期方向","sync.directions.title.tooltip":"LocalとStudioの間のカテゴリ別同期方向と適用方法です。","sync.directions.type":"タイプ","sync.directions.type.tooltip":"このルールが適用される同期カテゴリです。","sync.directions.direction":"方向","sync.directions.direction.tooltip":"各カテゴリがStudioから、Studioへ、または双方向で同期されるかを示します。","sync.directions.applyMode":"適用モード","sync.directions.applyMode.tooltip":"このカテゴリに届く同期変更の適用方法です。","sync.directions.cat.scripts":"スクリプト","sync.directions.cat.values":"値","sync.directions.cat.containers":"コンテナ","sync.directions.cat.data":"データ","sync.directions.cat.services":"サービス","sync.directions.endpoint.local":"Local","sync.directions.endpoint.local.tooltip":"方向レールの左側は常にディスク上のローカルファイルです。","sync.directions.endpoint.studio":"Studio","sync.directions.endpoint.studio.tooltip":"方向レールの右側は常にRoblox Studioです。","sync.directions.mode.manual":"手動","sync.directions.mode.manual.tooltip":"手動で実行したときだけ同期変更を適用します。","sync.directions.mode.auto":"自動","sync.directions.mode.auto.tooltip":"更新を受け取ると同期変更を自動で適用します。","sync.directions.tooltip.forward.body":"Studioの変更をローカルファイルのみに同期します","sync.directions.tooltip.bidirectional.body":"LocalとStudioの間で双方向同期を行います","sync.directions.tooltip.reverse.body":"ローカルファイルの変更をStudioへ反映します","sync.directions.tooltip.proRequired":"BasicティアではProが必要です","sync.directions.dir.forward":"順方向","sync.directions.dir.bidirectional":"双方向","sync.directions.dir.reverse":"逆方向","sync.log.title":"同期ログ","sync.log.empty":"同期イベントなし","sync.log.type.write":"書き込み","sync.log.type.write.tooltip":"新しい同期出力がディスクに書き込まれました。","sync.log.type.update":"更新","sync.log.type.update.tooltip":"既存の同期ファイルまたはインスタンスが更新されました。","sync.log.type.delete":"削除","sync.log.type.delete.tooltip":"同期済みファイルまたはインスタンスが削除されました。","sync.log.type.idle":"待機","sync.log.type.idle.tooltip":"ファイル変更なしで同期イベントのみ記録されました。","sync.upgrade.title":"Proで完全な同期機能を解放","sync.upgrade.benefit1":"双方向同期 — ファイルを編集するとStudioに自動反映","sync.upgrade.benefit2":"逆方向同期 — ファイルの変更をStudioに送信","sync.upgrade.benefit3":"完全な同期履歴と詳細な変更ログ","sync.upgrade.buy":"Proにアップグレード","playtest.status.title":"プレイテストステータス","playtest.status.title.tooltip":"Studio が報告した現在の Roblox プレイテストセッション状態です。","playtest.status.mode":"モード","playtest.status.mode.tooltip":"現在のセッションで使われている Studio プレイテスト起動モードです。","playtest.status.mode.value.tooltip":"現在使用中の Roblox Studio プレイテストモードの具体的な値です。","playtest.status.mode.play":"プレイ","playtest.status.mode.run":"実行","playtest.status.mode.server":"サーバー","playtest.status.mode.edit":"編集","playtest.status.place.tooltip":"このプレイテストセッションに関連付けられた Roblox プレイスです。","playtest.status.state.running":"実行中","playtest.status.state.running.tooltip":"現在 Roblox プレイテストセッションが実行中です。","playtest.status.state.paused":"一時停止","playtest.status.state.paused.tooltip":"現在の Roblox プレイテストセッションは一時停止中です。","playtest.status.state.notRunning":"未実行","playtest.status.state.notRunning.tooltip":"現在実行中の Roblox プレイテストセッションはありません。","playtest.control.play":"プレイ","playtest.control.pause":"一時停止","playtest.control.resume":"再開","playtest.control.stop":"停止","playtest.history.title":"テスト履歴","playtest.history.title.tooltip":"このプロジェクトで記録された自動プレイテスト実行履歴です。","playtest.history.empty":"テスト結果なし","playtest.history.mode":"モード","playtest.history.mode.tooltip":"この記録済みテスト実行で使われたプレイテストモードです。","playtest.history.status.passed":"成功","playtest.history.status.failed":"失敗","playtest.history.status.running":"実行中","playtest.history.status.unknown":"不明","playtest.history.status.tooltip":"この自動プレイテスト実行で記録された結果状態です。","playtest.empty.title":"プレイテスト結果がありません","playtest.empty.message":"AIエージェントがsystem_info.run_testで自動テストを実行すると結果が表示されます。","playtest.empty.message.before":"AIエージェントが自動テストを","playtest.empty.message.after":"で実行すると結果がここに表示されます。","playtest.empty.runTest.tooltip":"system_info ツール経由で Roblox プレイテスト検証を実行するWEPPY Dashboardの自動化入口です。","playtest.report.title":"選択されたレポート","playtest.report.title.tooltip":"現在選択されている自動プレイテスト実行の詳細出力です。","playtest.report.content":"レポート","playtest.report.content.tooltip":"選択された自動プレイテスト実行の Markdown 要約です。","playtest.report.logs":"ログ","playtest.report.logs.tooltip":"選択された自動プレイテスト実行で収集された実行ログです。","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"レポート内容なし","playtest.basic.icon":"🎮","playtest.basic.title":"プレイテストはPro専用機能です","playtest.basic.desc":"WEPPY Dashboardからプレイテストを制御し、自動テストを実行し、詳細なテストレポートを確認できます。","playtest.basic.benefit1":"ワンクリックのプレイ/一時停止/停止コントロール","playtest.basic.benefit2":"AIエージェントによる自動テスト実行","playtest.basic.benefit3":"成功/失敗追跡付きテスト履歴","playtest.basic.benefit4":"詳細なマークダウンテストレポート","playtest.sample.badge":"Proプレイテスト画面のプレビュー","playtest.sample.title":"現在表示しているのは、Proにアップグレード後に利用できるプレイテスト画面のプレビューです。","playtest.sample.message":"このプレビューはサンプルデータを使用しています。ライブのプレイテスト操作、履歴管理、実際のレポート保存はPro購入後に利用できます。","playtest.sample.clearDisabled":"実際のプレイテスト履歴の削除はProで利用できます。","playtest.sample.place":"アリーナプレビュー","playtest.sample.history.name":"サンプルアリーナスモークテスト","playtest.sample.context.why":"アリーナにスポーンし、開始直後を生き残り、HUDがすぐ反応するか確認します。","playtest.sample.context.expected":"プレイヤーが安全にスポーンし、1秒以内にカウントダウンUIが表示され、最初のウェーブがエラーなく始まること。","playtest.sample.context.observed":"スポーン保護が正常に動作し、HUDは時間どおり更新され、最初のウェーブは回帰なく完了しました。","playtest.sample.report.markdown":`# サンプルアリーナスモークテスト
109
+ [sample] relatório de amostra finalizado`,"sidebar.whatsNew":"Novidades","header.whatsNew":"Novidades","header.whatsNew.tooltip":"Novidades","whatsNew.pageTitle":"Novidades","whatsNew.pageSubtitle":"Fique por dentro das mudanças do MCP","whatsNew.unreadSection":"Não lidos","whatsNew.allSection":"Todos os anúncios","whatsNew.empty":"Nenhum anúncio ainda","whatsNew.newBadge":"NOVO","whatsNew.category.release":"Versão","whatsNew.category.notice":"Aviso","whatsNew.category.deprecation":"Descontinuado","whatsNew.category.tip":"Dica"},Rm={"sidebar.overview":"概要","sidebar.changelog":"変更履歴","sidebar.connection":"接続","sidebar.sync":"同期","sidebar.playtest":"プレイテスト","sidebar.tools":"ツール","sidebar.settings":"設定","header.currentProject":"現在のプロジェクト","header.unknownProject":"不明なプロジェクト","header.projectRoot.label":"Project Root","header.currentProject.loading":"プロジェクトルートを読み込み中...","header.currentProject.unavailable":"プロジェクトルートを読み込めません","header.placeNotConnected":"プレイス未接続","header.currentProject.tooltip":"現在選択されているプロジェクトフォルダです。","header.currentProject.loading.tooltip":"プロジェクトルート情報をまだ読み込み中です。","header.currentProject.unavailable.tooltip":"現在のプロジェクトルート情報を読み込めません。","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Sync root を読み込み中...","header.currentProjectSyncRoot.unavailable":"Sync root 情報を読み込めません","header.currentProjectSyncRoot.tooltip":"選択中のプロジェクトに対応する現在の sync root フォルダです。","header.currentProjectSyncRoot.loading.tooltip":"Sync root 情報をまだ読み込み中です。","header.currentProjectSyncRoot.unavailable.tooltip":"現在の sync root 情報を読み込めません。","header.testFiles.label":"Test Files","header.testFiles.unavailable":"テストファイルのパスを確認できません。","header.testFiles.tooltip":"選択した place の現在の playtest ファイルディレクトリです。","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"プラグイン接続が必要です","header.places.liveRequired":"現在の active place を確認するにはプラグイン接続が必要です。","header.place.tooltip":"接続中の Roblox プレイスです。","header.placeNotConnected.tooltip":"プレイス未接続","header.changeProjectRoot":"プロジェクトルートを変更","header.changeProjectRoot.ariaLabel":"プロジェクトルートを変更","header.changeProjectRoot.tooltip":"現在の project root を変更します。","header.changeProjectRoot.disabledTooltip.l0":"プロジェクトルートを変更するには、まず MCP サーバー接続が必要です。","header.changeProjectRoot.disabledTooltip.loading":"プロジェクトルート情報をまだ読み込み中です。","header.changeProjectRoot.disabledTooltip.unavailable":"現在のプロジェクトルート情報を読み込めません。","header.projectRootModal.initial.title":"プロジェクトルートを変更","header.projectRootModal.initial.body.connected":"プロジェクトフォルダを選択すると、MCP は新しい project root に切り替わり、現在の Studio 内容が新しい <selected project folder>/weppy-project-sync にフル再同期されます。","header.projectRootModal.initial.body.disconnected":"プロジェクトフォルダを選択すると、MCP は新しい project root に切り替わり、<selected project folder>/weppy-project-sync を次の sync 対象として使用します。","header.projectRootModal.initial.nextSyncRoot":"選択後の新しい sync 先","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"現在の sync は直ちに停止します。","header.projectRootModal.initial.warningFreshSync":"現在の Studio 内容を基準に、新しい対象へ fresh full sync が作成されます。","header.projectRootModal.initial.warningNoMove":"既存の sync フォルダは自動では移動されません。","header.projectRootModal.initial.warningDeferredSync":"Studio が未接続の場合、full resync は次回 plugin 接続時に開始されます。","header.projectRootModal.confirm.title":"新しいプロジェクトルートを確認","header.projectRootModal.confirm.body":"適用前に選択したプロジェクトフォルダを確認してください。","header.projectRootModal.confirm.projectRoot":"選択したプロジェクトフォルダ","header.projectRootModal.confirm.syncRoot":"新しい sync 先","header.projectRootModal.confirm.warningNoMove":"既存の sync フォルダは自動では移動されません。","header.projectRootModal.pick":"フォルダを選択","header.projectRootModal.apply":"変更を適用","header.projectRootModal.cancel":"キャンセル","header.projectRootModal.error":"プロジェクトルートを変更できませんでした。","sidebar.gate.l1":"MCP サーバーへの接続が必要です。","sidebar.gate.l2":"Roblox Studio プラグインへの接続が必要です。","status.online":"オンライン","status.offline":"オフライン","status.idle":"待機中","status.syncing":"同期中","status.error":"エラー","status.initializing":"初期化中","level.l0.title":"サーバー切断","level.l0.message":"WEPPY Dashboard は開いていますが、MCPサーバーが停止したか応答していません。","level.l1.title":"サーバー接続済み","level.l1.hint":"確認: Roblox Studioは実行中?プラグインはインストール済み?","level.l2.ok":"Studio接続済み","tier.basic":"Basic","tier.basic.tooltip":"標準のWEPPY Dashboard機能を提供するBasicティアです。","tier.pro":"Pro","tier.pro.tooltip":"すべてのWEPPY Dashboard機能を提供するProティアです。","tier.mixed":"混合","tier.upgrade":"Proにアップグレード","tier.compare":"Basic vs Pro","tier.banner.save":"ProでAIトークンを節約!","tier.comparison.comingSoon":"Basic vs Pro 比較 — 近日公開","tier.comparison.close":"閉じる","tier.comparison.detailTitle":"詳細ツールカタログ","tier.comparison.description":"説明","tier.comparison.basic.core":"基本MCPワークフロー","tier.comparison.basic.core.item1":"スクリプト作成・編集","tier.comparison.basic.core.item2":"インスタンス管理","tier.comparison.basic.core.item3":"プロパティ制御","tier.comparison.basic.core.item4":"選択と検索","tier.comparison.basic.core.item5":"タグ管理","tier.comparison.basic.core.item6":"カメラ制御","tier.comparison.basic.core.item7":"ログ監視","tier.comparison.basic.sync":"同期(Basic)","tier.comparison.basic.sync.item1":"Studioからローカルへの一方向同期","tier.comparison.basic.sync.item2":"手動適用がデフォルト","tier.comparison.pro.all":"Basicのすべてに加えて","tier.comparison.pro.sync":"高度な同期ワークフロー","tier.comparison.pro.sync.item1":"タイプ別同期方向","tier.comparison.pro.sync.item2":"タイプ別適用モード","tier.comparison.pro.sync.item3":"双方向・逆方向同期","tier.comparison.pro.sync.item4":"フル同期、再同期、Studioへプッシュ","tier.comparison.pro.sync.item5":"マルチプレイス同期","tier.comparison.pro.playtest":"プレイテスト制御","tier.comparison.pro.playtest.item1":"再生、停止、一時停止、再開","tier.comparison.pro.playtest.item2":"プレイテスト状態の検査","tier.comparison.pro.playtest.item3":"自動テスト実行","tier.comparison.pro.creation":"高度な作成ワークフロー","tier.comparison.pro.creation.item1":"一括操作","tier.comparison.pro.creation.item2":"テレイン生成","tier.comparison.pro.creation.item3":"アセット検索・挿入","tier.comparison.pro.creation.item4":"レイキャスト・空間分析","tier.comparison.pro.creation.item5":"環境制御","tier.comparison.discount.label":"🎁 Gumroad決済時にこのコードを入力すると割引が受けられます:","tier.comparison.discount.code":"WEPPY-MCP","tier.comparison.discount.expiry":"4月30日まで有効","tier.promo.discount.hint":"🎁 GumroadでWEPPY-MCPコードを使用 · 4月30日まで","tier.promo.discount.context":"🎁 Gumroad決済時に入力:","tier.tool.query_instances.desc":"インスタンス照会、子孫探索、クラス情報、名前・クラス検索。Pro: ファイルツリー、プロジェクト構造、プロパティ・タグ検索。","tier.tool.mutate_instances.desc":"インスタンスの作成、削除、複製、移動、名前変更、ピボット。Pro: ツリー作成、一括作成・削除・複製。","tier.tool.manage_properties.desc":"プロパティ、属性、タグの取得・設定。Pro: 計算・相対値設定、一括取得・設定、子の一括変更。","tier.tool.manage_scripts.desc":"スクリプトソースの読取・書込・作成・削除・行編集・検索。Pro: スクリプト間一括置換。","tier.tool.manage_lighting.desc":"Pro専用。照明、大気、空、テレイン属性、時間帯の環境設定。","tier.tool.manage_selection.desc":"選択の取得、設定、解除。Pro: コンテキスト、詳細、項目の追加・削除、変更監視。","tier.tool.manage_camera.desc":"カメラ情報取得、パスまたは座標でフォーカス、推奨ビュー提案。","tier.tool.manage_tween.desc":"Pro専用。滑らかなアニメーションのためのトゥイーン作成、再生、一時停止、キャンセル。","tier.tool.manage_audio.desc":"Pro専用。サウンドの再生、停止、一時停止、再開。オーディオリスナー設定。","tier.tool.manage_animation.desc":"Pro専用。アニメーションのロード、再生、停止。ヒューマノイド・コントローラーのトラック照会。","tier.tool.manage_physics.desc":"Pro専用。物理衝突グループの登録、グループ間衝突設定、一覧照会。","tier.tool.manage_effects.desc":"Pro専用。パーティクル放出、全消去、エフェクト有効化トグル。","tier.tool.manage_terrain.desc":"Pro専用。図形充填、領域消去、マテリアル置換、色管理、ボクセル読書、手続き生成、スムージング。","tier.tool.spatial_query.desc":"Pro専用。レイキャスト、地面検索、配置確認、領域スキャン、平地・スポーン位置探索、歩行分析、空間マップ、衝突確認。","tier.tool.manage_assets.desc":"Pro専用。モデル挿入、アセット情報照会、クリエイターストア検索、無料モデル・パッケージ挿入、エクスポート。","tier.tool.manage_sync.desc":"Pro専用。同期状態、設定、履歴、方向設定、同期ファイル読書。","tier.tool.workspace_state.desc":"Pro専用。フル同期、スナップショット、最近の変更、ビューポート情報、メタデータ、キャッシュ管理。","tier.tool.manage_logs.desc":"出力ログのフィルタリング照会、増分ポーリング、バッファ消去、最近のエラー照会。","tier.tool.system_info.desc":"接続状態、使用ティア確認。Pro: プレイス情報、サービス一覧、Studio設定、プレイテスト制御、自動テスト。","tier.tool.batch_execute.desc":"Pro専用。複数コマンドを一括実行。順次処理、エラー時続行オプション。","tier.tool.execute_luau.desc":"Pro専用。Roblox Studioサンドボックスで任意のLuauコードを実行。","connection.server.title":"サーバーステータス","connection.server.version":"バージョン","connection.server.version.tooltip":"インストールされているMCPサーバーのバージョンです。","connection.server.pid":"PID","connection.server.pid.tooltip":"OSが使用するプロセス識別子です。","connection.server.uptime":"稼働時間","connection.server.uptime.tooltip":"MCPサーバーの起動後に経過した時間です。","connection.server.session":"セッション","connection.server.session.tooltip":"現在のMCPセッション識別子です。","connection.server.exec":"実行ファイル","connection.server.exec.tooltip":"MCPサーバーを起動した実行ファイルのパスです。","connection.reconnect":"再接続","connection.checkSettings":"設定を確認","connection.agents.title":"AIエージェント","connection.agents.name":"エージェント","connection.agents.cwd":"作業ディレクトリ","connection.agents.cwd.tooltip":"接続中のAIエージェントの現在の作業ディレクトリです。","connection.agents.projectRoot":"プロジェクトルート","connection.agents.projectRoot.tooltip":"同期オーナーシップの権威あるプロジェクトパス","connection.agents.projectRoot.unresolved":"未解決","connection.agents.connected":"接続時刻","connection.agents.unknown":"不明","connection.agents.none":"接続中のエージェントなし","connection.plugins.title":"プラグイン","connection.plugins.place":"プレイス","connection.plugins.clientId":"クライアントID","connection.plugins.clientId.tooltip":"このStudio接続を識別するプラグインクライアントIDです。","connection.plugins.lastSeen":"最終確認","connection.plugins.lastSeen.tooltip":"プラグインから最後に受信したハートビート時刻です。","connection.plugins.version":"バージョン","connection.plugins.version.tooltip":"Studioが報告したインストール済みプラグインのバージョンです。","connection.plugins.none":"接続中のプラグインなし","connection.log.title":"接続ログ","connection.log.empty":"イベントなし","connection.time.secondsAgo":"秒前","connection.time.minutesAgo":"分前","connection.time.hoursAgo":"時間前","common.loading":"読み込み中...","common.retry":"再試行","common.reconnecting":"再接続中...","common.expand":"展開","common.collapse":"折りたたむ","tools.tab.history":"履歴","tools.tab.statistics":"統計","tools.tab.failures":"失敗","tools.col.time":"時刻","tools.col.time.tooltip":"ツール実行が記録された時刻です。","tools.col.toolAction":"ツール.アクション","tools.col.toolAction.tooltip":"実行されたツール名とアクションです。","tools.col.duration":"所要時間","tools.col.duration.tooltip":"ツール完了までにかかった時間です。","tools.col.status":"ステータス","tools.col.status.tooltip":"記録されたツール実行の結果です。","tools.col.tier":"ティア","tools.col.tier.tooltip":"そのツールまたはアクションに必要なライセンスティアです。","tools.col.tierStats.tooltip":"ツール統計行がBasic、Pro、Mixedのどれに当たるかを示します。","tools.col.tool":"ツール","tools.col.tool.tooltip":"統計テーブルに表示される統合ツール名です。","tools.col.calls":"呼び出し数","tools.col.calls.tooltip":"このツールで記録された総呼び出し回数です。","tools.col.ok":"OK","tools.col.ok.tooltip":"直接成功した実行回数です。","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"fallback 実行で成功した回数です。","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"fallback なしでブロックされた実行回数です。","tools.col.err":"失敗","tools.col.err.tooltip":"失敗で終了した実行回数です。","tools.col.okRate":"成功率","tools.col.okRate.tooltip":"正常に完了した呼び出しの割合です。","tools.col.avgTime":"平均時間","tools.col.avgTime.tooltip":"記録された呼び出し全体の平均実行時間です。","tools.col.error":"エラー","tools.filter.tool":"ツール","tools.filter.all":"すべて","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"この項目はPro専用のツールまたはアクションを使用しました。","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"要求したProアクションがBasic fallbackで成功しました。","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"要求したProアクションはブロックされ、fallbackも実行されませんでした。","tools.badge.err":"失敗","tools.badge.err.tooltip":"ツール実行が失敗で終了しました。","tools.status.ok":"OK","tools.status.ok.tooltip":"ツール実行が正常に完了しました。","tools.tier.mixed.tooltip":"このツールにはBasicとProのアクションが両方含まれます。","tools.detail.params":"パラメータ","tools.detail.params.tooltip":"このツール実行に渡された入力パラメータです。","tools.detail.result":"結果","tools.detail.result.tooltip":"このツール実行から返された結果ペイロードです。","tools.detail.requestedCommand":"要求コマンド","tools.detail.executedCommand":"実行コマンド","tools.detail.alternatives":"代替候補","tools.detail.blockedMessage":"ブロック理由","tools.detail.noFallback":"Fallback なし","tools.detail.noFallback.value":"実行された fallback はありません。","tools.detail.errorMessage":"エラーメッセージ","tools.clear.history.title":"履歴を削除しますか?","tools.clear.history.message":"現在の place のツール履歴を完全に削除します。","tools.clear.statistics.title":"統計を削除しますか?","tools.clear.statistics.message":"現在の place のツール統計を完全にリセットします。","tools.detail.error":"エラー","tools.page.prev":"前へ","tools.page.prev.tooltip":"ツール履歴の前のページへ移動します。","tools.page.next":"次へ","tools.page.next.tooltip":"ツール履歴の次のページへ移動します。","tools.empty.history":"履歴なし","tools.empty.stats":"ツール統計なし","tools.empty.failures":"失敗なし","tools.summary.total":"合計","tools.summary.calls":"呼び出し","tools.summary.sessions":"セッション","settings.license.title":"ライセンス","settings.license.title.tooltip":"現在のライセンス状態とサブスクリプションティアです。","settings.license.status":"ステータス","settings.license.status.tooltip":"現在のライセンス有効化状態です。","settings.license.tier":"ティア","settings.license.tier.tooltip":"利用できるWEPPY Dashboard機能を決める現在のサブスクリプションティアです。","settings.license.key":"キー","settings.license.key.tooltip":"現在サーバーに読み込まれているマスク済みライセンスキーです。","settings.license.keyValue.tooltip":"現在サーバーに読み込まれているマスク済みライセンスキーです。","settings.license.provider":"プロバイダー","settings.license.provider.tooltip":"このキーを検証するライセンスプロバイダーです。","settings.license.providerValue.tooltip":"このキーを検証するライセンスプロバイダーです。","settings.license.active":"有効","settings.license.active.tooltip":"現在のライセンス有効化状態です。","settings.license.status.activeCancelPending.tooltip":"解約は予約済みですが、現在の請求期間が終了するまでは Pro アクセスが維持されます。","settings.license.inactive":"無効","settings.license.inactive.tooltip":"現在のライセンス有効化状態です。","settings.license.expired":"期限切れ","settings.license.expired.tooltip":"現在のライセンス有効化状態です。","settings.license.unavailable":"ライセンス情報を取得できません","settings.license.detail.cancelPending":"解約が予約されました。現在の請求期間が終了するまでは Pro アクセスが維持されます。","settings.license.reset":"ライセンスをリセット","settings.readOnly":"読み取り専用","settings.readOnly.tooltip":"このセクションの値はWEPPY Dashboardから編集できません。","settings.unavailable":"設定を取得できません","settings.general.title":"一般設定","settings.general.title.tooltip":"変更すると即時反映されるHot設定です。","settings.general.liveApply":"即時反映","settings.general.liveApply.tooltip":"このセクションの変更は別の保存ボタンなしですぐ適用されます。","settings.general.applied":"適用済み","settings.general.logLevel":"ログレベル","settings.general.logLevel.tooltip":"WEPPY Dashboardログに出力する詳細度を設定します。","settings.general.localHistory":"ツール履歴記録","settings.general.localHistory.tooltip":"WEPPY Dashboard履歴画面用にローカルのツール実行履歴を保存します。","settings.general.localStatistics":"ツール統計収集","settings.general.localStatistics.tooltip":"WEPPY Dashboard表示用にローカル利用統計を集計します。","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WEPPY Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"リクエストタイムアウト","settings.general.requestTimeout.tooltip":"リクエストを失敗扱いにするまでWEPPY Dashboardが待機する最大時間です。","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"リクエストタイムアウトの単位はミリ秒です。","settings.cold.title":"サーバー環境変数","settings.cold.title.tooltip":"サーバー起動時に読み込まれる読み取り専用の環境変数です。","settings.cold.httpPort.tooltip":"MCPWEPPY DashboardHTTPサーバーが使用するポート番号です。","settings.cold.httpHost.tooltip":"MCPWEPPY DashboardHTTPサーバーがバインドするホストインターフェースです。","settings.cold.dashboardAutoOpen.tooltip":"サーバー起動時にブラウザーでWEPPY Dashboardを自動で開くかどうかを制御します。","settings.cold.dashboardAutoOpen.value.tooltip":"ブラウザー自動起動の現在の起動動作です。","settings.cold.hint":"環境変数で設定してください。","settings.language.title":"言語","settings.language.title.tooltip":"WEPPY DashboardUIテキストの表示言語を選択します。","settings.language.dashboard":"WEPPY Dashboard言語","settings.language.dashboard.tooltip":"Autoではシステム言語を使い、それ以外では選択した言語を強制します。","settings.language.auto":"自動","overview.l0.title":"MCPサーバー切断","overview.l0.message":"MCPサーバーが応答していません。WEPPY Dashboardが自動的に再接続を試みます。","overview.l0.step1":"MCPサーバープロセスが実行中か確認してください","overview.l0.step2":"必要に応じてMCPサーバーコマンドを再起動してください","overview.l0.reconnecting":"3秒ごとに自動再接続中...","overview.l0.reconnectBtn":"再接続","overview.l0.settingsBtn":"設定を確認","overview.l1.pluginGuide":"Roblox Studioプラグインが接続されていません","overview.l1.check1":"Roblox Studioは実行中ですか?","overview.l1.check2":"WEPPY Pluginはインストール済みですか?","overview.l1.feedHint":"プラグインが接続されると変更がここに表示されます","overview.metric.server":"サーバー","overview.metric.server.tooltip":"MCPサーバーの実行状態とプロセス状態です。","overview.metric.plugin":"プラグイン","overview.metric.plugin.tooltip":"Roblox Studioプラグインの接続状態とバージョン情報です。","overview.metric.agent":"エージェント","overview.metric.agent.tooltip":"接続中のAIコーディングエージェントと現在の実行状態です。","overview.metric.agent.instancesUnit":"インスタンス","overview.metric.sync":"同期","overview.metric.sync.tooltip":"現在のStudioとローカルファイル間の同期状態です。","overview.metric.noAgent":"エージェントなし","overview.meta.version":"バージョン","overview.meta.version.tooltip":"インストールされているMCPサーバーのバージョンです。","overview.meta.session":"セッション","overview.meta.session.tooltip":"現在のMCPセッション識別子です。","overview.meta.pid":"PID","overview.meta.pid.tooltip":"OSが使用するプロセス識別子です。","overview.meta.uptime":"稼働時間","overview.meta.uptime.tooltip":"MCPサーバーの起動後に経過した時間です。","overview.feed.title":"最近のゲーム変更","overview.feed.empty":"最近の変更なし","overview.changelog.title":"セッション変更サマリー","overview.changelog.entries":"合計","overview.changelog.scripts":"スクリプト","overview.changelog.instances":"インスタンス","overview.changelog.properties":"プロパティ","overview.changelog.assets":"アセット","overview.tier.title":"ティア使用状況","changelog.subtitle":"ゲーム変更履歴","changelog.filter.all":"すべて","changelog.filter.active":"アクティブ","changelog.filter.completed":"完了","changelog.empty":"変更履歴がありません","changelog.basic.limit.title":"Basicプレビューでは最新3セッションのみ表示されます","changelog.basic.limit.body":"Proにアップグレードすると、このプレイスの完全な変更履歴タイムラインを確認できます。","changelog.basic.metricLabel":"表示中の変更履歴 / 全体","changelog.basic.visible":"表示中","changelog.basic.total":"全体","changelog.card.active":"アクティブ","changelog.card.active.tooltip":"このセッションはまだ新しいゲーム変更を受信しています。","changelog.card.completed":"完了","changelog.card.completed.tooltip":"このセッションは終了しており、これ以上変更は追加されません。","changelog.card.bootstrapStatus":"初期化","changelog.card.bootstrapStatus.tooltip":"このセッションには初期同期ブートストラップのスナップショットのみが含まれます。","changelog.card.inProgress":"進行中","changelog.card.noChanges":"変更なし","changelog.card.noChanges.tooltip":"このセッションではまだ抽出されたゲーム変更がありません。","changelog.card.bootstrapSummary":"初期同期スナップショット","changelog.card.bootstrapSummary.tooltip":"初期ファイル同期の書き込みは 1 件のブートストラップスナップショット行にまとめられます。","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"スクリプト","changelog.card.scripts.tooltip":"このセッションで発生したスクリプト変更です。","changelog.card.instances":"インスタンス","changelog.card.instances.tooltip":"このセッションで発生したインスタンスの作成、削除、移動、複製です。","changelog.card.modified":"変更","changelog.card.created":"作成","changelog.card.deleted":"削除","changelog.card.moved":"移動","changelog.card.propertiesChanged":"プロパティ変更","changelog.card.propertiesChanged.tooltip":"このセッションで記録されたプロパティ値の変更です。","changelog.card.lightingConfigured":"ライティング設定済み","changelog.card.lightingConfigured.tooltip":"このセッションでライティングまたは大気設定が変更されました。","changelog.card.terrainConfigured":"テレイン設定済み","changelog.card.terrainConfigured.tooltip":"このセッションでテレインデータまたはテレイン設定が変更されました。","changelog.card.assetsInserted":"アセット挿入","changelog.card.assetsInserted.tooltip":"このセッション中にプレイスへ挿入されたアセットです。","changelog.category.script":"スクリプト","changelog.category.instance":"インスタンス","changelog.category.property":"プロパティ","changelog.category.lighting":"ライティング","changelog.category.terrain":"テレイン","changelog.category.asset":"アセット","changelog.detail.changeSummary":"変更サマリー","changelog.detail.changeSummary.tooltip":"このセッションで抽出されたゲーム変更数をカテゴリ別に表示します。","changelog.detail.changeTimeline":"変更タイムライン","changelog.detail.changeTimeline.tooltip":"このセッションで抽出されたゲーム変更を時系列で表示します。","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"変更前後の比較","changelog.detail.filterCategory":"カテゴリ","changelog.detail.filterCategory.tooltip":"タイムラインを 1 つの変更カテゴリに絞り込みます。","changelog.detail.confidence.exact":"正確","changelog.detail.confidence.exact.tooltip":"この変更は変更前と変更後の状態が両方確認されています。","changelog.detail.confidence.partial":"部分確認","changelog.detail.confidence.partial.tooltip":"この変更は変更前後の状態の一部のみ確認されています。","changelog.detail.confidence.afterOnly":"結果のみ確認","changelog.detail.confidence.afterOnly.tooltip":"この変更は適用後の結果状態のみ確認されています。","changelog.detail.confidence.intentOnly":"意図のみ記録","changelog.detail.confidence.intentOnly.tooltip":"要求された操作意図のみが記録され、結果状態は確認されていません。","changelog.detail.confidence.unknown":"不明","changelog.detail.confidence.unknown.tooltip":"利用可能なデータだけではこの変更を確実に分類できませんでした。","changelog.detail.noChanges":"このカテゴリに変更なし","changelog.detail.backToList":"一覧に戻る","changelog.diff.empty":"差分なし","changelog.diff.unified":"統合","changelog.diff.sideBySide":"並列比較","changelog.diff.before":"変更前","changelog.diff.after":"変更後","sync.overlay.title":"Roblox Studioプラグインが必要です","sync.overlay.message":"Roblox Studioプラグインが接続されると同期状態を確認できます。","sync.overlay.check1":"Roblox Studioは実行中ですか?","sync.overlay.check2":"WEPPY Pluginはインストール済みですか?","sync.status.title":"同期ステータス","sync.status.title.tooltip":"このプレイスのStudioとローカルファイルの同期状態です。","sync.status.forwardOnly":"順方向のみ","sync.status.forwardOnly.tooltip":"BasicティアではStudioからローカルへの順方向同期のみ利用できます。","sync.status.place":"プレイス","sync.status.place.tooltip":"接続中のRobloxプレイス名とプレイスIDです。","sync.status.path":"パス","sync.status.path.tooltip":"現在同期出力に使っているローカルファイルシステムのルートです。","sync.status.instances":"インスタンス","sync.status.instances.tooltip":"ローカルミラーで追跡中の同期済みRobloxインスタンス総数です。","sync.status.scripts":"スクリプト","sync.status.scripts.tooltip":"このプレイスで現在インデックスされている同期スクリプトファイル数です。","sync.status.state":"状態","sync.status.state.tooltip":"サーバーが報告した現在の同期ランタイム状態です。","sync.directions.title":"同期方向","sync.directions.title.tooltip":"LocalとStudioの間のカテゴリ別同期方向と適用方法です。","sync.directions.type":"タイプ","sync.directions.type.tooltip":"このルールが適用される同期カテゴリです。","sync.directions.direction":"方向","sync.directions.direction.tooltip":"各カテゴリがStudioから、Studioへ、または双方向で同期されるかを示します。","sync.directions.applyMode":"適用モード","sync.directions.applyMode.tooltip":"このカテゴリに届く同期変更の適用方法です。","sync.directions.cat.scripts":"スクリプト","sync.directions.cat.values":"値","sync.directions.cat.containers":"コンテナ","sync.directions.cat.data":"データ","sync.directions.cat.services":"サービス","sync.directions.endpoint.local":"Local","sync.directions.endpoint.local.tooltip":"方向レールの左側は常にディスク上のローカルファイルです。","sync.directions.endpoint.studio":"Studio","sync.directions.endpoint.studio.tooltip":"方向レールの右側は常にRoblox Studioです。","sync.directions.mode.manual":"手動","sync.directions.mode.manual.tooltip":"手動で実行したときだけ同期変更を適用します。","sync.directions.mode.auto":"自動","sync.directions.mode.auto.tooltip":"更新を受け取ると同期変更を自動で適用します。","sync.directions.tooltip.forward.body":"Studioの変更をローカルファイルのみに同期します","sync.directions.tooltip.bidirectional.body":"LocalとStudioの間で双方向同期を行います","sync.directions.tooltip.reverse.body":"ローカルファイルの変更をStudioへ反映します","sync.directions.tooltip.proRequired":"BasicティアではProが必要です","sync.directions.dir.forward":"順方向","sync.directions.dir.bidirectional":"双方向","sync.directions.dir.reverse":"逆方向","sync.log.title":"同期ログ","sync.log.empty":"同期イベントなし","sync.log.type.write":"書き込み","sync.log.type.write.tooltip":"新しい同期出力がディスクに書き込まれました。","sync.log.type.update":"更新","sync.log.type.update.tooltip":"既存の同期ファイルまたはインスタンスが更新されました。","sync.log.type.delete":"削除","sync.log.type.delete.tooltip":"同期済みファイルまたはインスタンスが削除されました。","sync.log.type.idle":"待機","sync.log.type.idle.tooltip":"ファイル変更なしで同期イベントのみ記録されました。","sync.upgrade.title":"Proで完全な同期機能を解放","sync.upgrade.benefit1":"双方向同期 — ファイルを編集するとStudioに自動反映","sync.upgrade.benefit2":"逆方向同期 — ファイルの変更をStudioに送信","sync.upgrade.benefit3":"完全な同期履歴と詳細な変更ログ","sync.upgrade.buy":"Proにアップグレード","playtest.status.title":"プレイテストステータス","playtest.status.title.tooltip":"Studio が報告した現在の Roblox プレイテストセッション状態です。","playtest.status.mode":"モード","playtest.status.mode.tooltip":"現在のセッションで使われている Studio プレイテスト起動モードです。","playtest.status.mode.value.tooltip":"現在使用中の Roblox Studio プレイテストモードの具体的な値です。","playtest.status.mode.play":"プレイ","playtest.status.mode.run":"実行","playtest.status.mode.server":"サーバー","playtest.status.mode.edit":"編集","playtest.status.place.tooltip":"このプレイテストセッションに関連付けられた Roblox プレイスです。","playtest.status.state.running":"実行中","playtest.status.state.running.tooltip":"現在 Roblox プレイテストセッションが実行中です。","playtest.status.state.paused":"一時停止","playtest.status.state.paused.tooltip":"現在の Roblox プレイテストセッションは一時停止中です。","playtest.status.state.notRunning":"未実行","playtest.status.state.notRunning.tooltip":"現在実行中の Roblox プレイテストセッションはありません。","playtest.control.play":"プレイ","playtest.control.pause":"一時停止","playtest.control.resume":"再開","playtest.control.stop":"停止","playtest.history.title":"テスト履歴","playtest.history.title.tooltip":"このプロジェクトで記録された自動プレイテスト実行履歴です。","playtest.history.empty":"テスト結果なし","playtest.history.mode":"モード","playtest.history.mode.tooltip":"この記録済みテスト実行で使われたプレイテストモードです。","playtest.history.status.passed":"成功","playtest.history.status.failed":"失敗","playtest.history.status.running":"実行中","playtest.history.status.unknown":"不明","playtest.history.status.tooltip":"この自動プレイテスト実行で記録された結果状態です。","playtest.empty.title":"プレイテスト結果がありません","playtest.empty.message":"AIエージェントがsystem_info.run_testで自動テストを実行すると結果が表示されます。","playtest.empty.message.before":"AIエージェントが自動テストを","playtest.empty.message.after":"で実行すると結果がここに表示されます。","playtest.empty.runTest.tooltip":"system_info ツール経由で Roblox プレイテスト検証を実行するWEPPY Dashboardの自動化入口です。","playtest.report.title":"選択されたレポート","playtest.report.title.tooltip":"現在選択されている自動プレイテスト実行の詳細出力です。","playtest.report.content":"レポート","playtest.report.content.tooltip":"選択された自動プレイテスト実行の Markdown 要約です。","playtest.report.logs":"ログ","playtest.report.logs.tooltip":"選択された自動プレイテスト実行で収集された実行ログです。","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"レポート内容なし","playtest.basic.icon":"🎮","playtest.basic.title":"プレイテストはPro専用機能です","playtest.basic.desc":"WEPPY Dashboardからプレイテストを制御し、自動テストを実行し、詳細なテストレポートを確認できます。","playtest.basic.benefit1":"ワンクリックのプレイ/一時停止/停止コントロール","playtest.basic.benefit2":"AIエージェントによる自動テスト実行","playtest.basic.benefit3":"成功/失敗追跡付きテスト履歴","playtest.basic.benefit4":"詳細なマークダウンテストレポート","playtest.sample.badge":"Proプレイテスト画面のプレビュー","playtest.sample.title":"現在表示しているのは、Proにアップグレード後に利用できるプレイテスト画面のプレビューです。","playtest.sample.message":"このプレビューはサンプルデータを使用しています。ライブのプレイテスト操作、履歴管理、実際のレポート保存はPro購入後に利用できます。","playtest.sample.clearDisabled":"実際のプレイテスト履歴の削除はProで利用できます。","playtest.sample.place":"アリーナプレビュー","playtest.sample.history.name":"サンプルアリーナスモークテスト","playtest.sample.context.why":"アリーナにスポーンし、開始直後を生き残り、HUDがすぐ反応するか確認します。","playtest.sample.context.expected":"プレイヤーが安全にスポーンし、1秒以内にカウントダウンUIが表示され、最初のウェーブがエラーなく始まること。","playtest.sample.context.observed":"スポーン保護が正常に動作し、HUDは時間どおり更新され、最初のウェーブは回帰なく完了しました。","playtest.sample.report.markdown":`# サンプルアリーナスモークテスト
110
110
 
111
111
  - スポーンフロー: PASS
112
112
  - HUDカウントダウン: PASS
@@ -116,7 +116,7 @@ Isto é uma prévia de amostra. Faça upgrade para Pro para executar playtests a
116
116
  [sample] スポーン保護有効
117
117
  [sample] hudカウントダウン描画
118
118
  [sample] 第1ウェーブ完了
119
- [sample] プレビュー報告終了`,"sidebar.whatsNew":"新着情報","header.whatsNew":"新着情報","header.whatsNew.tooltip":"新着情報","whatsNew.pageTitle":"新着情報","whatsNew.pageSubtitle":"MCPの最新変更をチェック","whatsNew.unreadSection":"未読","whatsNew.allSection":"すべてのお知らせ","whatsNew.empty":"お知らせはまだありません","whatsNew.newBadge":"NEW","whatsNew.category.release":"リリース","whatsNew.category.notice":"お知らせ","whatsNew.category.deprecation":"非推奨","whatsNew.category.tip":"ヒント"},Rm={"sidebar.overview":"Ringkasan","sidebar.changelog":"Riwayat","sidebar.connection":"Koneksi","sidebar.sync":"Sinkronisasi","sidebar.playtest":"Playtest","sidebar.tools":"Alat","sidebar.settings":"Pengaturan","header.currentProject":"Proyek saat ini","header.unknownProject":"Proyek tidak dikenal","header.projectRoot.label":"Project Root","header.currentProject.loading":"Memuat project root...","header.currentProject.unavailable":"Project root tidak tersedia","header.placeNotConnected":"Place belum terhubung","header.currentProject.tooltip":"Folder proyek yang sedang dipilih.","header.currentProject.loading.tooltip":"Informasi project root masih dimuat.","header.currentProject.unavailable.tooltip":"Informasi project root saat ini tidak tersedia.","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Memuat sync root...","header.currentProjectSyncRoot.unavailable":"Sync root tidak tersedia","header.currentProjectSyncRoot.tooltip":"Folder sync root saat ini untuk proyek yang dipilih.","header.currentProjectSyncRoot.loading.tooltip":"Informasi sync root masih dimuat.","header.currentProjectSyncRoot.unavailable.tooltip":"Informasi sync root saat ini tidak tersedia.","header.testFiles.label":"Test Files","header.testFiles.unavailable":"Path file test tidak tersedia.","header.testFiles.tooltip":"Direktori file playtest saat ini untuk place yang dipilih.","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"Koneksi plugin diperlukan","header.places.liveRequired":"Koneksi plugin diperlukan untuk melihat place aktif secara live.","header.place.tooltip":"Place Roblox yang terhubung.","header.placeNotConnected.tooltip":"Place belum terhubung","header.changeProjectRoot":"Ubah project root","header.changeProjectRoot.ariaLabel":"Ubah project root","header.changeProjectRoot.tooltip":"Ubah project root saat ini.","header.changeProjectRoot.disabledTooltip.l0":"Koneksi server MCP diperlukan terlebih dahulu sebelum project root bisa diubah.","header.changeProjectRoot.disabledTooltip.loading":"Informasi project root masih dimuat.","header.changeProjectRoot.disabledTooltip.unavailable":"Informasi project root saat ini tidak tersedia.","header.projectRootModal.initial.title":"Ubah project root","header.projectRootModal.initial.body.connected":"Setelah Anda memilih folder proyek, MCP akan beralih ke project root baru dan konten Studio saat ini akan disinkronkan ulang sepenuhnya ke target baru <selected project folder>/weppy-project-sync.","header.projectRootModal.initial.body.disconnected":"Setelah Anda memilih folder proyek, MCP akan beralih ke project root baru dan menggunakan <selected project folder>/weppy-project-sync sebagai target sync berikutnya.","header.projectRootModal.initial.nextSyncRoot":"Target sync baru setelah pemilihan","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"Sync saat ini berhenti seketika.","header.projectRootModal.initial.warningFreshSync":"Konten Studio saat ini akan digunakan untuk membuat fresh full sync di target baru.","header.projectRootModal.initial.warningNoMove":"Folder sync lama tidak dipindahkan secara otomatis.","header.projectRootModal.initial.warningDeferredSync":"Jika Studio belum terhubung, full resync akan dimulai saat plugin terhubung berikutnya.","header.projectRootModal.confirm.title":"Konfirmasi project root baru","header.projectRootModal.confirm.body":"Tinjau folder proyek yang dipilih sebelum menerapkan perubahan.","header.projectRootModal.confirm.projectRoot":"Folder proyek yang dipilih","header.projectRootModal.confirm.syncRoot":"Target sync baru","header.projectRootModal.confirm.warningNoMove":"Folder sync yang ada tidak dipindahkan secara otomatis.","header.projectRootModal.pick":"Pilih folder","header.projectRootModal.apply":"Terapkan perubahan","header.projectRootModal.cancel":"Batal","header.projectRootModal.error":"Gagal mengubah project root.","sidebar.gate.l1":"Koneksi server MCP diperlukan.","sidebar.gate.l2":"Koneksi plugin Roblox Studio diperlukan.","status.online":"Online","status.offline":"Offline","status.idle":"Menunggu","status.syncing":"Menyinkronkan","status.error":"Error","status.initializing":"Menginisialisasi","level.l0.title":"Server terputus","level.l0.message":"WEPPY Dashboard terbuka tetapi server MCP telah berhenti atau tidak merespons.","level.l1.title":"Server terhubung","level.l1.hint":"Periksa: Apakah Roblox Studio berjalan? Apakah plugin terinstal?","level.l2.ok":"Studio terhubung","tier.basic":"Basic","tier.basic.tooltip":"Tier Basic dengan kumpulan fitur WEPPY Dashboard standar.","tier.pro":"Pro","tier.pro.tooltip":"Tier Pro dengan kumpulan fitur WEPPY Dashboard lengkap.","tier.mixed":"Campuran","tier.upgrade":"Upgrade ke Pro","tier.compare":"Basic vs Pro","tier.banner.save":"Hemat token AI dengan Pro!","tier.comparison.comingSoon":"Perbandingan Basic vs Pro — segera hadir","tier.comparison.close":"Tutup","tier.comparison.detailTitle":"Katalog alat detail","tier.comparison.description":"Deskripsi","tier.comparison.basic.core":"Alur kerja MCP dasar","tier.comparison.basic.core.item1":"Buat/edit script","tier.comparison.basic.core.item2":"Manajemen instance","tier.comparison.basic.core.item3":"Kontrol properti","tier.comparison.basic.core.item4":"Seleksi dan pencarian","tier.comparison.basic.core.item5":"Manajemen tag","tier.comparison.basic.core.item6":"Kontrol kamera","tier.comparison.basic.core.item7":"Pemantauan log","tier.comparison.basic.sync":"Sinkronisasi (Basic)","tier.comparison.basic.sync.item1":"Sinkronisasi satu arah dari Studio ke lokal","tier.comparison.basic.sync.item2":"Penerapan manual sebagai default","tier.comparison.pro.all":"Semua di Basic, ditambah","tier.comparison.pro.sync":"Alur sinkronisasi lanjutan","tier.comparison.pro.sync.item1":"Arah sinkronisasi per tipe","tier.comparison.pro.sync.item2":"Mode penerapan per tipe","tier.comparison.pro.sync.item3":"Sinkronisasi dua arah dan terbalik","tier.comparison.pro.sync.item4":"Sinkronisasi penuh, sinkronisasi ulang, dan kirim ke Studio","tier.comparison.pro.sync.item5":"Sinkronisasi multi-tempat","tier.comparison.pro.playtest":"Kontrol playtest","tier.comparison.pro.playtest.item1":"Putar, hentikan, jeda, dan lanjutkan","tier.comparison.pro.playtest.item2":"Inspeksi status playtest","tier.comparison.pro.playtest.item3":"Eksekusi pengujian otomatis","tier.comparison.pro.creation":"Alur pembuatan lanjutan","tier.comparison.pro.creation.item1":"Operasi massal","tier.comparison.pro.creation.item2":"Pembuatan terrain","tier.comparison.pro.creation.item3":"Pencarian dan penyisipan aset","tier.comparison.pro.creation.item4":"Raycast dan analisis spasial","tier.comparison.pro.creation.item5":"Kontrol lingkungan","tier.comparison.discount.label":"🎁 Masukkan kode ini saat checkout Gumroad untuk mendapat diskon:","tier.comparison.discount.code":"WEPPY-MCP","tier.comparison.discount.expiry":"Berlaku hingga 30 April","tier.promo.discount.hint":"🎁 Gunakan kode WEPPY-MCP di Gumroad · Berlaku hingga 30 April","tier.promo.discount.context":"🎁 Masukkan di Gumroad saat checkout:","tier.tool.query_instances.desc":"Kueri instance, jelajahi anak/keturunan, info kelas, cari berdasarkan nama dan kelas. Pro: pohon file, struktur proyek, pencarian berdasarkan properti dan tag.","tier.tool.mutate_instances.desc":"Buat, hapus, klon, pindah, ganti nama, dan pivot instance. Pro: pembuatan pohon, pembuatan/penghapusan/duplikasi massal.","tier.tool.manage_properties.desc":"Lihat dan atur properti, atribut, dan tag. Pro: nilai kalkulasi dan relatif, lihat/atur massal, modifikasi massal anak.","tier.tool.manage_scripts.desc":"Baca, tulis, buat, hapus, edit baris, dan cari di script. Pro: penggantian massal antar script.","tier.tool.manage_lighting.desc":"Khusus Pro. Pengaturan pencahayaan, atmosfer, langit, properti terrain, dan waktu.","tier.tool.manage_selection.desc":"Lihat, atur, dan hapus seleksi. Pro: konteks, detail, tambah/hapus item, pantau perubahan.","tier.tool.manage_camera.desc":"Info kamera, fokus berdasarkan jalur atau koordinat, saran tampilan.","tier.tool.manage_tween.desc":"Khusus Pro. Buat, putar, jeda, dan batalkan tween untuk animasi halus.","tier.tool.manage_audio.desc":"Khusus Pro. Putar, hentikan, jeda, dan lanjutkan suara. Atur listener audio.","tier.tool.manage_animation.desc":"Khusus Pro. Muat, putar, dan hentikan animasi. Lihat track humanoid/pengontrol.","tier.tool.manage_physics.desc":"Khusus Pro. Daftarkan grup tabrakan, atur tabrakan antar grup, daftar grup.","tier.tool.manage_effects.desc":"Khusus Pro. Pancarkan partikel, hapus semua, aktifkan/nonaktifkan efek.","tier.tool.manage_terrain.desc":"Khusus Pro. Isi bentuk, hapus wilayah, ganti material, kelola warna, baca/tulis voxel, pembuatan prosedural, pemulusan.","tier.tool.spatial_query.desc":"Khusus Pro. Raycast, cari tanah, periksa penempatan, pindai area, cari area datar dan titik spawn, analisis kemampuan jalan, peta spasial, deteksi tabrakan.","tier.tool.manage_assets.desc":"Khusus Pro. Sisipkan model, lihat info aset, cari di toko kreator, sisipkan model/paket gratis, ekspor.","tier.tool.manage_sync.desc":"Khusus Pro. Status sinkronisasi, konfigurasi, riwayat, arah, baca/tulis file tersinkronisasi.","tier.tool.workspace_state.desc":"Khusus Pro. Sinkronisasi penuh, snapshot, perubahan terbaru, info viewport, metadata, manajemen cache.","tier.tool.manage_logs.desc":"Kueri log terfilter, polling inkremental, hapus buffer, kueri error terbaru.","tier.tool.system_info.desc":"Status koneksi, verifikasi tier. Pro: info tempat, daftar layanan, pengaturan Studio, kontrol playtest, pengujian otomatis.","tier.tool.batch_execute.desc":"Khusus Pro. Eksekusi beberapa perintah sekaligus. Pemrosesan berurutan dengan opsi lanjut saat error.","tier.tool.execute_luau.desc":"Khusus Pro. Jalankan kode Luau di sandbox Roblox Studio.","connection.server.title":"Status Server","connection.server.version":"Versi","connection.server.version.tooltip":"Versi server MCP yang terpasang.","connection.server.pid":"PID","connection.server.pid.tooltip":"Pengenal proses dari sistem operasi.","connection.server.uptime":"Waktu aktif","connection.server.uptime.tooltip":"Waktu yang berlalu sejak server MCP dimulai.","connection.server.session":"Sesi","connection.server.session.tooltip":"Pengenal sesi MCP saat ini.","connection.server.exec":"Eksekutabel","connection.server.exec.tooltip":"Path eksekutabel yang digunakan untuk menjalankan server MCP.","connection.reconnect":"Hubungkan ulang","connection.checkSettings":"Periksa pengaturan","connection.agents.title":"Agen AI","connection.agents.name":"Agen","connection.agents.cwd":"Direktori kerja","connection.agents.cwd.tooltip":"Direktori kerja saat ini milik agen AI yang terhubung.","connection.agents.projectRoot":"Root Proyek","connection.agents.projectRoot.tooltip":"Jalur proyek otoritatif untuk kepemilikan sinkronisasi","connection.agents.projectRoot.unresolved":"Belum terselesaikan","connection.agents.connected":"Terhubung","connection.agents.unknown":"Tidak diketahui","connection.agents.none":"Tidak ada agen terhubung","connection.plugins.title":"Plugin","connection.plugins.place":"Place","connection.plugins.clientId":"ID Klien","connection.plugins.clientId.tooltip":"Pengenal unik klien plugin untuk koneksi Studio ini.","connection.plugins.lastSeen":"Terakhir terlihat","connection.plugins.lastSeen.tooltip":"Heartbeat terbaru yang diterima dari plugin.","connection.plugins.version":"Versi","connection.plugins.version.tooltip":"Versi plugin terpasang yang dilaporkan oleh Studio.","connection.plugins.none":"Tidak ada plugin terhubung","connection.log.title":"Log Koneksi","connection.log.empty":"Belum ada event","connection.time.secondsAgo":"dtk lalu","connection.time.minutesAgo":"mnt lalu","connection.time.hoursAgo":"jam lalu","common.loading":"Memuat...","common.retry":"Coba lagi","common.reconnecting":"Menghubungkan ulang...","common.expand":"Perluas","common.collapse":"Ciutkan","tools.tab.history":"Riwayat","tools.tab.statistics":"Statistik","tools.tab.failures":"Kegagalan","tools.col.time":"Waktu","tools.col.time.tooltip":"Waktu ketika eksekusi alat dicatat.","tools.col.toolAction":"Alat.Aksi","tools.col.toolAction.tooltip":"Nama alat dan aksi yang dijalankan.","tools.col.duration":"Durasi","tools.col.duration.tooltip":"Berapa lama alat menyelesaikan eksekusi.","tools.col.status":"Status","tools.col.status.tooltip":"Hasil dari eksekusi alat yang tercatat.","tools.col.tier":"Tier","tools.col.tier.tooltip":"Tier lisensi yang dibutuhkan untuk alat atau aksi ini.","tools.col.tierStats.tooltip":"Ringkasan Basic, Pro, atau Mixed untuk baris statistik alat ini.","tools.col.tool":"Alat","tools.col.tool.tooltip":"Nama alat konsolidasi pada tabel statistik.","tools.col.calls":"Panggilan","tools.col.calls.tooltip":"Jumlah total panggilan yang tercatat untuk alat ini.","tools.col.ok":"OK","tools.col.ok.tooltip":"Jumlah eksekusi sukses langsung.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"Jumlah eksekusi yang berhasil melalui fallback.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"Jumlah eksekusi yang diblokir tanpa fallback.","tools.col.err":"GAGAL","tools.col.err.tooltip":"Jumlah eksekusi yang berakhir gagal.","tools.col.okRate":"% Sukses","tools.col.okRate.tooltip":"Persentase panggilan yang selesai dengan sukses.","tools.col.avgTime":"Waktu rata-rata","tools.col.avgTime.tooltip":"Rata-rata waktu eksekusi dari panggilan yang tercatat.","tools.col.error":"Error","tools.filter.tool":"Alat","tools.filter.all":"Semua","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"Entri ini menggunakan alat atau aksi khusus Pro.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"Aksi Pro yang diminta berhasil melalui fallback Basic.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"Aksi Pro yang diminta diblokir dan tidak ada fallback yang dijalankan.","tools.badge.err":"GAGAL","tools.badge.err.tooltip":"Eksekusi alat berakhir gagal.","tools.status.ok":"OK","tools.status.ok.tooltip":"Eksekusi alat selesai dengan sukses.","tools.tier.mixed.tooltip":"Alat ini memiliki campuran aksi Basic dan Pro.","tools.detail.params":"Parameter","tools.detail.params.tooltip":"Parameter input yang dikirim pada eksekusi alat ini.","tools.detail.result":"Hasil","tools.detail.result.tooltip":"Payload hasil yang dikembalikan dari eksekusi alat ini.","tools.detail.requestedCommand":"Perintah diminta","tools.detail.executedCommand":"Perintah dijalankan","tools.detail.alternatives":"Alternatif","tools.detail.blockedMessage":"Alasan diblokir","tools.detail.noFallback":"Tanpa fallback","tools.detail.noFallback.value":"Tidak ada fallback yang dijalankan.","tools.detail.errorMessage":"Pesan error","tools.clear.history.title":"Hapus riwayat?","tools.clear.history.message":"Tindakan ini akan menghapus permanen riwayat alat untuk place saat ini.","tools.clear.statistics.title":"Hapus statistik?","tools.clear.statistics.message":"Tindakan ini akan mereset permanen statistik alat untuk place saat ini.","tools.detail.error":"Error","tools.page.prev":"Sebelumnya","tools.page.prev.tooltip":"Pindah ke halaman sebelumnya pada riwayat alat.","tools.page.next":"Selanjutnya","tools.page.next.tooltip":"Pindah ke halaman berikutnya pada riwayat alat.","tools.empty.history":"Tidak ada entri riwayat","tools.empty.stats":"Tidak ada statistik alat","tools.empty.failures":"Tidak ada kegagalan","tools.summary.total":"Total","tools.summary.calls":"panggilan","tools.summary.sessions":"Sesi","settings.license.title":"Lisensi","settings.license.title.tooltip":"Status lisensi dan tier langganan saat ini.","settings.license.status":"Status","settings.license.status.tooltip":"Status aktivasi lisensi saat ini.","settings.license.tier":"Tier","settings.license.tier.tooltip":"Tier langganan saat ini untuk fitur WEPPY Dashboard yang tersedia.","settings.license.key":"Kunci","settings.license.key.tooltip":"Kunci lisensi tersamarkan yang saat ini dimuat oleh server.","settings.license.keyValue.tooltip":"Kunci lisensi tersamarkan yang saat ini dimuat oleh server.","settings.license.provider":"Penyedia","settings.license.provider.tooltip":"Penyedia lisensi yang digunakan untuk memvalidasi kunci ini.","settings.license.providerValue.tooltip":"Penyedia lisensi yang digunakan untuk memvalidasi kunci ini.","settings.license.active":"Aktif","settings.license.active.tooltip":"Status aktivasi lisensi saat ini.","settings.license.status.activeCancelPending.tooltip":"Pembatalan sedang menunggu, tetapi akses Pro tetap aktif hingga periode penagihan saat ini berakhir.","settings.license.inactive":"Tidak aktif","settings.license.inactive.tooltip":"Status aktivasi lisensi saat ini.","settings.license.expired":"Kedaluwarsa","settings.license.expired.tooltip":"Status aktivasi lisensi saat ini.","settings.license.unavailable":"Info lisensi tidak tersedia","settings.license.detail.cancelPending":"Pembatalan telah dijadwalkan. Akses Pro tetap aktif hingga periode penagihan saat ini berakhir.","settings.license.reset":"Reset Lisensi","settings.readOnly":"Hanya baca","settings.readOnly.tooltip":"Bagian ini menampilkan nilai yang tidak bisa diedit dari WEPPY Dashboard.","settings.unavailable":"Pengaturan tidak tersedia","settings.general.title":"Pengaturan umum","settings.general.title.tooltip":"Pengaturan panas yang langsung diterapkan saat diubah.","settings.general.liveApply":"Terapkan langsung","settings.general.liveApply.tooltip":"Perubahan di bagian ini langsung diterapkan tanpa tombol simpan terpisah.","settings.general.applied":"Diterapkan","settings.general.logLevel":"Level log","settings.general.logLevel.tooltip":"Menetapkan seberapa detail WEPPY Dashboard menulis lognya.","settings.general.localHistory":"Perekaman riwayat alat","settings.general.localHistory.tooltip":"Menyimpan riwayat eksekusi alat lokal untuk tampilan riwayat WEPPY Dashboard.","settings.general.localStatistics":"Pengumpulan statistik alat","settings.general.localStatistics.tooltip":"Mengumpulkan statistik penggunaan lokal untuk pelaporan WEPPY Dashboard.","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WEPPY Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"Batas waktu permintaan","settings.general.requestTimeout.tooltip":"Waktu maksimum WEPPY Dashboard menunggu permintaan sebelum dianggap gagal.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"Batas waktu permintaan diukur dalam milidetik.","settings.cold.title":"Lingkungan server","settings.cold.title.tooltip":"Nilai lingkungan server hanya-baca yang dimuat saat startup.","settings.cold.httpPort.tooltip":"Nomor port yang digunakan oleh server HTTP WEPPY Dashboard MCP.","settings.cold.httpHost.tooltip":"Antarmuka host yang diikat oleh server HTTP WEPPY Dashboard MCP.","settings.cold.dashboardAutoOpen.tooltip":"Mengontrol apakah WEPPY Dashboard terbuka otomatis di browser saat server dimulai.","settings.cold.dashboardAutoOpen.value.tooltip":"Perilaku startup saat ini untuk membuka WEPPY Dashboard di browser.","settings.cold.hint":"Atur melalui variabel lingkungan.","settings.language.title":"Bahasa","settings.language.title.tooltip":"Pilih cara teks antarmuka WEPPY Dashboard dilokalkan.","settings.language.dashboard":"Bahasa WEPPY Dashboard","settings.language.dashboard.tooltip":"Mengganti bahasa WEPPY Dashboard atau mengikuti bahasa sistem saat disetel ke Otomatis.","settings.language.auto":"Otomatis","overview.l0.title":"Server MCP terputus","overview.l0.message":"Server MCP tidak merespons. WEPPY Dashboard akan mencoba menghubungkan ulang secara otomatis.","overview.l0.step1":"Periksa apakah proses server MCP sedang berjalan","overview.l0.step2":"Mulai ulang perintah server MCP jika diperlukan","overview.l0.reconnecting":"Menghubungkan ulang otomatis setiap 3 detik...","overview.l0.reconnectBtn":"Hubungkan ulang","overview.l0.settingsBtn":"Periksa pengaturan","overview.l1.pluginGuide":"Plugin Roblox Studio tidak terhubung","overview.l1.check1":"Apakah Roblox Studio sedang berjalan?","overview.l1.check2":"Apakah WEPPY Plugin sudah terinstal?","overview.l1.feedHint":"Perubahan akan muncul di sini setelah plugin terhubung","overview.metric.server":"Server","overview.metric.server.tooltip":"Status runtime dan proses server MCP.","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Status koneksi dan versi plugin Roblox Studio.","overview.metric.agent":"Agen","overview.metric.agent.tooltip":"Agen coding AI yang terhubung dan status runtime-nya.","overview.metric.agent.instancesUnit":"instansi","overview.metric.sync":"Sinkronisasi","overview.metric.sync.tooltip":"Aktivitas sinkronisasi saat ini antara Studio dan file lokal.","overview.metric.noAgent":"Tidak ada agen","overview.meta.version":"Versi","overview.meta.version.tooltip":"Versi server MCP yang terpasang.","overview.meta.session":"Sesi","overview.meta.session.tooltip":"Pengenal sesi MCP saat ini.","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Pengenal proses dari sistem operasi.","overview.meta.uptime":"Waktu aktif","overview.meta.uptime.tooltip":"Waktu yang berlalu sejak server MCP dimulai.","overview.feed.title":"Perubahan game terbaru","overview.feed.empty":"Tidak ada perubahan terbaru","overview.changelog.title":"Ringkasan perubahan sesi","overview.changelog.entries":"Total","overview.changelog.scripts":"skrip","overview.changelog.instances":"instansi","overview.changelog.properties":"properti","overview.changelog.assets":"aset","overview.tier.title":"Penggunaan tier","changelog.subtitle":"Riwayat perubahan game","changelog.filter.all":"Semua","changelog.filter.active":"Aktif","changelog.filter.completed":"Selesai","changelog.empty":"Belum ada entri riwayat","changelog.basic.limit.title":"Pratinjau Basic hanya menampilkan 3 sesi terbaru","changelog.basic.limit.body":"Upgrade ke Pro untuk melihat timeline changelog lengkap untuk place ini.","changelog.basic.metricLabel":"Changelog terlihat / Total","changelog.basic.visible":"terlihat","changelog.basic.total":"total","changelog.card.active":"Aktif","changelog.card.active.tooltip":"Sesi ini masih menerima perubahan game baru.","changelog.card.completed":"Selesai","changelog.card.completed.tooltip":"Sesi ini sudah berakhir dan tidak ada perubahan baru yang diharapkan.","changelog.card.bootstrapStatus":"Inisialisasi","changelog.card.bootstrapStatus.tooltip":"Sesi ini hanya berisi snapshot bootstrap sinkronisasi awal.","changelog.card.inProgress":"sedang berlangsung","changelog.card.noChanges":"Belum ada perubahan","changelog.card.noChanges.tooltip":"Belum ada perubahan game yang diekstrak untuk sesi ini.","changelog.card.bootstrapSummary":"Snapshot sinkronisasi awal","changelog.card.bootstrapSummary.tooltip":"Penulisan sinkronisasi file awal diringkas menjadi satu baris snapshot bootstrap.","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"skrip","changelog.card.scripts.tooltip":"Perubahan skrip yang terjadi di sesi ini.","changelog.card.instances":"instansi","changelog.card.instances.tooltip":"Perubahan pembuatan, penghapusan, pemindahan, atau kloning instansi di sesi ini.","changelog.card.modified":"diubah","changelog.card.created":"dibuat","changelog.card.deleted":"dihapus","changelog.card.moved":"dipindahkan","changelog.card.propertiesChanged":"properti diubah","changelog.card.propertiesChanged.tooltip":"Perubahan nilai properti yang tercatat untuk sesi ini.","changelog.card.lightingConfigured":"Pencahayaan dikonfigurasi","changelog.card.lightingConfigured.tooltip":"Pencahayaan atau pengaturan atmosfer berubah di sesi ini.","changelog.card.terrainConfigured":"Terrain dikonfigurasi","changelog.card.terrainConfigured.tooltip":"Data terrain atau pengaturan terrain berubah di sesi ini.","changelog.card.assetsInserted":"aset disisipkan","changelog.card.assetsInserted.tooltip":"Aset yang dimasukkan ke place selama sesi ini.","changelog.category.script":"Skrip","changelog.category.instance":"Instansi","changelog.category.property":"Properti","changelog.category.lighting":"Pencahayaan","changelog.category.terrain":"Terrain","changelog.category.asset":"Aset","changelog.detail.changeSummary":"Ringkasan perubahan","changelog.detail.changeSummary.tooltip":"Jumlah perubahan game yang diekstrak dan dikelompokkan per kategori untuk sesi ini.","changelog.detail.changeTimeline":"Timeline perubahan","changelog.detail.changeTimeline.tooltip":"Daftar kronologis perubahan game yang diekstrak untuk sesi ini.","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"Sebelum & Sesudah","changelog.detail.filterCategory":"Kategori","changelog.detail.filterCategory.tooltip":"Filter timeline ke satu kategori perubahan.","changelog.detail.confidence.exact":"Tepat","changelog.detail.confidence.exact.tooltip":"Status sebelum dan sesudah perubahan ini sama-sama terkonfirmasi.","changelog.detail.confidence.partial":"Parsial","changelog.detail.confidence.partial.tooltip":"Hanya sebagian status sebelum dan sesudah perubahan ini yang bisa dikonfirmasi.","changelog.detail.confidence.afterOnly":"Hanya sesudah","changelog.detail.confidence.afterOnly.tooltip":"Hanya status hasil setelah perubahan yang bisa dikonfirmasi.","changelog.detail.confidence.intentOnly":"Hanya niat","changelog.detail.confidence.intentOnly.tooltip":"Hanya aksi yang diminta yang tercatat, bukan status hasilnya.","changelog.detail.confidence.unknown":"Tidak diketahui","changelog.detail.confidence.unknown.tooltip":"Perubahan ini tidak dapat diklasifikasikan dengan yakin dari data yang tersedia.","changelog.detail.noChanges":"Tidak ada perubahan di kategori ini","changelog.detail.backToList":"Kembali ke daftar","changelog.diff.empty":"Tidak ada perbedaan","changelog.diff.unified":"Terpadu","changelog.diff.sideBySide":"Berdampingan","changelog.diff.before":"Sebelum","changelog.diff.after":"Sesudah","sync.overlay.title":"Plugin Roblox Studio diperlukan","sync.overlay.message":"Status sinkronisasi akan tersedia setelah plugin Roblox Studio terhubung.","sync.overlay.check1":"Apakah Roblox Studio sedang berjalan?","sync.overlay.check2":"Apakah WEPPY Plugin sudah terinstal?","sync.status.title":"Status sinkronisasi","sync.status.title.tooltip":"Status sinkronisasi Studio dan file lokal untuk place ini.","sync.status.forwardOnly":"Hanya maju","sync.status.forwardOnly.tooltip":"Tier Basic hanya mengizinkan sinkronisasi maju dari Studio ke lokal.","sync.status.place":"Place","sync.status.place.tooltip":"Nama place Roblox yang terhubung beserta ID place-nya.","sync.status.path":"Path","sync.status.path.tooltip":"Root sistem file lokal yang saat ini dipakai untuk output sinkronisasi.","sync.status.instances":"Instansi","sync.status.instances.tooltip":"Jumlah total instance Roblox yang disinkronkan di mirror lokal.","sync.status.scripts":"Skrip","sync.status.scripts.tooltip":"Jumlah total file skrip yang saat ini diindeks untuk place ini.","sync.status.state":"Status","sync.status.state.tooltip":"Status runtime sinkronisasi saat ini yang dilaporkan server.","sync.directions.title":"Arah sinkronisasi","sync.directions.title.tooltip":"Arah sinkronisasi per kategori dan cara penerapannya antara Local dan Studio.","sync.directions.type":"Tipe","sync.directions.type.tooltip":"Kategori sinkronisasi yang dipengaruhi aturan ini.","sync.directions.direction":"Arah","sync.directions.direction.tooltip":"Menunjukkan apakah tiap kategori sinkron dari Studio, ke Studio, atau dua arah.","sync.directions.applyMode":"Mode penerapan","sync.directions.applyMode.tooltip":"Cara perubahan sinkronisasi masuk diterapkan untuk kategori ini.","sync.directions.cat.scripts":"Skrip","sync.directions.cat.values":"Nilai","sync.directions.cat.containers":"Kontainer","sync.directions.cat.data":"Data","sync.directions.cat.services":"Layanan","sync.directions.endpoint.local":"Local","sync.directions.endpoint.local.tooltip":"File lokal di disk selalu ditampilkan di sisi kiri rel arah.","sync.directions.endpoint.studio":"Studio","sync.directions.endpoint.studio.tooltip":"Roblox Studio selalu ditampilkan di sisi kanan rel arah.","sync.directions.mode.manual":"Manual","sync.directions.mode.manual.tooltip":"Menerapkan perubahan sinkronisasi hanya saat Anda memicunya secara manual.","sync.directions.mode.auto":"Otomatis","sync.directions.mode.auto.tooltip":"Menerapkan perubahan sinkronisasi otomatis saat pembaruan datang.","sync.directions.tooltip.forward.body":"Perubahan dari Studio hanya disinkronkan ke file lokal","sync.directions.tooltip.bidirectional.body":"Sinkronisasi dua arah antara Local dan Studio","sync.directions.tooltip.reverse.body":"Dorong perubahan file lokal ke Studio","sync.directions.tooltip.proRequired":"Pro diperlukan pada tier Basic","sync.directions.dir.forward":"maju","sync.directions.dir.bidirectional":"dua arah","sync.directions.dir.reverse":"mundur","sync.log.title":"Log sinkronisasi","sync.log.empty":"Tidak ada event sinkronisasi","sync.log.type.write":"TULIS","sync.log.type.write.tooltip":"Output sinkronisasi baru ditulis ke disk.","sync.log.type.update":"PERBARUI","sync.log.type.update.tooltip":"File atau instance yang sudah tersinkron diperbarui.","sync.log.type.delete":"HAPUS","sync.log.type.delete.tooltip":"File atau instance tersinkron telah dihapus.","sync.log.type.idle":"IDLE","sync.log.type.idle.tooltip":"Event sinkronisasi dicatat tanpa perubahan file.","sync.upgrade.title":"Buka fitur sinkronisasi penuh dengan Pro","sync.upgrade.benefit1":"Sinkronisasi dua arah — edit file, otomatis diterapkan ke Studio","sync.upgrade.benefit2":"Sinkronisasi mundur — kirim perubahan file ke Studio","sync.upgrade.benefit3":"Riwayat sinkronisasi lengkap dan log perubahan detail","sync.upgrade.buy":"Upgrade ke Pro","playtest.status.title":"Status playtest","playtest.status.title.tooltip":"Status sesi playtest Roblox saat ini yang dilaporkan oleh Studio.","playtest.status.mode":"Mode","playtest.status.mode.tooltip":"Mode peluncuran playtest Studio untuk sesi saat ini.","playtest.status.mode.value.tooltip":"Mode playtest Roblox Studio spesifik yang sedang dipakai saat ini.","playtest.status.mode.play":"Main","playtest.status.mode.run":"Jalankan","playtest.status.mode.server":"Server","playtest.status.mode.edit":"Edit","playtest.status.place.tooltip":"Place Roblox yang saat ini terkait dengan sesi playtest ini.","playtest.status.state.running":"Berjalan","playtest.status.state.running.tooltip":"Sesi playtest Roblox saat ini sedang berjalan.","playtest.status.state.paused":"Dijeda","playtest.status.state.paused.tooltip":"Sesi playtest Roblox saat ini sedang dijeda.","playtest.status.state.notRunning":"Tidak berjalan","playtest.status.state.notRunning.tooltip":"Saat ini tidak ada sesi playtest Roblox yang sedang berjalan.","playtest.control.play":"Main","playtest.control.pause":"Jeda","playtest.control.resume":"Lanjutkan","playtest.control.stop":"Berhenti","playtest.history.title":"Riwayat tes","playtest.history.title.tooltip":"Riwayat eksekusi playtest otomatis yang tercatat untuk proyek ini.","playtest.history.empty":"Belum ada hasil tes","playtest.history.mode":"Mode","playtest.history.mode.tooltip":"Mode playtest yang digunakan pada eksekusi tes yang tercatat ini.","playtest.history.status.passed":"Berhasil","playtest.history.status.failed":"Gagal","playtest.history.status.running":"Berjalan","playtest.history.status.unknown":"Tidak diketahui","playtest.history.status.tooltip":"Status hasil yang tercatat untuk eksekusi playtest otomatis ini.","playtest.empty.title":"Belum ada hasil playtest","playtest.empty.message":"Hasil akan muncul di sini saat agen AI menjalankan tes otomatis via system_info.run_test.","playtest.empty.message.before":"Hasil akan muncul di sini saat agen AI menjalankan tes otomatis melalui","playtest.empty.message.after":".","playtest.empty.runTest.tooltip":"Titik otomatisasi WEPPY Dashboard yang menjalankan pemeriksaan playtest Roblox melalui tool system_info.","playtest.report.title":"Laporan terpilih","playtest.report.title.tooltip":"Output detail untuk eksekusi playtest otomatis yang sedang dipilih.","playtest.report.content":"Laporan","playtest.report.content.tooltip":"Ringkasan Markdown untuk eksekusi playtest otomatis yang dipilih.","playtest.report.logs":"Log","playtest.report.logs.tooltip":"Log eksekusi yang ditangkap untuk eksekusi playtest otomatis yang dipilih.","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"Tidak ada konten laporan","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest adalah fitur khusus Pro","playtest.basic.desc":"Kontrol playtest dari WEPPY Dashboard, jalankan tes otomatis, dan lihat laporan tes detail.","playtest.basic.benefit1":"Kontrol main/jeda/berhenti sekali klik","playtest.basic.benefit2":"Eksekusi tes otomatis via agen AI","playtest.basic.benefit3":"Riwayat tes dengan pelacakan berhasil/gagal","playtest.basic.benefit4":"Laporan tes detail dalam markdown","playtest.sample.badge":"Pratinjau tampilan playtest Pro","playtest.sample.title":"Anda sedang melihat pratinjau layar playtest yang tersedia setelah upgrade ke Pro.","playtest.sample.message":"Pratinjau ini menggunakan data sampel. Kontrol playtest langsung, pengelolaan riwayat, dan laporan nyata tersedia setelah upgrade ke Pro.","playtest.sample.clearDisabled":"Upgrade ke Pro untuk menghapus riwayat playtest nyata.","playtest.sample.place":"Pratinjau Arena","playtest.sample.history.name":"Sample Arena Smoke Test","playtest.sample.context.why":"Masuk ke arena, bertahan pada fase awal, dan pastikan HUD merespons segera.","playtest.sample.context.expected":"Pemain spawn dengan aman, UI hitung mundur muncul dalam satu detik, dan wave pertama dimulai tanpa error.","playtest.sample.context.observed":"Proteksi spawn bekerja, HUD diperbarui tepat waktu, dan wave pertama selesai tanpa regresi.","playtest.sample.report.markdown":`# Sample Arena Smoke Test
119
+ [sample] プレビュー報告終了`,"sidebar.whatsNew":"新着情報","header.whatsNew":"新着情報","header.whatsNew.tooltip":"新着情報","whatsNew.pageTitle":"新着情報","whatsNew.pageSubtitle":"MCPの最新変更をチェック","whatsNew.unreadSection":"未読","whatsNew.allSection":"すべてのお知らせ","whatsNew.empty":"お知らせはまだありません","whatsNew.newBadge":"NEW","whatsNew.category.release":"リリース","whatsNew.category.notice":"お知らせ","whatsNew.category.deprecation":"非推奨","whatsNew.category.tip":"ヒント"},Cm={"sidebar.overview":"Ringkasan","sidebar.changelog":"Riwayat","sidebar.connection":"Koneksi","sidebar.sync":"Sinkronisasi","sidebar.playtest":"Playtest","sidebar.tools":"Alat","sidebar.settings":"Pengaturan","header.currentProject":"Proyek saat ini","header.unknownProject":"Proyek tidak dikenal","header.projectRoot.label":"Project Root","header.currentProject.loading":"Memuat project root...","header.currentProject.unavailable":"Project root tidak tersedia","header.placeNotConnected":"Place belum terhubung","header.currentProject.tooltip":"Folder proyek yang sedang dipilih.","header.currentProject.loading.tooltip":"Informasi project root masih dimuat.","header.currentProject.unavailable.tooltip":"Informasi project root saat ini tidak tersedia.","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Memuat sync root...","header.currentProjectSyncRoot.unavailable":"Sync root tidak tersedia","header.currentProjectSyncRoot.tooltip":"Folder sync root saat ini untuk proyek yang dipilih.","header.currentProjectSyncRoot.loading.tooltip":"Informasi sync root masih dimuat.","header.currentProjectSyncRoot.unavailable.tooltip":"Informasi sync root saat ini tidak tersedia.","header.testFiles.label":"Test Files","header.testFiles.unavailable":"Path file test tidak tersedia.","header.testFiles.tooltip":"Direktori file playtest saat ini untuk place yang dipilih.","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"Koneksi plugin diperlukan","header.places.liveRequired":"Koneksi plugin diperlukan untuk melihat place aktif secara live.","header.place.tooltip":"Place Roblox yang terhubung.","header.placeNotConnected.tooltip":"Place belum terhubung","header.changeProjectRoot":"Ubah project root","header.changeProjectRoot.ariaLabel":"Ubah project root","header.changeProjectRoot.tooltip":"Ubah project root saat ini.","header.changeProjectRoot.disabledTooltip.l0":"Koneksi server MCP diperlukan terlebih dahulu sebelum project root bisa diubah.","header.changeProjectRoot.disabledTooltip.loading":"Informasi project root masih dimuat.","header.changeProjectRoot.disabledTooltip.unavailable":"Informasi project root saat ini tidak tersedia.","header.projectRootModal.initial.title":"Ubah project root","header.projectRootModal.initial.body.connected":"Setelah Anda memilih folder proyek, MCP akan beralih ke project root baru dan konten Studio saat ini akan disinkronkan ulang sepenuhnya ke target baru <selected project folder>/weppy-project-sync.","header.projectRootModal.initial.body.disconnected":"Setelah Anda memilih folder proyek, MCP akan beralih ke project root baru dan menggunakan <selected project folder>/weppy-project-sync sebagai target sync berikutnya.","header.projectRootModal.initial.nextSyncRoot":"Target sync baru setelah pemilihan","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"Sync saat ini berhenti seketika.","header.projectRootModal.initial.warningFreshSync":"Konten Studio saat ini akan digunakan untuk membuat fresh full sync di target baru.","header.projectRootModal.initial.warningNoMove":"Folder sync lama tidak dipindahkan secara otomatis.","header.projectRootModal.initial.warningDeferredSync":"Jika Studio belum terhubung, full resync akan dimulai saat plugin terhubung berikutnya.","header.projectRootModal.confirm.title":"Konfirmasi project root baru","header.projectRootModal.confirm.body":"Tinjau folder proyek yang dipilih sebelum menerapkan perubahan.","header.projectRootModal.confirm.projectRoot":"Folder proyek yang dipilih","header.projectRootModal.confirm.syncRoot":"Target sync baru","header.projectRootModal.confirm.warningNoMove":"Folder sync yang ada tidak dipindahkan secara otomatis.","header.projectRootModal.pick":"Pilih folder","header.projectRootModal.apply":"Terapkan perubahan","header.projectRootModal.cancel":"Batal","header.projectRootModal.error":"Gagal mengubah project root.","sidebar.gate.l1":"Koneksi server MCP diperlukan.","sidebar.gate.l2":"Koneksi plugin Roblox Studio diperlukan.","status.online":"Online","status.offline":"Offline","status.idle":"Menunggu","status.syncing":"Menyinkronkan","status.error":"Error","status.initializing":"Menginisialisasi","level.l0.title":"Server terputus","level.l0.message":"WEPPY Dashboard terbuka tetapi server MCP telah berhenti atau tidak merespons.","level.l1.title":"Server terhubung","level.l1.hint":"Periksa: Apakah Roblox Studio berjalan? Apakah plugin terinstal?","level.l2.ok":"Studio terhubung","tier.basic":"Basic","tier.basic.tooltip":"Tier Basic dengan kumpulan fitur WEPPY Dashboard standar.","tier.pro":"Pro","tier.pro.tooltip":"Tier Pro dengan kumpulan fitur WEPPY Dashboard lengkap.","tier.mixed":"Campuran","tier.upgrade":"Upgrade ke Pro","tier.compare":"Basic vs Pro","tier.banner.save":"Hemat token AI dengan Pro!","tier.comparison.comingSoon":"Perbandingan Basic vs Pro — segera hadir","tier.comparison.close":"Tutup","tier.comparison.detailTitle":"Katalog alat detail","tier.comparison.description":"Deskripsi","tier.comparison.basic.core":"Alur kerja MCP dasar","tier.comparison.basic.core.item1":"Buat/edit script","tier.comparison.basic.core.item2":"Manajemen instance","tier.comparison.basic.core.item3":"Kontrol properti","tier.comparison.basic.core.item4":"Seleksi dan pencarian","tier.comparison.basic.core.item5":"Manajemen tag","tier.comparison.basic.core.item6":"Kontrol kamera","tier.comparison.basic.core.item7":"Pemantauan log","tier.comparison.basic.sync":"Sinkronisasi (Basic)","tier.comparison.basic.sync.item1":"Sinkronisasi satu arah dari Studio ke lokal","tier.comparison.basic.sync.item2":"Penerapan manual sebagai default","tier.comparison.pro.all":"Semua di Basic, ditambah","tier.comparison.pro.sync":"Alur sinkronisasi lanjutan","tier.comparison.pro.sync.item1":"Arah sinkronisasi per tipe","tier.comparison.pro.sync.item2":"Mode penerapan per tipe","tier.comparison.pro.sync.item3":"Sinkronisasi dua arah dan terbalik","tier.comparison.pro.sync.item4":"Sinkronisasi penuh, sinkronisasi ulang, dan kirim ke Studio","tier.comparison.pro.sync.item5":"Sinkronisasi multi-tempat","tier.comparison.pro.playtest":"Kontrol playtest","tier.comparison.pro.playtest.item1":"Putar, hentikan, jeda, dan lanjutkan","tier.comparison.pro.playtest.item2":"Inspeksi status playtest","tier.comparison.pro.playtest.item3":"Eksekusi pengujian otomatis","tier.comparison.pro.creation":"Alur pembuatan lanjutan","tier.comparison.pro.creation.item1":"Operasi massal","tier.comparison.pro.creation.item2":"Pembuatan terrain","tier.comparison.pro.creation.item3":"Pencarian dan penyisipan aset","tier.comparison.pro.creation.item4":"Raycast dan analisis spasial","tier.comparison.pro.creation.item5":"Kontrol lingkungan","tier.comparison.discount.label":"🎁 Masukkan kode ini saat checkout Gumroad untuk mendapat diskon:","tier.comparison.discount.code":"WEPPY-MCP","tier.comparison.discount.expiry":"Berlaku hingga 30 April","tier.promo.discount.hint":"🎁 Gunakan kode WEPPY-MCP di Gumroad · Berlaku hingga 30 April","tier.promo.discount.context":"🎁 Masukkan di Gumroad saat checkout:","tier.tool.query_instances.desc":"Kueri instance, jelajahi anak/keturunan, info kelas, cari berdasarkan nama dan kelas. Pro: pohon file, struktur proyek, pencarian berdasarkan properti dan tag.","tier.tool.mutate_instances.desc":"Buat, hapus, klon, pindah, ganti nama, dan pivot instance. Pro: pembuatan pohon, pembuatan/penghapusan/duplikasi massal.","tier.tool.manage_properties.desc":"Lihat dan atur properti, atribut, dan tag. Pro: nilai kalkulasi dan relatif, lihat/atur massal, modifikasi massal anak.","tier.tool.manage_scripts.desc":"Baca, tulis, buat, hapus, edit baris, dan cari di script. Pro: penggantian massal antar script.","tier.tool.manage_lighting.desc":"Khusus Pro. Pengaturan pencahayaan, atmosfer, langit, properti terrain, dan waktu.","tier.tool.manage_selection.desc":"Lihat, atur, dan hapus seleksi. Pro: konteks, detail, tambah/hapus item, pantau perubahan.","tier.tool.manage_camera.desc":"Info kamera, fokus berdasarkan jalur atau koordinat, saran tampilan.","tier.tool.manage_tween.desc":"Khusus Pro. Buat, putar, jeda, dan batalkan tween untuk animasi halus.","tier.tool.manage_audio.desc":"Khusus Pro. Putar, hentikan, jeda, dan lanjutkan suara. Atur listener audio.","tier.tool.manage_animation.desc":"Khusus Pro. Muat, putar, dan hentikan animasi. Lihat track humanoid/pengontrol.","tier.tool.manage_physics.desc":"Khusus Pro. Daftarkan grup tabrakan, atur tabrakan antar grup, daftar grup.","tier.tool.manage_effects.desc":"Khusus Pro. Pancarkan partikel, hapus semua, aktifkan/nonaktifkan efek.","tier.tool.manage_terrain.desc":"Khusus Pro. Isi bentuk, hapus wilayah, ganti material, kelola warna, baca/tulis voxel, pembuatan prosedural, pemulusan.","tier.tool.spatial_query.desc":"Khusus Pro. Raycast, cari tanah, periksa penempatan, pindai area, cari area datar dan titik spawn, analisis kemampuan jalan, peta spasial, deteksi tabrakan.","tier.tool.manage_assets.desc":"Khusus Pro. Sisipkan model, lihat info aset, cari di toko kreator, sisipkan model/paket gratis, ekspor.","tier.tool.manage_sync.desc":"Khusus Pro. Status sinkronisasi, konfigurasi, riwayat, arah, baca/tulis file tersinkronisasi.","tier.tool.workspace_state.desc":"Khusus Pro. Sinkronisasi penuh, snapshot, perubahan terbaru, info viewport, metadata, manajemen cache.","tier.tool.manage_logs.desc":"Kueri log terfilter, polling inkremental, hapus buffer, kueri error terbaru.","tier.tool.system_info.desc":"Status koneksi, verifikasi tier. Pro: info tempat, daftar layanan, pengaturan Studio, kontrol playtest, pengujian otomatis.","tier.tool.batch_execute.desc":"Khusus Pro. Eksekusi beberapa perintah sekaligus. Pemrosesan berurutan dengan opsi lanjut saat error.","tier.tool.execute_luau.desc":"Khusus Pro. Jalankan kode Luau di sandbox Roblox Studio.","connection.server.title":"Status Server","connection.server.version":"Versi","connection.server.version.tooltip":"Versi server MCP yang terpasang.","connection.server.pid":"PID","connection.server.pid.tooltip":"Pengenal proses dari sistem operasi.","connection.server.uptime":"Waktu aktif","connection.server.uptime.tooltip":"Waktu yang berlalu sejak server MCP dimulai.","connection.server.session":"Sesi","connection.server.session.tooltip":"Pengenal sesi MCP saat ini.","connection.server.exec":"Eksekutabel","connection.server.exec.tooltip":"Path eksekutabel yang digunakan untuk menjalankan server MCP.","connection.reconnect":"Hubungkan ulang","connection.checkSettings":"Periksa pengaturan","connection.agents.title":"Agen AI","connection.agents.name":"Agen","connection.agents.cwd":"Direktori kerja","connection.agents.cwd.tooltip":"Direktori kerja saat ini milik agen AI yang terhubung.","connection.agents.projectRoot":"Root Proyek","connection.agents.projectRoot.tooltip":"Jalur proyek otoritatif untuk kepemilikan sinkronisasi","connection.agents.projectRoot.unresolved":"Belum terselesaikan","connection.agents.connected":"Terhubung","connection.agents.unknown":"Tidak diketahui","connection.agents.none":"Tidak ada agen terhubung","connection.plugins.title":"Plugin","connection.plugins.place":"Place","connection.plugins.clientId":"ID Klien","connection.plugins.clientId.tooltip":"Pengenal unik klien plugin untuk koneksi Studio ini.","connection.plugins.lastSeen":"Terakhir terlihat","connection.plugins.lastSeen.tooltip":"Heartbeat terbaru yang diterima dari plugin.","connection.plugins.version":"Versi","connection.plugins.version.tooltip":"Versi plugin terpasang yang dilaporkan oleh Studio.","connection.plugins.none":"Tidak ada plugin terhubung","connection.log.title":"Log Koneksi","connection.log.empty":"Belum ada event","connection.time.secondsAgo":"dtk lalu","connection.time.minutesAgo":"mnt lalu","connection.time.hoursAgo":"jam lalu","common.loading":"Memuat...","common.retry":"Coba lagi","common.reconnecting":"Menghubungkan ulang...","common.expand":"Perluas","common.collapse":"Ciutkan","tools.tab.history":"Riwayat","tools.tab.statistics":"Statistik","tools.tab.failures":"Kegagalan","tools.col.time":"Waktu","tools.col.time.tooltip":"Waktu ketika eksekusi alat dicatat.","tools.col.toolAction":"Alat.Aksi","tools.col.toolAction.tooltip":"Nama alat dan aksi yang dijalankan.","tools.col.duration":"Durasi","tools.col.duration.tooltip":"Berapa lama alat menyelesaikan eksekusi.","tools.col.status":"Status","tools.col.status.tooltip":"Hasil dari eksekusi alat yang tercatat.","tools.col.tier":"Tier","tools.col.tier.tooltip":"Tier lisensi yang dibutuhkan untuk alat atau aksi ini.","tools.col.tierStats.tooltip":"Ringkasan Basic, Pro, atau Mixed untuk baris statistik alat ini.","tools.col.tool":"Alat","tools.col.tool.tooltip":"Nama alat konsolidasi pada tabel statistik.","tools.col.calls":"Panggilan","tools.col.calls.tooltip":"Jumlah total panggilan yang tercatat untuk alat ini.","tools.col.ok":"OK","tools.col.ok.tooltip":"Jumlah eksekusi sukses langsung.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"Jumlah eksekusi yang berhasil melalui fallback.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"Jumlah eksekusi yang diblokir tanpa fallback.","tools.col.err":"GAGAL","tools.col.err.tooltip":"Jumlah eksekusi yang berakhir gagal.","tools.col.okRate":"% Sukses","tools.col.okRate.tooltip":"Persentase panggilan yang selesai dengan sukses.","tools.col.avgTime":"Waktu rata-rata","tools.col.avgTime.tooltip":"Rata-rata waktu eksekusi dari panggilan yang tercatat.","tools.col.error":"Error","tools.filter.tool":"Alat","tools.filter.all":"Semua","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"Entri ini menggunakan alat atau aksi khusus Pro.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"Aksi Pro yang diminta berhasil melalui fallback Basic.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"Aksi Pro yang diminta diblokir dan tidak ada fallback yang dijalankan.","tools.badge.err":"GAGAL","tools.badge.err.tooltip":"Eksekusi alat berakhir gagal.","tools.status.ok":"OK","tools.status.ok.tooltip":"Eksekusi alat selesai dengan sukses.","tools.tier.mixed.tooltip":"Alat ini memiliki campuran aksi Basic dan Pro.","tools.detail.params":"Parameter","tools.detail.params.tooltip":"Parameter input yang dikirim pada eksekusi alat ini.","tools.detail.result":"Hasil","tools.detail.result.tooltip":"Payload hasil yang dikembalikan dari eksekusi alat ini.","tools.detail.requestedCommand":"Perintah diminta","tools.detail.executedCommand":"Perintah dijalankan","tools.detail.alternatives":"Alternatif","tools.detail.blockedMessage":"Alasan diblokir","tools.detail.noFallback":"Tanpa fallback","tools.detail.noFallback.value":"Tidak ada fallback yang dijalankan.","tools.detail.errorMessage":"Pesan error","tools.clear.history.title":"Hapus riwayat?","tools.clear.history.message":"Tindakan ini akan menghapus permanen riwayat alat untuk place saat ini.","tools.clear.statistics.title":"Hapus statistik?","tools.clear.statistics.message":"Tindakan ini akan mereset permanen statistik alat untuk place saat ini.","tools.detail.error":"Error","tools.page.prev":"Sebelumnya","tools.page.prev.tooltip":"Pindah ke halaman sebelumnya pada riwayat alat.","tools.page.next":"Selanjutnya","tools.page.next.tooltip":"Pindah ke halaman berikutnya pada riwayat alat.","tools.empty.history":"Tidak ada entri riwayat","tools.empty.stats":"Tidak ada statistik alat","tools.empty.failures":"Tidak ada kegagalan","tools.summary.total":"Total","tools.summary.calls":"panggilan","tools.summary.sessions":"Sesi","settings.license.title":"Lisensi","settings.license.title.tooltip":"Status lisensi dan tier langganan saat ini.","settings.license.status":"Status","settings.license.status.tooltip":"Status aktivasi lisensi saat ini.","settings.license.tier":"Tier","settings.license.tier.tooltip":"Tier langganan saat ini untuk fitur WEPPY Dashboard yang tersedia.","settings.license.key":"Kunci","settings.license.key.tooltip":"Kunci lisensi tersamarkan yang saat ini dimuat oleh server.","settings.license.keyValue.tooltip":"Kunci lisensi tersamarkan yang saat ini dimuat oleh server.","settings.license.provider":"Penyedia","settings.license.provider.tooltip":"Penyedia lisensi yang digunakan untuk memvalidasi kunci ini.","settings.license.providerValue.tooltip":"Penyedia lisensi yang digunakan untuk memvalidasi kunci ini.","settings.license.active":"Aktif","settings.license.active.tooltip":"Status aktivasi lisensi saat ini.","settings.license.status.activeCancelPending.tooltip":"Pembatalan sedang menunggu, tetapi akses Pro tetap aktif hingga periode penagihan saat ini berakhir.","settings.license.inactive":"Tidak aktif","settings.license.inactive.tooltip":"Status aktivasi lisensi saat ini.","settings.license.expired":"Kedaluwarsa","settings.license.expired.tooltip":"Status aktivasi lisensi saat ini.","settings.license.unavailable":"Info lisensi tidak tersedia","settings.license.detail.cancelPending":"Pembatalan telah dijadwalkan. Akses Pro tetap aktif hingga periode penagihan saat ini berakhir.","settings.license.reset":"Reset Lisensi","settings.readOnly":"Hanya baca","settings.readOnly.tooltip":"Bagian ini menampilkan nilai yang tidak bisa diedit dari WEPPY Dashboard.","settings.unavailable":"Pengaturan tidak tersedia","settings.general.title":"Pengaturan umum","settings.general.title.tooltip":"Pengaturan panas yang langsung diterapkan saat diubah.","settings.general.liveApply":"Terapkan langsung","settings.general.liveApply.tooltip":"Perubahan di bagian ini langsung diterapkan tanpa tombol simpan terpisah.","settings.general.applied":"Diterapkan","settings.general.logLevel":"Level log","settings.general.logLevel.tooltip":"Menetapkan seberapa detail WEPPY Dashboard menulis lognya.","settings.general.localHistory":"Perekaman riwayat alat","settings.general.localHistory.tooltip":"Menyimpan riwayat eksekusi alat lokal untuk tampilan riwayat WEPPY Dashboard.","settings.general.localStatistics":"Pengumpulan statistik alat","settings.general.localStatistics.tooltip":"Mengumpulkan statistik penggunaan lokal untuk pelaporan WEPPY Dashboard.","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WEPPY Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"Batas waktu permintaan","settings.general.requestTimeout.tooltip":"Waktu maksimum WEPPY Dashboard menunggu permintaan sebelum dianggap gagal.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"Batas waktu permintaan diukur dalam milidetik.","settings.cold.title":"Lingkungan server","settings.cold.title.tooltip":"Nilai lingkungan server hanya-baca yang dimuat saat startup.","settings.cold.httpPort.tooltip":"Nomor port yang digunakan oleh server HTTP WEPPY Dashboard MCP.","settings.cold.httpHost.tooltip":"Antarmuka host yang diikat oleh server HTTP WEPPY Dashboard MCP.","settings.cold.dashboardAutoOpen.tooltip":"Mengontrol apakah WEPPY Dashboard terbuka otomatis di browser saat server dimulai.","settings.cold.dashboardAutoOpen.value.tooltip":"Perilaku startup saat ini untuk membuka WEPPY Dashboard di browser.","settings.cold.hint":"Atur melalui variabel lingkungan.","settings.language.title":"Bahasa","settings.language.title.tooltip":"Pilih cara teks antarmuka WEPPY Dashboard dilokalkan.","settings.language.dashboard":"Bahasa WEPPY Dashboard","settings.language.dashboard.tooltip":"Mengganti bahasa WEPPY Dashboard atau mengikuti bahasa sistem saat disetel ke Otomatis.","settings.language.auto":"Otomatis","overview.l0.title":"Server MCP terputus","overview.l0.message":"Server MCP tidak merespons. WEPPY Dashboard akan mencoba menghubungkan ulang secara otomatis.","overview.l0.step1":"Periksa apakah proses server MCP sedang berjalan","overview.l0.step2":"Mulai ulang perintah server MCP jika diperlukan","overview.l0.reconnecting":"Menghubungkan ulang otomatis setiap 3 detik...","overview.l0.reconnectBtn":"Hubungkan ulang","overview.l0.settingsBtn":"Periksa pengaturan","overview.l1.pluginGuide":"Plugin Roblox Studio tidak terhubung","overview.l1.check1":"Apakah Roblox Studio sedang berjalan?","overview.l1.check2":"Apakah WEPPY Plugin sudah terinstal?","overview.l1.feedHint":"Perubahan akan muncul di sini setelah plugin terhubung","overview.metric.server":"Server","overview.metric.server.tooltip":"Status runtime dan proses server MCP.","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Status koneksi dan versi plugin Roblox Studio.","overview.metric.agent":"Agen","overview.metric.agent.tooltip":"Agen coding AI yang terhubung dan status runtime-nya.","overview.metric.agent.instancesUnit":"instansi","overview.metric.sync":"Sinkronisasi","overview.metric.sync.tooltip":"Aktivitas sinkronisasi saat ini antara Studio dan file lokal.","overview.metric.noAgent":"Tidak ada agen","overview.meta.version":"Versi","overview.meta.version.tooltip":"Versi server MCP yang terpasang.","overview.meta.session":"Sesi","overview.meta.session.tooltip":"Pengenal sesi MCP saat ini.","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Pengenal proses dari sistem operasi.","overview.meta.uptime":"Waktu aktif","overview.meta.uptime.tooltip":"Waktu yang berlalu sejak server MCP dimulai.","overview.feed.title":"Perubahan game terbaru","overview.feed.empty":"Tidak ada perubahan terbaru","overview.changelog.title":"Ringkasan perubahan sesi","overview.changelog.entries":"Total","overview.changelog.scripts":"skrip","overview.changelog.instances":"instansi","overview.changelog.properties":"properti","overview.changelog.assets":"aset","overview.tier.title":"Penggunaan tier","changelog.subtitle":"Riwayat perubahan game","changelog.filter.all":"Semua","changelog.filter.active":"Aktif","changelog.filter.completed":"Selesai","changelog.empty":"Belum ada entri riwayat","changelog.basic.limit.title":"Pratinjau Basic hanya menampilkan 3 sesi terbaru","changelog.basic.limit.body":"Upgrade ke Pro untuk melihat timeline changelog lengkap untuk place ini.","changelog.basic.metricLabel":"Changelog terlihat / Total","changelog.basic.visible":"terlihat","changelog.basic.total":"total","changelog.card.active":"Aktif","changelog.card.active.tooltip":"Sesi ini masih menerima perubahan game baru.","changelog.card.completed":"Selesai","changelog.card.completed.tooltip":"Sesi ini sudah berakhir dan tidak ada perubahan baru yang diharapkan.","changelog.card.bootstrapStatus":"Inisialisasi","changelog.card.bootstrapStatus.tooltip":"Sesi ini hanya berisi snapshot bootstrap sinkronisasi awal.","changelog.card.inProgress":"sedang berlangsung","changelog.card.noChanges":"Belum ada perubahan","changelog.card.noChanges.tooltip":"Belum ada perubahan game yang diekstrak untuk sesi ini.","changelog.card.bootstrapSummary":"Snapshot sinkronisasi awal","changelog.card.bootstrapSummary.tooltip":"Penulisan sinkronisasi file awal diringkas menjadi satu baris snapshot bootstrap.","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"skrip","changelog.card.scripts.tooltip":"Perubahan skrip yang terjadi di sesi ini.","changelog.card.instances":"instansi","changelog.card.instances.tooltip":"Perubahan pembuatan, penghapusan, pemindahan, atau kloning instansi di sesi ini.","changelog.card.modified":"diubah","changelog.card.created":"dibuat","changelog.card.deleted":"dihapus","changelog.card.moved":"dipindahkan","changelog.card.propertiesChanged":"properti diubah","changelog.card.propertiesChanged.tooltip":"Perubahan nilai properti yang tercatat untuk sesi ini.","changelog.card.lightingConfigured":"Pencahayaan dikonfigurasi","changelog.card.lightingConfigured.tooltip":"Pencahayaan atau pengaturan atmosfer berubah di sesi ini.","changelog.card.terrainConfigured":"Terrain dikonfigurasi","changelog.card.terrainConfigured.tooltip":"Data terrain atau pengaturan terrain berubah di sesi ini.","changelog.card.assetsInserted":"aset disisipkan","changelog.card.assetsInserted.tooltip":"Aset yang dimasukkan ke place selama sesi ini.","changelog.category.script":"Skrip","changelog.category.instance":"Instansi","changelog.category.property":"Properti","changelog.category.lighting":"Pencahayaan","changelog.category.terrain":"Terrain","changelog.category.asset":"Aset","changelog.detail.changeSummary":"Ringkasan perubahan","changelog.detail.changeSummary.tooltip":"Jumlah perubahan game yang diekstrak dan dikelompokkan per kategori untuk sesi ini.","changelog.detail.changeTimeline":"Timeline perubahan","changelog.detail.changeTimeline.tooltip":"Daftar kronologis perubahan game yang diekstrak untuk sesi ini.","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"Sebelum & Sesudah","changelog.detail.filterCategory":"Kategori","changelog.detail.filterCategory.tooltip":"Filter timeline ke satu kategori perubahan.","changelog.detail.confidence.exact":"Tepat","changelog.detail.confidence.exact.tooltip":"Status sebelum dan sesudah perubahan ini sama-sama terkonfirmasi.","changelog.detail.confidence.partial":"Parsial","changelog.detail.confidence.partial.tooltip":"Hanya sebagian status sebelum dan sesudah perubahan ini yang bisa dikonfirmasi.","changelog.detail.confidence.afterOnly":"Hanya sesudah","changelog.detail.confidence.afterOnly.tooltip":"Hanya status hasil setelah perubahan yang bisa dikonfirmasi.","changelog.detail.confidence.intentOnly":"Hanya niat","changelog.detail.confidence.intentOnly.tooltip":"Hanya aksi yang diminta yang tercatat, bukan status hasilnya.","changelog.detail.confidence.unknown":"Tidak diketahui","changelog.detail.confidence.unknown.tooltip":"Perubahan ini tidak dapat diklasifikasikan dengan yakin dari data yang tersedia.","changelog.detail.noChanges":"Tidak ada perubahan di kategori ini","changelog.detail.backToList":"Kembali ke daftar","changelog.diff.empty":"Tidak ada perbedaan","changelog.diff.unified":"Terpadu","changelog.diff.sideBySide":"Berdampingan","changelog.diff.before":"Sebelum","changelog.diff.after":"Sesudah","sync.overlay.title":"Plugin Roblox Studio diperlukan","sync.overlay.message":"Status sinkronisasi akan tersedia setelah plugin Roblox Studio terhubung.","sync.overlay.check1":"Apakah Roblox Studio sedang berjalan?","sync.overlay.check2":"Apakah WEPPY Plugin sudah terinstal?","sync.status.title":"Status sinkronisasi","sync.status.title.tooltip":"Status sinkronisasi Studio dan file lokal untuk place ini.","sync.status.forwardOnly":"Hanya maju","sync.status.forwardOnly.tooltip":"Tier Basic hanya mengizinkan sinkronisasi maju dari Studio ke lokal.","sync.status.place":"Place","sync.status.place.tooltip":"Nama place Roblox yang terhubung beserta ID place-nya.","sync.status.path":"Path","sync.status.path.tooltip":"Root sistem file lokal yang saat ini dipakai untuk output sinkronisasi.","sync.status.instances":"Instansi","sync.status.instances.tooltip":"Jumlah total instance Roblox yang disinkronkan di mirror lokal.","sync.status.scripts":"Skrip","sync.status.scripts.tooltip":"Jumlah total file skrip yang saat ini diindeks untuk place ini.","sync.status.state":"Status","sync.status.state.tooltip":"Status runtime sinkronisasi saat ini yang dilaporkan server.","sync.directions.title":"Arah sinkronisasi","sync.directions.title.tooltip":"Arah sinkronisasi per kategori dan cara penerapannya antara Local dan Studio.","sync.directions.type":"Tipe","sync.directions.type.tooltip":"Kategori sinkronisasi yang dipengaruhi aturan ini.","sync.directions.direction":"Arah","sync.directions.direction.tooltip":"Menunjukkan apakah tiap kategori sinkron dari Studio, ke Studio, atau dua arah.","sync.directions.applyMode":"Mode penerapan","sync.directions.applyMode.tooltip":"Cara perubahan sinkronisasi masuk diterapkan untuk kategori ini.","sync.directions.cat.scripts":"Skrip","sync.directions.cat.values":"Nilai","sync.directions.cat.containers":"Kontainer","sync.directions.cat.data":"Data","sync.directions.cat.services":"Layanan","sync.directions.endpoint.local":"Local","sync.directions.endpoint.local.tooltip":"File lokal di disk selalu ditampilkan di sisi kiri rel arah.","sync.directions.endpoint.studio":"Studio","sync.directions.endpoint.studio.tooltip":"Roblox Studio selalu ditampilkan di sisi kanan rel arah.","sync.directions.mode.manual":"Manual","sync.directions.mode.manual.tooltip":"Menerapkan perubahan sinkronisasi hanya saat Anda memicunya secara manual.","sync.directions.mode.auto":"Otomatis","sync.directions.mode.auto.tooltip":"Menerapkan perubahan sinkronisasi otomatis saat pembaruan datang.","sync.directions.tooltip.forward.body":"Perubahan dari Studio hanya disinkronkan ke file lokal","sync.directions.tooltip.bidirectional.body":"Sinkronisasi dua arah antara Local dan Studio","sync.directions.tooltip.reverse.body":"Dorong perubahan file lokal ke Studio","sync.directions.tooltip.proRequired":"Pro diperlukan pada tier Basic","sync.directions.dir.forward":"maju","sync.directions.dir.bidirectional":"dua arah","sync.directions.dir.reverse":"mundur","sync.log.title":"Log sinkronisasi","sync.log.empty":"Tidak ada event sinkronisasi","sync.log.type.write":"TULIS","sync.log.type.write.tooltip":"Output sinkronisasi baru ditulis ke disk.","sync.log.type.update":"PERBARUI","sync.log.type.update.tooltip":"File atau instance yang sudah tersinkron diperbarui.","sync.log.type.delete":"HAPUS","sync.log.type.delete.tooltip":"File atau instance tersinkron telah dihapus.","sync.log.type.idle":"IDLE","sync.log.type.idle.tooltip":"Event sinkronisasi dicatat tanpa perubahan file.","sync.upgrade.title":"Buka fitur sinkronisasi penuh dengan Pro","sync.upgrade.benefit1":"Sinkronisasi dua arah — edit file, otomatis diterapkan ke Studio","sync.upgrade.benefit2":"Sinkronisasi mundur — kirim perubahan file ke Studio","sync.upgrade.benefit3":"Riwayat sinkronisasi lengkap dan log perubahan detail","sync.upgrade.buy":"Upgrade ke Pro","playtest.status.title":"Status playtest","playtest.status.title.tooltip":"Status sesi playtest Roblox saat ini yang dilaporkan oleh Studio.","playtest.status.mode":"Mode","playtest.status.mode.tooltip":"Mode peluncuran playtest Studio untuk sesi saat ini.","playtest.status.mode.value.tooltip":"Mode playtest Roblox Studio spesifik yang sedang dipakai saat ini.","playtest.status.mode.play":"Main","playtest.status.mode.run":"Jalankan","playtest.status.mode.server":"Server","playtest.status.mode.edit":"Edit","playtest.status.place.tooltip":"Place Roblox yang saat ini terkait dengan sesi playtest ini.","playtest.status.state.running":"Berjalan","playtest.status.state.running.tooltip":"Sesi playtest Roblox saat ini sedang berjalan.","playtest.status.state.paused":"Dijeda","playtest.status.state.paused.tooltip":"Sesi playtest Roblox saat ini sedang dijeda.","playtest.status.state.notRunning":"Tidak berjalan","playtest.status.state.notRunning.tooltip":"Saat ini tidak ada sesi playtest Roblox yang sedang berjalan.","playtest.control.play":"Main","playtest.control.pause":"Jeda","playtest.control.resume":"Lanjutkan","playtest.control.stop":"Berhenti","playtest.history.title":"Riwayat tes","playtest.history.title.tooltip":"Riwayat eksekusi playtest otomatis yang tercatat untuk proyek ini.","playtest.history.empty":"Belum ada hasil tes","playtest.history.mode":"Mode","playtest.history.mode.tooltip":"Mode playtest yang digunakan pada eksekusi tes yang tercatat ini.","playtest.history.status.passed":"Berhasil","playtest.history.status.failed":"Gagal","playtest.history.status.running":"Berjalan","playtest.history.status.unknown":"Tidak diketahui","playtest.history.status.tooltip":"Status hasil yang tercatat untuk eksekusi playtest otomatis ini.","playtest.empty.title":"Belum ada hasil playtest","playtest.empty.message":"Hasil akan muncul di sini saat agen AI menjalankan tes otomatis via system_info.run_test.","playtest.empty.message.before":"Hasil akan muncul di sini saat agen AI menjalankan tes otomatis melalui","playtest.empty.message.after":".","playtest.empty.runTest.tooltip":"Titik otomatisasi WEPPY Dashboard yang menjalankan pemeriksaan playtest Roblox melalui tool system_info.","playtest.report.title":"Laporan terpilih","playtest.report.title.tooltip":"Output detail untuk eksekusi playtest otomatis yang sedang dipilih.","playtest.report.content":"Laporan","playtest.report.content.tooltip":"Ringkasan Markdown untuk eksekusi playtest otomatis yang dipilih.","playtest.report.logs":"Log","playtest.report.logs.tooltip":"Log eksekusi yang ditangkap untuk eksekusi playtest otomatis yang dipilih.","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"Tidak ada konten laporan","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest adalah fitur khusus Pro","playtest.basic.desc":"Kontrol playtest dari WEPPY Dashboard, jalankan tes otomatis, dan lihat laporan tes detail.","playtest.basic.benefit1":"Kontrol main/jeda/berhenti sekali klik","playtest.basic.benefit2":"Eksekusi tes otomatis via agen AI","playtest.basic.benefit3":"Riwayat tes dengan pelacakan berhasil/gagal","playtest.basic.benefit4":"Laporan tes detail dalam markdown","playtest.sample.badge":"Pratinjau tampilan playtest Pro","playtest.sample.title":"Anda sedang melihat pratinjau layar playtest yang tersedia setelah upgrade ke Pro.","playtest.sample.message":"Pratinjau ini menggunakan data sampel. Kontrol playtest langsung, pengelolaan riwayat, dan laporan nyata tersedia setelah upgrade ke Pro.","playtest.sample.clearDisabled":"Upgrade ke Pro untuk menghapus riwayat playtest nyata.","playtest.sample.place":"Pratinjau Arena","playtest.sample.history.name":"Sample Arena Smoke Test","playtest.sample.context.why":"Masuk ke arena, bertahan pada fase awal, dan pastikan HUD merespons segera.","playtest.sample.context.expected":"Pemain spawn dengan aman, UI hitung mundur muncul dalam satu detik, dan wave pertama dimulai tanpa error.","playtest.sample.context.observed":"Proteksi spawn bekerja, HUD diperbarui tepat waktu, dan wave pertama selesai tanpa regresi.","playtest.sample.report.markdown":`# Sample Arena Smoke Test
120
120
 
121
121
  - Alur spawn: PASS
122
122
  - Hitung mundur HUD: PASS
@@ -126,7 +126,41 @@ Ini adalah pratinjau sampel. Upgrade ke Pro untuk menjalankan playtest langsung
126
126
  [sample] proteksi spawn aktif
127
127
  [sample] hitung mundur hud dirender
128
128
  [sample] wave pertama selesai
129
- [sample] laporan pratinjau selesai`,"sidebar.whatsNew":"Yang Baru","header.whatsNew":"Yang Baru","header.whatsNew.tooltip":"Yang Baru","whatsNew.pageTitle":"Yang Baru","whatsNew.pageSubtitle":"Tetap update dengan perubahan MCP","whatsNew.unreadSection":"Belum Dibaca","whatsNew.allSection":"Semua Pengumuman","whatsNew.empty":"Belum ada pengumuman","whatsNew.newBadge":"BARU","whatsNew.category.release":"Rilis","whatsNew.category.notice":"Pemberitahuan","whatsNew.category.deprecation":"Tidak Digunakan","whatsNew.category.tip":"Tips"},jm=["en","ko","es","pt-br","ja","id"],Mn="auto",vl={en:km,ko:Sm,es:bm,"pt-br":xm,ja:Cm,id:Rm},ki="dashboard-locale";function Rl(a){return jm.includes(a)}function Em(){const i=((typeof navigator<"u"?navigator.language:"en")??"en").toLowerCase();return i==="ko"||i.startsWith("ko-")?"ko":i==="pt-br"?"pt-br":i==="ja"||i.startsWith("ja-")?"ja":i==="es"||i.startsWith("es-")?"es":i==="id"||i.startsWith("id-")?"id":"en"}function Bd(){if(typeof localStorage<"u"){const a=localStorage.getItem(ki);if(a===Mn)return Mn;if(a&&Rl(a))return a}return Mn}function Wd(a){return a===Mn?Em():a}const yp=T.createContext(null);function _m({children:a}){const[i,s]=T.useState(Bd),[c,d]=T.useState(()=>Wd(Bd())),p=T.useCallback((m,h)=>{const P=vl[c]??vl.en??{};if(m in P)return P[m];const x=vl.en;return x&&m in x?x[m]:h!==void 0?h:m},[c]),f=T.useCallback(m=>{typeof localStorage<"u"&&(m===Mn?localStorage.removeItem(ki):Rl(m)?localStorage.setItem(ki,m):localStorage.setItem(ki,"en"));const h=m===Mn?Mn:Rl(m)?m:"en";s(h),d(Wd(h))},[]);return T.createElement(yp.Provider,{value:{locale:c,selectedLocale:i,t:p,setLocale:f}},a)}function ir(){const a=T.useContext(yp);if(!a)throw new Error("useLocale must be used within a LocaleProvider");return a}const Tm="_container_10isu_2",Mm="_toast_10isu_14",Nm="_slideIn_10isu_1",Lm="_success_10isu_39",Am="_info_10isu_44",Dm="_warning_10isu_49",zm="_error_10isu_54",Pl={container:Tm,toast:Mm,slideIn:Nm,success:Lm,info:Am,warning:Dm,error:zm},vp=T.createContext(null),Im=3e3;function Om({children:a}){const[i,s]=T.useState([]),c=T.useRef(0),d=T.useCallback((p,f="info")=>{const m=c.current++;s(h=>[...h,{id:m,message:p,type:f}]),setTimeout(()=>{s(h=>h.filter(P=>P.id!==m))},Im)},[]);return L.jsxs(vp.Provider,{value:{show:d},children:[a,L.jsx("div",{className:Pl.container,children:i.map(p=>L.jsx("div",{className:`${Pl.toast} ${Pl[p.type]}`,children:p.message},p.id))})]})}function Pp(){const a=T.useContext(vp);return a||{show:()=>{}}}function Fm(){const{level:a}=Il(),{show:i}=Pp(),{t:s}=ir(),c=T.useRef(null);return T.useEffect(()=>{const d=c.current;c.current=a,d!==null&&d!==a&&(d==="disconnected"&&a==="serverOnly"?i(s("toast.serverConnected","MCP 서버 연결됨"),"success"):d==="serverOnly"&&a==="studioConnected"?i(s("toast.pluginConnected","플러그인 연결됨"),"success"):(d==="serverOnly"||d==="studioConnected")&&a==="disconnected"?i(s("toast.serverDisconnected","MCP 서버 연결 끊김"),"error"):d==="studioConnected"&&a==="serverOnly"&&i(s("toast.pluginDisconnected","플러그인 연결 끊김"),"warning"))},[a,i,s]),null}const Bm="_wrapper_1uzud_2",Wm="_tooltip_1uzud_8",Um="_tooltipLeft_1uzud_30",Hm="_tooltipRight_1uzud_35",yi={wrapper:Bm,tooltip:Wm,tooltipLeft:Um,tooltipRight:Hm};function nr({text:a,children:i}){const s=T.useRef(null),[c,d]=T.useState("center"),p=a.trim();if(!p)return L.jsx(L.Fragment,{children:i});const f=T.useCallback(()=>{d("center"),window.requestAnimationFrame(()=>{const m=s.current;if(!m)return;const h=m.getBoundingClientRect(),P=8;if(h.left<P){d("left");return}h.right>window.innerWidth-P&&d("right")})},[]);return L.jsxs("span",{className:yi.wrapper,title:p,onMouseEnter:f,children:[i,L.jsx("span",{ref:s,className:[yi.tooltip,c==="left"?yi.tooltipLeft:"",c==="right"?yi.tooltipRight:""].filter(Boolean).join(" "),"data-placement":c,children:p})]})}function Vm(a){return a==="gumroad"?"gumroad":void 0}function Ym(a){if(!a||typeof a!="object")return!1;const i=a.status;return(a.tier==="basic"||a.tier==="pro")&&(i==="active"||i==="grace"||i==="invalid"||i==="revoked"||i==="unlicensed"||i==="unknown")}function wp(a){return a&&typeof a=="object"&&"data"in a&&a.data?a.data:a}function kp(a){if(!a||typeof a!="object")return null;if(Ym(a))return a;const i=a;if(typeof i.canUsePro!="boolean"||typeof i.status!="string"||i.status!=="active"&&i.status!=="grace"&&i.status!=="invalid"&&i.status!=="revoked"&&i.status!=="unlicensed"&&i.status!=="unknown")return null;const s=Vm(i.provider);return{tier:i.canUsePro?"pro":"basic",status:i.status,...typeof i.statusDetail=="string"?{statusDetail:i.statusDetail}:{},...typeof i.maskedKey=="string"?{maskedKey:i.maskedKey}:{},...s?{provider:s}:{},refreshRequired:i.refreshRequired===!0,...typeof i.refreshBlockedReason=="string"?{refreshBlockedReason:i.refreshBlockedReason}:{}}}async function qm(a="gumroad"){const i=await po.get("/api/dashboard/license/status",{provider:a});return kp(wp(i))}function Ol(a){const i=wp(a),s=i,c=kp(i),d=typeof(s==null?void 0:s.reasonCode)=="string"?s.reasonCode:void 0;return{ok:(s==null?void 0:s.ok)===!0,license:c?{...c,refreshRequired:c.refreshRequired||d==="missing_session_token",refreshBlockedReason:c.refreshBlockedReason??(d==="missing_session_token"?"missing_session_token":void 0)}:null,message:typeof(s==null?void 0:s.message)=="string"?s.message:null,reasonCode:d,recoverable:(s==null?void 0:s.recoverable)===!0}}async function xv(a){const i=a.provider??"gumroad",s=await po.post("/api/dashboard/license/activate",{provider:i,licenseKey:a.licenseKey,clientType:"dashboard"});return Ol(s)}async function Cv(a={}){const i=a.provider??"gumroad",s=await po.post("/api/dashboard/license/refresh",{provider:i,clientType:"dashboard"});return Ol(s)}async function Rv(a={}){const i=a.provider??"gumroad",s=await po.post("/api/dashboard/license/reset",{provider:i,clientType:"dashboard"});return Ol(s)}class Km{constructor(i){Co(this,"source",null);Co(this,"handlers",new Map);Co(this,"reconnectTimer",null);Co(this,"url");this.url=i??`${ji}/api/dashboard/events`}connect(){this.disconnect(),this.source=new EventSource(this.url),this.source.onopen=()=>{this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null)},this.source.onerror=()=>{var s;(s=this.source)==null||s.close(),this.source=null,this.scheduleReconnect()};const i=["connection","sync","command","game_change","mcp_status","license"];for(const s of i)this.source.addEventListener(s,c=>{var p;const d=JSON.parse(c.data);(p=this.handlers.get(s))==null||p.forEach(f=>f(d))})}on(i,s){return this.handlers.has(i)||this.handlers.set(i,new Set),this.handlers.get(i).add(s),()=>{var c;return(c=this.handlers.get(i))==null?void 0:c.delete(s)}}disconnect(){var i;(i=this.source)==null||i.close(),this.source=null,this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null)}get connected(){var i;return((i=this.source)==null?void 0:i.readyState)===EventSource.OPEN}scheduleReconnect(){this.reconnectTimer||(this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},fm))}}const Sp=[{labelKey:"sidebar.overview",route:"/",icon:"📊",minLevel:"disconnected",lazy:()=>Ro(()=>import("./OverviewPage-CXsGuoPu.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]))},{labelKey:"sidebar.connection",route:"/connection",icon:"🔗",minLevel:"disconnected",lazy:()=>Ro(()=>import("./ConnectionPage-LSvSX1_u.js"),__vite__mapDeps([13,1,2,3,14,8,15]))},{labelKey:"sidebar.sync",route:"/sync",icon:"🔄",minLevel:"serverOnly",lazy:()=>Ro(()=>import("./SyncPage-eX2Rh-Ct.js"),__vite__mapDeps([16,1,14,2,3,6,7,10,11,17]))},{labelKey:"sidebar.changelog",route:"/changelog",icon:"📋",minLevel:"serverOnly",lazy:()=>Ro(()=>import("./ChangelogPage-Dgl8dBt6.js"),__vite__mapDeps([18,14,6,7,10,11,19]))},{labelKey:"sidebar.playtest",route:"/playtest",icon:"🎮",minLevel:"serverOnly",lazy:()=>Ro(()=>import("./PlaytestPage-CgkzRAqQ.js"),__vite__mapDeps([20,6,7,1,14,21]))},{labelKey:"sidebar.tools",route:"/tools",icon:"🔧",minLevel:"serverOnly",lazy:()=>Ro(()=>import("./ToolsPage-CqzfCxxH.js"),__vite__mapDeps([22,14,6,7,9,10,11,23]))}],bp=[{labelKey:"sidebar.whatsNew",route:"/whats-new",icon:"🔔",minLevel:"disconnected",lazy:()=>Ro(()=>import("./WhatsNewPage-23o8LmsR.js"),__vite__mapDeps([24,25]))}],$m="_sidebar_ap408_2",Qm="_brand_ap408_17",Gm="_brandIcon_ap408_26",Jm="_brandText_ap408_32",Xm="_brandTextPro_ap408_43",Zm="_nav_ap408_49",ey="_navLink_ap408_56",ty="_active_ap408_77",oy="_disabled_ap408_84",ny="_icon_ap408_95",ay="_label_ap408_106",ry="_secondaryDivider_ap408_113",iy="_secondaryNav_ap408_120",It={sidebar:$m,brand:Qm,brandIcon:Gm,brandText:Jm,brandTextPro:Xm,nav:Zm,navLink:ey,active:ty,disabled:oy,icon:ny,label:ay,secondaryDivider:ry,secondaryNav:iy},Ud={disconnected:0,serverOnly:1,studioConnected:2};function sy(a,i){return Ud[a]>=Ud[i]}function ly(a,i){return a==="serverOnly"?i("sidebar.gate.l1","MCP server connection required"):a==="studioConnected"?i("sidebar.gate.l2","Roblox Studio plugin connection required"):""}function Hd({item:a}){const{level:i}=Il(),{t:s}=ir(),c=sy(i,a.minLevel),d=L.jsxs(sm,{to:a.route,end:a.route==="/",className:({isActive:p})=>[It.navLink,p?It.active:"",c?"":It.disabled].filter(Boolean).join(" "),onClick:p=>{c||p.preventDefault()},children:[L.jsx("span",{className:It.icon,children:a.icon}),L.jsx("span",{className:It.label,children:s(a.labelKey)})]});return c?d:L.jsx(nr,{text:ly(a.minLevel,s),children:d})}function cy(){const[a,i]=T.useState("basic");return T.useEffect(()=>{let s=!1;async function c(){try{const f=await qm("gumroad");!s&&(f!=null&&f.tier)&&i(f.tier)}catch{s||i("basic")}}c();const d=new Km;d.connect();const p=d.on("license",()=>{c()});return()=>{s=!0,p(),d.disconnect()}},[]),L.jsxs("aside",{className:It.sidebar,children:[L.jsxs("div",{className:It.brand,children:[L.jsx("span",{className:It.brandIcon,children:"◈"}),L.jsx("span",{"data-testid":"sidebar-brand-text",className:[It.brandText,a==="pro"?It.brandTextPro:""].filter(Boolean).join(" "),children:"WEPPY"})]}),L.jsx("nav",{className:It.nav,children:Sp.map(s=>L.jsx(Hd,{item:s},s.route))}),L.jsx("div",{className:It.secondaryDivider}),L.jsx("nav",{className:It.secondaryNav,children:bp.map(s=>L.jsx(Hd,{item:s},s.route))})]})}async function uy(){return po.get("/api/dashboard/place-summary")}async function dy(){return po.get("/api/dashboard/sync-root")}async function py(){return po.post("/api/dashboard/sync-root/pick")}async function fy(a){return po.patch("/api/dashboard/sync-root",{projectRoot:a})}const gy=[{id:"2026-04-12-weppy-rebrand-and-sync-root-rename",date:"2026-04-12",title:{en:"Sync folder path changes to weppy-project-sync",ko:"활성 Sync 경로가 weppy-project-sync로 바뀝니다",es:"La ruta activa de Sync cambia a weppy-project-sync","pt-br":"O caminho ativo de Sync muda para weppy-project-sync",ja:"有効なSyncパスがweppy-project-syncに変わります",id:"Path Sync aktif berubah ke weppy-project-sync"},body:{en:"WROX is now shown as WEPPY across the plugin, dashboard, Explorer, install guides, and website. Your active sync path is now `<project root>/weppy-project-sync`.\n\nIf you previously used `<project root>/wrox-project-sync`, WEPPY creates the new folder automatically and migrates your files there the next time project paths are resolved. The old `wrox-project-sync` folder is no longer the active path, and a marker file can remain there so you can confirm where the new path is.\n\nIf you still only see the old folder, restart the MCP server and reconnect Studio once, then use `weppy-project-sync` as the active folder. If everything already looks normal, you do not need to do anything else. We are sorry for the inconvenience.",ko:"플러그인, 대시보드, Explorer, 설치 가이드, 웹사이트 전반에서 WROX 표기가 이제 WEPPY로 바뀝니다. 현재 활성 Sync 경로는 `<프로젝트 루트>/weppy-project-sync`입니다.\n\n이전에 `<프로젝트 루트>/wrox-project-sync`를 사용했다면, 프로젝트 경로를 다시 확인하는 시점에 WEPPY가 새 폴더를 자동으로 만들고 파일을 그쪽으로 옮깁니다. 기존 `wrox-project-sync` 폴더는 더 이상 활성 경로가 아니며, 기존 위치에는 새 경로를 확인할 수 있는 표시 파일만 남을 수 있습니다.\n\n아직도 예전 폴더만 보이면 MCP 서버를 다시 시작하고 Studio를 한 번 다시 연결한 뒤, `weppy-project-sync` 폴더를 현재 작업 경로로 사용해 주세요. 이미 정상적으로 보인다면 추가로 하실 일은 없습니다. 불편을 드려 죄송합니다.",es:"WROX ahora se muestra como WEPPY en el plugin, el dashboard, Explorer, las guías de instalación y el sitio web. Tu ruta activa de Sync ahora es `<project root>/weppy-project-sync`.\n\nSi antes usabas `<project root>/wrox-project-sync`, WEPPY crea la nueva carpeta automáticamente y mueve allí tus archivos la próxima vez que se resuelvan las rutas del proyecto. La carpeta `wrox-project-sync` anterior ya no es la ruta activa, y puede quedar un archivo marcador para indicarte cuál es la nueva ruta.\n\nSi todavía solo ves la carpeta anterior, reinicia el servidor MCP y vuelve a conectar Studio una vez, luego usa `weppy-project-sync` como carpeta activa. Si todo ya se ve normal, no necesitas hacer nada más. Lamentamos las molestias.","pt-br":"WROX agora aparece como WEPPY no plugin, no dashboard, no Explorer, nos guias de instalação e no site. Seu caminho ativo de Sync agora é `<project root>/weppy-project-sync`.\n\nSe antes você usava `<project root>/wrox-project-sync`, o WEPPY cria a nova pasta automaticamente e move seus arquivos para lá na próxima vez que resolver os caminhos do projeto. A pasta `wrox-project-sync` antiga não é mais o caminho ativo, e um arquivo marcador pode permanecer ali para indicar qual é o novo caminho.\n\nSe você ainda vê apenas a pasta antiga, reinicie o servidor MCP e reconecte o Studio uma vez, depois use `weppy-project-sync` como pasta ativa. Se tudo já parecer normal, você não precisa fazer mais nada. Pedimos desculpas pelo transtorno.",ja:"プラグイン、ダッシュボード、Explorer、インストールガイド、Webサイト全体で、WROX表記はWEPPYに変わりました。現在の有効なSyncパスは `<project root>/weppy-project-sync` です。\n\n以前 `<project root>/wrox-project-sync` を使っていた場合、WEPPY はプロジェクトパスを再解決するタイミングで新しいフォルダを自動で作成し、ファイルをそこへ移動します。古い `wrox-project-sync` フォルダはもう有効なパスではなく、新しい場所を確認できるようにマーカーファイルだけが残ることがあります。\n\n古いフォルダしか見えない場合は、MCPサーバーを再起動してStudioを一度再接続し、その後 `weppy-project-sync` を有効なフォルダとして使ってください。すでに正常に見えている場合は、追加で行う作業はありません。ご不便をおかけして申し訳ありません。",id:"WROX sekarang ditampilkan sebagai WEPPY di plugin, dashboard, Explorer, panduan instalasi, dan situs web. Path Sync aktif Anda sekarang adalah `<project root>/weppy-project-sync`.\n\nJika sebelumnya Anda menggunakan `<project root>/wrox-project-sync`, WEPPY akan membuat folder baru secara otomatis dan memindahkan file Anda ke sana saat path proyek berikutnya diselesaikan. Folder `wrox-project-sync` lama tidak lagi menjadi path aktif, dan file penanda bisa tetap ada di sana untuk membantu Anda melihat path yang baru.\n\nJika Anda masih hanya melihat folder lama, restart server MCP dan sambungkan ulang Studio sekali, lalu gunakan `weppy-project-sync` sebagai folder aktif. Jika semuanya sudah terlihat normal, Anda tidak perlu melakukan apa pun lagi. Kami mohon maaf atas ketidaknyamanannya."},severity:"info",category:"release"},{id:"2026-04-12-explorer-property-panel",date:"2026-04-12",title:{en:"WEPPY Explorer now includes a Property Window",ko:"WEPPY Explorer에 Property Window가 추가되었습니다",es:"WEPPY Explorer ahora incluye una Property Window","pt-br":"O WEPPY Explorer agora inclui uma Property Window",ja:"WEPPY ExplorerにProperty Windowが追加されました",id:"WEPPY Explorer sekarang memiliki Property Window"},body:{en:`You can now inspect \`.props.json\` files in a dedicated Property Window inside WEPPY Explorer instead of reading raw JSON by hand.
129
+ [sample] laporan pratinjau selesai`,"sidebar.whatsNew":"Yang Baru","header.whatsNew":"Yang Baru","header.whatsNew.tooltip":"Yang Baru","whatsNew.pageTitle":"Yang Baru","whatsNew.pageSubtitle":"Tetap update dengan perubahan MCP","whatsNew.unreadSection":"Belum Dibaca","whatsNew.allSection":"Semua Pengumuman","whatsNew.empty":"Belum ada pengumuman","whatsNew.newBadge":"BARU","whatsNew.category.release":"Rilis","whatsNew.category.notice":"Pemberitahuan","whatsNew.category.deprecation":"Tidak Digunakan","whatsNew.category.tip":"Tips"},Em={"sidebar.overview":"Übersicht","sidebar.changelog":"Änderungsprotokoll","sidebar.connection":"Verbindung","sidebar.sync":"Sync","sidebar.playtest":"Playtest","sidebar.tools":"Tools","sidebar.settings":"Einstellungen","sidebar.gate.l1":"MCP-Server-Verbindung erforderlich","sidebar.gate.l2":"Roblox Studio Plugin-Verbindung erforderlich","header.currentProject":"Aktuelles Projekt","header.unknownProject":"Unbekanntes Projekt","header.projectRoot.label":"Projektstamm","header.currentProject.loading":"Lade Projektstamm...","header.currentProject.unavailable":"Projektstamm nicht verfügbar","header.placeNotConnected":"Place nicht verbunden","header.currentProject.tooltip":"Aktuell ausgewählter Projektordner","header.currentProject.loading.tooltip":"Projektstamm-Informationen werden noch geladen","header.currentProject.unavailable.tooltip":"Aktuelle Projektstamm-Informationen sind nicht verfügbar","header.currentProjectSyncRoot.label":"Sync-Stamm","header.currentProjectSyncRoot.loading":"Lade Sync-Stamm...","header.currentProjectSyncRoot.unavailable":"Sync-Stamm nicht verfügbar","header.currentProjectSyncRoot.tooltip":"Aktueller Sync-Stamm-Ordner für das ausgewählte Projekt","header.currentProjectSyncRoot.loading.tooltip":"Sync-Stamm-Informationen werden noch geladen","header.currentProjectSyncRoot.unavailable.tooltip":"Aktuelle Sync-Stamm-Informationen sind nicht verfügbar","header.testFiles.label":"Testdateien","header.testFiles.unavailable":"Testdateien nicht verfügbar","header.testFiles.tooltip":"Aktuelles Playtest-Dateiverzeichnis für den ausgewählten Place","header.places.title":"Places","header.places.active":"Aktiv","header.places.inactive":"Inaktiv","header.places.pluginRequired":"Plugin-Verbindung erforderlich","header.places.liveRequired":"Plugin-Verbindung für Live Active Place erforderlich","header.place.tooltip":"Verbundener Roblox Place","header.placeNotConnected.tooltip":"Place nicht verbunden","header.changeProjectRoot":"Projektstamm ändern","header.changeProjectRoot.ariaLabel":"Projektstamm ändern","header.changeProjectRoot.tooltip":"Den aktuellen Projektstamm ändern","header.changeProjectRoot.disabledTooltip.l0":"MCP-Server-Verbindung erforderlich, bevor der Projektstamm geändert werden kann","header.changeProjectRoot.disabledTooltip.loading":"Projektstamm-Informationen werden noch geladen","header.changeProjectRoot.disabledTooltip.unavailable":"Aktuelle Projektstamm-Informationen sind nicht verfügbar","header.projectRootModal.initial.title":"Projektstamm ändern","header.projectRootModal.initial.body.connected":"Nachdem Sie einen Projektordner ausgewählt haben, wechselt MCP zum neuen Projektstamm und der aktuelle Studio-Inhalt wird vollständig in das neue <ausgewählter Projektordner>/weppy-project-sync-Ziel resynced.","header.projectRootModal.initial.body.disconnected":"Nachdem Sie einen Projektordner ausgewählt haben, wechselt MCP zum neuen Projektstamm und verwendet <ausgewählter Projektordner>/weppy-project-sync als nächstes Sync-Ziel.","header.projectRootModal.initial.nextSyncRoot":"Neues Sync-Ziel nach Auswahl","header.projectRootModal.initial.nextSyncRoot.placeholder":"<ausgewählter Projektordner>/weppy-project-sync","header.projectRootModal.initial.warningStop":"Aktueller Sync wird sofort gestoppt.","header.projectRootModal.initial.warningFreshSync":"Der aktuelle Studio-Inhalt wird verwendet, um einen neuen Full-Sync im neuen Ziel zu erstellen.","header.projectRootModal.initial.warningNoMove":"Alte Sync-Ordner werden nicht automatisch verschoben.","header.projectRootModal.initial.warningDeferredSync":"Wenn Studio nicht verbunden ist, startet der Full Resync beim nächsten Verbinden des Plugins.","header.projectRootModal.confirm.title":"Neuen Projektstamm bestätigen","header.projectRootModal.confirm.body":"Überprüfen Sie den ausgewählten Projektordner, bevor Sie ihn anwenden.","header.projectRootModal.confirm.projectRoot":"Ausgewählter Projektordner","header.projectRootModal.confirm.syncRoot":"Neues Sync-Ziel","header.projectRootModal.confirm.warningNoMove":"Bestehende Sync-Ordner werden nicht automatisch verschoben.","header.projectRootModal.pick":"Ordner auswählen","header.projectRootModal.apply":"Änderung anwenden","header.projectRootModal.cancel":"Abbrechen","header.projectRootModal.error":"Projektstamm-Änderung fehlgeschlagen","status.online":"Online","status.offline":"Offline","status.idle":"Inaktiv","status.syncing":"Synchronisiere","status.error":"Fehler","status.initializing":"Initialisiere","level.l0.title":"Server getrennt","level.l0.message":"WEPPY Dashboard wurde geöffnet, aber der MCP-Server wurde gestoppt oder antwortet nicht.","level.l1.title":"Server verbunden","level.l1.hint":"Prüfen: Läuft Roblox Studio? Ist das Plugin installiert?","level.l2.ok":"Studio verbunden","tier.basic":"Basic","tier.basic.tooltip":"Basic-Tier mit dem Standard-Funktionsumfang des WEPPY Dashboards.","tier.pro":"Pro","tier.pro.tooltip":"Pro-Tier mit dem vollständigen Funktionsumfang des WEPPY Dashboards.","tier.mixed":"Gemischt","tier.upgrade":"Upgrade auf Pro","tier.compare":"Basic vs Pro","tier.banner.save":"Sparen Sie KI-Token mit Pro!","tier.comparison.comingSoon":"Basic vs Pro Vergleich — in Kürze verfügbar","tier.comparison.close":"Schließen","tier.comparison.detailTitle":"Detaillierter Tool-Katalog","tier.comparison.description":"Beschreibung","tier.comparison.basic.core":"Kern-MCP-Workflow","tier.comparison.basic.core.item1":"Skript erstellen/bearbeiten","tier.comparison.basic.core.item2":"Instanzverwaltung","tier.comparison.basic.core.item3":"Eigenschaftensteuerung","tier.comparison.basic.core.item4":"Auswahl und Suche","tier.comparison.basic.core.item5":"Tag-Verwaltung","tier.comparison.basic.core.item6":"Kamerasteuerung","tier.comparison.basic.core.item7":"Protokollüberwachung","tier.comparison.basic.sync":"Sync (Basic)","tier.comparison.basic.sync.item1":"Studio zu Lokal Einweg-Sync","tier.comparison.basic.sync.item2":"Manuelles Anwenden als Standard","tier.comparison.pro.all":"Alles aus Basic, plus","tier.comparison.pro.sync":"Erweiterter Sync-Workflow","tier.comparison.pro.sync.item1":"Sync-Richtung pro Typ","tier.comparison.pro.sync.item2":"Apply-Modus pro Typ","tier.comparison.pro.sync.item3":"Bidirektionaler und Reverse-Sync","tier.comparison.pro.sync.item4":"Full Sync, Resync und Push to Studio","tier.comparison.pro.sync.item5":"Multi-Place-Sync","tier.comparison.pro.playtest":"Playtest-Steuerung","tier.comparison.pro.playtest.item1":"Play, Stop, Pause und Resume","tier.comparison.pro.playtest.item2":"Playtest-Statusinspektion","tier.comparison.pro.playtest.item3":"Automatisierte Testausführung","tier.comparison.pro.creation":"Erweiterter Erstellungs-Workflow","tier.comparison.pro.creation.item1":"Massenoperationen","tier.comparison.pro.creation.item2":"Terrain-Generierung","tier.comparison.pro.creation.item3":"Asset-Suche und -Einfügen","tier.comparison.pro.creation.item4":"Raycast und räumliche Analyse","tier.comparison.pro.creation.item5":"Umgebungssteuerung","tier.comparison.discount.label":"🎁 Geben Sie diesen Code beim Gumroad-Checkout für einen Rabatt ein:","tier.comparison.discount.code":"WEPPY-MCP","tier.comparison.discount.expiry":"Gültig bis 30. April","tier.promo.discount.hint":"🎁 Code WEPPY-MCP bei Gumroad verwenden · Gültig bis 30. April","tier.promo.discount.context":"🎁 Beim Gumroad-Checkout eingeben:","tier.tool.query_instances.desc":"Inspizieren Sie Instanzen, durchsuchen Sie Children und Descendants und prüfen Sie Klasseninformationen. Pro fügt File Tree, Projektstruktur sowie Eigenschafts- oder Tag-Suche hinzu.","tier.tool.mutate_instances.desc":"Erstellen, löschen, klonen und verschieben Sie Instanzen. Pro fügt Tree-Erstellung und Massenerstellung, -löschung oder -klonierung hinzu.","tier.tool.manage_properties.desc":"Lesen und setzen Sie Eigenschaften, Attribute und Tags. Pro fügt berechnete Updates, relative Änderungen und Massen-Eigenschaftsoperationen hinzu.","tier.tool.manage_scripts.desc":"Lesen, schreiben, erstellen, löschen, bearbeiten und durchsuchen Sie Skript-Quelltext. Pro fügt Massenersetzung über mehrere Skripte hinzu.","tier.tool.manage_lighting.desc":"Nur Pro. Konfigurieren Sie Beleuchtung, Atmosphäre, Himmel, Terrain-Eigenschaften und Tageszeit-Einstellungen.","tier.tool.manage_selection.desc":"Lesen, setzen und löschen Sie die aktuelle Studio-Auswahl. Pro fügt Kontext, Details, Hinzufügen oder Entfernen sowie Auswahl-Watch-Unterstützung hinzu.","tier.tool.manage_camera.desc":"Inspizieren Sie Kamerastatus, fokussieren Sie nach Pfad oder Position und fordern Sie vorgeschlagene Ansichten an.","tier.tool.manage_tween.desc":"Nur Pro. Erstellen, abspielen, pausieren und abbrechen von Tweens für sanfte Animationen.","tier.tool.manage_audio.desc":"Nur Pro. Sounds abspielen, stoppen, pausieren und fortsetzen sowie den Audio-Listener konfigurieren.","tier.tool.manage_animation.desc":"Nur Pro. Animationen laden, abspielen und stoppen sowie aktive Animationstracks inspizieren.","tier.tool.manage_physics.desc":"Nur Pro. Kollisionsgruppen registrieren, Gruppenkollisionen konfigurieren und verfügbare Gruppen inspizieren.","tier.tool.manage_effects.desc":"Nur Pro. Partikel emittieren, Effekte löschen und Effektstatus umschalten.","tier.tool.manage_terrain.desc":"Nur Pro. Terrain-Formen füllen, Regionen löschen, Materialien ersetzen, Terrain-Farben verwalten, Voxel lesen oder schreiben, Terrain generieren und Terrain glätten.","tier.tool.spatial_query.desc":"Nur Pro. Raycasts ausführen, Boden finden, Platzierung validieren, Bereiche scannen, nach flachen oder Spawn-Positionen suchen, Begehbarkeit analysieren, Raum kartieren und Kollisionen inspizieren.","tier.tool.manage_assets.desc":"Nur Pro. Modelle einfügen, Asset-Informationen inspizieren, im Creator Store suchen, freie Assets oder Pakete einfügen und Assets exportieren.","tier.tool.manage_sync.desc":"Nur Pro. Sync-Status, -Konfiguration, -Verlauf, -Richtungen inspizieren und synchronisierte Dateien lesen oder schreiben.","tier.tool.workspace_state.desc":"Nur Pro. Full Sync ausführen, Snapshots erfassen, kürzliche Änderungen und Viewport-Status inspizieren und zugehörige Metadaten verwalten.","tier.tool.manage_logs.desc":"Inspizieren Sie Output-Logs mit Filterung, inkrementellem Polling, Buffer-Löschung und kürzlicher Fehlersuche.","tier.tool.system_info.desc":"Verbindungsstatus und aktuellen Tier inspizieren. Pro fügt Place-Info, Services, Studio-Einstellungen, Playtest-Steuerung und automatisierte Tests hinzu.","tier.tool.batch_execute.desc":"Nur Pro. Mehrere Befehle in einem Batch ausführen, mit sequentieller Ausführung und optionalem Continue-on-Error-Verhalten.","tier.tool.execute_luau.desc":"Nur Pro. Beliebigen Luau-Code in der Roblox Studio Sandbox ausführen.","connection.server.title":"Serverstatus","connection.server.version":"Version","connection.server.version.tooltip":"Installierte MCP-Server-Version","connection.server.pid":"PID","connection.server.pid.tooltip":"Betriebssystem-Prozesskennung","connection.server.uptime":"Uptime","connection.server.uptime.tooltip":"Verstrichene Zeit seit dem Start des MCP-Servers","connection.server.session":"Session","connection.server.session.tooltip":"Aktuelle MCP-Session-Kennung","connection.server.exec":"Exec","connection.server.exec.tooltip":"Ausführungspfad zum Starten des MCP-Servers","connection.reconnect":"Erneut verbinden","connection.checkSettings":"Einstellungen prüfen","connection.agents.title":"KI-Agenten","connection.agents.name":"Agent","connection.agents.cwd":"Arbeitsverzeichnis","connection.agents.cwd.tooltip":"Aktuelles Arbeitsverzeichnis für den verbundenen KI-Agent","connection.agents.projectRoot":"Projektstamm","connection.agents.projectRoot.tooltip":"Maßgeblicher Projektstamm für die Sync-Eigentümerschaft","connection.agents.projectRoot.unresolved":"Nicht aufgelöst","connection.agents.connected":"Verbunden","connection.agents.unknown":"Unbekannt","connection.agents.none":"Keine Agenten verbunden","connection.plugins.title":"Plugins","connection.plugins.place":"Place","connection.plugins.clientId":"Client-ID","connection.plugins.clientId.tooltip":"Eindeutige Plugin-Client-Kennung für diese Studio-Verbindung","connection.plugins.lastSeen":"Zuletzt gesehen","connection.plugins.lastSeen.tooltip":"Zuletzt empfangener Heartbeat vom Plugin","connection.plugins.version":"Ver","connection.plugins.version.tooltip":"Vom Studio gemeldete installierte Plugin-Version","connection.plugins.none":"Keine Plugins verbunden","connection.log.title":"Verbindungsprotokoll","connection.log.empty":"Noch keine Ereignisse","connection.time.secondsAgo":"s","connection.time.minutesAgo":"min","connection.time.hoursAgo":"Std","common.loading":"Lade...","common.retry":"Wiederholen","common.reconnecting":"Verbinde erneut...","common.expand":"Ausklappen","common.collapse":"Einklappen","tools.tab.history":"Verlauf","tools.tab.statistics":"Statistik","tools.tab.failures":"Fehler","tools.col.time":"Zeit","tools.col.time.tooltip":"Wann der Tool-Lauf aufgezeichnet wurde.","tools.col.toolAction":"Tool.Action","tools.col.toolAction.tooltip":"Name des Tools und ausgeführte Action.","tools.col.duration":"Dauer","tools.col.duration.tooltip":"Wie lange das Tool zum Beenden brauchte.","tools.col.status":"Status","tools.col.status.tooltip":"Ergebnis des aufgezeichneten Tool-Laufs.","tools.col.tier":"Tier","tools.col.tier.tooltip":"Erforderlicher Lizenz-Tier für das Tool oder die Action.","tools.col.tierStats.tooltip":"Basic-, Pro- oder Mixed-Zusammenfassung für die Statistikzeile.","tools.col.tool":"Tool","tools.col.tool.tooltip":"Konsolidierter Tool-Name in der Statistiktabelle.","tools.col.calls":"Aufrufe","tools.col.calls.tooltip":"Gesamtzahl der aufgezeichneten Aufrufe für dieses Tool.","tools.col.ok":"OK","tools.col.ok.tooltip":"Anzahl direkt erfolgreicher Läufe.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"Anzahl der Läufe, die durch Fallback-Ausführung erfolgreich waren.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"Anzahl blockierter Läufe ohne Fallback-Ausführung.","tools.col.err":"FAILED","tools.col.err.tooltip":"Anzahl fehlgeschlagener Läufe.","tools.col.okRate":"OK%","tools.col.okRate.tooltip":"Prozentsatz der erfolgreich abgeschlossenen Aufrufe.","tools.col.avgTime":"Durchschnittszeit","tools.col.avgTime.tooltip":"Durchschnittliche Ausführungszeit über alle aufgezeichneten Aufrufe.","tools.col.error":"Fehler","tools.filter.tool":"Tool","tools.filter.all":"Alle","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"Dieser Eintrag verwendete ein Pro-exklusives Tool oder eine Action.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"Die angeforderte Pro-Action wurde über einen Basic-Fallback erfolgreich ausgeführt.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"Die angeforderte Pro-Action wurde blockiert und kein Fallback wurde ausgeführt.","tools.badge.err":"FAILED","tools.badge.err.tooltip":"Der Tool-Lauf ist fehlgeschlagen.","tools.status.ok":"OK","tools.status.ok.tooltip":"Der Tool-Lauf wurde erfolgreich abgeschlossen.","tools.tier.mixed.tooltip":"Dieses Tool enthält sowohl Basic- als auch Pro-Actions.","tools.detail.params":"Parameter","tools.detail.params.tooltip":"Eingabeparameter, die an diesen Tool-Lauf übergeben wurden.","tools.detail.result":"Ergebnis","tools.detail.result.tooltip":"Zurückgegebenes Ergebnis-Payload für diesen Tool-Lauf.","tools.detail.requestedCommand":"Angeforderter Befehl","tools.detail.executedCommand":"Ausgeführter Befehl","tools.detail.alternatives":"Alternativen","tools.detail.blockedMessage":"Blockierungsgrund","tools.detail.noFallback":"Kein Fallback","tools.detail.noFallback.value":"Kein Fallback ausgeführt.","tools.detail.errorMessage":"Fehlermeldung","tools.clear.history.title":"Verlauf löschen?","tools.clear.history.message":"Dies entfernt den aktuellen Place-Tools-Verlauf dauerhaft.","tools.clear.statistics.title":"Statistik löschen?","tools.clear.statistics.message":"Dies setzt die aktuelle Place-Tool-Statistik dauerhaft zurück.","tools.detail.error":"Fehler","tools.page.prev":"Zurück","tools.page.prev.tooltip":"Zur vorherigen Seite der Tool-Verlaufsergebnisse.","tools.page.next":"Weiter","tools.page.next.tooltip":"Zur nächsten Seite der Tool-Verlaufsergebnisse.","tools.empty.history":"Keine Verlaufseinträge","tools.empty.stats":"Keine Tool-Statistik","tools.empty.failures":"Keine Fehler","tools.summary.total":"Gesamt","tools.summary.calls":"Aufrufe","tools.summary.sessions":"Sessions","settings.license.title":"Lizenz","settings.license.title.tooltip":"Aktueller Lizenzstatus und Abonnement-Tier.","settings.license.status":"Status","settings.license.status.tooltip":"Aktueller Lizenz-Aktivierungsstatus.","settings.license.tier":"Tier","settings.license.tier.tooltip":"Aktueller Abonnement-Tier für verfügbare WEPPY Dashboard-Funktionen.","settings.license.key":"Schlüssel","settings.license.key.tooltip":"Maskierter Lizenzschlüssel, der derzeit vom Server geladen ist.","settings.license.keyValue.tooltip":"Maskierter Lizenzschlüssel, der derzeit vom Server geladen ist.","settings.license.provider":"Anbieter","settings.license.provider.tooltip":"Lizenzanbieter zur Validierung dieses Schlüssels.","settings.license.providerValue.tooltip":"Lizenzanbieter zur Validierung dieses Schlüssels.","settings.license.active":"Aktiv","settings.license.active.tooltip":"Aktueller Lizenz-Aktivierungsstatus.","settings.license.status.activeCancelPending.tooltip":"Kündigung steht aus, aber Pro-Zugang bleibt bis zum Ende der aktuellen Abrechnungsperiode aktiv.","settings.license.inactive":"Inaktiv","settings.license.inactive.tooltip":"Aktueller Lizenz-Aktivierungsstatus.","settings.license.expired":"Abgelaufen","settings.license.expired.tooltip":"Aktueller Lizenz-Aktivierungsstatus.","settings.license.unavailable":"Lizenzinformationen nicht verfügbar","settings.license.detail.cancelPending":"Kündigung ist geplant. Pro-Zugang bleibt bis zum Ende der aktuellen Abrechnungsperiode aktiv.","settings.license.reset":"Lizenz zurücksetzen","settings.readOnly":"Schreibgeschützt","settings.readOnly.tooltip":"Dieser Abschnitt zeigt Werte, die nicht über das WEPPY Dashboard bearbeitet werden können.","settings.unavailable":"Einstellungen nicht verfügbar","settings.general.title":"Allgemeine Einstellungen","settings.general.title.tooltip":"Hot-Settings, die sofort beim Ändern angewendet werden.","settings.general.liveApply":"Live anwenden","settings.general.liveApply.tooltip":"Änderungen in diesem Abschnitt werden sofort ohne separate Speichern-Schaltfläche angewendet.","settings.general.applied":"Angewendet","settings.general.logLevel":"Log-Level","settings.general.logLevel.tooltip":"Legt fest, wie detailliert das WEPPY Dashboard in seine Logs schreibt.","settings.general.localHistory":"Tool-Verlaufsaufzeichnung","settings.general.localHistory.tooltip":"Speichert lokalen Tool-Ausführungsverlauf für die WEPPY Dashboard-Verlaufsansichten.","settings.general.localStatistics":"Tool-Statistiksammlung","settings.general.localStatistics.tooltip":"Aggregiert lokale Nutzungsstatistiken für WEPPY Dashboard-Berichte.","settings.general.contextCapture":"Kontext-Erfassung","settings.general.contextCapture.tooltip":"Wenn aktiviert, zeichnet das WEPPY Dashboard strukturierte Ausführungskontexte für Changelog- und Playtest-Ansichten auf.","settings.general.requestTimeout":"Anfrage-Timeout","settings.general.requestTimeout.tooltip":"Maximale Wartezeit des WEPPY Dashboards auf eine Anfrage, bevor sie fehlschlägt.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"Anfrage-Timeout wird in Millisekunden gemessen.","settings.cold.title":"Server-Umgebung","settings.cold.title.tooltip":"Schreibgeschützte Server-Umgebungswerte, die beim Start geladen werden.","settings.cold.httpPort.tooltip":"Portnummer, die vom MCP WEPPY Dashboard HTTP-Server verwendet wird.","settings.cold.httpHost.tooltip":"Host-Schnittstelle, an die sich der MCP WEPPY Dashboard HTTP-Server bindet.","settings.cold.dashboardAutoOpen.tooltip":"Steuert, ob das WEPPY Dashboard beim Start des Servers automatisch im Browser geöffnet wird.","settings.cold.dashboardAutoOpen.value.tooltip":"Aktuelles Startverhalten zum Öffnen des WEPPY Dashboards in einem Browser.","settings.cold.hint":"Über Umgebungsvariablen setzen, um diese Werte zu ändern.","settings.language.title":"Sprache","settings.language.title.tooltip":"Wählen Sie, wie der WEPPY Dashboard-Oberflächentext lokalisiert wird.","settings.language.dashboard":"WEPPY Dashboard-Sprache","settings.language.dashboard.tooltip":"Überschreibt die WEPPY Dashboard-Sprache oder folgt der Systemsprache, wenn auf Auto eingestellt.","settings.language.auto":"Auto","overview.l0.title":"MCP-Server getrennt","overview.l0.message":"Der MCP-Server antwortet nicht. Das WEPPY Dashboard versucht automatisch, die Verbindung wiederherzustellen.","overview.l0.step1":"Prüfen Sie, ob der MCP-Server-Prozess läuft","overview.l0.step2":"Starten Sie den MCP-Server-Befehl bei Bedarf neu","overview.l0.reconnecting":"Automatische Wiederverbindung alle 3s...","overview.l0.reconnectBtn":"Erneut verbinden","overview.l0.settingsBtn":"Einstellungen prüfen","overview.l1.pluginGuide":"Roblox Studio Plugin ist nicht verbunden","overview.l1.check1":"Läuft Roblox Studio?","overview.l1.check2":"Ist das WEPPY Plugin installiert?","overview.l1.feedHint":"Änderungen erscheinen hier, sobald das Plugin verbunden ist","overview.metric.server":"Server","overview.metric.server.tooltip":"MCP-Server-Laufzeit und Prozessstatus","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Roblox Studio Plugin-Verbindungs- und Versionsstatus","overview.metric.agent":"Agent","overview.metric.agent.tooltip":"Verbundene KI-Coding-Agenten und ihr Laufzeitstatus","overview.metric.agent.instancesUnit":"Instanzen","overview.metric.sync":"Sync","overview.metric.sync.tooltip":"Aktuelle Studio-zu-Lokal-Sync-Aktivität","overview.metric.noAgent":"Kein Agent","overview.meta.version":"Version","overview.meta.version.tooltip":"Installierte MCP-Server-Version","overview.meta.session":"Session","overview.meta.session.tooltip":"Aktuelle MCP-Session-Kennung","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Betriebssystem-Prozesskennung","overview.meta.uptime":"Uptime","overview.meta.uptime.tooltip":"Verstrichene Zeit seit dem Start des MCP-Servers","overview.feed.title":"Letzte Spieländerungen","overview.feed.empty":"Keine kürzlichen Änderungen","overview.changelog.title":"Session-Änderungszusammenfassung","overview.changelog.entries":"Gesamt","overview.changelog.scripts":"Skripte","overview.changelog.instances":"Instanzen","overview.changelog.properties":"Eigenschaften","overview.changelog.assets":"Assets","overview.tier.title":"Tier-Nutzung","changelog.subtitle":"Spieländerungsverlauf","changelog.filter.all":"Alle","changelog.filter.active":"Aktiv","changelog.filter.completed":"Abgeschlossen","changelog.empty":"Noch keine Changelog-Einträge","changelog.basic.limit.title":"Basic-Vorschau zeigt die letzten 3 Sessions","changelog.basic.limit.body":"Upgraden Sie auf Pro, um die vollständige Changelog-Timeline für diesen Place zu durchsuchen.","changelog.basic.metricLabel":"Sichtbares Changelog / Gesamt","changelog.basic.visible":"sichtbar","changelog.basic.total":"gesamt","changelog.card.active":"Aktiv","changelog.card.active.tooltip":"Diese Session empfängt noch neue Spieländerungen.","changelog.card.completed":"Abgeschlossen","changelog.card.completed.tooltip":"Diese Session ist beendet und es werden keine weiteren Änderungen erwartet.","changelog.card.bootstrapStatus":"Bootstrap","changelog.card.bootstrapStatus.tooltip":"Diese Session enthält nur den anfänglichen Sync-Bootstrap-Snapshot.","changelog.card.inProgress":"in Bearbeitung","changelog.card.noChanges":"Noch keine Änderungen","changelog.card.noChanges.tooltip":"Für diese Session wurden noch keine Spieländerungen extrahiert.","changelog.card.bootstrapSummary":"Anfänglicher Sync-Snapshot","changelog.card.bootstrapSummary.tooltip":"Anfängliche Datei-Sync-Schreibvorgänge werden zu einer einzigen Bootstrap-Snapshot-Zeile zusammengefasst.","changelog.card.sessionIntent":"Session-Absicht","changelog.card.scripts":"Skripte","changelog.card.scripts.tooltip":"In dieser Session vorgenommene Skript-Änderungen.","changelog.card.instances":"Instanzen","changelog.card.instances.tooltip":"Instanz-Erstellungs-, Lösch-, Verschiebe- oder Klonänderungen in dieser Session.","changelog.card.modified":"geändert","changelog.card.created":"erstellt","changelog.card.deleted":"gelöscht","changelog.card.moved":"verschoben","changelog.card.propertiesChanged":"Eigenschaften geändert","changelog.card.propertiesChanged.tooltip":"Für diese Session aufgezeichnete Eigenschaftswertänderungen.","changelog.card.lightingConfigured":"Beleuchtung konfiguriert","changelog.card.lightingConfigured.tooltip":"Beleuchtungs- oder Atmosphäreneinstellungen wurden in dieser Session geändert.","changelog.card.terrainConfigured":"Terrain konfiguriert","changelog.card.terrainConfigured.tooltip":"Terrain-Daten oder Terrain-Einstellungen wurden in dieser Session geändert.","changelog.card.assetsInserted":"Assets eingefügt","changelog.card.assetsInserted.tooltip":"In dieser Session in den Place eingefügte Assets.","changelog.category.script":"Skripte","changelog.category.instance":"Instanzen","changelog.category.property":"Eigenschaften","changelog.category.lighting":"Beleuchtung","changelog.category.terrain":"Terrain","changelog.category.asset":"Assets","changelog.detail.changeSummary":"Änderungszusammenfassung","changelog.detail.changeSummary.tooltip":"Anzahl der extrahierten Spieländerungen, gruppiert nach Kategorie für diese Session.","changelog.detail.changeTimeline":"Änderungs-Timeline","changelog.detail.changeTimeline.tooltip":"Chronologische Liste der extrahierten Spieländerungen für diese Session.","changelog.detail.context.title":"Kontextzusammenfassung","changelog.detail.context.tooltip":"Strukturierter Ausführungskontext, der für diese Changelog-Session erfasst wurde.","changelog.detail.verification.title":"Verifikation","changelog.detail.verification.tooltip":"Mit dieser Changelog-Session verknüpfte Verifikationssignale.","changelog.detail.verification.label":"Ergebnis","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Aufgezeichnet am","changelog.detail.beforeAfter":"Vorher & Nachher","changelog.detail.filterCategory":"Kategorie","changelog.detail.filterCategory.tooltip":"Filtert die Timeline nach einer einzigen Änderungskategorie.","changelog.detail.confidence.exact":"Exakt","changelog.detail.confidence.exact.tooltip":"Sowohl der Vorher- als auch der Nachher-Zustand wurden für diese Änderung bestätigt.","changelog.detail.confidence.partial":"Teilweise","changelog.detail.confidence.partial.tooltip":"Nur ein Teil des Vorher- und Nachher-Zustands konnte für diese Änderung bestätigt werden.","changelog.detail.confidence.afterOnly":"Nur nachher","changelog.detail.confidence.afterOnly.tooltip":"Nur der resultierende Zustand nach der Änderung konnte bestätigt werden.","changelog.detail.confidence.intentOnly":"Nur Absicht","changelog.detail.confidence.intentOnly.tooltip":"Nur die angeforderte Aktion wurde aufgezeichnet, nicht der resultierende Zustand.","changelog.detail.confidence.unknown":"Unbekannt","changelog.detail.confidence.unknown.tooltip":"Diese Änderung konnte aus den verfügbaren Daten nicht zuverlässig klassifiziert werden.","changelog.detail.noChanges":"Keine Änderungen in dieser Kategorie","changelog.detail.backToList":"Zurück zur Liste","changelog.diff.empty":"Kein Diff verfügbar","changelog.diff.unified":"Vereinheitlicht","changelog.diff.sideBySide":"Nebeneinander","changelog.diff.before":"Vorher","changelog.diff.after":"Nachher","sync.overlay.title":"Roblox Studio Plugin erforderlich","sync.overlay.message":"Sync-Status ist verfügbar, sobald das Roblox Studio Plugin verbunden ist.","sync.overlay.check1":"Läuft Roblox Studio?","sync.overlay.check2":"Ist das WEPPY Plugin installiert?","sync.status.title":"Sync-Status","sync.status.title.tooltip":"Aktueller Studio- und lokaler Datei-Sync-Status für diesen Place.","sync.status.forwardOnly":"Nur vorwärts","sync.status.forwardOnly.tooltip":"Basic-Tier erlaubt nur Studio-zu-Lokal-Vorwärts-Sync.","sync.status.place":"Place","sync.status.place.tooltip":"Verbundener Roblox Place-Name und Place-ID.","sync.status.path":"Pfad","sync.status.path.tooltip":"Lokaler Dateisystem-Stamm, der derzeit für die Sync-Ausgabe verwendet wird.","sync.status.instances":"Instanzen","sync.status.instances.tooltip":"Gesamtzahl synchronisierter Roblox-Instanzen, die im lokalen Spiegel verfolgt werden.","sync.status.scripts":"Skripte","sync.status.scripts.tooltip":"Gesamtzahl synchronisierter Skript-Dateien, die derzeit für diesen Place indiziert sind.","sync.status.state":"Status","sync.status.state.tooltip":"Aktueller Laufzeit-Sync-Status, der vom Server gemeldet wird.","sync.directions.title":"Sync-Richtungen","sync.directions.title.tooltip":"Sync-Richtung pro Kategorie und Apply-Verhalten zwischen Lokal und Studio.","sync.directions.type":"Typ","sync.directions.type.tooltip":"Sync-Kategorie, die von dieser Regel betroffen ist.","sync.directions.direction":"Richtung","sync.directions.direction.tooltip":"Ob jede Kategorie von Studio, zu Studio oder in beide Richtungen synchronisiert.","sync.directions.applyMode":"Apply-Modus","sync.directions.applyMode.tooltip":"Wie eingehende Sync-Änderungen für diese Kategorie angewendet werden.","sync.directions.cat.scripts":"Skripte","sync.directions.cat.values":"Werte","sync.directions.cat.containers":"Container","sync.directions.cat.data":"Daten","sync.directions.cat.services":"Services","sync.directions.endpoint.local":"Lokal","sync.directions.endpoint.local.tooltip":"Lokale Dateien auf der Festplatte werden immer auf der linken Seite der Richtungsschiene angezeigt.","sync.directions.endpoint.studio":"Studio","sync.directions.endpoint.studio.tooltip":"Roblox Studio wird immer auf der rechten Seite der Richtungsschiene angezeigt.","sync.directions.mode.manual":"Manuell","sync.directions.mode.manual.tooltip":"Wendet Sync-Änderungen nur an, wenn Sie sie manuell auslösen.","sync.directions.mode.auto":"Auto","sync.directions.mode.auto.tooltip":"Wendet Sync-Änderungen automatisch an, wenn Updates eintreffen.","sync.directions.tooltip.forward.body":"Studio-Änderungen werden nur in lokale Dateien synchronisiert","sync.directions.tooltip.bidirectional.body":"Zwei-Wege-Sync zwischen Lokal und Studio","sync.directions.tooltip.reverse.body":"Lokale Dateiänderungen zu Studio pushen","sync.directions.tooltip.proRequired":"Pro im Basic-Tier erforderlich","sync.directions.dir.forward":"vorwärts","sync.directions.dir.bidirectional":"bidirektional","sync.directions.dir.reverse":"reverse","sync.log.title":"Sync-Protokoll","sync.log.empty":"Noch keine Sync-Ereignisse","sync.log.type.write":"WRITE","sync.log.type.write.tooltip":"Eine neue Sync-Ausgabe wurde auf die Festplatte geschrieben.","sync.log.type.update":"UPDATE","sync.log.type.update.tooltip":"Eine bestehende synchronisierte Datei oder Instanz wurde aktualisiert.","sync.log.type.delete":"DELETE","sync.log.type.delete.tooltip":"Eine synchronisierte Datei oder Instanz wurde entfernt.","sync.log.type.idle":"IDLE","sync.log.type.idle.tooltip":"Ein Sync-Ereignis wurde ohne Dateimutation aufgezeichnet.","sync.upgrade.title":"Vollständigen Sync mit Pro freischalten","sync.upgrade.benefit1":"Bidirektionaler Sync — Dateien bearbeiten, automatisch auf Studio anwenden","sync.upgrade.benefit2":"Reverse-Sync — Dateiänderungen zurück zu Studio pushen","sync.upgrade.benefit3":"Vollständiger Sync-Verlauf und detailliertes Änderungsprotokoll","sync.upgrade.buy":"Upgrade auf Pro","playtest.status.title":"Playtest-Status","playtest.status.title.tooltip":"Aktueller Roblox Playtest-Sessionstatus, der von Studio gemeldet wird.","playtest.status.mode":"Modus","playtest.status.mode.tooltip":"Studio-Playtest-Startmodus für die aktuelle Session.","playtest.status.mode.value.tooltip":"Spezifischer Roblox Studio Playtest-Modus, der derzeit verwendet wird.","playtest.status.mode.play":"Play","playtest.status.mode.run":"Run","playtest.status.mode.server":"Server","playtest.status.mode.edit":"Edit","playtest.status.place.tooltip":"Roblox Place, der derzeit mit dieser Playtest-Session verknüpft ist.","playtest.status.state.running":"Läuft","playtest.status.state.running.tooltip":"Eine Roblox Playtest-Session läuft derzeit.","playtest.status.state.paused":"Pausiert","playtest.status.state.paused.tooltip":"Die aktuelle Roblox Playtest-Session ist pausiert.","playtest.status.state.notRunning":"Läuft nicht","playtest.status.state.notRunning.tooltip":"Es läuft derzeit keine Roblox Playtest-Session.","playtest.control.play":"Play","playtest.control.pause":"Pause","playtest.control.resume":"Resume","playtest.control.stop":"Stop","playtest.history.title":"Testverlauf","playtest.history.title.tooltip":"Aufgezeichnete automatisierte Playtest-Läufe für dieses Projekt.","playtest.history.empty":"Noch keine Testergebnisse","playtest.history.mode":"Modus","playtest.history.mode.tooltip":"Playtest-Modus, der für diesen aufgezeichneten Testlauf verwendet wurde.","playtest.history.status.passed":"Bestanden","playtest.history.status.failed":"Fehlgeschlagen","playtest.history.status.running":"Läuft","playtest.history.status.unknown":"Unbekannt","playtest.history.status.tooltip":"Aufgezeichneter Ergebnisstatus für diesen automatisierten Playtest-Lauf.","playtest.empty.title":"Noch keine Playtest-Ergebnisse","playtest.empty.message":"Testergebnisse erscheinen hier, wenn der KI-Agent automatisierte Tests über system_info.run_test ausführt.","playtest.empty.message.before":"Testergebnisse erscheinen hier, wenn der KI-Agent automatisierte Tests ausführt über","playtest.empty.message.after":".","playtest.empty.runTest.tooltip":"WEPPY Dashboard Automatisierungs-Einstiegspunkt, der Roblox-Playtest-Prüfungen über das system_info-Tool ausführt.","playtest.report.title":"Ausgewählter Bericht","playtest.report.title.tooltip":"Detaillierte Ausgabe für den derzeit ausgewählten automatisierten Playtest-Lauf.","playtest.report.content":"Bericht","playtest.report.content.tooltip":"Markdown-Zusammenfassung für den ausgewählten automatisierten Playtest-Lauf.","playtest.report.logs":"Logs","playtest.report.logs.tooltip":"Ausführungs-Logs, die für den ausgewählten automatisierten Playtest-Lauf erfasst wurden.","playtest.context.contextId":"Kontext-ID","playtest.context.why":"Warum dieser Test ausgeführt wurde","playtest.context.expected":"Erwartet","playtest.context.observed":"Beobachtet","playtest.report.empty":"Kein Berichtsinhalt verfügbar","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest ist eine Pro-exklusive Funktion","playtest.basic.desc":"Steuern Sie Playtesting vom WEPPY Dashboard aus, führen Sie automatisierte Tests aus und sehen Sie detaillierte Testberichte.","playtest.basic.benefit1":"Ein-Klick-Play/Pause/Stop-Steuerung","playtest.basic.benefit2":"Automatisierte Testausführung über KI-Agent","playtest.basic.benefit3":"Testverlauf mit Bestanden/Fehlgeschlagen-Verfolgung","playtest.basic.benefit4":"Detaillierte Markdown-Testberichte","playtest.sample.badge":"Vorschau der Pro-Playtest-Ansicht","playtest.sample.title":"Sie sehen eine Vorschau des Playtest-Bildschirms, der nach dem Upgrade auf Pro verfügbar wird.","playtest.sample.message":"Diese Vorschau verwendet Beispieldaten. Live-Playtest-Steuerung, Verlaufsverwaltung und echte Berichte werden mit Pro freigeschaltet.","playtest.sample.clearDisabled":"Upgraden Sie auf Pro, um den Live-Playtest-Verlauf zu löschen.","playtest.sample.place":"Arena-Vorschau","playtest.sample.history.name":"Beispiel-Arena-Smoke-Test","playtest.sample.context.why":"In die Arena spawnen, den Eröffnungsangriff überleben und prüfen, ob das HUD sofort reagiert.","playtest.sample.context.expected":"Der Spieler spawnt sicher, die Countdown-UI erscheint innerhalb einer Sekunde und die erste Welle startet ohne Fehler.","playtest.sample.context.observed":"Spawn-Schutz hielt, das HUD wurde rechtzeitig aktualisiert und Welle eins wurde ohne Gameplay-Regressionen abgeschlossen.","playtest.sample.report.markdown":`# Beispiel-Arena-Smoke-Test
130
+
131
+ - Spawn-Ablauf: BESTANDEN
132
+ - HUD-Countdown: BESTANDEN
133
+ - Wellen-Bootstrap: BESTANDEN
134
+
135
+ Dies ist eine Beispielvorschau. Upgraden Sie auf Pro, um Live-Playtests auszuführen und echte Berichte zu speichern.`,"playtest.sample.report.logs":`[sample] boot playtest preview
136
+ [sample] spawn protection active
137
+ [sample] hud countdown rendered
138
+ [sample] wave one completed
139
+ [sample] preview report finished`,"sidebar.whatsNew":"Neuigkeiten","header.whatsNew":"Neuigkeiten","header.whatsNew.tooltip":"Neuigkeiten","whatsNew.pageTitle":"Neuigkeiten","whatsNew.pageSubtitle":"Bleiben Sie über MCP-Änderungen auf dem Laufenden","whatsNew.unreadSection":"Ungelesen","whatsNew.allSection":"Alle Ankündigungen","whatsNew.empty":"Noch keine Ankündigungen","whatsNew.newBadge":"NEU","whatsNew.category.release":"Release","whatsNew.category.notice":"Hinweis","whatsNew.category.deprecation":"Veraltet","whatsNew.category.tip":"Tipp"},jm=["en","ko","es","pt-br","ja","id","de"],Ao="auto",vl={en:Sm,ko:km,es:bm,"pt-br":xm,ja:Rm,id:Cm,de:Em},Si="dashboard-locale";function Cl(a){return jm.includes(a)}function _m(){const i=((typeof navigator<"u"?navigator.language:"en")??"en").toLowerCase();return i==="ko"||i.startsWith("ko-")?"ko":i==="pt-br"?"pt-br":i==="ja"||i.startsWith("ja-")?"ja":i==="es"||i.startsWith("es-")?"es":i==="id"||i.startsWith("id-")?"id":i==="de"||i.startsWith("de-")?"de":"en"}function Wd(){if(typeof localStorage<"u"){const a=localStorage.getItem(Si);if(a===Ao)return Ao;if(a&&Cl(a))return a}return Ao}function Fd(a){return a===Ao?_m():a}const yp=T.createContext(null);function Tm({children:a}){const[i,s]=T.useState(Wd),[c,d]=T.useState(()=>Fd(Wd())),p=T.useCallback((m,h)=>{const P=vl[c]??vl.en??{};if(m in P)return P[m];const x=vl.en;return x&&m in x?x[m]:h!==void 0?h:m},[c]),g=T.useCallback(m=>{typeof localStorage<"u"&&(m===Ao?localStorage.removeItem(Si):Cl(m)?localStorage.setItem(Si,m):localStorage.setItem(Si,"en"));const h=m===Ao?Ao:Cl(m)?m:"en";s(h),d(Fd(h))},[]);return T.createElement(yp.Provider,{value:{locale:c,selectedLocale:i,t:p,setLocale:g}},a)}function ir(){const a=T.useContext(yp);if(!a)throw new Error("useLocale must be used within a LocaleProvider");return a}const Am="_container_10isu_2",Mm="_toast_10isu_14",Nm="_slideIn_10isu_1",Lm="_success_10isu_39",zm="_info_10isu_44",Dm="_warning_10isu_49",Im="_error_10isu_54",Pl={container:Am,toast:Mm,slideIn:Nm,success:Lm,info:zm,warning:Dm,error:Im},vp=T.createContext(null),Om=3e3;function Bm({children:a}){const[i,s]=T.useState([]),c=T.useRef(0),d=T.useCallback((p,g="info")=>{const m=c.current++;s(h=>[...h,{id:m,message:p,type:g}]),setTimeout(()=>{s(h=>h.filter(P=>P.id!==m))},Om)},[]);return N.jsxs(vp.Provider,{value:{show:d},children:[a,N.jsx("div",{className:Pl.container,children:i.map(p=>N.jsx("div",{className:`${Pl.toast} ${Pl[p.type]}`,children:p.message},p.id))})]})}function Pp(){const a=T.useContext(vp);return a||{show:()=>{}}}function Wm(){const{level:a}=Il(),{show:i}=Pp(),{t:s}=ir(),c=T.useRef(null);return T.useEffect(()=>{const d=c.current;c.current=a,d!==null&&d!==a&&(d==="disconnected"&&a==="serverOnly"?i(s("toast.serverConnected","MCP 서버 연결됨"),"success"):d==="serverOnly"&&a==="studioConnected"?i(s("toast.pluginConnected","플러그인 연결됨"),"success"):(d==="serverOnly"||d==="studioConnected")&&a==="disconnected"?i(s("toast.serverDisconnected","MCP 서버 연결 끊김"),"error"):d==="studioConnected"&&a==="serverOnly"&&i(s("toast.pluginDisconnected","플러그인 연결 끊김"),"warning"))},[a,i,s]),null}const Fm="_wrapper_1uzud_2",Um="_tooltip_1uzud_8",Vm="_tooltipLeft_1uzud_30",Hm="_tooltipRight_1uzud_35",yi={wrapper:Fm,tooltip:Um,tooltipLeft:Vm,tooltipRight:Hm};function or({text:a,children:i}){const s=T.useRef(null),[c,d]=T.useState("center"),p=a.trim();if(!p)return N.jsx(N.Fragment,{children:i});const g=T.useCallback(()=>{d("center"),window.requestAnimationFrame(()=>{const m=s.current;if(!m)return;const h=m.getBoundingClientRect(),P=8;if(h.left<P){d("left");return}h.right>window.innerWidth-P&&d("right")})},[]);return N.jsxs("span",{className:yi.wrapper,title:p,onMouseEnter:g,children:[i,N.jsx("span",{ref:s,className:[yi.tooltip,c==="left"?yi.tooltipLeft:"",c==="right"?yi.tooltipRight:""].filter(Boolean).join(" "),"data-placement":c,children:p})]})}function Ym(a){return a==="gumroad"?"gumroad":void 0}function qm(a){if(!a||typeof a!="object")return!1;const i=a.status;return(a.tier==="basic"||a.tier==="pro")&&(i==="active"||i==="grace"||i==="invalid"||i==="revoked"||i==="unlicensed"||i==="unknown")}function wp(a){return a&&typeof a=="object"&&"data"in a&&a.data?a.data:a}function Sp(a){if(!a||typeof a!="object")return null;if(qm(a))return a;const i=a;if(typeof i.canUsePro!="boolean"||typeof i.status!="string"||i.status!=="active"&&i.status!=="grace"&&i.status!=="invalid"&&i.status!=="revoked"&&i.status!=="unlicensed"&&i.status!=="unknown")return null;const s=Ym(i.provider);return{tier:i.canUsePro?"pro":"basic",status:i.status,...typeof i.statusDetail=="string"?{statusDetail:i.statusDetail}:{},...typeof i.maskedKey=="string"?{maskedKey:i.maskedKey}:{},...s?{provider:s}:{},refreshRequired:i.refreshRequired===!0,...typeof i.refreshBlockedReason=="string"?{refreshBlockedReason:i.refreshBlockedReason}:{}}}async function Km(a="gumroad"){const i=await pn.get("/api/dashboard/license/status",{provider:a});return Sp(wp(i))}function Ol(a){const i=wp(a),s=i,c=Sp(i),d=typeof(s==null?void 0:s.reasonCode)=="string"?s.reasonCode:void 0;return{ok:(s==null?void 0:s.ok)===!0,license:c?{...c,refreshRequired:c.refreshRequired||d==="missing_session_token",refreshBlockedReason:c.refreshBlockedReason??(d==="missing_session_token"?"missing_session_token":void 0)}:null,message:typeof(s==null?void 0:s.message)=="string"?s.message:null,reasonCode:d,recoverable:(s==null?void 0:s.recoverable)===!0}}async function Rv(a){const i=a.provider??"gumroad",s=await pn.post("/api/dashboard/license/activate",{provider:i,licenseKey:a.licenseKey,clientType:"dashboard"});return Ol(s)}async function Cv(a={}){const i=a.provider??"gumroad",s=await pn.post("/api/dashboard/license/refresh",{provider:i,clientType:"dashboard"});return Ol(s)}async function Ev(a={}){const i=a.provider??"gumroad",s=await pn.post("/api/dashboard/license/reset",{provider:i,clientType:"dashboard"});return Ol(s)}class $m{constructor(i){Rn(this,"source",null);Rn(this,"handlers",new Map);Rn(this,"reconnectTimer",null);Rn(this,"url");this.url=i??`${Ei}/api/dashboard/events`}connect(){this.disconnect(),this.source=new EventSource(this.url),this.source.onopen=()=>{this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null)},this.source.onerror=()=>{var s;(s=this.source)==null||s.close(),this.source=null,this.scheduleReconnect()};const i=["connection","sync","command","game_change","mcp_status","license"];for(const s of i)this.source.addEventListener(s,c=>{var p;const d=JSON.parse(c.data);(p=this.handlers.get(s))==null||p.forEach(g=>g(d))})}on(i,s){return this.handlers.has(i)||this.handlers.set(i,new Set),this.handlers.get(i).add(s),()=>{var c;return(c=this.handlers.get(i))==null?void 0:c.delete(s)}}disconnect(){var i;(i=this.source)==null||i.close(),this.source=null,this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null)}get connected(){var i;return((i=this.source)==null?void 0:i.readyState)===EventSource.OPEN}scheduleReconnect(){this.reconnectTimer||(this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},gm))}}const kp=[{labelKey:"sidebar.overview",route:"/",icon:"📊",minLevel:"disconnected",lazy:()=>Cn(()=>import("./OverviewPage-BHd6yL_8.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]))},{labelKey:"sidebar.connection",route:"/connection",icon:"🔗",minLevel:"disconnected",lazy:()=>Cn(()=>import("./ConnectionPage-BeJEgfmf.js"),__vite__mapDeps([13,1,2,3,14,8,15]))},{labelKey:"sidebar.sync",route:"/sync",icon:"🔄",minLevel:"serverOnly",lazy:()=>Cn(()=>import("./SyncPage-R4Qs9Xt3.js"),__vite__mapDeps([16,1,14,2,3,6,7,10,11,17]))},{labelKey:"sidebar.changelog",route:"/changelog",icon:"📋",minLevel:"serverOnly",lazy:()=>Cn(()=>import("./ChangelogPage-CPm4ft8m.js"),__vite__mapDeps([18,14,6,7,10,11,19]))},{labelKey:"sidebar.playtest",route:"/playtest",icon:"🎮",minLevel:"serverOnly",lazy:()=>Cn(()=>import("./PlaytestPage-BiNJCh4I.js"),__vite__mapDeps([20,6,7,1,14,21]))},{labelKey:"sidebar.tools",route:"/tools",icon:"🔧",minLevel:"serverOnly",lazy:()=>Cn(()=>import("./ToolsPage-DRX93nSV.js"),__vite__mapDeps([22,14,6,7,9,10,11,23]))}],bp=[{labelKey:"sidebar.whatsNew",route:"/whats-new",icon:"🔔",minLevel:"disconnected",lazy:()=>Cn(()=>import("./WhatsNewPage-uLdiNHd0.js"),__vite__mapDeps([24,25]))}],Gm="_sidebar_ap408_2",Qm="_brand_ap408_17",Jm="_brandIcon_ap408_26",Zm="_brandText_ap408_32",Xm="_brandTextPro_ap408_43",ey="_nav_ap408_49",ty="_navLink_ap408_56",ny="_active_ap408_77",oy="_disabled_ap408_84",ay="_icon_ap408_95",ry="_label_ap408_106",iy="_secondaryDivider_ap408_113",sy="_secondaryNav_ap408_120",It={sidebar:Gm,brand:Qm,brandIcon:Jm,brandText:Zm,brandTextPro:Xm,nav:ey,navLink:ty,active:ny,disabled:oy,icon:ay,label:ry,secondaryDivider:iy,secondaryNav:sy},Ud={disconnected:0,serverOnly:1,studioConnected:2};function ly(a,i){return Ud[a]>=Ud[i]}function cy(a,i){return a==="serverOnly"?i("sidebar.gate.l1","MCP server connection required"):a==="studioConnected"?i("sidebar.gate.l2","Roblox Studio plugin connection required"):""}function Vd({item:a}){const{level:i}=Il(),{t:s}=ir(),c=ly(i,a.minLevel),d=N.jsxs(sm,{to:a.route,end:a.route==="/",className:({isActive:p})=>[It.navLink,p?It.active:"",c?"":It.disabled].filter(Boolean).join(" "),onClick:p=>{c||p.preventDefault()},children:[N.jsx("span",{className:It.icon,children:a.icon}),N.jsx("span",{className:It.label,children:s(a.labelKey)})]});return c?d:N.jsx(or,{text:cy(a.minLevel,s),children:d})}function uy(){const[a,i]=T.useState("basic");return T.useEffect(()=>{let s=!1;async function c(){try{const g=await Km("gumroad");!s&&(g!=null&&g.tier)&&i(g.tier)}catch{s||i("basic")}}c();const d=new $m;d.connect();const p=d.on("license",()=>{c()});return()=>{s=!0,p(),d.disconnect()}},[]),N.jsxs("aside",{className:It.sidebar,children:[N.jsxs("div",{className:It.brand,children:[N.jsx("span",{className:It.brandIcon,children:"◈"}),N.jsx("span",{"data-testid":"sidebar-brand-text",className:[It.brandText,a==="pro"?It.brandTextPro:""].filter(Boolean).join(" "),children:"WEPPY"})]}),N.jsx("nav",{className:It.nav,children:kp.map(s=>N.jsx(Vd,{item:s},s.route))}),N.jsx("div",{className:It.secondaryDivider}),N.jsx("nav",{className:It.secondaryNav,children:bp.map(s=>N.jsx(Vd,{item:s},s.route))})]})}async function dy(){return pn.get("/api/dashboard/place-summary")}async function py(){return pn.get("/api/dashboard/sync-root")}async function gy(){return pn.post("/api/dashboard/sync-root/pick")}async function fy(a){return pn.patch("/api/dashboard/sync-root",{projectRoot:a})}const hy=[{id:"2026-04-13-manage-camera-screenshot",date:"2026-04-13",title:{en:"AI agents can now capture Studio Edit-mode screenshots",ko:"AI 에이전트가 Studio 에디트 모드 스크린샷을 찍을 수 있습니다",es:"Los agentes de IA ahora pueden capturar screenshots del Studio en modo Edit","pt-br":"Agentes de IA agora podem capturar screenshots do Studio em modo Edit",ja:"AI エージェントが Studio のエディットモードのスクリーンショットを取得できるようになりました",id:"Agen AI sekarang dapat mengambil screenshot Studio di mode Edit"},body:{en:`WEPPY now lets AI agents capture the current Studio viewport and see what your scene looks like. This helps with visual feedback — layout checks, debugging visuals, describing what's on screen.
140
+
141
+ You can control the screenshot size from the Settings tab under a new Capture section. Smaller sizes cost fewer AI tokens but may hide fine details. This feature works only in Edit mode — screenshots during an active playtest are not supported due to a Roblox platform limitation.
142
+
143
+ You'll need the Studio setting 'Allow Mesh / Image APIs' enabled (Game Settings > Security), and screenshots are a Pro feature. Thanks for using WEPPY!`,ko:`이제 WEPPY를 통해 AI 에이전트가 현재 Studio 뷰포트를 캡처하여 씬의 모습을 직접 볼 수 있습니다. 레이아웃 확인, 시각적 디버깅, 화면 상태 설명 등 시각적 피드백이 필요할 때 유용합니다.
144
+
145
+ Settings 탭의 새로운 Capture 섹션에서 스크린샷 해상도를 조절할 수 있습니다. 해상도를 낮추면 AI 토큰 비용이 줄지만 세부 사항이 덜 보일 수 있습니다. 이 기능은 Edit 모드에서만 동작하며, 플레이테스트 중 캡처는 Roblox 플랫폼 제약으로 지원되지 않습니다.
146
+
147
+ 사용하려면 Studio 설정 'Allow Mesh / Image APIs'(Game Settings > Security)가 켜져 있어야 하며, 스크린샷은 Pro 기능입니다. WEPPY를 사용해 주셔서 감사합니다!`,es:`WEPPY ahora permite que los agentes de IA capturen la viewport actual de Studio y vean cómo luce tu escena. Esto ayuda con retroalimentación visual — revisar el layout, depurar visuales o describir lo que hay en pantalla.
148
+
149
+ Puedes controlar el tamaño de las capturas desde la pestaña Settings, en una nueva sección Capture. Tamaños menores cuestan menos tokens pero pueden ocultar detalles finos. Esta función solo funciona en modo Edit — las capturas durante un playtest activo no están soportadas debido a una limitación de la plataforma Roblox.
150
+
151
+ Necesitarás tener activada la opción 'Allow Mesh / Image APIs' de Studio (Game Settings > Security), y las capturas son una función Pro. ¡Gracias por usar WEPPY!`,"pt-br":`Agora o WEPPY permite que agentes de IA capturem a viewport atual do Studio e vejam como sua cena está. Isso ajuda com feedback visual — conferir layout, depurar visuais ou descrever o que está na tela.
152
+
153
+ Você pode controlar o tamanho das capturas na aba Settings, em uma nova seção Capture. Tamanhos menores custam menos tokens, mas podem esconder detalhes finos. Esse recurso só funciona no modo Edit — capturas durante um playtest ativo não são suportadas por uma limitação da plataforma Roblox.
154
+
155
+ Você precisa ter a opção 'Allow Mesh / Image APIs' do Studio ativada (Game Settings > Security), e as capturas são um recurso Pro. Obrigado por usar o WEPPY!`,ja:`WEPPY を使って AI エージェントが現在の Studio ビューポートをキャプチャし、シーンの見た目を直接確認できるようになりました。レイアウト確認、ビジュアルデバッグ、画面状態の説明など、視覚的なフィードバックが必要な場面で役立ちます。
156
+
157
+ Settings タブの新しい Capture セクションでスクリーンショットのサイズを調整できます。サイズを小さくすると AI トークンコストは減りますが、細部が見えにくくなる場合があります。この機能は Edit モードでのみ動作し、プレイテスト中のキャプチャは Roblox プラットフォームの制約によりサポートされません。
158
+
159
+ Studio 設定の 'Allow Mesh / Image APIs'(Game Settings > Security)が有効になっている必要があり、スクリーンショットは Pro 機能です。WEPPY をご利用いただきありがとうございます!`,id:`WEPPY kini memungkinkan agen AI menangkap viewport Studio saat ini dan melihat bagaimana tampilan scene Anda. Ini membantu memberikan feedback visual — memeriksa layout, men-debug tampilan, atau menjelaskan apa yang ada di layar.
160
+
161
+ Anda dapat mengatur ukuran screenshot dari tab Settings di bagian Capture yang baru. Ukuran lebih kecil menghemat biaya token AI tetapi mungkin menyembunyikan detail halus. Fitur ini hanya berfungsi di mode Edit — screenshot saat playtest aktif tidak didukung karena keterbatasan platform Roblox.
162
+
163
+ Anda perlu mengaktifkan 'Allow Mesh / Image APIs' di Studio (Game Settings > Security), dan screenshot adalah fitur Pro. Terima kasih telah menggunakan WEPPY!`},severity:"info",category:"release"},{id:"2026-04-12-weppy-rebrand-and-sync-root-rename",date:"2026-04-12",title:{en:"Sync folder path changes to weppy-project-sync",ko:"활성 Sync 경로가 weppy-project-sync로 바뀝니다",es:"La ruta activa de Sync cambia a weppy-project-sync","pt-br":"O caminho ativo de Sync muda para weppy-project-sync",ja:"有効なSyncパスがweppy-project-syncに変わります",id:"Path Sync aktif berubah ke weppy-project-sync"},body:{en:"WROX is now shown as WEPPY across the plugin, dashboard, Explorer, install guides, and website. Your active sync path is now `<project root>/weppy-project-sync`.\n\nIf you previously used `<project root>/wrox-project-sync`, WEPPY creates the new folder automatically and migrates your files there the next time project paths are resolved. The old `wrox-project-sync` folder is no longer the active path, and a marker file can remain there so you can confirm where the new path is.\n\nIf you still only see the old folder, restart the MCP server and reconnect Studio once, then use `weppy-project-sync` as the active folder. If everything already looks normal, you do not need to do anything else. We are sorry for the inconvenience.",ko:"플러그인, 대시보드, Explorer, 설치 가이드, 웹사이트 전반에서 WROX 표기가 이제 WEPPY로 바뀝니다. 현재 활성 Sync 경로는 `<프로젝트 루트>/weppy-project-sync`입니다.\n\n이전에 `<프로젝트 루트>/wrox-project-sync`를 사용했다면, 프로젝트 경로를 다시 확인하는 시점에 WEPPY가 새 폴더를 자동으로 만들고 파일을 그쪽으로 옮깁니다. 기존 `wrox-project-sync` 폴더는 더 이상 활성 경로가 아니며, 기존 위치에는 새 경로를 확인할 수 있는 표시 파일만 남을 수 있습니다.\n\n아직도 예전 폴더만 보이면 MCP 서버를 다시 시작하고 Studio를 한 번 다시 연결한 뒤, `weppy-project-sync` 폴더를 현재 작업 경로로 사용해 주세요. 이미 정상적으로 보인다면 추가로 하실 일은 없습니다. 불편을 드려 죄송합니다.",es:"WROX ahora se muestra como WEPPY en el plugin, el dashboard, Explorer, las guías de instalación y el sitio web. Tu ruta activa de Sync ahora es `<project root>/weppy-project-sync`.\n\nSi antes usabas `<project root>/wrox-project-sync`, WEPPY crea la nueva carpeta automáticamente y mueve allí tus archivos la próxima vez que se resuelvan las rutas del proyecto. La carpeta `wrox-project-sync` anterior ya no es la ruta activa, y puede quedar un archivo marcador para indicarte cuál es la nueva ruta.\n\nSi todavía solo ves la carpeta anterior, reinicia el servidor MCP y vuelve a conectar Studio una vez, luego usa `weppy-project-sync` como carpeta activa. Si todo ya se ve normal, no necesitas hacer nada más. Lamentamos las molestias.","pt-br":"WROX agora aparece como WEPPY no plugin, no dashboard, no Explorer, nos guias de instalação e no site. Seu caminho ativo de Sync agora é `<project root>/weppy-project-sync`.\n\nSe antes você usava `<project root>/wrox-project-sync`, o WEPPY cria a nova pasta automaticamente e move seus arquivos para lá na próxima vez que resolver os caminhos do projeto. A pasta `wrox-project-sync` antiga não é mais o caminho ativo, e um arquivo marcador pode permanecer ali para indicar qual é o novo caminho.\n\nSe você ainda vê apenas a pasta antiga, reinicie o servidor MCP e reconecte o Studio uma vez, depois use `weppy-project-sync` como pasta ativa. Se tudo já parecer normal, você não precisa fazer mais nada. Pedimos desculpas pelo transtorno.",ja:"プラグイン、ダッシュボード、Explorer、インストールガイド、Webサイト全体で、WROX表記はWEPPYに変わりました。現在の有効なSyncパスは `<project root>/weppy-project-sync` です。\n\n以前 `<project root>/wrox-project-sync` を使っていた場合、WEPPY はプロジェクトパスを再解決するタイミングで新しいフォルダを自動で作成し、ファイルをそこへ移動します。古い `wrox-project-sync` フォルダはもう有効なパスではなく、新しい場所を確認できるようにマーカーファイルだけが残ることがあります。\n\n古いフォルダしか見えない場合は、MCPサーバーを再起動してStudioを一度再接続し、その後 `weppy-project-sync` を有効なフォルダとして使ってください。すでに正常に見えている場合は、追加で行う作業はありません。ご不便をおかけして申し訳ありません。",id:"WROX sekarang ditampilkan sebagai WEPPY di plugin, dashboard, Explorer, panduan instalasi, dan situs web. Path Sync aktif Anda sekarang adalah `<project root>/weppy-project-sync`.\n\nJika sebelumnya Anda menggunakan `<project root>/wrox-project-sync`, WEPPY akan membuat folder baru secara otomatis dan memindahkan file Anda ke sana saat path proyek berikutnya diselesaikan. Folder `wrox-project-sync` lama tidak lagi menjadi path aktif, dan file penanda bisa tetap ada di sana untuk membantu Anda melihat path yang baru.\n\nJika Anda masih hanya melihat folder lama, restart server MCP dan sambungkan ulang Studio sekali, lalu gunakan `weppy-project-sync` sebagai folder aktif. Jika semuanya sudah terlihat normal, Anda tidak perlu melakukan apa pun lagi. Kami mohon maaf atas ketidaknyamanannya."},severity:"info",category:"release"},{id:"2026-04-12-explorer-property-panel",date:"2026-04-12",title:{en:"WEPPY Explorer now includes a Property Window",ko:"WEPPY Explorer에 Property Window가 추가되었습니다",es:"WEPPY Explorer ahora incluye una Property Window","pt-br":"O WEPPY Explorer agora inclui uma Property Window",ja:"WEPPY ExplorerにProperty Windowが追加されました",id:"WEPPY Explorer sekarang memiliki Property Window"},body:{en:`You can now inspect \`.props.json\` files in a dedicated Property Window inside WEPPY Explorer instead of reading raw JSON by hand.
130
164
 
131
165
  Open Properties from the tree item context menu, or turn on auto-open if you want the Property Window to follow your current tree selection. This should make it easier to review synced values and quickly confirm whether a change is the one you expected.
132
166
 
@@ -204,4 +238,4 @@ Check back here after each update for the latest changes.`,ko:`이제 대시보
204
238
  Vuelve a revisar esta página después de cada actualización para ver los cambios más recientes.`,"pt-br":`Agora você pode ver anúncios do produto MCP, notas de versão e avisos importantes diretamente no dashboard.
205
239
  Volte a esta página após cada atualização para conferir as mudanças mais recentes.`,ja:`これでダッシュボードからMCP製品のお知らせ、リリースノート、重要な通知を直接確認できるようになりました。
206
240
  更新後はこのページで最新の変更内容を確認してください。`,id:`Sekarang Anda bisa melihat pengumuman produk MCP, catatan rilis, dan pemberitahuan penting langsung dari dashboard.
207
- Silakan cek kembali halaman ini setelah setiap pembaruan untuk melihat perubahan terbaru.`},severity:"info",category:"notice"}],Fl="weppy-dashboard.whatsNew.readIds";function xp(){try{const a=localStorage.getItem(Fl);if(!a)return new Set;const i=JSON.parse(a);return Array.isArray(i)?new Set(i.filter(s=>typeof s=="string")):new Set}catch{return new Set}}function hy(a){try{localStorage.setItem(Fl,JSON.stringify([...a]))}catch{}}let la=xp(),Cp=la;const jl=new Set;function Rp(){Cp=new Set(la);for(const a of jl)a()}const wl={subscribe(a){return jl.add(a),()=>{jl.delete(a)}},getSnapshot(){return Cp},markRead(a){let i=!1;for(const s of a)la.has(s)||(la.add(s),i=!0);i&&(hy(la),Rp())}};typeof window<"u"&&window.addEventListener("storage",a=>{a.key===Fl&&(la=xp(),Rp())});function my(){const a=T.useSyncExternalStore(wl.subscribe,wl.getSnapshot),i=gy.filter(s=>!a.has(s.id)).length;return{readSet:a,unreadCount:i,markRead:wl.markRead}}const yy=5e3,vy=5;let ua=[],Vd=null;function jp(){if(ua.length===0)return;const a=ua.splice(0),i=`${ji}/api/dashboard/analytics`,s=JSON.stringify({events:a});fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:s}).catch(()=>{})}function Py(){Vd||(Vd=setInterval(jp,yy))}function Yd(a){ua.push(a),Py(),ua.length>=vy&&jp()}typeof window<"u"&&window.addEventListener("beforeunload",()=>{if(ua.length===0)return;const a=`${ji}/api/dashboard/analytics`,i=JSON.stringify({events:ua.splice(0)});navigator.sendBeacon(a,new Blob([i],{type:"application/json"}))});function Ep(){const a=T.useCallback((s,c)=>{Yd({name:s,params:c})},[]),i=T.useCallback(s=>{Yd({name:"dashboard_page_view",params:{page:s}})},[]);return{trackEvent:a,trackPageView:i}}const wy="_header_uxip6_2",ky="_projectBlock_uxip6_14",Sy="_projectTitleRow_uxip6_21",by="_label_uxip6_28",xy="_projectName_uxip6_37",Cy="_projectActions_uxip6_45",Ry="_projectMetaRow_uxip6_62",jy="_projectMetaLabel_uxip6_70",Ey="_projectMetaValue_uxip6_78",_y="_placeBadge_uxip6_87",Ty="_placeBadgeMuted_uxip6_102",My="_placeIcon_uxip6_106",Ny="_placeSection_uxip6_110",Ly="_placeSectionHeader_uxip6_116",Ay="_placeNotice_uxip6_123",Dy="_routeNotice_uxip6_124",zy="_placeList_uxip6_137",Iy="_placeCard_uxip6_143",Oy="_placeCardCurrent_uxip6_151",Fy="_placeCardTop_uxip6_156",By="_placeCardName_uxip6_163",Wy="_placeCardBadge_uxip6_169",Uy="_placeCardBadgeActive_uxip6_179",Hy="_placeCardBadgeInactive_uxip6_184",Vy="_placeCardMeta_uxip6_189",Yy="_actions_uxip6_196",qy="_iconButton_uxip6_203",Ky="_changeButton_uxip6_236",Ne={header:wy,projectBlock:ky,projectTitleRow:Sy,label:by,projectName:xy,projectActions:Cy,projectMetaRow:Ry,projectMetaLabel:jy,projectMetaValue:Ey,placeBadge:_y,placeBadgeMuted:Ty,placeIcon:My,placeSection:Ny,placeSectionHeader:Ly,placeNotice:Ay,routeNotice:Dy,placeList:zy,placeCard:Iy,placeCardCurrent:Oy,placeCardTop:Fy,placeCardName:By,placeCardBadge:Wy,placeCardBadgeActive:Uy,placeCardBadgeInactive:Hy,placeCardMeta:Vy,actions:Yy,iconButton:qy,changeButton:Ky},$y="_bellWrapper_tae21_2",Qy="_unreadDot_tae21_8",qd={bellWrapper:$y,unreadDot:Qy};function Gy(){const{t:a}=ir(),{unreadCount:i}=my(),{trackEvent:s}=Ep(),{pathname:c}=cn(),d=c.replace(/^\//,"").split("/")[0]||"overview",p=i>0?`${a("header.whatsNew","What's New")} (${i})`:a("header.whatsNew","What's New");return L.jsx(nr,{text:a("header.whatsNew.tooltip","What's New"),children:L.jsxs("span",{className:qd.bellWrapper,children:[L.jsx(zl,{to:"/whats-new","aria-label":p,className:Ne.iconButton,onClick:()=>s("dashboard_click_event",{click_target:"notification_bell",placement:"top_header",page:d}),children:"🔔"}),i>0&&L.jsx("span",{className:qd.unreadDot,"data-testid":"unread-dot","aria-hidden":"true"})]})})}const Jy="_backdrop_1ct9h_1",Xy="_modal_1ct9h_11",Zy="_title_1ct9h_20",ev="_message_1ct9h_26",tv="_actions_1ct9h_32",ov="_cancelButton_1ct9h_39",nv="_confirmButton_1ct9h_40",uo={backdrop:Jy,modal:Xy,title:Zy,message:ev,actions:tv,cancelButton:ov,confirmButton:nv};function kl(a,i){return L.jsxs("div",{style:{display:"grid",gap:6},children:[L.jsx("span",{style:{fontSize:12,fontWeight:700,color:"#9fb0cb"},children:a}),L.jsx("code",{style:{display:"block",overflowWrap:"anywhere",padding:"10px 12px",borderRadius:12,border:"1px solid rgba(162, 179, 207, 0.2)",background:"rgba(10, 15, 25, 0.72)",color:"#f4f7fb",fontSize:12,lineHeight:1.5},children:i})]})}function av(a){const s=/^[A-Z]:\\/i.test(a)||a.includes("\\")?"\\":"/";return`${a.replace(/[\\/]+$/,"")}${s}weppy-project-sync`}function rv({open:a,step:i,selectedProjectRoot:s,studioConnected:c,loading:d=!1,errorMessage:p=null,onClose:f,onPick:m,onApply:h}){const{t:P}=ir();if(!a)return null;const x=s?av(s):"";return L.jsx("div",{className:uo.backdrop,onClick:d?void 0:f,role:"presentation",children:L.jsxs("div",{className:uo.modal,onClick:C=>C.stopPropagation(),role:"dialog","aria-modal":"true","aria-labelledby":"project-root-change-modal-title",children:[L.jsx("h2",{id:"project-root-change-modal-title",className:uo.title,children:i==="initial"?P("header.projectRootModal.initial.title","Change project root"):P("header.projectRootModal.confirm.title","Confirm new project root")}),L.jsx("p",{className:uo.message,children:i==="initial"?c?P("header.projectRootModal.initial.body.connected","MCP will switch to the new project root and resync current Studio contents into the new target."):P("header.projectRootModal.initial.body.disconnected","MCP will switch to the new project root and use the new folder as the next sync target."):P("header.projectRootModal.confirm.body","Review the selected project folder before applying.")}),L.jsxs("div",{style:{display:"grid",gap:14,marginTop:18},children:[i==="initial"?L.jsxs(L.Fragment,{children:[kl(P("header.projectRootModal.initial.nextSyncRoot","New sync target after selection"),P("header.projectRootModal.initial.nextSyncRoot.placeholder","<selected project folder>/weppy-project-sync")),L.jsxs("ul",{style:{margin:0,paddingLeft:18,color:"#c8d2e3",lineHeight:1.6},children:[c?L.jsxs(L.Fragment,{children:[L.jsx("li",{children:P("header.projectRootModal.initial.warningStop","Current sync stops immediately.")}),L.jsx("li",{children:P("header.projectRootModal.initial.warningFreshSync","The current Studio contents will be used to build a fresh full sync in the new target.")})]}):L.jsx("li",{children:P("header.projectRootModal.initial.warningDeferredSync","If Studio is not connected, full resync starts the next time the plugin connects.")}),L.jsx("li",{children:P("header.projectRootModal.initial.warningNoMove","Old sync folders are not moved automatically.")})]})]}):L.jsxs(L.Fragment,{children:[kl(P("header.projectRootModal.confirm.projectRoot","Selected project folder"),s??""),kl(P("header.projectRootModal.confirm.syncRoot","New sync target"),x),L.jsx("p",{className:uo.message,children:P("header.projectRootModal.confirm.warningNoMove","Existing sync folders are not moved automatically.")})]}),p?L.jsx("p",{className:uo.message,style:{marginTop:0,color:"#ffb3b3"},children:p}):null]}),L.jsxs("div",{className:uo.actions,children:[L.jsx("button",{className:uo.cancelButton,onClick:f,disabled:d,children:P("header.projectRootModal.cancel","Cancel")}),i==="initial"?L.jsx("button",{className:uo.confirmButton,onClick:m,disabled:d,children:d?"...":P("header.projectRootModal.pick","Choose folder")}):L.jsx("button",{className:uo.confirmButton,onClick:h,disabled:d||!s,children:d?"...":P("header.projectRootModal.apply","Apply change")})]})]})})}function vi({text:a,children:i}){return L.jsx(nr,{text:a,children:i})}function Kd(a){if(!a)return"";const i=a.split(/[\\/]/).filter(Boolean);return i[i.length-1]??""}function iv(a){var c,d;const i=((c=a==null?void 0:a.mcpInstances)==null?void 0:c.filter(p=>!p.isServer&&p.aiClientName))??[];if(i.length===0){const p=((d=a==null?void 0:a.mcpInstances)==null?void 0:d.find(f=>!!f.aiClientName))??null;return(p==null?void 0:p.projectRoot)??(p==null?void 0:p.cwd)??null}i.sort((p,f)=>(f.lastCommandAt??f.connectedAt)-(p.lastCommandAt??p.connectedAt));const s=i[0];return s.projectRoot??s.cwd??null}function sv(a,i,s){return a??i??s}function lv(a){const i=a.replace(/^\//,"").split("/")[0];return i===""||i==="overview"}function cv(a){return a.replace(/^\//,"").split("/")[0]==="sync"}function uv(a){return a.replace(/^\//,"").split("/")[0]==="playtest"}function dv(a){return a.replace(/^\//,"").split("/")[0]==="changelog"}function pv(a){return a.replace(/^\//,"").split("/")[0]==="whats-new"}function $d(a,i){if(a&&typeof a=="object"&&"message"in a&&typeof a.message=="string"){const s=a.message.trim();if(s.length>0)return s}return i}function fv(){var Mt,Lo,un,fo;const{pathname:a}=cn(),{level:i,status:s}=Il(),{t:c}=ir(),{show:d}=Pp(),[p,f]=T.useState(null),[m,h]=T.useState(null),[P,x]=T.useState(null),[C,M]=T.useState(!1),[O,H]=T.useState(null),[F,U]=T.useState(null),[ge,q]=T.useState(!1),[ue,re]=T.useState(!1),[xe,Ee]=T.useState(null),E=c("header.placeNotConnected","Place not connected"),J=lv(a),ke=cv(a),ie=uv(a),We=dv(a),Te=pv(a);T.useEffect(()=>{let pe=!1;async function Ge(){if(i==="disconnected"){f(null);return}try{const ft=await po.get("/connection-info");pe||f(ft)}catch{pe||f(null)}}return Ge(),()=>{pe=!0}},[i,s==null?void 0:s.sessionId,s==null?void 0:s.connectedClients]),T.useEffect(()=>{let pe=!1;async function Ge(){if(i==="disconnected"){h(null),M(!1);return}h(null),M(!1);try{const ft=await dy();pe||(h(ft),M(!1))}catch{pe||(h(null),M(!0))}}return Ge(),()=>{pe=!0}},[J,i,s==null?void 0:s.sessionId,s==null?void 0:s.connectedClients]),T.useEffect(()=>{let pe=!1;async function Ge(){if(i==="disconnected"){x(null);return}try{const ft=await uy();pe||x(ft)}catch{pe||x(null)}}return Ge(),()=>{pe=!0}},[i,s==null?void 0:s.sessionId,s==null?void 0:s.connectedClients]);const ze=iv(p)??"",he=i==="disconnected"?"blocked":m?"ready":C?"error":"loading",Ze=he==="ready"?(m==null?void 0:m.projectRoot)??"":he==="loading"?c("header.currentProject.loading","Loading project root..."):c("header.currentProject.unavailable","Project root unavailable"),et=he==="ready"?(m==null?void 0:m.projectRoot)??"":J?"":ze,Ie=J||he==="ready"?he==="ready"?Kd(et)||c("header.unknownProject","Unknown project"):he==="loading"?c("header.currentProject.loading","Loading project root..."):c("header.currentProject.unavailable","Project root unavailable"):Kd(et)||c("header.unknownProject","Unknown project"),B=sv((Lo=(Mt=s==null?void 0:s.pluginClients)==null?void 0:Mt[0])==null?void 0:Lo.placeName,(fo=(un=s==null?void 0:s.pluginClients)==null?void 0:un[0])==null?void 0:fo.projectName,E),ae=B===E?c("header.placeNotConnected.tooltip","Place not connected"):c("header.place.tooltip","Connected Roblox place"),Y=P!=null&&P.pluginConnected?P.activePlaceId:(P==null?void 0:P.lastActivePlaceId)??null,k=[...(P==null?void 0:P.places)??[]].sort((pe,Ge)=>{const ft=pe.placeId===Y,An=Ge.placeId===Y;return ft!==An?ft?-1:1:pe.isConnected!==Ge.isConnected?pe.isConnected?-1:1:pe.placeName.localeCompare(Ge.placeName)}),N=k.find(pe=>pe.placeId===Y)??null,de=J?he==="loading"?c("header.currentProject.loading.tooltip","Project root information is still loading"):he==="error"?c("header.currentProject.unavailable.tooltip","Current project root information is unavailable"):c("header.currentProject.tooltip","Currently selected project folder"):c("header.currentProject.tooltip","Currently selected project folder"),ye=he==="ready"?(m==null?void 0:m.projectSyncRoot)??"":he==="loading"?c("header.currentProjectSyncRoot.loading","Loading sync root..."):c("header.currentProjectSyncRoot.unavailable","Sync root unavailable"),me=he==="loading"?c("header.currentProjectSyncRoot.loading.tooltip","Sync root information is still loading"):he==="error"?c("header.currentProjectSyncRoot.unavailable.tooltip","Current sync root information is unavailable"):c("header.currentProjectSyncRoot.tooltip","Current sync root folder for the selected project"),Pe=he==="ready"?(N==null?void 0:N.testsPath)??c("header.testFiles.unavailable","Test files unavailable"):he==="loading"?c("header.currentProjectSyncRoot.loading","Loading sync root..."):c("header.testFiles.unavailable","Test files unavailable"),Re=he==="ready"?c("header.testFiles.tooltip","Current playtest files directory for the selected place"):he==="loading"?c("header.currentProjectSyncRoot.loading.tooltip","Sync root information is still loading"):c("header.currentProjectSyncRoot.unavailable.tooltip","Current sync root information is unavailable"),we=ke?{label:c("header.currentProjectSyncRoot.label","Sync Root"),value:ye,tooltip:me}:ie?{label:c("header.testFiles.label","Test Files"),value:Pe,tooltip:Re}:null,Ue=(ke||ie||We)&&(P==null?void 0:P.pluginConnected)===!1,ct=i==="disconnected"||he!=="ready",Mo=i==="disconnected"?c("header.changeProjectRoot.disabledTooltip.l0","MCP server connection required before project root can be changed"):he==="loading"?c("header.changeProjectRoot.disabledTooltip.loading","Project root information is still loading"):he==="error"?c("header.changeProjectRoot.disabledTooltip.unavailable","Current project root information is unavailable"):c("header.changeProjectRoot.tooltip","Change the current project root"),tt=(pe=!1)=>{!pe&&(ge||ue)||(H(null),U(null),Ee(null))},Tt=()=>{ct||(Ee(null),U(null),H("initial"))},No=async()=>{q(!0),Ee(null);try{const pe=await py();if(pe.cancelled||!pe.projectRoot){tt(!0);return}U(pe.projectRoot),H("confirm")}catch(pe){Ee($d(pe,c("header.projectRootModal.error","Failed to change project root")))}finally{q(!1)}},Ln=async()=>{if(F){re(!0),Ee(null);try{const pe=await fy(F);h(pe),M(!1),tt(!0)}catch(pe){const Ge=$d(pe,c("header.projectRootModal.error","Failed to change project root"));Ee(Ge),d(Ge,"error")}finally{re(!1)}}};return Te?null:L.jsxs(L.Fragment,{children:[L.jsxs("header",{className:Ne.header,children:[L.jsxs("div",{className:Ne.projectBlock,children:[L.jsx("span",{className:Ne.label,children:c("header.currentProject","Current Project")}),L.jsxs("div",{className:Ne.projectTitleRow,children:[L.jsx("strong",{className:Ne.projectName,children:L.jsx(vi,{text:de,children:Ie})}),L.jsx("div",{className:Ne.projectActions,children:L.jsx(nr,{text:Mo,children:L.jsx("span",{children:L.jsx("button",{type:"button",className:Ne.changeButton,onClick:Tt,disabled:ct,children:c("header.changeProjectRoot","Change Project Root")})})})})]}),L.jsxs("span",{className:Ne.projectMetaRow,children:[L.jsx(vi,{text:c("header.currentProject.tooltip","Currently selected project folder"),children:L.jsx("span",{className:Ne.projectMetaLabel,children:c("header.projectRoot.label","Project Root")})}),L.jsx("span",{className:Ne.projectMetaValue,children:Ze})]}),we?L.jsxs("span",{className:Ne.projectMetaRow,children:[L.jsx(vi,{text:we.tooltip,children:L.jsx("span",{className:Ne.projectMetaLabel,children:we.label})}),L.jsx("span",{className:Ne.projectMetaValue,children:we.value})]}):null,L.jsxs("div",{className:Ne.placeSection,children:[L.jsxs("div",{className:Ne.placeSectionHeader,children:[L.jsx("span",{className:Ne.projectMetaLabel,children:c("header.places.title","Places")}),P!=null&&P.pluginConnected?null:L.jsx("span",{className:Ne.placeNotice,children:c("header.places.pluginRequired","Plugin connection required")})]}),L.jsx("div",{className:Ne.placeList,children:k.length>0?k.map(pe=>{const Ge=pe.placeId===Y,ft=P!=null&&P.pluginConnected&&pe.isConnected?c("header.places.active","Active"):c("header.places.inactive","Inactive");return L.jsxs("div",{className:[Ne.placeCard,Ge?Ne.placeCardCurrent:""].filter(Boolean).join(" "),title:`${pe.placeName} (${ft})`,children:[L.jsxs("div",{className:Ne.placeCardTop,children:[L.jsx("span",{className:Ne.placeCardName,children:pe.placeName}),L.jsx("span",{className:[Ne.placeCardBadge,P!=null&&P.pluginConnected&&pe.isConnected?Ne.placeCardBadgeActive:Ne.placeCardBadgeInactive].join(" "),children:ft})]}),L.jsx("div",{className:Ne.placeCardMeta,children:`place_${pe.placeId}`})]},`${pe.placeId}:${pe.placeDirName}`)}):L.jsx(vi,{text:ae,children:L.jsxs("span",{className:[Ne.placeBadge,B===E?Ne.placeBadgeMuted:""].filter(Boolean).join(" "),children:[L.jsx("span",{className:Ne.placeIcon,children:"🎮"}),L.jsx("span",{children:B})]})})}),Ue?L.jsx("div",{className:Ne.routeNotice,children:c("header.places.liveRequired","Plugin connection required for live active place")}):null]})]}),L.jsxs("div",{className:Ne.actions,children:[L.jsx(Gy,{}),L.jsx(nr,{text:c("sidebar.settings","Settings"),children:L.jsx(zl,{to:"/settings","aria-label":c("sidebar.settings","Settings"),className:Ne.iconButton,children:"⚙️"})})]})]}),L.jsx(rv,{open:O!==null,step:O??"initial",selectedProjectRoot:F,studioConnected:i==="studioConnected",loading:ge||ue,errorMessage:xe,onClose:tt,onPick:No,onApply:Ln})]})}const gv="_layout_ya8ln_2",hv="_mainShell_ya8ln_8",mv="_content_ya8ln_17",yv="_loading_ya8ln_25",Pi={layout:gv,mainShell:hv,content:mv,loading:yv};function vv(a){return a.replace(/^\//,"").split("/")[0]||"overview"}function Pv(){const{pathname:a}=cn(),{trackPageView:i}=Ep();return T.useEffect(()=>{i(vv(a))},[a,i]),null}function wv(){return L.jsx(_m,{children:L.jsx(Om,{children:L.jsxs(wm,{children:[L.jsx(Fm,{}),L.jsx(Pv,{}),L.jsxs("div",{className:Pi.layout,children:[L.jsx(cy,{}),L.jsxs("div",{className:Pi.mainShell,children:[L.jsx(fv,{}),L.jsx("main",{className:Pi.content,children:L.jsx(T.Suspense,{fallback:L.jsx("div",{className:Pi.loading,children:"Loading..."}),children:L.jsx(Bh,{})})})]})]})]})})})}function Qd(a){return a.route==="/"?{index:!0,lazy:a.lazy}:{path:a.route.slice(1),lazy:a.lazy}}const kv=$h([{path:"/",element:L.jsx(wv,{}),children:[...Sp.map(Qd),...bp.map(Qd),{path:"changelog/:id",lazy:()=>Ro(()=>import("./ChangelogDetailPage-DRfFUIvC.js"),__vite__mapDeps([26,1,4,5,27]))},{path:"settings",lazy:()=>Ro(()=>import("./SettingsPage-D2ZBQ2KF.js"),__vite__mapDeps([28,1,29]))}]}]);wg.createRoot(document.getElementById("root")).render(L.jsx(om,{router:kv}));export{Mn as A,Km as D,zl as L,jm as S,vi as T,po as a,bv as b,bh as c,Il as d,xv as e,qm as f,Cv as g,Rv as h,Pp as i,L as j,Ep as k,cn as l,nr as m,my as n,gy as o,T as r,uo as s,ir as u};
241
+ Silakan cek kembali halaman ini setelah setiap pembaruan untuk melihat perubahan terbaru.`},severity:"info",category:"notice"}],Bl="weppy-dashboard.whatsNew.readIds";function xp(){try{const a=localStorage.getItem(Bl);if(!a)return new Set;const i=JSON.parse(a);return Array.isArray(i)?new Set(i.filter(s=>typeof s=="string")):new Set}catch{return new Set}}function my(a){try{localStorage.setItem(Bl,JSON.stringify([...a]))}catch{}}let la=xp(),Rp=la;const El=new Set;function Cp(){Rp=new Set(la);for(const a of El)a()}const wl={subscribe(a){return El.add(a),()=>{El.delete(a)}},getSnapshot(){return Rp},markRead(a){let i=!1;for(const s of a)la.has(s)||(la.add(s),i=!0);i&&(my(la),Cp())}};typeof window<"u"&&window.addEventListener("storage",a=>{a.key===Bl&&(la=xp(),Cp())});function yy(){const a=T.useSyncExternalStore(wl.subscribe,wl.getSnapshot),i=hy.filter(s=>!a.has(s.id)).length;return{readSet:a,unreadCount:i,markRead:wl.markRead}}const vy=5e3,Py=5;let ua=[],Hd=null;function Ep(){if(ua.length===0)return;const a=ua.splice(0),i=`${Ei}/api/dashboard/analytics`,s=JSON.stringify({events:a});fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:s}).catch(()=>{})}function wy(){Hd||(Hd=setInterval(Ep,vy))}function Yd(a){ua.push(a),wy(),ua.length>=Py&&Ep()}typeof window<"u"&&window.addEventListener("beforeunload",()=>{if(ua.length===0)return;const a=`${Ei}/api/dashboard/analytics`,i=JSON.stringify({events:ua.splice(0)});navigator.sendBeacon(a,new Blob([i],{type:"application/json"}))});function jp(){const a=T.useCallback((s,c)=>{Yd({name:s,params:c})},[]),i=T.useCallback(s=>{Yd({name:"dashboard_page_view",params:{page:s}})},[]);return{trackEvent:a,trackPageView:i}}const Sy="_header_uxip6_2",ky="_projectBlock_uxip6_14",by="_projectTitleRow_uxip6_21",xy="_label_uxip6_28",Ry="_projectName_uxip6_37",Cy="_projectActions_uxip6_45",Ey="_projectMetaRow_uxip6_62",jy="_projectMetaLabel_uxip6_70",_y="_projectMetaValue_uxip6_78",Ty="_placeBadge_uxip6_87",Ay="_placeBadgeMuted_uxip6_102",My="_placeIcon_uxip6_106",Ny="_placeSection_uxip6_110",Ly="_placeSectionHeader_uxip6_116",zy="_placeNotice_uxip6_123",Dy="_routeNotice_uxip6_124",Iy="_placeList_uxip6_137",Oy="_placeCard_uxip6_143",By="_placeCardCurrent_uxip6_151",Wy="_placeCardTop_uxip6_156",Fy="_placeCardName_uxip6_163",Uy="_placeCardBadge_uxip6_169",Vy="_placeCardBadgeActive_uxip6_179",Hy="_placeCardBadgeInactive_uxip6_184",Yy="_placeCardMeta_uxip6_189",qy="_actions_uxip6_196",Ky="_iconButton_uxip6_203",$y="_changeButton_uxip6_236",Me={header:Sy,projectBlock:ky,projectTitleRow:by,label:xy,projectName:Ry,projectActions:Cy,projectMetaRow:Ey,projectMetaLabel:jy,projectMetaValue:_y,placeBadge:Ty,placeBadgeMuted:Ay,placeIcon:My,placeSection:Ny,placeSectionHeader:Ly,placeNotice:zy,routeNotice:Dy,placeList:Iy,placeCard:Oy,placeCardCurrent:By,placeCardTop:Wy,placeCardName:Fy,placeCardBadge:Uy,placeCardBadgeActive:Vy,placeCardBadgeInactive:Hy,placeCardMeta:Yy,actions:qy,iconButton:Ky,changeButton:$y},Gy="_bellWrapper_tae21_2",Qy="_unreadDot_tae21_8",qd={bellWrapper:Gy,unreadDot:Qy};function Jy(){const{t:a}=ir(),{unreadCount:i}=yy(),{trackEvent:s}=jp(),{pathname:c}=lo(),d=c.replace(/^\//,"").split("/")[0]||"overview",p=i>0?`${a("header.whatsNew","What's New")} (${i})`:a("header.whatsNew","What's New");return N.jsx(or,{text:a("header.whatsNew.tooltip","What's New"),children:N.jsxs("span",{className:qd.bellWrapper,children:[N.jsx(Dl,{to:"/whats-new","aria-label":p,className:Me.iconButton,onClick:()=>s("dashboard_click_event",{click_target:"notification_bell",placement:"top_header",page:d}),children:"🔔"}),i>0&&N.jsx("span",{className:qd.unreadDot,"data-testid":"unread-dot","aria-hidden":"true"})]})})}const Zy="_backdrop_1ct9h_1",Xy="_modal_1ct9h_11",ev="_title_1ct9h_20",tv="_message_1ct9h_26",nv="_actions_1ct9h_32",ov="_cancelButton_1ct9h_39",av="_confirmButton_1ct9h_40",dn={backdrop:Zy,modal:Xy,title:ev,message:tv,actions:nv,cancelButton:ov,confirmButton:av};function Sl(a,i){return N.jsxs("div",{style:{display:"grid",gap:6},children:[N.jsx("span",{style:{fontSize:12,fontWeight:700,color:"#9fb0cb"},children:a}),N.jsx("code",{style:{display:"block",overflowWrap:"anywhere",padding:"10px 12px",borderRadius:12,border:"1px solid rgba(162, 179, 207, 0.2)",background:"rgba(10, 15, 25, 0.72)",color:"#f4f7fb",fontSize:12,lineHeight:1.5},children:i})]})}function rv(a){const s=/^[A-Z]:\\/i.test(a)||a.includes("\\")?"\\":"/";return`${a.replace(/[\\/]+$/,"")}${s}weppy-project-sync`}function iv({open:a,step:i,selectedProjectRoot:s,studioConnected:c,loading:d=!1,errorMessage:p=null,onClose:g,onPick:m,onApply:h}){const{t:P}=ir();if(!a)return null;const x=s?rv(s):"";return N.jsx("div",{className:dn.backdrop,onClick:d?void 0:g,role:"presentation",children:N.jsxs("div",{className:dn.modal,onClick:R=>R.stopPropagation(),role:"dialog","aria-modal":"true","aria-labelledby":"project-root-change-modal-title",children:[N.jsx("h2",{id:"project-root-change-modal-title",className:dn.title,children:i==="initial"?P("header.projectRootModal.initial.title","Change project root"):P("header.projectRootModal.confirm.title","Confirm new project root")}),N.jsx("p",{className:dn.message,children:i==="initial"?c?P("header.projectRootModal.initial.body.connected","MCP will switch to the new project root and resync current Studio contents into the new target."):P("header.projectRootModal.initial.body.disconnected","MCP will switch to the new project root and use the new folder as the next sync target."):P("header.projectRootModal.confirm.body","Review the selected project folder before applying.")}),N.jsxs("div",{style:{display:"grid",gap:14,marginTop:18},children:[i==="initial"?N.jsxs(N.Fragment,{children:[Sl(P("header.projectRootModal.initial.nextSyncRoot","New sync target after selection"),P("header.projectRootModal.initial.nextSyncRoot.placeholder","<selected project folder>/weppy-project-sync")),N.jsxs("ul",{style:{margin:0,paddingLeft:18,color:"#c8d2e3",lineHeight:1.6},children:[c?N.jsxs(N.Fragment,{children:[N.jsx("li",{children:P("header.projectRootModal.initial.warningStop","Current sync stops immediately.")}),N.jsx("li",{children:P("header.projectRootModal.initial.warningFreshSync","The current Studio contents will be used to build a fresh full sync in the new target.")})]}):N.jsx("li",{children:P("header.projectRootModal.initial.warningDeferredSync","If Studio is not connected, full resync starts the next time the plugin connects.")}),N.jsx("li",{children:P("header.projectRootModal.initial.warningNoMove","Old sync folders are not moved automatically.")})]})]}):N.jsxs(N.Fragment,{children:[Sl(P("header.projectRootModal.confirm.projectRoot","Selected project folder"),s??""),Sl(P("header.projectRootModal.confirm.syncRoot","New sync target"),x),N.jsx("p",{className:dn.message,children:P("header.projectRootModal.confirm.warningNoMove","Existing sync folders are not moved automatically.")})]}),p?N.jsx("p",{className:dn.message,style:{marginTop:0,color:"#ffb3b3"},children:p}):null]}),N.jsxs("div",{className:dn.actions,children:[N.jsx("button",{className:dn.cancelButton,onClick:g,disabled:d,children:P("header.projectRootModal.cancel","Cancel")}),i==="initial"?N.jsx("button",{className:dn.confirmButton,onClick:m,disabled:d,children:d?"...":P("header.projectRootModal.pick","Choose folder")}):N.jsx("button",{className:dn.confirmButton,onClick:h,disabled:d||!s,children:d?"...":P("header.projectRootModal.apply","Apply change")})]})]})})}function vi({text:a,children:i}){return N.jsx(or,{text:a,children:i})}function Kd(a){if(!a)return"";const i=a.split(/[\\/]/).filter(Boolean);return i[i.length-1]??""}function sv(a){var c,d;const i=((c=a==null?void 0:a.mcpInstances)==null?void 0:c.filter(p=>!p.isServer&&p.aiClientName))??[];if(i.length===0){const p=((d=a==null?void 0:a.mcpInstances)==null?void 0:d.find(g=>!!g.aiClientName))??null;return(p==null?void 0:p.projectRoot)??(p==null?void 0:p.cwd)??null}i.sort((p,g)=>(g.lastCommandAt??g.connectedAt)-(p.lastCommandAt??p.connectedAt));const s=i[0];return s.projectRoot??s.cwd??null}function lv(a,i,s){return a??i??s}function cv(a){const i=a.replace(/^\//,"").split("/")[0];return i===""||i==="overview"}function uv(a){return a.replace(/^\//,"").split("/")[0]==="sync"}function dv(a){return a.replace(/^\//,"").split("/")[0]==="playtest"}function pv(a){return a.replace(/^\//,"").split("/")[0]==="changelog"}function gv(a){return a.replace(/^\//,"").split("/")[0]==="whats-new"}function $d(a,i){if(a&&typeof a=="object"&&"message"in a&&typeof a.message=="string"){const s=a.message.trim();if(s.length>0)return s}return i}function fv(){var At,Nn,co,gn;const{pathname:a}=lo(),{level:i,status:s}=Il(),{t:c}=ir(),{show:d}=Pp(),[p,g]=T.useState(null),[m,h]=T.useState(null),[P,x]=T.useState(null),[R,A]=T.useState(!1),[O,V]=T.useState(null),[B,U]=T.useState(null),[fe,q]=T.useState(!1),[ue,re]=T.useState(!1),[xe,je]=T.useState(null),j=c("header.placeNotConnected","Place not connected"),J=cv(a),Se=uv(a),ie=dv(a),Fe=pv(a),Te=gv(a);T.useEffect(()=>{let pe=!1;async function Qe(){if(i==="disconnected"){g(null);return}try{const gt=await pn.get("/connection-info");pe||g(gt)}catch{pe||g(null)}}return Qe(),()=>{pe=!0}},[i,s==null?void 0:s.sessionId,s==null?void 0:s.connectedClients]),T.useEffect(()=>{let pe=!1;async function Qe(){if(i==="disconnected"){h(null),A(!1);return}h(null),A(!1);try{const gt=await py();pe||(h(gt),A(!1))}catch{pe||(h(null),A(!0))}}return Qe(),()=>{pe=!0}},[J,i,s==null?void 0:s.sessionId,s==null?void 0:s.connectedClients]),T.useEffect(()=>{let pe=!1;async function Qe(){if(i==="disconnected"){x(null);return}try{const gt=await dy();pe||x(gt)}catch{pe||x(null)}}return Qe(),()=>{pe=!0}},[i,s==null?void 0:s.sessionId,s==null?void 0:s.connectedClients]);const De=sv(p)??"",he=i==="disconnected"?"blocked":m?"ready":R?"error":"loading",Xe=he==="ready"?(m==null?void 0:m.projectRoot)??"":he==="loading"?c("header.currentProject.loading","Loading project root..."):c("header.currentProject.unavailable","Project root unavailable"),et=he==="ready"?(m==null?void 0:m.projectRoot)??"":J?"":De,Ie=J||he==="ready"?he==="ready"?Kd(et)||c("header.unknownProject","Unknown project"):he==="loading"?c("header.currentProject.loading","Loading project root..."):c("header.currentProject.unavailable","Project root unavailable"):Kd(et)||c("header.unknownProject","Unknown project"),W=lv((Nn=(At=s==null?void 0:s.pluginClients)==null?void 0:At[0])==null?void 0:Nn.placeName,(gn=(co=s==null?void 0:s.pluginClients)==null?void 0:co[0])==null?void 0:gn.projectName,j),ae=W===j?c("header.placeNotConnected.tooltip","Place not connected"):c("header.place.tooltip","Connected Roblox place"),Y=P!=null&&P.pluginConnected?P.activePlaceId:(P==null?void 0:P.lastActivePlaceId)??null,S=[...(P==null?void 0:P.places)??[]].sort((pe,Qe)=>{const gt=pe.placeId===Y,Lo=Qe.placeId===Y;return gt!==Lo?gt?-1:1:pe.isConnected!==Qe.isConnected?pe.isConnected?-1:1:pe.placeName.localeCompare(Qe.placeName)}),M=S.find(pe=>pe.placeId===Y)??null,de=J?he==="loading"?c("header.currentProject.loading.tooltip","Project root information is still loading"):he==="error"?c("header.currentProject.unavailable.tooltip","Current project root information is unavailable"):c("header.currentProject.tooltip","Currently selected project folder"):c("header.currentProject.tooltip","Currently selected project folder"),ye=he==="ready"?(m==null?void 0:m.projectSyncRoot)??"":he==="loading"?c("header.currentProjectSyncRoot.loading","Loading sync root..."):c("header.currentProjectSyncRoot.unavailable","Sync root unavailable"),me=he==="loading"?c("header.currentProjectSyncRoot.loading.tooltip","Sync root information is still loading"):he==="error"?c("header.currentProjectSyncRoot.unavailable.tooltip","Current sync root information is unavailable"):c("header.currentProjectSyncRoot.tooltip","Current sync root folder for the selected project"),Pe=he==="ready"?(M==null?void 0:M.testsPath)??c("header.testFiles.unavailable","Test files unavailable"):he==="loading"?c("header.currentProjectSyncRoot.loading","Loading sync root..."):c("header.testFiles.unavailable","Test files unavailable"),Ce=he==="ready"?c("header.testFiles.tooltip","Current playtest files directory for the selected place"):he==="loading"?c("header.currentProjectSyncRoot.loading.tooltip","Sync root information is still loading"):c("header.currentProjectSyncRoot.unavailable.tooltip","Current sync root information is unavailable"),we=Se?{label:c("header.currentProjectSyncRoot.label","Sync Root"),value:ye,tooltip:me}:ie?{label:c("header.testFiles.label","Test Files"),value:Pe,tooltip:Ce}:null,Ue=(Se||ie||Fe)&&(P==null?void 0:P.pluginConnected)===!1,ct=i==="disconnected"||he!=="ready",An=i==="disconnected"?c("header.changeProjectRoot.disabledTooltip.l0","MCP server connection required before project root can be changed"):he==="loading"?c("header.changeProjectRoot.disabledTooltip.loading","Project root information is still loading"):he==="error"?c("header.changeProjectRoot.disabledTooltip.unavailable","Current project root information is unavailable"):c("header.changeProjectRoot.tooltip","Change the current project root"),tt=(pe=!1)=>{!pe&&(fe||ue)||(V(null),U(null),je(null))},Tt=()=>{ct||(je(null),U(null),V("initial"))},Mn=async()=>{q(!0),je(null);try{const pe=await gy();if(pe.cancelled||!pe.projectRoot){tt(!0);return}U(pe.projectRoot),V("confirm")}catch(pe){je($d(pe,c("header.projectRootModal.error","Failed to change project root")))}finally{q(!1)}},No=async()=>{if(B){re(!0),je(null);try{const pe=await fy(B);h(pe),A(!1),tt(!0)}catch(pe){const Qe=$d(pe,c("header.projectRootModal.error","Failed to change project root"));je(Qe),d(Qe,"error")}finally{re(!1)}}};return Te?null:N.jsxs(N.Fragment,{children:[N.jsxs("header",{className:Me.header,children:[N.jsxs("div",{className:Me.projectBlock,children:[N.jsx("span",{className:Me.label,children:c("header.currentProject","Current Project")}),N.jsxs("div",{className:Me.projectTitleRow,children:[N.jsx("strong",{className:Me.projectName,children:N.jsx(vi,{text:de,children:Ie})}),N.jsx("div",{className:Me.projectActions,children:N.jsx(or,{text:An,children:N.jsx("span",{children:N.jsx("button",{type:"button",className:Me.changeButton,onClick:Tt,disabled:ct,children:c("header.changeProjectRoot","Change Project Root")})})})})]}),N.jsxs("span",{className:Me.projectMetaRow,children:[N.jsx(vi,{text:c("header.currentProject.tooltip","Currently selected project folder"),children:N.jsx("span",{className:Me.projectMetaLabel,children:c("header.projectRoot.label","Project Root")})}),N.jsx("span",{className:Me.projectMetaValue,children:Xe})]}),we?N.jsxs("span",{className:Me.projectMetaRow,children:[N.jsx(vi,{text:we.tooltip,children:N.jsx("span",{className:Me.projectMetaLabel,children:we.label})}),N.jsx("span",{className:Me.projectMetaValue,children:we.value})]}):null,N.jsxs("div",{className:Me.placeSection,children:[N.jsxs("div",{className:Me.placeSectionHeader,children:[N.jsx("span",{className:Me.projectMetaLabel,children:c("header.places.title","Places")}),P!=null&&P.pluginConnected?null:N.jsx("span",{className:Me.placeNotice,children:c("header.places.pluginRequired","Plugin connection required")})]}),N.jsx("div",{className:Me.placeList,children:S.length>0?S.map(pe=>{const Qe=pe.placeId===Y,gt=P!=null&&P.pluginConnected&&pe.isConnected?c("header.places.active","Active"):c("header.places.inactive","Inactive");return N.jsxs("div",{className:[Me.placeCard,Qe?Me.placeCardCurrent:""].filter(Boolean).join(" "),title:`${pe.placeName} (${gt})`,children:[N.jsxs("div",{className:Me.placeCardTop,children:[N.jsx("span",{className:Me.placeCardName,children:pe.placeName}),N.jsx("span",{className:[Me.placeCardBadge,P!=null&&P.pluginConnected&&pe.isConnected?Me.placeCardBadgeActive:Me.placeCardBadgeInactive].join(" "),children:gt})]}),N.jsx("div",{className:Me.placeCardMeta,children:`place_${pe.placeId}`})]},`${pe.placeId}:${pe.placeDirName}`)}):N.jsx(vi,{text:ae,children:N.jsxs("span",{className:[Me.placeBadge,W===j?Me.placeBadgeMuted:""].filter(Boolean).join(" "),children:[N.jsx("span",{className:Me.placeIcon,children:"🎮"}),N.jsx("span",{children:W})]})})}),Ue?N.jsx("div",{className:Me.routeNotice,children:c("header.places.liveRequired","Plugin connection required for live active place")}):null]})]}),N.jsxs("div",{className:Me.actions,children:[N.jsx(Jy,{}),N.jsx(or,{text:c("sidebar.settings","Settings"),children:N.jsx(Dl,{to:"/settings","aria-label":c("sidebar.settings","Settings"),className:Me.iconButton,children:"⚙️"})})]})]}),N.jsx(iv,{open:O!==null,step:O??"initial",selectedProjectRoot:B,studioConnected:i==="studioConnected",loading:fe||ue,errorMessage:xe,onClose:tt,onPick:Mn,onApply:No})]})}const hv="_layout_ya8ln_2",mv="_mainShell_ya8ln_8",yv="_content_ya8ln_17",vv="_loading_ya8ln_25",Pi={layout:hv,mainShell:mv,content:yv,loading:vv};function Pv(a){return a.replace(/^\//,"").split("/")[0]||"overview"}function wv(){const{pathname:a}=lo(),{trackPageView:i}=jp();return T.useEffect(()=>{i(Pv(a))},[a,i]),null}function Sv(){return N.jsx(Tm,{children:N.jsx(Bm,{children:N.jsxs(wm,{children:[N.jsx(Wm,{}),N.jsx(wv,{}),N.jsxs("div",{className:Pi.layout,children:[N.jsx(uy,{}),N.jsxs("div",{className:Pi.mainShell,children:[N.jsx(fv,{}),N.jsx("main",{className:Pi.content,children:N.jsx(T.Suspense,{fallback:N.jsx("div",{className:Pi.loading,children:"Loading..."}),children:N.jsx(Wh,{})})})]})]})]})})})}function Gd(a){return a.route==="/"?{index:!0,lazy:a.lazy}:{path:a.route.slice(1),lazy:a.lazy}}const kv=$h([{path:"/",element:N.jsx(Sv,{}),children:[...kp.map(Gd),...bp.map(Gd),{path:"changelog/:id",lazy:()=>Cn(()=>import("./ChangelogDetailPage-C-ROvHGr.js"),__vite__mapDeps([26,1,4,5,27]))},{path:"settings",lazy:()=>Cn(()=>import("./SettingsPage-Cg33y021.js"),__vite__mapDeps([28,1,29]))}]}]);wf.createRoot(document.getElementById("root")).render(N.jsx(nm,{router:kv}));export{Ao as A,$m as D,Dl as L,jm as S,vi as T,pn as a,xv as b,bh as c,Il as d,Rv as e,Km as f,Cv as g,Ev as h,Pp as i,N as j,jp as k,lo as l,or as m,yy as n,hy as o,T as r,dn as s,ir as u};